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

Side by Side Diff: pkg/front_end/lib/src/fasta/scanner/abstract_scanner.dart

Issue 2763833002: fasta.CommentToken implement analyzer.CommentToken (Closed)
Patch Set: merge Created 3 years, 9 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) 2012, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2012, 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.scanner.abstract_scanner; 5 library fasta.scanner.abstract_scanner;
6 6
7 import 'dart:collection' show ListMixin; 7 import 'dart:collection' show ListMixin;
8 8
9 import 'dart:typed_data' show Uint16List, Uint32List; 9 import 'dart:typed_data' show Uint16List, Uint32List;
10 10
11 import '../scanner.dart' 11 import '../scanner.dart'
12 show ErrorToken, Scanner, buildUnexpectedCharacterToken; 12 show ErrorToken, Scanner, buildUnexpectedCharacterToken;
13 13
14 import 'error_token.dart' show UnmatchedToken, UnterminatedToken; 14 import 'error_token.dart' show UnmatchedToken, UnterminatedToken;
15 15
16 import 'keyword.dart' show KeywordState, Keyword; 16 import 'keyword.dart' show KeywordState, Keyword;
17 17
18 import 'precedence.dart'; 18 import 'precedence.dart';
19 19
20 import 'token.dart' show BeginGroupToken, SymbolToken, Token; 20 import 'token.dart' show BeginGroupToken, CommentToken, SymbolToken, Token;
21 21
22 import 'token_constants.dart'; 22 import 'token_constants.dart';
23 23
24 import 'characters.dart'; 24 import 'characters.dart';
25 25
26 abstract class AbstractScanner implements Scanner { 26 abstract class AbstractScanner implements Scanner {
27 final bool includeComments; 27 final bool includeComments;
28 28
29 /** 29 /**
30 * The string offset for the next token that will be created. 30 * The string offset for the next token that will be created.
(...skipping 16 matching lines...) Expand all
47 /** 47 /**
48 * A pointer to the last scanned token. 48 * A pointer to the last scanned token.
49 */ 49 */
50 Token tail; 50 Token tail;
51 51
52 /** 52 /**
53 * A pointer to the stream of comment tokens created by this scanner 53 * A pointer to the stream of comment tokens created by this scanner
54 * before they are assigned to the [Token] precedingComments field 54 * before they are assigned to the [Token] precedingComments field
55 * of a non-comment token. A value of `null` indicates no comment tokens. 55 * of a non-comment token. A value of `null` indicates no comment tokens.
56 */ 56 */
57 Token comments; 57 CommentToken comments;
58 58
59 /** 59 /**
60 * A pointer to the last scanned comment token or `null` if none. 60 * A pointer to the last scanned comment token or `null` if none.
61 */ 61 */
62 Token commentsTail; 62 Token commentsTail;
63 63
64 final List<int> lineStarts; 64 final List<int> lineStarts;
65 65
66 AbstractScanner(this.includeComments, {int numberOfBytesHint}) 66 AbstractScanner(this.includeComments, {int numberOfBytesHint})
67 : lineStarts = new LineStarts(numberOfBytesHint) { 67 : lineStarts = new LineStarts(numberOfBytesHint) {
(...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after
181 181
182 /** Documentation in subclass [ArrayBasedScanner]. */ 182 /** Documentation in subclass [ArrayBasedScanner]. */
183 void appendGt(PrecedenceInfo info); 183 void appendGt(PrecedenceInfo info);
184 184
185 /** Documentation in subclass [ArrayBasedScanner]. */ 185 /** Documentation in subclass [ArrayBasedScanner]. */
186 void appendGtGt(PrecedenceInfo info); 186 void appendGtGt(PrecedenceInfo info);
187 187
188 /** Documentation in subclass [ArrayBasedScanner]. */ 188 /** Documentation in subclass [ArrayBasedScanner]. */
189 void appendComment(start, PrecedenceInfo info, bool asciiOnly); 189 void appendComment(start, PrecedenceInfo info, bool asciiOnly);
190 190
191 /** Documentation in subclass [ArrayBasedScanner]. */
192 void appendDartDoc(start, PrecedenceInfo info, bool asciiOnly);
193
191 /// Append [token] to the token stream. 194 /// Append [token] to the token stream.
192 void appendErrorToken(ErrorToken token); 195 void appendErrorToken(ErrorToken token);
193 196
194 /** Documentation in subclass [ArrayBasedScanner]. */ 197 /** Documentation in subclass [ArrayBasedScanner]. */
195 void discardOpenLt(); 198 void discardOpenLt();
196 199
197 /// Return true when at EOF. 200 /// Return true when at EOF.
198 bool atEndOfFile(); 201 bool atEndOfFile();
199 202
200 Token tokenize() { 203 Token tokenize() {
(...skipping 514 matching lines...) Expand 10 before | Expand all | Expand 10 after
715 appendPrecedenceToken(SLASH_EQ_INFO); 718 appendPrecedenceToken(SLASH_EQ_INFO);
716 return advance(); 719 return advance();
717 } else { 720 } else {
718 appendPrecedenceToken(SLASH_INFO); 721 appendPrecedenceToken(SLASH_INFO);
719 return next; 722 return next;
720 } 723 }
721 } 724 }
722 725
723 int tokenizeSingleLineComment(int next, int start) { 726 int tokenizeSingleLineComment(int next, int start) {
724 bool asciiOnly = true; 727 bool asciiOnly = true;
728 bool dartdoc = identical($SLASH, peek());
725 while (true) { 729 while (true) {
726 next = advance(); 730 next = advance();
727 if (next > 127) asciiOnly = false; 731 if (next > 127) asciiOnly = false;
728 if (identical($LF, next) || 732 if (identical($LF, next) ||
729 identical($CR, next) || 733 identical($CR, next) ||
730 identical($EOF, next)) { 734 identical($EOF, next)) {
731 if (!asciiOnly) handleUnicode(start); 735 if (!asciiOnly) handleUnicode(start);
732 appendComment(start, SINGLE_LINE_COMMENT_INFO, asciiOnly); 736 if (dartdoc) {
737 appendDartDoc(start, SINGLE_LINE_COMMENT_INFO, asciiOnly);
738 } else {
739 appendComment(start, SINGLE_LINE_COMMENT_INFO, asciiOnly);
740 }
733 return next; 741 return next;
734 } 742 }
735 } 743 }
736 } 744 }
737 745
738 int tokenizeMultiLineComment(int next, int start) { 746 int tokenizeMultiLineComment(int next, int start) {
739 bool asciiOnlyComment = true; // Track if the entire comment is ASCII. 747 bool asciiOnlyComment = true; // Track if the entire comment is ASCII.
740 bool asciiOnlyLines = true; // Track ASCII since the last handleUnicode. 748 bool asciiOnlyLines = true; // Track ASCII since the last handleUnicode.
741 int unicodeStart = start; 749 int unicodeStart = start;
742 int nesting = 1; 750 int nesting = 1;
743 next = advance(); 751 next = advance();
752 bool dartdoc = identical($STAR, next);
744 while (true) { 753 while (true) {
745 if (identical($EOF, next)) { 754 if (identical($EOF, next)) {
746 if (!asciiOnlyLines) handleUnicode(unicodeStart); 755 if (!asciiOnlyLines) handleUnicode(unicodeStart);
747 unterminated('/*'); 756 unterminated('/*');
748 break; 757 break;
749 } else if (identical($STAR, next)) { 758 } else if (identical($STAR, next)) {
750 next = advance(); 759 next = advance();
751 if (identical($SLASH, next)) { 760 if (identical($SLASH, next)) {
752 --nesting; 761 --nesting;
753 if (0 == nesting) { 762 if (0 == nesting) {
754 if (!asciiOnlyLines) handleUnicode(unicodeStart); 763 if (!asciiOnlyLines) handleUnicode(unicodeStart);
755 next = advance(); 764 next = advance();
756 appendComment(start, MULTI_LINE_COMMENT_INFO, asciiOnlyComment); 765 if (dartdoc) {
766 appendDartDoc(start, MULTI_LINE_COMMENT_INFO, asciiOnlyComment);
767 } else {
768 appendComment(start, MULTI_LINE_COMMENT_INFO, asciiOnlyComment);
769 }
757 break; 770 break;
758 } else { 771 } else {
759 next = advance(); 772 next = advance();
760 } 773 }
761 } 774 }
762 } else if (identical($SLASH, next)) { 775 } else if (identical($SLASH, next)) {
763 next = advance(); 776 next = advance();
764 if (identical($STAR, next)) { 777 if (identical($STAR, next)) {
765 next = advance(); 778 next = advance();
766 ++nesting; 779 ++nesting;
(...skipping 468 matching lines...) Expand 10 before | Expand all | Expand 10 after
1235 switchToUint32(newLength); 1248 switchToUint32(newLength);
1236 } 1249 }
1237 } 1250 }
1238 1251
1239 void switchToUint32(int newLength) { 1252 void switchToUint32(int newLength) {
1240 final newArray = new Uint32List(newLength); 1253 final newArray = new Uint32List(newLength);
1241 newArray.setRange(0, arrayLength, array); 1254 newArray.setRange(0, arrayLength, array);
1242 array = newArray; 1255 array = newArray;
1243 } 1256 }
1244 } 1257 }
OLDNEW
« no previous file with comments | « pkg/analyzer/tool/summary/mini_ast.dart ('k') | pkg/front_end/lib/src/fasta/scanner/array_based_scanner.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698