From e7d0b58e5605a8036331892af92437e3c1e408c4 Mon Sep 17 00:00:00 2001 From: Brian Smith Date: Tue, 18 Apr 2023 11:00:34 -0500 Subject: [PATCH] Issue #1691 - Part 6e: Fix problems due to divergent codebases. This gets basic dynamic import working. Fix a problem in Part 5b where Mozilla used toGCThing() and we don't. Fix a problem in Part 4 where runtime() returns nullptr in our codebase since it runs on JS Helper thread. We need to get the runtime via runtimeFromAnyThread() instead. (cherry picked from commit dddb46225bbd1adff11f635e32934aee36923e47) --- js/src/builtin/ModuleObject.cpp | 2 +- js/src/frontend/BytecodeEmitter.cpp | 2 +- js/src/frontend/Parser.cpp | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/js/src/builtin/ModuleObject.cpp b/js/src/builtin/ModuleObject.cpp index 5efd594b62..8e01ea2ac8 100644 --- a/js/src/builtin/ModuleObject.cpp +++ b/js/src/builtin/ModuleObject.cpp @@ -842,7 +842,7 @@ ModuleObject::maybeScript() const if (value.isUndefined()) return nullptr; - return value.toGCThing()->as(); + return static_cast(value.toPrivate()); } JSScript* diff --git a/js/src/frontend/BytecodeEmitter.cpp b/js/src/frontend/BytecodeEmitter.cpp index c19ea6cff8..a6c7db32a8 100644 --- a/js/src/frontend/BytecodeEmitter.cpp +++ b/js/src/frontend/BytecodeEmitter.cpp @@ -9088,7 +9088,7 @@ BytecodeEmitter::emitTree(ParseNode* pn, ValueUsage valueUsage /* = ValueUsage:: break; case PNK_CALL_IMPORT: - if (!cx->asJSContext()->runtime()->moduleDynamicImportHook) { + if (!cx->compartment()->runtimeFromAnyThread()->moduleDynamicImportHook) { reportError(nullptr, JSMSG_NO_DYNAMIC_IMPORT); return false; } diff --git a/js/src/frontend/Parser.cpp b/js/src/frontend/Parser.cpp index 5ed28e220c..8e52e8f1bb 100644 --- a/js/src/frontend/Parser.cpp +++ b/js/src/frontend/Parser.cpp @@ -10515,7 +10515,7 @@ Parser::importExpr(YieldHandling yieldHandling) MUST_MATCH_TOKEN_MOD(TOK_RP, TokenStream::Operand, JSMSG_PAREN_AFTER_ARGS); - if (!context->asJSContext()->runtime()->moduleDynamicImportHook && !abortIfSyntaxParser()) { + if (!context->compartment()->runtimeFromAnyThread()->moduleDynamicImportHook && !abortIfSyntaxParser()) { return null(); }