Chromium Code Reviews| Index: src/runtime.cc |
| diff --git a/src/runtime.cc b/src/runtime.cc |
| index d8623f8ce9b5376ba082bd0da79ff3ddcd3a3403..8467c49fba844d19910090fb39c496366428e14d 100644 |
| --- a/src/runtime.cc |
| +++ b/src/runtime.cc |
| @@ -981,15 +981,19 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_IsInPrototypeChain) { |
| static bool CheckAccessException(Object* callback, |
| v8::AccessType access_type) { |
| - if (callback->IsAccessorInfo()) { |
| - AccessorInfo* info = AccessorInfo::cast(callback); |
| - return |
| - (access_type == v8::ACCESS_HAS && |
| - (info->all_can_read() || info->all_can_write())) || |
| - (access_type == v8::ACCESS_GET && info->all_can_read()) || |
| - (access_type == v8::ACCESS_SET && info->all_can_write()); |
| + AccessorInfo* info = 0; |
|
Sven Panne
2013/02/07 10:01:03
Again, this should stay as it is.
|
| + if (callback->IsExecutableAccessorInfo()) { |
| + info = ExecutableAccessorInfo::cast(callback); |
| + } else if (callback->IsDeclaredAccessorInfo()) { |
| + info = DeclaredAccessorInfo::cast(callback); |
| + } else { |
| + return false; |
| } |
| - return false; |
| + return |
| + (access_type == v8::ACCESS_HAS && |
| + (info->all_can_read() || info->all_can_write())) || |
| + (access_type == v8::ACCESS_GET && info->all_can_read()) || |
| + (access_type == v8::ACCESS_SET && info->all_can_write()); |
| } |
| @@ -4111,7 +4115,8 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_DefineOrRedefineDataProperty) { |
| // To be compatible with Safari we do not change the value on API objects |
| // in Object.defineProperty(). Firefox disagrees here, and actually changes |
| // the value. |
| - if (callback->IsAccessorInfo()) { |
| + if (callback->IsExecutableAccessorInfo() || |
|
Sven Panne
2013/02/07 10:01:03
See comment above.
|
| + callback->IsDeclaredAccessorInfo()) { |
| return isolate->heap()->undefined_value(); |
| } |
| // Avoid redefining foreign callback as data property, just use the stored |
| @@ -10148,7 +10153,9 @@ static MaybeObject* DebugLookupResultValue(Heap* heap, |
| return result->GetConstantFunction(); |
| case CALLBACKS: { |
| Object* structure = result->GetCallbackObject(); |
| - if (structure->IsForeign() || structure->IsAccessorInfo()) { |
| + if (structure->IsForeign() || |
|
Sven Panne
2013/02/07 10:01:03
See comment above.
|
| + structure->IsExecutableAccessorInfo() || |
| + structure->IsDeclaredAccessorInfo()) { |
| MaybeObject* maybe_value = result->holder()->GetPropertyWithCallback( |
| receiver, structure, name); |
| if (!maybe_value->ToObject(&value)) { |