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