| Index: src/scanner.h
|
| diff --git a/src/scanner.h b/src/scanner.h
|
| index 92588905ad609b7ea64d8c5c7c2007d3e55d409b..8ee8d0208a3a219749994803e0ceef22595bf906 100644
|
| --- a/src/scanner.h
|
| +++ b/src/scanner.h
|
| @@ -399,6 +399,8 @@ class Scanner {
|
|
|
| // Returns the next token and advances input.
|
| Token::Value Next();
|
| + // Returns the token following peek()
|
| + Token::Value PeekAhead();
|
| // Returns the current token again.
|
| Token::Value current_token() { return current_.token; }
|
| // Returns the location information for the current token
|
| @@ -527,6 +529,7 @@ class Scanner {
|
| // Initialize current_ to not refer to a literal.
|
| current_.literal_chars = NULL;
|
| current_.raw_literal_chars = NULL;
|
| + next_next_.token = Token::UNINITIALIZED;
|
| }
|
|
|
| // Support BookmarkScope functionality.
|
| @@ -539,16 +542,22 @@ class Scanner {
|
|
|
| // Literal buffer support
|
| inline void StartLiteral() {
|
| - LiteralBuffer* free_buffer = (current_.literal_chars == &literal_buffer1_) ?
|
| - &literal_buffer2_ : &literal_buffer1_;
|
| + LiteralBuffer* free_buffer =
|
| + (current_.literal_chars == &literal_buffer0_)
|
| + ? &literal_buffer1_
|
| + : (current_.literal_chars == &literal_buffer1_) ? &literal_buffer2_
|
| + : &literal_buffer0_;
|
| free_buffer->Reset();
|
| next_.literal_chars = free_buffer;
|
| }
|
|
|
| inline void StartRawLiteral() {
|
| LiteralBuffer* free_buffer =
|
| - (current_.raw_literal_chars == &raw_literal_buffer1_) ?
|
| - &raw_literal_buffer2_ : &raw_literal_buffer1_;
|
| + (current_.raw_literal_chars == &raw_literal_buffer0_)
|
| + ? &raw_literal_buffer1_
|
| + : (current_.raw_literal_chars == &raw_literal_buffer1_)
|
| + ? &raw_literal_buffer2_
|
| + : &raw_literal_buffer0_;
|
| free_buffer->Reset();
|
| next_.raw_literal_chars = free_buffer;
|
| }
|
| @@ -725,6 +734,7 @@ class Scanner {
|
| UnicodeCache* unicode_cache_;
|
|
|
| // Buffers collecting literal strings, numbers, etc.
|
| + LiteralBuffer literal_buffer0_;
|
| LiteralBuffer literal_buffer1_;
|
| LiteralBuffer literal_buffer2_;
|
|
|
| @@ -733,11 +743,13 @@ class Scanner {
|
| LiteralBuffer source_mapping_url_;
|
|
|
| // Buffer to store raw string values
|
| + LiteralBuffer raw_literal_buffer0_;
|
| LiteralBuffer raw_literal_buffer1_;
|
| LiteralBuffer raw_literal_buffer2_;
|
|
|
| - TokenDesc current_; // desc for current token (as returned by Next())
|
| - TokenDesc next_; // desc for next token (one token look-ahead)
|
| + TokenDesc current_; // desc for current token (as returned by Next())
|
| + TokenDesc next_; // desc for next token (one token look-ahead)
|
| + TokenDesc next_next_; // desc for the token after next (push-back)
|
|
|
| // Variables for Scanner::BookmarkScope and the *Bookmark implementation.
|
| // These variables contain the scanner state when a bookmark is set.
|
|
|