Chromium Code Reviews| Index: dart/frog/leg/resolver.dart |
| diff --git a/dart/frog/leg/resolver.dart b/dart/frog/leg/resolver.dart |
| index df3f7e1206dacd038134b7d96ef80370d39ef534..d63103eeb278e3fb83dfb7757daa096752229c2e 100644 |
| --- a/dart/frog/leg/resolver.dart |
| +++ b/dart/frog/leg/resolver.dart |
| @@ -1437,6 +1437,11 @@ class ConstructorResolver extends CommonResolverVisitor<Element> { |
| Element e = visit(node.receiver); |
| if (e === null) return null; // TODO(ahe): Return erroneous element. |
| + Identifier name = node.selector.asIdentifier(); |
| + if (name === null) { |
|
karlklose
2012/03/07 12:34:39
This could fit in one line.
ahe
2012/03/07 21:56:08
Done.
|
| + internalError(node.selector, 'unexpected node'); |
| + } |
| + |
| if (e.kind === ElementKind.CLASS) { |
| ClassElement cls = e; |
| cls.resolve(compiler); |
| @@ -1445,10 +1450,6 @@ class ConstructorResolver extends CommonResolverVisitor<Element> { |
| error(node.receiver, MessageKind.CANNOT_INSTANTIATE_INTERFACE, |
| [cls.name]); |
| } |
| - Identifier name = node.selector.asIdentifier(); |
| - if (name === null) { |
| - internalError(node.selector, 'unexpected node'); |
| - } |
| SourceString constructorName = |
| Elements.constructConstructorName(cls.name, name.source); |
| FunctionElement constructor = cls.lookupConstructor(constructorName); |
| @@ -1456,8 +1457,17 @@ class ConstructorResolver extends CommonResolverVisitor<Element> { |
| error(name, MessageKind.CANNOT_FIND_CONSTRUCTOR, [name]); |
| } |
| e = constructor; |
| + } else if (e.kind === ElementKind.PREFIX) { |
| + PrefixElement prefix = e; |
| + e = prefix.library.lookupLocalMember(name.source); |
| + if (e === null) { |
| + error(name, MessageKind.CANNOT_RESOLVE, [name]); |
| + // TODO(ahe): Return erroneous element. |
| + } else if (e.kind !== ElementKind.CLASS) { |
| + error(node, MessageKind.NOT_A_TYPE, [name]); |
| + } |
| } else { |
| - internalError(node.resolve, 'unexpected element $e'); |
| + internalError(node.receiver, 'unexpected element $e'); |
| } |
| return e; |
| } |
| @@ -1468,7 +1478,7 @@ class ConstructorResolver extends CommonResolverVisitor<Element> { |
| if (e === null) { |
| error(node, MessageKind.CANNOT_RESOLVE, [name]); |
| // TODO(ahe): Return erroneous element. |
| - } else if (e.kind !== ElementKind.CLASS) { |
| + } else if (e.kind !== ElementKind.CLASS && e.kind !== ElementKind.PREFIX) { |
| error(node, MessageKind.NOT_A_TYPE, [name]); |
| } |
| return e; |