From bbc263d4883e537fa885fe06ce95d1ce14f82f65 Mon Sep 17 00:00:00 2001 From: pfg Date: Fri, 21 Nov 2025 15:28:02 -0800 Subject: [PATCH] only initialize snapshotSerializersSerializeFunction once --- src/bun.js/bindings/SnapshotSerializers.cpp | 3 ++- src/bun.js/bindings/ZigGlobalObject.cpp | 4 ++++ src/bun.js/bindings/ZigGlobalObject.h | 5 ++++- 3 files changed, 10 insertions(+), 2 deletions(-) diff --git a/src/bun.js/bindings/SnapshotSerializers.cpp b/src/bun.js/bindings/SnapshotSerializers.cpp index 74ae82c928..236500ba7b 100644 --- a/src/bun.js/bindings/SnapshotSerializers.cpp +++ b/src/bun.js/bindings/SnapshotSerializers.cpp @@ -146,7 +146,8 @@ JSValue SnapshotSerializers::serialize(JSGlobalObject* globalObject, JSValue val RETURN_IF_EXCEPTION(scope, {}); // Use JavaScript builtin for iteration to avoid deoptimization at boundaries - JSFunction* serializeBuiltin = JSFunction::create(vm, globalObject, snapshotSerializersSerializeCodeGenerator(vm), globalObject->globalScope()); + // Get the cached function from the global object + JSFunction* serializeBuiltin = jsCast(globalObject)->snapshotSerializersSerializeFunction(); MarkedArgumentBuffer args; args.append(testCallbacks); diff --git a/src/bun.js/bindings/ZigGlobalObject.cpp b/src/bun.js/bindings/ZigGlobalObject.cpp index 48f36ce82c..ecbcd4a387 100644 --- a/src/bun.js/bindings/ZigGlobalObject.cpp +++ b/src/bun.js/bindings/ZigGlobalObject.cpp @@ -2287,6 +2287,10 @@ void GlobalObject::finishCreation(VM& vm) init.set(JSC::JSFunction::create(init.vm, init.owner, WebCore::ipcSerializeCodeGenerator(init.vm), init.owner)); }); + m_snapshotSerializersSerializeFunction.initLater([](const LazyProperty::Initializer& init) { + init.set(JSC::JSFunction::create(init.vm, init.owner, WebCore::snapshotSerializersSerializeCodeGenerator(init.vm), init.owner)); + }); + m_JSFileSinkClassStructure.initLater( [](LazyClassStructure::Initializer& init) { auto* prototype = createJSSinkPrototype(init.vm, init.global, WebCore::SinkID::FileSink); diff --git a/src/bun.js/bindings/ZigGlobalObject.h b/src/bun.js/bindings/ZigGlobalObject.h index f5bcfbf73d..b1a753a25a 100644 --- a/src/bun.js/bindings/ZigGlobalObject.h +++ b/src/bun.js/bindings/ZigGlobalObject.h @@ -278,6 +278,8 @@ public: JSC::JSFunction* wasmStreamingConsumeStreamFunction() const { return m_wasmStreamingConsumeStreamFunction.getInitializedOnMainThread(this); } + JSC::JSFunction* snapshotSerializersSerializeFunction() const { return m_snapshotSerializersSerializeFunction.getInitializedOnMainThread(this); } + JSObject* requireFunctionUnbound() const { return m_requireFunctionUnbound.getInitializedOnMainThread(this); } JSObject* requireResolveFunctionUnbound() const { return m_requireResolveFunctionUnbound.getInitializedOnMainThread(this); } Bun::InternalModuleRegistry* internalModuleRegistry() const { return m_internalModuleRegistry.getInitializedOnMainThread(this); } @@ -633,7 +635,8 @@ public: V(public, LazyPropertyOfGlobalObject, m_nodeVMDontContextify) \ V(public, LazyPropertyOfGlobalObject, m_nodeVMUseMainContextDefaultLoader) \ V(public, LazyPropertyOfGlobalObject, m_ipcSerializeFunction) \ - V(public, LazyPropertyOfGlobalObject, m_ipcParseHandleFunction) + V(public, LazyPropertyOfGlobalObject, m_ipcParseHandleFunction) \ + V(private, LazyPropertyOfGlobalObject, m_snapshotSerializersSerializeFunction) #define DECLARE_GLOBALOBJECT_GC_MEMBER(visibility, T, name) \ visibility: \