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

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

Issue 2792353002: [parser/ast] Reduce memory consumption for AstConsString. (Closed)
Patch Set: Fix (and minor cleanup) Created 3 years, 8 months 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 | « src/ast/ast-value-factory.h ('k') | src/parsing/func-name-inferrer.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/ast/ast-value-factory.cc
diff --git a/src/ast/ast-value-factory.cc b/src/ast/ast-value-factory.cc
index eff13005f68fc240cc0bcfcbf7742e51a195bc8c..74613c5eae5b23f22fb3277bc3b5bba2743a2eac 100644
--- a/src/ast/ast-value-factory.cc
+++ b/src/ast/ast-value-factory.cc
@@ -156,12 +156,17 @@ bool AstRawString::Compare(void* a, void* b) {
}
void AstConsString::Internalize(Isolate* isolate) {
- Handle<String> tmp(isolate->factory()->empty_string());
- for (const AstRawString* current : strings_) {
- // AstRawStrings are internalized before AstConsStrings, so *current is
- // already internalized.
+ if (IsEmpty()) {
+ set_string(isolate->factory()->empty_string());
+ return;
+ }
+ // AstRawStrings are internalized before AstConsStrings, so
+ // AstRawString::string() will just work.
+ Handle<String> tmp(segment_.string->string());
+ for (AstConsString::Segment* current = segment_.next; current != nullptr;
+ current = current->next) {
tmp = isolate->factory()
- ->NewConsString(tmp, current->string())
+ ->NewConsString(current->string->string(), tmp)
.ToHandleChecked();
}
set_string(tmp);
@@ -285,19 +290,19 @@ const AstRawString* AstValueFactory::GetString(Handle<String> literal) {
}
AstConsString* AstValueFactory::NewConsString() {
- AstConsString* new_string = new (zone_) AstConsString(zone_);
+ AstConsString* new_string = new (zone_) AstConsString;
DCHECK_NOT_NULL(new_string);
AddConsString(new_string);
return new_string;
}
AstConsString* AstValueFactory::NewConsString(const AstRawString* str) {
- return NewConsString()->AddString(str);
+ return NewConsString()->AddString(zone_, str);
}
AstConsString* AstValueFactory::NewConsString(const AstRawString* str1,
const AstRawString* str2) {
- return NewConsString()->AddString(str1)->AddString(str2);
+ return NewConsString()->AddString(zone_, str1)->AddString(zone_, str2);
}
void AstValueFactory::Internalize(Isolate* isolate) {
« no previous file with comments | « src/ast/ast-value-factory.h ('k') | src/parsing/func-name-inferrer.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698