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(); |