| 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 tree_ir.optimization.pull_into_initializers; | 5 library tree_ir.optimization.pull_into_initializers; |
| 6 | 6 |
| 7 import 'optimization.dart' show Pass; | 7 import 'optimization.dart' show Pass; |
| 8 import '../tree_ir_nodes.dart'; | 8 import '../tree_ir_nodes.dart'; |
| 9 | 9 |
| 10 /// Where a variable has been assigned. | 10 /// Where a variable has been assigned. |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 50 /// baz(x, y, y); | 50 /// baz(x, y, y); |
| 51 /// | 51 /// |
| 52 /// ==> [StatementRewriter] | 52 /// ==> [StatementRewriter] |
| 53 /// | 53 /// |
| 54 /// var y; | 54 /// var y; |
| 55 /// baz(foo(), y = bar(), y); | 55 /// baz(foo(), y = bar(), y); |
| 56 /// | 56 /// |
| 57 /// [PullIntoInitializers] cannot pull `y` into an initializer because | 57 /// [PullIntoInitializers] cannot pull `y` into an initializer because |
| 58 /// the impure expressions `foo()` and `bar()` would then be swapped. | 58 /// the impure expressions `foo()` and `bar()` would then be swapped. |
| 59 /// | 59 /// |
| 60 class PullIntoInitializers extends RecursiveTransformer | 60 class PullIntoInitializers extends RecursiveTransformer implements Pass { |
| 61 implements Pass { | |
| 62 String get passName => 'Pull into initializers'; | 61 String get passName => 'Pull into initializers'; |
| 63 | 62 |
| 64 /// Denotes where each variable is currently assigned. | 63 /// Denotes where each variable is currently assigned. |
| 65 /// | 64 /// |
| 66 /// Variables without assignments are absent from the map. | 65 /// Variables without assignments are absent from the map. |
| 67 Map<Variable, AssignArea> assignArea = <Variable, AssignArea>{}; | 66 Map<Variable, AssignArea> assignArea = <Variable, AssignArea>{}; |
| 68 | 67 |
| 69 /// The fragment between [first] and [last] holds the statements | 68 /// The fragment between [first] and [last] holds the statements |
| 70 /// we pulled into the initializer block. | 69 /// we pulled into the initializer block. |
| 71 /// | 70 /// |
| (...skipping 298 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 370 | 369 |
| 371 @override | 370 @override |
| 372 Expression visitForeignExpression(ForeignExpression node) { | 371 Expression visitForeignExpression(ForeignExpression node) { |
| 373 rewriteList(node.arguments); | 372 rewriteList(node.arguments); |
| 374 if (node.nativeBehavior.sideEffects.hasSideEffects()) { | 373 if (node.nativeBehavior.sideEffects.hasSideEffects()) { |
| 375 ++impureCounter; | 374 ++impureCounter; |
| 376 } | 375 } |
| 377 return node; | 376 return node; |
| 378 } | 377 } |
| 379 } | 378 } |
| OLD | NEW |