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

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: Remove renegade linebreak 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 242 matching lines...) Expand 10 before | Expand all | Expand 10 after
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
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
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
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
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
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 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698