From c03cdcc939f86c9865dc7a700782bdf558fa83f5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bartek=20Iwa=C5=84czuk?= Date: Thu, 12 Sep 2019 21:13:08 +0200 Subject: feat: add bindings to run microtasks from Isolate (#2793) --- core/libdeno.rs | 2 ++ core/libdeno/api.cc | 9 +++++++++ core/libdeno/deno.h | 1 + core/libdeno/modules.cc | 1 + 4 files changed, 13 insertions(+) (limited to 'core') 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(d_); d->isolate_->TerminateExecution(); } + +void deno_run_microtasks(Deno* d_, void* user_data) { + deno::DenoIsolate* d = reinterpret_cast(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 module_namespace = module->GetModuleNamespace(); promise->Resolve(context, module_namespace).ToChecked(); } + d->isolate_->RunMicrotasks(); } } // extern "C" -- cgit v1.2.3