Index: src/parser.cc |
diff --git a/src/parser.cc b/src/parser.cc |
index 6e1838170a5dcf1ff4e19a04234022efd1a42df6..94d2f9e6a09586ce3713e0d4dffd6e7e69c9c768 100644 |
--- a/src/parser.cc |
+++ b/src/parser.cc |
@@ -614,11 +614,6 @@ FunctionLiteral* Parser::DoParseProgram(CompilationInfo* info, |
ASSERT(target_stack_ == NULL); |
if (pre_data_ != NULL) pre_data_->Initialize(); |
- // Compute the parsing mode. |
- Mode mode = (FLAG_lazy && allow_lazy_) ? PARSE_LAZILY : PARSE_EAGERLY; |
- if (allow_natives_syntax_ || extension_ != NULL) mode = PARSE_EAGERLY; |
- ParsingModeScope parsing_mode(this, mode); |
- |
Handle<String> no_name = isolate()->factory()->empty_symbol(); |
FunctionLiteral* result = NULL; |
@@ -637,6 +632,13 @@ FunctionLiteral* Parser::DoParseProgram(CompilationInfo* info, |
scope->set_start_position(0); |
scope->set_end_position(source->length()); |
+ // Compute the parsing mode. |
+ Mode mode = (FLAG_lazy && allow_lazy_) ? PARSE_LAZILY : PARSE_EAGERLY; |
+ if (allow_natives_syntax_ || extension_ != NULL || scope->is_eval_scope()) { |
+ mode = PARSE_EAGERLY; |
+ } |
+ ParsingModeScope parsing_mode(this, mode); |
+ |
FunctionState function_state(this, scope, isolate()); // Enters 'scope'. |
top_scope_->SetLanguageMode(info->language_mode()); |
ZoneList<Statement*>* body = new(zone()) ZoneList<Statement*>(16, zone()); |
@@ -1059,12 +1061,14 @@ void* Parser::ParseSourceElements(ZoneList<Statement*>* processor, |
// as specified in ES5 10.4.2(3). The correct fix would be to always |
// add this scope in DoParseProgram(), but that requires adaptations |
// all over the code base, so we go with a quick-fix for now. |
+ // In the same manner, we have to patch the parsing mode. |
if (is_eval && !top_scope_->is_eval_scope()) { |
ASSERT(top_scope_->is_global_scope()); |
Scope* scope = NewScope(top_scope_, EVAL_SCOPE); |
scope->set_start_position(top_scope_->start_position()); |
scope->set_end_position(top_scope_->end_position()); |
top_scope_ = scope; |
+ mode_ = PARSE_EAGERLY; |
} |
// TODO(ES6): Fix entering extended mode, once it is specified. |
top_scope_->SetLanguageMode(FLAG_harmony_scoping |