Index: src/ic.cc |
diff --git a/src/ic.cc b/src/ic.cc |
index 2139d5c5fc2d51e8a48f0faa9ade5c1d6b50c691..db82bf52388f689c0ce1d12c854a42316c955a16 100644 |
--- a/src/ic.cc |
+++ b/src/ic.cc |
@@ -338,7 +338,7 @@ MaybeHandle<Object> IC::TypeError(const char* type, |
} |
-MaybeHandle<Object> IC::ReferenceError(const char* type, Handle<String> name) { |
+MaybeHandle<Object> IC::ReferenceError(const char* type, Handle<Name> name) { |
HandleScope scope(isolate()); |
Handle<Object> error = isolate()->factory()->NewReferenceError( |
type, HandleVector(&name, 1)); |
@@ -590,7 +590,7 @@ static bool MigrateDeprecated(Handle<Object> object) { |
} |
-MaybeHandle<Object> LoadIC::Load(Handle<Object> object, Handle<String> name) { |
+MaybeHandle<Object> LoadIC::Load(Handle<Object> object, Handle<Name> name) { |
// If the object is undefined or null it's illegal to try to get any |
// of its properties; throw a TypeError in that case. |
if (object->IsUndefined() || object->IsNull()) { |
@@ -660,7 +660,7 @@ static bool AddOneReceiverMapIfMissing(MapHandleList* receiver_maps, |
} |
-bool IC::UpdatePolymorphicIC(Handle<String> name, Handle<Code> code) { |
+bool IC::UpdatePolymorphicIC(Handle<Name> name, Handle<Code> code) { |
if (!code->is_handler()) return false; |
if (target()->is_keyed_stub() && state() != PROTOTYPE_FAILURE) return false; |
Handle<HeapType> type = receiver_type(); |
@@ -766,7 +766,7 @@ template |
Handle<HeapType> IC::MapToType<HeapType>(Handle<Map> map, Isolate* region); |
-void IC::UpdateMonomorphicIC(Handle<Code> handler, Handle<String> name) { |
+void IC::UpdateMonomorphicIC(Handle<Code> handler, Handle<Name> name) { |
DCHECK(handler->is_handler()); |
Handle<Code> ic = PropertyICCompiler::ComputeMonomorphic( |
kind(), name, receiver_type(), handler, extra_ic_state()); |
@@ -774,7 +774,7 @@ void IC::UpdateMonomorphicIC(Handle<Code> handler, Handle<String> name) { |
} |
-void IC::CopyICToMegamorphicCache(Handle<String> name) { |
+void IC::CopyICToMegamorphicCache(Handle<Name> name) { |
TypeHandleList types; |
CodeHandleList handlers; |
TargetTypes(&types); |
@@ -800,7 +800,7 @@ bool IC::IsTransitionOfMonomorphicTarget(Map* source_map, Map* target_map) { |
} |
-void IC::PatchCache(Handle<String> name, Handle<Code> code) { |
+void IC::PatchCache(Handle<Name> name, Handle<Code> code) { |
switch (state()) { |
case UNINITIALIZED: |
case PREMONOMORPHIC: |
@@ -873,7 +873,7 @@ Handle<Code> LoadIC::SimpleFieldLoad(FieldIndex index) { |
void LoadIC::UpdateCaches(LookupIterator* lookup, Handle<Object> object, |
- Handle<String> name) { |
+ Handle<Name> name) { |
if (state() == UNINITIALIZED) { |
// This is the first time we execute this inline cache. |
// Set the target to the pre monomorphic stub to delay |
@@ -913,7 +913,7 @@ void IC::UpdateMegamorphicCache(HeapType* type, Name* name, Code* code) { |
Handle<Code> IC::ComputeHandler(LookupIterator* lookup, Handle<Object> object, |
- Handle<String> name, Handle<Object> value) { |
+ Handle<Name> name, Handle<Object> value) { |
bool receiver_is_holder = |
object.is_identical_to(lookup->GetHolder<JSObject>()); |
CacheHolderFlag flag; |
@@ -957,7 +957,7 @@ Handle<Code> IC::ComputeHandler(LookupIterator* lookup, Handle<Object> object, |
Handle<Code> IC::ComputeStoreHandler(LookupResult* lookup, |
- Handle<Object> object, Handle<String> name, |
+ Handle<Object> object, Handle<Name> name, |
Handle<Object> value) { |
bool receiver_is_holder = lookup->ReceiverIsHolder(object); |
CacheHolderFlag flag; |
@@ -1001,24 +1001,24 @@ Handle<Code> IC::ComputeStoreHandler(LookupResult* lookup, |
Handle<Code> LoadIC::CompileHandler(LookupIterator* lookup, |
- Handle<Object> object, Handle<String> name, |
+ Handle<Object> object, Handle<Name> name, |
Handle<Object> unused, |
CacheHolderFlag cache_holder) { |
if (object->IsString() && |
- String::Equals(isolate()->factory()->length_string(), name)) { |
+ Name::Equals(isolate()->factory()->length_string(), name)) { |
FieldIndex index = FieldIndex::ForInObjectOffset(String::kLengthOffset); |
return SimpleFieldLoad(index); |
} |
if (object->IsStringWrapper() && |
- String::Equals(isolate()->factory()->length_string(), name)) { |
+ Name::Equals(isolate()->factory()->length_string(), name)) { |
StringLengthStub string_length_stub(isolate()); |
return string_length_stub.GetCode(); |
} |
// Use specialized code for getting prototype of functions. |
if (object->IsJSFunction() && |
- String::Equals(isolate()->factory()->prototype_string(), name) && |
+ Name::Equals(isolate()->factory()->prototype_string(), name) && |
Handle<JSFunction>::cast(object)->should_have_prototype() && |
!Handle<JSFunction>::cast(object)->map()->has_non_instance_prototype()) { |
Handle<Code> stub; |
@@ -1237,11 +1237,11 @@ MaybeHandle<Object> KeyedLoadIC::Load(Handle<Object> object, |
// internalized string directly or is representable as a smi. |
key = TryConvertKey(key, isolate()); |
- if (key->IsInternalizedString()) { |
+ if (key->IsInternalizedString() || key->IsSymbol()) { |
ASSIGN_RETURN_ON_EXCEPTION( |
isolate(), |
load_handle, |
- LoadIC::Load(object, Handle<String>::cast(key)), |
+ LoadIC::Load(object, Handle<Name>::cast(key)), |
Object); |
} else if (FLAG_use_ic && !object->IsAccessCheckNeeded()) { |
if (object->IsString() && key->IsNumber()) { |
@@ -1280,7 +1280,7 @@ MaybeHandle<Object> KeyedLoadIC::Load(Handle<Object> object, |
} |
-static bool LookupForWrite(Handle<Object> object, Handle<String> name, |
+static bool LookupForWrite(Handle<Object> object, Handle<Name> name, |
Handle<Object> value, LookupResult* lookup, IC* ic) { |
// Disable ICs for non-JSObjects for now. |
if (!object->IsJSObject()) return false; |
@@ -1348,7 +1348,7 @@ static bool LookupForWrite(Handle<Object> object, Handle<String> name, |
MaybeHandle<Object> StoreIC::Store(Handle<Object> object, |
- Handle<String> name, |
+ Handle<Name> name, |
Handle<Object> value, |
JSReceiver::StoreFromKeyed store_mode) { |
// TODO(verwaest): Let SetProperty do the migration, since storing a property |
@@ -1473,7 +1473,7 @@ Handle<Code> StoreIC::pre_monomorphic_stub(Isolate* isolate, |
void StoreIC::UpdateCaches(LookupResult* lookup, |
Handle<JSObject> receiver, |
- Handle<String> name, |
+ Handle<Name> name, |
Handle<Object> value) { |
DCHECK(lookup->IsFound()); |
@@ -1489,7 +1489,7 @@ void StoreIC::UpdateCaches(LookupResult* lookup, |
Handle<Code> StoreIC::CompileStoreHandler(LookupResult* lookup, |
Handle<Object> object, |
- Handle<String> name, |
+ Handle<Name> name, |
Handle<Object> value, |
CacheHolderFlag cache_holder) { |
if (object->IsAccessCheckNeeded()) return slow_stub(); |