Skip to content

Commit 5e8e90b

Browse files
Fixing eager execution of asynchronous deps on dynamic imports (#38)
Co-authored-by: Nicolò Ribaudo <nribaudo@igalia.com>
1 parent b00470e commit 5e8e90b

1 file changed

Lines changed: 25 additions & 11 deletions

File tree

spec.emu

Lines changed: 25 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -257,17 +257,31 @@ contributors: Nicolò Ribaudo
257257
1. Let _namespace_ be GetModuleNamespace(_module_, _phase_, <ins>~all~</ins>).
258258
1. Perform ! Call(_promiseCapability_.[[Resolve]], *undefined*, &laquo; _namespace_ &raquo;).
259259
1. Return ~unused~.
260-
1. If _phase_ is ~defer~, then
261-
1. Let _evaluationList_ be GatherAsynchronousTransitiveDependencies(_module_).
262-
1. If _evaluationList_ is empty, then
263-
1. Perform _fulfilledClosure_().
264-
1. Return ~unused~.
265-
1. Let _asyncDepsEvaluationPromises_ be a new empty List.
266-
1. For each Module Record _dep_ of _evaluationList_, append _dep_.Evaluate() to _asyncDepsEvaluationPromises_.
267-
1. Let _evaluatePromise_ be SafePerformPromiseAll(_asyncDepsEvaluationPromises_).
268-
1. Else,
269-
1. Assert: _phase_ is ~evaluation~.
270-
1. Let _evaluatePromise_ be _module_.Evaluate().
260+
1. <del>If _phase_ is ~defer~, then </del>
261+
1. <del>Let _evaluationList_ be GatherAsynchronousTransitiveDependencies(_module_).</del>
262+
1. <del>If _evaluationList_ is empty, then</del>
263+
1. <del>Perform _fulfilledClosure_().</del>
264+
1. <del>Return ~unused~.</del>
265+
1. <del>Let _asyncDepsEvaluationPromises_ be a new empty List.</del>
266+
1. <del>For each Module Record _dep_ of _evaluationList_, append _dep_.Evaluate() to _asyncDepsEvaluationPromises_.</del>
267+
1. <del>Let _evaluatePromise_ be SafePerformPromiseAll(_asyncDepsEvaluationPromises_).</del>
268+
1. <del>Else,</del>
269+
1. <del>Assert: _phase_ is ~evaluation~.</del>
270+
1. <del>Let _evaluatePromise_ be _module_.Evaluate().</del>
271+
1. <ins>If _phase_ is ~defer~, let _evaluationList_ be GatherAsynchronousTransitiveDependencies(_module_).</ins>
272+
1. <ins>Else, let _evaluationList_ be « _module_ ».</ins>
273+
1. <ins>Let _optionalIndirectRequests_ be _module_.GetOptionalIndirectExportsModuleRequests(~all~).</ins>
274+
1. <ins>Perform ListAppendUnique(_evaluationList_, GatherAsynchronousTransitiveDependenciesForRequests(_module_, _optionalIndirectRequests_, « »)).</ins>
275+
1. <ins>If _evaluationList_ is empty, then</ins>
276+
1. <ins>Assert: _phase_ is ~defer~.</ins>
277+
1. <ins>Perform _fulfilledClosure_().</ins>
278+
1. <ins>Return ~unused~.</ins>
279+
1. <ins>If the length of _evaluationList_ = 1, then</ins>
280+
1. <ins>Let _evaluatePromise_ be _module_.Evaluate().</ins>
281+
1. <ins>Else,</ins>
282+
1. <ins>Let _evaluationPromises_ be a new empty List.</ins>
283+
1. <ins>For each Module Record _dep_ of _evaluationList_, append _dep_.Evaluate() to _evaluationPromises_.</ins>
284+
1. <ins>Let _evaluatePromise_ be SafePerformPromiseAll(_evaluationPromises_).</ins>
271285
1. Let _onFulfilled_ be CreateBuiltinFunction(_fulfilledClosure_, *""*, 0, &laquo; &raquo;).
272286
1. Perform PerformPromiseThen(_evaluatePromise_, _onFulfilled_, _onRejected_).
273287
1. Return ~unused~.

0 commit comments

Comments
 (0)