aboutsummaryrefslogtreecommitdiff
path: root/src/javascript
diff options
context:
space:
mode:
authorGravatar Jarred Sumner <jarred@jarredsumner.com> 2022-02-21 04:13:37 -0800
committerGravatar Jarred Sumner <jarred@jarredsumner.com> 2022-02-21 04:13:37 -0800
commit4f2fc299a9bc35ac1b74f084f977c66243dacaed (patch)
treecf0b9ef4b57d3559f2e729865b6be083a442d05e /src/javascript
parentefb4baacdfb39d453203fe13f36fbbc884078abf (diff)
downloadbun-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.h15
-rw-r--r--src/javascript/jsc/bindings/Path.h9
-rw-r--r--src/javascript/jsc/bindings/Process.cpp3
-rw-r--r--src/javascript/jsc/bindings/Process.h9
-rw-r--r--src/javascript/jsc/bindings/ZigConsoleClient.cpp8
-rw-r--r--src/javascript/jsc/bindings/ZigConsoleClient.h85
-rw-r--r--src/javascript/jsc/bindings/ZigGlobalObject.cpp10
-rw-r--r--src/javascript/jsc/bindings/ZigGlobalObject.h6
-rw-r--r--src/javascript/jsc/bindings/bindings.cpp12
-rw-r--r--src/javascript/jsc/bindings/bindings.zig22
-rw-r--r--src/javascript/jsc/bindings/headers-cpp.h2
-rw-r--r--src/javascript/jsc/bindings/headers.h2
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>