Update d8 to 10.6.166

The API for the JS Promise integration API has changed to be part of
the `new WebAssembly.Function` constructor. This requires parameter
types to be specified explicitly. Apparently, these types currently
must be all `externref`.

Change-Id: Ifae634f65cfa377441be4b2dc0643c34b702fbe7
Cq-Include-Trybots: luci.dart.try:dart2wasm-linux-x64-d8-try
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/255061
Reviewed-by: Stephen Adams <sra@google.com>
diff --git a/DEPS b/DEPS
index b8815654..2dc7393 100644
--- a/DEPS
+++ b/DEPS
@@ -58,7 +58,7 @@
   # Checkout extra javascript engines for testing or benchmarking.
   # d8, the V8 shell, is always checked out.
   "checkout_javascript_engines": False,
-  "d8_tag": "version:10.6.91",
+  "d8_tag": "version:10.6.166",
   "jsshell_tag": "version:95.0",
 
   # As Flutter does, we use Fuchsia's GN and Clang toolchain. These revision
diff --git a/pkg/dart2wasm/bin/run_wasm.js b/pkg/dart2wasm/bin/run_wasm.js
index 3e40f5a..699d1ea 100644
--- a/pkg/dart2wasm/bin/run_wasm.js
+++ b/pkg/dart2wasm/bin/run_wasm.js
@@ -83,14 +83,14 @@
             dartInstance.exports.$call0(closure);
         }, milliseconds);
     },
-    futurePromise: WebAssembly.suspendOnReturnedPromise(
-        new WebAssembly.Function(
-            {parameters: ['externref'], results: ['externref']},
-            function(future) {
-                return new Promise(function (resolve, reject) {
-                    dartInstance.exports.$awaitCallback(future, resolve);
-                });
-            })),
+    futurePromise: new WebAssembly.Function(
+        {parameters: ['externref', 'externref'], results: ['externref']},
+        function(future) {
+            return new Promise(function (resolve, reject) {
+                dartInstance.exports.$awaitCallback(future, resolve);
+            });
+        },
+        {suspending: 'first'}),
     callResolve: function(resolve, result) {
         // This trampoline is needed because [resolve] is a JS function that
         // can't be called directly from Wasm.
@@ -364,7 +364,10 @@
 var dartInstance = instantiate(arguments[0], importObject);
 
 // Initialize async bridge.
-var asyncBridge = WebAssembly.returnPromiseOnSuspend(dartInstance.exports.$asyncBridge);
+var asyncBridge = new WebAssembly.Function(
+    {parameters: ['externref', 'externref'], results: ['externref']},
+    dartInstance.exports.$asyncBridge,
+    {promising: 'first'});
 
 // Call `main`. If tasks are placed into the event loop (by scheduling tasks
 // explicitly or awaiting Futures), these will automatically keep the script
diff --git a/sdk/lib/_internal/wasm/lib/async_patch.dart b/sdk/lib/_internal/wasm/lib/async_patch.dart
index ba75660..e9ed97e 100644
--- a/sdk/lib/_internal/wasm/lib/async_patch.dart
+++ b/sdk/lib/_internal/wasm/lib/async_patch.dart
@@ -64,7 +64,9 @@
 
 @pragma("wasm:export", "\$asyncBridge")
 WasmAnyRef? _asyncBridge(
-    WasmExternRef? stack, WasmDataRef args, Completer<Object?> completer) {
+    WasmExternRef? stack, WasmExternRef? argsRef, WasmExternRef? completerRef) {
+  WasmDataRef args = unsafeCastOpaque(argsRef!.internalize());
+  Completer<Object?> completer = unsafeCastOpaque(completerRef!.internalize());
   try {
     Object? result = _asyncBridge2(args, stack);
     completer.complete(result);
diff --git a/sdk/lib/wasm/wasm_types.dart b/sdk/lib/wasm/wasm_types.dart
index 0508a0a..cda6ba4 100644
--- a/sdk/lib/wasm/wasm_types.dart
+++ b/sdk/lib/wasm/wasm_types.dart
@@ -52,7 +52,7 @@
   WasmAnyRef? internalize() => _internalizeNullable(this);
 }
 
-// TODO(askesc): Add intrinsics for these when the `intern.externalize` and
+// TODO(askesc): Add intrinsics for these when the `extern.externalize` and
 // `extern.internalize` instructions are implemented in V8.
 @pragma("wasm:import", "dart2wasm.roundtrip")
 external WasmExternRef _externalizeNonNullable(WasmAnyRef ref);