Chromium Code Reviews| Index: src/parsing/preparser.cc | 
| diff --git a/src/parsing/preparser.cc b/src/parsing/preparser.cc | 
| index 37beecf5a40aedfc577c3b2432a7085081e26f58..062e18a01deb74c6538f913f3ffef08903f03836 100644 | 
| --- a/src/parsing/preparser.cc | 
| +++ b/src/parsing/preparser.cc | 
| @@ -70,26 +70,22 @@ PreParserIdentifier PreParser::GetSymbol() const { | 
| } | 
| PreParser::PreParseResult PreParser::PreParseLazyFunction( | 
| - LanguageMode language_mode, FunctionKind kind, bool has_simple_parameters, | 
| - bool parsing_module, ParserRecorder* log, bool may_abort, int* use_counts) { | 
| + DeclarationScope* function_scope, bool parsing_module, ParserRecorder* log, | 
| + bool may_abort, int* use_counts) { | 
| + DCHECK_EQ(FUNCTION_SCOPE, function_scope->scope_type()); | 
| parsing_module_ = parsing_module; | 
| log_ = log; | 
| use_counts_ = use_counts; | 
| // Lazy functions always have trivial outer scopes (no with/catch scopes). | 
| DCHECK_NULL(scope_state_); | 
| - DeclarationScope* top_scope = NewScriptScope(); | 
| - FunctionState top_state(&function_state_, &scope_state_, top_scope, | 
| - kNormalFunction); | 
| - scope()->SetLanguageMode(language_mode); | 
| - DeclarationScope* function_scope = NewFunctionScope(kind); | 
| - if (!has_simple_parameters) function_scope->SetHasNonSimpleParameters(); | 
| FunctionState function_state(&function_state_, &scope_state_, function_scope, | 
| - kind); | 
| + function_scope->function_kind()); | 
| DCHECK_EQ(Token::LBRACE, scanner()->current_token()); | 
| bool ok = true; | 
| int start_position = peek_position(); | 
| LazyParsingResult result = ParseLazyFunctionLiteralBody(may_abort, &ok); | 
| use_counts_ = nullptr; | 
| + function_scope->ResetAfterPreparsing(); | 
| if (result == kLazyParsingAborted) { | 
| return kPreParseAbort; | 
| } else if (stack_overflow()) { | 
| @@ -98,7 +94,7 @@ PreParser::PreParseResult PreParser::PreParseLazyFunction( | 
| ReportUnexpectedToken(scanner()->current_token()); | 
| } else { | 
| DCHECK_EQ(Token::RBRACE, scanner()->peek()); | 
| - if (is_strict(scope()->language_mode())) { | 
| + if (is_strict(function_scope->language_mode())) { | 
| 
 
marja
2016/09/26 12:38:27
Here we have already reset the function scope, and
 
 | 
| int end_pos = scanner()->location().end_pos; | 
| CheckStrictOctalLiteral(start_position, end_pos, &ok); | 
| CheckDecimalLiteralWithLeadingZero(start_position, end_pos); |