Chromium Code Reviews| Index: frog/leg/scanner/listener.dart |
| =================================================================== |
| --- frog/leg/scanner/listener.dart (revision 2339) |
| +++ frog/leg/scanner/listener.dart (working copy) |
| @@ -462,7 +462,15 @@ |
| } |
| void endTopLevelFields(int count, Token beginToken, Token endToken) { |
| - canceler.cancel("Cannot handle fields", token: beginToken); |
| + Link<Identifier> names = const EmptyLink<Identifier>(); |
| + for (int i = 0; i < count; i++) { |
| + names = names.prepend(popNode()); |
| + } |
| + Element fields = new PartialFieldListElement(beginToken, endToken); |
| + |
|
karlklose
2011/12/12 17:02:09
Is this empty line on purpose?
ngeoffray
2011/12/12 17:18:04
No. Done.
|
| + for (; !names.isEmpty(); names = names.tail) { |
| + pushElement(new PartialFieldElement(names.head.source, fields)); |
| + } |
| } |
| void handleIdentifier(Token token) { |
| @@ -1016,6 +1024,34 @@ |
| } |
| } |
| +class PartialFieldElement extends VariableElement { |
|
ahe
2011/12/12 18:54:10
This seems unrelated to the parser.
ngeoffray
2011/12/13 08:00:15
Good point. Code removed in http://codereview.chro
|
| + PartialFieldElement(SourceString name, |
| + Element variables, |
| + [Element enclosing = null]) |
| + : super(name, variables, ElementKind.FIELD, enclosing); |
| + |
| + Node parseNode(Canceler canceler, Logger logger) { |
| + return variables.parseNode(canceler, logger); |
| + } |
| +} |
| + |
| +class PartialFieldListElement extends VariableListElement { |
| + final Token beginToken; |
| + final Token endToken; |
| + |
| + PartialFieldListElement(Token this.beginToken, |
| + Token this.endToken, |
| + [Element enclosing = null]) |
| + : super(ElementKind.VARIABLE_LIST, enclosing); |
| + |
| + Node parseNode(Canceler canceler, Logger logger) { |
| + if (node != null) return node; |
| + node = parse(canceler, logger, |
| + (p) => p.parseVariablesDeclaration(beginToken)); |
| + return node; |
| + } |
| +} |
| + |
| Node parse(Canceler canceler, Logger logger, doParse(Parser parser)) { |
| NodeListener listener = new NodeListener(canceler, logger); |
| doParse(new Parser(listener)); |