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

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

Issue 9616058: Implement parsing and resolving of type-variables. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Fix merge error. Created 8 years, 9 months 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
diff --git a/frog/leg/scanner/listener.dart b/frog/leg/scanner/listener.dart
index c30e564c2da92366c3c4f02139bfac290c77a47e..f0ffe0fada44ad4f366cb89d0177793ab822cbdd 100644
--- a/frog/leg/scanner/listener.dart
+++ b/frog/leg/scanner/listener.dart
@@ -541,6 +541,7 @@ class ElementListener extends Listener {
NodeList interfaces =
makeNodeList(interfacesCount, implementsKeyword, null, ",");
TypeAnnotation supertype = popNode();
+ NodeList typeParameters = popNode();
Identifier name = popNode();
ClassElement element = new PartialClassElement(
name.source, beginToken, endToken, compilationUnitElement);
@@ -549,7 +550,9 @@ class ElementListener extends Listener {
}
void endDefaultClause(Token defaultKeyword) {
- pushNode(makeNodeList(1, defaultKeyword, null, null));
+ NodeList typeParameters = popNode();
+ Node name = popNode();
+ pushNode(new TypeAnnotation(name, typeParameters));
}
void handleNoDefaultClause(Token token) {
@@ -562,12 +565,15 @@ class ElementListener extends Listener {
Node defaultClause = popNode();
NodeList supertypes =
makeNodeList(supertypeCount, extendsKeyword, null, ",");
+ NodeList typeParameters = popNode();
Identifier name = popNode();
- pushElement(new PartialClassElement(
- name.source, interfaceKeyword, endToken, compilationUnitElement));
+ pushElement(new PartialClassElement(name.source, interfaceKeyword,
+ endToken,
+ compilationUnitElement));
}
void endFunctionTypeAlias(Token typedefKeyword, Token endToken) {
+ NodeList typeVariables = popNode(); // TOOD(karlklose): do not throw away.
Identifier name = popNode();
TypeAnnotation returnType = popNode();
pushElement(new TypedefElement(name.source, compilationUnitElement));
@@ -644,6 +650,15 @@ class ElementListener extends Listener {
void endTypeVariable(Token token) {
TypeAnnotation bound = popNode();
Identifier name = popNode();
+ pushNode(new TypeVariable(name, bound));
+ }
+
+ void endTypeVariables(int count, Token beginToken, Token endToken) {
+ pushNode(makeNodeList(count, beginToken, endToken, ','));
+ }
+
+ void handleNoTypeVariables(token) {
+ pushNode(null);
}
void endTypeArguments(int count, Token beginToken, Token endToken) {
@@ -856,9 +871,9 @@ class NodeListener extends ElementListener {
NodeList interfaces =
makeNodeList(interfacesCount, implementsKeyword, null, ",");
TypeAnnotation supertype = popNode();
- // TODO(ahe): Type variables.
+ NodeList typeParameters = popNode();
Identifier name = popNode();
- pushNode(new ClassNode(name, supertype, interfaces, null,
+ pushNode(new ClassNode(name, typeParameters, supertype, interfaces, null,
beginToken, extendsKeyword, endToken));
}
@@ -877,15 +892,12 @@ class NodeListener extends ElementListener {
NodeList defaultClause = popNode();
NodeList supertypes = makeNodeList(supertypeCount, extendsKeyword,
null, ',');
+ NodeList typeParameters = popNode();
Identifier name = popNode();
- pushNode(new ClassNode(name, null, supertypes, defaultClause,
+ pushNode(new ClassNode(name, typeParameters, null, supertypes, defaultClause,
ngeoffray 2012/03/15 11:47:40 line too long
karlklose 2012/03/16 14:58:47 Done.
interfaceKeyword, null, endToken));
}
- void endDefaultClause(Token defaultKeyword) {
- pushNode(makeNodeList(1, defaultKeyword, null, null));
- }
-
void endClassBody(int memberCount, Token beginToken, Token endToken) {
pushNode(makeNodeList(memberCount, beginToken, endToken, null));
}
@@ -1348,6 +1360,7 @@ class NodeListener extends ElementListener {
Token endToken) {
Statement body = popNode();
NodeList formals = popNode();
+ NodeList typeParameters = popNode();
Node name = popNode();
if (periodBeforeName !== null) {
// A library prefix was handled in [handleQualified].

Powered by Google App Engine
This is Rietveld 408576698