| Index: pkg/compiler/lib/src/resolution/signatures.dart
|
| diff --git a/pkg/compiler/lib/src/resolution/signatures.dart b/pkg/compiler/lib/src/resolution/signatures.dart
|
| index ac7b6d847833a9eef77a2036176213907bb5d8ad..58e9177e091aa199f43d04501bd2fb865e2d9bf5 100644
|
| --- a/pkg/compiler/lib/src/resolution/signatures.dart
|
| +++ b/pkg/compiler/lib/src/resolution/signatures.dart
|
| @@ -93,7 +93,9 @@ class SignatureResolver extends MappingVisitor<FormalElementX> {
|
| reporter.internalError(node, 'function type parameters not supported');
|
| }
|
| currentDefinitions = node;
|
| - FormalElementX element = definition.accept(this);
|
| + FormalElementX element = definition == null
|
| + ? createUnnamedParameter() // This happens in function types.
|
| + : definition.accept(this);
|
| if (currentDefinitions.metadata != null) {
|
| element.metadataInternal =
|
| resolution.resolver.resolveMetadata(element, node);
|
| @@ -112,7 +114,8 @@ class SignatureResolver extends MappingVisitor<FormalElementX> {
|
|
|
| void computeParameterType(FormalElementX element,
|
| [VariableElement fieldElement]) {
|
| - void computeFunctionType(FunctionExpression functionExpression) {
|
| + // Function-type as in `foo(int bar(String x))`
|
| + void computeInlineFunctionType(FunctionExpression functionExpression) {
|
| FunctionSignature functionSignature = SignatureResolver.analyze(
|
| resolution,
|
| scope,
|
| @@ -134,13 +137,14 @@ class SignatureResolver extends MappingVisitor<FormalElementX> {
|
| assert(invariant(currentDefinitions, link.tail.isEmpty));
|
| if (link.head.asFunctionExpression() != null) {
|
| // Inline function typed parameter, like `void m(int f(String s))`.
|
| - computeFunctionType(link.head);
|
| + computeInlineFunctionType(link.head);
|
| } else if (link.head.asSend() != null &&
|
| link.head.asSend().selector.asFunctionExpression() != null) {
|
| // Inline function typed initializing formal or
|
| // parameter with default value, like `C(int this.f(String s))` or
|
| // `void m([int f(String s) = null])`.
|
| - computeFunctionType(link.head.asSend().selector.asFunctionExpression());
|
| + computeInlineFunctionType(
|
| + link.head.asSend().selector.asFunctionExpression());
|
| } else {
|
| assert(invariant(currentDefinitions,
|
| link.head.asIdentifier() != null || link.head.asSend() != null));
|
| @@ -197,6 +201,15 @@ class SignatureResolver extends MappingVisitor<FormalElementX> {
|
| return parameter;
|
| }
|
|
|
| + FormalElementX createUnnamedParameter() {
|
| + FormalElementX parameter;
|
| + assert(!createRealParameters);
|
| + parameter = new FormalElementX.unnamed(
|
| + ElementKind.PARAMETER, enclosingElement, currentDefinitions);
|
| + computeParameterType(parameter);
|
| + return parameter;
|
| + }
|
| +
|
| InitializingFormalElementX createFieldParameter(
|
| Send node, Expression initializer) {
|
| InitializingFormalElementX element;
|
| @@ -426,7 +439,7 @@ class SignatureResolver extends MappingVisitor<FormalElementX> {
|
| List<Element> orderedOptionalParameters =
|
| visitor.optionalParameters.toList();
|
| if (visitor.optionalParametersAreNamed) {
|
| - // TODO(karlklose); replace when [visitor.optinalParameters] is a [List].
|
| + // TODO(karlklose); replace when [visitor.optionalParameters] is a [List].
|
| orderedOptionalParameters.sort((Element a, Element b) {
|
| return a.name.compareTo(b.name);
|
| });
|
| @@ -441,7 +454,7 @@ class SignatureResolver extends MappingVisitor<FormalElementX> {
|
| namedParameterTypes =
|
| namedParameterTypesBuilder.toLink().toList(growable: false);
|
| } else {
|
| - // TODO(karlklose); replace when [visitor.optinalParameters] is a [List].
|
| + // TODO(karlklose); replace when [visitor.optionalParameters] is a [List].
|
| LinkBuilder<ResolutionDartType> optionalParameterTypesBuilder =
|
| new LinkBuilder<ResolutionDartType>();
|
| for (FormalElement parameter in visitor.optionalParameters) {
|
|
|