OLD | NEW |
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.analyzer.token_utils; | 5 library fasta.analyzer.token_utils; |
6 | 6 |
7 import 'package:front_end/src/fasta/scanner/error_token.dart' show ErrorToken; | 7 import 'package:front_end/src/fasta/scanner/error_token.dart' show ErrorToken; |
8 | 8 |
9 import 'package:front_end/src/fasta/scanner/keyword.dart' show Keyword; | 9 import 'package:front_end/src/fasta/scanner/keyword.dart' show Keyword; |
10 | 10 |
(...skipping 477 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
488 | 488 |
489 case IDENTIFIER_TOKEN: | 489 case IDENTIFIER_TOKEN: |
490 return makeStringToken(TokenType.IDENTIFIER); | 490 return makeStringToken(TokenType.IDENTIFIER); |
491 | 491 |
492 case INT_TOKEN: | 492 case INT_TOKEN: |
493 return makeStringToken(TokenType.INT); | 493 return makeStringToken(TokenType.INT); |
494 | 494 |
495 case KEYWORD_TOKEN: | 495 case KEYWORD_TOKEN: |
496 KeywordToken keywordToken = token; | 496 KeywordToken keywordToken = token; |
497 var syntax = keywordToken.keyword.syntax; | 497 var syntax = keywordToken.keyword.syntax; |
498 if (keywordToken.keyword.isPseudo) { | |
499 // TODO(paulberry,ahe): Fasta considers "deferred" be a "pseudo-keyword" | |
500 // (ordinary identifier which has special meaning under circumstances), | |
501 // but analyzer and the spec consider it to be a built-in identifier | |
502 // (identifier which can't be used in type names). | |
503 if (!identical(syntax, 'deferred')) { | |
504 return makeStringToken(TokenType.IDENTIFIER); | |
505 } | |
506 } | |
507 // TODO(paulberry): if the map lookup proves to be too slow, consider | 498 // TODO(paulberry): if the map lookup proves to be too slow, consider |
508 // using a switch statement, or perhaps a string of | 499 // using a switch statement, or perhaps a string of |
509 // "if (identical(syntax, "foo"))" checks. (Note that identical checks | 500 // "if (identical(syntax, "foo"))" checks. (Note that identical checks |
510 // should be safe because the Fasta scanner uses string literals for | 501 // should be safe because the Fasta scanner uses string literals for |
511 // the values of keyword.syntax.) | 502 // the values of keyword.syntax.) |
512 var keyword = | 503 var keyword = |
513 _keywordMap[syntax] ?? internalError('Unknown keyword: $syntax'); | 504 _keywordMap[syntax] ?? internalError('Unknown keyword: $syntax'); |
514 if (commentToken == null) { | 505 if (commentToken == null) { |
515 return new analyzer.KeywordToken(keyword, token.charOffset); | 506 return new analyzer.KeywordToken(keyword, token.charOffset); |
516 } else { | 507 } else { |
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
568 "super": analyzer.Keyword.SUPER, | 559 "super": analyzer.Keyword.SUPER, |
569 "switch": analyzer.Keyword.SWITCH, | 560 "switch": analyzer.Keyword.SWITCH, |
570 "this": analyzer.Keyword.THIS, | 561 "this": analyzer.Keyword.THIS, |
571 "throw": analyzer.Keyword.THROW, | 562 "throw": analyzer.Keyword.THROW, |
572 "true": analyzer.Keyword.TRUE, | 563 "true": analyzer.Keyword.TRUE, |
573 "try": analyzer.Keyword.TRY, | 564 "try": analyzer.Keyword.TRY, |
574 "var": analyzer.Keyword.VAR, | 565 "var": analyzer.Keyword.VAR, |
575 "void": analyzer.Keyword.VOID, | 566 "void": analyzer.Keyword.VOID, |
576 "while": analyzer.Keyword.WHILE, | 567 "while": analyzer.Keyword.WHILE, |
577 "with": analyzer.Keyword.WITH, | 568 "with": analyzer.Keyword.WITH, |
| 569 // |
578 "is": analyzer.Keyword.IS, | 570 "is": analyzer.Keyword.IS, |
| 571 // |
579 "abstract": analyzer.Keyword.ABSTRACT, | 572 "abstract": analyzer.Keyword.ABSTRACT, |
580 "as": analyzer.Keyword.AS, | 573 "as": analyzer.Keyword.AS, |
581 "covariant": analyzer.Keyword.COVARIANT, | 574 "covariant": analyzer.Keyword.COVARIANT, |
| 575 "deferred": analyzer.Keyword.DEFERRED, |
582 "dynamic": analyzer.Keyword.DYNAMIC, | 576 "dynamic": analyzer.Keyword.DYNAMIC, |
583 "export": analyzer.Keyword.EXPORT, | 577 "export": analyzer.Keyword.EXPORT, |
584 "external": analyzer.Keyword.EXTERNAL, | 578 "external": analyzer.Keyword.EXTERNAL, |
585 "factory": analyzer.Keyword.FACTORY, | 579 "factory": analyzer.Keyword.FACTORY, |
586 "get": analyzer.Keyword.GET, | 580 "get": analyzer.Keyword.GET, |
587 "implements": analyzer.Keyword.IMPLEMENTS, | 581 "implements": analyzer.Keyword.IMPLEMENTS, |
588 "import": analyzer.Keyword.IMPORT, | 582 "import": analyzer.Keyword.IMPORT, |
589 "library": analyzer.Keyword.LIBRARY, | 583 "library": analyzer.Keyword.LIBRARY, |
590 "operator": analyzer.Keyword.OPERATOR, | 584 "operator": analyzer.Keyword.OPERATOR, |
591 "part": analyzer.Keyword.PART, | 585 "part": analyzer.Keyword.PART, |
592 "set": analyzer.Keyword.SET, | 586 "set": analyzer.Keyword.SET, |
593 "static": analyzer.Keyword.STATIC, | 587 "static": analyzer.Keyword.STATIC, |
594 "typedef": analyzer.Keyword.TYPEDEF, | 588 "typedef": analyzer.Keyword.TYPEDEF, |
595 "deferred": analyzer.Keyword.DEFERRED, | 589 // |
| 590 "async": analyzer.Keyword.ASYNC, |
| 591 "await": analyzer.Keyword.AWAIT, |
| 592 "Function": analyzer.Keyword.FUNCTION, |
| 593 "hide": analyzer.Keyword.HIDE, |
| 594 "native": analyzer.Keyword.NATIVE, |
| 595 "of": analyzer.Keyword.OF, |
| 596 "on": analyzer.Keyword.ON, |
| 597 "patch": analyzer.Keyword.PATCH, |
| 598 "show": analyzer.Keyword.SHOW, |
| 599 "source": analyzer.Keyword.SOURCE, |
| 600 "sync": analyzer.Keyword.SYNC, |
| 601 "yield": analyzer.Keyword.YIELD, |
596 }; | 602 }; |
597 | 603 |
598 TokenType getTokenType(Token token) { | 604 TokenType getTokenType(Token token) { |
599 switch (token.kind) { | 605 switch (token.kind) { |
600 case EOF_TOKEN: | 606 case EOF_TOKEN: |
601 return TokenType.EOF; | 607 return TokenType.EOF; |
602 case DOUBLE_TOKEN: | 608 case DOUBLE_TOKEN: |
603 return TokenType.DOUBLE; | 609 return TokenType.DOUBLE; |
604 case HEXADECIMAL_TOKEN: | 610 case HEXADECIMAL_TOKEN: |
605 return TokenType.HEXADECIMAL; | 611 return TokenType.HEXADECIMAL; |
(...skipping 133 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
739 case PERIOD_PERIOD_PERIOD_TOKEN: | 745 case PERIOD_PERIOD_PERIOD_TOKEN: |
740 return TokenType.PERIOD_PERIOD_PERIOD; | 746 return TokenType.PERIOD_PERIOD_PERIOD; |
741 case GENERIC_METHOD_TYPE_LIST_TOKEN: | 747 case GENERIC_METHOD_TYPE_LIST_TOKEN: |
742 return TokenType.GENERIC_METHOD_TYPE_LIST; | 748 return TokenType.GENERIC_METHOD_TYPE_LIST; |
743 case GENERIC_METHOD_TYPE_ASSIGN_TOKEN: | 749 case GENERIC_METHOD_TYPE_ASSIGN_TOKEN: |
744 return TokenType.GENERIC_METHOD_TYPE_ASSIGN; | 750 return TokenType.GENERIC_METHOD_TYPE_ASSIGN; |
745 default: | 751 default: |
746 return internalError("Unhandled token ${token.info}"); | 752 return internalError("Unhandled token ${token.info}"); |
747 } | 753 } |
748 } | 754 } |
OLD | NEW |