| 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; | 
|  |