[iterator] Adapt Iterator Helpers to ECMA-262 PR 3776 [v8/v8 : main]

0 views
Skip to first unread message

Olivier Flückiger (Gerrit)

unread,
10:07 AM (11 hours ago) 10:07 AM
to Nikolaos Papaspyrou, v8-re...@googlegroups.com
Attention needed from Nikolaos Papaspyrou

Olivier Flückiger voted and added 1 comment

Votes added by Olivier Flückiger

Auto-Submit+1
Commit-Queue+1

1 comment

Patchset-level comments
File-level comment, Patchset 2 (Latest):
Olivier Flückiger . resolved

ptal

Open in Gerrit

Related details

Attention is currently required from:
  • Nikolaos Papaspyrou
Submit Requirements:
  • requirement satisfiedCode-Owners
  • requirement is not satisfiedCode-Review
  • requirement is not satisfiedReview-Enforcement
Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
Gerrit-MessageType: comment
Gerrit-Project: v8/v8
Gerrit-Branch: main
Gerrit-Change-Id: I27fa44e1ee6708edf8fa5fa62f5d7c5012ebdb7a
Gerrit-Change-Number: 7859692
Gerrit-PatchSet: 2
Gerrit-Owner: Olivier Flückiger <ol...@chromium.org>
Gerrit-Reviewer: Nikolaos Papaspyrou <niko...@chromium.org>
Gerrit-Reviewer: Olivier Flückiger <ol...@chromium.org>
Gerrit-Attention: Nikolaos Papaspyrou <niko...@chromium.org>
Gerrit-Comment-Date: Tue, 19 May 2026 14:07:50 +0000
Gerrit-HasComments: Yes
Gerrit-Has-Labels: Yes
satisfied_requirement
unsatisfied_requirement
open
diffy

Nikolaos Papaspyrou (Gerrit)

unread,
10:32 AM (11 hours ago) 10:32 AM
to Olivier Flückiger, v8-s...@luci-project-accounts.iam.gserviceaccount.com, v8-re...@googlegroups.com
Attention needed from Olivier Flückiger

Nikolaos Papaspyrou voted and added 16 comments

Votes added by Nikolaos Papaspyrou

Code-Review+1

16 comments

Patchset-level comments
Nikolaos Papaspyrou . resolved

LGTM, modulo my OCD...
Thanks Olivier!

File src/builtins/iterator-helpers.tq
Line 475, Patchset 2 (Latest): // If numLimit is finite and numLimit > 𝔽(2^53 - 1), then
Nikolaos Papaspyrou . unresolved
```suggestion
// 7. If numLimit is finite and numLimit > 𝔽(2^53 - 1), then
```
Line 481, Patchset 2 (Latest): // 7. Let integerLimit be ! ToIntegerOrInfinity(numLimit).
Nikolaos Papaspyrou . unresolved
```suggestion
// 8. Let integerLimit be ! ToIntegerOrInfinity(numLimit).
```
Line 484, Patchset 2 (Latest): // 8. If integerLimit < 0, then
Nikolaos Papaspyrou . unresolved
```suggestion
// 9. If integerLimit < 0, then
```
Line 489, Patchset 2 (Latest): // 9. Set iterated to ? GetIteratorDirect(O).
Nikolaos Papaspyrou . unresolved
```suggestion
// 10. Set iterated to ? GetIteratorDirect(O).
```
Line 492, Patchset 2 (Latest): // Step 10 implemented in IteratorTakeHelperNext
Nikolaos Papaspyrou . unresolved
```suggestion
// Step 11 implemented in IteratorTakeHelperNext
```
Line 494, Patchset 2 (Latest): // 11. Let result be CreateIteratorFromClosure(closure, "Iterator Helper",
// %IteratorHelperPrototype%).
// 12. Set result.[[UnderlyingIterator]] to iterated.
// 13. Return result.
return NewJSIteratorTakeHelper(iterated, integerLimit);
Nikolaos Papaspyrou . unresolved
```suggestion
// 12. Let result be CreateIteratorFromClosure(closure, "Iterator Helper",
// %IteratorHelperPrototype%).
// 13. Set result.[[UnderlyingIterator]] to iterated.
// 14. Return result.
return NewJSIteratorTakeHelper(iterated, integerLimit);
```
Line 602, Patchset 2 (Latest): // If numLimit is finite and numLimit > 𝔽(2^53 - 1), then
Nikolaos Papaspyrou . unresolved
```suggestion
// 7. If numLimit is finite and numLimit > 𝔽(2^53 - 1), then
```
Line 608, Patchset 2 (Latest): // 7. Let integerLimit be ! ToIntegerOrInfinity(numLimit).
Nikolaos Papaspyrou . unresolved
```suggestion
// 8. Let integerLimit be ! ToIntegerOrInfinity(numLimit).
```
Line 611, Patchset 2 (Latest): // 8. If integerLimit < 0, then
Nikolaos Papaspyrou . unresolved
```suggestion
// 9. If integerLimit < 0, then
```
Line 616, Patchset 2 (Latest): // 9. Let iterated be ? GetIteratorDirect(O).
Nikolaos Papaspyrou . unresolved
```suggestion
// 10. Let iterated be ? GetIteratorDirect(O).
```
Line 619, Patchset 2 (Latest): // Step 10 implemented in IteratorDropHelperNext
Nikolaos Papaspyrou . unresolved
```suggestion
// Step 11 implemented in IteratorDropHelperNext
```
Line 621, Patchset 2 (Latest): // 11. Let result be CreateIteratorFromClosure(closure, "Iterator Helper",
// %IteratorHelperPrototype%).
// 12. Set result.[[UnderlyingIterator]] to iterated.
// 13. Return result.
Nikolaos Papaspyrou . unresolved
```suggestion
// 12. Let result be CreateIteratorFromClosure(closure, "Iterator Helper",
// %IteratorHelperPrototype%).
// 13. Set result.[[UnderlyingIterator]] to iterated.
// 14. Return result.
```
File test/mjsunit/harmony/iterator-take-drop-limit-range.js
Line 5, Patchset 2 (Latest):// Flags: --harmony-iterator-helpers

let closed = false;
Nikolaos Papaspyrou . unresolved

```suggestion
let closed = false;
```

Open in Gerrit

Related details

Attention is currently required from:
  • Olivier Flückiger
Submit Requirements:
  • requirement satisfiedCode-Owners
  • requirement satisfiedCode-Review
  • requirement is not satisfiedNo-Unresolved-Comments
  • requirement satisfiedReview-Enforcement
Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
Gerrit-MessageType: comment
Gerrit-Project: v8/v8
Gerrit-Branch: main
Gerrit-Change-Id: I27fa44e1ee6708edf8fa5fa62f5d7c5012ebdb7a
Gerrit-Change-Number: 7859692
Gerrit-PatchSet: 2
Gerrit-Owner: Olivier Flückiger <ol...@chromium.org>
Gerrit-Reviewer: Nikolaos Papaspyrou <niko...@chromium.org>
Gerrit-Reviewer: Olivier Flückiger <ol...@chromium.org>
Gerrit-Attention: Olivier Flückiger <ol...@chromium.org>
Gerrit-Comment-Date: Tue, 19 May 2026 14:32:08 +0000
Gerrit-HasComments: Yes
Gerrit-Has-Labels: Yes
satisfied_requirement
unsatisfied_requirement
open
diffy

Olivier Flückiger (Gerrit)

unread,
10:40 AM (11 hours ago) 10:40 AM
to Nikolaos Papaspyrou, v8-s...@luci-project-accounts.iam.gserviceaccount.com, v8-re...@googlegroups.com

Olivier Flückiger voted and added 16 comments

Votes added by Olivier Flückiger

Auto-Submit+1
Commit-Queue+2

16 comments

Patchset-level comments
File-level comment, Patchset 3 (Latest):
Olivier Flückiger . resolved

thank you and sorry for being such a lazy person 😊

File src/builtins/iterator-helpers.tq
Line 475, Patchset 2: // If numLimit is finite and numLimit > 𝔽(2^53 - 1), then
Nikolaos Papaspyrou . resolved
```suggestion
// 7. If numLimit is finite and numLimit > 𝔽(2^53 - 1), then
```
Olivier Flückiger

Fix applied.

Line 481, Patchset 2: // 7. Let integerLimit be ! ToIntegerOrInfinity(numLimit).
Nikolaos Papaspyrou . resolved
```suggestion
// 8. Let integerLimit be ! ToIntegerOrInfinity(numLimit).
```
Olivier Flückiger

Fix applied.

Line 484, Patchset 2: // 8. If integerLimit < 0, then
Nikolaos Papaspyrou . resolved
```suggestion
// 9. If integerLimit < 0, then
```
Olivier Flückiger

Fix applied.

Line 489, Patchset 2: // 9. Set iterated to ? GetIteratorDirect(O).
Nikolaos Papaspyrou . resolved
```suggestion
// 10. Set iterated to ? GetIteratorDirect(O).
```
Olivier Flückiger

Fix applied.

Line 492, Patchset 2: // Step 10 implemented in IteratorTakeHelperNext
Nikolaos Papaspyrou . resolved
```suggestion
// Step 11 implemented in IteratorTakeHelperNext
```
Olivier Flückiger

Fix applied.

Line 494, Patchset 2: // 11. Let result be CreateIteratorFromClosure(closure, "Iterator Helper",

// %IteratorHelperPrototype%).
// 12. Set result.[[UnderlyingIterator]] to iterated.
// 13. Return result.
return NewJSIteratorTakeHelper(iterated, integerLimit);
Nikolaos Papaspyrou . resolved
```suggestion
// 12. Let result be CreateIteratorFromClosure(closure, "Iterator Helper",
// %IteratorHelperPrototype%).
// 13. Set result.[[UnderlyingIterator]] to iterated.
// 14. Return result.
return NewJSIteratorTakeHelper(iterated, integerLimit);
```
Olivier Flückiger

Fix applied.

Line 602, Patchset 2: // If numLimit is finite and numLimit > 𝔽(2^53 - 1), then
Nikolaos Papaspyrou . resolved
```suggestion
// 7. If numLimit is finite and numLimit > 𝔽(2^53 - 1), then
```
Olivier Flückiger

Fix applied.

Line 608, Patchset 2: // 7. Let integerLimit be ! ToIntegerOrInfinity(numLimit).
Nikolaos Papaspyrou . resolved
```suggestion
// 8. Let integerLimit be ! ToIntegerOrInfinity(numLimit).
```
Olivier Flückiger

Fix applied.

Line 611, Patchset 2: // 8. If integerLimit < 0, then
Nikolaos Papaspyrou . resolved
```suggestion
// 9. If integerLimit < 0, then
```
Olivier Flückiger

Fix applied.

Line 616, Patchset 2: // 9. Let iterated be ? GetIteratorDirect(O).
Nikolaos Papaspyrou . resolved
```suggestion
// 10. Let iterated be ? GetIteratorDirect(O).
```
Olivier Flückiger

Done

Line 619, Patchset 2: // Step 10 implemented in IteratorDropHelperNext
Nikolaos Papaspyrou . resolved
```suggestion
// Step 11 implemented in IteratorDropHelperNext
```
Olivier Flückiger

Fix applied.

Line 621, Patchset 2: // 11. Let result be CreateIteratorFromClosure(closure, "Iterator Helper",

// %IteratorHelperPrototype%).
// 12. Set result.[[UnderlyingIterator]] to iterated.
// 13. Return result.
Nikolaos Papaspyrou . resolved
```suggestion
// 12. Let result be CreateIteratorFromClosure(closure, "Iterator Helper",
// %IteratorHelperPrototype%).
// 13. Set result.[[UnderlyingIterator]] to iterated.
// 14. Return result.
```
Olivier Flückiger

Fix applied.

File test/mjsunit/harmony/iterator-take-drop-limit-range.js
Line 5, Patchset 2:// Flags: --harmony-iterator-helpers

let closed = false;
Nikolaos Papaspyrou . resolved

```suggestion
let closed = false;
```

Olivier Flückiger

Fix applied.

Open in Gerrit

Related details

Attention set is empty
Submit Requirements:
    • requirement satisfiedCode-Owners
    • requirement satisfiedCode-Review
    • requirement satisfiedReview-Enforcement
    Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
    Gerrit-MessageType: comment
    Gerrit-Project: v8/v8
    Gerrit-Branch: main
    Gerrit-Change-Id: I27fa44e1ee6708edf8fa5fa62f5d7c5012ebdb7a
    Gerrit-Change-Number: 7859692
    Gerrit-PatchSet: 3
    Gerrit-Owner: Olivier Flückiger <ol...@chromium.org>
    Gerrit-Reviewer: Nikolaos Papaspyrou <niko...@chromium.org>
    Gerrit-Reviewer: Olivier Flückiger <ol...@chromium.org>
    Gerrit-Comment-Date: Tue, 19 May 2026 14:40:47 +0000
    Gerrit-HasComments: Yes
    Gerrit-Has-Labels: Yes
    Comment-In-Reply-To: Nikolaos Papaspyrou <niko...@chromium.org>
    satisfied_requirement
    open
    diffy

    v8-scoped@luci-project-accounts.iam.gserviceaccount.com (Gerrit)

    unread,
    11:21 AM (10 hours ago) 11:21 AM
    to Olivier Flückiger, Nikolaos Papaspyrou, v8-re...@googlegroups.com

    v8-s...@luci-project-accounts.iam.gserviceaccount.com submitted the change with unreviewed changes

    Unreviewed changes

    2 is the latest approved patch-set.
    The change was submitted with unreviewed changes in the following files:

    ```
    The name of the file: test/mjsunit/harmony/iterator-take-drop-limit-range.js
    Insertions: 0, Deletions: 2.

    @@ -2,8 +2,6 @@
    // Use of this source code is governed by a BSD-style license that can be
    // found in the LICENSE file.

    -// Flags: --harmony-iterator-helpers
    -
    let closed = false;
    function createMockIterator() {
    return {
    ```
    ```
    The name of the file: src/builtins/iterator-helpers.tq
    Insertions: 20, Deletions: 20.

    @@ -441,7 +441,7 @@
    };
    }

    -// https://tc39.es/ecma262/#sec-iteratorprototype.take
    +// https://tc39.es/ecma262/#sec-iterator.prototype.take
    @incrementUseCounter('v8::Isolate::kIteratorMethods')
    transitioning javascript builtin IteratorPrototypeTake(
    js-implicit context: NativeContext, receiver: JSAny)(
    @@ -472,29 +472,29 @@
    // b. Return ? IteratorClose(iterated, error).
    if (NumberIsNaN(numLimit)) goto RangeError(o);

    - // If numLimit is finite and numLimit > 𝔽(2^53 - 1), then
    + // 7. If numLimit is finite and numLimit > 𝔽(2^53 - 1), then
    // a. Let error be ThrowCompletion(a newly created RangeError object).
    // b. Return ? IteratorClose(iterated, error).
    if (!NumberIsSomeInfinity(numLimit) && numLimit > kMaxSafeInteger)
    goto RangeError(o);

    - // 7. Let integerLimit be ! ToIntegerOrInfinity(numLimit).
    + // 8. Let integerLimit be ! ToIntegerOrInfinity(numLimit).
    const integerLimit = ToInteger_Inline(numLimit);

    - // 8. If integerLimit < 0, then
    + // 9. If integerLimit < 0, then
    // a. Let error be ThrowCompletion(a newly created RangeError object).
    // b. Return ? IteratorClose(iterated, error).
    if (integerLimit < 0) goto RangeError(o);

    - // 9. Set iterated to ? GetIteratorDirect(O).
    + // 10. Set iterated to ? GetIteratorDirect(O).
    const iterated = GetIteratorDirect(o);

    - // Step 10 implemented in IteratorTakeHelperNext
    + // Step 11 implemented in IteratorTakeHelperNext

    - // 11. Let result be CreateIteratorFromClosure(closure, "Iterator Helper",
    - // %IteratorHelperPrototype%).
    - // 12. Set result.[[UnderlyingIterator]] to iterated.
    - // 13. Return result.
    + // 12. Let result be CreateIteratorFromClosure(closure, "Iterator Helper",
    + // %IteratorHelperPrototype%).
    + // 13. Set result.[[UnderlyingIterator]] to iterated.
    + // 14. Return result.
    return NewJSIteratorTakeHelper(iterated, integerLimit);
    } label RangeError(iteratorObject: JSReceiver) deferred {
    IteratorCloseOnException(iteratorObject);
    @@ -568,7 +568,7 @@
    };
    }

    -// https://tc39.es/ecma262/#sec-iteratorprototype.drop
    +// https://tc39.es/ecma262/#sec-iterator.prototype.drop
    @incrementUseCounter('v8::Isolate::kIteratorMethods')
    transitioning javascript builtin IteratorPrototypeDrop(
    js-implicit context: NativeContext, receiver: JSAny)(
    @@ -599,29 +599,29 @@
    // b. Return ? IteratorClose(iterated, error).
    if (NumberIsNaN(numLimit)) goto RangeError(o);

    - // If numLimit is finite and numLimit > 𝔽(2^53 - 1), then
    + // 7. If numLimit is finite and numLimit > 𝔽(2^53 - 1), then
    // a. Let error be ThrowCompletion(a newly created RangeError object).
    // b. Return ? IteratorClose(iterated, error).
    if (!NumberIsSomeInfinity(numLimit) && numLimit > kMaxSafeInteger)
    goto RangeError(o);

    - // 7. Let integerLimit be ! ToIntegerOrInfinity(numLimit).
    + // 8. Let integerLimit be ! ToIntegerOrInfinity(numLimit).
    const integerLimit = ToInteger_Inline(numLimit);

    - // 8. If integerLimit < 0, then
    + // 9. If integerLimit < 0, then
    // a. Let error be ThrowCompletion(a newly created RangeError object).
    // b. Return ? IteratorClose(iterated, error).
    if (integerLimit < 0) goto RangeError(o);

    - // 9. Let iterated be ? GetIteratorDirect(O).
    + // 10. Let iterated be ? GetIteratorDirect(O).
    const iterated = GetIteratorDirect(o);

    - // Step 10 implemented in IteratorDropHelperNext
    + // Step 11 implemented in IteratorDropHelperNext

    - // 11. Let result be CreateIteratorFromClosure(closure, "Iterator Helper",
    - // %IteratorHelperPrototype%).
    - // 12. Set result.[[UnderlyingIterator]] to iterated.
    - // 13. Return result.
    + // 12. Let result be CreateIteratorFromClosure(closure, "Iterator Helper",
    + // %IteratorHelperPrototype%).
    + // 13. Set result.[[UnderlyingIterator]] to iterated.
    + // 14. Return result.
    return NewJSIteratorDropHelper(iterated, integerLimit);
    } label RangeError(iteratorObject: JSReceiver) deferred {
    IteratorCloseOnException(iteratorObject);
    ```

    Change information

    Commit message:
    [iterator] Adapt Iterator Helpers to ECMA-262 PR 3776

    Aligns Iterator.prototype.take and Iterator.prototype.drop with the
    normative changes in https://github.com/tc39/ecma262/pull/3776.
    Specifically, if numLimit is finite and strictly greater than 2^53 - 1
    (kMaxSafeInteger), V8 now correctly closes the iterator and throws a
    RangeError.

    TAG=agy
    CONV=df8a3037-745d-4141-afa0-f7f025cb3248
    Bug: 476989751
    Change-Id: I27fa44e1ee6708edf8fa5fa62f5d7c5012ebdb7a
    Reviewed-by: Nikolaos Papaspyrou <niko...@chromium.org>
    Commit-Queue: Olivier Flückiger <ol...@chromium.org>
    Auto-Submit: Olivier Flückiger <ol...@chromium.org>
    Cr-Commit-Position: refs/heads/main@{#107429}
    Files:
    • M src/builtins/iterator-helpers.tq
    • A test/mjsunit/harmony/iterator-take-drop-limit-range.js
    Change size: M
    Delta: 2 files changed, 59 insertions(+), 18 deletions(-)
    Branch: refs/heads/main
    Submit Requirements:
    • requirement satisfiedCode-Review: +1 by Nikolaos Papaspyrou
    Open in Gerrit
    Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
    Gerrit-MessageType: merged
    Gerrit-Project: v8/v8
    Gerrit-Branch: main
    Gerrit-Change-Id: I27fa44e1ee6708edf8fa5fa62f5d7c5012ebdb7a
    Gerrit-Change-Number: 7859692
    Gerrit-PatchSet: 4
    Gerrit-Owner: Olivier Flückiger <ol...@chromium.org>
    Gerrit-Reviewer: Nikolaos Papaspyrou <niko...@chromium.org>
    Gerrit-Reviewer: Olivier Flückiger <ol...@chromium.org>
    open
    diffy
    satisfied_requirement
    Reply all
    Reply to author
    Forward
    0 new messages