| Index: src/parser.cc
|
| diff --git a/src/parser.cc b/src/parser.cc
|
| index 8a7eed30cd4a0edb9a7285b1eedc607ee0aae502..1f60163c0db97e2881cd08bd03b5868af7df165d 100644
|
| --- a/src/parser.cc
|
| +++ b/src/parser.cc
|
| @@ -536,7 +536,8 @@ Parser::FunctionState::~FunctionState() {
|
| // Implementation of Parser
|
|
|
| Parser::Parser(CompilationInfo* info)
|
| - : isolate_(info->isolate()),
|
| + : ParserBase(&scanner_, info->isolate()->stack_guard()->real_climit()),
|
| + isolate_(info->isolate()),
|
| symbol_cache_(0, info->zone()),
|
| script_(info->script()),
|
| scanner_(isolate_->unicode_cache()),
|
| @@ -548,11 +549,6 @@ Parser::Parser(CompilationInfo* info)
|
| extension_(info->extension()),
|
| pre_parse_data_(NULL),
|
| fni_(NULL),
|
| - allow_natives_syntax_(false),
|
| - allow_lazy_(false),
|
| - allow_generators_(false),
|
| - allow_for_of_(false),
|
| - stack_overflow_(false),
|
| parenthesized_function_(false),
|
| zone_(info->zone()),
|
| info_(info) {
|
| @@ -690,7 +686,7 @@ FunctionLiteral* Parser::DoParseProgram(CompilationInfo* info,
|
| result->set_ast_properties(factory()->visitor()->ast_properties());
|
| result->set_dont_optimize_reason(
|
| factory()->visitor()->dont_optimize_reason());
|
| - } else if (stack_overflow_) {
|
| + } else if (stack_overflow()) {
|
| isolate()->StackOverflow();
|
| }
|
| }
|
| @@ -787,7 +783,7 @@ FunctionLiteral* Parser::ParseLazy(Utf16CharacterStream* source) {
|
| ASSERT(target_stack_ == NULL);
|
|
|
| if (result == NULL) {
|
| - if (stack_overflow_) isolate()->StackOverflow();
|
| + if (stack_overflow()) isolate()->StackOverflow();
|
| } else {
|
| Handle<String> inferred_name(shared_info->inferred_name());
|
| result->set_inferred_name(inferred_name);
|
| @@ -3484,7 +3480,7 @@ void Parser::ReportUnexpectedToken(Token::Value token) {
|
| // We don't report stack overflows here, to avoid increasing the
|
| // stack depth even further. Instead we report it after parsing is
|
| // over, in ParseProgram/ParseJson.
|
| - if (token == Token::ILLEGAL && stack_overflow_) return;
|
| + if (token == Token::ILLEGAL && stack_overflow()) return;
|
| // Four of the tokens are treated specially
|
| switch (token) {
|
| case Token::EOS:
|
| @@ -4378,7 +4374,7 @@ FunctionLiteral* Parser::ParseFunctionLiteral(
|
| PreParser::PreParseResult result = LazyParseFunctionLiteral(&logger);
|
| if (result == PreParser::kPreParseStackOverflow) {
|
| // Propagate stack overflow.
|
| - stack_overflow_ = true;
|
| + set_stack_overflow();
|
| *ok = false;
|
| return NULL;
|
| }
|
| @@ -4613,7 +4609,7 @@ Expression* Parser::ParseV8Intrinsic(bool* ok) {
|
| }
|
|
|
|
|
| -bool Parser::peek_any_identifier() {
|
| +bool ParserBase::peek_any_identifier() {
|
| Token::Value next = peek();
|
| return next == Token::IDENTIFIER ||
|
| next == Token::FUTURE_RESERVED_WORD ||
|
| @@ -4622,32 +4618,6 @@ bool Parser::peek_any_identifier() {
|
| }
|
|
|
|
|
| -void Parser::Consume(Token::Value token) {
|
| - Token::Value next = Next();
|
| - USE(next);
|
| - USE(token);
|
| - ASSERT(next == token);
|
| -}
|
| -
|
| -
|
| -void Parser::Expect(Token::Value token, bool* ok) {
|
| - Token::Value next = Next();
|
| - if (next == token) return;
|
| - ReportUnexpectedToken(next);
|
| - *ok = false;
|
| -}
|
| -
|
| -
|
| -bool Parser::Check(Token::Value token) {
|
| - Token::Value next = peek();
|
| - if (next == token) {
|
| - Consume(next);
|
| - return true;
|
| - }
|
| - return false;
|
| -}
|
| -
|
| -
|
| bool Parser::CheckContextualKeyword(Vector<const char> keyword) {
|
| if (peek() == Token::IDENTIFIER &&
|
| scanner().is_next_contextual_keyword(keyword)) {
|
| @@ -4658,7 +4628,7 @@ bool Parser::CheckContextualKeyword(Vector<const char> keyword) {
|
| }
|
|
|
|
|
| -void Parser::ExpectSemicolon(bool* ok) {
|
| +void ParserBase::ExpectSemicolon(bool* ok) {
|
| // Check for automatic semicolon insertion according to
|
| // the rules given in ECMA-262, section 7.9, page 21.
|
| Token::Value tok = peek();
|
| @@ -4666,7 +4636,7 @@ void Parser::ExpectSemicolon(bool* ok) {
|
| Next();
|
| return;
|
| }
|
| - if (scanner().HasAnyLineTerminatorBeforeNext() ||
|
| + if (scanner()->HasAnyLineTerminatorBeforeNext() ||
|
| tok == Token::RBRACE ||
|
| tok == Token::EOS) {
|
| return;
|
|
|