| Index: src/parsing/parser.h | 
| diff --git a/src/parsing/parser.h b/src/parsing/parser.h | 
| index 401755f27d1116737b46f340f906611a69e53923..eb1a60c74abc56fb0bff56bf9798646dadf22f03 100644 | 
| --- a/src/parsing/parser.h | 
| +++ b/src/parsing/parser.h | 
| @@ -159,6 +159,7 @@ struct ParserTypes<Parser> { | 
| typedef ParserFormalParameters::Parameter FormalParameter; | 
| typedef ParserFormalParameters FormalParameters; | 
| typedef ZoneList<v8::internal::Statement*>* StatementList; | 
| +  typedef v8::internal::Block* Block; | 
|  | 
| // For constructing objects returned by the traversing functions. | 
| typedef AstNodeFactory Factory; | 
| @@ -295,6 +296,10 @@ class Parser : public ParserBase<Parser> { | 
| Block* BuildInitializationBlock(DeclarationParsingResult* parsing_result, | 
| ZoneList<const AstRawString*>* names, | 
| bool* ok); | 
| +  void DeclareAndInitializeVariables( | 
| +      Block* block, const DeclarationDescriptor* declaration_descriptor, | 
| +      const DeclarationParsingResult::Declaration* declaration, | 
| +      ZoneList<const AstRawString*>* names, bool* ok); | 
|  | 
| Block* ParseVariableStatement(VariableDeclarationContext var_context, | 
| ZoneList<const AstRawString*>* names, | 
| @@ -383,10 +388,6 @@ class Parser : public ParserBase<Parser> { | 
| DEFINE_AST_VISITOR_MEMBERS_WITHOUT_STACKOVERFLOW() | 
| }; | 
|  | 
| -  Block* ParseVariableDeclarations(VariableDeclarationContext var_context, | 
| -                                   DeclarationParsingResult* parsing_result, | 
| -                                   ZoneList<const AstRawString*>* names, | 
| -                                   bool* ok); | 
| Statement* ParseExpressionOrLabelledStatement( | 
| ZoneList<const AstRawString*>* labels, | 
| AllowLabelledFunctionStatement allow_function, bool* ok); | 
| @@ -719,6 +720,11 @@ class Parser : public ParserBase<Parser> { | 
| fni->PushLiteralName(id); | 
| } | 
|  | 
| +  V8_INLINE static void PushVariableName(FuncNameInferrer* fni, | 
| +                                         const AstRawString* id) { | 
| +    fni->PushVariableName(id); | 
| +  } | 
| + | 
| V8_INLINE void PushPropertyName(FuncNameInferrer* fni, | 
| Expression* expression) { | 
| if (expression->IsPropertyName()) { | 
| @@ -838,6 +844,7 @@ class Parser : public ParserBase<Parser> { | 
| return nullptr; | 
| } | 
| V8_INLINE static FunctionLiteral* EmptyFunctionLiteral() { return nullptr; } | 
| +  V8_INLINE static Block* NullBlock() { return nullptr; } | 
|  | 
| V8_INLINE static bool IsEmptyExpression(Expression* expr) { | 
| return expr == nullptr; | 
| @@ -915,6 +922,11 @@ class Parser : public ParserBase<Parser> { | 
| return new (zone()) ZoneList<Statement*>(size, zone()); | 
| } | 
|  | 
| +  V8_INLINE Block* NewBlock(ZoneList<const AstRawString*>* labels, int capacity, | 
| +                            bool ignore_completion_value, int pos) { | 
| +    return factory()->NewBlock(labels, capacity, ignore_completion_value, pos); | 
| +  } | 
| + | 
| V8_INLINE void AddParameterInitializationBlock( | 
| const ParserFormalParameters& parameters, ZoneList<Statement*>* body, | 
| bool is_async, bool* ok) { | 
|  |