Skip to content
This repository has been archived by the owner on Jun 30, 2020. It is now read-only.

Adjusted execution for circular stacks #3

Closed
wants to merge 2 commits into from
Closed
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
55 changes: 54 additions & 1 deletion spec.html
Original file line number Diff line number Diff line change
Expand Up @@ -111,6 +111,59 @@ <h1>GetExportedNames ( _exportStarSet_<ins>, _starExportModule_</ins> ) Concrete
<p>GetExportedNames does not filter out or throw an exception for names that have ambiguous star export bindings.</p>
</emu-note>
</emu-clause>

<emu-clause>
<h1>Evaluate ( ) Concrete Method</h1>
<emu-clause id="sec-innermoduleevaluation" aoid="InnerModuleEvaluation">
<h1>InnerModuleEvaluation ( _module_, _stack_, _index_ )</h1>

<p>The InnerModuleEvaluation abstract operation is used by Evaluate to perform the actual evaluation process for the Source Text Module Record _module_, as well as recursively on all other modules in the dependency graph. The _stack_ and _index_ parameters, as well as _module_'s [[DFSIndex]] and [[DFSAncestoreIndex]] fields, are used the same way as in InnerModuleInstantiation.</p>

<p>This abstract operation performs the following steps:</p>

<emu-alg>
1. <del>If _module_ is not a Source Text Module Record, then</del>
1. <del>Perform ? _module_.Evaluate().</del>
1. <del>Return _index_.</del>
1. If _module_.[[Status]] is `"evaluated"`, then
1. If _module_.[[EvaluationError]] is *undefined*, return _index_.
1. Otherwise return _module_.[[EvaluationError]].
1. If _module_.[[Status]] is `"evaluating"`, return _index_.
1. Assert: _module_.[[Status]] is `"instantiated"`.
1. <ins>Append _module_ to _stack_.</ins>
1. <ins>If _module_ is a Source Text Module Record, then</ins>
1. Set _module_.[[Status]] to `"evaluating"`.
1. Set _module_.[[DFSIndex]] to _index_.
1. Set _module_.[[DFSAncestorIndex]] to _index_.
1. Set _index_ to _index_ + 1.
1. <del>Append _module_ to _stack_</del>.
1. For each String _required_ that is an element of _module_.[[RequestedModules]], do
1. Let _requiredModule_ be ! HostResolveImportedModule(_module_, _required_).
1. NOTE: Instantiate must be completed successfully prior to invoking this method, so every requested module is guaranteed to resolve successfully.
1. Set _index_ to ? InnerModuleEvaluation(_requiredModule_, _stack_, _index_).
1. Assert: _requiredModule_.[[Status]] is either `"evaluating"` or `"evaluated"`.
1. Assert: _requiredModule_.[[Status]] is `"evaluating"` if and only if _requiredModule_ is in _stack_.
1. If _requiredModule_.[[Status]] is `"evaluating"`, then
1. Assert: _requiredModule_ is a Source Text Module Record.
1. Set _module_.[[DFSAncestorIndex]] to min(_module_.[[DFSAncestorIndex]], _requiredModule_.[[DFSAncestorIndex]]).
1. <del>Perform ? ModuleExecution(_module_).</del>
1. Assert: _module_ occurs exactly once in _stack_.
1. Assert: <ins>_module_ is not an Abstract Module Record, or </ins>_module_.[[DFSAncestorIndex]] is less than or equal to _module_.[[DFSIndex]].
1. If _module_.[[DFSAncestorIndex]] equals _module_.[[DFSIndex]]<ins>, or _module_ is not an Abstract Module Record</ins>, then
1. Let _done_ be *false*.
1. <ins>For each element _requiredModule_ of _stack_ in reverse order, and while _done_ is *false*, do</ins>
1. <ins>Perform ? ModuleExecution(_requiredModule_).</ins>
1. <ins>If _requiredModule_ and _module_ are the same Module Record, set _done_ to *true*.</ins>
1. <ins>Set _done_ to *false*.</ins>
1. Repeat, while _done_ is *false*,
1. Let _requiredModule_ be the last element in _stack_.
1. Remove the last element of _stack_.
1. Set _requiredModule_.[[Status]] to `"evaluated"`.
1. If _requiredModule_ and _module_ are the same Module Record, set _done_ to *true*.
1. Return _index_.
</emu-alg>
</emu-clause>
</emu-clause>
</emu-clause>

<emu-clause id="sec-dynamic-module-records">
Expand Down Expand Up @@ -356,4 +409,4 @@ <h1>Runtime Semantics: GetModuleNamespace ( _module_ )</h1>
</emu-clause>
</emu-clause>
</emu-clause>
</emu-clause>
</emu-clause>