From fb22b7b05e949e18f729dbb0c06581e8b19e5277 Mon Sep 17 00:00:00 2001 From: "yangguo@chromium.org" Date: Thu, 13 Feb 2014 08:43:53 +0000 Subject: [PATCH] Internalize string keys in Keyed{Store,Load}IC. R=jkummerow@chromium.org BUG=v8:3144 LOG=N Review URL: https://codereview.chromium.org/162983003 git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@19345 ce2b1a6d-e550-0410-aec6-3dcde31c8c00 --- src/factory.cc | 6 ------ src/factory.h | 3 --- src/ic.cc | 2 ++ src/objects.cc | 6 +++--- test/cctest/test-api.cc | 4 ++-- 5 files changed, 7 insertions(+), 14 deletions(-) diff --git a/src/factory.cc b/src/factory.cc index 63bb441..6bce5d3 100644 --- a/src/factory.cc +++ b/src/factory.cc @@ -1300,12 +1300,6 @@ Handle Factory::CopyCode(Handle code, Vector reloc_info) { } -Handle Factory::InternalizedStringFromString(Handle value) { - CALL_HEAP_FUNCTION(isolate(), - isolate()->heap()->InternalizeString(*value), String); -} - - Handle Factory::NewJSObject(Handle constructor, PretenureFlag pretenure) { JSFunction::EnsureHasInitialMap(constructor); diff --git a/src/factory.h b/src/factory.h index 284e6f9..00ae587 100644 --- a/src/factory.h +++ b/src/factory.h @@ -225,9 +225,6 @@ class Factory { Handle previous, Handle scope_info); - // Return the internalized version of the passed in string. - Handle InternalizedStringFromString(Handle value); - // Allocate a new struct. The struct is pretenured (allocated directly in // the old generation). Handle NewStruct(InstanceType type); diff --git a/src/ic.cc b/src/ic.cc index e140539..0377ba9 100644 --- a/src/ic.cc +++ b/src/ic.cc @@ -983,6 +983,8 @@ static Handle TryConvertKey(Handle key, Isolate* isolate) { key = Handle(Smi::FromInt(int_value), isolate); } } + } else if (key->IsString()) { + key = isolate->factory()->InternalizeString(Handle::cast(key)); } else if (key->IsUndefined()) { key = isolate->factory()->undefined_string(); } diff --git a/src/objects.cc b/src/objects.cc index fc6e34a..84fcee7 100644 --- a/src/objects.cc +++ b/src/objects.cc @@ -732,7 +732,7 @@ void JSObject::SetNormalizedProperty(Handle object, Handle property_dictionary(object->property_dictionary()); if (!name->IsUniqueName()) { - name = object->GetIsolate()->factory()->InternalizedStringFromString( + name = object->GetIsolate()->factory()->InternalizeString( Handle::cast(name)); } @@ -2152,7 +2152,7 @@ Handle JSObject::AddProperty(Handle object, Isolate* isolate = object->GetIsolate(); if (!name->IsUniqueName()) { - name = isolate->factory()->InternalizedStringFromString( + name = isolate->factory()->InternalizeString( Handle::cast(name)); } @@ -3135,7 +3135,7 @@ static int AppendUniqueCallbacks(NeanderArray* callbacks, Handle entry(AccessorInfo::cast(callbacks->get(i))); if (entry->name()->IsUniqueName()) continue; Handle key = - isolate->factory()->InternalizedStringFromString( + isolate->factory()->InternalizeString( Handle(String::cast(entry->name()))); entry->set_name(*key); } diff --git a/test/cctest/test-api.cc b/test/cctest/test-api.cc index 17d2fbc..4bef425 100644 --- a/test/cctest/test-api.cc +++ b/test/cctest/test-api.cc @@ -764,7 +764,7 @@ THREADED_TEST(UsingExternalString) { CcTest::heap()->CollectGarbage(i::NEW_SPACE); // in survivor space now CcTest::heap()->CollectGarbage(i::NEW_SPACE); // in old gen now i::Handle isymbol = - factory->InternalizedStringFromString(istring); + factory->InternalizeString(istring); CHECK(isymbol->IsInternalizedString()); } CcTest::heap()->CollectAllGarbage(i::Heap::kNoGCFlags); @@ -784,7 +784,7 @@ THREADED_TEST(UsingExternalAsciiString) { CcTest::heap()->CollectGarbage(i::NEW_SPACE); // in survivor space now CcTest::heap()->CollectGarbage(i::NEW_SPACE); // in old gen now i::Handle isymbol = - factory->InternalizedStringFromString(istring); + factory->InternalizeString(istring); CHECK(isymbol->IsInternalizedString()); } CcTest::heap()->CollectAllGarbage(i::Heap::kNoGCFlags); -- 2.7.4