| Index: src/ic.cc
|
| diff --git a/src/ic.cc b/src/ic.cc
|
| index b74b0d966afccd2dc5d3925d11c77b2c8ffca907..fece225b9c41320ceb8961c9def5ee752e279734 100644
|
| --- a/src/ic.cc
|
| +++ b/src/ic.cc
|
| @@ -1053,8 +1053,9 @@ Handle<Code> LoadIC::ComputeLoadMonomorphic(LookupResult* lookup,
|
| return isolate()->stub_cache()->ComputeLoadNormal();
|
| case CALLBACKS: {
|
| Handle<Object> callback(lookup->GetCallbackObject());
|
| - if (callback->IsAccessorInfo()) {
|
| - Handle<AccessorInfo> info = Handle<AccessorInfo>::cast(callback);
|
| + if (callback->IsExecutableAccessorInfo()) {
|
| + Handle<ExecutableAccessorInfo> info =
|
| + Handle<ExecutableAccessorInfo>::cast(callback);
|
| if (v8::ToCData<Address>(info->getter()) == 0) break;
|
| if (!info->IsCompatibleReceiver(*receiver)) break;
|
| return isolate()->stub_cache()->ComputeLoadCallback(
|
| @@ -1067,6 +1068,8 @@ Handle<Code> LoadIC::ComputeLoadMonomorphic(LookupResult* lookup,
|
| return isolate()->stub_cache()->ComputeLoadViaGetter(
|
| name, receiver, holder, Handle<JSFunction>::cast(getter));
|
| }
|
| + // TODO(dcarney): Handle correctly.
|
| + if (callback->IsDeclaredAccessorInfo()) break;
|
| ASSERT(callback->IsForeign());
|
| // No IC support for old-style native accessors.
|
| break;
|
| @@ -1282,9 +1285,10 @@ Handle<Code> KeyedLoadIC::ComputeLoadMonomorphic(LookupResult* lookup,
|
| }
|
| case CALLBACKS: {
|
| Handle<Object> callback_object(lookup->GetCallbackObject());
|
| - if (!callback_object->IsAccessorInfo()) break;
|
| - Handle<AccessorInfo> callback =
|
| - Handle<AccessorInfo>::cast(callback_object);
|
| + // TODO(dcarney): Handle DeclaredAccessorInfo correctly.
|
| + if (!callback_object->IsExecutableAccessorInfo()) break;
|
| + Handle<ExecutableAccessorInfo> callback =
|
| + Handle<ExecutableAccessorInfo>::cast(callback_object);
|
| if (v8::ToCData<Address>(callback->getter()) == 0) break;
|
| if (!callback->IsCompatibleReceiver(*receiver)) break;
|
| return isolate()->stub_cache()->ComputeKeyedLoadCallback(
|
| @@ -1475,8 +1479,9 @@ Handle<Code> StoreIC::ComputeStoreMonomorphic(LookupResult* lookup,
|
| return isolate()->stub_cache()->ComputeStoreNormal(strict_mode);
|
| case CALLBACKS: {
|
| Handle<Object> callback(lookup->GetCallbackObject());
|
| - if (callback->IsAccessorInfo()) {
|
| - Handle<AccessorInfo> info = Handle<AccessorInfo>::cast(callback);
|
| + if (callback->IsExecutableAccessorInfo()) {
|
| + Handle<ExecutableAccessorInfo> info =
|
| + Handle<ExecutableAccessorInfo>::cast(callback);
|
| if (v8::ToCData<Address>(info->setter()) == 0) break;
|
| if (!holder->HasFastProperties()) break;
|
| if (!info->IsCompatibleReceiver(*receiver)) break;
|
| @@ -1491,6 +1496,8 @@ Handle<Code> StoreIC::ComputeStoreMonomorphic(LookupResult* lookup,
|
| name, receiver, holder, Handle<JSFunction>::cast(setter),
|
| strict_mode);
|
| }
|
| + // TODO(dcarney): Handle correctly.
|
| + if (callback->IsDeclaredAccessorInfo()) break;
|
| ASSERT(callback->IsForeign());
|
| // No IC support for old-style native accessors.
|
| break;
|
|
|