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

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

Issue 1092183003: Handle calls through call methods (Closed) Base URL: git@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
« no previous file with comments | « no previous file | lib/src/checker/rules.dart » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 487 matching lines...) Expand 10 before | Expand all | Expand 10 after
498 if (arg is NamedExpression) { 498 if (arg is NamedExpression) {
499 arg.expression = checkAssignment(arg.expression, expectedType); 499 arg.expression = checkAssignment(arg.expression, expectedType);
500 return arg; 500 return arg;
501 } 501 }
502 return checkAssignment(arg, expectedType); 502 return checkAssignment(arg, expectedType);
503 } 503 }
504 504
505 void checkFunctionApplication( 505 void checkFunctionApplication(
506 Expression node, Expression f, ArgumentList list) { 506 Expression node, Expression f, ArgumentList list) {
507 if (_rules.isDynamicCall(f)) { 507 if (_rules.isDynamicCall(f)) {
508 // TODO(vsm): For a function object, we should still be able to derive a 508 // If f is Function and this is a method invocation, we should have
509 // function type from it. 509 // gotten an analyzer error, so no need to issue another error.
510 _recordDynamicInvoke(node); 510 _recordDynamicInvoke(node);
511 } else { 511 } else {
512 checkArgumentList(list, _rules.getStaticType(f)); 512 checkArgumentList(list, _rules.getTypeAsCaller(f));
513 } 513 }
514 } 514 }
515 515
516 visitMethodInvocation(MethodInvocation node) { 516 visitMethodInvocation(MethodInvocation node) {
517 checkFunctionApplication(node, node.methodName, node.argumentList); 517 checkFunctionApplication(node, node.methodName, node.argumentList);
518 node.visitChildren(this); 518 node.visitChildren(this);
519 } 519 }
520 520
521 visitFunctionExpressionInvocation(FunctionExpressionInvocation node) { 521 visitFunctionExpressionInvocation(FunctionExpressionInvocation node) {
522 checkFunctionApplication(node, node.function, node.argumentList); 522 checkFunctionApplication(node, node.function, node.argumentList);
(...skipping 274 matching lines...) Expand 10 before | Expand all | Expand 10 after
797 void _recordDynamicInvoke(AstNode node) { 797 void _recordDynamicInvoke(AstNode node) {
798 _reporter.log(new DynamicInvoke(_rules, node)); 798 _reporter.log(new DynamicInvoke(_rules, node));
799 } 799 }
800 800
801 void _recordMessage(StaticInfo info) { 801 void _recordMessage(StaticInfo info) {
802 if (info == null) return; 802 if (info == null) return;
803 if (info.level >= logger.Level.SEVERE) _failure = true; 803 if (info.level >= logger.Level.SEVERE) _failure = true;
804 _reporter.log(info); 804 _reporter.log(info);
805 } 805 }
806 } 806 }
OLDNEW
« no previous file with comments | « no previous file | lib/src/checker/rules.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698