Index: pkg/compiler/lib/src/parser/element_listener.dart |
diff --git a/pkg/compiler/lib/src/parser/element_listener.dart b/pkg/compiler/lib/src/parser/element_listener.dart |
index 61975e9749fc0a21accbbb259af13979864c7f63..947fb210509798dfcd6d7e3d3c74620f31d41d34 100644 |
--- a/pkg/compiler/lib/src/parser/element_listener.dart |
+++ b/pkg/compiler/lib/src/parser/element_listener.dart |
@@ -286,10 +286,17 @@ class ElementListener extends Listener { |
} |
@override |
- void endFunctionTypeAlias(Token typedefKeyword, Token endToken) { |
- popNode(); // TODO(karlklose): do not throw away typeVariables. |
- Identifier name = popNode(); |
- popNode(); // returnType |
+ void endTypedef(Token typedefKeyword, Token equals, Token endToken) { |
+ Identifier name; |
+ if (equals == null) { |
+ popNode(); // TODO(karlklose): do not throw away typeVariables. |
+ name = popNode(); |
+ popNode(); // returnType |
+ } else { |
+ popNode(); // Function type. |
+ popNode(); // TODO(karlklose): do not throw away typeVariables. |
+ name = popNode(); |
+ } |
pushElement(new PartialTypedefElement( |
name.source, compilationUnitElement, typedefKeyword, endToken)); |
rejectBuiltInIdentifier(name); |
@@ -322,13 +329,13 @@ class ElementListener extends Listener { |
@override |
void endMixinApplication() { |
NodeList mixins = popNode(); |
- TypeAnnotation superclass = popNode(); |
+ NominalTypeAnnotation superclass = popNode(); |
pushNode(new MixinApplication(superclass, mixins)); |
} |
@override |
void handleVoidKeyword(Token token) { |
- pushNode(new TypeAnnotation(new Identifier(token), null)); |
+ pushNode(new NominalTypeAnnotation(new Identifier(token), null)); |
} |
@override |
@@ -401,7 +408,7 @@ class ElementListener extends Listener { |
@override |
void endTypeVariable(Token token, Token extendsOrSuper) { |
- TypeAnnotation bound = popNode(); |
+ NominalTypeAnnotation bound = popNode(); |
Identifier name = popNode(); |
pushNode(new TypeVariable(name, extendsOrSuper, bound)); |
rejectBuiltInIdentifier(name); |
@@ -431,7 +438,17 @@ class ElementListener extends Listener { |
void endType(Token beginToken, Token endToken) { |
NodeList typeArguments = popNode(); |
Expression typeName = popNode(); |
- pushNode(new TypeAnnotation(typeName, typeArguments)); |
+ pushNode(new NominalTypeAnnotation(typeName, typeArguments)); |
+ } |
+ |
+ void handleNoName(Token token) { |
+ pushNode(null); |
+ } |
+ |
+ void endFunctionType(Token functionToken, Token endToken) { |
+ popNode(); // Type parameters. |
+ popNode(); // Return type. |
+ pushNode(null); |
} |
@override |
@@ -630,6 +647,10 @@ class ElementListener extends Listener { |
errorCode = MessageKind.BAD_INPUT_CHARACTER; |
break; |
+ case ErrorKind.InvalidInlineFunctionType: |
+ errorCode = MessageKind.INVALID_INLINE_FUNCTION_TYPE; |
+ break; |
+ |
case ErrorKind.InvalidSyncModifier: |
errorCode = MessageKind.INVALID_SYNC_MODIFIER; |
break; |