| 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 // TODO(sigurdm): Throws in catch-handlers are handled wrong. | 7 // TODO(sigurdm): Throws in catch-handlers are handled wrong. |
| 8 // TODO(sigurdm): Avoid using variables in templates. It could blow up memory | 8 // TODO(sigurdm): Avoid using variables in templates. It could blow up memory |
| 9 // use. | 9 // use. |
| 10 | 10 |
| (...skipping 772 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 783 inits.add(makeInit(gotoName, js.number(0))); | 783 inits.add(makeInit(gotoName, js.number(0))); |
| 784 if (isAsync) { | 784 if (isAsync) { |
| 785 inits.add(makeInit(completerName, new js.New(newCompleter, []))); | 785 inits.add(makeInit(completerName, new js.New(newCompleter, []))); |
| 786 } else if (isAsyncStar) { | 786 } else if (isAsyncStar) { |
| 787 inits.add(makeInit(controllerName, | 787 inits.add(makeInit(controllerName, |
| 788 new js.Call(newController, [new js.VariableUse(helperName)]))); | 788 new js.Call(newController, [new js.VariableUse(helperName)]))); |
| 789 } | 789 } |
| 790 if (hasTryBlocks) { | 790 if (hasTryBlocks) { |
| 791 inits.add(makeInit(handlerName, new js.LiteralNull())); | 791 inits.add(makeInit(handlerName, new js.LiteralNull())); |
| 792 } | 792 } |
| 793 if (hasJumpThroughFinally) { | 793 if (hasJumpThroughFinally || analysis.hasYield) { |
| 794 inits.add(makeInit(nextName, null)); | 794 inits.add(makeInit(nextName, null)); |
| 795 } | 795 } |
| 796 if (analysis.hasExplicitReturns && isAsync) { | 796 if (analysis.hasExplicitReturns && isAsync) { |
| 797 inits.add(makeInit(returnValueName, null)); | 797 inits.add(makeInit(returnValueName, null)); |
| 798 } | 798 } |
| 799 if (analysis.hasThis && !isSyncStar) { | 799 if (analysis.hasThis && !isSyncStar) { |
| 800 // Sync* functions must remember `this` on the level of the outer | 800 // Sync* functions must remember `this` on the level of the outer |
| 801 // function. | 801 // function. |
| 802 inits.add(makeInit(selfName, new js.This())); | 802 inits.add(makeInit(selfName, new js.This())); |
| 803 } | 803 } |
| (...skipping 942 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1746 Map<js.Node, js.Node> targets = new Map<js.Node, js.Node>(); | 1746 Map<js.Node, js.Node> targets = new Map<js.Node, js.Node>(); |
| 1747 List<js.Node> loopsAndSwitches = new List<js.Node>(); | 1747 List<js.Node> loopsAndSwitches = new List<js.Node>(); |
| 1748 List<js.LabeledStatement> labelledStatements = | 1748 List<js.LabeledStatement> labelledStatements = |
| 1749 new List<js.LabeledStatement>(); | 1749 new List<js.LabeledStatement>(); |
| 1750 Set<String> usedNames = new Set<String>(); | 1750 Set<String> usedNames = new Set<String>(); |
| 1751 | 1751 |
| 1752 bool hasExplicitReturns = false; | 1752 bool hasExplicitReturns = false; |
| 1753 | 1753 |
| 1754 bool hasThis = false; | 1754 bool hasThis = false; |
| 1755 | 1755 |
| 1756 bool hasYield = false; |
| 1757 |
| 1756 // The function currently being analyzed. | 1758 // The function currently being analyzed. |
| 1757 js.Fun currentFunction; | 1759 js.Fun currentFunction; |
| 1758 | 1760 |
| 1759 // For error messages. | 1761 // For error messages. |
| 1760 final Function unsupported; | 1762 final Function unsupported; |
| 1761 | 1763 |
| 1762 PreTranslationAnalysis(void this.unsupported(js.Node node)); | 1764 PreTranslationAnalysis(void this.unsupported(js.Node node)); |
| 1763 | 1765 |
| 1764 bool visit(js.Node node) { | 1766 bool visit(js.Node node) { |
| 1765 bool containsAwait = node.accept(this); | 1767 bool containsAwait = node.accept(this); |
| (...skipping 370 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2136 bool visitWhile(js.While node) { | 2138 bool visitWhile(js.While node) { |
| 2137 loopsAndSwitches.add(node); | 2139 loopsAndSwitches.add(node); |
| 2138 bool condition = visit(node.condition); | 2140 bool condition = visit(node.condition); |
| 2139 bool body = visit(node.body); | 2141 bool body = visit(node.body); |
| 2140 loopsAndSwitches.removeLast(); | 2142 loopsAndSwitches.removeLast(); |
| 2141 return condition || body; | 2143 return condition || body; |
| 2142 } | 2144 } |
| 2143 | 2145 |
| 2144 @override | 2146 @override |
| 2145 bool visitDartYield(js.DartYield node) { | 2147 bool visitDartYield(js.DartYield node) { |
| 2148 hasYield = true; |
| 2146 visit(node.expression); | 2149 visit(node.expression); |
| 2147 return true; | 2150 return true; |
| 2148 } | 2151 } |
| 2149 } | 2152 } |
| OLD | NEW |