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

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

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

Powered by Google App Engine
This is Rietveld 408576698