Skip to content
  • barraclough@apple.com's avatar
    Bug 54786 - Devirtualize JSCell::classInfo() · a5540da1
    barraclough@apple.com authored
    Reviewed by Sam Weinig.
    
    Instead of making a virtual function call, add a pointer to the ClassInfo
    onto Structure.
    
    This removes a virtual function call, and paves the way towards removing all
    the createStructure methods, and StructureFlags/AnonymousSlotCount properties
    (these should be able to move onto ClassInfo).
    
    Calls to Structure::create must now pass a pointer to the ClassInfo for the
    structure. All objects now have a ClassInfo pointer, non-object cell types
    still do not.
    
    Changes are most mechanical, involving three steps:
        * Remove virtual classInfo() methods.
        * Add &s_info parameter to calls to Structure::create.
        * Rename ClassInfo static members on classes from 'info' to 's_info',
          for consistency.
    
    Source/JavaScriptCore: 
    
    * API/JSCallbackConstructor.cpp:
    * API/JSCallbackConstructor.h:
    * API/JSCallbackFunction.cpp:
    * API/JSCallbackFunction.h:
    * API/JSCallbackObject.cpp:
    * API/JSCallbackObject.h:
    * API/JSCallbackObjectFunctions.h:
    * API/JSObjectRef.cpp:
    * API/JSValueRef.cpp:
    * API/JSWeakObjectMapRefPrivate.cpp:
    * JavaScriptCore.exp:
    * debugger/Debugger.cpp:
    * debugger/DebuggerActivation.h:
    * debugger/DebuggerCallFrame.cpp:
    * interpreter/Interpreter.cpp:
    * jit/JITCall32_64.cpp:
    * jit/JITOpcodes.cpp:
    * jit/JITStubs.cpp:
    * profiler/Profiler.cpp:
    * runtime/Arguments.cpp:
    * runtime/Arguments.h:
    * runtime/ArrayConstructor.cpp:
    * runtime/ArrayPrototype.cpp:
    * runtime/ArrayPrototype.h:
    * runtime/BooleanObject.cpp:
    * runtime/BooleanObject.h:
    * runtime/BooleanPrototype.cpp:
    * runtime/DateConstructor.cpp:
    * runtime/DateInstance.cpp:
    * runtime/DateInstance.h:
    * runtime/DatePrototype.cpp:
    * runtime/DatePrototype.h:
    * runtime/ErrorInstance.cpp:
    * runtime/ErrorInstance.h:
    * runtime/ErrorPrototype.cpp:
    * runtime/FunctionPrototype.cpp:
    * runtime/FunctionPrototype.h:
    * runtime/GetterSetter.h:
    * runtime/GlobalEvalFunction.h:
    * runtime/InternalFunction.cpp:
    * runtime/InternalFunction.h:
    * runtime/JSAPIValueWrapper.h:
    * runtime/JSActivation.cpp:
    * runtime/JSActivation.h:
    * runtime/JSArray.cpp:
    * runtime/JSArray.h:
    * runtime/JSByteArray.cpp:
    * runtime/JSByteArray.h:
    * runtime/JSCell.cpp:
    * runtime/JSCell.h:
    * runtime/JSFunction.cpp:
    * runtime/JSFunction.h:
    * runtime/JSGlobalData.cpp:
    * runtime/JSGlobalObject.cpp:
    * runtime/JSGlobalObject.h:
    * runtime/JSNotAnObject.h:
    * runtime/JSONObject.cpp:
    * runtime/JSONObject.h:
    * runtime/JSObject.cpp:
    * runtime/JSObject.h:
    * runtime/JSObjectWithGlobalObject.h:
    * runtime/JSPropertyNameIterator.h:
    * runtime/JSStaticScopeObject.h:
    * runtime/JSString.h:
    * runtime/JSVariableObject.h:
    * runtime/JSWrapperObject.h:
    * runtime/JSZombie.cpp:
    * runtime/JSZombie.h:
    * runtime/Lookup.cpp:
    * runtime/MathObject.cpp:
    * runtime/MathObject.h:
    * runtime/NativeErrorConstructor.cpp:
    * runtime/NativeErrorConstructor.h:
    * runtime/NumberConstructor.cpp:
    * runtime/NumberConstructor.h:
    * runtime/NumberObject.cpp:
    * runtime/NumberObject.h:
    * runtime/NumberPrototype.cpp:
    * runtime/ObjectConstructor.cpp:
    * runtime/ObjectPrototype.cpp:
    * runtime/RegExpConstructor.cpp:
    * runtime/RegExpConstructor.h:
    * runtime/RegExpObject.cpp:
    * runtime/RegExpObject.h:
    * runtime/RegExpPrototype.cpp:
    * runtime/ScopeChain.cpp:
    * runtime/StringConstructor.cpp:
    * runtime/StringObject.cpp:
    * runtime/StringObject.h:
    * runtime/StringObjectThatMasqueradesAsUndefined.h:
    * runtime/StringPrototype.cpp:
    * runtime/StringPrototype.h:
    * runtime/Structure.cpp:
    * runtime/Structure.h:
    
    Source/JavaScriptGlue: 
    
    * JSUtils.cpp:
    (KJSValueToJSObject):
    (KJSValueToCFTypeInternal):
    * UserObjectImp.cpp:
    * UserObjectImp.h:
    (UserObjectImp::createStructure):
    
    Source/WebCore: 
    
    * WebCore.exp.in:
    * bindings/js/JSAudioConstructor.cpp:
    * bindings/js/JSAudioConstructor.h:
    * bindings/js/JSDOMBinding.cpp:
    * bindings/js/JSDOMBinding.h:
    * bindings/js/JSDOMGlobalObject.cpp:
    * bindings/js/JSDOMGlobalObject.h:
    * bindings/js/JSDOMWindowBase.cpp:
    * bindings/js/JSDOMWindowBase.h:
    * bindings/js/JSDOMWindowShell.cpp:
    * bindings/js/JSDOMWindowShell.h:
    * bindings/js/JSGeolocationCustom.cpp:
    * bindings/js/JSImageConstructor.cpp:
    * bindings/js/JSImageConstructor.h:
    * bindings/js/JSImageDataCustom.cpp:
    * bindings/js/JSOptionConstructor.cpp:
    * bindings/js/JSOptionConstructor.h:
    * bindings/js/JSWorkerContextBase.cpp:
    * bindings/js/JSWorkerContextBase.h:
    * bindings/js/SerializedScriptValue.cpp:
    * bindings/scripts/CodeGeneratorJS.pm:
    * bridge/c/CRuntimeObject.cpp:
    * bridge/c/CRuntimeObject.h:
    * bridge/c/c_instance.cpp:
    * bridge/jni/jsc/JNIUtilityPrivate.cpp:
    * bridge/jni/jsc/JavaInstanceJSC.cpp:
    * bridge/jni/jsc/JavaRuntimeObject.cpp:
    * bridge/jni/jsc/JavaRuntimeObject.h:
    * bridge/jsc/BridgeJSC.cpp:
    * bridge/objc/ObjCRuntimeObject.h:
    * bridge/objc/ObjCRuntimeObject.mm:
    * bridge/objc/objc_instance.mm:
    * bridge/objc/objc_runtime.h:
    * bridge/objc/objc_runtime.mm:
    * bridge/runtime_array.cpp:
    * bridge/runtime_array.h:
    * bridge/runtime_method.cpp:
    * bridge/runtime_method.h:
    * bridge/runtime_object.cpp:
    * bridge/runtime_object.h:
    
    Source/WebKit/mac: 
    
    * Plugins/Hosted/ProxyInstance.mm:
    (WebKit::ProxyRuntimeMethod::ProxyRuntimeMethod):
    (WebKit::ProxyRuntimeMethod::createStructure):
    * Plugins/Hosted/ProxyRuntimeObject.h:
    (WebKit::ProxyRuntimeObject::createStructure):
    * Plugins/Hosted/ProxyRuntimeObject.mm:
    (WebKit::ProxyRuntimeObject::ProxyRuntimeObject):
    * WebView/WebView.mm:
    (aeDescFromJSValue):
    
    Source/WebKit2: 
    
    * WebProcess/Plugins/Netscape/JSNPMethod.cpp:
    (WebKit::JSNPMethod::JSNPMethod):
    * WebProcess/Plugins/Netscape/JSNPMethod.h:
    (WebKit::JSNPMethod::createStructure):
    * WebProcess/Plugins/Netscape/JSNPObject.cpp:
    (WebKit::JSNPObject::JSNPObject):
    * WebProcess/Plugins/Netscape/JSNPObject.h:
    (WebKit::JSNPObject::createStructure):
    
    
    
    git-svn-id: http://svn.webkit.org/repository/webkit/trunk@79132 268f45cc-cd09-0410-ab3c-d52691b4dbfc
    a5540da1