Changeset 99034 in webkit


Ignore:
Timestamp:
Nov 1, 2011 7:24:50 PM (12 years ago)
Author:
weinig@apple.com
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.

Location:
trunk
Files:
13 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r99031 r99034  
     12011-11-01  Sam Weinig  <sam@webkit.org>
     2
     3        Implement __lookupGetter__/__lookupSetter__ in terms of getPropertyDescriptor
     4        https://bugs.webkit.org/show_bug.cgi?id=71336
     5
     6        Reviewed by Darin Adler.
     7
     8        * fast/dom/getter-on-window-object2-expected.txt:
     9        Update results now that __lookupGetter__/__lookupSetter__ match getOwnPropertyDescriptor.
     10        The failures are tracked by https://bugs.webkit.org/show_bug.cgi?id=71333.
     11
    1122011-11-01  Benjamin Poulain  <bpoulain@apple.com>
    213
  • trunk/LayoutTests/fast/dom/getter-on-window-object2-expected.txt

    r99005 r99034  
    1313
    1414PASS window.y is 'window.y __getter__'
    15 PASS typeof window.__lookupGetter__('y') is 'function'
     15FAIL typeof window.__lookupGetter__('y') should be function. Was undefined.
    1616FAIL typeof Object.getOwnPropertyDescriptor(window, 'y').get should be function. Was undefined.
    1717
    1818PASS window.y is 'window.y __getter__'
    19 PASS typeof window.__lookupGetter__('y') is 'function'
     19FAIL typeof window.__lookupGetter__('y') should be function. Was undefined.
    2020FAIL typeof Object.getOwnPropertyDescriptor(window, 'y').get should be function. Was undefined.
    2121
  • trunk/Source/JavaScriptCore/ChangeLog

    r99018 r99034  
     12011-11-01  Sam Weinig  <sam@webkit.org>
     2
     3        Implement __lookupGetter__/__lookupSetter__ in terms of getPropertyDescriptor
     4        https://bugs.webkit.org/show_bug.cgi?id=71336
     5
     6        Reviewed by Darin Adler.
     7
     8        * debugger/DebuggerActivation.cpp:
     9        * debugger/DebuggerActivation.h:
     10        Remove overrides of lookupGetter/lookupSetter, which are no longer needed
     11        due to implementing getPropertyDescriptor.
     12
     13        * runtime/JSObject.cpp:
     14        (JSC::JSObject::lookupGetter):
     15        (JSC::JSObject::lookupSetter):
     16        * runtime/JSObject.h:
     17        De-virtualize lookupGetter/lookupSetter, and implement them in terms of
     18        getPropertyDescriptor.
     19
    1202011-11-01  Mark Hahnenberg  <mhahnenberg@apple.com>
    221
  • trunk/Source/JavaScriptCore/JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def

    r99018 r99034  
    241241    ?lockAtomicallyInitializedStaticMutex@WTF@@YAXXZ
    242242    ?lockCount@JSLock@JSC@@SAHXZ
    243     ?lookupGetter@JSObject@JSC@@UAE?AVJSValue@2@PAVExecState@2@ABVIdentifier@2@@Z
    244     ?lookupSetter@JSObject@JSC@@UAE?AVJSValue@2@PAVExecState@2@ABVIdentifier@2@@Z
    245243    ?match@RegExp@JSC@@QAEHAAVJSGlobalData@2@ABVUString@2@HPAV?$Vector@H$0CA@@WTF@@@Z
    246244    ?materializePropertyMap@Structure@JSC@@AAEXAAVJSGlobalData@2@@Z
  • trunk/Source/JavaScriptCore/debugger/DebuggerActivation.cpp

    r99018 r99034  
    106106}
    107107
    108 JSValue DebuggerActivation::lookupGetter(ExecState* exec, const Identifier& propertyName)
    109 {
    110     return m_activation->lookupGetter(exec, propertyName);
    111 }
    112 
    113 JSValue DebuggerActivation::lookupSetter(ExecState* exec, const Identifier& propertyName)
    114 {
    115     return m_activation->lookupSetter(exec, propertyName);
    116 }
    117 
    118108} // namespace JSC
  • trunk/Source/JavaScriptCore/debugger/DebuggerActivation.h

    r99018 r99034  
    5252        static void defineGetter(JSObject*, ExecState*, const Identifier& propertyName, JSObject* getterFunction, unsigned attributes);
    5353        static void defineSetter(JSObject*, ExecState*, const Identifier& propertyName, JSObject* setterFunction, unsigned attributes);
    54         virtual JSValue lookupGetter(ExecState*, const Identifier& propertyName);
    55         virtual JSValue lookupSetter(ExecState*, const Identifier& propertyName);
    5654
    5755        static Structure* createStructure(JSGlobalData& globalData, JSGlobalObject* globalObject, JSValue prototype)
  • 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
  • trunk/Source/JavaScriptCore/runtime/JSObject.h

    r99018 r99034  
    188188        static void defineGetter(JSObject*, ExecState*, const Identifier& propertyName, JSObject* getterFunction, unsigned attributes = 0);
    189189        static void defineSetter(JSObject*, ExecState*, const Identifier& propertyName, JSObject* setterFunction, unsigned attributes = 0);
    190         virtual JSValue lookupGetter(ExecState*, const Identifier& propertyName);
    191         virtual JSValue lookupSetter(ExecState*, const Identifier& propertyName);
     190        JSValue lookupGetter(ExecState*, const Identifier& propertyName);
     191        JSValue lookupSetter(ExecState*, const Identifier& propertyName);
    192192        virtual bool defineOwnProperty(ExecState*, const Identifier& propertyName, PropertyDescriptor&, bool shouldThrow);
    193193
  • trunk/Source/WebCore/ChangeLog

    r99033 r99034  
     12011-11-01  Sam Weinig  <sam@webkit.org>
     2
     3        Implement __lookupGetter__/__lookupSetter__ in terms of getPropertyDescriptor
     4        https://bugs.webkit.org/show_bug.cgi?id=71336
     5
     6        Reviewed by Darin Adler.
     7
     8        * bindings/js/JSDOMWindowCustom.cpp:
     9        * bindings/js/JSDOMWindowShell.cpp:
     10        * bindings/js/JSDOMWindowShell.h:
     11        * page/DOMWindow.idl:
     12        Remove overrides of lookupGetter/lookupSetter, which are no longer needed
     13        due to implementing getPropertyDescriptor.
     14
     15
    1162011-11-01  Nat Duca  <nduca@chromium.org>
    217
  • trunk/Source/WebCore/bindings/js/JSDOMWindowCustom.cpp

    r99018 r99034  
    416416}
    417417
    418 JSValue JSDOMWindow::lookupGetter(ExecState* exec, const Identifier& propertyName)
    419 {
    420     // Only allow looking-up getters by frames in the same origin.
    421     if (!allowsAccessFrom(exec))
    422         return jsUndefined();
    423     return Base::lookupGetter(exec, propertyName);
    424 }
    425 
    426 JSValue JSDOMWindow::lookupSetter(ExecState* exec, const Identifier& propertyName)
    427 {
    428     // Only allow looking-up setters by frames in the same origin.
    429     if (!allowsAccessFrom(exec))
    430         return jsUndefined();
    431     return Base::lookupSetter(exec, propertyName);
    432 }
    433 
    434418// Custom Attributes
    435419
  • trunk/Source/WebCore/bindings/js/JSDOMWindowShell.cpp

    r99018 r99034  
    145145}
    146146
    147 JSValue JSDOMWindowShell::lookupGetter(ExecState* exec, const Identifier& propertyName)
    148 {
    149     return window()->lookupGetter(exec, propertyName);
    150 }
    151 
    152 JSValue JSDOMWindowShell::lookupSetter(ExecState* exec, const Identifier& propertyName)
    153 {
    154     return window()->lookupSetter(exec, propertyName);
    155 }
    156 
    157147
    158148// ----
  • trunk/Source/WebCore/bindings/js/JSDOMWindowShell.h

    r99018 r99034  
    9090        static void defineSetter(JSC::JSObject*, JSC::ExecState*, const JSC::Identifier& propertyName, JSC::JSObject* setterFunction, unsigned attributes);
    9191        virtual bool defineOwnProperty(JSC::ExecState*, const JSC::Identifier& propertyName, JSC::PropertyDescriptor&, bool shouldThrow);
    92         virtual JSC::JSValue lookupGetter(JSC::ExecState*, const JSC::Identifier& propertyName);
    93         virtual JSC::JSValue lookupSetter(JSC::ExecState*, const JSC::Identifier& propertyName);
    9492
    9593        RefPtr<DOMWrapperWorld> m_world;
  • trunk/Source/WebCore/page/DOMWindow.idl

    r98617 r99034  
    3434        CustomGetOwnPropertySlot,
    3535        CustomGetPropertyNames,
    36         CustomLookupGetter,
    37         CustomLookupSetter,
    3836        CustomMarkFunction,
    3937        CustomNativeConverter,
Note: See TracChangeset for help on using the changeset viewer.