| Index: src/preparser.h
 | 
| diff --git a/src/preparser.h b/src/preparser.h
 | 
| index fd82651a7e012a88c7e09c58c53732522853d121..20bf9e998f7d2fda800e3c9c109deadd44057d80 100644
 | 
| --- a/src/preparser.h
 | 
| +++ b/src/preparser.h
 | 
| @@ -70,6 +70,7 @@ class ParserBase : public Traits {
 | 
|  
 | 
|    ParserBase(Scanner* scanner, uintptr_t stack_limit, v8::Extension* extension,
 | 
|               ParserRecorder* log, typename Traits::Type::Zone* zone,
 | 
| +             AstNode::IdGen* ast_node_id_gen,
 | 
|               typename Traits::Type::Parser this_object)
 | 
|        : Traits(this_object),
 | 
|          parenthesized_function_(false),
 | 
| @@ -86,7 +87,8 @@ class ParserBase : public Traits {
 | 
|          allow_natives_syntax_(false),
 | 
|          allow_arrow_functions_(false),
 | 
|          allow_harmony_object_literals_(false),
 | 
| -        zone_(zone) {}
 | 
| +        zone_(zone),
 | 
| +        ast_node_id_gen_(ast_node_id_gen) {}
 | 
|  
 | 
|    // Getters that indicate whether certain syntactical constructs are
 | 
|    // allowed to be parsed by this instance of the parser.
 | 
| @@ -275,6 +277,7 @@ class ParserBase : public Traits {
 | 
|    void set_stack_overflow() { stack_overflow_ = true; }
 | 
|    Mode mode() const { return mode_; }
 | 
|    typename Traits::Type::Zone* zone() const { return zone_; }
 | 
| +  AstNode::IdGen* ast_node_id_gen() const { return ast_node_id_gen_; }
 | 
|  
 | 
|    INLINE(Token::Value peek()) {
 | 
|      if (stack_overflow_) return Token::ILLEGAL;
 | 
| @@ -577,6 +580,7 @@ class ParserBase : public Traits {
 | 
|    bool allow_harmony_object_literals_;
 | 
|  
 | 
|    typename Traits::Type::Zone* zone_;  // Only used by Parser.
 | 
| +  AstNode::IdGen* ast_node_id_gen_;
 | 
|  };
 | 
|  
 | 
|  
 | 
| @@ -968,7 +972,7 @@ class PreParserScope {
 | 
|  
 | 
|  class PreParserFactory {
 | 
|   public:
 | 
| -  explicit PreParserFactory(void* unused_value_factory) {}
 | 
| +  PreParserFactory(void*, void*, void*) {}
 | 
|    PreParserExpression NewStringLiteral(PreParserIdentifier identifier,
 | 
|                                         int pos) {
 | 
|      return PreParserExpression::Default();
 | 
| @@ -1413,7 +1417,7 @@ class PreParser : public ParserBase<PreParserTraits> {
 | 
|    };
 | 
|  
 | 
|    PreParser(Scanner* scanner, ParserRecorder* log, uintptr_t stack_limit)
 | 
| -      : ParserBase<PreParserTraits>(scanner, stack_limit, NULL, log, NULL,
 | 
| +      : ParserBase<PreParserTraits>(scanner, stack_limit, NULL, log, NULL, NULL,
 | 
|                                      this) {}
 | 
|  
 | 
|    // Pre-parse the program from the character stream; returns true on
 | 
| @@ -1422,7 +1426,7 @@ class PreParser : public ParserBase<PreParserTraits> {
 | 
|    // during parsing.
 | 
|    PreParseResult PreParseProgram() {
 | 
|      PreParserScope scope(scope_, GLOBAL_SCOPE);
 | 
| -    PreParserFactory factory(NULL);
 | 
| +    PreParserFactory factory(NULL, NULL, NULL);
 | 
|      FunctionState top_scope(&function_state_, &scope_, &scope, &factory);
 | 
|      bool ok = true;
 | 
|      int start_position = scanner()->peek_location().beg_pos;
 | 
| @@ -2612,7 +2616,8 @@ typename ParserBase<Traits>::ExpressionT ParserBase<
 | 
|    int handler_count = 0;
 | 
|  
 | 
|    {
 | 
| -    typename Traits::Type::Factory function_factory(this->ast_value_factory());
 | 
| +    typename Traits::Type::Factory function_factory(
 | 
| +        zone(), this->ast_value_factory(), ast_node_id_gen_);
 | 
|      FunctionState function_state(&function_state_, &scope_,
 | 
|                                   Traits::Type::ptr_to_scope(scope),
 | 
|                                   &function_factory);
 | 
| 
 |