| Index: src/parser.cc
|
| diff --git a/src/parser.cc b/src/parser.cc
|
| index bd45f9d54ade55aaaff721e6be2d1c70b4577713..184f0a2a27efd2c7104c67dcfa63469b1f71ed84 100644
|
| --- a/src/parser.cc
|
| +++ b/src/parser.cc
|
| @@ -412,14 +412,6 @@ Scope* Parser::NewScope(Scope* parent, Scope::Type type, bool inside_with) {
|
| }
|
|
|
|
|
| -Scope* Parser::DeclarationScope() {
|
| - Scope* scope = top_scope_;
|
| - while (scope->is_catch_scope()) {
|
| - scope = scope->outer_scope();
|
| - }
|
| - return scope;
|
| -}
|
| -
|
| // ----------------------------------------------------------------------------
|
| // Target is a support class to facilitate manipulation of the
|
| // Parser's target_stack_ (the stack of potential 'break' and
|
| @@ -1310,7 +1302,7 @@ VariableProxy* Parser::Declare(Handle<String> name,
|
| // to the calling function context.
|
| // Similarly, strict mode eval scope does not leak variable declarations to
|
| // the caller's scope so we declare all locals, too.
|
| - Scope* declaration_scope = DeclarationScope();
|
| + Scope* declaration_scope = top_scope_->DeclarationScope();
|
| if (declaration_scope->is_function_scope() ||
|
| declaration_scope->is_strict_mode_eval_scope()) {
|
| // Declare the variable in the function scope.
|
| @@ -1421,7 +1413,7 @@ Statement* Parser::ParseNativeDeclaration(bool* ok) {
|
| // isn't lazily compiled. The extension structures are only
|
| // accessible while parsing the first time not when reparsing
|
| // because of lazy compilation.
|
| - DeclarationScope()->ForceEagerCompilation();
|
| + top_scope_->DeclarationScope()->ForceEagerCompilation();
|
|
|
| // Compute the function template for the native function.
|
| v8::Handle<v8::FunctionTemplate> fun_template =
|
| @@ -1525,7 +1517,7 @@ Block* Parser::ParseVariableDeclarations(bool accept_IN,
|
|
|
| Variable::Mode mode = Variable::VAR;
|
| bool is_const = false;
|
| - Scope* declaration_scope = DeclarationScope();
|
| + Scope* declaration_scope = top_scope_->DeclarationScope();
|
| if (peek() == Token::VAR) {
|
| Consume(Token::VAR);
|
| } else if (peek() == Token::CONST) {
|
| @@ -1915,7 +1907,7 @@ Statement* Parser::ParseReturnStatement(bool* ok) {
|
| // function. See ECMA-262, section 12.9, page 67.
|
| //
|
| // To be consistent with KJS we report the syntax error at runtime.
|
| - Scope* declaration_scope = DeclarationScope();
|
| + Scope* declaration_scope = top_scope_->DeclarationScope();
|
| if (declaration_scope->is_global_scope() ||
|
| declaration_scope->is_eval_scope()) {
|
| Handle<String> type = isolate()->factory()->illegal_return_symbol();
|
| @@ -1944,7 +1936,7 @@ Block* Parser::WithHelper(Expression* obj, ZoneStringList* labels, bool* ok) {
|
| Statement* stat;
|
| { Target target(&this->target_stack_, &collector);
|
| with_nesting_level_++;
|
| - DeclarationScope()->RecordWithStatement();
|
| + top_scope_->DeclarationScope()->RecordWithStatement();
|
| stat = ParseStatement(labels, CHECK_OK);
|
| with_nesting_level_--;
|
| }
|
| @@ -3802,7 +3794,7 @@ Expression* Parser::ParseV8Intrinsic(bool* ok) {
|
| if (extension_ != NULL) {
|
| // The extension structures are only accessible while parsing the
|
| // very first time not when reparsing because of lazy compilation.
|
| - DeclarationScope()->ForceEagerCompilation();
|
| + top_scope_->DeclarationScope()->ForceEagerCompilation();
|
| }
|
|
|
| const Runtime::Function* function = Runtime::FunctionForSymbol(name);
|
|
|