summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/libdeno.rs2
-rw-r--r--core/libdeno/api.cc9
-rw-r--r--core/libdeno/deno.h1
-rw-r--r--core/libdeno/modules.cc1
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"