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

Side by Side Diff: src/scanner.cc

Issue 160073006: Implement handling of arrow functions in the parser (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: What "git cl format" produces Created 6 years, 5 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 | Annotate | Revision Log
« no previous file with comments | « src/scanner.h ('k') | src/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 <cmath> 7 #include <cmath>
8 8
9 #include "src/v8.h" 9 #include "src/v8.h"
10 10
(...skipping 448 matching lines...) Expand 10 before | Expand all | Expand 10 after
459 token = Select('=', Token::ASSIGN_SHR, Token::SHR); 459 token = Select('=', Token::ASSIGN_SHR, Token::SHR);
460 } else { 460 } else {
461 token = Token::SAR; 461 token = Token::SAR;
462 } 462 }
463 } else { 463 } else {
464 token = Token::GT; 464 token = Token::GT;
465 } 465 }
466 break; 466 break;
467 467
468 case '=': 468 case '=':
469 // = == === 469 // = == === =>
470 Advance(); 470 Advance();
471 if (c0_ == '=') { 471 if (c0_ == '=') {
472 token = Select('=', Token::EQ_STRICT, Token::EQ); 472 token = Select('=', Token::EQ_STRICT, Token::EQ);
473 } else if (c0_ == '>') {
474 token = Select(Token::ARROW);
473 } else { 475 } else {
474 token = Token::ASSIGN; 476 token = Token::ASSIGN;
475 } 477 }
476 break; 478 break;
477 479
478 case '!': 480 case '!':
479 // ! != !== 481 // ! != !==
480 Advance(); 482 Advance();
481 if (c0_ == '=') { 483 if (c0_ == '=') {
482 token = Select('=', Token::NE_STRICT, Token::NE); 484 token = Select('=', Token::NE_STRICT, Token::NE);
(...skipping 516 matching lines...) Expand 10 before | Expand all | Expand 10 after
999 (keyword_length <= 9 || input[9] == keyword[9])) { \ 1001 (keyword_length <= 9 || input[9] == keyword[9])) { \
1000 return token; \ 1002 return token; \
1001 } \ 1003 } \
1002 } 1004 }
1003 KEYWORDS(KEYWORD_GROUP_CASE, KEYWORD) 1005 KEYWORDS(KEYWORD_GROUP_CASE, KEYWORD)
1004 } 1006 }
1005 return Token::IDENTIFIER; 1007 return Token::IDENTIFIER;
1006 } 1008 }
1007 1009
1008 1010
1011 bool Scanner::IdentifierIsFutureStrictReserved(
1012 const AstRawString* string) const {
1013 // Keywords are always 1-byte strings.
1014 return string->is_one_byte() &&
1015 Token::FUTURE_STRICT_RESERVED_WORD ==
1016 KeywordOrIdentifierToken(string->raw_data(), string->length(),
1017 harmony_scoping_, harmony_modules_);
1018 }
1019
1020
1009 Token::Value Scanner::ScanIdentifierOrKeyword() { 1021 Token::Value Scanner::ScanIdentifierOrKeyword() {
1010 ASSERT(unicode_cache_->IsIdentifierStart(c0_)); 1022 ASSERT(unicode_cache_->IsIdentifierStart(c0_));
1011 LiteralScope literal(this); 1023 LiteralScope literal(this);
1012 // Scan identifier start character. 1024 // Scan identifier start character.
1013 if (c0_ == '\\') { 1025 if (c0_ == '\\') {
1014 uc32 c = ScanIdentifierUnicodeEscape(); 1026 uc32 c = ScanIdentifierUnicodeEscape();
1015 // Only allow legal identifier start characters. 1027 // Only allow legal identifier start characters.
1016 if (c < 0 || 1028 if (c < 0 ||
1017 c == '\\' || // No recursive escapes. 1029 c == '\\' || // No recursive escapes.
1018 !unicode_cache_->IsIdentifierStart(c)) { 1030 !unicode_cache_->IsIdentifierStart(c)) {
(...skipping 324 matching lines...) Expand 10 before | Expand all | Expand 10 after
1343 } 1355 }
1344 backing_store_.Add(static_cast<uint8_t>((one_byte_length >> 7) | 0x80u)); 1356 backing_store_.Add(static_cast<uint8_t>((one_byte_length >> 7) | 0x80u));
1345 } 1357 }
1346 backing_store_.Add(static_cast<uint8_t>(one_byte_length & 0x7f)); 1358 backing_store_.Add(static_cast<uint8_t>(one_byte_length & 0x7f));
1347 1359
1348 backing_store_.AddBlock(bytes); 1360 backing_store_.AddBlock(bytes);
1349 return backing_store_.EndSequence().start(); 1361 return backing_store_.EndSequence().start();
1350 } 1362 }
1351 1363
1352 } } // namespace v8::internal 1364 } } // namespace v8::internal
OLDNEW
« no previous file with comments | « src/scanner.h ('k') | src/token.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698