Changeset 196004 in webkit


Ignore:
Timestamp:
Feb 1, 2016 10:35:09 PM (8 years ago)
Author:
Chris Dumez
Message:

object.lookupGetter() / object.lookupSetter() does not work for native bindings
https://bugs.webkit.org/show_bug.cgi?id=153765
<rdar://problem/24439699>

Reviewed by Oliver Hunt.

Source/JavaScriptCore:

Add support for CustomAccessor slots to objectProtoFuncLookupGetter() and
objectProtoFuncLookupSetter() by return getOwnPropertyDescriptor().get / set.
getOwnPropertyDescriptor() now correctly deals with CustomAccessors since
r196001.

  • runtime/ObjectPrototype.cpp:

(JSC::objectProtoFuncLookupGetter):
(JSC::objectProtoFuncLookupSetter):

LayoutTests:

Add layout tests to test that object.lookupGetter() / object.lookupSetter()
works for native bindings.

  • js/lookupGetterGetter-native-bindings-expected.txt: Added.
  • js/lookupGetterGetter-native-bindings.html: Added.
Location:
trunk
Files:
2 added
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r196002 r196004  
     12016-02-01  Chris Dumez  <cdumez@apple.com>
     2
     3        object.__lookupGetter__() / object.__lookupSetter__() does not work for native bindings
     4        https://bugs.webkit.org/show_bug.cgi?id=153765
     5        <rdar://problem/24439699>
     6
     7        Reviewed by Oliver Hunt.
     8
     9        Add layout tests to test that object.__lookupGetter__() / object.__lookupSetter__()
     10        works for native bindings.
     11
     12        * js/lookupGetterGetter-native-bindings-expected.txt: Added.
     13        * js/lookupGetterGetter-native-bindings.html: Added.
     14
    1152016-02-01  Chris Dumez  <cdumez@apple.com>
    216
  • trunk/Source/JavaScriptCore/ChangeLog

    r196001 r196004  
     12016-02-01  Chris Dumez  <cdumez@apple.com>
     2
     3        object.__lookupGetter__() / object.__lookupSetter__() does not work for native bindings
     4        https://bugs.webkit.org/show_bug.cgi?id=153765
     5        <rdar://problem/24439699>
     6
     7        Reviewed by Oliver Hunt.
     8
     9        Add support for CustomAccessor slots to objectProtoFuncLookupGetter() and
     10        objectProtoFuncLookupSetter() by return getOwnPropertyDescriptor().get / set.
     11        getOwnPropertyDescriptor() now correctly deals with CustomAccessors since
     12        r196001.
     13
     14        * runtime/ObjectPrototype.cpp:
     15        (JSC::objectProtoFuncLookupGetter):
     16        (JSC::objectProtoFuncLookupSetter):
     17
    1182016-02-01  Chris Dumez  <cdumez@apple.com>
    219
  • trunk/Source/JavaScriptCore/runtime/ObjectPrototype.cpp

    r195528 r196004  
    176176
    177177    PropertySlot slot(thisObject);
    178     if (thisObject->getPropertySlot(exec, propertyName, slot) && slot.isAccessor()) {
    179         GetterSetter* getterSetter = slot.getterSetter();
    180         return getterSetter->isGetterNull() ? JSValue::encode(jsUndefined()) : JSValue::encode(getterSetter->getter());
     178    if (thisObject->getPropertySlot(exec, propertyName, slot)) {
     179        if (slot.isAccessor()) {
     180            GetterSetter* getterSetter = slot.getterSetter();
     181            return getterSetter->isGetterNull() ? JSValue::encode(jsUndefined()) : JSValue::encode(getterSetter->getter());
     182        }
     183        if (slot.attributes() & CustomAccessor) {
     184            PropertyDescriptor descriptor;
     185            ASSERT(slot.slotBase());
     186            if (slot.slotBase()->getOwnPropertyDescriptor(exec, propertyName, descriptor))
     187                return descriptor.getterPresent() ? JSValue::encode(descriptor.getter()) : JSValue::encode(jsUndefined());
     188        }
    181189    }
    182190
     
    195203
    196204    PropertySlot slot(thisObject);
    197     if (thisObject->getPropertySlot(exec, propertyName, slot) && slot.isAccessor()) {
    198         GetterSetter* getterSetter = slot.getterSetter();
    199         return getterSetter->isSetterNull() ? JSValue::encode(jsUndefined()) : JSValue::encode(getterSetter->setter());
     205    if (thisObject->getPropertySlot(exec, propertyName, slot)) {
     206        if (slot.isAccessor()) {
     207            GetterSetter* getterSetter = slot.getterSetter();
     208            return getterSetter->isSetterNull() ? JSValue::encode(jsUndefined()) : JSValue::encode(getterSetter->setter());
     209        }
     210        if (slot.attributes() & CustomAccessor) {
     211            PropertyDescriptor descriptor;
     212            ASSERT(slot.slotBase());
     213            if (slot.slotBase()->getOwnPropertyDescriptor(exec, propertyName, descriptor))
     214                return descriptor.setterPresent() ? JSValue::encode(descriptor.setter()) : JSValue::encode(jsUndefined());
     215        }
    200216    }
    201217
Note: See TracChangeset for help on using the changeset viewer.