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