| Index: src/parsing/preparser.cc
|
| diff --git a/src/parsing/preparser.cc b/src/parsing/preparser.cc
|
| index 0eea0e66181149e75cae1c52cb3622ef1326ea03..37beecf5a40aedfc577c3b2432a7085081e26f58 100644
|
| --- a/src/parsing/preparser.cc
|
| +++ b/src/parsing/preparser.cc
|
| @@ -38,10 +38,8 @@
|
| #define CHECK_OK CHECK_OK_VALUE(Statement::Default())
|
| #define CHECK_OK_VOID CHECK_OK_VALUE(this->Void())
|
|
|
| -namespace {
|
| -
|
| -PreParserIdentifier GetSymbolHelper(Scanner* scanner) {
|
| - switch (scanner->current_token()) {
|
| +PreParserIdentifier PreParser::GetSymbol() const {
|
| + switch (scanner()->current_token()) {
|
| case Token::ENUM:
|
| return PreParserIdentifier::Enum();
|
| case Token::AWAIT:
|
| @@ -57,46 +55,34 @@
|
| case Token::ASYNC:
|
| return PreParserIdentifier::Async();
|
| default:
|
| - if (scanner->UnescapedLiteralMatches("eval", 4))
|
| + if (scanner()->UnescapedLiteralMatches("eval", 4))
|
| return PreParserIdentifier::Eval();
|
| - if (scanner->UnescapedLiteralMatches("arguments", 9))
|
| + if (scanner()->UnescapedLiteralMatches("arguments", 9))
|
| return PreParserIdentifier::Arguments();
|
| - if (scanner->UnescapedLiteralMatches("undefined", 9))
|
| + if (scanner()->UnescapedLiteralMatches("undefined", 9))
|
| return PreParserIdentifier::Undefined();
|
| - if (scanner->LiteralMatches("prototype", 9))
|
| + if (scanner()->LiteralMatches("prototype", 9))
|
| return PreParserIdentifier::Prototype();
|
| - if (scanner->LiteralMatches("constructor", 11))
|
| + if (scanner()->LiteralMatches("constructor", 11))
|
| return PreParserIdentifier::Constructor();
|
| return PreParserIdentifier::Default();
|
| }
|
| }
|
|
|
| -} // unnamed namespace
|
| -
|
| -PreParserIdentifier PreParser::GetSymbol() const {
|
| - PreParserIdentifier symbol = GetSymbolHelper(scanner());
|
| - if (track_unresolved_variables_) {
|
| - const AstRawString* result = scanner()->CurrentSymbol(ast_value_factory());
|
| - DCHECK_NOT_NULL(result);
|
| - symbol.string_ = result;
|
| - }
|
| - return symbol;
|
| -}
|
| -
|
| PreParser::PreParseResult PreParser::PreParseLazyFunction(
|
| - FunctionKind kind, DeclarationScope* function_scope, bool parsing_module,
|
| - ParserRecorder* log, bool is_inner_function, bool may_abort,
|
| - int* use_counts) {
|
| + LanguageMode language_mode, FunctionKind kind, bool has_simple_parameters,
|
| + bool parsing_module, ParserRecorder* log, bool may_abort, int* use_counts) {
|
| parsing_module_ = parsing_module;
|
| log_ = log;
|
| use_counts_ = use_counts;
|
| - DCHECK(!track_unresolved_variables_);
|
| - track_unresolved_variables_ = is_inner_function;
|
| -
|
| - // The caller passes the function_scope which is not yet inserted into the
|
| - // scope_state_. All scopes above the function_scope are ignored by the
|
| - // PreParser.
|
| + // 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);
|
| DCHECK_EQ(Token::LBRACE, scanner()->current_token());
|
| @@ -104,7 +90,6 @@
|
| int start_position = peek_position();
|
| LazyParsingResult result = ParseLazyFunctionLiteralBody(may_abort, &ok);
|
| use_counts_ = nullptr;
|
| - track_unresolved_variables_ = false;
|
| if (result == kLazyParsingAborted) {
|
| return kPreParseAbort;
|
| } else if (stack_overflow()) {
|
| @@ -355,21 +340,6 @@
|
| body->Add(PreParserStatement::ExpressionStatement(return_value), zone());
|
| }
|
|
|
| -PreParserExpression PreParser::ExpressionFromIdentifier(
|
| - PreParserIdentifier name, int start_position, int end_position,
|
| - InferName infer) {
|
| - if (track_unresolved_variables_) {
|
| - AstNodeFactory factory(ast_value_factory());
|
| - // Setting the Zone is necessary because zone_ might be the temp Zone, and
|
| - // AstValueFactory doesn't know about it.
|
| - factory.set_zone(zone());
|
| - DCHECK_NOT_NULL(name.string_);
|
| - scope()->NewUnresolved(&factory, name.string_, start_position, end_position,
|
| - NORMAL_VARIABLE);
|
| - }
|
| - return PreParserExpression::FromIdentifier(name);
|
| -}
|
| -
|
| #undef CHECK_OK
|
| #undef CHECK_OK_CUSTOM
|
|
|
|
|