JavaScriptCore:

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

        Reviewed by Geoff Garen.

        - next step of https://bugs.webkit.org/show_bug.cgi?id=21295
          Turn ExecState into a call frame pointer.

        Remove m_globalObject and m_globalData from ExecState.

        SunSpider says this is a wash (slightly faster but not statistically
        significant); which is good enough since it's a preparation step and
        not supposed to be a spedup.

        * API/JSCallbackFunction.cpp:
        (JSC::JSCallbackFunction::JSCallbackFunction):
        * kjs/ArrayConstructor.cpp:
        (JSC::ArrayConstructor::ArrayConstructor):
        * kjs/BooleanConstructor.cpp:
        (JSC::BooleanConstructor::BooleanConstructor):
        * kjs/DateConstructor.cpp:
        (JSC::DateConstructor::DateConstructor):
        * kjs/ErrorConstructor.cpp:
        (JSC::ErrorConstructor::ErrorConstructor):
        * kjs/FunctionPrototype.cpp:
        (JSC::FunctionPrototype::FunctionPrototype):
        * kjs/JSFunction.cpp:
        (JSC::JSFunction::JSFunction):
        * kjs/NativeErrorConstructor.cpp:
        (JSC::NativeErrorConstructor::NativeErrorConstructor):
        * kjs/NumberConstructor.cpp:
        (JSC::NumberConstructor::NumberConstructor):
        * kjs/ObjectConstructor.cpp:
        (JSC::ObjectConstructor::ObjectConstructor):
        * kjs/PrototypeFunction.cpp:
        (JSC::PrototypeFunction::PrototypeFunction):
        * kjs/RegExpConstructor.cpp:
        (JSC::RegExpConstructor::RegExpConstructor):
        * kjs/StringConstructor.cpp:
        (JSC::StringConstructor::StringConstructor):
        Pass JSGlobalData* instead of ExecState* to the InternalFunction
        constructor.

        * API/OpaqueJSString.cpp: Added now-needed include.

        * JavaScriptCore.exp: Updated.

        * VM/CTI.cpp:
        (JSC::CTI::emitSlowScriptCheck): Changed to use ARGS_globalData
        instead of ARGS_exec.

        * VM/CTI.h: Added a new argument to the CTI, the global data pointer.
        While it's possible to get to the global data pointer using the
        ExecState pointer, it's slow enough that it's better to just keep
        it around in the CTI arguments.

        * VM/CodeBlock.h: Moved the CodeType enum here from ExecState.h.

        * VM/Machine.cpp:
        (JSC::Machine::execute): Pass fewer arguments when constructing
        ExecState, and pass the global data pointer when invoking CTI.
        (JSC::Machine::firstCallFrame): Added. Used to get the dynamic global
        object, which is in the scope chain of the first call frame.
        (JSC::Machine::cti_op_add): Use globalData instead of exec when
        possible, to keep fast cases fast, since it's now more expensive to
        get to it through the exec pointer.
        (JSC::Machine::cti_timeout_check): Ditto.
        (JSC::Machine::cti_op_put_by_id_second): Ditto.
        (JSC::Machine::cti_op_get_by_id_second): Ditto.
        (JSC::Machine::cti_op_mul): Ditto.
        (JSC::Machine::cti_vm_compile): Ditto.
        (JSC::Machine::cti_op_get_by_val): Ditto.
        (JSC::Machine::cti_op_sub): Ditto.
        (JSC::Machine::cti_op_put_by_val): Ditto.
        (JSC::Machine::cti_op_put_by_val_array): Ditto.
        (JSC::Machine::cti_op_negate): Ditto.
        (JSC::Machine::cti_op_div): Ditto.
        (JSC::Machine::cti_op_pre_dec): Ditto.
        (JSC::Machine::cti_op_post_inc): Ditto.
        (JSC::Machine::cti_op_lshift): Ditto.
        (JSC::Machine::cti_op_bitand): Ditto.
        (JSC::Machine::cti_op_rshift): Ditto.
        (JSC::Machine::cti_op_bitnot): Ditto.
        (JSC::Machine::cti_op_mod): Ditto.
        (JSC::Machine::cti_op_post_dec): Ditto.
        (JSC::Machine::cti_op_urshift): Ditto.
        (JSC::Machine::cti_op_bitxor): Ditto.
        (JSC::Machine::cti_op_bitor): Ditto.
        (JSC::Machine::cti_op_call_eval): Ditto.
        (JSC::Machine::cti_op_throw): Ditto.
        (JSC::Machine::cti_op_is_string): Ditto.
        (JSC::Machine::cti_op_debug): Ditto.
        (JSC::Machine::cti_vm_throw): Ditto.

        * VM/Machine.h: Added firstCallFrame.

        * kjs/DebuggerCallFrame.cpp:
        (JSC::DebuggerCallFrame::evaluate): Pass fewer arguments when
        constructing ExecState.

        * kjs/ExecState.cpp: Deleted contents. Later we'll remove the
        file altogether.

        * kjs/ExecState.h: Removed m_globalObject and m_globalData.
        Moved CodeType into another header.
        (JSC::ExecState::ExecState): Take only a single argument, a
        call frame pointer.
        (JSC::ExecState::dynamicGlobalObject): Get the object from
        the first call frame since it's no longer stored.
        (JSC::ExecState::globalData): Get the global data from the
        scope chain, since we no longer store a pointer to it here.
        (JSC::ExecState::identifierTable): Ditto.
        (JSC::ExecState::propertyNames): Ditto.
        (JSC::ExecState::emptyList): Ditto.
        (JSC::ExecState::lexer): Ditto.
        (JSC::ExecState::parser): Ditto.
        (JSC::ExecState::machine): Ditto.
        (JSC::ExecState::arrayTable): Ditto.
        (JSC::ExecState::dateTable): Ditto.
        (JSC::ExecState::mathTable): Ditto.
        (JSC::ExecState::numberTable): Ditto.
        (JSC::ExecState::regExpTable): Ditto.
        (JSC::ExecState::regExpConstructorTable): Ditto.
        (JSC::ExecState::stringTable): Ditto.
        (JSC::ExecState::heap): Ditto.

        * kjs/FunctionConstructor.cpp:
        (JSC::FunctionConstructor::FunctionConstructor): Pass
        JSGlobalData* instead of ExecState* to the InternalFunction
        constructor.
        (JSC::constructFunction): Pass the global data pointer when
        constructing a new scope chain.

        * kjs/InternalFunction.cpp:
        (JSC::InternalFunction::InternalFunction): Take a JSGlobalData*
        instead of an ExecState*. Later we can change more places to
        work this way -- it's more efficient to take the type you need
        since the caller might already have it.
        * kjs/InternalFunction.h: Ditto.

        * kjs/JSCell.h:
        (JSC::JSCell::operator new): Added an overload that takes a
        JSGlobalData* so you can construct without an ExecState*.

        * kjs/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::init): Moved creation of the global scope
        chain in here, since it now requires a pointer to the global data.
        Moved the initialization of the call frame in here since it requires
        the global scope chain node. Removed the extra argument to ExecState
        when creating the global ExecState*.
        * kjs/JSGlobalObject.h: Removed initialization of globalScopeChain
        and the call frame from the JSGlobalObjectData constructor. Added
        a thisValue argument to the init function.

        * kjs/JSNumberCell.cpp: Added versions of jsNumberCell that take
        JSGlobalData* rather than ExecState*.
        * kjs/JSNumberCell.h:
        (JSC::JSNumberCell::operator new): Added a version that takes
        JSGlobalData*.
        (JSC::JSNumberCell::JSNumberCell): Ditto.
        (JSC::jsNumber): Ditto.
        * kjs/JSString.cpp:
        (JSC::jsString): Ditto.
        (JSC::jsSubstring): Ditto.
        (JSC::jsOwnedString): Ditto.
        * kjs/JSString.h:
        (JSC::JSString::JSString): Changed to take JSGlobalData*.
        (JSC::jsEmptyString): Added a version that takes JSGlobalData*.
        (JSC::jsSingleCharacterString): Ditto.
        (JSC::jsSingleCharacterSubstring): Ditto.
        (JSC::jsNontrivialString): Ditto.
        (JSC::JSString::getIndex): Ditto.
        (JSC::jsString): Ditto.
        (JSC::jsSubstring): Ditto.
        (JSC::jsOwnedString): Ditto.

        * kjs/ScopeChain.h: Added a globalData pointer to each node.
        (JSC::ScopeChainNode::ScopeChainNode): Initialize the globalData
        pointer.
        (JSC::ScopeChainNode::push): Set the global data pointer in the
        new node.
        (JSC::ScopeChain::ScopeChain): Take a globalData argument.

        * kjs/SmallStrings.cpp:
        (JSC::SmallStrings::createEmptyString): Take JSGlobalData* instead of
        ExecState*.
        (JSC::SmallStrings::createSingleCharacterString): Ditto.
        * kjs/SmallStrings.h:
        (JSC::SmallStrings::emptyString): Ditto.
        (JSC::SmallStrings::singleCharacterString): Ditto.

WebCore:

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

        Reviewed by Geoff Garen.

        - next step of https://bugs.webkit.org/show_bug.cgi?id=21295
          Turn ExecState into a call frame pointer.

        Remove m_globalObject and m_globalData from ExecState.

        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::JSDOMWindowBase::JSDOMWindowBaseData::JSDOMWindowBaseData):
        Removed an argument now that JSGlobalObject doesn't need it any more.
        (WebCore::JSDOMWindowBase::JSDOMWindowBase): Removed the argument from
        the JSDOMWindowBaseData constructor, and added the this argument to the
        JSGlobalObject constructor. This is because a couple key bits of
        initialization moved from the data constructor to the JSGlobalObject
        constructor.
        * bindings/js/JSDOMWindowBase.h: Ditto.

        * bridge/qt/qt_runtime.cpp:
        (JSC::Bindings::QtRuntimeMethod::QtRuntimeMethod):
        * bridge/runtime_method.cpp:
        (JSC::RuntimeMethod::RuntimeMethod):
        Pass JSGlobalData* instead of ExecState* to the InternalFunction
        constructor.



git-svn-id: http://svn.webkit.org/repository/webkit/trunk@37257 268f45cc-cd09-0410-ab3c-d52691b4dbfc
42 files changed