Chromium Code Reviews| 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 0dd1363ba46d8a364c3d8b46da3346f74522ad2b..abe17506bc606a9e815c218f6878e5a5fe53f345 100644 |
| --- a/pkg/compiler/lib/src/resolution/signatures.dart |
| +++ b/pkg/compiler/lib/src/resolution/signatures.dart |
| @@ -94,7 +94,9 @@ class SignatureResolver extends MappingVisitor<FormalElementX> { |
| reporter.internalError(node, 'function type parameters not supported'); |
| } |
| currentDefinitions = node; |
| - FormalElementX element = definition.accept(this); |
| + FormalElementX element = definition == new NoIdentifier() |
|
Siggi Cherem (dart-lang)
2016/12/29 22:46:57
nit: this is more of a readability nit, than anyth
floitsch
2016/12/30 14:55:47
changed to NoIdentifier.singleton
done.
|
| + ? createUnnamedParameter() // This happens in function types. |
| + : definition.accept(this); |
| if (currentDefinitions.metadata != null) { |
| element.metadataInternal = |
| resolution.resolver.resolveMetadata(element, node); |
| @@ -113,7 +115,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, |
| @@ -135,13 +138,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)); |
| @@ -198,6 +202,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; |
| @@ -418,7 +431,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); |
| }); |
| @@ -433,7 +446,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<DartType> optionalParameterTypesBuilder = |
| new LinkBuilder<DartType>(); |
| for (FormalElement parameter in visitor.optionalParameters) { |