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

Side by Side Diff: sdk/lib/_internal/compiler/implementation/resolution/members.dart

Issue 12082045: Add optional and named parameters to FunctionType. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Updated cf. comments. Created 7 years, 10 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 | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2012, 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 part of resolution; 5 part of resolution;
6 6
7 abstract class TreeElements { 7 abstract class TreeElements {
8 Element operator[](Node node); 8 Element operator[](Node node);
9 Selector getSelector(Send send); 9 Selector getSelector(Send send);
10 DartType getType(Node node); 10 DartType getType(Node node);
(...skipping 836 matching lines...) Expand 10 before | Expand all | Expand 10 after
847 visitor.visit(node); 847 visitor.visit(node);
848 848
849 element.isBeingResolved = false; 849 element.isBeingResolved = false;
850 element.isResolved = true; 850 element.isResolved = true;
851 }); 851 });
852 }); 852 });
853 } 853 }
854 854
855 FunctionType computeFunctionType(Element element, 855 FunctionType computeFunctionType(Element element,
856 FunctionSignature signature) { 856 FunctionSignature signature) {
857 LinkBuilder<DartType> parameterTypes = new LinkBuilder<DartType>(); 857 var parameterTypes = new LinkBuilder<DartType>();
858 for (Link<Element> link = signature.requiredParameters; 858 for (Element parameter in signature.requiredParameters) {
859 !link.isEmpty; 859 parameterTypes.addLast(parameter.computeType(compiler));
860 link = link.tail) {
861 parameterTypes.addLast(link.head.computeType(compiler));
862 // TODO(karlklose): optional parameters.
863 } 860 }
864 return new FunctionType(signature.returnType, 861 var optionalParameterTypes = const Link<DartType>();
865 parameterTypes.toLink(), 862 var namedParameters = const Link<SourceString>();
866 element); 863 var namedParameterTypes = const Link<DartType>();
864 if (signature.optionalParametersAreNamed) {
865 var namedParametersBuilder = new LinkBuilder<SourceString>();
866 var namedParameterTypesBuilder = new LinkBuilder<DartType>();
867 for (Element parameter in signature.optionalParameters) {
868 namedParametersBuilder.addLast(parameter.name);
869 namedParameterTypesBuilder.addLast(parameter.computeType(compiler));
870 }
871 namedParameters = namedParametersBuilder.toLink();
872 namedParameterTypes = namedParametersBuilder.toLink();
873 } else {
874 var optionalParameterTypesBuilder = new LinkBuilder<DartType>();
875 for (Element parameter in signature.optionalParameters) {
876 optionalParameterTypesBuilder.addLast(parameter.computeType(compiler));
877 }
878 optionalParameterTypes = optionalParameterTypesBuilder.toLink();
879 }
880 return new FunctionType(element,
881 signature.returnType,
882 parameterTypes.toLink(),
883 optionalParameterTypes,
884 namedParameters,
885 namedParameterTypes);
867 } 886 }
868 887
869 void resolveMetadataAnnotation(PartialMetadataAnnotation annotation) { 888 void resolveMetadataAnnotation(PartialMetadataAnnotation annotation) {
870 compiler.withCurrentElement(annotation.annotatedElement, () => measure(() { 889 compiler.withCurrentElement(annotation.annotatedElement, () => measure(() {
871 assert(annotation.resolutionState == STATE_NOT_STARTED); 890 assert(annotation.resolutionState == STATE_NOT_STARTED);
872 annotation.resolutionState = STATE_STARTED; 891 annotation.resolutionState = STATE_STARTED;
873 892
874 Node node = annotation.parseNode(compiler); 893 Node node = annotation.parseNode(compiler);
875 ResolverVisitor visitor = 894 ResolverVisitor visitor =
876 visitorFor(annotation.annotatedElement.enclosingElement); 895 visitorFor(annotation.annotatedElement.enclosingElement);
(...skipping 2761 matching lines...) Expand 10 before | Expand all | Expand 10 after
3638 return e; 3657 return e;
3639 } 3658 }
3640 3659
3641 /// Assumed to be called by [resolveRedirectingFactory]. 3660 /// Assumed to be called by [resolveRedirectingFactory].
3642 Element visitReturn(Return node) { 3661 Element visitReturn(Return node) {
3643 Node expression = node.expression; 3662 Node expression = node.expression;
3644 return finishConstructorReference(visit(expression), 3663 return finishConstructorReference(visit(expression),
3645 expression, expression); 3664 expression, expression);
3646 } 3665 }
3647 } 3666 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698