Chromium Code Reviews| Index: lib/compiler/implementation/resolver.dart |
| diff --git a/lib/compiler/implementation/resolver.dart b/lib/compiler/implementation/resolver.dart |
| index 284387ffcc078d670f8a98e353c2c67fb0dd3c89..51b51a14cbdb7cb29489fd500cf47a77f8a608b3 100644 |
| --- a/lib/compiler/implementation/resolver.dart |
| +++ b/lib/compiler/implementation/resolver.dart |
| @@ -139,7 +139,7 @@ class ResolverTask extends CompilerTask { |
| } else if (tree.initializers != null) { |
| error(tree, MessageKind.FUNCTION_WITH_INITIALIZER); |
| } |
| - visitor.visit(tree.body); |
| + visitBody(visitor, tree.body); |
| // Resolve the type annotations encountered in the method. |
| while (!toResolve.isEmpty()) { |
| @@ -153,6 +153,10 @@ class ResolverTask extends CompilerTask { |
| }); |
| } |
| + void visitBody(ResolverVisitor visitor, Statement body) { |
| + visitor.visit(body); |
| + } |
| + |
| void resolveConstructorImplementation(FunctionElement constructor, |
| FunctionExpression node) { |
| if (constructor.defaultImplementation !== constructor) return; |
| @@ -1947,11 +1951,22 @@ class SignatureResolver extends CommonResolverVisitor<Element> { |
| } else if (enclosingElement.kind !== ElementKind.GENERATIVE_CONSTRUCTOR) { |
| error(node, MessageKind.FIELD_PARAMETER_NOT_ALLOWED, []); |
| } else { |
| - if (node.selector.asIdentifier() == null) { |
| - cancel(node, |
| - 'internal error: unimplemented receiver on parameter send'); |
| + SourceString name; |
|
kasperl
2012/07/06 12:40:41
Would it make sense to factor this code (the compu
Johnni Winther
2012/07/09 14:57:18
For clarity only. I don't think the computation is
|
| + var identifier = node.selector.asIdentifier(); |
| + if (identifier !== null) { |
| + // Normal parameter: [:Type name:]. |
| + name = identifier.source; |
| + } else { |
| + // Function type parameter: [:void name(Type arg):]. |
| + var functionExpression = node.selector.asFunctionExpression(); |
| + if (functionExpression !== null && |
| + functionExpression.name.asIdentifier() !== null) { |
| + name = functionExpression.name.asIdentifier().source; |
| + } else { |
| + cancel(node, |
| + 'internal error: unimplemented receiver on parameter send'); |
| + } |
| } |
| - SourceString name = node.selector.asIdentifier().source; |
| Element fieldElement = currentClass.lookupLocalMember(name); |
| if (fieldElement === null || fieldElement.kind !== ElementKind.FIELD) { |
| error(node, MessageKind.NOT_A_FIELD, [name]); |
| @@ -1960,7 +1975,7 @@ class SignatureResolver extends CommonResolverVisitor<Element> { |
| } |
| Element variables = new VariableListElement.node(currentDefinitions, |
| ElementKind.VARIABLE_LIST, enclosingElement); |
| - element = new FieldParameterElement(node.selector.asIdentifier().source, |
| + element = new FieldParameterElement(name, |
| fieldElement, variables, enclosingElement, node); |
| } |
| return element; |