Title: [96674] trunk/Source
Revision
96674
Author
[email protected]
Date
2011-10-04 19:47:42 -0700 (Tue, 04 Oct 2011)

Log Message

Add static ClassInfo structs to classes that override JSCell::getCallData
https://bugs.webkit.org/show_bug.cgi?id=69311

Reviewed by Darin Adler.

Source/_javascript_Core: 

Added ClassInfo structs to each class that defined its own getCallData 
function but did not already have its own ClassInfo struct.  This is a 
necessary addition for when we switch over to looking up getCallData from 
the MethodTable in ClassInfo rather than doing the virtual call (which we 
are removing).  These new ClassInfo structs are public because we often 
use these structs in other areas of the code to uniquely identify JSC classes and 
to enforce runtime invariants based on those class identities using ASSERTs.
Also added new createStructure methods to those classes that didn't have 
them so that the new ClassInfo structs would be used when creating the Structures 
in these classes.

* runtime/BooleanConstructor.cpp:
* runtime/BooleanConstructor.h:
(JSC::BooleanConstructor::createStructure):

getCallData was not marked as static in StrictModeTypeErrorFunction.  
* runtime/Error.cpp:
(JSC::StrictModeTypeErrorFunction::getCallDataVirtual):
(JSC::StrictModeTypeErrorFunction::getCallData):
(JSC::StrictModeTypeErrorFunction::createStructure):
* runtime/ErrorConstructor.cpp:
* runtime/ErrorConstructor.h:
(JSC::ErrorConstructor::createStructure):
* runtime/FunctionConstructor.cpp:
* runtime/FunctionConstructor.h:
(JSC::FunctionConstructor::createStructure):
* runtime/FunctionPrototype.cpp:
* runtime/FunctionPrototype.h:

Source/WebCore: 

No new tests.

Added ClassInfo structs to each class that defined its own getCallData 
function but did not already have its own ClassInfo struct.  This is a 
necessary addition for when we switch over to looking up getCallData from 
the MethodTable in ClassInfo rather than doing the virtual call (which we 
are removing).  These new ClassInfo structs are public because we often 
use these structs in other areas of the code to uniquely identify JSC classes and 
to enforce runtime invariants based on those class identities using ASSERTs.
Also added new createStructure methods to those classes that didn't have 
them so that the new ClassInfo structs would be used when creating the Structures 
in these classes.

* bridge/qt/qt_runtime.cpp:
* bridge/qt/qt_runtime.h:

Modified Paths

Diff

Modified: trunk/Source/_javascript_Core/ChangeLog (96673 => 96674)


--- trunk/Source/_javascript_Core/ChangeLog	2011-10-05 02:38:49 UTC (rev 96673)
+++ trunk/Source/_javascript_Core/ChangeLog	2011-10-05 02:47:42 UTC (rev 96674)
@@ -1,3 +1,39 @@
+2011-10-04  Mark Hahnenberg  <[email protected]>
+
+        Add static ClassInfo structs to classes that override JSCell::getCallData
+        https://bugs.webkit.org/show_bug.cgi?id=69311
+
+        Reviewed by Darin Adler.
+
+        Added ClassInfo structs to each class that defined its own getCallData 
+        function but did not already have its own ClassInfo struct.  This is a 
+        necessary addition for when we switch over to looking up getCallData from 
+        the MethodTable in ClassInfo rather than doing the virtual call (which we 
+        are removing).  These new ClassInfo structs are public because we often 
+        use these structs in other areas of the code to uniquely identify JSC classes and 
+        to enforce runtime invariants based on those class identities using ASSERTs.
+        Also added new createStructure methods to those classes that didn't have 
+        them so that the new ClassInfo structs would be used when creating the Structures 
+        in these classes.
+
+        * runtime/BooleanConstructor.cpp:
+        * runtime/BooleanConstructor.h:
+        (JSC::BooleanConstructor::createStructure):
+
+        getCallData was not marked as static in StrictModeTypeErrorFunction.  
+        * runtime/Error.cpp:
+        (JSC::StrictModeTypeErrorFunction::getCallDataVirtual):
+        (JSC::StrictModeTypeErrorFunction::getCallData):
+        (JSC::StrictModeTypeErrorFunction::createStructure):
+        * runtime/ErrorConstructor.cpp:
+        * runtime/ErrorConstructor.h:
+        (JSC::ErrorConstructor::createStructure):
+        * runtime/FunctionConstructor.cpp:
+        * runtime/FunctionConstructor.h:
+        (JSC::FunctionConstructor::createStructure):
+        * runtime/FunctionPrototype.cpp:
+        * runtime/FunctionPrototype.h:
+
 2011-10-03  Geoffrey Garen  <[email protected]>
 
         Some JSValue cleanup

Modified: trunk/Source/_javascript_Core/runtime/BooleanConstructor.cpp (96673 => 96674)


--- trunk/Source/_javascript_Core/runtime/BooleanConstructor.cpp	2011-10-05 02:38:49 UTC (rev 96673)
+++ trunk/Source/_javascript_Core/runtime/BooleanConstructor.cpp	2011-10-05 02:47:42 UTC (rev 96674)
@@ -28,6 +28,8 @@
 
 ASSERT_CLASS_FITS_IN_CELL(BooleanConstructor);
 
+const ClassInfo BooleanConstructor::s_info = { "Function", &Base::s_info, 0, 0, CREATE_METHOD_TABLE(BooleanConstructor) };
+
 BooleanConstructor::BooleanConstructor(JSGlobalObject* globalObject, Structure* structure)
     : InternalFunction(globalObject, structure)
 {

Modified: trunk/Source/_javascript_Core/runtime/BooleanConstructor.h (96673 => 96674)


--- trunk/Source/_javascript_Core/runtime/BooleanConstructor.h	2011-10-05 02:38:49 UTC (rev 96673)
+++ trunk/Source/_javascript_Core/runtime/BooleanConstructor.h	2011-10-05 02:47:42 UTC (rev 96674)
@@ -38,6 +38,13 @@
             return constructor;
         }
 
+        static const ClassInfo s_info;
+
+        static Structure* createStructure(JSGlobalData& globalData, JSGlobalObject* globalObject, JSValue prototype) 
+        { 
+            return Structure::create(globalData, globalObject, prototype, TypeInfo(ObjectType, StructureFlags), &s_info); 
+        }
+
     protected:
         void finishCreation(ExecState*, BooleanPrototype*);
 

Modified: trunk/Source/_javascript_Core/runtime/Error.cpp (96673 => 96674)


--- trunk/Source/_javascript_Core/runtime/Error.cpp	2011-10-05 02:38:49 UTC (rev 96673)
+++ trunk/Source/_javascript_Core/runtime/Error.cpp	2011-10-05 02:47:42 UTC (rev 96674)
@@ -201,23 +201,32 @@
         return JSValue::encode(jsNull());
     }
 
-    CallType getCallDataVirtual(CallData& callData)
+    virtual CallType getCallDataVirtual(CallData& callData)
     {
         return getCallData(this, callData);
     }
 
-    CallType getCallData(JSCell*, CallData& callData)
+    static CallType getCallData(JSCell*, CallData& callData)
     {
         callData.native.function = callThrowTypeError;
         return CallTypeHost;
     }
 
+    static const ClassInfo s_info;
+
+    static Structure* createStructure(JSGlobalData& globalData, JSGlobalObject* globalObject, JSValue prototype) 
+    { 
+        return Structure::create(globalData, globalObject, prototype, TypeInfo(ObjectType, StructureFlags), &s_info); 
+    }
+
 private:
     UString m_message;
 };
 
 ASSERT_CLASS_FITS_IN_CELL(StrictModeTypeErrorFunction);
 
+const ClassInfo StrictModeTypeErrorFunction::s_info = { "Function", &Base::s_info, 0, 0, CREATE_METHOD_TABLE(StrictModeTypeErrorFunction) };
+
 JSValue createTypeErrorFunction(ExecState* exec, const UString& message)
 {
     return StrictModeTypeErrorFunction::create(exec, exec->lexicalGlobalObject(), exec->lexicalGlobalObject()->internalFunctionStructure(), message);

Modified: trunk/Source/_javascript_Core/runtime/ErrorConstructor.cpp (96673 => 96674)


--- trunk/Source/_javascript_Core/runtime/ErrorConstructor.cpp	2011-10-05 02:38:49 UTC (rev 96673)
+++ trunk/Source/_javascript_Core/runtime/ErrorConstructor.cpp	2011-10-05 02:47:42 UTC (rev 96674)
@@ -29,6 +29,8 @@
 
 ASSERT_CLASS_FITS_IN_CELL(ErrorConstructor);
 
+const ClassInfo ErrorConstructor::s_info = { "Function", &Base::s_info, 0, 0, CREATE_METHOD_TABLE(ErrorConstructor) };
+
 ErrorConstructor::ErrorConstructor(JSGlobalObject* globalObject, Structure* structure)
     : InternalFunction(globalObject, structure)
 {

Modified: trunk/Source/_javascript_Core/runtime/ErrorConstructor.h (96673 => 96674)


--- trunk/Source/_javascript_Core/runtime/ErrorConstructor.h	2011-10-05 02:38:49 UTC (rev 96673)
+++ trunk/Source/_javascript_Core/runtime/ErrorConstructor.h	2011-10-05 02:47:42 UTC (rev 96674)
@@ -39,6 +39,13 @@
             return constructor;
         }
 
+        static const ClassInfo s_info;
+
+        static Structure* createStructure(JSGlobalData& globalData, JSGlobalObject* globalObject, JSValue prototype) 
+        { 
+            return Structure::create(globalData, globalObject, prototype, TypeInfo(ObjectType, StructureFlags), &s_info); 
+        }
+
     protected:
         void finishCreation(ExecState*, ErrorPrototype*);
         

Modified: trunk/Source/_javascript_Core/runtime/FunctionConstructor.cpp (96673 => 96674)


--- trunk/Source/_javascript_Core/runtime/FunctionConstructor.cpp	2011-10-05 02:38:49 UTC (rev 96673)
+++ trunk/Source/_javascript_Core/runtime/FunctionConstructor.cpp	2011-10-05 02:47:42 UTC (rev 96674)
@@ -37,6 +37,8 @@
 
 ASSERT_CLASS_FITS_IN_CELL(FunctionConstructor);
 
+const ClassInfo FunctionConstructor::s_info = { "Function", &Base::s_info, 0, 0, CREATE_METHOD_TABLE(FunctionConstructor) };
+
 FunctionConstructor::FunctionConstructor(JSGlobalObject* globalObject, Structure* structure)
     : InternalFunction(globalObject, structure)
 {

Modified: trunk/Source/_javascript_Core/runtime/FunctionConstructor.h (96673 => 96674)


--- trunk/Source/_javascript_Core/runtime/FunctionConstructor.h	2011-10-05 02:38:49 UTC (rev 96673)
+++ trunk/Source/_javascript_Core/runtime/FunctionConstructor.h	2011-10-05 02:47:42 UTC (rev 96674)
@@ -38,6 +38,13 @@
             return constructor;
         }
 
+        static const ClassInfo s_info;
+
+        static Structure* createStructure(JSGlobalData& globalData, JSGlobalObject* globalObject, JSValue prototype) 
+        { 
+            return Structure::create(globalData, globalObject, prototype, TypeInfo(ObjectType, StructureFlags), &s_info); 
+        }
+
     private:
         FunctionConstructor(JSGlobalObject*, Structure*);
         void finishCreation(ExecState*, FunctionPrototype*);

Modified: trunk/Source/_javascript_Core/runtime/FunctionPrototype.cpp (96673 => 96674)


--- trunk/Source/_javascript_Core/runtime/FunctionPrototype.cpp	2011-10-05 02:38:49 UTC (rev 96673)
+++ trunk/Source/_javascript_Core/runtime/FunctionPrototype.cpp	2011-10-05 02:47:42 UTC (rev 96674)
@@ -39,6 +39,8 @@
 static EncodedJSValue JSC_HOST_CALL functionProtoFuncCall(ExecState*);
 static EncodedJSValue JSC_HOST_CALL functionProtoFuncBind(ExecState*);
 
+const ClassInfo FunctionPrototype::s_info = { "Function", &Base::s_info, 0, 0, CREATE_METHOD_TABLE(FunctionPrototype) };
+
 FunctionPrototype::FunctionPrototype(JSGlobalObject* globalObject, Structure* structure)
     : InternalFunction(globalObject, structure)
 {

Modified: trunk/Source/_javascript_Core/runtime/FunctionPrototype.h (96673 => 96674)


--- trunk/Source/_javascript_Core/runtime/FunctionPrototype.h	2011-10-05 02:38:49 UTC (rev 96673)
+++ trunk/Source/_javascript_Core/runtime/FunctionPrototype.h	2011-10-05 02:47:42 UTC (rev 96674)
@@ -43,6 +43,8 @@
             return Structure::create(globalData, globalObject, proto, TypeInfo(ObjectType, StructureFlags), &s_info);
         }
 
+        static const ClassInfo s_info;
+
     protected:
         void finishCreation(ExecState*, const Identifier& name);
 

Modified: trunk/Source/WebCore/ChangeLog (96673 => 96674)


--- trunk/Source/WebCore/ChangeLog	2011-10-05 02:38:49 UTC (rev 96673)
+++ trunk/Source/WebCore/ChangeLog	2011-10-05 02:47:42 UTC (rev 96674)
@@ -1,3 +1,26 @@
+2011-10-04  Mark Hahnenberg  <[email protected]>
+
+        Add static ClassInfo structs to classes that override JSCell::getCallData
+        https://bugs.webkit.org/show_bug.cgi?id=69311
+
+        Reviewed by Darin Adler.
+
+        No new tests.
+
+        Added ClassInfo structs to each class that defined its own getCallData 
+        function but did not already have its own ClassInfo struct.  This is a 
+        necessary addition for when we switch over to looking up getCallData from 
+        the MethodTable in ClassInfo rather than doing the virtual call (which we 
+        are removing).  These new ClassInfo structs are public because we often 
+        use these structs in other areas of the code to uniquely identify JSC classes and 
+        to enforce runtime invariants based on those class identities using ASSERTs.
+        Also added new createStructure methods to those classes that didn't have 
+        them so that the new ClassInfo structs would be used when creating the Structures 
+        in these classes.
+
+        * bridge/qt/qt_runtime.cpp:
+        * bridge/qt/qt_runtime.h:
+
 2011-10-03  Geoffrey Garen  <[email protected]>
 
         Some JSValue cleanup

Modified: trunk/Source/WebCore/bridge/qt/qt_runtime.cpp (96673 => 96674)


--- trunk/Source/WebCore/bridge/qt/qt_runtime.cpp	2011-10-05 02:38:49 UTC (rev 96673)
+++ trunk/Source/WebCore/bridge/qt/qt_runtime.cpp	2011-10-05 02:47:42 UTC (rev 96674)
@@ -1425,6 +1425,8 @@
     return index;
 }
 
+const ClassInfo QtRuntimeMetaMethod::s_info = { "QtRuntimeMethod", &Base::s_info, 0, 0, CREATE_METHOD_TABLE(QtRuntimeMetaMethod) };
+
 QtRuntimeMetaMethod::QtRuntimeMetaMethod(ExecState* exec, Structure* structure, const Identifier& identifier)
     : QtRuntimeMethod (new QtRuntimeMetaMethodData(), exec, structure, identifier)
 {
@@ -1580,6 +1582,8 @@
 
 QMultiMap<QObject*, QtConnectionObject*> QtRuntimeConnectionMethod::connections;
 
+const ClassInfo QtRuntimeConnectionMethod::s_info = { "QtRuntimeMethod", &Base::s_info, 0, 0, CREATE_METHOD_TABLE(QtRuntimeConnectionMethod) };
+
 QtRuntimeConnectionMethod::QtRuntimeConnectionMethod(ExecState* exec, Structure* structure, const Identifier& identifier)
     : QtRuntimeMethod (new QtRuntimeConnectionMethodData(), exec, structure, identifier)
 {

Modified: trunk/Source/WebCore/bridge/qt/qt_runtime.h (96673 => 96674)


--- trunk/Source/WebCore/bridge/qt/qt_runtime.h	2011-10-05 02:38:49 UTC (rev 96673)
+++ trunk/Source/WebCore/bridge/qt/qt_runtime.h	2011-10-05 02:47:42 UTC (rev 96674)
@@ -170,6 +170,8 @@
 
     static void visitChildren(JSCell*, SlotVisitor&);
 
+    static const ClassInfo s_info;
+
 protected:
     QtRuntimeMetaMethodData* d_func() const {return reinterpret_cast<QtRuntimeMetaMethodData*>(d_ptr);}
 
@@ -201,6 +203,8 @@
     virtual bool getOwnPropertySlot(ExecState *, const Identifier&, PropertySlot&);
     virtual bool getOwnPropertyDescriptor(ExecState*, const Identifier&, PropertyDescriptor&);
     virtual void getOwnPropertyNames(ExecState*, PropertyNameArray&, EnumerationMode mode = ExcludeDontEnumProperties);
+ 
+    static const ClassInfo s_info;
 
 protected:
     QtRuntimeConnectionMethodData* d_func() const {return reinterpret_cast<QtRuntimeConnectionMethodData*>(d_ptr);}
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to