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

Side by Side Diff: src/parsing/scanner.cc

Issue 1841543003: [esnext] implement frontend changes for async/await proposal (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Uncomment that test Created 4 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
« no previous file with comments | « src/parsing/scanner.h ('k') | src/parsing/token.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2011 the V8 project authors. All rights reserved. 1 // Copyright 2011 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 // Features shared by parsing and pre-parsing scanners. 5 // Features shared by parsing and pre-parsing scanners.
6 6
7 #include "src/parsing/scanner.h" 7 #include "src/parsing/scanner.h"
8 8
9 #include <stdint.h> 9 #include <stdint.h>
10 10
(...skipping 231 matching lines...) Expand 10 before | Expand all | Expand 10 after
242 242
243 Token::Value Scanner::Next() { 243 Token::Value Scanner::Next() {
244 if (next_.token == Token::EOS) { 244 if (next_.token == Token::EOS) {
245 next_.location.beg_pos = current_.location.beg_pos; 245 next_.location.beg_pos = current_.location.beg_pos;
246 next_.location.end_pos = current_.location.end_pos; 246 next_.location.end_pos = current_.location.end_pos;
247 } 247 }
248 current_ = next_; 248 current_ = next_;
249 if (V8_UNLIKELY(next_next_.token != Token::UNINITIALIZED)) { 249 if (V8_UNLIKELY(next_next_.token != Token::UNINITIALIZED)) {
250 next_ = next_next_; 250 next_ = next_next_;
251 next_next_.token = Token::UNINITIALIZED; 251 next_next_.token = Token::UNINITIALIZED;
252 has_line_terminator_before_next_ = has_line_terminator_after_next_;
252 return current_.token; 253 return current_.token;
253 } 254 }
254 has_line_terminator_before_next_ = false; 255 has_line_terminator_before_next_ = false;
255 has_multiline_comment_before_next_ = false; 256 has_multiline_comment_before_next_ = false;
256 if (static_cast<unsigned>(c0_) <= 0x7f) { 257 if (static_cast<unsigned>(c0_) <= 0x7f) {
257 Token::Value token = static_cast<Token::Value>(one_char_tokens[c0_]); 258 Token::Value token = static_cast<Token::Value>(one_char_tokens[c0_]);
258 if (token != Token::ILLEGAL) { 259 if (token != Token::ILLEGAL) {
259 int pos = source_pos(); 260 int pos = source_pos();
260 next_.token = token; 261 next_.token = token;
261 next_.location.beg_pos = pos; 262 next_.location.beg_pos = pos;
262 next_.location.end_pos = pos + 1; 263 next_.location.end_pos = pos + 1;
263 Advance(); 264 Advance();
264 return current_.token; 265 return current_.token;
265 } 266 }
266 } 267 }
267 Scan(); 268 Scan();
268 return current_.token; 269 return current_.token;
269 } 270 }
270 271
271 272
272 Token::Value Scanner::PeekAhead() { 273 Token::Value Scanner::PeekAhead() {
273 if (next_next_.token != Token::UNINITIALIZED) { 274 if (next_next_.token != Token::UNINITIALIZED) {
274 return next_next_.token; 275 return next_next_.token;
275 } 276 }
276 TokenDesc prev = current_; 277 TokenDesc prev = current_;
278 bool has_line_terminator_before_next =
279 has_line_terminator_before_next_ || has_multiline_comment_before_next_;
277 Next(); 280 Next();
281 has_line_terminator_after_next_ =
282 has_line_terminator_before_next_ || has_multiline_comment_before_next_;
283 has_line_terminator_before_next_ = has_line_terminator_before_next;
278 Token::Value ret = next_.token; 284 Token::Value ret = next_.token;
279 next_next_ = next_; 285 next_next_ = next_;
280 next_ = current_; 286 next_ = current_;
281 current_ = prev; 287 current_ = prev;
282 return ret; 288 return ret;
283 } 289 }
284 290
285 291
286 // TODO(yangguo): check whether this is actually necessary. 292 // TODO(yangguo): check whether this is actually necessary.
287 static inline bool IsLittleEndianByteOrderMark(uc32 c) { 293 static inline bool IsLittleEndianByteOrderMark(uc32 c) {
(...skipping 841 matching lines...) Expand 10 before | Expand all | Expand 10 after
1129 const bool unicode = true; 1135 const bool unicode = true;
1130 return ScanHexNumber<capture_raw, unicode>(4); 1136 return ScanHexNumber<capture_raw, unicode>(4);
1131 } 1137 }
1132 1138
1133 1139
1134 // ---------------------------------------------------------------------------- 1140 // ----------------------------------------------------------------------------
1135 // Keyword Matcher 1141 // Keyword Matcher
1136 1142
1137 #define KEYWORDS(KEYWORD_GROUP, KEYWORD) \ 1143 #define KEYWORDS(KEYWORD_GROUP, KEYWORD) \
1138 KEYWORD_GROUP('a') \ 1144 KEYWORD_GROUP('a') \
1145 KEYWORD("async", Token::ASYNC) \
1139 KEYWORD("await", Token::AWAIT) \ 1146 KEYWORD("await", Token::AWAIT) \
1140 KEYWORD_GROUP('b') \ 1147 KEYWORD_GROUP('b') \
1141 KEYWORD("break", Token::BREAK) \ 1148 KEYWORD("break", Token::BREAK) \
1142 KEYWORD_GROUP('c') \ 1149 KEYWORD_GROUP('c') \
1143 KEYWORD("case", Token::CASE) \ 1150 KEYWORD("case", Token::CASE) \
1144 KEYWORD("catch", Token::CATCH) \ 1151 KEYWORD("catch", Token::CATCH) \
1145 KEYWORD("class", Token::CLASS) \ 1152 KEYWORD("class", Token::CLASS) \
1146 KEYWORD("const", Token::CONST) \ 1153 KEYWORD("const", Token::CONST) \
1147 KEYWORD("continue", Token::CONTINUE) \ 1154 KEYWORD("continue", Token::CONTINUE) \
1148 KEYWORD_GROUP('d') \ 1155 KEYWORD_GROUP('d') \
(...skipping 538 matching lines...) Expand 10 before | Expand all | Expand 10 after
1687 backing_store_.Add(static_cast<uint8_t>((one_byte_length >> 7) | 0x80u)); 1694 backing_store_.Add(static_cast<uint8_t>((one_byte_length >> 7) | 0x80u));
1688 } 1695 }
1689 backing_store_.Add(static_cast<uint8_t>(one_byte_length & 0x7f)); 1696 backing_store_.Add(static_cast<uint8_t>(one_byte_length & 0x7f));
1690 1697
1691 backing_store_.AddBlock(bytes); 1698 backing_store_.AddBlock(bytes);
1692 return backing_store_.EndSequence().start(); 1699 return backing_store_.EndSequence().start();
1693 } 1700 }
1694 1701
1695 } // namespace internal 1702 } // namespace internal
1696 } // namespace v8 1703 } // namespace v8
OLDNEW
« no previous file with comments | « src/parsing/scanner.h ('k') | src/parsing/token.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698