| 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..6d953ad6020c82e91ebb114cd7fb5c17b5e643f8 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;
|
| @@ -386,7 +399,7 @@ class SignatureResolver extends MappingVisitor<FormalElementX> {
|
| }
|
| switch (asyncMarker) {
|
| case AsyncMarker.SYNC:
|
| - returnType = visitor.resolveReturnType(returnNode);
|
| + returnType = visitor.resolveTypeAnnotation(returnNode);
|
| break;
|
| case AsyncMarker.SYNC_STAR:
|
| ResolutionInterfaceType iterableType =
|
| @@ -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) {
|
| @@ -469,14 +482,6 @@ class SignatureResolver extends MappingVisitor<FormalElementX> {
|
| }
|
|
|
| ResolutionDartType resolveTypeAnnotation(TypeAnnotation annotation) {
|
| - ResolutionDartType type = resolveReturnType(annotation);
|
| - if (type.isVoid) {
|
| - reporter.reportErrorMessage(annotation, MessageKind.VOID_NOT_ALLOWED);
|
| - }
|
| - return type;
|
| - }
|
| -
|
| - ResolutionDartType resolveReturnType(TypeAnnotation annotation) {
|
| if (annotation == null) return const ResolutionDynamicType();
|
| ResolutionDartType result = resolver.resolveTypeAnnotation(annotation);
|
| if (result == null) {
|
|
|