Index: src/ast-value-factory.cc |
diff --git a/src/ast-value-factory.cc b/src/ast-value-factory.cc |
index 895ce39f652845fa83674d61ec98b0c9b8f1b5e1..90c472d0825e55a18217db316e0e55d5cfbf590b 100644 |
--- a/src/ast-value-factory.cc |
+++ b/src/ast-value-factory.cc |
@@ -241,12 +241,11 @@ const AstRawString* AstValueFactory::GetString(Handle<String> literal) { |
const AstConsString* AstValueFactory::NewConsString( |
const AstString* left, const AstString* right) { |
- // This Vector will be valid as long as the Collector is alive (meaning that |
- // the AstRawString will not be moved). |
AstConsString* new_string = new (zone_) AstConsString(left, right); |
- strings_.Add(new_string); |
if (isolate_) { |
new_string->Internalize(isolate_); |
+ } else { |
+ strings_.Add(new_string); |
} |
return new_string; |
} |
@@ -273,9 +272,12 @@ const AstValue* AstValueFactory::NewString(const AstRawString* string) { |
AstValue* value = new (zone_) AstValue(string); |
DCHECK(string != NULL); |
if (isolate_) { |
- value->Internalize(isolate_); |
+ // If we're creating immediately-internalized AstValues, the underlying |
+ // strings must already be internalized at this point. |
+ DCHECK(!string->string_.is_null()); |
} |
- values_.Add(value); |
+ // These AstValues don't need to be added to values_, since the AstRawStrings |
+ // will be insternalized separately. |
return value; |
} |
@@ -284,8 +286,9 @@ const AstValue* AstValueFactory::NewSymbol(const char* name) { |
AstValue* value = new (zone_) AstValue(name); |
if (isolate_) { |
value->Internalize(isolate_); |
+ } else { |
+ values_.Add(value); |
} |
- values_.Add(value); |
return value; |
} |
@@ -294,8 +297,9 @@ const AstValue* AstValueFactory::NewNumber(double number) { |
AstValue* value = new (zone_) AstValue(number); |
if (isolate_) { |
value->Internalize(isolate_); |
+ } else { |
+ values_.Add(value); |
} |
- values_.Add(value); |
return value; |
} |
@@ -305,8 +309,9 @@ const AstValue* AstValueFactory::NewSmi(int number) { |
new (zone_) AstValue(AstValue::SMI, number); |
if (isolate_) { |
value->Internalize(isolate_); |
+ } else { |
+ values_.Add(value); |
} |
- values_.Add(value); |
return value; |
} |
@@ -316,8 +321,9 @@ const AstValue* AstValueFactory::NewSmi(int number) { |
value = new (zone_) AstValue(initializer); \ |
if (isolate_) { \ |
value->Internalize(isolate_); \ |
+ } else { \ |
+ values_.Add(value); \ |
} \ |
- values_.Add(value); \ |
} \ |
return value; |
@@ -364,9 +370,10 @@ const AstRawString* AstValueFactory::GetString( |
AstRawString* new_string = new (zone_) AstRawString( |
is_one_byte, Vector<const byte>(new_literal_bytes, length), hash); |
entry->key = new_string; |
- strings_.Add(new_string); |
if (isolate_) { |
new_string->Internalize(isolate_); |
+ } else { |
+ strings_.Add(new_string); |
} |
entry->value = reinterpret_cast<void*>(1); |
} |