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