From 2193d827b98dc38dbe74e413e2c3a0c6a73980e6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bartek=20Iwa=C5=84czuk?= Date: Wed, 13 Jul 2022 07:51:10 +0200 Subject: [PATCH] feat: WasmAsyncResolvePromiseCallback (#1029) --- src/binding.cc | 5 +++++ src/isolate.rs | 27 +++++++++++++++++++++++++++ 2 files changed, 32 insertions(+) diff --git a/src/binding.cc b/src/binding.cc index 89bd3841..1ff045b9 100644 --- a/src/binding.cc +++ b/src/binding.cc @@ -246,6 +246,11 @@ void v8__Isolate__SetPromiseRejectCallback(v8::Isolate* isolate, isolate->SetPromiseRejectCallback(callback); } +void v8__Isolate__SetWasmAsyncResolvePromiseCallback( + v8::Isolate* isolate, v8::WasmAsyncResolvePromiseCallback callback) { + isolate->SetWasmAsyncResolvePromiseCallback(callback); +} + void v8__Isolate__SetCaptureStackTraceForUncaughtExceptions( v8::Isolate* isolate, bool capture, int frame_limit) { isolate->SetCaptureStackTraceForUncaughtExceptions(capture, frame_limit); diff --git a/src/isolate.rs b/src/isolate.rs index bfd21bb9..9374f2af 100644 --- a/src/isolate.rs +++ b/src/isolate.rs @@ -1,3 +1,4 @@ +use crate::PromiseResolver; // Copyright 2019-2021 the Deno authors. All rights reserved. MIT license. use crate::function::FunctionCallbackInfo; use crate::handle::FinalizerMap; @@ -92,6 +93,20 @@ pub type PromiseHook = pub type PromiseRejectCallback = extern "C" fn(PromiseRejectMessage); +#[derive(Debug, Clone, Copy, PartialEq)] +#[repr(C)] +pub enum WasmAsyncSuccess { + Success, + Fail, +} +pub type WasmAsyncResolvePromiseCallback = extern "C" fn( + *const Isolate, + Local, + Local, + Local, + WasmAsyncSuccess, +); + /// HostInitializeImportMetaObjectCallback is called the first time import.meta /// is accessed for a module. Subsequent access will reuse the same value. /// @@ -233,6 +248,10 @@ extern "C" { isolate: *mut Isolate, callback: PromiseRejectCallback, ); + fn v8__Isolate__SetWasmAsyncResolvePromiseCallback( + isolate: *mut Isolate, + callback: WasmAsyncResolvePromiseCallback, + ); fn v8__Isolate__SetHostInitializeImportMetaObjectCallback( isolate: *mut Isolate, callback: HostInitializeImportMetaObjectCallback, @@ -619,6 +638,14 @@ impl Isolate { ) { unsafe { v8__Isolate__SetPromiseRejectCallback(self, callback) } } + + pub fn set_wasm_async_resolve_promise_callback( + &mut self, + callback: WasmAsyncResolvePromiseCallback, + ) { + unsafe { v8__Isolate__SetWasmAsyncResolvePromiseCallback(self, callback) } + } + /// This specifies the callback called by the upcoming importa.meta /// language feature to retrieve host-defined meta data for a module. pub fn set_host_initialize_import_meta_object_callback(