summaryrefslogtreecommitdiff
path: root/js/src/vm/SelfHosting.cpp
diff options
context:
space:
mode:
authorMoonchild <moonchild@palemoon.org>2020-08-06 18:31:36 +0000
committerMoonchild <moonchild@palemoon.org>2020-08-06 18:31:36 +0000
commit9b6252893876995ae4c1f278fc8d1cbdfb72e94d (patch)
treecf42ccabb78f3abb13e8df6a0512e3a43258f7c2 /js/src/vm/SelfHosting.cpp
parentc349f04f9501c5035667f8064782d06e298cb52a (diff)
downloaduxp-9b6252893876995ae4c1f278fc8d1cbdfb72e94d.tar.gz
Issue #618 - Simplify module resolve hook to be a function pointer
This is an ahead-of time port to try and address #1624. This is based on BZ 1461751 and Jon Coppeard's work in it.
Diffstat (limited to 'js/src/vm/SelfHosting.cpp')
-rw-r--r--js/src/vm/SelfHosting.cpp15
1 files changed, 8 insertions, 7 deletions
diff --git a/js/src/vm/SelfHosting.cpp b/js/src/vm/SelfHosting.cpp
index 50b0c01def..f324a0a67f 100644
--- a/js/src/vm/SelfHosting.cpp
+++ b/js/src/vm/SelfHosting.cpp
@@ -2026,25 +2026,26 @@ intrinsic_HostResolveImportedModule(JSContext* cx, unsigned argc, Value* vp)
{
CallArgs args = CallArgsFromVp(argc, vp);
MOZ_ASSERT(args.length() == 2);
- MOZ_ASSERT(args[0].toObject().is<ModuleObject>());
- MOZ_ASSERT(args[1].isString());
+ RootedModuleObject module(cx, &args[0].toObject().as<ModuleObject>());
+ RootedString specifier(cx, args[1].toString());
- RootedFunction moduleResolveHook(cx, cx->global()->moduleResolveHook());
+ JS::ModuleResolveHook moduleResolveHook = cx->runtime()->moduleResolveHook;
if (!moduleResolveHook) {
JS_ReportErrorASCII(cx, "Module resolve hook not set");
return false;
}
- RootedValue result(cx);
- if (!JS_CallFunction(cx, nullptr, moduleResolveHook, args, &result))
+ RootedObject result(cx);
+ result = moduleResolveHook(cx, module, specifier);
+ if (!result)
return false;
- if (!result.isObject() || !result.toObject().is<ModuleObject>()) {
+ if (!result->is<ModuleObject>()) {
JS_ReportErrorASCII(cx, "Module resolve hook did not return Module object");
return false;
}
- args.rval().set(result);
+ args.rval().setObject(*result);
return true;
}