Title: [99034] trunk
Revision
99034
Author
wei...@apple.com
Date
2011-11-01 19:24:50 -0700 (Tue, 01 Nov 2011)

Log Message

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

Reviewed by Darin Adler.

Source/_javascript_Core: 

* 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.

Modified Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (99033 => 99034)


--- trunk/LayoutTests/ChangeLog	2011-11-02 02:18:28 UTC (rev 99033)
+++ trunk/LayoutTests/ChangeLog	2011-11-02 02:24:50 UTC (rev 99034)
@@ -1,3 +1,14 @@
+2011-11-01  Sam Weinig  <s...@webkit.org>
+
+        Implement __lookupGetter__/__lookupSetter__ in terms of getPropertyDescriptor
+        https://bugs.webkit.org/show_bug.cgi?id=71336
+
+        Reviewed by Darin Adler.
+
+        * 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.
+
 2011-11-01  Benjamin Poulain  <bpoul...@apple.com>
 
         [Mac] _drt_descriptionSuitableForTestResult generate an exception for absolute paths above the main frame

Modified: trunk/LayoutTests/fast/dom/getter-on-window-object2-expected.txt (99033 => 99034)


--- trunk/LayoutTests/fast/dom/getter-on-window-object2-expected.txt	2011-11-02 02:18:28 UTC (rev 99033)
+++ trunk/LayoutTests/fast/dom/getter-on-window-object2-expected.txt	2011-11-02 02:24:50 UTC (rev 99034)
@@ -12,11 +12,11 @@
 PASS typeof Object.getOwnPropertyDescriptor(window, 'x').get is 'undefined'
 
 PASS window.y is 'window.y __getter__'
-PASS typeof window.__lookupGetter__('y') is 'function'
+FAIL typeof window.__lookupGetter__('y') should be function. Was undefined.
 FAIL typeof Object.getOwnPropertyDescriptor(window, 'y').get should be function. Was undefined.
 
 PASS window.y is 'window.y __getter__'
-PASS typeof window.__lookupGetter__('y') is 'function'
+FAIL typeof window.__lookupGetter__('y') should be function. Was undefined.
 FAIL typeof Object.getOwnPropertyDescriptor(window, 'y').get should be function. Was undefined.
 
 PASS window.z is undefined.

Modified: trunk/Source/_javascript_Core/ChangeLog (99033 => 99034)


--- trunk/Source/_javascript_Core/ChangeLog	2011-11-02 02:18:28 UTC (rev 99033)
+++ trunk/Source/_javascript_Core/ChangeLog	2011-11-02 02:24:50 UTC (rev 99034)
@@ -1,3 +1,22 @@
+2011-11-01  Sam Weinig  <s...@webkit.org>
+
+        Implement __lookupGetter__/__lookupSetter__ in terms of getPropertyDescriptor
+        https://bugs.webkit.org/show_bug.cgi?id=71336
+
+        Reviewed by Darin Adler.
+
+        * 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.
+
 2011-11-01  Mark Hahnenberg  <mhahnenb...@apple.com>
 
         De-virtualize JSObject::defineSetter

Modified: trunk/Source/_javascript_Core/_javascript_Core.vcproj/_javascript_Core/_javascript_Core.def (99033 => 99034)


--- trunk/Source/_javascript_Core/_javascript_Core.vcproj/_javascript_Core/_javascript_Core.def	2011-11-02 02:18:28 UTC (rev 99033)
+++ trunk/Source/_javascript_Core/_javascript_Core.vcproj/_javascript_Core/_javascript_Core.def	2011-11-02 02:24:50 UTC (rev 99034)
@@ -240,8 +240,6 @@
     ?lock@Mutex@WTF@@QAEXXZ
     ?lockAtomicallyInitializedStaticMutex@WTF@@YAXXZ
     ?lockCount@JSLock@JSC@@SAHXZ
-    ?lookupGetter@JSObject@JSC@@UAE?AVJSValue@2@PAVExecState@2@ABVIdentifier@2@@Z
-    ?lookupSetter@JSObject@JSC@@UAE?AVJSValue@2@PAVExecState@2@ABVIdentifier@2@@Z
     ?match@RegExp@JSC@@QAEHAAVJSGlobalData@2@ABVUString@2@HPAV?$Vector@H$0CA@@WTF@@@Z
     ?materializePropertyMap@Structure@JSC@@AAEXAAVJSGlobalData@2@@Z
     ?monotonicallyIncreasingTime@WTF@@YANXZ

Modified: trunk/Source/_javascript_Core/debugger/DebuggerActivation.cpp (99033 => 99034)


--- trunk/Source/_javascript_Core/debugger/DebuggerActivation.cpp	2011-11-02 02:18:28 UTC (rev 99033)
+++ trunk/Source/_javascript_Core/debugger/DebuggerActivation.cpp	2011-11-02 02:24:50 UTC (rev 99034)
@@ -105,14 +105,4 @@
     thisObject->m_activation->methodTable()->defineSetter(thisObject->m_activation.get(), exec, propertyName, setterFunction, attributes);
 }
 
-JSValue DebuggerActivation::lookupGetter(ExecState* exec, const Identifier& propertyName)
-{
-    return m_activation->lookupGetter(exec, propertyName);
-}
-
-JSValue DebuggerActivation::lookupSetter(ExecState* exec, const Identifier& propertyName)
-{
-    return m_activation->lookupSetter(exec, propertyName);
-}
-
 } // namespace JSC

Modified: trunk/Source/_javascript_Core/debugger/DebuggerActivation.h (99033 => 99034)


--- trunk/Source/_javascript_Core/debugger/DebuggerActivation.h	2011-11-02 02:18:28 UTC (rev 99033)
+++ trunk/Source/_javascript_Core/debugger/DebuggerActivation.h	2011-11-02 02:24:50 UTC (rev 99034)
@@ -51,8 +51,6 @@
         virtual bool getOwnPropertyDescriptor(ExecState*, const Identifier&, PropertyDescriptor&);
         static void defineGetter(JSObject*, ExecState*, const Identifier& propertyName, JSObject* getterFunction, unsigned attributes);
         static void defineSetter(JSObject*, ExecState*, const Identifier& propertyName, JSObject* setterFunction, unsigned attributes);
-        virtual JSValue lookupGetter(ExecState*, const Identifier& propertyName);
-        virtual JSValue lookupSetter(ExecState*, const Identifier& propertyName);
 
         static Structure* createStructure(JSGlobalData& globalData, JSGlobalObject* globalObject, JSValue prototype) 
         {

Modified: trunk/Source/_javascript_Core/runtime/JSObject.cpp (99033 => 99034)


--- trunk/Source/_javascript_Core/runtime/JSObject.cpp	2011-11-02 02:18:28 UTC (rev 99033)
+++ trunk/Source/_javascript_Core/runtime/JSObject.cpp	2011-11-02 02:24:50 UTC (rev 99034)
@@ -434,40 +434,26 @@
 
 JSValue JSObject::lookupGetter(ExecState* exec, const Identifier& propertyName)
 {
-    JSObject* object = this;
-    while (true) {
-        if (JSValue value = object->getDirect(exec->globalData(), propertyName)) {
-            if (!value.isGetterSetter())
-                return jsUndefined();
-            JSObject* functionObject = asGetterSetter(value)->getter();
-            if (!functionObject)
-                return jsUndefined();
-            return functionObject;
-        }
+    PropertyDescriptor descriptor;
+    if (!getPropertyDescriptor(exec, propertyName, descriptor))
+        return jsUndefined();
 
-        if (!object->prototype() || !object->prototype().isObject())
-            return jsUndefined();
-        object = asObject(object->prototype());
-    }
+    if (!descriptor.getterPresent())
+        return jsUndefined();
+
+    return descriptor.getter();
 }
 
 JSValue JSObject::lookupSetter(ExecState* exec, const Identifier& propertyName)
 {
-    JSObject* object = this;
-    while (true) {
-        if (JSValue value = object->getDirect(exec->globalData(), propertyName)) {
-            if (!value.isGetterSetter())
-                return jsUndefined();
-            JSObject* functionObject = asGetterSetter(value)->setter();
-            if (!functionObject)
-                return jsUndefined();
-            return functionObject;
-        }
+    PropertyDescriptor descriptor;
+    if (!getPropertyDescriptor(exec, propertyName, descriptor))
+        return jsUndefined();
 
-        if (!object->prototype() || !object->prototype().isObject())
-            return jsUndefined();
-        object = asObject(object->prototype());
-    }
+    if (!descriptor.setterPresent())
+        return jsUndefined();
+    
+    return descriptor.setter();
 }
 
 bool JSObject::hasInstance(ExecState* exec, JSValue value, JSValue proto)

Modified: trunk/Source/_javascript_Core/runtime/JSObject.h (99033 => 99034)


--- trunk/Source/_javascript_Core/runtime/JSObject.h	2011-11-02 02:18:28 UTC (rev 99033)
+++ trunk/Source/_javascript_Core/runtime/JSObject.h	2011-11-02 02:24:50 UTC (rev 99034)
@@ -187,8 +187,8 @@
 
         static void defineGetter(JSObject*, ExecState*, const Identifier& propertyName, JSObject* getterFunction, unsigned attributes = 0);
         static void defineSetter(JSObject*, ExecState*, const Identifier& propertyName, JSObject* setterFunction, unsigned attributes = 0);
-        virtual JSValue lookupGetter(ExecState*, const Identifier& propertyName);
-        virtual JSValue lookupSetter(ExecState*, const Identifier& propertyName);
+        JSValue lookupGetter(ExecState*, const Identifier& propertyName);
+        JSValue lookupSetter(ExecState*, const Identifier& propertyName);
         virtual bool defineOwnProperty(ExecState*, const Identifier& propertyName, PropertyDescriptor&, bool shouldThrow);
 
         bool isGlobalObject() const;

Modified: trunk/Source/WebCore/ChangeLog (99033 => 99034)


--- trunk/Source/WebCore/ChangeLog	2011-11-02 02:18:28 UTC (rev 99033)
+++ trunk/Source/WebCore/ChangeLog	2011-11-02 02:24:50 UTC (rev 99034)
@@ -1,3 +1,18 @@
+2011-11-01  Sam Weinig  <s...@webkit.org>
+
+        Implement __lookupGetter__/__lookupSetter__ in terms of getPropertyDescriptor
+        https://bugs.webkit.org/show_bug.cgi?id=71336
+
+        Reviewed by Darin Adler.
+
+        * 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.
+
+
 2011-11-01  Nat Duca  <nd...@chromium.org>
 
         [chromium] Move resource-releasing logic into CCProxy and cleanup setNeedsCommit

Modified: trunk/Source/WebCore/bindings/js/JSDOMWindowCustom.cpp (99033 => 99034)


--- trunk/Source/WebCore/bindings/js/JSDOMWindowCustom.cpp	2011-11-02 02:18:28 UTC (rev 99033)
+++ trunk/Source/WebCore/bindings/js/JSDOMWindowCustom.cpp	2011-11-02 02:24:50 UTC (rev 99034)
@@ -415,22 +415,6 @@
     return Base::defineOwnProperty(exec, propertyName, descriptor, shouldThrow);
 }
 
-JSValue JSDOMWindow::lookupGetter(ExecState* exec, const Identifier& propertyName)
-{
-    // Only allow looking-up getters by frames in the same origin.
-    if (!allowsAccessFrom(exec))
-        return jsUndefined();
-    return Base::lookupGetter(exec, propertyName);
-}
-
-JSValue JSDOMWindow::lookupSetter(ExecState* exec, const Identifier& propertyName)
-{
-    // Only allow looking-up setters by frames in the same origin.
-    if (!allowsAccessFrom(exec))
-        return jsUndefined();
-    return Base::lookupSetter(exec, propertyName);
-}
-
 // Custom Attributes
 
 JSValue JSDOMWindow::history(ExecState* exec) const

Modified: trunk/Source/WebCore/bindings/js/JSDOMWindowShell.cpp (99033 => 99034)


--- trunk/Source/WebCore/bindings/js/JSDOMWindowShell.cpp	2011-11-02 02:18:28 UTC (rev 99033)
+++ trunk/Source/WebCore/bindings/js/JSDOMWindowShell.cpp	2011-11-02 02:24:50 UTC (rev 99034)
@@ -144,17 +144,7 @@
     thisObject->window()->methodTable()->defineSetter(thisObject->window(), exec, propertyName, setterFunction, attributes);
 }
 
-JSValue JSDOMWindowShell::lookupGetter(ExecState* exec, const Identifier& propertyName)
-{
-    return window()->lookupGetter(exec, propertyName);
-}
 
-JSValue JSDOMWindowShell::lookupSetter(ExecState* exec, const Identifier& propertyName)
-{
-    return window()->lookupSetter(exec, propertyName);
-}
-
-
 // ----
 // JSDOMWindow methods
 // ----

Modified: trunk/Source/WebCore/bindings/js/JSDOMWindowShell.h (99033 => 99034)


--- trunk/Source/WebCore/bindings/js/JSDOMWindowShell.h	2011-11-02 02:18:28 UTC (rev 99033)
+++ trunk/Source/WebCore/bindings/js/JSDOMWindowShell.h	2011-11-02 02:24:50 UTC (rev 99034)
@@ -89,8 +89,6 @@
         static void defineGetter(JSC::JSObject*, JSC::ExecState*, const JSC::Identifier& propertyName, JSC::JSObject* getterFunction, unsigned attributes);
         static void defineSetter(JSC::JSObject*, JSC::ExecState*, const JSC::Identifier& propertyName, JSC::JSObject* setterFunction, unsigned attributes);
         virtual bool defineOwnProperty(JSC::ExecState*, const JSC::Identifier& propertyName, JSC::PropertyDescriptor&, bool shouldThrow);
-        virtual JSC::JSValue lookupGetter(JSC::ExecState*, const JSC::Identifier& propertyName);
-        virtual JSC::JSValue lookupSetter(JSC::ExecState*, const JSC::Identifier& propertyName);
 
         RefPtr<DOMWrapperWorld> m_world;
     };

Modified: trunk/Source/WebCore/page/DOMWindow.idl (99033 => 99034)


--- trunk/Source/WebCore/page/DOMWindow.idl	2011-11-02 02:18:28 UTC (rev 99033)
+++ trunk/Source/WebCore/page/DOMWindow.idl	2011-11-02 02:24:50 UTC (rev 99034)
@@ -33,8 +33,6 @@
         CustomDeleteProperty,
         CustomGetOwnPropertySlot,
         CustomGetPropertyNames,
-        CustomLookupGetter,
-        CustomLookupSetter,
         CustomMarkFunction,
         CustomNativeConverter,
         CustomPutFunction,
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to