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 '../constants/expressions.dart'; | 6 import '../constants/expressions.dart'; |
7 import '../constants/values.dart' as values show ConstantValue; | 7 import '../constants/values.dart' as values show ConstantValue; |
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 418 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
429 this.type, | 429 this.type, |
430 List<Primitive> typeArguments, | 430 List<Primitive> typeArguments, |
431 Continuation cont) | 431 Continuation cont) |
432 : this.value = new Reference<Primitive>(value), | 432 : this.value = new Reference<Primitive>(value), |
433 this.typeArguments = _referenceList(typeArguments), | 433 this.typeArguments = _referenceList(typeArguments), |
434 this.continuation = new Reference<Continuation>(cont); | 434 this.continuation = new Reference<Continuation>(cont); |
435 | 435 |
436 accept(Visitor visitor) => visitor.visitTypeCast(this); | 436 accept(Visitor visitor) => visitor.visitTypeCast(this); |
437 } | 437 } |
438 | 438 |
| 439 /// Invoke [toString] on each argument and concatenate the results. |
| 440 class ConcatenateStrings extends Expression { |
| 441 final List<Reference<Primitive>> arguments; |
| 442 final Reference<Continuation> continuation; |
| 443 |
| 444 ConcatenateStrings(List<Primitive> args, Continuation cont) |
| 445 : arguments = _referenceList(args), |
| 446 continuation = new Reference<Continuation>(cont); |
| 447 |
| 448 accept(Visitor visitor) => visitor.visitConcatenateStrings(this); |
| 449 } |
| 450 |
439 /// Apply a built-in operator. | 451 /// Apply a built-in operator. |
440 /// | 452 /// |
441 /// It must be known that the arguments have the proper types. | 453 /// It must be known that the arguments have the proper types. |
442 class ApplyBuiltinOperator extends Primitive { | 454 class ApplyBuiltinOperator extends Primitive { |
443 BuiltinOperator operator; | 455 BuiltinOperator operator; |
444 List<Reference<Primitive>> arguments; | 456 List<Reference<Primitive>> arguments; |
445 | 457 |
446 ApplyBuiltinOperator(this.operator, List<Primitive> arguments) | 458 ApplyBuiltinOperator(this.operator, List<Primitive> arguments) |
447 : this.arguments = _referenceList(arguments); | 459 : this.arguments = _referenceList(arguments); |
448 | 460 |
(...skipping 301 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
750 ForeignCode(this.codeTemplate, this.type, List<Primitive> arguments, | 762 ForeignCode(this.codeTemplate, this.type, List<Primitive> arguments, |
751 this.nativeBehavior, {Continuation continuation, this.dependency}) | 763 this.nativeBehavior, {Continuation continuation, this.dependency}) |
752 : arguments = _referenceList(arguments), | 764 : arguments = _referenceList(arguments), |
753 continuation = continuation == null ? null | 765 continuation = continuation == null ? null |
754 : new Reference<Continuation>(continuation); | 766 : new Reference<Continuation>(continuation); |
755 | 767 |
756 accept(Visitor visitor) => visitor.visitForeignCode(this); | 768 accept(Visitor visitor) => visitor.visitForeignCode(this); |
757 } | 769 } |
758 | 770 |
759 class Constant extends Primitive { | 771 class Constant extends Primitive { |
| 772 final ConstantExpression expression; |
760 final values.ConstantValue value; | 773 final values.ConstantValue value; |
761 | 774 |
762 Constant(this.value); | 775 Constant(this.expression, this.value); |
763 | 776 |
764 accept(Visitor visitor) => visitor.visitConstant(this); | 777 accept(Visitor visitor) => visitor.visitConstant(this); |
765 } | 778 } |
766 | 779 |
767 class LiteralList extends Primitive { | 780 class LiteralList extends Primitive { |
768 /// The List type being created; this is not the type argument. | 781 /// The List type being created; this is not the type argument. |
769 final InterfaceType type; | 782 final InterfaceType type; |
770 final List<Reference<Primitive>> values; | 783 final List<Reference<Primitive>> values; |
771 | 784 |
772 LiteralList(this.type, List<Primitive> values) | 785 LiteralList(this.type, List<Primitive> values) |
(...skipping 173 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
946 // Expressions. | 959 // Expressions. |
947 T visitLetPrim(LetPrim node); | 960 T visitLetPrim(LetPrim node); |
948 T visitLetCont(LetCont node); | 961 T visitLetCont(LetCont node); |
949 T visitLetHandler(LetHandler node); | 962 T visitLetHandler(LetHandler node); |
950 T visitLetMutable(LetMutable node); | 963 T visitLetMutable(LetMutable node); |
951 T visitInvokeContinuation(InvokeContinuation node); | 964 T visitInvokeContinuation(InvokeContinuation node); |
952 T visitInvokeStatic(InvokeStatic node); | 965 T visitInvokeStatic(InvokeStatic node); |
953 T visitInvokeMethod(InvokeMethod node); | 966 T visitInvokeMethod(InvokeMethod node); |
954 T visitInvokeMethodDirectly(InvokeMethodDirectly node); | 967 T visitInvokeMethodDirectly(InvokeMethodDirectly node); |
955 T visitInvokeConstructor(InvokeConstructor node); | 968 T visitInvokeConstructor(InvokeConstructor node); |
| 969 T visitConcatenateStrings(ConcatenateStrings node); |
956 T visitThrow(Throw node); | 970 T visitThrow(Throw node); |
957 T visitRethrow(Rethrow node); | 971 T visitRethrow(Rethrow node); |
958 T visitBranch(Branch node); | 972 T visitBranch(Branch node); |
959 T visitTypeCast(TypeCast node); | 973 T visitTypeCast(TypeCast node); |
960 T visitSetMutableVariable(SetMutableVariable node); | 974 T visitSetMutableVariable(SetMutableVariable node); |
961 T visitSetStatic(SetStatic node); | 975 T visitSetStatic(SetStatic node); |
962 T visitGetLazyStatic(GetLazyStatic node); | 976 T visitGetLazyStatic(GetLazyStatic node); |
963 T visitSetField(SetField node); | 977 T visitSetField(SetField node); |
964 T visitUnreachable(Unreachable node); | 978 T visitUnreachable(Unreachable node); |
965 | 979 |
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1072 node.arguments.forEach(processReference); | 1086 node.arguments.forEach(processReference); |
1073 } | 1087 } |
1074 | 1088 |
1075 processInvokeConstructor(InvokeConstructor node) {} | 1089 processInvokeConstructor(InvokeConstructor node) {} |
1076 visitInvokeConstructor(InvokeConstructor node) { | 1090 visitInvokeConstructor(InvokeConstructor node) { |
1077 processInvokeConstructor(node); | 1091 processInvokeConstructor(node); |
1078 processReference(node.continuation); | 1092 processReference(node.continuation); |
1079 node.arguments.forEach(processReference); | 1093 node.arguments.forEach(processReference); |
1080 } | 1094 } |
1081 | 1095 |
| 1096 processConcatenateStrings(ConcatenateStrings node) {} |
| 1097 visitConcatenateStrings(ConcatenateStrings node) { |
| 1098 processConcatenateStrings(node); |
| 1099 processReference(node.continuation); |
| 1100 node.arguments.forEach(processReference); |
| 1101 } |
| 1102 |
1082 processThrow(Throw node) {} | 1103 processThrow(Throw node) {} |
1083 visitThrow(Throw node) { | 1104 visitThrow(Throw node) { |
1084 processThrow(node); | 1105 processThrow(node); |
1085 processReference(node.value); | 1106 processReference(node.value); |
1086 } | 1107 } |
1087 | 1108 |
1088 processRethrow(Rethrow node) {} | 1109 processRethrow(Rethrow node) {} |
1089 visitRethrow(Rethrow node) { | 1110 visitRethrow(Rethrow node) { |
1090 processRethrow(node); | 1111 processRethrow(node); |
1091 } | 1112 } |
(...skipping 197 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1289 const RemovalVisitor(); | 1310 const RemovalVisitor(); |
1290 | 1311 |
1291 processReference(Reference reference) { | 1312 processReference(Reference reference) { |
1292 reference.unlink(); | 1313 reference.unlink(); |
1293 } | 1314 } |
1294 | 1315 |
1295 static void remove(Node node) { | 1316 static void remove(Node node) { |
1296 (const RemovalVisitor()).visit(node); | 1317 (const RemovalVisitor()).visit(node); |
1297 } | 1318 } |
1298 } | 1319 } |
OLD | NEW |