From c82a62cca2755fa8bda1745f1efd9aac3d46f24e Mon Sep 17 00:00:00 2001 From: Lee Byron Date: Sun, 21 May 2017 00:29:06 +0200 Subject: [PATCH] Update core.js * Changes `$Iterator`'s `@@iterator` method to return `this`. * An `$Iterator` is an `$Iterable` * Add optional `return` and `throw` methods to `$Iterator` (http://www.ecma-international.org/ecma-262/7.0/#table-54) * A `$Generator` is an `$Iterator` * Fix mistaken function name to `$asyncIterate` to match style of `$iterate`. --- lib/core.js | 38 +++++++++++++++++++++----------------- 1 file changed, 21 insertions(+), 17 deletions(-) diff --git a/lib/core.js b/lib/core.js index 9fa57c32d06..697882cf305 100644 --- a/lib/core.js +++ b/lib/core.js @@ -547,19 +547,21 @@ type IteratorResult = | { done: true, value?: Return } | { done: false, value: Yield }; -interface $Iterator<+Yield,+Return,-Next> { - @@iterator(): $Iterator; - next(value?: Next): IteratorResult; -} -type Iterator<+T> = $Iterator; - interface $Iterable<+Yield,+Return,-Next> { @@iterator(): $Iterator; } type Iterable<+T> = $Iterable; -interface Generator<+Yield,+Return,-Next> { - @@iterator(): $Iterator; +interface $Iterator<+Yield,+Return,-Next> implements $Iterable { + @@iterator(): this; + next(value?: Next): IteratorResult; + return?: (value: R) => IteratorResult; + throw?: (error?: any) => IteratorResult; +} +type Iterator<+T> = $Iterator; + +interface Generator<+Yield,+Return,-Next> implements $Iterator { + @@iterator(): this; next(value?: Next): IteratorResult; return(value: R): IteratorResult; throw(error?: any): IteratorResult; @@ -569,25 +571,27 @@ declare function $iterate(p: Iterable): T; /* Async Iterable/Iterator/Generator */ -interface $AsyncIterator<+Yield,+Return,-Next> { - @@asyncIterator(): $AsyncIterator; - next(value?: Next): Promise>; -} -type AsyncIterator<+T> = $AsyncIterator; - interface $AsyncIterable<+Yield,+Return,-Next> { @@asyncIterator(): $AsyncIterator; } type AsyncIterable<+T> = $AsyncIterable; -interface AsyncGenerator<+Yield,+Return,-Next> { - @@asyncIterator(): $AsyncIterator; +interface $AsyncIterator<+Yield,+Return,-Next> implements $AsyncIterable { + @@asyncIterator(): this; + next(value?: Next): Promise>; + return?: (value: R) => Promise>; + throw? (error?: any) => Promise>; +} +type AsyncIterator<+T> = $AsyncIterator; + +interface AsyncGenerator<+Yield,+Return,-Next> implements $AsyncIterator { + @@asyncIterator(): this; next(value?: Next): Promise>; return(value: R): Promise>; throw(error?: any): Promise>; } -declare function $asyncIterator(p: AsyncIterable): T; +declare function $asyncIterate(p: AsyncIterable): T; /* Maps and Sets */