Skip to content
This repository was archived by the owner on Apr 26, 2024. It is now read-only.

Commit d2254e8

Browse files
committed
simplify index tracking in toSpliced
1 parent 45522cb commit d2254e8

File tree

2 files changed

+43
-38
lines changed

2 files changed

+43
-38
lines changed

polyfill.js

+12-11
Original file line numberDiff line numberDiff line change
@@ -182,20 +182,21 @@
182182
}
183183

184184
function doSplice({ src, target, actualStart, actualDeleteCount, values, newLen }) {
185-
let k = 0;
186-
while (k < actualStart) {
187-
target[k] = src[k];
188-
k++;
185+
let i = 0;
186+
while (i < actualStart) {
187+
target[i] = src[i];
188+
i++;
189189
}
190190
for (const E of values) {
191-
target[k] = E;
192-
k++;
191+
target[i] = E;
192+
i++;
193193
}
194-
while (k < newLen) {
195-
let from = k + actualDeleteCount - values.length;
196-
let fromValue = src[from];
197-
target[k] = fromValue;
198-
k++;
194+
let r = actualStart + actualDeleteCount;
195+
while (i < newLen) {
196+
let fromValue = src[r];
197+
target[i] = fromValue;
198+
i++;
199+
r++;
199200
}
200201
}
201202

spec.html

+31-27
Original file line numberDiff line numberDiff line change
@@ -88,22 +88,24 @@ <h1>Array.prototype.toSpliced ( _start_, _deleteCount_, ..._items_ )</h1>
8888
1. Let _newLen_ be _len_ + _insertCount_ - _actualDeleteCount_.
8989
1. If _newLen_ &gt; 2<sup>53</sup> - 1, throw a *TypeError* exception.
9090
1. Let _A_ be ? ArrayCreate(𝔽(_newLen_)).
91-
1. Let _k_ be 0.
91+
1. Let _i_ be 0.
92+
1. Let _r_ be _actualStart_ + _actualDeleteCount_.
9293
1. Repeat, while _k_ &lt; _actualStart_,
93-
1. Let _Pk_ be ! ToString(𝔽(_k_)).
94-
1. Let _kValue_ be ? Get(_O_, _Pk_).
95-
1. Perform ! CreateDataPropertyOrThrow(_A_, _Pk_, _kValue_).
96-
1. Set _k_ to _k_ + 1.
94+
1. Let _Pi_ be ! ToString(𝔽(_i_)).
95+
1. Let _iValue_ be ? Get(_O_, _Pi_).
96+
1. Perform ! CreateDataPropertyOrThrow(_A_, _Pi_, _iValue_).
97+
1. Set _i_ to _i_ + 1.
9798
1. For each element _E_ of _items_, do
98-
1. Let _Pk_ be ! ToString(𝔽(_k_)).
99-
1. Perform ! CreateDataPropertyOrThrow(_A_, _Pk_, _E_).
100-
1. Set _k_ to _k_ + 1.
101-
1. Repeat, while _k_ &lt; _newLen_,
102-
1. Let _Pk_ be ! ToString(𝔽(_k_)).
103-
1. Let _from_ be ! ToString(𝔽(_k_ + _actualDeleteCount_ - _insertCount_)).
99+
1. Let _Pi_ be ! ToString(𝔽(_i_)).
100+
1. Perform ! CreateDataPropertyOrThrow(_A_, _Pi_, _E_).
101+
1. Set _i_ to _i_ + 1.
102+
1. Repeat, while _i_ &lt; _newLen_,
103+
1. Let _Pi_ be ! ToString(𝔽(_i_)).
104+
1. Let _from_ be ! ToString(𝔽(_r_)).
104105
1. Let _fromValue_ be ? Get(_O_, _from_).
105-
1. Perform ! CreateDataPropertyOrThrow(_A_, _Pk_, _fromValue_).
106-
1. Set _k_ to _k_ + 1.
106+
1. Perform ! CreateDataPropertyOrThrow(_A_, _Pi_, _fromValue_).
107+
1. Set _i_ to _i_ + 1.
108+
1. Set _r_ to _r_ + 1.
107109
1. Return _A_.
108110
</emu-alg>
109111
</emu-clause>
@@ -284,22 +286,24 @@ <h1>%TypedArray%.prototype.toSpliced ( _start_, _deleteCount_, ..._items_ )</h1>
284286
1. Let _actualDeleteCount_ be the result of clamping _dc_ between 0 and _len_ - _actualStart_.
285287
1. Let _newLen_ be _len_ + _insert_Count_ - _actualDeleteCount_.
286288
1. Let _A_ be ? TypedArrayCreateSameType(_O_, &laquo; 𝔽(_newLen_) &raquo;).
287-
1. Let _k_ be 0.
288-
1. Repeat, while _k_ &lt; _actualStart_,
289-
1. Let _Pk_ be ! ToString(𝔽(_k_)).
290-
1. Let _kValue_ be ! Get(_src_, _Pk_).
291-
1. Perform ! Set(_target_, _Pk_, _kValue_, *true*).
292-
1. Set _k_ to _k_ + 1.
289+
1. Let _i_ be 0.
290+
1. Let _r_ be _actualStart_ + _actualDeleteCount_.
291+
1. Repeat, while _i_ &lt; _actualStart_,
292+
1. Let _Pi_ be ! ToString(𝔽(_i_)).
293+
1. Let _iValue_ be ! Get(_src_, _Pi_).
294+
1. Perform ! Set(_target_, _Pi_, _iValue_, *true*).
295+
1. Set _i_ to _i_ + 1.
293296
1. For each element _E_ of _items_, do
294-
1. Let _Pk_ be ! ToString(𝔽(_k_)).
295-
1. Perform ? Set(_A_, _Pk_, _E_, *true*).
296-
1. Set _k_ to _k_ + 1.
297-
1. Repeat, while _k_ &lt; _newLen_,
298-
1. Let _Pk_ be ! ToString(𝔽(_k_)).
299-
1. Let _from_ be ! ToString(𝔽(_k_ + _actualDeleteCount_ - _insertCount_)).
297+
1. Let _Pi_ be ! ToString(𝔽(_i_)).
298+
1. Perform ? Set(_A_, _Pi_, _E_, *true*).
299+
1. Set _i_ to _i_ + 1.
300+
1. Repeat, while _r_ &lt; _newLen_,
301+
1. Let _Pi_ be ! ToString(𝔽(_i_)).
302+
1. Let _from_ be ! ToString(𝔽(_r_)).
300303
1. Let _fromValue_ be ! Get(_O_, _from_).
301-
1. Perform ! Set(_A_, _Pk_, _fromValue_, *true*).
302-
1. Set _k_ to _k_ + 1.
304+
1. Perform ! Set(_A_, _Pi_, _fromValue_, *true*).
305+
1. Set _i_ to _i_ + 1.
306+
1. Set _r_ to _r_ + 1.
303307
1. Return _A_.
304308
</emu-alg>
305309
</emu-clause>

0 commit comments

Comments
 (0)