aboutsummaryrefslogtreecommitdiff
path: root/src/bun.js/bindings/BunClientData.cpp
diff options
context:
space:
mode:
authorGravatar Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com> 2022-06-22 23:21:48 -0700
committerGravatar Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com> 2022-06-22 23:21:48 -0700
commit729d445b6885f69dd2c6355f38707bd42851c791 (patch)
treef87a7c408929ea3f57bbb7ace380cf869da83c0e /src/bun.js/bindings/BunClientData.cpp
parent25f820c6bf1d8ec6d444ef579cc036b8c0607b75 (diff)
downloadbun-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/BunClientData.cpp')
-rw-r--r--src/bun.js/bindings/BunClientData.cpp82
1 files changed, 82 insertions, 0 deletions
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<Zig::GlobalObject>())
+ , 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<ExtendedDOMIsoSubspaces>())
+
+{
+}
+
+#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<ExtendedDOMClientIsoSubspaces>())
+
+{
+}
+
+#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<WebCore::DOMGCOutputConstraint>(*vm, clientData->heapData()));
+ vm->m_typedArrayController = adoptRef(new WebCoreTypedArrayController(true));
+}
+
+} // namespace WebCore \ No newline at end of file