Index: src/api.cc |
diff --git a/src/api.cc b/src/api.cc |
index 7a412df28dcfe13979722b1aa8bb41a6e10d0aa8..202c354d0db9551466b02e9be4832d311d32e944 100644 |
--- a/src/api.cc |
+++ b/src/api.cc |
@@ -6293,6 +6293,46 @@ void V8::AddCallCompletedCallback(CallCompletedCallback callback) { |
} |
+void V8::RunMicrotasks(Isolate* isolate) { |
+ i::Isolate* i_isolate = reinterpret_cast<i::Isolate*>(isolate); |
+ i::HandleScope scope(i_isolate); |
+ i::V8::RunMicrotasks(i_isolate); |
+} |
+ |
+ |
+static void ExternalMicrotaskFunctionCallback( |
+ const v8::FunctionCallbackInfo<Value>& info) { |
+ STATIC_ASSERT( |
+ sizeof(ExternalMicrotaskCallback) == sizeof(v8::internal::Address)); |
+ ExternalMicrotaskCallback callback = |
+ reinterpret_cast<ExternalMicrotaskCallback>(reinterpret_cast<intptr_t>( |
+ info.Data().As<External>()->Value())); |
+ (*callback)(info.GetIsolate()); |
+} |
+ |
+ |
+void V8::EnqueueExternalMicrotask(Isolate* isolate, |
+ ExternalMicrotaskCallback callback) { |
dcarney
2014/02/11 07:47:13
No need for a new ExternalMicrotaskCallback type:
rafaelw
2014/02/11 20:37:43
Done.
|
+ i::Isolate* i_isolate = reinterpret_cast<i::Isolate*>(isolate); |
+ ENTER_V8(i_isolate); |
+ i::HandleScope scope(i_isolate); |
+ STATIC_ASSERT( |
+ sizeof(ExternalMicrotaskCallback) == sizeof(v8::internal::Address)); |
+ Local<External> external_callback = |
+ External::New(isolate, |
+ reinterpret_cast<void*>(reinterpret_cast<intptr_t>(callback))); |
+ Local<Function> local_handler = Function::New(isolate, |
+ &ExternalMicrotaskFunctionCallback, external_callback); |
+ i::Handle<i::Object> handler = Utils::OpenHandle(*local_handler); |
+ i::V8::EnqueueExternalMicrotask(i_isolate, handler); |
+} |
+ |
+ |
+void V8::SetAutorunMicrotasks(Isolate* isolate, bool autorun) { |
+ reinterpret_cast<i::Isolate*>(isolate)->set_autorun_microtasks(autorun); |
+} |
+ |
+ |
void V8::RemoveCallCompletedCallback(CallCompletedCallback callback) { |
i::V8::RemoveCallCompletedCallback(callback); |
} |