JavaScriptCore:
authordarin@apple.com <darin@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 23 Oct 2008 00:11:11 +0000 (00:11 +0000)
committerdarin@apple.com <darin@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 23 Oct 2008 00:11:11 +0000 (00:11 +0000)
commit313ad51bdf4de0af616f045f739672b69493bd66
tree622e99bf4e7f217860e510282c7a852eece163a4
parent63c50910aafd3a405e2dfb5846cd75efa026baae
JavaScriptCore:

2008-10-22  Darin Adler  <darin@apple.com>

        Reviewed by Sam Weinig.

        - fix https://bugs.webkit.org/show_bug.cgi?id=21294
          Bug 21294: Devirtualize getOwnPropertySlot()

        A bit over 3% faster on V8 tests.

        * JavascriptCore.exp: Export leak-related functions..

        * API/JSCallbackConstructor.h:
        (JSC::JSCallbackConstructor::createStructureID): Set HasStandardGetOwnPropertySlot
        since this class doesn't override getPropertySlot.
        * API/JSCallbackFunction.h:
        (JSC::JSCallbackFunction::createStructureID): Ditto.

        * VM/ExceptionHelpers.cpp:
        (JSC::InterruptedExecutionError::InterruptedExecutionError): Use a structure
        that's created just for this class instead of trying to share a single "null
        prototype" structure.

        * VM/Machine.cpp:
        (JSC::Machine::cti_op_create_arguments_no_params): Rename
        Arguments::ArgumentsNoParameters to Arguments::NoParameters.

        * kjs/Arguments.h: Rename the enum from Arguments::ArgumentsParameters to
        Arguments::NoParametersType and the value from Arguments::ArgumentsNoParameters
        to Arguments::NoParameters.
        (JSC::Arguments::createStructureID): Added. Returns a structure without
        HasStandardGetOwnPropertySlot since this class overrides getOwnPropertySlot.
        (JSC::Arguments::Arguments): Added an assertion that there are no parameters.

        * kjs/DatePrototype.h:
        (JSC::DatePrototype::createStructureID): Added. Returns a structure without
        HasStandardGetOwnPropertySlot since this class overrides getOwnPropertySlot.

        * kjs/FunctionPrototype.h:
        (JSC::FunctionPrototype::createStructureID): Set HasStandardGetOwnPropertySlot
        since this class doesn't override getPropertySlot.
        * kjs/InternalFunction.h:
        (JSC::InternalFunction::createStructureID): Ditto.

        * kjs/JSArray.h:
        (JSC::JSArray::createStructureID): Added. Returns a structure without
        HasStandardGetOwnPropertySlot since this class overrides getOwnPropertySlot.

        * kjs/JSCell.h: Added declaration of fastGetOwnPropertySlot; a non-virtual
        version that uses the structure bit to decide whether to call the virtual
        version.

        * kjs/JSFunction.h:
        (JSC::JSFunction::createStructureID): Added. Returns a structure without
        HasStandardGetOwnPropertySlot since this class overrides getOwnPropertySlot.

        * kjs/JSGlobalData.cpp:
        (JSC::JSGlobalData::JSGlobalData): Initialize new structures; removed
        nullProtoStructureID.
        * kjs/JSGlobalData.h: Added new structures. Removed nullProtoStructureID.

        * kjs/JSGlobalObject.h:
        (JSC::JSGlobalObject::createStructureID): Added. Returns a structure without
        HasStandardGetOwnPropertySlot since this class overrides getOwnPropertySlot.

        * kjs/JSNotAnObject.h:
        (JSC::JSNotAnObjectErrorStub::JSNotAnObjectErrorStub): Use a structure
        that's created just for this class instead of trying to share a single "null
        prototype" structure.
        (JSC::JSNotAnObjectErrorStub::isNotAnObjectErrorStub): Marked this function
        virtual for clarity and made it private since no one should call it if they
        already have a pointer to this specific type.
        (JSC::JSNotAnObject::JSNotAnObject): Use a structure that's created just
        for this class instead of trying to share a single "null prototype" structure.
        (JSC::JSNotAnObject::createStructureID): Added. Returns a structure without
        HasStandardGetOwnPropertySlot since this class overrides getOwnPropertySlot.

        * kjs/JSObject.h:
        (JSC::JSObject::createStructureID): Added HasStandardGetOwnPropertySlot.
        (JSC::JSObject::inlineGetOwnPropertySlot): Added. Used so we can share code
        between getOwnPropertySlot and fastGetOwnPropertySlot.
        (JSC::JSObject::getOwnPropertySlot): Moved so that functions are above the
        functions that call them. Moved the guts of this function into
        inlineGetOwnPropertySlot.
        (JSC::JSCell::fastGetOwnPropertySlot): Added. Checks the
        HasStandardGetOwnPropertySlot bit and if it's set, calls
        inlineGetOwnPropertySlot, otherwise calls getOwnPropertySlot.
        (JSC::JSObject::getPropertySlot): Changed to call fastGetOwnPropertySlot.
        (JSC::JSValue::get): Changed to call fastGetOwnPropertySlot.

        * kjs/JSWrapperObject.h: Made constructor protected to emphasize that
        this class is only a base class and never instantiated.

        * kjs/MathObject.h:
        (JSC::MathObject::createStructureID): Added. Returns a structure without
        HasStandardGetOwnPropertySlot since this class overrides getOwnPropertySlot.
        * kjs/NumberConstructor.h:
        (JSC::NumberConstructor::createStructureID): Ditto.
        * kjs/RegExpConstructor.h:
        (JSC::RegExpConstructor::createStructureID): Ditto.
        * kjs/RegExpObject.h:
        (JSC::RegExpObject::createStructureID): Ditto.
        * kjs/StringObject.h:
        (JSC::StringObject::createStructureID): Ditto.

        * kjs/TypeInfo.h: Added HasStandardGetOwnPropertySlot flag and
        hasStandardGetOwnPropertySlot accessor function.

JavaScriptGlue:

2008-10-22  Darin Adler  <darin@apple.com>

        Reviewed by Sam Weinig.

        - fix https://bugs.webkit.org/show_bug.cgi?id=21294
          Bug 21294: Devirtualize getOwnPropertySlot()

        * JSRun.cpp:
        (JSGlueGlobalObject::JSGlueGlobalObject): Moved constructor here.
        Set up flags in its new location in global object data, and set up
        a structure for UserObjectImp too.
        (JSRun::JSRun): Added code to give the JSGlueGlobalObject its own unique
        structure, rather than using the default one from JSGlobalObject.

        * JSRun.h: Made JSGlueGlobalObject take a structure ID. Also moved
        the data into a separate data object. And added userObjectStructure,
        a Structure to be used by UserObjectImp.

        * JSUtils.cpp: Removed unused sharedGlobalData global.
        (JSObjectKJSValue): Pass Structure in when creating UserObjectImp.
        (unprotectGlobalObject): Use JSGlueGLobalObject type specifically.
        (initializeGlobalObjectKey): Removed code to set up unused sharedGlobalData.
        (getThreadGlobalObject): Added. Shared by JSObjectKJSValue and
        getThreadGlobalExecState. Also now passes in a structure ID when creating
        the global object.
        (getThreadGlobalExecState): Changed to call getThreadGlobalObject.

        * UserObjectImp.cpp:
        (UserObjectImp::UserObjectImp): Changed to take a structure.
        * UserObjectImp.h:
        (UserObjectImp::createStructureID): Added. Returns a structure without
        HasStandardGetOwnPropertySlot since this class overrides getOwnPropertySlot.

WebCore:

2008-10-22  Darin Adler  <darin@apple.com>

        Reviewed by Sam Weinig.

        - fix https://bugs.webkit.org/show_bug.cgi?id=21294
          Bug 21294: Devirtualize getOwnPropertySlot()

        * bindings/js/JSDOMWindowShell.h:
        (WebCore::JSDOMWindowShell::createStructureID): Added. Returns a structure without
        HasStandardGetOwnPropertySlot since this class overrides getOwnPropertySlot.

        * bindings/js/JSInspectorCallbackWrapper.cpp:
        (WebCore::JSInspectorCallbackWrapper::wrap): Change to use a unique structure
        for this class rather than sharing nullProtoStructureID, which no longer exists.

        * bindings/js/JSNamedNodesCollection.h:
        (WebCore::JSNamedNodesCollection::createStructureID): Added. Returns a structure without
        HasStandardGetOwnPropertySlot since this class overrides getOwnPropertySlot.
        * bindings/js/JSRGBColor.h:
        (WebCore::JSRGBColor::createStructureID): Ditto.

        * bindings/scripts/CodeGeneratorJS.pm: Added createStructureID functions for the wrappers,
        constructors, and prototypes in any case where they override getOwnPropertySlot, without
        HasStandardGetOwnPropertySlot.

        * bridge/objc/objc_runtime.h:
        (JSC::Bindings::ObjcFallbackObjectImp::createStructureID): Added. Returns a structure
        without HasStandardGetOwnPropertySlot since this class overrides getOwnPropertySlot.
        * bridge/qt/qt_runtime.h:
        (JSC::Bindings::QtRuntimeMethod::createStructureID): Ditto.
        * bridge/runtime_array.h:
        (JSC::RuntimeArray::createStructureID): Ditto.
        * bridge/runtime_method.h:
        (JSC::RuntimeMethod::createStructureID): Ditto.
        * bridge/runtime_object.h:
        (JSC::RuntimeObjectImp::createStructureID): Ditto.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@37799 268f45cc-cd09-0410-ab3c-d52691b4dbfc
42 files changed:
JavaScriptCore/API/JSCallbackConstructor.h
JavaScriptCore/API/JSCallbackFunction.h
JavaScriptCore/ChangeLog
JavaScriptCore/JavaScriptCore.exp
JavaScriptCore/VM/ExceptionHelpers.cpp
JavaScriptCore/VM/Machine.cpp
JavaScriptCore/kjs/Arguments.h
JavaScriptCore/kjs/DatePrototype.h
JavaScriptCore/kjs/FunctionPrototype.h
JavaScriptCore/kjs/InternalFunction.h
JavaScriptCore/kjs/JSArray.h
JavaScriptCore/kjs/JSCell.h
JavaScriptCore/kjs/JSFunction.h
JavaScriptCore/kjs/JSGlobalData.cpp
JavaScriptCore/kjs/JSGlobalData.h
JavaScriptCore/kjs/JSGlobalObject.h
JavaScriptCore/kjs/JSNotAnObject.h
JavaScriptCore/kjs/JSObject.h
JavaScriptCore/kjs/JSWrapperObject.h
JavaScriptCore/kjs/MathObject.h
JavaScriptCore/kjs/NumberConstructor.h
JavaScriptCore/kjs/RegExpConstructor.h
JavaScriptCore/kjs/RegExpObject.h
JavaScriptCore/kjs/StringObject.h
JavaScriptCore/kjs/TypeInfo.h
JavaScriptGlue/ChangeLog
JavaScriptGlue/JSRun.cpp
JavaScriptGlue/JSRun.h
JavaScriptGlue/JSUtils.cpp
JavaScriptGlue/UserObjectImp.cpp
JavaScriptGlue/UserObjectImp.h
WebCore/ChangeLog
WebCore/bindings/js/JSDOMWindowShell.h
WebCore/bindings/js/JSInspectorCallbackWrapper.cpp
WebCore/bindings/js/JSNamedNodesCollection.h
WebCore/bindings/js/JSRGBColor.h
WebCore/bindings/scripts/CodeGeneratorJS.pm
WebCore/bridge/objc/objc_runtime.h
WebCore/bridge/qt/qt_runtime.h
WebCore/bridge/runtime_array.h
WebCore/bridge/runtime_method.h
WebCore/bridge/runtime_object.h