| 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/expressions.dart'; | 7 import '../constants/expressions.dart'; |
| 8 import '../constants/values.dart' as values; | 8 import '../constants/values.dart' as values; |
| 9 import '../dart_types.dart' show DartType, InterfaceType, TypeVariableType; | 9 import '../dart_types.dart' show DartType, InterfaceType, TypeVariableType; |
| 10 import '../elements/elements.dart'; | 10 import '../elements/elements.dart'; |
| (...skipping 242 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 253 | 253 |
| 254 accept(ExpressionVisitor visitor) { | 254 accept(ExpressionVisitor visitor) { |
| 255 return visitor.visitInvokeConstructor(this); | 255 return visitor.visitInvokeConstructor(this); |
| 256 } | 256 } |
| 257 | 257 |
| 258 accept1(ExpressionVisitor1 visitor, arg) { | 258 accept1(ExpressionVisitor1 visitor, arg) { |
| 259 return visitor.visitInvokeConstructor(this, arg); | 259 return visitor.visitInvokeConstructor(this, arg); |
| 260 } | 260 } |
| 261 } | 261 } |
| 262 | 262 |
| 263 /// Calls [toString] on each argument and concatenates the results. | |
| 264 class ConcatenateStrings extends Expression { | |
| 265 final List<Expression> arguments; | |
| 266 | |
| 267 ConcatenateStrings(this.arguments); | |
| 268 | |
| 269 accept(ExpressionVisitor visitor) => visitor.visitConcatenateStrings(this); | |
| 270 accept1(ExpressionVisitor1 visitor, arg) { | |
| 271 return visitor.visitConcatenateStrings(this, arg); | |
| 272 } | |
| 273 } | |
| 274 | |
| 275 /** | 263 /** |
| 276 * A constant. | 264 * A constant. |
| 277 */ | 265 */ |
| 278 class Constant extends Expression { | 266 class Constant extends Expression { |
| 279 final ConstantExpression expression; | |
| 280 final values.ConstantValue value; | 267 final values.ConstantValue value; |
| 281 | 268 |
| 282 Constant(this.expression, this.value); | 269 Constant(this.value); |
| 283 | 270 |
| 284 Constant.bool(values.BoolConstantValue constantValue) | 271 Constant.bool(values.BoolConstantValue constantValue) |
| 285 : expression = new BoolConstantExpression( | 272 : value = constantValue; |
| 286 constantValue.primitiveValue), | |
| 287 value = constantValue; | |
| 288 | 273 |
| 289 accept(ExpressionVisitor visitor) => visitor.visitConstant(this); | 274 accept(ExpressionVisitor visitor) => visitor.visitConstant(this); |
| 290 accept1(ExpressionVisitor1 visitor, arg) => visitor.visitConstant(this, arg); | 275 accept1(ExpressionVisitor1 visitor, arg) => visitor.visitConstant(this, arg); |
| 291 } | 276 } |
| 292 | 277 |
| 293 class This extends Expression { | 278 class This extends Expression { |
| 294 accept(ExpressionVisitor visitor) => visitor.visitThis(this); | 279 accept(ExpressionVisitor visitor) => visitor.visitThis(this); |
| 295 accept1(ExpressionVisitor1 visitor, arg) => visitor.visitThis(this, arg); | 280 accept1(ExpressionVisitor1 visitor, arg) => visitor.visitThis(this, arg); |
| 296 } | 281 } |
| 297 | 282 |
| (...skipping 497 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 795 } | 780 } |
| 796 | 781 |
| 797 abstract class ExpressionVisitor<E> { | 782 abstract class ExpressionVisitor<E> { |
| 798 E visitExpression(Expression node) => node.accept(this); | 783 E visitExpression(Expression node) => node.accept(this); |
| 799 E visitVariableUse(VariableUse node); | 784 E visitVariableUse(VariableUse node); |
| 800 E visitAssign(Assign node); | 785 E visitAssign(Assign node); |
| 801 E visitInvokeStatic(InvokeStatic node); | 786 E visitInvokeStatic(InvokeStatic node); |
| 802 E visitInvokeMethod(InvokeMethod node); | 787 E visitInvokeMethod(InvokeMethod node); |
| 803 E visitInvokeMethodDirectly(InvokeMethodDirectly node); | 788 E visitInvokeMethodDirectly(InvokeMethodDirectly node); |
| 804 E visitInvokeConstructor(InvokeConstructor node); | 789 E visitInvokeConstructor(InvokeConstructor node); |
| 805 E visitConcatenateStrings(ConcatenateStrings node); | |
| 806 E visitConstant(Constant node); | 790 E visitConstant(Constant node); |
| 807 E visitThis(This node); | 791 E visitThis(This node); |
| 808 E visitConditional(Conditional node); | 792 E visitConditional(Conditional node); |
| 809 E visitLogicalOperator(LogicalOperator node); | 793 E visitLogicalOperator(LogicalOperator node); |
| 810 E visitNot(Not node); | 794 E visitNot(Not node); |
| 811 E visitLiteralList(LiteralList node); | 795 E visitLiteralList(LiteralList node); |
| 812 E visitLiteralMap(LiteralMap node); | 796 E visitLiteralMap(LiteralMap node); |
| 813 E visitTypeOperator(TypeOperator node); | 797 E visitTypeOperator(TypeOperator node); |
| 814 E visitFunctionExpression(FunctionExpression node); | 798 E visitFunctionExpression(FunctionExpression node); |
| 815 E visitGetField(GetField node); | 799 E visitGetField(GetField node); |
| (...skipping 10 matching lines...) Expand all Loading... |
| 826 } | 810 } |
| 827 | 811 |
| 828 abstract class ExpressionVisitor1<E, A> { | 812 abstract class ExpressionVisitor1<E, A> { |
| 829 E visitExpression(Expression node, A arg) => node.accept1(this, arg); | 813 E visitExpression(Expression node, A arg) => node.accept1(this, arg); |
| 830 E visitVariableUse(VariableUse node, A arg); | 814 E visitVariableUse(VariableUse node, A arg); |
| 831 E visitAssign(Assign node, A arg); | 815 E visitAssign(Assign node, A arg); |
| 832 E visitInvokeStatic(InvokeStatic node, A arg); | 816 E visitInvokeStatic(InvokeStatic node, A arg); |
| 833 E visitInvokeMethod(InvokeMethod node, A arg); | 817 E visitInvokeMethod(InvokeMethod node, A arg); |
| 834 E visitInvokeMethodDirectly(InvokeMethodDirectly node, A arg); | 818 E visitInvokeMethodDirectly(InvokeMethodDirectly node, A arg); |
| 835 E visitInvokeConstructor(InvokeConstructor node, A arg); | 819 E visitInvokeConstructor(InvokeConstructor node, A arg); |
| 836 E visitConcatenateStrings(ConcatenateStrings node, A arg); | |
| 837 E visitConstant(Constant node, A arg); | 820 E visitConstant(Constant node, A arg); |
| 838 E visitThis(This node, A arg); | 821 E visitThis(This node, A arg); |
| 839 E visitConditional(Conditional node, A arg); | 822 E visitConditional(Conditional node, A arg); |
| 840 E visitLogicalOperator(LogicalOperator node, A arg); | 823 E visitLogicalOperator(LogicalOperator node, A arg); |
| 841 E visitNot(Not node, A arg); | 824 E visitNot(Not node, A arg); |
| 842 E visitLiteralList(LiteralList node, A arg); | 825 E visitLiteralList(LiteralList node, A arg); |
| 843 E visitLiteralMap(LiteralMap node, A arg); | 826 E visitLiteralMap(LiteralMap node, A arg); |
| 844 E visitTypeOperator(TypeOperator node, A arg); | 827 E visitTypeOperator(TypeOperator node, A arg); |
| 845 E visitFunctionExpression(FunctionExpression node, A arg); | 828 E visitFunctionExpression(FunctionExpression node, A arg); |
| 846 E visitGetField(GetField node, A arg); | 829 E visitGetField(GetField node, A arg); |
| (...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 916 | 899 |
| 917 visitInvokeMethodDirectly(InvokeMethodDirectly node) { | 900 visitInvokeMethodDirectly(InvokeMethodDirectly node) { |
| 918 visitExpression(node.receiver); | 901 visitExpression(node.receiver); |
| 919 node.arguments.forEach(visitExpression); | 902 node.arguments.forEach(visitExpression); |
| 920 } | 903 } |
| 921 | 904 |
| 922 visitInvokeConstructor(InvokeConstructor node) { | 905 visitInvokeConstructor(InvokeConstructor node) { |
| 923 node.arguments.forEach(visitExpression); | 906 node.arguments.forEach(visitExpression); |
| 924 } | 907 } |
| 925 | 908 |
| 926 visitConcatenateStrings(ConcatenateStrings node) { | |
| 927 node.arguments.forEach(visitExpression); | |
| 928 } | |
| 929 | |
| 930 visitConstant(Constant node) {} | 909 visitConstant(Constant node) {} |
| 931 | 910 |
| 932 visitThis(This node) {} | 911 visitThis(This node) {} |
| 933 | 912 |
| 934 visitConditional(Conditional node) { | 913 visitConditional(Conditional node) { |
| 935 visitExpression(node.condition); | 914 visitExpression(node.condition); |
| 936 visitExpression(node.thenExpression); | 915 visitExpression(node.thenExpression); |
| 937 visitExpression(node.elseExpression); | 916 visitExpression(node.elseExpression); |
| 938 } | 917 } |
| 939 | 918 |
| (...skipping 157 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1097 node.receiver = visitExpression(node.receiver); | 1076 node.receiver = visitExpression(node.receiver); |
| 1098 _replaceExpressions(node.arguments); | 1077 _replaceExpressions(node.arguments); |
| 1099 return node; | 1078 return node; |
| 1100 } | 1079 } |
| 1101 | 1080 |
| 1102 visitInvokeConstructor(InvokeConstructor node) { | 1081 visitInvokeConstructor(InvokeConstructor node) { |
| 1103 _replaceExpressions(node.arguments); | 1082 _replaceExpressions(node.arguments); |
| 1104 return node; | 1083 return node; |
| 1105 } | 1084 } |
| 1106 | 1085 |
| 1107 visitConcatenateStrings(ConcatenateStrings node) { | |
| 1108 _replaceExpressions(node.arguments); | |
| 1109 return node; | |
| 1110 } | |
| 1111 | |
| 1112 visitConstant(Constant node) => node; | 1086 visitConstant(Constant node) => node; |
| 1113 | 1087 |
| 1114 visitThis(This node) => node; | 1088 visitThis(This node) => node; |
| 1115 | 1089 |
| 1116 visitConditional(Conditional node) { | 1090 visitConditional(Conditional node) { |
| 1117 node.condition = visitExpression(node.condition); | 1091 node.condition = visitExpression(node.condition); |
| 1118 node.thenExpression = visitExpression(node.thenExpression); | 1092 node.thenExpression = visitExpression(node.thenExpression); |
| 1119 node.elseExpression = visitExpression(node.elseExpression); | 1093 node.elseExpression = visitExpression(node.elseExpression); |
| 1120 return node; | 1094 return node; |
| 1121 } | 1095 } |
| (...skipping 133 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1255 | 1229 |
| 1256 visitUnreachable(Unreachable node) { | 1230 visitUnreachable(Unreachable node) { |
| 1257 return node; | 1231 return node; |
| 1258 } | 1232 } |
| 1259 | 1233 |
| 1260 visitApplyBuiltinOperator(ApplyBuiltinOperator node) { | 1234 visitApplyBuiltinOperator(ApplyBuiltinOperator node) { |
| 1261 _replaceExpressions(node.arguments); | 1235 _replaceExpressions(node.arguments); |
| 1262 return node; | 1236 return node; |
| 1263 } | 1237 } |
| 1264 } | 1238 } |
| OLD | NEW |