| Index: src/parsing/scanner.cc
|
| diff --git a/src/parsing/scanner.cc b/src/parsing/scanner.cc
|
| index 7ce84d1f21f582c3580cc5afe848c33443f67ad7..a941ff42013d9e4ffe9840cd8c394c52d855f14c 100644
|
| --- a/src/parsing/scanner.cc
|
| +++ b/src/parsing/scanner.cc
|
| @@ -27,9 +27,6 @@ Handle<String> Scanner::LiteralBuffer::Internalize(Isolate* isolate) const {
|
| }
|
|
|
|
|
| -// Default implementation for streams that do not support bookmarks.
|
| -bool Utf16CharacterStream::SetBookmark() { return false; }
|
| -void Utf16CharacterStream::ResetToBookmark() { UNREACHABLE(); }
|
|
|
|
|
| // ----------------------------------------------------------------------------
|
| @@ -312,7 +309,7 @@ bool Scanner::SkipWhiteSpace() {
|
| while (true) {
|
| while (true) {
|
| // The unicode cache accepts unsigned inputs.
|
| - if (c0_ < 0) break;
|
| + if (c0_ == kEndOfInput) break;
|
| // Advance as long as character is a WhiteSpace or LineTerminator.
|
| // Remember if the latter is the case.
|
| if (unicode_cache_->IsLineTerminator(c0_)) {
|
| @@ -356,7 +353,7 @@ Token::Value Scanner::SkipSingleLineComment() {
|
| // separately by the lexical grammar and becomes part of the
|
| // stream of input elements for the syntactic grammar (see
|
| // ECMA-262, section 7.4).
|
| - while (c0_ >= 0 && !unicode_cache_->IsLineTerminator(c0_)) {
|
| + while (c0_ != kEndOfInput && !unicode_cache_->IsLineTerminator(c0_)) {
|
| Advance();
|
| }
|
|
|
| @@ -366,7 +363,7 @@ Token::Value Scanner::SkipSingleLineComment() {
|
|
|
| Token::Value Scanner::SkipSourceURLComment() {
|
| TryToParseSourceURLComment();
|
| - while (c0_ >= 0 && !unicode_cache_->IsLineTerminator(c0_)) {
|
| + while (c0_ != kEndOfInput && !unicode_cache_->IsLineTerminator(c0_)) {
|
| Advance();
|
| }
|
|
|
| @@ -377,11 +374,11 @@ Token::Value Scanner::SkipSourceURLComment() {
|
| void Scanner::TryToParseSourceURLComment() {
|
| // Magic comments are of the form: //[#@]\s<name>=\s*<value>\s*.* and this
|
| // function will just return if it cannot parse a magic comment.
|
| - if (c0_ < 0 || !unicode_cache_->IsWhiteSpace(c0_)) return;
|
| + if (c0_ == kEndOfInput || !unicode_cache_->IsWhiteSpace(c0_)) return;
|
| Advance();
|
| LiteralBuffer name;
|
| - while (c0_ >= 0 && !unicode_cache_->IsWhiteSpaceOrLineTerminator(c0_) &&
|
| - c0_ != '=') {
|
| + while (c0_ != kEndOfInput &&
|
| + !unicode_cache_->IsWhiteSpaceOrLineTerminator(c0_) && c0_ != '=') {
|
| name.AddChar(c0_);
|
| Advance();
|
| }
|
| @@ -399,10 +396,10 @@ void Scanner::TryToParseSourceURLComment() {
|
| return;
|
| Advance();
|
| value->Reset();
|
| - while (c0_ >= 0 && unicode_cache_->IsWhiteSpace(c0_)) {
|
| + while (c0_ != kEndOfInput && unicode_cache_->IsWhiteSpace(c0_)) {
|
| Advance();
|
| }
|
| - while (c0_ >= 0 && !unicode_cache_->IsLineTerminator(c0_)) {
|
| + while (c0_ != kEndOfInput && !unicode_cache_->IsLineTerminator(c0_)) {
|
| // Disallowed characters.
|
| if (c0_ == '"' || c0_ == '\'') {
|
| value->Reset();
|
| @@ -415,7 +412,7 @@ void Scanner::TryToParseSourceURLComment() {
|
| Advance();
|
| }
|
| // Allow whitespace at the end.
|
| - while (c0_ >= 0 && !unicode_cache_->IsLineTerminator(c0_)) {
|
| + while (c0_ != kEndOfInput && !unicode_cache_->IsLineTerminator(c0_)) {
|
| if (!unicode_cache_->IsWhiteSpace(c0_)) {
|
| value->Reset();
|
| break;
|
| @@ -429,10 +426,10 @@ Token::Value Scanner::SkipMultiLineComment() {
|
| DCHECK(c0_ == '*');
|
| Advance();
|
|
|
| - while (c0_ >= 0) {
|
| + while (c0_ != kEndOfInput) {
|
| uc32 ch = c0_;
|
| Advance();
|
| - if (c0_ >= 0 && unicode_cache_->IsLineTerminator(ch)) {
|
| + if (c0_ != kEndOfInput && unicode_cache_->IsLineTerminator(ch)) {
|
| // Following ECMA-262, section 7.4, a comment containing
|
| // a newline will make the comment count as a line-terminator.
|
| has_multiline_comment_before_next_ = true;
|
| @@ -716,7 +713,7 @@ void Scanner::Scan() {
|
| break;
|
|
|
| default:
|
| - if (c0_ < 0) {
|
| + if (c0_ == kEndOfInput) {
|
| token = Token::EOS;
|
| } else if (unicode_cache_->IsIdentifierStart(c0_)) {
|
| token = ScanIdentifierOrKeyword();
|
| @@ -808,7 +805,8 @@ bool Scanner::ScanEscape() {
|
| Advance<capture_raw>();
|
|
|
| // Skip escaped newlines.
|
| - if (!in_template_literal && c0_ >= 0 && unicode_cache_->IsLineTerminator(c)) {
|
| + if (!in_template_literal && c0_ != kEndOfInput &&
|
| + unicode_cache_->IsLineTerminator(c)) {
|
| // Allow CR+LF newlines in multiline string literals.
|
| if (IsCarriageReturn(c) && IsLineFeed(c0_)) Advance<capture_raw>();
|
| // Allow LF+CR newlines in multiline string literals.
|
| @@ -894,7 +892,7 @@ Token::Value Scanner::ScanString() {
|
| HandleLeadSurrogate();
|
| break;
|
| }
|
| - if (c0_ < 0 || c0_ == '\n' || c0_ == '\r') return Token::ILLEGAL;
|
| + if (c0_ == kEndOfInput || c0_ == '\n' || c0_ == '\r') return Token::ILLEGAL;
|
| if (c0_ == quote) {
|
| literal.Complete();
|
| Advance<false, false>();
|
| @@ -906,12 +904,12 @@ Token::Value Scanner::ScanString() {
|
| AddLiteralChar(c);
|
| }
|
|
|
| - while (c0_ != quote && c0_ >= 0
|
| - && !unicode_cache_->IsLineTerminator(c0_)) {
|
| + while (c0_ != quote && c0_ != kEndOfInput &&
|
| + !unicode_cache_->IsLineTerminator(c0_)) {
|
| uc32 c = c0_;
|
| Advance();
|
| if (c == '\\') {
|
| - if (c0_ < 0 || !ScanEscape<false, false>()) {
|
| + if (c0_ == kEndOfInput || !ScanEscape<false, false>()) {
|
| return Token::ILLEGAL;
|
| }
|
| } else {
|
| @@ -957,7 +955,7 @@ Token::Value Scanner::ScanTemplateSpan() {
|
| ReduceRawLiteralLength(2);
|
| break;
|
| } else if (c == '\\') {
|
| - if (c0_ > 0 && unicode_cache_->IsLineTerminator(c0_)) {
|
| + if (c0_ != kEndOfInput && unicode_cache_->IsLineTerminator(c0_)) {
|
| // The TV of LineContinuation :: \ LineTerminatorSequence is the empty
|
| // code unit sequence.
|
| uc32 lastChar = c0_;
|
| @@ -1155,7 +1153,7 @@ Token::Value Scanner::ScanNumber(bool seen_period) {
|
| // section 7.8.3, page 17 (note that we read only one decimal digit
|
| // if the value is 0).
|
| if (IsDecimalDigit(c0_) ||
|
| - (c0_ >= 0 && unicode_cache_->IsIdentifierStart(c0_)))
|
| + (c0_ != kEndOfInput && unicode_cache_->IsIdentifierStart(c0_)))
|
| return Token::ILLEGAL;
|
|
|
| literal.Complete();
|
| @@ -1382,7 +1380,7 @@ Token::Value Scanner::ScanIdentifierOrKeyword() {
|
| }
|
|
|
| // Scan the rest of the identifier characters.
|
| - while (c0_ >= 0 && unicode_cache_->IsIdentifierPart(c0_)) {
|
| + while (c0_ != kEndOfInput && unicode_cache_->IsIdentifierPart(c0_)) {
|
| if (c0_ != '\\') {
|
| uc32 next_char = c0_;
|
| Advance();
|
| @@ -1408,7 +1406,7 @@ Token::Value Scanner::ScanIdentifierOrKeyword() {
|
| Token::Value Scanner::ScanIdentifierSuffix(LiteralScope* literal,
|
| bool escaped) {
|
| // Scan the rest of the identifier characters.
|
| - while (c0_ >= 0 && unicode_cache_->IsIdentifierPart(c0_)) {
|
| + while (c0_ != kEndOfInput && unicode_cache_->IsIdentifierPart(c0_)) {
|
| if (c0_ == '\\') {
|
| uc32 c = ScanIdentifierUnicodeEscape();
|
| escaped = true;
|
| @@ -1465,10 +1463,12 @@ bool Scanner::ScanRegExpPattern() {
|
| }
|
|
|
| while (c0_ != '/' || in_character_class) {
|
| - if (c0_ < 0 || unicode_cache_->IsLineTerminator(c0_)) return false;
|
| + if (c0_ == kEndOfInput || unicode_cache_->IsLineTerminator(c0_))
|
| + return false;
|
| if (c0_ == '\\') { // Escape sequence.
|
| AddLiteralCharAdvance();
|
| - if (c0_ < 0 || unicode_cache_->IsLineTerminator(c0_)) return false;
|
| + if (c0_ == kEndOfInput || unicode_cache_->IsLineTerminator(c0_))
|
| + return false;
|
| AddLiteralCharAdvance();
|
| // If the escape allows more characters, i.e., \x??, \u????, or \c?,
|
| // only "safe" characters are allowed (letters, digits, underscore),
|
| @@ -1499,7 +1499,7 @@ Maybe<RegExp::Flags> Scanner::ScanRegExpFlags() {
|
|
|
| // Scan regular expression flags.
|
| int flags = 0;
|
| - while (c0_ >= 0 && unicode_cache_->IsIdentifierPart(c0_)) {
|
| + while (c0_ != kEndOfInput && unicode_cache_->IsIdentifierPart(c0_)) {
|
| RegExp::Flags flag = RegExp::kNone;
|
| switch (c0_) {
|
| case 'g':
|
|
|