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

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,16 @@
}
void endTopLevelFields(int count, Token beginToken, Token endToken) {
- canceler.cancel("Cannot handle fields", token: beginToken);
+ List<Identifier> names = <Identifier>[];
ahe 2011/12/12 14:56:57 Please use Link or LinkBuilder.
ngeoffray 2011/12/12 15:52:08 Done.
+ for (int i = 0; i < count; i++) {
+ names.add(popNode());
+ }
+ Element fields = new PartialFieldListElement(beginToken, endToken);
ahe 2011/12/12 14:56:57 FieldList -> Fields?
ngeoffray 2011/12/12 15:52:08 As discussed, maintained FieldList according to th
+
+ // Push in source order.
ahe 2011/12/12 14:56:57 Normally the order is reversed, isn't it?
ngeoffray 2011/12/12 15:52:08 Yes.
+ for (int i = count - 1; i >= 0; i--) {
+ pushElement(new PartialFieldElement(names[i].source, fields));
+ }
}
void handleIdentifier(Token token) {
@@ -1016,6 +1025,46 @@
}
}
+class PartialFieldElement extends Element {
+ final Element variables;
+
+ PartialFieldElement(SourceString name,
+ Element this.variables,
+ [Element enclosing = null])
+ : super(name, ElementKind.FIELD, enclosing);
+
+ Node parseNode(Canceler canceler, Logger logger)
+ => variables.parseNode(canceler, logger);
ahe 2011/12/12 14:56:57 I prefer using { return ... } when it doesn't fit
ngeoffray 2011/12/12 15:52:08 Done.
+
+ Type computeType(Compiler compiler, Type types)
ahe 2011/12/12 14:56:57 This method doesn't belong in this library.
ngeoffray 2011/12/12 15:52:08 Done.
+ => variables.computeType(compiler, types);
ahe 2011/12/12 14:56:57 Ditto for { return ... }.
ngeoffray 2011/12/12 15:52:08 Done.
+
+ Type get type() => variables.type;
+}
+
+class PartialFieldListElement extends Element {
karlklose 2011/12/12 15:09:48 Can you add a short comment on what this element r
ngeoffray 2011/12/12 15:52:08 Done.
+ final Token beginToken;
+ final Token endToken;
+ Node node;
karlklose 2011/12/12 15:09:48 Or perhaps adding a more precise type for the Node
ngeoffray 2011/12/12 15:52:08 Done.
+ Type type;
+
+ PartialFieldListElement(Token this.beginToken, Token this.endToken)
+ : super(null, ElementKind.VARIABLE_LIST, null);
+
+ Node parseNode(Canceler canceler, Logger logger) {
+ if (node != null) return node;
+ node = parse(canceler, logger,
+ (p) => p.parseVariablesDeclaration(beginToken));
+ return node;
+ }
+
+ Type computeType(Compiler compiler, Type types) {
ahe 2011/12/12 14:56:57 This method doesn't belong in this library.
ngeoffray 2011/12/12 15:52:08 Done.
+ if (type != null) return type;
+ type = getType(parseNode(compiler, compiler).type, compiler, types);
+ return type;
+ }
+}
+
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