diff options
author | 2022-06-22 23:21:48 -0700 | |
---|---|---|
committer | 2022-06-22 23:21:48 -0700 | |
commit | 729d445b6885f69dd2c6355f38707bd42851c791 (patch) | |
tree | f87a7c408929ea3f57bbb7ace380cf869da83c0e /src/bun.js/bindings/JSDOMGlobalObject.cpp | |
parent | 25f820c6bf1d8ec6d444ef579cc036b8c0607b75 (diff) | |
download | bun-jarred/rename.tar.gz bun-jarred/rename.tar.zst bun-jarred/rename.zip |
change the directory structurejarred/rename
Diffstat (limited to 'src/bun.js/bindings/JSDOMGlobalObject.cpp')
-rw-r--r-- | src/bun.js/bindings/JSDOMGlobalObject.cpp | 87 |
1 files changed, 87 insertions, 0 deletions
diff --git a/src/bun.js/bindings/JSDOMGlobalObject.cpp b/src/bun.js/bindings/JSDOMGlobalObject.cpp new file mode 100644 index 000000000..cc0bb87de --- /dev/null +++ b/src/bun.js/bindings/JSDOMGlobalObject.cpp @@ -0,0 +1,87 @@ +#include "JSDOMGlobalObject.h" +#include "JavaScriptCore/JSCast.h" +#include "ZigGlobalObject.h" + +namespace WebCore { + +Zig::GlobalObject* toJSDOMGlobalObject(ScriptExecutionContext& ctx, DOMWrapperWorld& world) +{ + return JSC::jsCast<Zig::GlobalObject*>(ctx.jsGlobalObject()); +} + +// static JSDOMGlobalObject& callerGlobalObject(JSC::JSGlobalObject& lexicalGlobalObject, JSC::CallFrame* callFrame, bool skipFirstFrame, bool lookUpFromVMEntryScope) +// { +// VM& vm = lexicalGlobalObject.vm(); +// if (callFrame) { +// class GetCallerGlobalObjectFunctor { +// public: +// GetCallerGlobalObjectFunctor(bool skipFirstFrame) +// : m_skipFirstFrame(skipFirstFrame) +// { +// } + +// StackVisitor::Status operator()(StackVisitor& visitor) const +// { +// if (m_skipFirstFrame) { +// if (!m_hasSkippedFirstFrame) { +// m_hasSkippedFirstFrame = true; +// return StackVisitor::Continue; +// } +// } + +// if (auto* codeBlock = visitor->codeBlock()) +// m_globalObject = codeBlock->globalObject(); +// else { +// ASSERT(visitor->callee().rawPtr()); +// // FIXME: Callee is not an object if the caller is Web Assembly. +// // Figure out what to do here. We can probably get the global object +// // from the top-most Wasm Instance. https://bugs.webkit.org/show_bug.cgi?id=165721 +// if (visitor->callee().isCell() && visitor->callee().asCell()->isObject()) +// m_globalObject = jsCast<JSObject*>(visitor->callee().asCell())->globalObject(); +// } +// return StackVisitor::Done; +// } + +// JSC::JSGlobalObject* globalObject() const { return m_globalObject; } + +// private: +// bool m_skipFirstFrame { false }; +// mutable bool m_hasSkippedFirstFrame { false }; +// mutable JSC::JSGlobalObject* m_globalObject { nullptr }; +// }; + +// GetCallerGlobalObjectFunctor iter(skipFirstFrame); +// callFrame->iterate(vm, iter); +// if (iter.globalObject()) +// return *jsCast<JSDOMGlobalObject*>(iter.globalObject()); +// } + +// // In the case of legacyActiveGlobalObjectForAccessor, it is possible that vm.topCallFrame is nullptr when the script is evaluated as JSONP. +// // Since we put JSGlobalObject to VMEntryScope, we can retrieve the right globalObject from that. +// // For callerGlobalObject, we do not check vm.entryScope to keep it the old behavior. +// if (lookUpFromVMEntryScope) { +// if (vm.entryScope) { +// if (auto* result = vm.entryScope->globalObject()) +// return *jsCast<JSDOMGlobalObject*>(result); +// } +// } + +// // If we cannot find JSGlobalObject in caller frames, we just return the current lexicalGlobalObject. +// return *jsCast<JSDOMGlobalObject*>(&lexicalGlobalObject); +// } + +// JSDOMGlobalObject& callerGlobalObject(JSC::JSGlobalObject& lexicalGlobalObject, JSC::CallFrame* callFrame) +// { +// constexpr bool skipFirstFrame = true; +// constexpr bool lookUpFromVMEntryScope = false; +// return callerGlobalObject(lexicalGlobalObject, callFrame, skipFirstFrame, lookUpFromVMEntryScope); +// } + +// JSDOMGlobalObject& legacyActiveGlobalObjectForAccessor(JSC::JSGlobalObject& lexicalGlobalObject, JSC::CallFrame* callFrame) +// { +// constexpr bool skipFirstFrame = false; +// constexpr bool lookUpFromVMEntryScope = true; +// return callerGlobalObject(lexicalGlobalObject, callFrame, skipFirstFrame, lookUpFromVMEntryScope); +// } + +}
\ No newline at end of file |