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

Side by Side Diff: lib/src/checker/checker.dart

Issue 1048863003: Handle for-in loops (Closed) Base URL: https://github.com/dart-lang/dev_compiler.git@master
Patch Set: Created 5 years, 8 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) 2015, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2015, 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 dev_compiler.src.checker.checker; 5 library dev_compiler.src.checker.checker;
6 6
7 import 'package:analyzer/analyzer.dart'; 7 import 'package:analyzer/analyzer.dart';
8 import 'package:analyzer/src/generated/ast.dart'; 8 import 'package:analyzer/src/generated/ast.dart';
9 import 'package:analyzer/src/generated/element.dart'; 9 import 'package:analyzer/src/generated/element.dart';
10 import 'package:analyzer/src/generated/scanner.dart' show Token, TokenType; 10 import 'package:analyzer/src/generated/scanner.dart' show Token, TokenType;
(...skipping 393 matching lines...) Expand 10 before | Expand all | Expand 10 after
404 } 404 }
405 405
406 @override 406 @override
407 visitConstructorFieldInitializer(ConstructorFieldInitializer node) { 407 visitConstructorFieldInitializer(ConstructorFieldInitializer node) {
408 var field = node.fieldName; 408 var field = node.fieldName;
409 DartType staticType = _rules.elementType(field.staticElement); 409 DartType staticType = _rules.elementType(field.staticElement);
410 node.expression = checkAssignment(node.expression, staticType); 410 node.expression = checkAssignment(node.expression, staticType);
411 node.visitChildren(this); 411 node.visitChildren(this);
412 } 412 }
413 413
414 @override
415 visitForEachStatement(ForEachStatement node) {
416 // Check that the expression is an Iterable.
417 var expr = node.iterable;
418 var iterableType = _rules.provider.iterableType;
419 var loopVariable = node.identifier != null
420 ? node.identifier
421 : node.loopVariable.identifier;
422 var iteratorType = loopVariable.staticType;
423 var checkedType = iterableType.substitute4([iteratorType]);
424 node.iterable = checkAssignment(expr, checkedType);
425 node.visitChildren(this);
426 }
427
414 @override visitListLiteral(ListLiteral node) { 428 @override visitListLiteral(ListLiteral node) {
415 var type = _rules.provider.dynamicType; 429 var type = _rules.provider.dynamicType;
416 if (node.typeArguments != null) { 430 if (node.typeArguments != null) {
417 var targs = node.typeArguments.arguments; 431 var targs = node.typeArguments.arguments;
418 if (targs.length > 0) type = targs[0].type; 432 if (targs.length > 0) type = targs[0].type;
419 } 433 }
420 var elements = node.elements; 434 var elements = node.elements;
421 for (int i = 0; i < elements.length; i++) { 435 for (int i = 0; i < elements.length; i++) {
422 elements[i] = checkArgument(elements[i], type); 436 elements[i] = checkArgument(elements[i], type);
423 } 437 }
(...skipping 354 matching lines...) Expand 10 before | Expand all | Expand 10 after
778 void _recordDynamicInvoke(AstNode node) { 792 void _recordDynamicInvoke(AstNode node) {
779 _reporter.log(new DynamicInvoke(_rules, node)); 793 _reporter.log(new DynamicInvoke(_rules, node));
780 } 794 }
781 795
782 void _recordMessage(StaticInfo info) { 796 void _recordMessage(StaticInfo info) {
783 if (info == null) return; 797 if (info == null) return;
784 if (info.level >= logger.Level.SEVERE) _failure = true; 798 if (info.level >= logger.Level.SEVERE) _failure = true;
785 _reporter.log(info); 799 _reporter.log(info);
786 } 800 }
787 } 801 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698