| OLD | NEW |
| 1 // This code was auto-generated, is not intended to be edited, and is subject to | 1 // This code was auto-generated, is not intended to be edited, and is subject to |
| 2 // significant change. Please see the README file for more information. | 2 // significant change. Please see the README file for more information. |
| 3 library engine.scanner; | 3 library engine.scanner; |
| 4 import 'dart:collection'; | 4 import 'dart:collection'; |
| 5 import 'java_core.dart'; | 5 import 'java_core.dart'; |
| 6 import 'java_engine.dart'; | 6 import 'java_engine.dart'; |
| 7 import 'source.dart'; | 7 import 'source.dart'; |
| 8 import 'error.dart'; | 8 import 'error.dart'; |
| 9 import 'instrumentation.dart'; | 9 import 'instrumentation.dart'; |
| 10 import 'utilities_collection.dart' show TokenMap; | 10 import 'utilities_collection.dart' show TokenMap; |
| (...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 130 */ | 130 */ |
| 131 KeywordState next(int c) => _table[c - 0x61]; | 131 KeywordState next(int c) => _table[c - 0x61]; |
| 132 } | 132 } |
| 133 /** | 133 /** |
| 134 * The enumeration `ScannerErrorCode` defines the error codes used for errors de
tected by the | 134 * The enumeration `ScannerErrorCode` defines the error codes used for errors de
tected by the |
| 135 * scanner. | 135 * scanner. |
| 136 * | 136 * |
| 137 * @coverage dart.engine.parser | 137 * @coverage dart.engine.parser |
| 138 */ | 138 */ |
| 139 class ScannerErrorCode extends Enum<ScannerErrorCode> implements ErrorCode { | 139 class ScannerErrorCode extends Enum<ScannerErrorCode> implements ErrorCode { |
| 140 static final ScannerErrorCode CHARACTER_EXPECTED_AFTER_SLASH = new ScannerErro
rCode.con1('CHARACTER_EXPECTED_AFTER_SLASH', 0, "Character expected after slash"
); | 140 static final ScannerErrorCode ILLEGAL_CHARACTER = new ScannerErrorCode.con1('I
LLEGAL_CHARACTER', 0, "Illegal character %x"); |
| 141 static final ScannerErrorCode ILLEGAL_CHARACTER = new ScannerErrorCode.con1('I
LLEGAL_CHARACTER', 1, "Illegal character %x"); | 141 static final ScannerErrorCode MISSING_DIGIT = new ScannerErrorCode.con1('MISSI
NG_DIGIT', 1, "Decimal digit expected"); |
| 142 static final ScannerErrorCode MISSING_DIGIT = new ScannerErrorCode.con1('MISSI
NG_DIGIT', 2, "Decimal digit expected"); | 142 static final ScannerErrorCode MISSING_HEX_DIGIT = new ScannerErrorCode.con1('M
ISSING_HEX_DIGIT', 2, "Hexidecimal digit expected"); |
| 143 static final ScannerErrorCode MISSING_HEX_DIGIT = new ScannerErrorCode.con1('M
ISSING_HEX_DIGIT', 3, "Hexidecimal digit expected"); | 143 static final ScannerErrorCode MISSING_QUOTE = new ScannerErrorCode.con1('MISSI
NG_QUOTE', 3, "Expected quote (' or \")"); |
| 144 static final ScannerErrorCode MISSING_QUOTE = new ScannerErrorCode.con1('MISSI
NG_QUOTE', 4, "Expected quote (' or \")"); | 144 static final ScannerErrorCode UNTERMINATED_MULTI_LINE_COMMENT = new ScannerErr
orCode.con1('UNTERMINATED_MULTI_LINE_COMMENT', 4, "Unterminated multi-line comme
nt"); |
| 145 static final ScannerErrorCode UNTERMINATED_MULTI_LINE_COMMENT = new ScannerErr
orCode.con1('UNTERMINATED_MULTI_LINE_COMMENT', 5, "Unterminated multi-line comme
nt"); | 145 static final ScannerErrorCode UNTERMINATED_STRING_LITERAL = new ScannerErrorCo
de.con1('UNTERMINATED_STRING_LITERAL', 5, "Unterminated string literal"); |
| 146 static final ScannerErrorCode UNTERMINATED_STRING_LITERAL = new ScannerErrorCo
de.con1('UNTERMINATED_STRING_LITERAL', 6, "Unterminated string literal"); | |
| 147 static final List<ScannerErrorCode> values = [ | 146 static final List<ScannerErrorCode> values = [ |
| 148 CHARACTER_EXPECTED_AFTER_SLASH, | |
| 149 ILLEGAL_CHARACTER, | 147 ILLEGAL_CHARACTER, |
| 150 MISSING_DIGIT, | 148 MISSING_DIGIT, |
| 151 MISSING_HEX_DIGIT, | 149 MISSING_HEX_DIGIT, |
| 152 MISSING_QUOTE, | 150 MISSING_QUOTE, |
| 153 UNTERMINATED_MULTI_LINE_COMMENT, | 151 UNTERMINATED_MULTI_LINE_COMMENT, |
| 154 UNTERMINATED_STRING_LITERAL]; | 152 UNTERMINATED_STRING_LITERAL]; |
| 155 | 153 |
| 156 /** | 154 /** |
| 157 * The template used to create the message to be displayed for this error. | 155 * The template used to create the message to be displayed for this error. |
| 158 */ | 156 */ |
| (...skipping 303 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 462 class IncrementalScanner extends Scanner { | 460 class IncrementalScanner extends Scanner { |
| 463 | 461 |
| 464 /** | 462 /** |
| 465 * The reader used to access the characters in the source. | 463 * The reader used to access the characters in the source. |
| 466 */ | 464 */ |
| 467 CharacterReader _reader; | 465 CharacterReader _reader; |
| 468 | 466 |
| 469 /** | 467 /** |
| 470 * A map from tokens that were copied to the copies of the tokens. | 468 * A map from tokens that were copied to the copies of the tokens. |
| 471 */ | 469 */ |
| 472 TokenMap _tokenMap = new TokenMap(); | 470 final TokenMap tokenMap = new TokenMap(); |
| 471 |
| 472 /** |
| 473 * The first token in the range of tokens that are different from the tokens i
n the original token |
| 474 * stream. |
| 475 */ |
| 476 Token _firstToken; |
| 477 |
| 478 /** |
| 479 * The last token in the range of tokens that are different from the tokens in
the original token |
| 480 * stream. |
| 481 */ |
| 482 Token lastToken; |
| 473 | 483 |
| 474 /** | 484 /** |
| 475 * Initialize a newly created scanner. | 485 * Initialize a newly created scanner. |
| 476 * | 486 * |
| 477 * @param source the source being scanned | 487 * @param source the source being scanned |
| 478 * @param reader the character reader used to read the characters in the sourc
e | 488 * @param reader the character reader used to read the characters in the sourc
e |
| 479 * @param errorListener the error listener that will be informed of any errors
that are found | 489 * @param errorListener the error listener that will be informed of any errors
that are found |
| 480 */ | 490 */ |
| 481 IncrementalScanner(Source source, CharacterReader reader, AnalysisErrorListene
r errorListener) : super(source, reader, errorListener) { | 491 IncrementalScanner(Source source, CharacterReader reader, AnalysisErrorListene
r errorListener) : super(source, reader, errorListener) { |
| 482 this._reader = reader; | 492 this._reader = reader; |
| 483 } | 493 } |
| 484 | 494 |
| 485 /** | 495 /** |
| 496 * Return the first token in the range of tokens that are different from the t
okens in the |
| 497 * original token stream or `null` if the new tokens are the same as the origi
nal tokens |
| 498 * except for offset. |
| 499 * |
| 500 * @return the first token in the range of new tokens |
| 501 */ |
| 502 Token get firstToken => _firstToken; |
| 503 |
| 504 /** |
| 486 * Given the stream of tokens scanned from the original source, the modified s
ource (the result of | 505 * Given the stream of tokens scanned from the original source, the modified s
ource (the result of |
| 487 * replacing one contiguous range of characters with another string of charact
ers), and a | 506 * replacing one contiguous range of characters with another string of charact
ers), and a |
| 488 * specification of the modification that was made, return a stream of tokens
scanned from the | 507 * specification of the modification that was made, return a stream of tokens
scanned from the |
| 489 * modified source. The original stream of tokens will not be modified. | 508 * modified source. The original stream of tokens will not be modified. |
| 490 * | 509 * |
| 491 * @param originalStream the stream of tokens scanned from the original source | 510 * @param originalStream the stream of tokens scanned from the original source |
| 492 * @param index the index of the first character in both the original and modi
fied source that was | 511 * @param index the index of the first character in both the original and modi
fied source that was |
| 493 * affected by the modification | 512 * affected by the modification |
| 494 * @param removedLength the number of characters removed from the original sou
rce | 513 * @param removedLength the number of characters removed from the original sou
rce |
| 495 * @param insertedLength the number of characters added to the modified source | 514 * @param insertedLength the number of characters added to the modified source |
| 496 */ | 515 */ |
| 497 Token rescan(Token originalStream, int index, int removedLength, int insertedL
ength) { | 516 Token rescan(Token originalStream, int index, int removedLength, int insertedL
ength) { |
| 498 while (originalStream.end < index) { | 517 while (originalStream.type != TokenType.EOF && originalStream.end < index) { |
| 499 originalStream = copyAndAdvance(originalStream, 0); | 518 originalStream = copyAndAdvance(originalStream, 0); |
| 500 } | 519 } |
| 520 Token lastCopied = tail; |
| 501 int modifiedEnd = index + insertedLength - 1; | 521 int modifiedEnd = index + insertedLength - 1; |
| 522 if (originalStream.offset < index) { |
| 523 modifiedEnd += originalStream.end - index - removedLength; |
| 524 } |
| 502 _reader.offset = Math.min(originalStream.offset, index) - 1; | 525 _reader.offset = Math.min(originalStream.offset, index) - 1; |
| 503 int next = _reader.advance(); | 526 int next = _reader.advance(); |
| 504 while (next != -1 && _reader.offset <= modifiedEnd) { | 527 while (next != -1 && _reader.offset <= modifiedEnd) { |
| 505 next = bigSwitch(next); | 528 next = bigSwitch(next); |
| 506 } | 529 } |
| 507 int removedEnd = index + removedLength - 1; | 530 _firstToken = lastCopied.next; |
| 531 lastToken = tail; |
| 532 if (_firstToken == null || identical(_firstToken.type, TokenType.EOF)) { |
| 533 _firstToken = null; |
| 534 lastToken = null; |
| 535 } else if (originalStream.end == index && _firstToken.end == index) { |
| 536 tokenMap.put(originalStream, _firstToken); |
| 537 if (identical(lastToken, _firstToken)) { |
| 538 lastToken = lastToken.next; |
| 539 } |
| 540 _firstToken = _firstToken.next; |
| 541 } |
| 542 int removedEnd = index + removedLength - 1 + Math.max(0, tail.end - index -
insertedLength); |
| 508 while (originalStream.offset <= removedEnd) { | 543 while (originalStream.offset <= removedEnd) { |
| 509 originalStream = originalStream.next; | 544 originalStream = originalStream.next; |
| 510 } | 545 } |
| 511 int delta = insertedLength - removedLength; | 546 int delta = insertedLength - removedLength; |
| 512 while (originalStream.type != TokenType.EOF) { | 547 while (originalStream.type != TokenType.EOF) { |
| 513 originalStream = copyAndAdvance(originalStream, delta); | 548 originalStream = copyAndAdvance(originalStream, delta); |
| 514 } | 549 } |
| 515 copyAndAdvance(originalStream, delta); | 550 Token eof = copyAndAdvance(originalStream, delta); |
| 516 return firstToken(); | 551 eof.setNextWithoutSettingPrevious(eof); |
| 552 return super.firstToken; |
| 517 } | 553 } |
| 518 Token copyAndAdvance(Token originalToken, int delta) { | 554 Token copyAndAdvance(Token originalToken, int delta) { |
| 519 Token copiedToken = originalToken.copy(); | 555 Token copiedToken = originalToken.copy(); |
| 520 _tokenMap.put(originalToken, copiedToken); | 556 tokenMap.put(originalToken, copiedToken); |
| 521 copiedToken.applyDelta(delta); | 557 copiedToken.applyDelta(delta); |
| 522 appendToken(copiedToken); | 558 appendToken(copiedToken); |
| 523 Token originalComment = originalToken.precedingComments; | 559 Token originalComment = originalToken.precedingComments; |
| 524 Token copiedComment = originalToken.precedingComments; | 560 Token copiedComment = originalToken.precedingComments; |
| 525 while (originalComment != null) { | 561 while (originalComment != null) { |
| 526 _tokenMap.put(originalComment, copiedComment); | 562 tokenMap.put(originalComment, copiedComment); |
| 527 originalComment = originalComment.next; | 563 originalComment = originalComment.next; |
| 528 copiedComment = copiedComment.next; | 564 copiedComment = copiedComment.next; |
| 529 } | 565 } |
| 530 return originalToken.next; | 566 return originalToken.next; |
| 531 } | 567 } |
| 532 } | 568 } |
| 533 /** | 569 /** |
| 534 * The class `Scanner` implements a scanner for Dart code. | 570 * The class `Scanner` implements a scanner for Dart code. |
| 535 * | 571 * |
| 536 * The lexical structure of Dart is ambiguous without knowledge of the context i
n which a token is | 572 * The lexical structure of Dart is ambiguous without knowledge of the context i
n which a token is |
| (...skipping 22 matching lines...) Expand all Loading... |
| 559 AnalysisErrorListener _errorListener; | 595 AnalysisErrorListener _errorListener; |
| 560 | 596 |
| 561 /** | 597 /** |
| 562 * The token pointing to the head of the linked list of tokens. | 598 * The token pointing to the head of the linked list of tokens. |
| 563 */ | 599 */ |
| 564 Token _tokens; | 600 Token _tokens; |
| 565 | 601 |
| 566 /** | 602 /** |
| 567 * The last token that was scanned. | 603 * The last token that was scanned. |
| 568 */ | 604 */ |
| 569 Token _tail; | 605 Token tail; |
| 570 | 606 |
| 571 /** | 607 /** |
| 572 * The first token in the list of comment tokens found since the last non-comm
ent token. | 608 * The first token in the list of comment tokens found since the last non-comm
ent token. |
| 573 */ | 609 */ |
| 574 Token _firstComment; | 610 Token _firstComment; |
| 575 | 611 |
| 576 /** | 612 /** |
| 577 * The last token in the list of comment tokens found since the last non-comme
nt token. | 613 * The last token in the list of comment tokens found since the last non-comme
nt token. |
| 578 */ | 614 */ |
| 579 Token _lastComment; | 615 Token _lastComment; |
| (...skipping 30 matching lines...) Expand all Loading... |
| 610 * @param source the source being scanned | 646 * @param source the source being scanned |
| 611 * @param reader the character reader used to read the characters in the sourc
e | 647 * @param reader the character reader used to read the characters in the sourc
e |
| 612 * @param errorListener the error listener that will be informed of any errors
that are found | 648 * @param errorListener the error listener that will be informed of any errors
that are found |
| 613 */ | 649 */ |
| 614 Scanner(Source source, CharacterReader reader, AnalysisErrorListener errorList
ener) { | 650 Scanner(Source source, CharacterReader reader, AnalysisErrorListener errorList
ener) { |
| 615 this.source = source; | 651 this.source = source; |
| 616 this._reader = reader; | 652 this._reader = reader; |
| 617 this._errorListener = errorListener; | 653 this._errorListener = errorListener; |
| 618 _tokens = new Token(TokenType.EOF, -1); | 654 _tokens = new Token(TokenType.EOF, -1); |
| 619 _tokens.setNext(_tokens); | 655 _tokens.setNext(_tokens); |
| 620 _tail = _tokens; | 656 tail = _tokens; |
| 621 _tokenStart = -1; | 657 _tokenStart = -1; |
| 622 _lineStarts.add(0); | 658 _lineStarts.add(0); |
| 623 } | 659 } |
| 624 | 660 |
| 625 /** | 661 /** |
| 626 * Return an array containing the offsets of the first character of each line
in the source code. | 662 * Return an array containing the offsets of the first character of each line
in the source code. |
| 627 * | 663 * |
| 628 * @return an array containing the offsets of the first character of each line
in the source code | 664 * @return an array containing the offsets of the first character of each line
in the source code |
| 629 */ | 665 */ |
| 630 List<int> get lineStarts => _lineStarts; | 666 List<int> get lineStarts => _lineStarts; |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 667 InstrumentationBuilder instrumentation = Instrumentation.builder2("dart.engi
ne.AbstractScanner.tokenize"); | 703 InstrumentationBuilder instrumentation = Instrumentation.builder2("dart.engi
ne.AbstractScanner.tokenize"); |
| 668 int tokenCounter = 0; | 704 int tokenCounter = 0; |
| 669 try { | 705 try { |
| 670 int next = _reader.advance(); | 706 int next = _reader.advance(); |
| 671 while (next != -1) { | 707 while (next != -1) { |
| 672 tokenCounter++; | 708 tokenCounter++; |
| 673 next = bigSwitch(next); | 709 next = bigSwitch(next); |
| 674 } | 710 } |
| 675 appendEofToken(); | 711 appendEofToken(); |
| 676 instrumentation.metric2("tokensCount", tokenCounter); | 712 instrumentation.metric2("tokensCount", tokenCounter); |
| 677 return firstToken(); | 713 return firstToken; |
| 678 } finally { | 714 } finally { |
| 679 instrumentation.log2(2); | 715 instrumentation.log2(2); |
| 680 } | 716 } |
| 681 } | 717 } |
| 682 | 718 |
| 683 /** | 719 /** |
| 684 * Append the given token to the end of the token stream being scanned. This m
ethod is intended to | 720 * Append the given token to the end of the token stream being scanned. This m
ethod is intended to |
| 685 * be used by subclasses that copy existing tokens and should not normally be
used because it will | 721 * be used by subclasses that copy existing tokens and should not normally be
used because it will |
| 686 * fail to correctly associate any comments with the token being passed in. | 722 * fail to correctly associate any comments with the token being passed in. |
| 687 * | 723 * |
| 688 * @param token the token to be appended | 724 * @param token the token to be appended |
| 689 */ | 725 */ |
| 690 void appendToken(Token token) { | 726 void appendToken(Token token) { |
| 691 _tail = _tail.setNext(token); | 727 tail = tail.setNext(token); |
| 692 } | 728 } |
| 693 int bigSwitch(int next) { | 729 int bigSwitch(int next) { |
| 694 beginToken(); | 730 beginToken(); |
| 695 if (next == 0xD) { | 731 if (next == 0xD) { |
| 696 next = _reader.advance(); | 732 next = _reader.advance(); |
| 697 if (next == 0xA) { | 733 if (next == 0xA) { |
| 698 next = _reader.advance(); | 734 next = _reader.advance(); |
| 699 } | 735 } |
| 700 recordStartOfLine(); | 736 recordStartOfLine(); |
| 701 return next; | 737 return next; |
| (...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 829 } | 865 } |
| 830 reportError(ScannerErrorCode.ILLEGAL_CHARACTER, [next]); | 866 reportError(ScannerErrorCode.ILLEGAL_CHARACTER, [next]); |
| 831 return _reader.advance(); | 867 return _reader.advance(); |
| 832 } | 868 } |
| 833 | 869 |
| 834 /** | 870 /** |
| 835 * Return the first token in the token stream that was scanned. | 871 * Return the first token in the token stream that was scanned. |
| 836 * | 872 * |
| 837 * @return the first token in the token stream that was scanned | 873 * @return the first token in the token stream that was scanned |
| 838 */ | 874 */ |
| 839 Token firstToken() => _tokens.next; | 875 Token get firstToken => _tokens.next; |
| 840 | 876 |
| 841 /** | 877 /** |
| 842 * Record the fact that we are at the beginning of a new line in the source. | 878 * Record the fact that we are at the beginning of a new line in the source. |
| 843 */ | 879 */ |
| 844 void recordStartOfLine() { | 880 void recordStartOfLine() { |
| 845 _lineStarts.add(_reader.offset); | 881 _lineStarts.add(_reader.offset); |
| 846 } | 882 } |
| 847 void appendBeginToken(TokenType type) { | 883 void appendBeginToken(TokenType type) { |
| 848 BeginToken token; | 884 BeginToken token; |
| 849 if (_firstComment == null) { | 885 if (_firstComment == null) { |
| 850 token = new BeginToken(type, _tokenStart); | 886 token = new BeginToken(type, _tokenStart); |
| 851 } else { | 887 } else { |
| 852 token = new BeginTokenWithComment(type, _tokenStart, _firstComment); | 888 token = new BeginTokenWithComment(type, _tokenStart, _firstComment); |
| 853 _firstComment = null; | 889 _firstComment = null; |
| 854 _lastComment = null; | 890 _lastComment = null; |
| 855 } | 891 } |
| 856 _tail = _tail.setNext(token); | 892 tail = tail.setNext(token); |
| 857 _groupingStack.add(token); | 893 _groupingStack.add(token); |
| 858 _stackEnd++; | 894 _stackEnd++; |
| 859 } | 895 } |
| 860 void appendCommentToken(TokenType type, String value) { | 896 void appendCommentToken(TokenType type, String value) { |
| 861 if (_firstComment == null) { | 897 if (_firstComment == null) { |
| 862 _firstComment = new StringToken(type, value, _tokenStart); | 898 _firstComment = new StringToken(type, value, _tokenStart); |
| 863 _lastComment = _firstComment; | 899 _lastComment = _firstComment; |
| 864 } else { | 900 } else { |
| 865 _lastComment = _lastComment.setNext(new StringToken(type, value, _tokenSta
rt)); | 901 _lastComment = _lastComment.setNext(new StringToken(type, value, _tokenSta
rt)); |
| 866 } | 902 } |
| 867 } | 903 } |
| 868 void appendEndToken(TokenType type, TokenType beginType) { | 904 void appendEndToken(TokenType type, TokenType beginType) { |
| 869 Token token; | 905 Token token; |
| 870 if (_firstComment == null) { | 906 if (_firstComment == null) { |
| 871 token = new Token(type, _tokenStart); | 907 token = new Token(type, _tokenStart); |
| 872 } else { | 908 } else { |
| 873 token = new TokenWithComment(type, _tokenStart, _firstComment); | 909 token = new TokenWithComment(type, _tokenStart, _firstComment); |
| 874 _firstComment = null; | 910 _firstComment = null; |
| 875 _lastComment = null; | 911 _lastComment = null; |
| 876 } | 912 } |
| 877 _tail = _tail.setNext(token); | 913 tail = tail.setNext(token); |
| 878 if (_stackEnd >= 0) { | 914 if (_stackEnd >= 0) { |
| 879 BeginToken begin = _groupingStack[_stackEnd]; | 915 BeginToken begin = _groupingStack[_stackEnd]; |
| 880 if (identical(begin.type, beginType)) { | 916 if (identical(begin.type, beginType)) { |
| 881 begin.endToken = token; | 917 begin.endToken = token; |
| 882 _groupingStack.removeAt(_stackEnd--); | 918 _groupingStack.removeAt(_stackEnd--); |
| 883 } | 919 } |
| 884 } | 920 } |
| 885 } | 921 } |
| 886 void appendEofToken() { | 922 void appendEofToken() { |
| 887 Token eofToken; | 923 Token eofToken; |
| 888 if (_firstComment == null) { | 924 if (_firstComment == null) { |
| 889 eofToken = new Token(TokenType.EOF, _reader.offset + 1); | 925 eofToken = new Token(TokenType.EOF, _reader.offset + 1); |
| 890 } else { | 926 } else { |
| 891 eofToken = new TokenWithComment(TokenType.EOF, _reader.offset + 1, _firstC
omment); | 927 eofToken = new TokenWithComment(TokenType.EOF, _reader.offset + 1, _firstC
omment); |
| 892 _firstComment = null; | 928 _firstComment = null; |
| 893 _lastComment = null; | 929 _lastComment = null; |
| 894 } | 930 } |
| 895 eofToken.setNext(eofToken); | 931 eofToken.setNext(eofToken); |
| 896 _tail = _tail.setNext(eofToken); | 932 tail = tail.setNext(eofToken); |
| 897 if (_stackEnd >= 0) { | 933 if (_stackEnd >= 0) { |
| 898 _hasUnmatchedGroups2 = true; | 934 _hasUnmatchedGroups2 = true; |
| 899 } | 935 } |
| 900 } | 936 } |
| 901 void appendKeywordToken(Keyword keyword) { | 937 void appendKeywordToken(Keyword keyword) { |
| 902 if (_firstComment == null) { | 938 if (_firstComment == null) { |
| 903 _tail = _tail.setNext(new KeywordToken(keyword, _tokenStart)); | 939 tail = tail.setNext(new KeywordToken(keyword, _tokenStart)); |
| 904 } else { | 940 } else { |
| 905 _tail = _tail.setNext(new KeywordTokenWithComment(keyword, _tokenStart, _f
irstComment)); | 941 tail = tail.setNext(new KeywordTokenWithComment(keyword, _tokenStart, _fir
stComment)); |
| 906 _firstComment = null; | 942 _firstComment = null; |
| 907 _lastComment = null; | 943 _lastComment = null; |
| 908 } | 944 } |
| 909 } | 945 } |
| 910 void appendStringToken(TokenType type, String value) { | 946 void appendStringToken(TokenType type, String value) { |
| 911 if (_firstComment == null) { | 947 if (_firstComment == null) { |
| 912 _tail = _tail.setNext(new StringToken(type, value, _tokenStart)); | 948 tail = tail.setNext(new StringToken(type, value, _tokenStart)); |
| 913 } else { | 949 } else { |
| 914 _tail = _tail.setNext(new StringTokenWithComment(type, value, _tokenStart,
_firstComment)); | 950 tail = tail.setNext(new StringTokenWithComment(type, value, _tokenStart, _
firstComment)); |
| 915 _firstComment = null; | 951 _firstComment = null; |
| 916 _lastComment = null; | 952 _lastComment = null; |
| 917 } | 953 } |
| 918 } | 954 } |
| 919 void appendStringToken2(TokenType type, String value, int offset) { | 955 void appendStringToken2(TokenType type, String value, int offset) { |
| 920 if (_firstComment == null) { | 956 if (_firstComment == null) { |
| 921 _tail = _tail.setNext(new StringToken(type, value, _tokenStart + offset)); | 957 tail = tail.setNext(new StringToken(type, value, _tokenStart + offset)); |
| 922 } else { | 958 } else { |
| 923 _tail = _tail.setNext(new StringTokenWithComment(type, value, _tokenStart
+ offset, _firstComment)); | 959 tail = tail.setNext(new StringTokenWithComment(type, value, _tokenStart +
offset, _firstComment)); |
| 924 _firstComment = null; | 960 _firstComment = null; |
| 925 _lastComment = null; | 961 _lastComment = null; |
| 926 } | 962 } |
| 927 } | 963 } |
| 928 void appendToken2(TokenType type) { | 964 void appendToken2(TokenType type) { |
| 929 if (_firstComment == null) { | 965 if (_firstComment == null) { |
| 930 _tail = _tail.setNext(new Token(type, _tokenStart)); | 966 tail = tail.setNext(new Token(type, _tokenStart)); |
| 931 } else { | 967 } else { |
| 932 _tail = _tail.setNext(new TokenWithComment(type, _tokenStart, _firstCommen
t)); | 968 tail = tail.setNext(new TokenWithComment(type, _tokenStart, _firstComment)
); |
| 933 _firstComment = null; | 969 _firstComment = null; |
| 934 _lastComment = null; | 970 _lastComment = null; |
| 935 } | 971 } |
| 936 } | 972 } |
| 937 void appendToken3(TokenType type, int offset) { | 973 void appendToken3(TokenType type, int offset) { |
| 938 if (_firstComment == null) { | 974 if (_firstComment == null) { |
| 939 _tail = _tail.setNext(new Token(type, offset)); | 975 tail = tail.setNext(new Token(type, offset)); |
| 940 } else { | 976 } else { |
| 941 _tail = _tail.setNext(new TokenWithComment(type, offset, _firstComment)); | 977 tail = tail.setNext(new TokenWithComment(type, offset, _firstComment)); |
| 942 _firstComment = null; | 978 _firstComment = null; |
| 943 _lastComment = null; | 979 _lastComment = null; |
| 944 } | 980 } |
| 945 } | 981 } |
| 946 void beginToken() { | 982 void beginToken() { |
| 947 _tokenStart = _reader.offset; | 983 _tokenStart = _reader.offset; |
| 948 } | 984 } |
| 949 | 985 |
| 950 /** | 986 /** |
| 951 * Return the beginning token corresponding to a closing brace that was found
while scanning | 987 * Return the beginning token corresponding to a closing brace that was found
while scanning |
| (...skipping 378 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1330 return _reader.advance(); | 1366 return _reader.advance(); |
| 1331 } | 1367 } |
| 1332 } | 1368 } |
| 1333 continue; | 1369 continue; |
| 1334 } | 1370 } |
| 1335 if (next == 0x5C) { | 1371 if (next == 0x5C) { |
| 1336 next = _reader.advance(); | 1372 next = _reader.advance(); |
| 1337 if (next == -1) { | 1373 if (next == -1) { |
| 1338 break; | 1374 break; |
| 1339 } | 1375 } |
| 1340 bool missingCharacter = false; | |
| 1341 if (next == 0xD) { | 1376 if (next == 0xD) { |
| 1342 missingCharacter = true; | |
| 1343 next = _reader.advance(); | 1377 next = _reader.advance(); |
| 1344 if (next == 0xA) { | 1378 if (next == 0xA) { |
| 1345 next = _reader.advance(); | 1379 next = _reader.advance(); |
| 1346 } | 1380 } |
| 1347 recordStartOfLine(); | 1381 recordStartOfLine(); |
| 1348 } else if (next == 0xA) { | 1382 } else if (next == 0xA) { |
| 1349 missingCharacter = true; | |
| 1350 recordStartOfLine(); | 1383 recordStartOfLine(); |
| 1351 next = _reader.advance(); | 1384 next = _reader.advance(); |
| 1352 } else { | 1385 } else { |
| 1353 next = _reader.advance(); | 1386 next = _reader.advance(); |
| 1354 } | 1387 } |
| 1355 if (missingCharacter) { | |
| 1356 _errorListener.onError(new AnalysisError.con2(source, _reader.offset -
1, 1, ScannerErrorCode.CHARACTER_EXPECTED_AFTER_SLASH, [])); | |
| 1357 } | |
| 1358 } else if (next == 0xD) { | 1388 } else if (next == 0xD) { |
| 1359 next = _reader.advance(); | 1389 next = _reader.advance(); |
| 1360 if (next == 0xA) { | 1390 if (next == 0xA) { |
| 1361 next = _reader.advance(); | 1391 next = _reader.advance(); |
| 1362 } | 1392 } |
| 1363 recordStartOfLine(); | 1393 recordStartOfLine(); |
| 1364 } else if (next == 0xA) { | 1394 } else if (next == 0xA) { |
| 1365 recordStartOfLine(); | 1395 recordStartOfLine(); |
| 1366 next = _reader.advance(); | 1396 next = _reader.advance(); |
| 1367 } else { | 1397 } else { |
| (...skipping 365 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1733 */ | 1763 */ |
| 1734 Token copyComments(Token token) { | 1764 Token copyComments(Token token) { |
| 1735 if (token == null) { | 1765 if (token == null) { |
| 1736 return null; | 1766 return null; |
| 1737 } | 1767 } |
| 1738 Token head = token.copy(); | 1768 Token head = token.copy(); |
| 1739 Token tail = head; | 1769 Token tail = head; |
| 1740 token = token.next; | 1770 token = token.next; |
| 1741 while (token != null) { | 1771 while (token != null) { |
| 1742 tail = tail.setNext(token.copy()); | 1772 tail = tail.setNext(token.copy()); |
| 1773 token = token.next; |
| 1743 } | 1774 } |
| 1744 return head; | 1775 return head; |
| 1745 } | 1776 } |
| 1746 } | 1777 } |
| 1747 /** | 1778 /** |
| 1748 * The interface `CharacterReader` | 1779 * The interface `CharacterReader` |
| 1749 */ | 1780 */ |
| 1750 abstract class CharacterReader { | 1781 abstract class CharacterReader { |
| 1751 | 1782 |
| 1752 /** | 1783 /** |
| (...skipping 532 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2285 * Return `true` if this token type represents an operator that can be defined
by users. | 2316 * Return `true` if this token type represents an operator that can be defined
by users. |
| 2286 * | 2317 * |
| 2287 * @return `true` if this token type represents an operator that can be define
d by users | 2318 * @return `true` if this token type represents an operator that can be define
d by users |
| 2288 */ | 2319 */ |
| 2289 bool get isUserDefinableOperator => identical(lexeme, "==") || identical(lexem
e, "~") || identical(lexeme, "[]") || identical(lexeme, "[]=") || identical(lexe
me, "*") || identical(lexeme, "/") || identical(lexeme, "%") || identical(lexeme
, "~/") || identical(lexeme, "+") || identical(lexeme, "-") || identical(lexeme,
"<<") || identical(lexeme, ">>") || identical(lexeme, ">=") || identical(lexeme
, ">") || identical(lexeme, "<=") || identical(lexeme, "<") || identical(lexeme,
"&") || identical(lexeme, "^") || identical(lexeme, "|"); | 2320 bool get isUserDefinableOperator => identical(lexeme, "==") || identical(lexem
e, "~") || identical(lexeme, "[]") || identical(lexeme, "[]=") || identical(lexe
me, "*") || identical(lexeme, "/") || identical(lexeme, "%") || identical(lexeme
, "~/") || identical(lexeme, "+") || identical(lexeme, "-") || identical(lexeme,
"<<") || identical(lexeme, ">>") || identical(lexeme, ">=") || identical(lexeme
, ">") || identical(lexeme, "<=") || identical(lexeme, "<") || identical(lexeme,
"&") || identical(lexeme, "^") || identical(lexeme, "|"); |
| 2290 } | 2321 } |
| 2291 class TokenType_EOF extends TokenType { | 2322 class TokenType_EOF extends TokenType { |
| 2292 TokenType_EOF(String name, int ordinal, TokenClass arg0, String arg1) : super.
con2(name, ordinal, arg0, arg1); | 2323 TokenType_EOF(String name, int ordinal, TokenClass arg0, String arg1) : super.
con2(name, ordinal, arg0, arg1); |
| 2293 String toString() => "-eof-"; | 2324 String toString() => "-eof-"; |
| 2294 } | 2325 } |
| OLD | NEW |