diff --git a/src/bun.js/bindings/NodeVM.cpp b/src/bun.js/bindings/NodeVM.cpp index 29035b5230..289b423a5d 100644 --- a/src/bun.js/bindings/NodeVM.cpp +++ b/src/bun.js/bindings/NodeVM.cpp @@ -451,6 +451,7 @@ public: JSC::JSUint8Array* getBytecodeBuffer(); const JSC::SourceCode& source() const { return m_source; } + std::vector& cachedData() { return m_options.cachedData; } RefPtr cachedBytecode() const { return m_cachedBytecode; } JSC::ProgramExecutable* cachedExecutable() const { return m_cachedExecutable.get(); } bool cachedDataProduced() const { return m_cachedDataProduced; } @@ -768,11 +769,12 @@ constructScript(JSGlobalObject* globalObject, CallFrame* callFrame, JSValue newT RETURN_IF_EXCEPTION(scope, {}); const bool produceCachedData = options.produceCachedData; - auto cachedData = WTFMove(options.cachedData); auto filename = options.filename; NodeVMScript* script = NodeVMScript::create(vm, globalObject, structure, source, WTFMove(options)); + std::vector& cachedData = script->cachedData(); + if (!cachedData.empty()) { JSC::ProgramExecutable* executable = script->cachedExecutable(); if (!executable) { @@ -782,7 +784,7 @@ constructScript(JSGlobalObject* globalObject, CallFrame* callFrame, JSValue newT JSC::LexicallyScopedFeatures lexicallyScopedFeatures = globalObject->globalScopeExtension() ? JSC::TaintedByWithScopeLexicallyScopedFeature : JSC::NoLexicallyScopedFeatures; JSC::SourceCodeKey key(source, {}, JSC::SourceCodeType::ProgramType, lexicallyScopedFeatures, JSC::JSParserScriptMode::Classic, JSC::DerivedContextType::None, JSC::EvalContextType::None, false, {}, std::nullopt); - Ref cachedBytecode = JSC::CachedBytecode::create(cachedData, nullptr, {}); + Ref cachedBytecode = JSC::CachedBytecode::create(std::span(cachedData), nullptr, {}); JSC::UnlinkedProgramCodeBlock* unlinkedBlock = JSC::decodeCodeBlock(vm, key, WTFMove(cachedBytecode)); if (!unlinkedBlock) { @@ -1776,7 +1778,7 @@ static RefPtr getBytecode(JSGlobalObject* globalObject, JSC JSC::CodeCache* cache = vm.codeCache(); JSC::ParserError parserError; JSC::UnlinkedProgramCodeBlock* unlinked = cache->getUnlinkedProgramCodeBlock(vm, executable, source, {}, parserError); - if (!unlinked || !parserError.isValid()) { + if (!unlinked || parserError.isValid()) { return nullptr; } JSC::LexicallyScopedFeatures lexicallyScopedFeatures = globalObject->globalScopeExtension() ? TaintedByWithScopeLexicallyScopedFeature : NoLexicallyScopedFeatures;