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

Side by Side Diff: pkg/compiler/lib/src/elements/common.dart

Issue 2809603002: Introduce ParameterStructure (Closed)
Patch Set: Fix. Created 3 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 /// Mixins that implement convenience methods on [Element] subclasses. 5 /// Mixins that implement convenience methods on [Element] subclasses.
6 6
7 library elements.common; 7 library elements.common;
8 8
9 import '../common/names.dart' show Identifiers, Names, Uris; 9 import '../common/names.dart' show Identifiers, Names, Uris;
10 import '../common_elements.dart' show CommonElements; 10 import '../common_elements.dart' show CommonElements;
11 import '../util/util.dart' show Link; 11 import '../util/util.dart' show Link;
12 import 'entities.dart';
12 import 'elements.dart'; 13 import 'elements.dart';
13 import 'resolution_types.dart' 14 import 'resolution_types.dart'
14 show ResolutionDartType, ResolutionInterfaceType, ResolutionFunctionType; 15 show ResolutionDartType, ResolutionInterfaceType, ResolutionFunctionType;
15 16
16 abstract class ElementCommon implements Element { 17 abstract class ElementCommon implements Element {
17 @override 18 @override
18 bool get isLibrary => kind == ElementKind.LIBRARY; 19 bool get isLibrary => kind == ElementKind.LIBRARY;
19 20
20 @override 21 @override
21 bool get isCompilationUnit => kind == ElementKind.COMPILATION_UNIT; 22 bool get isCompilationUnit => kind == ElementKind.COMPILATION_UNIT;
(...skipping 469 matching lines...) Expand 10 before | Expand all | Expand 10 after
491 } 492 }
492 return null; 493 return null;
493 } 494 }
494 495
495 void forEachBackendMember(void f(Element member)) { 496 void forEachBackendMember(void f(Element member)) {
496 backendMembers.forEach(f); 497 backendMembers.forEach(f);
497 } 498 }
498 } 499 }
499 500
500 abstract class FunctionSignatureCommon implements FunctionSignature { 501 abstract class FunctionSignatureCommon implements FunctionSignature {
502 ParameterStructure _parameterStructure;
503
501 ResolutionDartType get returnType => type.returnType; 504 ResolutionDartType get returnType => type.returnType;
502 505
503 void forEachRequiredParameter(void function(Element parameter)) { 506 void forEachRequiredParameter(void function(Element parameter)) {
504 requiredParameters.forEach(function); 507 requiredParameters.forEach(function);
505 } 508 }
506 509
507 void forEachOptionalParameter(void function(Element parameter)) { 510 void forEachOptionalParameter(void function(Element parameter)) {
508 optionalParameters.forEach(function); 511 optionalParameters.forEach(function);
509 } 512 }
510 513
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
548 // There must be at least as many arguments as in the other signature, but 551 // There must be at least as many arguments as in the other signature, but
549 // this signature must not have more required parameters. Having more 552 // this signature must not have more required parameters. Having more
550 // optional parameters is not a problem, they simply are never provided 553 // optional parameters is not a problem, they simply are never provided
551 // by call sites of a call to a method with the other signature. 554 // by call sites of a call to a method with the other signature.
552 int otherTotalCount = signature.parameterCount; 555 int otherTotalCount = signature.parameterCount;
553 return requiredParameterCount <= otherTotalCount && 556 return requiredParameterCount <= otherTotalCount &&
554 parameterCount >= otherTotalCount; 557 parameterCount >= otherTotalCount;
555 } 558 }
556 return true; 559 return true;
557 } 560 }
561
562 ParameterStructure get parameterStructure {
563 if (_parameterStructure == null) {
564 int requiredParameters = requiredParameterCount;
565 int positionalParameters;
566 List<String> namedParameters;
567 if (optionalParametersAreNamed) {
568 namedParameters = type.namedParameters;
569 positionalParameters = requiredParameters;
570 } else {
571 namedParameters = const <String>[];
572 positionalParameters = requiredParameters + optionalParameterCount;
573 }
574 _parameterStructure = new ParameterStructure(
575 requiredParameters, positionalParameters, namedParameters);
576 }
577 return _parameterStructure;
578 }
558 } 579 }
559 580
560 abstract class MixinApplicationElementCommon 581 abstract class MixinApplicationElementCommon
561 implements MixinApplicationElement { 582 implements MixinApplicationElement {
562 Link<ConstructorElement> get constructors { 583 Link<ConstructorElement> get constructors {
563 throw new UnsupportedError('Unimplemented $this.constructors'); 584 throw new UnsupportedError('Unimplemented $this.constructors');
564 } 585 }
565 586
566 FunctionElement _lookupLocalConstructor(String name) { 587 FunctionElement _lookupLocalConstructor(String name) {
567 for (Link<Element> link = constructors; !link.isEmpty; link = link.tail) { 588 for (Link<Element> link = constructors; !link.isEmpty; link = link.tail) {
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after
648 @override 669 @override
649 bool get isBoolFromEnvironmentConstructor { 670 bool get isBoolFromEnvironmentConstructor {
650 return fromEnvironmentState == _FromEnvironmentState.BOOL; 671 return fromEnvironmentState == _FromEnvironmentState.BOOL;
651 } 672 }
652 673
653 @override 674 @override
654 bool get isStringFromEnvironmentConstructor { 675 bool get isStringFromEnvironmentConstructor {
655 return fromEnvironmentState == _FromEnvironmentState.STRING; 676 return fromEnvironmentState == _FromEnvironmentState.STRING;
656 } 677 }
657 } 678 }
OLDNEW
« no previous file with comments | « pkg/compiler/lib/src/compile_time_constants.dart ('k') | pkg/compiler/lib/src/elements/elements.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698