Index: pkg/compiler/lib/src/parser/node_listener.dart |
diff --git a/pkg/compiler/lib/src/parser/node_listener.dart b/pkg/compiler/lib/src/parser/node_listener.dart |
index 4dc325cef5becfcb281cae7f5dc8aaa55653dc84..92aba071f35f88ec5319edbb7150ba6684fc0d8a 100644 |
--- a/pkg/compiler/lib/src/parser/node_listener.dart |
+++ b/pkg/compiler/lib/src/parser/node_listener.dart |
@@ -120,10 +120,31 @@ class NodeListener extends ElementListener { |
NodeList typeParameters = popNode(); |
Identifier name = popNode(); |
TypeAnnotation returnType = popNode(); |
- pushNode(new Typedef( |
+ bool isNewSyntax = false; |
+ pushNode(new Typedef(isNewSyntax, |
returnType, name, typeParameters, formals, typedefKeyword, endToken)); |
} |
+ void endNewFunctionTypeAlias(Token typedefKeyword, Token endToken) { |
+ NewFunctionType type = popNode(); |
+ NodeList typeParameters = popNode(); |
+ Identifier name = popNode(); |
+ // TODO(floitsch): keep using the `FunctionType' node. |
+ // TODO(floitsch): keep track of generic function arguments. At the |
+ // moment they are replaced by the typedef arguments. |
+ bool isNewSyntax = true; |
+ pushNode(new Typedef(isNewSyntax, |
+ type.returnType, name, typeParameters, type.formals, |
+ typedefKeyword, endToken)); |
+ } |
+ |
+ void endFunctionType(Token beginToken, Token endToken) { |
+ NodeList formals = popNode(); |
+ NodeList typeParameters = popNode(); |
+ TypeAnnotation returnType = popNode(); |
+ pushNode(new NewFunctionType(returnType, typeParameters, formals)); |
+ } |
+ |
void endNamedMixinApplication( |
Token classKeyword, Token implementsKeyword, Token endToken) { |
NodeList interfaces = (implementsKeyword != null) ? popNode() : null; |