Chromium Code Reviews| Index: src/parsing/parser.cc | 
| diff --git a/src/parsing/parser.cc b/src/parsing/parser.cc | 
| index 6b21a6fe50009f62dc674e1f3b98af87d6bb44d7..0b4037160261b7aa8413f7610f5bbfa6f87ab0b3 100644 | 
| --- a/src/parsing/parser.cc | 
| +++ b/src/parsing/parser.cc | 
| @@ -2624,10 +2624,11 @@ FunctionLiteral* Parser::ParseFunctionLiteral( | 
| DCHECK_IMPLIES(mode() == PARSE_LAZILY, allow_lazy()); | 
| DCHECK_IMPLIES(mode() == PARSE_LAZILY, extension_ == nullptr); | 
| + bool can_preparse = mode() == PARSE_LAZILY && | 
| + eager_compile_hint == FunctionLiteral::kShouldLazyCompile; | 
| + | 
| bool is_lazy_top_level_function = | 
| - mode() == PARSE_LAZILY && | 
| - eager_compile_hint == FunctionLiteral::kShouldLazyCompile && | 
| - scope()->AllowsLazyParsingWithoutUnresolvedVariables(); | 
| + can_preparse && scope()->AllowsLazyParsingWithoutUnresolvedVariables(); | 
| // Determine whether we can still lazy parse the inner function. | 
| // The preconditions are: | 
| @@ -2649,8 +2650,10 @@ FunctionLiteral* Parser::ParseFunctionLiteral( | 
| // will migrate unresolved variable into a Scope in the main Zone. | 
| // TODO(marja): Refactor parsing modes: simplify this. | 
| bool use_temp_zone = | 
| - allow_lazy() && function_type == FunctionLiteral::kDeclaration && | 
| - eager_compile_hint != FunctionLiteral::kShouldEagerCompile && | 
| + (FLAG_lazy_inner_functions | 
| 
 
marja
2016/10/11 07:56:47
You're dropping the function_type == FunctionLiter
 
Toon Verwaest
2016/10/11 10:44:00
I don't see the reason why FunctionLiteral::kDecla
 
 | 
| + ? can_preparse | 
| + : (allow_lazy() && | 
| + eager_compile_hint == FunctionLiteral::kShouldLazyCompile)) && | 
| !(FLAG_validate_asm && scope()->IsAsmModule()); | 
| bool is_lazy_inner_function = | 
| use_temp_zone && FLAG_lazy_inner_functions && !is_lazy_top_level_function; | 
| @@ -3150,11 +3153,7 @@ ZoneList<Statement*>* Parser::ParseEagerFunctionBody( | 
| const AstRawString* function_name, int pos, | 
| const ParserFormalParameters& parameters, FunctionKind kind, | 
| FunctionLiteral::FunctionType function_type, bool* ok) { | 
| - // Everything inside an eagerly parsed function will be parsed eagerly (see | 
| - // comment above). Lazy inner functions are handled separately and they won't | 
| - // require the mode to be PARSE_LAZILY (see ParseFunctionLiteral). | 
| - // TODO(marja): Refactor parsing modes: remove this. | 
| - ParsingModeScope parsing_mode(this, PARSE_EAGERLY); | 
| + ParsingModeScope mode(this, allow_lazy() ? PARSE_LAZILY : PARSE_EAGERLY); | 
| ZoneList<Statement*>* result = new(zone()) ZoneList<Statement*>(8, zone()); | 
| static const int kFunctionNameAssignmentIndex = 0; |