Chromium Code Reviews| Index: dart/lib/compiler/implementation/scanner/listener.dart |
| =================================================================== |
| --- dart/lib/compiler/implementation/scanner/listener.dart (revision 8049) |
| +++ dart/lib/compiler/implementation/scanner/listener.dart (working copy) |
| @@ -601,8 +601,8 @@ |
| NodeList typeVariables = popNode(); // TOOD(karlklose): do not throw away. |
| Identifier name = popNode(); |
| TypeAnnotation returnType = popNode(); |
| - pushElement(new TypedefElement(name.source, compilationUnitElement, |
| - typedefKeyword)); |
| + pushElement(new PartialTypedefElement(name.source, compilationUnitElement, |
| + typedefKeyword)); |
| } |
| void handleVoidKeyword(Token token) { |
| @@ -904,7 +904,7 @@ |
| void endFunctionTypeAlias(Token typedefKeyword, Token endToken) { |
| NodeList formals = popNode(); |
| - NodeList typeParameters = null; // TODO(ahe): Don't discard these. |
| + NodeList typeParameters = popNode(); |
| Identifier name = popNode(); |
| TypeAnnotation returnType = popNode(); |
| pushNode(new Typedef(returnType, name, typeParameters, formals, |
| @@ -1510,6 +1510,25 @@ |
| Token position() => beginToken; // findMyName doesn't work. I'm nameless. |
| } |
| +class PartialTypedefElement extends TypedefElement { |
| + final Token token; |
| + |
| + PartialTypedefElement(SourceString name, Element enclosing, this.token) |
| + : super(name, enclosing); |
| + |
| + Node parseNode(Compiler compiler) { |
|
ahe
2012/05/29 15:43:49
Try to use the parse method as the two other Parti
ngeoffray
2012/05/29 15:51:42
Done.
|
| + if (cachedNode !== null) return cachedNode; |
| + NodeListener listener = new NodeListener(compiler, enclosingElement); |
| + Parser parser = new Parser(listener); |
| + Token token = parser.parseTopLevelDeclaration(token); |
| + cachedNode = listener.popNode(); |
| + assert(listener.nodes.isEmpty()); |
| + return cachedNode; |
| + } |
| + |
| + position() => findMyName(token); |
| +} |
| + |
| Node parse(DiagnosticListener diagnosticListener, |
| CompilationUnitElement element, |
| doParse(Parser parser)) { |