Skip to content

Commit d367283

Browse files
committed
Editorial: Simplify the algorithms for Array and TypedArray constructors
1 parent 0b913e9 commit d367283

File tree

1 file changed

+31
-35
lines changed

1 file changed

+31
-35
lines changed

spec.html

Lines changed: 31 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -39362,7 +39362,7 @@ <h1>Array ( ..._values_ )</h1>
3936239362
1. Let _numberOfArgs_ be the number of elements in _values_.
3936339363
1. If _numberOfArgs_ = 0, then
3936439364
1. Return ! ArrayCreate(0, _proto_).
39365-
1. Else if _numberOfArgs_ = 1, then
39365+
1. If _numberOfArgs_ = 1, then
3936639366
1. Let _len_ be _values_[0].
3936739367
1. Let _array_ be ! ArrayCreate(0, _proto_).
3936839368
1. If _len_ is not a Number, then
@@ -39373,17 +39373,16 @@ <h1>Array ( ..._values_ )</h1>
3937339373
1. If SameValueZero(_intLen_, _len_) is *false*, throw a *RangeError* exception.
3937439374
1. Perform ! Set(_array_, *"length"*, _intLen_, *true*).
3937539375
1. Return _array_.
39376-
1. Else,
39377-
1. Assert: _numberOfArgs_ ≥ 2.
39378-
1. Let _array_ be ? ArrayCreate(_numberOfArgs_, _proto_).
39379-
1. Let _k_ be 0.
39380-
1. Repeat, while _k_ &lt; _numberOfArgs_,
39381-
1. Let _Pk_ be ! ToString(𝔽(_k_)).
39382-
1. Let _itemK_ be _values_[_k_].
39383-
1. Perform ! CreateDataPropertyOrThrow(_array_, _Pk_, _itemK_).
39384-
1. Set _k_ to _k_ + 1.
39385-
1. Assert: The mathematical value of _array_'s *"length"* property is _numberOfArgs_.
39386-
1. Return _array_.
39376+
1. Assert: _numberOfArgs_ ≥ 2.
39377+
1. Let _array_ be ? ArrayCreate(_numberOfArgs_, _proto_).
39378+
1. Let _k_ be 0.
39379+
1. Repeat, while _k_ &lt; _numberOfArgs_,
39380+
1. Let _Pk_ be ! ToString(𝔽(_k_)).
39381+
1. Let _itemK_ be _values_[_k_].
39382+
1. Perform ! CreateDataPropertyOrThrow(_array_, _Pk_, _itemK_).
39383+
1. Set _k_ to _k_ + 1.
39384+
1. Assert: The mathematical value of _array_'s *"length"* property is _numberOfArgs_.
39385+
1. Return _array_.
3938739386
</emu-alg>
3938839387
</emu-clause>
3938939388
</emu-clause>
@@ -42286,30 +42285,27 @@ <h1>_TypedArray_ ( ..._args_ )</h1>
4228642285
1. Let _numberOfArgs_ be the number of elements in _args_.
4228742286
1. If _numberOfArgs_ = 0, then
4228842287
1. Return ? AllocateTypedArray(_constructorName_, NewTarget, _proto_, 0).
42289-
1. Else,
42290-
1. Let _firstArgument_ be _args_[0].
42291-
1. If _firstArgument_ is an Object, then
42292-
1. Let _O_ be ? AllocateTypedArray(_constructorName_, NewTarget, _proto_).
42293-
1. If _firstArgument_ has a [[TypedArrayName]] internal slot, then
42294-
1. Perform ? InitializeTypedArrayFromTypedArray(_O_, _firstArgument_).
42295-
1. Else if _firstArgument_ has an [[ArrayBufferData]] internal slot, then
42296-
1. If _numberOfArgs_ > 1, let _byteOffset_ be _args_[1]; else let _byteOffset_ be *undefined*.
42297-
1. If _numberOfArgs_ > 2, let _length_ be _args_[2]; else let _length_ be *undefined*.
42298-
1. Perform ? InitializeTypedArrayFromArrayBuffer(_O_, _firstArgument_, _byteOffset_, _length_).
42299-
1. Else,
42300-
1. Assert: _firstArgument_ is an Object and _firstArgument_ does not have either a [[TypedArrayName]] or an [[ArrayBufferData]] internal slot.
42301-
1. Let _usingIterator_ be ? GetMethod(_firstArgument_, %Symbol.iterator%).
42302-
1. If _usingIterator_ is not *undefined*, then
42303-
1. Let _values_ be ? IteratorToList(? GetIteratorFromMethod(_firstArgument_, _usingIterator_)).
42304-
1. Perform ? InitializeTypedArrayFromList(_O_, _values_).
42305-
1. Else,
42306-
1. NOTE: _firstArgument_ is not an iterable object, so assume it is already an array-like object.
42307-
1. Perform ? InitializeTypedArrayFromArrayLike(_O_, _firstArgument_).
42308-
1. Return _O_.
42288+
1. Let _firstArgument_ be _args_[0].
42289+
1. If _firstArgument_ is an Object, then
42290+
1. Let _O_ be ? AllocateTypedArray(_constructorName_, NewTarget, _proto_).
42291+
1. If _firstArgument_ has a [[TypedArrayName]] internal slot, then
42292+
1. Perform ? InitializeTypedArrayFromTypedArray(_O_, _firstArgument_).
42293+
1. Else if _firstArgument_ has an [[ArrayBufferData]] internal slot, then
42294+
1. If _numberOfArgs_ > 1, let _byteOffset_ be _args_[1]; else let _byteOffset_ be *undefined*.
42295+
1. If _numberOfArgs_ > 2, let _length_ be _args_[2]; else let _length_ be *undefined*.
42296+
1. Perform ? InitializeTypedArrayFromArrayBuffer(_O_, _firstArgument_, _byteOffset_, _length_).
4230942297
1. Else,
42310-
1. Assert: _firstArgument_ is not an Object.
42311-
1. Let _elementLength_ be ? ToIndex(_firstArgument_).
42312-
1. Return ? AllocateTypedArray(_constructorName_, NewTarget, _proto_, _elementLength_).
42298+
1. Let _usingIterator_ be ? GetMethod(_firstArgument_, %Symbol.iterator%).
42299+
1. If _usingIterator_ is not *undefined*, then
42300+
1. Let _values_ be ? IteratorToList(? GetIteratorFromMethod(_firstArgument_, _usingIterator_)).
42301+
1. Perform ? InitializeTypedArrayFromList(_O_, _values_).
42302+
1. Else,
42303+
1. NOTE: _firstArgument_ is not an iterable object, so assume it is already an array-like object.
42304+
1. Perform ? InitializeTypedArrayFromArrayLike(_O_, _firstArgument_).
42305+
1. Return _O_.
42306+
1. Assert: _firstArgument_ is not an Object.
42307+
1. Let _elementLength_ be ? ToIndex(_firstArgument_).
42308+
1. Return ? AllocateTypedArray(_constructorName_, NewTarget, _proto_, _elementLength_).
4231342309
</emu-alg>
4231442310

4231542311
<emu-clause id="sec-allocatetypedarray" type="abstract operation">

0 commit comments

Comments
 (0)