diff options
Diffstat (limited to 'src/javascript/jsc/bindings/ZigGlobalObject.h')
-rw-r--r-- | src/javascript/jsc/bindings/ZigGlobalObject.h | 146 |
1 files changed, 78 insertions, 68 deletions
diff --git a/src/javascript/jsc/bindings/ZigGlobalObject.h b/src/javascript/jsc/bindings/ZigGlobalObject.h index 48f5a1a02..edc250ecb 100644 --- a/src/javascript/jsc/bindings/ZigGlobalObject.h +++ b/src/javascript/jsc/bindings/ZigGlobalObject.h @@ -19,77 +19,87 @@ class Identifier; namespace Zig { class GlobalObject : public JSC::JSGlobalObject { - using Base = JSC::JSGlobalObject; - - public: - DECLARE_EXPORT_INFO; - static const JSC::GlobalObjectMethodTable s_globalObjectMethodTable; - Zig::Process *m_process; - static constexpr bool needsDestruction = true; - template <typename CellType, JSC::SubspaceAccess mode> - static GCClient::IsoSubspace *subspaceFor(VM &vm) { - return vm.globalObjectSpace<mode>(); - } - - static GlobalObject *create(JSC::VM &vm, JSC::Structure *structure) { - auto *object = new (NotNull, JSC::allocateCell<GlobalObject>(vm)) GlobalObject(vm, structure); - object->finishCreation(vm); - return object; - } - - static JSC::Structure *createStructure(JSC::VM &vm, JSC::JSValue prototype) { - auto *result = JSC::Structure::create( - vm, nullptr, prototype, JSC::TypeInfo(JSC::GlobalObjectType, Base::StructureFlags), info()); - result->setTransitionWatchpointIsLikelyToBeFired(true); - return result; - } - - 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, - const JSC::SourceOrigin &); - static JSC::Identifier moduleLoaderResolve(JSGlobalObject *, JSC::JSModuleLoader *, - JSC::JSValue keyValue, JSC::JSValue referrerValue, - JSC::JSValue); - static JSC::JSInternalPromise *moduleLoaderFetch(JSGlobalObject *, JSC::JSModuleLoader *, - JSC::JSValue, JSC::JSValue, JSC::JSValue); - static JSC::JSObject *moduleLoaderCreateImportMetaProperties(JSGlobalObject *, - JSC::JSModuleLoader *, JSC::JSValue, - JSC::JSModuleRecord *, JSC::JSValue); - static JSC::JSValue moduleLoaderEvaluate(JSGlobalObject *, JSC::JSModuleLoader *, JSC::JSValue, - JSC::JSValue, JSC::JSValue, JSC::JSValue, JSC::JSValue); - static void promiseRejectionTracker(JSGlobalObject *, JSC::JSPromise *, - JSC::JSPromiseRejectionOperation); - void setConsole(void *console); - void installAPIGlobals(JSClassRef *globals, int count); - - private: - GlobalObject(JSC::VM &vm, JSC::Structure *structure) - : JSC::JSGlobalObject(vm, structure, &s_globalObjectMethodTable) {} + using Base = JSC::JSGlobalObject; + +public: + DECLARE_EXPORT_INFO; + static const JSC::GlobalObjectMethodTable s_globalObjectMethodTable; + Zig::Process* m_process; + static constexpr bool needsDestruction = true; + template<typename CellType, JSC::SubspaceAccess mode> + static GCClient::IsoSubspace* subspaceFor(VM& vm) + { + return vm.globalObjectSpace<mode>(); + } + + static GlobalObject* create(JSC::VM& vm, JSC::Structure* structure) + { + auto* object = new (NotNull, JSC::allocateCell<GlobalObject>(vm)) GlobalObject(vm, structure); + object->finishCreation(vm); + return object; + } + + static JSC::Structure* createStructure(JSC::VM& vm, JSC::JSValue prototype) + { + auto* result = JSC::Structure::create( + vm, nullptr, prototype, JSC::TypeInfo(JSC::GlobalObjectType, Base::StructureFlags), info()); + result->setTransitionWatchpointIsLikelyToBeFired(true); + return result; + } + + 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, + const JSC::SourceOrigin&); + static JSC::Identifier moduleLoaderResolve(JSGlobalObject*, JSC::JSModuleLoader*, + JSC::JSValue keyValue, JSC::JSValue referrerValue, + JSC::JSValue); + static JSC::JSInternalPromise* moduleLoaderFetch(JSGlobalObject*, JSC::JSModuleLoader*, + JSC::JSValue, JSC::JSValue, JSC::JSValue); + static JSC::JSObject* moduleLoaderCreateImportMetaProperties(JSGlobalObject*, + JSC::JSModuleLoader*, JSC::JSValue, + JSC::JSModuleRecord*, JSC::JSValue); + static JSC::JSValue moduleLoaderEvaluate(JSGlobalObject*, JSC::JSModuleLoader*, JSC::JSValue, + JSC::JSValue, JSC::JSValue, JSC::JSValue, JSC::JSValue); + static void promiseRejectionTracker(JSGlobalObject*, JSC::JSPromise*, + JSC::JSPromiseRejectionOperation); + void setConsole(void* console); + void installAPIGlobals(JSClassRef* globals, int count); + +private: + GlobalObject(JSC::VM& vm, JSC::Structure* structure) + : 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).leakRef())); - } - - void call() { - JSC::VM &vm = m_globalObject->vm(); - auto task = &m_task.get(); - task->run(m_globalObject.get()); - } - - 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; +public: + static Ref<JSMicrotaskCallback> create(JSC::JSGlobalObject& globalObject, + Ref<JSC::Microtask>&& task) + { + return adoptRef(*new JSMicrotaskCallback(globalObject, WTFMove(task).leakRef())); + } + + void call() + { + JSC::VM& vm = m_globalObject->vm(); + auto task = &m_task.get(); + task->run(m_globalObject.get()); + } + +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 |