From 729d445b6885f69dd2c6355f38707bd42851c791 Mon Sep 17 00:00:00 2001 From: Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com> Date: Wed, 22 Jun 2022 23:21:48 -0700 Subject: change the directory structure --- src/bun.js/bindings/BunClientData.cpp | 82 +++++++++++++++++++++++++++++++++++ 1 file changed, 82 insertions(+) create mode 100644 src/bun.js/bindings/BunClientData.cpp (limited to 'src/bun.js/bindings/BunClientData.cpp') diff --git a/src/bun.js/bindings/BunClientData.cpp b/src/bun.js/bindings/BunClientData.cpp new file mode 100644 index 000000000..2cdd8b25a --- /dev/null +++ b/src/bun.js/bindings/BunClientData.cpp @@ -0,0 +1,82 @@ +#include "root.h" + +#include "BunClientData.h" + +#include "ExtendedDOMClientIsoSubspaces.h" +#include "ExtendedDOMIsoSubspaces.h" +#include "JavaScriptCore/FastMallocAlignedMemoryAllocator.h" +#include "JavaScriptCore/HeapInlines.h" +#include "JavaScriptCore/IsoHeapCellType.h" +#include "JavaScriptCore/JSDestructibleObjectHeapCellType.h" +// #include "JavaScriptCore/MarkingConstraint.h" +#include "JavaScriptCore/SubspaceInlines.h" +#include "JavaScriptCore/VM.h" +#include "wtf/MainThread.h" + +#include "JSDOMConstructorBase.h" +#include "JSDOMBuiltinConstructorBase.h" + +#include "BunGCOutputConstraint.h" +#include "WebCoreTypedArrayController.h" +#include "JavaScriptCore/JSCInlines.h" + +#include "JSDOMWrapper.h" + +namespace WebCore { +using namespace JSC; + +JSHeapData::JSHeapData(Heap& heap) + : m_heapCellTypeForJSWorkerGlobalScope(JSC::IsoHeapCellType::Args()) + , m_domBuiltinConstructorSpace ISO_SUBSPACE_INIT(heap, heap.cellHeapCellType, JSDOMBuiltinConstructorBase) + , m_domConstructorSpace ISO_SUBSPACE_INIT(heap, heap.cellHeapCellType, JSDOMConstructorBase) + , m_domNamespaceObjectSpace ISO_SUBSPACE_INIT(heap, heap.cellHeapCellType, JSDOMObject) + , m_subspaces(makeUnique()) + +{ +} + +#define CLIENT_ISO_SUBSPACE_INIT(subspace) subspace(m_heapData->subspace) + +JSVMClientData::JSVMClientData(VM& vm) + : m_builtinFunctions(vm) + , m_builtinNames(vm) + , m_heapData(JSHeapData::ensureHeapData(vm.heap)) + , CLIENT_ISO_SUBSPACE_INIT(m_domBuiltinConstructorSpace) + , CLIENT_ISO_SUBSPACE_INIT(m_domConstructorSpace) + , CLIENT_ISO_SUBSPACE_INIT(m_domNamespaceObjectSpace) + , m_clientSubspaces(makeUnique()) + +{ +} + +#undef CLIENT_ISO_SUBSPACE_INIT + +JSHeapData* JSHeapData::ensureHeapData(Heap& heap) +{ + if (!Options::useGlobalGC()) + return new JSHeapData(heap); + + static JSHeapData* singleton = nullptr; + static std::once_flag onceFlag; + std::call_once(onceFlag, [&] { + singleton = new JSHeapData(heap); + }); + return singleton; +} + +JSVMClientData::~JSVMClientData() +{ + ASSERT(m_normalWorld->hasOneRef()); + m_normalWorld = nullptr; +} +void JSVMClientData::create(VM* vm) +{ + JSVMClientData* clientData = new JSVMClientData(*vm); + vm->clientData = clientData; // ~VM deletes this pointer. + clientData->m_normalWorld = DOMWrapperWorld::create(*vm, DOMWrapperWorld::Type::Normal); + + vm->heap.addMarkingConstraint(makeUnique(*vm, clientData->heapData())); + vm->m_typedArrayController = adoptRef(new WebCoreTypedArrayController(true)); +} + +} // namespace WebCore \ No newline at end of file -- cgit v1.2.3