- <emu-alg><ol><li>If <var>module</var> is not a <emu-xref href="#cyclic-module-record" id="_ref_8571"><a href="#cyclic-module-record">Cyclic Module Record</a></emu-xref>, then<ol><li>Perform ? <emu-xref aoid="EvaluateModuleSync" id="_ref_8572"><a href="#sec-EvaluateModuleSync">EvaluateModuleSync</a></emu-xref>(<var>module</var>).</li><li>Return <emu-const>unused</emu-const>.</li></ol></li><li>If <var>module</var>.<var class="field">[[Status]]</var> is <emu-const>evaluating-async</emu-const> or <emu-const>evaluated</emu-const>, then<ol><li>Let <var>cycleRoot</var> be to <var>module</var>.<var class="field">[[CycleRoot]]</var>.</li><li><emu-xref href="#assert" id="_ref_8573"><a href="#assert">Assert</a></emu-xref>: <var>cycleRoot</var>.<var class="field">[[Status]]</var> is either <emu-const>evaluating-async</emu-const> or <emu-const>evaluated</emu-const>.</li><li>NOTE: The assertion above holds because a module's <var class="field">[[CycleRoot]]</var> is only set to the SCC root when the whole SCC transitions to <emu-const>evaluating-async</emu-const> or <emu-const>evaluated</emu-const>.</li><li>If <var>cycleRoot</var>.<var class="field">[[EvaluationError]]</var> is an <emu-xref href="#sec-completion-record-specification-type" id="_ref_8574"><a href="#sec-completion-record-specification-type">abrupt completion</a></emu-xref>, return <var>cycleRoot</var>.<var class="field">[[EvaluationError]]</var>.</li><li>Return <emu-const>unused</emu-const>.</li></ol></li><li><emu-xref href="#assert" id="_ref_8575"><a href="#assert">Assert</a></emu-xref>: <var>module</var>.<var class="field">[[Status]]</var> is <emu-const>evaluating</emu-const>.</li><li>Set <var>module</var>.<var class="field">[[PendingAsyncDependencies]]</var> to 0.</li><li>For each <emu-xref href="#modulerequest-record" id="_ref_8576"><a href="#modulerequest-record">ModuleRequest Record</a></emu-xref> <var>request</var> of <var>module</var>.<var class="field">[[RequestedModules]]</var>, do<ol><li>Let <var>requiredModule</var> be <emu-xref aoid="GetImportedModule" id="_ref_8577"><a href="#sec-GetImportedModule">GetImportedModule</a></emu-xref>(<var>module</var>, <var>request</var>).</li><li>If <var>requiredModule</var> is a <emu-xref href="#cyclic-module-record" id="_ref_8578"><a href="#cyclic-module-record">Cyclic Module Record</a></emu-xref>, then<ol><li><emu-xref href="#assert" id="_ref_8579"><a href="#assert">Assert</a></emu-xref>: <var>requiredModule</var>.<var class="field">[[Status]]</var> is <emu-const>evaluating</emu-const>, <emu-const>evaluating-async</emu-const>, or <emu-const>evaluated</emu-const>.</li><li>If <var>requiredModule</var>.<var class="field">[[Status]]</var> is <emu-const>evaluating-async</emu-const> or <emu-const>evaluated</emu-const>, then<ol><li>Set <var>requiredModule</var> to <var>requiredModule</var>.<var class="field">[[CycleRoot]]</var>.</li><li><emu-xref href="#assert" id="_ref_8580"><a href="#assert">Assert</a></emu-xref>: <var>requiredModule</var>.<var class="field">[[Status]]</var> is either <emu-const>evaluating-async</emu-const> or <emu-const>evaluated</emu-const>.</li><li><emu-xref href="#assert" id="_ref_8581"><a href="#assert">Assert</a></emu-xref>: <var>requiredModule</var>.<var class="field">[[EvaluationError]]</var> is <emu-const>empty</emu-const>.</li></ol></li><li>If <var>requiredModule</var>.<var class="field">[[AsyncEvaluationOrder]]</var> is an <emu-xref href="#integer" id="_ref_8582"><a href="#integer">integer</a></emu-xref>, then<ol><li>Set <var>module</var>.<var class="field">[[PendingAsyncDependencies]]</var> to <var>module</var>.<var class="field">[[PendingAsyncDependencies]]</var> + 1.</li><li>Append <var>module</var> to <var>requiredModule</var>.<var class="field">[[AsyncParentModules]]</var>.</li></ol></li></ol></li></ol></li><li>If <var>module</var>.<var class="field">[[PendingAsyncDependencies]]</var> > 0 or <var>module</var>.<var class="field">[[HasTLA]]</var> is <emu-val>true</emu-val>, then<ol><li><emu-xref href="#assert" id="_ref_8583"><a href="#assert">Assert</a></emu-xref>: <var>module</var>.<var class="field">[[AsyncEvaluationOrder]]</var> is <emu-const>unset</emu-const>.</li><li>Set <var>module</var>.<var class="field">[[AsyncEvaluationOrder]]</var> to <emu-xref aoid="IncrementModuleAsyncEvaluationCount" id="_ref_8584"><a href="#sec-IncrementModuleAsyncEvaluationCount">IncrementModuleAsyncEvaluationCount</a></emu-xref>().</li><li>If <var>module</var>.<var class="field">[[PendingAsyncDependencies]]</var> = 0, perform <emu-xref aoid="ExecuteAsyncModule" id="_ref_8585"><a href="#sec-execute-async-module" class="e-user-code">ExecuteAsyncModule</a></emu-xref>(<var>module</var>).</li></ol></li><li>Else,<ol><li>Perform ? <var>module</var>.ExecuteModule().</li></ol></li><li>Return <emu-const>unused</emu-const>.</li></ol></emu-alg>
0 commit comments