| Index: src/scanner-base.h
|
| diff --git a/src/scanner-base.h b/src/scanner-base.h
|
| index 22844bbaf9f1757e539d45bd0eecd80a6379741e..d3776e5f8996719561bd037f6c764e28171608d0 100644
|
| --- a/src/scanner-base.h
|
| +++ b/src/scanner-base.h
|
| @@ -542,151 +542,6 @@ class JavaScriptScanner : public Scanner {
|
| bool has_multiline_comment_before_next_;
|
| };
|
|
|
| -
|
| -// ----------------------------------------------------------------------------
|
| -// Keyword matching state machine.
|
| -
|
| -class KeywordMatcher {
|
| -// Incrementally recognize keywords.
|
| -//
|
| -// We distinguish between normal future reserved words and words that are
|
| -// considered to be future reserved words only in strict mode as required by
|
| -// ECMA-262 7.6.1.2.
|
| -//
|
| -// Recognized as keywords:
|
| -// break, case, catch, const*, continue, debugger, default, delete, do,
|
| -// else, finally, false, for, function, if, in, instanceof, new, null,
|
| -// return, switch, this, throw, true, try, typeof, var, void, while, with.
|
| -//
|
| -// Recognized as Future Reserved Keywords:
|
| -// class, enum, export, extends, import, super.
|
| -//
|
| -// Recognized as Future Reserved Keywords (strict mode only):
|
| -// implements, interface, let, package, private, protected, public,
|
| -// static, yield.
|
| -//
|
| -// *: Actually a "future reserved keyword". It's the only one we are
|
| -// recognizing outside of ES5 strict mode, the remaining are allowed
|
| -// as identifiers.
|
| -//
|
| - public:
|
| - KeywordMatcher()
|
| - : state_(INITIAL),
|
| - token_(Token::IDENTIFIER),
|
| - keyword_(NULL),
|
| - counter_(0),
|
| - keyword_token_(Token::ILLEGAL) {}
|
| -
|
| - Token::Value token() { return token_; }
|
| -
|
| - inline bool AddChar(unibrow::uchar input) {
|
| - if (state_ != UNMATCHABLE) {
|
| - Step(input);
|
| - }
|
| - return state_ != UNMATCHABLE;
|
| - }
|
| -
|
| - void Fail() {
|
| - token_ = Token::IDENTIFIER;
|
| - state_ = UNMATCHABLE;
|
| - }
|
| -
|
| - private:
|
| - enum State {
|
| - UNMATCHABLE,
|
| - INITIAL,
|
| - KEYWORD_PREFIX,
|
| - KEYWORD_MATCHED,
|
| - C,
|
| - CA,
|
| - CO,
|
| - CON,
|
| - D,
|
| - DE,
|
| - E,
|
| - EX,
|
| - F,
|
| - I,
|
| - IM,
|
| - IMP,
|
| - IN,
|
| - N,
|
| - P,
|
| - PR,
|
| - S,
|
| - T,
|
| - TH,
|
| - TR,
|
| - V,
|
| - W
|
| - };
|
| -
|
| - struct FirstState {
|
| - const char* keyword;
|
| - State state;
|
| - Token::Value token;
|
| - };
|
| -
|
| - // Range of possible first characters of a keyword.
|
| - static const unsigned int kFirstCharRangeMin = 'b';
|
| - static const unsigned int kFirstCharRangeMax = 'y';
|
| - static const unsigned int kFirstCharRangeLength =
|
| - kFirstCharRangeMax - kFirstCharRangeMin + 1;
|
| - // State map for first keyword character range.
|
| - static const FirstState first_states_[kFirstCharRangeLength];
|
| -
|
| - // If input equals keyword's character at position, continue matching keyword
|
| - // from that position.
|
| - inline bool MatchKeywordStart(unibrow::uchar input,
|
| - const char* keyword,
|
| - int position,
|
| - Token::Value token_if_match) {
|
| - if (input != static_cast<unibrow::uchar>(keyword[position])) {
|
| - return false;
|
| - }
|
| - state_ = KEYWORD_PREFIX;
|
| - this->keyword_ = keyword;
|
| - this->counter_ = position + 1;
|
| - this->keyword_token_ = token_if_match;
|
| - return true;
|
| - }
|
| -
|
| - // If input equals match character, transition to new state and return true.
|
| - inline bool MatchState(unibrow::uchar input, char match, State new_state) {
|
| - if (input != static_cast<unibrow::uchar>(match)) {
|
| - return false;
|
| - }
|
| - state_ = new_state;
|
| - return true;
|
| - }
|
| -
|
| - inline bool MatchKeyword(unibrow::uchar input,
|
| - char match,
|
| - State new_state,
|
| - Token::Value keyword_token) {
|
| - if (input != static_cast<unibrow::uchar>(match)) {
|
| - return false;
|
| - }
|
| - state_ = new_state;
|
| - token_ = keyword_token;
|
| - return true;
|
| - }
|
| -
|
| - void Step(unibrow::uchar input);
|
| -
|
| - // Current state.
|
| - State state_;
|
| - // Token for currently added characters.
|
| - Token::Value token_;
|
| -
|
| - // Matching a specific keyword string (there is only one possible valid
|
| - // keyword with the current prefix).
|
| - const char* keyword_;
|
| - int counter_;
|
| - Token::Value keyword_token_;
|
| -};
|
| -
|
| -
|
| } } // namespace v8::internal
|
|
|
| #endif // V8_SCANNER_BASE_H_
|
|
|