diff options
Diffstat (limited to 'src/bun.js/bindings/JSDOMGlobalObject.h')
-rw-r--r-- | src/bun.js/bindings/JSDOMGlobalObject.h | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/src/bun.js/bindings/JSDOMGlobalObject.h b/src/bun.js/bindings/JSDOMGlobalObject.h new file mode 100644 index 000000000..b22700d7d --- /dev/null +++ b/src/bun.js/bindings/JSDOMGlobalObject.h @@ -0,0 +1,34 @@ +#pragma once + +#include "root.h" + +#include "DOMWrapperWorld.h" + +#include "JavaScriptCore/HeapInlines.h" +#include "JavaScriptCore/JSGlobalObject.h" +#include "JavaScriptCore/JSObjectInlines.h" +#include "JavaScriptCore/WeakGCMap.h" +#include "ScriptExecutionContext.h" + +namespace WebCore { + +Zig::GlobalObject* toJSDOMGlobalObject(ScriptExecutionContext& ctx, DOMWrapperWorld& world); +WEBCORE_EXPORT Zig::GlobalObject& callerGlobalObject(JSC::JSGlobalObject&, JSC::CallFrame*); +Zig::GlobalObject& legacyActiveGlobalObjectForAccessor(JSC::JSGlobalObject&, JSC::CallFrame*); + +template<class JSClass> +JSClass* toJSDOMGlobalObject(JSC::VM& vm, JSC::JSValue value) +{ + // static_assert(std::is_base_of_v<JSDOMGlobalObject, JSClass>); + + if (auto* object = value.getObject()) { + if (object->type() == JSC::PureForwardingProxyType) + return JSC::jsDynamicCast<JSClass*>(JSC::jsCast<JSC::JSProxy*>(object)->target()); + if (object->inherits<JSClass>()) + return JSC::jsCast<JSClass*>(object); + } + + return nullptr; +} + +}
\ No newline at end of file |