| OLD | NEW |
| 1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "src/ic/ic.h" | 5 #include "src/ic/ic.h" |
| 6 | 6 |
| 7 #include "src/accessors.h" | 7 #include "src/accessors.h" |
| 8 #include "src/api.h" | 8 #include "src/api.h" |
| 9 #include "src/arguments.h" | 9 #include "src/arguments.h" |
| 10 #include "src/base/bits.h" | 10 #include "src/base/bits.h" |
| (...skipping 1431 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1442 Handle<JSObject> holder = it->GetHolder<JSObject>(); | 1442 Handle<JSObject> holder = it->GetHolder<JSObject>(); |
| 1443 if (receiver.is_identical_to(holder)) { | 1443 if (receiver.is_identical_to(holder)) { |
| 1444 it->PrepareForDataProperty(value); | 1444 it->PrepareForDataProperty(value); |
| 1445 // The previous receiver map might just have been deprecated, | 1445 // The previous receiver map might just have been deprecated, |
| 1446 // so reload it. | 1446 // so reload it. |
| 1447 update_receiver_map(receiver); | 1447 update_receiver_map(receiver); |
| 1448 return true; | 1448 return true; |
| 1449 } | 1449 } |
| 1450 | 1450 |
| 1451 // Receiver != holder. | 1451 // Receiver != holder. |
| 1452 PrototypeIterator iter(it->isolate(), receiver); | |
| 1453 if (receiver->IsJSGlobalProxy()) { | 1452 if (receiver->IsJSGlobalProxy()) { |
| 1453 PrototypeIterator iter(it->isolate(), |
| 1454 Handle<JSGlobalProxy>::cast(receiver)); |
| 1454 return it->GetHolder<Object>().is_identical_to( | 1455 return it->GetHolder<Object>().is_identical_to( |
| 1455 PrototypeIterator::GetCurrent(iter)); | 1456 PrototypeIterator::GetCurrent(iter)); |
| 1456 } | 1457 } |
| 1457 | 1458 |
| 1458 if (it->HolderIsReceiverOrHiddenPrototype()) return false; | 1459 if (it->HolderIsReceiverOrHiddenPrototype()) return false; |
| 1459 | 1460 |
| 1460 it->PrepareTransitionToDataProperty(value, NONE, store_mode); | 1461 it->PrepareTransitionToDataProperty(value, NONE, store_mode); |
| 1461 return it->IsCacheableTransition(); | 1462 return it->IsCacheableTransition(); |
| 1462 } | 1463 } |
| 1463 } | 1464 } |
| (...skipping 1442 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2906 RUNTIME_FUNCTION(Runtime_StorePropertyWithInterceptor) { | 2907 RUNTIME_FUNCTION(Runtime_StorePropertyWithInterceptor) { |
| 2907 HandleScope scope(isolate); | 2908 HandleScope scope(isolate); |
| 2908 DCHECK(args.length() == 3); | 2909 DCHECK(args.length() == 3); |
| 2909 StoreICNexus nexus(isolate); | 2910 StoreICNexus nexus(isolate); |
| 2910 StoreIC ic(IC::NO_EXTRA_FRAME, isolate, &nexus); | 2911 StoreIC ic(IC::NO_EXTRA_FRAME, isolate, &nexus); |
| 2911 Handle<JSObject> receiver = args.at<JSObject>(0); | 2912 Handle<JSObject> receiver = args.at<JSObject>(0); |
| 2912 Handle<Name> name = args.at<Name>(1); | 2913 Handle<Name> name = args.at<Name>(1); |
| 2913 Handle<Object> value = args.at<Object>(2); | 2914 Handle<Object> value = args.at<Object>(2); |
| 2914 #ifdef DEBUG | 2915 #ifdef DEBUG |
| 2915 PrototypeIterator iter(isolate, receiver, | 2916 PrototypeIterator iter(isolate, receiver, |
| 2916 PrototypeIterator::START_AT_RECEIVER); | 2917 PrototypeIterator::START_AT_RECEIVER, |
| 2918 PrototypeIterator::END_AT_NON_HIDDEN); |
| 2917 bool found = false; | 2919 bool found = false; |
| 2918 for (; !iter.IsAtEnd(PrototypeIterator::END_AT_NON_HIDDEN); iter.Advance()) { | 2920 for (; !iter.IsAtEnd(); iter.Advance()) { |
| 2919 Handle<Object> current = PrototypeIterator::GetCurrent(iter); | 2921 Handle<Object> current = PrototypeIterator::GetCurrent(iter); |
| 2920 if (current->IsJSObject() && | 2922 if (current->IsJSObject() && |
| 2921 Handle<JSObject>::cast(current)->HasNamedInterceptor()) { | 2923 Handle<JSObject>::cast(current)->HasNamedInterceptor()) { |
| 2922 found = true; | 2924 found = true; |
| 2923 break; | 2925 break; |
| 2924 } | 2926 } |
| 2925 } | 2927 } |
| 2926 DCHECK(found); | 2928 DCHECK(found); |
| 2927 #endif | 2929 #endif |
| 2928 Handle<Object> result; | 2930 Handle<Object> result; |
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2974 KeyedLoadICNexus nexus(vector, vector_slot); | 2976 KeyedLoadICNexus nexus(vector, vector_slot); |
| 2975 KeyedLoadIC ic(IC::EXTRA_CALL_FRAME, isolate, &nexus); | 2977 KeyedLoadIC ic(IC::EXTRA_CALL_FRAME, isolate, &nexus); |
| 2976 ic.UpdateState(receiver, key); | 2978 ic.UpdateState(receiver, key); |
| 2977 ASSIGN_RETURN_FAILURE_ON_EXCEPTION(isolate, result, ic.Load(receiver, key)); | 2979 ASSIGN_RETURN_FAILURE_ON_EXCEPTION(isolate, result, ic.Load(receiver, key)); |
| 2978 } | 2980 } |
| 2979 | 2981 |
| 2980 return *result; | 2982 return *result; |
| 2981 } | 2983 } |
| 2982 } // namespace internal | 2984 } // namespace internal |
| 2983 } // namespace v8 | 2985 } // namespace v8 |
| OLD | NEW |