Index: src/parsing/scanner.cc |
diff --git a/src/parsing/scanner.cc b/src/parsing/scanner.cc |
index be4100a0971688dea6165b9bf77cabe8a190185b..60695a0bba7ce5a243bf2eb530d593428ddac588 100644 |
--- a/src/parsing/scanner.cc |
+++ b/src/parsing/scanner.cc |
@@ -19,9 +19,6 @@ |
namespace v8 { |
namespace internal { |
-const size_t Utf16CharacterStream::kNoBookmark = |
- std::numeric_limits<size_t>::max(); |
- |
Handle<String> Scanner::LiteralBuffer::Internalize(Isolate* isolate) const { |
if (is_one_byte()) { |
return isolate->factory()->InternalizeOneByteString(one_byte_literal()); |
@@ -30,13 +27,13 @@ Handle<String> Scanner::LiteralBuffer::Internalize(Isolate* isolate) const { |
} |
- |
// ---------------------------------------------------------------------------- |
// Scanner |
Scanner::Scanner(UnicodeCache* unicode_cache) |
: unicode_cache_(unicode_cache), |
bookmark_c0_(kNoBookmark), |
+ bookmark_position_(0), |
octal_pos_(Location::invalid()), |
decimal_with_leading_zero_pos_(Location::invalid()), |
found_html_comment_(false) { |
@@ -789,7 +786,7 @@ void Scanner::SeekForward(int pos) { |
// Positions inside the lookahead token aren't supported. |
DCHECK(pos >= current_pos); |
if (pos != current_pos) { |
- source_->SeekForward(pos - source_->pos()); |
+ source_->Seek(pos); |
Advance(); |
// This function is only called to seek to the location |
// of the end of a function (at the "}" token). It doesn't matter |
@@ -1584,23 +1581,20 @@ int Scanner::FindSymbol(DuplicateFinder* finder, int value) { |
return finder->AddTwoByteSymbol(literal_two_byte_string(), value); |
} |
- |
-bool Scanner::SetBookmark() { |
- if (c0_ != kNoBookmark && bookmark_c0_ == kNoBookmark && |
- next_next_.token == Token::UNINITIALIZED && source_->SetBookmark()) { |
- bookmark_c0_ = c0_; |
- CopyTokenDesc(&bookmark_current_, ¤t_); |
- CopyTokenDesc(&bookmark_next_, &next_); |
- return true; |
- } |
- return false; |
+void Scanner::SetBookmark() { |
+ DCHECK_EQ(bookmark_c0_, kNoBookmark); |
+ DCHECK_EQ(next_next_.token, Token::UNINITIALIZED); |
+ bookmark_c0_ = c0_; |
+ bookmark_position_ = source_->pos(); |
+ CopyTokenDesc(&bookmark_current_, ¤t_); |
+ CopyTokenDesc(&bookmark_next_, &next_); |
} |
void Scanner::ResetToBookmark() { |
DCHECK(BookmarkHasBeenSet()); // Caller hasn't called SetBookmark. |
- source_->ResetToBookmark(); |
+ source_->Seek(bookmark_position_); |
c0_ = bookmark_c0_; |
CopyToNextTokenDesc(&bookmark_current_); |
current_ = next_; |
@@ -1608,9 +1602,9 @@ void Scanner::ResetToBookmark() { |
bookmark_c0_ = kBookmarkWasApplied; |
} |
- |
-bool Scanner::BookmarkHasBeenSet() { return bookmark_c0_ >= 0; } |
- |
+bool Scanner::BookmarkHasBeenSet() { |
+ return bookmark_c0_ != kNoBookmark && bookmark_c0_ != kBookmarkWasApplied; |
+} |
bool Scanner::BookmarkHasBeenReset() { |
return bookmark_c0_ == kBookmarkWasApplied; |