diff options
author | 2022-03-27 22:37:55 -0700 | |
---|---|---|
committer | 2022-03-27 22:37:55 -0700 | |
commit | ed4f4ae4e29bc7a27d0eb7503401a8fbfb669470 (patch) | |
tree | 05566d85cfdd6676bdd66ebddbb806f0b9fe4b6d /src/javascript/jsc/bindings/JSDOMGlobalObject.cpp | |
parent | 4bf5dc1df9f4eb1c913d9c9e40fcf3f718f5ebad (diff) | |
download | bun-ed4f4ae4e29bc7a27d0eb7503401a8fbfb669470.tar.gz bun-ed4f4ae4e29bc7a27d0eb7503401a8fbfb669470.tar.zst bun-ed4f4ae4e29bc7a27d0eb7503401a8fbfb669470.zip |
Begin adding WebCore classes to bun
Diffstat (limited to 'src/javascript/jsc/bindings/JSDOMGlobalObject.cpp')
-rw-r--r-- | src/javascript/jsc/bindings/JSDOMGlobalObject.cpp | 82 |
1 files changed, 82 insertions, 0 deletions
diff --git a/src/javascript/jsc/bindings/JSDOMGlobalObject.cpp b/src/javascript/jsc/bindings/JSDOMGlobalObject.cpp new file mode 100644 index 000000000..98b9e9dec --- /dev/null +++ b/src/javascript/jsc/bindings/JSDOMGlobalObject.cpp @@ -0,0 +1,82 @@ +#include "JSDOMGlobalObject.h" +#include "JavaScriptCore/JSCast.h" +#include "ZigGlobalObject.h" + +namespace WebCore { + +// 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 |