| Index: src/parsing/preparser.h
 | 
| diff --git a/src/parsing/preparser.h b/src/parsing/preparser.h
 | 
| index 0f064fea81d37ebda98eee3b8f5d6ca6e35118ce..3f268ee14ad00ce1029df3b425da5864f21f1773 100644
 | 
| --- a/src/parsing/preparser.h
 | 
| +++ b/src/parsing/preparser.h
 | 
| @@ -862,11 +862,6 @@ class ParserBaseTraits<PreParser> {
 | 
|        const PreParserFormalParameters& parameters, PreParserStatementList body,
 | 
|        bool is_async, bool* ok) {}
 | 
|  
 | 
| -  void ParseAsyncArrowSingleExpressionBody(
 | 
| -      PreParserStatementList body, bool accept_IN,
 | 
| -      Type::ExpressionClassifier* classifier, int pos, bool* ok);
 | 
| -
 | 
| -
 | 
|    void AddFormalParameter(PreParserFormalParameters* parameters,
 | 
|                            PreParserExpression pattern,
 | 
|                            PreParserExpression initializer,
 | 
| @@ -887,52 +882,8 @@ class ParserBaseTraits<PreParser> {
 | 
|        const Scanner::Location& params_loc, Scanner::Location* duplicate_loc,
 | 
|        const Scope::Snapshot& scope_snapshot, bool* ok);
 | 
|  
 | 
| -  V8_INLINE PreParserExpression ParseAsyncFunctionExpression(bool* ok);
 | 
| -
 | 
| -  V8_INLINE PreParserExpression ParseDoExpression(bool* ok);
 | 
| -
 | 
|    void ReindexLiterals(const PreParserFormalParameters& parameters) {}
 | 
|  
 | 
| -  // Temporary glue; these functions will move to ParserBase.
 | 
| -  PreParserExpression ParseV8Intrinsic(bool* ok);
 | 
| -  PreParserExpression ParseFunctionLiteral(
 | 
| -      PreParserIdentifier name, Scanner::Location function_name_location,
 | 
| -      FunctionNameValidity function_name_validity, FunctionKind kind,
 | 
| -      int function_token_position, FunctionLiteral::FunctionType type,
 | 
| -      LanguageMode language_mode, bool* ok);
 | 
| -
 | 
| -  V8_INLINE void SkipLazyFunctionBody(
 | 
| -      int* materialized_literal_count, int* expected_property_count, bool* ok,
 | 
| -      Scanner::BookmarkScope* bookmark = nullptr) {
 | 
| -    UNREACHABLE();
 | 
| -  }
 | 
| -
 | 
| -  V8_INLINE PreParserStatementList ParseEagerFunctionBody(
 | 
| -      PreParserIdentifier name, int pos,
 | 
| -      const PreParserFormalParameters& parameters, FunctionKind kind,
 | 
| -      FunctionLiteral::FunctionType function_type, bool* ok);
 | 
| -
 | 
| -  PreParserExpression ParseClassLiteral(Type::ExpressionClassifier* classifier,
 | 
| -                                        PreParserIdentifier name,
 | 
| -                                        Scanner::Location class_name_location,
 | 
| -                                        bool name_is_strict_reserved, int pos,
 | 
| -                                        bool* ok);
 | 
| -
 | 
| -  V8_INLINE void MarkCollectedTailCallExpressions() {}
 | 
| -  V8_INLINE void MarkTailPosition(PreParserExpression expression) {}
 | 
| -
 | 
| -  void CheckConflictingVarDeclarations(Scope* scope, bool* ok) {}
 | 
| -
 | 
| -  struct TemplateLiteralState {};
 | 
| -
 | 
| -  V8_INLINE TemplateLiteralState OpenTemplateLiteral(int pos) {
 | 
| -    return TemplateLiteralState();
 | 
| -  }
 | 
| -  V8_INLINE void AddTemplateSpan(TemplateLiteralState* state, bool tail) {}
 | 
| -  V8_INLINE void AddTemplateExpression(TemplateLiteralState* state,
 | 
| -                                       PreParserExpression expression) {}
 | 
| -  V8_INLINE PreParserExpression CloseTemplateLiteral(
 | 
| -      TemplateLiteralState* state, int start, PreParserExpression tag);
 | 
|    V8_INLINE PreParserExpression NoTemplateTag() {
 | 
|      return PreParserExpression::NoTemplateTag();
 | 
|    }
 | 
| @@ -940,59 +891,22 @@ class ParserBaseTraits<PreParser> {
 | 
|      return !tag.IsNoTemplateTag();
 | 
|    }
 | 
|  
 | 
| -  V8_INLINE PreParserExpressionList
 | 
| -  PrepareSpreadArguments(PreParserExpressionList list) {
 | 
| -    return list;
 | 
| -  }
 | 
| -
 | 
|    inline void MaterializeUnspreadArgumentsLiterals(int count);
 | 
|  
 | 
| -  inline PreParserExpression SpreadCall(PreParserExpression function,
 | 
| -                                        PreParserExpressionList args, int pos);
 | 
| -
 | 
| -  inline PreParserExpression SpreadCallNew(PreParserExpression function,
 | 
| -                                           PreParserExpressionList args,
 | 
| -                                           int pos);
 | 
| -
 | 
|    inline PreParserExpression ExpressionListToExpression(
 | 
|        PreParserExpressionList args) {
 | 
|      return PreParserExpression::Default();
 | 
|    }
 | 
|  
 | 
| -  inline void RewriteDestructuringAssignments() {}
 | 
| -
 | 
| -  inline PreParserExpression RewriteExponentiation(PreParserExpression left,
 | 
| -                                                   PreParserExpression right,
 | 
| -                                                   int pos) {
 | 
| -    return left;
 | 
| -  }
 | 
| -  inline PreParserExpression RewriteAssignExponentiation(
 | 
| -      PreParserExpression left, PreParserExpression right, int pos) {
 | 
| -    return left;
 | 
| -  }
 | 
| -  inline PreParserExpression RewriteAwaitExpression(PreParserExpression value,
 | 
| -                                                    int pos);
 | 
| -
 | 
| -  inline void QueueDestructuringAssignmentForRewriting(
 | 
| -      PreParserExpression assignment) {}
 | 
| -  inline void QueueNonPatternForRewriting(PreParserExpression expr, bool* ok) {}
 | 
| -
 | 
|    void SetFunctionNameFromPropertyName(PreParserExpression property,
 | 
|                                         PreParserIdentifier name) {}
 | 
|    void SetFunctionNameFromIdentifierRef(PreParserExpression value,
 | 
|                                          PreParserExpression identifier) {}
 | 
|  
 | 
| -  inline void RewriteNonPattern(Type::ExpressionClassifier* classifier,
 | 
| -                                bool* ok);
 | 
| -
 | 
|    V8_INLINE ZoneList<typename Type::ExpressionClassifier::Error>*
 | 
|        GetReportedErrorList() const;
 | 
|    V8_INLINE Zone* zone() const;
 | 
|    V8_INLINE ZoneList<PreParserExpression>* GetNonPatternList() const;
 | 
| -
 | 
| -  inline PreParserExpression RewriteYieldStar(PreParserExpression generator,
 | 
| -                                              PreParserExpression expression,
 | 
| -                                              int pos);
 | 
|  };
 | 
|  
 | 
|  
 | 
| @@ -1009,6 +923,7 @@ class ParserBaseTraits<PreParser> {
 | 
|  // That means that contextual checks (like a label being declared where
 | 
|  // it is used) are generally omitted.
 | 
|  class PreParser : public ParserBase<PreParser> {
 | 
| +  friend class ParserBase<PreParser>;
 | 
|    // TODO(nikolaos): This should not be necessary. It will be removed
 | 
|    // when the traits object stops delegating to the implementation object.
 | 
|    friend class ParserBaseTraits<PreParser>;
 | 
| @@ -1139,6 +1054,11 @@ class PreParser : public ParserBase<PreParser> {
 | 
|        const PreParserFormalParameters& parameters, FunctionKind kind,
 | 
|        FunctionLiteral::FunctionType function_type, bool* ok);
 | 
|  
 | 
| +  V8_INLINE void SkipLazyFunctionBody(
 | 
| +      int* materialized_literal_count, int* expected_property_count, bool* ok,
 | 
| +      Scanner::BookmarkScope* bookmark = nullptr) {
 | 
| +    UNREACHABLE();
 | 
| +  }
 | 
|    Expression ParseFunctionLiteral(
 | 
|        Identifier name, Scanner::Location function_name_location,
 | 
|        FunctionNameValidity function_name_validity, FunctionKind kind,
 | 
| @@ -1153,6 +1073,69 @@ class PreParser : public ParserBase<PreParser> {
 | 
|                                          bool name_is_strict_reserved, int pos,
 | 
|                                          bool* ok);
 | 
|  
 | 
| +  struct TemplateLiteralState {};
 | 
| +
 | 
| +  V8_INLINE TemplateLiteralState OpenTemplateLiteral(int pos) {
 | 
| +    return TemplateLiteralState();
 | 
| +  }
 | 
| +  V8_INLINE void AddTemplateExpression(TemplateLiteralState* state,
 | 
| +                                       PreParserExpression expression) {}
 | 
| +  V8_INLINE void AddTemplateSpan(TemplateLiteralState* state, bool tail) {}
 | 
| +  V8_INLINE PreParserExpression CloseTemplateLiteral(
 | 
| +      TemplateLiteralState* state, int start, PreParserExpression tag);
 | 
| +  V8_INLINE void CheckConflictingVarDeclarations(Scope* scope, bool* ok) {}
 | 
| +
 | 
| +  V8_INLINE void MarkCollectedTailCallExpressions() {}
 | 
| +  V8_INLINE void MarkTailPosition(PreParserExpression expression) {}
 | 
| +
 | 
| +  void ParseAsyncArrowSingleExpressionBody(PreParserStatementList body,
 | 
| +                                           bool accept_IN,
 | 
| +                                           ExpressionClassifier* classifier,
 | 
| +                                           int pos, bool* ok);
 | 
| +
 | 
| +  V8_INLINE PreParserExpressionList
 | 
| +  PrepareSpreadArguments(PreParserExpressionList list) {
 | 
| +    return list;
 | 
| +  }
 | 
| +
 | 
| +  V8_INLINE PreParserExpression SpreadCall(PreParserExpression function,
 | 
| +                                           PreParserExpressionList args,
 | 
| +                                           int pos);
 | 
| +  V8_INLINE PreParserExpression SpreadCallNew(PreParserExpression function,
 | 
| +                                              PreParserExpressionList args,
 | 
| +                                              int pos);
 | 
| +
 | 
| +  V8_INLINE void RewriteDestructuringAssignments() {}
 | 
| +
 | 
| +  V8_INLINE PreParserExpression RewriteExponentiation(PreParserExpression left,
 | 
| +                                                      PreParserExpression right,
 | 
| +                                                      int pos) {
 | 
| +    return left;
 | 
| +  }
 | 
| +  V8_INLINE PreParserExpression RewriteAssignExponentiation(
 | 
| +      PreParserExpression left, PreParserExpression right, int pos) {
 | 
| +    return left;
 | 
| +  }
 | 
| +
 | 
| +  V8_INLINE PreParserExpression
 | 
| +  RewriteAwaitExpression(PreParserExpression value, int pos) {
 | 
| +    return value;
 | 
| +  }
 | 
| +  V8_INLINE PreParserExpression RewriteYieldStar(PreParserExpression generator,
 | 
| +                                                 PreParserExpression expression,
 | 
| +                                                 int pos) {
 | 
| +    return PreParserExpression::Default();
 | 
| +  }
 | 
| +  V8_INLINE void RewriteNonPattern(Type::ExpressionClassifier* classifier,
 | 
| +                                   bool* ok) {
 | 
| +    ValidateExpression(classifier, ok);
 | 
| +  }
 | 
| +
 | 
| +  V8_INLINE void QueueDestructuringAssignmentForRewriting(
 | 
| +      PreParserExpression assignment) {}
 | 
| +  V8_INLINE void QueueNonPatternForRewriting(PreParserExpression expr,
 | 
| +                                             bool* ok) {}
 | 
| +
 | 
|    int* use_counts_;
 | 
|  };
 | 
|  
 | 
| @@ -1163,14 +1146,16 @@ void ParserBaseTraits<PreParser>::MaterializeUnspreadArgumentsLiterals(
 | 
|    }
 | 
|  }
 | 
|  
 | 
| -PreParserExpression ParserBaseTraits<PreParser>::SpreadCall(
 | 
| -    PreParserExpression function, PreParserExpressionList args, int pos) {
 | 
| -  return delegate()->factory()->NewCall(function, args, pos);
 | 
| +PreParserExpression PreParser::SpreadCall(PreParserExpression function,
 | 
| +                                          PreParserExpressionList args,
 | 
| +                                          int pos) {
 | 
| +  return factory()->NewCall(function, args, pos);
 | 
|  }
 | 
|  
 | 
| -PreParserExpression ParserBaseTraits<PreParser>::SpreadCallNew(
 | 
| -    PreParserExpression function, PreParserExpressionList args, int pos) {
 | 
| -  return delegate()->factory()->NewCallNew(function, args, pos);
 | 
| +PreParserExpression PreParser::SpreadCallNew(PreParserExpression function,
 | 
| +                                             PreParserExpressionList args,
 | 
| +                                             int pos) {
 | 
| +  return factory()->NewCallNew(function, args, pos);
 | 
|  }
 | 
|  
 | 
|  void ParserBaseTraits<PreParser>::ParseArrowFunctionFormalParameterList(
 | 
| @@ -1181,25 +1166,6 @@ void ParserBaseTraits<PreParser>::ParseArrowFunctionFormalParameterList(
 | 
|    // lists that are too long.
 | 
|  }
 | 
|  
 | 
| -PreParserExpression ParserBaseTraits<PreParser>::ParseAsyncFunctionExpression(
 | 
| -    bool* ok) {
 | 
| -  return delegate()->ParseAsyncFunctionExpression(ok);
 | 
| -}
 | 
| -
 | 
| -PreParserExpression ParserBaseTraits<PreParser>::ParseDoExpression(bool* ok) {
 | 
| -  return delegate()->ParseDoExpression(ok);
 | 
| -}
 | 
| -
 | 
| -void ParserBaseTraits<PreParser>::RewriteNonPattern(
 | 
| -    Type::ExpressionClassifier* classifier, bool* ok) {
 | 
| -  delegate()->ValidateExpression(classifier, ok);
 | 
| -}
 | 
| -
 | 
| -PreParserExpression ParserBaseTraits<PreParser>::RewriteAwaitExpression(
 | 
| -    PreParserExpression value, int pos) {
 | 
| -  return value;
 | 
| -}
 | 
| -
 | 
|  ZoneList<PreParserExpression>* ParserBaseTraits<PreParser>::GetNonPatternList()
 | 
|      const {
 | 
|    return delegate()->function_state_->non_patterns_to_rewrite();
 | 
| @@ -1215,11 +1181,6 @@ Zone* ParserBaseTraits<PreParser>::zone() const {
 | 
|    return delegate()->function_state_->scope()->zone();
 | 
|  }
 | 
|  
 | 
| -PreParserExpression ParserBaseTraits<PreParser>::RewriteYieldStar(
 | 
| -    PreParserExpression generator, PreParserExpression expression, int pos) {
 | 
| -  return PreParserExpression::Default();
 | 
| -}
 | 
| -
 | 
|  PreParserStatementList PreParser::ParseEagerFunctionBody(
 | 
|      PreParserIdentifier function_name, int pos,
 | 
|      const PreParserFormalParameters& parameters, FunctionKind kind,
 | 
| @@ -1239,21 +1200,14 @@ PreParserStatementList PreParser::ParseEagerFunctionBody(
 | 
|    return PreParserStatementList();
 | 
|  }
 | 
|  
 | 
| -PreParserStatementList ParserBaseTraits<PreParser>::ParseEagerFunctionBody(
 | 
| -    PreParserIdentifier function_name, int pos,
 | 
| -    const PreParserFormalParameters& parameters, FunctionKind kind,
 | 
| -    FunctionLiteral::FunctionType function_type, bool* ok) {
 | 
| -  return delegate()->ParseEagerFunctionBody(function_name, pos, parameters,
 | 
| -                                            kind, function_type, ok);
 | 
| -}
 | 
| -
 | 
| -PreParserExpression ParserBaseTraits<PreParser>::CloseTemplateLiteral(
 | 
| -    TemplateLiteralState* state, int start, PreParserExpression tag) {
 | 
| +PreParserExpression PreParser::CloseTemplateLiteral(TemplateLiteralState* state,
 | 
| +                                                    int start,
 | 
| +                                                    PreParserExpression tag) {
 | 
|    if (IsTaggedTemplate(tag)) {
 | 
|      // Emulate generation of array literals for tag callsite
 | 
|      // 1st is array of cooked strings, second is array of raw strings
 | 
| -    delegate()->function_state_->NextMaterializedLiteralIndex();
 | 
| -    delegate()->function_state_->NextMaterializedLiteralIndex();
 | 
| +    function_state_->NextMaterializedLiteralIndex();
 | 
| +    function_state_->NextMaterializedLiteralIndex();
 | 
|    }
 | 
|    return EmptyExpression();
 | 
|  }
 | 
| 
 |