Index: src/scanner.h |
diff --git a/src/scanner.h b/src/scanner.h |
index 5e18649671cb5f8e651b876f340776359d2fad75..a86ed07ab9c6395228df7b4eb66eaf1d030d6279 100644 |
--- a/src/scanner.h |
+++ b/src/scanner.h |
@@ -361,6 +361,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 |
@@ -489,6 +491,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. |
@@ -501,16 +504,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; |
} |
@@ -687,6 +696,7 @@ class Scanner { |
UnicodeCache* unicode_cache_; |
// Buffers collecting literal strings, numbers, etc. |
+ LiteralBuffer literal_buffer0_; |
LiteralBuffer literal_buffer1_; |
LiteralBuffer literal_buffer2_; |
@@ -695,11 +705,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 (after PeakAhead()) |
// Variables for Scanner::BookmarkScope and the *Bookmark implementation. |
// These variables contain the scanner state when a bookmark is set. |