Title: [99018] trunk/Source
Revision
99018
Author
[email protected]
Date
2011-11-01 17:36:20 -0700 (Tue, 01 Nov 2011)

Log Message

De-virtualize JSObject::defineSetter
https://bugs.webkit.org/show_bug.cgi?id=71303

Reviewed by Darin Adler.

Source/_javascript_Core:

Added defineSetter to the MethodTable, changed all the virtual
implementations of defineSetter to static ones, and replaced
all call sites with corresponding lookups in the MethodTable.

* _javascript_Core.exp:
* _javascript_Core.vcproj/_javascript_Core/_javascript_Core.def:
* debugger/DebuggerActivation.cpp:
(JSC::DebuggerActivation::defineSetter):
* debugger/DebuggerActivation.h:
* interpreter/Interpreter.cpp:
(JSC::Interpreter::privateExecute):
* jit/JITStubs.cpp:
(JSC::DEFINE_STUB_FUNCTION):
* runtime/ClassInfo.h:
* runtime/JSCell.cpp:
(JSC::JSCell::defineSetter):
* runtime/JSCell.h:
* runtime/JSGlobalObject.cpp:
(JSC::JSGlobalObject::defineSetter):
* runtime/JSGlobalObject.h:
* runtime/JSObject.cpp:
(JSC::JSObject::defineSetter):
(JSC::putDescriptor):
* runtime/JSObject.h:
* runtime/ObjectPrototype.cpp:
(JSC::objectProtoFuncDefineSetter):

Source/WebCore:

No new tests.

Added defineSetter to the MethodTable, changed all the virtual
implementations of defineSetter to static ones, and replaced
all call sites with corresponding lookups in the MethodTable.

* bindings/js/JSDOMWindowCustom.cpp:
(WebCore::JSDOMWindow::defineSetter):
* bindings/js/JSDOMWindowShell.cpp:
(WebCore::JSDOMWindowShell::defineSetter):
* bindings/js/JSDOMWindowShell.h:
* bindings/scripts/CodeGeneratorJS.pm:
(GenerateHeader):

Modified Paths

Diff

Modified: trunk/Source/_javascript_Core/ChangeLog (99017 => 99018)


--- trunk/Source/_javascript_Core/ChangeLog	2011-11-02 00:34:14 UTC (rev 99017)
+++ trunk/Source/_javascript_Core/ChangeLog	2011-11-02 00:36:20 UTC (rev 99018)
@@ -1,3 +1,37 @@
+2011-11-01  Mark Hahnenberg  <[email protected]>
+
+        De-virtualize JSObject::defineSetter
+        https://bugs.webkit.org/show_bug.cgi?id=71303
+
+        Reviewed by Darin Adler.
+
+        Added defineSetter to the MethodTable, changed all the virtual 
+        implementations of defineSetter to static ones, and replaced 
+        all call sites with corresponding lookups in the MethodTable.
+
+        * _javascript_Core.exp:
+        * _javascript_Core.vcproj/_javascript_Core/_javascript_Core.def:
+        * debugger/DebuggerActivation.cpp:
+        (JSC::DebuggerActivation::defineSetter):
+        * debugger/DebuggerActivation.h:
+        * interpreter/Interpreter.cpp:
+        (JSC::Interpreter::privateExecute):
+        * jit/JITStubs.cpp:
+        (JSC::DEFINE_STUB_FUNCTION):
+        * runtime/ClassInfo.h:
+        * runtime/JSCell.cpp:
+        (JSC::JSCell::defineSetter):
+        * runtime/JSCell.h:
+        * runtime/JSGlobalObject.cpp:
+        (JSC::JSGlobalObject::defineSetter):
+        * runtime/JSGlobalObject.h:
+        * runtime/JSObject.cpp:
+        (JSC::JSObject::defineSetter):
+        (JSC::putDescriptor):
+        * runtime/JSObject.h:
+        * runtime/ObjectPrototype.cpp:
+        (JSC::objectProtoFuncDefineSetter):
+
 2011-11-01  Filip Pizlo  <[email protected]>
 
         DFG inlining breaks function.arguments

Modified: trunk/Source/_javascript_Core/_javascript_Core.exp (99017 => 99018)


--- trunk/Source/_javascript_Core/_javascript_Core.exp	2011-11-02 00:34:14 UTC (rev 99017)
+++ trunk/Source/_javascript_Core/_javascript_Core.exp	2011-11-02 00:36:20 UTC (rev 99018)
@@ -166,7 +166,7 @@
 __ZN3JSC13StatementNode6setLocEii
 __ZN3JSC14JSGlobalObject10globalExecEv
 __ZN3JSC14JSGlobalObject12defineGetterEPNS_8JSObjectEPNS_9ExecStateERKNS_10IdentifierES2_j
-__ZN3JSC14JSGlobalObject12defineSetterEPNS_9ExecStateERKNS_10IdentifierEPNS_8JSObjectEj
+__ZN3JSC14JSGlobalObject12defineSetterEPNS_8JSObjectEPNS_9ExecStateERKNS_10IdentifierES2_j
 __ZN3JSC14JSGlobalObject13clearRareDataEPNS_6JSCellE
 __ZN3JSC14JSGlobalObject13visitChildrenEPNS_6JSCellERNS_11SlotVisitorE
 __ZN3JSC14JSGlobalObject16addStaticGlobalsEPNS0_18GlobalPropertyInfoEi
@@ -307,7 +307,7 @@
 __ZN3JSC8JSObject11hasInstanceEPNS_9ExecStateENS_7JSValueES3_
 __ZN3JSC8JSObject12defineGetterEPS0_PNS_9ExecStateERKNS_10IdentifierES1_j
 __ZN3JSC8JSObject12defaultValueEPKS0_PNS_9ExecStateENS_22PreferredPrimitiveTypeE
-__ZN3JSC8JSObject12defineSetterEPNS_9ExecStateERKNS_10IdentifierEPS0_j
+__ZN3JSC8JSObject12defineSetterEPS0_PNS_9ExecStateERKNS_10IdentifierES1_j
 __ZN3JSC8JSObject12lookupGetterEPNS_9ExecStateERKNS_10IdentifierE
 __ZN3JSC8JSObject12lookupSetterEPNS_9ExecStateERKNS_10IdentifierE
 __ZN3JSC8JSObject12toThisObjectEPNS_6JSCellEPNS_9ExecStateE

Modified: trunk/Source/_javascript_Core/_javascript_Core.vcproj/_javascript_Core/_javascript_Core.def (99017 => 99018)


--- trunk/Source/_javascript_Core/_javascript_Core.vcproj/_javascript_Core/_javascript_Core.def	2011-11-02 00:34:14 UTC (rev 99017)
+++ trunk/Source/_javascript_Core/_javascript_Core.vcproj/_javascript_Core/_javascript_Core.def	2011-11-02 00:36:20 UTC (rev 99018)
@@ -137,8 +137,8 @@
     ?defineOwnProperty@JSObject@JSC@@UAE_NPAVExecState@2@ABVIdentifier@2@AAVPropertyDescriptor@2@_N@Z
     ?defineGetter@JSGlobalObject@JSC@@SAXPAVJSObject@2@PAVExecState@2@ABVIdentifier@2@0I@Z
     ?defineGetter@JSObject@JSC@@SAXPAV12@PAVExecState@2@ABVIdentifier@2@0I@Z
-    ?defineSetter@JSGlobalObject@JSC@@UAEXPAVExecState@2@ABVIdentifier@2@PAVJSObject@2@I@Z
-    ?defineSetter@JSObject@JSC@@UAEXPAVExecState@2@ABVIdentifier@2@PAV12@I@Z
+    ?defineSetter@JSGlobalObject@JSC@@SAXPAVJSObject@2@PAVExecState@2@ABVIdentifier@2@0I@Z
+    ?defineSetter@JSObject@JSC@@SAXPAV12@PAVExecState@2@ABVIdentifier@2@0I@Z
     ?deleteOwnedPtr@WTF@@YAXPAUHBITMAP__@@@Z
     ?deleteOwnedPtr@WTF@@YAXPAUHBRUSH__@@@Z
     ?deleteOwnedPtr@WTF@@YAXPAUHDC__@@@Z

Modified: trunk/Source/_javascript_Core/debugger/DebuggerActivation.cpp (99017 => 99018)


--- trunk/Source/_javascript_Core/debugger/DebuggerActivation.cpp	2011-11-02 00:34:14 UTC (rev 99017)
+++ trunk/Source/_javascript_Core/debugger/DebuggerActivation.cpp	2011-11-02 00:36:20 UTC (rev 99018)
@@ -99,9 +99,10 @@
     thisObject->m_activation->methodTable()->defineGetter(thisObject->m_activation.get(), exec, propertyName, getterFunction, attributes);
 }
 
-void DebuggerActivation::defineSetter(ExecState* exec, const Identifier& propertyName, JSObject* setterFunction, unsigned attributes)
+void DebuggerActivation::defineSetter(JSObject* object, ExecState* exec, const Identifier& propertyName, JSObject* setterFunction, unsigned attributes)
 {
-    m_activation->defineSetter(exec, propertyName, setterFunction, attributes);
+    DebuggerActivation* thisObject = static_cast<DebuggerActivation*>(object);
+    thisObject->m_activation->methodTable()->defineSetter(thisObject->m_activation.get(), exec, propertyName, setterFunction, attributes);
 }
 
 JSValue DebuggerActivation::lookupGetter(ExecState* exec, const Identifier& propertyName)

Modified: trunk/Source/_javascript_Core/debugger/DebuggerActivation.h (99017 => 99018)


--- trunk/Source/_javascript_Core/debugger/DebuggerActivation.h	2011-11-02 00:34:14 UTC (rev 99017)
+++ trunk/Source/_javascript_Core/debugger/DebuggerActivation.h	2011-11-02 00:36:20 UTC (rev 99018)
@@ -50,7 +50,7 @@
         virtual void getOwnPropertyNames(ExecState*, PropertyNameArray&, EnumerationMode mode = ExcludeDontEnumProperties);
         virtual bool getOwnPropertyDescriptor(ExecState*, const Identifier&, PropertyDescriptor&);
         static void defineGetter(JSObject*, ExecState*, const Identifier& propertyName, JSObject* getterFunction, unsigned attributes);
-        virtual void defineSetter(ExecState*, const Identifier& propertyName, JSObject* setterFunction, 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);
 

Modified: trunk/Source/_javascript_Core/interpreter/Interpreter.cpp (99017 => 99018)


--- trunk/Source/_javascript_Core/interpreter/Interpreter.cpp	2011-11-02 00:34:14 UTC (rev 99017)
+++ trunk/Source/_javascript_Core/interpreter/Interpreter.cpp	2011-11-02 00:36:20 UTC (rev 99018)
@@ -5013,7 +5013,7 @@
         JSObject* baseObj = asObject(callFrame->r(base).jsValue());
         Identifier& ident = codeBlock->identifier(property);
         ASSERT(callFrame->r(function).jsValue().isObject());
-        baseObj->defineSetter(callFrame, ident, asObject(callFrame->r(function).jsValue()), 0);
+        baseObj->methodTable()->defineSetter(baseObj, callFrame, ident, asObject(callFrame->r(function).jsValue()), 0);
 
         vPC += OPCODE_LENGTH(op_put_setter);
         NEXT_INSTRUCTION();

Modified: trunk/Source/_javascript_Core/jit/JITStubs.cpp (99017 => 99018)


--- trunk/Source/_javascript_Core/jit/JITStubs.cpp	2011-11-02 00:34:14 UTC (rev 99017)
+++ trunk/Source/_javascript_Core/jit/JITStubs.cpp	2011-11-02 00:36:20 UTC (rev 99018)
@@ -3757,7 +3757,7 @@
     ASSERT(stackFrame.args[0].jsValue().isObject());
     JSObject* baseObj = asObject(stackFrame.args[0].jsValue());
     ASSERT(stackFrame.args[2].jsValue().isObject());
-    baseObj->defineSetter(callFrame, stackFrame.args[1].identifier(), asObject(stackFrame.args[2].jsValue()));
+    baseObj->methodTable()->defineSetter(baseObj, callFrame, stackFrame.args[1].identifier(), asObject(stackFrame.args[2].jsValue()), 0);
 }
 
 DEFINE_STUB_FUNCTION(void, op_throw_reference_error)

Modified: trunk/Source/_javascript_Core/runtime/ClassInfo.h (99017 => 99018)


--- trunk/Source/_javascript_Core/runtime/ClassInfo.h	2011-11-02 00:34:14 UTC (rev 99017)
+++ trunk/Source/_javascript_Core/runtime/ClassInfo.h	2011-11-02 00:36:20 UTC (rev 99018)
@@ -65,6 +65,9 @@
         typedef void (*DefineGetterFunctionPtr)(JSObject*, ExecState*, const Identifier&, JSObject*, unsigned);
         DefineGetterFunctionPtr defineGetter;
 
+        typedef void (*DefineSetterFunctionPtr)(JSObject*, ExecState*, const Identifier&, JSObject*, unsigned);
+        DefineSetterFunctionPtr defineSetter;
+
         typedef JSValue (*DefaultValueFunctionPtr)(const JSObject*, ExecState*, PreferredPrimitiveType);
         DefaultValueFunctionPtr defaultValue;
     };
@@ -100,6 +103,7 @@
         &ClassName::getOwnPropertySlotByIndex, \
         &ClassName::toThisObject, \
         &ClassName::defineGetter, \
+        &ClassName::defineSetter, \
         &ClassName::defaultValue, \
     }, \
     sizeof(ClassName)

Modified: trunk/Source/_javascript_Core/runtime/JSCell.cpp (99017 => 99018)


--- trunk/Source/_javascript_Core/runtime/JSCell.cpp	2011-11-02 00:34:14 UTC (rev 99017)
+++ trunk/Source/_javascript_Core/runtime/JSCell.cpp	2011-11-02 00:36:20 UTC (rev 99018)
@@ -163,6 +163,11 @@
     ASSERT_NOT_REACHED();
 }
 
+void JSCell::defineSetter(JSObject*, ExecState*, const Identifier&, JSObject*, unsigned)
+{
+    ASSERT_NOT_REACHED();
+}
+
 JSValue JSCell::defaultValue(const JSObject*, ExecState*, PreferredPrimitiveType)
 {
     ASSERT_NOT_REACHED();

Modified: trunk/Source/_javascript_Core/runtime/JSCell.h (99017 => 99018)


--- trunk/Source/_javascript_Core/runtime/JSCell.h	2011-11-02 00:34:14 UTC (rev 99017)
+++ trunk/Source/_javascript_Core/runtime/JSCell.h	2011-11-02 00:36:20 UTC (rev 99018)
@@ -135,6 +135,7 @@
 
         // Dummy implementations of override-able static functions for classes to put in their MethodTable
         static NO_RETURN_DUE_TO_ASSERT void defineGetter(JSObject*, ExecState*, const Identifier&, JSObject*, unsigned);
+        static NO_RETURN_DUE_TO_ASSERT void defineSetter(JSObject*, ExecState*, const Identifier& propertyName, JSObject* setterFunction, unsigned attributes = 0);
         static JSValue defaultValue(const JSObject*, ExecState*, PreferredPrimitiveType);
 
     private:

Modified: trunk/Source/_javascript_Core/runtime/JSGlobalObject.cpp (99017 => 99018)


--- trunk/Source/_javascript_Core/runtime/JSGlobalObject.cpp	2011-11-02 00:34:14 UTC (rev 99017)
+++ trunk/Source/_javascript_Core/runtime/JSGlobalObject.cpp	2011-11-02 00:36:20 UTC (rev 99018)
@@ -171,11 +171,12 @@
         JSVariableObject::defineGetter(thisObject, exec, propertyName, getterFunc, attributes);
 }
 
-void JSGlobalObject::defineSetter(ExecState* exec, const Identifier& propertyName, JSObject* setterFunc, unsigned attributes)
+void JSGlobalObject::defineSetter(JSObject* object, ExecState* exec, const Identifier& propertyName, JSObject* setterFunc, unsigned attributes)
 {
+    JSGlobalObject* thisObject = static_cast<JSGlobalObject*>(object);
     PropertySlot slot;
-    if (!symbolTableGet(propertyName, slot))
-        JSVariableObject::defineSetter(exec, propertyName, setterFunc, attributes);
+    if (!thisObject->symbolTableGet(propertyName, slot))
+        JSVariableObject::defineSetter(thisObject, exec, propertyName, setterFunc, attributes);
 }
 
 static inline JSObject* lastInPrototypeChain(JSObject* object)

Modified: trunk/Source/_javascript_Core/runtime/JSGlobalObject.h (99017 => 99018)


--- trunk/Source/_javascript_Core/runtime/JSGlobalObject.h	2011-11-02 00:34:14 UTC (rev 99017)
+++ trunk/Source/_javascript_Core/runtime/JSGlobalObject.h	2011-11-02 00:36:20 UTC (rev 99018)
@@ -190,7 +190,7 @@
         virtual void putWithAttributes(ExecState*, const Identifier& propertyName, JSValue value, unsigned attributes);
 
         static void defineGetter(JSObject*, ExecState*, const Identifier& propertyName, JSObject* getterFunc, unsigned attributes);
-        virtual void defineSetter(ExecState*, const Identifier& propertyName, JSObject* setterFunc, unsigned attributes);
+        static void defineSetter(JSObject*, ExecState*, const Identifier& propertyName, JSObject* setterFunc, unsigned attributes);
 
         // We use this in the code generator as we perform symbol table
         // lookups prior to initializing the properties

Modified: trunk/Source/_javascript_Core/runtime/JSObject.cpp (99017 => 99018)


--- trunk/Source/_javascript_Core/runtime/JSObject.cpp	2011-11-02 00:34:14 UTC (rev 99017)
+++ trunk/Source/_javascript_Core/runtime/JSObject.cpp	2011-11-02 00:36:20 UTC (rev 99018)
@@ -402,33 +402,33 @@
     structure()->setHasGetterSetterProperties(true);
 }
 
-void JSObject::defineSetter(ExecState* exec, const Identifier& propertyName, JSObject* setterFunction, unsigned attributes)
+void JSObject::defineSetter(JSObject* thisObject, ExecState* exec, const Identifier& propertyName, JSObject* setterFunction, unsigned attributes)
 {
     if (propertyName == exec->propertyNames().underscoreProto) {
         // Defining a setter for __proto__ is silently ignored.
         return;
     }
 
-    JSValue object = getDirect(exec->globalData(), propertyName);
+    JSValue object = thisObject->getDirect(exec->globalData(), propertyName);
     if (object && object.isGetterSetter()) {
-        ASSERT(structure()->hasGetterSetterProperties());
+        ASSERT(thisObject->structure()->hasGetterSetterProperties());
         asGetterSetter(object)->setSetter(exec->globalData(), setterFunction);
         return;
     }
 
     PutPropertySlot slot;
     GetterSetter* getterSetter = GetterSetter::create(exec);
-    putDirectInternal(exec->globalData(), propertyName, getterSetter, attributes | Setter, true, slot, 0);
+    thisObject->putDirectInternal(exec->globalData(), propertyName, getterSetter, attributes | Setter, true, slot, 0);
 
     // putDirect will change our Structure if we add a new property. For
     // getters and setters, though, we also need to change our Structure
     // if we override an existing non-getter or non-setter.
     if (slot.type() != PutPropertySlot::NewProperty) {
-        if (!structure()->isDictionary())
-            setStructure(exec->globalData(), Structure::getterSetterTransition(exec->globalData(), structure()));
+        if (!thisObject->structure()->isDictionary())
+            thisObject->setStructure(exec->globalData(), Structure::getterSetterTransition(exec->globalData(), thisObject->structure()));
     }
 
-    structure()->setHasGetterSetterProperties(true);
+    thisObject->structure()->setHasGetterSetterProperties(true);
     getterSetter->setSetter(exec->globalData(), setterFunction);
 }
 
@@ -736,7 +736,7 @@
     if (exec->hadException())
         return false;
     if (descriptor.setter() && descriptor.setter().isObject())
-        target->defineSetter(exec, propertyName, asObject(descriptor.setter()), attributes);
+        target->methodTable()->defineSetter(target, exec, propertyName, asObject(descriptor.setter()), attributes);
     return !exec->hadException();
 }
 

Modified: trunk/Source/_javascript_Core/runtime/JSObject.h (99017 => 99018)


--- trunk/Source/_javascript_Core/runtime/JSObject.h	2011-11-02 00:34:14 UTC (rev 99017)
+++ trunk/Source/_javascript_Core/runtime/JSObject.h	2011-11-02 00:36:20 UTC (rev 99018)
@@ -186,7 +186,7 @@
         void initializeGetterSetterProperty(ExecState*, const Identifier&, GetterSetter*, unsigned attributes);
 
         static void defineGetter(JSObject*, ExecState*, const Identifier& propertyName, JSObject* getterFunction, unsigned attributes = 0);
-        virtual void defineSetter(ExecState*, const Identifier& propertyName, JSObject* setterFunction, 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);
         virtual bool defineOwnProperty(ExecState*, const Identifier& propertyName, PropertyDescriptor&, bool shouldThrow);

Modified: trunk/Source/_javascript_Core/runtime/ObjectPrototype.cpp (99017 => 99018)


--- trunk/Source/_javascript_Core/runtime/ObjectPrototype.cpp	2011-11-02 00:34:14 UTC (rev 99017)
+++ trunk/Source/_javascript_Core/runtime/ObjectPrototype.cpp	2011-11-02 00:36:20 UTC (rev 99018)
@@ -160,7 +160,7 @@
     CallData callData;
     if (getCallData(exec->argument(1), callData) == CallTypeNone)
         return throwVMError(exec, createSyntaxError(exec, "invalid setter usage"));
-    thisObject->defineSetter(exec, Identifier(exec, exec->argument(0).toString(exec)), asObject(exec->argument(1)));
+    thisObject->methodTable()->defineSetter(thisObject, exec, Identifier(exec, exec->argument(0).toString(exec)), asObject(exec->argument(1)), 0);
     return JSValue::encode(jsUndefined());
 }
 

Modified: trunk/Source/WebCore/ChangeLog (99017 => 99018)


--- trunk/Source/WebCore/ChangeLog	2011-11-02 00:34:14 UTC (rev 99017)
+++ trunk/Source/WebCore/ChangeLog	2011-11-02 00:36:20 UTC (rev 99018)
@@ -1,3 +1,24 @@
+2011-11-01  Mark Hahnenberg  <[email protected]>
+
+        De-virtualize JSObject::defineSetter
+        https://bugs.webkit.org/show_bug.cgi?id=71303
+
+        Reviewed by Darin Adler.
+
+        No new tests.
+
+        Added defineSetter to the MethodTable, changed all the virtual 
+        implementations of defineSetter to static ones, and replaced 
+        all call sites with corresponding lookups in the MethodTable.
+
+        * bindings/js/JSDOMWindowCustom.cpp:
+        (WebCore::JSDOMWindow::defineSetter):
+        * bindings/js/JSDOMWindowShell.cpp:
+        (WebCore::JSDOMWindowShell::defineSetter):
+        * bindings/js/JSDOMWindowShell.h:
+        * bindings/scripts/CodeGeneratorJS.pm:
+        (GenerateHeader):
+
 2011-11-01  Emil A Eklund  <[email protected]>
 
         Switch PopupMenuClient to layout abstraction

Modified: trunk/Source/WebCore/bindings/js/JSDOMWindowCustom.cpp (99017 => 99018)


--- trunk/Source/WebCore/bindings/js/JSDOMWindowCustom.cpp	2011-11-02 00:34:14 UTC (rev 99017)
+++ trunk/Source/WebCore/bindings/js/JSDOMWindowCustom.cpp	2011-11-02 00:36:20 UTC (rev 99018)
@@ -398,12 +398,13 @@
     Base::defineGetter(thisObject, exec, propertyName, getterFunction, attributes);
 }
 
-void JSDOMWindow::defineSetter(ExecState* exec, const Identifier& propertyName, JSObject* setterFunction, unsigned attributes)
+void JSDOMWindow::defineSetter(JSObject* object, ExecState* exec, const Identifier& propertyName, JSObject* setterFunction, unsigned attributes)
 {
+    JSDOMWindow* thisObject = static_cast<JSDOMWindow*>(object);
     // Only allow defining setters by frames in the same origin.
-    if (!allowsAccessFrom(exec))
+    if (!thisObject->allowsAccessFrom(exec))
         return;
-    Base::defineSetter(exec, propertyName, setterFunction, attributes);
+    Base::defineSetter(thisObject, exec, propertyName, setterFunction, attributes);
 }
 
 bool JSDOMWindow::defineOwnProperty(JSC::ExecState* exec, const JSC::Identifier& propertyName, JSC::PropertyDescriptor& descriptor, bool shouldThrow)

Modified: trunk/Source/WebCore/bindings/js/JSDOMWindowShell.cpp (99017 => 99018)


--- trunk/Source/WebCore/bindings/js/JSDOMWindowShell.cpp	2011-11-02 00:34:14 UTC (rev 99017)
+++ trunk/Source/WebCore/bindings/js/JSDOMWindowShell.cpp	2011-11-02 00:36:20 UTC (rev 99018)
@@ -138,9 +138,10 @@
     thisObject->window()->methodTable()->defineGetter(thisObject->window(), exec, propertyName, getterFunction, attributes);
 }
 
-void JSDOMWindowShell::defineSetter(ExecState* exec, const Identifier& propertyName, JSObject* setterFunction, unsigned attributes)
+void JSDOMWindowShell::defineSetter(JSObject* object, ExecState* exec, const Identifier& propertyName, JSObject* setterFunction, unsigned attributes)
 {
-    window()->defineSetter(exec, propertyName, setterFunction, attributes);
+    JSDOMWindowShell* thisObject = static_cast<JSDOMWindowShell*>(object);
+    thisObject->window()->methodTable()->defineSetter(thisObject->window(), exec, propertyName, setterFunction, attributes);
 }
 
 JSValue JSDOMWindowShell::lookupGetter(ExecState* exec, const Identifier& propertyName)

Modified: trunk/Source/WebCore/bindings/js/JSDOMWindowShell.h (99017 => 99018)


--- trunk/Source/WebCore/bindings/js/JSDOMWindowShell.h	2011-11-02 00:34:14 UTC (rev 99017)
+++ trunk/Source/WebCore/bindings/js/JSDOMWindowShell.h	2011-11-02 00:36:20 UTC (rev 99018)
@@ -87,7 +87,7 @@
         virtual void getPropertyNames(JSC::ExecState*, JSC::PropertyNameArray&, JSC::EnumerationMode mode = JSC::ExcludeDontEnumProperties);
         virtual void getOwnPropertyNames(JSC::ExecState*, JSC::PropertyNameArray&, JSC::EnumerationMode mode = JSC::ExcludeDontEnumProperties);
         static void defineGetter(JSC::JSObject*, JSC::ExecState*, const JSC::Identifier& propertyName, JSC::JSObject* getterFunction, unsigned attributes);
-        virtual void defineSetter(JSC::ExecState*, const JSC::Identifier& propertyName, JSC::JSObject* setterFunction, 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);

Modified: trunk/Source/WebCore/bindings/scripts/CodeGeneratorJS.pm (99017 => 99018)


--- trunk/Source/WebCore/bindings/scripts/CodeGeneratorJS.pm	2011-11-02 00:34:14 UTC (rev 99017)
+++ trunk/Source/WebCore/bindings/scripts/CodeGeneratorJS.pm	2011-11-02 00:36:20 UTC (rev 99018)
@@ -845,7 +845,7 @@
     push(@headerContent, "    static void defineGetter(JSC::JSObject*, JSC::ExecState*, const JSC::Identifier& propertyName, JSC::JSObject* getterFunction, unsigned attributes);\n") if $dataNode->extendedAttributes->{"CustomDefineGetter"};
 
     # Custom defineSetter function
-    push(@headerContent, "    virtual void defineSetter(JSC::ExecState*, const JSC::Identifier& propertyName, JSC::JSObject* setterFunction, unsigned attributes);\n") if $dataNode->extendedAttributes->{"CustomDefineSetter"};
+    push(@headerContent, "    static void defineSetter(JSC::JSObject*, JSC::ExecState*, const JSC::Identifier& propertyName, JSC::JSObject* setterFunction, unsigned attributes);\n") if $dataNode->extendedAttributes->{"CustomDefineSetter"};
 
     # Custom lookupGetter function
     push(@headerContent, "    virtual JSC::JSValue lookupGetter(JSC::ExecState*, const JSC::Identifier& propertyName);\n") if $dataNode->extendedAttributes->{"CustomLookupGetter"};
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to