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

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: Address comments. 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..7c2b2767d54afd57006364a2a3ec9a9c5ff67807 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,13 +892,10 @@ 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,
- interfaceKeyword, null, endToken));
- }
-
- void endDefaultClause(Token defaultKeyword) {
- pushNode(makeNodeList(1, defaultKeyword, null, null));
+ pushNode(new ClassNode(name, typeParameters, null, supertypes,
+ defaultClause, interfaceKeyword, null, endToken));
}
void endClassBody(int memberCount, Token beginToken, Token endToken) {
@@ -1348,6 +1360,7 @@ class NodeListener extends ElementListener {
Token endToken) {
Statement body = popNode();
NodeList formals = popNode();
+ NodeList typeParameters = popNode(); // TODO(karlklose): don't throw away.
Node name = popNode();
if (periodBeforeName !== null) {
// A library prefix was handled in [handleQualified].

Powered by Google App Engine
This is Rietveld 408576698