diff options
author | 2022-02-21 04:13:37 -0800 | |
---|---|---|
committer | 2022-02-21 04:13:37 -0800 | |
commit | 4f2fc299a9bc35ac1b74f084f977c66243dacaed (patch) | |
tree | cf0b9ef4b57d3559f2e729865b6be083a442d05e /src/javascript | |
parent | efb4baacdfb39d453203fe13f36fbbc884078abf (diff) | |
download | bun-4f2fc299a9bc35ac1b74f084f977c66243dacaed.tar.gz bun-4f2fc299a9bc35ac1b74f084f977c66243dacaed.tar.zst bun-4f2fc299a9bc35ac1b74f084f977c66243dacaed.zip |
upgrade JSC
Diffstat (limited to 'src/javascript')
-rw-r--r-- | src/javascript/jsc/bindings/BunStream.h | 15 | ||||
-rw-r--r-- | src/javascript/jsc/bindings/Path.h | 9 | ||||
-rw-r--r-- | src/javascript/jsc/bindings/Process.cpp | 3 | ||||
-rw-r--r-- | src/javascript/jsc/bindings/Process.h | 9 | ||||
-rw-r--r-- | src/javascript/jsc/bindings/ZigConsoleClient.cpp | 8 | ||||
-rw-r--r-- | src/javascript/jsc/bindings/ZigConsoleClient.h | 85 | ||||
-rw-r--r-- | src/javascript/jsc/bindings/ZigGlobalObject.cpp | 10 | ||||
-rw-r--r-- | src/javascript/jsc/bindings/ZigGlobalObject.h | 6 | ||||
-rw-r--r-- | src/javascript/jsc/bindings/bindings.cpp | 12 | ||||
-rw-r--r-- | src/javascript/jsc/bindings/bindings.zig | 22 | ||||
-rw-r--r-- | src/javascript/jsc/bindings/headers-cpp.h | 2 | ||||
-rw-r--r-- | src/javascript/jsc/bindings/headers.h | 2 |
12 files changed, 96 insertions, 87 deletions
diff --git a/src/javascript/jsc/bindings/BunStream.h b/src/javascript/jsc/bindings/BunStream.h index 37762d689..0fdf87beb 100644 --- a/src/javascript/jsc/bindings/BunStream.h +++ b/src/javascript/jsc/bindings/BunStream.h @@ -23,9 +23,8 @@ class Readable : public JSC::JSNonFinalObject { static constexpr unsigned StructureFlags = Base::StructureFlags; - template <typename CellType, JSC::SubspaceAccess> - static JSC::CompleteSubspace *subspaceFor(JSC::VM &vm) { - return &vm.cellSpace; + template <typename CellType, SubspaceAccess> static GCClient::IsoSubspace *subspaceFor(VM &vm) { + return &vm.plainObjectSpace(); } static JSC::Structure *createStructure(JSC::VM &vm, JSC::JSGlobalObject *globalObject, @@ -36,7 +35,7 @@ class Readable : public JSC::JSNonFinalObject { static Readable *create(JSC::VM &vm, Bun__Readable *state, JSC::Structure *structure) { Readable *accessor = - new (NotNull, JSC::allocateCell<Bun::Readable>(vm.heap)) Readable(vm, state, structure); + new (NotNull, JSC::allocateCell<Bun::Readable>(vm)) Readable(vm, state, structure); accessor->finishCreation(vm); return accessor; } @@ -57,9 +56,8 @@ class Writable : public JSC::JSNonFinalObject { static constexpr unsigned StructureFlags = Base::StructureFlags; - template <typename CellType, JSC::SubspaceAccess> - static JSC::CompleteSubspace *subspaceFor(JSC::VM &vm) { - return &vm.cellSpace; + template <typename CellType, SubspaceAccess> static GCClient::IsoSubspace *subspaceFor(VM &vm) { + return &vm.plainObjectSpace(); } static JSC::Structure *createStructure(JSC::VM &vm, JSC::JSGlobalObject *globalObject, @@ -69,8 +67,9 @@ class Writable : public JSC::JSNonFinalObject { } static Writable *create(JSC::VM &vm, Bun__Writable *state, JSC::Structure *structure) { + Writable *accessor = - new (NotNull, JSC::allocateCell<Writable>(vm.heap)) Writable(vm, state, structure); + new (NotNull, JSC::allocateCell<Writable>(vm)) Writable(vm, state, structure); accessor->finishCreation(vm); return accessor; } diff --git a/src/javascript/jsc/bindings/Path.h b/src/javascript/jsc/bindings/Path.h index 546a542a6..1c1c7817b 100644 --- a/src/javascript/jsc/bindings/Path.h +++ b/src/javascript/jsc/bindings/Path.h @@ -6,6 +6,8 @@ namespace Zig { +using namespace JSC; + class Path : public JSC::JSNonFinalObject { using Base = JSC::JSNonFinalObject; @@ -18,9 +20,8 @@ class Path : public JSC::JSNonFinalObject { static constexpr unsigned StructureFlags = Base::StructureFlags; - template <typename CellType, JSC::SubspaceAccess> - static JSC::CompleteSubspace *subspaceFor(JSC::VM &vm) { - return &vm.cellSpace; + template <typename CellType, SubspaceAccess> static GCClient::IsoSubspace *subspaceFor(VM &vm) { + return &vm.plainObjectSpace(); } static JSC::Structure *createStructure(JSC::VM &vm, JSC::JSGlobalObject *globalObject, @@ -30,7 +31,7 @@ class Path : public JSC::JSNonFinalObject { } static Path *create(JSC::VM &vm, bool isWindows, JSC::Structure *structure) { - Path *accessor = new (NotNull, JSC::allocateCell<Path>(vm.heap)) Path(vm, structure, isWindows); + Path *accessor = new (NotNull, JSC::allocateCell<Path>(vm)) Path(vm, structure, isWindows); accessor->finishCreation(vm); return accessor; diff --git a/src/javascript/jsc/bindings/Process.cpp b/src/javascript/jsc/bindings/Process.cpp index 754c1d96b..7a1b37167 100644 --- a/src/javascript/jsc/bindings/Process.cpp +++ b/src/javascript/jsc/bindings/Process.cpp @@ -53,7 +53,8 @@ static JSC_DEFINE_HOST_FUNCTION(Process_functionNextTick, case 1: { // This is a JSC builtin function - globalObject->queueMicrotask(JSC::createJSMicrotask(vm, job)); + globalObject->queueMicrotask(JSC::createJSMicrotask(vm, job, JSC::JSValue{}, JSC::JSValue{}, + JSC::JSValue{}, JSC::JSValue{})); break; } diff --git a/src/javascript/jsc/bindings/Process.h b/src/javascript/jsc/bindings/Process.h index 7e025bc3a..e6b391e8f 100644 --- a/src/javascript/jsc/bindings/Process.h +++ b/src/javascript/jsc/bindings/Process.h @@ -6,6 +6,8 @@ namespace Zig { +using namespace JSC; + class Process : public JSC::JSNonFinalObject { using Base = JSC::JSNonFinalObject; @@ -16,9 +18,8 @@ class Process : public JSC::JSNonFinalObject { static constexpr unsigned StructureFlags = Base::StructureFlags; - template <typename CellType, JSC::SubspaceAccess> - static JSC::CompleteSubspace *subspaceFor(JSC::VM &vm) { - return &vm.cellSpace; + template <typename CellType, SubspaceAccess> static GCClient::IsoSubspace *subspaceFor(VM &vm) { + return &vm.plainObjectSpace(); } static JSC::Structure *createStructure(JSC::VM &vm, JSC::JSGlobalObject *globalObject, @@ -28,7 +29,7 @@ class Process : public JSC::JSNonFinalObject { } static Process *create(JSC::VM &vm, JSC::Structure *structure) { - Process *accessor = new (NotNull, JSC::allocateCell<Process>(vm.heap)) Process(vm, structure); + Process *accessor = new (NotNull, JSC::allocateCell<Process>(vm)) Process(vm, structure); accessor->finishCreation(vm); return accessor; } diff --git a/src/javascript/jsc/bindings/ZigConsoleClient.cpp b/src/javascript/jsc/bindings/ZigConsoleClient.cpp index 9e7bf7d3f..75d137e3c 100644 --- a/src/javascript/jsc/bindings/ZigConsoleClient.cpp +++ b/src/javascript/jsc/bindings/ZigConsoleClient.cpp @@ -15,12 +15,12 @@ using String = WTF::String; namespace JSC { -ALWAYS_INLINE GCDeferralContext::GCDeferralContext(Heap &heap) : m_heap(heap) {} +ALWAYS_INLINE GCDeferralContext::GCDeferralContext(VM &vm) : m_vm(vm) {} ALWAYS_INLINE GCDeferralContext::~GCDeferralContext() { - if constexpr (validateDFGDoesGC) m_heap.verifyCanGC(); + if constexpr (validateDFGDoesGC) m_vm.verifyCanGC(); - if (UNLIKELY(m_shouldGC)) m_heap.collectIfNecessaryOrDefer(); + if (UNLIKELY(m_shouldGC)) m_vm.heap.collectIfNecessaryOrDefer(); } } // namespace JSC @@ -58,7 +58,7 @@ void Zig::ConsoleClient::messageWithTypeAndLevel(MessageType type, MessageLevel JSC::JSGlobalObject *globalObject, Ref<ScriptArguments> &&arguments) { JSC::VM &vm = globalObject->vm(); - JSC::GCDeferralContext deferralContext(vm.heap); + JSC::GCDeferralContext deferralContext(vm); JSC::DisallowGC disallowGC; auto args = arguments.ptr(); JSC__JSValue jsArgs[255]; diff --git a/src/javascript/jsc/bindings/ZigConsoleClient.h b/src/javascript/jsc/bindings/ZigConsoleClient.h index ee230234d..61a0cc542 100644 --- a/src/javascript/jsc/bindings/ZigConsoleClient.h +++ b/src/javascript/jsc/bindings/ZigConsoleClient.h @@ -8,57 +8,58 @@ namespace Inspector { class InspectorConsoleAgent; class InspectorDebuggerAgent; class InspectorScriptProfilerAgent; -} +} // namespace Inspector namespace Zig { - using InspectorConsoleAgent = Inspector::InspectorConsoleAgent; - using InspectorDebuggerAgent = Inspector::InspectorDebuggerAgent; - using InspectorScriptProfilerAgent = Inspector::InspectorScriptProfilerAgent; - +using InspectorConsoleAgent = Inspector::InspectorConsoleAgent; +using InspectorDebuggerAgent = Inspector::InspectorDebuggerAgent; +using InspectorScriptProfilerAgent = Inspector::InspectorScriptProfilerAgent; +using namespace JSC; class ConsoleClient final : public JSC::ConsoleClient { - WTF_MAKE_FAST_ALLOCATED; -public: - ~ConsoleClient() final { } - ConsoleClient(void* client) : JSC::ConsoleClient() { - m_client = client; - } - + WTF_MAKE_FAST_ALLOCATED; - static bool logToSystemConsole(); - static void setLogToSystemConsole(bool); + public: + ~ConsoleClient() final {} + ConsoleClient(void *client) : JSC::ConsoleClient() { m_client = client; } - void setDebuggerAgent(InspectorDebuggerAgent* agent) { m_debuggerAgent = agent; } - void setPersistentScriptProfilerAgent(InspectorScriptProfilerAgent* agent) { m_scriptProfilerAgent = agent; } + static bool logToSystemConsole(); + static void setLogToSystemConsole(bool); - void* m_client; -private: + void setDebuggerAgent(InspectorDebuggerAgent *agent) { m_debuggerAgent = agent; } + void setPersistentScriptProfilerAgent(InspectorScriptProfilerAgent *agent) { + m_scriptProfilerAgent = agent; + } - void messageWithTypeAndLevel(MessageType, MessageLevel, JSC::JSGlobalObject*, Ref<Inspector::ScriptArguments>&&); - void count(JSC::JSGlobalObject*, const String& label); - void countReset(JSC::JSGlobalObject*, const String& label); - void profile(JSC::JSGlobalObject*, const String& title); - void profileEnd(JSC::JSGlobalObject*, const String& title); - void takeHeapSnapshot(JSC::JSGlobalObject*, const String& title); - void time(JSC::JSGlobalObject*, const String& label); - void timeLog(JSC::JSGlobalObject*, const String& label, Ref<Inspector::ScriptArguments>&&); - void timeEnd(JSC::JSGlobalObject*, const String& label); - void timeStamp(JSC::JSGlobalObject*, Ref<Inspector::ScriptArguments>&&); - void record(JSC::JSGlobalObject*, Ref<Inspector::ScriptArguments>&&); - void recordEnd(JSC::JSGlobalObject*, Ref<Inspector::ScriptArguments>&&); - void screenshot(JSC::JSGlobalObject*, Ref<Inspector::ScriptArguments>&&); + void *m_client; - void warnUnimplemented(const String& method); - void internalAddMessage(MessageType, MessageLevel, JSC::JSGlobalObject*, Ref<Inspector::ScriptArguments>&&); + private: + void messageWithTypeAndLevel(MessageType, MessageLevel, JSC::JSGlobalObject *, + Ref<Inspector::ScriptArguments> &&); + void count(JSC::JSGlobalObject *, const String &label); + void countReset(JSC::JSGlobalObject *, const String &label); + void profile(JSC::JSGlobalObject *, const String &title); + void profileEnd(JSC::JSGlobalObject *, const String &title); + void takeHeapSnapshot(JSC::JSGlobalObject *, const String &title); + void time(JSC::JSGlobalObject *, const String &label); + void timeLog(JSC::JSGlobalObject *, const String &label, Ref<Inspector::ScriptArguments> &&); + void timeEnd(JSC::JSGlobalObject *, const String &label); + void timeStamp(JSC::JSGlobalObject *, Ref<Inspector::ScriptArguments> &&); + void record(JSC::JSGlobalObject *, Ref<Inspector::ScriptArguments> &&); + void recordEnd(JSC::JSGlobalObject *, Ref<Inspector::ScriptArguments> &&); + void screenshot(JSC::JSGlobalObject *, Ref<Inspector::ScriptArguments> &&); - void startConsoleProfile(); - void stopConsoleProfile(); + void warnUnimplemented(const String &method); + void internalAddMessage(MessageType, MessageLevel, JSC::JSGlobalObject *, + Ref<Inspector::ScriptArguments> &&); - Inspector::InspectorConsoleAgent* m_consoleAgent; - Inspector::InspectorDebuggerAgent* m_debuggerAgent { nullptr }; - Inspector::InspectorScriptProfilerAgent* m_scriptProfilerAgent { nullptr }; - Vector<String> m_profiles; - bool m_profileRestoreBreakpointActiveValue { false }; -}; + void startConsoleProfile(); + void stopConsoleProfile(); -} + Inspector::InspectorConsoleAgent *m_consoleAgent; + Inspector::InspectorDebuggerAgent *m_debuggerAgent{nullptr}; + Inspector::InspectorScriptProfilerAgent *m_scriptProfilerAgent{nullptr}; + Vector<String> m_profiles; + bool m_profileRestoreBreakpointActiveValue{false}; +}; +} // namespace Zig diff --git a/src/javascript/jsc/bindings/ZigGlobalObject.cpp b/src/javascript/jsc/bindings/ZigGlobalObject.cpp index 75568eb9e..8b0eebc63 100644 --- a/src/javascript/jsc/bindings/ZigGlobalObject.cpp +++ b/src/javascript/jsc/bindings/ZigGlobalObject.cpp @@ -104,7 +104,7 @@ extern "C" void JSCInitialize() { extern "C" JSC__JSGlobalObject *Zig__GlobalObject__create(JSClassRef *globalObjectClass, int count, void *console_client) { - auto heapSize = JSC::LargeHeap; + auto heapSize = JSC::HeapType::Large; JSC::VM &vm = JSC::VM::create(heapSize).leakRef(); Bun::JSVMClientData::create(&vm); @@ -259,7 +259,7 @@ static Zig::ConsoleClient *m_console; void GlobalObject::setConsole(void *console) { m_console = new Zig::ConsoleClient(console); - this->setConsoleClient(makeWeakPtr(m_console)); + this->setConsoleClient(m_console); } #pragma mark - Globals @@ -324,7 +324,8 @@ static JSC_DEFINE_HOST_FUNCTION(functionQueueMicrotask, } // This is a JSC builtin function - globalObject->queueMicrotask(JSC::createJSMicrotask(vm, job)); + globalObject->queueMicrotask(JSC::createJSMicrotask(vm, job, JSC::JSValue{}, JSC::JSValue{}, + JSC::JSValue{}, JSC::JSValue{})); return JSC::JSValue::encode(JSC::jsUndefined()); } @@ -350,7 +351,8 @@ static JSC_DEFINE_HOST_FUNCTION(functionSetTimeout, } if (callFrame->argumentCount() == 1) { - globalObject->queueMicrotask(JSC::createJSMicrotask(vm, job)); + globalObject->queueMicrotask(JSC::createJSMicrotask(vm, job, JSC::JSValue{}, JSC::JSValue{}, + JSC::JSValue{}, JSC::JSValue{})); return JSC::JSValue::encode(JSC::jsNumber(Bun__Timer__getNextID())); } diff --git a/src/javascript/jsc/bindings/ZigGlobalObject.h b/src/javascript/jsc/bindings/ZigGlobalObject.h index 3d5d389e0..48f5a1a02 100644 --- a/src/javascript/jsc/bindings/ZigGlobalObject.h +++ b/src/javascript/jsc/bindings/ZigGlobalObject.h @@ -27,13 +27,12 @@ class GlobalObject : public JSC::JSGlobalObject { Zig::Process *m_process; static constexpr bool needsDestruction = true; template <typename CellType, JSC::SubspaceAccess mode> - static JSC::IsoSubspace *subspaceFor(JSC::VM &vm) { + static GCClient::IsoSubspace *subspaceFor(VM &vm) { return vm.globalObjectSpace<mode>(); } static GlobalObject *create(JSC::VM &vm, JSC::Structure *structure) { - auto *object = - new (NotNull, JSC::allocateCell<GlobalObject>(vm.heap)) GlobalObject(vm, structure); + auto *object = new (NotNull, JSC::allocateCell<GlobalObject>(vm)) GlobalObject(vm, structure); object->finishCreation(vm); return object; } @@ -80,7 +79,6 @@ class JSMicrotaskCallback : public RefCounted<JSMicrotaskCallback> { } void call() { - auto protectedThis{makeRef(*this)}; JSC::VM &vm = m_globalObject->vm(); auto task = &m_task.get(); task->run(m_globalObject.get()); diff --git a/src/javascript/jsc/bindings/bindings.cpp b/src/javascript/jsc/bindings/bindings.cpp index 542b688f9..ece7b448c 100644 --- a/src/javascript/jsc/bindings/bindings.cpp +++ b/src/javascript/jsc/bindings/bindings.cpp @@ -1842,15 +1842,19 @@ bool JSC__JSValue__isTerminationException(JSC__JSValue JSValue0, JSC__VM *arg1) void JSC__VM__shrinkFootprint(JSC__VM *arg0) { arg0->shrinkFootprintWhenIdle(); }; void JSC__VM__whenIdle(JSC__VM *arg0, void (*ArgFn1)()) { arg0->whenIdle(ArgFn1); }; -JSC__JSLock *JSC__VM__apiLock(JSC__VM *arg0) { return makeRefPtr((*arg0).apiLock()).leakRef(); } +thread_local JSC::VM *g_commonVMOrNull; JSC__VM *JSC__VM__create(unsigned char HeapType0) { - JSC::VM *vm = - &JSC::VM::create(HeapType0 == JSC::SmallHeap ? JSC::SmallHeap : JSC::LargeHeap).leakRef(); + + auto &vm = JSC::VM::create(HeapType0 == 0 ? JSC::HeapType::Small : JSC::HeapType::Large, nullptr) + .leakRef(); #if ENABLE(WEBASSEMBLY) JSC::Wasm::enableFastMemory(); #endif - return vm; + g_commonVMOrNull = &vm; + vm.heap.acquireAccess(); // At any time, we may do things that affect the GC. + + return g_commonVMOrNull; } void JSC__VM__holdAPILock(JSC__VM *arg0, void *ctx, void (*callback)(void *arg0)) { diff --git a/src/javascript/jsc/bindings/bindings.zig b/src/javascript/jsc/bindings/bindings.zig index 7f28f3ad0..3efb23323 100644 --- a/src/javascript/jsc/bindings/bindings.zig +++ b/src/javascript/jsc/bindings/bindings.zig @@ -1410,6 +1410,7 @@ pub const JSValue = enum(i64) { pub const JSType = enum(u8) { // The Cell value must come before any JS that is a JSCell. Cell, + Structure, String, HeapBigInt, Symbol, @@ -1454,14 +1455,14 @@ pub const JSValue = enum(i64) { ScopedArguments, ClonedArguments, - // Start JSArray types. + // Start JSArray s. Array, DerivedArray, - // End JSArray types. + // End JSArray s. ArrayBuffer, - // Start JSArrayBufferView types. Keep in sync with the order of FOR_EACH_TYPED_ARRAY_TYPE_EXCLUDING_DATA_VIEW. + // Start JSArrayBufferView s. Keep in sync with the order of FOR_EACH_D_ARRAY__EXCLUDING_DATA_VIEW. Int8Array, Uint8Array, Uint8ClampedArray, @@ -1474,25 +1475,26 @@ pub const JSValue = enum(i64) { BigInt64Array, BigUint64Array, DataView, - // End JSArrayBufferView types. + // End JSArrayBufferView s. // JSScope <- JSWithScope // <- StrictEvalActivation // <- JSSymbolTableObject <- JSLexicalEnvironment <- JSModuleEnvironment // <- JSSegmentedVariableObject <- JSGlobalLexicalEnvironment // <- JSGlobalObject - // Start JSScope types. - // Start environment record types. + // Start JSScope s. + // Start environment record s. GlobalObject, GlobalLexicalEnvironment, LexicalEnvironment, ModuleEnvironment, StrictEvalActivation, - // End environment record types. + // End environment record s. WithScope, - // End JSScope types. + // End JSScope s. ModuleNamespaceObject, + ShadowRealm, RegExpObject, JSDate, ProxyObject, @@ -1508,10 +1510,10 @@ pub const JSValue = enum(i64) { JSWeakMap, JSWeakSet, WebAssemblyModule, - // Start StringObject types. + // Start StringObject s. StringObject, DerivedStringObject, - // End StringObject types. + // End StringObject s. MaxJS = 0b11111111, _, diff --git a/src/javascript/jsc/bindings/headers-cpp.h b/src/javascript/jsc/bindings/headers-cpp.h index caf82035b..0b39c3db4 100644 --- a/src/javascript/jsc/bindings/headers-cpp.h +++ b/src/javascript/jsc/bindings/headers-cpp.h @@ -1,4 +1,4 @@ -//-- AUTOGENERATED FILE -- 1645172173 +//-- AUTOGENERATED FILE -- 1645443002 // clang-format off #pragma once diff --git a/src/javascript/jsc/bindings/headers.h b/src/javascript/jsc/bindings/headers.h index b769c49db..7f5eff2bc 100644 --- a/src/javascript/jsc/bindings/headers.h +++ b/src/javascript/jsc/bindings/headers.h @@ -1,5 +1,5 @@ // clang-format: off -//-- AUTOGENERATED FILE -- 1645172173 +//-- AUTOGENERATED FILE -- 1645443002 #pragma once #include <stddef.h> |