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);