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

Side by Side Diff: lib/type_checker.dart

Issue 2504313002: Fix some issues after introducing NamedType. (Closed)
Patch Set: Update testcase to cover the missing case Created 4 years, 1 month 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 | « lib/type_algebra.dart ('k') | testcases/input/named_parameters.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) 2016, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2016, 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 library kernel.type_checker; 4 library kernel.type_checker;
5 5
6 import 'ast.dart'; 6 import 'ast.dart';
7 import 'class_hierarchy.dart'; 7 import 'class_hierarchy.dart';
8 import 'core_types.dart'; 8 import 'core_types.dart';
9 import 'type_algebra.dart'; 9 import 'type_algebra.dart';
10 import 'type_environment.dart'; 10 import 'type_environment.dart';
(...skipping 453 matching lines...) Expand 10 before | Expand all | Expand 10 after
464 var instantiation = 464 var instantiation =
465 Substitution.fromPairs(function.typeParameters, arguments.types); 465 Substitution.fromPairs(function.typeParameters, arguments.types);
466 for (int i = 0; i < arguments.positional.length; ++i) { 466 for (int i = 0; i < arguments.positional.length; ++i) {
467 var expectedType = instantiation.substituteType( 467 var expectedType = instantiation.substituteType(
468 function.positionalParameters[i], 468 function.positionalParameters[i],
469 contravariant: true); 469 contravariant: true);
470 checkAssignableExpression(arguments.positional[i], expectedType); 470 checkAssignableExpression(arguments.positional[i], expectedType);
471 } 471 }
472 for (int i = 0; i < arguments.named.length; ++i) { 472 for (int i = 0; i < arguments.named.length; ++i) {
473 var argument = arguments.named[i]; 473 var argument = arguments.named[i];
474 var expectedType = function.namedParameters[argument.name]; 474 bool found = false;
475 if (expectedType == null) { 475 for (int j = 0; j < function.namedParameters.length; ++j) {
476 if (argument.name == function.namedParameters[j].name) {
477 var expectedType = instantiation.substituteType(
478 function.namedParameters[j].type,
479 contravariant: true);
480 checkAssignableExpression(argument.value, expectedType);
481 found = true;
482 break;
483 }
484 }
485 if (!found) {
476 fail(argument.value, 'Unexpected named parameter: ${argument.name}'); 486 fail(argument.value, 'Unexpected named parameter: ${argument.name}');
477 } else { 487 return const BottomType();
478 checkAssignableExpression(argument.value,
479 instantiation.substituteType(expectedType, contravariant: true));
480 } 488 }
481 } 489 }
482 return instantiation.substituteType(function.returnType); 490 return instantiation.substituteType(function.returnType);
483 } 491 }
484 492
485 @override 493 @override
486 DartType visitMethodInvocation(MethodInvocation node) { 494 DartType visitMethodInvocation(MethodInvocation node) {
487 var target = node.interfaceTarget; 495 var target = node.interfaceTarget;
488 if (target == null) { 496 if (target == null) {
489 var receiver = visitExpression(node.receiver); 497 var receiver = visitExpression(node.receiver);
(...skipping 356 matching lines...) Expand 10 before | Expand all | Expand 10 after
846 } 854 }
847 855
848 @override 856 @override
849 visitLocalInitializer(LocalInitializer node) { 857 visitLocalInitializer(LocalInitializer node) {
850 visitVariableDeclaration(node.variable); 858 visitVariableDeclaration(node.variable);
851 } 859 }
852 860
853 @override 861 @override
854 visitInvalidInitializer(InvalidInitializer node) {} 862 visitInvalidInitializer(InvalidInitializer node) {}
855 } 863 }
OLDNEW
« no previous file with comments | « lib/type_algebra.dart ('k') | testcases/input/named_parameters.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698