diff options
-rw-r--r-- | core/libdeno.rs | 2 | ||||
-rw-r--r-- | core/libdeno/api.cc | 9 | ||||
-rw-r--r-- | core/libdeno/deno.h | 1 | ||||
-rw-r--r-- | core/libdeno/modules.cc | 1 |
4 files changed, 13 insertions, 0 deletions
diff --git a/core/libdeno.rs b/core/libdeno.rs index 071f6ddf5..c46880f1f 100644 --- a/core/libdeno.rs +++ b/core/libdeno.rs @@ -280,6 +280,8 @@ extern "C" { js_source: *const c_char, ); pub fn deno_terminate_execution(i: *const isolate); + #[allow(dead_code)] + pub fn deno_run_microtasks(i: *const isolate, user_data: *const c_void); // Modules diff --git a/core/libdeno/api.cc b/core/libdeno/api.cc index 1e6b5dfbf..2e926f793 100644 --- a/core/libdeno/api.cc +++ b/core/libdeno/api.cc @@ -233,4 +233,13 @@ void deno_terminate_execution(Deno* d_) { deno::DenoIsolate* d = reinterpret_cast<deno::DenoIsolate*>(d_); d->isolate_->TerminateExecution(); } + +void deno_run_microtasks(Deno* d_, void* user_data) { + deno::DenoIsolate* d = reinterpret_cast<deno::DenoIsolate*>(d_); + + deno::UserDataScope user_data_scope(d, user_data); + v8::Locker locker(d->isolate_); + v8::Isolate::Scope isolate_scope(d->isolate_); + d->isolate_->RunMicrotasks(); +} } diff --git a/core/libdeno/deno.h b/core/libdeno/deno.h index 2c248a87e..0bdd31f50 100644 --- a/core/libdeno/deno.h +++ b/core/libdeno/deno.h @@ -119,6 +119,7 @@ const char* deno_last_exception(Deno* d); void deno_terminate_execution(Deno* d); +void deno_run_microtasks(Deno* d, void* user_data); // Module API typedef int deno_mod; diff --git a/core/libdeno/modules.cc b/core/libdeno/modules.cc index 0d3a9c70f..e2915e8b1 100644 --- a/core/libdeno/modules.cc +++ b/core/libdeno/modules.cc @@ -213,6 +213,7 @@ void deno_dyn_import_done(Deno* d_, void* user_data, Local<Value> module_namespace = module->GetModuleNamespace(); promise->Resolve(context, module_namespace).ToChecked(); } + d->isolate_->RunMicrotasks(); } } // extern "C" |