commit 3d14ba282465a04561840b2c494ffd446a238d59
parent c322e57e94dc27679773e5bee6a1f0a032903d62
Author: Yoshi Cheng-Hao Huang <allstars.chh@gmail.com>
Date: Thu, 23 Oct 2025 08:47:59 +0000
Bug 1968885 - Part 1: Pass lineNo and columnNo to HostLoadImportedModule. r=jonco
Differential Revision: https://phabricator.services.mozilla.com/D269566
Diffstat:
7 files changed, 27 insertions(+), 16 deletions(-)
diff --git a/js/loader/ModuleLoaderBase.cpp b/js/loader/ModuleLoaderBase.cpp
@@ -142,11 +142,11 @@ static bool CreateBadModuleTypeError(JSContext* aCx, LoadedScript* aScript,
// https://html.spec.whatwg.org/#hostloadimportedmodule
// static
-bool ModuleLoaderBase::HostLoadImportedModule(JSContext* aCx,
- Handle<JSScript*> aReferrer,
- Handle<JSObject*> aModuleRequest,
- Handle<Value> aHostDefined,
- Handle<Value> aPayload) {
+bool ModuleLoaderBase::HostLoadImportedModule(
+ JSContext* aCx, Handle<JSScript*> aReferrer,
+ Handle<JSObject*> aModuleRequest, Handle<Value> aHostDefined,
+ Handle<Value> aPayload, uint32_t aLineNumber,
+ JS::ColumnNumberOneOrigin aColumnNumber) {
Rooted<JSObject*> object(aCx);
if (aPayload.isObject()) {
object = &aPayload.toObject();
@@ -195,7 +195,7 @@ bool ModuleLoaderBase::HostLoadImportedModule(JSContext* aCx,
Rooted<Value> error(aCx);
nsresult rv =
loader->HandleResolveFailure(aCx, script, string, result.unwrapErr(),
- 0, ColumnNumberOneOrigin(), &error);
+ aLineNumber, aColumnNumber, &error);
if (NS_FAILED(rv)) {
JS_ReportOutOfMemory(aCx);
return false;
diff --git a/js/loader/ModuleLoaderBase.h b/js/loader/ModuleLoaderBase.h
@@ -488,7 +488,9 @@ class ModuleLoaderBase : public nsISupports {
Handle<JSScript*> aReferrer,
Handle<JSObject*> aModuleRequest,
Handle<Value> aHostDefined,
- Handle<Value> aPayload);
+ Handle<Value> aPayload,
+ uint32_t aLineNumber,
+ JS::ColumnNumberOneOrigin aColumnNumber);
static bool FinishLoadingImportedModule(JSContext* aCx,
ModuleLoadRequest* aRequest);
diff --git a/js/public/Modules.h b/js/public/Modules.h
@@ -79,7 +79,8 @@ enum class ModuleType : uint32_t {
using ModuleLoadHook = bool (*)(JSContext* cx, Handle<JSScript*> referrer,
Handle<JSObject*> moduleRequest,
Handle<Value> hostDefined,
- Handle<Value> payload);
+ Handle<Value> payload, uint32_t lineNumber,
+ JS::ColumnNumberOneOrigin columnNumber);
/**
* Get the HostLoadImportedModule hook for the runtime.
diff --git a/js/src/shell/ModuleLoader.cpp b/js/src/shell/ModuleLoader.cpp
@@ -72,7 +72,9 @@ bool ModuleLoader::LoadImportedModule(JSContext* cx,
JS::Handle<JSScript*> referrer,
JS::Handle<JSObject*> moduleRequest,
JS::HandleValue hostDefined,
- JS::HandleValue payload) {
+ JS::HandleValue payload,
+ uint32_t lineNumber,
+ JS::ColumnNumberOneOrigin columnNumber) {
ShellContext* scx = GetShellContext(cx);
return scx->moduleLoader->loadImportedModule(cx, referrer, moduleRequest,
payload);
diff --git a/js/src/shell/ModuleLoader.h b/js/src/shell/ModuleLoader.h
@@ -28,7 +28,9 @@ class ModuleLoader {
private:
static bool LoadImportedModule(JSContext* cx, JS::Handle<JSScript*> referrer,
HandleObject moduleRequest,
- HandleValue hostDefined, HandleValue payload);
+ HandleValue hostDefined, HandleValue payload,
+ uint32_t lineNumber,
+ JS::ColumnNumberOneOrigin columnNumber);
static bool GetImportMetaProperties(JSContext* cx, HandleValue privateValue,
HandleObject metaObject);
diff --git a/js/src/vm/Modules.cpp b/js/src/vm/Modules.cpp
@@ -813,7 +813,8 @@ static void ThrowUnexpectedModuleStatus(JSContext* cx, ModuleStatus status) {
bool js::HostLoadImportedModule(JSContext* cx, Handle<JSScript*> referrer,
Handle<JSObject*> moduleRequest,
Handle<Value> hostDefined,
- Handle<Value> payload) {
+ Handle<Value> payload, uint32_t lineNumber,
+ JS::ColumnNumberOneOrigin columnNumber) {
MOZ_ASSERT(moduleRequest);
MOZ_ASSERT(!payload.isUndefined());
@@ -823,7 +824,8 @@ bool js::HostLoadImportedModule(JSContext* cx, Handle<JSScript*> referrer,
return false;
}
- bool ok = moduleLoadHook(cx, referrer, moduleRequest, hostDefined, payload);
+ bool ok = moduleLoadHook(cx, referrer, moduleRequest, hostDefined, payload,
+ lineNumber, columnNumber);
if (!ok) {
MOZ_ASSERT(JS_IsExceptionPending(cx));
@@ -1561,7 +1563,8 @@ static bool InnerModuleLoading(JSContext* cx,
Rooted<Value> hostDefined(cx, state->hostDefined());
Rooted<Value> payload(cx, ObjectValue(*state));
if (!HostLoadImportedModule(cx, referrer, moduleRequest, hostDefined,
- payload)) {
+ payload, request.lineNumber(),
+ request.columnNumber())) {
return false;
}
}
diff --git a/js/src/vm/Modules.h b/js/src/vm/Modules.h
@@ -64,9 +64,10 @@ bool LoadRequestedModules(JSContext* cx, Handle<ModuleObject*> module,
HandleValue hostDefined,
MutableHandle<JSObject*> promiseOut);
-bool HostLoadImportedModule(JSContext* cx, Handle<JSScript*> referrer,
- Handle<JSObject*> moduleRequest,
- Handle<Value> hostDefined, Handle<Value> payload);
+bool HostLoadImportedModule(
+ JSContext* cx, Handle<JSScript*> referrer, Handle<JSObject*> moduleRequest,
+ Handle<Value> hostDefined, Handle<Value> payload, uint32_t lineNumber = 0,
+ JS::ColumnNumberOneOrigin columnNumber = JS::ColumnNumberOneOrigin());
} // namespace js