aboutsummaryrefslogtreecommitdiff
path: root/src/javascript/jsc/bindings/BunClientData.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/javascript/jsc/bindings/BunClientData.h')
-rw-r--r--src/javascript/jsc/bindings/BunClientData.h56
1 files changed, 54 insertions, 2 deletions
diff --git a/src/javascript/jsc/bindings/BunClientData.h b/src/javascript/jsc/bindings/BunClientData.h
index 6e3747bb1..fc48148cd 100644
--- a/src/javascript/jsc/bindings/BunClientData.h
+++ b/src/javascript/jsc/bindings/BunClientData.h
@@ -3,12 +3,49 @@
#include "BunBuiltinNames.h"
#include "root.h"
#include <JavaScriptCore/BuiltinUtils.h>
+#include <JavaScriptCore/IsoSubspacePerVM.h>
+#include <JavaScriptCore/JSDestructibleObjectHeapCellType.h>
#include <wtf/HashSet.h>
#include <wtf/RefPtr.h>
namespace Bun {
using namespace JSC;
+enum class UseCustomHeapCellType { Yes,
+ No };
+
+class JSHeapData {
+ WTF_MAKE_NONCOPYABLE(JSHeapData);
+ WTF_MAKE_FAST_ALLOCATED;
+ friend class JSVMClientData;
+
+public:
+ JSHeapData(JSC::Heap&);
+
+ static JSHeapData* ensureHeapData(JSC::Heap&);
+
+ Lock& lock() { return m_lock; }
+ // ExtendedDOMIsoSubspaces& subspaces() { return *m_subspaces.get(); }
+
+ Vector<JSC::IsoSubspace*>& outputConstraintSpaces() { return m_outputConstraintSpaces; }
+
+ template<typename Func>
+ void forEachOutputConstraintSpace(const Func& func)
+ {
+ for (auto* space : m_outputConstraintSpaces)
+ func(*space);
+ }
+
+ JSC::IsoSubspace m_domNamespaceObjectSpace;
+
+private:
+ Lock m_lock;
+
+private:
+ // std::unique_ptr<ExtendedDOMIsoSubspaces> m_subspaces;
+ Vector<JSC::IsoSubspace*> m_outputConstraintSpaces;
+};
+
class JSVMClientData : public JSC::VM::ClientData {
WTF_MAKE_NONCOPYABLE(JSVMClientData);
WTF_MAKE_FAST_ALLOCATED;
@@ -20,20 +57,35 @@ public:
static void create(JSC::VM*);
+ JSHeapData& heapData() { return *m_heapData; }
BunBuiltinNames& builtinNames() { return m_builtinNames; }
+ // ExtendedDOMClientIsoSubspaces& clientSubspaces() { return *m_clientSubspaces.get(); }
// Vector<JSC::IsoSubspace *> &outputConstraintSpaces() { return m_outputConstraintSpaces; }
- // template <typename Func> void forEachOutputConstraintSpace(const Func &func) {
- // for (auto *space : m_outputConstraintSpaces) func(*space);
+ // template<typename Func> void forEachOutputConstraintSpace(const Func& func)
+ // {
+ // for (auto* space : m_outputConstraintSpaces)
+ // func(*space);
// }
private:
BunBuiltinNames m_builtinNames;
+ JSHeapData* m_heapData;
+
// Vector<JSC::IsoSubspace *> m_outputConstraintSpaces;
};
+template<typename T, UseCustomHeapCellType useCustomHeapCellType, typename GetClient, typename SetClient, typename GetServer, typename SetServer>
+ALWAYS_INLINE JSC::GCClient::IsoSubspace* subspaceForImpl(JSC::VM& vm, GetClient getClient, SetClient setClient, GetServer getServer, SetServer setServer, JSC::HeapCellType& (*getCustomHeapCellType)(JSHeapData&) = nullptr)
+{
+ static NeverDestroyed<JSC::IsoSubspacePerVM> perVM([](JSC::Heap& heap) {
+ return ISO_SUBSPACE_PARAMETERS(heap.destructibleObjectHeapCellType, T);
+ });
+ return &perVM.get().clientIsoSubspaceforVM(vm);
+}
+
static JSVMClientData* clientData(JSC::VM& vm)
{
return static_cast<Bun::JSVMClientData*>(vm.clientData);