Index: src/parser.cc |
diff --git a/src/parser.cc b/src/parser.cc |
index 722ed8beaf470288df7de99157ea58a191ec7c23..b8855fd8f0ac1c0d267a0c2c583ebd52bec9b892 100644 |
--- a/src/parser.cc |
+++ b/src/parser.cc |
@@ -4793,9 +4793,11 @@ bool RegExpParser::ParseRegExp(FlatStringReader* input, |
bool Parser::Parse() { |
ASSERT(info()->function() == NULL); |
- ASSERT(info()->ast_value_factory() == NULL); |
FunctionLiteral* result = NULL; |
- ast_value_factory_ = new AstValueFactory(zone()); |
+ ast_value_factory_ = info()->ast_value_factory(); |
+ if (ast_value_factory_ == NULL) { |
+ ast_value_factory_ = new AstValueFactory(zone()); |
+ } |
if (allow_natives_syntax() || extension_ != NULL) { |
// If intrinsics are allowed, the Parser cannot operate independent of the |
// V8 heap because of Rumtime. Tell the string table to internalize strings |
@@ -4830,7 +4832,9 @@ bool Parser::Parse() { |
info()->SetFunction(result); |
ast_value_factory_->Internalize(isolate()); |
// info takes ownership of ast_value_factory_. |
- info()->SetAstValueFactory(ast_value_factory_); |
+ if (info()->ast_value_factory() == NULL) { |
+ info()->SetAstValueFactory(ast_value_factory_); |
+ } |
ast_value_factory_ = NULL; |
return (result != NULL); |
} |