Chromium Code Reviews| 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..81b3aa4629072cdf7e75c70a62e9772701cb56c1 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. |
| + var parameterTypes = new LinkBuilder<DartType>(); |
| + for (Element parameter in signature.requiredParameters) { |
| + parameterTypes.addLast(parameter.computeType(compiler)); |
| + } |
| + if (signature.optionalParametersAreNamed) { |
| + var namedParameters = new LinkBuilder<SourceString>(); |
| + var namedParameterTypes = new LinkBuilder<DartType>(); |
| + for (Element parameter in signature.optionalParameters) { |
| + namedParameters.addLast(parameter.name); |
| + namedParameterTypes.addLast(parameter.computeType(compiler)); |
| + } |
| + return new FunctionType(element, |
|
karlklose
2013/01/29 13:13:29
You can share this code with l. 897 by storing the
Johnni Winther
2013/01/29 13:53:59
Done.
|
| + signature.returnType, |
| + parameterTypes.toLink(), |
| + const Link<DartType>(), // No optional parameters. |
| + namedParameters.toLink(), |
| + namedParameterTypes.toLink()); |
| + } else { |
| + var optionalParameterTypes = new LinkBuilder<DartType>(); |
| + for (Element parameter in signature.optionalParameters) { |
| + optionalParameterTypes.addLast(parameter.computeType(compiler)); |
| + } |
| + return new FunctionType(element, |
| + signature.returnType, |
| + parameterTypes.toLink(), |
| + optionalParameterTypes.toLink(), |
| + const Link<SourceString>(), // No named parameters. |
| + const Link<DartType>()); // No named parameters. |
| } |
| - return new FunctionType(signature.returnType, |
| - parameterTypes.toLink(), |
| - element); |
| } |
| void resolveMetadataAnnotation(PartialMetadataAnnotation annotation) { |