Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(811)

Unified Diff: frog/leg/scanner/listener.dart

Issue 8924001: First implementation of top-level fields without initializers. (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: '' Created 9 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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));

Powered by Google App Engine
This is Rietveld 408576698