aboutsummaryrefslogtreecommitdiff
path: root/src/bun.js/bindings/JSDOMGlobalObject.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/bun.js/bindings/JSDOMGlobalObject.h')
-rw-r--r--src/bun.js/bindings/JSDOMGlobalObject.h34
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