| Index: src/parser.cc
|
| diff --git a/src/parser.cc b/src/parser.cc
|
| index 2838fbc03500f185cc6e253b3b2202ec68901bec..056d34a42faf80946de4c9f5a1a43ce0930c8d66 100644
|
| --- a/src/parser.cc
|
| +++ b/src/parser.cc
|
| @@ -973,9 +973,7 @@ FunctionLiteral* Parser::DoParseProgram(ParseInfo* info) {
|
| }
|
| original_scope_ = scope;
|
| if (info->is_eval()) {
|
| - if (!scope->is_script_scope() || is_strict(info->language_mode())) {
|
| - scope = NewScope(scope, EVAL_SCOPE);
|
| - }
|
| + scope = NewScope(scope, EVAL_SCOPE);
|
| } else if (info->is_module()) {
|
| scope = NewScope(scope, MODULE_SCOPE);
|
| }
|
| @@ -1002,10 +1000,7 @@ FunctionLiteral* Parser::DoParseProgram(ParseInfo* info) {
|
| DCHECK(allow_harmony_modules());
|
| ParseModuleItemList(body, &ok);
|
| } else {
|
| - Scope* eval_scope = nullptr;
|
| - ParseStatementList(body, Token::EOS, info->is_eval(), &eval_scope, &ok);
|
| - if (eval_scope != nullptr)
|
| - eval_scope->set_end_position(scanner()->location().end_pos);
|
| + ParseStatementList(body, Token::EOS, &ok);
|
| }
|
|
|
| scope->set_end_position(scanner()->location().end_pos);
|
| @@ -1190,7 +1185,7 @@ FunctionLiteral* Parser::ParseLazy(Isolate* isolate, ParseInfo* info,
|
|
|
|
|
| void* Parser::ParseStatementList(ZoneList<Statement*>* body, int end_token,
|
| - bool is_eval, Scope** eval_scope, bool* ok) {
|
| + bool* ok) {
|
| // StatementList ::
|
| // (StatementListItem)* <end_token>
|
|
|
| @@ -1259,23 +1254,6 @@ void* Parser::ParseStatementList(ZoneList<Statement*>* body, int end_token,
|
| // Strong mode implies strict mode. If there are several "use strict"
|
| // / "use strong" directives, do the strict mode changes only once.
|
| if (is_sloppy(scope_->language_mode())) {
|
| - // TODO(mstarzinger): Global strict eval calls, need their own scope
|
| - // 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 && !scope_->is_eval_scope()) {
|
| - DCHECK(scope_->is_script_scope());
|
| - Scope* scope = NewScope(scope_, EVAL_SCOPE);
|
| - scope->set_start_position(scope_->start_position());
|
| - scope->set_end_position(scope_->end_position());
|
| - scope_ = scope;
|
| - if (eval_scope != NULL) {
|
| - // Caller will correct the positions of the ad hoc eval scope.
|
| - *eval_scope = scope;
|
| - }
|
| - mode_ = PARSE_EAGERLY;
|
| - }
|
| scope_->SetLanguageMode(static_cast<LanguageMode>(
|
| scope_->language_mode() | STRICT_BIT));
|
| }
|
| @@ -4211,7 +4189,7 @@ ZoneList<Statement*>* Parser::ParseEagerFunctionBody(
|
| yield, RelocInfo::kNoPosition), zone());
|
| }
|
|
|
| - ParseStatementList(body, Token::RBRACE, false, NULL, CHECK_OK);
|
| + ParseStatementList(body, Token::RBRACE, CHECK_OK);
|
|
|
| if (IsGeneratorFunction(kind)) {
|
| VariableProxy* get_proxy = factory()->NewVariableProxy(
|
|
|