diff --git a/BUILD.gn b/BUILD.gn
index a7d7e22..a027a2e 100644
--- a/BUILD.gn
+++ b/BUILD.gn
@@ -25,33 +25,35 @@
   deps = [
     "runtime/bin:dart",
     "runtime/bin:dart_bootstrap($host_toolchain)",
-    "runtime/bin:run_vm_tests",
     "runtime/bin:process_test",
-    "runtime/bin:test_extension",
+    "runtime/bin:run_vm_tests",
     "runtime/bin:sample_extension",
+    "runtime/bin:test_extension",
+    "runtime/vm:patched_sdk",
   ]
 }
 
 group("runtime_precompiled") {
   deps = [
-    "runtime/bin:dart_precompiled_runtime",
     "runtime/bin:dart_bootstrap($host_toolchain)",
+    "runtime/bin:dart_precompiled_runtime",
+    "runtime/vm:patched_sdk",
   ]
 }
 
 group("runtime_and_noopt") {
   deps = [
     "runtime/bin:dart",
-    "runtime/bin:dart_noopt",
     "runtime/bin:dart_bootstrap($host_toolchain)",
-    "runtime/bin:run_vm_tests",
+    "runtime/bin:dart_noopt",
     "runtime/bin:process_test",
-    "runtime/bin:test_extension",
+    "runtime/bin:run_vm_tests",
     "runtime/bin:sample_extension",
+    "runtime/bin:test_extension",
+    "runtime/vm:patched_sdk",
   ]
 }
 
-
 action("create_sdk") {
   deps = [
     "runtime/bin:dart",
@@ -68,35 +70,43 @@
   ]
 
   sdk_lib_files = exec_script("tools/list_dart_files.py",
-      [rebase_path("sdk/lib")],
-      "list lines")
+                              [ rebase_path("sdk/lib") ],
+                              "list lines")
 
-  preamble_files = exec_script("tools/list_files.py",
-      ["", rebase_path("sdk/lib/_internal/js_runtime/lib/preambles")],
-      "list lines")
+  preamble_files =
+      exec_script("tools/list_files.py",
+                  [
+                    "",
+                    rebase_path("sdk/lib/_internal/js_runtime/lib/preambles"),
+                  ],
+                  "list lines")
 
   sdk_bin_files = exec_script("tools/list_files.py",
-      ["", rebase_path("sdk/bin")],
-      "list lines")
+                              [
+                                "",
+                                rebase_path("sdk/bin"),
+                              ],
+                              "list lines")
 
   inputs = rebase_path(sdk_lib_files, "", "sdk/lib") +
-           rebase_path(preamble_files, "",  "sdk/lib") +
-           rebase_path(sdk_bin_files, "", "sdk/bin") + [
-    "sdk/lib/dart_client.platform",
-    "sdk/lib/dart_server.platform",
-    "sdk/lib/dart_shared.platform",
-    "$root_gen_dir/dart2js.dart.snapshot",
-    "$root_gen_dir/utils_wrapper.dart.snapshot",
-    "$root_gen_dir/pub.dart.snapshot",
-    "$root_gen_dir/dartanalyzer.dart.snapshot",
-    "$root_gen_dir/dartdevc.dart.snapshot",
-    "$root_gen_dir/dartfmt.dart.snapshot",
-    "$root_gen_dir/analysis_server.dart.snapshot",
-    "$root_gen_dir/dartdoc.dart.snapshot",
-    "$root_gen_dir/spec.sum",
-    "$root_gen_dir/strong.sum",
-    "tools/VERSION"
-  ]
+           rebase_path(preamble_files, "", "sdk/lib") +
+           rebase_path(sdk_bin_files, "", "sdk/bin") +
+           [
+             "sdk/lib/dart_client.platform",
+             "sdk/lib/dart_server.platform",
+             "sdk/lib/dart_shared.platform",
+             "$root_gen_dir/dart2js.dart.snapshot",
+             "$root_gen_dir/utils_wrapper.dart.snapshot",
+             "$root_gen_dir/pub.dart.snapshot",
+             "$root_gen_dir/dartanalyzer.dart.snapshot",
+             "$root_gen_dir/dartdevc.dart.snapshot",
+             "$root_gen_dir/dartfmt.dart.snapshot",
+             "$root_gen_dir/analysis_server.dart.snapshot",
+             "$root_gen_dir/dartdoc.dart.snapshot",
+             "$root_gen_dir/spec.sum",
+             "$root_gen_dir/strong.sum",
+             "tools/VERSION",
+           ]
 
   outputs = [
     "$root_out_dir/dart-sdk/README",
@@ -111,34 +121,33 @@
   ]
 }
 
-
 group("dart2js") {
   deps = [
-    "utils/compiler:dart2js"
+    "utils/compiler:dart2js",
   ]
 }
 
 group("dartanalyzer") {
   deps = [
-    "utils/dartanalyzer"
+    "utils/dartanalyzer",
   ]
 }
 
 group("dartdevc") {
   deps = [
-    "utils/dartdevc"
+    "utils/dartdevc",
   ]
 }
 
 group("dartfmt") {
   deps = [
-    "utils/dartfmt"
+    "utils/dartfmt",
   ]
 }
 
 group("analysis_server") {
   deps = [
-    "utils/analysis_server"
+    "utils/analysis_server",
   ]
 }
 
@@ -147,12 +156,12 @@
 # test suites.
 group("dart2js_bot") {
   deps = [
-    ":create_sdk"
+    ":create_sdk",
   ]
 }
 
 group("samples") {
   deps = [
-    "runtime/bin:sample_extension"
+    "runtime/bin:sample_extension",
   ]
 }
diff --git a/DEPS b/DEPS
index a9a71fb..cb26a1e 100644
--- a/DEPS
+++ b/DEPS
@@ -50,7 +50,7 @@
   "chrome_rev" : "@19997",
   "cli_util_tag" : "@0.0.1+3",
   "code_transformers_tag": "@v0.4.2+3",
-  "collection_tag": "@1.9.1",
+  "collection_tag": "@1.10.1",
   "convert_tag": "@2.0.1",
   "crypto_tag" : "@2.0.1",
   "csslib_tag" : "@0.13.2",
@@ -72,7 +72,7 @@
   "isolate_tag": "@0.2.3",
   "jinja2_rev": "@2222b31554f03e62600cd7e383376a7c187967a1",
   "json_rpc_2_tag": "@2.0.2",
-  "kernel_rev": "@1906e420431656d351a9f4ee9a36b8ca9a4da1db",
+  "kernel_rev": "@11edd6208940d227dc0b2cf87a6518d2508c0858",
   "linter_tag": "@0.1.28",
   "logging_tag": "@0.11.3+1",
   "markdown_tag": "@0.11.0",
diff --git a/build/config/BUILD.gn b/build/config/BUILD.gn
index 93243a1..418e7c1 100644
--- a/build/config/BUILD.gn
+++ b/build/config/BUILD.gn
@@ -5,15 +5,11 @@
 # Debug/release ----------------------------------------------------------------
 
 config("debug") {
-  defines = [
-    "DEBUG",
-  ]
+  defines = [ "DEBUG" ]
 }
 
 config("release") {
-  defines = [
-    "NDEBUG"
-  ]
+  defines = [ "NDEBUG" ]
 }
 
 config("product") {
diff --git a/build/config/android/config.gni b/build/config/android/config.gni
index fdabcb5..3346966 100644
--- a/build/config/android/config.gni
+++ b/build/config/android/config.gni
@@ -21,7 +21,7 @@
 
   # Defines the name the Android build gives to the current host CPU
   # architecture, which is different than the names GN uses.
-  if ((host_cpu == "x64") || (host_cpu == "x86")) {
+  if (host_cpu == "x64" || host_cpu == "x86") {
     android_host_arch = "x86_64"
   } else {
     assert(false, "Need Android toolchain support for your build CPU arch.")
diff --git a/build/config/arm.gni b/build/config/arm.gni
index 429a250..fa9934f1 100644
--- a/build/config/arm.gni
+++ b/build/config/arm.gni
@@ -8,7 +8,7 @@
     # platforms.
     if (current_cpu == "arm") {
       arm_version = 7
-    } else if(current_cpu == "arm64") {
+    } else if (current_cpu == "arm64") {
       arm_version = 8
     } else {
       assert(false, "Unconfigured arm version")
diff --git a/build/config/compiler/BUILD.gn b/build/config/compiler/BUILD.gn
index 873dc4c..52043c8 100644
--- a/build/config/compiler/BUILD.gn
+++ b/build/config/compiler/BUILD.gn
@@ -78,7 +78,7 @@
     cflags_objcc += common_flags
 
     # Linker warnings.
-    if ((current_cpu != "arm") && !is_mac) {
+    if (current_cpu != "arm" && !is_mac) {
       # TODO(jochen): Enable this on chromeos on arm. http://crbug.com/356580
       ldflags += [ "-Wl,--fatal-warnings" ]
     }
@@ -86,9 +86,7 @@
     # Common options for AddressSanitizer, LeakSanitizer, ThreadSanitizer and
     # MemorySanitizer
     if (using_sanitizer) {
-      cflags += [
-        "-gline-tables-only",
-      ]
+      cflags += [ "-gline-tables-only" ]
     }
     if (is_asan) {
       cflags += [ "-fsanitize=address" ]
@@ -199,7 +197,6 @@
         ]
       }
     } else if (current_cpu == "arm") {
-
       cflags += [
         "-march=$arm_arch",
         "-mfloat-abi=$arm_float_abi",
@@ -234,7 +231,7 @@
       if (is_debug || is_release) {
         cflags += [
           "-fexceptions",
-          "-funwind-tables"
+          "-funwind-tables",
         ]
       }
 
@@ -295,9 +292,7 @@
   # Linux/Android common flags setup.
   # ---------------------------------
   if (is_linux || is_android) {
-    cflags += [
-      "-fPIC",
-    ]
+    cflags += [ "-fPIC" ]
 
     ldflags += [
       "-fPIC",
@@ -511,6 +506,7 @@
   default_warning_flags += [
     # Permanent.
     "/wd4091",  # typedef warning from dbghelp.h
+
     # Investigate.
     "/wd4312",  # int to pointer of greater size conversion.
     "/wd4838",  # Narrowing conversion required.
diff --git a/build/config/mac/BUILD.gn b/build/config/mac/BUILD.gn
index 5825641..02aae66 100644
--- a/build/config/mac/BUILD.gn
+++ b/build/config/mac/BUILD.gn
@@ -5,9 +5,7 @@
 import("//build/config/sysroot.gni")
 
 config("sdk") {
-  common_flags = [
-    "-stdlib=libc++",
-  ]
+  common_flags = [ "-stdlib=libc++" ]
 
   cflags = common_flags
   ldflags = common_flags
@@ -20,7 +18,8 @@
     "-L.",
 
     # Forces shared libraries to search for undefined symbols.
-    "-undefined",  "dynamic_lookup",
+    "-undefined",
+    "dynamic_lookup",
 
     # Path for loading shared libraries for unbundled binaries.
     "-Wl,-rpath,@loader_path/.",
diff --git a/build/config/mac/mac_sdk.gni b/build/config/mac/mac_sdk.gni
index b2a89e5..e0a3abc 100644
--- a/build/config/mac/mac_sdk.gni
+++ b/build/config/mac/mac_sdk.gni
@@ -12,7 +12,10 @@
   mac_sdk_path = ""
 }
 
-find_sdk_args = [ "--print_sdk_path", mac_sdk_min ]
+find_sdk_args = [
+  "--print_sdk_path",
+  mac_sdk_min,
+]
 
 # The tool will print the SDK path on the first line, and the version on the
 # second line.
diff --git a/build/config/mac/rules.gni b/build/config/mac/rules.gni
index 66f0de4..54b5a6c 100644
--- a/build/config/mac/rules.gni
+++ b/build/config/mac/rules.gni
@@ -7,10 +7,8 @@
 template("code_sign_mac") {
   assert(defined(invoker.entitlements_path),
          "The path to the entitlements .xcent file")
-  assert(defined(invoker.identity),
-         "The code signing identity")
-  assert(defined(invoker.application_path),
-         "The application to code sign")
+  assert(defined(invoker.identity), "The code signing identity")
+  assert(defined(invoker.application_path), "The application to code sign")
   assert(defined(invoker.deps))
 
   action(target_name) {
@@ -23,7 +21,7 @@
     script = mac_app_script
 
     outputs = [
-      "$_application_path/_CodeSignature/CodeResources"
+      "$_application_path/_CodeSignature/CodeResources",
     ]
 
     args = [
@@ -41,12 +39,9 @@
 }
 
 template("process_nibs_mac") {
-  assert(defined(invoker.sources),
-         "The nib sources must be specified")
-  assert(defined(invoker.module),
-         "The nib module must be specified")
-  assert(defined(invoker.output_dir),
-         "The output directory must be specified")
+  assert(defined(invoker.sources), "The nib sources must be specified")
+  assert(defined(invoker.module), "The nib module must be specified")
+  assert(defined(invoker.output_dir), "The output directory must be specified")
 
   action_foreach(target_name) {
     sources = invoker.sources
@@ -56,7 +51,7 @@
     invoker_out_dir = invoker.output_dir
 
     outputs = [
-      "$root_build_dir/$invoker_out_dir/{{source_name_part}}.nib"
+      "$root_build_dir/$invoker_out_dir/{{source_name_part}}.nib",
     ]
 
     args = [
@@ -76,8 +71,7 @@
          "The source list of resources to copy over")
   assert(defined(invoker.bundle_directory),
          "The directory within the bundle to place the sources in")
-  assert(defined(invoker.app_name),
-         "The name of the application")
+  assert(defined(invoker.app_name), "The name of the application")
 
   _bundle_directory = invoker.bundle_directory
   _app_name = invoker.app_name
@@ -86,7 +80,9 @@
   copy(target_name) {
     set_sources_assignment_filter([])
     sources = _resources
-    outputs = [ "$root_build_dir/$_app_name.app/$_bundle_directory/Contents/Resources/{{source_file_part}}" ]
+    outputs = [
+      "$root_build_dir/$_app_name.app/$_bundle_directory/Contents/Resources/{{source_file_part}}",
+    ]
 
     if (defined(invoker.deps)) {
       deps = invoker.deps
@@ -95,7 +91,6 @@
 }
 
 template("mac_app") {
-
   assert(defined(invoker.deps),
          "Dependencies must be specified for $target_name")
   assert(defined(invoker.info_plist),
@@ -104,6 +99,7 @@
          "The name of Mac application for $target_name")
   assert(defined(invoker.xibs),
          "The list of XIB files must be specified for $target_name")
+
   # assert(defined(invoker.entitlements_path),
   #        "The entitlements path must be specified for $target_name")
   # assert(defined(invoker.code_signing_identity),
@@ -117,20 +113,20 @@
   struct_gen_target_name = target_name + "_struct"
 
   action(struct_gen_target_name) {
-
     script = mac_app_script
 
     sources = []
-    outputs = [ "$root_build_dir/$app_name.app" ]
+    outputs = [
+      "$root_build_dir/$app_name.app",
+    ]
 
     args = [
       "structure",
       "-d",
       rebase_path(root_build_dir),
       "-n",
-      app_name
+      app_name,
     ]
-
   }
 
   # Generate the executable
@@ -147,11 +143,14 @@
   plist_gen_target_name = target_name + "_plist"
 
   action(plist_gen_target_name) {
-
     script = mac_app_script
 
-    sources = [ invoker.info_plist ]
-    outputs = [ "$root_build_dir/plist/$app_name/Info.plist" ]
+    sources = [
+      invoker.info_plist,
+    ]
+    outputs = [
+      "$root_build_dir/plist/$app_name/Info.plist",
+    ]
 
     args = [
       "plist",
@@ -171,7 +170,7 @@
     ]
 
     outputs = [
-      "$root_build_dir/$app_name.app/Contents/{{source_file_part}}"
+      "$root_build_dir/$app_name.app/Contents/{{source_file_part}}",
     ]
 
     deps = [
@@ -186,7 +185,7 @@
     ]
 
     outputs = [
-      "$root_build_dir/$app_name.app/Contents/MacOS/{{source_file_part}}"
+      "$root_build_dir/$app_name.app/Contents/MacOS/{{source_file_part}}",
     ]
 
     deps = [
@@ -204,17 +203,18 @@
   copy_all_target_name = target_name + "_all_copy"
   group(copy_all_target_name) {
     deps = [
-      ":$struct_gen_target_name",
-      ":$copy_plist_gen_target_name",
       ":$copy_bin_target_name",
+      ":$copy_plist_gen_target_name",
       ":$copy_xib_target_name",
+      ":$struct_gen_target_name",
     ]
   }
 
   # Top level group
 
   group(target_name) {
-    deps = [ ":$copy_all_target_name" ]
+    deps = [
+      ":$copy_all_target_name",
+    ]
   }
-
 }
diff --git a/build/config/templates/templates.gni b/build/config/templates/templates.gni
index ae00fca..72d09c0 100644
--- a/build/config/templates/templates.gni
+++ b/build/config/templates/templates.gni
@@ -23,25 +23,28 @@
     testonly = invoker.testonly
   }
 
-  assert(defined(invoker.input),
-      "The input file must be specified")
-  assert(defined(invoker.output),
-      "The output file must be specified")
+  assert(defined(invoker.input), "The input file must be specified")
+  assert(defined(invoker.output), "The output file must be specified")
   assert(defined(invoker.variables),
-      "The variable used for substitution in templates must be specified")
+         "The variable used for substitution in templates must be specified")
 
   variables = invoker.variables
 
   action(target_name) {
-    if(defined(invoker.visibility)) {
+    if (defined(invoker.visibility)) {
       visibility = invoker.visibility
     }
 
     script = "//build/android/gyp/jinja_template.py"
     depfile = "$target_gen_dir/$target_name.d"
 
-    sources = [ invoker.input ]
-    outputs = [ invoker.output, depfile ]
+    sources = [
+      invoker.input,
+    ]
+    outputs = [
+      invoker.output,
+      depfile,
+    ]
 
     args = [
       "--inputs",
@@ -50,7 +53,7 @@
       rebase_path(invoker.output, root_build_dir),
       "--depfile",
       rebase_path(depfile, root_build_dir),
-      "--variables=${variables}"
+      "--variables=${variables}",
     ]
   }
 }
diff --git a/build/toolchain/gcc_toolchain.gni b/build/toolchain/gcc_toolchain.gni
index ecdad86..1175334 100644
--- a/build/toolchain/gcc_toolchain.gni
+++ b/build/toolchain/gcc_toolchain.gni
@@ -201,7 +201,8 @@
       command = "$ld {{ldflags}} -o $unstripped_outfile -Wl,--start-group @$rspfile {{solibs}} -Wl,--end-group $libs_section_prefix {{libs}} $libs_section_postfix"
       if (defined(invoker.strip)) {
         strip = invoker.strip
-        strip_command = "${strip} --strip-unneeded -o $outfile $unstripped_outfile"
+        strip_command =
+            "${strip} --strip-unneeded -o $outfile $unstripped_outfile"
         command += " && " + strip_command
       }
       if (defined(invoker.postlink)) {
diff --git a/build/toolchain/linux/BUILD.gn b/build/toolchain/linux/BUILD.gn
index ae090b0..265eea9 100644
--- a/build/toolchain/linux/BUILD.gn
+++ b/build/toolchain/linux/BUILD.gn
@@ -22,13 +22,13 @@
 }
 
 gcc_toolchain("arm") {
-  cc = "${compiler_prefix}arm-linux-gnueabi-gcc"
-  cxx = "${compiler_prefix}arm-linux-gnueabi-g++"
+  cc = "${compiler_prefix}arm-linux-gnueabihf-gcc"
+  cxx = "${compiler_prefix}arm-linux-gnueabihf-g++"
 
-  ar = "arm-linux-gnueabi-ar"
+  ar = "arm-linux-gnueabihf-ar"
   ld = cxx
-  readelf = "arm-linux-gnueabi-readelf"
-  nm = "arm-linux-gnueabi-nm"
+  readelf = "arm-linux-gnueabihf-readelf"
+  nm = "arm-linux-gnueabihf-nm"
 
   toolchain_cpu = "arm"
   toolchain_os = "linux"
diff --git a/build/win/use_ansi_codes.py b/build/win/use_ansi_codes.py
index cff5f43..b24ae24 100755
--- a/build/win/use_ansi_codes.py
+++ b/build/win/use_ansi_codes.py
@@ -2,7 +2,7 @@
 # Copyright (c) 2015 The Chromium Authors. All rights reserved.
 # Use of this source code is governed by a BSD-style license that can be
 # found in the LICENSE file.
-"""Prints if the the terminal is likely to understand ANSI codes."""
+"""Prints if the terminal is likely to understand ANSI codes."""
 
 import os
 
diff --git a/dart.gyp b/dart.gyp
index c24fbc7..1bbf75e 100644
--- a/dart.gyp
+++ b/dart.gyp
@@ -30,6 +30,7 @@
         'runtime/dart-runtime.gyp:process_test',
         'runtime/dart-runtime.gyp:test_extension',
         'runtime/dart-runtime.gyp:sample_extension',
+        'runtime/dart-runtime.gyp:generate_patched_sdk#host',
       ],
     },
     {
@@ -41,6 +42,7 @@
       'dependencies': [
         'runtime/dart-runtime.gyp:dart_precompiled_runtime',
         'runtime/dart-runtime.gyp:dart_bootstrap#host',
+        'runtime/dart-runtime.gyp:generate_patched_sdk#host',
       ],
     },
     {
@@ -57,8 +59,10 @@
         'runtime/dart-runtime.gyp:process_test',
         'runtime/dart-runtime.gyp:test_extension',
         'runtime/dart-runtime.gyp:sample_extension',
+        'runtime/dart-runtime.gyp:generate_patched_sdk#host',
       ],
     },
+
     {
       'target_name': 'create_sdk',
       'type': 'none',
diff --git a/docs/language/dartLangSpec.tex b/docs/language/dartLangSpec.tex
index d0f62f2..c3aa30a 100644
--- a/docs/language/dartLangSpec.tex
+++ b/docs/language/dartLangSpec.tex
@@ -5970,7 +5970,10 @@
 }
 
 \LMHash{}
-It is a static warning if the type of $e$ may not be assigned to the type of $e_k$. It is a static warning if the last statement of the statement sequence $s_k$ is not a \BREAK{}, \CONTINUE{}, \RETURN{} or \THROW{} statement.
+It is a static warning if the type of $e$ may not be assigned to the type of $e_k$.
+Let $s$ be the last statement of the statement sequence $s_k$.
+If $s$ is a non-empty block statement, let $s$ instead be the last statment of the block statement.
+It is a static warning $s$ is not a \BREAK{}, \CONTINUE{}, \RETHROW{} or \RETURN{} statement or an expression statment where the expression is a \THROW{} expression.
 
 \rationale{
 The behavior of switch cases intentionally differs from the C tradition.  Implicit fall through is a known cause of programming errors and therefore disallowed.  Why not simply break the flow implicitly at the end of every case, rather than requiring explicit code to do so?  This would indeed be cleaner.  It would also be cleaner to insist that each case have a single (possibly compound) statement.  We have chosen not to do so in order to facilitate porting of switch statements from other languages.  Implicitly breaking the control flow at the end of a case would silently alter the meaning of ported code that relied on fall-through, potentially forcing the programmer to deal with subtle bugs. Our design ensures that the difference is immediately brought to the coder's attention.  The programmer will be notified at compile-time if they forget to end a case with a statement that terminates the straight-line control flow. We could make this warning a compile-time error, but refrain from doing so because do not wish to force the programmer to deal with this issue immediately while porting code.  If developers ignore the warning and run their code, a run time error will prevent the program from misbehaving in hard-to-debug ways (at least with respect to this issue).
diff --git a/pkg/BUILD.gn b/pkg/BUILD.gn
index 8dc602f..e1ce11d 100644
--- a/pkg/BUILD.gn
+++ b/pkg/BUILD.gn
@@ -54,17 +54,12 @@
   stamp2_outputs = get_target_outputs(":make_third_party_pkg_files_2_stamp")
   stamp3_outputs = get_target_outputs(":make_third_party_pkg_files_3_stamp")
 
-  inputs = stamp0_outputs +
-           stamp1_outputs +
-           stamp2_outputs +
-           stamp3_outputs
+  inputs = stamp0_outputs + stamp1_outputs + stamp2_outputs + stamp3_outputs
 
   outputs = [
-    "$root_gen_dir/pkg_files.stamp"
+    "$root_gen_dir/pkg_files.stamp",
   ]
 
   script = "../tools/create_timestamp_file.py"
-  args = [
-    rebase_path("$root_gen_dir/pkg_files.stamp"),
-  ]
+  args = [ rebase_path("$root_gen_dir/pkg_files.stamp") ]
 }
diff --git a/pkg/analyzer/lib/src/dart/analysis/driver.dart b/pkg/analyzer/lib/src/dart/analysis/driver.dart
index 6114222..6677376 100644
--- a/pkg/analyzer/lib/src/dart/analysis/driver.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/driver.dart
@@ -14,7 +14,6 @@
 import 'package:analyzer/src/context/context.dart';
 import 'package:analyzer/src/context/source.dart';
 import 'package:analyzer/src/dart/analysis/byte_store.dart';
-import 'package:analyzer/src/dart/error/todo_codes.dart';
 import 'package:analyzer/src/dart/scanner/reader.dart';
 import 'package:analyzer/src/dart/scanner/scanner.dart';
 import 'package:analyzer/src/generated/engine.dart'
@@ -23,7 +22,6 @@
 import 'package:analyzer/src/generated/source.dart';
 import 'package:analyzer/src/generated/utilities_dart.dart';
 import 'package:analyzer/src/summary/api_signature.dart';
-import 'package:analyzer/src/summary/flat_buffers.dart' as fb;
 import 'package:analyzer/src/summary/format.dart';
 import 'package:analyzer/src/summary/idl.dart';
 import 'package:analyzer/src/summary/link.dart';
@@ -110,24 +108,37 @@
   PackageBundle _sdkBundle;
 
   /**
-   * The mapping from the files for which analysis was requested using
-   * [getResult] to the [Completer]s to report the result.
-   */
-  final _requestedFiles = <String, Completer<AnalysisResult>>{};
-
-  /**
    * The set of explicitly analyzed files.
    */
   final _explicitFiles = new LinkedHashSet<String>();
 
   /**
+   * The set of priority files, that should be analyzed sooner.
+   */
+  final _priorityFiles = new LinkedHashSet<String>();
+
+  /**
+   * The mapping from the files for which analysis was requested using
+   * [getResult] to the [Completer]s to report the result.
+   */
+  final _requestedFiles = <String, List<Completer<AnalysisResult>>>{};
+
+  /**
+   * The set of files were reported as changed through [changeFile] and not
+   * checked for actual changes yet.
+   */
+  final _changedFiles = new LinkedHashSet<String>();
+
+  /**
    * The set of files that are currently scheduled for analysis.
    */
   final _filesToAnalyze = new LinkedHashSet<String>();
 
   /**
-   * The mapping of [Uri]s to the mapping of textual URIs to the [Source]
-   * that correspond in the current [_sourceFactory].
+   * Cache of URI resolution. The outer map key is the absolute URI of the
+   * containing file. The inner map key is the URI text of a directive
+   * contained in that file. The inner map value is the [Source] object which
+   * that URI text resolves to.
    */
   final _uriResolutionCache = <Uri, Map<String, Source>>{};
 
@@ -139,18 +150,36 @@
   final _fileContentHashMap = <String, String>{};
 
   /**
-   * Mapping from library URIs to the linked hash of the library.
+   * The API signatures corresponding to [_fileContentHashMap].
+   *
+   * It maps file paths to the unlinked API signatures.
    */
-  final _linkedHashMap = <Uri, String>{};
+  final _fileApiSignatureMap = <String, String>{};
 
   /**
-   * TODO(scheglov) document and improve
+   * Mapping from library URIs to the dependency signature of the library.
    */
-  final _hasWorkStreamController = new StreamController<String>();
+  final _dependencySignatureMap = <Uri, String>{};
+
+  /**
+   * The monitor that is signalled when there is work to do.
+   */
+  final _Monitor _hasWork = new _Monitor();
+
+  /**
+   * The controller for the [status] stream.
+   */
+  final _statusController = new StreamController<AnalysisStatus>();
+
+  /**
+   * The last status sent to the [status] stream.
+   */
+  AnalysisStatus _currentStatus = AnalysisStatus.IDLE;
 
   AnalysisDriver(this._logger, this._resourceProvider, this._byteStore,
-      this._contentCache, this._sourceFactory, this._analysisOptions) {
-    _sdkBundle = _sourceFactory.dartSdk.getLinkedBundle();
+      this._contentCache, SourceFactory sourceFactory, this._analysisOptions)
+      : _sourceFactory = sourceFactory.clone() {
+    _sdkBundle = sourceFactory.dartSdk.getLinkedBundle();
   }
 
   /**
@@ -163,7 +192,10 @@
    * between priority files, nor between priority and non-priority files.
    */
   void set priorityFiles(List<String> priorityPaths) {
-    // TODO(scheglov) implement
+    _priorityFiles.clear();
+    _priorityFiles.addAll(priorityPaths);
+    _transitionToAnalyzing();
+    _hasWork.notify();
   }
 
   /**
@@ -176,8 +208,11 @@
    * "analyzing" and an analysis result is produced for every added file prior
    * to the next time the analysis state transitions to "idle".
    *
-   * Invocation of [addFile] or [changeFile] might result in producing more
-   * analysis results that reflect the new current file state.
+   * At least one analysis result is produced for every file passed to
+   * [addFile] or [changeFile] prior to the next time the analysis state
+   * transitions to "idle", unless the file is later removed from analysis
+   * using [removeFile]. Analysis results for other files are produced only if
+   * the changes affect analysis results of other files.
    *
    * More than one result might be produced for the same file, even if the
    * client does not change the state of the files.
@@ -187,23 +222,72 @@
    */
   Stream<AnalysisResult> get results async* {
     try {
+      PerformanceLogSection analysisSection = null;
       while (true) {
-        // TODO(scheglov) implement state transitioning
-        await for (String why in _hasWorkStreamController.stream) {
-          // Analyze the first file in the general queue.
-          if (_filesToAnalyze.isNotEmpty) {
-            _logger.runTimed('Analyzed ${_filesToAnalyze.length} files', () {
-              while (_filesToAnalyze.isNotEmpty) {
-                String path = _filesToAnalyze.first;
-                _filesToAnalyze.remove(path);
-                _File file = _fileForPath(path);
-                _computeAndPrintErrors(file);
-                // TODO(scheglov) yield the result
-              }
-            });
+        await _hasWork.signal;
+
+        if (analysisSection == null) {
+          analysisSection = _logger.enter('Analyzing');
+        }
+
+        // Verify all changed files one at a time.
+        if (_changedFiles.isNotEmpty) {
+          String path = _removeFirst(_changedFiles);
+          _verifyApiSignatureOfChangedFile(path);
+          // Repeat the processing loop.
+          _hasWork.notify();
+          continue;
+        }
+
+        // Analyze a requested file.
+        if (_requestedFiles.isNotEmpty) {
+          String path = _requestedFiles.keys.first;
+          AnalysisResult result = _computeAnalysisResult(path, withUnit: true);
+          // Notify the completers.
+          _requestedFiles.remove(path).forEach((completer) {
+            completer.complete(result);
+          });
+          // Remove from to be analyzed and produce it now.
+          _filesToAnalyze.remove(path);
+          yield result;
+          // Repeat the processing loop.
+          _hasWork.notify();
+          continue;
+        }
+
+        // Analyze a priority file.
+        if (_priorityFiles.isNotEmpty) {
+          bool analyzed = false;
+          for (String path in _priorityFiles) {
+            if (_filesToAnalyze.remove(path)) {
+              analyzed = true;
+              AnalysisResult result =
+                  _computeAnalysisResult(path, withUnit: true);
+              yield result;
+              break;
+            }
+          }
+          // Repeat the processing loop.
+          if (analyzed) {
+            _hasWork.notify();
+            continue;
           }
         }
-        // TODO(scheglov) implement
+
+        // Analyze a general file.
+        if (_filesToAnalyze.isNotEmpty) {
+          String path = _removeFirst(_filesToAnalyze);
+          AnalysisResult result = _computeAnalysisResult(path, withUnit: false);
+          yield result;
+          // Repeat the processing loop.
+          _hasWork.notify();
+          continue;
+        }
+
+        // There is nothing to do.
+        analysisSection.exit();
+        analysisSection = null;
+        _transitionToIdle();
       }
     } finally {
       print('The stream was cancelled.');
@@ -211,6 +295,11 @@
   }
 
   /**
+   * Return the stream that produces [AnalysisStatus] events.
+   */
+  Stream<AnalysisStatus> get status => _statusController.stream;
+
+  /**
    * Add the file with the given [path] to the set of files to analyze.
    *
    * The [path] must be absolute and normalized.
@@ -220,7 +309,8 @@
   void addFile(String path) {
     _explicitFiles.add(path);
     _filesToAnalyze.add(path);
-    _hasWorkStreamController.add('do it!');
+    _transitionToAnalyzing();
+    _hasWork.notify();
   }
 
   /**
@@ -242,13 +332,12 @@
    * [changeFile] invocation.
    */
   void changeFile(String path) {
-    // TODO(scheglov) Don't clear, schedule API signature validation.
-    _fileContentHashMap.clear();
-    _linkedHashMap.clear();
-    _filesToAnalyze.add(path);
-    _filesToAnalyze.addAll(_explicitFiles);
-    // TODO(scheglov) name?!
-    _hasWorkStreamController.add('do it!');
+    _changedFiles.add(path);
+    if (_explicitFiles.contains(path)) {
+      _filesToAnalyze.add(path);
+    }
+    _transitionToAnalyzing();
+    _hasWork.notify();
   }
 
   /**
@@ -267,7 +356,11 @@
    */
   Future<AnalysisResult> getResult(String path) {
     var completer = new Completer<AnalysisResult>();
-    _requestedFiles[path] = completer;
+    _requestedFiles
+        .putIfAbsent(path, () => <Completer<AnalysisResult>>[])
+        .add(completer);
+    _transitionToAnalyzing();
+    _hasWork.notify();
     return completer.future;
   }
 
@@ -286,101 +379,104 @@
   }
 
   /**
-   * TODO(scheglov) replace with actual [AnalysisResult] computing.
+   * TODO(scheglov) see [_addToStoreUnlinked]
    */
-  List<String> _computeAndPrintErrors(_File file) {
-    // TODO(scheglov) Computing resolved unit fails for these units.
-    // pkg/analyzer/lib/plugin/embedded_resolver_provider.dart
-    // pkg/analyzer/lib/plugin/embedded_resolver_provider.dart
-    if (file.path.endsWith(
-            'pkg/analyzer/lib/plugin/embedded_resolver_provider.dart') ||
-        file.path.endsWith('pkg/analyzer/lib/source/embedder.dart') ||
-        file.path.endsWith('pkg/analyzer/lib/src/generated/ast.dart') ||
-        file.path.endsWith('pkg/analyzer/lib/src/generated/element.dart') ||
-        file.path
-            .endsWith('pkg/analyzer/lib/src/generated/element_handle.dart') ||
-        file.path.endsWith('pkg/analyzer/lib/src/generated/error.dart') ||
-        file.path.endsWith('pkg/analyzer/lib/src/generated/scanner.dart') ||
-        file.path.endsWith('pkg/analyzer/lib/src/generated/sdk_io.dart') ||
-        file.path.endsWith('pkg/analyzer/lib/src/generated/visitors.dart') ||
-        file.path.endsWith('pkg/analyzer/test/generated/constant_test.dart') ||
-        file.path.endsWith('pkg/analyzer/test/source/embedder_test.dart')) {
-      return [];
+  void _addToStoreLinked(
+      SummaryDataStore store, String uri, LinkedLibrary linked) {
+    store.linkedMap[uri] = linked;
+  }
+
+  /**
+   * TODO(scheglov) The existing [SummaryDataStore.addBundle] uses
+   * [PackageBundle.unlinkedUnitUris] to add [PackageBundle.unlinkedUnits].
+   * But we store unlinked bundles with the hash of the file content. This
+   * means that when two files are the same, but have different URIs, we
+   * add [UnlinkedUnit] with wrong URI.
+   *
+   * We need to clean this up.
+   */
+  void _addToStoreUnlinked(
+      SummaryDataStore store, String uri, UnlinkedUnit unlinked) {
+    store.unlinkedMap[uri] = unlinked;
+  }
+
+  /**
+   * Return the cached or newly computed analysis result of the file with the
+   * given [path].
+   *
+   * The result will have the fully resolved unit and will always be newly
+   * compute only if [withUnit] is `true`.
+   */
+  AnalysisResult _computeAnalysisResult(String path, {bool withUnit: false}) {
+    Source source = _sourceForPath(path);
+
+    // If we don't need the fully resolved unit, check for the cached result.
+    if (!withUnit) {
+      _File file = new _File.forLinking(this, source);
+      // Prepare the key for the cached result.
+      String key = _getResolvedUnitKey(file);
+      if (key == null) {
+        _logger.run('Compute the dependency hash for $source', () {
+          _createLibraryContext(file);
+          key = _getResolvedUnitKey(file);
+        });
+      }
+      // Check for the cached result.
+      AnalysisResult result = _getCachedAnalysisResult(file, key);
+      if (result != null) {
+        return result;
+      }
     }
 
-    List<String> errorStrings = _logger.run('Compute errors $file', () {
-      LibraryContext libraryContext = _createLibraryContext(file);
-
-      String errorsKey;
-      {
-        ApiSignature signature = new ApiSignature();
-        signature.addString(libraryContext.node.linkedHash);
-        signature.addString(file.contentHash);
-        errorsKey = '${signature.toHex()}.errors';
-      }
-
-      {
-        List<int> bytes = _byteStore.get(errorsKey);
-        if (bytes != null) {
-          fb.BufferContext bp = new fb.BufferContext.fromBytes(bytes);
-          int table = bp.derefObject(0);
-          return const fb.ListReader<String>(const fb.StringReader())
-              .vTableGet(bp, table, 0);
-        }
-      }
-
+    // We need the fully resolved unit, or the result is not cached.
+    return _logger.run('Compute analysis result for $source', () {
+      // Still no result, compute and store it.
+      _File file = new _File.forResolution(this, source);
+      _LibraryContext libraryContext = _createLibraryContext(file);
       AnalysisContext analysisContext = _createAnalysisContext(libraryContext);
-      analysisContext.setContents(file.source, file.content);
       try {
-        // Compute resolved unit.
-//        _logger.runTimed('Computed resolved unit', () {
-//          analysisContext.resolveCompilationUnit2(
-//              libraryContext.file.source, libraryContext.file.source);
-//        });
-        // Compute errors.
-        List<AnalysisError> errors;
-        try {
-          errors = _logger.runTimed('Computed errors', () {
-            return analysisContext.computeErrors(file.source);
-          });
-        } catch (e, st) {
-          // TODO(scheglov) why does it fail?
-          // Caused by Bad state: Unmatched TypeParameterElementImpl T
-          errors = [];
-        }
-        List<String> errorStrings = errors
-            .where((error) => error.errorCode is! TodoCode)
-            .map((error) => error.toString())
-            .toList();
+        analysisContext.setContents(file.source, file.content);
+        // TODO(scheglov) Add support for parts.
+        CompilationUnit resolvedUnit = withUnit
+            ? analysisContext.resolveCompilationUnit2(file.source, file.source)
+            : null;
+        List<AnalysisError> errors = analysisContext.computeErrors(file.source);
+
+        // Store the result into the cache.
         {
-          fb.Builder fbBuilder = new fb.Builder();
-          var exportedOffset = fbBuilder.writeList(errorStrings
-              .map((errorStr) => fbBuilder.writeString(errorStr))
-              .toList());
-          fbBuilder.startTable();
-          fbBuilder.addOffset(0, exportedOffset);
-          var offset = fbBuilder.endTable();
-          List<int> bytes = fbBuilder.finish(offset, 'CErr');
-          _byteStore.put(errorsKey, bytes);
+          List<int> bytes = new AnalysisDriverResolvedUnitBuilder(
+                  errors: errors
+                      .map((error) => new AnalysisDriverUnitErrorBuilder(
+                          offset: error.offset,
+                          length: error.length,
+                          uniqueName: error.errorCode.uniqueName,
+                          message: error.message,
+                          correction: error.correction))
+                      .toList())
+              .toBuffer();
+          String key = _getResolvedUnitKey(file);
+          _byteStore.put(key, bytes);
         }
 
-        return errorStrings;
+        // Return the result, full or partial.
+        _logger.writeln('Computed new analysis result.');
+        return new AnalysisResult(
+            file.path,
+            file.uri,
+            withUnit ? file.content : null,
+            file.contentHash,
+            resolvedUnit,
+            errors);
       } finally {
         analysisContext.dispose();
       }
     });
-
-    if (errorStrings.isNotEmpty) {
-      errorStrings.forEach((errorString) => print('\t$errorString'));
-    } else {
-      print('\tNO ERRORS');
-    }
-    return errorStrings;
   }
 
-  AnalysisContext _createAnalysisContext(LibraryContext libraryContext) {
+  AnalysisContext _createAnalysisContext(_LibraryContext libraryContext) {
     AnalysisContextImpl analysisContext =
         AnalysisEngine.instance.createAnalysisContext();
+    analysisContext.analysisOptions = _analysisOptions;
 
     analysisContext.sourceFactory =
         new SourceFactory((_sourceFactory as SourceFactoryImpl).resolvers);
@@ -392,35 +488,49 @@
   }
 
   /**
-   * Return the content in which the library represented by the given
+   * Return the context in which the library represented by the given
    * [libraryFile] should be analyzed it.
    *
-   * TODO(scheglov) We often don't need [SummaryDataStore], only linked hash.
+   * TODO(scheglov) We often don't need [SummaryDataStore], only dependency
+   * signature.
    */
-  LibraryContext _createLibraryContext(_File libraryFile) {
-    Map<String, _LibraryNode> nodes = <String, _LibraryNode>{};
-
+  _LibraryContext _createLibraryContext(_File libraryFile) {
     return _logger.run('Create library context', () {
+      Map<String, _LibraryNode> nodes = <String, _LibraryNode>{};
       SummaryDataStore store = new SummaryDataStore(const <String>[]);
       store.addBundle(null, _sdkBundle);
 
-      void createLibraryNodes(_File libraryFile) {
+      _LibraryNode createLibraryNodes(_File libraryFile) {
         Uri libraryUri = libraryFile.uri;
-        if (libraryUri.scheme == 'dart') {
-          return;
-        }
-        String uriStr = libraryUri.toString();
-        if (!nodes.containsKey(uriStr)) {
-          _LibraryNode node = new _LibraryNode(this, nodes, libraryUri);
-          nodes[uriStr] = node;
-          ReferencedUris referenced = _getReferencedUris(libraryFile);
 
-          // Append unlinked bundles.
+        // URIs with the 'dart:' scheme are served from the SDK bundle.
+        if (libraryUri.scheme == 'dart') {
+          return null;
+        }
+
+        String libraryUriStr = libraryUri.toString();
+        _LibraryNode node = nodes[libraryUriStr];
+        if (node == null) {
+          node = new _LibraryNode(this, nodes, libraryUri);
+          nodes[libraryUriStr] = node;
+
+          // Append the defining unit.
+          _ReferencedUris referenced;
+          {
+            PackageBundle bundle = libraryFile.unlinked;
+            UnlinkedUnit unlinked = bundle.unlinkedUnits.single;
+            referenced = new _ReferencedUris(unlinked);
+            node.unlinkedBundles.add(bundle);
+            _addToStoreUnlinked(store, libraryUriStr, unlinked);
+          }
+
+          // Append parts.
           for (String uri in referenced.parted) {
             _File file = libraryFile.resolveUri(uri);
-            PackageBundle unlinked = _getUnlinked(file);
-            node.unlinkedBundles.add(unlinked);
-            store.addBundle(null, unlinked);
+            PackageBundle bundle = file.unlinked;
+            UnlinkedUnit unlinked = bundle.unlinkedUnits.single;
+            node.unlinkedBundles.add(bundle);
+            _addToStoreUnlinked(store, file.uri.toString(), unlinked);
           }
 
           // Create nodes for referenced libraries.
@@ -433,31 +543,34 @@
             createLibraryNodes(file);
           }
         }
+
+        // Done with this node.
+        return node;
       }
 
-      _logger.runTimed2(() {
-        createLibraryNodes(libraryFile);
-      }, () => 'Computed ${nodes.length} nodes');
-      _LibraryNode libraryNode = nodes[libraryFile.uri.toString()];
+      _LibraryNode libraryNode = _logger.run('Compute library nodes', () {
+        return createLibraryNodes(libraryFile);
+      });
 
       Set<String> libraryUrisToLink = new Set<String>();
-      int numberOfNodesWithLinked = 0;
-      _logger.runTimed2(() {
+      _logger.run('Load linked bundles', () {
         for (_LibraryNode node in nodes.values) {
-          String key = '${node.linkedHash}.linked';
+          String key = '${node.dependencySignature}.linked';
           List<int> bytes = _byteStore.get(key);
           if (bytes != null) {
             PackageBundle linked = new PackageBundle.fromBuffer(bytes);
-            store.addBundle(null, linked);
-            numberOfNodesWithLinked++;
+            _addToStoreLinked(
+                store, node.uri.toString(), linked.linkedLibraries.single);
           } else {
             libraryUrisToLink.add(node.uri.toString());
           }
         }
-      }, () => 'Loaded $numberOfNodesWithLinked linked bundles');
+        int numOfLoaded = nodes.length - libraryUrisToLink.length;
+        _logger.writeln('Loaded $numOfLoaded linked bundles.');
+      });
 
       Map<String, LinkedLibraryBuilder> linkedLibraries = {};
-      _logger.runTimed2(() {
+      _logger.run('Link bundles', () {
         linkedLibraries = link(libraryUrisToLink, (String uri) {
           LinkedLibrary linkedLibrary = store.linkedMap[uri];
           if (linkedLibrary == null) {
@@ -471,11 +584,12 @@
           }
           return unlinkedUnit;
         }, (_) => null, _analysisOptions.strongMode);
-      }, () => 'Linked ${linkedLibraries.length} bundles');
+        _logger.writeln('Linked ${linkedLibraries.length} bundles.');
+      });
 
       linkedLibraries.forEach((uri, linkedBuilder) {
         _LibraryNode node = nodes[uri];
-        String key = '${node.linkedHash}.linked';
+        String key = '${node.dependencySignature}.linked';
         List<int> bytes;
         {
           PackageBundleAssembler assembler = new PackageBundleAssembler();
@@ -483,130 +597,115 @@
           bytes = assembler.assemble().toBuffer();
         }
         PackageBundle linked = new PackageBundle.fromBuffer(bytes);
-        store.addBundle(null, linked);
+        _addToStoreLinked(store, uri, linked.linkedLibraries.single);
         _byteStore.put(key, bytes);
       });
 
-      return new LibraryContext(libraryFile, libraryNode, store);
+      return new _LibraryContext(libraryFile, libraryNode, store);
     });
   }
 
   /**
-   * Return the [_File] for the given [path] in [_sourceFactory].
+   * If we know the result [key] for the [file], try to load the analysis
+   * result from the cache. Return `null` if not found.
    */
-  _File _fileForPath(String path) {
+  AnalysisResult _getCachedAnalysisResult(_File file, String key) {
+    List<int> bytes = _byteStore.get(key);
+    if (bytes != null) {
+      var unit = new AnalysisDriverResolvedUnit.fromBuffer(bytes);
+      List<AnalysisError> errors = unit.errors
+          .map((error) => new AnalysisError.forValues(
+              file.source,
+              error.offset,
+              error.length,
+              ErrorCode.byUniqueName(error.uniqueName),
+              error.message,
+              error.correction))
+          .toList();
+      return new AnalysisResult(
+          file.path, file.uri, null, file.contentHash, null, errors);
+    }
+    return null;
+  }
+
+  /**
+   * Return the key to store fully resolved results for the [file] into the
+   * cache. Return `null` if the dependency signature is not known yet.
+   */
+  String _getResolvedUnitKey(_File file) {
+    String dependencyHash = _dependencySignatureMap[file.uri];
+    if (dependencyHash != null) {
+      ApiSignature signature = new ApiSignature();
+      signature.addString(dependencyHash);
+      signature.addString(file.contentHash);
+      return '${signature.toHex()}.resolved';
+    }
+    return null;
+  }
+
+  /**
+   * Return the [Source] for the given [path] in [_sourceFactory].
+   */
+  Source _sourceForPath(String path) {
     Source fileSource = _resourceProvider.getFile(path).createSource();
     Uri uri = _sourceFactory.restoreUri(fileSource);
-    Source source = _resourceProvider.getFile(path).createSource(uri);
-    return new _File(this, source);
+    return _resourceProvider.getFile(path).createSource(uri);
   }
 
   /**
-   * TODO(scheglov) It would be nice to get URIs of "parts" from unlinked.
+   * Send a notifications to the [status] stream that the driver started
+   * analyzing.
    */
-  ReferencedUris _getReferencedUris(_File file) {
-    // Try to get from the store.
-    {
-      String key = '${file.contentHash}.uris';
-      List<int> bytes = _byteStore.get(key);
-      if (bytes != null) {
-        fb.BufferContext bp = new fb.BufferContext.fromBytes(bytes);
-        int table = bp.derefObject(0);
-        const fb.ListReader<String> stringListReader =
-            const fb.ListReader<String>(const fb.StringReader());
-        bool isLibrary = const fb.BoolReader().vTableGet(bp, table, 0);
-        List<String> imported = stringListReader.vTableGet(bp, table, 1);
-        List<String> exported = stringListReader.vTableGet(bp, table, 2);
-        List<String> parted = stringListReader.vTableGet(bp, table, 3);
-        ReferencedUris referencedUris = new ReferencedUris();
-        referencedUris.isLibrary = isLibrary;
-        referencedUris.imported.addAll(imported);
-        referencedUris.exported.addAll(exported);
-        referencedUris.parted.addAll(parted);
-        return referencedUris;
-      }
+  void _transitionToAnalyzing() {
+    if (_currentStatus != AnalysisStatus.ANALYZING) {
+      _currentStatus = AnalysisStatus.ANALYZING;
+      _statusController.add(AnalysisStatus.ANALYZING);
     }
-
-    // Compute URIs.
-    ReferencedUris referencedUris = new ReferencedUris();
-    referencedUris.parted.add(file.uri.toString());
-    for (Directive directive in file.unit.directives) {
-      if (directive is PartOfDirective) {
-        referencedUris.isLibrary = false;
-      } else if (directive is UriBasedDirective) {
-        String uri = directive.uri.stringValue;
-        if (directive is ImportDirective) {
-          referencedUris.imported.add(uri);
-        } else if (directive is ExportDirective) {
-          referencedUris.exported.add(uri);
-        } else if (directive is PartDirective) {
-          referencedUris.parted.add(uri);
-        }
-      }
-    }
-
-    // Serialize into bytes.
-    List<int> bytes;
-    {
-      fb.Builder fbBuilder = new fb.Builder();
-      var importedOffset = fbBuilder.writeList(referencedUris.imported
-          .map((uri) => fbBuilder.writeString(uri))
-          .toList());
-      var exportedOffset = fbBuilder.writeList(referencedUris.exported
-          .map((uri) => fbBuilder.writeString(uri))
-          .toList());
-      var partedOffset = fbBuilder.writeList(referencedUris.parted
-          .map((uri) => fbBuilder.writeString(uri))
-          .toList());
-      fbBuilder.startTable();
-      fbBuilder.addBool(0, referencedUris.isLibrary);
-      fbBuilder.addOffset(1, importedOffset);
-      fbBuilder.addOffset(2, exportedOffset);
-      fbBuilder.addOffset(3, partedOffset);
-      var offset = fbBuilder.endTable();
-      bytes = fbBuilder.finish(offset, 'SoRU');
-    }
-
-    // We read the content and recomputed the hash.
-    // So, we need to update the key.
-    String key = '${file.contentHash}.uris';
-    _byteStore.put(key, bytes);
-
-    return referencedUris;
   }
 
   /**
-   * Return the unlinked bundle of [file] for the current file state.
+   * Send a notifications to the [status] stream that the driver is idle.
+   */
+  void _transitionToIdle() {
+    if (_currentStatus != AnalysisStatus.IDLE) {
+      _currentStatus = AnalysisStatus.IDLE;
+      _statusController.add(AnalysisStatus.IDLE);
+    }
+  }
+
+  /**
+   * Verify the API signature for the file with the given [path], and decide
+   * which linked libraries should be invalidated, and files reanalyzed.
    *
-   * That is, if there is an existing bundle for the current content hash
-   * of the [file] in the [_byteStore], then it is returned. Otherwise, the
-   * [file] content is read, the content hash is computed and the current file
-   * state is updated accordingly. That the content is parsed into the
-   * [CompilationUnit] and serialized into a new unlinked bundle. The bundle
-   * is then put into the [_byteStore] and returned.
+   * TODO(scheglov) I see that adding a local var changes (full) API signature.
    */
-  PackageBundle _getUnlinked(_File file) {
-    // Try to get bytes for file's unlinked bundle.
-    List<int> bytes;
-    {
-      String key = '${file.contentHash}.unlinked';
-      bytes = _byteStore.get(key);
-    }
-    // If no cached unlinked bundle, compute it.
-    if (bytes == null) {
-      _logger.runTimed('Create unlinked for $file', () {
-        // We read the content and recomputed the hash.
-        // So, we need to update the key.
-        String key = '${file.contentHash}.unlinked';
-        UnlinkedUnitBuilder unlinkedUnit = serializeAstUnlinked(file.unit);
-        PackageBundleAssembler assembler = new PackageBundleAssembler();
-        assembler.addUnlinkedUnitWithHash(
-            file.uri.toString(), unlinkedUnit, key);
-        bytes = assembler.assemble().toBuffer();
-        _byteStore.put(key, bytes);
-      });
-    }
-    return new PackageBundle.fromBuffer(bytes);
+  void _verifyApiSignatureOfChangedFile(String path) {
+    _logger.run('Verify API signature of $path', () {
+      String oldSignature = _fileApiSignatureMap[path];
+      // Compute the new API signature.
+      // _File.forResolution() also updates the content hash in the cache.
+      Source source = _sourceForPath(path);
+      _File newFile = new _File.forResolution(this, source);
+      String newSignature = newFile.unlinked.apiSignature;
+      // If the old API signature is not null, then the file was used to
+      // compute at least one dependency signature. If the new API signature
+      // is different, then potentially all dependency signatures and
+      // resolution results are invalid.
+      if (oldSignature != null && oldSignature != newSignature) {
+        _logger.writeln('API signatures mismatch found for $newFile');
+        _dependencySignatureMap.clear();
+        _filesToAnalyze.addAll(_explicitFiles);
+      }
+    });
+  }
+
+  /**
+   * Remove and return the first item in the given [set].
+   */
+  static Object/*=T*/ _removeFirst/*<T>*/(LinkedHashSet<Object/*=T*/ > set) {
+    Object/*=T*/ element = set.first;
+    set.remove(element);
+    return element;
   }
 }
 
@@ -658,19 +757,56 @@
       this.errors);
 }
 
-class LibraryContext {
-  final _File file;
-  final _LibraryNode node;
-  final SummaryDataStore store;
-  LibraryContext(this.file, this.node, this.store);
+/**
+ * The status of [AnalysisDriver]
+ */
+class AnalysisStatus {
+  static const IDLE = const AnalysisStatus._(false);
+  static const ANALYZING = const AnalysisStatus._(true);
+
+  final bool _analyzing;
+
+  const AnalysisStatus._(this._analyzing);
+
+  /**
+   * Return `true` is the driver is analyzing.
+   */
+  bool get isAnalyzing => _analyzing;
+
+  /**
+   * Return `true` is the driver is idle.
+   */
+  bool get isIdle => !_analyzing;
 }
 
+/**
+ * This class is used to gather and print performance information.
+ */
 class PerformanceLog {
   final StringSink sink;
   int _level = 0;
 
   PerformanceLog(this.sink);
 
+  /**
+   * Enter a new execution section, which starts at one point of code, runs
+   * some time, and then ends at the other point of code.
+   *
+   * The client must call [PerformanceLogSection.exit] for every [enter].
+   */
+  PerformanceLogSection enter(String msg) {
+    writeln('+++ $msg.');
+    _level++;
+    return new PerformanceLogSection(this, msg);
+  }
+
+  /**
+   * Return the result of the function [f] invocation and log the elapsed time.
+   *
+   * Each invocation of [run] creates a new enclosed section in the log,
+   * which begins with printing [msg], then any log output produced during
+   * [f] invocation, and ends with printing [msg] with the elapsed time.
+   */
   /*=T*/ run/*<T>*/(String msg, /*=T*/ f()) {
     Stopwatch timer = new Stopwatch()..start();
     try {
@@ -684,48 +820,57 @@
     }
   }
 
-  /*=T*/ runTimed/*<T>*/(String msg, /*=T*/ f()) {
-    _level++;
-    Stopwatch timer = new Stopwatch()..start();
-    try {
-      return f();
-    } finally {
-      _level--;
-      int ms = timer.elapsedMilliseconds;
-      writeln('$msg in $ms ms.');
-    }
-  }
-
-  runTimed2(f(), String getMsg()) {
-    _level++;
-    Stopwatch timer = new Stopwatch()..start();
-    try {
-      return f();
-    } finally {
-      _level--;
-      int ms = timer.elapsedMilliseconds;
-      String msg = getMsg();
-      writeln('$msg in $ms ms.');
-    }
-  }
-
+  /**
+   * Write a new line into the log
+   */
   void writeln(String msg) {
     String indent = '\t' * _level;
     sink.writeln('$indent$msg');
   }
 }
 
-class ReferencedUris {
-  bool isLibrary = true;
-  final List<String> imported = <String>[];
-  final List<String> exported = <String>[];
-  final List<String> parted = <String>[];
+/**
+ * The performance measurement section for operations that start and end
+ * at different place in code, so cannot be run using [PerformanceLog.run].
+ *
+ * The client must call [exit] for every [PerformanceLog.enter].
+ */
+class PerformanceLogSection {
+  final PerformanceLog _logger;
+  final String _msg;
+  final Stopwatch _timer = new Stopwatch()..start();
+
+  PerformanceLogSection(this._logger, this._msg);
+
+  /**
+   * Stop the timer, log the time.
+   */
+  void exit() {
+    _timer.stop();
+    _logger._level--;
+    int ms = _timer.elapsedMilliseconds;
+    _logger.writeln('--- $_msg in $ms ms.');
+  }
 }
 
 /**
  * Information about a file being analyzed, explicitly or implicitly.
  *
- * It keeps a consistent view on its [content], [contentHash] and [unit].
+ * It provides a stable, consistent view on its [content], [contentHash],
+ * [unlinked] and [unit].
+ *
+ * A new file can be created either for resolution or for linking.
+ *
+ * When file is created for linking, it assumes that the file has not been
+ * changed since the last time its content was read and hashed. So, this
+ * content hash is also used to look for an existing unlinked bundle in the
+ * [AnalysisDriver._byteStore]. If any of the caches is empty, the file is
+ * created without caching, as for resolution.
+ *
+ * When file is created for resolution, we always read the content, compute its
+ * hash and update [AnalysisDriver._fileContentHashMap], parse the content,
+ * compute the unlinked bundle and update [AnalysisDriver._fileApiSignatureMap].
+ * It is important to keep these two maps in sync.
  */
 class _File {
   /**
@@ -734,61 +879,139 @@
   final AnalysisDriver driver;
 
   /**
-   * The [Source] this [_File] instance represent.
+   * The [Source] this [_File] instance represents.
    */
   final Source source;
 
-  String _content;
-  String _contentHash;
-  CompilationUnit _unit;
-
-  _File(this.driver, this.source);
+  /**
+   * The [source] content, or `null` if this file is for linking.
+   */
+  final String content;
 
   /**
-   * Return the current content of the file.
-   *
-   * If the [_content] field if it is still `null`, get the content from the
-   * content cache or from the [source]. If the content cannot be accessed
-   * because of an exception, it considers to be an empty string.
-   *
-   * When a new content is read, the new [_contentHash] is computed and the
-   * current file state is updated.
+   * The [source] content hash, not `null` even if [content] is `null`.
    */
-  String get content {
-    if (_content == null) {
-      _readContentAndComputeHash();
-    }
-    return _content;
-  }
+  final String contentHash;
 
   /**
-   * Ensure that the [contentHash] is filled.
-   *
-   * If the hash is already in the current file state, return the current
-   * value. Otherwise, read the [content], compute the hash, put it into
-   * the current file state, and update the [contentHash] field.
-   *
-   * The client cannot remember values of this property, because its value
-   * might change when [content] is read and the hash is recomputed.
+   * The unlinked bundle, not `null`.
    */
-  String get contentHash {
-    _contentHash ??= driver._fileContentHashMap[path];
-    if (_contentHash == null) {
-      _readContentAndComputeHash();
+  final PackageBundle unlinked;
+
+  /**
+   * The unresolved unit, not `null` if this file is for resolution.
+   */
+  final CompilationUnit unit;
+
+  /**
+   * Return the file with consistent [content] and [contentHash].
+   */
+  factory _File.forContent(AnalysisDriver driver, Source source) {
+    String path = source.fullName;
+    // Read the content.
+    String content;
+    try {
+      content = driver._contentCache.getContents(source);
+      content ??= source.contents.data;
+    } catch (_) {
+      content = '';
+      // TODO(scheglov) We fail to report URI_DOES_NOT_EXIST.
+      // On one hand we need to provide an unlinked bundle to prevent
+      // analysis context from reading the file (we want it to work
+      // hermetically and handle one one file at a time). OTOH,
+      // ResynthesizerResultProvider happily reports that any source in the
+      // SummaryDataStore has MODIFICATION_TIME `0`. We need to return `-1`
+      // for missing files. Maybe add this feature to SummaryDataStore?
     }
-    return _contentHash;
+    // Compute the content hash.
+    List<int> textBytes = UTF8.encode(content);
+    List<int> hashBytes = md5.convert(textBytes).bytes;
+    String contentHash = hex.encode(hashBytes);
+    driver._fileContentHashMap[path] = contentHash;
+    // Return information about the file content.
+    return new _File._(driver, source, content, contentHash, null, null);
   }
 
+  factory _File.forLinking(AnalysisDriver driver, Source source) {
+    String path = source.fullName;
+    String contentHash = driver._fileContentHashMap[path];
+    // If we don't have the file content hash, compute it.
+    if (contentHash == null) {
+      _File file = new _File.forContent(driver, source);
+      contentHash = file.contentHash;
+    }
+    // If we have the cached unlinked bundle, use it.
+    {
+      String key = '$contentHash.unlinked';
+      List<int> bytes = driver._byteStore.get(key);
+      if (bytes != null) {
+        PackageBundle unlinked = new PackageBundle.fromBuffer(bytes);
+        _updateApiSignature(driver, path, unlinked.apiSignature);
+        return new _File._(driver, source, null, contentHash, unlinked, null);
+      }
+    }
+    // Otherwise, read the source, parse and build a new unlinked bundle.
+    return new _File.forResolution(driver, source);
+  }
+
+  factory _File.forResolution(AnalysisDriver driver, Source source) {
+    _File file = new _File.forContent(driver, source);
+    String path = file.path;
+    String content = file.content;
+    String contentHash = file.contentHash;
+    // Parse the unit.
+    CompilationUnit unit = _parse(driver, source, content);
+    // Prepare the unlinked bundle.
+    PackageBundle unlinked;
+    {
+      String key = '$contentHash.unlinked';
+      List<int> bytes = driver._byteStore.get(key);
+      if (bytes == null) {
+        driver._logger.run('Create unlinked for $path', () {
+          UnlinkedUnitBuilder unlinkedUnit = serializeAstUnlinked(unit);
+          PackageBundleAssembler assembler = new PackageBundleAssembler();
+          assembler.addUnlinkedUnitWithHash(
+              source.uri.toString(), unlinkedUnit, contentHash);
+          bytes = assembler.assemble().toBuffer();
+          driver._byteStore.put(key, bytes);
+        });
+      }
+      unlinked = new PackageBundle.fromBuffer(bytes);
+      _updateApiSignature(driver, path, unlinked.apiSignature);
+    }
+    // Return the full file.
+    return new _File._(driver, source, content, contentHash, unlinked, unit);
+  }
+
+  _File._(this.driver, this.source, this.content, this.contentHash,
+      this.unlinked, this.unit);
+
   String get path => source.fullName;
 
+  Uri get uri => source.uri;
+
   /**
-   * Return the [CompilationUnit] of the file.
+   * Return the [_File] for the [uri] referenced in this file.
    *
-   * Current this unit is resolved, it is used to compute unlinked summaries
-   * and and URIs. We use a separate analysis context to perform resolution
-   * and computing errors. But this might change in the future.
+   * This [_File] can be used only for linking.
    */
-  CompilationUnit get unit {
+  _File resolveUri(String uri) {
+    // TODO(scheglov) Consider removing this caching after implementing other
+    // optimizations, e.g. changeFile() optimization.
+    Source uriSource = driver._uriResolutionCache
+        .putIfAbsent(this.uri, () => <String, Source>{})
+        .putIfAbsent(uri, () => driver._sourceFactory.resolveUri(source, uri));
+    return new _File.forLinking(driver, uriSource);
+  }
+
+  @override
+  String toString() => path;
+
+  /**
+   * Return the parsed unresolved [CompilationUnit] for the given [content].
+   */
+  static CompilationUnit _parse(
+      AnalysisDriver driver, Source source, String content) {
     AnalysisErrorListener errorListener = AnalysisErrorListener.NULL_LISTENER;
 
     CharSequenceReader reader = new CharSequenceReader(content);
@@ -799,53 +1022,31 @@
 
     Parser parser = new Parser(source, errorListener);
     parser.parseGenericMethodComments = driver._analysisOptions.strongMode;
-    _unit = parser.parseCompilationUnit(token);
-    _unit.lineInfo = lineInfo;
-
-    return _unit;
+    CompilationUnit unit = parser.parseCompilationUnit(token);
+    unit.lineInfo = lineInfo;
+    return unit;
   }
 
-  Uri get uri => source.uri;
-
-  /**
-   * Return the [_File] for the [uri] referenced in this file.
-   */
-  _File resolveUri(String uri) {
-    Source uriSource = driver._uriResolutionCache
-        .putIfAbsent(this.uri, () => <String, Source>{})
-        .putIfAbsent(uri, () => driver._sourceFactory.resolveUri(source, uri));
-    return new _File(driver, uriSource);
-  }
-
-  @override
-  String toString() => uri.toString();
-
-  /**
-   * Fill the [_content] and [_contentHash] fields.
-   *
-   * If the [_content] field if it is still `null`, get the content from the
-   * content cache or from the [source]. If the content cannot be accessed
-   * because of an exception, it considers to be an empty string.
-   *
-   * When a new content is read, the new [_contentHash] should be computed and
-   * the current file state should be updated.
-   */
-  void _readContentAndComputeHash() {
-    try {
-      _content = driver._contentCache.getContents(source);
-      _content ??= source.contents.data;
-    } catch (_) {
-      _content = '';
+  static void _updateApiSignature(
+      AnalysisDriver driver, String path, String newSignature) {
+    String oldSignature = driver._fileApiSignatureMap[path];
+    if (oldSignature != null && oldSignature != newSignature) {
+      driver._dependencySignatureMap.clear();
     }
-    // Compute the content hash.
-    List<int> textBytes = UTF8.encode(_content);
-    List<int> hashBytes = md5.convert(textBytes).bytes;
-    _contentHash = hex.encode(hashBytes);
-    // Update the current file state.
-    driver._fileContentHashMap[path] = _contentHash;
+    driver._fileApiSignatureMap[path] = newSignature;
   }
 }
 
+/**
+ * TODO(scheglov) document
+ */
+class _LibraryContext {
+  final _File file;
+  final _LibraryNode node;
+  final SummaryDataStore store;
+  _LibraryContext(this.file, this.node, this.store);
+}
+
 class _LibraryNode {
   final AnalysisDriver driver;
   final Map<String, _LibraryNode> nodes;
@@ -854,7 +1055,7 @@
 
   Set<_LibraryNode> transitiveDependencies;
   List<_LibraryNode> _dependencies;
-  String _linkedHash;
+  String _dependencySignature;
 
   _LibraryNode(this.driver, this.nodes, this.uri);
 
@@ -901,11 +1102,9 @@
     return _dependencies;
   }
 
-  @override
-  int get hashCode => uri.hashCode;
-
-  String get linkedHash {
-    _linkedHash ??= driver._linkedHashMap.putIfAbsent(uri, () {
+  String get dependencySignature {
+    return _dependencySignature ??=
+        driver._dependencySignatureMap.putIfAbsent(uri, () {
       computeTransitiveDependencies();
 
       // Add all unlinked API signatures.
@@ -924,9 +1123,11 @@
       signatures.forEach(signature.addString);
       return signature.toHex();
     });
-    return _linkedHash;
   }
 
+  @override
+  int get hashCode => uri.hashCode;
+
   bool operator ==(other) {
     return other is _LibraryNode && other.uri == uri;
   }
@@ -948,3 +1149,58 @@
   @override
   String toString() => uri.toString();
 }
+
+/**
+ * [_Monitor] can be used to wait for a signal.
+ *
+ * Signals are not queued, the client will receive exactly one signal
+ * regardless of the number of [notify] invocations. The [signal] is reset
+ * after completion and will not complete until [notify] is called next time.
+ */
+class _Monitor {
+  Completer<Null> _completer = new Completer<Null>();
+
+  /**
+   * Return a [Future] that completes when [notify] is called at least once.
+   */
+  Future<Null> get signal async {
+    await _completer.future;
+    _completer = new Completer<Null>();
+  }
+
+  /**
+   * Complete the [signal] future if it is not completed yet. It is safe to
+   * call this method multiple times, but the [signal] will complete only once.
+   */
+  void notify() {
+    if (!_completer.isCompleted) {
+      _completer.complete(null);
+    }
+  }
+}
+
+/**
+ * TODO(scheglov) document
+ */
+class _ReferencedUris {
+  bool isLibrary = true;
+  final List<String> imported = <String>[];
+  final List<String> exported = <String>[];
+  final List<String> parted = <String>[];
+
+  factory _ReferencedUris(UnlinkedUnit unit) {
+    _ReferencedUris referenced = new _ReferencedUris._();
+    referenced.parted.addAll(unit.publicNamespace.parts);
+    for (UnlinkedImport import in unit.imports) {
+      if (!import.isImplicit) {
+        referenced.imported.add(import.uri);
+      }
+    }
+    for (UnlinkedExportPublic export in unit.publicNamespace.exports) {
+      referenced.exported.add(export.uri);
+    }
+    return referenced;
+  }
+
+  _ReferencedUris._();
+}
diff --git a/pkg/analyzer/lib/src/dart/element/element.dart b/pkg/analyzer/lib/src/dart/element/element.dart
index ddfc3b4..d7d39a8 100644
--- a/pkg/analyzer/lib/src/dart/element/element.dart
+++ b/pkg/analyzer/lib/src/dart/element/element.dart
@@ -33,6 +33,18 @@
 import 'package:analyzer/src/task/dart.dart';
 
 /**
+ * Assert that the given [object] is null, which in the places where this
+ * function is called means that the element is not resynthesized.
+ */
+void _assertNotResynthesized(Object object) {
+  // TODO(scheglov) I comment this check for now.
+  // When we make a decision about switch to the new analysis driver,
+  // we will need to rework the analysis code to don't call the setters
+  // or restore / inline it.
+//  assert(object == null);
+}
+
+/**
  * A concrete implementation of a [ClassElement].
  */
 abstract class AbstractClassElementImpl extends ElementImpl
@@ -505,7 +517,7 @@
    * Set whether this class is abstract.
    */
   void set abstract(bool isAbstract) {
-    assert(_unlinkedClass == null);
+    _assertNotResynthesized(_unlinkedClass);
     setModifier(Modifier.ABSTRACT, isAbstract);
   }
 
@@ -519,7 +531,7 @@
 
   @override
   void set accessors(List<PropertyAccessorElement> accessors) {
-    assert(_unlinkedClass == null);
+    _assertNotResynthesized(_unlinkedClass);
     super.accessors = accessors;
   }
 
@@ -574,7 +586,7 @@
    * Should only be used for class elements that are not mixin applications.
    */
   void set constructors(List<ConstructorElement> constructors) {
-    assert(_unlinkedClass == null);
+    _assertNotResynthesized(_unlinkedClass);
     assert(!isMixinApplication);
     for (ConstructorElement constructor in constructors) {
       (constructor as ConstructorElementImpl).enclosingElement = this;
@@ -647,7 +659,7 @@
 
   @override
   void set fields(List<FieldElement> fields) {
-    assert(_unlinkedClass == null);
+    _assertNotResynthesized(_unlinkedClass);
     super.fields = fields;
   }
 
@@ -659,7 +671,7 @@
   }
 
   void set hasBeenInferred(bool hasBeenInferred) {
-    assert(_unlinkedClass == null);
+    _assertNotResynthesized(_unlinkedClass);
     _hasBeenInferred = hasBeenInferred;
   }
 
@@ -749,7 +761,7 @@
   }
 
   void set interfaces(List<InterfaceType> interfaces) {
-    assert(_unlinkedClass == null);
+    _assertNotResynthesized(_unlinkedClass);
     _interfaces = interfaces;
   }
 
@@ -828,7 +840,7 @@
    * Set the methods contained in this class to the given [methods].
    */
   void set methods(List<MethodElement> methods) {
-    assert(_unlinkedClass == null);
+    _assertNotResynthesized(_unlinkedClass);
     for (MethodElement method in methods) {
       (method as MethodElementImpl).enclosingElement = this;
     }
@@ -839,7 +851,7 @@
    * Set whether this class is a mixin application.
    */
   void set mixinApplication(bool isMixinApplication) {
-    assert(_unlinkedClass == null);
+    _assertNotResynthesized(_unlinkedClass);
     setModifier(Modifier.MIXIN_APPLICATION, isMixinApplication);
   }
 
@@ -856,7 +868,7 @@
   }
 
   void set mixins(List<InterfaceType> mixins) {
-    assert(_unlinkedClass == null);
+    _assertNotResynthesized(_unlinkedClass);
     _mixins = mixins;
   }
 
@@ -898,7 +910,7 @@
   }
 
   void set supertype(InterfaceType supertype) {
-    assert(_unlinkedClass == null);
+    _assertNotResynthesized(_unlinkedClass);
     _supertype = supertype;
   }
 
@@ -928,7 +940,7 @@
    * [typeParameters].
    */
   void set typeParameters(List<TypeParameterElement> typeParameters) {
-    assert(_unlinkedClass == null);
+    _assertNotResynthesized(_unlinkedClass);
     for (TypeParameterElement typeParameter in typeParameters) {
       (typeParameter as TypeParameterElementImpl).enclosingElement = this;
     }
@@ -1478,7 +1490,7 @@
    * Set the enums contained in this compilation unit to the given [enums].
    */
   void set enums(List<ClassElement> enums) {
-    assert(_unlinkedUnit == null);
+    _assertNotResynthesized(_unlinkedUnit);
     for (ClassElement enumDeclaration in enums) {
       (enumDeclaration as EnumElementImpl).enclosingElement = this;
     }
@@ -1592,7 +1604,7 @@
    * given [typeAliases].
    */
   void set typeAliases(List<FunctionTypeAliasElement> typeAliases) {
-    assert(_unlinkedUnit == null);
+    _assertNotResynthesized(_unlinkedUnit);
     for (FunctionTypeAliasElement typeAlias in typeAliases) {
       (typeAlias as FunctionTypeAliasElementImpl).enclosingElement = this;
     }
@@ -1616,7 +1628,7 @@
    * Set the types contained in this compilation unit to the given [types].
    */
   void set types(List<ClassElement> types) {
-    assert(_unlinkedUnit == null);
+    _assertNotResynthesized(_unlinkedUnit);
     for (ClassElement type in types) {
       // Another implementation of ClassElement is _DeferredClassElement,
       // which is used to resynthesize classes lazily. We cannot cast it
@@ -2022,7 +2034,7 @@
    * Set whether this constructor represents a 'const' constructor.
    */
   void set const2(bool isConst) {
-    assert(serializedExecutable == null);
+    _assertNotResynthesized(serializedExecutable);
     setModifier(Modifier.CONST, isConst);
   }
 
@@ -2037,7 +2049,7 @@
 
   void set constantInitializers(
       List<ConstructorInitializer> constantInitializers) {
-    assert(serializedExecutable == null);
+    _assertNotResynthesized(serializedExecutable);
     _constantInitializers = constantInitializers;
   }
 
@@ -2053,7 +2065,7 @@
    * Set whether this constructor represents a factory method.
    */
   void set factory(bool isFactory) {
-    assert(serializedExecutable == null);
+    _assertNotResynthesized(serializedExecutable);
     setModifier(Modifier.FACTORY, isFactory);
   }
 
@@ -2124,7 +2136,7 @@
   }
 
   void set nameEnd(int nameEnd) {
-    assert(serializedExecutable == null);
+    _assertNotResynthesized(serializedExecutable);
     _nameEnd = nameEnd;
   }
 
@@ -2139,7 +2151,7 @@
   }
 
   void set periodOffset(int periodOffset) {
-    assert(serializedExecutable == null);
+    _assertNotResynthesized(serializedExecutable);
     _periodOffset = periodOffset;
   }
 
@@ -2163,7 +2175,7 @@
   }
 
   void set redirectedConstructor(ConstructorElement redirectedConstructor) {
-    assert(serializedExecutable == null);
+    _assertNotResynthesized(serializedExecutable);
     _redirectedConstructor = redirectedConstructor;
   }
 
@@ -2335,7 +2347,7 @@
   }
 
   void set constantInitializer(Expression constantInitializer) {
-    assert(_unlinkedConst == null);
+    _assertNotResynthesized(_unlinkedConst);
     _constantInitializer = constantInitializer;
   }
 
@@ -3358,7 +3370,7 @@
    * Set whether this class is abstract.
    */
   void set abstract(bool isAbstract) {
-    assert(_unlinkedEnum == null);
+    _assertNotResynthesized(_unlinkedEnum);
   }
 
   @override
@@ -3371,7 +3383,7 @@
 
   @override
   void set accessors(List<PropertyAccessorElement> accessors) {
-    assert(_unlinkedEnum == null);
+    _assertNotResynthesized(_unlinkedEnum);
     super.accessors = accessors;
   }
 
@@ -3421,7 +3433,7 @@
 
   @override
   void set fields(List<FieldElement> fields) {
-    assert(_unlinkedEnum == null);
+    _assertNotResynthesized(_unlinkedEnum);
     super.fields = fields;
   }
 
@@ -3629,7 +3641,7 @@
    * Set whether this executable element's body is asynchronous.
    */
   void set asynchronous(bool isAsynchronous) {
-    assert(serializedExecutable == null);
+    _assertNotResynthesized(serializedExecutable);
     setModifier(Modifier.ASYNCHRONOUS, isAsynchronous);
   }
 
@@ -3669,7 +3681,7 @@
    * Set whether this executable element is external.
    */
   void set external(bool isExternal) {
-    assert(serializedExecutable == null);
+    _assertNotResynthesized(serializedExecutable);
     setModifier(Modifier.EXTERNAL, isExternal);
   }
 
@@ -3687,7 +3699,7 @@
    * [functions].
    */
   void set functions(List<FunctionElement> functions) {
-    assert(serializedExecutable == null);
+    _assertNotResynthesized(serializedExecutable);
     for (FunctionElement function in functions) {
       (function as FunctionElementImpl).enclosingElement = this;
     }
@@ -3698,7 +3710,7 @@
    * Set whether this method's body is a generator.
    */
   void set generator(bool isGenerator) {
-    assert(serializedExecutable == null);
+    _assertNotResynthesized(serializedExecutable);
     setModifier(Modifier.GENERATOR, isGenerator);
   }
 
@@ -3715,7 +3727,7 @@
    * Set whether this executable element has an implicit return type.
    */
   void set hasImplicitReturnType(bool hasImplicitReturnType) {
-    assert(serializedExecutable == null);
+    _assertNotResynthesized(serializedExecutable);
     setModifier(Modifier.IMPLICIT_TYPE, hasImplicitReturnType);
   }
 
@@ -3771,7 +3783,7 @@
    * [labels].
    */
   void set labels(List<LabelElement> labels) {
-    assert(serializedExecutable == null);
+    _assertNotResynthesized(serializedExecutable);
     for (LabelElement label in labels) {
       (label as LabelElementImpl).enclosingElement = this;
     }
@@ -3804,7 +3816,7 @@
    * [variables].
    */
   void set localVariables(List<LocalVariableElement> variables) {
-    assert(serializedExecutable == null);
+    _assertNotResynthesized(serializedExecutable);
     for (LocalVariableElement variable in variables) {
       (variable as LocalVariableElementImpl).enclosingElement = this;
     }
@@ -3851,7 +3863,7 @@
    * [parameters].
    */
   void set parameters(List<ParameterElement> parameters) {
-    assert(serializedExecutable == null);
+    _assertNotResynthesized(serializedExecutable);
     for (ParameterElement parameter in parameters) {
       (parameter as ParameterElementImpl).enclosingElement = this;
     }
@@ -3874,7 +3886,7 @@
   }
 
   void set returnType(DartType returnType) {
-    assert(serializedExecutable == null);
+    _assertNotResynthesized(serializedExecutable);
     _returnType = returnType;
   }
 
@@ -3888,7 +3900,7 @@
   }
 
   void set type(FunctionType type) {
-    assert(serializedExecutable == null);
+    _assertNotResynthesized(serializedExecutable);
     _type = type;
   }
 
@@ -3908,7 +3920,7 @@
    * [typeParameters].
    */
   void set typeParameters(List<TypeParameterElement> typeParameters) {
-    assert(serializedExecutable == null);
+    _assertNotResynthesized(serializedExecutable);
     for (TypeParameterElement parameter in typeParameters) {
       (parameter as TypeParameterElementImpl).enclosingElement = this;
     }
@@ -4067,7 +4079,7 @@
   }
 
   void set combinators(List<NamespaceCombinator> combinators) {
-    assert(_unlinkedExportPublic == null);
+    _assertNotResynthesized(_unlinkedExportPublic);
     _combinators = combinators;
   }
 
@@ -4081,7 +4093,7 @@
   }
 
   void set exportedLibrary(LibraryElement exportedLibrary) {
-    assert(_unlinkedExportNonPublic == null);
+    _assertNotResynthesized(_unlinkedExportNonPublic);
     _exportedLibrary = exportedLibrary;
   }
 
@@ -4102,7 +4114,7 @@
   }
 
   void set metadata(List<ElementAnnotation> metadata) {
-    assert(_unlinkedExportNonPublic == null);
+    _assertNotResynthesized(_unlinkedExportNonPublic);
     super.metadata = metadata;
   }
 
@@ -4126,7 +4138,7 @@
 
   @override
   void set uri(String uri) {
-    assert(_unlinkedExportPublic == null);
+    _assertNotResynthesized(_unlinkedExportPublic);
     super.uri = uri;
   }
 
@@ -4140,7 +4152,7 @@
 
   @override
   void set uriEnd(int uriEnd) {
-    assert(_unlinkedExportNonPublic == null);
+    _assertNotResynthesized(_unlinkedExportNonPublic);
     super.uriEnd = uriEnd;
   }
 
@@ -4154,7 +4166,7 @@
 
   @override
   void set uriOffset(int uriOffset) {
-    assert(_unlinkedExportNonPublic == null);
+    _assertNotResynthesized(_unlinkedExportNonPublic);
     super.uriOffset = uriOffset;
   }
 
@@ -4239,7 +4251,7 @@
    * Set whether this field is static.
    */
   void set static(bool isStatic) {
-    assert(_unlinkedVariable == null);
+    _assertNotResynthesized(_unlinkedVariable);
     setModifier(Modifier.STATIC, isStatic);
   }
 
@@ -4299,7 +4311,7 @@
   }
 
   void set field(FieldElement field) {
-    assert(_unlinkedParam == null);
+    _assertNotResynthesized(_unlinkedParam);
     _field = field;
   }
 
@@ -4316,7 +4328,7 @@
 
   @override
   void set type(DartType type) {
-    assert(_unlinkedParam == null);
+    _assertNotResynthesized(_unlinkedParam);
     _type = type;
   }
 
@@ -4443,7 +4455,7 @@
    * [offset] with the given [length].
    */
   void setVisibleRange(int offset, int length) {
-    assert(serializedExecutable == null);
+    _assertNotResynthesized(serializedExecutable);
     _visibleRangeOffset = offset;
     _visibleRangeLength = length;
   }
@@ -4702,7 +4714,7 @@
    * Set the parameters defined by this type alias to the given [parameters].
    */
   void set parameters(List<ParameterElement> parameters) {
-    assert(_unlinkedTypedef == null);
+    _assertNotResynthesized(_unlinkedTypedef);
     if (parameters != null) {
       for (ParameterElement parameter in parameters) {
         (parameter as ParameterElementImpl).enclosingElement = this;
@@ -4721,7 +4733,7 @@
   }
 
   void set returnType(DartType returnType) {
-    assert(_unlinkedTypedef == null);
+    _assertNotResynthesized(_unlinkedTypedef);
     _returnType = returnType;
   }
 
@@ -4734,7 +4746,7 @@
   }
 
   void set type(FunctionType type) {
-    assert(_unlinkedTypedef == null);
+    _assertNotResynthesized(_unlinkedTypedef);
     _type = type;
   }
 
@@ -4754,7 +4766,7 @@
    * [typeParameters].
    */
   void set typeParameters(List<TypeParameterElement> typeParameters) {
-    assert(_unlinkedTypedef == null);
+    _assertNotResynthesized(_unlinkedTypedef);
     for (TypeParameterElement typeParameter in typeParameters) {
       (typeParameter as TypeParameterElementImpl).enclosingElement = this;
     }
@@ -4861,7 +4873,7 @@
   }
 
   void set hiddenNames(List<String> hiddenNames) {
-    assert(_unlinkedCombinator == null);
+    _assertNotResynthesized(_unlinkedCombinator);
     _hiddenNames = hiddenNames;
   }
 
@@ -4948,7 +4960,7 @@
   }
 
   void set combinators(List<NamespaceCombinator> combinators) {
-    assert(_unlinkedImport == null);
+    _assertNotResynthesized(_unlinkedImport);
     _combinators = combinators;
   }
 
@@ -4956,7 +4968,7 @@
    * Set whether this import is for a deferred library.
    */
   void set deferred(bool isDeferred) {
-    assert(_unlinkedImport == null);
+    _assertNotResynthesized(_unlinkedImport);
     setModifier(Modifier.DEFERRED, isDeferred);
   }
 
@@ -4980,7 +4992,7 @@
   }
 
   void set importedLibrary(LibraryElement importedLibrary) {
-    assert(_unlinkedImport == null);
+    _assertNotResynthesized(_unlinkedImport);
     _importedLibrary = importedLibrary;
   }
 
@@ -5014,7 +5026,7 @@
   }
 
   void set metadata(List<ElementAnnotation> metadata) {
-    assert(_unlinkedImport == null);
+    _assertNotResynthesized(_unlinkedImport);
     super.metadata = metadata;
   }
 
@@ -5041,7 +5053,7 @@
   }
 
   void set prefix(PrefixElement prefix) {
-    assert(_unlinkedImport == null);
+    _assertNotResynthesized(_unlinkedImport);
     _prefix = prefix;
   }
 
@@ -5054,7 +5066,7 @@
   }
 
   void set prefixOffset(int prefixOffset) {
-    assert(_unlinkedImport == null);
+    _assertNotResynthesized(_unlinkedImport);
     _prefixOffset = prefixOffset;
   }
 
@@ -5072,7 +5084,7 @@
 
   @override
   void set uri(String uri) {
-    assert(_unlinkedImport == null);
+    _assertNotResynthesized(_unlinkedImport);
     super.uri = uri;
   }
 
@@ -5089,7 +5101,7 @@
 
   @override
   void set uriEnd(int uriEnd) {
-    assert(_unlinkedImport == null);
+    _assertNotResynthesized(_unlinkedImport);
     super.uriEnd = uriEnd;
   }
 
@@ -5106,7 +5118,7 @@
 
   @override
   void set uriOffset(int uriOffset) {
-    assert(_unlinkedImport == null);
+    _assertNotResynthesized(_unlinkedImport);
     super.uriOffset = uriOffset;
   }
 
@@ -5485,7 +5497,7 @@
    * given list of [exports].
    */
   void set exports(List<ExportElement> exports) {
-    assert(_unlinkedDefiningUnit == null);
+    _assertNotResynthesized(_unlinkedDefiningUnit);
     for (ExportElement exportElement in exports) {
       (exportElement as ExportElementImpl).enclosingElement = this;
     }
@@ -5555,7 +5567,7 @@
    * given list of [imports].
    */
   void set imports(List<ImportElement> imports) {
-    assert(_unlinkedDefiningUnit == null);
+    _assertNotResynthesized(_unlinkedDefiningUnit);
     for (ImportElement importElement in imports) {
       (importElement as ImportElementImpl).enclosingElement = this;
       PrefixElementImpl prefix = importElement.prefix as PrefixElementImpl;
@@ -6085,7 +6097,7 @@
    * [offset] with the given [length].
    */
   void setVisibleRange(int offset, int length) {
-    assert(_unlinkedVariable == null);
+    _assertNotResynthesized(_unlinkedVariable);
     _visibleRangeOffset = offset;
     _visibleRangeLength = length;
   }
@@ -6117,7 +6129,7 @@
    * Set whether this method is abstract.
    */
   void set abstract(bool isAbstract) {
-    assert(serializedExecutable == null);
+    _assertNotResynthesized(serializedExecutable);
     setModifier(Modifier.ABSTRACT, isAbstract);
   }
 
@@ -6182,7 +6194,7 @@
    * Set whether this method is static.
    */
   void set static(bool isStatic) {
-    assert(serializedExecutable == null);
+    _assertNotResynthesized(serializedExecutable);
     setModifier(Modifier.STATIC, isStatic);
   }
 
@@ -6684,7 +6696,7 @@
 
   @override
   void set const3(bool isConst) {
-    assert(_unlinkedVariable == null);
+    _assertNotResynthesized(_unlinkedVariable);
     super.const3 = isConst;
   }
 
@@ -6698,7 +6710,7 @@
 
   @override
   void set final2(bool isFinal) {
-    assert(_unlinkedVariable == null);
+    _assertNotResynthesized(_unlinkedVariable);
     super.final2 = isFinal;
   }
 
@@ -6712,7 +6724,7 @@
 
   @override
   void set hasImplicitType(bool hasImplicitType) {
-    assert(_unlinkedVariable == null);
+    _assertNotResynthesized(_unlinkedVariable);
     super.hasImplicitType = hasImplicitType;
   }
 
@@ -6735,7 +6747,7 @@
    * [function].
    */
   void set initializer(FunctionElement function) {
-    assert(_unlinkedVariable == null);
+    _assertNotResynthesized(_unlinkedVariable);
     super.initializer = function;
   }
 
@@ -6793,7 +6805,7 @@
   }
 
   void set type(DartType type) {
-    assert(_unlinkedVariable == null);
+    _assertNotResynthesized(_unlinkedVariable);
     _type = type;
   }
 
@@ -6931,7 +6943,7 @@
 
   @override
   void set const3(bool isConst) {
-    assert(_unlinkedParam == null);
+    _assertNotResynthesized(_unlinkedParam);
     super.const3 = isConst;
   }
 
@@ -6950,13 +6962,13 @@
    * Set Dart code of the default value.
    */
   void set defaultValueCode(String defaultValueCode) {
-    assert(_unlinkedParam == null);
+    _assertNotResynthesized(_unlinkedParam);
     this._defaultValueCode = StringUtilities.intern(defaultValueCode);
   }
 
   @override
   void set final2(bool isFinal) {
-    assert(_unlinkedParam == null);
+    _assertNotResynthesized(_unlinkedParam);
     super.final2 = isFinal;
   }
 
@@ -6970,7 +6982,7 @@
 
   @override
   void set hasImplicitType(bool hasImplicitType) {
-    assert(_unlinkedParam == null);
+    _assertNotResynthesized(_unlinkedParam);
     super.hasImplicitType = hasImplicitType;
   }
 
@@ -6992,7 +7004,7 @@
    * Record whether or not this parameter inherits from a covariant parameter.
    */
   void set inheritsCovariant(bool value) {
-    assert(_unlinkedParam == null);
+    _assertNotResynthesized(_unlinkedParam);
     _inheritsCovariant = value;
   }
 
@@ -7015,7 +7027,7 @@
    * [function].
    */
   void set initializer(FunctionElement function) {
-    assert(_unlinkedParam == null);
+    _assertNotResynthesized(_unlinkedParam);
     super.initializer = function;
   }
 
@@ -7108,7 +7120,7 @@
   }
 
   void set parameterKind(ParameterKind parameterKind) {
-    assert(_unlinkedParam == null);
+    _assertNotResynthesized(_unlinkedParam);
     _parameterKind = parameterKind;
   }
 
@@ -7211,7 +7223,7 @@
    * [offset] with the given [length].
    */
   void setVisibleRange(int offset, int length) {
-    assert(_unlinkedParam == null);
+    _assertNotResynthesized(_unlinkedParam);
     _visibleRangeOffset = offset;
     _visibleRangeLength = length;
   }
@@ -7463,7 +7475,7 @@
    * Set whether this accessor is abstract.
    */
   void set abstract(bool isAbstract) {
-    assert(serializedExecutable == null);
+    _assertNotResynthesized(serializedExecutable);
     setModifier(Modifier.ABSTRACT, isAbstract);
   }
 
@@ -7510,7 +7522,7 @@
    * Set whether this accessor is a getter.
    */
   void set getter(bool isGetter) {
-    assert(serializedExecutable == null);
+    _assertNotResynthesized(serializedExecutable);
     setModifier(Modifier.GETTER, isGetter);
   }
 
@@ -7569,7 +7581,7 @@
    * Set whether this accessor is a setter.
    */
   void set setter(bool isSetter) {
-    assert(serializedExecutable == null);
+    _assertNotResynthesized(serializedExecutable);
     setModifier(Modifier.SETTER, isSetter);
   }
 
@@ -7577,7 +7589,7 @@
    * Set whether this accessor is static.
    */
   void set static(bool isStatic) {
-    assert(serializedExecutable == null);
+    _assertNotResynthesized(serializedExecutable);
     setModifier(Modifier.STATIC, isStatic);
   }
 
@@ -7739,7 +7751,7 @@
   }
 
   void set propagatedType(DartType propagatedType) {
-    assert(_unlinkedVariable == null);
+    _assertNotResynthesized(_unlinkedVariable);
     _propagatedType = propagatedType;
   }
 }
@@ -7846,7 +7858,7 @@
   }
 
   void set end(int end) {
-    assert(_unlinkedCombinator == null);
+    _assertNotResynthesized(_unlinkedCombinator);
     _end = end;
   }
 
@@ -7859,7 +7871,7 @@
   }
 
   void set offset(int offset) {
-    assert(_unlinkedCombinator == null);
+    _assertNotResynthesized(_unlinkedCombinator);
     _offset = offset;
   }
 
@@ -7872,7 +7884,7 @@
   }
 
   void set shownNames(List<String> shownNames) {
-    assert(_unlinkedCombinator == null);
+    _assertNotResynthesized(_unlinkedCombinator);
     _shownNames = shownNames;
   }
 
@@ -8006,7 +8018,7 @@
   }
 
   void set bound(DartType bound) {
-    assert(_unlinkedTypeParam == null);
+    _assertNotResynthesized(_unlinkedTypeParam);
     _bound = bound;
   }
 
diff --git a/pkg/analyzer/lib/src/error/codes.dart b/pkg/analyzer/lib/src/error/codes.dart
index e04d6f3..feea8ee 100644
--- a/pkg/analyzer/lib/src/error/codes.dart
+++ b/pkg/analyzer/lib/src/error/codes.dart
@@ -3279,14 +3279,14 @@
 
   /**
    * 13.9 Switch: It is a static warning if the last statement of the statement
-   * sequence <i>s<sub>k</sub></i> is not a break, continue, return or throw
-   * statement.
+   * sequence <i>s<sub>k</sub></i> is not a break, continue, rethrow, return
+   * or throw statement.
    */
   static const StaticWarningCode CASE_BLOCK_NOT_TERMINATED =
       const StaticWarningCode(
           'CASE_BLOCK_NOT_TERMINATED',
           "The last statement of the 'case' should be 'break', 'continue', "
-          "'return' or 'throw'.",
+          "'rethrow', 'return' or 'throw'.",
           "Try adding one of the required statements.");
 
   /**
diff --git a/pkg/analyzer/lib/src/generated/declaration_resolver.dart b/pkg/analyzer/lib/src/generated/declaration_resolver.dart
index 4d24b8b..e1b68a8 100644
--- a/pkg/analyzer/lib/src/generated/declaration_resolver.dart
+++ b/pkg/analyzer/lib/src/generated/declaration_resolver.dart
@@ -255,8 +255,12 @@
   @override
   Object visitLibraryDirective(LibraryDirective node) {
     super.visitLibraryDirective(node);
-    _resolveAnnotations(
-        node, node.metadata, _enclosingUnit.getAnnotations(node.offset));
+    List<ElementAnnotation> annotations =
+        _enclosingUnit.getAnnotations(node.offset);
+    if (annotations.isEmpty && node.metadata.isNotEmpty) {
+      annotations = _walker.element.library.metadata;
+    }
+    _resolveAnnotations(node, node.metadata, annotations);
     return null;
   }
 
diff --git a/pkg/analyzer/lib/src/generated/error_verifier.dart b/pkg/analyzer/lib/src/generated/error_verifier.dart
index 31131b7..a74fd36 100644
--- a/pkg/analyzer/lib/src/generated/error_verifier.dart
+++ b/pkg/analyzer/lib/src/generated/error_verifier.dart
@@ -2596,7 +2596,11 @@
       }
       // no other switch member after this one
     } else {
-      Statement statement = statements[statements.length - 1];
+      Statement statement = statements.last;
+      if (statement is Block && statement.statements.isNotEmpty) {
+        Block block = statement;
+        statement = block.statements.last;
+      }
       // terminated with statement
       if (statement is BreakStatement ||
           statement is ContinueStatement ||
@@ -2606,7 +2610,8 @@
       // terminated with 'throw' expression
       if (statement is ExpressionStatement) {
         Expression expression = statement.expression;
-        if (expression is ThrowExpression) {
+        if (expression is ThrowExpression ||
+            expression is RethrowExpression) {
           return;
         }
       }
@@ -2618,7 +2623,7 @@
 
   /**
    * Verify that the switch cases in the given switch [statement] are terminated
-   * with 'break', 'continue', 'return' or 'throw'.
+   * with 'break', 'continue', 'rethrow', 'return' or 'throw'.
    *
    * See [StaticWarningCode.CASE_BLOCK_NOT_TERMINATED].
    */
diff --git a/pkg/analyzer/lib/src/summary/format.dart b/pkg/analyzer/lib/src/summary/format.dart
index d24aa70..85ac30a 100644
--- a/pkg/analyzer/lib/src/summary/format.dart
+++ b/pkg/analyzer/lib/src/summary/format.dart
@@ -129,6 +129,296 @@
   }
 }
 
+class AnalysisDriverResolvedUnitBuilder extends Object with _AnalysisDriverResolvedUnitMixin implements idl.AnalysisDriverResolvedUnit {
+  List<AnalysisDriverUnitErrorBuilder> _errors;
+
+  @override
+  List<AnalysisDriverUnitErrorBuilder> get errors => _errors ??= <AnalysisDriverUnitErrorBuilder>[];
+
+  /**
+   * The full list of analysis errors, both syntactic and semantic.
+   */
+  void set errors(List<AnalysisDriverUnitErrorBuilder> value) {
+    this._errors = value;
+  }
+
+  AnalysisDriverResolvedUnitBuilder({List<AnalysisDriverUnitErrorBuilder> errors})
+    : _errors = errors;
+
+  /**
+   * Flush [informative] data recursively.
+   */
+  void flushInformative() {
+    _errors?.forEach((b) => b.flushInformative());
+  }
+
+  /**
+   * Accumulate non-[informative] data into [signature].
+   */
+  void collectApiSignature(api_sig.ApiSignature signature) {
+    if (this._errors == null) {
+      signature.addInt(0);
+    } else {
+      signature.addInt(this._errors.length);
+      for (var x in this._errors) {
+        x?.collectApiSignature(signature);
+      }
+    }
+  }
+
+  List<int> toBuffer() {
+    fb.Builder fbBuilder = new fb.Builder();
+    return fbBuilder.finish(finish(fbBuilder), "ADRU");
+  }
+
+  fb.Offset finish(fb.Builder fbBuilder) {
+    fb.Offset offset_errors;
+    if (!(_errors == null || _errors.isEmpty)) {
+      offset_errors = fbBuilder.writeList(_errors.map((b) => b.finish(fbBuilder)).toList());
+    }
+    fbBuilder.startTable();
+    if (offset_errors != null) {
+      fbBuilder.addOffset(0, offset_errors);
+    }
+    return fbBuilder.endTable();
+  }
+}
+
+idl.AnalysisDriverResolvedUnit readAnalysisDriverResolvedUnit(List<int> buffer) {
+  fb.BufferContext rootRef = new fb.BufferContext.fromBytes(buffer);
+  return const _AnalysisDriverResolvedUnitReader().read(rootRef, 0);
+}
+
+class _AnalysisDriverResolvedUnitReader extends fb.TableReader<_AnalysisDriverResolvedUnitImpl> {
+  const _AnalysisDriverResolvedUnitReader();
+
+  @override
+  _AnalysisDriverResolvedUnitImpl createObject(fb.BufferContext bc, int offset) => new _AnalysisDriverResolvedUnitImpl(bc, offset);
+}
+
+class _AnalysisDriverResolvedUnitImpl extends Object with _AnalysisDriverResolvedUnitMixin implements idl.AnalysisDriverResolvedUnit {
+  final fb.BufferContext _bc;
+  final int _bcOffset;
+
+  _AnalysisDriverResolvedUnitImpl(this._bc, this._bcOffset);
+
+  List<idl.AnalysisDriverUnitError> _errors;
+
+  @override
+  List<idl.AnalysisDriverUnitError> get errors {
+    _errors ??= const fb.ListReader<idl.AnalysisDriverUnitError>(const _AnalysisDriverUnitErrorReader()).vTableGet(_bc, _bcOffset, 0, const <idl.AnalysisDriverUnitError>[]);
+    return _errors;
+  }
+}
+
+abstract class _AnalysisDriverResolvedUnitMixin implements idl.AnalysisDriverResolvedUnit {
+  @override
+  Map<String, Object> toJson() {
+    Map<String, Object> _result = <String, Object>{};
+    if (errors.isNotEmpty) _result["errors"] = errors.map((_value) => _value.toJson()).toList();
+    return _result;
+  }
+
+  @override
+  Map<String, Object> toMap() => {
+    "errors": errors,
+  };
+
+  @override
+  String toString() => convert.JSON.encode(toJson());
+}
+
+class AnalysisDriverUnitErrorBuilder extends Object with _AnalysisDriverUnitErrorMixin implements idl.AnalysisDriverUnitError {
+  String _correction;
+  int _length;
+  String _message;
+  int _offset;
+  String _uniqueName;
+
+  @override
+  String get correction => _correction ??= '';
+
+  /**
+   * The optional correction hint for the error.
+   */
+  void set correction(String value) {
+    this._correction = value;
+  }
+
+  @override
+  int get length => _length ??= 0;
+
+  /**
+   * The length of the error in the file.
+   */
+  void set length(int value) {
+    assert(value == null || value >= 0);
+    this._length = value;
+  }
+
+  @override
+  String get message => _message ??= '';
+
+  /**
+   * The message of the error.
+   */
+  void set message(String value) {
+    this._message = value;
+  }
+
+  @override
+  int get offset => _offset ??= 0;
+
+  /**
+   * The offset from the beginning of the file.
+   */
+  void set offset(int value) {
+    assert(value == null || value >= 0);
+    this._offset = value;
+  }
+
+  @override
+  String get uniqueName => _uniqueName ??= '';
+
+  /**
+   * The unique name of the error code.
+   */
+  void set uniqueName(String value) {
+    this._uniqueName = value;
+  }
+
+  AnalysisDriverUnitErrorBuilder({String correction, int length, String message, int offset, String uniqueName})
+    : _correction = correction,
+      _length = length,
+      _message = message,
+      _offset = offset,
+      _uniqueName = uniqueName;
+
+  /**
+   * Flush [informative] data recursively.
+   */
+  void flushInformative() {
+  }
+
+  /**
+   * Accumulate non-[informative] data into [signature].
+   */
+  void collectApiSignature(api_sig.ApiSignature signature) {
+    signature.addInt(this._offset ?? 0);
+    signature.addInt(this._length ?? 0);
+    signature.addString(this._uniqueName ?? '');
+    signature.addString(this._message ?? '');
+    signature.addString(this._correction ?? '');
+  }
+
+  fb.Offset finish(fb.Builder fbBuilder) {
+    fb.Offset offset_correction;
+    fb.Offset offset_message;
+    fb.Offset offset_uniqueName;
+    if (_correction != null) {
+      offset_correction = fbBuilder.writeString(_correction);
+    }
+    if (_message != null) {
+      offset_message = fbBuilder.writeString(_message);
+    }
+    if (_uniqueName != null) {
+      offset_uniqueName = fbBuilder.writeString(_uniqueName);
+    }
+    fbBuilder.startTable();
+    if (offset_correction != null) {
+      fbBuilder.addOffset(4, offset_correction);
+    }
+    if (_length != null && _length != 0) {
+      fbBuilder.addUint32(1, _length);
+    }
+    if (offset_message != null) {
+      fbBuilder.addOffset(3, offset_message);
+    }
+    if (_offset != null && _offset != 0) {
+      fbBuilder.addUint32(0, _offset);
+    }
+    if (offset_uniqueName != null) {
+      fbBuilder.addOffset(2, offset_uniqueName);
+    }
+    return fbBuilder.endTable();
+  }
+}
+
+class _AnalysisDriverUnitErrorReader extends fb.TableReader<_AnalysisDriverUnitErrorImpl> {
+  const _AnalysisDriverUnitErrorReader();
+
+  @override
+  _AnalysisDriverUnitErrorImpl createObject(fb.BufferContext bc, int offset) => new _AnalysisDriverUnitErrorImpl(bc, offset);
+}
+
+class _AnalysisDriverUnitErrorImpl extends Object with _AnalysisDriverUnitErrorMixin implements idl.AnalysisDriverUnitError {
+  final fb.BufferContext _bc;
+  final int _bcOffset;
+
+  _AnalysisDriverUnitErrorImpl(this._bc, this._bcOffset);
+
+  String _correction;
+  int _length;
+  String _message;
+  int _offset;
+  String _uniqueName;
+
+  @override
+  String get correction {
+    _correction ??= const fb.StringReader().vTableGet(_bc, _bcOffset, 4, '');
+    return _correction;
+  }
+
+  @override
+  int get length {
+    _length ??= const fb.Uint32Reader().vTableGet(_bc, _bcOffset, 1, 0);
+    return _length;
+  }
+
+  @override
+  String get message {
+    _message ??= const fb.StringReader().vTableGet(_bc, _bcOffset, 3, '');
+    return _message;
+  }
+
+  @override
+  int get offset {
+    _offset ??= const fb.Uint32Reader().vTableGet(_bc, _bcOffset, 0, 0);
+    return _offset;
+  }
+
+  @override
+  String get uniqueName {
+    _uniqueName ??= const fb.StringReader().vTableGet(_bc, _bcOffset, 2, '');
+    return _uniqueName;
+  }
+}
+
+abstract class _AnalysisDriverUnitErrorMixin implements idl.AnalysisDriverUnitError {
+  @override
+  Map<String, Object> toJson() {
+    Map<String, Object> _result = <String, Object>{};
+    if (correction != '') _result["correction"] = correction;
+    if (length != 0) _result["length"] = length;
+    if (message != '') _result["message"] = message;
+    if (offset != 0) _result["offset"] = offset;
+    if (uniqueName != '') _result["uniqueName"] = uniqueName;
+    return _result;
+  }
+
+  @override
+  Map<String, Object> toMap() => {
+    "correction": correction,
+    "length": length,
+    "message": message,
+    "offset": offset,
+    "uniqueName": uniqueName,
+  };
+
+  @override
+  String toString() => convert.JSON.encode(toJson());
+}
+
 class CodeRangeBuilder extends Object with _CodeRangeMixin implements idl.CodeRange {
   int _length;
   int _offset;
diff --git a/pkg/analyzer/lib/src/summary/format.fbs b/pkg/analyzer/lib/src/summary/format.fbs
index 3da4512..c3eb5e2 100644
--- a/pkg/analyzer/lib/src/summary/format.fbs
+++ b/pkg/analyzer/lib/src/summary/format.fbs
@@ -782,6 +782,46 @@
 }
 
 /**
+ * Information about a resolved unit.
+ */
+table AnalysisDriverResolvedUnit {
+  /**
+   * The full list of analysis errors, both syntactic and semantic.
+   */
+  errors:[AnalysisDriverUnitError] (id: 0);
+}
+
+/**
+ * Information about an error in a resolved unit.
+ */
+table AnalysisDriverUnitError {
+  /**
+   * The optional correction hint for the error.
+   */
+  correction:string (id: 4);
+
+  /**
+   * The length of the error in the file.
+   */
+  length:uint (id: 1);
+
+  /**
+   * The message of the error.
+   */
+  message:string (id: 3);
+
+  /**
+   * The offset from the beginning of the file.
+   */
+  offset:uint (id: 0);
+
+  /**
+   * The unique name of the error code.
+   */
+  uniqueName:string (id: 2);
+}
+
+/**
  * Information about an element code range.
  */
 table CodeRange {
diff --git a/pkg/analyzer/lib/src/summary/idl.dart b/pkg/analyzer/lib/src/summary/idl.dart
index 61f62a8..c67dee6 100644
--- a/pkg/analyzer/lib/src/summary/idl.dart
+++ b/pkg/analyzer/lib/src/summary/idl.dart
@@ -58,6 +58,56 @@
 const informative = null;
 
 /**
+ * Information about a resolved unit.
+ */
+@TopLevel('ADRU')
+abstract class AnalysisDriverResolvedUnit extends base.SummaryClass {
+  factory AnalysisDriverResolvedUnit.fromBuffer(List<int> buffer) =>
+      generated.readAnalysisDriverResolvedUnit(buffer);
+
+  /**
+   * The full list of analysis errors, both syntactic and semantic.
+   */
+  @Id(0)
+  List<AnalysisDriverUnitError> get errors;
+}
+
+/**
+ * Information about an error in a resolved unit.
+ */
+abstract class AnalysisDriverUnitError extends base.SummaryClass {
+  /**
+   * The optional correction hint for the error.
+   */
+  @Id(4)
+  String get correction;
+
+  /**
+   * The length of the error in the file.
+   */
+  @Id(1)
+  int get length;
+
+  /**
+   * The message of the error.
+   */
+  @Id(3)
+  String get message;
+
+  /**
+   * The offset from the beginning of the file.
+   */
+  @Id(0)
+  int get offset;
+
+  /**
+   * The unique name of the error code.
+   */
+  @Id(2)
+  String get uniqueName;
+}
+
+/**
  * Information about an element code range.
  */
 abstract class CodeRange extends base.SummaryClass {
diff --git a/pkg/analyzer/test/generated/declaration_resolver_test.dart b/pkg/analyzer/test/generated/declaration_resolver_test.dart
index 74232ac..32927b0 100644
--- a/pkg/analyzer/test/generated/declaration_resolver_test.dart
+++ b/pkg/analyzer/test/generated/declaration_resolver_test.dart
@@ -8,6 +8,7 @@
 import 'package:analyzer/dart/element/element.dart';
 import 'package:analyzer/src/dart/ast/ast.dart';
 import 'package:analyzer/src/dart/ast/utilities.dart';
+import 'package:analyzer/src/dart/element/element.dart';
 import 'package:analyzer/src/generated/declaration_resolver.dart';
 import 'package:analyzer/src/generated/engine.dart';
 import 'package:analyzer/src/generated/source.dart';
@@ -167,6 +168,20 @@
     checkMetadata('L');
   }
 
+  void test_metadata_libraryDirective_resynthesized() {
+    CompilationUnit unit = resolveSource('@a library L; const a = null;');
+    expect(unit.directives.single.metadata.single.name.name, 'a');
+    var unitElement = unit.element as CompilationUnitElementImpl;
+    // Damage the unit element - as if "setAnnotations" were not called.
+    // The LibraryElement still has the metadata, we should use it.
+    unitElement.setAnnotations(unit.directives.single.offset, []);
+    expect(unitElement.library.metadata, hasLength(1));
+    // DeclarationResolver on the clone should succeed.
+    CompilationUnit clonedUnit = AstCloner.clone(unit);
+    new DeclarationResolver().resolve(clonedUnit, unit.element);
+    expect(clonedUnit.directives.single.metadata.single.name.name, 'a');
+  }
+
   void test_metadata_localFunctionDeclaration() {
     setupCode('f() { @a g() {} }');
     // Note: metadata on local function declarations is ignored by the
diff --git a/pkg/analyzer/test/src/dart/analysis/driver_test.dart b/pkg/analyzer/test/src/dart/analysis/driver_test.dart
new file mode 100644
index 0000000..34e20ef
--- /dev/null
+++ b/pkg/analyzer/test/src/dart/analysis/driver_test.dart
@@ -0,0 +1,550 @@
+// Copyright (c) 2016, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+library analyzer.test.driver;
+
+import 'dart:async';
+import 'dart:convert';
+
+import 'package:analyzer/dart/ast/ast.dart';
+import 'package:analyzer/error/error.dart';
+import 'package:analyzer/file_system/file_system.dart';
+import 'package:analyzer/file_system/memory_file_system.dart';
+import 'package:analyzer/source/package_map_resolver.dart';
+import 'package:analyzer/src/dart/analysis/byte_store.dart';
+import 'package:analyzer/src/dart/analysis/driver.dart';
+import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/generated/engine.dart' show AnalysisOptionsImpl;
+import 'package:analyzer/src/generated/source.dart';
+import 'package:convert/convert.dart';
+import 'package:crypto/crypto.dart';
+import 'package:test/test.dart';
+import 'package:test_reflective_loader/test_reflective_loader.dart';
+
+import '../../context/mock_sdk.dart';
+
+main() {
+  defineReflectiveSuite(() {
+    defineReflectiveTests(DriverTest);
+  });
+}
+
+/**
+ * Returns a [Future] that completes after pumping the event queue [times]
+ * times. By default, this should pump the event queue enough times to allow
+ * any code to run, as long as it's not waiting on some external event.
+ */
+Future pumpEventQueue([int times = 5000]) {
+  if (times == 0) return new Future.value();
+  // We use a delayed future to allow microtask events to finish. The
+  // Future.value or Future() constructors use scheduleMicrotask themselves and
+  // would therefore not wait for microtask callbacks that are scheduled after
+  // invoking this method.
+  return new Future.delayed(Duration.ZERO, () => pumpEventQueue(times - 1));
+}
+
+@reflectiveTest
+class DriverTest {
+  static final MockSdk sdk = new MockSdk();
+
+  final MemoryResourceProvider provider = new MemoryResourceProvider();
+  final ByteStore byteStore = new _TestByteStore();
+  final ContentCache contentCache = new ContentCache();
+  final StringBuffer logBuffer = new StringBuffer();
+
+  AnalysisDriver driver;
+  final _Monitor idleStatusMonitor = new _Monitor();
+  final List<AnalysisStatus> allStatuses = <AnalysisStatus>[];
+  final List<AnalysisResult> allResults = <AnalysisResult>[];
+
+  String testProject;
+  String testFile;
+
+  void setUp() {
+    new MockSdk();
+    testProject = _p('/test/lib');
+    testFile = _p('/test/lib/test.dart');
+    driver = new AnalysisDriver(
+        new PerformanceLog(logBuffer),
+        provider,
+        byteStore,
+        contentCache,
+        new SourceFactory([
+          new DartUriResolver(sdk),
+          new PackageMapUriResolver(provider, <String, List<Folder>>{
+            'test': [provider.getFolder(testProject)]
+          })
+        ], null, provider),
+        new AnalysisOptionsImpl()..strongMode = true);
+    driver.status.lastWhere((status) {
+      allStatuses.add(status);
+      if (status.isIdle) {
+        idleStatusMonitor.notify();
+      }
+    });
+    driver.results.listen(allResults.add);
+  }
+
+  test_addFile_thenRemove() async {
+    var a = _p('/test/lib/a.dart');
+    var b = _p('/test/lib/b.dart');
+    provider.newFile(a, 'class A {}');
+    provider.newFile(b, 'class B {}');
+    driver.addFile(a);
+    driver.addFile(b);
+
+    // Now remove 'a'.
+    driver.removeFile(a);
+
+    await _waitForIdle();
+
+    // Only 'b' has been analyzed, because 'a' was removed before we started.
+    expect(allResults, hasLength(1));
+    expect(allResults[0].path, b);
+  }
+
+  test_changeFile_implicitlyAnalyzed() async {
+    var a = _p('/test/lib/a.dart');
+    var b = _p('/test/lib/b.dart');
+    provider.newFile(
+        a,
+        r'''
+import 'b.dart';
+var A = B;
+''');
+    provider.newFile(b, 'var B = 1;');
+
+    driver.priorityFiles = [a];
+    driver.addFile(a);
+
+    // We have a result only for "a".
+    await _waitForIdle();
+    expect(allResults, hasLength(1));
+    {
+      AnalysisResult ar = allResults.firstWhere((r) => r.path == a);
+      expect(_getTopLevelVarType(ar.unit, 'A'), 'int');
+    }
+    allResults.clear();
+
+    // Change "b" and notify.
+    provider.updateFile(b, 'var B = 1.2;');
+    driver.changeFile(b);
+
+    // While "b" is not analyzed explicitly, it is analyzed implicitly.
+    // The change causes "a" to be reanalyzed.
+    await _waitForIdle();
+    expect(allResults, hasLength(1));
+    {
+      AnalysisResult ar = allResults.firstWhere((r) => r.path == a);
+      expect(_getTopLevelVarType(ar.unit, 'A'), 'double');
+    }
+  }
+
+  test_changeFile_selfConsistent() async {
+    var a = _p('/test/lib/a.dart');
+    var b = _p('/test/lib/b.dart');
+    provider.newFile(
+        a,
+        r'''
+import 'b.dart';
+var A1 = 1;
+var A2 = B1;
+''');
+    provider.newFile(
+        b,
+        r'''
+import 'a.dart';
+var B1 = A1;
+''');
+
+    driver.priorityFiles = [a, b];
+    driver.addFile(a);
+    driver.addFile(b);
+    await _waitForIdle();
+
+    // We have results for both "a" and "b".
+    expect(allResults, hasLength(2));
+    {
+      AnalysisResult ar = allResults.firstWhere((r) => r.path == a);
+      expect(_getTopLevelVarType(ar.unit, 'A1'), 'int');
+      expect(_getTopLevelVarType(ar.unit, 'A2'), 'int');
+    }
+    {
+      AnalysisResult br = allResults.firstWhere((r) => r.path == b);
+      expect(_getTopLevelVarType(br.unit, 'B1'), 'int');
+    }
+
+    // Clear the results and update "a".
+    allResults.clear();
+    provider.updateFile(
+        a,
+        r'''
+import 'b.dart';
+var A1 = 1.2;
+var A2 = B1;
+''');
+    driver.changeFile(a);
+
+    // We again get results for both "a" and "b".
+    // The results are consistent.
+    await _waitForIdle();
+    expect(allResults, hasLength(2));
+    {
+      AnalysisResult ar = allResults.firstWhere((r) => r.path == a);
+      expect(_getTopLevelVarType(ar.unit, 'A1'), 'double');
+      expect(_getTopLevelVarType(ar.unit, 'A2'), 'double');
+    }
+    {
+      AnalysisResult br = allResults.firstWhere((r) => r.path == b);
+      expect(_getTopLevelVarType(br.unit, 'B1'), 'double');
+    }
+  }
+
+  test_changeFile_single() async {
+    _addTestFile('var V = 1;', priority: true);
+
+    // Initial analysis.
+    {
+      await _waitForIdle();
+      expect(allResults, hasLength(1));
+      AnalysisResult result = allResults[0];
+      expect(result.path, testFile);
+      expect(_getTopLevelVarType(result.unit, 'V'), 'int');
+    }
+
+    // Update the file, but don't notify the driver.
+    allResults.clear();
+    provider.updateFile(testFile, 'var V = 1.2');
+
+    // No new results.
+    await pumpEventQueue();
+    expect(allResults, isEmpty);
+
+    // Notify the driver about the change.
+    driver.changeFile(testFile);
+
+    // We get a new result.
+    {
+      await _waitForIdle();
+      expect(allResults, hasLength(1));
+      AnalysisResult result = allResults[0];
+      expect(result.path, testFile);
+      expect(_getTopLevelVarType(result.unit, 'V'), 'double');
+    }
+  }
+
+  test_getResult() async {
+    String content = 'int f() => 42;';
+    _addTestFile(content, priority: true);
+
+    AnalysisResult result = await driver.getResult(testFile);
+    expect(result.path, testFile);
+    expect(result.uri.toString(), 'package:test/test.dart');
+    expect(result.content, content);
+    expect(result.contentHash, _md5(content));
+    expect(result.unit, isNotNull);
+    expect(result.errors, hasLength(0));
+
+    var f = result.unit.declarations[0] as FunctionDeclaration;
+    expect(f.name.staticType.toString(), '() → int');
+    expect(f.returnType.type.toString(), 'int');
+
+    // The same result is also received through the stream.
+    await _waitForIdle();
+    expect(allResults, [result]);
+  }
+
+  test_getResult_errors() async {
+    String content = 'main() { int vv; }';
+    _addTestFile(content, priority: true);
+
+    AnalysisResult result = await driver.getResult(testFile);
+    expect(result.path, testFile);
+    expect(result.errors, hasLength(1));
+    {
+      AnalysisError error = result.errors[0];
+      expect(error.offset, 13);
+      expect(error.length, 2);
+      expect(error.errorCode, HintCode.UNUSED_LOCAL_VARIABLE);
+      expect(error.message, "The value of the local variable 'vv' isn't used.");
+      expect(error.correction, "Try removing the variable, or using it.");
+    }
+  }
+
+  test_getResult_selfConsistent() async {
+    var a = _p('/test/lib/a.dart');
+    var b = _p('/test/lib/b.dart');
+    provider.newFile(
+        a,
+        r'''
+import 'b.dart';
+var A1 = 1;
+var A2 = B1;
+''');
+    provider.newFile(
+        b,
+        r'''
+import 'a.dart';
+var B1 = A1;
+''');
+
+    driver.addFile(a);
+    driver.addFile(b);
+    await _waitForIdle();
+
+    {
+      AnalysisResult result = await driver.getResult(a);
+      expect(_getTopLevelVarType(result.unit, 'A1'), 'int');
+      expect(_getTopLevelVarType(result.unit, 'A2'), 'int');
+    }
+
+    // Update "a" that that "A1" is now "double".
+    // Get result for "a".
+    //
+    // Even though we have not notified the driver about the change,
+    // we still get "double" for "A1", because getResult() re-read the content.
+    //
+    // We also get "double" for "A2", even though "A2" has the type from "b".
+    // That's because we check for "a" API signature consistency, and because
+    // it has changed, we invalidated the dependency cache, relinked libraries
+    // and recomputed types.
+    provider.updateFile(
+        a,
+        r'''
+import 'b.dart';
+var A1 = 1.2;
+var A2 = B1;
+''');
+    {
+      AnalysisResult result = await driver.getResult(a);
+      expect(_getTopLevelVarType(result.unit, 'A1'), 'double');
+      expect(_getTopLevelVarType(result.unit, 'A2'), 'double');
+    }
+  }
+
+  test_getResult_thenRemove() async {
+    _addTestFile('main() {}', priority: true);
+
+    Future<AnalysisResult> resultFuture = driver.getResult(testFile);
+    driver.removeFile(testFile);
+
+    AnalysisResult result = await resultFuture;
+    expect(result, isNotNull);
+    expect(result.path, testFile);
+    expect(result.unit, isNotNull);
+  }
+
+  test_getResult_twoPendingFutures() async {
+    String content = 'main() {}';
+    _addTestFile(content, priority: true);
+
+    Future<AnalysisResult> future1 = driver.getResult(testFile);
+    Future<AnalysisResult> future2 = driver.getResult(testFile);
+
+    // Both futures complete, with the same result.
+    AnalysisResult result1 = await future1;
+    AnalysisResult result2 = await future2;
+    expect(result2, same(result1));
+    expect(result1.path, testFile);
+    expect(result1.unit, isNotNull);
+  }
+
+  test_removeFile_changeFile_implicitlyAnalyzed() async {
+    var a = _p('/test/lib/a.dart');
+    var b = _p('/test/lib/b.dart');
+    provider.newFile(
+        a,
+        r'''
+import 'b.dart';
+var A = B;
+''');
+    provider.newFile(b, 'var B = 1;');
+
+    driver.priorityFiles = [a, b];
+    driver.addFile(a);
+    driver.addFile(b);
+
+    // We have results for both "a" and "b".
+    await _waitForIdle();
+    expect(allResults, hasLength(2));
+    {
+      AnalysisResult ar = allResults.firstWhere((r) => r.path == a);
+      expect(_getTopLevelVarType(ar.unit, 'A'), 'int');
+    }
+    {
+      AnalysisResult br = allResults.firstWhere((r) => r.path == b);
+      expect(_getTopLevelVarType(br.unit, 'B'), 'int');
+    }
+    allResults.clear();
+
+    // Remove "b" and send the change notification.
+    provider.updateFile(b, 'var B = 1.2;');
+    driver.removeFile(b);
+    driver.changeFile(b);
+
+    // While "b" is not analyzed explicitly, it is analyzed implicitly.
+    // We don't get a result for "b".
+    // But the change causes "a" to be reanalyzed.
+    await _waitForIdle();
+    expect(allResults, hasLength(1));
+    {
+      AnalysisResult ar = allResults.firstWhere((r) => r.path == a);
+      expect(_getTopLevelVarType(ar.unit, 'A'), 'double');
+    }
+  }
+
+  test_removeFile_changeFile_notAnalyzed() async {
+    _addTestFile('main() {}');
+
+    // We have a result.
+    await _waitForIdle();
+    expect(allResults, hasLength(1));
+    expect(allResults[0].path, testFile);
+    allResults.clear();
+
+    // Remove the file and send the change notification.
+    // The change notification does nothing, because the file is explicitly
+    // or implicitly analyzed.
+    driver.removeFile(testFile);
+    driver.changeFile(testFile);
+
+    await _waitForIdle();
+    expect(allResults, isEmpty);
+  }
+
+  test_results_priority() async {
+    String content = 'int f() => 42;';
+    _addTestFile(content, priority: true);
+
+    await _waitForIdle();
+
+    expect(allResults, hasLength(1));
+    AnalysisResult result = allResults.single;
+    expect(result.path, testFile);
+    expect(result.uri.toString(), 'package:test/test.dart');
+    expect(result.content, content);
+    expect(result.contentHash, _md5(content));
+    expect(result.unit, isNotNull);
+    expect(result.errors, hasLength(0));
+
+    var f = result.unit.declarations[0] as FunctionDeclaration;
+    expect(f.name.staticType.toString(), '() → int');
+    expect(f.returnType.type.toString(), 'int');
+  }
+
+  test_results_priorityFirst() async {
+    var a = _p('/test/lib/a.dart');
+    var b = _p('/test/lib/b.dart');
+    var c = _p('/test/lib/c.dart');
+    provider.newFile(a, 'class A {}');
+    provider.newFile(b, 'class B {}');
+    provider.newFile(c, 'class C {}');
+
+    driver.addFile(a);
+    driver.addFile(b);
+    driver.addFile(c);
+    driver.priorityFiles = [b];
+    await _waitForIdle();
+
+    expect(allResults, hasLength(3));
+    AnalysisResult result = allResults[0];
+    expect(result.path, b);
+    expect(result.unit, isNotNull);
+    expect(result.errors, hasLength(0));
+  }
+
+  test_results_regular() async {
+    String content = 'int f() => 42;';
+    _addTestFile(content);
+    await _waitForIdle();
+
+    expect(allResults, hasLength(1));
+    AnalysisResult result = allResults.single;
+    expect(result.path, testFile);
+    expect(result.uri.toString(), 'package:test/test.dart');
+    expect(result.content, isNull);
+    expect(result.contentHash, _md5(content));
+    expect(result.unit, isNull);
+    expect(result.errors, hasLength(0));
+  }
+
+  test_results_status() async {
+    _addTestFile('int f() => 42;');
+    await _waitForIdle();
+
+    expect(allStatuses, hasLength(2));
+    expect(allStatuses[0].isAnalyzing, isTrue);
+    expect(allStatuses[0].isIdle, isFalse);
+    expect(allStatuses[1].isAnalyzing, isFalse);
+    expect(allStatuses[1].isIdle, isTrue);
+  }
+
+  void _addTestFile(String content, {bool priority: false}) {
+    provider.newFile(testFile, content);
+    driver.addFile(testFile);
+    if (priority) {
+      driver.priorityFiles = [testFile];
+    }
+  }
+
+  VariableDeclaration _getTopLevelVar(CompilationUnit unit, String name) {
+    for (CompilationUnitMember declaration in unit.declarations) {
+      if (declaration is TopLevelVariableDeclaration) {
+        for (VariableDeclaration variable in declaration.variables.variables) {
+          if (variable.name.name == name) {
+            return variable;
+          }
+        }
+      }
+    }
+    fail('Cannot find the top-level variable $name in\n$unit');
+    return null;
+  }
+
+  String _getTopLevelVarType(CompilationUnit unit, String name) {
+    return _getTopLevelVar(unit, name).element.type.toString();
+  }
+
+  /**
+   * Return the [provider] specific path for the given Posix [path].
+   */
+  String _p(String path) => provider.convertPath(path);
+
+  Future<Null> _waitForIdle() async {
+    await idleStatusMonitor.signal;
+  }
+
+  static String _md5(String content) {
+    return hex.encode(md5.convert(UTF8.encode(content)).bytes);
+  }
+}
+
+class _Monitor {
+  Completer<Null> _completer = new Completer<Null>();
+
+  Future<Null> get signal async {
+    await _completer.future;
+    _completer = new Completer<Null>();
+  }
+
+  void notify() {
+    if (!_completer.isCompleted) {
+      _completer.complete(null);
+    }
+  }
+}
+
+class _TestByteStore implements ByteStore {
+  final map = <String, List<int>>{};
+
+  @override
+  List<int> get(String key) {
+    return map[key];
+  }
+
+  @override
+  void put(String key, List<int> bytes) {
+    map[key] = bytes;
+  }
+}
diff --git a/pkg/analyzer/test/src/dart/analysis/test_all.dart b/pkg/analyzer/test/src/dart/analysis/test_all.dart
new file mode 100644
index 0000000..fa508e7
--- /dev/null
+++ b/pkg/analyzer/test/src/dart/analysis/test_all.dart
@@ -0,0 +1,16 @@
+// Copyright (c) 2016, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+library analyzer.test.src.dart.analysis.test_all;
+
+import 'package:test_reflective_loader/test_reflective_loader.dart';
+
+import 'driver_test.dart' as driver;
+
+/// Utility for manually running all tests.
+main() {
+  defineReflectiveSuite(() {
+    driver.main();
+  }, name: 'analysis');
+}
diff --git a/pkg/analyzer/test/src/dart/test_all.dart b/pkg/analyzer/test/src/dart/test_all.dart
index 11368b5..78ac68f 100644
--- a/pkg/analyzer/test/src/dart/test_all.dart
+++ b/pkg/analyzer/test/src/dart/test_all.dart
@@ -6,6 +6,7 @@
 
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
+import 'analysis/test_all.dart' as analysis;
 import 'ast/test_all.dart' as ast;
 import 'constant/test_all.dart' as constant;
 import 'element/test_all.dart' as element;
@@ -14,6 +15,7 @@
 /// Utility for manually running all tests.
 main() {
   defineReflectiveSuite(() {
+    analysis.main();
     ast.main();
     constant.main();
     element.main();
diff --git a/pkg/compiler/lib/src/inferrer/simple_types_inferrer.dart b/pkg/compiler/lib/src/inferrer/simple_types_inferrer.dart
index 7aba120..0e95ce5 100644
--- a/pkg/compiler/lib/src/inferrer/simple_types_inferrer.dart
+++ b/pkg/compiler/lib/src/inferrer/simple_types_inferrer.dart
@@ -481,9 +481,7 @@
         });
       }
       if (analyzedElement.isGenerativeConstructor && cls.isAbstract) {
-        if (compiler.closedWorld.isDirectlyInstantiated(cls)) {
-          returnType = types.nonNullExact(cls);
-        } else if (compiler.closedWorld.isIndirectlyInstantiated(cls)) {
+        if (compiler.closedWorld.isInstantiated(cls)) {
           returnType = types.nonNullSubclass(cls);
         } else {
           // TODO(johnniwinther): Avoid analyzing [analyzedElement] in this
diff --git a/pkg/compiler/lib/src/ssa/optimize.dart b/pkg/compiler/lib/src/ssa/optimize.dart
index cbc92f6..e9bfd4a 100644
--- a/pkg/compiler/lib/src/ssa/optimize.dart
+++ b/pkg/compiler/lib/src/ssa/optimize.dart
@@ -2110,29 +2110,22 @@
       return;
     }
 
-    List<HInstruction> ifUsers = <HInstruction>[];
-    List<HInstruction> notIfUsers = <HInstruction>[];
+    List<HBasicBlock> trueTargets = <HBasicBlock>[];
+    List<HBasicBlock> falseTargets = <HBasicBlock>[];
 
-    collectIfUsers(instruction, ifUsers, notIfUsers);
+    collectTargets(instruction, trueTargets, falseTargets);
 
-    if (ifUsers.isEmpty && notIfUsers.isEmpty) return;
+    if (trueTargets.isEmpty && falseTargets.isEmpty) return;
 
     TypeMask convertedType =
         new TypeMask.nonNullSubtype(element, compiler.closedWorld);
     HInstruction input = instruction.expression;
 
-    for (HIf ifUser in ifUsers) {
-      insertTypePropagationForDominatedUsers(
-          ifUser.thenBlock, input, convertedType);
-      // TODO(ngeoffray): Also change uses for the else block on a type
-      // that knows it is not of a specific type.
+    for (HBasicBlock block in trueTargets) {
+      insertTypePropagationForDominatedUsers(block, input, convertedType);
     }
-    for (HIf ifUser in notIfUsers) {
-      insertTypePropagationForDominatedUsers(
-          ifUser.elseBlock, input, convertedType);
-      // TODO(ngeoffray): Also change uses for the then block on a type
-      // that knows it is not of a specific type.
-    }
+    // TODO(sra): Also strengthen uses for when the condition is known
+    // false. Avoid strengthening to `null`.
   }
 
   void visitIdentity(HIdentity instruction) {
@@ -2151,34 +2144,50 @@
 
     if (!input.instructionType.isNullable) return;
 
-    List<HInstruction> ifUsers = <HInstruction>[];
-    List<HInstruction> notIfUsers = <HInstruction>[];
+    List<HBasicBlock> trueTargets = <HBasicBlock>[];
+    List<HBasicBlock> falseTargets = <HBasicBlock>[];
 
-    collectIfUsers(instruction, ifUsers, notIfUsers);
+    collectTargets(instruction, trueTargets, falseTargets);
 
-    if (ifUsers.isEmpty && notIfUsers.isEmpty) return;
+    if (trueTargets.isEmpty && falseTargets.isEmpty) return;
 
     TypeMask nonNullType = input.instructionType.nonNullable();
 
-    for (HIf ifUser in ifUsers) {
-      insertTypePropagationForDominatedUsers(
-          ifUser.elseBlock, input, nonNullType);
-      // Uses in thenBlock are `null`, but probably not common.
+    for (HBasicBlock block in falseTargets) {
+      insertTypePropagationForDominatedUsers(block, input, nonNullType);
     }
-    for (HIf ifUser in notIfUsers) {
-      insertTypePropagationForDominatedUsers(
-          ifUser.thenBlock, input, nonNullType);
-      // Uses in elseBlock are `null`, but probably not common.
-    }
+    // We don't strengthen the known-true references. It doesn't happen often
+    // and we don't want "if (x==null) return x;" to convert between JavaScript
+    // 'null' and 'undefined'.
   }
 
-  collectIfUsers(HInstruction instruction, List<HInstruction> ifUsers,
-      List<HInstruction> notIfUsers) {
+  collectTargets(HInstruction instruction, List<HBasicBlock> trueTargets,
+                 List<HBasicBlock> falseTargets) {
     for (HInstruction user in instruction.usedBy) {
       if (user is HIf) {
-        ifUsers.add(user);
+        trueTargets?.add(user.thenBlock);
+        falseTargets?.add(user.elseBlock);
       } else if (user is HNot) {
-        collectIfUsers(user, notIfUsers, ifUsers);
+        collectTargets(user, falseTargets, trueTargets);
+      } else if (user is HPhi) {
+        List<HInstruction> inputs = user.inputs;
+        if (inputs.length == 2) {
+          assert(inputs.contains(instruction));
+          HInstruction other = inputs[(inputs[0] == instruction) ? 1 : 0];
+          if (other.isConstantTrue()) {
+            // The condition flows to a HPhi(true, user), which means that a
+            // downstream HIf has true-branch control flow that does not depend
+            // on the original instruction, so stop collecting [trueTargets].
+            collectTargets(user, null, falseTargets);
+          } else if (other.isConstantFalse()) {
+            // Ditto for false.
+            collectTargets(user, trueTargets, null);
+          }
+        }
+      } else if (user is HBoolify) {
+        // We collect targets for strictly boolean operations so HBoolify cannot
+        // change the result.
+        collectTargets(user, trueTargets, falseTargets);
       }
     }
   }
diff --git a/pkg/compiler/lib/src/types/union_type_mask.dart b/pkg/compiler/lib/src/types/union_type_mask.dart
index 8ba9a6a..49f9b44 100644
--- a/pkg/compiler/lib/src/types/union_type_mask.dart
+++ b/pkg/compiler/lib/src/types/union_type_mask.dart
@@ -88,6 +88,8 @@
   }
 
   static TypeMask flatten(List<FlatTypeMask> masks, ClosedWorld closedWorld) {
+    // TODO(johnniwinther): Move this computation to [ClosedWorld] and use the
+    // class set structures.
     assert(masks.length > 1);
     // If either type mask is a subtype type mask, we cannot use a
     // subclass type mask to represent their union.
@@ -104,7 +106,7 @@
     for (Entity candidate in candidates) {
       bool isInstantiatedStrictSubclass(cls) =>
           cls != candidate &&
-          closedWorld.isDirectlyInstantiated(cls) &&
+          closedWorld.isExplicitlyInstantiated(cls) &&
           closedWorld.isSubclassOf(cls, candidate);
 
       int size;
diff --git a/pkg/compiler/lib/src/universe/class_set.dart b/pkg/compiler/lib/src/universe/class_set.dart
index 637fd16..39f507a 100644
--- a/pkg/compiler/lib/src/universe/class_set.dart
+++ b/pkg/compiler/lib/src/universe/class_set.dart
@@ -6,6 +6,7 @@
 
 import 'dart:collection' show IterableBase;
 
+import '../common.dart';
 import '../elements/elements.dart' show ClassElement;
 import '../util/enumset.dart' show EnumSet;
 import '../util/util.dart' show Link;
@@ -15,6 +16,7 @@
   UNINSTANTIATED,
   DIRECTLY_INSTANTIATED,
   INDIRECTLY_INSTANTIATED,
+  ABSTRACTLY_INSTANTIATED,
 }
 
 /// Node for [cls] in a tree forming the subclass relation of [ClassElement]s.
@@ -49,16 +51,18 @@
   static final EnumSet<Instantiation> INSTANTIATED =
       new EnumSet<Instantiation>.fromValues(const <Instantiation>[
     Instantiation.DIRECTLY_INSTANTIATED,
-    Instantiation.INDIRECTLY_INSTANTIATED
+    Instantiation.INDIRECTLY_INSTANTIATED,
+    Instantiation.ABSTRACTLY_INSTANTIATED,
   ], fixed: true);
 
-  /// Enum set for selecting directly instantiated classes in
+  /// Enum set for selecting directly and abstractly instantiated classes in
   /// [ClassHierarchyNode.subclassesByMask],
   /// [ClassHierarchyNode.subclassesByMask] and [ClassSet.subtypesByMask].
-  static final EnumSet<Instantiation> DIRECTLY_INSTANTIATED =
-      new EnumSet<Instantiation>.fromValues(
-          const <Instantiation>[Instantiation.DIRECTLY_INSTANTIATED],
-          fixed: true);
+  static final EnumSet<Instantiation> EXPLICITLY_INSTANTIATED =
+      new EnumSet<Instantiation>.fromValues(const <Instantiation>[
+    Instantiation.DIRECTLY_INSTANTIATED,
+    Instantiation.ABSTRACTLY_INSTANTIATED
+  ], fixed: true);
 
   /// Enum set for selecting all classes in
   /// [ClassHierarchyNode.subclassesByMask],
@@ -72,7 +76,8 @@
   static EnumSet<Instantiation> createMask(
       {bool includeDirectlyInstantiated: true,
       bool includeIndirectlyInstantiated: true,
-      bool includeUninstantiated: true}) {
+      bool includeUninstantiated: true,
+      bool includeAbstractlyInstantiated: true}) {
     EnumSet<Instantiation> mask = new EnumSet<Instantiation>();
     if (includeDirectlyInstantiated) {
       mask.add(Instantiation.DIRECTLY_INSTANTIATED);
@@ -83,6 +88,9 @@
     if (includeUninstantiated) {
       mask.add(Instantiation.UNINSTANTIATED);
     }
+    if (includeAbstractlyInstantiated) {
+      mask.add(Instantiation.ABSTRACTLY_INSTANTIATED);
+    }
     return mask;
   }
 
@@ -106,23 +114,54 @@
 
   void set isDirectlyInstantiated(bool value) {
     if (value != isDirectlyInstantiated) {
-      ClassHierarchyNode parent = parentNode;
-      if (value) {
-        _mask.remove(Instantiation.UNINSTANTIATED);
-        _mask.add(Instantiation.DIRECTLY_INSTANTIATED);
-        while (parent != null) {
-          parent._updateInstantiatedSubclassCount(1);
-          parent = parent.parentNode;
-        }
-      } else {
-        _mask.remove(Instantiation.DIRECTLY_INSTANTIATED);
-        if (_mask.isEmpty) {
-          _mask.add(Instantiation.UNINSTANTIATED);
-        }
-        while (parent != null) {
-          parent._updateInstantiatedSubclassCount(-1);
-          parent = parent.parentNode;
-        }
+      _updateParentInstantiatedSubclassCount(
+          Instantiation.DIRECTLY_INSTANTIATED,
+          add: value);
+    }
+  }
+
+  /// `true` if [cls] has been abstractly instantiated. This means that at
+  /// runtime instances of [cls] or unknown subclasses of [cls] are assumed to
+  /// exist.
+  ///
+  /// This is used to mark native and/or reflectable classes as instantiated.
+  /// For native classes we do not know the exact class that instantiates [cls]
+  /// so [cls] here represents the root of the subclasses. For reflectable
+  /// classes we need event abstract classes to be 'live' even though they
+  /// cannot themselves be instantiated.
+  bool get isAbstractlyInstantiated =>
+      _mask.contains(Instantiation.ABSTRACTLY_INSTANTIATED);
+
+  void set isAbstractlyInstantiated(bool value) {
+    if (value != isAbstractlyInstantiated) {
+      _updateParentInstantiatedSubclassCount(
+          Instantiation.ABSTRACTLY_INSTANTIATED,
+          add: value);
+    }
+  }
+
+  /// `true` if [cls] is either directly or abstractly instantiated.
+  bool get isExplicitlyInstantiated =>
+      isDirectlyInstantiated || isAbstractlyInstantiated;
+
+  void _updateParentInstantiatedSubclassCount(Instantiation instantiation,
+      {bool add}) {
+    ClassHierarchyNode parent = parentNode;
+    if (add) {
+      _mask.remove(Instantiation.UNINSTANTIATED);
+      _mask.add(instantiation);
+      while (parent != null) {
+        parent._updateInstantiatedSubclassCount(1);
+        parent = parent.parentNode;
+      }
+    } else {
+      _mask.remove(instantiation);
+      if (_mask.isEmpty) {
+        _mask.add(Instantiation.UNINSTANTIATED);
+      }
+      while (parent != null) {
+        parent._updateInstantiatedSubclassCount(-1);
+        parent = parent.parentNode;
       }
     }
   }
@@ -188,8 +227,9 @@
     return false;
   }
 
-  /// `true` if [cls] has been directly or indirectly instantiated.
-  bool get isInstantiated => isDirectlyInstantiated || isIndirectlyInstantiated;
+  /// `true` if [cls] has been directly, indirectly, or abstractly instantiated.
+  bool get isInstantiated =>
+      isExplicitlyInstantiated || isIndirectlyInstantiated;
 
   /// Returns an [Iterable] of the subclasses of [cls] possibly including [cls].
   ///
@@ -270,9 +310,12 @@
   }
 
   ClassElement _computeLeastUpperInstantiatedSubclass() {
-    if (isDirectlyInstantiated) {
+    if (isExplicitlyInstantiated) {
       return cls;
     }
+    if (!isInstantiated) {
+      return null;
+    }
     ClassHierarchyNode subclass;
     for (Link<ClassHierarchyNode> link = _directSubclasses;
         !link.isEmpty;
@@ -311,6 +354,9 @@
     if (isIndirectlyInstantiated) {
       sb.write(' indirectly');
     }
+    if (isAbstractlyInstantiated) {
+      sb.write(' abstractly');
+    }
     sb.write(' [');
     if (_directSubclasses.isEmpty) {
       sb.write(']');
@@ -439,7 +485,7 @@
     int count = node.instantiatedSubclassCount;
     if (_subtypes != null) {
       for (ClassHierarchyNode subtypeNode in _subtypes) {
-        if (subtypeNode.isDirectlyInstantiated) {
+        if (subtypeNode.isExplicitlyInstantiated) {
           count++;
         }
         count += subtypeNode.instantiatedSubclassCount;
@@ -647,7 +693,7 @@
   }
 
   ClassElement _computeLeastUpperInstantiatedSubtype() {
-    if (node.isDirectlyInstantiated) {
+    if (node.isExplicitlyInstantiated) {
       return cls;
     }
     if (_subtypes == null) {
diff --git a/pkg/compiler/lib/src/universe/world_builder.dart b/pkg/compiler/lib/src/universe/world_builder.dart
index d574f3a..470adf3 100644
--- a/pkg/compiler/lib/src/universe/world_builder.dart
+++ b/pkg/compiler/lib/src/universe/world_builder.dart
@@ -10,6 +10,8 @@
 import '../compiler.dart' show Compiler;
 import '../dart_types.dart';
 import '../elements/elements.dart';
+import '../universe/class_set.dart' show Instantiation;
+import '../util/enumset.dart';
 import '../util/util.dart';
 import '../world.dart' show World, ClosedWorld, OpenWorld;
 import 'selector.dart' show Selector;
@@ -156,6 +158,10 @@
 
   /// Set of all fields that are statically known to be written to.
   Iterable<Element> get fieldSetters;
+
+  /// Call [f] for all directly or abstractly instantiated classes.
+  void forEachInstantiatedClass(
+      f(ClassElement cls, EnumSet<Instantiation> instantiations));
 }
 
 class ResolutionWorldBuilderImpl implements ResolutionWorldBuilder {
@@ -166,8 +172,8 @@
   /// Invariant: Elements are declaration elements.
   // TODO(johnniwinther): [_directlyInstantiatedClasses] and
   // [_instantiatedTypes] sets should be merged.
-  final Set<ClassElement> _directlyInstantiatedClasses =
-      new Set<ClassElement>();
+  final Map<ClassElement, EnumSet<Instantiation>> _directlyInstantiatedClasses =
+      <ClassElement, EnumSet<Instantiation>>{};
 
   /// The set of all directly instantiated types, that is, the types of the
   /// directly instantiated classes.
@@ -237,7 +243,7 @@
   /// super-call.
   // TODO(johnniwinther): Improve semantic precision.
   Iterable<ClassElement> get directlyInstantiatedClasses {
-    return _directlyInstantiatedClasses;
+    return _directlyInstantiatedClasses.keys;
   }
 
   /// All directly instantiated types, that is, the types of the directly
@@ -280,7 +286,13 @@
         // TODO(herhut): Track classes required by mirrors seperately.
         ||
         byMirrors) {
-      _directlyInstantiatedClasses.add(cls);
+      EnumSet<Instantiation> instantiations = _directlyInstantiatedClasses
+          .putIfAbsent(cls, () => new EnumSet<Instantiation>());
+      if (isNative || byMirrors) {
+        instantiations.add(Instantiation.ABSTRACTLY_INSTANTIATED);
+      } else {
+        instantiations.add(Instantiation.DIRECTLY_INSTANTIATED);
+      }
     }
 
     // TODO(johnniwinther): Replace this by separate more specific mappings that
@@ -295,6 +307,12 @@
     }
   }
 
+  @override
+  void forEachInstantiatedClass(
+      f(ClassElement cls, EnumSet<Instantiation> instantiations)) {
+    _directlyInstantiatedClasses.forEach(f);
+  }
+
   bool _hasMatchingSelector(Map<Selector, SelectorConstraints> selectors,
       Element member, OpenWorld world) {
     if (selectors == null) return false;
diff --git a/pkg/compiler/lib/src/world.dart b/pkg/compiler/lib/src/world.dart
index c6a20e0..dbeee8a 100644
--- a/pkg/compiler/lib/src/world.dart
+++ b/pkg/compiler/lib/src/world.dart
@@ -25,6 +25,7 @@
 import 'universe/function_set.dart' show FunctionSet;
 import 'universe/selector.dart' show Selector;
 import 'universe/side_effects.dart' show SideEffects;
+import 'util/enumset.dart';
 import 'util/util.dart' show Link;
 
 /// Common superinterface for [OpenWorld] and [ClosedWorld].
@@ -48,9 +49,26 @@
   /// Returns `true` if [cls] is either directly or indirectly instantiated.
   bool isInstantiated(ClassElement cls);
 
-  /// Returns `true` if [cls] is directly instantiated.
+  /// Returns `true` if [cls] is directly instantiated. This means that at
+  /// runtime instances of exactly [cls] are assumed to exist.
   bool isDirectlyInstantiated(ClassElement cls);
 
+  /// Returns `true` if [cls] is abstractly instantiated. This means that at
+  /// runtime instances of [cls] or unknown subclasses of [cls] are assumed to
+  /// exist.
+  ///
+  /// This is used to mark native and/or reflectable classes as instantiated.
+  /// For native classes we do not know the exact class that instantiates [cls]
+  /// so [cls] here represents the root of the subclasses. For reflectable
+  /// classes we need event abstract classes to be 'live' even though they
+  /// cannot themselves be instantiated.
+  bool isAbstractlyInstantiated(ClassElement cls);
+
+  /// Returns `true` if [cls] is either directly or abstractly instantiated.
+  ///
+  /// See [isDirectlyInstantiated] and [isAbstractlyInstantiated].
+  bool isExplicitlyInstantiated(ClassElement cls);
+
   /// Returns `true` if [cls] is indirectly instantiated, that is through a
   /// subclass.
   bool isIndirectlyInstantiated(ClassElement cls);
@@ -393,6 +411,20 @@
   }
 
   @override
+  bool isAbstractlyInstantiated(ClassElement cls) {
+    assert(isClosed);
+    ClassHierarchyNode node = _classHierarchyNodes[cls.declaration];
+    return node != null && node.isAbstractlyInstantiated;
+  }
+
+  @override
+  bool isExplicitlyInstantiated(ClassElement cls) {
+    assert(isClosed);
+    ClassHierarchyNode node = _classHierarchyNodes[cls.declaration];
+    return node != null && node.isExplicitlyInstantiated;
+  }
+
+  @override
   bool isIndirectlyInstantiated(ClassElement cls) {
     assert(isClosed);
     ClassHierarchyNode node = _classHierarchyNodes[cls.declaration];
@@ -414,7 +446,8 @@
     assert(isClosed);
     ClassHierarchyNode hierarchy = _classHierarchyNodes[cls.declaration];
     if (hierarchy == null) return const <ClassElement>[];
-    return hierarchy.subclassesByMask(ClassHierarchyNode.DIRECTLY_INSTANTIATED);
+    return hierarchy
+        .subclassesByMask(ClassHierarchyNode.EXPLICITLY_INSTANTIATED);
   }
 
   /// Returns an iterable over the directly instantiated classes that extend
@@ -423,7 +456,8 @@
     assert(isClosed);
     ClassHierarchyNode subclasses = _classHierarchyNodes[cls.declaration];
     if (subclasses == null) return const <ClassElement>[];
-    return subclasses.subclassesByMask(ClassHierarchyNode.DIRECTLY_INSTANTIATED,
+    return subclasses.subclassesByMask(
+        ClassHierarchyNode.EXPLICITLY_INSTANTIATED,
         strict: true);
   }
 
@@ -443,7 +477,7 @@
     assert(isClosed);
     ClassHierarchyNode subclasses = _classHierarchyNodes[cls.declaration];
     if (subclasses == null) return;
-    subclasses.forEachSubclass(f, ClassHierarchyNode.DIRECTLY_INSTANTIATED,
+    subclasses.forEachSubclass(f, ClassHierarchyNode.EXPLICITLY_INSTANTIATED,
         strict: true);
   }
 
@@ -454,7 +488,7 @@
     ClassHierarchyNode subclasses = _classHierarchyNodes[cls.declaration];
     if (subclasses == null) return false;
     return subclasses.anySubclass(
-        predicate, ClassHierarchyNode.DIRECTLY_INSTANTIATED,
+        predicate, ClassHierarchyNode.EXPLICITLY_INSTANTIATED,
         strict: true);
   }
 
@@ -466,7 +500,8 @@
     if (classSet == null) {
       return const <ClassElement>[];
     } else {
-      return classSet.subtypesByMask(ClassHierarchyNode.DIRECTLY_INSTANTIATED);
+      return classSet
+          .subtypesByMask(ClassHierarchyNode.EXPLICITLY_INSTANTIATED);
     }
   }
 
@@ -478,7 +513,7 @@
     if (classSet == null) {
       return const <ClassElement>[];
     } else {
-      return classSet.subtypesByMask(ClassHierarchyNode.DIRECTLY_INSTANTIATED,
+      return classSet.subtypesByMask(ClassHierarchyNode.EXPLICITLY_INSTANTIATED,
           strict: true);
     }
   }
@@ -499,7 +534,7 @@
     assert(isClosed);
     ClassSet classSet = _classSets[cls.declaration];
     if (classSet == null) return;
-    classSet.forEachSubtype(f, ClassHierarchyNode.DIRECTLY_INSTANTIATED,
+    classSet.forEachSubtype(f, ClassHierarchyNode.EXPLICITLY_INSTANTIATED,
         strict: true);
   }
 
@@ -510,7 +545,7 @@
     ClassSet classSet = _classSets[cls.declaration];
     if (classSet == null) return false;
     return classSet.anySubtype(
-        predicate, ClassHierarchyNode.DIRECTLY_INSTANTIATED,
+        predicate, ClassHierarchyNode.EXPLICITLY_INSTANTIATED,
         strict: true);
   }
 
@@ -769,7 +804,7 @@
         // The root subclass has a concrete implementation so no subclass needs
         // noSuchMethod handling.
         return false;
-      } else if (rootNode.isDirectlyInstantiated) {
+      } else if (rootNode.isExplicitlyInstantiated) {
         // The root class need noSuchMethod handling.
         return true;
       }
@@ -781,7 +816,7 @@
           // Stop fast - we found a need for noSuchMethod handling.
           return IterationStep.STOP;
         }
-      }, ClassHierarchyNode.DIRECTLY_INSTANTIATED, strict: true);
+      }, ClassHierarchyNode.EXPLICITLY_INSTANTIATED, strict: true);
       // We stopped fast so we need noSuchMethod handling.
       return result == IterationStep.STOP;
     }
@@ -943,19 +978,22 @@
   }
 
   void _updateClassHierarchyNodeForClass(ClassElement cls,
-      {bool directlyInstantiated: false}) {
+      {bool directlyInstantiated: false, bool abstractlyInstantiated: false}) {
     ClassHierarchyNode node = getClassHierarchyNode(cls);
     _updateSuperClassHierarchyNodeForClass(node);
     if (directlyInstantiated) {
       node.isDirectlyInstantiated = true;
     }
+    if (abstractlyInstantiated) {
+      node.isAbstractlyInstantiated = true;
+    }
   }
 
   ClosedWorld closeWorld() {
     /// Updates the `isDirectlyInstantiated` and `isIndirectlyInstantiated`
     /// properties of the [ClassHierarchyNode] for [cls].
 
-    void addSubtypes(ClassElement cls) {
+    void addSubtypes(ClassElement cls, EnumSet<Instantiation> instantiations) {
       if (_compiler.options.hasIncrementalSupport &&
           !alreadyPopulated.add(cls)) {
         return;
@@ -965,7 +1003,11 @@
         reporter.internalError(cls, 'Class "${cls.name}" is not resolved.');
       }
 
-      _updateClassHierarchyNodeForClass(cls, directlyInstantiated: true);
+      _updateClassHierarchyNodeForClass(cls,
+          directlyInstantiated:
+              instantiations.contains(Instantiation.DIRECTLY_INSTANTIATED),
+          abstractlyInstantiated:
+              instantiations.contains(Instantiation.ABSTRACTLY_INSTANTIATED));
 
       // Walk through the superclasses, and record the types
       // implemented by that type on the superclasses.
@@ -985,7 +1027,7 @@
     // classes: if the superclass of these classes require RTI, then
     // they also need RTI, so that a constructor passes the type
     // variables to the super constructor.
-    _compiler.resolverWorld.directlyInstantiatedClasses.forEach(addSubtypes);
+    _compiler.resolverWorld.forEachInstantiatedClass(addSubtypes);
 
     _closed = true;
     return this;
diff --git a/pkg/dev_compiler/README.md b/pkg/dev_compiler/README.md
index 713d45b..7d3a3dd 100644
--- a/pkg/dev_compiler/README.md
+++ b/pkg/dev_compiler/README.md
@@ -11,7 +11,7 @@
 
 DDC attempts to map to idiomatic EcmaScript 6 (ES6) as cleanly as possible.  To do this while cohering to Dart semantics, DDC relies heavily on static type information, static checking, and runtime assertions.
 
-DDC is intended to support a very [large subset](https://github.com/dart-lang/dev_compiler/blob/master/STRONG_MODE.md) of Dart.  If a program does not statically check, DDC will not result in valid generated code.  Our goal is that a program execution (of a valid program) that runs without triggering runtime assertions should run the same on other Dart platforms under checked mode or production mode.
+DDC is intended to support a very [large subset](https://github.com/dart-lang/sdk/blob/master/pkg/dev_compiler/STRONG_MODE.md) of Dart.  If a program does not statically check, DDC will not result in valid generated code.  Our goal is that a program execution (of a valid program) that runs without triggering runtime assertions should run the same on other Dart platforms under checked mode or production mode.
 
 DDC does support untyped Dart code, but it will typically result in less readable and less efficient ES6 output.
 
@@ -28,4 +28,4 @@
 
 We are targeting the subset of ES6 supported in Chrome.
 
-To try out DDC and/or give feedback, please read our [usage](https://github.com/dart-lang/dev_compiler/blob/master/USAGE.md) page.
+To try out DDC and/or give feedback, please read our [usage](https://github.com/dart-lang/sdk/blob/master/pkg/dev_compiler/USAGE.md) page.
diff --git a/pkg/dev_compiler/lib/js/amd/dart_sdk.js b/pkg/dev_compiler/lib/js/amd/dart_sdk.js
index 9c95125..e50f74c 100644
--- a/pkg/dev_compiler/lib/js/amd/dart_sdk.js
+++ b/pkg/dev_compiler/lib/js/amd/dart_sdk.js
@@ -15609,113 +15609,113 @@
       if (endian === void 0) endian = typed_data.Endianness.BIG_ENDIAN;
       return this[_getFloat32](byteOffset, dart.equals(typed_data.Endianness.LITTLE_ENDIAN, endian));
     }
-    [_getFloat32](byteOffset, littleEndian) {
-      return this.getFloat32(byteOffset, littleEndian);
+    [_getFloat32](...args) {
+      return this.getFloat32.apply(this, args);
     }
     [dartx.getFloat64](byteOffset, endian) {
       if (endian === void 0) endian = typed_data.Endianness.BIG_ENDIAN;
       return this[_getFloat64](byteOffset, dart.equals(typed_data.Endianness.LITTLE_ENDIAN, endian));
     }
-    [_getFloat64](byteOffset, littleEndian) {
-      return this.getFloat64(byteOffset, littleEndian);
+    [_getFloat64](...args) {
+      return this.getFloat64.apply(this, args);
     }
     [dartx.getInt16](byteOffset, endian) {
       if (endian === void 0) endian = typed_data.Endianness.BIG_ENDIAN;
       return this[_getInt16](byteOffset, dart.equals(typed_data.Endianness.LITTLE_ENDIAN, endian));
     }
-    [_getInt16](byteOffset, littleEndian) {
-      return this.getInt16(byteOffset, littleEndian);
+    [_getInt16](...args) {
+      return this.getInt16.apply(this, args);
     }
     [dartx.getInt32](byteOffset, endian) {
       if (endian === void 0) endian = typed_data.Endianness.BIG_ENDIAN;
       return this[_getInt32](byteOffset, dart.equals(typed_data.Endianness.LITTLE_ENDIAN, endian));
     }
-    [_getInt32](byteOffset, littleEndian) {
-      return this.getInt32(byteOffset, littleEndian);
+    [_getInt32](...args) {
+      return this.getInt32.apply(this, args);
     }
     [dartx.getInt64](byteOffset, endian) {
       if (endian === void 0) endian = typed_data.Endianness.BIG_ENDIAN;
       dart.throw(new core.UnsupportedError('Int64 accessor not supported by dart2js.'));
     }
-    [dartx.getInt8](byteOffset) {
-      return this.getInt8(byteOffset);
+    [dartx.getInt8](...args) {
+      return this.getInt8.apply(this, args);
     }
     [dartx.getUint16](byteOffset, endian) {
       if (endian === void 0) endian = typed_data.Endianness.BIG_ENDIAN;
       return this[_getUint16](byteOffset, dart.equals(typed_data.Endianness.LITTLE_ENDIAN, endian));
     }
-    [_getUint16](byteOffset, littleEndian) {
-      return this.getUint16(byteOffset, littleEndian);
+    [_getUint16](...args) {
+      return this.getUint16.apply(this, args);
     }
     [dartx.getUint32](byteOffset, endian) {
       if (endian === void 0) endian = typed_data.Endianness.BIG_ENDIAN;
       return this[_getUint32](byteOffset, dart.equals(typed_data.Endianness.LITTLE_ENDIAN, endian));
     }
-    [_getUint32](byteOffset, littleEndian) {
-      return this.getUint32(byteOffset, littleEndian);
+    [_getUint32](...args) {
+      return this.getUint32.apply(this, args);
     }
     [dartx.getUint64](byteOffset, endian) {
       if (endian === void 0) endian = typed_data.Endianness.BIG_ENDIAN;
       dart.throw(new core.UnsupportedError('Uint64 accessor not supported by dart2js.'));
     }
-    [dartx.getUint8](byteOffset) {
-      return this.getUint8(byteOffset);
+    [dartx.getUint8](...args) {
+      return this.getUint8.apply(this, args);
     }
     [dartx.setFloat32](byteOffset, value, endian) {
       if (endian === void 0) endian = typed_data.Endianness.BIG_ENDIAN;
       return this[_setFloat32](byteOffset, value, dart.equals(typed_data.Endianness.LITTLE_ENDIAN, endian));
     }
-    [_setFloat32](byteOffset, value, littleEndian) {
-      return this.setFloat32(byteOffset, value, littleEndian);
+    [_setFloat32](...args) {
+      return this.setFloat32.apply(this, args);
     }
     [dartx.setFloat64](byteOffset, value, endian) {
       if (endian === void 0) endian = typed_data.Endianness.BIG_ENDIAN;
       return this[_setFloat64](byteOffset, value, dart.equals(typed_data.Endianness.LITTLE_ENDIAN, endian));
     }
-    [_setFloat64](byteOffset, value, littleEndian) {
-      return this.setFloat64(byteOffset, value, littleEndian);
+    [_setFloat64](...args) {
+      return this.setFloat64.apply(this, args);
     }
     [dartx.setInt16](byteOffset, value, endian) {
       if (endian === void 0) endian = typed_data.Endianness.BIG_ENDIAN;
       return this[_setInt16](byteOffset, value, dart.equals(typed_data.Endianness.LITTLE_ENDIAN, endian));
     }
-    [_setInt16](byteOffset, value, littleEndian) {
-      return this.setInt16(byteOffset, value, littleEndian);
+    [_setInt16](...args) {
+      return this.setInt16.apply(this, args);
     }
     [dartx.setInt32](byteOffset, value, endian) {
       if (endian === void 0) endian = typed_data.Endianness.BIG_ENDIAN;
       return this[_setInt32](byteOffset, value, dart.equals(typed_data.Endianness.LITTLE_ENDIAN, endian));
     }
-    [_setInt32](byteOffset, value, littleEndian) {
-      return this.setInt32(byteOffset, value, littleEndian);
+    [_setInt32](...args) {
+      return this.setInt32.apply(this, args);
     }
     [dartx.setInt64](byteOffset, value, endian) {
       if (endian === void 0) endian = typed_data.Endianness.BIG_ENDIAN;
       dart.throw(new core.UnsupportedError('Int64 accessor not supported by dart2js.'));
     }
-    [dartx.setInt8](byteOffset, value) {
-      return this.setInt8(byteOffset, value);
+    [dartx.setInt8](...args) {
+      return this.setInt8.apply(this, args);
     }
     [dartx.setUint16](byteOffset, value, endian) {
       if (endian === void 0) endian = typed_data.Endianness.BIG_ENDIAN;
       return this[_setUint16](byteOffset, value, dart.equals(typed_data.Endianness.LITTLE_ENDIAN, endian));
     }
-    [_setUint16](byteOffset, value, littleEndian) {
-      return this.setUint16(byteOffset, value, littleEndian);
+    [_setUint16](...args) {
+      return this.setUint16.apply(this, args);
     }
     [dartx.setUint32](byteOffset, value, endian) {
       if (endian === void 0) endian = typed_data.Endianness.BIG_ENDIAN;
       return this[_setUint32](byteOffset, value, dart.equals(typed_data.Endianness.LITTLE_ENDIAN, endian));
     }
-    [_setUint32](byteOffset, value, littleEndian) {
-      return this.setUint32(byteOffset, value, littleEndian);
+    [_setUint32](...args) {
+      return this.setUint32.apply(this, args);
     }
     [dartx.setUint64](byteOffset, value, endian) {
       if (endian === void 0) endian = typed_data.Endianness.BIG_ENDIAN;
       dart.throw(new core.UnsupportedError('Uint64 accessor not supported by dart2js.'));
     }
-    [dartx.setUint8](byteOffset, value) {
-      return this.setUint8(byteOffset, value);
+    [dartx.setUint8](...args) {
+      return this.setUint8.apply(this, args);
     }
     static _create1(arg) {
       return new DataView(new ArrayBuffer(arg));
@@ -38349,21 +38349,21 @@
     get [dartx.source]() {
       return this.source;
     }
-    [dartx.advance](count) {
-      return this.advance(count);
+    [dartx.advance](...args) {
+      return this.advance.apply(this, args);
     }
-    [dartx.continuePrimaryKey](key, primaryKey) {
-      return this.continuePrimaryKey(key, primaryKey);
+    [dartx.continuePrimaryKey](...args) {
+      return this.continuePrimaryKey.apply(this, args);
     }
-    [_delete]() {
-      return this.delete();
+    [_delete](...args) {
+      return this.delete.apply(this, args);
     }
     [_update](value) {
       let value_1 = html_common.convertDartToNative_SerializedScriptValue(value);
       return this[_update_1](value_1);
     }
-    [_update_1](value) {
-      return this.update(value);
+    [_update_1](...args) {
+      return this.update.apply(this, args);
     }
   };
   dart.setSignature(indexed_db.Cursor, {
@@ -38441,14 +38441,14 @@
     static _() {
       dart.throw(new core.UnsupportedError("Not supported"));
     }
-    [_addEventListener](type, listener, capture) {
-      return this.addEventListener(type, listener, capture);
+    [_addEventListener](...args) {
+      return this.addEventListener.apply(this, args);
     }
-    [dartx.dispatchEvent](event) {
-      return this.dispatchEvent(event);
+    [dartx.dispatchEvent](...args) {
+      return this.dispatchEvent.apply(this, args);
     }
-    [_removeEventListener](type, listener, capture) {
-      return this.removeEventListener(type, listener, capture);
+    [_removeEventListener](...args) {
+      return this.removeEventListener.apply(this, args);
     }
   };
   dart.defineNamedConstructor(html$.EventTarget, '_created');
@@ -38521,8 +38521,8 @@
       }
       return this[_transaction](storeNames, mode);
     }
-    [_transaction](stores, mode) {
-      return this.transaction(stores, mode);
+    [_transaction](...args) {
+      return this.transaction.apply(this, args);
     }
     static _() {
       dart.throw(new core.UnsupportedError("Not supported"));
@@ -38536,8 +38536,8 @@
     get [dartx.version]() {
       return this.version;
     }
-    [dartx.close]() {
-      return this.close();
+    [dartx.close](...args) {
+      return this.close.apply(this, args);
     }
     [_createObjectStore](name, options) {
       if (options === void 0) options = null;
@@ -38547,14 +38547,14 @@
       }
       return this[_createObjectStore_2](name);
     }
-    [_createObjectStore_1](name, options) {
-      return this.createObjectStore(name, options);
+    [_createObjectStore_1](...args) {
+      return this.createObjectStore.apply(this, args);
     }
-    [_createObjectStore_2](name) {
-      return this.createObjectStore(name);
+    [_createObjectStore_2](...args) {
+      return this.createObjectStore.apply(this, args);
     }
-    [dartx.deleteObjectStore](name) {
-      return this.deleteObjectStore(name);
+    [dartx.deleteObjectStore](...args) {
+      return this.deleteObjectStore.apply(this, args);
     }
     get [dartx.onAbort]() {
       return indexed_db.Database.abortEvent.forTarget(this);
@@ -38693,17 +38693,17 @@
     static _() {
       dart.throw(new core.UnsupportedError("Not supported"));
     }
-    [dartx.cmp](first, second) {
-      return this.cmp(first, second);
+    [dartx.cmp](...args) {
+      return this.cmp.apply(this, args);
     }
-    [_deleteDatabase](name) {
-      return this.deleteDatabase(name);
+    [_deleteDatabase](...args) {
+      return this.deleteDatabase.apply(this, args);
     }
-    [_open](name, version) {
-      return this.open(name, version);
+    [_open](...args) {
+      return this.open.apply(this, args);
     }
-    [_webkitGetDatabaseNames]() {
-      return this.webkitGetDatabaseNames();
+    [_webkitGetDatabaseNames](...args) {
+      return this.webkitGetDatabaseNames.apply(this, args);
     }
   };
   dart.setSignature(indexed_db.IdbFactory, {
@@ -38846,26 +38846,26 @@
     get [dartx.unique]() {
       return this.unique;
     }
-    [_count$0](key) {
-      return this.count(key);
+    [_count$0](...args) {
+      return this.count.apply(this, args);
     }
-    [_get$](key) {
-      return this.get(key);
+    [_get$](...args) {
+      return this.get.apply(this, args);
     }
-    [dartx.getAll](range, maxCount) {
-      return this.getAll(range, maxCount);
+    [dartx.getAll](...args) {
+      return this.getAll.apply(this, args);
     }
-    [dartx.getAllKeys](range, maxCount) {
-      return this.getAllKeys(range, maxCount);
+    [dartx.getAllKeys](...args) {
+      return this.getAllKeys.apply(this, args);
     }
-    [_getKey$](key) {
-      return this.getKey(key);
+    [_getKey$](...args) {
+      return this.getKey.apply(this, args);
     }
-    [_openCursor](range, direction) {
-      return this.openCursor(range, direction);
+    [_openCursor](...args) {
+      return this.openCursor.apply(this, args);
     }
-    [_openKeyCursor](range, direction) {
-      return this.openKeyCursor(range, direction);
+    [_openKeyCursor](...args) {
+      return this.openKeyCursor.apply(this, args);
     }
   };
   dart.setSignature(indexed_db.Index, {
@@ -39119,17 +39119,17 @@
       let value_1 = html_common.convertDartToNative_SerializedScriptValue(value);
       return this[_add_2](value_1);
     }
-    [_add_1](value, key) {
-      return this.add(value, key);
+    [_add_1](...args) {
+      return this.add.apply(this, args);
     }
-    [_add_2](value) {
-      return this.add(value);
+    [_add_2](...args) {
+      return this.add.apply(this, args);
     }
-    [_clear$0]() {
-      return this.clear();
+    [_clear$0](...args) {
+      return this.clear.apply(this, args);
     }
-    [_count$0](key) {
-      return this.count(key);
+    [_count$0](...args) {
+      return this.count.apply(this, args);
     }
     [_createIndex](name, keyPath, options) {
       if (options === void 0) options = null;
@@ -39139,35 +39139,35 @@
       }
       return this[_createIndex_2](name, keyPath);
     }
-    [_createIndex_1](name, keyPath, options) {
-      return this.createIndex(name, keyPath, options);
+    [_createIndex_1](...args) {
+      return this.createIndex.apply(this, args);
     }
-    [_createIndex_2](name, keyPath) {
-      return this.createIndex(name, keyPath);
+    [_createIndex_2](...args) {
+      return this.createIndex.apply(this, args);
     }
-    [_delete](key) {
-      return this.delete(key);
+    [_delete](...args) {
+      return this.delete.apply(this, args);
     }
-    [dartx.deleteIndex](name) {
-      return this.deleteIndex(name);
+    [dartx.deleteIndex](...args) {
+      return this.deleteIndex.apply(this, args);
     }
-    [_get$](key) {
-      return this.get(key);
+    [_get$](...args) {
+      return this.get.apply(this, args);
     }
-    [dartx.getAll](range, maxCount) {
-      return this.getAll(range, maxCount);
+    [dartx.getAll](...args) {
+      return this.getAll.apply(this, args);
     }
-    [dartx.getAllKeys](range, maxCount) {
-      return this.getAllKeys(range, maxCount);
+    [dartx.getAllKeys](...args) {
+      return this.getAllKeys.apply(this, args);
     }
-    [dartx.index](name) {
-      return this.index(name);
+    [dartx.index](...args) {
+      return this.index.apply(this, args);
     }
-    [_openCursor](range, direction) {
-      return this.openCursor(range, direction);
+    [_openCursor](...args) {
+      return this.openCursor.apply(this, args);
     }
-    [dartx.openKeyCursor](range, direction) {
-      return this.openKeyCursor(range, direction);
+    [dartx.openKeyCursor](...args) {
+      return this.openKeyCursor.apply(this, args);
     }
     [_put](value, key) {
       if (key === void 0) key = null;
@@ -39179,11 +39179,11 @@
       let value_1 = html_common.convertDartToNative_SerializedScriptValue(value);
       return this[_put_2](value_1);
     }
-    [_put_1](value, key) {
-      return this.put(value, key);
+    [_put_1](...args) {
+      return this.put.apply(this, args);
     }
-    [_put_2](value) {
-      return this.put(value);
+    [_put_2](...args) {
+      return this.put.apply(this, args);
     }
     static _cursorStreamFromResult(T) {
       return (request, autoAdvance) => {
@@ -39398,11 +39398,11 @@
     get [dartx.objectStoreNames]() {
       return this.objectStoreNames;
     }
-    [dartx.abort]() {
-      return this.abort();
+    [dartx.abort](...args) {
+      return this.abort.apply(this, args);
     }
-    [dartx.objectStore](name) {
-      return this.objectStore(name);
+    [dartx.objectStore](...args) {
+      return this.objectStore.apply(this, args);
     }
     get [dartx.onAbort]() {
       return indexed_db.Transaction.abortEvent.forTarget(this);
@@ -39549,17 +39549,17 @@
     get [dartx.type]() {
       return this.type;
     }
-    [_initEvent](type, bubbles, cancelable) {
-      return this.initEvent(type, bubbles, cancelable);
+    [_initEvent](...args) {
+      return this.initEvent.apply(this, args);
     }
-    [dartx.preventDefault]() {
-      return this.preventDefault();
+    [dartx.preventDefault](...args) {
+      return this.preventDefault.apply(this, args);
     }
-    [dartx.stopImmediatePropagation]() {
-      return this.stopImmediatePropagation();
+    [dartx.stopImmediatePropagation](...args) {
+      return this.stopImmediatePropagation.apply(this, args);
     }
-    [dartx.stopPropagation]() {
-      return this.stopPropagation();
+    [dartx.stopPropagation](...args) {
+      return this.stopPropagation.apply(this, args);
     }
   };
   dart.setSignature(html$.Event, {
@@ -39860,26 +39860,26 @@
     set [dartx.text](value) {
       this.textContent = value;
     }
-    [dartx.append](node) {
-      return this.appendChild(node);
+    [dartx.append](...args) {
+      return this.appendChild.apply(this, args);
     }
-    [dartx.clone](deep) {
-      return this.cloneNode(deep);
+    [dartx.clone](...args) {
+      return this.cloneNode.apply(this, args);
     }
-    [dartx.contains](other) {
-      return this.contains(other);
+    [dartx.contains](...args) {
+      return this.contains.apply(this, args);
     }
-    [dartx.hasChildNodes]() {
-      return this.hasChildNodes();
+    [dartx.hasChildNodes](...args) {
+      return this.hasChildNodes.apply(this, args);
     }
-    [dartx.insertBefore](node, child) {
-      return this.insertBefore(node, child);
+    [dartx.insertBefore](...args) {
+      return this.insertBefore.apply(this, args);
     }
-    [_removeChild](child) {
-      return this.removeChild(child);
+    [_removeChild](...args) {
+      return this.removeChild.apply(this, args);
     }
-    [_replaceChild](node, child) {
-      return this.replaceChild(node, child);
+    [_replaceChild](...args) {
+      return this.replaceChild.apply(this, args);
     }
   };
   dart.defineNamedConstructor(html$.Node, '_created');
@@ -40359,8 +40359,8 @@
       let convertedTiming = core.Map.is(timing) ? html_common.convertDartToNative_Dictionary(timing) : timing;
       return convertedTiming == null ? this[_animate](convertedFrames) : this[_animate](convertedFrames, convertedTiming);
     }
-    [_animate](effect, timing) {
-      return this.animate(effect, timing);
+    [_animate](...args) {
+      return this.animate.apply(this, args);
     }
     [dartx.attributeChanged](name, oldValue, newValue) {}
     get [_xtag]() {
@@ -40420,8 +40420,8 @@
         this[_insertAdjacentNode](where, html$.Text.new(text));
       }
     }
-    [_insertAdjacentText](where, text) {
-      return this.insertAdjacentText(where, text);
+    [_insertAdjacentText](...args) {
+      return this.insertAdjacentText.apply(this, args);
     }
     [dartx.insertAdjacentHtml](where, html, opts) {
       let validator = opts && 'validator' in opts ? opts.validator : null;
@@ -40432,8 +40432,8 @@
         this[_insertAdjacentNode](where, this[dartx.createFragment](html, {validator: validator, treeSanitizer: treeSanitizer}));
       }
     }
-    [_insertAdjacentHtml](where, text) {
-      return this.insertAdjacentHTML(where, text);
+    [_insertAdjacentHtml](...args) {
+      return this.insertAdjacentHTML.apply(this, args);
     }
     [dartx.insertAdjacentElement](where, element) {
       if (!!this.insertAdjacentElement) {
@@ -40443,8 +40443,8 @@
       }
       return element;
     }
-    [_insertAdjacentElement](where, element) {
-      return this.insertAdjacentElement(where, element);
+    [_insertAdjacentElement](...args) {
+      return this.insertAdjacentElement.apply(this, args);
     }
     [_insertAdjacentNode](where, node) {
       switch (where[dartx.toLowerCase]()) {
@@ -40758,14 +40758,14 @@
     set [dartx.dropzone](value) {
       this.webkitdropzone = value;
     }
-    [dartx.blur]() {
-      return this.blur();
+    [dartx.blur](...args) {
+      return this.blur.apply(this, args);
     }
-    [dartx.click]() {
-      return this.click();
+    [dartx.click](...args) {
+      return this.click.apply(this, args);
     }
-    [dartx.focus]() {
-      return this.focus();
+    [dartx.focus](...args) {
+      return this.focus.apply(this, args);
     }
     get [_attributes$]() {
       return this.attributes;
@@ -40830,50 +40830,50 @@
     get [dartx.tagName]() {
       return this.tagName;
     }
-    [dartx.closest](selectors) {
-      return this.closest(selectors);
+    [dartx.closest](...args) {
+      return this.closest.apply(this, args);
     }
-    [dartx.getAnimations]() {
-      return this.getAnimations();
+    [dartx.getAnimations](...args) {
+      return this.getAnimations.apply(this, args);
     }
-    [dartx.getAttribute](name) {
-      return this.getAttribute(name);
+    [dartx.getAttribute](...args) {
+      return this.getAttribute.apply(this, args);
     }
-    [dartx.getAttributeNS](namespaceURI, localName) {
-      return this.getAttributeNS(namespaceURI, localName);
+    [dartx.getAttributeNS](...args) {
+      return this.getAttributeNS.apply(this, args);
     }
-    [dartx.getBoundingClientRect]() {
-      return this.getBoundingClientRect();
+    [dartx.getBoundingClientRect](...args) {
+      return this.getBoundingClientRect.apply(this, args);
     }
-    [dartx.getClientRects]() {
-      return this.getClientRects();
+    [dartx.getClientRects](...args) {
+      return this.getClientRects.apply(this, args);
     }
-    [dartx.getDestinationInsertionPoints]() {
-      return this.getDestinationInsertionPoints();
+    [dartx.getDestinationInsertionPoints](...args) {
+      return this.getDestinationInsertionPoints.apply(this, args);
     }
-    [dartx.getElementsByClassName](classNames) {
-      return this.getElementsByClassName(classNames);
+    [dartx.getElementsByClassName](...args) {
+      return this.getElementsByClassName.apply(this, args);
     }
-    [_getElementsByTagName](localName) {
-      return this.getElementsByTagName(localName);
+    [_getElementsByTagName](...args) {
+      return this.getElementsByTagName.apply(this, args);
     }
-    [_hasAttribute](name) {
-      return this.hasAttribute(name);
+    [_hasAttribute](...args) {
+      return this.hasAttribute.apply(this, args);
     }
-    [_hasAttributeNS](namespaceURI, localName) {
-      return this.hasAttributeNS(namespaceURI, localName);
+    [_hasAttributeNS](...args) {
+      return this.hasAttributeNS.apply(this, args);
     }
-    [_removeAttribute](name) {
-      return this.removeAttribute(name);
+    [_removeAttribute](...args) {
+      return this.removeAttribute.apply(this, args);
     }
-    [_removeAttributeNS](namespaceURI, localName) {
-      return this.removeAttributeNS(namespaceURI, localName);
+    [_removeAttributeNS](...args) {
+      return this.removeAttributeNS.apply(this, args);
     }
-    [dartx.requestFullscreen]() {
-      return this.requestFullscreen();
+    [dartx.requestFullscreen](...args) {
+      return this.requestFullscreen.apply(this, args);
     }
-    [dartx.requestPointerLock]() {
-      return this.requestPointerLock();
+    [dartx.requestPointerLock](...args) {
+      return this.requestPointerLock.apply(this, args);
     }
     [dartx.scroll](options_OR_x, y) {
       if (options_OR_x === void 0) options_OR_x = null;
@@ -40893,14 +40893,14 @@
       }
       dart.throw(new core.ArgumentError("Incorrect number or type of arguments"));
     }
-    [_scroll_1]() {
-      return this.scroll();
+    [_scroll_1](...args) {
+      return this.scroll.apply(this, args);
     }
-    [_scroll_2](options) {
-      return this.scroll(options);
+    [_scroll_2](...args) {
+      return this.scroll.apply(this, args);
     }
-    [_scroll_3](x, y) {
-      return this.scroll(x, y);
+    [_scroll_3](...args) {
+      return this.scroll.apply(this, args);
     }
     [dartx.scrollBy](options_OR_x, y) {
       if (options_OR_x === void 0) options_OR_x = null;
@@ -40920,20 +40920,20 @@
       }
       dart.throw(new core.ArgumentError("Incorrect number or type of arguments"));
     }
-    [_scrollBy_1]() {
-      return this.scrollBy();
+    [_scrollBy_1](...args) {
+      return this.scrollBy.apply(this, args);
     }
-    [_scrollBy_2](options) {
-      return this.scrollBy(options);
+    [_scrollBy_2](...args) {
+      return this.scrollBy.apply(this, args);
     }
-    [_scrollBy_3](x, y) {
-      return this.scrollBy(x, y);
+    [_scrollBy_3](...args) {
+      return this.scrollBy.apply(this, args);
     }
-    [_scrollIntoView](alignWithTop) {
-      return this.scrollIntoView(alignWithTop);
+    [_scrollIntoView](...args) {
+      return this.scrollIntoView.apply(this, args);
     }
-    [_scrollIntoViewIfNeeded](centerIfNeeded) {
-      return this.scrollIntoViewIfNeeded(centerIfNeeded);
+    [_scrollIntoViewIfNeeded](...args) {
+      return this.scrollIntoViewIfNeeded.apply(this, args);
     }
     [dartx.scrollTo](options_OR_x, y) {
       if (options_OR_x === void 0) options_OR_x = null;
@@ -40953,26 +40953,26 @@
       }
       dart.throw(new core.ArgumentError("Incorrect number or type of arguments"));
     }
-    [_scrollTo_1]() {
-      return this.scrollTo();
+    [_scrollTo_1](...args) {
+      return this.scrollTo.apply(this, args);
     }
-    [_scrollTo_2](options) {
-      return this.scrollTo(options);
+    [_scrollTo_2](...args) {
+      return this.scrollTo.apply(this, args);
     }
-    [_scrollTo_3](x, y) {
-      return this.scrollTo(x, y);
+    [_scrollTo_3](...args) {
+      return this.scrollTo.apply(this, args);
     }
-    [dartx.setAttribute](name, value) {
-      return this.setAttribute(name, value);
+    [dartx.setAttribute](...args) {
+      return this.setAttribute.apply(this, args);
     }
-    [dartx.setAttributeNS](namespaceURI, name, value) {
-      return this.setAttributeNS(namespaceURI, name, value);
+    [dartx.setAttributeNS](...args) {
+      return this.setAttributeNS.apply(this, args);
     }
-    [dartx.after](nodes) {
-      return this.after(nodes);
+    [dartx.after](...args) {
+      return this.after.apply(this, args);
     }
-    [dartx.before](nodes) {
-      return this.before(nodes);
+    [dartx.before](...args) {
+      return this.before.apply(this, args);
     }
     get [dartx.nextElementSibling]() {
       return this.nextElementSibling;
@@ -40992,11 +40992,11 @@
     get [_lastElementChild]() {
       return this.lastElementChild;
     }
-    [dartx.querySelector](selectors) {
-      return this.querySelector(selectors);
+    [dartx.querySelector](...args) {
+      return this.querySelector.apply(this, args);
     }
-    [_querySelectorAll](selectors) {
-      return this.querySelectorAll(selectors);
+    [_querySelectorAll](...args) {
+      return this.querySelectorAll.apply(this, args);
     }
     get [dartx.onAbort]() {
       return html$.Element.abortEvent.forElement(this);
@@ -42052,20 +42052,20 @@
     set [dartx.startTime](value) {
       this.startTime = value;
     }
-    [dartx.cancel]() {
-      return this.cancel();
+    [dartx.cancel](...args) {
+      return this.cancel.apply(this, args);
     }
-    [dartx.finish]() {
-      return this.finish();
+    [dartx.finish](...args) {
+      return this.finish.apply(this, args);
     }
-    [dartx.pause]() {
-      return this.pause();
+    [dartx.pause](...args) {
+      return this.pause.apply(this, args);
     }
-    [dartx.play]() {
-      return this.play();
+    [dartx.play](...args) {
+      return this.play.apply(this, args);
     }
-    [dartx.reverse]() {
-      return this.reverse();
+    [dartx.reverse](...args) {
+      return this.reverse.apply(this, args);
     }
   };
   dart.setSignature(html$.Animation, {
@@ -42316,11 +42316,11 @@
     set [dartx.playbackRate](value) {
       this.playbackRate = value;
     }
-    [dartx.getAnimations]() {
-      return this.getAnimations();
+    [dartx.getAnimations](...args) {
+      return this.getAnimations.apply(this, args);
     }
-    [dartx.play](source) {
-      return this.play(source);
+    [dartx.play](...args) {
+      return this.play.apply(this, args);
     }
   };
   dart.setSignature(html$.AnimationTimeline, {
@@ -42382,14 +42382,14 @@
     get [dartx.status]() {
       return this.status;
     }
-    [dartx.abort]() {
-      return this.abort();
+    [dartx.abort](...args) {
+      return this.abort.apply(this, args);
     }
-    [dartx.swapCache]() {
-      return this.swapCache();
+    [dartx.swapCache](...args) {
+      return this.swapCache.apply(this, args);
     }
-    [dartx.update]() {
-      return this.update();
+    [dartx.update](...args) {
+      return this.update.apply(this, args);
     }
     get [dartx.onCached]() {
       return html$.ApplicationCache.cachedEvent.forTarget(this);
@@ -42936,35 +42936,35 @@
     get [dartx.videoDecodedByteCount]() {
       return this.webkitVideoDecodedByteCount;
     }
-    [dartx.addTextTrack](kind, label, language) {
-      return this.addTextTrack(kind, label, language);
+    [dartx.addTextTrack](...args) {
+      return this.addTextTrack.apply(this, args);
     }
-    [dartx.canPlayType](type, keySystem) {
-      return this.canPlayType(type, keySystem);
+    [dartx.canPlayType](...args) {
+      return this.canPlayType.apply(this, args);
     }
-    [dartx.load]() {
-      return this.load();
+    [dartx.load](...args) {
+      return this.load.apply(this, args);
     }
-    [dartx.pause]() {
-      return this.pause();
+    [dartx.pause](...args) {
+      return this.pause.apply(this, args);
     }
-    [dartx.play]() {
-      return this.play();
+    [dartx.play](...args) {
+      return this.play.apply(this, args);
     }
-    [dartx.setMediaKeys](mediaKeys) {
-      return this.setMediaKeys(mediaKeys);
+    [dartx.setMediaKeys](...args) {
+      return this.setMediaKeys.apply(this, args);
     }
-    [dartx.setSinkId](sinkId) {
-      return this.setSinkId(sinkId);
+    [dartx.setSinkId](...args) {
+      return this.setSinkId.apply(this, args);
     }
-    [dartx.addKey](keySystem, key, initData, sessionId) {
-      return this.webkitAddKey(keySystem, key, initData, sessionId);
+    [dartx.addKey](...args) {
+      return this.webkitAddKey.apply(this, args);
     }
-    [dartx.cancelKeyRequest](keySystem, sessionId) {
-      return this.webkitCancelKeyRequest(keySystem, sessionId);
+    [dartx.cancelKeyRequest](...args) {
+      return this.webkitCancelKeyRequest.apply(this, args);
     }
-    [dartx.generateKeyRequest](keySystem, initData) {
-      return this.webkitGenerateKeyRequest(keySystem, initData);
+    [dartx.generateKeyRequest](...args) {
+      return this.webkitGenerateKeyRequest.apply(this, args);
     }
     get [dartx.onKeyAdded]() {
       return html$.MediaElement.keyAddedEvent.forElement(this);
@@ -43168,11 +43168,11 @@
     get [dartx.length]() {
       return this.length;
     }
-    [__getter__](index) {
-      return this.__getter__(index);
+    [__getter__](...args) {
+      return this.__getter__.apply(this, args);
     }
-    [dartx.getTrackById](id) {
-      return this.getTrackById(id);
+    [dartx.getTrackById](...args) {
+      return this.getTrackById.apply(this, args);
     }
     get [dartx.onChange]() {
       return html$.AudioTrackList.changeEvent.forTarget(this);
@@ -43372,8 +43372,8 @@
     get [dartx.userChoice]() {
       return this.userChoice;
     }
-    [dartx.prompt]() {
-      return this.prompt();
+    [dartx.prompt](...args) {
+      return this.prompt.apply(this, args);
     }
   };
   dart.setSignature(html$.BeforeInstallPromptEvent, {
@@ -43428,11 +43428,11 @@
     get [dartx.type]() {
       return this.type;
     }
-    [dartx.close]() {
-      return this.close();
+    [dartx.close](...args) {
+      return this.close.apply(this, args);
     }
-    [dartx.slice](start, end, contentType) {
-      return this.slice(start, end, contentType);
+    [dartx.slice](...args) {
+      return this.slice.apply(this, args);
     }
     static new(blobParts, type, endings) {
       if (type === void 0) type = null;
@@ -43492,8 +43492,8 @@
       let options_1 = html_common.convertDartToNative_Dictionary(options);
       return this[_requestDevice_1](options_1);
     }
-    [_requestDevice_1](options) {
-      return this.requestDevice(options);
+    [_requestDevice_1](...args) {
+      return this.requestDevice.apply(this, args);
     }
   };
   dart.setSignature(html$.Bluetooth, {
@@ -43543,8 +43543,8 @@
     get [dartx.vendorIDSource]() {
       return this.vendorIDSource;
     }
-    [dartx.connectGatt]() {
-      return this.connectGATT();
+    [dartx.connectGatt](...args) {
+      return this.connectGATT.apply(this, args);
     }
   };
   dart.setSignature(html$.BluetoothDevice, {
@@ -43574,11 +43574,11 @@
     get [dartx.uuid]() {
       return this.uuid;
     }
-    [dartx.readValue]() {
-      return this.readValue();
+    [dartx.readValue](...args) {
+      return this.readValue.apply(this, args);
     }
-    [dartx.writeValue](value) {
-      return this.writeValue(value);
+    [dartx.writeValue](...args) {
+      return this.writeValue.apply(this, args);
     }
   };
   dart.setSignature(html$.BluetoothGattCharacteristic, {
@@ -43601,8 +43601,8 @@
     get [dartx.connected]() {
       return this.connected;
     }
-    [dartx.getPrimaryService](service) {
-      return this.getPrimaryService(service);
+    [dartx.getPrimaryService](...args) {
+      return this.getPrimaryService.apply(this, args);
     }
   };
   dart.setSignature(html$.BluetoothGattRemoteServer, {
@@ -43626,8 +43626,8 @@
     get [dartx.uuid]() {
       return this.uuid;
     }
-    [dartx.getCharacteristic](characteristic) {
-      return this.getCharacteristic(characteristic);
+    [dartx.getCharacteristic](...args) {
+      return this.getCharacteristic.apply(this, args);
     }
   };
   dart.setSignature(html$.BluetoothGattService, {
@@ -43669,17 +43669,17 @@
     get [dartx.bodyUsed]() {
       return this.bodyUsed;
     }
-    [dartx.arrayBuffer]() {
-      return this.arrayBuffer();
+    [dartx.arrayBuffer](...args) {
+      return this.arrayBuffer.apply(this, args);
     }
-    [dartx.blob]() {
-      return this.blob();
+    [dartx.blob](...args) {
+      return this.blob.apply(this, args);
     }
-    [dartx.json]() {
-      return this.json();
+    [dartx.json](...args) {
+      return this.json.apply(this, args);
     }
-    [dartx.text]() {
-      return this.text();
+    [dartx.text](...args) {
+      return this.text.apply(this, args);
     }
   };
   dart.setSignature(html$.Body, {
@@ -43953,14 +43953,14 @@
     get [dartx.willValidate]() {
       return this.willValidate;
     }
-    [dartx.checkValidity]() {
-      return this.checkValidity();
+    [dartx.checkValidity](...args) {
+      return this.checkValidity.apply(this, args);
     }
-    [dartx.reportValidity]() {
-      return this.reportValidity();
+    [dartx.reportValidity](...args) {
+      return this.reportValidity.apply(this, args);
     }
-    [dartx.setCustomValidity](error) {
-      return this.setCustomValidity(error);
+    [dartx.setCustomValidity](...args) {
+      return this.setCustomValidity.apply(this, args);
     }
   };
   dart.defineNamedConstructor(html$.ButtonElement, 'created');
@@ -44021,26 +44021,26 @@
     get [dartx.length]() {
       return this.length;
     }
-    [dartx.appendData](data) {
-      return this.appendData(data);
+    [dartx.appendData](...args) {
+      return this.appendData.apply(this, args);
     }
-    [dartx.deleteData](offset, count) {
-      return this.deleteData(offset, count);
+    [dartx.deleteData](...args) {
+      return this.deleteData.apply(this, args);
     }
-    [dartx.insertData](offset, data) {
-      return this.insertData(offset, data);
+    [dartx.insertData](...args) {
+      return this.insertData.apply(this, args);
     }
-    [dartx.replaceData](offset, count, data) {
-      return this.replaceData(offset, count, data);
+    [dartx.replaceData](...args) {
+      return this.replaceData.apply(this, args);
     }
-    [dartx.substringData](offset, count) {
-      return this.substringData(offset, count);
+    [dartx.substringData](...args) {
+      return this.substringData.apply(this, args);
     }
-    [dartx.after](nodes) {
-      return this.after(nodes);
+    [dartx.after](...args) {
+      return this.after.apply(this, args);
     }
-    [dartx.before](nodes) {
-      return this.before(nodes);
+    [dartx.before](...args) {
+      return this.before.apply(this, args);
     }
     get [dartx.nextElementSibling]() {
       return this.nextElementSibling;
@@ -44084,11 +44084,11 @@
     get [dartx.wholeText]() {
       return this.wholeText;
     }
-    [dartx.getDestinationInsertionPoints]() {
-      return this.getDestinationInsertionPoints();
+    [dartx.getDestinationInsertionPoints](...args) {
+      return this.getDestinationInsertionPoints.apply(this, args);
     }
-    [dartx.splitText](offset) {
-      return this.splitText(offset);
+    [dartx.splitText](...args) {
+      return this.splitText.apply(this, args);
     }
   };
   dart.setSignature(html$.Text, {
@@ -44125,14 +44125,14 @@
     static _() {
       dart.throw(new core.UnsupportedError("Not supported"));
     }
-    [dartx.delete](cacheName) {
-      return this.delete(cacheName);
+    [dartx.delete](...args) {
+      return this.delete.apply(this, args);
     }
-    [dartx.has](cacheName) {
-      return this.has(cacheName);
+    [dartx.has](...args) {
+      return this.has.apply(this, args);
     }
-    [dartx.keys]() {
-      return this.keys();
+    [dartx.keys](...args) {
+      return this.keys.apply(this, args);
     }
     [dartx.match](request, options) {
       if (options === void 0) options = null;
@@ -44142,14 +44142,14 @@
       }
       return this[_match_2](request);
     }
-    [_match_1](request, options) {
-      return this.match(request, options);
+    [_match_1](...args) {
+      return this.match.apply(this, args);
     }
-    [_match_2](request) {
-      return this.match(request);
+    [_match_2](...args) {
+      return this.match.apply(this, args);
     }
-    [dartx.open](cacheName) {
-      return this.open(cacheName);
+    [dartx.open](...args) {
+      return this.open.apply(this, args);
     }
   };
   dart.setSignature(html$.CacheStorage, {
@@ -44215,14 +44215,14 @@
       }
       return this[_getContext_2](contextId);
     }
-    [_getContext_1](contextId, attributes) {
-      return this.getContext(contextId, attributes);
+    [_getContext_1](...args) {
+      return this.getContext.apply(this, args);
     }
-    [_getContext_2](contextId) {
-      return this.getContext(contextId);
+    [_getContext_2](...args) {
+      return this.getContext.apply(this, args);
     }
-    [_toDataUrl](type, arguments_OR_quality) {
-      return this.toDataURL(type, arguments_OR_quality);
+    [_toDataUrl](...args) {
+      return this.toDataURL.apply(this, args);
     }
     get [dartx.onWebGlContextLost]() {
       return html$.CanvasElement.webGlContextLostEvent.forElement(this);
@@ -44299,8 +44299,8 @@
     static _() {
       dart.throw(new core.UnsupportedError("Not supported"));
     }
-    [dartx.addColorStop](offset, color) {
-      return this.addColorStop(offset, color);
+    [dartx.addColorStop](...args) {
+      return this.addColorStop.apply(this, args);
     }
   };
   dart.setSignature(html$.CanvasGradient, {
@@ -44315,8 +44315,8 @@
     static _() {
       dart.throw(new core.UnsupportedError("Not supported"));
     }
-    [dartx.setTransform](transform) {
-      return this.setTransform(transform);
+    [dartx.setTransform](...args) {
+      return this.setTransform.apply(this, args);
     }
   };
   dart.setSignature(html$.CanvasPattern, {
@@ -44545,23 +44545,23 @@
       this[_addHitRegion_2]();
       return;
     }
-    [_addHitRegion_1](options) {
-      return this.addHitRegion(options);
+    [_addHitRegion_1](...args) {
+      return this.addHitRegion.apply(this, args);
     }
-    [_addHitRegion_2]() {
-      return this.addHitRegion();
+    [_addHitRegion_2](...args) {
+      return this.addHitRegion.apply(this, args);
     }
-    [dartx.beginPath]() {
-      return this.beginPath();
+    [dartx.beginPath](...args) {
+      return this.beginPath.apply(this, args);
     }
-    [dartx.clearHitRegions]() {
-      return this.clearHitRegions();
+    [dartx.clearHitRegions](...args) {
+      return this.clearHitRegions.apply(this, args);
     }
-    [dartx.clearRect](x, y, width, height) {
-      return this.clearRect(x, y, width, height);
+    [dartx.clearRect](...args) {
+      return this.clearRect.apply(this, args);
     }
-    [dartx.clip](path_OR_winding, winding) {
-      return this.clip(path_OR_winding, winding);
+    [dartx.clip](...args) {
+      return this.clip.apply(this, args);
     }
     [dartx.createImageData](imagedata_OR_sw, sh) {
       if (sh === void 0) sh = null;
@@ -44574,53 +44574,53 @@
       }
       dart.throw(new core.ArgumentError("Incorrect number or type of arguments"));
     }
-    [_createImageData_1](imagedata) {
-      return this.createImageData(imagedata);
+    [_createImageData_1](...args) {
+      return this.createImageData.apply(this, args);
     }
-    [_createImageData_2](sw, sh) {
-      return this.createImageData(sw, sh);
+    [_createImageData_2](...args) {
+      return this.createImageData.apply(this, args);
     }
-    [dartx.createLinearGradient](x0, y0, x1, y1) {
-      return this.createLinearGradient(x0, y0, x1, y1);
+    [dartx.createLinearGradient](...args) {
+      return this.createLinearGradient.apply(this, args);
     }
-    [dartx.createPattern](image, repetitionType) {
-      return this.createPattern(image, repetitionType);
+    [dartx.createPattern](...args) {
+      return this.createPattern.apply(this, args);
     }
-    [dartx.createRadialGradient](x0, y0, r0, x1, y1, r1) {
-      return this.createRadialGradient(x0, y0, r0, x1, y1, r1);
+    [dartx.createRadialGradient](...args) {
+      return this.createRadialGradient.apply(this, args);
     }
-    [dartx.drawFocusIfNeeded](element_OR_path, element) {
-      return this.drawFocusIfNeeded(element_OR_path, element);
+    [dartx.drawFocusIfNeeded](...args) {
+      return this.drawFocusIfNeeded.apply(this, args);
     }
-    [dartx.fillRect](x, y, width, height) {
-      return this.fillRect(x, y, width, height);
+    [dartx.fillRect](...args) {
+      return this.fillRect.apply(this, args);
     }
     [dartx.getContextAttributes]() {
       return html_common.convertNativeToDart_Dictionary(this[_getContextAttributes_1]());
     }
-    [_getContextAttributes_1]() {
-      return this.getContextAttributes();
+    [_getContextAttributes_1](...args) {
+      return this.getContextAttributes.apply(this, args);
     }
     [dartx.getImageData](sx, sy, sw, sh) {
       return html_common.convertNativeToDart_ImageData(this[_getImageData_1](sx, sy, sw, sh));
     }
-    [_getImageData_1](sx, sy, sw, sh) {
-      return this.getImageData(sx, sy, sw, sh);
+    [_getImageData_1](...args) {
+      return this.getImageData.apply(this, args);
     }
-    [_getLineDash]() {
-      return this.getLineDash();
+    [_getLineDash](...args) {
+      return this.getLineDash.apply(this, args);
     }
-    [dartx.isContextLost]() {
-      return this.isContextLost();
+    [dartx.isContextLost](...args) {
+      return this.isContextLost.apply(this, args);
     }
-    [dartx.isPointInPath](path_OR_x, x_OR_y, winding_OR_y, winding) {
-      return this.isPointInPath(path_OR_x, x_OR_y, winding_OR_y, winding);
+    [dartx.isPointInPath](...args) {
+      return this.isPointInPath.apply(this, args);
     }
-    [dartx.isPointInStroke](path_OR_x, x_OR_y, y) {
-      return this.isPointInStroke(path_OR_x, x_OR_y, y);
+    [dartx.isPointInStroke](...args) {
+      return this.isPointInStroke.apply(this, args);
     }
-    [dartx.measureText](text) {
-      return this.measureText(text);
+    [dartx.measureText](...args) {
+      return this.measureText.apply(this, args);
     }
     [dartx.putImageData](imagedata, dx, dy, dirtyX, dirtyY, dirtyWidth, dirtyHeight) {
       if (dirtyX === void 0) dirtyX = null;
@@ -44639,77 +44639,77 @@
       }
       dart.throw(new core.ArgumentError("Incorrect number or type of arguments"));
     }
-    [_putImageData_1](imagedata, dx, dy) {
-      return this.putImageData(imagedata, dx, dy);
+    [_putImageData_1](...args) {
+      return this.putImageData.apply(this, args);
     }
-    [_putImageData_2](imagedata, dx, dy, dirtyX, dirtyY, dirtyWidth, dirtyHeight) {
-      return this.putImageData(imagedata, dx, dy, dirtyX, dirtyY, dirtyWidth, dirtyHeight);
+    [_putImageData_2](...args) {
+      return this.putImageData.apply(this, args);
     }
-    [dartx.removeHitRegion](id) {
-      return this.removeHitRegion(id);
+    [dartx.removeHitRegion](...args) {
+      return this.removeHitRegion.apply(this, args);
     }
-    [dartx.resetTransform]() {
-      return this.resetTransform();
+    [dartx.resetTransform](...args) {
+      return this.resetTransform.apply(this, args);
     }
-    [dartx.restore]() {
-      return this.restore();
+    [dartx.restore](...args) {
+      return this.restore.apply(this, args);
     }
-    [dartx.rotate](angle) {
-      return this.rotate(angle);
+    [dartx.rotate](...args) {
+      return this.rotate.apply(this, args);
     }
-    [dartx.save]() {
-      return this.save();
+    [dartx.save](...args) {
+      return this.save.apply(this, args);
     }
-    [dartx.scale](x, y) {
-      return this.scale(x, y);
+    [dartx.scale](...args) {
+      return this.scale.apply(this, args);
     }
-    [dartx.scrollPathIntoView](path) {
-      return this.scrollPathIntoView(path);
+    [dartx.scrollPathIntoView](...args) {
+      return this.scrollPathIntoView.apply(this, args);
     }
-    [dartx.setTransform](a, b, c, d, e, f) {
-      return this.setTransform(a, b, c, d, e, f);
+    [dartx.setTransform](...args) {
+      return this.setTransform.apply(this, args);
     }
-    [dartx.stroke](path) {
-      return this.stroke(path);
+    [dartx.stroke](...args) {
+      return this.stroke.apply(this, args);
     }
-    [dartx.strokeRect](x, y, width, height) {
-      return this.strokeRect(x, y, width, height);
+    [dartx.strokeRect](...args) {
+      return this.strokeRect.apply(this, args);
     }
-    [dartx.strokeText](text, x, y, maxWidth) {
-      return this.strokeText(text, x, y, maxWidth);
+    [dartx.strokeText](...args) {
+      return this.strokeText.apply(this, args);
     }
-    [dartx.transform](a, b, c, d, e, f) {
-      return this.transform(a, b, c, d, e, f);
+    [dartx.transform](...args) {
+      return this.transform.apply(this, args);
     }
-    [dartx.translate](x, y) {
-      return this.translate(x, y);
+    [dartx.translate](...args) {
+      return this.translate.apply(this, args);
     }
-    [_arc](x, y, radius, startAngle, endAngle, anticlockwise) {
-      return this.arc(x, y, radius, startAngle, endAngle, anticlockwise);
+    [_arc](...args) {
+      return this.arc.apply(this, args);
     }
-    [dartx.arcTo](x1, y1, x2, y2, radius) {
-      return this.arcTo(x1, y1, x2, y2, radius);
+    [dartx.arcTo](...args) {
+      return this.arcTo.apply(this, args);
     }
-    [dartx.bezierCurveTo](cp1x, cp1y, cp2x, cp2y, x, y) {
-      return this.bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y);
+    [dartx.bezierCurveTo](...args) {
+      return this.bezierCurveTo.apply(this, args);
     }
-    [dartx.closePath]() {
-      return this.closePath();
+    [dartx.closePath](...args) {
+      return this.closePath.apply(this, args);
     }
-    [dartx.ellipse](x, y, radiusX, radiusY, rotation, startAngle, endAngle, anticlockwise) {
-      return this.ellipse(x, y, radiusX, radiusY, rotation, startAngle, endAngle, anticlockwise);
+    [dartx.ellipse](...args) {
+      return this.ellipse.apply(this, args);
     }
-    [dartx.lineTo](x, y) {
-      return this.lineTo(x, y);
+    [dartx.lineTo](...args) {
+      return this.lineTo.apply(this, args);
     }
-    [dartx.moveTo](x, y) {
-      return this.moveTo(x, y);
+    [dartx.moveTo](...args) {
+      return this.moveTo.apply(this, args);
     }
-    [dartx.quadraticCurveTo](cpx, cpy, x, y) {
-      return this.quadraticCurveTo(cpx, cpy, x, y);
+    [dartx.quadraticCurveTo](...args) {
+      return this.quadraticCurveTo.apply(this, args);
     }
-    [dartx.rect](x, y, width, height) {
-      return this.rect(x, y, width, height);
+    [dartx.rect](...args) {
+      return this.rect.apply(this, args);
     }
     [dartx.createImageDataFromImageData](imagedata) {
       return this.createImageData(imagedata);
@@ -44745,14 +44745,14 @@
         this[dartx.drawImageScaledFromSource](source, sourceRect[dartx.left], sourceRect[dartx.top], sourceRect[dartx.width], sourceRect[dartx.height], destRect[dartx.left], destRect[dartx.top], destRect[dartx.width], destRect[dartx.height]);
       }
     }
-    [dartx.drawImage](source, destX, destY) {
-      return this.drawImage(source, destX, destY);
+    [dartx.drawImage](...args) {
+      return this.drawImage.apply(this, args);
     }
-    [dartx.drawImageScaled](source, destX, destY, destWidth, destHeight) {
-      return this.drawImage(source, destX, destY, destWidth, destHeight);
+    [dartx.drawImageScaled](...args) {
+      return this.drawImage.apply(this, args);
     }
-    [dartx.drawImageScaledFromSource](source, sourceX, sourceY, sourceWidth, sourceHeight, destX, destY, destWidth, destHeight) {
-      return this.drawImage(source, sourceX, sourceY, sourceWidth, sourceHeight, destX, destY, destWidth, destHeight);
+    [dartx.drawImageScaledFromSource](...args) {
+      return this.drawImage.apply(this, args);
     }
     get [dartx.lineDashOffset]() {
       return this.lineDashOffset || this.webkitLineDashOffset;
@@ -44999,11 +44999,11 @@
       this[_postMessage_2](message_1);
       return;
     }
-    [_postMessage_1](message, transfer) {
-      return this.postMessage(message, transfer);
+    [_postMessage_1](...args) {
+      return this.postMessage.apply(this, args);
     }
-    [_postMessage_2](message) {
-      return this.postMessage(message);
+    [_postMessage_2](...args) {
+      return this.postMessage.apply(this, args);
     }
   };
   dart.setSignature(html$.Client, {
@@ -45031,8 +45031,8 @@
     static _() {
       dart.throw(new core.UnsupportedError("Not supported"));
     }
-    [dartx.claim]() {
-      return this.claim();
+    [dartx.claim](...args) {
+      return this.claim.apply(this, args);
     }
     [dartx.matchAll](options) {
       if (options === void 0) options = null;
@@ -45042,14 +45042,14 @@
       }
       return this[_matchAll_2]();
     }
-    [_matchAll_1](options) {
-      return this.matchAll(options);
+    [_matchAll_1](...args) {
+      return this.matchAll.apply(this, args);
     }
-    [_matchAll_2]() {
-      return this.matchAll();
+    [_matchAll_2](...args) {
+      return this.matchAll.apply(this, args);
     }
-    [dartx.openWindow](url) {
-      return this.openWindow(url);
+    [dartx.openWindow](...args) {
+      return this.openWindow.apply(this, args);
     }
   };
   dart.setSignature(html$.Clients, {
@@ -45207,8 +45207,8 @@
     get [_which]() {
       return this.which;
     }
-    [_initUIEvent](type, bubbles, cancelable, view, detail) {
-      return this.initUIEvent(type, bubbles, cancelable, view, detail);
+    [_initUIEvent](...args) {
+      return this.initUIEvent.apply(this, args);
     }
   };
   dart.setSignature(html$.UIEvent, {
@@ -45271,8 +45271,8 @@
     get [dartx.data]() {
       return this.data;
     }
-    [_initCompositionEvent](type, bubbles, cancelable, view, data) {
-      return this.initCompositionEvent(type, bubbles, cancelable, view, data);
+    [_initCompositionEvent](...args) {
+      return this.initCompositionEvent.apply(this, args);
     }
   };
   dart.setSignature(html$.CompositionEvent, {
@@ -45331,11 +45331,11 @@
     set [dartx.transform](value) {
       this.transform = value;
     }
-    [dartx.disconnect]() {
-      return this.disconnect();
+    [dartx.disconnect](...args) {
+      return this.disconnect.apply(this, args);
     }
-    [dartx.supports](attribute) {
-      return this.supports(attribute);
+    [dartx.supports](...args) {
+      return this.supports.apply(this, args);
     }
   };
   dart.setSignature(html$.CompositorProxy, {
@@ -45384,14 +45384,14 @@
       this[_postMessage_2](message_1);
       return;
     }
-    [_postMessage_1](message, transfer) {
-      return this.postMessage(message, transfer);
+    [_postMessage_1](...args) {
+      return this.postMessage.apply(this, args);
     }
-    [_postMessage_2](message) {
-      return this.postMessage(message);
+    [_postMessage_2](...args) {
+      return this.postMessage.apply(this, args);
     }
-    [dartx.terminate]() {
-      return this.terminate();
+    [dartx.terminate](...args) {
+      return this.terminate.apply(this, args);
     }
     get [dartx.onError]() {
       return html$.CompositorWorker.errorEvent.forTarget(this);
@@ -45490,8 +45490,8 @@
     get [dartx.self]() {
       return this.self;
     }
-    [dartx.close]() {
-      return this.close();
+    [dartx.close](...args) {
+      return this.close.apply(this, args);
     }
     [dartx.fetch](input, init) {
       if (init === void 0) init = null;
@@ -45501,17 +45501,17 @@
       }
       return this[_fetch_2](input);
     }
-    [_fetch_1](input, init) {
-      return this.fetch(input, init);
+    [_fetch_1](...args) {
+      return this.fetch.apply(this, args);
     }
-    [_fetch_2](input) {
-      return this.fetch(input);
+    [_fetch_2](...args) {
+      return this.fetch.apply(this, args);
     }
-    [dartx.importScripts](urls) {
-      return this.importScripts(urls);
+    [dartx.importScripts](...args) {
+      return this.importScripts.apply(this, args);
     }
-    [_webkitRequestFileSystem](type, size, successCallback, errorCallback) {
-      return this.webkitRequestFileSystem(type, size, successCallback, errorCallback);
+    [_webkitRequestFileSystem](...args) {
+      return this.webkitRequestFileSystem.apply(this, args);
     }
     [dartx.webkitRequestFileSystem](type, size) {
       let completer = CompleterOfFileSystem().new();
@@ -45522,14 +45522,14 @@
       }, FileErrorTovoid()));
       return completer.future;
     }
-    [dartx.requestFileSystemSync](type, size) {
-      return this.webkitRequestFileSystemSync(type, size);
+    [dartx.requestFileSystemSync](...args) {
+      return this.webkitRequestFileSystemSync.apply(this, args);
     }
-    [dartx.resolveLocalFileSystemSyncUrl](url) {
-      return this.webkitResolveLocalFileSystemSyncURL(url);
+    [dartx.resolveLocalFileSystemSyncUrl](...args) {
+      return this.webkitResolveLocalFileSystemSyncURL.apply(this, args);
     }
-    [_webkitResolveLocalFileSystemUrl](url, successCallback, errorCallback) {
-      return this.webkitResolveLocalFileSystemURL(url, successCallback, errorCallback);
+    [_webkitResolveLocalFileSystemUrl](...args) {
+      return this.webkitResolveLocalFileSystemURL.apply(this, args);
     }
     [dartx.webkitResolveLocalFileSystemUrl](url) {
       let completer = CompleterOfEntry().new();
@@ -45540,29 +45540,29 @@
       }, FileErrorTovoid()));
       return completer.future;
     }
-    [dartx.atob](atob) {
-      return this.atob(atob);
+    [dartx.atob](...args) {
+      return this.atob.apply(this, args);
     }
-    [dartx.btoa](btoa) {
-      return this.btoa(btoa);
+    [dartx.btoa](...args) {
+      return this.btoa.apply(this, args);
     }
-    [_setInterval_String](handler, timeout, arguments$) {
-      return this.setInterval(handler, timeout, arguments$);
+    [_setInterval_String](...args) {
+      return this.setInterval.apply(this, args);
     }
-    [_setTimeout_String](handler, timeout, arguments$) {
-      return this.setTimeout(handler, timeout, arguments$);
+    [_setTimeout_String](...args) {
+      return this.setTimeout.apply(this, args);
     }
-    [_clearInterval](handle) {
-      return this.clearInterval(handle);
+    [_clearInterval](...args) {
+      return this.clearInterval.apply(this, args);
     }
-    [_clearTimeout](handle) {
-      return this.clearTimeout(handle);
+    [_clearTimeout](...args) {
+      return this.clearTimeout.apply(this, args);
     }
-    [_setInterval](handler, timeout) {
-      return this.setInterval(handler, timeout);
+    [_setInterval](...args) {
+      return this.setInterval.apply(this, args);
     }
-    [_setTimeout](handler, timeout) {
-      return this.setTimeout(handler, timeout);
+    [_setTimeout](...args) {
+      return this.setTimeout.apply(this, args);
     }
     get [dartx.onError]() {
       return html$.WorkerGlobalScope.errorEvent.forTarget(this);
@@ -45627,8 +45627,8 @@
     static _() {
       dart.throw(new core.UnsupportedError("Not supported"));
     }
-    [dartx.cancelAnimationFrame](handle) {
-      return this.cancelAnimationFrame(handle);
+    [dartx.cancelAnimationFrame](...args) {
+      return this.cancelAnimationFrame.apply(this, args);
     }
     [dartx.postMessage](message, transfer) {
       if (transfer === void 0) transfer = null;
@@ -45641,14 +45641,14 @@
       this[_postMessage_2](message_1);
       return;
     }
-    [_postMessage_1](message, transfer) {
-      return this.postMessage(message, transfer);
+    [_postMessage_1](...args) {
+      return this.postMessage.apply(this, args);
     }
-    [_postMessage_2](message) {
-      return this.postMessage(message);
+    [_postMessage_2](...args) {
+      return this.postMessage.apply(this, args);
     }
-    [dartx.requestAnimationFrame](callback) {
-      return this.requestAnimationFrame(callback);
+    [dartx.requestAnimationFrame](...args) {
+      return this.requestAnimationFrame.apply(this, args);
     }
     get [dartx.onMessage]() {
       return html$.CompositorWorkerGlobalScope.messageEvent.forTarget(this);
@@ -45798,14 +45798,14 @@
     static _() {
       dart.throw(new core.UnsupportedError("Not supported"));
     }
-    [dartx.assertCondition](condition, arg) {
-      return this.assert(condition, arg);
+    [dartx.assertCondition](...args) {
+      return this.assert.apply(this, args);
     }
-    [dartx.timeline](title) {
-      return this.timeline(title);
+    [dartx.timeline](...args) {
+      return this.timeline.apply(this, args);
     }
-    [dartx.timelineEnd](title) {
-      return this.timelineEnd(title);
+    [dartx.timelineEnd](...args) {
+      return this.timelineEnd.apply(this, args);
     }
   };
   dart.setSignature(html$.ConsoleBase, {
@@ -45841,8 +45841,8 @@
     set [dartx.select](value) {
       this.select = value;
     }
-    [dartx.getDistributedNodes]() {
-      return this.getDistributedNodes();
+    [dartx.getDistributedNodes](...args) {
+      return this.getDistributedNodes.apply(this, args);
     }
   };
   dart.defineNamedConstructor(html$.ContentElement, 'created');
@@ -45949,8 +45949,8 @@
     static _() {
       dart.throw(new core.UnsupportedError("Not supported"));
     }
-    [dartx.notifySignedIn](credential) {
-      return this.notifySignedIn(credential);
+    [dartx.notifySignedIn](...args) {
+      return this.notifySignedIn.apply(this, args);
     }
     [dartx.request](options) {
       if (options === void 0) options = null;
@@ -45960,14 +45960,14 @@
       }
       return this[_request_2]();
     }
-    [_request_1](options) {
-      return this.request(options);
+    [_request_1](...args) {
+      return this.request.apply(this, args);
     }
-    [_request_2]() {
-      return this.request();
+    [_request_2](...args) {
+      return this.request.apply(this, args);
     }
-    [dartx.requireUserMediation]() {
-      return this.requireUserMediation();
+    [dartx.requireUserMediation](...args) {
+      return this.requireUserMediation.apply(this, args);
     }
   };
   dart.setSignature(html$.CredentialsContainer, {
@@ -45992,8 +45992,8 @@
     get [dartx.client]() {
       return this.client;
     }
-    [dartx.acceptConnection](shouldAccept) {
-      return this.acceptConnection(shouldAccept);
+    [dartx.acceptConnection](...args) {
+      return this.acceptConnection.apply(this, args);
     }
   };
   dart.setSignature(html$.CrossOriginConnectEvent, {
@@ -46028,11 +46028,11 @@
       this[_postMessage_2](message_1);
       return;
     }
-    [_postMessage_1](message, transfer) {
-      return this.postMessage(message, transfer);
+    [_postMessage_1](...args) {
+      return this.postMessage.apply(this, args);
     }
-    [_postMessage_2](message) {
-      return this.postMessage(message);
+    [_postMessage_2](...args) {
+      return this.postMessage.apply(this, args);
     }
   };
   dart.setSignature(html$.CrossOriginServiceWorkerClient, {
@@ -46066,8 +46066,8 @@
     get [dartx.subtle]() {
       return this.subtle;
     }
-    [_getRandomValues](array) {
-      return this.getRandomValues(array);
+    [_getRandomValues](...args) {
+      return this.getRandomValues.apply(this, args);
     }
   };
   dart.setSignature(html$.Crypto, {
@@ -46236,11 +46236,11 @@
     get [dartx.cssRules]() {
       return this.cssRules;
     }
-    [dartx.deleteRule](index) {
-      return this.deleteRule(index);
+    [dartx.deleteRule](...args) {
+      return this.deleteRule.apply(this, args);
     }
-    [dartx.insertRule](rule, index) {
-      return this.insertRule(rule, index);
+    [dartx.insertRule](...args) {
+      return this.insertRule.apply(this, args);
     }
   };
   dart.setSignature(html$.CssGroupingRule, {
@@ -46328,17 +46328,17 @@
     set [dartx.name](value) {
       this.name = value;
     }
-    [__getter__](index) {
-      return this.__getter__(index);
+    [__getter__](...args) {
+      return this.__getter__.apply(this, args);
     }
-    [dartx.appendRule](rule) {
-      return this.appendRule(rule);
+    [dartx.appendRule](...args) {
+      return this.appendRule.apply(this, args);
     }
-    [dartx.deleteRule](select) {
-      return this.deleteRule(select);
+    [dartx.deleteRule](...args) {
+      return this.deleteRule.apply(this, args);
     }
-    [dartx.findRule](select) {
-      return this.findRule(select);
+    [dartx.findRule](...args) {
+      return this.findRule.apply(this, args);
     }
   };
   dart.setSignature(html$.CssKeyframesRule, {
@@ -50876,17 +50876,17 @@
     get [dartx.parentRule]() {
       return this.parentRule;
     }
-    [dartx.getPropertyPriority](property) {
-      return this.getPropertyPriority(property);
+    [dartx.getPropertyPriority](...args) {
+      return this.getPropertyPriority.apply(this, args);
     }
-    [_getPropertyValue](property) {
-      return this.getPropertyValue(property);
+    [_getPropertyValue](...args) {
+      return this.getPropertyValue.apply(this, args);
     }
-    [dartx.item](index) {
-      return this.item(index);
+    [dartx.item](...args) {
+      return this.item.apply(this, args);
     }
-    [dartx.removeProperty](property) {
-      return this.removeProperty(property);
+    [dartx.removeProperty](...args) {
+      return this.removeProperty.apply(this, args);
     }
     get [dartx.background]() {
       return this[_background];
@@ -52868,17 +52868,17 @@
     get [dartx.rules]() {
       return this.rules;
     }
-    [dartx.addRule](selector, style, index) {
-      return this.addRule(selector, style, index);
+    [dartx.addRule](...args) {
+      return this.addRule.apply(this, args);
     }
-    [dartx.deleteRule](index) {
-      return this.deleteRule(index);
+    [dartx.deleteRule](...args) {
+      return this.deleteRule.apply(this, args);
     }
-    [dartx.insertRule](rule, index) {
-      return this.insertRule(rule, index);
+    [dartx.insertRule](...args) {
+      return this.insertRule.apply(this, args);
     }
-    [dartx.removeRule](index) {
-      return this.removeRule(index);
+    [dartx.removeRule](...args) {
+      return this.removeRule.apply(this, args);
     }
   };
   dart.setSignature(html$.CssStyleSheet, {
@@ -52912,11 +52912,11 @@
     get [dartx.cssRules]() {
       return this.cssRules;
     }
-    [dartx.deleteRule](index) {
-      return this.deleteRule(index);
+    [dartx.deleteRule](...args) {
+      return this.deleteRule.apply(this, args);
     }
-    [dartx.insertRule](rule, index) {
-      return this.insertRule(rule, index);
+    [dartx.insertRule](...args) {
+      return this.insertRule.apply(this, args);
     }
   };
   dart.setSignature(html$.CssSupportsRule, {
@@ -53006,8 +53006,8 @@
     get [_get__detail]() {
       return this.detail;
     }
-    [_initCustomEvent](type, bubbles, cancelable, detail) {
-      return this.initCustomEvent(type, bubbles, cancelable, detail);
+    [_initCustomEvent](...args) {
+      return this.initCustomEvent.apply(this, args);
     }
   };
   dart.setSignature(html$.CustomEvent, {
@@ -53119,17 +53119,17 @@
     get [dartx.types]() {
       return this.types;
     }
-    [dartx.clearData](format) {
-      return this.clearData(format);
+    [dartx.clearData](...args) {
+      return this.clearData.apply(this, args);
     }
-    [dartx.getData](format) {
-      return this.getData(format);
+    [dartx.getData](...args) {
+      return this.getData.apply(this, args);
     }
-    [dartx.setData](format, data) {
-      return this.setData(format, data);
+    [dartx.setData](...args) {
+      return this.setData.apply(this, args);
     }
-    [dartx.setDragImage](image, x, y) {
-      return this.setDragImage(image, x, y);
+    [dartx.setDragImage](...args) {
+      return this.setDragImage.apply(this, args);
     }
   };
   dart.setSignature(html$.DataTransfer, {
@@ -53167,11 +53167,11 @@
     get [dartx.type]() {
       return this.type;
     }
-    [dartx.getAsFile]() {
-      return this.getAsFile();
+    [dartx.getAsFile](...args) {
+      return this.getAsFile.apply(this, args);
     }
-    [_getAsString](callback) {
-      return this.getAsString(callback);
+    [_getAsString](...args) {
+      return this.getAsString.apply(this, args);
     }
     [dartx.getAsString]() {
       let completer = CompleterOfString().new();
@@ -53180,8 +53180,8 @@
       }, StringTovoid$()));
       return completer.future;
     }
-    [dartx.getAsEntry]() {
-      return this.webkitGetAsEntry();
+    [dartx.getAsEntry](...args) {
+      return this.webkitGetAsEntry.apply(this, args);
     }
   };
   dart.setSignature(html$.DataTransferItem, {
@@ -53215,23 +53215,23 @@
     get [dartx.length]() {
       return this.length;
     }
-    [dartx.add](data_OR_file, type) {
-      return this.add(data_OR_file, type);
+    [dartx.add](...args) {
+      return this.add.apply(this, args);
     }
-    [dartx.addData](data, type) {
-      return this.add(data, type);
+    [dartx.addData](...args) {
+      return this.add.apply(this, args);
     }
-    [dartx.addFile](file) {
-      return this.add(file);
+    [dartx.addFile](...args) {
+      return this.add.apply(this, args);
     }
-    [dartx.clear]() {
-      return this.clear();
+    [dartx.clear](...args) {
+      return this.clear.apply(this, args);
     }
-    [dartx.item](index) {
-      return this.item(index);
+    [dartx.item](...args) {
+      return this.item.apply(this, args);
     }
-    [dartx.remove](index) {
-      return this.remove(index);
+    [dartx.remove](...args) {
+      return this.remove.apply(this, args);
     }
     [dartx._get](index) {
       return this[index];
@@ -53271,11 +53271,11 @@
       this[_postMessage_2](message_1);
       return;
     }
-    [_postMessage_1](message, transfer) {
-      return this.postMessage(message, transfer);
+    [_postMessage_1](...args) {
+      return this.postMessage.apply(this, args);
     }
-    [_postMessage_2](message) {
-      return this.postMessage(message);
+    [_postMessage_2](...args) {
+      return this.postMessage.apply(this, args);
     }
     get [dartx.onMessage]() {
       return html$.DedicatedWorkerGlobalScope.messageEvent.forTarget(this);
@@ -53343,11 +53343,11 @@
     static _() {
       dart.throw(new core.UnsupportedError("Not supported"));
     }
-    [dartx.queryUsageAndQuota](storageType, usageCallback, errorCallback) {
-      return this.queryUsageAndQuota(storageType, usageCallback, errorCallback);
+    [dartx.queryUsageAndQuota](...args) {
+      return this.queryUsageAndQuota.apply(this, args);
     }
-    [dartx.requestQuota](storageType, newQuotaInBytes, quotaCallback, errorCallback) {
-      return this.requestQuota(storageType, newQuotaInBytes, quotaCallback, errorCallback);
+    [dartx.requestQuota](...args) {
+      return this.requestQuota.apply(this, args);
     }
   };
   dart.setSignature(html$.DeprecatedStorageInfo, {
@@ -53372,11 +53372,11 @@
     static _() {
       dart.throw(new core.UnsupportedError("Not supported"));
     }
-    [dartx.queryUsageAndQuota](usageCallback, errorCallback) {
-      return this.queryUsageAndQuota(usageCallback, errorCallback);
+    [dartx.queryUsageAndQuota](...args) {
+      return this.queryUsageAndQuota.apply(this, args);
     }
-    [dartx.requestQuota](newQuotaInBytes, quotaCallback, errorCallback) {
-      return this.requestQuota(newQuotaInBytes, quotaCallback, errorCallback);
+    [dartx.requestQuota](...args) {
+      return this.requestQuota.apply(this, args);
     }
   };
   dart.setSignature(html$.DeprecatedStorageQuota, {
@@ -53511,8 +53511,8 @@
     get [dartx.rotationRate]() {
       return this.rotationRate;
     }
-    [dartx.initDeviceMotionEvent](type, bubbles, cancelable, acceleration, accelerationIncludingGravity, rotationRate, interval) {
-      return this.initDeviceMotionEvent(type, bubbles, cancelable, acceleration, accelerationIncludingGravity, rotationRate, interval);
+    [dartx.initDeviceMotionEvent](...args) {
+      return this.initDeviceMotionEvent.apply(this, args);
     }
   };
   dart.setSignature(html$.DeviceMotionEvent, {
@@ -53560,8 +53560,8 @@
     get [dartx.gamma]() {
       return this.gamma;
     }
-    [_initDeviceOrientationEvent](type, bubbles, cancelable, alpha, beta, gamma, absolute) {
-      return this.initDeviceOrientationEvent(type, bubbles, cancelable, alpha, beta, gamma, absolute);
+    [_initDeviceOrientationEvent](...args) {
+      return this.initDeviceOrientationEvent.apply(this, args);
     }
   };
   dart.setSignature(html$.DeviceOrientationEvent, {
@@ -53634,14 +53634,14 @@
     set [dartx.returnValue](value) {
       this.returnValue = value;
     }
-    [dartx.close](returnValue) {
-      return this.close(returnValue);
+    [dartx.close](...args) {
+      return this.close.apply(this, args);
     }
-    [dartx.show]() {
-      return this.show();
+    [dartx.show](...args) {
+      return this.show.apply(this, args);
     }
-    [dartx.showModal]() {
-      return this.showModal();
+    [dartx.showModal](...args) {
+      return this.showModal.apply(this, args);
     }
   };
   dart.defineNamedConstructor(html$.DialogElement, 'created');
@@ -53711,8 +53711,8 @@
     get [dartx.name]() {
       return this.name;
     }
-    [_copyTo](parent, opts) {
-      return this.copyTo(parent, opts);
+    [_copyTo](...args) {
+      return this.copyTo.apply(this, args);
     }
     [dartx.copyTo](parent, opts) {
       let name = opts && 'name' in opts ? opts.name : null;
@@ -53724,8 +53724,8 @@
         }, FileErrorTovoid())});
       return completer.future;
     }
-    [_getMetadata](successCallback, errorCallback) {
-      return this.getMetadata(successCallback, errorCallback);
+    [_getMetadata](...args) {
+      return this.getMetadata.apply(this, args);
     }
     [dartx.getMetadata]() {
       let completer = CompleterOfMetadata().new();
@@ -53736,8 +53736,8 @@
       }, FileErrorTovoid()));
       return completer.future;
     }
-    [_getParent](successCallback, errorCallback) {
-      return this.getParent(successCallback, errorCallback);
+    [_getParent](...args) {
+      return this.getParent.apply(this, args);
     }
     [dartx.getParent]() {
       let completer = CompleterOfEntry().new();
@@ -53748,8 +53748,8 @@
       }, FileErrorTovoid()));
       return completer.future;
     }
-    [_moveTo](parent, opts) {
-      return this.moveTo(parent, opts);
+    [_moveTo](...args) {
+      return this.moveTo.apply(this, args);
     }
     [dartx.moveTo](parent, opts) {
       let name = opts && 'name' in opts ? opts.name : null;
@@ -53761,8 +53761,8 @@
         }, FileErrorTovoid())});
       return completer.future;
     }
-    [_remove$](successCallback, errorCallback) {
-      return this.remove(successCallback, errorCallback);
+    [_remove$](...args) {
+      return this.remove.apply(this, args);
     }
     [dartx.remove]() {
       let completer = async.Completer.new();
@@ -53773,8 +53773,8 @@
       }, FileErrorTovoid()));
       return completer.future;
     }
-    [dartx.toUrl]() {
-      return this.toURL();
+    [dartx.toUrl](...args) {
+      return this.toURL.apply(this, args);
     }
   };
   dart.setSignature(html$.Entry, {
@@ -53827,8 +53827,8 @@
     static _() {
       dart.throw(new core.UnsupportedError("Not supported"));
     }
-    [dartx.createReader]() {
-      return this.createReader();
+    [dartx.createReader](...args) {
+      return this.createReader.apply(this, args);
     }
     [__getDirectory](path, opts) {
       let options = opts && 'options' in opts ? opts.options : null;
@@ -53852,17 +53852,17 @@
       this[__getDirectory_4](path);
       return;
     }
-    [__getDirectory_1](path, options, successCallback, errorCallback) {
-      return this.getDirectory(path, options, successCallback, errorCallback);
+    [__getDirectory_1](...args) {
+      return this.getDirectory.apply(this, args);
     }
-    [__getDirectory_2](path, options, successCallback) {
-      return this.getDirectory(path, options, successCallback);
+    [__getDirectory_2](...args) {
+      return this.getDirectory.apply(this, args);
     }
-    [__getDirectory_3](path, options) {
-      return this.getDirectory(path, options);
+    [__getDirectory_3](...args) {
+      return this.getDirectory.apply(this, args);
     }
-    [__getDirectory_4](path) {
-      return this.getDirectory(path);
+    [__getDirectory_4](...args) {
+      return this.getDirectory.apply(this, args);
     }
     [_getDirectory](path, opts) {
       let options = opts && 'options' in opts ? opts.options : null;
@@ -53896,17 +53896,17 @@
       this[__getFile_4](path);
       return;
     }
-    [__getFile_1](path, options, successCallback, errorCallback) {
-      return this.getFile(path, options, successCallback, errorCallback);
+    [__getFile_1](...args) {
+      return this.getFile.apply(this, args);
     }
-    [__getFile_2](path, options, successCallback) {
-      return this.getFile(path, options, successCallback);
+    [__getFile_2](...args) {
+      return this.getFile.apply(this, args);
     }
-    [__getFile_3](path, options) {
-      return this.getFile(path, options);
+    [__getFile_3](...args) {
+      return this.getFile.apply(this, args);
     }
-    [__getFile_4](path) {
-      return this.getFile(path);
+    [__getFile_4](...args) {
+      return this.getFile.apply(this, args);
     }
     [_getFile](path, opts) {
       let options = opts && 'options' in opts ? opts.options : null;
@@ -53918,8 +53918,8 @@
         }, FileErrorTovoid())});
       return completer.future;
     }
-    [_removeRecursively](successCallback, errorCallback) {
-      return this.removeRecursively(successCallback, errorCallback);
+    [_removeRecursively](...args) {
+      return this.removeRecursively.apply(this, args);
     }
     [dartx.removeRecursively]() {
       let completer = async.Completer.new();
@@ -53964,8 +53964,8 @@
     static _() {
       dart.throw(new core.UnsupportedError("Not supported"));
     }
-    [_readEntries](successCallback, errorCallback) {
-      return this.readEntries(successCallback, errorCallback);
+    [_readEntries](...args) {
+      return this.readEntries.apply(this, args);
     }
     [dartx.readEntries]() {
       let completer = CompleterOfListOfEntry().new();
@@ -54262,93 +54262,93 @@
     get [_webkitVisibilityState]() {
       return this.webkitVisibilityState;
     }
-    [dartx.adoptNode](node) {
-      return this.adoptNode(node);
+    [dartx.adoptNode](...args) {
+      return this.adoptNode.apply(this, args);
     }
-    [_caretRangeFromPoint](x, y) {
-      return this.caretRangeFromPoint(x, y);
+    [_caretRangeFromPoint](...args) {
+      return this.caretRangeFromPoint.apply(this, args);
     }
-    [dartx.createDocumentFragment]() {
-      return this.createDocumentFragment();
+    [dartx.createDocumentFragment](...args) {
+      return this.createDocumentFragment.apply(this, args);
     }
-    [_createElement](localName_OR_tagName, typeExtension) {
-      return this.createElement(localName_OR_tagName, typeExtension);
+    [_createElement](...args) {
+      return this.createElement.apply(this, args);
     }
-    [_createElementNS](namespaceURI, qualifiedName, typeExtension) {
-      return this.createElementNS(namespaceURI, qualifiedName, typeExtension);
+    [_createElementNS](...args) {
+      return this.createElementNS.apply(this, args);
     }
-    [_createEvent](eventType) {
-      return this.createEvent(eventType);
+    [_createEvent](...args) {
+      return this.createEvent.apply(this, args);
     }
-    [dartx.createRange]() {
-      return this.createRange();
+    [dartx.createRange](...args) {
+      return this.createRange.apply(this, args);
     }
-    [_createTextNode](data) {
-      return this.createTextNode(data);
+    [_createTextNode](...args) {
+      return this.createTextNode.apply(this, args);
     }
     [_createTouch](window, target, identifier, pageX, pageY, screenX, screenY, radiusX, radiusY, rotationAngle, force) {
       let target_1 = html$._convertDartToNative_EventTarget(target);
       return this[_createTouch_1](window, target_1, identifier, pageX, pageY, screenX, screenY, radiusX, radiusY, rotationAngle, force);
     }
-    [_createTouch_1](window, target, identifier, pageX, pageY, screenX, screenY, radiusX, radiusY, rotationAngle, force) {
-      return this.createTouch(window, target, identifier, pageX, pageY, screenX, screenY, radiusX, radiusY, rotationAngle, force);
+    [_createTouch_1](...args) {
+      return this.createTouch.apply(this, args);
     }
-    [_createTouchList](touches) {
-      return this.createTouchList(touches);
+    [_createTouchList](...args) {
+      return this.createTouchList.apply(this, args);
     }
-    [_elementFromPoint](x, y) {
-      return this.elementFromPoint(x, y);
+    [_elementFromPoint](...args) {
+      return this.elementFromPoint.apply(this, args);
     }
-    [dartx.elementsFromPoint](x, y) {
-      return this.elementsFromPoint(x, y);
+    [dartx.elementsFromPoint](...args) {
+      return this.elementsFromPoint.apply(this, args);
     }
-    [dartx.execCommand](commandId, showUI, value) {
-      return this.execCommand(commandId, showUI, value);
+    [dartx.execCommand](...args) {
+      return this.execCommand.apply(this, args);
     }
-    [dartx.exitFullscreen]() {
-      return this.exitFullscreen();
+    [dartx.exitFullscreen](...args) {
+      return this.exitFullscreen.apply(this, args);
     }
-    [dartx.exitPointerLock]() {
-      return this.exitPointerLock();
+    [dartx.exitPointerLock](...args) {
+      return this.exitPointerLock.apply(this, args);
     }
-    [_getCssCanvasContext](contextId, name, width, height) {
-      return this.getCSSCanvasContext(contextId, name, width, height);
+    [_getCssCanvasContext](...args) {
+      return this.getCSSCanvasContext.apply(this, args);
     }
-    [dartx.getElementsByClassName](classNames) {
-      return this.getElementsByClassName(classNames);
+    [dartx.getElementsByClassName](...args) {
+      return this.getElementsByClassName.apply(this, args);
     }
-    [dartx.getElementsByName](elementName) {
-      return this.getElementsByName(elementName);
+    [dartx.getElementsByName](...args) {
+      return this.getElementsByName.apply(this, args);
     }
-    [dartx.getElementsByTagName](localName) {
-      return this.getElementsByTagName(localName);
+    [dartx.getElementsByTagName](...args) {
+      return this.getElementsByTagName.apply(this, args);
     }
-    [dartx.importNode](node, deep) {
-      return this.importNode(node, deep);
+    [dartx.importNode](...args) {
+      return this.importNode.apply(this, args);
     }
-    [dartx.queryCommandEnabled](commandId) {
-      return this.queryCommandEnabled(commandId);
+    [dartx.queryCommandEnabled](...args) {
+      return this.queryCommandEnabled.apply(this, args);
     }
-    [dartx.queryCommandIndeterm](commandId) {
-      return this.queryCommandIndeterm(commandId);
+    [dartx.queryCommandIndeterm](...args) {
+      return this.queryCommandIndeterm.apply(this, args);
     }
-    [dartx.queryCommandState](commandId) {
-      return this.queryCommandState(commandId);
+    [dartx.queryCommandState](...args) {
+      return this.queryCommandState.apply(this, args);
     }
-    [dartx.queryCommandSupported](commandId) {
-      return this.queryCommandSupported(commandId);
+    [dartx.queryCommandSupported](...args) {
+      return this.queryCommandSupported.apply(this, args);
     }
-    [dartx.queryCommandValue](commandId) {
-      return this.queryCommandValue(commandId);
+    [dartx.queryCommandValue](...args) {
+      return this.queryCommandValue.apply(this, args);
     }
-    [dartx.transformDocumentToTreeView](noStyleMessage) {
-      return this.transformDocumentToTreeView(noStyleMessage);
+    [dartx.transformDocumentToTreeView](...args) {
+      return this.transformDocumentToTreeView.apply(this, args);
     }
-    [_webkitExitFullscreen]() {
-      return this.webkitExitFullscreen();
+    [_webkitExitFullscreen](...args) {
+      return this.webkitExitFullscreen.apply(this, args);
     }
-    [dartx.getElementById](elementId) {
-      return this.getElementById(elementId);
+    [dartx.getElementById](...args) {
+      return this.getElementById.apply(this, args);
     }
     get [_childElementCount]() {
       return this.childElementCount;
@@ -54362,11 +54362,11 @@
     get [_lastElementChild]() {
       return this.lastElementChild;
     }
-    [dartx.querySelector](selectors) {
-      return this.querySelector(selectors);
+    [dartx.querySelector](...args) {
+      return this.querySelector.apply(this, args);
     }
-    [_querySelectorAll](selectors) {
-      return this.querySelectorAll(selectors);
+    [_querySelectorAll](...args) {
+      return this.querySelectorAll.apply(this, args);
     }
     get [dartx.onAbort]() {
       return html$.Element.abortEvent.forTarget(this);
@@ -54901,8 +54901,8 @@
     static _() {
       dart.throw(new core.UnsupportedError("Not supported"));
     }
-    [dartx.getElementById](elementId) {
-      return this.getElementById(elementId);
+    [dartx.getElementById](...args) {
+      return this.getElementById.apply(this, args);
     }
     get [_childElementCount]() {
       return this.childElementCount;
@@ -54913,11 +54913,11 @@
     get [_lastElementChild]() {
       return this.lastElementChild;
     }
-    [dartx.querySelector](selectors) {
-      return this.querySelector(selectors);
+    [dartx.querySelector](...args) {
+      return this.querySelector.apply(this, args);
     }
-    [_querySelectorAll](selectors) {
-      return this.querySelectorAll(selectors);
+    [_querySelectorAll](...args) {
+      return this.querySelectorAll.apply(this, args);
     }
   };
   html$.DocumentFragment[dart.implements] = () => [html$.NonElementParentNode, html$.ParentNode];
@@ -55082,17 +55082,17 @@
     static _() {
       dart.throw(new core.UnsupportedError("Not supported"));
     }
-    [dartx.createDocument](namespaceURI, qualifiedName, doctype) {
-      return this.createDocument(namespaceURI, qualifiedName, doctype);
+    [dartx.createDocument](...args) {
+      return this.createDocument.apply(this, args);
     }
-    [dartx.createDocumentType](qualifiedName, publicId, systemId) {
-      return this.createDocumentType(qualifiedName, publicId, systemId);
+    [dartx.createDocumentType](...args) {
+      return this.createDocumentType.apply(this, args);
     }
-    [dartx.createHtmlDocument](title) {
-      return this.createHTMLDocument(title);
+    [dartx.createHtmlDocument](...args) {
+      return this.createHTMLDocument.apply(this, args);
     }
-    [dartx.hasFeature]() {
-      return this.hasFeature();
+    [dartx.hasFeature](...args) {
+      return this.hasFeature.apply(this, args);
     }
   };
   dart.setSignature(html$.DomImplementation, {
@@ -55112,8 +55112,8 @@
     static _() {
       dart.throw(new core.UnsupportedError("Not supported"));
     }
-    [dartx.next](value) {
-      return this.next(value);
+    [dartx.next](...args) {
+      return this.next.apply(this, args);
     }
   };
   dart.setSignature(html$.DomIterator, {
@@ -55230,26 +55230,26 @@
     get [dartx.m44]() {
       return this.m44;
     }
-    [dartx.multiply](other) {
-      return this.multiply(other);
+    [dartx.multiply](...args) {
+      return this.multiply.apply(this, args);
     }
-    [dartx.scale](scale, originX, originY) {
-      return this.scale(scale, originX, originY);
+    [dartx.scale](...args) {
+      return this.scale.apply(this, args);
     }
-    [dartx.scale3d](scale, originX, originY, originZ) {
-      return this.scale3d(scale, originX, originY, originZ);
+    [dartx.scale3d](...args) {
+      return this.scale3d.apply(this, args);
     }
-    [dartx.scaleNonUniform](scaleX, scaleY, scaleZn, originX, originY, originZ) {
-      return this.scaleNonUniform(scaleX, scaleY, scaleZn, originX, originY, originZ);
+    [dartx.scaleNonUniform](...args) {
+      return this.scaleNonUniform.apply(this, args);
     }
-    [dartx.toFloat32Array]() {
-      return this.toFloat32Array();
+    [dartx.toFloat32Array](...args) {
+      return this.toFloat32Array.apply(this, args);
     }
-    [dartx.toFloat64Array]() {
-      return this.toFloat64Array();
+    [dartx.toFloat64Array](...args) {
+      return this.toFloat64Array.apply(this, args);
     }
-    [dartx.translate](tx, ty, tz) {
-      return this.translate(tx, ty, tz);
+    [dartx.translate](...args) {
+      return this.translate.apply(this, args);
     }
   };
   dart.setSignature(html$.DomMatrixReadOnly, {
@@ -55495,23 +55495,23 @@
     set [dartx.m44](value) {
       this.m44 = value;
     }
-    [dartx.multiplySelf](other) {
-      return this.multiplySelf(other);
+    [dartx.multiplySelf](...args) {
+      return this.multiplySelf.apply(this, args);
     }
-    [dartx.preMultiplySelf](other) {
-      return this.preMultiplySelf(other);
+    [dartx.preMultiplySelf](...args) {
+      return this.preMultiplySelf.apply(this, args);
     }
-    [dartx.scale3dSelf](scale, originX, originY, originZ) {
-      return this.scale3dSelf(scale, originX, originY, originZ);
+    [dartx.scale3dSelf](...args) {
+      return this.scale3dSelf.apply(this, args);
     }
-    [dartx.scaleNonUniformSelf](scaleX, scaleY, scaleZ, originX, originY, originZ) {
-      return this.scaleNonUniformSelf(scaleX, scaleY, scaleZ, originX, originY, originZ);
+    [dartx.scaleNonUniformSelf](...args) {
+      return this.scaleNonUniformSelf.apply(this, args);
     }
-    [dartx.scaleSelf](scale, originX, originY) {
-      return this.scaleSelf(scale, originX, originY);
+    [dartx.scaleSelf](...args) {
+      return this.scaleSelf.apply(this, args);
     }
-    [dartx.translateSelf](tx, ty, tz) {
-      return this.translateSelf(tx, ty, tz);
+    [dartx.translateSelf](...args) {
+      return this.translateSelf.apply(this, args);
     }
   };
   dart.setSignature(html$.DomMatrix, {
@@ -55571,8 +55571,8 @@
     static _create_1() {
       return new DOMParser();
     }
-    [dartx.parseFromString](str, type) {
-      return this.parseFromString(str, type);
+    [dartx.parseFromString](...args) {
+      return this.parseFromString.apply(this, args);
     }
   };
   dart.setSignature(html$.DomParser, {
@@ -55891,20 +55891,20 @@
     get [dartx.length]() {
       return this.length;
     }
-    [dartx.add](tokens) {
-      return this.add(tokens);
+    [dartx.add](...args) {
+      return this.add.apply(this, args);
     }
-    [dartx.contains](token) {
-      return this.contains(token);
+    [dartx.contains](...args) {
+      return this.contains.apply(this, args);
     }
-    [dartx.item](index) {
-      return this.item(index);
+    [dartx.item](...args) {
+      return this.item.apply(this, args);
     }
-    [dartx.remove](tokens) {
-      return this.remove(tokens);
+    [dartx.remove](...args) {
+      return this.remove.apply(this, args);
     }
-    [dartx.toggle](token, force) {
-      return this.toggle(token, force);
+    [dartx.toggle](...args) {
+      return this.toggle.apply(this, args);
     }
   };
   dart.setSignature(html$.DomTokenList, {
@@ -56129,11 +56129,11 @@
     [dartx.elementAt](index) {
       return this[dartx._get](index);
     }
-    [__getter__](index) {
-      return this.__getter__(index);
+    [__getter__](...args) {
+      return this.__getter__.apply(this, args);
     }
-    [dartx.item](index) {
-      return this.item(index);
+    [dartx.item](...args) {
+      return this.item.apply(this, args);
     }
   };
   html$.DomStringList[dart.implements] = () => [ListOfString()];
@@ -56857,11 +56857,11 @@
     set [dartx.width](value) {
       this.width = value;
     }
-    [__getter__](index_OR_name) {
-      return this.__getter__(index_OR_name);
+    [__getter__](...args) {
+      return this.__getter__.apply(this, args);
     }
-    [__setter__](index_OR_name, value) {
-      return this.__setter__(index_OR_name, value);
+    [__setter__](...args) {
+      return this.__setter__.apply(this, args);
     }
   };
   dart.defineNamedConstructor(html$.EmbedElement, 'created');
@@ -56989,8 +56989,8 @@
     get [dartx.withCredentials]() {
       return this.withCredentials;
     }
-    [dartx.close]() {
-      return this.close();
+    [dartx.close](...args) {
+      return this.close.apply(this, args);
     }
     get [dartx.onError]() {
       return html$.EventSource.errorEvent.forTarget(this);
@@ -57105,8 +57105,8 @@
     static _create_2(type) {
       return new ExtendableEvent(type);
     }
-    [dartx.waitUntil](value) {
-      return this.waitUntil(value);
+    [dartx.waitUntil](...args) {
+      return this.waitUntil.apply(this, args);
     }
   };
   dart.setSignature(html$.ExtendableEvent, {
@@ -57186,8 +57186,8 @@
     get [dartx.request]() {
       return this.request;
     }
-    [dartx.respondWith](value) {
-      return this.respondWith(value);
+    [dartx.respondWith](...args) {
+      return this.respondWith.apply(this, args);
     }
   };
   dart.setSignature(html$.FetchEvent, {
@@ -57268,14 +57268,14 @@
     get [dartx.willValidate]() {
       return this.willValidate;
     }
-    [dartx.checkValidity]() {
-      return this.checkValidity();
+    [dartx.checkValidity](...args) {
+      return this.checkValidity.apply(this, args);
     }
-    [dartx.reportValidity]() {
-      return this.reportValidity();
+    [dartx.reportValidity](...args) {
+      return this.reportValidity.apply(this, args);
     }
-    [dartx.setCustomValidity](error) {
-      return this.setCustomValidity(error);
+    [dartx.setCustomValidity](...args) {
+      return this.setCustomValidity.apply(this, args);
     }
   };
   dart.defineNamedConstructor(html$.FieldSetElement, 'created');
@@ -57373,8 +57373,8 @@
     static _() {
       dart.throw(new core.UnsupportedError("Not supported"));
     }
-    [_createWriter](successCallback, errorCallback) {
-      return this.createWriter(successCallback, errorCallback);
+    [_createWriter](...args) {
+      return this.createWriter.apply(this, args);
     }
     [dartx.createWriter]() {
       let completer = CompleterOfFileWriter().new();
@@ -57385,8 +57385,8 @@
       }, FileErrorTovoid()));
       return completer.future;
     }
-    [_file](successCallback, errorCallback) {
-      return this.file(successCallback, errorCallback);
+    [_file](...args) {
+      return this.file.apply(this, args);
     }
     [dartx.file]() {
       let completer = CompleterOfFile().new();
@@ -57503,8 +57503,8 @@
     [dartx.elementAt](index) {
       return this[dartx._get](index);
     }
-    [dartx.item](index) {
-      return this.item(index);
+    [dartx.item](...args) {
+      return this.item.apply(this, args);
     }
   };
   html$.FileList[dart.implements] = () => [_js_helper.JavaScriptIndexingBehavior, ListOfFile()];
@@ -57563,17 +57563,17 @@
     get [dartx.readyState]() {
       return this.readyState;
     }
-    [dartx.abort]() {
-      return this.abort();
+    [dartx.abort](...args) {
+      return this.abort.apply(this, args);
     }
-    [dartx.readAsArrayBuffer](blob) {
-      return this.readAsArrayBuffer(blob);
+    [dartx.readAsArrayBuffer](...args) {
+      return this.readAsArrayBuffer.apply(this, args);
     }
-    [dartx.readAsDataUrl](blob) {
-      return this.readAsDataURL(blob);
+    [dartx.readAsDataUrl](...args) {
+      return this.readAsDataURL.apply(this, args);
     }
-    [dartx.readAsText](blob, label) {
-      return this.readAsText(blob, label);
+    [dartx.readAsText](...args) {
+      return this.readAsText.apply(this, args);
     }
     get [dartx.onAbort]() {
       return html$.FileReader.abortEvent.forTarget(this);
@@ -57732,17 +57732,17 @@
     get [dartx.readyState]() {
       return this.readyState;
     }
-    [dartx.abort]() {
-      return this.abort();
+    [dartx.abort](...args) {
+      return this.abort.apply(this, args);
     }
-    [dartx.seek](position) {
-      return this.seek(position);
+    [dartx.seek](...args) {
+      return this.seek.apply(this, args);
     }
-    [dartx.truncate](size) {
-      return this.truncate(size);
+    [dartx.truncate](...args) {
+      return this.truncate.apply(this, args);
     }
-    [dartx.write](data) {
-      return this.write(data);
+    [dartx.write](...args) {
+      return this.write.apply(this, args);
     }
     get [dartx.onAbort]() {
       return html$.FileWriter.abortEvent.forTarget(this);
@@ -57943,8 +57943,8 @@
     set [dartx.weight](value) {
       this.weight = value;
     }
-    [dartx.load]() {
-      return this.load();
+    [dartx.load](...args) {
+      return this.load.apply(this, args);
     }
   };
   dart.setSignature(html$.FontFace, {
@@ -57991,23 +57991,23 @@
     get [dartx.status]() {
       return this.status;
     }
-    [dartx.add](fontFace) {
-      return this.add(fontFace);
+    [dartx.add](...args) {
+      return this.add.apply(this, args);
     }
-    [dartx.check](font, text) {
-      return this.check(font, text);
+    [dartx.check](...args) {
+      return this.check.apply(this, args);
     }
-    [dartx.clear]() {
-      return this.clear();
+    [dartx.clear](...args) {
+      return this.clear.apply(this, args);
     }
-    [dartx.delete](fontFace) {
-      return this.delete(fontFace);
+    [dartx.delete](...args) {
+      return this.delete.apply(this, args);
     }
-    [dartx.forEach](callback, thisArg) {
-      return this.forEach(callback, thisArg);
+    [dartx.forEach](...args) {
+      return this.forEach.apply(this, args);
     }
-    [dartx.has](fontFace) {
-      return this.has(fontFace);
+    [dartx.has](...args) {
+      return this.has.apply(this, args);
     }
   };
   dart.setSignature(html$.FontFaceSet, {
@@ -58072,26 +58072,26 @@
     static get supported() {
       return !!window.FormData;
     }
-    [dartx.append](name, value) {
-      return this.append(name, value);
+    [dartx.append](...args) {
+      return this.append.apply(this, args);
     }
-    [dartx.appendBlob](name, value, filename) {
-      return this.append(name, value, filename);
+    [dartx.appendBlob](...args) {
+      return this.append.apply(this, args);
     }
-    [dartx.delete](name) {
-      return this.delete(name);
+    [dartx.delete](...args) {
+      return this.delete.apply(this, args);
     }
-    [dartx.get](name) {
-      return this.get(name);
+    [dartx.get](...args) {
+      return this.get.apply(this, args);
     }
-    [dartx.getAll](name) {
-      return this.getAll(name);
+    [dartx.getAll](...args) {
+      return this.getAll.apply(this, args);
     }
-    [dartx.has](name) {
-      return this.has(name);
+    [dartx.has](...args) {
+      return this.has.apply(this, args);
     }
-    [dartx.set](name, value, filename) {
-      return this.set(name, value, filename);
+    [dartx.set](...args) {
+      return this.set.apply(this, args);
     }
   };
   dart.setSignature(html$.FormData, {
@@ -58212,31 +58212,31 @@
     set [dartx.target](value) {
       this.target = value;
     }
-    [__getter__](name) {
-      return this.__getter__(name);
+    [__getter__](...args) {
+      return this.__getter__.apply(this, args);
     }
-    [dartx.checkValidity]() {
-      return this.checkValidity();
+    [dartx.checkValidity](...args) {
+      return this.checkValidity.apply(this, args);
     }
-    [dartx.item](index) {
-      return this.item(index);
+    [dartx.item](...args) {
+      return this.item.apply(this, args);
     }
-    [dartx.reportValidity]() {
-      return this.reportValidity();
+    [dartx.reportValidity](...args) {
+      return this.reportValidity.apply(this, args);
     }
     [dartx.requestAutocomplete](details) {
       let details_1 = html_common.convertDartToNative_Dictionary(details);
       this[_requestAutocomplete_1](details_1);
       return;
     }
-    [_requestAutocomplete_1](details) {
-      return this.requestAutocomplete(details);
+    [_requestAutocomplete_1](...args) {
+      return this.requestAutocomplete.apply(this, args);
     }
-    [dartx.reset]() {
-      return this.reset();
+    [dartx.reset](...args) {
+      return this.reset.apply(this, args);
     }
-    [dartx.submit]() {
-      return this.submit();
+    [dartx.submit](...args) {
+      return this.submit.apply(this, args);
     }
   };
   dart.defineNamedConstructor(html$.FormElement, 'created');
@@ -58389,14 +58389,14 @@
     static _() {
       dart.throw(new core.UnsupportedError("Not supported"));
     }
-    [dartx.getRegisteredRegions]() {
-      return this.getRegisteredRegions();
+    [dartx.getRegisteredRegions](...args) {
+      return this.getRegisteredRegions.apply(this, args);
     }
-    [dartx.registerRegion](region) {
-      return this.registerRegion(region);
+    [dartx.registerRegion](...args) {
+      return this.registerRegion.apply(this, args);
     }
-    [dartx.unregisterRegion](regionId) {
-      return this.unregisterRegion(regionId);
+    [dartx.unregisterRegion](...args) {
+      return this.unregisterRegion.apply(this, args);
     }
   };
   dart.setSignature(html$.Geofencing, {
@@ -58516,8 +58516,8 @@
     static _() {
       dart.throw(new core.UnsupportedError("Not supported"));
     }
-    [_clearWatch](watchID) {
-      return this.clearWatch(watchID);
+    [_clearWatch](...args) {
+      return this.clearWatch.apply(this, args);
     }
     [_getCurrentPosition](successCallback, errorCallback, options) {
       if (errorCallback === void 0) errorCallback = null;
@@ -58534,14 +58534,14 @@
       this[_getCurrentPosition_3](successCallback);
       return;
     }
-    [_getCurrentPosition_1](successCallback, errorCallback, options) {
-      return this.getCurrentPosition(successCallback, errorCallback, options);
+    [_getCurrentPosition_1](...args) {
+      return this.getCurrentPosition.apply(this, args);
     }
-    [_getCurrentPosition_2](successCallback, errorCallback) {
-      return this.getCurrentPosition(successCallback, errorCallback);
+    [_getCurrentPosition_2](...args) {
+      return this.getCurrentPosition.apply(this, args);
     }
-    [_getCurrentPosition_3](successCallback) {
-      return this.getCurrentPosition(successCallback);
+    [_getCurrentPosition_3](...args) {
+      return this.getCurrentPosition.apply(this, args);
     }
     [_watchPosition](successCallback, errorCallback, options) {
       if (errorCallback === void 0) errorCallback = null;
@@ -58555,14 +58555,14 @@
       }
       return this[_watchPosition_3](successCallback);
     }
-    [_watchPosition_1](successCallback, errorCallback, options) {
-      return this.watchPosition(successCallback, errorCallback, options);
+    [_watchPosition_1](...args) {
+      return this.watchPosition.apply(this, args);
     }
-    [_watchPosition_2](successCallback, errorCallback) {
-      return this.watchPosition(successCallback, errorCallback);
+    [_watchPosition_2](...args) {
+      return this.watchPosition.apply(this, args);
     }
-    [_watchPosition_3](successCallback) {
-      return this.watchPosition(successCallback);
+    [_watchPosition_3](...args) {
+      return this.watchPosition.apply(this, args);
     }
   };
   dart.setSignature(html$.Geolocation, {
@@ -59233,8 +59233,8 @@
     get [dartx.oldUrl]() {
       return this.oldURL;
     }
-    [_initHashChangeEvent](type, canBubble, cancelable, oldURL, newURL) {
-      return this.initHashChangeEvent(type, canBubble, cancelable, oldURL, newURL);
+    [_initHashChangeEvent](...args) {
+      return this.initHashChangeEvent.apply(this, args);
     }
   };
   dart.setSignature(html$.HashChangeEvent, {
@@ -59401,14 +59401,14 @@
     get [_get_state]() {
       return this.state;
     }
-    [dartx.back]() {
-      return this.back();
+    [dartx.back](...args) {
+      return this.back.apply(this, args);
     }
-    [dartx.forward]() {
-      return this.forward();
+    [dartx.forward](...args) {
+      return this.forward.apply(this, args);
     }
-    [dartx.go](delta) {
-      return this.go(delta);
+    [dartx.go](...args) {
+      return this.go.apply(this, args);
     }
     [dartx.pushState](data, title, url, options) {
       if (options === void 0) options = null;
@@ -59422,11 +59422,11 @@
       this[_pushState_2](data_1, title, url);
       return;
     }
-    [_pushState_1](data, title, url, options) {
-      return this.pushState(data, title, url, options);
+    [_pushState_1](...args) {
+      return this.pushState.apply(this, args);
     }
-    [_pushState_2](data, title, url) {
-      return this.pushState(data, title, url);
+    [_pushState_2](...args) {
+      return this.pushState.apply(this, args);
     }
     [dartx.replaceState](data, title, url, options) {
       if (options === void 0) options = null;
@@ -59440,11 +59440,11 @@
       this[_replaceState_2](data_1, title, url);
       return;
     }
-    [_replaceState_1](data, title, url, options) {
-      return this.replaceState(data, title, url, options);
+    [_replaceState_1](...args) {
+      return this.replaceState.apply(this, args);
     }
-    [_replaceState_2](data, title, url) {
-      return this.replaceState(data, title, url);
+    [_replaceState_2](...args) {
+      return this.replaceState.apply(this, args);
     }
   };
   html$.History[dart.implements] = () => [html$.HistoryBase];
@@ -59509,11 +59509,11 @@
     static _() {
       dart.throw(new core.UnsupportedError("Not supported"));
     }
-    [dartx.getEyeParameters](whichEye) {
-      return this.getEyeParameters(whichEye);
+    [dartx.getEyeParameters](...args) {
+      return this.getEyeParameters.apply(this, args);
     }
-    [dartx.setFieldOfView](leftFov, rightFov) {
-      return this.setFieldOfView(leftFov, rightFov);
+    [dartx.setFieldOfView](...args) {
+      return this.setFieldOfView.apply(this, args);
     }
   };
   dart.setSignature(html$.HmdvrDevice, {
@@ -59578,11 +59578,11 @@
     [dartx.elementAt](index) {
       return this[dartx._get](index);
     }
-    [dartx.item](index) {
-      return this.item(index);
+    [dartx.item](...args) {
+      return this.item.apply(this, args);
     }
-    [dartx.namedItem](name) {
-      return this.namedItem(name);
+    [dartx.namedItem](...args) {
+      return this.namedItem.apply(this, args);
     }
   };
   html$.HtmlCollection[dart.implements] = () => [_js_helper.JavaScriptIndexingBehavior, ListOfNode()];
@@ -59748,11 +59748,11 @@
     static _() {
       dart.throw(new core.UnsupportedError("Not supported"));
     }
-    [dartx.item](index) {
-      return this.item(index);
+    [dartx.item](...args) {
+      return this.item.apply(this, args);
     }
-    [dartx.namedItem](name) {
-      return this.namedItem(name);
+    [dartx.namedItem](...args) {
+      return this.namedItem.apply(this, args);
     }
   };
   dart.setSignature(html$.HtmlFormControlsCollection, {
@@ -59784,8 +59784,8 @@
     static _() {
       dart.throw(new core.UnsupportedError("Not supported"));
     }
-    [_item](index) {
-      return this.item(index);
+    [_item](...args) {
+      return this.item.apply(this, args);
     }
   };
   dart.setSignature(html$.HtmlOptionsCollection, {
@@ -60038,8 +60038,8 @@
       }
       return headers;
     }
-    [dartx.open](method, url, opts) {
-      return this.open(method, url, opts);
+    [dartx.open](...args) {
+      return this.open.apply(this, args);
     }
     static _() {
       dart.throw(new core.UnsupportedError("Not supported"));
@@ -60095,23 +60095,23 @@
     set [dartx.withCredentials](value) {
       this.withCredentials = value;
     }
-    [dartx.abort]() {
-      return this.abort();
+    [dartx.abort](...args) {
+      return this.abort.apply(this, args);
     }
-    [dartx.getAllResponseHeaders]() {
-      return this.getAllResponseHeaders();
+    [dartx.getAllResponseHeaders](...args) {
+      return this.getAllResponseHeaders.apply(this, args);
     }
-    [dartx.getResponseHeader](name) {
-      return this.getResponseHeader(name);
+    [dartx.getResponseHeader](...args) {
+      return this.getResponseHeader.apply(this, args);
     }
-    [dartx.overrideMimeType](mime) {
-      return this.overrideMimeType(mime);
+    [dartx.overrideMimeType](...args) {
+      return this.overrideMimeType.apply(this, args);
     }
-    [dartx.send](body_OR_data) {
-      return this.send(body_OR_data);
+    [dartx.send](...args) {
+      return this.send.apply(this, args);
     }
-    [dartx.setRequestHeader](name, value) {
-      return this.setRequestHeader(name, value);
+    [dartx.setRequestHeader](...args) {
+      return this.setRequestHeader.apply(this, args);
     }
     get [dartx.onReadyStateChange]() {
       return html$.HttpRequest.readyStateChangeEvent.forTarget(this);
@@ -60513,8 +60513,8 @@
     static _() {
       dart.throw(new core.UnsupportedError("Not supported"));
     }
-    [dartx.inspect](objectId, hints) {
-      return this.inspect(objectId, hints);
+    [dartx.inspect](...args) {
+      return this.inspect.apply(this, args);
     }
   };
   dart.setSignature(html$.InjectedScriptHost, {
@@ -60977,29 +60977,29 @@
     get [dartx.willValidate]() {
       return this.willValidate;
     }
-    [dartx.checkValidity]() {
-      return this.checkValidity();
+    [dartx.checkValidity](...args) {
+      return this.checkValidity.apply(this, args);
     }
-    [dartx.reportValidity]() {
-      return this.reportValidity();
+    [dartx.reportValidity](...args) {
+      return this.reportValidity.apply(this, args);
     }
-    [dartx.select]() {
-      return this.select();
+    [dartx.select](...args) {
+      return this.select.apply(this, args);
     }
-    [dartx.setCustomValidity](error) {
-      return this.setCustomValidity(error);
+    [dartx.setCustomValidity](...args) {
+      return this.setCustomValidity.apply(this, args);
     }
-    [dartx.setRangeText](replacement, opts) {
-      return this.setRangeText(replacement, opts);
+    [dartx.setRangeText](...args) {
+      return this.setRangeText.apply(this, args);
     }
-    [dartx.setSelectionRange](start, end, direction) {
-      return this.setSelectionRange(start, end, direction);
+    [dartx.setSelectionRange](...args) {
+      return this.setSelectionRange.apply(this, args);
     }
-    [dartx.stepDown](n) {
-      return this.stepDown(n);
+    [dartx.stepDown](...args) {
+      return this.stepDown.apply(this, args);
     }
-    [dartx.stepUp](n) {
-      return this.stepUp(n);
+    [dartx.stepUp](...args) {
+      return this.stepUp.apply(this, args);
     }
   };
   dart.defineNamedConstructor(html$.InputElement, 'created');
@@ -62294,8 +62294,8 @@
     get [dartx.shiftKey]() {
       return this.shiftKey;
     }
-    [dartx.getModifierState](keyArg) {
-      return this.getModifierState(keyArg);
+    [dartx.getModifierState](...args) {
+      return this.getModifierState.apply(this, args);
     }
   };
   dart.setSignature(html$.KeyboardEvent, {
@@ -62470,14 +62470,14 @@
     get [dartx.willValidate]() {
       return this.willValidate;
     }
-    [dartx.checkValidity]() {
-      return this.checkValidity();
+    [dartx.checkValidity](...args) {
+      return this.checkValidity.apply(this, args);
     }
-    [dartx.reportValidity]() {
-      return this.reportValidity();
+    [dartx.reportValidity](...args) {
+      return this.reportValidity.apply(this, args);
     }
-    [dartx.setCustomValidity](error) {
-      return this.setCustomValidity(error);
+    [dartx.setCustomValidity](...args) {
+      return this.setCustomValidity.apply(this, args);
     }
   };
   dart.defineNamedConstructor(html$.KeygenElement, 'created');
@@ -62802,14 +62802,14 @@
     set [dartx.search](value) {
       this.search = value;
     }
-    [dartx.assign](url) {
-      return this.assign(url);
+    [dartx.assign](...args) {
+      return this.assign.apply(this, args);
     }
-    [dartx.reload]() {
-      return this.reload();
+    [dartx.reload](...args) {
+      return this.reload.apply(this, args);
     }
-    [dartx.replace](url) {
-      return this.replace(url);
+    [dartx.replace](...args) {
+      return this.replace.apply(this, args);
     }
     get [dartx.origin]() {
       if ("origin" in this) {
@@ -62956,14 +62956,14 @@
     set [dartx.volume](value) {
       this.volume = value;
     }
-    [dartx.pause]() {
-      return this.pause();
+    [dartx.pause](...args) {
+      return this.pause.apply(this, args);
     }
-    [dartx.play]() {
-      return this.play();
+    [dartx.play](...args) {
+      return this.play.apply(this, args);
     }
-    [dartx.unpause]() {
-      return this.unpause();
+    [dartx.unpause](...args) {
+      return this.unpause.apply(this, args);
     }
   };
   dart.setSignature(html$.MediaController, {
@@ -63035,15 +63035,15 @@
     static _() {
       dart.throw(new core.UnsupportedError("Not supported"));
     }
-    [dartx.enumerateDevices]() {
-      return this.enumerateDevices();
+    [dartx.enumerateDevices](...args) {
+      return this.enumerateDevices.apply(this, args);
     }
     [dartx.getUserMedia](options) {
       let options_1 = html_common.convertDartToNative_Dictionary(options);
       return this[_getUserMedia_1](options_1);
     }
-    [_getUserMedia_1](options) {
-      return this.getUserMedia(options);
+    [_getUserMedia_1](...args) {
+      return this.getUserMedia.apply(this, args);
     }
   };
   dart.setSignature(html$.MediaDevices, {
@@ -63305,20 +63305,20 @@
     get [dartx.sessionId]() {
       return this.sessionId;
     }
-    [dartx.close]() {
-      return this.close();
+    [dartx.close](...args) {
+      return this.close.apply(this, args);
     }
-    [dartx.generateRequest](initDataType, initData) {
-      return this.generateRequest(initDataType, initData);
+    [dartx.generateRequest](...args) {
+      return this.generateRequest.apply(this, args);
     }
-    [dartx.load](sessionId) {
-      return this.load(sessionId);
+    [dartx.load](...args) {
+      return this.load.apply(this, args);
     }
-    [dartx.remove]() {
-      return this.remove();
+    [dartx.remove](...args) {
+      return this.remove.apply(this, args);
     }
-    [_update$](response) {
-      return this.update(response);
+    [_update$](...args) {
+      return this.update.apply(this, args);
     }
   };
   dart.setSignature(html$.MediaKeySession, {
@@ -63367,14 +63367,14 @@
     get [dartx.keySystem]() {
       return this.keySystem;
     }
-    [dartx.createMediaKeys]() {
-      return this.createMediaKeys();
+    [dartx.createMediaKeys](...args) {
+      return this.createMediaKeys.apply(this, args);
     }
     [dartx.getConfiguration]() {
       return html_common.convertNativeToDart_Dictionary(this[_getConfiguration_1]());
     }
-    [_getConfiguration_1]() {
-      return this.getConfiguration();
+    [_getConfiguration_1](...args) {
+      return this.getConfiguration.apply(this, args);
     }
   };
   dart.setSignature(html$.MediaKeySystemAccess, {
@@ -63395,11 +63395,11 @@
     static _() {
       dart.throw(new core.UnsupportedError("Not supported"));
     }
-    [_createSession](sessionType) {
-      return this.createSession(sessionType);
+    [_createSession](...args) {
+      return this.createSession.apply(this, args);
     }
-    [dartx.setServerCertificate](serverCertificate) {
-      return this.setServerCertificate(serverCertificate);
+    [dartx.setServerCertificate](...args) {
+      return this.setServerCertificate.apply(this, args);
     }
   };
   dart.setSignature(html$.MediaKeys, {
@@ -63430,14 +63430,14 @@
     set [dartx.mediaText](value) {
       this.mediaText = value;
     }
-    [dartx.appendMedium](medium) {
-      return this.appendMedium(medium);
+    [dartx.appendMedium](...args) {
+      return this.appendMedium.apply(this, args);
     }
-    [dartx.deleteMedium](medium) {
-      return this.deleteMedium(medium);
+    [dartx.deleteMedium](...args) {
+      return this.deleteMedium.apply(this, args);
     }
-    [dartx.item](index) {
-      return this.item(index);
+    [dartx.item](...args) {
+      return this.item.apply(this, args);
     }
   };
   dart.setSignature(html$.MediaList, {
@@ -63470,11 +63470,11 @@
     get [dartx.media]() {
       return this.media;
     }
-    [dartx.addListener](listener) {
-      return this.addListener(listener);
+    [dartx.addListener](...args) {
+      return this.addListener.apply(this, args);
     }
-    [dartx.removeListener](listener) {
-      return this.removeListener(listener);
+    [dartx.removeListener](...args) {
+      return this.removeListener.apply(this, args);
     }
     get [dartx.onChange]() {
       return html$.MediaQueryList.changeEvent.forTarget(this);
@@ -63558,11 +63558,11 @@
     static _create_1() {
       return new MediaSession();
     }
-    [dartx.activate]() {
-      return this.activate();
+    [dartx.activate](...args) {
+      return this.activate.apply(this, args);
     }
-    [dartx.deactivate]() {
-      return this.deactivate();
+    [dartx.deactivate](...args) {
+      return this.deactivate.apply(this, args);
     }
   };
   dart.setSignature(html$.MediaSession, {
@@ -63615,14 +63615,14 @@
     get [dartx.sourceBuffers]() {
       return this.sourceBuffers;
     }
-    [dartx.addSourceBuffer](type) {
-      return this.addSourceBuffer(type);
+    [dartx.addSourceBuffer](...args) {
+      return this.addSourceBuffer.apply(this, args);
     }
-    [dartx.endOfStream](error) {
-      return this.endOfStream(error);
+    [dartx.endOfStream](...args) {
+      return this.endOfStream.apply(this, args);
     }
-    [dartx.removeSourceBuffer](buffer) {
-      return this.removeSourceBuffer(buffer);
+    [dartx.removeSourceBuffer](...args) {
+      return this.removeSourceBuffer.apply(this, args);
     }
   };
   dart.setSignature(html$.MediaSource, {
@@ -63704,29 +63704,29 @@
     get [dartx.label]() {
       return this.label;
     }
-    [dartx.addTrack](track) {
-      return this.addTrack(track);
+    [dartx.addTrack](...args) {
+      return this.addTrack.apply(this, args);
     }
-    [dartx.clone]() {
-      return this.clone();
+    [dartx.clone](...args) {
+      return this.clone.apply(this, args);
     }
-    [dartx.getAudioTracks]() {
-      return this.getAudioTracks();
+    [dartx.getAudioTracks](...args) {
+      return this.getAudioTracks.apply(this, args);
     }
-    [dartx.getTrackById](trackId) {
-      return this.getTrackById(trackId);
+    [dartx.getTrackById](...args) {
+      return this.getTrackById.apply(this, args);
     }
-    [dartx.getTracks]() {
-      return this.getTracks();
+    [dartx.getTracks](...args) {
+      return this.getTracks.apply(this, args);
     }
-    [dartx.getVideoTracks]() {
-      return this.getVideoTracks();
+    [dartx.getVideoTracks](...args) {
+      return this.getVideoTracks.apply(this, args);
     }
-    [dartx.removeTrack](track) {
-      return this.removeTrack(track);
+    [dartx.removeTrack](...args) {
+      return this.removeTrack.apply(this, args);
     }
-    [dartx.stop]() {
-      return this.stop();
+    [dartx.stop](...args) {
+      return this.stop.apply(this, args);
     }
     get [dartx.onAddTrack]() {
       return html$.MediaStream.addTrackEvent.forTarget(this);
@@ -63872,8 +63872,8 @@
     get [dartx.readyState]() {
       return this.readyState;
     }
-    [dartx.clone]() {
-      return this.clone();
+    [dartx.clone](...args) {
+      return this.clone.apply(this, args);
     }
     static getSources() {
       let completer = CompleterOfListOfSourceInfo().new();
@@ -63882,8 +63882,8 @@
       }, ListOfSourceInfoTovoid()));
       return completer.future;
     }
-    [dartx.stop]() {
-      return this.stop();
+    [dartx.stop](...args) {
+      return this.stop.apply(this, args);
     }
     get [dartx.onEnded]() {
       return html$.MediaStreamTrack.endedEvent.forTarget(this);
@@ -64194,8 +64194,8 @@
     get [_get_source]() {
       return this.source;
     }
-    [_initMessageEvent](typeArg, canBubbleArg, cancelableArg, dataArg, originArg, lastEventIdArg, sourceArg, portsArg) {
-      return this.initMessageEvent(typeArg, canBubbleArg, cancelableArg, dataArg, originArg, lastEventIdArg, sourceArg, portsArg);
+    [_initMessageEvent](...args) {
+      return this.initMessageEvent.apply(this, args);
     }
   };
   dart.setSignature(html$.MessageEvent, {
@@ -64231,8 +64231,8 @@
     static _() {
       dart.throw(new core.UnsupportedError("Not supported"));
     }
-    [dartx.close]() {
-      return this.close();
+    [dartx.close](...args) {
+      return this.close.apply(this, args);
     }
     [dartx.postMessage](message, transfer) {
       if (transfer === void 0) transfer = null;
@@ -64245,14 +64245,14 @@
       this[_postMessage_2](message_1);
       return;
     }
-    [_postMessage_1](message, transfer) {
-      return this.postMessage(message, transfer);
+    [_postMessage_1](...args) {
+      return this.postMessage.apply(this, args);
     }
-    [_postMessage_2](message) {
-      return this.postMessage(message);
+    [_postMessage_2](...args) {
+      return this.postMessage.apply(this, args);
     }
-    [dartx.start]() {
-      return this.start();
+    [dartx.start](...args) {
+      return this.start.apply(this, args);
     }
     get [dartx.onMessage]() {
       return html$.MessagePort.messageEvent.forTarget(this);
@@ -64546,11 +64546,11 @@
     get [dartx.version]() {
       return this.version;
     }
-    [dartx.close]() {
-      return this.close();
+    [dartx.close](...args) {
+      return this.close.apply(this, args);
     }
-    [dartx.open]() {
-      return this.open();
+    [dartx.open](...args) {
+      return this.open.apply(this, args);
     }
   };
   dart.setSignature(html$.MidiPort, {
@@ -64660,8 +64660,8 @@
     static _() {
       dart.throw(new core.UnsupportedError("Not supported"));
     }
-    [dartx.send](data, timestamp) {
-      return this.send(data, timestamp);
+    [dartx.send](...args) {
+      return this.send.apply(this, args);
     }
   };
   dart.setSignature(html$.MidiOutput, {
@@ -64772,11 +64772,11 @@
     [dartx.elementAt](index) {
       return this[dartx._get](index);
     }
-    [dartx.item](index) {
-      return this.item(index);
+    [dartx.item](...args) {
+      return this.item.apply(this, args);
     }
-    [dartx.namedItem](name) {
-      return this.namedItem(name);
+    [dartx.namedItem](...args) {
+      return this.namedItem.apply(this, args);
     }
   };
   html$.MimeTypeArray[dart.implements] = () => [_js_helper.JavaScriptIndexingBehavior, ListOfMimeType()];
@@ -64983,8 +64983,8 @@
       this[_initMouseEvent_1](type, bubbles, cancelable, view, detail, screenX, screenY, clientX, clientY, ctrlKey, altKey, shiftKey, metaKey, button, relatedTarget_1);
       return;
     }
-    [_initMouseEvent_1](type, bubbles, cancelable, view, detail, screenX, screenY, clientX, clientY, ctrlKey, altKey, shiftKey, metaKey, button, relatedTarget) {
-      return this.initMouseEvent(type, bubbles, cancelable, view, detail, screenX, screenY, clientX, clientY, ctrlKey, altKey, shiftKey, metaKey, button, relatedTarget);
+    [_initMouseEvent_1](...args) {
+      return this.initMouseEvent.apply(this, args);
     }
     get [dartx.client]() {
       return new (PointOfnum())(this[_clientX], this[_clientY]);
@@ -65077,19 +65077,19 @@
     'observe'
   ]);
   html$.MutationObserver = class MutationObserver extends _interceptors.Interceptor {
-    [dartx.disconnect]() {
-      return this.disconnect();
+    [dartx.disconnect](...args) {
+      return this.disconnect.apply(this, args);
     }
     [_observe](target, options) {
       let options_1 = html_common.convertDartToNative_Dictionary(options);
       this[_observe_1](target, options_1);
       return;
     }
-    [_observe_1](target, options) {
-      return this.observe(target, options);
+    [_observe_1](...args) {
+      return this.observe.apply(this, args);
     }
-    [dartx.takeRecords]() {
-      return this.takeRecords();
+    [dartx.takeRecords](...args) {
+      return this.takeRecords.apply(this, args);
     }
     static get supported() {
       return !!(window.MutationObserver || window.WebKitMutationObserver);
@@ -65127,8 +65127,8 @@
     static _fixupList(list) {
       return list;
     }
-    [_call](target, options) {
-      return this.observe(target, options);
+    [_call](...args) {
+      return this.observe.apply(this, args);
     }
     static new(callback) {
       0;
@@ -65282,8 +65282,8 @@
         this.getUserMedia = this.getUserMedia || this.webkitGetUserMedia || this.mozGetUserMedia || this.msGetUserMedia;
       }
     }
-    [_getUserMedia](options, success, error) {
-      return this.getUserMedia(options, success, error);
+    [_getUserMedia](...args) {
+      return this.getUserMedia.apply(this, args);
     }
     static _() {
       dart.throw(new core.UnsupportedError("Not supported"));
@@ -65342,17 +65342,17 @@
     get [dartx.temporaryStorage]() {
       return this.webkitTemporaryStorage;
     }
-    [dartx.getBattery]() {
-      return this.getBattery();
+    [dartx.getBattery](...args) {
+      return this.getBattery.apply(this, args);
     }
-    [dartx.getGamepads]() {
-      return this.getGamepads();
+    [dartx.getGamepads](...args) {
+      return this.getGamepads.apply(this, args);
     }
-    [dartx.getVRDevices]() {
-      return this.getVRDevices();
+    [dartx.getVRDevices](...args) {
+      return this.getVRDevices.apply(this, args);
     }
-    [dartx.registerProtocolHandler](scheme, url, title) {
-      return this.registerProtocolHandler(scheme, url, title);
+    [dartx.registerProtocolHandler](...args) {
+      return this.registerProtocolHandler.apply(this, args);
     }
     [dartx.requestMidiAccess](options) {
       if (options === void 0) options = null;
@@ -65362,17 +65362,17 @@
       }
       return this[_requestMidiAccess_2]();
     }
-    [_requestMidiAccess_1](options) {
-      return this.requestMIDIAccess(options);
+    [_requestMidiAccess_1](...args) {
+      return this.requestMIDIAccess.apply(this, args);
     }
-    [_requestMidiAccess_2]() {
-      return this.requestMIDIAccess();
+    [_requestMidiAccess_2](...args) {
+      return this.requestMIDIAccess.apply(this, args);
     }
-    [dartx.requestMediaKeySystemAccess](keySystem, supportedConfigurations) {
-      return this.requestMediaKeySystemAccess(keySystem, supportedConfigurations);
+    [dartx.requestMediaKeySystemAccess](...args) {
+      return this.requestMediaKeySystemAccess.apply(this, args);
     }
-    [dartx.sendBeacon](url, data) {
-      return this.sendBeacon(url, data);
+    [dartx.sendBeacon](...args) {
+      return this.sendBeacon.apply(this, args);
     }
     get [dartx.hardwareConcurrency]() {
       return this.hardwareConcurrency;
@@ -65407,8 +65407,8 @@
     get [dartx.cookieEnabled]() {
       return this.cookieEnabled;
     }
-    [dartx.getStorageUpdates]() {
-      return this.getStorageUpdates();
+    [dartx.getStorageUpdates](...args) {
+      return this.getStorageUpdates.apply(this, args);
     }
   };
   html$.Navigator[dart.implements] = () => [html$.NavigatorStorageUtils, html$.NavigatorCpu, html$.NavigatorLanguage, html$.NavigatorOnLine, html$.NavigatorID];
@@ -65629,8 +65629,8 @@
     get [dartx.cookieEnabled]() {
       return this.cookieEnabled;
     }
-    [dartx.getStorageUpdates]() {
-      return this.getStorageUpdates();
+    [dartx.getStorageUpdates](...args) {
+      return this.getStorageUpdates.apply(this, args);
     }
   };
   dart.setSignature(html$.NavigatorStorageUtils, {
@@ -65937,14 +65937,14 @@
     get [dartx.whatToShow]() {
       return this.whatToShow;
     }
-    [dartx.detach]() {
-      return this.detach();
+    [dartx.detach](...args) {
+      return this.detach.apply(this, args);
     }
-    [dartx.nextNode]() {
-      return this.nextNode();
+    [dartx.nextNode](...args) {
+      return this.nextNode.apply(this, args);
     }
-    [dartx.previousNode]() {
-      return this.previousNode();
+    [dartx.previousNode](...args) {
+      return this.previousNode.apply(this, args);
     }
   };
   dart.setSignature(html$.NodeIterator, {
@@ -66017,8 +66017,8 @@
     [dartx.elementAt](index) {
       return this[dartx._get](index);
     }
-    [_item](index) {
-      return this.item(index);
+    [_item](...args) {
+      return this.item.apply(this, args);
     }
   };
   html$.NodeList[dart.implements] = () => [_js_helper.JavaScriptIndexingBehavior, ListOfNode()];
@@ -66070,8 +66070,8 @@
     static _() {
       dart.throw(new core.UnsupportedError("Not supported"));
     }
-    [dartx.getElementById](elementId) {
-      return this.getElementById(elementId);
+    [dartx.getElementById](...args) {
+      return this.getElementById.apply(this, args);
     }
   };
   dart.setSignature(html$.NonElementParentNode, {
@@ -66161,8 +66161,8 @@
     get [dartx.vibrate]() {
       return this.vibrate;
     }
-    [dartx.close]() {
-      return this.close();
+    [dartx.close](...args) {
+      return this.close.apply(this, args);
     }
     static requestPermission() {
       let completer = CompleterOfString().new();
@@ -66415,20 +66415,20 @@
     get [dartx.willValidate]() {
       return this.willValidate;
     }
-    [__getter__](index_OR_name) {
-      return this.__getter__(index_OR_name);
+    [__getter__](...args) {
+      return this.__getter__.apply(this, args);
     }
-    [__setter__](index_OR_name, value) {
-      return this.__setter__(index_OR_name, value);
+    [__setter__](...args) {
+      return this.__setter__.apply(this, args);
     }
-    [dartx.checkValidity]() {
-      return this.checkValidity();
+    [dartx.checkValidity](...args) {
+      return this.checkValidity.apply(this, args);
     }
-    [dartx.reportValidity]() {
-      return this.reportValidity();
+    [dartx.reportValidity](...args) {
+      return this.reportValidity.apply(this, args);
     }
-    [dartx.setCustomValidity](error) {
-      return this.setCustomValidity(error);
+    [dartx.setCustomValidity](...args) {
+      return this.setCustomValidity.apply(this, args);
     }
   };
   dart.defineNamedConstructor(html$.ObjectElement, 'created');
@@ -66702,14 +66702,14 @@
     get [dartx.willValidate]() {
       return this.willValidate;
     }
-    [dartx.checkValidity]() {
-      return this.checkValidity();
+    [dartx.checkValidity](...args) {
+      return this.checkValidity.apply(this, args);
     }
-    [dartx.reportValidity]() {
-      return this.reportValidity();
+    [dartx.reportValidity](...args) {
+      return this.reportValidity.apply(this, args);
     }
-    [dartx.setCustomValidity](error) {
-      return this.setCustomValidity(error);
+    [dartx.setCustomValidity](...args) {
+      return this.setCustomValidity.apply(this, args);
     }
   };
   dart.defineNamedConstructor(html$.OutputElement, 'created');
@@ -66943,35 +66943,35 @@
     static _create_3(path_OR_text) {
       return new Path2D(path_OR_text);
     }
-    [dartx.addPath](path, transform) {
-      return this.addPath(path, transform);
+    [dartx.addPath](...args) {
+      return this.addPath.apply(this, args);
     }
-    [dartx.arc](x, y, radius, startAngle, endAngle, anticlockwise) {
-      return this.arc(x, y, radius, startAngle, endAngle, anticlockwise);
+    [dartx.arc](...args) {
+      return this.arc.apply(this, args);
     }
-    [dartx.arcTo](x1, y1, x2, y2, radius) {
-      return this.arcTo(x1, y1, x2, y2, radius);
+    [dartx.arcTo](...args) {
+      return this.arcTo.apply(this, args);
     }
-    [dartx.bezierCurveTo](cp1x, cp1y, cp2x, cp2y, x, y) {
-      return this.bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y);
+    [dartx.bezierCurveTo](...args) {
+      return this.bezierCurveTo.apply(this, args);
     }
-    [dartx.closePath]() {
-      return this.closePath();
+    [dartx.closePath](...args) {
+      return this.closePath.apply(this, args);
     }
-    [dartx.ellipse](x, y, radiusX, radiusY, rotation, startAngle, endAngle, anticlockwise) {
-      return this.ellipse(x, y, radiusX, radiusY, rotation, startAngle, endAngle, anticlockwise);
+    [dartx.ellipse](...args) {
+      return this.ellipse.apply(this, args);
     }
-    [dartx.lineTo](x, y) {
-      return this.lineTo(x, y);
+    [dartx.lineTo](...args) {
+      return this.lineTo.apply(this, args);
     }
-    [dartx.moveTo](x, y) {
-      return this.moveTo(x, y);
+    [dartx.moveTo](...args) {
+      return this.moveTo.apply(this, args);
     }
-    [dartx.quadraticCurveTo](cpx, cpy, x, y) {
-      return this.quadraticCurveTo(cpx, cpy, x, y);
+    [dartx.quadraticCurveTo](...args) {
+      return this.quadraticCurveTo.apply(this, args);
     }
-    [dartx.rect](x, y, width, height) {
-      return this.rect(x, y, width, height);
+    [dartx.rect](...args) {
+      return this.rect.apply(this, args);
     }
   };
   html$.Path2D[dart.implements] = () => [html$._CanvasPathMethods];
@@ -67034,41 +67034,41 @@
     get [dartx.timing]() {
       return this.timing;
     }
-    [dartx.clearFrameTimings]() {
-      return this.clearFrameTimings();
+    [dartx.clearFrameTimings](...args) {
+      return this.clearFrameTimings.apply(this, args);
     }
-    [dartx.clearMarks](markName) {
-      return this.clearMarks(markName);
+    [dartx.clearMarks](...args) {
+      return this.clearMarks.apply(this, args);
     }
-    [dartx.clearMeasures](measureName) {
-      return this.clearMeasures(measureName);
+    [dartx.clearMeasures](...args) {
+      return this.clearMeasures.apply(this, args);
     }
-    [dartx.getEntries]() {
-      return this.getEntries();
+    [dartx.getEntries](...args) {
+      return this.getEntries.apply(this, args);
     }
-    [dartx.getEntriesByName](name, entryType) {
-      return this.getEntriesByName(name, entryType);
+    [dartx.getEntriesByName](...args) {
+      return this.getEntriesByName.apply(this, args);
     }
-    [dartx.getEntriesByType](entryType) {
-      return this.getEntriesByType(entryType);
+    [dartx.getEntriesByType](...args) {
+      return this.getEntriesByType.apply(this, args);
     }
-    [dartx.mark](markName) {
-      return this.mark(markName);
+    [dartx.mark](...args) {
+      return this.mark.apply(this, args);
     }
-    [dartx.measure](measureName, startMark, endMark) {
-      return this.measure(measureName, startMark, endMark);
+    [dartx.measure](...args) {
+      return this.measure.apply(this, args);
     }
-    [dartx.now]() {
-      return this.now();
+    [dartx.now](...args) {
+      return this.now.apply(this, args);
     }
-    [dartx.setFrameTimingBufferSize](maxSize) {
-      return this.setFrameTimingBufferSize(maxSize);
+    [dartx.setFrameTimingBufferSize](...args) {
+      return this.setFrameTimingBufferSize.apply(this, args);
     }
-    [dartx.clearResourceTimings]() {
-      return this.webkitClearResourceTimings();
+    [dartx.clearResourceTimings](...args) {
+      return this.webkitClearResourceTimings.apply(this, args);
     }
-    [dartx.setResourceTimingBufferSize](maxSize) {
-      return this.webkitSetResourceTimingBufferSize(maxSize);
+    [dartx.setResourceTimingBufferSize](...args) {
+      return this.webkitSetResourceTimingBufferSize.apply(this, args);
     }
     get [dartx.onResourceTimingBufferFull]() {
       return html$.Performance.resourceTimingBufferFullEvent.forTarget(this);
@@ -67461,14 +67461,14 @@
     get [dartx.minPossiblePeriod]() {
       return this.minPossiblePeriod;
     }
-    [dartx.getRegistration](tag) {
-      return this.getRegistration(tag);
+    [dartx.getRegistration](...args) {
+      return this.getRegistration.apply(this, args);
     }
-    [dartx.getRegistrations]() {
-      return this.getRegistrations();
+    [dartx.getRegistrations](...args) {
+      return this.getRegistrations.apply(this, args);
     }
-    [dartx.permissionState]() {
-      return this.permissionState();
+    [dartx.permissionState](...args) {
+      return this.permissionState.apply(this, args);
     }
     [dartx.register](options) {
       if (options === void 0) options = null;
@@ -67478,11 +67478,11 @@
       }
       return this[_register_2]();
     }
-    [_register_1](options) {
-      return this.register(options);
+    [_register_1](...args) {
+      return this.register.apply(this, args);
     }
-    [_register_2]() {
-      return this.register();
+    [_register_2](...args) {
+      return this.register.apply(this, args);
     }
   };
   dart.setSignature(html$.PeriodicSyncManager, {
@@ -67521,8 +67521,8 @@
     get [dartx.tag]() {
       return this.tag;
     }
-    [dartx.unregister]() {
-      return this.unregister();
+    [dartx.unregister](...args) {
+      return this.unregister.apply(this, args);
     }
   };
   dart.setSignature(html$.PeriodicSyncRegistration, {
@@ -67577,8 +67577,8 @@
     static _() {
       dart.throw(new core.UnsupportedError("Not supported"));
     }
-    [dartx.query](permission) {
-      return this.query(permission);
+    [dartx.query](...args) {
+      return this.query.apply(this, args);
     }
   };
   dart.setSignature(html$.Permissions, {
@@ -67626,11 +67626,11 @@
     get [dartx.name]() {
       return this.name;
     }
-    [dartx.item](index) {
-      return this.item(index);
+    [dartx.item](...args) {
+      return this.item.apply(this, args);
     }
-    [dartx.namedItem](name) {
-      return this.namedItem(name);
+    [dartx.namedItem](...args) {
+      return this.namedItem.apply(this, args);
     }
   };
   dart.setSignature(html$.Plugin, {
@@ -67702,14 +67702,14 @@
     [dartx.elementAt](index) {
       return this[dartx._get](index);
     }
-    [dartx.item](index) {
-      return this.item(index);
+    [dartx.item](...args) {
+      return this.item.apply(this, args);
     }
-    [dartx.namedItem](name) {
-      return this.namedItem(name);
+    [dartx.namedItem](...args) {
+      return this.namedItem.apply(this, args);
     }
-    [dartx.refresh](reload) {
-      return this.refresh(reload);
+    [dartx.refresh](...args) {
+      return this.refresh.apply(this, args);
     }
   };
   html$.PluginArray[dart.implements] = () => [_js_helper.JavaScriptIndexingBehavior, ListOfPlugin()];
@@ -67758,8 +67758,8 @@
     set [dartx.message](value) {
       this.message = value;
     }
-    [dartx.createdCallback]() {
-      return this.createdCallback();
+    [dartx.createdCallback](...args) {
+      return this.createdCallback.apply(this, args);
     }
   };
   dart.defineNamedConstructor(html$.PluginPlaceholderElement, 'created');
@@ -67934,14 +67934,14 @@
     static _() {
       dart.throw(new core.UnsupportedError("Not supported"));
     }
-    [dartx.getImmediateState]() {
-      return this.getImmediateState();
+    [dartx.getImmediateState](...args) {
+      return this.getImmediateState.apply(this, args);
     }
-    [dartx.getState]() {
-      return this.getState();
+    [dartx.getState](...args) {
+      return this.getState.apply(this, args);
     }
-    [dartx.resetSensor]() {
-      return this.resetSensor();
+    [dartx.resetSensor](...args) {
+      return this.resetSensor.apply(this, args);
     }
   };
   dart.setSignature(html$.PositionSensorVRDevice, {
@@ -67986,14 +67986,14 @@
     get [dartx.session]() {
       return this.session;
     }
-    [dartx.getAvailability](url) {
-      return this.getAvailability(url);
+    [dartx.getAvailability](...args) {
+      return this.getAvailability.apply(this, args);
     }
-    [dartx.joinSession](url, presentationId) {
-      return this.joinSession(url, presentationId);
+    [dartx.joinSession](...args) {
+      return this.joinSession.apply(this, args);
     }
-    [dartx.startSession](url) {
-      return this.startSession(url);
+    [dartx.startSession](...args) {
+      return this.startSession.apply(this, args);
     }
   };
   dart.setSignature(html$.Presentation, {
@@ -68057,11 +68057,11 @@
     get [dartx.state]() {
       return this.state;
     }
-    [dartx.close]() {
-      return this.close();
+    [dartx.close](...args) {
+      return this.close.apply(this, args);
     }
-    [dartx.send](data_OR_message) {
-      return this.send(data_OR_message);
+    [dartx.send](...args) {
+      return this.send.apply(this, args);
     }
     get [dartx.onMessage]() {
       return html$.PresentationSession.messageEvent.forTarget(this);
@@ -68314,8 +68314,8 @@
     static _() {
       dart.throw(new core.UnsupportedError("Not supported"));
     }
-    [dartx.getSubscription]() {
-      return this.getSubscription();
+    [dartx.getSubscription](...args) {
+      return this.getSubscription.apply(this, args);
     }
     [dartx.permissionState](options) {
       if (options === void 0) options = null;
@@ -68325,11 +68325,11 @@
       }
       return this[_permissionState_2]();
     }
-    [_permissionState_1](options) {
-      return this.permissionState(options);
+    [_permissionState_1](...args) {
+      return this.permissionState.apply(this, args);
     }
-    [_permissionState_2]() {
-      return this.permissionState();
+    [_permissionState_2](...args) {
+      return this.permissionState.apply(this, args);
     }
     [dartx.subscribe](options) {
       if (options === void 0) options = null;
@@ -68339,11 +68339,11 @@
       }
       return this[_subscribe_2]();
     }
-    [_subscribe_1](options) {
-      return this.subscribe(options);
+    [_subscribe_1](...args) {
+      return this.subscribe.apply(this, args);
     }
-    [_subscribe_2]() {
-      return this.subscribe();
+    [_subscribe_2](...args) {
+      return this.subscribe.apply(this, args);
     }
   };
   dart.setSignature(html$.PushManager, {
@@ -68375,17 +68375,17 @@
     static _create_1(message) {
       return new PushMessageData(message);
     }
-    [dartx.arrayBuffer]() {
-      return this.arrayBuffer();
+    [dartx.arrayBuffer](...args) {
+      return this.arrayBuffer.apply(this, args);
     }
-    [dartx.blob]() {
-      return this.blob();
+    [dartx.blob](...args) {
+      return this.blob.apply(this, args);
     }
-    [dartx.json]() {
-      return this.json();
+    [dartx.json](...args) {
+      return this.json.apply(this, args);
     }
-    [dartx.text]() {
-      return this.text();
+    [dartx.text](...args) {
+      return this.text.apply(this, args);
     }
   };
   dart.setSignature(html$.PushMessageData, {
@@ -68414,8 +68414,8 @@
     get [dartx.endpoint]() {
       return this.endpoint;
     }
-    [dartx.unsubscribe]() {
-      return this.unsubscribe();
+    [dartx.unsubscribe](...args) {
+      return this.unsubscribe.apply(this, args);
     }
   };
   dart.setSignature(html$.PushSubscription, {
@@ -68517,74 +68517,74 @@
     get [dartx.startOffset]() {
       return this.startOffset;
     }
-    [dartx.cloneContents]() {
-      return this.cloneContents();
+    [dartx.cloneContents](...args) {
+      return this.cloneContents.apply(this, args);
     }
-    [dartx.cloneRange]() {
-      return this.cloneRange();
+    [dartx.cloneRange](...args) {
+      return this.cloneRange.apply(this, args);
     }
-    [dartx.collapse](toStart) {
-      return this.collapse(toStart);
+    [dartx.collapse](...args) {
+      return this.collapse.apply(this, args);
     }
-    [dartx.compareBoundaryPoints](how, sourceRange) {
-      return this.compareBoundaryPoints(how, sourceRange);
+    [dartx.compareBoundaryPoints](...args) {
+      return this.compareBoundaryPoints.apply(this, args);
     }
-    [dartx.comparePoint](node, offset) {
-      return this.comparePoint(node, offset);
+    [dartx.comparePoint](...args) {
+      return this.comparePoint.apply(this, args);
     }
-    [dartx.createContextualFragment](fragment) {
-      return this.createContextualFragment(fragment);
+    [dartx.createContextualFragment](...args) {
+      return this.createContextualFragment.apply(this, args);
     }
-    [dartx.deleteContents]() {
-      return this.deleteContents();
+    [dartx.deleteContents](...args) {
+      return this.deleteContents.apply(this, args);
     }
-    [dartx.detach]() {
-      return this.detach();
+    [dartx.detach](...args) {
+      return this.detach.apply(this, args);
     }
-    [dartx.expand](unit) {
-      return this.expand(unit);
+    [dartx.expand](...args) {
+      return this.expand.apply(this, args);
     }
-    [dartx.extractContents]() {
-      return this.extractContents();
+    [dartx.extractContents](...args) {
+      return this.extractContents.apply(this, args);
     }
-    [dartx.getBoundingClientRect]() {
-      return this.getBoundingClientRect();
+    [dartx.getBoundingClientRect](...args) {
+      return this.getBoundingClientRect.apply(this, args);
     }
-    [dartx.getClientRects]() {
-      return this.getClientRects();
+    [dartx.getClientRects](...args) {
+      return this.getClientRects.apply(this, args);
     }
-    [dartx.insertNode](node) {
-      return this.insertNode(node);
+    [dartx.insertNode](...args) {
+      return this.insertNode.apply(this, args);
     }
-    [dartx.isPointInRange](node, offset) {
-      return this.isPointInRange(node, offset);
+    [dartx.isPointInRange](...args) {
+      return this.isPointInRange.apply(this, args);
     }
-    [dartx.selectNode](node) {
-      return this.selectNode(node);
+    [dartx.selectNode](...args) {
+      return this.selectNode.apply(this, args);
     }
-    [dartx.selectNodeContents](node) {
-      return this.selectNodeContents(node);
+    [dartx.selectNodeContents](...args) {
+      return this.selectNodeContents.apply(this, args);
     }
-    [dartx.setEnd](node, offset) {
-      return this.setEnd(node, offset);
+    [dartx.setEnd](...args) {
+      return this.setEnd.apply(this, args);
     }
-    [dartx.setEndAfter](node) {
-      return this.setEndAfter(node);
+    [dartx.setEndAfter](...args) {
+      return this.setEndAfter.apply(this, args);
     }
-    [dartx.setEndBefore](node) {
-      return this.setEndBefore(node);
+    [dartx.setEndBefore](...args) {
+      return this.setEndBefore.apply(this, args);
     }
-    [dartx.setStart](node, offset) {
-      return this.setStart(node, offset);
+    [dartx.setStart](...args) {
+      return this.setStart.apply(this, args);
     }
-    [dartx.setStartAfter](node) {
-      return this.setStartAfter(node);
+    [dartx.setStartAfter](...args) {
+      return this.setStartAfter.apply(this, args);
     }
-    [dartx.setStartBefore](node) {
-      return this.setStartBefore(node);
+    [dartx.setStartBefore](...args) {
+      return this.setStartBefore.apply(this, args);
     }
-    [dartx.surroundContents](newParent) {
-      return this.surroundContents(newParent);
+    [dartx.surroundContents](...args) {
+      return this.surroundContents.apply(this, args);
     }
     static get supportsCreateContextualFragment() {
       return "createContextualFragment" in window.Range.prototype;
@@ -68650,11 +68650,11 @@
     static _() {
       dart.throw(new core.UnsupportedError("Not supported"));
     }
-    [dartx.cancel](reason) {
-      return this.cancel(reason);
+    [dartx.cancel](...args) {
+      return this.cancel.apply(this, args);
     }
-    [dartx.getReader]() {
-      return this.getReader();
+    [dartx.getReader](...args) {
+      return this.getReader.apply(this, args);
     }
   };
   dart.setSignature(html$.ReadableByteStream, {
@@ -68678,14 +68678,14 @@
     get [dartx.closed]() {
       return this.closed;
     }
-    [dartx.cancel](reason) {
-      return this.cancel(reason);
+    [dartx.cancel](...args) {
+      return this.cancel.apply(this, args);
     }
-    [dartx.read]() {
-      return this.read();
+    [dartx.read](...args) {
+      return this.read.apply(this, args);
     }
-    [dartx.releaseLock]() {
-      return this.releaseLock();
+    [dartx.releaseLock](...args) {
+      return this.releaseLock.apply(this, args);
     }
   };
   dart.setSignature(html$.ReadableByteStreamReader, {
@@ -68706,11 +68706,11 @@
     static _() {
       dart.throw(new core.UnsupportedError("Not supported"));
     }
-    [dartx.cancel](reason) {
-      return this.cancel(reason);
+    [dartx.cancel](...args) {
+      return this.cancel.apply(this, args);
     }
-    [dartx.getReader]() {
-      return this.getReader();
+    [dartx.getReader](...args) {
+      return this.getReader.apply(this, args);
     }
   };
   dart.setSignature(html$.ReadableStream, {
@@ -68734,14 +68734,14 @@
     get [dartx.closed]() {
       return this.closed;
     }
-    [dartx.cancel](reason) {
-      return this.cancel(reason);
+    [dartx.cancel](...args) {
+      return this.cancel.apply(this, args);
     }
-    [dartx.read]() {
-      return this.read();
+    [dartx.read](...args) {
+      return this.read.apply(this, args);
     }
-    [dartx.releaseLock]() {
-      return this.releaseLock();
+    [dartx.releaseLock](...args) {
+      return this.releaseLock.apply(this, args);
     }
   };
   dart.setSignature(html$.ReadableStreamReader, {
@@ -68876,23 +68876,23 @@
     get [dartx.reliable]() {
       return this.reliable;
     }
-    [dartx.close]() {
-      return this.close();
+    [dartx.close](...args) {
+      return this.close.apply(this, args);
     }
-    [dartx.send](data) {
-      return this.send(data);
+    [dartx.send](...args) {
+      return this.send.apply(this, args);
     }
-    [dartx.sendBlob](data) {
-      return this.send(data);
+    [dartx.sendBlob](...args) {
+      return this.send.apply(this, args);
     }
-    [dartx.sendByteBuffer](data) {
-      return this.send(data);
+    [dartx.sendByteBuffer](...args) {
+      return this.send.apply(this, args);
     }
-    [dartx.sendString](data) {
-      return this.send(data);
+    [dartx.sendString](...args) {
+      return this.send.apply(this, args);
     }
-    [dartx.sendTypedData](data) {
-      return this.send(data);
+    [dartx.sendTypedData](...args) {
+      return this.send.apply(this, args);
     }
     get [dartx.onClose]() {
       return html$.RtcDataChannel.closeEvent.forTarget(this);
@@ -69003,8 +69003,8 @@
     get [dartx.track]() {
       return this.track;
     }
-    [dartx.insertDtmf](tones, duration, interToneGap) {
-      return this.insertDTMF(tones, duration, interToneGap);
+    [dartx.insertDtmf](...args) {
+      return this.insertDTMF.apply(this, args);
     }
     get [dartx.onToneChange]() {
       return html$.RtcDtmfSender.toneChangeEvent.forTarget(this);
@@ -69229,8 +69229,8 @@
     get [dartx.signalingState]() {
       return this.signalingState;
     }
-    [dartx.addIceCandidate](candidate, successCallback, failureCallback) {
-      return this.addIceCandidate(candidate, successCallback, failureCallback);
+    [dartx.addIceCandidate](...args) {
+      return this.addIceCandidate.apply(this, args);
     }
     [dartx.addStream](stream, mediaConstraints) {
       if (mediaConstraints === void 0) mediaConstraints = null;
@@ -69242,14 +69242,14 @@
       this[_addStream_2](stream);
       return;
     }
-    [_addStream_1](stream, mediaConstraints) {
-      return this.addStream(stream, mediaConstraints);
+    [_addStream_1](...args) {
+      return this.addStream.apply(this, args);
     }
-    [_addStream_2](stream) {
-      return this.addStream(stream);
+    [_addStream_2](...args) {
+      return this.addStream.apply(this, args);
     }
-    [dartx.close]() {
-      return this.close();
+    [dartx.close](...args) {
+      return this.close.apply(this, args);
     }
     [_createAnswer](successCallback, failureCallback, mediaConstraints) {
       if (failureCallback === void 0) failureCallback = null;
@@ -69262,14 +69262,14 @@
       this[_createAnswer_2](successCallback, failureCallback);
       return;
     }
-    [_createAnswer_1](successCallback, failureCallback, mediaConstraints) {
-      return this.createAnswer(successCallback, failureCallback, mediaConstraints);
+    [_createAnswer_1](...args) {
+      return this.createAnswer.apply(this, args);
     }
-    [_createAnswer_2](successCallback, failureCallback) {
-      return this.createAnswer(successCallback, failureCallback);
+    [_createAnswer_2](...args) {
+      return this.createAnswer.apply(this, args);
     }
-    [dartx.createDtmfSender](track) {
-      return this.createDTMFSender(track);
+    [dartx.createDtmfSender](...args) {
+      return this.createDTMFSender.apply(this, args);
     }
     [dartx.createDataChannel](label, options) {
       if (options === void 0) options = null;
@@ -69279,11 +69279,11 @@
       }
       return this[_createDataChannel_2](label);
     }
-    [_createDataChannel_1](label, options) {
-      return this.createDataChannel(label, options);
+    [_createDataChannel_1](...args) {
+      return this.createDataChannel.apply(this, args);
     }
-    [_createDataChannel_2](label) {
-      return this.createDataChannel(label);
+    [_createDataChannel_2](...args) {
+      return this.createDataChannel.apply(this, args);
     }
     [_createOffer](successCallback, failureCallback, rtcOfferOptions) {
       if (failureCallback === void 0) failureCallback = null;
@@ -69296,29 +69296,29 @@
       this[_createOffer_2](successCallback, failureCallback);
       return;
     }
-    [_createOffer_1](successCallback, failureCallback, rtcOfferOptions) {
-      return this.createOffer(successCallback, failureCallback, rtcOfferOptions);
+    [_createOffer_1](...args) {
+      return this.createOffer.apply(this, args);
     }
-    [_createOffer_2](successCallback, failureCallback) {
-      return this.createOffer(successCallback, failureCallback);
+    [_createOffer_2](...args) {
+      return this.createOffer.apply(this, args);
     }
-    [dartx.getLocalStreams]() {
-      return this.getLocalStreams();
+    [dartx.getLocalStreams](...args) {
+      return this.getLocalStreams.apply(this, args);
     }
-    [dartx.getRemoteStreams]() {
-      return this.getRemoteStreams();
+    [dartx.getRemoteStreams](...args) {
+      return this.getRemoteStreams.apply(this, args);
     }
-    [_getStats](successCallback, selector) {
-      return this.getStats(successCallback, selector);
+    [_getStats](...args) {
+      return this.getStats.apply(this, args);
     }
-    [dartx.getStreamById](streamId) {
-      return this.getStreamById(streamId);
+    [dartx.getStreamById](...args) {
+      return this.getStreamById.apply(this, args);
     }
-    [dartx.removeStream](stream) {
-      return this.removeStream(stream);
+    [dartx.removeStream](...args) {
+      return this.removeStream.apply(this, args);
     }
-    [_setLocalDescription](description, successCallback, failureCallback) {
-      return this.setLocalDescription(description, successCallback, failureCallback);
+    [_setLocalDescription](...args) {
+      return this.setLocalDescription.apply(this, args);
     }
     [dartx.setLocalDescription](description) {
       let completer = async.Completer.new();
@@ -69329,8 +69329,8 @@
       }, StringTovoid$()));
       return completer.future;
     }
-    [_setRemoteDescription](description, successCallback, failureCallback) {
-      return this.setRemoteDescription(description, successCallback, failureCallback);
+    [_setRemoteDescription](...args) {
+      return this.setRemoteDescription.apply(this, args);
     }
     [dartx.setRemoteDescription](description) {
       let completer = async.Completer.new();
@@ -69358,14 +69358,14 @@
       this[_updateIce_3]();
       return;
     }
-    [_updateIce_1](configuration, mediaConstraints) {
-      return this.updateIce(configuration, mediaConstraints);
+    [_updateIce_1](...args) {
+      return this.updateIce.apply(this, args);
     }
-    [_updateIce_2](configuration) {
-      return this.updateIce(configuration);
+    [_updateIce_2](...args) {
+      return this.updateIce.apply(this, args);
     }
-    [_updateIce_3]() {
-      return this.updateIce();
+    [_updateIce_3](...args) {
+      return this.updateIce.apply(this, args);
     }
     get [dartx.onAddStream]() {
       return html$.RtcPeerConnection.addStreamEvent.forTarget(this);
@@ -69540,11 +69540,11 @@
     get [dartx.type]() {
       return this.type;
     }
-    [dartx.names]() {
-      return this.names();
+    [dartx.names](...args) {
+      return this.names.apply(this, args);
     }
-    [dartx.stat](name) {
-      return this.stat(name);
+    [dartx.stat](...args) {
+      return this.stat.apply(this, args);
     }
   };
   dart.setSignature(html$.RtcStatsReport, {
@@ -69569,11 +69569,11 @@
     static _() {
       dart.throw(new core.UnsupportedError("Not supported"));
     }
-    [dartx.namedItem](name) {
-      return this.namedItem(name);
+    [dartx.namedItem](...args) {
+      return this.namedItem.apply(this, args);
     }
-    [dartx.result]() {
-      return this.result();
+    [dartx.result](...args) {
+      return this.result.apply(this, args);
     }
   };
   dart.setSignature(html$.RtcStatsResponse, {
@@ -69664,11 +69664,11 @@
     get [dartx.type]() {
       return this.type;
     }
-    [dartx.lock](orientation) {
-      return this.lock(orientation);
+    [dartx.lock](...args) {
+      return this.lock.apply(this, args);
     }
-    [dartx.unlock]() {
-      return this.unlock();
+    [dartx.unlock](...args) {
+      return this.unlock.apply(this, args);
     }
     get [dartx.onChange]() {
       return html$.ScreenOrientation.changeEvent.forTarget(this);
@@ -69898,8 +69898,8 @@
     get [dartx.velocityY]() {
       return this.velocityY;
     }
-    [dartx.consumeDelta](x, y) {
-      return this.consumeDelta(x, y);
+    [dartx.consumeDelta](...args) {
+      return this.consumeDelta.apply(this, args);
     }
   };
   dart.setSignature(html$.ScrollState, {
@@ -70141,26 +70141,26 @@
     get [dartx.willValidate]() {
       return this.willValidate;
     }
-    [__setter__](index, option) {
-      return this.__setter__(index, option);
+    [__setter__](...args) {
+      return this.__setter__.apply(this, args);
     }
-    [dartx.add](element, before) {
-      return this.add(element, before);
+    [dartx.add](...args) {
+      return this.add.apply(this, args);
     }
-    [dartx.checkValidity]() {
-      return this.checkValidity();
+    [dartx.checkValidity](...args) {
+      return this.checkValidity.apply(this, args);
     }
-    [dartx.item](index) {
-      return this.item(index);
+    [dartx.item](...args) {
+      return this.item.apply(this, args);
     }
-    [dartx.namedItem](name) {
-      return this.namedItem(name);
+    [dartx.namedItem](...args) {
+      return this.namedItem.apply(this, args);
     }
-    [dartx.reportValidity]() {
-      return this.reportValidity();
+    [dartx.reportValidity](...args) {
+      return this.reportValidity.apply(this, args);
     }
-    [dartx.setCustomValidity](error) {
-      return this.setCustomValidity(error);
+    [dartx.setCustomValidity](...args) {
+      return this.setCustomValidity.apply(this, args);
     }
     get [dartx.options]() {
       let options = ListOfOptionElement().from(this[dartx.querySelectorAll](html$.Element)('option'));
@@ -70278,47 +70278,47 @@
     get [dartx.type]() {
       return this.type;
     }
-    [dartx.addRange](range) {
-      return this.addRange(range);
+    [dartx.addRange](...args) {
+      return this.addRange.apply(this, args);
     }
-    [dartx.collapse](node, offset) {
-      return this.collapse(node, offset);
+    [dartx.collapse](...args) {
+      return this.collapse.apply(this, args);
     }
-    [dartx.collapseToEnd]() {
-      return this.collapseToEnd();
+    [dartx.collapseToEnd](...args) {
+      return this.collapseToEnd.apply(this, args);
     }
-    [dartx.collapseToStart]() {
-      return this.collapseToStart();
+    [dartx.collapseToStart](...args) {
+      return this.collapseToStart.apply(this, args);
     }
-    [dartx.containsNode](node, allowPartialContainment) {
-      return this.containsNode(node, allowPartialContainment);
+    [dartx.containsNode](...args) {
+      return this.containsNode.apply(this, args);
     }
-    [dartx.deleteFromDocument]() {
-      return this.deleteFromDocument();
+    [dartx.deleteFromDocument](...args) {
+      return this.deleteFromDocument.apply(this, args);
     }
-    [dartx.empty]() {
-      return this.empty();
+    [dartx.empty](...args) {
+      return this.empty.apply(this, args);
     }
-    [dartx.extend](node, offset) {
-      return this.extend(node, offset);
+    [dartx.extend](...args) {
+      return this.extend.apply(this, args);
     }
-    [dartx.getRangeAt](index) {
-      return this.getRangeAt(index);
+    [dartx.getRangeAt](...args) {
+      return this.getRangeAt.apply(this, args);
     }
-    [dartx.modify](alter, direction, granularity) {
-      return this.modify(alter, direction, granularity);
+    [dartx.modify](...args) {
+      return this.modify.apply(this, args);
     }
-    [dartx.removeAllRanges]() {
-      return this.removeAllRanges();
+    [dartx.removeAllRanges](...args) {
+      return this.removeAllRanges.apply(this, args);
     }
-    [dartx.selectAllChildren](node) {
-      return this.selectAllChildren(node);
+    [dartx.selectAllChildren](...args) {
+      return this.selectAllChildren.apply(this, args);
     }
-    [dartx.setBaseAndExtent](baseNode, baseOffset, extentNode, extentOffset) {
-      return this.setBaseAndExtent(baseNode, baseOffset, extentNode, extentOffset);
+    [dartx.setBaseAndExtent](...args) {
+      return this.setBaseAndExtent.apply(this, args);
     }
-    [dartx.setPosition](node, offset) {
-      return this.setPosition(node, offset);
+    [dartx.setPosition](...args) {
+      return this.setPosition.apply(this, args);
     }
   };
   dart.setSignature(html$.Selection, {
@@ -70374,8 +70374,8 @@
     get [dartx.targetUrl]() {
       return this.targetURL;
     }
-    [dartx.close]() {
-      return this.close();
+    [dartx.close](...args) {
+      return this.close.apply(this, args);
     }
     [dartx.postMessage](message, transfer) {
       if (transfer === void 0) transfer = null;
@@ -70388,11 +70388,11 @@
       this[_postMessage_2](message_1);
       return;
     }
-    [_postMessage_1](message, transfer) {
-      return this.postMessage(message, transfer);
+    [_postMessage_1](...args) {
+      return this.postMessage.apply(this, args);
     }
-    [_postMessage_2](message) {
-      return this.postMessage(message);
+    [_postMessage_2](...args) {
+      return this.postMessage.apply(this, args);
     }
   };
   dart.setSignature(html$.ServicePort, {
@@ -70430,18 +70430,18 @@
       }
       return this[_connect_2](url);
     }
-    [_connect_1](url, options) {
-      return this.connect(url, options);
+    [_connect_1](...args) {
+      return this.connect.apply(this, args);
     }
-    [_connect_2](url) {
-      return this.connect(url);
+    [_connect_2](...args) {
+      return this.connect.apply(this, args);
     }
     [dartx.match](options) {
       let options_1 = html_common.convertDartToNative_Dictionary(options);
       return this[_match_1](options_1);
     }
-    [_match_1](options) {
-      return this.match(options);
+    [_match_1](...args) {
+      return this.match.apply(this, args);
     }
     [dartx.matchAll](options) {
       if (options === void 0) options = null;
@@ -70451,11 +70451,11 @@
       }
       return this[_matchAll_2]();
     }
-    [_matchAll_1](options) {
-      return this.matchAll(options);
+    [_matchAll_1](...args) {
+      return this.matchAll.apply(this, args);
     }
-    [_matchAll_2]() {
-      return this.matchAll();
+    [_matchAll_2](...args) {
+      return this.matchAll.apply(this, args);
     }
     get [dartx.onMessage]() {
       return html$.ServicePortCollection.messageEvent.forTarget(this);
@@ -70511,8 +70511,8 @@
     get [dartx.targetUrl]() {
       return this.targetURL;
     }
-    [dartx.respondWith](response) {
-      return this.respondWith(response);
+    [dartx.respondWith](...args) {
+      return this.respondWith.apply(this, args);
     }
   };
   dart.setSignature(html$.ServicePortConnectEvent, {
@@ -70550,11 +70550,11 @@
     get [dartx.ready]() {
       return this.ready;
     }
-    [dartx.getRegistration](documentURL) {
-      return this.getRegistration(documentURL);
+    [dartx.getRegistration](...args) {
+      return this.getRegistration.apply(this, args);
     }
-    [dartx.getRegistrations]() {
-      return this.getRegistrations();
+    [dartx.getRegistrations](...args) {
+      return this.getRegistrations.apply(this, args);
     }
     [dartx.register](url, options) {
       if (options === void 0) options = null;
@@ -70564,11 +70564,11 @@
       }
       return this[_register_2](url);
     }
-    [_register_1](url, options) {
-      return this.register(url, options);
+    [_register_1](...args) {
+      return this.register.apply(this, args);
     }
-    [_register_2](url) {
-      return this.register(url);
+    [_register_2](...args) {
+      return this.register.apply(this, args);
     }
     get [dartx.onMessage]() {
       return html$.ServiceWorkerContainer.messageEvent.forTarget(this);
@@ -70616,8 +70616,8 @@
     get [dartx.registration]() {
       return this.registration;
     }
-    [dartx.skipWaiting]() {
-      return this.skipWaiting();
+    [dartx.skipWaiting](...args) {
+      return this.skipWaiting.apply(this, args);
     }
     get [dartx.onMessage]() {
       return html$.ServiceWorkerGlobalScope.messageEvent.forTarget(this);
@@ -70758,11 +70758,11 @@
       }
       return this[_getNotifications_2]();
     }
-    [_getNotifications_1](filter) {
-      return this.getNotifications(filter);
+    [_getNotifications_1](...args) {
+      return this.getNotifications.apply(this, args);
     }
-    [_getNotifications_2]() {
-      return this.getNotifications();
+    [_getNotifications_2](...args) {
+      return this.getNotifications.apply(this, args);
     }
     [dartx.showNotification](title, options) {
       if (options === void 0) options = null;
@@ -70772,17 +70772,17 @@
       }
       return this[_showNotification_2](title);
     }
-    [_showNotification_1](title, options) {
-      return this.showNotification(title, options);
+    [_showNotification_1](...args) {
+      return this.showNotification.apply(this, args);
     }
-    [_showNotification_2](title) {
-      return this.showNotification(title);
+    [_showNotification_2](...args) {
+      return this.showNotification.apply(this, args);
     }
-    [dartx.unregister]() {
-      return this.unregister();
+    [dartx.unregister](...args) {
+      return this.unregister.apply(this, args);
     }
-    [dartx.update]() {
-      return this.update();
+    [dartx.update](...args) {
+      return this.update.apply(this, args);
     }
   };
   dart.setSignature(html$.ServiceWorkerRegistration, {
@@ -70825,8 +70825,8 @@
     static get supported() {
       return html$.Element.isTagSupported('shadow');
     }
-    [dartx.getDistributedNodes]() {
-      return this.getDistributedNodes();
+    [dartx.getDistributedNodes](...args) {
+      return this.getDistributedNodes.apply(this, args);
     }
   };
   dart.defineNamedConstructor(html$.ShadowElement, 'created');
@@ -70881,17 +70881,17 @@
     get [dartx.styleSheets]() {
       return this.styleSheets;
     }
-    [dartx.clone](deep) {
-      return this.cloneNode(deep);
+    [dartx.clone](...args) {
+      return this.cloneNode.apply(this, args);
     }
-    [dartx.elementFromPoint](x, y) {
-      return this.elementFromPoint(x, y);
+    [dartx.elementFromPoint](...args) {
+      return this.elementFromPoint.apply(this, args);
     }
-    [dartx.elementsFromPoint](x, y) {
-      return this.elementsFromPoint(x, y);
+    [dartx.elementsFromPoint](...args) {
+      return this.elementsFromPoint.apply(this, args);
     }
-    [dartx.getSelection]() {
-      return this.getSelection();
+    [dartx.getSelection](...args) {
+      return this.getSelection.apply(this, args);
     }
     static get supported() {
       return !!(Element.prototype.createShadowRoot || Element.prototype.webkitCreateShadowRoot);
@@ -71101,20 +71101,20 @@
     get [dartx.updating]() {
       return this.updating;
     }
-    [dartx.abort]() {
-      return this.abort();
+    [dartx.abort](...args) {
+      return this.abort.apply(this, args);
     }
-    [dartx.appendBuffer](data) {
-      return this.appendBuffer(data);
+    [dartx.appendBuffer](...args) {
+      return this.appendBuffer.apply(this, args);
     }
-    [dartx.appendStream](stream, maxSize) {
-      return this.appendStream(stream, maxSize);
+    [dartx.appendStream](...args) {
+      return this.appendStream.apply(this, args);
     }
-    [dartx.appendTypedData](data) {
-      return this.appendBuffer(data);
+    [dartx.appendTypedData](...args) {
+      return this.appendBuffer.apply(this, args);
     }
-    [dartx.remove](start, end) {
-      return this.remove(start, end);
+    [dartx.remove](...args) {
+      return this.remove.apply(this, args);
     }
   };
   dart.setSignature(html$.SourceBuffer, {
@@ -71190,8 +71190,8 @@
     [dartx.elementAt](index) {
       return this[dartx._get](index);
     }
-    [dartx.item](index) {
-      return this.item(index);
+    [dartx.item](...args) {
+      return this.item.apply(this, args);
     }
   };
   html$.SourceBufferList[dart.implements] = () => [_js_helper.JavaScriptIndexingBehavior, ListOfSourceBuffer()];
@@ -71435,14 +71435,14 @@
     [dartx.elementAt](index) {
       return this[dartx._get](index);
     }
-    [dartx.addFromString](string, weight) {
-      return this.addFromString(string, weight);
+    [dartx.addFromString](...args) {
+      return this.addFromString.apply(this, args);
     }
-    [dartx.addFromUri](src, weight) {
-      return this.addFromUri(src, weight);
+    [dartx.addFromUri](...args) {
+      return this.addFromUri.apply(this, args);
     }
-    [dartx.item](index) {
-      return this.item(index);
+    [dartx.item](...args) {
+      return this.item.apply(this, args);
     }
   };
   html$.SpeechGrammarList[dart.implements] = () => [_js_helper.JavaScriptIndexingBehavior, ListOfSpeechGrammar()];
@@ -71542,14 +71542,14 @@
     set [dartx.serviceUri](value) {
       this.serviceURI = value;
     }
-    [dartx.abort]() {
-      return this.abort();
+    [dartx.abort](...args) {
+      return this.abort.apply(this, args);
     }
-    [dartx.start]() {
-      return this.start();
+    [dartx.start](...args) {
+      return this.start.apply(this, args);
     }
-    [dartx.stop]() {
-      return this.stop();
+    [dartx.stop](...args) {
+      return this.stop.apply(this, args);
     }
     get [dartx.onAudioEnd]() {
       return html$.SpeechRecognition.audioEndEvent.forTarget(this);
@@ -71809,8 +71809,8 @@
     get [dartx.length]() {
       return this.length;
     }
-    [dartx.item](index) {
-      return this.item(index);
+    [dartx.item](...args) {
+      return this.item.apply(this, args);
     }
   };
   dart.setSignature(html$.SpeechRecognitionResult, {
@@ -71845,20 +71845,20 @@
     get [dartx.speaking]() {
       return this.speaking;
     }
-    [dartx.cancel]() {
-      return this.cancel();
+    [dartx.cancel](...args) {
+      return this.cancel.apply(this, args);
     }
-    [dartx.getVoices]() {
-      return this.getVoices();
+    [dartx.getVoices](...args) {
+      return this.getVoices.apply(this, args);
     }
-    [dartx.pause]() {
-      return this.pause();
+    [dartx.pause](...args) {
+      return this.pause.apply(this, args);
     }
-    [dartx.resume]() {
-      return this.resume();
+    [dartx.resume](...args) {
+      return this.resume.apply(this, args);
     }
-    [dartx.speak](utterance) {
-      return this.speak(utterance);
+    [dartx.speak](...args) {
+      return this.speak.apply(this, args);
     }
   };
   dart.setSignature(html$.SpeechSynthesis, {
@@ -72123,8 +72123,8 @@
     static _() {
       dart.throw(new core.UnsupportedError("Not supported"));
     }
-    [dartx.add](name, port) {
-      return this.add(name, port);
+    [dartx.add](...args) {
+      return this.add.apply(this, args);
     }
     get [dartx.onMessage]() {
       return html$.StashedPortCollection.messageEvent.forTarget(this);
@@ -72227,29 +72227,29 @@
     get [_length$2]() {
       return this.length;
     }
-    [__delete__](index_OR_name) {
-      return this.__delete__(index_OR_name);
+    [__delete__](...args) {
+      return this.__delete__.apply(this, args);
     }
-    [__getter__](index_OR_name) {
-      return this.__getter__(index_OR_name);
+    [__getter__](...args) {
+      return this.__getter__.apply(this, args);
     }
-    [__setter__](index_OR_name, value) {
-      return this.__setter__(index_OR_name, value);
+    [__setter__](...args) {
+      return this.__setter__.apply(this, args);
     }
-    [_clear$1]() {
-      return this.clear();
+    [_clear$1](...args) {
+      return this.clear.apply(this, args);
     }
-    [_getItem](key) {
-      return this.getItem(key);
+    [_getItem](...args) {
+      return this.getItem.apply(this, args);
     }
-    [_key](index) {
-      return this.key(index);
+    [_key](...args) {
+      return this.key.apply(this, args);
     }
-    [_removeItem](key) {
-      return this.removeItem(key);
+    [_removeItem](...args) {
+      return this.removeItem.apply(this, args);
     }
-    [_setItem](key, data) {
-      return this.setItem(key, data);
+    [_setItem](...args) {
+      return this.setItem.apply(this, args);
     }
   };
   html$.Storage[dart.implements] = () => [MapOfString$String()];
@@ -72335,8 +72335,8 @@
     get [dartx.url]() {
       return this.url;
     }
-    [_initStorageEvent](typeArg, canBubbleArg, cancelableArg, keyArg, oldValueArg, newValueArg, urlArg, storageAreaArg) {
-      return this.initStorageEvent(typeArg, canBubbleArg, cancelableArg, keyArg, oldValueArg, newValueArg, urlArg, storageAreaArg);
+    [_initStorageEvent](...args) {
+      return this.initStorageEvent.apply(this, args);
     }
   };
   dart.setSignature(html$.StorageEvent, {
@@ -72394,11 +72394,11 @@
     get [dartx.supportedTypes]() {
       return this.supportedTypes;
     }
-    [dartx.queryInfo](type) {
-      return this.queryInfo(type);
+    [dartx.queryInfo](...args) {
+      return this.queryInfo.apply(this, args);
     }
-    [dartx.requestPersistentQuota](newQuota) {
-      return this.requestPersistentQuota(newQuota);
+    [dartx.requestPersistentQuota](...args) {
+      return this.requestPersistentQuota.apply(this, args);
     }
   };
   dart.setSignature(html$.StorageQuota, {
@@ -72481,8 +72481,8 @@
     get [dartx.type]() {
       return this.type;
     }
-    [dartx.matchMedium](mediaquery) {
-      return this.matchMedium(mediaquery);
+    [dartx.matchMedium](...args) {
+      return this.matchMedium.apply(this, args);
     }
   };
   dart.setSignature(html$.StyleMedia, {
@@ -72529,14 +72529,14 @@
     static _() {
       dart.throw(new core.UnsupportedError("Not supported"));
     }
-    [dartx.getRegistration](tag) {
-      return this.getRegistration(tag);
+    [dartx.getRegistration](...args) {
+      return this.getRegistration.apply(this, args);
     }
-    [dartx.getRegistrations]() {
-      return this.getRegistrations();
+    [dartx.getRegistrations](...args) {
+      return this.getRegistrations.apply(this, args);
     }
-    [dartx.permissionState]() {
-      return this.permissionState();
+    [dartx.permissionState](...args) {
+      return this.permissionState.apply(this, args);
     }
     [dartx.register](options) {
       if (options === void 0) options = null;
@@ -72546,11 +72546,11 @@
       }
       return this[_register_2]();
     }
-    [_register_1](options) {
-      return this.register(options);
+    [_register_1](...args) {
+      return this.register.apply(this, args);
     }
-    [_register_2]() {
-      return this.register();
+    [_register_2](...args) {
+      return this.register.apply(this, args);
     }
   };
   dart.setSignature(html$.SyncManager, {
@@ -72576,8 +72576,8 @@
     get [dartx.tag]() {
       return this.tag;
     }
-    [dartx.unregister]() {
-      return this.unregister();
+    [dartx.unregister](...args) {
+      return this.unregister.apply(this, args);
     }
   };
   dart.setSignature(html$.SyncRegistration, {
@@ -72755,8 +72755,8 @@
       this[dartx.children][dartx.add](tbody);
       return html$.TableSectionElement._check(tbody);
     }
-    [_nativeCreateTBody]() {
-      return this.createTBody();
+    [_nativeCreateTBody](...args) {
+      return this.createTBody.apply(this, args);
     }
     [dartx.createFragment](html, opts) {
       let validator = opts && 'validator' in opts ? opts.validator : null;
@@ -72808,29 +72808,29 @@
     set [dartx.tHead](value) {
       this.tHead = value;
     }
-    [_createCaption]() {
-      return this.createCaption();
+    [_createCaption](...args) {
+      return this.createCaption.apply(this, args);
     }
-    [_createTFoot]() {
-      return this.createTFoot();
+    [_createTFoot](...args) {
+      return this.createTFoot.apply(this, args);
     }
-    [_createTHead]() {
-      return this.createTHead();
+    [_createTHead](...args) {
+      return this.createTHead.apply(this, args);
     }
-    [dartx.deleteCaption]() {
-      return this.deleteCaption();
+    [dartx.deleteCaption](...args) {
+      return this.deleteCaption.apply(this, args);
     }
-    [dartx.deleteRow](index) {
-      return this.deleteRow(index);
+    [dartx.deleteRow](...args) {
+      return this.deleteRow.apply(this, args);
     }
-    [dartx.deleteTFoot]() {
-      return this.deleteTFoot();
+    [dartx.deleteTFoot](...args) {
+      return this.deleteTFoot.apply(this, args);
     }
-    [dartx.deleteTHead]() {
-      return this.deleteTHead();
+    [dartx.deleteTHead](...args) {
+      return this.deleteTHead.apply(this, args);
     }
-    [_insertRow](index) {
-      return this.insertRow(index);
+    [_insertRow](...args) {
+      return this.insertRow.apply(this, args);
     }
   };
   dart.defineNamedConstructor(html$.TableElement, 'created');
@@ -72925,11 +72925,11 @@
     get [dartx.sectionRowIndex]() {
       return this.sectionRowIndex;
     }
-    [dartx.deleteCell](index) {
-      return this.deleteCell(index);
+    [dartx.deleteCell](...args) {
+      return this.deleteCell.apply(this, args);
     }
-    [_insertCell](index) {
-      return this.insertCell(index);
+    [_insertCell](...args) {
+      return this.insertCell.apply(this, args);
     }
   };
   dart.defineNamedConstructor(html$.TableRowElement, 'created');
@@ -72991,11 +72991,11 @@
     get [_rows]() {
       return this.rows;
     }
-    [dartx.deleteRow](index) {
-      return this.deleteRow(index);
+    [dartx.deleteRow](...args) {
+      return this.deleteRow.apply(this, args);
     }
-    [_insertRow](index) {
-      return this.insertRow(index);
+    [_insertRow](...args) {
+      return this.insertRow.apply(this, args);
     }
   };
   dart.defineNamedConstructor(html$.TableSectionElement, 'created');
@@ -73259,23 +73259,23 @@
     set [dartx.wrap](value) {
       this.wrap = value;
     }
-    [dartx.checkValidity]() {
-      return this.checkValidity();
+    [dartx.checkValidity](...args) {
+      return this.checkValidity.apply(this, args);
     }
-    [dartx.reportValidity]() {
-      return this.reportValidity();
+    [dartx.reportValidity](...args) {
+      return this.reportValidity.apply(this, args);
     }
-    [dartx.select]() {
-      return this.select();
+    [dartx.select](...args) {
+      return this.select.apply(this, args);
     }
-    [dartx.setCustomValidity](error) {
-      return this.setCustomValidity(error);
+    [dartx.setCustomValidity](...args) {
+      return this.setCustomValidity.apply(this, args);
     }
-    [dartx.setRangeText](replacement, opts) {
-      return this.setRangeText(replacement, opts);
+    [dartx.setRangeText](...args) {
+      return this.setRangeText.apply(this, args);
     }
-    [dartx.setSelectionRange](start, end, direction) {
-      return this.setSelectionRange(start, end, direction);
+    [dartx.setSelectionRange](...args) {
+      return this.setSelectionRange.apply(this, args);
     }
   };
   dart.defineNamedConstructor(html$.TextAreaElement, 'created');
@@ -73346,8 +73346,8 @@
     get [dartx.data]() {
       return this.data;
     }
-    [_initTextEvent](typeArg, canBubbleArg, cancelableArg, viewArg, dataArg) {
-      return this.initTextEvent(typeArg, canBubbleArg, cancelableArg, viewArg, dataArg);
+    [_initTextEvent](...args) {
+      return this.initTextEvent.apply(this, args);
     }
   };
   dart.setSignature(html$.TextEvent, {
@@ -73478,17 +73478,17 @@
     get [dartx.regions]() {
       return this.regions;
     }
-    [dartx.addCue](cue) {
-      return this.addCue(cue);
+    [dartx.addCue](...args) {
+      return this.addCue.apply(this, args);
     }
-    [dartx.addRegion](region) {
-      return this.addRegion(region);
+    [dartx.addRegion](...args) {
+      return this.addRegion.apply(this, args);
     }
-    [dartx.removeCue](cue) {
-      return this.removeCue(cue);
+    [dartx.removeCue](...args) {
+      return this.removeCue.apply(this, args);
     }
-    [dartx.removeRegion](region) {
-      return this.removeRegion(region);
+    [dartx.removeRegion](...args) {
+      return this.removeRegion.apply(this, args);
     }
     get [dartx.onCueChange]() {
       return html$.TextTrack.cueChangeEvent.forTarget(this);
@@ -73649,11 +73649,11 @@
     [dartx.elementAt](index) {
       return this[dartx._get](index);
     }
-    [dartx.getCueById](id) {
-      return this.getCueById(id);
+    [dartx.getCueById](...args) {
+      return this.getCueById.apply(this, args);
     }
-    [dartx.item](index) {
-      return this.item(index);
+    [dartx.item](...args) {
+      return this.item.apply(this, args);
     }
   };
   html$.TextTrackCueList[dart.implements] = () => [ListOfTextTrackCue(), _js_helper.JavaScriptIndexingBehavior];
@@ -73731,11 +73731,11 @@
     [dartx.elementAt](index) {
       return this[dartx._get](index);
     }
-    [dartx.getTrackById](id) {
-      return this.getTrackById(id);
+    [dartx.getTrackById](...args) {
+      return this.getTrackById.apply(this, args);
     }
-    [dartx.item](index) {
-      return this.item(index);
+    [dartx.item](...args) {
+      return this.item.apply(this, args);
     }
     get [dartx.onAddTrack]() {
       return html$.TextTrackList.addTrackEvent.forTarget(this);
@@ -73789,11 +73789,11 @@
     get [dartx.length]() {
       return this.length;
     }
-    [dartx.end](index) {
-      return this.end(index);
+    [dartx.end](...args) {
+      return this.end.apply(this, args);
     }
-    [dartx.start](index) {
-      return this.start(index);
+    [dartx.start](...args) {
+      return this.start.apply(this, args);
     }
   };
   dart.setSignature(html$.TimeRanges, {
@@ -74016,8 +74016,8 @@
     get [dartx.touches]() {
       return this.touches;
     }
-    [_initTouchEvent](touches, targetTouches, changedTouches, type, view, unused1, unused2, unused3, unused4, ctrlKey, altKey, shiftKey, metaKey) {
-      return this.initTouchEvent(touches, targetTouches, changedTouches, type, view, unused1, unused2, unused3, unused4, ctrlKey, altKey, shiftKey, metaKey);
+    [_initTouchEvent](...args) {
+      return this.initTouchEvent.apply(this, args);
     }
     static get supported() {
       return html_common.Device.isEventTypeSupported('TouchEvent');
@@ -74100,8 +74100,8 @@
     [dartx.elementAt](index) {
       return this[dartx._get](index);
     }
-    [dartx.item](index) {
-      return this.item(index);
+    [dartx.item](...args) {
+      return this.item.apply(this, args);
     }
   };
   html$.TouchList[dart.implements] = () => [_js_helper.JavaScriptIndexingBehavior, ListOfTouch()];
@@ -74211,8 +74211,8 @@
     get [dartx.length]() {
       return this.length;
     }
-    [dartx.item](index) {
-      return this.item(index);
+    [dartx.item](...args) {
+      return this.item.apply(this, args);
     }
   };
   dart.setSignature(html$.TrackDefaultList, {
@@ -74448,26 +74448,26 @@
     get [dartx.whatToShow]() {
       return this.whatToShow;
     }
-    [dartx.firstChild]() {
-      return this.firstChild();
+    [dartx.firstChild](...args) {
+      return this.firstChild.apply(this, args);
     }
-    [dartx.lastChild]() {
-      return this.lastChild();
+    [dartx.lastChild](...args) {
+      return this.lastChild.apply(this, args);
     }
-    [dartx.nextNode]() {
-      return this.nextNode();
+    [dartx.nextNode](...args) {
+      return this.nextNode.apply(this, args);
     }
-    [dartx.nextSibling]() {
-      return this.nextSibling();
+    [dartx.nextSibling](...args) {
+      return this.nextSibling.apply(this, args);
     }
-    [dartx.parentNode]() {
-      return this.parentNode();
+    [dartx.parentNode](...args) {
+      return this.parentNode.apply(this, args);
     }
-    [dartx.previousNode]() {
-      return this.previousNode();
+    [dartx.previousNode](...args) {
+      return this.previousNode.apply(this, args);
     }
-    [dartx.previousSibling]() {
-      return this.previousSibling();
+    [dartx.previousSibling](...args) {
+      return this.previousSibling.apply(this, args);
     }
   };
   dart.setSignature(html$.TreeWalker, {
@@ -75177,14 +75177,14 @@
     set [dartx.width](value) {
       this.width = value;
     }
-    [dartx.getVideoPlaybackQuality]() {
-      return this.getVideoPlaybackQuality();
+    [dartx.getVideoPlaybackQuality](...args) {
+      return this.getVideoPlaybackQuality.apply(this, args);
     }
-    [dartx.enterFullscreen]() {
-      return this.webkitEnterFullscreen();
+    [dartx.enterFullscreen](...args) {
+      return this.webkitEnterFullscreen.apply(this, args);
     }
-    [dartx.exitFullscreen]() {
-      return this.webkitExitFullscreen();
+    [dartx.exitFullscreen](...args) {
+      return this.webkitExitFullscreen.apply(this, args);
     }
   };
   dart.defineNamedConstructor(html$.VideoElement, 'created');
@@ -75301,11 +75301,11 @@
     get [dartx.selectedIndex]() {
       return this.selectedIndex;
     }
-    [__getter__](index) {
-      return this.__getter__(index);
+    [__getter__](...args) {
+      return this.__getter__.apply(this, args);
     }
-    [dartx.getTrackById](id) {
-      return this.getTrackById(id);
+    [dartx.getTrackById](...args) {
+      return this.getTrackById.apply(this, args);
     }
     get [dartx.onChange]() {
       return html$.VideoTrackList.changeEvent.forTarget(this);
@@ -75400,8 +75400,8 @@
     set [dartx.vertical](value) {
       this.vertical = value;
     }
-    [dartx.getCueAsHtml]() {
-      return this.getCueAsHTML();
+    [dartx.getCueAsHtml](...args) {
+      return this.getCueAsHTML.apply(this, args);
     }
   };
   dart.setSignature(html$.VttCue, {
@@ -75529,11 +75529,11 @@
     get [dartx.length]() {
       return this.length;
     }
-    [dartx.getRegionById](id) {
-      return this.getRegionById(id);
+    [dartx.getRegionById](...args) {
+      return this.getRegionById.apply(this, args);
     }
-    [dartx.item](index) {
-      return this.item(index);
+    [dartx.item](...args) {
+      return this.item.apply(this, args);
     }
   };
   dart.setSignature(html$.VttRegionList, {
@@ -75604,23 +75604,23 @@
     get [dartx.url]() {
       return this.url;
     }
-    [dartx.close](code, reason) {
-      return this.close(code, reason);
+    [dartx.close](...args) {
+      return this.close.apply(this, args);
     }
-    [dartx.send](data) {
-      return this.send(data);
+    [dartx.send](...args) {
+      return this.send.apply(this, args);
     }
-    [dartx.sendBlob](data) {
-      return this.send(data);
+    [dartx.sendBlob](...args) {
+      return this.send.apply(this, args);
     }
-    [dartx.sendByteBuffer](data) {
-      return this.send(data);
+    [dartx.sendByteBuffer](...args) {
+      return this.send.apply(this, args);
     }
-    [dartx.sendString](data) {
-      return this.send(data);
+    [dartx.sendString](...args) {
+      return this.send.apply(this, args);
     }
-    [dartx.sendTypedData](data) {
-      return this.send(data);
+    [dartx.sendTypedData](...args) {
+      return this.send.apply(this, args);
     }
     get [dartx.onClose]() {
       return html$.WebSocket.closeEvent.forTarget(this);
@@ -75791,14 +75791,14 @@
     get [_hasInitMouseScrollEvent]() {
       return !!this.initMouseScrollEvent;
     }
-    [_initMouseScrollEvent](type, canBubble, cancelable, view, detail, screenX, screenY, clientX, clientY, ctrlKey, altKey, shiftKey, metaKey, button, relatedTarget, axis) {
-      return this.initMouseScrollEvent(type, canBubble, cancelable, view, detail, screenX, screenY, clientX, clientY, ctrlKey, altKey, shiftKey, metaKey, button, relatedTarget, axis);
+    [_initMouseScrollEvent](...args) {
+      return this.initMouseScrollEvent.apply(this, args);
     }
     get [_hasInitWheelEvent]() {
       return !!this.initWheelEvent;
     }
-    [_initWheelEvent](eventType, canBubble, cancelable, view, detail, screenX, screenY, clientX, clientY, button, relatedTarget, modifiersList, deltaX, deltaY, deltaZ, deltaMode) {
-      return this.initWheelEvent(eventType, canBubble, cancelable, view, detail, screenX, screenY, clientX, clientY, button, relatedTarget, modifiersList, deltaX, deltaY, deltaZ, deltaMode);
+    [_initWheelEvent](...args) {
+      return this.initWheelEvent.apply(this, args);
     }
   };
   dart.setSignature(html$.WheelEvent, {
@@ -76060,11 +76060,11 @@
       this[_ensureRequestAnimationFrame]();
       this[_cancelAnimationFrame](id);
     }
-    [_requestAnimationFrame](callback) {
-      return this.requestAnimationFrame(callback);
+    [_requestAnimationFrame](...args) {
+      return this.requestAnimationFrame.apply(this, args);
     }
-    [_cancelAnimationFrame](id) {
-      return this.cancelAnimationFrame(id);
+    [_cancelAnimationFrame](...args) {
+      return this.cancelAnimationFrame.apply(this, args);
     }
     [_ensureRequestAnimationFrame]() {
       if (!!(this.requestAnimationFrame && this.cancelAnimationFrame)) return;
@@ -76257,20 +76257,20 @@
       }
       dart.throw(new core.ArgumentError("Incorrect number or type of arguments"));
     }
-    [__getter___1](index) {
-      return this.__getter__(index);
+    [__getter___1](...args) {
+      return this.__getter__.apply(this, args);
     }
-    [__getter___2](name) {
-      return this.__getter__(name);
+    [__getter___2](...args) {
+      return this.__getter__.apply(this, args);
     }
-    [dartx.alert](message) {
-      return this.alert(message);
+    [dartx.alert](...args) {
+      return this.alert.apply(this, args);
     }
-    [dartx.close]() {
-      return this.close();
+    [dartx.close](...args) {
+      return this.close.apply(this, args);
     }
-    [dartx.confirm](message) {
-      return this.confirm(message);
+    [dartx.confirm](...args) {
+      return this.confirm.apply(this, args);
     }
     [dartx.fetch](input, init) {
       if (init === void 0) init = null;
@@ -76280,35 +76280,35 @@
       }
       return this[_fetch_2](input);
     }
-    [_fetch_1](input, init) {
-      return this.fetch(input, init);
+    [_fetch_1](...args) {
+      return this.fetch.apply(this, args);
     }
-    [_fetch_2](input) {
-      return this.fetch(input);
+    [_fetch_2](...args) {
+      return this.fetch.apply(this, args);
     }
-    [dartx.find](string, caseSensitive, backwards, wrap, wholeWord, searchInFrames, showDialog) {
-      return this.find(string, caseSensitive, backwards, wrap, wholeWord, searchInFrames, showDialog);
+    [dartx.find](...args) {
+      return this.find.apply(this, args);
     }
-    [_getComputedStyle](elt, pseudoElt) {
-      return this.getComputedStyle(elt, pseudoElt);
+    [_getComputedStyle](...args) {
+      return this.getComputedStyle.apply(this, args);
     }
-    [dartx.getMatchedCssRules](element, pseudoElement) {
-      return this.getMatchedCSSRules(element, pseudoElement);
+    [dartx.getMatchedCssRules](...args) {
+      return this.getMatchedCSSRules.apply(this, args);
     }
-    [dartx.getSelection]() {
-      return this.getSelection();
+    [dartx.getSelection](...args) {
+      return this.getSelection.apply(this, args);
     }
-    [dartx.matchMedia](query) {
-      return this.matchMedia(query);
+    [dartx.matchMedia](...args) {
+      return this.matchMedia.apply(this, args);
     }
-    [dartx.moveBy](x, y) {
-      return this.moveBy(x, y);
+    [dartx.moveBy](...args) {
+      return this.moveBy.apply(this, args);
     }
-    [_moveTo](x, y) {
-      return this.moveTo(x, y);
+    [_moveTo](...args) {
+      return this.moveTo.apply(this, args);
     }
-    [dartx.openDatabase](name, version, displayName, estimatedSize, creationCallback) {
-      return this.openDatabase(name, version, displayName, estimatedSize, creationCallback);
+    [dartx.openDatabase](...args) {
+      return this.openDatabase.apply(this, args);
     }
     [dartx.postMessage](message, targetOrigin, transfer) {
       if (transfer === void 0) transfer = null;
@@ -76321,20 +76321,20 @@
       this[_postMessage_2](message_1, targetOrigin);
       return;
     }
-    [_postMessage_1](message, targetOrigin, transfer) {
-      return this.postMessage(message, targetOrigin, transfer);
+    [_postMessage_1](...args) {
+      return this.postMessage.apply(this, args);
     }
-    [_postMessage_2](message, targetOrigin) {
-      return this.postMessage(message, targetOrigin);
+    [_postMessage_2](...args) {
+      return this.postMessage.apply(this, args);
     }
-    [dartx.print]() {
-      return this.print();
+    [dartx.print](...args) {
+      return this.print.apply(this, args);
     }
-    [dartx.resizeBy](x, y) {
-      return this.resizeBy(x, y);
+    [dartx.resizeBy](...args) {
+      return this.resizeBy.apply(this, args);
     }
-    [dartx.resizeTo](x, y) {
-      return this.resizeTo(x, y);
+    [dartx.resizeTo](...args) {
+      return this.resizeTo.apply(this, args);
     }
     [dartx.scroll](options_OR_x, y, scrollOptions) {
       if (options_OR_x === void 0) options_OR_x = null;
@@ -76364,20 +76364,20 @@
       }
       dart.throw(new core.ArgumentError("Incorrect number or type of arguments"));
     }
-    [_scroll_1]() {
-      return this.scroll();
+    [_scroll_1](...args) {
+      return this.scroll.apply(this, args);
     }
-    [_scroll_2](options) {
-      return this.scroll(options);
+    [_scroll_2](...args) {
+      return this.scroll.apply(this, args);
     }
-    [_scroll_3](x, y) {
-      return this.scroll(x, y);
+    [_scroll_3](...args) {
+      return this.scroll.apply(this, args);
     }
-    [_scroll_4](x, y) {
-      return this.scroll(x, y);
+    [_scroll_4](...args) {
+      return this.scroll.apply(this, args);
     }
-    [_scroll_5](x, y, scrollOptions) {
-      return this.scroll(x, y, scrollOptions);
+    [_scroll_5](...args) {
+      return this.scroll.apply(this, args);
     }
     [dartx.scrollBy](options_OR_x, y, scrollOptions) {
       if (options_OR_x === void 0) options_OR_x = null;
@@ -76407,20 +76407,20 @@
       }
       dart.throw(new core.ArgumentError("Incorrect number or type of arguments"));
     }
-    [_scrollBy_1]() {
-      return this.scrollBy();
+    [_scrollBy_1](...args) {
+      return this.scrollBy.apply(this, args);
     }
-    [_scrollBy_2](options) {
-      return this.scrollBy(options);
+    [_scrollBy_2](...args) {
+      return this.scrollBy.apply(this, args);
     }
-    [_scrollBy_3](x, y) {
-      return this.scrollBy(x, y);
+    [_scrollBy_3](...args) {
+      return this.scrollBy.apply(this, args);
     }
-    [_scrollBy_4](x, y) {
-      return this.scrollBy(x, y);
+    [_scrollBy_4](...args) {
+      return this.scrollBy.apply(this, args);
     }
-    [_scrollBy_5](x, y, scrollOptions) {
-      return this.scrollBy(x, y, scrollOptions);
+    [_scrollBy_5](...args) {
+      return this.scrollBy.apply(this, args);
     }
     [dartx.scrollTo](options_OR_x, y, scrollOptions) {
       if (options_OR_x === void 0) options_OR_x = null;
@@ -76450,26 +76450,26 @@
       }
       dart.throw(new core.ArgumentError("Incorrect number or type of arguments"));
     }
-    [_scrollTo_1]() {
-      return this.scrollTo();
+    [_scrollTo_1](...args) {
+      return this.scrollTo.apply(this, args);
     }
-    [_scrollTo_2](options) {
-      return this.scrollTo(options);
+    [_scrollTo_2](...args) {
+      return this.scrollTo.apply(this, args);
     }
-    [_scrollTo_3](x, y) {
-      return this.scrollTo(x, y);
+    [_scrollTo_3](...args) {
+      return this.scrollTo.apply(this, args);
     }
-    [_scrollTo_4](x, y) {
-      return this.scrollTo(x, y);
+    [_scrollTo_4](...args) {
+      return this.scrollTo.apply(this, args);
     }
-    [_scrollTo_5](x, y, scrollOptions) {
-      return this.scrollTo(x, y, scrollOptions);
+    [_scrollTo_5](...args) {
+      return this.scrollTo.apply(this, args);
     }
-    [dartx.stop]() {
-      return this.stop();
+    [dartx.stop](...args) {
+      return this.stop.apply(this, args);
     }
-    [__requestFileSystem](type, size, successCallback, errorCallback) {
-      return this.webkitRequestFileSystem(type, size, successCallback, errorCallback);
+    [__requestFileSystem](...args) {
+      return this.webkitRequestFileSystem.apply(this, args);
     }
     [_requestFileSystem](type, size) {
       let completer = CompleterOfFileSystem().new();
@@ -76480,8 +76480,8 @@
       }, FileErrorTovoid()));
       return completer.future;
     }
-    [_resolveLocalFileSystemUrl](url, successCallback, errorCallback) {
-      return this.webkitResolveLocalFileSystemURL(url, successCallback, errorCallback);
+    [_resolveLocalFileSystemUrl](...args) {
+      return this.webkitResolveLocalFileSystemURL.apply(this, args);
     }
     [dartx.resolveLocalFileSystemUrl](url) {
       let completer = CompleterOfEntry().new();
@@ -76492,29 +76492,29 @@
       }, FileErrorTovoid()));
       return completer.future;
     }
-    [dartx.atob](atob) {
-      return this.atob(atob);
+    [dartx.atob](...args) {
+      return this.atob.apply(this, args);
     }
-    [dartx.btoa](btoa) {
-      return this.btoa(btoa);
+    [dartx.btoa](...args) {
+      return this.btoa.apply(this, args);
     }
-    [_setInterval_String](handler, timeout, arguments$) {
-      return this.setInterval(handler, timeout, arguments$);
+    [_setInterval_String](...args) {
+      return this.setInterval.apply(this, args);
     }
-    [_setTimeout_String](handler, timeout, arguments$) {
-      return this.setTimeout(handler, timeout, arguments$);
+    [_setTimeout_String](...args) {
+      return this.setTimeout.apply(this, args);
     }
-    [_clearInterval](handle) {
-      return this.clearInterval(handle);
+    [_clearInterval](...args) {
+      return this.clearInterval.apply(this, args);
     }
-    [_clearTimeout](handle) {
-      return this.clearTimeout(handle);
+    [_clearTimeout](...args) {
+      return this.clearTimeout.apply(this, args);
     }
-    [_setInterval](handler, timeout) {
-      return this.setInterval(handler, timeout);
+    [_setInterval](...args) {
+      return this.setInterval.apply(this, args);
     }
-    [_setTimeout](handler, timeout) {
-      return this.setTimeout(handler, timeout);
+    [_setTimeout](...args) {
+      return this.setTimeout.apply(this, args);
     }
     get [dartx.onContentLoaded]() {
       return html$.Window.contentLoadedEvent.forTarget(this);
@@ -77228,8 +77228,8 @@
     get [dartx.visibilityState]() {
       return this.visibilityState;
     }
-    [dartx.focus]() {
-      return this.focus();
+    [dartx.focus](...args) {
+      return this.focus.apply(this, args);
     }
   };
   dart.setSignature(html$.WindowClient, {
@@ -77359,14 +77359,14 @@
       this[_postMessage_2](message_1);
       return;
     }
-    [_postMessage_1](message, transfer) {
-      return this.postMessage(message, transfer);
+    [_postMessage_1](...args) {
+      return this.postMessage.apply(this, args);
     }
-    [_postMessage_2](message) {
-      return this.postMessage(message);
+    [_postMessage_2](...args) {
+      return this.postMessage.apply(this, args);
     }
-    [dartx.terminate]() {
-      return this.terminate();
+    [dartx.terminate](...args) {
+      return this.terminate.apply(this, args);
     }
     get [dartx.onError]() {
       return html$.Worker.errorEvent.forTarget(this);
@@ -77437,35 +77437,35 @@
     get [dartx.memory]() {
       return this.memory;
     }
-    [dartx.clearMarks](markName) {
-      return this.clearMarks(markName);
+    [dartx.clearMarks](...args) {
+      return this.clearMarks.apply(this, args);
     }
-    [dartx.clearMeasures](measureName) {
-      return this.clearMeasures(measureName);
+    [dartx.clearMeasures](...args) {
+      return this.clearMeasures.apply(this, args);
     }
-    [dartx.getEntries]() {
-      return this.getEntries();
+    [dartx.getEntries](...args) {
+      return this.getEntries.apply(this, args);
     }
-    [dartx.getEntriesByName](name, entryType) {
-      return this.getEntriesByName(name, entryType);
+    [dartx.getEntriesByName](...args) {
+      return this.getEntriesByName.apply(this, args);
     }
-    [dartx.getEntriesByType](entryType) {
-      return this.getEntriesByType(entryType);
+    [dartx.getEntriesByType](...args) {
+      return this.getEntriesByType.apply(this, args);
     }
-    [dartx.mark](markName) {
-      return this.mark(markName);
+    [dartx.mark](...args) {
+      return this.mark.apply(this, args);
     }
-    [dartx.measure](measureName, startMark, endMark) {
-      return this.measure(measureName, startMark, endMark);
+    [dartx.measure](...args) {
+      return this.measure.apply(this, args);
     }
-    [dartx.now]() {
-      return this.now();
+    [dartx.now](...args) {
+      return this.now.apply(this, args);
     }
-    [dartx.clearResourceTimings]() {
-      return this.webkitClearResourceTimings();
+    [dartx.clearResourceTimings](...args) {
+      return this.webkitClearResourceTimings.apply(this, args);
     }
-    [dartx.setResourceTimingBufferSize](maxSize) {
-      return this.webkitSetResourceTimingBufferSize(maxSize);
+    [dartx.setResourceTimingBufferSize](...args) {
+      return this.webkitSetResourceTimingBufferSize.apply(this, args);
     }
   };
   dart.setSignature(html$.WorkerPerformance, {
@@ -77500,14 +77500,14 @@
     static _create_1() {
       return new XPathEvaluator();
     }
-    [dartx.createExpression](expression, resolver) {
-      return this.createExpression(expression, resolver);
+    [dartx.createExpression](...args) {
+      return this.createExpression.apply(this, args);
     }
-    [dartx.createNSResolver](nodeResolver) {
-      return this.createNSResolver(nodeResolver);
+    [dartx.createNSResolver](...args) {
+      return this.createNSResolver.apply(this, args);
     }
-    [dartx.evaluate](expression, contextNode, resolver, type, inResult) {
-      return this.evaluate(expression, contextNode, resolver, type, inResult);
+    [dartx.evaluate](...args) {
+      return this.evaluate.apply(this, args);
     }
   };
   dart.setSignature(html$.XPathEvaluator, {
@@ -77531,8 +77531,8 @@
     static _() {
       dart.throw(new core.UnsupportedError("Not supported"));
     }
-    [dartx.evaluate](contextNode, type, inResult) {
-      return this.evaluate(contextNode, type, inResult);
+    [dartx.evaluate](...args) {
+      return this.evaluate.apply(this, args);
     }
   };
   dart.setSignature(html$.XPathExpression, {
@@ -77547,8 +77547,8 @@
     static _() {
       dart.throw(new core.UnsupportedError("Not supported"));
     }
-    [dartx.lookupNamespaceUri](prefix) {
-      return this.lookupNamespaceURI(prefix);
+    [dartx.lookupNamespaceUri](...args) {
+      return this.lookupNamespaceURI.apply(this, args);
     }
   };
   dart.setSignature(html$.XPathNSResolver, {
@@ -77592,11 +77592,11 @@
     get [dartx.stringValue]() {
       return this.stringValue;
     }
-    [dartx.iterateNext]() {
-      return this.iterateNext();
+    [dartx.iterateNext](...args) {
+      return this.iterateNext.apply(this, args);
     }
-    [dartx.snapshotItem](index) {
-      return this.snapshotItem(index);
+    [dartx.snapshotItem](...args) {
+      return this.snapshotItem.apply(this, args);
     }
   };
   dart.setSignature(html$.XPathResult, {
@@ -77660,8 +77660,8 @@
     static _create_1() {
       return new XMLSerializer();
     }
-    [dartx.serializeToString](root) {
-      return this.serializeToString(root);
+    [dartx.serializeToString](...args) {
+      return this.serializeToString.apply(this, args);
     }
   };
   dart.setSignature(html$.XmlSerializer, {
@@ -77697,29 +77697,29 @@
     static get supported() {
       return !!window.XSLTProcessor;
     }
-    [dartx.clearParameters]() {
-      return this.clearParameters();
+    [dartx.clearParameters](...args) {
+      return this.clearParameters.apply(this, args);
     }
-    [dartx.getParameter](namespaceURI, localName) {
-      return this.getParameter(namespaceURI, localName);
+    [dartx.getParameter](...args) {
+      return this.getParameter.apply(this, args);
     }
-    [dartx.importStylesheet](style) {
-      return this.importStylesheet(style);
+    [dartx.importStylesheet](...args) {
+      return this.importStylesheet.apply(this, args);
     }
-    [dartx.removeParameter](namespaceURI, localName) {
-      return this.removeParameter(namespaceURI, localName);
+    [dartx.removeParameter](...args) {
+      return this.removeParameter.apply(this, args);
     }
-    [dartx.reset]() {
-      return this.reset();
+    [dartx.reset](...args) {
+      return this.reset.apply(this, args);
     }
-    [dartx.setParameter](namespaceURI, localName, value) {
-      return this.setParameter(namespaceURI, localName, value);
+    [dartx.setParameter](...args) {
+      return this.setParameter.apply(this, args);
     }
-    [dartx.transformToDocument](source) {
-      return this.transformToDocument(source);
+    [dartx.transformToDocument](...args) {
+      return this.transformToDocument.apply(this, args);
     }
-    [dartx.transformToFragment](source, output) {
-      return this.transformToFragment(source, output);
+    [dartx.transformToFragment](...args) {
+      return this.transformToFragment.apply(this, args);
     }
   };
   dart.setSignature(html$.XsltProcessor, {
@@ -77984,11 +77984,11 @@
     [dartx.elementAt](index) {
       return this[dartx._get](index);
     }
-    [__getter__](index) {
-      return this.__getter__(index);
+    [__getter__](...args) {
+      return this.__getter__.apply(this, args);
     }
-    [dartx.item](index) {
-      return this.item(index);
+    [dartx.item](...args) {
+      return this.item.apply(this, args);
     }
   };
   html$._ClientRectList[dart.implements] = () => [ListOfRectangleOfnum()];
@@ -78064,8 +78064,8 @@
     [dartx.elementAt](index) {
       return this[dartx._get](index);
     }
-    [dartx.item](index) {
-      return this.item(index);
+    [dartx.item](...args) {
+      return this.item.apply(this, args);
     }
   };
   html$._CssRuleList[dart.implements] = () => [_js_helper.JavaScriptIndexingBehavior, ListOfCssRule()];
@@ -78317,8 +78317,8 @@
     [dartx.elementAt](index) {
       return this[dartx._get](index);
     }
-    [dartx.item](index) {
-      return this.item(index);
+    [dartx.item](...args) {
+      return this.item.apply(this, args);
     }
   };
   html$._GamepadList[dart.implements] = () => [_js_helper.JavaScriptIndexingBehavior, ListOfGamepad()];
@@ -78343,8 +78343,8 @@
     static _() {
       dart.throw(new core.UnsupportedError("Not supported"));
     }
-    [_item](index) {
-      return this.item(index);
+    [_item](...args) {
+      return this.item.apply(this, args);
     }
   };
   dart.setSignature(html$._HTMLAllCollection, {
@@ -78508,26 +78508,26 @@
     [dartx.elementAt](index) {
       return this[dartx._get](index);
     }
-    [dartx.getNamedItem](name) {
-      return this.getNamedItem(name);
+    [dartx.getNamedItem](...args) {
+      return this.getNamedItem.apply(this, args);
     }
-    [dartx.getNamedItemNS](namespaceURI, localName) {
-      return this.getNamedItemNS(namespaceURI, localName);
+    [dartx.getNamedItemNS](...args) {
+      return this.getNamedItemNS.apply(this, args);
     }
-    [dartx.item](index) {
-      return this.item(index);
+    [dartx.item](...args) {
+      return this.item.apply(this, args);
     }
-    [dartx.removeNamedItem](name) {
-      return this.removeNamedItem(name);
+    [dartx.removeNamedItem](...args) {
+      return this.removeNamedItem.apply(this, args);
     }
-    [dartx.removeNamedItemNS](namespaceURI, localName) {
-      return this.removeNamedItemNS(namespaceURI, localName);
+    [dartx.removeNamedItemNS](...args) {
+      return this.removeNamedItemNS.apply(this, args);
     }
-    [dartx.setNamedItem](attr) {
-      return this.setNamedItem(attr);
+    [dartx.setNamedItem](...args) {
+      return this.setNamedItem.apply(this, args);
     }
-    [dartx.setNamedItemNS](attr) {
-      return this.setNamedItemNS(attr);
+    [dartx.setNamedItemNS](...args) {
+      return this.setNamedItemNS.apply(this, args);
     }
   };
   html$._NamedNodeMap[dart.implements] = () => [_js_helper.JavaScriptIndexingBehavior, ListOfNode()];
@@ -78609,8 +78609,8 @@
     get [dartx.url]() {
       return this.url;
     }
-    [dartx.clone]() {
-      return this.clone();
+    [dartx.clone](...args) {
+      return this.clone.apply(this, args);
     }
   };
   dart.setSignature(html$._Request, {
@@ -78736,8 +78736,8 @@
     [dartx.elementAt](index) {
       return this[dartx._get](index);
     }
-    [dartx.item](index) {
-      return this.item(index);
+    [dartx.item](...args) {
+      return this.item.apply(this, args);
     }
   };
   html$._SpeechRecognitionResultList[dart.implements] = () => [_js_helper.JavaScriptIndexingBehavior, ListOfSpeechRecognitionResult()];
@@ -78811,11 +78811,11 @@
     [dartx.elementAt](index) {
       return this[dartx._get](index);
     }
-    [__getter__](name) {
-      return this.__getter__(name);
+    [__getter__](...args) {
+      return this.__getter__.apply(this, args);
     }
-    [dartx.item](index) {
-      return this.item(index);
+    [dartx.item](...args) {
+      return this.item.apply(this, args);
     }
   };
   html$._StyleSheetList[dart.implements] = () => [_js_helper.JavaScriptIndexingBehavior, ListOfStyleSheet()];
@@ -84007,11 +84007,11 @@
     get [dartx.viewportElement]() {
       return this.viewportElement;
     }
-    [dartx.blur]() {
-      return this.blur();
+    [dartx.blur](...args) {
+      return this.blur.apply(this, args);
     }
-    [dartx.focus]() {
-      return this.focus();
+    [dartx.focus](...args) {
+      return this.focus.apply(this, args);
     }
     get [dartx.onAbort]() {
       return svg$.SvgElement.abortEvent.forElement(this);
@@ -84440,17 +84440,17 @@
     get [dartx.transform]() {
       return this.transform;
     }
-    [dartx.getBBox]() {
-      return this.getBBox();
+    [dartx.getBBox](...args) {
+      return this.getBBox.apply(this, args);
     }
-    [dartx.getCtm]() {
-      return this.getCTM();
+    [dartx.getCtm](...args) {
+      return this.getCTM.apply(this, args);
     }
-    [dartx.getScreenCtm]() {
-      return this.getScreenCTM();
+    [dartx.getScreenCtm](...args) {
+      return this.getScreenCTM.apply(this, args);
     }
-    [dartx.getTransformToElement](element) {
-      return this.getTransformToElement(element);
+    [dartx.getTransformToElement](...args) {
+      return this.getTransformToElement.apply(this, args);
     }
     get [dartx.requiredExtensions]() {
       return this.requiredExtensions;
@@ -84461,8 +84461,8 @@
     get [dartx.systemLanguage]() {
       return this.systemLanguage;
     }
-    [dartx.hasExtension](extension) {
-      return this.hasExtension(extension);
+    [dartx.hasExtension](...args) {
+      return this.hasExtension.apply(this, args);
     }
   };
   dart.defineNamedConstructor(svg$.GraphicsElement, 'created');
@@ -84559,11 +84559,11 @@
     set [dartx.valueInSpecifiedUnits](value) {
       this.valueInSpecifiedUnits = value;
     }
-    [dartx.convertToSpecifiedUnits](unitType) {
-      return this.convertToSpecifiedUnits(unitType);
+    [dartx.convertToSpecifiedUnits](...args) {
+      return this.convertToSpecifiedUnits.apply(this, args);
     }
-    [dartx.newValueSpecifiedUnits](unitType, valueInSpecifiedUnits) {
-      return this.newValueSpecifiedUnits(unitType, valueInSpecifiedUnits);
+    [dartx.newValueSpecifiedUnits](...args) {
+      return this.newValueSpecifiedUnits.apply(this, args);
     }
   };
   dart.setSignature(svg$.Angle, {
@@ -84623,26 +84623,26 @@
     get [dartx.targetElement]() {
       return this.targetElement;
     }
-    [dartx.beginElement]() {
-      return this.beginElement();
+    [dartx.beginElement](...args) {
+      return this.beginElement.apply(this, args);
     }
-    [dartx.beginElementAt](offset) {
-      return this.beginElementAt(offset);
+    [dartx.beginElementAt](...args) {
+      return this.beginElementAt.apply(this, args);
     }
-    [dartx.endElement]() {
-      return this.endElement();
+    [dartx.endElement](...args) {
+      return this.endElement.apply(this, args);
     }
-    [dartx.endElementAt](offset) {
-      return this.endElementAt(offset);
+    [dartx.endElementAt](...args) {
+      return this.endElementAt.apply(this, args);
     }
-    [dartx.getCurrentTime]() {
-      return this.getCurrentTime();
+    [dartx.getCurrentTime](...args) {
+      return this.getCurrentTime.apply(this, args);
     }
-    [dartx.getSimpleDuration]() {
-      return this.getSimpleDuration();
+    [dartx.getSimpleDuration](...args) {
+      return this.getSimpleDuration.apply(this, args);
     }
-    [dartx.getStartTime]() {
-      return this.getStartTime();
+    [dartx.getStartTime](...args) {
+      return this.getStartTime.apply(this, args);
     }
     get [dartx.requiredExtensions]() {
       return this.requiredExtensions;
@@ -84653,8 +84653,8 @@
     get [dartx.systemLanguage]() {
       return this.systemLanguage;
     }
-    [dartx.hasExtension](extension) {
-      return this.hasExtension(extension);
+    [dartx.hasExtension](...args) {
+      return this.hasExtension.apply(this, args);
     }
   };
   dart.defineNamedConstructor(svg$.AnimationElement, 'created');
@@ -85057,11 +85057,11 @@
     created() {
       super.created();
     }
-    [dartx.isPointInFill](point) {
-      return this.isPointInFill(point);
+    [dartx.isPointInFill](...args) {
+      return this.isPointInFill.apply(this, args);
     }
-    [dartx.isPointInStroke](point) {
-      return this.isPointInStroke(point);
+    [dartx.isPointInStroke](...args) {
+      return this.isPointInStroke.apply(this, args);
     }
   };
   dart.defineNamedConstructor(svg$.GeometryElement, 'created');
@@ -86187,8 +86187,8 @@
     get [dartx.stdDeviationY]() {
       return this.stdDeviationY;
     }
-    [dartx.setStdDeviation](stdDeviationX, stdDeviationY) {
-      return this.setStdDeviation(stdDeviationX, stdDeviationY);
+    [dartx.setStdDeviation](...args) {
+      return this.setStdDeviation.apply(this, args);
     }
     get [dartx.height]() {
       return this.height;
@@ -87273,11 +87273,11 @@
     set [dartx.valueInSpecifiedUnits](value) {
       this.valueInSpecifiedUnits = value;
     }
-    [dartx.convertToSpecifiedUnits](unitType) {
-      return this.convertToSpecifiedUnits(unitType);
+    [dartx.convertToSpecifiedUnits](...args) {
+      return this.convertToSpecifiedUnits.apply(this, args);
     }
-    [dartx.newValueSpecifiedUnits](unitType, valueInSpecifiedUnits) {
-      return this.newValueSpecifiedUnits(unitType, valueInSpecifiedUnits);
+    [dartx.newValueSpecifiedUnits](...args) {
+      return this.newValueSpecifiedUnits.apply(this, args);
     }
   };
   dart.setSignature(svg$.Length, {
@@ -87382,29 +87382,29 @@
     [dartx.elementAt](index) {
       return this[dartx._get](index);
     }
-    [__setter__$](index, newItem) {
-      return this.__setter__(index, newItem);
+    [__setter__$](...args) {
+      return this.__setter__.apply(this, args);
     }
-    [dartx.appendItem](newItem) {
-      return this.appendItem(newItem);
+    [dartx.appendItem](...args) {
+      return this.appendItem.apply(this, args);
     }
-    [dartx.clear]() {
-      return this.clear();
+    [dartx.clear](...args) {
+      return this.clear.apply(this, args);
     }
-    [dartx.getItem](index) {
-      return this.getItem(index);
+    [dartx.getItem](...args) {
+      return this.getItem.apply(this, args);
     }
-    [dartx.initialize](newItem) {
-      return this.initialize(newItem);
+    [dartx.initialize](...args) {
+      return this.initialize.apply(this, args);
     }
-    [dartx.insertItemBefore](newItem, index) {
-      return this.insertItemBefore(newItem, index);
+    [dartx.insertItemBefore](...args) {
+      return this.insertItemBefore.apply(this, args);
     }
-    [dartx.removeItem](index) {
-      return this.removeItem(index);
+    [dartx.removeItem](...args) {
+      return this.removeItem.apply(this, args);
     }
-    [dartx.replaceItem](newItem, index) {
-      return this.replaceItem(newItem, index);
+    [dartx.replaceItem](...args) {
+      return this.replaceItem.apply(this, args);
     }
   };
   svg$.LengthList[dart.implements] = () => [ListOfLength()];
@@ -87636,11 +87636,11 @@
     get [dartx.refY]() {
       return this.refY;
     }
-    [dartx.setOrientToAngle](angle) {
-      return this.setOrientToAngle(angle);
+    [dartx.setOrientToAngle](...args) {
+      return this.setOrientToAngle.apply(this, args);
     }
-    [dartx.setOrientToAuto]() {
-      return this.setOrientToAuto();
+    [dartx.setOrientToAuto](...args) {
+      return this.setOrientToAuto.apply(this, args);
     }
     get [dartx.preserveAspectRatio]() {
       return this.preserveAspectRatio;
@@ -87746,8 +87746,8 @@
     get [dartx.systemLanguage]() {
       return this.systemLanguage;
     }
-    [dartx.hasExtension](extension) {
-      return this.hasExtension(extension);
+    [dartx.hasExtension](...args) {
+      return this.hasExtension.apply(this, args);
     }
   };
   dart.defineNamedConstructor(svg$.MaskElement, 'created');
@@ -87831,38 +87831,38 @@
     set [dartx.f](value) {
       this.f = value;
     }
-    [dartx.flipX]() {
-      return this.flipX();
+    [dartx.flipX](...args) {
+      return this.flipX.apply(this, args);
     }
-    [dartx.flipY]() {
-      return this.flipY();
+    [dartx.flipY](...args) {
+      return this.flipY.apply(this, args);
     }
-    [dartx.inverse]() {
-      return this.inverse();
+    [dartx.inverse](...args) {
+      return this.inverse.apply(this, args);
     }
-    [dartx.multiply](secondMatrix) {
-      return this.multiply(secondMatrix);
+    [dartx.multiply](...args) {
+      return this.multiply.apply(this, args);
     }
-    [dartx.rotate](angle) {
-      return this.rotate(angle);
+    [dartx.rotate](...args) {
+      return this.rotate.apply(this, args);
     }
-    [dartx.rotateFromVector](x, y) {
-      return this.rotateFromVector(x, y);
+    [dartx.rotateFromVector](...args) {
+      return this.rotateFromVector.apply(this, args);
     }
-    [dartx.scale](scaleFactor) {
-      return this.scale(scaleFactor);
+    [dartx.scale](...args) {
+      return this.scale.apply(this, args);
     }
-    [dartx.scaleNonUniform](scaleFactorX, scaleFactorY) {
-      return this.scaleNonUniform(scaleFactorX, scaleFactorY);
+    [dartx.scaleNonUniform](...args) {
+      return this.scaleNonUniform.apply(this, args);
     }
-    [dartx.skewX](angle) {
-      return this.skewX(angle);
+    [dartx.skewX](...args) {
+      return this.skewX.apply(this, args);
     }
-    [dartx.skewY](angle) {
-      return this.skewY(angle);
+    [dartx.skewY](...args) {
+      return this.skewY.apply(this, args);
     }
-    [dartx.translate](x, y) {
-      return this.translate(x, y);
+    [dartx.translate](...args) {
+      return this.translate.apply(this, args);
     }
   };
   dart.setSignature(svg$.Matrix, {
@@ -87988,29 +87988,29 @@
     [dartx.elementAt](index) {
       return this[dartx._get](index);
     }
-    [__setter__$](index, newItem) {
-      return this.__setter__(index, newItem);
+    [__setter__$](...args) {
+      return this.__setter__.apply(this, args);
     }
-    [dartx.appendItem](newItem) {
-      return this.appendItem(newItem);
+    [dartx.appendItem](...args) {
+      return this.appendItem.apply(this, args);
     }
-    [dartx.clear]() {
-      return this.clear();
+    [dartx.clear](...args) {
+      return this.clear.apply(this, args);
     }
-    [dartx.getItem](index) {
-      return this.getItem(index);
+    [dartx.getItem](...args) {
+      return this.getItem.apply(this, args);
     }
-    [dartx.initialize](newItem) {
-      return this.initialize(newItem);
+    [dartx.initialize](...args) {
+      return this.initialize.apply(this, args);
     }
-    [dartx.insertItemBefore](newItem, index) {
-      return this.insertItemBefore(newItem, index);
+    [dartx.insertItemBefore](...args) {
+      return this.insertItemBefore.apply(this, args);
     }
-    [dartx.removeItem](index) {
-      return this.removeItem(index);
+    [dartx.removeItem](...args) {
+      return this.removeItem.apply(this, args);
     }
-    [dartx.replaceItem](newItem, index) {
-      return this.replaceItem(newItem, index);
+    [dartx.replaceItem](...args) {
+      return this.replaceItem.apply(this, args);
     }
   };
   svg$.NumberList[dart.implements] = () => [ListOfNumber()];
@@ -88097,71 +88097,71 @@
     get [dartx.pathSegList]() {
       return this.pathSegList;
     }
-    [dartx.createSvgPathSegArcAbs](x, y, r1, r2, angle, largeArcFlag, sweepFlag) {
-      return this.createSVGPathSegArcAbs(x, y, r1, r2, angle, largeArcFlag, sweepFlag);
+    [dartx.createSvgPathSegArcAbs](...args) {
+      return this.createSVGPathSegArcAbs.apply(this, args);
     }
-    [dartx.createSvgPathSegArcRel](x, y, r1, r2, angle, largeArcFlag, sweepFlag) {
-      return this.createSVGPathSegArcRel(x, y, r1, r2, angle, largeArcFlag, sweepFlag);
+    [dartx.createSvgPathSegArcRel](...args) {
+      return this.createSVGPathSegArcRel.apply(this, args);
     }
-    [dartx.createSvgPathSegClosePath]() {
-      return this.createSVGPathSegClosePath();
+    [dartx.createSvgPathSegClosePath](...args) {
+      return this.createSVGPathSegClosePath.apply(this, args);
     }
-    [dartx.createSvgPathSegCurvetoCubicAbs](x, y, x1, y1, x2, y2) {
-      return this.createSVGPathSegCurvetoCubicAbs(x, y, x1, y1, x2, y2);
+    [dartx.createSvgPathSegCurvetoCubicAbs](...args) {
+      return this.createSVGPathSegCurvetoCubicAbs.apply(this, args);
     }
-    [dartx.createSvgPathSegCurvetoCubicRel](x, y, x1, y1, x2, y2) {
-      return this.createSVGPathSegCurvetoCubicRel(x, y, x1, y1, x2, y2);
+    [dartx.createSvgPathSegCurvetoCubicRel](...args) {
+      return this.createSVGPathSegCurvetoCubicRel.apply(this, args);
     }
-    [dartx.createSvgPathSegCurvetoCubicSmoothAbs](x, y, x2, y2) {
-      return this.createSVGPathSegCurvetoCubicSmoothAbs(x, y, x2, y2);
+    [dartx.createSvgPathSegCurvetoCubicSmoothAbs](...args) {
+      return this.createSVGPathSegCurvetoCubicSmoothAbs.apply(this, args);
     }
-    [dartx.createSvgPathSegCurvetoCubicSmoothRel](x, y, x2, y2) {
-      return this.createSVGPathSegCurvetoCubicSmoothRel(x, y, x2, y2);
+    [dartx.createSvgPathSegCurvetoCubicSmoothRel](...args) {
+      return this.createSVGPathSegCurvetoCubicSmoothRel.apply(this, args);
     }
-    [dartx.createSvgPathSegCurvetoQuadraticAbs](x, y, x1, y1) {
-      return this.createSVGPathSegCurvetoQuadraticAbs(x, y, x1, y1);
+    [dartx.createSvgPathSegCurvetoQuadraticAbs](...args) {
+      return this.createSVGPathSegCurvetoQuadraticAbs.apply(this, args);
     }
-    [dartx.createSvgPathSegCurvetoQuadraticRel](x, y, x1, y1) {
-      return this.createSVGPathSegCurvetoQuadraticRel(x, y, x1, y1);
+    [dartx.createSvgPathSegCurvetoQuadraticRel](...args) {
+      return this.createSVGPathSegCurvetoQuadraticRel.apply(this, args);
     }
-    [dartx.createSvgPathSegCurvetoQuadraticSmoothAbs](x, y) {
-      return this.createSVGPathSegCurvetoQuadraticSmoothAbs(x, y);
+    [dartx.createSvgPathSegCurvetoQuadraticSmoothAbs](...args) {
+      return this.createSVGPathSegCurvetoQuadraticSmoothAbs.apply(this, args);
     }
-    [dartx.createSvgPathSegCurvetoQuadraticSmoothRel](x, y) {
-      return this.createSVGPathSegCurvetoQuadraticSmoothRel(x, y);
+    [dartx.createSvgPathSegCurvetoQuadraticSmoothRel](...args) {
+      return this.createSVGPathSegCurvetoQuadraticSmoothRel.apply(this, args);
     }
-    [dartx.createSvgPathSegLinetoAbs](x, y) {
-      return this.createSVGPathSegLinetoAbs(x, y);
+    [dartx.createSvgPathSegLinetoAbs](...args) {
+      return this.createSVGPathSegLinetoAbs.apply(this, args);
     }
-    [dartx.createSvgPathSegLinetoHorizontalAbs](x) {
-      return this.createSVGPathSegLinetoHorizontalAbs(x);
+    [dartx.createSvgPathSegLinetoHorizontalAbs](...args) {
+      return this.createSVGPathSegLinetoHorizontalAbs.apply(this, args);
     }
-    [dartx.createSvgPathSegLinetoHorizontalRel](x) {
-      return this.createSVGPathSegLinetoHorizontalRel(x);
+    [dartx.createSvgPathSegLinetoHorizontalRel](...args) {
+      return this.createSVGPathSegLinetoHorizontalRel.apply(this, args);
     }
-    [dartx.createSvgPathSegLinetoRel](x, y) {
-      return this.createSVGPathSegLinetoRel(x, y);
+    [dartx.createSvgPathSegLinetoRel](...args) {
+      return this.createSVGPathSegLinetoRel.apply(this, args);
     }
-    [dartx.createSvgPathSegLinetoVerticalAbs](y) {
-      return this.createSVGPathSegLinetoVerticalAbs(y);
+    [dartx.createSvgPathSegLinetoVerticalAbs](...args) {
+      return this.createSVGPathSegLinetoVerticalAbs.apply(this, args);
     }
-    [dartx.createSvgPathSegLinetoVerticalRel](y) {
-      return this.createSVGPathSegLinetoVerticalRel(y);
+    [dartx.createSvgPathSegLinetoVerticalRel](...args) {
+      return this.createSVGPathSegLinetoVerticalRel.apply(this, args);
     }
-    [dartx.createSvgPathSegMovetoAbs](x, y) {
-      return this.createSVGPathSegMovetoAbs(x, y);
+    [dartx.createSvgPathSegMovetoAbs](...args) {
+      return this.createSVGPathSegMovetoAbs.apply(this, args);
     }
-    [dartx.createSvgPathSegMovetoRel](x, y) {
-      return this.createSVGPathSegMovetoRel(x, y);
+    [dartx.createSvgPathSegMovetoRel](...args) {
+      return this.createSVGPathSegMovetoRel.apply(this, args);
     }
-    [dartx.getPathSegAtLength](distance) {
-      return this.getPathSegAtLength(distance);
+    [dartx.getPathSegAtLength](...args) {
+      return this.getPathSegAtLength.apply(this, args);
     }
-    [dartx.getPointAtLength](distance) {
-      return this.getPointAtLength(distance);
+    [dartx.getPointAtLength](...args) {
+      return this.getPointAtLength.apply(this, args);
     }
-    [dartx.getTotalLength]() {
-      return this.getTotalLength();
+    [dartx.getTotalLength](...args) {
+      return this.getTotalLength.apply(this, args);
     }
   };
   dart.defineNamedConstructor(svg$.PathElement, 'created');
@@ -88973,29 +88973,29 @@
     [dartx.elementAt](index) {
       return this[dartx._get](index);
     }
-    [__setter__$](index, newItem) {
-      return this.__setter__(index, newItem);
+    [__setter__$](...args) {
+      return this.__setter__.apply(this, args);
     }
-    [dartx.appendItem](newItem) {
-      return this.appendItem(newItem);
+    [dartx.appendItem](...args) {
+      return this.appendItem.apply(this, args);
     }
-    [dartx.clear]() {
-      return this.clear();
+    [dartx.clear](...args) {
+      return this.clear.apply(this, args);
     }
-    [dartx.getItem](index) {
-      return this.getItem(index);
+    [dartx.getItem](...args) {
+      return this.getItem.apply(this, args);
     }
-    [dartx.initialize](newItem) {
-      return this.initialize(newItem);
+    [dartx.initialize](...args) {
+      return this.initialize.apply(this, args);
     }
-    [dartx.insertItemBefore](newItem, index) {
-      return this.insertItemBefore(newItem, index);
+    [dartx.insertItemBefore](...args) {
+      return this.insertItemBefore.apply(this, args);
     }
-    [dartx.removeItem](index) {
-      return this.removeItem(index);
+    [dartx.removeItem](...args) {
+      return this.removeItem.apply(this, args);
     }
-    [dartx.replaceItem](newItem, index) {
-      return this.replaceItem(newItem, index);
+    [dartx.replaceItem](...args) {
+      return this.replaceItem.apply(this, args);
     }
   };
   svg$.PathSegList[dart.implements] = () => [ListOfPathSeg()];
@@ -89156,8 +89156,8 @@
     get [dartx.systemLanguage]() {
       return this.systemLanguage;
     }
-    [dartx.hasExtension](extension) {
-      return this.hasExtension(extension);
+    [dartx.hasExtension](...args) {
+      return this.hasExtension.apply(this, args);
     }
     get [dartx.href]() {
       return this.href;
@@ -89210,8 +89210,8 @@
     set [dartx.y](value) {
       this.y = value;
     }
-    [dartx.matrixTransform](matrix) {
-      return this.matrixTransform(matrix);
+    [dartx.matrixTransform](...args) {
+      return this.matrixTransform.apply(this, args);
     }
   };
   dart.setSignature(svg$.Point, {
@@ -89244,29 +89244,29 @@
     get [dartx.numberOfItems]() {
       return this.numberOfItems;
     }
-    [__setter__$](index, newItem) {
-      return this.__setter__(index, newItem);
+    [__setter__$](...args) {
+      return this.__setter__.apply(this, args);
     }
-    [dartx.appendItem](newItem) {
-      return this.appendItem(newItem);
+    [dartx.appendItem](...args) {
+      return this.appendItem.apply(this, args);
     }
-    [dartx.clear]() {
-      return this.clear();
+    [dartx.clear](...args) {
+      return this.clear.apply(this, args);
     }
-    [dartx.getItem](index) {
-      return this.getItem(index);
+    [dartx.getItem](...args) {
+      return this.getItem.apply(this, args);
     }
-    [dartx.initialize](newItem) {
-      return this.initialize(newItem);
+    [dartx.initialize](...args) {
+      return this.initialize.apply(this, args);
     }
-    [dartx.insertItemBefore](newItem, index) {
-      return this.insertItemBefore(newItem, index);
+    [dartx.insertItemBefore](...args) {
+      return this.insertItemBefore.apply(this, args);
     }
-    [dartx.removeItem](index) {
-      return this.removeItem(index);
+    [dartx.removeItem](...args) {
+      return this.removeItem.apply(this, args);
     }
-    [dartx.replaceItem](newItem, index) {
-      return this.replaceItem(newItem, index);
+    [dartx.replaceItem](...args) {
+      return this.replaceItem.apply(this, args);
     }
   };
   dart.setSignature(svg$.PointList, {
@@ -89738,29 +89738,29 @@
     [dartx.elementAt](index) {
       return this[dartx._get](index);
     }
-    [__setter__$](index, newItem) {
-      return this.__setter__(index, newItem);
+    [__setter__$](...args) {
+      return this.__setter__.apply(this, args);
     }
-    [dartx.appendItem](newItem) {
-      return this.appendItem(newItem);
+    [dartx.appendItem](...args) {
+      return this.appendItem.apply(this, args);
     }
-    [dartx.clear]() {
-      return this.clear();
+    [dartx.clear](...args) {
+      return this.clear.apply(this, args);
     }
-    [dartx.getItem](index) {
-      return this.getItem(index);
+    [dartx.getItem](...args) {
+      return this.getItem.apply(this, args);
     }
-    [dartx.initialize](newItem) {
-      return this.initialize(newItem);
+    [dartx.initialize](...args) {
+      return this.initialize.apply(this, args);
     }
-    [dartx.insertItemBefore](item, index) {
-      return this.insertItemBefore(item, index);
+    [dartx.insertItemBefore](...args) {
+      return this.insertItemBefore.apply(this, args);
     }
-    [dartx.removeItem](index) {
-      return this.removeItem(index);
+    [dartx.removeItem](...args) {
+      return this.removeItem.apply(this, args);
     }
-    [dartx.replaceItem](newItem, index) {
-      return this.replaceItem(newItem, index);
+    [dartx.replaceItem](...args) {
+      return this.replaceItem.apply(this, args);
     }
   };
   svg$.StringList[dart.implements] = () => [ListOfString()];
@@ -89987,74 +89987,74 @@
     get [dartx.y]() {
       return this.y;
     }
-    [dartx.animationsPaused]() {
-      return this.animationsPaused();
+    [dartx.animationsPaused](...args) {
+      return this.animationsPaused.apply(this, args);
     }
-    [dartx.checkEnclosure](element, rect) {
-      return this.checkEnclosure(element, rect);
+    [dartx.checkEnclosure](...args) {
+      return this.checkEnclosure.apply(this, args);
     }
-    [dartx.checkIntersection](element, rect) {
-      return this.checkIntersection(element, rect);
+    [dartx.checkIntersection](...args) {
+      return this.checkIntersection.apply(this, args);
     }
-    [dartx.createSvgAngle]() {
-      return this.createSVGAngle();
+    [dartx.createSvgAngle](...args) {
+      return this.createSVGAngle.apply(this, args);
     }
-    [dartx.createSvgLength]() {
-      return this.createSVGLength();
+    [dartx.createSvgLength](...args) {
+      return this.createSVGLength.apply(this, args);
     }
-    [dartx.createSvgMatrix]() {
-      return this.createSVGMatrix();
+    [dartx.createSvgMatrix](...args) {
+      return this.createSVGMatrix.apply(this, args);
     }
-    [dartx.createSvgNumber]() {
-      return this.createSVGNumber();
+    [dartx.createSvgNumber](...args) {
+      return this.createSVGNumber.apply(this, args);
     }
-    [dartx.createSvgPoint]() {
-      return this.createSVGPoint();
+    [dartx.createSvgPoint](...args) {
+      return this.createSVGPoint.apply(this, args);
     }
-    [dartx.createSvgRect]() {
-      return this.createSVGRect();
+    [dartx.createSvgRect](...args) {
+      return this.createSVGRect.apply(this, args);
     }
-    [dartx.createSvgTransform]() {
-      return this.createSVGTransform();
+    [dartx.createSvgTransform](...args) {
+      return this.createSVGTransform.apply(this, args);
     }
-    [dartx.createSvgTransformFromMatrix](matrix) {
-      return this.createSVGTransformFromMatrix(matrix);
+    [dartx.createSvgTransformFromMatrix](...args) {
+      return this.createSVGTransformFromMatrix.apply(this, args);
     }
-    [dartx.deselectAll]() {
-      return this.deselectAll();
+    [dartx.deselectAll](...args) {
+      return this.deselectAll.apply(this, args);
     }
-    [dartx.forceRedraw]() {
-      return this.forceRedraw();
+    [dartx.forceRedraw](...args) {
+      return this.forceRedraw.apply(this, args);
     }
-    [dartx.getCurrentTime]() {
-      return this.getCurrentTime();
+    [dartx.getCurrentTime](...args) {
+      return this.getCurrentTime.apply(this, args);
     }
-    [dartx.getElementById](elementId) {
-      return this.getElementById(elementId);
+    [dartx.getElementById](...args) {
+      return this.getElementById.apply(this, args);
     }
-    [dartx.getEnclosureList](rect, referenceElement) {
-      return this.getEnclosureList(rect, referenceElement);
+    [dartx.getEnclosureList](...args) {
+      return this.getEnclosureList.apply(this, args);
     }
-    [dartx.getIntersectionList](rect, referenceElement) {
-      return this.getIntersectionList(rect, referenceElement);
+    [dartx.getIntersectionList](...args) {
+      return this.getIntersectionList.apply(this, args);
     }
-    [dartx.pauseAnimations]() {
-      return this.pauseAnimations();
+    [dartx.pauseAnimations](...args) {
+      return this.pauseAnimations.apply(this, args);
     }
-    [dartx.setCurrentTime](seconds) {
-      return this.setCurrentTime(seconds);
+    [dartx.setCurrentTime](...args) {
+      return this.setCurrentTime.apply(this, args);
     }
-    [dartx.suspendRedraw](maxWaitMilliseconds) {
-      return this.suspendRedraw(maxWaitMilliseconds);
+    [dartx.suspendRedraw](...args) {
+      return this.suspendRedraw.apply(this, args);
     }
-    [dartx.unpauseAnimations]() {
-      return this.unpauseAnimations();
+    [dartx.unpauseAnimations](...args) {
+      return this.unpauseAnimations.apply(this, args);
     }
-    [dartx.unsuspendRedraw](suspendHandleId) {
-      return this.unsuspendRedraw(suspendHandleId);
+    [dartx.unsuspendRedraw](...args) {
+      return this.unsuspendRedraw.apply(this, args);
     }
-    [dartx.unsuspendRedrawAll]() {
-      return this.unsuspendRedrawAll();
+    [dartx.unsuspendRedrawAll](...args) {
+      return this.unsuspendRedrawAll.apply(this, args);
     }
     get [dartx.preserveAspectRatio]() {
       return this.preserveAspectRatio;
@@ -90207,32 +90207,32 @@
     get [dartx.textLength]() {
       return this.textLength;
     }
-    [dartx.getCharNumAtPosition](point) {
-      return this.getCharNumAtPosition(point);
+    [dartx.getCharNumAtPosition](...args) {
+      return this.getCharNumAtPosition.apply(this, args);
     }
-    [dartx.getComputedTextLength]() {
-      return this.getComputedTextLength();
+    [dartx.getComputedTextLength](...args) {
+      return this.getComputedTextLength.apply(this, args);
     }
-    [dartx.getEndPositionOfChar](charnum) {
-      return this.getEndPositionOfChar(charnum);
+    [dartx.getEndPositionOfChar](...args) {
+      return this.getEndPositionOfChar.apply(this, args);
     }
-    [dartx.getExtentOfChar](charnum) {
-      return this.getExtentOfChar(charnum);
+    [dartx.getExtentOfChar](...args) {
+      return this.getExtentOfChar.apply(this, args);
     }
-    [dartx.getNumberOfChars]() {
-      return this.getNumberOfChars();
+    [dartx.getNumberOfChars](...args) {
+      return this.getNumberOfChars.apply(this, args);
     }
-    [dartx.getRotationOfChar](charnum) {
-      return this.getRotationOfChar(charnum);
+    [dartx.getRotationOfChar](...args) {
+      return this.getRotationOfChar.apply(this, args);
     }
-    [dartx.getStartPositionOfChar](charnum) {
-      return this.getStartPositionOfChar(charnum);
+    [dartx.getStartPositionOfChar](...args) {
+      return this.getStartPositionOfChar.apply(this, args);
     }
-    [dartx.getSubStringLength](charnum, nchars) {
-      return this.getSubStringLength(charnum, nchars);
+    [dartx.getSubStringLength](...args) {
+      return this.getSubStringLength.apply(this, args);
     }
-    [dartx.selectSubString](charnum, nchars) {
-      return this.selectSubString(charnum, nchars);
+    [dartx.selectSubString](...args) {
+      return this.selectSubString.apply(this, args);
     }
   };
   dart.defineNamedConstructor(svg$.TextContentElement, 'created');
@@ -90499,23 +90499,23 @@
     get [dartx.type]() {
       return this.type;
     }
-    [dartx.setMatrix](matrix) {
-      return this.setMatrix(matrix);
+    [dartx.setMatrix](...args) {
+      return this.setMatrix.apply(this, args);
     }
-    [dartx.setRotate](angle, cx, cy) {
-      return this.setRotate(angle, cx, cy);
+    [dartx.setRotate](...args) {
+      return this.setRotate.apply(this, args);
     }
-    [dartx.setScale](sx, sy) {
-      return this.setScale(sx, sy);
+    [dartx.setScale](...args) {
+      return this.setScale.apply(this, args);
     }
-    [dartx.setSkewX](angle) {
-      return this.setSkewX(angle);
+    [dartx.setSkewX](...args) {
+      return this.setSkewX.apply(this, args);
     }
-    [dartx.setSkewY](angle) {
-      return this.setSkewY(angle);
+    [dartx.setSkewY](...args) {
+      return this.setSkewY.apply(this, args);
     }
-    [dartx.setTranslate](tx, ty) {
-      return this.setTranslate(tx, ty);
+    [dartx.setTranslate](...args) {
+      return this.setTranslate.apply(this, args);
     }
   };
   dart.setSignature(svg$.Transform, {
@@ -90616,35 +90616,35 @@
     [dartx.elementAt](index) {
       return this[dartx._get](index);
     }
-    [__setter__$](index, newItem) {
-      return this.__setter__(index, newItem);
+    [__setter__$](...args) {
+      return this.__setter__.apply(this, args);
     }
-    [dartx.appendItem](newItem) {
-      return this.appendItem(newItem);
+    [dartx.appendItem](...args) {
+      return this.appendItem.apply(this, args);
     }
-    [dartx.clear]() {
-      return this.clear();
+    [dartx.clear](...args) {
+      return this.clear.apply(this, args);
     }
-    [dartx.consolidate]() {
-      return this.consolidate();
+    [dartx.consolidate](...args) {
+      return this.consolidate.apply(this, args);
     }
-    [dartx.createSvgTransformFromMatrix](matrix) {
-      return this.createSVGTransformFromMatrix(matrix);
+    [dartx.createSvgTransformFromMatrix](...args) {
+      return this.createSVGTransformFromMatrix.apply(this, args);
     }
-    [dartx.getItem](index) {
-      return this.getItem(index);
+    [dartx.getItem](...args) {
+      return this.getItem.apply(this, args);
     }
-    [dartx.initialize](newItem) {
-      return this.initialize(newItem);
+    [dartx.initialize](...args) {
+      return this.initialize.apply(this, args);
     }
-    [dartx.insertItemBefore](newItem, index) {
-      return this.insertItemBefore(newItem, index);
+    [dartx.insertItemBefore](...args) {
+      return this.insertItemBefore.apply(this, args);
     }
-    [dartx.removeItem](index) {
-      return this.removeItem(index);
+    [dartx.removeItem](...args) {
+      return this.removeItem.apply(this, args);
     }
-    [dartx.replaceItem](newItem, index) {
-      return this.replaceItem(newItem, index);
+    [dartx.replaceItem](...args) {
+      return this.replaceItem.apply(this, args);
     }
   };
   svg$.TransformList[dart.implements] = () => [ListOfTransform()];
@@ -91052,11 +91052,11 @@
     get [dartx.numberOfOutputs]() {
       return this.numberOfOutputs;
     }
-    [_connect](destination, output, input) {
-      return this.connect(destination, output, input);
+    [_connect](...args) {
+      return this.connect.apply(this, args);
     }
-    [dartx.disconnect](output) {
-      return this.disconnect(output);
+    [dartx.disconnect](...args) {
+      return this.disconnect.apply(this, args);
     }
     [dartx.connectNode](destination, output, input) {
       if (output === void 0) output = 0;
@@ -91128,17 +91128,17 @@
     set [dartx.smoothingTimeConstant](value) {
       this.smoothingTimeConstant = value;
     }
-    [dartx.getByteFrequencyData](array) {
-      return this.getByteFrequencyData(array);
+    [dartx.getByteFrequencyData](...args) {
+      return this.getByteFrequencyData.apply(this, args);
     }
-    [dartx.getByteTimeDomainData](array) {
-      return this.getByteTimeDomainData(array);
+    [dartx.getByteTimeDomainData](...args) {
+      return this.getByteTimeDomainData.apply(this, args);
     }
-    [dartx.getFloatFrequencyData](array) {
-      return this.getFloatFrequencyData(array);
+    [dartx.getFloatFrequencyData](...args) {
+      return this.getFloatFrequencyData.apply(this, args);
     }
-    [dartx.getFloatTimeDomainData](array) {
-      return this.getFloatTimeDomainData(array);
+    [dartx.getFloatTimeDomainData](...args) {
+      return this.getFloatTimeDomainData.apply(this, args);
     }
   };
   dart.setSignature(web_audio.AnalyserNode, {
@@ -91182,8 +91182,8 @@
     get [dartx.sampleRate]() {
       return this.sampleRate;
     }
-    [dartx.getChannelData](channelIndex) {
-      return this.getChannelData(channelIndex);
+    [dartx.getChannelData](...args) {
+      return this.getChannelData.apply(this, args);
     }
   };
   dart.setSignature(web_audio.AudioBuffer, {
@@ -91345,59 +91345,59 @@
     get [dartx.sampleRate]() {
       return this.sampleRate;
     }
-    [dartx.createAnalyser]() {
-      return this.createAnalyser();
+    [dartx.createAnalyser](...args) {
+      return this.createAnalyser.apply(this, args);
     }
-    [dartx.createBiquadFilter]() {
-      return this.createBiquadFilter();
+    [dartx.createBiquadFilter](...args) {
+      return this.createBiquadFilter.apply(this, args);
     }
-    [dartx.createBuffer](numberOfChannels, numberOfFrames, sampleRate) {
-      return this.createBuffer(numberOfChannels, numberOfFrames, sampleRate);
+    [dartx.createBuffer](...args) {
+      return this.createBuffer.apply(this, args);
     }
-    [dartx.createBufferSource]() {
-      return this.createBufferSource();
+    [dartx.createBufferSource](...args) {
+      return this.createBufferSource.apply(this, args);
     }
-    [dartx.createChannelMerger](numberOfInputs) {
-      return this.createChannelMerger(numberOfInputs);
+    [dartx.createChannelMerger](...args) {
+      return this.createChannelMerger.apply(this, args);
     }
-    [dartx.createChannelSplitter](numberOfOutputs) {
-      return this.createChannelSplitter(numberOfOutputs);
+    [dartx.createChannelSplitter](...args) {
+      return this.createChannelSplitter.apply(this, args);
     }
-    [dartx.createConvolver]() {
-      return this.createConvolver();
+    [dartx.createConvolver](...args) {
+      return this.createConvolver.apply(this, args);
     }
-    [dartx.createDelay](maxDelayTime) {
-      return this.createDelay(maxDelayTime);
+    [dartx.createDelay](...args) {
+      return this.createDelay.apply(this, args);
     }
-    [dartx.createDynamicsCompressor]() {
-      return this.createDynamicsCompressor();
+    [dartx.createDynamicsCompressor](...args) {
+      return this.createDynamicsCompressor.apply(this, args);
     }
-    [dartx.createMediaElementSource](mediaElement) {
-      return this.createMediaElementSource(mediaElement);
+    [dartx.createMediaElementSource](...args) {
+      return this.createMediaElementSource.apply(this, args);
     }
-    [dartx.createMediaStreamDestination]() {
-      return this.createMediaStreamDestination();
+    [dartx.createMediaStreamDestination](...args) {
+      return this.createMediaStreamDestination.apply(this, args);
     }
-    [dartx.createMediaStreamSource](mediaStream) {
-      return this.createMediaStreamSource(mediaStream);
+    [dartx.createMediaStreamSource](...args) {
+      return this.createMediaStreamSource.apply(this, args);
     }
-    [dartx.createOscillator]() {
-      return this.createOscillator();
+    [dartx.createOscillator](...args) {
+      return this.createOscillator.apply(this, args);
     }
-    [dartx.createPanner]() {
-      return this.createPanner();
+    [dartx.createPanner](...args) {
+      return this.createPanner.apply(this, args);
     }
-    [dartx.createPeriodicWave](real, imag) {
-      return this.createPeriodicWave(real, imag);
+    [dartx.createPeriodicWave](...args) {
+      return this.createPeriodicWave.apply(this, args);
     }
-    [dartx.createWaveShaper]() {
-      return this.createWaveShaper();
+    [dartx.createWaveShaper](...args) {
+      return this.createWaveShaper.apply(this, args);
     }
-    [_decodeAudioData](audioData, successCallback, errorCallback) {
-      return this.decodeAudioData(audioData, successCallback, errorCallback);
+    [_decodeAudioData](...args) {
+      return this.decodeAudioData.apply(this, args);
     }
-    [dartx.startRendering]() {
-      return this.startRendering();
+    [dartx.startRendering](...args) {
+      return this.startRendering.apply(this, args);
     }
     get [dartx.onComplete]() {
       return web_audio.AudioContext.completeEvent.forTarget(this);
@@ -91518,14 +91518,14 @@
     set [dartx.speedOfSound](value) {
       this.speedOfSound = value;
     }
-    [dartx.setOrientation](x, y, z, xUp, yUp, zUp) {
-      return this.setOrientation(x, y, z, xUp, yUp, zUp);
+    [dartx.setOrientation](...args) {
+      return this.setOrientation.apply(this, args);
     }
-    [dartx.setPosition](x, y, z) {
-      return this.setPosition(x, y, z);
+    [dartx.setPosition](...args) {
+      return this.setPosition.apply(this, args);
     }
-    [dartx.setVelocity](x, y, z) {
-      return this.setVelocity(x, y, z);
+    [dartx.setVelocity](...args) {
+      return this.setVelocity.apply(this, args);
     }
   };
   dart.setSignature(web_audio.AudioListener, {
@@ -91564,23 +91564,23 @@
     set [dartx.value](value) {
       this.value = value;
     }
-    [dartx.cancelScheduledValues](startTime) {
-      return this.cancelScheduledValues(startTime);
+    [dartx.cancelScheduledValues](...args) {
+      return this.cancelScheduledValues.apply(this, args);
     }
-    [dartx.exponentialRampToValueAtTime](value, time) {
-      return this.exponentialRampToValueAtTime(value, time);
+    [dartx.exponentialRampToValueAtTime](...args) {
+      return this.exponentialRampToValueAtTime.apply(this, args);
     }
-    [dartx.linearRampToValueAtTime](value, time) {
-      return this.linearRampToValueAtTime(value, time);
+    [dartx.linearRampToValueAtTime](...args) {
+      return this.linearRampToValueAtTime.apply(this, args);
     }
-    [dartx.setTargetAtTime](target, time, timeConstant) {
-      return this.setTargetAtTime(target, time, timeConstant);
+    [dartx.setTargetAtTime](...args) {
+      return this.setTargetAtTime.apply(this, args);
     }
-    [dartx.setValueAtTime](value, time) {
-      return this.setValueAtTime(value, time);
+    [dartx.setValueAtTime](...args) {
+      return this.setValueAtTime.apply(this, args);
     }
-    [dartx.setValueCurveAtTime](values, time, duration) {
-      return this.setValueCurveAtTime(values, time, duration);
+    [dartx.setValueCurveAtTime](...args) {
+      return this.setValueCurveAtTime.apply(this, args);
     }
   };
   dart.setSignature(web_audio.AudioParam, {
@@ -91657,8 +91657,8 @@
     set [dartx.type](value) {
       this.type = value;
     }
-    [dartx.getFrequencyResponse](frequencyHz, magResponse, phaseResponse) {
-      return this.getFrequencyResponse(frequencyHz, magResponse, phaseResponse);
+    [dartx.getFrequencyResponse](...args) {
+      return this.getFrequencyResponse.apply(this, args);
     }
   };
   dart.setSignature(web_audio.BiquadFilterNode, {
@@ -91909,20 +91909,20 @@
     set [dartx.type](value) {
       this.type = value;
     }
-    [dartx.noteOff](when) {
-      return this.noteOff(when);
+    [dartx.noteOff](...args) {
+      return this.noteOff.apply(this, args);
     }
-    [dartx.noteOn](when) {
-      return this.noteOn(when);
+    [dartx.noteOn](...args) {
+      return this.noteOn.apply(this, args);
     }
-    [dartx.setPeriodicWave](periodicWave) {
-      return this.setPeriodicWave(periodicWave);
+    [dartx.setPeriodicWave](...args) {
+      return this.setPeriodicWave.apply(this, args);
     }
-    [dartx.start](when) {
-      return this.start(when);
+    [dartx.start](...args) {
+      return this.start.apply(this, args);
     }
-    [dartx.stop](when) {
-      return this.stop(when);
+    [dartx.stop](...args) {
+      return this.stop.apply(this, args);
     }
     get [dartx.onEnded]() {
       return web_audio.OscillatorNode.endedEvent.forTarget(this);
@@ -92013,14 +92013,14 @@
     set [dartx.rolloffFactor](value) {
       this.rolloffFactor = value;
     }
-    [dartx.setOrientation](x, y, z) {
-      return this.setOrientation(x, y, z);
+    [dartx.setOrientation](...args) {
+      return this.setOrientation.apply(this, args);
     }
-    [dartx.setPosition](x, y, z) {
-      return this.setPosition(x, y, z);
+    [dartx.setPosition](...args) {
+      return this.setPosition.apply(this, args);
     }
-    [dartx.setVelocity](x, y, z) {
-      return this.setVelocity(x, y, z);
+    [dartx.setVelocity](...args) {
+      return this.setVelocity.apply(this, args);
     }
   };
   dart.setSignature(web_audio.PannerNode, {
@@ -92065,8 +92065,8 @@
     get [dartx.bufferSize]() {
       return this.bufferSize;
     }
-    [dartx.setEventListener](eventListener) {
-      return this.setEventListener(eventListener);
+    [dartx.setEventListener](...args) {
+      return this.setEventListener.apply(this, args);
     }
     get [dartx.onAudioProcess]() {
       return web_audio.ScriptProcessorNode.audioProcessEvent.forTarget(this);
@@ -92297,323 +92297,323 @@
     get [dartx.drawingBufferWidth]() {
       return this.drawingBufferWidth;
     }
-    [dartx.activeTexture](texture) {
-      return this.activeTexture(texture);
+    [dartx.activeTexture](...args) {
+      return this.activeTexture.apply(this, args);
     }
-    [dartx.attachShader](program, shader) {
-      return this.attachShader(program, shader);
+    [dartx.attachShader](...args) {
+      return this.attachShader.apply(this, args);
     }
-    [dartx.bindAttribLocation](program, index, name) {
-      return this.bindAttribLocation(program, index, name);
+    [dartx.bindAttribLocation](...args) {
+      return this.bindAttribLocation.apply(this, args);
     }
-    [dartx.bindBuffer](target, buffer) {
-      return this.bindBuffer(target, buffer);
+    [dartx.bindBuffer](...args) {
+      return this.bindBuffer.apply(this, args);
     }
-    [dartx.bindFramebuffer](target, framebuffer) {
-      return this.bindFramebuffer(target, framebuffer);
+    [dartx.bindFramebuffer](...args) {
+      return this.bindFramebuffer.apply(this, args);
     }
-    [dartx.bindRenderbuffer](target, renderbuffer) {
-      return this.bindRenderbuffer(target, renderbuffer);
+    [dartx.bindRenderbuffer](...args) {
+      return this.bindRenderbuffer.apply(this, args);
     }
-    [dartx.bindTexture](target, texture) {
-      return this.bindTexture(target, texture);
+    [dartx.bindTexture](...args) {
+      return this.bindTexture.apply(this, args);
     }
-    [dartx.blendColor](red, green, blue, alpha) {
-      return this.blendColor(red, green, blue, alpha);
+    [dartx.blendColor](...args) {
+      return this.blendColor.apply(this, args);
     }
-    [dartx.blendEquation](mode) {
-      return this.blendEquation(mode);
+    [dartx.blendEquation](...args) {
+      return this.blendEquation.apply(this, args);
     }
-    [dartx.blendEquationSeparate](modeRGB, modeAlpha) {
-      return this.blendEquationSeparate(modeRGB, modeAlpha);
+    [dartx.blendEquationSeparate](...args) {
+      return this.blendEquationSeparate.apply(this, args);
     }
-    [dartx.blendFunc](sfactor, dfactor) {
-      return this.blendFunc(sfactor, dfactor);
+    [dartx.blendFunc](...args) {
+      return this.blendFunc.apply(this, args);
     }
-    [dartx.blendFuncSeparate](srcRGB, dstRGB, srcAlpha, dstAlpha) {
-      return this.blendFuncSeparate(srcRGB, dstRGB, srcAlpha, dstAlpha);
+    [dartx.blendFuncSeparate](...args) {
+      return this.blendFuncSeparate.apply(this, args);
     }
-    [dartx.bufferByteData](target, data, usage) {
-      return this.bufferData(target, data, usage);
+    [dartx.bufferByteData](...args) {
+      return this.bufferData.apply(this, args);
     }
-    [dartx.bufferData](target, data_OR_size, usage) {
-      return this.bufferData(target, data_OR_size, usage);
+    [dartx.bufferData](...args) {
+      return this.bufferData.apply(this, args);
     }
-    [dartx.bufferDataTyped](target, data, usage) {
-      return this.bufferData(target, data, usage);
+    [dartx.bufferDataTyped](...args) {
+      return this.bufferData.apply(this, args);
     }
-    [dartx.bufferSubByteData](target, offset, data) {
-      return this.bufferSubData(target, offset, data);
+    [dartx.bufferSubByteData](...args) {
+      return this.bufferSubData.apply(this, args);
     }
-    [dartx.bufferSubData](target, offset, data) {
-      return this.bufferSubData(target, offset, data);
+    [dartx.bufferSubData](...args) {
+      return this.bufferSubData.apply(this, args);
     }
-    [dartx.bufferSubDataTyped](target, offset, data) {
-      return this.bufferSubData(target, offset, data);
+    [dartx.bufferSubDataTyped](...args) {
+      return this.bufferSubData.apply(this, args);
     }
-    [dartx.checkFramebufferStatus](target) {
-      return this.checkFramebufferStatus(target);
+    [dartx.checkFramebufferStatus](...args) {
+      return this.checkFramebufferStatus.apply(this, args);
     }
-    [dartx.clear](mask) {
-      return this.clear(mask);
+    [dartx.clear](...args) {
+      return this.clear.apply(this, args);
     }
-    [dartx.clearColor](red, green, blue, alpha) {
-      return this.clearColor(red, green, blue, alpha);
+    [dartx.clearColor](...args) {
+      return this.clearColor.apply(this, args);
     }
-    [dartx.clearDepth](depth) {
-      return this.clearDepth(depth);
+    [dartx.clearDepth](...args) {
+      return this.clearDepth.apply(this, args);
     }
-    [dartx.clearStencil](s) {
-      return this.clearStencil(s);
+    [dartx.clearStencil](...args) {
+      return this.clearStencil.apply(this, args);
     }
-    [dartx.colorMask](red, green, blue, alpha) {
-      return this.colorMask(red, green, blue, alpha);
+    [dartx.colorMask](...args) {
+      return this.colorMask.apply(this, args);
     }
-    [dartx.compileShader](shader) {
-      return this.compileShader(shader);
+    [dartx.compileShader](...args) {
+      return this.compileShader.apply(this, args);
     }
-    [dartx.compressedTexImage2D](target, level, internalformat, width, height, border, data) {
-      return this.compressedTexImage2D(target, level, internalformat, width, height, border, data);
+    [dartx.compressedTexImage2D](...args) {
+      return this.compressedTexImage2D.apply(this, args);
     }
-    [dartx.compressedTexSubImage2D](target, level, xoffset, yoffset, width, height, format, data) {
-      return this.compressedTexSubImage2D(target, level, xoffset, yoffset, width, height, format, data);
+    [dartx.compressedTexSubImage2D](...args) {
+      return this.compressedTexSubImage2D.apply(this, args);
     }
-    [dartx.copyTexImage2D](target, level, internalformat, x, y, width, height, border) {
-      return this.copyTexImage2D(target, level, internalformat, x, y, width, height, border);
+    [dartx.copyTexImage2D](...args) {
+      return this.copyTexImage2D.apply(this, args);
     }
-    [dartx.copyTexSubImage2D](target, level, xoffset, yoffset, x, y, width, height) {
-      return this.copyTexSubImage2D(target, level, xoffset, yoffset, x, y, width, height);
+    [dartx.copyTexSubImage2D](...args) {
+      return this.copyTexSubImage2D.apply(this, args);
     }
-    [dartx.createBuffer]() {
-      return this.createBuffer();
+    [dartx.createBuffer](...args) {
+      return this.createBuffer.apply(this, args);
     }
-    [dartx.createFramebuffer]() {
-      return this.createFramebuffer();
+    [dartx.createFramebuffer](...args) {
+      return this.createFramebuffer.apply(this, args);
     }
-    [dartx.createProgram]() {
-      return this.createProgram();
+    [dartx.createProgram](...args) {
+      return this.createProgram.apply(this, args);
     }
-    [dartx.createRenderbuffer]() {
-      return this.createRenderbuffer();
+    [dartx.createRenderbuffer](...args) {
+      return this.createRenderbuffer.apply(this, args);
     }
-    [dartx.createShader](type) {
-      return this.createShader(type);
+    [dartx.createShader](...args) {
+      return this.createShader.apply(this, args);
     }
-    [dartx.createTexture]() {
-      return this.createTexture();
+    [dartx.createTexture](...args) {
+      return this.createTexture.apply(this, args);
     }
-    [dartx.cullFace](mode) {
-      return this.cullFace(mode);
+    [dartx.cullFace](...args) {
+      return this.cullFace.apply(this, args);
     }
-    [dartx.deleteBuffer](buffer) {
-      return this.deleteBuffer(buffer);
+    [dartx.deleteBuffer](...args) {
+      return this.deleteBuffer.apply(this, args);
     }
-    [dartx.deleteFramebuffer](framebuffer) {
-      return this.deleteFramebuffer(framebuffer);
+    [dartx.deleteFramebuffer](...args) {
+      return this.deleteFramebuffer.apply(this, args);
     }
-    [dartx.deleteProgram](program) {
-      return this.deleteProgram(program);
+    [dartx.deleteProgram](...args) {
+      return this.deleteProgram.apply(this, args);
     }
-    [dartx.deleteRenderbuffer](renderbuffer) {
-      return this.deleteRenderbuffer(renderbuffer);
+    [dartx.deleteRenderbuffer](...args) {
+      return this.deleteRenderbuffer.apply(this, args);
     }
-    [dartx.deleteShader](shader) {
-      return this.deleteShader(shader);
+    [dartx.deleteShader](...args) {
+      return this.deleteShader.apply(this, args);
     }
-    [dartx.deleteTexture](texture) {
-      return this.deleteTexture(texture);
+    [dartx.deleteTexture](...args) {
+      return this.deleteTexture.apply(this, args);
     }
-    [dartx.depthFunc](func) {
-      return this.depthFunc(func);
+    [dartx.depthFunc](...args) {
+      return this.depthFunc.apply(this, args);
     }
-    [dartx.depthMask](flag) {
-      return this.depthMask(flag);
+    [dartx.depthMask](...args) {
+      return this.depthMask.apply(this, args);
     }
-    [dartx.depthRange](zNear, zFar) {
-      return this.depthRange(zNear, zFar);
+    [dartx.depthRange](...args) {
+      return this.depthRange.apply(this, args);
     }
-    [dartx.detachShader](program, shader) {
-      return this.detachShader(program, shader);
+    [dartx.detachShader](...args) {
+      return this.detachShader.apply(this, args);
     }
-    [dartx.disable](cap) {
-      return this.disable(cap);
+    [dartx.disable](...args) {
+      return this.disable.apply(this, args);
     }
-    [dartx.disableVertexAttribArray](index) {
-      return this.disableVertexAttribArray(index);
+    [dartx.disableVertexAttribArray](...args) {
+      return this.disableVertexAttribArray.apply(this, args);
     }
-    [dartx.drawArrays](mode, first, count) {
-      return this.drawArrays(mode, first, count);
+    [dartx.drawArrays](...args) {
+      return this.drawArrays.apply(this, args);
     }
-    [dartx.drawElements](mode, count, type, offset) {
-      return this.drawElements(mode, count, type, offset);
+    [dartx.drawElements](...args) {
+      return this.drawElements.apply(this, args);
     }
-    [dartx.enable](cap) {
-      return this.enable(cap);
+    [dartx.enable](...args) {
+      return this.enable.apply(this, args);
     }
-    [dartx.enableVertexAttribArray](index) {
-      return this.enableVertexAttribArray(index);
+    [dartx.enableVertexAttribArray](...args) {
+      return this.enableVertexAttribArray.apply(this, args);
     }
-    [dartx.finish]() {
-      return this.finish();
+    [dartx.finish](...args) {
+      return this.finish.apply(this, args);
     }
-    [dartx.flush]() {
-      return this.flush();
+    [dartx.flush](...args) {
+      return this.flush.apply(this, args);
     }
-    [dartx.framebufferRenderbuffer](target, attachment, renderbuffertarget, renderbuffer) {
-      return this.framebufferRenderbuffer(target, attachment, renderbuffertarget, renderbuffer);
+    [dartx.framebufferRenderbuffer](...args) {
+      return this.framebufferRenderbuffer.apply(this, args);
     }
-    [dartx.framebufferTexture2D](target, attachment, textarget, texture, level) {
-      return this.framebufferTexture2D(target, attachment, textarget, texture, level);
+    [dartx.framebufferTexture2D](...args) {
+      return this.framebufferTexture2D.apply(this, args);
     }
-    [dartx.frontFace](mode) {
-      return this.frontFace(mode);
+    [dartx.frontFace](...args) {
+      return this.frontFace.apply(this, args);
     }
-    [dartx.generateMipmap](target) {
-      return this.generateMipmap(target);
+    [dartx.generateMipmap](...args) {
+      return this.generateMipmap.apply(this, args);
     }
-    [dartx.getActiveAttrib](program, index) {
-      return this.getActiveAttrib(program, index);
+    [dartx.getActiveAttrib](...args) {
+      return this.getActiveAttrib.apply(this, args);
     }
-    [dartx.getActiveUniform](program, index) {
-      return this.getActiveUniform(program, index);
+    [dartx.getActiveUniform](...args) {
+      return this.getActiveUniform.apply(this, args);
     }
-    [dartx.getAttachedShaders](program) {
-      return this.getAttachedShaders(program);
+    [dartx.getAttachedShaders](...args) {
+      return this.getAttachedShaders.apply(this, args);
     }
-    [dartx.getAttribLocation](program, name) {
-      return this.getAttribLocation(program, name);
+    [dartx.getAttribLocation](...args) {
+      return this.getAttribLocation.apply(this, args);
     }
-    [dartx.getBufferParameter](target, pname) {
-      return this.getBufferParameter(target, pname);
+    [dartx.getBufferParameter](...args) {
+      return this.getBufferParameter.apply(this, args);
     }
     [dartx.getContextAttributes]() {
       return web_gl.ContextAttributes._check(html_common.convertNativeToDart_ContextAttributes(this[_getContextAttributes_1$]()));
     }
-    [_getContextAttributes_1$]() {
-      return this.getContextAttributes();
+    [_getContextAttributes_1$](...args) {
+      return this.getContextAttributes.apply(this, args);
     }
-    [dartx.getError]() {
-      return this.getError();
+    [dartx.getError](...args) {
+      return this.getError.apply(this, args);
     }
-    [dartx.getExtension](name) {
-      return this.getExtension(name);
+    [dartx.getExtension](...args) {
+      return this.getExtension.apply(this, args);
     }
-    [dartx.getFramebufferAttachmentParameter](target, attachment, pname) {
-      return this.getFramebufferAttachmentParameter(target, attachment, pname);
+    [dartx.getFramebufferAttachmentParameter](...args) {
+      return this.getFramebufferAttachmentParameter.apply(this, args);
     }
-    [dartx.getParameter](pname) {
-      return this.getParameter(pname);
+    [dartx.getParameter](...args) {
+      return this.getParameter.apply(this, args);
     }
-    [dartx.getProgramInfoLog](program) {
-      return this.getProgramInfoLog(program);
+    [dartx.getProgramInfoLog](...args) {
+      return this.getProgramInfoLog.apply(this, args);
     }
-    [dartx.getProgramParameter](program, pname) {
-      return this.getProgramParameter(program, pname);
+    [dartx.getProgramParameter](...args) {
+      return this.getProgramParameter.apply(this, args);
     }
-    [dartx.getRenderbufferParameter](target, pname) {
-      return this.getRenderbufferParameter(target, pname);
+    [dartx.getRenderbufferParameter](...args) {
+      return this.getRenderbufferParameter.apply(this, args);
     }
-    [dartx.getShaderInfoLog](shader) {
-      return this.getShaderInfoLog(shader);
+    [dartx.getShaderInfoLog](...args) {
+      return this.getShaderInfoLog.apply(this, args);
     }
-    [dartx.getShaderParameter](shader, pname) {
-      return this.getShaderParameter(shader, pname);
+    [dartx.getShaderParameter](...args) {
+      return this.getShaderParameter.apply(this, args);
     }
-    [dartx.getShaderPrecisionFormat](shadertype, precisiontype) {
-      return this.getShaderPrecisionFormat(shadertype, precisiontype);
+    [dartx.getShaderPrecisionFormat](...args) {
+      return this.getShaderPrecisionFormat.apply(this, args);
     }
-    [dartx.getShaderSource](shader) {
-      return this.getShaderSource(shader);
+    [dartx.getShaderSource](...args) {
+      return this.getShaderSource.apply(this, args);
     }
-    [dartx.getSupportedExtensions]() {
-      return this.getSupportedExtensions();
+    [dartx.getSupportedExtensions](...args) {
+      return this.getSupportedExtensions.apply(this, args);
     }
-    [dartx.getTexParameter](target, pname) {
-      return this.getTexParameter(target, pname);
+    [dartx.getTexParameter](...args) {
+      return this.getTexParameter.apply(this, args);
     }
-    [dartx.getUniform](program, location) {
-      return this.getUniform(program, location);
+    [dartx.getUniform](...args) {
+      return this.getUniform.apply(this, args);
     }
-    [dartx.getUniformLocation](program, name) {
-      return this.getUniformLocation(program, name);
+    [dartx.getUniformLocation](...args) {
+      return this.getUniformLocation.apply(this, args);
     }
-    [dartx.getVertexAttrib](index, pname) {
-      return this.getVertexAttrib(index, pname);
+    [dartx.getVertexAttrib](...args) {
+      return this.getVertexAttrib.apply(this, args);
     }
-    [dartx.getVertexAttribOffset](index, pname) {
-      return this.getVertexAttribOffset(index, pname);
+    [dartx.getVertexAttribOffset](...args) {
+      return this.getVertexAttribOffset.apply(this, args);
     }
-    [dartx.hint](target, mode) {
-      return this.hint(target, mode);
+    [dartx.hint](...args) {
+      return this.hint.apply(this, args);
     }
-    [dartx.isBuffer](buffer) {
-      return this.isBuffer(buffer);
+    [dartx.isBuffer](...args) {
+      return this.isBuffer.apply(this, args);
     }
-    [dartx.isContextLost]() {
-      return this.isContextLost();
+    [dartx.isContextLost](...args) {
+      return this.isContextLost.apply(this, args);
     }
-    [dartx.isEnabled](cap) {
-      return this.isEnabled(cap);
+    [dartx.isEnabled](...args) {
+      return this.isEnabled.apply(this, args);
     }
-    [dartx.isFramebuffer](framebuffer) {
-      return this.isFramebuffer(framebuffer);
+    [dartx.isFramebuffer](...args) {
+      return this.isFramebuffer.apply(this, args);
     }
-    [dartx.isProgram](program) {
-      return this.isProgram(program);
+    [dartx.isProgram](...args) {
+      return this.isProgram.apply(this, args);
     }
-    [dartx.isRenderbuffer](renderbuffer) {
-      return this.isRenderbuffer(renderbuffer);
+    [dartx.isRenderbuffer](...args) {
+      return this.isRenderbuffer.apply(this, args);
     }
-    [dartx.isShader](shader) {
-      return this.isShader(shader);
+    [dartx.isShader](...args) {
+      return this.isShader.apply(this, args);
     }
-    [dartx.isTexture](texture) {
-      return this.isTexture(texture);
+    [dartx.isTexture](...args) {
+      return this.isTexture.apply(this, args);
     }
-    [dartx.lineWidth](width) {
-      return this.lineWidth(width);
+    [dartx.lineWidth](...args) {
+      return this.lineWidth.apply(this, args);
     }
-    [dartx.linkProgram](program) {
-      return this.linkProgram(program);
+    [dartx.linkProgram](...args) {
+      return this.linkProgram.apply(this, args);
     }
-    [dartx.pixelStorei](pname, param) {
-      return this.pixelStorei(pname, param);
+    [dartx.pixelStorei](...args) {
+      return this.pixelStorei.apply(this, args);
     }
-    [dartx.polygonOffset](factor, units) {
-      return this.polygonOffset(factor, units);
+    [dartx.polygonOffset](...args) {
+      return this.polygonOffset.apply(this, args);
     }
-    [dartx.readPixels](x, y, width, height, format, type, pixels) {
-      return this.readPixels(x, y, width, height, format, type, pixels);
+    [dartx.readPixels](...args) {
+      return this.readPixels.apply(this, args);
     }
-    [dartx.renderbufferStorage](target, internalformat, width, height) {
-      return this.renderbufferStorage(target, internalformat, width, height);
+    [dartx.renderbufferStorage](...args) {
+      return this.renderbufferStorage.apply(this, args);
     }
-    [dartx.sampleCoverage](value, invert) {
-      return this.sampleCoverage(value, invert);
+    [dartx.sampleCoverage](...args) {
+      return this.sampleCoverage.apply(this, args);
     }
-    [dartx.scissor](x, y, width, height) {
-      return this.scissor(x, y, width, height);
+    [dartx.scissor](...args) {
+      return this.scissor.apply(this, args);
     }
-    [dartx.shaderSource](shader, string) {
-      return this.shaderSource(shader, string);
+    [dartx.shaderSource](...args) {
+      return this.shaderSource.apply(this, args);
     }
-    [dartx.stencilFunc](func, ref, mask) {
-      return this.stencilFunc(func, ref, mask);
+    [dartx.stencilFunc](...args) {
+      return this.stencilFunc.apply(this, args);
     }
-    [dartx.stencilFuncSeparate](face, func, ref, mask) {
-      return this.stencilFuncSeparate(face, func, ref, mask);
+    [dartx.stencilFuncSeparate](...args) {
+      return this.stencilFuncSeparate.apply(this, args);
     }
-    [dartx.stencilMask](mask) {
-      return this.stencilMask(mask);
+    [dartx.stencilMask](...args) {
+      return this.stencilMask.apply(this, args);
     }
-    [dartx.stencilMaskSeparate](face, mask) {
-      return this.stencilMaskSeparate(face, mask);
+    [dartx.stencilMaskSeparate](...args) {
+      return this.stencilMaskSeparate.apply(this, args);
     }
-    [dartx.stencilOp](fail, zfail, zpass) {
-      return this.stencilOp(fail, zfail, zpass);
+    [dartx.stencilOp](...args) {
+      return this.stencilOp.apply(this, args);
     }
-    [dartx.stencilOpSeparate](face, fail, zfail, zpass) {
-      return this.stencilOpSeparate(face, fail, zfail, zpass);
+    [dartx.stencilOpSeparate](...args) {
+      return this.stencilOpSeparate.apply(this, args);
     }
     [dartx.texImage2D](target, level, internalformat, format_OR_width, height_OR_type, border_OR_canvas_OR_image_OR_pixels_OR_video, format, type, pixels) {
       if (format === void 0) format = null;
@@ -92642,43 +92642,43 @@
       }
       dart.throw(new core.ArgumentError("Incorrect number or type of arguments"));
     }
-    [_texImage2D_1](target, level, internalformat, width, height, border, format, type, pixels) {
-      return this.texImage2D(target, level, internalformat, width, height, border, format, type, pixels);
+    [_texImage2D_1](...args) {
+      return this.texImage2D.apply(this, args);
     }
-    [_texImage2D_2](target, level, internalformat, format, type, pixels) {
-      return this.texImage2D(target, level, internalformat, format, type, pixels);
+    [_texImage2D_2](...args) {
+      return this.texImage2D.apply(this, args);
     }
-    [_texImage2D_3](target, level, internalformat, format, type, image) {
-      return this.texImage2D(target, level, internalformat, format, type, image);
+    [_texImage2D_3](...args) {
+      return this.texImage2D.apply(this, args);
     }
-    [_texImage2D_4](target, level, internalformat, format, type, canvas) {
-      return this.texImage2D(target, level, internalformat, format, type, canvas);
+    [_texImage2D_4](...args) {
+      return this.texImage2D.apply(this, args);
     }
-    [_texImage2D_5](target, level, internalformat, format, type, video) {
-      return this.texImage2D(target, level, internalformat, format, type, video);
+    [_texImage2D_5](...args) {
+      return this.texImage2D.apply(this, args);
     }
-    [dartx.texImage2DCanvas](target, level, internalformat, format, type, canvas) {
-      return this.texImage2D(target, level, internalformat, format, type, canvas);
+    [dartx.texImage2DCanvas](...args) {
+      return this.texImage2D.apply(this, args);
     }
-    [dartx.texImage2DImage](target, level, internalformat, format, type, image) {
-      return this.texImage2D(target, level, internalformat, format, type, image);
+    [dartx.texImage2DImage](...args) {
+      return this.texImage2D.apply(this, args);
     }
     [dartx.texImage2DImageData](target, level, internalformat, format, type, pixels) {
       let pixels_1 = html_common.convertDartToNative_ImageData(pixels);
       this[_texImage2DImageData_1](target, level, internalformat, format, type, pixels_1);
       return;
     }
-    [_texImage2DImageData_1](target, level, internalformat, format, type, pixels) {
-      return this.texImage2D(target, level, internalformat, format, type, pixels);
+    [_texImage2DImageData_1](...args) {
+      return this.texImage2D.apply(this, args);
     }
-    [dartx.texImage2DVideo](target, level, internalformat, format, type, video) {
-      return this.texImage2D(target, level, internalformat, format, type, video);
+    [dartx.texImage2DVideo](...args) {
+      return this.texImage2D.apply(this, args);
     }
-    [dartx.texParameterf](target, pname, param) {
-      return this.texParameterf(target, pname, param);
+    [dartx.texParameterf](...args) {
+      return this.texParameterf.apply(this, args);
     }
-    [dartx.texParameteri](target, pname, param) {
-      return this.texParameteri(target, pname, param);
+    [dartx.texParameteri](...args) {
+      return this.texParameteri.apply(this, args);
     }
     [dartx.texSubImage2D](target, level, xoffset, yoffset, format_OR_width, height_OR_type, canvas_OR_format_OR_image_OR_pixels_OR_video, type, pixels) {
       if (type === void 0) type = null;
@@ -92706,142 +92706,142 @@
       }
       dart.throw(new core.ArgumentError("Incorrect number or type of arguments"));
     }
-    [_texSubImage2D_1](target, level, xoffset, yoffset, width, height, format, type, pixels) {
-      return this.texSubImage2D(target, level, xoffset, yoffset, width, height, format, type, pixels);
+    [_texSubImage2D_1](...args) {
+      return this.texSubImage2D.apply(this, args);
     }
-    [_texSubImage2D_2](target, level, xoffset, yoffset, format, type, pixels) {
-      return this.texSubImage2D(target, level, xoffset, yoffset, format, type, pixels);
+    [_texSubImage2D_2](...args) {
+      return this.texSubImage2D.apply(this, args);
     }
-    [_texSubImage2D_3](target, level, xoffset, yoffset, format, type, image) {
-      return this.texSubImage2D(target, level, xoffset, yoffset, format, type, image);
+    [_texSubImage2D_3](...args) {
+      return this.texSubImage2D.apply(this, args);
     }
-    [_texSubImage2D_4](target, level, xoffset, yoffset, format, type, canvas) {
-      return this.texSubImage2D(target, level, xoffset, yoffset, format, type, canvas);
+    [_texSubImage2D_4](...args) {
+      return this.texSubImage2D.apply(this, args);
     }
-    [_texSubImage2D_5](target, level, xoffset, yoffset, format, type, video) {
-      return this.texSubImage2D(target, level, xoffset, yoffset, format, type, video);
+    [_texSubImage2D_5](...args) {
+      return this.texSubImage2D.apply(this, args);
     }
-    [dartx.texSubImage2DCanvas](target, level, xoffset, yoffset, format, type, canvas) {
-      return this.texSubImage2D(target, level, xoffset, yoffset, format, type, canvas);
+    [dartx.texSubImage2DCanvas](...args) {
+      return this.texSubImage2D.apply(this, args);
     }
-    [dartx.texSubImage2DImage](target, level, xoffset, yoffset, format, type, image) {
-      return this.texSubImage2D(target, level, xoffset, yoffset, format, type, image);
+    [dartx.texSubImage2DImage](...args) {
+      return this.texSubImage2D.apply(this, args);
     }
     [dartx.texSubImage2DImageData](target, level, xoffset, yoffset, format, type, pixels) {
       let pixels_1 = html_common.convertDartToNative_ImageData(pixels);
       this[_texSubImage2DImageData_1](target, level, xoffset, yoffset, format, type, pixels_1);
       return;
     }
-    [_texSubImage2DImageData_1](target, level, xoffset, yoffset, format, type, pixels) {
-      return this.texSubImage2D(target, level, xoffset, yoffset, format, type, pixels);
+    [_texSubImage2DImageData_1](...args) {
+      return this.texSubImage2D.apply(this, args);
     }
-    [dartx.texSubImage2DVideo](target, level, xoffset, yoffset, format, type, video) {
-      return this.texSubImage2D(target, level, xoffset, yoffset, format, type, video);
+    [dartx.texSubImage2DVideo](...args) {
+      return this.texSubImage2D.apply(this, args);
     }
-    [dartx.uniform1f](location, x) {
-      return this.uniform1f(location, x);
+    [dartx.uniform1f](...args) {
+      return this.uniform1f.apply(this, args);
     }
-    [dartx.uniform1fv](location, v) {
-      return this.uniform1fv(location, v);
+    [dartx.uniform1fv](...args) {
+      return this.uniform1fv.apply(this, args);
     }
-    [dartx.uniform1i](location, x) {
-      return this.uniform1i(location, x);
+    [dartx.uniform1i](...args) {
+      return this.uniform1i.apply(this, args);
     }
-    [dartx.uniform1iv](location, v) {
-      return this.uniform1iv(location, v);
+    [dartx.uniform1iv](...args) {
+      return this.uniform1iv.apply(this, args);
     }
-    [dartx.uniform2f](location, x, y) {
-      return this.uniform2f(location, x, y);
+    [dartx.uniform2f](...args) {
+      return this.uniform2f.apply(this, args);
     }
-    [dartx.uniform2fv](location, v) {
-      return this.uniform2fv(location, v);
+    [dartx.uniform2fv](...args) {
+      return this.uniform2fv.apply(this, args);
     }
-    [dartx.uniform2i](location, x, y) {
-      return this.uniform2i(location, x, y);
+    [dartx.uniform2i](...args) {
+      return this.uniform2i.apply(this, args);
     }
-    [dartx.uniform2iv](location, v) {
-      return this.uniform2iv(location, v);
+    [dartx.uniform2iv](...args) {
+      return this.uniform2iv.apply(this, args);
     }
-    [dartx.uniform3f](location, x, y, z) {
-      return this.uniform3f(location, x, y, z);
+    [dartx.uniform3f](...args) {
+      return this.uniform3f.apply(this, args);
     }
-    [dartx.uniform3fv](location, v) {
-      return this.uniform3fv(location, v);
+    [dartx.uniform3fv](...args) {
+      return this.uniform3fv.apply(this, args);
     }
-    [dartx.uniform3i](location, x, y, z) {
-      return this.uniform3i(location, x, y, z);
+    [dartx.uniform3i](...args) {
+      return this.uniform3i.apply(this, args);
     }
-    [dartx.uniform3iv](location, v) {
-      return this.uniform3iv(location, v);
+    [dartx.uniform3iv](...args) {
+      return this.uniform3iv.apply(this, args);
     }
-    [dartx.uniform4f](location, x, y, z, w) {
-      return this.uniform4f(location, x, y, z, w);
+    [dartx.uniform4f](...args) {
+      return this.uniform4f.apply(this, args);
     }
-    [dartx.uniform4fv](location, v) {
-      return this.uniform4fv(location, v);
+    [dartx.uniform4fv](...args) {
+      return this.uniform4fv.apply(this, args);
     }
-    [dartx.uniform4i](location, x, y, z, w) {
-      return this.uniform4i(location, x, y, z, w);
+    [dartx.uniform4i](...args) {
+      return this.uniform4i.apply(this, args);
     }
-    [dartx.uniform4iv](location, v) {
-      return this.uniform4iv(location, v);
+    [dartx.uniform4iv](...args) {
+      return this.uniform4iv.apply(this, args);
     }
-    [dartx.uniformMatrix2fv](location, transpose, array) {
-      return this.uniformMatrix2fv(location, transpose, array);
+    [dartx.uniformMatrix2fv](...args) {
+      return this.uniformMatrix2fv.apply(this, args);
     }
-    [dartx.uniformMatrix3fv](location, transpose, array) {
-      return this.uniformMatrix3fv(location, transpose, array);
+    [dartx.uniformMatrix3fv](...args) {
+      return this.uniformMatrix3fv.apply(this, args);
     }
-    [dartx.uniformMatrix4fv](location, transpose, array) {
-      return this.uniformMatrix4fv(location, transpose, array);
+    [dartx.uniformMatrix4fv](...args) {
+      return this.uniformMatrix4fv.apply(this, args);
     }
-    [dartx.useProgram](program) {
-      return this.useProgram(program);
+    [dartx.useProgram](...args) {
+      return this.useProgram.apply(this, args);
     }
-    [dartx.validateProgram](program) {
-      return this.validateProgram(program);
+    [dartx.validateProgram](...args) {
+      return this.validateProgram.apply(this, args);
     }
-    [dartx.vertexAttrib1f](indx, x) {
-      return this.vertexAttrib1f(indx, x);
+    [dartx.vertexAttrib1f](...args) {
+      return this.vertexAttrib1f.apply(this, args);
     }
-    [dartx.vertexAttrib1fv](indx, values) {
-      return this.vertexAttrib1fv(indx, values);
+    [dartx.vertexAttrib1fv](...args) {
+      return this.vertexAttrib1fv.apply(this, args);
     }
-    [dartx.vertexAttrib2f](indx, x, y) {
-      return this.vertexAttrib2f(indx, x, y);
+    [dartx.vertexAttrib2f](...args) {
+      return this.vertexAttrib2f.apply(this, args);
     }
-    [dartx.vertexAttrib2fv](indx, values) {
-      return this.vertexAttrib2fv(indx, values);
+    [dartx.vertexAttrib2fv](...args) {
+      return this.vertexAttrib2fv.apply(this, args);
     }
-    [dartx.vertexAttrib3f](indx, x, y, z) {
-      return this.vertexAttrib3f(indx, x, y, z);
+    [dartx.vertexAttrib3f](...args) {
+      return this.vertexAttrib3f.apply(this, args);
     }
-    [dartx.vertexAttrib3fv](indx, values) {
-      return this.vertexAttrib3fv(indx, values);
+    [dartx.vertexAttrib3fv](...args) {
+      return this.vertexAttrib3fv.apply(this, args);
     }
-    [dartx.vertexAttrib4f](indx, x, y, z, w) {
-      return this.vertexAttrib4f(indx, x, y, z, w);
+    [dartx.vertexAttrib4f](...args) {
+      return this.vertexAttrib4f.apply(this, args);
     }
-    [dartx.vertexAttrib4fv](indx, values) {
-      return this.vertexAttrib4fv(indx, values);
+    [dartx.vertexAttrib4fv](...args) {
+      return this.vertexAttrib4fv.apply(this, args);
     }
-    [dartx.vertexAttribPointer](indx, size, type, normalized, stride, offset) {
-      return this.vertexAttribPointer(indx, size, type, normalized, stride, offset);
+    [dartx.vertexAttribPointer](...args) {
+      return this.vertexAttribPointer.apply(this, args);
     }
-    [dartx.viewport](x, y, width, height) {
-      return this.viewport(x, y, width, height);
+    [dartx.viewport](...args) {
+      return this.viewport.apply(this, args);
     }
-    [dartx.texImage2DUntyped](targetTexture, levelOfDetail, internalFormat, format, type, data) {
-      return this.texImage2D(targetTexture, levelOfDetail, internalFormat, format, type, data);
+    [dartx.texImage2DUntyped](...args) {
+      return this.texImage2D.apply(this, args);
     }
-    [dartx.texImage2DTyped](targetTexture, levelOfDetail, internalFormat, width, height, border, format, type, data) {
-      return this.texImage2D(targetTexture, levelOfDetail, internalFormat, width, height, border, format, type, data);
+    [dartx.texImage2DTyped](...args) {
+      return this.texImage2D.apply(this, args);
     }
-    [dartx.texSubImage2DUntyped](targetTexture, levelOfDetail, xOffset, yOffset, format, type, data) {
-      return this.texSubImage2D(targetTexture, levelOfDetail, xOffset, yOffset, format, type, data);
+    [dartx.texSubImage2DUntyped](...args) {
+      return this.texSubImage2D.apply(this, args);
     }
-    [dartx.texSubImage2DTyped](targetTexture, levelOfDetail, xOffset, yOffset, width, height, border, format, type, data) {
-      return this.texSubImage2D(targetTexture, levelOfDetail, xOffset, yOffset, width, height, border, format, type, data);
+    [dartx.texSubImage2DTyped](...args) {
+      return this.texSubImage2D.apply(this, args);
     }
   };
   web_gl.RenderingContext[dart.implements] = () => [html$.CanvasRenderingContext];
@@ -93962,14 +93962,14 @@
     static _() {
       dart.throw(new core.UnsupportedError("Not supported"));
     }
-    [dartx.drawArraysInstancedAngle](mode, first, count, primcount) {
-      return this.drawArraysInstancedANGLE(mode, first, count, primcount);
+    [dartx.drawArraysInstancedAngle](...args) {
+      return this.drawArraysInstancedANGLE.apply(this, args);
     }
-    [dartx.drawElementsInstancedAngle](mode, count, type, offset, primcount) {
-      return this.drawElementsInstancedANGLE(mode, count, type, offset, primcount);
+    [dartx.drawElementsInstancedAngle](...args) {
+      return this.drawElementsInstancedANGLE.apply(this, args);
     }
-    [dartx.vertexAttribDivisorAngle](index, divisor) {
-      return this.vertexAttribDivisorANGLE(index, divisor);
+    [dartx.vertexAttribDivisorAngle](...args) {
+      return this.vertexAttribDivisorANGLE.apply(this, args);
     }
   };
   dart.setSignature(web_gl.AngleInstancedArrays, {
@@ -94165,8 +94165,8 @@
     static _() {
       dart.throw(new core.UnsupportedError("Not supported"));
     }
-    [dartx.getTranslatedShaderSource](shader) {
-      return this.getTranslatedShaderSource(shader);
+    [dartx.getTranslatedShaderSource](...args) {
+      return this.getTranslatedShaderSource.apply(this, args);
     }
   };
   dart.setSignature(web_gl.DebugShaders, {
@@ -94192,8 +94192,8 @@
     static _() {
       dart.throw(new core.UnsupportedError("Not supported"));
     }
-    [dartx.drawBuffersWebgl](buffers) {
-      return this.drawBuffersWEBGL(buffers);
+    [dartx.drawBuffersWebgl](...args) {
+      return this.drawBuffersWEBGL.apply(this, args);
     }
   };
   dart.setSignature(web_gl.DrawBuffers, {
@@ -94336,11 +94336,11 @@
     static _() {
       dart.throw(new core.UnsupportedError("Not supported"));
     }
-    [dartx.loseContext]() {
-      return this.loseContext();
+    [dartx.loseContext](...args) {
+      return this.loseContext.apply(this, args);
     }
-    [dartx.restoreContext]() {
-      return this.restoreContext();
+    [dartx.restoreContext](...args) {
+      return this.restoreContext.apply(this, args);
     }
   };
   dart.setSignature(web_gl.LoseContext, {
@@ -94409,17 +94409,17 @@
     static _() {
       dart.throw(new core.UnsupportedError("Not supported"));
     }
-    [dartx.bindVertexArray](arrayObject) {
-      return this.bindVertexArrayOES(arrayObject);
+    [dartx.bindVertexArray](...args) {
+      return this.bindVertexArrayOES.apply(this, args);
     }
-    [dartx.createVertexArray]() {
-      return this.createVertexArrayOES();
+    [dartx.createVertexArray](...args) {
+      return this.createVertexArrayOES.apply(this, args);
     }
-    [dartx.deleteVertexArray](arrayObject) {
-      return this.deleteVertexArrayOES(arrayObject);
+    [dartx.deleteVertexArray](...args) {
+      return this.deleteVertexArrayOES.apply(this, args);
     }
-    [dartx.isVertexArray](arrayObject) {
-      return this.isVertexArrayOES(arrayObject);
+    [dartx.isVertexArray](...args) {
+      return this.isVertexArrayOES.apply(this, args);
     }
   };
   dart.setSignature(web_gl.OesVertexArrayObject, {
@@ -94544,14 +94544,14 @@
     get [dartx.version]() {
       return this.version;
     }
-    [dartx.changeVersion](oldVersion, newVersion, callback, errorCallback, successCallback) {
-      return this.changeVersion(oldVersion, newVersion, callback, errorCallback, successCallback);
+    [dartx.changeVersion](...args) {
+      return this.changeVersion.apply(this, args);
     }
-    [dartx.readTransaction](callback, errorCallback, successCallback) {
-      return this.readTransaction(callback, errorCallback, successCallback);
+    [dartx.readTransaction](...args) {
+      return this.readTransaction.apply(this, args);
     }
-    [dartx.transaction](callback, errorCallback, successCallback) {
-      return this.transaction(callback, errorCallback, successCallback);
+    [dartx.transaction](...args) {
+      return this.transaction.apply(this, args);
     }
   };
   dart.setSignature(web_sql.SqlDatabase, {
@@ -94691,8 +94691,8 @@
     [dartx.item](index) {
       return html_common.convertNativeToDart_Dictionary(this[_item_1](index));
     }
-    [_item_1](index) {
-      return this.item(index);
+    [_item_1](...args) {
+      return this.item.apply(this, args);
     }
   };
   web_sql.SqlResultSetRowList[dart.implements] = () => [ListOfMap()];
@@ -94721,8 +94721,8 @@
     static _() {
       dart.throw(new core.UnsupportedError("Not supported"));
     }
-    [dartx.executeSql](sqlStatement, arguments$, callback, errorCallback) {
-      return this.executeSql(sqlStatement, arguments$, callback, errorCallback);
+    [dartx.executeSql](...args) {
+      return this.executeSql.apply(this, args);
     }
   };
   dart.setSignature(web_sql.SqlTransaction, {
diff --git a/pkg/dev_compiler/lib/js/common/dart_sdk.js b/pkg/dev_compiler/lib/js/common/dart_sdk.js
index 701109d..259b2e1 100644
--- a/pkg/dev_compiler/lib/js/common/dart_sdk.js
+++ b/pkg/dev_compiler/lib/js/common/dart_sdk.js
@@ -15609,113 +15609,113 @@
       if (endian === void 0) endian = typed_data.Endianness.BIG_ENDIAN;
       return this[_getFloat32](byteOffset, dart.equals(typed_data.Endianness.LITTLE_ENDIAN, endian));
     }
-    [_getFloat32](byteOffset, littleEndian) {
-      return this.getFloat32(byteOffset, littleEndian);
+    [_getFloat32](...args) {
+      return this.getFloat32.apply(this, args);
     }
     [dartx.getFloat64](byteOffset, endian) {
       if (endian === void 0) endian = typed_data.Endianness.BIG_ENDIAN;
       return this[_getFloat64](byteOffset, dart.equals(typed_data.Endianness.LITTLE_ENDIAN, endian));
     }
-    [_getFloat64](byteOffset, littleEndian) {
-      return this.getFloat64(byteOffset, littleEndian);
+    [_getFloat64](...args) {
+      return this.getFloat64.apply(this, args);
     }
     [dartx.getInt16](byteOffset, endian) {
       if (endian === void 0) endian = typed_data.Endianness.BIG_ENDIAN;
       return this[_getInt16](byteOffset, dart.equals(typed_data.Endianness.LITTLE_ENDIAN, endian));
     }
-    [_getInt16](byteOffset, littleEndian) {
-      return this.getInt16(byteOffset, littleEndian);
+    [_getInt16](...args) {
+      return this.getInt16.apply(this, args);
     }
     [dartx.getInt32](byteOffset, endian) {
       if (endian === void 0) endian = typed_data.Endianness.BIG_ENDIAN;
       return this[_getInt32](byteOffset, dart.equals(typed_data.Endianness.LITTLE_ENDIAN, endian));
     }
-    [_getInt32](byteOffset, littleEndian) {
-      return this.getInt32(byteOffset, littleEndian);
+    [_getInt32](...args) {
+      return this.getInt32.apply(this, args);
     }
     [dartx.getInt64](byteOffset, endian) {
       if (endian === void 0) endian = typed_data.Endianness.BIG_ENDIAN;
       dart.throw(new core.UnsupportedError('Int64 accessor not supported by dart2js.'));
     }
-    [dartx.getInt8](byteOffset) {
-      return this.getInt8(byteOffset);
+    [dartx.getInt8](...args) {
+      return this.getInt8.apply(this, args);
     }
     [dartx.getUint16](byteOffset, endian) {
       if (endian === void 0) endian = typed_data.Endianness.BIG_ENDIAN;
       return this[_getUint16](byteOffset, dart.equals(typed_data.Endianness.LITTLE_ENDIAN, endian));
     }
-    [_getUint16](byteOffset, littleEndian) {
-      return this.getUint16(byteOffset, littleEndian);
+    [_getUint16](...args) {
+      return this.getUint16.apply(this, args);
     }
     [dartx.getUint32](byteOffset, endian) {
       if (endian === void 0) endian = typed_data.Endianness.BIG_ENDIAN;
       return this[_getUint32](byteOffset, dart.equals(typed_data.Endianness.LITTLE_ENDIAN, endian));
     }
-    [_getUint32](byteOffset, littleEndian) {
-      return this.getUint32(byteOffset, littleEndian);
+    [_getUint32](...args) {
+      return this.getUint32.apply(this, args);
     }
     [dartx.getUint64](byteOffset, endian) {
       if (endian === void 0) endian = typed_data.Endianness.BIG_ENDIAN;
       dart.throw(new core.UnsupportedError('Uint64 accessor not supported by dart2js.'));
     }
-    [dartx.getUint8](byteOffset) {
-      return this.getUint8(byteOffset);
+    [dartx.getUint8](...args) {
+      return this.getUint8.apply(this, args);
     }
     [dartx.setFloat32](byteOffset, value, endian) {
       if (endian === void 0) endian = typed_data.Endianness.BIG_ENDIAN;
       return this[_setFloat32](byteOffset, value, dart.equals(typed_data.Endianness.LITTLE_ENDIAN, endian));
     }
-    [_setFloat32](byteOffset, value, littleEndian) {
-      return this.setFloat32(byteOffset, value, littleEndian);
+    [_setFloat32](...args) {
+      return this.setFloat32.apply(this, args);
     }
     [dartx.setFloat64](byteOffset, value, endian) {
       if (endian === void 0) endian = typed_data.Endianness.BIG_ENDIAN;
       return this[_setFloat64](byteOffset, value, dart.equals(typed_data.Endianness.LITTLE_ENDIAN, endian));
     }
-    [_setFloat64](byteOffset, value, littleEndian) {
-      return this.setFloat64(byteOffset, value, littleEndian);
+    [_setFloat64](...args) {
+      return this.setFloat64.apply(this, args);
     }
     [dartx.setInt16](byteOffset, value, endian) {
       if (endian === void 0) endian = typed_data.Endianness.BIG_ENDIAN;
       return this[_setInt16](byteOffset, value, dart.equals(typed_data.Endianness.LITTLE_ENDIAN, endian));
     }
-    [_setInt16](byteOffset, value, littleEndian) {
-      return this.setInt16(byteOffset, value, littleEndian);
+    [_setInt16](...args) {
+      return this.setInt16.apply(this, args);
     }
     [dartx.setInt32](byteOffset, value, endian) {
       if (endian === void 0) endian = typed_data.Endianness.BIG_ENDIAN;
       return this[_setInt32](byteOffset, value, dart.equals(typed_data.Endianness.LITTLE_ENDIAN, endian));
     }
-    [_setInt32](byteOffset, value, littleEndian) {
-      return this.setInt32(byteOffset, value, littleEndian);
+    [_setInt32](...args) {
+      return this.setInt32.apply(this, args);
     }
     [dartx.setInt64](byteOffset, value, endian) {
       if (endian === void 0) endian = typed_data.Endianness.BIG_ENDIAN;
       dart.throw(new core.UnsupportedError('Int64 accessor not supported by dart2js.'));
     }
-    [dartx.setInt8](byteOffset, value) {
-      return this.setInt8(byteOffset, value);
+    [dartx.setInt8](...args) {
+      return this.setInt8.apply(this, args);
     }
     [dartx.setUint16](byteOffset, value, endian) {
       if (endian === void 0) endian = typed_data.Endianness.BIG_ENDIAN;
       return this[_setUint16](byteOffset, value, dart.equals(typed_data.Endianness.LITTLE_ENDIAN, endian));
     }
-    [_setUint16](byteOffset, value, littleEndian) {
-      return this.setUint16(byteOffset, value, littleEndian);
+    [_setUint16](...args) {
+      return this.setUint16.apply(this, args);
     }
     [dartx.setUint32](byteOffset, value, endian) {
       if (endian === void 0) endian = typed_data.Endianness.BIG_ENDIAN;
       return this[_setUint32](byteOffset, value, dart.equals(typed_data.Endianness.LITTLE_ENDIAN, endian));
     }
-    [_setUint32](byteOffset, value, littleEndian) {
-      return this.setUint32(byteOffset, value, littleEndian);
+    [_setUint32](...args) {
+      return this.setUint32.apply(this, args);
     }
     [dartx.setUint64](byteOffset, value, endian) {
       if (endian === void 0) endian = typed_data.Endianness.BIG_ENDIAN;
       dart.throw(new core.UnsupportedError('Uint64 accessor not supported by dart2js.'));
     }
-    [dartx.setUint8](byteOffset, value) {
-      return this.setUint8(byteOffset, value);
+    [dartx.setUint8](...args) {
+      return this.setUint8.apply(this, args);
     }
     static _create1(arg) {
       return new DataView(new ArrayBuffer(arg));
@@ -38349,21 +38349,21 @@
     get [dartx.source]() {
       return this.source;
     }
-    [dartx.advance](count) {
-      return this.advance(count);
+    [dartx.advance](...args) {
+      return this.advance.apply(this, args);
     }
-    [dartx.continuePrimaryKey](key, primaryKey) {
-      return this.continuePrimaryKey(key, primaryKey);
+    [dartx.continuePrimaryKey](...args) {
+      return this.continuePrimaryKey.apply(this, args);
     }
-    [_delete]() {
-      return this.delete();
+    [_delete](...args) {
+      return this.delete.apply(this, args);
     }
     [_update](value) {
       let value_1 = html_common.convertDartToNative_SerializedScriptValue(value);
       return this[_update_1](value_1);
     }
-    [_update_1](value) {
-      return this.update(value);
+    [_update_1](...args) {
+      return this.update.apply(this, args);
     }
   };
   dart.setSignature(indexed_db.Cursor, {
@@ -38441,14 +38441,14 @@
     static _() {
       dart.throw(new core.UnsupportedError("Not supported"));
     }
-    [_addEventListener](type, listener, capture) {
-      return this.addEventListener(type, listener, capture);
+    [_addEventListener](...args) {
+      return this.addEventListener.apply(this, args);
     }
-    [dartx.dispatchEvent](event) {
-      return this.dispatchEvent(event);
+    [dartx.dispatchEvent](...args) {
+      return this.dispatchEvent.apply(this, args);
     }
-    [_removeEventListener](type, listener, capture) {
-      return this.removeEventListener(type, listener, capture);
+    [_removeEventListener](...args) {
+      return this.removeEventListener.apply(this, args);
     }
   };
   dart.defineNamedConstructor(html$.EventTarget, '_created');
@@ -38521,8 +38521,8 @@
       }
       return this[_transaction](storeNames, mode);
     }
-    [_transaction](stores, mode) {
-      return this.transaction(stores, mode);
+    [_transaction](...args) {
+      return this.transaction.apply(this, args);
     }
     static _() {
       dart.throw(new core.UnsupportedError("Not supported"));
@@ -38536,8 +38536,8 @@
     get [dartx.version]() {
       return this.version;
     }
-    [dartx.close]() {
-      return this.close();
+    [dartx.close](...args) {
+      return this.close.apply(this, args);
     }
     [_createObjectStore](name, options) {
       if (options === void 0) options = null;
@@ -38547,14 +38547,14 @@
       }
       return this[_createObjectStore_2](name);
     }
-    [_createObjectStore_1](name, options) {
-      return this.createObjectStore(name, options);
+    [_createObjectStore_1](...args) {
+      return this.createObjectStore.apply(this, args);
     }
-    [_createObjectStore_2](name) {
-      return this.createObjectStore(name);
+    [_createObjectStore_2](...args) {
+      return this.createObjectStore.apply(this, args);
     }
-    [dartx.deleteObjectStore](name) {
-      return this.deleteObjectStore(name);
+    [dartx.deleteObjectStore](...args) {
+      return this.deleteObjectStore.apply(this, args);
     }
     get [dartx.onAbort]() {
       return indexed_db.Database.abortEvent.forTarget(this);
@@ -38693,17 +38693,17 @@
     static _() {
       dart.throw(new core.UnsupportedError("Not supported"));
     }
-    [dartx.cmp](first, second) {
-      return this.cmp(first, second);
+    [dartx.cmp](...args) {
+      return this.cmp.apply(this, args);
     }
-    [_deleteDatabase](name) {
-      return this.deleteDatabase(name);
+    [_deleteDatabase](...args) {
+      return this.deleteDatabase.apply(this, args);
     }
-    [_open](name, version) {
-      return this.open(name, version);
+    [_open](...args) {
+      return this.open.apply(this, args);
     }
-    [_webkitGetDatabaseNames]() {
-      return this.webkitGetDatabaseNames();
+    [_webkitGetDatabaseNames](...args) {
+      return this.webkitGetDatabaseNames.apply(this, args);
     }
   };
   dart.setSignature(indexed_db.IdbFactory, {
@@ -38846,26 +38846,26 @@
     get [dartx.unique]() {
       return this.unique;
     }
-    [_count$0](key) {
-      return this.count(key);
+    [_count$0](...args) {
+      return this.count.apply(this, args);
     }
-    [_get$](key) {
-      return this.get(key);
+    [_get$](...args) {
+      return this.get.apply(this, args);
     }
-    [dartx.getAll](range, maxCount) {
-      return this.getAll(range, maxCount);
+    [dartx.getAll](...args) {
+      return this.getAll.apply(this, args);
     }
-    [dartx.getAllKeys](range, maxCount) {
-      return this.getAllKeys(range, maxCount);
+    [dartx.getAllKeys](...args) {
+      return this.getAllKeys.apply(this, args);
     }
-    [_getKey$](key) {
-      return this.getKey(key);
+    [_getKey$](...args) {
+      return this.getKey.apply(this, args);
     }
-    [_openCursor](range, direction) {
-      return this.openCursor(range, direction);
+    [_openCursor](...args) {
+      return this.openCursor.apply(this, args);
     }
-    [_openKeyCursor](range, direction) {
-      return this.openKeyCursor(range, direction);
+    [_openKeyCursor](...args) {
+      return this.openKeyCursor.apply(this, args);
     }
   };
   dart.setSignature(indexed_db.Index, {
@@ -39119,17 +39119,17 @@
       let value_1 = html_common.convertDartToNative_SerializedScriptValue(value);
       return this[_add_2](value_1);
     }
-    [_add_1](value, key) {
-      return this.add(value, key);
+    [_add_1](...args) {
+      return this.add.apply(this, args);
     }
-    [_add_2](value) {
-      return this.add(value);
+    [_add_2](...args) {
+      return this.add.apply(this, args);
     }
-    [_clear$0]() {
-      return this.clear();
+    [_clear$0](...args) {
+      return this.clear.apply(this, args);
     }
-    [_count$0](key) {
-      return this.count(key);
+    [_count$0](...args) {
+      return this.count.apply(this, args);
     }
     [_createIndex](name, keyPath, options) {
       if (options === void 0) options = null;
@@ -39139,35 +39139,35 @@
       }
       return this[_createIndex_2](name, keyPath);
     }
-    [_createIndex_1](name, keyPath, options) {
-      return this.createIndex(name, keyPath, options);
+    [_createIndex_1](...args) {
+      return this.createIndex.apply(this, args);
     }
-    [_createIndex_2](name, keyPath) {
-      return this.createIndex(name, keyPath);
+    [_createIndex_2](...args) {
+      return this.createIndex.apply(this, args);
     }
-    [_delete](key) {
-      return this.delete(key);
+    [_delete](...args) {
+      return this.delete.apply(this, args);
     }
-    [dartx.deleteIndex](name) {
-      return this.deleteIndex(name);
+    [dartx.deleteIndex](...args) {
+      return this.deleteIndex.apply(this, args);
     }
-    [_get$](key) {
-      return this.get(key);
+    [_get$](...args) {
+      return this.get.apply(this, args);
     }
-    [dartx.getAll](range, maxCount) {
-      return this.getAll(range, maxCount);
+    [dartx.getAll](...args) {
+      return this.getAll.apply(this, args);
     }
-    [dartx.getAllKeys](range, maxCount) {
-      return this.getAllKeys(range, maxCount);
+    [dartx.getAllKeys](...args) {
+      return this.getAllKeys.apply(this, args);
     }
-    [dartx.index](name) {
-      return this.index(name);
+    [dartx.index](...args) {
+      return this.index.apply(this, args);
     }
-    [_openCursor](range, direction) {
-      return this.openCursor(range, direction);
+    [_openCursor](...args) {
+      return this.openCursor.apply(this, args);
     }
-    [dartx.openKeyCursor](range, direction) {
-      return this.openKeyCursor(range, direction);
+    [dartx.openKeyCursor](...args) {
+      return this.openKeyCursor.apply(this, args);
     }
     [_put](value, key) {
       if (key === void 0) key = null;
@@ -39179,11 +39179,11 @@
       let value_1 = html_common.convertDartToNative_SerializedScriptValue(value);
       return this[_put_2](value_1);
     }
-    [_put_1](value, key) {
-      return this.put(value, key);
+    [_put_1](...args) {
+      return this.put.apply(this, args);
     }
-    [_put_2](value) {
-      return this.put(value);
+    [_put_2](...args) {
+      return this.put.apply(this, args);
     }
     static _cursorStreamFromResult(T) {
       return (request, autoAdvance) => {
@@ -39398,11 +39398,11 @@
     get [dartx.objectStoreNames]() {
       return this.objectStoreNames;
     }
-    [dartx.abort]() {
-      return this.abort();
+    [dartx.abort](...args) {
+      return this.abort.apply(this, args);
     }
-    [dartx.objectStore](name) {
-      return this.objectStore(name);
+    [dartx.objectStore](...args) {
+      return this.objectStore.apply(this, args);
     }
     get [dartx.onAbort]() {
       return indexed_db.Transaction.abortEvent.forTarget(this);
@@ -39549,17 +39549,17 @@
     get [dartx.type]() {
       return this.type;
     }
-    [_initEvent](type, bubbles, cancelable) {
-      return this.initEvent(type, bubbles, cancelable);
+    [_initEvent](...args) {
+      return this.initEvent.apply(this, args);
     }
-    [dartx.preventDefault]() {
-      return this.preventDefault();
+    [dartx.preventDefault](...args) {
+      return this.preventDefault.apply(this, args);
     }
-    [dartx.stopImmediatePropagation]() {
-      return this.stopImmediatePropagation();
+    [dartx.stopImmediatePropagation](...args) {
+      return this.stopImmediatePropagation.apply(this, args);
     }
-    [dartx.stopPropagation]() {
-      return this.stopPropagation();
+    [dartx.stopPropagation](...args) {
+      return this.stopPropagation.apply(this, args);
     }
   };
   dart.setSignature(html$.Event, {
@@ -39860,26 +39860,26 @@
     set [dartx.text](value) {
       this.textContent = value;
     }
-    [dartx.append](node) {
-      return this.appendChild(node);
+    [dartx.append](...args) {
+      return this.appendChild.apply(this, args);
     }
-    [dartx.clone](deep) {
-      return this.cloneNode(deep);
+    [dartx.clone](...args) {
+      return this.cloneNode.apply(this, args);
     }
-    [dartx.contains](other) {
-      return this.contains(other);
+    [dartx.contains](...args) {
+      return this.contains.apply(this, args);
     }
-    [dartx.hasChildNodes]() {
-      return this.hasChildNodes();
+    [dartx.hasChildNodes](...args) {
+      return this.hasChildNodes.apply(this, args);
     }
-    [dartx.insertBefore](node, child) {
-      return this.insertBefore(node, child);
+    [dartx.insertBefore](...args) {
+      return this.insertBefore.apply(this, args);
     }
-    [_removeChild](child) {
-      return this.removeChild(child);
+    [_removeChild](...args) {
+      return this.removeChild.apply(this, args);
     }
-    [_replaceChild](node, child) {
-      return this.replaceChild(node, child);
+    [_replaceChild](...args) {
+      return this.replaceChild.apply(this, args);
     }
   };
   dart.defineNamedConstructor(html$.Node, '_created');
@@ -40359,8 +40359,8 @@
       let convertedTiming = core.Map.is(timing) ? html_common.convertDartToNative_Dictionary(timing) : timing;
       return convertedTiming == null ? this[_animate](convertedFrames) : this[_animate](convertedFrames, convertedTiming);
     }
-    [_animate](effect, timing) {
-      return this.animate(effect, timing);
+    [_animate](...args) {
+      return this.animate.apply(this, args);
     }
     [dartx.attributeChanged](name, oldValue, newValue) {}
     get [_xtag]() {
@@ -40420,8 +40420,8 @@
         this[_insertAdjacentNode](where, html$.Text.new(text));
       }
     }
-    [_insertAdjacentText](where, text) {
-      return this.insertAdjacentText(where, text);
+    [_insertAdjacentText](...args) {
+      return this.insertAdjacentText.apply(this, args);
     }
     [dartx.insertAdjacentHtml](where, html, opts) {
       let validator = opts && 'validator' in opts ? opts.validator : null;
@@ -40432,8 +40432,8 @@
         this[_insertAdjacentNode](where, this[dartx.createFragment](html, {validator: validator, treeSanitizer: treeSanitizer}));
       }
     }
-    [_insertAdjacentHtml](where, text) {
-      return this.insertAdjacentHTML(where, text);
+    [_insertAdjacentHtml](...args) {
+      return this.insertAdjacentHTML.apply(this, args);
     }
     [dartx.insertAdjacentElement](where, element) {
       if (!!this.insertAdjacentElement) {
@@ -40443,8 +40443,8 @@
       }
       return element;
     }
-    [_insertAdjacentElement](where, element) {
-      return this.insertAdjacentElement(where, element);
+    [_insertAdjacentElement](...args) {
+      return this.insertAdjacentElement.apply(this, args);
     }
     [_insertAdjacentNode](where, node) {
       switch (where[dartx.toLowerCase]()) {
@@ -40758,14 +40758,14 @@
     set [dartx.dropzone](value) {
       this.webkitdropzone = value;
     }
-    [dartx.blur]() {
-      return this.blur();
+    [dartx.blur](...args) {
+      return this.blur.apply(this, args);
     }
-    [dartx.click]() {
-      return this.click();
+    [dartx.click](...args) {
+      return this.click.apply(this, args);
     }
-    [dartx.focus]() {
-      return this.focus();
+    [dartx.focus](...args) {
+      return this.focus.apply(this, args);
     }
     get [_attributes$]() {
       return this.attributes;
@@ -40830,50 +40830,50 @@
     get [dartx.tagName]() {
       return this.tagName;
     }
-    [dartx.closest](selectors) {
-      return this.closest(selectors);
+    [dartx.closest](...args) {
+      return this.closest.apply(this, args);
     }
-    [dartx.getAnimations]() {
-      return this.getAnimations();
+    [dartx.getAnimations](...args) {
+      return this.getAnimations.apply(this, args);
     }
-    [dartx.getAttribute](name) {
-      return this.getAttribute(name);
+    [dartx.getAttribute](...args) {
+      return this.getAttribute.apply(this, args);
     }
-    [dartx.getAttributeNS](namespaceURI, localName) {
-      return this.getAttributeNS(namespaceURI, localName);
+    [dartx.getAttributeNS](...args) {
+      return this.getAttributeNS.apply(this, args);
     }
-    [dartx.getBoundingClientRect]() {
-      return this.getBoundingClientRect();
+    [dartx.getBoundingClientRect](...args) {
+      return this.getBoundingClientRect.apply(this, args);
     }
-    [dartx.getClientRects]() {
-      return this.getClientRects();
+    [dartx.getClientRects](...args) {
+      return this.getClientRects.apply(this, args);
     }
-    [dartx.getDestinationInsertionPoints]() {
-      return this.getDestinationInsertionPoints();
+    [dartx.getDestinationInsertionPoints](...args) {
+      return this.getDestinationInsertionPoints.apply(this, args);
     }
-    [dartx.getElementsByClassName](classNames) {
-      return this.getElementsByClassName(classNames);
+    [dartx.getElementsByClassName](...args) {
+      return this.getElementsByClassName.apply(this, args);
     }
-    [_getElementsByTagName](localName) {
-      return this.getElementsByTagName(localName);
+    [_getElementsByTagName](...args) {
+      return this.getElementsByTagName.apply(this, args);
     }
-    [_hasAttribute](name) {
-      return this.hasAttribute(name);
+    [_hasAttribute](...args) {
+      return this.hasAttribute.apply(this, args);
     }
-    [_hasAttributeNS](namespaceURI, localName) {
-      return this.hasAttributeNS(namespaceURI, localName);
+    [_hasAttributeNS](...args) {
+      return this.hasAttributeNS.apply(this, args);
     }
-    [_removeAttribute](name) {
-      return this.removeAttribute(name);
+    [_removeAttribute](...args) {
+      return this.removeAttribute.apply(this, args);
     }
-    [_removeAttributeNS](namespaceURI, localName) {
-      return this.removeAttributeNS(namespaceURI, localName);
+    [_removeAttributeNS](...args) {
+      return this.removeAttributeNS.apply(this, args);
     }
-    [dartx.requestFullscreen]() {
-      return this.requestFullscreen();
+    [dartx.requestFullscreen](...args) {
+      return this.requestFullscreen.apply(this, args);
     }
-    [dartx.requestPointerLock]() {
-      return this.requestPointerLock();
+    [dartx.requestPointerLock](...args) {
+      return this.requestPointerLock.apply(this, args);
     }
     [dartx.scroll](options_OR_x, y) {
       if (options_OR_x === void 0) options_OR_x = null;
@@ -40893,14 +40893,14 @@
       }
       dart.throw(new core.ArgumentError("Incorrect number or type of arguments"));
     }
-    [_scroll_1]() {
-      return this.scroll();
+    [_scroll_1](...args) {
+      return this.scroll.apply(this, args);
     }
-    [_scroll_2](options) {
-      return this.scroll(options);
+    [_scroll_2](...args) {
+      return this.scroll.apply(this, args);
     }
-    [_scroll_3](x, y) {
-      return this.scroll(x, y);
+    [_scroll_3](...args) {
+      return this.scroll.apply(this, args);
     }
     [dartx.scrollBy](options_OR_x, y) {
       if (options_OR_x === void 0) options_OR_x = null;
@@ -40920,20 +40920,20 @@
       }
       dart.throw(new core.ArgumentError("Incorrect number or type of arguments"));
     }
-    [_scrollBy_1]() {
-      return this.scrollBy();
+    [_scrollBy_1](...args) {
+      return this.scrollBy.apply(this, args);
     }
-    [_scrollBy_2](options) {
-      return this.scrollBy(options);
+    [_scrollBy_2](...args) {
+      return this.scrollBy.apply(this, args);
     }
-    [_scrollBy_3](x, y) {
-      return this.scrollBy(x, y);
+    [_scrollBy_3](...args) {
+      return this.scrollBy.apply(this, args);
     }
-    [_scrollIntoView](alignWithTop) {
-      return this.scrollIntoView(alignWithTop);
+    [_scrollIntoView](...args) {
+      return this.scrollIntoView.apply(this, args);
     }
-    [_scrollIntoViewIfNeeded](centerIfNeeded) {
-      return this.scrollIntoViewIfNeeded(centerIfNeeded);
+    [_scrollIntoViewIfNeeded](...args) {
+      return this.scrollIntoViewIfNeeded.apply(this, args);
     }
     [dartx.scrollTo](options_OR_x, y) {
       if (options_OR_x === void 0) options_OR_x = null;
@@ -40953,26 +40953,26 @@
       }
       dart.throw(new core.ArgumentError("Incorrect number or type of arguments"));
     }
-    [_scrollTo_1]() {
-      return this.scrollTo();
+    [_scrollTo_1](...args) {
+      return this.scrollTo.apply(this, args);
     }
-    [_scrollTo_2](options) {
-      return this.scrollTo(options);
+    [_scrollTo_2](...args) {
+      return this.scrollTo.apply(this, args);
     }
-    [_scrollTo_3](x, y) {
-      return this.scrollTo(x, y);
+    [_scrollTo_3](...args) {
+      return this.scrollTo.apply(this, args);
     }
-    [dartx.setAttribute](name, value) {
-      return this.setAttribute(name, value);
+    [dartx.setAttribute](...args) {
+      return this.setAttribute.apply(this, args);
     }
-    [dartx.setAttributeNS](namespaceURI, name, value) {
-      return this.setAttributeNS(namespaceURI, name, value);
+    [dartx.setAttributeNS](...args) {
+      return this.setAttributeNS.apply(this, args);
     }
-    [dartx.after](nodes) {
-      return this.after(nodes);
+    [dartx.after](...args) {
+      return this.after.apply(this, args);
     }
-    [dartx.before](nodes) {
-      return this.before(nodes);
+    [dartx.before](...args) {
+      return this.before.apply(this, args);
     }
     get [dartx.nextElementSibling]() {
       return this.nextElementSibling;
@@ -40992,11 +40992,11 @@
     get [_lastElementChild]() {
       return this.lastElementChild;
     }
-    [dartx.querySelector](selectors) {
-      return this.querySelector(selectors);
+    [dartx.querySelector](...args) {
+      return this.querySelector.apply(this, args);
     }
-    [_querySelectorAll](selectors) {
-      return this.querySelectorAll(selectors);
+    [_querySelectorAll](...args) {
+      return this.querySelectorAll.apply(this, args);
     }
     get [dartx.onAbort]() {
       return html$.Element.abortEvent.forElement(this);
@@ -42052,20 +42052,20 @@
     set [dartx.startTime](value) {
       this.startTime = value;
     }
-    [dartx.cancel]() {
-      return this.cancel();
+    [dartx.cancel](...args) {
+      return this.cancel.apply(this, args);
     }
-    [dartx.finish]() {
-      return this.finish();
+    [dartx.finish](...args) {
+      return this.finish.apply(this, args);
     }
-    [dartx.pause]() {
-      return this.pause();
+    [dartx.pause](...args) {
+      return this.pause.apply(this, args);
     }
-    [dartx.play]() {
-      return this.play();
+    [dartx.play](...args) {
+      return this.play.apply(this, args);
     }
-    [dartx.reverse]() {
-      return this.reverse();
+    [dartx.reverse](...args) {
+      return this.reverse.apply(this, args);
     }
   };
   dart.setSignature(html$.Animation, {
@@ -42316,11 +42316,11 @@
     set [dartx.playbackRate](value) {
       this.playbackRate = value;
     }
-    [dartx.getAnimations]() {
-      return this.getAnimations();
+    [dartx.getAnimations](...args) {
+      return this.getAnimations.apply(this, args);
     }
-    [dartx.play](source) {
-      return this.play(source);
+    [dartx.play](...args) {
+      return this.play.apply(this, args);
     }
   };
   dart.setSignature(html$.AnimationTimeline, {
@@ -42382,14 +42382,14 @@
     get [dartx.status]() {
       return this.status;
     }
-    [dartx.abort]() {
-      return this.abort();
+    [dartx.abort](...args) {
+      return this.abort.apply(this, args);
     }
-    [dartx.swapCache]() {
-      return this.swapCache();
+    [dartx.swapCache](...args) {
+      return this.swapCache.apply(this, args);
     }
-    [dartx.update]() {
-      return this.update();
+    [dartx.update](...args) {
+      return this.update.apply(this, args);
     }
     get [dartx.onCached]() {
       return html$.ApplicationCache.cachedEvent.forTarget(this);
@@ -42936,35 +42936,35 @@
     get [dartx.videoDecodedByteCount]() {
       return this.webkitVideoDecodedByteCount;
     }
-    [dartx.addTextTrack](kind, label, language) {
-      return this.addTextTrack(kind, label, language);
+    [dartx.addTextTrack](...args) {
+      return this.addTextTrack.apply(this, args);
     }
-    [dartx.canPlayType](type, keySystem) {
-      return this.canPlayType(type, keySystem);
+    [dartx.canPlayType](...args) {
+      return this.canPlayType.apply(this, args);
     }
-    [dartx.load]() {
-      return this.load();
+    [dartx.load](...args) {
+      return this.load.apply(this, args);
     }
-    [dartx.pause]() {
-      return this.pause();
+    [dartx.pause](...args) {
+      return this.pause.apply(this, args);
     }
-    [dartx.play]() {
-      return this.play();
+    [dartx.play](...args) {
+      return this.play.apply(this, args);
     }
-    [dartx.setMediaKeys](mediaKeys) {
-      return this.setMediaKeys(mediaKeys);
+    [dartx.setMediaKeys](...args) {
+      return this.setMediaKeys.apply(this, args);
     }
-    [dartx.setSinkId](sinkId) {
-      return this.setSinkId(sinkId);
+    [dartx.setSinkId](...args) {
+      return this.setSinkId.apply(this, args);
     }
-    [dartx.addKey](keySystem, key, initData, sessionId) {
-      return this.webkitAddKey(keySystem, key, initData, sessionId);
+    [dartx.addKey](...args) {
+      return this.webkitAddKey.apply(this, args);
     }
-    [dartx.cancelKeyRequest](keySystem, sessionId) {
-      return this.webkitCancelKeyRequest(keySystem, sessionId);
+    [dartx.cancelKeyRequest](...args) {
+      return this.webkitCancelKeyRequest.apply(this, args);
     }
-    [dartx.generateKeyRequest](keySystem, initData) {
-      return this.webkitGenerateKeyRequest(keySystem, initData);
+    [dartx.generateKeyRequest](...args) {
+      return this.webkitGenerateKeyRequest.apply(this, args);
     }
     get [dartx.onKeyAdded]() {
       return html$.MediaElement.keyAddedEvent.forElement(this);
@@ -43168,11 +43168,11 @@
     get [dartx.length]() {
       return this.length;
     }
-    [__getter__](index) {
-      return this.__getter__(index);
+    [__getter__](...args) {
+      return this.__getter__.apply(this, args);
     }
-    [dartx.getTrackById](id) {
-      return this.getTrackById(id);
+    [dartx.getTrackById](...args) {
+      return this.getTrackById.apply(this, args);
     }
     get [dartx.onChange]() {
       return html$.AudioTrackList.changeEvent.forTarget(this);
@@ -43372,8 +43372,8 @@
     get [dartx.userChoice]() {
       return this.userChoice;
     }
-    [dartx.prompt]() {
-      return this.prompt();
+    [dartx.prompt](...args) {
+      return this.prompt.apply(this, args);
     }
   };
   dart.setSignature(html$.BeforeInstallPromptEvent, {
@@ -43428,11 +43428,11 @@
     get [dartx.type]() {
       return this.type;
     }
-    [dartx.close]() {
-      return this.close();
+    [dartx.close](...args) {
+      return this.close.apply(this, args);
     }
-    [dartx.slice](start, end, contentType) {
-      return this.slice(start, end, contentType);
+    [dartx.slice](...args) {
+      return this.slice.apply(this, args);
     }
     static new(blobParts, type, endings) {
       if (type === void 0) type = null;
@@ -43492,8 +43492,8 @@
       let options_1 = html_common.convertDartToNative_Dictionary(options);
       return this[_requestDevice_1](options_1);
     }
-    [_requestDevice_1](options) {
-      return this.requestDevice(options);
+    [_requestDevice_1](...args) {
+      return this.requestDevice.apply(this, args);
     }
   };
   dart.setSignature(html$.Bluetooth, {
@@ -43543,8 +43543,8 @@
     get [dartx.vendorIDSource]() {
       return this.vendorIDSource;
     }
-    [dartx.connectGatt]() {
-      return this.connectGATT();
+    [dartx.connectGatt](...args) {
+      return this.connectGATT.apply(this, args);
     }
   };
   dart.setSignature(html$.BluetoothDevice, {
@@ -43574,11 +43574,11 @@
     get [dartx.uuid]() {
       return this.uuid;
     }
-    [dartx.readValue]() {
-      return this.readValue();
+    [dartx.readValue](...args) {
+      return this.readValue.apply(this, args);
     }
-    [dartx.writeValue](value) {
-      return this.writeValue(value);
+    [dartx.writeValue](...args) {
+      return this.writeValue.apply(this, args);
     }
   };
   dart.setSignature(html$.BluetoothGattCharacteristic, {
@@ -43601,8 +43601,8 @@
     get [dartx.connected]() {
       return this.connected;
     }
-    [dartx.getPrimaryService](service) {
-      return this.getPrimaryService(service);
+    [dartx.getPrimaryService](...args) {
+      return this.getPrimaryService.apply(this, args);
     }
   };
   dart.setSignature(html$.BluetoothGattRemoteServer, {
@@ -43626,8 +43626,8 @@
     get [dartx.uuid]() {
       return this.uuid;
     }
-    [dartx.getCharacteristic](characteristic) {
-      return this.getCharacteristic(characteristic);
+    [dartx.getCharacteristic](...args) {
+      return this.getCharacteristic.apply(this, args);
     }
   };
   dart.setSignature(html$.BluetoothGattService, {
@@ -43669,17 +43669,17 @@
     get [dartx.bodyUsed]() {
       return this.bodyUsed;
     }
-    [dartx.arrayBuffer]() {
-      return this.arrayBuffer();
+    [dartx.arrayBuffer](...args) {
+      return this.arrayBuffer.apply(this, args);
     }
-    [dartx.blob]() {
-      return this.blob();
+    [dartx.blob](...args) {
+      return this.blob.apply(this, args);
     }
-    [dartx.json]() {
-      return this.json();
+    [dartx.json](...args) {
+      return this.json.apply(this, args);
     }
-    [dartx.text]() {
-      return this.text();
+    [dartx.text](...args) {
+      return this.text.apply(this, args);
     }
   };
   dart.setSignature(html$.Body, {
@@ -43953,14 +43953,14 @@
     get [dartx.willValidate]() {
       return this.willValidate;
     }
-    [dartx.checkValidity]() {
-      return this.checkValidity();
+    [dartx.checkValidity](...args) {
+      return this.checkValidity.apply(this, args);
     }
-    [dartx.reportValidity]() {
-      return this.reportValidity();
+    [dartx.reportValidity](...args) {
+      return this.reportValidity.apply(this, args);
     }
-    [dartx.setCustomValidity](error) {
-      return this.setCustomValidity(error);
+    [dartx.setCustomValidity](...args) {
+      return this.setCustomValidity.apply(this, args);
     }
   };
   dart.defineNamedConstructor(html$.ButtonElement, 'created');
@@ -44021,26 +44021,26 @@
     get [dartx.length]() {
       return this.length;
     }
-    [dartx.appendData](data) {
-      return this.appendData(data);
+    [dartx.appendData](...args) {
+      return this.appendData.apply(this, args);
     }
-    [dartx.deleteData](offset, count) {
-      return this.deleteData(offset, count);
+    [dartx.deleteData](...args) {
+      return this.deleteData.apply(this, args);
     }
-    [dartx.insertData](offset, data) {
-      return this.insertData(offset, data);
+    [dartx.insertData](...args) {
+      return this.insertData.apply(this, args);
     }
-    [dartx.replaceData](offset, count, data) {
-      return this.replaceData(offset, count, data);
+    [dartx.replaceData](...args) {
+      return this.replaceData.apply(this, args);
     }
-    [dartx.substringData](offset, count) {
-      return this.substringData(offset, count);
+    [dartx.substringData](...args) {
+      return this.substringData.apply(this, args);
     }
-    [dartx.after](nodes) {
-      return this.after(nodes);
+    [dartx.after](...args) {
+      return this.after.apply(this, args);
     }
-    [dartx.before](nodes) {
-      return this.before(nodes);
+    [dartx.before](...args) {
+      return this.before.apply(this, args);
     }
     get [dartx.nextElementSibling]() {
       return this.nextElementSibling;
@@ -44084,11 +44084,11 @@
     get [dartx.wholeText]() {
       return this.wholeText;
     }
-    [dartx.getDestinationInsertionPoints]() {
-      return this.getDestinationInsertionPoints();
+    [dartx.getDestinationInsertionPoints](...args) {
+      return this.getDestinationInsertionPoints.apply(this, args);
     }
-    [dartx.splitText](offset) {
-      return this.splitText(offset);
+    [dartx.splitText](...args) {
+      return this.splitText.apply(this, args);
     }
   };
   dart.setSignature(html$.Text, {
@@ -44125,14 +44125,14 @@
     static _() {
       dart.throw(new core.UnsupportedError("Not supported"));
     }
-    [dartx.delete](cacheName) {
-      return this.delete(cacheName);
+    [dartx.delete](...args) {
+      return this.delete.apply(this, args);
     }
-    [dartx.has](cacheName) {
-      return this.has(cacheName);
+    [dartx.has](...args) {
+      return this.has.apply(this, args);
     }
-    [dartx.keys]() {
-      return this.keys();
+    [dartx.keys](...args) {
+      return this.keys.apply(this, args);
     }
     [dartx.match](request, options) {
       if (options === void 0) options = null;
@@ -44142,14 +44142,14 @@
       }
       return this[_match_2](request);
     }
-    [_match_1](request, options) {
-      return this.match(request, options);
+    [_match_1](...args) {
+      return this.match.apply(this, args);
     }
-    [_match_2](request) {
-      return this.match(request);
+    [_match_2](...args) {
+      return this.match.apply(this, args);
     }
-    [dartx.open](cacheName) {
-      return this.open(cacheName);
+    [dartx.open](...args) {
+      return this.open.apply(this, args);
     }
   };
   dart.setSignature(html$.CacheStorage, {
@@ -44215,14 +44215,14 @@
       }
       return this[_getContext_2](contextId);
     }
-    [_getContext_1](contextId, attributes) {
-      return this.getContext(contextId, attributes);
+    [_getContext_1](...args) {
+      return this.getContext.apply(this, args);
     }
-    [_getContext_2](contextId) {
-      return this.getContext(contextId);
+    [_getContext_2](...args) {
+      return this.getContext.apply(this, args);
     }
-    [_toDataUrl](type, arguments_OR_quality) {
-      return this.toDataURL(type, arguments_OR_quality);
+    [_toDataUrl](...args) {
+      return this.toDataURL.apply(this, args);
     }
     get [dartx.onWebGlContextLost]() {
       return html$.CanvasElement.webGlContextLostEvent.forElement(this);
@@ -44299,8 +44299,8 @@
     static _() {
       dart.throw(new core.UnsupportedError("Not supported"));
     }
-    [dartx.addColorStop](offset, color) {
-      return this.addColorStop(offset, color);
+    [dartx.addColorStop](...args) {
+      return this.addColorStop.apply(this, args);
     }
   };
   dart.setSignature(html$.CanvasGradient, {
@@ -44315,8 +44315,8 @@
     static _() {
       dart.throw(new core.UnsupportedError("Not supported"));
     }
-    [dartx.setTransform](transform) {
-      return this.setTransform(transform);
+    [dartx.setTransform](...args) {
+      return this.setTransform.apply(this, args);
     }
   };
   dart.setSignature(html$.CanvasPattern, {
@@ -44545,23 +44545,23 @@
       this[_addHitRegion_2]();
       return;
     }
-    [_addHitRegion_1](options) {
-      return this.addHitRegion(options);
+    [_addHitRegion_1](...args) {
+      return this.addHitRegion.apply(this, args);
     }
-    [_addHitRegion_2]() {
-      return this.addHitRegion();
+    [_addHitRegion_2](...args) {
+      return this.addHitRegion.apply(this, args);
     }
-    [dartx.beginPath]() {
-      return this.beginPath();
+    [dartx.beginPath](...args) {
+      return this.beginPath.apply(this, args);
     }
-    [dartx.clearHitRegions]() {
-      return this.clearHitRegions();
+    [dartx.clearHitRegions](...args) {
+      return this.clearHitRegions.apply(this, args);
     }
-    [dartx.clearRect](x, y, width, height) {
-      return this.clearRect(x, y, width, height);
+    [dartx.clearRect](...args) {
+      return this.clearRect.apply(this, args);
     }
-    [dartx.clip](path_OR_winding, winding) {
-      return this.clip(path_OR_winding, winding);
+    [dartx.clip](...args) {
+      return this.clip.apply(this, args);
     }
     [dartx.createImageData](imagedata_OR_sw, sh) {
       if (sh === void 0) sh = null;
@@ -44574,53 +44574,53 @@
       }
       dart.throw(new core.ArgumentError("Incorrect number or type of arguments"));
     }
-    [_createImageData_1](imagedata) {
-      return this.createImageData(imagedata);
+    [_createImageData_1](...args) {
+      return this.createImageData.apply(this, args);
     }
-    [_createImageData_2](sw, sh) {
-      return this.createImageData(sw, sh);
+    [_createImageData_2](...args) {
+      return this.createImageData.apply(this, args);
     }
-    [dartx.createLinearGradient](x0, y0, x1, y1) {
-      return this.createLinearGradient(x0, y0, x1, y1);
+    [dartx.createLinearGradient](...args) {
+      return this.createLinearGradient.apply(this, args);
     }
-    [dartx.createPattern](image, repetitionType) {
-      return this.createPattern(image, repetitionType);
+    [dartx.createPattern](...args) {
+      return this.createPattern.apply(this, args);
     }
-    [dartx.createRadialGradient](x0, y0, r0, x1, y1, r1) {
-      return this.createRadialGradient(x0, y0, r0, x1, y1, r1);
+    [dartx.createRadialGradient](...args) {
+      return this.createRadialGradient.apply(this, args);
     }
-    [dartx.drawFocusIfNeeded](element_OR_path, element) {
-      return this.drawFocusIfNeeded(element_OR_path, element);
+    [dartx.drawFocusIfNeeded](...args) {
+      return this.drawFocusIfNeeded.apply(this, args);
     }
-    [dartx.fillRect](x, y, width, height) {
-      return this.fillRect(x, y, width, height);
+    [dartx.fillRect](...args) {
+      return this.fillRect.apply(this, args);
     }
     [dartx.getContextAttributes]() {
       return html_common.convertNativeToDart_Dictionary(this[_getContextAttributes_1]());
     }
-    [_getContextAttributes_1]() {
-      return this.getContextAttributes();
+    [_getContextAttributes_1](...args) {
+      return this.getContextAttributes.apply(this, args);
     }
     [dartx.getImageData](sx, sy, sw, sh) {
       return html_common.convertNativeToDart_ImageData(this[_getImageData_1](sx, sy, sw, sh));
     }
-    [_getImageData_1](sx, sy, sw, sh) {
-      return this.getImageData(sx, sy, sw, sh);
+    [_getImageData_1](...args) {
+      return this.getImageData.apply(this, args);
     }
-    [_getLineDash]() {
-      return this.getLineDash();
+    [_getLineDash](...args) {
+      return this.getLineDash.apply(this, args);
     }
-    [dartx.isContextLost]() {
-      return this.isContextLost();
+    [dartx.isContextLost](...args) {
+      return this.isContextLost.apply(this, args);
     }
-    [dartx.isPointInPath](path_OR_x, x_OR_y, winding_OR_y, winding) {
-      return this.isPointInPath(path_OR_x, x_OR_y, winding_OR_y, winding);
+    [dartx.isPointInPath](...args) {
+      return this.isPointInPath.apply(this, args);
     }
-    [dartx.isPointInStroke](path_OR_x, x_OR_y, y) {
-      return this.isPointInStroke(path_OR_x, x_OR_y, y);
+    [dartx.isPointInStroke](...args) {
+      return this.isPointInStroke.apply(this, args);
     }
-    [dartx.measureText](text) {
-      return this.measureText(text);
+    [dartx.measureText](...args) {
+      return this.measureText.apply(this, args);
     }
     [dartx.putImageData](imagedata, dx, dy, dirtyX, dirtyY, dirtyWidth, dirtyHeight) {
       if (dirtyX === void 0) dirtyX = null;
@@ -44639,77 +44639,77 @@
       }
       dart.throw(new core.ArgumentError("Incorrect number or type of arguments"));
     }
-    [_putImageData_1](imagedata, dx, dy) {
-      return this.putImageData(imagedata, dx, dy);
+    [_putImageData_1](...args) {
+      return this.putImageData.apply(this, args);
     }
-    [_putImageData_2](imagedata, dx, dy, dirtyX, dirtyY, dirtyWidth, dirtyHeight) {
-      return this.putImageData(imagedata, dx, dy, dirtyX, dirtyY, dirtyWidth, dirtyHeight);
+    [_putImageData_2](...args) {
+      return this.putImageData.apply(this, args);
     }
-    [dartx.removeHitRegion](id) {
-      return this.removeHitRegion(id);
+    [dartx.removeHitRegion](...args) {
+      return this.removeHitRegion.apply(this, args);
     }
-    [dartx.resetTransform]() {
-      return this.resetTransform();
+    [dartx.resetTransform](...args) {
+      return this.resetTransform.apply(this, args);
     }
-    [dartx.restore]() {
-      return this.restore();
+    [dartx.restore](...args) {
+      return this.restore.apply(this, args);
     }
-    [dartx.rotate](angle) {
-      return this.rotate(angle);
+    [dartx.rotate](...args) {
+      return this.rotate.apply(this, args);
     }
-    [dartx.save]() {
-      return this.save();
+    [dartx.save](...args) {
+      return this.save.apply(this, args);
     }
-    [dartx.scale](x, y) {
-      return this.scale(x, y);
+    [dartx.scale](...args) {
+      return this.scale.apply(this, args);
     }
-    [dartx.scrollPathIntoView](path) {
-      return this.scrollPathIntoView(path);
+    [dartx.scrollPathIntoView](...args) {
+      return this.scrollPathIntoView.apply(this, args);
     }
-    [dartx.setTransform](a, b, c, d, e, f) {
-      return this.setTransform(a, b, c, d, e, f);
+    [dartx.setTransform](...args) {
+      return this.setTransform.apply(this, args);
     }
-    [dartx.stroke](path) {
-      return this.stroke(path);
+    [dartx.stroke](...args) {
+      return this.stroke.apply(this, args);
     }
-    [dartx.strokeRect](x, y, width, height) {
-      return this.strokeRect(x, y, width, height);
+    [dartx.strokeRect](...args) {
+      return this.strokeRect.apply(this, args);
     }
-    [dartx.strokeText](text, x, y, maxWidth) {
-      return this.strokeText(text, x, y, maxWidth);
+    [dartx.strokeText](...args) {
+      return this.strokeText.apply(this, args);
     }
-    [dartx.transform](a, b, c, d, e, f) {
-      return this.transform(a, b, c, d, e, f);
+    [dartx.transform](...args) {
+      return this.transform.apply(this, args);
     }
-    [dartx.translate](x, y) {
-      return this.translate(x, y);
+    [dartx.translate](...args) {
+      return this.translate.apply(this, args);
     }
-    [_arc](x, y, radius, startAngle, endAngle, anticlockwise) {
-      return this.arc(x, y, radius, startAngle, endAngle, anticlockwise);
+    [_arc](...args) {
+      return this.arc.apply(this, args);
     }
-    [dartx.arcTo](x1, y1, x2, y2, radius) {
-      return this.arcTo(x1, y1, x2, y2, radius);
+    [dartx.arcTo](...args) {
+      return this.arcTo.apply(this, args);
     }
-    [dartx.bezierCurveTo](cp1x, cp1y, cp2x, cp2y, x, y) {
-      return this.bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y);
+    [dartx.bezierCurveTo](...args) {
+      return this.bezierCurveTo.apply(this, args);
     }
-    [dartx.closePath]() {
-      return this.closePath();
+    [dartx.closePath](...args) {
+      return this.closePath.apply(this, args);
     }
-    [dartx.ellipse](x, y, radiusX, radiusY, rotation, startAngle, endAngle, anticlockwise) {
-      return this.ellipse(x, y, radiusX, radiusY, rotation, startAngle, endAngle, anticlockwise);
+    [dartx.ellipse](...args) {
+      return this.ellipse.apply(this, args);
     }
-    [dartx.lineTo](x, y) {
-      return this.lineTo(x, y);
+    [dartx.lineTo](...args) {
+      return this.lineTo.apply(this, args);
     }
-    [dartx.moveTo](x, y) {
-      return this.moveTo(x, y);
+    [dartx.moveTo](...args) {
+      return this.moveTo.apply(this, args);
     }
-    [dartx.quadraticCurveTo](cpx, cpy, x, y) {
-      return this.quadraticCurveTo(cpx, cpy, x, y);
+    [dartx.quadraticCurveTo](...args) {
+      return this.quadraticCurveTo.apply(this, args);
     }
-    [dartx.rect](x, y, width, height) {
-      return this.rect(x, y, width, height);
+    [dartx.rect](...args) {
+      return this.rect.apply(this, args);
     }
     [dartx.createImageDataFromImageData](imagedata) {
       return this.createImageData(imagedata);
@@ -44745,14 +44745,14 @@
         this[dartx.drawImageScaledFromSource](source, sourceRect[dartx.left], sourceRect[dartx.top], sourceRect[dartx.width], sourceRect[dartx.height], destRect[dartx.left], destRect[dartx.top], destRect[dartx.width], destRect[dartx.height]);
       }
     }
-    [dartx.drawImage](source, destX, destY) {
-      return this.drawImage(source, destX, destY);
+    [dartx.drawImage](...args) {
+      return this.drawImage.apply(this, args);
     }
-    [dartx.drawImageScaled](source, destX, destY, destWidth, destHeight) {
-      return this.drawImage(source, destX, destY, destWidth, destHeight);
+    [dartx.drawImageScaled](...args) {
+      return this.drawImage.apply(this, args);
     }
-    [dartx.drawImageScaledFromSource](source, sourceX, sourceY, sourceWidth, sourceHeight, destX, destY, destWidth, destHeight) {
-      return this.drawImage(source, sourceX, sourceY, sourceWidth, sourceHeight, destX, destY, destWidth, destHeight);
+    [dartx.drawImageScaledFromSource](...args) {
+      return this.drawImage.apply(this, args);
     }
     get [dartx.lineDashOffset]() {
       return this.lineDashOffset || this.webkitLineDashOffset;
@@ -44999,11 +44999,11 @@
       this[_postMessage_2](message_1);
       return;
     }
-    [_postMessage_1](message, transfer) {
-      return this.postMessage(message, transfer);
+    [_postMessage_1](...args) {
+      return this.postMessage.apply(this, args);
     }
-    [_postMessage_2](message) {
-      return this.postMessage(message);
+    [_postMessage_2](...args) {
+      return this.postMessage.apply(this, args);
     }
   };
   dart.setSignature(html$.Client, {
@@ -45031,8 +45031,8 @@
     static _() {
       dart.throw(new core.UnsupportedError("Not supported"));
     }
-    [dartx.claim]() {
-      return this.claim();
+    [dartx.claim](...args) {
+      return this.claim.apply(this, args);
     }
     [dartx.matchAll](options) {
       if (options === void 0) options = null;
@@ -45042,14 +45042,14 @@
       }
       return this[_matchAll_2]();
     }
-    [_matchAll_1](options) {
-      return this.matchAll(options);
+    [_matchAll_1](...args) {
+      return this.matchAll.apply(this, args);
     }
-    [_matchAll_2]() {
-      return this.matchAll();
+    [_matchAll_2](...args) {
+      return this.matchAll.apply(this, args);
     }
-    [dartx.openWindow](url) {
-      return this.openWindow(url);
+    [dartx.openWindow](...args) {
+      return this.openWindow.apply(this, args);
     }
   };
   dart.setSignature(html$.Clients, {
@@ -45207,8 +45207,8 @@
     get [_which]() {
       return this.which;
     }
-    [_initUIEvent](type, bubbles, cancelable, view, detail) {
-      return this.initUIEvent(type, bubbles, cancelable, view, detail);
+    [_initUIEvent](...args) {
+      return this.initUIEvent.apply(this, args);
     }
   };
   dart.setSignature(html$.UIEvent, {
@@ -45271,8 +45271,8 @@
     get [dartx.data]() {
       return this.data;
     }
-    [_initCompositionEvent](type, bubbles, cancelable, view, data) {
-      return this.initCompositionEvent(type, bubbles, cancelable, view, data);
+    [_initCompositionEvent](...args) {
+      return this.initCompositionEvent.apply(this, args);
     }
   };
   dart.setSignature(html$.CompositionEvent, {
@@ -45331,11 +45331,11 @@
     set [dartx.transform](value) {
       this.transform = value;
     }
-    [dartx.disconnect]() {
-      return this.disconnect();
+    [dartx.disconnect](...args) {
+      return this.disconnect.apply(this, args);
     }
-    [dartx.supports](attribute) {
-      return this.supports(attribute);
+    [dartx.supports](...args) {
+      return this.supports.apply(this, args);
     }
   };
   dart.setSignature(html$.CompositorProxy, {
@@ -45384,14 +45384,14 @@
       this[_postMessage_2](message_1);
       return;
     }
-    [_postMessage_1](message, transfer) {
-      return this.postMessage(message, transfer);
+    [_postMessage_1](...args) {
+      return this.postMessage.apply(this, args);
     }
-    [_postMessage_2](message) {
-      return this.postMessage(message);
+    [_postMessage_2](...args) {
+      return this.postMessage.apply(this, args);
     }
-    [dartx.terminate]() {
-      return this.terminate();
+    [dartx.terminate](...args) {
+      return this.terminate.apply(this, args);
     }
     get [dartx.onError]() {
       return html$.CompositorWorker.errorEvent.forTarget(this);
@@ -45490,8 +45490,8 @@
     get [dartx.self]() {
       return this.self;
     }
-    [dartx.close]() {
-      return this.close();
+    [dartx.close](...args) {
+      return this.close.apply(this, args);
     }
     [dartx.fetch](input, init) {
       if (init === void 0) init = null;
@@ -45501,17 +45501,17 @@
       }
       return this[_fetch_2](input);
     }
-    [_fetch_1](input, init) {
-      return this.fetch(input, init);
+    [_fetch_1](...args) {
+      return this.fetch.apply(this, args);
     }
-    [_fetch_2](input) {
-      return this.fetch(input);
+    [_fetch_2](...args) {
+      return this.fetch.apply(this, args);
     }
-    [dartx.importScripts](urls) {
-      return this.importScripts(urls);
+    [dartx.importScripts](...args) {
+      return this.importScripts.apply(this, args);
     }
-    [_webkitRequestFileSystem](type, size, successCallback, errorCallback) {
-      return this.webkitRequestFileSystem(type, size, successCallback, errorCallback);
+    [_webkitRequestFileSystem](...args) {
+      return this.webkitRequestFileSystem.apply(this, args);
     }
     [dartx.webkitRequestFileSystem](type, size) {
       let completer = CompleterOfFileSystem().new();
@@ -45522,14 +45522,14 @@
       }, FileErrorTovoid()));
       return completer.future;
     }
-    [dartx.requestFileSystemSync](type, size) {
-      return this.webkitRequestFileSystemSync(type, size);
+    [dartx.requestFileSystemSync](...args) {
+      return this.webkitRequestFileSystemSync.apply(this, args);
     }
-    [dartx.resolveLocalFileSystemSyncUrl](url) {
-      return this.webkitResolveLocalFileSystemSyncURL(url);
+    [dartx.resolveLocalFileSystemSyncUrl](...args) {
+      return this.webkitResolveLocalFileSystemSyncURL.apply(this, args);
     }
-    [_webkitResolveLocalFileSystemUrl](url, successCallback, errorCallback) {
-      return this.webkitResolveLocalFileSystemURL(url, successCallback, errorCallback);
+    [_webkitResolveLocalFileSystemUrl](...args) {
+      return this.webkitResolveLocalFileSystemURL.apply(this, args);
     }
     [dartx.webkitResolveLocalFileSystemUrl](url) {
       let completer = CompleterOfEntry().new();
@@ -45540,29 +45540,29 @@
       }, FileErrorTovoid()));
       return completer.future;
     }
-    [dartx.atob](atob) {
-      return this.atob(atob);
+    [dartx.atob](...args) {
+      return this.atob.apply(this, args);
     }
-    [dartx.btoa](btoa) {
-      return this.btoa(btoa);
+    [dartx.btoa](...args) {
+      return this.btoa.apply(this, args);
     }
-    [_setInterval_String](handler, timeout, arguments$) {
-      return this.setInterval(handler, timeout, arguments$);
+    [_setInterval_String](...args) {
+      return this.setInterval.apply(this, args);
     }
-    [_setTimeout_String](handler, timeout, arguments$) {
-      return this.setTimeout(handler, timeout, arguments$);
+    [_setTimeout_String](...args) {
+      return this.setTimeout.apply(this, args);
     }
-    [_clearInterval](handle) {
-      return this.clearInterval(handle);
+    [_clearInterval](...args) {
+      return this.clearInterval.apply(this, args);
     }
-    [_clearTimeout](handle) {
-      return this.clearTimeout(handle);
+    [_clearTimeout](...args) {
+      return this.clearTimeout.apply(this, args);
     }
-    [_setInterval](handler, timeout) {
-      return this.setInterval(handler, timeout);
+    [_setInterval](...args) {
+      return this.setInterval.apply(this, args);
     }
-    [_setTimeout](handler, timeout) {
-      return this.setTimeout(handler, timeout);
+    [_setTimeout](...args) {
+      return this.setTimeout.apply(this, args);
     }
     get [dartx.onError]() {
       return html$.WorkerGlobalScope.errorEvent.forTarget(this);
@@ -45627,8 +45627,8 @@
     static _() {
       dart.throw(new core.UnsupportedError("Not supported"));
     }
-    [dartx.cancelAnimationFrame](handle) {
-      return this.cancelAnimationFrame(handle);
+    [dartx.cancelAnimationFrame](...args) {
+      return this.cancelAnimationFrame.apply(this, args);
     }
     [dartx.postMessage](message, transfer) {
       if (transfer === void 0) transfer = null;
@@ -45641,14 +45641,14 @@
       this[_postMessage_2](message_1);
       return;
     }
-    [_postMessage_1](message, transfer) {
-      return this.postMessage(message, transfer);
+    [_postMessage_1](...args) {
+      return this.postMessage.apply(this, args);
     }
-    [_postMessage_2](message) {
-      return this.postMessage(message);
+    [_postMessage_2](...args) {
+      return this.postMessage.apply(this, args);
     }
-    [dartx.requestAnimationFrame](callback) {
-      return this.requestAnimationFrame(callback);
+    [dartx.requestAnimationFrame](...args) {
+      return this.requestAnimationFrame.apply(this, args);
     }
     get [dartx.onMessage]() {
       return html$.CompositorWorkerGlobalScope.messageEvent.forTarget(this);
@@ -45798,14 +45798,14 @@
     static _() {
       dart.throw(new core.UnsupportedError("Not supported"));
     }
-    [dartx.assertCondition](condition, arg) {
-      return this.assert(condition, arg);
+    [dartx.assertCondition](...args) {
+      return this.assert.apply(this, args);
     }
-    [dartx.timeline](title) {
-      return this.timeline(title);
+    [dartx.timeline](...args) {
+      return this.timeline.apply(this, args);
     }
-    [dartx.timelineEnd](title) {
-      return this.timelineEnd(title);
+    [dartx.timelineEnd](...args) {
+      return this.timelineEnd.apply(this, args);
     }
   };
   dart.setSignature(html$.ConsoleBase, {
@@ -45841,8 +45841,8 @@
     set [dartx.select](value) {
       this.select = value;
     }
-    [dartx.getDistributedNodes]() {
-      return this.getDistributedNodes();
+    [dartx.getDistributedNodes](...args) {
+      return this.getDistributedNodes.apply(this, args);
     }
   };
   dart.defineNamedConstructor(html$.ContentElement, 'created');
@@ -45949,8 +45949,8 @@
     static _() {
       dart.throw(new core.UnsupportedError("Not supported"));
     }
-    [dartx.notifySignedIn](credential) {
-      return this.notifySignedIn(credential);
+    [dartx.notifySignedIn](...args) {
+      return this.notifySignedIn.apply(this, args);
     }
     [dartx.request](options) {
       if (options === void 0) options = null;
@@ -45960,14 +45960,14 @@
       }
       return this[_request_2]();
     }
-    [_request_1](options) {
-      return this.request(options);
+    [_request_1](...args) {
+      return this.request.apply(this, args);
     }
-    [_request_2]() {
-      return this.request();
+    [_request_2](...args) {
+      return this.request.apply(this, args);
     }
-    [dartx.requireUserMediation]() {
-      return this.requireUserMediation();
+    [dartx.requireUserMediation](...args) {
+      return this.requireUserMediation.apply(this, args);
     }
   };
   dart.setSignature(html$.CredentialsContainer, {
@@ -45992,8 +45992,8 @@
     get [dartx.client]() {
       return this.client;
     }
-    [dartx.acceptConnection](shouldAccept) {
-      return this.acceptConnection(shouldAccept);
+    [dartx.acceptConnection](...args) {
+      return this.acceptConnection.apply(this, args);
     }
   };
   dart.setSignature(html$.CrossOriginConnectEvent, {
@@ -46028,11 +46028,11 @@
       this[_postMessage_2](message_1);
       return;
     }
-    [_postMessage_1](message, transfer) {
-      return this.postMessage(message, transfer);
+    [_postMessage_1](...args) {
+      return this.postMessage.apply(this, args);
     }
-    [_postMessage_2](message) {
-      return this.postMessage(message);
+    [_postMessage_2](...args) {
+      return this.postMessage.apply(this, args);
     }
   };
   dart.setSignature(html$.CrossOriginServiceWorkerClient, {
@@ -46066,8 +46066,8 @@
     get [dartx.subtle]() {
       return this.subtle;
     }
-    [_getRandomValues](array) {
-      return this.getRandomValues(array);
+    [_getRandomValues](...args) {
+      return this.getRandomValues.apply(this, args);
     }
   };
   dart.setSignature(html$.Crypto, {
@@ -46236,11 +46236,11 @@
     get [dartx.cssRules]() {
       return this.cssRules;
     }
-    [dartx.deleteRule](index) {
-      return this.deleteRule(index);
+    [dartx.deleteRule](...args) {
+      return this.deleteRule.apply(this, args);
     }
-    [dartx.insertRule](rule, index) {
-      return this.insertRule(rule, index);
+    [dartx.insertRule](...args) {
+      return this.insertRule.apply(this, args);
     }
   };
   dart.setSignature(html$.CssGroupingRule, {
@@ -46328,17 +46328,17 @@
     set [dartx.name](value) {
       this.name = value;
     }
-    [__getter__](index) {
-      return this.__getter__(index);
+    [__getter__](...args) {
+      return this.__getter__.apply(this, args);
     }
-    [dartx.appendRule](rule) {
-      return this.appendRule(rule);
+    [dartx.appendRule](...args) {
+      return this.appendRule.apply(this, args);
     }
-    [dartx.deleteRule](select) {
-      return this.deleteRule(select);
+    [dartx.deleteRule](...args) {
+      return this.deleteRule.apply(this, args);
     }
-    [dartx.findRule](select) {
-      return this.findRule(select);
+    [dartx.findRule](...args) {
+      return this.findRule.apply(this, args);
     }
   };
   dart.setSignature(html$.CssKeyframesRule, {
@@ -50876,17 +50876,17 @@
     get [dartx.parentRule]() {
       return this.parentRule;
     }
-    [dartx.getPropertyPriority](property) {
-      return this.getPropertyPriority(property);
+    [dartx.getPropertyPriority](...args) {
+      return this.getPropertyPriority.apply(this, args);
     }
-    [_getPropertyValue](property) {
-      return this.getPropertyValue(property);
+    [_getPropertyValue](...args) {
+      return this.getPropertyValue.apply(this, args);
     }
-    [dartx.item](index) {
-      return this.item(index);
+    [dartx.item](...args) {
+      return this.item.apply(this, args);
     }
-    [dartx.removeProperty](property) {
-      return this.removeProperty(property);
+    [dartx.removeProperty](...args) {
+      return this.removeProperty.apply(this, args);
     }
     get [dartx.background]() {
       return this[_background];
@@ -52868,17 +52868,17 @@
     get [dartx.rules]() {
       return this.rules;
     }
-    [dartx.addRule](selector, style, index) {
-      return this.addRule(selector, style, index);
+    [dartx.addRule](...args) {
+      return this.addRule.apply(this, args);
     }
-    [dartx.deleteRule](index) {
-      return this.deleteRule(index);
+    [dartx.deleteRule](...args) {
+      return this.deleteRule.apply(this, args);
     }
-    [dartx.insertRule](rule, index) {
-      return this.insertRule(rule, index);
+    [dartx.insertRule](...args) {
+      return this.insertRule.apply(this, args);
     }
-    [dartx.removeRule](index) {
-      return this.removeRule(index);
+    [dartx.removeRule](...args) {
+      return this.removeRule.apply(this, args);
     }
   };
   dart.setSignature(html$.CssStyleSheet, {
@@ -52912,11 +52912,11 @@
     get [dartx.cssRules]() {
       return this.cssRules;
     }
-    [dartx.deleteRule](index) {
-      return this.deleteRule(index);
+    [dartx.deleteRule](...args) {
+      return this.deleteRule.apply(this, args);
     }
-    [dartx.insertRule](rule, index) {
-      return this.insertRule(rule, index);
+    [dartx.insertRule](...args) {
+      return this.insertRule.apply(this, args);
     }
   };
   dart.setSignature(html$.CssSupportsRule, {
@@ -53006,8 +53006,8 @@
     get [_get__detail]() {
       return this.detail;
     }
-    [_initCustomEvent](type, bubbles, cancelable, detail) {
-      return this.initCustomEvent(type, bubbles, cancelable, detail);
+    [_initCustomEvent](...args) {
+      return this.initCustomEvent.apply(this, args);
     }
   };
   dart.setSignature(html$.CustomEvent, {
@@ -53119,17 +53119,17 @@
     get [dartx.types]() {
       return this.types;
     }
-    [dartx.clearData](format) {
-      return this.clearData(format);
+    [dartx.clearData](...args) {
+      return this.clearData.apply(this, args);
     }
-    [dartx.getData](format) {
-      return this.getData(format);
+    [dartx.getData](...args) {
+      return this.getData.apply(this, args);
     }
-    [dartx.setData](format, data) {
-      return this.setData(format, data);
+    [dartx.setData](...args) {
+      return this.setData.apply(this, args);
     }
-    [dartx.setDragImage](image, x, y) {
-      return this.setDragImage(image, x, y);
+    [dartx.setDragImage](...args) {
+      return this.setDragImage.apply(this, args);
     }
   };
   dart.setSignature(html$.DataTransfer, {
@@ -53167,11 +53167,11 @@
     get [dartx.type]() {
       return this.type;
     }
-    [dartx.getAsFile]() {
-      return this.getAsFile();
+    [dartx.getAsFile](...args) {
+      return this.getAsFile.apply(this, args);
     }
-    [_getAsString](callback) {
-      return this.getAsString(callback);
+    [_getAsString](...args) {
+      return this.getAsString.apply(this, args);
     }
     [dartx.getAsString]() {
       let completer = CompleterOfString().new();
@@ -53180,8 +53180,8 @@
       }, StringTovoid$()));
       return completer.future;
     }
-    [dartx.getAsEntry]() {
-      return this.webkitGetAsEntry();
+    [dartx.getAsEntry](...args) {
+      return this.webkitGetAsEntry.apply(this, args);
     }
   };
   dart.setSignature(html$.DataTransferItem, {
@@ -53215,23 +53215,23 @@
     get [dartx.length]() {
       return this.length;
     }
-    [dartx.add](data_OR_file, type) {
-      return this.add(data_OR_file, type);
+    [dartx.add](...args) {
+      return this.add.apply(this, args);
     }
-    [dartx.addData](data, type) {
-      return this.add(data, type);
+    [dartx.addData](...args) {
+      return this.add.apply(this, args);
     }
-    [dartx.addFile](file) {
-      return this.add(file);
+    [dartx.addFile](...args) {
+      return this.add.apply(this, args);
     }
-    [dartx.clear]() {
-      return this.clear();
+    [dartx.clear](...args) {
+      return this.clear.apply(this, args);
     }
-    [dartx.item](index) {
-      return this.item(index);
+    [dartx.item](...args) {
+      return this.item.apply(this, args);
     }
-    [dartx.remove](index) {
-      return this.remove(index);
+    [dartx.remove](...args) {
+      return this.remove.apply(this, args);
     }
     [dartx._get](index) {
       return this[index];
@@ -53271,11 +53271,11 @@
       this[_postMessage_2](message_1);
       return;
     }
-    [_postMessage_1](message, transfer) {
-      return this.postMessage(message, transfer);
+    [_postMessage_1](...args) {
+      return this.postMessage.apply(this, args);
     }
-    [_postMessage_2](message) {
-      return this.postMessage(message);
+    [_postMessage_2](...args) {
+      return this.postMessage.apply(this, args);
     }
     get [dartx.onMessage]() {
       return html$.DedicatedWorkerGlobalScope.messageEvent.forTarget(this);
@@ -53343,11 +53343,11 @@
     static _() {
       dart.throw(new core.UnsupportedError("Not supported"));
     }
-    [dartx.queryUsageAndQuota](storageType, usageCallback, errorCallback) {
-      return this.queryUsageAndQuota(storageType, usageCallback, errorCallback);
+    [dartx.queryUsageAndQuota](...args) {
+      return this.queryUsageAndQuota.apply(this, args);
     }
-    [dartx.requestQuota](storageType, newQuotaInBytes, quotaCallback, errorCallback) {
-      return this.requestQuota(storageType, newQuotaInBytes, quotaCallback, errorCallback);
+    [dartx.requestQuota](...args) {
+      return this.requestQuota.apply(this, args);
     }
   };
   dart.setSignature(html$.DeprecatedStorageInfo, {
@@ -53372,11 +53372,11 @@
     static _() {
       dart.throw(new core.UnsupportedError("Not supported"));
     }
-    [dartx.queryUsageAndQuota](usageCallback, errorCallback) {
-      return this.queryUsageAndQuota(usageCallback, errorCallback);
+    [dartx.queryUsageAndQuota](...args) {
+      return this.queryUsageAndQuota.apply(this, args);
     }
-    [dartx.requestQuota](newQuotaInBytes, quotaCallback, errorCallback) {
-      return this.requestQuota(newQuotaInBytes, quotaCallback, errorCallback);
+    [dartx.requestQuota](...args) {
+      return this.requestQuota.apply(this, args);
     }
   };
   dart.setSignature(html$.DeprecatedStorageQuota, {
@@ -53511,8 +53511,8 @@
     get [dartx.rotationRate]() {
       return this.rotationRate;
     }
-    [dartx.initDeviceMotionEvent](type, bubbles, cancelable, acceleration, accelerationIncludingGravity, rotationRate, interval) {
-      return this.initDeviceMotionEvent(type, bubbles, cancelable, acceleration, accelerationIncludingGravity, rotationRate, interval);
+    [dartx.initDeviceMotionEvent](...args) {
+      return this.initDeviceMotionEvent.apply(this, args);
     }
   };
   dart.setSignature(html$.DeviceMotionEvent, {
@@ -53560,8 +53560,8 @@
     get [dartx.gamma]() {
       return this.gamma;
     }
-    [_initDeviceOrientationEvent](type, bubbles, cancelable, alpha, beta, gamma, absolute) {
-      return this.initDeviceOrientationEvent(type, bubbles, cancelable, alpha, beta, gamma, absolute);
+    [_initDeviceOrientationEvent](...args) {
+      return this.initDeviceOrientationEvent.apply(this, args);
     }
   };
   dart.setSignature(html$.DeviceOrientationEvent, {
@@ -53634,14 +53634,14 @@
     set [dartx.returnValue](value) {
       this.returnValue = value;
     }
-    [dartx.close](returnValue) {
-      return this.close(returnValue);
+    [dartx.close](...args) {
+      return this.close.apply(this, args);
     }
-    [dartx.show]() {
-      return this.show();
+    [dartx.show](...args) {
+      return this.show.apply(this, args);
     }
-    [dartx.showModal]() {
-      return this.showModal();
+    [dartx.showModal](...args) {
+      return this.showModal.apply(this, args);
     }
   };
   dart.defineNamedConstructor(html$.DialogElement, 'created');
@@ -53711,8 +53711,8 @@
     get [dartx.name]() {
       return this.name;
     }
-    [_copyTo](parent, opts) {
-      return this.copyTo(parent, opts);
+    [_copyTo](...args) {
+      return this.copyTo.apply(this, args);
     }
     [dartx.copyTo](parent, opts) {
       let name = opts && 'name' in opts ? opts.name : null;
@@ -53724,8 +53724,8 @@
         }, FileErrorTovoid())});
       return completer.future;
     }
-    [_getMetadata](successCallback, errorCallback) {
-      return this.getMetadata(successCallback, errorCallback);
+    [_getMetadata](...args) {
+      return this.getMetadata.apply(this, args);
     }
     [dartx.getMetadata]() {
       let completer = CompleterOfMetadata().new();
@@ -53736,8 +53736,8 @@
       }, FileErrorTovoid()));
       return completer.future;
     }
-    [_getParent](successCallback, errorCallback) {
-      return this.getParent(successCallback, errorCallback);
+    [_getParent](...args) {
+      return this.getParent.apply(this, args);
     }
     [dartx.getParent]() {
       let completer = CompleterOfEntry().new();
@@ -53748,8 +53748,8 @@
       }, FileErrorTovoid()));
       return completer.future;
     }
-    [_moveTo](parent, opts) {
-      return this.moveTo(parent, opts);
+    [_moveTo](...args) {
+      return this.moveTo.apply(this, args);
     }
     [dartx.moveTo](parent, opts) {
       let name = opts && 'name' in opts ? opts.name : null;
@@ -53761,8 +53761,8 @@
         }, FileErrorTovoid())});
       return completer.future;
     }
-    [_remove$](successCallback, errorCallback) {
-      return this.remove(successCallback, errorCallback);
+    [_remove$](...args) {
+      return this.remove.apply(this, args);
     }
     [dartx.remove]() {
       let completer = async.Completer.new();
@@ -53773,8 +53773,8 @@
       }, FileErrorTovoid()));
       return completer.future;
     }
-    [dartx.toUrl]() {
-      return this.toURL();
+    [dartx.toUrl](...args) {
+      return this.toURL.apply(this, args);
     }
   };
   dart.setSignature(html$.Entry, {
@@ -53827,8 +53827,8 @@
     static _() {
       dart.throw(new core.UnsupportedError("Not supported"));
     }
-    [dartx.createReader]() {
-      return this.createReader();
+    [dartx.createReader](...args) {
+      return this.createReader.apply(this, args);
     }
     [__getDirectory](path, opts) {
       let options = opts && 'options' in opts ? opts.options : null;
@@ -53852,17 +53852,17 @@
       this[__getDirectory_4](path);
       return;
     }
-    [__getDirectory_1](path, options, successCallback, errorCallback) {
-      return this.getDirectory(path, options, successCallback, errorCallback);
+    [__getDirectory_1](...args) {
+      return this.getDirectory.apply(this, args);
     }
-    [__getDirectory_2](path, options, successCallback) {
-      return this.getDirectory(path, options, successCallback);
+    [__getDirectory_2](...args) {
+      return this.getDirectory.apply(this, args);
     }
-    [__getDirectory_3](path, options) {
-      return this.getDirectory(path, options);
+    [__getDirectory_3](...args) {
+      return this.getDirectory.apply(this, args);
     }
-    [__getDirectory_4](path) {
-      return this.getDirectory(path);
+    [__getDirectory_4](...args) {
+      return this.getDirectory.apply(this, args);
     }
     [_getDirectory](path, opts) {
       let options = opts && 'options' in opts ? opts.options : null;
@@ -53896,17 +53896,17 @@
       this[__getFile_4](path);
       return;
     }
-    [__getFile_1](path, options, successCallback, errorCallback) {
-      return this.getFile(path, options, successCallback, errorCallback);
+    [__getFile_1](...args) {
+      return this.getFile.apply(this, args);
     }
-    [__getFile_2](path, options, successCallback) {
-      return this.getFile(path, options, successCallback);
+    [__getFile_2](...args) {
+      return this.getFile.apply(this, args);
     }
-    [__getFile_3](path, options) {
-      return this.getFile(path, options);
+    [__getFile_3](...args) {
+      return this.getFile.apply(this, args);
     }
-    [__getFile_4](path) {
-      return this.getFile(path);
+    [__getFile_4](...args) {
+      return this.getFile.apply(this, args);
     }
     [_getFile](path, opts) {
       let options = opts && 'options' in opts ? opts.options : null;
@@ -53918,8 +53918,8 @@
         }, FileErrorTovoid())});
       return completer.future;
     }
-    [_removeRecursively](successCallback, errorCallback) {
-      return this.removeRecursively(successCallback, errorCallback);
+    [_removeRecursively](...args) {
+      return this.removeRecursively.apply(this, args);
     }
     [dartx.removeRecursively]() {
       let completer = async.Completer.new();
@@ -53964,8 +53964,8 @@
     static _() {
       dart.throw(new core.UnsupportedError("Not supported"));
     }
-    [_readEntries](successCallback, errorCallback) {
-      return this.readEntries(successCallback, errorCallback);
+    [_readEntries](...args) {
+      return this.readEntries.apply(this, args);
     }
     [dartx.readEntries]() {
       let completer = CompleterOfListOfEntry().new();
@@ -54262,93 +54262,93 @@
     get [_webkitVisibilityState]() {
       return this.webkitVisibilityState;
     }
-    [dartx.adoptNode](node) {
-      return this.adoptNode(node);
+    [dartx.adoptNode](...args) {
+      return this.adoptNode.apply(this, args);
     }
-    [_caretRangeFromPoint](x, y) {
-      return this.caretRangeFromPoint(x, y);
+    [_caretRangeFromPoint](...args) {
+      return this.caretRangeFromPoint.apply(this, args);
     }
-    [dartx.createDocumentFragment]() {
-      return this.createDocumentFragment();
+    [dartx.createDocumentFragment](...args) {
+      return this.createDocumentFragment.apply(this, args);
     }
-    [_createElement](localName_OR_tagName, typeExtension) {
-      return this.createElement(localName_OR_tagName, typeExtension);
+    [_createElement](...args) {
+      return this.createElement.apply(this, args);
     }
-    [_createElementNS](namespaceURI, qualifiedName, typeExtension) {
-      return this.createElementNS(namespaceURI, qualifiedName, typeExtension);
+    [_createElementNS](...args) {
+      return this.createElementNS.apply(this, args);
     }
-    [_createEvent](eventType) {
-      return this.createEvent(eventType);
+    [_createEvent](...args) {
+      return this.createEvent.apply(this, args);
     }
-    [dartx.createRange]() {
-      return this.createRange();
+    [dartx.createRange](...args) {
+      return this.createRange.apply(this, args);
     }
-    [_createTextNode](data) {
-      return this.createTextNode(data);
+    [_createTextNode](...args) {
+      return this.createTextNode.apply(this, args);
     }
     [_createTouch](window, target, identifier, pageX, pageY, screenX, screenY, radiusX, radiusY, rotationAngle, force) {
       let target_1 = html$._convertDartToNative_EventTarget(target);
       return this[_createTouch_1](window, target_1, identifier, pageX, pageY, screenX, screenY, radiusX, radiusY, rotationAngle, force);
     }
-    [_createTouch_1](window, target, identifier, pageX, pageY, screenX, screenY, radiusX, radiusY, rotationAngle, force) {
-      return this.createTouch(window, target, identifier, pageX, pageY, screenX, screenY, radiusX, radiusY, rotationAngle, force);
+    [_createTouch_1](...args) {
+      return this.createTouch.apply(this, args);
     }
-    [_createTouchList](touches) {
-      return this.createTouchList(touches);
+    [_createTouchList](...args) {
+      return this.createTouchList.apply(this, args);
     }
-    [_elementFromPoint](x, y) {
-      return this.elementFromPoint(x, y);
+    [_elementFromPoint](...args) {
+      return this.elementFromPoint.apply(this, args);
     }
-    [dartx.elementsFromPoint](x, y) {
-      return this.elementsFromPoint(x, y);
+    [dartx.elementsFromPoint](...args) {
+      return this.elementsFromPoint.apply(this, args);
     }
-    [dartx.execCommand](commandId, showUI, value) {
-      return this.execCommand(commandId, showUI, value);
+    [dartx.execCommand](...args) {
+      return this.execCommand.apply(this, args);
     }
-    [dartx.exitFullscreen]() {
-      return this.exitFullscreen();
+    [dartx.exitFullscreen](...args) {
+      return this.exitFullscreen.apply(this, args);
     }
-    [dartx.exitPointerLock]() {
-      return this.exitPointerLock();
+    [dartx.exitPointerLock](...args) {
+      return this.exitPointerLock.apply(this, args);
     }
-    [_getCssCanvasContext](contextId, name, width, height) {
-      return this.getCSSCanvasContext(contextId, name, width, height);
+    [_getCssCanvasContext](...args) {
+      return this.getCSSCanvasContext.apply(this, args);
     }
-    [dartx.getElementsByClassName](classNames) {
-      return this.getElementsByClassName(classNames);
+    [dartx.getElementsByClassName](...args) {
+      return this.getElementsByClassName.apply(this, args);
     }
-    [dartx.getElementsByName](elementName) {
-      return this.getElementsByName(elementName);
+    [dartx.getElementsByName](...args) {
+      return this.getElementsByName.apply(this, args);
     }
-    [dartx.getElementsByTagName](localName) {
-      return this.getElementsByTagName(localName);
+    [dartx.getElementsByTagName](...args) {
+      return this.getElementsByTagName.apply(this, args);
     }
-    [dartx.importNode](node, deep) {
-      return this.importNode(node, deep);
+    [dartx.importNode](...args) {
+      return this.importNode.apply(this, args);
     }
-    [dartx.queryCommandEnabled](commandId) {
-      return this.queryCommandEnabled(commandId);
+    [dartx.queryCommandEnabled](...args) {
+      return this.queryCommandEnabled.apply(this, args);
     }
-    [dartx.queryCommandIndeterm](commandId) {
-      return this.queryCommandIndeterm(commandId);
+    [dartx.queryCommandIndeterm](...args) {
+      return this.queryCommandIndeterm.apply(this, args);
     }
-    [dartx.queryCommandState](commandId) {
-      return this.queryCommandState(commandId);
+    [dartx.queryCommandState](...args) {
+      return this.queryCommandState.apply(this, args);
     }
-    [dartx.queryCommandSupported](commandId) {
-      return this.queryCommandSupported(commandId);
+    [dartx.queryCommandSupported](...args) {
+      return this.queryCommandSupported.apply(this, args);
     }
-    [dartx.queryCommandValue](commandId) {
-      return this.queryCommandValue(commandId);
+    [dartx.queryCommandValue](...args) {
+      return this.queryCommandValue.apply(this, args);
     }
-    [dartx.transformDocumentToTreeView](noStyleMessage) {
-      return this.transformDocumentToTreeView(noStyleMessage);
+    [dartx.transformDocumentToTreeView](...args) {
+      return this.transformDocumentToTreeView.apply(this, args);
     }
-    [_webkitExitFullscreen]() {
-      return this.webkitExitFullscreen();
+    [_webkitExitFullscreen](...args) {
+      return this.webkitExitFullscreen.apply(this, args);
     }
-    [dartx.getElementById](elementId) {
-      return this.getElementById(elementId);
+    [dartx.getElementById](...args) {
+      return this.getElementById.apply(this, args);
     }
     get [_childElementCount]() {
       return this.childElementCount;
@@ -54362,11 +54362,11 @@
     get [_lastElementChild]() {
       return this.lastElementChild;
     }
-    [dartx.querySelector](selectors) {
-      return this.querySelector(selectors);
+    [dartx.querySelector](...args) {
+      return this.querySelector.apply(this, args);
     }
-    [_querySelectorAll](selectors) {
-      return this.querySelectorAll(selectors);
+    [_querySelectorAll](...args) {
+      return this.querySelectorAll.apply(this, args);
     }
     get [dartx.onAbort]() {
       return html$.Element.abortEvent.forTarget(this);
@@ -54901,8 +54901,8 @@
     static _() {
       dart.throw(new core.UnsupportedError("Not supported"));
     }
-    [dartx.getElementById](elementId) {
-      return this.getElementById(elementId);
+    [dartx.getElementById](...args) {
+      return this.getElementById.apply(this, args);
     }
     get [_childElementCount]() {
       return this.childElementCount;
@@ -54913,11 +54913,11 @@
     get [_lastElementChild]() {
       return this.lastElementChild;
     }
-    [dartx.querySelector](selectors) {
-      return this.querySelector(selectors);
+    [dartx.querySelector](...args) {
+      return this.querySelector.apply(this, args);
     }
-    [_querySelectorAll](selectors) {
-      return this.querySelectorAll(selectors);
+    [_querySelectorAll](...args) {
+      return this.querySelectorAll.apply(this, args);
     }
   };
   html$.DocumentFragment[dart.implements] = () => [html$.NonElementParentNode, html$.ParentNode];
@@ -55082,17 +55082,17 @@
     static _() {
       dart.throw(new core.UnsupportedError("Not supported"));
     }
-    [dartx.createDocument](namespaceURI, qualifiedName, doctype) {
-      return this.createDocument(namespaceURI, qualifiedName, doctype);
+    [dartx.createDocument](...args) {
+      return this.createDocument.apply(this, args);
     }
-    [dartx.createDocumentType](qualifiedName, publicId, systemId) {
-      return this.createDocumentType(qualifiedName, publicId, systemId);
+    [dartx.createDocumentType](...args) {
+      return this.createDocumentType.apply(this, args);
     }
-    [dartx.createHtmlDocument](title) {
-      return this.createHTMLDocument(title);
+    [dartx.createHtmlDocument](...args) {
+      return this.createHTMLDocument.apply(this, args);
     }
-    [dartx.hasFeature]() {
-      return this.hasFeature();
+    [dartx.hasFeature](...args) {
+      return this.hasFeature.apply(this, args);
     }
   };
   dart.setSignature(html$.DomImplementation, {
@@ -55112,8 +55112,8 @@
     static _() {
       dart.throw(new core.UnsupportedError("Not supported"));
     }
-    [dartx.next](value) {
-      return this.next(value);
+    [dartx.next](...args) {
+      return this.next.apply(this, args);
     }
   };
   dart.setSignature(html$.DomIterator, {
@@ -55230,26 +55230,26 @@
     get [dartx.m44]() {
       return this.m44;
     }
-    [dartx.multiply](other) {
-      return this.multiply(other);
+    [dartx.multiply](...args) {
+      return this.multiply.apply(this, args);
     }
-    [dartx.scale](scale, originX, originY) {
-      return this.scale(scale, originX, originY);
+    [dartx.scale](...args) {
+      return this.scale.apply(this, args);
     }
-    [dartx.scale3d](scale, originX, originY, originZ) {
-      return this.scale3d(scale, originX, originY, originZ);
+    [dartx.scale3d](...args) {
+      return this.scale3d.apply(this, args);
     }
-    [dartx.scaleNonUniform](scaleX, scaleY, scaleZn, originX, originY, originZ) {
-      return this.scaleNonUniform(scaleX, scaleY, scaleZn, originX, originY, originZ);
+    [dartx.scaleNonUniform](...args) {
+      return this.scaleNonUniform.apply(this, args);
     }
-    [dartx.toFloat32Array]() {
-      return this.toFloat32Array();
+    [dartx.toFloat32Array](...args) {
+      return this.toFloat32Array.apply(this, args);
     }
-    [dartx.toFloat64Array]() {
-      return this.toFloat64Array();
+    [dartx.toFloat64Array](...args) {
+      return this.toFloat64Array.apply(this, args);
     }
-    [dartx.translate](tx, ty, tz) {
-      return this.translate(tx, ty, tz);
+    [dartx.translate](...args) {
+      return this.translate.apply(this, args);
     }
   };
   dart.setSignature(html$.DomMatrixReadOnly, {
@@ -55495,23 +55495,23 @@
     set [dartx.m44](value) {
       this.m44 = value;
     }
-    [dartx.multiplySelf](other) {
-      return this.multiplySelf(other);
+    [dartx.multiplySelf](...args) {
+      return this.multiplySelf.apply(this, args);
     }
-    [dartx.preMultiplySelf](other) {
-      return this.preMultiplySelf(other);
+    [dartx.preMultiplySelf](...args) {
+      return this.preMultiplySelf.apply(this, args);
     }
-    [dartx.scale3dSelf](scale, originX, originY, originZ) {
-      return this.scale3dSelf(scale, originX, originY, originZ);
+    [dartx.scale3dSelf](...args) {
+      return this.scale3dSelf.apply(this, args);
     }
-    [dartx.scaleNonUniformSelf](scaleX, scaleY, scaleZ, originX, originY, originZ) {
-      return this.scaleNonUniformSelf(scaleX, scaleY, scaleZ, originX, originY, originZ);
+    [dartx.scaleNonUniformSelf](...args) {
+      return this.scaleNonUniformSelf.apply(this, args);
     }
-    [dartx.scaleSelf](scale, originX, originY) {
-      return this.scaleSelf(scale, originX, originY);
+    [dartx.scaleSelf](...args) {
+      return this.scaleSelf.apply(this, args);
     }
-    [dartx.translateSelf](tx, ty, tz) {
-      return this.translateSelf(tx, ty, tz);
+    [dartx.translateSelf](...args) {
+      return this.translateSelf.apply(this, args);
     }
   };
   dart.setSignature(html$.DomMatrix, {
@@ -55571,8 +55571,8 @@
     static _create_1() {
       return new DOMParser();
     }
-    [dartx.parseFromString](str, type) {
-      return this.parseFromString(str, type);
+    [dartx.parseFromString](...args) {
+      return this.parseFromString.apply(this, args);
     }
   };
   dart.setSignature(html$.DomParser, {
@@ -55891,20 +55891,20 @@
     get [dartx.length]() {
       return this.length;
     }
-    [dartx.add](tokens) {
-      return this.add(tokens);
+    [dartx.add](...args) {
+      return this.add.apply(this, args);
     }
-    [dartx.contains](token) {
-      return this.contains(token);
+    [dartx.contains](...args) {
+      return this.contains.apply(this, args);
     }
-    [dartx.item](index) {
-      return this.item(index);
+    [dartx.item](...args) {
+      return this.item.apply(this, args);
     }
-    [dartx.remove](tokens) {
-      return this.remove(tokens);
+    [dartx.remove](...args) {
+      return this.remove.apply(this, args);
     }
-    [dartx.toggle](token, force) {
-      return this.toggle(token, force);
+    [dartx.toggle](...args) {
+      return this.toggle.apply(this, args);
     }
   };
   dart.setSignature(html$.DomTokenList, {
@@ -56129,11 +56129,11 @@
     [dartx.elementAt](index) {
       return this[dartx._get](index);
     }
-    [__getter__](index) {
-      return this.__getter__(index);
+    [__getter__](...args) {
+      return this.__getter__.apply(this, args);
     }
-    [dartx.item](index) {
-      return this.item(index);
+    [dartx.item](...args) {
+      return this.item.apply(this, args);
     }
   };
   html$.DomStringList[dart.implements] = () => [ListOfString()];
@@ -56857,11 +56857,11 @@
     set [dartx.width](value) {
       this.width = value;
     }
-    [__getter__](index_OR_name) {
-      return this.__getter__(index_OR_name);
+    [__getter__](...args) {
+      return this.__getter__.apply(this, args);
     }
-    [__setter__](index_OR_name, value) {
-      return this.__setter__(index_OR_name, value);
+    [__setter__](...args) {
+      return this.__setter__.apply(this, args);
     }
   };
   dart.defineNamedConstructor(html$.EmbedElement, 'created');
@@ -56989,8 +56989,8 @@
     get [dartx.withCredentials]() {
       return this.withCredentials;
     }
-    [dartx.close]() {
-      return this.close();
+    [dartx.close](...args) {
+      return this.close.apply(this, args);
     }
     get [dartx.onError]() {
       return html$.EventSource.errorEvent.forTarget(this);
@@ -57105,8 +57105,8 @@
     static _create_2(type) {
       return new ExtendableEvent(type);
     }
-    [dartx.waitUntil](value) {
-      return this.waitUntil(value);
+    [dartx.waitUntil](...args) {
+      return this.waitUntil.apply(this, args);
     }
   };
   dart.setSignature(html$.ExtendableEvent, {
@@ -57186,8 +57186,8 @@
     get [dartx.request]() {
       return this.request;
     }
-    [dartx.respondWith](value) {
-      return this.respondWith(value);
+    [dartx.respondWith](...args) {
+      return this.respondWith.apply(this, args);
     }
   };
   dart.setSignature(html$.FetchEvent, {
@@ -57268,14 +57268,14 @@
     get [dartx.willValidate]() {
       return this.willValidate;
     }
-    [dartx.checkValidity]() {
-      return this.checkValidity();
+    [dartx.checkValidity](...args) {
+      return this.checkValidity.apply(this, args);
     }
-    [dartx.reportValidity]() {
-      return this.reportValidity();
+    [dartx.reportValidity](...args) {
+      return this.reportValidity.apply(this, args);
     }
-    [dartx.setCustomValidity](error) {
-      return this.setCustomValidity(error);
+    [dartx.setCustomValidity](...args) {
+      return this.setCustomValidity.apply(this, args);
     }
   };
   dart.defineNamedConstructor(html$.FieldSetElement, 'created');
@@ -57373,8 +57373,8 @@
     static _() {
       dart.throw(new core.UnsupportedError("Not supported"));
     }
-    [_createWriter](successCallback, errorCallback) {
-      return this.createWriter(successCallback, errorCallback);
+    [_createWriter](...args) {
+      return this.createWriter.apply(this, args);
     }
     [dartx.createWriter]() {
       let completer = CompleterOfFileWriter().new();
@@ -57385,8 +57385,8 @@
       }, FileErrorTovoid()));
       return completer.future;
     }
-    [_file](successCallback, errorCallback) {
-      return this.file(successCallback, errorCallback);
+    [_file](...args) {
+      return this.file.apply(this, args);
     }
     [dartx.file]() {
       let completer = CompleterOfFile().new();
@@ -57503,8 +57503,8 @@
     [dartx.elementAt](index) {
       return this[dartx._get](index);
     }
-    [dartx.item](index) {
-      return this.item(index);
+    [dartx.item](...args) {
+      return this.item.apply(this, args);
     }
   };
   html$.FileList[dart.implements] = () => [_js_helper.JavaScriptIndexingBehavior, ListOfFile()];
@@ -57563,17 +57563,17 @@
     get [dartx.readyState]() {
       return this.readyState;
     }
-    [dartx.abort]() {
-      return this.abort();
+    [dartx.abort](...args) {
+      return this.abort.apply(this, args);
     }
-    [dartx.readAsArrayBuffer](blob) {
-      return this.readAsArrayBuffer(blob);
+    [dartx.readAsArrayBuffer](...args) {
+      return this.readAsArrayBuffer.apply(this, args);
     }
-    [dartx.readAsDataUrl](blob) {
-      return this.readAsDataURL(blob);
+    [dartx.readAsDataUrl](...args) {
+      return this.readAsDataURL.apply(this, args);
     }
-    [dartx.readAsText](blob, label) {
-      return this.readAsText(blob, label);
+    [dartx.readAsText](...args) {
+      return this.readAsText.apply(this, args);
     }
     get [dartx.onAbort]() {
       return html$.FileReader.abortEvent.forTarget(this);
@@ -57732,17 +57732,17 @@
     get [dartx.readyState]() {
       return this.readyState;
     }
-    [dartx.abort]() {
-      return this.abort();
+    [dartx.abort](...args) {
+      return this.abort.apply(this, args);
     }
-    [dartx.seek](position) {
-      return this.seek(position);
+    [dartx.seek](...args) {
+      return this.seek.apply(this, args);
     }
-    [dartx.truncate](size) {
-      return this.truncate(size);
+    [dartx.truncate](...args) {
+      return this.truncate.apply(this, args);
     }
-    [dartx.write](data) {
-      return this.write(data);
+    [dartx.write](...args) {
+      return this.write.apply(this, args);
     }
     get [dartx.onAbort]() {
       return html$.FileWriter.abortEvent.forTarget(this);
@@ -57943,8 +57943,8 @@
     set [dartx.weight](value) {
       this.weight = value;
     }
-    [dartx.load]() {
-      return this.load();
+    [dartx.load](...args) {
+      return this.load.apply(this, args);
     }
   };
   dart.setSignature(html$.FontFace, {
@@ -57991,23 +57991,23 @@
     get [dartx.status]() {
       return this.status;
     }
-    [dartx.add](fontFace) {
-      return this.add(fontFace);
+    [dartx.add](...args) {
+      return this.add.apply(this, args);
     }
-    [dartx.check](font, text) {
-      return this.check(font, text);
+    [dartx.check](...args) {
+      return this.check.apply(this, args);
     }
-    [dartx.clear]() {
-      return this.clear();
+    [dartx.clear](...args) {
+      return this.clear.apply(this, args);
     }
-    [dartx.delete](fontFace) {
-      return this.delete(fontFace);
+    [dartx.delete](...args) {
+      return this.delete.apply(this, args);
     }
-    [dartx.forEach](callback, thisArg) {
-      return this.forEach(callback, thisArg);
+    [dartx.forEach](...args) {
+      return this.forEach.apply(this, args);
     }
-    [dartx.has](fontFace) {
-      return this.has(fontFace);
+    [dartx.has](...args) {
+      return this.has.apply(this, args);
     }
   };
   dart.setSignature(html$.FontFaceSet, {
@@ -58072,26 +58072,26 @@
     static get supported() {
       return !!window.FormData;
     }
-    [dartx.append](name, value) {
-      return this.append(name, value);
+    [dartx.append](...args) {
+      return this.append.apply(this, args);
     }
-    [dartx.appendBlob](name, value, filename) {
-      return this.append(name, value, filename);
+    [dartx.appendBlob](...args) {
+      return this.append.apply(this, args);
     }
-    [dartx.delete](name) {
-      return this.delete(name);
+    [dartx.delete](...args) {
+      return this.delete.apply(this, args);
     }
-    [dartx.get](name) {
-      return this.get(name);
+    [dartx.get](...args) {
+      return this.get.apply(this, args);
     }
-    [dartx.getAll](name) {
-      return this.getAll(name);
+    [dartx.getAll](...args) {
+      return this.getAll.apply(this, args);
     }
-    [dartx.has](name) {
-      return this.has(name);
+    [dartx.has](...args) {
+      return this.has.apply(this, args);
     }
-    [dartx.set](name, value, filename) {
-      return this.set(name, value, filename);
+    [dartx.set](...args) {
+      return this.set.apply(this, args);
     }
   };
   dart.setSignature(html$.FormData, {
@@ -58212,31 +58212,31 @@
     set [dartx.target](value) {
       this.target = value;
     }
-    [__getter__](name) {
-      return this.__getter__(name);
+    [__getter__](...args) {
+      return this.__getter__.apply(this, args);
     }
-    [dartx.checkValidity]() {
-      return this.checkValidity();
+    [dartx.checkValidity](...args) {
+      return this.checkValidity.apply(this, args);
     }
-    [dartx.item](index) {
-      return this.item(index);
+    [dartx.item](...args) {
+      return this.item.apply(this, args);
     }
-    [dartx.reportValidity]() {
-      return this.reportValidity();
+    [dartx.reportValidity](...args) {
+      return this.reportValidity.apply(this, args);
     }
     [dartx.requestAutocomplete](details) {
       let details_1 = html_common.convertDartToNative_Dictionary(details);
       this[_requestAutocomplete_1](details_1);
       return;
     }
-    [_requestAutocomplete_1](details) {
-      return this.requestAutocomplete(details);
+    [_requestAutocomplete_1](...args) {
+      return this.requestAutocomplete.apply(this, args);
     }
-    [dartx.reset]() {
-      return this.reset();
+    [dartx.reset](...args) {
+      return this.reset.apply(this, args);
     }
-    [dartx.submit]() {
-      return this.submit();
+    [dartx.submit](...args) {
+      return this.submit.apply(this, args);
     }
   };
   dart.defineNamedConstructor(html$.FormElement, 'created');
@@ -58389,14 +58389,14 @@
     static _() {
       dart.throw(new core.UnsupportedError("Not supported"));
     }
-    [dartx.getRegisteredRegions]() {
-      return this.getRegisteredRegions();
+    [dartx.getRegisteredRegions](...args) {
+      return this.getRegisteredRegions.apply(this, args);
     }
-    [dartx.registerRegion](region) {
-      return this.registerRegion(region);
+    [dartx.registerRegion](...args) {
+      return this.registerRegion.apply(this, args);
     }
-    [dartx.unregisterRegion](regionId) {
-      return this.unregisterRegion(regionId);
+    [dartx.unregisterRegion](...args) {
+      return this.unregisterRegion.apply(this, args);
     }
   };
   dart.setSignature(html$.Geofencing, {
@@ -58516,8 +58516,8 @@
     static _() {
       dart.throw(new core.UnsupportedError("Not supported"));
     }
-    [_clearWatch](watchID) {
-      return this.clearWatch(watchID);
+    [_clearWatch](...args) {
+      return this.clearWatch.apply(this, args);
     }
     [_getCurrentPosition](successCallback, errorCallback, options) {
       if (errorCallback === void 0) errorCallback = null;
@@ -58534,14 +58534,14 @@
       this[_getCurrentPosition_3](successCallback);
       return;
     }
-    [_getCurrentPosition_1](successCallback, errorCallback, options) {
-      return this.getCurrentPosition(successCallback, errorCallback, options);
+    [_getCurrentPosition_1](...args) {
+      return this.getCurrentPosition.apply(this, args);
     }
-    [_getCurrentPosition_2](successCallback, errorCallback) {
-      return this.getCurrentPosition(successCallback, errorCallback);
+    [_getCurrentPosition_2](...args) {
+      return this.getCurrentPosition.apply(this, args);
     }
-    [_getCurrentPosition_3](successCallback) {
-      return this.getCurrentPosition(successCallback);
+    [_getCurrentPosition_3](...args) {
+      return this.getCurrentPosition.apply(this, args);
     }
     [_watchPosition](successCallback, errorCallback, options) {
       if (errorCallback === void 0) errorCallback = null;
@@ -58555,14 +58555,14 @@
       }
       return this[_watchPosition_3](successCallback);
     }
-    [_watchPosition_1](successCallback, errorCallback, options) {
-      return this.watchPosition(successCallback, errorCallback, options);
+    [_watchPosition_1](...args) {
+      return this.watchPosition.apply(this, args);
     }
-    [_watchPosition_2](successCallback, errorCallback) {
-      return this.watchPosition(successCallback, errorCallback);
+    [_watchPosition_2](...args) {
+      return this.watchPosition.apply(this, args);
     }
-    [_watchPosition_3](successCallback) {
-      return this.watchPosition(successCallback);
+    [_watchPosition_3](...args) {
+      return this.watchPosition.apply(this, args);
     }
   };
   dart.setSignature(html$.Geolocation, {
@@ -59233,8 +59233,8 @@
     get [dartx.oldUrl]() {
       return this.oldURL;
     }
-    [_initHashChangeEvent](type, canBubble, cancelable, oldURL, newURL) {
-      return this.initHashChangeEvent(type, canBubble, cancelable, oldURL, newURL);
+    [_initHashChangeEvent](...args) {
+      return this.initHashChangeEvent.apply(this, args);
     }
   };
   dart.setSignature(html$.HashChangeEvent, {
@@ -59401,14 +59401,14 @@
     get [_get_state]() {
       return this.state;
     }
-    [dartx.back]() {
-      return this.back();
+    [dartx.back](...args) {
+      return this.back.apply(this, args);
     }
-    [dartx.forward]() {
-      return this.forward();
+    [dartx.forward](...args) {
+      return this.forward.apply(this, args);
     }
-    [dartx.go](delta) {
-      return this.go(delta);
+    [dartx.go](...args) {
+      return this.go.apply(this, args);
     }
     [dartx.pushState](data, title, url, options) {
       if (options === void 0) options = null;
@@ -59422,11 +59422,11 @@
       this[_pushState_2](data_1, title, url);
       return;
     }
-    [_pushState_1](data, title, url, options) {
-      return this.pushState(data, title, url, options);
+    [_pushState_1](...args) {
+      return this.pushState.apply(this, args);
     }
-    [_pushState_2](data, title, url) {
-      return this.pushState(data, title, url);
+    [_pushState_2](...args) {
+      return this.pushState.apply(this, args);
     }
     [dartx.replaceState](data, title, url, options) {
       if (options === void 0) options = null;
@@ -59440,11 +59440,11 @@
       this[_replaceState_2](data_1, title, url);
       return;
     }
-    [_replaceState_1](data, title, url, options) {
-      return this.replaceState(data, title, url, options);
+    [_replaceState_1](...args) {
+      return this.replaceState.apply(this, args);
     }
-    [_replaceState_2](data, title, url) {
-      return this.replaceState(data, title, url);
+    [_replaceState_2](...args) {
+      return this.replaceState.apply(this, args);
     }
   };
   html$.History[dart.implements] = () => [html$.HistoryBase];
@@ -59509,11 +59509,11 @@
     static _() {
       dart.throw(new core.UnsupportedError("Not supported"));
     }
-    [dartx.getEyeParameters](whichEye) {
-      return this.getEyeParameters(whichEye);
+    [dartx.getEyeParameters](...args) {
+      return this.getEyeParameters.apply(this, args);
     }
-    [dartx.setFieldOfView](leftFov, rightFov) {
-      return this.setFieldOfView(leftFov, rightFov);
+    [dartx.setFieldOfView](...args) {
+      return this.setFieldOfView.apply(this, args);
     }
   };
   dart.setSignature(html$.HmdvrDevice, {
@@ -59578,11 +59578,11 @@
     [dartx.elementAt](index) {
       return this[dartx._get](index);
     }
-    [dartx.item](index) {
-      return this.item(index);
+    [dartx.item](...args) {
+      return this.item.apply(this, args);
     }
-    [dartx.namedItem](name) {
-      return this.namedItem(name);
+    [dartx.namedItem](...args) {
+      return this.namedItem.apply(this, args);
     }
   };
   html$.HtmlCollection[dart.implements] = () => [_js_helper.JavaScriptIndexingBehavior, ListOfNode()];
@@ -59748,11 +59748,11 @@
     static _() {
       dart.throw(new core.UnsupportedError("Not supported"));
     }
-    [dartx.item](index) {
-      return this.item(index);
+    [dartx.item](...args) {
+      return this.item.apply(this, args);
     }
-    [dartx.namedItem](name) {
-      return this.namedItem(name);
+    [dartx.namedItem](...args) {
+      return this.namedItem.apply(this, args);
     }
   };
   dart.setSignature(html$.HtmlFormControlsCollection, {
@@ -59784,8 +59784,8 @@
     static _() {
       dart.throw(new core.UnsupportedError("Not supported"));
     }
-    [_item](index) {
-      return this.item(index);
+    [_item](...args) {
+      return this.item.apply(this, args);
     }
   };
   dart.setSignature(html$.HtmlOptionsCollection, {
@@ -60038,8 +60038,8 @@
       }
       return headers;
     }
-    [dartx.open](method, url, opts) {
-      return this.open(method, url, opts);
+    [dartx.open](...args) {
+      return this.open.apply(this, args);
     }
     static _() {
       dart.throw(new core.UnsupportedError("Not supported"));
@@ -60095,23 +60095,23 @@
     set [dartx.withCredentials](value) {
       this.withCredentials = value;
     }
-    [dartx.abort]() {
-      return this.abort();
+    [dartx.abort](...args) {
+      return this.abort.apply(this, args);
     }
-    [dartx.getAllResponseHeaders]() {
-      return this.getAllResponseHeaders();
+    [dartx.getAllResponseHeaders](...args) {
+      return this.getAllResponseHeaders.apply(this, args);
     }
-    [dartx.getResponseHeader](name) {
-      return this.getResponseHeader(name);
+    [dartx.getResponseHeader](...args) {
+      return this.getResponseHeader.apply(this, args);
     }
-    [dartx.overrideMimeType](mime) {
-      return this.overrideMimeType(mime);
+    [dartx.overrideMimeType](...args) {
+      return this.overrideMimeType.apply(this, args);
     }
-    [dartx.send](body_OR_data) {
-      return this.send(body_OR_data);
+    [dartx.send](...args) {
+      return this.send.apply(this, args);
     }
-    [dartx.setRequestHeader](name, value) {
-      return this.setRequestHeader(name, value);
+    [dartx.setRequestHeader](...args) {
+      return this.setRequestHeader.apply(this, args);
     }
     get [dartx.onReadyStateChange]() {
       return html$.HttpRequest.readyStateChangeEvent.forTarget(this);
@@ -60513,8 +60513,8 @@
     static _() {
       dart.throw(new core.UnsupportedError("Not supported"));
     }
-    [dartx.inspect](objectId, hints) {
-      return this.inspect(objectId, hints);
+    [dartx.inspect](...args) {
+      return this.inspect.apply(this, args);
     }
   };
   dart.setSignature(html$.InjectedScriptHost, {
@@ -60977,29 +60977,29 @@
     get [dartx.willValidate]() {
       return this.willValidate;
     }
-    [dartx.checkValidity]() {
-      return this.checkValidity();
+    [dartx.checkValidity](...args) {
+      return this.checkValidity.apply(this, args);
     }
-    [dartx.reportValidity]() {
-      return this.reportValidity();
+    [dartx.reportValidity](...args) {
+      return this.reportValidity.apply(this, args);
     }
-    [dartx.select]() {
-      return this.select();
+    [dartx.select](...args) {
+      return this.select.apply(this, args);
     }
-    [dartx.setCustomValidity](error) {
-      return this.setCustomValidity(error);
+    [dartx.setCustomValidity](...args) {
+      return this.setCustomValidity.apply(this, args);
     }
-    [dartx.setRangeText](replacement, opts) {
-      return this.setRangeText(replacement, opts);
+    [dartx.setRangeText](...args) {
+      return this.setRangeText.apply(this, args);
     }
-    [dartx.setSelectionRange](start, end, direction) {
-      return this.setSelectionRange(start, end, direction);
+    [dartx.setSelectionRange](...args) {
+      return this.setSelectionRange.apply(this, args);
     }
-    [dartx.stepDown](n) {
-      return this.stepDown(n);
+    [dartx.stepDown](...args) {
+      return this.stepDown.apply(this, args);
     }
-    [dartx.stepUp](n) {
-      return this.stepUp(n);
+    [dartx.stepUp](...args) {
+      return this.stepUp.apply(this, args);
     }
   };
   dart.defineNamedConstructor(html$.InputElement, 'created');
@@ -62294,8 +62294,8 @@
     get [dartx.shiftKey]() {
       return this.shiftKey;
     }
-    [dartx.getModifierState](keyArg) {
-      return this.getModifierState(keyArg);
+    [dartx.getModifierState](...args) {
+      return this.getModifierState.apply(this, args);
     }
   };
   dart.setSignature(html$.KeyboardEvent, {
@@ -62470,14 +62470,14 @@
     get [dartx.willValidate]() {
       return this.willValidate;
     }
-    [dartx.checkValidity]() {
-      return this.checkValidity();
+    [dartx.checkValidity](...args) {
+      return this.checkValidity.apply(this, args);
     }
-    [dartx.reportValidity]() {
-      return this.reportValidity();
+    [dartx.reportValidity](...args) {
+      return this.reportValidity.apply(this, args);
     }
-    [dartx.setCustomValidity](error) {
-      return this.setCustomValidity(error);
+    [dartx.setCustomValidity](...args) {
+      return this.setCustomValidity.apply(this, args);
     }
   };
   dart.defineNamedConstructor(html$.KeygenElement, 'created');
@@ -62802,14 +62802,14 @@
     set [dartx.search](value) {
       this.search = value;
     }
-    [dartx.assign](url) {
-      return this.assign(url);
+    [dartx.assign](...args) {
+      return this.assign.apply(this, args);
     }
-    [dartx.reload]() {
-      return this.reload();
+    [dartx.reload](...args) {
+      return this.reload.apply(this, args);
     }
-    [dartx.replace](url) {
-      return this.replace(url);
+    [dartx.replace](...args) {
+      return this.replace.apply(this, args);
     }
     get [dartx.origin]() {
       if ("origin" in this) {
@@ -62956,14 +62956,14 @@
     set [dartx.volume](value) {
       this.volume = value;
     }
-    [dartx.pause]() {
-      return this.pause();
+    [dartx.pause](...args) {
+      return this.pause.apply(this, args);
     }
-    [dartx.play]() {
-      return this.play();
+    [dartx.play](...args) {
+      return this.play.apply(this, args);
     }
-    [dartx.unpause]() {
-      return this.unpause();
+    [dartx.unpause](...args) {
+      return this.unpause.apply(this, args);
     }
   };
   dart.setSignature(html$.MediaController, {
@@ -63035,15 +63035,15 @@
     static _() {
       dart.throw(new core.UnsupportedError("Not supported"));
     }
-    [dartx.enumerateDevices]() {
-      return this.enumerateDevices();
+    [dartx.enumerateDevices](...args) {
+      return this.enumerateDevices.apply(this, args);
     }
     [dartx.getUserMedia](options) {
       let options_1 = html_common.convertDartToNative_Dictionary(options);
       return this[_getUserMedia_1](options_1);
     }
-    [_getUserMedia_1](options) {
-      return this.getUserMedia(options);
+    [_getUserMedia_1](...args) {
+      return this.getUserMedia.apply(this, args);
     }
   };
   dart.setSignature(html$.MediaDevices, {
@@ -63305,20 +63305,20 @@
     get [dartx.sessionId]() {
       return this.sessionId;
     }
-    [dartx.close]() {
-      return this.close();
+    [dartx.close](...args) {
+      return this.close.apply(this, args);
     }
-    [dartx.generateRequest](initDataType, initData) {
-      return this.generateRequest(initDataType, initData);
+    [dartx.generateRequest](...args) {
+      return this.generateRequest.apply(this, args);
     }
-    [dartx.load](sessionId) {
-      return this.load(sessionId);
+    [dartx.load](...args) {
+      return this.load.apply(this, args);
     }
-    [dartx.remove]() {
-      return this.remove();
+    [dartx.remove](...args) {
+      return this.remove.apply(this, args);
     }
-    [_update$](response) {
-      return this.update(response);
+    [_update$](...args) {
+      return this.update.apply(this, args);
     }
   };
   dart.setSignature(html$.MediaKeySession, {
@@ -63367,14 +63367,14 @@
     get [dartx.keySystem]() {
       return this.keySystem;
     }
-    [dartx.createMediaKeys]() {
-      return this.createMediaKeys();
+    [dartx.createMediaKeys](...args) {
+      return this.createMediaKeys.apply(this, args);
     }
     [dartx.getConfiguration]() {
       return html_common.convertNativeToDart_Dictionary(this[_getConfiguration_1]());
     }
-    [_getConfiguration_1]() {
-      return this.getConfiguration();
+    [_getConfiguration_1](...args) {
+      return this.getConfiguration.apply(this, args);
     }
   };
   dart.setSignature(html$.MediaKeySystemAccess, {
@@ -63395,11 +63395,11 @@
     static _() {
       dart.throw(new core.UnsupportedError("Not supported"));
     }
-    [_createSession](sessionType) {
-      return this.createSession(sessionType);
+    [_createSession](...args) {
+      return this.createSession.apply(this, args);
     }
-    [dartx.setServerCertificate](serverCertificate) {
-      return this.setServerCertificate(serverCertificate);
+    [dartx.setServerCertificate](...args) {
+      return this.setServerCertificate.apply(this, args);
     }
   };
   dart.setSignature(html$.MediaKeys, {
@@ -63430,14 +63430,14 @@
     set [dartx.mediaText](value) {
       this.mediaText = value;
     }
-    [dartx.appendMedium](medium) {
-      return this.appendMedium(medium);
+    [dartx.appendMedium](...args) {
+      return this.appendMedium.apply(this, args);
     }
-    [dartx.deleteMedium](medium) {
-      return this.deleteMedium(medium);
+    [dartx.deleteMedium](...args) {
+      return this.deleteMedium.apply(this, args);
     }
-    [dartx.item](index) {
-      return this.item(index);
+    [dartx.item](...args) {
+      return this.item.apply(this, args);
     }
   };
   dart.setSignature(html$.MediaList, {
@@ -63470,11 +63470,11 @@
     get [dartx.media]() {
       return this.media;
     }
-    [dartx.addListener](listener) {
-      return this.addListener(listener);
+    [dartx.addListener](...args) {
+      return this.addListener.apply(this, args);
     }
-    [dartx.removeListener](listener) {
-      return this.removeListener(listener);
+    [dartx.removeListener](...args) {
+      return this.removeListener.apply(this, args);
     }
     get [dartx.onChange]() {
       return html$.MediaQueryList.changeEvent.forTarget(this);
@@ -63558,11 +63558,11 @@
     static _create_1() {
       return new MediaSession();
     }
-    [dartx.activate]() {
-      return this.activate();
+    [dartx.activate](...args) {
+      return this.activate.apply(this, args);
     }
-    [dartx.deactivate]() {
-      return this.deactivate();
+    [dartx.deactivate](...args) {
+      return this.deactivate.apply(this, args);
     }
   };
   dart.setSignature(html$.MediaSession, {
@@ -63615,14 +63615,14 @@
     get [dartx.sourceBuffers]() {
       return this.sourceBuffers;
     }
-    [dartx.addSourceBuffer](type) {
-      return this.addSourceBuffer(type);
+    [dartx.addSourceBuffer](...args) {
+      return this.addSourceBuffer.apply(this, args);
     }
-    [dartx.endOfStream](error) {
-      return this.endOfStream(error);
+    [dartx.endOfStream](...args) {
+      return this.endOfStream.apply(this, args);
     }
-    [dartx.removeSourceBuffer](buffer) {
-      return this.removeSourceBuffer(buffer);
+    [dartx.removeSourceBuffer](...args) {
+      return this.removeSourceBuffer.apply(this, args);
     }
   };
   dart.setSignature(html$.MediaSource, {
@@ -63704,29 +63704,29 @@
     get [dartx.label]() {
       return this.label;
     }
-    [dartx.addTrack](track) {
-      return this.addTrack(track);
+    [dartx.addTrack](...args) {
+      return this.addTrack.apply(this, args);
     }
-    [dartx.clone]() {
-      return this.clone();
+    [dartx.clone](...args) {
+      return this.clone.apply(this, args);
     }
-    [dartx.getAudioTracks]() {
-      return this.getAudioTracks();
+    [dartx.getAudioTracks](...args) {
+      return this.getAudioTracks.apply(this, args);
     }
-    [dartx.getTrackById](trackId) {
-      return this.getTrackById(trackId);
+    [dartx.getTrackById](...args) {
+      return this.getTrackById.apply(this, args);
     }
-    [dartx.getTracks]() {
-      return this.getTracks();
+    [dartx.getTracks](...args) {
+      return this.getTracks.apply(this, args);
     }
-    [dartx.getVideoTracks]() {
-      return this.getVideoTracks();
+    [dartx.getVideoTracks](...args) {
+      return this.getVideoTracks.apply(this, args);
     }
-    [dartx.removeTrack](track) {
-      return this.removeTrack(track);
+    [dartx.removeTrack](...args) {
+      return this.removeTrack.apply(this, args);
     }
-    [dartx.stop]() {
-      return this.stop();
+    [dartx.stop](...args) {
+      return this.stop.apply(this, args);
     }
     get [dartx.onAddTrack]() {
       return html$.MediaStream.addTrackEvent.forTarget(this);
@@ -63872,8 +63872,8 @@
     get [dartx.readyState]() {
       return this.readyState;
     }
-    [dartx.clone]() {
-      return this.clone();
+    [dartx.clone](...args) {
+      return this.clone.apply(this, args);
     }
     static getSources() {
       let completer = CompleterOfListOfSourceInfo().new();
@@ -63882,8 +63882,8 @@
       }, ListOfSourceInfoTovoid()));
       return completer.future;
     }
-    [dartx.stop]() {
-      return this.stop();
+    [dartx.stop](...args) {
+      return this.stop.apply(this, args);
     }
     get [dartx.onEnded]() {
       return html$.MediaStreamTrack.endedEvent.forTarget(this);
@@ -64194,8 +64194,8 @@
     get [_get_source]() {
       return this.source;
     }
-    [_initMessageEvent](typeArg, canBubbleArg, cancelableArg, dataArg, originArg, lastEventIdArg, sourceArg, portsArg) {
-      return this.initMessageEvent(typeArg, canBubbleArg, cancelableArg, dataArg, originArg, lastEventIdArg, sourceArg, portsArg);
+    [_initMessageEvent](...args) {
+      return this.initMessageEvent.apply(this, args);
     }
   };
   dart.setSignature(html$.MessageEvent, {
@@ -64231,8 +64231,8 @@
     static _() {
       dart.throw(new core.UnsupportedError("Not supported"));
     }
-    [dartx.close]() {
-      return this.close();
+    [dartx.close](...args) {
+      return this.close.apply(this, args);
     }
     [dartx.postMessage](message, transfer) {
       if (transfer === void 0) transfer = null;
@@ -64245,14 +64245,14 @@
       this[_postMessage_2](message_1);
       return;
     }
-    [_postMessage_1](message, transfer) {
-      return this.postMessage(message, transfer);
+    [_postMessage_1](...args) {
+      return this.postMessage.apply(this, args);
     }
-    [_postMessage_2](message) {
-      return this.postMessage(message);
+    [_postMessage_2](...args) {
+      return this.postMessage.apply(this, args);
     }
-    [dartx.start]() {
-      return this.start();
+    [dartx.start](...args) {
+      return this.start.apply(this, args);
     }
     get [dartx.onMessage]() {
       return html$.MessagePort.messageEvent.forTarget(this);
@@ -64546,11 +64546,11 @@
     get [dartx.version]() {
       return this.version;
     }
-    [dartx.close]() {
-      return this.close();
+    [dartx.close](...args) {
+      return this.close.apply(this, args);
     }
-    [dartx.open]() {
-      return this.open();
+    [dartx.open](...args) {
+      return this.open.apply(this, args);
     }
   };
   dart.setSignature(html$.MidiPort, {
@@ -64660,8 +64660,8 @@
     static _() {
       dart.throw(new core.UnsupportedError("Not supported"));
     }
-    [dartx.send](data, timestamp) {
-      return this.send(data, timestamp);
+    [dartx.send](...args) {
+      return this.send.apply(this, args);
     }
   };
   dart.setSignature(html$.MidiOutput, {
@@ -64772,11 +64772,11 @@
     [dartx.elementAt](index) {
       return this[dartx._get](index);
     }
-    [dartx.item](index) {
-      return this.item(index);
+    [dartx.item](...args) {
+      return this.item.apply(this, args);
     }
-    [dartx.namedItem](name) {
-      return this.namedItem(name);
+    [dartx.namedItem](...args) {
+      return this.namedItem.apply(this, args);
     }
   };
   html$.MimeTypeArray[dart.implements] = () => [_js_helper.JavaScriptIndexingBehavior, ListOfMimeType()];
@@ -64983,8 +64983,8 @@
       this[_initMouseEvent_1](type, bubbles, cancelable, view, detail, screenX, screenY, clientX, clientY, ctrlKey, altKey, shiftKey, metaKey, button, relatedTarget_1);
       return;
     }
-    [_initMouseEvent_1](type, bubbles, cancelable, view, detail, screenX, screenY, clientX, clientY, ctrlKey, altKey, shiftKey, metaKey, button, relatedTarget) {
-      return this.initMouseEvent(type, bubbles, cancelable, view, detail, screenX, screenY, clientX, clientY, ctrlKey, altKey, shiftKey, metaKey, button, relatedTarget);
+    [_initMouseEvent_1](...args) {
+      return this.initMouseEvent.apply(this, args);
     }
     get [dartx.client]() {
       return new (PointOfnum())(this[_clientX], this[_clientY]);
@@ -65077,19 +65077,19 @@
     'observe'
   ]);
   html$.MutationObserver = class MutationObserver extends _interceptors.Interceptor {
-    [dartx.disconnect]() {
-      return this.disconnect();
+    [dartx.disconnect](...args) {
+      return this.disconnect.apply(this, args);
     }
     [_observe](target, options) {
       let options_1 = html_common.convertDartToNative_Dictionary(options);
       this[_observe_1](target, options_1);
       return;
     }
-    [_observe_1](target, options) {
-      return this.observe(target, options);
+    [_observe_1](...args) {
+      return this.observe.apply(this, args);
     }
-    [dartx.takeRecords]() {
-      return this.takeRecords();
+    [dartx.takeRecords](...args) {
+      return this.takeRecords.apply(this, args);
     }
     static get supported() {
       return !!(window.MutationObserver || window.WebKitMutationObserver);
@@ -65127,8 +65127,8 @@
     static _fixupList(list) {
       return list;
     }
-    [_call](target, options) {
-      return this.observe(target, options);
+    [_call](...args) {
+      return this.observe.apply(this, args);
     }
     static new(callback) {
       0;
@@ -65282,8 +65282,8 @@
         this.getUserMedia = this.getUserMedia || this.webkitGetUserMedia || this.mozGetUserMedia || this.msGetUserMedia;
       }
     }
-    [_getUserMedia](options, success, error) {
-      return this.getUserMedia(options, success, error);
+    [_getUserMedia](...args) {
+      return this.getUserMedia.apply(this, args);
     }
     static _() {
       dart.throw(new core.UnsupportedError("Not supported"));
@@ -65342,17 +65342,17 @@
     get [dartx.temporaryStorage]() {
       return this.webkitTemporaryStorage;
     }
-    [dartx.getBattery]() {
-      return this.getBattery();
+    [dartx.getBattery](...args) {
+      return this.getBattery.apply(this, args);
     }
-    [dartx.getGamepads]() {
-      return this.getGamepads();
+    [dartx.getGamepads](...args) {
+      return this.getGamepads.apply(this, args);
     }
-    [dartx.getVRDevices]() {
-      return this.getVRDevices();
+    [dartx.getVRDevices](...args) {
+      return this.getVRDevices.apply(this, args);
     }
-    [dartx.registerProtocolHandler](scheme, url, title) {
-      return this.registerProtocolHandler(scheme, url, title);
+    [dartx.registerProtocolHandler](...args) {
+      return this.registerProtocolHandler.apply(this, args);
     }
     [dartx.requestMidiAccess](options) {
       if (options === void 0) options = null;
@@ -65362,17 +65362,17 @@
       }
       return this[_requestMidiAccess_2]();
     }
-    [_requestMidiAccess_1](options) {
-      return this.requestMIDIAccess(options);
+    [_requestMidiAccess_1](...args) {
+      return this.requestMIDIAccess.apply(this, args);
     }
-    [_requestMidiAccess_2]() {
-      return this.requestMIDIAccess();
+    [_requestMidiAccess_2](...args) {
+      return this.requestMIDIAccess.apply(this, args);
     }
-    [dartx.requestMediaKeySystemAccess](keySystem, supportedConfigurations) {
-      return this.requestMediaKeySystemAccess(keySystem, supportedConfigurations);
+    [dartx.requestMediaKeySystemAccess](...args) {
+      return this.requestMediaKeySystemAccess.apply(this, args);
     }
-    [dartx.sendBeacon](url, data) {
-      return this.sendBeacon(url, data);
+    [dartx.sendBeacon](...args) {
+      return this.sendBeacon.apply(this, args);
     }
     get [dartx.hardwareConcurrency]() {
       return this.hardwareConcurrency;
@@ -65407,8 +65407,8 @@
     get [dartx.cookieEnabled]() {
       return this.cookieEnabled;
     }
-    [dartx.getStorageUpdates]() {
-      return this.getStorageUpdates();
+    [dartx.getStorageUpdates](...args) {
+      return this.getStorageUpdates.apply(this, args);
     }
   };
   html$.Navigator[dart.implements] = () => [html$.NavigatorStorageUtils, html$.NavigatorCpu, html$.NavigatorLanguage, html$.NavigatorOnLine, html$.NavigatorID];
@@ -65629,8 +65629,8 @@
     get [dartx.cookieEnabled]() {
       return this.cookieEnabled;
     }
-    [dartx.getStorageUpdates]() {
-      return this.getStorageUpdates();
+    [dartx.getStorageUpdates](...args) {
+      return this.getStorageUpdates.apply(this, args);
     }
   };
   dart.setSignature(html$.NavigatorStorageUtils, {
@@ -65937,14 +65937,14 @@
     get [dartx.whatToShow]() {
       return this.whatToShow;
     }
-    [dartx.detach]() {
-      return this.detach();
+    [dartx.detach](...args) {
+      return this.detach.apply(this, args);
     }
-    [dartx.nextNode]() {
-      return this.nextNode();
+    [dartx.nextNode](...args) {
+      return this.nextNode.apply(this, args);
     }
-    [dartx.previousNode]() {
-      return this.previousNode();
+    [dartx.previousNode](...args) {
+      return this.previousNode.apply(this, args);
     }
   };
   dart.setSignature(html$.NodeIterator, {
@@ -66017,8 +66017,8 @@
     [dartx.elementAt](index) {
       return this[dartx._get](index);
     }
-    [_item](index) {
-      return this.item(index);
+    [_item](...args) {
+      return this.item.apply(this, args);
     }
   };
   html$.NodeList[dart.implements] = () => [_js_helper.JavaScriptIndexingBehavior, ListOfNode()];
@@ -66070,8 +66070,8 @@
     static _() {
       dart.throw(new core.UnsupportedError("Not supported"));
     }
-    [dartx.getElementById](elementId) {
-      return this.getElementById(elementId);
+    [dartx.getElementById](...args) {
+      return this.getElementById.apply(this, args);
     }
   };
   dart.setSignature(html$.NonElementParentNode, {
@@ -66161,8 +66161,8 @@
     get [dartx.vibrate]() {
       return this.vibrate;
     }
-    [dartx.close]() {
-      return this.close();
+    [dartx.close](...args) {
+      return this.close.apply(this, args);
     }
     static requestPermission() {
       let completer = CompleterOfString().new();
@@ -66415,20 +66415,20 @@
     get [dartx.willValidate]() {
       return this.willValidate;
     }
-    [__getter__](index_OR_name) {
-      return this.__getter__(index_OR_name);
+    [__getter__](...args) {
+      return this.__getter__.apply(this, args);
     }
-    [__setter__](index_OR_name, value) {
-      return this.__setter__(index_OR_name, value);
+    [__setter__](...args) {
+      return this.__setter__.apply(this, args);
     }
-    [dartx.checkValidity]() {
-      return this.checkValidity();
+    [dartx.checkValidity](...args) {
+      return this.checkValidity.apply(this, args);
     }
-    [dartx.reportValidity]() {
-      return this.reportValidity();
+    [dartx.reportValidity](...args) {
+      return this.reportValidity.apply(this, args);
     }
-    [dartx.setCustomValidity](error) {
-      return this.setCustomValidity(error);
+    [dartx.setCustomValidity](...args) {
+      return this.setCustomValidity.apply(this, args);
     }
   };
   dart.defineNamedConstructor(html$.ObjectElement, 'created');
@@ -66702,14 +66702,14 @@
     get [dartx.willValidate]() {
       return this.willValidate;
     }
-    [dartx.checkValidity]() {
-      return this.checkValidity();
+    [dartx.checkValidity](...args) {
+      return this.checkValidity.apply(this, args);
     }
-    [dartx.reportValidity]() {
-      return this.reportValidity();
+    [dartx.reportValidity](...args) {
+      return this.reportValidity.apply(this, args);
     }
-    [dartx.setCustomValidity](error) {
-      return this.setCustomValidity(error);
+    [dartx.setCustomValidity](...args) {
+      return this.setCustomValidity.apply(this, args);
     }
   };
   dart.defineNamedConstructor(html$.OutputElement, 'created');
@@ -66943,35 +66943,35 @@
     static _create_3(path_OR_text) {
       return new Path2D(path_OR_text);
     }
-    [dartx.addPath](path, transform) {
-      return this.addPath(path, transform);
+    [dartx.addPath](...args) {
+      return this.addPath.apply(this, args);
     }
-    [dartx.arc](x, y, radius, startAngle, endAngle, anticlockwise) {
-      return this.arc(x, y, radius, startAngle, endAngle, anticlockwise);
+    [dartx.arc](...args) {
+      return this.arc.apply(this, args);
     }
-    [dartx.arcTo](x1, y1, x2, y2, radius) {
-      return this.arcTo(x1, y1, x2, y2, radius);
+    [dartx.arcTo](...args) {
+      return this.arcTo.apply(this, args);
     }
-    [dartx.bezierCurveTo](cp1x, cp1y, cp2x, cp2y, x, y) {
-      return this.bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y);
+    [dartx.bezierCurveTo](...args) {
+      return this.bezierCurveTo.apply(this, args);
     }
-    [dartx.closePath]() {
-      return this.closePath();
+    [dartx.closePath](...args) {
+      return this.closePath.apply(this, args);
     }
-    [dartx.ellipse](x, y, radiusX, radiusY, rotation, startAngle, endAngle, anticlockwise) {
-      return this.ellipse(x, y, radiusX, radiusY, rotation, startAngle, endAngle, anticlockwise);
+    [dartx.ellipse](...args) {
+      return this.ellipse.apply(this, args);
     }
-    [dartx.lineTo](x, y) {
-      return this.lineTo(x, y);
+    [dartx.lineTo](...args) {
+      return this.lineTo.apply(this, args);
     }
-    [dartx.moveTo](x, y) {
-      return this.moveTo(x, y);
+    [dartx.moveTo](...args) {
+      return this.moveTo.apply(this, args);
     }
-    [dartx.quadraticCurveTo](cpx, cpy, x, y) {
-      return this.quadraticCurveTo(cpx, cpy, x, y);
+    [dartx.quadraticCurveTo](...args) {
+      return this.quadraticCurveTo.apply(this, args);
     }
-    [dartx.rect](x, y, width, height) {
-      return this.rect(x, y, width, height);
+    [dartx.rect](...args) {
+      return this.rect.apply(this, args);
     }
   };
   html$.Path2D[dart.implements] = () => [html$._CanvasPathMethods];
@@ -67034,41 +67034,41 @@
     get [dartx.timing]() {
       return this.timing;
     }
-    [dartx.clearFrameTimings]() {
-      return this.clearFrameTimings();
+    [dartx.clearFrameTimings](...args) {
+      return this.clearFrameTimings.apply(this, args);
     }
-    [dartx.clearMarks](markName) {
-      return this.clearMarks(markName);
+    [dartx.clearMarks](...args) {
+      return this.clearMarks.apply(this, args);
     }
-    [dartx.clearMeasures](measureName) {
-      return this.clearMeasures(measureName);
+    [dartx.clearMeasures](...args) {
+      return this.clearMeasures.apply(this, args);
     }
-    [dartx.getEntries]() {
-      return this.getEntries();
+    [dartx.getEntries](...args) {
+      return this.getEntries.apply(this, args);
     }
-    [dartx.getEntriesByName](name, entryType) {
-      return this.getEntriesByName(name, entryType);
+    [dartx.getEntriesByName](...args) {
+      return this.getEntriesByName.apply(this, args);
     }
-    [dartx.getEntriesByType](entryType) {
-      return this.getEntriesByType(entryType);
+    [dartx.getEntriesByType](...args) {
+      return this.getEntriesByType.apply(this, args);
     }
-    [dartx.mark](markName) {
-      return this.mark(markName);
+    [dartx.mark](...args) {
+      return this.mark.apply(this, args);
     }
-    [dartx.measure](measureName, startMark, endMark) {
-      return this.measure(measureName, startMark, endMark);
+    [dartx.measure](...args) {
+      return this.measure.apply(this, args);
     }
-    [dartx.now]() {
-      return this.now();
+    [dartx.now](...args) {
+      return this.now.apply(this, args);
     }
-    [dartx.setFrameTimingBufferSize](maxSize) {
-      return this.setFrameTimingBufferSize(maxSize);
+    [dartx.setFrameTimingBufferSize](...args) {
+      return this.setFrameTimingBufferSize.apply(this, args);
     }
-    [dartx.clearResourceTimings]() {
-      return this.webkitClearResourceTimings();
+    [dartx.clearResourceTimings](...args) {
+      return this.webkitClearResourceTimings.apply(this, args);
     }
-    [dartx.setResourceTimingBufferSize](maxSize) {
-      return this.webkitSetResourceTimingBufferSize(maxSize);
+    [dartx.setResourceTimingBufferSize](...args) {
+      return this.webkitSetResourceTimingBufferSize.apply(this, args);
     }
     get [dartx.onResourceTimingBufferFull]() {
       return html$.Performance.resourceTimingBufferFullEvent.forTarget(this);
@@ -67461,14 +67461,14 @@
     get [dartx.minPossiblePeriod]() {
       return this.minPossiblePeriod;
     }
-    [dartx.getRegistration](tag) {
-      return this.getRegistration(tag);
+    [dartx.getRegistration](...args) {
+      return this.getRegistration.apply(this, args);
     }
-    [dartx.getRegistrations]() {
-      return this.getRegistrations();
+    [dartx.getRegistrations](...args) {
+      return this.getRegistrations.apply(this, args);
     }
-    [dartx.permissionState]() {
-      return this.permissionState();
+    [dartx.permissionState](...args) {
+      return this.permissionState.apply(this, args);
     }
     [dartx.register](options) {
       if (options === void 0) options = null;
@@ -67478,11 +67478,11 @@
       }
       return this[_register_2]();
     }
-    [_register_1](options) {
-      return this.register(options);
+    [_register_1](...args) {
+      return this.register.apply(this, args);
     }
-    [_register_2]() {
-      return this.register();
+    [_register_2](...args) {
+      return this.register.apply(this, args);
     }
   };
   dart.setSignature(html$.PeriodicSyncManager, {
@@ -67521,8 +67521,8 @@
     get [dartx.tag]() {
       return this.tag;
     }
-    [dartx.unregister]() {
-      return this.unregister();
+    [dartx.unregister](...args) {
+      return this.unregister.apply(this, args);
     }
   };
   dart.setSignature(html$.PeriodicSyncRegistration, {
@@ -67577,8 +67577,8 @@
     static _() {
       dart.throw(new core.UnsupportedError("Not supported"));
     }
-    [dartx.query](permission) {
-      return this.query(permission);
+    [dartx.query](...args) {
+      return this.query.apply(this, args);
     }
   };
   dart.setSignature(html$.Permissions, {
@@ -67626,11 +67626,11 @@
     get [dartx.name]() {
       return this.name;
     }
-    [dartx.item](index) {
-      return this.item(index);
+    [dartx.item](...args) {
+      return this.item.apply(this, args);
     }
-    [dartx.namedItem](name) {
-      return this.namedItem(name);
+    [dartx.namedItem](...args) {
+      return this.namedItem.apply(this, args);
     }
   };
   dart.setSignature(html$.Plugin, {
@@ -67702,14 +67702,14 @@
     [dartx.elementAt](index) {
       return this[dartx._get](index);
     }
-    [dartx.item](index) {
-      return this.item(index);
+    [dartx.item](...args) {
+      return this.item.apply(this, args);
     }
-    [dartx.namedItem](name) {
-      return this.namedItem(name);
+    [dartx.namedItem](...args) {
+      return this.namedItem.apply(this, args);
     }
-    [dartx.refresh](reload) {
-      return this.refresh(reload);
+    [dartx.refresh](...args) {
+      return this.refresh.apply(this, args);
     }
   };
   html$.PluginArray[dart.implements] = () => [_js_helper.JavaScriptIndexingBehavior, ListOfPlugin()];
@@ -67758,8 +67758,8 @@
     set [dartx.message](value) {
       this.message = value;
     }
-    [dartx.createdCallback]() {
-      return this.createdCallback();
+    [dartx.createdCallback](...args) {
+      return this.createdCallback.apply(this, args);
     }
   };
   dart.defineNamedConstructor(html$.PluginPlaceholderElement, 'created');
@@ -67934,14 +67934,14 @@
     static _() {
       dart.throw(new core.UnsupportedError("Not supported"));
     }
-    [dartx.getImmediateState]() {
-      return this.getImmediateState();
+    [dartx.getImmediateState](...args) {
+      return this.getImmediateState.apply(this, args);
     }
-    [dartx.getState]() {
-      return this.getState();
+    [dartx.getState](...args) {
+      return this.getState.apply(this, args);
     }
-    [dartx.resetSensor]() {
-      return this.resetSensor();
+    [dartx.resetSensor](...args) {
+      return this.resetSensor.apply(this, args);
     }
   };
   dart.setSignature(html$.PositionSensorVRDevice, {
@@ -67986,14 +67986,14 @@
     get [dartx.session]() {
       return this.session;
     }
-    [dartx.getAvailability](url) {
-      return this.getAvailability(url);
+    [dartx.getAvailability](...args) {
+      return this.getAvailability.apply(this, args);
     }
-    [dartx.joinSession](url, presentationId) {
-      return this.joinSession(url, presentationId);
+    [dartx.joinSession](...args) {
+      return this.joinSession.apply(this, args);
     }
-    [dartx.startSession](url) {
-      return this.startSession(url);
+    [dartx.startSession](...args) {
+      return this.startSession.apply(this, args);
     }
   };
   dart.setSignature(html$.Presentation, {
@@ -68057,11 +68057,11 @@
     get [dartx.state]() {
       return this.state;
     }
-    [dartx.close]() {
-      return this.close();
+    [dartx.close](...args) {
+      return this.close.apply(this, args);
     }
-    [dartx.send](data_OR_message) {
-      return this.send(data_OR_message);
+    [dartx.send](...args) {
+      return this.send.apply(this, args);
     }
     get [dartx.onMessage]() {
       return html$.PresentationSession.messageEvent.forTarget(this);
@@ -68314,8 +68314,8 @@
     static _() {
       dart.throw(new core.UnsupportedError("Not supported"));
     }
-    [dartx.getSubscription]() {
-      return this.getSubscription();
+    [dartx.getSubscription](...args) {
+      return this.getSubscription.apply(this, args);
     }
     [dartx.permissionState](options) {
       if (options === void 0) options = null;
@@ -68325,11 +68325,11 @@
       }
       return this[_permissionState_2]();
     }
-    [_permissionState_1](options) {
-      return this.permissionState(options);
+    [_permissionState_1](...args) {
+      return this.permissionState.apply(this, args);
     }
-    [_permissionState_2]() {
-      return this.permissionState();
+    [_permissionState_2](...args) {
+      return this.permissionState.apply(this, args);
     }
     [dartx.subscribe](options) {
       if (options === void 0) options = null;
@@ -68339,11 +68339,11 @@
       }
       return this[_subscribe_2]();
     }
-    [_subscribe_1](options) {
-      return this.subscribe(options);
+    [_subscribe_1](...args) {
+      return this.subscribe.apply(this, args);
     }
-    [_subscribe_2]() {
-      return this.subscribe();
+    [_subscribe_2](...args) {
+      return this.subscribe.apply(this, args);
     }
   };
   dart.setSignature(html$.PushManager, {
@@ -68375,17 +68375,17 @@
     static _create_1(message) {
       return new PushMessageData(message);
     }
-    [dartx.arrayBuffer]() {
-      return this.arrayBuffer();
+    [dartx.arrayBuffer](...args) {
+      return this.arrayBuffer.apply(this, args);
     }
-    [dartx.blob]() {
-      return this.blob();
+    [dartx.blob](...args) {
+      return this.blob.apply(this, args);
     }
-    [dartx.json]() {
-      return this.json();
+    [dartx.json](...args) {
+      return this.json.apply(this, args);
     }
-    [dartx.text]() {
-      return this.text();
+    [dartx.text](...args) {
+      return this.text.apply(this, args);
     }
   };
   dart.setSignature(html$.PushMessageData, {
@@ -68414,8 +68414,8 @@
     get [dartx.endpoint]() {
       return this.endpoint;
     }
-    [dartx.unsubscribe]() {
-      return this.unsubscribe();
+    [dartx.unsubscribe](...args) {
+      return this.unsubscribe.apply(this, args);
     }
   };
   dart.setSignature(html$.PushSubscription, {
@@ -68517,74 +68517,74 @@
     get [dartx.startOffset]() {
       return this.startOffset;
     }
-    [dartx.cloneContents]() {
-      return this.cloneContents();
+    [dartx.cloneContents](...args) {
+      return this.cloneContents.apply(this, args);
     }
-    [dartx.cloneRange]() {
-      return this.cloneRange();
+    [dartx.cloneRange](...args) {
+      return this.cloneRange.apply(this, args);
     }
-    [dartx.collapse](toStart) {
-      return this.collapse(toStart);
+    [dartx.collapse](...args) {
+      return this.collapse.apply(this, args);
     }
-    [dartx.compareBoundaryPoints](how, sourceRange) {
-      return this.compareBoundaryPoints(how, sourceRange);
+    [dartx.compareBoundaryPoints](...args) {
+      return this.compareBoundaryPoints.apply(this, args);
     }
-    [dartx.comparePoint](node, offset) {
-      return this.comparePoint(node, offset);
+    [dartx.comparePoint](...args) {
+      return this.comparePoint.apply(this, args);
     }
-    [dartx.createContextualFragment](fragment) {
-      return this.createContextualFragment(fragment);
+    [dartx.createContextualFragment](...args) {
+      return this.createContextualFragment.apply(this, args);
     }
-    [dartx.deleteContents]() {
-      return this.deleteContents();
+    [dartx.deleteContents](...args) {
+      return this.deleteContents.apply(this, args);
     }
-    [dartx.detach]() {
-      return this.detach();
+    [dartx.detach](...args) {
+      return this.detach.apply(this, args);
     }
-    [dartx.expand](unit) {
-      return this.expand(unit);
+    [dartx.expand](...args) {
+      return this.expand.apply(this, args);
     }
-    [dartx.extractContents]() {
-      return this.extractContents();
+    [dartx.extractContents](...args) {
+      return this.extractContents.apply(this, args);
     }
-    [dartx.getBoundingClientRect]() {
-      return this.getBoundingClientRect();
+    [dartx.getBoundingClientRect](...args) {
+      return this.getBoundingClientRect.apply(this, args);
     }
-    [dartx.getClientRects]() {
-      return this.getClientRects();
+    [dartx.getClientRects](...args) {
+      return this.getClientRects.apply(this, args);
     }
-    [dartx.insertNode](node) {
-      return this.insertNode(node);
+    [dartx.insertNode](...args) {
+      return this.insertNode.apply(this, args);
     }
-    [dartx.isPointInRange](node, offset) {
-      return this.isPointInRange(node, offset);
+    [dartx.isPointInRange](...args) {
+      return this.isPointInRange.apply(this, args);
     }
-    [dartx.selectNode](node) {
-      return this.selectNode(node);
+    [dartx.selectNode](...args) {
+      return this.selectNode.apply(this, args);
     }
-    [dartx.selectNodeContents](node) {
-      return this.selectNodeContents(node);
+    [dartx.selectNodeContents](...args) {
+      return this.selectNodeContents.apply(this, args);
     }
-    [dartx.setEnd](node, offset) {
-      return this.setEnd(node, offset);
+    [dartx.setEnd](...args) {
+      return this.setEnd.apply(this, args);
     }
-    [dartx.setEndAfter](node) {
-      return this.setEndAfter(node);
+    [dartx.setEndAfter](...args) {
+      return this.setEndAfter.apply(this, args);
     }
-    [dartx.setEndBefore](node) {
-      return this.setEndBefore(node);
+    [dartx.setEndBefore](...args) {
+      return this.setEndBefore.apply(this, args);
     }
-    [dartx.setStart](node, offset) {
-      return this.setStart(node, offset);
+    [dartx.setStart](...args) {
+      return this.setStart.apply(this, args);
     }
-    [dartx.setStartAfter](node) {
-      return this.setStartAfter(node);
+    [dartx.setStartAfter](...args) {
+      return this.setStartAfter.apply(this, args);
     }
-    [dartx.setStartBefore](node) {
-      return this.setStartBefore(node);
+    [dartx.setStartBefore](...args) {
+      return this.setStartBefore.apply(this, args);
     }
-    [dartx.surroundContents](newParent) {
-      return this.surroundContents(newParent);
+    [dartx.surroundContents](...args) {
+      return this.surroundContents.apply(this, args);
     }
     static get supportsCreateContextualFragment() {
       return "createContextualFragment" in window.Range.prototype;
@@ -68650,11 +68650,11 @@
     static _() {
       dart.throw(new core.UnsupportedError("Not supported"));
     }
-    [dartx.cancel](reason) {
-      return this.cancel(reason);
+    [dartx.cancel](...args) {
+      return this.cancel.apply(this, args);
     }
-    [dartx.getReader]() {
-      return this.getReader();
+    [dartx.getReader](...args) {
+      return this.getReader.apply(this, args);
     }
   };
   dart.setSignature(html$.ReadableByteStream, {
@@ -68678,14 +68678,14 @@
     get [dartx.closed]() {
       return this.closed;
     }
-    [dartx.cancel](reason) {
-      return this.cancel(reason);
+    [dartx.cancel](...args) {
+      return this.cancel.apply(this, args);
     }
-    [dartx.read]() {
-      return this.read();
+    [dartx.read](...args) {
+      return this.read.apply(this, args);
     }
-    [dartx.releaseLock]() {
-      return this.releaseLock();
+    [dartx.releaseLock](...args) {
+      return this.releaseLock.apply(this, args);
     }
   };
   dart.setSignature(html$.ReadableByteStreamReader, {
@@ -68706,11 +68706,11 @@
     static _() {
       dart.throw(new core.UnsupportedError("Not supported"));
     }
-    [dartx.cancel](reason) {
-      return this.cancel(reason);
+    [dartx.cancel](...args) {
+      return this.cancel.apply(this, args);
     }
-    [dartx.getReader]() {
-      return this.getReader();
+    [dartx.getReader](...args) {
+      return this.getReader.apply(this, args);
     }
   };
   dart.setSignature(html$.ReadableStream, {
@@ -68734,14 +68734,14 @@
     get [dartx.closed]() {
       return this.closed;
     }
-    [dartx.cancel](reason) {
-      return this.cancel(reason);
+    [dartx.cancel](...args) {
+      return this.cancel.apply(this, args);
     }
-    [dartx.read]() {
-      return this.read();
+    [dartx.read](...args) {
+      return this.read.apply(this, args);
     }
-    [dartx.releaseLock]() {
-      return this.releaseLock();
+    [dartx.releaseLock](...args) {
+      return this.releaseLock.apply(this, args);
     }
   };
   dart.setSignature(html$.ReadableStreamReader, {
@@ -68876,23 +68876,23 @@
     get [dartx.reliable]() {
       return this.reliable;
     }
-    [dartx.close]() {
-      return this.close();
+    [dartx.close](...args) {
+      return this.close.apply(this, args);
     }
-    [dartx.send](data) {
-      return this.send(data);
+    [dartx.send](...args) {
+      return this.send.apply(this, args);
     }
-    [dartx.sendBlob](data) {
-      return this.send(data);
+    [dartx.sendBlob](...args) {
+      return this.send.apply(this, args);
     }
-    [dartx.sendByteBuffer](data) {
-      return this.send(data);
+    [dartx.sendByteBuffer](...args) {
+      return this.send.apply(this, args);
     }
-    [dartx.sendString](data) {
-      return this.send(data);
+    [dartx.sendString](...args) {
+      return this.send.apply(this, args);
     }
-    [dartx.sendTypedData](data) {
-      return this.send(data);
+    [dartx.sendTypedData](...args) {
+      return this.send.apply(this, args);
     }
     get [dartx.onClose]() {
       return html$.RtcDataChannel.closeEvent.forTarget(this);
@@ -69003,8 +69003,8 @@
     get [dartx.track]() {
       return this.track;
     }
-    [dartx.insertDtmf](tones, duration, interToneGap) {
-      return this.insertDTMF(tones, duration, interToneGap);
+    [dartx.insertDtmf](...args) {
+      return this.insertDTMF.apply(this, args);
     }
     get [dartx.onToneChange]() {
       return html$.RtcDtmfSender.toneChangeEvent.forTarget(this);
@@ -69229,8 +69229,8 @@
     get [dartx.signalingState]() {
       return this.signalingState;
     }
-    [dartx.addIceCandidate](candidate, successCallback, failureCallback) {
-      return this.addIceCandidate(candidate, successCallback, failureCallback);
+    [dartx.addIceCandidate](...args) {
+      return this.addIceCandidate.apply(this, args);
     }
     [dartx.addStream](stream, mediaConstraints) {
       if (mediaConstraints === void 0) mediaConstraints = null;
@@ -69242,14 +69242,14 @@
       this[_addStream_2](stream);
       return;
     }
-    [_addStream_1](stream, mediaConstraints) {
-      return this.addStream(stream, mediaConstraints);
+    [_addStream_1](...args) {
+      return this.addStream.apply(this, args);
     }
-    [_addStream_2](stream) {
-      return this.addStream(stream);
+    [_addStream_2](...args) {
+      return this.addStream.apply(this, args);
     }
-    [dartx.close]() {
-      return this.close();
+    [dartx.close](...args) {
+      return this.close.apply(this, args);
     }
     [_createAnswer](successCallback, failureCallback, mediaConstraints) {
       if (failureCallback === void 0) failureCallback = null;
@@ -69262,14 +69262,14 @@
       this[_createAnswer_2](successCallback, failureCallback);
       return;
     }
-    [_createAnswer_1](successCallback, failureCallback, mediaConstraints) {
-      return this.createAnswer(successCallback, failureCallback, mediaConstraints);
+    [_createAnswer_1](...args) {
+      return this.createAnswer.apply(this, args);
     }
-    [_createAnswer_2](successCallback, failureCallback) {
-      return this.createAnswer(successCallback, failureCallback);
+    [_createAnswer_2](...args) {
+      return this.createAnswer.apply(this, args);
     }
-    [dartx.createDtmfSender](track) {
-      return this.createDTMFSender(track);
+    [dartx.createDtmfSender](...args) {
+      return this.createDTMFSender.apply(this, args);
     }
     [dartx.createDataChannel](label, options) {
       if (options === void 0) options = null;
@@ -69279,11 +69279,11 @@
       }
       return this[_createDataChannel_2](label);
     }
-    [_createDataChannel_1](label, options) {
-      return this.createDataChannel(label, options);
+    [_createDataChannel_1](...args) {
+      return this.createDataChannel.apply(this, args);
     }
-    [_createDataChannel_2](label) {
-      return this.createDataChannel(label);
+    [_createDataChannel_2](...args) {
+      return this.createDataChannel.apply(this, args);
     }
     [_createOffer](successCallback, failureCallback, rtcOfferOptions) {
       if (failureCallback === void 0) failureCallback = null;
@@ -69296,29 +69296,29 @@
       this[_createOffer_2](successCallback, failureCallback);
       return;
     }
-    [_createOffer_1](successCallback, failureCallback, rtcOfferOptions) {
-      return this.createOffer(successCallback, failureCallback, rtcOfferOptions);
+    [_createOffer_1](...args) {
+      return this.createOffer.apply(this, args);
     }
-    [_createOffer_2](successCallback, failureCallback) {
-      return this.createOffer(successCallback, failureCallback);
+    [_createOffer_2](...args) {
+      return this.createOffer.apply(this, args);
     }
-    [dartx.getLocalStreams]() {
-      return this.getLocalStreams();
+    [dartx.getLocalStreams](...args) {
+      return this.getLocalStreams.apply(this, args);
     }
-    [dartx.getRemoteStreams]() {
-      return this.getRemoteStreams();
+    [dartx.getRemoteStreams](...args) {
+      return this.getRemoteStreams.apply(this, args);
     }
-    [_getStats](successCallback, selector) {
-      return this.getStats(successCallback, selector);
+    [_getStats](...args) {
+      return this.getStats.apply(this, args);
     }
-    [dartx.getStreamById](streamId) {
-      return this.getStreamById(streamId);
+    [dartx.getStreamById](...args) {
+      return this.getStreamById.apply(this, args);
     }
-    [dartx.removeStream](stream) {
-      return this.removeStream(stream);
+    [dartx.removeStream](...args) {
+      return this.removeStream.apply(this, args);
     }
-    [_setLocalDescription](description, successCallback, failureCallback) {
-      return this.setLocalDescription(description, successCallback, failureCallback);
+    [_setLocalDescription](...args) {
+      return this.setLocalDescription.apply(this, args);
     }
     [dartx.setLocalDescription](description) {
       let completer = async.Completer.new();
@@ -69329,8 +69329,8 @@
       }, StringTovoid$()));
       return completer.future;
     }
-    [_setRemoteDescription](description, successCallback, failureCallback) {
-      return this.setRemoteDescription(description, successCallback, failureCallback);
+    [_setRemoteDescription](...args) {
+      return this.setRemoteDescription.apply(this, args);
     }
     [dartx.setRemoteDescription](description) {
       let completer = async.Completer.new();
@@ -69358,14 +69358,14 @@
       this[_updateIce_3]();
       return;
     }
-    [_updateIce_1](configuration, mediaConstraints) {
-      return this.updateIce(configuration, mediaConstraints);
+    [_updateIce_1](...args) {
+      return this.updateIce.apply(this, args);
     }
-    [_updateIce_2](configuration) {
-      return this.updateIce(configuration);
+    [_updateIce_2](...args) {
+      return this.updateIce.apply(this, args);
     }
-    [_updateIce_3]() {
-      return this.updateIce();
+    [_updateIce_3](...args) {
+      return this.updateIce.apply(this, args);
     }
     get [dartx.onAddStream]() {
       return html$.RtcPeerConnection.addStreamEvent.forTarget(this);
@@ -69540,11 +69540,11 @@
     get [dartx.type]() {
       return this.type;
     }
-    [dartx.names]() {
-      return this.names();
+    [dartx.names](...args) {
+      return this.names.apply(this, args);
     }
-    [dartx.stat](name) {
-      return this.stat(name);
+    [dartx.stat](...args) {
+      return this.stat.apply(this, args);
     }
   };
   dart.setSignature(html$.RtcStatsReport, {
@@ -69569,11 +69569,11 @@
     static _() {
       dart.throw(new core.UnsupportedError("Not supported"));
     }
-    [dartx.namedItem](name) {
-      return this.namedItem(name);
+    [dartx.namedItem](...args) {
+      return this.namedItem.apply(this, args);
     }
-    [dartx.result]() {
-      return this.result();
+    [dartx.result](...args) {
+      return this.result.apply(this, args);
     }
   };
   dart.setSignature(html$.RtcStatsResponse, {
@@ -69664,11 +69664,11 @@
     get [dartx.type]() {
       return this.type;
     }
-    [dartx.lock](orientation) {
-      return this.lock(orientation);
+    [dartx.lock](...args) {
+      return this.lock.apply(this, args);
     }
-    [dartx.unlock]() {
-      return this.unlock();
+    [dartx.unlock](...args) {
+      return this.unlock.apply(this, args);
     }
     get [dartx.onChange]() {
       return html$.ScreenOrientation.changeEvent.forTarget(this);
@@ -69898,8 +69898,8 @@
     get [dartx.velocityY]() {
       return this.velocityY;
     }
-    [dartx.consumeDelta](x, y) {
-      return this.consumeDelta(x, y);
+    [dartx.consumeDelta](...args) {
+      return this.consumeDelta.apply(this, args);
     }
   };
   dart.setSignature(html$.ScrollState, {
@@ -70141,26 +70141,26 @@
     get [dartx.willValidate]() {
       return this.willValidate;
     }
-    [__setter__](index, option) {
-      return this.__setter__(index, option);
+    [__setter__](...args) {
+      return this.__setter__.apply(this, args);
     }
-    [dartx.add](element, before) {
-      return this.add(element, before);
+    [dartx.add](...args) {
+      return this.add.apply(this, args);
     }
-    [dartx.checkValidity]() {
-      return this.checkValidity();
+    [dartx.checkValidity](...args) {
+      return this.checkValidity.apply(this, args);
     }
-    [dartx.item](index) {
-      return this.item(index);
+    [dartx.item](...args) {
+      return this.item.apply(this, args);
     }
-    [dartx.namedItem](name) {
-      return this.namedItem(name);
+    [dartx.namedItem](...args) {
+      return this.namedItem.apply(this, args);
     }
-    [dartx.reportValidity]() {
-      return this.reportValidity();
+    [dartx.reportValidity](...args) {
+      return this.reportValidity.apply(this, args);
     }
-    [dartx.setCustomValidity](error) {
-      return this.setCustomValidity(error);
+    [dartx.setCustomValidity](...args) {
+      return this.setCustomValidity.apply(this, args);
     }
     get [dartx.options]() {
       let options = ListOfOptionElement().from(this[dartx.querySelectorAll](html$.Element)('option'));
@@ -70278,47 +70278,47 @@
     get [dartx.type]() {
       return this.type;
     }
-    [dartx.addRange](range) {
-      return this.addRange(range);
+    [dartx.addRange](...args) {
+      return this.addRange.apply(this, args);
     }
-    [dartx.collapse](node, offset) {
-      return this.collapse(node, offset);
+    [dartx.collapse](...args) {
+      return this.collapse.apply(this, args);
     }
-    [dartx.collapseToEnd]() {
-      return this.collapseToEnd();
+    [dartx.collapseToEnd](...args) {
+      return this.collapseToEnd.apply(this, args);
     }
-    [dartx.collapseToStart]() {
-      return this.collapseToStart();
+    [dartx.collapseToStart](...args) {
+      return this.collapseToStart.apply(this, args);
     }
-    [dartx.containsNode](node, allowPartialContainment) {
-      return this.containsNode(node, allowPartialContainment);
+    [dartx.containsNode](...args) {
+      return this.containsNode.apply(this, args);
     }
-    [dartx.deleteFromDocument]() {
-      return this.deleteFromDocument();
+    [dartx.deleteFromDocument](...args) {
+      return this.deleteFromDocument.apply(this, args);
     }
-    [dartx.empty]() {
-      return this.empty();
+    [dartx.empty](...args) {
+      return this.empty.apply(this, args);
     }
-    [dartx.extend](node, offset) {
-      return this.extend(node, offset);
+    [dartx.extend](...args) {
+      return this.extend.apply(this, args);
     }
-    [dartx.getRangeAt](index) {
-      return this.getRangeAt(index);
+    [dartx.getRangeAt](...args) {
+      return this.getRangeAt.apply(this, args);
     }
-    [dartx.modify](alter, direction, granularity) {
-      return this.modify(alter, direction, granularity);
+    [dartx.modify](...args) {
+      return this.modify.apply(this, args);
     }
-    [dartx.removeAllRanges]() {
-      return this.removeAllRanges();
+    [dartx.removeAllRanges](...args) {
+      return this.removeAllRanges.apply(this, args);
     }
-    [dartx.selectAllChildren](node) {
-      return this.selectAllChildren(node);
+    [dartx.selectAllChildren](...args) {
+      return this.selectAllChildren.apply(this, args);
     }
-    [dartx.setBaseAndExtent](baseNode, baseOffset, extentNode, extentOffset) {
-      return this.setBaseAndExtent(baseNode, baseOffset, extentNode, extentOffset);
+    [dartx.setBaseAndExtent](...args) {
+      return this.setBaseAndExtent.apply(this, args);
     }
-    [dartx.setPosition](node, offset) {
-      return this.setPosition(node, offset);
+    [dartx.setPosition](...args) {
+      return this.setPosition.apply(this, args);
     }
   };
   dart.setSignature(html$.Selection, {
@@ -70374,8 +70374,8 @@
     get [dartx.targetUrl]() {
       return this.targetURL;
     }
-    [dartx.close]() {
-      return this.close();
+    [dartx.close](...args) {
+      return this.close.apply(this, args);
     }
     [dartx.postMessage](message, transfer) {
       if (transfer === void 0) transfer = null;
@@ -70388,11 +70388,11 @@
       this[_postMessage_2](message_1);
       return;
     }
-    [_postMessage_1](message, transfer) {
-      return this.postMessage(message, transfer);
+    [_postMessage_1](...args) {
+      return this.postMessage.apply(this, args);
     }
-    [_postMessage_2](message) {
-      return this.postMessage(message);
+    [_postMessage_2](...args) {
+      return this.postMessage.apply(this, args);
     }
   };
   dart.setSignature(html$.ServicePort, {
@@ -70430,18 +70430,18 @@
       }
       return this[_connect_2](url);
     }
-    [_connect_1](url, options) {
-      return this.connect(url, options);
+    [_connect_1](...args) {
+      return this.connect.apply(this, args);
     }
-    [_connect_2](url) {
-      return this.connect(url);
+    [_connect_2](...args) {
+      return this.connect.apply(this, args);
     }
     [dartx.match](options) {
       let options_1 = html_common.convertDartToNative_Dictionary(options);
       return this[_match_1](options_1);
     }
-    [_match_1](options) {
-      return this.match(options);
+    [_match_1](...args) {
+      return this.match.apply(this, args);
     }
     [dartx.matchAll](options) {
       if (options === void 0) options = null;
@@ -70451,11 +70451,11 @@
       }
       return this[_matchAll_2]();
     }
-    [_matchAll_1](options) {
-      return this.matchAll(options);
+    [_matchAll_1](...args) {
+      return this.matchAll.apply(this, args);
     }
-    [_matchAll_2]() {
-      return this.matchAll();
+    [_matchAll_2](...args) {
+      return this.matchAll.apply(this, args);
     }
     get [dartx.onMessage]() {
       return html$.ServicePortCollection.messageEvent.forTarget(this);
@@ -70511,8 +70511,8 @@
     get [dartx.targetUrl]() {
       return this.targetURL;
     }
-    [dartx.respondWith](response) {
-      return this.respondWith(response);
+    [dartx.respondWith](...args) {
+      return this.respondWith.apply(this, args);
     }
   };
   dart.setSignature(html$.ServicePortConnectEvent, {
@@ -70550,11 +70550,11 @@
     get [dartx.ready]() {
       return this.ready;
     }
-    [dartx.getRegistration](documentURL) {
-      return this.getRegistration(documentURL);
+    [dartx.getRegistration](...args) {
+      return this.getRegistration.apply(this, args);
     }
-    [dartx.getRegistrations]() {
-      return this.getRegistrations();
+    [dartx.getRegistrations](...args) {
+      return this.getRegistrations.apply(this, args);
     }
     [dartx.register](url, options) {
       if (options === void 0) options = null;
@@ -70564,11 +70564,11 @@
       }
       return this[_register_2](url);
     }
-    [_register_1](url, options) {
-      return this.register(url, options);
+    [_register_1](...args) {
+      return this.register.apply(this, args);
     }
-    [_register_2](url) {
-      return this.register(url);
+    [_register_2](...args) {
+      return this.register.apply(this, args);
     }
     get [dartx.onMessage]() {
       return html$.ServiceWorkerContainer.messageEvent.forTarget(this);
@@ -70616,8 +70616,8 @@
     get [dartx.registration]() {
       return this.registration;
     }
-    [dartx.skipWaiting]() {
-      return this.skipWaiting();
+    [dartx.skipWaiting](...args) {
+      return this.skipWaiting.apply(this, args);
     }
     get [dartx.onMessage]() {
       return html$.ServiceWorkerGlobalScope.messageEvent.forTarget(this);
@@ -70758,11 +70758,11 @@
       }
       return this[_getNotifications_2]();
     }
-    [_getNotifications_1](filter) {
-      return this.getNotifications(filter);
+    [_getNotifications_1](...args) {
+      return this.getNotifications.apply(this, args);
     }
-    [_getNotifications_2]() {
-      return this.getNotifications();
+    [_getNotifications_2](...args) {
+      return this.getNotifications.apply(this, args);
     }
     [dartx.showNotification](title, options) {
       if (options === void 0) options = null;
@@ -70772,17 +70772,17 @@
       }
       return this[_showNotification_2](title);
     }
-    [_showNotification_1](title, options) {
-      return this.showNotification(title, options);
+    [_showNotification_1](...args) {
+      return this.showNotification.apply(this, args);
     }
-    [_showNotification_2](title) {
-      return this.showNotification(title);
+    [_showNotification_2](...args) {
+      return this.showNotification.apply(this, args);
     }
-    [dartx.unregister]() {
-      return this.unregister();
+    [dartx.unregister](...args) {
+      return this.unregister.apply(this, args);
     }
-    [dartx.update]() {
-      return this.update();
+    [dartx.update](...args) {
+      return this.update.apply(this, args);
     }
   };
   dart.setSignature(html$.ServiceWorkerRegistration, {
@@ -70825,8 +70825,8 @@
     static get supported() {
       return html$.Element.isTagSupported('shadow');
     }
-    [dartx.getDistributedNodes]() {
-      return this.getDistributedNodes();
+    [dartx.getDistributedNodes](...args) {
+      return this.getDistributedNodes.apply(this, args);
     }
   };
   dart.defineNamedConstructor(html$.ShadowElement, 'created');
@@ -70881,17 +70881,17 @@
     get [dartx.styleSheets]() {
       return this.styleSheets;
     }
-    [dartx.clone](deep) {
-      return this.cloneNode(deep);
+    [dartx.clone](...args) {
+      return this.cloneNode.apply(this, args);
     }
-    [dartx.elementFromPoint](x, y) {
-      return this.elementFromPoint(x, y);
+    [dartx.elementFromPoint](...args) {
+      return this.elementFromPoint.apply(this, args);
     }
-    [dartx.elementsFromPoint](x, y) {
-      return this.elementsFromPoint(x, y);
+    [dartx.elementsFromPoint](...args) {
+      return this.elementsFromPoint.apply(this, args);
     }
-    [dartx.getSelection]() {
-      return this.getSelection();
+    [dartx.getSelection](...args) {
+      return this.getSelection.apply(this, args);
     }
     static get supported() {
       return !!(Element.prototype.createShadowRoot || Element.prototype.webkitCreateShadowRoot);
@@ -71101,20 +71101,20 @@
     get [dartx.updating]() {
       return this.updating;
     }
-    [dartx.abort]() {
-      return this.abort();
+    [dartx.abort](...args) {
+      return this.abort.apply(this, args);
     }
-    [dartx.appendBuffer](data) {
-      return this.appendBuffer(data);
+    [dartx.appendBuffer](...args) {
+      return this.appendBuffer.apply(this, args);
     }
-    [dartx.appendStream](stream, maxSize) {
-      return this.appendStream(stream, maxSize);
+    [dartx.appendStream](...args) {
+      return this.appendStream.apply(this, args);
     }
-    [dartx.appendTypedData](data) {
-      return this.appendBuffer(data);
+    [dartx.appendTypedData](...args) {
+      return this.appendBuffer.apply(this, args);
     }
-    [dartx.remove](start, end) {
-      return this.remove(start, end);
+    [dartx.remove](...args) {
+      return this.remove.apply(this, args);
     }
   };
   dart.setSignature(html$.SourceBuffer, {
@@ -71190,8 +71190,8 @@
     [dartx.elementAt](index) {
       return this[dartx._get](index);
     }
-    [dartx.item](index) {
-      return this.item(index);
+    [dartx.item](...args) {
+      return this.item.apply(this, args);
     }
   };
   html$.SourceBufferList[dart.implements] = () => [_js_helper.JavaScriptIndexingBehavior, ListOfSourceBuffer()];
@@ -71435,14 +71435,14 @@
     [dartx.elementAt](index) {
       return this[dartx._get](index);
     }
-    [dartx.addFromString](string, weight) {
-      return this.addFromString(string, weight);
+    [dartx.addFromString](...args) {
+      return this.addFromString.apply(this, args);
     }
-    [dartx.addFromUri](src, weight) {
-      return this.addFromUri(src, weight);
+    [dartx.addFromUri](...args) {
+      return this.addFromUri.apply(this, args);
     }
-    [dartx.item](index) {
-      return this.item(index);
+    [dartx.item](...args) {
+      return this.item.apply(this, args);
     }
   };
   html$.SpeechGrammarList[dart.implements] = () => [_js_helper.JavaScriptIndexingBehavior, ListOfSpeechGrammar()];
@@ -71542,14 +71542,14 @@
     set [dartx.serviceUri](value) {
       this.serviceURI = value;
     }
-    [dartx.abort]() {
-      return this.abort();
+    [dartx.abort](...args) {
+      return this.abort.apply(this, args);
     }
-    [dartx.start]() {
-      return this.start();
+    [dartx.start](...args) {
+      return this.start.apply(this, args);
     }
-    [dartx.stop]() {
-      return this.stop();
+    [dartx.stop](...args) {
+      return this.stop.apply(this, args);
     }
     get [dartx.onAudioEnd]() {
       return html$.SpeechRecognition.audioEndEvent.forTarget(this);
@@ -71809,8 +71809,8 @@
     get [dartx.length]() {
       return this.length;
     }
-    [dartx.item](index) {
-      return this.item(index);
+    [dartx.item](...args) {
+      return this.item.apply(this, args);
     }
   };
   dart.setSignature(html$.SpeechRecognitionResult, {
@@ -71845,20 +71845,20 @@
     get [dartx.speaking]() {
       return this.speaking;
     }
-    [dartx.cancel]() {
-      return this.cancel();
+    [dartx.cancel](...args) {
+      return this.cancel.apply(this, args);
     }
-    [dartx.getVoices]() {
-      return this.getVoices();
+    [dartx.getVoices](...args) {
+      return this.getVoices.apply(this, args);
     }
-    [dartx.pause]() {
-      return this.pause();
+    [dartx.pause](...args) {
+      return this.pause.apply(this, args);
     }
-    [dartx.resume]() {
-      return this.resume();
+    [dartx.resume](...args) {
+      return this.resume.apply(this, args);
     }
-    [dartx.speak](utterance) {
-      return this.speak(utterance);
+    [dartx.speak](...args) {
+      return this.speak.apply(this, args);
     }
   };
   dart.setSignature(html$.SpeechSynthesis, {
@@ -72123,8 +72123,8 @@
     static _() {
       dart.throw(new core.UnsupportedError("Not supported"));
     }
-    [dartx.add](name, port) {
-      return this.add(name, port);
+    [dartx.add](...args) {
+      return this.add.apply(this, args);
     }
     get [dartx.onMessage]() {
       return html$.StashedPortCollection.messageEvent.forTarget(this);
@@ -72227,29 +72227,29 @@
     get [_length$2]() {
       return this.length;
     }
-    [__delete__](index_OR_name) {
-      return this.__delete__(index_OR_name);
+    [__delete__](...args) {
+      return this.__delete__.apply(this, args);
     }
-    [__getter__](index_OR_name) {
-      return this.__getter__(index_OR_name);
+    [__getter__](...args) {
+      return this.__getter__.apply(this, args);
     }
-    [__setter__](index_OR_name, value) {
-      return this.__setter__(index_OR_name, value);
+    [__setter__](...args) {
+      return this.__setter__.apply(this, args);
     }
-    [_clear$1]() {
-      return this.clear();
+    [_clear$1](...args) {
+      return this.clear.apply(this, args);
     }
-    [_getItem](key) {
-      return this.getItem(key);
+    [_getItem](...args) {
+      return this.getItem.apply(this, args);
     }
-    [_key](index) {
-      return this.key(index);
+    [_key](...args) {
+      return this.key.apply(this, args);
     }
-    [_removeItem](key) {
-      return this.removeItem(key);
+    [_removeItem](...args) {
+      return this.removeItem.apply(this, args);
     }
-    [_setItem](key, data) {
-      return this.setItem(key, data);
+    [_setItem](...args) {
+      return this.setItem.apply(this, args);
     }
   };
   html$.Storage[dart.implements] = () => [MapOfString$String()];
@@ -72335,8 +72335,8 @@
     get [dartx.url]() {
       return this.url;
     }
-    [_initStorageEvent](typeArg, canBubbleArg, cancelableArg, keyArg, oldValueArg, newValueArg, urlArg, storageAreaArg) {
-      return this.initStorageEvent(typeArg, canBubbleArg, cancelableArg, keyArg, oldValueArg, newValueArg, urlArg, storageAreaArg);
+    [_initStorageEvent](...args) {
+      return this.initStorageEvent.apply(this, args);
     }
   };
   dart.setSignature(html$.StorageEvent, {
@@ -72394,11 +72394,11 @@
     get [dartx.supportedTypes]() {
       return this.supportedTypes;
     }
-    [dartx.queryInfo](type) {
-      return this.queryInfo(type);
+    [dartx.queryInfo](...args) {
+      return this.queryInfo.apply(this, args);
     }
-    [dartx.requestPersistentQuota](newQuota) {
-      return this.requestPersistentQuota(newQuota);
+    [dartx.requestPersistentQuota](...args) {
+      return this.requestPersistentQuota.apply(this, args);
     }
   };
   dart.setSignature(html$.StorageQuota, {
@@ -72481,8 +72481,8 @@
     get [dartx.type]() {
       return this.type;
     }
-    [dartx.matchMedium](mediaquery) {
-      return this.matchMedium(mediaquery);
+    [dartx.matchMedium](...args) {
+      return this.matchMedium.apply(this, args);
     }
   };
   dart.setSignature(html$.StyleMedia, {
@@ -72529,14 +72529,14 @@
     static _() {
       dart.throw(new core.UnsupportedError("Not supported"));
     }
-    [dartx.getRegistration](tag) {
-      return this.getRegistration(tag);
+    [dartx.getRegistration](...args) {
+      return this.getRegistration.apply(this, args);
     }
-    [dartx.getRegistrations]() {
-      return this.getRegistrations();
+    [dartx.getRegistrations](...args) {
+      return this.getRegistrations.apply(this, args);
     }
-    [dartx.permissionState]() {
-      return this.permissionState();
+    [dartx.permissionState](...args) {
+      return this.permissionState.apply(this, args);
     }
     [dartx.register](options) {
       if (options === void 0) options = null;
@@ -72546,11 +72546,11 @@
       }
       return this[_register_2]();
     }
-    [_register_1](options) {
-      return this.register(options);
+    [_register_1](...args) {
+      return this.register.apply(this, args);
     }
-    [_register_2]() {
-      return this.register();
+    [_register_2](...args) {
+      return this.register.apply(this, args);
     }
   };
   dart.setSignature(html$.SyncManager, {
@@ -72576,8 +72576,8 @@
     get [dartx.tag]() {
       return this.tag;
     }
-    [dartx.unregister]() {
-      return this.unregister();
+    [dartx.unregister](...args) {
+      return this.unregister.apply(this, args);
     }
   };
   dart.setSignature(html$.SyncRegistration, {
@@ -72755,8 +72755,8 @@
       this[dartx.children][dartx.add](tbody);
       return html$.TableSectionElement._check(tbody);
     }
-    [_nativeCreateTBody]() {
-      return this.createTBody();
+    [_nativeCreateTBody](...args) {
+      return this.createTBody.apply(this, args);
     }
     [dartx.createFragment](html, opts) {
       let validator = opts && 'validator' in opts ? opts.validator : null;
@@ -72808,29 +72808,29 @@
     set [dartx.tHead](value) {
       this.tHead = value;
     }
-    [_createCaption]() {
-      return this.createCaption();
+    [_createCaption](...args) {
+      return this.createCaption.apply(this, args);
     }
-    [_createTFoot]() {
-      return this.createTFoot();
+    [_createTFoot](...args) {
+      return this.createTFoot.apply(this, args);
     }
-    [_createTHead]() {
-      return this.createTHead();
+    [_createTHead](...args) {
+      return this.createTHead.apply(this, args);
     }
-    [dartx.deleteCaption]() {
-      return this.deleteCaption();
+    [dartx.deleteCaption](...args) {
+      return this.deleteCaption.apply(this, args);
     }
-    [dartx.deleteRow](index) {
-      return this.deleteRow(index);
+    [dartx.deleteRow](...args) {
+      return this.deleteRow.apply(this, args);
     }
-    [dartx.deleteTFoot]() {
-      return this.deleteTFoot();
+    [dartx.deleteTFoot](...args) {
+      return this.deleteTFoot.apply(this, args);
     }
-    [dartx.deleteTHead]() {
-      return this.deleteTHead();
+    [dartx.deleteTHead](...args) {
+      return this.deleteTHead.apply(this, args);
     }
-    [_insertRow](index) {
-      return this.insertRow(index);
+    [_insertRow](...args) {
+      return this.insertRow.apply(this, args);
     }
   };
   dart.defineNamedConstructor(html$.TableElement, 'created');
@@ -72925,11 +72925,11 @@
     get [dartx.sectionRowIndex]() {
       return this.sectionRowIndex;
     }
-    [dartx.deleteCell](index) {
-      return this.deleteCell(index);
+    [dartx.deleteCell](...args) {
+      return this.deleteCell.apply(this, args);
     }
-    [_insertCell](index) {
-      return this.insertCell(index);
+    [_insertCell](...args) {
+      return this.insertCell.apply(this, args);
     }
   };
   dart.defineNamedConstructor(html$.TableRowElement, 'created');
@@ -72991,11 +72991,11 @@
     get [_rows]() {
       return this.rows;
     }
-    [dartx.deleteRow](index) {
-      return this.deleteRow(index);
+    [dartx.deleteRow](...args) {
+      return this.deleteRow.apply(this, args);
     }
-    [_insertRow](index) {
-      return this.insertRow(index);
+    [_insertRow](...args) {
+      return this.insertRow.apply(this, args);
     }
   };
   dart.defineNamedConstructor(html$.TableSectionElement, 'created');
@@ -73259,23 +73259,23 @@
     set [dartx.wrap](value) {
       this.wrap = value;
     }
-    [dartx.checkValidity]() {
-      return this.checkValidity();
+    [dartx.checkValidity](...args) {
+      return this.checkValidity.apply(this, args);
     }
-    [dartx.reportValidity]() {
-      return this.reportValidity();
+    [dartx.reportValidity](...args) {
+      return this.reportValidity.apply(this, args);
     }
-    [dartx.select]() {
-      return this.select();
+    [dartx.select](...args) {
+      return this.select.apply(this, args);
     }
-    [dartx.setCustomValidity](error) {
-      return this.setCustomValidity(error);
+    [dartx.setCustomValidity](...args) {
+      return this.setCustomValidity.apply(this, args);
     }
-    [dartx.setRangeText](replacement, opts) {
-      return this.setRangeText(replacement, opts);
+    [dartx.setRangeText](...args) {
+      return this.setRangeText.apply(this, args);
     }
-    [dartx.setSelectionRange](start, end, direction) {
-      return this.setSelectionRange(start, end, direction);
+    [dartx.setSelectionRange](...args) {
+      return this.setSelectionRange.apply(this, args);
     }
   };
   dart.defineNamedConstructor(html$.TextAreaElement, 'created');
@@ -73346,8 +73346,8 @@
     get [dartx.data]() {
       return this.data;
     }
-    [_initTextEvent](typeArg, canBubbleArg, cancelableArg, viewArg, dataArg) {
-      return this.initTextEvent(typeArg, canBubbleArg, cancelableArg, viewArg, dataArg);
+    [_initTextEvent](...args) {
+      return this.initTextEvent.apply(this, args);
     }
   };
   dart.setSignature(html$.TextEvent, {
@@ -73478,17 +73478,17 @@
     get [dartx.regions]() {
       return this.regions;
     }
-    [dartx.addCue](cue) {
-      return this.addCue(cue);
+    [dartx.addCue](...args) {
+      return this.addCue.apply(this, args);
     }
-    [dartx.addRegion](region) {
-      return this.addRegion(region);
+    [dartx.addRegion](...args) {
+      return this.addRegion.apply(this, args);
     }
-    [dartx.removeCue](cue) {
-      return this.removeCue(cue);
+    [dartx.removeCue](...args) {
+      return this.removeCue.apply(this, args);
     }
-    [dartx.removeRegion](region) {
-      return this.removeRegion(region);
+    [dartx.removeRegion](...args) {
+      return this.removeRegion.apply(this, args);
     }
     get [dartx.onCueChange]() {
       return html$.TextTrack.cueChangeEvent.forTarget(this);
@@ -73649,11 +73649,11 @@
     [dartx.elementAt](index) {
       return this[dartx._get](index);
     }
-    [dartx.getCueById](id) {
-      return this.getCueById(id);
+    [dartx.getCueById](...args) {
+      return this.getCueById.apply(this, args);
     }
-    [dartx.item](index) {
-      return this.item(index);
+    [dartx.item](...args) {
+      return this.item.apply(this, args);
     }
   };
   html$.TextTrackCueList[dart.implements] = () => [ListOfTextTrackCue(), _js_helper.JavaScriptIndexingBehavior];
@@ -73731,11 +73731,11 @@
     [dartx.elementAt](index) {
       return this[dartx._get](index);
     }
-    [dartx.getTrackById](id) {
-      return this.getTrackById(id);
+    [dartx.getTrackById](...args) {
+      return this.getTrackById.apply(this, args);
     }
-    [dartx.item](index) {
-      return this.item(index);
+    [dartx.item](...args) {
+      return this.item.apply(this, args);
     }
     get [dartx.onAddTrack]() {
       return html$.TextTrackList.addTrackEvent.forTarget(this);
@@ -73789,11 +73789,11 @@
     get [dartx.length]() {
       return this.length;
     }
-    [dartx.end](index) {
-      return this.end(index);
+    [dartx.end](...args) {
+      return this.end.apply(this, args);
     }
-    [dartx.start](index) {
-      return this.start(index);
+    [dartx.start](...args) {
+      return this.start.apply(this, args);
     }
   };
   dart.setSignature(html$.TimeRanges, {
@@ -74016,8 +74016,8 @@
     get [dartx.touches]() {
       return this.touches;
     }
-    [_initTouchEvent](touches, targetTouches, changedTouches, type, view, unused1, unused2, unused3, unused4, ctrlKey, altKey, shiftKey, metaKey) {
-      return this.initTouchEvent(touches, targetTouches, changedTouches, type, view, unused1, unused2, unused3, unused4, ctrlKey, altKey, shiftKey, metaKey);
+    [_initTouchEvent](...args) {
+      return this.initTouchEvent.apply(this, args);
     }
     static get supported() {
       return html_common.Device.isEventTypeSupported('TouchEvent');
@@ -74100,8 +74100,8 @@
     [dartx.elementAt](index) {
       return this[dartx._get](index);
     }
-    [dartx.item](index) {
-      return this.item(index);
+    [dartx.item](...args) {
+      return this.item.apply(this, args);
     }
   };
   html$.TouchList[dart.implements] = () => [_js_helper.JavaScriptIndexingBehavior, ListOfTouch()];
@@ -74211,8 +74211,8 @@
     get [dartx.length]() {
       return this.length;
     }
-    [dartx.item](index) {
-      return this.item(index);
+    [dartx.item](...args) {
+      return this.item.apply(this, args);
     }
   };
   dart.setSignature(html$.TrackDefaultList, {
@@ -74448,26 +74448,26 @@
     get [dartx.whatToShow]() {
       return this.whatToShow;
     }
-    [dartx.firstChild]() {
-      return this.firstChild();
+    [dartx.firstChild](...args) {
+      return this.firstChild.apply(this, args);
     }
-    [dartx.lastChild]() {
-      return this.lastChild();
+    [dartx.lastChild](...args) {
+      return this.lastChild.apply(this, args);
     }
-    [dartx.nextNode]() {
-      return this.nextNode();
+    [dartx.nextNode](...args) {
+      return this.nextNode.apply(this, args);
     }
-    [dartx.nextSibling]() {
-      return this.nextSibling();
+    [dartx.nextSibling](...args) {
+      return this.nextSibling.apply(this, args);
     }
-    [dartx.parentNode]() {
-      return this.parentNode();
+    [dartx.parentNode](...args) {
+      return this.parentNode.apply(this, args);
     }
-    [dartx.previousNode]() {
-      return this.previousNode();
+    [dartx.previousNode](...args) {
+      return this.previousNode.apply(this, args);
     }
-    [dartx.previousSibling]() {
-      return this.previousSibling();
+    [dartx.previousSibling](...args) {
+      return this.previousSibling.apply(this, args);
     }
   };
   dart.setSignature(html$.TreeWalker, {
@@ -75177,14 +75177,14 @@
     set [dartx.width](value) {
       this.width = value;
     }
-    [dartx.getVideoPlaybackQuality]() {
-      return this.getVideoPlaybackQuality();
+    [dartx.getVideoPlaybackQuality](...args) {
+      return this.getVideoPlaybackQuality.apply(this, args);
     }
-    [dartx.enterFullscreen]() {
-      return this.webkitEnterFullscreen();
+    [dartx.enterFullscreen](...args) {
+      return this.webkitEnterFullscreen.apply(this, args);
     }
-    [dartx.exitFullscreen]() {
-      return this.webkitExitFullscreen();
+    [dartx.exitFullscreen](...args) {
+      return this.webkitExitFullscreen.apply(this, args);
     }
   };
   dart.defineNamedConstructor(html$.VideoElement, 'created');
@@ -75301,11 +75301,11 @@
     get [dartx.selectedIndex]() {
       return this.selectedIndex;
     }
-    [__getter__](index) {
-      return this.__getter__(index);
+    [__getter__](...args) {
+      return this.__getter__.apply(this, args);
     }
-    [dartx.getTrackById](id) {
-      return this.getTrackById(id);
+    [dartx.getTrackById](...args) {
+      return this.getTrackById.apply(this, args);
     }
     get [dartx.onChange]() {
       return html$.VideoTrackList.changeEvent.forTarget(this);
@@ -75400,8 +75400,8 @@
     set [dartx.vertical](value) {
       this.vertical = value;
     }
-    [dartx.getCueAsHtml]() {
-      return this.getCueAsHTML();
+    [dartx.getCueAsHtml](...args) {
+      return this.getCueAsHTML.apply(this, args);
     }
   };
   dart.setSignature(html$.VttCue, {
@@ -75529,11 +75529,11 @@
     get [dartx.length]() {
       return this.length;
     }
-    [dartx.getRegionById](id) {
-      return this.getRegionById(id);
+    [dartx.getRegionById](...args) {
+      return this.getRegionById.apply(this, args);
     }
-    [dartx.item](index) {
-      return this.item(index);
+    [dartx.item](...args) {
+      return this.item.apply(this, args);
     }
   };
   dart.setSignature(html$.VttRegionList, {
@@ -75604,23 +75604,23 @@
     get [dartx.url]() {
       return this.url;
     }
-    [dartx.close](code, reason) {
-      return this.close(code, reason);
+    [dartx.close](...args) {
+      return this.close.apply(this, args);
     }
-    [dartx.send](data) {
-      return this.send(data);
+    [dartx.send](...args) {
+      return this.send.apply(this, args);
     }
-    [dartx.sendBlob](data) {
-      return this.send(data);
+    [dartx.sendBlob](...args) {
+      return this.send.apply(this, args);
     }
-    [dartx.sendByteBuffer](data) {
-      return this.send(data);
+    [dartx.sendByteBuffer](...args) {
+      return this.send.apply(this, args);
     }
-    [dartx.sendString](data) {
-      return this.send(data);
+    [dartx.sendString](...args) {
+      return this.send.apply(this, args);
     }
-    [dartx.sendTypedData](data) {
-      return this.send(data);
+    [dartx.sendTypedData](...args) {
+      return this.send.apply(this, args);
     }
     get [dartx.onClose]() {
       return html$.WebSocket.closeEvent.forTarget(this);
@@ -75791,14 +75791,14 @@
     get [_hasInitMouseScrollEvent]() {
       return !!this.initMouseScrollEvent;
     }
-    [_initMouseScrollEvent](type, canBubble, cancelable, view, detail, screenX, screenY, clientX, clientY, ctrlKey, altKey, shiftKey, metaKey, button, relatedTarget, axis) {
-      return this.initMouseScrollEvent(type, canBubble, cancelable, view, detail, screenX, screenY, clientX, clientY, ctrlKey, altKey, shiftKey, metaKey, button, relatedTarget, axis);
+    [_initMouseScrollEvent](...args) {
+      return this.initMouseScrollEvent.apply(this, args);
     }
     get [_hasInitWheelEvent]() {
       return !!this.initWheelEvent;
     }
-    [_initWheelEvent](eventType, canBubble, cancelable, view, detail, screenX, screenY, clientX, clientY, button, relatedTarget, modifiersList, deltaX, deltaY, deltaZ, deltaMode) {
-      return this.initWheelEvent(eventType, canBubble, cancelable, view, detail, screenX, screenY, clientX, clientY, button, relatedTarget, modifiersList, deltaX, deltaY, deltaZ, deltaMode);
+    [_initWheelEvent](...args) {
+      return this.initWheelEvent.apply(this, args);
     }
   };
   dart.setSignature(html$.WheelEvent, {
@@ -76060,11 +76060,11 @@
       this[_ensureRequestAnimationFrame]();
       this[_cancelAnimationFrame](id);
     }
-    [_requestAnimationFrame](callback) {
-      return this.requestAnimationFrame(callback);
+    [_requestAnimationFrame](...args) {
+      return this.requestAnimationFrame.apply(this, args);
     }
-    [_cancelAnimationFrame](id) {
-      return this.cancelAnimationFrame(id);
+    [_cancelAnimationFrame](...args) {
+      return this.cancelAnimationFrame.apply(this, args);
     }
     [_ensureRequestAnimationFrame]() {
       if (!!(this.requestAnimationFrame && this.cancelAnimationFrame)) return;
@@ -76257,20 +76257,20 @@
       }
       dart.throw(new core.ArgumentError("Incorrect number or type of arguments"));
     }
-    [__getter___1](index) {
-      return this.__getter__(index);
+    [__getter___1](...args) {
+      return this.__getter__.apply(this, args);
     }
-    [__getter___2](name) {
-      return this.__getter__(name);
+    [__getter___2](...args) {
+      return this.__getter__.apply(this, args);
     }
-    [dartx.alert](message) {
-      return this.alert(message);
+    [dartx.alert](...args) {
+      return this.alert.apply(this, args);
     }
-    [dartx.close]() {
-      return this.close();
+    [dartx.close](...args) {
+      return this.close.apply(this, args);
     }
-    [dartx.confirm](message) {
-      return this.confirm(message);
+    [dartx.confirm](...args) {
+      return this.confirm.apply(this, args);
     }
     [dartx.fetch](input, init) {
       if (init === void 0) init = null;
@@ -76280,35 +76280,35 @@
       }
       return this[_fetch_2](input);
     }
-    [_fetch_1](input, init) {
-      return this.fetch(input, init);
+    [_fetch_1](...args) {
+      return this.fetch.apply(this, args);
     }
-    [_fetch_2](input) {
-      return this.fetch(input);
+    [_fetch_2](...args) {
+      return this.fetch.apply(this, args);
     }
-    [dartx.find](string, caseSensitive, backwards, wrap, wholeWord, searchInFrames, showDialog) {
-      return this.find(string, caseSensitive, backwards, wrap, wholeWord, searchInFrames, showDialog);
+    [dartx.find](...args) {
+      return this.find.apply(this, args);
     }
-    [_getComputedStyle](elt, pseudoElt) {
-      return this.getComputedStyle(elt, pseudoElt);
+    [_getComputedStyle](...args) {
+      return this.getComputedStyle.apply(this, args);
     }
-    [dartx.getMatchedCssRules](element, pseudoElement) {
-      return this.getMatchedCSSRules(element, pseudoElement);
+    [dartx.getMatchedCssRules](...args) {
+      return this.getMatchedCSSRules.apply(this, args);
     }
-    [dartx.getSelection]() {
-      return this.getSelection();
+    [dartx.getSelection](...args) {
+      return this.getSelection.apply(this, args);
     }
-    [dartx.matchMedia](query) {
-      return this.matchMedia(query);
+    [dartx.matchMedia](...args) {
+      return this.matchMedia.apply(this, args);
     }
-    [dartx.moveBy](x, y) {
-      return this.moveBy(x, y);
+    [dartx.moveBy](...args) {
+      return this.moveBy.apply(this, args);
     }
-    [_moveTo](x, y) {
-      return this.moveTo(x, y);
+    [_moveTo](...args) {
+      return this.moveTo.apply(this, args);
     }
-    [dartx.openDatabase](name, version, displayName, estimatedSize, creationCallback) {
-      return this.openDatabase(name, version, displayName, estimatedSize, creationCallback);
+    [dartx.openDatabase](...args) {
+      return this.openDatabase.apply(this, args);
     }
     [dartx.postMessage](message, targetOrigin, transfer) {
       if (transfer === void 0) transfer = null;
@@ -76321,20 +76321,20 @@
       this[_postMessage_2](message_1, targetOrigin);
       return;
     }
-    [_postMessage_1](message, targetOrigin, transfer) {
-      return this.postMessage(message, targetOrigin, transfer);
+    [_postMessage_1](...args) {
+      return this.postMessage.apply(this, args);
     }
-    [_postMessage_2](message, targetOrigin) {
-      return this.postMessage(message, targetOrigin);
+    [_postMessage_2](...args) {
+      return this.postMessage.apply(this, args);
     }
-    [dartx.print]() {
-      return this.print();
+    [dartx.print](...args) {
+      return this.print.apply(this, args);
     }
-    [dartx.resizeBy](x, y) {
-      return this.resizeBy(x, y);
+    [dartx.resizeBy](...args) {
+      return this.resizeBy.apply(this, args);
     }
-    [dartx.resizeTo](x, y) {
-      return this.resizeTo(x, y);
+    [dartx.resizeTo](...args) {
+      return this.resizeTo.apply(this, args);
     }
     [dartx.scroll](options_OR_x, y, scrollOptions) {
       if (options_OR_x === void 0) options_OR_x = null;
@@ -76364,20 +76364,20 @@
       }
       dart.throw(new core.ArgumentError("Incorrect number or type of arguments"));
     }
-    [_scroll_1]() {
-      return this.scroll();
+    [_scroll_1](...args) {
+      return this.scroll.apply(this, args);
     }
-    [_scroll_2](options) {
-      return this.scroll(options);
+    [_scroll_2](...args) {
+      return this.scroll.apply(this, args);
     }
-    [_scroll_3](x, y) {
-      return this.scroll(x, y);
+    [_scroll_3](...args) {
+      return this.scroll.apply(this, args);
     }
-    [_scroll_4](x, y) {
-      return this.scroll(x, y);
+    [_scroll_4](...args) {
+      return this.scroll.apply(this, args);
     }
-    [_scroll_5](x, y, scrollOptions) {
-      return this.scroll(x, y, scrollOptions);
+    [_scroll_5](...args) {
+      return this.scroll.apply(this, args);
     }
     [dartx.scrollBy](options_OR_x, y, scrollOptions) {
       if (options_OR_x === void 0) options_OR_x = null;
@@ -76407,20 +76407,20 @@
       }
       dart.throw(new core.ArgumentError("Incorrect number or type of arguments"));
     }
-    [_scrollBy_1]() {
-      return this.scrollBy();
+    [_scrollBy_1](...args) {
+      return this.scrollBy.apply(this, args);
     }
-    [_scrollBy_2](options) {
-      return this.scrollBy(options);
+    [_scrollBy_2](...args) {
+      return this.scrollBy.apply(this, args);
     }
-    [_scrollBy_3](x, y) {
-      return this.scrollBy(x, y);
+    [_scrollBy_3](...args) {
+      return this.scrollBy.apply(this, args);
     }
-    [_scrollBy_4](x, y) {
-      return this.scrollBy(x, y);
+    [_scrollBy_4](...args) {
+      return this.scrollBy.apply(this, args);
     }
-    [_scrollBy_5](x, y, scrollOptions) {
-      return this.scrollBy(x, y, scrollOptions);
+    [_scrollBy_5](...args) {
+      return this.scrollBy.apply(this, args);
     }
     [dartx.scrollTo](options_OR_x, y, scrollOptions) {
       if (options_OR_x === void 0) options_OR_x = null;
@@ -76450,26 +76450,26 @@
       }
       dart.throw(new core.ArgumentError("Incorrect number or type of arguments"));
     }
-    [_scrollTo_1]() {
-      return this.scrollTo();
+    [_scrollTo_1](...args) {
+      return this.scrollTo.apply(this, args);
     }
-    [_scrollTo_2](options) {
-      return this.scrollTo(options);
+    [_scrollTo_2](...args) {
+      return this.scrollTo.apply(this, args);
     }
-    [_scrollTo_3](x, y) {
-      return this.scrollTo(x, y);
+    [_scrollTo_3](...args) {
+      return this.scrollTo.apply(this, args);
     }
-    [_scrollTo_4](x, y) {
-      return this.scrollTo(x, y);
+    [_scrollTo_4](...args) {
+      return this.scrollTo.apply(this, args);
     }
-    [_scrollTo_5](x, y, scrollOptions) {
-      return this.scrollTo(x, y, scrollOptions);
+    [_scrollTo_5](...args) {
+      return this.scrollTo.apply(this, args);
     }
-    [dartx.stop]() {
-      return this.stop();
+    [dartx.stop](...args) {
+      return this.stop.apply(this, args);
     }
-    [__requestFileSystem](type, size, successCallback, errorCallback) {
-      return this.webkitRequestFileSystem(type, size, successCallback, errorCallback);
+    [__requestFileSystem](...args) {
+      return this.webkitRequestFileSystem.apply(this, args);
     }
     [_requestFileSystem](type, size) {
       let completer = CompleterOfFileSystem().new();
@@ -76480,8 +76480,8 @@
       }, FileErrorTovoid()));
       return completer.future;
     }
-    [_resolveLocalFileSystemUrl](url, successCallback, errorCallback) {
-      return this.webkitResolveLocalFileSystemURL(url, successCallback, errorCallback);
+    [_resolveLocalFileSystemUrl](...args) {
+      return this.webkitResolveLocalFileSystemURL.apply(this, args);
     }
     [dartx.resolveLocalFileSystemUrl](url) {
       let completer = CompleterOfEntry().new();
@@ -76492,29 +76492,29 @@
       }, FileErrorTovoid()));
       return completer.future;
     }
-    [dartx.atob](atob) {
-      return this.atob(atob);
+    [dartx.atob](...args) {
+      return this.atob.apply(this, args);
     }
-    [dartx.btoa](btoa) {
-      return this.btoa(btoa);
+    [dartx.btoa](...args) {
+      return this.btoa.apply(this, args);
     }
-    [_setInterval_String](handler, timeout, arguments$) {
-      return this.setInterval(handler, timeout, arguments$);
+    [_setInterval_String](...args) {
+      return this.setInterval.apply(this, args);
     }
-    [_setTimeout_String](handler, timeout, arguments$) {
-      return this.setTimeout(handler, timeout, arguments$);
+    [_setTimeout_String](...args) {
+      return this.setTimeout.apply(this, args);
     }
-    [_clearInterval](handle) {
-      return this.clearInterval(handle);
+    [_clearInterval](...args) {
+      return this.clearInterval.apply(this, args);
     }
-    [_clearTimeout](handle) {
-      return this.clearTimeout(handle);
+    [_clearTimeout](...args) {
+      return this.clearTimeout.apply(this, args);
     }
-    [_setInterval](handler, timeout) {
-      return this.setInterval(handler, timeout);
+    [_setInterval](...args) {
+      return this.setInterval.apply(this, args);
     }
-    [_setTimeout](handler, timeout) {
-      return this.setTimeout(handler, timeout);
+    [_setTimeout](...args) {
+      return this.setTimeout.apply(this, args);
     }
     get [dartx.onContentLoaded]() {
       return html$.Window.contentLoadedEvent.forTarget(this);
@@ -77228,8 +77228,8 @@
     get [dartx.visibilityState]() {
       return this.visibilityState;
     }
-    [dartx.focus]() {
-      return this.focus();
+    [dartx.focus](...args) {
+      return this.focus.apply(this, args);
     }
   };
   dart.setSignature(html$.WindowClient, {
@@ -77359,14 +77359,14 @@
       this[_postMessage_2](message_1);
       return;
     }
-    [_postMessage_1](message, transfer) {
-      return this.postMessage(message, transfer);
+    [_postMessage_1](...args) {
+      return this.postMessage.apply(this, args);
     }
-    [_postMessage_2](message) {
-      return this.postMessage(message);
+    [_postMessage_2](...args) {
+      return this.postMessage.apply(this, args);
     }
-    [dartx.terminate]() {
-      return this.terminate();
+    [dartx.terminate](...args) {
+      return this.terminate.apply(this, args);
     }
     get [dartx.onError]() {
       return html$.Worker.errorEvent.forTarget(this);
@@ -77437,35 +77437,35 @@
     get [dartx.memory]() {
       return this.memory;
     }
-    [dartx.clearMarks](markName) {
-      return this.clearMarks(markName);
+    [dartx.clearMarks](...args) {
+      return this.clearMarks.apply(this, args);
     }
-    [dartx.clearMeasures](measureName) {
-      return this.clearMeasures(measureName);
+    [dartx.clearMeasures](...args) {
+      return this.clearMeasures.apply(this, args);
     }
-    [dartx.getEntries]() {
-      return this.getEntries();
+    [dartx.getEntries](...args) {
+      return this.getEntries.apply(this, args);
     }
-    [dartx.getEntriesByName](name, entryType) {
-      return this.getEntriesByName(name, entryType);
+    [dartx.getEntriesByName](...args) {
+      return this.getEntriesByName.apply(this, args);
     }
-    [dartx.getEntriesByType](entryType) {
-      return this.getEntriesByType(entryType);
+    [dartx.getEntriesByType](...args) {
+      return this.getEntriesByType.apply(this, args);
     }
-    [dartx.mark](markName) {
-      return this.mark(markName);
+    [dartx.mark](...args) {
+      return this.mark.apply(this, args);
     }
-    [dartx.measure](measureName, startMark, endMark) {
-      return this.measure(measureName, startMark, endMark);
+    [dartx.measure](...args) {
+      return this.measure.apply(this, args);
     }
-    [dartx.now]() {
-      return this.now();
+    [dartx.now](...args) {
+      return this.now.apply(this, args);
     }
-    [dartx.clearResourceTimings]() {
-      return this.webkitClearResourceTimings();
+    [dartx.clearResourceTimings](...args) {
+      return this.webkitClearResourceTimings.apply(this, args);
     }
-    [dartx.setResourceTimingBufferSize](maxSize) {
-      return this.webkitSetResourceTimingBufferSize(maxSize);
+    [dartx.setResourceTimingBufferSize](...args) {
+      return this.webkitSetResourceTimingBufferSize.apply(this, args);
     }
   };
   dart.setSignature(html$.WorkerPerformance, {
@@ -77500,14 +77500,14 @@
     static _create_1() {
       return new XPathEvaluator();
     }
-    [dartx.createExpression](expression, resolver) {
-      return this.createExpression(expression, resolver);
+    [dartx.createExpression](...args) {
+      return this.createExpression.apply(this, args);
     }
-    [dartx.createNSResolver](nodeResolver) {
-      return this.createNSResolver(nodeResolver);
+    [dartx.createNSResolver](...args) {
+      return this.createNSResolver.apply(this, args);
     }
-    [dartx.evaluate](expression, contextNode, resolver, type, inResult) {
-      return this.evaluate(expression, contextNode, resolver, type, inResult);
+    [dartx.evaluate](...args) {
+      return this.evaluate.apply(this, args);
     }
   };
   dart.setSignature(html$.XPathEvaluator, {
@@ -77531,8 +77531,8 @@
     static _() {
       dart.throw(new core.UnsupportedError("Not supported"));
     }
-    [dartx.evaluate](contextNode, type, inResult) {
-      return this.evaluate(contextNode, type, inResult);
+    [dartx.evaluate](...args) {
+      return this.evaluate.apply(this, args);
     }
   };
   dart.setSignature(html$.XPathExpression, {
@@ -77547,8 +77547,8 @@
     static _() {
       dart.throw(new core.UnsupportedError("Not supported"));
     }
-    [dartx.lookupNamespaceUri](prefix) {
-      return this.lookupNamespaceURI(prefix);
+    [dartx.lookupNamespaceUri](...args) {
+      return this.lookupNamespaceURI.apply(this, args);
     }
   };
   dart.setSignature(html$.XPathNSResolver, {
@@ -77592,11 +77592,11 @@
     get [dartx.stringValue]() {
       return this.stringValue;
     }
-    [dartx.iterateNext]() {
-      return this.iterateNext();
+    [dartx.iterateNext](...args) {
+      return this.iterateNext.apply(this, args);
     }
-    [dartx.snapshotItem](index) {
-      return this.snapshotItem(index);
+    [dartx.snapshotItem](...args) {
+      return this.snapshotItem.apply(this, args);
     }
   };
   dart.setSignature(html$.XPathResult, {
@@ -77660,8 +77660,8 @@
     static _create_1() {
       return new XMLSerializer();
     }
-    [dartx.serializeToString](root) {
-      return this.serializeToString(root);
+    [dartx.serializeToString](...args) {
+      return this.serializeToString.apply(this, args);
     }
   };
   dart.setSignature(html$.XmlSerializer, {
@@ -77697,29 +77697,29 @@
     static get supported() {
       return !!window.XSLTProcessor;
     }
-    [dartx.clearParameters]() {
-      return this.clearParameters();
+    [dartx.clearParameters](...args) {
+      return this.clearParameters.apply(this, args);
     }
-    [dartx.getParameter](namespaceURI, localName) {
-      return this.getParameter(namespaceURI, localName);
+    [dartx.getParameter](...args) {
+      return this.getParameter.apply(this, args);
     }
-    [dartx.importStylesheet](style) {
-      return this.importStylesheet(style);
+    [dartx.importStylesheet](...args) {
+      return this.importStylesheet.apply(this, args);
     }
-    [dartx.removeParameter](namespaceURI, localName) {
-      return this.removeParameter(namespaceURI, localName);
+    [dartx.removeParameter](...args) {
+      return this.removeParameter.apply(this, args);
     }
-    [dartx.reset]() {
-      return this.reset();
+    [dartx.reset](...args) {
+      return this.reset.apply(this, args);
     }
-    [dartx.setParameter](namespaceURI, localName, value) {
-      return this.setParameter(namespaceURI, localName, value);
+    [dartx.setParameter](...args) {
+      return this.setParameter.apply(this, args);
     }
-    [dartx.transformToDocument](source) {
-      return this.transformToDocument(source);
+    [dartx.transformToDocument](...args) {
+      return this.transformToDocument.apply(this, args);
     }
-    [dartx.transformToFragment](source, output) {
-      return this.transformToFragment(source, output);
+    [dartx.transformToFragment](...args) {
+      return this.transformToFragment.apply(this, args);
     }
   };
   dart.setSignature(html$.XsltProcessor, {
@@ -77984,11 +77984,11 @@
     [dartx.elementAt](index) {
       return this[dartx._get](index);
     }
-    [__getter__](index) {
-      return this.__getter__(index);
+    [__getter__](...args) {
+      return this.__getter__.apply(this, args);
     }
-    [dartx.item](index) {
-      return this.item(index);
+    [dartx.item](...args) {
+      return this.item.apply(this, args);
     }
   };
   html$._ClientRectList[dart.implements] = () => [ListOfRectangleOfnum()];
@@ -78064,8 +78064,8 @@
     [dartx.elementAt](index) {
       return this[dartx._get](index);
     }
-    [dartx.item](index) {
-      return this.item(index);
+    [dartx.item](...args) {
+      return this.item.apply(this, args);
     }
   };
   html$._CssRuleList[dart.implements] = () => [_js_helper.JavaScriptIndexingBehavior, ListOfCssRule()];
@@ -78317,8 +78317,8 @@
     [dartx.elementAt](index) {
       return this[dartx._get](index);
     }
-    [dartx.item](index) {
-      return this.item(index);
+    [dartx.item](...args) {
+      return this.item.apply(this, args);
     }
   };
   html$._GamepadList[dart.implements] = () => [_js_helper.JavaScriptIndexingBehavior, ListOfGamepad()];
@@ -78343,8 +78343,8 @@
     static _() {
       dart.throw(new core.UnsupportedError("Not supported"));
     }
-    [_item](index) {
-      return this.item(index);
+    [_item](...args) {
+      return this.item.apply(this, args);
     }
   };
   dart.setSignature(html$._HTMLAllCollection, {
@@ -78508,26 +78508,26 @@
     [dartx.elementAt](index) {
       return this[dartx._get](index);
     }
-    [dartx.getNamedItem](name) {
-      return this.getNamedItem(name);
+    [dartx.getNamedItem](...args) {
+      return this.getNamedItem.apply(this, args);
     }
-    [dartx.getNamedItemNS](namespaceURI, localName) {
-      return this.getNamedItemNS(namespaceURI, localName);
+    [dartx.getNamedItemNS](...args) {
+      return this.getNamedItemNS.apply(this, args);
     }
-    [dartx.item](index) {
-      return this.item(index);
+    [dartx.item](...args) {
+      return this.item.apply(this, args);
     }
-    [dartx.removeNamedItem](name) {
-      return this.removeNamedItem(name);
+    [dartx.removeNamedItem](...args) {
+      return this.removeNamedItem.apply(this, args);
     }
-    [dartx.removeNamedItemNS](namespaceURI, localName) {
-      return this.removeNamedItemNS(namespaceURI, localName);
+    [dartx.removeNamedItemNS](...args) {
+      return this.removeNamedItemNS.apply(this, args);
     }
-    [dartx.setNamedItem](attr) {
-      return this.setNamedItem(attr);
+    [dartx.setNamedItem](...args) {
+      return this.setNamedItem.apply(this, args);
     }
-    [dartx.setNamedItemNS](attr) {
-      return this.setNamedItemNS(attr);
+    [dartx.setNamedItemNS](...args) {
+      return this.setNamedItemNS.apply(this, args);
     }
   };
   html$._NamedNodeMap[dart.implements] = () => [_js_helper.JavaScriptIndexingBehavior, ListOfNode()];
@@ -78609,8 +78609,8 @@
     get [dartx.url]() {
       return this.url;
     }
-    [dartx.clone]() {
-      return this.clone();
+    [dartx.clone](...args) {
+      return this.clone.apply(this, args);
     }
   };
   dart.setSignature(html$._Request, {
@@ -78736,8 +78736,8 @@
     [dartx.elementAt](index) {
       return this[dartx._get](index);
     }
-    [dartx.item](index) {
-      return this.item(index);
+    [dartx.item](...args) {
+      return this.item.apply(this, args);
     }
   };
   html$._SpeechRecognitionResultList[dart.implements] = () => [_js_helper.JavaScriptIndexingBehavior, ListOfSpeechRecognitionResult()];
@@ -78811,11 +78811,11 @@
     [dartx.elementAt](index) {
       return this[dartx._get](index);
     }
-    [__getter__](name) {
-      return this.__getter__(name);
+    [__getter__](...args) {
+      return this.__getter__.apply(this, args);
     }
-    [dartx.item](index) {
-      return this.item(index);
+    [dartx.item](...args) {
+      return this.item.apply(this, args);
     }
   };
   html$._StyleSheetList[dart.implements] = () => [_js_helper.JavaScriptIndexingBehavior, ListOfStyleSheet()];
@@ -84007,11 +84007,11 @@
     get [dartx.viewportElement]() {
       return this.viewportElement;
     }
-    [dartx.blur]() {
-      return this.blur();
+    [dartx.blur](...args) {
+      return this.blur.apply(this, args);
     }
-    [dartx.focus]() {
-      return this.focus();
+    [dartx.focus](...args) {
+      return this.focus.apply(this, args);
     }
     get [dartx.onAbort]() {
       return svg$.SvgElement.abortEvent.forElement(this);
@@ -84440,17 +84440,17 @@
     get [dartx.transform]() {
       return this.transform;
     }
-    [dartx.getBBox]() {
-      return this.getBBox();
+    [dartx.getBBox](...args) {
+      return this.getBBox.apply(this, args);
     }
-    [dartx.getCtm]() {
-      return this.getCTM();
+    [dartx.getCtm](...args) {
+      return this.getCTM.apply(this, args);
     }
-    [dartx.getScreenCtm]() {
-      return this.getScreenCTM();
+    [dartx.getScreenCtm](...args) {
+      return this.getScreenCTM.apply(this, args);
     }
-    [dartx.getTransformToElement](element) {
-      return this.getTransformToElement(element);
+    [dartx.getTransformToElement](...args) {
+      return this.getTransformToElement.apply(this, args);
     }
     get [dartx.requiredExtensions]() {
       return this.requiredExtensions;
@@ -84461,8 +84461,8 @@
     get [dartx.systemLanguage]() {
       return this.systemLanguage;
     }
-    [dartx.hasExtension](extension) {
-      return this.hasExtension(extension);
+    [dartx.hasExtension](...args) {
+      return this.hasExtension.apply(this, args);
     }
   };
   dart.defineNamedConstructor(svg$.GraphicsElement, 'created');
@@ -84559,11 +84559,11 @@
     set [dartx.valueInSpecifiedUnits](value) {
       this.valueInSpecifiedUnits = value;
     }
-    [dartx.convertToSpecifiedUnits](unitType) {
-      return this.convertToSpecifiedUnits(unitType);
+    [dartx.convertToSpecifiedUnits](...args) {
+      return this.convertToSpecifiedUnits.apply(this, args);
     }
-    [dartx.newValueSpecifiedUnits](unitType, valueInSpecifiedUnits) {
-      return this.newValueSpecifiedUnits(unitType, valueInSpecifiedUnits);
+    [dartx.newValueSpecifiedUnits](...args) {
+      return this.newValueSpecifiedUnits.apply(this, args);
     }
   };
   dart.setSignature(svg$.Angle, {
@@ -84623,26 +84623,26 @@
     get [dartx.targetElement]() {
       return this.targetElement;
     }
-    [dartx.beginElement]() {
-      return this.beginElement();
+    [dartx.beginElement](...args) {
+      return this.beginElement.apply(this, args);
     }
-    [dartx.beginElementAt](offset) {
-      return this.beginElementAt(offset);
+    [dartx.beginElementAt](...args) {
+      return this.beginElementAt.apply(this, args);
     }
-    [dartx.endElement]() {
-      return this.endElement();
+    [dartx.endElement](...args) {
+      return this.endElement.apply(this, args);
     }
-    [dartx.endElementAt](offset) {
-      return this.endElementAt(offset);
+    [dartx.endElementAt](...args) {
+      return this.endElementAt.apply(this, args);
     }
-    [dartx.getCurrentTime]() {
-      return this.getCurrentTime();
+    [dartx.getCurrentTime](...args) {
+      return this.getCurrentTime.apply(this, args);
     }
-    [dartx.getSimpleDuration]() {
-      return this.getSimpleDuration();
+    [dartx.getSimpleDuration](...args) {
+      return this.getSimpleDuration.apply(this, args);
     }
-    [dartx.getStartTime]() {
-      return this.getStartTime();
+    [dartx.getStartTime](...args) {
+      return this.getStartTime.apply(this, args);
     }
     get [dartx.requiredExtensions]() {
       return this.requiredExtensions;
@@ -84653,8 +84653,8 @@
     get [dartx.systemLanguage]() {
       return this.systemLanguage;
     }
-    [dartx.hasExtension](extension) {
-      return this.hasExtension(extension);
+    [dartx.hasExtension](...args) {
+      return this.hasExtension.apply(this, args);
     }
   };
   dart.defineNamedConstructor(svg$.AnimationElement, 'created');
@@ -85057,11 +85057,11 @@
     created() {
       super.created();
     }
-    [dartx.isPointInFill](point) {
-      return this.isPointInFill(point);
+    [dartx.isPointInFill](...args) {
+      return this.isPointInFill.apply(this, args);
     }
-    [dartx.isPointInStroke](point) {
-      return this.isPointInStroke(point);
+    [dartx.isPointInStroke](...args) {
+      return this.isPointInStroke.apply(this, args);
     }
   };
   dart.defineNamedConstructor(svg$.GeometryElement, 'created');
@@ -86187,8 +86187,8 @@
     get [dartx.stdDeviationY]() {
       return this.stdDeviationY;
     }
-    [dartx.setStdDeviation](stdDeviationX, stdDeviationY) {
-      return this.setStdDeviation(stdDeviationX, stdDeviationY);
+    [dartx.setStdDeviation](...args) {
+      return this.setStdDeviation.apply(this, args);
     }
     get [dartx.height]() {
       return this.height;
@@ -87273,11 +87273,11 @@
     set [dartx.valueInSpecifiedUnits](value) {
       this.valueInSpecifiedUnits = value;
     }
-    [dartx.convertToSpecifiedUnits](unitType) {
-      return this.convertToSpecifiedUnits(unitType);
+    [dartx.convertToSpecifiedUnits](...args) {
+      return this.convertToSpecifiedUnits.apply(this, args);
     }
-    [dartx.newValueSpecifiedUnits](unitType, valueInSpecifiedUnits) {
-      return this.newValueSpecifiedUnits(unitType, valueInSpecifiedUnits);
+    [dartx.newValueSpecifiedUnits](...args) {
+      return this.newValueSpecifiedUnits.apply(this, args);
     }
   };
   dart.setSignature(svg$.Length, {
@@ -87382,29 +87382,29 @@
     [dartx.elementAt](index) {
       return this[dartx._get](index);
     }
-    [__setter__$](index, newItem) {
-      return this.__setter__(index, newItem);
+    [__setter__$](...args) {
+      return this.__setter__.apply(this, args);
     }
-    [dartx.appendItem](newItem) {
-      return this.appendItem(newItem);
+    [dartx.appendItem](...args) {
+      return this.appendItem.apply(this, args);
     }
-    [dartx.clear]() {
-      return this.clear();
+    [dartx.clear](...args) {
+      return this.clear.apply(this, args);
     }
-    [dartx.getItem](index) {
-      return this.getItem(index);
+    [dartx.getItem](...args) {
+      return this.getItem.apply(this, args);
     }
-    [dartx.initialize](newItem) {
-      return this.initialize(newItem);
+    [dartx.initialize](...args) {
+      return this.initialize.apply(this, args);
     }
-    [dartx.insertItemBefore](newItem, index) {
-      return this.insertItemBefore(newItem, index);
+    [dartx.insertItemBefore](...args) {
+      return this.insertItemBefore.apply(this, args);
     }
-    [dartx.removeItem](index) {
-      return this.removeItem(index);
+    [dartx.removeItem](...args) {
+      return this.removeItem.apply(this, args);
     }
-    [dartx.replaceItem](newItem, index) {
-      return this.replaceItem(newItem, index);
+    [dartx.replaceItem](...args) {
+      return this.replaceItem.apply(this, args);
     }
   };
   svg$.LengthList[dart.implements] = () => [ListOfLength()];
@@ -87636,11 +87636,11 @@
     get [dartx.refY]() {
       return this.refY;
     }
-    [dartx.setOrientToAngle](angle) {
-      return this.setOrientToAngle(angle);
+    [dartx.setOrientToAngle](...args) {
+      return this.setOrientToAngle.apply(this, args);
     }
-    [dartx.setOrientToAuto]() {
-      return this.setOrientToAuto();
+    [dartx.setOrientToAuto](...args) {
+      return this.setOrientToAuto.apply(this, args);
     }
     get [dartx.preserveAspectRatio]() {
       return this.preserveAspectRatio;
@@ -87746,8 +87746,8 @@
     get [dartx.systemLanguage]() {
       return this.systemLanguage;
     }
-    [dartx.hasExtension](extension) {
-      return this.hasExtension(extension);
+    [dartx.hasExtension](...args) {
+      return this.hasExtension.apply(this, args);
     }
   };
   dart.defineNamedConstructor(svg$.MaskElement, 'created');
@@ -87831,38 +87831,38 @@
     set [dartx.f](value) {
       this.f = value;
     }
-    [dartx.flipX]() {
-      return this.flipX();
+    [dartx.flipX](...args) {
+      return this.flipX.apply(this, args);
     }
-    [dartx.flipY]() {
-      return this.flipY();
+    [dartx.flipY](...args) {
+      return this.flipY.apply(this, args);
     }
-    [dartx.inverse]() {
-      return this.inverse();
+    [dartx.inverse](...args) {
+      return this.inverse.apply(this, args);
     }
-    [dartx.multiply](secondMatrix) {
-      return this.multiply(secondMatrix);
+    [dartx.multiply](...args) {
+      return this.multiply.apply(this, args);
     }
-    [dartx.rotate](angle) {
-      return this.rotate(angle);
+    [dartx.rotate](...args) {
+      return this.rotate.apply(this, args);
     }
-    [dartx.rotateFromVector](x, y) {
-      return this.rotateFromVector(x, y);
+    [dartx.rotateFromVector](...args) {
+      return this.rotateFromVector.apply(this, args);
     }
-    [dartx.scale](scaleFactor) {
-      return this.scale(scaleFactor);
+    [dartx.scale](...args) {
+      return this.scale.apply(this, args);
     }
-    [dartx.scaleNonUniform](scaleFactorX, scaleFactorY) {
-      return this.scaleNonUniform(scaleFactorX, scaleFactorY);
+    [dartx.scaleNonUniform](...args) {
+      return this.scaleNonUniform.apply(this, args);
     }
-    [dartx.skewX](angle) {
-      return this.skewX(angle);
+    [dartx.skewX](...args) {
+      return this.skewX.apply(this, args);
     }
-    [dartx.skewY](angle) {
-      return this.skewY(angle);
+    [dartx.skewY](...args) {
+      return this.skewY.apply(this, args);
     }
-    [dartx.translate](x, y) {
-      return this.translate(x, y);
+    [dartx.translate](...args) {
+      return this.translate.apply(this, args);
     }
   };
   dart.setSignature(svg$.Matrix, {
@@ -87988,29 +87988,29 @@
     [dartx.elementAt](index) {
       return this[dartx._get](index);
     }
-    [__setter__$](index, newItem) {
-      return this.__setter__(index, newItem);
+    [__setter__$](...args) {
+      return this.__setter__.apply(this, args);
     }
-    [dartx.appendItem](newItem) {
-      return this.appendItem(newItem);
+    [dartx.appendItem](...args) {
+      return this.appendItem.apply(this, args);
     }
-    [dartx.clear]() {
-      return this.clear();
+    [dartx.clear](...args) {
+      return this.clear.apply(this, args);
     }
-    [dartx.getItem](index) {
-      return this.getItem(index);
+    [dartx.getItem](...args) {
+      return this.getItem.apply(this, args);
     }
-    [dartx.initialize](newItem) {
-      return this.initialize(newItem);
+    [dartx.initialize](...args) {
+      return this.initialize.apply(this, args);
     }
-    [dartx.insertItemBefore](newItem, index) {
-      return this.insertItemBefore(newItem, index);
+    [dartx.insertItemBefore](...args) {
+      return this.insertItemBefore.apply(this, args);
     }
-    [dartx.removeItem](index) {
-      return this.removeItem(index);
+    [dartx.removeItem](...args) {
+      return this.removeItem.apply(this, args);
     }
-    [dartx.replaceItem](newItem, index) {
-      return this.replaceItem(newItem, index);
+    [dartx.replaceItem](...args) {
+      return this.replaceItem.apply(this, args);
     }
   };
   svg$.NumberList[dart.implements] = () => [ListOfNumber()];
@@ -88097,71 +88097,71 @@
     get [dartx.pathSegList]() {
       return this.pathSegList;
     }
-    [dartx.createSvgPathSegArcAbs](x, y, r1, r2, angle, largeArcFlag, sweepFlag) {
-      return this.createSVGPathSegArcAbs(x, y, r1, r2, angle, largeArcFlag, sweepFlag);
+    [dartx.createSvgPathSegArcAbs](...args) {
+      return this.createSVGPathSegArcAbs.apply(this, args);
     }
-    [dartx.createSvgPathSegArcRel](x, y, r1, r2, angle, largeArcFlag, sweepFlag) {
-      return this.createSVGPathSegArcRel(x, y, r1, r2, angle, largeArcFlag, sweepFlag);
+    [dartx.createSvgPathSegArcRel](...args) {
+      return this.createSVGPathSegArcRel.apply(this, args);
     }
-    [dartx.createSvgPathSegClosePath]() {
-      return this.createSVGPathSegClosePath();
+    [dartx.createSvgPathSegClosePath](...args) {
+      return this.createSVGPathSegClosePath.apply(this, args);
     }
-    [dartx.createSvgPathSegCurvetoCubicAbs](x, y, x1, y1, x2, y2) {
-      return this.createSVGPathSegCurvetoCubicAbs(x, y, x1, y1, x2, y2);
+    [dartx.createSvgPathSegCurvetoCubicAbs](...args) {
+      return this.createSVGPathSegCurvetoCubicAbs.apply(this, args);
     }
-    [dartx.createSvgPathSegCurvetoCubicRel](x, y, x1, y1, x2, y2) {
-      return this.createSVGPathSegCurvetoCubicRel(x, y, x1, y1, x2, y2);
+    [dartx.createSvgPathSegCurvetoCubicRel](...args) {
+      return this.createSVGPathSegCurvetoCubicRel.apply(this, args);
     }
-    [dartx.createSvgPathSegCurvetoCubicSmoothAbs](x, y, x2, y2) {
-      return this.createSVGPathSegCurvetoCubicSmoothAbs(x, y, x2, y2);
+    [dartx.createSvgPathSegCurvetoCubicSmoothAbs](...args) {
+      return this.createSVGPathSegCurvetoCubicSmoothAbs.apply(this, args);
     }
-    [dartx.createSvgPathSegCurvetoCubicSmoothRel](x, y, x2, y2) {
-      return this.createSVGPathSegCurvetoCubicSmoothRel(x, y, x2, y2);
+    [dartx.createSvgPathSegCurvetoCubicSmoothRel](...args) {
+      return this.createSVGPathSegCurvetoCubicSmoothRel.apply(this, args);
     }
-    [dartx.createSvgPathSegCurvetoQuadraticAbs](x, y, x1, y1) {
-      return this.createSVGPathSegCurvetoQuadraticAbs(x, y, x1, y1);
+    [dartx.createSvgPathSegCurvetoQuadraticAbs](...args) {
+      return this.createSVGPathSegCurvetoQuadraticAbs.apply(this, args);
     }
-    [dartx.createSvgPathSegCurvetoQuadraticRel](x, y, x1, y1) {
-      return this.createSVGPathSegCurvetoQuadraticRel(x, y, x1, y1);
+    [dartx.createSvgPathSegCurvetoQuadraticRel](...args) {
+      return this.createSVGPathSegCurvetoQuadraticRel.apply(this, args);
     }
-    [dartx.createSvgPathSegCurvetoQuadraticSmoothAbs](x, y) {
-      return this.createSVGPathSegCurvetoQuadraticSmoothAbs(x, y);
+    [dartx.createSvgPathSegCurvetoQuadraticSmoothAbs](...args) {
+      return this.createSVGPathSegCurvetoQuadraticSmoothAbs.apply(this, args);
     }
-    [dartx.createSvgPathSegCurvetoQuadraticSmoothRel](x, y) {
-      return this.createSVGPathSegCurvetoQuadraticSmoothRel(x, y);
+    [dartx.createSvgPathSegCurvetoQuadraticSmoothRel](...args) {
+      return this.createSVGPathSegCurvetoQuadraticSmoothRel.apply(this, args);
     }
-    [dartx.createSvgPathSegLinetoAbs](x, y) {
-      return this.createSVGPathSegLinetoAbs(x, y);
+    [dartx.createSvgPathSegLinetoAbs](...args) {
+      return this.createSVGPathSegLinetoAbs.apply(this, args);
     }
-    [dartx.createSvgPathSegLinetoHorizontalAbs](x) {
-      return this.createSVGPathSegLinetoHorizontalAbs(x);
+    [dartx.createSvgPathSegLinetoHorizontalAbs](...args) {
+      return this.createSVGPathSegLinetoHorizontalAbs.apply(this, args);
     }
-    [dartx.createSvgPathSegLinetoHorizontalRel](x) {
-      return this.createSVGPathSegLinetoHorizontalRel(x);
+    [dartx.createSvgPathSegLinetoHorizontalRel](...args) {
+      return this.createSVGPathSegLinetoHorizontalRel.apply(this, args);
     }
-    [dartx.createSvgPathSegLinetoRel](x, y) {
-      return this.createSVGPathSegLinetoRel(x, y);
+    [dartx.createSvgPathSegLinetoRel](...args) {
+      return this.createSVGPathSegLinetoRel.apply(this, args);
     }
-    [dartx.createSvgPathSegLinetoVerticalAbs](y) {
-      return this.createSVGPathSegLinetoVerticalAbs(y);
+    [dartx.createSvgPathSegLinetoVerticalAbs](...args) {
+      return this.createSVGPathSegLinetoVerticalAbs.apply(this, args);
     }
-    [dartx.createSvgPathSegLinetoVerticalRel](y) {
-      return this.createSVGPathSegLinetoVerticalRel(y);
+    [dartx.createSvgPathSegLinetoVerticalRel](...args) {
+      return this.createSVGPathSegLinetoVerticalRel.apply(this, args);
     }
-    [dartx.createSvgPathSegMovetoAbs](x, y) {
-      return this.createSVGPathSegMovetoAbs(x, y);
+    [dartx.createSvgPathSegMovetoAbs](...args) {
+      return this.createSVGPathSegMovetoAbs.apply(this, args);
     }
-    [dartx.createSvgPathSegMovetoRel](x, y) {
-      return this.createSVGPathSegMovetoRel(x, y);
+    [dartx.createSvgPathSegMovetoRel](...args) {
+      return this.createSVGPathSegMovetoRel.apply(this, args);
     }
-    [dartx.getPathSegAtLength](distance) {
-      return this.getPathSegAtLength(distance);
+    [dartx.getPathSegAtLength](...args) {
+      return this.getPathSegAtLength.apply(this, args);
     }
-    [dartx.getPointAtLength](distance) {
-      return this.getPointAtLength(distance);
+    [dartx.getPointAtLength](...args) {
+      return this.getPointAtLength.apply(this, args);
     }
-    [dartx.getTotalLength]() {
-      return this.getTotalLength();
+    [dartx.getTotalLength](...args) {
+      return this.getTotalLength.apply(this, args);
     }
   };
   dart.defineNamedConstructor(svg$.PathElement, 'created');
@@ -88973,29 +88973,29 @@
     [dartx.elementAt](index) {
       return this[dartx._get](index);
     }
-    [__setter__$](index, newItem) {
-      return this.__setter__(index, newItem);
+    [__setter__$](...args) {
+      return this.__setter__.apply(this, args);
     }
-    [dartx.appendItem](newItem) {
-      return this.appendItem(newItem);
+    [dartx.appendItem](...args) {
+      return this.appendItem.apply(this, args);
     }
-    [dartx.clear]() {
-      return this.clear();
+    [dartx.clear](...args) {
+      return this.clear.apply(this, args);
     }
-    [dartx.getItem](index) {
-      return this.getItem(index);
+    [dartx.getItem](...args) {
+      return this.getItem.apply(this, args);
     }
-    [dartx.initialize](newItem) {
-      return this.initialize(newItem);
+    [dartx.initialize](...args) {
+      return this.initialize.apply(this, args);
     }
-    [dartx.insertItemBefore](newItem, index) {
-      return this.insertItemBefore(newItem, index);
+    [dartx.insertItemBefore](...args) {
+      return this.insertItemBefore.apply(this, args);
     }
-    [dartx.removeItem](index) {
-      return this.removeItem(index);
+    [dartx.removeItem](...args) {
+      return this.removeItem.apply(this, args);
     }
-    [dartx.replaceItem](newItem, index) {
-      return this.replaceItem(newItem, index);
+    [dartx.replaceItem](...args) {
+      return this.replaceItem.apply(this, args);
     }
   };
   svg$.PathSegList[dart.implements] = () => [ListOfPathSeg()];
@@ -89156,8 +89156,8 @@
     get [dartx.systemLanguage]() {
       return this.systemLanguage;
     }
-    [dartx.hasExtension](extension) {
-      return this.hasExtension(extension);
+    [dartx.hasExtension](...args) {
+      return this.hasExtension.apply(this, args);
     }
     get [dartx.href]() {
       return this.href;
@@ -89210,8 +89210,8 @@
     set [dartx.y](value) {
       this.y = value;
     }
-    [dartx.matrixTransform](matrix) {
-      return this.matrixTransform(matrix);
+    [dartx.matrixTransform](...args) {
+      return this.matrixTransform.apply(this, args);
     }
   };
   dart.setSignature(svg$.Point, {
@@ -89244,29 +89244,29 @@
     get [dartx.numberOfItems]() {
       return this.numberOfItems;
     }
-    [__setter__$](index, newItem) {
-      return this.__setter__(index, newItem);
+    [__setter__$](...args) {
+      return this.__setter__.apply(this, args);
     }
-    [dartx.appendItem](newItem) {
-      return this.appendItem(newItem);
+    [dartx.appendItem](...args) {
+      return this.appendItem.apply(this, args);
     }
-    [dartx.clear]() {
-      return this.clear();
+    [dartx.clear](...args) {
+      return this.clear.apply(this, args);
     }
-    [dartx.getItem](index) {
-      return this.getItem(index);
+    [dartx.getItem](...args) {
+      return this.getItem.apply(this, args);
     }
-    [dartx.initialize](newItem) {
-      return this.initialize(newItem);
+    [dartx.initialize](...args) {
+      return this.initialize.apply(this, args);
     }
-    [dartx.insertItemBefore](newItem, index) {
-      return this.insertItemBefore(newItem, index);
+    [dartx.insertItemBefore](...args) {
+      return this.insertItemBefore.apply(this, args);
     }
-    [dartx.removeItem](index) {
-      return this.removeItem(index);
+    [dartx.removeItem](...args) {
+      return this.removeItem.apply(this, args);
     }
-    [dartx.replaceItem](newItem, index) {
-      return this.replaceItem(newItem, index);
+    [dartx.replaceItem](...args) {
+      return this.replaceItem.apply(this, args);
     }
   };
   dart.setSignature(svg$.PointList, {
@@ -89738,29 +89738,29 @@
     [dartx.elementAt](index) {
       return this[dartx._get](index);
     }
-    [__setter__$](index, newItem) {
-      return this.__setter__(index, newItem);
+    [__setter__$](...args) {
+      return this.__setter__.apply(this, args);
     }
-    [dartx.appendItem](newItem) {
-      return this.appendItem(newItem);
+    [dartx.appendItem](...args) {
+      return this.appendItem.apply(this, args);
     }
-    [dartx.clear]() {
-      return this.clear();
+    [dartx.clear](...args) {
+      return this.clear.apply(this, args);
     }
-    [dartx.getItem](index) {
-      return this.getItem(index);
+    [dartx.getItem](...args) {
+      return this.getItem.apply(this, args);
     }
-    [dartx.initialize](newItem) {
-      return this.initialize(newItem);
+    [dartx.initialize](...args) {
+      return this.initialize.apply(this, args);
     }
-    [dartx.insertItemBefore](item, index) {
-      return this.insertItemBefore(item, index);
+    [dartx.insertItemBefore](...args) {
+      return this.insertItemBefore.apply(this, args);
     }
-    [dartx.removeItem](index) {
-      return this.removeItem(index);
+    [dartx.removeItem](...args) {
+      return this.removeItem.apply(this, args);
     }
-    [dartx.replaceItem](newItem, index) {
-      return this.replaceItem(newItem, index);
+    [dartx.replaceItem](...args) {
+      return this.replaceItem.apply(this, args);
     }
   };
   svg$.StringList[dart.implements] = () => [ListOfString()];
@@ -89987,74 +89987,74 @@
     get [dartx.y]() {
       return this.y;
     }
-    [dartx.animationsPaused]() {
-      return this.animationsPaused();
+    [dartx.animationsPaused](...args) {
+      return this.animationsPaused.apply(this, args);
     }
-    [dartx.checkEnclosure](element, rect) {
-      return this.checkEnclosure(element, rect);
+    [dartx.checkEnclosure](...args) {
+      return this.checkEnclosure.apply(this, args);
     }
-    [dartx.checkIntersection](element, rect) {
-      return this.checkIntersection(element, rect);
+    [dartx.checkIntersection](...args) {
+      return this.checkIntersection.apply(this, args);
     }
-    [dartx.createSvgAngle]() {
-      return this.createSVGAngle();
+    [dartx.createSvgAngle](...args) {
+      return this.createSVGAngle.apply(this, args);
     }
-    [dartx.createSvgLength]() {
-      return this.createSVGLength();
+    [dartx.createSvgLength](...args) {
+      return this.createSVGLength.apply(this, args);
     }
-    [dartx.createSvgMatrix]() {
-      return this.createSVGMatrix();
+    [dartx.createSvgMatrix](...args) {
+      return this.createSVGMatrix.apply(this, args);
     }
-    [dartx.createSvgNumber]() {
-      return this.createSVGNumber();
+    [dartx.createSvgNumber](...args) {
+      return this.createSVGNumber.apply(this, args);
     }
-    [dartx.createSvgPoint]() {
-      return this.createSVGPoint();
+    [dartx.createSvgPoint](...args) {
+      return this.createSVGPoint.apply(this, args);
     }
-    [dartx.createSvgRect]() {
-      return this.createSVGRect();
+    [dartx.createSvgRect](...args) {
+      return this.createSVGRect.apply(this, args);
     }
-    [dartx.createSvgTransform]() {
-      return this.createSVGTransform();
+    [dartx.createSvgTransform](...args) {
+      return this.createSVGTransform.apply(this, args);
     }
-    [dartx.createSvgTransformFromMatrix](matrix) {
-      return this.createSVGTransformFromMatrix(matrix);
+    [dartx.createSvgTransformFromMatrix](...args) {
+      return this.createSVGTransformFromMatrix.apply(this, args);
     }
-    [dartx.deselectAll]() {
-      return this.deselectAll();
+    [dartx.deselectAll](...args) {
+      return this.deselectAll.apply(this, args);
     }
-    [dartx.forceRedraw]() {
-      return this.forceRedraw();
+    [dartx.forceRedraw](...args) {
+      return this.forceRedraw.apply(this, args);
     }
-    [dartx.getCurrentTime]() {
-      return this.getCurrentTime();
+    [dartx.getCurrentTime](...args) {
+      return this.getCurrentTime.apply(this, args);
     }
-    [dartx.getElementById](elementId) {
-      return this.getElementById(elementId);
+    [dartx.getElementById](...args) {
+      return this.getElementById.apply(this, args);
     }
-    [dartx.getEnclosureList](rect, referenceElement) {
-      return this.getEnclosureList(rect, referenceElement);
+    [dartx.getEnclosureList](...args) {
+      return this.getEnclosureList.apply(this, args);
     }
-    [dartx.getIntersectionList](rect, referenceElement) {
-      return this.getIntersectionList(rect, referenceElement);
+    [dartx.getIntersectionList](...args) {
+      return this.getIntersectionList.apply(this, args);
     }
-    [dartx.pauseAnimations]() {
-      return this.pauseAnimations();
+    [dartx.pauseAnimations](...args) {
+      return this.pauseAnimations.apply(this, args);
     }
-    [dartx.setCurrentTime](seconds) {
-      return this.setCurrentTime(seconds);
+    [dartx.setCurrentTime](...args) {
+      return this.setCurrentTime.apply(this, args);
     }
-    [dartx.suspendRedraw](maxWaitMilliseconds) {
-      return this.suspendRedraw(maxWaitMilliseconds);
+    [dartx.suspendRedraw](...args) {
+      return this.suspendRedraw.apply(this, args);
     }
-    [dartx.unpauseAnimations]() {
-      return this.unpauseAnimations();
+    [dartx.unpauseAnimations](...args) {
+      return this.unpauseAnimations.apply(this, args);
     }
-    [dartx.unsuspendRedraw](suspendHandleId) {
-      return this.unsuspendRedraw(suspendHandleId);
+    [dartx.unsuspendRedraw](...args) {
+      return this.unsuspendRedraw.apply(this, args);
     }
-    [dartx.unsuspendRedrawAll]() {
-      return this.unsuspendRedrawAll();
+    [dartx.unsuspendRedrawAll](...args) {
+      return this.unsuspendRedrawAll.apply(this, args);
     }
     get [dartx.preserveAspectRatio]() {
       return this.preserveAspectRatio;
@@ -90207,32 +90207,32 @@
     get [dartx.textLength]() {
       return this.textLength;
     }
-    [dartx.getCharNumAtPosition](point) {
-      return this.getCharNumAtPosition(point);
+    [dartx.getCharNumAtPosition](...args) {
+      return this.getCharNumAtPosition.apply(this, args);
     }
-    [dartx.getComputedTextLength]() {
-      return this.getComputedTextLength();
+    [dartx.getComputedTextLength](...args) {
+      return this.getComputedTextLength.apply(this, args);
     }
-    [dartx.getEndPositionOfChar](charnum) {
-      return this.getEndPositionOfChar(charnum);
+    [dartx.getEndPositionOfChar](...args) {
+      return this.getEndPositionOfChar.apply(this, args);
     }
-    [dartx.getExtentOfChar](charnum) {
-      return this.getExtentOfChar(charnum);
+    [dartx.getExtentOfChar](...args) {
+      return this.getExtentOfChar.apply(this, args);
     }
-    [dartx.getNumberOfChars]() {
-      return this.getNumberOfChars();
+    [dartx.getNumberOfChars](...args) {
+      return this.getNumberOfChars.apply(this, args);
     }
-    [dartx.getRotationOfChar](charnum) {
-      return this.getRotationOfChar(charnum);
+    [dartx.getRotationOfChar](...args) {
+      return this.getRotationOfChar.apply(this, args);
     }
-    [dartx.getStartPositionOfChar](charnum) {
-      return this.getStartPositionOfChar(charnum);
+    [dartx.getStartPositionOfChar](...args) {
+      return this.getStartPositionOfChar.apply(this, args);
     }
-    [dartx.getSubStringLength](charnum, nchars) {
-      return this.getSubStringLength(charnum, nchars);
+    [dartx.getSubStringLength](...args) {
+      return this.getSubStringLength.apply(this, args);
     }
-    [dartx.selectSubString](charnum, nchars) {
-      return this.selectSubString(charnum, nchars);
+    [dartx.selectSubString](...args) {
+      return this.selectSubString.apply(this, args);
     }
   };
   dart.defineNamedConstructor(svg$.TextContentElement, 'created');
@@ -90499,23 +90499,23 @@
     get [dartx.type]() {
       return this.type;
     }
-    [dartx.setMatrix](matrix) {
-      return this.setMatrix(matrix);
+    [dartx.setMatrix](...args) {
+      return this.setMatrix.apply(this, args);
     }
-    [dartx.setRotate](angle, cx, cy) {
-      return this.setRotate(angle, cx, cy);
+    [dartx.setRotate](...args) {
+      return this.setRotate.apply(this, args);
     }
-    [dartx.setScale](sx, sy) {
-      return this.setScale(sx, sy);
+    [dartx.setScale](...args) {
+      return this.setScale.apply(this, args);
     }
-    [dartx.setSkewX](angle) {
-      return this.setSkewX(angle);
+    [dartx.setSkewX](...args) {
+      return this.setSkewX.apply(this, args);
     }
-    [dartx.setSkewY](angle) {
-      return this.setSkewY(angle);
+    [dartx.setSkewY](...args) {
+      return this.setSkewY.apply(this, args);
     }
-    [dartx.setTranslate](tx, ty) {
-      return this.setTranslate(tx, ty);
+    [dartx.setTranslate](...args) {
+      return this.setTranslate.apply(this, args);
     }
   };
   dart.setSignature(svg$.Transform, {
@@ -90616,35 +90616,35 @@
     [dartx.elementAt](index) {
       return this[dartx._get](index);
     }
-    [__setter__$](index, newItem) {
-      return this.__setter__(index, newItem);
+    [__setter__$](...args) {
+      return this.__setter__.apply(this, args);
     }
-    [dartx.appendItem](newItem) {
-      return this.appendItem(newItem);
+    [dartx.appendItem](...args) {
+      return this.appendItem.apply(this, args);
     }
-    [dartx.clear]() {
-      return this.clear();
+    [dartx.clear](...args) {
+      return this.clear.apply(this, args);
     }
-    [dartx.consolidate]() {
-      return this.consolidate();
+    [dartx.consolidate](...args) {
+      return this.consolidate.apply(this, args);
     }
-    [dartx.createSvgTransformFromMatrix](matrix) {
-      return this.createSVGTransformFromMatrix(matrix);
+    [dartx.createSvgTransformFromMatrix](...args) {
+      return this.createSVGTransformFromMatrix.apply(this, args);
     }
-    [dartx.getItem](index) {
-      return this.getItem(index);
+    [dartx.getItem](...args) {
+      return this.getItem.apply(this, args);
     }
-    [dartx.initialize](newItem) {
-      return this.initialize(newItem);
+    [dartx.initialize](...args) {
+      return this.initialize.apply(this, args);
     }
-    [dartx.insertItemBefore](newItem, index) {
-      return this.insertItemBefore(newItem, index);
+    [dartx.insertItemBefore](...args) {
+      return this.insertItemBefore.apply(this, args);
     }
-    [dartx.removeItem](index) {
-      return this.removeItem(index);
+    [dartx.removeItem](...args) {
+      return this.removeItem.apply(this, args);
     }
-    [dartx.replaceItem](newItem, index) {
-      return this.replaceItem(newItem, index);
+    [dartx.replaceItem](...args) {
+      return this.replaceItem.apply(this, args);
     }
   };
   svg$.TransformList[dart.implements] = () => [ListOfTransform()];
@@ -91052,11 +91052,11 @@
     get [dartx.numberOfOutputs]() {
       return this.numberOfOutputs;
     }
-    [_connect](destination, output, input) {
-      return this.connect(destination, output, input);
+    [_connect](...args) {
+      return this.connect.apply(this, args);
     }
-    [dartx.disconnect](output) {
-      return this.disconnect(output);
+    [dartx.disconnect](...args) {
+      return this.disconnect.apply(this, args);
     }
     [dartx.connectNode](destination, output, input) {
       if (output === void 0) output = 0;
@@ -91128,17 +91128,17 @@
     set [dartx.smoothingTimeConstant](value) {
       this.smoothingTimeConstant = value;
     }
-    [dartx.getByteFrequencyData](array) {
-      return this.getByteFrequencyData(array);
+    [dartx.getByteFrequencyData](...args) {
+      return this.getByteFrequencyData.apply(this, args);
     }
-    [dartx.getByteTimeDomainData](array) {
-      return this.getByteTimeDomainData(array);
+    [dartx.getByteTimeDomainData](...args) {
+      return this.getByteTimeDomainData.apply(this, args);
     }
-    [dartx.getFloatFrequencyData](array) {
-      return this.getFloatFrequencyData(array);
+    [dartx.getFloatFrequencyData](...args) {
+      return this.getFloatFrequencyData.apply(this, args);
     }
-    [dartx.getFloatTimeDomainData](array) {
-      return this.getFloatTimeDomainData(array);
+    [dartx.getFloatTimeDomainData](...args) {
+      return this.getFloatTimeDomainData.apply(this, args);
     }
   };
   dart.setSignature(web_audio.AnalyserNode, {
@@ -91182,8 +91182,8 @@
     get [dartx.sampleRate]() {
       return this.sampleRate;
     }
-    [dartx.getChannelData](channelIndex) {
-      return this.getChannelData(channelIndex);
+    [dartx.getChannelData](...args) {
+      return this.getChannelData.apply(this, args);
     }
   };
   dart.setSignature(web_audio.AudioBuffer, {
@@ -91345,59 +91345,59 @@
     get [dartx.sampleRate]() {
       return this.sampleRate;
     }
-    [dartx.createAnalyser]() {
-      return this.createAnalyser();
+    [dartx.createAnalyser](...args) {
+      return this.createAnalyser.apply(this, args);
     }
-    [dartx.createBiquadFilter]() {
-      return this.createBiquadFilter();
+    [dartx.createBiquadFilter](...args) {
+      return this.createBiquadFilter.apply(this, args);
     }
-    [dartx.createBuffer](numberOfChannels, numberOfFrames, sampleRate) {
-      return this.createBuffer(numberOfChannels, numberOfFrames, sampleRate);
+    [dartx.createBuffer](...args) {
+      return this.createBuffer.apply(this, args);
     }
-    [dartx.createBufferSource]() {
-      return this.createBufferSource();
+    [dartx.createBufferSource](...args) {
+      return this.createBufferSource.apply(this, args);
     }
-    [dartx.createChannelMerger](numberOfInputs) {
-      return this.createChannelMerger(numberOfInputs);
+    [dartx.createChannelMerger](...args) {
+      return this.createChannelMerger.apply(this, args);
     }
-    [dartx.createChannelSplitter](numberOfOutputs) {
-      return this.createChannelSplitter(numberOfOutputs);
+    [dartx.createChannelSplitter](...args) {
+      return this.createChannelSplitter.apply(this, args);
     }
-    [dartx.createConvolver]() {
-      return this.createConvolver();
+    [dartx.createConvolver](...args) {
+      return this.createConvolver.apply(this, args);
     }
-    [dartx.createDelay](maxDelayTime) {
-      return this.createDelay(maxDelayTime);
+    [dartx.createDelay](...args) {
+      return this.createDelay.apply(this, args);
     }
-    [dartx.createDynamicsCompressor]() {
-      return this.createDynamicsCompressor();
+    [dartx.createDynamicsCompressor](...args) {
+      return this.createDynamicsCompressor.apply(this, args);
     }
-    [dartx.createMediaElementSource](mediaElement) {
-      return this.createMediaElementSource(mediaElement);
+    [dartx.createMediaElementSource](...args) {
+      return this.createMediaElementSource.apply(this, args);
     }
-    [dartx.createMediaStreamDestination]() {
-      return this.createMediaStreamDestination();
+    [dartx.createMediaStreamDestination](...args) {
+      return this.createMediaStreamDestination.apply(this, args);
     }
-    [dartx.createMediaStreamSource](mediaStream) {
-      return this.createMediaStreamSource(mediaStream);
+    [dartx.createMediaStreamSource](...args) {
+      return this.createMediaStreamSource.apply(this, args);
     }
-    [dartx.createOscillator]() {
-      return this.createOscillator();
+    [dartx.createOscillator](...args) {
+      return this.createOscillator.apply(this, args);
     }
-    [dartx.createPanner]() {
-      return this.createPanner();
+    [dartx.createPanner](...args) {
+      return this.createPanner.apply(this, args);
     }
-    [dartx.createPeriodicWave](real, imag) {
-      return this.createPeriodicWave(real, imag);
+    [dartx.createPeriodicWave](...args) {
+      return this.createPeriodicWave.apply(this, args);
     }
-    [dartx.createWaveShaper]() {
-      return this.createWaveShaper();
+    [dartx.createWaveShaper](...args) {
+      return this.createWaveShaper.apply(this, args);
     }
-    [_decodeAudioData](audioData, successCallback, errorCallback) {
-      return this.decodeAudioData(audioData, successCallback, errorCallback);
+    [_decodeAudioData](...args) {
+      return this.decodeAudioData.apply(this, args);
     }
-    [dartx.startRendering]() {
-      return this.startRendering();
+    [dartx.startRendering](...args) {
+      return this.startRendering.apply(this, args);
     }
     get [dartx.onComplete]() {
       return web_audio.AudioContext.completeEvent.forTarget(this);
@@ -91518,14 +91518,14 @@
     set [dartx.speedOfSound](value) {
       this.speedOfSound = value;
     }
-    [dartx.setOrientation](x, y, z, xUp, yUp, zUp) {
-      return this.setOrientation(x, y, z, xUp, yUp, zUp);
+    [dartx.setOrientation](...args) {
+      return this.setOrientation.apply(this, args);
     }
-    [dartx.setPosition](x, y, z) {
-      return this.setPosition(x, y, z);
+    [dartx.setPosition](...args) {
+      return this.setPosition.apply(this, args);
     }
-    [dartx.setVelocity](x, y, z) {
-      return this.setVelocity(x, y, z);
+    [dartx.setVelocity](...args) {
+      return this.setVelocity.apply(this, args);
     }
   };
   dart.setSignature(web_audio.AudioListener, {
@@ -91564,23 +91564,23 @@
     set [dartx.value](value) {
       this.value = value;
     }
-    [dartx.cancelScheduledValues](startTime) {
-      return this.cancelScheduledValues(startTime);
+    [dartx.cancelScheduledValues](...args) {
+      return this.cancelScheduledValues.apply(this, args);
     }
-    [dartx.exponentialRampToValueAtTime](value, time) {
-      return this.exponentialRampToValueAtTime(value, time);
+    [dartx.exponentialRampToValueAtTime](...args) {
+      return this.exponentialRampToValueAtTime.apply(this, args);
     }
-    [dartx.linearRampToValueAtTime](value, time) {
-      return this.linearRampToValueAtTime(value, time);
+    [dartx.linearRampToValueAtTime](...args) {
+      return this.linearRampToValueAtTime.apply(this, args);
     }
-    [dartx.setTargetAtTime](target, time, timeConstant) {
-      return this.setTargetAtTime(target, time, timeConstant);
+    [dartx.setTargetAtTime](...args) {
+      return this.setTargetAtTime.apply(this, args);
     }
-    [dartx.setValueAtTime](value, time) {
-      return this.setValueAtTime(value, time);
+    [dartx.setValueAtTime](...args) {
+      return this.setValueAtTime.apply(this, args);
     }
-    [dartx.setValueCurveAtTime](values, time, duration) {
-      return this.setValueCurveAtTime(values, time, duration);
+    [dartx.setValueCurveAtTime](...args) {
+      return this.setValueCurveAtTime.apply(this, args);
     }
   };
   dart.setSignature(web_audio.AudioParam, {
@@ -91657,8 +91657,8 @@
     set [dartx.type](value) {
       this.type = value;
     }
-    [dartx.getFrequencyResponse](frequencyHz, magResponse, phaseResponse) {
-      return this.getFrequencyResponse(frequencyHz, magResponse, phaseResponse);
+    [dartx.getFrequencyResponse](...args) {
+      return this.getFrequencyResponse.apply(this, args);
     }
   };
   dart.setSignature(web_audio.BiquadFilterNode, {
@@ -91909,20 +91909,20 @@
     set [dartx.type](value) {
       this.type = value;
     }
-    [dartx.noteOff](when) {
-      return this.noteOff(when);
+    [dartx.noteOff](...args) {
+      return this.noteOff.apply(this, args);
     }
-    [dartx.noteOn](when) {
-      return this.noteOn(when);
+    [dartx.noteOn](...args) {
+      return this.noteOn.apply(this, args);
     }
-    [dartx.setPeriodicWave](periodicWave) {
-      return this.setPeriodicWave(periodicWave);
+    [dartx.setPeriodicWave](...args) {
+      return this.setPeriodicWave.apply(this, args);
     }
-    [dartx.start](when) {
-      return this.start(when);
+    [dartx.start](...args) {
+      return this.start.apply(this, args);
     }
-    [dartx.stop](when) {
-      return this.stop(when);
+    [dartx.stop](...args) {
+      return this.stop.apply(this, args);
     }
     get [dartx.onEnded]() {
       return web_audio.OscillatorNode.endedEvent.forTarget(this);
@@ -92013,14 +92013,14 @@
     set [dartx.rolloffFactor](value) {
       this.rolloffFactor = value;
     }
-    [dartx.setOrientation](x, y, z) {
-      return this.setOrientation(x, y, z);
+    [dartx.setOrientation](...args) {
+      return this.setOrientation.apply(this, args);
     }
-    [dartx.setPosition](x, y, z) {
-      return this.setPosition(x, y, z);
+    [dartx.setPosition](...args) {
+      return this.setPosition.apply(this, args);
     }
-    [dartx.setVelocity](x, y, z) {
-      return this.setVelocity(x, y, z);
+    [dartx.setVelocity](...args) {
+      return this.setVelocity.apply(this, args);
     }
   };
   dart.setSignature(web_audio.PannerNode, {
@@ -92065,8 +92065,8 @@
     get [dartx.bufferSize]() {
       return this.bufferSize;
     }
-    [dartx.setEventListener](eventListener) {
-      return this.setEventListener(eventListener);
+    [dartx.setEventListener](...args) {
+      return this.setEventListener.apply(this, args);
     }
     get [dartx.onAudioProcess]() {
       return web_audio.ScriptProcessorNode.audioProcessEvent.forTarget(this);
@@ -92297,323 +92297,323 @@
     get [dartx.drawingBufferWidth]() {
       return this.drawingBufferWidth;
     }
-    [dartx.activeTexture](texture) {
-      return this.activeTexture(texture);
+    [dartx.activeTexture](...args) {
+      return this.activeTexture.apply(this, args);
     }
-    [dartx.attachShader](program, shader) {
-      return this.attachShader(program, shader);
+    [dartx.attachShader](...args) {
+      return this.attachShader.apply(this, args);
     }
-    [dartx.bindAttribLocation](program, index, name) {
-      return this.bindAttribLocation(program, index, name);
+    [dartx.bindAttribLocation](...args) {
+      return this.bindAttribLocation.apply(this, args);
     }
-    [dartx.bindBuffer](target, buffer) {
-      return this.bindBuffer(target, buffer);
+    [dartx.bindBuffer](...args) {
+      return this.bindBuffer.apply(this, args);
     }
-    [dartx.bindFramebuffer](target, framebuffer) {
-      return this.bindFramebuffer(target, framebuffer);
+    [dartx.bindFramebuffer](...args) {
+      return this.bindFramebuffer.apply(this, args);
     }
-    [dartx.bindRenderbuffer](target, renderbuffer) {
-      return this.bindRenderbuffer(target, renderbuffer);
+    [dartx.bindRenderbuffer](...args) {
+      return this.bindRenderbuffer.apply(this, args);
     }
-    [dartx.bindTexture](target, texture) {
-      return this.bindTexture(target, texture);
+    [dartx.bindTexture](...args) {
+      return this.bindTexture.apply(this, args);
     }
-    [dartx.blendColor](red, green, blue, alpha) {
-      return this.blendColor(red, green, blue, alpha);
+    [dartx.blendColor](...args) {
+      return this.blendColor.apply(this, args);
     }
-    [dartx.blendEquation](mode) {
-      return this.blendEquation(mode);
+    [dartx.blendEquation](...args) {
+      return this.blendEquation.apply(this, args);
     }
-    [dartx.blendEquationSeparate](modeRGB, modeAlpha) {
-      return this.blendEquationSeparate(modeRGB, modeAlpha);
+    [dartx.blendEquationSeparate](...args) {
+      return this.blendEquationSeparate.apply(this, args);
     }
-    [dartx.blendFunc](sfactor, dfactor) {
-      return this.blendFunc(sfactor, dfactor);
+    [dartx.blendFunc](...args) {
+      return this.blendFunc.apply(this, args);
     }
-    [dartx.blendFuncSeparate](srcRGB, dstRGB, srcAlpha, dstAlpha) {
-      return this.blendFuncSeparate(srcRGB, dstRGB, srcAlpha, dstAlpha);
+    [dartx.blendFuncSeparate](...args) {
+      return this.blendFuncSeparate.apply(this, args);
     }
-    [dartx.bufferByteData](target, data, usage) {
-      return this.bufferData(target, data, usage);
+    [dartx.bufferByteData](...args) {
+      return this.bufferData.apply(this, args);
     }
-    [dartx.bufferData](target, data_OR_size, usage) {
-      return this.bufferData(target, data_OR_size, usage);
+    [dartx.bufferData](...args) {
+      return this.bufferData.apply(this, args);
     }
-    [dartx.bufferDataTyped](target, data, usage) {
-      return this.bufferData(target, data, usage);
+    [dartx.bufferDataTyped](...args) {
+      return this.bufferData.apply(this, args);
     }
-    [dartx.bufferSubByteData](target, offset, data) {
-      return this.bufferSubData(target, offset, data);
+    [dartx.bufferSubByteData](...args) {
+      return this.bufferSubData.apply(this, args);
     }
-    [dartx.bufferSubData](target, offset, data) {
-      return this.bufferSubData(target, offset, data);
+    [dartx.bufferSubData](...args) {
+      return this.bufferSubData.apply(this, args);
     }
-    [dartx.bufferSubDataTyped](target, offset, data) {
-      return this.bufferSubData(target, offset, data);
+    [dartx.bufferSubDataTyped](...args) {
+      return this.bufferSubData.apply(this, args);
     }
-    [dartx.checkFramebufferStatus](target) {
-      return this.checkFramebufferStatus(target);
+    [dartx.checkFramebufferStatus](...args) {
+      return this.checkFramebufferStatus.apply(this, args);
     }
-    [dartx.clear](mask) {
-      return this.clear(mask);
+    [dartx.clear](...args) {
+      return this.clear.apply(this, args);
     }
-    [dartx.clearColor](red, green, blue, alpha) {
-      return this.clearColor(red, green, blue, alpha);
+    [dartx.clearColor](...args) {
+      return this.clearColor.apply(this, args);
     }
-    [dartx.clearDepth](depth) {
-      return this.clearDepth(depth);
+    [dartx.clearDepth](...args) {
+      return this.clearDepth.apply(this, args);
     }
-    [dartx.clearStencil](s) {
-      return this.clearStencil(s);
+    [dartx.clearStencil](...args) {
+      return this.clearStencil.apply(this, args);
     }
-    [dartx.colorMask](red, green, blue, alpha) {
-      return this.colorMask(red, green, blue, alpha);
+    [dartx.colorMask](...args) {
+      return this.colorMask.apply(this, args);
     }
-    [dartx.compileShader](shader) {
-      return this.compileShader(shader);
+    [dartx.compileShader](...args) {
+      return this.compileShader.apply(this, args);
     }
-    [dartx.compressedTexImage2D](target, level, internalformat, width, height, border, data) {
-      return this.compressedTexImage2D(target, level, internalformat, width, height, border, data);
+    [dartx.compressedTexImage2D](...args) {
+      return this.compressedTexImage2D.apply(this, args);
     }
-    [dartx.compressedTexSubImage2D](target, level, xoffset, yoffset, width, height, format, data) {
-      return this.compressedTexSubImage2D(target, level, xoffset, yoffset, width, height, format, data);
+    [dartx.compressedTexSubImage2D](...args) {
+      return this.compressedTexSubImage2D.apply(this, args);
     }
-    [dartx.copyTexImage2D](target, level, internalformat, x, y, width, height, border) {
-      return this.copyTexImage2D(target, level, internalformat, x, y, width, height, border);
+    [dartx.copyTexImage2D](...args) {
+      return this.copyTexImage2D.apply(this, args);
     }
-    [dartx.copyTexSubImage2D](target, level, xoffset, yoffset, x, y, width, height) {
-      return this.copyTexSubImage2D(target, level, xoffset, yoffset, x, y, width, height);
+    [dartx.copyTexSubImage2D](...args) {
+      return this.copyTexSubImage2D.apply(this, args);
     }
-    [dartx.createBuffer]() {
-      return this.createBuffer();
+    [dartx.createBuffer](...args) {
+      return this.createBuffer.apply(this, args);
     }
-    [dartx.createFramebuffer]() {
-      return this.createFramebuffer();
+    [dartx.createFramebuffer](...args) {
+      return this.createFramebuffer.apply(this, args);
     }
-    [dartx.createProgram]() {
-      return this.createProgram();
+    [dartx.createProgram](...args) {
+      return this.createProgram.apply(this, args);
     }
-    [dartx.createRenderbuffer]() {
-      return this.createRenderbuffer();
+    [dartx.createRenderbuffer](...args) {
+      return this.createRenderbuffer.apply(this, args);
     }
-    [dartx.createShader](type) {
-      return this.createShader(type);
+    [dartx.createShader](...args) {
+      return this.createShader.apply(this, args);
     }
-    [dartx.createTexture]() {
-      return this.createTexture();
+    [dartx.createTexture](...args) {
+      return this.createTexture.apply(this, args);
     }
-    [dartx.cullFace](mode) {
-      return this.cullFace(mode);
+    [dartx.cullFace](...args) {
+      return this.cullFace.apply(this, args);
     }
-    [dartx.deleteBuffer](buffer) {
-      return this.deleteBuffer(buffer);
+    [dartx.deleteBuffer](...args) {
+      return this.deleteBuffer.apply(this, args);
     }
-    [dartx.deleteFramebuffer](framebuffer) {
-      return this.deleteFramebuffer(framebuffer);
+    [dartx.deleteFramebuffer](...args) {
+      return this.deleteFramebuffer.apply(this, args);
     }
-    [dartx.deleteProgram](program) {
-      return this.deleteProgram(program);
+    [dartx.deleteProgram](...args) {
+      return this.deleteProgram.apply(this, args);
     }
-    [dartx.deleteRenderbuffer](renderbuffer) {
-      return this.deleteRenderbuffer(renderbuffer);
+    [dartx.deleteRenderbuffer](...args) {
+      return this.deleteRenderbuffer.apply(this, args);
     }
-    [dartx.deleteShader](shader) {
-      return this.deleteShader(shader);
+    [dartx.deleteShader](...args) {
+      return this.deleteShader.apply(this, args);
     }
-    [dartx.deleteTexture](texture) {
-      return this.deleteTexture(texture);
+    [dartx.deleteTexture](...args) {
+      return this.deleteTexture.apply(this, args);
     }
-    [dartx.depthFunc](func) {
-      return this.depthFunc(func);
+    [dartx.depthFunc](...args) {
+      return this.depthFunc.apply(this, args);
     }
-    [dartx.depthMask](flag) {
-      return this.depthMask(flag);
+    [dartx.depthMask](...args) {
+      return this.depthMask.apply(this, args);
     }
-    [dartx.depthRange](zNear, zFar) {
-      return this.depthRange(zNear, zFar);
+    [dartx.depthRange](...args) {
+      return this.depthRange.apply(this, args);
     }
-    [dartx.detachShader](program, shader) {
-      return this.detachShader(program, shader);
+    [dartx.detachShader](...args) {
+      return this.detachShader.apply(this, args);
     }
-    [dartx.disable](cap) {
-      return this.disable(cap);
+    [dartx.disable](...args) {
+      return this.disable.apply(this, args);
     }
-    [dartx.disableVertexAttribArray](index) {
-      return this.disableVertexAttribArray(index);
+    [dartx.disableVertexAttribArray](...args) {
+      return this.disableVertexAttribArray.apply(this, args);
     }
-    [dartx.drawArrays](mode, first, count) {
-      return this.drawArrays(mode, first, count);
+    [dartx.drawArrays](...args) {
+      return this.drawArrays.apply(this, args);
     }
-    [dartx.drawElements](mode, count, type, offset) {
-      return this.drawElements(mode, count, type, offset);
+    [dartx.drawElements](...args) {
+      return this.drawElements.apply(this, args);
     }
-    [dartx.enable](cap) {
-      return this.enable(cap);
+    [dartx.enable](...args) {
+      return this.enable.apply(this, args);
     }
-    [dartx.enableVertexAttribArray](index) {
-      return this.enableVertexAttribArray(index);
+    [dartx.enableVertexAttribArray](...args) {
+      return this.enableVertexAttribArray.apply(this, args);
     }
-    [dartx.finish]() {
-      return this.finish();
+    [dartx.finish](...args) {
+      return this.finish.apply(this, args);
     }
-    [dartx.flush]() {
-      return this.flush();
+    [dartx.flush](...args) {
+      return this.flush.apply(this, args);
     }
-    [dartx.framebufferRenderbuffer](target, attachment, renderbuffertarget, renderbuffer) {
-      return this.framebufferRenderbuffer(target, attachment, renderbuffertarget, renderbuffer);
+    [dartx.framebufferRenderbuffer](...args) {
+      return this.framebufferRenderbuffer.apply(this, args);
     }
-    [dartx.framebufferTexture2D](target, attachment, textarget, texture, level) {
-      return this.framebufferTexture2D(target, attachment, textarget, texture, level);
+    [dartx.framebufferTexture2D](...args) {
+      return this.framebufferTexture2D.apply(this, args);
     }
-    [dartx.frontFace](mode) {
-      return this.frontFace(mode);
+    [dartx.frontFace](...args) {
+      return this.frontFace.apply(this, args);
     }
-    [dartx.generateMipmap](target) {
-      return this.generateMipmap(target);
+    [dartx.generateMipmap](...args) {
+      return this.generateMipmap.apply(this, args);
     }
-    [dartx.getActiveAttrib](program, index) {
-      return this.getActiveAttrib(program, index);
+    [dartx.getActiveAttrib](...args) {
+      return this.getActiveAttrib.apply(this, args);
     }
-    [dartx.getActiveUniform](program, index) {
-      return this.getActiveUniform(program, index);
+    [dartx.getActiveUniform](...args) {
+      return this.getActiveUniform.apply(this, args);
     }
-    [dartx.getAttachedShaders](program) {
-      return this.getAttachedShaders(program);
+    [dartx.getAttachedShaders](...args) {
+      return this.getAttachedShaders.apply(this, args);
     }
-    [dartx.getAttribLocation](program, name) {
-      return this.getAttribLocation(program, name);
+    [dartx.getAttribLocation](...args) {
+      return this.getAttribLocation.apply(this, args);
     }
-    [dartx.getBufferParameter](target, pname) {
-      return this.getBufferParameter(target, pname);
+    [dartx.getBufferParameter](...args) {
+      return this.getBufferParameter.apply(this, args);
     }
     [dartx.getContextAttributes]() {
       return web_gl.ContextAttributes._check(html_common.convertNativeToDart_ContextAttributes(this[_getContextAttributes_1$]()));
     }
-    [_getContextAttributes_1$]() {
-      return this.getContextAttributes();
+    [_getContextAttributes_1$](...args) {
+      return this.getContextAttributes.apply(this, args);
     }
-    [dartx.getError]() {
-      return this.getError();
+    [dartx.getError](...args) {
+      return this.getError.apply(this, args);
     }
-    [dartx.getExtension](name) {
-      return this.getExtension(name);
+    [dartx.getExtension](...args) {
+      return this.getExtension.apply(this, args);
     }
-    [dartx.getFramebufferAttachmentParameter](target, attachment, pname) {
-      return this.getFramebufferAttachmentParameter(target, attachment, pname);
+    [dartx.getFramebufferAttachmentParameter](...args) {
+      return this.getFramebufferAttachmentParameter.apply(this, args);
     }
-    [dartx.getParameter](pname) {
-      return this.getParameter(pname);
+    [dartx.getParameter](...args) {
+      return this.getParameter.apply(this, args);
     }
-    [dartx.getProgramInfoLog](program) {
-      return this.getProgramInfoLog(program);
+    [dartx.getProgramInfoLog](...args) {
+      return this.getProgramInfoLog.apply(this, args);
     }
-    [dartx.getProgramParameter](program, pname) {
-      return this.getProgramParameter(program, pname);
+    [dartx.getProgramParameter](...args) {
+      return this.getProgramParameter.apply(this, args);
     }
-    [dartx.getRenderbufferParameter](target, pname) {
-      return this.getRenderbufferParameter(target, pname);
+    [dartx.getRenderbufferParameter](...args) {
+      return this.getRenderbufferParameter.apply(this, args);
     }
-    [dartx.getShaderInfoLog](shader) {
-      return this.getShaderInfoLog(shader);
+    [dartx.getShaderInfoLog](...args) {
+      return this.getShaderInfoLog.apply(this, args);
     }
-    [dartx.getShaderParameter](shader, pname) {
-      return this.getShaderParameter(shader, pname);
+    [dartx.getShaderParameter](...args) {
+      return this.getShaderParameter.apply(this, args);
     }
-    [dartx.getShaderPrecisionFormat](shadertype, precisiontype) {
-      return this.getShaderPrecisionFormat(shadertype, precisiontype);
+    [dartx.getShaderPrecisionFormat](...args) {
+      return this.getShaderPrecisionFormat.apply(this, args);
     }
-    [dartx.getShaderSource](shader) {
-      return this.getShaderSource(shader);
+    [dartx.getShaderSource](...args) {
+      return this.getShaderSource.apply(this, args);
     }
-    [dartx.getSupportedExtensions]() {
-      return this.getSupportedExtensions();
+    [dartx.getSupportedExtensions](...args) {
+      return this.getSupportedExtensions.apply(this, args);
     }
-    [dartx.getTexParameter](target, pname) {
-      return this.getTexParameter(target, pname);
+    [dartx.getTexParameter](...args) {
+      return this.getTexParameter.apply(this, args);
     }
-    [dartx.getUniform](program, location) {
-      return this.getUniform(program, location);
+    [dartx.getUniform](...args) {
+      return this.getUniform.apply(this, args);
     }
-    [dartx.getUniformLocation](program, name) {
-      return this.getUniformLocation(program, name);
+    [dartx.getUniformLocation](...args) {
+      return this.getUniformLocation.apply(this, args);
     }
-    [dartx.getVertexAttrib](index, pname) {
-      return this.getVertexAttrib(index, pname);
+    [dartx.getVertexAttrib](...args) {
+      return this.getVertexAttrib.apply(this, args);
     }
-    [dartx.getVertexAttribOffset](index, pname) {
-      return this.getVertexAttribOffset(index, pname);
+    [dartx.getVertexAttribOffset](...args) {
+      return this.getVertexAttribOffset.apply(this, args);
     }
-    [dartx.hint](target, mode) {
-      return this.hint(target, mode);
+    [dartx.hint](...args) {
+      return this.hint.apply(this, args);
     }
-    [dartx.isBuffer](buffer) {
-      return this.isBuffer(buffer);
+    [dartx.isBuffer](...args) {
+      return this.isBuffer.apply(this, args);
     }
-    [dartx.isContextLost]() {
-      return this.isContextLost();
+    [dartx.isContextLost](...args) {
+      return this.isContextLost.apply(this, args);
     }
-    [dartx.isEnabled](cap) {
-      return this.isEnabled(cap);
+    [dartx.isEnabled](...args) {
+      return this.isEnabled.apply(this, args);
     }
-    [dartx.isFramebuffer](framebuffer) {
-      return this.isFramebuffer(framebuffer);
+    [dartx.isFramebuffer](...args) {
+      return this.isFramebuffer.apply(this, args);
     }
-    [dartx.isProgram](program) {
-      return this.isProgram(program);
+    [dartx.isProgram](...args) {
+      return this.isProgram.apply(this, args);
     }
-    [dartx.isRenderbuffer](renderbuffer) {
-      return this.isRenderbuffer(renderbuffer);
+    [dartx.isRenderbuffer](...args) {
+      return this.isRenderbuffer.apply(this, args);
     }
-    [dartx.isShader](shader) {
-      return this.isShader(shader);
+    [dartx.isShader](...args) {
+      return this.isShader.apply(this, args);
     }
-    [dartx.isTexture](texture) {
-      return this.isTexture(texture);
+    [dartx.isTexture](...args) {
+      return this.isTexture.apply(this, args);
     }
-    [dartx.lineWidth](width) {
-      return this.lineWidth(width);
+    [dartx.lineWidth](...args) {
+      return this.lineWidth.apply(this, args);
     }
-    [dartx.linkProgram](program) {
-      return this.linkProgram(program);
+    [dartx.linkProgram](...args) {
+      return this.linkProgram.apply(this, args);
     }
-    [dartx.pixelStorei](pname, param) {
-      return this.pixelStorei(pname, param);
+    [dartx.pixelStorei](...args) {
+      return this.pixelStorei.apply(this, args);
     }
-    [dartx.polygonOffset](factor, units) {
-      return this.polygonOffset(factor, units);
+    [dartx.polygonOffset](...args) {
+      return this.polygonOffset.apply(this, args);
     }
-    [dartx.readPixels](x, y, width, height, format, type, pixels) {
-      return this.readPixels(x, y, width, height, format, type, pixels);
+    [dartx.readPixels](...args) {
+      return this.readPixels.apply(this, args);
     }
-    [dartx.renderbufferStorage](target, internalformat, width, height) {
-      return this.renderbufferStorage(target, internalformat, width, height);
+    [dartx.renderbufferStorage](...args) {
+      return this.renderbufferStorage.apply(this, args);
     }
-    [dartx.sampleCoverage](value, invert) {
-      return this.sampleCoverage(value, invert);
+    [dartx.sampleCoverage](...args) {
+      return this.sampleCoverage.apply(this, args);
     }
-    [dartx.scissor](x, y, width, height) {
-      return this.scissor(x, y, width, height);
+    [dartx.scissor](...args) {
+      return this.scissor.apply(this, args);
     }
-    [dartx.shaderSource](shader, string) {
-      return this.shaderSource(shader, string);
+    [dartx.shaderSource](...args) {
+      return this.shaderSource.apply(this, args);
     }
-    [dartx.stencilFunc](func, ref, mask) {
-      return this.stencilFunc(func, ref, mask);
+    [dartx.stencilFunc](...args) {
+      return this.stencilFunc.apply(this, args);
     }
-    [dartx.stencilFuncSeparate](face, func, ref, mask) {
-      return this.stencilFuncSeparate(face, func, ref, mask);
+    [dartx.stencilFuncSeparate](...args) {
+      return this.stencilFuncSeparate.apply(this, args);
     }
-    [dartx.stencilMask](mask) {
-      return this.stencilMask(mask);
+    [dartx.stencilMask](...args) {
+      return this.stencilMask.apply(this, args);
     }
-    [dartx.stencilMaskSeparate](face, mask) {
-      return this.stencilMaskSeparate(face, mask);
+    [dartx.stencilMaskSeparate](...args) {
+      return this.stencilMaskSeparate.apply(this, args);
     }
-    [dartx.stencilOp](fail, zfail, zpass) {
-      return this.stencilOp(fail, zfail, zpass);
+    [dartx.stencilOp](...args) {
+      return this.stencilOp.apply(this, args);
     }
-    [dartx.stencilOpSeparate](face, fail, zfail, zpass) {
-      return this.stencilOpSeparate(face, fail, zfail, zpass);
+    [dartx.stencilOpSeparate](...args) {
+      return this.stencilOpSeparate.apply(this, args);
     }
     [dartx.texImage2D](target, level, internalformat, format_OR_width, height_OR_type, border_OR_canvas_OR_image_OR_pixels_OR_video, format, type, pixels) {
       if (format === void 0) format = null;
@@ -92642,43 +92642,43 @@
       }
       dart.throw(new core.ArgumentError("Incorrect number or type of arguments"));
     }
-    [_texImage2D_1](target, level, internalformat, width, height, border, format, type, pixels) {
-      return this.texImage2D(target, level, internalformat, width, height, border, format, type, pixels);
+    [_texImage2D_1](...args) {
+      return this.texImage2D.apply(this, args);
     }
-    [_texImage2D_2](target, level, internalformat, format, type, pixels) {
-      return this.texImage2D(target, level, internalformat, format, type, pixels);
+    [_texImage2D_2](...args) {
+      return this.texImage2D.apply(this, args);
     }
-    [_texImage2D_3](target, level, internalformat, format, type, image) {
-      return this.texImage2D(target, level, internalformat, format, type, image);
+    [_texImage2D_3](...args) {
+      return this.texImage2D.apply(this, args);
     }
-    [_texImage2D_4](target, level, internalformat, format, type, canvas) {
-      return this.texImage2D(target, level, internalformat, format, type, canvas);
+    [_texImage2D_4](...args) {
+      return this.texImage2D.apply(this, args);
     }
-    [_texImage2D_5](target, level, internalformat, format, type, video) {
-      return this.texImage2D(target, level, internalformat, format, type, video);
+    [_texImage2D_5](...args) {
+      return this.texImage2D.apply(this, args);
     }
-    [dartx.texImage2DCanvas](target, level, internalformat, format, type, canvas) {
-      return this.texImage2D(target, level, internalformat, format, type, canvas);
+    [dartx.texImage2DCanvas](...args) {
+      return this.texImage2D.apply(this, args);
     }
-    [dartx.texImage2DImage](target, level, internalformat, format, type, image) {
-      return this.texImage2D(target, level, internalformat, format, type, image);
+    [dartx.texImage2DImage](...args) {
+      return this.texImage2D.apply(this, args);
     }
     [dartx.texImage2DImageData](target, level, internalformat, format, type, pixels) {
       let pixels_1 = html_common.convertDartToNative_ImageData(pixels);
       this[_texImage2DImageData_1](target, level, internalformat, format, type, pixels_1);
       return;
     }
-    [_texImage2DImageData_1](target, level, internalformat, format, type, pixels) {
-      return this.texImage2D(target, level, internalformat, format, type, pixels);
+    [_texImage2DImageData_1](...args) {
+      return this.texImage2D.apply(this, args);
     }
-    [dartx.texImage2DVideo](target, level, internalformat, format, type, video) {
-      return this.texImage2D(target, level, internalformat, format, type, video);
+    [dartx.texImage2DVideo](...args) {
+      return this.texImage2D.apply(this, args);
     }
-    [dartx.texParameterf](target, pname, param) {
-      return this.texParameterf(target, pname, param);
+    [dartx.texParameterf](...args) {
+      return this.texParameterf.apply(this, args);
     }
-    [dartx.texParameteri](target, pname, param) {
-      return this.texParameteri(target, pname, param);
+    [dartx.texParameteri](...args) {
+      return this.texParameteri.apply(this, args);
     }
     [dartx.texSubImage2D](target, level, xoffset, yoffset, format_OR_width, height_OR_type, canvas_OR_format_OR_image_OR_pixels_OR_video, type, pixels) {
       if (type === void 0) type = null;
@@ -92706,142 +92706,142 @@
       }
       dart.throw(new core.ArgumentError("Incorrect number or type of arguments"));
     }
-    [_texSubImage2D_1](target, level, xoffset, yoffset, width, height, format, type, pixels) {
-      return this.texSubImage2D(target, level, xoffset, yoffset, width, height, format, type, pixels);
+    [_texSubImage2D_1](...args) {
+      return this.texSubImage2D.apply(this, args);
     }
-    [_texSubImage2D_2](target, level, xoffset, yoffset, format, type, pixels) {
-      return this.texSubImage2D(target, level, xoffset, yoffset, format, type, pixels);
+    [_texSubImage2D_2](...args) {
+      return this.texSubImage2D.apply(this, args);
     }
-    [_texSubImage2D_3](target, level, xoffset, yoffset, format, type, image) {
-      return this.texSubImage2D(target, level, xoffset, yoffset, format, type, image);
+    [_texSubImage2D_3](...args) {
+      return this.texSubImage2D.apply(this, args);
     }
-    [_texSubImage2D_4](target, level, xoffset, yoffset, format, type, canvas) {
-      return this.texSubImage2D(target, level, xoffset, yoffset, format, type, canvas);
+    [_texSubImage2D_4](...args) {
+      return this.texSubImage2D.apply(this, args);
     }
-    [_texSubImage2D_5](target, level, xoffset, yoffset, format, type, video) {
-      return this.texSubImage2D(target, level, xoffset, yoffset, format, type, video);
+    [_texSubImage2D_5](...args) {
+      return this.texSubImage2D.apply(this, args);
     }
-    [dartx.texSubImage2DCanvas](target, level, xoffset, yoffset, format, type, canvas) {
-      return this.texSubImage2D(target, level, xoffset, yoffset, format, type, canvas);
+    [dartx.texSubImage2DCanvas](...args) {
+      return this.texSubImage2D.apply(this, args);
     }
-    [dartx.texSubImage2DImage](target, level, xoffset, yoffset, format, type, image) {
-      return this.texSubImage2D(target, level, xoffset, yoffset, format, type, image);
+    [dartx.texSubImage2DImage](...args) {
+      return this.texSubImage2D.apply(this, args);
     }
     [dartx.texSubImage2DImageData](target, level, xoffset, yoffset, format, type, pixels) {
       let pixels_1 = html_common.convertDartToNative_ImageData(pixels);
       this[_texSubImage2DImageData_1](target, level, xoffset, yoffset, format, type, pixels_1);
       return;
     }
-    [_texSubImage2DImageData_1](target, level, xoffset, yoffset, format, type, pixels) {
-      return this.texSubImage2D(target, level, xoffset, yoffset, format, type, pixels);
+    [_texSubImage2DImageData_1](...args) {
+      return this.texSubImage2D.apply(this, args);
     }
-    [dartx.texSubImage2DVideo](target, level, xoffset, yoffset, format, type, video) {
-      return this.texSubImage2D(target, level, xoffset, yoffset, format, type, video);
+    [dartx.texSubImage2DVideo](...args) {
+      return this.texSubImage2D.apply(this, args);
     }
-    [dartx.uniform1f](location, x) {
-      return this.uniform1f(location, x);
+    [dartx.uniform1f](...args) {
+      return this.uniform1f.apply(this, args);
     }
-    [dartx.uniform1fv](location, v) {
-      return this.uniform1fv(location, v);
+    [dartx.uniform1fv](...args) {
+      return this.uniform1fv.apply(this, args);
     }
-    [dartx.uniform1i](location, x) {
-      return this.uniform1i(location, x);
+    [dartx.uniform1i](...args) {
+      return this.uniform1i.apply(this, args);
     }
-    [dartx.uniform1iv](location, v) {
-      return this.uniform1iv(location, v);
+    [dartx.uniform1iv](...args) {
+      return this.uniform1iv.apply(this, args);
     }
-    [dartx.uniform2f](location, x, y) {
-      return this.uniform2f(location, x, y);
+    [dartx.uniform2f](...args) {
+      return this.uniform2f.apply(this, args);
     }
-    [dartx.uniform2fv](location, v) {
-      return this.uniform2fv(location, v);
+    [dartx.uniform2fv](...args) {
+      return this.uniform2fv.apply(this, args);
     }
-    [dartx.uniform2i](location, x, y) {
-      return this.uniform2i(location, x, y);
+    [dartx.uniform2i](...args) {
+      return this.uniform2i.apply(this, args);
     }
-    [dartx.uniform2iv](location, v) {
-      return this.uniform2iv(location, v);
+    [dartx.uniform2iv](...args) {
+      return this.uniform2iv.apply(this, args);
     }
-    [dartx.uniform3f](location, x, y, z) {
-      return this.uniform3f(location, x, y, z);
+    [dartx.uniform3f](...args) {
+      return this.uniform3f.apply(this, args);
     }
-    [dartx.uniform3fv](location, v) {
-      return this.uniform3fv(location, v);
+    [dartx.uniform3fv](...args) {
+      return this.uniform3fv.apply(this, args);
     }
-    [dartx.uniform3i](location, x, y, z) {
-      return this.uniform3i(location, x, y, z);
+    [dartx.uniform3i](...args) {
+      return this.uniform3i.apply(this, args);
     }
-    [dartx.uniform3iv](location, v) {
-      return this.uniform3iv(location, v);
+    [dartx.uniform3iv](...args) {
+      return this.uniform3iv.apply(this, args);
     }
-    [dartx.uniform4f](location, x, y, z, w) {
-      return this.uniform4f(location, x, y, z, w);
+    [dartx.uniform4f](...args) {
+      return this.uniform4f.apply(this, args);
     }
-    [dartx.uniform4fv](location, v) {
-      return this.uniform4fv(location, v);
+    [dartx.uniform4fv](...args) {
+      return this.uniform4fv.apply(this, args);
     }
-    [dartx.uniform4i](location, x, y, z, w) {
-      return this.uniform4i(location, x, y, z, w);
+    [dartx.uniform4i](...args) {
+      return this.uniform4i.apply(this, args);
     }
-    [dartx.uniform4iv](location, v) {
-      return this.uniform4iv(location, v);
+    [dartx.uniform4iv](...args) {
+      return this.uniform4iv.apply(this, args);
     }
-    [dartx.uniformMatrix2fv](location, transpose, array) {
-      return this.uniformMatrix2fv(location, transpose, array);
+    [dartx.uniformMatrix2fv](...args) {
+      return this.uniformMatrix2fv.apply(this, args);
     }
-    [dartx.uniformMatrix3fv](location, transpose, array) {
-      return this.uniformMatrix3fv(location, transpose, array);
+    [dartx.uniformMatrix3fv](...args) {
+      return this.uniformMatrix3fv.apply(this, args);
     }
-    [dartx.uniformMatrix4fv](location, transpose, array) {
-      return this.uniformMatrix4fv(location, transpose, array);
+    [dartx.uniformMatrix4fv](...args) {
+      return this.uniformMatrix4fv.apply(this, args);
     }
-    [dartx.useProgram](program) {
-      return this.useProgram(program);
+    [dartx.useProgram](...args) {
+      return this.useProgram.apply(this, args);
     }
-    [dartx.validateProgram](program) {
-      return this.validateProgram(program);
+    [dartx.validateProgram](...args) {
+      return this.validateProgram.apply(this, args);
     }
-    [dartx.vertexAttrib1f](indx, x) {
-      return this.vertexAttrib1f(indx, x);
+    [dartx.vertexAttrib1f](...args) {
+      return this.vertexAttrib1f.apply(this, args);
     }
-    [dartx.vertexAttrib1fv](indx, values) {
-      return this.vertexAttrib1fv(indx, values);
+    [dartx.vertexAttrib1fv](...args) {
+      return this.vertexAttrib1fv.apply(this, args);
     }
-    [dartx.vertexAttrib2f](indx, x, y) {
-      return this.vertexAttrib2f(indx, x, y);
+    [dartx.vertexAttrib2f](...args) {
+      return this.vertexAttrib2f.apply(this, args);
     }
-    [dartx.vertexAttrib2fv](indx, values) {
-      return this.vertexAttrib2fv(indx, values);
+    [dartx.vertexAttrib2fv](...args) {
+      return this.vertexAttrib2fv.apply(this, args);
     }
-    [dartx.vertexAttrib3f](indx, x, y, z) {
-      return this.vertexAttrib3f(indx, x, y, z);
+    [dartx.vertexAttrib3f](...args) {
+      return this.vertexAttrib3f.apply(this, args);
     }
-    [dartx.vertexAttrib3fv](indx, values) {
-      return this.vertexAttrib3fv(indx, values);
+    [dartx.vertexAttrib3fv](...args) {
+      return this.vertexAttrib3fv.apply(this, args);
     }
-    [dartx.vertexAttrib4f](indx, x, y, z, w) {
-      return this.vertexAttrib4f(indx, x, y, z, w);
+    [dartx.vertexAttrib4f](...args) {
+      return this.vertexAttrib4f.apply(this, args);
     }
-    [dartx.vertexAttrib4fv](indx, values) {
-      return this.vertexAttrib4fv(indx, values);
+    [dartx.vertexAttrib4fv](...args) {
+      return this.vertexAttrib4fv.apply(this, args);
     }
-    [dartx.vertexAttribPointer](indx, size, type, normalized, stride, offset) {
-      return this.vertexAttribPointer(indx, size, type, normalized, stride, offset);
+    [dartx.vertexAttribPointer](...args) {
+      return this.vertexAttribPointer.apply(this, args);
     }
-    [dartx.viewport](x, y, width, height) {
-      return this.viewport(x, y, width, height);
+    [dartx.viewport](...args) {
+      return this.viewport.apply(this, args);
     }
-    [dartx.texImage2DUntyped](targetTexture, levelOfDetail, internalFormat, format, type, data) {
-      return this.texImage2D(targetTexture, levelOfDetail, internalFormat, format, type, data);
+    [dartx.texImage2DUntyped](...args) {
+      return this.texImage2D.apply(this, args);
     }
-    [dartx.texImage2DTyped](targetTexture, levelOfDetail, internalFormat, width, height, border, format, type, data) {
-      return this.texImage2D(targetTexture, levelOfDetail, internalFormat, width, height, border, format, type, data);
+    [dartx.texImage2DTyped](...args) {
+      return this.texImage2D.apply(this, args);
     }
-    [dartx.texSubImage2DUntyped](targetTexture, levelOfDetail, xOffset, yOffset, format, type, data) {
-      return this.texSubImage2D(targetTexture, levelOfDetail, xOffset, yOffset, format, type, data);
+    [dartx.texSubImage2DUntyped](...args) {
+      return this.texSubImage2D.apply(this, args);
     }
-    [dartx.texSubImage2DTyped](targetTexture, levelOfDetail, xOffset, yOffset, width, height, border, format, type, data) {
-      return this.texSubImage2D(targetTexture, levelOfDetail, xOffset, yOffset, width, height, border, format, type, data);
+    [dartx.texSubImage2DTyped](...args) {
+      return this.texSubImage2D.apply(this, args);
     }
   };
   web_gl.RenderingContext[dart.implements] = () => [html$.CanvasRenderingContext];
@@ -93962,14 +93962,14 @@
     static _() {
       dart.throw(new core.UnsupportedError("Not supported"));
     }
-    [dartx.drawArraysInstancedAngle](mode, first, count, primcount) {
-      return this.drawArraysInstancedANGLE(mode, first, count, primcount);
+    [dartx.drawArraysInstancedAngle](...args) {
+      return this.drawArraysInstancedANGLE.apply(this, args);
     }
-    [dartx.drawElementsInstancedAngle](mode, count, type, offset, primcount) {
-      return this.drawElementsInstancedANGLE(mode, count, type, offset, primcount);
+    [dartx.drawElementsInstancedAngle](...args) {
+      return this.drawElementsInstancedANGLE.apply(this, args);
     }
-    [dartx.vertexAttribDivisorAngle](index, divisor) {
-      return this.vertexAttribDivisorANGLE(index, divisor);
+    [dartx.vertexAttribDivisorAngle](...args) {
+      return this.vertexAttribDivisorANGLE.apply(this, args);
     }
   };
   dart.setSignature(web_gl.AngleInstancedArrays, {
@@ -94165,8 +94165,8 @@
     static _() {
       dart.throw(new core.UnsupportedError("Not supported"));
     }
-    [dartx.getTranslatedShaderSource](shader) {
-      return this.getTranslatedShaderSource(shader);
+    [dartx.getTranslatedShaderSource](...args) {
+      return this.getTranslatedShaderSource.apply(this, args);
     }
   };
   dart.setSignature(web_gl.DebugShaders, {
@@ -94192,8 +94192,8 @@
     static _() {
       dart.throw(new core.UnsupportedError("Not supported"));
     }
-    [dartx.drawBuffersWebgl](buffers) {
-      return this.drawBuffersWEBGL(buffers);
+    [dartx.drawBuffersWebgl](...args) {
+      return this.drawBuffersWEBGL.apply(this, args);
     }
   };
   dart.setSignature(web_gl.DrawBuffers, {
@@ -94336,11 +94336,11 @@
     static _() {
       dart.throw(new core.UnsupportedError("Not supported"));
     }
-    [dartx.loseContext]() {
-      return this.loseContext();
+    [dartx.loseContext](...args) {
+      return this.loseContext.apply(this, args);
     }
-    [dartx.restoreContext]() {
-      return this.restoreContext();
+    [dartx.restoreContext](...args) {
+      return this.restoreContext.apply(this, args);
     }
   };
   dart.setSignature(web_gl.LoseContext, {
@@ -94409,17 +94409,17 @@
     static _() {
       dart.throw(new core.UnsupportedError("Not supported"));
     }
-    [dartx.bindVertexArray](arrayObject) {
-      return this.bindVertexArrayOES(arrayObject);
+    [dartx.bindVertexArray](...args) {
+      return this.bindVertexArrayOES.apply(this, args);
     }
-    [dartx.createVertexArray]() {
-      return this.createVertexArrayOES();
+    [dartx.createVertexArray](...args) {
+      return this.createVertexArrayOES.apply(this, args);
     }
-    [dartx.deleteVertexArray](arrayObject) {
-      return this.deleteVertexArrayOES(arrayObject);
+    [dartx.deleteVertexArray](...args) {
+      return this.deleteVertexArrayOES.apply(this, args);
     }
-    [dartx.isVertexArray](arrayObject) {
-      return this.isVertexArrayOES(arrayObject);
+    [dartx.isVertexArray](...args) {
+      return this.isVertexArrayOES.apply(this, args);
     }
   };
   dart.setSignature(web_gl.OesVertexArrayObject, {
@@ -94544,14 +94544,14 @@
     get [dartx.version]() {
       return this.version;
     }
-    [dartx.changeVersion](oldVersion, newVersion, callback, errorCallback, successCallback) {
-      return this.changeVersion(oldVersion, newVersion, callback, errorCallback, successCallback);
+    [dartx.changeVersion](...args) {
+      return this.changeVersion.apply(this, args);
     }
-    [dartx.readTransaction](callback, errorCallback, successCallback) {
-      return this.readTransaction(callback, errorCallback, successCallback);
+    [dartx.readTransaction](...args) {
+      return this.readTransaction.apply(this, args);
     }
-    [dartx.transaction](callback, errorCallback, successCallback) {
-      return this.transaction(callback, errorCallback, successCallback);
+    [dartx.transaction](...args) {
+      return this.transaction.apply(this, args);
     }
   };
   dart.setSignature(web_sql.SqlDatabase, {
@@ -94691,8 +94691,8 @@
     [dartx.item](index) {
       return html_common.convertNativeToDart_Dictionary(this[_item_1](index));
     }
-    [_item_1](index) {
-      return this.item(index);
+    [_item_1](...args) {
+      return this.item.apply(this, args);
     }
   };
   web_sql.SqlResultSetRowList[dart.implements] = () => [ListOfMap()];
@@ -94721,8 +94721,8 @@
     static _() {
       dart.throw(new core.UnsupportedError("Not supported"));
     }
-    [dartx.executeSql](sqlStatement, arguments$, callback, errorCallback) {
-      return this.executeSql(sqlStatement, arguments$, callback, errorCallback);
+    [dartx.executeSql](...args) {
+      return this.executeSql.apply(this, args);
     }
   };
   dart.setSignature(web_sql.SqlTransaction, {
diff --git a/pkg/dev_compiler/lib/js/es6/dart_sdk.js b/pkg/dev_compiler/lib/js/es6/dart_sdk.js
index cd79fe3..04625a8 100644
--- a/pkg/dev_compiler/lib/js/es6/dart_sdk.js
+++ b/pkg/dev_compiler/lib/js/es6/dart_sdk.js
@@ -15607,113 +15607,113 @@
     if (endian === void 0) endian = typed_data.Endianness.BIG_ENDIAN;
     return this[_getFloat32](byteOffset, dart.equals(typed_data.Endianness.LITTLE_ENDIAN, endian));
   }
-  [_getFloat32](byteOffset, littleEndian) {
-    return this.getFloat32(byteOffset, littleEndian);
+  [_getFloat32](...args) {
+    return this.getFloat32.apply(this, args);
   }
   [dartx.getFloat64](byteOffset, endian) {
     if (endian === void 0) endian = typed_data.Endianness.BIG_ENDIAN;
     return this[_getFloat64](byteOffset, dart.equals(typed_data.Endianness.LITTLE_ENDIAN, endian));
   }
-  [_getFloat64](byteOffset, littleEndian) {
-    return this.getFloat64(byteOffset, littleEndian);
+  [_getFloat64](...args) {
+    return this.getFloat64.apply(this, args);
   }
   [dartx.getInt16](byteOffset, endian) {
     if (endian === void 0) endian = typed_data.Endianness.BIG_ENDIAN;
     return this[_getInt16](byteOffset, dart.equals(typed_data.Endianness.LITTLE_ENDIAN, endian));
   }
-  [_getInt16](byteOffset, littleEndian) {
-    return this.getInt16(byteOffset, littleEndian);
+  [_getInt16](...args) {
+    return this.getInt16.apply(this, args);
   }
   [dartx.getInt32](byteOffset, endian) {
     if (endian === void 0) endian = typed_data.Endianness.BIG_ENDIAN;
     return this[_getInt32](byteOffset, dart.equals(typed_data.Endianness.LITTLE_ENDIAN, endian));
   }
-  [_getInt32](byteOffset, littleEndian) {
-    return this.getInt32(byteOffset, littleEndian);
+  [_getInt32](...args) {
+    return this.getInt32.apply(this, args);
   }
   [dartx.getInt64](byteOffset, endian) {
     if (endian === void 0) endian = typed_data.Endianness.BIG_ENDIAN;
     dart.throw(new core.UnsupportedError('Int64 accessor not supported by dart2js.'));
   }
-  [dartx.getInt8](byteOffset) {
-    return this.getInt8(byteOffset);
+  [dartx.getInt8](...args) {
+    return this.getInt8.apply(this, args);
   }
   [dartx.getUint16](byteOffset, endian) {
     if (endian === void 0) endian = typed_data.Endianness.BIG_ENDIAN;
     return this[_getUint16](byteOffset, dart.equals(typed_data.Endianness.LITTLE_ENDIAN, endian));
   }
-  [_getUint16](byteOffset, littleEndian) {
-    return this.getUint16(byteOffset, littleEndian);
+  [_getUint16](...args) {
+    return this.getUint16.apply(this, args);
   }
   [dartx.getUint32](byteOffset, endian) {
     if (endian === void 0) endian = typed_data.Endianness.BIG_ENDIAN;
     return this[_getUint32](byteOffset, dart.equals(typed_data.Endianness.LITTLE_ENDIAN, endian));
   }
-  [_getUint32](byteOffset, littleEndian) {
-    return this.getUint32(byteOffset, littleEndian);
+  [_getUint32](...args) {
+    return this.getUint32.apply(this, args);
   }
   [dartx.getUint64](byteOffset, endian) {
     if (endian === void 0) endian = typed_data.Endianness.BIG_ENDIAN;
     dart.throw(new core.UnsupportedError('Uint64 accessor not supported by dart2js.'));
   }
-  [dartx.getUint8](byteOffset) {
-    return this.getUint8(byteOffset);
+  [dartx.getUint8](...args) {
+    return this.getUint8.apply(this, args);
   }
   [dartx.setFloat32](byteOffset, value, endian) {
     if (endian === void 0) endian = typed_data.Endianness.BIG_ENDIAN;
     return this[_setFloat32](byteOffset, value, dart.equals(typed_data.Endianness.LITTLE_ENDIAN, endian));
   }
-  [_setFloat32](byteOffset, value, littleEndian) {
-    return this.setFloat32(byteOffset, value, littleEndian);
+  [_setFloat32](...args) {
+    return this.setFloat32.apply(this, args);
   }
   [dartx.setFloat64](byteOffset, value, endian) {
     if (endian === void 0) endian = typed_data.Endianness.BIG_ENDIAN;
     return this[_setFloat64](byteOffset, value, dart.equals(typed_data.Endianness.LITTLE_ENDIAN, endian));
   }
-  [_setFloat64](byteOffset, value, littleEndian) {
-    return this.setFloat64(byteOffset, value, littleEndian);
+  [_setFloat64](...args) {
+    return this.setFloat64.apply(this, args);
   }
   [dartx.setInt16](byteOffset, value, endian) {
     if (endian === void 0) endian = typed_data.Endianness.BIG_ENDIAN;
     return this[_setInt16](byteOffset, value, dart.equals(typed_data.Endianness.LITTLE_ENDIAN, endian));
   }
-  [_setInt16](byteOffset, value, littleEndian) {
-    return this.setInt16(byteOffset, value, littleEndian);
+  [_setInt16](...args) {
+    return this.setInt16.apply(this, args);
   }
   [dartx.setInt32](byteOffset, value, endian) {
     if (endian === void 0) endian = typed_data.Endianness.BIG_ENDIAN;
     return this[_setInt32](byteOffset, value, dart.equals(typed_data.Endianness.LITTLE_ENDIAN, endian));
   }
-  [_setInt32](byteOffset, value, littleEndian) {
-    return this.setInt32(byteOffset, value, littleEndian);
+  [_setInt32](...args) {
+    return this.setInt32.apply(this, args);
   }
   [dartx.setInt64](byteOffset, value, endian) {
     if (endian === void 0) endian = typed_data.Endianness.BIG_ENDIAN;
     dart.throw(new core.UnsupportedError('Int64 accessor not supported by dart2js.'));
   }
-  [dartx.setInt8](byteOffset, value) {
-    return this.setInt8(byteOffset, value);
+  [dartx.setInt8](...args) {
+    return this.setInt8.apply(this, args);
   }
   [dartx.setUint16](byteOffset, value, endian) {
     if (endian === void 0) endian = typed_data.Endianness.BIG_ENDIAN;
     return this[_setUint16](byteOffset, value, dart.equals(typed_data.Endianness.LITTLE_ENDIAN, endian));
   }
-  [_setUint16](byteOffset, value, littleEndian) {
-    return this.setUint16(byteOffset, value, littleEndian);
+  [_setUint16](...args) {
+    return this.setUint16.apply(this, args);
   }
   [dartx.setUint32](byteOffset, value, endian) {
     if (endian === void 0) endian = typed_data.Endianness.BIG_ENDIAN;
     return this[_setUint32](byteOffset, value, dart.equals(typed_data.Endianness.LITTLE_ENDIAN, endian));
   }
-  [_setUint32](byteOffset, value, littleEndian) {
-    return this.setUint32(byteOffset, value, littleEndian);
+  [_setUint32](...args) {
+    return this.setUint32.apply(this, args);
   }
   [dartx.setUint64](byteOffset, value, endian) {
     if (endian === void 0) endian = typed_data.Endianness.BIG_ENDIAN;
     dart.throw(new core.UnsupportedError('Uint64 accessor not supported by dart2js.'));
   }
-  [dartx.setUint8](byteOffset, value) {
-    return this.setUint8(byteOffset, value);
+  [dartx.setUint8](...args) {
+    return this.setUint8.apply(this, args);
   }
   static _create1(arg) {
     return new DataView(new ArrayBuffer(arg));
@@ -38347,21 +38347,21 @@
   get [dartx.source]() {
     return this.source;
   }
-  [dartx.advance](count) {
-    return this.advance(count);
+  [dartx.advance](...args) {
+    return this.advance.apply(this, args);
   }
-  [dartx.continuePrimaryKey](key, primaryKey) {
-    return this.continuePrimaryKey(key, primaryKey);
+  [dartx.continuePrimaryKey](...args) {
+    return this.continuePrimaryKey.apply(this, args);
   }
-  [_delete]() {
-    return this.delete();
+  [_delete](...args) {
+    return this.delete.apply(this, args);
   }
   [_update](value) {
     let value_1 = html_common.convertDartToNative_SerializedScriptValue(value);
     return this[_update_1](value_1);
   }
-  [_update_1](value) {
-    return this.update(value);
+  [_update_1](...args) {
+    return this.update.apply(this, args);
   }
 };
 dart.setSignature(indexed_db.Cursor, {
@@ -38439,14 +38439,14 @@
   static _() {
     dart.throw(new core.UnsupportedError("Not supported"));
   }
-  [_addEventListener](type, listener, capture) {
-    return this.addEventListener(type, listener, capture);
+  [_addEventListener](...args) {
+    return this.addEventListener.apply(this, args);
   }
-  [dartx.dispatchEvent](event) {
-    return this.dispatchEvent(event);
+  [dartx.dispatchEvent](...args) {
+    return this.dispatchEvent.apply(this, args);
   }
-  [_removeEventListener](type, listener, capture) {
-    return this.removeEventListener(type, listener, capture);
+  [_removeEventListener](...args) {
+    return this.removeEventListener.apply(this, args);
   }
 };
 dart.defineNamedConstructor(html.EventTarget, '_created');
@@ -38519,8 +38519,8 @@
     }
     return this[_transaction](storeNames, mode);
   }
-  [_transaction](stores, mode) {
-    return this.transaction(stores, mode);
+  [_transaction](...args) {
+    return this.transaction.apply(this, args);
   }
   static _() {
     dart.throw(new core.UnsupportedError("Not supported"));
@@ -38534,8 +38534,8 @@
   get [dartx.version]() {
     return this.version;
   }
-  [dartx.close]() {
-    return this.close();
+  [dartx.close](...args) {
+    return this.close.apply(this, args);
   }
   [_createObjectStore](name, options) {
     if (options === void 0) options = null;
@@ -38545,14 +38545,14 @@
     }
     return this[_createObjectStore_2](name);
   }
-  [_createObjectStore_1](name, options) {
-    return this.createObjectStore(name, options);
+  [_createObjectStore_1](...args) {
+    return this.createObjectStore.apply(this, args);
   }
-  [_createObjectStore_2](name) {
-    return this.createObjectStore(name);
+  [_createObjectStore_2](...args) {
+    return this.createObjectStore.apply(this, args);
   }
-  [dartx.deleteObjectStore](name) {
-    return this.deleteObjectStore(name);
+  [dartx.deleteObjectStore](...args) {
+    return this.deleteObjectStore.apply(this, args);
   }
   get [dartx.onAbort]() {
     return indexed_db.Database.abortEvent.forTarget(this);
@@ -38691,17 +38691,17 @@
   static _() {
     dart.throw(new core.UnsupportedError("Not supported"));
   }
-  [dartx.cmp](first, second) {
-    return this.cmp(first, second);
+  [dartx.cmp](...args) {
+    return this.cmp.apply(this, args);
   }
-  [_deleteDatabase](name) {
-    return this.deleteDatabase(name);
+  [_deleteDatabase](...args) {
+    return this.deleteDatabase.apply(this, args);
   }
-  [_open](name, version) {
-    return this.open(name, version);
+  [_open](...args) {
+    return this.open.apply(this, args);
   }
-  [_webkitGetDatabaseNames]() {
-    return this.webkitGetDatabaseNames();
+  [_webkitGetDatabaseNames](...args) {
+    return this.webkitGetDatabaseNames.apply(this, args);
   }
 };
 dart.setSignature(indexed_db.IdbFactory, {
@@ -38844,26 +38844,26 @@
   get [dartx.unique]() {
     return this.unique;
   }
-  [_count](key) {
-    return this.count(key);
+  [_count](...args) {
+    return this.count.apply(this, args);
   }
-  [_get](key) {
-    return this.get(key);
+  [_get](...args) {
+    return this.get.apply(this, args);
   }
-  [dartx.getAll](range, maxCount) {
-    return this.getAll(range, maxCount);
+  [dartx.getAll](...args) {
+    return this.getAll.apply(this, args);
   }
-  [dartx.getAllKeys](range, maxCount) {
-    return this.getAllKeys(range, maxCount);
+  [dartx.getAllKeys](...args) {
+    return this.getAllKeys.apply(this, args);
   }
-  [_getKey](key) {
-    return this.getKey(key);
+  [_getKey](...args) {
+    return this.getKey.apply(this, args);
   }
-  [_openCursor](range, direction) {
-    return this.openCursor(range, direction);
+  [_openCursor](...args) {
+    return this.openCursor.apply(this, args);
   }
-  [_openKeyCursor](range, direction) {
-    return this.openKeyCursor(range, direction);
+  [_openKeyCursor](...args) {
+    return this.openKeyCursor.apply(this, args);
   }
 };
 dart.setSignature(indexed_db.Index, {
@@ -39117,17 +39117,17 @@
     let value_1 = html_common.convertDartToNative_SerializedScriptValue(value);
     return this[_add_2](value_1);
   }
-  [_add_1](value, key) {
-    return this.add(value, key);
+  [_add_1](...args) {
+    return this.add.apply(this, args);
   }
-  [_add_2](value) {
-    return this.add(value);
+  [_add_2](...args) {
+    return this.add.apply(this, args);
   }
-  [_clear]() {
-    return this.clear();
+  [_clear](...args) {
+    return this.clear.apply(this, args);
   }
-  [_count](key) {
-    return this.count(key);
+  [_count](...args) {
+    return this.count.apply(this, args);
   }
   [_createIndex](name, keyPath, options) {
     if (options === void 0) options = null;
@@ -39137,35 +39137,35 @@
     }
     return this[_createIndex_2](name, keyPath);
   }
-  [_createIndex_1](name, keyPath, options) {
-    return this.createIndex(name, keyPath, options);
+  [_createIndex_1](...args) {
+    return this.createIndex.apply(this, args);
   }
-  [_createIndex_2](name, keyPath) {
-    return this.createIndex(name, keyPath);
+  [_createIndex_2](...args) {
+    return this.createIndex.apply(this, args);
   }
-  [_delete](key) {
-    return this.delete(key);
+  [_delete](...args) {
+    return this.delete.apply(this, args);
   }
-  [dartx.deleteIndex](name) {
-    return this.deleteIndex(name);
+  [dartx.deleteIndex](...args) {
+    return this.deleteIndex.apply(this, args);
   }
-  [_get](key) {
-    return this.get(key);
+  [_get](...args) {
+    return this.get.apply(this, args);
   }
-  [dartx.getAll](range, maxCount) {
-    return this.getAll(range, maxCount);
+  [dartx.getAll](...args) {
+    return this.getAll.apply(this, args);
   }
-  [dartx.getAllKeys](range, maxCount) {
-    return this.getAllKeys(range, maxCount);
+  [dartx.getAllKeys](...args) {
+    return this.getAllKeys.apply(this, args);
   }
-  [dartx.index](name) {
-    return this.index(name);
+  [dartx.index](...args) {
+    return this.index.apply(this, args);
   }
-  [_openCursor](range, direction) {
-    return this.openCursor(range, direction);
+  [_openCursor](...args) {
+    return this.openCursor.apply(this, args);
   }
-  [dartx.openKeyCursor](range, direction) {
-    return this.openKeyCursor(range, direction);
+  [dartx.openKeyCursor](...args) {
+    return this.openKeyCursor.apply(this, args);
   }
   [_put](value, key) {
     if (key === void 0) key = null;
@@ -39177,11 +39177,11 @@
     let value_1 = html_common.convertDartToNative_SerializedScriptValue(value);
     return this[_put_2](value_1);
   }
-  [_put_1](value, key) {
-    return this.put(value, key);
+  [_put_1](...args) {
+    return this.put.apply(this, args);
   }
-  [_put_2](value) {
-    return this.put(value);
+  [_put_2](...args) {
+    return this.put.apply(this, args);
   }
   static _cursorStreamFromResult(T) {
     return (request, autoAdvance) => {
@@ -39396,11 +39396,11 @@
   get [dartx.objectStoreNames]() {
     return this.objectStoreNames;
   }
-  [dartx.abort]() {
-    return this.abort();
+  [dartx.abort](...args) {
+    return this.abort.apply(this, args);
   }
-  [dartx.objectStore](name) {
-    return this.objectStore(name);
+  [dartx.objectStore](...args) {
+    return this.objectStore.apply(this, args);
   }
   get [dartx.onAbort]() {
     return indexed_db.Transaction.abortEvent.forTarget(this);
@@ -39547,17 +39547,17 @@
   get [dartx.type]() {
     return this.type;
   }
-  [_initEvent](type, bubbles, cancelable) {
-    return this.initEvent(type, bubbles, cancelable);
+  [_initEvent](...args) {
+    return this.initEvent.apply(this, args);
   }
-  [dartx.preventDefault]() {
-    return this.preventDefault();
+  [dartx.preventDefault](...args) {
+    return this.preventDefault.apply(this, args);
   }
-  [dartx.stopImmediatePropagation]() {
-    return this.stopImmediatePropagation();
+  [dartx.stopImmediatePropagation](...args) {
+    return this.stopImmediatePropagation.apply(this, args);
   }
-  [dartx.stopPropagation]() {
-    return this.stopPropagation();
+  [dartx.stopPropagation](...args) {
+    return this.stopPropagation.apply(this, args);
   }
 };
 dart.setSignature(html.Event, {
@@ -39858,26 +39858,26 @@
   set [dartx.text](value) {
     this.textContent = value;
   }
-  [dartx.append](node) {
-    return this.appendChild(node);
+  [dartx.append](...args) {
+    return this.appendChild.apply(this, args);
   }
-  [dartx.clone](deep) {
-    return this.cloneNode(deep);
+  [dartx.clone](...args) {
+    return this.cloneNode.apply(this, args);
   }
-  [dartx.contains](other) {
-    return this.contains(other);
+  [dartx.contains](...args) {
+    return this.contains.apply(this, args);
   }
-  [dartx.hasChildNodes]() {
-    return this.hasChildNodes();
+  [dartx.hasChildNodes](...args) {
+    return this.hasChildNodes.apply(this, args);
   }
-  [dartx.insertBefore](node, child) {
-    return this.insertBefore(node, child);
+  [dartx.insertBefore](...args) {
+    return this.insertBefore.apply(this, args);
   }
-  [_removeChild](child) {
-    return this.removeChild(child);
+  [_removeChild](...args) {
+    return this.removeChild.apply(this, args);
   }
-  [_replaceChild](node, child) {
-    return this.replaceChild(node, child);
+  [_replaceChild](...args) {
+    return this.replaceChild.apply(this, args);
   }
 };
 dart.defineNamedConstructor(html.Node, '_created');
@@ -40357,8 +40357,8 @@
     let convertedTiming = core.Map.is(timing) ? html_common.convertDartToNative_Dictionary(timing) : timing;
     return convertedTiming == null ? this[_animate](convertedFrames) : this[_animate](convertedFrames, convertedTiming);
   }
-  [_animate](effect, timing) {
-    return this.animate(effect, timing);
+  [_animate](...args) {
+    return this.animate.apply(this, args);
   }
   [dartx.attributeChanged](name, oldValue, newValue) {}
   get [_xtag]() {
@@ -40418,8 +40418,8 @@
       this[_insertAdjacentNode](where, html.Text.new(text));
     }
   }
-  [_insertAdjacentText](where, text) {
-    return this.insertAdjacentText(where, text);
+  [_insertAdjacentText](...args) {
+    return this.insertAdjacentText.apply(this, args);
   }
   [dartx.insertAdjacentHtml](where, html, opts) {
     let validator = opts && 'validator' in opts ? opts.validator : null;
@@ -40430,8 +40430,8 @@
       this[_insertAdjacentNode](where, this[dartx.createFragment](html, {validator: validator, treeSanitizer: treeSanitizer}));
     }
   }
-  [_insertAdjacentHtml](where, text) {
-    return this.insertAdjacentHTML(where, text);
+  [_insertAdjacentHtml](...args) {
+    return this.insertAdjacentHTML.apply(this, args);
   }
   [dartx.insertAdjacentElement](where, element) {
     if (!!this.insertAdjacentElement) {
@@ -40441,8 +40441,8 @@
     }
     return element;
   }
-  [_insertAdjacentElement](where, element) {
-    return this.insertAdjacentElement(where, element);
+  [_insertAdjacentElement](...args) {
+    return this.insertAdjacentElement.apply(this, args);
   }
   [_insertAdjacentNode](where, node) {
     switch (where[dartx.toLowerCase]()) {
@@ -40756,14 +40756,14 @@
   set [dartx.dropzone](value) {
     this.webkitdropzone = value;
   }
-  [dartx.blur]() {
-    return this.blur();
+  [dartx.blur](...args) {
+    return this.blur.apply(this, args);
   }
-  [dartx.click]() {
-    return this.click();
+  [dartx.click](...args) {
+    return this.click.apply(this, args);
   }
-  [dartx.focus]() {
-    return this.focus();
+  [dartx.focus](...args) {
+    return this.focus.apply(this, args);
   }
   get [_attributes]() {
     return this.attributes;
@@ -40828,50 +40828,50 @@
   get [dartx.tagName]() {
     return this.tagName;
   }
-  [dartx.closest](selectors) {
-    return this.closest(selectors);
+  [dartx.closest](...args) {
+    return this.closest.apply(this, args);
   }
-  [dartx.getAnimations]() {
-    return this.getAnimations();
+  [dartx.getAnimations](...args) {
+    return this.getAnimations.apply(this, args);
   }
-  [dartx.getAttribute](name) {
-    return this.getAttribute(name);
+  [dartx.getAttribute](...args) {
+    return this.getAttribute.apply(this, args);
   }
-  [dartx.getAttributeNS](namespaceURI, localName) {
-    return this.getAttributeNS(namespaceURI, localName);
+  [dartx.getAttributeNS](...args) {
+    return this.getAttributeNS.apply(this, args);
   }
-  [dartx.getBoundingClientRect]() {
-    return this.getBoundingClientRect();
+  [dartx.getBoundingClientRect](...args) {
+    return this.getBoundingClientRect.apply(this, args);
   }
-  [dartx.getClientRects]() {
-    return this.getClientRects();
+  [dartx.getClientRects](...args) {
+    return this.getClientRects.apply(this, args);
   }
-  [dartx.getDestinationInsertionPoints]() {
-    return this.getDestinationInsertionPoints();
+  [dartx.getDestinationInsertionPoints](...args) {
+    return this.getDestinationInsertionPoints.apply(this, args);
   }
-  [dartx.getElementsByClassName](classNames) {
-    return this.getElementsByClassName(classNames);
+  [dartx.getElementsByClassName](...args) {
+    return this.getElementsByClassName.apply(this, args);
   }
-  [_getElementsByTagName](localName) {
-    return this.getElementsByTagName(localName);
+  [_getElementsByTagName](...args) {
+    return this.getElementsByTagName.apply(this, args);
   }
-  [_hasAttribute](name) {
-    return this.hasAttribute(name);
+  [_hasAttribute](...args) {
+    return this.hasAttribute.apply(this, args);
   }
-  [_hasAttributeNS](namespaceURI, localName) {
-    return this.hasAttributeNS(namespaceURI, localName);
+  [_hasAttributeNS](...args) {
+    return this.hasAttributeNS.apply(this, args);
   }
-  [_removeAttribute](name) {
-    return this.removeAttribute(name);
+  [_removeAttribute](...args) {
+    return this.removeAttribute.apply(this, args);
   }
-  [_removeAttributeNS](namespaceURI, localName) {
-    return this.removeAttributeNS(namespaceURI, localName);
+  [_removeAttributeNS](...args) {
+    return this.removeAttributeNS.apply(this, args);
   }
-  [dartx.requestFullscreen]() {
-    return this.requestFullscreen();
+  [dartx.requestFullscreen](...args) {
+    return this.requestFullscreen.apply(this, args);
   }
-  [dartx.requestPointerLock]() {
-    return this.requestPointerLock();
+  [dartx.requestPointerLock](...args) {
+    return this.requestPointerLock.apply(this, args);
   }
   [dartx.scroll](options_OR_x, y) {
     if (options_OR_x === void 0) options_OR_x = null;
@@ -40891,14 +40891,14 @@
     }
     dart.throw(new core.ArgumentError("Incorrect number or type of arguments"));
   }
-  [_scroll_1]() {
-    return this.scroll();
+  [_scroll_1](...args) {
+    return this.scroll.apply(this, args);
   }
-  [_scroll_2](options) {
-    return this.scroll(options);
+  [_scroll_2](...args) {
+    return this.scroll.apply(this, args);
   }
-  [_scroll_3](x, y) {
-    return this.scroll(x, y);
+  [_scroll_3](...args) {
+    return this.scroll.apply(this, args);
   }
   [dartx.scrollBy](options_OR_x, y) {
     if (options_OR_x === void 0) options_OR_x = null;
@@ -40918,20 +40918,20 @@
     }
     dart.throw(new core.ArgumentError("Incorrect number or type of arguments"));
   }
-  [_scrollBy_1]() {
-    return this.scrollBy();
+  [_scrollBy_1](...args) {
+    return this.scrollBy.apply(this, args);
   }
-  [_scrollBy_2](options) {
-    return this.scrollBy(options);
+  [_scrollBy_2](...args) {
+    return this.scrollBy.apply(this, args);
   }
-  [_scrollBy_3](x, y) {
-    return this.scrollBy(x, y);
+  [_scrollBy_3](...args) {
+    return this.scrollBy.apply(this, args);
   }
-  [_scrollIntoView](alignWithTop) {
-    return this.scrollIntoView(alignWithTop);
+  [_scrollIntoView](...args) {
+    return this.scrollIntoView.apply(this, args);
   }
-  [_scrollIntoViewIfNeeded](centerIfNeeded) {
-    return this.scrollIntoViewIfNeeded(centerIfNeeded);
+  [_scrollIntoViewIfNeeded](...args) {
+    return this.scrollIntoViewIfNeeded.apply(this, args);
   }
   [dartx.scrollTo](options_OR_x, y) {
     if (options_OR_x === void 0) options_OR_x = null;
@@ -40951,26 +40951,26 @@
     }
     dart.throw(new core.ArgumentError("Incorrect number or type of arguments"));
   }
-  [_scrollTo_1]() {
-    return this.scrollTo();
+  [_scrollTo_1](...args) {
+    return this.scrollTo.apply(this, args);
   }
-  [_scrollTo_2](options) {
-    return this.scrollTo(options);
+  [_scrollTo_2](...args) {
+    return this.scrollTo.apply(this, args);
   }
-  [_scrollTo_3](x, y) {
-    return this.scrollTo(x, y);
+  [_scrollTo_3](...args) {
+    return this.scrollTo.apply(this, args);
   }
-  [dartx.setAttribute](name, value) {
-    return this.setAttribute(name, value);
+  [dartx.setAttribute](...args) {
+    return this.setAttribute.apply(this, args);
   }
-  [dartx.setAttributeNS](namespaceURI, name, value) {
-    return this.setAttributeNS(namespaceURI, name, value);
+  [dartx.setAttributeNS](...args) {
+    return this.setAttributeNS.apply(this, args);
   }
-  [dartx.after](nodes) {
-    return this.after(nodes);
+  [dartx.after](...args) {
+    return this.after.apply(this, args);
   }
-  [dartx.before](nodes) {
-    return this.before(nodes);
+  [dartx.before](...args) {
+    return this.before.apply(this, args);
   }
   get [dartx.nextElementSibling]() {
     return this.nextElementSibling;
@@ -40990,11 +40990,11 @@
   get [_lastElementChild]() {
     return this.lastElementChild;
   }
-  [dartx.querySelector](selectors) {
-    return this.querySelector(selectors);
+  [dartx.querySelector](...args) {
+    return this.querySelector.apply(this, args);
   }
-  [_querySelectorAll](selectors) {
-    return this.querySelectorAll(selectors);
+  [_querySelectorAll](...args) {
+    return this.querySelectorAll.apply(this, args);
   }
   get [dartx.onAbort]() {
     return html.Element.abortEvent.forElement(this);
@@ -42050,20 +42050,20 @@
   set [dartx.startTime](value) {
     this.startTime = value;
   }
-  [dartx.cancel]() {
-    return this.cancel();
+  [dartx.cancel](...args) {
+    return this.cancel.apply(this, args);
   }
-  [dartx.finish]() {
-    return this.finish();
+  [dartx.finish](...args) {
+    return this.finish.apply(this, args);
   }
-  [dartx.pause]() {
-    return this.pause();
+  [dartx.pause](...args) {
+    return this.pause.apply(this, args);
   }
-  [dartx.play]() {
-    return this.play();
+  [dartx.play](...args) {
+    return this.play.apply(this, args);
   }
-  [dartx.reverse]() {
-    return this.reverse();
+  [dartx.reverse](...args) {
+    return this.reverse.apply(this, args);
   }
 };
 dart.setSignature(html.Animation, {
@@ -42314,11 +42314,11 @@
   set [dartx.playbackRate](value) {
     this.playbackRate = value;
   }
-  [dartx.getAnimations]() {
-    return this.getAnimations();
+  [dartx.getAnimations](...args) {
+    return this.getAnimations.apply(this, args);
   }
-  [dartx.play](source) {
-    return this.play(source);
+  [dartx.play](...args) {
+    return this.play.apply(this, args);
   }
 };
 dart.setSignature(html.AnimationTimeline, {
@@ -42380,14 +42380,14 @@
   get [dartx.status]() {
     return this.status;
   }
-  [dartx.abort]() {
-    return this.abort();
+  [dartx.abort](...args) {
+    return this.abort.apply(this, args);
   }
-  [dartx.swapCache]() {
-    return this.swapCache();
+  [dartx.swapCache](...args) {
+    return this.swapCache.apply(this, args);
   }
-  [dartx.update]() {
-    return this.update();
+  [dartx.update](...args) {
+    return this.update.apply(this, args);
   }
   get [dartx.onCached]() {
     return html.ApplicationCache.cachedEvent.forTarget(this);
@@ -42934,35 +42934,35 @@
   get [dartx.videoDecodedByteCount]() {
     return this.webkitVideoDecodedByteCount;
   }
-  [dartx.addTextTrack](kind, label, language) {
-    return this.addTextTrack(kind, label, language);
+  [dartx.addTextTrack](...args) {
+    return this.addTextTrack.apply(this, args);
   }
-  [dartx.canPlayType](type, keySystem) {
-    return this.canPlayType(type, keySystem);
+  [dartx.canPlayType](...args) {
+    return this.canPlayType.apply(this, args);
   }
-  [dartx.load]() {
-    return this.load();
+  [dartx.load](...args) {
+    return this.load.apply(this, args);
   }
-  [dartx.pause]() {
-    return this.pause();
+  [dartx.pause](...args) {
+    return this.pause.apply(this, args);
   }
-  [dartx.play]() {
-    return this.play();
+  [dartx.play](...args) {
+    return this.play.apply(this, args);
   }
-  [dartx.setMediaKeys](mediaKeys) {
-    return this.setMediaKeys(mediaKeys);
+  [dartx.setMediaKeys](...args) {
+    return this.setMediaKeys.apply(this, args);
   }
-  [dartx.setSinkId](sinkId) {
-    return this.setSinkId(sinkId);
+  [dartx.setSinkId](...args) {
+    return this.setSinkId.apply(this, args);
   }
-  [dartx.addKey](keySystem, key, initData, sessionId) {
-    return this.webkitAddKey(keySystem, key, initData, sessionId);
+  [dartx.addKey](...args) {
+    return this.webkitAddKey.apply(this, args);
   }
-  [dartx.cancelKeyRequest](keySystem, sessionId) {
-    return this.webkitCancelKeyRequest(keySystem, sessionId);
+  [dartx.cancelKeyRequest](...args) {
+    return this.webkitCancelKeyRequest.apply(this, args);
   }
-  [dartx.generateKeyRequest](keySystem, initData) {
-    return this.webkitGenerateKeyRequest(keySystem, initData);
+  [dartx.generateKeyRequest](...args) {
+    return this.webkitGenerateKeyRequest.apply(this, args);
   }
   get [dartx.onKeyAdded]() {
     return html.MediaElement.keyAddedEvent.forElement(this);
@@ -43166,11 +43166,11 @@
   get [dartx.length]() {
     return this.length;
   }
-  [__getter__](index) {
-    return this.__getter__(index);
+  [__getter__](...args) {
+    return this.__getter__.apply(this, args);
   }
-  [dartx.getTrackById](id) {
-    return this.getTrackById(id);
+  [dartx.getTrackById](...args) {
+    return this.getTrackById.apply(this, args);
   }
   get [dartx.onChange]() {
     return html.AudioTrackList.changeEvent.forTarget(this);
@@ -43370,8 +43370,8 @@
   get [dartx.userChoice]() {
     return this.userChoice;
   }
-  [dartx.prompt]() {
-    return this.prompt();
+  [dartx.prompt](...args) {
+    return this.prompt.apply(this, args);
   }
 };
 dart.setSignature(html.BeforeInstallPromptEvent, {
@@ -43426,11 +43426,11 @@
   get [dartx.type]() {
     return this.type;
   }
-  [dartx.close]() {
-    return this.close();
+  [dartx.close](...args) {
+    return this.close.apply(this, args);
   }
-  [dartx.slice](start, end, contentType) {
-    return this.slice(start, end, contentType);
+  [dartx.slice](...args) {
+    return this.slice.apply(this, args);
   }
   static new(blobParts, type, endings) {
     if (type === void 0) type = null;
@@ -43490,8 +43490,8 @@
     let options_1 = html_common.convertDartToNative_Dictionary(options);
     return this[_requestDevice_1](options_1);
   }
-  [_requestDevice_1](options) {
-    return this.requestDevice(options);
+  [_requestDevice_1](...args) {
+    return this.requestDevice.apply(this, args);
   }
 };
 dart.setSignature(html.Bluetooth, {
@@ -43541,8 +43541,8 @@
   get [dartx.vendorIDSource]() {
     return this.vendorIDSource;
   }
-  [dartx.connectGatt]() {
-    return this.connectGATT();
+  [dartx.connectGatt](...args) {
+    return this.connectGATT.apply(this, args);
   }
 };
 dart.setSignature(html.BluetoothDevice, {
@@ -43572,11 +43572,11 @@
   get [dartx.uuid]() {
     return this.uuid;
   }
-  [dartx.readValue]() {
-    return this.readValue();
+  [dartx.readValue](...args) {
+    return this.readValue.apply(this, args);
   }
-  [dartx.writeValue](value) {
-    return this.writeValue(value);
+  [dartx.writeValue](...args) {
+    return this.writeValue.apply(this, args);
   }
 };
 dart.setSignature(html.BluetoothGattCharacteristic, {
@@ -43599,8 +43599,8 @@
   get [dartx.connected]() {
     return this.connected;
   }
-  [dartx.getPrimaryService](service) {
-    return this.getPrimaryService(service);
+  [dartx.getPrimaryService](...args) {
+    return this.getPrimaryService.apply(this, args);
   }
 };
 dart.setSignature(html.BluetoothGattRemoteServer, {
@@ -43624,8 +43624,8 @@
   get [dartx.uuid]() {
     return this.uuid;
   }
-  [dartx.getCharacteristic](characteristic) {
-    return this.getCharacteristic(characteristic);
+  [dartx.getCharacteristic](...args) {
+    return this.getCharacteristic.apply(this, args);
   }
 };
 dart.setSignature(html.BluetoothGattService, {
@@ -43667,17 +43667,17 @@
   get [dartx.bodyUsed]() {
     return this.bodyUsed;
   }
-  [dartx.arrayBuffer]() {
-    return this.arrayBuffer();
+  [dartx.arrayBuffer](...args) {
+    return this.arrayBuffer.apply(this, args);
   }
-  [dartx.blob]() {
-    return this.blob();
+  [dartx.blob](...args) {
+    return this.blob.apply(this, args);
   }
-  [dartx.json]() {
-    return this.json();
+  [dartx.json](...args) {
+    return this.json.apply(this, args);
   }
-  [dartx.text]() {
-    return this.text();
+  [dartx.text](...args) {
+    return this.text.apply(this, args);
   }
 };
 dart.setSignature(html.Body, {
@@ -43951,14 +43951,14 @@
   get [dartx.willValidate]() {
     return this.willValidate;
   }
-  [dartx.checkValidity]() {
-    return this.checkValidity();
+  [dartx.checkValidity](...args) {
+    return this.checkValidity.apply(this, args);
   }
-  [dartx.reportValidity]() {
-    return this.reportValidity();
+  [dartx.reportValidity](...args) {
+    return this.reportValidity.apply(this, args);
   }
-  [dartx.setCustomValidity](error) {
-    return this.setCustomValidity(error);
+  [dartx.setCustomValidity](...args) {
+    return this.setCustomValidity.apply(this, args);
   }
 };
 dart.defineNamedConstructor(html.ButtonElement, 'created');
@@ -44019,26 +44019,26 @@
   get [dartx.length]() {
     return this.length;
   }
-  [dartx.appendData](data) {
-    return this.appendData(data);
+  [dartx.appendData](...args) {
+    return this.appendData.apply(this, args);
   }
-  [dartx.deleteData](offset, count) {
-    return this.deleteData(offset, count);
+  [dartx.deleteData](...args) {
+    return this.deleteData.apply(this, args);
   }
-  [dartx.insertData](offset, data) {
-    return this.insertData(offset, data);
+  [dartx.insertData](...args) {
+    return this.insertData.apply(this, args);
   }
-  [dartx.replaceData](offset, count, data) {
-    return this.replaceData(offset, count, data);
+  [dartx.replaceData](...args) {
+    return this.replaceData.apply(this, args);
   }
-  [dartx.substringData](offset, count) {
-    return this.substringData(offset, count);
+  [dartx.substringData](...args) {
+    return this.substringData.apply(this, args);
   }
-  [dartx.after](nodes) {
-    return this.after(nodes);
+  [dartx.after](...args) {
+    return this.after.apply(this, args);
   }
-  [dartx.before](nodes) {
-    return this.before(nodes);
+  [dartx.before](...args) {
+    return this.before.apply(this, args);
   }
   get [dartx.nextElementSibling]() {
     return this.nextElementSibling;
@@ -44082,11 +44082,11 @@
   get [dartx.wholeText]() {
     return this.wholeText;
   }
-  [dartx.getDestinationInsertionPoints]() {
-    return this.getDestinationInsertionPoints();
+  [dartx.getDestinationInsertionPoints](...args) {
+    return this.getDestinationInsertionPoints.apply(this, args);
   }
-  [dartx.splitText](offset) {
-    return this.splitText(offset);
+  [dartx.splitText](...args) {
+    return this.splitText.apply(this, args);
   }
 };
 dart.setSignature(html.Text, {
@@ -44123,14 +44123,14 @@
   static _() {
     dart.throw(new core.UnsupportedError("Not supported"));
   }
-  [dartx.delete](cacheName) {
-    return this.delete(cacheName);
+  [dartx.delete](...args) {
+    return this.delete.apply(this, args);
   }
-  [dartx.has](cacheName) {
-    return this.has(cacheName);
+  [dartx.has](...args) {
+    return this.has.apply(this, args);
   }
-  [dartx.keys]() {
-    return this.keys();
+  [dartx.keys](...args) {
+    return this.keys.apply(this, args);
   }
   [dartx.match](request, options) {
     if (options === void 0) options = null;
@@ -44140,14 +44140,14 @@
     }
     return this[_match_2](request);
   }
-  [_match_1](request, options) {
-    return this.match(request, options);
+  [_match_1](...args) {
+    return this.match.apply(this, args);
   }
-  [_match_2](request) {
-    return this.match(request);
+  [_match_2](...args) {
+    return this.match.apply(this, args);
   }
-  [dartx.open](cacheName) {
-    return this.open(cacheName);
+  [dartx.open](...args) {
+    return this.open.apply(this, args);
   }
 };
 dart.setSignature(html.CacheStorage, {
@@ -44213,14 +44213,14 @@
     }
     return this[_getContext_2](contextId);
   }
-  [_getContext_1](contextId, attributes) {
-    return this.getContext(contextId, attributes);
+  [_getContext_1](...args) {
+    return this.getContext.apply(this, args);
   }
-  [_getContext_2](contextId) {
-    return this.getContext(contextId);
+  [_getContext_2](...args) {
+    return this.getContext.apply(this, args);
   }
-  [_toDataUrl](type, arguments_OR_quality) {
-    return this.toDataURL(type, arguments_OR_quality);
+  [_toDataUrl](...args) {
+    return this.toDataURL.apply(this, args);
   }
   get [dartx.onWebGlContextLost]() {
     return html.CanvasElement.webGlContextLostEvent.forElement(this);
@@ -44297,8 +44297,8 @@
   static _() {
     dart.throw(new core.UnsupportedError("Not supported"));
   }
-  [dartx.addColorStop](offset, color) {
-    return this.addColorStop(offset, color);
+  [dartx.addColorStop](...args) {
+    return this.addColorStop.apply(this, args);
   }
 };
 dart.setSignature(html.CanvasGradient, {
@@ -44313,8 +44313,8 @@
   static _() {
     dart.throw(new core.UnsupportedError("Not supported"));
   }
-  [dartx.setTransform](transform) {
-    return this.setTransform(transform);
+  [dartx.setTransform](...args) {
+    return this.setTransform.apply(this, args);
   }
 };
 dart.setSignature(html.CanvasPattern, {
@@ -44543,23 +44543,23 @@
     this[_addHitRegion_2]();
     return;
   }
-  [_addHitRegion_1](options) {
-    return this.addHitRegion(options);
+  [_addHitRegion_1](...args) {
+    return this.addHitRegion.apply(this, args);
   }
-  [_addHitRegion_2]() {
-    return this.addHitRegion();
+  [_addHitRegion_2](...args) {
+    return this.addHitRegion.apply(this, args);
   }
-  [dartx.beginPath]() {
-    return this.beginPath();
+  [dartx.beginPath](...args) {
+    return this.beginPath.apply(this, args);
   }
-  [dartx.clearHitRegions]() {
-    return this.clearHitRegions();
+  [dartx.clearHitRegions](...args) {
+    return this.clearHitRegions.apply(this, args);
   }
-  [dartx.clearRect](x, y, width, height) {
-    return this.clearRect(x, y, width, height);
+  [dartx.clearRect](...args) {
+    return this.clearRect.apply(this, args);
   }
-  [dartx.clip](path_OR_winding, winding) {
-    return this.clip(path_OR_winding, winding);
+  [dartx.clip](...args) {
+    return this.clip.apply(this, args);
   }
   [dartx.createImageData](imagedata_OR_sw, sh) {
     if (sh === void 0) sh = null;
@@ -44572,53 +44572,53 @@
     }
     dart.throw(new core.ArgumentError("Incorrect number or type of arguments"));
   }
-  [_createImageData_1](imagedata) {
-    return this.createImageData(imagedata);
+  [_createImageData_1](...args) {
+    return this.createImageData.apply(this, args);
   }
-  [_createImageData_2](sw, sh) {
-    return this.createImageData(sw, sh);
+  [_createImageData_2](...args) {
+    return this.createImageData.apply(this, args);
   }
-  [dartx.createLinearGradient](x0, y0, x1, y1) {
-    return this.createLinearGradient(x0, y0, x1, y1);
+  [dartx.createLinearGradient](...args) {
+    return this.createLinearGradient.apply(this, args);
   }
-  [dartx.createPattern](image, repetitionType) {
-    return this.createPattern(image, repetitionType);
+  [dartx.createPattern](...args) {
+    return this.createPattern.apply(this, args);
   }
-  [dartx.createRadialGradient](x0, y0, r0, x1, y1, r1) {
-    return this.createRadialGradient(x0, y0, r0, x1, y1, r1);
+  [dartx.createRadialGradient](...args) {
+    return this.createRadialGradient.apply(this, args);
   }
-  [dartx.drawFocusIfNeeded](element_OR_path, element) {
-    return this.drawFocusIfNeeded(element_OR_path, element);
+  [dartx.drawFocusIfNeeded](...args) {
+    return this.drawFocusIfNeeded.apply(this, args);
   }
-  [dartx.fillRect](x, y, width, height) {
-    return this.fillRect(x, y, width, height);
+  [dartx.fillRect](...args) {
+    return this.fillRect.apply(this, args);
   }
   [dartx.getContextAttributes]() {
     return html_common.convertNativeToDart_Dictionary(this[_getContextAttributes_1]());
   }
-  [_getContextAttributes_1]() {
-    return this.getContextAttributes();
+  [_getContextAttributes_1](...args) {
+    return this.getContextAttributes.apply(this, args);
   }
   [dartx.getImageData](sx, sy, sw, sh) {
     return html_common.convertNativeToDart_ImageData(this[_getImageData_1](sx, sy, sw, sh));
   }
-  [_getImageData_1](sx, sy, sw, sh) {
-    return this.getImageData(sx, sy, sw, sh);
+  [_getImageData_1](...args) {
+    return this.getImageData.apply(this, args);
   }
-  [_getLineDash]() {
-    return this.getLineDash();
+  [_getLineDash](...args) {
+    return this.getLineDash.apply(this, args);
   }
-  [dartx.isContextLost]() {
-    return this.isContextLost();
+  [dartx.isContextLost](...args) {
+    return this.isContextLost.apply(this, args);
   }
-  [dartx.isPointInPath](path_OR_x, x_OR_y, winding_OR_y, winding) {
-    return this.isPointInPath(path_OR_x, x_OR_y, winding_OR_y, winding);
+  [dartx.isPointInPath](...args) {
+    return this.isPointInPath.apply(this, args);
   }
-  [dartx.isPointInStroke](path_OR_x, x_OR_y, y) {
-    return this.isPointInStroke(path_OR_x, x_OR_y, y);
+  [dartx.isPointInStroke](...args) {
+    return this.isPointInStroke.apply(this, args);
   }
-  [dartx.measureText](text) {
-    return this.measureText(text);
+  [dartx.measureText](...args) {
+    return this.measureText.apply(this, args);
   }
   [dartx.putImageData](imagedata, dx, dy, dirtyX, dirtyY, dirtyWidth, dirtyHeight) {
     if (dirtyX === void 0) dirtyX = null;
@@ -44637,77 +44637,77 @@
     }
     dart.throw(new core.ArgumentError("Incorrect number or type of arguments"));
   }
-  [_putImageData_1](imagedata, dx, dy) {
-    return this.putImageData(imagedata, dx, dy);
+  [_putImageData_1](...args) {
+    return this.putImageData.apply(this, args);
   }
-  [_putImageData_2](imagedata, dx, dy, dirtyX, dirtyY, dirtyWidth, dirtyHeight) {
-    return this.putImageData(imagedata, dx, dy, dirtyX, dirtyY, dirtyWidth, dirtyHeight);
+  [_putImageData_2](...args) {
+    return this.putImageData.apply(this, args);
   }
-  [dartx.removeHitRegion](id) {
-    return this.removeHitRegion(id);
+  [dartx.removeHitRegion](...args) {
+    return this.removeHitRegion.apply(this, args);
   }
-  [dartx.resetTransform]() {
-    return this.resetTransform();
+  [dartx.resetTransform](...args) {
+    return this.resetTransform.apply(this, args);
   }
-  [dartx.restore]() {
-    return this.restore();
+  [dartx.restore](...args) {
+    return this.restore.apply(this, args);
   }
-  [dartx.rotate](angle) {
-    return this.rotate(angle);
+  [dartx.rotate](...args) {
+    return this.rotate.apply(this, args);
   }
-  [dartx.save]() {
-    return this.save();
+  [dartx.save](...args) {
+    return this.save.apply(this, args);
   }
-  [dartx.scale](x, y) {
-    return this.scale(x, y);
+  [dartx.scale](...args) {
+    return this.scale.apply(this, args);
   }
-  [dartx.scrollPathIntoView](path) {
-    return this.scrollPathIntoView(path);
+  [dartx.scrollPathIntoView](...args) {
+    return this.scrollPathIntoView.apply(this, args);
   }
-  [dartx.setTransform](a, b, c, d, e, f) {
-    return this.setTransform(a, b, c, d, e, f);
+  [dartx.setTransform](...args) {
+    return this.setTransform.apply(this, args);
   }
-  [dartx.stroke](path) {
-    return this.stroke(path);
+  [dartx.stroke](...args) {
+    return this.stroke.apply(this, args);
   }
-  [dartx.strokeRect](x, y, width, height) {
-    return this.strokeRect(x, y, width, height);
+  [dartx.strokeRect](...args) {
+    return this.strokeRect.apply(this, args);
   }
-  [dartx.strokeText](text, x, y, maxWidth) {
-    return this.strokeText(text, x, y, maxWidth);
+  [dartx.strokeText](...args) {
+    return this.strokeText.apply(this, args);
   }
-  [dartx.transform](a, b, c, d, e, f) {
-    return this.transform(a, b, c, d, e, f);
+  [dartx.transform](...args) {
+    return this.transform.apply(this, args);
   }
-  [dartx.translate](x, y) {
-    return this.translate(x, y);
+  [dartx.translate](...args) {
+    return this.translate.apply(this, args);
   }
-  [_arc](x, y, radius, startAngle, endAngle, anticlockwise) {
-    return this.arc(x, y, radius, startAngle, endAngle, anticlockwise);
+  [_arc](...args) {
+    return this.arc.apply(this, args);
   }
-  [dartx.arcTo](x1, y1, x2, y2, radius) {
-    return this.arcTo(x1, y1, x2, y2, radius);
+  [dartx.arcTo](...args) {
+    return this.arcTo.apply(this, args);
   }
-  [dartx.bezierCurveTo](cp1x, cp1y, cp2x, cp2y, x, y) {
-    return this.bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y);
+  [dartx.bezierCurveTo](...args) {
+    return this.bezierCurveTo.apply(this, args);
   }
-  [dartx.closePath]() {
-    return this.closePath();
+  [dartx.closePath](...args) {
+    return this.closePath.apply(this, args);
   }
-  [dartx.ellipse](x, y, radiusX, radiusY, rotation, startAngle, endAngle, anticlockwise) {
-    return this.ellipse(x, y, radiusX, radiusY, rotation, startAngle, endAngle, anticlockwise);
+  [dartx.ellipse](...args) {
+    return this.ellipse.apply(this, args);
   }
-  [dartx.lineTo](x, y) {
-    return this.lineTo(x, y);
+  [dartx.lineTo](...args) {
+    return this.lineTo.apply(this, args);
   }
-  [dartx.moveTo](x, y) {
-    return this.moveTo(x, y);
+  [dartx.moveTo](...args) {
+    return this.moveTo.apply(this, args);
   }
-  [dartx.quadraticCurveTo](cpx, cpy, x, y) {
-    return this.quadraticCurveTo(cpx, cpy, x, y);
+  [dartx.quadraticCurveTo](...args) {
+    return this.quadraticCurveTo.apply(this, args);
   }
-  [dartx.rect](x, y, width, height) {
-    return this.rect(x, y, width, height);
+  [dartx.rect](...args) {
+    return this.rect.apply(this, args);
   }
   [dartx.createImageDataFromImageData](imagedata) {
     return this.createImageData(imagedata);
@@ -44743,14 +44743,14 @@
       this[dartx.drawImageScaledFromSource](source, sourceRect[dartx.left], sourceRect[dartx.top], sourceRect[dartx.width], sourceRect[dartx.height], destRect[dartx.left], destRect[dartx.top], destRect[dartx.width], destRect[dartx.height]);
     }
   }
-  [dartx.drawImage](source, destX, destY) {
-    return this.drawImage(source, destX, destY);
+  [dartx.drawImage](...args) {
+    return this.drawImage.apply(this, args);
   }
-  [dartx.drawImageScaled](source, destX, destY, destWidth, destHeight) {
-    return this.drawImage(source, destX, destY, destWidth, destHeight);
+  [dartx.drawImageScaled](...args) {
+    return this.drawImage.apply(this, args);
   }
-  [dartx.drawImageScaledFromSource](source, sourceX, sourceY, sourceWidth, sourceHeight, destX, destY, destWidth, destHeight) {
-    return this.drawImage(source, sourceX, sourceY, sourceWidth, sourceHeight, destX, destY, destWidth, destHeight);
+  [dartx.drawImageScaledFromSource](...args) {
+    return this.drawImage.apply(this, args);
   }
   get [dartx.lineDashOffset]() {
     return this.lineDashOffset || this.webkitLineDashOffset;
@@ -44997,11 +44997,11 @@
     this[_postMessage_2](message_1);
     return;
   }
-  [_postMessage_1](message, transfer) {
-    return this.postMessage(message, transfer);
+  [_postMessage_1](...args) {
+    return this.postMessage.apply(this, args);
   }
-  [_postMessage_2](message) {
-    return this.postMessage(message);
+  [_postMessage_2](...args) {
+    return this.postMessage.apply(this, args);
   }
 };
 dart.setSignature(html.Client, {
@@ -45029,8 +45029,8 @@
   static _() {
     dart.throw(new core.UnsupportedError("Not supported"));
   }
-  [dartx.claim]() {
-    return this.claim();
+  [dartx.claim](...args) {
+    return this.claim.apply(this, args);
   }
   [dartx.matchAll](options) {
     if (options === void 0) options = null;
@@ -45040,14 +45040,14 @@
     }
     return this[_matchAll_2]();
   }
-  [_matchAll_1](options) {
-    return this.matchAll(options);
+  [_matchAll_1](...args) {
+    return this.matchAll.apply(this, args);
   }
-  [_matchAll_2]() {
-    return this.matchAll();
+  [_matchAll_2](...args) {
+    return this.matchAll.apply(this, args);
   }
-  [dartx.openWindow](url) {
-    return this.openWindow(url);
+  [dartx.openWindow](...args) {
+    return this.openWindow.apply(this, args);
   }
 };
 dart.setSignature(html.Clients, {
@@ -45205,8 +45205,8 @@
   get [_which]() {
     return this.which;
   }
-  [_initUIEvent](type, bubbles, cancelable, view, detail) {
-    return this.initUIEvent(type, bubbles, cancelable, view, detail);
+  [_initUIEvent](...args) {
+    return this.initUIEvent.apply(this, args);
   }
 };
 dart.setSignature(html.UIEvent, {
@@ -45269,8 +45269,8 @@
   get [dartx.data]() {
     return this.data;
   }
-  [_initCompositionEvent](type, bubbles, cancelable, view, data) {
-    return this.initCompositionEvent(type, bubbles, cancelable, view, data);
+  [_initCompositionEvent](...args) {
+    return this.initCompositionEvent.apply(this, args);
   }
 };
 dart.setSignature(html.CompositionEvent, {
@@ -45329,11 +45329,11 @@
   set [dartx.transform](value) {
     this.transform = value;
   }
-  [dartx.disconnect]() {
-    return this.disconnect();
+  [dartx.disconnect](...args) {
+    return this.disconnect.apply(this, args);
   }
-  [dartx.supports](attribute) {
-    return this.supports(attribute);
+  [dartx.supports](...args) {
+    return this.supports.apply(this, args);
   }
 };
 dart.setSignature(html.CompositorProxy, {
@@ -45382,14 +45382,14 @@
     this[_postMessage_2](message_1);
     return;
   }
-  [_postMessage_1](message, transfer) {
-    return this.postMessage(message, transfer);
+  [_postMessage_1](...args) {
+    return this.postMessage.apply(this, args);
   }
-  [_postMessage_2](message) {
-    return this.postMessage(message);
+  [_postMessage_2](...args) {
+    return this.postMessage.apply(this, args);
   }
-  [dartx.terminate]() {
-    return this.terminate();
+  [dartx.terminate](...args) {
+    return this.terminate.apply(this, args);
   }
   get [dartx.onError]() {
     return html.CompositorWorker.errorEvent.forTarget(this);
@@ -45488,8 +45488,8 @@
   get [dartx.self]() {
     return this.self;
   }
-  [dartx.close]() {
-    return this.close();
+  [dartx.close](...args) {
+    return this.close.apply(this, args);
   }
   [dartx.fetch](input, init) {
     if (init === void 0) init = null;
@@ -45499,17 +45499,17 @@
     }
     return this[_fetch_2](input);
   }
-  [_fetch_1](input, init) {
-    return this.fetch(input, init);
+  [_fetch_1](...args) {
+    return this.fetch.apply(this, args);
   }
-  [_fetch_2](input) {
-    return this.fetch(input);
+  [_fetch_2](...args) {
+    return this.fetch.apply(this, args);
   }
-  [dartx.importScripts](urls) {
-    return this.importScripts(urls);
+  [dartx.importScripts](...args) {
+    return this.importScripts.apply(this, args);
   }
-  [_webkitRequestFileSystem](type, size, successCallback, errorCallback) {
-    return this.webkitRequestFileSystem(type, size, successCallback, errorCallback);
+  [_webkitRequestFileSystem](...args) {
+    return this.webkitRequestFileSystem.apply(this, args);
   }
   [dartx.webkitRequestFileSystem](type, size) {
     let completer = CompleterOfFileSystem().new();
@@ -45520,14 +45520,14 @@
     }, FileErrorTovoid()));
     return completer.future;
   }
-  [dartx.requestFileSystemSync](type, size) {
-    return this.webkitRequestFileSystemSync(type, size);
+  [dartx.requestFileSystemSync](...args) {
+    return this.webkitRequestFileSystemSync.apply(this, args);
   }
-  [dartx.resolveLocalFileSystemSyncUrl](url) {
-    return this.webkitResolveLocalFileSystemSyncURL(url);
+  [dartx.resolveLocalFileSystemSyncUrl](...args) {
+    return this.webkitResolveLocalFileSystemSyncURL.apply(this, args);
   }
-  [_webkitResolveLocalFileSystemUrl](url, successCallback, errorCallback) {
-    return this.webkitResolveLocalFileSystemURL(url, successCallback, errorCallback);
+  [_webkitResolveLocalFileSystemUrl](...args) {
+    return this.webkitResolveLocalFileSystemURL.apply(this, args);
   }
   [dartx.webkitResolveLocalFileSystemUrl](url) {
     let completer = CompleterOfEntry().new();
@@ -45538,29 +45538,29 @@
     }, FileErrorTovoid()));
     return completer.future;
   }
-  [dartx.atob](atob) {
-    return this.atob(atob);
+  [dartx.atob](...args) {
+    return this.atob.apply(this, args);
   }
-  [dartx.btoa](btoa) {
-    return this.btoa(btoa);
+  [dartx.btoa](...args) {
+    return this.btoa.apply(this, args);
   }
-  [_setInterval_String](handler, timeout, arguments$) {
-    return this.setInterval(handler, timeout, arguments$);
+  [_setInterval_String](...args) {
+    return this.setInterval.apply(this, args);
   }
-  [_setTimeout_String](handler, timeout, arguments$) {
-    return this.setTimeout(handler, timeout, arguments$);
+  [_setTimeout_String](...args) {
+    return this.setTimeout.apply(this, args);
   }
-  [_clearInterval](handle) {
-    return this.clearInterval(handle);
+  [_clearInterval](...args) {
+    return this.clearInterval.apply(this, args);
   }
-  [_clearTimeout](handle) {
-    return this.clearTimeout(handle);
+  [_clearTimeout](...args) {
+    return this.clearTimeout.apply(this, args);
   }
-  [_setInterval](handler, timeout) {
-    return this.setInterval(handler, timeout);
+  [_setInterval](...args) {
+    return this.setInterval.apply(this, args);
   }
-  [_setTimeout](handler, timeout) {
-    return this.setTimeout(handler, timeout);
+  [_setTimeout](...args) {
+    return this.setTimeout.apply(this, args);
   }
   get [dartx.onError]() {
     return html.WorkerGlobalScope.errorEvent.forTarget(this);
@@ -45625,8 +45625,8 @@
   static _() {
     dart.throw(new core.UnsupportedError("Not supported"));
   }
-  [dartx.cancelAnimationFrame](handle) {
-    return this.cancelAnimationFrame(handle);
+  [dartx.cancelAnimationFrame](...args) {
+    return this.cancelAnimationFrame.apply(this, args);
   }
   [dartx.postMessage](message, transfer) {
     if (transfer === void 0) transfer = null;
@@ -45639,14 +45639,14 @@
     this[_postMessage_2](message_1);
     return;
   }
-  [_postMessage_1](message, transfer) {
-    return this.postMessage(message, transfer);
+  [_postMessage_1](...args) {
+    return this.postMessage.apply(this, args);
   }
-  [_postMessage_2](message) {
-    return this.postMessage(message);
+  [_postMessage_2](...args) {
+    return this.postMessage.apply(this, args);
   }
-  [dartx.requestAnimationFrame](callback) {
-    return this.requestAnimationFrame(callback);
+  [dartx.requestAnimationFrame](...args) {
+    return this.requestAnimationFrame.apply(this, args);
   }
   get [dartx.onMessage]() {
     return html.CompositorWorkerGlobalScope.messageEvent.forTarget(this);
@@ -45796,14 +45796,14 @@
   static _() {
     dart.throw(new core.UnsupportedError("Not supported"));
   }
-  [dartx.assertCondition](condition, arg) {
-    return this.assert(condition, arg);
+  [dartx.assertCondition](...args) {
+    return this.assert.apply(this, args);
   }
-  [dartx.timeline](title) {
-    return this.timeline(title);
+  [dartx.timeline](...args) {
+    return this.timeline.apply(this, args);
   }
-  [dartx.timelineEnd](title) {
-    return this.timelineEnd(title);
+  [dartx.timelineEnd](...args) {
+    return this.timelineEnd.apply(this, args);
   }
 };
 dart.setSignature(html.ConsoleBase, {
@@ -45839,8 +45839,8 @@
   set [dartx.select](value) {
     this.select = value;
   }
-  [dartx.getDistributedNodes]() {
-    return this.getDistributedNodes();
+  [dartx.getDistributedNodes](...args) {
+    return this.getDistributedNodes.apply(this, args);
   }
 };
 dart.defineNamedConstructor(html.ContentElement, 'created');
@@ -45947,8 +45947,8 @@
   static _() {
     dart.throw(new core.UnsupportedError("Not supported"));
   }
-  [dartx.notifySignedIn](credential) {
-    return this.notifySignedIn(credential);
+  [dartx.notifySignedIn](...args) {
+    return this.notifySignedIn.apply(this, args);
   }
   [dartx.request](options) {
     if (options === void 0) options = null;
@@ -45958,14 +45958,14 @@
     }
     return this[_request_2]();
   }
-  [_request_1](options) {
-    return this.request(options);
+  [_request_1](...args) {
+    return this.request.apply(this, args);
   }
-  [_request_2]() {
-    return this.request();
+  [_request_2](...args) {
+    return this.request.apply(this, args);
   }
-  [dartx.requireUserMediation]() {
-    return this.requireUserMediation();
+  [dartx.requireUserMediation](...args) {
+    return this.requireUserMediation.apply(this, args);
   }
 };
 dart.setSignature(html.CredentialsContainer, {
@@ -45990,8 +45990,8 @@
   get [dartx.client]() {
     return this.client;
   }
-  [dartx.acceptConnection](shouldAccept) {
-    return this.acceptConnection(shouldAccept);
+  [dartx.acceptConnection](...args) {
+    return this.acceptConnection.apply(this, args);
   }
 };
 dart.setSignature(html.CrossOriginConnectEvent, {
@@ -46026,11 +46026,11 @@
     this[_postMessage_2](message_1);
     return;
   }
-  [_postMessage_1](message, transfer) {
-    return this.postMessage(message, transfer);
+  [_postMessage_1](...args) {
+    return this.postMessage.apply(this, args);
   }
-  [_postMessage_2](message) {
-    return this.postMessage(message);
+  [_postMessage_2](...args) {
+    return this.postMessage.apply(this, args);
   }
 };
 dart.setSignature(html.CrossOriginServiceWorkerClient, {
@@ -46064,8 +46064,8 @@
   get [dartx.subtle]() {
     return this.subtle;
   }
-  [_getRandomValues](array) {
-    return this.getRandomValues(array);
+  [_getRandomValues](...args) {
+    return this.getRandomValues.apply(this, args);
   }
 };
 dart.setSignature(html.Crypto, {
@@ -46234,11 +46234,11 @@
   get [dartx.cssRules]() {
     return this.cssRules;
   }
-  [dartx.deleteRule](index) {
-    return this.deleteRule(index);
+  [dartx.deleteRule](...args) {
+    return this.deleteRule.apply(this, args);
   }
-  [dartx.insertRule](rule, index) {
-    return this.insertRule(rule, index);
+  [dartx.insertRule](...args) {
+    return this.insertRule.apply(this, args);
   }
 };
 dart.setSignature(html.CssGroupingRule, {
@@ -46326,17 +46326,17 @@
   set [dartx.name](value) {
     this.name = value;
   }
-  [__getter__](index) {
-    return this.__getter__(index);
+  [__getter__](...args) {
+    return this.__getter__.apply(this, args);
   }
-  [dartx.appendRule](rule) {
-    return this.appendRule(rule);
+  [dartx.appendRule](...args) {
+    return this.appendRule.apply(this, args);
   }
-  [dartx.deleteRule](select) {
-    return this.deleteRule(select);
+  [dartx.deleteRule](...args) {
+    return this.deleteRule.apply(this, args);
   }
-  [dartx.findRule](select) {
-    return this.findRule(select);
+  [dartx.findRule](...args) {
+    return this.findRule.apply(this, args);
   }
 };
 dart.setSignature(html.CssKeyframesRule, {
@@ -50874,17 +50874,17 @@
   get [dartx.parentRule]() {
     return this.parentRule;
   }
-  [dartx.getPropertyPriority](property) {
-    return this.getPropertyPriority(property);
+  [dartx.getPropertyPriority](...args) {
+    return this.getPropertyPriority.apply(this, args);
   }
-  [_getPropertyValue](property) {
-    return this.getPropertyValue(property);
+  [_getPropertyValue](...args) {
+    return this.getPropertyValue.apply(this, args);
   }
-  [dartx.item](index) {
-    return this.item(index);
+  [dartx.item](...args) {
+    return this.item.apply(this, args);
   }
-  [dartx.removeProperty](property) {
-    return this.removeProperty(property);
+  [dartx.removeProperty](...args) {
+    return this.removeProperty.apply(this, args);
   }
   get [dartx.background]() {
     return this[_background];
@@ -52866,17 +52866,17 @@
   get [dartx.rules]() {
     return this.rules;
   }
-  [dartx.addRule](selector, style, index) {
-    return this.addRule(selector, style, index);
+  [dartx.addRule](...args) {
+    return this.addRule.apply(this, args);
   }
-  [dartx.deleteRule](index) {
-    return this.deleteRule(index);
+  [dartx.deleteRule](...args) {
+    return this.deleteRule.apply(this, args);
   }
-  [dartx.insertRule](rule, index) {
-    return this.insertRule(rule, index);
+  [dartx.insertRule](...args) {
+    return this.insertRule.apply(this, args);
   }
-  [dartx.removeRule](index) {
-    return this.removeRule(index);
+  [dartx.removeRule](...args) {
+    return this.removeRule.apply(this, args);
   }
 };
 dart.setSignature(html.CssStyleSheet, {
@@ -52910,11 +52910,11 @@
   get [dartx.cssRules]() {
     return this.cssRules;
   }
-  [dartx.deleteRule](index) {
-    return this.deleteRule(index);
+  [dartx.deleteRule](...args) {
+    return this.deleteRule.apply(this, args);
   }
-  [dartx.insertRule](rule, index) {
-    return this.insertRule(rule, index);
+  [dartx.insertRule](...args) {
+    return this.insertRule.apply(this, args);
   }
 };
 dart.setSignature(html.CssSupportsRule, {
@@ -53004,8 +53004,8 @@
   get [_get__detail]() {
     return this.detail;
   }
-  [_initCustomEvent](type, bubbles, cancelable, detail) {
-    return this.initCustomEvent(type, bubbles, cancelable, detail);
+  [_initCustomEvent](...args) {
+    return this.initCustomEvent.apply(this, args);
   }
 };
 dart.setSignature(html.CustomEvent, {
@@ -53117,17 +53117,17 @@
   get [dartx.types]() {
     return this.types;
   }
-  [dartx.clearData](format) {
-    return this.clearData(format);
+  [dartx.clearData](...args) {
+    return this.clearData.apply(this, args);
   }
-  [dartx.getData](format) {
-    return this.getData(format);
+  [dartx.getData](...args) {
+    return this.getData.apply(this, args);
   }
-  [dartx.setData](format, data) {
-    return this.setData(format, data);
+  [dartx.setData](...args) {
+    return this.setData.apply(this, args);
   }
-  [dartx.setDragImage](image, x, y) {
-    return this.setDragImage(image, x, y);
+  [dartx.setDragImage](...args) {
+    return this.setDragImage.apply(this, args);
   }
 };
 dart.setSignature(html.DataTransfer, {
@@ -53165,11 +53165,11 @@
   get [dartx.type]() {
     return this.type;
   }
-  [dartx.getAsFile]() {
-    return this.getAsFile();
+  [dartx.getAsFile](...args) {
+    return this.getAsFile.apply(this, args);
   }
-  [_getAsString](callback) {
-    return this.getAsString(callback);
+  [_getAsString](...args) {
+    return this.getAsString.apply(this, args);
   }
   [dartx.getAsString]() {
     let completer = CompleterOfString().new();
@@ -53178,8 +53178,8 @@
     }, StringTovoid()));
     return completer.future;
   }
-  [dartx.getAsEntry]() {
-    return this.webkitGetAsEntry();
+  [dartx.getAsEntry](...args) {
+    return this.webkitGetAsEntry.apply(this, args);
   }
 };
 dart.setSignature(html.DataTransferItem, {
@@ -53213,23 +53213,23 @@
   get [dartx.length]() {
     return this.length;
   }
-  [dartx.add](data_OR_file, type) {
-    return this.add(data_OR_file, type);
+  [dartx.add](...args) {
+    return this.add.apply(this, args);
   }
-  [dartx.addData](data, type) {
-    return this.add(data, type);
+  [dartx.addData](...args) {
+    return this.add.apply(this, args);
   }
-  [dartx.addFile](file) {
-    return this.add(file);
+  [dartx.addFile](...args) {
+    return this.add.apply(this, args);
   }
-  [dartx.clear]() {
-    return this.clear();
+  [dartx.clear](...args) {
+    return this.clear.apply(this, args);
   }
-  [dartx.item](index) {
-    return this.item(index);
+  [dartx.item](...args) {
+    return this.item.apply(this, args);
   }
-  [dartx.remove](index) {
-    return this.remove(index);
+  [dartx.remove](...args) {
+    return this.remove.apply(this, args);
   }
   [dartx._get](index) {
     return this[index];
@@ -53269,11 +53269,11 @@
     this[_postMessage_2](message_1);
     return;
   }
-  [_postMessage_1](message, transfer) {
-    return this.postMessage(message, transfer);
+  [_postMessage_1](...args) {
+    return this.postMessage.apply(this, args);
   }
-  [_postMessage_2](message) {
-    return this.postMessage(message);
+  [_postMessage_2](...args) {
+    return this.postMessage.apply(this, args);
   }
   get [dartx.onMessage]() {
     return html.DedicatedWorkerGlobalScope.messageEvent.forTarget(this);
@@ -53341,11 +53341,11 @@
   static _() {
     dart.throw(new core.UnsupportedError("Not supported"));
   }
-  [dartx.queryUsageAndQuota](storageType, usageCallback, errorCallback) {
-    return this.queryUsageAndQuota(storageType, usageCallback, errorCallback);
+  [dartx.queryUsageAndQuota](...args) {
+    return this.queryUsageAndQuota.apply(this, args);
   }
-  [dartx.requestQuota](storageType, newQuotaInBytes, quotaCallback, errorCallback) {
-    return this.requestQuota(storageType, newQuotaInBytes, quotaCallback, errorCallback);
+  [dartx.requestQuota](...args) {
+    return this.requestQuota.apply(this, args);
   }
 };
 dart.setSignature(html.DeprecatedStorageInfo, {
@@ -53370,11 +53370,11 @@
   static _() {
     dart.throw(new core.UnsupportedError("Not supported"));
   }
-  [dartx.queryUsageAndQuota](usageCallback, errorCallback) {
-    return this.queryUsageAndQuota(usageCallback, errorCallback);
+  [dartx.queryUsageAndQuota](...args) {
+    return this.queryUsageAndQuota.apply(this, args);
   }
-  [dartx.requestQuota](newQuotaInBytes, quotaCallback, errorCallback) {
-    return this.requestQuota(newQuotaInBytes, quotaCallback, errorCallback);
+  [dartx.requestQuota](...args) {
+    return this.requestQuota.apply(this, args);
   }
 };
 dart.setSignature(html.DeprecatedStorageQuota, {
@@ -53509,8 +53509,8 @@
   get [dartx.rotationRate]() {
     return this.rotationRate;
   }
-  [dartx.initDeviceMotionEvent](type, bubbles, cancelable, acceleration, accelerationIncludingGravity, rotationRate, interval) {
-    return this.initDeviceMotionEvent(type, bubbles, cancelable, acceleration, accelerationIncludingGravity, rotationRate, interval);
+  [dartx.initDeviceMotionEvent](...args) {
+    return this.initDeviceMotionEvent.apply(this, args);
   }
 };
 dart.setSignature(html.DeviceMotionEvent, {
@@ -53558,8 +53558,8 @@
   get [dartx.gamma]() {
     return this.gamma;
   }
-  [_initDeviceOrientationEvent](type, bubbles, cancelable, alpha, beta, gamma, absolute) {
-    return this.initDeviceOrientationEvent(type, bubbles, cancelable, alpha, beta, gamma, absolute);
+  [_initDeviceOrientationEvent](...args) {
+    return this.initDeviceOrientationEvent.apply(this, args);
   }
 };
 dart.setSignature(html.DeviceOrientationEvent, {
@@ -53632,14 +53632,14 @@
   set [dartx.returnValue](value) {
     this.returnValue = value;
   }
-  [dartx.close](returnValue) {
-    return this.close(returnValue);
+  [dartx.close](...args) {
+    return this.close.apply(this, args);
   }
-  [dartx.show]() {
-    return this.show();
+  [dartx.show](...args) {
+    return this.show.apply(this, args);
   }
-  [dartx.showModal]() {
-    return this.showModal();
+  [dartx.showModal](...args) {
+    return this.showModal.apply(this, args);
   }
 };
 dart.defineNamedConstructor(html.DialogElement, 'created');
@@ -53709,8 +53709,8 @@
   get [dartx.name]() {
     return this.name;
   }
-  [_copyTo](parent, opts) {
-    return this.copyTo(parent, opts);
+  [_copyTo](...args) {
+    return this.copyTo.apply(this, args);
   }
   [dartx.copyTo](parent, opts) {
     let name = opts && 'name' in opts ? opts.name : null;
@@ -53722,8 +53722,8 @@
       }, FileErrorTovoid())});
     return completer.future;
   }
-  [_getMetadata](successCallback, errorCallback) {
-    return this.getMetadata(successCallback, errorCallback);
+  [_getMetadata](...args) {
+    return this.getMetadata.apply(this, args);
   }
   [dartx.getMetadata]() {
     let completer = CompleterOfMetadata().new();
@@ -53734,8 +53734,8 @@
     }, FileErrorTovoid()));
     return completer.future;
   }
-  [_getParent](successCallback, errorCallback) {
-    return this.getParent(successCallback, errorCallback);
+  [_getParent](...args) {
+    return this.getParent.apply(this, args);
   }
   [dartx.getParent]() {
     let completer = CompleterOfEntry().new();
@@ -53746,8 +53746,8 @@
     }, FileErrorTovoid()));
     return completer.future;
   }
-  [_moveTo](parent, opts) {
-    return this.moveTo(parent, opts);
+  [_moveTo](...args) {
+    return this.moveTo.apply(this, args);
   }
   [dartx.moveTo](parent, opts) {
     let name = opts && 'name' in opts ? opts.name : null;
@@ -53759,8 +53759,8 @@
       }, FileErrorTovoid())});
     return completer.future;
   }
-  [_remove](successCallback, errorCallback) {
-    return this.remove(successCallback, errorCallback);
+  [_remove](...args) {
+    return this.remove.apply(this, args);
   }
   [dartx.remove]() {
     let completer = async.Completer.new();
@@ -53771,8 +53771,8 @@
     }, FileErrorTovoid()));
     return completer.future;
   }
-  [dartx.toUrl]() {
-    return this.toURL();
+  [dartx.toUrl](...args) {
+    return this.toURL.apply(this, args);
   }
 };
 dart.setSignature(html.Entry, {
@@ -53825,8 +53825,8 @@
   static _() {
     dart.throw(new core.UnsupportedError("Not supported"));
   }
-  [dartx.createReader]() {
-    return this.createReader();
+  [dartx.createReader](...args) {
+    return this.createReader.apply(this, args);
   }
   [__getDirectory](path, opts) {
     let options = opts && 'options' in opts ? opts.options : null;
@@ -53850,17 +53850,17 @@
     this[__getDirectory_4](path);
     return;
   }
-  [__getDirectory_1](path, options, successCallback, errorCallback) {
-    return this.getDirectory(path, options, successCallback, errorCallback);
+  [__getDirectory_1](...args) {
+    return this.getDirectory.apply(this, args);
   }
-  [__getDirectory_2](path, options, successCallback) {
-    return this.getDirectory(path, options, successCallback);
+  [__getDirectory_2](...args) {
+    return this.getDirectory.apply(this, args);
   }
-  [__getDirectory_3](path, options) {
-    return this.getDirectory(path, options);
+  [__getDirectory_3](...args) {
+    return this.getDirectory.apply(this, args);
   }
-  [__getDirectory_4](path) {
-    return this.getDirectory(path);
+  [__getDirectory_4](...args) {
+    return this.getDirectory.apply(this, args);
   }
   [_getDirectory](path, opts) {
     let options = opts && 'options' in opts ? opts.options : null;
@@ -53894,17 +53894,17 @@
     this[__getFile_4](path);
     return;
   }
-  [__getFile_1](path, options, successCallback, errorCallback) {
-    return this.getFile(path, options, successCallback, errorCallback);
+  [__getFile_1](...args) {
+    return this.getFile.apply(this, args);
   }
-  [__getFile_2](path, options, successCallback) {
-    return this.getFile(path, options, successCallback);
+  [__getFile_2](...args) {
+    return this.getFile.apply(this, args);
   }
-  [__getFile_3](path, options) {
-    return this.getFile(path, options);
+  [__getFile_3](...args) {
+    return this.getFile.apply(this, args);
   }
-  [__getFile_4](path) {
-    return this.getFile(path);
+  [__getFile_4](...args) {
+    return this.getFile.apply(this, args);
   }
   [_getFile](path, opts) {
     let options = opts && 'options' in opts ? opts.options : null;
@@ -53916,8 +53916,8 @@
       }, FileErrorTovoid())});
     return completer.future;
   }
-  [_removeRecursively](successCallback, errorCallback) {
-    return this.removeRecursively(successCallback, errorCallback);
+  [_removeRecursively](...args) {
+    return this.removeRecursively.apply(this, args);
   }
   [dartx.removeRecursively]() {
     let completer = async.Completer.new();
@@ -53962,8 +53962,8 @@
   static _() {
     dart.throw(new core.UnsupportedError("Not supported"));
   }
-  [_readEntries](successCallback, errorCallback) {
-    return this.readEntries(successCallback, errorCallback);
+  [_readEntries](...args) {
+    return this.readEntries.apply(this, args);
   }
   [dartx.readEntries]() {
     let completer = CompleterOfListOfEntry().new();
@@ -54260,93 +54260,93 @@
   get [_webkitVisibilityState]() {
     return this.webkitVisibilityState;
   }
-  [dartx.adoptNode](node) {
-    return this.adoptNode(node);
+  [dartx.adoptNode](...args) {
+    return this.adoptNode.apply(this, args);
   }
-  [_caretRangeFromPoint](x, y) {
-    return this.caretRangeFromPoint(x, y);
+  [_caretRangeFromPoint](...args) {
+    return this.caretRangeFromPoint.apply(this, args);
   }
-  [dartx.createDocumentFragment]() {
-    return this.createDocumentFragment();
+  [dartx.createDocumentFragment](...args) {
+    return this.createDocumentFragment.apply(this, args);
   }
-  [_createElement](localName_OR_tagName, typeExtension) {
-    return this.createElement(localName_OR_tagName, typeExtension);
+  [_createElement](...args) {
+    return this.createElement.apply(this, args);
   }
-  [_createElementNS](namespaceURI, qualifiedName, typeExtension) {
-    return this.createElementNS(namespaceURI, qualifiedName, typeExtension);
+  [_createElementNS](...args) {
+    return this.createElementNS.apply(this, args);
   }
-  [_createEvent](eventType) {
-    return this.createEvent(eventType);
+  [_createEvent](...args) {
+    return this.createEvent.apply(this, args);
   }
-  [dartx.createRange]() {
-    return this.createRange();
+  [dartx.createRange](...args) {
+    return this.createRange.apply(this, args);
   }
-  [_createTextNode](data) {
-    return this.createTextNode(data);
+  [_createTextNode](...args) {
+    return this.createTextNode.apply(this, args);
   }
   [_createTouch](window, target, identifier, pageX, pageY, screenX, screenY, radiusX, radiusY, rotationAngle, force) {
     let target_1 = html._convertDartToNative_EventTarget(target);
     return this[_createTouch_1](window, target_1, identifier, pageX, pageY, screenX, screenY, radiusX, radiusY, rotationAngle, force);
   }
-  [_createTouch_1](window, target, identifier, pageX, pageY, screenX, screenY, radiusX, radiusY, rotationAngle, force) {
-    return this.createTouch(window, target, identifier, pageX, pageY, screenX, screenY, radiusX, radiusY, rotationAngle, force);
+  [_createTouch_1](...args) {
+    return this.createTouch.apply(this, args);
   }
-  [_createTouchList](touches) {
-    return this.createTouchList(touches);
+  [_createTouchList](...args) {
+    return this.createTouchList.apply(this, args);
   }
-  [_elementFromPoint](x, y) {
-    return this.elementFromPoint(x, y);
+  [_elementFromPoint](...args) {
+    return this.elementFromPoint.apply(this, args);
   }
-  [dartx.elementsFromPoint](x, y) {
-    return this.elementsFromPoint(x, y);
+  [dartx.elementsFromPoint](...args) {
+    return this.elementsFromPoint.apply(this, args);
   }
-  [dartx.execCommand](commandId, showUI, value) {
-    return this.execCommand(commandId, showUI, value);
+  [dartx.execCommand](...args) {
+    return this.execCommand.apply(this, args);
   }
-  [dartx.exitFullscreen]() {
-    return this.exitFullscreen();
+  [dartx.exitFullscreen](...args) {
+    return this.exitFullscreen.apply(this, args);
   }
-  [dartx.exitPointerLock]() {
-    return this.exitPointerLock();
+  [dartx.exitPointerLock](...args) {
+    return this.exitPointerLock.apply(this, args);
   }
-  [_getCssCanvasContext](contextId, name, width, height) {
-    return this.getCSSCanvasContext(contextId, name, width, height);
+  [_getCssCanvasContext](...args) {
+    return this.getCSSCanvasContext.apply(this, args);
   }
-  [dartx.getElementsByClassName](classNames) {
-    return this.getElementsByClassName(classNames);
+  [dartx.getElementsByClassName](...args) {
+    return this.getElementsByClassName.apply(this, args);
   }
-  [dartx.getElementsByName](elementName) {
-    return this.getElementsByName(elementName);
+  [dartx.getElementsByName](...args) {
+    return this.getElementsByName.apply(this, args);
   }
-  [dartx.getElementsByTagName](localName) {
-    return this.getElementsByTagName(localName);
+  [dartx.getElementsByTagName](...args) {
+    return this.getElementsByTagName.apply(this, args);
   }
-  [dartx.importNode](node, deep) {
-    return this.importNode(node, deep);
+  [dartx.importNode](...args) {
+    return this.importNode.apply(this, args);
   }
-  [dartx.queryCommandEnabled](commandId) {
-    return this.queryCommandEnabled(commandId);
+  [dartx.queryCommandEnabled](...args) {
+    return this.queryCommandEnabled.apply(this, args);
   }
-  [dartx.queryCommandIndeterm](commandId) {
-    return this.queryCommandIndeterm(commandId);
+  [dartx.queryCommandIndeterm](...args) {
+    return this.queryCommandIndeterm.apply(this, args);
   }
-  [dartx.queryCommandState](commandId) {
-    return this.queryCommandState(commandId);
+  [dartx.queryCommandState](...args) {
+    return this.queryCommandState.apply(this, args);
   }
-  [dartx.queryCommandSupported](commandId) {
-    return this.queryCommandSupported(commandId);
+  [dartx.queryCommandSupported](...args) {
+    return this.queryCommandSupported.apply(this, args);
   }
-  [dartx.queryCommandValue](commandId) {
-    return this.queryCommandValue(commandId);
+  [dartx.queryCommandValue](...args) {
+    return this.queryCommandValue.apply(this, args);
   }
-  [dartx.transformDocumentToTreeView](noStyleMessage) {
-    return this.transformDocumentToTreeView(noStyleMessage);
+  [dartx.transformDocumentToTreeView](...args) {
+    return this.transformDocumentToTreeView.apply(this, args);
   }
-  [_webkitExitFullscreen]() {
-    return this.webkitExitFullscreen();
+  [_webkitExitFullscreen](...args) {
+    return this.webkitExitFullscreen.apply(this, args);
   }
-  [dartx.getElementById](elementId) {
-    return this.getElementById(elementId);
+  [dartx.getElementById](...args) {
+    return this.getElementById.apply(this, args);
   }
   get [_childElementCount]() {
     return this.childElementCount;
@@ -54360,11 +54360,11 @@
   get [_lastElementChild]() {
     return this.lastElementChild;
   }
-  [dartx.querySelector](selectors) {
-    return this.querySelector(selectors);
+  [dartx.querySelector](...args) {
+    return this.querySelector.apply(this, args);
   }
-  [_querySelectorAll](selectors) {
-    return this.querySelectorAll(selectors);
+  [_querySelectorAll](...args) {
+    return this.querySelectorAll.apply(this, args);
   }
   get [dartx.onAbort]() {
     return html.Element.abortEvent.forTarget(this);
@@ -54899,8 +54899,8 @@
   static _() {
     dart.throw(new core.UnsupportedError("Not supported"));
   }
-  [dartx.getElementById](elementId) {
-    return this.getElementById(elementId);
+  [dartx.getElementById](...args) {
+    return this.getElementById.apply(this, args);
   }
   get [_childElementCount]() {
     return this.childElementCount;
@@ -54911,11 +54911,11 @@
   get [_lastElementChild]() {
     return this.lastElementChild;
   }
-  [dartx.querySelector](selectors) {
-    return this.querySelector(selectors);
+  [dartx.querySelector](...args) {
+    return this.querySelector.apply(this, args);
   }
-  [_querySelectorAll](selectors) {
-    return this.querySelectorAll(selectors);
+  [_querySelectorAll](...args) {
+    return this.querySelectorAll.apply(this, args);
   }
 };
 html.DocumentFragment[dart.implements] = () => [html.NonElementParentNode, html.ParentNode];
@@ -55080,17 +55080,17 @@
   static _() {
     dart.throw(new core.UnsupportedError("Not supported"));
   }
-  [dartx.createDocument](namespaceURI, qualifiedName, doctype) {
-    return this.createDocument(namespaceURI, qualifiedName, doctype);
+  [dartx.createDocument](...args) {
+    return this.createDocument.apply(this, args);
   }
-  [dartx.createDocumentType](qualifiedName, publicId, systemId) {
-    return this.createDocumentType(qualifiedName, publicId, systemId);
+  [dartx.createDocumentType](...args) {
+    return this.createDocumentType.apply(this, args);
   }
-  [dartx.createHtmlDocument](title) {
-    return this.createHTMLDocument(title);
+  [dartx.createHtmlDocument](...args) {
+    return this.createHTMLDocument.apply(this, args);
   }
-  [dartx.hasFeature]() {
-    return this.hasFeature();
+  [dartx.hasFeature](...args) {
+    return this.hasFeature.apply(this, args);
   }
 };
 dart.setSignature(html.DomImplementation, {
@@ -55110,8 +55110,8 @@
   static _() {
     dart.throw(new core.UnsupportedError("Not supported"));
   }
-  [dartx.next](value) {
-    return this.next(value);
+  [dartx.next](...args) {
+    return this.next.apply(this, args);
   }
 };
 dart.setSignature(html.DomIterator, {
@@ -55228,26 +55228,26 @@
   get [dartx.m44]() {
     return this.m44;
   }
-  [dartx.multiply](other) {
-    return this.multiply(other);
+  [dartx.multiply](...args) {
+    return this.multiply.apply(this, args);
   }
-  [dartx.scale](scale, originX, originY) {
-    return this.scale(scale, originX, originY);
+  [dartx.scale](...args) {
+    return this.scale.apply(this, args);
   }
-  [dartx.scale3d](scale, originX, originY, originZ) {
-    return this.scale3d(scale, originX, originY, originZ);
+  [dartx.scale3d](...args) {
+    return this.scale3d.apply(this, args);
   }
-  [dartx.scaleNonUniform](scaleX, scaleY, scaleZn, originX, originY, originZ) {
-    return this.scaleNonUniform(scaleX, scaleY, scaleZn, originX, originY, originZ);
+  [dartx.scaleNonUniform](...args) {
+    return this.scaleNonUniform.apply(this, args);
   }
-  [dartx.toFloat32Array]() {
-    return this.toFloat32Array();
+  [dartx.toFloat32Array](...args) {
+    return this.toFloat32Array.apply(this, args);
   }
-  [dartx.toFloat64Array]() {
-    return this.toFloat64Array();
+  [dartx.toFloat64Array](...args) {
+    return this.toFloat64Array.apply(this, args);
   }
-  [dartx.translate](tx, ty, tz) {
-    return this.translate(tx, ty, tz);
+  [dartx.translate](...args) {
+    return this.translate.apply(this, args);
   }
 };
 dart.setSignature(html.DomMatrixReadOnly, {
@@ -55493,23 +55493,23 @@
   set [dartx.m44](value) {
     this.m44 = value;
   }
-  [dartx.multiplySelf](other) {
-    return this.multiplySelf(other);
+  [dartx.multiplySelf](...args) {
+    return this.multiplySelf.apply(this, args);
   }
-  [dartx.preMultiplySelf](other) {
-    return this.preMultiplySelf(other);
+  [dartx.preMultiplySelf](...args) {
+    return this.preMultiplySelf.apply(this, args);
   }
-  [dartx.scale3dSelf](scale, originX, originY, originZ) {
-    return this.scale3dSelf(scale, originX, originY, originZ);
+  [dartx.scale3dSelf](...args) {
+    return this.scale3dSelf.apply(this, args);
   }
-  [dartx.scaleNonUniformSelf](scaleX, scaleY, scaleZ, originX, originY, originZ) {
-    return this.scaleNonUniformSelf(scaleX, scaleY, scaleZ, originX, originY, originZ);
+  [dartx.scaleNonUniformSelf](...args) {
+    return this.scaleNonUniformSelf.apply(this, args);
   }
-  [dartx.scaleSelf](scale, originX, originY) {
-    return this.scaleSelf(scale, originX, originY);
+  [dartx.scaleSelf](...args) {
+    return this.scaleSelf.apply(this, args);
   }
-  [dartx.translateSelf](tx, ty, tz) {
-    return this.translateSelf(tx, ty, tz);
+  [dartx.translateSelf](...args) {
+    return this.translateSelf.apply(this, args);
   }
 };
 dart.setSignature(html.DomMatrix, {
@@ -55569,8 +55569,8 @@
   static _create_1() {
     return new DOMParser();
   }
-  [dartx.parseFromString](str, type) {
-    return this.parseFromString(str, type);
+  [dartx.parseFromString](...args) {
+    return this.parseFromString.apply(this, args);
   }
 };
 dart.setSignature(html.DomParser, {
@@ -55889,20 +55889,20 @@
   get [dartx.length]() {
     return this.length;
   }
-  [dartx.add](tokens) {
-    return this.add(tokens);
+  [dartx.add](...args) {
+    return this.add.apply(this, args);
   }
-  [dartx.contains](token) {
-    return this.contains(token);
+  [dartx.contains](...args) {
+    return this.contains.apply(this, args);
   }
-  [dartx.item](index) {
-    return this.item(index);
+  [dartx.item](...args) {
+    return this.item.apply(this, args);
   }
-  [dartx.remove](tokens) {
-    return this.remove(tokens);
+  [dartx.remove](...args) {
+    return this.remove.apply(this, args);
   }
-  [dartx.toggle](token, force) {
-    return this.toggle(token, force);
+  [dartx.toggle](...args) {
+    return this.toggle.apply(this, args);
   }
 };
 dart.setSignature(html.DomTokenList, {
@@ -56127,11 +56127,11 @@
   [dartx.elementAt](index) {
     return this[dartx._get](index);
   }
-  [__getter__](index) {
-    return this.__getter__(index);
+  [__getter__](...args) {
+    return this.__getter__.apply(this, args);
   }
-  [dartx.item](index) {
-    return this.item(index);
+  [dartx.item](...args) {
+    return this.item.apply(this, args);
   }
 };
 html.DomStringList[dart.implements] = () => [ListOfString()];
@@ -56855,11 +56855,11 @@
   set [dartx.width](value) {
     this.width = value;
   }
-  [__getter__](index_OR_name) {
-    return this.__getter__(index_OR_name);
+  [__getter__](...args) {
+    return this.__getter__.apply(this, args);
   }
-  [__setter__](index_OR_name, value) {
-    return this.__setter__(index_OR_name, value);
+  [__setter__](...args) {
+    return this.__setter__.apply(this, args);
   }
 };
 dart.defineNamedConstructor(html.EmbedElement, 'created');
@@ -56987,8 +56987,8 @@
   get [dartx.withCredentials]() {
     return this.withCredentials;
   }
-  [dartx.close]() {
-    return this.close();
+  [dartx.close](...args) {
+    return this.close.apply(this, args);
   }
   get [dartx.onError]() {
     return html.EventSource.errorEvent.forTarget(this);
@@ -57103,8 +57103,8 @@
   static _create_2(type) {
     return new ExtendableEvent(type);
   }
-  [dartx.waitUntil](value) {
-    return this.waitUntil(value);
+  [dartx.waitUntil](...args) {
+    return this.waitUntil.apply(this, args);
   }
 };
 dart.setSignature(html.ExtendableEvent, {
@@ -57184,8 +57184,8 @@
   get [dartx.request]() {
     return this.request;
   }
-  [dartx.respondWith](value) {
-    return this.respondWith(value);
+  [dartx.respondWith](...args) {
+    return this.respondWith.apply(this, args);
   }
 };
 dart.setSignature(html.FetchEvent, {
@@ -57266,14 +57266,14 @@
   get [dartx.willValidate]() {
     return this.willValidate;
   }
-  [dartx.checkValidity]() {
-    return this.checkValidity();
+  [dartx.checkValidity](...args) {
+    return this.checkValidity.apply(this, args);
   }
-  [dartx.reportValidity]() {
-    return this.reportValidity();
+  [dartx.reportValidity](...args) {
+    return this.reportValidity.apply(this, args);
   }
-  [dartx.setCustomValidity](error) {
-    return this.setCustomValidity(error);
+  [dartx.setCustomValidity](...args) {
+    return this.setCustomValidity.apply(this, args);
   }
 };
 dart.defineNamedConstructor(html.FieldSetElement, 'created');
@@ -57371,8 +57371,8 @@
   static _() {
     dart.throw(new core.UnsupportedError("Not supported"));
   }
-  [_createWriter](successCallback, errorCallback) {
-    return this.createWriter(successCallback, errorCallback);
+  [_createWriter](...args) {
+    return this.createWriter.apply(this, args);
   }
   [dartx.createWriter]() {
     let completer = CompleterOfFileWriter().new();
@@ -57383,8 +57383,8 @@
     }, FileErrorTovoid()));
     return completer.future;
   }
-  [_file](successCallback, errorCallback) {
-    return this.file(successCallback, errorCallback);
+  [_file](...args) {
+    return this.file.apply(this, args);
   }
   [dartx.file]() {
     let completer = CompleterOfFile().new();
@@ -57501,8 +57501,8 @@
   [dartx.elementAt](index) {
     return this[dartx._get](index);
   }
-  [dartx.item](index) {
-    return this.item(index);
+  [dartx.item](...args) {
+    return this.item.apply(this, args);
   }
 };
 html.FileList[dart.implements] = () => [_js_helper.JavaScriptIndexingBehavior, ListOfFile()];
@@ -57561,17 +57561,17 @@
   get [dartx.readyState]() {
     return this.readyState;
   }
-  [dartx.abort]() {
-    return this.abort();
+  [dartx.abort](...args) {
+    return this.abort.apply(this, args);
   }
-  [dartx.readAsArrayBuffer](blob) {
-    return this.readAsArrayBuffer(blob);
+  [dartx.readAsArrayBuffer](...args) {
+    return this.readAsArrayBuffer.apply(this, args);
   }
-  [dartx.readAsDataUrl](blob) {
-    return this.readAsDataURL(blob);
+  [dartx.readAsDataUrl](...args) {
+    return this.readAsDataURL.apply(this, args);
   }
-  [dartx.readAsText](blob, label) {
-    return this.readAsText(blob, label);
+  [dartx.readAsText](...args) {
+    return this.readAsText.apply(this, args);
   }
   get [dartx.onAbort]() {
     return html.FileReader.abortEvent.forTarget(this);
@@ -57730,17 +57730,17 @@
   get [dartx.readyState]() {
     return this.readyState;
   }
-  [dartx.abort]() {
-    return this.abort();
+  [dartx.abort](...args) {
+    return this.abort.apply(this, args);
   }
-  [dartx.seek](position) {
-    return this.seek(position);
+  [dartx.seek](...args) {
+    return this.seek.apply(this, args);
   }
-  [dartx.truncate](size) {
-    return this.truncate(size);
+  [dartx.truncate](...args) {
+    return this.truncate.apply(this, args);
   }
-  [dartx.write](data) {
-    return this.write(data);
+  [dartx.write](...args) {
+    return this.write.apply(this, args);
   }
   get [dartx.onAbort]() {
     return html.FileWriter.abortEvent.forTarget(this);
@@ -57941,8 +57941,8 @@
   set [dartx.weight](value) {
     this.weight = value;
   }
-  [dartx.load]() {
-    return this.load();
+  [dartx.load](...args) {
+    return this.load.apply(this, args);
   }
 };
 dart.setSignature(html.FontFace, {
@@ -57989,23 +57989,23 @@
   get [dartx.status]() {
     return this.status;
   }
-  [dartx.add](fontFace) {
-    return this.add(fontFace);
+  [dartx.add](...args) {
+    return this.add.apply(this, args);
   }
-  [dartx.check](font, text) {
-    return this.check(font, text);
+  [dartx.check](...args) {
+    return this.check.apply(this, args);
   }
-  [dartx.clear]() {
-    return this.clear();
+  [dartx.clear](...args) {
+    return this.clear.apply(this, args);
   }
-  [dartx.delete](fontFace) {
-    return this.delete(fontFace);
+  [dartx.delete](...args) {
+    return this.delete.apply(this, args);
   }
-  [dartx.forEach](callback, thisArg) {
-    return this.forEach(callback, thisArg);
+  [dartx.forEach](...args) {
+    return this.forEach.apply(this, args);
   }
-  [dartx.has](fontFace) {
-    return this.has(fontFace);
+  [dartx.has](...args) {
+    return this.has.apply(this, args);
   }
 };
 dart.setSignature(html.FontFaceSet, {
@@ -58070,26 +58070,26 @@
   static get supported() {
     return !!window.FormData;
   }
-  [dartx.append](name, value) {
-    return this.append(name, value);
+  [dartx.append](...args) {
+    return this.append.apply(this, args);
   }
-  [dartx.appendBlob](name, value, filename) {
-    return this.append(name, value, filename);
+  [dartx.appendBlob](...args) {
+    return this.append.apply(this, args);
   }
-  [dartx.delete](name) {
-    return this.delete(name);
+  [dartx.delete](...args) {
+    return this.delete.apply(this, args);
   }
-  [dartx.get](name) {
-    return this.get(name);
+  [dartx.get](...args) {
+    return this.get.apply(this, args);
   }
-  [dartx.getAll](name) {
-    return this.getAll(name);
+  [dartx.getAll](...args) {
+    return this.getAll.apply(this, args);
   }
-  [dartx.has](name) {
-    return this.has(name);
+  [dartx.has](...args) {
+    return this.has.apply(this, args);
   }
-  [dartx.set](name, value, filename) {
-    return this.set(name, value, filename);
+  [dartx.set](...args) {
+    return this.set.apply(this, args);
   }
 };
 dart.setSignature(html.FormData, {
@@ -58210,31 +58210,31 @@
   set [dartx.target](value) {
     this.target = value;
   }
-  [__getter__](name) {
-    return this.__getter__(name);
+  [__getter__](...args) {
+    return this.__getter__.apply(this, args);
   }
-  [dartx.checkValidity]() {
-    return this.checkValidity();
+  [dartx.checkValidity](...args) {
+    return this.checkValidity.apply(this, args);
   }
-  [dartx.item](index) {
-    return this.item(index);
+  [dartx.item](...args) {
+    return this.item.apply(this, args);
   }
-  [dartx.reportValidity]() {
-    return this.reportValidity();
+  [dartx.reportValidity](...args) {
+    return this.reportValidity.apply(this, args);
   }
   [dartx.requestAutocomplete](details) {
     let details_1 = html_common.convertDartToNative_Dictionary(details);
     this[_requestAutocomplete_1](details_1);
     return;
   }
-  [_requestAutocomplete_1](details) {
-    return this.requestAutocomplete(details);
+  [_requestAutocomplete_1](...args) {
+    return this.requestAutocomplete.apply(this, args);
   }
-  [dartx.reset]() {
-    return this.reset();
+  [dartx.reset](...args) {
+    return this.reset.apply(this, args);
   }
-  [dartx.submit]() {
-    return this.submit();
+  [dartx.submit](...args) {
+    return this.submit.apply(this, args);
   }
 };
 dart.defineNamedConstructor(html.FormElement, 'created');
@@ -58387,14 +58387,14 @@
   static _() {
     dart.throw(new core.UnsupportedError("Not supported"));
   }
-  [dartx.getRegisteredRegions]() {
-    return this.getRegisteredRegions();
+  [dartx.getRegisteredRegions](...args) {
+    return this.getRegisteredRegions.apply(this, args);
   }
-  [dartx.registerRegion](region) {
-    return this.registerRegion(region);
+  [dartx.registerRegion](...args) {
+    return this.registerRegion.apply(this, args);
   }
-  [dartx.unregisterRegion](regionId) {
-    return this.unregisterRegion(regionId);
+  [dartx.unregisterRegion](...args) {
+    return this.unregisterRegion.apply(this, args);
   }
 };
 dart.setSignature(html.Geofencing, {
@@ -58514,8 +58514,8 @@
   static _() {
     dart.throw(new core.UnsupportedError("Not supported"));
   }
-  [_clearWatch](watchID) {
-    return this.clearWatch(watchID);
+  [_clearWatch](...args) {
+    return this.clearWatch.apply(this, args);
   }
   [_getCurrentPosition](successCallback, errorCallback, options) {
     if (errorCallback === void 0) errorCallback = null;
@@ -58532,14 +58532,14 @@
     this[_getCurrentPosition_3](successCallback);
     return;
   }
-  [_getCurrentPosition_1](successCallback, errorCallback, options) {
-    return this.getCurrentPosition(successCallback, errorCallback, options);
+  [_getCurrentPosition_1](...args) {
+    return this.getCurrentPosition.apply(this, args);
   }
-  [_getCurrentPosition_2](successCallback, errorCallback) {
-    return this.getCurrentPosition(successCallback, errorCallback);
+  [_getCurrentPosition_2](...args) {
+    return this.getCurrentPosition.apply(this, args);
   }
-  [_getCurrentPosition_3](successCallback) {
-    return this.getCurrentPosition(successCallback);
+  [_getCurrentPosition_3](...args) {
+    return this.getCurrentPosition.apply(this, args);
   }
   [_watchPosition](successCallback, errorCallback, options) {
     if (errorCallback === void 0) errorCallback = null;
@@ -58553,14 +58553,14 @@
     }
     return this[_watchPosition_3](successCallback);
   }
-  [_watchPosition_1](successCallback, errorCallback, options) {
-    return this.watchPosition(successCallback, errorCallback, options);
+  [_watchPosition_1](...args) {
+    return this.watchPosition.apply(this, args);
   }
-  [_watchPosition_2](successCallback, errorCallback) {
-    return this.watchPosition(successCallback, errorCallback);
+  [_watchPosition_2](...args) {
+    return this.watchPosition.apply(this, args);
   }
-  [_watchPosition_3](successCallback) {
-    return this.watchPosition(successCallback);
+  [_watchPosition_3](...args) {
+    return this.watchPosition.apply(this, args);
   }
 };
 dart.setSignature(html.Geolocation, {
@@ -59231,8 +59231,8 @@
   get [dartx.oldUrl]() {
     return this.oldURL;
   }
-  [_initHashChangeEvent](type, canBubble, cancelable, oldURL, newURL) {
-    return this.initHashChangeEvent(type, canBubble, cancelable, oldURL, newURL);
+  [_initHashChangeEvent](...args) {
+    return this.initHashChangeEvent.apply(this, args);
   }
 };
 dart.setSignature(html.HashChangeEvent, {
@@ -59399,14 +59399,14 @@
   get [_get_state]() {
     return this.state;
   }
-  [dartx.back]() {
-    return this.back();
+  [dartx.back](...args) {
+    return this.back.apply(this, args);
   }
-  [dartx.forward]() {
-    return this.forward();
+  [dartx.forward](...args) {
+    return this.forward.apply(this, args);
   }
-  [dartx.go](delta) {
-    return this.go(delta);
+  [dartx.go](...args) {
+    return this.go.apply(this, args);
   }
   [dartx.pushState](data, title, url, options) {
     if (options === void 0) options = null;
@@ -59420,11 +59420,11 @@
     this[_pushState_2](data_1, title, url);
     return;
   }
-  [_pushState_1](data, title, url, options) {
-    return this.pushState(data, title, url, options);
+  [_pushState_1](...args) {
+    return this.pushState.apply(this, args);
   }
-  [_pushState_2](data, title, url) {
-    return this.pushState(data, title, url);
+  [_pushState_2](...args) {
+    return this.pushState.apply(this, args);
   }
   [dartx.replaceState](data, title, url, options) {
     if (options === void 0) options = null;
@@ -59438,11 +59438,11 @@
     this[_replaceState_2](data_1, title, url);
     return;
   }
-  [_replaceState_1](data, title, url, options) {
-    return this.replaceState(data, title, url, options);
+  [_replaceState_1](...args) {
+    return this.replaceState.apply(this, args);
   }
-  [_replaceState_2](data, title, url) {
-    return this.replaceState(data, title, url);
+  [_replaceState_2](...args) {
+    return this.replaceState.apply(this, args);
   }
 };
 html.History[dart.implements] = () => [html.HistoryBase];
@@ -59507,11 +59507,11 @@
   static _() {
     dart.throw(new core.UnsupportedError("Not supported"));
   }
-  [dartx.getEyeParameters](whichEye) {
-    return this.getEyeParameters(whichEye);
+  [dartx.getEyeParameters](...args) {
+    return this.getEyeParameters.apply(this, args);
   }
-  [dartx.setFieldOfView](leftFov, rightFov) {
-    return this.setFieldOfView(leftFov, rightFov);
+  [dartx.setFieldOfView](...args) {
+    return this.setFieldOfView.apply(this, args);
   }
 };
 dart.setSignature(html.HmdvrDevice, {
@@ -59576,11 +59576,11 @@
   [dartx.elementAt](index) {
     return this[dartx._get](index);
   }
-  [dartx.item](index) {
-    return this.item(index);
+  [dartx.item](...args) {
+    return this.item.apply(this, args);
   }
-  [dartx.namedItem](name) {
-    return this.namedItem(name);
+  [dartx.namedItem](...args) {
+    return this.namedItem.apply(this, args);
   }
 };
 html.HtmlCollection[dart.implements] = () => [_js_helper.JavaScriptIndexingBehavior, ListOfNode()];
@@ -59746,11 +59746,11 @@
   static _() {
     dart.throw(new core.UnsupportedError("Not supported"));
   }
-  [dartx.item](index) {
-    return this.item(index);
+  [dartx.item](...args) {
+    return this.item.apply(this, args);
   }
-  [dartx.namedItem](name) {
-    return this.namedItem(name);
+  [dartx.namedItem](...args) {
+    return this.namedItem.apply(this, args);
   }
 };
 dart.setSignature(html.HtmlFormControlsCollection, {
@@ -59782,8 +59782,8 @@
   static _() {
     dart.throw(new core.UnsupportedError("Not supported"));
   }
-  [_item](index) {
-    return this.item(index);
+  [_item](...args) {
+    return this.item.apply(this, args);
   }
 };
 dart.setSignature(html.HtmlOptionsCollection, {
@@ -60036,8 +60036,8 @@
     }
     return headers;
   }
-  [dartx.open](method, url, opts) {
-    return this.open(method, url, opts);
+  [dartx.open](...args) {
+    return this.open.apply(this, args);
   }
   static _() {
     dart.throw(new core.UnsupportedError("Not supported"));
@@ -60093,23 +60093,23 @@
   set [dartx.withCredentials](value) {
     this.withCredentials = value;
   }
-  [dartx.abort]() {
-    return this.abort();
+  [dartx.abort](...args) {
+    return this.abort.apply(this, args);
   }
-  [dartx.getAllResponseHeaders]() {
-    return this.getAllResponseHeaders();
+  [dartx.getAllResponseHeaders](...args) {
+    return this.getAllResponseHeaders.apply(this, args);
   }
-  [dartx.getResponseHeader](name) {
-    return this.getResponseHeader(name);
+  [dartx.getResponseHeader](...args) {
+    return this.getResponseHeader.apply(this, args);
   }
-  [dartx.overrideMimeType](mime) {
-    return this.overrideMimeType(mime);
+  [dartx.overrideMimeType](...args) {
+    return this.overrideMimeType.apply(this, args);
   }
-  [dartx.send](body_OR_data) {
-    return this.send(body_OR_data);
+  [dartx.send](...args) {
+    return this.send.apply(this, args);
   }
-  [dartx.setRequestHeader](name, value) {
-    return this.setRequestHeader(name, value);
+  [dartx.setRequestHeader](...args) {
+    return this.setRequestHeader.apply(this, args);
   }
   get [dartx.onReadyStateChange]() {
     return html.HttpRequest.readyStateChangeEvent.forTarget(this);
@@ -60511,8 +60511,8 @@
   static _() {
     dart.throw(new core.UnsupportedError("Not supported"));
   }
-  [dartx.inspect](objectId, hints) {
-    return this.inspect(objectId, hints);
+  [dartx.inspect](...args) {
+    return this.inspect.apply(this, args);
   }
 };
 dart.setSignature(html.InjectedScriptHost, {
@@ -60975,29 +60975,29 @@
   get [dartx.willValidate]() {
     return this.willValidate;
   }
-  [dartx.checkValidity]() {
-    return this.checkValidity();
+  [dartx.checkValidity](...args) {
+    return this.checkValidity.apply(this, args);
   }
-  [dartx.reportValidity]() {
-    return this.reportValidity();
+  [dartx.reportValidity](...args) {
+    return this.reportValidity.apply(this, args);
   }
-  [dartx.select]() {
-    return this.select();
+  [dartx.select](...args) {
+    return this.select.apply(this, args);
   }
-  [dartx.setCustomValidity](error) {
-    return this.setCustomValidity(error);
+  [dartx.setCustomValidity](...args) {
+    return this.setCustomValidity.apply(this, args);
   }
-  [dartx.setRangeText](replacement, opts) {
-    return this.setRangeText(replacement, opts);
+  [dartx.setRangeText](...args) {
+    return this.setRangeText.apply(this, args);
   }
-  [dartx.setSelectionRange](start, end, direction) {
-    return this.setSelectionRange(start, end, direction);
+  [dartx.setSelectionRange](...args) {
+    return this.setSelectionRange.apply(this, args);
   }
-  [dartx.stepDown](n) {
-    return this.stepDown(n);
+  [dartx.stepDown](...args) {
+    return this.stepDown.apply(this, args);
   }
-  [dartx.stepUp](n) {
-    return this.stepUp(n);
+  [dartx.stepUp](...args) {
+    return this.stepUp.apply(this, args);
   }
 };
 dart.defineNamedConstructor(html.InputElement, 'created');
@@ -62292,8 +62292,8 @@
   get [dartx.shiftKey]() {
     return this.shiftKey;
   }
-  [dartx.getModifierState](keyArg) {
-    return this.getModifierState(keyArg);
+  [dartx.getModifierState](...args) {
+    return this.getModifierState.apply(this, args);
   }
 };
 dart.setSignature(html.KeyboardEvent, {
@@ -62468,14 +62468,14 @@
   get [dartx.willValidate]() {
     return this.willValidate;
   }
-  [dartx.checkValidity]() {
-    return this.checkValidity();
+  [dartx.checkValidity](...args) {
+    return this.checkValidity.apply(this, args);
   }
-  [dartx.reportValidity]() {
-    return this.reportValidity();
+  [dartx.reportValidity](...args) {
+    return this.reportValidity.apply(this, args);
   }
-  [dartx.setCustomValidity](error) {
-    return this.setCustomValidity(error);
+  [dartx.setCustomValidity](...args) {
+    return this.setCustomValidity.apply(this, args);
   }
 };
 dart.defineNamedConstructor(html.KeygenElement, 'created');
@@ -62800,14 +62800,14 @@
   set [dartx.search](value) {
     this.search = value;
   }
-  [dartx.assign](url) {
-    return this.assign(url);
+  [dartx.assign](...args) {
+    return this.assign.apply(this, args);
   }
-  [dartx.reload]() {
-    return this.reload();
+  [dartx.reload](...args) {
+    return this.reload.apply(this, args);
   }
-  [dartx.replace](url) {
-    return this.replace(url);
+  [dartx.replace](...args) {
+    return this.replace.apply(this, args);
   }
   get [dartx.origin]() {
     if ("origin" in this) {
@@ -62954,14 +62954,14 @@
   set [dartx.volume](value) {
     this.volume = value;
   }
-  [dartx.pause]() {
-    return this.pause();
+  [dartx.pause](...args) {
+    return this.pause.apply(this, args);
   }
-  [dartx.play]() {
-    return this.play();
+  [dartx.play](...args) {
+    return this.play.apply(this, args);
   }
-  [dartx.unpause]() {
-    return this.unpause();
+  [dartx.unpause](...args) {
+    return this.unpause.apply(this, args);
   }
 };
 dart.setSignature(html.MediaController, {
@@ -63033,15 +63033,15 @@
   static _() {
     dart.throw(new core.UnsupportedError("Not supported"));
   }
-  [dartx.enumerateDevices]() {
-    return this.enumerateDevices();
+  [dartx.enumerateDevices](...args) {
+    return this.enumerateDevices.apply(this, args);
   }
   [dartx.getUserMedia](options) {
     let options_1 = html_common.convertDartToNative_Dictionary(options);
     return this[_getUserMedia_1](options_1);
   }
-  [_getUserMedia_1](options) {
-    return this.getUserMedia(options);
+  [_getUserMedia_1](...args) {
+    return this.getUserMedia.apply(this, args);
   }
 };
 dart.setSignature(html.MediaDevices, {
@@ -63303,20 +63303,20 @@
   get [dartx.sessionId]() {
     return this.sessionId;
   }
-  [dartx.close]() {
-    return this.close();
+  [dartx.close](...args) {
+    return this.close.apply(this, args);
   }
-  [dartx.generateRequest](initDataType, initData) {
-    return this.generateRequest(initDataType, initData);
+  [dartx.generateRequest](...args) {
+    return this.generateRequest.apply(this, args);
   }
-  [dartx.load](sessionId) {
-    return this.load(sessionId);
+  [dartx.load](...args) {
+    return this.load.apply(this, args);
   }
-  [dartx.remove]() {
-    return this.remove();
+  [dartx.remove](...args) {
+    return this.remove.apply(this, args);
   }
-  [_update](response) {
-    return this.update(response);
+  [_update](...args) {
+    return this.update.apply(this, args);
   }
 };
 dart.setSignature(html.MediaKeySession, {
@@ -63365,14 +63365,14 @@
   get [dartx.keySystem]() {
     return this.keySystem;
   }
-  [dartx.createMediaKeys]() {
-    return this.createMediaKeys();
+  [dartx.createMediaKeys](...args) {
+    return this.createMediaKeys.apply(this, args);
   }
   [dartx.getConfiguration]() {
     return html_common.convertNativeToDart_Dictionary(this[_getConfiguration_1]());
   }
-  [_getConfiguration_1]() {
-    return this.getConfiguration();
+  [_getConfiguration_1](...args) {
+    return this.getConfiguration.apply(this, args);
   }
 };
 dart.setSignature(html.MediaKeySystemAccess, {
@@ -63393,11 +63393,11 @@
   static _() {
     dart.throw(new core.UnsupportedError("Not supported"));
   }
-  [_createSession](sessionType) {
-    return this.createSession(sessionType);
+  [_createSession](...args) {
+    return this.createSession.apply(this, args);
   }
-  [dartx.setServerCertificate](serverCertificate) {
-    return this.setServerCertificate(serverCertificate);
+  [dartx.setServerCertificate](...args) {
+    return this.setServerCertificate.apply(this, args);
   }
 };
 dart.setSignature(html.MediaKeys, {
@@ -63428,14 +63428,14 @@
   set [dartx.mediaText](value) {
     this.mediaText = value;
   }
-  [dartx.appendMedium](medium) {
-    return this.appendMedium(medium);
+  [dartx.appendMedium](...args) {
+    return this.appendMedium.apply(this, args);
   }
-  [dartx.deleteMedium](medium) {
-    return this.deleteMedium(medium);
+  [dartx.deleteMedium](...args) {
+    return this.deleteMedium.apply(this, args);
   }
-  [dartx.item](index) {
-    return this.item(index);
+  [dartx.item](...args) {
+    return this.item.apply(this, args);
   }
 };
 dart.setSignature(html.MediaList, {
@@ -63468,11 +63468,11 @@
   get [dartx.media]() {
     return this.media;
   }
-  [dartx.addListener](listener) {
-    return this.addListener(listener);
+  [dartx.addListener](...args) {
+    return this.addListener.apply(this, args);
   }
-  [dartx.removeListener](listener) {
-    return this.removeListener(listener);
+  [dartx.removeListener](...args) {
+    return this.removeListener.apply(this, args);
   }
   get [dartx.onChange]() {
     return html.MediaQueryList.changeEvent.forTarget(this);
@@ -63556,11 +63556,11 @@
   static _create_1() {
     return new MediaSession();
   }
-  [dartx.activate]() {
-    return this.activate();
+  [dartx.activate](...args) {
+    return this.activate.apply(this, args);
   }
-  [dartx.deactivate]() {
-    return this.deactivate();
+  [dartx.deactivate](...args) {
+    return this.deactivate.apply(this, args);
   }
 };
 dart.setSignature(html.MediaSession, {
@@ -63613,14 +63613,14 @@
   get [dartx.sourceBuffers]() {
     return this.sourceBuffers;
   }
-  [dartx.addSourceBuffer](type) {
-    return this.addSourceBuffer(type);
+  [dartx.addSourceBuffer](...args) {
+    return this.addSourceBuffer.apply(this, args);
   }
-  [dartx.endOfStream](error) {
-    return this.endOfStream(error);
+  [dartx.endOfStream](...args) {
+    return this.endOfStream.apply(this, args);
   }
-  [dartx.removeSourceBuffer](buffer) {
-    return this.removeSourceBuffer(buffer);
+  [dartx.removeSourceBuffer](...args) {
+    return this.removeSourceBuffer.apply(this, args);
   }
 };
 dart.setSignature(html.MediaSource, {
@@ -63702,29 +63702,29 @@
   get [dartx.label]() {
     return this.label;
   }
-  [dartx.addTrack](track) {
-    return this.addTrack(track);
+  [dartx.addTrack](...args) {
+    return this.addTrack.apply(this, args);
   }
-  [dartx.clone]() {
-    return this.clone();
+  [dartx.clone](...args) {
+    return this.clone.apply(this, args);
   }
-  [dartx.getAudioTracks]() {
-    return this.getAudioTracks();
+  [dartx.getAudioTracks](...args) {
+    return this.getAudioTracks.apply(this, args);
   }
-  [dartx.getTrackById](trackId) {
-    return this.getTrackById(trackId);
+  [dartx.getTrackById](...args) {
+    return this.getTrackById.apply(this, args);
   }
-  [dartx.getTracks]() {
-    return this.getTracks();
+  [dartx.getTracks](...args) {
+    return this.getTracks.apply(this, args);
   }
-  [dartx.getVideoTracks]() {
-    return this.getVideoTracks();
+  [dartx.getVideoTracks](...args) {
+    return this.getVideoTracks.apply(this, args);
   }
-  [dartx.removeTrack](track) {
-    return this.removeTrack(track);
+  [dartx.removeTrack](...args) {
+    return this.removeTrack.apply(this, args);
   }
-  [dartx.stop]() {
-    return this.stop();
+  [dartx.stop](...args) {
+    return this.stop.apply(this, args);
   }
   get [dartx.onAddTrack]() {
     return html.MediaStream.addTrackEvent.forTarget(this);
@@ -63870,8 +63870,8 @@
   get [dartx.readyState]() {
     return this.readyState;
   }
-  [dartx.clone]() {
-    return this.clone();
+  [dartx.clone](...args) {
+    return this.clone.apply(this, args);
   }
   static getSources() {
     let completer = CompleterOfListOfSourceInfo().new();
@@ -63880,8 +63880,8 @@
     }, ListOfSourceInfoTovoid()));
     return completer.future;
   }
-  [dartx.stop]() {
-    return this.stop();
+  [dartx.stop](...args) {
+    return this.stop.apply(this, args);
   }
   get [dartx.onEnded]() {
     return html.MediaStreamTrack.endedEvent.forTarget(this);
@@ -64192,8 +64192,8 @@
   get [_get_source]() {
     return this.source;
   }
-  [_initMessageEvent](typeArg, canBubbleArg, cancelableArg, dataArg, originArg, lastEventIdArg, sourceArg, portsArg) {
-    return this.initMessageEvent(typeArg, canBubbleArg, cancelableArg, dataArg, originArg, lastEventIdArg, sourceArg, portsArg);
+  [_initMessageEvent](...args) {
+    return this.initMessageEvent.apply(this, args);
   }
 };
 dart.setSignature(html.MessageEvent, {
@@ -64229,8 +64229,8 @@
   static _() {
     dart.throw(new core.UnsupportedError("Not supported"));
   }
-  [dartx.close]() {
-    return this.close();
+  [dartx.close](...args) {
+    return this.close.apply(this, args);
   }
   [dartx.postMessage](message, transfer) {
     if (transfer === void 0) transfer = null;
@@ -64243,14 +64243,14 @@
     this[_postMessage_2](message_1);
     return;
   }
-  [_postMessage_1](message, transfer) {
-    return this.postMessage(message, transfer);
+  [_postMessage_1](...args) {
+    return this.postMessage.apply(this, args);
   }
-  [_postMessage_2](message) {
-    return this.postMessage(message);
+  [_postMessage_2](...args) {
+    return this.postMessage.apply(this, args);
   }
-  [dartx.start]() {
-    return this.start();
+  [dartx.start](...args) {
+    return this.start.apply(this, args);
   }
   get [dartx.onMessage]() {
     return html.MessagePort.messageEvent.forTarget(this);
@@ -64544,11 +64544,11 @@
   get [dartx.version]() {
     return this.version;
   }
-  [dartx.close]() {
-    return this.close();
+  [dartx.close](...args) {
+    return this.close.apply(this, args);
   }
-  [dartx.open]() {
-    return this.open();
+  [dartx.open](...args) {
+    return this.open.apply(this, args);
   }
 };
 dart.setSignature(html.MidiPort, {
@@ -64658,8 +64658,8 @@
   static _() {
     dart.throw(new core.UnsupportedError("Not supported"));
   }
-  [dartx.send](data, timestamp) {
-    return this.send(data, timestamp);
+  [dartx.send](...args) {
+    return this.send.apply(this, args);
   }
 };
 dart.setSignature(html.MidiOutput, {
@@ -64770,11 +64770,11 @@
   [dartx.elementAt](index) {
     return this[dartx._get](index);
   }
-  [dartx.item](index) {
-    return this.item(index);
+  [dartx.item](...args) {
+    return this.item.apply(this, args);
   }
-  [dartx.namedItem](name) {
-    return this.namedItem(name);
+  [dartx.namedItem](...args) {
+    return this.namedItem.apply(this, args);
   }
 };
 html.MimeTypeArray[dart.implements] = () => [_js_helper.JavaScriptIndexingBehavior, ListOfMimeType()];
@@ -64981,8 +64981,8 @@
     this[_initMouseEvent_1](type, bubbles, cancelable, view, detail, screenX, screenY, clientX, clientY, ctrlKey, altKey, shiftKey, metaKey, button, relatedTarget_1);
     return;
   }
-  [_initMouseEvent_1](type, bubbles, cancelable, view, detail, screenX, screenY, clientX, clientY, ctrlKey, altKey, shiftKey, metaKey, button, relatedTarget) {
-    return this.initMouseEvent(type, bubbles, cancelable, view, detail, screenX, screenY, clientX, clientY, ctrlKey, altKey, shiftKey, metaKey, button, relatedTarget);
+  [_initMouseEvent_1](...args) {
+    return this.initMouseEvent.apply(this, args);
   }
   get [dartx.client]() {
     return new (PointOfnum())(this[_clientX], this[_clientY]);
@@ -65075,19 +65075,19 @@
   'observe'
 ]);
 html.MutationObserver = class MutationObserver extends _interceptors.Interceptor {
-  [dartx.disconnect]() {
-    return this.disconnect();
+  [dartx.disconnect](...args) {
+    return this.disconnect.apply(this, args);
   }
   [_observe](target, options) {
     let options_1 = html_common.convertDartToNative_Dictionary(options);
     this[_observe_1](target, options_1);
     return;
   }
-  [_observe_1](target, options) {
-    return this.observe(target, options);
+  [_observe_1](...args) {
+    return this.observe.apply(this, args);
   }
-  [dartx.takeRecords]() {
-    return this.takeRecords();
+  [dartx.takeRecords](...args) {
+    return this.takeRecords.apply(this, args);
   }
   static get supported() {
     return !!(window.MutationObserver || window.WebKitMutationObserver);
@@ -65125,8 +65125,8 @@
   static _fixupList(list) {
     return list;
   }
-  [_call](target, options) {
-    return this.observe(target, options);
+  [_call](...args) {
+    return this.observe.apply(this, args);
   }
   static new(callback) {
     0;
@@ -65280,8 +65280,8 @@
       this.getUserMedia = this.getUserMedia || this.webkitGetUserMedia || this.mozGetUserMedia || this.msGetUserMedia;
     }
   }
-  [_getUserMedia](options, success, error) {
-    return this.getUserMedia(options, success, error);
+  [_getUserMedia](...args) {
+    return this.getUserMedia.apply(this, args);
   }
   static _() {
     dart.throw(new core.UnsupportedError("Not supported"));
@@ -65340,17 +65340,17 @@
   get [dartx.temporaryStorage]() {
     return this.webkitTemporaryStorage;
   }
-  [dartx.getBattery]() {
-    return this.getBattery();
+  [dartx.getBattery](...args) {
+    return this.getBattery.apply(this, args);
   }
-  [dartx.getGamepads]() {
-    return this.getGamepads();
+  [dartx.getGamepads](...args) {
+    return this.getGamepads.apply(this, args);
   }
-  [dartx.getVRDevices]() {
-    return this.getVRDevices();
+  [dartx.getVRDevices](...args) {
+    return this.getVRDevices.apply(this, args);
   }
-  [dartx.registerProtocolHandler](scheme, url, title) {
-    return this.registerProtocolHandler(scheme, url, title);
+  [dartx.registerProtocolHandler](...args) {
+    return this.registerProtocolHandler.apply(this, args);
   }
   [dartx.requestMidiAccess](options) {
     if (options === void 0) options = null;
@@ -65360,17 +65360,17 @@
     }
     return this[_requestMidiAccess_2]();
   }
-  [_requestMidiAccess_1](options) {
-    return this.requestMIDIAccess(options);
+  [_requestMidiAccess_1](...args) {
+    return this.requestMIDIAccess.apply(this, args);
   }
-  [_requestMidiAccess_2]() {
-    return this.requestMIDIAccess();
+  [_requestMidiAccess_2](...args) {
+    return this.requestMIDIAccess.apply(this, args);
   }
-  [dartx.requestMediaKeySystemAccess](keySystem, supportedConfigurations) {
-    return this.requestMediaKeySystemAccess(keySystem, supportedConfigurations);
+  [dartx.requestMediaKeySystemAccess](...args) {
+    return this.requestMediaKeySystemAccess.apply(this, args);
   }
-  [dartx.sendBeacon](url, data) {
-    return this.sendBeacon(url, data);
+  [dartx.sendBeacon](...args) {
+    return this.sendBeacon.apply(this, args);
   }
   get [dartx.hardwareConcurrency]() {
     return this.hardwareConcurrency;
@@ -65405,8 +65405,8 @@
   get [dartx.cookieEnabled]() {
     return this.cookieEnabled;
   }
-  [dartx.getStorageUpdates]() {
-    return this.getStorageUpdates();
+  [dartx.getStorageUpdates](...args) {
+    return this.getStorageUpdates.apply(this, args);
   }
 };
 html.Navigator[dart.implements] = () => [html.NavigatorStorageUtils, html.NavigatorCpu, html.NavigatorLanguage, html.NavigatorOnLine, html.NavigatorID];
@@ -65627,8 +65627,8 @@
   get [dartx.cookieEnabled]() {
     return this.cookieEnabled;
   }
-  [dartx.getStorageUpdates]() {
-    return this.getStorageUpdates();
+  [dartx.getStorageUpdates](...args) {
+    return this.getStorageUpdates.apply(this, args);
   }
 };
 dart.setSignature(html.NavigatorStorageUtils, {
@@ -65935,14 +65935,14 @@
   get [dartx.whatToShow]() {
     return this.whatToShow;
   }
-  [dartx.detach]() {
-    return this.detach();
+  [dartx.detach](...args) {
+    return this.detach.apply(this, args);
   }
-  [dartx.nextNode]() {
-    return this.nextNode();
+  [dartx.nextNode](...args) {
+    return this.nextNode.apply(this, args);
   }
-  [dartx.previousNode]() {
-    return this.previousNode();
+  [dartx.previousNode](...args) {
+    return this.previousNode.apply(this, args);
   }
 };
 dart.setSignature(html.NodeIterator, {
@@ -66015,8 +66015,8 @@
   [dartx.elementAt](index) {
     return this[dartx._get](index);
   }
-  [_item](index) {
-    return this.item(index);
+  [_item](...args) {
+    return this.item.apply(this, args);
   }
 };
 html.NodeList[dart.implements] = () => [_js_helper.JavaScriptIndexingBehavior, ListOfNode()];
@@ -66068,8 +66068,8 @@
   static _() {
     dart.throw(new core.UnsupportedError("Not supported"));
   }
-  [dartx.getElementById](elementId) {
-    return this.getElementById(elementId);
+  [dartx.getElementById](...args) {
+    return this.getElementById.apply(this, args);
   }
 };
 dart.setSignature(html.NonElementParentNode, {
@@ -66159,8 +66159,8 @@
   get [dartx.vibrate]() {
     return this.vibrate;
   }
-  [dartx.close]() {
-    return this.close();
+  [dartx.close](...args) {
+    return this.close.apply(this, args);
   }
   static requestPermission() {
     let completer = CompleterOfString().new();
@@ -66413,20 +66413,20 @@
   get [dartx.willValidate]() {
     return this.willValidate;
   }
-  [__getter__](index_OR_name) {
-    return this.__getter__(index_OR_name);
+  [__getter__](...args) {
+    return this.__getter__.apply(this, args);
   }
-  [__setter__](index_OR_name, value) {
-    return this.__setter__(index_OR_name, value);
+  [__setter__](...args) {
+    return this.__setter__.apply(this, args);
   }
-  [dartx.checkValidity]() {
-    return this.checkValidity();
+  [dartx.checkValidity](...args) {
+    return this.checkValidity.apply(this, args);
   }
-  [dartx.reportValidity]() {
-    return this.reportValidity();
+  [dartx.reportValidity](...args) {
+    return this.reportValidity.apply(this, args);
   }
-  [dartx.setCustomValidity](error) {
-    return this.setCustomValidity(error);
+  [dartx.setCustomValidity](...args) {
+    return this.setCustomValidity.apply(this, args);
   }
 };
 dart.defineNamedConstructor(html.ObjectElement, 'created');
@@ -66700,14 +66700,14 @@
   get [dartx.willValidate]() {
     return this.willValidate;
   }
-  [dartx.checkValidity]() {
-    return this.checkValidity();
+  [dartx.checkValidity](...args) {
+    return this.checkValidity.apply(this, args);
   }
-  [dartx.reportValidity]() {
-    return this.reportValidity();
+  [dartx.reportValidity](...args) {
+    return this.reportValidity.apply(this, args);
   }
-  [dartx.setCustomValidity](error) {
-    return this.setCustomValidity(error);
+  [dartx.setCustomValidity](...args) {
+    return this.setCustomValidity.apply(this, args);
   }
 };
 dart.defineNamedConstructor(html.OutputElement, 'created');
@@ -66941,35 +66941,35 @@
   static _create_3(path_OR_text) {
     return new Path2D(path_OR_text);
   }
-  [dartx.addPath](path, transform) {
-    return this.addPath(path, transform);
+  [dartx.addPath](...args) {
+    return this.addPath.apply(this, args);
   }
-  [dartx.arc](x, y, radius, startAngle, endAngle, anticlockwise) {
-    return this.arc(x, y, radius, startAngle, endAngle, anticlockwise);
+  [dartx.arc](...args) {
+    return this.arc.apply(this, args);
   }
-  [dartx.arcTo](x1, y1, x2, y2, radius) {
-    return this.arcTo(x1, y1, x2, y2, radius);
+  [dartx.arcTo](...args) {
+    return this.arcTo.apply(this, args);
   }
-  [dartx.bezierCurveTo](cp1x, cp1y, cp2x, cp2y, x, y) {
-    return this.bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y);
+  [dartx.bezierCurveTo](...args) {
+    return this.bezierCurveTo.apply(this, args);
   }
-  [dartx.closePath]() {
-    return this.closePath();
+  [dartx.closePath](...args) {
+    return this.closePath.apply(this, args);
   }
-  [dartx.ellipse](x, y, radiusX, radiusY, rotation, startAngle, endAngle, anticlockwise) {
-    return this.ellipse(x, y, radiusX, radiusY, rotation, startAngle, endAngle, anticlockwise);
+  [dartx.ellipse](...args) {
+    return this.ellipse.apply(this, args);
   }
-  [dartx.lineTo](x, y) {
-    return this.lineTo(x, y);
+  [dartx.lineTo](...args) {
+    return this.lineTo.apply(this, args);
   }
-  [dartx.moveTo](x, y) {
-    return this.moveTo(x, y);
+  [dartx.moveTo](...args) {
+    return this.moveTo.apply(this, args);
   }
-  [dartx.quadraticCurveTo](cpx, cpy, x, y) {
-    return this.quadraticCurveTo(cpx, cpy, x, y);
+  [dartx.quadraticCurveTo](...args) {
+    return this.quadraticCurveTo.apply(this, args);
   }
-  [dartx.rect](x, y, width, height) {
-    return this.rect(x, y, width, height);
+  [dartx.rect](...args) {
+    return this.rect.apply(this, args);
   }
 };
 html.Path2D[dart.implements] = () => [html._CanvasPathMethods];
@@ -67032,41 +67032,41 @@
   get [dartx.timing]() {
     return this.timing;
   }
-  [dartx.clearFrameTimings]() {
-    return this.clearFrameTimings();
+  [dartx.clearFrameTimings](...args) {
+    return this.clearFrameTimings.apply(this, args);
   }
-  [dartx.clearMarks](markName) {
-    return this.clearMarks(markName);
+  [dartx.clearMarks](...args) {
+    return this.clearMarks.apply(this, args);
   }
-  [dartx.clearMeasures](measureName) {
-    return this.clearMeasures(measureName);
+  [dartx.clearMeasures](...args) {
+    return this.clearMeasures.apply(this, args);
   }
-  [dartx.getEntries]() {
-    return this.getEntries();
+  [dartx.getEntries](...args) {
+    return this.getEntries.apply(this, args);
   }
-  [dartx.getEntriesByName](name, entryType) {
-    return this.getEntriesByName(name, entryType);
+  [dartx.getEntriesByName](...args) {
+    return this.getEntriesByName.apply(this, args);
   }
-  [dartx.getEntriesByType](entryType) {
-    return this.getEntriesByType(entryType);
+  [dartx.getEntriesByType](...args) {
+    return this.getEntriesByType.apply(this, args);
   }
-  [dartx.mark](markName) {
-    return this.mark(markName);
+  [dartx.mark](...args) {
+    return this.mark.apply(this, args);
   }
-  [dartx.measure](measureName, startMark, endMark) {
-    return this.measure(measureName, startMark, endMark);
+  [dartx.measure](...args) {
+    return this.measure.apply(this, args);
   }
-  [dartx.now]() {
-    return this.now();
+  [dartx.now](...args) {
+    return this.now.apply(this, args);
   }
-  [dartx.setFrameTimingBufferSize](maxSize) {
-    return this.setFrameTimingBufferSize(maxSize);
+  [dartx.setFrameTimingBufferSize](...args) {
+    return this.setFrameTimingBufferSize.apply(this, args);
   }
-  [dartx.clearResourceTimings]() {
-    return this.webkitClearResourceTimings();
+  [dartx.clearResourceTimings](...args) {
+    return this.webkitClearResourceTimings.apply(this, args);
   }
-  [dartx.setResourceTimingBufferSize](maxSize) {
-    return this.webkitSetResourceTimingBufferSize(maxSize);
+  [dartx.setResourceTimingBufferSize](...args) {
+    return this.webkitSetResourceTimingBufferSize.apply(this, args);
   }
   get [dartx.onResourceTimingBufferFull]() {
     return html.Performance.resourceTimingBufferFullEvent.forTarget(this);
@@ -67459,14 +67459,14 @@
   get [dartx.minPossiblePeriod]() {
     return this.minPossiblePeriod;
   }
-  [dartx.getRegistration](tag) {
-    return this.getRegistration(tag);
+  [dartx.getRegistration](...args) {
+    return this.getRegistration.apply(this, args);
   }
-  [dartx.getRegistrations]() {
-    return this.getRegistrations();
+  [dartx.getRegistrations](...args) {
+    return this.getRegistrations.apply(this, args);
   }
-  [dartx.permissionState]() {
-    return this.permissionState();
+  [dartx.permissionState](...args) {
+    return this.permissionState.apply(this, args);
   }
   [dartx.register](options) {
     if (options === void 0) options = null;
@@ -67476,11 +67476,11 @@
     }
     return this[_register_2]();
   }
-  [_register_1](options) {
-    return this.register(options);
+  [_register_1](...args) {
+    return this.register.apply(this, args);
   }
-  [_register_2]() {
-    return this.register();
+  [_register_2](...args) {
+    return this.register.apply(this, args);
   }
 };
 dart.setSignature(html.PeriodicSyncManager, {
@@ -67519,8 +67519,8 @@
   get [dartx.tag]() {
     return this.tag;
   }
-  [dartx.unregister]() {
-    return this.unregister();
+  [dartx.unregister](...args) {
+    return this.unregister.apply(this, args);
   }
 };
 dart.setSignature(html.PeriodicSyncRegistration, {
@@ -67575,8 +67575,8 @@
   static _() {
     dart.throw(new core.UnsupportedError("Not supported"));
   }
-  [dartx.query](permission) {
-    return this.query(permission);
+  [dartx.query](...args) {
+    return this.query.apply(this, args);
   }
 };
 dart.setSignature(html.Permissions, {
@@ -67624,11 +67624,11 @@
   get [dartx.name]() {
     return this.name;
   }
-  [dartx.item](index) {
-    return this.item(index);
+  [dartx.item](...args) {
+    return this.item.apply(this, args);
   }
-  [dartx.namedItem](name) {
-    return this.namedItem(name);
+  [dartx.namedItem](...args) {
+    return this.namedItem.apply(this, args);
   }
 };
 dart.setSignature(html.Plugin, {
@@ -67700,14 +67700,14 @@
   [dartx.elementAt](index) {
     return this[dartx._get](index);
   }
-  [dartx.item](index) {
-    return this.item(index);
+  [dartx.item](...args) {
+    return this.item.apply(this, args);
   }
-  [dartx.namedItem](name) {
-    return this.namedItem(name);
+  [dartx.namedItem](...args) {
+    return this.namedItem.apply(this, args);
   }
-  [dartx.refresh](reload) {
-    return this.refresh(reload);
+  [dartx.refresh](...args) {
+    return this.refresh.apply(this, args);
   }
 };
 html.PluginArray[dart.implements] = () => [_js_helper.JavaScriptIndexingBehavior, ListOfPlugin()];
@@ -67756,8 +67756,8 @@
   set [dartx.message](value) {
     this.message = value;
   }
-  [dartx.createdCallback]() {
-    return this.createdCallback();
+  [dartx.createdCallback](...args) {
+    return this.createdCallback.apply(this, args);
   }
 };
 dart.defineNamedConstructor(html.PluginPlaceholderElement, 'created');
@@ -67932,14 +67932,14 @@
   static _() {
     dart.throw(new core.UnsupportedError("Not supported"));
   }
-  [dartx.getImmediateState]() {
-    return this.getImmediateState();
+  [dartx.getImmediateState](...args) {
+    return this.getImmediateState.apply(this, args);
   }
-  [dartx.getState]() {
-    return this.getState();
+  [dartx.getState](...args) {
+    return this.getState.apply(this, args);
   }
-  [dartx.resetSensor]() {
-    return this.resetSensor();
+  [dartx.resetSensor](...args) {
+    return this.resetSensor.apply(this, args);
   }
 };
 dart.setSignature(html.PositionSensorVRDevice, {
@@ -67984,14 +67984,14 @@
   get [dartx.session]() {
     return this.session;
   }
-  [dartx.getAvailability](url) {
-    return this.getAvailability(url);
+  [dartx.getAvailability](...args) {
+    return this.getAvailability.apply(this, args);
   }
-  [dartx.joinSession](url, presentationId) {
-    return this.joinSession(url, presentationId);
+  [dartx.joinSession](...args) {
+    return this.joinSession.apply(this, args);
   }
-  [dartx.startSession](url) {
-    return this.startSession(url);
+  [dartx.startSession](...args) {
+    return this.startSession.apply(this, args);
   }
 };
 dart.setSignature(html.Presentation, {
@@ -68055,11 +68055,11 @@
   get [dartx.state]() {
     return this.state;
   }
-  [dartx.close]() {
-    return this.close();
+  [dartx.close](...args) {
+    return this.close.apply(this, args);
   }
-  [dartx.send](data_OR_message) {
-    return this.send(data_OR_message);
+  [dartx.send](...args) {
+    return this.send.apply(this, args);
   }
   get [dartx.onMessage]() {
     return html.PresentationSession.messageEvent.forTarget(this);
@@ -68312,8 +68312,8 @@
   static _() {
     dart.throw(new core.UnsupportedError("Not supported"));
   }
-  [dartx.getSubscription]() {
-    return this.getSubscription();
+  [dartx.getSubscription](...args) {
+    return this.getSubscription.apply(this, args);
   }
   [dartx.permissionState](options) {
     if (options === void 0) options = null;
@@ -68323,11 +68323,11 @@
     }
     return this[_permissionState_2]();
   }
-  [_permissionState_1](options) {
-    return this.permissionState(options);
+  [_permissionState_1](...args) {
+    return this.permissionState.apply(this, args);
   }
-  [_permissionState_2]() {
-    return this.permissionState();
+  [_permissionState_2](...args) {
+    return this.permissionState.apply(this, args);
   }
   [dartx.subscribe](options) {
     if (options === void 0) options = null;
@@ -68337,11 +68337,11 @@
     }
     return this[_subscribe_2]();
   }
-  [_subscribe_1](options) {
-    return this.subscribe(options);
+  [_subscribe_1](...args) {
+    return this.subscribe.apply(this, args);
   }
-  [_subscribe_2]() {
-    return this.subscribe();
+  [_subscribe_2](...args) {
+    return this.subscribe.apply(this, args);
   }
 };
 dart.setSignature(html.PushManager, {
@@ -68373,17 +68373,17 @@
   static _create_1(message) {
     return new PushMessageData(message);
   }
-  [dartx.arrayBuffer]() {
-    return this.arrayBuffer();
+  [dartx.arrayBuffer](...args) {
+    return this.arrayBuffer.apply(this, args);
   }
-  [dartx.blob]() {
-    return this.blob();
+  [dartx.blob](...args) {
+    return this.blob.apply(this, args);
   }
-  [dartx.json]() {
-    return this.json();
+  [dartx.json](...args) {
+    return this.json.apply(this, args);
   }
-  [dartx.text]() {
-    return this.text();
+  [dartx.text](...args) {
+    return this.text.apply(this, args);
   }
 };
 dart.setSignature(html.PushMessageData, {
@@ -68412,8 +68412,8 @@
   get [dartx.endpoint]() {
     return this.endpoint;
   }
-  [dartx.unsubscribe]() {
-    return this.unsubscribe();
+  [dartx.unsubscribe](...args) {
+    return this.unsubscribe.apply(this, args);
   }
 };
 dart.setSignature(html.PushSubscription, {
@@ -68515,74 +68515,74 @@
   get [dartx.startOffset]() {
     return this.startOffset;
   }
-  [dartx.cloneContents]() {
-    return this.cloneContents();
+  [dartx.cloneContents](...args) {
+    return this.cloneContents.apply(this, args);
   }
-  [dartx.cloneRange]() {
-    return this.cloneRange();
+  [dartx.cloneRange](...args) {
+    return this.cloneRange.apply(this, args);
   }
-  [dartx.collapse](toStart) {
-    return this.collapse(toStart);
+  [dartx.collapse](...args) {
+    return this.collapse.apply(this, args);
   }
-  [dartx.compareBoundaryPoints](how, sourceRange) {
-    return this.compareBoundaryPoints(how, sourceRange);
+  [dartx.compareBoundaryPoints](...args) {
+    return this.compareBoundaryPoints.apply(this, args);
   }
-  [dartx.comparePoint](node, offset) {
-    return this.comparePoint(node, offset);
+  [dartx.comparePoint](...args) {
+    return this.comparePoint.apply(this, args);
   }
-  [dartx.createContextualFragment](fragment) {
-    return this.createContextualFragment(fragment);
+  [dartx.createContextualFragment](...args) {
+    return this.createContextualFragment.apply(this, args);
   }
-  [dartx.deleteContents]() {
-    return this.deleteContents();
+  [dartx.deleteContents](...args) {
+    return this.deleteContents.apply(this, args);
   }
-  [dartx.detach]() {
-    return this.detach();
+  [dartx.detach](...args) {
+    return this.detach.apply(this, args);
   }
-  [dartx.expand](unit) {
-    return this.expand(unit);
+  [dartx.expand](...args) {
+    return this.expand.apply(this, args);
   }
-  [dartx.extractContents]() {
-    return this.extractContents();
+  [dartx.extractContents](...args) {
+    return this.extractContents.apply(this, args);
   }
-  [dartx.getBoundingClientRect]() {
-    return this.getBoundingClientRect();
+  [dartx.getBoundingClientRect](...args) {
+    return this.getBoundingClientRect.apply(this, args);
   }
-  [dartx.getClientRects]() {
-    return this.getClientRects();
+  [dartx.getClientRects](...args) {
+    return this.getClientRects.apply(this, args);
   }
-  [dartx.insertNode](node) {
-    return this.insertNode(node);
+  [dartx.insertNode](...args) {
+    return this.insertNode.apply(this, args);
   }
-  [dartx.isPointInRange](node, offset) {
-    return this.isPointInRange(node, offset);
+  [dartx.isPointInRange](...args) {
+    return this.isPointInRange.apply(this, args);
   }
-  [dartx.selectNode](node) {
-    return this.selectNode(node);
+  [dartx.selectNode](...args) {
+    return this.selectNode.apply(this, args);
   }
-  [dartx.selectNodeContents](node) {
-    return this.selectNodeContents(node);
+  [dartx.selectNodeContents](...args) {
+    return this.selectNodeContents.apply(this, args);
   }
-  [dartx.setEnd](node, offset) {
-    return this.setEnd(node, offset);
+  [dartx.setEnd](...args) {
+    return this.setEnd.apply(this, args);
   }
-  [dartx.setEndAfter](node) {
-    return this.setEndAfter(node);
+  [dartx.setEndAfter](...args) {
+    return this.setEndAfter.apply(this, args);
   }
-  [dartx.setEndBefore](node) {
-    return this.setEndBefore(node);
+  [dartx.setEndBefore](...args) {
+    return this.setEndBefore.apply(this, args);
   }
-  [dartx.setStart](node, offset) {
-    return this.setStart(node, offset);
+  [dartx.setStart](...args) {
+    return this.setStart.apply(this, args);
   }
-  [dartx.setStartAfter](node) {
-    return this.setStartAfter(node);
+  [dartx.setStartAfter](...args) {
+    return this.setStartAfter.apply(this, args);
   }
-  [dartx.setStartBefore](node) {
-    return this.setStartBefore(node);
+  [dartx.setStartBefore](...args) {
+    return this.setStartBefore.apply(this, args);
   }
-  [dartx.surroundContents](newParent) {
-    return this.surroundContents(newParent);
+  [dartx.surroundContents](...args) {
+    return this.surroundContents.apply(this, args);
   }
   static get supportsCreateContextualFragment() {
     return "createContextualFragment" in window.Range.prototype;
@@ -68648,11 +68648,11 @@
   static _() {
     dart.throw(new core.UnsupportedError("Not supported"));
   }
-  [dartx.cancel](reason) {
-    return this.cancel(reason);
+  [dartx.cancel](...args) {
+    return this.cancel.apply(this, args);
   }
-  [dartx.getReader]() {
-    return this.getReader();
+  [dartx.getReader](...args) {
+    return this.getReader.apply(this, args);
   }
 };
 dart.setSignature(html.ReadableByteStream, {
@@ -68676,14 +68676,14 @@
   get [dartx.closed]() {
     return this.closed;
   }
-  [dartx.cancel](reason) {
-    return this.cancel(reason);
+  [dartx.cancel](...args) {
+    return this.cancel.apply(this, args);
   }
-  [dartx.read]() {
-    return this.read();
+  [dartx.read](...args) {
+    return this.read.apply(this, args);
   }
-  [dartx.releaseLock]() {
-    return this.releaseLock();
+  [dartx.releaseLock](...args) {
+    return this.releaseLock.apply(this, args);
   }
 };
 dart.setSignature(html.ReadableByteStreamReader, {
@@ -68704,11 +68704,11 @@
   static _() {
     dart.throw(new core.UnsupportedError("Not supported"));
   }
-  [dartx.cancel](reason) {
-    return this.cancel(reason);
+  [dartx.cancel](...args) {
+    return this.cancel.apply(this, args);
   }
-  [dartx.getReader]() {
-    return this.getReader();
+  [dartx.getReader](...args) {
+    return this.getReader.apply(this, args);
   }
 };
 dart.setSignature(html.ReadableStream, {
@@ -68732,14 +68732,14 @@
   get [dartx.closed]() {
     return this.closed;
   }
-  [dartx.cancel](reason) {
-    return this.cancel(reason);
+  [dartx.cancel](...args) {
+    return this.cancel.apply(this, args);
   }
-  [dartx.read]() {
-    return this.read();
+  [dartx.read](...args) {
+    return this.read.apply(this, args);
   }
-  [dartx.releaseLock]() {
-    return this.releaseLock();
+  [dartx.releaseLock](...args) {
+    return this.releaseLock.apply(this, args);
   }
 };
 dart.setSignature(html.ReadableStreamReader, {
@@ -68874,23 +68874,23 @@
   get [dartx.reliable]() {
     return this.reliable;
   }
-  [dartx.close]() {
-    return this.close();
+  [dartx.close](...args) {
+    return this.close.apply(this, args);
   }
-  [dartx.send](data) {
-    return this.send(data);
+  [dartx.send](...args) {
+    return this.send.apply(this, args);
   }
-  [dartx.sendBlob](data) {
-    return this.send(data);
+  [dartx.sendBlob](...args) {
+    return this.send.apply(this, args);
   }
-  [dartx.sendByteBuffer](data) {
-    return this.send(data);
+  [dartx.sendByteBuffer](...args) {
+    return this.send.apply(this, args);
   }
-  [dartx.sendString](data) {
-    return this.send(data);
+  [dartx.sendString](...args) {
+    return this.send.apply(this, args);
   }
-  [dartx.sendTypedData](data) {
-    return this.send(data);
+  [dartx.sendTypedData](...args) {
+    return this.send.apply(this, args);
   }
   get [dartx.onClose]() {
     return html.RtcDataChannel.closeEvent.forTarget(this);
@@ -69001,8 +69001,8 @@
   get [dartx.track]() {
     return this.track;
   }
-  [dartx.insertDtmf](tones, duration, interToneGap) {
-    return this.insertDTMF(tones, duration, interToneGap);
+  [dartx.insertDtmf](...args) {
+    return this.insertDTMF.apply(this, args);
   }
   get [dartx.onToneChange]() {
     return html.RtcDtmfSender.toneChangeEvent.forTarget(this);
@@ -69227,8 +69227,8 @@
   get [dartx.signalingState]() {
     return this.signalingState;
   }
-  [dartx.addIceCandidate](candidate, successCallback, failureCallback) {
-    return this.addIceCandidate(candidate, successCallback, failureCallback);
+  [dartx.addIceCandidate](...args) {
+    return this.addIceCandidate.apply(this, args);
   }
   [dartx.addStream](stream, mediaConstraints) {
     if (mediaConstraints === void 0) mediaConstraints = null;
@@ -69240,14 +69240,14 @@
     this[_addStream_2](stream);
     return;
   }
-  [_addStream_1](stream, mediaConstraints) {
-    return this.addStream(stream, mediaConstraints);
+  [_addStream_1](...args) {
+    return this.addStream.apply(this, args);
   }
-  [_addStream_2](stream) {
-    return this.addStream(stream);
+  [_addStream_2](...args) {
+    return this.addStream.apply(this, args);
   }
-  [dartx.close]() {
-    return this.close();
+  [dartx.close](...args) {
+    return this.close.apply(this, args);
   }
   [_createAnswer](successCallback, failureCallback, mediaConstraints) {
     if (failureCallback === void 0) failureCallback = null;
@@ -69260,14 +69260,14 @@
     this[_createAnswer_2](successCallback, failureCallback);
     return;
   }
-  [_createAnswer_1](successCallback, failureCallback, mediaConstraints) {
-    return this.createAnswer(successCallback, failureCallback, mediaConstraints);
+  [_createAnswer_1](...args) {
+    return this.createAnswer.apply(this, args);
   }
-  [_createAnswer_2](successCallback, failureCallback) {
-    return this.createAnswer(successCallback, failureCallback);
+  [_createAnswer_2](...args) {
+    return this.createAnswer.apply(this, args);
   }
-  [dartx.createDtmfSender](track) {
-    return this.createDTMFSender(track);
+  [dartx.createDtmfSender](...args) {
+    return this.createDTMFSender.apply(this, args);
   }
   [dartx.createDataChannel](label, options) {
     if (options === void 0) options = null;
@@ -69277,11 +69277,11 @@
     }
     return this[_createDataChannel_2](label);
   }
-  [_createDataChannel_1](label, options) {
-    return this.createDataChannel(label, options);
+  [_createDataChannel_1](...args) {
+    return this.createDataChannel.apply(this, args);
   }
-  [_createDataChannel_2](label) {
-    return this.createDataChannel(label);
+  [_createDataChannel_2](...args) {
+    return this.createDataChannel.apply(this, args);
   }
   [_createOffer](successCallback, failureCallback, rtcOfferOptions) {
     if (failureCallback === void 0) failureCallback = null;
@@ -69294,29 +69294,29 @@
     this[_createOffer_2](successCallback, failureCallback);
     return;
   }
-  [_createOffer_1](successCallback, failureCallback, rtcOfferOptions) {
-    return this.createOffer(successCallback, failureCallback, rtcOfferOptions);
+  [_createOffer_1](...args) {
+    return this.createOffer.apply(this, args);
   }
-  [_createOffer_2](successCallback, failureCallback) {
-    return this.createOffer(successCallback, failureCallback);
+  [_createOffer_2](...args) {
+    return this.createOffer.apply(this, args);
   }
-  [dartx.getLocalStreams]() {
-    return this.getLocalStreams();
+  [dartx.getLocalStreams](...args) {
+    return this.getLocalStreams.apply(this, args);
   }
-  [dartx.getRemoteStreams]() {
-    return this.getRemoteStreams();
+  [dartx.getRemoteStreams](...args) {
+    return this.getRemoteStreams.apply(this, args);
   }
-  [_getStats](successCallback, selector) {
-    return this.getStats(successCallback, selector);
+  [_getStats](...args) {
+    return this.getStats.apply(this, args);
   }
-  [dartx.getStreamById](streamId) {
-    return this.getStreamById(streamId);
+  [dartx.getStreamById](...args) {
+    return this.getStreamById.apply(this, args);
   }
-  [dartx.removeStream](stream) {
-    return this.removeStream(stream);
+  [dartx.removeStream](...args) {
+    return this.removeStream.apply(this, args);
   }
-  [_setLocalDescription](description, successCallback, failureCallback) {
-    return this.setLocalDescription(description, successCallback, failureCallback);
+  [_setLocalDescription](...args) {
+    return this.setLocalDescription.apply(this, args);
   }
   [dartx.setLocalDescription](description) {
     let completer = async.Completer.new();
@@ -69327,8 +69327,8 @@
     }, StringTovoid()));
     return completer.future;
   }
-  [_setRemoteDescription](description, successCallback, failureCallback) {
-    return this.setRemoteDescription(description, successCallback, failureCallback);
+  [_setRemoteDescription](...args) {
+    return this.setRemoteDescription.apply(this, args);
   }
   [dartx.setRemoteDescription](description) {
     let completer = async.Completer.new();
@@ -69356,14 +69356,14 @@
     this[_updateIce_3]();
     return;
   }
-  [_updateIce_1](configuration, mediaConstraints) {
-    return this.updateIce(configuration, mediaConstraints);
+  [_updateIce_1](...args) {
+    return this.updateIce.apply(this, args);
   }
-  [_updateIce_2](configuration) {
-    return this.updateIce(configuration);
+  [_updateIce_2](...args) {
+    return this.updateIce.apply(this, args);
   }
-  [_updateIce_3]() {
-    return this.updateIce();
+  [_updateIce_3](...args) {
+    return this.updateIce.apply(this, args);
   }
   get [dartx.onAddStream]() {
     return html.RtcPeerConnection.addStreamEvent.forTarget(this);
@@ -69538,11 +69538,11 @@
   get [dartx.type]() {
     return this.type;
   }
-  [dartx.names]() {
-    return this.names();
+  [dartx.names](...args) {
+    return this.names.apply(this, args);
   }
-  [dartx.stat](name) {
-    return this.stat(name);
+  [dartx.stat](...args) {
+    return this.stat.apply(this, args);
   }
 };
 dart.setSignature(html.RtcStatsReport, {
@@ -69567,11 +69567,11 @@
   static _() {
     dart.throw(new core.UnsupportedError("Not supported"));
   }
-  [dartx.namedItem](name) {
-    return this.namedItem(name);
+  [dartx.namedItem](...args) {
+    return this.namedItem.apply(this, args);
   }
-  [dartx.result]() {
-    return this.result();
+  [dartx.result](...args) {
+    return this.result.apply(this, args);
   }
 };
 dart.setSignature(html.RtcStatsResponse, {
@@ -69662,11 +69662,11 @@
   get [dartx.type]() {
     return this.type;
   }
-  [dartx.lock](orientation) {
-    return this.lock(orientation);
+  [dartx.lock](...args) {
+    return this.lock.apply(this, args);
   }
-  [dartx.unlock]() {
-    return this.unlock();
+  [dartx.unlock](...args) {
+    return this.unlock.apply(this, args);
   }
   get [dartx.onChange]() {
     return html.ScreenOrientation.changeEvent.forTarget(this);
@@ -69896,8 +69896,8 @@
   get [dartx.velocityY]() {
     return this.velocityY;
   }
-  [dartx.consumeDelta](x, y) {
-    return this.consumeDelta(x, y);
+  [dartx.consumeDelta](...args) {
+    return this.consumeDelta.apply(this, args);
   }
 };
 dart.setSignature(html.ScrollState, {
@@ -70139,26 +70139,26 @@
   get [dartx.willValidate]() {
     return this.willValidate;
   }
-  [__setter__](index, option) {
-    return this.__setter__(index, option);
+  [__setter__](...args) {
+    return this.__setter__.apply(this, args);
   }
-  [dartx.add](element, before) {
-    return this.add(element, before);
+  [dartx.add](...args) {
+    return this.add.apply(this, args);
   }
-  [dartx.checkValidity]() {
-    return this.checkValidity();
+  [dartx.checkValidity](...args) {
+    return this.checkValidity.apply(this, args);
   }
-  [dartx.item](index) {
-    return this.item(index);
+  [dartx.item](...args) {
+    return this.item.apply(this, args);
   }
-  [dartx.namedItem](name) {
-    return this.namedItem(name);
+  [dartx.namedItem](...args) {
+    return this.namedItem.apply(this, args);
   }
-  [dartx.reportValidity]() {
-    return this.reportValidity();
+  [dartx.reportValidity](...args) {
+    return this.reportValidity.apply(this, args);
   }
-  [dartx.setCustomValidity](error) {
-    return this.setCustomValidity(error);
+  [dartx.setCustomValidity](...args) {
+    return this.setCustomValidity.apply(this, args);
   }
   get [dartx.options]() {
     let options = ListOfOptionElement().from(this[dartx.querySelectorAll](html.Element)('option'));
@@ -70276,47 +70276,47 @@
   get [dartx.type]() {
     return this.type;
   }
-  [dartx.addRange](range) {
-    return this.addRange(range);
+  [dartx.addRange](...args) {
+    return this.addRange.apply(this, args);
   }
-  [dartx.collapse](node, offset) {
-    return this.collapse(node, offset);
+  [dartx.collapse](...args) {
+    return this.collapse.apply(this, args);
   }
-  [dartx.collapseToEnd]() {
-    return this.collapseToEnd();
+  [dartx.collapseToEnd](...args) {
+    return this.collapseToEnd.apply(this, args);
   }
-  [dartx.collapseToStart]() {
-    return this.collapseToStart();
+  [dartx.collapseToStart](...args) {
+    return this.collapseToStart.apply(this, args);
   }
-  [dartx.containsNode](node, allowPartialContainment) {
-    return this.containsNode(node, allowPartialContainment);
+  [dartx.containsNode](...args) {
+    return this.containsNode.apply(this, args);
   }
-  [dartx.deleteFromDocument]() {
-    return this.deleteFromDocument();
+  [dartx.deleteFromDocument](...args) {
+    return this.deleteFromDocument.apply(this, args);
   }
-  [dartx.empty]() {
-    return this.empty();
+  [dartx.empty](...args) {
+    return this.empty.apply(this, args);
   }
-  [dartx.extend](node, offset) {
-    return this.extend(node, offset);
+  [dartx.extend](...args) {
+    return this.extend.apply(this, args);
   }
-  [dartx.getRangeAt](index) {
-    return this.getRangeAt(index);
+  [dartx.getRangeAt](...args) {
+    return this.getRangeAt.apply(this, args);
   }
-  [dartx.modify](alter, direction, granularity) {
-    return this.modify(alter, direction, granularity);
+  [dartx.modify](...args) {
+    return this.modify.apply(this, args);
   }
-  [dartx.removeAllRanges]() {
-    return this.removeAllRanges();
+  [dartx.removeAllRanges](...args) {
+    return this.removeAllRanges.apply(this, args);
   }
-  [dartx.selectAllChildren](node) {
-    return this.selectAllChildren(node);
+  [dartx.selectAllChildren](...args) {
+    return this.selectAllChildren.apply(this, args);
   }
-  [dartx.setBaseAndExtent](baseNode, baseOffset, extentNode, extentOffset) {
-    return this.setBaseAndExtent(baseNode, baseOffset, extentNode, extentOffset);
+  [dartx.setBaseAndExtent](...args) {
+    return this.setBaseAndExtent.apply(this, args);
   }
-  [dartx.setPosition](node, offset) {
-    return this.setPosition(node, offset);
+  [dartx.setPosition](...args) {
+    return this.setPosition.apply(this, args);
   }
 };
 dart.setSignature(html.Selection, {
@@ -70372,8 +70372,8 @@
   get [dartx.targetUrl]() {
     return this.targetURL;
   }
-  [dartx.close]() {
-    return this.close();
+  [dartx.close](...args) {
+    return this.close.apply(this, args);
   }
   [dartx.postMessage](message, transfer) {
     if (transfer === void 0) transfer = null;
@@ -70386,11 +70386,11 @@
     this[_postMessage_2](message_1);
     return;
   }
-  [_postMessage_1](message, transfer) {
-    return this.postMessage(message, transfer);
+  [_postMessage_1](...args) {
+    return this.postMessage.apply(this, args);
   }
-  [_postMessage_2](message) {
-    return this.postMessage(message);
+  [_postMessage_2](...args) {
+    return this.postMessage.apply(this, args);
   }
 };
 dart.setSignature(html.ServicePort, {
@@ -70428,18 +70428,18 @@
     }
     return this[_connect_2](url);
   }
-  [_connect_1](url, options) {
-    return this.connect(url, options);
+  [_connect_1](...args) {
+    return this.connect.apply(this, args);
   }
-  [_connect_2](url) {
-    return this.connect(url);
+  [_connect_2](...args) {
+    return this.connect.apply(this, args);
   }
   [dartx.match](options) {
     let options_1 = html_common.convertDartToNative_Dictionary(options);
     return this[_match_1](options_1);
   }
-  [_match_1](options) {
-    return this.match(options);
+  [_match_1](...args) {
+    return this.match.apply(this, args);
   }
   [dartx.matchAll](options) {
     if (options === void 0) options = null;
@@ -70449,11 +70449,11 @@
     }
     return this[_matchAll_2]();
   }
-  [_matchAll_1](options) {
-    return this.matchAll(options);
+  [_matchAll_1](...args) {
+    return this.matchAll.apply(this, args);
   }
-  [_matchAll_2]() {
-    return this.matchAll();
+  [_matchAll_2](...args) {
+    return this.matchAll.apply(this, args);
   }
   get [dartx.onMessage]() {
     return html.ServicePortCollection.messageEvent.forTarget(this);
@@ -70509,8 +70509,8 @@
   get [dartx.targetUrl]() {
     return this.targetURL;
   }
-  [dartx.respondWith](response) {
-    return this.respondWith(response);
+  [dartx.respondWith](...args) {
+    return this.respondWith.apply(this, args);
   }
 };
 dart.setSignature(html.ServicePortConnectEvent, {
@@ -70548,11 +70548,11 @@
   get [dartx.ready]() {
     return this.ready;
   }
-  [dartx.getRegistration](documentURL) {
-    return this.getRegistration(documentURL);
+  [dartx.getRegistration](...args) {
+    return this.getRegistration.apply(this, args);
   }
-  [dartx.getRegistrations]() {
-    return this.getRegistrations();
+  [dartx.getRegistrations](...args) {
+    return this.getRegistrations.apply(this, args);
   }
   [dartx.register](url, options) {
     if (options === void 0) options = null;
@@ -70562,11 +70562,11 @@
     }
     return this[_register_2](url);
   }
-  [_register_1](url, options) {
-    return this.register(url, options);
+  [_register_1](...args) {
+    return this.register.apply(this, args);
   }
-  [_register_2](url) {
-    return this.register(url);
+  [_register_2](...args) {
+    return this.register.apply(this, args);
   }
   get [dartx.onMessage]() {
     return html.ServiceWorkerContainer.messageEvent.forTarget(this);
@@ -70614,8 +70614,8 @@
   get [dartx.registration]() {
     return this.registration;
   }
-  [dartx.skipWaiting]() {
-    return this.skipWaiting();
+  [dartx.skipWaiting](...args) {
+    return this.skipWaiting.apply(this, args);
   }
   get [dartx.onMessage]() {
     return html.ServiceWorkerGlobalScope.messageEvent.forTarget(this);
@@ -70756,11 +70756,11 @@
     }
     return this[_getNotifications_2]();
   }
-  [_getNotifications_1](filter) {
-    return this.getNotifications(filter);
+  [_getNotifications_1](...args) {
+    return this.getNotifications.apply(this, args);
   }
-  [_getNotifications_2]() {
-    return this.getNotifications();
+  [_getNotifications_2](...args) {
+    return this.getNotifications.apply(this, args);
   }
   [dartx.showNotification](title, options) {
     if (options === void 0) options = null;
@@ -70770,17 +70770,17 @@
     }
     return this[_showNotification_2](title);
   }
-  [_showNotification_1](title, options) {
-    return this.showNotification(title, options);
+  [_showNotification_1](...args) {
+    return this.showNotification.apply(this, args);
   }
-  [_showNotification_2](title) {
-    return this.showNotification(title);
+  [_showNotification_2](...args) {
+    return this.showNotification.apply(this, args);
   }
-  [dartx.unregister]() {
-    return this.unregister();
+  [dartx.unregister](...args) {
+    return this.unregister.apply(this, args);
   }
-  [dartx.update]() {
-    return this.update();
+  [dartx.update](...args) {
+    return this.update.apply(this, args);
   }
 };
 dart.setSignature(html.ServiceWorkerRegistration, {
@@ -70823,8 +70823,8 @@
   static get supported() {
     return html.Element.isTagSupported('shadow');
   }
-  [dartx.getDistributedNodes]() {
-    return this.getDistributedNodes();
+  [dartx.getDistributedNodes](...args) {
+    return this.getDistributedNodes.apply(this, args);
   }
 };
 dart.defineNamedConstructor(html.ShadowElement, 'created');
@@ -70879,17 +70879,17 @@
   get [dartx.styleSheets]() {
     return this.styleSheets;
   }
-  [dartx.clone](deep) {
-    return this.cloneNode(deep);
+  [dartx.clone](...args) {
+    return this.cloneNode.apply(this, args);
   }
-  [dartx.elementFromPoint](x, y) {
-    return this.elementFromPoint(x, y);
+  [dartx.elementFromPoint](...args) {
+    return this.elementFromPoint.apply(this, args);
   }
-  [dartx.elementsFromPoint](x, y) {
-    return this.elementsFromPoint(x, y);
+  [dartx.elementsFromPoint](...args) {
+    return this.elementsFromPoint.apply(this, args);
   }
-  [dartx.getSelection]() {
-    return this.getSelection();
+  [dartx.getSelection](...args) {
+    return this.getSelection.apply(this, args);
   }
   static get supported() {
     return !!(Element.prototype.createShadowRoot || Element.prototype.webkitCreateShadowRoot);
@@ -71099,20 +71099,20 @@
   get [dartx.updating]() {
     return this.updating;
   }
-  [dartx.abort]() {
-    return this.abort();
+  [dartx.abort](...args) {
+    return this.abort.apply(this, args);
   }
-  [dartx.appendBuffer](data) {
-    return this.appendBuffer(data);
+  [dartx.appendBuffer](...args) {
+    return this.appendBuffer.apply(this, args);
   }
-  [dartx.appendStream](stream, maxSize) {
-    return this.appendStream(stream, maxSize);
+  [dartx.appendStream](...args) {
+    return this.appendStream.apply(this, args);
   }
-  [dartx.appendTypedData](data) {
-    return this.appendBuffer(data);
+  [dartx.appendTypedData](...args) {
+    return this.appendBuffer.apply(this, args);
   }
-  [dartx.remove](start, end) {
-    return this.remove(start, end);
+  [dartx.remove](...args) {
+    return this.remove.apply(this, args);
   }
 };
 dart.setSignature(html.SourceBuffer, {
@@ -71188,8 +71188,8 @@
   [dartx.elementAt](index) {
     return this[dartx._get](index);
   }
-  [dartx.item](index) {
-    return this.item(index);
+  [dartx.item](...args) {
+    return this.item.apply(this, args);
   }
 };
 html.SourceBufferList[dart.implements] = () => [_js_helper.JavaScriptIndexingBehavior, ListOfSourceBuffer()];
@@ -71433,14 +71433,14 @@
   [dartx.elementAt](index) {
     return this[dartx._get](index);
   }
-  [dartx.addFromString](string, weight) {
-    return this.addFromString(string, weight);
+  [dartx.addFromString](...args) {
+    return this.addFromString.apply(this, args);
   }
-  [dartx.addFromUri](src, weight) {
-    return this.addFromUri(src, weight);
+  [dartx.addFromUri](...args) {
+    return this.addFromUri.apply(this, args);
   }
-  [dartx.item](index) {
-    return this.item(index);
+  [dartx.item](...args) {
+    return this.item.apply(this, args);
   }
 };
 html.SpeechGrammarList[dart.implements] = () => [_js_helper.JavaScriptIndexingBehavior, ListOfSpeechGrammar()];
@@ -71540,14 +71540,14 @@
   set [dartx.serviceUri](value) {
     this.serviceURI = value;
   }
-  [dartx.abort]() {
-    return this.abort();
+  [dartx.abort](...args) {
+    return this.abort.apply(this, args);
   }
-  [dartx.start]() {
-    return this.start();
+  [dartx.start](...args) {
+    return this.start.apply(this, args);
   }
-  [dartx.stop]() {
-    return this.stop();
+  [dartx.stop](...args) {
+    return this.stop.apply(this, args);
   }
   get [dartx.onAudioEnd]() {
     return html.SpeechRecognition.audioEndEvent.forTarget(this);
@@ -71807,8 +71807,8 @@
   get [dartx.length]() {
     return this.length;
   }
-  [dartx.item](index) {
-    return this.item(index);
+  [dartx.item](...args) {
+    return this.item.apply(this, args);
   }
 };
 dart.setSignature(html.SpeechRecognitionResult, {
@@ -71843,20 +71843,20 @@
   get [dartx.speaking]() {
     return this.speaking;
   }
-  [dartx.cancel]() {
-    return this.cancel();
+  [dartx.cancel](...args) {
+    return this.cancel.apply(this, args);
   }
-  [dartx.getVoices]() {
-    return this.getVoices();
+  [dartx.getVoices](...args) {
+    return this.getVoices.apply(this, args);
   }
-  [dartx.pause]() {
-    return this.pause();
+  [dartx.pause](...args) {
+    return this.pause.apply(this, args);
   }
-  [dartx.resume]() {
-    return this.resume();
+  [dartx.resume](...args) {
+    return this.resume.apply(this, args);
   }
-  [dartx.speak](utterance) {
-    return this.speak(utterance);
+  [dartx.speak](...args) {
+    return this.speak.apply(this, args);
   }
 };
 dart.setSignature(html.SpeechSynthesis, {
@@ -72121,8 +72121,8 @@
   static _() {
     dart.throw(new core.UnsupportedError("Not supported"));
   }
-  [dartx.add](name, port) {
-    return this.add(name, port);
+  [dartx.add](...args) {
+    return this.add.apply(this, args);
   }
   get [dartx.onMessage]() {
     return html.StashedPortCollection.messageEvent.forTarget(this);
@@ -72225,29 +72225,29 @@
   get [_length]() {
     return this.length;
   }
-  [__delete__](index_OR_name) {
-    return this.__delete__(index_OR_name);
+  [__delete__](...args) {
+    return this.__delete__.apply(this, args);
   }
-  [__getter__](index_OR_name) {
-    return this.__getter__(index_OR_name);
+  [__getter__](...args) {
+    return this.__getter__.apply(this, args);
   }
-  [__setter__](index_OR_name, value) {
-    return this.__setter__(index_OR_name, value);
+  [__setter__](...args) {
+    return this.__setter__.apply(this, args);
   }
-  [_clear]() {
-    return this.clear();
+  [_clear](...args) {
+    return this.clear.apply(this, args);
   }
-  [_getItem](key) {
-    return this.getItem(key);
+  [_getItem](...args) {
+    return this.getItem.apply(this, args);
   }
-  [_key](index) {
-    return this.key(index);
+  [_key](...args) {
+    return this.key.apply(this, args);
   }
-  [_removeItem](key) {
-    return this.removeItem(key);
+  [_removeItem](...args) {
+    return this.removeItem.apply(this, args);
   }
-  [_setItem](key, data) {
-    return this.setItem(key, data);
+  [_setItem](...args) {
+    return this.setItem.apply(this, args);
   }
 };
 html.Storage[dart.implements] = () => [MapOfString$String()];
@@ -72333,8 +72333,8 @@
   get [dartx.url]() {
     return this.url;
   }
-  [_initStorageEvent](typeArg, canBubbleArg, cancelableArg, keyArg, oldValueArg, newValueArg, urlArg, storageAreaArg) {
-    return this.initStorageEvent(typeArg, canBubbleArg, cancelableArg, keyArg, oldValueArg, newValueArg, urlArg, storageAreaArg);
+  [_initStorageEvent](...args) {
+    return this.initStorageEvent.apply(this, args);
   }
 };
 dart.setSignature(html.StorageEvent, {
@@ -72392,11 +72392,11 @@
   get [dartx.supportedTypes]() {
     return this.supportedTypes;
   }
-  [dartx.queryInfo](type) {
-    return this.queryInfo(type);
+  [dartx.queryInfo](...args) {
+    return this.queryInfo.apply(this, args);
   }
-  [dartx.requestPersistentQuota](newQuota) {
-    return this.requestPersistentQuota(newQuota);
+  [dartx.requestPersistentQuota](...args) {
+    return this.requestPersistentQuota.apply(this, args);
   }
 };
 dart.setSignature(html.StorageQuota, {
@@ -72479,8 +72479,8 @@
   get [dartx.type]() {
     return this.type;
   }
-  [dartx.matchMedium](mediaquery) {
-    return this.matchMedium(mediaquery);
+  [dartx.matchMedium](...args) {
+    return this.matchMedium.apply(this, args);
   }
 };
 dart.setSignature(html.StyleMedia, {
@@ -72527,14 +72527,14 @@
   static _() {
     dart.throw(new core.UnsupportedError("Not supported"));
   }
-  [dartx.getRegistration](tag) {
-    return this.getRegistration(tag);
+  [dartx.getRegistration](...args) {
+    return this.getRegistration.apply(this, args);
   }
-  [dartx.getRegistrations]() {
-    return this.getRegistrations();
+  [dartx.getRegistrations](...args) {
+    return this.getRegistrations.apply(this, args);
   }
-  [dartx.permissionState]() {
-    return this.permissionState();
+  [dartx.permissionState](...args) {
+    return this.permissionState.apply(this, args);
   }
   [dartx.register](options) {
     if (options === void 0) options = null;
@@ -72544,11 +72544,11 @@
     }
     return this[_register_2]();
   }
-  [_register_1](options) {
-    return this.register(options);
+  [_register_1](...args) {
+    return this.register.apply(this, args);
   }
-  [_register_2]() {
-    return this.register();
+  [_register_2](...args) {
+    return this.register.apply(this, args);
   }
 };
 dart.setSignature(html.SyncManager, {
@@ -72574,8 +72574,8 @@
   get [dartx.tag]() {
     return this.tag;
   }
-  [dartx.unregister]() {
-    return this.unregister();
+  [dartx.unregister](...args) {
+    return this.unregister.apply(this, args);
   }
 };
 dart.setSignature(html.SyncRegistration, {
@@ -72753,8 +72753,8 @@
     this[dartx.children][dartx.add](tbody);
     return html.TableSectionElement._check(tbody);
   }
-  [_nativeCreateTBody]() {
-    return this.createTBody();
+  [_nativeCreateTBody](...args) {
+    return this.createTBody.apply(this, args);
   }
   [dartx.createFragment](html, opts) {
     let validator = opts && 'validator' in opts ? opts.validator : null;
@@ -72806,29 +72806,29 @@
   set [dartx.tHead](value) {
     this.tHead = value;
   }
-  [_createCaption]() {
-    return this.createCaption();
+  [_createCaption](...args) {
+    return this.createCaption.apply(this, args);
   }
-  [_createTFoot]() {
-    return this.createTFoot();
+  [_createTFoot](...args) {
+    return this.createTFoot.apply(this, args);
   }
-  [_createTHead]() {
-    return this.createTHead();
+  [_createTHead](...args) {
+    return this.createTHead.apply(this, args);
   }
-  [dartx.deleteCaption]() {
-    return this.deleteCaption();
+  [dartx.deleteCaption](...args) {
+    return this.deleteCaption.apply(this, args);
   }
-  [dartx.deleteRow](index) {
-    return this.deleteRow(index);
+  [dartx.deleteRow](...args) {
+    return this.deleteRow.apply(this, args);
   }
-  [dartx.deleteTFoot]() {
-    return this.deleteTFoot();
+  [dartx.deleteTFoot](...args) {
+    return this.deleteTFoot.apply(this, args);
   }
-  [dartx.deleteTHead]() {
-    return this.deleteTHead();
+  [dartx.deleteTHead](...args) {
+    return this.deleteTHead.apply(this, args);
   }
-  [_insertRow](index) {
-    return this.insertRow(index);
+  [_insertRow](...args) {
+    return this.insertRow.apply(this, args);
   }
 };
 dart.defineNamedConstructor(html.TableElement, 'created');
@@ -72923,11 +72923,11 @@
   get [dartx.sectionRowIndex]() {
     return this.sectionRowIndex;
   }
-  [dartx.deleteCell](index) {
-    return this.deleteCell(index);
+  [dartx.deleteCell](...args) {
+    return this.deleteCell.apply(this, args);
   }
-  [_insertCell](index) {
-    return this.insertCell(index);
+  [_insertCell](...args) {
+    return this.insertCell.apply(this, args);
   }
 };
 dart.defineNamedConstructor(html.TableRowElement, 'created');
@@ -72989,11 +72989,11 @@
   get [_rows]() {
     return this.rows;
   }
-  [dartx.deleteRow](index) {
-    return this.deleteRow(index);
+  [dartx.deleteRow](...args) {
+    return this.deleteRow.apply(this, args);
   }
-  [_insertRow](index) {
-    return this.insertRow(index);
+  [_insertRow](...args) {
+    return this.insertRow.apply(this, args);
   }
 };
 dart.defineNamedConstructor(html.TableSectionElement, 'created');
@@ -73257,23 +73257,23 @@
   set [dartx.wrap](value) {
     this.wrap = value;
   }
-  [dartx.checkValidity]() {
-    return this.checkValidity();
+  [dartx.checkValidity](...args) {
+    return this.checkValidity.apply(this, args);
   }
-  [dartx.reportValidity]() {
-    return this.reportValidity();
+  [dartx.reportValidity](...args) {
+    return this.reportValidity.apply(this, args);
   }
-  [dartx.select]() {
-    return this.select();
+  [dartx.select](...args) {
+    return this.select.apply(this, args);
   }
-  [dartx.setCustomValidity](error) {
-    return this.setCustomValidity(error);
+  [dartx.setCustomValidity](...args) {
+    return this.setCustomValidity.apply(this, args);
   }
-  [dartx.setRangeText](replacement, opts) {
-    return this.setRangeText(replacement, opts);
+  [dartx.setRangeText](...args) {
+    return this.setRangeText.apply(this, args);
   }
-  [dartx.setSelectionRange](start, end, direction) {
-    return this.setSelectionRange(start, end, direction);
+  [dartx.setSelectionRange](...args) {
+    return this.setSelectionRange.apply(this, args);
   }
 };
 dart.defineNamedConstructor(html.TextAreaElement, 'created');
@@ -73344,8 +73344,8 @@
   get [dartx.data]() {
     return this.data;
   }
-  [_initTextEvent](typeArg, canBubbleArg, cancelableArg, viewArg, dataArg) {
-    return this.initTextEvent(typeArg, canBubbleArg, cancelableArg, viewArg, dataArg);
+  [_initTextEvent](...args) {
+    return this.initTextEvent.apply(this, args);
   }
 };
 dart.setSignature(html.TextEvent, {
@@ -73476,17 +73476,17 @@
   get [dartx.regions]() {
     return this.regions;
   }
-  [dartx.addCue](cue) {
-    return this.addCue(cue);
+  [dartx.addCue](...args) {
+    return this.addCue.apply(this, args);
   }
-  [dartx.addRegion](region) {
-    return this.addRegion(region);
+  [dartx.addRegion](...args) {
+    return this.addRegion.apply(this, args);
   }
-  [dartx.removeCue](cue) {
-    return this.removeCue(cue);
+  [dartx.removeCue](...args) {
+    return this.removeCue.apply(this, args);
   }
-  [dartx.removeRegion](region) {
-    return this.removeRegion(region);
+  [dartx.removeRegion](...args) {
+    return this.removeRegion.apply(this, args);
   }
   get [dartx.onCueChange]() {
     return html.TextTrack.cueChangeEvent.forTarget(this);
@@ -73647,11 +73647,11 @@
   [dartx.elementAt](index) {
     return this[dartx._get](index);
   }
-  [dartx.getCueById](id) {
-    return this.getCueById(id);
+  [dartx.getCueById](...args) {
+    return this.getCueById.apply(this, args);
   }
-  [dartx.item](index) {
-    return this.item(index);
+  [dartx.item](...args) {
+    return this.item.apply(this, args);
   }
 };
 html.TextTrackCueList[dart.implements] = () => [ListOfTextTrackCue(), _js_helper.JavaScriptIndexingBehavior];
@@ -73729,11 +73729,11 @@
   [dartx.elementAt](index) {
     return this[dartx._get](index);
   }
-  [dartx.getTrackById](id) {
-    return this.getTrackById(id);
+  [dartx.getTrackById](...args) {
+    return this.getTrackById.apply(this, args);
   }
-  [dartx.item](index) {
-    return this.item(index);
+  [dartx.item](...args) {
+    return this.item.apply(this, args);
   }
   get [dartx.onAddTrack]() {
     return html.TextTrackList.addTrackEvent.forTarget(this);
@@ -73787,11 +73787,11 @@
   get [dartx.length]() {
     return this.length;
   }
-  [dartx.end](index) {
-    return this.end(index);
+  [dartx.end](...args) {
+    return this.end.apply(this, args);
   }
-  [dartx.start](index) {
-    return this.start(index);
+  [dartx.start](...args) {
+    return this.start.apply(this, args);
   }
 };
 dart.setSignature(html.TimeRanges, {
@@ -74014,8 +74014,8 @@
   get [dartx.touches]() {
     return this.touches;
   }
-  [_initTouchEvent](touches, targetTouches, changedTouches, type, view, unused1, unused2, unused3, unused4, ctrlKey, altKey, shiftKey, metaKey) {
-    return this.initTouchEvent(touches, targetTouches, changedTouches, type, view, unused1, unused2, unused3, unused4, ctrlKey, altKey, shiftKey, metaKey);
+  [_initTouchEvent](...args) {
+    return this.initTouchEvent.apply(this, args);
   }
   static get supported() {
     return html_common.Device.isEventTypeSupported('TouchEvent');
@@ -74098,8 +74098,8 @@
   [dartx.elementAt](index) {
     return this[dartx._get](index);
   }
-  [dartx.item](index) {
-    return this.item(index);
+  [dartx.item](...args) {
+    return this.item.apply(this, args);
   }
 };
 html.TouchList[dart.implements] = () => [_js_helper.JavaScriptIndexingBehavior, ListOfTouch()];
@@ -74209,8 +74209,8 @@
   get [dartx.length]() {
     return this.length;
   }
-  [dartx.item](index) {
-    return this.item(index);
+  [dartx.item](...args) {
+    return this.item.apply(this, args);
   }
 };
 dart.setSignature(html.TrackDefaultList, {
@@ -74446,26 +74446,26 @@
   get [dartx.whatToShow]() {
     return this.whatToShow;
   }
-  [dartx.firstChild]() {
-    return this.firstChild();
+  [dartx.firstChild](...args) {
+    return this.firstChild.apply(this, args);
   }
-  [dartx.lastChild]() {
-    return this.lastChild();
+  [dartx.lastChild](...args) {
+    return this.lastChild.apply(this, args);
   }
-  [dartx.nextNode]() {
-    return this.nextNode();
+  [dartx.nextNode](...args) {
+    return this.nextNode.apply(this, args);
   }
-  [dartx.nextSibling]() {
-    return this.nextSibling();
+  [dartx.nextSibling](...args) {
+    return this.nextSibling.apply(this, args);
   }
-  [dartx.parentNode]() {
-    return this.parentNode();
+  [dartx.parentNode](...args) {
+    return this.parentNode.apply(this, args);
   }
-  [dartx.previousNode]() {
-    return this.previousNode();
+  [dartx.previousNode](...args) {
+    return this.previousNode.apply(this, args);
   }
-  [dartx.previousSibling]() {
-    return this.previousSibling();
+  [dartx.previousSibling](...args) {
+    return this.previousSibling.apply(this, args);
   }
 };
 dart.setSignature(html.TreeWalker, {
@@ -75175,14 +75175,14 @@
   set [dartx.width](value) {
     this.width = value;
   }
-  [dartx.getVideoPlaybackQuality]() {
-    return this.getVideoPlaybackQuality();
+  [dartx.getVideoPlaybackQuality](...args) {
+    return this.getVideoPlaybackQuality.apply(this, args);
   }
-  [dartx.enterFullscreen]() {
-    return this.webkitEnterFullscreen();
+  [dartx.enterFullscreen](...args) {
+    return this.webkitEnterFullscreen.apply(this, args);
   }
-  [dartx.exitFullscreen]() {
-    return this.webkitExitFullscreen();
+  [dartx.exitFullscreen](...args) {
+    return this.webkitExitFullscreen.apply(this, args);
   }
 };
 dart.defineNamedConstructor(html.VideoElement, 'created');
@@ -75299,11 +75299,11 @@
   get [dartx.selectedIndex]() {
     return this.selectedIndex;
   }
-  [__getter__](index) {
-    return this.__getter__(index);
+  [__getter__](...args) {
+    return this.__getter__.apply(this, args);
   }
-  [dartx.getTrackById](id) {
-    return this.getTrackById(id);
+  [dartx.getTrackById](...args) {
+    return this.getTrackById.apply(this, args);
   }
   get [dartx.onChange]() {
     return html.VideoTrackList.changeEvent.forTarget(this);
@@ -75398,8 +75398,8 @@
   set [dartx.vertical](value) {
     this.vertical = value;
   }
-  [dartx.getCueAsHtml]() {
-    return this.getCueAsHTML();
+  [dartx.getCueAsHtml](...args) {
+    return this.getCueAsHTML.apply(this, args);
   }
 };
 dart.setSignature(html.VttCue, {
@@ -75527,11 +75527,11 @@
   get [dartx.length]() {
     return this.length;
   }
-  [dartx.getRegionById](id) {
-    return this.getRegionById(id);
+  [dartx.getRegionById](...args) {
+    return this.getRegionById.apply(this, args);
   }
-  [dartx.item](index) {
-    return this.item(index);
+  [dartx.item](...args) {
+    return this.item.apply(this, args);
   }
 };
 dart.setSignature(html.VttRegionList, {
@@ -75602,23 +75602,23 @@
   get [dartx.url]() {
     return this.url;
   }
-  [dartx.close](code, reason) {
-    return this.close(code, reason);
+  [dartx.close](...args) {
+    return this.close.apply(this, args);
   }
-  [dartx.send](data) {
-    return this.send(data);
+  [dartx.send](...args) {
+    return this.send.apply(this, args);
   }
-  [dartx.sendBlob](data) {
-    return this.send(data);
+  [dartx.sendBlob](...args) {
+    return this.send.apply(this, args);
   }
-  [dartx.sendByteBuffer](data) {
-    return this.send(data);
+  [dartx.sendByteBuffer](...args) {
+    return this.send.apply(this, args);
   }
-  [dartx.sendString](data) {
-    return this.send(data);
+  [dartx.sendString](...args) {
+    return this.send.apply(this, args);
   }
-  [dartx.sendTypedData](data) {
-    return this.send(data);
+  [dartx.sendTypedData](...args) {
+    return this.send.apply(this, args);
   }
   get [dartx.onClose]() {
     return html.WebSocket.closeEvent.forTarget(this);
@@ -75789,14 +75789,14 @@
   get [_hasInitMouseScrollEvent]() {
     return !!this.initMouseScrollEvent;
   }
-  [_initMouseScrollEvent](type, canBubble, cancelable, view, detail, screenX, screenY, clientX, clientY, ctrlKey, altKey, shiftKey, metaKey, button, relatedTarget, axis) {
-    return this.initMouseScrollEvent(type, canBubble, cancelable, view, detail, screenX, screenY, clientX, clientY, ctrlKey, altKey, shiftKey, metaKey, button, relatedTarget, axis);
+  [_initMouseScrollEvent](...args) {
+    return this.initMouseScrollEvent.apply(this, args);
   }
   get [_hasInitWheelEvent]() {
     return !!this.initWheelEvent;
   }
-  [_initWheelEvent](eventType, canBubble, cancelable, view, detail, screenX, screenY, clientX, clientY, button, relatedTarget, modifiersList, deltaX, deltaY, deltaZ, deltaMode) {
-    return this.initWheelEvent(eventType, canBubble, cancelable, view, detail, screenX, screenY, clientX, clientY, button, relatedTarget, modifiersList, deltaX, deltaY, deltaZ, deltaMode);
+  [_initWheelEvent](...args) {
+    return this.initWheelEvent.apply(this, args);
   }
 };
 dart.setSignature(html.WheelEvent, {
@@ -76058,11 +76058,11 @@
     this[_ensureRequestAnimationFrame]();
     this[_cancelAnimationFrame](id);
   }
-  [_requestAnimationFrame](callback) {
-    return this.requestAnimationFrame(callback);
+  [_requestAnimationFrame](...args) {
+    return this.requestAnimationFrame.apply(this, args);
   }
-  [_cancelAnimationFrame](id) {
-    return this.cancelAnimationFrame(id);
+  [_cancelAnimationFrame](...args) {
+    return this.cancelAnimationFrame.apply(this, args);
   }
   [_ensureRequestAnimationFrame]() {
     if (!!(this.requestAnimationFrame && this.cancelAnimationFrame)) return;
@@ -76255,20 +76255,20 @@
     }
     dart.throw(new core.ArgumentError("Incorrect number or type of arguments"));
   }
-  [__getter___1](index) {
-    return this.__getter__(index);
+  [__getter___1](...args) {
+    return this.__getter__.apply(this, args);
   }
-  [__getter___2](name) {
-    return this.__getter__(name);
+  [__getter___2](...args) {
+    return this.__getter__.apply(this, args);
   }
-  [dartx.alert](message) {
-    return this.alert(message);
+  [dartx.alert](...args) {
+    return this.alert.apply(this, args);
   }
-  [dartx.close]() {
-    return this.close();
+  [dartx.close](...args) {
+    return this.close.apply(this, args);
   }
-  [dartx.confirm](message) {
-    return this.confirm(message);
+  [dartx.confirm](...args) {
+    return this.confirm.apply(this, args);
   }
   [dartx.fetch](input, init) {
     if (init === void 0) init = null;
@@ -76278,35 +76278,35 @@
     }
     return this[_fetch_2](input);
   }
-  [_fetch_1](input, init) {
-    return this.fetch(input, init);
+  [_fetch_1](...args) {
+    return this.fetch.apply(this, args);
   }
-  [_fetch_2](input) {
-    return this.fetch(input);
+  [_fetch_2](...args) {
+    return this.fetch.apply(this, args);
   }
-  [dartx.find](string, caseSensitive, backwards, wrap, wholeWord, searchInFrames, showDialog) {
-    return this.find(string, caseSensitive, backwards, wrap, wholeWord, searchInFrames, showDialog);
+  [dartx.find](...args) {
+    return this.find.apply(this, args);
   }
-  [_getComputedStyle](elt, pseudoElt) {
-    return this.getComputedStyle(elt, pseudoElt);
+  [_getComputedStyle](...args) {
+    return this.getComputedStyle.apply(this, args);
   }
-  [dartx.getMatchedCssRules](element, pseudoElement) {
-    return this.getMatchedCSSRules(element, pseudoElement);
+  [dartx.getMatchedCssRules](...args) {
+    return this.getMatchedCSSRules.apply(this, args);
   }
-  [dartx.getSelection]() {
-    return this.getSelection();
+  [dartx.getSelection](...args) {
+    return this.getSelection.apply(this, args);
   }
-  [dartx.matchMedia](query) {
-    return this.matchMedia(query);
+  [dartx.matchMedia](...args) {
+    return this.matchMedia.apply(this, args);
   }
-  [dartx.moveBy](x, y) {
-    return this.moveBy(x, y);
+  [dartx.moveBy](...args) {
+    return this.moveBy.apply(this, args);
   }
-  [_moveTo](x, y) {
-    return this.moveTo(x, y);
+  [_moveTo](...args) {
+    return this.moveTo.apply(this, args);
   }
-  [dartx.openDatabase](name, version, displayName, estimatedSize, creationCallback) {
-    return this.openDatabase(name, version, displayName, estimatedSize, creationCallback);
+  [dartx.openDatabase](...args) {
+    return this.openDatabase.apply(this, args);
   }
   [dartx.postMessage](message, targetOrigin, transfer) {
     if (transfer === void 0) transfer = null;
@@ -76319,20 +76319,20 @@
     this[_postMessage_2](message_1, targetOrigin);
     return;
   }
-  [_postMessage_1](message, targetOrigin, transfer) {
-    return this.postMessage(message, targetOrigin, transfer);
+  [_postMessage_1](...args) {
+    return this.postMessage.apply(this, args);
   }
-  [_postMessage_2](message, targetOrigin) {
-    return this.postMessage(message, targetOrigin);
+  [_postMessage_2](...args) {
+    return this.postMessage.apply(this, args);
   }
-  [dartx.print]() {
-    return this.print();
+  [dartx.print](...args) {
+    return this.print.apply(this, args);
   }
-  [dartx.resizeBy](x, y) {
-    return this.resizeBy(x, y);
+  [dartx.resizeBy](...args) {
+    return this.resizeBy.apply(this, args);
   }
-  [dartx.resizeTo](x, y) {
-    return this.resizeTo(x, y);
+  [dartx.resizeTo](...args) {
+    return this.resizeTo.apply(this, args);
   }
   [dartx.scroll](options_OR_x, y, scrollOptions) {
     if (options_OR_x === void 0) options_OR_x = null;
@@ -76362,20 +76362,20 @@
     }
     dart.throw(new core.ArgumentError("Incorrect number or type of arguments"));
   }
-  [_scroll_1]() {
-    return this.scroll();
+  [_scroll_1](...args) {
+    return this.scroll.apply(this, args);
   }
-  [_scroll_2](options) {
-    return this.scroll(options);
+  [_scroll_2](...args) {
+    return this.scroll.apply(this, args);
   }
-  [_scroll_3](x, y) {
-    return this.scroll(x, y);
+  [_scroll_3](...args) {
+    return this.scroll.apply(this, args);
   }
-  [_scroll_4](x, y) {
-    return this.scroll(x, y);
+  [_scroll_4](...args) {
+    return this.scroll.apply(this, args);
   }
-  [_scroll_5](x, y, scrollOptions) {
-    return this.scroll(x, y, scrollOptions);
+  [_scroll_5](...args) {
+    return this.scroll.apply(this, args);
   }
   [dartx.scrollBy](options_OR_x, y, scrollOptions) {
     if (options_OR_x === void 0) options_OR_x = null;
@@ -76405,20 +76405,20 @@
     }
     dart.throw(new core.ArgumentError("Incorrect number or type of arguments"));
   }
-  [_scrollBy_1]() {
-    return this.scrollBy();
+  [_scrollBy_1](...args) {
+    return this.scrollBy.apply(this, args);
   }
-  [_scrollBy_2](options) {
-    return this.scrollBy(options);
+  [_scrollBy_2](...args) {
+    return this.scrollBy.apply(this, args);
   }
-  [_scrollBy_3](x, y) {
-    return this.scrollBy(x, y);
+  [_scrollBy_3](...args) {
+    return this.scrollBy.apply(this, args);
   }
-  [_scrollBy_4](x, y) {
-    return this.scrollBy(x, y);
+  [_scrollBy_4](...args) {
+    return this.scrollBy.apply(this, args);
   }
-  [_scrollBy_5](x, y, scrollOptions) {
-    return this.scrollBy(x, y, scrollOptions);
+  [_scrollBy_5](...args) {
+    return this.scrollBy.apply(this, args);
   }
   [dartx.scrollTo](options_OR_x, y, scrollOptions) {
     if (options_OR_x === void 0) options_OR_x = null;
@@ -76448,26 +76448,26 @@
     }
     dart.throw(new core.ArgumentError("Incorrect number or type of arguments"));
   }
-  [_scrollTo_1]() {
-    return this.scrollTo();
+  [_scrollTo_1](...args) {
+    return this.scrollTo.apply(this, args);
   }
-  [_scrollTo_2](options) {
-    return this.scrollTo(options);
+  [_scrollTo_2](...args) {
+    return this.scrollTo.apply(this, args);
   }
-  [_scrollTo_3](x, y) {
-    return this.scrollTo(x, y);
+  [_scrollTo_3](...args) {
+    return this.scrollTo.apply(this, args);
   }
-  [_scrollTo_4](x, y) {
-    return this.scrollTo(x, y);
+  [_scrollTo_4](...args) {
+    return this.scrollTo.apply(this, args);
   }
-  [_scrollTo_5](x, y, scrollOptions) {
-    return this.scrollTo(x, y, scrollOptions);
+  [_scrollTo_5](...args) {
+    return this.scrollTo.apply(this, args);
   }
-  [dartx.stop]() {
-    return this.stop();
+  [dartx.stop](...args) {
+    return this.stop.apply(this, args);
   }
-  [__requestFileSystem](type, size, successCallback, errorCallback) {
-    return this.webkitRequestFileSystem(type, size, successCallback, errorCallback);
+  [__requestFileSystem](...args) {
+    return this.webkitRequestFileSystem.apply(this, args);
   }
   [_requestFileSystem](type, size) {
     let completer = CompleterOfFileSystem().new();
@@ -76478,8 +76478,8 @@
     }, FileErrorTovoid()));
     return completer.future;
   }
-  [_resolveLocalFileSystemUrl](url, successCallback, errorCallback) {
-    return this.webkitResolveLocalFileSystemURL(url, successCallback, errorCallback);
+  [_resolveLocalFileSystemUrl](...args) {
+    return this.webkitResolveLocalFileSystemURL.apply(this, args);
   }
   [dartx.resolveLocalFileSystemUrl](url) {
     let completer = CompleterOfEntry().new();
@@ -76490,29 +76490,29 @@
     }, FileErrorTovoid()));
     return completer.future;
   }
-  [dartx.atob](atob) {
-    return this.atob(atob);
+  [dartx.atob](...args) {
+    return this.atob.apply(this, args);
   }
-  [dartx.btoa](btoa) {
-    return this.btoa(btoa);
+  [dartx.btoa](...args) {
+    return this.btoa.apply(this, args);
   }
-  [_setInterval_String](handler, timeout, arguments$) {
-    return this.setInterval(handler, timeout, arguments$);
+  [_setInterval_String](...args) {
+    return this.setInterval.apply(this, args);
   }
-  [_setTimeout_String](handler, timeout, arguments$) {
-    return this.setTimeout(handler, timeout, arguments$);
+  [_setTimeout_String](...args) {
+    return this.setTimeout.apply(this, args);
   }
-  [_clearInterval](handle) {
-    return this.clearInterval(handle);
+  [_clearInterval](...args) {
+    return this.clearInterval.apply(this, args);
   }
-  [_clearTimeout](handle) {
-    return this.clearTimeout(handle);
+  [_clearTimeout](...args) {
+    return this.clearTimeout.apply(this, args);
   }
-  [_setInterval](handler, timeout) {
-    return this.setInterval(handler, timeout);
+  [_setInterval](...args) {
+    return this.setInterval.apply(this, args);
   }
-  [_setTimeout](handler, timeout) {
-    return this.setTimeout(handler, timeout);
+  [_setTimeout](...args) {
+    return this.setTimeout.apply(this, args);
   }
   get [dartx.onContentLoaded]() {
     return html.Window.contentLoadedEvent.forTarget(this);
@@ -77226,8 +77226,8 @@
   get [dartx.visibilityState]() {
     return this.visibilityState;
   }
-  [dartx.focus]() {
-    return this.focus();
+  [dartx.focus](...args) {
+    return this.focus.apply(this, args);
   }
 };
 dart.setSignature(html.WindowClient, {
@@ -77357,14 +77357,14 @@
     this[_postMessage_2](message_1);
     return;
   }
-  [_postMessage_1](message, transfer) {
-    return this.postMessage(message, transfer);
+  [_postMessage_1](...args) {
+    return this.postMessage.apply(this, args);
   }
-  [_postMessage_2](message) {
-    return this.postMessage(message);
+  [_postMessage_2](...args) {
+    return this.postMessage.apply(this, args);
   }
-  [dartx.terminate]() {
-    return this.terminate();
+  [dartx.terminate](...args) {
+    return this.terminate.apply(this, args);
   }
   get [dartx.onError]() {
     return html.Worker.errorEvent.forTarget(this);
@@ -77435,35 +77435,35 @@
   get [dartx.memory]() {
     return this.memory;
   }
-  [dartx.clearMarks](markName) {
-    return this.clearMarks(markName);
+  [dartx.clearMarks](...args) {
+    return this.clearMarks.apply(this, args);
   }
-  [dartx.clearMeasures](measureName) {
-    return this.clearMeasures(measureName);
+  [dartx.clearMeasures](...args) {
+    return this.clearMeasures.apply(this, args);
   }
-  [dartx.getEntries]() {
-    return this.getEntries();
+  [dartx.getEntries](...args) {
+    return this.getEntries.apply(this, args);
   }
-  [dartx.getEntriesByName](name, entryType) {
-    return this.getEntriesByName(name, entryType);
+  [dartx.getEntriesByName](...args) {
+    return this.getEntriesByName.apply(this, args);
   }
-  [dartx.getEntriesByType](entryType) {
-    return this.getEntriesByType(entryType);
+  [dartx.getEntriesByType](...args) {
+    return this.getEntriesByType.apply(this, args);
   }
-  [dartx.mark](markName) {
-    return this.mark(markName);
+  [dartx.mark](...args) {
+    return this.mark.apply(this, args);
   }
-  [dartx.measure](measureName, startMark, endMark) {
-    return this.measure(measureName, startMark, endMark);
+  [dartx.measure](...args) {
+    return this.measure.apply(this, args);
   }
-  [dartx.now]() {
-    return this.now();
+  [dartx.now](...args) {
+    return this.now.apply(this, args);
   }
-  [dartx.clearResourceTimings]() {
-    return this.webkitClearResourceTimings();
+  [dartx.clearResourceTimings](...args) {
+    return this.webkitClearResourceTimings.apply(this, args);
   }
-  [dartx.setResourceTimingBufferSize](maxSize) {
-    return this.webkitSetResourceTimingBufferSize(maxSize);
+  [dartx.setResourceTimingBufferSize](...args) {
+    return this.webkitSetResourceTimingBufferSize.apply(this, args);
   }
 };
 dart.setSignature(html.WorkerPerformance, {
@@ -77498,14 +77498,14 @@
   static _create_1() {
     return new XPathEvaluator();
   }
-  [dartx.createExpression](expression, resolver) {
-    return this.createExpression(expression, resolver);
+  [dartx.createExpression](...args) {
+    return this.createExpression.apply(this, args);
   }
-  [dartx.createNSResolver](nodeResolver) {
-    return this.createNSResolver(nodeResolver);
+  [dartx.createNSResolver](...args) {
+    return this.createNSResolver.apply(this, args);
   }
-  [dartx.evaluate](expression, contextNode, resolver, type, inResult) {
-    return this.evaluate(expression, contextNode, resolver, type, inResult);
+  [dartx.evaluate](...args) {
+    return this.evaluate.apply(this, args);
   }
 };
 dart.setSignature(html.XPathEvaluator, {
@@ -77529,8 +77529,8 @@
   static _() {
     dart.throw(new core.UnsupportedError("Not supported"));
   }
-  [dartx.evaluate](contextNode, type, inResult) {
-    return this.evaluate(contextNode, type, inResult);
+  [dartx.evaluate](...args) {
+    return this.evaluate.apply(this, args);
   }
 };
 dart.setSignature(html.XPathExpression, {
@@ -77545,8 +77545,8 @@
   static _() {
     dart.throw(new core.UnsupportedError("Not supported"));
   }
-  [dartx.lookupNamespaceUri](prefix) {
-    return this.lookupNamespaceURI(prefix);
+  [dartx.lookupNamespaceUri](...args) {
+    return this.lookupNamespaceURI.apply(this, args);
   }
 };
 dart.setSignature(html.XPathNSResolver, {
@@ -77590,11 +77590,11 @@
   get [dartx.stringValue]() {
     return this.stringValue;
   }
-  [dartx.iterateNext]() {
-    return this.iterateNext();
+  [dartx.iterateNext](...args) {
+    return this.iterateNext.apply(this, args);
   }
-  [dartx.snapshotItem](index) {
-    return this.snapshotItem(index);
+  [dartx.snapshotItem](...args) {
+    return this.snapshotItem.apply(this, args);
   }
 };
 dart.setSignature(html.XPathResult, {
@@ -77658,8 +77658,8 @@
   static _create_1() {
     return new XMLSerializer();
   }
-  [dartx.serializeToString](root) {
-    return this.serializeToString(root);
+  [dartx.serializeToString](...args) {
+    return this.serializeToString.apply(this, args);
   }
 };
 dart.setSignature(html.XmlSerializer, {
@@ -77695,29 +77695,29 @@
   static get supported() {
     return !!window.XSLTProcessor;
   }
-  [dartx.clearParameters]() {
-    return this.clearParameters();
+  [dartx.clearParameters](...args) {
+    return this.clearParameters.apply(this, args);
   }
-  [dartx.getParameter](namespaceURI, localName) {
-    return this.getParameter(namespaceURI, localName);
+  [dartx.getParameter](...args) {
+    return this.getParameter.apply(this, args);
   }
-  [dartx.importStylesheet](style) {
-    return this.importStylesheet(style);
+  [dartx.importStylesheet](...args) {
+    return this.importStylesheet.apply(this, args);
   }
-  [dartx.removeParameter](namespaceURI, localName) {
-    return this.removeParameter(namespaceURI, localName);
+  [dartx.removeParameter](...args) {
+    return this.removeParameter.apply(this, args);
   }
-  [dartx.reset]() {
-    return this.reset();
+  [dartx.reset](...args) {
+    return this.reset.apply(this, args);
   }
-  [dartx.setParameter](namespaceURI, localName, value) {
-    return this.setParameter(namespaceURI, localName, value);
+  [dartx.setParameter](...args) {
+    return this.setParameter.apply(this, args);
   }
-  [dartx.transformToDocument](source) {
-    return this.transformToDocument(source);
+  [dartx.transformToDocument](...args) {
+    return this.transformToDocument.apply(this, args);
   }
-  [dartx.transformToFragment](source, output) {
-    return this.transformToFragment(source, output);
+  [dartx.transformToFragment](...args) {
+    return this.transformToFragment.apply(this, args);
   }
 };
 dart.setSignature(html.XsltProcessor, {
@@ -77982,11 +77982,11 @@
   [dartx.elementAt](index) {
     return this[dartx._get](index);
   }
-  [__getter__](index) {
-    return this.__getter__(index);
+  [__getter__](...args) {
+    return this.__getter__.apply(this, args);
   }
-  [dartx.item](index) {
-    return this.item(index);
+  [dartx.item](...args) {
+    return this.item.apply(this, args);
   }
 };
 html._ClientRectList[dart.implements] = () => [ListOfRectangleOfnum()];
@@ -78062,8 +78062,8 @@
   [dartx.elementAt](index) {
     return this[dartx._get](index);
   }
-  [dartx.item](index) {
-    return this.item(index);
+  [dartx.item](...args) {
+    return this.item.apply(this, args);
   }
 };
 html._CssRuleList[dart.implements] = () => [_js_helper.JavaScriptIndexingBehavior, ListOfCssRule()];
@@ -78315,8 +78315,8 @@
   [dartx.elementAt](index) {
     return this[dartx._get](index);
   }
-  [dartx.item](index) {
-    return this.item(index);
+  [dartx.item](...args) {
+    return this.item.apply(this, args);
   }
 };
 html._GamepadList[dart.implements] = () => [_js_helper.JavaScriptIndexingBehavior, ListOfGamepad()];
@@ -78341,8 +78341,8 @@
   static _() {
     dart.throw(new core.UnsupportedError("Not supported"));
   }
-  [_item](index) {
-    return this.item(index);
+  [_item](...args) {
+    return this.item.apply(this, args);
   }
 };
 dart.setSignature(html._HTMLAllCollection, {
@@ -78506,26 +78506,26 @@
   [dartx.elementAt](index) {
     return this[dartx._get](index);
   }
-  [dartx.getNamedItem](name) {
-    return this.getNamedItem(name);
+  [dartx.getNamedItem](...args) {
+    return this.getNamedItem.apply(this, args);
   }
-  [dartx.getNamedItemNS](namespaceURI, localName) {
-    return this.getNamedItemNS(namespaceURI, localName);
+  [dartx.getNamedItemNS](...args) {
+    return this.getNamedItemNS.apply(this, args);
   }
-  [dartx.item](index) {
-    return this.item(index);
+  [dartx.item](...args) {
+    return this.item.apply(this, args);
   }
-  [dartx.removeNamedItem](name) {
-    return this.removeNamedItem(name);
+  [dartx.removeNamedItem](...args) {
+    return this.removeNamedItem.apply(this, args);
   }
-  [dartx.removeNamedItemNS](namespaceURI, localName) {
-    return this.removeNamedItemNS(namespaceURI, localName);
+  [dartx.removeNamedItemNS](...args) {
+    return this.removeNamedItemNS.apply(this, args);
   }
-  [dartx.setNamedItem](attr) {
-    return this.setNamedItem(attr);
+  [dartx.setNamedItem](...args) {
+    return this.setNamedItem.apply(this, args);
   }
-  [dartx.setNamedItemNS](attr) {
-    return this.setNamedItemNS(attr);
+  [dartx.setNamedItemNS](...args) {
+    return this.setNamedItemNS.apply(this, args);
   }
 };
 html._NamedNodeMap[dart.implements] = () => [_js_helper.JavaScriptIndexingBehavior, ListOfNode()];
@@ -78607,8 +78607,8 @@
   get [dartx.url]() {
     return this.url;
   }
-  [dartx.clone]() {
-    return this.clone();
+  [dartx.clone](...args) {
+    return this.clone.apply(this, args);
   }
 };
 dart.setSignature(html._Request, {
@@ -78734,8 +78734,8 @@
   [dartx.elementAt](index) {
     return this[dartx._get](index);
   }
-  [dartx.item](index) {
-    return this.item(index);
+  [dartx.item](...args) {
+    return this.item.apply(this, args);
   }
 };
 html._SpeechRecognitionResultList[dart.implements] = () => [_js_helper.JavaScriptIndexingBehavior, ListOfSpeechRecognitionResult()];
@@ -78809,11 +78809,11 @@
   [dartx.elementAt](index) {
     return this[dartx._get](index);
   }
-  [__getter__](name) {
-    return this.__getter__(name);
+  [__getter__](...args) {
+    return this.__getter__.apply(this, args);
   }
-  [dartx.item](index) {
-    return this.item(index);
+  [dartx.item](...args) {
+    return this.item.apply(this, args);
   }
 };
 html._StyleSheetList[dart.implements] = () => [_js_helper.JavaScriptIndexingBehavior, ListOfStyleSheet()];
@@ -84005,11 +84005,11 @@
   get [dartx.viewportElement]() {
     return this.viewportElement;
   }
-  [dartx.blur]() {
-    return this.blur();
+  [dartx.blur](...args) {
+    return this.blur.apply(this, args);
   }
-  [dartx.focus]() {
-    return this.focus();
+  [dartx.focus](...args) {
+    return this.focus.apply(this, args);
   }
   get [dartx.onAbort]() {
     return svg.SvgElement.abortEvent.forElement(this);
@@ -84438,17 +84438,17 @@
   get [dartx.transform]() {
     return this.transform;
   }
-  [dartx.getBBox]() {
-    return this.getBBox();
+  [dartx.getBBox](...args) {
+    return this.getBBox.apply(this, args);
   }
-  [dartx.getCtm]() {
-    return this.getCTM();
+  [dartx.getCtm](...args) {
+    return this.getCTM.apply(this, args);
   }
-  [dartx.getScreenCtm]() {
-    return this.getScreenCTM();
+  [dartx.getScreenCtm](...args) {
+    return this.getScreenCTM.apply(this, args);
   }
-  [dartx.getTransformToElement](element) {
-    return this.getTransformToElement(element);
+  [dartx.getTransformToElement](...args) {
+    return this.getTransformToElement.apply(this, args);
   }
   get [dartx.requiredExtensions]() {
     return this.requiredExtensions;
@@ -84459,8 +84459,8 @@
   get [dartx.systemLanguage]() {
     return this.systemLanguage;
   }
-  [dartx.hasExtension](extension) {
-    return this.hasExtension(extension);
+  [dartx.hasExtension](...args) {
+    return this.hasExtension.apply(this, args);
   }
 };
 dart.defineNamedConstructor(svg.GraphicsElement, 'created');
@@ -84557,11 +84557,11 @@
   set [dartx.valueInSpecifiedUnits](value) {
     this.valueInSpecifiedUnits = value;
   }
-  [dartx.convertToSpecifiedUnits](unitType) {
-    return this.convertToSpecifiedUnits(unitType);
+  [dartx.convertToSpecifiedUnits](...args) {
+    return this.convertToSpecifiedUnits.apply(this, args);
   }
-  [dartx.newValueSpecifiedUnits](unitType, valueInSpecifiedUnits) {
-    return this.newValueSpecifiedUnits(unitType, valueInSpecifiedUnits);
+  [dartx.newValueSpecifiedUnits](...args) {
+    return this.newValueSpecifiedUnits.apply(this, args);
   }
 };
 dart.setSignature(svg.Angle, {
@@ -84621,26 +84621,26 @@
   get [dartx.targetElement]() {
     return this.targetElement;
   }
-  [dartx.beginElement]() {
-    return this.beginElement();
+  [dartx.beginElement](...args) {
+    return this.beginElement.apply(this, args);
   }
-  [dartx.beginElementAt](offset) {
-    return this.beginElementAt(offset);
+  [dartx.beginElementAt](...args) {
+    return this.beginElementAt.apply(this, args);
   }
-  [dartx.endElement]() {
-    return this.endElement();
+  [dartx.endElement](...args) {
+    return this.endElement.apply(this, args);
   }
-  [dartx.endElementAt](offset) {
-    return this.endElementAt(offset);
+  [dartx.endElementAt](...args) {
+    return this.endElementAt.apply(this, args);
   }
-  [dartx.getCurrentTime]() {
-    return this.getCurrentTime();
+  [dartx.getCurrentTime](...args) {
+    return this.getCurrentTime.apply(this, args);
   }
-  [dartx.getSimpleDuration]() {
-    return this.getSimpleDuration();
+  [dartx.getSimpleDuration](...args) {
+    return this.getSimpleDuration.apply(this, args);
   }
-  [dartx.getStartTime]() {
-    return this.getStartTime();
+  [dartx.getStartTime](...args) {
+    return this.getStartTime.apply(this, args);
   }
   get [dartx.requiredExtensions]() {
     return this.requiredExtensions;
@@ -84651,8 +84651,8 @@
   get [dartx.systemLanguage]() {
     return this.systemLanguage;
   }
-  [dartx.hasExtension](extension) {
-    return this.hasExtension(extension);
+  [dartx.hasExtension](...args) {
+    return this.hasExtension.apply(this, args);
   }
 };
 dart.defineNamedConstructor(svg.AnimationElement, 'created');
@@ -85055,11 +85055,11 @@
   created() {
     super.created();
   }
-  [dartx.isPointInFill](point) {
-    return this.isPointInFill(point);
+  [dartx.isPointInFill](...args) {
+    return this.isPointInFill.apply(this, args);
   }
-  [dartx.isPointInStroke](point) {
-    return this.isPointInStroke(point);
+  [dartx.isPointInStroke](...args) {
+    return this.isPointInStroke.apply(this, args);
   }
 };
 dart.defineNamedConstructor(svg.GeometryElement, 'created');
@@ -86185,8 +86185,8 @@
   get [dartx.stdDeviationY]() {
     return this.stdDeviationY;
   }
-  [dartx.setStdDeviation](stdDeviationX, stdDeviationY) {
-    return this.setStdDeviation(stdDeviationX, stdDeviationY);
+  [dartx.setStdDeviation](...args) {
+    return this.setStdDeviation.apply(this, args);
   }
   get [dartx.height]() {
     return this.height;
@@ -87271,11 +87271,11 @@
   set [dartx.valueInSpecifiedUnits](value) {
     this.valueInSpecifiedUnits = value;
   }
-  [dartx.convertToSpecifiedUnits](unitType) {
-    return this.convertToSpecifiedUnits(unitType);
+  [dartx.convertToSpecifiedUnits](...args) {
+    return this.convertToSpecifiedUnits.apply(this, args);
   }
-  [dartx.newValueSpecifiedUnits](unitType, valueInSpecifiedUnits) {
-    return this.newValueSpecifiedUnits(unitType, valueInSpecifiedUnits);
+  [dartx.newValueSpecifiedUnits](...args) {
+    return this.newValueSpecifiedUnits.apply(this, args);
   }
 };
 dart.setSignature(svg.Length, {
@@ -87380,29 +87380,29 @@
   [dartx.elementAt](index) {
     return this[dartx._get](index);
   }
-  [__setter__](index, newItem) {
-    return this.__setter__(index, newItem);
+  [__setter__](...args) {
+    return this.__setter__.apply(this, args);
   }
-  [dartx.appendItem](newItem) {
-    return this.appendItem(newItem);
+  [dartx.appendItem](...args) {
+    return this.appendItem.apply(this, args);
   }
-  [dartx.clear]() {
-    return this.clear();
+  [dartx.clear](...args) {
+    return this.clear.apply(this, args);
   }
-  [dartx.getItem](index) {
-    return this.getItem(index);
+  [dartx.getItem](...args) {
+    return this.getItem.apply(this, args);
   }
-  [dartx.initialize](newItem) {
-    return this.initialize(newItem);
+  [dartx.initialize](...args) {
+    return this.initialize.apply(this, args);
   }
-  [dartx.insertItemBefore](newItem, index) {
-    return this.insertItemBefore(newItem, index);
+  [dartx.insertItemBefore](...args) {
+    return this.insertItemBefore.apply(this, args);
   }
-  [dartx.removeItem](index) {
-    return this.removeItem(index);
+  [dartx.removeItem](...args) {
+    return this.removeItem.apply(this, args);
   }
-  [dartx.replaceItem](newItem, index) {
-    return this.replaceItem(newItem, index);
+  [dartx.replaceItem](...args) {
+    return this.replaceItem.apply(this, args);
   }
 };
 svg.LengthList[dart.implements] = () => [ListOfLength()];
@@ -87634,11 +87634,11 @@
   get [dartx.refY]() {
     return this.refY;
   }
-  [dartx.setOrientToAngle](angle) {
-    return this.setOrientToAngle(angle);
+  [dartx.setOrientToAngle](...args) {
+    return this.setOrientToAngle.apply(this, args);
   }
-  [dartx.setOrientToAuto]() {
-    return this.setOrientToAuto();
+  [dartx.setOrientToAuto](...args) {
+    return this.setOrientToAuto.apply(this, args);
   }
   get [dartx.preserveAspectRatio]() {
     return this.preserveAspectRatio;
@@ -87744,8 +87744,8 @@
   get [dartx.systemLanguage]() {
     return this.systemLanguage;
   }
-  [dartx.hasExtension](extension) {
-    return this.hasExtension(extension);
+  [dartx.hasExtension](...args) {
+    return this.hasExtension.apply(this, args);
   }
 };
 dart.defineNamedConstructor(svg.MaskElement, 'created');
@@ -87829,38 +87829,38 @@
   set [dartx.f](value) {
     this.f = value;
   }
-  [dartx.flipX]() {
-    return this.flipX();
+  [dartx.flipX](...args) {
+    return this.flipX.apply(this, args);
   }
-  [dartx.flipY]() {
-    return this.flipY();
+  [dartx.flipY](...args) {
+    return this.flipY.apply(this, args);
   }
-  [dartx.inverse]() {
-    return this.inverse();
+  [dartx.inverse](...args) {
+    return this.inverse.apply(this, args);
   }
-  [dartx.multiply](secondMatrix) {
-    return this.multiply(secondMatrix);
+  [dartx.multiply](...args) {
+    return this.multiply.apply(this, args);
   }
-  [dartx.rotate](angle) {
-    return this.rotate(angle);
+  [dartx.rotate](...args) {
+    return this.rotate.apply(this, args);
   }
-  [dartx.rotateFromVector](x, y) {
-    return this.rotateFromVector(x, y);
+  [dartx.rotateFromVector](...args) {
+    return this.rotateFromVector.apply(this, args);
   }
-  [dartx.scale](scaleFactor) {
-    return this.scale(scaleFactor);
+  [dartx.scale](...args) {
+    return this.scale.apply(this, args);
   }
-  [dartx.scaleNonUniform](scaleFactorX, scaleFactorY) {
-    return this.scaleNonUniform(scaleFactorX, scaleFactorY);
+  [dartx.scaleNonUniform](...args) {
+    return this.scaleNonUniform.apply(this, args);
   }
-  [dartx.skewX](angle) {
-    return this.skewX(angle);
+  [dartx.skewX](...args) {
+    return this.skewX.apply(this, args);
   }
-  [dartx.skewY](angle) {
-    return this.skewY(angle);
+  [dartx.skewY](...args) {
+    return this.skewY.apply(this, args);
   }
-  [dartx.translate](x, y) {
-    return this.translate(x, y);
+  [dartx.translate](...args) {
+    return this.translate.apply(this, args);
   }
 };
 dart.setSignature(svg.Matrix, {
@@ -87986,29 +87986,29 @@
   [dartx.elementAt](index) {
     return this[dartx._get](index);
   }
-  [__setter__](index, newItem) {
-    return this.__setter__(index, newItem);
+  [__setter__](...args) {
+    return this.__setter__.apply(this, args);
   }
-  [dartx.appendItem](newItem) {
-    return this.appendItem(newItem);
+  [dartx.appendItem](...args) {
+    return this.appendItem.apply(this, args);
   }
-  [dartx.clear]() {
-    return this.clear();
+  [dartx.clear](...args) {
+    return this.clear.apply(this, args);
   }
-  [dartx.getItem](index) {
-    return this.getItem(index);
+  [dartx.getItem](...args) {
+    return this.getItem.apply(this, args);
   }
-  [dartx.initialize](newItem) {
-    return this.initialize(newItem);
+  [dartx.initialize](...args) {
+    return this.initialize.apply(this, args);
   }
-  [dartx.insertItemBefore](newItem, index) {
-    return this.insertItemBefore(newItem, index);
+  [dartx.insertItemBefore](...args) {
+    return this.insertItemBefore.apply(this, args);
   }
-  [dartx.removeItem](index) {
-    return this.removeItem(index);
+  [dartx.removeItem](...args) {
+    return this.removeItem.apply(this, args);
   }
-  [dartx.replaceItem](newItem, index) {
-    return this.replaceItem(newItem, index);
+  [dartx.replaceItem](...args) {
+    return this.replaceItem.apply(this, args);
   }
 };
 svg.NumberList[dart.implements] = () => [ListOfNumber()];
@@ -88095,71 +88095,71 @@
   get [dartx.pathSegList]() {
     return this.pathSegList;
   }
-  [dartx.createSvgPathSegArcAbs](x, y, r1, r2, angle, largeArcFlag, sweepFlag) {
-    return this.createSVGPathSegArcAbs(x, y, r1, r2, angle, largeArcFlag, sweepFlag);
+  [dartx.createSvgPathSegArcAbs](...args) {
+    return this.createSVGPathSegArcAbs.apply(this, args);
   }
-  [dartx.createSvgPathSegArcRel](x, y, r1, r2, angle, largeArcFlag, sweepFlag) {
-    return this.createSVGPathSegArcRel(x, y, r1, r2, angle, largeArcFlag, sweepFlag);
+  [dartx.createSvgPathSegArcRel](...args) {
+    return this.createSVGPathSegArcRel.apply(this, args);
   }
-  [dartx.createSvgPathSegClosePath]() {
-    return this.createSVGPathSegClosePath();
+  [dartx.createSvgPathSegClosePath](...args) {
+    return this.createSVGPathSegClosePath.apply(this, args);
   }
-  [dartx.createSvgPathSegCurvetoCubicAbs](x, y, x1, y1, x2, y2) {
-    return this.createSVGPathSegCurvetoCubicAbs(x, y, x1, y1, x2, y2);
+  [dartx.createSvgPathSegCurvetoCubicAbs](...args) {
+    return this.createSVGPathSegCurvetoCubicAbs.apply(this, args);
   }
-  [dartx.createSvgPathSegCurvetoCubicRel](x, y, x1, y1, x2, y2) {
-    return this.createSVGPathSegCurvetoCubicRel(x, y, x1, y1, x2, y2);
+  [dartx.createSvgPathSegCurvetoCubicRel](...args) {
+    return this.createSVGPathSegCurvetoCubicRel.apply(this, args);
   }
-  [dartx.createSvgPathSegCurvetoCubicSmoothAbs](x, y, x2, y2) {
-    return this.createSVGPathSegCurvetoCubicSmoothAbs(x, y, x2, y2);
+  [dartx.createSvgPathSegCurvetoCubicSmoothAbs](...args) {
+    return this.createSVGPathSegCurvetoCubicSmoothAbs.apply(this, args);
   }
-  [dartx.createSvgPathSegCurvetoCubicSmoothRel](x, y, x2, y2) {
-    return this.createSVGPathSegCurvetoCubicSmoothRel(x, y, x2, y2);
+  [dartx.createSvgPathSegCurvetoCubicSmoothRel](...args) {
+    return this.createSVGPathSegCurvetoCubicSmoothRel.apply(this, args);
   }
-  [dartx.createSvgPathSegCurvetoQuadraticAbs](x, y, x1, y1) {
-    return this.createSVGPathSegCurvetoQuadraticAbs(x, y, x1, y1);
+  [dartx.createSvgPathSegCurvetoQuadraticAbs](...args) {
+    return this.createSVGPathSegCurvetoQuadraticAbs.apply(this, args);
   }
-  [dartx.createSvgPathSegCurvetoQuadraticRel](x, y, x1, y1) {
-    return this.createSVGPathSegCurvetoQuadraticRel(x, y, x1, y1);
+  [dartx.createSvgPathSegCurvetoQuadraticRel](...args) {
+    return this.createSVGPathSegCurvetoQuadraticRel.apply(this, args);
   }
-  [dartx.createSvgPathSegCurvetoQuadraticSmoothAbs](x, y) {
-    return this.createSVGPathSegCurvetoQuadraticSmoothAbs(x, y);
+  [dartx.createSvgPathSegCurvetoQuadraticSmoothAbs](...args) {
+    return this.createSVGPathSegCurvetoQuadraticSmoothAbs.apply(this, args);
   }
-  [dartx.createSvgPathSegCurvetoQuadraticSmoothRel](x, y) {
-    return this.createSVGPathSegCurvetoQuadraticSmoothRel(x, y);
+  [dartx.createSvgPathSegCurvetoQuadraticSmoothRel](...args) {
+    return this.createSVGPathSegCurvetoQuadraticSmoothRel.apply(this, args);
   }
-  [dartx.createSvgPathSegLinetoAbs](x, y) {
-    return this.createSVGPathSegLinetoAbs(x, y);
+  [dartx.createSvgPathSegLinetoAbs](...args) {
+    return this.createSVGPathSegLinetoAbs.apply(this, args);
   }
-  [dartx.createSvgPathSegLinetoHorizontalAbs](x) {
-    return this.createSVGPathSegLinetoHorizontalAbs(x);
+  [dartx.createSvgPathSegLinetoHorizontalAbs](...args) {
+    return this.createSVGPathSegLinetoHorizontalAbs.apply(this, args);
   }
-  [dartx.createSvgPathSegLinetoHorizontalRel](x) {
-    return this.createSVGPathSegLinetoHorizontalRel(x);
+  [dartx.createSvgPathSegLinetoHorizontalRel](...args) {
+    return this.createSVGPathSegLinetoHorizontalRel.apply(this, args);
   }
-  [dartx.createSvgPathSegLinetoRel](x, y) {
-    return this.createSVGPathSegLinetoRel(x, y);
+  [dartx.createSvgPathSegLinetoRel](...args) {
+    return this.createSVGPathSegLinetoRel.apply(this, args);
   }
-  [dartx.createSvgPathSegLinetoVerticalAbs](y) {
-    return this.createSVGPathSegLinetoVerticalAbs(y);
+  [dartx.createSvgPathSegLinetoVerticalAbs](...args) {
+    return this.createSVGPathSegLinetoVerticalAbs.apply(this, args);
   }
-  [dartx.createSvgPathSegLinetoVerticalRel](y) {
-    return this.createSVGPathSegLinetoVerticalRel(y);
+  [dartx.createSvgPathSegLinetoVerticalRel](...args) {
+    return this.createSVGPathSegLinetoVerticalRel.apply(this, args);
   }
-  [dartx.createSvgPathSegMovetoAbs](x, y) {
-    return this.createSVGPathSegMovetoAbs(x, y);
+  [dartx.createSvgPathSegMovetoAbs](...args) {
+    return this.createSVGPathSegMovetoAbs.apply(this, args);
   }
-  [dartx.createSvgPathSegMovetoRel](x, y) {
-    return this.createSVGPathSegMovetoRel(x, y);
+  [dartx.createSvgPathSegMovetoRel](...args) {
+    return this.createSVGPathSegMovetoRel.apply(this, args);
   }
-  [dartx.getPathSegAtLength](distance) {
-    return this.getPathSegAtLength(distance);
+  [dartx.getPathSegAtLength](...args) {
+    return this.getPathSegAtLength.apply(this, args);
   }
-  [dartx.getPointAtLength](distance) {
-    return this.getPointAtLength(distance);
+  [dartx.getPointAtLength](...args) {
+    return this.getPointAtLength.apply(this, args);
   }
-  [dartx.getTotalLength]() {
-    return this.getTotalLength();
+  [dartx.getTotalLength](...args) {
+    return this.getTotalLength.apply(this, args);
   }
 };
 dart.defineNamedConstructor(svg.PathElement, 'created');
@@ -88971,29 +88971,29 @@
   [dartx.elementAt](index) {
     return this[dartx._get](index);
   }
-  [__setter__](index, newItem) {
-    return this.__setter__(index, newItem);
+  [__setter__](...args) {
+    return this.__setter__.apply(this, args);
   }
-  [dartx.appendItem](newItem) {
-    return this.appendItem(newItem);
+  [dartx.appendItem](...args) {
+    return this.appendItem.apply(this, args);
   }
-  [dartx.clear]() {
-    return this.clear();
+  [dartx.clear](...args) {
+    return this.clear.apply(this, args);
   }
-  [dartx.getItem](index) {
-    return this.getItem(index);
+  [dartx.getItem](...args) {
+    return this.getItem.apply(this, args);
   }
-  [dartx.initialize](newItem) {
-    return this.initialize(newItem);
+  [dartx.initialize](...args) {
+    return this.initialize.apply(this, args);
   }
-  [dartx.insertItemBefore](newItem, index) {
-    return this.insertItemBefore(newItem, index);
+  [dartx.insertItemBefore](...args) {
+    return this.insertItemBefore.apply(this, args);
   }
-  [dartx.removeItem](index) {
-    return this.removeItem(index);
+  [dartx.removeItem](...args) {
+    return this.removeItem.apply(this, args);
   }
-  [dartx.replaceItem](newItem, index) {
-    return this.replaceItem(newItem, index);
+  [dartx.replaceItem](...args) {
+    return this.replaceItem.apply(this, args);
   }
 };
 svg.PathSegList[dart.implements] = () => [ListOfPathSeg()];
@@ -89154,8 +89154,8 @@
   get [dartx.systemLanguage]() {
     return this.systemLanguage;
   }
-  [dartx.hasExtension](extension) {
-    return this.hasExtension(extension);
+  [dartx.hasExtension](...args) {
+    return this.hasExtension.apply(this, args);
   }
   get [dartx.href]() {
     return this.href;
@@ -89208,8 +89208,8 @@
   set [dartx.y](value) {
     this.y = value;
   }
-  [dartx.matrixTransform](matrix) {
-    return this.matrixTransform(matrix);
+  [dartx.matrixTransform](...args) {
+    return this.matrixTransform.apply(this, args);
   }
 };
 dart.setSignature(svg.Point, {
@@ -89242,29 +89242,29 @@
   get [dartx.numberOfItems]() {
     return this.numberOfItems;
   }
-  [__setter__](index, newItem) {
-    return this.__setter__(index, newItem);
+  [__setter__](...args) {
+    return this.__setter__.apply(this, args);
   }
-  [dartx.appendItem](newItem) {
-    return this.appendItem(newItem);
+  [dartx.appendItem](...args) {
+    return this.appendItem.apply(this, args);
   }
-  [dartx.clear]() {
-    return this.clear();
+  [dartx.clear](...args) {
+    return this.clear.apply(this, args);
   }
-  [dartx.getItem](index) {
-    return this.getItem(index);
+  [dartx.getItem](...args) {
+    return this.getItem.apply(this, args);
   }
-  [dartx.initialize](newItem) {
-    return this.initialize(newItem);
+  [dartx.initialize](...args) {
+    return this.initialize.apply(this, args);
   }
-  [dartx.insertItemBefore](newItem, index) {
-    return this.insertItemBefore(newItem, index);
+  [dartx.insertItemBefore](...args) {
+    return this.insertItemBefore.apply(this, args);
   }
-  [dartx.removeItem](index) {
-    return this.removeItem(index);
+  [dartx.removeItem](...args) {
+    return this.removeItem.apply(this, args);
   }
-  [dartx.replaceItem](newItem, index) {
-    return this.replaceItem(newItem, index);
+  [dartx.replaceItem](...args) {
+    return this.replaceItem.apply(this, args);
   }
 };
 dart.setSignature(svg.PointList, {
@@ -89736,29 +89736,29 @@
   [dartx.elementAt](index) {
     return this[dartx._get](index);
   }
-  [__setter__](index, newItem) {
-    return this.__setter__(index, newItem);
+  [__setter__](...args) {
+    return this.__setter__.apply(this, args);
   }
-  [dartx.appendItem](newItem) {
-    return this.appendItem(newItem);
+  [dartx.appendItem](...args) {
+    return this.appendItem.apply(this, args);
   }
-  [dartx.clear]() {
-    return this.clear();
+  [dartx.clear](...args) {
+    return this.clear.apply(this, args);
   }
-  [dartx.getItem](index) {
-    return this.getItem(index);
+  [dartx.getItem](...args) {
+    return this.getItem.apply(this, args);
   }
-  [dartx.initialize](newItem) {
-    return this.initialize(newItem);
+  [dartx.initialize](...args) {
+    return this.initialize.apply(this, args);
   }
-  [dartx.insertItemBefore](item, index) {
-    return this.insertItemBefore(item, index);
+  [dartx.insertItemBefore](...args) {
+    return this.insertItemBefore.apply(this, args);
   }
-  [dartx.removeItem](index) {
-    return this.removeItem(index);
+  [dartx.removeItem](...args) {
+    return this.removeItem.apply(this, args);
   }
-  [dartx.replaceItem](newItem, index) {
-    return this.replaceItem(newItem, index);
+  [dartx.replaceItem](...args) {
+    return this.replaceItem.apply(this, args);
   }
 };
 svg.StringList[dart.implements] = () => [ListOfString()];
@@ -89985,74 +89985,74 @@
   get [dartx.y]() {
     return this.y;
   }
-  [dartx.animationsPaused]() {
-    return this.animationsPaused();
+  [dartx.animationsPaused](...args) {
+    return this.animationsPaused.apply(this, args);
   }
-  [dartx.checkEnclosure](element, rect) {
-    return this.checkEnclosure(element, rect);
+  [dartx.checkEnclosure](...args) {
+    return this.checkEnclosure.apply(this, args);
   }
-  [dartx.checkIntersection](element, rect) {
-    return this.checkIntersection(element, rect);
+  [dartx.checkIntersection](...args) {
+    return this.checkIntersection.apply(this, args);
   }
-  [dartx.createSvgAngle]() {
-    return this.createSVGAngle();
+  [dartx.createSvgAngle](...args) {
+    return this.createSVGAngle.apply(this, args);
   }
-  [dartx.createSvgLength]() {
-    return this.createSVGLength();
+  [dartx.createSvgLength](...args) {
+    return this.createSVGLength.apply(this, args);
   }
-  [dartx.createSvgMatrix]() {
-    return this.createSVGMatrix();
+  [dartx.createSvgMatrix](...args) {
+    return this.createSVGMatrix.apply(this, args);
   }
-  [dartx.createSvgNumber]() {
-    return this.createSVGNumber();
+  [dartx.createSvgNumber](...args) {
+    return this.createSVGNumber.apply(this, args);
   }
-  [dartx.createSvgPoint]() {
-    return this.createSVGPoint();
+  [dartx.createSvgPoint](...args) {
+    return this.createSVGPoint.apply(this, args);
   }
-  [dartx.createSvgRect]() {
-    return this.createSVGRect();
+  [dartx.createSvgRect](...args) {
+    return this.createSVGRect.apply(this, args);
   }
-  [dartx.createSvgTransform]() {
-    return this.createSVGTransform();
+  [dartx.createSvgTransform](...args) {
+    return this.createSVGTransform.apply(this, args);
   }
-  [dartx.createSvgTransformFromMatrix](matrix) {
-    return this.createSVGTransformFromMatrix(matrix);
+  [dartx.createSvgTransformFromMatrix](...args) {
+    return this.createSVGTransformFromMatrix.apply(this, args);
   }
-  [dartx.deselectAll]() {
-    return this.deselectAll();
+  [dartx.deselectAll](...args) {
+    return this.deselectAll.apply(this, args);
   }
-  [dartx.forceRedraw]() {
-    return this.forceRedraw();
+  [dartx.forceRedraw](...args) {
+    return this.forceRedraw.apply(this, args);
   }
-  [dartx.getCurrentTime]() {
-    return this.getCurrentTime();
+  [dartx.getCurrentTime](...args) {
+    return this.getCurrentTime.apply(this, args);
   }
-  [dartx.getElementById](elementId) {
-    return this.getElementById(elementId);
+  [dartx.getElementById](...args) {
+    return this.getElementById.apply(this, args);
   }
-  [dartx.getEnclosureList](rect, referenceElement) {
-    return this.getEnclosureList(rect, referenceElement);
+  [dartx.getEnclosureList](...args) {
+    return this.getEnclosureList.apply(this, args);
   }
-  [dartx.getIntersectionList](rect, referenceElement) {
-    return this.getIntersectionList(rect, referenceElement);
+  [dartx.getIntersectionList](...args) {
+    return this.getIntersectionList.apply(this, args);
   }
-  [dartx.pauseAnimations]() {
-    return this.pauseAnimations();
+  [dartx.pauseAnimations](...args) {
+    return this.pauseAnimations.apply(this, args);
   }
-  [dartx.setCurrentTime](seconds) {
-    return this.setCurrentTime(seconds);
+  [dartx.setCurrentTime](...args) {
+    return this.setCurrentTime.apply(this, args);
   }
-  [dartx.suspendRedraw](maxWaitMilliseconds) {
-    return this.suspendRedraw(maxWaitMilliseconds);
+  [dartx.suspendRedraw](...args) {
+    return this.suspendRedraw.apply(this, args);
   }
-  [dartx.unpauseAnimations]() {
-    return this.unpauseAnimations();
+  [dartx.unpauseAnimations](...args) {
+    return this.unpauseAnimations.apply(this, args);
   }
-  [dartx.unsuspendRedraw](suspendHandleId) {
-    return this.unsuspendRedraw(suspendHandleId);
+  [dartx.unsuspendRedraw](...args) {
+    return this.unsuspendRedraw.apply(this, args);
   }
-  [dartx.unsuspendRedrawAll]() {
-    return this.unsuspendRedrawAll();
+  [dartx.unsuspendRedrawAll](...args) {
+    return this.unsuspendRedrawAll.apply(this, args);
   }
   get [dartx.preserveAspectRatio]() {
     return this.preserveAspectRatio;
@@ -90205,32 +90205,32 @@
   get [dartx.textLength]() {
     return this.textLength;
   }
-  [dartx.getCharNumAtPosition](point) {
-    return this.getCharNumAtPosition(point);
+  [dartx.getCharNumAtPosition](...args) {
+    return this.getCharNumAtPosition.apply(this, args);
   }
-  [dartx.getComputedTextLength]() {
-    return this.getComputedTextLength();
+  [dartx.getComputedTextLength](...args) {
+    return this.getComputedTextLength.apply(this, args);
   }
-  [dartx.getEndPositionOfChar](charnum) {
-    return this.getEndPositionOfChar(charnum);
+  [dartx.getEndPositionOfChar](...args) {
+    return this.getEndPositionOfChar.apply(this, args);
   }
-  [dartx.getExtentOfChar](charnum) {
-    return this.getExtentOfChar(charnum);
+  [dartx.getExtentOfChar](...args) {
+    return this.getExtentOfChar.apply(this, args);
   }
-  [dartx.getNumberOfChars]() {
-    return this.getNumberOfChars();
+  [dartx.getNumberOfChars](...args) {
+    return this.getNumberOfChars.apply(this, args);
   }
-  [dartx.getRotationOfChar](charnum) {
-    return this.getRotationOfChar(charnum);
+  [dartx.getRotationOfChar](...args) {
+    return this.getRotationOfChar.apply(this, args);
   }
-  [dartx.getStartPositionOfChar](charnum) {
-    return this.getStartPositionOfChar(charnum);
+  [dartx.getStartPositionOfChar](...args) {
+    return this.getStartPositionOfChar.apply(this, args);
   }
-  [dartx.getSubStringLength](charnum, nchars) {
-    return this.getSubStringLength(charnum, nchars);
+  [dartx.getSubStringLength](...args) {
+    return this.getSubStringLength.apply(this, args);
   }
-  [dartx.selectSubString](charnum, nchars) {
-    return this.selectSubString(charnum, nchars);
+  [dartx.selectSubString](...args) {
+    return this.selectSubString.apply(this, args);
   }
 };
 dart.defineNamedConstructor(svg.TextContentElement, 'created');
@@ -90497,23 +90497,23 @@
   get [dartx.type]() {
     return this.type;
   }
-  [dartx.setMatrix](matrix) {
-    return this.setMatrix(matrix);
+  [dartx.setMatrix](...args) {
+    return this.setMatrix.apply(this, args);
   }
-  [dartx.setRotate](angle, cx, cy) {
-    return this.setRotate(angle, cx, cy);
+  [dartx.setRotate](...args) {
+    return this.setRotate.apply(this, args);
   }
-  [dartx.setScale](sx, sy) {
-    return this.setScale(sx, sy);
+  [dartx.setScale](...args) {
+    return this.setScale.apply(this, args);
   }
-  [dartx.setSkewX](angle) {
-    return this.setSkewX(angle);
+  [dartx.setSkewX](...args) {
+    return this.setSkewX.apply(this, args);
   }
-  [dartx.setSkewY](angle) {
-    return this.setSkewY(angle);
+  [dartx.setSkewY](...args) {
+    return this.setSkewY.apply(this, args);
   }
-  [dartx.setTranslate](tx, ty) {
-    return this.setTranslate(tx, ty);
+  [dartx.setTranslate](...args) {
+    return this.setTranslate.apply(this, args);
   }
 };
 dart.setSignature(svg.Transform, {
@@ -90614,35 +90614,35 @@
   [dartx.elementAt](index) {
     return this[dartx._get](index);
   }
-  [__setter__](index, newItem) {
-    return this.__setter__(index, newItem);
+  [__setter__](...args) {
+    return this.__setter__.apply(this, args);
   }
-  [dartx.appendItem](newItem) {
-    return this.appendItem(newItem);
+  [dartx.appendItem](...args) {
+    return this.appendItem.apply(this, args);
   }
-  [dartx.clear]() {
-    return this.clear();
+  [dartx.clear](...args) {
+    return this.clear.apply(this, args);
   }
-  [dartx.consolidate]() {
-    return this.consolidate();
+  [dartx.consolidate](...args) {
+    return this.consolidate.apply(this, args);
   }
-  [dartx.createSvgTransformFromMatrix](matrix) {
-    return this.createSVGTransformFromMatrix(matrix);
+  [dartx.createSvgTransformFromMatrix](...args) {
+    return this.createSVGTransformFromMatrix.apply(this, args);
   }
-  [dartx.getItem](index) {
-    return this.getItem(index);
+  [dartx.getItem](...args) {
+    return this.getItem.apply(this, args);
   }
-  [dartx.initialize](newItem) {
-    return this.initialize(newItem);
+  [dartx.initialize](...args) {
+    return this.initialize.apply(this, args);
   }
-  [dartx.insertItemBefore](newItem, index) {
-    return this.insertItemBefore(newItem, index);
+  [dartx.insertItemBefore](...args) {
+    return this.insertItemBefore.apply(this, args);
   }
-  [dartx.removeItem](index) {
-    return this.removeItem(index);
+  [dartx.removeItem](...args) {
+    return this.removeItem.apply(this, args);
   }
-  [dartx.replaceItem](newItem, index) {
-    return this.replaceItem(newItem, index);
+  [dartx.replaceItem](...args) {
+    return this.replaceItem.apply(this, args);
   }
 };
 svg.TransformList[dart.implements] = () => [ListOfTransform()];
@@ -91050,11 +91050,11 @@
   get [dartx.numberOfOutputs]() {
     return this.numberOfOutputs;
   }
-  [_connect](destination, output, input) {
-    return this.connect(destination, output, input);
+  [_connect](...args) {
+    return this.connect.apply(this, args);
   }
-  [dartx.disconnect](output) {
-    return this.disconnect(output);
+  [dartx.disconnect](...args) {
+    return this.disconnect.apply(this, args);
   }
   [dartx.connectNode](destination, output, input) {
     if (output === void 0) output = 0;
@@ -91126,17 +91126,17 @@
   set [dartx.smoothingTimeConstant](value) {
     this.smoothingTimeConstant = value;
   }
-  [dartx.getByteFrequencyData](array) {
-    return this.getByteFrequencyData(array);
+  [dartx.getByteFrequencyData](...args) {
+    return this.getByteFrequencyData.apply(this, args);
   }
-  [dartx.getByteTimeDomainData](array) {
-    return this.getByteTimeDomainData(array);
+  [dartx.getByteTimeDomainData](...args) {
+    return this.getByteTimeDomainData.apply(this, args);
   }
-  [dartx.getFloatFrequencyData](array) {
-    return this.getFloatFrequencyData(array);
+  [dartx.getFloatFrequencyData](...args) {
+    return this.getFloatFrequencyData.apply(this, args);
   }
-  [dartx.getFloatTimeDomainData](array) {
-    return this.getFloatTimeDomainData(array);
+  [dartx.getFloatTimeDomainData](...args) {
+    return this.getFloatTimeDomainData.apply(this, args);
   }
 };
 dart.setSignature(web_audio.AnalyserNode, {
@@ -91180,8 +91180,8 @@
   get [dartx.sampleRate]() {
     return this.sampleRate;
   }
-  [dartx.getChannelData](channelIndex) {
-    return this.getChannelData(channelIndex);
+  [dartx.getChannelData](...args) {
+    return this.getChannelData.apply(this, args);
   }
 };
 dart.setSignature(web_audio.AudioBuffer, {
@@ -91343,59 +91343,59 @@
   get [dartx.sampleRate]() {
     return this.sampleRate;
   }
-  [dartx.createAnalyser]() {
-    return this.createAnalyser();
+  [dartx.createAnalyser](...args) {
+    return this.createAnalyser.apply(this, args);
   }
-  [dartx.createBiquadFilter]() {
-    return this.createBiquadFilter();
+  [dartx.createBiquadFilter](...args) {
+    return this.createBiquadFilter.apply(this, args);
   }
-  [dartx.createBuffer](numberOfChannels, numberOfFrames, sampleRate) {
-    return this.createBuffer(numberOfChannels, numberOfFrames, sampleRate);
+  [dartx.createBuffer](...args) {
+    return this.createBuffer.apply(this, args);
   }
-  [dartx.createBufferSource]() {
-    return this.createBufferSource();
+  [dartx.createBufferSource](...args) {
+    return this.createBufferSource.apply(this, args);
   }
-  [dartx.createChannelMerger](numberOfInputs) {
-    return this.createChannelMerger(numberOfInputs);
+  [dartx.createChannelMerger](...args) {
+    return this.createChannelMerger.apply(this, args);
   }
-  [dartx.createChannelSplitter](numberOfOutputs) {
-    return this.createChannelSplitter(numberOfOutputs);
+  [dartx.createChannelSplitter](...args) {
+    return this.createChannelSplitter.apply(this, args);
   }
-  [dartx.createConvolver]() {
-    return this.createConvolver();
+  [dartx.createConvolver](...args) {
+    return this.createConvolver.apply(this, args);
   }
-  [dartx.createDelay](maxDelayTime) {
-    return this.createDelay(maxDelayTime);
+  [dartx.createDelay](...args) {
+    return this.createDelay.apply(this, args);
   }
-  [dartx.createDynamicsCompressor]() {
-    return this.createDynamicsCompressor();
+  [dartx.createDynamicsCompressor](...args) {
+    return this.createDynamicsCompressor.apply(this, args);
   }
-  [dartx.createMediaElementSource](mediaElement) {
-    return this.createMediaElementSource(mediaElement);
+  [dartx.createMediaElementSource](...args) {
+    return this.createMediaElementSource.apply(this, args);
   }
-  [dartx.createMediaStreamDestination]() {
-    return this.createMediaStreamDestination();
+  [dartx.createMediaStreamDestination](...args) {
+    return this.createMediaStreamDestination.apply(this, args);
   }
-  [dartx.createMediaStreamSource](mediaStream) {
-    return this.createMediaStreamSource(mediaStream);
+  [dartx.createMediaStreamSource](...args) {
+    return this.createMediaStreamSource.apply(this, args);
   }
-  [dartx.createOscillator]() {
-    return this.createOscillator();
+  [dartx.createOscillator](...args) {
+    return this.createOscillator.apply(this, args);
   }
-  [dartx.createPanner]() {
-    return this.createPanner();
+  [dartx.createPanner](...args) {
+    return this.createPanner.apply(this, args);
   }
-  [dartx.createPeriodicWave](real, imag) {
-    return this.createPeriodicWave(real, imag);
+  [dartx.createPeriodicWave](...args) {
+    return this.createPeriodicWave.apply(this, args);
   }
-  [dartx.createWaveShaper]() {
-    return this.createWaveShaper();
+  [dartx.createWaveShaper](...args) {
+    return this.createWaveShaper.apply(this, args);
   }
-  [_decodeAudioData](audioData, successCallback, errorCallback) {
-    return this.decodeAudioData(audioData, successCallback, errorCallback);
+  [_decodeAudioData](...args) {
+    return this.decodeAudioData.apply(this, args);
   }
-  [dartx.startRendering]() {
-    return this.startRendering();
+  [dartx.startRendering](...args) {
+    return this.startRendering.apply(this, args);
   }
   get [dartx.onComplete]() {
     return web_audio.AudioContext.completeEvent.forTarget(this);
@@ -91516,14 +91516,14 @@
   set [dartx.speedOfSound](value) {
     this.speedOfSound = value;
   }
-  [dartx.setOrientation](x, y, z, xUp, yUp, zUp) {
-    return this.setOrientation(x, y, z, xUp, yUp, zUp);
+  [dartx.setOrientation](...args) {
+    return this.setOrientation.apply(this, args);
   }
-  [dartx.setPosition](x, y, z) {
-    return this.setPosition(x, y, z);
+  [dartx.setPosition](...args) {
+    return this.setPosition.apply(this, args);
   }
-  [dartx.setVelocity](x, y, z) {
-    return this.setVelocity(x, y, z);
+  [dartx.setVelocity](...args) {
+    return this.setVelocity.apply(this, args);
   }
 };
 dart.setSignature(web_audio.AudioListener, {
@@ -91562,23 +91562,23 @@
   set [dartx.value](value) {
     this.value = value;
   }
-  [dartx.cancelScheduledValues](startTime) {
-    return this.cancelScheduledValues(startTime);
+  [dartx.cancelScheduledValues](...args) {
+    return this.cancelScheduledValues.apply(this, args);
   }
-  [dartx.exponentialRampToValueAtTime](value, time) {
-    return this.exponentialRampToValueAtTime(value, time);
+  [dartx.exponentialRampToValueAtTime](...args) {
+    return this.exponentialRampToValueAtTime.apply(this, args);
   }
-  [dartx.linearRampToValueAtTime](value, time) {
-    return this.linearRampToValueAtTime(value, time);
+  [dartx.linearRampToValueAtTime](...args) {
+    return this.linearRampToValueAtTime.apply(this, args);
   }
-  [dartx.setTargetAtTime](target, time, timeConstant) {
-    return this.setTargetAtTime(target, time, timeConstant);
+  [dartx.setTargetAtTime](...args) {
+    return this.setTargetAtTime.apply(this, args);
   }
-  [dartx.setValueAtTime](value, time) {
-    return this.setValueAtTime(value, time);
+  [dartx.setValueAtTime](...args) {
+    return this.setValueAtTime.apply(this, args);
   }
-  [dartx.setValueCurveAtTime](values, time, duration) {
-    return this.setValueCurveAtTime(values, time, duration);
+  [dartx.setValueCurveAtTime](...args) {
+    return this.setValueCurveAtTime.apply(this, args);
   }
 };
 dart.setSignature(web_audio.AudioParam, {
@@ -91655,8 +91655,8 @@
   set [dartx.type](value) {
     this.type = value;
   }
-  [dartx.getFrequencyResponse](frequencyHz, magResponse, phaseResponse) {
-    return this.getFrequencyResponse(frequencyHz, magResponse, phaseResponse);
+  [dartx.getFrequencyResponse](...args) {
+    return this.getFrequencyResponse.apply(this, args);
   }
 };
 dart.setSignature(web_audio.BiquadFilterNode, {
@@ -91907,20 +91907,20 @@
   set [dartx.type](value) {
     this.type = value;
   }
-  [dartx.noteOff](when) {
-    return this.noteOff(when);
+  [dartx.noteOff](...args) {
+    return this.noteOff.apply(this, args);
   }
-  [dartx.noteOn](when) {
-    return this.noteOn(when);
+  [dartx.noteOn](...args) {
+    return this.noteOn.apply(this, args);
   }
-  [dartx.setPeriodicWave](periodicWave) {
-    return this.setPeriodicWave(periodicWave);
+  [dartx.setPeriodicWave](...args) {
+    return this.setPeriodicWave.apply(this, args);
   }
-  [dartx.start](when) {
-    return this.start(when);
+  [dartx.start](...args) {
+    return this.start.apply(this, args);
   }
-  [dartx.stop](when) {
-    return this.stop(when);
+  [dartx.stop](...args) {
+    return this.stop.apply(this, args);
   }
   get [dartx.onEnded]() {
     return web_audio.OscillatorNode.endedEvent.forTarget(this);
@@ -92011,14 +92011,14 @@
   set [dartx.rolloffFactor](value) {
     this.rolloffFactor = value;
   }
-  [dartx.setOrientation](x, y, z) {
-    return this.setOrientation(x, y, z);
+  [dartx.setOrientation](...args) {
+    return this.setOrientation.apply(this, args);
   }
-  [dartx.setPosition](x, y, z) {
-    return this.setPosition(x, y, z);
+  [dartx.setPosition](...args) {
+    return this.setPosition.apply(this, args);
   }
-  [dartx.setVelocity](x, y, z) {
-    return this.setVelocity(x, y, z);
+  [dartx.setVelocity](...args) {
+    return this.setVelocity.apply(this, args);
   }
 };
 dart.setSignature(web_audio.PannerNode, {
@@ -92063,8 +92063,8 @@
   get [dartx.bufferSize]() {
     return this.bufferSize;
   }
-  [dartx.setEventListener](eventListener) {
-    return this.setEventListener(eventListener);
+  [dartx.setEventListener](...args) {
+    return this.setEventListener.apply(this, args);
   }
   get [dartx.onAudioProcess]() {
     return web_audio.ScriptProcessorNode.audioProcessEvent.forTarget(this);
@@ -92295,323 +92295,323 @@
   get [dartx.drawingBufferWidth]() {
     return this.drawingBufferWidth;
   }
-  [dartx.activeTexture](texture) {
-    return this.activeTexture(texture);
+  [dartx.activeTexture](...args) {
+    return this.activeTexture.apply(this, args);
   }
-  [dartx.attachShader](program, shader) {
-    return this.attachShader(program, shader);
+  [dartx.attachShader](...args) {
+    return this.attachShader.apply(this, args);
   }
-  [dartx.bindAttribLocation](program, index, name) {
-    return this.bindAttribLocation(program, index, name);
+  [dartx.bindAttribLocation](...args) {
+    return this.bindAttribLocation.apply(this, args);
   }
-  [dartx.bindBuffer](target, buffer) {
-    return this.bindBuffer(target, buffer);
+  [dartx.bindBuffer](...args) {
+    return this.bindBuffer.apply(this, args);
   }
-  [dartx.bindFramebuffer](target, framebuffer) {
-    return this.bindFramebuffer(target, framebuffer);
+  [dartx.bindFramebuffer](...args) {
+    return this.bindFramebuffer.apply(this, args);
   }
-  [dartx.bindRenderbuffer](target, renderbuffer) {
-    return this.bindRenderbuffer(target, renderbuffer);
+  [dartx.bindRenderbuffer](...args) {
+    return this.bindRenderbuffer.apply(this, args);
   }
-  [dartx.bindTexture](target, texture) {
-    return this.bindTexture(target, texture);
+  [dartx.bindTexture](...args) {
+    return this.bindTexture.apply(this, args);
   }
-  [dartx.blendColor](red, green, blue, alpha) {
-    return this.blendColor(red, green, blue, alpha);
+  [dartx.blendColor](...args) {
+    return this.blendColor.apply(this, args);
   }
-  [dartx.blendEquation](mode) {
-    return this.blendEquation(mode);
+  [dartx.blendEquation](...args) {
+    return this.blendEquation.apply(this, args);
   }
-  [dartx.blendEquationSeparate](modeRGB, modeAlpha) {
-    return this.blendEquationSeparate(modeRGB, modeAlpha);
+  [dartx.blendEquationSeparate](...args) {
+    return this.blendEquationSeparate.apply(this, args);
   }
-  [dartx.blendFunc](sfactor, dfactor) {
-    return this.blendFunc(sfactor, dfactor);
+  [dartx.blendFunc](...args) {
+    return this.blendFunc.apply(this, args);
   }
-  [dartx.blendFuncSeparate](srcRGB, dstRGB, srcAlpha, dstAlpha) {
-    return this.blendFuncSeparate(srcRGB, dstRGB, srcAlpha, dstAlpha);
+  [dartx.blendFuncSeparate](...args) {
+    return this.blendFuncSeparate.apply(this, args);
   }
-  [dartx.bufferByteData](target, data, usage) {
-    return this.bufferData(target, data, usage);
+  [dartx.bufferByteData](...args) {
+    return this.bufferData.apply(this, args);
   }
-  [dartx.bufferData](target, data_OR_size, usage) {
-    return this.bufferData(target, data_OR_size, usage);
+  [dartx.bufferData](...args) {
+    return this.bufferData.apply(this, args);
   }
-  [dartx.bufferDataTyped](target, data, usage) {
-    return this.bufferData(target, data, usage);
+  [dartx.bufferDataTyped](...args) {
+    return this.bufferData.apply(this, args);
   }
-  [dartx.bufferSubByteData](target, offset, data) {
-    return this.bufferSubData(target, offset, data);
+  [dartx.bufferSubByteData](...args) {
+    return this.bufferSubData.apply(this, args);
   }
-  [dartx.bufferSubData](target, offset, data) {
-    return this.bufferSubData(target, offset, data);
+  [dartx.bufferSubData](...args) {
+    return this.bufferSubData.apply(this, args);
   }
-  [dartx.bufferSubDataTyped](target, offset, data) {
-    return this.bufferSubData(target, offset, data);
+  [dartx.bufferSubDataTyped](...args) {
+    return this.bufferSubData.apply(this, args);
   }
-  [dartx.checkFramebufferStatus](target) {
-    return this.checkFramebufferStatus(target);
+  [dartx.checkFramebufferStatus](...args) {
+    return this.checkFramebufferStatus.apply(this, args);
   }
-  [dartx.clear](mask) {
-    return this.clear(mask);
+  [dartx.clear](...args) {
+    return this.clear.apply(this, args);
   }
-  [dartx.clearColor](red, green, blue, alpha) {
-    return this.clearColor(red, green, blue, alpha);
+  [dartx.clearColor](...args) {
+    return this.clearColor.apply(this, args);
   }
-  [dartx.clearDepth](depth) {
-    return this.clearDepth(depth);
+  [dartx.clearDepth](...args) {
+    return this.clearDepth.apply(this, args);
   }
-  [dartx.clearStencil](s) {
-    return this.clearStencil(s);
+  [dartx.clearStencil](...args) {
+    return this.clearStencil.apply(this, args);
   }
-  [dartx.colorMask](red, green, blue, alpha) {
-    return this.colorMask(red, green, blue, alpha);
+  [dartx.colorMask](...args) {
+    return this.colorMask.apply(this, args);
   }
-  [dartx.compileShader](shader) {
-    return this.compileShader(shader);
+  [dartx.compileShader](...args) {
+    return this.compileShader.apply(this, args);
   }
-  [dartx.compressedTexImage2D](target, level, internalformat, width, height, border, data) {
-    return this.compressedTexImage2D(target, level, internalformat, width, height, border, data);
+  [dartx.compressedTexImage2D](...args) {
+    return this.compressedTexImage2D.apply(this, args);
   }
-  [dartx.compressedTexSubImage2D](target, level, xoffset, yoffset, width, height, format, data) {
-    return this.compressedTexSubImage2D(target, level, xoffset, yoffset, width, height, format, data);
+  [dartx.compressedTexSubImage2D](...args) {
+    return this.compressedTexSubImage2D.apply(this, args);
   }
-  [dartx.copyTexImage2D](target, level, internalformat, x, y, width, height, border) {
-    return this.copyTexImage2D(target, level, internalformat, x, y, width, height, border);
+  [dartx.copyTexImage2D](...args) {
+    return this.copyTexImage2D.apply(this, args);
   }
-  [dartx.copyTexSubImage2D](target, level, xoffset, yoffset, x, y, width, height) {
-    return this.copyTexSubImage2D(target, level, xoffset, yoffset, x, y, width, height);
+  [dartx.copyTexSubImage2D](...args) {
+    return this.copyTexSubImage2D.apply(this, args);
   }
-  [dartx.createBuffer]() {
-    return this.createBuffer();
+  [dartx.createBuffer](...args) {
+    return this.createBuffer.apply(this, args);
   }
-  [dartx.createFramebuffer]() {
-    return this.createFramebuffer();
+  [dartx.createFramebuffer](...args) {
+    return this.createFramebuffer.apply(this, args);
   }
-  [dartx.createProgram]() {
-    return this.createProgram();
+  [dartx.createProgram](...args) {
+    return this.createProgram.apply(this, args);
   }
-  [dartx.createRenderbuffer]() {
-    return this.createRenderbuffer();
+  [dartx.createRenderbuffer](...args) {
+    return this.createRenderbuffer.apply(this, args);
   }
-  [dartx.createShader](type) {
-    return this.createShader(type);
+  [dartx.createShader](...args) {
+    return this.createShader.apply(this, args);
   }
-  [dartx.createTexture]() {
-    return this.createTexture();
+  [dartx.createTexture](...args) {
+    return this.createTexture.apply(this, args);
   }
-  [dartx.cullFace](mode) {
-    return this.cullFace(mode);
+  [dartx.cullFace](...args) {
+    return this.cullFace.apply(this, args);
   }
-  [dartx.deleteBuffer](buffer) {
-    return this.deleteBuffer(buffer);
+  [dartx.deleteBuffer](...args) {
+    return this.deleteBuffer.apply(this, args);
   }
-  [dartx.deleteFramebuffer](framebuffer) {
-    return this.deleteFramebuffer(framebuffer);
+  [dartx.deleteFramebuffer](...args) {
+    return this.deleteFramebuffer.apply(this, args);
   }
-  [dartx.deleteProgram](program) {
-    return this.deleteProgram(program);
+  [dartx.deleteProgram](...args) {
+    return this.deleteProgram.apply(this, args);
   }
-  [dartx.deleteRenderbuffer](renderbuffer) {
-    return this.deleteRenderbuffer(renderbuffer);
+  [dartx.deleteRenderbuffer](...args) {
+    return this.deleteRenderbuffer.apply(this, args);
   }
-  [dartx.deleteShader](shader) {
-    return this.deleteShader(shader);
+  [dartx.deleteShader](...args) {
+    return this.deleteShader.apply(this, args);
   }
-  [dartx.deleteTexture](texture) {
-    return this.deleteTexture(texture);
+  [dartx.deleteTexture](...args) {
+    return this.deleteTexture.apply(this, args);
   }
-  [dartx.depthFunc](func) {
-    return this.depthFunc(func);
+  [dartx.depthFunc](...args) {
+    return this.depthFunc.apply(this, args);
   }
-  [dartx.depthMask](flag) {
-    return this.depthMask(flag);
+  [dartx.depthMask](...args) {
+    return this.depthMask.apply(this, args);
   }
-  [dartx.depthRange](zNear, zFar) {
-    return this.depthRange(zNear, zFar);
+  [dartx.depthRange](...args) {
+    return this.depthRange.apply(this, args);
   }
-  [dartx.detachShader](program, shader) {
-    return this.detachShader(program, shader);
+  [dartx.detachShader](...args) {
+    return this.detachShader.apply(this, args);
   }
-  [dartx.disable](cap) {
-    return this.disable(cap);
+  [dartx.disable](...args) {
+    return this.disable.apply(this, args);
   }
-  [dartx.disableVertexAttribArray](index) {
-    return this.disableVertexAttribArray(index);
+  [dartx.disableVertexAttribArray](...args) {
+    return this.disableVertexAttribArray.apply(this, args);
   }
-  [dartx.drawArrays](mode, first, count) {
-    return this.drawArrays(mode, first, count);
+  [dartx.drawArrays](...args) {
+    return this.drawArrays.apply(this, args);
   }
-  [dartx.drawElements](mode, count, type, offset) {
-    return this.drawElements(mode, count, type, offset);
+  [dartx.drawElements](...args) {
+    return this.drawElements.apply(this, args);
   }
-  [dartx.enable](cap) {
-    return this.enable(cap);
+  [dartx.enable](...args) {
+    return this.enable.apply(this, args);
   }
-  [dartx.enableVertexAttribArray](index) {
-    return this.enableVertexAttribArray(index);
+  [dartx.enableVertexAttribArray](...args) {
+    return this.enableVertexAttribArray.apply(this, args);
   }
-  [dartx.finish]() {
-    return this.finish();
+  [dartx.finish](...args) {
+    return this.finish.apply(this, args);
   }
-  [dartx.flush]() {
-    return this.flush();
+  [dartx.flush](...args) {
+    return this.flush.apply(this, args);
   }
-  [dartx.framebufferRenderbuffer](target, attachment, renderbuffertarget, renderbuffer) {
-    return this.framebufferRenderbuffer(target, attachment, renderbuffertarget, renderbuffer);
+  [dartx.framebufferRenderbuffer](...args) {
+    return this.framebufferRenderbuffer.apply(this, args);
   }
-  [dartx.framebufferTexture2D](target, attachment, textarget, texture, level) {
-    return this.framebufferTexture2D(target, attachment, textarget, texture, level);
+  [dartx.framebufferTexture2D](...args) {
+    return this.framebufferTexture2D.apply(this, args);
   }
-  [dartx.frontFace](mode) {
-    return this.frontFace(mode);
+  [dartx.frontFace](...args) {
+    return this.frontFace.apply(this, args);
   }
-  [dartx.generateMipmap](target) {
-    return this.generateMipmap(target);
+  [dartx.generateMipmap](...args) {
+    return this.generateMipmap.apply(this, args);
   }
-  [dartx.getActiveAttrib](program, index) {
-    return this.getActiveAttrib(program, index);
+  [dartx.getActiveAttrib](...args) {
+    return this.getActiveAttrib.apply(this, args);
   }
-  [dartx.getActiveUniform](program, index) {
-    return this.getActiveUniform(program, index);
+  [dartx.getActiveUniform](...args) {
+    return this.getActiveUniform.apply(this, args);
   }
-  [dartx.getAttachedShaders](program) {
-    return this.getAttachedShaders(program);
+  [dartx.getAttachedShaders](...args) {
+    return this.getAttachedShaders.apply(this, args);
   }
-  [dartx.getAttribLocation](program, name) {
-    return this.getAttribLocation(program, name);
+  [dartx.getAttribLocation](...args) {
+    return this.getAttribLocation.apply(this, args);
   }
-  [dartx.getBufferParameter](target, pname) {
-    return this.getBufferParameter(target, pname);
+  [dartx.getBufferParameter](...args) {
+    return this.getBufferParameter.apply(this, args);
   }
   [dartx.getContextAttributes]() {
     return web_gl.ContextAttributes._check(html_common.convertNativeToDart_ContextAttributes(this[_getContextAttributes_1]()));
   }
-  [_getContextAttributes_1]() {
-    return this.getContextAttributes();
+  [_getContextAttributes_1](...args) {
+    return this.getContextAttributes.apply(this, args);
   }
-  [dartx.getError]() {
-    return this.getError();
+  [dartx.getError](...args) {
+    return this.getError.apply(this, args);
   }
-  [dartx.getExtension](name) {
-    return this.getExtension(name);
+  [dartx.getExtension](...args) {
+    return this.getExtension.apply(this, args);
   }
-  [dartx.getFramebufferAttachmentParameter](target, attachment, pname) {
-    return this.getFramebufferAttachmentParameter(target, attachment, pname);
+  [dartx.getFramebufferAttachmentParameter](...args) {
+    return this.getFramebufferAttachmentParameter.apply(this, args);
   }
-  [dartx.getParameter](pname) {
-    return this.getParameter(pname);
+  [dartx.getParameter](...args) {
+    return this.getParameter.apply(this, args);
   }
-  [dartx.getProgramInfoLog](program) {
-    return this.getProgramInfoLog(program);
+  [dartx.getProgramInfoLog](...args) {
+    return this.getProgramInfoLog.apply(this, args);
   }
-  [dartx.getProgramParameter](program, pname) {
-    return this.getProgramParameter(program, pname);
+  [dartx.getProgramParameter](...args) {
+    return this.getProgramParameter.apply(this, args);
   }
-  [dartx.getRenderbufferParameter](target, pname) {
-    return this.getRenderbufferParameter(target, pname);
+  [dartx.getRenderbufferParameter](...args) {
+    return this.getRenderbufferParameter.apply(this, args);
   }
-  [dartx.getShaderInfoLog](shader) {
-    return this.getShaderInfoLog(shader);
+  [dartx.getShaderInfoLog](...args) {
+    return this.getShaderInfoLog.apply(this, args);
   }
-  [dartx.getShaderParameter](shader, pname) {
-    return this.getShaderParameter(shader, pname);
+  [dartx.getShaderParameter](...args) {
+    return this.getShaderParameter.apply(this, args);
   }
-  [dartx.getShaderPrecisionFormat](shadertype, precisiontype) {
-    return this.getShaderPrecisionFormat(shadertype, precisiontype);
+  [dartx.getShaderPrecisionFormat](...args) {
+    return this.getShaderPrecisionFormat.apply(this, args);
   }
-  [dartx.getShaderSource](shader) {
-    return this.getShaderSource(shader);
+  [dartx.getShaderSource](...args) {
+    return this.getShaderSource.apply(this, args);
   }
-  [dartx.getSupportedExtensions]() {
-    return this.getSupportedExtensions();
+  [dartx.getSupportedExtensions](...args) {
+    return this.getSupportedExtensions.apply(this, args);
   }
-  [dartx.getTexParameter](target, pname) {
-    return this.getTexParameter(target, pname);
+  [dartx.getTexParameter](...args) {
+    return this.getTexParameter.apply(this, args);
   }
-  [dartx.getUniform](program, location) {
-    return this.getUniform(program, location);
+  [dartx.getUniform](...args) {
+    return this.getUniform.apply(this, args);
   }
-  [dartx.getUniformLocation](program, name) {
-    return this.getUniformLocation(program, name);
+  [dartx.getUniformLocation](...args) {
+    return this.getUniformLocation.apply(this, args);
   }
-  [dartx.getVertexAttrib](index, pname) {
-    return this.getVertexAttrib(index, pname);
+  [dartx.getVertexAttrib](...args) {
+    return this.getVertexAttrib.apply(this, args);
   }
-  [dartx.getVertexAttribOffset](index, pname) {
-    return this.getVertexAttribOffset(index, pname);
+  [dartx.getVertexAttribOffset](...args) {
+    return this.getVertexAttribOffset.apply(this, args);
   }
-  [dartx.hint](target, mode) {
-    return this.hint(target, mode);
+  [dartx.hint](...args) {
+    return this.hint.apply(this, args);
   }
-  [dartx.isBuffer](buffer) {
-    return this.isBuffer(buffer);
+  [dartx.isBuffer](...args) {
+    return this.isBuffer.apply(this, args);
   }
-  [dartx.isContextLost]() {
-    return this.isContextLost();
+  [dartx.isContextLost](...args) {
+    return this.isContextLost.apply(this, args);
   }
-  [dartx.isEnabled](cap) {
-    return this.isEnabled(cap);
+  [dartx.isEnabled](...args) {
+    return this.isEnabled.apply(this, args);
   }
-  [dartx.isFramebuffer](framebuffer) {
-    return this.isFramebuffer(framebuffer);
+  [dartx.isFramebuffer](...args) {
+    return this.isFramebuffer.apply(this, args);
   }
-  [dartx.isProgram](program) {
-    return this.isProgram(program);
+  [dartx.isProgram](...args) {
+    return this.isProgram.apply(this, args);
   }
-  [dartx.isRenderbuffer](renderbuffer) {
-    return this.isRenderbuffer(renderbuffer);
+  [dartx.isRenderbuffer](...args) {
+    return this.isRenderbuffer.apply(this, args);
   }
-  [dartx.isShader](shader) {
-    return this.isShader(shader);
+  [dartx.isShader](...args) {
+    return this.isShader.apply(this, args);
   }
-  [dartx.isTexture](texture) {
-    return this.isTexture(texture);
+  [dartx.isTexture](...args) {
+    return this.isTexture.apply(this, args);
   }
-  [dartx.lineWidth](width) {
-    return this.lineWidth(width);
+  [dartx.lineWidth](...args) {
+    return this.lineWidth.apply(this, args);
   }
-  [dartx.linkProgram](program) {
-    return this.linkProgram(program);
+  [dartx.linkProgram](...args) {
+    return this.linkProgram.apply(this, args);
   }
-  [dartx.pixelStorei](pname, param) {
-    return this.pixelStorei(pname, param);
+  [dartx.pixelStorei](...args) {
+    return this.pixelStorei.apply(this, args);
   }
-  [dartx.polygonOffset](factor, units) {
-    return this.polygonOffset(factor, units);
+  [dartx.polygonOffset](...args) {
+    return this.polygonOffset.apply(this, args);
   }
-  [dartx.readPixels](x, y, width, height, format, type, pixels) {
-    return this.readPixels(x, y, width, height, format, type, pixels);
+  [dartx.readPixels](...args) {
+    return this.readPixels.apply(this, args);
   }
-  [dartx.renderbufferStorage](target, internalformat, width, height) {
-    return this.renderbufferStorage(target, internalformat, width, height);
+  [dartx.renderbufferStorage](...args) {
+    return this.renderbufferStorage.apply(this, args);
   }
-  [dartx.sampleCoverage](value, invert) {
-    return this.sampleCoverage(value, invert);
+  [dartx.sampleCoverage](...args) {
+    return this.sampleCoverage.apply(this, args);
   }
-  [dartx.scissor](x, y, width, height) {
-    return this.scissor(x, y, width, height);
+  [dartx.scissor](...args) {
+    return this.scissor.apply(this, args);
   }
-  [dartx.shaderSource](shader, string) {
-    return this.shaderSource(shader, string);
+  [dartx.shaderSource](...args) {
+    return this.shaderSource.apply(this, args);
   }
-  [dartx.stencilFunc](func, ref, mask) {
-    return this.stencilFunc(func, ref, mask);
+  [dartx.stencilFunc](...args) {
+    return this.stencilFunc.apply(this, args);
   }
-  [dartx.stencilFuncSeparate](face, func, ref, mask) {
-    return this.stencilFuncSeparate(face, func, ref, mask);
+  [dartx.stencilFuncSeparate](...args) {
+    return this.stencilFuncSeparate.apply(this, args);
   }
-  [dartx.stencilMask](mask) {
-    return this.stencilMask(mask);
+  [dartx.stencilMask](...args) {
+    return this.stencilMask.apply(this, args);
   }
-  [dartx.stencilMaskSeparate](face, mask) {
-    return this.stencilMaskSeparate(face, mask);
+  [dartx.stencilMaskSeparate](...args) {
+    return this.stencilMaskSeparate.apply(this, args);
   }
-  [dartx.stencilOp](fail, zfail, zpass) {
-    return this.stencilOp(fail, zfail, zpass);
+  [dartx.stencilOp](...args) {
+    return this.stencilOp.apply(this, args);
   }
-  [dartx.stencilOpSeparate](face, fail, zfail, zpass) {
-    return this.stencilOpSeparate(face, fail, zfail, zpass);
+  [dartx.stencilOpSeparate](...args) {
+    return this.stencilOpSeparate.apply(this, args);
   }
   [dartx.texImage2D](target, level, internalformat, format_OR_width, height_OR_type, border_OR_canvas_OR_image_OR_pixels_OR_video, format, type, pixels) {
     if (format === void 0) format = null;
@@ -92640,43 +92640,43 @@
     }
     dart.throw(new core.ArgumentError("Incorrect number or type of arguments"));
   }
-  [_texImage2D_1](target, level, internalformat, width, height, border, format, type, pixels) {
-    return this.texImage2D(target, level, internalformat, width, height, border, format, type, pixels);
+  [_texImage2D_1](...args) {
+    return this.texImage2D.apply(this, args);
   }
-  [_texImage2D_2](target, level, internalformat, format, type, pixels) {
-    return this.texImage2D(target, level, internalformat, format, type, pixels);
+  [_texImage2D_2](...args) {
+    return this.texImage2D.apply(this, args);
   }
-  [_texImage2D_3](target, level, internalformat, format, type, image) {
-    return this.texImage2D(target, level, internalformat, format, type, image);
+  [_texImage2D_3](...args) {
+    return this.texImage2D.apply(this, args);
   }
-  [_texImage2D_4](target, level, internalformat, format, type, canvas) {
-    return this.texImage2D(target, level, internalformat, format, type, canvas);
+  [_texImage2D_4](...args) {
+    return this.texImage2D.apply(this, args);
   }
-  [_texImage2D_5](target, level, internalformat, format, type, video) {
-    return this.texImage2D(target, level, internalformat, format, type, video);
+  [_texImage2D_5](...args) {
+    return this.texImage2D.apply(this, args);
   }
-  [dartx.texImage2DCanvas](target, level, internalformat, format, type, canvas) {
-    return this.texImage2D(target, level, internalformat, format, type, canvas);
+  [dartx.texImage2DCanvas](...args) {
+    return this.texImage2D.apply(this, args);
   }
-  [dartx.texImage2DImage](target, level, internalformat, format, type, image) {
-    return this.texImage2D(target, level, internalformat, format, type, image);
+  [dartx.texImage2DImage](...args) {
+    return this.texImage2D.apply(this, args);
   }
   [dartx.texImage2DImageData](target, level, internalformat, format, type, pixels) {
     let pixels_1 = html_common.convertDartToNative_ImageData(pixels);
     this[_texImage2DImageData_1](target, level, internalformat, format, type, pixels_1);
     return;
   }
-  [_texImage2DImageData_1](target, level, internalformat, format, type, pixels) {
-    return this.texImage2D(target, level, internalformat, format, type, pixels);
+  [_texImage2DImageData_1](...args) {
+    return this.texImage2D.apply(this, args);
   }
-  [dartx.texImage2DVideo](target, level, internalformat, format, type, video) {
-    return this.texImage2D(target, level, internalformat, format, type, video);
+  [dartx.texImage2DVideo](...args) {
+    return this.texImage2D.apply(this, args);
   }
-  [dartx.texParameterf](target, pname, param) {
-    return this.texParameterf(target, pname, param);
+  [dartx.texParameterf](...args) {
+    return this.texParameterf.apply(this, args);
   }
-  [dartx.texParameteri](target, pname, param) {
-    return this.texParameteri(target, pname, param);
+  [dartx.texParameteri](...args) {
+    return this.texParameteri.apply(this, args);
   }
   [dartx.texSubImage2D](target, level, xoffset, yoffset, format_OR_width, height_OR_type, canvas_OR_format_OR_image_OR_pixels_OR_video, type, pixels) {
     if (type === void 0) type = null;
@@ -92704,142 +92704,142 @@
     }
     dart.throw(new core.ArgumentError("Incorrect number or type of arguments"));
   }
-  [_texSubImage2D_1](target, level, xoffset, yoffset, width, height, format, type, pixels) {
-    return this.texSubImage2D(target, level, xoffset, yoffset, width, height, format, type, pixels);
+  [_texSubImage2D_1](...args) {
+    return this.texSubImage2D.apply(this, args);
   }
-  [_texSubImage2D_2](target, level, xoffset, yoffset, format, type, pixels) {
-    return this.texSubImage2D(target, level, xoffset, yoffset, format, type, pixels);
+  [_texSubImage2D_2](...args) {
+    return this.texSubImage2D.apply(this, args);
   }
-  [_texSubImage2D_3](target, level, xoffset, yoffset, format, type, image) {
-    return this.texSubImage2D(target, level, xoffset, yoffset, format, type, image);
+  [_texSubImage2D_3](...args) {
+    return this.texSubImage2D.apply(this, args);
   }
-  [_texSubImage2D_4](target, level, xoffset, yoffset, format, type, canvas) {
-    return this.texSubImage2D(target, level, xoffset, yoffset, format, type, canvas);
+  [_texSubImage2D_4](...args) {
+    return this.texSubImage2D.apply(this, args);
   }
-  [_texSubImage2D_5](target, level, xoffset, yoffset, format, type, video) {
-    return this.texSubImage2D(target, level, xoffset, yoffset, format, type, video);
+  [_texSubImage2D_5](...args) {
+    return this.texSubImage2D.apply(this, args);
   }
-  [dartx.texSubImage2DCanvas](target, level, xoffset, yoffset, format, type, canvas) {
-    return this.texSubImage2D(target, level, xoffset, yoffset, format, type, canvas);
+  [dartx.texSubImage2DCanvas](...args) {
+    return this.texSubImage2D.apply(this, args);
   }
-  [dartx.texSubImage2DImage](target, level, xoffset, yoffset, format, type, image) {
-    return this.texSubImage2D(target, level, xoffset, yoffset, format, type, image);
+  [dartx.texSubImage2DImage](...args) {
+    return this.texSubImage2D.apply(this, args);
   }
   [dartx.texSubImage2DImageData](target, level, xoffset, yoffset, format, type, pixels) {
     let pixels_1 = html_common.convertDartToNative_ImageData(pixels);
     this[_texSubImage2DImageData_1](target, level, xoffset, yoffset, format, type, pixels_1);
     return;
   }
-  [_texSubImage2DImageData_1](target, level, xoffset, yoffset, format, type, pixels) {
-    return this.texSubImage2D(target, level, xoffset, yoffset, format, type, pixels);
+  [_texSubImage2DImageData_1](...args) {
+    return this.texSubImage2D.apply(this, args);
   }
-  [dartx.texSubImage2DVideo](target, level, xoffset, yoffset, format, type, video) {
-    return this.texSubImage2D(target, level, xoffset, yoffset, format, type, video);
+  [dartx.texSubImage2DVideo](...args) {
+    return this.texSubImage2D.apply(this, args);
   }
-  [dartx.uniform1f](location, x) {
-    return this.uniform1f(location, x);
+  [dartx.uniform1f](...args) {
+    return this.uniform1f.apply(this, args);
   }
-  [dartx.uniform1fv](location, v) {
-    return this.uniform1fv(location, v);
+  [dartx.uniform1fv](...args) {
+    return this.uniform1fv.apply(this, args);
   }
-  [dartx.uniform1i](location, x) {
-    return this.uniform1i(location, x);
+  [dartx.uniform1i](...args) {
+    return this.uniform1i.apply(this, args);
   }
-  [dartx.uniform1iv](location, v) {
-    return this.uniform1iv(location, v);
+  [dartx.uniform1iv](...args) {
+    return this.uniform1iv.apply(this, args);
   }
-  [dartx.uniform2f](location, x, y) {
-    return this.uniform2f(location, x, y);
+  [dartx.uniform2f](...args) {
+    return this.uniform2f.apply(this, args);
   }
-  [dartx.uniform2fv](location, v) {
-    return this.uniform2fv(location, v);
+  [dartx.uniform2fv](...args) {
+    return this.uniform2fv.apply(this, args);
   }
-  [dartx.uniform2i](location, x, y) {
-    return this.uniform2i(location, x, y);
+  [dartx.uniform2i](...args) {
+    return this.uniform2i.apply(this, args);
   }
-  [dartx.uniform2iv](location, v) {
-    return this.uniform2iv(location, v);
+  [dartx.uniform2iv](...args) {
+    return this.uniform2iv.apply(this, args);
   }
-  [dartx.uniform3f](location, x, y, z) {
-    return this.uniform3f(location, x, y, z);
+  [dartx.uniform3f](...args) {
+    return this.uniform3f.apply(this, args);
   }
-  [dartx.uniform3fv](location, v) {
-    return this.uniform3fv(location, v);
+  [dartx.uniform3fv](...args) {
+    return this.uniform3fv.apply(this, args);
   }
-  [dartx.uniform3i](location, x, y, z) {
-    return this.uniform3i(location, x, y, z);
+  [dartx.uniform3i](...args) {
+    return this.uniform3i.apply(this, args);
   }
-  [dartx.uniform3iv](location, v) {
-    return this.uniform3iv(location, v);
+  [dartx.uniform3iv](...args) {
+    return this.uniform3iv.apply(this, args);
   }
-  [dartx.uniform4f](location, x, y, z, w) {
-    return this.uniform4f(location, x, y, z, w);
+  [dartx.uniform4f](...args) {
+    return this.uniform4f.apply(this, args);
   }
-  [dartx.uniform4fv](location, v) {
-    return this.uniform4fv(location, v);
+  [dartx.uniform4fv](...args) {
+    return this.uniform4fv.apply(this, args);
   }
-  [dartx.uniform4i](location, x, y, z, w) {
-    return this.uniform4i(location, x, y, z, w);
+  [dartx.uniform4i](...args) {
+    return this.uniform4i.apply(this, args);
   }
-  [dartx.uniform4iv](location, v) {
-    return this.uniform4iv(location, v);
+  [dartx.uniform4iv](...args) {
+    return this.uniform4iv.apply(this, args);
   }
-  [dartx.uniformMatrix2fv](location, transpose, array) {
-    return this.uniformMatrix2fv(location, transpose, array);
+  [dartx.uniformMatrix2fv](...args) {
+    return this.uniformMatrix2fv.apply(this, args);
   }
-  [dartx.uniformMatrix3fv](location, transpose, array) {
-    return this.uniformMatrix3fv(location, transpose, array);
+  [dartx.uniformMatrix3fv](...args) {
+    return this.uniformMatrix3fv.apply(this, args);
   }
-  [dartx.uniformMatrix4fv](location, transpose, array) {
-    return this.uniformMatrix4fv(location, transpose, array);
+  [dartx.uniformMatrix4fv](...args) {
+    return this.uniformMatrix4fv.apply(this, args);
   }
-  [dartx.useProgram](program) {
-    return this.useProgram(program);
+  [dartx.useProgram](...args) {
+    return this.useProgram.apply(this, args);
   }
-  [dartx.validateProgram](program) {
-    return this.validateProgram(program);
+  [dartx.validateProgram](...args) {
+    return this.validateProgram.apply(this, args);
   }
-  [dartx.vertexAttrib1f](indx, x) {
-    return this.vertexAttrib1f(indx, x);
+  [dartx.vertexAttrib1f](...args) {
+    return this.vertexAttrib1f.apply(this, args);
   }
-  [dartx.vertexAttrib1fv](indx, values) {
-    return this.vertexAttrib1fv(indx, values);
+  [dartx.vertexAttrib1fv](...args) {
+    return this.vertexAttrib1fv.apply(this, args);
   }
-  [dartx.vertexAttrib2f](indx, x, y) {
-    return this.vertexAttrib2f(indx, x, y);
+  [dartx.vertexAttrib2f](...args) {
+    return this.vertexAttrib2f.apply(this, args);
   }
-  [dartx.vertexAttrib2fv](indx, values) {
-    return this.vertexAttrib2fv(indx, values);
+  [dartx.vertexAttrib2fv](...args) {
+    return this.vertexAttrib2fv.apply(this, args);
   }
-  [dartx.vertexAttrib3f](indx, x, y, z) {
-    return this.vertexAttrib3f(indx, x, y, z);
+  [dartx.vertexAttrib3f](...args) {
+    return this.vertexAttrib3f.apply(this, args);
   }
-  [dartx.vertexAttrib3fv](indx, values) {
-    return this.vertexAttrib3fv(indx, values);
+  [dartx.vertexAttrib3fv](...args) {
+    return this.vertexAttrib3fv.apply(this, args);
   }
-  [dartx.vertexAttrib4f](indx, x, y, z, w) {
-    return this.vertexAttrib4f(indx, x, y, z, w);
+  [dartx.vertexAttrib4f](...args) {
+    return this.vertexAttrib4f.apply(this, args);
   }
-  [dartx.vertexAttrib4fv](indx, values) {
-    return this.vertexAttrib4fv(indx, values);
+  [dartx.vertexAttrib4fv](...args) {
+    return this.vertexAttrib4fv.apply(this, args);
   }
-  [dartx.vertexAttribPointer](indx, size, type, normalized, stride, offset) {
-    return this.vertexAttribPointer(indx, size, type, normalized, stride, offset);
+  [dartx.vertexAttribPointer](...args) {
+    return this.vertexAttribPointer.apply(this, args);
   }
-  [dartx.viewport](x, y, width, height) {
-    return this.viewport(x, y, width, height);
+  [dartx.viewport](...args) {
+    return this.viewport.apply(this, args);
   }
-  [dartx.texImage2DUntyped](targetTexture, levelOfDetail, internalFormat, format, type, data) {
-    return this.texImage2D(targetTexture, levelOfDetail, internalFormat, format, type, data);
+  [dartx.texImage2DUntyped](...args) {
+    return this.texImage2D.apply(this, args);
   }
-  [dartx.texImage2DTyped](targetTexture, levelOfDetail, internalFormat, width, height, border, format, type, data) {
-    return this.texImage2D(targetTexture, levelOfDetail, internalFormat, width, height, border, format, type, data);
+  [dartx.texImage2DTyped](...args) {
+    return this.texImage2D.apply(this, args);
   }
-  [dartx.texSubImage2DUntyped](targetTexture, levelOfDetail, xOffset, yOffset, format, type, data) {
-    return this.texSubImage2D(targetTexture, levelOfDetail, xOffset, yOffset, format, type, data);
+  [dartx.texSubImage2DUntyped](...args) {
+    return this.texSubImage2D.apply(this, args);
   }
-  [dartx.texSubImage2DTyped](targetTexture, levelOfDetail, xOffset, yOffset, width, height, border, format, type, data) {
-    return this.texSubImage2D(targetTexture, levelOfDetail, xOffset, yOffset, width, height, border, format, type, data);
+  [dartx.texSubImage2DTyped](...args) {
+    return this.texSubImage2D.apply(this, args);
   }
 };
 web_gl.RenderingContext[dart.implements] = () => [html.CanvasRenderingContext];
@@ -93960,14 +93960,14 @@
   static _() {
     dart.throw(new core.UnsupportedError("Not supported"));
   }
-  [dartx.drawArraysInstancedAngle](mode, first, count, primcount) {
-    return this.drawArraysInstancedANGLE(mode, first, count, primcount);
+  [dartx.drawArraysInstancedAngle](...args) {
+    return this.drawArraysInstancedANGLE.apply(this, args);
   }
-  [dartx.drawElementsInstancedAngle](mode, count, type, offset, primcount) {
-    return this.drawElementsInstancedANGLE(mode, count, type, offset, primcount);
+  [dartx.drawElementsInstancedAngle](...args) {
+    return this.drawElementsInstancedANGLE.apply(this, args);
   }
-  [dartx.vertexAttribDivisorAngle](index, divisor) {
-    return this.vertexAttribDivisorANGLE(index, divisor);
+  [dartx.vertexAttribDivisorAngle](...args) {
+    return this.vertexAttribDivisorANGLE.apply(this, args);
   }
 };
 dart.setSignature(web_gl.AngleInstancedArrays, {
@@ -94163,8 +94163,8 @@
   static _() {
     dart.throw(new core.UnsupportedError("Not supported"));
   }
-  [dartx.getTranslatedShaderSource](shader) {
-    return this.getTranslatedShaderSource(shader);
+  [dartx.getTranslatedShaderSource](...args) {
+    return this.getTranslatedShaderSource.apply(this, args);
   }
 };
 dart.setSignature(web_gl.DebugShaders, {
@@ -94190,8 +94190,8 @@
   static _() {
     dart.throw(new core.UnsupportedError("Not supported"));
   }
-  [dartx.drawBuffersWebgl](buffers) {
-    return this.drawBuffersWEBGL(buffers);
+  [dartx.drawBuffersWebgl](...args) {
+    return this.drawBuffersWEBGL.apply(this, args);
   }
 };
 dart.setSignature(web_gl.DrawBuffers, {
@@ -94334,11 +94334,11 @@
   static _() {
     dart.throw(new core.UnsupportedError("Not supported"));
   }
-  [dartx.loseContext]() {
-    return this.loseContext();
+  [dartx.loseContext](...args) {
+    return this.loseContext.apply(this, args);
   }
-  [dartx.restoreContext]() {
-    return this.restoreContext();
+  [dartx.restoreContext](...args) {
+    return this.restoreContext.apply(this, args);
   }
 };
 dart.setSignature(web_gl.LoseContext, {
@@ -94407,17 +94407,17 @@
   static _() {
     dart.throw(new core.UnsupportedError("Not supported"));
   }
-  [dartx.bindVertexArray](arrayObject) {
-    return this.bindVertexArrayOES(arrayObject);
+  [dartx.bindVertexArray](...args) {
+    return this.bindVertexArrayOES.apply(this, args);
   }
-  [dartx.createVertexArray]() {
-    return this.createVertexArrayOES();
+  [dartx.createVertexArray](...args) {
+    return this.createVertexArrayOES.apply(this, args);
   }
-  [dartx.deleteVertexArray](arrayObject) {
-    return this.deleteVertexArrayOES(arrayObject);
+  [dartx.deleteVertexArray](...args) {
+    return this.deleteVertexArrayOES.apply(this, args);
   }
-  [dartx.isVertexArray](arrayObject) {
-    return this.isVertexArrayOES(arrayObject);
+  [dartx.isVertexArray](...args) {
+    return this.isVertexArrayOES.apply(this, args);
   }
 };
 dart.setSignature(web_gl.OesVertexArrayObject, {
@@ -94542,14 +94542,14 @@
   get [dartx.version]() {
     return this.version;
   }
-  [dartx.changeVersion](oldVersion, newVersion, callback, errorCallback, successCallback) {
-    return this.changeVersion(oldVersion, newVersion, callback, errorCallback, successCallback);
+  [dartx.changeVersion](...args) {
+    return this.changeVersion.apply(this, args);
   }
-  [dartx.readTransaction](callback, errorCallback, successCallback) {
-    return this.readTransaction(callback, errorCallback, successCallback);
+  [dartx.readTransaction](...args) {
+    return this.readTransaction.apply(this, args);
   }
-  [dartx.transaction](callback, errorCallback, successCallback) {
-    return this.transaction(callback, errorCallback, successCallback);
+  [dartx.transaction](...args) {
+    return this.transaction.apply(this, args);
   }
 };
 dart.setSignature(web_sql.SqlDatabase, {
@@ -94689,8 +94689,8 @@
   [dartx.item](index) {
     return html_common.convertNativeToDart_Dictionary(this[_item_1](index));
   }
-  [_item_1](index) {
-    return this.item(index);
+  [_item_1](...args) {
+    return this.item.apply(this, args);
   }
 };
 web_sql.SqlResultSetRowList[dart.implements] = () => [ListOfMap()];
@@ -94719,8 +94719,8 @@
   static _() {
     dart.throw(new core.UnsupportedError("Not supported"));
   }
-  [dartx.executeSql](sqlStatement, arguments$, callback, errorCallback) {
-    return this.executeSql(sqlStatement, arguments$, callback, errorCallback);
+  [dartx.executeSql](...args) {
+    return this.executeSql.apply(this, args);
   }
 };
 dart.setSignature(web_sql.SqlTransaction, {
diff --git a/pkg/dev_compiler/lib/js/legacy/dart_sdk.js b/pkg/dev_compiler/lib/js/legacy/dart_sdk.js
index d92f36b..ab2cabd 100644
--- a/pkg/dev_compiler/lib/js/legacy/dart_sdk.js
+++ b/pkg/dev_compiler/lib/js/legacy/dart_sdk.js
@@ -15610,113 +15610,113 @@
       if (endian === void 0) endian = typed_data.Endianness.BIG_ENDIAN;
       return this[_getFloat32](byteOffset, dart.equals(typed_data.Endianness.LITTLE_ENDIAN, endian));
     }
-    [_getFloat32](byteOffset, littleEndian) {
-      return this.getFloat32(byteOffset, littleEndian);
+    [_getFloat32](...args) {
+      return this.getFloat32.apply(this, args);
     }
     [dartx.getFloat64](byteOffset, endian) {
       if (endian === void 0) endian = typed_data.Endianness.BIG_ENDIAN;
       return this[_getFloat64](byteOffset, dart.equals(typed_data.Endianness.LITTLE_ENDIAN, endian));
     }
-    [_getFloat64](byteOffset, littleEndian) {
-      return this.getFloat64(byteOffset, littleEndian);
+    [_getFloat64](...args) {
+      return this.getFloat64.apply(this, args);
     }
     [dartx.getInt16](byteOffset, endian) {
       if (endian === void 0) endian = typed_data.Endianness.BIG_ENDIAN;
       return this[_getInt16](byteOffset, dart.equals(typed_data.Endianness.LITTLE_ENDIAN, endian));
     }
-    [_getInt16](byteOffset, littleEndian) {
-      return this.getInt16(byteOffset, littleEndian);
+    [_getInt16](...args) {
+      return this.getInt16.apply(this, args);
     }
     [dartx.getInt32](byteOffset, endian) {
       if (endian === void 0) endian = typed_data.Endianness.BIG_ENDIAN;
       return this[_getInt32](byteOffset, dart.equals(typed_data.Endianness.LITTLE_ENDIAN, endian));
     }
-    [_getInt32](byteOffset, littleEndian) {
-      return this.getInt32(byteOffset, littleEndian);
+    [_getInt32](...args) {
+      return this.getInt32.apply(this, args);
     }
     [dartx.getInt64](byteOffset, endian) {
       if (endian === void 0) endian = typed_data.Endianness.BIG_ENDIAN;
       dart.throw(new core.UnsupportedError('Int64 accessor not supported by dart2js.'));
     }
-    [dartx.getInt8](byteOffset) {
-      return this.getInt8(byteOffset);
+    [dartx.getInt8](...args) {
+      return this.getInt8.apply(this, args);
     }
     [dartx.getUint16](byteOffset, endian) {
       if (endian === void 0) endian = typed_data.Endianness.BIG_ENDIAN;
       return this[_getUint16](byteOffset, dart.equals(typed_data.Endianness.LITTLE_ENDIAN, endian));
     }
-    [_getUint16](byteOffset, littleEndian) {
-      return this.getUint16(byteOffset, littleEndian);
+    [_getUint16](...args) {
+      return this.getUint16.apply(this, args);
     }
     [dartx.getUint32](byteOffset, endian) {
       if (endian === void 0) endian = typed_data.Endianness.BIG_ENDIAN;
       return this[_getUint32](byteOffset, dart.equals(typed_data.Endianness.LITTLE_ENDIAN, endian));
     }
-    [_getUint32](byteOffset, littleEndian) {
-      return this.getUint32(byteOffset, littleEndian);
+    [_getUint32](...args) {
+      return this.getUint32.apply(this, args);
     }
     [dartx.getUint64](byteOffset, endian) {
       if (endian === void 0) endian = typed_data.Endianness.BIG_ENDIAN;
       dart.throw(new core.UnsupportedError('Uint64 accessor not supported by dart2js.'));
     }
-    [dartx.getUint8](byteOffset) {
-      return this.getUint8(byteOffset);
+    [dartx.getUint8](...args) {
+      return this.getUint8.apply(this, args);
     }
     [dartx.setFloat32](byteOffset, value, endian) {
       if (endian === void 0) endian = typed_data.Endianness.BIG_ENDIAN;
       return this[_setFloat32](byteOffset, value, dart.equals(typed_data.Endianness.LITTLE_ENDIAN, endian));
     }
-    [_setFloat32](byteOffset, value, littleEndian) {
-      return this.setFloat32(byteOffset, value, littleEndian);
+    [_setFloat32](...args) {
+      return this.setFloat32.apply(this, args);
     }
     [dartx.setFloat64](byteOffset, value, endian) {
       if (endian === void 0) endian = typed_data.Endianness.BIG_ENDIAN;
       return this[_setFloat64](byteOffset, value, dart.equals(typed_data.Endianness.LITTLE_ENDIAN, endian));
     }
-    [_setFloat64](byteOffset, value, littleEndian) {
-      return this.setFloat64(byteOffset, value, littleEndian);
+    [_setFloat64](...args) {
+      return this.setFloat64.apply(this, args);
     }
     [dartx.setInt16](byteOffset, value, endian) {
       if (endian === void 0) endian = typed_data.Endianness.BIG_ENDIAN;
       return this[_setInt16](byteOffset, value, dart.equals(typed_data.Endianness.LITTLE_ENDIAN, endian));
     }
-    [_setInt16](byteOffset, value, littleEndian) {
-      return this.setInt16(byteOffset, value, littleEndian);
+    [_setInt16](...args) {
+      return this.setInt16.apply(this, args);
     }
     [dartx.setInt32](byteOffset, value, endian) {
       if (endian === void 0) endian = typed_data.Endianness.BIG_ENDIAN;
       return this[_setInt32](byteOffset, value, dart.equals(typed_data.Endianness.LITTLE_ENDIAN, endian));
     }
-    [_setInt32](byteOffset, value, littleEndian) {
-      return this.setInt32(byteOffset, value, littleEndian);
+    [_setInt32](...args) {
+      return this.setInt32.apply(this, args);
     }
     [dartx.setInt64](byteOffset, value, endian) {
       if (endian === void 0) endian = typed_data.Endianness.BIG_ENDIAN;
       dart.throw(new core.UnsupportedError('Int64 accessor not supported by dart2js.'));
     }
-    [dartx.setInt8](byteOffset, value) {
-      return this.setInt8(byteOffset, value);
+    [dartx.setInt8](...args) {
+      return this.setInt8.apply(this, args);
     }
     [dartx.setUint16](byteOffset, value, endian) {
       if (endian === void 0) endian = typed_data.Endianness.BIG_ENDIAN;
       return this[_setUint16](byteOffset, value, dart.equals(typed_data.Endianness.LITTLE_ENDIAN, endian));
     }
-    [_setUint16](byteOffset, value, littleEndian) {
-      return this.setUint16(byteOffset, value, littleEndian);
+    [_setUint16](...args) {
+      return this.setUint16.apply(this, args);
     }
     [dartx.setUint32](byteOffset, value, endian) {
       if (endian === void 0) endian = typed_data.Endianness.BIG_ENDIAN;
       return this[_setUint32](byteOffset, value, dart.equals(typed_data.Endianness.LITTLE_ENDIAN, endian));
     }
-    [_setUint32](byteOffset, value, littleEndian) {
-      return this.setUint32(byteOffset, value, littleEndian);
+    [_setUint32](...args) {
+      return this.setUint32.apply(this, args);
     }
     [dartx.setUint64](byteOffset, value, endian) {
       if (endian === void 0) endian = typed_data.Endianness.BIG_ENDIAN;
       dart.throw(new core.UnsupportedError('Uint64 accessor not supported by dart2js.'));
     }
-    [dartx.setUint8](byteOffset, value) {
-      return this.setUint8(byteOffset, value);
+    [dartx.setUint8](...args) {
+      return this.setUint8.apply(this, args);
     }
     static _create1(arg) {
       return new DataView(new ArrayBuffer(arg));
@@ -38350,21 +38350,21 @@
     get [dartx.source]() {
       return this.source;
     }
-    [dartx.advance](count) {
-      return this.advance(count);
+    [dartx.advance](...args) {
+      return this.advance.apply(this, args);
     }
-    [dartx.continuePrimaryKey](key, primaryKey) {
-      return this.continuePrimaryKey(key, primaryKey);
+    [dartx.continuePrimaryKey](...args) {
+      return this.continuePrimaryKey.apply(this, args);
     }
-    [_delete]() {
-      return this.delete();
+    [_delete](...args) {
+      return this.delete.apply(this, args);
     }
     [_update](value) {
       let value_1 = html_common.convertDartToNative_SerializedScriptValue(value);
       return this[_update_1](value_1);
     }
-    [_update_1](value) {
-      return this.update(value);
+    [_update_1](...args) {
+      return this.update.apply(this, args);
     }
   };
   dart.setSignature(indexed_db.Cursor, {
@@ -38442,14 +38442,14 @@
     static _() {
       dart.throw(new core.UnsupportedError("Not supported"));
     }
-    [_addEventListener](type, listener, capture) {
-      return this.addEventListener(type, listener, capture);
+    [_addEventListener](...args) {
+      return this.addEventListener.apply(this, args);
     }
-    [dartx.dispatchEvent](event) {
-      return this.dispatchEvent(event);
+    [dartx.dispatchEvent](...args) {
+      return this.dispatchEvent.apply(this, args);
     }
-    [_removeEventListener](type, listener, capture) {
-      return this.removeEventListener(type, listener, capture);
+    [_removeEventListener](...args) {
+      return this.removeEventListener.apply(this, args);
     }
   };
   dart.defineNamedConstructor(html$.EventTarget, '_created');
@@ -38522,8 +38522,8 @@
       }
       return this[_transaction](storeNames, mode);
     }
-    [_transaction](stores, mode) {
-      return this.transaction(stores, mode);
+    [_transaction](...args) {
+      return this.transaction.apply(this, args);
     }
     static _() {
       dart.throw(new core.UnsupportedError("Not supported"));
@@ -38537,8 +38537,8 @@
     get [dartx.version]() {
       return this.version;
     }
-    [dartx.close]() {
-      return this.close();
+    [dartx.close](...args) {
+      return this.close.apply(this, args);
     }
     [_createObjectStore](name, options) {
       if (options === void 0) options = null;
@@ -38548,14 +38548,14 @@
       }
       return this[_createObjectStore_2](name);
     }
-    [_createObjectStore_1](name, options) {
-      return this.createObjectStore(name, options);
+    [_createObjectStore_1](...args) {
+      return this.createObjectStore.apply(this, args);
     }
-    [_createObjectStore_2](name) {
-      return this.createObjectStore(name);
+    [_createObjectStore_2](...args) {
+      return this.createObjectStore.apply(this, args);
     }
-    [dartx.deleteObjectStore](name) {
-      return this.deleteObjectStore(name);
+    [dartx.deleteObjectStore](...args) {
+      return this.deleteObjectStore.apply(this, args);
     }
     get [dartx.onAbort]() {
       return indexed_db.Database.abortEvent.forTarget(this);
@@ -38694,17 +38694,17 @@
     static _() {
       dart.throw(new core.UnsupportedError("Not supported"));
     }
-    [dartx.cmp](first, second) {
-      return this.cmp(first, second);
+    [dartx.cmp](...args) {
+      return this.cmp.apply(this, args);
     }
-    [_deleteDatabase](name) {
-      return this.deleteDatabase(name);
+    [_deleteDatabase](...args) {
+      return this.deleteDatabase.apply(this, args);
     }
-    [_open](name, version) {
-      return this.open(name, version);
+    [_open](...args) {
+      return this.open.apply(this, args);
     }
-    [_webkitGetDatabaseNames]() {
-      return this.webkitGetDatabaseNames();
+    [_webkitGetDatabaseNames](...args) {
+      return this.webkitGetDatabaseNames.apply(this, args);
     }
   };
   dart.setSignature(indexed_db.IdbFactory, {
@@ -38847,26 +38847,26 @@
     get [dartx.unique]() {
       return this.unique;
     }
-    [_count$0](key) {
-      return this.count(key);
+    [_count$0](...args) {
+      return this.count.apply(this, args);
     }
-    [_get$](key) {
-      return this.get(key);
+    [_get$](...args) {
+      return this.get.apply(this, args);
     }
-    [dartx.getAll](range, maxCount) {
-      return this.getAll(range, maxCount);
+    [dartx.getAll](...args) {
+      return this.getAll.apply(this, args);
     }
-    [dartx.getAllKeys](range, maxCount) {
-      return this.getAllKeys(range, maxCount);
+    [dartx.getAllKeys](...args) {
+      return this.getAllKeys.apply(this, args);
     }
-    [_getKey$](key) {
-      return this.getKey(key);
+    [_getKey$](...args) {
+      return this.getKey.apply(this, args);
     }
-    [_openCursor](range, direction) {
-      return this.openCursor(range, direction);
+    [_openCursor](...args) {
+      return this.openCursor.apply(this, args);
     }
-    [_openKeyCursor](range, direction) {
-      return this.openKeyCursor(range, direction);
+    [_openKeyCursor](...args) {
+      return this.openKeyCursor.apply(this, args);
     }
   };
   dart.setSignature(indexed_db.Index, {
@@ -39120,17 +39120,17 @@
       let value_1 = html_common.convertDartToNative_SerializedScriptValue(value);
       return this[_add_2](value_1);
     }
-    [_add_1](value, key) {
-      return this.add(value, key);
+    [_add_1](...args) {
+      return this.add.apply(this, args);
     }
-    [_add_2](value) {
-      return this.add(value);
+    [_add_2](...args) {
+      return this.add.apply(this, args);
     }
-    [_clear$0]() {
-      return this.clear();
+    [_clear$0](...args) {
+      return this.clear.apply(this, args);
     }
-    [_count$0](key) {
-      return this.count(key);
+    [_count$0](...args) {
+      return this.count.apply(this, args);
     }
     [_createIndex](name, keyPath, options) {
       if (options === void 0) options = null;
@@ -39140,35 +39140,35 @@
       }
       return this[_createIndex_2](name, keyPath);
     }
-    [_createIndex_1](name, keyPath, options) {
-      return this.createIndex(name, keyPath, options);
+    [_createIndex_1](...args) {
+      return this.createIndex.apply(this, args);
     }
-    [_createIndex_2](name, keyPath) {
-      return this.createIndex(name, keyPath);
+    [_createIndex_2](...args) {
+      return this.createIndex.apply(this, args);
     }
-    [_delete](key) {
-      return this.delete(key);
+    [_delete](...args) {
+      return this.delete.apply(this, args);
     }
-    [dartx.deleteIndex](name) {
-      return this.deleteIndex(name);
+    [dartx.deleteIndex](...args) {
+      return this.deleteIndex.apply(this, args);
     }
-    [_get$](key) {
-      return this.get(key);
+    [_get$](...args) {
+      return this.get.apply(this, args);
     }
-    [dartx.getAll](range, maxCount) {
-      return this.getAll(range, maxCount);
+    [dartx.getAll](...args) {
+      return this.getAll.apply(this, args);
     }
-    [dartx.getAllKeys](range, maxCount) {
-      return this.getAllKeys(range, maxCount);
+    [dartx.getAllKeys](...args) {
+      return this.getAllKeys.apply(this, args);
     }
-    [dartx.index](name) {
-      return this.index(name);
+    [dartx.index](...args) {
+      return this.index.apply(this, args);
     }
-    [_openCursor](range, direction) {
-      return this.openCursor(range, direction);
+    [_openCursor](...args) {
+      return this.openCursor.apply(this, args);
     }
-    [dartx.openKeyCursor](range, direction) {
-      return this.openKeyCursor(range, direction);
+    [dartx.openKeyCursor](...args) {
+      return this.openKeyCursor.apply(this, args);
     }
     [_put](value, key) {
       if (key === void 0) key = null;
@@ -39180,11 +39180,11 @@
       let value_1 = html_common.convertDartToNative_SerializedScriptValue(value);
       return this[_put_2](value_1);
     }
-    [_put_1](value, key) {
-      return this.put(value, key);
+    [_put_1](...args) {
+      return this.put.apply(this, args);
     }
-    [_put_2](value) {
-      return this.put(value);
+    [_put_2](...args) {
+      return this.put.apply(this, args);
     }
     static _cursorStreamFromResult(T) {
       return (request, autoAdvance) => {
@@ -39399,11 +39399,11 @@
     get [dartx.objectStoreNames]() {
       return this.objectStoreNames;
     }
-    [dartx.abort]() {
-      return this.abort();
+    [dartx.abort](...args) {
+      return this.abort.apply(this, args);
     }
-    [dartx.objectStore](name) {
-      return this.objectStore(name);
+    [dartx.objectStore](...args) {
+      return this.objectStore.apply(this, args);
     }
     get [dartx.onAbort]() {
       return indexed_db.Transaction.abortEvent.forTarget(this);
@@ -39550,17 +39550,17 @@
     get [dartx.type]() {
       return this.type;
     }
-    [_initEvent](type, bubbles, cancelable) {
-      return this.initEvent(type, bubbles, cancelable);
+    [_initEvent](...args) {
+      return this.initEvent.apply(this, args);
     }
-    [dartx.preventDefault]() {
-      return this.preventDefault();
+    [dartx.preventDefault](...args) {
+      return this.preventDefault.apply(this, args);
     }
-    [dartx.stopImmediatePropagation]() {
-      return this.stopImmediatePropagation();
+    [dartx.stopImmediatePropagation](...args) {
+      return this.stopImmediatePropagation.apply(this, args);
     }
-    [dartx.stopPropagation]() {
-      return this.stopPropagation();
+    [dartx.stopPropagation](...args) {
+      return this.stopPropagation.apply(this, args);
     }
   };
   dart.setSignature(html$.Event, {
@@ -39861,26 +39861,26 @@
     set [dartx.text](value) {
       this.textContent = value;
     }
-    [dartx.append](node) {
-      return this.appendChild(node);
+    [dartx.append](...args) {
+      return this.appendChild.apply(this, args);
     }
-    [dartx.clone](deep) {
-      return this.cloneNode(deep);
+    [dartx.clone](...args) {
+      return this.cloneNode.apply(this, args);
     }
-    [dartx.contains](other) {
-      return this.contains(other);
+    [dartx.contains](...args) {
+      return this.contains.apply(this, args);
     }
-    [dartx.hasChildNodes]() {
-      return this.hasChildNodes();
+    [dartx.hasChildNodes](...args) {
+      return this.hasChildNodes.apply(this, args);
     }
-    [dartx.insertBefore](node, child) {
-      return this.insertBefore(node, child);
+    [dartx.insertBefore](...args) {
+      return this.insertBefore.apply(this, args);
     }
-    [_removeChild](child) {
-      return this.removeChild(child);
+    [_removeChild](...args) {
+      return this.removeChild.apply(this, args);
     }
-    [_replaceChild](node, child) {
-      return this.replaceChild(node, child);
+    [_replaceChild](...args) {
+      return this.replaceChild.apply(this, args);
     }
   };
   dart.defineNamedConstructor(html$.Node, '_created');
@@ -40360,8 +40360,8 @@
       let convertedTiming = core.Map.is(timing) ? html_common.convertDartToNative_Dictionary(timing) : timing;
       return convertedTiming == null ? this[_animate](convertedFrames) : this[_animate](convertedFrames, convertedTiming);
     }
-    [_animate](effect, timing) {
-      return this.animate(effect, timing);
+    [_animate](...args) {
+      return this.animate.apply(this, args);
     }
     [dartx.attributeChanged](name, oldValue, newValue) {}
     get [_xtag]() {
@@ -40421,8 +40421,8 @@
         this[_insertAdjacentNode](where, html$.Text.new(text));
       }
     }
-    [_insertAdjacentText](where, text) {
-      return this.insertAdjacentText(where, text);
+    [_insertAdjacentText](...args) {
+      return this.insertAdjacentText.apply(this, args);
     }
     [dartx.insertAdjacentHtml](where, html, opts) {
       let validator = opts && 'validator' in opts ? opts.validator : null;
@@ -40433,8 +40433,8 @@
         this[_insertAdjacentNode](where, this[dartx.createFragment](html, {validator: validator, treeSanitizer: treeSanitizer}));
       }
     }
-    [_insertAdjacentHtml](where, text) {
-      return this.insertAdjacentHTML(where, text);
+    [_insertAdjacentHtml](...args) {
+      return this.insertAdjacentHTML.apply(this, args);
     }
     [dartx.insertAdjacentElement](where, element) {
       if (!!this.insertAdjacentElement) {
@@ -40444,8 +40444,8 @@
       }
       return element;
     }
-    [_insertAdjacentElement](where, element) {
-      return this.insertAdjacentElement(where, element);
+    [_insertAdjacentElement](...args) {
+      return this.insertAdjacentElement.apply(this, args);
     }
     [_insertAdjacentNode](where, node) {
       switch (where[dartx.toLowerCase]()) {
@@ -40759,14 +40759,14 @@
     set [dartx.dropzone](value) {
       this.webkitdropzone = value;
     }
-    [dartx.blur]() {
-      return this.blur();
+    [dartx.blur](...args) {
+      return this.blur.apply(this, args);
     }
-    [dartx.click]() {
-      return this.click();
+    [dartx.click](...args) {
+      return this.click.apply(this, args);
     }
-    [dartx.focus]() {
-      return this.focus();
+    [dartx.focus](...args) {
+      return this.focus.apply(this, args);
     }
     get [_attributes$]() {
       return this.attributes;
@@ -40831,50 +40831,50 @@
     get [dartx.tagName]() {
       return this.tagName;
     }
-    [dartx.closest](selectors) {
-      return this.closest(selectors);
+    [dartx.closest](...args) {
+      return this.closest.apply(this, args);
     }
-    [dartx.getAnimations]() {
-      return this.getAnimations();
+    [dartx.getAnimations](...args) {
+      return this.getAnimations.apply(this, args);
     }
-    [dartx.getAttribute](name) {
-      return this.getAttribute(name);
+    [dartx.getAttribute](...args) {
+      return this.getAttribute.apply(this, args);
     }
-    [dartx.getAttributeNS](namespaceURI, localName) {
-      return this.getAttributeNS(namespaceURI, localName);
+    [dartx.getAttributeNS](...args) {
+      return this.getAttributeNS.apply(this, args);
     }
-    [dartx.getBoundingClientRect]() {
-      return this.getBoundingClientRect();
+    [dartx.getBoundingClientRect](...args) {
+      return this.getBoundingClientRect.apply(this, args);
     }
-    [dartx.getClientRects]() {
-      return this.getClientRects();
+    [dartx.getClientRects](...args) {
+      return this.getClientRects.apply(this, args);
     }
-    [dartx.getDestinationInsertionPoints]() {
-      return this.getDestinationInsertionPoints();
+    [dartx.getDestinationInsertionPoints](...args) {
+      return this.getDestinationInsertionPoints.apply(this, args);
     }
-    [dartx.getElementsByClassName](classNames) {
-      return this.getElementsByClassName(classNames);
+    [dartx.getElementsByClassName](...args) {
+      return this.getElementsByClassName.apply(this, args);
     }
-    [_getElementsByTagName](localName) {
-      return this.getElementsByTagName(localName);
+    [_getElementsByTagName](...args) {
+      return this.getElementsByTagName.apply(this, args);
     }
-    [_hasAttribute](name) {
-      return this.hasAttribute(name);
+    [_hasAttribute](...args) {
+      return this.hasAttribute.apply(this, args);
     }
-    [_hasAttributeNS](namespaceURI, localName) {
-      return this.hasAttributeNS(namespaceURI, localName);
+    [_hasAttributeNS](...args) {
+      return this.hasAttributeNS.apply(this, args);
     }
-    [_removeAttribute](name) {
-      return this.removeAttribute(name);
+    [_removeAttribute](...args) {
+      return this.removeAttribute.apply(this, args);
     }
-    [_removeAttributeNS](namespaceURI, localName) {
-      return this.removeAttributeNS(namespaceURI, localName);
+    [_removeAttributeNS](...args) {
+      return this.removeAttributeNS.apply(this, args);
     }
-    [dartx.requestFullscreen]() {
-      return this.requestFullscreen();
+    [dartx.requestFullscreen](...args) {
+      return this.requestFullscreen.apply(this, args);
     }
-    [dartx.requestPointerLock]() {
-      return this.requestPointerLock();
+    [dartx.requestPointerLock](...args) {
+      return this.requestPointerLock.apply(this, args);
     }
     [dartx.scroll](options_OR_x, y) {
       if (options_OR_x === void 0) options_OR_x = null;
@@ -40894,14 +40894,14 @@
       }
       dart.throw(new core.ArgumentError("Incorrect number or type of arguments"));
     }
-    [_scroll_1]() {
-      return this.scroll();
+    [_scroll_1](...args) {
+      return this.scroll.apply(this, args);
     }
-    [_scroll_2](options) {
-      return this.scroll(options);
+    [_scroll_2](...args) {
+      return this.scroll.apply(this, args);
     }
-    [_scroll_3](x, y) {
-      return this.scroll(x, y);
+    [_scroll_3](...args) {
+      return this.scroll.apply(this, args);
     }
     [dartx.scrollBy](options_OR_x, y) {
       if (options_OR_x === void 0) options_OR_x = null;
@@ -40921,20 +40921,20 @@
       }
       dart.throw(new core.ArgumentError("Incorrect number or type of arguments"));
     }
-    [_scrollBy_1]() {
-      return this.scrollBy();
+    [_scrollBy_1](...args) {
+      return this.scrollBy.apply(this, args);
     }
-    [_scrollBy_2](options) {
-      return this.scrollBy(options);
+    [_scrollBy_2](...args) {
+      return this.scrollBy.apply(this, args);
     }
-    [_scrollBy_3](x, y) {
-      return this.scrollBy(x, y);
+    [_scrollBy_3](...args) {
+      return this.scrollBy.apply(this, args);
     }
-    [_scrollIntoView](alignWithTop) {
-      return this.scrollIntoView(alignWithTop);
+    [_scrollIntoView](...args) {
+      return this.scrollIntoView.apply(this, args);
     }
-    [_scrollIntoViewIfNeeded](centerIfNeeded) {
-      return this.scrollIntoViewIfNeeded(centerIfNeeded);
+    [_scrollIntoViewIfNeeded](...args) {
+      return this.scrollIntoViewIfNeeded.apply(this, args);
     }
     [dartx.scrollTo](options_OR_x, y) {
       if (options_OR_x === void 0) options_OR_x = null;
@@ -40954,26 +40954,26 @@
       }
       dart.throw(new core.ArgumentError("Incorrect number or type of arguments"));
     }
-    [_scrollTo_1]() {
-      return this.scrollTo();
+    [_scrollTo_1](...args) {
+      return this.scrollTo.apply(this, args);
     }
-    [_scrollTo_2](options) {
-      return this.scrollTo(options);
+    [_scrollTo_2](...args) {
+      return this.scrollTo.apply(this, args);
     }
-    [_scrollTo_3](x, y) {
-      return this.scrollTo(x, y);
+    [_scrollTo_3](...args) {
+      return this.scrollTo.apply(this, args);
     }
-    [dartx.setAttribute](name, value) {
-      return this.setAttribute(name, value);
+    [dartx.setAttribute](...args) {
+      return this.setAttribute.apply(this, args);
     }
-    [dartx.setAttributeNS](namespaceURI, name, value) {
-      return this.setAttributeNS(namespaceURI, name, value);
+    [dartx.setAttributeNS](...args) {
+      return this.setAttributeNS.apply(this, args);
     }
-    [dartx.after](nodes) {
-      return this.after(nodes);
+    [dartx.after](...args) {
+      return this.after.apply(this, args);
     }
-    [dartx.before](nodes) {
-      return this.before(nodes);
+    [dartx.before](...args) {
+      return this.before.apply(this, args);
     }
     get [dartx.nextElementSibling]() {
       return this.nextElementSibling;
@@ -40993,11 +40993,11 @@
     get [_lastElementChild]() {
       return this.lastElementChild;
     }
-    [dartx.querySelector](selectors) {
-      return this.querySelector(selectors);
+    [dartx.querySelector](...args) {
+      return this.querySelector.apply(this, args);
     }
-    [_querySelectorAll](selectors) {
-      return this.querySelectorAll(selectors);
+    [_querySelectorAll](...args) {
+      return this.querySelectorAll.apply(this, args);
     }
     get [dartx.onAbort]() {
       return html$.Element.abortEvent.forElement(this);
@@ -42053,20 +42053,20 @@
     set [dartx.startTime](value) {
       this.startTime = value;
     }
-    [dartx.cancel]() {
-      return this.cancel();
+    [dartx.cancel](...args) {
+      return this.cancel.apply(this, args);
     }
-    [dartx.finish]() {
-      return this.finish();
+    [dartx.finish](...args) {
+      return this.finish.apply(this, args);
     }
-    [dartx.pause]() {
-      return this.pause();
+    [dartx.pause](...args) {
+      return this.pause.apply(this, args);
     }
-    [dartx.play]() {
-      return this.play();
+    [dartx.play](...args) {
+      return this.play.apply(this, args);
     }
-    [dartx.reverse]() {
-      return this.reverse();
+    [dartx.reverse](...args) {
+      return this.reverse.apply(this, args);
     }
   };
   dart.setSignature(html$.Animation, {
@@ -42317,11 +42317,11 @@
     set [dartx.playbackRate](value) {
       this.playbackRate = value;
     }
-    [dartx.getAnimations]() {
-      return this.getAnimations();
+    [dartx.getAnimations](...args) {
+      return this.getAnimations.apply(this, args);
     }
-    [dartx.play](source) {
-      return this.play(source);
+    [dartx.play](...args) {
+      return this.play.apply(this, args);
     }
   };
   dart.setSignature(html$.AnimationTimeline, {
@@ -42383,14 +42383,14 @@
     get [dartx.status]() {
       return this.status;
     }
-    [dartx.abort]() {
-      return this.abort();
+    [dartx.abort](...args) {
+      return this.abort.apply(this, args);
     }
-    [dartx.swapCache]() {
-      return this.swapCache();
+    [dartx.swapCache](...args) {
+      return this.swapCache.apply(this, args);
     }
-    [dartx.update]() {
-      return this.update();
+    [dartx.update](...args) {
+      return this.update.apply(this, args);
     }
     get [dartx.onCached]() {
       return html$.ApplicationCache.cachedEvent.forTarget(this);
@@ -42937,35 +42937,35 @@
     get [dartx.videoDecodedByteCount]() {
       return this.webkitVideoDecodedByteCount;
     }
-    [dartx.addTextTrack](kind, label, language) {
-      return this.addTextTrack(kind, label, language);
+    [dartx.addTextTrack](...args) {
+      return this.addTextTrack.apply(this, args);
     }
-    [dartx.canPlayType](type, keySystem) {
-      return this.canPlayType(type, keySystem);
+    [dartx.canPlayType](...args) {
+      return this.canPlayType.apply(this, args);
     }
-    [dartx.load]() {
-      return this.load();
+    [dartx.load](...args) {
+      return this.load.apply(this, args);
     }
-    [dartx.pause]() {
-      return this.pause();
+    [dartx.pause](...args) {
+      return this.pause.apply(this, args);
     }
-    [dartx.play]() {
-      return this.play();
+    [dartx.play](...args) {
+      return this.play.apply(this, args);
     }
-    [dartx.setMediaKeys](mediaKeys) {
-      return this.setMediaKeys(mediaKeys);
+    [dartx.setMediaKeys](...args) {
+      return this.setMediaKeys.apply(this, args);
     }
-    [dartx.setSinkId](sinkId) {
-      return this.setSinkId(sinkId);
+    [dartx.setSinkId](...args) {
+      return this.setSinkId.apply(this, args);
     }
-    [dartx.addKey](keySystem, key, initData, sessionId) {
-      return this.webkitAddKey(keySystem, key, initData, sessionId);
+    [dartx.addKey](...args) {
+      return this.webkitAddKey.apply(this, args);
     }
-    [dartx.cancelKeyRequest](keySystem, sessionId) {
-      return this.webkitCancelKeyRequest(keySystem, sessionId);
+    [dartx.cancelKeyRequest](...args) {
+      return this.webkitCancelKeyRequest.apply(this, args);
     }
-    [dartx.generateKeyRequest](keySystem, initData) {
-      return this.webkitGenerateKeyRequest(keySystem, initData);
+    [dartx.generateKeyRequest](...args) {
+      return this.webkitGenerateKeyRequest.apply(this, args);
     }
     get [dartx.onKeyAdded]() {
       return html$.MediaElement.keyAddedEvent.forElement(this);
@@ -43169,11 +43169,11 @@
     get [dartx.length]() {
       return this.length;
     }
-    [__getter__](index) {
-      return this.__getter__(index);
+    [__getter__](...args) {
+      return this.__getter__.apply(this, args);
     }
-    [dartx.getTrackById](id) {
-      return this.getTrackById(id);
+    [dartx.getTrackById](...args) {
+      return this.getTrackById.apply(this, args);
     }
     get [dartx.onChange]() {
       return html$.AudioTrackList.changeEvent.forTarget(this);
@@ -43373,8 +43373,8 @@
     get [dartx.userChoice]() {
       return this.userChoice;
     }
-    [dartx.prompt]() {
-      return this.prompt();
+    [dartx.prompt](...args) {
+      return this.prompt.apply(this, args);
     }
   };
   dart.setSignature(html$.BeforeInstallPromptEvent, {
@@ -43429,11 +43429,11 @@
     get [dartx.type]() {
       return this.type;
     }
-    [dartx.close]() {
-      return this.close();
+    [dartx.close](...args) {
+      return this.close.apply(this, args);
     }
-    [dartx.slice](start, end, contentType) {
-      return this.slice(start, end, contentType);
+    [dartx.slice](...args) {
+      return this.slice.apply(this, args);
     }
     static new(blobParts, type, endings) {
       if (type === void 0) type = null;
@@ -43493,8 +43493,8 @@
       let options_1 = html_common.convertDartToNative_Dictionary(options);
       return this[_requestDevice_1](options_1);
     }
-    [_requestDevice_1](options) {
-      return this.requestDevice(options);
+    [_requestDevice_1](...args) {
+      return this.requestDevice.apply(this, args);
     }
   };
   dart.setSignature(html$.Bluetooth, {
@@ -43544,8 +43544,8 @@
     get [dartx.vendorIDSource]() {
       return this.vendorIDSource;
     }
-    [dartx.connectGatt]() {
-      return this.connectGATT();
+    [dartx.connectGatt](...args) {
+      return this.connectGATT.apply(this, args);
     }
   };
   dart.setSignature(html$.BluetoothDevice, {
@@ -43575,11 +43575,11 @@
     get [dartx.uuid]() {
       return this.uuid;
     }
-    [dartx.readValue]() {
-      return this.readValue();
+    [dartx.readValue](...args) {
+      return this.readValue.apply(this, args);
     }
-    [dartx.writeValue](value) {
-      return this.writeValue(value);
+    [dartx.writeValue](...args) {
+      return this.writeValue.apply(this, args);
     }
   };
   dart.setSignature(html$.BluetoothGattCharacteristic, {
@@ -43602,8 +43602,8 @@
     get [dartx.connected]() {
       return this.connected;
     }
-    [dartx.getPrimaryService](service) {
-      return this.getPrimaryService(service);
+    [dartx.getPrimaryService](...args) {
+      return this.getPrimaryService.apply(this, args);
     }
   };
   dart.setSignature(html$.BluetoothGattRemoteServer, {
@@ -43627,8 +43627,8 @@
     get [dartx.uuid]() {
       return this.uuid;
     }
-    [dartx.getCharacteristic](characteristic) {
-      return this.getCharacteristic(characteristic);
+    [dartx.getCharacteristic](...args) {
+      return this.getCharacteristic.apply(this, args);
     }
   };
   dart.setSignature(html$.BluetoothGattService, {
@@ -43670,17 +43670,17 @@
     get [dartx.bodyUsed]() {
       return this.bodyUsed;
     }
-    [dartx.arrayBuffer]() {
-      return this.arrayBuffer();
+    [dartx.arrayBuffer](...args) {
+      return this.arrayBuffer.apply(this, args);
     }
-    [dartx.blob]() {
-      return this.blob();
+    [dartx.blob](...args) {
+      return this.blob.apply(this, args);
     }
-    [dartx.json]() {
-      return this.json();
+    [dartx.json](...args) {
+      return this.json.apply(this, args);
     }
-    [dartx.text]() {
-      return this.text();
+    [dartx.text](...args) {
+      return this.text.apply(this, args);
     }
   };
   dart.setSignature(html$.Body, {
@@ -43954,14 +43954,14 @@
     get [dartx.willValidate]() {
       return this.willValidate;
     }
-    [dartx.checkValidity]() {
-      return this.checkValidity();
+    [dartx.checkValidity](...args) {
+      return this.checkValidity.apply(this, args);
     }
-    [dartx.reportValidity]() {
-      return this.reportValidity();
+    [dartx.reportValidity](...args) {
+      return this.reportValidity.apply(this, args);
     }
-    [dartx.setCustomValidity](error) {
-      return this.setCustomValidity(error);
+    [dartx.setCustomValidity](...args) {
+      return this.setCustomValidity.apply(this, args);
     }
   };
   dart.defineNamedConstructor(html$.ButtonElement, 'created');
@@ -44022,26 +44022,26 @@
     get [dartx.length]() {
       return this.length;
     }
-    [dartx.appendData](data) {
-      return this.appendData(data);
+    [dartx.appendData](...args) {
+      return this.appendData.apply(this, args);
     }
-    [dartx.deleteData](offset, count) {
-      return this.deleteData(offset, count);
+    [dartx.deleteData](...args) {
+      return this.deleteData.apply(this, args);
     }
-    [dartx.insertData](offset, data) {
-      return this.insertData(offset, data);
+    [dartx.insertData](...args) {
+      return this.insertData.apply(this, args);
     }
-    [dartx.replaceData](offset, count, data) {
-      return this.replaceData(offset, count, data);
+    [dartx.replaceData](...args) {
+      return this.replaceData.apply(this, args);
     }
-    [dartx.substringData](offset, count) {
-      return this.substringData(offset, count);
+    [dartx.substringData](...args) {
+      return this.substringData.apply(this, args);
     }
-    [dartx.after](nodes) {
-      return this.after(nodes);
+    [dartx.after](...args) {
+      return this.after.apply(this, args);
     }
-    [dartx.before](nodes) {
-      return this.before(nodes);
+    [dartx.before](...args) {
+      return this.before.apply(this, args);
     }
     get [dartx.nextElementSibling]() {
       return this.nextElementSibling;
@@ -44085,11 +44085,11 @@
     get [dartx.wholeText]() {
       return this.wholeText;
     }
-    [dartx.getDestinationInsertionPoints]() {
-      return this.getDestinationInsertionPoints();
+    [dartx.getDestinationInsertionPoints](...args) {
+      return this.getDestinationInsertionPoints.apply(this, args);
     }
-    [dartx.splitText](offset) {
-      return this.splitText(offset);
+    [dartx.splitText](...args) {
+      return this.splitText.apply(this, args);
     }
   };
   dart.setSignature(html$.Text, {
@@ -44126,14 +44126,14 @@
     static _() {
       dart.throw(new core.UnsupportedError("Not supported"));
     }
-    [dartx.delete](cacheName) {
-      return this.delete(cacheName);
+    [dartx.delete](...args) {
+      return this.delete.apply(this, args);
     }
-    [dartx.has](cacheName) {
-      return this.has(cacheName);
+    [dartx.has](...args) {
+      return this.has.apply(this, args);
     }
-    [dartx.keys]() {
-      return this.keys();
+    [dartx.keys](...args) {
+      return this.keys.apply(this, args);
     }
     [dartx.match](request, options) {
       if (options === void 0) options = null;
@@ -44143,14 +44143,14 @@
       }
       return this[_match_2](request);
     }
-    [_match_1](request, options) {
-      return this.match(request, options);
+    [_match_1](...args) {
+      return this.match.apply(this, args);
     }
-    [_match_2](request) {
-      return this.match(request);
+    [_match_2](...args) {
+      return this.match.apply(this, args);
     }
-    [dartx.open](cacheName) {
-      return this.open(cacheName);
+    [dartx.open](...args) {
+      return this.open.apply(this, args);
     }
   };
   dart.setSignature(html$.CacheStorage, {
@@ -44216,14 +44216,14 @@
       }
       return this[_getContext_2](contextId);
     }
-    [_getContext_1](contextId, attributes) {
-      return this.getContext(contextId, attributes);
+    [_getContext_1](...args) {
+      return this.getContext.apply(this, args);
     }
-    [_getContext_2](contextId) {
-      return this.getContext(contextId);
+    [_getContext_2](...args) {
+      return this.getContext.apply(this, args);
     }
-    [_toDataUrl](type, arguments_OR_quality) {
-      return this.toDataURL(type, arguments_OR_quality);
+    [_toDataUrl](...args) {
+      return this.toDataURL.apply(this, args);
     }
     get [dartx.onWebGlContextLost]() {
       return html$.CanvasElement.webGlContextLostEvent.forElement(this);
@@ -44300,8 +44300,8 @@
     static _() {
       dart.throw(new core.UnsupportedError("Not supported"));
     }
-    [dartx.addColorStop](offset, color) {
-      return this.addColorStop(offset, color);
+    [dartx.addColorStop](...args) {
+      return this.addColorStop.apply(this, args);
     }
   };
   dart.setSignature(html$.CanvasGradient, {
@@ -44316,8 +44316,8 @@
     static _() {
       dart.throw(new core.UnsupportedError("Not supported"));
     }
-    [dartx.setTransform](transform) {
-      return this.setTransform(transform);
+    [dartx.setTransform](...args) {
+      return this.setTransform.apply(this, args);
     }
   };
   dart.setSignature(html$.CanvasPattern, {
@@ -44546,23 +44546,23 @@
       this[_addHitRegion_2]();
       return;
     }
-    [_addHitRegion_1](options) {
-      return this.addHitRegion(options);
+    [_addHitRegion_1](...args) {
+      return this.addHitRegion.apply(this, args);
     }
-    [_addHitRegion_2]() {
-      return this.addHitRegion();
+    [_addHitRegion_2](...args) {
+      return this.addHitRegion.apply(this, args);
     }
-    [dartx.beginPath]() {
-      return this.beginPath();
+    [dartx.beginPath](...args) {
+      return this.beginPath.apply(this, args);
     }
-    [dartx.clearHitRegions]() {
-      return this.clearHitRegions();
+    [dartx.clearHitRegions](...args) {
+      return this.clearHitRegions.apply(this, args);
     }
-    [dartx.clearRect](x, y, width, height) {
-      return this.clearRect(x, y, width, height);
+    [dartx.clearRect](...args) {
+      return this.clearRect.apply(this, args);
     }
-    [dartx.clip](path_OR_winding, winding) {
-      return this.clip(path_OR_winding, winding);
+    [dartx.clip](...args) {
+      return this.clip.apply(this, args);
     }
     [dartx.createImageData](imagedata_OR_sw, sh) {
       if (sh === void 0) sh = null;
@@ -44575,53 +44575,53 @@
       }
       dart.throw(new core.ArgumentError("Incorrect number or type of arguments"));
     }
-    [_createImageData_1](imagedata) {
-      return this.createImageData(imagedata);
+    [_createImageData_1](...args) {
+      return this.createImageData.apply(this, args);
     }
-    [_createImageData_2](sw, sh) {
-      return this.createImageData(sw, sh);
+    [_createImageData_2](...args) {
+      return this.createImageData.apply(this, args);
     }
-    [dartx.createLinearGradient](x0, y0, x1, y1) {
-      return this.createLinearGradient(x0, y0, x1, y1);
+    [dartx.createLinearGradient](...args) {
+      return this.createLinearGradient.apply(this, args);
     }
-    [dartx.createPattern](image, repetitionType) {
-      return this.createPattern(image, repetitionType);
+    [dartx.createPattern](...args) {
+      return this.createPattern.apply(this, args);
     }
-    [dartx.createRadialGradient](x0, y0, r0, x1, y1, r1) {
-      return this.createRadialGradient(x0, y0, r0, x1, y1, r1);
+    [dartx.createRadialGradient](...args) {
+      return this.createRadialGradient.apply(this, args);
     }
-    [dartx.drawFocusIfNeeded](element_OR_path, element) {
-      return this.drawFocusIfNeeded(element_OR_path, element);
+    [dartx.drawFocusIfNeeded](...args) {
+      return this.drawFocusIfNeeded.apply(this, args);
     }
-    [dartx.fillRect](x, y, width, height) {
-      return this.fillRect(x, y, width, height);
+    [dartx.fillRect](...args) {
+      return this.fillRect.apply(this, args);
     }
     [dartx.getContextAttributes]() {
       return html_common.convertNativeToDart_Dictionary(this[_getContextAttributes_1]());
     }
-    [_getContextAttributes_1]() {
-      return this.getContextAttributes();
+    [_getContextAttributes_1](...args) {
+      return this.getContextAttributes.apply(this, args);
     }
     [dartx.getImageData](sx, sy, sw, sh) {
       return html_common.convertNativeToDart_ImageData(this[_getImageData_1](sx, sy, sw, sh));
     }
-    [_getImageData_1](sx, sy, sw, sh) {
-      return this.getImageData(sx, sy, sw, sh);
+    [_getImageData_1](...args) {
+      return this.getImageData.apply(this, args);
     }
-    [_getLineDash]() {
-      return this.getLineDash();
+    [_getLineDash](...args) {
+      return this.getLineDash.apply(this, args);
     }
-    [dartx.isContextLost]() {
-      return this.isContextLost();
+    [dartx.isContextLost](...args) {
+      return this.isContextLost.apply(this, args);
     }
-    [dartx.isPointInPath](path_OR_x, x_OR_y, winding_OR_y, winding) {
-      return this.isPointInPath(path_OR_x, x_OR_y, winding_OR_y, winding);
+    [dartx.isPointInPath](...args) {
+      return this.isPointInPath.apply(this, args);
     }
-    [dartx.isPointInStroke](path_OR_x, x_OR_y, y) {
-      return this.isPointInStroke(path_OR_x, x_OR_y, y);
+    [dartx.isPointInStroke](...args) {
+      return this.isPointInStroke.apply(this, args);
     }
-    [dartx.measureText](text) {
-      return this.measureText(text);
+    [dartx.measureText](...args) {
+      return this.measureText.apply(this, args);
     }
     [dartx.putImageData](imagedata, dx, dy, dirtyX, dirtyY, dirtyWidth, dirtyHeight) {
       if (dirtyX === void 0) dirtyX = null;
@@ -44640,77 +44640,77 @@
       }
       dart.throw(new core.ArgumentError("Incorrect number or type of arguments"));
     }
-    [_putImageData_1](imagedata, dx, dy) {
-      return this.putImageData(imagedata, dx, dy);
+    [_putImageData_1](...args) {
+      return this.putImageData.apply(this, args);
     }
-    [_putImageData_2](imagedata, dx, dy, dirtyX, dirtyY, dirtyWidth, dirtyHeight) {
-      return this.putImageData(imagedata, dx, dy, dirtyX, dirtyY, dirtyWidth, dirtyHeight);
+    [_putImageData_2](...args) {
+      return this.putImageData.apply(this, args);
     }
-    [dartx.removeHitRegion](id) {
-      return this.removeHitRegion(id);
+    [dartx.removeHitRegion](...args) {
+      return this.removeHitRegion.apply(this, args);
     }
-    [dartx.resetTransform]() {
-      return this.resetTransform();
+    [dartx.resetTransform](...args) {
+      return this.resetTransform.apply(this, args);
     }
-    [dartx.restore]() {
-      return this.restore();
+    [dartx.restore](...args) {
+      return this.restore.apply(this, args);
     }
-    [dartx.rotate](angle) {
-      return this.rotate(angle);
+    [dartx.rotate](...args) {
+      return this.rotate.apply(this, args);
     }
-    [dartx.save]() {
-      return this.save();
+    [dartx.save](...args) {
+      return this.save.apply(this, args);
     }
-    [dartx.scale](x, y) {
-      return this.scale(x, y);
+    [dartx.scale](...args) {
+      return this.scale.apply(this, args);
     }
-    [dartx.scrollPathIntoView](path) {
-      return this.scrollPathIntoView(path);
+    [dartx.scrollPathIntoView](...args) {
+      return this.scrollPathIntoView.apply(this, args);
     }
-    [dartx.setTransform](a, b, c, d, e, f) {
-      return this.setTransform(a, b, c, d, e, f);
+    [dartx.setTransform](...args) {
+      return this.setTransform.apply(this, args);
     }
-    [dartx.stroke](path) {
-      return this.stroke(path);
+    [dartx.stroke](...args) {
+      return this.stroke.apply(this, args);
     }
-    [dartx.strokeRect](x, y, width, height) {
-      return this.strokeRect(x, y, width, height);
+    [dartx.strokeRect](...args) {
+      return this.strokeRect.apply(this, args);
     }
-    [dartx.strokeText](text, x, y, maxWidth) {
-      return this.strokeText(text, x, y, maxWidth);
+    [dartx.strokeText](...args) {
+      return this.strokeText.apply(this, args);
     }
-    [dartx.transform](a, b, c, d, e, f) {
-      return this.transform(a, b, c, d, e, f);
+    [dartx.transform](...args) {
+      return this.transform.apply(this, args);
     }
-    [dartx.translate](x, y) {
-      return this.translate(x, y);
+    [dartx.translate](...args) {
+      return this.translate.apply(this, args);
     }
-    [_arc](x, y, radius, startAngle, endAngle, anticlockwise) {
-      return this.arc(x, y, radius, startAngle, endAngle, anticlockwise);
+    [_arc](...args) {
+      return this.arc.apply(this, args);
     }
-    [dartx.arcTo](x1, y1, x2, y2, radius) {
-      return this.arcTo(x1, y1, x2, y2, radius);
+    [dartx.arcTo](...args) {
+      return this.arcTo.apply(this, args);
     }
-    [dartx.bezierCurveTo](cp1x, cp1y, cp2x, cp2y, x, y) {
-      return this.bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y);
+    [dartx.bezierCurveTo](...args) {
+      return this.bezierCurveTo.apply(this, args);
     }
-    [dartx.closePath]() {
-      return this.closePath();
+    [dartx.closePath](...args) {
+      return this.closePath.apply(this, args);
     }
-    [dartx.ellipse](x, y, radiusX, radiusY, rotation, startAngle, endAngle, anticlockwise) {
-      return this.ellipse(x, y, radiusX, radiusY, rotation, startAngle, endAngle, anticlockwise);
+    [dartx.ellipse](...args) {
+      return this.ellipse.apply(this, args);
     }
-    [dartx.lineTo](x, y) {
-      return this.lineTo(x, y);
+    [dartx.lineTo](...args) {
+      return this.lineTo.apply(this, args);
     }
-    [dartx.moveTo](x, y) {
-      return this.moveTo(x, y);
+    [dartx.moveTo](...args) {
+      return this.moveTo.apply(this, args);
     }
-    [dartx.quadraticCurveTo](cpx, cpy, x, y) {
-      return this.quadraticCurveTo(cpx, cpy, x, y);
+    [dartx.quadraticCurveTo](...args) {
+      return this.quadraticCurveTo.apply(this, args);
     }
-    [dartx.rect](x, y, width, height) {
-      return this.rect(x, y, width, height);
+    [dartx.rect](...args) {
+      return this.rect.apply(this, args);
     }
     [dartx.createImageDataFromImageData](imagedata) {
       return this.createImageData(imagedata);
@@ -44746,14 +44746,14 @@
         this[dartx.drawImageScaledFromSource](source, sourceRect[dartx.left], sourceRect[dartx.top], sourceRect[dartx.width], sourceRect[dartx.height], destRect[dartx.left], destRect[dartx.top], destRect[dartx.width], destRect[dartx.height]);
       }
     }
-    [dartx.drawImage](source, destX, destY) {
-      return this.drawImage(source, destX, destY);
+    [dartx.drawImage](...args) {
+      return this.drawImage.apply(this, args);
     }
-    [dartx.drawImageScaled](source, destX, destY, destWidth, destHeight) {
-      return this.drawImage(source, destX, destY, destWidth, destHeight);
+    [dartx.drawImageScaled](...args) {
+      return this.drawImage.apply(this, args);
     }
-    [dartx.drawImageScaledFromSource](source, sourceX, sourceY, sourceWidth, sourceHeight, destX, destY, destWidth, destHeight) {
-      return this.drawImage(source, sourceX, sourceY, sourceWidth, sourceHeight, destX, destY, destWidth, destHeight);
+    [dartx.drawImageScaledFromSource](...args) {
+      return this.drawImage.apply(this, args);
     }
     get [dartx.lineDashOffset]() {
       return this.lineDashOffset || this.webkitLineDashOffset;
@@ -45000,11 +45000,11 @@
       this[_postMessage_2](message_1);
       return;
     }
-    [_postMessage_1](message, transfer) {
-      return this.postMessage(message, transfer);
+    [_postMessage_1](...args) {
+      return this.postMessage.apply(this, args);
     }
-    [_postMessage_2](message) {
-      return this.postMessage(message);
+    [_postMessage_2](...args) {
+      return this.postMessage.apply(this, args);
     }
   };
   dart.setSignature(html$.Client, {
@@ -45032,8 +45032,8 @@
     static _() {
       dart.throw(new core.UnsupportedError("Not supported"));
     }
-    [dartx.claim]() {
-      return this.claim();
+    [dartx.claim](...args) {
+      return this.claim.apply(this, args);
     }
     [dartx.matchAll](options) {
       if (options === void 0) options = null;
@@ -45043,14 +45043,14 @@
       }
       return this[_matchAll_2]();
     }
-    [_matchAll_1](options) {
-      return this.matchAll(options);
+    [_matchAll_1](...args) {
+      return this.matchAll.apply(this, args);
     }
-    [_matchAll_2]() {
-      return this.matchAll();
+    [_matchAll_2](...args) {
+      return this.matchAll.apply(this, args);
     }
-    [dartx.openWindow](url) {
-      return this.openWindow(url);
+    [dartx.openWindow](...args) {
+      return this.openWindow.apply(this, args);
     }
   };
   dart.setSignature(html$.Clients, {
@@ -45208,8 +45208,8 @@
     get [_which]() {
       return this.which;
     }
-    [_initUIEvent](type, bubbles, cancelable, view, detail) {
-      return this.initUIEvent(type, bubbles, cancelable, view, detail);
+    [_initUIEvent](...args) {
+      return this.initUIEvent.apply(this, args);
     }
   };
   dart.setSignature(html$.UIEvent, {
@@ -45272,8 +45272,8 @@
     get [dartx.data]() {
       return this.data;
     }
-    [_initCompositionEvent](type, bubbles, cancelable, view, data) {
-      return this.initCompositionEvent(type, bubbles, cancelable, view, data);
+    [_initCompositionEvent](...args) {
+      return this.initCompositionEvent.apply(this, args);
     }
   };
   dart.setSignature(html$.CompositionEvent, {
@@ -45332,11 +45332,11 @@
     set [dartx.transform](value) {
       this.transform = value;
     }
-    [dartx.disconnect]() {
-      return this.disconnect();
+    [dartx.disconnect](...args) {
+      return this.disconnect.apply(this, args);
     }
-    [dartx.supports](attribute) {
-      return this.supports(attribute);
+    [dartx.supports](...args) {
+      return this.supports.apply(this, args);
     }
   };
   dart.setSignature(html$.CompositorProxy, {
@@ -45385,14 +45385,14 @@
       this[_postMessage_2](message_1);
       return;
     }
-    [_postMessage_1](message, transfer) {
-      return this.postMessage(message, transfer);
+    [_postMessage_1](...args) {
+      return this.postMessage.apply(this, args);
     }
-    [_postMessage_2](message) {
-      return this.postMessage(message);
+    [_postMessage_2](...args) {
+      return this.postMessage.apply(this, args);
     }
-    [dartx.terminate]() {
-      return this.terminate();
+    [dartx.terminate](...args) {
+      return this.terminate.apply(this, args);
     }
     get [dartx.onError]() {
       return html$.CompositorWorker.errorEvent.forTarget(this);
@@ -45491,8 +45491,8 @@
     get [dartx.self]() {
       return this.self;
     }
-    [dartx.close]() {
-      return this.close();
+    [dartx.close](...args) {
+      return this.close.apply(this, args);
     }
     [dartx.fetch](input, init) {
       if (init === void 0) init = null;
@@ -45502,17 +45502,17 @@
       }
       return this[_fetch_2](input);
     }
-    [_fetch_1](input, init) {
-      return this.fetch(input, init);
+    [_fetch_1](...args) {
+      return this.fetch.apply(this, args);
     }
-    [_fetch_2](input) {
-      return this.fetch(input);
+    [_fetch_2](...args) {
+      return this.fetch.apply(this, args);
     }
-    [dartx.importScripts](urls) {
-      return this.importScripts(urls);
+    [dartx.importScripts](...args) {
+      return this.importScripts.apply(this, args);
     }
-    [_webkitRequestFileSystem](type, size, successCallback, errorCallback) {
-      return this.webkitRequestFileSystem(type, size, successCallback, errorCallback);
+    [_webkitRequestFileSystem](...args) {
+      return this.webkitRequestFileSystem.apply(this, args);
     }
     [dartx.webkitRequestFileSystem](type, size) {
       let completer = CompleterOfFileSystem().new();
@@ -45523,14 +45523,14 @@
       }, FileErrorTovoid()));
       return completer.future;
     }
-    [dartx.requestFileSystemSync](type, size) {
-      return this.webkitRequestFileSystemSync(type, size);
+    [dartx.requestFileSystemSync](...args) {
+      return this.webkitRequestFileSystemSync.apply(this, args);
     }
-    [dartx.resolveLocalFileSystemSyncUrl](url) {
-      return this.webkitResolveLocalFileSystemSyncURL(url);
+    [dartx.resolveLocalFileSystemSyncUrl](...args) {
+      return this.webkitResolveLocalFileSystemSyncURL.apply(this, args);
     }
-    [_webkitResolveLocalFileSystemUrl](url, successCallback, errorCallback) {
-      return this.webkitResolveLocalFileSystemURL(url, successCallback, errorCallback);
+    [_webkitResolveLocalFileSystemUrl](...args) {
+      return this.webkitResolveLocalFileSystemURL.apply(this, args);
     }
     [dartx.webkitResolveLocalFileSystemUrl](url) {
       let completer = CompleterOfEntry().new();
@@ -45541,29 +45541,29 @@
       }, FileErrorTovoid()));
       return completer.future;
     }
-    [dartx.atob](atob) {
-      return this.atob(atob);
+    [dartx.atob](...args) {
+      return this.atob.apply(this, args);
     }
-    [dartx.btoa](btoa) {
-      return this.btoa(btoa);
+    [dartx.btoa](...args) {
+      return this.btoa.apply(this, args);
     }
-    [_setInterval_String](handler, timeout, arguments$) {
-      return this.setInterval(handler, timeout, arguments$);
+    [_setInterval_String](...args) {
+      return this.setInterval.apply(this, args);
     }
-    [_setTimeout_String](handler, timeout, arguments$) {
-      return this.setTimeout(handler, timeout, arguments$);
+    [_setTimeout_String](...args) {
+      return this.setTimeout.apply(this, args);
     }
-    [_clearInterval](handle) {
-      return this.clearInterval(handle);
+    [_clearInterval](...args) {
+      return this.clearInterval.apply(this, args);
     }
-    [_clearTimeout](handle) {
-      return this.clearTimeout(handle);
+    [_clearTimeout](...args) {
+      return this.clearTimeout.apply(this, args);
     }
-    [_setInterval](handler, timeout) {
-      return this.setInterval(handler, timeout);
+    [_setInterval](...args) {
+      return this.setInterval.apply(this, args);
     }
-    [_setTimeout](handler, timeout) {
-      return this.setTimeout(handler, timeout);
+    [_setTimeout](...args) {
+      return this.setTimeout.apply(this, args);
     }
     get [dartx.onError]() {
       return html$.WorkerGlobalScope.errorEvent.forTarget(this);
@@ -45628,8 +45628,8 @@
     static _() {
       dart.throw(new core.UnsupportedError("Not supported"));
     }
-    [dartx.cancelAnimationFrame](handle) {
-      return this.cancelAnimationFrame(handle);
+    [dartx.cancelAnimationFrame](...args) {
+      return this.cancelAnimationFrame.apply(this, args);
     }
     [dartx.postMessage](message, transfer) {
       if (transfer === void 0) transfer = null;
@@ -45642,14 +45642,14 @@
       this[_postMessage_2](message_1);
       return;
     }
-    [_postMessage_1](message, transfer) {
-      return this.postMessage(message, transfer);
+    [_postMessage_1](...args) {
+      return this.postMessage.apply(this, args);
     }
-    [_postMessage_2](message) {
-      return this.postMessage(message);
+    [_postMessage_2](...args) {
+      return this.postMessage.apply(this, args);
     }
-    [dartx.requestAnimationFrame](callback) {
-      return this.requestAnimationFrame(callback);
+    [dartx.requestAnimationFrame](...args) {
+      return this.requestAnimationFrame.apply(this, args);
     }
     get [dartx.onMessage]() {
       return html$.CompositorWorkerGlobalScope.messageEvent.forTarget(this);
@@ -45799,14 +45799,14 @@
     static _() {
       dart.throw(new core.UnsupportedError("Not supported"));
     }
-    [dartx.assertCondition](condition, arg) {
-      return this.assert(condition, arg);
+    [dartx.assertCondition](...args) {
+      return this.assert.apply(this, args);
     }
-    [dartx.timeline](title) {
-      return this.timeline(title);
+    [dartx.timeline](...args) {
+      return this.timeline.apply(this, args);
     }
-    [dartx.timelineEnd](title) {
-      return this.timelineEnd(title);
+    [dartx.timelineEnd](...args) {
+      return this.timelineEnd.apply(this, args);
     }
   };
   dart.setSignature(html$.ConsoleBase, {
@@ -45842,8 +45842,8 @@
     set [dartx.select](value) {
       this.select = value;
     }
-    [dartx.getDistributedNodes]() {
-      return this.getDistributedNodes();
+    [dartx.getDistributedNodes](...args) {
+      return this.getDistributedNodes.apply(this, args);
     }
   };
   dart.defineNamedConstructor(html$.ContentElement, 'created');
@@ -45950,8 +45950,8 @@
     static _() {
       dart.throw(new core.UnsupportedError("Not supported"));
     }
-    [dartx.notifySignedIn](credential) {
-      return this.notifySignedIn(credential);
+    [dartx.notifySignedIn](...args) {
+      return this.notifySignedIn.apply(this, args);
     }
     [dartx.request](options) {
       if (options === void 0) options = null;
@@ -45961,14 +45961,14 @@
       }
       return this[_request_2]();
     }
-    [_request_1](options) {
-      return this.request(options);
+    [_request_1](...args) {
+      return this.request.apply(this, args);
     }
-    [_request_2]() {
-      return this.request();
+    [_request_2](...args) {
+      return this.request.apply(this, args);
     }
-    [dartx.requireUserMediation]() {
-      return this.requireUserMediation();
+    [dartx.requireUserMediation](...args) {
+      return this.requireUserMediation.apply(this, args);
     }
   };
   dart.setSignature(html$.CredentialsContainer, {
@@ -45993,8 +45993,8 @@
     get [dartx.client]() {
       return this.client;
     }
-    [dartx.acceptConnection](shouldAccept) {
-      return this.acceptConnection(shouldAccept);
+    [dartx.acceptConnection](...args) {
+      return this.acceptConnection.apply(this, args);
     }
   };
   dart.setSignature(html$.CrossOriginConnectEvent, {
@@ -46029,11 +46029,11 @@
       this[_postMessage_2](message_1);
       return;
     }
-    [_postMessage_1](message, transfer) {
-      return this.postMessage(message, transfer);
+    [_postMessage_1](...args) {
+      return this.postMessage.apply(this, args);
     }
-    [_postMessage_2](message) {
-      return this.postMessage(message);
+    [_postMessage_2](...args) {
+      return this.postMessage.apply(this, args);
     }
   };
   dart.setSignature(html$.CrossOriginServiceWorkerClient, {
@@ -46067,8 +46067,8 @@
     get [dartx.subtle]() {
       return this.subtle;
     }
-    [_getRandomValues](array) {
-      return this.getRandomValues(array);
+    [_getRandomValues](...args) {
+      return this.getRandomValues.apply(this, args);
     }
   };
   dart.setSignature(html$.Crypto, {
@@ -46237,11 +46237,11 @@
     get [dartx.cssRules]() {
       return this.cssRules;
     }
-    [dartx.deleteRule](index) {
-      return this.deleteRule(index);
+    [dartx.deleteRule](...args) {
+      return this.deleteRule.apply(this, args);
     }
-    [dartx.insertRule](rule, index) {
-      return this.insertRule(rule, index);
+    [dartx.insertRule](...args) {
+      return this.insertRule.apply(this, args);
     }
   };
   dart.setSignature(html$.CssGroupingRule, {
@@ -46329,17 +46329,17 @@
     set [dartx.name](value) {
       this.name = value;
     }
-    [__getter__](index) {
-      return this.__getter__(index);
+    [__getter__](...args) {
+      return this.__getter__.apply(this, args);
     }
-    [dartx.appendRule](rule) {
-      return this.appendRule(rule);
+    [dartx.appendRule](...args) {
+      return this.appendRule.apply(this, args);
     }
-    [dartx.deleteRule](select) {
-      return this.deleteRule(select);
+    [dartx.deleteRule](...args) {
+      return this.deleteRule.apply(this, args);
     }
-    [dartx.findRule](select) {
-      return this.findRule(select);
+    [dartx.findRule](...args) {
+      return this.findRule.apply(this, args);
     }
   };
   dart.setSignature(html$.CssKeyframesRule, {
@@ -50877,17 +50877,17 @@
     get [dartx.parentRule]() {
       return this.parentRule;
     }
-    [dartx.getPropertyPriority](property) {
-      return this.getPropertyPriority(property);
+    [dartx.getPropertyPriority](...args) {
+      return this.getPropertyPriority.apply(this, args);
     }
-    [_getPropertyValue](property) {
-      return this.getPropertyValue(property);
+    [_getPropertyValue](...args) {
+      return this.getPropertyValue.apply(this, args);
     }
-    [dartx.item](index) {
-      return this.item(index);
+    [dartx.item](...args) {
+      return this.item.apply(this, args);
     }
-    [dartx.removeProperty](property) {
-      return this.removeProperty(property);
+    [dartx.removeProperty](...args) {
+      return this.removeProperty.apply(this, args);
     }
     get [dartx.background]() {
       return this[_background];
@@ -52869,17 +52869,17 @@
     get [dartx.rules]() {
       return this.rules;
     }
-    [dartx.addRule](selector, style, index) {
-      return this.addRule(selector, style, index);
+    [dartx.addRule](...args) {
+      return this.addRule.apply(this, args);
     }
-    [dartx.deleteRule](index) {
-      return this.deleteRule(index);
+    [dartx.deleteRule](...args) {
+      return this.deleteRule.apply(this, args);
     }
-    [dartx.insertRule](rule, index) {
-      return this.insertRule(rule, index);
+    [dartx.insertRule](...args) {
+      return this.insertRule.apply(this, args);
     }
-    [dartx.removeRule](index) {
-      return this.removeRule(index);
+    [dartx.removeRule](...args) {
+      return this.removeRule.apply(this, args);
     }
   };
   dart.setSignature(html$.CssStyleSheet, {
@@ -52913,11 +52913,11 @@
     get [dartx.cssRules]() {
       return this.cssRules;
     }
-    [dartx.deleteRule](index) {
-      return this.deleteRule(index);
+    [dartx.deleteRule](...args) {
+      return this.deleteRule.apply(this, args);
     }
-    [dartx.insertRule](rule, index) {
-      return this.insertRule(rule, index);
+    [dartx.insertRule](...args) {
+      return this.insertRule.apply(this, args);
     }
   };
   dart.setSignature(html$.CssSupportsRule, {
@@ -53007,8 +53007,8 @@
     get [_get__detail]() {
       return this.detail;
     }
-    [_initCustomEvent](type, bubbles, cancelable, detail) {
-      return this.initCustomEvent(type, bubbles, cancelable, detail);
+    [_initCustomEvent](...args) {
+      return this.initCustomEvent.apply(this, args);
     }
   };
   dart.setSignature(html$.CustomEvent, {
@@ -53120,17 +53120,17 @@
     get [dartx.types]() {
       return this.types;
     }
-    [dartx.clearData](format) {
-      return this.clearData(format);
+    [dartx.clearData](...args) {
+      return this.clearData.apply(this, args);
     }
-    [dartx.getData](format) {
-      return this.getData(format);
+    [dartx.getData](...args) {
+      return this.getData.apply(this, args);
     }
-    [dartx.setData](format, data) {
-      return this.setData(format, data);
+    [dartx.setData](...args) {
+      return this.setData.apply(this, args);
     }
-    [dartx.setDragImage](image, x, y) {
-      return this.setDragImage(image, x, y);
+    [dartx.setDragImage](...args) {
+      return this.setDragImage.apply(this, args);
     }
   };
   dart.setSignature(html$.DataTransfer, {
@@ -53168,11 +53168,11 @@
     get [dartx.type]() {
       return this.type;
     }
-    [dartx.getAsFile]() {
-      return this.getAsFile();
+    [dartx.getAsFile](...args) {
+      return this.getAsFile.apply(this, args);
     }
-    [_getAsString](callback) {
-      return this.getAsString(callback);
+    [_getAsString](...args) {
+      return this.getAsString.apply(this, args);
     }
     [dartx.getAsString]() {
       let completer = CompleterOfString().new();
@@ -53181,8 +53181,8 @@
       }, StringTovoid$()));
       return completer.future;
     }
-    [dartx.getAsEntry]() {
-      return this.webkitGetAsEntry();
+    [dartx.getAsEntry](...args) {
+      return this.webkitGetAsEntry.apply(this, args);
     }
   };
   dart.setSignature(html$.DataTransferItem, {
@@ -53216,23 +53216,23 @@
     get [dartx.length]() {
       return this.length;
     }
-    [dartx.add](data_OR_file, type) {
-      return this.add(data_OR_file, type);
+    [dartx.add](...args) {
+      return this.add.apply(this, args);
     }
-    [dartx.addData](data, type) {
-      return this.add(data, type);
+    [dartx.addData](...args) {
+      return this.add.apply(this, args);
     }
-    [dartx.addFile](file) {
-      return this.add(file);
+    [dartx.addFile](...args) {
+      return this.add.apply(this, args);
     }
-    [dartx.clear]() {
-      return this.clear();
+    [dartx.clear](...args) {
+      return this.clear.apply(this, args);
     }
-    [dartx.item](index) {
-      return this.item(index);
+    [dartx.item](...args) {
+      return this.item.apply(this, args);
     }
-    [dartx.remove](index) {
-      return this.remove(index);
+    [dartx.remove](...args) {
+      return this.remove.apply(this, args);
     }
     [dartx._get](index) {
       return this[index];
@@ -53272,11 +53272,11 @@
       this[_postMessage_2](message_1);
       return;
     }
-    [_postMessage_1](message, transfer) {
-      return this.postMessage(message, transfer);
+    [_postMessage_1](...args) {
+      return this.postMessage.apply(this, args);
     }
-    [_postMessage_2](message) {
-      return this.postMessage(message);
+    [_postMessage_2](...args) {
+      return this.postMessage.apply(this, args);
     }
     get [dartx.onMessage]() {
       return html$.DedicatedWorkerGlobalScope.messageEvent.forTarget(this);
@@ -53344,11 +53344,11 @@
     static _() {
       dart.throw(new core.UnsupportedError("Not supported"));
     }
-    [dartx.queryUsageAndQuota](storageType, usageCallback, errorCallback) {
-      return this.queryUsageAndQuota(storageType, usageCallback, errorCallback);
+    [dartx.queryUsageAndQuota](...args) {
+      return this.queryUsageAndQuota.apply(this, args);
     }
-    [dartx.requestQuota](storageType, newQuotaInBytes, quotaCallback, errorCallback) {
-      return this.requestQuota(storageType, newQuotaInBytes, quotaCallback, errorCallback);
+    [dartx.requestQuota](...args) {
+      return this.requestQuota.apply(this, args);
     }
   };
   dart.setSignature(html$.DeprecatedStorageInfo, {
@@ -53373,11 +53373,11 @@
     static _() {
       dart.throw(new core.UnsupportedError("Not supported"));
     }
-    [dartx.queryUsageAndQuota](usageCallback, errorCallback) {
-      return this.queryUsageAndQuota(usageCallback, errorCallback);
+    [dartx.queryUsageAndQuota](...args) {
+      return this.queryUsageAndQuota.apply(this, args);
     }
-    [dartx.requestQuota](newQuotaInBytes, quotaCallback, errorCallback) {
-      return this.requestQuota(newQuotaInBytes, quotaCallback, errorCallback);
+    [dartx.requestQuota](...args) {
+      return this.requestQuota.apply(this, args);
     }
   };
   dart.setSignature(html$.DeprecatedStorageQuota, {
@@ -53512,8 +53512,8 @@
     get [dartx.rotationRate]() {
       return this.rotationRate;
     }
-    [dartx.initDeviceMotionEvent](type, bubbles, cancelable, acceleration, accelerationIncludingGravity, rotationRate, interval) {
-      return this.initDeviceMotionEvent(type, bubbles, cancelable, acceleration, accelerationIncludingGravity, rotationRate, interval);
+    [dartx.initDeviceMotionEvent](...args) {
+      return this.initDeviceMotionEvent.apply(this, args);
     }
   };
   dart.setSignature(html$.DeviceMotionEvent, {
@@ -53561,8 +53561,8 @@
     get [dartx.gamma]() {
       return this.gamma;
     }
-    [_initDeviceOrientationEvent](type, bubbles, cancelable, alpha, beta, gamma, absolute) {
-      return this.initDeviceOrientationEvent(type, bubbles, cancelable, alpha, beta, gamma, absolute);
+    [_initDeviceOrientationEvent](...args) {
+      return this.initDeviceOrientationEvent.apply(this, args);
     }
   };
   dart.setSignature(html$.DeviceOrientationEvent, {
@@ -53635,14 +53635,14 @@
     set [dartx.returnValue](value) {
       this.returnValue = value;
     }
-    [dartx.close](returnValue) {
-      return this.close(returnValue);
+    [dartx.close](...args) {
+      return this.close.apply(this, args);
     }
-    [dartx.show]() {
-      return this.show();
+    [dartx.show](...args) {
+      return this.show.apply(this, args);
     }
-    [dartx.showModal]() {
-      return this.showModal();
+    [dartx.showModal](...args) {
+      return this.showModal.apply(this, args);
     }
   };
   dart.defineNamedConstructor(html$.DialogElement, 'created');
@@ -53712,8 +53712,8 @@
     get [dartx.name]() {
       return this.name;
     }
-    [_copyTo](parent, opts) {
-      return this.copyTo(parent, opts);
+    [_copyTo](...args) {
+      return this.copyTo.apply(this, args);
     }
     [dartx.copyTo](parent, opts) {
       let name = opts && 'name' in opts ? opts.name : null;
@@ -53725,8 +53725,8 @@
         }, FileErrorTovoid())});
       return completer.future;
     }
-    [_getMetadata](successCallback, errorCallback) {
-      return this.getMetadata(successCallback, errorCallback);
+    [_getMetadata](...args) {
+      return this.getMetadata.apply(this, args);
     }
     [dartx.getMetadata]() {
       let completer = CompleterOfMetadata().new();
@@ -53737,8 +53737,8 @@
       }, FileErrorTovoid()));
       return completer.future;
     }
-    [_getParent](successCallback, errorCallback) {
-      return this.getParent(successCallback, errorCallback);
+    [_getParent](...args) {
+      return this.getParent.apply(this, args);
     }
     [dartx.getParent]() {
       let completer = CompleterOfEntry().new();
@@ -53749,8 +53749,8 @@
       }, FileErrorTovoid()));
       return completer.future;
     }
-    [_moveTo](parent, opts) {
-      return this.moveTo(parent, opts);
+    [_moveTo](...args) {
+      return this.moveTo.apply(this, args);
     }
     [dartx.moveTo](parent, opts) {
       let name = opts && 'name' in opts ? opts.name : null;
@@ -53762,8 +53762,8 @@
         }, FileErrorTovoid())});
       return completer.future;
     }
-    [_remove$](successCallback, errorCallback) {
-      return this.remove(successCallback, errorCallback);
+    [_remove$](...args) {
+      return this.remove.apply(this, args);
     }
     [dartx.remove]() {
       let completer = async.Completer.new();
@@ -53774,8 +53774,8 @@
       }, FileErrorTovoid()));
       return completer.future;
     }
-    [dartx.toUrl]() {
-      return this.toURL();
+    [dartx.toUrl](...args) {
+      return this.toURL.apply(this, args);
     }
   };
   dart.setSignature(html$.Entry, {
@@ -53828,8 +53828,8 @@
     static _() {
       dart.throw(new core.UnsupportedError("Not supported"));
     }
-    [dartx.createReader]() {
-      return this.createReader();
+    [dartx.createReader](...args) {
+      return this.createReader.apply(this, args);
     }
     [__getDirectory](path, opts) {
       let options = opts && 'options' in opts ? opts.options : null;
@@ -53853,17 +53853,17 @@
       this[__getDirectory_4](path);
       return;
     }
-    [__getDirectory_1](path, options, successCallback, errorCallback) {
-      return this.getDirectory(path, options, successCallback, errorCallback);
+    [__getDirectory_1](...args) {
+      return this.getDirectory.apply(this, args);
     }
-    [__getDirectory_2](path, options, successCallback) {
-      return this.getDirectory(path, options, successCallback);
+    [__getDirectory_2](...args) {
+      return this.getDirectory.apply(this, args);
     }
-    [__getDirectory_3](path, options) {
-      return this.getDirectory(path, options);
+    [__getDirectory_3](...args) {
+      return this.getDirectory.apply(this, args);
     }
-    [__getDirectory_4](path) {
-      return this.getDirectory(path);
+    [__getDirectory_4](...args) {
+      return this.getDirectory.apply(this, args);
     }
     [_getDirectory](path, opts) {
       let options = opts && 'options' in opts ? opts.options : null;
@@ -53897,17 +53897,17 @@
       this[__getFile_4](path);
       return;
     }
-    [__getFile_1](path, options, successCallback, errorCallback) {
-      return this.getFile(path, options, successCallback, errorCallback);
+    [__getFile_1](...args) {
+      return this.getFile.apply(this, args);
     }
-    [__getFile_2](path, options, successCallback) {
-      return this.getFile(path, options, successCallback);
+    [__getFile_2](...args) {
+      return this.getFile.apply(this, args);
     }
-    [__getFile_3](path, options) {
-      return this.getFile(path, options);
+    [__getFile_3](...args) {
+      return this.getFile.apply(this, args);
     }
-    [__getFile_4](path) {
-      return this.getFile(path);
+    [__getFile_4](...args) {
+      return this.getFile.apply(this, args);
     }
     [_getFile](path, opts) {
       let options = opts && 'options' in opts ? opts.options : null;
@@ -53919,8 +53919,8 @@
         }, FileErrorTovoid())});
       return completer.future;
     }
-    [_removeRecursively](successCallback, errorCallback) {
-      return this.removeRecursively(successCallback, errorCallback);
+    [_removeRecursively](...args) {
+      return this.removeRecursively.apply(this, args);
     }
     [dartx.removeRecursively]() {
       let completer = async.Completer.new();
@@ -53965,8 +53965,8 @@
     static _() {
       dart.throw(new core.UnsupportedError("Not supported"));
     }
-    [_readEntries](successCallback, errorCallback) {
-      return this.readEntries(successCallback, errorCallback);
+    [_readEntries](...args) {
+      return this.readEntries.apply(this, args);
     }
     [dartx.readEntries]() {
       let completer = CompleterOfListOfEntry().new();
@@ -54263,93 +54263,93 @@
     get [_webkitVisibilityState]() {
       return this.webkitVisibilityState;
     }
-    [dartx.adoptNode](node) {
-      return this.adoptNode(node);
+    [dartx.adoptNode](...args) {
+      return this.adoptNode.apply(this, args);
     }
-    [_caretRangeFromPoint](x, y) {
-      return this.caretRangeFromPoint(x, y);
+    [_caretRangeFromPoint](...args) {
+      return this.caretRangeFromPoint.apply(this, args);
     }
-    [dartx.createDocumentFragment]() {
-      return this.createDocumentFragment();
+    [dartx.createDocumentFragment](...args) {
+      return this.createDocumentFragment.apply(this, args);
     }
-    [_createElement](localName_OR_tagName, typeExtension) {
-      return this.createElement(localName_OR_tagName, typeExtension);
+    [_createElement](...args) {
+      return this.createElement.apply(this, args);
     }
-    [_createElementNS](namespaceURI, qualifiedName, typeExtension) {
-      return this.createElementNS(namespaceURI, qualifiedName, typeExtension);
+    [_createElementNS](...args) {
+      return this.createElementNS.apply(this, args);
     }
-    [_createEvent](eventType) {
-      return this.createEvent(eventType);
+    [_createEvent](...args) {
+      return this.createEvent.apply(this, args);
     }
-    [dartx.createRange]() {
-      return this.createRange();
+    [dartx.createRange](...args) {
+      return this.createRange.apply(this, args);
     }
-    [_createTextNode](data) {
-      return this.createTextNode(data);
+    [_createTextNode](...args) {
+      return this.createTextNode.apply(this, args);
     }
     [_createTouch](window, target, identifier, pageX, pageY, screenX, screenY, radiusX, radiusY, rotationAngle, force) {
       let target_1 = html$._convertDartToNative_EventTarget(target);
       return this[_createTouch_1](window, target_1, identifier, pageX, pageY, screenX, screenY, radiusX, radiusY, rotationAngle, force);
     }
-    [_createTouch_1](window, target, identifier, pageX, pageY, screenX, screenY, radiusX, radiusY, rotationAngle, force) {
-      return this.createTouch(window, target, identifier, pageX, pageY, screenX, screenY, radiusX, radiusY, rotationAngle, force);
+    [_createTouch_1](...args) {
+      return this.createTouch.apply(this, args);
     }
-    [_createTouchList](touches) {
-      return this.createTouchList(touches);
+    [_createTouchList](...args) {
+      return this.createTouchList.apply(this, args);
     }
-    [_elementFromPoint](x, y) {
-      return this.elementFromPoint(x, y);
+    [_elementFromPoint](...args) {
+      return this.elementFromPoint.apply(this, args);
     }
-    [dartx.elementsFromPoint](x, y) {
-      return this.elementsFromPoint(x, y);
+    [dartx.elementsFromPoint](...args) {
+      return this.elementsFromPoint.apply(this, args);
     }
-    [dartx.execCommand](commandId, showUI, value) {
-      return this.execCommand(commandId, showUI, value);
+    [dartx.execCommand](...args) {
+      return this.execCommand.apply(this, args);
     }
-    [dartx.exitFullscreen]() {
-      return this.exitFullscreen();
+    [dartx.exitFullscreen](...args) {
+      return this.exitFullscreen.apply(this, args);
     }
-    [dartx.exitPointerLock]() {
-      return this.exitPointerLock();
+    [dartx.exitPointerLock](...args) {
+      return this.exitPointerLock.apply(this, args);
     }
-    [_getCssCanvasContext](contextId, name, width, height) {
-      return this.getCSSCanvasContext(contextId, name, width, height);
+    [_getCssCanvasContext](...args) {
+      return this.getCSSCanvasContext.apply(this, args);
     }
-    [dartx.getElementsByClassName](classNames) {
-      return this.getElementsByClassName(classNames);
+    [dartx.getElementsByClassName](...args) {
+      return this.getElementsByClassName.apply(this, args);
     }
-    [dartx.getElementsByName](elementName) {
-      return this.getElementsByName(elementName);
+    [dartx.getElementsByName](...args) {
+      return this.getElementsByName.apply(this, args);
     }
-    [dartx.getElementsByTagName](localName) {
-      return this.getElementsByTagName(localName);
+    [dartx.getElementsByTagName](...args) {
+      return this.getElementsByTagName.apply(this, args);
     }
-    [dartx.importNode](node, deep) {
-      return this.importNode(node, deep);
+    [dartx.importNode](...args) {
+      return this.importNode.apply(this, args);
     }
-    [dartx.queryCommandEnabled](commandId) {
-      return this.queryCommandEnabled(commandId);
+    [dartx.queryCommandEnabled](...args) {
+      return this.queryCommandEnabled.apply(this, args);
     }
-    [dartx.queryCommandIndeterm](commandId) {
-      return this.queryCommandIndeterm(commandId);
+    [dartx.queryCommandIndeterm](...args) {
+      return this.queryCommandIndeterm.apply(this, args);
     }
-    [dartx.queryCommandState](commandId) {
-      return this.queryCommandState(commandId);
+    [dartx.queryCommandState](...args) {
+      return this.queryCommandState.apply(this, args);
     }
-    [dartx.queryCommandSupported](commandId) {
-      return this.queryCommandSupported(commandId);
+    [dartx.queryCommandSupported](...args) {
+      return this.queryCommandSupported.apply(this, args);
     }
-    [dartx.queryCommandValue](commandId) {
-      return this.queryCommandValue(commandId);
+    [dartx.queryCommandValue](...args) {
+      return this.queryCommandValue.apply(this, args);
     }
-    [dartx.transformDocumentToTreeView](noStyleMessage) {
-      return this.transformDocumentToTreeView(noStyleMessage);
+    [dartx.transformDocumentToTreeView](...args) {
+      return this.transformDocumentToTreeView.apply(this, args);
     }
-    [_webkitExitFullscreen]() {
-      return this.webkitExitFullscreen();
+    [_webkitExitFullscreen](...args) {
+      return this.webkitExitFullscreen.apply(this, args);
     }
-    [dartx.getElementById](elementId) {
-      return this.getElementById(elementId);
+    [dartx.getElementById](...args) {
+      return this.getElementById.apply(this, args);
     }
     get [_childElementCount]() {
       return this.childElementCount;
@@ -54363,11 +54363,11 @@
     get [_lastElementChild]() {
       return this.lastElementChild;
     }
-    [dartx.querySelector](selectors) {
-      return this.querySelector(selectors);
+    [dartx.querySelector](...args) {
+      return this.querySelector.apply(this, args);
     }
-    [_querySelectorAll](selectors) {
-      return this.querySelectorAll(selectors);
+    [_querySelectorAll](...args) {
+      return this.querySelectorAll.apply(this, args);
     }
     get [dartx.onAbort]() {
       return html$.Element.abortEvent.forTarget(this);
@@ -54902,8 +54902,8 @@
     static _() {
       dart.throw(new core.UnsupportedError("Not supported"));
     }
-    [dartx.getElementById](elementId) {
-      return this.getElementById(elementId);
+    [dartx.getElementById](...args) {
+      return this.getElementById.apply(this, args);
     }
     get [_childElementCount]() {
       return this.childElementCount;
@@ -54914,11 +54914,11 @@
     get [_lastElementChild]() {
       return this.lastElementChild;
     }
-    [dartx.querySelector](selectors) {
-      return this.querySelector(selectors);
+    [dartx.querySelector](...args) {
+      return this.querySelector.apply(this, args);
     }
-    [_querySelectorAll](selectors) {
-      return this.querySelectorAll(selectors);
+    [_querySelectorAll](...args) {
+      return this.querySelectorAll.apply(this, args);
     }
   };
   html$.DocumentFragment[dart.implements] = () => [html$.NonElementParentNode, html$.ParentNode];
@@ -55083,17 +55083,17 @@
     static _() {
       dart.throw(new core.UnsupportedError("Not supported"));
     }
-    [dartx.createDocument](namespaceURI, qualifiedName, doctype) {
-      return this.createDocument(namespaceURI, qualifiedName, doctype);
+    [dartx.createDocument](...args) {
+      return this.createDocument.apply(this, args);
     }
-    [dartx.createDocumentType](qualifiedName, publicId, systemId) {
-      return this.createDocumentType(qualifiedName, publicId, systemId);
+    [dartx.createDocumentType](...args) {
+      return this.createDocumentType.apply(this, args);
     }
-    [dartx.createHtmlDocument](title) {
-      return this.createHTMLDocument(title);
+    [dartx.createHtmlDocument](...args) {
+      return this.createHTMLDocument.apply(this, args);
     }
-    [dartx.hasFeature]() {
-      return this.hasFeature();
+    [dartx.hasFeature](...args) {
+      return this.hasFeature.apply(this, args);
     }
   };
   dart.setSignature(html$.DomImplementation, {
@@ -55113,8 +55113,8 @@
     static _() {
       dart.throw(new core.UnsupportedError("Not supported"));
     }
-    [dartx.next](value) {
-      return this.next(value);
+    [dartx.next](...args) {
+      return this.next.apply(this, args);
     }
   };
   dart.setSignature(html$.DomIterator, {
@@ -55231,26 +55231,26 @@
     get [dartx.m44]() {
       return this.m44;
     }
-    [dartx.multiply](other) {
-      return this.multiply(other);
+    [dartx.multiply](...args) {
+      return this.multiply.apply(this, args);
     }
-    [dartx.scale](scale, originX, originY) {
-      return this.scale(scale, originX, originY);
+    [dartx.scale](...args) {
+      return this.scale.apply(this, args);
     }
-    [dartx.scale3d](scale, originX, originY, originZ) {
-      return this.scale3d(scale, originX, originY, originZ);
+    [dartx.scale3d](...args) {
+      return this.scale3d.apply(this, args);
     }
-    [dartx.scaleNonUniform](scaleX, scaleY, scaleZn, originX, originY, originZ) {
-      return this.scaleNonUniform(scaleX, scaleY, scaleZn, originX, originY, originZ);
+    [dartx.scaleNonUniform](...args) {
+      return this.scaleNonUniform.apply(this, args);
     }
-    [dartx.toFloat32Array]() {
-      return this.toFloat32Array();
+    [dartx.toFloat32Array](...args) {
+      return this.toFloat32Array.apply(this, args);
     }
-    [dartx.toFloat64Array]() {
-      return this.toFloat64Array();
+    [dartx.toFloat64Array](...args) {
+      return this.toFloat64Array.apply(this, args);
     }
-    [dartx.translate](tx, ty, tz) {
-      return this.translate(tx, ty, tz);
+    [dartx.translate](...args) {
+      return this.translate.apply(this, args);
     }
   };
   dart.setSignature(html$.DomMatrixReadOnly, {
@@ -55496,23 +55496,23 @@
     set [dartx.m44](value) {
       this.m44 = value;
     }
-    [dartx.multiplySelf](other) {
-      return this.multiplySelf(other);
+    [dartx.multiplySelf](...args) {
+      return this.multiplySelf.apply(this, args);
     }
-    [dartx.preMultiplySelf](other) {
-      return this.preMultiplySelf(other);
+    [dartx.preMultiplySelf](...args) {
+      return this.preMultiplySelf.apply(this, args);
     }
-    [dartx.scale3dSelf](scale, originX, originY, originZ) {
-      return this.scale3dSelf(scale, originX, originY, originZ);
+    [dartx.scale3dSelf](...args) {
+      return this.scale3dSelf.apply(this, args);
     }
-    [dartx.scaleNonUniformSelf](scaleX, scaleY, scaleZ, originX, originY, originZ) {
-      return this.scaleNonUniformSelf(scaleX, scaleY, scaleZ, originX, originY, originZ);
+    [dartx.scaleNonUniformSelf](...args) {
+      return this.scaleNonUniformSelf.apply(this, args);
     }
-    [dartx.scaleSelf](scale, originX, originY) {
-      return this.scaleSelf(scale, originX, originY);
+    [dartx.scaleSelf](...args) {
+      return this.scaleSelf.apply(this, args);
     }
-    [dartx.translateSelf](tx, ty, tz) {
-      return this.translateSelf(tx, ty, tz);
+    [dartx.translateSelf](...args) {
+      return this.translateSelf.apply(this, args);
     }
   };
   dart.setSignature(html$.DomMatrix, {
@@ -55572,8 +55572,8 @@
     static _create_1() {
       return new DOMParser();
     }
-    [dartx.parseFromString](str, type) {
-      return this.parseFromString(str, type);
+    [dartx.parseFromString](...args) {
+      return this.parseFromString.apply(this, args);
     }
   };
   dart.setSignature(html$.DomParser, {
@@ -55892,20 +55892,20 @@
     get [dartx.length]() {
       return this.length;
     }
-    [dartx.add](tokens) {
-      return this.add(tokens);
+    [dartx.add](...args) {
+      return this.add.apply(this, args);
     }
-    [dartx.contains](token) {
-      return this.contains(token);
+    [dartx.contains](...args) {
+      return this.contains.apply(this, args);
     }
-    [dartx.item](index) {
-      return this.item(index);
+    [dartx.item](...args) {
+      return this.item.apply(this, args);
     }
-    [dartx.remove](tokens) {
-      return this.remove(tokens);
+    [dartx.remove](...args) {
+      return this.remove.apply(this, args);
     }
-    [dartx.toggle](token, force) {
-      return this.toggle(token, force);
+    [dartx.toggle](...args) {
+      return this.toggle.apply(this, args);
     }
   };
   dart.setSignature(html$.DomTokenList, {
@@ -56130,11 +56130,11 @@
     [dartx.elementAt](index) {
       return this[dartx._get](index);
     }
-    [__getter__](index) {
-      return this.__getter__(index);
+    [__getter__](...args) {
+      return this.__getter__.apply(this, args);
     }
-    [dartx.item](index) {
-      return this.item(index);
+    [dartx.item](...args) {
+      return this.item.apply(this, args);
     }
   };
   html$.DomStringList[dart.implements] = () => [ListOfString()];
@@ -56858,11 +56858,11 @@
     set [dartx.width](value) {
       this.width = value;
     }
-    [__getter__](index_OR_name) {
-      return this.__getter__(index_OR_name);
+    [__getter__](...args) {
+      return this.__getter__.apply(this, args);
     }
-    [__setter__](index_OR_name, value) {
-      return this.__setter__(index_OR_name, value);
+    [__setter__](...args) {
+      return this.__setter__.apply(this, args);
     }
   };
   dart.defineNamedConstructor(html$.EmbedElement, 'created');
@@ -56990,8 +56990,8 @@
     get [dartx.withCredentials]() {
       return this.withCredentials;
     }
-    [dartx.close]() {
-      return this.close();
+    [dartx.close](...args) {
+      return this.close.apply(this, args);
     }
     get [dartx.onError]() {
       return html$.EventSource.errorEvent.forTarget(this);
@@ -57106,8 +57106,8 @@
     static _create_2(type) {
       return new ExtendableEvent(type);
     }
-    [dartx.waitUntil](value) {
-      return this.waitUntil(value);
+    [dartx.waitUntil](...args) {
+      return this.waitUntil.apply(this, args);
     }
   };
   dart.setSignature(html$.ExtendableEvent, {
@@ -57187,8 +57187,8 @@
     get [dartx.request]() {
       return this.request;
     }
-    [dartx.respondWith](value) {
-      return this.respondWith(value);
+    [dartx.respondWith](...args) {
+      return this.respondWith.apply(this, args);
     }
   };
   dart.setSignature(html$.FetchEvent, {
@@ -57269,14 +57269,14 @@
     get [dartx.willValidate]() {
       return this.willValidate;
     }
-    [dartx.checkValidity]() {
-      return this.checkValidity();
+    [dartx.checkValidity](...args) {
+      return this.checkValidity.apply(this, args);
     }
-    [dartx.reportValidity]() {
-      return this.reportValidity();
+    [dartx.reportValidity](...args) {
+      return this.reportValidity.apply(this, args);
     }
-    [dartx.setCustomValidity](error) {
-      return this.setCustomValidity(error);
+    [dartx.setCustomValidity](...args) {
+      return this.setCustomValidity.apply(this, args);
     }
   };
   dart.defineNamedConstructor(html$.FieldSetElement, 'created');
@@ -57374,8 +57374,8 @@
     static _() {
       dart.throw(new core.UnsupportedError("Not supported"));
     }
-    [_createWriter](successCallback, errorCallback) {
-      return this.createWriter(successCallback, errorCallback);
+    [_createWriter](...args) {
+      return this.createWriter.apply(this, args);
     }
     [dartx.createWriter]() {
       let completer = CompleterOfFileWriter().new();
@@ -57386,8 +57386,8 @@
       }, FileErrorTovoid()));
       return completer.future;
     }
-    [_file](successCallback, errorCallback) {
-      return this.file(successCallback, errorCallback);
+    [_file](...args) {
+      return this.file.apply(this, args);
     }
     [dartx.file]() {
       let completer = CompleterOfFile().new();
@@ -57504,8 +57504,8 @@
     [dartx.elementAt](index) {
       return this[dartx._get](index);
     }
-    [dartx.item](index) {
-      return this.item(index);
+    [dartx.item](...args) {
+      return this.item.apply(this, args);
     }
   };
   html$.FileList[dart.implements] = () => [_js_helper.JavaScriptIndexingBehavior, ListOfFile()];
@@ -57564,17 +57564,17 @@
     get [dartx.readyState]() {
       return this.readyState;
     }
-    [dartx.abort]() {
-      return this.abort();
+    [dartx.abort](...args) {
+      return this.abort.apply(this, args);
     }
-    [dartx.readAsArrayBuffer](blob) {
-      return this.readAsArrayBuffer(blob);
+    [dartx.readAsArrayBuffer](...args) {
+      return this.readAsArrayBuffer.apply(this, args);
     }
-    [dartx.readAsDataUrl](blob) {
-      return this.readAsDataURL(blob);
+    [dartx.readAsDataUrl](...args) {
+      return this.readAsDataURL.apply(this, args);
     }
-    [dartx.readAsText](blob, label) {
-      return this.readAsText(blob, label);
+    [dartx.readAsText](...args) {
+      return this.readAsText.apply(this, args);
     }
     get [dartx.onAbort]() {
       return html$.FileReader.abortEvent.forTarget(this);
@@ -57733,17 +57733,17 @@
     get [dartx.readyState]() {
       return this.readyState;
     }
-    [dartx.abort]() {
-      return this.abort();
+    [dartx.abort](...args) {
+      return this.abort.apply(this, args);
     }
-    [dartx.seek](position) {
-      return this.seek(position);
+    [dartx.seek](...args) {
+      return this.seek.apply(this, args);
     }
-    [dartx.truncate](size) {
-      return this.truncate(size);
+    [dartx.truncate](...args) {
+      return this.truncate.apply(this, args);
     }
-    [dartx.write](data) {
-      return this.write(data);
+    [dartx.write](...args) {
+      return this.write.apply(this, args);
     }
     get [dartx.onAbort]() {
       return html$.FileWriter.abortEvent.forTarget(this);
@@ -57944,8 +57944,8 @@
     set [dartx.weight](value) {
       this.weight = value;
     }
-    [dartx.load]() {
-      return this.load();
+    [dartx.load](...args) {
+      return this.load.apply(this, args);
     }
   };
   dart.setSignature(html$.FontFace, {
@@ -57992,23 +57992,23 @@
     get [dartx.status]() {
       return this.status;
     }
-    [dartx.add](fontFace) {
-      return this.add(fontFace);
+    [dartx.add](...args) {
+      return this.add.apply(this, args);
     }
-    [dartx.check](font, text) {
-      return this.check(font, text);
+    [dartx.check](...args) {
+      return this.check.apply(this, args);
     }
-    [dartx.clear]() {
-      return this.clear();
+    [dartx.clear](...args) {
+      return this.clear.apply(this, args);
     }
-    [dartx.delete](fontFace) {
-      return this.delete(fontFace);
+    [dartx.delete](...args) {
+      return this.delete.apply(this, args);
     }
-    [dartx.forEach](callback, thisArg) {
-      return this.forEach(callback, thisArg);
+    [dartx.forEach](...args) {
+      return this.forEach.apply(this, args);
     }
-    [dartx.has](fontFace) {
-      return this.has(fontFace);
+    [dartx.has](...args) {
+      return this.has.apply(this, args);
     }
   };
   dart.setSignature(html$.FontFaceSet, {
@@ -58073,26 +58073,26 @@
     static get supported() {
       return !!window.FormData;
     }
-    [dartx.append](name, value) {
-      return this.append(name, value);
+    [dartx.append](...args) {
+      return this.append.apply(this, args);
     }
-    [dartx.appendBlob](name, value, filename) {
-      return this.append(name, value, filename);
+    [dartx.appendBlob](...args) {
+      return this.append.apply(this, args);
     }
-    [dartx.delete](name) {
-      return this.delete(name);
+    [dartx.delete](...args) {
+      return this.delete.apply(this, args);
     }
-    [dartx.get](name) {
-      return this.get(name);
+    [dartx.get](...args) {
+      return this.get.apply(this, args);
     }
-    [dartx.getAll](name) {
-      return this.getAll(name);
+    [dartx.getAll](...args) {
+      return this.getAll.apply(this, args);
     }
-    [dartx.has](name) {
-      return this.has(name);
+    [dartx.has](...args) {
+      return this.has.apply(this, args);
     }
-    [dartx.set](name, value, filename) {
-      return this.set(name, value, filename);
+    [dartx.set](...args) {
+      return this.set.apply(this, args);
     }
   };
   dart.setSignature(html$.FormData, {
@@ -58213,31 +58213,31 @@
     set [dartx.target](value) {
       this.target = value;
     }
-    [__getter__](name) {
-      return this.__getter__(name);
+    [__getter__](...args) {
+      return this.__getter__.apply(this, args);
     }
-    [dartx.checkValidity]() {
-      return this.checkValidity();
+    [dartx.checkValidity](...args) {
+      return this.checkValidity.apply(this, args);
     }
-    [dartx.item](index) {
-      return this.item(index);
+    [dartx.item](...args) {
+      return this.item.apply(this, args);
     }
-    [dartx.reportValidity]() {
-      return this.reportValidity();
+    [dartx.reportValidity](...args) {
+      return this.reportValidity.apply(this, args);
     }
     [dartx.requestAutocomplete](details) {
       let details_1 = html_common.convertDartToNative_Dictionary(details);
       this[_requestAutocomplete_1](details_1);
       return;
     }
-    [_requestAutocomplete_1](details) {
-      return this.requestAutocomplete(details);
+    [_requestAutocomplete_1](...args) {
+      return this.requestAutocomplete.apply(this, args);
     }
-    [dartx.reset]() {
-      return this.reset();
+    [dartx.reset](...args) {
+      return this.reset.apply(this, args);
     }
-    [dartx.submit]() {
-      return this.submit();
+    [dartx.submit](...args) {
+      return this.submit.apply(this, args);
     }
   };
   dart.defineNamedConstructor(html$.FormElement, 'created');
@@ -58390,14 +58390,14 @@
     static _() {
       dart.throw(new core.UnsupportedError("Not supported"));
     }
-    [dartx.getRegisteredRegions]() {
-      return this.getRegisteredRegions();
+    [dartx.getRegisteredRegions](...args) {
+      return this.getRegisteredRegions.apply(this, args);
     }
-    [dartx.registerRegion](region) {
-      return this.registerRegion(region);
+    [dartx.registerRegion](...args) {
+      return this.registerRegion.apply(this, args);
     }
-    [dartx.unregisterRegion](regionId) {
-      return this.unregisterRegion(regionId);
+    [dartx.unregisterRegion](...args) {
+      return this.unregisterRegion.apply(this, args);
     }
   };
   dart.setSignature(html$.Geofencing, {
@@ -58517,8 +58517,8 @@
     static _() {
       dart.throw(new core.UnsupportedError("Not supported"));
     }
-    [_clearWatch](watchID) {
-      return this.clearWatch(watchID);
+    [_clearWatch](...args) {
+      return this.clearWatch.apply(this, args);
     }
     [_getCurrentPosition](successCallback, errorCallback, options) {
       if (errorCallback === void 0) errorCallback = null;
@@ -58535,14 +58535,14 @@
       this[_getCurrentPosition_3](successCallback);
       return;
     }
-    [_getCurrentPosition_1](successCallback, errorCallback, options) {
-      return this.getCurrentPosition(successCallback, errorCallback, options);
+    [_getCurrentPosition_1](...args) {
+      return this.getCurrentPosition.apply(this, args);
     }
-    [_getCurrentPosition_2](successCallback, errorCallback) {
-      return this.getCurrentPosition(successCallback, errorCallback);
+    [_getCurrentPosition_2](...args) {
+      return this.getCurrentPosition.apply(this, args);
     }
-    [_getCurrentPosition_3](successCallback) {
-      return this.getCurrentPosition(successCallback);
+    [_getCurrentPosition_3](...args) {
+      return this.getCurrentPosition.apply(this, args);
     }
     [_watchPosition](successCallback, errorCallback, options) {
       if (errorCallback === void 0) errorCallback = null;
@@ -58556,14 +58556,14 @@
       }
       return this[_watchPosition_3](successCallback);
     }
-    [_watchPosition_1](successCallback, errorCallback, options) {
-      return this.watchPosition(successCallback, errorCallback, options);
+    [_watchPosition_1](...args) {
+      return this.watchPosition.apply(this, args);
     }
-    [_watchPosition_2](successCallback, errorCallback) {
-      return this.watchPosition(successCallback, errorCallback);
+    [_watchPosition_2](...args) {
+      return this.watchPosition.apply(this, args);
     }
-    [_watchPosition_3](successCallback) {
-      return this.watchPosition(successCallback);
+    [_watchPosition_3](...args) {
+      return this.watchPosition.apply(this, args);
     }
   };
   dart.setSignature(html$.Geolocation, {
@@ -59234,8 +59234,8 @@
     get [dartx.oldUrl]() {
       return this.oldURL;
     }
-    [_initHashChangeEvent](type, canBubble, cancelable, oldURL, newURL) {
-      return this.initHashChangeEvent(type, canBubble, cancelable, oldURL, newURL);
+    [_initHashChangeEvent](...args) {
+      return this.initHashChangeEvent.apply(this, args);
     }
   };
   dart.setSignature(html$.HashChangeEvent, {
@@ -59402,14 +59402,14 @@
     get [_get_state]() {
       return this.state;
     }
-    [dartx.back]() {
-      return this.back();
+    [dartx.back](...args) {
+      return this.back.apply(this, args);
     }
-    [dartx.forward]() {
-      return this.forward();
+    [dartx.forward](...args) {
+      return this.forward.apply(this, args);
     }
-    [dartx.go](delta) {
-      return this.go(delta);
+    [dartx.go](...args) {
+      return this.go.apply(this, args);
     }
     [dartx.pushState](data, title, url, options) {
       if (options === void 0) options = null;
@@ -59423,11 +59423,11 @@
       this[_pushState_2](data_1, title, url);
       return;
     }
-    [_pushState_1](data, title, url, options) {
-      return this.pushState(data, title, url, options);
+    [_pushState_1](...args) {
+      return this.pushState.apply(this, args);
     }
-    [_pushState_2](data, title, url) {
-      return this.pushState(data, title, url);
+    [_pushState_2](...args) {
+      return this.pushState.apply(this, args);
     }
     [dartx.replaceState](data, title, url, options) {
       if (options === void 0) options = null;
@@ -59441,11 +59441,11 @@
       this[_replaceState_2](data_1, title, url);
       return;
     }
-    [_replaceState_1](data, title, url, options) {
-      return this.replaceState(data, title, url, options);
+    [_replaceState_1](...args) {
+      return this.replaceState.apply(this, args);
     }
-    [_replaceState_2](data, title, url) {
-      return this.replaceState(data, title, url);
+    [_replaceState_2](...args) {
+      return this.replaceState.apply(this, args);
     }
   };
   html$.History[dart.implements] = () => [html$.HistoryBase];
@@ -59510,11 +59510,11 @@
     static _() {
       dart.throw(new core.UnsupportedError("Not supported"));
     }
-    [dartx.getEyeParameters](whichEye) {
-      return this.getEyeParameters(whichEye);
+    [dartx.getEyeParameters](...args) {
+      return this.getEyeParameters.apply(this, args);
     }
-    [dartx.setFieldOfView](leftFov, rightFov) {
-      return this.setFieldOfView(leftFov, rightFov);
+    [dartx.setFieldOfView](...args) {
+      return this.setFieldOfView.apply(this, args);
     }
   };
   dart.setSignature(html$.HmdvrDevice, {
@@ -59579,11 +59579,11 @@
     [dartx.elementAt](index) {
       return this[dartx._get](index);
     }
-    [dartx.item](index) {
-      return this.item(index);
+    [dartx.item](...args) {
+      return this.item.apply(this, args);
     }
-    [dartx.namedItem](name) {
-      return this.namedItem(name);
+    [dartx.namedItem](...args) {
+      return this.namedItem.apply(this, args);
     }
   };
   html$.HtmlCollection[dart.implements] = () => [_js_helper.JavaScriptIndexingBehavior, ListOfNode()];
@@ -59749,11 +59749,11 @@
     static _() {
       dart.throw(new core.UnsupportedError("Not supported"));
     }
-    [dartx.item](index) {
-      return this.item(index);
+    [dartx.item](...args) {
+      return this.item.apply(this, args);
     }
-    [dartx.namedItem](name) {
-      return this.namedItem(name);
+    [dartx.namedItem](...args) {
+      return this.namedItem.apply(this, args);
     }
   };
   dart.setSignature(html$.HtmlFormControlsCollection, {
@@ -59785,8 +59785,8 @@
     static _() {
       dart.throw(new core.UnsupportedError("Not supported"));
     }
-    [_item](index) {
-      return this.item(index);
+    [_item](...args) {
+      return this.item.apply(this, args);
     }
   };
   dart.setSignature(html$.HtmlOptionsCollection, {
@@ -60039,8 +60039,8 @@
       }
       return headers;
     }
-    [dartx.open](method, url, opts) {
-      return this.open(method, url, opts);
+    [dartx.open](...args) {
+      return this.open.apply(this, args);
     }
     static _() {
       dart.throw(new core.UnsupportedError("Not supported"));
@@ -60096,23 +60096,23 @@
     set [dartx.withCredentials](value) {
       this.withCredentials = value;
     }
-    [dartx.abort]() {
-      return this.abort();
+    [dartx.abort](...args) {
+      return this.abort.apply(this, args);
     }
-    [dartx.getAllResponseHeaders]() {
-      return this.getAllResponseHeaders();
+    [dartx.getAllResponseHeaders](...args) {
+      return this.getAllResponseHeaders.apply(this, args);
     }
-    [dartx.getResponseHeader](name) {
-      return this.getResponseHeader(name);
+    [dartx.getResponseHeader](...args) {
+      return this.getResponseHeader.apply(this, args);
     }
-    [dartx.overrideMimeType](mime) {
-      return this.overrideMimeType(mime);
+    [dartx.overrideMimeType](...args) {
+      return this.overrideMimeType.apply(this, args);
     }
-    [dartx.send](body_OR_data) {
-      return this.send(body_OR_data);
+    [dartx.send](...args) {
+      return this.send.apply(this, args);
     }
-    [dartx.setRequestHeader](name, value) {
-      return this.setRequestHeader(name, value);
+    [dartx.setRequestHeader](...args) {
+      return this.setRequestHeader.apply(this, args);
     }
     get [dartx.onReadyStateChange]() {
       return html$.HttpRequest.readyStateChangeEvent.forTarget(this);
@@ -60514,8 +60514,8 @@
     static _() {
       dart.throw(new core.UnsupportedError("Not supported"));
     }
-    [dartx.inspect](objectId, hints) {
-      return this.inspect(objectId, hints);
+    [dartx.inspect](...args) {
+      return this.inspect.apply(this, args);
     }
   };
   dart.setSignature(html$.InjectedScriptHost, {
@@ -60978,29 +60978,29 @@
     get [dartx.willValidate]() {
       return this.willValidate;
     }
-    [dartx.checkValidity]() {
-      return this.checkValidity();
+    [dartx.checkValidity](...args) {
+      return this.checkValidity.apply(this, args);
     }
-    [dartx.reportValidity]() {
-      return this.reportValidity();
+    [dartx.reportValidity](...args) {
+      return this.reportValidity.apply(this, args);
     }
-    [dartx.select]() {
-      return this.select();
+    [dartx.select](...args) {
+      return this.select.apply(this, args);
     }
-    [dartx.setCustomValidity](error) {
-      return this.setCustomValidity(error);
+    [dartx.setCustomValidity](...args) {
+      return this.setCustomValidity.apply(this, args);
     }
-    [dartx.setRangeText](replacement, opts) {
-      return this.setRangeText(replacement, opts);
+    [dartx.setRangeText](...args) {
+      return this.setRangeText.apply(this, args);
     }
-    [dartx.setSelectionRange](start, end, direction) {
-      return this.setSelectionRange(start, end, direction);
+    [dartx.setSelectionRange](...args) {
+      return this.setSelectionRange.apply(this, args);
     }
-    [dartx.stepDown](n) {
-      return this.stepDown(n);
+    [dartx.stepDown](...args) {
+      return this.stepDown.apply(this, args);
     }
-    [dartx.stepUp](n) {
-      return this.stepUp(n);
+    [dartx.stepUp](...args) {
+      return this.stepUp.apply(this, args);
     }
   };
   dart.defineNamedConstructor(html$.InputElement, 'created');
@@ -62295,8 +62295,8 @@
     get [dartx.shiftKey]() {
       return this.shiftKey;
     }
-    [dartx.getModifierState](keyArg) {
-      return this.getModifierState(keyArg);
+    [dartx.getModifierState](...args) {
+      return this.getModifierState.apply(this, args);
     }
   };
   dart.setSignature(html$.KeyboardEvent, {
@@ -62471,14 +62471,14 @@
     get [dartx.willValidate]() {
       return this.willValidate;
     }
-    [dartx.checkValidity]() {
-      return this.checkValidity();
+    [dartx.checkValidity](...args) {
+      return this.checkValidity.apply(this, args);
     }
-    [dartx.reportValidity]() {
-      return this.reportValidity();
+    [dartx.reportValidity](...args) {
+      return this.reportValidity.apply(this, args);
     }
-    [dartx.setCustomValidity](error) {
-      return this.setCustomValidity(error);
+    [dartx.setCustomValidity](...args) {
+      return this.setCustomValidity.apply(this, args);
     }
   };
   dart.defineNamedConstructor(html$.KeygenElement, 'created');
@@ -62803,14 +62803,14 @@
     set [dartx.search](value) {
       this.search = value;
     }
-    [dartx.assign](url) {
-      return this.assign(url);
+    [dartx.assign](...args) {
+      return this.assign.apply(this, args);
     }
-    [dartx.reload]() {
-      return this.reload();
+    [dartx.reload](...args) {
+      return this.reload.apply(this, args);
     }
-    [dartx.replace](url) {
-      return this.replace(url);
+    [dartx.replace](...args) {
+      return this.replace.apply(this, args);
     }
     get [dartx.origin]() {
       if ("origin" in this) {
@@ -62957,14 +62957,14 @@
     set [dartx.volume](value) {
       this.volume = value;
     }
-    [dartx.pause]() {
-      return this.pause();
+    [dartx.pause](...args) {
+      return this.pause.apply(this, args);
     }
-    [dartx.play]() {
-      return this.play();
+    [dartx.play](...args) {
+      return this.play.apply(this, args);
     }
-    [dartx.unpause]() {
-      return this.unpause();
+    [dartx.unpause](...args) {
+      return this.unpause.apply(this, args);
     }
   };
   dart.setSignature(html$.MediaController, {
@@ -63036,15 +63036,15 @@
     static _() {
       dart.throw(new core.UnsupportedError("Not supported"));
     }
-    [dartx.enumerateDevices]() {
-      return this.enumerateDevices();
+    [dartx.enumerateDevices](...args) {
+      return this.enumerateDevices.apply(this, args);
     }
     [dartx.getUserMedia](options) {
       let options_1 = html_common.convertDartToNative_Dictionary(options);
       return this[_getUserMedia_1](options_1);
     }
-    [_getUserMedia_1](options) {
-      return this.getUserMedia(options);
+    [_getUserMedia_1](...args) {
+      return this.getUserMedia.apply(this, args);
     }
   };
   dart.setSignature(html$.MediaDevices, {
@@ -63306,20 +63306,20 @@
     get [dartx.sessionId]() {
       return this.sessionId;
     }
-    [dartx.close]() {
-      return this.close();
+    [dartx.close](...args) {
+      return this.close.apply(this, args);
     }
-    [dartx.generateRequest](initDataType, initData) {
-      return this.generateRequest(initDataType, initData);
+    [dartx.generateRequest](...args) {
+      return this.generateRequest.apply(this, args);
     }
-    [dartx.load](sessionId) {
-      return this.load(sessionId);
+    [dartx.load](...args) {
+      return this.load.apply(this, args);
     }
-    [dartx.remove]() {
-      return this.remove();
+    [dartx.remove](...args) {
+      return this.remove.apply(this, args);
     }
-    [_update$](response) {
-      return this.update(response);
+    [_update$](...args) {
+      return this.update.apply(this, args);
     }
   };
   dart.setSignature(html$.MediaKeySession, {
@@ -63368,14 +63368,14 @@
     get [dartx.keySystem]() {
       return this.keySystem;
     }
-    [dartx.createMediaKeys]() {
-      return this.createMediaKeys();
+    [dartx.createMediaKeys](...args) {
+      return this.createMediaKeys.apply(this, args);
     }
     [dartx.getConfiguration]() {
       return html_common.convertNativeToDart_Dictionary(this[_getConfiguration_1]());
     }
-    [_getConfiguration_1]() {
-      return this.getConfiguration();
+    [_getConfiguration_1](...args) {
+      return this.getConfiguration.apply(this, args);
     }
   };
   dart.setSignature(html$.MediaKeySystemAccess, {
@@ -63396,11 +63396,11 @@
     static _() {
       dart.throw(new core.UnsupportedError("Not supported"));
     }
-    [_createSession](sessionType) {
-      return this.createSession(sessionType);
+    [_createSession](...args) {
+      return this.createSession.apply(this, args);
     }
-    [dartx.setServerCertificate](serverCertificate) {
-      return this.setServerCertificate(serverCertificate);
+    [dartx.setServerCertificate](...args) {
+      return this.setServerCertificate.apply(this, args);
     }
   };
   dart.setSignature(html$.MediaKeys, {
@@ -63431,14 +63431,14 @@
     set [dartx.mediaText](value) {
       this.mediaText = value;
     }
-    [dartx.appendMedium](medium) {
-      return this.appendMedium(medium);
+    [dartx.appendMedium](...args) {
+      return this.appendMedium.apply(this, args);
     }
-    [dartx.deleteMedium](medium) {
-      return this.deleteMedium(medium);
+    [dartx.deleteMedium](...args) {
+      return this.deleteMedium.apply(this, args);
     }
-    [dartx.item](index) {
-      return this.item(index);
+    [dartx.item](...args) {
+      return this.item.apply(this, args);
     }
   };
   dart.setSignature(html$.MediaList, {
@@ -63471,11 +63471,11 @@
     get [dartx.media]() {
       return this.media;
     }
-    [dartx.addListener](listener) {
-      return this.addListener(listener);
+    [dartx.addListener](...args) {
+      return this.addListener.apply(this, args);
     }
-    [dartx.removeListener](listener) {
-      return this.removeListener(listener);
+    [dartx.removeListener](...args) {
+      return this.removeListener.apply(this, args);
     }
     get [dartx.onChange]() {
       return html$.MediaQueryList.changeEvent.forTarget(this);
@@ -63559,11 +63559,11 @@
     static _create_1() {
       return new MediaSession();
     }
-    [dartx.activate]() {
-      return this.activate();
+    [dartx.activate](...args) {
+      return this.activate.apply(this, args);
     }
-    [dartx.deactivate]() {
-      return this.deactivate();
+    [dartx.deactivate](...args) {
+      return this.deactivate.apply(this, args);
     }
   };
   dart.setSignature(html$.MediaSession, {
@@ -63616,14 +63616,14 @@
     get [dartx.sourceBuffers]() {
       return this.sourceBuffers;
     }
-    [dartx.addSourceBuffer](type) {
-      return this.addSourceBuffer(type);
+    [dartx.addSourceBuffer](...args) {
+      return this.addSourceBuffer.apply(this, args);
     }
-    [dartx.endOfStream](error) {
-      return this.endOfStream(error);
+    [dartx.endOfStream](...args) {
+      return this.endOfStream.apply(this, args);
     }
-    [dartx.removeSourceBuffer](buffer) {
-      return this.removeSourceBuffer(buffer);
+    [dartx.removeSourceBuffer](...args) {
+      return this.removeSourceBuffer.apply(this, args);
     }
   };
   dart.setSignature(html$.MediaSource, {
@@ -63705,29 +63705,29 @@
     get [dartx.label]() {
       return this.label;
     }
-    [dartx.addTrack](track) {
-      return this.addTrack(track);
+    [dartx.addTrack](...args) {
+      return this.addTrack.apply(this, args);
     }
-    [dartx.clone]() {
-      return this.clone();
+    [dartx.clone](...args) {
+      return this.clone.apply(this, args);
     }
-    [dartx.getAudioTracks]() {
-      return this.getAudioTracks();
+    [dartx.getAudioTracks](...args) {
+      return this.getAudioTracks.apply(this, args);
     }
-    [dartx.getTrackById](trackId) {
-      return this.getTrackById(trackId);
+    [dartx.getTrackById](...args) {
+      return this.getTrackById.apply(this, args);
     }
-    [dartx.getTracks]() {
-      return this.getTracks();
+    [dartx.getTracks](...args) {
+      return this.getTracks.apply(this, args);
     }
-    [dartx.getVideoTracks]() {
-      return this.getVideoTracks();
+    [dartx.getVideoTracks](...args) {
+      return this.getVideoTracks.apply(this, args);
     }
-    [dartx.removeTrack](track) {
-      return this.removeTrack(track);
+    [dartx.removeTrack](...args) {
+      return this.removeTrack.apply(this, args);
     }
-    [dartx.stop]() {
-      return this.stop();
+    [dartx.stop](...args) {
+      return this.stop.apply(this, args);
     }
     get [dartx.onAddTrack]() {
       return html$.MediaStream.addTrackEvent.forTarget(this);
@@ -63873,8 +63873,8 @@
     get [dartx.readyState]() {
       return this.readyState;
     }
-    [dartx.clone]() {
-      return this.clone();
+    [dartx.clone](...args) {
+      return this.clone.apply(this, args);
     }
     static getSources() {
       let completer = CompleterOfListOfSourceInfo().new();
@@ -63883,8 +63883,8 @@
       }, ListOfSourceInfoTovoid()));
       return completer.future;
     }
-    [dartx.stop]() {
-      return this.stop();
+    [dartx.stop](...args) {
+      return this.stop.apply(this, args);
     }
     get [dartx.onEnded]() {
       return html$.MediaStreamTrack.endedEvent.forTarget(this);
@@ -64195,8 +64195,8 @@
     get [_get_source]() {
       return this.source;
     }
-    [_initMessageEvent](typeArg, canBubbleArg, cancelableArg, dataArg, originArg, lastEventIdArg, sourceArg, portsArg) {
-      return this.initMessageEvent(typeArg, canBubbleArg, cancelableArg, dataArg, originArg, lastEventIdArg, sourceArg, portsArg);
+    [_initMessageEvent](...args) {
+      return this.initMessageEvent.apply(this, args);
     }
   };
   dart.setSignature(html$.MessageEvent, {
@@ -64232,8 +64232,8 @@
     static _() {
       dart.throw(new core.UnsupportedError("Not supported"));
     }
-    [dartx.close]() {
-      return this.close();
+    [dartx.close](...args) {
+      return this.close.apply(this, args);
     }
     [dartx.postMessage](message, transfer) {
       if (transfer === void 0) transfer = null;
@@ -64246,14 +64246,14 @@
       this[_postMessage_2](message_1);
       return;
     }
-    [_postMessage_1](message, transfer) {
-      return this.postMessage(message, transfer);
+    [_postMessage_1](...args) {
+      return this.postMessage.apply(this, args);
     }
-    [_postMessage_2](message) {
-      return this.postMessage(message);
+    [_postMessage_2](...args) {
+      return this.postMessage.apply(this, args);
     }
-    [dartx.start]() {
-      return this.start();
+    [dartx.start](...args) {
+      return this.start.apply(this, args);
     }
     get [dartx.onMessage]() {
       return html$.MessagePort.messageEvent.forTarget(this);
@@ -64547,11 +64547,11 @@
     get [dartx.version]() {
       return this.version;
     }
-    [dartx.close]() {
-      return this.close();
+    [dartx.close](...args) {
+      return this.close.apply(this, args);
     }
-    [dartx.open]() {
-      return this.open();
+    [dartx.open](...args) {
+      return this.open.apply(this, args);
     }
   };
   dart.setSignature(html$.MidiPort, {
@@ -64661,8 +64661,8 @@
     static _() {
       dart.throw(new core.UnsupportedError("Not supported"));
     }
-    [dartx.send](data, timestamp) {
-      return this.send(data, timestamp);
+    [dartx.send](...args) {
+      return this.send.apply(this, args);
     }
   };
   dart.setSignature(html$.MidiOutput, {
@@ -64773,11 +64773,11 @@
     [dartx.elementAt](index) {
       return this[dartx._get](index);
     }
-    [dartx.item](index) {
-      return this.item(index);
+    [dartx.item](...args) {
+      return this.item.apply(this, args);
     }
-    [dartx.namedItem](name) {
-      return this.namedItem(name);
+    [dartx.namedItem](...args) {
+      return this.namedItem.apply(this, args);
     }
   };
   html$.MimeTypeArray[dart.implements] = () => [_js_helper.JavaScriptIndexingBehavior, ListOfMimeType()];
@@ -64984,8 +64984,8 @@
       this[_initMouseEvent_1](type, bubbles, cancelable, view, detail, screenX, screenY, clientX, clientY, ctrlKey, altKey, shiftKey, metaKey, button, relatedTarget_1);
       return;
     }
-    [_initMouseEvent_1](type, bubbles, cancelable, view, detail, screenX, screenY, clientX, clientY, ctrlKey, altKey, shiftKey, metaKey, button, relatedTarget) {
-      return this.initMouseEvent(type, bubbles, cancelable, view, detail, screenX, screenY, clientX, clientY, ctrlKey, altKey, shiftKey, metaKey, button, relatedTarget);
+    [_initMouseEvent_1](...args) {
+      return this.initMouseEvent.apply(this, args);
     }
     get [dartx.client]() {
       return new (PointOfnum())(this[_clientX], this[_clientY]);
@@ -65078,19 +65078,19 @@
     'observe'
   ]);
   html$.MutationObserver = class MutationObserver extends _interceptors.Interceptor {
-    [dartx.disconnect]() {
-      return this.disconnect();
+    [dartx.disconnect](...args) {
+      return this.disconnect.apply(this, args);
     }
     [_observe](target, options) {
       let options_1 = html_common.convertDartToNative_Dictionary(options);
       this[_observe_1](target, options_1);
       return;
     }
-    [_observe_1](target, options) {
-      return this.observe(target, options);
+    [_observe_1](...args) {
+      return this.observe.apply(this, args);
     }
-    [dartx.takeRecords]() {
-      return this.takeRecords();
+    [dartx.takeRecords](...args) {
+      return this.takeRecords.apply(this, args);
     }
     static get supported() {
       return !!(window.MutationObserver || window.WebKitMutationObserver);
@@ -65128,8 +65128,8 @@
     static _fixupList(list) {
       return list;
     }
-    [_call](target, options) {
-      return this.observe(target, options);
+    [_call](...args) {
+      return this.observe.apply(this, args);
     }
     static new(callback) {
       0;
@@ -65283,8 +65283,8 @@
         this.getUserMedia = this.getUserMedia || this.webkitGetUserMedia || this.mozGetUserMedia || this.msGetUserMedia;
       }
     }
-    [_getUserMedia](options, success, error) {
-      return this.getUserMedia(options, success, error);
+    [_getUserMedia](...args) {
+      return this.getUserMedia.apply(this, args);
     }
     static _() {
       dart.throw(new core.UnsupportedError("Not supported"));
@@ -65343,17 +65343,17 @@
     get [dartx.temporaryStorage]() {
       return this.webkitTemporaryStorage;
     }
-    [dartx.getBattery]() {
-      return this.getBattery();
+    [dartx.getBattery](...args) {
+      return this.getBattery.apply(this, args);
     }
-    [dartx.getGamepads]() {
-      return this.getGamepads();
+    [dartx.getGamepads](...args) {
+      return this.getGamepads.apply(this, args);
     }
-    [dartx.getVRDevices]() {
-      return this.getVRDevices();
+    [dartx.getVRDevices](...args) {
+      return this.getVRDevices.apply(this, args);
     }
-    [dartx.registerProtocolHandler](scheme, url, title) {
-      return this.registerProtocolHandler(scheme, url, title);
+    [dartx.registerProtocolHandler](...args) {
+      return this.registerProtocolHandler.apply(this, args);
     }
     [dartx.requestMidiAccess](options) {
       if (options === void 0) options = null;
@@ -65363,17 +65363,17 @@
       }
       return this[_requestMidiAccess_2]();
     }
-    [_requestMidiAccess_1](options) {
-      return this.requestMIDIAccess(options);
+    [_requestMidiAccess_1](...args) {
+      return this.requestMIDIAccess.apply(this, args);
     }
-    [_requestMidiAccess_2]() {
-      return this.requestMIDIAccess();
+    [_requestMidiAccess_2](...args) {
+      return this.requestMIDIAccess.apply(this, args);
     }
-    [dartx.requestMediaKeySystemAccess](keySystem, supportedConfigurations) {
-      return this.requestMediaKeySystemAccess(keySystem, supportedConfigurations);
+    [dartx.requestMediaKeySystemAccess](...args) {
+      return this.requestMediaKeySystemAccess.apply(this, args);
     }
-    [dartx.sendBeacon](url, data) {
-      return this.sendBeacon(url, data);
+    [dartx.sendBeacon](...args) {
+      return this.sendBeacon.apply(this, args);
     }
     get [dartx.hardwareConcurrency]() {
       return this.hardwareConcurrency;
@@ -65408,8 +65408,8 @@
     get [dartx.cookieEnabled]() {
       return this.cookieEnabled;
     }
-    [dartx.getStorageUpdates]() {
-      return this.getStorageUpdates();
+    [dartx.getStorageUpdates](...args) {
+      return this.getStorageUpdates.apply(this, args);
     }
   };
   html$.Navigator[dart.implements] = () => [html$.NavigatorStorageUtils, html$.NavigatorCpu, html$.NavigatorLanguage, html$.NavigatorOnLine, html$.NavigatorID];
@@ -65630,8 +65630,8 @@
     get [dartx.cookieEnabled]() {
       return this.cookieEnabled;
     }
-    [dartx.getStorageUpdates]() {
-      return this.getStorageUpdates();
+    [dartx.getStorageUpdates](...args) {
+      return this.getStorageUpdates.apply(this, args);
     }
   };
   dart.setSignature(html$.NavigatorStorageUtils, {
@@ -65938,14 +65938,14 @@
     get [dartx.whatToShow]() {
       return this.whatToShow;
     }
-    [dartx.detach]() {
-      return this.detach();
+    [dartx.detach](...args) {
+      return this.detach.apply(this, args);
     }
-    [dartx.nextNode]() {
-      return this.nextNode();
+    [dartx.nextNode](...args) {
+      return this.nextNode.apply(this, args);
     }
-    [dartx.previousNode]() {
-      return this.previousNode();
+    [dartx.previousNode](...args) {
+      return this.previousNode.apply(this, args);
     }
   };
   dart.setSignature(html$.NodeIterator, {
@@ -66018,8 +66018,8 @@
     [dartx.elementAt](index) {
       return this[dartx._get](index);
     }
-    [_item](index) {
-      return this.item(index);
+    [_item](...args) {
+      return this.item.apply(this, args);
     }
   };
   html$.NodeList[dart.implements] = () => [_js_helper.JavaScriptIndexingBehavior, ListOfNode()];
@@ -66071,8 +66071,8 @@
     static _() {
       dart.throw(new core.UnsupportedError("Not supported"));
     }
-    [dartx.getElementById](elementId) {
-      return this.getElementById(elementId);
+    [dartx.getElementById](...args) {
+      return this.getElementById.apply(this, args);
     }
   };
   dart.setSignature(html$.NonElementParentNode, {
@@ -66162,8 +66162,8 @@
     get [dartx.vibrate]() {
       return this.vibrate;
     }
-    [dartx.close]() {
-      return this.close();
+    [dartx.close](...args) {
+      return this.close.apply(this, args);
     }
     static requestPermission() {
       let completer = CompleterOfString().new();
@@ -66416,20 +66416,20 @@
     get [dartx.willValidate]() {
       return this.willValidate;
     }
-    [__getter__](index_OR_name) {
-      return this.__getter__(index_OR_name);
+    [__getter__](...args) {
+      return this.__getter__.apply(this, args);
     }
-    [__setter__](index_OR_name, value) {
-      return this.__setter__(index_OR_name, value);
+    [__setter__](...args) {
+      return this.__setter__.apply(this, args);
     }
-    [dartx.checkValidity]() {
-      return this.checkValidity();
+    [dartx.checkValidity](...args) {
+      return this.checkValidity.apply(this, args);
     }
-    [dartx.reportValidity]() {
-      return this.reportValidity();
+    [dartx.reportValidity](...args) {
+      return this.reportValidity.apply(this, args);
     }
-    [dartx.setCustomValidity](error) {
-      return this.setCustomValidity(error);
+    [dartx.setCustomValidity](...args) {
+      return this.setCustomValidity.apply(this, args);
     }
   };
   dart.defineNamedConstructor(html$.ObjectElement, 'created');
@@ -66703,14 +66703,14 @@
     get [dartx.willValidate]() {
       return this.willValidate;
     }
-    [dartx.checkValidity]() {
-      return this.checkValidity();
+    [dartx.checkValidity](...args) {
+      return this.checkValidity.apply(this, args);
     }
-    [dartx.reportValidity]() {
-      return this.reportValidity();
+    [dartx.reportValidity](...args) {
+      return this.reportValidity.apply(this, args);
     }
-    [dartx.setCustomValidity](error) {
-      return this.setCustomValidity(error);
+    [dartx.setCustomValidity](...args) {
+      return this.setCustomValidity.apply(this, args);
     }
   };
   dart.defineNamedConstructor(html$.OutputElement, 'created');
@@ -66944,35 +66944,35 @@
     static _create_3(path_OR_text) {
       return new Path2D(path_OR_text);
     }
-    [dartx.addPath](path, transform) {
-      return this.addPath(path, transform);
+    [dartx.addPath](...args) {
+      return this.addPath.apply(this, args);
     }
-    [dartx.arc](x, y, radius, startAngle, endAngle, anticlockwise) {
-      return this.arc(x, y, radius, startAngle, endAngle, anticlockwise);
+    [dartx.arc](...args) {
+      return this.arc.apply(this, args);
     }
-    [dartx.arcTo](x1, y1, x2, y2, radius) {
-      return this.arcTo(x1, y1, x2, y2, radius);
+    [dartx.arcTo](...args) {
+      return this.arcTo.apply(this, args);
     }
-    [dartx.bezierCurveTo](cp1x, cp1y, cp2x, cp2y, x, y) {
-      return this.bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y);
+    [dartx.bezierCurveTo](...args) {
+      return this.bezierCurveTo.apply(this, args);
     }
-    [dartx.closePath]() {
-      return this.closePath();
+    [dartx.closePath](...args) {
+      return this.closePath.apply(this, args);
     }
-    [dartx.ellipse](x, y, radiusX, radiusY, rotation, startAngle, endAngle, anticlockwise) {
-      return this.ellipse(x, y, radiusX, radiusY, rotation, startAngle, endAngle, anticlockwise);
+    [dartx.ellipse](...args) {
+      return this.ellipse.apply(this, args);
     }
-    [dartx.lineTo](x, y) {
-      return this.lineTo(x, y);
+    [dartx.lineTo](...args) {
+      return this.lineTo.apply(this, args);
     }
-    [dartx.moveTo](x, y) {
-      return this.moveTo(x, y);
+    [dartx.moveTo](...args) {
+      return this.moveTo.apply(this, args);
     }
-    [dartx.quadraticCurveTo](cpx, cpy, x, y) {
-      return this.quadraticCurveTo(cpx, cpy, x, y);
+    [dartx.quadraticCurveTo](...args) {
+      return this.quadraticCurveTo.apply(this, args);
     }
-    [dartx.rect](x, y, width, height) {
-      return this.rect(x, y, width, height);
+    [dartx.rect](...args) {
+      return this.rect.apply(this, args);
     }
   };
   html$.Path2D[dart.implements] = () => [html$._CanvasPathMethods];
@@ -67035,41 +67035,41 @@
     get [dartx.timing]() {
       return this.timing;
     }
-    [dartx.clearFrameTimings]() {
-      return this.clearFrameTimings();
+    [dartx.clearFrameTimings](...args) {
+      return this.clearFrameTimings.apply(this, args);
     }
-    [dartx.clearMarks](markName) {
-      return this.clearMarks(markName);
+    [dartx.clearMarks](...args) {
+      return this.clearMarks.apply(this, args);
     }
-    [dartx.clearMeasures](measureName) {
-      return this.clearMeasures(measureName);
+    [dartx.clearMeasures](...args) {
+      return this.clearMeasures.apply(this, args);
     }
-    [dartx.getEntries]() {
-      return this.getEntries();
+    [dartx.getEntries](...args) {
+      return this.getEntries.apply(this, args);
     }
-    [dartx.getEntriesByName](name, entryType) {
-      return this.getEntriesByName(name, entryType);
+    [dartx.getEntriesByName](...args) {
+      return this.getEntriesByName.apply(this, args);
     }
-    [dartx.getEntriesByType](entryType) {
-      return this.getEntriesByType(entryType);
+    [dartx.getEntriesByType](...args) {
+      return this.getEntriesByType.apply(this, args);
     }
-    [dartx.mark](markName) {
-      return this.mark(markName);
+    [dartx.mark](...args) {
+      return this.mark.apply(this, args);
     }
-    [dartx.measure](measureName, startMark, endMark) {
-      return this.measure(measureName, startMark, endMark);
+    [dartx.measure](...args) {
+      return this.measure.apply(this, args);
     }
-    [dartx.now]() {
-      return this.now();
+    [dartx.now](...args) {
+      return this.now.apply(this, args);
     }
-    [dartx.setFrameTimingBufferSize](maxSize) {
-      return this.setFrameTimingBufferSize(maxSize);
+    [dartx.setFrameTimingBufferSize](...args) {
+      return this.setFrameTimingBufferSize.apply(this, args);
     }
-    [dartx.clearResourceTimings]() {
-      return this.webkitClearResourceTimings();
+    [dartx.clearResourceTimings](...args) {
+      return this.webkitClearResourceTimings.apply(this, args);
     }
-    [dartx.setResourceTimingBufferSize](maxSize) {
-      return this.webkitSetResourceTimingBufferSize(maxSize);
+    [dartx.setResourceTimingBufferSize](...args) {
+      return this.webkitSetResourceTimingBufferSize.apply(this, args);
     }
     get [dartx.onResourceTimingBufferFull]() {
       return html$.Performance.resourceTimingBufferFullEvent.forTarget(this);
@@ -67462,14 +67462,14 @@
     get [dartx.minPossiblePeriod]() {
       return this.minPossiblePeriod;
     }
-    [dartx.getRegistration](tag) {
-      return this.getRegistration(tag);
+    [dartx.getRegistration](...args) {
+      return this.getRegistration.apply(this, args);
     }
-    [dartx.getRegistrations]() {
-      return this.getRegistrations();
+    [dartx.getRegistrations](...args) {
+      return this.getRegistrations.apply(this, args);
     }
-    [dartx.permissionState]() {
-      return this.permissionState();
+    [dartx.permissionState](...args) {
+      return this.permissionState.apply(this, args);
     }
     [dartx.register](options) {
       if (options === void 0) options = null;
@@ -67479,11 +67479,11 @@
       }
       return this[_register_2]();
     }
-    [_register_1](options) {
-      return this.register(options);
+    [_register_1](...args) {
+      return this.register.apply(this, args);
     }
-    [_register_2]() {
-      return this.register();
+    [_register_2](...args) {
+      return this.register.apply(this, args);
     }
   };
   dart.setSignature(html$.PeriodicSyncManager, {
@@ -67522,8 +67522,8 @@
     get [dartx.tag]() {
       return this.tag;
     }
-    [dartx.unregister]() {
-      return this.unregister();
+    [dartx.unregister](...args) {
+      return this.unregister.apply(this, args);
     }
   };
   dart.setSignature(html$.PeriodicSyncRegistration, {
@@ -67578,8 +67578,8 @@
     static _() {
       dart.throw(new core.UnsupportedError("Not supported"));
     }
-    [dartx.query](permission) {
-      return this.query(permission);
+    [dartx.query](...args) {
+      return this.query.apply(this, args);
     }
   };
   dart.setSignature(html$.Permissions, {
@@ -67627,11 +67627,11 @@
     get [dartx.name]() {
       return this.name;
     }
-    [dartx.item](index) {
-      return this.item(index);
+    [dartx.item](...args) {
+      return this.item.apply(this, args);
     }
-    [dartx.namedItem](name) {
-      return this.namedItem(name);
+    [dartx.namedItem](...args) {
+      return this.namedItem.apply(this, args);
     }
   };
   dart.setSignature(html$.Plugin, {
@@ -67703,14 +67703,14 @@
     [dartx.elementAt](index) {
       return this[dartx._get](index);
     }
-    [dartx.item](index) {
-      return this.item(index);
+    [dartx.item](...args) {
+      return this.item.apply(this, args);
     }
-    [dartx.namedItem](name) {
-      return this.namedItem(name);
+    [dartx.namedItem](...args) {
+      return this.namedItem.apply(this, args);
     }
-    [dartx.refresh](reload) {
-      return this.refresh(reload);
+    [dartx.refresh](...args) {
+      return this.refresh.apply(this, args);
     }
   };
   html$.PluginArray[dart.implements] = () => [_js_helper.JavaScriptIndexingBehavior, ListOfPlugin()];
@@ -67759,8 +67759,8 @@
     set [dartx.message](value) {
       this.message = value;
     }
-    [dartx.createdCallback]() {
-      return this.createdCallback();
+    [dartx.createdCallback](...args) {
+      return this.createdCallback.apply(this, args);
     }
   };
   dart.defineNamedConstructor(html$.PluginPlaceholderElement, 'created');
@@ -67935,14 +67935,14 @@
     static _() {
       dart.throw(new core.UnsupportedError("Not supported"));
     }
-    [dartx.getImmediateState]() {
-      return this.getImmediateState();
+    [dartx.getImmediateState](...args) {
+      return this.getImmediateState.apply(this, args);
     }
-    [dartx.getState]() {
-      return this.getState();
+    [dartx.getState](...args) {
+      return this.getState.apply(this, args);
     }
-    [dartx.resetSensor]() {
-      return this.resetSensor();
+    [dartx.resetSensor](...args) {
+      return this.resetSensor.apply(this, args);
     }
   };
   dart.setSignature(html$.PositionSensorVRDevice, {
@@ -67987,14 +67987,14 @@
     get [dartx.session]() {
       return this.session;
     }
-    [dartx.getAvailability](url) {
-      return this.getAvailability(url);
+    [dartx.getAvailability](...args) {
+      return this.getAvailability.apply(this, args);
     }
-    [dartx.joinSession](url, presentationId) {
-      return this.joinSession(url, presentationId);
+    [dartx.joinSession](...args) {
+      return this.joinSession.apply(this, args);
     }
-    [dartx.startSession](url) {
-      return this.startSession(url);
+    [dartx.startSession](...args) {
+      return this.startSession.apply(this, args);
     }
   };
   dart.setSignature(html$.Presentation, {
@@ -68058,11 +68058,11 @@
     get [dartx.state]() {
       return this.state;
     }
-    [dartx.close]() {
-      return this.close();
+    [dartx.close](...args) {
+      return this.close.apply(this, args);
     }
-    [dartx.send](data_OR_message) {
-      return this.send(data_OR_message);
+    [dartx.send](...args) {
+      return this.send.apply(this, args);
     }
     get [dartx.onMessage]() {
       return html$.PresentationSession.messageEvent.forTarget(this);
@@ -68315,8 +68315,8 @@
     static _() {
       dart.throw(new core.UnsupportedError("Not supported"));
     }
-    [dartx.getSubscription]() {
-      return this.getSubscription();
+    [dartx.getSubscription](...args) {
+      return this.getSubscription.apply(this, args);
     }
     [dartx.permissionState](options) {
       if (options === void 0) options = null;
@@ -68326,11 +68326,11 @@
       }
       return this[_permissionState_2]();
     }
-    [_permissionState_1](options) {
-      return this.permissionState(options);
+    [_permissionState_1](...args) {
+      return this.permissionState.apply(this, args);
     }
-    [_permissionState_2]() {
-      return this.permissionState();
+    [_permissionState_2](...args) {
+      return this.permissionState.apply(this, args);
     }
     [dartx.subscribe](options) {
       if (options === void 0) options = null;
@@ -68340,11 +68340,11 @@
       }
       return this[_subscribe_2]();
     }
-    [_subscribe_1](options) {
-      return this.subscribe(options);
+    [_subscribe_1](...args) {
+      return this.subscribe.apply(this, args);
     }
-    [_subscribe_2]() {
-      return this.subscribe();
+    [_subscribe_2](...args) {
+      return this.subscribe.apply(this, args);
     }
   };
   dart.setSignature(html$.PushManager, {
@@ -68376,17 +68376,17 @@
     static _create_1(message) {
       return new PushMessageData(message);
     }
-    [dartx.arrayBuffer]() {
-      return this.arrayBuffer();
+    [dartx.arrayBuffer](...args) {
+      return this.arrayBuffer.apply(this, args);
     }
-    [dartx.blob]() {
-      return this.blob();
+    [dartx.blob](...args) {
+      return this.blob.apply(this, args);
     }
-    [dartx.json]() {
-      return this.json();
+    [dartx.json](...args) {
+      return this.json.apply(this, args);
     }
-    [dartx.text]() {
-      return this.text();
+    [dartx.text](...args) {
+      return this.text.apply(this, args);
     }
   };
   dart.setSignature(html$.PushMessageData, {
@@ -68415,8 +68415,8 @@
     get [dartx.endpoint]() {
       return this.endpoint;
     }
-    [dartx.unsubscribe]() {
-      return this.unsubscribe();
+    [dartx.unsubscribe](...args) {
+      return this.unsubscribe.apply(this, args);
     }
   };
   dart.setSignature(html$.PushSubscription, {
@@ -68518,74 +68518,74 @@
     get [dartx.startOffset]() {
       return this.startOffset;
     }
-    [dartx.cloneContents]() {
-      return this.cloneContents();
+    [dartx.cloneContents](...args) {
+      return this.cloneContents.apply(this, args);
     }
-    [dartx.cloneRange]() {
-      return this.cloneRange();
+    [dartx.cloneRange](...args) {
+      return this.cloneRange.apply(this, args);
     }
-    [dartx.collapse](toStart) {
-      return this.collapse(toStart);
+    [dartx.collapse](...args) {
+      return this.collapse.apply(this, args);
     }
-    [dartx.compareBoundaryPoints](how, sourceRange) {
-      return this.compareBoundaryPoints(how, sourceRange);
+    [dartx.compareBoundaryPoints](...args) {
+      return this.compareBoundaryPoints.apply(this, args);
     }
-    [dartx.comparePoint](node, offset) {
-      return this.comparePoint(node, offset);
+    [dartx.comparePoint](...args) {
+      return this.comparePoint.apply(this, args);
     }
-    [dartx.createContextualFragment](fragment) {
-      return this.createContextualFragment(fragment);
+    [dartx.createContextualFragment](...args) {
+      return this.createContextualFragment.apply(this, args);
     }
-    [dartx.deleteContents]() {
-      return this.deleteContents();
+    [dartx.deleteContents](...args) {
+      return this.deleteContents.apply(this, args);
     }
-    [dartx.detach]() {
-      return this.detach();
+    [dartx.detach](...args) {
+      return this.detach.apply(this, args);
     }
-    [dartx.expand](unit) {
-      return this.expand(unit);
+    [dartx.expand](...args) {
+      return this.expand.apply(this, args);
     }
-    [dartx.extractContents]() {
-      return this.extractContents();
+    [dartx.extractContents](...args) {
+      return this.extractContents.apply(this, args);
     }
-    [dartx.getBoundingClientRect]() {
-      return this.getBoundingClientRect();
+    [dartx.getBoundingClientRect](...args) {
+      return this.getBoundingClientRect.apply(this, args);
     }
-    [dartx.getClientRects]() {
-      return this.getClientRects();
+    [dartx.getClientRects](...args) {
+      return this.getClientRects.apply(this, args);
     }
-    [dartx.insertNode](node) {
-      return this.insertNode(node);
+    [dartx.insertNode](...args) {
+      return this.insertNode.apply(this, args);
     }
-    [dartx.isPointInRange](node, offset) {
-      return this.isPointInRange(node, offset);
+    [dartx.isPointInRange](...args) {
+      return this.isPointInRange.apply(this, args);
     }
-    [dartx.selectNode](node) {
-      return this.selectNode(node);
+    [dartx.selectNode](...args) {
+      return this.selectNode.apply(this, args);
     }
-    [dartx.selectNodeContents](node) {
-      return this.selectNodeContents(node);
+    [dartx.selectNodeContents](...args) {
+      return this.selectNodeContents.apply(this, args);
     }
-    [dartx.setEnd](node, offset) {
-      return this.setEnd(node, offset);
+    [dartx.setEnd](...args) {
+      return this.setEnd.apply(this, args);
     }
-    [dartx.setEndAfter](node) {
-      return this.setEndAfter(node);
+    [dartx.setEndAfter](...args) {
+      return this.setEndAfter.apply(this, args);
     }
-    [dartx.setEndBefore](node) {
-      return this.setEndBefore(node);
+    [dartx.setEndBefore](...args) {
+      return this.setEndBefore.apply(this, args);
     }
-    [dartx.setStart](node, offset) {
-      return this.setStart(node, offset);
+    [dartx.setStart](...args) {
+      return this.setStart.apply(this, args);
     }
-    [dartx.setStartAfter](node) {
-      return this.setStartAfter(node);
+    [dartx.setStartAfter](...args) {
+      return this.setStartAfter.apply(this, args);
     }
-    [dartx.setStartBefore](node) {
-      return this.setStartBefore(node);
+    [dartx.setStartBefore](...args) {
+      return this.setStartBefore.apply(this, args);
     }
-    [dartx.surroundContents](newParent) {
-      return this.surroundContents(newParent);
+    [dartx.surroundContents](...args) {
+      return this.surroundContents.apply(this, args);
     }
     static get supportsCreateContextualFragment() {
       return "createContextualFragment" in window.Range.prototype;
@@ -68651,11 +68651,11 @@
     static _() {
       dart.throw(new core.UnsupportedError("Not supported"));
     }
-    [dartx.cancel](reason) {
-      return this.cancel(reason);
+    [dartx.cancel](...args) {
+      return this.cancel.apply(this, args);
     }
-    [dartx.getReader]() {
-      return this.getReader();
+    [dartx.getReader](...args) {
+      return this.getReader.apply(this, args);
     }
   };
   dart.setSignature(html$.ReadableByteStream, {
@@ -68679,14 +68679,14 @@
     get [dartx.closed]() {
       return this.closed;
     }
-    [dartx.cancel](reason) {
-      return this.cancel(reason);
+    [dartx.cancel](...args) {
+      return this.cancel.apply(this, args);
     }
-    [dartx.read]() {
-      return this.read();
+    [dartx.read](...args) {
+      return this.read.apply(this, args);
     }
-    [dartx.releaseLock]() {
-      return this.releaseLock();
+    [dartx.releaseLock](...args) {
+      return this.releaseLock.apply(this, args);
     }
   };
   dart.setSignature(html$.ReadableByteStreamReader, {
@@ -68707,11 +68707,11 @@
     static _() {
       dart.throw(new core.UnsupportedError("Not supported"));
     }
-    [dartx.cancel](reason) {
-      return this.cancel(reason);
+    [dartx.cancel](...args) {
+      return this.cancel.apply(this, args);
     }
-    [dartx.getReader]() {
-      return this.getReader();
+    [dartx.getReader](...args) {
+      return this.getReader.apply(this, args);
     }
   };
   dart.setSignature(html$.ReadableStream, {
@@ -68735,14 +68735,14 @@
     get [dartx.closed]() {
       return this.closed;
     }
-    [dartx.cancel](reason) {
-      return this.cancel(reason);
+    [dartx.cancel](...args) {
+      return this.cancel.apply(this, args);
     }
-    [dartx.read]() {
-      return this.read();
+    [dartx.read](...args) {
+      return this.read.apply(this, args);
     }
-    [dartx.releaseLock]() {
-      return this.releaseLock();
+    [dartx.releaseLock](...args) {
+      return this.releaseLock.apply(this, args);
     }
   };
   dart.setSignature(html$.ReadableStreamReader, {
@@ -68877,23 +68877,23 @@
     get [dartx.reliable]() {
       return this.reliable;
     }
-    [dartx.close]() {
-      return this.close();
+    [dartx.close](...args) {
+      return this.close.apply(this, args);
     }
-    [dartx.send](data) {
-      return this.send(data);
+    [dartx.send](...args) {
+      return this.send.apply(this, args);
     }
-    [dartx.sendBlob](data) {
-      return this.send(data);
+    [dartx.sendBlob](...args) {
+      return this.send.apply(this, args);
     }
-    [dartx.sendByteBuffer](data) {
-      return this.send(data);
+    [dartx.sendByteBuffer](...args) {
+      return this.send.apply(this, args);
     }
-    [dartx.sendString](data) {
-      return this.send(data);
+    [dartx.sendString](...args) {
+      return this.send.apply(this, args);
     }
-    [dartx.sendTypedData](data) {
-      return this.send(data);
+    [dartx.sendTypedData](...args) {
+      return this.send.apply(this, args);
     }
     get [dartx.onClose]() {
       return html$.RtcDataChannel.closeEvent.forTarget(this);
@@ -69004,8 +69004,8 @@
     get [dartx.track]() {
       return this.track;
     }
-    [dartx.insertDtmf](tones, duration, interToneGap) {
-      return this.insertDTMF(tones, duration, interToneGap);
+    [dartx.insertDtmf](...args) {
+      return this.insertDTMF.apply(this, args);
     }
     get [dartx.onToneChange]() {
       return html$.RtcDtmfSender.toneChangeEvent.forTarget(this);
@@ -69230,8 +69230,8 @@
     get [dartx.signalingState]() {
       return this.signalingState;
     }
-    [dartx.addIceCandidate](candidate, successCallback, failureCallback) {
-      return this.addIceCandidate(candidate, successCallback, failureCallback);
+    [dartx.addIceCandidate](...args) {
+      return this.addIceCandidate.apply(this, args);
     }
     [dartx.addStream](stream, mediaConstraints) {
       if (mediaConstraints === void 0) mediaConstraints = null;
@@ -69243,14 +69243,14 @@
       this[_addStream_2](stream);
       return;
     }
-    [_addStream_1](stream, mediaConstraints) {
-      return this.addStream(stream, mediaConstraints);
+    [_addStream_1](...args) {
+      return this.addStream.apply(this, args);
     }
-    [_addStream_2](stream) {
-      return this.addStream(stream);
+    [_addStream_2](...args) {
+      return this.addStream.apply(this, args);
     }
-    [dartx.close]() {
-      return this.close();
+    [dartx.close](...args) {
+      return this.close.apply(this, args);
     }
     [_createAnswer](successCallback, failureCallback, mediaConstraints) {
       if (failureCallback === void 0) failureCallback = null;
@@ -69263,14 +69263,14 @@
       this[_createAnswer_2](successCallback, failureCallback);
       return;
     }
-    [_createAnswer_1](successCallback, failureCallback, mediaConstraints) {
-      return this.createAnswer(successCallback, failureCallback, mediaConstraints);
+    [_createAnswer_1](...args) {
+      return this.createAnswer.apply(this, args);
     }
-    [_createAnswer_2](successCallback, failureCallback) {
-      return this.createAnswer(successCallback, failureCallback);
+    [_createAnswer_2](...args) {
+      return this.createAnswer.apply(this, args);
     }
-    [dartx.createDtmfSender](track) {
-      return this.createDTMFSender(track);
+    [dartx.createDtmfSender](...args) {
+      return this.createDTMFSender.apply(this, args);
     }
     [dartx.createDataChannel](label, options) {
       if (options === void 0) options = null;
@@ -69280,11 +69280,11 @@
       }
       return this[_createDataChannel_2](label);
     }
-    [_createDataChannel_1](label, options) {
-      return this.createDataChannel(label, options);
+    [_createDataChannel_1](...args) {
+      return this.createDataChannel.apply(this, args);
     }
-    [_createDataChannel_2](label) {
-      return this.createDataChannel(label);
+    [_createDataChannel_2](...args) {
+      return this.createDataChannel.apply(this, args);
     }
     [_createOffer](successCallback, failureCallback, rtcOfferOptions) {
       if (failureCallback === void 0) failureCallback = null;
@@ -69297,29 +69297,29 @@
       this[_createOffer_2](successCallback, failureCallback);
       return;
     }
-    [_createOffer_1](successCallback, failureCallback, rtcOfferOptions) {
-      return this.createOffer(successCallback, failureCallback, rtcOfferOptions);
+    [_createOffer_1](...args) {
+      return this.createOffer.apply(this, args);
     }
-    [_createOffer_2](successCallback, failureCallback) {
-      return this.createOffer(successCallback, failureCallback);
+    [_createOffer_2](...args) {
+      return this.createOffer.apply(this, args);
     }
-    [dartx.getLocalStreams]() {
-      return this.getLocalStreams();
+    [dartx.getLocalStreams](...args) {
+      return this.getLocalStreams.apply(this, args);
     }
-    [dartx.getRemoteStreams]() {
-      return this.getRemoteStreams();
+    [dartx.getRemoteStreams](...args) {
+      return this.getRemoteStreams.apply(this, args);
     }
-    [_getStats](successCallback, selector) {
-      return this.getStats(successCallback, selector);
+    [_getStats](...args) {
+      return this.getStats.apply(this, args);
     }
-    [dartx.getStreamById](streamId) {
-      return this.getStreamById(streamId);
+    [dartx.getStreamById](...args) {
+      return this.getStreamById.apply(this, args);
     }
-    [dartx.removeStream](stream) {
-      return this.removeStream(stream);
+    [dartx.removeStream](...args) {
+      return this.removeStream.apply(this, args);
     }
-    [_setLocalDescription](description, successCallback, failureCallback) {
-      return this.setLocalDescription(description, successCallback, failureCallback);
+    [_setLocalDescription](...args) {
+      return this.setLocalDescription.apply(this, args);
     }
     [dartx.setLocalDescription](description) {
       let completer = async.Completer.new();
@@ -69330,8 +69330,8 @@
       }, StringTovoid$()));
       return completer.future;
     }
-    [_setRemoteDescription](description, successCallback, failureCallback) {
-      return this.setRemoteDescription(description, successCallback, failureCallback);
+    [_setRemoteDescription](...args) {
+      return this.setRemoteDescription.apply(this, args);
     }
     [dartx.setRemoteDescription](description) {
       let completer = async.Completer.new();
@@ -69359,14 +69359,14 @@
       this[_updateIce_3]();
       return;
     }
-    [_updateIce_1](configuration, mediaConstraints) {
-      return this.updateIce(configuration, mediaConstraints);
+    [_updateIce_1](...args) {
+      return this.updateIce.apply(this, args);
     }
-    [_updateIce_2](configuration) {
-      return this.updateIce(configuration);
+    [_updateIce_2](...args) {
+      return this.updateIce.apply(this, args);
     }
-    [_updateIce_3]() {
-      return this.updateIce();
+    [_updateIce_3](...args) {
+      return this.updateIce.apply(this, args);
     }
     get [dartx.onAddStream]() {
       return html$.RtcPeerConnection.addStreamEvent.forTarget(this);
@@ -69541,11 +69541,11 @@
     get [dartx.type]() {
       return this.type;
     }
-    [dartx.names]() {
-      return this.names();
+    [dartx.names](...args) {
+      return this.names.apply(this, args);
     }
-    [dartx.stat](name) {
-      return this.stat(name);
+    [dartx.stat](...args) {
+      return this.stat.apply(this, args);
     }
   };
   dart.setSignature(html$.RtcStatsReport, {
@@ -69570,11 +69570,11 @@
     static _() {
       dart.throw(new core.UnsupportedError("Not supported"));
     }
-    [dartx.namedItem](name) {
-      return this.namedItem(name);
+    [dartx.namedItem](...args) {
+      return this.namedItem.apply(this, args);
     }
-    [dartx.result]() {
-      return this.result();
+    [dartx.result](...args) {
+      return this.result.apply(this, args);
     }
   };
   dart.setSignature(html$.RtcStatsResponse, {
@@ -69665,11 +69665,11 @@
     get [dartx.type]() {
       return this.type;
     }
-    [dartx.lock](orientation) {
-      return this.lock(orientation);
+    [dartx.lock](...args) {
+      return this.lock.apply(this, args);
     }
-    [dartx.unlock]() {
-      return this.unlock();
+    [dartx.unlock](...args) {
+      return this.unlock.apply(this, args);
     }
     get [dartx.onChange]() {
       return html$.ScreenOrientation.changeEvent.forTarget(this);
@@ -69899,8 +69899,8 @@
     get [dartx.velocityY]() {
       return this.velocityY;
     }
-    [dartx.consumeDelta](x, y) {
-      return this.consumeDelta(x, y);
+    [dartx.consumeDelta](...args) {
+      return this.consumeDelta.apply(this, args);
     }
   };
   dart.setSignature(html$.ScrollState, {
@@ -70142,26 +70142,26 @@
     get [dartx.willValidate]() {
       return this.willValidate;
     }
-    [__setter__](index, option) {
-      return this.__setter__(index, option);
+    [__setter__](...args) {
+      return this.__setter__.apply(this, args);
     }
-    [dartx.add](element, before) {
-      return this.add(element, before);
+    [dartx.add](...args) {
+      return this.add.apply(this, args);
     }
-    [dartx.checkValidity]() {
-      return this.checkValidity();
+    [dartx.checkValidity](...args) {
+      return this.checkValidity.apply(this, args);
     }
-    [dartx.item](index) {
-      return this.item(index);
+    [dartx.item](...args) {
+      return this.item.apply(this, args);
     }
-    [dartx.namedItem](name) {
-      return this.namedItem(name);
+    [dartx.namedItem](...args) {
+      return this.namedItem.apply(this, args);
     }
-    [dartx.reportValidity]() {
-      return this.reportValidity();
+    [dartx.reportValidity](...args) {
+      return this.reportValidity.apply(this, args);
     }
-    [dartx.setCustomValidity](error) {
-      return this.setCustomValidity(error);
+    [dartx.setCustomValidity](...args) {
+      return this.setCustomValidity.apply(this, args);
     }
     get [dartx.options]() {
       let options = ListOfOptionElement().from(this[dartx.querySelectorAll](html$.Element)('option'));
@@ -70279,47 +70279,47 @@
     get [dartx.type]() {
       return this.type;
     }
-    [dartx.addRange](range) {
-      return this.addRange(range);
+    [dartx.addRange](...args) {
+      return this.addRange.apply(this, args);
     }
-    [dartx.collapse](node, offset) {
-      return this.collapse(node, offset);
+    [dartx.collapse](...args) {
+      return this.collapse.apply(this, args);
     }
-    [dartx.collapseToEnd]() {
-      return this.collapseToEnd();
+    [dartx.collapseToEnd](...args) {
+      return this.collapseToEnd.apply(this, args);
     }
-    [dartx.collapseToStart]() {
-      return this.collapseToStart();
+    [dartx.collapseToStart](...args) {
+      return this.collapseToStart.apply(this, args);
     }
-    [dartx.containsNode](node, allowPartialContainment) {
-      return this.containsNode(node, allowPartialContainment);
+    [dartx.containsNode](...args) {
+      return this.containsNode.apply(this, args);
     }
-    [dartx.deleteFromDocument]() {
-      return this.deleteFromDocument();
+    [dartx.deleteFromDocument](...args) {
+      return this.deleteFromDocument.apply(this, args);
     }
-    [dartx.empty]() {
-      return this.empty();
+    [dartx.empty](...args) {
+      return this.empty.apply(this, args);
     }
-    [dartx.extend](node, offset) {
-      return this.extend(node, offset);
+    [dartx.extend](...args) {
+      return this.extend.apply(this, args);
     }
-    [dartx.getRangeAt](index) {
-      return this.getRangeAt(index);
+    [dartx.getRangeAt](...args) {
+      return this.getRangeAt.apply(this, args);
     }
-    [dartx.modify](alter, direction, granularity) {
-      return this.modify(alter, direction, granularity);
+    [dartx.modify](...args) {
+      return this.modify.apply(this, args);
     }
-    [dartx.removeAllRanges]() {
-      return this.removeAllRanges();
+    [dartx.removeAllRanges](...args) {
+      return this.removeAllRanges.apply(this, args);
     }
-    [dartx.selectAllChildren](node) {
-      return this.selectAllChildren(node);
+    [dartx.selectAllChildren](...args) {
+      return this.selectAllChildren.apply(this, args);
     }
-    [dartx.setBaseAndExtent](baseNode, baseOffset, extentNode, extentOffset) {
-      return this.setBaseAndExtent(baseNode, baseOffset, extentNode, extentOffset);
+    [dartx.setBaseAndExtent](...args) {
+      return this.setBaseAndExtent.apply(this, args);
     }
-    [dartx.setPosition](node, offset) {
-      return this.setPosition(node, offset);
+    [dartx.setPosition](...args) {
+      return this.setPosition.apply(this, args);
     }
   };
   dart.setSignature(html$.Selection, {
@@ -70375,8 +70375,8 @@
     get [dartx.targetUrl]() {
       return this.targetURL;
     }
-    [dartx.close]() {
-      return this.close();
+    [dartx.close](...args) {
+      return this.close.apply(this, args);
     }
     [dartx.postMessage](message, transfer) {
       if (transfer === void 0) transfer = null;
@@ -70389,11 +70389,11 @@
       this[_postMessage_2](message_1);
       return;
     }
-    [_postMessage_1](message, transfer) {
-      return this.postMessage(message, transfer);
+    [_postMessage_1](...args) {
+      return this.postMessage.apply(this, args);
     }
-    [_postMessage_2](message) {
-      return this.postMessage(message);
+    [_postMessage_2](...args) {
+      return this.postMessage.apply(this, args);
     }
   };
   dart.setSignature(html$.ServicePort, {
@@ -70431,18 +70431,18 @@
       }
       return this[_connect_2](url);
     }
-    [_connect_1](url, options) {
-      return this.connect(url, options);
+    [_connect_1](...args) {
+      return this.connect.apply(this, args);
     }
-    [_connect_2](url) {
-      return this.connect(url);
+    [_connect_2](...args) {
+      return this.connect.apply(this, args);
     }
     [dartx.match](options) {
       let options_1 = html_common.convertDartToNative_Dictionary(options);
       return this[_match_1](options_1);
     }
-    [_match_1](options) {
-      return this.match(options);
+    [_match_1](...args) {
+      return this.match.apply(this, args);
     }
     [dartx.matchAll](options) {
       if (options === void 0) options = null;
@@ -70452,11 +70452,11 @@
       }
       return this[_matchAll_2]();
     }
-    [_matchAll_1](options) {
-      return this.matchAll(options);
+    [_matchAll_1](...args) {
+      return this.matchAll.apply(this, args);
     }
-    [_matchAll_2]() {
-      return this.matchAll();
+    [_matchAll_2](...args) {
+      return this.matchAll.apply(this, args);
     }
     get [dartx.onMessage]() {
       return html$.ServicePortCollection.messageEvent.forTarget(this);
@@ -70512,8 +70512,8 @@
     get [dartx.targetUrl]() {
       return this.targetURL;
     }
-    [dartx.respondWith](response) {
-      return this.respondWith(response);
+    [dartx.respondWith](...args) {
+      return this.respondWith.apply(this, args);
     }
   };
   dart.setSignature(html$.ServicePortConnectEvent, {
@@ -70551,11 +70551,11 @@
     get [dartx.ready]() {
       return this.ready;
     }
-    [dartx.getRegistration](documentURL) {
-      return this.getRegistration(documentURL);
+    [dartx.getRegistration](...args) {
+      return this.getRegistration.apply(this, args);
     }
-    [dartx.getRegistrations]() {
-      return this.getRegistrations();
+    [dartx.getRegistrations](...args) {
+      return this.getRegistrations.apply(this, args);
     }
     [dartx.register](url, options) {
       if (options === void 0) options = null;
@@ -70565,11 +70565,11 @@
       }
       return this[_register_2](url);
     }
-    [_register_1](url, options) {
-      return this.register(url, options);
+    [_register_1](...args) {
+      return this.register.apply(this, args);
     }
-    [_register_2](url) {
-      return this.register(url);
+    [_register_2](...args) {
+      return this.register.apply(this, args);
     }
     get [dartx.onMessage]() {
       return html$.ServiceWorkerContainer.messageEvent.forTarget(this);
@@ -70617,8 +70617,8 @@
     get [dartx.registration]() {
       return this.registration;
     }
-    [dartx.skipWaiting]() {
-      return this.skipWaiting();
+    [dartx.skipWaiting](...args) {
+      return this.skipWaiting.apply(this, args);
     }
     get [dartx.onMessage]() {
       return html$.ServiceWorkerGlobalScope.messageEvent.forTarget(this);
@@ -70759,11 +70759,11 @@
       }
       return this[_getNotifications_2]();
     }
-    [_getNotifications_1](filter) {
-      return this.getNotifications(filter);
+    [_getNotifications_1](...args) {
+      return this.getNotifications.apply(this, args);
     }
-    [_getNotifications_2]() {
-      return this.getNotifications();
+    [_getNotifications_2](...args) {
+      return this.getNotifications.apply(this, args);
     }
     [dartx.showNotification](title, options) {
       if (options === void 0) options = null;
@@ -70773,17 +70773,17 @@
       }
       return this[_showNotification_2](title);
     }
-    [_showNotification_1](title, options) {
-      return this.showNotification(title, options);
+    [_showNotification_1](...args) {
+      return this.showNotification.apply(this, args);
     }
-    [_showNotification_2](title) {
-      return this.showNotification(title);
+    [_showNotification_2](...args) {
+      return this.showNotification.apply(this, args);
     }
-    [dartx.unregister]() {
-      return this.unregister();
+    [dartx.unregister](...args) {
+      return this.unregister.apply(this, args);
     }
-    [dartx.update]() {
-      return this.update();
+    [dartx.update](...args) {
+      return this.update.apply(this, args);
     }
   };
   dart.setSignature(html$.ServiceWorkerRegistration, {
@@ -70826,8 +70826,8 @@
     static get supported() {
       return html$.Element.isTagSupported('shadow');
     }
-    [dartx.getDistributedNodes]() {
-      return this.getDistributedNodes();
+    [dartx.getDistributedNodes](...args) {
+      return this.getDistributedNodes.apply(this, args);
     }
   };
   dart.defineNamedConstructor(html$.ShadowElement, 'created');
@@ -70882,17 +70882,17 @@
     get [dartx.styleSheets]() {
       return this.styleSheets;
     }
-    [dartx.clone](deep) {
-      return this.cloneNode(deep);
+    [dartx.clone](...args) {
+      return this.cloneNode.apply(this, args);
     }
-    [dartx.elementFromPoint](x, y) {
-      return this.elementFromPoint(x, y);
+    [dartx.elementFromPoint](...args) {
+      return this.elementFromPoint.apply(this, args);
     }
-    [dartx.elementsFromPoint](x, y) {
-      return this.elementsFromPoint(x, y);
+    [dartx.elementsFromPoint](...args) {
+      return this.elementsFromPoint.apply(this, args);
     }
-    [dartx.getSelection]() {
-      return this.getSelection();
+    [dartx.getSelection](...args) {
+      return this.getSelection.apply(this, args);
     }
     static get supported() {
       return !!(Element.prototype.createShadowRoot || Element.prototype.webkitCreateShadowRoot);
@@ -71102,20 +71102,20 @@
     get [dartx.updating]() {
       return this.updating;
     }
-    [dartx.abort]() {
-      return this.abort();
+    [dartx.abort](...args) {
+      return this.abort.apply(this, args);
     }
-    [dartx.appendBuffer](data) {
-      return this.appendBuffer(data);
+    [dartx.appendBuffer](...args) {
+      return this.appendBuffer.apply(this, args);
     }
-    [dartx.appendStream](stream, maxSize) {
-      return this.appendStream(stream, maxSize);
+    [dartx.appendStream](...args) {
+      return this.appendStream.apply(this, args);
     }
-    [dartx.appendTypedData](data) {
-      return this.appendBuffer(data);
+    [dartx.appendTypedData](...args) {
+      return this.appendBuffer.apply(this, args);
     }
-    [dartx.remove](start, end) {
-      return this.remove(start, end);
+    [dartx.remove](...args) {
+      return this.remove.apply(this, args);
     }
   };
   dart.setSignature(html$.SourceBuffer, {
@@ -71191,8 +71191,8 @@
     [dartx.elementAt](index) {
       return this[dartx._get](index);
     }
-    [dartx.item](index) {
-      return this.item(index);
+    [dartx.item](...args) {
+      return this.item.apply(this, args);
     }
   };
   html$.SourceBufferList[dart.implements] = () => [_js_helper.JavaScriptIndexingBehavior, ListOfSourceBuffer()];
@@ -71436,14 +71436,14 @@
     [dartx.elementAt](index) {
       return this[dartx._get](index);
     }
-    [dartx.addFromString](string, weight) {
-      return this.addFromString(string, weight);
+    [dartx.addFromString](...args) {
+      return this.addFromString.apply(this, args);
     }
-    [dartx.addFromUri](src, weight) {
-      return this.addFromUri(src, weight);
+    [dartx.addFromUri](...args) {
+      return this.addFromUri.apply(this, args);
     }
-    [dartx.item](index) {
-      return this.item(index);
+    [dartx.item](...args) {
+      return this.item.apply(this, args);
     }
   };
   html$.SpeechGrammarList[dart.implements] = () => [_js_helper.JavaScriptIndexingBehavior, ListOfSpeechGrammar()];
@@ -71543,14 +71543,14 @@
     set [dartx.serviceUri](value) {
       this.serviceURI = value;
     }
-    [dartx.abort]() {
-      return this.abort();
+    [dartx.abort](...args) {
+      return this.abort.apply(this, args);
     }
-    [dartx.start]() {
-      return this.start();
+    [dartx.start](...args) {
+      return this.start.apply(this, args);
     }
-    [dartx.stop]() {
-      return this.stop();
+    [dartx.stop](...args) {
+      return this.stop.apply(this, args);
     }
     get [dartx.onAudioEnd]() {
       return html$.SpeechRecognition.audioEndEvent.forTarget(this);
@@ -71810,8 +71810,8 @@
     get [dartx.length]() {
       return this.length;
     }
-    [dartx.item](index) {
-      return this.item(index);
+    [dartx.item](...args) {
+      return this.item.apply(this, args);
     }
   };
   dart.setSignature(html$.SpeechRecognitionResult, {
@@ -71846,20 +71846,20 @@
     get [dartx.speaking]() {
       return this.speaking;
     }
-    [dartx.cancel]() {
-      return this.cancel();
+    [dartx.cancel](...args) {
+      return this.cancel.apply(this, args);
     }
-    [dartx.getVoices]() {
-      return this.getVoices();
+    [dartx.getVoices](...args) {
+      return this.getVoices.apply(this, args);
     }
-    [dartx.pause]() {
-      return this.pause();
+    [dartx.pause](...args) {
+      return this.pause.apply(this, args);
     }
-    [dartx.resume]() {
-      return this.resume();
+    [dartx.resume](...args) {
+      return this.resume.apply(this, args);
     }
-    [dartx.speak](utterance) {
-      return this.speak(utterance);
+    [dartx.speak](...args) {
+      return this.speak.apply(this, args);
     }
   };
   dart.setSignature(html$.SpeechSynthesis, {
@@ -72124,8 +72124,8 @@
     static _() {
       dart.throw(new core.UnsupportedError("Not supported"));
     }
-    [dartx.add](name, port) {
-      return this.add(name, port);
+    [dartx.add](...args) {
+      return this.add.apply(this, args);
     }
     get [dartx.onMessage]() {
       return html$.StashedPortCollection.messageEvent.forTarget(this);
@@ -72228,29 +72228,29 @@
     get [_length$2]() {
       return this.length;
     }
-    [__delete__](index_OR_name) {
-      return this.__delete__(index_OR_name);
+    [__delete__](...args) {
+      return this.__delete__.apply(this, args);
     }
-    [__getter__](index_OR_name) {
-      return this.__getter__(index_OR_name);
+    [__getter__](...args) {
+      return this.__getter__.apply(this, args);
     }
-    [__setter__](index_OR_name, value) {
-      return this.__setter__(index_OR_name, value);
+    [__setter__](...args) {
+      return this.__setter__.apply(this, args);
     }
-    [_clear$1]() {
-      return this.clear();
+    [_clear$1](...args) {
+      return this.clear.apply(this, args);
     }
-    [_getItem](key) {
-      return this.getItem(key);
+    [_getItem](...args) {
+      return this.getItem.apply(this, args);
     }
-    [_key](index) {
-      return this.key(index);
+    [_key](...args) {
+      return this.key.apply(this, args);
     }
-    [_removeItem](key) {
-      return this.removeItem(key);
+    [_removeItem](...args) {
+      return this.removeItem.apply(this, args);
     }
-    [_setItem](key, data) {
-      return this.setItem(key, data);
+    [_setItem](...args) {
+      return this.setItem.apply(this, args);
     }
   };
   html$.Storage[dart.implements] = () => [MapOfString$String()];
@@ -72336,8 +72336,8 @@
     get [dartx.url]() {
       return this.url;
     }
-    [_initStorageEvent](typeArg, canBubbleArg, cancelableArg, keyArg, oldValueArg, newValueArg, urlArg, storageAreaArg) {
-      return this.initStorageEvent(typeArg, canBubbleArg, cancelableArg, keyArg, oldValueArg, newValueArg, urlArg, storageAreaArg);
+    [_initStorageEvent](...args) {
+      return this.initStorageEvent.apply(this, args);
     }
   };
   dart.setSignature(html$.StorageEvent, {
@@ -72395,11 +72395,11 @@
     get [dartx.supportedTypes]() {
       return this.supportedTypes;
     }
-    [dartx.queryInfo](type) {
-      return this.queryInfo(type);
+    [dartx.queryInfo](...args) {
+      return this.queryInfo.apply(this, args);
     }
-    [dartx.requestPersistentQuota](newQuota) {
-      return this.requestPersistentQuota(newQuota);
+    [dartx.requestPersistentQuota](...args) {
+      return this.requestPersistentQuota.apply(this, args);
     }
   };
   dart.setSignature(html$.StorageQuota, {
@@ -72482,8 +72482,8 @@
     get [dartx.type]() {
       return this.type;
     }
-    [dartx.matchMedium](mediaquery) {
-      return this.matchMedium(mediaquery);
+    [dartx.matchMedium](...args) {
+      return this.matchMedium.apply(this, args);
     }
   };
   dart.setSignature(html$.StyleMedia, {
@@ -72530,14 +72530,14 @@
     static _() {
       dart.throw(new core.UnsupportedError("Not supported"));
     }
-    [dartx.getRegistration](tag) {
-      return this.getRegistration(tag);
+    [dartx.getRegistration](...args) {
+      return this.getRegistration.apply(this, args);
     }
-    [dartx.getRegistrations]() {
-      return this.getRegistrations();
+    [dartx.getRegistrations](...args) {
+      return this.getRegistrations.apply(this, args);
     }
-    [dartx.permissionState]() {
-      return this.permissionState();
+    [dartx.permissionState](...args) {
+      return this.permissionState.apply(this, args);
     }
     [dartx.register](options) {
       if (options === void 0) options = null;
@@ -72547,11 +72547,11 @@
       }
       return this[_register_2]();
     }
-    [_register_1](options) {
-      return this.register(options);
+    [_register_1](...args) {
+      return this.register.apply(this, args);
     }
-    [_register_2]() {
-      return this.register();
+    [_register_2](...args) {
+      return this.register.apply(this, args);
     }
   };
   dart.setSignature(html$.SyncManager, {
@@ -72577,8 +72577,8 @@
     get [dartx.tag]() {
       return this.tag;
     }
-    [dartx.unregister]() {
-      return this.unregister();
+    [dartx.unregister](...args) {
+      return this.unregister.apply(this, args);
     }
   };
   dart.setSignature(html$.SyncRegistration, {
@@ -72756,8 +72756,8 @@
       this[dartx.children][dartx.add](tbody);
       return html$.TableSectionElement._check(tbody);
     }
-    [_nativeCreateTBody]() {
-      return this.createTBody();
+    [_nativeCreateTBody](...args) {
+      return this.createTBody.apply(this, args);
     }
     [dartx.createFragment](html, opts) {
       let validator = opts && 'validator' in opts ? opts.validator : null;
@@ -72809,29 +72809,29 @@
     set [dartx.tHead](value) {
       this.tHead = value;
     }
-    [_createCaption]() {
-      return this.createCaption();
+    [_createCaption](...args) {
+      return this.createCaption.apply(this, args);
     }
-    [_createTFoot]() {
-      return this.createTFoot();
+    [_createTFoot](...args) {
+      return this.createTFoot.apply(this, args);
     }
-    [_createTHead]() {
-      return this.createTHead();
+    [_createTHead](...args) {
+      return this.createTHead.apply(this, args);
     }
-    [dartx.deleteCaption]() {
-      return this.deleteCaption();
+    [dartx.deleteCaption](...args) {
+      return this.deleteCaption.apply(this, args);
     }
-    [dartx.deleteRow](index) {
-      return this.deleteRow(index);
+    [dartx.deleteRow](...args) {
+      return this.deleteRow.apply(this, args);
     }
-    [dartx.deleteTFoot]() {
-      return this.deleteTFoot();
+    [dartx.deleteTFoot](...args) {
+      return this.deleteTFoot.apply(this, args);
     }
-    [dartx.deleteTHead]() {
-      return this.deleteTHead();
+    [dartx.deleteTHead](...args) {
+      return this.deleteTHead.apply(this, args);
     }
-    [_insertRow](index) {
-      return this.insertRow(index);
+    [_insertRow](...args) {
+      return this.insertRow.apply(this, args);
     }
   };
   dart.defineNamedConstructor(html$.TableElement, 'created');
@@ -72926,11 +72926,11 @@
     get [dartx.sectionRowIndex]() {
       return this.sectionRowIndex;
     }
-    [dartx.deleteCell](index) {
-      return this.deleteCell(index);
+    [dartx.deleteCell](...args) {
+      return this.deleteCell.apply(this, args);
     }
-    [_insertCell](index) {
-      return this.insertCell(index);
+    [_insertCell](...args) {
+      return this.insertCell.apply(this, args);
     }
   };
   dart.defineNamedConstructor(html$.TableRowElement, 'created');
@@ -72992,11 +72992,11 @@
     get [_rows]() {
       return this.rows;
     }
-    [dartx.deleteRow](index) {
-      return this.deleteRow(index);
+    [dartx.deleteRow](...args) {
+      return this.deleteRow.apply(this, args);
     }
-    [_insertRow](index) {
-      return this.insertRow(index);
+    [_insertRow](...args) {
+      return this.insertRow.apply(this, args);
     }
   };
   dart.defineNamedConstructor(html$.TableSectionElement, 'created');
@@ -73260,23 +73260,23 @@
     set [dartx.wrap](value) {
       this.wrap = value;
     }
-    [dartx.checkValidity]() {
-      return this.checkValidity();
+    [dartx.checkValidity](...args) {
+      return this.checkValidity.apply(this, args);
     }
-    [dartx.reportValidity]() {
-      return this.reportValidity();
+    [dartx.reportValidity](...args) {
+      return this.reportValidity.apply(this, args);
     }
-    [dartx.select]() {
-      return this.select();
+    [dartx.select](...args) {
+      return this.select.apply(this, args);
     }
-    [dartx.setCustomValidity](error) {
-      return this.setCustomValidity(error);
+    [dartx.setCustomValidity](...args) {
+      return this.setCustomValidity.apply(this, args);
     }
-    [dartx.setRangeText](replacement, opts) {
-      return this.setRangeText(replacement, opts);
+    [dartx.setRangeText](...args) {
+      return this.setRangeText.apply(this, args);
     }
-    [dartx.setSelectionRange](start, end, direction) {
-      return this.setSelectionRange(start, end, direction);
+    [dartx.setSelectionRange](...args) {
+      return this.setSelectionRange.apply(this, args);
     }
   };
   dart.defineNamedConstructor(html$.TextAreaElement, 'created');
@@ -73347,8 +73347,8 @@
     get [dartx.data]() {
       return this.data;
     }
-    [_initTextEvent](typeArg, canBubbleArg, cancelableArg, viewArg, dataArg) {
-      return this.initTextEvent(typeArg, canBubbleArg, cancelableArg, viewArg, dataArg);
+    [_initTextEvent](...args) {
+      return this.initTextEvent.apply(this, args);
     }
   };
   dart.setSignature(html$.TextEvent, {
@@ -73479,17 +73479,17 @@
     get [dartx.regions]() {
       return this.regions;
     }
-    [dartx.addCue](cue) {
-      return this.addCue(cue);
+    [dartx.addCue](...args) {
+      return this.addCue.apply(this, args);
     }
-    [dartx.addRegion](region) {
-      return this.addRegion(region);
+    [dartx.addRegion](...args) {
+      return this.addRegion.apply(this, args);
     }
-    [dartx.removeCue](cue) {
-      return this.removeCue(cue);
+    [dartx.removeCue](...args) {
+      return this.removeCue.apply(this, args);
     }
-    [dartx.removeRegion](region) {
-      return this.removeRegion(region);
+    [dartx.removeRegion](...args) {
+      return this.removeRegion.apply(this, args);
     }
     get [dartx.onCueChange]() {
       return html$.TextTrack.cueChangeEvent.forTarget(this);
@@ -73650,11 +73650,11 @@
     [dartx.elementAt](index) {
       return this[dartx._get](index);
     }
-    [dartx.getCueById](id) {
-      return this.getCueById(id);
+    [dartx.getCueById](...args) {
+      return this.getCueById.apply(this, args);
     }
-    [dartx.item](index) {
-      return this.item(index);
+    [dartx.item](...args) {
+      return this.item.apply(this, args);
     }
   };
   html$.TextTrackCueList[dart.implements] = () => [ListOfTextTrackCue(), _js_helper.JavaScriptIndexingBehavior];
@@ -73732,11 +73732,11 @@
     [dartx.elementAt](index) {
       return this[dartx._get](index);
     }
-    [dartx.getTrackById](id) {
-      return this.getTrackById(id);
+    [dartx.getTrackById](...args) {
+      return this.getTrackById.apply(this, args);
     }
-    [dartx.item](index) {
-      return this.item(index);
+    [dartx.item](...args) {
+      return this.item.apply(this, args);
     }
     get [dartx.onAddTrack]() {
       return html$.TextTrackList.addTrackEvent.forTarget(this);
@@ -73790,11 +73790,11 @@
     get [dartx.length]() {
       return this.length;
     }
-    [dartx.end](index) {
-      return this.end(index);
+    [dartx.end](...args) {
+      return this.end.apply(this, args);
     }
-    [dartx.start](index) {
-      return this.start(index);
+    [dartx.start](...args) {
+      return this.start.apply(this, args);
     }
   };
   dart.setSignature(html$.TimeRanges, {
@@ -74017,8 +74017,8 @@
     get [dartx.touches]() {
       return this.touches;
     }
-    [_initTouchEvent](touches, targetTouches, changedTouches, type, view, unused1, unused2, unused3, unused4, ctrlKey, altKey, shiftKey, metaKey) {
-      return this.initTouchEvent(touches, targetTouches, changedTouches, type, view, unused1, unused2, unused3, unused4, ctrlKey, altKey, shiftKey, metaKey);
+    [_initTouchEvent](...args) {
+      return this.initTouchEvent.apply(this, args);
     }
     static get supported() {
       return html_common.Device.isEventTypeSupported('TouchEvent');
@@ -74101,8 +74101,8 @@
     [dartx.elementAt](index) {
       return this[dartx._get](index);
     }
-    [dartx.item](index) {
-      return this.item(index);
+    [dartx.item](...args) {
+      return this.item.apply(this, args);
     }
   };
   html$.TouchList[dart.implements] = () => [_js_helper.JavaScriptIndexingBehavior, ListOfTouch()];
@@ -74212,8 +74212,8 @@
     get [dartx.length]() {
       return this.length;
     }
-    [dartx.item](index) {
-      return this.item(index);
+    [dartx.item](...args) {
+      return this.item.apply(this, args);
     }
   };
   dart.setSignature(html$.TrackDefaultList, {
@@ -74449,26 +74449,26 @@
     get [dartx.whatToShow]() {
       return this.whatToShow;
     }
-    [dartx.firstChild]() {
-      return this.firstChild();
+    [dartx.firstChild](...args) {
+      return this.firstChild.apply(this, args);
     }
-    [dartx.lastChild]() {
-      return this.lastChild();
+    [dartx.lastChild](...args) {
+      return this.lastChild.apply(this, args);
     }
-    [dartx.nextNode]() {
-      return this.nextNode();
+    [dartx.nextNode](...args) {
+      return this.nextNode.apply(this, args);
     }
-    [dartx.nextSibling]() {
-      return this.nextSibling();
+    [dartx.nextSibling](...args) {
+      return this.nextSibling.apply(this, args);
     }
-    [dartx.parentNode]() {
-      return this.parentNode();
+    [dartx.parentNode](...args) {
+      return this.parentNode.apply(this, args);
     }
-    [dartx.previousNode]() {
-      return this.previousNode();
+    [dartx.previousNode](...args) {
+      return this.previousNode.apply(this, args);
     }
-    [dartx.previousSibling]() {
-      return this.previousSibling();
+    [dartx.previousSibling](...args) {
+      return this.previousSibling.apply(this, args);
     }
   };
   dart.setSignature(html$.TreeWalker, {
@@ -75178,14 +75178,14 @@
     set [dartx.width](value) {
       this.width = value;
     }
-    [dartx.getVideoPlaybackQuality]() {
-      return this.getVideoPlaybackQuality();
+    [dartx.getVideoPlaybackQuality](...args) {
+      return this.getVideoPlaybackQuality.apply(this, args);
     }
-    [dartx.enterFullscreen]() {
-      return this.webkitEnterFullscreen();
+    [dartx.enterFullscreen](...args) {
+      return this.webkitEnterFullscreen.apply(this, args);
     }
-    [dartx.exitFullscreen]() {
-      return this.webkitExitFullscreen();
+    [dartx.exitFullscreen](...args) {
+      return this.webkitExitFullscreen.apply(this, args);
     }
   };
   dart.defineNamedConstructor(html$.VideoElement, 'created');
@@ -75302,11 +75302,11 @@
     get [dartx.selectedIndex]() {
       return this.selectedIndex;
     }
-    [__getter__](index) {
-      return this.__getter__(index);
+    [__getter__](...args) {
+      return this.__getter__.apply(this, args);
     }
-    [dartx.getTrackById](id) {
-      return this.getTrackById(id);
+    [dartx.getTrackById](...args) {
+      return this.getTrackById.apply(this, args);
     }
     get [dartx.onChange]() {
       return html$.VideoTrackList.changeEvent.forTarget(this);
@@ -75401,8 +75401,8 @@
     set [dartx.vertical](value) {
       this.vertical = value;
     }
-    [dartx.getCueAsHtml]() {
-      return this.getCueAsHTML();
+    [dartx.getCueAsHtml](...args) {
+      return this.getCueAsHTML.apply(this, args);
     }
   };
   dart.setSignature(html$.VttCue, {
@@ -75530,11 +75530,11 @@
     get [dartx.length]() {
       return this.length;
     }
-    [dartx.getRegionById](id) {
-      return this.getRegionById(id);
+    [dartx.getRegionById](...args) {
+      return this.getRegionById.apply(this, args);
     }
-    [dartx.item](index) {
-      return this.item(index);
+    [dartx.item](...args) {
+      return this.item.apply(this, args);
     }
   };
   dart.setSignature(html$.VttRegionList, {
@@ -75605,23 +75605,23 @@
     get [dartx.url]() {
       return this.url;
     }
-    [dartx.close](code, reason) {
-      return this.close(code, reason);
+    [dartx.close](...args) {
+      return this.close.apply(this, args);
     }
-    [dartx.send](data) {
-      return this.send(data);
+    [dartx.send](...args) {
+      return this.send.apply(this, args);
     }
-    [dartx.sendBlob](data) {
-      return this.send(data);
+    [dartx.sendBlob](...args) {
+      return this.send.apply(this, args);
     }
-    [dartx.sendByteBuffer](data) {
-      return this.send(data);
+    [dartx.sendByteBuffer](...args) {
+      return this.send.apply(this, args);
     }
-    [dartx.sendString](data) {
-      return this.send(data);
+    [dartx.sendString](...args) {
+      return this.send.apply(this, args);
     }
-    [dartx.sendTypedData](data) {
-      return this.send(data);
+    [dartx.sendTypedData](...args) {
+      return this.send.apply(this, args);
     }
     get [dartx.onClose]() {
       return html$.WebSocket.closeEvent.forTarget(this);
@@ -75792,14 +75792,14 @@
     get [_hasInitMouseScrollEvent]() {
       return !!this.initMouseScrollEvent;
     }
-    [_initMouseScrollEvent](type, canBubble, cancelable, view, detail, screenX, screenY, clientX, clientY, ctrlKey, altKey, shiftKey, metaKey, button, relatedTarget, axis) {
-      return this.initMouseScrollEvent(type, canBubble, cancelable, view, detail, screenX, screenY, clientX, clientY, ctrlKey, altKey, shiftKey, metaKey, button, relatedTarget, axis);
+    [_initMouseScrollEvent](...args) {
+      return this.initMouseScrollEvent.apply(this, args);
     }
     get [_hasInitWheelEvent]() {
       return !!this.initWheelEvent;
     }
-    [_initWheelEvent](eventType, canBubble, cancelable, view, detail, screenX, screenY, clientX, clientY, button, relatedTarget, modifiersList, deltaX, deltaY, deltaZ, deltaMode) {
-      return this.initWheelEvent(eventType, canBubble, cancelable, view, detail, screenX, screenY, clientX, clientY, button, relatedTarget, modifiersList, deltaX, deltaY, deltaZ, deltaMode);
+    [_initWheelEvent](...args) {
+      return this.initWheelEvent.apply(this, args);
     }
   };
   dart.setSignature(html$.WheelEvent, {
@@ -76061,11 +76061,11 @@
       this[_ensureRequestAnimationFrame]();
       this[_cancelAnimationFrame](id);
     }
-    [_requestAnimationFrame](callback) {
-      return this.requestAnimationFrame(callback);
+    [_requestAnimationFrame](...args) {
+      return this.requestAnimationFrame.apply(this, args);
     }
-    [_cancelAnimationFrame](id) {
-      return this.cancelAnimationFrame(id);
+    [_cancelAnimationFrame](...args) {
+      return this.cancelAnimationFrame.apply(this, args);
     }
     [_ensureRequestAnimationFrame]() {
       if (!!(this.requestAnimationFrame && this.cancelAnimationFrame)) return;
@@ -76258,20 +76258,20 @@
       }
       dart.throw(new core.ArgumentError("Incorrect number or type of arguments"));
     }
-    [__getter___1](index) {
-      return this.__getter__(index);
+    [__getter___1](...args) {
+      return this.__getter__.apply(this, args);
     }
-    [__getter___2](name) {
-      return this.__getter__(name);
+    [__getter___2](...args) {
+      return this.__getter__.apply(this, args);
     }
-    [dartx.alert](message) {
-      return this.alert(message);
+    [dartx.alert](...args) {
+      return this.alert.apply(this, args);
     }
-    [dartx.close]() {
-      return this.close();
+    [dartx.close](...args) {
+      return this.close.apply(this, args);
     }
-    [dartx.confirm](message) {
-      return this.confirm(message);
+    [dartx.confirm](...args) {
+      return this.confirm.apply(this, args);
     }
     [dartx.fetch](input, init) {
       if (init === void 0) init = null;
@@ -76281,35 +76281,35 @@
       }
       return this[_fetch_2](input);
     }
-    [_fetch_1](input, init) {
-      return this.fetch(input, init);
+    [_fetch_1](...args) {
+      return this.fetch.apply(this, args);
     }
-    [_fetch_2](input) {
-      return this.fetch(input);
+    [_fetch_2](...args) {
+      return this.fetch.apply(this, args);
     }
-    [dartx.find](string, caseSensitive, backwards, wrap, wholeWord, searchInFrames, showDialog) {
-      return this.find(string, caseSensitive, backwards, wrap, wholeWord, searchInFrames, showDialog);
+    [dartx.find](...args) {
+      return this.find.apply(this, args);
     }
-    [_getComputedStyle](elt, pseudoElt) {
-      return this.getComputedStyle(elt, pseudoElt);
+    [_getComputedStyle](...args) {
+      return this.getComputedStyle.apply(this, args);
     }
-    [dartx.getMatchedCssRules](element, pseudoElement) {
-      return this.getMatchedCSSRules(element, pseudoElement);
+    [dartx.getMatchedCssRules](...args) {
+      return this.getMatchedCSSRules.apply(this, args);
     }
-    [dartx.getSelection]() {
-      return this.getSelection();
+    [dartx.getSelection](...args) {
+      return this.getSelection.apply(this, args);
     }
-    [dartx.matchMedia](query) {
-      return this.matchMedia(query);
+    [dartx.matchMedia](...args) {
+      return this.matchMedia.apply(this, args);
     }
-    [dartx.moveBy](x, y) {
-      return this.moveBy(x, y);
+    [dartx.moveBy](...args) {
+      return this.moveBy.apply(this, args);
     }
-    [_moveTo](x, y) {
-      return this.moveTo(x, y);
+    [_moveTo](...args) {
+      return this.moveTo.apply(this, args);
     }
-    [dartx.openDatabase](name, version, displayName, estimatedSize, creationCallback) {
-      return this.openDatabase(name, version, displayName, estimatedSize, creationCallback);
+    [dartx.openDatabase](...args) {
+      return this.openDatabase.apply(this, args);
     }
     [dartx.postMessage](message, targetOrigin, transfer) {
       if (transfer === void 0) transfer = null;
@@ -76322,20 +76322,20 @@
       this[_postMessage_2](message_1, targetOrigin);
       return;
     }
-    [_postMessage_1](message, targetOrigin, transfer) {
-      return this.postMessage(message, targetOrigin, transfer);
+    [_postMessage_1](...args) {
+      return this.postMessage.apply(this, args);
     }
-    [_postMessage_2](message, targetOrigin) {
-      return this.postMessage(message, targetOrigin);
+    [_postMessage_2](...args) {
+      return this.postMessage.apply(this, args);
     }
-    [dartx.print]() {
-      return this.print();
+    [dartx.print](...args) {
+      return this.print.apply(this, args);
     }
-    [dartx.resizeBy](x, y) {
-      return this.resizeBy(x, y);
+    [dartx.resizeBy](...args) {
+      return this.resizeBy.apply(this, args);
     }
-    [dartx.resizeTo](x, y) {
-      return this.resizeTo(x, y);
+    [dartx.resizeTo](...args) {
+      return this.resizeTo.apply(this, args);
     }
     [dartx.scroll](options_OR_x, y, scrollOptions) {
       if (options_OR_x === void 0) options_OR_x = null;
@@ -76365,20 +76365,20 @@
       }
       dart.throw(new core.ArgumentError("Incorrect number or type of arguments"));
     }
-    [_scroll_1]() {
-      return this.scroll();
+    [_scroll_1](...args) {
+      return this.scroll.apply(this, args);
     }
-    [_scroll_2](options) {
-      return this.scroll(options);
+    [_scroll_2](...args) {
+      return this.scroll.apply(this, args);
     }
-    [_scroll_3](x, y) {
-      return this.scroll(x, y);
+    [_scroll_3](...args) {
+      return this.scroll.apply(this, args);
     }
-    [_scroll_4](x, y) {
-      return this.scroll(x, y);
+    [_scroll_4](...args) {
+      return this.scroll.apply(this, args);
     }
-    [_scroll_5](x, y, scrollOptions) {
-      return this.scroll(x, y, scrollOptions);
+    [_scroll_5](...args) {
+      return this.scroll.apply(this, args);
     }
     [dartx.scrollBy](options_OR_x, y, scrollOptions) {
       if (options_OR_x === void 0) options_OR_x = null;
@@ -76408,20 +76408,20 @@
       }
       dart.throw(new core.ArgumentError("Incorrect number or type of arguments"));
     }
-    [_scrollBy_1]() {
-      return this.scrollBy();
+    [_scrollBy_1](...args) {
+      return this.scrollBy.apply(this, args);
     }
-    [_scrollBy_2](options) {
-      return this.scrollBy(options);
+    [_scrollBy_2](...args) {
+      return this.scrollBy.apply(this, args);
     }
-    [_scrollBy_3](x, y) {
-      return this.scrollBy(x, y);
+    [_scrollBy_3](...args) {
+      return this.scrollBy.apply(this, args);
     }
-    [_scrollBy_4](x, y) {
-      return this.scrollBy(x, y);
+    [_scrollBy_4](...args) {
+      return this.scrollBy.apply(this, args);
     }
-    [_scrollBy_5](x, y, scrollOptions) {
-      return this.scrollBy(x, y, scrollOptions);
+    [_scrollBy_5](...args) {
+      return this.scrollBy.apply(this, args);
     }
     [dartx.scrollTo](options_OR_x, y, scrollOptions) {
       if (options_OR_x === void 0) options_OR_x = null;
@@ -76451,26 +76451,26 @@
       }
       dart.throw(new core.ArgumentError("Incorrect number or type of arguments"));
     }
-    [_scrollTo_1]() {
-      return this.scrollTo();
+    [_scrollTo_1](...args) {
+      return this.scrollTo.apply(this, args);
     }
-    [_scrollTo_2](options) {
-      return this.scrollTo(options);
+    [_scrollTo_2](...args) {
+      return this.scrollTo.apply(this, args);
     }
-    [_scrollTo_3](x, y) {
-      return this.scrollTo(x, y);
+    [_scrollTo_3](...args) {
+      return this.scrollTo.apply(this, args);
     }
-    [_scrollTo_4](x, y) {
-      return this.scrollTo(x, y);
+    [_scrollTo_4](...args) {
+      return this.scrollTo.apply(this, args);
     }
-    [_scrollTo_5](x, y, scrollOptions) {
-      return this.scrollTo(x, y, scrollOptions);
+    [_scrollTo_5](...args) {
+      return this.scrollTo.apply(this, args);
     }
-    [dartx.stop]() {
-      return this.stop();
+    [dartx.stop](...args) {
+      return this.stop.apply(this, args);
     }
-    [__requestFileSystem](type, size, successCallback, errorCallback) {
-      return this.webkitRequestFileSystem(type, size, successCallback, errorCallback);
+    [__requestFileSystem](...args) {
+      return this.webkitRequestFileSystem.apply(this, args);
     }
     [_requestFileSystem](type, size) {
       let completer = CompleterOfFileSystem().new();
@@ -76481,8 +76481,8 @@
       }, FileErrorTovoid()));
       return completer.future;
     }
-    [_resolveLocalFileSystemUrl](url, successCallback, errorCallback) {
-      return this.webkitResolveLocalFileSystemURL(url, successCallback, errorCallback);
+    [_resolveLocalFileSystemUrl](...args) {
+      return this.webkitResolveLocalFileSystemURL.apply(this, args);
     }
     [dartx.resolveLocalFileSystemUrl](url) {
       let completer = CompleterOfEntry().new();
@@ -76493,29 +76493,29 @@
       }, FileErrorTovoid()));
       return completer.future;
     }
-    [dartx.atob](atob) {
-      return this.atob(atob);
+    [dartx.atob](...args) {
+      return this.atob.apply(this, args);
     }
-    [dartx.btoa](btoa) {
-      return this.btoa(btoa);
+    [dartx.btoa](...args) {
+      return this.btoa.apply(this, args);
     }
-    [_setInterval_String](handler, timeout, arguments$) {
-      return this.setInterval(handler, timeout, arguments$);
+    [_setInterval_String](...args) {
+      return this.setInterval.apply(this, args);
     }
-    [_setTimeout_String](handler, timeout, arguments$) {
-      return this.setTimeout(handler, timeout, arguments$);
+    [_setTimeout_String](...args) {
+      return this.setTimeout.apply(this, args);
     }
-    [_clearInterval](handle) {
-      return this.clearInterval(handle);
+    [_clearInterval](...args) {
+      return this.clearInterval.apply(this, args);
     }
-    [_clearTimeout](handle) {
-      return this.clearTimeout(handle);
+    [_clearTimeout](...args) {
+      return this.clearTimeout.apply(this, args);
     }
-    [_setInterval](handler, timeout) {
-      return this.setInterval(handler, timeout);
+    [_setInterval](...args) {
+      return this.setInterval.apply(this, args);
     }
-    [_setTimeout](handler, timeout) {
-      return this.setTimeout(handler, timeout);
+    [_setTimeout](...args) {
+      return this.setTimeout.apply(this, args);
     }
     get [dartx.onContentLoaded]() {
       return html$.Window.contentLoadedEvent.forTarget(this);
@@ -77229,8 +77229,8 @@
     get [dartx.visibilityState]() {
       return this.visibilityState;
     }
-    [dartx.focus]() {
-      return this.focus();
+    [dartx.focus](...args) {
+      return this.focus.apply(this, args);
     }
   };
   dart.setSignature(html$.WindowClient, {
@@ -77360,14 +77360,14 @@
       this[_postMessage_2](message_1);
       return;
     }
-    [_postMessage_1](message, transfer) {
-      return this.postMessage(message, transfer);
+    [_postMessage_1](...args) {
+      return this.postMessage.apply(this, args);
     }
-    [_postMessage_2](message) {
-      return this.postMessage(message);
+    [_postMessage_2](...args) {
+      return this.postMessage.apply(this, args);
     }
-    [dartx.terminate]() {
-      return this.terminate();
+    [dartx.terminate](...args) {
+      return this.terminate.apply(this, args);
     }
     get [dartx.onError]() {
       return html$.Worker.errorEvent.forTarget(this);
@@ -77438,35 +77438,35 @@
     get [dartx.memory]() {
       return this.memory;
     }
-    [dartx.clearMarks](markName) {
-      return this.clearMarks(markName);
+    [dartx.clearMarks](...args) {
+      return this.clearMarks.apply(this, args);
     }
-    [dartx.clearMeasures](measureName) {
-      return this.clearMeasures(measureName);
+    [dartx.clearMeasures](...args) {
+      return this.clearMeasures.apply(this, args);
     }
-    [dartx.getEntries]() {
-      return this.getEntries();
+    [dartx.getEntries](...args) {
+      return this.getEntries.apply(this, args);
     }
-    [dartx.getEntriesByName](name, entryType) {
-      return this.getEntriesByName(name, entryType);
+    [dartx.getEntriesByName](...args) {
+      return this.getEntriesByName.apply(this, args);
     }
-    [dartx.getEntriesByType](entryType) {
-      return this.getEntriesByType(entryType);
+    [dartx.getEntriesByType](...args) {
+      return this.getEntriesByType.apply(this, args);
     }
-    [dartx.mark](markName) {
-      return this.mark(markName);
+    [dartx.mark](...args) {
+      return this.mark.apply(this, args);
     }
-    [dartx.measure](measureName, startMark, endMark) {
-      return this.measure(measureName, startMark, endMark);
+    [dartx.measure](...args) {
+      return this.measure.apply(this, args);
     }
-    [dartx.now]() {
-      return this.now();
+    [dartx.now](...args) {
+      return this.now.apply(this, args);
     }
-    [dartx.clearResourceTimings]() {
-      return this.webkitClearResourceTimings();
+    [dartx.clearResourceTimings](...args) {
+      return this.webkitClearResourceTimings.apply(this, args);
     }
-    [dartx.setResourceTimingBufferSize](maxSize) {
-      return this.webkitSetResourceTimingBufferSize(maxSize);
+    [dartx.setResourceTimingBufferSize](...args) {
+      return this.webkitSetResourceTimingBufferSize.apply(this, args);
     }
   };
   dart.setSignature(html$.WorkerPerformance, {
@@ -77501,14 +77501,14 @@
     static _create_1() {
       return new XPathEvaluator();
     }
-    [dartx.createExpression](expression, resolver) {
-      return this.createExpression(expression, resolver);
+    [dartx.createExpression](...args) {
+      return this.createExpression.apply(this, args);
     }
-    [dartx.createNSResolver](nodeResolver) {
-      return this.createNSResolver(nodeResolver);
+    [dartx.createNSResolver](...args) {
+      return this.createNSResolver.apply(this, args);
     }
-    [dartx.evaluate](expression, contextNode, resolver, type, inResult) {
-      return this.evaluate(expression, contextNode, resolver, type, inResult);
+    [dartx.evaluate](...args) {
+      return this.evaluate.apply(this, args);
     }
   };
   dart.setSignature(html$.XPathEvaluator, {
@@ -77532,8 +77532,8 @@
     static _() {
       dart.throw(new core.UnsupportedError("Not supported"));
     }
-    [dartx.evaluate](contextNode, type, inResult) {
-      return this.evaluate(contextNode, type, inResult);
+    [dartx.evaluate](...args) {
+      return this.evaluate.apply(this, args);
     }
   };
   dart.setSignature(html$.XPathExpression, {
@@ -77548,8 +77548,8 @@
     static _() {
       dart.throw(new core.UnsupportedError("Not supported"));
     }
-    [dartx.lookupNamespaceUri](prefix) {
-      return this.lookupNamespaceURI(prefix);
+    [dartx.lookupNamespaceUri](...args) {
+      return this.lookupNamespaceURI.apply(this, args);
     }
   };
   dart.setSignature(html$.XPathNSResolver, {
@@ -77593,11 +77593,11 @@
     get [dartx.stringValue]() {
       return this.stringValue;
     }
-    [dartx.iterateNext]() {
-      return this.iterateNext();
+    [dartx.iterateNext](...args) {
+      return this.iterateNext.apply(this, args);
     }
-    [dartx.snapshotItem](index) {
-      return this.snapshotItem(index);
+    [dartx.snapshotItem](...args) {
+      return this.snapshotItem.apply(this, args);
     }
   };
   dart.setSignature(html$.XPathResult, {
@@ -77661,8 +77661,8 @@
     static _create_1() {
       return new XMLSerializer();
     }
-    [dartx.serializeToString](root) {
-      return this.serializeToString(root);
+    [dartx.serializeToString](...args) {
+      return this.serializeToString.apply(this, args);
     }
   };
   dart.setSignature(html$.XmlSerializer, {
@@ -77698,29 +77698,29 @@
     static get supported() {
       return !!window.XSLTProcessor;
     }
-    [dartx.clearParameters]() {
-      return this.clearParameters();
+    [dartx.clearParameters](...args) {
+      return this.clearParameters.apply(this, args);
     }
-    [dartx.getParameter](namespaceURI, localName) {
-      return this.getParameter(namespaceURI, localName);
+    [dartx.getParameter](...args) {
+      return this.getParameter.apply(this, args);
     }
-    [dartx.importStylesheet](style) {
-      return this.importStylesheet(style);
+    [dartx.importStylesheet](...args) {
+      return this.importStylesheet.apply(this, args);
     }
-    [dartx.removeParameter](namespaceURI, localName) {
-      return this.removeParameter(namespaceURI, localName);
+    [dartx.removeParameter](...args) {
+      return this.removeParameter.apply(this, args);
     }
-    [dartx.reset]() {
-      return this.reset();
+    [dartx.reset](...args) {
+      return this.reset.apply(this, args);
     }
-    [dartx.setParameter](namespaceURI, localName, value) {
-      return this.setParameter(namespaceURI, localName, value);
+    [dartx.setParameter](...args) {
+      return this.setParameter.apply(this, args);
     }
-    [dartx.transformToDocument](source) {
-      return this.transformToDocument(source);
+    [dartx.transformToDocument](...args) {
+      return this.transformToDocument.apply(this, args);
     }
-    [dartx.transformToFragment](source, output) {
-      return this.transformToFragment(source, output);
+    [dartx.transformToFragment](...args) {
+      return this.transformToFragment.apply(this, args);
     }
   };
   dart.setSignature(html$.XsltProcessor, {
@@ -77985,11 +77985,11 @@
     [dartx.elementAt](index) {
       return this[dartx._get](index);
     }
-    [__getter__](index) {
-      return this.__getter__(index);
+    [__getter__](...args) {
+      return this.__getter__.apply(this, args);
     }
-    [dartx.item](index) {
-      return this.item(index);
+    [dartx.item](...args) {
+      return this.item.apply(this, args);
     }
   };
   html$._ClientRectList[dart.implements] = () => [ListOfRectangleOfnum()];
@@ -78065,8 +78065,8 @@
     [dartx.elementAt](index) {
       return this[dartx._get](index);
     }
-    [dartx.item](index) {
-      return this.item(index);
+    [dartx.item](...args) {
+      return this.item.apply(this, args);
     }
   };
   html$._CssRuleList[dart.implements] = () => [_js_helper.JavaScriptIndexingBehavior, ListOfCssRule()];
@@ -78318,8 +78318,8 @@
     [dartx.elementAt](index) {
       return this[dartx._get](index);
     }
-    [dartx.item](index) {
-      return this.item(index);
+    [dartx.item](...args) {
+      return this.item.apply(this, args);
     }
   };
   html$._GamepadList[dart.implements] = () => [_js_helper.JavaScriptIndexingBehavior, ListOfGamepad()];
@@ -78344,8 +78344,8 @@
     static _() {
       dart.throw(new core.UnsupportedError("Not supported"));
     }
-    [_item](index) {
-      return this.item(index);
+    [_item](...args) {
+      return this.item.apply(this, args);
     }
   };
   dart.setSignature(html$._HTMLAllCollection, {
@@ -78509,26 +78509,26 @@
     [dartx.elementAt](index) {
       return this[dartx._get](index);
     }
-    [dartx.getNamedItem](name) {
-      return this.getNamedItem(name);
+    [dartx.getNamedItem](...args) {
+      return this.getNamedItem.apply(this, args);
     }
-    [dartx.getNamedItemNS](namespaceURI, localName) {
-      return this.getNamedItemNS(namespaceURI, localName);
+    [dartx.getNamedItemNS](...args) {
+      return this.getNamedItemNS.apply(this, args);
     }
-    [dartx.item](index) {
-      return this.item(index);
+    [dartx.item](...args) {
+      return this.item.apply(this, args);
     }
-    [dartx.removeNamedItem](name) {
-      return this.removeNamedItem(name);
+    [dartx.removeNamedItem](...args) {
+      return this.removeNamedItem.apply(this, args);
     }
-    [dartx.removeNamedItemNS](namespaceURI, localName) {
-      return this.removeNamedItemNS(namespaceURI, localName);
+    [dartx.removeNamedItemNS](...args) {
+      return this.removeNamedItemNS.apply(this, args);
     }
-    [dartx.setNamedItem](attr) {
-      return this.setNamedItem(attr);
+    [dartx.setNamedItem](...args) {
+      return this.setNamedItem.apply(this, args);
     }
-    [dartx.setNamedItemNS](attr) {
-      return this.setNamedItemNS(attr);
+    [dartx.setNamedItemNS](...args) {
+      return this.setNamedItemNS.apply(this, args);
     }
   };
   html$._NamedNodeMap[dart.implements] = () => [_js_helper.JavaScriptIndexingBehavior, ListOfNode()];
@@ -78610,8 +78610,8 @@
     get [dartx.url]() {
       return this.url;
     }
-    [dartx.clone]() {
-      return this.clone();
+    [dartx.clone](...args) {
+      return this.clone.apply(this, args);
     }
   };
   dart.setSignature(html$._Request, {
@@ -78737,8 +78737,8 @@
     [dartx.elementAt](index) {
       return this[dartx._get](index);
     }
-    [dartx.item](index) {
-      return this.item(index);
+    [dartx.item](...args) {
+      return this.item.apply(this, args);
     }
   };
   html$._SpeechRecognitionResultList[dart.implements] = () => [_js_helper.JavaScriptIndexingBehavior, ListOfSpeechRecognitionResult()];
@@ -78812,11 +78812,11 @@
     [dartx.elementAt](index) {
       return this[dartx._get](index);
     }
-    [__getter__](name) {
-      return this.__getter__(name);
+    [__getter__](...args) {
+      return this.__getter__.apply(this, args);
     }
-    [dartx.item](index) {
-      return this.item(index);
+    [dartx.item](...args) {
+      return this.item.apply(this, args);
     }
   };
   html$._StyleSheetList[dart.implements] = () => [_js_helper.JavaScriptIndexingBehavior, ListOfStyleSheet()];
@@ -84008,11 +84008,11 @@
     get [dartx.viewportElement]() {
       return this.viewportElement;
     }
-    [dartx.blur]() {
-      return this.blur();
+    [dartx.blur](...args) {
+      return this.blur.apply(this, args);
     }
-    [dartx.focus]() {
-      return this.focus();
+    [dartx.focus](...args) {
+      return this.focus.apply(this, args);
     }
     get [dartx.onAbort]() {
       return svg$.SvgElement.abortEvent.forElement(this);
@@ -84441,17 +84441,17 @@
     get [dartx.transform]() {
       return this.transform;
     }
-    [dartx.getBBox]() {
-      return this.getBBox();
+    [dartx.getBBox](...args) {
+      return this.getBBox.apply(this, args);
     }
-    [dartx.getCtm]() {
-      return this.getCTM();
+    [dartx.getCtm](...args) {
+      return this.getCTM.apply(this, args);
     }
-    [dartx.getScreenCtm]() {
-      return this.getScreenCTM();
+    [dartx.getScreenCtm](...args) {
+      return this.getScreenCTM.apply(this, args);
     }
-    [dartx.getTransformToElement](element) {
-      return this.getTransformToElement(element);
+    [dartx.getTransformToElement](...args) {
+      return this.getTransformToElement.apply(this, args);
     }
     get [dartx.requiredExtensions]() {
       return this.requiredExtensions;
@@ -84462,8 +84462,8 @@
     get [dartx.systemLanguage]() {
       return this.systemLanguage;
     }
-    [dartx.hasExtension](extension) {
-      return this.hasExtension(extension);
+    [dartx.hasExtension](...args) {
+      return this.hasExtension.apply(this, args);
     }
   };
   dart.defineNamedConstructor(svg$.GraphicsElement, 'created');
@@ -84560,11 +84560,11 @@
     set [dartx.valueInSpecifiedUnits](value) {
       this.valueInSpecifiedUnits = value;
     }
-    [dartx.convertToSpecifiedUnits](unitType) {
-      return this.convertToSpecifiedUnits(unitType);
+    [dartx.convertToSpecifiedUnits](...args) {
+      return this.convertToSpecifiedUnits.apply(this, args);
     }
-    [dartx.newValueSpecifiedUnits](unitType, valueInSpecifiedUnits) {
-      return this.newValueSpecifiedUnits(unitType, valueInSpecifiedUnits);
+    [dartx.newValueSpecifiedUnits](...args) {
+      return this.newValueSpecifiedUnits.apply(this, args);
     }
   };
   dart.setSignature(svg$.Angle, {
@@ -84624,26 +84624,26 @@
     get [dartx.targetElement]() {
       return this.targetElement;
     }
-    [dartx.beginElement]() {
-      return this.beginElement();
+    [dartx.beginElement](...args) {
+      return this.beginElement.apply(this, args);
     }
-    [dartx.beginElementAt](offset) {
-      return this.beginElementAt(offset);
+    [dartx.beginElementAt](...args) {
+      return this.beginElementAt.apply(this, args);
     }
-    [dartx.endElement]() {
-      return this.endElement();
+    [dartx.endElement](...args) {
+      return this.endElement.apply(this, args);
     }
-    [dartx.endElementAt](offset) {
-      return this.endElementAt(offset);
+    [dartx.endElementAt](...args) {
+      return this.endElementAt.apply(this, args);
     }
-    [dartx.getCurrentTime]() {
-      return this.getCurrentTime();
+    [dartx.getCurrentTime](...args) {
+      return this.getCurrentTime.apply(this, args);
     }
-    [dartx.getSimpleDuration]() {
-      return this.getSimpleDuration();
+    [dartx.getSimpleDuration](...args) {
+      return this.getSimpleDuration.apply(this, args);
     }
-    [dartx.getStartTime]() {
-      return this.getStartTime();
+    [dartx.getStartTime](...args) {
+      return this.getStartTime.apply(this, args);
     }
     get [dartx.requiredExtensions]() {
       return this.requiredExtensions;
@@ -84654,8 +84654,8 @@
     get [dartx.systemLanguage]() {
       return this.systemLanguage;
     }
-    [dartx.hasExtension](extension) {
-      return this.hasExtension(extension);
+    [dartx.hasExtension](...args) {
+      return this.hasExtension.apply(this, args);
     }
   };
   dart.defineNamedConstructor(svg$.AnimationElement, 'created');
@@ -85058,11 +85058,11 @@
     created() {
       super.created();
     }
-    [dartx.isPointInFill](point) {
-      return this.isPointInFill(point);
+    [dartx.isPointInFill](...args) {
+      return this.isPointInFill.apply(this, args);
     }
-    [dartx.isPointInStroke](point) {
-      return this.isPointInStroke(point);
+    [dartx.isPointInStroke](...args) {
+      return this.isPointInStroke.apply(this, args);
     }
   };
   dart.defineNamedConstructor(svg$.GeometryElement, 'created');
@@ -86188,8 +86188,8 @@
     get [dartx.stdDeviationY]() {
       return this.stdDeviationY;
     }
-    [dartx.setStdDeviation](stdDeviationX, stdDeviationY) {
-      return this.setStdDeviation(stdDeviationX, stdDeviationY);
+    [dartx.setStdDeviation](...args) {
+      return this.setStdDeviation.apply(this, args);
     }
     get [dartx.height]() {
       return this.height;
@@ -87274,11 +87274,11 @@
     set [dartx.valueInSpecifiedUnits](value) {
       this.valueInSpecifiedUnits = value;
     }
-    [dartx.convertToSpecifiedUnits](unitType) {
-      return this.convertToSpecifiedUnits(unitType);
+    [dartx.convertToSpecifiedUnits](...args) {
+      return this.convertToSpecifiedUnits.apply(this, args);
     }
-    [dartx.newValueSpecifiedUnits](unitType, valueInSpecifiedUnits) {
-      return this.newValueSpecifiedUnits(unitType, valueInSpecifiedUnits);
+    [dartx.newValueSpecifiedUnits](...args) {
+      return this.newValueSpecifiedUnits.apply(this, args);
     }
   };
   dart.setSignature(svg$.Length, {
@@ -87383,29 +87383,29 @@
     [dartx.elementAt](index) {
       return this[dartx._get](index);
     }
-    [__setter__$](index, newItem) {
-      return this.__setter__(index, newItem);
+    [__setter__$](...args) {
+      return this.__setter__.apply(this, args);
     }
-    [dartx.appendItem](newItem) {
-      return this.appendItem(newItem);
+    [dartx.appendItem](...args) {
+      return this.appendItem.apply(this, args);
     }
-    [dartx.clear]() {
-      return this.clear();
+    [dartx.clear](...args) {
+      return this.clear.apply(this, args);
     }
-    [dartx.getItem](index) {
-      return this.getItem(index);
+    [dartx.getItem](...args) {
+      return this.getItem.apply(this, args);
     }
-    [dartx.initialize](newItem) {
-      return this.initialize(newItem);
+    [dartx.initialize](...args) {
+      return this.initialize.apply(this, args);
     }
-    [dartx.insertItemBefore](newItem, index) {
-      return this.insertItemBefore(newItem, index);
+    [dartx.insertItemBefore](...args) {
+      return this.insertItemBefore.apply(this, args);
     }
-    [dartx.removeItem](index) {
-      return this.removeItem(index);
+    [dartx.removeItem](...args) {
+      return this.removeItem.apply(this, args);
     }
-    [dartx.replaceItem](newItem, index) {
-      return this.replaceItem(newItem, index);
+    [dartx.replaceItem](...args) {
+      return this.replaceItem.apply(this, args);
     }
   };
   svg$.LengthList[dart.implements] = () => [ListOfLength()];
@@ -87637,11 +87637,11 @@
     get [dartx.refY]() {
       return this.refY;
     }
-    [dartx.setOrientToAngle](angle) {
-      return this.setOrientToAngle(angle);
+    [dartx.setOrientToAngle](...args) {
+      return this.setOrientToAngle.apply(this, args);
     }
-    [dartx.setOrientToAuto]() {
-      return this.setOrientToAuto();
+    [dartx.setOrientToAuto](...args) {
+      return this.setOrientToAuto.apply(this, args);
     }
     get [dartx.preserveAspectRatio]() {
       return this.preserveAspectRatio;
@@ -87747,8 +87747,8 @@
     get [dartx.systemLanguage]() {
       return this.systemLanguage;
     }
-    [dartx.hasExtension](extension) {
-      return this.hasExtension(extension);
+    [dartx.hasExtension](...args) {
+      return this.hasExtension.apply(this, args);
     }
   };
   dart.defineNamedConstructor(svg$.MaskElement, 'created');
@@ -87832,38 +87832,38 @@
     set [dartx.f](value) {
       this.f = value;
     }
-    [dartx.flipX]() {
-      return this.flipX();
+    [dartx.flipX](...args) {
+      return this.flipX.apply(this, args);
     }
-    [dartx.flipY]() {
-      return this.flipY();
+    [dartx.flipY](...args) {
+      return this.flipY.apply(this, args);
     }
-    [dartx.inverse]() {
-      return this.inverse();
+    [dartx.inverse](...args) {
+      return this.inverse.apply(this, args);
     }
-    [dartx.multiply](secondMatrix) {
-      return this.multiply(secondMatrix);
+    [dartx.multiply](...args) {
+      return this.multiply.apply(this, args);
     }
-    [dartx.rotate](angle) {
-      return this.rotate(angle);
+    [dartx.rotate](...args) {
+      return this.rotate.apply(this, args);
     }
-    [dartx.rotateFromVector](x, y) {
-      return this.rotateFromVector(x, y);
+    [dartx.rotateFromVector](...args) {
+      return this.rotateFromVector.apply(this, args);
     }
-    [dartx.scale](scaleFactor) {
-      return this.scale(scaleFactor);
+    [dartx.scale](...args) {
+      return this.scale.apply(this, args);
     }
-    [dartx.scaleNonUniform](scaleFactorX, scaleFactorY) {
-      return this.scaleNonUniform(scaleFactorX, scaleFactorY);
+    [dartx.scaleNonUniform](...args) {
+      return this.scaleNonUniform.apply(this, args);
     }
-    [dartx.skewX](angle) {
-      return this.skewX(angle);
+    [dartx.skewX](...args) {
+      return this.skewX.apply(this, args);
     }
-    [dartx.skewY](angle) {
-      return this.skewY(angle);
+    [dartx.skewY](...args) {
+      return this.skewY.apply(this, args);
     }
-    [dartx.translate](x, y) {
-      return this.translate(x, y);
+    [dartx.translate](...args) {
+      return this.translate.apply(this, args);
     }
   };
   dart.setSignature(svg$.Matrix, {
@@ -87989,29 +87989,29 @@
     [dartx.elementAt](index) {
       return this[dartx._get](index);
     }
-    [__setter__$](index, newItem) {
-      return this.__setter__(index, newItem);
+    [__setter__$](...args) {
+      return this.__setter__.apply(this, args);
     }
-    [dartx.appendItem](newItem) {
-      return this.appendItem(newItem);
+    [dartx.appendItem](...args) {
+      return this.appendItem.apply(this, args);
     }
-    [dartx.clear]() {
-      return this.clear();
+    [dartx.clear](...args) {
+      return this.clear.apply(this, args);
     }
-    [dartx.getItem](index) {
-      return this.getItem(index);
+    [dartx.getItem](...args) {
+      return this.getItem.apply(this, args);
     }
-    [dartx.initialize](newItem) {
-      return this.initialize(newItem);
+    [dartx.initialize](...args) {
+      return this.initialize.apply(this, args);
     }
-    [dartx.insertItemBefore](newItem, index) {
-      return this.insertItemBefore(newItem, index);
+    [dartx.insertItemBefore](...args) {
+      return this.insertItemBefore.apply(this, args);
     }
-    [dartx.removeItem](index) {
-      return this.removeItem(index);
+    [dartx.removeItem](...args) {
+      return this.removeItem.apply(this, args);
     }
-    [dartx.replaceItem](newItem, index) {
-      return this.replaceItem(newItem, index);
+    [dartx.replaceItem](...args) {
+      return this.replaceItem.apply(this, args);
     }
   };
   svg$.NumberList[dart.implements] = () => [ListOfNumber()];
@@ -88098,71 +88098,71 @@
     get [dartx.pathSegList]() {
       return this.pathSegList;
     }
-    [dartx.createSvgPathSegArcAbs](x, y, r1, r2, angle, largeArcFlag, sweepFlag) {
-      return this.createSVGPathSegArcAbs(x, y, r1, r2, angle, largeArcFlag, sweepFlag);
+    [dartx.createSvgPathSegArcAbs](...args) {
+      return this.createSVGPathSegArcAbs.apply(this, args);
     }
-    [dartx.createSvgPathSegArcRel](x, y, r1, r2, angle, largeArcFlag, sweepFlag) {
-      return this.createSVGPathSegArcRel(x, y, r1, r2, angle, largeArcFlag, sweepFlag);
+    [dartx.createSvgPathSegArcRel](...args) {
+      return this.createSVGPathSegArcRel.apply(this, args);
     }
-    [dartx.createSvgPathSegClosePath]() {
-      return this.createSVGPathSegClosePath();
+    [dartx.createSvgPathSegClosePath](...args) {
+      return this.createSVGPathSegClosePath.apply(this, args);
     }
-    [dartx.createSvgPathSegCurvetoCubicAbs](x, y, x1, y1, x2, y2) {
-      return this.createSVGPathSegCurvetoCubicAbs(x, y, x1, y1, x2, y2);
+    [dartx.createSvgPathSegCurvetoCubicAbs](...args) {
+      return this.createSVGPathSegCurvetoCubicAbs.apply(this, args);
     }
-    [dartx.createSvgPathSegCurvetoCubicRel](x, y, x1, y1, x2, y2) {
-      return this.createSVGPathSegCurvetoCubicRel(x, y, x1, y1, x2, y2);
+    [dartx.createSvgPathSegCurvetoCubicRel](...args) {
+      return this.createSVGPathSegCurvetoCubicRel.apply(this, args);
     }
-    [dartx.createSvgPathSegCurvetoCubicSmoothAbs](x, y, x2, y2) {
-      return this.createSVGPathSegCurvetoCubicSmoothAbs(x, y, x2, y2);
+    [dartx.createSvgPathSegCurvetoCubicSmoothAbs](...args) {
+      return this.createSVGPathSegCurvetoCubicSmoothAbs.apply(this, args);
     }
-    [dartx.createSvgPathSegCurvetoCubicSmoothRel](x, y, x2, y2) {
-      return this.createSVGPathSegCurvetoCubicSmoothRel(x, y, x2, y2);
+    [dartx.createSvgPathSegCurvetoCubicSmoothRel](...args) {
+      return this.createSVGPathSegCurvetoCubicSmoothRel.apply(this, args);
     }
-    [dartx.createSvgPathSegCurvetoQuadraticAbs](x, y, x1, y1) {
-      return this.createSVGPathSegCurvetoQuadraticAbs(x, y, x1, y1);
+    [dartx.createSvgPathSegCurvetoQuadraticAbs](...args) {
+      return this.createSVGPathSegCurvetoQuadraticAbs.apply(this, args);
     }
-    [dartx.createSvgPathSegCurvetoQuadraticRel](x, y, x1, y1) {
-      return this.createSVGPathSegCurvetoQuadraticRel(x, y, x1, y1);
+    [dartx.createSvgPathSegCurvetoQuadraticRel](...args) {
+      return this.createSVGPathSegCurvetoQuadraticRel.apply(this, args);
     }
-    [dartx.createSvgPathSegCurvetoQuadraticSmoothAbs](x, y) {
-      return this.createSVGPathSegCurvetoQuadraticSmoothAbs(x, y);
+    [dartx.createSvgPathSegCurvetoQuadraticSmoothAbs](...args) {
+      return this.createSVGPathSegCurvetoQuadraticSmoothAbs.apply(this, args);
     }
-    [dartx.createSvgPathSegCurvetoQuadraticSmoothRel](x, y) {
-      return this.createSVGPathSegCurvetoQuadraticSmoothRel(x, y);
+    [dartx.createSvgPathSegCurvetoQuadraticSmoothRel](...args) {
+      return this.createSVGPathSegCurvetoQuadraticSmoothRel.apply(this, args);
     }
-    [dartx.createSvgPathSegLinetoAbs](x, y) {
-      return this.createSVGPathSegLinetoAbs(x, y);
+    [dartx.createSvgPathSegLinetoAbs](...args) {
+      return this.createSVGPathSegLinetoAbs.apply(this, args);
     }
-    [dartx.createSvgPathSegLinetoHorizontalAbs](x) {
-      return this.createSVGPathSegLinetoHorizontalAbs(x);
+    [dartx.createSvgPathSegLinetoHorizontalAbs](...args) {
+      return this.createSVGPathSegLinetoHorizontalAbs.apply(this, args);
     }
-    [dartx.createSvgPathSegLinetoHorizontalRel](x) {
-      return this.createSVGPathSegLinetoHorizontalRel(x);
+    [dartx.createSvgPathSegLinetoHorizontalRel](...args) {
+      return this.createSVGPathSegLinetoHorizontalRel.apply(this, args);
     }
-    [dartx.createSvgPathSegLinetoRel](x, y) {
-      return this.createSVGPathSegLinetoRel(x, y);
+    [dartx.createSvgPathSegLinetoRel](...args) {
+      return this.createSVGPathSegLinetoRel.apply(this, args);
     }
-    [dartx.createSvgPathSegLinetoVerticalAbs](y) {
-      return this.createSVGPathSegLinetoVerticalAbs(y);
+    [dartx.createSvgPathSegLinetoVerticalAbs](...args) {
+      return this.createSVGPathSegLinetoVerticalAbs.apply(this, args);
     }
-    [dartx.createSvgPathSegLinetoVerticalRel](y) {
-      return this.createSVGPathSegLinetoVerticalRel(y);
+    [dartx.createSvgPathSegLinetoVerticalRel](...args) {
+      return this.createSVGPathSegLinetoVerticalRel.apply(this, args);
     }
-    [dartx.createSvgPathSegMovetoAbs](x, y) {
-      return this.createSVGPathSegMovetoAbs(x, y);
+    [dartx.createSvgPathSegMovetoAbs](...args) {
+      return this.createSVGPathSegMovetoAbs.apply(this, args);
     }
-    [dartx.createSvgPathSegMovetoRel](x, y) {
-      return this.createSVGPathSegMovetoRel(x, y);
+    [dartx.createSvgPathSegMovetoRel](...args) {
+      return this.createSVGPathSegMovetoRel.apply(this, args);
     }
-    [dartx.getPathSegAtLength](distance) {
-      return this.getPathSegAtLength(distance);
+    [dartx.getPathSegAtLength](...args) {
+      return this.getPathSegAtLength.apply(this, args);
     }
-    [dartx.getPointAtLength](distance) {
-      return this.getPointAtLength(distance);
+    [dartx.getPointAtLength](...args) {
+      return this.getPointAtLength.apply(this, args);
     }
-    [dartx.getTotalLength]() {
-      return this.getTotalLength();
+    [dartx.getTotalLength](...args) {
+      return this.getTotalLength.apply(this, args);
     }
   };
   dart.defineNamedConstructor(svg$.PathElement, 'created');
@@ -88974,29 +88974,29 @@
     [dartx.elementAt](index) {
       return this[dartx._get](index);
     }
-    [__setter__$](index, newItem) {
-      return this.__setter__(index, newItem);
+    [__setter__$](...args) {
+      return this.__setter__.apply(this, args);
     }
-    [dartx.appendItem](newItem) {
-      return this.appendItem(newItem);
+    [dartx.appendItem](...args) {
+      return this.appendItem.apply(this, args);
     }
-    [dartx.clear]() {
-      return this.clear();
+    [dartx.clear](...args) {
+      return this.clear.apply(this, args);
     }
-    [dartx.getItem](index) {
-      return this.getItem(index);
+    [dartx.getItem](...args) {
+      return this.getItem.apply(this, args);
     }
-    [dartx.initialize](newItem) {
-      return this.initialize(newItem);
+    [dartx.initialize](...args) {
+      return this.initialize.apply(this, args);
     }
-    [dartx.insertItemBefore](newItem, index) {
-      return this.insertItemBefore(newItem, index);
+    [dartx.insertItemBefore](...args) {
+      return this.insertItemBefore.apply(this, args);
     }
-    [dartx.removeItem](index) {
-      return this.removeItem(index);
+    [dartx.removeItem](...args) {
+      return this.removeItem.apply(this, args);
     }
-    [dartx.replaceItem](newItem, index) {
-      return this.replaceItem(newItem, index);
+    [dartx.replaceItem](...args) {
+      return this.replaceItem.apply(this, args);
     }
   };
   svg$.PathSegList[dart.implements] = () => [ListOfPathSeg()];
@@ -89157,8 +89157,8 @@
     get [dartx.systemLanguage]() {
       return this.systemLanguage;
     }
-    [dartx.hasExtension](extension) {
-      return this.hasExtension(extension);
+    [dartx.hasExtension](...args) {
+      return this.hasExtension.apply(this, args);
     }
     get [dartx.href]() {
       return this.href;
@@ -89211,8 +89211,8 @@
     set [dartx.y](value) {
       this.y = value;
     }
-    [dartx.matrixTransform](matrix) {
-      return this.matrixTransform(matrix);
+    [dartx.matrixTransform](...args) {
+      return this.matrixTransform.apply(this, args);
     }
   };
   dart.setSignature(svg$.Point, {
@@ -89245,29 +89245,29 @@
     get [dartx.numberOfItems]() {
       return this.numberOfItems;
     }
-    [__setter__$](index, newItem) {
-      return this.__setter__(index, newItem);
+    [__setter__$](...args) {
+      return this.__setter__.apply(this, args);
     }
-    [dartx.appendItem](newItem) {
-      return this.appendItem(newItem);
+    [dartx.appendItem](...args) {
+      return this.appendItem.apply(this, args);
     }
-    [dartx.clear]() {
-      return this.clear();
+    [dartx.clear](...args) {
+      return this.clear.apply(this, args);
     }
-    [dartx.getItem](index) {
-      return this.getItem(index);
+    [dartx.getItem](...args) {
+      return this.getItem.apply(this, args);
     }
-    [dartx.initialize](newItem) {
-      return this.initialize(newItem);
+    [dartx.initialize](...args) {
+      return this.initialize.apply(this, args);
     }
-    [dartx.insertItemBefore](newItem, index) {
-      return this.insertItemBefore(newItem, index);
+    [dartx.insertItemBefore](...args) {
+      return this.insertItemBefore.apply(this, args);
     }
-    [dartx.removeItem](index) {
-      return this.removeItem(index);
+    [dartx.removeItem](...args) {
+      return this.removeItem.apply(this, args);
     }
-    [dartx.replaceItem](newItem, index) {
-      return this.replaceItem(newItem, index);
+    [dartx.replaceItem](...args) {
+      return this.replaceItem.apply(this, args);
     }
   };
   dart.setSignature(svg$.PointList, {
@@ -89739,29 +89739,29 @@
     [dartx.elementAt](index) {
       return this[dartx._get](index);
     }
-    [__setter__$](index, newItem) {
-      return this.__setter__(index, newItem);
+    [__setter__$](...args) {
+      return this.__setter__.apply(this, args);
     }
-    [dartx.appendItem](newItem) {
-      return this.appendItem(newItem);
+    [dartx.appendItem](...args) {
+      return this.appendItem.apply(this, args);
     }
-    [dartx.clear]() {
-      return this.clear();
+    [dartx.clear](...args) {
+      return this.clear.apply(this, args);
     }
-    [dartx.getItem](index) {
-      return this.getItem(index);
+    [dartx.getItem](...args) {
+      return this.getItem.apply(this, args);
     }
-    [dartx.initialize](newItem) {
-      return this.initialize(newItem);
+    [dartx.initialize](...args) {
+      return this.initialize.apply(this, args);
     }
-    [dartx.insertItemBefore](item, index) {
-      return this.insertItemBefore(item, index);
+    [dartx.insertItemBefore](...args) {
+      return this.insertItemBefore.apply(this, args);
     }
-    [dartx.removeItem](index) {
-      return this.removeItem(index);
+    [dartx.removeItem](...args) {
+      return this.removeItem.apply(this, args);
     }
-    [dartx.replaceItem](newItem, index) {
-      return this.replaceItem(newItem, index);
+    [dartx.replaceItem](...args) {
+      return this.replaceItem.apply(this, args);
     }
   };
   svg$.StringList[dart.implements] = () => [ListOfString()];
@@ -89988,74 +89988,74 @@
     get [dartx.y]() {
       return this.y;
     }
-    [dartx.animationsPaused]() {
-      return this.animationsPaused();
+    [dartx.animationsPaused](...args) {
+      return this.animationsPaused.apply(this, args);
     }
-    [dartx.checkEnclosure](element, rect) {
-      return this.checkEnclosure(element, rect);
+    [dartx.checkEnclosure](...args) {
+      return this.checkEnclosure.apply(this, args);
     }
-    [dartx.checkIntersection](element, rect) {
-      return this.checkIntersection(element, rect);
+    [dartx.checkIntersection](...args) {
+      return this.checkIntersection.apply(this, args);
     }
-    [dartx.createSvgAngle]() {
-      return this.createSVGAngle();
+    [dartx.createSvgAngle](...args) {
+      return this.createSVGAngle.apply(this, args);
     }
-    [dartx.createSvgLength]() {
-      return this.createSVGLength();
+    [dartx.createSvgLength](...args) {
+      return this.createSVGLength.apply(this, args);
     }
-    [dartx.createSvgMatrix]() {
-      return this.createSVGMatrix();
+    [dartx.createSvgMatrix](...args) {
+      return this.createSVGMatrix.apply(this, args);
     }
-    [dartx.createSvgNumber]() {
-      return this.createSVGNumber();
+    [dartx.createSvgNumber](...args) {
+      return this.createSVGNumber.apply(this, args);
     }
-    [dartx.createSvgPoint]() {
-      return this.createSVGPoint();
+    [dartx.createSvgPoint](...args) {
+      return this.createSVGPoint.apply(this, args);
     }
-    [dartx.createSvgRect]() {
-      return this.createSVGRect();
+    [dartx.createSvgRect](...args) {
+      return this.createSVGRect.apply(this, args);
     }
-    [dartx.createSvgTransform]() {
-      return this.createSVGTransform();
+    [dartx.createSvgTransform](...args) {
+      return this.createSVGTransform.apply(this, args);
     }
-    [dartx.createSvgTransformFromMatrix](matrix) {
-      return this.createSVGTransformFromMatrix(matrix);
+    [dartx.createSvgTransformFromMatrix](...args) {
+      return this.createSVGTransformFromMatrix.apply(this, args);
     }
-    [dartx.deselectAll]() {
-      return this.deselectAll();
+    [dartx.deselectAll](...args) {
+      return this.deselectAll.apply(this, args);
     }
-    [dartx.forceRedraw]() {
-      return this.forceRedraw();
+    [dartx.forceRedraw](...args) {
+      return this.forceRedraw.apply(this, args);
     }
-    [dartx.getCurrentTime]() {
-      return this.getCurrentTime();
+    [dartx.getCurrentTime](...args) {
+      return this.getCurrentTime.apply(this, args);
     }
-    [dartx.getElementById](elementId) {
-      return this.getElementById(elementId);
+    [dartx.getElementById](...args) {
+      return this.getElementById.apply(this, args);
     }
-    [dartx.getEnclosureList](rect, referenceElement) {
-      return this.getEnclosureList(rect, referenceElement);
+    [dartx.getEnclosureList](...args) {
+      return this.getEnclosureList.apply(this, args);
     }
-    [dartx.getIntersectionList](rect, referenceElement) {
-      return this.getIntersectionList(rect, referenceElement);
+    [dartx.getIntersectionList](...args) {
+      return this.getIntersectionList.apply(this, args);
     }
-    [dartx.pauseAnimations]() {
-      return this.pauseAnimations();
+    [dartx.pauseAnimations](...args) {
+      return this.pauseAnimations.apply(this, args);
     }
-    [dartx.setCurrentTime](seconds) {
-      return this.setCurrentTime(seconds);
+    [dartx.setCurrentTime](...args) {
+      return this.setCurrentTime.apply(this, args);
     }
-    [dartx.suspendRedraw](maxWaitMilliseconds) {
-      return this.suspendRedraw(maxWaitMilliseconds);
+    [dartx.suspendRedraw](...args) {
+      return this.suspendRedraw.apply(this, args);
     }
-    [dartx.unpauseAnimations]() {
-      return this.unpauseAnimations();
+    [dartx.unpauseAnimations](...args) {
+      return this.unpauseAnimations.apply(this, args);
     }
-    [dartx.unsuspendRedraw](suspendHandleId) {
-      return this.unsuspendRedraw(suspendHandleId);
+    [dartx.unsuspendRedraw](...args) {
+      return this.unsuspendRedraw.apply(this, args);
     }
-    [dartx.unsuspendRedrawAll]() {
-      return this.unsuspendRedrawAll();
+    [dartx.unsuspendRedrawAll](...args) {
+      return this.unsuspendRedrawAll.apply(this, args);
     }
     get [dartx.preserveAspectRatio]() {
       return this.preserveAspectRatio;
@@ -90208,32 +90208,32 @@
     get [dartx.textLength]() {
       return this.textLength;
     }
-    [dartx.getCharNumAtPosition](point) {
-      return this.getCharNumAtPosition(point);
+    [dartx.getCharNumAtPosition](...args) {
+      return this.getCharNumAtPosition.apply(this, args);
     }
-    [dartx.getComputedTextLength]() {
-      return this.getComputedTextLength();
+    [dartx.getComputedTextLength](...args) {
+      return this.getComputedTextLength.apply(this, args);
     }
-    [dartx.getEndPositionOfChar](charnum) {
-      return this.getEndPositionOfChar(charnum);
+    [dartx.getEndPositionOfChar](...args) {
+      return this.getEndPositionOfChar.apply(this, args);
     }
-    [dartx.getExtentOfChar](charnum) {
-      return this.getExtentOfChar(charnum);
+    [dartx.getExtentOfChar](...args) {
+      return this.getExtentOfChar.apply(this, args);
     }
-    [dartx.getNumberOfChars]() {
-      return this.getNumberOfChars();
+    [dartx.getNumberOfChars](...args) {
+      return this.getNumberOfChars.apply(this, args);
     }
-    [dartx.getRotationOfChar](charnum) {
-      return this.getRotationOfChar(charnum);
+    [dartx.getRotationOfChar](...args) {
+      return this.getRotationOfChar.apply(this, args);
     }
-    [dartx.getStartPositionOfChar](charnum) {
-      return this.getStartPositionOfChar(charnum);
+    [dartx.getStartPositionOfChar](...args) {
+      return this.getStartPositionOfChar.apply(this, args);
     }
-    [dartx.getSubStringLength](charnum, nchars) {
-      return this.getSubStringLength(charnum, nchars);
+    [dartx.getSubStringLength](...args) {
+      return this.getSubStringLength.apply(this, args);
     }
-    [dartx.selectSubString](charnum, nchars) {
-      return this.selectSubString(charnum, nchars);
+    [dartx.selectSubString](...args) {
+      return this.selectSubString.apply(this, args);
     }
   };
   dart.defineNamedConstructor(svg$.TextContentElement, 'created');
@@ -90500,23 +90500,23 @@
     get [dartx.type]() {
       return this.type;
     }
-    [dartx.setMatrix](matrix) {
-      return this.setMatrix(matrix);
+    [dartx.setMatrix](...args) {
+      return this.setMatrix.apply(this, args);
     }
-    [dartx.setRotate](angle, cx, cy) {
-      return this.setRotate(angle, cx, cy);
+    [dartx.setRotate](...args) {
+      return this.setRotate.apply(this, args);
     }
-    [dartx.setScale](sx, sy) {
-      return this.setScale(sx, sy);
+    [dartx.setScale](...args) {
+      return this.setScale.apply(this, args);
     }
-    [dartx.setSkewX](angle) {
-      return this.setSkewX(angle);
+    [dartx.setSkewX](...args) {
+      return this.setSkewX.apply(this, args);
     }
-    [dartx.setSkewY](angle) {
-      return this.setSkewY(angle);
+    [dartx.setSkewY](...args) {
+      return this.setSkewY.apply(this, args);
     }
-    [dartx.setTranslate](tx, ty) {
-      return this.setTranslate(tx, ty);
+    [dartx.setTranslate](...args) {
+      return this.setTranslate.apply(this, args);
     }
   };
   dart.setSignature(svg$.Transform, {
@@ -90617,35 +90617,35 @@
     [dartx.elementAt](index) {
       return this[dartx._get](index);
     }
-    [__setter__$](index, newItem) {
-      return this.__setter__(index, newItem);
+    [__setter__$](...args) {
+      return this.__setter__.apply(this, args);
     }
-    [dartx.appendItem](newItem) {
-      return this.appendItem(newItem);
+    [dartx.appendItem](...args) {
+      return this.appendItem.apply(this, args);
     }
-    [dartx.clear]() {
-      return this.clear();
+    [dartx.clear](...args) {
+      return this.clear.apply(this, args);
     }
-    [dartx.consolidate]() {
-      return this.consolidate();
+    [dartx.consolidate](...args) {
+      return this.consolidate.apply(this, args);
     }
-    [dartx.createSvgTransformFromMatrix](matrix) {
-      return this.createSVGTransformFromMatrix(matrix);
+    [dartx.createSvgTransformFromMatrix](...args) {
+      return this.createSVGTransformFromMatrix.apply(this, args);
     }
-    [dartx.getItem](index) {
-      return this.getItem(index);
+    [dartx.getItem](...args) {
+      return this.getItem.apply(this, args);
     }
-    [dartx.initialize](newItem) {
-      return this.initialize(newItem);
+    [dartx.initialize](...args) {
+      return this.initialize.apply(this, args);
     }
-    [dartx.insertItemBefore](newItem, index) {
-      return this.insertItemBefore(newItem, index);
+    [dartx.insertItemBefore](...args) {
+      return this.insertItemBefore.apply(this, args);
     }
-    [dartx.removeItem](index) {
-      return this.removeItem(index);
+    [dartx.removeItem](...args) {
+      return this.removeItem.apply(this, args);
     }
-    [dartx.replaceItem](newItem, index) {
-      return this.replaceItem(newItem, index);
+    [dartx.replaceItem](...args) {
+      return this.replaceItem.apply(this, args);
     }
   };
   svg$.TransformList[dart.implements] = () => [ListOfTransform()];
@@ -91053,11 +91053,11 @@
     get [dartx.numberOfOutputs]() {
       return this.numberOfOutputs;
     }
-    [_connect](destination, output, input) {
-      return this.connect(destination, output, input);
+    [_connect](...args) {
+      return this.connect.apply(this, args);
     }
-    [dartx.disconnect](output) {
-      return this.disconnect(output);
+    [dartx.disconnect](...args) {
+      return this.disconnect.apply(this, args);
     }
     [dartx.connectNode](destination, output, input) {
       if (output === void 0) output = 0;
@@ -91129,17 +91129,17 @@
     set [dartx.smoothingTimeConstant](value) {
       this.smoothingTimeConstant = value;
     }
-    [dartx.getByteFrequencyData](array) {
-      return this.getByteFrequencyData(array);
+    [dartx.getByteFrequencyData](...args) {
+      return this.getByteFrequencyData.apply(this, args);
     }
-    [dartx.getByteTimeDomainData](array) {
-      return this.getByteTimeDomainData(array);
+    [dartx.getByteTimeDomainData](...args) {
+      return this.getByteTimeDomainData.apply(this, args);
     }
-    [dartx.getFloatFrequencyData](array) {
-      return this.getFloatFrequencyData(array);
+    [dartx.getFloatFrequencyData](...args) {
+      return this.getFloatFrequencyData.apply(this, args);
     }
-    [dartx.getFloatTimeDomainData](array) {
-      return this.getFloatTimeDomainData(array);
+    [dartx.getFloatTimeDomainData](...args) {
+      return this.getFloatTimeDomainData.apply(this, args);
     }
   };
   dart.setSignature(web_audio.AnalyserNode, {
@@ -91183,8 +91183,8 @@
     get [dartx.sampleRate]() {
       return this.sampleRate;
     }
-    [dartx.getChannelData](channelIndex) {
-      return this.getChannelData(channelIndex);
+    [dartx.getChannelData](...args) {
+      return this.getChannelData.apply(this, args);
     }
   };
   dart.setSignature(web_audio.AudioBuffer, {
@@ -91346,59 +91346,59 @@
     get [dartx.sampleRate]() {
       return this.sampleRate;
     }
-    [dartx.createAnalyser]() {
-      return this.createAnalyser();
+    [dartx.createAnalyser](...args) {
+      return this.createAnalyser.apply(this, args);
     }
-    [dartx.createBiquadFilter]() {
-      return this.createBiquadFilter();
+    [dartx.createBiquadFilter](...args) {
+      return this.createBiquadFilter.apply(this, args);
     }
-    [dartx.createBuffer](numberOfChannels, numberOfFrames, sampleRate) {
-      return this.createBuffer(numberOfChannels, numberOfFrames, sampleRate);
+    [dartx.createBuffer](...args) {
+      return this.createBuffer.apply(this, args);
     }
-    [dartx.createBufferSource]() {
-      return this.createBufferSource();
+    [dartx.createBufferSource](...args) {
+      return this.createBufferSource.apply(this, args);
     }
-    [dartx.createChannelMerger](numberOfInputs) {
-      return this.createChannelMerger(numberOfInputs);
+    [dartx.createChannelMerger](...args) {
+      return this.createChannelMerger.apply(this, args);
     }
-    [dartx.createChannelSplitter](numberOfOutputs) {
-      return this.createChannelSplitter(numberOfOutputs);
+    [dartx.createChannelSplitter](...args) {
+      return this.createChannelSplitter.apply(this, args);
     }
-    [dartx.createConvolver]() {
-      return this.createConvolver();
+    [dartx.createConvolver](...args) {
+      return this.createConvolver.apply(this, args);
     }
-    [dartx.createDelay](maxDelayTime) {
-      return this.createDelay(maxDelayTime);
+    [dartx.createDelay](...args) {
+      return this.createDelay.apply(this, args);
     }
-    [dartx.createDynamicsCompressor]() {
-      return this.createDynamicsCompressor();
+    [dartx.createDynamicsCompressor](...args) {
+      return this.createDynamicsCompressor.apply(this, args);
     }
-    [dartx.createMediaElementSource](mediaElement) {
-      return this.createMediaElementSource(mediaElement);
+    [dartx.createMediaElementSource](...args) {
+      return this.createMediaElementSource.apply(this, args);
     }
-    [dartx.createMediaStreamDestination]() {
-      return this.createMediaStreamDestination();
+    [dartx.createMediaStreamDestination](...args) {
+      return this.createMediaStreamDestination.apply(this, args);
     }
-    [dartx.createMediaStreamSource](mediaStream) {
-      return this.createMediaStreamSource(mediaStream);
+    [dartx.createMediaStreamSource](...args) {
+      return this.createMediaStreamSource.apply(this, args);
     }
-    [dartx.createOscillator]() {
-      return this.createOscillator();
+    [dartx.createOscillator](...args) {
+      return this.createOscillator.apply(this, args);
     }
-    [dartx.createPanner]() {
-      return this.createPanner();
+    [dartx.createPanner](...args) {
+      return this.createPanner.apply(this, args);
     }
-    [dartx.createPeriodicWave](real, imag) {
-      return this.createPeriodicWave(real, imag);
+    [dartx.createPeriodicWave](...args) {
+      return this.createPeriodicWave.apply(this, args);
     }
-    [dartx.createWaveShaper]() {
-      return this.createWaveShaper();
+    [dartx.createWaveShaper](...args) {
+      return this.createWaveShaper.apply(this, args);
     }
-    [_decodeAudioData](audioData, successCallback, errorCallback) {
-      return this.decodeAudioData(audioData, successCallback, errorCallback);
+    [_decodeAudioData](...args) {
+      return this.decodeAudioData.apply(this, args);
     }
-    [dartx.startRendering]() {
-      return this.startRendering();
+    [dartx.startRendering](...args) {
+      return this.startRendering.apply(this, args);
     }
     get [dartx.onComplete]() {
       return web_audio.AudioContext.completeEvent.forTarget(this);
@@ -91519,14 +91519,14 @@
     set [dartx.speedOfSound](value) {
       this.speedOfSound = value;
     }
-    [dartx.setOrientation](x, y, z, xUp, yUp, zUp) {
-      return this.setOrientation(x, y, z, xUp, yUp, zUp);
+    [dartx.setOrientation](...args) {
+      return this.setOrientation.apply(this, args);
     }
-    [dartx.setPosition](x, y, z) {
-      return this.setPosition(x, y, z);
+    [dartx.setPosition](...args) {
+      return this.setPosition.apply(this, args);
     }
-    [dartx.setVelocity](x, y, z) {
-      return this.setVelocity(x, y, z);
+    [dartx.setVelocity](...args) {
+      return this.setVelocity.apply(this, args);
     }
   };
   dart.setSignature(web_audio.AudioListener, {
@@ -91565,23 +91565,23 @@
     set [dartx.value](value) {
       this.value = value;
     }
-    [dartx.cancelScheduledValues](startTime) {
-      return this.cancelScheduledValues(startTime);
+    [dartx.cancelScheduledValues](...args) {
+      return this.cancelScheduledValues.apply(this, args);
     }
-    [dartx.exponentialRampToValueAtTime](value, time) {
-      return this.exponentialRampToValueAtTime(value, time);
+    [dartx.exponentialRampToValueAtTime](...args) {
+      return this.exponentialRampToValueAtTime.apply(this, args);
     }
-    [dartx.linearRampToValueAtTime](value, time) {
-      return this.linearRampToValueAtTime(value, time);
+    [dartx.linearRampToValueAtTime](...args) {
+      return this.linearRampToValueAtTime.apply(this, args);
     }
-    [dartx.setTargetAtTime](target, time, timeConstant) {
-      return this.setTargetAtTime(target, time, timeConstant);
+    [dartx.setTargetAtTime](...args) {
+      return this.setTargetAtTime.apply(this, args);
     }
-    [dartx.setValueAtTime](value, time) {
-      return this.setValueAtTime(value, time);
+    [dartx.setValueAtTime](...args) {
+      return this.setValueAtTime.apply(this, args);
     }
-    [dartx.setValueCurveAtTime](values, time, duration) {
-      return this.setValueCurveAtTime(values, time, duration);
+    [dartx.setValueCurveAtTime](...args) {
+      return this.setValueCurveAtTime.apply(this, args);
     }
   };
   dart.setSignature(web_audio.AudioParam, {
@@ -91658,8 +91658,8 @@
     set [dartx.type](value) {
       this.type = value;
     }
-    [dartx.getFrequencyResponse](frequencyHz, magResponse, phaseResponse) {
-      return this.getFrequencyResponse(frequencyHz, magResponse, phaseResponse);
+    [dartx.getFrequencyResponse](...args) {
+      return this.getFrequencyResponse.apply(this, args);
     }
   };
   dart.setSignature(web_audio.BiquadFilterNode, {
@@ -91910,20 +91910,20 @@
     set [dartx.type](value) {
       this.type = value;
     }
-    [dartx.noteOff](when) {
-      return this.noteOff(when);
+    [dartx.noteOff](...args) {
+      return this.noteOff.apply(this, args);
     }
-    [dartx.noteOn](when) {
-      return this.noteOn(when);
+    [dartx.noteOn](...args) {
+      return this.noteOn.apply(this, args);
     }
-    [dartx.setPeriodicWave](periodicWave) {
-      return this.setPeriodicWave(periodicWave);
+    [dartx.setPeriodicWave](...args) {
+      return this.setPeriodicWave.apply(this, args);
     }
-    [dartx.start](when) {
-      return this.start(when);
+    [dartx.start](...args) {
+      return this.start.apply(this, args);
     }
-    [dartx.stop](when) {
-      return this.stop(when);
+    [dartx.stop](...args) {
+      return this.stop.apply(this, args);
     }
     get [dartx.onEnded]() {
       return web_audio.OscillatorNode.endedEvent.forTarget(this);
@@ -92014,14 +92014,14 @@
     set [dartx.rolloffFactor](value) {
       this.rolloffFactor = value;
     }
-    [dartx.setOrientation](x, y, z) {
-      return this.setOrientation(x, y, z);
+    [dartx.setOrientation](...args) {
+      return this.setOrientation.apply(this, args);
     }
-    [dartx.setPosition](x, y, z) {
-      return this.setPosition(x, y, z);
+    [dartx.setPosition](...args) {
+      return this.setPosition.apply(this, args);
     }
-    [dartx.setVelocity](x, y, z) {
-      return this.setVelocity(x, y, z);
+    [dartx.setVelocity](...args) {
+      return this.setVelocity.apply(this, args);
     }
   };
   dart.setSignature(web_audio.PannerNode, {
@@ -92066,8 +92066,8 @@
     get [dartx.bufferSize]() {
       return this.bufferSize;
     }
-    [dartx.setEventListener](eventListener) {
-      return this.setEventListener(eventListener);
+    [dartx.setEventListener](...args) {
+      return this.setEventListener.apply(this, args);
     }
     get [dartx.onAudioProcess]() {
       return web_audio.ScriptProcessorNode.audioProcessEvent.forTarget(this);
@@ -92298,323 +92298,323 @@
     get [dartx.drawingBufferWidth]() {
       return this.drawingBufferWidth;
     }
-    [dartx.activeTexture](texture) {
-      return this.activeTexture(texture);
+    [dartx.activeTexture](...args) {
+      return this.activeTexture.apply(this, args);
     }
-    [dartx.attachShader](program, shader) {
-      return this.attachShader(program, shader);
+    [dartx.attachShader](...args) {
+      return this.attachShader.apply(this, args);
     }
-    [dartx.bindAttribLocation](program, index, name) {
-      return this.bindAttribLocation(program, index, name);
+    [dartx.bindAttribLocation](...args) {
+      return this.bindAttribLocation.apply(this, args);
     }
-    [dartx.bindBuffer](target, buffer) {
-      return this.bindBuffer(target, buffer);
+    [dartx.bindBuffer](...args) {
+      return this.bindBuffer.apply(this, args);
     }
-    [dartx.bindFramebuffer](target, framebuffer) {
-      return this.bindFramebuffer(target, framebuffer);
+    [dartx.bindFramebuffer](...args) {
+      return this.bindFramebuffer.apply(this, args);
     }
-    [dartx.bindRenderbuffer](target, renderbuffer) {
-      return this.bindRenderbuffer(target, renderbuffer);
+    [dartx.bindRenderbuffer](...args) {
+      return this.bindRenderbuffer.apply(this, args);
     }
-    [dartx.bindTexture](target, texture) {
-      return this.bindTexture(target, texture);
+    [dartx.bindTexture](...args) {
+      return this.bindTexture.apply(this, args);
     }
-    [dartx.blendColor](red, green, blue, alpha) {
-      return this.blendColor(red, green, blue, alpha);
+    [dartx.blendColor](...args) {
+      return this.blendColor.apply(this, args);
     }
-    [dartx.blendEquation](mode) {
-      return this.blendEquation(mode);
+    [dartx.blendEquation](...args) {
+      return this.blendEquation.apply(this, args);
     }
-    [dartx.blendEquationSeparate](modeRGB, modeAlpha) {
-      return this.blendEquationSeparate(modeRGB, modeAlpha);
+    [dartx.blendEquationSeparate](...args) {
+      return this.blendEquationSeparate.apply(this, args);
     }
-    [dartx.blendFunc](sfactor, dfactor) {
-      return this.blendFunc(sfactor, dfactor);
+    [dartx.blendFunc](...args) {
+      return this.blendFunc.apply(this, args);
     }
-    [dartx.blendFuncSeparate](srcRGB, dstRGB, srcAlpha, dstAlpha) {
-      return this.blendFuncSeparate(srcRGB, dstRGB, srcAlpha, dstAlpha);
+    [dartx.blendFuncSeparate](...args) {
+      return this.blendFuncSeparate.apply(this, args);
     }
-    [dartx.bufferByteData](target, data, usage) {
-      return this.bufferData(target, data, usage);
+    [dartx.bufferByteData](...args) {
+      return this.bufferData.apply(this, args);
     }
-    [dartx.bufferData](target, data_OR_size, usage) {
-      return this.bufferData(target, data_OR_size, usage);
+    [dartx.bufferData](...args) {
+      return this.bufferData.apply(this, args);
     }
-    [dartx.bufferDataTyped](target, data, usage) {
-      return this.bufferData(target, data, usage);
+    [dartx.bufferDataTyped](...args) {
+      return this.bufferData.apply(this, args);
     }
-    [dartx.bufferSubByteData](target, offset, data) {
-      return this.bufferSubData(target, offset, data);
+    [dartx.bufferSubByteData](...args) {
+      return this.bufferSubData.apply(this, args);
     }
-    [dartx.bufferSubData](target, offset, data) {
-      return this.bufferSubData(target, offset, data);
+    [dartx.bufferSubData](...args) {
+      return this.bufferSubData.apply(this, args);
     }
-    [dartx.bufferSubDataTyped](target, offset, data) {
-      return this.bufferSubData(target, offset, data);
+    [dartx.bufferSubDataTyped](...args) {
+      return this.bufferSubData.apply(this, args);
     }
-    [dartx.checkFramebufferStatus](target) {
-      return this.checkFramebufferStatus(target);
+    [dartx.checkFramebufferStatus](...args) {
+      return this.checkFramebufferStatus.apply(this, args);
     }
-    [dartx.clear](mask) {
-      return this.clear(mask);
+    [dartx.clear](...args) {
+      return this.clear.apply(this, args);
     }
-    [dartx.clearColor](red, green, blue, alpha) {
-      return this.clearColor(red, green, blue, alpha);
+    [dartx.clearColor](...args) {
+      return this.clearColor.apply(this, args);
     }
-    [dartx.clearDepth](depth) {
-      return this.clearDepth(depth);
+    [dartx.clearDepth](...args) {
+      return this.clearDepth.apply(this, args);
     }
-    [dartx.clearStencil](s) {
-      return this.clearStencil(s);
+    [dartx.clearStencil](...args) {
+      return this.clearStencil.apply(this, args);
     }
-    [dartx.colorMask](red, green, blue, alpha) {
-      return this.colorMask(red, green, blue, alpha);
+    [dartx.colorMask](...args) {
+      return this.colorMask.apply(this, args);
     }
-    [dartx.compileShader](shader) {
-      return this.compileShader(shader);
+    [dartx.compileShader](...args) {
+      return this.compileShader.apply(this, args);
     }
-    [dartx.compressedTexImage2D](target, level, internalformat, width, height, border, data) {
-      return this.compressedTexImage2D(target, level, internalformat, width, height, border, data);
+    [dartx.compressedTexImage2D](...args) {
+      return this.compressedTexImage2D.apply(this, args);
     }
-    [dartx.compressedTexSubImage2D](target, level, xoffset, yoffset, width, height, format, data) {
-      return this.compressedTexSubImage2D(target, level, xoffset, yoffset, width, height, format, data);
+    [dartx.compressedTexSubImage2D](...args) {
+      return this.compressedTexSubImage2D.apply(this, args);
     }
-    [dartx.copyTexImage2D](target, level, internalformat, x, y, width, height, border) {
-      return this.copyTexImage2D(target, level, internalformat, x, y, width, height, border);
+    [dartx.copyTexImage2D](...args) {
+      return this.copyTexImage2D.apply(this, args);
     }
-    [dartx.copyTexSubImage2D](target, level, xoffset, yoffset, x, y, width, height) {
-      return this.copyTexSubImage2D(target, level, xoffset, yoffset, x, y, width, height);
+    [dartx.copyTexSubImage2D](...args) {
+      return this.copyTexSubImage2D.apply(this, args);
     }
-    [dartx.createBuffer]() {
-      return this.createBuffer();
+    [dartx.createBuffer](...args) {
+      return this.createBuffer.apply(this, args);
     }
-    [dartx.createFramebuffer]() {
-      return this.createFramebuffer();
+    [dartx.createFramebuffer](...args) {
+      return this.createFramebuffer.apply(this, args);
     }
-    [dartx.createProgram]() {
-      return this.createProgram();
+    [dartx.createProgram](...args) {
+      return this.createProgram.apply(this, args);
     }
-    [dartx.createRenderbuffer]() {
-      return this.createRenderbuffer();
+    [dartx.createRenderbuffer](...args) {
+      return this.createRenderbuffer.apply(this, args);
     }
-    [dartx.createShader](type) {
-      return this.createShader(type);
+    [dartx.createShader](...args) {
+      return this.createShader.apply(this, args);
     }
-    [dartx.createTexture]() {
-      return this.createTexture();
+    [dartx.createTexture](...args) {
+      return this.createTexture.apply(this, args);
     }
-    [dartx.cullFace](mode) {
-      return this.cullFace(mode);
+    [dartx.cullFace](...args) {
+      return this.cullFace.apply(this, args);
     }
-    [dartx.deleteBuffer](buffer) {
-      return this.deleteBuffer(buffer);
+    [dartx.deleteBuffer](...args) {
+      return this.deleteBuffer.apply(this, args);
     }
-    [dartx.deleteFramebuffer](framebuffer) {
-      return this.deleteFramebuffer(framebuffer);
+    [dartx.deleteFramebuffer](...args) {
+      return this.deleteFramebuffer.apply(this, args);
     }
-    [dartx.deleteProgram](program) {
-      return this.deleteProgram(program);
+    [dartx.deleteProgram](...args) {
+      return this.deleteProgram.apply(this, args);
     }
-    [dartx.deleteRenderbuffer](renderbuffer) {
-      return this.deleteRenderbuffer(renderbuffer);
+    [dartx.deleteRenderbuffer](...args) {
+      return this.deleteRenderbuffer.apply(this, args);
     }
-    [dartx.deleteShader](shader) {
-      return this.deleteShader(shader);
+    [dartx.deleteShader](...args) {
+      return this.deleteShader.apply(this, args);
     }
-    [dartx.deleteTexture](texture) {
-      return this.deleteTexture(texture);
+    [dartx.deleteTexture](...args) {
+      return this.deleteTexture.apply(this, args);
     }
-    [dartx.depthFunc](func) {
-      return this.depthFunc(func);
+    [dartx.depthFunc](...args) {
+      return this.depthFunc.apply(this, args);
     }
-    [dartx.depthMask](flag) {
-      return this.depthMask(flag);
+    [dartx.depthMask](...args) {
+      return this.depthMask.apply(this, args);
     }
-    [dartx.depthRange](zNear, zFar) {
-      return this.depthRange(zNear, zFar);
+    [dartx.depthRange](...args) {
+      return this.depthRange.apply(this, args);
     }
-    [dartx.detachShader](program, shader) {
-      return this.detachShader(program, shader);
+    [dartx.detachShader](...args) {
+      return this.detachShader.apply(this, args);
     }
-    [dartx.disable](cap) {
-      return this.disable(cap);
+    [dartx.disable](...args) {
+      return this.disable.apply(this, args);
     }
-    [dartx.disableVertexAttribArray](index) {
-      return this.disableVertexAttribArray(index);
+    [dartx.disableVertexAttribArray](...args) {
+      return this.disableVertexAttribArray.apply(this, args);
     }
-    [dartx.drawArrays](mode, first, count) {
-      return this.drawArrays(mode, first, count);
+    [dartx.drawArrays](...args) {
+      return this.drawArrays.apply(this, args);
     }
-    [dartx.drawElements](mode, count, type, offset) {
-      return this.drawElements(mode, count, type, offset);
+    [dartx.drawElements](...args) {
+      return this.drawElements.apply(this, args);
     }
-    [dartx.enable](cap) {
-      return this.enable(cap);
+    [dartx.enable](...args) {
+      return this.enable.apply(this, args);
     }
-    [dartx.enableVertexAttribArray](index) {
-      return this.enableVertexAttribArray(index);
+    [dartx.enableVertexAttribArray](...args) {
+      return this.enableVertexAttribArray.apply(this, args);
     }
-    [dartx.finish]() {
-      return this.finish();
+    [dartx.finish](...args) {
+      return this.finish.apply(this, args);
     }
-    [dartx.flush]() {
-      return this.flush();
+    [dartx.flush](...args) {
+      return this.flush.apply(this, args);
     }
-    [dartx.framebufferRenderbuffer](target, attachment, renderbuffertarget, renderbuffer) {
-      return this.framebufferRenderbuffer(target, attachment, renderbuffertarget, renderbuffer);
+    [dartx.framebufferRenderbuffer](...args) {
+      return this.framebufferRenderbuffer.apply(this, args);
     }
-    [dartx.framebufferTexture2D](target, attachment, textarget, texture, level) {
-      return this.framebufferTexture2D(target, attachment, textarget, texture, level);
+    [dartx.framebufferTexture2D](...args) {
+      return this.framebufferTexture2D.apply(this, args);
     }
-    [dartx.frontFace](mode) {
-      return this.frontFace(mode);
+    [dartx.frontFace](...args) {
+      return this.frontFace.apply(this, args);
     }
-    [dartx.generateMipmap](target) {
-      return this.generateMipmap(target);
+    [dartx.generateMipmap](...args) {
+      return this.generateMipmap.apply(this, args);
     }
-    [dartx.getActiveAttrib](program, index) {
-      return this.getActiveAttrib(program, index);
+    [dartx.getActiveAttrib](...args) {
+      return this.getActiveAttrib.apply(this, args);
     }
-    [dartx.getActiveUniform](program, index) {
-      return this.getActiveUniform(program, index);
+    [dartx.getActiveUniform](...args) {
+      return this.getActiveUniform.apply(this, args);
     }
-    [dartx.getAttachedShaders](program) {
-      return this.getAttachedShaders(program);
+    [dartx.getAttachedShaders](...args) {
+      return this.getAttachedShaders.apply(this, args);
     }
-    [dartx.getAttribLocation](program, name) {
-      return this.getAttribLocation(program, name);
+    [dartx.getAttribLocation](...args) {
+      return this.getAttribLocation.apply(this, args);
     }
-    [dartx.getBufferParameter](target, pname) {
-      return this.getBufferParameter(target, pname);
+    [dartx.getBufferParameter](...args) {
+      return this.getBufferParameter.apply(this, args);
     }
     [dartx.getContextAttributes]() {
       return web_gl.ContextAttributes._check(html_common.convertNativeToDart_ContextAttributes(this[_getContextAttributes_1$]()));
     }
-    [_getContextAttributes_1$]() {
-      return this.getContextAttributes();
+    [_getContextAttributes_1$](...args) {
+      return this.getContextAttributes.apply(this, args);
     }
-    [dartx.getError]() {
-      return this.getError();
+    [dartx.getError](...args) {
+      return this.getError.apply(this, args);
     }
-    [dartx.getExtension](name) {
-      return this.getExtension(name);
+    [dartx.getExtension](...args) {
+      return this.getExtension.apply(this, args);
     }
-    [dartx.getFramebufferAttachmentParameter](target, attachment, pname) {
-      return this.getFramebufferAttachmentParameter(target, attachment, pname);
+    [dartx.getFramebufferAttachmentParameter](...args) {
+      return this.getFramebufferAttachmentParameter.apply(this, args);
     }
-    [dartx.getParameter](pname) {
-      return this.getParameter(pname);
+    [dartx.getParameter](...args) {
+      return this.getParameter.apply(this, args);
     }
-    [dartx.getProgramInfoLog](program) {
-      return this.getProgramInfoLog(program);
+    [dartx.getProgramInfoLog](...args) {
+      return this.getProgramInfoLog.apply(this, args);
     }
-    [dartx.getProgramParameter](program, pname) {
-      return this.getProgramParameter(program, pname);
+    [dartx.getProgramParameter](...args) {
+      return this.getProgramParameter.apply(this, args);
     }
-    [dartx.getRenderbufferParameter](target, pname) {
-      return this.getRenderbufferParameter(target, pname);
+    [dartx.getRenderbufferParameter](...args) {
+      return this.getRenderbufferParameter.apply(this, args);
     }
-    [dartx.getShaderInfoLog](shader) {
-      return this.getShaderInfoLog(shader);
+    [dartx.getShaderInfoLog](...args) {
+      return this.getShaderInfoLog.apply(this, args);
     }
-    [dartx.getShaderParameter](shader, pname) {
-      return this.getShaderParameter(shader, pname);
+    [dartx.getShaderParameter](...args) {
+      return this.getShaderParameter.apply(this, args);
     }
-    [dartx.getShaderPrecisionFormat](shadertype, precisiontype) {
-      return this.getShaderPrecisionFormat(shadertype, precisiontype);
+    [dartx.getShaderPrecisionFormat](...args) {
+      return this.getShaderPrecisionFormat.apply(this, args);
     }
-    [dartx.getShaderSource](shader) {
-      return this.getShaderSource(shader);
+    [dartx.getShaderSource](...args) {
+      return this.getShaderSource.apply(this, args);
     }
-    [dartx.getSupportedExtensions]() {
-      return this.getSupportedExtensions();
+    [dartx.getSupportedExtensions](...args) {
+      return this.getSupportedExtensions.apply(this, args);
     }
-    [dartx.getTexParameter](target, pname) {
-      return this.getTexParameter(target, pname);
+    [dartx.getTexParameter](...args) {
+      return this.getTexParameter.apply(this, args);
     }
-    [dartx.getUniform](program, location) {
-      return this.getUniform(program, location);
+    [dartx.getUniform](...args) {
+      return this.getUniform.apply(this, args);
     }
-    [dartx.getUniformLocation](program, name) {
-      return this.getUniformLocation(program, name);
+    [dartx.getUniformLocation](...args) {
+      return this.getUniformLocation.apply(this, args);
     }
-    [dartx.getVertexAttrib](index, pname) {
-      return this.getVertexAttrib(index, pname);
+    [dartx.getVertexAttrib](...args) {
+      return this.getVertexAttrib.apply(this, args);
     }
-    [dartx.getVertexAttribOffset](index, pname) {
-      return this.getVertexAttribOffset(index, pname);
+    [dartx.getVertexAttribOffset](...args) {
+      return this.getVertexAttribOffset.apply(this, args);
     }
-    [dartx.hint](target, mode) {
-      return this.hint(target, mode);
+    [dartx.hint](...args) {
+      return this.hint.apply(this, args);
     }
-    [dartx.isBuffer](buffer) {
-      return this.isBuffer(buffer);
+    [dartx.isBuffer](...args) {
+      return this.isBuffer.apply(this, args);
     }
-    [dartx.isContextLost]() {
-      return this.isContextLost();
+    [dartx.isContextLost](...args) {
+      return this.isContextLost.apply(this, args);
     }
-    [dartx.isEnabled](cap) {
-      return this.isEnabled(cap);
+    [dartx.isEnabled](...args) {
+      return this.isEnabled.apply(this, args);
     }
-    [dartx.isFramebuffer](framebuffer) {
-      return this.isFramebuffer(framebuffer);
+    [dartx.isFramebuffer](...args) {
+      return this.isFramebuffer.apply(this, args);
     }
-    [dartx.isProgram](program) {
-      return this.isProgram(program);
+    [dartx.isProgram](...args) {
+      return this.isProgram.apply(this, args);
     }
-    [dartx.isRenderbuffer](renderbuffer) {
-      return this.isRenderbuffer(renderbuffer);
+    [dartx.isRenderbuffer](...args) {
+      return this.isRenderbuffer.apply(this, args);
     }
-    [dartx.isShader](shader) {
-      return this.isShader(shader);
+    [dartx.isShader](...args) {
+      return this.isShader.apply(this, args);
     }
-    [dartx.isTexture](texture) {
-      return this.isTexture(texture);
+    [dartx.isTexture](...args) {
+      return this.isTexture.apply(this, args);
     }
-    [dartx.lineWidth](width) {
-      return this.lineWidth(width);
+    [dartx.lineWidth](...args) {
+      return this.lineWidth.apply(this, args);
     }
-    [dartx.linkProgram](program) {
-      return this.linkProgram(program);
+    [dartx.linkProgram](...args) {
+      return this.linkProgram.apply(this, args);
     }
-    [dartx.pixelStorei](pname, param) {
-      return this.pixelStorei(pname, param);
+    [dartx.pixelStorei](...args) {
+      return this.pixelStorei.apply(this, args);
     }
-    [dartx.polygonOffset](factor, units) {
-      return this.polygonOffset(factor, units);
+    [dartx.polygonOffset](...args) {
+      return this.polygonOffset.apply(this, args);
     }
-    [dartx.readPixels](x, y, width, height, format, type, pixels) {
-      return this.readPixels(x, y, width, height, format, type, pixels);
+    [dartx.readPixels](...args) {
+      return this.readPixels.apply(this, args);
     }
-    [dartx.renderbufferStorage](target, internalformat, width, height) {
-      return this.renderbufferStorage(target, internalformat, width, height);
+    [dartx.renderbufferStorage](...args) {
+      return this.renderbufferStorage.apply(this, args);
     }
-    [dartx.sampleCoverage](value, invert) {
-      return this.sampleCoverage(value, invert);
+    [dartx.sampleCoverage](...args) {
+      return this.sampleCoverage.apply(this, args);
     }
-    [dartx.scissor](x, y, width, height) {
-      return this.scissor(x, y, width, height);
+    [dartx.scissor](...args) {
+      return this.scissor.apply(this, args);
     }
-    [dartx.shaderSource](shader, string) {
-      return this.shaderSource(shader, string);
+    [dartx.shaderSource](...args) {
+      return this.shaderSource.apply(this, args);
     }
-    [dartx.stencilFunc](func, ref, mask) {
-      return this.stencilFunc(func, ref, mask);
+    [dartx.stencilFunc](...args) {
+      return this.stencilFunc.apply(this, args);
     }
-    [dartx.stencilFuncSeparate](face, func, ref, mask) {
-      return this.stencilFuncSeparate(face, func, ref, mask);
+    [dartx.stencilFuncSeparate](...args) {
+      return this.stencilFuncSeparate.apply(this, args);
     }
-    [dartx.stencilMask](mask) {
-      return this.stencilMask(mask);
+    [dartx.stencilMask](...args) {
+      return this.stencilMask.apply(this, args);
     }
-    [dartx.stencilMaskSeparate](face, mask) {
-      return this.stencilMaskSeparate(face, mask);
+    [dartx.stencilMaskSeparate](...args) {
+      return this.stencilMaskSeparate.apply(this, args);
     }
-    [dartx.stencilOp](fail, zfail, zpass) {
-      return this.stencilOp(fail, zfail, zpass);
+    [dartx.stencilOp](...args) {
+      return this.stencilOp.apply(this, args);
     }
-    [dartx.stencilOpSeparate](face, fail, zfail, zpass) {
-      return this.stencilOpSeparate(face, fail, zfail, zpass);
+    [dartx.stencilOpSeparate](...args) {
+      return this.stencilOpSeparate.apply(this, args);
     }
     [dartx.texImage2D](target, level, internalformat, format_OR_width, height_OR_type, border_OR_canvas_OR_image_OR_pixels_OR_video, format, type, pixels) {
       if (format === void 0) format = null;
@@ -92643,43 +92643,43 @@
       }
       dart.throw(new core.ArgumentError("Incorrect number or type of arguments"));
     }
-    [_texImage2D_1](target, level, internalformat, width, height, border, format, type, pixels) {
-      return this.texImage2D(target, level, internalformat, width, height, border, format, type, pixels);
+    [_texImage2D_1](...args) {
+      return this.texImage2D.apply(this, args);
     }
-    [_texImage2D_2](target, level, internalformat, format, type, pixels) {
-      return this.texImage2D(target, level, internalformat, format, type, pixels);
+    [_texImage2D_2](...args) {
+      return this.texImage2D.apply(this, args);
     }
-    [_texImage2D_3](target, level, internalformat, format, type, image) {
-      return this.texImage2D(target, level, internalformat, format, type, image);
+    [_texImage2D_3](...args) {
+      return this.texImage2D.apply(this, args);
     }
-    [_texImage2D_4](target, level, internalformat, format, type, canvas) {
-      return this.texImage2D(target, level, internalformat, format, type, canvas);
+    [_texImage2D_4](...args) {
+      return this.texImage2D.apply(this, args);
     }
-    [_texImage2D_5](target, level, internalformat, format, type, video) {
-      return this.texImage2D(target, level, internalformat, format, type, video);
+    [_texImage2D_5](...args) {
+      return this.texImage2D.apply(this, args);
     }
-    [dartx.texImage2DCanvas](target, level, internalformat, format, type, canvas) {
-      return this.texImage2D(target, level, internalformat, format, type, canvas);
+    [dartx.texImage2DCanvas](...args) {
+      return this.texImage2D.apply(this, args);
     }
-    [dartx.texImage2DImage](target, level, internalformat, format, type, image) {
-      return this.texImage2D(target, level, internalformat, format, type, image);
+    [dartx.texImage2DImage](...args) {
+      return this.texImage2D.apply(this, args);
     }
     [dartx.texImage2DImageData](target, level, internalformat, format, type, pixels) {
       let pixels_1 = html_common.convertDartToNative_ImageData(pixels);
       this[_texImage2DImageData_1](target, level, internalformat, format, type, pixels_1);
       return;
     }
-    [_texImage2DImageData_1](target, level, internalformat, format, type, pixels) {
-      return this.texImage2D(target, level, internalformat, format, type, pixels);
+    [_texImage2DImageData_1](...args) {
+      return this.texImage2D.apply(this, args);
     }
-    [dartx.texImage2DVideo](target, level, internalformat, format, type, video) {
-      return this.texImage2D(target, level, internalformat, format, type, video);
+    [dartx.texImage2DVideo](...args) {
+      return this.texImage2D.apply(this, args);
     }
-    [dartx.texParameterf](target, pname, param) {
-      return this.texParameterf(target, pname, param);
+    [dartx.texParameterf](...args) {
+      return this.texParameterf.apply(this, args);
     }
-    [dartx.texParameteri](target, pname, param) {
-      return this.texParameteri(target, pname, param);
+    [dartx.texParameteri](...args) {
+      return this.texParameteri.apply(this, args);
     }
     [dartx.texSubImage2D](target, level, xoffset, yoffset, format_OR_width, height_OR_type, canvas_OR_format_OR_image_OR_pixels_OR_video, type, pixels) {
       if (type === void 0) type = null;
@@ -92707,142 +92707,142 @@
       }
       dart.throw(new core.ArgumentError("Incorrect number or type of arguments"));
     }
-    [_texSubImage2D_1](target, level, xoffset, yoffset, width, height, format, type, pixels) {
-      return this.texSubImage2D(target, level, xoffset, yoffset, width, height, format, type, pixels);
+    [_texSubImage2D_1](...args) {
+      return this.texSubImage2D.apply(this, args);
     }
-    [_texSubImage2D_2](target, level, xoffset, yoffset, format, type, pixels) {
-      return this.texSubImage2D(target, level, xoffset, yoffset, format, type, pixels);
+    [_texSubImage2D_2](...args) {
+      return this.texSubImage2D.apply(this, args);
     }
-    [_texSubImage2D_3](target, level, xoffset, yoffset, format, type, image) {
-      return this.texSubImage2D(target, level, xoffset, yoffset, format, type, image);
+    [_texSubImage2D_3](...args) {
+      return this.texSubImage2D.apply(this, args);
     }
-    [_texSubImage2D_4](target, level, xoffset, yoffset, format, type, canvas) {
-      return this.texSubImage2D(target, level, xoffset, yoffset, format, type, canvas);
+    [_texSubImage2D_4](...args) {
+      return this.texSubImage2D.apply(this, args);
     }
-    [_texSubImage2D_5](target, level, xoffset, yoffset, format, type, video) {
-      return this.texSubImage2D(target, level, xoffset, yoffset, format, type, video);
+    [_texSubImage2D_5](...args) {
+      return this.texSubImage2D.apply(this, args);
     }
-    [dartx.texSubImage2DCanvas](target, level, xoffset, yoffset, format, type, canvas) {
-      return this.texSubImage2D(target, level, xoffset, yoffset, format, type, canvas);
+    [dartx.texSubImage2DCanvas](...args) {
+      return this.texSubImage2D.apply(this, args);
     }
-    [dartx.texSubImage2DImage](target, level, xoffset, yoffset, format, type, image) {
-      return this.texSubImage2D(target, level, xoffset, yoffset, format, type, image);
+    [dartx.texSubImage2DImage](...args) {
+      return this.texSubImage2D.apply(this, args);
     }
     [dartx.texSubImage2DImageData](target, level, xoffset, yoffset, format, type, pixels) {
       let pixels_1 = html_common.convertDartToNative_ImageData(pixels);
       this[_texSubImage2DImageData_1](target, level, xoffset, yoffset, format, type, pixels_1);
       return;
     }
-    [_texSubImage2DImageData_1](target, level, xoffset, yoffset, format, type, pixels) {
-      return this.texSubImage2D(target, level, xoffset, yoffset, format, type, pixels);
+    [_texSubImage2DImageData_1](...args) {
+      return this.texSubImage2D.apply(this, args);
     }
-    [dartx.texSubImage2DVideo](target, level, xoffset, yoffset, format, type, video) {
-      return this.texSubImage2D(target, level, xoffset, yoffset, format, type, video);
+    [dartx.texSubImage2DVideo](...args) {
+      return this.texSubImage2D.apply(this, args);
     }
-    [dartx.uniform1f](location, x) {
-      return this.uniform1f(location, x);
+    [dartx.uniform1f](...args) {
+      return this.uniform1f.apply(this, args);
     }
-    [dartx.uniform1fv](location, v) {
-      return this.uniform1fv(location, v);
+    [dartx.uniform1fv](...args) {
+      return this.uniform1fv.apply(this, args);
     }
-    [dartx.uniform1i](location, x) {
-      return this.uniform1i(location, x);
+    [dartx.uniform1i](...args) {
+      return this.uniform1i.apply(this, args);
     }
-    [dartx.uniform1iv](location, v) {
-      return this.uniform1iv(location, v);
+    [dartx.uniform1iv](...args) {
+      return this.uniform1iv.apply(this, args);
     }
-    [dartx.uniform2f](location, x, y) {
-      return this.uniform2f(location, x, y);
+    [dartx.uniform2f](...args) {
+      return this.uniform2f.apply(this, args);
     }
-    [dartx.uniform2fv](location, v) {
-      return this.uniform2fv(location, v);
+    [dartx.uniform2fv](...args) {
+      return this.uniform2fv.apply(this, args);
     }
-    [dartx.uniform2i](location, x, y) {
-      return this.uniform2i(location, x, y);
+    [dartx.uniform2i](...args) {
+      return this.uniform2i.apply(this, args);
     }
-    [dartx.uniform2iv](location, v) {
-      return this.uniform2iv(location, v);
+    [dartx.uniform2iv](...args) {
+      return this.uniform2iv.apply(this, args);
     }
-    [dartx.uniform3f](location, x, y, z) {
-      return this.uniform3f(location, x, y, z);
+    [dartx.uniform3f](...args) {
+      return this.uniform3f.apply(this, args);
     }
-    [dartx.uniform3fv](location, v) {
-      return this.uniform3fv(location, v);
+    [dartx.uniform3fv](...args) {
+      return this.uniform3fv.apply(this, args);
     }
-    [dartx.uniform3i](location, x, y, z) {
-      return this.uniform3i(location, x, y, z);
+    [dartx.uniform3i](...args) {
+      return this.uniform3i.apply(this, args);
     }
-    [dartx.uniform3iv](location, v) {
-      return this.uniform3iv(location, v);
+    [dartx.uniform3iv](...args) {
+      return this.uniform3iv.apply(this, args);
     }
-    [dartx.uniform4f](location, x, y, z, w) {
-      return this.uniform4f(location, x, y, z, w);
+    [dartx.uniform4f](...args) {
+      return this.uniform4f.apply(this, args);
     }
-    [dartx.uniform4fv](location, v) {
-      return this.uniform4fv(location, v);
+    [dartx.uniform4fv](...args) {
+      return this.uniform4fv.apply(this, args);
     }
-    [dartx.uniform4i](location, x, y, z, w) {
-      return this.uniform4i(location, x, y, z, w);
+    [dartx.uniform4i](...args) {
+      return this.uniform4i.apply(this, args);
     }
-    [dartx.uniform4iv](location, v) {
-      return this.uniform4iv(location, v);
+    [dartx.uniform4iv](...args) {
+      return this.uniform4iv.apply(this, args);
     }
-    [dartx.uniformMatrix2fv](location, transpose, array) {
-      return this.uniformMatrix2fv(location, transpose, array);
+    [dartx.uniformMatrix2fv](...args) {
+      return this.uniformMatrix2fv.apply(this, args);
     }
-    [dartx.uniformMatrix3fv](location, transpose, array) {
-      return this.uniformMatrix3fv(location, transpose, array);
+    [dartx.uniformMatrix3fv](...args) {
+      return this.uniformMatrix3fv.apply(this, args);
     }
-    [dartx.uniformMatrix4fv](location, transpose, array) {
-      return this.uniformMatrix4fv(location, transpose, array);
+    [dartx.uniformMatrix4fv](...args) {
+      return this.uniformMatrix4fv.apply(this, args);
     }
-    [dartx.useProgram](program) {
-      return this.useProgram(program);
+    [dartx.useProgram](...args) {
+      return this.useProgram.apply(this, args);
     }
-    [dartx.validateProgram](program) {
-      return this.validateProgram(program);
+    [dartx.validateProgram](...args) {
+      return this.validateProgram.apply(this, args);
     }
-    [dartx.vertexAttrib1f](indx, x) {
-      return this.vertexAttrib1f(indx, x);
+    [dartx.vertexAttrib1f](...args) {
+      return this.vertexAttrib1f.apply(this, args);
     }
-    [dartx.vertexAttrib1fv](indx, values) {
-      return this.vertexAttrib1fv(indx, values);
+    [dartx.vertexAttrib1fv](...args) {
+      return this.vertexAttrib1fv.apply(this, args);
     }
-    [dartx.vertexAttrib2f](indx, x, y) {
-      return this.vertexAttrib2f(indx, x, y);
+    [dartx.vertexAttrib2f](...args) {
+      return this.vertexAttrib2f.apply(this, args);
     }
-    [dartx.vertexAttrib2fv](indx, values) {
-      return this.vertexAttrib2fv(indx, values);
+    [dartx.vertexAttrib2fv](...args) {
+      return this.vertexAttrib2fv.apply(this, args);
     }
-    [dartx.vertexAttrib3f](indx, x, y, z) {
-      return this.vertexAttrib3f(indx, x, y, z);
+    [dartx.vertexAttrib3f](...args) {
+      return this.vertexAttrib3f.apply(this, args);
     }
-    [dartx.vertexAttrib3fv](indx, values) {
-      return this.vertexAttrib3fv(indx, values);
+    [dartx.vertexAttrib3fv](...args) {
+      return this.vertexAttrib3fv.apply(this, args);
     }
-    [dartx.vertexAttrib4f](indx, x, y, z, w) {
-      return this.vertexAttrib4f(indx, x, y, z, w);
+    [dartx.vertexAttrib4f](...args) {
+      return this.vertexAttrib4f.apply(this, args);
     }
-    [dartx.vertexAttrib4fv](indx, values) {
-      return this.vertexAttrib4fv(indx, values);
+    [dartx.vertexAttrib4fv](...args) {
+      return this.vertexAttrib4fv.apply(this, args);
     }
-    [dartx.vertexAttribPointer](indx, size, type, normalized, stride, offset) {
-      return this.vertexAttribPointer(indx, size, type, normalized, stride, offset);
+    [dartx.vertexAttribPointer](...args) {
+      return this.vertexAttribPointer.apply(this, args);
     }
-    [dartx.viewport](x, y, width, height) {
-      return this.viewport(x, y, width, height);
+    [dartx.viewport](...args) {
+      return this.viewport.apply(this, args);
     }
-    [dartx.texImage2DUntyped](targetTexture, levelOfDetail, internalFormat, format, type, data) {
-      return this.texImage2D(targetTexture, levelOfDetail, internalFormat, format, type, data);
+    [dartx.texImage2DUntyped](...args) {
+      return this.texImage2D.apply(this, args);
     }
-    [dartx.texImage2DTyped](targetTexture, levelOfDetail, internalFormat, width, height, border, format, type, data) {
-      return this.texImage2D(targetTexture, levelOfDetail, internalFormat, width, height, border, format, type, data);
+    [dartx.texImage2DTyped](...args) {
+      return this.texImage2D.apply(this, args);
     }
-    [dartx.texSubImage2DUntyped](targetTexture, levelOfDetail, xOffset, yOffset, format, type, data) {
-      return this.texSubImage2D(targetTexture, levelOfDetail, xOffset, yOffset, format, type, data);
+    [dartx.texSubImage2DUntyped](...args) {
+      return this.texSubImage2D.apply(this, args);
     }
-    [dartx.texSubImage2DTyped](targetTexture, levelOfDetail, xOffset, yOffset, width, height, border, format, type, data) {
-      return this.texSubImage2D(targetTexture, levelOfDetail, xOffset, yOffset, width, height, border, format, type, data);
+    [dartx.texSubImage2DTyped](...args) {
+      return this.texSubImage2D.apply(this, args);
     }
   };
   web_gl.RenderingContext[dart.implements] = () => [html$.CanvasRenderingContext];
@@ -93963,14 +93963,14 @@
     static _() {
       dart.throw(new core.UnsupportedError("Not supported"));
     }
-    [dartx.drawArraysInstancedAngle](mode, first, count, primcount) {
-      return this.drawArraysInstancedANGLE(mode, first, count, primcount);
+    [dartx.drawArraysInstancedAngle](...args) {
+      return this.drawArraysInstancedANGLE.apply(this, args);
     }
-    [dartx.drawElementsInstancedAngle](mode, count, type, offset, primcount) {
-      return this.drawElementsInstancedANGLE(mode, count, type, offset, primcount);
+    [dartx.drawElementsInstancedAngle](...args) {
+      return this.drawElementsInstancedANGLE.apply(this, args);
     }
-    [dartx.vertexAttribDivisorAngle](index, divisor) {
-      return this.vertexAttribDivisorANGLE(index, divisor);
+    [dartx.vertexAttribDivisorAngle](...args) {
+      return this.vertexAttribDivisorANGLE.apply(this, args);
     }
   };
   dart.setSignature(web_gl.AngleInstancedArrays, {
@@ -94166,8 +94166,8 @@
     static _() {
       dart.throw(new core.UnsupportedError("Not supported"));
     }
-    [dartx.getTranslatedShaderSource](shader) {
-      return this.getTranslatedShaderSource(shader);
+    [dartx.getTranslatedShaderSource](...args) {
+      return this.getTranslatedShaderSource.apply(this, args);
     }
   };
   dart.setSignature(web_gl.DebugShaders, {
@@ -94193,8 +94193,8 @@
     static _() {
       dart.throw(new core.UnsupportedError("Not supported"));
     }
-    [dartx.drawBuffersWebgl](buffers) {
-      return this.drawBuffersWEBGL(buffers);
+    [dartx.drawBuffersWebgl](...args) {
+      return this.drawBuffersWEBGL.apply(this, args);
     }
   };
   dart.setSignature(web_gl.DrawBuffers, {
@@ -94337,11 +94337,11 @@
     static _() {
       dart.throw(new core.UnsupportedError("Not supported"));
     }
-    [dartx.loseContext]() {
-      return this.loseContext();
+    [dartx.loseContext](...args) {
+      return this.loseContext.apply(this, args);
     }
-    [dartx.restoreContext]() {
-      return this.restoreContext();
+    [dartx.restoreContext](...args) {
+      return this.restoreContext.apply(this, args);
     }
   };
   dart.setSignature(web_gl.LoseContext, {
@@ -94410,17 +94410,17 @@
     static _() {
       dart.throw(new core.UnsupportedError("Not supported"));
     }
-    [dartx.bindVertexArray](arrayObject) {
-      return this.bindVertexArrayOES(arrayObject);
+    [dartx.bindVertexArray](...args) {
+      return this.bindVertexArrayOES.apply(this, args);
     }
-    [dartx.createVertexArray]() {
-      return this.createVertexArrayOES();
+    [dartx.createVertexArray](...args) {
+      return this.createVertexArrayOES.apply(this, args);
     }
-    [dartx.deleteVertexArray](arrayObject) {
-      return this.deleteVertexArrayOES(arrayObject);
+    [dartx.deleteVertexArray](...args) {
+      return this.deleteVertexArrayOES.apply(this, args);
     }
-    [dartx.isVertexArray](arrayObject) {
-      return this.isVertexArrayOES(arrayObject);
+    [dartx.isVertexArray](...args) {
+      return this.isVertexArrayOES.apply(this, args);
     }
   };
   dart.setSignature(web_gl.OesVertexArrayObject, {
@@ -94545,14 +94545,14 @@
     get [dartx.version]() {
       return this.version;
     }
-    [dartx.changeVersion](oldVersion, newVersion, callback, errorCallback, successCallback) {
-      return this.changeVersion(oldVersion, newVersion, callback, errorCallback, successCallback);
+    [dartx.changeVersion](...args) {
+      return this.changeVersion.apply(this, args);
     }
-    [dartx.readTransaction](callback, errorCallback, successCallback) {
-      return this.readTransaction(callback, errorCallback, successCallback);
+    [dartx.readTransaction](...args) {
+      return this.readTransaction.apply(this, args);
     }
-    [dartx.transaction](callback, errorCallback, successCallback) {
-      return this.transaction(callback, errorCallback, successCallback);
+    [dartx.transaction](...args) {
+      return this.transaction.apply(this, args);
     }
   };
   dart.setSignature(web_sql.SqlDatabase, {
@@ -94692,8 +94692,8 @@
     [dartx.item](index) {
       return html_common.convertNativeToDart_Dictionary(this[_item_1](index));
     }
-    [_item_1](index) {
-      return this.item(index);
+    [_item_1](...args) {
+      return this.item.apply(this, args);
     }
   };
   web_sql.SqlResultSetRowList[dart.implements] = () => [ListOfMap()];
@@ -94722,8 +94722,8 @@
     static _() {
       dart.throw(new core.UnsupportedError("Not supported"));
     }
-    [dartx.executeSql](sqlStatement, arguments$, callback, errorCallback) {
-      return this.executeSql(sqlStatement, arguments$, callback, errorCallback);
+    [dartx.executeSql](...args) {
+      return this.executeSql.apply(this, args);
     }
   };
   dart.setSignature(web_sql.SqlTransaction, {
diff --git a/pkg/dev_compiler/lib/src/compiler/code_generator.dart b/pkg/dev_compiler/lib/src/compiler/code_generator.dart
index 42a72ca..d2f3f8f 100644
--- a/pkg/dev_compiler/lib/src/compiler/code_generator.dart
+++ b/pkg/dev_compiler/lib/src/compiler/code_generator.dart
@@ -2261,22 +2261,18 @@
   }
 
   JS.Fun _emitNativeFunctionBody(MethodDeclaration node) {
-    if (node.isStatic) {
-      // TODO(vsm): Do we need to handle this case?
-      return null;
-    }
-
-    var params = visitFormalParameterList(node.parameters, destructure: false);
     String name =
         getAnnotationName(node.element, isJSAnnotation) ?? node.name.name;
     if (node.isGetter) {
-      return new JS.Fun(params, js.statement('{ return this.#; }', [name]));
+      return new JS.Fun([], js.statement('{ return this.#; }', [name]));
     } else if (node.isSetter) {
+      var params =
+          visitFormalParameterList(node.parameters, destructure: false);
       return new JS.Fun(
           params, js.statement('{ this.# = #; }', [name, params.last]));
     } else {
-      return new JS.Fun(
-          params, js.statement('{ return this.#(#); }', [name, params]));
+      return js.call(
+          'function (...args) { return this.#.apply(this, args); }', name);
     }
   }
 
@@ -2287,9 +2283,11 @@
 
     JS.Fun fn;
     if (_externalOrNative(node)) {
+      if (node.isStatic) {
+        // TODO(vsm): Do we need to handle this case?
+        return null;
+      }
       fn = _emitNativeFunctionBody(node);
-      // TODO(vsm): Remove if / when we handle the static case above.
-      if (fn == null) return null;
     } else {
       fn = _emitFunctionBody(node.element, node.parameters, node.body);
 
diff --git a/pkg/dev_compiler/lib/src/compiler/element_helpers.dart b/pkg/dev_compiler/lib/src/compiler/element_helpers.dart
index 053227d..7f4576d 100644
--- a/pkg/dev_compiler/lib/src/compiler/element_helpers.dart
+++ b/pkg/dev_compiler/lib/src/compiler/element_helpers.dart
@@ -51,7 +51,7 @@
 ///
 DartObject findAnnotation(Element element, bool test(DartObjectImpl value)) {
   for (var metadata in element.metadata) {
-    var value = metadata.constantValue;
+    var value = metadata.computeConstantValue();
     if (value != null && test(value)) return value;
   }
   return null;
diff --git a/pkg/dev_compiler/test/browser/language_tests.js b/pkg/dev_compiler/test/browser/language_tests.js
index 872dd21..b360aef 100644
--- a/pkg/dev_compiler/test/browser/language_tests.js
+++ b/pkg/dev_compiler/test/browser/language_tests.js
@@ -36,7 +36,7 @@
   // The number of expected unittest errors should be zero but unfortunately
   // there are a lot of broken html unittests.
   let num_expected_unittest_fails = 3;
-  let num_expected_unittest_errors = 2;
+  let num_expected_unittest_errors = 0;
 
   // TODO(jmesserly): separate StrongModeError from other errors.
   let all_status = {
@@ -268,6 +268,7 @@
       'regress_13462_1_test': skip_fail,
       'regress_14105_test': skip_fail,
       'regress_16640_test': skip_fail,
+      'regress_18535_test': fail,
       'regress_21795_test': skip_fail,
       'regress_22443_test': skip_fail,
       'regress_22666_test': skip_fail,
diff --git a/pkg/dev_compiler/test/not_yet_strong_tests.dart b/pkg/dev_compiler/test/not_yet_strong_tests.dart
index 14df2315..2b458dd 100644
--- a/pkg/dev_compiler/test/not_yet_strong_tests.dart
+++ b/pkg/dev_compiler/test/not_yet_strong_tests.dart
@@ -1600,7 +1600,6 @@
   'language/super_operator_index_test_07_multi',
   'language/super_operator_test',
   'language/super_test',
-  'language/switch6_test',
   'language/switch_bad_case_test_01_multi',
   'language/switch_bad_case_test_02_multi',
   'language/switch_case_test_00_multi',
@@ -2364,7 +2363,6 @@
   'language/private_member1_negative_test',
   'language/private_member2_negative_test',
   'language/private_member3_negative_test',
-  'language/regress_18535_test',
   'language/script1_negative_test',
   'language/script2_negative_test',
   'language/setter4_test',
diff --git a/pkg/dev_compiler/tool/input_sdk/lib/html/dart2js/html_dart2js.dart b/pkg/dev_compiler/tool/input_sdk/lib/html/dart2js/html_dart2js.dart
index fc3cde5..e103c7d 100644
--- a/pkg/dev_compiler/tool/input_sdk/lib/html/dart2js/html_dart2js.dart
+++ b/pkg/dev_compiler/tool/input_sdk/lib/html/dart2js/html_dart2js.dart
@@ -39810,7 +39810,7 @@
   /**
    * Set this CSS Dimension to the specified number of x-heights.
    *
-   * One ex is equal to the the x-height of a font's baseline to its mean line,
+   * One ex is equal to the x-height of a font's baseline to its mean line,
    * generally the height of the letter "x" in the font, which is usually about
    * half the font-size.
    */
diff --git a/pkg/dev_compiler/tool/input_sdk/lib/io/io.dart b/pkg/dev_compiler/tool/input_sdk/lib/io/io.dart
index c0d63de..66250ee 100644
--- a/pkg/dev_compiler/tool/input_sdk/lib/io/io.dart
+++ b/pkg/dev_compiler/tool/input_sdk/lib/io/io.dart
@@ -120,7 +120,7 @@
  *
  * The client connects to the WebSocket using the `connect()` method
  * and a URI that uses the Web Socket protocol.
- * The the client can write to the WebSocket with the `add()` method.
+ * The client can write to the WebSocket with the `add()` method.
  * For example,
  *
  *     WebSocket.connect('ws://127.0.0.1:4040/ws').then((socket) {
diff --git a/pkg/dev_compiler/tool/input_sdk/lib/isolate/isolate.dart b/pkg/dev_compiler/tool/input_sdk/lib/isolate/isolate.dart
index 35d2a8b..f0fd886 100644
--- a/pkg/dev_compiler/tool/input_sdk/lib/isolate/isolate.dart
+++ b/pkg/dev_compiler/tool/input_sdk/lib/isolate/isolate.dart
@@ -312,7 +312,7 @@
    * [AS_EVENT].
    * The shutdown is performed at different times depending on the priority:
    *
-   * * `IMMEDIATE`: The the isolate shuts down as soon as possible.
+   * * `IMMEDIATE`: The isolate shuts down as soon as possible.
    *     Control messages are handled in order, so all previously sent control
    *     events from this isolate will all have been processed.
    *     The shutdown should happen no later than if sent with
@@ -345,7 +345,7 @@
    * [AS_EVENT].
    * The response is sent at different times depending on the ping type:
    *
-   * * `IMMEDIATE`: The the isolate responds as soon as it receives the
+   * * `IMMEDIATE`: The isolate responds as soon as it receives the
    *     control message. This is after any previous control message
    *     from the same isolate has been received.
    * * `BEFORE_NEXT_EVENT`: The response is scheduled for the next time
diff --git a/pkg/dev_compiler/tool/input_sdk/lib/mirrors/mirrors.dart b/pkg/dev_compiler/tool/input_sdk/lib/mirrors/mirrors.dart
index f5c8370..25cab26 100644
--- a/pkg/dev_compiler/tool/input_sdk/lib/mirrors/mirrors.dart
+++ b/pkg/dev_compiler/tool/input_sdk/lib/mirrors/mirrors.dart
@@ -223,7 +223,7 @@
   /**
    * The simple name for this Dart language entity.
    *
-   * The simple name is in most cases the the identifier name of the entity,
+   * The simple name is in most cases the identifier name of the entity,
    * such as 'myMethod' for a method, [:void myMethod() {...}:] or 'mylibrary'
    * for a [:library 'mylibrary';:] declaration.
    */
@@ -920,7 +920,7 @@
   /**
    * The defining type for this typedef.
    *
-   * If the the type referred to by the reflectee is a function type *F*, the
+   * If the type referred to by the reflectee is a function type *F*, the
    * result will be [:FunctionTypeMirror:] reflecting *F* which is abstract
    * and has an abstract method [:call:] whose signature corresponds to *F*.
    * For instance [:void f(int):] is the referent for [:typedef void f(int):].
diff --git a/pkg/dev_compiler/tool/input_sdk/private/js_string.dart b/pkg/dev_compiler/tool/input_sdk/private/js_string.dart
index 57556b2..3e8a7ca 100644
--- a/pkg/dev_compiler/tool/input_sdk/private/js_string.dart
+++ b/pkg/dev_compiler/tool/input_sdk/private/js_string.dart
@@ -243,7 +243,7 @@
     return index;
   }
 
-  /// Finds the index after the the last non-whitespace character, or 0.
+  /// Finds the index after the last non-whitespace character, or 0.
   /// Start looking at position [index - 1].
   static int _skipTrailingWhitespace(String string, int index) {
     const int SPACE = 0x20;
diff --git a/runtime/BUILD.gn b/runtime/BUILD.gn
index e7e21bf..b5116d5 100644
--- a/runtime/BUILD.gn
+++ b/runtime/BUILD.gn
@@ -31,18 +31,15 @@
 }
 
 config("dart_public_config") {
-  include_dirs = [
-    ".",
-  ]
+  include_dirs = [ "." ]
 }
 
 # Adds PRODUCT define if Flutter has specified "release" for dart_runtime_mode
 config("dart_maybe_product_config") {
   defines = []
 
-  if ((dart_runtime_mode != "develop") &&
-      (dart_runtime_mode != "profile") &&
-      (dart_runtime_mode != "release")) {
+  if (dart_runtime_mode != "develop" && dart_runtime_mode != "profile" &&
+      dart_runtime_mode != "release") {
     print("Invalid |dart_runtime_mode|")
     assert(false)
   }
@@ -52,7 +49,7 @@
       print("Debug and release mode are mutually exclusive.")
     }
     assert(!dart_debug)
-    defines += ["PRODUCT"]
+    defines += [ "PRODUCT" ]
   }
 }
 
@@ -61,9 +58,8 @@
 config("dart_maybe_precompiled_runtime_config") {
   defines = []
 
-  if ((dart_runtime_mode != "develop") &&
-      (dart_runtime_mode != "profile") &&
-      (dart_runtime_mode != "release")) {
+  if (dart_runtime_mode != "develop" && dart_runtime_mode != "profile" &&
+      dart_runtime_mode != "release") {
     print("Invalid |dart_runtime_mode|")
     assert(false)
   }
@@ -75,29 +71,29 @@
     assert(!dart_debug)
 
     if (!dart_experimental_interpreter) {
-      defines += ["DART_PRECOMPILED_RUNTIME"]
+      defines += [ "DART_PRECOMPILED_RUNTIME" ]
     }
   } else if (dart_runtime_mode == "profile") {
     if (!dart_experimental_interpreter) {
-      defines += ["DART_PRECOMPILED_RUNTIME"]
+      defines += [ "DART_PRECOMPILED_RUNTIME" ]
     }
   }
 }
 
 config("dart_precompiled_runtime_config") {
   defines = []
-  defines += ["DART_PRECOMPILED_RUNTIME"]
+  defines += [ "DART_PRECOMPILED_RUNTIME" ]
 }
 
 # Controls DART_PRECOMPILER #define.
 config("dart_precompiler_config") {
   defines = []
-  defines += ["DART_PRECOMPILER"]
+  defines += [ "DART_PRECOMPILER" ]
 }
 
 config("dart_no_snapshot_config") {
   defines = []
-  defines += ["DART_NO_SNAPSHOT"]
+  defines += [ "DART_NO_SNAPSHOT" ]
 }
 
 config("dart_config") {
@@ -108,56 +104,51 @@
   }
 
   if (dart_target_arch != "") {
-    if ((dart_target_arch == "arm") ||
-        (dart_target_arch == "simarm")) {
+    if (dart_target_arch == "arm" || dart_target_arch == "simarm") {
       defines += [ "TARGET_ARCH_ARM" ]
       if (target_os == "mac" || target_os == "ios") {
         defines += [ "TARGET_ABI_IOS" ]
       } else {
         defines += [ "TARGET_ABI_EABI" ]
       }
-    } else if ((dart_target_arch == "armv6") ||
-               (dart_target_arch == "simarmv6")) {
+    } else if (dart_target_arch == "armv6" || dart_target_arch == "simarmv6") {
       defines += [ "TARGET_ARCH_ARM" ]
       defines += [ "TARGET_ARCH_ARM_6" ]
       defines += [ "TARGET_ABI_EABI" ]
-    } else if ((dart_target_arch == "armv5te") ||
-               (dart_target_arch == "simarmv5te")) {
+    } else if (dart_target_arch == "armv5te" ||
+               dart_target_arch == "simarmv5te") {
       defines += [ "TARGET_ARCH_ARM" ]
       defines += [ "TARGET_ARCH_ARM_5TE" ]
       defines += [ "TARGET_ABI_EABI" ]
-    } else if ((dart_target_arch == "arm64") ||
-               (dart_target_arch == "simarm64")) {
+    } else if (dart_target_arch == "arm64" || dart_target_arch == "simarm64") {
       defines += [ "TARGET_ARCH_ARM64" ]
-    } else if ((dart_target_arch == "mips") ||
-               (dart_target_arch == "simmips")) {
+    } else if (dart_target_arch == "mips" || dart_target_arch == "simmips") {
       defines += [ "TARGET_ARCH_MIPS" ]
     } else if (dart_target_arch == "x64") {
       defines += [ "TARGET_ARCH_X64" ]
     } else if (dart_target_arch == "ia32") {
       defines += [ "TARGET_ARCH_IA32" ]
-    } else if ((dart_target_arch == "dbc") ||
-               (dart_target_arch == "simdbc") ||
-               (dart_target_arch == "simdbc64")) {
+    } else if (dart_target_arch == "dbc" || dart_target_arch == "simdbc" ||
+               dart_target_arch == "simdbc64") {
       defines += [ "TARGET_ARCH_DBC" ]
       defines += [ "USING_SIMULATOR" ]
-    } else  {
+    } else {
       print("Invalid |dart_target_arch|")
       assert(false)
     }
   }
 
   if (dart_debug) {
-    defines += ["DEBUG"]
+    defines += [ "DEBUG" ]
   } else {
-    defines += ["NDEBUG"]
+    defines += [ "NDEBUG" ]
   }
 
   if (!is_win) {
     cflags = [
       "-Werror",
       "-Wall",
-      "-Wextra", # Also known as -W.
+      "-Wextra",  # Also known as -W.
       "-Wno-unused-parameter",
       "-Wnon-virtual-dtor",
       "-Wvla",
@@ -170,19 +161,13 @@
     ]
 
     if (dart_debug) {
-      cflags += [
-        "-O1",
-      ]
+      cflags += [ "-O1" ]
     } else {
-      cflags += [
-        "-O3",
-      ]
+      cflags += [ "-O3" ]
     }
 
     if (defined(is_asan) && is_asan) {
-      ldflags = [
-        "-fsanitize=address",
-      ]
+      ldflags = [ "-fsanitize=address" ]
     }
   }
 }
@@ -198,19 +183,18 @@
   }
   static_library(target_name) {
     configs += [
-      ":dart_config",
-      ":dart_maybe_product_config"
-    ] + extra_configs
+                 ":dart_config",
+                 ":dart_maybe_product_config",
+               ] + extra_configs
     deps = [
-      "vm:libdart_platform",
-      "third_party/double-conversion/src:libdouble_conversion",
-      ":generate_version_cc_file",
-    ] + extra_deps
-    include_dirs = [
-      ".",
-    ]
-    public_configs = [":dart_public_config"]
+             "vm:libdart_platform",
+             "third_party/double-conversion/src:libdouble_conversion",
+             ":generate_version_cc_file",
+           ] + extra_deps
+    include_dirs = [ "." ]
+    public_configs = [ ":dart_public_config" ]
     sources = [
+      "$target_gen_dir/version.cc",
       "include/dart_api.h",
       "include/dart_mirrors_api.h",
       "include/dart_native_api.h",
@@ -220,18 +204,13 @@
       "vm/mirrors_api_impl.cc",
       "vm/native_api_impl.cc",
       "vm/version.h",
-      "$target_gen_dir/version.cc",
     ]
-    defines = [
-      "DART_SHARED_LIB",
-    ]
+    defines = [ "DART_SHARED_LIB" ]
   }
 }
 
 libdart_library("libdart") {
-  extra_configs = [
-    ":dart_maybe_precompiled_runtime_config"
-  ]
+  extra_configs = [ ":dart_maybe_precompiled_runtime_config" ]
   extra_deps = [
     "vm:libdart_lib",
     "vm:libdart_vm",
@@ -250,9 +229,7 @@
 }
 
 libdart_library("libdart_precompiled_runtime") {
-  extra_configs = [
-    ":dart_precompiled_runtime_config"
-  ]
+  extra_configs = [ ":dart_precompiled_runtime_config" ]
   extra_deps = [
     "vm:libdart_lib_precompiled_runtime",
     "vm:libdart_vm_precompiled_runtime",
@@ -262,7 +239,7 @@
 libdart_library("libdart_nosnapshot") {
   extra_configs = [
     ":dart_no_snapshot_config",
-    ":dart_maybe_precompiled_runtime_config"
+    ":dart_maybe_precompiled_runtime_config",
   ]
   extra_deps = [
     "vm:libdart_lib_nosnapshot",
@@ -273,7 +250,7 @@
 libdart_library("libdart_nosnapshot_precompiled_runtime") {
   extra_configs = [
     ":dart_no_snapshot_config",
-    ":dart_precompiled_runtime_config"
+    ":dart_precompiled_runtime_config",
   ]
   extra_deps = [
     "vm:libdart_lib_nosnapshot_precompiled_runtime",
@@ -303,26 +280,31 @@
     "vm/version_in.cc",
   ]
   output = "$target_gen_dir/version.cc"
-  outputs = [ output, ]
+  outputs = [
+    output,
+  ]
 
   script = "../tools/make_version.py"
   args = [
     "--quiet",
-    "--output", rebase_path(output, root_build_dir),
-    "--input", rebase_path("vm/version_in.cc", root_build_dir),
+    "--output",
+    rebase_path(output, root_build_dir),
+    "--input",
+    rebase_path("vm/version_in.cc", root_build_dir),
   ]
 }
 
-
 executable("libdart_dependency_helper") {
-  configs += [":dart_config",
-              ":dart_maybe_product_config"]
+  configs += [
+    ":dart_config",
+    ":dart_maybe_product_config",
+  ]
   deps = [
-    "vm:libdart_lib_nosnapshot",
-    "vm:libdart_lib",
-    "vm:libdart_vm",
-    "vm:libdart_platform",
     "third_party/double-conversion/src:libdouble_conversion",
+    "vm:libdart_lib",
+    "vm:libdart_lib_nosnapshot",
+    "vm:libdart_vm",
+    "vm:libdart_vm_nosnapshot",
   ]
   sources = [
     "vm/libdart_dependency_helper.cc",
diff --git a/runtime/PRESUBMIT.py b/runtime/PRESUBMIT.py
index ca55214..946f54f 100644
--- a/runtime/PRESUBMIT.py
+++ b/runtime/PRESUBMIT.py
@@ -6,37 +6,23 @@
 import cpplint
 import re
 
-
-class PathHackException(Exception):
-  def __init__(self, error_msg):
-    self.error_msg = error_msg
-
-  def __str__(self):
-    return repr(self.error_msg)
-
-def AddSvnPathIfNeeded(runtime_path):
-  # Add the .svn into the runtime directory if needed for git or svn 1.7.
-  fake_svn_path = os.path.join(runtime_path, '.svn')
-  if os.path.exists(fake_svn_path):
-    return None
-  open(fake_svn_path, 'w').close()
-  return lambda: os.remove(fake_svn_path)
-
-
-def TrySvnPathHack(parent_path):
-  orig_path = os.path.join(parent_path, '.svn')
-  renamed_path = os.path.join(parent_path, '.svn_orig')
-  if os.path.exists(renamed_path):
-    error_msg = '".svn_orig" exists in presubmit parent directory('
-    error_msg += parent_path
-    error_msg += '). Consider renaming it manually to ".svn".'
-    raise PathHackException(error_msg)
-  if os.path.exists(orig_path):
-    # Make the parent SVN directory non-discoverable by cpplint to get
-    # the correct header guard checks. This is needed if using all Dart
-    # checkout.
-    os.rename(orig_path, renamed_path)
-    return lambda: os.rename(renamed_path, orig_path)
+# memcpy does not handle overlapping memory regions. Even though this
+# is well documented it seems to be used in error quite often. To avoid
+# problems we disallow the direct use of memcpy.  The exceptions are in
+# third-party code and in platform/globals.h which uses it to implement
+# bit_cast and bit_copy.
+def CheckMemcpy(filename):
+  if filename.endswith(os.path.join('platform', 'globals.h')) or \
+     filename.find('third_party') != -1:
+    return 0
+  fh = open(filename, 'r')
+  content = fh.read()
+  match = re.search('\\bmemcpy\\b', content)
+  if match:
+    line_number = content[0:match.start()].count('\n') + 1
+    print "%s:%d: use of memcpy is forbidden" % (filename, line_number)
+    return 1
+  return 0
 
 
 def RunLint(input_api, output_api):
@@ -44,39 +30,13 @@
   cpplint._cpplint_state.ResetErrorCounts()
   memcpy_match_count = 0
   # Find all .cc and .h files in the change list.
-  for svn_file in input_api.AffectedTextFiles():
-    filename = svn_file.AbsoluteLocalPath()
+  for git_file in input_api.AffectedTextFiles():
+    filename = git_file.AbsoluteLocalPath()
     if filename.endswith('.cc') or filename.endswith('.h'):
-      cleanup_parent = None
-      cleanup_runtime = None
-      try:
-        runtime_path = input_api.PresubmitLocalPath()
-        parent_path = os.path.dirname(runtime_path)
-        if filename.endswith('.h'):
-          cleanup_runtime = AddSvnPathIfNeeded(runtime_path)
-          cleanup_parent = TrySvnPathHack(parent_path)
-      except PathHackException, exception:
-        return [output_api.PresubmitError(str(exception))]
       # Run cpplint on the file.
       cpplint.ProcessFile(filename, 1)
-      if cleanup_parent is not None:
-        cleanup_parent()
-      if cleanup_runtime is not None:
-        cleanup_runtime()
-      # memcpy does not handle overlapping memory regions. Even though this
-      # is well documented it seems to be used in error quite often. To avoid
-      # problems we disallow the direct use of memcpy.  The exceptions are in
-      # third-party code and in platform/globals.h which uses it to implement
-      # bit_cast and bit_copy.
-      if not filename.endswith(os.path.join('platform', 'globals.h')) and \
-         filename.find('third_party') == -1:
-        fh = open(filename, 'r')
-        content = fh.read()
-        match = re.search('\\bmemcpy\\b', content)
-        if match:
-          line_number = content[0:match.start()].count('\n') + 1
-          print "%s:%d: use of memcpy is forbidden" % (filename, line_number)
-          memcpy_match_count += 1
+      # Check for memcpy use.
+      memcpy_match_count += CheckMemcpy(filename)
 
   # Report a presubmit error if any of the files had an error.
   if cpplint._cpplint_state.error_count > 0 or memcpy_match_count > 0:
@@ -84,9 +44,15 @@
   return result
 
 
+def CheckGn(input_api, output_api):
+  return input_api.canned_checks.CheckGNFormatted(input_api, output_api)
+
+
 def CheckChangeOnUpload(input_api, output_api):
-  return RunLint(input_api, output_api)
+  return (RunLint(input_api, output_api) +
+          CheckGn(input_api, output_api))
 
 
 def CheckChangeOnCommit(input_api, output_api):
-  return RunLint(input_api, output_api)
+  return (RunLint(input_api, output_api) +
+          CheckGn(input_api, output_api))
diff --git a/runtime/bin/BUILD.gn b/runtime/bin/BUILD.gn
index 81cd6b1..2a2d17b 100644
--- a/runtime/bin/BUILD.gn
+++ b/runtime/bin/BUILD.gn
@@ -20,31 +20,36 @@
 
 resources_sources_gypi =
     exec_script("../../tools/gypi_to_gn.py",
-                [rebase_path("vmservice/vmservice_sources.gypi")],
+                [ rebase_path("vmservice/vmservice_sources.gypi") ],
                 "scope",
-                ["vmservice/vmservice_sources.gypi"])
+                [ "vmservice/vmservice_sources.gypi" ])
 
 # Generate a resources.cc file for the service isolate without Observatory.
 action("gen_resources_cc") {
-  visibility = [ ":*" ] # Only targets in this file can see this.
+  visibility = [ ":*" ]  # Only targets in this file can see this.
   script = "../tools/create_resources.py"
   inputs = [
     "../tools/create_resources.py",
   ]
+
   # The path below is hard coded for the Mojo and Flutter trees. When moving
   # the Dart runtime to gn, this path might need to be updated.
-  sources = rebase_path(resources_sources_gypi.sources,
-                        "",
-                        "../bin/vmservice/")
-  outputs = [ "$target_gen_dir/resources_gen.cc" ]
+  sources = rebase_path(resources_sources_gypi.sources, "", "../bin/vmservice/")
+  outputs = [
+    "$target_gen_dir/resources_gen.cc",
+  ]
   args = [
-    "--output",
-    rebase_path("$target_gen_dir/resources_gen.cc", root_build_dir),
-    "--outer_namespace", "dart",
-    "--inner_namespace", "bin",
-    "--table_name", "service_bin",
-    "--root_prefix", rebase_path(".", root_build_dir) + "/",
-  ] + rebase_path(sources, root_build_dir)
+           "--output",
+           rebase_path("$target_gen_dir/resources_gen.cc", root_build_dir),
+           "--outer_namespace",
+           "dart",
+           "--inner_namespace",
+           "bin",
+           "--table_name",
+           "service_bin",
+           "--root_prefix",
+           rebase_path(".", root_build_dir) + "/",
+         ] + rebase_path(sources, root_build_dir)
 }
 
 template("gen_library_src_path") {
@@ -54,10 +59,12 @@
     visibility = [ ":*" ]  # Only targets in this file can see this.
     script = "../tools/gen_library_src_paths.py"
     inputs = [
-      "../tools/gen_library_src_paths.py",
-      "builtin_in.cc",
-    ] + invoker.sources
-    outputs = [ invoker.output, ]
+               "../tools/gen_library_src_paths.py",
+               "builtin_in.cc",
+             ] + invoker.sources
+    outputs = [
+      invoker.output,
+    ]
     name = invoker.name
     kind = invoker.kind
     library_name = "dart:${name}"
@@ -65,20 +72,24 @@
       library_name = invoker.library_name
     }
     args = [
-      "--output", rebase_path(invoker.output, root_build_dir),
-      "--input_cc", rebase_path("builtin_in.cc", root_build_dir),
-      "--include", "bin/builtin.h",
-      "--var_name", "dart::bin::Builtin::${name}_${kind}_paths_",
-      "--library_name", library_name,] +
-      rebase_path(invoker.sources, root_build_dir)
+             "--output",
+             rebase_path(invoker.output, root_build_dir),
+             "--input_cc",
+             rebase_path("builtin_in.cc", root_build_dir),
+             "--include",
+             "bin/builtin.h",
+             "--var_name",
+             "dart::bin::Builtin::${name}_${kind}_paths_",
+             "--library_name",
+             library_name,
+           ] + rebase_path(invoker.sources, root_build_dir)
   }
 }
 
-builtin_sources_gypi =
-    exec_script("../../tools/gypi_to_gn.py",
-                [rebase_path("builtin_sources.gypi")],
-                "scope",
-                ["builtin_sources.gypi"])
+builtin_sources_gypi = exec_script("../../tools/gypi_to_gn.py",
+                                   [ rebase_path("builtin_sources.gypi") ],
+                                   "scope",
+                                   [ "builtin_sources.gypi" ])
 
 gen_library_src_path("generate_builtin_cc_file") {
   name = "_builtin"
@@ -89,24 +100,23 @@
 
 sdk_io_sources_gypi =
     exec_script("../../tools/gypi_to_gn.py",
-                [rebase_path("../../sdk/lib/io/io_sources.gypi")],
+                [ rebase_path("../../sdk/lib/io/io_sources.gypi") ],
                 "scope",
-                ["../../sdk/lib/io/io_sources.gypi"])
+                [ "../../sdk/lib/io/io_sources.gypi" ])
 sdk_io_sources =
     rebase_path(sdk_io_sources_gypi.sources, ".", "../../sdk/lib/io")
 
 gen_library_src_path("generate_io_cc_file") {
   name = "io"
   kind = "source"
-  sources = ["../../sdk/lib/io/io.dart"] + sdk_io_sources
+  sources = [ "../../sdk/lib/io/io.dart" ] + sdk_io_sources
   output = "$target_gen_dir/io_gen.cc"
 }
 
-io_sources_gypi =
-    exec_script("../../tools/gypi_to_gn.py",
-                [rebase_path("io_sources.gypi")],
-                "scope",
-                ["io_sources.gypi"])
+io_sources_gypi = exec_script("../../tools/gypi_to_gn.py",
+                              [ rebase_path("io_sources.gypi") ],
+                              "scope",
+                              [ "io_sources.gypi" ])
 
 gen_library_src_path("generate_io_patch_cc_file") {
   name = "io"
@@ -118,7 +128,9 @@
 gen_library_src_path("generate_html_cc_file") {
   name = "html"
   kind = "source"
-  sources = ["../../sdk/lib/html/dartium/html_dartium.dart"]
+  sources = [
+    "../../sdk/lib/html/dartium/html_dartium.dart",
+  ]
   output = "$target_gen_dir/html_gen.cc"
 }
 
@@ -126,13 +138,13 @@
   name = "html_common"
   kind = "source"
   sources = [
-    "../../sdk/lib/html/html_common/html_common.dart",
+    "../../sdk/lib/html/html_common/conversions.dart",
+    "../../sdk/lib/html/html_common/conversions_dartium.dart",
     "../../sdk/lib/html/html_common/css_class_set.dart",
     "../../sdk/lib/html/html_common/device.dart",
     "../../sdk/lib/html/html_common/filtered_element_list.dart",
+    "../../sdk/lib/html/html_common/html_common.dart",
     "../../sdk/lib/html/html_common/lists.dart",
-    "../../sdk/lib/html/html_common/conversions.dart",
-    "../../sdk/lib/html/html_common/conversions_dartium.dart",
   ]
   output = "$target_gen_dir/html_common_gen.cc"
 }
@@ -140,36 +152,55 @@
 gen_library_src_path("generate_js_cc_file") {
   name = "js"
   kind = "source"
-  sources = ["../../sdk/lib/js/dartium/js_dartium.dart"]
+  sources = [
+    "../../sdk/lib/js/dartium/js_dartium.dart",
+  ]
   output = "$target_gen_dir/js_gen.cc"
 }
 
+gen_library_src_path("generate_js_util_cc_file") {
+  name = "js_util"
+  kind = "source"
+  sources = [
+    "../../sdk/lib/js_util/dartium/js_util_dartium.dart",
+  ]
+  output = "$target_gen_dir/js_util_gen.cc"
+}
+
 gen_library_src_path("generate_blink_cc_file") {
   name = "_blink"
   kind = "source"
-  sources = ["../../sdk/lib/_blink/dartium/_blink_dartium.dart"]
+  sources = [
+    "../../sdk/lib/_blink/dartium/_blink_dartium.dart",
+  ]
   output = "$target_gen_dir/blink_gen.cc"
 }
 
 gen_library_src_path("generate_indexed_db_cc_file") {
   name = "indexed_db"
   kind = "source"
-  sources = ["../../sdk/lib/indexed_db/dartium/indexed_db_dartium.dart"]
+  sources = [
+    "../../sdk/lib/indexed_db/dartium/indexed_db_dartium.dart",
+  ]
   output = "$target_gen_dir/indexed_db_gen.cc"
 }
 
 gen_library_src_path("generate_cached_patches_cc_file") {
   name = "cached_patches"
   library_name = "cached_patches.dart"
-  kind = "sources"
-  sources = ["../../sdk/lib/js/dartium/cached_patches.dart"]
+  kind = "source"
+  sources = [
+    "../../sdk/lib/js/dartium/cached_patches.dart",
+  ]
   output = "$target_gen_dir/cached_patches_gen.cc"
 }
 
 gen_library_src_path("generate_web_gl_cc_file") {
   name = "web_gl"
   kind = "source"
-  sources = ["../../sdk/lib/web_gl/dartium/web_gl_dartium.dart"]
+  sources = [
+    "../../sdk/lib/web_gl/dartium/web_gl_dartium.dart",
+  ]
   output = "$target_gen_dir/web_gl_gen.cc"
 }
 
@@ -177,36 +208,42 @@
   name = "metadata"
   library_name = "metadata.dart"
   kind = "source"
-  sources = ["../../sdk/lib/html/html_common/metadata.dart"]
+  sources = [
+    "../../sdk/lib/html/html_common/metadata.dart",
+  ]
   output = "$target_gen_dir/metadata_gen.cc"
 }
 
 gen_library_src_path("generate_web_sql_cc_file") {
   name = "web_sql"
   kind = "source"
-  sources = ["../../sdk/lib/web_sql/dartium/web_sql_dartium.dart"]
+  sources = [
+    "../../sdk/lib/web_sql/dartium/web_sql_dartium.dart",
+  ]
   output = "$target_gen_dir/web_sql_gen.cc"
 }
 
 gen_library_src_path("generate_svg_cc_file") {
   name = "svg"
   kind = "source"
-  sources = ["../../sdk/lib/svg/dartium/svg_dartium.dart"]
+  sources = [
+    "../../sdk/lib/svg/dartium/svg_dartium.dart",
+  ]
   output = "$target_gen_dir/svg_gen.cc"
 }
 
 gen_library_src_path("generate_web_audio_cc_file") {
   name = "web_audio"
   kind = "source"
-  sources = ["../../sdk/lib/web_audio/dartium/web_audio_dartium.dart"]
+  sources = [
+    "../../sdk/lib/web_audio/dartium/web_audio_dartium.dart",
+  ]
   output = "$target_gen_dir/web_audio_gen.cc"
 }
 
 config("libdart_builtin_config") {
   if (!is_win) {
-    libs = [
-      "dl",
-    ]
+    libs = [ "dl" ]
   }
   if (is_android) {
     libs += [
@@ -218,53 +255,58 @@
 
 builtin_impl_sources_gypi =
     exec_script("../../tools/gypi_to_gn.py",
-                [rebase_path("builtin_impl_sources.gypi")],
+                [ rebase_path("builtin_impl_sources.gypi") ],
                 "scope",
-                ["builtin_impl_sources.gypi"])
+                [ "builtin_impl_sources.gypi" ])
 
 static_library("libdart_builtin") {
-  configs += ["..:dart_config",
-              "..:dart_maybe_product_config"]
-  public_configs = [":libdart_builtin_config"]
+  configs += [
+    "..:dart_config",
+    "..:dart_maybe_product_config",
+  ]
+  public_configs = [ ":libdart_builtin_config" ]
   deps = [
+    ":generate_blink_cc_file",
     ":generate_builtin_cc_file",
-    ":generate_io_cc_file",
-    ":generate_io_patch_cc_file",
+    ":generate_cached_patches_cc_file",
     ":generate_html_cc_file",
     ":generate_html_common_cc_file",
-    ":generate_js_cc_file",
-    ":generate_blink_cc_file",
     ":generate_indexed_db_cc_file",
-    ":generate_cached_patches_cc_file",
-    ":generate_web_gl_cc_file",
+    ":generate_io_cc_file",
+    ":generate_io_patch_cc_file",
+    ":generate_js_cc_file",
+    ":generate_js_util_cc_file",
     ":generate_metadata_cc_file",
-    ":generate_web_sql_cc_file",
     ":generate_svg_cc_file",
     ":generate_web_audio_cc_file",
+    ":generate_web_gl_cc_file",
+    ":generate_web_sql_cc_file",
   ]
-  include_dirs = [
-    "..",
-  ]
-  set_sources_assignment_filter(["*_test.cc", "*_test.h"])
+  include_dirs = [ ".." ]
+  set_sources_assignment_filter([
+                                  "*_test.cc",
+                                  "*_test.h",
+                                ])
   sources = [
-    "log_android.cc",
-    "log_fuchsia.cc",
-    "log_linux.cc",
-    "log_macos.cc",
-    "log_win.cc",
-  ] + builtin_impl_sources_gypi.sources
+              "log_android.cc",
+              "log_fuchsia.cc",
+              "log_linux.cc",
+              "log_macos.cc",
+              "log_win.cc",
+            ] + builtin_impl_sources_gypi.sources
 }
 
-io_impl_sources_gypi =
-    exec_script("../../tools/gypi_to_gn.py",
-                [ rebase_path("io_impl_sources.gypi") ],
-                "scope",
-                [ "io_impl_sources.gypi" ])
+io_impl_sources_gypi = exec_script("../../tools/gypi_to_gn.py",
+                                   [ rebase_path("io_impl_sources.gypi") ],
+                                   "scope",
+                                   [ "io_impl_sources.gypi" ])
 
 executable("gen_snapshot") {
-  configs += ["..:dart_config",
-              "..:dart_maybe_product_config",
-              "..:dart_precompiler_config"]
+  configs += [
+    "..:dart_config",
+    "..:dart_maybe_product_config",
+    "..:dart_precompiler_config",
+  ]
   deps = [
     ":gen_resources_cc",
     ":gen_snapshot_dart_io",
@@ -276,30 +318,29 @@
   ]
 
   sources = [
-    "address_sanitizer.cc",
-    "gen_snapshot.cc",
-    # Very limited native resolver provided.
-    "builtin_common.cc",
-    "builtin_gen_snapshot.cc",
-    "builtin.cc",
-    "builtin.h",
-    "vmservice_impl.cc",
-    "vmservice_impl.h",
     # Include generated source files.
     "$target_gen_dir/builtin_gen.cc",
     "$target_gen_dir/io_gen.cc",
     "$target_gen_dir/io_patch_gen.cc",
     "$target_gen_dir/resources_gen.cc",
+    "address_sanitizer.cc",
+    "builtin.cc",
+    "builtin.h",
+
+    # Very limited native resolver provided.
+    "builtin_common.cc",
+    "builtin_gen_snapshot.cc",
+    "gen_snapshot.cc",
+    "vmservice_impl.cc",
+    "vmservice_impl.h",
   ]
 
-  include_dirs = [
-    "..",
-  ]
+  include_dirs = [ ".." ]
 
   if (is_mac) {
     libs = [
       "CoreFoundation.framework",
-      "CoreServices.framework"
+      "CoreServices.framework",
     ]
   }
 
@@ -317,9 +358,11 @@
 # A source set for the implementation of 'dart:io' library
 # (without secure sockets) suitable for linking with gen_snapshot.
 source_set("gen_snapshot_dart_io") {
-  configs += ["..:dart_config",
-              "..:dart_maybe_product_config",
-              "..:dart_precompiler_config"]
+  configs += [
+    "..:dart_config",
+    "..:dart_maybe_product_config",
+    "..:dart_precompiler_config",
+  ]
 
   deps = [
     "$dart_zlib_path",
@@ -351,88 +394,101 @@
 
   include_dirs = [
     "..",
-    "//third_party"
+    "//third_party",
   ]
 }
 
 source_set("libdart_embedder_noio") {
-  configs += ["..:dart_config",
-              "..:dart_maybe_product_config"]
+  configs += [
+    "..:dart_config",
+    "..:dart_maybe_product_config",
+  ]
   deps = [
     "..:libdart",
   ]
 }
 
 # A source set for the implementation of 'dart:io' library.
-source_set("embedded_dart_io") {
-  configs += ["..:dart_config",
-              "..:dart_maybe_product_config"]
-  custom_sources_filter = [
-    "*_test.cc",
-    "*_test.h",
-    "builtin.cc",
-    "builtin_gen_snapshot.cc",
-  ]
-  if (!is_mac && !is_ios) {
-    # Dart tree uses *_macos.* instead of *_mac.*
-    custom_sources_filter += [
-      "*_macos.h",
-      "*_macos.cc",
-    ]
+template("dart_io") {
+  extra_sources = []
+  if (defined(invoker.extra_sources)) {
+    extra_sources += invoker.extra_sources
   }
-  set_sources_assignment_filter(custom_sources_filter)
-
-  defines = []
-  if (is_mac || is_ios) {
-    libs = [
-      "CoreFoundation.framework",
-      "Security.framework",
+  source_set(target_name) {
+    configs += [
+      "..:dart_config",
+      "..:dart_maybe_product_config",
     ]
-
-    if (is_mac) {
-      libs += [
-        "CoreServices.framework",
+    custom_sources_filter = [
+      "*_test.cc",
+      "*_test.h",
+      "builtin.cc",
+      "builtin_gen_snapshot.cc",
+    ]
+    if (!is_mac && !is_ios) {
+      # Dart tree uses *_macos.* instead of *_mac.*
+      custom_sources_filter += [
+        "*_macos.h",
+        "*_macos.cc",
       ]
     }
-  } else if (defined(is_fuchsia) && is_fuchsia) {
-    defines += [
-      "DART_IO_SECURE_SOCKET_DISABLED"
-    ]
-  } else {
-    deps = [
-      "//third_party/boringssl",
+    set_sources_assignment_filter(custom_sources_filter)
+
+    defines = []
+    if (is_mac || is_ios) {
+      libs = [
+        "CoreFoundation.framework",
+        "Security.framework",
+      ]
+
+      if (is_mac) {
+        libs += [ "CoreServices.framework" ]
+      }
+    } else if (defined(is_fuchsia) && is_fuchsia) {
+      defines += [ "DART_IO_SECURE_SOCKET_DISABLED" ]
+    } else {
+      deps = [
+        "//third_party/boringssl",
+      ]
+    }
+
+    sources = io_impl_sources_gypi.sources + builtin_impl_sources_gypi.sources
+    sources += [
+                 "builtin_natives.cc",
+                 "io_natives.cc",
+                 "io_natives.h",
+                 "log_android.cc",
+                 "log_linux.cc",
+                 "log_macos.cc",
+                 "log_win.cc",
+                 "log.h",
+               ] + extra_sources
+
+    if (is_linux || is_win) {
+      if (dart_use_fallback_root_certificates) {
+        sources += [ "//third_party/root_certificates/root_certificates.cc" ]
+      } else {
+        defines += [ "DART_IO_ROOT_CERTS_DISABLED" ]
+      }
+    }
+
+    include_dirs = [
+      "..",
+      "//third_party",
     ]
   }
+}
 
-  sources = io_impl_sources_gypi.sources + builtin_impl_sources_gypi.sources
-  sources += [
+dart_io("embedded_dart_io") {
+  extra_sources = [
     "builtin_nolib.cc",
-    "builtin_natives.cc",
-    "io_natives.cc",
-    "io_natives.h",
     "embedded_dart_io.cc",
     "embedded_dart_io.h",
-    "log_android.cc",
-    "log_linux.cc",
-    "log_macos.cc",
-    "log_win.cc",
-    "log.h",
   ]
+}
 
-  if (is_linux || is_win) {
-    if (dart_use_fallback_root_certificates) {
-      sources += [ "//third_party/root_certificates/root_certificates.cc"]
-    } else {
-      defines += [
-        "DART_IO_ROOT_CERTS_DISABLED",
-      ]
-    }
-  }
-
-  include_dirs = [
-    "..",
-    "//third_party"
-  ]
+dart_io("standalone_dart_io") {
+  extra_sources = []
 }
 
 action("generate_snapshot_bin") {
@@ -526,31 +582,29 @@
   }
   executable(target_name) {
     configs += [
-      "..:dart_config",
-      "..:dart_maybe_product_config"
-    ] + extra_configs
+                 "..:dart_config",
+                 "..:dart_maybe_product_config",
+               ] + extra_configs
 
     deps = [
-      ":gen_resources_cc",
-      ":embedded_dart_io",
-      ":libdart_builtin",
-      "$dart_zlib_path",
-    ] + extra_deps
+             ":gen_resources_cc",
+             ":standalone_dart_io",
+             ":libdart_builtin",
+             "$dart_zlib_path",
+           ] + extra_deps
 
     if (dart_use_tcmalloc) {
-      deps += [
-        "//third_party/tcmalloc",
-      ]
+      deps += [ "//third_party/tcmalloc" ]
     }
 
     defines = extra_defines
 
     sources = [
-      "main.cc",
-      "vmservice_impl.cc",
-      "vmservice_impl.h",
-      "$target_gen_dir/resources_gen.cc",
-    ] + extra_sources
+                "main.cc",
+                "vmservice_impl.cc",
+                "vmservice_impl.h",
+                "$target_gen_dir/resources_gen.cc",
+              ] + extra_sources
 
     include_dirs = [
       "..",
@@ -558,13 +612,9 @@
     ]
 
     if (is_win) {
-      ldflags = [
-        "/EXPORT:Dart_True"
-      ]
+      ldflags = [ "/EXPORT:Dart_True" ]
     } else {
-      ldflags = [
-        "-rdynamic",
-      ]
+      ldflags = [ "-rdynamic" ]
     }
 
     if (is_win) {
@@ -586,28 +636,29 @@
       ":dart_snapshot_cc",
       "../observatory:standalone_observatory_archive",
     ]
+    extra_sources = [ "builtin_nolib.cc" ]
   }
 
   dart_executable("dart_noopt") {
-    extra_configs = [
-      "..:dart_precompiler_config",
-    ]
+    extra_configs = [ "..:dart_precompiler_config" ]
     extra_deps = [
       "..:libdart_noopt",
       ":dart_snapshot_cc",
       "../observatory:standalone_observatory_archive",
     ]
+    extra_sources = [ "builtin_nolib.cc" ]
   }
 
   dart_executable("dart_precompiled_runtime") {
-    extra_configs = [
-      "..:dart_precompiled_runtime_config"
-    ]
+    extra_configs = [ "..:dart_precompiled_runtime_config" ]
     extra_deps = [
       "..:libdart_precompiled_runtime",
-      ":dart_snapshot_cc",
       "../observatory:standalone_observatory_archive",
     ]
+    extra_sources = [
+      "builtin_nolib.cc",
+      "snapshot_empty.cc",
+    ]
   }
 }
 
@@ -617,28 +668,64 @@
     "..:dart_no_snapshot_config",
   ]
   extra_deps = [
-    "..:libdart",
+    ":generate_builtin_cc_file",
+    ":generate_io_cc_file",
+    ":generate_io_patch_cc_file",
+    ":generate_html_cc_file",
+    ":generate_html_common_cc_file",
+    ":generate_js_cc_file",
+    ":generate_js_util_cc_file",
+    ":generate_blink_cc_file",
+    ":generate_indexed_db_cc_file",
+    ":generate_cached_patches_cc_file",
+    ":generate_web_gl_cc_file",
+    ":generate_metadata_cc_file",
+    ":generate_web_sql_cc_file",
+    ":generate_svg_cc_file",
+    ":generate_web_audio_cc_file",
+    "..:libdart_nosnapshot_with_precompiler",
   ]
-  extra_defines = [
-    "NO_OBSERVATORY",
-  ]
+  extra_defines = [ "NO_OBSERVATORY" ]
   extra_sources = [
+    "builtin.cc",
+    "builtin.h",
     "observatory_assets_empty.cc",
     "snapshot_empty.cc",
+
+    # Include generated source files.
+    "$target_gen_dir/builtin_gen.cc",
+    "$target_gen_dir/io_gen.cc",
+    "$target_gen_dir/io_patch_gen.cc",
+    "$target_gen_dir/html_gen.cc",
+    "$target_gen_dir/html_common_gen.cc",
+    "$target_gen_dir/js_gen.cc",
+    "$target_gen_dir/js_util_gen.cc",
+    "$target_gen_dir/blink_gen.cc",
+    "$target_gen_dir/indexed_db_gen.cc",
+    "$target_gen_dir/cached_patches_gen.cc",
+    "$target_gen_dir/web_gl_gen.cc",
+    "$target_gen_dir/metadata_gen.cc",
+    "$target_gen_dir/web_sql_gen.cc",
+    "$target_gen_dir/svg_gen.cc",
+    "$target_gen_dir/web_audio_gen.cc",
   ]
 }
 
 if (defined(is_fuchsia) && is_fuchsia) {
   copy("hello_fuchsia") {
-    sources = [ "../tests/vm/dart/hello_fuchsia_test.dart" ]
-    outputs = [ "$root_out_dir/hello_fuchsia.dart" ]
+    sources = [
+      "../tests/vm/dart/hello_fuchsia_test.dart",
+    ]
+    outputs = [
+      "$root_out_dir/hello_fuchsia.dart",
+    ]
   }
 
   executable("run_vm_tests_fuchsia") {
     testonly = true
-    configs += ["..:dart_config"]
+    configs += [ "..:dart_config" ]
     sources = [
-      "run_vm_tests_fuchsia.cc"
+      "run_vm_tests_fuchsia.cc",
     ]
     libs = [
       "launchpad",
@@ -657,10 +744,9 @@
   if (defined(is_fuchsia) && is_fuchsia) {
     extra_deps += [ ":hello_fuchsia" ]
   }
-  extra_defines = [
-    "NO_OBSERVATORY",
-  ]
+  extra_defines = [ "NO_OBSERVATORY" ]
   extra_sources = [
+    "builtin_nolib.cc",
     "observatory_assets_empty.cc",
   ]
 }
@@ -700,56 +786,57 @@
 }
 
 executable("run_vm_tests") {
-  configs += ["..:dart_config",
-              "..:dart_maybe_product_config"]
+  configs += [
+    "..:dart_config",
+    "..:dart_maybe_product_config",
+  ]
   deps = [
-    "..:libdart",
-    ":libdart_builtin",
-    ":embedded_dart_io",
     ":dart_snapshot_cc",
     ":generate_snapshot_test_dat_file",
+    ":libdart_builtin",
+    ":standalone_dart_io",
     "$dart_zlib_path",
+    "..:libdart",
   ]
   include_dirs = [
     "..",
     "$target_gen_dir",
   ]
-  defines = [
-    "TESTING",
-  ]
+  defines = [ "TESTING" ]
 
   if (dart_use_tcmalloc) {
-    deps += [
-      "//third_party/tcmalloc",
-    ]
+    deps += [ "//third_party/tcmalloc" ]
   }
 
   # The VM sources are already included in libdart, so we just want to add in
   # the tests here.
   vm_tests_list = exec_script("../../tools/gypi_to_gn.py",
-                                [rebase_path("../vm/vm_sources.gypi"),
-                                 "--keep_only=_test.cc",
-                                 "--keep_only=_test.h",],
-                                "scope",
-                                ["../vm/vm_sources.gypi"])
+                              [
+                                rebase_path("../vm/vm_sources.gypi"),
+                                "--keep_only=_test.cc",
+                                "--keep_only=_test.h",
+                              ],
+                              "scope",
+                              [ "../vm/vm_sources.gypi" ])
   vm_tests = rebase_path(vm_tests_list.sources, ".", "../vm")
 
   builtin_impl_tests_list =
       exec_script("../../tools/gypi_to_gn.py",
-                  [rebase_path("builtin_impl_sources.gypi"),
-                   "--keep_only=_test.cc",
-                   "--keep_only=_test.h",],
+                  [
+                    rebase_path("builtin_impl_sources.gypi"),
+                    "--keep_only=_test.cc",
+                    "--keep_only=_test.h",
+                  ],
                   "scope",
-                  ["builtin_impl_sources.gypi"])
+                  [ "builtin_impl_sources.gypi" ])
 
   sources = [
-    "run_vm_tests.cc",
-  ] + builtin_impl_tests_list.sources + vm_tests
+              "builtin_nolib.cc",
+              "run_vm_tests.cc",
+            ] + builtin_impl_tests_list.sources + vm_tests
 
   if (!is_win) {
-    ldflags = [
-      "-rdynamic",
-    ]
+    ldflags = [ "-rdynamic" ]
   }
 
   if (is_win) {
@@ -772,21 +859,15 @@
       "test_extension.c",
       "test_extension_dllmain_win.cc",
     ]
-    include_dirs = [
-      "..",
-    ]
+    include_dirs = [ ".." ]
     defines = [
       # The only effect of DART_SHARED_LIB is to export the Dart API.
       "DART_SHARED_LIB",
     ]
     if (is_win) {
-      libs = [
-        "dart.lib"
-      ]
+      libs = [ "dart.lib" ]
       abs_root_out_dir = rebase_path(root_out_dir)
-      ldflags = [
-        "/LIBPATH:$abs_root_out_dir"
-      ]
+      ldflags = [ "/LIBPATH:$abs_root_out_dir" ]
     }
   }
 
@@ -798,21 +879,15 @@
       "../../samples/sample_extension/sample_extension.cc",
       "../../samples/sample_extension/sample_extension_dllmain_win.cc",
     ]
-    include_dirs = [
-      "..",
-    ]
+    include_dirs = [ ".." ]
     defines = [
       # The only effect of DART_SHARED_LIB is to export the Dart API.
       "DART_SHARED_LIB",
     ]
     if (is_win) {
-      libs = [
-        "dart.lib"
-      ]
+      libs = [ "dart.lib" ]
       abs_root_out_dir = rebase_path(root_out_dir)
-      ldflags = [
-        "/LIBPATH:$abs_root_out_dir"
-      ]
+      ldflags = [ "/LIBPATH:$abs_root_out_dir" ]
     }
   }
 }
diff --git a/runtime/bin/builtin.dart b/runtime/bin/builtin.dart
index d4aa012..ceba8cd 100644
--- a/runtime/bin/builtin.dart
+++ b/runtime/bin/builtin.dart
@@ -1,5 +1,5 @@
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights solveserved. Use of this source code is governed by a
+// for 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 builtin;
diff --git a/runtime/bin/builtin.h b/runtime/bin/builtin.h
index d7e1e4c..f61316a 100644
--- a/runtime/bin/builtin.h
+++ b/runtime/bin/builtin.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 BIN_BUILTIN_H_
-#define BIN_BUILTIN_H_
+#ifndef RUNTIME_BIN_BUILTIN_H_
+#define RUNTIME_BIN_BUILTIN_H_
 
 #include <stdio.h>
 #include <stdlib.h>
@@ -103,4 +103,4 @@
 }  // namespace bin
 }  // namespace dart
 
-#endif  // BIN_BUILTIN_H_
+#endif  // RUNTIME_BIN_BUILTIN_H_
diff --git a/runtime/bin/common_patch.dart b/runtime/bin/common_patch.dart
index b485dc9a..3e9be62 100644
--- a/runtime/bin/common_patch.dart
+++ b/runtime/bin/common_patch.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+import 'dart:nativewrappers';
+
 @patch class _IOCrypto {
   @patch static Uint8List getRandomBytes(int count)
       native "Crypto_GetRandomBytes";
@@ -10,4 +12,4 @@
 _setupHooks() {
   VMLibraryHooks.eventHandlerSendData = _EventHandler._sendData;
   VMLibraryHooks.timerMillisecondClock = _EventHandler._timerMillisecondClock;
-}
\ No newline at end of file
+}
diff --git a/runtime/bin/crypto.h b/runtime/bin/crypto.h
index b82fc4f..ccfb8fb 100644
--- a/runtime/bin/crypto.h
+++ b/runtime/bin/crypto.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 BIN_CRYPTO_H_
-#define BIN_CRYPTO_H_
+#ifndef RUNTIME_BIN_CRYPTO_H_
+#define RUNTIME_BIN_CRYPTO_H_
 
 #include "bin/builtin.h"
 #include "bin/utils.h"
@@ -23,5 +23,5 @@
 }  // namespace bin
 }  // namespace dart
 
-#endif  // BIN_CRYPTO_H_
+#endif  // RUNTIME_BIN_CRYPTO_H_
 
diff --git a/runtime/bin/dartutils.h b/runtime/bin/dartutils.h
index ff2ae20..c2ab3fb 100644
--- a/runtime/bin/dartutils.h
+++ b/runtime/bin/dartutils.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 BIN_DARTUTILS_H_
-#define BIN_DARTUTILS_H_
+#ifndef RUNTIME_BIN_DARTUTILS_H_
+#define RUNTIME_BIN_DARTUTILS_H_
 
 #include "bin/isolate_data.h"
 #include "include/dart_api.h"
@@ -686,4 +686,4 @@
 }  // namespace bin
 }  // namespace dart
 
-#endif  // BIN_DARTUTILS_H_
+#endif  // RUNTIME_BIN_DARTUTILS_H_
diff --git a/runtime/bin/directory.h b/runtime/bin/directory.h
index ee1f389..a15e6ad 100644
--- a/runtime/bin/directory.h
+++ b/runtime/bin/directory.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 BIN_DIRECTORY_H_
-#define BIN_DIRECTORY_H_
+#ifndef RUNTIME_BIN_DIRECTORY_H_
+#define RUNTIME_BIN_DIRECTORY_H_
 
 #include "bin/builtin.h"
 #include "bin/dartutils.h"
@@ -300,4 +300,4 @@
 }  // namespace bin
 }  // namespace dart
 
-#endif  // BIN_DIRECTORY_H_
+#endif  // RUNTIME_BIN_DIRECTORY_H_
diff --git a/runtime/bin/embedded_dart_io.h b/runtime/bin/embedded_dart_io.h
index 56dbba8..84f5aa4 100644
--- a/runtime/bin/embedded_dart_io.h
+++ b/runtime/bin/embedded_dart_io.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 BIN_EMBEDDED_DART_IO_H_
-#define BIN_EMBEDDED_DART_IO_H_
+#ifndef RUNTIME_BIN_EMBEDDED_DART_IO_H_
+#define RUNTIME_BIN_EMBEDDED_DART_IO_H_
 
 namespace dart {
 namespace bin {
@@ -30,4 +30,4 @@
 }  // namespace bin
 }  // namespace dart
 
-#endif  // BIN_EMBEDDED_DART_IO_H_
+#endif  // RUNTIME_BIN_EMBEDDED_DART_IO_H_
diff --git a/runtime/bin/eventhandler.h b/runtime/bin/eventhandler.h
index 44b5ec8..849c3ed 100644
--- a/runtime/bin/eventhandler.h
+++ b/runtime/bin/eventhandler.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 BIN_EVENTHANDLER_H_
-#define BIN_EVENTHANDLER_H_
+#ifndef RUNTIME_BIN_EVENTHANDLER_H_
+#define RUNTIME_BIN_EVENTHANDLER_H_
 
 #include "bin/builtin.h"
 #include "bin/dartutils.h"
@@ -669,4 +669,4 @@
 }  // namespace bin
 }  // namespace dart
 
-#endif  // BIN_EVENTHANDLER_H_
+#endif  // RUNTIME_BIN_EVENTHANDLER_H_
diff --git a/runtime/bin/eventhandler_android.h b/runtime/bin/eventhandler_android.h
index 8841861..c2f72bc 100644
--- a/runtime/bin/eventhandler_android.h
+++ b/runtime/bin/eventhandler_android.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 BIN_EVENTHANDLER_ANDROID_H_
-#define BIN_EVENTHANDLER_ANDROID_H_
+#ifndef RUNTIME_BIN_EVENTHANDLER_ANDROID_H_
+#define RUNTIME_BIN_EVENTHANDLER_ANDROID_H_
 
-#if !defined(BIN_EVENTHANDLER_H_)
+#if !defined(RUNTIME_BIN_EVENTHANDLER_H_)
 #error Do not include eventhandler_android.h directly;
 #error use eventhandler.h instead.
 #endif
@@ -101,4 +101,4 @@
 }  // namespace bin
 }  // namespace dart
 
-#endif  // BIN_EVENTHANDLER_ANDROID_H_
+#endif  // RUNTIME_BIN_EVENTHANDLER_ANDROID_H_
diff --git a/runtime/bin/eventhandler_fuchsia.h b/runtime/bin/eventhandler_fuchsia.h
index b168c62..27e4903 100644
--- a/runtime/bin/eventhandler_fuchsia.h
+++ b/runtime/bin/eventhandler_fuchsia.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 BIN_EVENTHANDLER_FUCHSIA_H_
-#define BIN_EVENTHANDLER_FUCHSIA_H_
+#ifndef RUNTIME_BIN_EVENTHANDLER_FUCHSIA_H_
+#define RUNTIME_BIN_EVENTHANDLER_FUCHSIA_H_
 
-#if !defined(BIN_EVENTHANDLER_H_)
+#if !defined(RUNTIME_BIN_EVENTHANDLER_H_)
 #error Do not include eventhandler_fuchsia.h directly; use eventhandler.h instead.
 #endif
 
@@ -116,4 +116,4 @@
 }  // namespace bin
 }  // namespace dart
 
-#endif  // BIN_EVENTHANDLER_FUCHSIA_H_
+#endif  // RUNTIME_BIN_EVENTHANDLER_FUCHSIA_H_
diff --git a/runtime/bin/eventhandler_linux.h b/runtime/bin/eventhandler_linux.h
index dd87c22..ac46454 100644
--- a/runtime/bin/eventhandler_linux.h
+++ b/runtime/bin/eventhandler_linux.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 BIN_EVENTHANDLER_LINUX_H_
-#define BIN_EVENTHANDLER_LINUX_H_
+#ifndef RUNTIME_BIN_EVENTHANDLER_LINUX_H_
+#define RUNTIME_BIN_EVENTHANDLER_LINUX_H_
 
-#if !defined(BIN_EVENTHANDLER_H_)
+#if !defined(RUNTIME_BIN_EVENTHANDLER_H_)
 #error Do not include eventhandler_linux.h directly; use eventhandler.h instead.
 #endif
 
@@ -100,4 +100,4 @@
 }  // namespace bin
 }  // namespace dart
 
-#endif  // BIN_EVENTHANDLER_LINUX_H_
+#endif  // RUNTIME_BIN_EVENTHANDLER_LINUX_H_
diff --git a/runtime/bin/eventhandler_macos.h b/runtime/bin/eventhandler_macos.h
index b846594..fbeac80 100644
--- a/runtime/bin/eventhandler_macos.h
+++ b/runtime/bin/eventhandler_macos.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 BIN_EVENTHANDLER_MACOS_H_
-#define BIN_EVENTHANDLER_MACOS_H_
+#ifndef RUNTIME_BIN_EVENTHANDLER_MACOS_H_
+#define RUNTIME_BIN_EVENTHANDLER_MACOS_H_
 
-#if !defined(BIN_EVENTHANDLER_H_)
+#if !defined(RUNTIME_BIN_EVENTHANDLER_H_)
 #error Do not include eventhandler_macos.h directly; use eventhandler.h instead.
 #endif
 
@@ -115,4 +115,4 @@
 }  // namespace bin
 }  // namespace dart
 
-#endif  // BIN_EVENTHANDLER_MACOS_H_
+#endif  // RUNTIME_BIN_EVENTHANDLER_MACOS_H_
diff --git a/runtime/bin/eventhandler_patch.dart b/runtime/bin/eventhandler_patch.dart
index effe402..588a4b8 100644
--- a/runtime/bin/eventhandler_patch.dart
+++ b/runtime/bin/eventhandler_patch.dart
@@ -2,8 +2,6 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-import 'dart:nativewrappers';
-
 @patch class _EventHandler {
   @patch static void _sendData(Object sender,
                                     SendPort sendPort,
diff --git a/runtime/bin/eventhandler_win.h b/runtime/bin/eventhandler_win.h
index 9daff93..4ad7501 100644
--- a/runtime/bin/eventhandler_win.h
+++ b/runtime/bin/eventhandler_win.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 BIN_EVENTHANDLER_WIN_H_
-#define BIN_EVENTHANDLER_WIN_H_
+#ifndef RUNTIME_BIN_EVENTHANDLER_WIN_H_
+#define RUNTIME_BIN_EVENTHANDLER_WIN_H_
 
-#if !defined(BIN_EVENTHANDLER_H_)
+#if !defined(RUNTIME_BIN_EVENTHANDLER_H_)
 #error Do not include eventhandler_win.h directly; use eventhandler.h instead.
 #endif
 
@@ -553,4 +553,4 @@
 }  // namespace bin
 }  // namespace dart
 
-#endif  // BIN_EVENTHANDLER_WIN_H_
+#endif  // RUNTIME_BIN_EVENTHANDLER_WIN_H_
diff --git a/runtime/bin/extensions.h b/runtime/bin/extensions.h
index bcbcac3..3739c43 100644
--- a/runtime/bin/extensions.h
+++ b/runtime/bin/extensions.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 BIN_EXTENSIONS_H_
-#define BIN_EXTENSIONS_H_
+#ifndef RUNTIME_BIN_EXTENSIONS_H_
+#define RUNTIME_BIN_EXTENSIONS_H_
 
 #include "include/dart_api.h"
 #include "platform/globals.h"
@@ -41,4 +41,4 @@
 }  // namespace bin
 }  // namespace dart
 
-#endif  // BIN_EXTENSIONS_H_
+#endif  // RUNTIME_BIN_EXTENSIONS_H_
diff --git a/runtime/bin/fdutils.h b/runtime/bin/fdutils.h
index 93bebfb..25cd4dd 100644
--- a/runtime/bin/fdutils.h
+++ b/runtime/bin/fdutils.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 BIN_FDUTILS_H_
-#define BIN_FDUTILS_H_
+#ifndef RUNTIME_BIN_FDUTILS_H_
+#define RUNTIME_BIN_FDUTILS_H_
 
 #include "bin/builtin.h"
 #include "platform/globals.h"
@@ -47,4 +47,4 @@
 }  // namespace bin
 }  // namespace dart
 
-#endif  // BIN_FDUTILS_H_
+#endif  // RUNTIME_BIN_FDUTILS_H_
diff --git a/runtime/bin/file.h b/runtime/bin/file.h
index aa37ba5..3cce143 100644
--- a/runtime/bin/file.h
+++ b/runtime/bin/file.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 BIN_FILE_H_
-#define BIN_FILE_H_
+#ifndef RUNTIME_BIN_FILE_H_
+#define RUNTIME_BIN_FILE_H_
 
 #include <stdio.h>
 #include <stdlib.h>
@@ -243,4 +243,4 @@
 }  // namespace bin
 }  // namespace dart
 
-#endif  // BIN_FILE_H_
+#endif  // RUNTIME_BIN_FILE_H_
diff --git a/runtime/bin/file_system_watcher.h b/runtime/bin/file_system_watcher.h
index 5026da7..6bad471 100644
--- a/runtime/bin/file_system_watcher.h
+++ b/runtime/bin/file_system_watcher.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 BIN_FILE_SYSTEM_WATCHER_H_
-#define BIN_FILE_SYSTEM_WATCHER_H_
+#ifndef RUNTIME_BIN_FILE_SYSTEM_WATCHER_H_
+#define RUNTIME_BIN_FILE_SYSTEM_WATCHER_H_
 
 #if defined(DART_IO_DISABLED)
 #error "file_system_watcher.h can only be included on builds with IO enabled"
@@ -57,5 +57,5 @@
 }  // namespace bin
 }  // namespace dart
 
-#endif  // BIN_FILE_SYSTEM_WATCHER_H_
+#endif  // RUNTIME_BIN_FILE_SYSTEM_WATCHER_H_
 
diff --git a/runtime/bin/file_system_watcher_android.cc b/runtime/bin/file_system_watcher_android.cc
index 4c0380e..6843734 100644
--- a/runtime/bin/file_system_watcher_android.cc
+++ b/runtime/bin/file_system_watcher_android.cc
@@ -120,7 +120,7 @@
   while (offset < bytes) {
     struct inotify_event* e =
         reinterpret_cast<struct inotify_event*>(buffer + offset);
-    if ((e->mask & IN_IGNORED) == 0) {;
+    if ((e->mask & IN_IGNORED) == 0) {
       Dart_Handle event = Dart_NewList(5);
       int mask = InotifyEventToMask(e);
       Dart_ListSetAt(event, 0, Dart_NewInteger(mask));
diff --git a/runtime/bin/file_system_watcher_linux.cc b/runtime/bin/file_system_watcher_linux.cc
index ef4eaef..2f5179b 100644
--- a/runtime/bin/file_system_watcher_linux.cc
+++ b/runtime/bin/file_system_watcher_linux.cc
@@ -121,7 +121,7 @@
   while (offset < bytes) {
     struct inotify_event* e =
         reinterpret_cast<struct inotify_event*>(buffer + offset);
-    if ((e->mask & IN_IGNORED) == 0) {;
+    if ((e->mask & IN_IGNORED) == 0) {
       Dart_Handle event = Dart_NewList(5);
       int mask = InotifyEventToMask(e);
       Dart_ListSetAt(event, 0, Dart_NewInteger(mask));
diff --git a/runtime/bin/filter.h b/runtime/bin/filter.h
index 28c229f..54693c0 100644
--- a/runtime/bin/filter.h
+++ b/runtime/bin/filter.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 BIN_FILTER_H_
-#define BIN_FILTER_H_
+#ifndef RUNTIME_BIN_FILTER_H_
+#define RUNTIME_BIN_FILTER_H_
 
 #if defined(DART_IO_DISABLED)
 #error "filter.h can only be included on builds with IO enabled"
@@ -113,4 +113,4 @@
 }  // namespace bin
 }  // namespace dart
 
-#endif  // BIN_FILTER_H_
+#endif  // RUNTIME_BIN_FILTER_H_
diff --git a/runtime/bin/io_buffer.h b/runtime/bin/io_buffer.h
index fe38932..ddd60d4 100644
--- a/runtime/bin/io_buffer.h
+++ b/runtime/bin/io_buffer.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 BIN_IO_BUFFER_H_
-#define BIN_IO_BUFFER_H_
+#ifndef RUNTIME_BIN_IO_BUFFER_H_
+#define RUNTIME_BIN_IO_BUFFER_H_
 
 #include "include/dart_api.h"
 #include "platform/globals.h"
@@ -41,4 +41,4 @@
 }  // namespace bin
 }  // namespace dart
 
-#endif  // BIN_IO_BUFFER_H_
+#endif  // RUNTIME_BIN_IO_BUFFER_H_
diff --git a/runtime/bin/io_natives.h b/runtime/bin/io_natives.h
index c17dce5..0c64e59 100644
--- a/runtime/bin/io_natives.h
+++ b/runtime/bin/io_natives.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 BIN_IO_NATIVES_H_
-#define BIN_IO_NATIVES_H_
+#ifndef RUNTIME_BIN_IO_NATIVES_H_
+#define RUNTIME_BIN_IO_NATIVES_H_
 
 #include "include/dart_api.h"
 
@@ -19,4 +19,4 @@
 }  // namespace bin
 }  // namespace dart
 
-#endif  // BIN_IO_NATIVES_H_
+#endif  // RUNTIME_BIN_IO_NATIVES_H_
diff --git a/runtime/bin/io_service.h b/runtime/bin/io_service.h
index 209561a..01d6eac 100644
--- a/runtime/bin/io_service.h
+++ b/runtime/bin/io_service.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 BIN_IO_SERVICE_H_
-#define BIN_IO_SERVICE_H_
+#ifndef RUNTIME_BIN_IO_SERVICE_H_
+#define RUNTIME_BIN_IO_SERVICE_H_
 
 #if defined(DART_IO_DISABLED) || defined(DART_IO_SECURE_SOCKET_DISABLED)
 #error "io_service.h can only be included on builds with IO and SSL enabled"
@@ -77,4 +77,4 @@
 }  // namespace bin
 }  // namespace dart
 
-#endif  // BIN_IO_SERVICE_H_
+#endif  // RUNTIME_BIN_IO_SERVICE_H_
diff --git a/runtime/bin/io_service_no_ssl.h b/runtime/bin/io_service_no_ssl.h
index b8cb545..ae3d0c2 100644
--- a/runtime/bin/io_service_no_ssl.h
+++ b/runtime/bin/io_service_no_ssl.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 BIN_IO_SERVICE_NO_SSL_H_
-#define BIN_IO_SERVICE_NO_SSL_H_
+#ifndef RUNTIME_BIN_IO_SERVICE_NO_SSL_H_
+#define RUNTIME_BIN_IO_SERVICE_NO_SSL_H_
 
 #if defined(DART_IO_DISABLED) || !defined(DART_IO_SECURE_SOCKET_DISABLED)
 #error "io_service_no_ssl.h can only be included on builds with IO enabled"
@@ -78,4 +78,4 @@
 }  // namespace bin
 }  // namespace dart
 
-#endif  // BIN_IO_SERVICE_NO_SSL_H_
+#endif  // RUNTIME_BIN_IO_SERVICE_NO_SSL_H_
diff --git a/runtime/bin/isolate_data.h b/runtime/bin/isolate_data.h
index bb60740..fe76e51 100644
--- a/runtime/bin/isolate_data.h
+++ b/runtime/bin/isolate_data.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 BIN_ISOLATE_DATA_H_
-#define BIN_ISOLATE_DATA_H_
+#ifndef RUNTIME_BIN_ISOLATE_DATA_H_
+#define RUNTIME_BIN_ISOLATE_DATA_H_
 
 #include "include/dart_api.h"
 #include "platform/assert.h"
@@ -97,4 +97,4 @@
 }  // namespace bin
 }  // namespace dart
 
-#endif  // BIN_ISOLATE_DATA_H_
+#endif  // RUNTIME_BIN_ISOLATE_DATA_H_
diff --git a/runtime/bin/loader.h b/runtime/bin/loader.h
index 4fe6ac0..6ddf49f 100644
--- a/runtime/bin/loader.h
+++ b/runtime/bin/loader.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 BIN_LOADER_H_
-#define BIN_LOADER_H_
+#ifndef RUNTIME_BIN_LOADER_H_
+#define RUNTIME_BIN_LOADER_H_
 
 #include "bin/isolate_data.h"
 #include "include/dart_api.h"
@@ -146,4 +146,4 @@
 }  // namespace bin
 }  // namespace dart
 
-#endif  // BIN_LOADER_H_
+#endif  // RUNTIME_BIN_LOADER_H_
diff --git a/runtime/bin/lockers.h b/runtime/bin/lockers.h
index 0aefd99..836eeda 100644
--- a/runtime/bin/lockers.h
+++ b/runtime/bin/lockers.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 BIN_LOCKERS_H_
-#define BIN_LOCKERS_H_
+#ifndef RUNTIME_BIN_LOCKERS_H_
+#define RUNTIME_BIN_LOCKERS_H_
 
 #include "bin/thread.h"
 #include "platform/assert.h"
@@ -61,4 +61,4 @@
 }  // namespace bin
 }  // namespace dart
 
-#endif  // BIN_LOCKERS_H_
+#endif  // RUNTIME_BIN_LOCKERS_H_
diff --git a/runtime/bin/log.h b/runtime/bin/log.h
index 51a4379..022dd1b 100644
--- a/runtime/bin/log.h
+++ b/runtime/bin/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 BIN_LOG_H_
-#define BIN_LOG_H_
+#ifndef RUNTIME_BIN_LOG_H_
+#define RUNTIME_BIN_LOG_H_
 
 #include <stdarg.h>
 
@@ -41,4 +41,4 @@
 }  // namespace bin
 }  // namespace dart
 
-#endif  // BIN_LOG_H_
+#endif  // RUNTIME_BIN_LOG_H_
diff --git a/runtime/bin/platform.h b/runtime/bin/platform.h
index 1f52ef9..cf220e4 100644
--- a/runtime/bin/platform.h
+++ b/runtime/bin/platform.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 BIN_PLATFORM_H_
-#define BIN_PLATFORM_H_
+#ifndef RUNTIME_BIN_PLATFORM_H_
+#define RUNTIME_BIN_PLATFORM_H_
 
 #include "bin/builtin.h"
 #include "platform/globals.h"
@@ -107,4 +107,4 @@
 }  // namespace bin
 }  // namespace dart
 
-#endif  // BIN_PLATFORM_H_
+#endif  // RUNTIME_BIN_PLATFORM_H_
diff --git a/runtime/bin/process.h b/runtime/bin/process.h
index 359c8c1..2886e71 100644
--- a/runtime/bin/process.h
+++ b/runtime/bin/process.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 BIN_PROCESS_H_
-#define BIN_PROCESS_H_
+#ifndef RUNTIME_BIN_PROCESS_H_
+#define RUNTIME_BIN_PROCESS_H_
 
 #include "bin/builtin.h"
 #include "bin/io_buffer.h"
@@ -294,4 +294,4 @@
 }  // namespace bin
 }  // namespace dart
 
-#endif  // BIN_PROCESS_H_
+#endif  // RUNTIME_BIN_PROCESS_H_
diff --git a/runtime/bin/process_patch.dart b/runtime/bin/process_patch.dart
index bfb09db..d34a28c 100644
--- a/runtime/bin/process_patch.dart
+++ b/runtime/bin/process_patch.dart
@@ -125,9 +125,9 @@
     }
   }
 
-  @patch static _setSignalHandler(int signal)
+  static _setSignalHandler(int signal)
       native "Process_SetSignalHandler";
-  @patch static int _clearSignalHandler(int signal)
+  static int _clearSignalHandler(int signal)
       native "Process_ClearSignalHandler";
 }
 
diff --git a/runtime/bin/reference_counting.h b/runtime/bin/reference_counting.h
index 8e79f4f..6a6a9e6 100644
--- a/runtime/bin/reference_counting.h
+++ b/runtime/bin/reference_counting.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 BIN_REFERENCE_COUNTING_H_
-#define BIN_REFERENCE_COUNTING_H_
+#ifndef RUNTIME_BIN_REFERENCE_COUNTING_H_
+#define RUNTIME_BIN_REFERENCE_COUNTING_H_
 
 #include "vm/atomic.h"
 
@@ -156,4 +156,4 @@
 }  // namespace bin
 }  // namespace dart
 
-#endif  // BIN_REFERENCE_COUNTING_H_
+#endif  // RUNTIME_BIN_REFERENCE_COUNTING_H_
diff --git a/runtime/bin/secure_socket.h b/runtime/bin/secure_socket.h
index 5dfee9e..e01df41 100644
--- a/runtime/bin/secure_socket.h
+++ b/runtime/bin/secure_socket.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 BIN_SECURE_SOCKET_H_
-#define BIN_SECURE_SOCKET_H_
+#ifndef RUNTIME_BIN_SECURE_SOCKET_H_
+#define RUNTIME_BIN_SECURE_SOCKET_H_
 
 #if defined(DART_IO_DISABLED) || defined(DART_IO_SECURE_SOCKET_DISABLED)
 #error "secure_socket.h can only be included on builds with SSL enabled"
@@ -24,4 +24,4 @@
 #error Unknown target os.
 #endif
 
-#endif  // BIN_SECURE_SOCKET_H_
+#endif  // RUNTIME_BIN_SECURE_SOCKET_H_
diff --git a/runtime/bin/secure_socket_boringssl.h b/runtime/bin/secure_socket_boringssl.h
index 788b257..fe7bd8d 100644
--- a/runtime/bin/secure_socket_boringssl.h
+++ b/runtime/bin/secure_socket_boringssl.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 BIN_SECURE_SOCKET_BORINGSSL_H_
-#define BIN_SECURE_SOCKET_BORINGSSL_H_
+#ifndef RUNTIME_BIN_SECURE_SOCKET_BORINGSSL_H_
+#define RUNTIME_BIN_SECURE_SOCKET_BORINGSSL_H_
 
-#if !defined(BIN_SECURE_SOCKET_H_)
+#if !defined(RUNTIME_BIN_SECURE_SOCKET_H_)
 #error Do not include secure_socket_boringssl.h directly. Use secure_socket.h.
 #endif
 
@@ -162,4 +162,4 @@
 }  // namespace bin
 }  // namespace dart
 
-#endif  // BIN_SECURE_SOCKET_BORINGSSL_H_
+#endif  // RUNTIME_BIN_SECURE_SOCKET_BORINGSSL_H_
diff --git a/runtime/bin/secure_socket_ios.h b/runtime/bin/secure_socket_ios.h
index d67de71..84e46e1 100644
--- a/runtime/bin/secure_socket_ios.h
+++ b/runtime/bin/secure_socket_ios.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 BIN_SECURE_SOCKET_IOS_H_
-#define BIN_SECURE_SOCKET_IOS_H_
+#ifndef RUNTIME_BIN_SECURE_SOCKET_IOS_H_
+#define RUNTIME_BIN_SECURE_SOCKET_IOS_H_
 
-#if !defined(BIN_SECURE_SOCKET_H_)
+#if !defined(RUNTIME_BIN_SECURE_SOCKET_H_)
 #error Do not include secure_socket_macos.h directly. Use secure_socket.h.
 #endif
 
@@ -237,4 +237,4 @@
 }  // namespace bin
 }  // namespace dart
 
-#endif  // BIN_SECURE_SOCKET_IOS_H_
+#endif  // RUNTIME_BIN_SECURE_SOCKET_IOS_H_
diff --git a/runtime/bin/secure_socket_macos.h b/runtime/bin/secure_socket_macos.h
index b4fe635..ae8f2e8 100644
--- a/runtime/bin/secure_socket_macos.h
+++ b/runtime/bin/secure_socket_macos.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 BIN_SECURE_SOCKET_MACOS_H_
-#define BIN_SECURE_SOCKET_MACOS_H_
+#ifndef RUNTIME_BIN_SECURE_SOCKET_MACOS_H_
+#define RUNTIME_BIN_SECURE_SOCKET_MACOS_H_
 
-#if !defined(BIN_SECURE_SOCKET_H_)
+#if !defined(RUNTIME_BIN_SECURE_SOCKET_H_)
 #error Do not include secure_socket_macos.h directly. Use secure_socket.h.
 #endif
 
@@ -278,4 +278,4 @@
 }  // namespace bin
 }  // namespace dart
 
-#endif  // BIN_SECURE_SOCKET_MACOS_H_
+#endif  // RUNTIME_BIN_SECURE_SOCKET_MACOS_H_
diff --git a/runtime/bin/socket.h b/runtime/bin/socket.h
index ea8dade..7b3985e 100644
--- a/runtime/bin/socket.h
+++ b/runtime/bin/socket.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 BIN_SOCKET_H_
-#define BIN_SOCKET_H_
+#ifndef RUNTIME_BIN_SOCKET_H_
+#define RUNTIME_BIN_SOCKET_H_
 
 #if defined(DART_IO_DISABLED)
 #error "socket.h can only be included on builds with IO enabled"
@@ -475,4 +475,4 @@
 }  // namespace bin
 }  // namespace dart
 
-#endif  // BIN_SOCKET_H_
+#endif  // RUNTIME_BIN_SOCKET_H_
diff --git a/runtime/bin/socket_android.h b/runtime/bin/socket_android.h
index 13ff16e..43fddc1 100644
--- a/runtime/bin/socket_android.h
+++ b/runtime/bin/socket_android.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 BIN_SOCKET_ANDROID_H_
-#define BIN_SOCKET_ANDROID_H_
+#ifndef RUNTIME_BIN_SOCKET_ANDROID_H_
+#define RUNTIME_BIN_SOCKET_ANDROID_H_
 
-#if !defined(BIN_SOCKET_H_)
+#if !defined(RUNTIME_BIN_SOCKET_H_)
 #error Do not include socket_android.h directly. Use socket.h.
 #endif
 
@@ -13,4 +13,4 @@
 #include <netdb.h>
 #include <sys/socket.h>
 
-#endif  // BIN_SOCKET_ANDROID_H_
+#endif  // RUNTIME_BIN_SOCKET_ANDROID_H_
diff --git a/runtime/bin/socket_fuchsia.cc b/runtime/bin/socket_fuchsia.cc
index b79d1c0..b3935eb 100644
--- a/runtime/bin/socket_fuchsia.cc
+++ b/runtime/bin/socket_fuchsia.cc
@@ -115,7 +115,12 @@
 AddressList<SocketAddress>* Socket::LookupAddress(const char* host,
                                                   int type,
                                                   OSError** os_error) {
-  UNIMPLEMENTED();
+  // UNIMPLEMENTED
+  ASSERT(*os_error == NULL);
+  *os_error = new OSError(-1,
+                          "Socket::LookupAddress not implemented in "
+                          "Fuchsia Dart VM runtime",
+                          OSError::kGetAddressInfo);
   return NULL;
 }
 
diff --git a/runtime/bin/socket_fuchsia.h b/runtime/bin/socket_fuchsia.h
index 82f8916..64c8545 100644
--- a/runtime/bin/socket_fuchsia.h
+++ b/runtime/bin/socket_fuchsia.h
@@ -2,11 +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.
 
-#ifndef BIN_SOCKET_FUCHSIA_H_
-#define BIN_SOCKET_FUCHSIA_H_
+#ifndef RUNTIME_BIN_SOCKET_FUCHSIA_H_
+#define RUNTIME_BIN_SOCKET_FUCHSIA_H_
 
-#if !defined(BIN_SOCKET_H_)
+#if !defined(RUNTIME_BIN_SOCKET_H_)
 #error Do not include socket_fuchsia.h directly. Use socket.h.
 #endif
 
-#endif  // BIN_SOCKET_FUCHSIA_H_
+#endif  // RUNTIME_BIN_SOCKET_FUCHSIA_H_
diff --git a/runtime/bin/socket_linux.h b/runtime/bin/socket_linux.h
index 5d073c4..e153f88 100644
--- a/runtime/bin/socket_linux.h
+++ b/runtime/bin/socket_linux.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 BIN_SOCKET_LINUX_H_
-#define BIN_SOCKET_LINUX_H_
+#ifndef RUNTIME_BIN_SOCKET_LINUX_H_
+#define RUNTIME_BIN_SOCKET_LINUX_H_
 
-#if !defined(BIN_SOCKET_H_)
+#if !defined(RUNTIME_BIN_SOCKET_H_)
 #error Do not include socket_linux.h directly. Use socket.h.
 #endif
 
@@ -13,4 +13,4 @@
 #include <netdb.h>
 #include <sys/socket.h>
 
-#endif  // BIN_SOCKET_LINUX_H_
+#endif  // RUNTIME_BIN_SOCKET_LINUX_H_
diff --git a/runtime/bin/socket_macos.h b/runtime/bin/socket_macos.h
index dce6d97..b3ab619 100644
--- a/runtime/bin/socket_macos.h
+++ b/runtime/bin/socket_macos.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 BIN_SOCKET_MACOS_H_
-#define BIN_SOCKET_MACOS_H_
+#ifndef RUNTIME_BIN_SOCKET_MACOS_H_
+#define RUNTIME_BIN_SOCKET_MACOS_H_
 
-#if !defined(BIN_SOCKET_H_)
+#if !defined(RUNTIME_BIN_SOCKET_H_)
 #error Do not include socket_macos.h directly. Use socket.h.
 #endif
 
@@ -13,4 +13,4 @@
 #include <netdb.h>
 #include <sys/socket.h>
 
-#endif  // BIN_SOCKET_MACOS_H_
+#endif  // RUNTIME_BIN_SOCKET_MACOS_H_
diff --git a/runtime/bin/socket_win.h b/runtime/bin/socket_win.h
index 7b71e38..38aeea2 100644
--- a/runtime/bin/socket_win.h
+++ b/runtime/bin/socket_win.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 BIN_SOCKET_WIN_H_
-#define BIN_SOCKET_WIN_H_
+#ifndef RUNTIME_BIN_SOCKET_WIN_H_
+#define RUNTIME_BIN_SOCKET_WIN_H_
 
-#if !defined(BIN_SOCKET_H_)
+#if !defined(RUNTIME_BIN_SOCKET_H_)
 #error Do not include socket_win.h directly. Use socket.h.
 #endif
 
@@ -14,4 +14,4 @@
 #include <winsock2.h>
 #include <ws2tcpip.h>
 
-#endif  // BIN_SOCKET_WIN_H_
+#endif  // RUNTIME_BIN_SOCKET_WIN_H_
diff --git a/runtime/bin/stdio.h b/runtime/bin/stdio.h
index 55884df..9bf079a 100644
--- a/runtime/bin/stdio.h
+++ b/runtime/bin/stdio.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 BIN_STDIO_H_
-#define BIN_STDIO_H_
+#ifndef RUNTIME_BIN_STDIO_H_
+#define RUNTIME_BIN_STDIO_H_
 
 #if defined(DART_IO_DISABLED)
 #error "stdio.h can only be included on builds with IO enabled"
@@ -45,4 +45,4 @@
 }  // namespace bin
 }  // namespace dart
 
-#endif  // BIN_STDIO_H_
+#endif  // RUNTIME_BIN_STDIO_H_
diff --git a/runtime/bin/stdio_patch.dart b/runtime/bin/stdio_patch.dart
index b3dc68e..392ae1c 100644
--- a/runtime/bin/stdio_patch.dart
+++ b/runtime/bin/stdio_patch.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 @patch class _StdIOUtils {
-  static Stdin _getStdioInputStream() {
+  @patch static Stdin _getStdioInputStream() {
     switch (_getStdioHandleType(0)) {
       case _STDIO_HANDLE_TYPE_TERMINAL:
       case _STDIO_HANDLE_TYPE_PIPE:
@@ -16,7 +16,7 @@
     }
   }
 
-  static _getStdioOutputStream(int fd) {
+  @patch static _getStdioOutputStream(int fd) {
     assert(fd == 1 || fd == 2);
     switch (_getStdioHandleType(fd)) {
       case _STDIO_HANDLE_TYPE_TERMINAL:
@@ -29,12 +29,12 @@
     }
   }
 
-  static int _socketType(Socket socket) {
+  @patch static int _socketType(Socket socket) {
     if (socket is _Socket) return _nativeSocketType(socket._nativeSocket);
     return null;
   }
 
-  static int _nativeSocketType(_NativeSocket nativeSocket) {
+  @patch static int _nativeSocketType(_NativeSocket nativeSocket) {
     var result = _getSocketType(nativeSocket);
     if (result is OSError) {
       throw new FileSystemException(
@@ -43,7 +43,7 @@
     return result;
   }
 
-  static _getStdioHandleType(int fd) native "File_GetStdioHandleType";
+  @patch static _getStdioHandleType(int fd) native "File_GetStdioHandleType";
 }
 
 @patch class Stdin {
diff --git a/runtime/bin/thread.h b/runtime/bin/thread.h
index 37a4b9f..365cd95 100644
--- a/runtime/bin/thread.h
+++ b/runtime/bin/thread.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 BIN_THREAD_H_
-#define BIN_THREAD_H_
+#ifndef RUNTIME_BIN_THREAD_H_
+#define RUNTIME_BIN_THREAD_H_
 
 #include "platform/globals.h"
 
@@ -114,4 +114,4 @@
 }  // namespace dart
 
 
-#endif  // BIN_THREAD_H_
+#endif  // RUNTIME_BIN_THREAD_H_
diff --git a/runtime/bin/thread_android.h b/runtime/bin/thread_android.h
index 2551c01..154339c 100644
--- a/runtime/bin/thread_android.h
+++ b/runtime/bin/thread_android.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 BIN_THREAD_ANDROID_H_
-#define BIN_THREAD_ANDROID_H_
+#ifndef RUNTIME_BIN_THREAD_ANDROID_H_
+#define RUNTIME_BIN_THREAD_ANDROID_H_
 
-#if !defined(BIN_THREAD_H_)
+#if !defined(RUNTIME_BIN_THREAD_H_)
 #error Do not include thread_android.h directly; use thread.h instead.
 #endif
 
@@ -74,4 +74,4 @@
 }  // namespace bin
 }  // namespace dart
 
-#endif  // BIN_THREAD_ANDROID_H_
+#endif  // RUNTIME_BIN_THREAD_ANDROID_H_
diff --git a/runtime/bin/thread_fuchsia.h b/runtime/bin/thread_fuchsia.h
index 6168719..2923a514 100644
--- a/runtime/bin/thread_fuchsia.h
+++ b/runtime/bin/thread_fuchsia.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 BIN_THREAD_FUCHSIA_H_
-#define BIN_THREAD_FUCHSIA_H_
+#ifndef RUNTIME_BIN_THREAD_FUCHSIA_H_
+#define RUNTIME_BIN_THREAD_FUCHSIA_H_
 
-#if !defined(BIN_THREAD_H_)
+#if !defined(RUNTIME_BIN_THREAD_H_)
 #error Do not include thread_fuchsia.h directly; use thread.h instead.
 #endif
 
@@ -74,4 +74,4 @@
 }  // namespace bin
 }  // namespace dart
 
-#endif  // BIN_THREAD_FUCHSIA_H_
+#endif  // RUNTIME_BIN_THREAD_FUCHSIA_H_
diff --git a/runtime/bin/thread_linux.h b/runtime/bin/thread_linux.h
index 9f4093c..403c353 100644
--- a/runtime/bin/thread_linux.h
+++ b/runtime/bin/thread_linux.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 BIN_THREAD_LINUX_H_
-#define BIN_THREAD_LINUX_H_
+#ifndef RUNTIME_BIN_THREAD_LINUX_H_
+#define RUNTIME_BIN_THREAD_LINUX_H_
 
-#if !defined(BIN_THREAD_H_)
+#if !defined(RUNTIME_BIN_THREAD_H_)
 #error Do not include thread_linux.h directly; use thread.h instead.
 #endif
 
@@ -74,4 +74,4 @@
 }  // namespace bin
 }  // namespace dart
 
-#endif  // BIN_THREAD_LINUX_H_
+#endif  // RUNTIME_BIN_THREAD_LINUX_H_
diff --git a/runtime/bin/thread_macos.h b/runtime/bin/thread_macos.h
index a074896..419bc8b 100644
--- a/runtime/bin/thread_macos.h
+++ b/runtime/bin/thread_macos.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 BIN_THREAD_MACOS_H_
-#define BIN_THREAD_MACOS_H_
+#ifndef RUNTIME_BIN_THREAD_MACOS_H_
+#define RUNTIME_BIN_THREAD_MACOS_H_
 
-#if !defined(BIN_THREAD_H_)
+#if !defined(RUNTIME_BIN_THREAD_H_)
 #error Do not include thread_macos.h directly; use thread.h instead.
 #endif
 
@@ -74,4 +74,4 @@
 }  // namespace bin
 }  // namespace dart
 
-#endif  // BIN_THREAD_MACOS_H_
+#endif  // RUNTIME_BIN_THREAD_MACOS_H_
diff --git a/runtime/bin/thread_win.h b/runtime/bin/thread_win.h
index 5e1dba51..85ab38f 100644
--- a/runtime/bin/thread_win.h
+++ b/runtime/bin/thread_win.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 BIN_THREAD_WIN_H_
-#define BIN_THREAD_WIN_H_
+#ifndef RUNTIME_BIN_THREAD_WIN_H_
+#define RUNTIME_BIN_THREAD_WIN_H_
 
-#if !defined(BIN_THREAD_H_)
+#if !defined(RUNTIME_BIN_THREAD_H_)
 #error Do not include thread_win.h directly; use thread.h instead.
 #endif
 
@@ -119,4 +119,4 @@
 }  // namespace bin
 }  // namespace dart
 
-#endif  // BIN_THREAD_WIN_H_
+#endif  // RUNTIME_BIN_THREAD_WIN_H_
diff --git a/runtime/bin/utils.h b/runtime/bin/utils.h
index 5311d36..18b1db2 100644
--- a/runtime/bin/utils.h
+++ b/runtime/bin/utils.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 BIN_UTILS_H_
-#define BIN_UTILS_H_
+#ifndef RUNTIME_BIN_UTILS_H_
+#define RUNTIME_BIN_UTILS_H_
 
 #include <stdlib.h>
 #include <string.h>
@@ -123,4 +123,4 @@
 }  // namespace bin
 }  // namespace dart
 
-#endif  // BIN_UTILS_H_
+#endif  // RUNTIME_BIN_UTILS_H_
diff --git a/runtime/bin/utils_win.h b/runtime/bin/utils_win.h
index 3e7fa4c..2f63faf 100644
--- a/runtime/bin/utils_win.h
+++ b/runtime/bin/utils_win.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 BIN_UTILS_WIN_H_
-#define BIN_UTILS_WIN_H_
+#ifndef RUNTIME_BIN_UTILS_WIN_H_
+#define RUNTIME_BIN_UTILS_WIN_H_
 
 #include "platform/globals.h"
 
@@ -95,4 +95,4 @@
 }  // namespace bin
 }  // namespace dart
 
-#endif  // BIN_UTILS_WIN_H_
+#endif  // RUNTIME_BIN_UTILS_WIN_H_
diff --git a/runtime/bin/vmservice_dartium.h b/runtime/bin/vmservice_dartium.h
index 11067ee..b1287f8 100644
--- a/runtime/bin/vmservice_dartium.h
+++ b/runtime/bin/vmservice_dartium.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 BIN_VMSERVICE_DARTIUM_H_
-#define BIN_VMSERVICE_DARTIUM_H_
+#ifndef RUNTIME_BIN_VMSERVICE_DARTIUM_H_
+#define RUNTIME_BIN_VMSERVICE_DARTIUM_H_
 
 /* In order to avoid conflicts / issues with blink, no headers are included */
 
@@ -38,4 +38,4 @@
 }  // namespace bin
 }  // namespace dart
 
-#endif  // BIN_VMSERVICE_DARTIUM_H_
+#endif  // RUNTIME_BIN_VMSERVICE_DARTIUM_H_
diff --git a/runtime/bin/vmservice_impl.h b/runtime/bin/vmservice_impl.h
index f499abf..5c03c33 100644
--- a/runtime/bin/vmservice_impl.h
+++ b/runtime/bin/vmservice_impl.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 BIN_VMSERVICE_IMPL_H_
-#define BIN_VMSERVICE_IMPL_H_
+#ifndef RUNTIME_BIN_VMSERVICE_IMPL_H_
+#define RUNTIME_BIN_VMSERVICE_IMPL_H_
 
 #include "include/dart_api.h"
 
@@ -59,4 +59,4 @@
 }  // namespace bin
 }  // namespace dart
 
-#endif  // BIN_VMSERVICE_IMPL_H_
+#endif  // RUNTIME_BIN_VMSERVICE_IMPL_H_
diff --git a/runtime/bin/zlib/BUILD.gn b/runtime/bin/zlib/BUILD.gn
index ad78238..8950ae1 100644
--- a/runtime/bin/zlib/BUILD.gn
+++ b/runtime/bin/zlib/BUILD.gn
@@ -49,8 +49,6 @@
   all_dependent_configs = [ ":zlib_config" ]
 
   if (is_clang) {
-    cflags = [
-      "-Wno-shift-negative-value",
-    ]
+    cflags = [ "-Wno-shift-negative-value" ]
   }
 }
diff --git a/runtime/include/dart_api.h b/runtime/include/dart_api.h
index 25db8c4..105bb66 100755
--- a/runtime/include/dart_api.h
+++ b/runtime/include/dart_api.h
@@ -4,8 +4,8 @@
  * BSD-style license that can be found in the LICENSE file.
  */
 
-#ifndef INCLUDE_DART_API_H_
-#define INCLUDE_DART_API_H_
+#ifndef RUNTIME_INCLUDE_DART_API_H_
+#define RUNTIME_INCLUDE_DART_API_H_
 
 /** \mainpage Dart Embedding API Reference
  *
diff --git a/runtime/include/dart_mirrors_api.h b/runtime/include/dart_mirrors_api.h
index 3a4c9ce..e0f57e0 100644
--- a/runtime/include/dart_mirrors_api.h
+++ b/runtime/include/dart_mirrors_api.h
@@ -4,8 +4,8 @@
  * BSD-style license that can be found in the LICENSE file.
  */
 
-#ifndef INCLUDE_DART_MIRRORS_API_H_
-#define INCLUDE_DART_MIRRORS_API_H_
+#ifndef RUNTIME_INCLUDE_DART_MIRRORS_API_H_
+#define RUNTIME_INCLUDE_DART_MIRRORS_API_H_
 
 #include "include/dart_api.h"
 
diff --git a/runtime/include/dart_native_api.h b/runtime/include/dart_native_api.h
index 74237c1..f1e0ca1 100644
--- a/runtime/include/dart_native_api.h
+++ b/runtime/include/dart_native_api.h
@@ -4,8 +4,8 @@
  * BSD-style license that can be found in the LICENSE file.
  */
 
-#ifndef INCLUDE_DART_NATIVE_API_H_
-#define INCLUDE_DART_NATIVE_API_H_
+#ifndef RUNTIME_INCLUDE_DART_NATIVE_API_H_
+#define RUNTIME_INCLUDE_DART_NATIVE_API_H_
 
 #include "include/dart_api.h"
 
diff --git a/runtime/include/dart_tools_api.h b/runtime/include/dart_tools_api.h
index edf8918..73c923e 100644
--- a/runtime/include/dart_tools_api.h
+++ b/runtime/include/dart_tools_api.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 INCLUDE_DART_TOOLS_API_H_
-#define INCLUDE_DART_TOOLS_API_H_
+#ifndef RUNTIME_INCLUDE_DART_TOOLS_API_H_
+#define RUNTIME_INCLUDE_DART_TOOLS_API_H_
 
 #include "include/dart_api.h"
 
@@ -1087,4 +1087,4 @@
     Dart_EmbedderTimelineStartRecording start_recording,
     Dart_EmbedderTimelineStopRecording stop_recording);
 
-#endif  // INCLUDE_DART_TOOLS_API_H_
+#endif  // RUNTIME_INCLUDE_DART_TOOLS_API_H_
diff --git a/runtime/lib/collection_patch.dart b/runtime/lib/collection_patch.dart
index ed76535..0dea145 100644
--- a/runtime/lib/collection_patch.dart
+++ b/runtime/lib/collection_patch.dart
@@ -2,10 +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.
 
+import 'dart:typed_data';
+import 'dart:_internal' as internal;
+
 @patch class HashMap<K, V> {
   @patch factory HashMap({ bool equals(K key1, K key2),
-                                 int hashCode(K key),
-                                 bool isValidKey(potentialKey) }) {
+                           int hashCode(K key),
+                           bool isValidKey(potentialKey) }) {
     if (isValidKey == null) {
       if (hashCode == null) {
         if (equals == null) {
diff --git a/runtime/lib/collection_sources.gypi b/runtime/lib/collection_sources.gypi
index 0e1e21e..8576980 100644
--- a/runtime/lib/collection_sources.gypi
+++ b/runtime/lib/collection_sources.gypi
@@ -4,6 +4,8 @@
 
 {
   'sources': [
+    # collection_patch.dart needs to be the first dart file because it contains
+    # imports.
     'collection_patch.dart',
     'compact_hash.dart',
     'linked_hash_map.cc',
diff --git a/runtime/lib/compact_hash.dart b/runtime/lib/compact_hash.dart
index 9912d07..86ec9d8 100644
--- a/runtime/lib/compact_hash.dart
+++ b/runtime/lib/compact_hash.dart
@@ -2,9 +2,6 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-import 'dart:typed_data';
-import 'dart:_internal' as internal;
-
 // Hash table with open addressing that separates the index from keys/values.
 
 abstract class _HashFieldBase {
diff --git a/runtime/lib/core_patch.dart b/runtime/lib/core_patch.dart
index f06c98b..29357ae 100644
--- a/runtime/lib/core_patch.dart
+++ b/runtime/lib/core_patch.dart
@@ -2,8 +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.
 
+import "dart:async";
+import "dart:collection" show LinkedList, LinkedListEntry;
+import 'dart:convert' show ASCII, JSON;
+import "dart:isolate";
 import "dart:math";
 import "dart:typed_data";
+import 'dart:_internal' as internal;
 
 // Equivalent of calling FATAL from C++ code.
 _fatal(msg) native "DartCore_fatal";
diff --git a/runtime/lib/developer.dart b/runtime/lib/developer.dart
index ec3d38b..4c6ea7d 100644
--- a/runtime/lib/developer.dart
+++ b/runtime/lib/developer.dart
@@ -3,6 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'dart:isolate';
+import 'dart:_internal';
 
 @patch bool debugger({bool when: true,
                      String message}) native "Developer_debugger";
diff --git a/runtime/lib/developer_sources.gypi b/runtime/lib/developer_sources.gypi
index e3f1ea6..896f2e1 100644
--- a/runtime/lib/developer_sources.gypi
+++ b/runtime/lib/developer_sources.gypi
@@ -7,6 +7,8 @@
 {
   'sources': [
     'developer.cc',
+    # developer.dart needs to be the first dart file because it contains
+    # imports.
     'developer.dart',
     'profiler.cc',
     'profiler.dart',
diff --git a/runtime/lib/errors.cc b/runtime/lib/errors.cc
index 28d4ef4..b039efa 100644
--- a/runtime/lib/errors.cc
+++ b/runtime/lib/errors.cc
@@ -7,9 +7,49 @@
 #include "vm/object_store.h"
 #include "vm/runtime_entry.h"
 #include "vm/stack_frame.h"
+#include "vm/symbols.h"
 
 namespace dart {
 
+// Scan the stack until we hit the first function in the _AssertionError
+// class. We then return the next frame's script taking inlining into account.
+static RawScript* FindScript(DartFrameIterator* iterator) {
+  StackFrame* stack_frame = iterator->NextFrame();
+  Code& code = Code::Handle();
+  Function& func = Function::Handle();
+  const Class& assert_error_class = Class::Handle(
+        Library::LookupCoreClass(Symbols::AssertionError()));
+  ASSERT(!assert_error_class.IsNull());
+  bool hit_assertion_error = false;
+  while (stack_frame != NULL) {
+    code ^= stack_frame->LookupDartCode();
+    if (code.is_optimized()) {
+      InlinedFunctionsIterator inlined_iterator(code, stack_frame->pc());
+      while (!inlined_iterator.Done()) {
+        func ^= inlined_iterator.function();
+        if (hit_assertion_error) {
+          return func.script();
+        }
+        ASSERT(!hit_assertion_error);
+        hit_assertion_error = (func.Owner() == assert_error_class.raw());
+        inlined_iterator.Advance();
+      }
+    } else {
+      func ^= code.function();
+      ASSERT(!func.IsNull());
+      if (hit_assertion_error) {
+        return func.script();
+      }
+      ASSERT(!hit_assertion_error);
+      hit_assertion_error = (func.Owner() == assert_error_class.raw());
+    }
+    stack_frame = iterator->NextFrame();
+  }
+  UNREACHABLE();
+  return Script::null();
+}
+
+
 // Allocate and throw a new AssertionError.
 // Arg0: index of the first token of the failed assertion.
 // Arg1: index of the first token after the failed assertion.
@@ -26,8 +66,7 @@
 
   DartFrameIterator iterator;
   iterator.NextFrame();  // Skip native call.
-  iterator.NextFrame();  // Skip _AssertionError._checkAssertion frame
-  const Script& script = Script::Handle(Exceptions::GetCallerScript(&iterator));
+  const Script& script = Script::Handle(FindScript(&iterator));
 
   // Initialize argument 'failed_assertion' with source snippet.
   intptr_t from_line, from_column;
diff --git a/runtime/lib/errors_patch.dart b/runtime/lib/errors_patch.dart
index 654dfa3..bf04059 100644
--- a/runtime/lib/errors_patch.dart
+++ b/runtime/lib/errors_patch.dart
@@ -2,9 +2,6 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-import 'dart:_internal' as internal;
-import 'dart:convert' show JSON;
-
 @patch class Error {
   @patch static String _objectToString(Object object) {
     return Object._toString(object);
@@ -206,6 +203,7 @@
   // that no information is available.
   final int _invocation_type;
 
+  @patch
   NoSuchMethodError(Object this._receiver,
                     Symbol this._memberName,
                     List this._arguments,
diff --git a/runtime/lib/integers_patch.dart b/runtime/lib/integers_patch.dart
index 67db176..6f8b384 100644
--- a/runtime/lib/integers_patch.dart
+++ b/runtime/lib/integers_patch.dart
@@ -5,8 +5,6 @@
 
 // VM implementation of int.
 
-import 'dart:_internal' as internal;
-
 @patch class int {
 
   @patch const factory int.fromEnvironment(String name,
diff --git a/runtime/lib/invocation_mirror.h b/runtime/lib/invocation_mirror.h
index 78d1ba4..b2b152e8 100644
--- a/runtime/lib/invocation_mirror.h
+++ b/runtime/lib/invocation_mirror.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 LIB_INVOCATION_MIRROR_H_
-#define LIB_INVOCATION_MIRROR_H_
+#ifndef RUNTIME_LIB_INVOCATION_MIRROR_H_
+#define RUNTIME_LIB_INVOCATION_MIRROR_H_
 
 #include "vm/allocation.h"
 
@@ -47,4 +47,4 @@
 
 }  // namespace dart
 
-#endif  // LIB_INVOCATION_MIRROR_H_
+#endif  // RUNTIME_LIB_INVOCATION_MIRROR_H_
diff --git a/runtime/lib/lib_prefix.dart b/runtime/lib/lib_prefix.dart
index f457b02..1b0e87d 100644
--- a/runtime/lib/lib_prefix.dart
+++ b/runtime/lib/lib_prefix.dart
@@ -2,9 +2,6 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-import "dart:async";
-import "dart:isolate";
-
 // This type corresponds to the VM-internal class LibraryPrefix.
 class _LibraryPrefix {
   bool _load() native "LibraryPrefix_load";
diff --git a/runtime/lib/mirrors.h b/runtime/lib/mirrors.h
index 40bd5d5..31f0d22 100644
--- a/runtime/lib/mirrors.h
+++ b/runtime/lib/mirrors.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 LIB_MIRRORS_H_
-#define LIB_MIRRORS_H_
+#ifndef RUNTIME_LIB_MIRRORS_H_
+#define RUNTIME_LIB_MIRRORS_H_
 
 #include "vm/allocation.h"
 
@@ -32,4 +32,4 @@
 
 }  // namespace dart
 
-#endif  // LIB_MIRRORS_H_
+#endif  // RUNTIME_LIB_MIRRORS_H_
diff --git a/runtime/lib/mirrors_impl.dart b/runtime/lib/mirrors_impl.dart
index 8fdd7ba..0305f12 100644
--- a/runtime/lib/mirrors_impl.dart
+++ b/runtime/lib/mirrors_impl.dart
@@ -4,9 +4,6 @@
 
 // VM-specific implementation of the dart:mirrors library.
 
-import "dart:collection" show UnmodifiableListView, UnmodifiableMapView;
-import "dart:async" show Future;
-
 var dirty = false;
 final emptyList = new UnmodifiableListView([]);
 final emptyMap = new UnmodifiableMapView({});
diff --git a/runtime/lib/mirrors_patch.dart b/runtime/lib/mirrors_patch.dart
index 2e2da5b..03bd1b6 100644
--- a/runtime/lib/mirrors_patch.dart
+++ b/runtime/lib/mirrors_patch.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+import "dart:async" show Future;
+import "dart:collection" show UnmodifiableListView, UnmodifiableMapView;
 import "dart:_internal" as internal;
 
 /**
diff --git a/runtime/lib/mirrors_sources.gypi b/runtime/lib/mirrors_sources.gypi
index 295ab85..46da082 100644
--- a/runtime/lib/mirrors_sources.gypi
+++ b/runtime/lib/mirrors_sources.gypi
@@ -8,6 +8,8 @@
   'sources': [
     'mirrors.cc',
     'mirrors.h',
+    # mirrors_patch.dart needs to be the first dart file because it contains
+    # imports.
     'mirrors_patch.dart',
     'mirrors_impl.dart',
     'mirror_reference.dart',
diff --git a/runtime/lib/null_patch.dart b/runtime/lib/null_patch.dart
index 312804e..0f22e67 100644
--- a/runtime/lib/null_patch.dart
+++ b/runtime/lib/null_patch.dart
@@ -5,14 +5,7 @@
 // Dart core library.
 
 @patch class Null {
-
-  factory Null._uninstantiable() {
-    throw new UnsupportedError("class Null cannot be instantiated");
-  }
-
   static const _HASH_CODE = 2011; // The year Dart was announced and a prime.
   int get hashCode => _HASH_CODE;
   int get _identityHashCode => _HASH_CODE;
-
-  String toString() => 'null';
 }
diff --git a/runtime/lib/object_patch.dart b/runtime/lib/object_patch.dart
index 0af593d..8959feb 100644
--- a/runtime/lib/object_patch.dart
+++ b/runtime/lib/object_patch.dart
@@ -5,7 +5,7 @@
 @patch class Object {
 
   // The VM has its own implementation of equals.
-  bool operator ==(other) native "Object_equals";
+  @patch bool operator ==(other) native "Object_equals";
 
   // Helpers used to implement hashCode. If a hashCode is used, we remember it
   // in a weak table in the VM. A new hashCode value is calculated using a
diff --git a/runtime/lib/profiler.dart b/runtime/lib/profiler.dart
index 2a085c2..b60760a 100644
--- a/runtime/lib/profiler.dart
+++ b/runtime/lib/profiler.dart
@@ -2,8 +2,6 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-import 'dart:_internal';
-
 @patch class UserTag {
   @patch factory UserTag(String label) {
     return new _UserTag(label);
diff --git a/runtime/lib/regexp_patch.dart b/runtime/lib/regexp_patch.dart
index 7e8bc19..a9ccd55 100644
--- a/runtime/lib/regexp_patch.dart
+++ b/runtime/lib/regexp_patch.dart
@@ -2,8 +2,6 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-import "dart:collection" show LinkedList, LinkedListEntry;
-
 @patch class RegExp {
   @patch factory RegExp(String source,
                               {bool multiLine: false,
diff --git a/runtime/lib/stacktrace.h b/runtime/lib/stacktrace.h
index c3b16e4..e6bccae 100644
--- a/runtime/lib/stacktrace.h
+++ b/runtime/lib/stacktrace.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 LIB_STACKTRACE_H_
-#define LIB_STACKTRACE_H_
+#ifndef RUNTIME_LIB_STACKTRACE_H_
+#define RUNTIME_LIB_STACKTRACE_H_
 
 namespace dart {
 
@@ -18,4 +18,4 @@
 
 }  // namespace dart
 
-#endif  // LIB_STACKTRACE_H_
+#endif  // RUNTIME_LIB_STACKTRACE_H_
diff --git a/runtime/lib/timeline.dart b/runtime/lib/timeline.dart
index da5760e..b2aa165 100644
--- a/runtime/lib/timeline.dart
+++ b/runtime/lib/timeline.dart
@@ -2,8 +2,6 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-import 'dart:_internal';
-
 @patch bool _isDartStreamEnabled() native "Timeline_isDartStreamEnabled";
 
 @patch int _getTraceClock() native "Timeline_getTraceClock";
diff --git a/runtime/lib/typed_data.dart b/runtime/lib/typed_data.dart
index c010555..0875fbc 100644
--- a/runtime/lib/typed_data.dart
+++ b/runtime/lib/typed_data.dart
@@ -2,6 +2,9 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// Unlike the other SDK libraries, this file is not a patch that is applied to
+// dart:typed_data.  Instead, it completely replaces the implementation from the
+// SDK.
 library dart.typed_data;
 
 import "dart:_internal";
diff --git a/runtime/lib/uri_patch.dart b/runtime/lib/uri_patch.dart
index 0ce6b11..27e5efd 100644
--- a/runtime/lib/uri_patch.dart
+++ b/runtime/lib/uri_patch.dart
@@ -2,8 +2,6 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-import "dart:convert" show ASCII;
-
 // VM implementation of Uri.
 typedef Uri _UriBaseClosure();
 
diff --git a/runtime/observatory/BUILD.gn b/runtime/observatory/BUILD.gn
index fc7af6a..5058eed 100644
--- a/runtime/observatory/BUILD.gn
+++ b/runtime/observatory/BUILD.gn
@@ -16,15 +16,12 @@
 # Helper build rules for packaging the Dart observatory resources.
 observatory_sources_gypi =
     exec_script("../../tools/gypi_to_gn.py",
-                [ rebase_path(
-                    "../observatory/observatory_sources.gypi") ],
+                [ rebase_path("../observatory/observatory_sources.gypi") ],
                 "scope",
                 [ "../observatory/observatory_sources.gypi" ])
 
 copy("copy_observatory") {
-  sources = rebase_path(observatory_sources_gypi.sources,
-                        "",
-                        ".")
+  sources = rebase_path(observatory_sources_gypi.sources, "", ".")
   outputs = [
     "$root_gen_dir/observatory_copy/{{source_root_relative_dir}}/{{source_file_part}}",
   ]
@@ -51,8 +48,7 @@
     "--command",
     "rewrite",
     rebase_path("../observatory/pubspec.yaml"),
-    rebase_path(
-        "$root_gen_dir/observatory_copy/$current_dir/pubspec.yaml"),
+    rebase_path("$root_gen_dir/observatory_copy/$current_dir/pubspec.yaml"),
     "../../third_party/",
     rebase_path("../../third_party/"),
   ]
@@ -94,10 +90,9 @@
 
 action("pub_build_observatory") {
   current_dir = rebase_path(".", "//")
-  sources =
-      rebase_path(observatory_sources_gypi.sources,
-                  "",
-                  "$root_gen_dir/observatory_copy/$current_dir")
+  sources = rebase_path(observatory_sources_gypi.sources,
+                        "",
+                        "$root_gen_dir/observatory_copy/$current_dir")
 
   deps = [
     ":copy_observatory",
@@ -184,10 +179,14 @@
       rebase_path("$root_gen_dir/observatory/${output_name}.cc"),
       "--tar_output",
       rebase_path("$root_gen_dir/observatory/${output_name}.tar"),
-      "--outer_namespace", outer_namespace,
-      "--inner_namespace", inner_namespace,
-      "--name", "observatory_assets_archive",
-      "--client_root", rebase_path("$root_out_dir/observatory/deployed/web/"),
+      "--outer_namespace",
+      outer_namespace,
+      "--inner_namespace",
+      inner_namespace,
+      "--name",
+      "observatory_assets_archive",
+      "--client_root",
+      rebase_path("$root_out_dir/observatory/deployed/web/"),
     ]
     if (enable_compression) {
       args += [ "--compress" ]
diff --git a/runtime/platform/address_sanitizer.h b/runtime/platform/address_sanitizer.h
index 37346fc..584f3a5 100644
--- a/runtime/platform/address_sanitizer.h
+++ b/runtime/platform/address_sanitizer.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 PLATFORM_ADDRESS_SANITIZER_H_
-#define PLATFORM_ADDRESS_SANITIZER_H_
+#ifndef RUNTIME_PLATFORM_ADDRESS_SANITIZER_H_
+#define RUNTIME_PLATFORM_ADDRESS_SANITIZER_H_
 
 #include "platform/globals.h"
 
@@ -20,4 +20,4 @@
 #define ASAN_UNPOISON(ptr, len) do {} while (false && (ptr) == 0 && (len) == 0)
 #endif  // defined(__has_feature)
 
-#endif  // PLATFORM_ADDRESS_SANITIZER_H_
+#endif  // RUNTIME_PLATFORM_ADDRESS_SANITIZER_H_
diff --git a/runtime/platform/assert.h b/runtime/platform/assert.h
index 81cb7f1..1d35327 100644
--- a/runtime/platform/assert.h
+++ b/runtime/platform/assert.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 PLATFORM_ASSERT_H_
-#define PLATFORM_ASSERT_H_
+#ifndef RUNTIME_PLATFORM_ASSERT_H_
+#define RUNTIME_PLATFORM_ASSERT_H_
 
 // TODO(5411406): include sstream for now, once we have a Utils::toString()
 // implemented for all the primitive types we can replace the usage of
@@ -379,4 +379,4 @@
 
 #endif  // defined(TESTING)
 
-#endif  // PLATFORM_ASSERT_H_
+#endif  // RUNTIME_PLATFORM_ASSERT_H_
diff --git a/runtime/platform/c99_support_win.h b/runtime/platform/c99_support_win.h
index c01c248..d90f34d 100644
--- a/runtime/platform/c99_support_win.h
+++ b/runtime/platform/c99_support_win.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 PLATFORM_C99_SUPPORT_WIN_H_
-#define PLATFORM_C99_SUPPORT_WIN_H_
+#ifndef RUNTIME_PLATFORM_C99_SUPPORT_WIN_H_
+#define RUNTIME_PLATFORM_C99_SUPPORT_WIN_H_
 
 #if defined(_MSC_VER) && (_MSC_VER < 1800)
 
@@ -79,4 +79,4 @@
 
 #endif
 
-#endif  // PLATFORM_C99_SUPPORT_WIN_H_
+#endif  // RUNTIME_PLATFORM_C99_SUPPORT_WIN_H_
diff --git a/runtime/platform/floating_point.h b/runtime/platform/floating_point.h
index 7adaa73..24d2f9c 100644
--- a/runtime/platform/floating_point.h
+++ b/runtime/platform/floating_point.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 PLATFORM_FLOATING_POINT_H_
-#define PLATFORM_FLOATING_POINT_H_
+#ifndef RUNTIME_PLATFORM_FLOATING_POINT_H_
+#define RUNTIME_PLATFORM_FLOATING_POINT_H_
 
 inline double fmod_ieee(double x, double y) { return fmod(x, y); }
 inline double atan2_ieee(double y, double x) { return atan2(y, x); }
 
-#endif  // PLATFORM_FLOATING_POINT_H_
+#endif  // RUNTIME_PLATFORM_FLOATING_POINT_H_
diff --git a/runtime/platform/floating_point_win.cc b/runtime/platform/floating_point_win.cc
index 009da2a..76ce626 100644
--- a/runtime/platform/floating_point_win.cc
+++ b/runtime/platform/floating_point_win.cc
@@ -5,6 +5,8 @@
 #include "platform/globals.h"
 #if defined(TARGET_OS_WINDOWS)
 
+#include "platform/floating_point_win.h"
+
 #include <limits>  // NOLINT
 
 // Taken from third_party/v8/src/platform-win32.cc
diff --git a/runtime/platform/floating_point_win.h b/runtime/platform/floating_point_win.h
index a97051a..8fab8ae 100644
--- a/runtime/platform/floating_point_win.h
+++ b/runtime/platform/floating_point_win.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 PLATFORM_FLOATING_POINT_WIN_H_
-#define PLATFORM_FLOATING_POINT_WIN_H_
+#ifndef RUNTIME_PLATFORM_FLOATING_POINT_WIN_H_
+#define RUNTIME_PLATFORM_FLOATING_POINT_WIN_H_
 
 double atan2_ieee(double x, double y);
 double fmod_ieee(double x, double y);
 
-#endif  // PLATFORM_FLOATING_POINT_WIN_H_
+#endif  // RUNTIME_PLATFORM_FLOATING_POINT_WIN_H_
diff --git a/runtime/platform/globals.h b/runtime/platform/globals.h
index cd01fc5..8503221 100644
--- a/runtime/platform/globals.h
+++ b/runtime/platform/globals.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 PLATFORM_GLOBALS_H_
-#define PLATFORM_GLOBALS_H_
+#ifndef RUNTIME_PLATFORM_GLOBALS_H_
+#define RUNTIME_PLATFORM_GLOBALS_H_
 
 // __STDC_FORMAT_MACROS has to be defined before including <inttypes.h> to
 // enable platform independent printf format specifiers.
@@ -713,4 +713,4 @@
 
 }  // namespace dart
 
-#endif  // PLATFORM_GLOBALS_H_
+#endif  // RUNTIME_PLATFORM_GLOBALS_H_
diff --git a/runtime/platform/hashmap.h b/runtime/platform/hashmap.h
index 185c75f..1cd8a4a 100644
--- a/runtime/platform/hashmap.h
+++ b/runtime/platform/hashmap.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 PLATFORM_HASHMAP_H_
-#define PLATFORM_HASHMAP_H_
+#ifndef RUNTIME_PLATFORM_HASHMAP_H_
+#define RUNTIME_PLATFORM_HASHMAP_H_
 
 #include "platform/globals.h"
 
@@ -105,4 +105,4 @@
 
 }  // namespace dart
 
-#endif  // PLATFORM_HASHMAP_H_
+#endif  // RUNTIME_PLATFORM_HASHMAP_H_
diff --git a/runtime/platform/inttypes_support_win.h b/runtime/platform/inttypes_support_win.h
index 34d83a4..06d4053 100644
--- a/runtime/platform/inttypes_support_win.h
+++ b/runtime/platform/inttypes_support_win.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 PLATFORM_INTTYPES_SUPPORT_WIN_H_
-#define PLATFORM_INTTYPES_SUPPORT_WIN_H_
+#ifndef RUNTIME_PLATFORM_INTTYPES_SUPPORT_WIN_H_
+#define RUNTIME_PLATFORM_INTTYPES_SUPPORT_WIN_H_
 
 typedef signed __int8 int8_t;
 typedef signed __int16 int16_t;
@@ -24,4 +24,4 @@
 #define PRIu64 "I64u"
 #define PRIx64 "I64x"
 
-#endif  // PLATFORM_INTTYPES_SUPPORT_WIN_H_
+#endif  // RUNTIME_PLATFORM_INTTYPES_SUPPORT_WIN_H_
diff --git a/runtime/platform/math.h b/runtime/platform/math.h
index 0dc34008..1edf3e3 100644
--- a/runtime/platform/math.h
+++ b/runtime/platform/math.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 PLATFORM_MATH_H_
-#define PLATFORM_MATH_H_
+#ifndef RUNTIME_PLATFORM_MATH_H_
+#define RUNTIME_PLATFORM_MATH_H_
 
 // We must take these math functions from the C++ header file as long as we
 // are using the STL. Otherwise the Android build will break due to confusion
@@ -20,4 +20,4 @@
 #include <math.h>
 #endif
 
-#endif  // PLATFORM_MATH_H_
+#endif  // RUNTIME_PLATFORM_MATH_H_
diff --git a/runtime/platform/memory_sanitizer.h b/runtime/platform/memory_sanitizer.h
index fe05ed1..dddfe31 100644
--- a/runtime/platform/memory_sanitizer.h
+++ b/runtime/platform/memory_sanitizer.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 PLATFORM_MEMORY_SANITIZER_H_
-#define PLATFORM_MEMORY_SANITIZER_H_
+#ifndef RUNTIME_PLATFORM_MEMORY_SANITIZER_H_
+#define RUNTIME_PLATFORM_MEMORY_SANITIZER_H_
 
 #include "platform/globals.h"
 
@@ -23,4 +23,4 @@
 #define NO_SANITIZE_MEMORY
 #endif  // defined(__has_feature)
 
-#endif  // PLATFORM_MEMORY_SANITIZER_H_
+#endif  // RUNTIME_PLATFORM_MEMORY_SANITIZER_H_
diff --git a/runtime/platform/signal_blocker.h b/runtime/platform/signal_blocker.h
index 45d09aa..28c22ac 100644
--- a/runtime/platform/signal_blocker.h
+++ b/runtime/platform/signal_blocker.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 PLATFORM_SIGNAL_BLOCKER_H_
-#define PLATFORM_SIGNAL_BLOCKER_H_
+#ifndef RUNTIME_PLATFORM_SIGNAL_BLOCKER_H_
+#define RUNTIME_PLATFORM_SIGNAL_BLOCKER_H_
 
 #include "platform/globals.h"
 #include "platform/assert.h"
@@ -105,4 +105,4 @@
 
 }  // namespace dart
 
-#endif  // PLATFORM_SIGNAL_BLOCKER_H_
+#endif  // RUNTIME_PLATFORM_SIGNAL_BLOCKER_H_
diff --git a/runtime/platform/text_buffer.h b/runtime/platform/text_buffer.h
index 973ca7e..5689f0f 100644
--- a/runtime/platform/text_buffer.h
+++ b/runtime/platform/text_buffer.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 PLATFORM_TEXT_BUFFER_H_
-#define PLATFORM_TEXT_BUFFER_H_
+#ifndef RUNTIME_PLATFORM_TEXT_BUFFER_H_
+#define RUNTIME_PLATFORM_TEXT_BUFFER_H_
 
 #include "vm/allocation.h"
 #include "vm/globals.h"
@@ -45,4 +45,4 @@
 
 }  // namespace dart
 
-#endif  // PLATFORM_TEXT_BUFFER_H_
+#endif  // RUNTIME_PLATFORM_TEXT_BUFFER_H_
diff --git a/runtime/platform/utils.h b/runtime/platform/utils.h
index 65bc14f..b67c96e 100644
--- a/runtime/platform/utils.h
+++ b/runtime/platform/utils.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 PLATFORM_UTILS_H_
-#define PLATFORM_UTILS_H_
+#ifndef RUNTIME_PLATFORM_UTILS_H_
+#define RUNTIME_PLATFORM_UTILS_H_
 
 #include "platform/assert.h"
 #include "platform/globals.h"
@@ -227,4 +227,4 @@
 #error Unknown target os.
 #endif
 
-#endif  // PLATFORM_UTILS_H_
+#endif  // RUNTIME_PLATFORM_UTILS_H_
diff --git a/runtime/platform/utils_android.h b/runtime/platform/utils_android.h
index 7709442..4bd2a38 100644
--- a/runtime/platform/utils_android.h
+++ b/runtime/platform/utils_android.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 PLATFORM_UTILS_ANDROID_H_
-#define PLATFORM_UTILS_ANDROID_H_
+#ifndef RUNTIME_PLATFORM_UTILS_ANDROID_H_
+#define RUNTIME_PLATFORM_UTILS_ANDROID_H_
 
 #include <endian.h>  // NOLINT
 
@@ -69,4 +69,4 @@
 
 }  // namespace dart
 
-#endif  // PLATFORM_UTILS_ANDROID_H_
+#endif  // RUNTIME_PLATFORM_UTILS_ANDROID_H_
diff --git a/runtime/platform/utils_fuchsia.h b/runtime/platform/utils_fuchsia.h
index 575c3db..4143daf 100644
--- a/runtime/platform/utils_fuchsia.h
+++ b/runtime/platform/utils_fuchsia.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 PLATFORM_UTILS_FUCHSIA_H_
-#define PLATFORM_UTILS_FUCHSIA_H_
+#ifndef RUNTIME_PLATFORM_UTILS_FUCHSIA_H_
+#define RUNTIME_PLATFORM_UTILS_FUCHSIA_H_
 
 #include <endian.h>
 
@@ -70,4 +70,4 @@
 
 }  // namespace dart
 
-#endif  // PLATFORM_UTILS_FUCHSIA_H_
+#endif  // RUNTIME_PLATFORM_UTILS_FUCHSIA_H_
diff --git a/runtime/platform/utils_linux.h b/runtime/platform/utils_linux.h
index bb9594f..5be126d 100644
--- a/runtime/platform/utils_linux.h
+++ b/runtime/platform/utils_linux.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 PLATFORM_UTILS_LINUX_H_
-#define PLATFORM_UTILS_LINUX_H_
+#ifndef RUNTIME_PLATFORM_UTILS_LINUX_H_
+#define RUNTIME_PLATFORM_UTILS_LINUX_H_
 
 #include <endian.h>  // NOLINT
 
@@ -77,4 +77,4 @@
 
 }  // namespace dart
 
-#endif  // PLATFORM_UTILS_LINUX_H_
+#endif  // RUNTIME_PLATFORM_UTILS_LINUX_H_
diff --git a/runtime/platform/utils_macos.h b/runtime/platform/utils_macos.h
index 7c2a966..2a8e39f 100644
--- a/runtime/platform/utils_macos.h
+++ b/runtime/platform/utils_macos.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 PLATFORM_UTILS_MACOS_H_
-#define PLATFORM_UTILS_MACOS_H_
+#ifndef RUNTIME_PLATFORM_UTILS_MACOS_H_
+#define RUNTIME_PLATFORM_UTILS_MACOS_H_
 
 #include <libkern/OSByteOrder.h>  // NOLINT
 
@@ -69,4 +69,4 @@
 
 }  // namespace dart
 
-#endif  // PLATFORM_UTILS_MACOS_H_
+#endif  // RUNTIME_PLATFORM_UTILS_MACOS_H_
diff --git a/runtime/platform/utils_win.h b/runtime/platform/utils_win.h
index 7d7b96e..92b7f98 100644
--- a/runtime/platform/utils_win.h
+++ b/runtime/platform/utils_win.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 PLATFORM_UTILS_WIN_H_
-#define PLATFORM_UTILS_WIN_H_
+#ifndef RUNTIME_PLATFORM_UTILS_WIN_H_
+#define RUNTIME_PLATFORM_UTILS_WIN_H_
 
 #include <intrin.h>
 #include <stdlib.h>
@@ -67,4 +67,4 @@
 
 }  // namespace dart
 
-#endif  // PLATFORM_UTILS_WIN_H_
+#endif  // RUNTIME_PLATFORM_UTILS_WIN_H_
diff --git a/runtime/third_party/double-conversion/src/BUILD.gn b/runtime/third_party/double-conversion/src/BUILD.gn
index 5aaa53b..7888623 100644
--- a/runtime/third_party/double-conversion/src/BUILD.gn
+++ b/runtime/third_party/double-conversion/src/BUILD.gn
@@ -2,14 +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.
 
-
 static_library("libdouble_conversion") {
-  configs += [ "../../..:dart_config", ]
+  configs += [ "../../..:dart_config" ]
   sources = [
-    "bignum.cc",
-    "bignum.h",
     "bignum-dtoa.cc",
     "bignum-dtoa.h",
+    "bignum.cc",
+    "bignum.h",
     "cached-powers.cc",
     "cached-powers.h",
     "diy-fp.cc",
@@ -25,8 +24,5 @@
     "strtod.h",
     "utils.h",
   ]
-  include_dirs = [
-    ".",
-  ]
+  include_dirs = [ "." ]
 }
-
diff --git a/runtime/tools/concatenate_patches.py b/runtime/tools/concatenate_patches.py
new file mode 100755
index 0000000..1653066
--- /dev/null
+++ b/runtime/tools/concatenate_patches.py
@@ -0,0 +1,30 @@
+#!/usr/bin/env python
+# Copyright (c) 2016, the Dart project authors.  Please see the AUTHORS file
+# for details. All rights reserved. Use of this source code is governed by a
+# BSD-style license that can be found in the LICENSE file.
+
+from optparse import OptionParser
+
+def writePatch(output_file_name, input_file_names):
+  dart_file_names = filter(lambda name: name.endswith('.dart'),
+                           input_file_names)
+  with open(output_file_name, 'w') as output_file:
+    for dart_file_name in dart_file_names:
+      with open(dart_file_name, 'r') as dart_file:
+        output_file.write(dart_file.read())
+
+
+def main():
+  parser = OptionParser()
+  parser.add_option('--output', action='store', type='string',
+                    help='output file path')
+  (options, args) = parser.parse_args()
+  if not options.output:
+    parser.error('missing --output option\n')
+  if len(args) == 0:
+    parser.error('no input files given\n')
+  writePatch(options.output, args)
+
+
+if __name__ == '__main__':
+  main()
diff --git a/runtime/vm/BUILD.gn b/runtime/vm/BUILD.gn
index d7edae6..71fe87e 100644
--- a/runtime/vm/BUILD.gn
+++ b/runtime/vm/BUILD.gn
@@ -4,9 +4,7 @@
 
 config("libdart_vm_config") {
   if (defined(is_fuchsia) && is_fuchsia) {
-    libs = [
-      "magenta",
-    ]
+    libs = [ "magenta" ]
   } else if (is_win) {
     libs = [
       "advapi32.lib",
@@ -16,7 +14,7 @@
   } else {
     libs = [ "dl" ]
     if (!is_android) {
-      libs += [ "pthread"]
+      libs += [ "pthread" ]
     }
     if (is_linux) {
       libs += [ "rt" ]
@@ -24,122 +22,157 @@
   }
 }
 
-
 static_library("libdart_platform") {
-  configs += ["..:dart_config",
-              "..:dart_maybe_product_config"]
-  public_configs = [":libdart_vm_config"]
+  configs += [
+    "..:dart_config",
+    "..:dart_maybe_product_config",
+  ]
+  public_configs = [ ":libdart_vm_config" ]
 
   platform_headers_gypi =
       exec_script("../../tools/gypi_to_gn.py",
-                  [rebase_path("../platform/platform_headers.gypi")],
+                  [ rebase_path("../platform/platform_headers.gypi") ],
                   "scope",
-                  ["../platform/platform_headers.gypi"])
+                  [ "../platform/platform_headers.gypi" ])
   platform_headers =
       rebase_path(platform_headers_gypi.sources, ".", "../platform")
 
   platform_sources_gypi =
       exec_script("../../tools/gypi_to_gn.py",
-                  [rebase_path("../platform/platform_sources.gypi")],
+                  [ rebase_path("../platform/platform_sources.gypi") ],
                   "scope",
-                  ["../platform/platform_sources.gypi"])
+                  [ "../platform/platform_sources.gypi" ])
   platform_sources =
       rebase_path(platform_sources_gypi.sources, ".", "../platform")
 
   sources = platform_headers + platform_sources
-  include_dirs = [
-    "..",
-  ]
+  include_dirs = [ ".." ]
 }
 
-
 vm_sources_list = exec_script("../../tools/gypi_to_gn.py",
-                              [rebase_path("vm_sources.gypi")],
+                              [ rebase_path("vm_sources.gypi") ],
                               "scope",
-                              ["vm_sources.gypi"])
-
+                              [ "vm_sources.gypi" ])
 
 static_library("libdart_vm") {
-  configs += ["..:dart_config",
-              "..:dart_maybe_product_config",
-              "..:dart_maybe_precompiled_runtime_config"]
-  public_configs = [":libdart_vm_config"]
-  set_sources_assignment_filter(["*_test.cc", "*_test.h"])
-  sources = vm_sources_list.sources
-  include_dirs = [
-    "..",
+  configs += [
+    "..:dart_config",
+    "..:dart_maybe_product_config",
+    "..:dart_maybe_precompiled_runtime_config",
   ]
+  public_configs = [ ":libdart_vm_config" ]
+  set_sources_assignment_filter([
+                                  "*_test.cc",
+                                  "*_test.h",
+                                ])
+  sources = vm_sources_list.sources
+  include_dirs = [ ".." ]
 }
 
-
 static_library("libdart_vm_noopt") {
-  configs += ["..:dart_config",
-              "..:dart_maybe_product_config",
-              "..:dart_precompiler_config",
-              "..:dart_maybe_precompiled_runtime_config"]
-  public_configs = [":libdart_vm_config"]
-  set_sources_assignment_filter(["*_test.cc", "*_test.h"])
-  sources = vm_sources_list.sources
-  include_dirs = [
-    "..",
+  configs += [
+    "..:dart_config",
+    "..:dart_maybe_product_config",
+    "..:dart_precompiler_config",
+    "..:dart_maybe_precompiled_runtime_config",
   ]
+  public_configs = [ ":libdart_vm_config" ]
+  set_sources_assignment_filter([
+                                  "*_test.cc",
+                                  "*_test.h",
+                                ])
+  sources = vm_sources_list.sources
+  include_dirs = [ ".." ]
 }
 
-
 static_library("libdart_vm_precompiled_runtime") {
-  configs += ["..:dart_config",
-              "..:dart_maybe_product_config",
-              "..:dart_precompiled_runtime_config"]
-  public_configs = [":libdart_vm_config"]
-  set_sources_assignment_filter(["*_test.cc", "*_test.h"])
-  sources = vm_sources_list.sources
-  include_dirs = [
-    "..",
+  configs += [
+    "..:dart_config",
+    "..:dart_maybe_product_config",
+    "..:dart_precompiled_runtime_config",
   ]
+  public_configs = [ ":libdart_vm_config" ]
+  set_sources_assignment_filter([
+                                  "*_test.cc",
+                                  "*_test.h",
+                                ])
+  sources = vm_sources_list.sources
+  include_dirs = [ ".." ]
 }
 
-
 static_library("libdart_vm_nosnapshot") {
-  configs += ["..:dart_config",
-              "..:dart_maybe_product_config",
-              "..:dart_maybe_precompiled_runtime_config",
-              "..:dart_no_snapshot_config",]
-  public_configs = [":libdart_vm_config"]
-  set_sources_assignment_filter(["*_test.cc", "*_test.h"])
-  sources = vm_sources_list.sources
-  include_dirs = [
-    "..",
+  configs += [
+    "..:dart_config",
+    "..:dart_maybe_product_config",
+    "..:dart_maybe_precompiled_runtime_config",
+    "..:dart_no_snapshot_config",
   ]
+  public_configs = [ ":libdart_vm_config" ]
+  set_sources_assignment_filter([
+                                  "*_test.cc",
+                                  "*_test.h",
+                                ])
+  sources = vm_sources_list.sources
+  include_dirs = [ ".." ]
 }
 
-
 static_library("libdart_vm_nosnapshot_precompiled_runtime") {
-  configs += ["..:dart_config",
-              "..:dart_maybe_product_config",
-              "..:dart_precompiled_runtime_config",
-              "..:dart_no_snapshot_config",]
-  public_configs = [":libdart_vm_config"]
-  set_sources_assignment_filter(["*_test.cc", "*_test.h"])
-  sources = vm_sources_list.sources
-  include_dirs = [
-    "..",
+  configs += [
+    "..:dart_config",
+    "..:dart_maybe_product_config",
+    "..:dart_precompiled_runtime_config",
+    "..:dart_no_snapshot_config",
   ]
+  public_configs = [ ":libdart_vm_config" ]
+  set_sources_assignment_filter([
+                                  "*_test.cc",
+                                  "*_test.h",
+                                ])
+  sources = vm_sources_list.sources
+  include_dirs = [ ".." ]
 }
 
-
 static_library("libdart_vm_nosnapshot_with_precompiler") {
-  configs += ["..:dart_config",
-              "..:dart_maybe_product_config",
-              "..:dart_precompiler_config",
-              "..:dart_no_snapshot_config",]
-  public_configs = [":libdart_vm_config"]
-  set_sources_assignment_filter(["*_test.cc", "*_test.h"])
-  sources = vm_sources_list.sources
-  include_dirs = [
-    "..",
+  configs += [
+    "..:dart_config",
+    "..:dart_maybe_product_config",
+    "..:dart_precompiler_config",
+    "..:dart_no_snapshot_config",
   ]
+  public_configs = [ ":libdart_vm_config" ]
+  set_sources_assignment_filter([
+                                  "*_test.cc",
+                                  "*_test.h",
+                                ])
+  sources = vm_sources_list.sources
+  include_dirs = [ ".." ]
 }
 
+template("process_library_source") {
+  assert(defined(invoker.filename), "Need filename in $target_name")
+  assert(defined(invoker.output), "Need output in $target_name")
+  assert(defined(invoker.path), "Need path in $target_name")
+  action(target_name) {
+    visibility = [ ":*" ]  # Only targets in this file can see this.
+    filename = invoker.filename
+    path = invoker.path
+
+    lib_sources_gypi =
+        exec_script("../../tools/gypi_to_gn.py",
+                    [ rebase_path("${path}/${filename}_sources.gypi") ],
+                    "scope",
+                    [ "${path}/${filename}_sources.gypi" ])
+    lib_sources = rebase_path(lib_sources_gypi.sources, ".", path)
+
+    script = invoker.script
+    inputs = invoker.inputs + [ script ]
+    inputs += lib_sources
+    outputs = [
+      invoker.output,
+    ]
+    args = invoker.args + rebase_path(lib_sources, root_build_dir)
+  }
+}
 
 template("generate_library_source") {
   assert(defined(invoker.libname), "Need libname in $target_name")
@@ -147,39 +180,32 @@
   assert(defined(invoker.kind), "Need kind in $target_name")
   assert(defined(invoker.output), "Need output in $target_name")
   assert(defined(invoker.path), "Need path in $target_name")
-  action(target_name) {
-    visibility = [ ":*" ]  # Only targets in this file can see this.
+
+  process_library_source(target_name) {
     libname = invoker.libname
     filename = invoker.filename
     kind = invoker.kind
+    output = invoker.output
     path = invoker.path
-
-    lib_sources_gypi =
-        exec_script("../../tools/gypi_to_gn.py",
-                    [rebase_path("${path}/${filename}_sources.gypi")],
-                    "scope",
-                    ["${path}/${filename}_sources.gypi"])
-    lib_sources =
-        rebase_path(lib_sources_gypi.sources, ".", path)
-
     script = "../tools/gen_library_src_paths.py"
     inputs = [
-      "../tools/gen_library_src_paths.py",
       "../lib/libgen_in.cc",
     ]
-    inputs += lib_sources
-    outputs = [ invoker.output, ]
     args = [
-      "--output", rebase_path(invoker.output, root_build_dir),
-      "--input_cc", rebase_path("../lib/libgen_in.cc", root_build_dir),
-      "--include", "vm/bootstrap.h",
-      "--var_name", "dart::Bootstrap::${libname}_${kind}_paths_",
-      "--library_name", "dart:${libname}",] +
-      rebase_path(lib_sources, root_build_dir)
+      "--output",
+      rebase_path(invoker.output, root_build_dir),
+      "--input_cc",
+      rebase_path("../lib/libgen_in.cc", root_build_dir),
+      "--include",
+      "vm/bootstrap.h",
+      "--var_name",
+      "dart::Bootstrap::${libname}_${kind}_paths_",
+      "--library_name",
+      "dart:${libname}",
+    ]
   }
 }
 
-
 # This templates expects invoker.sources to be a list of pairs of strings.
 # The pairs of strings mean the following.
 # library name, file name
@@ -217,85 +243,298 @@
         output = "$target_gen_dir/${filename}_patch_gen.cc"
       }
     }
-    lib_sources_gypi = {}
+    lib_sources_gypi = {
+    }
     lib_sources_gypi =
         exec_script("../../tools/gypi_to_gn.py",
-                    [rebase_path("../lib/${filename}_sources.gypi")],
+                    [ rebase_path("../lib/${filename}_sources.gypi") ],
                     "scope",
-                    ["../lib/${filename}_sources.gypi"])
+                    [ "../lib/${filename}_sources.gypi" ])
     libsources += rebase_path(lib_sources_gypi.sources, ".", "../lib")
-    liboutputs += ["$target_gen_dir/${filename}_gen.cc"]
-    libdeps += [":generate_${filename}_cc_file"]
+    liboutputs += [ "$target_gen_dir/${filename}_gen.cc" ]
+    libdeps += [ ":generate_${filename}_cc_file" ]
     if (do_patch) {
-      liboutputs += ["$target_gen_dir/${filename}_patch_gen.cc"]
-      libdeps += [":generate_${filename}_patch_cc_file"]
+      liboutputs += [ "$target_gen_dir/${filename}_patch_gen.cc" ]
+      libdeps += [ ":generate_${filename}_patch_cc_file" ]
     }
   }
 
   static_library("libdart_lib_nosnapshot") {
-    configs += ["..:dart_config",
-                "..:dart_maybe_product_config",
-                "..:dart_maybe_precompiled_runtime_config"]
-    deps = libdeps
-    sources = libsources + ["bootstrap.cc"] + liboutputs
-    include_dirs = [
-      "..",
+    configs += [
+      "..:dart_config",
+      "..:dart_maybe_product_config",
+      "..:dart_maybe_precompiled_runtime_config",
     ]
+    deps = libdeps
+    sources = libsources + [ "bootstrap.cc" ] + liboutputs
+    include_dirs = [ ".." ]
   }
   static_library("libdart_lib_nosnapshot_precompiled_runtime") {
-    configs += ["..:dart_config",
-                "..:dart_maybe_product_config",
-                "..:dart_precompiled_runtime_config"]
-    deps = libdeps
-    sources = libsources + ["bootstrap.cc"] + liboutputs
-    include_dirs = [
-      "..",
+    configs += [
+      "..:dart_config",
+      "..:dart_maybe_product_config",
+      "..:dart_precompiled_runtime_config",
     ]
+    deps = libdeps
+    sources = libsources + [ "bootstrap.cc" ] + liboutputs
+    include_dirs = [ ".." ]
   }
   static_library("libdart_lib_nosnapshot_with_precompiler") {
-    configs += ["..:dart_config",
-                "..:dart_maybe_product_config",
-                "..:dart_precompiler_config" ]
-    deps = libdeps
-    sources = libsources + [ "bootstrap.cc"] + liboutputs
-    include_dirs = [
-      "..",
+    configs += [
+      "..:dart_config",
+      "..:dart_maybe_product_config",
+      "..:dart_precompiler_config",
     ]
+    deps = libdeps
+    sources = libsources + [ "bootstrap.cc" ] + liboutputs
+    include_dirs = [ ".." ]
   }
   static_library("libdart_lib") {
-    configs += ["..:dart_config",
-                "..:dart_maybe_product_config",
-                "..:dart_maybe_precompiled_runtime_config"]
-    sources = libsources + [ "bootstrap_nocore.cc"]
-    include_dirs = [
-      "..",
+    configs += [
+      "..:dart_config",
+      "..:dart_maybe_product_config",
+      "..:dart_maybe_precompiled_runtime_config",
     ]
+    sources = libsources + [ "bootstrap_nocore.cc" ]
+    include_dirs = [ ".." ]
   }
   static_library("libdart_lib_precompiled_runtime") {
-    configs += ["..:dart_config",
-                "..:dart_maybe_product_config",
-                "..:dart_precompiled_runtime_config"]
-    sources = libsources + [ "bootstrap_nocore.cc"]
-    include_dirs = [
-      "..",
+    configs += [
+      "..:dart_config",
+      "..:dart_maybe_product_config",
+      "..:dart_precompiled_runtime_config",
+    ]
+    sources = libsources + [ "bootstrap_nocore.cc" ]
+    include_dirs = [ ".." ]
+  }
+}
+
+generate_core_libraries("core_libraries") {
+  sources = [
+    [
+      "async",
+      "async",
+      true,
+      "../../sdk/lib/async",
+      "../lib",
+    ],
+    [
+      "core",
+      "core",
+      true,
+      "../../sdk/lib/core",
+      "../lib",
+    ],
+    [
+      "collection",
+      "collection",
+      true,
+      "../../sdk/lib/collection",
+      "../lib",
+    ],
+    [
+      "convert",
+      "convert",
+      true,
+      "../../sdk/lib/convert",
+      "../lib",
+    ],
+    [
+      "developer",
+      "developer",
+      true,
+      "../../sdk/lib/developer",
+      "../lib",
+    ],
+    [
+      "_internal",
+      "internal",
+      true,
+      "../../sdk/lib/internal",
+      "../lib",
+    ],
+    [
+      "isolate",
+      "isolate",
+      true,
+      "../../sdk/lib/isolate",
+      "../lib",
+    ],
+    [
+      "math",
+      "math",
+      true,
+      "../../sdk/lib/math",
+      "../lib",
+    ],
+    [
+      "mirrors",
+      "mirrors",
+      true,
+      "../../sdk/lib/mirrors",
+      "../lib",
+    ],
+    [
+      "profiler",
+      "profiler",
+      false,
+      "../../sdk/lib/profiler",
+    ],
+    [
+      "typed_data",
+      "typed_data",
+      false,
+      "../lib",
+    ],
+    [
+      "_vmservice",
+      "vmservice",
+      true,
+      "../../sdk/lib/vmservice",
+      "../lib",
+    ],
+  ]
+}
+
+template("concatenate_patch") {
+  assert(defined(invoker.libname), "Need a name in $target_name")
+  assert(defined(invoker.dir), "Need a dir in $target_name")
+  assert(defined(invoker.output), "Need an output in $target_name")
+
+  process_library_source(target_name) {
+    output = invoker.output
+    path = "../${invoker.dir}"
+    filename = invoker.libname
+    script = "../tools/concatenate_patches.py"
+    args = [
+      "--output",
+      rebase_path(output, root_build_dir),
+    ]
+    inputs = []
+  }
+}
+
+template("generate_patched_sdk") {
+  assert(defined(invoker.libraries), "Need libraries in $target_name")
+
+  concatenation_target_names = []
+  concatenation_files = []
+
+  # Concatenate vm library patches.
+  foreach(library, invoker.libraries) {
+    name = library[1]
+
+    target_output = "$target_gen_dir/patches/${name}_patch.dart"
+    concatenate_patch("concatenate_${name}_patch") {
+      libname = name
+      dir = library[0]
+      output = target_output
+    }
+    concatenation_target_names += [ ":concatenate_${name}_patch" ]
+    concatenation_files += [ target_output ]
+  }
+
+  # Build the patched sdk out of the concatenated patches and the special
+  # libraries.
+  action(target_name) {
+    deps = concatenation_target_names
+
+    patches_dir = "$target_gen_dir/patches"
+    patched_sdk_dir = "$target_gen_dir/patched_sdk"
+
+    script = "../../tools/patch_sdk.py"
+
+    # We list all files which make up the sdk (modulo patches) and get them back
+    # as a GN list object.
+    shared_sdk_sources = exec_script("../../tools/list_dart_files.py",
+                                     [ "../../sdk/lib" ],
+                                     "list lines")
+
+    # We list the `patch_sdk.dart` tool here because the [script] (which is
+    # implicitly an input) will call it.
+    inputs = [
+      "../../tools/patch_sdk.dart",
+    ]
+
+    # Files below are not patches, they will not be in [concatenation_files] but
+    # the `patch_sdk.dart` script will copy them into the patched sdk.
+    inputs += [
+      "../lib/typed_data.dart",
+      "../bin/builtin.dart",
+      "../bin/vmservice/vmservice_io.dart",
+      "../bin/vmservice/loader.dart",
+      "../bin/vmservice/server.dart",
+    ]
+
+    # Add all the normal sdk sources.
+    inputs += shared_sdk_sources
+
+    # Add all the concatenated patch files.
+    inputs += concatenation_files
+
+    outputs = [
+      # Instead of listing all outputs we list a single well-known one.
+      "${patched_sdk_dir}/lib/core/core.dart",
+    ]
+
+    args = [
+      "vm",
+      rebase_path("../../sdk"),
+      rebase_path(patches_dir, root_build_dir),
+      rebase_path(patched_sdk_dir, root_build_dir),
     ]
   }
 }
 
-
-generate_core_libraries("core_libraries") {
-  sources = [
-    ["async", "async", true, "../../sdk/lib/async", "../lib"],
-    ["core", "core", true, "../../sdk/lib/core", "../lib"],
-    ["collection", "collection", true, "../../sdk/lib/collection", "../lib"],
-    ["convert", "convert", true, "../../sdk/lib/convert", "../lib"],
-    ["developer", "developer", true, "../../sdk/lib/developer", "../lib"],
-    ["_internal", "internal", true, "../../sdk/lib/internal", "../lib"],
-    ["isolate", "isolate", true, "../../sdk/lib/isolate", "../lib"],
-    ["math", "math", true, "../../sdk/lib/math", "../lib"],
-    ["mirrors", "mirrors", true, "../../sdk/lib/mirrors", "../lib"],
-    ["profiler", "profiler", false, "../../sdk/lib/profiler"],
-    ["typed_data", "typed_data", false, "../lib"],
-    ["_vmservice", "vmservice", true, "../../sdk/lib/vmservice", "../lib"],
+generate_patched_sdk("patched_sdk") {
+  libraries = [
+    [
+      "lib",
+      "async",
+    ],
+    [
+      "lib",
+      "collection",
+    ],
+    [
+      "lib",
+      "convert",
+    ],
+    [
+      "lib",
+      "core",
+    ],
+    [
+      "lib",
+      "developer",
+    ],
+    [
+      "lib",
+      "internal",
+    ],
+    [
+      "lib",
+      "isolate",
+    ],
+    [
+      "lib",
+      "math",
+    ],
+    [
+      "lib",
+      "mirrors",
+    ],
+    [
+      "lib",
+      "profiler",
+    ],
+    [
+      "lib",
+      "vmservice",
+    ],
+    [
+      "bin",
+      "io",
+    ],
   ]
 }
diff --git a/runtime/vm/allocation.h b/runtime/vm/allocation.h
index af9a74a..448176d 100644
--- a/runtime/vm/allocation.h
+++ b/runtime/vm/allocation.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 VM_ALLOCATION_H_
-#define VM_ALLOCATION_H_
+#ifndef RUNTIME_VM_ALLOCATION_H_
+#define RUNTIME_VM_ALLOCATION_H_
 
 #include "platform/assert.h"
 #include "vm/base_isolate.h"
@@ -124,4 +124,4 @@
 
 }  // namespace dart
 
-#endif  // VM_ALLOCATION_H_
+#endif  // RUNTIME_VM_ALLOCATION_H_
diff --git a/runtime/vm/aot_optimizer.h b/runtime/vm/aot_optimizer.h
index 6612d99..2a63a16 100644
--- a/runtime/vm/aot_optimizer.h
+++ b/runtime/vm/aot_optimizer.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 VM_AOT_OPTIMIZER_H_
-#define VM_AOT_OPTIMIZER_H_
+#ifndef RUNTIME_VM_AOT_OPTIMIZER_H_
+#define RUNTIME_VM_AOT_OPTIMIZER_H_
 
 #include "vm/intermediate_language.h"
 #include "vm/flow_graph.h"
@@ -145,4 +145,4 @@
 
 }  // namespace dart
 
-#endif  // VM_AOT_OPTIMIZER_H_
+#endif  // RUNTIME_VM_AOT_OPTIMIZER_H_
diff --git a/runtime/vm/assembler.h b/runtime/vm/assembler.h
index 36279fb..f722d09 100644
--- a/runtime/vm/assembler.h
+++ b/runtime/vm/assembler.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 VM_ASSEMBLER_H_
-#define VM_ASSEMBLER_H_
+#ifndef RUNTIME_VM_ASSEMBLER_H_
+#define RUNTIME_VM_ASSEMBLER_H_
 
 #include "platform/assert.h"
 #include "vm/allocation.h"
@@ -348,4 +348,4 @@
 #error Unknown architecture.
 #endif
 
-#endif  // VM_ASSEMBLER_H_
+#endif  // RUNTIME_VM_ASSEMBLER_H_
diff --git a/runtime/vm/assembler_arm.h b/runtime/vm/assembler_arm.h
index 3afce46..4c17227 100644
--- a/runtime/vm/assembler_arm.h
+++ b/runtime/vm/assembler_arm.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 VM_ASSEMBLER_ARM_H_
-#define VM_ASSEMBLER_ARM_H_
+#ifndef RUNTIME_VM_ASSEMBLER_ARM_H_
+#define RUNTIME_VM_ASSEMBLER_ARM_H_
 
-#ifndef VM_ASSEMBLER_H_
+#ifndef RUNTIME_VM_ASSEMBLER_H_
 #error Do not include assembler_arm.h directly; use assembler.h instead.
 #endif
 
@@ -1178,4 +1178,4 @@
 
 }  // namespace dart
 
-#endif  // VM_ASSEMBLER_ARM_H_
+#endif  // RUNTIME_VM_ASSEMBLER_ARM_H_
diff --git a/runtime/vm/assembler_arm64.h b/runtime/vm/assembler_arm64.h
index 1f8edfa..77d7fce 100644
--- a/runtime/vm/assembler_arm64.h
+++ b/runtime/vm/assembler_arm64.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 VM_ASSEMBLER_ARM64_H_
-#define VM_ASSEMBLER_ARM64_H_
+#ifndef RUNTIME_VM_ASSEMBLER_ARM64_H_
+#define RUNTIME_VM_ASSEMBLER_ARM64_H_
 
-#ifndef VM_ASSEMBLER_H_
+#ifndef RUNTIME_VM_ASSEMBLER_H_
 #error Do not include assembler_arm64.h directly; use assembler.h instead.
 #endif
 
@@ -1959,4 +1959,4 @@
 
 }  // namespace dart
 
-#endif  // VM_ASSEMBLER_ARM64_H_
+#endif  // RUNTIME_VM_ASSEMBLER_ARM64_H_
diff --git a/runtime/vm/assembler_dbc.h b/runtime/vm/assembler_dbc.h
index 7e23863..d775e45 100644
--- a/runtime/vm/assembler_dbc.h
+++ b/runtime/vm/assembler_dbc.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 VM_ASSEMBLER_DBC_H_
-#define VM_ASSEMBLER_DBC_H_
+#ifndef RUNTIME_VM_ASSEMBLER_DBC_H_
+#define RUNTIME_VM_ASSEMBLER_DBC_H_
 
-#ifndef VM_ASSEMBLER_H_
+#ifndef RUNTIME_VM_ASSEMBLER_H_
 #error Do not include assembler_dbc.h directly; use assembler.h instead.
 #endif
 
@@ -196,4 +196,4 @@
 
 }  // namespace dart
 
-#endif  // VM_ASSEMBLER_DBC_H_
+#endif  // RUNTIME_VM_ASSEMBLER_DBC_H_
diff --git a/runtime/vm/assembler_ia32.h b/runtime/vm/assembler_ia32.h
index df3d6ff..75eb1dc 100644
--- a/runtime/vm/assembler_ia32.h
+++ b/runtime/vm/assembler_ia32.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 VM_ASSEMBLER_IA32_H_
-#define VM_ASSEMBLER_IA32_H_
+#ifndef RUNTIME_VM_ASSEMBLER_IA32_H_
+#define RUNTIME_VM_ASSEMBLER_IA32_H_
 
-#ifndef VM_ASSEMBLER_H_
+#ifndef RUNTIME_VM_ASSEMBLER_H_
 #error Do not include assembler_ia32.h directly; use assembler.h instead.
 #endif
 
@@ -1025,4 +1025,4 @@
 
 }  // namespace dart
 
-#endif  // VM_ASSEMBLER_IA32_H_
+#endif  // RUNTIME_VM_ASSEMBLER_IA32_H_
diff --git a/runtime/vm/assembler_mips.h b/runtime/vm/assembler_mips.h
index 095fa74..bc06a7a 100644
--- a/runtime/vm/assembler_mips.h
+++ b/runtime/vm/assembler_mips.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 VM_ASSEMBLER_MIPS_H_
-#define VM_ASSEMBLER_MIPS_H_
+#ifndef RUNTIME_VM_ASSEMBLER_MIPS_H_
+#define RUNTIME_VM_ASSEMBLER_MIPS_H_
 
-#ifndef VM_ASSEMBLER_H_
+#ifndef RUNTIME_VM_ASSEMBLER_H_
 #error Do not include assembler_mips.h directly; use assembler.h instead.
 #endif
 
@@ -1764,4 +1764,4 @@
 
 }  // namespace dart
 
-#endif  // VM_ASSEMBLER_MIPS_H_
+#endif  // RUNTIME_VM_ASSEMBLER_MIPS_H_
diff --git a/runtime/vm/assembler_x64.h b/runtime/vm/assembler_x64.h
index 651fcd5..82094d2 100644
--- a/runtime/vm/assembler_x64.h
+++ b/runtime/vm/assembler_x64.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 VM_ASSEMBLER_X64_H_
-#define VM_ASSEMBLER_X64_H_
+#ifndef RUNTIME_VM_ASSEMBLER_X64_H_
+#define RUNTIME_VM_ASSEMBLER_X64_H_
 
-#ifndef VM_ASSEMBLER_H_
+#ifndef RUNTIME_VM_ASSEMBLER_H_
 #error Do not include assembler_x64.h directly; use assembler.h instead.
 #endif
 
@@ -1175,4 +1175,4 @@
 
 }  // namespace dart
 
-#endif  // VM_ASSEMBLER_X64_H_
+#endif  // RUNTIME_VM_ASSEMBLER_X64_H_
diff --git a/runtime/vm/ast.h b/runtime/vm/ast.h
index cd25dc7..8fa533b 100644
--- a/runtime/vm/ast.h
+++ b/runtime/vm/ast.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 VM_AST_H_
-#define VM_AST_H_
+#ifndef RUNTIME_VM_AST_H_
+#define RUNTIME_VM_AST_H_
 
 #include "platform/assert.h"
 #include "vm/allocation.h"
@@ -2026,4 +2026,4 @@
 
 #undef DECLARE_COMMON_NODE_FUNCTIONS
 
-#endif  // VM_AST_H_
+#endif  // RUNTIME_VM_AST_H_
diff --git a/runtime/vm/ast_printer.h b/runtime/vm/ast_printer.h
index b5ee0bd..f89d9bc 100644
--- a/runtime/vm/ast_printer.h
+++ b/runtime/vm/ast_printer.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 VM_AST_PRINTER_H_
-#define VM_AST_PRINTER_H_
+#ifndef RUNTIME_VM_AST_PRINTER_H_
+#define RUNTIME_VM_AST_PRINTER_H_
 
 #include "vm/ast.h"
 #include "vm/growable_array.h"
@@ -52,4 +52,4 @@
 
 }  // namespace dart
 
-#endif  // VM_AST_PRINTER_H_
+#endif  // RUNTIME_VM_AST_PRINTER_H_
diff --git a/runtime/vm/ast_transformer.h b/runtime/vm/ast_transformer.h
index e189afd..917919f 100644
--- a/runtime/vm/ast_transformer.h
+++ b/runtime/vm/ast_transformer.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 VM_AST_TRANSFORMER_H_
-#define VM_AST_TRANSFORMER_H_
+#ifndef RUNTIME_VM_AST_TRANSFORMER_H_
+#define RUNTIME_VM_AST_TRANSFORMER_H_
 
 #include "platform/assert.h"
 #include "vm/ast.h"
@@ -77,4 +77,4 @@
 
 }  // namespace dart
 
-#endif  // VM_AST_TRANSFORMER_H_
+#endif  // RUNTIME_VM_AST_TRANSFORMER_H_
diff --git a/runtime/vm/atomic.h b/runtime/vm/atomic.h
index e16eee1..75d0b84 100644
--- a/runtime/vm/atomic.h
+++ b/runtime/vm/atomic.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 VM_ATOMIC_H_
-#define VM_ATOMIC_H_
+#ifndef RUNTIME_VM_ATOMIC_H_
+#define RUNTIME_VM_ATOMIC_H_
 
 #include "platform/globals.h"
 
@@ -86,4 +86,4 @@
 #error Unknown target os.
 #endif
 
-#endif  // VM_ATOMIC_H_
+#endif  // RUNTIME_VM_ATOMIC_H_
diff --git a/runtime/vm/atomic_android.h b/runtime/vm/atomic_android.h
index aa2b623..f0731ab 100644
--- a/runtime/vm/atomic_android.h
+++ b/runtime/vm/atomic_android.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 VM_ATOMIC_ANDROID_H_
-#define VM_ATOMIC_ANDROID_H_
+#ifndef RUNTIME_VM_ATOMIC_ANDROID_H_
+#define RUNTIME_VM_ATOMIC_ANDROID_H_
 
-#if !defined VM_ATOMIC_H_
+#if !defined RUNTIME_VM_ATOMIC_H_
 #error Do not include atomic_android.h directly. Use atomic.h instead.
 #endif
 
@@ -68,4 +68,4 @@
 
 }  // namespace dart
 
-#endif  // VM_ATOMIC_ANDROID_H_
+#endif  // RUNTIME_VM_ATOMIC_ANDROID_H_
diff --git a/runtime/vm/atomic_fuchsia.h b/runtime/vm/atomic_fuchsia.h
index c44c080..e85899f 100644
--- a/runtime/vm/atomic_fuchsia.h
+++ b/runtime/vm/atomic_fuchsia.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 VM_ATOMIC_FUCHSIA_H_
-#define VM_ATOMIC_FUCHSIA_H_
+#ifndef RUNTIME_VM_ATOMIC_FUCHSIA_H_
+#define RUNTIME_VM_ATOMIC_FUCHSIA_H_
 
-#if !defined VM_ATOMIC_H_
+#if !defined RUNTIME_VM_ATOMIC_H_
 #error Do not include atomic_fuchsia.h directly. Use atomic.h instead.
 #endif
 
@@ -67,4 +67,4 @@
 
 }  // namespace dart
 
-#endif  // VM_ATOMIC_FUCHSIA_H_
+#endif  // RUNTIME_VM_ATOMIC_FUCHSIA_H_
diff --git a/runtime/vm/atomic_linux.h b/runtime/vm/atomic_linux.h
index 350bced..c4ee910 100644
--- a/runtime/vm/atomic_linux.h
+++ b/runtime/vm/atomic_linux.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 VM_ATOMIC_LINUX_H_
-#define VM_ATOMIC_LINUX_H_
+#ifndef RUNTIME_VM_ATOMIC_LINUX_H_
+#define RUNTIME_VM_ATOMIC_LINUX_H_
 
-#if !defined VM_ATOMIC_H_
+#if !defined RUNTIME_VM_ATOMIC_H_
 #error Do not include atomic_linux.h directly. Use atomic.h instead.
 #endif
 
@@ -73,4 +73,4 @@
 
 }  // namespace dart
 
-#endif  // VM_ATOMIC_LINUX_H_
+#endif  // RUNTIME_VM_ATOMIC_LINUX_H_
diff --git a/runtime/vm/atomic_macos.h b/runtime/vm/atomic_macos.h
index cdd57d4..e1c701f 100644
--- a/runtime/vm/atomic_macos.h
+++ b/runtime/vm/atomic_macos.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 VM_ATOMIC_MACOS_H_
-#define VM_ATOMIC_MACOS_H_
+#ifndef RUNTIME_VM_ATOMIC_MACOS_H_
+#define RUNTIME_VM_ATOMIC_MACOS_H_
 
-#if !defined VM_ATOMIC_H_
+#if !defined RUNTIME_VM_ATOMIC_H_
 #error Do not include atomic_macos.h directly. Use atomic.h instead.
 #endif
 
@@ -68,4 +68,4 @@
 
 }  // namespace dart
 
-#endif  // VM_ATOMIC_MACOS_H_
+#endif  // RUNTIME_VM_ATOMIC_MACOS_H_
diff --git a/runtime/vm/atomic_simulator.h b/runtime/vm/atomic_simulator.h
index 78e7f88..83bd623 100644
--- a/runtime/vm/atomic_simulator.h
+++ b/runtime/vm/atomic_simulator.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 VM_ATOMIC_SIMULATOR_H_
-#define VM_ATOMIC_SIMULATOR_H_
+#ifndef RUNTIME_VM_ATOMIC_SIMULATOR_H_
+#define RUNTIME_VM_ATOMIC_SIMULATOR_H_
 
-#if !defined VM_ATOMIC_H_
+#if !defined RUNTIME_VM_ATOMIC_H_
 #error Do not include atomic_simulator.h directly. Use atomic.h instead.
 #endif
 
@@ -29,4 +29,4 @@
 
 }  // namespace dart
 
-#endif  // VM_ATOMIC_SIMULATOR_H_
+#endif  // RUNTIME_VM_ATOMIC_SIMULATOR_H_
diff --git a/runtime/vm/atomic_win.h b/runtime/vm/atomic_win.h
index 2f8ee20..7abf59e 100644
--- a/runtime/vm/atomic_win.h
+++ b/runtime/vm/atomic_win.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 VM_ATOMIC_WIN_H_
-#define VM_ATOMIC_WIN_H_
+#ifndef RUNTIME_VM_ATOMIC_WIN_H_
+#define RUNTIME_VM_ATOMIC_WIN_H_
 
-#if !defined VM_ATOMIC_H_
+#if !defined RUNTIME_VM_ATOMIC_H_
 #error Do not include atomic_win.h directly. Use atomic.h instead.
 #endif
 
@@ -137,4 +137,4 @@
 
 }  // namespace dart
 
-#endif  // VM_ATOMIC_WIN_H_
+#endif  // RUNTIME_VM_ATOMIC_WIN_H_
diff --git a/runtime/vm/base_isolate.h b/runtime/vm/base_isolate.h
index b2cc7fc..bd76b90 100644
--- a/runtime/vm/base_isolate.h
+++ b/runtime/vm/base_isolate.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 VM_BASE_ISOLATE_H_
-#define VM_BASE_ISOLATE_H_
+#ifndef RUNTIME_VM_BASE_ISOLATE_H_
+#define RUNTIME_VM_BASE_ISOLATE_H_
 
 #include "platform/assert.h"
 #include "vm/globals.h"
@@ -47,4 +47,4 @@
 
 }  // namespace dart
 
-#endif  // VM_BASE_ISOLATE_H_
+#endif  // RUNTIME_VM_BASE_ISOLATE_H_
diff --git a/runtime/vm/become.h b/runtime/vm/become.h
index 12ab764..0bee126 100644
--- a/runtime/vm/become.h
+++ b/runtime/vm/become.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 VM_BECOME_H_
-#define VM_BECOME_H_
+#ifndef RUNTIME_VM_BECOME_H_
+#define RUNTIME_VM_BECOME_H_
 
 #include "vm/allocation.h"
 #include "vm/raw_object.h"
@@ -92,4 +92,4 @@
 
 }  // namespace dart
 
-#endif  // VM_BECOME_H_
+#endif  // RUNTIME_VM_BECOME_H_
diff --git a/runtime/vm/benchmark_test.h b/runtime/vm/benchmark_test.h
index 40f36a0..db0c1f6 100644
--- a/runtime/vm/benchmark_test.h
+++ b/runtime/vm/benchmark_test.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 VM_BENCHMARK_TEST_H_
-#define VM_BENCHMARK_TEST_H_
+#ifndef RUNTIME_VM_BENCHMARK_TEST_H_
+#define RUNTIME_VM_BENCHMARK_TEST_H_
 
 #include "include/dart_api.h"
 
@@ -128,4 +128,4 @@
 
 }  // namespace dart
 
-#endif  // VM_BENCHMARK_TEST_H_
+#endif  // RUNTIME_VM_BENCHMARK_TEST_H_
diff --git a/runtime/vm/bit_set.h b/runtime/vm/bit_set.h
index a60f668..2735a72 100644
--- a/runtime/vm/bit_set.h
+++ b/runtime/vm/bit_set.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 VM_BIT_SET_H_
-#define VM_BIT_SET_H_
+#ifndef RUNTIME_VM_BIT_SET_H_
+#define RUNTIME_VM_BIT_SET_H_
 
 #include "platform/utils.h"
 #include "vm/globals.h"
@@ -100,4 +100,4 @@
 
 }  // namespace dart
 
-#endif  // VM_BIT_SET_H_
+#endif  // RUNTIME_VM_BIT_SET_H_
diff --git a/runtime/vm/bit_vector.h b/runtime/vm/bit_vector.h
index 9afa05f..e1c133a 100644
--- a/runtime/vm/bit_vector.h
+++ b/runtime/vm/bit_vector.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 VM_BIT_VECTOR_H_
-#define VM_BIT_VECTOR_H_
+#ifndef RUNTIME_VM_BIT_VECTOR_H_
+#define RUNTIME_VM_BIT_VECTOR_H_
 
 #include "vm/allocation.h"
 #include "vm/isolate.h"
@@ -118,4 +118,4 @@
 
 }  // namespace dart
 
-#endif  // VM_BIT_VECTOR_H_
+#endif  // RUNTIME_VM_BIT_VECTOR_H_
diff --git a/runtime/vm/bitfield.h b/runtime/vm/bitfield.h
index 42a121a..eba83fee 100644
--- a/runtime/vm/bitfield.h
+++ b/runtime/vm/bitfield.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 VM_BITFIELD_H_
-#define VM_BITFIELD_H_
+#ifndef RUNTIME_VM_BITFIELD_H_
+#define RUNTIME_VM_BITFIELD_H_
 
 namespace dart {
 
@@ -67,4 +67,4 @@
 
 }  // namespace dart
 
-#endif  // VM_BITFIELD_H_
+#endif  // RUNTIME_VM_BITFIELD_H_
diff --git a/runtime/vm/bitmap.h b/runtime/vm/bitmap.h
index 507167e..20c1983 100644
--- a/runtime/vm/bitmap.h
+++ b/runtime/vm/bitmap.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 VM_BITMAP_H_
-#define VM_BITMAP_H_
+#ifndef RUNTIME_VM_BITMAP_H_
+#define RUNTIME_VM_BITMAP_H_
 
 #include "vm/allocation.h"
 #include "vm/isolate.h"
@@ -77,4 +77,4 @@
 
 }  // namespace dart
 
-#endif  // VM_BITMAP_H_
+#endif  // RUNTIME_VM_BITMAP_H_
diff --git a/runtime/vm/block_scheduler.h b/runtime/vm/block_scheduler.h
index 911bb14..94982d3 100644
--- a/runtime/vm/block_scheduler.h
+++ b/runtime/vm/block_scheduler.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 VM_BLOCK_SCHEDULER_H_
-#define VM_BLOCK_SCHEDULER_H_
+#ifndef RUNTIME_VM_BLOCK_SCHEDULER_H_
+#define RUNTIME_VM_BLOCK_SCHEDULER_H_
 
 #include "vm/allocation.h"
 
@@ -27,4 +27,4 @@
 
 }  // namespace dart
 
-#endif  // VM_BLOCK_SCHEDULER_H_
+#endif  // RUNTIME_VM_BLOCK_SCHEDULER_H_
diff --git a/runtime/vm/boolfield.h b/runtime/vm/boolfield.h
index 64117f2..6cd45ba 100644
--- a/runtime/vm/boolfield.h
+++ b/runtime/vm/boolfield.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 VM_BOOLFIELD_H_
-#define VM_BOOLFIELD_H_
+#ifndef RUNTIME_VM_BOOLFIELD_H_
+#define RUNTIME_VM_BOOLFIELD_H_
 
 #include "vm/globals.h"
 
@@ -38,4 +38,4 @@
 
 }  // namespace dart
 
-#endif  // VM_BOOLFIELD_H_
+#endif  // RUNTIME_VM_BOOLFIELD_H_
diff --git a/runtime/vm/bootstrap.h b/runtime/vm/bootstrap.h
index eb238ed..7c5ab0e 100644
--- a/runtime/vm/bootstrap.h
+++ b/runtime/vm/bootstrap.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 VM_BOOTSTRAP_H_
-#define VM_BOOTSTRAP_H_
+#ifndef RUNTIME_VM_BOOTSTRAP_H_
+#define RUNTIME_VM_BOOTSTRAP_H_
 
 #include "include/dart_api.h"
 #include "vm/allocation.h"
@@ -52,4 +52,4 @@
 
 }  // namespace dart
 
-#endif  // VM_BOOTSTRAP_H_
+#endif  // RUNTIME_VM_BOOTSTRAP_H_
diff --git a/runtime/vm/bootstrap_natives.h b/runtime/vm/bootstrap_natives.h
index d7cb2b2..4677ca1 100644
--- a/runtime/vm/bootstrap_natives.h
+++ b/runtime/vm/bootstrap_natives.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 VM_BOOTSTRAP_NATIVES_H_
-#define VM_BOOTSTRAP_NATIVES_H_
+#ifndef RUNTIME_VM_BOOTSTRAP_NATIVES_H_
+#define RUNTIME_VM_BOOTSTRAP_NATIVES_H_
 
 #include "vm/native_entry.h"
 
@@ -426,4 +426,4 @@
 
 }  // namespace dart
 
-#endif  // VM_BOOTSTRAP_NATIVES_H_
+#endif  // RUNTIME_VM_BOOTSTRAP_NATIVES_H_
diff --git a/runtime/vm/branch_optimizer.h b/runtime/vm/branch_optimizer.h
index 2e2b135..caef6a7 100644
--- a/runtime/vm/branch_optimizer.h
+++ b/runtime/vm/branch_optimizer.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 VM_BRANCH_OPTIMIZER_H_
-#define VM_BRANCH_OPTIMIZER_H_
+#ifndef RUNTIME_VM_BRANCH_OPTIMIZER_H_
+#define RUNTIME_VM_BRANCH_OPTIMIZER_H_
 
 #include "vm/allocation.h"
 
@@ -53,4 +53,4 @@
 
 }  // namespace dart
 
-#endif  // VM_BRANCH_OPTIMIZER_H_
+#endif  // RUNTIME_VM_BRANCH_OPTIMIZER_H_
diff --git a/runtime/vm/cha.h b/runtime/vm/cha.h
index 7aa7774..5bd7796 100644
--- a/runtime/vm/cha.h
+++ b/runtime/vm/cha.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 VM_CHA_H_
-#define VM_CHA_H_
+#ifndef RUNTIME_VM_CHA_H_
+#define RUNTIME_VM_CHA_H_
 
 #include "vm/allocation.h"
 #include "vm/growable_array.h"
@@ -85,4 +85,4 @@
 
 }  // namespace dart
 
-#endif  // VM_CHA_H_
+#endif  // RUNTIME_VM_CHA_H_
diff --git a/runtime/vm/class_finalizer.h b/runtime/vm/class_finalizer.h
index 81850f6..16a19f8 100644
--- a/runtime/vm/class_finalizer.h
+++ b/runtime/vm/class_finalizer.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 VM_CLASS_FINALIZER_H_
-#define VM_CLASS_FINALIZER_H_
+#ifndef RUNTIME_VM_CLASS_FINALIZER_H_
+#define RUNTIME_VM_CLASS_FINALIZER_H_
 
 #include "vm/allocation.h"
 #include "vm/growable_array.h"
@@ -180,4 +180,4 @@
 
 }  // namespace dart
 
-#endif  // VM_CLASS_FINALIZER_H_
+#endif  // RUNTIME_VM_CLASS_FINALIZER_H_
diff --git a/runtime/vm/class_table.h b/runtime/vm/class_table.h
index 1ab7da1..1ffee71 100644
--- a/runtime/vm/class_table.h
+++ b/runtime/vm/class_table.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 VM_CLASS_TABLE_H_
-#define VM_CLASS_TABLE_H_
+#ifndef RUNTIME_VM_CLASS_TABLE_H_
+#define RUNTIME_VM_CLASS_TABLE_H_
 
 #include "platform/assert.h"
 #include "vm/bitfield.h"
@@ -280,4 +280,4 @@
 
 }  // namespace dart
 
-#endif  // VM_CLASS_TABLE_H_
+#endif  // RUNTIME_VM_CLASS_TABLE_H_
diff --git a/runtime/vm/clustered_snapshot.h b/runtime/vm/clustered_snapshot.h
index aae4e82..8aba9e1 100644
--- a/runtime/vm/clustered_snapshot.h
+++ b/runtime/vm/clustered_snapshot.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 VM_CLUSTERED_SNAPSHOT_H_
-#define VM_CLUSTERED_SNAPSHOT_H_
+#ifndef RUNTIME_VM_CLUSTERED_SNAPSHOT_H_
+#define RUNTIME_VM_CLUSTERED_SNAPSHOT_H_
 
 #include "platform/assert.h"
 #include "vm/allocation.h"
@@ -517,4 +517,4 @@
 
 }  // namespace dart
 
-#endif  // VM_CLUSTERED_SNAPSHOT_H_
+#endif  // RUNTIME_VM_CLUSTERED_SNAPSHOT_H_
diff --git a/runtime/vm/code_descriptors.h b/runtime/vm/code_descriptors.h
index c5eeda7..ef56938 100644
--- a/runtime/vm/code_descriptors.h
+++ b/runtime/vm/code_descriptors.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 VM_CODE_DESCRIPTORS_H_
-#define VM_CODE_DESCRIPTORS_H_
+#ifndef RUNTIME_VM_CODE_DESCRIPTORS_H_
+#define RUNTIME_VM_CODE_DESCRIPTORS_H_
 
 #include "vm/ast.h"
 #include "vm/code_generator.h"
@@ -165,4 +165,4 @@
 
 }  // namespace dart
 
-#endif  // VM_CODE_DESCRIPTORS_H_
+#endif  // RUNTIME_VM_CODE_DESCRIPTORS_H_
diff --git a/runtime/vm/code_generator.cc b/runtime/vm/code_generator.cc
index 85a5bce..0c3b3a1 100644
--- a/runtime/vm/code_generator.cc
+++ b/runtime/vm/code_generator.cc
@@ -826,7 +826,7 @@
                          ? store->simple_instance_of_true_function()
                          : store->simple_instance_of_false_function());
   ASSERT(!target.IsNull());
-  return target.raw();;
+  return target.raw();
 }
 
 
diff --git a/runtime/vm/code_generator.h b/runtime/vm/code_generator.h
index e0c49b7..d188504 100644
--- a/runtime/vm/code_generator.h
+++ b/runtime/vm/code_generator.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 VM_CODE_GENERATOR_H_
-#define VM_CODE_GENERATOR_H_
+#ifndef RUNTIME_VM_CODE_GENERATOR_H_
+#define RUNTIME_VM_CODE_GENERATOR_H_
 
 #include "vm/globals.h"
 #include "vm/runtime_entry.h"
@@ -25,4 +25,4 @@
 
 }  // namespace dart
 
-#endif  // VM_CODE_GENERATOR_H_
+#endif  // RUNTIME_VM_CODE_GENERATOR_H_
diff --git a/runtime/vm/code_observers.h b/runtime/vm/code_observers.h
index 1ce8135..66794d9 100644
--- a/runtime/vm/code_observers.h
+++ b/runtime/vm/code_observers.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 VM_CODE_OBSERVERS_H_
-#define VM_CODE_OBSERVERS_H_
+#ifndef RUNTIME_VM_CODE_OBSERVERS_H_
+#define RUNTIME_VM_CODE_OBSERVERS_H_
 
 #include "vm/globals.h"
 #include "vm/allocation.h"
@@ -71,4 +71,4 @@
 
 }  // namespace dart
 
-#endif  // VM_CODE_OBSERVERS_H_
+#endif  // RUNTIME_VM_CODE_OBSERVERS_H_
diff --git a/runtime/vm/code_patcher.h b/runtime/vm/code_patcher.h
index c342f5d..ec90721 100644
--- a/runtime/vm/code_patcher.h
+++ b/runtime/vm/code_patcher.h
@@ -3,8 +3,8 @@
 // BSD-style license that can be found in the LICENSE file.
 // Class for patching compiled code.
 
-#ifndef VM_CODE_PATCHER_H_
-#define VM_CODE_PATCHER_H_
+#ifndef RUNTIME_VM_CODE_PATCHER_H_
+#define RUNTIME_VM_CODE_PATCHER_H_
 
 #include "vm/allocation.h"
 #include "vm/native_entry.h"
@@ -95,4 +95,4 @@
 
 }  // namespace dart
 
-#endif  // VM_CODE_PATCHER_H_
+#endif  // RUNTIME_VM_CODE_PATCHER_H_
diff --git a/runtime/vm/compiler.h b/runtime/vm/compiler.h
index 4c059c9..5182364 100644
--- a/runtime/vm/compiler.h
+++ b/runtime/vm/compiler.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 VM_COMPILER_H_
-#define VM_COMPILER_H_
+#ifndef RUNTIME_VM_COMPILER_H_
+#define RUNTIME_VM_COMPILER_H_
 
 #include "vm/allocation.h"
 #include "vm/growable_array.h"
@@ -202,4 +202,4 @@
 
 }  // namespace dart
 
-#endif  // VM_COMPILER_H_
+#endif  // RUNTIME_VM_COMPILER_H_
diff --git a/runtime/vm/compiler_stats.h b/runtime/vm/compiler_stats.h
index 98143a3..7c1f39f 100644
--- a/runtime/vm/compiler_stats.h
+++ b/runtime/vm/compiler_stats.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 VM_COMPILER_STATS_H_
-#define VM_COMPILER_STATS_H_
+#ifndef RUNTIME_VM_COMPILER_STATS_H_
+#define RUNTIME_VM_COMPILER_STATS_H_
 
 #include "vm/allocation.h"
 #include "vm/atomic.h"
@@ -142,4 +142,4 @@
 
 }  // namespace dart
 
-#endif  // VM_COMPILER_STATS_H_
+#endif  // RUNTIME_VM_COMPILER_STATS_H_
diff --git a/runtime/vm/constant_propagator.h b/runtime/vm/constant_propagator.h
index 024cbef..191c6b8 100644
--- a/runtime/vm/constant_propagator.h
+++ b/runtime/vm/constant_propagator.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 VM_CONSTANT_PROPAGATOR_H_
-#define VM_CONSTANT_PROPAGATOR_H_
+#ifndef RUNTIME_VM_CONSTANT_PROPAGATOR_H_
+#define RUNTIME_VM_CONSTANT_PROPAGATOR_H_
 
 #include "vm/intermediate_language.h"
 #include "vm/flow_graph.h"
@@ -90,4 +90,4 @@
 
 }  // namespace dart
 
-#endif  // VM_CONSTANT_PROPAGATOR_H_
+#endif  // RUNTIME_VM_CONSTANT_PROPAGATOR_H_
diff --git a/runtime/vm/constants_arm.h b/runtime/vm/constants_arm.h
index f544a77..764e541 100644
--- a/runtime/vm/constants_arm.h
+++ b/runtime/vm/constants_arm.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 VM_CONSTANTS_ARM_H_
-#define VM_CONSTANTS_ARM_H_
+#ifndef RUNTIME_VM_CONSTANTS_ARM_H_
+#define RUNTIME_VM_CONSTANTS_ARM_H_
 
 #include "platform/globals.h"
 #include "platform/assert.h"
@@ -774,4 +774,4 @@
 
 }  // namespace dart
 
-#endif  // VM_CONSTANTS_ARM_H_
+#endif  // RUNTIME_VM_CONSTANTS_ARM_H_
diff --git a/runtime/vm/constants_arm64.h b/runtime/vm/constants_arm64.h
index e855b0f..c2d6981 100644
--- a/runtime/vm/constants_arm64.h
+++ b/runtime/vm/constants_arm64.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 VM_CONSTANTS_ARM64_H_
-#define VM_CONSTANTS_ARM64_H_
+#ifndef RUNTIME_VM_CONSTANTS_ARM64_H_
+#define RUNTIME_VM_CONSTANTS_ARM64_H_
 
 #include "platform/assert.h"
 
@@ -1104,4 +1104,4 @@
 
 }  // namespace dart
 
-#endif  // VM_CONSTANTS_ARM64_H_
+#endif  // RUNTIME_VM_CONSTANTS_ARM64_H_
diff --git a/runtime/vm/constants_dbc.h b/runtime/vm/constants_dbc.h
index 44e5026..e93bc0b 100644
--- a/runtime/vm/constants_dbc.h
+++ b/runtime/vm/constants_dbc.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 VM_CONSTANTS_DBC_H_
-#define VM_CONSTANTS_DBC_H_
+#ifndef RUNTIME_VM_CONSTANTS_DBC_H_
+#define RUNTIME_VM_CONSTANTS_DBC_H_
 
 #include "platform/globals.h"
 #include "platform/assert.h"
@@ -966,4 +966,4 @@
 
 }  // namespace dart
 
-#endif  // VM_CONSTANTS_DBC_H_
+#endif  // RUNTIME_VM_CONSTANTS_DBC_H_
diff --git a/runtime/vm/constants_ia32.h b/runtime/vm/constants_ia32.h
index adf988a..5d61a9a 100644
--- a/runtime/vm/constants_ia32.h
+++ b/runtime/vm/constants_ia32.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 VM_CONSTANTS_IA32_H_
-#define VM_CONSTANTS_IA32_H_
+#ifndef RUNTIME_VM_CONSTANTS_IA32_H_
+#define RUNTIME_VM_CONSTANTS_IA32_H_
 
 #include "platform/assert.h"
 
@@ -160,4 +160,4 @@
 
 }  // namespace dart
 
-#endif  // VM_CONSTANTS_IA32_H_
+#endif  // RUNTIME_VM_CONSTANTS_IA32_H_
diff --git a/runtime/vm/constants_mips.h b/runtime/vm/constants_mips.h
index 9a79f53..7f53e40 100644
--- a/runtime/vm/constants_mips.h
+++ b/runtime/vm/constants_mips.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 VM_CONSTANTS_MIPS_H_
-#define VM_CONSTANTS_MIPS_H_
+#ifndef RUNTIME_VM_CONSTANTS_MIPS_H_
+#define RUNTIME_VM_CONSTANTS_MIPS_H_
 
 #include "platform/assert.h"
 
@@ -658,4 +658,4 @@
 
 }  // namespace dart
 
-#endif  // VM_CONSTANTS_MIPS_H_
+#endif  // RUNTIME_VM_CONSTANTS_MIPS_H_
diff --git a/runtime/vm/constants_x64.h b/runtime/vm/constants_x64.h
index 72c4710..a40dd03 100644
--- a/runtime/vm/constants_x64.h
+++ b/runtime/vm/constants_x64.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 VM_CONSTANTS_X64_H_
-#define VM_CONSTANTS_X64_H_
+#ifndef RUNTIME_VM_CONSTANTS_X64_H_
+#define RUNTIME_VM_CONSTANTS_X64_H_
 
 namespace dart {
 
@@ -242,4 +242,4 @@
 
 }  // namespace dart
 
-#endif  // VM_CONSTANTS_X64_H_
+#endif  // RUNTIME_VM_CONSTANTS_X64_H_
diff --git a/runtime/vm/cpu.h b/runtime/vm/cpu.h
index 3b93489..cdd0c25 100644
--- a/runtime/vm/cpu.h
+++ b/runtime/vm/cpu.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 VM_CPU_H_
-#define VM_CPU_H_
+#ifndef RUNTIME_VM_CPU_H_
+#define RUNTIME_VM_CPU_H_
 
 #include "vm/globals.h"
 #include "vm/allocation.h"
@@ -39,4 +39,4 @@
 #error Unknown architecture.
 #endif
 
-#endif  // VM_CPU_H_
+#endif  // RUNTIME_VM_CPU_H_
diff --git a/runtime/vm/cpu_arm.cc b/runtime/vm/cpu_arm.cc
index edaea94..be88185 100644
--- a/runtime/vm/cpu_arm.cc
+++ b/runtime/vm/cpu_arm.cc
@@ -5,8 +5,10 @@
 #include "vm/globals.h"
 #if defined(TARGET_ARCH_ARM)
 
-#include "vm/assembler.h"
 #include "vm/cpu.h"
+#include "vm/cpu_arm.h"
+
+#include "vm/assembler.h"
 #include "vm/cpuinfo.h"
 #include "vm/heap.h"
 #include "vm/isolate.h"
diff --git a/runtime/vm/cpu_arm.h b/runtime/vm/cpu_arm.h
index e1dd907..b0e43f7 100644
--- a/runtime/vm/cpu_arm.h
+++ b/runtime/vm/cpu_arm.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 VM_CPU_ARM_H_
-#define VM_CPU_ARM_H_
+#ifndef RUNTIME_VM_CPU_ARM_H_
+#define RUNTIME_VM_CPU_ARM_H_
 
 #include "vm/allocation.h"
 #include "vm/simulator.h"
@@ -129,4 +129,4 @@
 
 }  // namespace dart
 
-#endif  // VM_CPU_ARM_H_
+#endif  // RUNTIME_VM_CPU_ARM_H_
diff --git a/runtime/vm/cpu_arm64.h b/runtime/vm/cpu_arm64.h
index 884981b..89799ea 100644
--- a/runtime/vm/cpu_arm64.h
+++ b/runtime/vm/cpu_arm64.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 VM_CPU_ARM64_H_
-#define VM_CPU_ARM64_H_
+#ifndef RUNTIME_VM_CPU_ARM64_H_
+#define RUNTIME_VM_CPU_ARM64_H_
 
 #include "vm/allocation.h"
 #include "vm/simulator.h"
@@ -52,4 +52,4 @@
 
 }  // namespace dart
 
-#endif  // VM_CPU_ARM64_H_
+#endif  // RUNTIME_VM_CPU_ARM64_H_
diff --git a/runtime/vm/cpu_dbc.h b/runtime/vm/cpu_dbc.h
index 486acdb..e42cc1c 100644
--- a/runtime/vm/cpu_dbc.h
+++ b/runtime/vm/cpu_dbc.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 VM_CPU_DBC_H_
-#define VM_CPU_DBC_H_
+#ifndef RUNTIME_VM_CPU_DBC_H_
+#define RUNTIME_VM_CPU_DBC_H_
 
 #include "vm/allocation.h"
 #include "vm/simulator.h"
@@ -47,4 +47,4 @@
 
 }  // namespace dart
 
-#endif  // VM_CPU_DBC_H_
+#endif  // RUNTIME_VM_CPU_DBC_H_
diff --git a/runtime/vm/cpu_ia32.cc b/runtime/vm/cpu_ia32.cc
index 5445b48..441a8ad 100644
--- a/runtime/vm/cpu_ia32.cc
+++ b/runtime/vm/cpu_ia32.cc
@@ -6,6 +6,7 @@
 #if defined(TARGET_ARCH_IA32)
 
 #include "vm/cpu.h"
+#include "vm/cpu_ia32.h"
 
 #include "vm/assembler.h"
 #include "vm/constants_ia32.h"
diff --git a/runtime/vm/cpu_ia32.h b/runtime/vm/cpu_ia32.h
index 66f4724..3c3d836 100644
--- a/runtime/vm/cpu_ia32.h
+++ b/runtime/vm/cpu_ia32.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 VM_CPU_IA32_H_
-#define VM_CPU_IA32_H_
+#ifndef RUNTIME_VM_CPU_IA32_H_
+#define RUNTIME_VM_CPU_IA32_H_
 
 #include "vm/allocation.h"
 #include "vm/flags.h"
@@ -64,4 +64,4 @@
 
 }  // namespace dart
 
-#endif  // VM_CPU_IA32_H_
+#endif  // RUNTIME_VM_CPU_IA32_H_
diff --git a/runtime/vm/cpu_mips.cc b/runtime/vm/cpu_mips.cc
index 5b97d32..f220706 100644
--- a/runtime/vm/cpu_mips.cc
+++ b/runtime/vm/cpu_mips.cc
@@ -3,10 +3,11 @@
 // BSD-style license that can be found in the LICENSE file.
 
 #include "vm/globals.h"
-
 #if defined(TARGET_ARCH_MIPS)
 
 #include "vm/cpu.h"
+#include "vm/cpu_mips.h"
+
 #include "vm/cpuinfo.h"
 #include "vm/simulator.h"
 
diff --git a/runtime/vm/cpu_mips.h b/runtime/vm/cpu_mips.h
index d511522..b9dde4d 100644
--- a/runtime/vm/cpu_mips.h
+++ b/runtime/vm/cpu_mips.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 VM_CPU_MIPS_H_
-#define VM_CPU_MIPS_H_
+#ifndef RUNTIME_VM_CPU_MIPS_H_
+#define RUNTIME_VM_CPU_MIPS_H_
 
 #include "vm/allocation.h"
 
@@ -65,4 +65,4 @@
 
 }  // namespace dart
 
-#endif  // VM_CPU_MIPS_H_
+#endif  // RUNTIME_VM_CPU_MIPS_H_
diff --git a/runtime/vm/cpu_x64.cc b/runtime/vm/cpu_x64.cc
index 073ce84..3ad20d7 100644
--- a/runtime/vm/cpu_x64.cc
+++ b/runtime/vm/cpu_x64.cc
@@ -3,10 +3,10 @@
 // BSD-style license that can be found in the LICENSE file.
 
 #include "vm/globals.h"
-
 #if defined(TARGET_ARCH_X64)
 
 #include "vm/cpu.h"
+#include "vm/cpu_x64.h"
 
 #include "vm/assembler.h"
 #include "vm/constants_x64.h"
diff --git a/runtime/vm/cpu_x64.h b/runtime/vm/cpu_x64.h
index 579650a..c56ee64 100644
--- a/runtime/vm/cpu_x64.h
+++ b/runtime/vm/cpu_x64.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 VM_CPU_X64_H_
-#define VM_CPU_X64_H_
+#ifndef RUNTIME_VM_CPU_X64_H_
+#define RUNTIME_VM_CPU_X64_H_
 
 #include "vm/allocation.h"
 #include "vm/flags.h"
@@ -64,4 +64,4 @@
 
 }  // namespace dart
 
-#endif  // VM_CPU_X64_H_
+#endif  // RUNTIME_VM_CPU_X64_H_
diff --git a/runtime/vm/cpuid.h b/runtime/vm/cpuid.h
index b33812e..63b317b 100644
--- a/runtime/vm/cpuid.h
+++ b/runtime/vm/cpuid.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 VM_CPUID_H_
-#define VM_CPUID_H_
+#ifndef RUNTIME_VM_CPUID_H_
+#define RUNTIME_VM_CPUID_H_
 
 #include "vm/globals.h"
 #if !defined(TARGET_OS_MACOS)
@@ -45,4 +45,4 @@
 }  // namespace dart
 
 #endif  // !defined(TARGET_OS_MACOS)
-#endif  // VM_CPUID_H_
+#endif  // RUNTIME_VM_CPUID_H_
diff --git a/runtime/vm/cpuinfo.h b/runtime/vm/cpuinfo.h
index 95b6ec3..6e8da6d 100644
--- a/runtime/vm/cpuinfo.h
+++ b/runtime/vm/cpuinfo.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 VM_CPUINFO_H_
-#define VM_CPUINFO_H_
+#ifndef RUNTIME_VM_CPUINFO_H_
+#define RUNTIME_VM_CPUINFO_H_
 
 #include "platform/assert.h"
 #include "vm/allocation.h"
@@ -72,4 +72,4 @@
 
 }  // namespace dart
 
-#endif  // VM_CPUINFO_H_
+#endif  // RUNTIME_VM_CPUINFO_H_
diff --git a/runtime/vm/dart.h b/runtime/vm/dart.h
index 10ffea3..f4e4386 100644
--- a/runtime/vm/dart.h
+++ b/runtime/vm/dart.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 VM_DART_H_
-#define VM_DART_H_
+#ifndef RUNTIME_VM_DART_H_
+#define RUNTIME_VM_DART_H_
 
 #include "include/dart_api.h"
 #include "vm/allocation.h"
@@ -137,4 +137,4 @@
 
 }  // namespace dart
 
-#endif  // VM_DART_H_
+#endif  // RUNTIME_VM_DART_H_
diff --git a/runtime/vm/dart_api_impl.h b/runtime/vm/dart_api_impl.h
index f536e0b..0629b2d 100644
--- a/runtime/vm/dart_api_impl.h
+++ b/runtime/vm/dart_api_impl.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 VM_DART_API_IMPL_H_
-#define VM_DART_API_IMPL_H_
+#ifndef RUNTIME_VM_DART_API_IMPL_H_
+#define RUNTIME_VM_DART_API_IMPL_H_
 
 #include "vm/allocation.h"
 #include "vm/native_arguments.h"
@@ -303,4 +303,4 @@
 
 }  // namespace dart.
 
-#endif  // VM_DART_API_IMPL_H_
+#endif  // RUNTIME_VM_DART_API_IMPL_H_
diff --git a/runtime/vm/dart_api_message.h b/runtime/vm/dart_api_message.h
index bb1efa2..7baab59 100644
--- a/runtime/vm/dart_api_message.h
+++ b/runtime/vm/dart_api_message.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 VM_DART_API_MESSAGE_H_
-#define VM_DART_API_MESSAGE_H_
+#ifndef RUNTIME_VM_DART_API_MESSAGE_H_
+#define RUNTIME_VM_DART_API_MESSAGE_H_
 
 #include "include/dart_native_api.h"
 #include "platform/utils.h"
@@ -250,4 +250,4 @@
 
 }  // namespace dart
 
-#endif  // VM_DART_API_MESSAGE_H_
+#endif  // RUNTIME_VM_DART_API_MESSAGE_H_
diff --git a/runtime/vm/dart_api_state.h b/runtime/vm/dart_api_state.h
index f687fb2..7b38cb5 100644
--- a/runtime/vm/dart_api_state.h
+++ b/runtime/vm/dart_api_state.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 VM_DART_API_STATE_H_
-#define VM_DART_API_STATE_H_
+#ifndef RUNTIME_VM_DART_API_STATE_H_
+#define RUNTIME_VM_DART_API_STATE_H_
 
 #include "include/dart_api.h"
 
@@ -826,4 +826,4 @@
 
 }  // namespace dart
 
-#endif  // VM_DART_API_STATE_H_
+#endif  // RUNTIME_VM_DART_API_STATE_H_
diff --git a/runtime/vm/dart_entry.h b/runtime/vm/dart_entry.h
index 13294a3..e1d4f1a 100644
--- a/runtime/vm/dart_entry.h
+++ b/runtime/vm/dart_entry.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 VM_DART_ENTRY_H_
-#define VM_DART_ENTRY_H_
+#ifndef RUNTIME_VM_DART_ENTRY_H_
+#define RUNTIME_VM_DART_ENTRY_H_
 
 #include "vm/allocation.h"
 #include "vm/growable_array.h"
@@ -195,4 +195,4 @@
 
 }  // namespace dart
 
-#endif  // VM_DART_ENTRY_H_
+#endif  // RUNTIME_VM_DART_ENTRY_H_
diff --git a/runtime/vm/datastream.h b/runtime/vm/datastream.h
index 58452a0..ca23535 100644
--- a/runtime/vm/datastream.h
+++ b/runtime/vm/datastream.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 VM_DATASTREAM_H_
-#define VM_DATASTREAM_H_
+#ifndef RUNTIME_VM_DATASTREAM_H_
+#define RUNTIME_VM_DATASTREAM_H_
 
 #include "platform/assert.h"
 #include "platform/utils.h"
@@ -478,4 +478,4 @@
 
 }  // namespace dart
 
-#endif  // VM_DATASTREAM_H_
+#endif  // RUNTIME_VM_DATASTREAM_H_
diff --git a/runtime/vm/debugger.h b/runtime/vm/debugger.h
index 4338275..a903043 100644
--- a/runtime/vm/debugger.h
+++ b/runtime/vm/debugger.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 VM_DEBUGGER_H_
-#define VM_DEBUGGER_H_
+#ifndef RUNTIME_VM_DEBUGGER_H_
+#define RUNTIME_VM_DEBUGGER_H_
 
 #include "include/dart_tools_api.h"
 
@@ -655,4 +655,4 @@
 
 }  // namespace dart
 
-#endif  // VM_DEBUGGER_H_
+#endif  // RUNTIME_VM_DEBUGGER_H_
diff --git a/runtime/vm/deferred_objects.h b/runtime/vm/deferred_objects.h
index de2262c..1c9d436 100644
--- a/runtime/vm/deferred_objects.h
+++ b/runtime/vm/deferred_objects.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 VM_DEFERRED_OBJECTS_H_
-#define VM_DEFERRED_OBJECTS_H_
+#ifndef RUNTIME_VM_DEFERRED_OBJECTS_H_
+#define RUNTIME_VM_DEFERRED_OBJECTS_H_
 
 #include "platform/globals.h"
 
@@ -271,4 +271,4 @@
 
 }  // namespace dart
 
-#endif  // VM_DEFERRED_OBJECTS_H_
+#endif  // RUNTIME_VM_DEFERRED_OBJECTS_H_
diff --git a/runtime/vm/deopt_instructions.h b/runtime/vm/deopt_instructions.h
index 09e01b4..ee1a052 100644
--- a/runtime/vm/deopt_instructions.h
+++ b/runtime/vm/deopt_instructions.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 VM_DEOPT_INSTRUCTIONS_H_
-#define VM_DEOPT_INSTRUCTIONS_H_
+#ifndef RUNTIME_VM_DEOPT_INSTRUCTIONS_H_
+#define RUNTIME_VM_DEOPT_INSTRUCTIONS_H_
 
 #include "vm/allocation.h"
 #include "vm/assembler.h"
@@ -605,4 +605,4 @@
 
 }  // namespace dart
 
-#endif  // VM_DEOPT_INSTRUCTIONS_H_
+#endif  // RUNTIME_VM_DEOPT_INSTRUCTIONS_H_
diff --git a/runtime/vm/disassembler.h b/runtime/vm/disassembler.h
index 7adb12a..e26a214 100644
--- a/runtime/vm/disassembler.h
+++ b/runtime/vm/disassembler.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 VM_DISASSEMBLER_H_
-#define VM_DISASSEMBLER_H_
+#ifndef RUNTIME_VM_DISASSEMBLER_H_
+#define RUNTIME_VM_DISASSEMBLER_H_
 
 #include "vm/allocation.h"
 #include "vm/assembler.h"
@@ -138,4 +138,4 @@
 
 }  // namespace dart
 
-#endif  // VM_DISASSEMBLER_H_
+#endif  // RUNTIME_VM_DISASSEMBLER_H_
diff --git a/runtime/vm/double_conversion.h b/runtime/vm/double_conversion.h
index ded82a4..dd6e213 100644
--- a/runtime/vm/double_conversion.h
+++ b/runtime/vm/double_conversion.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 VM_DOUBLE_CONVERSION_H_
-#define VM_DOUBLE_CONVERSION_H_
+#ifndef RUNTIME_VM_DOUBLE_CONVERSION_H_
+#define RUNTIME_VM_DOUBLE_CONVERSION_H_
 
 #include "vm/globals.h"
 #include "vm/object.h"
@@ -19,4 +19,4 @@
 
 }  // namespace dart
 
-#endif  // VM_DOUBLE_CONVERSION_H_
+#endif  // RUNTIME_VM_DOUBLE_CONVERSION_H_
diff --git a/runtime/vm/double_internals.h b/runtime/vm/double_internals.h
index 4e54475..4a55548 100644
--- a/runtime/vm/double_internals.h
+++ b/runtime/vm/double_internals.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 VM_DOUBLE_INTERNALS_H_
-#define VM_DOUBLE_INTERNALS_H_
+#ifndef RUNTIME_VM_DOUBLE_INTERNALS_H_
+#define RUNTIME_VM_DOUBLE_INTERNALS_H_
 
 #include "platform/utils.h"
 
@@ -77,4 +77,4 @@
 
 }  // namespace dart
 
-#endif  // VM_DOUBLE_INTERNALS_H_
+#endif  // RUNTIME_VM_DOUBLE_INTERNALS_H_
diff --git a/runtime/vm/exceptions.h b/runtime/vm/exceptions.h
index e85f100..eaf6194 100644
--- a/runtime/vm/exceptions.h
+++ b/runtime/vm/exceptions.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 VM_EXCEPTIONS_H_
-#define VM_EXCEPTIONS_H_
+#ifndef RUNTIME_VM_EXCEPTIONS_H_
+#define RUNTIME_VM_EXCEPTIONS_H_
 
 #include "vm/allocation.h"
 #include "vm/token_position.h"
@@ -86,4 +86,4 @@
 
 }  // namespace dart
 
-#endif  // VM_EXCEPTIONS_H_
+#endif  // RUNTIME_VM_EXCEPTIONS_H_
diff --git a/runtime/vm/flag_list.h b/runtime/vm/flag_list.h
index c8ceb68..6b2e631 100644
--- a/runtime/vm/flag_list.h
+++ b/runtime/vm/flag_list.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 VM_FLAG_LIST_H_
-#define VM_FLAG_LIST_H_
+#ifndef RUNTIME_VM_FLAG_LIST_H_
+#define RUNTIME_VM_FLAG_LIST_H_
 
 // Don't use USING_DBC outside of this file.
 #if defined(TARGET_ARCH_DBC)
@@ -201,4 +201,4 @@
 D(verify_on_transition, bool, false,                                           \
   "Verify on dart <==> VM.")                                                   \
 
-#endif  // VM_FLAG_LIST_H_
+#endif  // RUNTIME_VM_FLAG_LIST_H_
diff --git a/runtime/vm/flags.h b/runtime/vm/flags.h
index b30299c..2d882d0 100644
--- a/runtime/vm/flags.h
+++ b/runtime/vm/flags.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 VM_FLAGS_H_
-#define VM_FLAGS_H_
+#ifndef RUNTIME_VM_FLAGS_H_
+#define RUNTIME_VM_FLAGS_H_
 
 #include "platform/assert.h"
 #include "vm/flag_list.h"
@@ -157,4 +157,4 @@
 
 }  // namespace dart
 
-#endif  // VM_FLAGS_H_
+#endif  // RUNTIME_VM_FLAGS_H_
diff --git a/runtime/vm/flow_graph.h b/runtime/vm/flow_graph.h
index e4a0a3c..1b71083 100644
--- a/runtime/vm/flow_graph.h
+++ b/runtime/vm/flow_graph.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 VM_FLOW_GRAPH_H_
-#define VM_FLOW_GRAPH_H_
+#ifndef RUNTIME_VM_FLOW_GRAPH_H_
+#define RUNTIME_VM_FLOW_GRAPH_H_
 
 #include "vm/bit_vector.h"
 #include "vm/growable_array.h"
@@ -566,4 +566,4 @@
 
 }  // namespace dart
 
-#endif  // VM_FLOW_GRAPH_H_
+#endif  // RUNTIME_VM_FLOW_GRAPH_H_
diff --git a/runtime/vm/flow_graph_allocator.h b/runtime/vm/flow_graph_allocator.h
index 34804eb..6cd79e0 100644
--- a/runtime/vm/flow_graph_allocator.h
+++ b/runtime/vm/flow_graph_allocator.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 VM_FLOW_GRAPH_ALLOCATOR_H_
-#define VM_FLOW_GRAPH_ALLOCATOR_H_
+#ifndef RUNTIME_VM_FLOW_GRAPH_ALLOCATOR_H_
+#define RUNTIME_VM_FLOW_GRAPH_ALLOCATOR_H_
 
 #include "vm/flow_graph.h"
 #include "vm/growable_array.h"
@@ -684,4 +684,4 @@
 
 }  // namespace dart
 
-#endif  // VM_FLOW_GRAPH_ALLOCATOR_H_
+#endif  // RUNTIME_VM_FLOW_GRAPH_ALLOCATOR_H_
diff --git a/runtime/vm/flow_graph_builder.h b/runtime/vm/flow_graph_builder.h
index 870773b..19dc316 100644
--- a/runtime/vm/flow_graph_builder.h
+++ b/runtime/vm/flow_graph_builder.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 VM_FLOW_GRAPH_BUILDER_H_
-#define VM_FLOW_GRAPH_BUILDER_H_
+#ifndef RUNTIME_VM_FLOW_GRAPH_BUILDER_H_
+#define RUNTIME_VM_FLOW_GRAPH_BUILDER_H_
 
 #include "platform/assert.h"
 #include "platform/globals.h"
@@ -585,4 +585,4 @@
 
 }  // namespace dart
 
-#endif  // VM_FLOW_GRAPH_BUILDER_H_
+#endif  // RUNTIME_VM_FLOW_GRAPH_BUILDER_H_
diff --git a/runtime/vm/flow_graph_compiler.h b/runtime/vm/flow_graph_compiler.h
index 165cded..a43c6af 100644
--- a/runtime/vm/flow_graph_compiler.h
+++ b/runtime/vm/flow_graph_compiler.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 VM_FLOW_GRAPH_COMPILER_H_
-#define VM_FLOW_GRAPH_COMPILER_H_
+#ifndef RUNTIME_VM_FLOW_GRAPH_COMPILER_H_
+#define RUNTIME_VM_FLOW_GRAPH_COMPILER_H_
 
 #include "vm/allocation.h"
 #include "vm/assembler.h"
@@ -802,4 +802,4 @@
 
 }  // namespace dart
 
-#endif  // VM_FLOW_GRAPH_COMPILER_H_
+#endif  // RUNTIME_VM_FLOW_GRAPH_COMPILER_H_
diff --git a/runtime/vm/flow_graph_inliner.h b/runtime/vm/flow_graph_inliner.h
index 77a903a..ccf7d39 100644
--- a/runtime/vm/flow_graph_inliner.h
+++ b/runtime/vm/flow_graph_inliner.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 VM_FLOW_GRAPH_INLINER_H_
-#define VM_FLOW_GRAPH_INLINER_H_
+#ifndef RUNTIME_VM_FLOW_GRAPH_INLINER_H_
+#define RUNTIME_VM_FLOW_GRAPH_INLINER_H_
 
 #include "vm/allocation.h"
 #include "vm/growable_array.h"
@@ -83,4 +83,4 @@
 
 }  // namespace dart
 
-#endif  // VM_FLOW_GRAPH_INLINER_H_
+#endif  // RUNTIME_VM_FLOW_GRAPH_INLINER_H_
diff --git a/runtime/vm/flow_graph_range_analysis.h b/runtime/vm/flow_graph_range_analysis.h
index 691fff5..a1e1ba3 100644
--- a/runtime/vm/flow_graph_range_analysis.h
+++ b/runtime/vm/flow_graph_range_analysis.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 VM_FLOW_GRAPH_RANGE_ANALYSIS_H_
-#define VM_FLOW_GRAPH_RANGE_ANALYSIS_H_
+#ifndef RUNTIME_VM_FLOW_GRAPH_RANGE_ANALYSIS_H_
+#define RUNTIME_VM_FLOW_GRAPH_RANGE_ANALYSIS_H_
 
 #include "vm/flow_graph.h"
 #include "vm/intermediate_language.h"
@@ -663,4 +663,4 @@
 
 }  // namespace dart
 
-#endif  // VM_FLOW_GRAPH_RANGE_ANALYSIS_H_
+#endif  // RUNTIME_VM_FLOW_GRAPH_RANGE_ANALYSIS_H_
diff --git a/runtime/vm/flow_graph_type_propagator.h b/runtime/vm/flow_graph_type_propagator.h
index 84229c5..421b76e 100644
--- a/runtime/vm/flow_graph_type_propagator.h
+++ b/runtime/vm/flow_graph_type_propagator.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 VM_FLOW_GRAPH_TYPE_PROPAGATOR_H_
-#define VM_FLOW_GRAPH_TYPE_PROPAGATOR_H_
+#ifndef RUNTIME_VM_FLOW_GRAPH_TYPE_PROPAGATOR_H_
+#define RUNTIME_VM_FLOW_GRAPH_TYPE_PROPAGATOR_H_
 
 #include "vm/flow_graph.h"
 #include "vm/intermediate_language.h"
@@ -98,4 +98,4 @@
 
 }  // namespace dart
 
-#endif  // VM_FLOW_GRAPH_TYPE_PROPAGATOR_H_
+#endif  // RUNTIME_VM_FLOW_GRAPH_TYPE_PROPAGATOR_H_
diff --git a/runtime/vm/freelist.h b/runtime/vm/freelist.h
index 975e50c..22744a1 100644
--- a/runtime/vm/freelist.h
+++ b/runtime/vm/freelist.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 VM_FREELIST_H_
-#define VM_FREELIST_H_
+#ifndef RUNTIME_VM_FREELIST_H_
+#define RUNTIME_VM_FREELIST_H_
 
 #include "platform/assert.h"
 #include "vm/allocation.h"
@@ -134,4 +134,4 @@
 
 }  // namespace dart
 
-#endif  // VM_FREELIST_H_
+#endif  // RUNTIME_VM_FREELIST_H_
diff --git a/runtime/vm/gc_marker.h b/runtime/vm/gc_marker.h
index f1e473a..5a5f2ea 100644
--- a/runtime/vm/gc_marker.h
+++ b/runtime/vm/gc_marker.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 VM_GC_MARKER_H_
-#define VM_GC_MARKER_H_
+#ifndef RUNTIME_VM_GC_MARKER_H_
+#define RUNTIME_VM_GC_MARKER_H_
 
 #include "vm/allocation.h"
 #include "vm/os_thread.h"  // Mutex.
@@ -61,4 +61,4 @@
 
 }  // namespace dart
 
-#endif  // VM_GC_MARKER_H_
+#endif  // RUNTIME_VM_GC_MARKER_H_
diff --git a/runtime/vm/gc_sweeper.h b/runtime/vm/gc_sweeper.h
index b2b8317..ba9aaef 100644
--- a/runtime/vm/gc_sweeper.h
+++ b/runtime/vm/gc_sweeper.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 VM_GC_SWEEPER_H_
-#define VM_GC_SWEEPER_H_
+#ifndef RUNTIME_VM_GC_SWEEPER_H_
+#define RUNTIME_VM_GC_SWEEPER_H_
 
 #include "vm/globals.h"
 
@@ -43,4 +43,4 @@
 
 }  // namespace dart
 
-#endif  // VM_GC_SWEEPER_H_
+#endif  // RUNTIME_VM_GC_SWEEPER_H_
diff --git a/runtime/vm/globals.h b/runtime/vm/globals.h
index 9fd69e2..e65cb7d 100644
--- a/runtime/vm/globals.h
+++ b/runtime/vm/globals.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 VM_GLOBALS_H_
-#define VM_GLOBALS_H_
+#ifndef RUNTIME_VM_GLOBALS_H_
+#define RUNTIME_VM_GLOBALS_H_
 
 // This file contains global definitions for the VM library only. Anything that
 // is more globally useful should be added to 'vm/globals.h'.
@@ -132,4 +132,4 @@
 
 }  // namespace dart
 
-#endif  // VM_GLOBALS_H_
+#endif  // RUNTIME_VM_GLOBALS_H_
diff --git a/runtime/vm/growable_array.h b/runtime/vm/growable_array.h
index 42b787b..09df060 100644
--- a/runtime/vm/growable_array.h
+++ b/runtime/vm/growable_array.h
@@ -7,8 +7,8 @@
 // - MallocGrowableArray: allocates using malloc/realloc; free is only called
 //   at destruction.
 
-#ifndef VM_GROWABLE_ARRAY_H_
-#define VM_GROWABLE_ARRAY_H_
+#ifndef RUNTIME_VM_GROWABLE_ARRAY_H_
+#define RUNTIME_VM_GROWABLE_ARRAY_H_
 
 #include "platform/utils.h"
 #include "vm/allocation.h"
@@ -294,4 +294,4 @@
 
 }  // namespace dart
 
-#endif  // VM_GROWABLE_ARRAY_H_
+#endif  // RUNTIME_VM_GROWABLE_ARRAY_H_
diff --git a/runtime/vm/handles.h b/runtime/vm/handles.h
index aab078c..1b4c7bd 100644
--- a/runtime/vm/handles.h
+++ b/runtime/vm/handles.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 VM_HANDLES_H_
-#define VM_HANDLES_H_
+#ifndef RUNTIME_VM_HANDLES_H_
+#define RUNTIME_VM_HANDLES_H_
 
 #include "vm/allocation.h"
 #include "vm/flags.h"
@@ -356,4 +356,4 @@
 
 }  // namespace dart
 
-#endif  // VM_HANDLES_H_
+#endif  // RUNTIME_VM_HANDLES_H_
diff --git a/runtime/vm/handles_impl.h b/runtime/vm/handles_impl.h
index bf44e63..eb7be5e 100644
--- a/runtime/vm/handles_impl.h
+++ b/runtime/vm/handles_impl.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 VM_HANDLES_IMPL_H_
-#define VM_HANDLES_IMPL_H_
+#ifndef RUNTIME_VM_HANDLES_IMPL_H_
+#define RUNTIME_VM_HANDLES_IMPL_H_
 
 #include "vm/heap.h"
 #include "vm/thread.h"
@@ -368,4 +368,4 @@
 
 }  // namespace dart
 
-#endif  // VM_HANDLES_IMPL_H_
+#endif  // RUNTIME_VM_HANDLES_IMPL_H_
diff --git a/runtime/vm/hash_map.h b/runtime/vm/hash_map.h
index d703c0a..88d45ff 100644
--- a/runtime/vm/hash_map.h
+++ b/runtime/vm/hash_map.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 VM_HASH_MAP_H_
-#define VM_HASH_MAP_H_
+#ifndef RUNTIME_VM_HASH_MAP_H_
+#define RUNTIME_VM_HASH_MAP_H_
 
 #include "vm/growable_array.h"  // For Malloc, EmptyBase
 #include "vm/zone.h"
@@ -387,4 +387,4 @@
 
 }  // namespace dart
 
-#endif  // VM_HASH_MAP_H_
+#endif  // RUNTIME_VM_HASH_MAP_H_
diff --git a/runtime/vm/hash_table.h b/runtime/vm/hash_table.h
index f1079b8..5835b22 100644
--- a/runtime/vm/hash_table.h
+++ b/runtime/vm/hash_table.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 VM_HASH_TABLE_H_
-#define VM_HASH_TABLE_H_
+#ifndef RUNTIME_VM_HASH_TABLE_H_
+#define RUNTIME_VM_HASH_TABLE_H_
 
 #include "platform/assert.h"
 #include "vm/object.h"
@@ -704,4 +704,4 @@
 
 }  // namespace dart
 
-#endif  // VM_HASH_TABLE_H_
+#endif  // RUNTIME_VM_HASH_TABLE_H_
diff --git a/runtime/vm/heap.h b/runtime/vm/heap.h
index deae0a0..30210bc 100644
--- a/runtime/vm/heap.h
+++ b/runtime/vm/heap.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 VM_HEAP_H_
-#define VM_HEAP_H_
+#ifndef RUNTIME_VM_HEAP_H_
+#define RUNTIME_VM_HEAP_H_
 
 #include "platform/assert.h"
 #include "vm/allocation.h"
@@ -396,4 +396,4 @@
 
 }  // namespace dart
 
-#endif  // VM_HEAP_H_
+#endif  // RUNTIME_VM_HEAP_H_
diff --git a/runtime/vm/il_printer.h b/runtime/vm/il_printer.h
index b800ab7..88496fb 100644
--- a/runtime/vm/il_printer.h
+++ b/runtime/vm/il_printer.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 VM_IL_PRINTER_H_
-#define VM_IL_PRINTER_H_
+#ifndef RUNTIME_VM_IL_PRINTER_H_
+#define RUNTIME_VM_IL_PRINTER_H_
 
 #include "vm/flow_graph.h"
 #include "vm/intermediate_language.h"
@@ -76,4 +76,4 @@
 
 }  // namespace dart
 
-#endif  // VM_IL_PRINTER_H_
+#endif  // RUNTIME_VM_IL_PRINTER_H_
diff --git a/runtime/vm/instructions.h b/runtime/vm/instructions.h
index 2274bec..8b14145 100644
--- a/runtime/vm/instructions.h
+++ b/runtime/vm/instructions.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 VM_INSTRUCTIONS_H_
-#define VM_INSTRUCTIONS_H_
+#ifndef RUNTIME_VM_INSTRUCTIONS_H_
+#define RUNTIME_VM_INSTRUCTIONS_H_
 
 #include "vm/globals.h"
 
@@ -34,4 +34,4 @@
 
 }  // namespace dart
 
-#endif  // VM_INSTRUCTIONS_H_
+#endif  // RUNTIME_VM_INSTRUCTIONS_H_
diff --git a/runtime/vm/instructions_arm.cc b/runtime/vm/instructions_arm.cc
index a3abab8..1541f40 100644
--- a/runtime/vm/instructions_arm.cc
+++ b/runtime/vm/instructions_arm.cc
@@ -5,10 +5,12 @@
 #include "vm/globals.h"  // Needed here to get TARGET_ARCH_ARM.
 #if defined(TARGET_ARCH_ARM)
 
+#include "vm/instructions.h"
+#include "vm/instructions_arm.h"
+
 #include "vm/assembler.h"
 #include "vm/constants_arm.h"
 #include "vm/cpu.h"
-#include "vm/instructions.h"
 #include "vm/object.h"
 
 namespace dart {
diff --git a/runtime/vm/instructions_arm.h b/runtime/vm/instructions_arm.h
index 687cf7e..efaa73b 100644
--- a/runtime/vm/instructions_arm.h
+++ b/runtime/vm/instructions_arm.h
@@ -3,10 +3,10 @@
 // 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 RUNTIME_VM_INSTRUCTIONS_ARM_H_
+#define RUNTIME_VM_INSTRUCTIONS_ARM_H_
 
-#ifndef VM_INSTRUCTIONS_H_
+#ifndef RUNTIME_VM_INSTRUCTIONS_H_
 #error Do not include instructions_arm.h directly; use instructions.h instead.
 #endif
 
@@ -133,4 +133,4 @@
 
 }  // namespace dart
 
-#endif  // VM_INSTRUCTIONS_ARM_H_
+#endif  // RUNTIME_VM_INSTRUCTIONS_ARM_H_
diff --git a/runtime/vm/instructions_arm64.cc b/runtime/vm/instructions_arm64.cc
index 674e68a..0895ae9 100644
--- a/runtime/vm/instructions_arm64.cc
+++ b/runtime/vm/instructions_arm64.cc
@@ -5,10 +5,12 @@
 #include "vm/globals.h"  // Needed here to get TARGET_ARCH_ARM64.
 #if defined(TARGET_ARCH_ARM64)
 
+#include "vm/instructions.h"
+#include "vm/instructions_arm64.h"
+
 #include "vm/assembler.h"
 #include "vm/constants_arm64.h"
 #include "vm/cpu.h"
-#include "vm/instructions.h"
 #include "vm/object.h"
 
 namespace dart {
diff --git a/runtime/vm/instructions_arm64.h b/runtime/vm/instructions_arm64.h
index e3c1d4d..e86a306 100644
--- a/runtime/vm/instructions_arm64.h
+++ b/runtime/vm/instructions_arm64.h
@@ -3,10 +3,10 @@
 // BSD-style license that can be found in the LICENSE file.
 // Classes that describe assembly patterns as used by inline caches.
 
-#ifndef VM_INSTRUCTIONS_ARM64_H_
-#define VM_INSTRUCTIONS_ARM64_H_
+#ifndef RUNTIME_VM_INSTRUCTIONS_ARM64_H_
+#define RUNTIME_VM_INSTRUCTIONS_ARM64_H_
 
-#ifndef VM_INSTRUCTIONS_H_
+#ifndef RUNTIME_VM_INSTRUCTIONS_H_
 #error Do not include instructions_arm64.h directly; use instructions.h instead.
 #endif
 
@@ -140,4 +140,4 @@
 
 }  // namespace dart
 
-#endif  // VM_INSTRUCTIONS_ARM64_H_
+#endif  // RUNTIME_VM_INSTRUCTIONS_ARM64_H_
diff --git a/runtime/vm/instructions_dbc.h b/runtime/vm/instructions_dbc.h
index a10dcc0..e0ea799 100644
--- a/runtime/vm/instructions_dbc.h
+++ b/runtime/vm/instructions_dbc.h
@@ -3,10 +3,10 @@
 // BSD-style license that can be found in the LICENSE file.
 // Classes that describe assembly patterns as used by inline caches.
 
-#ifndef VM_INSTRUCTIONS_DBC_H_
-#define VM_INSTRUCTIONS_DBC_H_
+#ifndef RUNTIME_VM_INSTRUCTIONS_DBC_H_
+#define RUNTIME_VM_INSTRUCTIONS_DBC_H_
 
-#ifndef VM_INSTRUCTIONS_H_
+#ifndef RUNTIME_VM_INSTRUCTIONS_H_
 #error Do not include instructions_dbc.h directly; use instructions.h instead.
 #endif
 
@@ -135,4 +135,4 @@
 
 }  // namespace dart
 
-#endif  // VM_INSTRUCTIONS_DBC_H_
+#endif  // RUNTIME_VM_INSTRUCTIONS_DBC_H_
diff --git a/runtime/vm/instructions_ia32.cc b/runtime/vm/instructions_ia32.cc
index 2b9f638..fa36c84 100644
--- a/runtime/vm/instructions_ia32.cc
+++ b/runtime/vm/instructions_ia32.cc
@@ -5,8 +5,10 @@
 #include "vm/globals.h"  // Needed here to get TARGET_ARCH_IA32.
 #if defined(TARGET_ARCH_IA32)
 
-#include "vm/cpu.h"
 #include "vm/instructions.h"
+#include "vm/instructions_ia32.h"
+
+#include "vm/cpu.h"
 #include "vm/object.h"
 
 namespace dart {
diff --git a/runtime/vm/instructions_ia32.h b/runtime/vm/instructions_ia32.h
index 33d648f..4be887f 100644
--- a/runtime/vm/instructions_ia32.h
+++ b/runtime/vm/instructions_ia32.h
@@ -3,10 +3,10 @@
 // BSD-style license that can be found in the LICENSE file.
 // Classes that describe assembly patterns as used by inline caches.
 
-#ifndef VM_INSTRUCTIONS_IA32_H_
-#define VM_INSTRUCTIONS_IA32_H_
+#ifndef RUNTIME_VM_INSTRUCTIONS_IA32_H_
+#define RUNTIME_VM_INSTRUCTIONS_IA32_H_
 
-#ifndef VM_INSTRUCTIONS_H_
+#ifndef RUNTIME_VM_INSTRUCTIONS_H_
 #error Do not include instructions_ia32.h directly; use instructions.h instead.
 #endif
 
@@ -144,4 +144,4 @@
 
 }  // namespace dart
 
-#endif  // VM_INSTRUCTIONS_IA32_H_
+#endif  // RUNTIME_VM_INSTRUCTIONS_IA32_H_
diff --git a/runtime/vm/instructions_mips.cc b/runtime/vm/instructions_mips.cc
index cc51a3d..547b6fe 100644
--- a/runtime/vm/instructions_mips.cc
+++ b/runtime/vm/instructions_mips.cc
@@ -5,9 +5,11 @@
 #include "vm/globals.h"  // Needed here to get TARGET_ARCH_MIPS.
 #if defined(TARGET_ARCH_MIPS)
 
+#include "vm/instructions.h"
+#include "vm/instructions_mips.h"
+
 #include "vm/constants_mips.h"
 #include "vm/cpu.h"
-#include "vm/instructions.h"
 #include "vm/object.h"
 
 namespace dart {
diff --git a/runtime/vm/instructions_mips.h b/runtime/vm/instructions_mips.h
index 95f04f7..83907cb 100644
--- a/runtime/vm/instructions_mips.h
+++ b/runtime/vm/instructions_mips.h
@@ -3,10 +3,10 @@
 // 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 RUNTIME_VM_INSTRUCTIONS_MIPS_H_
+#define RUNTIME_VM_INSTRUCTIONS_MIPS_H_
 
-#ifndef VM_INSTRUCTIONS_H_
+#ifndef RUNTIME_VM_INSTRUCTIONS_H_
 #error Do not include instructions_mips.h directly; use instructions.h instead.
 #endif
 
@@ -133,4 +133,4 @@
 
 }  // namespace dart
 
-#endif  // VM_INSTRUCTIONS_MIPS_H_
+#endif  // RUNTIME_VM_INSTRUCTIONS_MIPS_H_
diff --git a/runtime/vm/instructions_x64.cc b/runtime/vm/instructions_x64.cc
index fe0c6ef..efebc15 100644
--- a/runtime/vm/instructions_x64.cc
+++ b/runtime/vm/instructions_x64.cc
@@ -5,9 +5,11 @@
 #include "vm/globals.h"  // Needed here to get TARGET_ARCH_X64.
 #if defined(TARGET_ARCH_X64)
 
+#include "vm/instructions.h"
+#include "vm/instructions_x64.h"
+
 #include "vm/cpu.h"
 #include "vm/constants_x64.h"
-#include "vm/instructions.h"
 #include "vm/object.h"
 
 namespace dart {
diff --git a/runtime/vm/instructions_x64.h b/runtime/vm/instructions_x64.h
index 97c52e9..ba86ee4 100644
--- a/runtime/vm/instructions_x64.h
+++ b/runtime/vm/instructions_x64.h
@@ -3,10 +3,10 @@
 // BSD-style license that can be found in the LICENSE file.
 // Classes that describe assembly patterns as used by inline caches.
 
-#ifndef VM_INSTRUCTIONS_X64_H_
-#define VM_INSTRUCTIONS_X64_H_
+#ifndef RUNTIME_VM_INSTRUCTIONS_X64_H_
+#define RUNTIME_VM_INSTRUCTIONS_X64_H_
 
-#ifndef VM_INSTRUCTIONS_H_
+#ifndef RUNTIME_VM_INSTRUCTIONS_H_
 #error Do not include instructions_ia32.h directly; use instructions.h instead.
 #endif
 
@@ -121,4 +121,4 @@
 
 }  // namespace dart
 
-#endif  // VM_INSTRUCTIONS_X64_H_
+#endif  // RUNTIME_VM_INSTRUCTIONS_X64_H_
diff --git a/runtime/vm/intermediate_language.h b/runtime/vm/intermediate_language.h
index 2876be7..8e7241a 100644
--- a/runtime/vm/intermediate_language.h
+++ b/runtime/vm/intermediate_language.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 VM_INTERMEDIATE_LANGUAGE_H_
-#define VM_INTERMEDIATE_LANGUAGE_H_
+#ifndef RUNTIME_VM_INTERMEDIATE_LANGUAGE_H_
+#define RUNTIME_VM_INTERMEDIATE_LANGUAGE_H_
 
 #include "vm/allocation.h"
 #include "vm/ast.h"
@@ -8389,4 +8389,4 @@
 
 }  // namespace dart
 
-#endif  // VM_INTERMEDIATE_LANGUAGE_H_
+#endif  // RUNTIME_VM_INTERMEDIATE_LANGUAGE_H_
diff --git a/runtime/vm/intermediate_language_arm64.cc b/runtime/vm/intermediate_language_arm64.cc
index 3503a99..22fac28 100644
--- a/runtime/vm/intermediate_language_arm64.cc
+++ b/runtime/vm/intermediate_language_arm64.cc
@@ -5130,7 +5130,7 @@
     //    }
     //  }
     Label done;
-    __ CompareRegisters(result_mod, ZR);;
+    __ CompareRegisters(result_mod, ZR);
     __ b(&done, GE);
     // Result is negative, adjust it.
     __ CompareRegisters(right, ZR);
diff --git a/runtime/vm/intrinsifier.h b/runtime/vm/intrinsifier.h
index 7226d3ac..37cf5ef 100644
--- a/runtime/vm/intrinsifier.h
+++ b/runtime/vm/intrinsifier.h
@@ -3,8 +3,8 @@
 // BSD-style license that can be found in the LICENSE file.
 // Class for intrinsifying functions.
 
-#ifndef VM_INTRINSIFIER_H_
-#define VM_INTRINSIFIER_H_
+#ifndef RUNTIME_VM_INTRINSIFIER_H_
+#define RUNTIME_VM_INTRINSIFIER_H_
 
 #include "vm/allocation.h"
 #include "vm/method_recognizer.h"
@@ -61,4 +61,4 @@
 
 }  // namespace dart
 
-#endif  // VM_INTRINSIFIER_H_
+#endif  // RUNTIME_VM_INTRINSIFIER_H_
diff --git a/runtime/vm/isolate.cc b/runtime/vm/isolate.cc
index 96af2b6..7fdbe56b 100644
--- a/runtime/vm/isolate.cc
+++ b/runtime/vm/isolate.cc
@@ -681,7 +681,7 @@
     if (!tmp.IsString()) {
       tmp = String::New(stacktrace.ToCString());
     }
-    stacktrace_str ^= tmp.raw();;
+    stacktrace_str ^= tmp.raw();
   } else {
     exc_str = String::New(result.ToErrorCString());
   }
diff --git a/runtime/vm/isolate.h b/runtime/vm/isolate.h
index e85d4da..f29f666 100644
--- a/runtime/vm/isolate.h
+++ b/runtime/vm/isolate.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 VM_ISOLATE_H_
-#define VM_ISOLATE_H_
+#ifndef RUNTIME_VM_ISOLATE_H_
+#define RUNTIME_VM_ISOLATE_H_
 
 #include "include/dart_api.h"
 #include "platform/assert.h"
@@ -1029,4 +1029,4 @@
 
 }  // namespace dart
 
-#endif  // VM_ISOLATE_H_
+#endif  // RUNTIME_VM_ISOLATE_H_
diff --git a/runtime/vm/isolate_reload.cc b/runtime/vm/isolate_reload.cc
index 2b00272..6bd57d7 100644
--- a/runtime/vm/isolate_reload.cc
+++ b/runtime/vm/isolate_reload.cc
@@ -1395,7 +1395,7 @@
     if (code.is_optimized()) {
       // If this code is optimized, we need to reset the ICs in the
       // corresponding unoptimized code, which will be executed when the stack
-      // unwinds to the the optimized code.
+      // unwinds to the optimized code.
       function = code.function();
       code = function.unoptimized_code();
       ASSERT(!code.IsNull());
diff --git a/runtime/vm/isolate_reload.h b/runtime/vm/isolate_reload.h
index ce16bef..e8fbd3a 100644
--- a/runtime/vm/isolate_reload.h
+++ b/runtime/vm/isolate_reload.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 VM_ISOLATE_RELOAD_H_
-#define VM_ISOLATE_RELOAD_H_
+#ifndef RUNTIME_VM_ISOLATE_RELOAD_H_
+#define RUNTIME_VM_ISOLATE_RELOAD_H_
 
 #include "include/dart_tools_api.h"
 
@@ -348,4 +348,4 @@
 
 }  // namespace dart
 
-#endif   // VM_ISOLATE_RELOAD_H_
+#endif   // RUNTIME_VM_ISOLATE_RELOAD_H_
diff --git a/runtime/vm/isolate_reload_test.cc b/runtime/vm/isolate_reload_test.cc
index e33cb97..c8282e4 100644
--- a/runtime/vm/isolate_reload_test.cc
+++ b/runtime/vm/isolate_reload_test.cc
@@ -313,7 +313,7 @@
 
   Dart_Handle lib = TestCase::LoadTestScript(kScript, NULL);
   EXPECT_VALID(lib);
-  EXPECT_ERROR(SimpleInvokeError(lib, "main"), "max");;
+  EXPECT_ERROR(SimpleInvokeError(lib, "main"), "max");
 
   const char* kReloadScript =
       "import 'dart:math';\n"
@@ -346,7 +346,7 @@
   lib = TestCase::ReloadTestScript(kReloadScript);
   EXPECT_VALID(lib);
 
-  EXPECT_ERROR(SimpleInvokeError(lib, "main"), "max");;
+  EXPECT_ERROR(SimpleInvokeError(lib, "main"), "max");
 }
 
 
diff --git a/runtime/vm/jit_optimizer.h b/runtime/vm/jit_optimizer.h
index 21a7855..462c1df 100644
--- a/runtime/vm/jit_optimizer.h
+++ b/runtime/vm/jit_optimizer.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 VM_JIT_OPTIMIZER_H_
-#define VM_JIT_OPTIMIZER_H_
+#ifndef RUNTIME_VM_JIT_OPTIMIZER_H_
+#define RUNTIME_VM_JIT_OPTIMIZER_H_
 
 #include "vm/intermediate_language.h"
 #include "vm/flow_graph.h"
@@ -134,4 +134,4 @@
 
 }  // namespace dart
 
-#endif  // VM_JIT_OPTIMIZER_H_
+#endif  // RUNTIME_VM_JIT_OPTIMIZER_H_
diff --git a/runtime/vm/json_stream.h b/runtime/vm/json_stream.h
index 2dac1c7..17daf88 100644
--- a/runtime/vm/json_stream.h
+++ b/runtime/vm/json_stream.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 VM_JSON_STREAM_H_
-#define VM_JSON_STREAM_H_
+#ifndef RUNTIME_VM_JSON_STREAM_H_
+#define RUNTIME_VM_JSON_STREAM_H_
 
 #include "include/dart_api.h"  // for Dart_Port
 #include "platform/text_buffer.h"
@@ -434,4 +434,4 @@
 
 }  // namespace dart
 
-#endif  // VM_JSON_STREAM_H_
+#endif  // RUNTIME_VM_JSON_STREAM_H_
diff --git a/runtime/vm/kernel.h b/runtime/vm/kernel.h
index b6038fc..5133ce9 100644
--- a/runtime/vm/kernel.h
+++ b/runtime/vm/kernel.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 VM_KERNEL_H_
-#define VM_KERNEL_H_
+#ifndef RUNTIME_VM_KERNEL_H_
+#define RUNTIME_VM_KERNEL_H_
 
 #include "platform/assert.h"
 #include "vm/allocation.h"
@@ -3240,4 +3240,4 @@
 
 }  // namespace dart
 
-#endif  // VM_KERNEL_H_
+#endif  // RUNTIME_VM_KERNEL_H_
diff --git a/runtime/vm/kernel_reader.h b/runtime/vm/kernel_reader.h
index a53d572..e6d9e55 100644
--- a/runtime/vm/kernel_reader.h
+++ b/runtime/vm/kernel_reader.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 VM_KERNEL_READER_H_
-#define VM_KERNEL_READER_H_
+#ifndef RUNTIME_VM_KERNEL_READER_H_
+#define RUNTIME_VM_KERNEL_READER_H_
 
 #include <map>
 
@@ -117,4 +117,4 @@
 }  // namespace kernel
 }  // namespace dart
 
-#endif  // VM_KERNEL_READER_H_
+#endif  // RUNTIME_VM_KERNEL_READER_H_
diff --git a/runtime/vm/kernel_to_il.h b/runtime/vm/kernel_to_il.h
index 6f50949..20b9aeb 100644
--- a/runtime/vm/kernel_to_il.h
+++ b/runtime/vm/kernel_to_il.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 VM_KERNEL_TO_IL_H_
-#define VM_KERNEL_TO_IL_H_
+#ifndef RUNTIME_VM_KERNEL_TO_IL_H_
+#define RUNTIME_VM_KERNEL_TO_IL_H_
 
 #include "vm/growable_array.h"
 #include "vm/hash_map.h"
@@ -836,4 +836,4 @@
 }  // namespace dart
 
 
-#endif  // VM_KERNEL_TO_IL_H_
+#endif  // RUNTIME_VM_KERNEL_TO_IL_H_
diff --git a/runtime/vm/locations.h b/runtime/vm/locations.h
index 0692007..e81c96b 100644
--- a/runtime/vm/locations.h
+++ b/runtime/vm/locations.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 VM_LOCATIONS_H_
-#define VM_LOCATIONS_H_
+#ifndef RUNTIME_VM_LOCATIONS_H_
+#define RUNTIME_VM_LOCATIONS_H_
 
 #include "vm/allocation.h"
 #include "vm/assembler.h"
@@ -727,4 +727,4 @@
 
 }  // namespace dart
 
-#endif  // VM_LOCATIONS_H_
+#endif  // RUNTIME_VM_LOCATIONS_H_
diff --git a/runtime/vm/lockers.h b/runtime/vm/lockers.h
index a0b1a17..1ffe532 100644
--- a/runtime/vm/lockers.h
+++ b/runtime/vm/lockers.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 VM_LOCKERS_H_
-#define VM_LOCKERS_H_
+#ifndef RUNTIME_VM_LOCKERS_H_
+#define RUNTIME_VM_LOCKERS_H_
 
 #include "platform/assert.h"
 #include "vm/allocation.h"
@@ -258,4 +258,4 @@
 }  // namespace dart
 
 
-#endif  // VM_LOCKERS_H_
+#endif  // RUNTIME_VM_LOCKERS_H_
diff --git a/runtime/vm/log.h b/runtime/vm/log.h
index a2f18fa..e6cc336 100644
--- a/runtime/vm/log.h
+++ b/runtime/vm/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 VM_LOG_H_
-#define VM_LOG_H_
+#ifndef RUNTIME_VM_LOG_H_
+#define RUNTIME_VM_LOG_H_
 
 #include "vm/allocation.h"
 #include "vm/growable_array.h"
@@ -98,4 +98,4 @@
 
 }  // namespace dart
 
-#endif  // VM_LOG_H_
+#endif  // RUNTIME_VM_LOG_H_
diff --git a/runtime/vm/longjump.h b/runtime/vm/longjump.h
index ce4f813..b62230f 100644
--- a/runtime/vm/longjump.h
+++ b/runtime/vm/longjump.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 VM_LONGJUMP_H_
-#define VM_LONGJUMP_H_
+#ifndef RUNTIME_VM_LONGJUMP_H_
+#define RUNTIME_VM_LONGJUMP_H_
 
 #include <setjmp.h>
 
@@ -45,4 +45,4 @@
 
 }  // namespace dart
 
-#endif  // VM_LONGJUMP_H_
+#endif  // RUNTIME_VM_LONGJUMP_H_
diff --git a/runtime/vm/megamorphic_cache_table.h b/runtime/vm/megamorphic_cache_table.h
index 4c7242a..ee65118 100644
--- a/runtime/vm/megamorphic_cache_table.h
+++ b/runtime/vm/megamorphic_cache_table.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 VM_MEGAMORPHIC_CACHE_TABLE_H_
-#define VM_MEGAMORPHIC_CACHE_TABLE_H_
+#ifndef RUNTIME_VM_MEGAMORPHIC_CACHE_TABLE_H_
+#define RUNTIME_VM_MEGAMORPHIC_CACHE_TABLE_H_
 
 #include "vm/allocation.h"
 
@@ -34,4 +34,4 @@
 
 }  // namespace dart
 
-#endif  // VM_MEGAMORPHIC_CACHE_TABLE_H_
+#endif  // RUNTIME_VM_MEGAMORPHIC_CACHE_TABLE_H_
diff --git a/runtime/vm/memory_region.h b/runtime/vm/memory_region.h
index eaa5221..807588b 100644
--- a/runtime/vm/memory_region.h
+++ b/runtime/vm/memory_region.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 VM_MEMORY_REGION_H_
-#define VM_MEMORY_REGION_H_
+#ifndef RUNTIME_VM_MEMORY_REGION_H_
+#define RUNTIME_VM_MEMORY_REGION_H_
 
 #include "platform/assert.h"
 #include "vm/allocation.h"
@@ -79,4 +79,4 @@
 
 }  // namespace dart
 
-#endif  // VM_MEMORY_REGION_H_
+#endif  // RUNTIME_VM_MEMORY_REGION_H_
diff --git a/runtime/vm/message.h b/runtime/vm/message.h
index aaa14c7..7227e73 100644
--- a/runtime/vm/message.h
+++ b/runtime/vm/message.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 VM_MESSAGE_H_
-#define VM_MESSAGE_H_
+#ifndef RUNTIME_VM_MESSAGE_H_
+#define RUNTIME_VM_MESSAGE_H_
 
 #include "platform/assert.h"
 #include "vm/allocation.h"
@@ -169,4 +169,4 @@
 
 }  // namespace dart
 
-#endif  // VM_MESSAGE_H_
+#endif  // RUNTIME_VM_MESSAGE_H_
diff --git a/runtime/vm/message_handler.h b/runtime/vm/message_handler.h
index 825e3d3..150dac6 100644
--- a/runtime/vm/message_handler.h
+++ b/runtime/vm/message_handler.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 VM_MESSAGE_HANDLER_H_
-#define VM_MESSAGE_HANDLER_H_
+#ifndef RUNTIME_VM_MESSAGE_HANDLER_H_
+#define RUNTIME_VM_MESSAGE_HANDLER_H_
 
 #include "vm/isolate.h"
 #include "vm/lockers.h"
@@ -258,4 +258,4 @@
 
 }  // namespace dart
 
-#endif  // VM_MESSAGE_HANDLER_H_
+#endif  // RUNTIME_VM_MESSAGE_HANDLER_H_
diff --git a/runtime/vm/method_recognizer.h b/runtime/vm/method_recognizer.h
index 04f49ed..b110916 100644
--- a/runtime/vm/method_recognizer.h
+++ b/runtime/vm/method_recognizer.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 VM_METHOD_RECOGNIZER_H_
-#define VM_METHOD_RECOGNIZER_H_
+#ifndef RUNTIME_VM_METHOD_RECOGNIZER_H_
+#define RUNTIME_VM_METHOD_RECOGNIZER_H_
 
 #include "vm/allocation.h"
 
@@ -557,4 +557,4 @@
 
 }  // namespace dart
 
-#endif  // VM_METHOD_RECOGNIZER_H_
+#endif  // RUNTIME_VM_METHOD_RECOGNIZER_H_
diff --git a/runtime/vm/metrics.h b/runtime/vm/metrics.h
index c34f02d..6694585 100644
--- a/runtime/vm/metrics.h
+++ b/runtime/vm/metrics.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 VM_METRICS_H_
-#define VM_METRICS_H_
+#ifndef RUNTIME_VM_METRICS_H_
+#define RUNTIME_VM_METRICS_H_
 
 #include "vm/allocation.h"
 
@@ -179,4 +179,4 @@
 
 }  // namespace dart
 
-#endif  // VM_METRICS_H_
+#endif  // RUNTIME_VM_METRICS_H_
diff --git a/runtime/vm/native_arguments.h b/runtime/vm/native_arguments.h
index 2f94d8f..3586569 100644
--- a/runtime/vm/native_arguments.h
+++ b/runtime/vm/native_arguments.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 VM_NATIVE_ARGUMENTS_H_
-#define VM_NATIVE_ARGUMENTS_H_
+#ifndef RUNTIME_VM_NATIVE_ARGUMENTS_H_
+#define RUNTIME_VM_NATIVE_ARGUMENTS_H_
 
 #include "platform/assert.h"
 #include "platform/memory_sanitizer.h"
@@ -262,4 +262,4 @@
 
 }  // namespace dart
 
-#endif  // VM_NATIVE_ARGUMENTS_H_
+#endif  // RUNTIME_VM_NATIVE_ARGUMENTS_H_
diff --git a/runtime/vm/native_entry.h b/runtime/vm/native_entry.h
index 4be2cc3..72531fa 100644
--- a/runtime/vm/native_entry.h
+++ b/runtime/vm/native_entry.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 VM_NATIVE_ENTRY_H_
-#define VM_NATIVE_ENTRY_H_
+#ifndef RUNTIME_VM_NATIVE_ENTRY_H_
+#define RUNTIME_VM_NATIVE_ENTRY_H_
 
 #include "platform/memory_sanitizer.h"
 
@@ -134,4 +134,4 @@
 
 }  // namespace dart
 
-#endif  // VM_NATIVE_ENTRY_H_
+#endif  // RUNTIME_VM_NATIVE_ENTRY_H_
diff --git a/runtime/vm/native_entry_test.h b/runtime/vm/native_entry_test.h
index 706b4b6..682221a 100644
--- a/runtime/vm/native_entry_test.h
+++ b/runtime/vm/native_entry_test.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 VM_NATIVE_ENTRY_TEST_H_
-#define VM_NATIVE_ENTRY_TEST_H_
+#ifndef RUNTIME_VM_NATIVE_ENTRY_TEST_H_
+#define RUNTIME_VM_NATIVE_ENTRY_TEST_H_
 
 #include "include/dart_api.h"
 #include "vm/runtime_entry.h"
@@ -16,4 +16,4 @@
 
 }  // namespace dart
 
-#endif  // VM_NATIVE_ENTRY_TEST_H_
+#endif  // RUNTIME_VM_NATIVE_ENTRY_TEST_H_
diff --git a/runtime/vm/native_message_handler.h b/runtime/vm/native_message_handler.h
index 9a34c77..7133662 100644
--- a/runtime/vm/native_message_handler.h
+++ b/runtime/vm/native_message_handler.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 VM_NATIVE_MESSAGE_HANDLER_H_
-#define VM_NATIVE_MESSAGE_HANDLER_H_
+#ifndef RUNTIME_VM_NATIVE_MESSAGE_HANDLER_H_
+#define RUNTIME_VM_NATIVE_MESSAGE_HANDLER_H_
 
 #include "include/dart_api.h"
 #include "include/dart_native_api.h"
@@ -38,4 +38,4 @@
 
 }  // namespace dart
 
-#endif  // VM_NATIVE_MESSAGE_HANDLER_H_
+#endif  // RUNTIME_VM_NATIVE_MESSAGE_HANDLER_H_
diff --git a/runtime/vm/native_symbol.h b/runtime/vm/native_symbol.h
index dec113a..f82f314 100644
--- a/runtime/vm/native_symbol.h
+++ b/runtime/vm/native_symbol.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 VM_NATIVE_SYMBOL_H_
-#define VM_NATIVE_SYMBOL_H_
+#ifndef RUNTIME_VM_NATIVE_SYMBOL_H_
+#define RUNTIME_VM_NATIVE_SYMBOL_H_
 
 #include "vm/allocation.h"
 #include "vm/globals.h"
@@ -23,4 +23,4 @@
 
 }  // namespace dart
 
-#endif  // VM_NATIVE_SYMBOL_H_
+#endif  // RUNTIME_VM_NATIVE_SYMBOL_H_
diff --git a/runtime/vm/object.cc b/runtime/vm/object.cc
index 58213ac..819ee3c 100644
--- a/runtime/vm/object.cc
+++ b/runtime/vm/object.cc
@@ -15655,7 +15655,8 @@
     const Class& scope_cls = Class::Handle(type.type_class());
     ASSERT(scope_cls.NumTypeArguments() > 0);
     TypeArguments& type_arguments = TypeArguments::Handle(GetTypeArguments());
-    type = Type::New(scope_cls, type_arguments, TokenPosition::kNoSource);
+    type = Type::New(
+        scope_cls, type_arguments, TokenPosition::kNoSource, Heap::kNew);
     type.set_signature(signature);
     type.SetIsFinalized();
     type ^= type.Canonicalize();
@@ -17405,7 +17406,11 @@
     type ^= table.GetOrNull(CanonicalTypeKey(*this));
     if (type.IsNull()) {
       // Add this Type into the canonical list of types.
-      type ^= raw();
+      if (this->IsNew()) {
+        type ^= Object::Clone(*this, Heap::kOld);
+      } else {
+        type ^= this->raw();
+      }
       ASSERT(type.IsOld());
       type.SetCanonical();  // Mark object as being canonical.
       bool present = table.Insert(type);
diff --git a/runtime/vm/object.h b/runtime/vm/object.h
index 5f8ddbf..dcc86c7 100644
--- a/runtime/vm/object.h
+++ b/runtime/vm/object.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 VM_OBJECT_H_
-#define VM_OBJECT_H_
+#ifndef RUNTIME_VM_OBJECT_H_
+#define RUNTIME_VM_OBJECT_H_
 
 #include "include/dart_api.h"
 #include "platform/assert.h"
@@ -9017,4 +9017,4 @@
 
 }  // namespace dart
 
-#endif  // VM_OBJECT_H_
+#endif  // RUNTIME_VM_OBJECT_H_
diff --git a/runtime/vm/object_graph.h b/runtime/vm/object_graph.h
index 70091d6..e42e419 100644
--- a/runtime/vm/object_graph.h
+++ b/runtime/vm/object_graph.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 VM_OBJECT_GRAPH_H_
-#define VM_OBJECT_GRAPH_H_
+#ifndef RUNTIME_VM_OBJECT_GRAPH_H_
+#define RUNTIME_VM_OBJECT_GRAPH_H_
 
 #include "vm/allocation.h"
 #include "vm/object.h"
@@ -105,4 +105,4 @@
 
 }  // namespace dart
 
-#endif  // VM_OBJECT_GRAPH_H_
+#endif  // RUNTIME_VM_OBJECT_GRAPH_H_
diff --git a/runtime/vm/object_id_ring.h b/runtime/vm/object_id_ring.h
index b3ad0c9..7b0fcde 100644
--- a/runtime/vm/object_id_ring.h
+++ b/runtime/vm/object_id_ring.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 VM_OBJECT_ID_RING_H_
-#define VM_OBJECT_ID_RING_H_
+#ifndef RUNTIME_VM_OBJECT_ID_RING_H_
+#define RUNTIME_VM_OBJECT_ID_RING_H_
 
 namespace dart {
 
@@ -86,4 +86,4 @@
 
 }  // namespace dart
 
-#endif  // VM_OBJECT_ID_RING_H_
+#endif  // RUNTIME_VM_OBJECT_ID_RING_H_
diff --git a/runtime/vm/object_set.h b/runtime/vm/object_set.h
index 8ba53ba..f4031fb 100644
--- a/runtime/vm/object_set.h
+++ b/runtime/vm/object_set.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 VM_OBJECT_SET_H_
-#define VM_OBJECT_SET_H_
+#ifndef RUNTIME_VM_OBJECT_SET_H_
+#define RUNTIME_VM_OBJECT_SET_H_
 
 #include "platform/utils.h"
 #include "vm/bit_vector.h"
@@ -90,4 +90,4 @@
 
 }  // namespace dart
 
-#endif  // VM_OBJECT_SET_H_
+#endif  // RUNTIME_VM_OBJECT_SET_H_
diff --git a/runtime/vm/object_store.h b/runtime/vm/object_store.h
index 33c25ec..8b5555a 100644
--- a/runtime/vm/object_store.h
+++ b/runtime/vm/object_store.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 VM_OBJECT_STORE_H_
-#define VM_OBJECT_STORE_H_
+#ifndef RUNTIME_VM_OBJECT_STORE_H_
+#define RUNTIME_VM_OBJECT_STORE_H_
 
 #include "vm/object.h"
 
@@ -639,4 +639,4 @@
 
 }  // namespace dart
 
-#endif  // VM_OBJECT_STORE_H_
+#endif  // RUNTIME_VM_OBJECT_STORE_H_
diff --git a/runtime/vm/os.h b/runtime/vm/os.h
index c36c8ed..e381269 100644
--- a/runtime/vm/os.h
+++ b/runtime/vm/os.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 VM_OS_H_
-#define VM_OS_H_
+#ifndef RUNTIME_VM_OS_H_
+#define RUNTIME_VM_OS_H_
 
 #include "vm/globals.h"
 
@@ -156,4 +156,4 @@
 
 }  // namespace dart
 
-#endif  // VM_OS_H_
+#endif  // RUNTIME_VM_OS_H_
diff --git a/runtime/vm/os_thread.h b/runtime/vm/os_thread.h
index e950832..00fad7c 100644
--- a/runtime/vm/os_thread.h
+++ b/runtime/vm/os_thread.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 VM_OS_THREAD_H_
-#define VM_OS_THREAD_H_
+#ifndef RUNTIME_VM_OS_THREAD_H_
+#define RUNTIME_VM_OS_THREAD_H_
 
 #include "platform/globals.h"
 #include "vm/allocation.h"
@@ -360,4 +360,4 @@
 }  // namespace dart
 
 
-#endif  // VM_OS_THREAD_H_
+#endif  // RUNTIME_VM_OS_THREAD_H_
diff --git a/runtime/vm/os_thread_android.h b/runtime/vm/os_thread_android.h
index c4f3981..0954712 100644
--- a/runtime/vm/os_thread_android.h
+++ b/runtime/vm/os_thread_android.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 VM_OS_THREAD_ANDROID_H_
-#define VM_OS_THREAD_ANDROID_H_
+#ifndef RUNTIME_VM_OS_THREAD_ANDROID_H_
+#define RUNTIME_VM_OS_THREAD_ANDROID_H_
 
-#if !defined(VM_OS_THREAD_H_)
+#if !defined(RUNTIME_VM_OS_THREAD_H_)
 #error Do not include os_thread_android.h directly; use os_thread.h instead.
 #endif
 
@@ -77,4 +77,4 @@
 
 }  // namespace dart
 
-#endif  // VM_OS_THREAD_ANDROID_H_
+#endif  // RUNTIME_VM_OS_THREAD_ANDROID_H_
diff --git a/runtime/vm/os_thread_fuchsia.h b/runtime/vm/os_thread_fuchsia.h
index b45207b..b9275f9 100644
--- a/runtime/vm/os_thread_fuchsia.h
+++ b/runtime/vm/os_thread_fuchsia.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 VM_OS_THREAD_FUCHSIA_H_
-#define VM_OS_THREAD_FUCHSIA_H_
+#ifndef RUNTIME_VM_OS_THREAD_FUCHSIA_H_
+#define RUNTIME_VM_OS_THREAD_FUCHSIA_H_
 
-#if !defined(VM_OS_THREAD_H_)
+#if !defined(RUNTIME_VM_OS_THREAD_H_)
 #error Do not include os_thread_fuchsia.h directly; use os_thread.h instead.
 #endif
 
@@ -77,4 +77,4 @@
 
 }  // namespace dart
 
-#endif  // VM_OS_THREAD_FUCHSIA_H_
+#endif  // RUNTIME_VM_OS_THREAD_FUCHSIA_H_
diff --git a/runtime/vm/os_thread_linux.h b/runtime/vm/os_thread_linux.h
index 306229b..4ee2473 100644
--- a/runtime/vm/os_thread_linux.h
+++ b/runtime/vm/os_thread_linux.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 VM_OS_THREAD_LINUX_H_
-#define VM_OS_THREAD_LINUX_H_
+#ifndef RUNTIME_VM_OS_THREAD_LINUX_H_
+#define RUNTIME_VM_OS_THREAD_LINUX_H_
 
-#if !defined(VM_OS_THREAD_H_)
+#if !defined(RUNTIME_VM_OS_THREAD_H_)
 #error Do not include os_thread_linux.h directly; use os_thread.h instead.
 #endif
 
@@ -77,4 +77,4 @@
 
 }  // namespace dart
 
-#endif  // VM_OS_THREAD_LINUX_H_
+#endif  // RUNTIME_VM_OS_THREAD_LINUX_H_
diff --git a/runtime/vm/os_thread_macos.h b/runtime/vm/os_thread_macos.h
index 4909edf..2a2fcf5 100644
--- a/runtime/vm/os_thread_macos.h
+++ b/runtime/vm/os_thread_macos.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 VM_OS_THREAD_MACOS_H_
-#define VM_OS_THREAD_MACOS_H_
+#ifndef RUNTIME_VM_OS_THREAD_MACOS_H_
+#define RUNTIME_VM_OS_THREAD_MACOS_H_
 
-#if !defined(VM_OS_THREAD_H_)
+#if !defined(RUNTIME_VM_OS_THREAD_H_)
 #error Do not include os_thread_macos.h directly; use os_thread.h instead.
 #endif
 
@@ -78,4 +78,4 @@
 
 }  // namespace dart
 
-#endif  // VM_OS_THREAD_MACOS_H_
+#endif  // RUNTIME_VM_OS_THREAD_MACOS_H_
diff --git a/runtime/vm/os_thread_win.h b/runtime/vm/os_thread_win.h
index 913b074..714d175 100644
--- a/runtime/vm/os_thread_win.h
+++ b/runtime/vm/os_thread_win.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 VM_OS_THREAD_WIN_H_
-#define VM_OS_THREAD_WIN_H_
+#ifndef RUNTIME_VM_OS_THREAD_WIN_H_
+#define RUNTIME_VM_OS_THREAD_WIN_H_
 
-#if !defined(VM_OS_THREAD_H_)
+#if !defined(RUNTIME_VM_OS_THREAD_H_)
 #error Do not include os_thread_win.h directly; use os_thread.h instead.
 #endif
 
@@ -173,4 +173,4 @@
 
 }  // namespace dart
 
-#endif  // VM_OS_THREAD_WIN_H_
+#endif  // RUNTIME_VM_OS_THREAD_WIN_H_
diff --git a/runtime/vm/pages.h b/runtime/vm/pages.h
index 06e3ab5..ff7a0e8 100644
--- a/runtime/vm/pages.h
+++ b/runtime/vm/pages.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 VM_PAGES_H_
-#define VM_PAGES_H_
+#ifndef RUNTIME_VM_PAGES_H_
+#define RUNTIME_VM_PAGES_H_
 
 #include "vm/freelist.h"
 #include "vm/globals.h"
@@ -468,4 +468,4 @@
 
 }  // namespace dart
 
-#endif  // VM_PAGES_H_
+#endif  // RUNTIME_VM_PAGES_H_
diff --git a/runtime/vm/parser.cc b/runtime/vm/parser.cc
index 868c27b..a685452 100644
--- a/runtime/vm/parser.cc
+++ b/runtime/vm/parser.cc
@@ -3504,12 +3504,10 @@
     ASSERT(AbstractType::Handle(Z, func.result_type()).IsResolved());
     ASSERT(func.NumParameters() == params.parameters->length());
     if (!Function::Handle(func.parent_function()).IsGetterFunction()) {
-      // Parse and discard any formal parameters. They are accessed as
-      // context variables.
-      ParamList discarded_params;
-      ParseFormalParameterList(allow_explicit_default_values,
-                               false,
-                               &discarded_params);
+      // Skip formal parameters. They are accessed as context variables.
+      // Parsing them again (and discarding them) does not work in case of
+      // default values with same name as already parsed formal parameter.
+      SkipToMatchingParenthesis();
     }
   } else if (func.IsSyncGenClosure()) {
     AddSyncGenClosureParameters(&params);
@@ -3517,12 +3515,10 @@
     AddFormalParamsToScope(&params, current_block_->scope);
     ASSERT(AbstractType::Handle(Z, func.result_type()).IsResolved());
     if (!Function::Handle(func.parent_function()).IsGetterFunction()) {
-      // Parse and discard any formal parameters. They are accessed as
-      // context variables.
-      ParamList discarded_params;
-      ParseFormalParameterList(allow_explicit_default_values,
-                               false,
-                               &discarded_params);
+      // Skip formal parameters. They are accessed as context variables.
+      // Parsing them again (and discarding them) does not work in case of
+      // default values with same name as already parsed formal parameter.
+      SkipToMatchingParenthesis();
     }
   } else if (func.IsAsyncGenClosure()) {
     AddAsyncGenClosureParameters(&params);
@@ -3531,12 +3527,10 @@
     ASSERT(AbstractType::Handle(Z, func.result_type()).IsResolved());
     ASSERT(func.NumParameters() == params.parameters->length());
     if (!Function::Handle(func.parent_function()).IsGetterFunction()) {
-      // Parse and discard any formal parameters. They are accessed as
-      // context variables.
-      ParamList discarded_params;
-      ParseFormalParameterList(allow_explicit_default_values,
-                               false,
-                               &discarded_params);
+      // Skip formal parameters. They are accessed as context variables.
+      // Parsing them again (and discarding them) does not work in case of
+      // default values with same name as already parsed formal parameter.
+      SkipToMatchingParenthesis();
     }
   } else {
     ParseFormalParameterList(allow_explicit_default_values, false, &params);
@@ -9246,7 +9240,7 @@
         new(Z) LocalVariable(loop_var_assignment_pos,
                              loop_var_assignment_pos,
                              *loop_var_name,
-                             loop_var_type);;
+                             loop_var_type);
     if (loop_var_is_final) {
       loop_var->set_is_final();
     }
@@ -9485,7 +9479,7 @@
        new(Z) LocalVariable(loop_var_pos,
                             loop_var_assignment_pos,
                             *loop_var_name,
-                            loop_var_type);;
+                            loop_var_type);
     if (loop_var_is_final) {
       loop_var->set_is_final();
     }
@@ -14702,10 +14696,7 @@
     ExpectIdentifier("function name expected");
   }
   if (CurrentToken() == Token::kLPAREN) {
-    const bool allow_explicit_default_values = true;
-    ParamList params;
-    params.skipped = true;
-    ParseFormalParameterList(allow_explicit_default_values, false, &params);
+    SkipToMatchingParenthesis();
   }
   RawFunction::AsyncModifier async_modifier = ParseFunctionModifier();
   BoolScope allow_await(&this->await_is_keyword_,
diff --git a/runtime/vm/parser.h b/runtime/vm/parser.h
index 0b37e12..b7c7b14 100644
--- a/runtime/vm/parser.h
+++ b/runtime/vm/parser.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 VM_PARSER_H_
-#define VM_PARSER_H_
+#ifndef RUNTIME_VM_PARSER_H_
+#define RUNTIME_VM_PARSER_H_
 
 #include "include/dart_api.h"
 
@@ -995,4 +995,4 @@
 
 }  // namespace dart
 
-#endif  // VM_PARSER_H_
+#endif  // RUNTIME_VM_PARSER_H_
diff --git a/runtime/vm/port.h b/runtime/vm/port.h
index 6e41e3a..113562e 100644
--- a/runtime/vm/port.h
+++ b/runtime/vm/port.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 VM_PORT_H_
-#define VM_PORT_H_
+#ifndef RUNTIME_VM_PORT_H_
+#define RUNTIME_VM_PORT_H_
 
 #include "include/dart_api.h"
 #include "vm/allocation.h"
@@ -102,4 +102,4 @@
 
 }  // namespace dart
 
-#endif  // VM_PORT_H_
+#endif  // RUNTIME_VM_PORT_H_
diff --git a/runtime/vm/precompiler.h b/runtime/vm/precompiler.h
index 90b5f82..e10247c 100644
--- a/runtime/vm/precompiler.h
+++ b/runtime/vm/precompiler.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 VM_PRECOMPILER_H_
-#define VM_PRECOMPILER_H_
+#ifndef RUNTIME_VM_PRECOMPILER_H_
+#define RUNTIME_VM_PRECOMPILER_H_
 
 #include "vm/allocation.h"
 #include "vm/hash_map.h"
@@ -501,4 +501,4 @@
 
 }  // namespace dart
 
-#endif  // VM_PRECOMPILER_H_
+#endif  // RUNTIME_VM_PRECOMPILER_H_
diff --git a/runtime/vm/proccpuinfo.h b/runtime/vm/proccpuinfo.h
index 0814c6a..e81d7ee 100644
--- a/runtime/vm/proccpuinfo.h
+++ b/runtime/vm/proccpuinfo.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 VM_PROCCPUINFO_H_
-#define VM_PROCCPUINFO_H_
+#ifndef RUNTIME_VM_PROCCPUINFO_H_
+#define RUNTIME_VM_PROCCPUINFO_H_
 
 #include "vm/globals.h"
 #if defined(TARGET_OS_LINUX) || defined(TARGET_OS_ANDROID)
@@ -31,4 +31,4 @@
 
 #endif  // defined(TARGET_OS_LINUX) || defined(TARGET_OS_ANDROID)
 
-#endif  // VM_PROCCPUINFO_H_
+#endif  // RUNTIME_VM_PROCCPUINFO_H_
diff --git a/runtime/vm/profiler.h b/runtime/vm/profiler.h
index 529a193..4f7ce96 100644
--- a/runtime/vm/profiler.h
+++ b/runtime/vm/profiler.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 VM_PROFILER_H_
-#define VM_PROFILER_H_
+#ifndef RUNTIME_VM_PROFILER_H_
+#define RUNTIME_VM_PROFILER_H_
 
 #include "vm/allocation.h"
 #include "vm/bitfield.h"
@@ -684,4 +684,4 @@
 
 }  // namespace dart
 
-#endif  // VM_PROFILER_H_
+#endif  // RUNTIME_VM_PROFILER_H_
diff --git a/runtime/vm/profiler_service.h b/runtime/vm/profiler_service.h
index 0e0e6d3..61c8891 100644
--- a/runtime/vm/profiler_service.h
+++ b/runtime/vm/profiler_service.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 VM_PROFILER_SERVICE_H_
-#define VM_PROFILER_SERVICE_H_
+#ifndef RUNTIME_VM_PROFILER_SERVICE_H_
+#define RUNTIME_VM_PROFILER_SERVICE_H_
 
 #include "vm/allocation.h"
 #include "vm/code_observers.h"
@@ -472,4 +472,4 @@
 
 }  // namespace dart
 
-#endif  // VM_PROFILER_SERVICE_H_
+#endif  // RUNTIME_VM_PROFILER_SERVICE_H_
diff --git a/runtime/vm/random.h b/runtime/vm/random.h
index f5614de..311760f8 100644
--- a/runtime/vm/random.h
+++ b/runtime/vm/random.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 VM_RANDOM_H_
-#define VM_RANDOM_H_
+#ifndef RUNTIME_VM_RANDOM_H_
+#define RUNTIME_VM_RANDOM_H_
 
 #include "vm/globals.h"
 #include "vm/allocation.h"
@@ -34,4 +34,4 @@
 
 }  // namespace dart
 
-#endif  // VM_RANDOM_H_
+#endif  // RUNTIME_VM_RANDOM_H_
diff --git a/runtime/vm/raw_object.h b/runtime/vm/raw_object.h
index dcf3992..cb47575 100644
--- a/runtime/vm/raw_object.h
+++ b/runtime/vm/raw_object.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 VM_RAW_OBJECT_H_
-#define VM_RAW_OBJECT_H_
+#ifndef RUNTIME_VM_RAW_OBJECT_H_
+#define RUNTIME_VM_RAW_OBJECT_H_
 
 #include "platform/assert.h"
 #include "vm/atomic.h"
@@ -2493,4 +2493,4 @@
 
 }  // namespace dart
 
-#endif  // VM_RAW_OBJECT_H_
+#endif  // RUNTIME_VM_RAW_OBJECT_H_
diff --git a/runtime/vm/redundancy_elimination.h b/runtime/vm/redundancy_elimination.h
index 73a9850..8fc6dc4 100644
--- a/runtime/vm/redundancy_elimination.h
+++ b/runtime/vm/redundancy_elimination.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 VM_REDUNDANCY_ELIMINATION_H_
-#define VM_REDUNDANCY_ELIMINATION_H_
+#ifndef RUNTIME_VM_REDUNDANCY_ELIMINATION_H_
+#define RUNTIME_VM_REDUNDANCY_ELIMINATION_H_
 
 #include "vm/intermediate_language.h"
 #include "vm/flow_graph.h"
@@ -146,4 +146,4 @@
 
 }  // namespace dart
 
-#endif  // VM_REDUNDANCY_ELIMINATION_H_
+#endif  // RUNTIME_VM_REDUNDANCY_ELIMINATION_H_
diff --git a/runtime/vm/regexp.cc b/runtime/vm/regexp.cc
index 9edfbf6..2b9df95 100644
--- a/runtime/vm/regexp.cc
+++ b/runtime/vm/regexp.cc
@@ -1234,7 +1234,7 @@
       last - first > kSize * 2 &&
       binary_chop_index > *new_start_index &&
       ranges->At(binary_chop_index) >= first + 2 * kSize) {
-    intptr_t scan_forward_for_section_border = binary_chop_index;;
+    intptr_t scan_forward_for_section_border = binary_chop_index;
     intptr_t new_border = (ranges->At(binary_chop_index) | kMask) + 1;
 
     while (scan_forward_for_section_border < end_index) {
diff --git a/runtime/vm/regexp.h b/runtime/vm/regexp.h
index bc8edd5..bf457be 100644
--- a/runtime/vm/regexp.h
+++ b/runtime/vm/regexp.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 VM_REGEXP_H_
-#define VM_REGEXP_H_
+#ifndef RUNTIME_VM_REGEXP_H_
+#define RUNTIME_VM_REGEXP_H_
 
 #include "vm/assembler.h"
 #include "vm/intermediate_language.h"
@@ -1435,4 +1435,4 @@
 
 }  // namespace dart
 
-#endif  // VM_REGEXP_H_
+#endif  // RUNTIME_VM_REGEXP_H_
diff --git a/runtime/vm/regexp_assembler.h b/runtime/vm/regexp_assembler.h
index efd53c5..399ae7f 100644
--- a/runtime/vm/regexp_assembler.h
+++ b/runtime/vm/regexp_assembler.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 VM_REGEXP_ASSEMBLER_H_
-#define VM_REGEXP_ASSEMBLER_H_
+#ifndef RUNTIME_VM_REGEXP_ASSEMBLER_H_
+#define RUNTIME_VM_REGEXP_ASSEMBLER_H_
 
 #include "vm/assembler.h"
 #include "vm/intermediate_language.h"
@@ -241,4 +241,4 @@
 
 }  // namespace dart
 
-#endif  // VM_REGEXP_ASSEMBLER_H_
+#endif  // RUNTIME_VM_REGEXP_ASSEMBLER_H_
diff --git a/runtime/vm/regexp_assembler_bytecode.h b/runtime/vm/regexp_assembler_bytecode.h
index da2a6d7..eec47a4 100644
--- a/runtime/vm/regexp_assembler_bytecode.h
+++ b/runtime/vm/regexp_assembler_bytecode.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 VM_REGEXP_ASSEMBLER_BYTECODE_H_
-#define VM_REGEXP_ASSEMBLER_BYTECODE_H_
+#ifndef RUNTIME_VM_REGEXP_ASSEMBLER_BYTECODE_H_
+#define RUNTIME_VM_REGEXP_ASSEMBLER_BYTECODE_H_
 
 #include "vm/object.h"
 #include "vm/regexp_assembler.h"
@@ -141,4 +141,4 @@
 
 }  // namespace dart
 
-#endif  // VM_REGEXP_ASSEMBLER_BYTECODE_H_
+#endif  // RUNTIME_VM_REGEXP_ASSEMBLER_BYTECODE_H_
diff --git a/runtime/vm/regexp_assembler_bytecode_inl.h b/runtime/vm/regexp_assembler_bytecode_inl.h
index 2b370db..d3855c7 100644
--- a/runtime/vm/regexp_assembler_bytecode_inl.h
+++ b/runtime/vm/regexp_assembler_bytecode_inl.h
@@ -6,8 +6,8 @@
 
 #include "vm/regexp_bytecodes.h"
 
-#ifndef VM_REGEXP_ASSEMBLER_BYTECODE_INL_H_
-#define VM_REGEXP_ASSEMBLER_BYTECODE_INL_H_
+#ifndef RUNTIME_VM_REGEXP_ASSEMBLER_BYTECODE_INL_H_
+#define RUNTIME_VM_REGEXP_ASSEMBLER_BYTECODE_INL_H_
 
 namespace dart {
 
@@ -54,4 +54,4 @@
 
 }  // namespace dart
 
-#endif  // VM_REGEXP_ASSEMBLER_BYTECODE_INL_H_
+#endif  // RUNTIME_VM_REGEXP_ASSEMBLER_BYTECODE_INL_H_
diff --git a/runtime/vm/regexp_assembler_ir.h b/runtime/vm/regexp_assembler_ir.h
index f898346..8aae558 100644
--- a/runtime/vm/regexp_assembler_ir.h
+++ b/runtime/vm/regexp_assembler_ir.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 VM_REGEXP_ASSEMBLER_IR_H_
-#define VM_REGEXP_ASSEMBLER_IR_H_
+#ifndef RUNTIME_VM_REGEXP_ASSEMBLER_IR_H_
+#define RUNTIME_VM_REGEXP_ASSEMBLER_IR_H_
 
 #include "vm/assembler.h"
 #include "vm/intermediate_language.h"
@@ -432,4 +432,4 @@
 
 }  // namespace dart
 
-#endif  // VM_REGEXP_ASSEMBLER_IR_H_
+#endif  // RUNTIME_VM_REGEXP_ASSEMBLER_IR_H_
diff --git a/runtime/vm/regexp_ast.h b/runtime/vm/regexp_ast.h
index 2be61ec..1eca49b 100644
--- a/runtime/vm/regexp_ast.h
+++ b/runtime/vm/regexp_ast.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 VM_REGEXP_AST_H_
-#define VM_REGEXP_AST_H_
+#ifndef RUNTIME_VM_REGEXP_AST_H_
+#define RUNTIME_VM_REGEXP_AST_H_
 
 #include "platform/globals.h"
 #include "platform/utils.h"
@@ -389,4 +389,4 @@
 
 }  // namespace dart
 
-#endif  // VM_REGEXP_AST_H_
+#endif  // RUNTIME_VM_REGEXP_AST_H_
diff --git a/runtime/vm/regexp_bytecodes.h b/runtime/vm/regexp_bytecodes.h
index 8d1cddb..67d26dc 100644
--- a/runtime/vm/regexp_bytecodes.h
+++ b/runtime/vm/regexp_bytecodes.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 VM_REGEXP_BYTECODES_H_
-#define VM_REGEXP_BYTECODES_H_
+#ifndef RUNTIME_VM_REGEXP_BYTECODES_H_
+#define RUNTIME_VM_REGEXP_BYTECODES_H_
 
 namespace dart {
 
@@ -76,4 +76,4 @@
 
 }  // namespace dart
 
-#endif  // VM_REGEXP_BYTECODES_H_
+#endif  // RUNTIME_VM_REGEXP_BYTECODES_H_
diff --git a/runtime/vm/regexp_interpreter.h b/runtime/vm/regexp_interpreter.h
index eab89cb..e6b1898 100644
--- a/runtime/vm/regexp_interpreter.h
+++ b/runtime/vm/regexp_interpreter.h
@@ -4,8 +4,8 @@
 
 // A simple interpreter for the Irregexp byte code.
 
-#ifndef VM_REGEXP_INTERPRETER_H_
-#define VM_REGEXP_INTERPRETER_H_
+#ifndef RUNTIME_VM_REGEXP_INTERPRETER_H_
+#define RUNTIME_VM_REGEXP_INTERPRETER_H_
 
 #include "vm/allocation.h"
 #include "vm/object.h"
@@ -30,4 +30,4 @@
 
 }  // namespace dart
 
-#endif  // VM_REGEXP_INTERPRETER_H_
+#endif  // RUNTIME_VM_REGEXP_INTERPRETER_H_
diff --git a/runtime/vm/regexp_parser.h b/runtime/vm/regexp_parser.h
index aed1423..5108e93 100644
--- a/runtime/vm/regexp_parser.h
+++ b/runtime/vm/regexp_parser.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 VM_REGEXP_PARSER_H_
-#define VM_REGEXP_PARSER_H_
+#ifndef RUNTIME_VM_REGEXP_PARSER_H_
+#define RUNTIME_VM_REGEXP_PARSER_H_
 
 #include "vm/allocation.h"
 #include "vm/growable_array.h"
@@ -173,4 +173,4 @@
 
 }  // namespace dart
 
-#endif  // VM_REGEXP_PARSER_H_
+#endif  // RUNTIME_VM_REGEXP_PARSER_H_
diff --git a/runtime/vm/report.h b/runtime/vm/report.h
index f95cb84..e2efa54 100644
--- a/runtime/vm/report.h
+++ b/runtime/vm/report.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 VM_REPORT_H_
-#define VM_REPORT_H_
+#ifndef RUNTIME_VM_REPORT_H_
+#define RUNTIME_VM_REPORT_H_
 
 #include "vm/allocation.h"
 #include "vm/token_position.h"
@@ -68,5 +68,5 @@
 
 }  // namespace dart
 
-#endif  // VM_REPORT_H_
+#endif  // RUNTIME_VM_REPORT_H_
 
diff --git a/runtime/vm/resolver.h b/runtime/vm/resolver.h
index 9a52ad3..620bb52 100644
--- a/runtime/vm/resolver.h
+++ b/runtime/vm/resolver.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 VM_RESOLVER_H_
-#define VM_RESOLVER_H_
+#ifndef RUNTIME_VM_RESOLVER_H_
+#define RUNTIME_VM_RESOLVER_H_
 
 #include "vm/allocation.h"
 
@@ -71,4 +71,4 @@
 
 }  // namespace dart
 
-#endif  // VM_RESOLVER_H_
+#endif  // RUNTIME_VM_RESOLVER_H_
diff --git a/runtime/vm/reusable_handles.h b/runtime/vm/reusable_handles.h
index 25e5154..83855d6 100644
--- a/runtime/vm/reusable_handles.h
+++ b/runtime/vm/reusable_handles.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 VM_REUSABLE_HANDLES_H_
-#define VM_REUSABLE_HANDLES_H_
+#ifndef RUNTIME_VM_REUSABLE_HANDLES_H_
+#define RUNTIME_VM_REUSABLE_HANDLES_H_
 
 #include "vm/allocation.h"
 #include "vm/handles.h"
@@ -121,4 +121,4 @@
 
 }  // namespace dart
 
-#endif  // VM_REUSABLE_HANDLES_H_
+#endif  // RUNTIME_VM_REUSABLE_HANDLES_H_
diff --git a/runtime/vm/ring_buffer.h b/runtime/vm/ring_buffer.h
index e015930..77f6314 100644
--- a/runtime/vm/ring_buffer.h
+++ b/runtime/vm/ring_buffer.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 VM_RING_BUFFER_H_
-#define VM_RING_BUFFER_H_
+#ifndef RUNTIME_VM_RING_BUFFER_H_
+#define RUNTIME_VM_RING_BUFFER_H_
 
 #include "platform/assert.h"
 #include "platform/utils.h"
@@ -40,4 +40,4 @@
 
 }  // namespace dart
 
-#endif  // VM_RING_BUFFER_H_
+#endif  // RUNTIME_VM_RING_BUFFER_H_
diff --git a/runtime/vm/runtime_entry.h b/runtime/vm/runtime_entry.h
index c52b6b5..93f4048 100644
--- a/runtime/vm/runtime_entry.h
+++ b/runtime/vm/runtime_entry.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 VM_RUNTIME_ENTRY_H_
-#define VM_RUNTIME_ENTRY_H_
+#ifndef RUNTIME_VM_RUNTIME_ENTRY_H_
+#define RUNTIME_VM_RUNTIME_ENTRY_H_
 
 #include "vm/allocation.h"
 #include "vm/flags.h"
@@ -186,4 +186,4 @@
 
 }  // namespace dart
 
-#endif  // VM_RUNTIME_ENTRY_H_
+#endif  // RUNTIME_VM_RUNTIME_ENTRY_H_
diff --git a/runtime/vm/runtime_entry_list.h b/runtime/vm/runtime_entry_list.h
index 9564146..835cf3c 100644
--- a/runtime/vm/runtime_entry_list.h
+++ b/runtime/vm/runtime_entry_list.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 VM_RUNTIME_ENTRY_LIST_H_
-#define VM_RUNTIME_ENTRY_LIST_H_
+#ifndef RUNTIME_VM_RUNTIME_ENTRY_LIST_H_
+#define RUNTIME_VM_RUNTIME_ENTRY_LIST_H_
 
 namespace dart {
 
@@ -72,4 +72,4 @@
 
 }  // namespace dart
 
-#endif  // VM_RUNTIME_ENTRY_LIST_H_
+#endif  // RUNTIME_VM_RUNTIME_ENTRY_LIST_H_
diff --git a/runtime/vm/safepoint.h b/runtime/vm/safepoint.h
index 15c2c98..8a48f29 100644
--- a/runtime/vm/safepoint.h
+++ b/runtime/vm/safepoint.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 VM_SAFEPOINT_H_
-#define VM_SAFEPOINT_H_
+#ifndef RUNTIME_VM_SAFEPOINT_H_
+#define RUNTIME_VM_SAFEPOINT_H_
 
 #include "vm/globals.h"
 #include "vm/lockers.h"
@@ -384,4 +384,4 @@
 
 }  // namespace dart
 
-#endif  // VM_SAFEPOINT_H_
+#endif  // RUNTIME_VM_SAFEPOINT_H_
diff --git a/runtime/vm/scanner.h b/runtime/vm/scanner.h
index 30bc81e..aff5b3a 100644
--- a/runtime/vm/scanner.h
+++ b/runtime/vm/scanner.h
@@ -6,8 +6,8 @@
 // and produces a stream of tokens which is used by the parser.
 //
 
-#ifndef VM_SCANNER_H_
-#define VM_SCANNER_H_
+#ifndef RUNTIME_VM_SCANNER_H_
+#define RUNTIME_VM_SCANNER_H_
 
 #include "vm/growable_array.h"
 #include "vm/token.h"
@@ -218,4 +218,4 @@
 
 }  // namespace dart
 
-#endif  // VM_SCANNER_H_
+#endif  // RUNTIME_VM_SCANNER_H_
diff --git a/runtime/vm/scavenger.h b/runtime/vm/scavenger.h
index 798470c..caa2daf 100644
--- a/runtime/vm/scavenger.h
+++ b/runtime/vm/scavenger.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 VM_SCAVENGER_H_
-#define VM_SCAVENGER_H_
+#ifndef RUNTIME_VM_SCAVENGER_H_
+#define RUNTIME_VM_SCAVENGER_H_
 
 #include "platform/assert.h"
 #include "platform/utils.h"
@@ -312,4 +312,4 @@
 
 }  // namespace dart
 
-#endif  // VM_SCAVENGER_H_
+#endif  // RUNTIME_VM_SCAVENGER_H_
diff --git a/runtime/vm/scope_timer.h b/runtime/vm/scope_timer.h
index c60e67f..f45854e 100644
--- a/runtime/vm/scope_timer.h
+++ b/runtime/vm/scope_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 VM_SCOPE_TIMER_H_
-#define VM_SCOPE_TIMER_H_
+#ifndef RUNTIME_VM_SCOPE_TIMER_H_
+#define RUNTIME_VM_SCOPE_TIMER_H_
 
 #include "platform/globals.h"
 
@@ -45,4 +45,4 @@
 
 }  // namespace dart
 
-#endif  // VM_SCOPE_TIMER_H_
+#endif  // RUNTIME_VM_SCOPE_TIMER_H_
diff --git a/runtime/vm/scopes.h b/runtime/vm/scopes.h
index c3b7611..69551d0 100644
--- a/runtime/vm/scopes.h
+++ b/runtime/vm/scopes.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 VM_SCOPES_H_
-#define VM_SCOPES_H_
+#ifndef RUNTIME_VM_SCOPES_H_
+#define RUNTIME_VM_SCOPES_H_
 
 #include "platform/assert.h"
 #include "platform/globals.h"
@@ -397,4 +397,4 @@
 
 }  // namespace dart
 
-#endif  // VM_SCOPES_H_
+#endif  // RUNTIME_VM_SCOPES_H_
diff --git a/runtime/vm/service.h b/runtime/vm/service.h
index 935f176..657fe76 100644
--- a/runtime/vm/service.h
+++ b/runtime/vm/service.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 VM_SERVICE_H_
-#define VM_SERVICE_H_
+#ifndef RUNTIME_VM_SERVICE_H_
+#define RUNTIME_VM_SERVICE_H_
 
 #include "include/dart_tools_api.h"
 
@@ -218,4 +218,4 @@
 
 }  // namespace dart
 
-#endif  // VM_SERVICE_H_
+#endif  // RUNTIME_VM_SERVICE_H_
diff --git a/runtime/vm/service_event.h b/runtime/vm/service_event.h
index 369f522..ff90328 100644
--- a/runtime/vm/service_event.h
+++ b/runtime/vm/service_event.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 VM_SERVICE_EVENT_H_
-#define VM_SERVICE_EVENT_H_
+#ifndef RUNTIME_VM_SERVICE_EVENT_H_
+#define RUNTIME_VM_SERVICE_EVENT_H_
 
 #include "vm/globals.h"
 #include "vm/heap.h"
@@ -268,4 +268,4 @@
 
 }  // namespace dart
 
-#endif  // VM_SERVICE_EVENT_H_
+#endif  // RUNTIME_VM_SERVICE_EVENT_H_
diff --git a/runtime/vm/service_isolate.h b/runtime/vm/service_isolate.h
index 9def85c..c79d88b 100644
--- a/runtime/vm/service_isolate.h
+++ b/runtime/vm/service_isolate.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 VM_SERVICE_ISOLATE_H_
-#define VM_SERVICE_ISOLATE_H_
+#ifndef RUNTIME_VM_SERVICE_ISOLATE_H_
+#define RUNTIME_VM_SERVICE_ISOLATE_H_
 
 #include "include/dart_api.h"
 
@@ -79,4 +79,4 @@
 
 }  // namespace dart
 
-#endif  // VM_SERVICE_ISOLATE_H_
+#endif  // RUNTIME_VM_SERVICE_ISOLATE_H_
diff --git a/runtime/vm/signal_handler.h b/runtime/vm/signal_handler.h
index 615e584..654087d 100644
--- a/runtime/vm/signal_handler.h
+++ b/runtime/vm/signal_handler.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 VM_SIGNAL_HANDLER_H_
-#define VM_SIGNAL_HANDLER_H_
+#ifndef RUNTIME_VM_SIGNAL_HANDLER_H_
+#define RUNTIME_VM_SIGNAL_HANDLER_H_
 
 #include "vm/allocation.h"
 #include "vm/globals.h"
@@ -122,4 +122,4 @@
 
 }  // namespace dart
 
-#endif  // VM_SIGNAL_HANDLER_H_
+#endif  // RUNTIME_VM_SIGNAL_HANDLER_H_
diff --git a/runtime/vm/simulator.h b/runtime/vm/simulator.h
index b73bd97..6dbdbc6 100644
--- a/runtime/vm/simulator.h
+++ b/runtime/vm/simulator.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 VM_SIMULATOR_H_
-#define VM_SIMULATOR_H_
+#ifndef RUNTIME_VM_SIMULATOR_H_
+#define RUNTIME_VM_SIMULATOR_H_
 
 #include "vm/globals.h"
 
@@ -24,4 +24,4 @@
 #endif  // defined(TARGET_ARCH_...)
 #endif  // defined(USING_SIMULATOR)
 
-#endif  // VM_SIMULATOR_H_
+#endif  // RUNTIME_VM_SIMULATOR_H_
diff --git a/runtime/vm/simulator_arm.h b/runtime/vm/simulator_arm.h
index c163a62..2a505cc 100644
--- a/runtime/vm/simulator_arm.h
+++ b/runtime/vm/simulator_arm.h
@@ -9,10 +9,10 @@
 // which will start execution in the Simulator or forwards to the real entry
 // on a ARM HW platform.
 
-#ifndef VM_SIMULATOR_ARM_H_
-#define VM_SIMULATOR_ARM_H_
+#ifndef RUNTIME_VM_SIMULATOR_ARM_H_
+#define RUNTIME_VM_SIMULATOR_ARM_H_
 
-#ifndef VM_SIMULATOR_H_
+#ifndef RUNTIME_VM_SIMULATOR_H_
 #error Do not include simulator_arm.h directly; use simulator.h.
 #endif
 
@@ -287,4 +287,4 @@
 
 }  // namespace dart
 
-#endif  // VM_SIMULATOR_ARM_H_
+#endif  // RUNTIME_VM_SIMULATOR_ARM_H_
diff --git a/runtime/vm/simulator_arm64.h b/runtime/vm/simulator_arm64.h
index de49dd9..406976a 100644
--- a/runtime/vm/simulator_arm64.h
+++ b/runtime/vm/simulator_arm64.h
@@ -9,10 +9,10 @@
 // which will start execution in the Simulator or forwards to the real entry
 // on a ARM64 HW platform.
 
-#ifndef VM_SIMULATOR_ARM64_H_
-#define VM_SIMULATOR_ARM64_H_
+#ifndef RUNTIME_VM_SIMULATOR_ARM64_H_
+#define RUNTIME_VM_SIMULATOR_ARM64_H_
 
-#ifndef VM_SIMULATOR_H_
+#ifndef RUNTIME_VM_SIMULATOR_H_
 #error Do not include simulator_arm64.h directly; use simulator.h.
 #endif
 
@@ -282,4 +282,4 @@
 
 }  // namespace dart
 
-#endif  // VM_SIMULATOR_ARM64_H_
+#endif  // RUNTIME_VM_SIMULATOR_ARM64_H_
diff --git a/runtime/vm/simulator_dbc.h b/runtime/vm/simulator_dbc.h
index bb875bb..4e2f649 100644
--- a/runtime/vm/simulator_dbc.h
+++ b/runtime/vm/simulator_dbc.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 VM_SIMULATOR_DBC_H_
-#define VM_SIMULATOR_DBC_H_
+#ifndef RUNTIME_VM_SIMULATOR_DBC_H_
+#define RUNTIME_VM_SIMULATOR_DBC_H_
 
-#ifndef VM_SIMULATOR_H_
+#ifndef RUNTIME_VM_SIMULATOR_H_
 #error Do not include simulator_dbc.h directly; use simulator.h.
 #endif
 
@@ -172,4 +172,4 @@
 
 }  // namespace dart
 
-#endif  // VM_SIMULATOR_DBC_H_
+#endif  // RUNTIME_VM_SIMULATOR_DBC_H_
diff --git a/runtime/vm/simulator_mips.h b/runtime/vm/simulator_mips.h
index cbda735..89b7273 100644
--- a/runtime/vm/simulator_mips.h
+++ b/runtime/vm/simulator_mips.h
@@ -9,10 +9,10 @@
 // which will start execution in the Simulator or forwards to the real entry
 // on a MIPS HW platform.
 
-#ifndef VM_SIMULATOR_MIPS_H_
-#define VM_SIMULATOR_MIPS_H_
+#ifndef RUNTIME_VM_SIMULATOR_MIPS_H_
+#define RUNTIME_VM_SIMULATOR_MIPS_H_
 
-#ifndef VM_SIMULATOR_H_
+#ifndef RUNTIME_VM_SIMULATOR_H_
 #error Do not include simulator_mips.h directly; use simulator.h.
 #endif
 
@@ -267,4 +267,4 @@
 
 }  // namespace dart
 
-#endif  // VM_SIMULATOR_MIPS_H_
+#endif  // RUNTIME_VM_SIMULATOR_MIPS_H_
diff --git a/runtime/vm/snapshot.h b/runtime/vm/snapshot.h
index 020f4485..924f61c 100644
--- a/runtime/vm/snapshot.h
+++ b/runtime/vm/snapshot.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 VM_SNAPSHOT_H_
-#define VM_SNAPSHOT_H_
+#ifndef RUNTIME_VM_SNAPSHOT_H_
+#define RUNTIME_VM_SNAPSHOT_H_
 
 #include "platform/assert.h"
 #include "vm/allocation.h"
@@ -1049,4 +1049,4 @@
 
 }  // namespace dart
 
-#endif  // VM_SNAPSHOT_H_
+#endif  // RUNTIME_VM_SNAPSHOT_H_
diff --git a/runtime/vm/snapshot_ids.h b/runtime/vm/snapshot_ids.h
index 436b2a8..26ad769 100644
--- a/runtime/vm/snapshot_ids.h
+++ b/runtime/vm/snapshot_ids.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 VM_SNAPSHOT_IDS_H_
-#define VM_SNAPSHOT_IDS_H_
+#ifndef RUNTIME_VM_SNAPSHOT_IDS_H_
+#define RUNTIME_VM_SNAPSHOT_IDS_H_
 
 #include "vm/raw_object.h"
 #include "vm/dart_entry.h"
@@ -66,4 +66,4 @@
 
 }  // namespace dart
 
-#endif  // VM_SNAPSHOT_IDS_H_
+#endif  // RUNTIME_VM_SNAPSHOT_IDS_H_
diff --git a/runtime/vm/source_report.h b/runtime/vm/source_report.h
index dec18cfa..05870f2 100644
--- a/runtime/vm/source_report.h
+++ b/runtime/vm/source_report.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 VM_SOURCE_REPORT_H_
-#define VM_SOURCE_REPORT_H_
+#ifndef RUNTIME_VM_SOURCE_REPORT_H_
+#define RUNTIME_VM_SOURCE_REPORT_H_
 
 #include "vm/allocation.h"
 #include "vm/flags.h"
@@ -126,4 +126,4 @@
 
 }  // namespace dart
 
-#endif  // VM_SOURCE_REPORT_H_
+#endif  // RUNTIME_VM_SOURCE_REPORT_H_
diff --git a/runtime/vm/spaces.h b/runtime/vm/spaces.h
index 8d149b4..4b94b481 100644
--- a/runtime/vm/spaces.h
+++ b/runtime/vm/spaces.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 VM_SPACES_H_
-#define VM_SPACES_H_
+#ifndef RUNTIME_VM_SPACES_H_
+#define RUNTIME_VM_SPACES_H_
 
 // This file contains utilities shared by old and new space.
 // TODO(koda): Create Space base class with Space::CurrentUsage().
@@ -23,4 +23,4 @@
 
 }  // namespace dart
 
-#endif  // VM_SPACES_H_
+#endif  // RUNTIME_VM_SPACES_H_
diff --git a/runtime/vm/stack_frame.h b/runtime/vm/stack_frame.h
index 3198872..5076939 100644
--- a/runtime/vm/stack_frame.h
+++ b/runtime/vm/stack_frame.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 VM_STACK_FRAME_H_
-#define VM_STACK_FRAME_H_
+#ifndef RUNTIME_VM_STACK_FRAME_H_
+#define RUNTIME_VM_STACK_FRAME_H_
 
 #include "vm/allocation.h"
 #include "vm/object.h"
@@ -407,4 +407,4 @@
 
 }  // namespace dart
 
-#endif  // VM_STACK_FRAME_H_
+#endif  // RUNTIME_VM_STACK_FRAME_H_
diff --git a/runtime/vm/stack_frame_arm.h b/runtime/vm/stack_frame_arm.h
index a966a29..a0d1bba 100644
--- a/runtime/vm/stack_frame_arm.h
+++ b/runtime/vm/stack_frame_arm.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 VM_STACK_FRAME_ARM_H_
-#define VM_STACK_FRAME_ARM_H_
+#ifndef RUNTIME_VM_STACK_FRAME_ARM_H_
+#define RUNTIME_VM_STACK_FRAME_ARM_H_
 
 namespace dart {
 
@@ -57,4 +57,4 @@
 
 }  // namespace dart
 
-#endif  // VM_STACK_FRAME_ARM_H_
+#endif  // RUNTIME_VM_STACK_FRAME_ARM_H_
diff --git a/runtime/vm/stack_frame_arm64.h b/runtime/vm/stack_frame_arm64.h
index a1ca2eb..7b1982d 100644
--- a/runtime/vm/stack_frame_arm64.h
+++ b/runtime/vm/stack_frame_arm64.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 VM_STACK_FRAME_ARM64_H_
-#define VM_STACK_FRAME_ARM64_H_
+#ifndef RUNTIME_VM_STACK_FRAME_ARM64_H_
+#define RUNTIME_VM_STACK_FRAME_ARM64_H_
 
 namespace dart {
 
@@ -50,4 +50,4 @@
 
 }  // namespace dart
 
-#endif  // VM_STACK_FRAME_ARM64_H_
+#endif  // RUNTIME_VM_STACK_FRAME_ARM64_H_
diff --git a/runtime/vm/stack_frame_dbc.h b/runtime/vm/stack_frame_dbc.h
index 5d5ee78..f355fa9 100644
--- a/runtime/vm/stack_frame_dbc.h
+++ b/runtime/vm/stack_frame_dbc.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 VM_STACK_FRAME_DBC_H_
-#define VM_STACK_FRAME_DBC_H_
+#ifndef RUNTIME_VM_STACK_FRAME_DBC_H_
+#define RUNTIME_VM_STACK_FRAME_DBC_H_
 
 namespace dart {
 
@@ -84,4 +84,4 @@
 
 }  // namespace dart
 
-#endif  // VM_STACK_FRAME_DBC_H_
+#endif  // RUNTIME_VM_STACK_FRAME_DBC_H_
diff --git a/runtime/vm/stack_frame_ia32.h b/runtime/vm/stack_frame_ia32.h
index a331aef..b7eb7d9 100644
--- a/runtime/vm/stack_frame_ia32.h
+++ b/runtime/vm/stack_frame_ia32.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 VM_STACK_FRAME_IA32_H_
-#define VM_STACK_FRAME_IA32_H_
+#ifndef RUNTIME_VM_STACK_FRAME_IA32_H_
+#define RUNTIME_VM_STACK_FRAME_IA32_H_
 
 namespace dart {
 
@@ -46,4 +46,4 @@
 
 }  // namespace dart
 
-#endif  // VM_STACK_FRAME_IA32_H_
+#endif  // RUNTIME_VM_STACK_FRAME_IA32_H_
diff --git a/runtime/vm/stack_frame_mips.h b/runtime/vm/stack_frame_mips.h
index 35c9aba..7290b8b 100644
--- a/runtime/vm/stack_frame_mips.h
+++ b/runtime/vm/stack_frame_mips.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 VM_STACK_FRAME_MIPS_H_
-#define VM_STACK_FRAME_MIPS_H_
+#ifndef RUNTIME_VM_STACK_FRAME_MIPS_H_
+#define RUNTIME_VM_STACK_FRAME_MIPS_H_
 
 namespace dart {
 
@@ -47,4 +47,4 @@
 
 }  // namespace dart
 
-#endif  // VM_STACK_FRAME_MIPS_H_
+#endif  // RUNTIME_VM_STACK_FRAME_MIPS_H_
diff --git a/runtime/vm/stack_frame_x64.h b/runtime/vm/stack_frame_x64.h
index 8fc20a4..1ff4ba0 100644
--- a/runtime/vm/stack_frame_x64.h
+++ b/runtime/vm/stack_frame_x64.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 VM_STACK_FRAME_X64_H_
-#define VM_STACK_FRAME_X64_H_
+#ifndef RUNTIME_VM_STACK_FRAME_X64_H_
+#define RUNTIME_VM_STACK_FRAME_X64_H_
 
 namespace dart {
 
@@ -53,4 +53,4 @@
 
 }  // namespace dart
 
-#endif  // VM_STACK_FRAME_X64_H_
+#endif  // RUNTIME_VM_STACK_FRAME_X64_H_
diff --git a/runtime/vm/store_buffer.h b/runtime/vm/store_buffer.h
index 2fce2d6..46b0110 100644
--- a/runtime/vm/store_buffer.h
+++ b/runtime/vm/store_buffer.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 VM_STORE_BUFFER_H_
-#define VM_STORE_BUFFER_H_
+#ifndef RUNTIME_VM_STORE_BUFFER_H_
+#define RUNTIME_VM_STORE_BUFFER_H_
 
 #include "platform/assert.h"
 #include "vm/globals.h"
@@ -175,4 +175,4 @@
 
 }  // namespace dart
 
-#endif  // VM_STORE_BUFFER_H_
+#endif  // RUNTIME_VM_STORE_BUFFER_H_
diff --git a/runtime/vm/stub_code.h b/runtime/vm/stub_code.h
index bda3ba0..7b51f9f 100644
--- a/runtime/vm/stub_code.h
+++ b/runtime/vm/stub_code.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 VM_STUB_CODE_H_
-#define VM_STUB_CODE_H_
+#ifndef RUNTIME_VM_STUB_CODE_H_
+#define RUNTIME_VM_STUB_CODE_H_
 
 #include "vm/allocation.h"
 #include "vm/assembler.h"
@@ -203,4 +203,4 @@
 
 }  // namespace dart
 
-#endif  // VM_STUB_CODE_H_
+#endif  // RUNTIME_VM_STUB_CODE_H_
diff --git a/runtime/vm/symbols.h b/runtime/vm/symbols.h
index 29cdb8a..c419851 100644
--- a/runtime/vm/symbols.h
+++ b/runtime/vm/symbols.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 VM_SYMBOLS_H_
-#define VM_SYMBOLS_H_
+#ifndef RUNTIME_VM_SYMBOLS_H_
+#define RUNTIME_VM_SYMBOLS_H_
 
 #include "vm/growable_array.h"
 #include "vm/object.h"
@@ -695,4 +695,4 @@
 
 }  // namespace dart
 
-#endif  // VM_SYMBOLS_H_
+#endif  // RUNTIME_VM_SYMBOLS_H_
diff --git a/runtime/vm/tags.h b/runtime/vm/tags.h
index 8c6ef65..c6a0230c 100644
--- a/runtime/vm/tags.h
+++ b/runtime/vm/tags.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 VM_TAGS_H_
-#define VM_TAGS_H_
+#ifndef RUNTIME_VM_TAGS_H_
+#define RUNTIME_VM_TAGS_H_
 
 #include "vm/allocation.h"
 
@@ -123,4 +123,4 @@
 
 }  // namespace dart
 
-#endif  // VM_TAGS_H_
+#endif  // RUNTIME_VM_TAGS_H_
diff --git a/runtime/vm/thread.h b/runtime/vm/thread.h
index 093e82a..c06bd4f 100644
--- a/runtime/vm/thread.h
+++ b/runtime/vm/thread.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 VM_THREAD_H_
-#define VM_THREAD_H_
+#ifndef RUNTIME_VM_THREAD_H_
+#define RUNTIME_VM_THREAD_H_
 
 #include "include/dart_api.h"
 #include "platform/assert.h"
@@ -792,4 +792,4 @@
 
 }  // namespace dart
 
-#endif  // VM_THREAD_H_
+#endif  // RUNTIME_VM_THREAD_H_
diff --git a/runtime/vm/thread_barrier.h b/runtime/vm/thread_barrier.h
index 39c56a8..458f28d 100644
--- a/runtime/vm/thread_barrier.h
+++ b/runtime/vm/thread_barrier.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 VM_THREAD_BARRIER_H_
-#define VM_THREAD_BARRIER_H_
+#ifndef RUNTIME_VM_THREAD_BARRIER_H_
+#define RUNTIME_VM_THREAD_BARRIER_H_
 
 #include "vm/globals.h"
 #include "vm/os_thread.h"
@@ -117,4 +117,4 @@
 
 }  // namespace dart
 
-#endif  // VM_THREAD_BARRIER_H_
+#endif  // RUNTIME_VM_THREAD_BARRIER_H_
diff --git a/runtime/vm/thread_interrupter.h b/runtime/vm/thread_interrupter.h
index 82e0474..c425c39 100644
--- a/runtime/vm/thread_interrupter.h
+++ b/runtime/vm/thread_interrupter.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 VM_THREAD_INTERRUPTER_H_
-#define VM_THREAD_INTERRUPTER_H_
+#ifndef RUNTIME_VM_THREAD_INTERRUPTER_H_
+#define RUNTIME_VM_THREAD_INTERRUPTER_H_
 
 #include "vm/allocation.h"
 #include "vm/signal_handler.h"
@@ -63,4 +63,4 @@
 
 }  // namespace dart
 
-#endif  // VM_THREAD_INTERRUPTER_H_
+#endif  // RUNTIME_VM_THREAD_INTERRUPTER_H_
diff --git a/runtime/vm/thread_pool.h b/runtime/vm/thread_pool.h
index 8cd29a2..d9a4634 100644
--- a/runtime/vm/thread_pool.h
+++ b/runtime/vm/thread_pool.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 VM_THREAD_POOL_H_
-#define VM_THREAD_POOL_H_
+#ifndef RUNTIME_VM_THREAD_POOL_H_
+#define RUNTIME_VM_THREAD_POOL_H_
 
 #include "vm/allocation.h"
 #include "vm/globals.h"
@@ -147,4 +147,4 @@
 
 }  // namespace dart
 
-#endif  // VM_THREAD_POOL_H_
+#endif  // RUNTIME_VM_THREAD_POOL_H_
diff --git a/runtime/vm/thread_registry.h b/runtime/vm/thread_registry.h
index dd2c6df..4965e75 100644
--- a/runtime/vm/thread_registry.h
+++ b/runtime/vm/thread_registry.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 VM_THREAD_REGISTRY_H_
-#define VM_THREAD_REGISTRY_H_
+#ifndef RUNTIME_VM_THREAD_REGISTRY_H_
+#define RUNTIME_VM_THREAD_REGISTRY_H_
 
 #include "vm/globals.h"
 #include "vm/growable_array.h"
@@ -67,4 +67,4 @@
 
 }  // namespace dart
 
-#endif  // VM_THREAD_REGISTRY_H_
+#endif  // RUNTIME_VM_THREAD_REGISTRY_H_
diff --git a/runtime/vm/timeline.h b/runtime/vm/timeline.h
index 851113f..64d11a0 100644
--- a/runtime/vm/timeline.h
+++ b/runtime/vm/timeline.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 VM_TIMELINE_H_
-#define VM_TIMELINE_H_
+#ifndef RUNTIME_VM_TIMELINE_H_
+#define RUNTIME_VM_TIMELINE_H_
 
 #include "include/dart_tools_api.h"
 
@@ -914,4 +914,4 @@
 
 }  // namespace dart
 
-#endif  // VM_TIMELINE_H_
+#endif  // RUNTIME_VM_TIMELINE_H_
diff --git a/runtime/vm/timeline_analysis.h b/runtime/vm/timeline_analysis.h
index 4f733a6..2e457c9 100644
--- a/runtime/vm/timeline_analysis.h
+++ b/runtime/vm/timeline_analysis.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 VM_TIMELINE_ANALYSIS_H_
-#define VM_TIMELINE_ANALYSIS_H_
+#ifndef RUNTIME_VM_TIMELINE_ANALYSIS_H_
+#define RUNTIME_VM_TIMELINE_ANALYSIS_H_
 
 #include "vm/growable_array.h"
 #include "vm/timeline.h"
@@ -236,4 +236,4 @@
 
 }  // namespace dart
 
-#endif  // VM_TIMELINE_ANALYSIS_H_
+#endif  // RUNTIME_VM_TIMELINE_ANALYSIS_H_
diff --git a/runtime/vm/timer.h b/runtime/vm/timer.h
index 01a6b6f..7d32522 100644
--- a/runtime/vm/timer.h
+++ b/runtime/vm/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 VM_TIMER_H_
-#define VM_TIMER_H_
+#ifndef RUNTIME_VM_TIMER_H_
+#define RUNTIME_VM_TIMER_H_
 
 #include "platform/utils.h"
 #include "vm/allocation.h"
@@ -177,4 +177,4 @@
 
 }  // namespace dart
 
-#endif  // VM_TIMER_H_
+#endif  // RUNTIME_VM_TIMER_H_
diff --git a/runtime/vm/token.h b/runtime/vm/token.h
index 6ddf17b..0f5ff54 100644
--- a/runtime/vm/token.h
+++ b/runtime/vm/token.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 VM_TOKEN_H_
-#define VM_TOKEN_H_
+#ifndef RUNTIME_VM_TOKEN_H_
+#define RUNTIME_VM_TOKEN_H_
 
 #include "platform/assert.h"
 #include "vm/allocation.h"
@@ -330,4 +330,4 @@
 
 }  // namespace dart
 
-#endif  // VM_TOKEN_H_
+#endif  // RUNTIME_VM_TOKEN_H_
diff --git a/runtime/vm/token_position.h b/runtime/vm/token_position.h
index c964716..dc7c5a0e 100644
--- a/runtime/vm/token_position.h
+++ b/runtime/vm/token_position.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 VM_TOKEN_POSITION_H_
-#define VM_TOKEN_POSITION_H_
+#ifndef RUNTIME_VM_TOKEN_POSITION_H_
+#define RUNTIME_VM_TOKEN_POSITION_H_
 
 #include "platform/utils.h"
 #include "vm/allocation.h"
@@ -205,4 +205,4 @@
 
 }  // namespace dart
 
-#endif  // VM_TOKEN_POSITION_H_
+#endif  // RUNTIME_VM_TOKEN_POSITION_H_
diff --git a/runtime/vm/type_table.h b/runtime/vm/type_table.h
index c33a124..6e3818c 100644
--- a/runtime/vm/type_table.h
+++ b/runtime/vm/type_table.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 VM_TYPE_TABLE_H_
-#define VM_TYPE_TABLE_H_
+#ifndef RUNTIME_VM_TYPE_TABLE_H_
+#define RUNTIME_VM_TYPE_TABLE_H_
 
 #include "platform/assert.h"
 #include "vm/hash_table.h"
@@ -109,4 +109,4 @@
 
 }  // namespace dart
 
-#endif  // VM_TYPE_TABLE_H_
+#endif  // RUNTIME_VM_TYPE_TABLE_H_
diff --git a/runtime/vm/unibrow-inl.h b/runtime/vm/unibrow-inl.h
index 340d1be..47ef64d 100644
--- a/runtime/vm/unibrow-inl.h
+++ b/runtime/vm/unibrow-inl.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 VM_UNIBROW_INL_H_
-#define VM_UNIBROW_INL_H_
+#ifndef RUNTIME_VM_UNIBROW_INL_H_
+#define RUNTIME_VM_UNIBROW_INL_H_
 
 #include "vm/unibrow.h"
 
@@ -45,4 +45,4 @@
 
 }  // namespace unibrow
 
-#endif  // VM_UNIBROW_INL_H_
+#endif  // RUNTIME_VM_UNIBROW_INL_H_
diff --git a/runtime/vm/unibrow.cc b/runtime/vm/unibrow.cc
index 197db69..7f590d4 100644
--- a/runtime/vm/unibrow.cc
+++ b/runtime/vm/unibrow.cc
@@ -5,6 +5,8 @@
 // This file was generated at 2014-10-08 15:25:47.940335 (in v8, copied to dart)
 
 #include "vm/unibrow-inl.h"
+#include "vm/unibrow.h"
+
 #include <stdio.h>
 #include <stdlib.h>
 
diff --git a/runtime/vm/unibrow.h b/runtime/vm/unibrow.h
index 82250d2..f4ac7b5 100644
--- a/runtime/vm/unibrow.h
+++ b/runtime/vm/unibrow.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 VM_UNIBROW_H_
-#define VM_UNIBROW_H_
+#ifndef RUNTIME_VM_UNIBROW_H_
+#define RUNTIME_VM_UNIBROW_H_
 
 #include <sys/types.h>
 
@@ -69,4 +69,4 @@
 
 }  // namespace unibrow
 
-#endif  // VM_UNIBROW_H_
+#endif  // RUNTIME_VM_UNIBROW_H_
diff --git a/runtime/vm/unicode.h b/runtime/vm/unicode.h
index 7ea10e9..6acf84f 100644
--- a/runtime/vm/unicode.h
+++ b/runtime/vm/unicode.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 VM_UNICODE_H_
-#define VM_UNICODE_H_
+#ifndef RUNTIME_VM_UNICODE_H_
+#define RUNTIME_VM_UNICODE_H_
 
 #include "vm/allocation.h"
 #include "vm/globals.h"
@@ -228,4 +228,4 @@
 
 }  // namespace dart
 
-#endif  // VM_UNICODE_H_
+#endif  // RUNTIME_VM_UNICODE_H_
diff --git a/runtime/vm/unit_test.h b/runtime/vm/unit_test.h
index 189515f..9047f02 100644
--- a/runtime/vm/unit_test.h
+++ b/runtime/vm/unit_test.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 VM_UNIT_TEST_H_
-#define VM_UNIT_TEST_H_
+#ifndef RUNTIME_VM_UNIT_TEST_H_
+#define RUNTIME_VM_UNIT_TEST_H_
 
 #include "include/dart_native_api.h"
 
@@ -619,4 +619,4 @@
 
 }  // namespace dart
 
-#endif  // VM_UNIT_TEST_H_
+#endif  // RUNTIME_VM_UNIT_TEST_H_
diff --git a/runtime/vm/uri.h b/runtime/vm/uri.h
index 453b371..3dfdda0 100644
--- a/runtime/vm/uri.h
+++ b/runtime/vm/uri.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 VM_URI_H_
-#define VM_URI_H_
+#ifndef RUNTIME_VM_URI_H_
+#define RUNTIME_VM_URI_H_
 
 #include "platform/utils.h"
 #include "vm/globals.h"
@@ -30,4 +30,4 @@
 
 }  // namespace dart
 
-#endif  // VM_URI_H_
+#endif  // RUNTIME_VM_URI_H_
diff --git a/runtime/vm/verifier.h b/runtime/vm/verifier.h
index 8ae222d..bade6ab 100644
--- a/runtime/vm/verifier.h
+++ b/runtime/vm/verifier.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 VM_VERIFIER_H_
-#define VM_VERIFIER_H_
+#ifndef RUNTIME_VM_VERIFIER_H_
+#define RUNTIME_VM_VERIFIER_H_
 
 #include "vm/flags.h"
 #include "vm/globals.h"
@@ -98,4 +98,4 @@
 
 }  // namespace dart
 
-#endif  // VM_VERIFIER_H_
+#endif  // RUNTIME_VM_VERIFIER_H_
diff --git a/runtime/vm/version.h b/runtime/vm/version.h
index 45afcb5..2acf205 100644
--- a/runtime/vm/version.h
+++ b/runtime/vm/version.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 VM_VERSION_H_
-#define VM_VERSION_H_
+#ifndef RUNTIME_VM_VERSION_H_
+#define RUNTIME_VM_VERSION_H_
 
 #include "vm/allocation.h"
 
@@ -21,4 +21,4 @@
 
 }  // namespace dart
 
-#endif  // VM_VERSION_H_
+#endif  // RUNTIME_VM_VERSION_H_
diff --git a/runtime/vm/virtual_memory.h b/runtime/vm/virtual_memory.h
index 6e43cb4..8eefd30 100644
--- a/runtime/vm/virtual_memory.h
+++ b/runtime/vm/virtual_memory.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 VM_VIRTUAL_MEMORY_H_
-#define VM_VIRTUAL_MEMORY_H_
+#ifndef RUNTIME_VM_VIRTUAL_MEMORY_H_
+#define RUNTIME_VM_VIRTUAL_MEMORY_H_
 
 #include "platform/utils.h"
 #include "vm/globals.h"
@@ -107,4 +107,4 @@
 
 }  // namespace dart
 
-#endif  // VM_VIRTUAL_MEMORY_H_
+#endif  // RUNTIME_VM_VIRTUAL_MEMORY_H_
diff --git a/runtime/vm/visitor.h b/runtime/vm/visitor.h
index 3b071e2..3c35b10 100644
--- a/runtime/vm/visitor.h
+++ b/runtime/vm/visitor.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 VM_VISITOR_H_
-#define VM_VISITOR_H_
+#ifndef RUNTIME_VM_VISITOR_H_
+#define RUNTIME_VM_VISITOR_H_
 
 #include "vm/allocation.h"
 #include "vm/globals.h"
@@ -82,4 +82,4 @@
 
 }  // namespace dart
 
-#endif  // VM_VISITOR_H_
+#endif  // RUNTIME_VM_VISITOR_H_
diff --git a/runtime/vm/vm.gypi b/runtime/vm/vm.gypi
index a08a1b8..01b729e 100644
--- a/runtime/vm/vm.gypi
+++ b/runtime/vm/vm.gypi
@@ -967,6 +967,10 @@
       ]
     },
     {
+      # Unlike the other libraries in the SDK, dart:typed_data is not
+      # implemented as a patch applied to the base SDK implementation.
+      # Instead the VM has a complete replacement library and the
+      # implementation in the SDK is ignored.
       'target_name': 'generate_typed_data_cc_file',
       'type': 'none',
       'toolsets':['host'],
@@ -1234,5 +1238,456 @@
         },
       ]
     },
+    {
+      'target_name': 'generate_patched_sdk',
+      'type': 'none',
+      'toolsets': ['host'],
+      'dependencies': [
+        'dart_bootstrap#host',
+        'generate_async_library_patch',
+        'generate_collection_library_patch',
+        'generate_convert_library_patch',
+        'generate_core_library_patch',
+        'generate_developer_library_patch',
+        'generate_internal_library_patch',
+        'generate_io_library_patch',
+        'generate_isolate_library_patch',
+        'generate_math_library_patch',
+        'generate_mirrors_library_patch',
+        'generate_profiler_library_patch',
+        'generate_vmservice_library_patch',
+      ],
+      'actions': [
+        {
+          'action_name': 'patch_sdk',
+          'inputs': [
+            '<!@(["python", "../tools/list_files.py",' '"dart$",' '"sdk/lib"])',
+            '../../tools/patch_sdk.py',
+            '../../tools/patch_sdk.dart',
+            # Unlike the other libraries in the SDK, dart:typed_data is not
+            # implemented as a patch applied to the base SDK implementation.
+            # Instead the VM has a complete replacement library and the
+            # implementation in the SDK is ignored.
+            '../lib/typed_data.dart',
+            # Unlike the other libraries in the SDK, dart:_builtin and
+            # dart:nativewrappers are only available for the Dart VM.
+            '../bin/builtin.dart',
+            '../bin/vmservice/vmservice_io.dart',
+            '../bin/vmservice/loader.dart',
+            '../bin/vmservice/server.dart',
+            '<(gen_source_dir)/patches/async_patch.dart',
+            '<(gen_source_dir)/patches/collection_patch.dart',
+            '<(gen_source_dir)/patches/convert_patch.dart',
+            '<(gen_source_dir)/patches/core_patch.dart',
+            '<(gen_source_dir)/patches/developer_patch.dart',
+            '<(gen_source_dir)/patches/internal_patch.dart',
+            '<(gen_source_dir)/patches/io_patch.dart',
+            '<(gen_source_dir)/patches/isolate_patch.dart',
+            '<(gen_source_dir)/patches/math_patch.dart',
+            '<(gen_source_dir)/patches/mirrors_patch.dart',
+            '<(gen_source_dir)/patches/profiler_patch.dart',
+            '<(gen_source_dir)/patches/vmservice_patch.dart',
+          ],
+          'outputs': [
+            # Instead of listing all outputs we list a single well-known one.
+            '<(gen_source_dir)/patched_sdk/lib/core/core.dart',
+          ],
+          'action': [
+            'python',
+            '../tools/patch_sdk.py',
+            '--dart-executable',
+            '<(PRODUCT_DIR)/<(EXECUTABLE_PREFIX)dart_bootstrap<(EXECUTABLE_SUFFIX)',
+            'vm',
+            '../sdk',
+            '<(gen_source_dir)/patches',
+            '<(gen_source_dir)/patched_sdk',
+          ],
+        },
+      ],
+    },
+    {
+      'variables': {
+        'library_name': 'async',
+        'library_uri': 'dart:async',
+      },
+      'target_name': 'generate_<(library_name)_library_patch',
+      'type': 'none',
+      'toolsets': ['host'],
+      'includes': [
+        '../lib/async_sources.gypi',
+      ],
+      'actions': [
+        {
+          'action_name': 'concatenate_<(library_name)_patches',
+          'inputs': [
+            '../tools/concatenate_patches.py',
+            '<@(_sources)',
+          ],
+          'outputs': [
+            '<(gen_source_dir)/patches/<(library_name)_patch.dart'
+          ],
+          'action': [
+            'python',
+            'tools/concatenate_patches.py',
+            '--output',
+            '<(gen_source_dir)/patches/<(library_name)_patch.dart',
+            '<@(_sources)',
+          ],
+          'message': 'Generating <(library_uri) patch.',
+        },
+      ],
+    },
+    {
+      'variables': {
+        'library_name': 'collection',
+        'library_uri': 'dart:collection',
+      },
+      'target_name': 'generate_<(library_name)_library_patch',
+      'type': 'none',
+      'toolsets': ['host'],
+      'includes': [
+        '../lib/collection_sources.gypi',
+      ],
+      'actions': [
+        {
+          'action_name': 'concatenate_<(library_name)_patches',
+          'inputs': [
+            '../tools/concatenate_patches.py',
+            '<@(_sources)',
+          ],
+          'outputs': [
+            '<(gen_source_dir)/patches/<(library_name)_patch.dart'
+          ],
+          'action': [
+            'python',
+            'tools/concatenate_patches.py',
+            '--output',
+            '<(gen_source_dir)/patches/<(library_name)_patch.dart',
+            '<@(_sources)',
+          ],
+          'message': 'Generating <(library_uri) patch.',
+        },
+      ],
+    },
+    {
+      'variables': {
+        'library_name': 'convert',
+        'library_uri': 'dart:convert',
+      },
+      'target_name': 'generate_<(library_name)_library_patch',
+      'type': 'none',
+      'toolsets': ['host'],
+      'includes': [
+        '../lib/convert_sources.gypi',
+      ],
+      'actions': [
+        {
+          'action_name': 'concatenate_<(library_name)_patches',
+          'inputs': [
+            '../tools/concatenate_patches.py',
+            '<@(_sources)',
+          ],
+          'outputs': [
+            '<(gen_source_dir)/patches/<(library_name)_patch.dart'
+          ],
+          'action': [
+            'python',
+            'tools/concatenate_patches.py',
+            '--output',
+            '<(gen_source_dir)/patches/<(library_name)_patch.dart',
+            '<@(_sources)',
+          ],
+          'message': 'Generating <(library_uri) patch.',
+        },
+      ],
+    },
+    {
+      'variables': {
+        'library_name': 'core',
+        'library_uri': 'dart:core',
+      },
+      'target_name': 'generate_<(library_name)_library_patch',
+      'type': 'none',
+      'toolsets': ['host'],
+      'includes': [
+        '../lib/core_sources.gypi',
+      ],
+      'actions': [
+        {
+          'action_name': 'concatenate_<(library_name)_patches',
+          'inputs': [
+            '../tools/concatenate_patches.py',
+            '<@(_sources)',
+          ],
+          'outputs': [
+            '<(gen_source_dir)/patches/<(library_name)_patch.dart'
+          ],
+          'action': [
+            'python',
+            'tools/concatenate_patches.py',
+            '--output',
+            '<(gen_source_dir)/patches/<(library_name)_patch.dart',
+            '<@(_sources)',
+          ],
+          'message': 'Generating <(library_uri) patch.',
+        },
+      ],
+    },
+    {
+      'variables': {
+        'library_name': 'developer',
+        'library_uri': 'dart:developer',
+      },
+      'target_name': 'generate_<(library_name)_library_patch',
+      'type': 'none',
+      'toolsets': ['host'],
+      'includes': [
+        '../lib/developer_sources.gypi',
+      ],
+      'actions': [
+        {
+          'action_name': 'concatenate_<(library_name)_patches',
+          'inputs': [
+            '../tools/concatenate_patches.py',
+            '<@(_sources)',
+          ],
+          'outputs': [
+            '<(gen_source_dir)/patches/<(library_name)_patch.dart'
+          ],
+          'action': [
+            'python',
+            'tools/concatenate_patches.py',
+            '--output',
+            '<(gen_source_dir)/patches/<(library_name)_patch.dart',
+            '<@(_sources)',
+          ],
+          'message': 'Generating <(library_uri) patch.',
+        },
+      ],
+    },
+    {
+      'variables': {
+        'library_name': 'internal',
+        'library_uri': 'dart:_internal',
+      },
+      'target_name': 'generate_<(library_name)_library_patch',
+      'type': 'none',
+      'toolsets': ['host'],
+      'includes': [
+        '../lib/internal_sources.gypi',
+      ],
+      'actions': [
+        {
+          'action_name': 'concatenate_<(library_name)_patches',
+          'inputs': [
+            '../tools/concatenate_patches.py',
+            '<@(_sources)',
+          ],
+          'outputs': [
+            '<(gen_source_dir)/patches/<(library_name)_patch.dart'
+          ],
+          'action': [
+            'python',
+            'tools/concatenate_patches.py',
+            '--output',
+            '<(gen_source_dir)/patches/<(library_name)_patch.dart',
+            '<@(_sources)',
+          ],
+          'message': 'Generating <(library_uri) patch.',
+        },
+      ],
+    },
+    {
+      'variables': {
+        'library_name': 'io',
+        'library_uri': 'dart:io',
+      },
+      'target_name': 'generate_<(library_name)_library_patch',
+      'type': 'none',
+      'toolsets': ['host'],
+      'includes': [
+        '../bin/io_sources.gypi',
+      ],
+      'actions': [
+        {
+          'action_name': 'concatenate_<(library_name)_patches',
+          'inputs': [
+            '../tools/concatenate_patches.py',
+            '<@(_sources)',
+          ],
+          'outputs': [
+            '<(gen_source_dir)/patches/<(library_name)_patch.dart'
+          ],
+          'action': [
+            'python',
+            'tools/concatenate_patches.py',
+            '--output',
+            '<(gen_source_dir)/patches/<(library_name)_patch.dart',
+            '<@(_sources)',
+          ],
+          'message': 'Generating <(library_uri) patch.',
+        },
+      ],
+    },
+    {
+      'variables': {
+        'library_name': 'isolate',
+        'library_uri': 'dart:isolate',
+      },
+      'target_name': 'generate_<(library_name)_library_patch',
+      'type': 'none',
+      'toolsets': ['host'],
+      'includes': [
+        '../lib/isolate_sources.gypi',
+      ],
+      'actions': [
+        {
+          'action_name': 'concatenate_<(library_name)_patches',
+          'inputs': [
+            '../tools/concatenate_patches.py',
+            '<@(_sources)',
+          ],
+          'outputs': [
+            '<(gen_source_dir)/patches/<(library_name)_patch.dart'
+          ],
+          'action': [
+            'python',
+            'tools/concatenate_patches.py',
+            '--output',
+            '<(gen_source_dir)/patches/<(library_name)_patch.dart',
+            '<@(_sources)',
+          ],
+          'message': 'Generating <(library_uri) patch.',
+        },
+      ],
+    },
+    {
+      'variables': {
+        'library_name': 'math',
+        'library_uri': 'dart:math',
+      },
+      'target_name': 'generate_<(library_name)_library_patch',
+      'type': 'none',
+      'toolsets': ['host'],
+      'includes': [
+        '../lib/math_sources.gypi',
+      ],
+      'actions': [
+        {
+          'action_name': 'concatenate_<(library_name)_patches',
+          'inputs': [
+            '../tools/concatenate_patches.py',
+            '<@(_sources)',
+          ],
+          'outputs': [
+            '<(gen_source_dir)/patches/<(library_name)_patch.dart'
+          ],
+          'action': [
+            'python',
+            'tools/concatenate_patches.py',
+            '--output',
+            '<(gen_source_dir)/patches/<(library_name)_patch.dart',
+            '<@(_sources)',
+          ],
+          'message': 'Generating <(library_uri) patch.',
+        },
+      ],
+    },
+    {
+      'variables': {
+        'library_name': 'mirrors',
+        'library_uri': 'dart:mirrors',
+      },
+      'target_name': 'generate_<(library_name)_library_patch',
+      'type': 'none',
+      'toolsets': ['host'],
+      'includes': [
+        '../lib/mirrors_sources.gypi',
+      ],
+      'actions': [
+        {
+          'action_name': 'concatenate_<(library_name)_patches',
+          'inputs': [
+            '../tools/concatenate_patches.py',
+            '<@(_sources)',
+          ],
+          'outputs': [
+            '<(gen_source_dir)/patches/<(library_name)_patch.dart'
+          ],
+          'action': [
+            'python',
+            'tools/concatenate_patches.py',
+            '--output',
+            '<(gen_source_dir)/patches/<(library_name)_patch.dart',
+            '<@(_sources)',
+          ],
+          'message': 'Generating <(library_uri) patch.',
+        },
+      ],
+    },
+    {
+      'variables': {
+        'library_name': 'profiler',
+        'library_uri': 'dart:profiler',
+      },
+      'target_name': 'generate_<(library_name)_library_patch',
+      'type': 'none',
+      'toolsets': ['host'],
+      'includes': [
+        '../lib/profiler_sources.gypi',
+      ],
+      'actions': [
+        {
+          'action_name': 'concatenate_<(library_name)_patches',
+          'inputs': [
+            '../tools/concatenate_patches.py',
+            '<@(_sources)',
+          ],
+          'outputs': [
+            '<(gen_source_dir)/patches/<(library_name)_patch.dart'
+          ],
+          'action': [
+            'python',
+            'tools/concatenate_patches.py',
+            '--output',
+            '<(gen_source_dir)/patches/<(library_name)_patch.dart',
+            '<@(_sources)',
+          ],
+          'message': 'Generating <(library_uri) patch.',
+        },
+      ],
+    },
+    {
+      'variables': {
+        'library_name': 'vmservice',
+        'library_uri': 'dart:_vmservice',
+      },
+      'target_name': 'generate_<(library_name)_library_patch',
+      'type': 'none',
+      'toolsets': ['host'],
+      'includes': [
+        '../lib/vmservice_sources.gypi',
+      ],
+      'actions': [
+        {
+          'action_name': 'concatenate_<(library_name)_patches',
+          'inputs': [
+            '../tools/concatenate_patches.py',
+            '<@(_sources)',
+          ],
+          'outputs': [
+            '<(gen_source_dir)/patches/<(library_name)_patch.dart'
+          ],
+          'action': [
+            'python',
+            'tools/concatenate_patches.py',
+            '--output',
+            '<(gen_source_dir)/patches/<(library_name)_patch.dart',
+            '<@(_sources)',
+          ],
+          'message': 'Generating <(library_uri) patch.',
+        },
+      ],
+    },
   ]
 }
diff --git a/runtime/vm/weak_code.h b/runtime/vm/weak_code.h
index 9fd11c1..42da4d7 100644
--- a/runtime/vm/weak_code.h
+++ b/runtime/vm/weak_code.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 VM_WEAK_CODE_H_
-#define VM_WEAK_CODE_H_
+#ifndef RUNTIME_VM_WEAK_CODE_H_
+#define RUNTIME_VM_WEAK_CODE_H_
 
 #include "vm/allocation.h"
 #include "vm/globals.h"
@@ -39,4 +39,4 @@
 
 }  // namespace dart
 
-#endif  // VM_WEAK_CODE_H_
+#endif  // RUNTIME_VM_WEAK_CODE_H_
diff --git a/runtime/vm/weak_table.h b/runtime/vm/weak_table.h
index 2c40aa3..8489dda 100644
--- a/runtime/vm/weak_table.h
+++ b/runtime/vm/weak_table.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 VM_WEAK_TABLE_H_
-#define VM_WEAK_TABLE_H_
+#ifndef RUNTIME_VM_WEAK_TABLE_H_
+#define RUNTIME_VM_WEAK_TABLE_H_
 
 #include "vm/globals.h"
 
@@ -171,4 +171,4 @@
 
 }  // namespace dart
 
-#endif  // VM_WEAK_TABLE_H_
+#endif  // RUNTIME_VM_WEAK_TABLE_H_
diff --git a/runtime/vm/zone.h b/runtime/vm/zone.h
index 0d274ad..6d216e9 100644
--- a/runtime/vm/zone.h
+++ b/runtime/vm/zone.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 VM_ZONE_H_
-#define VM_ZONE_H_
+#ifndef RUNTIME_VM_ZONE_H_
+#define RUNTIME_VM_ZONE_H_
 
 #include "platform/utils.h"
 #include "vm/allocation.h"
@@ -259,4 +259,4 @@
 
 }  // namespace dart
 
-#endif  // VM_ZONE_H_
+#endif  // RUNTIME_VM_ZONE_H_
diff --git a/sdk/lib/html/dart2js/html_dart2js.dart b/sdk/lib/html/dart2js/html_dart2js.dart
index 3d4792d..2043449 100644
--- a/sdk/lib/html/dart2js/html_dart2js.dart
+++ b/sdk/lib/html/dart2js/html_dart2js.dart
@@ -39804,7 +39804,7 @@
   /**
    * Set this CSS Dimension to the specified number of x-heights.
    *
-   * One ex is equal to the the x-height of a font's baseline to its mean line,
+   * One ex is equal to the x-height of a font's baseline to its mean line,
    * generally the height of the letter "x" in the font, which is usually about
    * half the font-size.
    */
diff --git a/sdk/lib/html/dartium/html_dartium.dart b/sdk/lib/html/dartium/html_dartium.dart
index b3be182..5385090 100644
--- a/sdk/lib/html/dartium/html_dartium.dart
+++ b/sdk/lib/html/dartium/html_dartium.dart
@@ -44329,7 +44329,7 @@
   /**
    * Set this CSS Dimension to the specified number of x-heights.
    *
-   * One ex is equal to the the x-height of a font's baseline to its mean line,
+   * One ex is equal to the x-height of a font's baseline to its mean line,
    * generally the height of the letter "x" in the font, which is usually about
    * half the font-size.
    */
diff --git a/sdk/lib/html/dartium/nativewrappers.dart b/sdk/lib/html/dartium/nativewrappers.dart
index 55e5742..441749c 100644
--- a/sdk/lib/html/dartium/nativewrappers.dart
+++ b/sdk/lib/html/dartium/nativewrappers.dart
@@ -4,9 +4,31 @@
 
 library nativewrappers;
 
+class NativeFieldWrapperClass1 {
+  NativeFieldWrapperClass1() {
+    throw new UnsupportedError(
+        "Generative constructors not supported on native types.");
+  }
+}
+
 class NativeFieldWrapperClass2 {
   NativeFieldWrapperClass2() {
     throw new UnsupportedError(
         "Generative constructors not supported on native types.");
   }
 }
+
+class NativeFieldWrapperClass3 {
+  NativeFieldWrapperClass3() {
+    throw new UnsupportedError(
+        "Generative constructors not supported on native types.");
+  }
+}
+
+class NativeFieldWrapperClass4 {
+  NativeFieldWrapperClass4() {
+    throw new UnsupportedError(
+        "Generative constructors not supported on native types.");
+  }
+}
+
diff --git a/sdk/lib/io/io.dart b/sdk/lib/io/io.dart
index d3690f3..844a380 100644
--- a/sdk/lib/io/io.dart
+++ b/sdk/lib/io/io.dart
@@ -120,7 +120,7 @@
  *
  * The client connects to the WebSocket using the `connect()` method
  * and a URI that uses the Web Socket protocol.
- * The the client can write to the WebSocket with the `add()` method.
+ * The client can write to the WebSocket with the `add()` method.
  * For example,
  *
  *     WebSocket.connect('ws://127.0.0.1:4040/ws').then((socket) {
diff --git a/sdk/lib/isolate/isolate.dart b/sdk/lib/isolate/isolate.dart
index cb58a44..77b40c0 100644
--- a/sdk/lib/isolate/isolate.dart
+++ b/sdk/lib/isolate/isolate.dart
@@ -412,7 +412,7 @@
    * The [priority] must be one of [IMMEDIATE] or [BEFORE_NEXT_EVENT].
    * The shutdown is performed at different times depending on the priority:
    *
-   * * `IMMEDIATE`: The the isolate shuts down as soon as possible.
+   * * `IMMEDIATE`: The isolate shuts down as soon as possible.
    *     Control messages are handled in order, so all previously sent control
    *     events from this isolate will all have been processed.
    *     The shutdown should happen no later than if sent with
@@ -435,7 +435,7 @@
    * The [priority] must be one of [IMMEDIATE] or [BEFORE_NEXT_EVENT].
    * The response is sent at different times depending on the ping type:
    *
-   * * `IMMEDIATE`: The the isolate responds as soon as it receives the
+   * * `IMMEDIATE`: The isolate responds as soon as it receives the
    *     control message. This is after any previous control message
    *     from the same isolate has been received, but may be during
    *     execution of another event.
diff --git a/sdk/lib/mirrors/mirrors.dart b/sdk/lib/mirrors/mirrors.dart
index a5f5750..206410a 100644
--- a/sdk/lib/mirrors/mirrors.dart
+++ b/sdk/lib/mirrors/mirrors.dart
@@ -944,7 +944,7 @@
   /**
    * The defining type for this typedef.
    *
-   * If the the type referred to by the reflectee is a function type *F*, the
+   * If the type referred to by the reflectee is a function type *F*, the
    * result will be [:FunctionTypeMirror:] reflecting *F* which is abstract
    * and has an abstract method [:call:] whose signature corresponds to *F*.
    * For instance [:void f(int):] is the referent for [:typedef void f(int):].
diff --git a/sdk/lib/rules.gni b/sdk/lib/rules.gni
index 27779ea..fe51bbb 100644
--- a/sdk/lib/rules.gni
+++ b/sdk/lib/rules.gni
@@ -31,24 +31,29 @@
   } else {
     destination = "$root_gen_dir/dart_sdk"
   }
-  dart_sdk_sdk_lib_path =
-      rebase_path("sdk/lib", "", dart_root)
+  dart_sdk_sdk_lib_path = rebase_path("sdk/lib", "", dart_root)
   dart_sdk_tools_gypi_to_gn_path =
       rebase_path("tools/gypi_to_gn.py", "", dart_root)
+
   # The name of the SDK library being copied.
   lib_name = invoker.sdk_lib_name
+
   # The path to the libraries source directory.
   lib_path = rebase_path(lib_name, "", dart_sdk_sdk_lib_path)
+
   # The path to the sources gypi.
   lib_sources_gypi = lib_name + "_sources.gypi"
+
   # Get the contents of the gypi file.
   sdk_lib_sources_gypi =
       exec_script(dart_sdk_tools_gypi_to_gn_path,
-                  [rebase_path(lib_sources_gypi, "", lib_path)],
+                  [ rebase_path(lib_sources_gypi, "", lib_path) ],
                   "scope",
-                  [rebase_path(lib_sources_gypi, "", lib_path)])
+                  [ rebase_path(lib_sources_gypi, "", lib_path) ])
   copy(target_name) {
     sources = rebase_path(sdk_lib_sources_gypi.sources, "", lib_path)
-    outputs = [ "$destination/$lib_name/{{source_file_part}}" ]
+    outputs = [
+      "$destination/$lib_name/{{source_file_part}}",
+    ]
   }
 }
diff --git a/tests/co19/co19-analyzer2.status b/tests/co19/co19-analyzer2.status
index 0d0cdc5..97507e5 100644
--- a/tests/co19/co19-analyzer2.status
+++ b/tests/co19/co19-analyzer2.status
@@ -210,7 +210,6 @@
 LayoutTests/fast/backgrounds/001_t01: StaticWarning # Please triage this failure.
 LayoutTests/fast/canvas/canvas-arc-negative-radius_t01: StaticWarning # Issue 20939
 LayoutTests/fast/canvas/canvas-createImageBitmap-animated_t01: StaticWarning # Please triage this failure.
-LayoutTests/fast/canvas/webgl/tex-image-and-sub-image-2d-with-array-buffer-view_t01: StaticWarning # Please triage this failure.
 LayoutTests/fast/canvas/webgl/webgl-specific_t01: StaticWarning # Please triage this failure.
 LayoutTests/fast/dom/DOMImplementation/createDocument-namespace-err_t01: StaticWarning # Please triage this failure.
 LayoutTests/fast/dom/DOMImplementation/createDocumentType-err_t01: StaticWarning # Please triage this failure.
diff --git a/tests/co19/co19-kernel.status b/tests/co19/co19-kernel.status
new file mode 100644
index 0000000..e3a01cf
--- /dev/null
+++ b/tests/co19/co19-kernel.status
@@ -0,0 +1,626 @@
+# Copyright (c) 2016, the Dart project authors.  Please see the AUTHORS file
+# for details. All rights reserved. Use of this source code is governed by a
+# BSD-style license that can be found in the LICENSE file.
+
+# Disable tests globally for kernel.
+[ $compiler == rasta || $compiler == rastap || $compiler == dartk || $compiler == dartkp ]
+Language/Metadata/*: Skip # No support for metadata ATM.
+LibTest/async/DeferredLibrary/DeferredLibrary_A01_t01: Skip # No support for deferred libraries.
+LibTest/isolate/*: Skip # No support for isolates ATM.
+
+# Override tests marked as failing elsewhere.
+[ $compiler == dartk || $compiler == dartkp ]
+Language/Libraries_and_Scripts/Exports/reexport_t01: Pass
+
+# dartk: JIT failures
+[ $compiler == dartk && $runtime == vm ]
+Language/Classes/Constructors/Generative_Constructors/execution_of_a_superinitializer_t01: RuntimeError
+Language/Classes/Constructors/Generative_Constructors/execution_of_an_initializer_t02: RuntimeError
+Language/Classes/Constructors/Generative_Constructors/formal_parameter_t01: Crash
+Language/Classes/Constructors/Generative_Constructors/formal_parameter_t03: Crash
+Language/Classes/Constructors/Generative_Constructors/formal_parameter_t04: Crash
+Language/Classes/Constructors/Generative_Constructors/formal_parameter_t05: Crash
+Language/Classes/Constructors/Generative_Constructors/formal_parameter_t06: Crash
+Language/Classes/Constructors/Generative_Constructors/initializing_formals_execution_t02: RuntimeError
+Language/Classes/Constructors/Generative_Constructors/initializing_this_t02: Crash
+Language/Classes/Getters/static_getter_t02: CompileTimeError
+Language/Classes/Setters/name_t08: CompileTimeError
+Language/Classes/Setters/name_t09: CompileTimeError
+Language/Classes/Setters/name_t10: CompileTimeError
+Language/Classes/Setters/name_t11: CompileTimeError
+Language/Classes/Setters/name_t12: CompileTimeError
+Language/Classes/Setters/name_t13: CompileTimeError
+Language/Classes/Setters/name_t14: CompileTimeError
+Language/Classes/Setters/name_t15: CompileTimeError
+Language/Classes/definition_t23: CompileTimeError
+Language/Enums/declaration_equivalent_t01: RuntimeError
+Language/Enums/syntax_t08: MissingCompileTimeError
+Language/Enums/syntax_t09: MissingCompileTimeError
+Language/Expressions/Assignment/indexed_expression_super_t01: RuntimeError
+Language/Expressions/Assignment/indexed_expression_super_t02: RuntimeError
+Language/Expressions/Assignment/indexed_expression_super_t04: RuntimeError
+Language/Expressions/Assignment/super_assignment_failed_t01: RuntimeError
+Language/Expressions/Assignment/super_assignment_failed_t02: RuntimeError
+Language/Expressions/Assignment/super_assignment_t06: RuntimeError
+Language/Expressions/Assignment/super_assignment_value_t02: RuntimeError
+Language/Expressions/Constants/exception_t01: MissingCompileTimeError
+Language/Expressions/Constants/exception_t02: MissingCompileTimeError
+Language/Expressions/Constants/string_length_t01: Crash
+Language/Expressions/Function_Invocation/Actual_Argument_List_Evaluation/syntax_t05: MissingCompileTimeError
+Language/Expressions/Function_Invocation/Function_Expression_Invocation/not_a_function_expression_t01: RuntimeError
+Language/Expressions/Function_Invocation/Unqualified_Invocation/function_expr_invocation_t03: RuntimeError
+Language/Expressions/Function_Invocation/Unqualified_Invocation/function_expr_invocation_t04: RuntimeError
+Language/Expressions/Function_Invocation/Unqualified_Invocation/instance_context_invocation_t03: MissingCompileTimeError
+Language/Expressions/Function_Invocation/Unqualified_Invocation/instance_context_invocation_t04: MissingCompileTimeError
+Language/Expressions/Function_Invocation/Unqualified_Invocation/static_method_invocation_t02: RuntimeError
+Language/Expressions/Identifier_Reference/built_in_identifier_t35: Pass
+Language/Expressions/Identifier_Reference/built_in_identifier_t36: Pass
+Language/Expressions/Identifier_Reference/built_in_identifier_t37: Pass
+Language/Expressions/Identifier_Reference/built_in_not_dynamic_t14: Pass
+Language/Expressions/Identifier_Reference/built_in_not_dynamic_t17: MissingCompileTimeError
+Language/Expressions/Identifier_Reference/built_in_not_dynamic_t18: MissingCompileTimeError
+Language/Expressions/Identifier_Reference/built_in_not_dynamic_t21: MissingCompileTimeError
+Language/Expressions/Identifier_Reference/built_in_not_dynamic_t22: MissingCompileTimeError
+Language/Expressions/Identifier_Reference/built_in_not_dynamic_t23: MissingCompileTimeError
+Language/Expressions/Identifier_Reference/built_in_not_dynamic_t24: MissingCompileTimeError
+Language/Expressions/Identifier_Reference/built_in_not_dynamic_t25: MissingCompileTimeError
+Language/Expressions/Identifier_Reference/built_in_not_dynamic_t26: MissingCompileTimeError
+Language/Expressions/Identifier_Reference/built_in_not_dynamic_t27: MissingCompileTimeError
+Language/Expressions/Identifier_Reference/built_in_not_dynamic_t28: MissingCompileTimeError
+Language/Expressions/Identifier_Reference/built_in_not_dynamic_t29: MissingCompileTimeError
+Language/Expressions/Identifier_Reference/built_in_not_dynamic_t30: MissingCompileTimeError
+Language/Expressions/Identifier_Reference/built_in_not_dynamic_t31: MissingCompileTimeError
+Language/Expressions/Identifier_Reference/built_in_not_dynamic_t32: MissingCompileTimeError
+Language/Expressions/Identifier_Reference/evaluation_property_extraction_t03: RuntimeError
+Language/Expressions/Identifier_Reference/evaluation_type_parameter_t01: RuntimeError
+Language/Expressions/Identifier_Reference/evaluation_type_parameter_t02: MissingCompileTimeError
+Language/Expressions/Instance_Creation/Const/canonicalized_t05: RuntimeError
+Language/Expressions/Instance_Creation/New/evaluation_t12: RuntimeError
+Language/Expressions/Instance_Creation/New/evaluation_t19: RuntimeError
+Language/Expressions/Instance_Creation/New/evaluation_t20: RuntimeError
+Language/Expressions/Lookup/Method_Lookup/superclass_t08: RuntimeError
+Language/Expressions/Method_Invocation/Ordinary_Invocation/accessible_instance_member_t05: RuntimeError
+Language/Expressions/Method_Invocation/Ordinary_Invocation/evaluation_t07: RuntimeError
+Language/Expressions/Method_Invocation/Ordinary_Invocation/method_lookup_failed_t18: RuntimeError
+Language/Expressions/Method_Invocation/Ordinary_Invocation/syntax_t05: MissingCompileTimeError
+Language/Expressions/Method_Invocation/Ordinary_Invocation/syntax_t10: MissingCompileTimeError
+Language/Expressions/Method_Invocation/Super_Invocation/evaluation_t05: Crash
+Language/Expressions/Method_Invocation/Super_Invocation/getter_lookup_failed_t01: RuntimeError
+Language/Expressions/Method_Invocation/Super_Invocation/getter_lookup_failed_t02: RuntimeError
+Language/Expressions/Method_Invocation/Super_Invocation/getter_lookup_failed_t03: RuntimeError
+Language/Expressions/Method_Invocation/Super_Invocation/getter_lookup_failed_t04: RuntimeError
+Language/Expressions/Method_Invocation/Super_Invocation/syntax_t05: MissingCompileTimeError
+Language/Expressions/Object_Identity/string_t01: RuntimeError
+Language/Expressions/Property_Extraction/Anonymous_Constructor_Closurization/identical_t01: CompileTimeError
+Language/Expressions/Property_Extraction/Anonymous_Constructor_Closurization/identical_t02: CompileTimeError
+Language/Expressions/Property_Extraction/Anonymous_Constructor_Closurization/identical_t03: CompileTimeError
+Language/Expressions/Property_Extraction/Anonymous_Constructor_Closurization/named_parameters_t01: CompileTimeError
+Language/Expressions/Property_Extraction/Anonymous_Constructor_Closurization/positional_parameters_t01: CompileTimeError
+Language/Expressions/Property_Extraction/Anonymous_Constructor_Extraction/closurization_t01: CompileTimeError
+Language/Expressions/Property_Extraction/Anonymous_Constructor_Extraction/closurization_t02: CompileTimeError
+Language/Expressions/Property_Extraction/Anonymous_Constructor_Extraction/closurization_t03: CompileTimeError
+Language/Expressions/Property_Extraction/Anonymous_Constructor_Extraction/deferred_type_t01: CompileTimeError
+Language/Expressions/Property_Extraction/Anonymous_Constructor_Extraction/malbounded_type_t01: CompileTimeError
+Language/Expressions/Property_Extraction/Anonymous_Constructor_Extraction/malbounded_type_t02: CompileTimeError
+Language/Expressions/Property_Extraction/Anonymous_Constructor_Extraction/malformed_type_t01: CompileTimeError
+Language/Expressions/Property_Extraction/Anonymous_Constructor_Extraction/malformed_type_t02: CompileTimeError
+Language/Expressions/Property_Extraction/Anonymous_Constructor_Extraction/no_such_method_t01: CompileTimeError
+Language/Expressions/Property_Extraction/Anonymous_Constructor_Extraction/no_such_method_t02: CompileTimeError
+Language/Expressions/Property_Extraction/Anonymous_Constructor_Extraction/not_class_t01: CompileTimeError
+Language/Expressions/Property_Extraction/Anonymous_Constructor_Extraction/not_class_t02: CompileTimeError
+Language/Expressions/Property_Extraction/Anonymous_Constructor_Extraction/not_class_t03: CompileTimeError
+Language/Expressions/Property_Extraction/Anonymous_Constructor_Extraction/static_type_t01: CompileTimeError
+Language/Expressions/Property_Extraction/Anonymous_Constructor_Extraction/static_type_t02: CompileTimeError
+Language/Expressions/Property_Extraction/Anonymous_Constructor_Extraction/static_type_t03: CompileTimeError
+Language/Expressions/Property_Extraction/General_Closurization/class_object_member_t01: Pass
+Language/Expressions/Property_Extraction/General_Closurization/class_object_member_t02: Pass
+Language/Expressions/Property_Extraction/General_Closurization/class_object_member_t03: Pass
+Language/Expressions/Property_Extraction/General_Closurization/class_object_member_t04: Pass
+Language/Expressions/Property_Extraction/General_Closurization/class_object_member_t05: Pass
+Language/Expressions/Property_Extraction/General_Closurization/class_object_member_t06: Pass
+Language/Expressions/Property_Extraction/General_Closurization/expression_evaluation_t01: CompileTimeError
+Language/Expressions/Property_Extraction/General_Closurization/expression_evaluation_t02: CompileTimeError
+Language/Expressions/Property_Extraction/General_Closurization/expression_evaluation_t03: CompileTimeError
+Language/Expressions/Property_Extraction/General_Closurization/getter_lookup_t01: CompileTimeError
+Language/Expressions/Property_Extraction/General_Closurization/getter_lookup_t02: CompileTimeError
+Language/Expressions/Property_Extraction/General_Closurization/getter_lookup_t03: CompileTimeError
+Language/Expressions/Property_Extraction/General_Closurization/getter_lookup_t04: CompileTimeError
+Language/Expressions/Property_Extraction/General_Closurization/getter_lookup_t05: CompileTimeError
+Language/Expressions/Property_Extraction/General_Closurization/getter_lookup_t06: CompileTimeError
+Language/Expressions/Property_Extraction/General_Closurization/getter_lookup_t07: CompileTimeError
+Language/Expressions/Property_Extraction/General_Closurization/getter_lookup_t08: CompileTimeError
+Language/Expressions/Property_Extraction/General_Closurization/getter_lookup_t09: CompileTimeError
+Language/Expressions/Property_Extraction/General_Closurization/method_lookup_t01: CompileTimeError
+Language/Expressions/Property_Extraction/General_Closurization/method_lookup_t02: CompileTimeError
+Language/Expressions/Property_Extraction/General_Closurization/method_lookup_t03: CompileTimeError
+Language/Expressions/Property_Extraction/General_Closurization/method_lookup_t04: CompileTimeError
+Language/Expressions/Property_Extraction/General_Closurization/method_lookup_t05: CompileTimeError
+Language/Expressions/Property_Extraction/General_Closurization/method_lookup_t06: CompileTimeError
+Language/Expressions/Property_Extraction/General_Closurization/method_lookup_t07: CompileTimeError
+Language/Expressions/Property_Extraction/General_Closurization/no_accessible_member_t01: CompileTimeError
+Language/Expressions/Property_Extraction/General_Closurization/no_accessible_member_t02: CompileTimeError
+Language/Expressions/Property_Extraction/General_Closurization/no_accessible_member_t03: CompileTimeError
+Language/Expressions/Property_Extraction/General_Closurization/no_accessible_member_t04: CompileTimeError
+Language/Expressions/Property_Extraction/General_Closurization/no_accessible_member_t05: CompileTimeError
+Language/Expressions/Property_Extraction/General_Closurization/no_accessible_member_t06: CompileTimeError
+Language/Expressions/Property_Extraction/General_Closurization/no_accessible_member_t07: CompileTimeError
+Language/Expressions/Property_Extraction/General_Closurization/no_accessible_member_t08: CompileTimeError
+Language/Expressions/Property_Extraction/General_Closurization/setter_lookup_t01: CompileTimeError
+Language/Expressions/Property_Extraction/General_Closurization/setter_lookup_t02: CompileTimeError
+Language/Expressions/Property_Extraction/General_Closurization/setter_lookup_t03: CompileTimeError
+Language/Expressions/Property_Extraction/General_Closurization/setter_lookup_t04: CompileTimeError
+Language/Expressions/Property_Extraction/General_Closurization/setter_lookup_t05: CompileTimeError
+Language/Expressions/Property_Extraction/General_Closurization/setter_lookup_t06: CompileTimeError
+Language/Expressions/Property_Extraction/General_Closurization/setter_lookup_t07: CompileTimeError
+Language/Expressions/Property_Extraction/General_Closurization/setter_lookup_t08: CompileTimeError
+Language/Expressions/Property_Extraction/General_Closurization/setter_lookup_t09: CompileTimeError
+Language/Expressions/Property_Extraction/General_Closurization/static_type_t01: CompileTimeError
+Language/Expressions/Property_Extraction/General_Closurization/static_type_t02: CompileTimeError
+Language/Expressions/Property_Extraction/General_Closurization/static_type_t03: CompileTimeError
+Language/Expressions/Property_Extraction/General_Closurization/static_type_t04: CompileTimeError
+Language/Expressions/Property_Extraction/General_Closurization/static_type_t05: CompileTimeError
+Language/Expressions/Property_Extraction/General_Closurization/static_type_t06: CompileTimeError
+Language/Expressions/Property_Extraction/General_Closurization/static_type_t07: CompileTimeError
+Language/Expressions/Property_Extraction/Getter_Access_and_Method_Extraction/expression_evaluation_t07: CompileTimeError
+Language/Expressions/Property_Extraction/Named_Constructor_Closurization/identical_t01: CompileTimeError
+Language/Expressions/Property_Extraction/Named_Constructor_Closurization/identical_t02: CompileTimeError
+Language/Expressions/Property_Extraction/Named_Constructor_Closurization/named_parameters_t01: CompileTimeError
+Language/Expressions/Property_Extraction/Named_Constructor_Closurization/positional_parameters_t01: CompileTimeError
+Language/Expressions/Property_Extraction/Named_Constructor_Extraction/closurization_t01: CompileTimeError
+Language/Expressions/Property_Extraction/Named_Constructor_Extraction/closurization_t02: CompileTimeError
+Language/Expressions/Property_Extraction/Named_Constructor_Extraction/deferred_type_t01: CompileTimeError
+Language/Expressions/Property_Extraction/Named_Constructor_Extraction/malbounded_type_t01: CompileTimeError
+Language/Expressions/Property_Extraction/Named_Constructor_Extraction/malbounded_type_t02: CompileTimeError
+Language/Expressions/Property_Extraction/Named_Constructor_Extraction/malformed_type_t01: CompileTimeError
+Language/Expressions/Property_Extraction/Named_Constructor_Extraction/malformed_type_t02: CompileTimeError
+Language/Expressions/Property_Extraction/Named_Constructor_Extraction/no_such_method_t01: CompileTimeError
+Language/Expressions/Property_Extraction/Named_Constructor_Extraction/no_such_method_t02: CompileTimeError
+Language/Expressions/Property_Extraction/Named_Constructor_Extraction/not_class_t01: CompileTimeError
+Language/Expressions/Property_Extraction/Named_Constructor_Extraction/not_class_t02: CompileTimeError
+Language/Expressions/Property_Extraction/Named_Constructor_Extraction/not_class_t03: CompileTimeError
+Language/Expressions/Property_Extraction/Named_Constructor_Extraction/static_type_t01: CompileTimeError
+Language/Expressions/Property_Extraction/Named_Constructor_Extraction/static_type_t02: CompileTimeError
+Language/Expressions/Property_Extraction/Named_Constructor_Extraction/static_type_t03: CompileTimeError
+Language/Expressions/Property_Extraction/Named_Constructor_Extraction/static_type_t04: CompileTimeError
+Language/Expressions/Property_Extraction/Ordinary_Member_Closurization/getter_closurization_t01: CompileTimeError
+Language/Expressions/Property_Extraction/Ordinary_Member_Closurization/getter_closurization_t02: CompileTimeError
+Language/Expressions/Property_Extraction/Ordinary_Member_Closurization/getter_closurization_t03: CompileTimeError
+Language/Expressions/Property_Extraction/Ordinary_Member_Closurization/getter_closurization_t04: CompileTimeError
+Language/Expressions/Property_Extraction/Ordinary_Member_Closurization/getter_closurization_t05: CompileTimeError
+Language/Expressions/Property_Extraction/Ordinary_Member_Closurization/getter_closurization_t06: CompileTimeError
+Language/Expressions/Property_Extraction/Ordinary_Member_Closurization/getter_closurization_t07: CompileTimeError
+Language/Expressions/Property_Extraction/Ordinary_Member_Closurization/getter_closurization_t08: CompileTimeError
+Language/Expressions/Property_Extraction/Ordinary_Member_Closurization/method_closurization_named_params_t01: CompileTimeError
+Language/Expressions/Property_Extraction/Ordinary_Member_Closurization/method_closurization_named_params_t02: CompileTimeError
+Language/Expressions/Property_Extraction/Ordinary_Member_Closurization/method_closurization_positional_params_t01: CompileTimeError
+Language/Expressions/Property_Extraction/Ordinary_Member_Closurization/method_closurization_positional_params_t02: CompileTimeError
+Language/Expressions/Property_Extraction/Ordinary_Member_Closurization/method_identical_t01: CompileTimeError
+Language/Expressions/Property_Extraction/Ordinary_Member_Closurization/method_identical_t02: CompileTimeError
+Language/Expressions/Property_Extraction/Ordinary_Member_Closurization/method_identical_t03: CompileTimeError
+Language/Expressions/Property_Extraction/Ordinary_Member_Closurization/operator_closurization_list_access_t01: CompileTimeError
+Language/Expressions/Property_Extraction/Ordinary_Member_Closurization/operator_closurization_list_assignment_t01: CompileTimeError
+Language/Expressions/Property_Extraction/Ordinary_Member_Closurization/operator_closurization_t01: CompileTimeError
+Language/Expressions/Property_Extraction/Ordinary_Member_Closurization/operator_closurization_t02: CompileTimeError
+Language/Expressions/Property_Extraction/Ordinary_Member_Closurization/operator_closurization_t03: CompileTimeError
+Language/Expressions/Property_Extraction/Ordinary_Member_Closurization/operator_closurization_t04: CompileTimeError
+Language/Expressions/Property_Extraction/Ordinary_Member_Closurization/operator_closurization_t05: CompileTimeError
+Language/Expressions/Property_Extraction/Ordinary_Member_Closurization/operator_closurization_t06: CompileTimeError
+Language/Expressions/Property_Extraction/Ordinary_Member_Closurization/operator_closurization_t07: CompileTimeError
+Language/Expressions/Property_Extraction/Ordinary_Member_Closurization/operator_closurization_t08: CompileTimeError
+Language/Expressions/Property_Extraction/Ordinary_Member_Closurization/operator_closurization_t09: CompileTimeError
+Language/Expressions/Property_Extraction/Ordinary_Member_Closurization/operator_closurization_t10: CompileTimeError
+Language/Expressions/Property_Extraction/Ordinary_Member_Closurization/operator_closurization_t11: CompileTimeError
+Language/Expressions/Property_Extraction/Ordinary_Member_Closurization/operator_closurization_t12: CompileTimeError
+Language/Expressions/Property_Extraction/Ordinary_Member_Closurization/operator_closurization_t13: CompileTimeError
+Language/Expressions/Property_Extraction/Ordinary_Member_Closurization/operator_closurization_t14: CompileTimeError
+Language/Expressions/Property_Extraction/Ordinary_Member_Closurization/operator_closurization_t15: CompileTimeError
+Language/Expressions/Property_Extraction/Ordinary_Member_Closurization/operator_closurization_t16: CompileTimeError
+Language/Expressions/Property_Extraction/Ordinary_Member_Closurization/operator_closurization_t17: CompileTimeError
+Language/Expressions/Property_Extraction/Ordinary_Member_Closurization/operator_closurization_unary_bitwise_t01: CompileTimeError
+Language/Expressions/Property_Extraction/Ordinary_Member_Closurization/setter_closurization_t01: CompileTimeError
+Language/Expressions/Property_Extraction/Ordinary_Member_Closurization/setter_closurization_t02: CompileTimeError
+Language/Expressions/Property_Extraction/Ordinary_Member_Closurization/setter_closurization_t03: CompileTimeError
+Language/Expressions/Property_Extraction/Ordinary_Member_Closurization/setter_closurization_t04: CompileTimeError
+Language/Expressions/Property_Extraction/Ordinary_Member_Closurization/setter_closurization_t05: CompileTimeError
+Language/Expressions/Property_Extraction/Ordinary_Member_Closurization/setter_closurization_t06: CompileTimeError
+Language/Expressions/Property_Extraction/Ordinary_Member_Closurization/setter_closurization_t07: CompileTimeError
+Language/Expressions/Property_Extraction/Ordinary_Member_Closurization/setter_closurization_t08: CompileTimeError
+Language/Expressions/Property_Extraction/Super_Getter_Access_and_Method_Closurization/no_such_method_t01: RuntimeError
+Language/Expressions/Property_Extraction/Super_Getter_Access_and_Method_Closurization/no_such_method_t02: RuntimeError
+Language/Expressions/Spawning_an_Isolate/new_isolate_t01: Crash
+Language/Expressions/Strings/adjacent_strings_t02: RuntimeError
+Language/Expressions/Type_Test/evaluation_t10: RuntimeError
+Language/Functions/External_Functions/not_connected_to_a_body_t01: RuntimeError
+Language/Functions/Formal_Parameters/syntax_t04: MissingCompileTimeError
+Language/Functions/Formal_Parameters/syntax_t05: MissingCompileTimeError
+Language/Functions/Formal_Parameters/syntax_t12: MissingCompileTimeError
+Language/Interfaces/Superinterfaces/Inheritance_and_Overriding/same_name_method_and_getter_t01: CompileTimeError
+Language/Interfaces/Superinterfaces/Inheritance_and_Overriding/same_name_method_and_getter_t02: CompileTimeError
+Language/Libraries_and_Scripts/Exports/invalid_uri_t02: Pass
+Language/Libraries_and_Scripts/Exports/syntax_t01: MissingCompileTimeError
+Language/Libraries_and_Scripts/Exports/syntax_t04: MissingCompileTimeError
+Language/Libraries_and_Scripts/Exports/syntax_t05: MissingCompileTimeError
+Language/Libraries_and_Scripts/Exports/syntax_t06: MissingCompileTimeError
+Language/Libraries_and_Scripts/Imports/deferred_import_t01: RuntimeError
+Language/Libraries_and_Scripts/Imports/deferred_import_t02: RuntimeError
+Language/Libraries_and_Scripts/Imports/invalid_uri_deferred_t02: CompileTimeError
+Language/Libraries_and_Scripts/Imports/invalid_uri_t02: Pass
+Language/Libraries_and_Scripts/Imports/static_type_t01: RuntimeError
+Language/Libraries_and_Scripts/Parts/compilation_t02: Crash
+Language/Libraries_and_Scripts/Parts/syntax_t06: Pass
+Language/Libraries_and_Scripts/Scripts/top_level_main_t01: Crash
+Language/Libraries_and_Scripts/Scripts/top_level_main_t02: Crash
+Language/Libraries_and_Scripts/Scripts/top_level_main_t05: Crash
+Language/Libraries_and_Scripts/definition_syntax_t01: MissingCompileTimeError
+Language/Libraries_and_Scripts/definition_syntax_t03: MissingCompileTimeError
+Language/Libraries_and_Scripts/definition_syntax_t04: MissingCompileTimeError
+Language/Libraries_and_Scripts/definition_syntax_t06: MissingCompileTimeError
+Language/Libraries_and_Scripts/definition_syntax_t07: MissingCompileTimeError
+Language/Libraries_and_Scripts/definition_syntax_t08: MissingCompileTimeError
+Language/Libraries_and_Scripts/definition_syntax_t09: MissingCompileTimeError
+Language/Libraries_and_Scripts/definition_syntax_t10: MissingCompileTimeError
+Language/Libraries_and_Scripts/definition_syntax_t15: MissingCompileTimeError
+Language/Libraries_and_Scripts/definition_syntax_t17: MissingCompileTimeError
+Language/Libraries_and_Scripts/definition_syntax_t18: MissingCompileTimeError
+Language/Libraries_and_Scripts/definition_syntax_t19: MissingCompileTimeError
+Language/Libraries_and_Scripts/definition_syntax_t20: MissingCompileTimeError
+Language/Libraries_and_Scripts/definition_syntax_t21: MissingCompileTimeError
+Language/Libraries_and_Scripts/definition_syntax_t22: MissingCompileTimeError
+Language/Libraries_and_Scripts/definition_syntax_t23: MissingCompileTimeError
+Language/Libraries_and_Scripts/definition_syntax_t24: MissingCompileTimeError
+Language/Libraries_and_Scripts/definition_syntax_t25: MissingCompileTimeError
+Language/Libraries_and_Scripts/definition_syntax_t26: MissingCompileTimeError
+Language/Libraries_and_Scripts/definition_syntax_t27: MissingCompileTimeError
+Language/Libraries_and_Scripts/definition_syntax_t29: MissingCompileTimeError
+Language/Libraries_and_Scripts/top_level_syntax_t02: MissingCompileTimeError
+Language/Libraries_and_Scripts/top_level_syntax_t03: MissingCompileTimeError
+Language/Libraries_and_Scripts/top_level_syntax_t04: MissingCompileTimeError
+Language/Libraries_and_Scripts/top_level_syntax_t05: MissingCompileTimeError
+Language/Libraries_and_Scripts/top_level_syntax_t06: MissingCompileTimeError
+Language/Libraries_and_Scripts/top_level_syntax_t07: MissingCompileTimeError
+Language/Libraries_and_Scripts/top_level_syntax_t08: MissingCompileTimeError
+Language/Libraries_and_Scripts/top_level_syntax_t09: MissingCompileTimeError
+Language/Libraries_and_Scripts/top_level_syntax_t10: MissingCompileTimeError
+Language/Libraries_and_Scripts/top_level_syntax_t11: MissingCompileTimeError
+Language/Libraries_and_Scripts/top_level_syntax_t12: MissingCompileTimeError
+Language/Libraries_and_Scripts/top_level_syntax_t13: MissingCompileTimeError
+Language/Libraries_and_Scripts/top_level_syntax_t14: MissingCompileTimeError
+Language/Libraries_and_Scripts/top_level_syntax_t15: MissingCompileTimeError
+Language/Libraries_and_Scripts/top_level_syntax_t16: MissingCompileTimeError
+Language/Libraries_and_Scripts/top_level_syntax_t17: MissingCompileTimeError
+Language/Libraries_and_Scripts/top_level_syntax_t18: MissingCompileTimeError
+Language/Libraries_and_Scripts/top_level_syntax_t19: MissingCompileTimeError
+Language/Mixins/Mixin_Application/error_t01: MissingCompileTimeError
+Language/Mixins/Mixin_Application/error_t02: MissingCompileTimeError
+Language/Mixins/Mixin_Application/syntax_t16: Crash
+Language/Statements/Break/label_t03: MissingCompileTimeError
+Language/Statements/Break/label_t04: MissingCompileTimeError
+Language/Statements/Continue/label_t07: MissingCompileTimeError
+Language/Statements/Labels/syntax_t03: Pass
+Language/Statements/Rethrow/execution_t04: RuntimeError
+Language/Statements/Switch/syntax_t02: Pass
+Language/Statements/Try/catch_scope_t01: RuntimeError
+Language/Types/Interface_Types/subtype_t44: RuntimeError
+Language/Types/Static_Types/deferred_type_t01: RuntimeError
+Language/Variables/final_or_static_initialization_t01: MissingCompileTimeError
+Language/Variables/final_or_static_initialization_t02: MissingCompileTimeError
+Language/Variables/final_or_static_initialization_t03: MissingCompileTimeError
+Language/Variables/final_t04: MissingCompileTimeError
+Language/Variables/final_t05: MissingCompileTimeError
+Language/Variables/final_t06: MissingCompileTimeError
+Language/Variables/final_t07: MissingCompileTimeError
+LibTest/core/Invocation/isAccessor_A01_t01: RuntimeError
+LibTest/core/Invocation/isAccessor_A01_t02: RuntimeError
+LibTest/core/Invocation/isGetter_A01_t01: RuntimeError
+LibTest/core/Invocation/isGetter_A01_t02: RuntimeError
+LibTest/core/Invocation/isMethod_A01_t01: RuntimeError
+LibTest/core/Invocation/isMethod_A01_t02: RuntimeError
+LibTest/core/Invocation/isSetter_A01_t01: RuntimeError
+LibTest/core/Invocation/isSetter_A01_t02: RuntimeError
+LibTest/core/Invocation/memberName_A01_t01: RuntimeError
+LibTest/core/Invocation/namedArguments_A01_t01: RuntimeError
+LibTest/core/Invocation/positionalArguments_A01_t01: RuntimeError
+
+# dartk: precompilation failures
+[ $compiler == dartkp && $runtime == dart_precompiled ]
+Language/Classes/Constructors/Generative_Constructors/execution_of_a_superinitializer_t01: RuntimeError
+Language/Classes/Constructors/Generative_Constructors/execution_of_an_initializer_t02: RuntimeError
+Language/Classes/Constructors/Generative_Constructors/formal_parameter_t01: Crash
+Language/Classes/Constructors/Generative_Constructors/formal_parameter_t03: Crash
+Language/Classes/Constructors/Generative_Constructors/formal_parameter_t04: Crash
+Language/Classes/Constructors/Generative_Constructors/formal_parameter_t05: Crash
+Language/Classes/Constructors/Generative_Constructors/formal_parameter_t06: Crash
+Language/Classes/Constructors/Generative_Constructors/initializing_formals_execution_t02: RuntimeError
+Language/Classes/Constructors/Generative_Constructors/initializing_this_t02: Crash
+Language/Classes/Getters/static_getter_t02: CompileTimeError
+Language/Classes/Setters/name_t08: CompileTimeError
+Language/Classes/Setters/name_t09: CompileTimeError
+Language/Classes/Setters/name_t10: CompileTimeError
+Language/Classes/Setters/name_t11: CompileTimeError
+Language/Classes/Setters/name_t12: CompileTimeError
+Language/Classes/Setters/name_t13: CompileTimeError
+Language/Classes/Setters/name_t14: CompileTimeError
+Language/Classes/Setters/name_t15: CompileTimeError
+Language/Classes/definition_t23: CompileTimeError
+Language/Enums/declaration_equivalent_t01: RuntimeError
+Language/Enums/syntax_t08: MissingCompileTimeError
+Language/Enums/syntax_t09: MissingCompileTimeError
+Language/Expressions/Assignment/indexed_expression_super_t01: RuntimeError
+Language/Expressions/Assignment/indexed_expression_super_t02: RuntimeError
+Language/Expressions/Assignment/indexed_expression_super_t04: RuntimeError
+Language/Expressions/Assignment/super_assignment_failed_t01: RuntimeError
+Language/Expressions/Assignment/super_assignment_failed_t02: RuntimeError
+Language/Expressions/Assignment/super_assignment_t06: RuntimeError
+Language/Expressions/Assignment/super_assignment_value_t02: RuntimeError
+Language/Expressions/Constants/exception_t01: Crash
+Language/Expressions/Constants/exception_t02: Crash
+Language/Expressions/Constants/string_length_t01: Crash
+Language/Expressions/Function_Invocation/Actual_Argument_List_Evaluation/syntax_t05: MissingCompileTimeError
+Language/Expressions/Function_Invocation/Function_Expression_Invocation/not_a_function_expression_t01: Crash
+Language/Expressions/Function_Invocation/Unqualified_Invocation/function_expr_invocation_t03: RuntimeError
+Language/Expressions/Function_Invocation/Unqualified_Invocation/function_expr_invocation_t04: RuntimeError
+Language/Expressions/Function_Invocation/Unqualified_Invocation/instance_context_invocation_t03: MissingCompileTimeError
+Language/Expressions/Function_Invocation/Unqualified_Invocation/instance_context_invocation_t04: MissingCompileTimeError
+Language/Expressions/Function_Invocation/Unqualified_Invocation/static_method_invocation_t02: RuntimeError
+Language/Expressions/Identifier_Reference/built_in_identifier_t35: Pass
+Language/Expressions/Identifier_Reference/built_in_identifier_t36: Pass
+Language/Expressions/Identifier_Reference/built_in_identifier_t37: Pass
+Language/Expressions/Identifier_Reference/built_in_not_dynamic_t14: Pass
+Language/Expressions/Identifier_Reference/built_in_not_dynamic_t17: MissingCompileTimeError
+Language/Expressions/Identifier_Reference/built_in_not_dynamic_t18: MissingCompileTimeError
+Language/Expressions/Identifier_Reference/built_in_not_dynamic_t21: MissingCompileTimeError
+Language/Expressions/Identifier_Reference/built_in_not_dynamic_t22: MissingCompileTimeError
+Language/Expressions/Identifier_Reference/built_in_not_dynamic_t23: MissingCompileTimeError
+Language/Expressions/Identifier_Reference/built_in_not_dynamic_t24: MissingCompileTimeError
+Language/Expressions/Identifier_Reference/built_in_not_dynamic_t25: MissingCompileTimeError
+Language/Expressions/Identifier_Reference/built_in_not_dynamic_t26: MissingCompileTimeError
+Language/Expressions/Identifier_Reference/built_in_not_dynamic_t27: MissingCompileTimeError
+Language/Expressions/Identifier_Reference/built_in_not_dynamic_t28: MissingCompileTimeError
+Language/Expressions/Identifier_Reference/built_in_not_dynamic_t29: MissingCompileTimeError
+Language/Expressions/Identifier_Reference/built_in_not_dynamic_t30: MissingCompileTimeError
+Language/Expressions/Identifier_Reference/built_in_not_dynamic_t31: MissingCompileTimeError
+Language/Expressions/Identifier_Reference/built_in_not_dynamic_t32: MissingCompileTimeError
+Language/Expressions/Identifier_Reference/evaluation_property_extraction_t03: RuntimeError
+Language/Expressions/Identifier_Reference/evaluation_type_parameter_t01: RuntimeError
+Language/Expressions/Instance_Creation/New/evaluation_t12: RuntimeError
+Language/Expressions/Instance_Creation/New/evaluation_t19: RuntimeError
+Language/Expressions/Instance_Creation/New/evaluation_t20: RuntimeError
+Language/Expressions/Lookup/Method_Lookup/superclass_t08: RuntimeError
+Language/Expressions/Method_Invocation/Ordinary_Invocation/accessible_instance_member_t05: RuntimeError
+Language/Expressions/Method_Invocation/Ordinary_Invocation/evaluation_t07: RuntimeError
+Language/Expressions/Method_Invocation/Ordinary_Invocation/method_lookup_failed_t18: RuntimeError
+Language/Expressions/Method_Invocation/Ordinary_Invocation/syntax_t05: MissingCompileTimeError
+Language/Expressions/Method_Invocation/Ordinary_Invocation/syntax_t10: MissingCompileTimeError
+Language/Expressions/Method_Invocation/Super_Invocation/evaluation_t05: Crash
+Language/Expressions/Method_Invocation/Super_Invocation/getter_lookup_failed_t01: RuntimeError
+Language/Expressions/Method_Invocation/Super_Invocation/getter_lookup_failed_t02: RuntimeError
+Language/Expressions/Method_Invocation/Super_Invocation/getter_lookup_failed_t03: RuntimeError
+Language/Expressions/Method_Invocation/Super_Invocation/getter_lookup_failed_t04: RuntimeError
+Language/Expressions/Method_Invocation/Super_Invocation/syntax_t05: MissingCompileTimeError
+Language/Expressions/Multiplicative_Expressions/syntax_t01: Crash
+Language/Expressions/Null/instance_of_class_null_t01: Crash
+Language/Expressions/Property_Extraction/Anonymous_Constructor_Closurization/identical_t01: CompileTimeError
+Language/Expressions/Property_Extraction/Anonymous_Constructor_Closurization/identical_t02: CompileTimeError
+Language/Expressions/Property_Extraction/Anonymous_Constructor_Closurization/identical_t03: CompileTimeError
+Language/Expressions/Property_Extraction/Anonymous_Constructor_Closurization/named_parameters_t01: CompileTimeError
+Language/Expressions/Property_Extraction/Anonymous_Constructor_Closurization/positional_parameters_t01: CompileTimeError
+Language/Expressions/Property_Extraction/Anonymous_Constructor_Extraction/closurization_t01: CompileTimeError
+Language/Expressions/Property_Extraction/Anonymous_Constructor_Extraction/closurization_t02: CompileTimeError
+Language/Expressions/Property_Extraction/Anonymous_Constructor_Extraction/closurization_t03: CompileTimeError
+Language/Expressions/Property_Extraction/Anonymous_Constructor_Extraction/deferred_type_t01: CompileTimeError
+Language/Expressions/Property_Extraction/Anonymous_Constructor_Extraction/malbounded_type_t01: CompileTimeError
+Language/Expressions/Property_Extraction/Anonymous_Constructor_Extraction/malbounded_type_t02: CompileTimeError
+Language/Expressions/Property_Extraction/Anonymous_Constructor_Extraction/malformed_type_t01: CompileTimeError
+Language/Expressions/Property_Extraction/Anonymous_Constructor_Extraction/malformed_type_t02: CompileTimeError
+Language/Expressions/Property_Extraction/Anonymous_Constructor_Extraction/no_such_method_t01: CompileTimeError
+Language/Expressions/Property_Extraction/Anonymous_Constructor_Extraction/no_such_method_t02: CompileTimeError
+Language/Expressions/Property_Extraction/Anonymous_Constructor_Extraction/not_class_t01: CompileTimeError
+Language/Expressions/Property_Extraction/Anonymous_Constructor_Extraction/not_class_t02: CompileTimeError
+Language/Expressions/Property_Extraction/Anonymous_Constructor_Extraction/not_class_t03: CompileTimeError
+Language/Expressions/Property_Extraction/Anonymous_Constructor_Extraction/static_type_t01: CompileTimeError
+Language/Expressions/Property_Extraction/Anonymous_Constructor_Extraction/static_type_t02: CompileTimeError
+Language/Expressions/Property_Extraction/Anonymous_Constructor_Extraction/static_type_t03: CompileTimeError
+Language/Expressions/Property_Extraction/General_Closurization/class_object_member_t01: Pass
+Language/Expressions/Property_Extraction/General_Closurization/class_object_member_t02: Pass
+Language/Expressions/Property_Extraction/General_Closurization/class_object_member_t03: Pass
+Language/Expressions/Property_Extraction/General_Closurization/class_object_member_t04: Pass
+Language/Expressions/Property_Extraction/General_Closurization/class_object_member_t05: Pass
+Language/Expressions/Property_Extraction/General_Closurization/class_object_member_t06: Pass
+Language/Expressions/Property_Extraction/General_Closurization/expression_evaluation_t01: CompileTimeError
+Language/Expressions/Property_Extraction/General_Closurization/expression_evaluation_t02: CompileTimeError
+Language/Expressions/Property_Extraction/General_Closurization/expression_evaluation_t03: CompileTimeError
+Language/Expressions/Property_Extraction/General_Closurization/getter_lookup_t01: CompileTimeError
+Language/Expressions/Property_Extraction/General_Closurization/getter_lookup_t02: CompileTimeError
+Language/Expressions/Property_Extraction/General_Closurization/getter_lookup_t03: CompileTimeError
+Language/Expressions/Property_Extraction/General_Closurization/getter_lookup_t04: CompileTimeError
+Language/Expressions/Property_Extraction/General_Closurization/getter_lookup_t05: CompileTimeError
+Language/Expressions/Property_Extraction/General_Closurization/getter_lookup_t06: CompileTimeError
+Language/Expressions/Property_Extraction/General_Closurization/getter_lookup_t07: CompileTimeError
+Language/Expressions/Property_Extraction/General_Closurization/getter_lookup_t08: CompileTimeError
+Language/Expressions/Property_Extraction/General_Closurization/getter_lookup_t09: CompileTimeError
+Language/Expressions/Property_Extraction/General_Closurization/method_lookup_t01: CompileTimeError
+Language/Expressions/Property_Extraction/General_Closurization/method_lookup_t02: CompileTimeError
+Language/Expressions/Property_Extraction/General_Closurization/method_lookup_t03: CompileTimeError
+Language/Expressions/Property_Extraction/General_Closurization/method_lookup_t04: CompileTimeError
+Language/Expressions/Property_Extraction/General_Closurization/method_lookup_t05: CompileTimeError
+Language/Expressions/Property_Extraction/General_Closurization/method_lookup_t06: CompileTimeError
+Language/Expressions/Property_Extraction/General_Closurization/method_lookup_t07: CompileTimeError
+Language/Expressions/Property_Extraction/General_Closurization/no_accessible_member_t01: CompileTimeError
+Language/Expressions/Property_Extraction/General_Closurization/no_accessible_member_t02: CompileTimeError
+Language/Expressions/Property_Extraction/General_Closurization/no_accessible_member_t03: CompileTimeError
+Language/Expressions/Property_Extraction/General_Closurization/no_accessible_member_t04: CompileTimeError
+Language/Expressions/Property_Extraction/General_Closurization/no_accessible_member_t05: CompileTimeError
+Language/Expressions/Property_Extraction/General_Closurization/no_accessible_member_t06: CompileTimeError
+Language/Expressions/Property_Extraction/General_Closurization/no_accessible_member_t07: CompileTimeError
+Language/Expressions/Property_Extraction/General_Closurization/no_accessible_member_t08: CompileTimeError
+Language/Expressions/Property_Extraction/General_Closurization/setter_lookup_t01: CompileTimeError
+Language/Expressions/Property_Extraction/General_Closurization/setter_lookup_t02: CompileTimeError
+Language/Expressions/Property_Extraction/General_Closurization/setter_lookup_t03: CompileTimeError
+Language/Expressions/Property_Extraction/General_Closurization/setter_lookup_t04: CompileTimeError
+Language/Expressions/Property_Extraction/General_Closurization/setter_lookup_t05: CompileTimeError
+Language/Expressions/Property_Extraction/General_Closurization/setter_lookup_t06: CompileTimeError
+Language/Expressions/Property_Extraction/General_Closurization/setter_lookup_t07: CompileTimeError
+Language/Expressions/Property_Extraction/General_Closurization/setter_lookup_t08: CompileTimeError
+Language/Expressions/Property_Extraction/General_Closurization/setter_lookup_t09: CompileTimeError
+Language/Expressions/Property_Extraction/General_Closurization/static_type_t01: CompileTimeError
+Language/Expressions/Property_Extraction/General_Closurization/static_type_t02: CompileTimeError
+Language/Expressions/Property_Extraction/General_Closurization/static_type_t03: CompileTimeError
+Language/Expressions/Property_Extraction/General_Closurization/static_type_t04: CompileTimeError
+Language/Expressions/Property_Extraction/General_Closurization/static_type_t05: CompileTimeError
+Language/Expressions/Property_Extraction/General_Closurization/static_type_t06: CompileTimeError
+Language/Expressions/Property_Extraction/General_Closurization/static_type_t07: CompileTimeError
+Language/Expressions/Property_Extraction/Getter_Access_and_Method_Extraction/expression_evaluation_t07: CompileTimeError
+Language/Expressions/Property_Extraction/Named_Constructor_Closurization/identical_t01: CompileTimeError
+Language/Expressions/Property_Extraction/Named_Constructor_Closurization/identical_t02: CompileTimeError
+Language/Expressions/Property_Extraction/Named_Constructor_Closurization/named_parameters_t01: CompileTimeError
+Language/Expressions/Property_Extraction/Named_Constructor_Closurization/positional_parameters_t01: CompileTimeError
+Language/Expressions/Property_Extraction/Named_Constructor_Extraction/closurization_t01: CompileTimeError
+Language/Expressions/Property_Extraction/Named_Constructor_Extraction/closurization_t02: CompileTimeError
+Language/Expressions/Property_Extraction/Named_Constructor_Extraction/deferred_type_t01: CompileTimeError
+Language/Expressions/Property_Extraction/Named_Constructor_Extraction/malbounded_type_t01: CompileTimeError
+Language/Expressions/Property_Extraction/Named_Constructor_Extraction/malbounded_type_t02: CompileTimeError
+Language/Expressions/Property_Extraction/Named_Constructor_Extraction/malformed_type_t01: CompileTimeError
+Language/Expressions/Property_Extraction/Named_Constructor_Extraction/malformed_type_t02: CompileTimeError
+Language/Expressions/Property_Extraction/Named_Constructor_Extraction/no_such_method_t01: CompileTimeError
+Language/Expressions/Property_Extraction/Named_Constructor_Extraction/no_such_method_t02: CompileTimeError
+Language/Expressions/Property_Extraction/Named_Constructor_Extraction/not_class_t01: CompileTimeError
+Language/Expressions/Property_Extraction/Named_Constructor_Extraction/not_class_t02: CompileTimeError
+Language/Expressions/Property_Extraction/Named_Constructor_Extraction/not_class_t03: CompileTimeError
+Language/Expressions/Property_Extraction/Named_Constructor_Extraction/static_type_t01: CompileTimeError
+Language/Expressions/Property_Extraction/Named_Constructor_Extraction/static_type_t02: CompileTimeError
+Language/Expressions/Property_Extraction/Named_Constructor_Extraction/static_type_t03: CompileTimeError
+Language/Expressions/Property_Extraction/Named_Constructor_Extraction/static_type_t04: CompileTimeError
+Language/Expressions/Property_Extraction/Ordinary_Member_Closurization/getter_closurization_t01: CompileTimeError
+Language/Expressions/Property_Extraction/Ordinary_Member_Closurization/getter_closurization_t02: CompileTimeError
+Language/Expressions/Property_Extraction/Ordinary_Member_Closurization/getter_closurization_t03: CompileTimeError
+Language/Expressions/Property_Extraction/Ordinary_Member_Closurization/getter_closurization_t04: CompileTimeError
+Language/Expressions/Property_Extraction/Ordinary_Member_Closurization/getter_closurization_t05: CompileTimeError
+Language/Expressions/Property_Extraction/Ordinary_Member_Closurization/getter_closurization_t06: CompileTimeError
+Language/Expressions/Property_Extraction/Ordinary_Member_Closurization/getter_closurization_t07: CompileTimeError
+Language/Expressions/Property_Extraction/Ordinary_Member_Closurization/getter_closurization_t08: CompileTimeError
+Language/Expressions/Property_Extraction/Ordinary_Member_Closurization/method_closurization_named_params_t01: CompileTimeError
+Language/Expressions/Property_Extraction/Ordinary_Member_Closurization/method_closurization_named_params_t02: CompileTimeError
+Language/Expressions/Property_Extraction/Ordinary_Member_Closurization/method_closurization_positional_params_t01: CompileTimeError
+Language/Expressions/Property_Extraction/Ordinary_Member_Closurization/method_closurization_positional_params_t02: CompileTimeError
+Language/Expressions/Property_Extraction/Ordinary_Member_Closurization/method_identical_t01: CompileTimeError
+Language/Expressions/Property_Extraction/Ordinary_Member_Closurization/method_identical_t02: CompileTimeError
+Language/Expressions/Property_Extraction/Ordinary_Member_Closurization/method_identical_t03: CompileTimeError
+Language/Expressions/Property_Extraction/Ordinary_Member_Closurization/operator_closurization_list_access_t01: CompileTimeError
+Language/Expressions/Property_Extraction/Ordinary_Member_Closurization/operator_closurization_list_assignment_t01: CompileTimeError
+Language/Expressions/Property_Extraction/Ordinary_Member_Closurization/operator_closurization_t01: CompileTimeError
+Language/Expressions/Property_Extraction/Ordinary_Member_Closurization/operator_closurization_t02: CompileTimeError
+Language/Expressions/Property_Extraction/Ordinary_Member_Closurization/operator_closurization_t03: CompileTimeError
+Language/Expressions/Property_Extraction/Ordinary_Member_Closurization/operator_closurization_t04: CompileTimeError
+Language/Expressions/Property_Extraction/Ordinary_Member_Closurization/operator_closurization_t05: CompileTimeError
+Language/Expressions/Property_Extraction/Ordinary_Member_Closurization/operator_closurization_t06: CompileTimeError
+Language/Expressions/Property_Extraction/Ordinary_Member_Closurization/operator_closurization_t07: CompileTimeError
+Language/Expressions/Property_Extraction/Ordinary_Member_Closurization/operator_closurization_t08: CompileTimeError
+Language/Expressions/Property_Extraction/Ordinary_Member_Closurization/operator_closurization_t09: CompileTimeError
+Language/Expressions/Property_Extraction/Ordinary_Member_Closurization/operator_closurization_t10: CompileTimeError
+Language/Expressions/Property_Extraction/Ordinary_Member_Closurization/operator_closurization_t11: CompileTimeError
+Language/Expressions/Property_Extraction/Ordinary_Member_Closurization/operator_closurization_t12: CompileTimeError
+Language/Expressions/Property_Extraction/Ordinary_Member_Closurization/operator_closurization_t13: CompileTimeError
+Language/Expressions/Property_Extraction/Ordinary_Member_Closurization/operator_closurization_t14: CompileTimeError
+Language/Expressions/Property_Extraction/Ordinary_Member_Closurization/operator_closurization_t15: CompileTimeError
+Language/Expressions/Property_Extraction/Ordinary_Member_Closurization/operator_closurization_t16: CompileTimeError
+Language/Expressions/Property_Extraction/Ordinary_Member_Closurization/operator_closurization_t17: CompileTimeError
+Language/Expressions/Property_Extraction/Ordinary_Member_Closurization/operator_closurization_unary_bitwise_t01: CompileTimeError
+Language/Expressions/Property_Extraction/Ordinary_Member_Closurization/setter_closurization_t01: CompileTimeError
+Language/Expressions/Property_Extraction/Ordinary_Member_Closurization/setter_closurization_t02: CompileTimeError
+Language/Expressions/Property_Extraction/Ordinary_Member_Closurization/setter_closurization_t03: CompileTimeError
+Language/Expressions/Property_Extraction/Ordinary_Member_Closurization/setter_closurization_t04: CompileTimeError
+Language/Expressions/Property_Extraction/Ordinary_Member_Closurization/setter_closurization_t05: CompileTimeError
+Language/Expressions/Property_Extraction/Ordinary_Member_Closurization/setter_closurization_t06: CompileTimeError
+Language/Expressions/Property_Extraction/Ordinary_Member_Closurization/setter_closurization_t07: CompileTimeError
+Language/Expressions/Property_Extraction/Ordinary_Member_Closurization/setter_closurization_t08: CompileTimeError
+Language/Expressions/Property_Extraction/Super_Getter_Access_and_Method_Closurization/no_such_method_t01: RuntimeError
+Language/Expressions/Property_Extraction/Super_Getter_Access_and_Method_Closurization/no_such_method_t02: RuntimeError
+Language/Expressions/Type_Test/evaluation_t10: RuntimeError
+Language/Expressions/Unary_Expressions/syntax_t10: Crash
+Language/Functions/External_Functions/not_connected_to_a_body_t01: RuntimeError
+Language/Functions/Formal_Parameters/syntax_t04: MissingCompileTimeError
+Language/Functions/Formal_Parameters/syntax_t05: MissingCompileTimeError
+Language/Functions/Formal_Parameters/syntax_t12: MissingCompileTimeError
+Language/Interfaces/Superinterfaces/Inheritance_and_Overriding/same_name_method_and_getter_t01: CompileTimeError
+Language/Interfaces/Superinterfaces/Inheritance_and_Overriding/same_name_method_and_getter_t02: CompileTimeError
+Language/Libraries_and_Scripts/Exports/invalid_uri_t02: Pass
+Language/Libraries_and_Scripts/Exports/syntax_t01: MissingCompileTimeError
+Language/Libraries_and_Scripts/Exports/syntax_t04: MissingCompileTimeError
+Language/Libraries_and_Scripts/Exports/syntax_t05: MissingCompileTimeError
+Language/Libraries_and_Scripts/Exports/syntax_t06: MissingCompileTimeError
+Language/Libraries_and_Scripts/Imports/deferred_import_t01: RuntimeError
+Language/Libraries_and_Scripts/Imports/deferred_import_t02: RuntimeError
+Language/Libraries_and_Scripts/Imports/invalid_uri_deferred_t02: CompileTimeError
+Language/Libraries_and_Scripts/Imports/invalid_uri_t02: Pass
+Language/Libraries_and_Scripts/Imports/static_type_t01: RuntimeError
+Language/Libraries_and_Scripts/Parts/compilation_t02: Crash
+Language/Libraries_and_Scripts/Parts/syntax_t06: Pass
+Language/Libraries_and_Scripts/Scripts/top_level_main_t01: Crash
+Language/Libraries_and_Scripts/Scripts/top_level_main_t02: Crash
+Language/Libraries_and_Scripts/Scripts/top_level_main_t05: Crash
+Language/Libraries_and_Scripts/definition_syntax_t01: MissingCompileTimeError
+Language/Libraries_and_Scripts/definition_syntax_t03: MissingCompileTimeError
+Language/Libraries_and_Scripts/definition_syntax_t04: MissingCompileTimeError
+Language/Libraries_and_Scripts/definition_syntax_t06: MissingCompileTimeError
+Language/Libraries_and_Scripts/definition_syntax_t07: MissingCompileTimeError
+Language/Libraries_and_Scripts/definition_syntax_t08: MissingCompileTimeError
+Language/Libraries_and_Scripts/definition_syntax_t09: MissingCompileTimeError
+Language/Libraries_and_Scripts/definition_syntax_t10: MissingCompileTimeError
+Language/Libraries_and_Scripts/definition_syntax_t15: MissingCompileTimeError
+Language/Libraries_and_Scripts/definition_syntax_t17: MissingCompileTimeError
+Language/Libraries_and_Scripts/definition_syntax_t18: MissingCompileTimeError
+Language/Libraries_and_Scripts/definition_syntax_t19: MissingCompileTimeError
+Language/Libraries_and_Scripts/definition_syntax_t20: MissingCompileTimeError
+Language/Libraries_and_Scripts/definition_syntax_t21: MissingCompileTimeError
+Language/Libraries_and_Scripts/definition_syntax_t22: MissingCompileTimeError
+Language/Libraries_and_Scripts/definition_syntax_t23: MissingCompileTimeError
+Language/Libraries_and_Scripts/definition_syntax_t24: MissingCompileTimeError
+Language/Libraries_and_Scripts/definition_syntax_t25: MissingCompileTimeError
+Language/Libraries_and_Scripts/definition_syntax_t26: MissingCompileTimeError
+Language/Libraries_and_Scripts/definition_syntax_t27: MissingCompileTimeError
+Language/Libraries_and_Scripts/definition_syntax_t29: MissingCompileTimeError
+Language/Libraries_and_Scripts/top_level_syntax_t02: MissingCompileTimeError
+Language/Libraries_and_Scripts/top_level_syntax_t03: MissingCompileTimeError
+Language/Libraries_and_Scripts/top_level_syntax_t04: MissingCompileTimeError
+Language/Libraries_and_Scripts/top_level_syntax_t05: MissingCompileTimeError
+Language/Libraries_and_Scripts/top_level_syntax_t06: MissingCompileTimeError
+Language/Libraries_and_Scripts/top_level_syntax_t07: MissingCompileTimeError
+Language/Libraries_and_Scripts/top_level_syntax_t08: MissingCompileTimeError
+Language/Libraries_and_Scripts/top_level_syntax_t09: MissingCompileTimeError
+Language/Libraries_and_Scripts/top_level_syntax_t10: MissingCompileTimeError
+Language/Libraries_and_Scripts/top_level_syntax_t11: MissingCompileTimeError
+Language/Libraries_and_Scripts/top_level_syntax_t12: MissingCompileTimeError
+Language/Libraries_and_Scripts/top_level_syntax_t13: MissingCompileTimeError
+Language/Libraries_and_Scripts/top_level_syntax_t14: MissingCompileTimeError
+Language/Libraries_and_Scripts/top_level_syntax_t15: MissingCompileTimeError
+Language/Libraries_and_Scripts/top_level_syntax_t16: MissingCompileTimeError
+Language/Libraries_and_Scripts/top_level_syntax_t17: MissingCompileTimeError
+Language/Libraries_and_Scripts/top_level_syntax_t18: MissingCompileTimeError
+Language/Libraries_and_Scripts/top_level_syntax_t19: MissingCompileTimeError
+Language/Statements/Break/label_t03: MissingCompileTimeError
+Language/Statements/Break/label_t04: MissingCompileTimeError
+Language/Statements/Continue/label_t07: MissingCompileTimeError
+Language/Statements/Labels/syntax_t03: Pass
+Language/Statements/Rethrow/execution_t04: RuntimeError
+Language/Statements/Switch/syntax_t02: Pass
+Language/Statements/Try/catch_scope_t01: RuntimeError
+Language/Types/Interface_Types/subtype_t44: RuntimeError
+Language/Types/Static_Types/deferred_type_t01: RuntimeError
+Language/Variables/final_or_static_initialization_t01: MissingCompileTimeError
+Language/Variables/final_or_static_initialization_t02: MissingCompileTimeError
+Language/Variables/final_or_static_initialization_t03: MissingCompileTimeError
+Language/Variables/final_t04: MissingCompileTimeError
+Language/Variables/final_t05: MissingCompileTimeError
+Language/Variables/final_t06: MissingCompileTimeError
+Language/Variables/final_t07: MissingCompileTimeError
+LibTest/core/Invocation/isAccessor_A01_t01: RuntimeError
+LibTest/core/Invocation/isAccessor_A01_t02: Crash
+LibTest/core/Invocation/isGetter_A01_t01: RuntimeError
+LibTest/core/Invocation/isGetter_A01_t02: Crash
+LibTest/core/Invocation/isMethod_A01_t01: Crash
+LibTest/core/Invocation/isMethod_A01_t02: RuntimeError
+LibTest/core/Invocation/isSetter_A01_t01: RuntimeError
+LibTest/core/Invocation/isSetter_A01_t02: Crash
+LibTest/core/Invocation/memberName_A01_t01: RuntimeError
+LibTest/core/Invocation/namedArguments_A01_t01: Crash
+LibTest/core/Invocation/positionalArguments_A01_t01: Crash
diff --git a/tests/compiler/dart2js/class_set_test.dart b/tests/compiler/dart2js/class_set_test.dart
index 64442b1..9eea4f1 100644
--- a/tests/compiler/dart2js/class_set_test.dart
+++ b/tests/compiler/dart2js/class_set_test.dart
@@ -529,7 +529,7 @@
   checkForEach(X, [X, A, B, D, C, G, F, I, H, E],
       skipSubclasses: [D], forEachSubtype: true);
   checkForEach(X, [A, D, C, G, F, I, H, E],
-      forEachSubtype: true, mask: ClassHierarchyNode.DIRECTLY_INSTANTIATED);
+      forEachSubtype: true, mask: ClassHierarchyNode.EXPLICITLY_INSTANTIATED);
   checkForEach(X, [A, B, D, C, G, F, I, H, E],
       forEachSubtype: true, mask: ClassHierarchyNode.INSTANTIATED);
 
diff --git a/tests/compiler/dart2js/dart2js.status b/tests/compiler/dart2js/dart2js.status
index 9b3a477..7900590 100644
--- a/tests/compiler/dart2js/dart2js.status
+++ b/tests/compiler/dart2js/dart2js.status
@@ -8,6 +8,8 @@
 
 kernel/*: Slow, Pass
 
+kernel/visitor_test: Fail # Issue 27684
+
 boolified_operator_test: Fail # Issue 8001
 
 # Don't mark these tests as failing. Instead, fix the errors/warnings that they
diff --git a/tests/compiler/dart2js/jsinterop/world_test.dart b/tests/compiler/dart2js/jsinterop/world_test.dart
index e994791..074860f 100644
--- a/tests/compiler/dart2js/jsinterop/world_test.dart
+++ b/tests/compiler/dart2js/jsinterop/world_test.dart
@@ -21,6 +21,7 @@
 testClasses() async {
   test(String mainSource,
       {List<String> directlyInstantiated: const <String>[],
+      List<String> abstractlyInstantiated: const <String>[],
       List<String> indirectlyInstantiated: const <String>[]}) async {
     TypeEnvironment env = await TypeEnvironment.create(
         r"""
@@ -120,6 +121,13 @@
             "Expected $name to be directly instantiated in `${mainSource}`:"
             "\n${world.dump(cls)}");
       }
+      if (abstractlyInstantiated.contains(name)) {
+        isInstantiated = true;
+        Expect.isTrue(
+            world.isAbstractlyInstantiated(cls),
+            "Expected $name to be abstractly instantiated in `${mainSource}`:"
+            "\n${world.dump(cls)}");
+      }
       if (indirectlyInstantiated.contains(name)) {
         isInstantiated = true;
         Expect.isTrue(
@@ -139,19 +147,19 @@
   await test('main() {}');
 
   await test('main() => newA();',
-      directlyInstantiated: ['A', 'B', 'C', 'D'],
+      abstractlyInstantiated: ['A', 'B', 'C', 'D'],
       indirectlyInstantiated: ['Object', 'Interceptor', 'JavaScriptObject']);
 
   await test('main() => newB();',
-      directlyInstantiated: ['A', 'B', 'C', 'D'],
+      abstractlyInstantiated: ['A', 'B', 'C', 'D'],
       indirectlyInstantiated: ['Object', 'Interceptor', 'JavaScriptObject']);
 
   await test('main() => newC();',
-      directlyInstantiated: ['A', 'B', 'C', 'D'],
+      abstractlyInstantiated: ['A', 'B', 'C', 'D'],
       indirectlyInstantiated: ['Object', 'Interceptor', 'JavaScriptObject']);
 
   await test('main() => newD();',
-      directlyInstantiated: ['A', 'B', 'C', 'D'],
+      abstractlyInstantiated: ['A', 'B', 'C', 'D'],
       indirectlyInstantiated: ['Object', 'Interceptor', 'JavaScriptObject']);
 
   await test('main() => newE();', directlyInstantiated: ['E']);
@@ -159,6 +167,7 @@
   await test('main() => newF();', directlyInstantiated: ['F']);
 
   await test('main() => [newD(), newE()];',
-      directlyInstantiated: ['A', 'B', 'C', 'D', 'E'],
+      directlyInstantiated: ['E'],
+      abstractlyInstantiated: ['A', 'B', 'C', 'D'],
       indirectlyInstantiated: ['Object', 'Interceptor', 'JavaScriptObject']);
 }
diff --git a/tests/compiler/dart2js/world_test.dart b/tests/compiler/dart2js/world_test.dart
index c68e05a..4e29307 100644
--- a/tests/compiler/dart2js/world_test.dart
+++ b/tests/compiler/dart2js/world_test.dart
@@ -7,8 +7,9 @@
 import 'package:expect/expect.dart';
 import 'package:async_helper/async_helper.dart';
 import 'type_test_helper.dart';
-import 'package:compiler/src/common.dart';
-import 'package:compiler/src/elements/elements.dart' show Element, ClassElement;
+import 'package:compiler/src/common/names.dart';
+import 'package:compiler/src/elements/elements.dart'
+    show Element, ClassElement, LibraryElement;
 import 'package:compiler/src/universe/class_set.dart';
 import 'package:compiler/src/world.dart' show ClosedWorld;
 
@@ -16,6 +17,7 @@
   asyncTest(() async {
     await testClassSets();
     await testProperties();
+    await testNativeClasses();
   });
 }
 
@@ -33,6 +35,7 @@
       class X {}
       """,
       mainSource: r"""
+      import 'dart:html' as html;
       main() {
         new A();
         new B();
@@ -41,6 +44,8 @@
         new E();
         new F();
         new G();
+        html.window;
+        new html.Worker('');
       }
       """,
       useMockCompiler: false);
@@ -298,3 +303,210 @@
   check("H3", hasStrictSubtype: false, hasOnlySubclasses: true);
   check("H4", hasStrictSubtype: false, hasOnlySubclasses: true);
 }
+
+testNativeClasses() async {
+  var env = await TypeEnvironment.create('',
+      mainSource: r"""
+      import 'dart:html' as html;
+      main() {
+        html.window; // Creates 'Window'.
+        new html.Worker(''); // Creates 'Worker'.
+        new html.CanvasElement() // Creates CanvasElement
+            ..getContext(''); // Creates CanvasRenderingContext2D
+      }
+      """,
+      useMockCompiler: false);
+  ClosedWorld closedWorld = env.compiler.closedWorld;
+  LibraryElement dart_html =
+      env.compiler.libraryLoader.lookupLibrary(Uris.dart_html);
+
+  ClassElement clsEventTarget = dart_html.findExported('EventTarget');
+  ClassElement clsWindow = dart_html.findExported('Window');
+  ClassElement clsAbstractWorker = dart_html.findExported('AbstractWorker');
+  ClassElement clsWorker = dart_html.findExported('Worker');
+  ClassElement clsCanvasElement = dart_html.findExported('CanvasElement');
+  ClassElement clsCanvasRenderingContext =
+      dart_html.findExported('CanvasRenderingContext');
+  ClassElement clsCanvasRenderingContext2D =
+      dart_html.findExported('CanvasRenderingContext2D');
+
+  List<ClassElement> allClasses = [
+    clsEventTarget,
+    clsWindow,
+    clsAbstractWorker,
+    clsWorker,
+    clsCanvasElement,
+    clsCanvasRenderingContext,
+    clsCanvasRenderingContext2D
+  ];
+
+  check(ClassElement cls,
+      {bool isDirectlyInstantiated,
+      bool isAbstractlyInstantiated,
+      bool isIndirectlyInstantiated,
+      bool hasStrictSubtype,
+      bool hasOnlySubclasses,
+      ClassElement lubOfInstantiatedSubclasses,
+      ClassElement lubOfInstantiatedSubtypes,
+      int instantiatedSubclassCount,
+      int instantiatedSubtypeCount,
+      List<ClassElement> subclasses: const <ClassElement>[],
+      List<ClassElement> subtypes: const <ClassElement>[]}) {
+    ClassSet classSet = closedWorld.getClassSet(cls);
+    ClassHierarchyNode node = classSet.node;
+
+    String dumpText = '\n${closedWorld.dump(cls)}';
+
+    Expect.equals(
+        isDirectlyInstantiated,
+        closedWorld.isDirectlyInstantiated(cls),
+        "Unexpected isDirectlyInstantiated property on $cls.$dumpText");
+    Expect.equals(
+        isAbstractlyInstantiated,
+        closedWorld.isAbstractlyInstantiated(cls),
+        "Unexpected isAbstractlyInstantiated property on $cls.$dumpText");
+    Expect.equals(
+        isIndirectlyInstantiated,
+        closedWorld.isIndirectlyInstantiated(cls),
+        "Unexpected isIndirectlyInstantiated property on $cls.$dumpText");
+    Expect.equals(hasStrictSubtype, closedWorld.hasAnyStrictSubtype(cls),
+        "Unexpected hasAnyStrictSubtype property on $cls.$dumpText");
+    Expect.equals(hasOnlySubclasses, closedWorld.hasOnlySubclasses(cls),
+        "Unexpected hasOnlySubclasses property on $cls.$dumpText");
+    Expect.equals(
+        lubOfInstantiatedSubclasses,
+        node.getLubOfInstantiatedSubclasses(),
+        "Unexpected getLubOfInstantiatedSubclasses() result on $cls.$dumpText");
+    Expect.equals(
+        lubOfInstantiatedSubtypes,
+        classSet.getLubOfInstantiatedSubtypes(),
+        "Unexpected getLubOfInstantiatedSubtypes() result on $cls.$dumpText");
+    if (instantiatedSubclassCount != null) {
+      Expect.equals(instantiatedSubclassCount, node.instantiatedSubclassCount,
+          "Unexpected instantiatedSubclassCount property on $cls.$dumpText");
+    }
+    if (instantiatedSubtypeCount != null) {
+      Expect.equals(instantiatedSubtypeCount, classSet.instantiatedSubtypeCount,
+          "Unexpected instantiatedSubtypeCount property on $cls.$dumpText");
+    }
+    for (ClassElement other in allClasses) {
+      if (other == cls) continue;
+      if (!closedWorld.isExplicitlyInstantiated(other)) continue;
+      Expect.equals(
+          subclasses.contains(other),
+          closedWorld.isSubclassOf(other, cls),
+          "Unexpected subclass relation between $other and $cls.");
+      Expect.equals(
+          subtypes.contains(other),
+          closedWorld.isSubtypeOf(other, cls),
+          "Unexpected subtype relation between $other and $cls.");
+    }
+
+    Set<ClassElement> strictSubclasses = new Set<ClassElement>();
+    closedWorld.forEachStrictSubclassOf(cls, (ClassElement other) {
+      if (allClasses.contains(other)) {
+        strictSubclasses.add(other);
+      }
+    });
+    Expect.setEquals(subclasses, strictSubclasses,
+        "Unexpected strict subclasses of $cls: ${strictSubclasses}.");
+
+    Set<ClassElement> strictSubtypes = new Set<ClassElement>();
+    closedWorld.forEachStrictSubtypeOf(cls, (ClassElement other) {
+      if (allClasses.contains(other)) {
+        strictSubtypes.add(other);
+      }
+    });
+    Expect.setEquals(subtypes, strictSubtypes,
+        "Unexpected strict subtypes of $cls: $strictSubtypes.");
+  }
+
+  // Extended by Window.
+  check(clsEventTarget,
+      isDirectlyInstantiated: false,
+      isAbstractlyInstantiated: false,
+      isIndirectlyInstantiated: true,
+      hasStrictSubtype: true,
+      hasOnlySubclasses: true,
+      lubOfInstantiatedSubclasses: clsEventTarget,
+      lubOfInstantiatedSubtypes: clsEventTarget,
+      // May vary with implementation, do no test.
+      instantiatedSubclassCount: null,
+      instantiatedSubtypeCount: null,
+      subclasses: [clsWindow, clsCanvasElement, clsWorker],
+      subtypes: [clsWindow, clsCanvasElement, clsWorker]);
+
+  // Created by 'html.window'.
+  check(clsWindow,
+      isDirectlyInstantiated: false,
+      isAbstractlyInstantiated: true,
+      isIndirectlyInstantiated: false,
+      hasStrictSubtype: false,
+      hasOnlySubclasses: true,
+      lubOfInstantiatedSubclasses: clsWindow,
+      lubOfInstantiatedSubtypes: clsWindow,
+      instantiatedSubclassCount: 0,
+      instantiatedSubtypeCount: 0);
+
+  // Implemented by 'Worker'.
+  check(clsAbstractWorker,
+      isDirectlyInstantiated: false,
+      isAbstractlyInstantiated: false,
+      isIndirectlyInstantiated: false,
+      hasStrictSubtype: true,
+      hasOnlySubclasses: false,
+      lubOfInstantiatedSubclasses: null,
+      lubOfInstantiatedSubtypes: clsWorker,
+      instantiatedSubclassCount: 0,
+      instantiatedSubtypeCount: 1,
+      subtypes: [clsWorker]);
+
+  // Created by 'new html.Worker'.
+  check(clsWorker,
+      isDirectlyInstantiated: false,
+      isAbstractlyInstantiated: true,
+      isIndirectlyInstantiated: false,
+      hasStrictSubtype: false,
+      hasOnlySubclasses: true,
+      lubOfInstantiatedSubclasses: clsWorker,
+      lubOfInstantiatedSubtypes: clsWorker,
+      instantiatedSubclassCount: 0,
+      instantiatedSubtypeCount: 0);
+
+  // Created by 'new html.CanvasElement'.
+  check(clsCanvasElement,
+      isDirectlyInstantiated: false,
+      isAbstractlyInstantiated: true,
+      isIndirectlyInstantiated: false,
+      hasStrictSubtype: false,
+      hasOnlySubclasses: true,
+      lubOfInstantiatedSubclasses: clsCanvasElement,
+      lubOfInstantiatedSubtypes: clsCanvasElement,
+      instantiatedSubclassCount: 0,
+      instantiatedSubtypeCount: 0);
+
+  // Implemented by CanvasRenderingContext2D and RenderingContext.
+  check(clsCanvasRenderingContext,
+      isDirectlyInstantiated: false,
+      isAbstractlyInstantiated: false,
+      isIndirectlyInstantiated: false,
+      hasStrictSubtype: true,
+      hasOnlySubclasses: false,
+      lubOfInstantiatedSubclasses: null,
+      lubOfInstantiatedSubtypes: clsCanvasRenderingContext,
+      instantiatedSubclassCount: 0,
+      instantiatedSubtypeCount: 2,
+      subtypes: [clsCanvasRenderingContext2D]);
+
+  // Created by 'html.CanvasElement.getContext'.
+  check(clsCanvasRenderingContext2D,
+      isDirectlyInstantiated: false,
+      isAbstractlyInstantiated: true,
+      isIndirectlyInstantiated: false,
+      hasStrictSubtype: false,
+      hasOnlySubclasses: true,
+      lubOfInstantiatedSubclasses: clsCanvasRenderingContext2D,
+      lubOfInstantiatedSubtypes: clsCanvasRenderingContext2D,
+      instantiatedSubclassCount: 0,
+      instantiatedSubtypeCount: 0);
+}
diff --git a/tests/kernel/kernel.status b/tests/kernel/kernel.status
new file mode 100644
index 0000000..c05aa3d
--- /dev/null
+++ b/tests/kernel/kernel.status
@@ -0,0 +1,19 @@
+# Copyright (c) 2016, the Dart project authors.  Please see the AUTHORS file
+# for details. All rights reserved. Use of this source code is governed by a
+# BSD-style license that can be found in the LICENSE file.
+
+unsorted/invocation_errors_test: RuntimeError
+
+[ $compiler == dartk && $runtime == vm ]
+
+[ $compiler == dartkp && $runtime == dart_precompiled ]
+
+[ $compiler == dart2analyzer && $runtime == none ]
+unsorted/invocation_errors_test: StaticWarning
+unsorted/super_mixin_test: CompileTimeError
+
+[ $compiler == dart2js ]
+unsorted/invocation_errors_test: Pass
+unsorted/super_initializer_test: Skip
+unsorted/super_mixin_test: CompileTimeError
+unsorted/loop_test: Skip
diff --git a/tests/kernel/unsorted/as_is_test.dart b/tests/kernel/unsorted/as_is_test.dart
new file mode 100644
index 0000000..846fdf1
--- /dev/null
+++ b/tests/kernel/unsorted/as_is_test.dart
@@ -0,0 +1,28 @@
+// Copyright (c) 2016, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// Tests of class literals, is, and as expressions.
+
+import 'package:expect/expect.dart';
+
+class C {}
+
+class D extends C {}
+
+test0() => C;
+test1() => D;
+
+main() {
+  var c = new C();
+  var d = new D();
+  Expect.isTrue(test0() == C);
+  Expect.isTrue(test1() == D);
+  Expect.isTrue(c is C);
+  Expect.isTrue(c is! D);
+  Expect.isTrue(d is C);
+  Expect.isTrue(d is D);
+  Expect.isTrue(c as C == c);
+  Expect.isTrue(d as C == d);
+  Expect.isTrue(d as D == d);
+}
diff --git a/tests/kernel/unsorted/block_scope_test.dart b/tests/kernel/unsorted/block_scope_test.dart
new file mode 100644
index 0000000..36e3d66
--- /dev/null
+++ b/tests/kernel/unsorted/block_scope_test.dart
@@ -0,0 +1,60 @@
+// Copyright (c) 2016, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// Tests of block scoping.
+
+import 'package:expect/expect.dart';
+
+bool oracle() => true;
+
+test0() {
+  var x = 'outer', y = x;
+  Expect.isTrue(x == 'outer');
+  Expect.isTrue(y == 'outer');
+  { var x = 'inner';
+    Expect.isTrue(x == 'inner');
+    Expect.isTrue(y == 'outer');
+  }
+  Expect.isTrue(x == 'outer');
+  Expect.isTrue(y == 'outer');
+
+  if (oracle()) {
+    var y = 'inner';
+    Expect.isTrue(x == 'outer');
+    Expect.isTrue(y == 'inner');
+  } else {
+    Expect.isTrue(false);
+  }
+  Expect.isTrue(x == 'outer');
+  Expect.isTrue(y == 'outer');
+}
+
+var x = 'toplevel';
+
+test1() {
+  var y = 'outer';
+  Expect.isTrue(x == 'toplevel');
+  Expect.isTrue(y == 'outer');
+  { var x = 'inner';
+    Expect.isTrue(x == 'inner');
+    Expect.isTrue(y == 'outer');
+  }
+  Expect.isTrue(x == 'toplevel');
+  Expect.isTrue(y == 'outer');
+
+  if (oracle()) {
+    var y = 'inner';
+    Expect.isTrue(x == 'toplevel');
+    Expect.isTrue(y == 'inner');
+  } else {
+    Expect.isTrue(false);
+  }
+  Expect.isTrue(x == 'toplevel');
+  Expect.isTrue(y == 'outer');
+}
+
+main() {
+  test0();
+  test1();
+}
diff --git a/tests/kernel/unsorted/breakable_statement_test.dart b/tests/kernel/unsorted/breakable_statement_test.dart
new file mode 100644
index 0000000..22263cc
--- /dev/null
+++ b/tests/kernel/unsorted/breakable_statement_test.dart
@@ -0,0 +1,81 @@
+// Copyright (c) 2016, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'package:expect/expect.dart';
+
+testFor() {
+  int current;
+  for (int i = 0; i < 100; i++) {
+    current = i;
+    if (i > 41) break;
+  }
+  Expect.isTrue(current == 42);
+}
+
+testWhile() {
+  int i = 0;
+  while (i < 100) {
+    if (++i > 41) break;
+  }
+  Expect.isTrue(i == 42);
+}
+
+testDoWhile() {
+  int i = 0;
+  do {
+    if (++i > 41) break;
+  } while (i < 100);
+  Expect.isTrue(i == 42);
+}
+
+testLabledBreakOutermost() {
+  int i = 0;
+  outer: {
+    middle: {
+      while (i < 100) {
+        if (++i > 41) break outer;
+      }
+      i++;
+    }
+    i++;
+  }
+  Expect.isTrue(i == 42);
+}
+
+testLabledBreakMiddle() {
+  int i = 0;
+  outer: {
+    middle: {
+      while (i < 100) {
+        if (++i > 41) break middle;
+      }
+      i++;
+    }
+    i++;
+  }
+  Expect.isTrue(i == 43);
+}
+
+testLabledBreakInner() {
+  int i = 0;
+  outer: {
+    middle: {
+      while (i < 100) {
+        if (++i > 41) break;
+      }
+      i++;
+    }
+    i++;
+  }
+  Expect.isTrue(i == 44);
+}
+
+main() {
+  testFor();
+  testWhile();
+  testDoWhile();
+  testLabledBreakOutermost();
+  testLabledBreakMiddle();
+  testLabledBreakInner();
+}
diff --git a/tests/kernel/unsorted/closures_regression_test.dart b/tests/kernel/unsorted/closures_regression_test.dart
new file mode 100644
index 0000000..51c18d3
--- /dev/null
+++ b/tests/kernel/unsorted/closures_regression_test.dart
@@ -0,0 +1,22 @@
+// Copyright (c) 2016, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'package:expect/expect.dart';
+
+f(fun) => fun();
+class A {
+  identity(arg) {
+    return f(() {
+      print(this);
+      return f(() {
+        return this;
+      });
+    });
+  }
+}
+
+main() {
+  var a = new A();
+  Expect.isTrue(identical(a.identity(42), a));
+}
diff --git a/tests/kernel/unsorted/closures_test.dart b/tests/kernel/unsorted/closures_test.dart
new file mode 100644
index 0000000..df3430f
--- /dev/null
+++ b/tests/kernel/unsorted/closures_test.dart
@@ -0,0 +1,65 @@
+// Copyright (c) 2016, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'package:expect/expect.dart';
+
+class Base {
+  int constant1000() => 1000;
+}
+
+class Foo extends Base {
+  final int base;
+  Foo(this.base);
+
+  nestedAdderFunction(a, b, c, d, e) {
+    var result = a + b;
+    return () {
+      var result2 = c + d;
+      return () {
+        return base + result + result2 + e;
+      };
+    };
+  }
+
+  nestedAdderFunction2(a, b, c, d, e) {
+    var result = a + b;
+    return () {
+      var base = super.constant1000;
+      var result2 = c + d;
+      return () {
+        return base() + result + result2 + e;
+      };
+    };
+  }
+}
+
+nestedAdderFunction(a, b, c, d, e) {
+  var result = a + b;
+  return () {
+    var result2 = c + d;
+    return () {
+      return result + result2 + e;
+    };
+  };
+}
+
+main() {
+  Expect.isTrue(nestedAdderFunction(1, 2, 3, 4, 5)()() == 15);
+
+  var foo = new Foo(100);
+  Expect.isTrue(foo.nestedAdderFunction(1, 2, 3, 4, 5)()() == 115);
+  Expect.isTrue(foo.nestedAdderFunction2(1, 2, 3, 4, 5)()() == 1015);
+
+  var funs = [];
+  for (int i = 0; i < 3; i++) {
+    funs.add(() => i);
+  }
+  Expect.isTrue((funs[0]() + funs[1]() + funs[2]()) == 3);
+
+  var funs2 = [];
+  for (var i in [0, 1, 2]) {
+    funs2.add(() => i);
+  }
+  Expect.isTrue((funs2[0]() + funs2[1]() + funs2[2]()) == 3);
+}
diff --git a/tests/kernel/unsorted/conditional_test.dart b/tests/kernel/unsorted/conditional_test.dart
new file mode 100644
index 0000000..3bf30a3
--- /dev/null
+++ b/tests/kernel/unsorted/conditional_test.dart
@@ -0,0 +1,142 @@
+// Copyright (c) 2016, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// Tests of conditional expressions and statements and negation.
+
+import 'package:expect/expect.dart';
+
+mkTrue() => true;
+mkFalse() => false;
+
+check(b) {
+  Expect.isTrue(b);
+  return b;
+}
+
+main() {
+  // Check that ?: gets the right answer.
+  Expect.isTrue((mkTrue() ? 0 : 1) == 0);
+  Expect.isTrue((mkFalse() ? 0 : 1) == 1);
+  // Check that it doesn't evaluate all subexpressions.
+  mkTrue() ? Expect.isTrue(true) : Expect.isTrue(false);
+  mkFalse() ? Expect.isTrue(false) : Expect.isTrue(true);
+
+  // Check that && and || get the right answers.
+  Expect.isTrue(mkTrue() && mkTrue());
+  Expect.isTrue(!(mkTrue() && mkFalse()));
+  Expect.isTrue(!(mkFalse() && mkTrue()));
+  Expect.isTrue(!(mkFalse() && mkFalse()));
+  Expect.isTrue(mkTrue() || mkTrue());
+  Expect.isTrue(mkTrue() || mkFalse());
+  Expect.isTrue(mkFalse() || mkTrue());
+  Expect.isTrue(!(mkFalse() || mkFalse()));
+
+  // Check that they don't evaluate both subexpressions.
+  mkTrue() && check(true);
+  mkFalse() && check(false);
+  mkTrue() || check(true);
+  mkFalse() || check(true);
+
+  // Check that if works.
+  if (mkTrue()) {
+    Expect.isTrue(true);
+  } else {
+    Expect.isTrue(false);
+  }
+  if (mkFalse()) {
+    Expect.isTrue(false);
+  } else {
+    Expect.isTrue(true);
+  }
+  if (!mkTrue()) {
+    Expect.isTrue(false);
+  } else {
+    Expect.isTrue(true);
+  }
+  if (!mkFalse()) {
+    Expect.isTrue(true);
+  } else {
+    Expect.isTrue(false);
+  }
+
+  // Check that ?:, &&, and || work for control flow.
+  if (mkTrue() ? mkTrue() : mkFalse()) {
+    Expect.isTrue(true);
+  } else {
+    Expect.isTrue(false);
+  }
+  if (mkTrue() ? mkFalse() : mkTrue()) {
+    Expect.isTrue(false);
+  } else {
+    Expect.isTrue(true);
+  }
+  if (mkFalse() ? mkTrue() : mkFalse()) {
+    Expect.isTrue(false);
+  } else {
+    Expect.isTrue(true);
+  }
+  if (mkFalse() ? mkFalse() : mkTrue()) {
+    Expect.isTrue(true);
+  } else {
+    Expect.isTrue(false);
+  }
+  if (mkTrue() && mkTrue()) {
+    Expect.isTrue(true);
+  } else {
+    Expect.isTrue(false);
+  }
+  if (mkTrue() && mkFalse()) {
+    Expect.isTrue(false);
+  } else {
+    Expect.isTrue(true);
+  }
+  if (mkFalse() && mkTrue()) {
+    Expect.isTrue(false);
+  } else {
+    Expect.isTrue(true);
+  }
+  if (mkFalse() && mkFalse()) {
+    Expect.isTrue(false);
+  } else {
+    Expect.isTrue(true);
+  }
+  if (mkTrue() || mkTrue()) {
+    Expect.isTrue(true);
+  } else {
+    Expect.isTrue(false);
+  }
+  if (mkTrue() || mkFalse()) {
+    Expect.isTrue(true);
+  } else {
+    Expect.isTrue(false);
+  }
+  if (mkFalse() || mkTrue()) {
+    Expect.isTrue(true);
+  } else {
+    Expect.isTrue(false);
+  }
+  if (mkFalse() || mkFalse()) {
+    Expect.isTrue(false);
+  } else {
+    Expect.isTrue(true);
+  }
+
+  // Test empty else branches.
+  if (mkTrue()) {
+    Expect.isTrue(true);
+  }
+  if (mkFalse()) {
+    Expect.isTrue(false);
+  }
+
+  var x = 0;
+  if (mkTrue()) {
+    x = 1;
+  }
+  Expect.isTrue(x == 1);
+  if (mkFalse()) {
+    x = 2;
+  }
+  Expect.isTrue(x == 1);
+}
diff --git a/tests/kernel/unsorted/constant_evaluator_regression_test.dart b/tests/kernel/unsorted/constant_evaluator_regression_test.dart
new file mode 100644
index 0000000..e5c79c6
--- /dev/null
+++ b/tests/kernel/unsorted/constant_evaluator_regression_test.dart
@@ -0,0 +1,11 @@
+// Copyright (c) 2016, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'package:expect/expect.dart';
+
+const X = const bool.fromEnvironment('foobar');
+
+main() {
+  Expect.isTrue(X == false);
+}
diff --git a/tests/kernel/unsorted/constant_expressions_test.dart b/tests/kernel/unsorted/constant_expressions_test.dart
new file mode 100644
index 0000000..0d5a3ec
--- /dev/null
+++ b/tests/kernel/unsorted/constant_expressions_test.dart
@@ -0,0 +1,100 @@
+// Copyright (c) 2016, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'package:expect/expect.dart';
+
+const int42 = 40 + 2;
+const stringAB = 'a' + 'b';
+const stringAB2 = 'a' + 'b';
+const list123 = const [1, 2, 3];
+const mapABC = const {'a' : 'b', 'b': 'c'};
+
+const boxInt42 = const Box(int42);
+const boxStringAB = const Box(stringAB);
+
+class Box {
+  final value;
+  const Box(this.value);
+}
+
+returnPositional([a = const Box('posi' + 'tional')]) => a;
+
+returnNamed({a: const Box('nam' + 'ed')}) => a;
+
+returnSwitchCasedValue(value) {
+  switch (value) {
+    case const Box(42): return 42;
+    case const Box('abc'): return 'abc';
+    case const Box(const Box('abc')): return const Box('abc');
+    default: return 'default';
+  }
+}
+
+testConstantExpressions() {
+  Expect.isTrue(identical(const Box(40 + 2), const Box(40 + 2)));
+  Expect.isTrue(identical(const Box('a' + 'b'), const Box('ab')));
+  Expect.isTrue(identical(const Box(const Box(40 + 2)),
+                          const Box(const Box(42))));
+  Expect.isTrue(identical(const Box(const Box('a' + 'b')),
+                          const Box(const Box('ab'))));
+}
+
+testConstantFieldValues() {
+  Expect.isTrue(identical(42, int42));
+  Expect.isTrue(identical(stringAB, stringAB2));
+  Expect.isTrue(identical(const Box(42), boxInt42));
+  Expect.isTrue(identical(const Box('ab'), boxStringAB));
+}
+
+testConstantFunctionParameters() {
+  Expect.isTrue(identical(const Box('positional'), returnPositional()));
+  Expect.isTrue(identical(const Box('named'), returnNamed()));
+  Expect.isTrue(identical(const Box('abc'),
+                          returnPositional(const Box('abc'))));
+  Expect.isTrue(identical(const Box('def'),
+                          returnNamed(a: const Box('def'))));
+}
+
+testConstantSwitchExpressions() {
+  Expect.isTrue(returnSwitchCasedValue(const Box(42)) == 42);
+  Expect.isTrue(returnSwitchCasedValue(const Box('abc')) == 'abc');
+  Expect.isTrue(returnSwitchCasedValue(const Box(const Box('abc')))
+                == const Box('abc'));
+  Expect.isTrue(returnSwitchCasedValue(const Box('go-to-default'))
+                == 'default');
+}
+
+testConstantLocalVariables() {
+  const a = 'a';
+  const b = a + 'b';
+  const c = b + 'c';
+  const box = const Box(c);
+  Expect.isTrue(identical(const Box('abc'), box));
+}
+
+testComplextConstLiterals() {
+  Expect.isTrue(identical(const [1, 2, 3], const [1, 2, 3]));
+  Expect.isTrue(identical(const [1, 2, 3], list123));
+  Expect.isTrue(identical(const {'a': 'b', 'b': 'c'}, const {'a': 'b', 'b': 'c'}));
+  Expect.isTrue(identical(const {'a': 'b', 'b': 'c'}, mapABC));
+
+  Expect.isTrue(mapABC['a'] == 'b');
+  Expect.isTrue(mapABC['b'] == 'c');
+  Expect.isTrue(mapABC.length == 2);
+
+  Expect.isTrue(list123[0] == 1);
+  Expect.isTrue(list123[1] == 2);
+  Expect.isTrue(list123[2] == 3);
+  Expect.isTrue(list123.length == 3);
+}
+
+main() {
+  testConstantExpressions();
+  testConstantFieldValues();
+  testConstantFunctionParameters();
+  testConstantSwitchExpressions();
+  testComplextConstLiterals();
+  testConstantExpressions();
+  testConstantLocalVariables();
+}
diff --git a/tests/kernel/unsorted/factory_regression_test.dart b/tests/kernel/unsorted/factory_regression_test.dart
new file mode 100644
index 0000000..efccf81
--- /dev/null
+++ b/tests/kernel/unsorted/factory_regression_test.dart
@@ -0,0 +1,23 @@
+// Copyright (c) 2016, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'dart:typed_data';
+
+import 'package:expect/expect.dart';
+
+var list = [1, 2, 3];
+
+class Foo {
+  final value;
+  Foo(this.value) {}
+
+  factory Foo.fac(value) {
+    return new Foo(value);
+  }
+}
+
+main() {
+  Expect.isTrue(new Uint8List.fromList(list)[1] == 2);
+  Expect.isTrue(new Foo.fac(10).value == 10);
+}
diff --git a/tests/kernel/unsorted/field_dispatcher_test.dart b/tests/kernel/unsorted/field_dispatcher_test.dart
new file mode 100644
index 0000000..cddba91
--- /dev/null
+++ b/tests/kernel/unsorted/field_dispatcher_test.dart
@@ -0,0 +1,37 @@
+// Copyright (c) 2016, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'package:expect/expect.dart';
+
+class A {
+  Function fun;
+  A(this.fun);
+}
+
+globalFunctionPositional(int a, [int b = 42]) => a + b;
+
+globalFunctionNamed(int a, {int b: 42}) => a + b;
+
+class Foo {
+  int base;
+
+  Foo(this.base);
+
+  methodFunctionPositional(int a, [int b = 42]) => base + a + b;
+
+  methodFunctionNamed(int a, {int b: 42}) => base + a + b;
+}
+
+main() {
+  Expect.isTrue(new A(globalFunctionPositional).fun(1, 2) == 3);
+  Expect.isTrue(new A(globalFunctionPositional).fun(1) == 43);
+  Expect.isTrue(new A(globalFunctionNamed).fun(1, b: 2) == 3);
+  Expect.isTrue(new A(globalFunctionNamed).fun(1) == 43);
+
+  var foo = new Foo(100);
+  Expect.isTrue(new A(foo.methodFunctionPositional).fun(1, 2) == 103);
+  Expect.isTrue(new A(foo.methodFunctionPositional).fun(1) == 143);
+  Expect.isTrue(new A(foo.methodFunctionNamed).fun(1, b: 2) == 103);
+  Expect.isTrue(new A(foo.methodFunctionNamed).fun(1) == 143);
+}
diff --git a/tests/kernel/unsorted/finally_contexts_test.dart b/tests/kernel/unsorted/finally_contexts_test.dart
new file mode 100644
index 0000000..a392c65
--- /dev/null
+++ b/tests/kernel/unsorted/finally_contexts_test.dart
@@ -0,0 +1,47 @@
+// Copyright (c) 2016, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'package:expect/expect.dart';
+
+// Test that the context depth is correct in the presence of control flow,
+// specifically branching and joining in the presence of break.  The
+// implementation uses the context depth after the else block of an if/then/else
+// as the context depth at the join point.  This test has an extra context
+// allocated in the (untaken) else branch so it tests that compiling the
+// (untaken) break properly tracks the context depth.
+
+test(list) {
+  // The loops force creation of a new context, otherwise context allocated
+  // variables might be hoisted to an outer context.
+  do {
+    if (list.length > 1) {
+      do {
+        var sum = 0;
+        addem() {
+          for (var x in list) sum += x;
+        }
+        addem();
+        Expect.isTrue(sum == 15);
+        L: if (sum != 15) {
+          // Unreachable.
+          do {
+            var product = 1;
+            multiplyem() {
+              for (var x in list) product *= x;
+            }
+            multiplyem();
+            Expect.isTrue(false);
+            break L;
+          } while (false);
+        }
+      } while (false);
+    }
+  } while (false);
+  Expect.isTrue(list.length == 5);
+}
+
+
+main() {
+  test([1, 2, 3, 4, 5]);
+}
diff --git a/tests/kernel/unsorted/for_in_loop_test.dart b/tests/kernel/unsorted/for_in_loop_test.dart
new file mode 100644
index 0000000..635d72f
--- /dev/null
+++ b/tests/kernel/unsorted/for_in_loop_test.dart
@@ -0,0 +1,38 @@
+// Copyright (c) 2016, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// Tests of for-in loops and list literals.
+
+import 'package:expect/expect.dart';
+
+fact4() {
+  var f = 1;
+  for (var n in [1, 2, 3, 4]) {
+    f *= n;
+  }
+  return f;
+}
+
+fact5() {
+  var f = 1, n;
+  for (n in [1, 2, 3, 4, 5]) {
+    f *= n;
+  }
+  return f;
+}
+
+var global;
+fact6() {
+  var f = 1;
+  for (global in [1, 2, 3, 4, 5, 6]) {
+    f *= global;
+  }
+  return f;
+}
+
+main() {
+  Expect.isTrue(fact4() == 24);
+  Expect.isTrue(fact5() == 120);
+  Expect.isTrue(fact6() == 720);
+}
diff --git a/tests/kernel/unsorted/getters_and_setters_test.dart b/tests/kernel/unsorted/getters_and_setters_test.dart
new file mode 100644
index 0000000..816a0e0
--- /dev/null
+++ b/tests/kernel/unsorted/getters_and_setters_test.dart
@@ -0,0 +1,32 @@
+// Copyright (c) 2016, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'package:expect/expect.dart';
+
+var field;
+
+get getField {
+  print('B.getField');
+  return field;
+}
+
+set setField(value) {
+  print('B.setField');
+  field = value;
+  return null;
+}
+
+main() {
+  var result;
+
+  result = (field = 42);
+  Expect.isTrue(result == 42);
+  Expect.isTrue(field == 42);
+  Expect.isTrue(getField == 42);
+
+  result = (setField = 99);
+  Expect.isTrue(result == 99);
+  Expect.isTrue(field == 99);
+  Expect.isTrue(getField == 99);
+}
diff --git a/tests/kernel/unsorted/global_field_initializer_test.dart b/tests/kernel/unsorted/global_field_initializer_test.dart
new file mode 100644
index 0000000..a19fe34
--- /dev/null
+++ b/tests/kernel/unsorted/global_field_initializer_test.dart
@@ -0,0 +1,37 @@
+// Copyright (c) 2016, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'package:expect/expect.dart';
+
+var intField = 1;
+var doubleField = 3.1415;
+var stringField = "hello";
+var nullField = null;
+var nullField2;
+var composed = "hello" + " " + "world";
+
+class A {
+  static var intField = 1;
+  static var doubleField = 3.1415;
+  static var stringField = "hello";
+  static var nullField = null;
+  static var nullField2;
+  static var composed = "hello" + " " + "world";
+}
+
+main() {
+  Expect.isTrue(intField == 1);
+  Expect.isTrue(doubleField == 3.1415);
+  Expect.isTrue(stringField == "hello");
+  Expect.isTrue(nullField == null);
+  Expect.isTrue(nullField2 == null);
+  Expect.isTrue(composed == "hello world");
+
+  Expect.isTrue(A.intField == 1);
+  Expect.isTrue(A.doubleField == 3.1415);
+  Expect.isTrue(A.stringField == "hello");
+  Expect.isTrue(A.nullField == null);
+  Expect.isTrue(A.nullField2 == null);
+  Expect.isTrue(A.composed == "hello world");
+}
diff --git a/tests/kernel/unsorted/global_function_test.dart b/tests/kernel/unsorted/global_function_test.dart
new file mode 100644
index 0000000..925ce80
--- /dev/null
+++ b/tests/kernel/unsorted/global_function_test.dart
@@ -0,0 +1,35 @@
+// Copyright (c) 2016, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+main() {
+  foo(1, 2);
+  print('---');
+  foo(1, 2, d: 12);
+  print('---');
+  foo(1, 2, c: 11, e: 13);
+
+  print('=====');
+
+  bar(1, 2);
+  print('---');
+  bar(1, 2, 3);
+  print('---');
+  bar(1, 2, 3, 4);
+}
+
+foo(a, b, {c, d, e}) {
+  print(a);
+  print(b);
+  print(c);
+  print(d);
+  print(e);
+}
+
+bar(a, b, [c, d]) {
+  print(a);
+  print(b);
+  print(c);
+  print(d);
+}
+
diff --git a/tests/kernel/unsorted/instance_getters_and_setters_test.dart b/tests/kernel/unsorted/instance_getters_and_setters_test.dart
new file mode 100644
index 0000000..4430a62
--- /dev/null
+++ b/tests/kernel/unsorted/instance_getters_and_setters_test.dart
@@ -0,0 +1,36 @@
+// Copyright (c) 2016, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'package:expect/expect.dart';
+
+class A {
+  var field;
+
+  get getField {
+    return field;
+  }
+
+  set setField(value) {
+    field = value;
+    return null;
+  }
+}
+
+main() {
+  var result;
+  var a = new A();
+
+  Expect.isTrue(a.field == null);
+  Expect.isTrue(a.getField == null);
+
+  result = (a.field = 42);
+  Expect.isTrue(result == 42);
+  Expect.isTrue(a.field == 42);
+  Expect.isTrue(a.getField == 42);
+
+  result = (a.setField = 99);
+  Expect.isTrue(result == 99);
+  Expect.isTrue(a.field == 99);
+  Expect.isTrue(a.getField == 99);
+}
diff --git a/tests/kernel/unsorted/invocation_errors_test.dart b/tests/kernel/unsorted/invocation_errors_test.dart
new file mode 100644
index 0000000..9c9c516
--- /dev/null
+++ b/tests/kernel/unsorted/invocation_errors_test.dart
@@ -0,0 +1,16 @@
+// Copyright (c) 2016, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// Erroneous cases of invocations.
+
+import 'package:expect/expect.dart';
+
+test0(x) {
+  print('test0');
+}
+
+main() {
+  // Incorrect number of arguments, should be NoSuchMethodError but crashes.
+  test0(0, 1);
+}
diff --git a/tests/kernel/unsorted/invocation_test.dart b/tests/kernel/unsorted/invocation_test.dart
new file mode 100644
index 0000000..dbf862c
--- /dev/null
+++ b/tests/kernel/unsorted/invocation_test.dart
@@ -0,0 +1,40 @@
+// Copyright (c) 2016, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// Tests of invocations.
+
+import 'package:expect/expect.dart';
+
+test0(x) {
+  Expect.isTrue(x == 'argument0');
+  return 'return0';
+}
+
+class C0 {
+  static test1(x) {
+    Expect.isTrue(x == 'argument1');
+    return 'return1';
+  }
+}
+
+class C1 {
+  test2(x) {
+    Expect.isTrue(x == 'argument2');
+    return 'return2';
+  }
+}
+
+class C2 {
+  C2.test3(x) {
+    Expect.isTrue(x == 'argument3');
+  }
+}
+
+main() {
+  Expect.isTrue(test0('argument0') == 'return0');
+  Expect.isTrue(C0.test1('argument1') == 'return1');
+  Expect.isTrue(new C1().test2('argument2') == 'return2');
+  var c = new C2.test3('argument3');
+  Expect.isTrue(c is C2);
+}
diff --git a/tests/kernel/unsorted/klass_field_initializer_test.dart b/tests/kernel/unsorted/klass_field_initializer_test.dart
new file mode 100644
index 0000000..1d28341
--- /dev/null
+++ b/tests/kernel/unsorted/klass_field_initializer_test.dart
@@ -0,0 +1,36 @@
+// Copyright (c) 2016, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'package:expect/expect.dart';
+
+class A {
+  var intField = 1;
+  var doubleField = 3.1415;
+  var stringField = "hello";
+  var o;
+
+  A(this.o);
+}
+
+class B extends A {
+  var nullField = null;
+  var nullField2;
+
+  var n;
+  var m;
+
+  B(this.n, o) : super(o), m = "m";
+}
+
+main() {
+  var o = new B("n", "o");
+  Expect.isTrue(o.intField == 1);
+  Expect.isTrue(o.doubleField == 3.1415);
+  Expect.isTrue(o.stringField == "hello");
+  Expect.isTrue(o.nullField == null);
+  Expect.isTrue(o.nullField2 == null);
+  Expect.isTrue(o.m == 'm');
+  Expect.isTrue(o.n == 'n');
+  Expect.isTrue(o.o == 'o');
+}
diff --git a/tests/kernel/unsorted/klass_test.dart b/tests/kernel/unsorted/klass_test.dart
new file mode 100644
index 0000000..2745882
--- /dev/null
+++ b/tests/kernel/unsorted/klass_test.dart
@@ -0,0 +1,52 @@
+// Copyright (c) 2016, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+class A {
+  A() {
+    print("A");
+  }
+
+  hello() {
+    print("A.hello()");
+  }
+
+  hello1(a) {
+    print("A.hello1()");
+    print(a);
+  }
+
+  foo(a, [b]) {
+    print("A.foo()");
+    print(a);
+    print(b);
+  }
+
+  bar(a, {b}) {
+    print("A.bar()");
+    print(a);
+    print(b);
+  }
+}
+
+main() {
+  print("before constructor");
+  var a = new A();
+  print("============");
+  a.hello();
+  print('-----(obj):');
+  print(a);
+  print('-----');
+  a.hello1(1);
+  print('-----');
+  a.foo(1);
+  print('-----');
+  a.foo(1, 2);
+  print('-----');
+  print("============");
+  a.bar(1);
+  print('-----');
+  a.bar(1, b: 2);
+  print("============");
+}
+
diff --git a/tests/kernel/unsorted/let_test.dart b/tests/kernel/unsorted/let_test.dart
new file mode 100644
index 0000000..7687966
--- /dev/null
+++ b/tests/kernel/unsorted/let_test.dart
@@ -0,0 +1,10 @@
+// Copyright (c) 2016, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'package:expect/expect.dart';
+
+main() {
+  var a = [1];
+  Expect.isTrue((a..add(42))[1] == 42);
+}
diff --git a/tests/kernel/unsorted/load_store_test.dart b/tests/kernel/unsorted/load_store_test.dart
new file mode 100644
index 0000000..d19f87b
--- /dev/null
+++ b/tests/kernel/unsorted/load_store_test.dart
@@ -0,0 +1,64 @@
+// Copyright (c) 2016, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// Tests of reading and writing to variables.
+
+import 'package:expect/expect.dart';
+
+test0() {
+  var x0 = 0, x1;
+  Expect.isTrue(x0 == 0);
+  Expect.isTrue(x1 == null);
+  x0 = 1;
+  Expect.isTrue(x0 == 1);
+  Expect.isTrue((x0 = 2) == 2);
+  Expect.isTrue(x0 == 2);
+}
+
+var x2 = 0, x3;
+
+test1() {
+  Expect.isTrue(x2 == 0);
+  Expect.isTrue(x3 == null);
+  x2 = 1;
+  Expect.isTrue(x2 == 1);
+  Expect.isTrue((x2 = 2) == 2);
+  Expect.isTrue(x2 == 2);
+}
+
+class C {
+  static var x4 = 0;
+  static var x5;
+}
+
+test3() {
+  Expect.isTrue(C.x4 == 0);
+  Expect.isTrue(C.x5 == null);
+  C.x4 = 1;
+  Expect.isTrue(C.x4 == 1);
+  Expect.isTrue((C.x4 = 2) == 2);
+  Expect.isTrue(C.x4 == 2);
+}
+
+class D {
+  var x6 = 0;
+  var x7;
+}
+
+test4() {
+  var d = new D();
+  Expect.isTrue(d.x6 == 0);
+  Expect.isTrue(d.x7 == null);
+  d.x6 = 1;
+  Expect.isTrue(d.x6 == 1);
+  Expect.isTrue((d.x6 = 2) == 2);
+  Expect.isTrue(d.x6 == 2);
+}
+
+main() {
+  test0();
+  test1();
+  test3();
+  test4();
+}
diff --git a/tests/kernel/unsorted/local_function_test.dart b/tests/kernel/unsorted/local_function_test.dart
new file mode 100644
index 0000000..536c96a
--- /dev/null
+++ b/tests/kernel/unsorted/local_function_test.dart
@@ -0,0 +1,25 @@
+// Copyright (c) 2016, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// Tests of function expressions and function statements.
+
+import 'package:expect/expect.dart';
+
+main() {
+  var even;
+  odd(n) => n > 0 && even(n - 1);
+  even = (n) => n == 0 || odd(n - 1);
+
+  Expect.isTrue(even(0));
+  Expect.isTrue(!odd(0));
+
+  Expect.isTrue(odd(1));
+  Expect.isTrue(!even(1));
+
+  Expect.isTrue(even(42));
+  Expect.isTrue(!odd(42));
+
+  Expect.isTrue(odd(101));
+  Expect.isTrue(!even(101));
+}
diff --git a/tests/kernel/unsorted/loop_test.dart b/tests/kernel/unsorted/loop_test.dart
new file mode 100644
index 0000000..3885138
--- /dev/null
+++ b/tests/kernel/unsorted/loop_test.dart
@@ -0,0 +1,91 @@
+// Copyright (c) 2016, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// Tests of loops.
+
+import 'package:expect/expect.dart';
+
+fact(n) {
+  var f = 1;
+  while (n > 0) {
+    f *= n;
+    --n;
+  }
+  return f;
+}
+
+fib(n) {
+  if (n == 0) return 0;
+  var previous = 0, current = 1;
+  while (n > 1) {
+    var temp = current;
+    current += previous;
+    previous = temp;
+    --n;
+  }
+  return current;
+}
+
+mkTrue() => true;
+mkFalse() => false;
+
+check(b) {
+  Expect.isTrue(b);
+  return b;
+}
+
+test0() {
+  while (mkTrue()) {
+    Expect.isTrue(true);
+    return;
+  }
+  Expect.isTrue(false);
+}
+
+test1() {
+  while (mkFalse()) {
+    Expect.isTrue(false);
+  }
+  Expect.isTrue(true);
+}
+
+test2() {
+  do {
+    Expect.isTrue(true);
+  } while (mkFalse());
+  Expect.isTrue(true);
+}
+
+test3() {
+  do {
+    Expect.isTrue(true);
+    return;
+  } while (check(false));
+  Expect.isTrue(false);
+}
+
+main() {
+  Expect.isTrue(fact(0) == 1);
+  Expect.isTrue(fact(1) == 1);
+  Expect.isTrue(fact(5) == 120);
+  Expect.isTrue(fact(42) ==
+      1405006117752879898543142606244511569936384000000000);
+  Expect.isTrue(fact(3.14159) == 1.0874982674320444);
+
+  Expect.isTrue(fib(0) == 0);
+  Expect.isTrue(fib(1) == 1);
+  Expect.isTrue(fib(2) == 1);
+  Expect.isTrue(fib(3) == 2);
+  Expect.isTrue(fib(4) == 3);
+  Expect.isTrue(fib(5) == 5);
+  Expect.isTrue(fib(6) == 8);
+  Expect.isTrue(fib(7) == 13);
+  Expect.isTrue(fib(42) == 267914296);
+  Expect.isTrue(fib(3.14159) == 3);
+
+  test0();
+  test1();
+  test2();
+  test3();
+}
diff --git a/tests/kernel/unsorted/mapliteral_test.dart b/tests/kernel/unsorted/mapliteral_test.dart
new file mode 100644
index 0000000..146422d
--- /dev/null
+++ b/tests/kernel/unsorted/mapliteral_test.dart
@@ -0,0 +1,27 @@
+// Copyright (c) 2016, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'package:expect/expect.dart';
+
+main() {
+  var map = {
+    'k1': 'v1',
+    'k2': 'v2',
+    1: 2,
+    1.5 : 1.2,
+    3: 3.14,
+  };
+
+  Expect.isTrue(map.length == 5);
+
+  map['foo'] = 'bar';
+
+  Expect.isTrue(map['k1'] == 'v1');
+  Expect.isTrue(map['k2'] == 'v2');
+  Expect.isTrue(map[1] == 2);
+  Expect.isTrue(map[1.5] == 1.2);
+  Expect.isTrue(map[3] == 3.14);
+  Expect.isTrue(map['foo'] == 'bar');
+  Expect.isTrue(map.length == 6);
+}
diff --git a/tests/kernel/unsorted/mixin_test.dart b/tests/kernel/unsorted/mixin_test.dart
new file mode 100644
index 0000000..c04a2f3
--- /dev/null
+++ b/tests/kernel/unsorted/mixin_test.dart
@@ -0,0 +1,64 @@
+// Copyright (c) 2016, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'package:expect/expect.dart';
+
+class Base {
+  baseFoo() {
+    print('Base.baseFoo()');
+    return 1;
+  }
+
+  foo() {
+    print('Base.foo()');
+    return 1;
+  }
+}
+
+class Mixin {
+  mixinFoo() {
+    print('Mixin.mixinFoo()');
+    return 2;
+  }
+
+  foo() {
+    print('Mixin.foo()');
+    return 2;
+  }
+}
+
+class Mixin2 {
+  mixin2Foo() {
+    print('Mixin2.mixin2Foo()');
+    return 3;
+  }
+
+  foo() {
+    print('Mixin2.foo()');
+    return 3;
+  }
+}
+
+class Sub extends Base with Mixin, Mixin2 {
+  subFoo() {
+    print('Sub.subFoo()');
+    return 4;
+  }
+
+  foo() {
+    print('Sub.foo()');
+    return 4;
+  }
+}
+
+main() {
+  var o = new Sub();
+
+  Expect.isTrue(o.baseFoo() == 1);
+  Expect.isTrue(o.mixinFoo() == 2);
+  Expect.isTrue(o.mixin2Foo() == 3);
+  Expect.isTrue(o.subFoo() == 4);
+  Expect.isTrue(o.foo() == 4);
+}
+
diff --git a/tests/kernel/unsorted/nsm_dispatcher_test.dart b/tests/kernel/unsorted/nsm_dispatcher_test.dart
new file mode 100644
index 0000000..f9cfe40
--- /dev/null
+++ b/tests/kernel/unsorted/nsm_dispatcher_test.dart
@@ -0,0 +1,32 @@
+// Copyright (c) 2016, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'package:expect/expect.dart';
+
+class A {
+  noSuchMethod(Invocation invocation) {
+    var s = '|${invocation.memberName}|';
+    for (var a in invocation.positionalArguments) {
+      s = '$s$a|';
+    }
+    invocation.namedArguments.forEach((Symbol k, v) {
+      s = '$s$k/$v|';
+    });
+    print(s);
+    return s;
+  }
+}
+
+main() {
+  var o = new A();
+  Expect.isTrue(o.fun() == '|Symbol("fun")|');
+  Expect.isTrue(o.fun(1) == '|Symbol("fun")|1|');
+  Expect.isTrue(o.fun(1, 2) == '|Symbol("fun")|1|2|');
+  Expect.isTrue(o.fun(1, b: 2) ==
+      '|Symbol("fun")|1|Symbol("b")/2|');
+  Expect.isTrue(o.fun(1, a: 1, b: 2) ==
+      '|Symbol("fun")|1|Symbol("a")/1|Symbol("b")/2|');
+  Expect.isTrue(o.fun(1, b: 2, a: 1) ==
+      '|Symbol("fun")|1|Symbol("a")/1|Symbol("b")/2|');
+}
diff --git a/tests/kernel/unsorted/nullable_operator_test.dart b/tests/kernel/unsorted/nullable_operator_test.dart
new file mode 100644
index 0000000..9bf1bcb7
--- /dev/null
+++ b/tests/kernel/unsorted/nullable_operator_test.dart
@@ -0,0 +1,13 @@
+// Copyright (c) 2016, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'package:expect/expect.dart';
+
+mkOne() => 1;
+mkNull() => null;
+
+main() {
+  Expect.isTrue((mkOne() ?? 2) == 1);
+  Expect.isTrue((mkNull() ?? 2) == 2);
+}
diff --git a/tests/kernel/unsorted/rethrow_test.dart b/tests/kernel/unsorted/rethrow_test.dart
new file mode 100644
index 0000000..c8f31d1
--- /dev/null
+++ b/tests/kernel/unsorted/rethrow_test.dart
@@ -0,0 +1,67 @@
+// Copyright (c) 2016, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'package:expect/expect.dart';
+
+testNormalRethrow() {
+  var x = 0;
+  try {
+    try {
+      throw x++;
+    } catch (e) {
+      Expect.isTrue(e == 0);
+      x++;
+      rethrow;
+    }
+  } catch (e) {
+    Expect.isTrue(e == 0);
+    x++;
+  }
+  Expect.isTrue(x == 3);
+}
+
+testNormalRethrow2() {
+  var x = 0;
+  try {
+    try {
+      throw x++;
+    } on int catch (e) {
+      Expect.isTrue(e == 0);
+      x++;
+      rethrow;
+    }
+  } catch (e) {
+    Expect.isTrue(e == 0);
+    x++;
+  }
+  Expect.isTrue(x == 3);
+}
+
+testRethrowWithinTryRethrow() {
+  var x = 0;
+  try {
+    try {
+      throw x++;
+    } on int catch (e) {
+      Expect.isTrue(e == 0);
+      x++;
+      try {
+        x++;
+        rethrow;
+      } finally {
+        x++;
+      }
+    }
+  } catch (e) {
+    Expect.isTrue(e == 0);
+    x++;
+  }
+  Expect.isTrue(x == 5);
+}
+
+main() {
+  testNormalRethrow();
+  testNormalRethrow2();
+  testRethrowWithinTryRethrow();
+}
diff --git a/tests/kernel/unsorted/return_test.dart b/tests/kernel/unsorted/return_test.dart
new file mode 100644
index 0000000..9bf60d2
--- /dev/null
+++ b/tests/kernel/unsorted/return_test.dart
@@ -0,0 +1,28 @@
+// Copyright (c) 2016, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// Tests of return (and imports, literals, ==, and static methods).
+
+import 'package:expect/expect.dart';
+
+test0() {}
+
+test1() { return; }
+
+test3() { return 3; }
+
+test4() => 4;
+
+test5() {
+  return 5;
+  Expect.isTrue(false);
+}
+
+main() {
+  Expect.isTrue(test0() == null);
+  Expect.isTrue(test1() == null);
+  Expect.isTrue(test3() == 3);
+  Expect.isTrue(test4() == 4);
+  Expect.isTrue(test5() == 5);
+}
diff --git a/tests/kernel/unsorted/simple_literal_test.dart b/tests/kernel/unsorted/simple_literal_test.dart
new file mode 100644
index 0000000..fd7ba87
--- /dev/null
+++ b/tests/kernel/unsorted/simple_literal_test.dart
@@ -0,0 +1,45 @@
+// Copyright (c) 2016, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// Tests of literals (and imports, return, ==, and static methods).
+import 'package:expect/expect.dart';
+
+test0() {
+  return 'Hello, world!';
+}
+
+test1() {
+  return 42;
+}
+
+test2() {
+  return 2.71828;
+}
+
+test3() {
+  return 6.022e23;
+}
+
+test4() {
+  return true;
+}
+
+test5() {
+  return false;
+}
+
+test6() {
+  return 1405006117752879898543142606244511569936384000000000;
+}
+
+main() {
+  Expect.isTrue(test0() == 'Hello, world!');
+  Expect.isTrue(test1() == 42);
+  Expect.isTrue(test2() == 2.71828);
+  Expect.isTrue(test3() == 6.022e23);
+  Expect.isTrue(test4());
+  Expect.isTrue(test5() == false);
+  Expect.isTrue(
+      test6() == 1405006117752879898543142606244511569936384000000000);
+}
diff --git a/tests/kernel/unsorted/string_buffer_test.dart b/tests/kernel/unsorted/string_buffer_test.dart
new file mode 100644
index 0000000..a89aee6
--- /dev/null
+++ b/tests/kernel/unsorted/string_buffer_test.dart
@@ -0,0 +1,9 @@
+// Copyright (c) 2016, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+main() {
+  var sb = new StringBuffer();
+  sb.writeln('hello world :)');
+  print(sb);
+}
diff --git a/tests/kernel/unsorted/string_concatenation_test.dart b/tests/kernel/unsorted/string_concatenation_test.dart
new file mode 100644
index 0000000..be6543a
--- /dev/null
+++ b/tests/kernel/unsorted/string_concatenation_test.dart
@@ -0,0 +1,13 @@
+// Copyright (c) 2016, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'package:expect/expect.dart';
+
+class A {
+  toString() => 'hello';
+}
+
+main() {
+  Expect.isTrue('begin ${new A()} end' == 'begin hello end');
+}
diff --git a/tests/kernel/unsorted/super_initializer_test.dart b/tests/kernel/unsorted/super_initializer_test.dart
new file mode 100644
index 0000000..b230686
--- /dev/null
+++ b/tests/kernel/unsorted/super_initializer_test.dart
@@ -0,0 +1,48 @@
+// Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE.md file.
+
+import 'package:expect/expect.dart';
+
+String log;
+init() { log = ''; }
+logit(msg) { return log = '$log$msg'; }
+
+class Base {
+  var b;
+  Base.arg0() : b = logit('b') {
+    logit('B');
+  }
+  Base.arg1(a) : b = logit('b') {
+    logit('B');
+  }
+  Base.arg2(a, b) : b = logit('b') {
+    logit('B');
+  }
+}
+
+class Sub extends Base {
+  var x;
+  var s;
+  Sub.arg0() : x = logit('x'), super.arg0(), s = logit('s') {
+    logit('S');
+  }
+  Sub.arg1(a) : x = logit('x'), super.arg1(logit('1')), s = logit('s') {
+    logit('S');
+  }
+  Sub.arg2(a, b) : x = logit('x'), super.arg2(logit('1'), logit('2')), s = logit('s') {
+    logit('S');
+  }
+}
+
+test(fun(), String result) {
+  init();
+  fun();
+  Expect.isTrue(log == result);
+}
+
+main() {
+  test(() => new Sub.arg0(), 'xsbBS');
+  test(() => new Sub.arg1(1), 'x1sbBS');
+  test(() => new Sub.arg2(1, 2), 'x12sbBS');
+}
diff --git a/tests/kernel/unsorted/super_mixin_test.dart b/tests/kernel/unsorted/super_mixin_test.dart
new file mode 100644
index 0000000..de0871e
--- /dev/null
+++ b/tests/kernel/unsorted/super_mixin_test.dart
@@ -0,0 +1,39 @@
+// Copyright (c) 2016, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'package:expect/expect.dart';
+
+class Base {
+  var field;
+
+  method(x) {
+    print(x);
+    return x;
+  }
+
+  set setter(x) {
+    print(x);
+    field = x;
+  }
+}
+
+class Mixin {
+  method(x) {
+    return super.method(x + 'Mixin');
+  }
+
+  set setter(x) {
+    super.setter = x + 'Mixin';
+  }
+}
+
+class Sub extends Base with Mixin {
+}
+
+main() {
+  var object = new Sub();
+  Expect.isTrue(object.method('x') == 'xMixin');
+  object.setter = 'y';
+  Expect.isTrue(object.field == 'yMixin');
+}
diff --git a/tests/kernel/unsorted/super_test.dart b/tests/kernel/unsorted/super_test.dart
new file mode 100644
index 0000000..54f5d99
--- /dev/null
+++ b/tests/kernel/unsorted/super_test.dart
@@ -0,0 +1,40 @@
+// Copyright (c) 2016, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'package:expect/expect.dart';
+
+class A {
+  var field = 9;
+  var called = false;
+
+  superMethod() {
+    Expect.isTrue(field == 10);
+    called = true;
+    return true;
+  }
+}
+
+class B extends A {
+  doit() {
+    Expect.isTrue((super.field = 10) == 10);
+    Expect.isTrue(super.superMethod());
+    if (called) {
+      Expect.isTrue((super.field = 11) == 11);
+    }
+    return super.field;
+  }
+}
+
+class C extends B {
+  set field(v) {
+    throw 'should not happen';
+  }
+}
+
+main() {
+  var c = new C();
+  Expect.isTrue(c.field == 9);
+  Expect.isTrue(c.doit() == 11);
+  Expect.isTrue(c.field == 11);
+}
diff --git a/tests/kernel/unsorted/superclass_test.dart b/tests/kernel/unsorted/superclass_test.dart
new file mode 100644
index 0000000..15f1f56
--- /dev/null
+++ b/tests/kernel/unsorted/superclass_test.dart
@@ -0,0 +1,64 @@
+// Copyright (c) 2016, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'package:expect/expect.dart';
+
+class A {
+  A() {
+    print("A");
+  }
+
+  hello() {
+    print("A.hello()");
+    return 1;
+  }
+
+  hello1(a) {
+    print("A.hello1()");
+    print(a);
+    return 1;
+  }
+
+  foo(a, [b]) {
+    print("A.foo()");
+    print(a);
+    print(b);
+    return 1;
+  }
+
+  bar(a, {b}) {
+    print("A.bar()");
+    print(a);
+    print(b);
+    return 1;
+  }
+}
+
+class B extends A {
+  hello() {
+    print("B.hello()");
+    return 2;
+  }
+
+  bar(a, {b}) {
+    print("B.bar()");
+    print(a);
+    print(b);
+    return 2;
+  }
+}
+
+main() {
+  var o = new B();
+
+  // Base class methods.
+  Expect.isTrue(o.hello1(1) == 1);
+  Expect.isTrue(o.foo(1) == 1);
+  Expect.isTrue(o.foo(1, 2) == 1);
+
+  // Overwritten methods.
+  Expect.isTrue(o.hello() == 2);
+  Expect.isTrue(o.bar(1) == 2);
+  Expect.isTrue(o.bar(1, b: 2) == 2);
+}
diff --git a/tests/kernel/unsorted/switch_case_test.dart b/tests/kernel/unsorted/switch_case_test.dart
new file mode 100644
index 0000000..333310f
--- /dev/null
+++ b/tests/kernel/unsorted/switch_case_test.dart
@@ -0,0 +1,174 @@
+// Copyright (c) 2016, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'package:expect/expect.dart';
+
+mkOne() => 1;
+mkTwo() => 2;
+
+testNormal() {
+  int result;
+  switch(mkOne()) {
+    case 0:
+      result = 0;
+      break;
+    case 1:
+      result = 1;
+      break;
+    case 2:
+      result = 2;
+      break;
+    default:
+      result = 3;
+      break;
+  }
+  Expect.isTrue(result == 1);
+}
+
+testDefault() {
+  int result;
+  switch(null) {
+    case 0:
+      result = 0;
+      break;
+    case 1:
+      result = 1;
+      break;
+    case 2:
+      result = 2;
+      break;
+    default:
+      result = 3;
+      break;
+  }
+  Expect.isTrue(result == 3);
+}
+
+testFallThrough() {
+  int result;
+  switch(mkOne()) {
+    case 0:
+      result = 0;
+      break;
+    case 1:
+    case 2:
+      result = 2;
+      break;
+    default:
+      result = 3;
+      break;
+  }
+  Expect.isTrue(result == 2);
+}
+
+testContinue() {
+  int result;
+  switch(mkTwo()) {
+    case 0:
+      result = 0;
+      break;
+
+    setitto1:
+    case 1:
+      result = 1;
+      continue setitto3;
+
+    case 2:
+      result = 2;
+      continue setitto1;
+
+    setitto3:
+    default:
+      result = 3;
+      break;
+  }
+  Expect.isTrue(result == 3);
+}
+
+testOnlyDefault() {
+  int result;
+  switch(mkTwo()) {
+    default:
+      result = 42;
+  }
+  Expect.isTrue(result == 42);
+}
+
+testOnlyDefaultWithBreak() {
+  int result;
+  switch(mkTwo()) {
+    default:
+      result = 42;
+  }
+  Expect.isTrue(result == 42);
+}
+
+String testReturn() {
+  switch(mkOne()) {
+    case 0: return "bad";
+    case 1: return "good";
+    default: return "bad";
+  }
+}
+
+regressionTest() {
+  Expect.isTrue(regressionTestHelper(0, 0) == -1);
+  Expect.isTrue(regressionTestHelper(4, 0) == -1);
+  Expect.isTrue(regressionTestHelper(4, 1) == 42);
+}
+
+regressionTestHelper(i, j) {
+  switch (i) {
+    case 4:
+      switch (j) {
+        case 1:
+          return 42;
+      }
+  }
+  return -1;
+}
+
+regressionTest2() {
+  var state = 1;
+  while (state < 2) {
+    switch (state) {
+      case 1:
+        state++;
+        break;
+      case 3:
+      case 4:
+        // We will translate this currently to an empty [Fragment] which can
+        // cause issues if we would like to append/prepend to it.
+        assert(false);
+    }
+  }
+  return [1];
+}
+
+regressionTest3() {
+  f(x) {
+    switch (x) {
+      case 1:
+        return 2;
+      case 2:
+    }
+    throw new UnsupportedError("Unexpected constant kind.");
+  }
+  Expect.isTrue(f(1) == 2);
+}
+
+main() {
+  testNormal();
+  testDefault();
+  testFallThrough();
+  testContinue();
+  testOnlyDefault();
+  testOnlyDefaultWithBreak();
+  regressionTest();
+  regressionTest2();
+  regressionTest3();
+
+  var result = testReturn();
+  Expect.isTrue(result == "good");
+}
diff --git a/tests/kernel/unsorted/symbol_literal_test.dart b/tests/kernel/unsorted/symbol_literal_test.dart
new file mode 100644
index 0000000..6a3cc8a
--- /dev/null
+++ b/tests/kernel/unsorted/symbol_literal_test.dart
@@ -0,0 +1,10 @@
+// Copyright (c) 2016, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'package:expect/expect.dart';
+
+main() {
+  Expect.isTrue('${#abc}' == 'Symbol("abc")');
+  Expect.isTrue('${#abc.xzy}' == 'Symbol("abc.xzy")');
+}
diff --git a/tests/kernel/unsorted/this_capture_test.dart b/tests/kernel/unsorted/this_capture_test.dart
new file mode 100644
index 0000000..ea296d6
--- /dev/null
+++ b/tests/kernel/unsorted/this_capture_test.dart
@@ -0,0 +1,34 @@
+// Copyright (c) 2016, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'package:expect/expect.dart';
+
+class Foo {
+  capture() {
+    return () {
+      return this;
+    };
+  }
+
+  captureFirst(a, b) {
+    return () {
+      print(a);
+      return this;
+    };
+  }
+
+  captureLast(a, b) {
+    return () {
+      print(b);
+      return this;
+    };
+  }
+}
+
+main() {
+  var foo = new Foo();
+  Expect.isTrue(identical(foo, (foo.capture())()));
+  Expect.isTrue(identical(foo, (foo.captureFirst(1, 2))()));
+  Expect.isTrue(identical(foo, (foo.captureLast(1, 2))()));
+}
diff --git a/tests/kernel/unsorted/this_test.dart b/tests/kernel/unsorted/this_test.dart
new file mode 100644
index 0000000..666da97
--- /dev/null
+++ b/tests/kernel/unsorted/this_test.dart
@@ -0,0 +1,15 @@
+// Copyright (c) 2016, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'package:expect/expect.dart';
+
+class A {
+  getThis() => this;
+}
+
+main() {
+  var a = new A();
+  Expect.isTrue(a == a.getThis());
+  Expect.isTrue(identical(a, a.getThis()));
+}
diff --git a/tests/kernel/unsorted/throw_try_catch_test.dart b/tests/kernel/unsorted/throw_try_catch_test.dart
new file mode 100644
index 0000000..d76cba7
--- /dev/null
+++ b/tests/kernel/unsorted/throw_try_catch_test.dart
@@ -0,0 +1,190 @@
+// Copyright (c) 2016, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'package:expect/expect.dart';
+
+testSimpleThrowCatch() {
+  var x = 1;
+  try {
+    throw x++;
+  } on int catch (e) {
+    Expect.isTrue(e == 1);
+    Expect.isTrue(x == 2);
+    x++;
+  }
+  Expect.isTrue(x == 3);
+}
+
+testNestedThrowCatch() {
+  var x = 1;
+  try {
+    throw x++;
+  } catch (e) {
+    Expect.isTrue(e == 1);
+    Expect.isTrue(x == 2);
+    x++;
+
+    try {
+      throw x++;
+    } catch (e) {
+      Expect.isTrue(e == 3);
+      Expect.isTrue(x == 4);
+      x++;
+    }
+  }
+  Expect.isTrue(x == 5);
+}
+
+testNestedThrowCatch2() {
+  var x = 1;
+  try {
+    try {
+      throw x++;
+    } catch (e) {
+      Expect.isTrue(e == 1);
+      Expect.isTrue(x == 2);
+      x++;
+    }
+    throw x++;
+  } catch (e) {
+    Expect.isTrue(e == 3);
+    Expect.isTrue(x == 4);
+    x++;
+  }
+  Expect.isTrue(x == 5);
+}
+
+testSiblingThrowCatch() {
+  var x = 1;
+  try {
+    throw x++;
+  } catch (e) {
+    Expect.isTrue(e == 1);
+    Expect.isTrue(x == 2);
+    x++;
+  }
+  try {
+    throw x++;
+  } catch (e) {
+    Expect.isTrue(e == 3);
+    Expect.isTrue(x == 4);
+    x++;
+  }
+
+  Expect.isTrue(x == 5);
+}
+
+testTypedCatch() {
+  var good = false;
+  try {
+    throw 1;
+  } on int catch (e) {
+    Expect.isTrue(e == 1);
+    good = true;
+  } on String catch (_) {
+    Expect.isTrue(false);
+  }
+  Expect.isTrue(good);
+}
+
+testTypedCatch2() {
+  var good = false;
+  try {
+    throw 'a';
+  } on int catch (_) {
+    Expect.isTrue(false);
+  } on String catch (e) {
+    Expect.isTrue(e == 'a');
+    good = true;
+  }
+  Expect.isTrue(good);
+}
+
+testThrowNull() {
+  var good = false;
+  try {
+    throw null;
+  } on NullThrownError catch (_) {
+    good = true;
+  }
+  Expect.isTrue(good);
+}
+
+testFinally() {
+  var x = 0;
+  try {
+    throw x++;
+  } catch (_) {
+    x++;
+  } finally {
+    x++;
+  }
+  Expect.isTrue(x == 3);
+}
+
+testFinally2() {
+  var x = 0;
+  try {
+    try {
+      throw x++;
+    } catch (_) {
+      x++;
+    } finally {
+      x++;
+    }
+  } finally {
+    x++;
+  }
+  Expect.isTrue(x == 4);
+}
+
+testFinally3() {
+  try {
+    var x = 0;
+    try {
+      throw x++;
+    } finally {
+      x++;
+    }
+    Expect.isTrue(x == 2);
+  } catch (_) {}
+}
+
+testSuccessfulBody() {
+  var x = 0;
+  try {
+    x++;
+  } finally {
+    x++;
+  }
+  Expect.isTrue(x == 2);
+}
+
+testSuccessfulBody2() {
+  var x = 0;
+  try {
+    try {
+      x++;
+    } finally {
+      x++;
+      throw 1;
+    }
+  } on int {}
+  Expect.isTrue(x == 2);
+}
+
+main() {
+  testSimpleThrowCatch();
+  testNestedThrowCatch();
+  testNestedThrowCatch2();
+  testSiblingThrowCatch();
+  testTypedCatch();
+  testTypedCatch2();
+  testThrowNull();
+  testFinally();
+  testFinally2();
+  testFinally3();
+  testSuccessfulBody();
+  testSuccessfulBody2();
+}
diff --git a/tests/kernel/unsorted/try_context_test.dart b/tests/kernel/unsorted/try_context_test.dart
new file mode 100644
index 0000000..f836c89
--- /dev/null
+++ b/tests/kernel/unsorted/try_context_test.dart
@@ -0,0 +1,91 @@
+// Copyright (c) 2016, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'package:expect/expect.dart';
+
+throwValue(val) => throw val;
+
+f1() {
+  var a = 0;
+  var b = 0;
+  var c = 0;
+  var d = 0;
+  for (var i = 0; i < 10; i++) {
+    try {
+      for (var j = 0; j < 11; j++) {
+        try {
+          capture() => [i, j, a, b, c, d];
+          throwValue(j == 10 ? "${j}" : j);
+        } on num catch (e) {
+          a += j;
+          b -= e;
+        }
+      }
+    } catch (e) {
+      c++;
+      d += int.parse(e);
+    }
+  }
+  return [a, b, c, d];
+}
+
+
+f2() {
+  var a = 0;
+  var b = 0;
+  var c = 0;
+  var d = 0;
+  for (var i = 0; i < 10; i++) {
+    try {
+      for (var j = 0; j < 11; j++) {
+        try {
+          capture() => [i, j, a, b, c, d];
+          throwValue(j == 10 ? "${j}" : j);
+        } on num catch (e) {
+          a += j;
+          b -= e;
+        }
+      }
+    } catch (e) {
+      capture() => e;
+      c++;
+      d += int.parse(e);
+    }
+  }
+  return [a, b, c, d];
+}
+
+
+f3() {
+  var a = 0;
+  var b = 0;
+  var c = 0;
+  var d = 0;
+  for (var i = 0; i < 10; i++) {
+    try {
+      for (var j = 0; j < 11; j++) {
+        try {
+          capture() => [i, j, a, b, c, d];
+          throwValue(j == 10 ? "${j}" : j);
+        } on num catch (e) {
+          a += j;
+          b -= e;
+        }
+      }
+    } catch (e) {
+      capture() => e;
+      c++;
+      d += int.parse(e);
+      continue;
+    }
+  }
+  return [a, b, c, d];
+}
+
+
+main() {
+  Expect.listEquals([450, -450, 10, 100], f1());
+  Expect.listEquals([450, -450, 10, 100], f2());
+  Expect.listEquals([450, -450, 10, 100], f3());
+}
diff --git a/tests/kernel/unsorted/try_finally_test.dart b/tests/kernel/unsorted/try_finally_test.dart
new file mode 100644
index 0000000..db3069b
--- /dev/null
+++ b/tests/kernel/unsorted/try_finally_test.dart
@@ -0,0 +1,158 @@
+// Copyright (c) 2016, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'package:expect/expect.dart';
+
+testSimpleBreak() {
+  var x = 1;
+  while (true) {
+    try {
+      x++;
+      break;
+    } finally {
+      x++;
+      break;
+    }
+  }
+  return x;
+}
+
+testReturnFinally() {
+  try {
+    return 1;
+  } finally {
+    return 42;
+  }
+}
+
+testNestedReturnFinally() {
+  try {
+    try {
+      return 1;
+    } finally {
+      return 2;
+    }
+  } finally {
+    return 42;
+  }
+}
+
+testReturnInsideLoop() {
+  while (true) {
+    try {
+      print("hello");
+    } finally {
+      return 42;
+    }
+  }
+}
+
+testStopContinueInsideLoop() {
+  while (true) {
+    try {
+      continue;
+    } finally {
+      return 42;
+    }
+  }
+}
+
+testStopBreakInsideLoop() {
+  var foo = 1;
+  while (true) {
+    try {
+      if (foo == 1) {
+        // 1st iteration we break.
+        break;
+      } else if (foo == 2) {
+        // 2nd iteration we return.
+        return 42;
+      }
+    } finally {
+      // 1st iteration we overrwrite break with continue.
+      if (foo == 1) {
+        foo++;
+        continue;
+      } else {
+        // Let return work
+      }
+    }
+  }
+  return foo;
+}
+
+testStopBreakInsideLoop2() {
+  var foo = 1;
+  while (true) {
+    try {
+      if (foo == 1) {
+        // 1st iteration we break.
+        break;
+      } else if (foo == 2) {
+        // 2nd iteration we return.
+        return -1;
+      }
+    } finally {
+      // 1st iteration we overrwrite break with continue.
+      if (foo == 1) {
+        foo++;
+        continue;
+      } else {
+        // 2nd iteration we overrwrite return with break.
+        foo = 42;
+        break;
+      }
+    }
+  }
+  return foo;
+}
+
+testStopContinueInsideSwitch() {
+  var foo = 1;
+  switch (foo) {
+    jump5:
+    case 5:
+      return -1;
+
+    case 1:
+      try {
+        continue jump5;
+      } finally {
+        return 42;
+      }
+  }
+}
+
+testStopContinueInsideSwitch2() {
+  var foo = 1;
+  switch (foo) {
+    jump5:
+    case 5:
+      return -1;
+
+    jump42:
+    case 5:
+      return 42;
+
+    case 1:
+      try {
+        continue jump5;
+      } finally {
+        continue jump42;
+      }
+  }
+}
+
+main() {
+  Expect.isTrue(testSimpleBreak() == 3);
+  Expect.isTrue(testReturnFinally() == 42);
+  Expect.isTrue(testNestedReturnFinally() == 42);
+  Expect.isTrue(testReturnInsideLoop() == 42);
+  Expect.isTrue(testStopContinueInsideLoop() == 42);
+  Expect.isTrue(testStopBreakInsideLoop() == 42);
+  Expect.isTrue(testStopBreakInsideLoop2() == 42);
+  Expect.isTrue(testStopContinueInsideLoop() == 42);
+  Expect.isTrue(testStopContinueInsideSwitch() == 42);
+  Expect.isTrue(testStopContinueInsideSwitch2() == 42);
+}
diff --git a/tests/kernel/unsorted/type_args_regression_test.dart b/tests/kernel/unsorted/type_args_regression_test.dart
new file mode 100644
index 0000000..0b88bd7
--- /dev/null
+++ b/tests/kernel/unsorted/type_args_regression_test.dart
@@ -0,0 +1,22 @@
+// Copyright (c) 2016, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'package:expect/expect.dart';
+
+class Box<T> {
+  T value;
+
+  Box(this.value);
+
+  factory Box.a(T v) => new Box(v);
+  factory Box.b(T v) = Box<T>;
+  factory Box.c(T v) => new Box(v);
+}
+
+main() {
+  Expect.isTrue(new Box<int>(1).value == 1);
+  Expect.isTrue(new Box<int>.a(1).value == 1);
+  Expect.isTrue(new Box<int>.b(1).value == 1);
+  Expect.isTrue(new Box<int>.c(1).value == 1);
+}
diff --git a/tests/kernel/unsorted/types_test.dart b/tests/kernel/unsorted/types_test.dart
new file mode 100644
index 0000000..157f2f8
--- /dev/null
+++ b/tests/kernel/unsorted/types_test.dart
@@ -0,0 +1,202 @@
+// Copyright (c) 2016, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'package:expect/expect.dart';
+
+class TypeTester<T> {
+  const TypeTester();
+  bool isCorrectType(object) => object is T;
+}
+
+class ClosureTypeTester<T> {
+  const ClosureTypeTester();
+  bool isCorrectType(object) => (() => object is T)();
+}
+
+class Base<A, B> {
+  final A a;
+  final B b;
+  const Base(this.a, this.b);
+  const factory Base.fac(A a, B b) = Base<A, B>;
+}
+
+class Sub1<C, D> extends Base<C, C> {
+  final D d;
+  const Sub1(C a, this.d) : super(a, a);
+  const factory Sub1.fac(C a, D d) = Sub1<C, D>;
+}
+
+class Sub2<C, D> extends Base<D, C> {
+  const Sub2(C a, D b) : super(b, a);
+  const factory Sub2.fac(C a, D b) = Sub2<C, D>;
+}
+
+class G<T> { }
+class I { }
+class A implements I { }
+class B extends A { }
+class C {}
+
+testConstantLiteralTypes() {
+  Expect.isTrue(const [1] is List);
+  Expect.isTrue(const [1] is List<int>);
+  Expect.isTrue(const [1] is List<String>);
+  Expect.isTrue(const <int>[1] is List);
+  Expect.isTrue(const <int>[1] is List<int>);
+  Expect.isTrue(!(const <int>[1] is List<String>));
+  Expect.isTrue(const {"a": 1} is Map);
+  Expect.isTrue(const {"a": 1} is Map<String, int>);
+  Expect.isTrue(const {"a": 1} is Map<int, String>);
+  Expect.isTrue(const <String, int>{"a": 1} is Map);
+  Expect.isTrue(const <String, int>{"a": 1} is Map<String, int>);
+  Expect.isTrue(!(const <String, int>{"a": 1} is Map<int, String>));
+}
+
+testNonConstantLiteralTypes() {
+  Expect.isTrue([1] is List);
+  Expect.isTrue([1] is List<int>);
+  Expect.isTrue([1] is List<String>);
+  Expect.isTrue(<int>[1] is List);
+  Expect.isTrue(<int>[1] is List<int>);
+  Expect.isTrue(!(<int>[1] is List<String>));
+}
+
+testParametrizedClass() {
+  Expect.isTrue(new Base<int, int>(1, 1) is Base<int, int>);
+  Expect.isTrue(new Base<int, int>(1, 1) is Base);
+  Expect.isTrue(new Base<int, int>(1, 1) is Base<Object, Object>);
+  Expect.isTrue(!(new Base<int, int>(1, 1) is Base<int, String>));
+  Expect.isTrue(!(new Base<int, int>(1, 1) is Base<String, int>));
+  Expect.isTrue(new Sub1<int, String>(1, "1") is Base<int, int>);
+  Expect.isTrue(new Sub1<int, String>(1, "1") is Base);
+  Expect.isTrue(new Sub1<int, String>(1, "1") is Sub1<int, String>);
+  Expect.isTrue(new Sub1<int, String>(1, "1") is Sub1);
+  Expect.isTrue(!(new Sub1<int, String>(1, "1") is Base<String, int>));
+  Expect.isTrue(!(new Sub1<int, String>(1, "1") is Base<int, String>));
+  Expect.isTrue(!(new Sub1<int, String>(1, "1") is Sub1<String, String>));
+  Expect.isTrue(new Sub2<int, String>(1, "1") is Base<String, int>);
+  Expect.isTrue(new Sub2<int, String>(1, "1") is Base);
+  Expect.isTrue(new Sub2<int, String>(1, "1") is Sub2<int, String>);
+  Expect.isTrue(new Sub2<int, String>(1, "1") is Sub2);
+  Expect.isTrue(!(new Sub2<int, String>(1, "1") is Base<int, int>));
+  Expect.isTrue(!(new Sub2<int, String>(1, "1") is Base<int, String>));
+  Expect.isTrue(!(new Sub2<int, String>(1, "1") is Sub2<String, String>));
+}
+
+testTypeTester() {
+  Expect.isTrue(new TypeTester<int>().isCorrectType(10));
+  Expect.isTrue(!new TypeTester<int>().isCorrectType("abc"));
+  Expect.isTrue(new TypeTester<List<int>>().isCorrectType([1]));
+  Expect.isTrue(new TypeTester<List<int>>().isCorrectType(<int>[1]));
+  Expect.isTrue(!new TypeTester<List<int>>().isCorrectType(<String>["1"]));
+  Expect.isTrue(new TypeTester<Base<String, int>>()
+      .isCorrectType(new Sub2<int, String>(1, "1")));
+  Expect.isTrue(new TypeTester<Sub2<int, String>>()
+      .isCorrectType(new Sub2<int, String>(1, "1")));
+}
+
+testClosureTypeTester() {
+  Expect.isTrue(new ClosureTypeTester<int>().isCorrectType(10));
+  Expect.isTrue(!new ClosureTypeTester<int>().isCorrectType("abc"));
+  Expect.isTrue(new ClosureTypeTester<List<int>>().isCorrectType([1]));
+  Expect.isTrue(new ClosureTypeTester<List<int>>().isCorrectType(<int>[1]));
+  Expect.isTrue(!new ClosureTypeTester<List<int>>()
+      .isCorrectType(<String>["1"]));
+  Expect.isTrue(new ClosureTypeTester<Base<String, int>>()
+      .isCorrectType(new Sub2<int, String>(1, "1")));
+  Expect.isTrue(new ClosureTypeTester<Sub2<int, String>>()
+      .isCorrectType(new Sub2<int, String>(1, "1")));
+}
+
+testConstTypeArguments() {
+  Expect.isTrue(const Sub1<int, String>(1, "1") is Sub1<int, String>);
+  Expect.isTrue(const Sub1<int, String>.fac(1, "1") is Sub1<int, String>);
+  Expect.isTrue(!(const Sub1<int, String>(1, "1") is Sub1<String, String>));
+  Expect.isTrue(!(const Sub1<int, String>.fac(1, "1") is Sub1<String, String>));
+
+  Expect.isTrue(const ClosureTypeTester<List<Base<int, String>>>()
+      .isCorrectType(
+       const <Base<int, String>>[const Base<int, String>(1, "2")]));
+  Expect.isTrue(const ClosureTypeTester<List<Base<int, String>>>()
+      .isCorrectType(
+       const <Base<int, String>>[const Base<int, String>.fac(1, "2")]));
+  Expect.isTrue(!const ClosureTypeTester<List<Base<int, String>>>()
+      .isCorrectType(
+       const <Base<String, String>>[const Base<String, String>("1", "2")]));
+  Expect.isTrue(!const ClosureTypeTester<List<Base<int, String>>>()
+      .isCorrectType(
+       const <Base<String, String>>[const Base<String, String>.fac("1", "2")]));
+
+  Expect.isTrue(const TypeTester<Sub2<int, String>>()
+      .isCorrectType(const Sub2<int, String>(1, "1")));
+  Expect.isTrue(const TypeTester<Sub2<int, String>>()
+      .isCorrectType(const Sub2<int, String>.fac(1, "1")));
+  Expect.isTrue(!const TypeTester<Sub2<int, String>>()
+      .isCorrectType(const Sub2<String, String>("a", "b")));
+  Expect.isTrue(!const TypeTester<Sub2<int, String>>()
+      .isCorrectType(const Sub2<String, String>.fac("a", "b")));
+}
+
+testNoBound() {
+  new G<int>();
+  new G<num>();
+  new G<Function>();
+  new G<Object>();
+  new G();
+  new G();
+  new G<G>();
+}
+
+testSubtypeChecker() {
+  Expect.isTrue(new TypeTester<num>().isCorrectType(1));
+  Expect.isTrue(new TypeTester<num>().isCorrectType(1.0));
+  Expect.isTrue(new TypeTester<A>().isCorrectType(new B()));
+  Expect.isTrue(new TypeTester<Object>().isCorrectType(new C()));
+  Expect.isTrue(new TypeTester<I>().isCorrectType(new A()));
+}
+
+testFunctionTypes() {
+  fun(int x, String y) => "${x}${y}";
+  Expect.isTrue(fun is FunctionType);
+  Expect.isTrue(nan is FunctionType);
+  Expect.isTrue(nan is Function);
+}
+
+num nan(double d, Pattern p) => double.NAN;
+
+typedef int FunctionType(num _, Pattern __);
+
+
+testLiteralTypeArguments() {
+  Expect.isTrue(new Foo<String, int>().foo() is List<String>);
+  Expect.isTrue(new Foo<int, String>().bar() is Map<int, String>);
+}
+
+class Foo<T1, T2> {
+  foo() => <T1>[];
+  bar() => <T1, T2>{};
+}
+
+regressionTest1() {
+  Expect.isTrue(!StaticTypeTester.isInt('abc'));
+}
+
+class StaticTypeTester<T> {
+  static isInt(x) => x is int;
+}
+
+main() {
+  testConstantLiteralTypes();
+  testNonConstantLiteralTypes();
+  testParametrizedClass();
+  testTypeTester();
+  testClosureTypeTester();
+  testConstTypeArguments();
+  testNoBound();
+  testSubtypeChecker();
+  testFunctionTypes();
+  testLiteralTypeArguments();
+  regressionTest1();
+}
+
diff --git a/tests/language/language_analyzer2.status b/tests/language/language_analyzer2.status
index be27119..ec05db6 100644
--- a/tests/language/language_analyzer2.status
+++ b/tests/language/language_analyzer2.status
@@ -410,7 +410,6 @@
 switch3_negative_test: CompileTimeError
 switch4_negative_test: CompileTimeError
 switch5_negative_test: CompileTimeError
-switch6_test: StaticWarning
 switch7_negative_test: CompileTimeError
 switch_fallthru_test: StaticWarning
 test_negative_test: CompileTimeError
diff --git a/tests/language/language_dart2js.status b/tests/language/language_dart2js.status
index b9e66f6..1da0824 100644
--- a/tests/language/language_dart2js.status
+++ b/tests/language/language_dart2js.status
@@ -371,3 +371,6 @@
 regress_26855_test/2: Crash # Issue 26867
 regress_26855_test/3: Crash # Issue 26867
 regress_26855_test/4: Crash # Issue 26867
+
+[ $compiler != dart2analyzer]
+switch_case_warn_test: SKIP # Analyzer only, see language_analyzer2.status
diff --git a/tests/language/language_kernel.status b/tests/language/language_kernel.status
new file mode 100644
index 0000000..2002d17
--- /dev/null
+++ b/tests/language/language_kernel.status
@@ -0,0 +1,715 @@
+# Copyright (c) 2016, the Dart project authors.  Please see the AUTHORS file
+# for details. All rights reserved. Use of this source code is governed by a
+# BSD-style license that can be found in the LICENSE file.
+
+# These tests currently take too long. Remove when they are fixed.
+[ $compiler == dartk || $compiler == rasta ]
+large_class_declaration_test: Skip
+large_implicit_getter_test: Skip
+larger_implicit_getter_test: Skip
+
+# dartk: JIT failures
+[ $compiler == dartk && $runtime == vm ]
+accessor_conflict_export2_test: RuntimeError
+accessor_conflict_export_test: RuntimeError
+accessor_conflict_import2_test: RuntimeError
+accessor_conflict_import_prefixed2_test: RuntimeError
+accessor_conflict_import_prefixed_test: RuntimeError
+accessor_conflict_import_test: RuntimeError
+assertion_test: RuntimeError
+async_break_in_finally_test: RuntimeError
+async_control_structures_test: RuntimeError
+async_star_cancel_and_throw_in_finally_test: RuntimeError
+async_star_cancel_while_paused_test: RuntimeError
+async_star_regression_fisk_test: Crash
+async_star_stream_take_test: Timeout
+async_star_take_reyield_test: Timeout
+async_star_test: Crash
+async_throw_in_catch_test/forceAwait: RuntimeError
+async_throw_in_catch_test/none: RuntimeError
+asyncstar_throw_in_catch_test: Timeout
+asyncstar_yield_test: Timeout
+asyncstar_yieldstar_test: Timeout
+await_exceptions_test: RuntimeError
+await_future_test: RuntimeError
+await_regression_test: RuntimeError
+bad_constructor_test/05: CompileTimeError
+bad_raw_string_negative_test: Fail
+cha_deopt1_test: RuntimeError
+cha_deopt2_test: RuntimeError
+cha_deopt3_test: RuntimeError
+closure_type_variable_test: RuntimeError
+closures_initializer_test: RuntimeError
+compile_time_constant12_test: Crash
+compile_time_constant_k_test/01: RuntimeError
+compile_time_constant_k_test/02: RuntimeError
+compile_time_constant_k_test/03: RuntimeError
+compile_time_constant_o_test/01: RuntimeError
+compile_time_constant_o_test/02: RuntimeError
+config_import_test: RuntimeError
+conflicting_type_variable_and_setter_test: CompileTimeError
+const_dynamic_type_literal_test/02: RuntimeError
+const_error_multiply_initialized_test/02: RuntimeError
+const_error_multiply_initialized_test/04: RuntimeError
+const_evaluation_test/01: RuntimeError
+const_for_in_variable_test/01: MissingCompileTimeError
+const_locals_test: RuntimeError
+const_nested_test: RuntimeError
+const_string_test: RuntimeError
+constructor2_test: RuntimeError
+constructor3_test: RuntimeError
+constructor5_test: RuntimeError
+constructor6_test: RuntimeError
+constructor_duplicate_final_test/01: MissingRuntimeError
+constructor_duplicate_final_test/02: MissingRuntimeError
+constructor_duplicate_final_test/03: MissingCompileTimeError
+constructor_named_arguments_test/01: Crash
+cyclic_type2_test: CompileTimeError
+cyclic_type_test/00: RuntimeError
+cyclic_type_test/01: RuntimeError
+cyclic_type_test/02: CompileTimeError
+cyclic_type_test/03: RuntimeError
+cyclic_type_test/04: CompileTimeError
+cyclic_type_variable_test/01: Crash
+cyclic_type_variable_test/02: Crash
+cyclic_type_variable_test/03: Crash
+cyclic_type_variable_test/04: Crash
+cyclic_type_variable_test/none: Crash
+deep_nesting1_negative_test: Crash
+deep_nesting2_negative_test: Crash
+deferred_call_empty_before_load_test: RuntimeError
+deferred_closurize_load_library_test: Crash
+deferred_constant_list_test: RuntimeError
+deferred_constraints_constants_test/none: RuntimeError
+deferred_constraints_constants_test/reference_after_load: RuntimeError
+deferred_constraints_type_annotation_test/as_operation: RuntimeError
+deferred_constraints_type_annotation_test/catch_check: RuntimeError
+deferred_constraints_type_annotation_test/is_check: RuntimeError
+deferred_constraints_type_annotation_test/new: RuntimeError
+deferred_constraints_type_annotation_test/new_before_load: RuntimeError
+deferred_constraints_type_annotation_test/new_generic1: RuntimeError
+deferred_constraints_type_annotation_test/new_generic2: RuntimeError
+deferred_constraints_type_annotation_test/new_generic3: RuntimeError
+deferred_constraints_type_annotation_test/none: RuntimeError
+deferred_constraints_type_annotation_test/static_method: RuntimeError
+deferred_constraints_type_annotation_test/type_annotation1: RuntimeError
+deferred_constraints_type_annotation_test/type_annotation_generic1: RuntimeError
+deferred_constraints_type_annotation_test/type_annotation_generic2: RuntimeError
+deferred_constraints_type_annotation_test/type_annotation_generic3: RuntimeError
+deferred_constraints_type_annotation_test/type_annotation_generic4: RuntimeError
+deferred_constraints_type_annotation_test/type_annotation_non_deferred: RuntimeError
+deferred_constraints_type_annotation_test/type_annotation_null: RuntimeError
+deferred_constraints_type_annotation_test/type_annotation_top_level: RuntimeError
+deferred_function_type_test: RuntimeError
+deferred_global_test: RuntimeError
+deferred_import_core_test: RuntimeError
+deferred_inheritance_constraints_test/redirecting_constructor: RuntimeError
+deferred_inlined_test: RuntimeError
+deferred_load_constants_test/none: RuntimeError
+deferred_load_inval_code_test: RuntimeError
+deferred_load_library_wrong_args_test/none: RuntimeError
+deferred_mixin_test: RuntimeError
+deferred_no_such_method_test: RuntimeError
+deferred_not_loaded_check_test: RuntimeError
+deferred_only_constant_test: RuntimeError
+deferred_optimized_test: RuntimeError
+deferred_redirecting_factory_test: RuntimeError
+deferred_regression_22995_test: RuntimeError
+deferred_shadow_load_library_test: RuntimeError
+deferred_shared_and_unshared_classes_test: RuntimeError
+deferred_static_seperate_test: RuntimeError
+deferred_super_dependency_test/01: RuntimeError
+deferred_type_dependency_test/as: RuntimeError
+deferred_type_dependency_test/is: RuntimeError
+deferred_type_dependency_test/none: RuntimeError
+deferred_type_dependency_test/type_annotation: RuntimeError
+duplicate_export_negative_test: Fail
+enum_duplicate_test/01: RuntimeError
+enum_duplicate_test/02: RuntimeError
+enum_duplicate_test/none: RuntimeError
+enum_mirror_test: RuntimeError
+enum_private_test/01: RuntimeError
+enum_private_test/02: RuntimeError
+enum_private_test/none: RuntimeError
+enum_syntax_test/05: MissingCompileTimeError
+enum_syntax_test/06: MissingCompileTimeError
+enum_test: RuntimeError
+evaluation_redirecting_constructor_test: RuntimeError
+example_constructor_test: RuntimeError
+execute_finally8_test: RuntimeError
+execute_finally9_test: RuntimeError
+export_double_same_main_test: Crash
+export_main_test: Crash
+external_test/10: MissingRuntimeError
+external_test/13: MissingRuntimeError
+external_test/20: MissingRuntimeError
+external_test/21: MissingCompileTimeError
+external_test/24: MissingCompileTimeError
+external_test/25: MissingCompileTimeError
+f_bounded_equality_test: RuntimeError
+field_initialization_order_test: RuntimeError
+final_field_initialization_order_test: RuntimeError
+final_super_field_set_test/01: RuntimeError
+final_syntax_test/01: MissingCompileTimeError
+final_syntax_test/02: MissingCompileTimeError
+final_syntax_test/03: MissingCompileTimeError
+final_syntax_test/04: MissingCompileTimeError
+fixed_type_variable2_test/02: RuntimeError
+fixed_type_variable2_test/04: RuntimeError
+fixed_type_variable2_test/06: RuntimeError
+fixed_type_variable_test/01: RuntimeError
+fixed_type_variable_test/02: RuntimeError
+fixed_type_variable_test/03: RuntimeError
+fixed_type_variable_test/04: RuntimeError
+fixed_type_variable_test/05: RuntimeError
+fixed_type_variable_test/06: RuntimeError
+for2_test: RuntimeError
+for_variable_capture_test: RuntimeError
+forwarding_factory_constructor_default_values_test: RuntimeError
+function_subtype2_test: RuntimeError
+function_subtype_bound_closure3_test: RuntimeError
+function_subtype_bound_closure4_test: RuntimeError
+function_subtype_cast1_test: RuntimeError
+function_subtype_inline0_test: RuntimeError
+function_subtype_local3_test: RuntimeError
+function_subtype_local4_test: RuntimeError
+function_subtype_not1_test: RuntimeError
+function_type_alias2_test: RuntimeError
+function_type_alias3_test: RuntimeError
+function_type_alias4_test: RuntimeError
+generic2_test: RuntimeError
+generic_closure_test: RuntimeError
+generic_creation_test: RuntimeError
+generic_field_mixin2_test: RuntimeError
+generic_field_mixin4_test: RuntimeError
+generic_field_mixin5_test: RuntimeError
+generic_functions_test: CompileTimeError
+generic_inheritance_test: RuntimeError
+generic_local_functions_test: CompileTimeError
+generic_methods_function_type_test: CompileTimeError
+generic_methods_new_test: CompileTimeError
+generic_methods_test: CompileTimeError
+generic_methods_type_expression_test: CompileTimeError
+generic_sends_test: CompileTimeError
+generic_test: RuntimeError
+getter_closure_execution_order_test: RuntimeError
+getter_setter_in_lib_test: RuntimeError
+inferrer_closure_test: RuntimeError
+initializing_formal_access_test: CompileTimeError
+initializing_formal_capture_test: CompileTimeError
+initializing_formal_final_test: CompileTimeError
+initializing_formal_type_test: CompileTimeError
+instance_creation_in_function_annotation_test: RuntimeError
+invocation_mirror_test: RuntimeError
+is_not_class2_test: RuntimeError
+issue13474_test: RuntimeError
+issue23244_test: Crash
+issue_1751477_test: RuntimeError
+least_upper_bound_expansive_test/01: CompileTimeError
+least_upper_bound_expansive_test/02: CompileTimeError
+least_upper_bound_expansive_test/03: CompileTimeError
+least_upper_bound_expansive_test/04: CompileTimeError
+least_upper_bound_expansive_test/05: CompileTimeError
+least_upper_bound_expansive_test/06: CompileTimeError
+least_upper_bound_expansive_test/07: CompileTimeError
+least_upper_bound_expansive_test/08: CompileTimeError
+least_upper_bound_expansive_test/09: CompileTimeError
+least_upper_bound_expansive_test/10: CompileTimeError
+least_upper_bound_expansive_test/11: CompileTimeError
+least_upper_bound_expansive_test/12: CompileTimeError
+least_upper_bound_expansive_test/none: CompileTimeError
+library_env_test/has_html_support: RuntimeError
+library_env_test/has_no_io_support: RuntimeError
+library_env_test/has_no_mirror_support: RuntimeError
+list_literal4_test: RuntimeError
+main_not_a_function_test/01: Crash
+malformed_test/none: RuntimeError
+map_literal3_test: RuntimeError
+map_literal4_test: RuntimeError
+map_literal6_test: RuntimeError
+metadata_test: CompileTimeError
+method_override_test: RuntimeError
+mixin_generic_test: RuntimeError
+mixin_illegal_super_use_test/01: MissingCompileTimeError
+mixin_illegal_super_use_test/02: MissingCompileTimeError
+mixin_illegal_super_use_test/03: MissingCompileTimeError
+mixin_illegal_super_use_test/04: MissingCompileTimeError
+mixin_illegal_super_use_test/05: MissingCompileTimeError
+mixin_illegal_super_use_test/06: MissingCompileTimeError
+mixin_illegal_super_use_test/07: MissingCompileTimeError
+mixin_illegal_super_use_test/08: MissingCompileTimeError
+mixin_illegal_super_use_test/09: MissingCompileTimeError
+mixin_illegal_super_use_test/10: MissingCompileTimeError
+mixin_illegal_super_use_test/11: MissingCompileTimeError
+mixin_illegal_superclass_test/01: MissingCompileTimeError
+mixin_illegal_superclass_test/02: MissingCompileTimeError
+mixin_illegal_superclass_test/03: MissingCompileTimeError
+mixin_illegal_superclass_test/04: MissingCompileTimeError
+mixin_illegal_superclass_test/05: MissingCompileTimeError
+mixin_illegal_superclass_test/06: MissingCompileTimeError
+mixin_illegal_superclass_test/07: MissingCompileTimeError
+mixin_illegal_superclass_test/08: MissingCompileTimeError
+mixin_illegal_superclass_test/09: MissingCompileTimeError
+mixin_illegal_superclass_test/10: MissingCompileTimeError
+mixin_illegal_superclass_test/11: MissingCompileTimeError
+mixin_illegal_superclass_test/12: MissingCompileTimeError
+mixin_illegal_superclass_test/13: MissingCompileTimeError
+mixin_illegal_superclass_test/14: MissingCompileTimeError
+mixin_illegal_superclass_test/15: MissingCompileTimeError
+mixin_illegal_superclass_test/16: MissingCompileTimeError
+mixin_illegal_superclass_test/17: MissingCompileTimeError
+mixin_illegal_superclass_test/18: MissingCompileTimeError
+mixin_illegal_superclass_test/19: MissingCompileTimeError
+mixin_illegal_superclass_test/20: MissingCompileTimeError
+mixin_illegal_superclass_test/21: MissingCompileTimeError
+mixin_illegal_superclass_test/22: MissingCompileTimeError
+mixin_illegal_superclass_test/23: MissingCompileTimeError
+mixin_illegal_superclass_test/24: MissingCompileTimeError
+mixin_illegal_superclass_test/25: MissingCompileTimeError
+mixin_illegal_superclass_test/26: MissingCompileTimeError
+mixin_illegal_superclass_test/27: MissingCompileTimeError
+mixin_illegal_superclass_test/28: MissingCompileTimeError
+mixin_illegal_superclass_test/29: MissingCompileTimeError
+mixin_illegal_superclass_test/30: MissingCompileTimeError
+mixin_illegal_syntax_test/13: CompileTimeError
+mixin_illegal_syntax_test/none: CompileTimeError
+mixin_mixin2_test: RuntimeError
+mixin_mixin3_test: RuntimeError
+mixin_mixin4_test: RuntimeError
+mixin_mixin5_test: RuntimeError
+mixin_mixin_bound2_test: RuntimeError
+mixin_mixin_bound_test: RuntimeError
+mixin_super_test: RuntimeError
+mixin_type_parameters_simple_test: RuntimeError
+mixin_type_parameters_super_extends_test: RuntimeError
+mixin_type_parameters_super_test: RuntimeError
+multiline_newline_test/01: CompileTimeError
+multiline_newline_test/02: CompileTimeError
+multiline_newline_test/03: CompileTimeError
+multiline_newline_test/04: MissingCompileTimeError
+multiline_newline_test/05: MissingCompileTimeError
+multiline_newline_test/06: MissingCompileTimeError
+multiline_newline_test/none: RuntimeError
+named_parameters_type_test/01: MissingRuntimeError
+named_parameters_type_test/02: MissingRuntimeError
+named_parameters_type_test/03: MissingRuntimeError
+no_main_test/01: Crash
+not_enough_positional_arguments_test/01: CompileTimeError
+not_enough_positional_arguments_test/02: Crash
+not_enough_positional_arguments_test/05: Crash
+null_test/none: RuntimeError
+number_identifier_test/05: RuntimeError
+positional_parameters_type_test/01: MissingRuntimeError
+positional_parameters_type_test/02: MissingRuntimeError
+prefix10_negative_test: Fail
+prefix16_test: RuntimeError
+prefix21_test: RuntimeError
+redirecting_constructor_initializer_test: RuntimeError
+redirecting_factory_default_values_test/none: RuntimeError
+redirecting_factory_reflection_test: RuntimeError
+regress_18713_test: RuntimeError
+regress_22443_test: RuntimeError
+regress_22700_test: RuntimeError
+regress_23408_test: RuntimeError
+regress_27164_test: CompileTimeError
+regress_r24720_test: RuntimeError
+reify_typevar_static_test/00: MissingCompileTimeError
+reify_typevar_test: RuntimeError
+script1_negative_test: Fail
+script2_negative_test: Fail
+setter_no_getter_call_test/none: RuntimeError
+static_setter_get_test/01: RuntimeError
+super_call3_test/01: Crash
+super_call4_test: RuntimeError
+super_getter_setter_test: RuntimeError
+super_no_such_method1_test/01: RuntimeError
+super_no_such_method2_test/01: RuntimeError
+super_no_such_method3_test/01: RuntimeError
+super_no_such_method4_test/01: RuntimeError
+super_no_such_method5_test/01: RuntimeError
+super_operator_index3_test: RuntimeError
+super_operator_index4_test: RuntimeError
+super_operator_index5_test: RuntimeError
+super_operator_index6_test: RuntimeError
+super_operator_index7_test: RuntimeError
+super_operator_index8_test: RuntimeError
+super_test: RuntimeError
+switch7_negative_test: Fail
+switch_try_catch_test: RuntimeError
+sync_generator3_test/test2: RuntimeError
+tearoff_basic_test: CompileTimeError
+tearoff_constructor_basic_test: CompileTimeError
+throw8_test: RuntimeError
+try_catch_on_syntax_test/10: MissingRuntimeError
+try_catch_on_syntax_test/11: MissingRuntimeError
+try_finally_regress_25654_test: RuntimeError
+type_checks_in_factory_method_test: RuntimeError
+type_parameter_literal_test: RuntimeError
+type_parameter_test/04: Crash
+type_variable_conflict2_test/02: MissingCompileTimeError
+type_variable_conflict2_test/06: MissingCompileTimeError
+type_variable_conflict2_test/08: MissingCompileTimeError
+type_variable_conflict2_test/10: MissingCompileTimeError
+type_variable_function_type_test: RuntimeError
+vm/debug_break_enabled_vm_test/01: CompileTimeError
+vm/debug_break_enabled_vm_test/none: CompileTimeError
+vm/optimized_guarded_field_isolates_test: Crash
+vm/reflect_core_vm_test: CompileTimeError
+vm/type_cast_vm_test: RuntimeError
+vm/type_vm_test: RuntimeError
+
+# dartk: precompilation failures
+[ $compiler == dartkp && $runtime == dart_precompiled ]
+accessor_conflict_export2_test: RuntimeError
+accessor_conflict_export_test: RuntimeError
+accessor_conflict_import2_test: RuntimeError
+accessor_conflict_import_prefixed2_test: RuntimeError
+accessor_conflict_import_prefixed_test: RuntimeError
+accessor_conflict_import_test: RuntimeError
+assertion_test: RuntimeError
+async_break_in_finally_test: RuntimeError
+async_control_structures_test: RuntimeError
+async_star_cancel_and_throw_in_finally_test: RuntimeError
+async_star_cancel_while_paused_test: RuntimeError
+async_star_regression_fisk_test: Crash
+async_star_stream_take_test: Timeout
+async_star_take_reyield_test: Timeout
+async_star_test: Crash
+async_throw_in_catch_test/forceAwait: RuntimeError
+async_throw_in_catch_test/none: RuntimeError
+asyncstar_throw_in_catch_test: Timeout
+asyncstar_yield_test: Timeout
+asyncstar_yieldstar_test: Timeout
+await_exceptions_test: RuntimeError
+await_future_test: RuntimeError
+await_regression_test: RuntimeError
+bad_constructor_test/05: CompileTimeError
+bad_raw_string_negative_test: Fail
+cha_deopt1_test: RuntimeError
+cha_deopt2_test: RuntimeError
+cha_deopt3_test: RuntimeError
+closure_type_variable_test: RuntimeError
+closures_initializer_test: RuntimeError
+compile_time_constant12_test: Crash
+compile_time_constant_k_test/01: RuntimeError
+compile_time_constant_k_test/02: RuntimeError
+compile_time_constant_k_test/03: RuntimeError
+compile_time_constant_o_test/01: RuntimeError
+compile_time_constant_o_test/02: RuntimeError
+config_import_test: RuntimeError
+conflicting_type_variable_and_setter_test: CompileTimeError
+const_dynamic_type_literal_test/02: RuntimeError
+const_error_multiply_initialized_test/02: RuntimeError
+const_error_multiply_initialized_test/04: RuntimeError
+const_evaluation_test/01: Crash
+const_for_in_variable_test/01: MissingCompileTimeError
+const_nested_test: RuntimeError
+constructor2_test: RuntimeError
+constructor3_test: RuntimeError
+constructor5_test: RuntimeError
+constructor6_test: RuntimeError
+constructor_duplicate_final_test/01: MissingRuntimeError
+constructor_duplicate_final_test/02: MissingRuntimeError
+constructor_duplicate_final_test/03: MissingCompileTimeError
+constructor_named_arguments_test/01: Crash
+cyclic_type2_test: CompileTimeError
+cyclic_type_test/00: RuntimeError
+cyclic_type_test/01: RuntimeError
+cyclic_type_test/02: CompileTimeError
+cyclic_type_test/03: RuntimeError
+cyclic_type_test/04: CompileTimeError
+cyclic_type_variable_test/01: Crash
+cyclic_type_variable_test/02: Crash
+cyclic_type_variable_test/03: Crash
+cyclic_type_variable_test/04: Crash
+cyclic_type_variable_test/none: Crash
+deep_nesting1_negative_test: Crash
+deep_nesting2_negative_test: Crash
+deferred_call_empty_before_load_test: RuntimeError
+deferred_closurize_load_library_test: Crash
+deferred_constant_list_test: RuntimeError
+deferred_constraints_constants_test/none: RuntimeError
+deferred_constraints_constants_test/reference_after_load: RuntimeError
+deferred_constraints_type_annotation_test/as_operation: RuntimeError
+deferred_constraints_type_annotation_test/catch_check: RuntimeError
+deferred_constraints_type_annotation_test/is_check: RuntimeError
+deferred_constraints_type_annotation_test/new: RuntimeError
+deferred_constraints_type_annotation_test/new_before_load: RuntimeError
+deferred_constraints_type_annotation_test/new_generic1: RuntimeError
+deferred_constraints_type_annotation_test/new_generic2: RuntimeError
+deferred_constraints_type_annotation_test/new_generic3: RuntimeError
+deferred_constraints_type_annotation_test/none: RuntimeError
+deferred_constraints_type_annotation_test/static_method: RuntimeError
+deferred_constraints_type_annotation_test/type_annotation1: RuntimeError
+deferred_constraints_type_annotation_test/type_annotation_generic1: RuntimeError
+deferred_constraints_type_annotation_test/type_annotation_generic2: RuntimeError
+deferred_constraints_type_annotation_test/type_annotation_generic3: RuntimeError
+deferred_constraints_type_annotation_test/type_annotation_generic4: RuntimeError
+deferred_constraints_type_annotation_test/type_annotation_non_deferred: RuntimeError
+deferred_constraints_type_annotation_test/type_annotation_null: RuntimeError
+deferred_constraints_type_annotation_test/type_annotation_top_level: RuntimeError
+deferred_function_type_test: RuntimeError
+deferred_global_test: RuntimeError
+deferred_import_core_test: RuntimeError
+deferred_inheritance_constraints_test/redirecting_constructor: RuntimeError
+deferred_inlined_test: RuntimeError
+deferred_load_constants_test/none: RuntimeError
+deferred_load_inval_code_test: RuntimeError
+deferred_load_library_wrong_args_test/none: RuntimeError
+deferred_mixin_test: RuntimeError
+deferred_no_such_method_test: RuntimeError
+deferred_not_loaded_check_test: RuntimeError
+deferred_only_constant_test: RuntimeError
+deferred_optimized_test: RuntimeError
+deferred_redirecting_factory_test: RuntimeError
+deferred_regression_22995_test: RuntimeError
+deferred_shadow_load_library_test: RuntimeError
+deferred_shared_and_unshared_classes_test: RuntimeError
+deferred_static_seperate_test: RuntimeError
+deferred_super_dependency_test/01: RuntimeError
+deferred_type_dependency_test/as: RuntimeError
+deferred_type_dependency_test/is: RuntimeError
+deferred_type_dependency_test/none: RuntimeError
+deferred_type_dependency_test/type_annotation: RuntimeError
+duplicate_export_negative_test: Fail
+enum_duplicate_test/01: RuntimeError
+enum_duplicate_test/02: RuntimeError
+enum_duplicate_test/none: RuntimeError
+enum_mirror_test: RuntimeError
+enum_private_test/01: RuntimeError
+enum_private_test/02: RuntimeError
+enum_private_test/none: RuntimeError
+enum_syntax_test/06: MissingCompileTimeError
+enum_test: RuntimeError
+evaluation_redirecting_constructor_test: RuntimeError
+example_constructor_test: RuntimeError
+execute_finally8_test: RuntimeError
+execute_finally9_test: RuntimeError
+export_double_same_main_test: Crash
+export_main_test: Crash
+external_test/10: MissingRuntimeError
+external_test/13: MissingRuntimeError
+external_test/20: MissingRuntimeError
+external_test/21: MissingCompileTimeError
+external_test/24: MissingCompileTimeError
+external_test/25: MissingCompileTimeError
+f_bounded_equality_test: RuntimeError
+field_initialization_order_test: RuntimeError
+final_field_initialization_order_test: RuntimeError
+final_super_field_set_test/01: RuntimeError
+final_syntax_test/01: MissingCompileTimeError
+final_syntax_test/02: MissingCompileTimeError
+final_syntax_test/03: MissingCompileTimeError
+final_syntax_test/04: MissingCompileTimeError
+fixed_type_variable2_test/02: RuntimeError
+fixed_type_variable2_test/04: RuntimeError
+fixed_type_variable2_test/06: RuntimeError
+fixed_type_variable_test/01: RuntimeError
+fixed_type_variable_test/02: RuntimeError
+fixed_type_variable_test/03: RuntimeError
+fixed_type_variable_test/04: RuntimeError
+fixed_type_variable_test/05: RuntimeError
+fixed_type_variable_test/06: RuntimeError
+for2_test: RuntimeError
+for_variable_capture_test: RuntimeError
+forwarding_factory_constructor_default_values_test: RuntimeError
+full_stacktrace1_test: RuntimeError
+full_stacktrace2_test: RuntimeError
+full_stacktrace3_test: RuntimeError
+function_subtype2_test: RuntimeError
+function_subtype_bound_closure3_test: RuntimeError
+function_subtype_bound_closure4_test: RuntimeError
+function_subtype_cast1_test: RuntimeError
+function_subtype_inline0_test: RuntimeError
+function_subtype_local3_test: RuntimeError
+function_subtype_local4_test: RuntimeError
+function_subtype_not1_test: RuntimeError
+function_type_alias2_test: RuntimeError
+function_type_alias3_test: RuntimeError
+function_type_alias4_test: RuntimeError
+generic2_test: RuntimeError
+generic_closure_test: RuntimeError
+generic_creation_test: RuntimeError
+generic_field_mixin2_test: RuntimeError
+generic_field_mixin4_test: RuntimeError
+generic_field_mixin5_test: RuntimeError
+generic_functions_test: CompileTimeError
+generic_inheritance_test: RuntimeError
+generic_local_functions_test: CompileTimeError
+generic_methods_function_type_test: CompileTimeError
+generic_methods_new_test: CompileTimeError
+generic_methods_test: CompileTimeError
+generic_methods_type_expression_test: CompileTimeError
+generic_sends_test: CompileTimeError
+generic_test: RuntimeError
+getter_closure_execution_order_test: RuntimeError
+getter_setter_in_lib_test: RuntimeError
+if_null_assignment_static_test/35: Crash
+inferrer_closure_test: RuntimeError
+initializing_formal_access_test: CompileTimeError
+initializing_formal_capture_test: CompileTimeError
+initializing_formal_final_test: CompileTimeError
+initializing_formal_type_test: CompileTimeError
+instance_creation_in_function_annotation_test: Crash
+invocation_mirror_invoke_on2_test: Crash
+invocation_mirror_test: Crash
+is_not_class2_test: RuntimeError
+issue13474_test: RuntimeError
+issue21079_test: Crash
+issue22800_test: Crash
+issue_1751477_test: RuntimeError
+large_class_declaration_test: Timeout
+least_upper_bound_expansive_test/01: CompileTimeError
+least_upper_bound_expansive_test/02: CompileTimeError
+least_upper_bound_expansive_test/03: CompileTimeError
+least_upper_bound_expansive_test/04: CompileTimeError
+least_upper_bound_expansive_test/05: CompileTimeError
+least_upper_bound_expansive_test/06: CompileTimeError
+least_upper_bound_expansive_test/07: CompileTimeError
+least_upper_bound_expansive_test/08: CompileTimeError
+least_upper_bound_expansive_test/09: CompileTimeError
+least_upper_bound_expansive_test/10: CompileTimeError
+least_upper_bound_expansive_test/11: CompileTimeError
+least_upper_bound_expansive_test/12: CompileTimeError
+least_upper_bound_expansive_test/none: CompileTimeError
+library_env_test/has_html_support: RuntimeError
+library_env_test/has_mirror_support: RuntimeError
+library_env_test/has_no_io_support: RuntimeError
+list_literal4_test: RuntimeError
+main_not_a_function_test/01: Crash
+malformed_test/none: RuntimeError
+map_literal3_test: RuntimeError
+map_literal4_test: RuntimeError
+map_literal6_test: RuntimeError
+metadata_test: CompileTimeError
+method_override_test: RuntimeError
+mixin_generic_test: RuntimeError
+mixin_illegal_super_use_test/01: MissingCompileTimeError
+mixin_illegal_super_use_test/02: MissingCompileTimeError
+mixin_illegal_super_use_test/03: MissingCompileTimeError
+mixin_illegal_super_use_test/04: MissingCompileTimeError
+mixin_illegal_super_use_test/05: MissingCompileTimeError
+mixin_illegal_super_use_test/06: MissingCompileTimeError
+mixin_illegal_super_use_test/07: MissingCompileTimeError
+mixin_illegal_super_use_test/08: MissingCompileTimeError
+mixin_illegal_super_use_test/09: MissingCompileTimeError
+mixin_illegal_super_use_test/10: MissingCompileTimeError
+mixin_illegal_super_use_test/11: MissingCompileTimeError
+mixin_illegal_superclass_test/01: MissingCompileTimeError
+mixin_illegal_superclass_test/02: MissingCompileTimeError
+mixin_illegal_superclass_test/03: MissingCompileTimeError
+mixin_illegal_superclass_test/04: MissingCompileTimeError
+mixin_illegal_superclass_test/05: MissingCompileTimeError
+mixin_illegal_superclass_test/06: MissingCompileTimeError
+mixin_illegal_superclass_test/07: MissingCompileTimeError
+mixin_illegal_superclass_test/08: MissingCompileTimeError
+mixin_illegal_superclass_test/09: MissingCompileTimeError
+mixin_illegal_superclass_test/10: MissingCompileTimeError
+mixin_illegal_superclass_test/11: MissingCompileTimeError
+mixin_illegal_superclass_test/12: MissingCompileTimeError
+mixin_illegal_superclass_test/13: MissingCompileTimeError
+mixin_illegal_superclass_test/14: MissingCompileTimeError
+mixin_illegal_superclass_test/15: MissingCompileTimeError
+mixin_illegal_superclass_test/16: MissingCompileTimeError
+mixin_illegal_superclass_test/17: MissingCompileTimeError
+mixin_illegal_superclass_test/18: MissingCompileTimeError
+mixin_illegal_superclass_test/19: MissingCompileTimeError
+mixin_illegal_superclass_test/20: MissingCompileTimeError
+mixin_illegal_superclass_test/21: MissingCompileTimeError
+mixin_illegal_superclass_test/22: MissingCompileTimeError
+mixin_illegal_superclass_test/23: MissingCompileTimeError
+mixin_illegal_superclass_test/24: MissingCompileTimeError
+mixin_illegal_superclass_test/25: MissingCompileTimeError
+mixin_illegal_superclass_test/26: MissingCompileTimeError
+mixin_illegal_superclass_test/27: MissingCompileTimeError
+mixin_illegal_superclass_test/28: MissingCompileTimeError
+mixin_illegal_superclass_test/29: MissingCompileTimeError
+mixin_illegal_superclass_test/30: MissingCompileTimeError
+mixin_illegal_syntax_test/13: CompileTimeError
+mixin_illegal_syntax_test/none: CompileTimeError
+mixin_mixin2_test: RuntimeError
+mixin_mixin3_test: RuntimeError
+mixin_mixin4_test: RuntimeError
+mixin_mixin5_test: RuntimeError
+mixin_mixin_bound2_test: RuntimeError
+mixin_mixin_bound_test: RuntimeError
+mixin_super_test: RuntimeError
+mixin_type_parameters_simple_test: RuntimeError
+mixin_type_parameters_super_extends_test: RuntimeError
+mixin_type_parameters_super_test: RuntimeError
+multiline_newline_test/01: CompileTimeError
+multiline_newline_test/02: CompileTimeError
+multiline_newline_test/03: CompileTimeError
+multiline_newline_test/04: MissingCompileTimeError
+multiline_newline_test/05: MissingCompileTimeError
+multiline_newline_test/06: MissingCompileTimeError
+multiline_newline_test/none: RuntimeError
+named_parameters_type_test/01: MissingRuntimeError
+named_parameters_type_test/02: MissingRuntimeError
+named_parameters_type_test/03: MissingRuntimeError
+no_main_test/01: Crash
+not_enough_positional_arguments_test/01: CompileTimeError
+not_enough_positional_arguments_test/02: MissingRuntimeError
+not_enough_positional_arguments_test/05: Crash
+null_test/none: RuntimeError
+number_identifier_test/05: RuntimeError
+positional_parameters_type_test/01: MissingRuntimeError
+positional_parameters_type_test/02: MissingRuntimeError
+prefix10_negative_test: Fail
+prefix16_test: RuntimeError
+prefix21_test: RuntimeError
+redirecting_constructor_initializer_test: RuntimeError
+redirecting_factory_default_values_test/none: RuntimeError
+redirecting_factory_reflection_test: Crash
+regress_18535_test: Crash
+regress_18713_test: RuntimeError
+regress_22443_test: RuntimeError
+regress_22700_test: RuntimeError
+regress_22777_test: Crash
+regress_23408_test: RuntimeError
+regress_26175_test: Crash
+regress_27164_test: CompileTimeError
+regress_r24720_test: RuntimeError
+reify_typevar_test: RuntimeError
+script1_negative_test: Fail
+script2_negative_test: Fail
+setter_no_getter_call_test/none: RuntimeError
+stack_trace_test: RuntimeError
+stacktrace_rethrow_error_test/none: RuntimeError
+stacktrace_rethrow_error_test/withtraceparameter: RuntimeError
+stacktrace_rethrow_nonerror_test: RuntimeError
+static_setter_get_test/01: RuntimeError
+super_call3_test/01: Crash
+super_call4_test: RuntimeError
+super_getter_setter_test: RuntimeError
+super_no_such_method1_test/01: RuntimeError
+super_no_such_method2_test/01: RuntimeError
+super_no_such_method3_test/01: RuntimeError
+super_no_such_method4_test/01: RuntimeError
+super_no_such_method5_test/01: RuntimeError
+super_operator_index3_test: RuntimeError
+super_operator_index4_test: RuntimeError
+super_operator_index5_test: RuntimeError
+super_operator_index6_test: RuntimeError
+super_operator_index7_test: RuntimeError
+super_operator_index8_test: RuntimeError
+super_test: RuntimeError
+switch7_negative_test: Fail
+switch_try_catch_test: RuntimeError
+sync_generator3_test/test2: RuntimeError
+tearoff_basic_test: CompileTimeError
+tearoff_constructor_basic_test: CompileTimeError
+throw8_test: RuntimeError
+try_catch_on_syntax_test/10: MissingRuntimeError
+try_catch_on_syntax_test/11: MissingRuntimeError
+try_finally_regress_25654_test: RuntimeError
+type_checks_in_factory_method_test: RuntimeError
+type_parameter_literal_test: RuntimeError
+type_parameter_test/04: Crash
+type_variable_conflict2_test/02: MissingCompileTimeError
+type_variable_function_type_test: RuntimeError
+vm/debug_break_enabled_vm_test/01: CompileTimeError
+vm/debug_break_enabled_vm_test/none: CompileTimeError
+vm/reflect_core_vm_test: CompileTimeError
+vm/type_cast_vm_test: RuntimeError
+vm/type_vm_test: RuntimeError
diff --git a/tests/language/regress_27659_test.dart b/tests/language/regress_27659_test.dart
new file mode 100644
index 0000000..e40a886
--- /dev/null
+++ b/tests/language/regress_27659_test.dart
@@ -0,0 +1,28 @@
+// Copyright (c) 2016, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+const String lineLength = '120';
+
+foo({lineLength: lineLength}) {
+  print(lineLength);
+}
+
+bar({lineLength: lineLength}) async {
+  print(lineLength);
+}
+
+baz([lineLength = lineLength]) {
+  print(lineLength);
+}
+
+qux([lineLength = lineLength]) async {
+  print(lineLength);
+}
+
+main() {
+  foo();
+  bar();
+  baz();
+  qux();
+}
diff --git a/tests/language/switch_case_warn_test.dart b/tests/language/switch_case_warn_test.dart
new file mode 100644
index 0000000..4447bd7
--- /dev/null
+++ b/tests/language/switch_case_warn_test.dart
@@ -0,0 +1,205 @@
+// Copyright (c) 2016, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+// Test switch statement.
+
+// Tests some switch-case statements blocks that should and should not
+// cause static warnings.
+// This test is not testing runtime behavior, only static warnings.
+
+// None of the cases blocks should cause a warning.
+void testSwitch(int x) {
+  // Catch all control flow leaving the switch.
+  // Run switch in catch clause to check rethrow.
+  TRY: try {
+    throw x;
+  } catch (x) {
+    // Add loop as break/continue target.
+    LOOP: do {
+      switch (x) {
+        case 0:
+        case 1:
+          nop(x);
+          break;  // Break switch.
+        case 2:
+          nop(x);
+          break LOOP;
+        case 3:
+          nop(x);
+          continue;  // Continue loop.
+        case 4:
+          nop(x);
+          continue LOOP;
+        case 5:
+          nop(x);
+          continue LAST;
+        // Avoid warning for "return;"" and "return e;" in same function.
+        case 6:      /// retnon: ok
+          nop(x);    /// retnon: continued
+          return;    /// retnon: continued
+        case 7:      /// retval: ok
+          nop(x);    /// retval: continued
+          return x;  /// retval: continued
+        case 8:
+          nop(x);
+          throw x;
+        case 9:
+          nop(x);
+          rethrow;
+        case 10:
+        case 11: {
+          nop(x);
+          break;  // Break switch.
+        }
+        case 12: {
+          nop(x);
+          break LOOP;
+        }
+        case 13: {
+          nop(x);
+          continue;  // Continue loop.
+        }
+        case 14: {
+          nop(x);
+          continue LOOP;
+        }
+        case 15: {
+          nop(x);
+          continue LAST;
+        }
+        case 16: {   /// retnon: continued
+          nop(x);    /// retnon: continued
+          return;    /// retnon: continued
+        }            /// retnon: continued
+        case 17: {   /// retval: continued
+          nop(x);    /// retval: continued
+          return x;  /// retval: continued
+        }            /// retval: continued
+        case 18: {
+          nop(x);
+          throw x;
+        }
+        case 19: {
+          nop(x);
+          rethrow;
+        }
+        LAST:
+        case 20: {
+          nop(x);
+          // Fallthrough allowed on last statements.
+        }
+      }
+    } while (false);
+  } finally {
+    // Catch all control flow leaving the switch and ignore it.
+    // Use break instead of return to avoid warning for `return` and `return e`
+    // in same function.
+    break TRY;
+  }
+}
+
+// All these switch cases should cause warnings.
+void testSwitchWarn(x) {
+  // Catch all control flow from the switch and ignore it.
+  TRY: try {
+    throw 0;
+  } catch (e) {
+    // Wrap in loop as target for continue/break.
+    LOOP: do {
+      switch (x) {
+        case 0:                          /// 01: static type warning
+        case 1: {                        /// 01: continued
+          {                              /// 01: continued
+            nop(x);                      /// 01: continued
+            break;  // Break switch.     /// 01: continued
+          }                              /// 01: continued
+        }                                /// 01: continued
+        case 2: {                        /// 02: static type warning
+          {                              /// 02: continued
+            nop(x);                      /// 02: continued
+            break LOOP;                  /// 02: continued
+          }                              /// 02: continued
+        }                                /// 02: continued
+        case 3: {                        /// 03: static type warning
+          {                              /// 03: continued
+            nop(x);                      /// 03: continued
+            continue;  // Continue loop. /// 03: continued
+          }                              /// 03: continued
+        }                                /// 03: continued
+        case 4: {                        /// 04: static type warning
+          {                              /// 04: continued
+            nop(x);                      /// 04: continued
+            continue LOOP;               /// 04: continued
+          }                              /// 04: continued
+        }                                /// 04: continued
+        case 5: {                        /// 05: static type warning
+          {                              /// 05: continued
+            nop(x);                      /// 05: continued
+            continue LAST;               /// 05: continued
+          }                              /// 05: continued
+        }                                /// 05: continued
+        case 6: {                        /// 06: static type warning
+          {                              /// 06: continued
+            nop(x);                      /// 06: continued
+            return;                      /// 06: continued
+          }                              /// 06: continued
+        }                                /// 06: continued
+        case 7: {                        /// 07: static type warning
+          {                              /// 07: continued
+            nop(x);                      /// 07: continued
+            return x;                    /// 07: continued
+          }                              /// 07: continued
+        }                                /// 07: continued
+        case 8: {                        /// 08: static type warning
+          {                              /// 08: continued
+            nop(x);                      /// 08: continued
+            throw x;                     /// 08: continued
+          }                              /// 08: continued
+        }                                /// 08: continued
+        case 9: {                        /// 09: static type warning
+          {                              /// 09: continued
+            nop(x);                      /// 09: continued
+            rethrow;                     /// 09: continued
+          }                              /// 09: continued
+        }                                /// 09: continued
+        case 10:                         /// 10: static type warning
+          while (true) break;            /// 10: continued
+        case 11:                         /// 11: static type warning
+          do break; while (true);        /// 11: continued
+        case 12:                         /// 12: static type warning
+          for (;;) break;                /// 12: continued
+        case 13:                         /// 13: static type warning
+          for (var _ in []) break;       /// 13: continued
+        case 14:                         /// 14: static type warning
+          if (x) break; else break;      /// 14: continued
+        case 15:                         /// 15: static type warning
+          (throw 0);                     /// 15: continued
+        case 16:                         /// 16: static type warning
+          nop(x);      // fallthrough.   /// 16: continued
+        case 17:                         /// 17: static type warning
+          L: break;                      /// 17: continued
+        LAST:
+        case 99:
+          // Last case can't cause static warning.
+      }
+    } while (false);
+  } finally {
+    // Catch all control flow leaving the switch and ignore it.
+    // Use break instead of return to avoid warning for `return` and `return e`
+    // in same function.
+    break TRY;
+  }
+}
+
+main() {
+  // Ensure that all the cases compile and run (even if they might throw).
+  for (int i = 0; i <= 20; i++) {
+    testSwitch(i);  // Just make sure it runs.
+  }
+  for (int i = 0; i <= 18; i++) {
+    testSwitchWarn(i);
+  }
+}
+
+/// Don't make it obvious that a switch case isn't doing anything.
+void nop(x) {}
diff --git a/tests/language/vm/regress_27671_other.dart b/tests/language/vm/regress_27671_other.dart
new file mode 100644
index 0000000..a180d18
--- /dev/null
+++ b/tests/language/vm/regress_27671_other.dart
@@ -0,0 +1,10 @@
+// Copyright (c) 2016, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'regress_27671_test.dart';
+
+@AlwaysInline
+void check(f, x) {
+  assert(f(x) && true);
+}
diff --git a/tests/language/vm/regress_27671_test.dart b/tests/language/vm/regress_27671_test.dart
new file mode 100644
index 0000000..fa258da
--- /dev/null
+++ b/tests/language/vm/regress_27671_test.dart
@@ -0,0 +1,32 @@
+// Copyright (c) 2016, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+//
+// VMOptions=--enable_asserts --enable-inlining-annotations --optimization-counter-threshold=10 --no-background-compilation
+
+import 'package:expect/expect.dart';
+import 'regress_27671_other.dart';
+
+const AlwaysInline = "AlwaysInline";
+const NeverInline = "NeverInline";
+
+@AlwaysInline
+bounce(x) {
+  for (int i = 0; i < 10; i++) {
+    check(f, x);
+  }
+}
+
+@AlwaysInline
+bool f(y) => y > 0;
+
+main() {
+  for (int i = 0; i < 100; i++) {
+    bounce(1);
+  }
+  try {
+    bounce(-1);
+  } catch (e) {
+    Expect.isTrue(e.toString().contains('f(x) && true'));
+  }
+}
diff --git a/tests/standalone/packages_file_test.dart b/tests/standalone/packages_file_test.dart
index d41e46b..b36bc83 100644
--- a/tests/standalone/packages_file_test.dart
+++ b/tests/standalone/packages_file_test.dart
@@ -209,7 +209,7 @@
 // * A variable defined in a library loaded using a `package:` URI.
 //
 // The configurations all have URIs as `root`, `config` and `mainFile` strings,
-// have empty argument lists and `mainFile` points to the the `main.dart` file.
+// have empty argument lists and `mainFile` points to the `main.dart` file.
 void createConfigurations() {
   add(String description, String mainDir, {String root, String config,
       Map file, Map http, Map expect}) {
diff --git a/third_party/tcmalloc/BUILD.gn b/third_party/tcmalloc/BUILD.gn
index ec423be..8568429 100644
--- a/third_party/tcmalloc/BUILD.gn
+++ b/third_party/tcmalloc/BUILD.gn
@@ -30,9 +30,7 @@
     "-fno-builtin-pvalloc",
   ]
   if (is_clang) {
-    cflags += [
-      "-Wno-unused-const-variable",
-    ]
+    cflags += [ "-Wno-unused-const-variable" ]
   }
 }
 
@@ -62,19 +60,18 @@
 }
 
 tcmalloc_sources_list = exec_script("../../tools/gypi_to_gn.py",
-                              [rebase_path("tcmalloc_sources.gypi")],
-                              "scope",
-                              ["tcmalloc_sources.gypi"])
-
+                                    [ rebase_path("tcmalloc_sources.gypi") ],
+                                    "scope",
+                                    [ "tcmalloc_sources.gypi" ])
 
 source_set("tcmalloc") {
   configs -= [ "//build/config/compiler:chromium_code" ]
   configs += [ ":internal_config" ]
 
-  public_configs = [":link_config"]
+  public_configs = [ ":link_config" ]
 
   deps = [
-    ":dynamic_annotations"
+    ":dynamic_annotations",
   ]
 
   include_dirs = [
@@ -87,15 +84,14 @@
   defines = [
     "ENABLE_EMERGENCY_MALLOC",
     "NO_HEAP_CHECK",
+
     # Disable debug even in a Dart Debug build. It is too slow.
     "NDEBUG",
   ]
 
   # Disable stack sampling for heap profiling in Product builds.
   if (is_product) {
-    defines += [
-      "NO_TCMALLOC_SAMPLES",
-    ]
+    defines += [ "NO_TCMALLOC_SAMPLES" ]
   }
 
   cflags = [
@@ -106,25 +102,25 @@
   ]
 
   if (!is_clang && current_cpu == "x86") {
-    cflags += [
-      "-Wno-format"
-    ]
+    cflags += [ "-Wno-format" ]
   }
 
   set_sources_assignment_filter([
-    # No debug allocator.
-    "gperftools/src/debugallocation.cc",
-    # Not needed when using emergency malloc.
-    "gperftools/src/fake_stacktrace_scope.cc",
-    # Not using the cpuprofiler
-    "gperftools/src/base/thread_lister.c",
-    "gperftools/src/base/thread_lister.h",
-    "gperftools/src/profile-handler.cc",
-    "gperftools/src/profile-handler.h",
-    "gperftools/src/profiledata.cc",
-    "gperftools/src/profiledata.h",
-    "gperftools/src/profiler.cc",
-  ])
+                                  # No debug allocator.
+                                  "gperftools/src/debugallocation.cc",
+
+                                  # Not needed when using emergency malloc.
+                                  "gperftools/src/fake_stacktrace_scope.cc",
+
+                                  # Not using the cpuprofiler
+                                  "gperftools/src/base/thread_lister.c",
+                                  "gperftools/src/base/thread_lister.h",
+                                  "gperftools/src/profile-handler.cc",
+                                  "gperftools/src/profile-handler.h",
+                                  "gperftools/src/profiledata.cc",
+                                  "gperftools/src/profiledata.h",
+                                  "gperftools/src/profiler.cc",
+                                ])
 
   sources = tcmalloc_sources_list.sources
 }
diff --git a/tools/VERSION b/tools/VERSION
index 8674007..d489bbc 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -28,5 +28,5 @@
 MAJOR 1
 MINOR 21
 PATCH 0
-PRERELEASE 2
+PRERELEASE 3
 PRERELEASE_PATCH 0
diff --git a/tools/build.py b/tools/build.py
index 4f5d2e1..0858c27 100755
--- a/tools/build.py
+++ b/tools/build.py
@@ -408,6 +408,7 @@
     '-m', mode,
     '-a', arch,
     '--os', gn_os,
+    '--check',
     '-v',
   ]
   process = subprocess.Popen(gn_command)
diff --git a/tools/dom/src/Dimension.dart b/tools/dom/src/Dimension.dart
index 96014c3..6286ae9 100644
--- a/tools/dom/src/Dimension.dart
+++ b/tools/dom/src/Dimension.dart
@@ -43,7 +43,7 @@
   /**
    * Set this CSS Dimension to the specified number of x-heights.
    *
-   * One ex is equal to the the x-height of a font's baseline to its mean line,
+   * One ex is equal to the x-height of a font's baseline to its mean line,
    * generally the height of the letter "x" in the font, which is usually about
    * half the font-size.
    */
diff --git a/tools/gn.py b/tools/gn.py
index 2f8d664..6155b8d 100755
--- a/tools/gn.py
+++ b/tools/gn.py
@@ -91,6 +91,9 @@
   gn_args['dart_use_tcmalloc'] = (gn_args['target_os'] == 'linux'
                                   and not args.asan)
 
+  if gn_args['target_cpu'].startswith('arm'):
+    gn_args['arm_float_abi'] = 'hard'
+
   gn_args['is_debug'] = mode == 'debug'
   gn_args['is_release'] = mode == 'release'
   gn_args['is_product'] = mode == 'product'
diff --git a/tools/list_dart_files.py b/tools/list_dart_files.py
old mode 100644
new mode 100755
diff --git a/tools/patch_sdk.dart b/tools/patch_sdk.dart
new file mode 100644
index 0000000..3bb9965
--- /dev/null
+++ b/tools/patch_sdk.dart
@@ -0,0 +1,536 @@
+#!/usr/bin/env dart
+// Copyright (c) 2015, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+/// Command line tool to merge the SDK libraries and our patch files.
+/// This is currently designed as an offline tool, but we could automate it.
+
+import 'dart:io';
+import 'dart:math' as math;
+
+import 'package:analyzer/analyzer.dart';
+import 'package:analyzer/src/generated/sdk.dart';
+import 'package:path/path.dart' as path;
+
+void main(List<String> argv) {
+  var base = path.fromUri(Platform.script);
+  var dartDir = path.dirname(path.dirname(path.absolute(base)));
+
+  if (argv.length != 4 ||
+      !argv.isEmpty && argv.first != 'vm' && argv.first != 'ddc') {
+    var self = path.relative(base);
+    print('Usage: $self MODE SDK_DIR PATCH_DIR OUTPUT_DIR');
+    print('MODE must be one of ddc or vm.');
+
+    var toolDir = path.relative(path.dirname(base));
+    var sdkExample = path.join(toolDir, 'input_sdk');
+    var patchExample = path.join(sdkExample, 'patch');
+    var outExample =
+        path.relative(path.normalize(path.join('gen', 'patched_sdk')));
+    print('For example:');
+    print('\$ $self ddc $sdkExample $patchExample $outExample');
+
+    var repositoryDir = path.relative(path.dirname(path.dirname(base)));
+    sdkExample = path.relative(path.join(repositoryDir, 'sdk'));
+    patchExample = path.relative(path.join(repositoryDir, 'out', 'DebugX64',
+                                           'obj', 'gen', 'patch'));
+    outExample = path.relative(path.join(repositoryDir, 'out', 'DebugX64',
+                                         'obj', 'gen', 'patched_sdk'));
+    print('or:');
+    print('\$ $self vm $sdkExample $patchExample $outExample');
+
+    exit(1);
+  }
+
+  var mode = argv[0];
+  var input = argv[1];
+  var sdkLibIn = path.join(input, 'lib');
+  var patchIn = argv[2];
+  var sdkOut = path.join(argv[3], 'lib');
+
+  var privateIn = path.join(input, 'private');
+  var INTERNAL_PATH = '_internal/compiler/js_lib/';
+
+  // Copy and patch libraries.dart and version
+  var libContents = new File(path.join(sdkLibIn, '_internal',
+      'sdk_library_metadata', 'lib', 'libraries.dart')).readAsStringSync();
+  var patchedLibContents = libContents;
+  if (mode == 'vm') {
+    libContents = libContents.replaceAll(
+        ' libraries = const {',
+        ''' libraries = const {
+
+  "_builtin": const LibraryInfo(
+      "_builtin/_builtin.dart",
+      categories: "Client,Server",
+      implementation: true,
+      documented: false,
+      platforms: VM_PLATFORM),
+
+  "profiler": const LibraryInfo(
+      "profiler/profiler.dart",
+      maturity: Maturity.DEPRECATED,
+      documented: false),
+
+  "_vmservice": const LibraryInfo(
+      "vmservice/vmservice.dart",
+      implementation: true,
+      documented: false,
+      platforms: VM_PLATFORM),
+
+  "vmservice_io": const LibraryInfo(
+      "vmservice_io/vmservice_io.dart",
+      implementation: true,
+      documented: false,
+      platforms: VM_PLATFORM),
+
+''');
+  }
+  _writeSync(
+      path.join(
+          sdkOut, '_internal', 'sdk_library_metadata', 'lib', 'libraries.dart'),
+      libContents);
+  if (mode == 'ddc') {
+    _writeSync(path.join(sdkOut, '..', 'version'),
+        new File(path.join(sdkLibIn, '..', 'version')).readAsStringSync());
+  }
+
+  // Parse libraries.dart
+  var sdkLibraries = _getSdkLibraries(libContents);
+
+  // Enumerate core libraries and apply patches
+  for (SdkLibrary library in sdkLibraries) {
+    // TODO(jmesserly): analyzer does not handle the default case of
+    // "both platforms" correctly, and treats it as being supported on neither.
+    // So instead we skip explicitly marked as either VM or dart2js libs.
+    if (mode == 'ddc' ? libary.isVmLibrary : library.isDart2JsLibrary) {
+      continue;
+    }
+
+    var libraryOut = path.join(sdkLibIn, library.path);
+    var libraryIn;
+    if (mode == 'vm' && library.path.contains('typed_data.dart')) {
+      // dart:typed_data is unlike the other libraries in the SDK. The VM does
+      // not apply a patch to the base SDK implementation of the library.
+      // Instead, the VM provides a replacement implementation and ignores the
+      // sources in the SDK.
+      libraryIn =
+          path.join(dartDir, 'runtime', 'lib', 'typed_data.dart');
+    } else if (mode == 'ddc' && library.path.contains(INTERNAL_PATH)) {
+      libraryIn =
+          path.join(privateIn, library.path.replaceAll(INTERNAL_PATH, ''));
+    } else {
+      libraryIn = libraryOut;
+    }
+
+    var libraryFile = new File(libraryIn);
+    if (libraryFile.existsSync()) {
+      var outPaths = <String>[libraryOut];
+      var libraryContents = libraryFile.readAsStringSync();
+
+      int inputModifyTime =
+          libraryFile.lastModifiedSync().millisecondsSinceEpoch;
+      var partFiles = <File>[];
+      for (var part in parseDirectives(libraryContents).directives) {
+        if (part is PartDirective) {
+          var partPath = part.uri.stringValue;
+          outPaths.add(path.join(path.dirname(libraryOut), partPath));
+
+          var partFile = new File(path.join(path.dirname(libraryIn), partPath));
+          partFiles.add(partFile);
+          inputModifyTime = math.max(inputModifyTime,
+              partFile.lastModifiedSync().millisecondsSinceEpoch);
+        }
+      }
+
+      // See if we can find a patch file.
+      var patchPath = path.join(
+          patchIn, path.basenameWithoutExtension(libraryIn) + '_patch.dart');
+
+      var patchFile = new File(patchPath);
+      bool patchExists = patchFile.existsSync();
+      if (patchExists) {
+        inputModifyTime = math.max(inputModifyTime,
+            patchFile.lastModifiedSync().millisecondsSinceEpoch);
+      }
+
+      // Compute output paths
+      outPaths = outPaths
+          .map((p) => path.join(sdkOut, path.relative(p, from: sdkLibIn)))
+          .toList();
+
+      // Compare output modify time with input modify time.
+      bool needsUpdate = false;
+      for (var outPath in outPaths) {
+        var outFile = new File(outPath);
+        if (!outFile.existsSync() ||
+            outFile.lastModifiedSync().millisecondsSinceEpoch <
+                inputModifyTime) {
+          needsUpdate = true;
+          break;
+        }
+      }
+
+      if (needsUpdate) {
+        var contents = <String>[libraryContents];
+        contents.addAll(partFiles.map((f) => f.readAsStringSync()));
+        if (patchExists) {
+          var patchContents = patchFile.readAsStringSync();
+          contents = _patchLibrary(
+              patchFile.path, contents, patchContents);
+        }
+
+        for (var i = 0; i < outPaths.length; i++) {
+          if (path.basename(outPaths[i]) == 'internal.dart') {
+            contents[i] += '''
+
+/// Marks a function as an external implementation ("native" in the Dart VM).
+///
+/// Provides a backend-specific String that can be used to identify the
+/// function's implementation
+class ExternalName {
+  final String name;
+  const ExternalName(this.name);
+}
+''';
+          }
+
+          _writeSync(outPaths[i], contents[i]);
+        }
+      }
+    }
+  }
+  if (mode == 'vm') {
+
+    for (var tuple in [['_builtin', 'builtin.dart']]) {
+      var vmLibrary = tuple[0];
+      var dartFile = tuple[1];
+
+      // The "dart:_builtin" library is only available for the DartVM.
+      var builtinLibraryIn  = path.join(dartDir, 'runtime', 'bin', dartFile);
+      var builtinLibraryOut = path.join(sdkOut, vmLibrary, '${vmLibrary}.dart');
+      _writeSync(builtinLibraryOut, new File(builtinLibraryIn).readAsStringSync());
+    }
+
+    for (var file in ['loader.dart', 'server.dart', 'vmservice_io.dart']) {
+      var libraryIn  = path.join(dartDir, 'runtime', 'bin', 'vmservice', file);
+      var libraryOut = path.join(sdkOut, 'vmservice_io', file);
+      _writeSync(libraryOut, new File(libraryIn).readAsStringSync());
+    }
+  }
+}
+
+/// Writes a file, creating the directory if needed.
+void _writeSync(String filePath, String contents) {
+  var outDir = new Directory(path.dirname(filePath));
+  if (!outDir.existsSync()) outDir.createSync(recursive: true);
+
+  new File(filePath).writeAsStringSync(contents);
+}
+
+/// Merges dart:* library code with code from *_patch.dart file.
+///
+/// Takes a list of the library's parts contents, with the main library contents
+/// first in the list, and the contents of the patch file.
+///
+/// The result will have `@patch` implementations merged into the correct place
+/// (e.g. the class or top-level function declaration) and all other
+/// declarations introduced by the patch will be placed into the main library
+/// file.
+///
+/// This is purely a syntactic transformation. Unlike dart2js patch files, there
+/// is no semantic meaning given to the *_patch files, and they do not magically
+/// get their own library scope, etc.
+///
+/// Editorializing: the dart2js approach requires a Dart front end such as
+/// package:analyzer to semantically model a feature beyond what is specified
+/// in the Dart language. Since this feature is only for the convenience of
+/// writing the dart:* libraries, and not a tool given to Dart developers, it
+/// seems like a non-ideal situation. Instead we keep the preprocessing simple.
+List<String> _patchLibrary(String name,
+                           List<String> partsContents,
+                           String patchContents) {
+  var results = <StringEditBuffer>[];
+
+  // Parse the patch first. We'll need to extract bits of this as we go through
+  // the other files.
+  final patchFinder = new PatchFinder.parseAndVisit(name, patchContents);
+
+  // Merge `external` declarations with the corresponding `@patch` code.
+  for (var partContent in partsContents) {
+    var partEdits = new StringEditBuffer(partContent);
+    var partUnit = parseCompilationUnit(partContent);
+    partUnit.accept(new PatchApplier(partEdits, patchFinder));
+    results.add(partEdits);
+  }
+  return new List<String>.from(results.map((e) => e.toString()));
+}
+
+/// Merge `@patch` declarations into `external` declarations.
+class PatchApplier extends GeneralizingAstVisitor {
+  final StringEditBuffer edits;
+  final PatchFinder patch;
+
+  bool _isLibrary = true; // until proven otherwise.
+
+  PatchApplier(this.edits, this.patch);
+
+  @override
+  visitCompilationUnit(CompilationUnit node) {
+    super.visitCompilationUnit(node);
+    if (_isLibrary) _mergeUnpatched(node);
+  }
+
+  void _merge(AstNode node, int pos) {
+    var code = patch.contents.substring(node.offset, node.end);
+    edits.insert(pos, '\n' + code);
+  }
+
+  /// Merges directives and declarations that are not `@patch` into the library.
+  void _mergeUnpatched(CompilationUnit unit) {
+    // Merge imports from the patch
+    // TODO(jmesserly): remove duplicate imports
+
+    // To patch a library, we must have a library directive
+    var libDir = unit.directives.first as LibraryDirective;
+    int importPos = unit.directives
+        .lastWhere((d) => d is ImportDirective, orElse: () => libDir)
+        .end;
+    for (var d in patch.unit.directives.where((d) => d is ImportDirective)) {
+      _merge(d, importPos);
+    }
+
+    int partPos = unit.directives.last.end;
+    for (var d in patch.unit.directives.where((d) => d is PartDirective)) {
+      _merge(d, partPos);
+    }
+
+    // Merge declarations from the patch
+    int declPos = edits.original.length;
+    for (var d in patch.mergeDeclarations) {
+      _merge(d, declPos);
+    }
+  }
+
+  @override
+  visitPartOfDirective(PartOfDirective node) {
+    _isLibrary = false;
+  }
+
+  @override
+  visitFunctionDeclaration(FunctionDeclaration node) {
+    _maybePatch(node);
+  }
+
+  /// Merge patches and extensions into the class
+  @override
+  visitClassDeclaration(ClassDeclaration node) {
+    node.members.forEach(_maybePatch);
+
+    var mergeMembers = patch.mergeMembers[_qualifiedName(node)];
+    if (mergeMembers == null) return;
+
+    // Merge members from the patch
+    var pos = node.members.last.end;
+    for (var member in mergeMembers) {
+      var code = patch.contents.substring(member.offset, member.end);
+      edits.insert(pos, '\n\n  ' + code);
+    }
+  }
+
+  void _maybePatch(AstNode node) {
+    if (node is FieldDeclaration) return;
+
+    var externalKeyword = (node as dynamic).externalKeyword;
+    if (externalKeyword == null) return;
+
+    var name = _qualifiedName(node);
+    var patchNode = patch.patches[name];
+    if (patchNode == null) {
+      print('warning: patch not found for $name: $node');
+      return;
+    }
+
+    Annotation patchMeta = patchNode.metadata.lastWhere(_isPatchAnnotation);
+    int start = patchMeta.endToken.next.offset;
+    var code = patch.contents.substring(start, patchNode.end);
+
+    // For some node like static fields, the node's offset doesn't include
+    // the external keyword. Also starting from the keyword lets us preserve
+    // documentation comments.
+    edits.replace(externalKeyword.offset, node.end, code);
+  }
+}
+
+class PatchFinder extends GeneralizingAstVisitor {
+  final String contents;
+  final CompilationUnit unit;
+
+  final Map patches = <String, Declaration>{};
+  final Map mergeMembers = <String, List<ClassMember>>{};
+  final List mergeDeclarations = <CompilationUnitMember>[];
+
+  PatchFinder.parseAndVisit(String name, String contents)
+      : contents = contents,
+        unit = parseCompilationUnit(contents, name: name) {
+    visitCompilationUnit(unit);
+  }
+
+  @override
+  visitCompilationUnitMember(CompilationUnitMember node) {
+    mergeDeclarations.add(node);
+  }
+
+  @override
+  visitClassDeclaration(ClassDeclaration node) {
+    if (_isPatch(node)) {
+      var members = <ClassMember>[];
+      for (var member in node.members) {
+        if (_isPatch(member)) {
+          patches[_qualifiedName(member)] = member;
+        } else {
+          members.add(member);
+        }
+      }
+      if (members.isNotEmpty) {
+        mergeMembers[_qualifiedName(node)] = members;
+      }
+    } else {
+      mergeDeclarations.add(node);
+    }
+  }
+
+  @override
+  visitFunctionDeclaration(FunctionDeclaration node) {
+    if (_isPatch(node)) {
+      patches[_qualifiedName(node)] = node;
+    } else {
+      mergeDeclarations.add(node);
+    }
+  }
+
+  @override
+  visitFunctionBody(node) {} // skip method bodies
+}
+
+String _qualifiedName(Declaration node) {
+  var parent = node.parent;
+  var className = '';
+  if (parent is ClassDeclaration) {
+    className = parent.name.name + '.';
+  }
+  var name = (node as dynamic).name;
+  name = (name != null ? name.name : '');
+
+  var accessor = '';
+  if (node is MethodDeclaration) {
+    if (node.isGetter) accessor = 'get:';
+    else if (node.isSetter) accessor = 'set:';
+  }
+  return className + accessor + name;
+}
+
+bool _isPatch(AnnotatedNode node) => node.metadata.any(_isPatchAnnotation);
+
+bool _isPatchAnnotation(Annotation m) =>
+    m.name.name == 'patch' && m.constructorName == null && m.arguments == null;
+
+/// Editable string buffer.
+///
+/// Applies a series of edits (insertions, removals, replacements) using
+/// original location information, and composes them into the edited string.
+///
+/// For example, starting with a parsed AST with original source locations,
+/// this type allows edits to be made without regards to other edits.
+class StringEditBuffer {
+  final String original;
+  final _edits = <_StringEdit>[];
+
+  /// Creates a new transaction.
+  StringEditBuffer(this.original);
+
+  bool get hasEdits => _edits.length > 0;
+
+  /// Edit the original text, replacing text on the range [begin] and
+  /// exclusive [end] with the [replacement] string.
+  void replace(int begin, int end, String replacement) {
+    _edits.add(new _StringEdit(begin, end, replacement));
+  }
+
+  /// Insert [string] at [offset].
+  /// Equivalent to `replace(offset, offset, string)`.
+  void insert(int offset, String string) => replace(offset, offset, string);
+
+  /// Remove text from the range [begin] to exclusive [end].
+  /// Equivalent to `replace(begin, end, '')`.
+  void remove(int begin, int end) => replace(begin, end, '');
+
+  /// Applies all pending [edit]s and returns a new string.
+  ///
+  /// This method is non-destructive: it does not discard existing edits or
+  /// change the [original] string. Further edits can be added and this method
+  /// can be called again.
+  ///
+  /// Throws [UnsupportedError] if the edits were overlapping. If no edits were
+  /// made, the original string will be returned.
+  String toString() {
+    var sb = new StringBuffer();
+    if (_edits.length == 0) return original;
+
+    // Sort edits by start location.
+    _edits.sort();
+
+    int consumed = 0;
+    for (var edit in _edits) {
+      if (consumed > edit.begin) {
+        sb = new StringBuffer();
+        sb.write('overlapping edits. Insert at offset ');
+        sb.write(edit.begin);
+        sb.write(' but have consumed ');
+        sb.write(consumed);
+        sb.write(' input characters. List of edits:');
+        for (var e in _edits) {
+          sb.write('\n    ');
+          sb.write(e);
+        }
+        throw new UnsupportedError(sb.toString());
+      }
+
+      // Add characters from the original string between this edit and the last
+      // one, if any.
+      var betweenEdits = original.substring(consumed, edit.begin);
+      sb.write(betweenEdits);
+      sb.write(edit.replace);
+      consumed = edit.end;
+    }
+
+    // Add any text from the end of the original string that was not replaced.
+    sb.write(original.substring(consumed));
+    return sb.toString();
+  }
+}
+
+class _StringEdit implements Comparable<_StringEdit> {
+  final int begin;
+  final int end;
+  final String replace;
+
+  _StringEdit(this.begin, this.end, this.replace);
+
+  int get length => end - begin;
+
+  String toString() => '(Edit @ $begin,$end: "$replace")';
+
+  int compareTo(_StringEdit other) {
+    int diff = begin - other.begin;
+    if (diff != 0) return diff;
+    return end - other.end;
+  }
+}
+
+List<SdkLibrary> _getSdkLibraries(String contents) {
+  var libraryBuilder = new SdkLibrariesReader_LibraryBuilder(true);
+  parseCompilationUnit(contents).accept(libraryBuilder);
+  return libraryBuilder.librariesMap.sdkLibraries;
+}
diff --git a/tools/patch_sdk.py b/tools/patch_sdk.py
new file mode 100755
index 0000000..faa2bd0
--- /dev/null
+++ b/tools/patch_sdk.py
@@ -0,0 +1,31 @@
+#!/usr/bin/env python
+# Copyright (c) 2016, the Dart project authors.  Please see the AUTHORS file
+# for details. All rights reserved. Use of this source code is governed by a
+# BSD-style license that can be found in the LICENSE file.
+
+import argparse
+import os
+import subprocess
+import sys
+import utils
+
+usage = """patch_sdk.py [options]"""
+
+def BuildArguments():
+  result = argparse.ArgumentParser(usage=usage)
+  result.add_argument("--dart-executable", help="dart executable", default=None)
+  return result
+
+def main():
+  # Parse the options.
+  parser = BuildArguments()
+  (options, args) = parser.parse_known_args()
+  if options.dart_executable is not None:
+    options.dart_executable = os.path.abspath(options.dart_executable)
+  else:
+    options.dart_executable = os.path.join(utils.CheckedInSdkPath(), 'bin', 'dart')
+  dart_file = os.path.join(os.path.dirname(__file__), 'patch_sdk.dart')
+  subprocess.check_call([options.dart_executable, dart_file] + args);
+
+if __name__ == '__main__':
+  main()
diff --git a/tools/testing/dart/co19_test_config.dart b/tools/testing/dart/co19_test_config.dart
index c331f93..9dc55fa 100644
--- a/tools/testing/dart/co19_test_config.dart
+++ b/tools/testing/dart/co19_test_config.dart
@@ -17,7 +17,8 @@
           "tests/co19/co19-analyzer2.status",
           "tests/co19/co19-runtime.status",
           "tests/co19/co19-dart2js.status",
-          "tests/co19/co19-dartium.status"
+          "tests/co19/co19-dartium.status",
+          "tests/co19/co19-kernel.status"
         ]);
 
   bool isTestFile(String filename) => _testRegExp.hasMatch(filename);
diff --git a/tools/testing/dart/compiler_configuration.dart b/tools/testing/dart/compiler_configuration.dart
index 49368ce..3613dcd 100644
--- a/tools/testing/dart/compiler_configuration.dart
+++ b/tools/testing/dart/compiler_configuration.dart
@@ -89,6 +89,17 @@
             arch: configuration['arch'],
             useBlobs: useBlobs,
             isAndroid: configuration['system'] == 'android');
+      case 'dartk':
+        return ComposedCompilerConfiguration.createDartKConfiguration(
+            isHostChecked: isHostChecked,
+            useSdk: useSdk);
+      case 'dartkp':
+        return ComposedCompilerConfiguration.createDartKPConfiguration(
+            isHostChecked: isHostChecked,
+            arch: configuration['arch'],
+            useBlobs: useBlobs,
+            isAndroid: configuration['system'] == 'android',
+            useSdk: useSdk);
       case 'none':
         return new NoneCompilerConfiguration(
             isDebug: isDebug,
@@ -199,6 +210,184 @@
   }
 }
 
+/// The "dartk" compiler.
+class DartKCompilerConfiguration extends CompilerConfiguration {
+  DartKCompilerConfiguration({bool isHostChecked, bool useSdk})
+      : super._subclass(isHostChecked: isHostChecked, useSdk: useSdk);
+
+  @override
+  String computeCompilerPath(String buildDir) {
+    return 'third_party/pkg/kernel/bin/dartk.dart';
+  }
+
+  CompilationCommand computeCompilationCommand(
+      String outputFileName,
+      String buildDir,
+      CommandBuilder commandBuilder,
+      List arguments,
+      Map<String, String> environmentOverrides) {
+    var extraArguments = [
+      '--sdk',
+      '$buildDir/obj/gen/patched_sdk',
+      '--link',
+      '--target=vm',
+      '--out',
+      outputFileName
+    ];
+    return commandBuilder.getKernelCompilationCommand(
+        'dartk',
+        outputFileName,
+        true,
+        bootstrapDependencies(buildDir),
+        computeCompilerPath(buildDir),
+        []..addAll(arguments)..addAll(extraArguments),
+        environmentOverrides);
+  }
+
+  CommandArtifact computeCompilationArtifact(
+      String buildDir,
+      String tempDir,
+      CommandBuilder commandBuilder,
+      List arguments,
+      Map<String, String> environmentOverrides) {
+    return new CommandArtifact(<Command>[
+      this.computeCompilationCommand('$tempDir/out.dill', buildDir,
+          CommandBuilder.instance, arguments, environmentOverrides)
+    ], '$tempDir/out.dill', 'application/dart');
+  }
+}
+
+typedef List<String> CompilerArgumentsFunction(
+    List<String> globalArguments,
+    String previousCompilerOutput);
+
+class PipelineCommand {
+  final CompilerConfiguration compilerConfiguration;
+  final CompilerArgumentsFunction _argumentsFunction;
+
+  PipelineCommand._(this.compilerConfiguration, this._argumentsFunction);
+
+  factory PipelineCommand.runWithGlobalArguments(CompilerConfiguration conf) {
+    return new PipelineCommand._(conf, (List<String> globalArguments,
+                                        String previousOutput) {
+      assert(previousOutput == null);
+      return globalArguments;
+    });
+  }
+
+  factory PipelineCommand.runWithDartOrKernelFile(CompilerConfiguration conf) {
+    return new PipelineCommand._(conf, (List<String> globalArguments,
+                                        String previousOutput) {
+      var filtered = globalArguments
+        .where((String name) => name.endsWith('.dart') ||
+                                name.endsWith('.dill'))
+        .toList();
+      assert(filtered.length == 1);
+      return filtered;
+    });
+  }
+
+  factory PipelineCommand.runWithPreviousKernelOutput(
+      CompilerConfiguration conf) {
+    return new PipelineCommand._(conf, (List<String> globalArguments,
+                                        String previousOutput) {
+      assert(previousOutput.endsWith('.dill'));
+      return [previousOutput];
+    });
+  }
+
+  List<String> extractArguments(List<String> globalArguments,
+                                String previousOutput) {
+    return _argumentsFunction(globalArguments, previousOutput);
+  }
+}
+
+class ComposedCompilerConfiguration extends CompilerConfiguration {
+  final List<PipelineCommand> pipelineCommands;
+
+  ComposedCompilerConfiguration(this.pipelineCommands)
+      : super._subclass();
+
+  CommandArtifact computeCompilationArtifact(
+      String buildDir,
+      String tempDir,
+      CommandBuilder commandBuilder,
+      List globalArguments,
+      Map<String, String> environmentOverrides) {
+
+    List<Command> allCommands = [];
+
+    // The first compilation command is as usual.
+    var arguments = pipelineCommands[0].extractArguments(globalArguments, null);
+    CommandArtifact artifact =
+        pipelineCommands[0].compilerConfiguration.computeCompilationArtifact(
+          buildDir, tempDir, commandBuilder, arguments, environmentOverrides);
+    allCommands.addAll(artifact.commands);
+
+    // The following compilation commands are based on the output of the
+    // previous one.
+    for (int i = 1; i < pipelineCommands.length; i++) {
+      PipelineCommand pc = pipelineCommands[i];
+
+      arguments = pc.extractArguments(globalArguments, artifact.filename);
+      artifact = pc.compilerConfiguration.computeCompilationArtifact(
+          buildDir, tempDir, commandBuilder, arguments, environmentOverrides);
+
+      allCommands.addAll(artifact.commands);
+    }
+
+    return new CommandArtifact(
+        allCommands, artifact.filename, artifact.mimeType);
+  }
+
+  List<String> computeCompilerArguments(vmOptions, sharedOptions, args) {
+    // The result will be passed as an input to [extractArguments]
+    // (i.e. the arguments to the [PipelineCommand]).
+    return new List<String>.from(sharedOptions)..addAll(args);
+  }
+
+  List<String> computeRuntimeArguments(
+      RuntimeConfiguration runtimeConfiguration,
+      String buildDir,
+      TestInformation info,
+      List<String> vmOptions,
+      List<String> sharedOptions,
+      List<String> originalArguments,
+      CommandArtifact artifact) {
+    return <String>[artifact.filename];
+  }
+
+  static ComposedCompilerConfiguration createDartKPConfiguration(
+      {bool isHostChecked, String arch, bool useBlobs, bool isAndroid,
+       bool useSdk}) {
+    var nested = [];
+
+    // Compile with dartk.
+    nested.add(new PipelineCommand.runWithGlobalArguments(
+        new DartKCompilerConfiguration(isHostChecked: isHostChecked,
+            useSdk: useSdk)));
+
+    // Run the normal precompiler.
+    nested.add(new PipelineCommand.runWithPreviousKernelOutput(
+        new PrecompilerCompilerConfiguration(
+          arch: arch, useBlobs: useBlobs, isAndroid: isAndroid)));
+
+    return new ComposedCompilerConfiguration(nested);
+  }
+
+  static ComposedCompilerConfiguration createDartKConfiguration(
+      {bool isHostChecked, bool useSdk}) {
+    var nested = [];
+
+    // Compile with dartk.
+    nested.add(new PipelineCommand.runWithGlobalArguments(
+        new DartKCompilerConfiguration(isHostChecked: isHostChecked,
+            useSdk: useSdk)));
+
+    return new ComposedCompilerConfiguration(nested);
+  }
+}
+
 /// Common configuration for dart2js-based tools, such as, dart2js
 class Dart2xCompilerConfiguration extends CompilerConfiguration {
   final String moniker;
diff --git a/tools/testing/dart/test_configurations.dart b/tools/testing/dart/test_configurations.dart
index f82e62d..d9e7128 100644
--- a/tools/testing/dart/test_configurations.dart
+++ b/tools/testing/dart/test_configurations.dart
@@ -42,6 +42,7 @@
   new Path('tests/corelib'),
   new Path('tests/html'),
   new Path('tests/isolate'),
+  new Path('tests/kernel'),
   new Path('tests/language'),
   new Path('tests/lib'),
   new Path('tests/standalone'),
diff --git a/tools/testing/dart/test_options.dart b/tools/testing/dart/test_options.dart
index 255564a..bee1a2c 100644
--- a/tools/testing/dart/test_options.dart
+++ b/tools/testing/dart/test_options.dart
@@ -26,6 +26,7 @@
   'pkg',
   'analyze_library',
   'service',
+  'kernel',
   'observatory_ui'
 ];
 
@@ -75,9 +76,15 @@
 
    dart2app:
    dart2appjit: Compile the Dart code into an app snapshot before running test
-          (only valid with dart_app runtime)''',
+          (only valid with dart_app runtime)
+
+   dartk: Compile the Dart source into Kernel before running test.
+
+   dartkp: Compiler the Dart source into Kernel and then Kernel into AOT
+   snapshot before running the test.''',
           ['-c', '--compiler'],
-          ['none', 'precompiler', 'dart2js', 'dart2analyzer', 'dart2app', 'dart2appjit'],
+          ['none', 'precompiler', 'dart2js', 'dart2analyzer', 'dart2app',
+           'dart2appjit', 'dartk', 'dartkp'],
           'none'),
       // TODO(antonm): fix the option drt.
       new _TestOptionSpecification(
@@ -677,6 +684,12 @@
       case 'precompiler':
         validRuntimes = const ['dart_precompiled'];
         break;
+      case 'dartk':
+        validRuntimes = const ['vm'];
+        break;
+      case 'dartkp':
+        validRuntimes = const ['dart_precompiled'];
+        break;
       case 'none':
         validRuntimes = const [
           'vm',
@@ -838,9 +851,9 @@
     if (configuration['package_root'] == null &&
         configuration['packages'] == null) {
       configuration['packages'] =
-        TestUtils.dartDirUri.resolve('.packages').toFilePath();     
+        TestUtils.dartDirUri.resolve('.packages').toFilePath();
     }
-    
+
     // Expand the architectures.
     if (configuration['arch'].contains(',')) {
       return _expandHelper('arch', configuration);
diff --git a/tools/testing/dart/test_runner.dart b/tools/testing/dart/test_runner.dart
index 00a2ebb..7b1e596 100644
--- a/tools/testing/dart/test_runner.dart
+++ b/tools/testing/dart/test_runner.dart
@@ -221,6 +221,20 @@
       deepJsonCompare(_bootstrapDependencies, other._bootstrapDependencies);
 }
 
+class KernelCompilationCommand extends CompilationCommand {
+  KernelCompilationCommand._(
+      String displayName,
+      String outputFile,
+      bool neverSkipCompilation,
+      List<Uri> bootstrapDependencies,
+      String executable,
+      List<String> arguments,
+      Map<String, String> environmentOverrides)
+      : super._(displayName, outputFile, neverSkipCompilation,
+                bootstrapDependencies, executable, arguments,
+                environmentOverrides);
+}
+
 /// This is just a Pair(String, Map) class with hashCode and operator ==
 class AddFlagsKey {
   final String flags;
@@ -650,6 +664,25 @@
     return _getUniqueCommand(command);
   }
 
+  CompilationCommand getKernelCompilationCommand(
+      String displayName,
+      outputFile,
+      neverSkipCompilation,
+      List<Uri> bootstrapDependencies,
+      String executable,
+      List<String> arguments,
+      Map<String, String> environment) {
+    var command = new KernelCompilationCommand._(
+        displayName,
+        outputFile,
+        neverSkipCompilation,
+        bootstrapDependencies,
+        executable,
+        arguments,
+        environment);
+    return _getUniqueCommand(command);
+  }
+
   AnalysisCommand getAnalysisCommand(
       String displayName, executable, arguments, environmentOverrides,
       {String flavor: 'dart2analyzer'}) {
@@ -1609,6 +1642,29 @@
   }
 }
 
+class KernelCompilationCommandOutputImpl extends CompilationCommandOutputImpl {
+  KernelCompilationCommandOutputImpl(
+      Command command, int exitCode, bool timedOut,
+      List<int> stdout, List<int> stderr,
+      Duration time, bool compilationSkipped)
+      : super(command, exitCode, timedOut, stdout, stderr, time,
+              compilationSkipped);
+
+  bool get canRunDependendCommands {
+    // See [BatchRunnerProcess]: 0 means success, 1 means compile-time error.
+    // TODO(asgerf): When the frontend supports it, continue running even if
+    //   there were compile-time errors. See kernel_sdk issue #18.
+    return !hasCrashed && !timedOut && exitCode == 0;
+  }
+
+  // If the compiler was able to produce a Kernel IR file we want to run the
+  // result on the Dart VM.  We therefore mark the [KernelCompilationCommand] as
+  // successful.
+  // => This ensures we test that the DartVM produces correct CompileTime errors
+  //    as it is supposed to for our test suites.
+  bool get successful => canRunDependendCommands;
+}
+
 class JsCommandlineOutputImpl extends CommandOutputImpl
     with UnittestSuiteMessagesMixin {
   JsCommandlineOutputImpl(Command command, int exitCode, bool timedOut,
@@ -1683,6 +1739,9 @@
   } else if (command is VmCommand) {
     return new VmCommandOutputImpl(
         command, exitCode, timedOut, stdout, stderr, time, pid);
+  } else if (command is KernelCompilationCommand) {
+    return new KernelCompilationCommandOutputImpl(
+        command, exitCode, timedOut, stdout, stderr, time, compilationSkipped);
   } else if (command is AdbPrecompilationCommand) {
     return new VmCommandOutputImpl(
         command, exitCode, timedOut, stdout, stderr, time, pid);
@@ -2549,6 +2608,12 @@
 
     if (command is BrowserTestCommand) {
       return _startBrowserControllerTest(command, timeout);
+    } else if (command is KernelCompilationCommand) {
+      // For now, we always run dartk in batch mode.
+      var name = command.displayName;
+      assert(name == 'dartk');
+      return _getBatchRunner(name)
+          .runCommand(name, command, timeout, command.arguments);
     } else if (command is CompilationCommand && dart2jsBatchMode) {
       return _getBatchRunner("dart2js")
           .runCommand("dart2js", command, timeout, command.arguments);
diff --git a/tools/testing/dart/test_suite.dart b/tools/testing/dart/test_suite.dart
index 69f077f..e994822 100644
--- a/tools/testing/dart/test_suite.dart
+++ b/tools/testing/dart/test_suite.dart
@@ -717,7 +717,8 @@
       '$directory/$name.status',
       '$directory/.status',
       '$directory/${name}_dart2js.status',
-      '$directory/${name}_analyzer2.status'
+      '$directory/${name}_analyzer2.status',
+      '$directory/${name}_kernel.status'
     ];
 
     return new StandardTestSuite(configuration, name, directory, status_paths,
@@ -1675,7 +1676,9 @@
    * configurations, so it may not use [configuration].
    */
   Map readOptionsFromFile(Path filePath) {
-    if (filePath.segments().contains('co19')) {
+    if (filePath.filename.endsWith('.dill')) {
+      return optionsFromKernelFile();
+    } else if (filePath.segments().contains('co19')) {
       return readOptionsFromCo19File(filePath);
     }
     RegExp testOptionsRegExp = new RegExp(r"// VMOptions=(.*)");
@@ -1801,6 +1804,25 @@
     };
   }
 
+  Map optionsFromKernelFile() {
+    return const {
+      "vmOptions": const [ const []],
+      "sharedOptions": const [],
+      "dartOptions": null,
+      "packageRoot": null,
+      "packages": null,
+      "hasCompileError": false,
+      "hasRuntimeError": false,
+      "hasStaticWarning": false,
+      "otherScripts": const [],
+      "isMultitest": false,
+      "isMultiHtmlTest": false,
+      "subtestNames": const [],
+      "isolateStubs": '',
+      "containsDomImport": false,
+    };
+  }
+
   List<List<String>> getVmOptions(Map optionsFromFile) {
     var COMPILERS = const ['none', 'precompiler', 'dart2app', 'dart2appjit'];
     var RUNTIMES = const [
diff --git a/utils/compiler/BUILD.gn b/utils/compiler/BUILD.gn
index 2095edb..e13cea2 100644
--- a/utils/compiler/BUILD.gn
+++ b/utils/compiler/BUILD.gn
@@ -23,8 +23,8 @@
 invoke_dart("dart2js_create_snapshot_entries") {
   deps = [
     ":dart2js_files_stamp",
-    ":runtime_lib_files_stamp",
     ":dartdoc_files_stamp",
+    ":runtime_lib_files_stamp",
   ]
 
   dot_packages = rebase_path("../../.packages")
@@ -55,18 +55,18 @@
 
 application_snapshot("dart2js") {
   deps = [
-    ":dart2js_create_snapshot_entries"
+    ":dart2js_create_snapshot_entries",
   ]
   main_dart = "$root_gen_dir/dart2js.dart"
   training_args = [
     "--library-root=" + rebase_path("../../sdk"),
-    rebase_path("../../tests/language/first_test.dart")
+    rebase_path("../../tests/language/first_test.dart"),
   ]
 }
 
 application_snapshot("utils_wrapper") {
   deps = [
-    ":dart2js_create_snapshot_entries"
+    ":dart2js_create_snapshot_entries",
   ]
   main_dart = "$root_gen_dir/utils_wrapper.dart"
   training_args = [ "--help" ]
diff --git a/utils/create_timestamp.gni b/utils/create_timestamp.gni
index fce5c30..c579da1 100644
--- a/utils/create_timestamp.gni
+++ b/utils/create_timestamp.gni
@@ -18,15 +18,18 @@
   path = invoker.path
   output = invoker.output
   action(target_name) {
-    list_args = [path]
+    list_args = [ path ]
     if (defined(invoker.pattern)) {
-      list_args += [invoker.pattern]
+      list_args += [ invoker.pattern ]
     }
-    files = exec_script(
-        "$_dart_root/tools/list_dart_files.py", list_args, "list lines")
-    inputs = ["$_dart_root/tools/list_dart_files.py"] +
+    files = exec_script("$_dart_root/tools/list_dart_files.py",
+                        list_args,
+                        "list lines")
+    inputs = [ "$_dart_root/tools/list_dart_files.py" ] +
              rebase_path(files, new_base, current_base)
-    outputs = [ output ]
+    outputs = [
+      output,
+    ]
     script = "$_dart_root/tools/create_timestamp_file.py"
     args = [ rebase_path(output) ]
   }
diff --git a/utils/dartanalyzer/BUILD.gn b/utils/dartanalyzer/BUILD.gn
index 9128168..e4d4a62 100644
--- a/utils/dartanalyzer/BUILD.gn
+++ b/utils/dartanalyzer/BUILD.gn
@@ -13,36 +13,36 @@
 }
 
 analyzer_files = exec_script("../../tools/list_dart_files.py",
-                             [rebase_path("../../pkg/analyzer")],
+                             [ rebase_path("../../pkg/analyzer") ],
                              "list lines")
 
 application_snapshot("generate_dartanalyzer_snapshot") {
   main_dart = "../../pkg/analyzer_cli/bin/analyzer.dart"
   training_args = [
     "--dart-sdk=" + rebase_path("../../sdk"),
-    rebase_path("../../tests/language/first_test.dart")
+    rebase_path("../../tests/language/first_test.dart"),
   ]
   name = "dartanalyzer"
   cli_files = exec_script("../../tools/list_dart_files.py",
-                          [rebase_path("../../pkg/analyzer_cli")],
+                          [ rebase_path("../../pkg/analyzer_cli") ],
                           "list lines")
   inputs = cli_files + analyzer_files
 }
 
 sdk_lib_files = exec_script("../../tools/list_dart_files.py",
-                            [rebase_path("../../sdk/lib")],
+                            [ rebase_path("../../sdk/lib") ],
                             "list lines")
 
 template("generate_summary") {
   assert(defined(invoker.type), "Must specify the summary type")
   type = invoker.type
-  assert((type == "spec") || (type == "strong"))
+  assert(type == "spec" || type == "strong")
   invoke_dart(target_name) {
     inputs = sdk_lib_files + analyzer_files
 
     output = "$root_gen_dir/$type.sum"
     outputs = [
-      output
+      output,
     ]
 
     dot_packages = rebase_path("../../.packages")
diff --git a/utils/dartdevc/BUILD.gn b/utils/dartdevc/BUILD.gn
index 11c94a0..9b1bdbe 100644
--- a/utils/dartdevc/BUILD.gn
+++ b/utils/dartdevc/BUILD.gn
@@ -6,8 +6,12 @@
 
 application_snapshot("dartdevc") {
   main_dart = "../../pkg/dev_compiler/bin/dartdevc.dart"
-  training_args = [ "--help" ]
+  training_args = [
+    "--dart-sdk",
+    rebase_path("../../sdk"),
+    "--help",
+  ]
   inputs = exec_script("../../tools/list_dart_files.py",
-                       [rebase_path("../../pkg/dev_compiler/bin")],
+                       [ rebase_path("../../pkg/dev_compiler/bin") ],
                        "list lines")
 }
diff --git a/utils/dartdoc/BUILD.gn b/utils/dartdoc/BUILD.gn
index 5c1d0e3..d7fa984 100644
--- a/utils/dartdoc/BUILD.gn
+++ b/utils/dartdoc/BUILD.gn
@@ -8,6 +8,6 @@
   main_dart = "../../third_party/pkg/dartdoc/bin/dartdoc.dart"
   training_args = [ "--help" ]
   inputs = exec_script("../../tools/list_dart_files.py",
-                       [rebase_path("../../third_party/pkg/dartdoc")],
+                       [ rebase_path("../../third_party/pkg/dartdoc") ],
                        "list lines")
 }
diff --git a/utils/dartfmt/BUILD.gn b/utils/dartfmt/BUILD.gn
index f3bbfdc..bb875f0 100644
--- a/utils/dartfmt/BUILD.gn
+++ b/utils/dartfmt/BUILD.gn
@@ -7,7 +7,8 @@
 application_snapshot("dartfmt") {
   main_dart = "../../third_party/pkg_tested/dart_style/bin/format.dart"
   training_args = [ "--help" ]
-  inputs = exec_script("../../tools/list_dart_files.py",
-                       [rebase_path("../../third_party/pkg_tested/dart_style")],
-                       "list lines")
+  inputs =
+      exec_script("../../tools/list_dart_files.py",
+                  [ rebase_path("../../third_party/pkg_tested/dart_style") ],
+                  "list lines")
 }
diff --git a/utils/invoke_dart.gni b/utils/invoke_dart.gni
index e300cdb..ad3a7f8 100644
--- a/utils/invoke_dart.gni
+++ b/utils/invoke_dart.gni
@@ -23,28 +23,24 @@
 
   action(target_name) {
     relative_dart_root = rebase_path(_dart_root, ".")
-    deps = extra_deps + [
-      "$relative_dart_root/runtime/bin:dart($host_toolchain)",
-    ]
+    deps =
+        extra_deps + [ "$relative_dart_root/runtime/bin:dart($host_toolchain)" ]
 
-    dart_out_dir = get_label_info(
-        "$relative_dart_root/runtime/bin:dart($host_toolchain)", "root_out_dir")
+    dart_out_dir =
+        get_label_info("$relative_dart_root/runtime/bin:dart($host_toolchain)",
+                       "root_out_dir")
     if (is_win) {
       dart = rebase_path("$dart_out_dir/dart.exe")
     } else {
       dart = rebase_path("$dart_out_dir/dart")
     }
 
-    inputs = [
-      dart,
-    ] + extra_inputs
+    inputs = [ dart ] + extra_inputs
 
     outputs = invoker.outputs
 
     script = "$_dart_root/tools/dart_for_gn.py"
-    args = [
-      dart,
-    ] + extra_args
+    args = [ dart ] + extra_args
   }
 }
 
@@ -66,14 +62,12 @@
     extra_inputs += invoker.inputs
   }
   invoke_dart(target_name) {
-    deps = extra_deps + [
-      "$_dart_root/pkg:pkg_files_stamp"
-    ]
+    deps = extra_deps + [ "$_dart_root/pkg:pkg_files_stamp" ]
 
     inputs = extra_inputs + [
-      "$_dart_root/sdk/lib/_internal/sdk_library_metadata/lib/libraries.dart",
-      "$root_gen_dir/pkg_files.stamp",
-    ]
+               "$_dart_root/sdk/lib/_internal/sdk_library_metadata/lib/libraries.dart",
+               "$root_gen_dir/pkg_files.stamp",
+             ]
 
     output = "$root_gen_dir/$name.dart.snapshot"
     outputs = [
@@ -85,10 +79,10 @@
     main_file = rebase_path(main_dart)
 
     args = [
-      "--packages=$dot_packages",
-      "--snapshot=$abs_output",
-      "--snapshot-kind=app-jit",
-      main_file,
-    ] + training_args
+             "--packages=$dot_packages",
+             "--snapshot=$abs_output",
+             "--snapshot-kind=app-jit",
+             main_file,
+           ] + training_args
   }
 }
diff --git a/utils/pub/BUILD.gn b/utils/pub/BUILD.gn
index 7ef2aa4..d1238cd 100644
--- a/utils/pub/BUILD.gn
+++ b/utils/pub/BUILD.gn
@@ -8,9 +8,9 @@
   main_dart = "../../third_party/pkg/pub/bin/pub.dart"
   training_args = [ "--help" ]
   deps = [
-    "../compiler:dart2js_files_stamp"
+    "../compiler:dart2js_files_stamp",
   ]
   inputs = [
-    "$root_gen_dir/dart2js_files.stamp"
+    "$root_gen_dir/dart2js_files.stamp",
   ]
 }
