| OLD | NEW |
| 1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
| 3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
| 4 | 4 |
| 5 library rewrite_async; | 5 library rewrite_async; |
| 6 | 6 |
| 7 import 'dart:collection'; | 7 import 'dart:collection'; |
| 8 import 'dart:math' show max; | 8 import 'dart:math' show max; |
| 9 | 9 |
| 10 import 'package:js_runtime/shared/async_await_error_codes.dart' as error_codes; | 10 import 'package:js_runtime/shared/async_await_error_codes.dart' as error_codes; |
| (...skipping 2018 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2029 /// Also [nextWhenCanceled] is set up to contain the finally blocks that | 2029 /// Also [nextWhenCanceled] is set up to contain the finally blocks that |
| 2030 /// must be run in case the stream was canceled. | 2030 /// must be run in case the stream was canceled. |
| 2031 @override | 2031 @override |
| 2032 void addYield(js.DartYield node, js.Expression expression) { | 2032 void addYield(js.DartYield node, js.Expression expression) { |
| 2033 // Find all the finally blocks that should be performed if the stream is | 2033 // Find all the finally blocks that should be performed if the stream is |
| 2034 // canceled during the yield. | 2034 // canceled during the yield. |
| 2035 // At the bottom of the stack is the return label. | 2035 // At the bottom of the stack is the return label. |
| 2036 List<int> enclosingFinallyLabels = <int>[exitLabel]; | 2036 List<int> enclosingFinallyLabels = <int>[exitLabel]; |
| 2037 enclosingFinallyLabels.addAll(jumpTargets | 2037 enclosingFinallyLabels.addAll(jumpTargets |
| 2038 .where((js.Node node) => finallyLabels[node] != null) | 2038 .where((js.Node node) => finallyLabels[node] != null) |
| 2039 .map((js.Block node) => finallyLabels[node])); | 2039 .map((js.Node node) => finallyLabels[node])); |
| 2040 addStatement(js.js.statement("# = #;", [ | 2040 addStatement(js.js.statement("# = #;", [ |
| 2041 nextWhenCanceled, | 2041 nextWhenCanceled, |
| 2042 new js.ArrayInitializer(enclosingFinallyLabels.map(js.number).toList()) | 2042 new js.ArrayInitializer(enclosingFinallyLabels.map(js.number).toList()) |
| 2043 ])); | 2043 ])); |
| 2044 addStatement(js.js.statement( | 2044 addStatement(js.js.statement( |
| 2045 """ | 2045 """ |
| 2046 return #asyncStarHelper(#yieldExpression(#expression), #bodyName, | 2046 return #asyncStarHelper(#yieldExpression(#expression), #bodyName, |
| 2047 #controller);""", | 2047 #controller);""", |
| 2048 { | 2048 { |
| 2049 "asyncStarHelper": asyncStarHelper, | 2049 "asyncStarHelper": asyncStarHelper, |
| (...skipping 564 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2614 return condition || body; | 2614 return condition || body; |
| 2615 } | 2615 } |
| 2616 | 2616 |
| 2617 @override | 2617 @override |
| 2618 bool visitDartYield(js.DartYield node) { | 2618 bool visitDartYield(js.DartYield node) { |
| 2619 hasYield = true; | 2619 hasYield = true; |
| 2620 visit(node.expression); | 2620 visit(node.expression); |
| 2621 return true; | 2621 return true; |
| 2622 } | 2622 } |
| 2623 } | 2623 } |
| OLD | NEW |