| Index: src/scanner-base.cc
|
| diff --git a/src/scanner-base.cc b/src/scanner-base.cc
|
| index 16f8db5a986d398288c2449d07ee7da9422eaa80..53cf1450f9920eeb5b6188dad879c404bf727ad6 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,
|
| + Token::ILLEGAL,
|
| + Token::ILLEGAL,
|
| + Token::ILLEGAL,
|
| + Token::ILLEGAL,
|
| + Token::ILLEGAL,
|
| + Token::ILLEGAL,
|
| + Token::ILLEGAL,
|
| + Token::ILLEGAL,
|
| + Token::ILLEGAL,
|
| + Token::COLON, // 0x3a
|
| + Token::SEMICOLON, // 0x3b
|
| + 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;
|
| }
|
| @@ -171,7 +319,7 @@ Token::Value JavaScriptScanner::SkipMultiLineComment() {
|
| Advance();
|
|
|
| while (c0_ >= 0) {
|
| - char ch = c0_;
|
| + uc32 ch = c0_;
|
| Advance();
|
| if (unicode_cache_->IsLineTerminator(ch)) {
|
| // Following ECMA-262, section 7.4, a comment containing
|
| @@ -788,7 +936,7 @@ bool JavaScriptScanner::ScanRegExpFlags() {
|
| // ----------------------------------------------------------------------------
|
| // Keyword Matcher
|
|
|
| -KeywordMatcher::FirstState KeywordMatcher::first_states_[] = {
|
| +const KeywordMatcher::FirstState KeywordMatcher::first_states_[] = {
|
| { "break", KEYWORD_PREFIX, Token::BREAK },
|
| { NULL, C, Token::ILLEGAL },
|
| { NULL, D, Token::ILLEGAL },
|
|
|