Ignore:
Timestamp:
Oct 3, 2008, 2:39:16 PM (17 years ago)
Author:
Darin Adler
Message:

JavaScriptCore:

2008-10-03 Darin Adler <Darin Adler>

Reviewed by Geoff Garen.

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.
  • 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 Adler>

Reviewed by Geoff Garen.

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.
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/JavaScriptCore/kjs/JSNumberCell.h

    r36976 r37257  
    4444    class JSNumberCell : public JSCell {
    4545        friend class CTI;
     46        friend JSValue* jsNumberCell(JSGlobalData*, double);
     47        friend JSValue* jsNaN(JSGlobalData*);
    4648        friend JSValue* jsNumberCell(ExecState*, double);
    4749        friend JSValue* jsNaN(ExecState*);
     
    7274        }
    7375
     76        void* operator new(size_t size, JSGlobalData* globalData)
     77        {
     78    #ifdef JAVASCRIPTCORE_BUILDING_ALL_IN_ONE_FILE
     79            return globalData->heap.inlineAllocateNumber(size);
     80    #else
     81            return globalData->heap.allocateNumber(size);
     82    #endif
     83        }
     84
    7485        static PassRefPtr<StructureID> createStructureID(JSValue* proto) { return StructureID::create(proto, TypeInfo(NumberType)); }
    7586
    7687    private:
     88        JSNumberCell(JSGlobalData* globalData, double value)
     89            : JSCell(globalData->numberStructureID.get())
     90            , m_value(value)
     91        {
     92        }
     93
    7794        JSNumberCell(ExecState* exec, double value)
    7895            : JSCell(exec->globalData().numberStructureID.get())
     
    100117    }
    101118
     119    ALWAYS_INLINE JSValue* jsNumber(ExecState* exec, short i)
     120    {
     121        JSValue* v = JSImmediate::from(i);
     122        return v ? v : jsNumberCell(exec, i);
     123    }
     124
     125    ALWAYS_INLINE JSValue* jsNumber(ExecState* exec, unsigned short i)
     126    {
     127        JSValue* v = JSImmediate::from(i);
     128        return v ? v : jsNumberCell(exec, i);
     129    }
     130
    102131    ALWAYS_INLINE JSValue* jsNumber(ExecState* exec, int i)
    103132    {
     
    134163        JSValue* v = JSImmediate::from(i);
    135164        return v ? v : jsNumberCell(exec, static_cast<double>(i));
     165    }
     166
     167    ALWAYS_INLINE JSValue* jsNumber(JSGlobalData* globalData, double d)
     168    {
     169        JSValue* v = JSImmediate::from(d);
     170        return v ? v : jsNumberCell(globalData, d);
     171    }
     172
     173    ALWAYS_INLINE JSValue* jsNumber(JSGlobalData* globalData, short i)
     174    {
     175        JSValue* v = JSImmediate::from(i);
     176        return v ? v : jsNumberCell(globalData, i);
     177    }
     178
     179    ALWAYS_INLINE JSValue* jsNumber(JSGlobalData* globalData, unsigned short i)
     180    {
     181        JSValue* v = JSImmediate::from(i);
     182        return v ? v : jsNumberCell(globalData, i);
     183    }
     184
     185    ALWAYS_INLINE JSValue* jsNumber(JSGlobalData* globalData, int i)
     186    {
     187        JSValue* v = JSImmediate::from(i);
     188        return v ? v : jsNumberCell(globalData, i);
     189    }
     190
     191    ALWAYS_INLINE JSValue* jsNumber(JSGlobalData* globalData, unsigned i)
     192    {
     193        JSValue* v = JSImmediate::from(i);
     194        return v ? v : jsNumberCell(globalData, i);
     195    }
     196
     197    ALWAYS_INLINE JSValue* jsNumber(JSGlobalData* globalData, long i)
     198    {
     199        JSValue* v = JSImmediate::from(i);
     200        return v ? v : jsNumberCell(globalData, i);
     201    }
     202
     203    ALWAYS_INLINE JSValue* jsNumber(JSGlobalData* globalData, unsigned long i)
     204    {
     205        JSValue* v = JSImmediate::from(i);
     206        return v ? v : jsNumberCell(globalData, i);
     207    }
     208
     209    ALWAYS_INLINE JSValue* jsNumber(JSGlobalData* globalData, long long i)
     210    {
     211        JSValue* v = JSImmediate::from(i);
     212        return v ? v : jsNumberCell(globalData, static_cast<double>(i));
     213    }
     214
     215    ALWAYS_INLINE JSValue* jsNumber(JSGlobalData* globalData, unsigned long long i)
     216    {
     217        JSValue* v = JSImmediate::from(i);
     218        return v ? v : jsNumberCell(globalData, static_cast<double>(i));
    136219    }
    137220
Note: See TracChangeset for help on using the changeset viewer.