diff options
author | 2021-12-18 21:07:07 -0800 | |
---|---|---|
committer | 2021-12-18 21:07:07 -0800 | |
commit | 0cee57f1d997fe21e519d5e771df0877ab489d5f (patch) | |
tree | 417d044ebbc47cc9b6ef49213620c07ae2927e0a /src/javascript/jsc/bindings/ZigGlobalObject.h | |
parent | d1783babd99ff2a8020765837b3b9b3099137024 (diff) | |
parent | eab99b3bae9a810d76e6eb16afd9fb32cd7672bd (diff) | |
download | bun-0cee57f1d997fe21e519d5e771df0877ab489d5f.tar.gz bun-0cee57f1d997fe21e519d5e771df0877ab489d5f.tar.zst bun-0cee57f1d997fe21e519d5e771df0877ab489d5f.zip |
Merge pull request #80 from Jarred-Sumner/jarred/npm-install
bun install
Diffstat (limited to 'src/javascript/jsc/bindings/ZigGlobalObject.h')
-rw-r--r-- | src/javascript/jsc/bindings/ZigGlobalObject.h | 28 |
1 files changed, 27 insertions, 1 deletions
diff --git a/src/javascript/jsc/bindings/ZigGlobalObject.h b/src/javascript/jsc/bindings/ZigGlobalObject.h index 4b1e1e935..64ece0c64 100644 --- a/src/javascript/jsc/bindings/ZigGlobalObject.h +++ b/src/javascript/jsc/bindings/ZigGlobalObject.h @@ -10,10 +10,10 @@ class Identifier; } // namespace JSC #include "ZigConsoleClient.h" +#include <JavaScriptCore/CatchScope.h> #include <JavaScriptCore/JSGlobalObject.h> #include <JavaScriptCore/JSTypeInfo.h> #include <JavaScriptCore/Structure.h> - namespace Zig { class GlobalObject : public JSC::JSGlobalObject { @@ -45,6 +45,7 @@ class GlobalObject : public JSC::JSGlobalObject { static void reportUncaughtExceptionAtEventLoop(JSGlobalObject *, JSC::Exception *); + static void queueMicrotaskToEventLoop(JSC::JSGlobalObject &global, Ref<JSC::Microtask> &&task); static JSC::JSInternalPromise *moduleLoaderImportModule(JSGlobalObject *, JSC::JSModuleLoader *, JSC::JSString *moduleNameValue, JSC::JSValue parameters, @@ -69,4 +70,29 @@ class GlobalObject : public JSC::JSGlobalObject { : JSC::JSGlobalObject(vm, structure, &s_globalObjectMethodTable) {} }; +class JSMicrotaskCallback : public RefCounted<JSMicrotaskCallback> { + public: + static Ref<JSMicrotaskCallback> create(JSC::JSGlobalObject &globalObject, + Ref<JSC::Microtask> &&task) { + return adoptRef(*new JSMicrotaskCallback(globalObject, WTFMove(task))); + } + + void call() { + auto protectedThis{makeRef(*this)}; + JSC::VM &vm = m_globalObject->vm(); + JSC::JSLockHolder lock(vm); + auto scope = DECLARE_CATCH_SCOPE(vm); + auto task = &m_task.get(); + task->run(m_globalObject.get()); + scope.assertNoExceptionExceptTermination(); + } + + private: + JSMicrotaskCallback(JSC::JSGlobalObject &globalObject, Ref<JSC::Microtask> &&task) + : m_globalObject{globalObject.vm(), &globalObject}, m_task{WTFMove(task)} {} + + JSC::Strong<JSC::JSGlobalObject> m_globalObject; + Ref<JSC::Microtask> m_task; +}; + } // namespace Zig |