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

Side by Side Diff: pkg/front_end/lib/src/fasta/source/outline_builder.dart

Issue 2876813002: Implement generalized function types. (Closed)
Patch Set: Fixes for analyzer and dart2js. Created 3 years, 7 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) 2016, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2016, 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 fasta.outline_builder; 5 library fasta.outline_builder;
6 6
7 import 'package:kernel/ast.dart' show AsyncMarker, ProcedureKind; 7 import 'package:kernel/ast.dart' show AsyncMarker, ProcedureKind;
8 8
9 import '../fasta_codes.dart' show FastaMessage, codeExpectedBlockToSkip; 9 import '../fasta_codes.dart' show FastaMessage, codeExpectedBlockToSkip;
10 10
11 import '../parser/parser.dart' show FormalParameterType, optional; 11 import '../parser/parser.dart' show FormalParameterType, MemberKind, optional;
12 12
13 import '../parser/identifier_context.dart' show IdentifierContext; 13 import '../parser/identifier_context.dart' show IdentifierContext;
14 14
15 import '../scanner/token.dart' show Token; 15 import '../scanner/token.dart' show Token;
16 16
17 import '../util/link.dart' show Link; 17 import '../util/link.dart' show Link;
18 18
19 import '../combinator.dart' show Combinator; 19 import '../combinator.dart' show Combinator;
20 20
21 import '../errors.dart' show internalError; 21 import '../errors.dart' show internalError;
(...skipping 453 matching lines...) Expand 10 before | Expand all | Expand 10 after
475 push(popList(count) ?? NullValue.TypeVariables); 475 push(popList(count) ?? NullValue.TypeVariables);
476 } 476 }
477 477
478 @override 478 @override
479 void handleVoidKeyword(Token token) { 479 void handleVoidKeyword(Token token) {
480 debugEvent("VoidKeyword"); 480 debugEvent("VoidKeyword");
481 push(library.addVoidType(token.charOffset)); 481 push(library.addVoidType(token.charOffset));
482 } 482 }
483 483
484 @override 484 @override
485 void endFormalParameter(Token covariantKeyword, Token thisKeyword, 485 void endFormalParameter(Token thisKeyword, Token nameToken,
486 Token nameToken, FormalParameterType kind) { 486 FormalParameterType kind, MemberKind memberKind) {
487 debugEvent("FormalParameter"); 487 debugEvent("FormalParameter");
488 int charOffset = pop(); 488 int charOffset = pop();
489 String name = pop(); 489 String name = pop();
490 TypeBuilder type = pop(); 490 TypeBuilder type = pop();
491 int modifiers = Modifier.validate(pop()); 491 int modifiers = Modifier.validate(pop());
492 List<MetadataBuilder> metadata = pop(); 492 List<MetadataBuilder> metadata = pop();
493 push(library.addFormalParameter( 493 push(library.addFormalParameter(
494 metadata, modifiers, type, name, thisKeyword != null, charOffset)); 494 metadata, modifiers, type, name, thisKeyword != null, charOffset));
495 } 495 }
496 496
497 @override 497 @override
498 void handleValuedFormalParameter(Token equals, Token token) { 498 void handleValuedFormalParameter(Token equals, Token token) {
499 debugEvent("ValuedFormalParameter"); 499 debugEvent("ValuedFormalParameter");
500 // Ignored for now. 500 // Ignored for now.
501 } 501 }
502 502
503 @override 503 @override
504 void handleFormalParameterWithoutValue(Token token) { 504 void handleFormalParameterWithoutValue(Token token) {
505 debugEvent("FormalParameterWithoutValue"); 505 debugEvent("FormalParameterWithoutValue");
506 // Ignored for now. 506 // Ignored for now.
507 } 507 }
508 508
509 @override 509 @override
510 void endFunctionTypedFormalParameter( 510 void endFunctionTypedFormalParameter(
511 Token covariantKeyword, Token thisKeyword, FormalParameterType kind) { 511 Token thisKeyword, FormalParameterType kind) {
512 debugEvent("FunctionTypedFormalParameter"); 512 debugEvent("FunctionTypedFormalParameter");
513 pop(); // Function type parameters. 513 pop(); // Function type parameters.
514 pop(); // Formals offset 514 pop(); // Formals offset
515 pop(); // Type variables. 515 pop(); // Type variables.
516 int charOffset = pop(); 516 int charOffset = pop();
517 String name = pop(); 517 String name = pop();
518 pop(); // Return type. 518 pop(); // Return type.
519 push(NullValue.Type); 519 push(NullValue.Type);
520 push(name); 520 push(name);
521 push(charOffset); 521 push(charOffset);
(...skipping 11 matching lines...) Expand all
533 // case, however, then [beginOptionalFormalParameters] wouldn't always be 533 // case, however, then [beginOptionalFormalParameters] wouldn't always be
534 // matched by this method. 534 // matched by this method.
535 List parameters = popList(count) ?? []; 535 List parameters = popList(count) ?? [];
536 for (FormalParameterBuilder parameter in parameters) { 536 for (FormalParameterBuilder parameter in parameters) {
537 parameter.kind = kind; 537 parameter.kind = kind;
538 } 538 }
539 push(parameters); 539 push(parameters);
540 } 540 }
541 541
542 @override 542 @override
543 void endFormalParameters(int count, Token beginToken, Token endToken) { 543 void endFormalParameters(
544 int count, Token beginToken, Token endToken, MemberKind kind) {
544 debugEvent("FormalParameters"); 545 debugEvent("FormalParameters");
545 List formals = popList(count); 546 List formals = popList(count);
546 if (formals != null && formals.isNotEmpty) { 547 if (formals != null && formals.isNotEmpty) {
547 var last = formals.last; 548 var last = formals.last;
548 if (last is List) { 549 if (last is List) {
549 // TODO(sigmund): change `List newList` back to `var` (this is a 550 // TODO(sigmund): change `List newList` back to `var` (this is a
550 // workaround for issue #28651). Eventually, make optional 551 // workaround for issue #28651). Eventually, make optional
551 // formals a separate stack entry (#28673). 552 // formals a separate stack entry (#28673).
552 List newList = 553 List newList =
553 new List<FormalParameterBuilder>(formals.length - 1 + last.length); 554 new List<FormalParameterBuilder>(formals.length - 1 + last.length);
(...skipping 11 matching lines...) Expand all
565 internalError(formals); 566 internalError(formals);
566 } 567 }
567 } 568 }
568 formals = new List<FormalParameterBuilder>.from(formals); 569 formals = new List<FormalParameterBuilder>.from(formals);
569 } 570 }
570 push(beginToken.charOffset); 571 push(beginToken.charOffset);
571 push(formals ?? NullValue.FormalParameters); 572 push(formals ?? NullValue.FormalParameters);
572 } 573 }
573 574
574 @override 575 @override
575 void handleNoFormalParameters(Token token) { 576 void handleNoFormalParameters(Token token, MemberKind kind) {
576 push(token.charOffset); 577 push(token.charOffset);
577 super.handleNoFormalParameters(token); 578 super.handleNoFormalParameters(token, kind);
578 } 579 }
579 580
580 @override 581 @override
581 void endEnum(Token enumKeyword, Token endBrace, int count) { 582 void endEnum(Token enumKeyword, Token endBrace, int count) {
582 List constantNamesAndOffsets = popList(count * 2); 583 List constantNamesAndOffsets = popList(count * 2);
583 int charOffset = pop(); 584 int charOffset = pop();
584 String name = pop(); 585 String name = pop();
585 List<MetadataBuilder> metadata = pop(); 586 List<MetadataBuilder> metadata = pop();
586 library.addEnum(metadata, name, constantNamesAndOffsets, charOffset, 587 library.addEnum(metadata, name, constantNamesAndOffsets, charOffset,
587 endBrace.charOffset); 588 endBrace.charOffset);
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
650 debugEvent("endTopLevelFields"); 651 debugEvent("endTopLevelFields");
651 List namesOffsetsAndInitializers = popList(count * 4); 652 List namesOffsetsAndInitializers = popList(count * 4);
652 TypeBuilder type = pop(); 653 TypeBuilder type = pop();
653 int modifiers = Modifier.validate(pop()); 654 int modifiers = Modifier.validate(pop());
654 List<MetadataBuilder> metadata = pop(); 655 List<MetadataBuilder> metadata = pop();
655 library.addFields(metadata, modifiers, type, namesOffsetsAndInitializers); 656 library.addFields(metadata, modifiers, type, namesOffsetsAndInitializers);
656 checkEmpty(beginToken.charOffset); 657 checkEmpty(beginToken.charOffset);
657 } 658 }
658 659
659 @override 660 @override
660 void endFields( 661 void endFields(int count, Token beginToken, Token endToken) {
661 int count, Token covariantToken, Token beginToken, Token endToken) {
662 debugEvent("Fields"); 662 debugEvent("Fields");
663 List namesOffsetsAndInitializers = popList(count * 4); 663 List namesOffsetsAndInitializers = popList(count * 4);
664 TypeBuilder type = pop(); 664 TypeBuilder type = pop();
665 int modifiers = Modifier.validate(pop()); 665 int modifiers = Modifier.validate(pop());
666 List<MetadataBuilder> metadata = pop(); 666 List<MetadataBuilder> metadata = pop();
667 library.addFields(metadata, modifiers, type, namesOffsetsAndInitializers); 667 library.addFields(metadata, modifiers, type, namesOffsetsAndInitializers);
668 } 668 }
669 669
670 @override 670 @override
671 void endTypeVariable(Token token, Token extendsOrSuper) { 671 void endTypeVariable(Token token, Token extendsOrSuper) {
(...skipping 145 matching lines...) Expand 10 before | Expand all | Expand 10 after
817 Link<Token> handleMemberName(Link<Token> identifiers) { 817 Link<Token> handleMemberName(Link<Token> identifiers) {
818 if (!isDartLibrary || identifiers.isEmpty) return identifiers; 818 if (!isDartLibrary || identifiers.isEmpty) return identifiers;
819 return removeNativeClause(identifiers); 819 return removeNativeClause(identifiers);
820 } 820 }
821 821
822 @override 822 @override
823 void debugEvent(String name) { 823 void debugEvent(String name) {
824 // printEvent(name); 824 // printEvent(name);
825 } 825 }
826 } 826 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698