summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBartek IwaƄczuk <biwanczuk@gmail.com>2019-09-12 21:13:08 +0200
committerRyan Dahl <ry@tinyclouds.org>2019-09-12 15:13:08 -0400
commitc03cdcc939f86c9865dc7a700782bdf558fa83f5 (patch)
tree941e9c9221cdea1e6df0eeee63defaf8a851381a
parent69e01c2374539e02956e643d87cd9a6afa805db9 (diff)
feat: add bindings to run microtasks from Isolate (#2793)
-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"