Index: src/scanner.h |
diff --git a/src/scanner.h b/src/scanner.h |
index 92588905ad609b7ea64d8c5c7c2007d3e55d409b..393f0a0981f7853f4a9a84c7559899ae9e311489 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,8 @@ class Scanner { |
// Initialize current_ to not refer to a literal. |
current_.literal_chars = NULL; |
current_.raw_literal_chars = NULL; |
+ uber_next_.token = Token::UNINITIALIZED; |
+ prev_.token = Token::UNINITIALIZED; |
} |
// Support BookmarkScope functionality. |
@@ -539,16 +543,23 @@ 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_buffers_[0]) |
adamk
2015/08/15 00:28:31
Why switch to using an array for this? The advanta
adamk
2015/08/17 18:24:39
I didn't see this addressed in the latest patch.
Dan Ehrenberg
2015/08/17 18:35:19
Oops, fixed.
|
+ ? &literal_buffers_[1] |
+ : (current_.literal_chars == &literal_buffers_[1]) |
+ ? &literal_buffers_[2] |
+ : &literal_buffers_[0]; |
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_buffers_[0]) |
+ ? &raw_literal_buffers_[1] |
+ : (current_.raw_literal_chars == &raw_literal_buffers_[1]) |
+ ? &raw_literal_buffers_[2] |
+ : &raw_literal_buffers_[0]; |
free_buffer->Reset(); |
next_.raw_literal_chars = free_buffer; |
} |
@@ -725,19 +736,19 @@ class Scanner { |
UnicodeCache* unicode_cache_; |
// Buffers collecting literal strings, numbers, etc. |
- LiteralBuffer literal_buffer1_; |
- LiteralBuffer literal_buffer2_; |
+ LiteralBuffer literal_buffers_[3]; |
// Values parsed from magic comments. |
LiteralBuffer source_url_; |
LiteralBuffer source_mapping_url_; |
// Buffer to store raw string values |
- LiteralBuffer raw_literal_buffer1_; |
- LiteralBuffer raw_literal_buffer2_; |
+ LiteralBuffer raw_literal_buffers_[3]; |
- 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 uber_next_; // desc for the token after next (push-back) |
adamk
2015/08/15 00:28:31
I think "next_next_" is clearer in English. That's
|
+ TokenDesc prev_; // desc for the previous token (stash for pushback) |
// Variables for Scanner::BookmarkScope and the *Bookmark implementation. |
// These variables contain the scanner state when a bookmark is set. |