Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(384)

Unified Diff: src/ast-value-factory.cc

Issue 693803004: Parser & internalizing: efficiency fixes. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: . Created 6 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | src/parser.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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);
}
« no previous file with comments | « no previous file | src/parser.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698