| Index: src/parsing/scanner.h
|
| diff --git a/src/parsing/scanner.h b/src/parsing/scanner.h
|
| index d43bb65cd493885c9a916eca67cafc68eaca6648..9a4aac1253036799f7621ad206fc70a5e30b6236 100644
|
| --- a/src/parsing/scanner.h
|
| +++ b/src/parsing/scanner.h
|
| @@ -110,26 +110,15 @@ class Utf16CharacterStream {
|
| Back2();
|
| #endif // DEBUG
|
| }
|
| - bool SetBookmark() {
|
| - bookmark_ = pos();
|
| - return true;
|
| - }
|
| - void ResetToBookmark() {
|
| - DCHECK_NE(bookmark_, kNoBookmark);
|
| - Seek(bookmark_);
|
| - }
|
|
|
| protected:
|
| - static const size_t kNoBookmark;
|
| -
|
| Utf16CharacterStream(const uint16_t* buffer_start,
|
| const uint16_t* buffer_cursor,
|
| const uint16_t* buffer_end, size_t buffer_pos)
|
| : buffer_start_(buffer_start),
|
| buffer_cursor_(buffer_cursor),
|
| buffer_end_(buffer_end),
|
| - buffer_pos_(buffer_pos),
|
| - bookmark_(kNoBookmark) {}
|
| + buffer_pos_(buffer_pos) {}
|
| Utf16CharacterStream() : Utf16CharacterStream(nullptr, nullptr, nullptr, 0) {}
|
|
|
| void ReadBlockAt(size_t new_pos) {
|
| @@ -173,7 +162,6 @@ class Utf16CharacterStream {
|
| const uint16_t* buffer_cursor_;
|
| const uint16_t* buffer_end_;
|
| size_t buffer_pos_;
|
| - size_t bookmark_;
|
| };
|
|
|
|
|
| @@ -185,18 +173,23 @@ class Scanner {
|
| // Scoped helper for a re-settable bookmark.
|
| class BookmarkScope {
|
| public:
|
| - explicit BookmarkScope(Scanner* scanner) : scanner_(scanner) {
|
| + explicit BookmarkScope(Scanner* scanner)
|
| + : scanner_(scanner), bookmark_(kNoBookmark) {
|
| DCHECK_NOT_NULL(scanner_);
|
| }
|
| - ~BookmarkScope() { scanner_->DropBookmark(); }
|
| + ~BookmarkScope() {}
|
|
|
| - bool Set() { return scanner_->SetBookmark(); }
|
| - void Reset() { scanner_->ResetToBookmark(); }
|
| - bool HasBeenSet() { return scanner_->BookmarkHasBeenSet(); }
|
| - bool HasBeenReset() { return scanner_->BookmarkHasBeenReset(); }
|
| + void Set();
|
| + void Reset();
|
| + bool HasBeenSet();
|
| + bool HasBeenReset();
|
|
|
| private:
|
| + static const size_t kNoBookmark;
|
| + static const size_t kBookmarkWasApplied;
|
| +
|
| Scanner* scanner_;
|
| + size_t bookmark_;
|
|
|
| DISALLOW_COPY_AND_ASSIGN(BookmarkScope);
|
| };
|
| @@ -449,23 +442,6 @@ class Scanner {
|
|
|
| Handle<String> Internalize(Isolate* isolate) const;
|
|
|
| - void CopyFrom(const LiteralBuffer* other) {
|
| - if (other == nullptr) {
|
| - Reset();
|
| - } else {
|
| - is_one_byte_ = other->is_one_byte_;
|
| - position_ = other->position_;
|
| - if (position_ < backing_store_.length()) {
|
| - std::copy(other->backing_store_.begin(),
|
| - other->backing_store_.begin() + position_,
|
| - backing_store_.begin());
|
| - } else {
|
| - backing_store_.Dispose();
|
| - backing_store_ = other->backing_store_.Clone();
|
| - }
|
| - }
|
| - }
|
| -
|
| private:
|
| static const int kInitialCapacity = 16;
|
| static const int kGrowthFactory = 4;
|
| @@ -559,15 +535,6 @@ class Scanner {
|
| scanner_error_ = MessageTemplate::kNone;
|
| }
|
|
|
| - // Support BookmarkScope functionality.
|
| - bool SetBookmark();
|
| - void ResetToBookmark();
|
| - bool BookmarkHasBeenSet();
|
| - bool BookmarkHasBeenReset();
|
| - void DropBookmark();
|
| - void CopyToNextTokenDesc(TokenDesc* from);
|
| - static void CopyTokenDesc(TokenDesc* to, TokenDesc* from);
|
| -
|
| void ReportScannerError(const Location& location,
|
| MessageTemplate::Template error) {
|
| if (has_error()) return;
|
| @@ -581,6 +548,8 @@ class Scanner {
|
| scanner_error_location_ = Location(pos, pos + 1);
|
| }
|
|
|
| + void Seek(size_t position);
|
| +
|
| // Literal buffer support
|
| inline void StartLiteral() {
|
| LiteralBuffer* free_buffer =
|
| @@ -821,37 +790,6 @@ class Scanner {
|
| TokenDesc next_; // desc for next token (one token look-ahead)
|
| TokenDesc next_next_; // desc for the token after next (after PeakAhead())
|
|
|
| - // Variables for Scanner::BookmarkScope and the *Bookmark implementation.
|
| - // These variables contain the scanner state when a bookmark is set.
|
| - //
|
| - // We will use bookmark_c0_ as a 'control' variable, where:
|
| - // - bookmark_c0_ >= 0: A bookmark has been set and this contains c0_.
|
| - // - bookmark_c0_ == -1: No bookmark has been set.
|
| - // - bookmark_c0_ == -2: The bookmark has been applied (ResetToBookmark).
|
| - //
|
| - // Which state is being bookmarked? The parser state is distributed over
|
| - // several variables, roughly like this:
|
| - // ... 1234 + 5678 ..... [character stream]
|
| - // [current_] [next_] c0_ | [scanner state]
|
| - // So when the scanner is logically at the beginning of an expression
|
| - // like "1234 + 4567", then:
|
| - // - current_ contains "1234"
|
| - // - next_ contains "+"
|
| - // - c0_ contains ' ' (the space between "+" and "5678",
|
| - // - the source_ character stream points to the beginning of "5678".
|
| - // To be able to restore this state, we will keep copies of current_, next_,
|
| - // and c0_; we'll ask the stream to bookmark itself, and we'll copy the
|
| - // contents of current_'s and next_'s literal buffers to bookmark_*_literal_.
|
| - static const uc32 kNoBookmark = -1;
|
| - static const uc32 kBookmarkWasApplied = -2;
|
| - uc32 bookmark_c0_;
|
| - TokenDesc bookmark_current_;
|
| - TokenDesc bookmark_next_;
|
| - LiteralBuffer bookmark_current_literal_;
|
| - LiteralBuffer bookmark_current_raw_literal_;
|
| - LiteralBuffer bookmark_next_literal_;
|
| - LiteralBuffer bookmark_next_raw_literal_;
|
| -
|
| // Input stream. Must be initialized to an Utf16CharacterStream.
|
| Utf16CharacterStream* source_;
|
|
|
|
|