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

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: Same, plus a rebase and conflicts resolved 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
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 377 matching lines...) Expand 10 before | Expand all | Expand 10 after
388 token = Select('=', Token::ASSIGN_SHR, Token::SHR); 388 token = Select('=', Token::ASSIGN_SHR, Token::SHR);
389 } else { 389 } else {
390 token = Token::SAR; 390 token = Token::SAR;
391 } 391 }
392 } else { 392 } else {
393 token = Token::GT; 393 token = Token::GT;
394 } 394 }
395 break; 395 break;
396 396
397 case '=': 397 case '=':
398 // = == === 398 // = == === =>
399 Advance(); 399 Advance();
400 if (c0_ == '=') { 400 if (c0_ == '=') {
401 token = Select('=', Token::EQ_STRICT, Token::EQ); 401 token = Select('=', Token::EQ_STRICT, Token::EQ);
402 } else if (c0_ == '>') {
403 token = Select(Token::ARROW);
402 } else { 404 } else {
403 token = Token::ASSIGN; 405 token = Token::ASSIGN;
404 } 406 }
405 break; 407 break;
406 408
407 case '!': 409 case '!':
408 // ! != !== 410 // ! != !==
409 Advance(); 411 Advance();
410 if (c0_ == '=') { 412 if (c0_ == '=') {
411 token = Select('=', Token::NE_STRICT, Token::NE); 413 token = Select('=', Token::NE_STRICT, Token::NE);
(...skipping 509 matching lines...) Expand 10 before | Expand all | Expand 10 after
921 (keyword_length <= 9 || input[9] == keyword[9])) { \ 923 (keyword_length <= 9 || input[9] == keyword[9])) { \
922 return token; \ 924 return token; \
923 } \ 925 } \
924 } 926 }
925 KEYWORDS(KEYWORD_GROUP_CASE, KEYWORD) 927 KEYWORDS(KEYWORD_GROUP_CASE, KEYWORD)
926 } 928 }
927 return Token::IDENTIFIER; 929 return Token::IDENTIFIER;
928 } 930 }
929 931
930 932
933 bool Scanner::IdentifierIsFutureStrictReserved(
934 const AstRawString* string) const {
935 // Keywords are always 1-byte strings.
936 return string->is_one_byte() &&
937 Token::FUTURE_STRICT_RESERVED_WORD == KeywordOrIdentifierToken(
938 string->raw_data(), string->length(),
939 harmony_scoping_, harmony_modules_);
940 }
941
942
931 Token::Value Scanner::ScanIdentifierOrKeyword() { 943 Token::Value Scanner::ScanIdentifierOrKeyword() {
932 ASSERT(unicode_cache_->IsIdentifierStart(c0_)); 944 ASSERT(unicode_cache_->IsIdentifierStart(c0_));
933 LiteralScope literal(this); 945 LiteralScope literal(this);
934 // Scan identifier start character. 946 // Scan identifier start character.
935 if (c0_ == '\\') { 947 if (c0_ == '\\') {
936 uc32 c = ScanIdentifierUnicodeEscape(); 948 uc32 c = ScanIdentifierUnicodeEscape();
937 // Only allow legal identifier start characters. 949 // Only allow legal identifier start characters.
938 if (c < 0 || 950 if (c < 0 ||
939 c == '\\' || // No recursive escapes. 951 c == '\\' || // No recursive escapes.
940 !unicode_cache_->IsIdentifierStart(c)) { 952 !unicode_cache_->IsIdentifierStart(c)) {
(...skipping 324 matching lines...) Expand 10 before | Expand all | Expand 10 after
1265 } 1277 }
1266 backing_store_.Add(static_cast<uint8_t>((one_byte_length >> 7) | 0x80u)); 1278 backing_store_.Add(static_cast<uint8_t>((one_byte_length >> 7) | 0x80u));
1267 } 1279 }
1268 backing_store_.Add(static_cast<uint8_t>(one_byte_length & 0x7f)); 1280 backing_store_.Add(static_cast<uint8_t>(one_byte_length & 0x7f));
1269 1281
1270 backing_store_.AddBlock(bytes); 1282 backing_store_.AddBlock(bytes);
1271 return backing_store_.EndSequence().start(); 1283 return backing_store_.EndSequence().start();
1272 } 1284 }
1273 1285
1274 } } // namespace v8::internal 1286 } } // namespace v8::internal
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698