OLD | NEW |
1 // Copyright (c) 2017, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2017, 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 import 'package:front_end/src/fasta/errors.dart'; | 5 import 'package:front_end/src/fasta/errors.dart'; |
6 import 'package:front_end/src/fasta/parser/identifier_context.dart'; | 6 import 'package:front_end/src/fasta/parser/identifier_context.dart'; |
7 import 'package:front_end/src/fasta/parser/parser.dart'; | 7 import 'package:front_end/src/fasta/parser/parser.dart'; |
8 import 'package:front_end/src/fasta/scanner/token.dart'; | 8 import 'package:front_end/src/fasta/scanner/token.dart'; |
9 import 'package:front_end/src/fasta/source/stack_listener.dart'; | 9 import 'package:front_end/src/fasta/source/stack_listener.dart'; |
10 | 10 |
(...skipping 171 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
182 } | 182 } |
183 | 183 |
184 void endClassDeclaration( | 184 void endClassDeclaration( |
185 int interfacesCount, | 185 int interfacesCount, |
186 Token beginToken, | 186 Token beginToken, |
187 Token classKeyword, | 187 Token classKeyword, |
188 Token extendsKeyword, | 188 Token extendsKeyword, |
189 Token implementsKeyword, | 189 Token implementsKeyword, |
190 Token endToken) { | 190 Token endToken) { |
191 debugEvent("ClassDeclaration"); | 191 debugEvent("ClassDeclaration"); |
192 // ignore: strong_mode_down_cast_composite | |
193 List<ClassMember> members = pop(); | 192 List<ClassMember> members = pop(); |
194 TypeName superclass = pop(); | 193 TypeName superclass = pop(); |
195 pop(); // Type variables | 194 pop(); // Type variables |
196 String name = pop(); | 195 String name = pop(); |
197 // ignore: strong_mode_down_cast_composite | |
198 List<Annotation> metadata = pop(); | 196 List<Annotation> metadata = pop(); |
199 Comment comment = pop(); | 197 Comment comment = pop(); |
200 compilationUnit.declarations.add( | 198 compilationUnit.declarations.add( |
201 new ClassDeclaration(comment, metadata, name, superclass, members)); | 199 new ClassDeclaration(comment, metadata, name, superclass, members)); |
202 } | 200 } |
203 | 201 |
204 @override | 202 @override |
205 void endCombinators(int count) { | 203 void endCombinators(int count) { |
206 debugEvent("Combinators"); | 204 debugEvent("Combinators"); |
207 } | 205 } |
(...skipping 11 matching lines...) Expand all Loading... |
219 Token start, Token periodBeforeName, Token endToken) { | 217 Token start, Token periodBeforeName, Token endToken) { |
220 debugEvent("ConstructorReference"); | 218 debugEvent("ConstructorReference"); |
221 String constructorName = popIfNotNull(periodBeforeName); | 219 String constructorName = popIfNotNull(periodBeforeName); |
222 pop(); // Type arguments | 220 pop(); // Type arguments |
223 String name = pop(); | 221 String name = pop(); |
224 push(new ConstructorReference(name, constructorName)); | 222 push(new ConstructorReference(name, constructorName)); |
225 } | 223 } |
226 | 224 |
227 void endEnum(Token enumKeyword, Token endBrace, int count) { | 225 void endEnum(Token enumKeyword, Token endBrace, int count) { |
228 debugEvent("Enum"); | 226 debugEvent("Enum"); |
229 // ignore: strong_mode_down_cast_composite | |
230 List<EnumConstantDeclaration> constants = popList(count); | 227 List<EnumConstantDeclaration> constants = popList(count); |
231 String name = pop(); | 228 String name = pop(); |
232 // ignore: strong_mode_down_cast_composite | |
233 List<Annotation> metadata = pop(); | 229 List<Annotation> metadata = pop(); |
234 Comment comment = pop(); | 230 Comment comment = pop(); |
235 compilationUnit.declarations | 231 compilationUnit.declarations |
236 .add(new EnumDeclaration(comment, metadata, name, constants)); | 232 .add(new EnumDeclaration(comment, metadata, name, constants)); |
237 } | 233 } |
238 | 234 |
239 @override | 235 @override |
240 void endFactoryMethod( | 236 void endFactoryMethod( |
241 Token beginToken, Token factoryKeyword, Token endToken) { | 237 Token beginToken, Token factoryKeyword, Token endToken) { |
242 debugEvent("FactoryMethod"); | 238 debugEvent("FactoryMethod"); |
243 pop(); // Body | 239 pop(); // Body |
244 ConstructorReference name = pop(); | 240 ConstructorReference name = pop(); |
245 // ignore: strong_mode_down_cast_composite | |
246 List<Annotation> metadata = pop(); | 241 List<Annotation> metadata = pop(); |
247 Comment comment = pop(); | 242 Comment comment = pop(); |
248 push(new ConstructorDeclaration(comment, metadata, name)); | 243 push(new ConstructorDeclaration(comment, metadata, name)); |
249 } | 244 } |
250 | 245 |
251 @override | 246 @override |
252 void endFieldInitializer(Token assignment) { | 247 void endFieldInitializer(Token assignment) { |
253 debugEvent("FieldInitializer"); | 248 debugEvent("FieldInitializer"); |
254 pop(); // Expression | 249 pop(); // Expression |
255 } | 250 } |
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
302 | 297 |
303 @override | 298 @override |
304 void endMember() { | 299 void endMember() { |
305 debugEvent("Member"); | 300 debugEvent("Member"); |
306 } | 301 } |
307 | 302 |
308 @override | 303 @override |
309 void endMetadata(Token beginToken, Token periodBeforeName, Token endToken) { | 304 void endMetadata(Token beginToken, Token periodBeforeName, Token endToken) { |
310 debugEvent("Metadata"); | 305 debugEvent("Metadata"); |
311 inMetadata = false; | 306 inMetadata = false; |
312 // ignore: strong_mode_down_cast_composite | |
313 List<Expression> arguments = pop(); | 307 List<Expression> arguments = pop(); |
314 String constructorName = popIfNotNull(periodBeforeName); | 308 String constructorName = popIfNotNull(periodBeforeName); |
315 pop(); // Type arguments | 309 pop(); // Type arguments |
316 String name = pop(); | 310 String name = pop(); |
317 push(new Annotation(name, constructorName, arguments)); | 311 push(new Annotation(name, constructorName, arguments)); |
318 } | 312 } |
319 | 313 |
320 @override | 314 @override |
321 void endMetadataStar(int count, bool forParameter) { | 315 void endMetadataStar(int count, bool forParameter) { |
322 debugEvent("MetadataStar"); | 316 debugEvent("MetadataStar"); |
323 push(popList(count) ?? NullValue.Metadata); | 317 push(popList(count) ?? NullValue.Metadata); |
324 } | 318 } |
325 | 319 |
326 void endMethod(Token getOrSet, Token beginToken, Token endToken) { | 320 void endMethod(Token getOrSet, Token beginToken, Token endToken) { |
327 debugEvent("Method"); | 321 debugEvent("Method"); |
328 pop(); // Body | 322 pop(); // Body |
329 pop(); // Initializers | 323 pop(); // Initializers |
330 pop(); // Formal parameters | 324 pop(); // Formal parameters |
331 pop(); // Type variables | 325 pop(); // Type variables |
332 String name = pop(); | 326 String name = pop(); |
333 TypeName returnType = pop(); | 327 TypeName returnType = pop(); |
334 // ignore: strong_mode_down_cast_composite | |
335 List<Annotation> metadata = pop(); | 328 List<Annotation> metadata = pop(); |
336 Comment comment = pop(); | 329 Comment comment = pop(); |
337 push(new MethodDeclaration( | 330 push(new MethodDeclaration( |
338 comment, metadata, getOrSet?.lexeme == 'get', name, returnType)); | 331 comment, metadata, getOrSet?.lexeme == 'get', name, returnType)); |
339 } | 332 } |
340 | 333 |
341 @override | 334 @override |
342 void endSend(Token beginToken, Token endToken) { | 335 void endSend(Token beginToken, Token endToken) { |
343 debugEvent("Send"); | 336 debugEvent("Send"); |
344 // ignore: strong_mode_down_cast_composite | |
345 pop(); // Arguments | 337 pop(); // Arguments |
346 pop(); // Type arguments | 338 pop(); // Type arguments |
347 pop(); // Receiver | 339 pop(); // Receiver |
348 push(new UnknownExpression()); | 340 push(new UnknownExpression()); |
349 } | 341 } |
350 | 342 |
351 @override | 343 @override |
352 void endShow(Token showKeyword) { | 344 void endShow(Token showKeyword) { |
353 debugEvent("Show"); | 345 debugEvent("Show"); |
354 pop(); // Shown names | 346 pop(); // Shown names |
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
428 void handleQualified(Token period) { | 420 void handleQualified(Token period) { |
429 debugEvent("Qualified"); | 421 debugEvent("Qualified"); |
430 String suffix = pop(); | 422 String suffix = pop(); |
431 String prefix = pop(); | 423 String prefix = pop(); |
432 push('$prefix.$suffix'); | 424 push('$prefix.$suffix'); |
433 } | 425 } |
434 | 426 |
435 @override | 427 @override |
436 void handleType(Token beginToken, Token endToken) { | 428 void handleType(Token beginToken, Token endToken) { |
437 debugEvent("Type"); | 429 debugEvent("Type"); |
438 // ignore: strong_mode_down_cast_composite | |
439 List<TypeName> typeArguments = pop(); | 430 List<TypeName> typeArguments = pop(); |
440 String name = pop(); | 431 String name = pop(); |
441 push(new TypeName(name, typeArguments)); | 432 push(new TypeName(name, typeArguments)); |
442 } | 433 } |
443 } | 434 } |
444 | 435 |
445 /// Parser intended for use with [MiniAstBuilder]. | 436 /// Parser intended for use with [MiniAstBuilder]. |
446 class MiniAstParser extends Parser { | 437 class MiniAstParser extends Parser { |
447 MiniAstParser(MiniAstBuilder listener) : super(listener); | 438 MiniAstParser(MiniAstBuilder listener) : super(listener); |
448 | 439 |
(...skipping 23 matching lines...) Expand all Loading... |
472 final String name; | 463 final String name; |
473 | 464 |
474 final List<TypeName> typeArguments; | 465 final List<TypeName> typeArguments; |
475 | 466 |
476 TypeName(this.name, this.typeArguments); | 467 TypeName(this.name, this.typeArguments); |
477 } | 468 } |
478 | 469 |
479 /// "Mini AST" representation of an expression which summary code generation | 470 /// "Mini AST" representation of an expression which summary code generation |
480 /// need not be concerned about. | 471 /// need not be concerned about. |
481 class UnknownExpression extends Expression {} | 472 class UnknownExpression extends Expression {} |
OLD | NEW |