tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

commit 3bd23014b758ca15d96769ef64cf053862b8f51a
parent 7f7402dfe6120d8880602a6cf8b1415b88010b70
Author: Iain Ireland <iireland@mozilla.com>
Date:   Thu, 13 Nov 2025 23:37:51 +0000

Bug 1998297: Use a macro for CreateArrayIterator r=jandem

Differential Revision: https://phabricator.services.mozilla.com/D271333

Diffstat:
Mjs/src/builtin/Array.js | 16+++-------------
Mjs/src/builtin/SelfHostingDefines.h | 9+++++++++
Mjs/src/builtin/TypedArray.js | 6+++---
3 files changed, 15 insertions(+), 16 deletions(-)

diff --git a/js/src/builtin/Array.js b/js/src/builtin/Array.js @@ -514,16 +514,6 @@ function ArrayFill(value, start = 0, end = undefined) { return O; } -// ES6 draft specification, section 22.1.5.1, version 2013-09-05. -function CreateArrayIterator(obj, kind) { - var iteratedObject = ToObject(obj); - var iterator = NewArrayIterator(); - UnsafeSetReservedSlot(iterator, ITERATOR_SLOT_TARGET, iteratedObject); - UnsafeSetReservedSlot(iterator, ITERATOR_SLOT_NEXT_INDEX, 0); - UnsafeSetReservedSlot(iterator, ARRAY_ITERATOR_SLOT_ITEM_KIND, kind); - return iterator; -} - // ES6, 22.1.5.2.1 // http://www.ecma-international.org/ecma-262/6.0/index.html#sec-%arrayiteratorprototype%.next function ArrayIteratorNext() { @@ -603,16 +593,16 @@ SetIsInlinableLargeFunction(ArrayIteratorNext); // Uncloned functions with `$` prefix are allocated as extended function // to store the original name in `SetCanonicalName`. function $ArrayValues() { - return CreateArrayIterator(this, ITEM_KIND_VALUE); + RETURN_ARRAY_ITERATOR(this, ITEM_KIND_VALUE); } SetCanonicalName($ArrayValues, "values"); function ArrayEntries() { - return CreateArrayIterator(this, ITEM_KIND_KEY_AND_VALUE); + RETURN_ARRAY_ITERATOR(this, ITEM_KIND_KEY_AND_VALUE); } function ArrayKeys() { - return CreateArrayIterator(this, ITEM_KIND_KEY); + RETURN_ARRAY_ITERATOR(this, ITEM_KIND_KEY); } // https://tc39.es/proposal-array-from-async/ diff --git a/js/src/builtin/SelfHostingDefines.h b/js/src/builtin/SelfHostingDefines.h @@ -87,6 +87,15 @@ // Item kind for Map/Set iterators. #define MAP_SET_ITERATOR_SLOT_ITEM_KIND 1 +/* Spec: https://tc39.es/ecma262/#sec-createarrayiterator */ +#define RETURN_ARRAY_ITERATOR(obj, kind) \ + var iteratedObject = ToObject(obj); \ + var iterator = NewArrayIterator(); \ + UnsafeSetReservedSlot(iterator, ITERATOR_SLOT_TARGET, iteratedObject); \ + UnsafeSetReservedSlot(iterator, ITERATOR_SLOT_NEXT_INDEX, 0); \ + UnsafeSetReservedSlot(iterator, ARRAY_ITERATOR_SLOT_ITEM_KIND, kind); \ + return iterator + #define ITEM_KIND_KEY 0 #define ITEM_KIND_VALUE 1 #define ITEM_KIND_KEY_AND_VALUE 2 diff --git a/js/src/builtin/TypedArray.js b/js/src/builtin/TypedArray.js @@ -214,7 +214,7 @@ function TypedArrayEntries() { PossiblyWrappedTypedArrayLength(O); // Step 7. - return CreateArrayIterator(O, ITEM_KIND_KEY_AND_VALUE); + RETURN_ARRAY_ITERATOR(O, ITEM_KIND_KEY_AND_VALUE); } // ES2021 draft rev 190d474c3d8728653fbf8a5a37db1de34b9c1472 @@ -456,7 +456,7 @@ function TypedArrayKeys() { PossiblyWrappedTypedArrayLength(O); // Step 3. - return CreateArrayIterator(O, ITEM_KIND_KEY); + RETURN_ARRAY_ITERATOR(O, ITEM_KIND_KEY); } // ES2017 draft rev 6859bb9ccaea9c6ede81d71e5320e3833b92cb3e @@ -879,7 +879,7 @@ function $TypedArrayValues() { PossiblyWrappedTypedArrayLength(O); // Step 7. - return CreateArrayIterator(O, ITEM_KIND_VALUE); + RETURN_ARRAY_ITERATOR(O, ITEM_KIND_VALUE); } SetCanonicalName($TypedArrayValues, "values");