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

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

Issue 1161683002: dart2js cps: 'is' checks on types with type arguments. (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: 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, GenericType, InterfaceType, TypeVaria bleType; 9 import '../dart_types.dart' show DartType, GenericType, InterfaceType, TypeVaria bleType;
10 import '../elements/elements.dart'; 10 import '../elements/elements.dart';
(...skipping 314 matching lines...) Expand 10 before | Expand all | Expand 10 after
325 LiteralMap(this.type, this.entries); 325 LiteralMap(this.type, this.entries);
326 326
327 accept(ExpressionVisitor visitor) => visitor.visitLiteralMap(this); 327 accept(ExpressionVisitor visitor) => visitor.visitLiteralMap(this);
328 accept1(ExpressionVisitor1 visitor, arg) { 328 accept1(ExpressionVisitor1 visitor, arg) {
329 return visitor.visitLiteralMap(this, arg); 329 return visitor.visitLiteralMap(this, arg);
330 } 330 }
331 } 331 }
332 332
333 /// Given the interceptor for a value, test the value against a type. 333 /// Given the interceptor for a value, test the value against a type.
334 class TypeOperator extends Expression { 334 class TypeOperator extends Expression {
335 Expression receiver; 335 Expression value;
336 final DartType type; 336 final DartType type;
337 final List<Expression> typeArguments;
337 final bool isTypeTest; 338 final bool isTypeTest;
338 339
339 TypeOperator(this.receiver, this.type, {bool this.isTypeTest}); 340 TypeOperator(this.value, this.type, this.typeArguments,
341 {bool this.isTypeTest});
340 342
341 accept(ExpressionVisitor visitor) => visitor.visitTypeOperator(this); 343 accept(ExpressionVisitor visitor) => visitor.visitTypeOperator(this);
342 accept1(ExpressionVisitor1 visitor, arg) { 344 accept1(ExpressionVisitor1 visitor, arg) {
343 return visitor.visitTypeOperator(this, arg); 345 return visitor.visitTypeOperator(this, arg);
344 } 346 }
345 347
346 String get operator => isTypeTest ? 'is' : 'as'; 348 String get operator => isTypeTest ? 'is' : 'as';
347 } 349 }
348 350
349 /// A conditional expression. 351 /// A conditional expression.
(...skipping 800 matching lines...) Expand 10 before | Expand all | Expand 10 after
1150 } 1152 }
1151 1153
1152 visitLiteralMap(LiteralMap node) { 1154 visitLiteralMap(LiteralMap node) {
1153 node.entries.forEach((LiteralMapEntry entry) { 1155 node.entries.forEach((LiteralMapEntry entry) {
1154 visitExpression(entry.key); 1156 visitExpression(entry.key);
1155 visitExpression(entry.value); 1157 visitExpression(entry.value);
1156 }); 1158 });
1157 } 1159 }
1158 1160
1159 visitTypeOperator(TypeOperator node) { 1161 visitTypeOperator(TypeOperator node) {
1160 visitExpression(node.receiver); 1162 visitExpression(node.value);
1163 node.typeArguments.forEach(visitExpression);
1161 } 1164 }
1162 1165
1163 visitFunctionExpression(FunctionExpression node) { 1166 visitFunctionExpression(FunctionExpression node) {
1164 visitInnerFunction(node.definition); 1167 visitInnerFunction(node.definition);
1165 } 1168 }
1166 1169
1167 visitLabeledStatement(LabeledStatement node) { 1170 visitLabeledStatement(LabeledStatement node) {
1168 visitStatement(node.body); 1171 visitStatement(node.body);
1169 visitStatement(node.next); 1172 visitStatement(node.next);
1170 } 1173 }
(...skipping 171 matching lines...) Expand 10 before | Expand all | Expand 10 after
1342 1345
1343 visitLiteralMap(LiteralMap node) { 1346 visitLiteralMap(LiteralMap node) {
1344 node.entries.forEach((LiteralMapEntry entry) { 1347 node.entries.forEach((LiteralMapEntry entry) {
1345 entry.key = visitExpression(entry.key); 1348 entry.key = visitExpression(entry.key);
1346 entry.value = visitExpression(entry.value); 1349 entry.value = visitExpression(entry.value);
1347 }); 1350 });
1348 return node; 1351 return node;
1349 } 1352 }
1350 1353
1351 visitTypeOperator(TypeOperator node) { 1354 visitTypeOperator(TypeOperator node) {
1352 node.receiver = visitExpression(node.receiver); 1355 node.value = visitExpression(node.value);
1356 _replaceExpressions(node.typeArguments);
1353 return node; 1357 return node;
1354 } 1358 }
1355 1359
1356 visitFunctionExpression(FunctionExpression node) { 1360 visitFunctionExpression(FunctionExpression node) {
1357 visitInnerFunction(node.definition); 1361 visitInnerFunction(node.definition);
1358 return node; 1362 return node;
1359 } 1363 }
1360 1364
1361 visitLabeledStatement(LabeledStatement node) { 1365 visitLabeledStatement(LabeledStatement node) {
1362 node.body = visitStatement(node.body); 1366 node.body = visitStatement(node.body);
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after
1455 visitTypeExpression(TypeExpression node) { 1459 visitTypeExpression(TypeExpression node) {
1456 _replaceExpressions(node.arguments); 1460 _replaceExpressions(node.arguments);
1457 return node; 1461 return node;
1458 } 1462 }
1459 1463
1460 visitCreateInvocationMirror(CreateInvocationMirror node) { 1464 visitCreateInvocationMirror(CreateInvocationMirror node) {
1461 _replaceExpressions(node.arguments); 1465 _replaceExpressions(node.arguments);
1462 return node; 1466 return node;
1463 } 1467 }
1464 } 1468 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698