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 |