Reviewers: ricow, Description: Fix crash when using Object.getOwnPropertyDescriptor on an API defined callback property.
Return undefined for Object.getOwnPropertyDescriptor on an API defined callback properties for now. Please review this at http://codereview.chromium.org/542074 SVN Base: http://v8.googlecode.com/svn/branches/bleeding_edge/ Affected files: M src/runtime.cc Index: src/runtime.cc =================================================================== --- src/runtime.cc (revision 3604) +++ src/runtime.cc (working copy) @@ -597,16 +597,22 @@ return Heap::undefined_value(); if (result.type() == CALLBACKS) { - elms->set(0, Heap::true_value()); Object* structure = result.GetCallbackObject(); if (structure->IsProxy()) { - Object* value = obj->GetPropertyWithCallback( - obj, structure, name, result.holder()); - elms->set(1, value); - elms->set(2, Heap::ToBoolean(!result.IsReadOnly())); - } else { + // Property that is internally implemented as a callback. + Object* value = obj->GetPropertyWithCallback( + obj, structure, name, result.holder()); + elms->set(0, Heap::false_value()); + elms->set(1, value); + elms->set(2, Heap::ToBoolean(!result.IsReadOnly())); + } else if (structure->IsFixedArray()) { + // __defineGetter__/__defineSetter__ callback. + elms->set(0, Heap::true_value()); elms->set(1, FixedArray::cast(structure)->get(0)); elms->set(2, FixedArray::cast(structure)->get(1)); + } else { + // TODO(ricow): Handle API callbacks. + return Heap::undefined_value(); } } else { elms->set(0, Heap::false_value());
-- v8-dev mailing list [email protected] http://groups.google.com/group/v8-dev
