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

Commit

Permalink
simplify index tracking in toSpliced
Browse files Browse the repository at this point in the history
  • Loading branch information
acutmore committed Feb 16, 2022
1 parent 45522cb commit d2254e8
Show file tree
Hide file tree
Showing 2 changed files with 43 additions and 38 deletions.
23 changes: 12 additions & 11 deletions polyfill.js
Original file line number Diff line number Diff line change
Expand Up @@ -182,20 +182,21 @@
}

function doSplice({ src, target, actualStart, actualDeleteCount, values, newLen }) {
let k = 0;
while (k < actualStart) {
target[k] = src[k];
k++;
let i = 0;
while (i < actualStart) {
target[i] = src[i];
i++;
}
for (const E of values) {
target[k] = E;
k++;
target[i] = E;
i++;
}
while (k < newLen) {
let from = k + actualDeleteCount - values.length;
let fromValue = src[from];
target[k] = fromValue;
k++;
let r = actualStart + actualDeleteCount;
while (i < newLen) {
let fromValue = src[r];
target[i] = fromValue;
i++;
r++;
}
}

Expand Down
58 changes: 31 additions & 27 deletions spec.html
Original file line number Diff line number Diff line change
Expand Up @@ -88,22 +88,24 @@ <h1>Array.prototype.toSpliced ( _start_, _deleteCount_, ..._items_ )</h1>
1. Let _newLen_ be _len_ + _insertCount_ - _actualDeleteCount_.
1. If _newLen_ &gt; 2<sup>53</sup> - 1, throw a *TypeError* exception.
1. Let _A_ be ? ArrayCreate(𝔽(_newLen_)).
1. Let _k_ be 0.
1. Let _i_ be 0.
1. Let _r_ be _actualStart_ + _actualDeleteCount_.
1. Repeat, while _k_ &lt; _actualStart_,
1. Let _Pk_ be ! ToString(𝔽(_k_)).
1. Let _kValue_ be ? Get(_O_, _Pk_).
1. Perform ! CreateDataPropertyOrThrow(_A_, _Pk_, _kValue_).
1. Set _k_ to _k_ + 1.
1. Let _Pi_ be ! ToString(𝔽(_i_)).
1. Let _iValue_ be ? Get(_O_, _Pi_).
1. Perform ! CreateDataPropertyOrThrow(_A_, _Pi_, _iValue_).
1. Set _i_ to _i_ + 1.
1. For each element _E_ of _items_, do
1. Let _Pk_ be ! ToString(𝔽(_k_)).
1. Perform ! CreateDataPropertyOrThrow(_A_, _Pk_, _E_).
1. Set _k_ to _k_ + 1.
1. Repeat, while _k_ &lt; _newLen_,
1. Let _Pk_ be ! ToString(𝔽(_k_)).
1. Let _from_ be ! ToString(𝔽(_k_ + _actualDeleteCount_ - _insertCount_)).
1. Let _Pi_ be ! ToString(𝔽(_i_)).
1. Perform ! CreateDataPropertyOrThrow(_A_, _Pi_, _E_).
1. Set _i_ to _i_ + 1.
1. Repeat, while _i_ &lt; _newLen_,
1. Let _Pi_ be ! ToString(𝔽(_i_)).
1. Let _from_ be ! ToString(𝔽(_r_)).
1. Let _fromValue_ be ? Get(_O_, _from_).
1. Perform ! CreateDataPropertyOrThrow(_A_, _Pk_, _fromValue_).
1. Set _k_ to _k_ + 1.
1. Perform ! CreateDataPropertyOrThrow(_A_, _Pi_, _fromValue_).
1. Set _i_ to _i_ + 1.
1. Set _r_ to _r_ + 1.
1. Return _A_.
</emu-alg>
</emu-clause>
Expand Down Expand Up @@ -284,22 +286,24 @@ <h1>%TypedArray%.prototype.toSpliced ( _start_, _deleteCount_, ..._items_ )</h1>
1. Let _actualDeleteCount_ be the result of clamping _dc_ between 0 and _len_ - _actualStart_.
1. Let _newLen_ be _len_ + _insert_Count_ - _actualDeleteCount_.
1. Let _A_ be ? TypedArrayCreateSameType(_O_, &laquo; 𝔽(_newLen_) &raquo;).
1. Let _k_ be 0.
1. Repeat, while _k_ &lt; _actualStart_,
1. Let _Pk_ be ! ToString(𝔽(_k_)).
1. Let _kValue_ be ! Get(_src_, _Pk_).
1. Perform ! Set(_target_, _Pk_, _kValue_, *true*).
1. Set _k_ to _k_ + 1.
1. Let _i_ be 0.
1. Let _r_ be _actualStart_ + _actualDeleteCount_.
1. Repeat, while _i_ &lt; _actualStart_,
1. Let _Pi_ be ! ToString(𝔽(_i_)).
1. Let _iValue_ be ! Get(_src_, _Pi_).
1. Perform ! Set(_target_, _Pi_, _iValue_, *true*).
1. Set _i_ to _i_ + 1.
1. For each element _E_ of _items_, do
1. Let _Pk_ be ! ToString(𝔽(_k_)).
1. Perform ? Set(_A_, _Pk_, _E_, *true*).
1. Set _k_ to _k_ + 1.
1. Repeat, while _k_ &lt; _newLen_,
1. Let _Pk_ be ! ToString(𝔽(_k_)).
1. Let _from_ be ! ToString(𝔽(_k_ + _actualDeleteCount_ - _insertCount_)).
1. Let _Pi_ be ! ToString(𝔽(_i_)).
1. Perform ? Set(_A_, _Pi_, _E_, *true*).
1. Set _i_ to _i_ + 1.
1. Repeat, while _r_ &lt; _newLen_,
1. Let _Pi_ be ! ToString(𝔽(_i_)).
1. Let _from_ be ! ToString(𝔽(_r_)).
1. Let _fromValue_ be ! Get(_O_, _from_).
1. Perform ! Set(_A_, _Pk_, _fromValue_, *true*).
1. Set _k_ to _k_ + 1.
1. Perform ! Set(_A_, _Pi_, _fromValue_, *true*).
1. Set _i_ to _i_ + 1.
1. Set _r_ to _r_ + 1.
1. Return _A_.
</emu-alg>
</emu-clause>
Expand Down

0 comments on commit d2254e8

Please sign in to comment.