From 5b6aa34e2590068d4a361b68733b000381e784fb Mon Sep 17 00:00:00 2001 From: pfg Date: Fri, 13 Dec 2024 19:33:23 -0800 Subject: [PATCH 1/3] add BunTranspiledModule and external Bun__analyzeTranspiledModule --- Source/JavaScriptCore/parser/SourceProvider.h | 3 +++ .../JavaScriptCore/runtime/JSModuleLoader.cpp | 20 +++++++++++++++++++ .../runtime/ModuleProgramExecutable.cpp | 3 ++- 3 files changed, 25 insertions(+), 1 deletion(-) diff --git a/Source/JavaScriptCore/parser/SourceProvider.h b/Source/JavaScriptCore/parser/SourceProvider.h index 457c8f52ca2b8..1dca037d176ca 100644 --- a/Source/JavaScriptCore/parser/SourceProvider.h +++ b/Source/JavaScriptCore/parser/SourceProvider.h @@ -56,6 +56,9 @@ class UnlinkedFunctionCodeBlock; JSON, Synthetic, ImportMap, +#if USE(BUN_JSC_ADDITIONS) + BunTranspiledModule, +#endif }; using BytecodeCacheGenerator = Function()>; diff --git a/Source/JavaScriptCore/runtime/JSModuleLoader.cpp b/Source/JavaScriptCore/runtime/JSModuleLoader.cpp index 1fa09164e9859..1771030939155 100644 --- a/Source/JavaScriptCore/runtime/JSModuleLoader.cpp +++ b/Source/JavaScriptCore/runtime/JSModuleLoader.cpp @@ -309,6 +309,19 @@ JSValue JSModuleLoader::evaluateNonVirtual(JSGlobalObject* globalObject, JSValue return jsUndefined(); } + +#if USE(BUN_JSC_ADDITIONS) +extern "C" __attribute__((weak)) EncodedJSValue Bun__analyzeTranspiledModule(JSGlobalObject* globalObject, const Identifier& moduleKey, const SourceCode& sourceCode, JSInternalPromise* promise) { + (void)globalObject; + (void)moduleKey; + (void)sourceCode; + (void)promise; + + promise->reject(globalObject, createError(globalObject, makeString("Bun__analyzeTranspiledModule is not implemented"_s))); + return JSValue::encode(promise); +} +#endif + JSModuleNamespaceObject* JSModuleLoader::getModuleNamespaceObject(JSGlobalObject* globalObject, JSValue moduleRecordValue) { VM& vm = globalObject->vm(); @@ -375,6 +388,13 @@ JSC_DEFINE_HOST_FUNCTION(moduleLoaderParseModule, (JSGlobalObject* globalObject, promise->fulfillWithNonPromise(globalObject, moduleRecord); return JSValue::encode(promise); } +#if USE(BUN_JSC_ADDITIONS) + case SourceProviderSourceType::BunTranspiledModule: { + EncodedJSValue result = Bun__analyzeTranspiledModule(globalObject, moduleKey, sourceCode, promise); + scope.release(); + return result; + } +#endif default: { break; } diff --git a/Source/JavaScriptCore/runtime/ModuleProgramExecutable.cpp b/Source/JavaScriptCore/runtime/ModuleProgramExecutable.cpp index 2a8f9465caba9..b75644af08488 100644 --- a/Source/JavaScriptCore/runtime/ModuleProgramExecutable.cpp +++ b/Source/JavaScriptCore/runtime/ModuleProgramExecutable.cpp @@ -35,7 +35,8 @@ const ClassInfo ModuleProgramExecutable::s_info = { "ModuleProgramExecutable"_s, ModuleProgramExecutable::ModuleProgramExecutable(JSGlobalObject* globalObject, const SourceCode& source) : Base(globalObject->vm().moduleProgramExecutableStructure.get(), globalObject->vm(), source, StrictModeLexicallyScopedFeature, DerivedContextType::None, false, false, EvalContextType::None, NoIntrinsic) { - ASSERT(source.provider()->sourceType() == SourceProviderSourceType::Module); + SourceProviderSourceType sourceType = source.provider()->sourceType(); + ASSERT(sourceType == SourceProviderSourceType::Module || sourceType == SourceProviderSourceType::BunTranspiledModule); VM& vm = globalObject->vm(); if (vm.typeProfiler() || vm.controlFlowProfiler()) vm.functionHasExecutedCache()->insertUnexecutedRange(sourceID(), typeProfilingStartOffset(), typeProfilingEndOffset()); From 1ead0043237323e1ba457d00f9683a41a8e63884 Mon Sep 17 00:00:00 2001 From: pfg Date: Fri, 13 Dec 2024 19:37:20 -0800 Subject: [PATCH 2/3] fix the assert --- Source/JavaScriptCore/runtime/ModuleProgramExecutable.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/Source/JavaScriptCore/runtime/ModuleProgramExecutable.cpp b/Source/JavaScriptCore/runtime/ModuleProgramExecutable.cpp index b75644af08488..406c55bafe377 100644 --- a/Source/JavaScriptCore/runtime/ModuleProgramExecutable.cpp +++ b/Source/JavaScriptCore/runtime/ModuleProgramExecutable.cpp @@ -36,7 +36,11 @@ ModuleProgramExecutable::ModuleProgramExecutable(JSGlobalObject* globalObject, c : Base(globalObject->vm().moduleProgramExecutableStructure.get(), globalObject->vm(), source, StrictModeLexicallyScopedFeature, DerivedContextType::None, false, false, EvalContextType::None, NoIntrinsic) { SourceProviderSourceType sourceType = source.provider()->sourceType(); - ASSERT(sourceType == SourceProviderSourceType::Module || sourceType == SourceProviderSourceType::BunTranspiledModule); + ASSERT(sourceType == SourceProviderSourceType::Module + #if USE(BUN_JSC_ADDITIONS) + || sourceType == SourceProviderSourceType::BunTranspiledModule + #endif + ); VM& vm = globalObject->vm(); if (vm.typeProfiler() || vm.controlFlowProfiler()) vm.functionHasExecutedCache()->insertUnexecutedRange(sourceID(), typeProfilingStartOffset(), typeProfilingEndOffset()); From 67f16adcef5cdcaeb95d64343fe67774933cce39 Mon Sep 17 00:00:00 2001 From: pfg Date: Fri, 13 Dec 2024 19:47:38 -0800 Subject: [PATCH 3/3] RELEASE_AND_RETURN --- Source/JavaScriptCore/runtime/JSModuleLoader.cpp | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/Source/JavaScriptCore/runtime/JSModuleLoader.cpp b/Source/JavaScriptCore/runtime/JSModuleLoader.cpp index 1771030939155..92e5c9c375f08 100644 --- a/Source/JavaScriptCore/runtime/JSModuleLoader.cpp +++ b/Source/JavaScriptCore/runtime/JSModuleLoader.cpp @@ -390,9 +390,7 @@ JSC_DEFINE_HOST_FUNCTION(moduleLoaderParseModule, (JSGlobalObject* globalObject, } #if USE(BUN_JSC_ADDITIONS) case SourceProviderSourceType::BunTranspiledModule: { - EncodedJSValue result = Bun__analyzeTranspiledModule(globalObject, moduleKey, sourceCode, promise); - scope.release(); - return result; + RELEASE_AND_RETURN(scope, Bun__analyzeTranspiledModule(globalObject, moduleKey, sourceCode, promise)); } #endif default: {