Open Jack-Works opened 4 years ago
Iterators/generators should have
%IteratorPrototype%
as its prototype, or in its prototype chain before any ECMAScript code runs.
Users are free to create iterators and set the prototype to pretty much anything they like, so this can presumably only be a constraint on "built-in" iterators (i.e., iterators created by built-in functions).
An iterator doesn't exist before any ECMAScript code runs, so it doesn't make sense to talk about its prototype chain before any ECMAScript code runs.
So I think a better way to express this invariant would be:
When a built-in function creates an iterator, it should specify its prototype to be either %IteratorPrototype%
or some %FooIteratorPrototype%
.
Every %FooIteratorPrototype%
should have %IteratorPrototype%
on its prototype chain when it's created.
Description
Iterators/generators should have
%IteratorPrototype%
as its prototype, or in its prototype chain before any ECMAScript code runs.Async iterators/generators should have
%AsyncIteratorPrototype%
as its prototype, or in its prototype chain before any ECMAScript code runs.Violations?
At the current point, there is nothing violating this in the 262 spec.
Rationale: Why did we have this invariant?
Make Iterator Helpers work for all built-in iterators. (initial discussion https://github.com/tc39/ecma262/pull/2045#issuecomment-664992764)