Open
Description
Test case:
// entrypoint.js
await import("./foo.js").catch(() => {});
await import("./foo.js");
// foo.js
throw 1;
When we call module.Evaluate()
for the first dynamic import:
- Step 8 of Evaluate() calls InnerModuleEvaluation(module)
- Step 13.a of InnerModuleEvaluation does
? module.ExecuteModule()
module.ExecuteModule()
returns an abrupt completion, so we return early without going to step 16.b.viii (which is the only place in the spec that setsmodule.[[CycleRoot]]
)
- Step 9 of Evaluate sets
module.[[Status]]
to~evaluated~
andmodule.[[EvaluationError]]
to the throw completion.
When we call module.Evaluate()
for the second dynamic import:
- Step 3 of Evaluate() does "If module.[[Status]] is either
~evaluating-async~
or~evaluated~
, set module to module.[[CycleRoot]]". - [[CycleRoot]] was never set on
module
, so it's~empty~
. - Step for tries to read [[TopLevelCapability]] from it, which doesn't make sense because it's not a module record.
Step-by-step debugger for the first import: https://nicolo-ribaudo.github.io/es-module-evaluation/#s=QQo%3D&c=&a=Cg%3D%3D&f=QQ%3D%3D
Metadata
Metadata
Assignees
Labels
No labels