aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/bun.js/bindings/ModuleLoader.cpp19
1 files changed, 11 insertions, 8 deletions
diff --git a/src/bun.js/bindings/ModuleLoader.cpp b/src/bun.js/bindings/ModuleLoader.cpp
index 1383c891d..19f4ad278 100644
--- a/src/bun.js/bindings/ModuleLoader.cpp
+++ b/src/bun.js/bindings/ModuleLoader.cpp
@@ -42,15 +42,14 @@ static JSC::JSInternalPromise* rejectedInternalPromise(JSC::JSGlobalObject* glob
{
JSC::VM& vm = globalObject->vm();
JSInternalPromise* promise = JSInternalPromise::create(vm, globalObject->internalPromiseStructure());
- promise->internalField(JSC::JSPromise::Field::ReactionsOrResult).set(vm, promise, value);
- promise->internalField(JSC::JSPromise::Field::Flags).set(vm, promise, jsNumber(promise->internalField(JSC::JSPromise::Field::Flags).get().asUInt32AsAnyInt() | JSC::JSPromise::isFirstResolvingFunctionCalledFlag | static_cast<unsigned>(JSC::JSPromise::Status::Rejected)));
- return promise;
+ auto scope = DECLARE_THROW_SCOPE(vm);
+ scope.throwException(globalObject, value);
+ return promise->rejectWithCaughtException(globalObject, scope);
}
static JSC::JSInternalPromise* resolvedInternalPromise(JSC::JSGlobalObject* globalObject, JSC::JSValue value)
{
JSC::VM& vm = globalObject->vm();
-
JSInternalPromise* promise = JSInternalPromise::create(vm, globalObject->internalPromiseStructure());
promise->internalField(JSC::JSPromise::Field::ReactionsOrResult).set(vm, promise, value);
promise->internalField(JSC::JSPromise::Field::Flags).set(vm, promise, jsNumber(promise->internalField(JSC::JSPromise::Field::Flags).get().asUInt32AsAnyInt() | JSC::JSPromise::isFirstResolvingFunctionCalledFlag | static_cast<unsigned>(JSC::JSPromise::Status::Fulfilled)));
@@ -241,6 +240,7 @@ static JSValue handleVirtualModuleResult(
auto resolve = [&](JSValue code) -> JSValue {
res->success = true;
if constexpr (allowPromise) {
+ scope.release();
return resolvedInternalPromise(globalObject, code);
} else {
return code;
@@ -260,6 +260,7 @@ static JSValue handleVirtualModuleResult(
res->success = true;
if constexpr (allowPromise) {
+ scope.release();
return resolvedInternalPromise(globalObject, code);
} else {
return code;
@@ -340,7 +341,9 @@ static JSValue fetchSourceCode(
auto resolve = [&](JSValue code) -> JSValue {
if constexpr (allowPromise) {
- return resolvedInternalPromise(globalObject, code);
+ auto* ret = resolvedInternalPromise(globalObject, code);
+ scope.release();
+ return ret;
} else {
return code;
}
@@ -353,7 +356,9 @@ static JSValue fetchSourceCode(
}
if constexpr (allowPromise) {
- return resolvedInternalPromise(globalObject, code);
+ auto* ret = resolvedInternalPromise(globalObject, code);
+ scope.release();
+ return ret;
} else {
return code;
}
@@ -383,8 +388,6 @@ static JSValue fetchSourceCode(
JSC::SyntheticSourceProvider::create(generateBufferSourceCode,
JSC::SourceOrigin(), WTFMove(moduleKey)));
- auto sourceCode = JSSourceCode::create(vm, WTFMove(source));
-
return rejectOrResolve(JSSourceCode::create(vm, WTFMove(source)));
}
case SyntheticModuleType::Process: {