Index: src/scanner-base.cc |
diff --git a/src/scanner-base.cc b/src/scanner-base.cc |
index 66bbcf94a231269e4ffd8cf624c79ee0bd01b73c..ba262d072b6fcac21f8152588246827e641dc460 100644 |
--- a/src/scanner-base.cc |
+++ b/src/scanner-base.cc |
@@ -89,10 +89,158 @@ void JavaScriptScanner::Initialize(UC16CharacterStream* source) { |
Scan(); |
} |
+ |
+// Ensure that tokens can be stored in a byte. |
+STATIC_ASSERT(Token::NUM_TOKENS <= 0x100); |
+ |
+// Table of one-character tokens, by character (0x00..0x7f only). |
+static byte one_char_tokens[] = { |
+ Token::ILLEGAL, |
+ Token::ILLEGAL, |
+ Token::ILLEGAL, |
+ Token::ILLEGAL, |
+ Token::ILLEGAL, |
+ Token::ILLEGAL, |
+ Token::ILLEGAL, |
+ Token::ILLEGAL, |
+ Token::ILLEGAL, |
+ Token::ILLEGAL, |
+ Token::ILLEGAL, |
+ Token::ILLEGAL, |
+ Token::ILLEGAL, |
+ Token::ILLEGAL, |
+ Token::ILLEGAL, |
+ Token::ILLEGAL, |
+ Token::ILLEGAL, |
+ Token::ILLEGAL, |
+ Token::ILLEGAL, |
+ Token::ILLEGAL, |
+ Token::ILLEGAL, |
+ Token::ILLEGAL, |
+ Token::ILLEGAL, |
+ Token::ILLEGAL, |
+ Token::ILLEGAL, |
+ Token::ILLEGAL, |
+ Token::ILLEGAL, |
+ Token::ILLEGAL, |
+ Token::ILLEGAL, |
+ Token::ILLEGAL, |
+ Token::ILLEGAL, |
+ Token::ILLEGAL, |
+ Token::ILLEGAL, |
+ Token::ILLEGAL, |
+ Token::ILLEGAL, |
+ Token::ILLEGAL, |
+ Token::ILLEGAL, |
+ Token::ILLEGAL, |
+ Token::ILLEGAL, |
+ Token::ILLEGAL, |
+ Token::LPAREN, // 0x28 |
+ Token::RPAREN, // 0x29 |
+ Token::ILLEGAL, |
+ Token::ILLEGAL, |
+ Token::COMMA, // 0x2c |
+ Token::ILLEGAL, |
+ Token::ILLEGAL, |
+ Token::ILLEGAL, |
+ Token::ILLEGAL, // 0x30 |
Rico
2011/08/09 10:16:19
Why?
Lasse Reichstein
2011/08/09 11:27:12
At some point I thought I wanted to know where I w
|
+ Token::ILLEGAL, |
+ Token::ILLEGAL, |
+ Token::ILLEGAL, |
+ Token::ILLEGAL, |
+ Token::ILLEGAL, |
+ Token::ILLEGAL, |
+ Token::ILLEGAL, |
+ Token::ILLEGAL, |
+ Token::ILLEGAL, |
+ Token::COLON, // 0x3a |
+ Token::ILLEGAL, |
Lasse Reichstein
2011/08/09 11:27:12
Added semicolon.
|
+ Token::ILLEGAL, |
+ Token::ILLEGAL, |
+ Token::ILLEGAL, |
+ Token::CONDITIONAL, // 0x3f |
+ Token::ILLEGAL, |
+ Token::ILLEGAL, |
+ Token::ILLEGAL, |
+ Token::ILLEGAL, |
+ Token::ILLEGAL, |
+ Token::ILLEGAL, |
+ Token::ILLEGAL, |
+ Token::ILLEGAL, |
+ Token::ILLEGAL, |
+ Token::ILLEGAL, |
+ Token::ILLEGAL, |
+ Token::ILLEGAL, |
+ Token::ILLEGAL, |
+ Token::ILLEGAL, |
+ Token::ILLEGAL, |
+ Token::ILLEGAL, |
+ Token::ILLEGAL, |
+ Token::ILLEGAL, |
+ Token::ILLEGAL, |
+ Token::ILLEGAL, |
+ Token::ILLEGAL, |
+ Token::ILLEGAL, |
+ Token::ILLEGAL, |
+ Token::ILLEGAL, |
+ Token::ILLEGAL, |
+ Token::ILLEGAL, |
+ Token::ILLEGAL, |
+ Token::LBRACK, // 0x5b |
+ Token::ILLEGAL, |
+ Token::RBRACK, // 0x5d |
+ Token::ILLEGAL, |
+ Token::ILLEGAL, |
+ Token::ILLEGAL, |
+ Token::ILLEGAL, |
+ Token::ILLEGAL, |
+ Token::ILLEGAL, |
+ Token::ILLEGAL, |
+ Token::ILLEGAL, |
+ Token::ILLEGAL, |
+ Token::ILLEGAL, |
+ Token::ILLEGAL, |
+ Token::ILLEGAL, |
+ Token::ILLEGAL, |
+ Token::ILLEGAL, |
+ Token::ILLEGAL, |
+ Token::ILLEGAL, |
+ Token::ILLEGAL, |
+ Token::ILLEGAL, |
+ Token::ILLEGAL, |
+ Token::ILLEGAL, |
+ Token::ILLEGAL, |
+ Token::ILLEGAL, |
+ Token::ILLEGAL, |
+ Token::ILLEGAL, |
+ Token::ILLEGAL, |
+ Token::ILLEGAL, |
+ Token::ILLEGAL, |
+ Token::ILLEGAL, |
+ Token::ILLEGAL, |
+ Token::LBRACE, // 0x7b |
+ Token::ILLEGAL, |
+ Token::RBRACE, // 0x7d |
+ Token::BIT_NOT, // 0x7e |
+ Token::ILLEGAL |
+}; |
+ |
+ |
Token::Value JavaScriptScanner::Next() { |
current_ = next_; |
has_line_terminator_before_next_ = false; |
has_multiline_comment_before_next_ = false; |
+ if (static_cast<unsigned>(c0_) <= 0x7f) { |
+ Token::Value token = static_cast<Token::Value>(one_char_tokens[c0_]); |
+ if (token != Token::ILLEGAL) { |
+ int pos = source_pos(); |
+ next_.token = token; |
+ next_.location.beg_pos = pos; |
+ next_.location.end_pos = pos + 1; |
+ Advance(); |
+ return current_.token; |
+ } |
+ } |
Scan(); |
return current_.token; |
} |