Skip to content

Commit 4456e1c

Browse files
authored
clarify iterator lists (#21)
1 parent 86389d5 commit 4456e1c

File tree

1 file changed

+13
-15
lines changed

1 file changed

+13
-15
lines changed

spec.emu

+13-15
Original file line numberDiff line numberDiff line change
@@ -25,42 +25,40 @@ copyright: false
2525
1. Set _paddingOption_ to ? Get(_options_, *"padding"*).
2626
1. If _strict_ is *true*, set _mode_ to ~strict~.
2727
1. Let _iters_ be a new empty List.
28-
1. Let _openIters_ be a new empty List.
2928
1. Let _padding_ be a new empty List.
3029
1. Let _inputIter_ be ? GetIterator(_iterables_, ~sync~).
3130
1. Let _next_ be ~not-started~.
3231
1. Repeat, while _next_ is not ~done~,
3332
1. Set _next_ to Completion(IteratorStepValue(_inputIter_)).
34-
1. IfAbruptCloseIterators(_next_, _openIters_).
33+
1. IfAbruptCloseIterators(_next_, _iters_).
3534
1. If _next_ is not ~done~, then
3635
1. Let _iter_ be Completion(GetIteratorFlattenable(_next_, ~iterate-strings~)).
37-
1. IfAbruptCloseIterators(_iter_, the list-concatenation of « _inputIter_ » and _openIters_).
36+
1. IfAbruptCloseIterators(_iter_, the list-concatenation of « _inputIter_ » and _iters_).
3837
1. Append _iter_ to _iters_.
39-
1. Append _iter_ to _openIters_.
4038
1. Let _iterCount_ be the number of elements in _iters_.
4139
1. If _mode_ is ~longest~, then
4240
1. If _paddingOption_ is *undefined*, then
4341
1. Perform the following steps _iterCount_ times:
4442
1. Append *undefined* to _padding_.
4543
1. Else,
4644
1. Let _paddingIter_ be Completion(GetIterator(_paddingOption_, ~sync~)).
47-
1. IfAbruptCloseIterators(_paddingIter_, _openIters_).
45+
1. IfAbruptCloseIterators(_paddingIter_, _iters_).
4846
1. Let _usingIterator_ be *true*.
4947
1. Perform the following steps _iterCount_ times:
5048
1. If _usingIterator_ is *true*, then
5149
1. Set _next_ to Completion(IteratorStepValue(_paddingIter_)).
52-
1. IfAbruptCloseIterators(_next_, _openIters_).
50+
1. IfAbruptCloseIterators(_next_, _iters_).
5351
1. If _next_ is ~done~, then
5452
1. Set _usingIterator_ to *false*.
5553
1. Else,
5654
1. Append _next_ to _padding_.
5755
1. If _usingIterator_ is *false*, append *undefined* to _padding_.
5856
1. If _usingIterator_ is *true*, then
5957
1. Let _completion_ be Completion(IteratorClose(_paddingIter_, NormalCompletion(~unused~))).
60-
1. IfAbruptCloseIterators(_completion_, _openIters_).
58+
1. IfAbruptCloseIterators(_completion_, _iters_).
6159
1. Let _finishResults_ be a new Abstract Closure with parameters (_results_) that captures nothing and performs the following steps when called:
6260
1. Return CreateArrayFromList(_results_).
63-
1. Return IteratorZipCore(_iters_, _openIters_, _mode_, _padding_, _finishResults_).
61+
1. Return IteratorZipCore(_iters_, _mode_, _padding_, _finishResults_).
6462
</emu-alg>
6563
</emu-clause>
6664

@@ -80,7 +78,6 @@ copyright: false
8078
1. Set _paddingOption_ to ? Get(_options_, *"padding"*).
8179
1. If _strict_ is *true*, set _mode_ to ~strict~.
8280
1. Let _iters_ be a new empty List.
83-
1. Let _openIters_ be a new empty List.
8481
1. Let _padding_ be a new empty List.
8582
1. Let _allKeys_ be ? _iterables_.[[OwnPropertyKeys]]().
8683
1. Let _keys_ be a new empty List.
@@ -95,14 +92,13 @@ copyright: false
9592
1. Let _getter_ be _desc_.[[Get]].
9693
1. If _getter_ is not *undefined*, then
9794
1. Let _getterResult_ be Completion(Call(_getter_, _iterables_)).
98-
1. IfAbruptCloseIterators(_getterResult_, _openIters_).
95+
1. IfAbruptCloseIterators(_getterResult_, _iters_).
9996
1. Set _value_ to _getterResult_.
10097
1. If _value_ is not *undefined*, then
10198
1. Append _key_ to _keys_.
10299
1. Let _iter_ be Completion(GetIteratorFlattenable(_value_, ~iterate-strings~)).
103-
1. IfAbruptCloseIterators(_iter_, _openIters_).
100+
1. IfAbruptCloseIterators(_iter_, _iters_).
104101
1. Append _iter_ to _iters_.
105-
1. Append _iter_ to _openIters_.
106102
1. Let _iterCount_ be the number of elements in _iters_.
107103
1. If _mode_ is ~longest~, then
108104
1. If _paddingOption_ is *undefined*, then
@@ -111,22 +107,21 @@ copyright: false
111107
1. Else,
112108
1. For each element _key_ of _keys_, do
113109
1. Let _value_ be Completion(Get(_paddingOption_, _key_)).
114-
1. IfAbruptCloseIterators(_value_, _openIters_).
110+
1. IfAbruptCloseIterators(_value_, _iters_).
115111
1. Append _value_ to _padding_.
116112
1. Let _finishResults_ be a new Abstract Closure with parameters (_results_) that captures _keys_ and _iterCount_ and performs the following steps when called:
117113
1. Let _obj_ be OrdinaryObjectCreate(*null*).
118114
1. For each integer _i_ such that 0 ≤ _i_ &lt; _iterCount_, do
119115
1. Perform ! CreateDataPropertyOrThrow(_obj_, _keys_[_i_], _results_[_i_]).
120116
1. Return _obj_.
121-
1. Return IteratorZipCore(_iters_, _openIters_, _mode_, _padding_, _finishResults_).
117+
1. Return IteratorZipCore(_iters_, _mode_, _padding_, _finishResults_).
122118
</emu-alg>
123119
</emu-clause>
124120

125121
<emu-clause id="sec-IteratorZipCore" type="abstract operation">
126122
<h1>
127123
IteratorZipCore (
128124
_iters_: a List of Iterator Records,
129-
_openIters_: a List of Iterator Records,
130125
_mode_: either ~shortest~, ~longest~, or ~strict~,
131126
_padding_: a List of ECMAScript language values,
132127
_finishResults_: an Abstract Closure that takes a List of ECMAScript values and returns an ECMAScript value,
@@ -138,10 +133,12 @@ copyright: false
138133
</dl>
139134
<emu-alg>
140135
1. Let _iterCount_ be the number of elements in _iters_.
136+
1. Let _openIters_ be a copy of _iters_.
141137
1. Let _closure_ be a new Abstract Closure with no parameters that captures _iters_, _iterCount_, _openIters_, _mode_, _padding_, and _finishResults_, and performs the following steps when called:
142138
1. If _iterCount_ = 0, return *undefined*.
143139
1. Repeat,
144140
1. Let _results_ be a new empty List.
141+
1. Assert: _openIters_ is not empty.
145142
1. For each integer _i_ such that 0 ≤ _i_ &lt; _iterCount_, in ascending order, do
146143
1. If _iters_[_i_] is *null*, then
147144
1. Let _result_ be _padding_[_i_].
@@ -159,6 +156,7 @@ copyright: false
159156
1. If _i_ ≠ 0, then
160157
1. Return ? IteratorCloseAll(_openIters_, ThrowCompletion(a newly created *TypeError* object)).
161158
1. For each integer _k_ such that 1 ≤ _k_ &lt; _iterCount_, in ascending order, do
159+
1. Assert: _iters_[_k_] is not *null*.
162160
1. Let _open_ be Completion(IteratorStep(_iters_[_k_])).
163161
1. If _open_ is an abrupt completion, then
164162
1. Remove _iters_[_k_] from _openIters_.

0 commit comments

Comments
 (0)