| Index: src/parser.cc
|
| diff --git a/src/parser.cc b/src/parser.cc
|
| index a626d99fa0a078cbaffb97deb3fb448e4d6c8dd2..9c78b8c83e58fb62bf9c1139c00e53b404034c7d 100644
|
| --- a/src/parser.cc
|
| +++ b/src/parser.cc
|
| @@ -642,7 +642,7 @@ FunctionLiteral* Parser::DoParseProgram(CompilationInfo* info,
|
| ZoneList<Statement*>* body = new(zone()) ZoneList<Statement*>(16, zone());
|
| bool ok = true;
|
| int beg_loc = scanner().location().beg_pos;
|
| - ParseSourceElements(body, Token::EOS, info->is_eval(), &ok);
|
| + ParseSourceElements(body, Token::EOS, info->is_eval(), true, &ok);
|
| if (ok && !top_scope_->is_classic_mode()) {
|
| CheckOctalLiteral(beg_loc, scanner().location().end_pos, &ok);
|
| }
|
| @@ -1007,6 +1007,7 @@ class ThisNamedPropertyAssignmentFinder {
|
| void* Parser::ParseSourceElements(ZoneList<Statement*>* processor,
|
| int end_token,
|
| bool is_eval,
|
| + bool is_global,
|
| bool* ok) {
|
| // SourceElements ::
|
| // (ModuleElement)* <end_token>
|
| @@ -1028,7 +1029,12 @@ void* Parser::ParseSourceElements(ZoneList<Statement*>* processor,
|
| }
|
|
|
| Scanner::Location token_loc = scanner().peek_location();
|
| - Statement* stat = ParseModuleElement(NULL, CHECK_OK);
|
| + Statement* stat;
|
| + if (is_global && !is_eval) {
|
| + stat = ParseModuleElement(NULL, CHECK_OK);
|
| + } else {
|
| + stat = ParseBlockElement(NULL, CHECK_OK);
|
| + }
|
| if (stat == NULL || stat->IsEmpty()) {
|
| directive_prologue = false; // End of directive prologue.
|
| continue;
|
| @@ -4531,7 +4537,7 @@ FunctionLiteral* Parser::ParseFunctionLiteral(Handle<String> function_name,
|
| RelocInfo::kNoPosition)),
|
| zone());
|
| }
|
| - ParseSourceElements(body, Token::RBRACE, false, CHECK_OK);
|
| + ParseSourceElements(body, Token::RBRACE, false, false, CHECK_OK);
|
|
|
| materialized_literal_count = function_state.materialized_literal_count();
|
| expected_property_count = function_state.expected_property_count();
|
|
|