Ignore:
Timestamp:
Nov 1, 2011, 7:24:50 PM (14 years ago)
Author:
[email protected]
Message:

Implement lookupGetter/lookupSetter in terms of getPropertyDescriptor
https://bugs.webkit.org/show_bug.cgi?id=71336

Reviewed by Darin Adler.

Source/JavaScriptCore:

  • debugger/DebuggerActivation.cpp:
  • debugger/DebuggerActivation.h:

Remove overrides of lookupGetter/lookupSetter, which are no longer needed
due to implementing getPropertyDescriptor.

  • runtime/JSObject.cpp:

(JSC::JSObject::lookupGetter):
(JSC::JSObject::lookupSetter):

  • runtime/JSObject.h:

De-virtualize lookupGetter/lookupSetter, and implement them in terms of
getPropertyDescriptor.

Source/WebCore:

  • bindings/js/JSDOMWindowCustom.cpp:
  • bindings/js/JSDOMWindowShell.cpp:
  • bindings/js/JSDOMWindowShell.h:
  • page/DOMWindow.idl:

Remove overrides of lookupGetter/lookupSetter, which are no longer needed
due to implementing getPropertyDescriptor.

LayoutTests:

  • fast/dom/getter-on-window-object2-expected.txt:

Update results now that lookupGetter/lookupSetter match getOwnPropertyDescriptor.
The failures are tracked by https://bugs.webkit.org/show_bug.cgi?id=71333.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/JavaScriptCore/runtime/JSObject.cpp

    r99018 r99034  
    435435JSValue JSObject::lookupGetter(ExecState* exec, const Identifier& propertyName)
    436436{
    437     JSObject* object = this;
    438     while (true) {
    439         if (JSValue value = object->getDirect(exec->globalData(), propertyName)) {
    440             if (!value.isGetterSetter())
    441                 return jsUndefined();
    442             JSObject* functionObject = asGetterSetter(value)->getter();
    443             if (!functionObject)
    444                 return jsUndefined();
    445             return functionObject;
    446         }
    447 
    448         if (!object->prototype() || !object->prototype().isObject())
    449             return jsUndefined();
    450         object = asObject(object->prototype());
    451     }
     437    PropertyDescriptor descriptor;
     438    if (!getPropertyDescriptor(exec, propertyName, descriptor))
     439        return jsUndefined();
     440
     441    if (!descriptor.getterPresent())
     442        return jsUndefined();
     443
     444    return descriptor.getter();
    452445}
    453446
    454447JSValue JSObject::lookupSetter(ExecState* exec, const Identifier& propertyName)
    455448{
    456     JSObject* object = this;
    457     while (true) {
    458         if (JSValue value = object->getDirect(exec->globalData(), propertyName)) {
    459             if (!value.isGetterSetter())
    460                 return jsUndefined();
    461             JSObject* functionObject = asGetterSetter(value)->setter();
    462             if (!functionObject)
    463                 return jsUndefined();
    464             return functionObject;
    465         }
    466 
    467         if (!object->prototype() || !object->prototype().isObject())
    468             return jsUndefined();
    469         object = asObject(object->prototype());
    470     }
     449    PropertyDescriptor descriptor;
     450    if (!getPropertyDescriptor(exec, propertyName, descriptor))
     451        return jsUndefined();
     452
     453    if (!descriptor.setterPresent())
     454        return jsUndefined();
     455   
     456    return descriptor.setter();
    471457}
    472458
Note: See TracChangeset for help on using the changeset viewer.