| OLD | NEW |
| 1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2014, 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_nodes; | 5 library tree_ir_nodes; |
| 6 | 6 |
| 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 344 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 355 ApplyBuiltinOperator(this.operator, this.arguments); | 355 ApplyBuiltinOperator(this.operator, this.arguments); |
| 356 | 356 |
| 357 accept(ExpressionVisitor visitor) { | 357 accept(ExpressionVisitor visitor) { |
| 358 return visitor.visitApplyBuiltinOperator(this); | 358 return visitor.visitApplyBuiltinOperator(this); |
| 359 } | 359 } |
| 360 accept1(ExpressionVisitor1 visitor, arg) { | 360 accept1(ExpressionVisitor1 visitor, arg) { |
| 361 return visitor.visitApplyBuiltinOperator(this, arg); | 361 return visitor.visitApplyBuiltinOperator(this, arg); |
| 362 } | 362 } |
| 363 } | 363 } |
| 364 | 364 |
| 365 class ApplyBuiltinMethod extends Expression { |
| 366 BuiltinMethod method; |
| 367 Expression receiver; |
| 368 List<Expression> arguments; |
| 369 |
| 370 bool receiverIsNotNull; |
| 371 |
| 372 ApplyBuiltinMethod(this.method, |
| 373 this.receiver, |
| 374 this.arguments, |
| 375 {this.receiverIsNotNull: false}); |
| 376 |
| 377 accept(ExpressionVisitor visitor) { |
| 378 return visitor.visitApplyBuiltinMethod(this); |
| 379 } |
| 380 accept1(ExpressionVisitor1 visitor, arg) { |
| 381 return visitor.visitApplyBuiltinMethod(this, arg); |
| 382 } |
| 383 } |
| 384 |
| 365 /// A conditional expression. | 385 /// A conditional expression. |
| 366 class Conditional extends Expression { | 386 class Conditional extends Expression { |
| 367 Expression condition; | 387 Expression condition; |
| 368 Expression thenExpression; | 388 Expression thenExpression; |
| 369 Expression elseExpression; | 389 Expression elseExpression; |
| 370 | 390 |
| 371 Conditional(this.condition, this.thenExpression, this.elseExpression); | 391 Conditional(this.condition, this.thenExpression, this.elseExpression); |
| 372 | 392 |
| 373 accept(ExpressionVisitor visitor) => visitor.visitConditional(this); | 393 accept(ExpressionVisitor visitor) => visitor.visitConditional(this); |
| 374 accept1(ExpressionVisitor1 visitor, arg) { | 394 accept1(ExpressionVisitor1 visitor, arg) { |
| (...skipping 556 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 931 E visitGetStatic(GetStatic node); | 951 E visitGetStatic(GetStatic node); |
| 932 E visitSetStatic(SetStatic node); | 952 E visitSetStatic(SetStatic node); |
| 933 E visitCreateBox(CreateBox node); | 953 E visitCreateBox(CreateBox node); |
| 934 E visitCreateInstance(CreateInstance node); | 954 E visitCreateInstance(CreateInstance node); |
| 935 E visitReifyRuntimeType(ReifyRuntimeType node); | 955 E visitReifyRuntimeType(ReifyRuntimeType node); |
| 936 E visitReadTypeVariable(ReadTypeVariable node); | 956 E visitReadTypeVariable(ReadTypeVariable node); |
| 937 E visitTypeExpression(TypeExpression node); | 957 E visitTypeExpression(TypeExpression node); |
| 938 E visitCreateInvocationMirror(CreateInvocationMirror node); | 958 E visitCreateInvocationMirror(CreateInvocationMirror node); |
| 939 E visitInterceptor(Interceptor node); | 959 E visitInterceptor(Interceptor node); |
| 940 E visitApplyBuiltinOperator(ApplyBuiltinOperator node); | 960 E visitApplyBuiltinOperator(ApplyBuiltinOperator node); |
| 961 E visitApplyBuiltinMethod(ApplyBuiltinMethod node); |
| 941 E visitForeignExpression(ForeignExpression node); | 962 E visitForeignExpression(ForeignExpression node); |
| 942 E visitGetLength(GetLength node); | 963 E visitGetLength(GetLength node); |
| 943 E visitGetIndex(GetIndex node); | 964 E visitGetIndex(GetIndex node); |
| 944 E visitSetIndex(SetIndex node); | 965 E visitSetIndex(SetIndex node); |
| 945 E visitAwait(Await node); | 966 E visitAwait(Await node); |
| 946 } | 967 } |
| 947 | 968 |
| 948 abstract class ExpressionVisitor1<E, A> { | 969 abstract class ExpressionVisitor1<E, A> { |
| 949 E visitExpression(Expression node, A arg) => node.accept1(this, arg); | 970 E visitExpression(Expression node, A arg) => node.accept1(this, arg); |
| 950 E visitVariableUse(VariableUse node, A arg); | 971 E visitVariableUse(VariableUse node, A arg); |
| (...skipping 16 matching lines...) Expand all Loading... |
| 967 E visitGetStatic(GetStatic node, A arg); | 988 E visitGetStatic(GetStatic node, A arg); |
| 968 E visitSetStatic(SetStatic node, A arg); | 989 E visitSetStatic(SetStatic node, A arg); |
| 969 E visitCreateBox(CreateBox node, A arg); | 990 E visitCreateBox(CreateBox node, A arg); |
| 970 E visitCreateInstance(CreateInstance node, A arg); | 991 E visitCreateInstance(CreateInstance node, A arg); |
| 971 E visitReifyRuntimeType(ReifyRuntimeType node, A arg); | 992 E visitReifyRuntimeType(ReifyRuntimeType node, A arg); |
| 972 E visitReadTypeVariable(ReadTypeVariable node, A arg); | 993 E visitReadTypeVariable(ReadTypeVariable node, A arg); |
| 973 E visitTypeExpression(TypeExpression node, A arg); | 994 E visitTypeExpression(TypeExpression node, A arg); |
| 974 E visitCreateInvocationMirror(CreateInvocationMirror node, A arg); | 995 E visitCreateInvocationMirror(CreateInvocationMirror node, A arg); |
| 975 E visitInterceptor(Interceptor node, A arg); | 996 E visitInterceptor(Interceptor node, A arg); |
| 976 E visitApplyBuiltinOperator(ApplyBuiltinOperator node, A arg); | 997 E visitApplyBuiltinOperator(ApplyBuiltinOperator node, A arg); |
| 998 E visitApplyBuiltinMethod(ApplyBuiltinMethod node, A arg); |
| 977 E visitForeignExpression(ForeignExpression node, A arg); | 999 E visitForeignExpression(ForeignExpression node, A arg); |
| 978 E visitGetLength(GetLength node, A arg); | 1000 E visitGetLength(GetLength node, A arg); |
| 979 E visitGetIndex(GetIndex node, A arg); | 1001 E visitGetIndex(GetIndex node, A arg); |
| 980 E visitSetIndex(SetIndex node, A arg); | 1002 E visitSetIndex(SetIndex node, A arg); |
| 981 E visitAwait(Await node, A arg); | 1003 E visitAwait(Await node, A arg); |
| 982 } | 1004 } |
| 983 | 1005 |
| 984 abstract class StatementVisitor<S> { | 1006 abstract class StatementVisitor<S> { |
| 985 S visitStatement(Statement node) => node.accept(this); | 1007 S visitStatement(Statement node) => node.accept(this); |
| 986 S visitLabeledStatement(LabeledStatement node); | 1008 S visitLabeledStatement(LabeledStatement node); |
| (...skipping 193 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1180 node.arguments.forEach(visitExpression); | 1202 node.arguments.forEach(visitExpression); |
| 1181 } | 1203 } |
| 1182 | 1204 |
| 1183 visitUnreachable(Unreachable node) { | 1205 visitUnreachable(Unreachable node) { |
| 1184 } | 1206 } |
| 1185 | 1207 |
| 1186 visitApplyBuiltinOperator(ApplyBuiltinOperator node) { | 1208 visitApplyBuiltinOperator(ApplyBuiltinOperator node) { |
| 1187 node.arguments.forEach(visitExpression); | 1209 node.arguments.forEach(visitExpression); |
| 1188 } | 1210 } |
| 1189 | 1211 |
| 1212 visitApplyBuiltinMethod(ApplyBuiltinMethod node) { |
| 1213 visitExpression(node.receiver); |
| 1214 node.arguments.forEach(visitExpression); |
| 1215 } |
| 1216 |
| 1190 visitInterceptor(Interceptor node) { | 1217 visitInterceptor(Interceptor node) { |
| 1191 visitExpression(node.input); | 1218 visitExpression(node.input); |
| 1192 } | 1219 } |
| 1193 | 1220 |
| 1194 visitForeignCode(ForeignCode node) { | 1221 visitForeignCode(ForeignCode node) { |
| 1195 node.arguments.forEach(visitExpression); | 1222 node.arguments.forEach(visitExpression); |
| 1196 } | 1223 } |
| 1197 | 1224 |
| 1198 visitForeignExpression(ForeignExpression node) => visitForeignCode(node); | 1225 visitForeignExpression(ForeignExpression node) => visitForeignCode(node); |
| 1199 visitForeignStatement(ForeignStatement node) => visitForeignCode(node); | 1226 visitForeignStatement(ForeignStatement node) => visitForeignCode(node); |
| (...skipping 229 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1429 | 1456 |
| 1430 visitUnreachable(Unreachable node) { | 1457 visitUnreachable(Unreachable node) { |
| 1431 return node; | 1458 return node; |
| 1432 } | 1459 } |
| 1433 | 1460 |
| 1434 visitApplyBuiltinOperator(ApplyBuiltinOperator node) { | 1461 visitApplyBuiltinOperator(ApplyBuiltinOperator node) { |
| 1435 _replaceExpressions(node.arguments); | 1462 _replaceExpressions(node.arguments); |
| 1436 return node; | 1463 return node; |
| 1437 } | 1464 } |
| 1438 | 1465 |
| 1466 visitApplyBuiltinMethod(ApplyBuiltinMethod node) { |
| 1467 node.receiver = visitExpression(node.receiver); |
| 1468 _replaceExpressions(node.arguments); |
| 1469 return node; |
| 1470 } |
| 1471 |
| 1439 visitInterceptor(Interceptor node) { | 1472 visitInterceptor(Interceptor node) { |
| 1440 node.input = visitExpression(node.input); | 1473 node.input = visitExpression(node.input); |
| 1441 return node; | 1474 return node; |
| 1442 } | 1475 } |
| 1443 | 1476 |
| 1444 visitGetLength(GetLength node) { | 1477 visitGetLength(GetLength node) { |
| 1445 node.object = visitExpression(node.object); | 1478 node.object = visitExpression(node.object); |
| 1446 return node; | 1479 return node; |
| 1447 } | 1480 } |
| 1448 | 1481 |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1493 | 1526 |
| 1494 /// Number of uses of the current fallthrough target. | 1527 /// Number of uses of the current fallthrough target. |
| 1495 int get useCount => _stack.last.useCount; | 1528 int get useCount => _stack.last.useCount; |
| 1496 | 1529 |
| 1497 /// Indicate that a statement will fall through to the current fallthrough | 1530 /// Indicate that a statement will fall through to the current fallthrough |
| 1498 /// target. | 1531 /// target. |
| 1499 void use() { | 1532 void use() { |
| 1500 ++_stack.last.useCount; | 1533 ++_stack.last.useCount; |
| 1501 } | 1534 } |
| 1502 } | 1535 } |
| OLD | NEW |