Chromium Code Reviews| Index: src/scanner.h |
| diff --git a/src/scanner.h b/src/scanner.h |
| index 9d7b34e7cadf2e335f0d27992c7855d0f9019e7a..8c35df690d233e7df0b91b626de44f64070c02a7 100644 |
| --- a/src/scanner.h |
| +++ b/src/scanner.h |
| @@ -252,18 +252,22 @@ class KeywordMatcher { |
| }; |
| +enum ParserMode { PARSE, PREPARSE }; |
| +enum ParserLanguage { JAVASCRIPT, JSON }; |
| + |
| + |
| class Scanner { |
| public: |
| - |
| typedef unibrow::Utf8InputBuffer<1024> Utf8Decoder; |
| // Construction |
| - explicit Scanner(bool is_pre_parsing); |
| + explicit Scanner(ParserMode parse_mode); |
| // Initialize the Scanner to scan source: |
| void Init(Handle<String> source, |
| unibrow::CharacterStream* stream, |
| - int position); |
| + int position, |
| + ParserLanguage language); |
| // Returns the next token. |
| Token::Value Next(); |
| @@ -377,6 +381,7 @@ class Scanner { |
| TokenDesc next_; // desc for next token (one token look-ahead) |
| bool has_line_terminator_before_next_; |
| bool is_pre_parsing_; |
| + bool is_parsing_json_; |
| // Literal buffer support |
| void StartLiteral(); |
| @@ -391,14 +396,35 @@ class Scanner { |
| c0_ = ch; |
| } |
| - bool SkipWhiteSpace(); |
| + bool SkipWhiteSpace() { |
| + if (is_parsing_json_) { |
| + return SkipJsonWhiteSpace(); |
| + } else { |
| + return SkipJavaScriptWhiteSpace(); |
| + } |
| + } |
| + bool SkipJavaScriptWhiteSpace(); |
| + bool SkipJsonWhiteSpace(); |
| Token::Value SkipSingleLineComment(); |
| Token::Value SkipMultiLineComment(); |
| inline Token::Value Select(Token::Value tok); |
| inline Token::Value Select(uc32 next, Token::Value then, Token::Value else_); |
| - void Scan(); |
| + inline void Scan() { |
| + if (is_parsing_json_) { |
| + ScanJson(); |
| + } else { |
| + ScanJavaScript(); |
| + } |
| + } |
| + void ScanJson(); |
| + void ScanJavaScript(); |
| + |
| + Token::Value ScanJsonNumber(); |
|
Mads Ager (chromium)
2010/02/01 08:42:19
For each of these Scan functions, please add a com
|
| + Token::Value ScanJsonString(); |
| + Token::Value ScanJsonIdentifier(const char* text, Token::Value token); |
| + |
| void ScanDecimalDigits(); |
| Token::Value ScanNumber(bool seen_period); |
| Token::Value ScanIdentifier(); |