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

Unified 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, 11 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 side-by-side diff with in-line comments
Download patch
Index: sdk/lib/_internal/compiler/implementation/resolution/members.dart
diff --git a/sdk/lib/_internal/compiler/implementation/resolution/members.dart b/sdk/lib/_internal/compiler/implementation/resolution/members.dart
index fc55765a8123d750bfb82cbe61b9d97a77c896eb..70446518cff94f8d16cab4e7b4fc7d8a9f29925b 100644
--- a/sdk/lib/_internal/compiler/implementation/resolution/members.dart
+++ b/sdk/lib/_internal/compiler/implementation/resolution/members.dart
@@ -854,16 +854,35 @@ class ResolverTask extends CompilerTask {
FunctionType computeFunctionType(Element element,
FunctionSignature signature) {
- LinkBuilder<DartType> parameterTypes = new LinkBuilder<DartType>();
- for (Link<Element> link = signature.requiredParameters;
- !link.isEmpty;
- link = link.tail) {
- parameterTypes.addLast(link.head.computeType(compiler));
- // TODO(karlklose): optional parameters.
- }
- return new FunctionType(signature.returnType,
- parameterTypes.toLink(),
- element);
+ var parameterTypes = new LinkBuilder<DartType>();
+ for (Element parameter in signature.requiredParameters) {
+ parameterTypes.addLast(parameter.computeType(compiler));
+ }
+ var optionalParameterTypes = const Link<DartType>();
+ var namedParameters = const Link<SourceString>();
+ var namedParameterTypes = const Link<DartType>();
+ if (signature.optionalParametersAreNamed) {
+ var namedParametersBuilder = new LinkBuilder<SourceString>();
+ var namedParameterTypesBuilder = new LinkBuilder<DartType>();
+ for (Element parameter in signature.optionalParameters) {
+ namedParametersBuilder.addLast(parameter.name);
+ namedParameterTypesBuilder.addLast(parameter.computeType(compiler));
+ }
+ namedParameters = namedParametersBuilder.toLink();
+ namedParameterTypes = namedParametersBuilder.toLink();
+ } else {
+ var optionalParameterTypesBuilder = new LinkBuilder<DartType>();
+ for (Element parameter in signature.optionalParameters) {
+ optionalParameterTypesBuilder.addLast(parameter.computeType(compiler));
+ }
+ optionalParameterTypes = optionalParameterTypesBuilder.toLink();
+ }
+ return new FunctionType(element,
+ signature.returnType,
+ parameterTypes.toLink(),
+ optionalParameterTypes,
+ namedParameters,
+ namedParameterTypes);
}
void resolveMetadataAnnotation(PartialMetadataAnnotation annotation) {

Powered by Google App Engine
This is Rietveld 408576698