Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(311)

Side by Side Diff: pkg/compiler/lib/src/tree_ir/tree_ir_nodes.dart

Issue 1195573003: dart2js cps: Refactor and optimize string concatenations. (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Revert doc comment change Created 5 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 249 matching lines...) Expand 10 before | Expand all | Expand 10 after
260 260
261 accept(ExpressionVisitor visitor) { 261 accept(ExpressionVisitor visitor) {
262 return visitor.visitInvokeConstructor(this); 262 return visitor.visitInvokeConstructor(this);
263 } 263 }
264 264
265 accept1(ExpressionVisitor1 visitor, arg) { 265 accept1(ExpressionVisitor1 visitor, arg) {
266 return visitor.visitInvokeConstructor(this, arg); 266 return visitor.visitInvokeConstructor(this, arg);
267 } 267 }
268 } 268 }
269 269
270 /// Calls [toString] on each argument and concatenates the results.
271 class ConcatenateStrings extends Expression {
272 final List<Expression> arguments;
273
274 ConcatenateStrings(this.arguments);
275
276 accept(ExpressionVisitor visitor) => visitor.visitConcatenateStrings(this);
277 accept1(ExpressionVisitor1 visitor, arg) {
278 return visitor.visitConcatenateStrings(this, arg);
279 }
280 }
281
282 /** 270 /**
283 * A constant. 271 * A constant.
284 */ 272 */
285 class Constant extends Expression { 273 class Constant extends Expression {
286 final ConstantExpression expression;
287 final values.ConstantValue value; 274 final values.ConstantValue value;
288 275
289 Constant(this.expression, this.value); 276 Constant(this.value);
290 277
291 Constant.bool(values.BoolConstantValue constantValue) 278 Constant.bool(values.BoolConstantValue constantValue)
292 : expression = new BoolConstantExpression( 279 : value = constantValue;
293 constantValue.primitiveValue),
294 value = constantValue;
295 280
296 accept(ExpressionVisitor visitor) => visitor.visitConstant(this); 281 accept(ExpressionVisitor visitor) => visitor.visitConstant(this);
297 accept1(ExpressionVisitor1 visitor, arg) => visitor.visitConstant(this, arg); 282 accept1(ExpressionVisitor1 visitor, arg) => visitor.visitConstant(this, arg);
298 } 283 }
299 284
300 class This extends Expression { 285 class This extends Expression {
301 accept(ExpressionVisitor visitor) => visitor.visitThis(this); 286 accept(ExpressionVisitor visitor) => visitor.visitThis(this);
302 accept1(ExpressionVisitor1 visitor, arg) => visitor.visitThis(this, arg); 287 accept1(ExpressionVisitor1 visitor, arg) => visitor.visitThis(this, arg);
303 } 288 }
304 289
(...skipping 546 matching lines...) Expand 10 before | Expand all | Expand 10 after
851 } 836 }
852 837
853 abstract class ExpressionVisitor<E> { 838 abstract class ExpressionVisitor<E> {
854 E visitExpression(Expression node) => node.accept(this); 839 E visitExpression(Expression node) => node.accept(this);
855 E visitVariableUse(VariableUse node); 840 E visitVariableUse(VariableUse node);
856 E visitAssign(Assign node); 841 E visitAssign(Assign node);
857 E visitInvokeStatic(InvokeStatic node); 842 E visitInvokeStatic(InvokeStatic node);
858 E visitInvokeMethod(InvokeMethod node); 843 E visitInvokeMethod(InvokeMethod node);
859 E visitInvokeMethodDirectly(InvokeMethodDirectly node); 844 E visitInvokeMethodDirectly(InvokeMethodDirectly node);
860 E visitInvokeConstructor(InvokeConstructor node); 845 E visitInvokeConstructor(InvokeConstructor node);
861 E visitConcatenateStrings(ConcatenateStrings node);
862 E visitConstant(Constant node); 846 E visitConstant(Constant node);
863 E visitThis(This node); 847 E visitThis(This node);
864 E visitConditional(Conditional node); 848 E visitConditional(Conditional node);
865 E visitLogicalOperator(LogicalOperator node); 849 E visitLogicalOperator(LogicalOperator node);
866 E visitNot(Not node); 850 E visitNot(Not node);
867 E visitLiteralList(LiteralList node); 851 E visitLiteralList(LiteralList node);
868 E visitLiteralMap(LiteralMap node); 852 E visitLiteralMap(LiteralMap node);
869 E visitTypeOperator(TypeOperator node); 853 E visitTypeOperator(TypeOperator node);
870 E visitFunctionExpression(FunctionExpression node); 854 E visitFunctionExpression(FunctionExpression node);
871 E visitGetField(GetField node); 855 E visitGetField(GetField node);
(...skipping 11 matching lines...) Expand all
883 } 867 }
884 868
885 abstract class ExpressionVisitor1<E, A> { 869 abstract class ExpressionVisitor1<E, A> {
886 E visitExpression(Expression node, A arg) => node.accept1(this, arg); 870 E visitExpression(Expression node, A arg) => node.accept1(this, arg);
887 E visitVariableUse(VariableUse node, A arg); 871 E visitVariableUse(VariableUse node, A arg);
888 E visitAssign(Assign node, A arg); 872 E visitAssign(Assign node, A arg);
889 E visitInvokeStatic(InvokeStatic node, A arg); 873 E visitInvokeStatic(InvokeStatic node, A arg);
890 E visitInvokeMethod(InvokeMethod node, A arg); 874 E visitInvokeMethod(InvokeMethod node, A arg);
891 E visitInvokeMethodDirectly(InvokeMethodDirectly node, A arg); 875 E visitInvokeMethodDirectly(InvokeMethodDirectly node, A arg);
892 E visitInvokeConstructor(InvokeConstructor node, A arg); 876 E visitInvokeConstructor(InvokeConstructor node, A arg);
893 E visitConcatenateStrings(ConcatenateStrings node, A arg);
894 E visitConstant(Constant node, A arg); 877 E visitConstant(Constant node, A arg);
895 E visitThis(This node, A arg); 878 E visitThis(This node, A arg);
896 E visitConditional(Conditional node, A arg); 879 E visitConditional(Conditional node, A arg);
897 E visitLogicalOperator(LogicalOperator node, A arg); 880 E visitLogicalOperator(LogicalOperator node, A arg);
898 E visitNot(Not node, A arg); 881 E visitNot(Not node, A arg);
899 E visitLiteralList(LiteralList node, A arg); 882 E visitLiteralList(LiteralList node, A arg);
900 E visitLiteralMap(LiteralMap node, A arg); 883 E visitLiteralMap(LiteralMap node, A arg);
901 E visitTypeOperator(TypeOperator node, A arg); 884 E visitTypeOperator(TypeOperator node, A arg);
902 E visitFunctionExpression(FunctionExpression node, A arg); 885 E visitFunctionExpression(FunctionExpression node, A arg);
903 E visitGetField(GetField node, A arg); 886 E visitGetField(GetField node, A arg);
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after
976 959
977 visitInvokeMethodDirectly(InvokeMethodDirectly node) { 960 visitInvokeMethodDirectly(InvokeMethodDirectly node) {
978 visitExpression(node.receiver); 961 visitExpression(node.receiver);
979 node.arguments.forEach(visitExpression); 962 node.arguments.forEach(visitExpression);
980 } 963 }
981 964
982 visitInvokeConstructor(InvokeConstructor node) { 965 visitInvokeConstructor(InvokeConstructor node) {
983 node.arguments.forEach(visitExpression); 966 node.arguments.forEach(visitExpression);
984 } 967 }
985 968
986 visitConcatenateStrings(ConcatenateStrings node) {
987 node.arguments.forEach(visitExpression);
988 }
989
990 visitConstant(Constant node) {} 969 visitConstant(Constant node) {}
991 970
992 visitThis(This node) {} 971 visitThis(This node) {}
993 972
994 visitConditional(Conditional node) { 973 visitConditional(Conditional node) {
995 visitExpression(node.condition); 974 visitExpression(node.condition);
996 visitExpression(node.thenExpression); 975 visitExpression(node.thenExpression);
997 visitExpression(node.elseExpression); 976 visitExpression(node.elseExpression);
998 } 977 }
999 978
(...skipping 165 matching lines...) Expand 10 before | Expand all | Expand 10 after
1165 node.receiver = visitExpression(node.receiver); 1144 node.receiver = visitExpression(node.receiver);
1166 _replaceExpressions(node.arguments); 1145 _replaceExpressions(node.arguments);
1167 return node; 1146 return node;
1168 } 1147 }
1169 1148
1170 visitInvokeConstructor(InvokeConstructor node) { 1149 visitInvokeConstructor(InvokeConstructor node) {
1171 _replaceExpressions(node.arguments); 1150 _replaceExpressions(node.arguments);
1172 return node; 1151 return node;
1173 } 1152 }
1174 1153
1175 visitConcatenateStrings(ConcatenateStrings node) {
1176 _replaceExpressions(node.arguments);
1177 return node;
1178 }
1179
1180 visitConstant(Constant node) => node; 1154 visitConstant(Constant node) => node;
1181 1155
1182 visitThis(This node) => node; 1156 visitThis(This node) => node;
1183 1157
1184 visitConditional(Conditional node) { 1158 visitConditional(Conditional node) {
1185 node.condition = visitExpression(node.condition); 1159 node.condition = visitExpression(node.condition);
1186 node.thenExpression = visitExpression(node.thenExpression); 1160 node.thenExpression = visitExpression(node.thenExpression);
1187 node.elseExpression = visitExpression(node.elseExpression); 1161 node.elseExpression = visitExpression(node.elseExpression);
1188 return node; 1162 return node;
1189 } 1163 }
(...skipping 143 matching lines...) Expand 10 before | Expand all | Expand 10 after
1333 1307
1334 visitUnreachable(Unreachable node) { 1308 visitUnreachable(Unreachable node) {
1335 return node; 1309 return node;
1336 } 1310 }
1337 1311
1338 visitApplyBuiltinOperator(ApplyBuiltinOperator node) { 1312 visitApplyBuiltinOperator(ApplyBuiltinOperator node) {
1339 _replaceExpressions(node.arguments); 1313 _replaceExpressions(node.arguments);
1340 return node; 1314 return node;
1341 } 1315 }
1342 } 1316 }
OLDNEW
« no previous file with comments | « pkg/compiler/lib/src/tree_ir/tree_ir_builder.dart ('k') | pkg/compiler/lib/src/tree_ir/tree_ir_tracer.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698