aboutsummaryrefslogtreecommitdiff
path: root/src/bun.js/bindings/NodeVMScript.cpp
diff options
context:
space:
mode:
authorGravatar Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com> 2023-05-19 19:35:05 -0700
committerGravatar Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com> 2023-05-19 19:35:05 -0700
commita3841a7de94a881a8a783aa414ffefb7f65aaea7 (patch)
treefaf383076c60d79682cde03af5e56df1cb42d97b /src/bun.js/bindings/NodeVMScript.cpp
parent386ac374d5a0d07a98ebedc5097899f5ccdc47aa (diff)
downloadbun-a3841a7de94a881a8a783aa414ffefb7f65aaea7.tar.gz
bun-a3841a7de94a881a8a783aa414ffefb7f65aaea7.tar.zst
bun-a3841a7de94a881a8a783aa414ffefb7f65aaea7.zip
Fix failing node:vm tests
Diffstat (limited to 'src/bun.js/bindings/NodeVMScript.cpp')
-rw-r--r--src/bun.js/bindings/NodeVMScript.cpp30
1 files changed, 21 insertions, 9 deletions
diff --git a/src/bun.js/bindings/NodeVMScript.cpp b/src/bun.js/bindings/NodeVMScript.cpp
index 62de103fe..7fc4fc3ef 100644
--- a/src/bun.js/bindings/NodeVMScript.cpp
+++ b/src/bun.js/bindings/NodeVMScript.cpp
@@ -120,7 +120,7 @@ constructScript(JSGlobalObject* globalObject, CallFrame* callFrame, JSValue newT
auto scope = DECLARE_THROW_SCOPE(vm);
SourceCode source(
- JSC::StringSourceProvider::create(sourceString, JSC::SourceOrigin(), options.filename, TextPosition(options.lineOffset, options.columnOffset)),
+ JSC::StringSourceProvider::create(sourceString, JSC::SourceOrigin(WTF::URL::fileURLWithFileSystemPath(options.filename)), options.filename, TextPosition(options.lineOffset, options.columnOffset)),
options.lineOffset.zeroBasedInt(), options.columnOffset.zeroBasedInt());
RETURN_IF_EXCEPTION(scope, {});
NodeVMScript* script = NodeVMScript::create(vm, globalObject, structure, source);
@@ -263,7 +263,7 @@ JSC_DEFINE_HOST_FUNCTION(vmModuleRunInNewContext, (JSGlobalObject * globalObject
}
}
SourceCode source(
- JSC::StringSourceProvider::create(sourceString, JSC::SourceOrigin(), options.filename, TextPosition(options.lineOffset, options.columnOffset)),
+ JSC::StringSourceProvider::create(sourceString, JSC::SourceOrigin(WTF::URL::fileURLWithFileSystemPath(options.filename)), options.filename, TextPosition(options.lineOffset, options.columnOffset)),
options.lineOffset.zeroBasedInt(), options.columnOffset.zeroBasedInt());
auto* zigGlobal = reinterpret_cast<Zig::GlobalObject*>(globalObject);
@@ -284,7 +284,7 @@ JSC_DEFINE_HOST_FUNCTION(vmModuleRunInNewContext, (JSGlobalObject * globalObject
JSScope* contextScope = JSWithScope::create(vm, targetContext, targetContext->globalScope(), context);
auto catchScope = DECLARE_CATCH_SCOPE(vm);
- JSValue result = vm.interpreter.executeEval(executable, globalObject, contextScope);
+ JSValue result = vm.interpreter.executeEval(executable, targetContext, contextScope);
if (UNLIKELY(catchScope.exception())) {
auto returnedException = catchScope.exception();
catchScope.clearException();
@@ -332,7 +332,7 @@ JSC_DEFINE_HOST_FUNCTION(vmModuleRunInThisContext, (JSGlobalObject * globalObjec
}
}
SourceCode source(
- JSC::StringSourceProvider::create(sourceString, JSC::SourceOrigin(), options.filename, TextPosition(options.lineOffset, options.columnOffset)),
+ JSC::StringSourceProvider::create(sourceString, JSC::SourceOrigin(WTF::URL::fileURLWithFileSystemPath(options.filename)), options.filename, TextPosition(options.lineOffset, options.columnOffset)),
options.lineOffset.zeroBasedInt(), options.columnOffset.zeroBasedInt());
auto* zigGlobal = reinterpret_cast<Zig::GlobalObject*>(globalObject);
JSObject* context = asObject(contextObjectValue);
@@ -397,7 +397,7 @@ JSC_DEFINE_HOST_FUNCTION(scriptRunInNewContext, (JSGlobalObject * globalObject,
// proxy->setTarget(vm, targetContext);
// context->setPrototypeDirect(vm, proxy);
- JSScope* contextScope = JSWithScope::create(vm, globalObject, globalObject->globalScope(), context);
+ JSScope* contextScope = JSWithScope::create(vm, targetContext, targetContext->globalScope(), context);
return runInContext(globalObject, script, targetContext, contextScope, callFrame->argument(0));
}
JSC_DEFINE_HOST_FUNCTION(scriptRunInThisContext, (JSGlobalObject * globalObject, CallFrame* callFrame))
@@ -405,13 +405,25 @@ JSC_DEFINE_HOST_FUNCTION(scriptRunInThisContext, (JSGlobalObject * globalObject,
auto& vm = globalObject->vm();
JSValue thisValue = callFrame->thisValue();
auto* script = jsDynamicCast<NodeVMScript*>(thisValue);
+ auto throwScope = DECLARE_THROW_SCOPE(vm);
+
if (UNLIKELY(!script)) {
- auto scope = DECLARE_THROW_SCOPE(vm);
- return throwVMTypeError(globalObject, scope, "Script.prototype.runInThisContext can only be called on a Script object"_s);
+ return throwVMTypeError(globalObject, throwScope, "Script.prototype.runInThisContext can only be called on a Script object"_s);
+ }
+
+ JSValue contextArg = callFrame->argument(0);
+ if (!contextArg || contextArg.isUndefinedOrNull()) {
+ contextArg = JSC::constructEmptyObject(globalObject);
}
- JSValue arg0 = callFrame->argument(0);
- return runInContext(globalObject, script, globalObject->globalThis(), globalObject->globalScope(), arg0);
+ if (!contextArg.isObject()) {
+ return throwVMTypeError(globalObject, throwScope, "context must be an object"_s);
+ }
+
+ JSObject* context = asObject(contextArg);
+ JSWithScope* contextScope = JSWithScope::create(vm, globalObject, globalObject->globalScope(), context);
+
+ return runInContext(globalObject, script, globalObject->globalThis(), contextScope, callFrame->argument(1));
}
JSC_DEFINE_CUSTOM_GETTER(scriptGetSourceMapURL, (JSGlobalObject * globalObject, EncodedJSValue thisValueEncoded, PropertyName))