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

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

Issue 1616143003: Lower map literals to constructor or function calls in builder (Closed) Base URL: https://github.com/dart-lang/sdk.git@master
Patch Set: Created 4 years, 11 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 294 matching lines...) Expand 10 before | Expand all | Expand 10 after
305 final List<Expression> values; 305 final List<Expression> values;
306 306
307 LiteralList(this.type, this.values); 307 LiteralList(this.type, this.values);
308 308
309 accept(ExpressionVisitor visitor) => visitor.visitLiteralList(this); 309 accept(ExpressionVisitor visitor) => visitor.visitLiteralList(this);
310 accept1(ExpressionVisitor1 visitor, arg) { 310 accept1(ExpressionVisitor1 visitor, arg) {
311 return visitor.visitLiteralList(this, arg); 311 return visitor.visitLiteralList(this, arg);
312 } 312 }
313 } 313 }
314 314
315 class LiteralMapEntry {
316 Expression key;
317 Expression value;
318
319 LiteralMapEntry(this.key, this.value);
320 }
321
322 class LiteralMap extends Expression {
323 final InterfaceType type;
324 final List<LiteralMapEntry> entries;
325
326 LiteralMap(this.type, this.entries);
327
328 accept(ExpressionVisitor visitor) => visitor.visitLiteralMap(this);
329 accept1(ExpressionVisitor1 visitor, arg) {
330 return visitor.visitLiteralMap(this, arg);
331 }
332 }
333
334 /// Type test or type cast. 315 /// Type test or type cast.
335 /// 316 ///
336 /// Note that if this is a type test, then [type] cannot be `Object`, `dynamic`, 317 /// Note that if this is a type test, then [type] cannot be `Object`, `dynamic`,
337 /// or the `Null` type. These cases are compiled to other node types. 318 /// or the `Null` type. These cases are compiled to other node types.
338 class TypeOperator extends Expression { 319 class TypeOperator extends Expression {
339 Expression value; 320 Expression value;
340 final DartType type; 321 final DartType type;
341 final List<Expression> typeArguments; 322 final List<Expression> typeArguments;
342 final bool isTypeTest; 323 final bool isTypeTest;
343 324
(...skipping 648 matching lines...) Expand 10 before | Expand all | Expand 10 after
992 E visitInvokeMethod(InvokeMethod node); 973 E visitInvokeMethod(InvokeMethod node);
993 E visitInvokeMethodDirectly(InvokeMethodDirectly node); 974 E visitInvokeMethodDirectly(InvokeMethodDirectly node);
994 E visitInvokeConstructor(InvokeConstructor node); 975 E visitInvokeConstructor(InvokeConstructor node);
995 E visitOneShotInterceptor(OneShotInterceptor node); 976 E visitOneShotInterceptor(OneShotInterceptor node);
996 E visitConstant(Constant node); 977 E visitConstant(Constant node);
997 E visitThis(This node); 978 E visitThis(This node);
998 E visitConditional(Conditional node); 979 E visitConditional(Conditional node);
999 E visitLogicalOperator(LogicalOperator node); 980 E visitLogicalOperator(LogicalOperator node);
1000 E visitNot(Not node); 981 E visitNot(Not node);
1001 E visitLiteralList(LiteralList node); 982 E visitLiteralList(LiteralList node);
1002 E visitLiteralMap(LiteralMap node);
1003 E visitTypeOperator(TypeOperator node); 983 E visitTypeOperator(TypeOperator node);
1004 E visitGetField(GetField node); 984 E visitGetField(GetField node);
1005 E visitSetField(SetField node); 985 E visitSetField(SetField node);
1006 E visitGetStatic(GetStatic node); 986 E visitGetStatic(GetStatic node);
1007 E visitSetStatic(SetStatic node); 987 E visitSetStatic(SetStatic node);
1008 E visitGetTypeTestProperty(GetTypeTestProperty node); 988 E visitGetTypeTestProperty(GetTypeTestProperty node);
1009 E visitCreateBox(CreateBox node); 989 E visitCreateBox(CreateBox node);
1010 E visitCreateInstance(CreateInstance node); 990 E visitCreateInstance(CreateInstance node);
1011 E visitReifyRuntimeType(ReifyRuntimeType node); 991 E visitReifyRuntimeType(ReifyRuntimeType node);
1012 E visitReadTypeVariable(ReadTypeVariable node); 992 E visitReadTypeVariable(ReadTypeVariable node);
(...skipping 17 matching lines...) Expand all
1030 E visitInvokeMethod(InvokeMethod node, A arg); 1010 E visitInvokeMethod(InvokeMethod node, A arg);
1031 E visitInvokeMethodDirectly(InvokeMethodDirectly node, A arg); 1011 E visitInvokeMethodDirectly(InvokeMethodDirectly node, A arg);
1032 E visitInvokeConstructor(InvokeConstructor node, A arg); 1012 E visitInvokeConstructor(InvokeConstructor node, A arg);
1033 E visitOneShotInterceptor(OneShotInterceptor node, A arg); 1013 E visitOneShotInterceptor(OneShotInterceptor node, A arg);
1034 E visitConstant(Constant node, A arg); 1014 E visitConstant(Constant node, A arg);
1035 E visitThis(This node, A arg); 1015 E visitThis(This node, A arg);
1036 E visitConditional(Conditional node, A arg); 1016 E visitConditional(Conditional node, A arg);
1037 E visitLogicalOperator(LogicalOperator node, A arg); 1017 E visitLogicalOperator(LogicalOperator node, A arg);
1038 E visitNot(Not node, A arg); 1018 E visitNot(Not node, A arg);
1039 E visitLiteralList(LiteralList node, A arg); 1019 E visitLiteralList(LiteralList node, A arg);
1040 E visitLiteralMap(LiteralMap node, A arg);
1041 E visitTypeOperator(TypeOperator node, A arg); 1020 E visitTypeOperator(TypeOperator node, A arg);
1042 E visitGetField(GetField node, A arg); 1021 E visitGetField(GetField node, A arg);
1043 E visitSetField(SetField node, A arg); 1022 E visitSetField(SetField node, A arg);
1044 E visitGetStatic(GetStatic node, A arg); 1023 E visitGetStatic(GetStatic node, A arg);
1045 E visitSetStatic(SetStatic node, A arg); 1024 E visitSetStatic(SetStatic node, A arg);
1046 E visitGetTypeTestProperty(GetTypeTestProperty node, A arg); 1025 E visitGetTypeTestProperty(GetTypeTestProperty node, A arg);
1047 E visitCreateBox(CreateBox node, A arg); 1026 E visitCreateBox(CreateBox node, A arg);
1048 E visitCreateInstance(CreateInstance node, A arg); 1027 E visitCreateInstance(CreateInstance node, A arg);
1049 E visitReifyRuntimeType(ReifyRuntimeType node, A arg); 1028 E visitReifyRuntimeType(ReifyRuntimeType node, A arg);
1050 E visitReadTypeVariable(ReadTypeVariable node, A arg); 1029 E visitReadTypeVariable(ReadTypeVariable node, A arg);
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after
1149 } 1128 }
1150 1129
1151 visitNot(Not node) { 1130 visitNot(Not node) {
1152 visitExpression(node.operand); 1131 visitExpression(node.operand);
1153 } 1132 }
1154 1133
1155 visitLiteralList(LiteralList node) { 1134 visitLiteralList(LiteralList node) {
1156 node.values.forEach(visitExpression); 1135 node.values.forEach(visitExpression);
1157 } 1136 }
1158 1137
1159 visitLiteralMap(LiteralMap node) {
1160 node.entries.forEach((LiteralMapEntry entry) {
1161 visitExpression(entry.key);
1162 visitExpression(entry.value);
1163 });
1164 }
1165
1166 visitTypeOperator(TypeOperator node) { 1138 visitTypeOperator(TypeOperator node) {
1167 visitExpression(node.value); 1139 visitExpression(node.value);
1168 node.typeArguments.forEach(visitExpression); 1140 node.typeArguments.forEach(visitExpression);
1169 } 1141 }
1170 1142
1171 visitLabeledStatement(LabeledStatement node) { 1143 visitLabeledStatement(LabeledStatement node) {
1172 visitStatement(node.body); 1144 visitStatement(node.body);
1173 visitStatement(node.next); 1145 visitStatement(node.next);
1174 } 1146 }
1175 1147
(...skipping 207 matching lines...) Expand 10 before | Expand all | Expand 10 after
1383 visitNot(Not node) { 1355 visitNot(Not node) {
1384 node.operand = visitExpression(node.operand); 1356 node.operand = visitExpression(node.operand);
1385 return node; 1357 return node;
1386 } 1358 }
1387 1359
1388 visitLiteralList(LiteralList node) { 1360 visitLiteralList(LiteralList node) {
1389 _replaceExpressions(node.values); 1361 _replaceExpressions(node.values);
1390 return node; 1362 return node;
1391 } 1363 }
1392 1364
1393 visitLiteralMap(LiteralMap node) {
1394 node.entries.forEach((LiteralMapEntry entry) {
1395 entry.key = visitExpression(entry.key);
1396 entry.value = visitExpression(entry.value);
1397 });
1398 return node;
1399 }
1400
1401 visitTypeOperator(TypeOperator node) { 1365 visitTypeOperator(TypeOperator node) {
1402 node.value = visitExpression(node.value); 1366 node.value = visitExpression(node.value);
1403 _replaceExpressions(node.typeArguments); 1367 _replaceExpressions(node.typeArguments);
1404 return node; 1368 return node;
1405 } 1369 }
1406 1370
1407 visitLabeledStatement(LabeledStatement node) { 1371 visitLabeledStatement(LabeledStatement node) {
1408 node.body = visitStatement(node.body); 1372 node.body = visitStatement(node.body);
1409 node.next = visitStatement(node.next); 1373 node.next = visitStatement(node.next);
1410 return node; 1374 return node;
(...skipping 202 matching lines...) Expand 10 before | Expand all | Expand 10 after
1613 1577
1614 /// Number of uses of the current fallthrough target. 1578 /// Number of uses of the current fallthrough target.
1615 int get useCount => _stack.last.useCount; 1579 int get useCount => _stack.last.useCount;
1616 1580
1617 /// Indicate that a statement will fall through to the current fallthrough 1581 /// Indicate that a statement will fall through to the current fallthrough
1618 /// target. 1582 /// target.
1619 void use() { 1583 void use() {
1620 ++_stack.last.useCount; 1584 ++_stack.last.useCount;
1621 } 1585 }
1622 } 1586 }
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