Skip to content

Iterator.contact fixes - #1623

Merged
saghul merged 2 commits into
masterfrom
iterator-concat-completion
Jul 31, 2026
Merged

Iterator.contact fixes#1623
saghul merged 2 commits into
masterfrom
iterator-concat-completion

Conversation

@saghul

@saghul saghul commented Jul 31, 2026

Copy link
Copy Markdown
Contributor
  • Complete the concat iterator when the value getter throws
  • Do not forward Iterator.concat().return() to a completed iterator

saghul added 2 commits July 31, 2026 13:45
js_iterator_concat_next() reached the `fail:` label, which marks the
iterator done, for every step failure but one: a throwing `value` getter
went straight to `done:` with a pending exception, leaving the iterator
suspended. A second next() then stepped the underlying iterator again
and threw again, where the spec has the generator completed and returns
an undefined, done result.

Fixes a case missed by "Fix the throw paths of the iterator helpers".
js_iterator_concat_return() ran IteratorClose whenever an iterator was
still open, including after an abrupt completion had already finished the
generator. The spec has %IteratorHelperPrototype%.return go through
GeneratorResumeAbrupt, which returns an undefined, done result right away
for a completed generator, without closing anything: after next() throws,
return() must not reach the underlying iterator.

Also mark the iterator done in return() itself, so that the state is
explicit rather than implied by the drained list of iterables.
@saghul
saghul merged commit 1736713 into master Jul 31, 2026
128 checks passed
@saghul
saghul deleted the iterator-concat-completion branch July 31, 2026 12:31
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant