Index: src/ic.cc |
diff --git a/src/ic.cc b/src/ic.cc |
index a6b7a1df8c7a3a98535cb835ebf91cda33c5e912..69a3f2a65f2e9a459a01c33f9fac488c9151c4f6 100644 |
--- a/src/ic.cc |
+++ b/src/ic.cc |
@@ -989,6 +989,7 @@ void LoadIC::UpdateCaches(LookupResult* lookup, |
if (callback->IsAccessorInfo()) { |
Handle<AccessorInfo> info = Handle<AccessorInfo>::cast(callback); |
if (v8::ToCData<Address>(info->getter()) == 0) return; |
+ if (!receiver->HasFastProperties()) return; |
if (!info->IsCompatibleReceiver(*receiver)) return; |
code = isolate()->stub_cache()->ComputeLoadCallback( |
name, receiver, holder, info); |
@@ -1265,6 +1266,7 @@ void KeyedLoadIC::UpdateCaches(LookupResult* lookup, |
Handle<AccessorInfo> callback = |
Handle<AccessorInfo>::cast(callback_object); |
if (v8::ToCData<Address>(callback->getter()) == 0) return; |
+ if (!receiver->HasFastProperties()) return; |
if (!callback->IsCompatibleReceiver(*receiver)) return; |
code = isolate()->stub_cache()->ComputeKeyedLoadCallback( |
name, receiver, holder, callback); |
@@ -1484,6 +1486,7 @@ void StoreIC::UpdateCaches(LookupResult* lookup, |
if (callback->IsAccessorInfo()) { |
Handle<AccessorInfo> info = Handle<AccessorInfo>::cast(callback); |
if (v8::ToCData<Address>(info->setter()) == 0) return; |
+ if (!receiver->HasFastProperties()) return; |
ASSERT(info->IsCompatibleReceiver(*receiver)); |
code = isolate()->stub_cache()->ComputeStoreCallback( |
name, receiver, info, strict_mode); |