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

Side by Side Diff: pkg/compiler/lib/src/parser/node_listener.dart

Issue 2710973002: Revert "Add support for the new function-type syntax." (Closed)
Patch Set: Created 3 years, 10 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 unified diff | Download patch
OLDNEW
1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 library dart2js.parser.node_listener; 5 library dart2js.parser.node_listener;
6 6
7 import '../common.dart'; 7 import '../common.dart';
8 import '../elements/elements.dart' show CompilationUnitElement; 8 import '../elements/elements.dart' show CompilationUnitElement;
9 import 'package:front_end/src/fasta/scanner/precedence.dart' as Precedence 9 import 'package:front_end/src/fasta/scanner/precedence.dart' as Precedence
10 show INDEX_INFO; 10 show INDEX_INFO;
(...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after
119 pushNode(node); 119 pushNode(node);
120 super.endTopLevelDeclaration(token); 120 super.endTopLevelDeclaration(token);
121 } 121 }
122 122
123 @override 123 @override
124 void endCompilationUnit(int count, Token token) { 124 void endCompilationUnit(int count, Token token) {
125 pushNode(makeNodeList(count, null, null, '\n')); 125 pushNode(makeNodeList(count, null, null, '\n'));
126 } 126 }
127 127
128 @override 128 @override
129 void endFunctionTypeAlias( 129 void endFunctionTypeAlias(Token typedefKeyword, Token endToken) {
130 Token typedefKeyword, Token equals, Token endToken) { 130 NodeList formals = popNode();
131 bool isGeneralizedTypeAlias; 131 NodeList typeParameters = popNode();
132 NodeList templateParameters; 132 Identifier name = popNode();
133 TypeAnnotation returnType; 133 TypeAnnotation returnType = popNode();
134 Identifier name;
135 NodeList typeParameters;
136 NodeList formals;
137 if (equals == null) {
138 isGeneralizedTypeAlias = false;
139 formals = popNode();
140 templateParameters = popNode();
141 name = popNode();
142 returnType = popNode();
143 } else {
144 // TODO(floitsch): keep using the `FunctionTypeAnnotation' node.
145 isGeneralizedTypeAlias = true;
146 Node type = popNode();
147 if (type.asFunctionTypeAnnotation() == null) {
148 // TODO(floitsch): The parser should diagnose this problem, not
149 // this listener.
150 // However, this problem goes away, when we allow aliases for
151 // non-function types too.
152 reportFatalError(type, 'Expected a function type.');
153 }
154 FunctionTypeAnnotation functionType = type;
155 templateParameters = popNode();
156 name = popNode();
157 returnType = functionType.returnType;
158 typeParameters = functionType.typeParameters;
159 formals = functionType.formals;
160 }
161 pushNode(new Typedef( 134 pushNode(new Typedef(
162 isGeneralizedTypeAlias, 135 returnType, name, typeParameters, formals, typedefKeyword, endToken));
163 templateParameters,
164 returnType,
165 name,
166 typeParameters,
167 formals,
168 typedefKeyword,
169 endToken));
170 }
171
172 void handleNoName(Token token) {
173 pushNode(null);
174 } 136 }
175 137
176 @override 138 @override
177 void handleFunctionType(Token functionToken, Token endToken) {
178 NodeList formals = popNode();
179 NodeList typeParameters = popNode();
180 TypeAnnotation returnType = popNode();
181 pushNode(new FunctionTypeAnnotation(
182 returnType, functionToken, typeParameters, formals));
183 }
184
185 @override
186 void endNamedMixinApplication( 139 void endNamedMixinApplication(
187 Token beginToken, Token classKeyword, Token equals, 140 Token beginToken, Token classKeyword, Token equals,
188 Token implementsKeyword, Token endToken) { 141 Token implementsKeyword, Token endToken) {
189 NodeList interfaces = (implementsKeyword != null) ? popNode() : null; 142 NodeList interfaces = (implementsKeyword != null) ? popNode() : null;
190 Node mixinApplication = popNode(); 143 Node mixinApplication = popNode();
191 NodeList typeParameters = popNode(); 144 NodeList typeParameters = popNode();
192 Identifier name = popNode(); 145 Identifier name = popNode();
193 Modifiers modifiers = popNode(); 146 Modifiers modifiers = popNode();
194 pushNode(new NamedMixinApplication(name, typeParameters, modifiers, 147 pushNode(new NamedMixinApplication(name, typeParameters, modifiers,
195 mixinApplication, interfaces, beginToken, endToken)); 148 mixinApplication, interfaces, beginToken, endToken));
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after
269 @override 222 @override
270 void endConstructorReference( 223 void endConstructorReference(
271 Token start, Token periodBeforeName, Token endToken) { 224 Token start, Token periodBeforeName, Token endToken) {
272 Identifier name = null; 225 Identifier name = null;
273 if (periodBeforeName != null) { 226 if (periodBeforeName != null) {
274 name = popNode(); 227 name = popNode();
275 } 228 }
276 NodeList typeArguments = popNode(); 229 NodeList typeArguments = popNode();
277 Node classReference = popNode(); 230 Node classReference = popNode();
278 if (typeArguments != null) { 231 if (typeArguments != null) {
279 classReference = new NominalTypeAnnotation(classReference, typeArguments); 232 classReference = new TypeAnnotation(classReference, typeArguments);
280 } else { 233 } else {
281 Identifier identifier = classReference.asIdentifier(); 234 Identifier identifier = classReference.asIdentifier();
282 Send send = classReference.asSend(); 235 Send send = classReference.asSend();
283 if (identifier != null) { 236 if (identifier != null) {
284 // TODO(ahe): Should be: 237 // TODO(ahe): Should be:
285 // classReference = new Send(null, identifier); 238 // classReference = new Send(null, identifier);
286 classReference = identifier; 239 classReference = identifier;
287 } else if (send != null) { 240 } else if (send != null) {
288 classReference = send; 241 classReference = send;
289 } else { 242 } else {
(...skipping 617 matching lines...) Expand 10 before | Expand all | Expand 10 after
907 NodeList arguments = popNode(); 860 NodeList arguments = popNode();
908 if (arguments == null) { 861 if (arguments == null) {
909 // This is a constant expression. 862 // This is a constant expression.
910 Identifier name; 863 Identifier name;
911 if (periodBeforeName != null) { 864 if (periodBeforeName != null) {
912 name = popNode(); 865 name = popNode();
913 } 866 }
914 NodeList typeArguments = popNode(); 867 NodeList typeArguments = popNode();
915 Node receiver = popNode(); 868 Node receiver = popNode();
916 if (typeArguments != null) { 869 if (typeArguments != null) {
917 receiver = new NominalTypeAnnotation(receiver, typeArguments); 870 receiver = new TypeAnnotation(receiver, typeArguments);
918 recoverableError(typeArguments, 'Type arguments are not allowed here.'); 871 recoverableError(typeArguments, 'Type arguments are not allowed here.');
919 } else { 872 } else {
920 Identifier identifier = receiver.asIdentifier(); 873 Identifier identifier = receiver.asIdentifier();
921 Send send = receiver.asSend(); 874 Send send = receiver.asSend();
922 if (identifier != null) { 875 if (identifier != null) {
923 receiver = new Send(null, identifier); 876 receiver = new Send(null, identifier);
924 } else if (send == null) { 877 } else if (send == null) {
925 internalError(node: receiver); 878 internalError(node: receiver);
926 } 879 }
927 } 880 }
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after
1001 } 954 }
1002 lastErrorWasNativeFunctionBody = false; 955 lastErrorWasNativeFunctionBody = false;
1003 } 956 }
1004 957
1005 void internalError({Token token, Node node}) { 958 void internalError({Token token, Node node}) {
1006 // TODO(ahe): This should call reporter.internalError. 959 // TODO(ahe): This should call reporter.internalError.
1007 Spannable spannable = (token == null) ? node : token; 960 Spannable spannable = (token == null) ? node : token;
1008 throw new SpannableAssertionFailure(spannable, 'Internal error in parser.'); 961 throw new SpannableAssertionFailure(spannable, 'Internal error in parser.');
1009 } 962 }
1010 } 963 }
OLDNEW
« no previous file with comments | « pkg/compiler/lib/src/parser/element_listener.dart ('k') | pkg/compiler/lib/src/parser/partial_elements.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698