Chromium Code Reviews| Index: pkg/dev_compiler/tool/input_sdk/private/ddc_runtime/generators.dart |
| diff --git a/pkg/dev_compiler/tool/input_sdk/private/ddc_runtime/generators.dart b/pkg/dev_compiler/tool/input_sdk/private/ddc_runtime/generators.dart |
| index cc022d2221fc9d272ccae1af70cf00c3220c3114..99d3b3f27f2a21c5a4539f2b5767fc55be30a8dd 100644 |
| --- a/pkg/dev_compiler/tool/input_sdk/private/ddc_runtime/generators.dart |
| +++ b/pkg/dev_compiler/tool/input_sdk/private/ddc_runtime/generators.dart |
| @@ -14,12 +14,8 @@ part of dart._runtime; |
| final _jsIterator = JS('', 'Symbol("_jsIterator")'); |
| final _current = JS('', 'Symbol("_current")'); |
| -syncStar(gen, E, @rest args) => JS( |
| - '', |
| - '''(() => { |
| - const SyncIterable_E = ${getGenericClass(SyncIterable)}($E); |
| - return new SyncIterable_E($gen, $args); |
| -})()'''); |
| +syncStar(gen, E, @rest args) => |
| + JS('', 'new (${getGenericClass(SyncIterable)}($E).new)($gen, $args)'); |
| @JSExportName('async') |
| async_(gen, T, @rest args) => JS( |
| @@ -79,30 +75,30 @@ async_(gen, T, @rest args) => JS( |
| return result; |
| })()'''); |
| -// Implementation inspired by _AsyncStarStreamController in |
| -// dart-lang/sdk's runtime/lib/core_patch.dart |
| -// |
| -// Given input like: |
| -// |
| -// foo() async* { |
| -// yield 1; |
| -// yield* bar(); |
| -// print(await baz()); |
| -// } |
| -// |
| -// This generates as: |
| -// |
| -// function foo() { |
| -// return dart.asyncStar(function*(stream) { |
| -// if (stream.add(1)) return; |
| -// yield; |
| -// if (stream.addStream(bar()) return; |
| -// yield; |
| -// print(yield baz()); |
| -// }); |
| -// } |
| -// |
| -// TODO(ochafik): Port back to Dart (which it used to be in the past). |
| +/// Implementation inspired by _AsyncStarStreamController in |
| +/// dart-lang/sdk's runtime/lib/core_patch.dart |
| +/// |
| +/// Given input like: |
| +/// |
| +/// foo() async* { |
| +/// yield 1; |
| +/// yield* bar(); |
| +/// print(await baz()); |
| +/// } |
| +/// |
| +/// This generates as: |
| +/// |
| +/// function foo() { |
| +/// return dart.asyncStar(function*(stream) { |
| +/// if (stream.add(1)) return; |
| +/// yield; |
| +/// if (stream.addStream(bar()) return; |
| +/// yield; |
| +/// print(yield baz()); |
| +/// }); |
| +/// } |
| +/// |
| +// TODO(jmesserly): port back to Dart, based on VM's equivalent class. |
| final _AsyncStarStreamController = JS( |
| '', |
| ''' |
| @@ -245,10 +241,6 @@ final _AsyncStarStreamController = JS( |
| } |
| '''); |
| -/// Returns a Stream of T implemented by an async* function. */ |
| -/// |
| -asyncStar(gen, T, @rest args) => JS( |
| - '', |
| - '''(() => { |
| - return new $_AsyncStarStreamController($gen, $T, $args).controller.stream; |
| -})()'''); |
| +/// Returns a Stream of T implemented by an async* function. |
| +asyncStar(gen, T, @rest args) => JS('', 'new #(#, #, #).controller.stream', |
|
vsm
2017/06/12 19:39:31
Do we need a '.new' here on the constructor?
Jennifer Messerly
2017/06/12 22:19:34
we don't because it's a JavaScript class not a Dar
|
| + _AsyncStarStreamController, gen, T, args); |