| OLD | NEW |
| 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2013, 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 library dart2js.ir_nodes; | 4 library dart2js.ir_nodes; |
| 5 | 5 |
| 6 import 'dart:collection'; | 6 import 'dart:collection'; |
| 7 import '../constants/values.dart' as values; | 7 import '../constants/values.dart' as values; |
| 8 import '../dart_types.dart' show DartType, InterfaceType, TypeVariableType; | 8 import '../dart_types.dart' show DartType, InterfaceType, TypeVariableType; |
| 9 import '../elements/elements.dart'; | 9 import '../elements/elements.dart'; |
| 10 import '../io/source_information.dart' show SourceInformation; | 10 import '../io/source_information.dart' show SourceInformation; |
| (...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 79 } | 79 } |
| 80 | 80 |
| 81 /// An expression that passes a continuation to a call. | 81 /// An expression that passes a continuation to a call. |
| 82 abstract class CallExpression extends Expression { | 82 abstract class CallExpression extends Expression { |
| 83 Reference<Continuation> get continuation; | 83 Reference<Continuation> get continuation; |
| 84 Expression get next => continuation.definition.body; | 84 Expression get next => continuation.definition.body; |
| 85 } | 85 } |
| 86 | 86 |
| 87 /// An expression without a continuation or a subexpression body. | 87 /// An expression without a continuation or a subexpression body. |
| 88 /// | 88 /// |
| 89 /// These break straight-line control flow and can be throught of as ending a | 89 /// These break straight-line control flow and can be thought of as ending a |
| 90 /// basic block. | 90 /// basic block. |
| 91 abstract class TailExpression extends Expression { | 91 abstract class TailExpression extends Expression { |
| 92 Expression get next => null; | 92 Expression get next => null; |
| 93 } | 93 } |
| 94 | 94 |
| 95 /// The base class of things that variables can refer to: primitives, | 95 /// The base class of things that variables can refer to: primitives, |
| 96 /// continuations, function and continuation parameters, etc. | 96 /// continuations, function and continuation parameters, etc. |
| 97 abstract class Definition<T extends Definition<T>> extends Node { | 97 abstract class Definition<T extends Definition<T>> extends Node { |
| 98 // The head of a linked-list of occurrences, in no particular order. | 98 // The head of a linked-list of occurrences, in no particular order. |
| 99 Reference<T> firstRef; | 99 Reference<T> firstRef; |
| (...skipping 1154 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1254 Await(Primitive input, Continuation continuation) | 1254 Await(Primitive input, Continuation continuation) |
| 1255 : this.input = new Reference<Primitive>(input), | 1255 : this.input = new Reference<Primitive>(input), |
| 1256 this.continuation = new Reference<Continuation>(continuation); | 1256 this.continuation = new Reference<Continuation>(continuation); |
| 1257 | 1257 |
| 1258 @override | 1258 @override |
| 1259 accept(Visitor visitor) { | 1259 accept(Visitor visitor) { |
| 1260 return visitor.visitAwait(this); | 1260 return visitor.visitAwait(this); |
| 1261 } | 1261 } |
| 1262 } | 1262 } |
| 1263 | 1263 |
| 1264 class Yield extends CallExpression { |
| 1265 final Reference<Primitive> input; |
| 1266 final Reference<Continuation> continuation; |
| 1267 final bool hasStar; |
| 1268 |
| 1269 Yield(Primitive input, this.hasStar, Continuation continuation) |
| 1270 : this.input = new Reference<Primitive>(input), |
| 1271 this.continuation = new Reference<Continuation>(continuation); |
| 1272 |
| 1273 @override |
| 1274 accept(Visitor visitor) { |
| 1275 return visitor.visitYield(this); |
| 1276 } |
| 1277 } |
| 1278 |
| 1264 List<Reference<Primitive>> _referenceList(Iterable<Primitive> definitions) { | 1279 List<Reference<Primitive>> _referenceList(Iterable<Primitive> definitions) { |
| 1265 return definitions.map((e) => new Reference<Primitive>(e)).toList(); | 1280 return definitions.map((e) => new Reference<Primitive>(e)).toList(); |
| 1266 } | 1281 } |
| 1267 | 1282 |
| 1268 abstract class Visitor<T> { | 1283 abstract class Visitor<T> { |
| 1269 const Visitor(); | 1284 const Visitor(); |
| 1270 | 1285 |
| 1271 T visit(Node node); | 1286 T visit(Node node); |
| 1272 | 1287 |
| 1273 // Concrete classes. | 1288 // Concrete classes. |
| (...skipping 12 matching lines...) Expand all Loading... |
| 1286 T visitThrow(Throw node); | 1301 T visitThrow(Throw node); |
| 1287 T visitRethrow(Rethrow node); | 1302 T visitRethrow(Rethrow node); |
| 1288 T visitBranch(Branch node); | 1303 T visitBranch(Branch node); |
| 1289 T visitTypeCast(TypeCast node); | 1304 T visitTypeCast(TypeCast node); |
| 1290 T visitSetMutable(SetMutable node); | 1305 T visitSetMutable(SetMutable node); |
| 1291 T visitSetStatic(SetStatic node); | 1306 T visitSetStatic(SetStatic node); |
| 1292 T visitGetLazyStatic(GetLazyStatic node); | 1307 T visitGetLazyStatic(GetLazyStatic node); |
| 1293 T visitSetField(SetField node); | 1308 T visitSetField(SetField node); |
| 1294 T visitUnreachable(Unreachable node); | 1309 T visitUnreachable(Unreachable node); |
| 1295 T visitAwait(Await node); | 1310 T visitAwait(Await node); |
| 1311 T visitYield(Yield node); |
| 1296 | 1312 |
| 1297 // Definitions. | 1313 // Definitions. |
| 1298 T visitLiteralList(LiteralList node); | 1314 T visitLiteralList(LiteralList node); |
| 1299 T visitLiteralMap(LiteralMap node); | 1315 T visitLiteralMap(LiteralMap node); |
| 1300 T visitConstant(Constant node); | 1316 T visitConstant(Constant node); |
| 1301 T visitCreateFunction(CreateFunction node); | 1317 T visitCreateFunction(CreateFunction node); |
| 1302 T visitGetMutable(GetMutable node); | 1318 T visitGetMutable(GetMutable node); |
| 1303 T visitParameter(Parameter node); | 1319 T visitParameter(Parameter node); |
| 1304 T visitContinuation(Continuation node); | 1320 T visitContinuation(Continuation node); |
| 1305 T visitMutableVariable(MutableVariable node); | 1321 T visitMutableVariable(MutableVariable node); |
| (...skipping 289 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1595 processUnreachable(node); | 1611 processUnreachable(node); |
| 1596 } | 1612 } |
| 1597 | 1613 |
| 1598 processAwait(Await node) {} | 1614 processAwait(Await node) {} |
| 1599 visitAwait(Await node) { | 1615 visitAwait(Await node) { |
| 1600 processAwait(node); | 1616 processAwait(node); |
| 1601 processReference(node.input); | 1617 processReference(node.input); |
| 1602 processReference(node.continuation); | 1618 processReference(node.continuation); |
| 1603 } | 1619 } |
| 1604 | 1620 |
| 1621 processYield(Yield node) {} |
| 1622 visitYield(Yield node) { |
| 1623 processYield(node); |
| 1624 processReference(node.input); |
| 1625 processReference(node.continuation); |
| 1626 } |
| 1627 |
| 1605 processGetLength(GetLength node) {} | 1628 processGetLength(GetLength node) {} |
| 1606 visitGetLength(GetLength node) { | 1629 visitGetLength(GetLength node) { |
| 1607 processGetLength(node); | 1630 processGetLength(node); |
| 1608 processReference(node.object); | 1631 processReference(node.object); |
| 1609 } | 1632 } |
| 1610 | 1633 |
| 1611 processGetIndex(GetIndex node) {} | 1634 processGetIndex(GetIndex node) {} |
| 1612 visitGetIndex(GetIndex node) { | 1635 visitGetIndex(GetIndex node) { |
| 1613 processGetIndex(node); | 1636 processGetIndex(node); |
| 1614 processReference(node.object); | 1637 processReference(node.object); |
| (...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1752 /// Visit a just-deleted subterm and unlink all [Reference]s in it. | 1775 /// Visit a just-deleted subterm and unlink all [Reference]s in it. |
| 1753 class RemovalVisitor extends RecursiveVisitor { | 1776 class RemovalVisitor extends RecursiveVisitor { |
| 1754 processReference(Reference reference) { | 1777 processReference(Reference reference) { |
| 1755 reference.unlink(); | 1778 reference.unlink(); |
| 1756 } | 1779 } |
| 1757 | 1780 |
| 1758 static void remove(Node node) { | 1781 static void remove(Node node) { |
| 1759 (new RemovalVisitor()).visit(node); | 1782 (new RemovalVisitor()).visit(node); |
| 1760 } | 1783 } |
| 1761 } | 1784 } |
| OLD | NEW |