diff options
author | Moonchild <moonchild@palemoon.org> | 2020-08-06 18:31:36 +0000 |
---|---|---|
committer | Moonchild <moonchild@palemoon.org> | 2020-08-30 09:37:12 +0000 |
commit | 10a10fd3757374123eb5e3aab1e4720f86575f47 (patch) | |
tree | 2e7d794acdd6105eba65013cff421fe7dad94299 /js/src/vm/SelfHosting.cpp | |
parent | 1012dbe9e5b2d00f967b0523f94ac8cc7ed3118d (diff) | |
download | UXP-10a10fd3757374123eb5e3aab1e4720f86575f47.tar UXP-10a10fd3757374123eb5e3aab1e4720f86575f47.tar.gz UXP-10a10fd3757374123eb5e3aab1e4720f86575f47.tar.lz UXP-10a10fd3757374123eb5e3aab1e4720f86575f47.tar.xz UXP-10a10fd3757374123eb5e3aab1e4720f86575f47.zip |
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.cpp | 15 |
1 files changed, 8 insertions, 7 deletions
diff --git a/js/src/vm/SelfHosting.cpp b/js/src/vm/SelfHosting.cpp index 50b0c01de..f324a0a67 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; } |