diff --git a/polyfill.js b/polyfill.js index c48740c..75cc749 100644 --- a/polyfill.js +++ b/polyfill.js @@ -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++; } } diff --git a/spec.html b/spec.html index 05541a6..8a6bbfd 100644 --- a/spec.html +++ b/spec.html @@ -88,22 +88,24 @@

Array.prototype.toSpliced ( _start_, _deleteCount_, ..._items_ )

1. Let _newLen_ be _len_ + _insertCount_ - _actualDeleteCount_. 1. If _newLen_ > 253 - 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_ < _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_ < _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_ < _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_. @@ -284,22 +286,24 @@

%TypedArray%.prototype.toSpliced ( _start_, _deleteCount_, ..._items_ )

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_, « 𝔽(_newLen_) »). - 1. Let _k_ be 0. - 1. Repeat, while _k_ < _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_ < _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_ < _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_ < _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_.