1. 06 Oct, 2008 2 commits
    • mjs@apple.com's avatar
      JavaScriptCore: · 6c3268ce
      mjs@apple.com authored
      2008-10-06  Maciej Stachowiak  <mjs@apple.com>
      
              Not reviewed. Build fix.
              
              - revert toBoolean changes (r37333 and r37335); need to make WebCore work with these
      
              * API/JSValueRef.cpp:
              (JSValueToBoolean):
              * ChangeLog:
              * JavaScriptCore.exp:
              * VM/CodeBlock.cpp:
              (JSC::CodeBlock::dump):
              * VM/Machine.cpp:
              (JSC::Machine::privateExecute):
              (JSC::Machine::cti_op_loop_if_true):
              (JSC::Machine::cti_op_not):
              (JSC::Machine::cti_op_jtrue):
              * kjs/ArrayPrototype.cpp:
              (JSC::arrayProtoFuncFilter):
              (JSC::arrayProtoFuncEvery):
              (JSC::arrayProtoFuncSome):
              * kjs/BooleanConstructor.cpp:
              (JSC::constructBoolean):
              (JSC::callBooleanConstructor):
              * kjs/GetterSetter.h:
              * kjs/JSCell.h:
              (JSC::JSValue::toBoolean):
              * kjs/JSNumberCell.cpp:
              (JSC::JSNumberCell::toBoolean):
              * kjs/JSNumberCell.h:
              * kjs/JSObject.cpp:
              (JSC::JSObject::toBoolean):
              * kjs/JSObject.h:
              * kjs/JSString.cpp:
              (JSC::JSString::toBoolean):
              * kjs/JSString.h:
              * kjs/JSValue.h:
              * kjs/RegExpConstructor.cpp:
              (JSC::setRegExpConstructorMultiline):
              * kjs/RegExpObject.cpp:
              (JSC::RegExpObject::match):
              * kjs/RegExpPrototype.cpp:
              (JSC::regExpProtoFuncToString):
      
      JavaScriptGlue:
      
      2008-10-06  Maciej Stachowiak  <mjs@apple.com>
      
              Not reviewed. Build fix.
      
              - revert toBoolean changes (r37333 and r37335); need to make WebCore work with these
      
              * JSUtils.cpp:
              (KJSValueToCFTypeInternal):
      
      
      
      git-svn-id: http://svn.webkit.org/repository/webkit/trunk@37337 268f45cc-cd09-0410-ab3c-d52691b4dbfc
      6c3268ce
    • mjs@apple.com's avatar
      2008-10-06 Maciej Stachowiak <mjs@apple.com> · d2c36fec
      mjs@apple.com authored
              Reviewed by Sam Weinig.
              
              - optimize op_jtrue, op_loop_if_true and op_not in various ways
              https://bugs.webkit.org/show_bug.cgi?id=21404
              
              1) Make JSValue::toBoolean nonvirtual and completely inline by
              making use of the StructureID type field.
              
              2) Make JSValue::toBoolean not take an ExecState; doesn't need it.
              
              3) Make op_not, op_loop_if_true and op_jtrue not read the
              ExecState (toBoolean doesn't need it any more) and not check
              exceptions (toBoolean can't throw).
      
              * API/JSValueRef.cpp:
              (JSValueToBoolean):
              * JavaScriptCore.exp:
              * VM/CodeBlock.cpp:
              (JSC::CodeBlock::dump):
              * VM/Machine.cpp:
              (JSC::Machine::privateExecute):
              (JSC::Machine::cti_op_loop_if_true):
              (JSC::Machine::cti_op_not):
              (JSC::Machine::cti_op_jtrue):
              * kjs/ArrayPrototype.cpp:
              (JSC::arrayProtoFuncFilter):
              (JSC::arrayProtoFuncEvery):
              (JSC::arrayProtoFuncSome):
              * kjs/BooleanConstructor.cpp:
              (JSC::constructBoolean):
              (JSC::callBooleanConstructor):
              * kjs/GetterSetter.h:
              * kjs/JSCell.h:
              (JSC::JSValue::toBoolean):
              * kjs/JSNumberCell.cpp:
              * kjs/JSNumberCell.h:
              (JSC::JSNumberCell::toBoolean):
              * kjs/JSObject.cpp:
              * kjs/JSObject.h:
              (JSC::JSObject::toBoolean):
              (JSC::JSCell::toBoolean):
              * kjs/JSString.cpp:
              * kjs/JSString.h:
              (JSC::JSString::toBoolean):
              * kjs/JSValue.h:
              * kjs/RegExpConstructor.cpp:
              (JSC::setRegExpConstructorMultiline):
              * kjs/RegExpObject.cpp:
              (JSC::RegExpObject::match):
              * kjs/RegExpPrototype.cpp:
              (JSC::regExpProtoFuncToString):
      
      
      
      git-svn-id: http://svn.webkit.org/repository/webkit/trunk@37333 268f45cc-cd09-0410-ab3c-d52691b4dbfc
      d2c36fec
  2. 03 Oct, 2008 1 commit
    • darin@apple.com's avatar
      JavaScriptCore: · 3d73fee8
      darin@apple.com authored
      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
      3d73fee8
  3. 20 Sep, 2008 1 commit
    • darin@apple.com's avatar
      JavaScriptCore: · 8281d838
      darin@apple.com authored
      2008-09-20  Darin Adler  <darin@apple.com>
      
              Reviewed by Maciej Stachowiak.
      
              - finish https://bugs.webkit.org/show_bug.cgi?id=20858
                make each distinct C++ class get a distinct JSC::Structure
      
              This also includes some optimizations that make the change an overall
              small speedup. Without those it was a bit of a slowdown.
      
              * API/JSCallbackConstructor.cpp:
              (JSC::JSCallbackConstructor::JSCallbackConstructor): Take a structure.
              * API/JSCallbackConstructor.h: Ditto.
              * API/JSCallbackFunction.cpp:
              (JSC::JSCallbackFunction::JSCallbackFunction): Pass a structure.
              * API/JSCallbackObject.h: Take a structure.
              * API/JSCallbackObjectFunctions.h:
              (JSC::JSCallbackObject::JSCallbackObject): Ditto.
      
              * API/JSClassRef.cpp:
              (OpaqueJSClass::prototype): Pass in a structure. Call setPrototype
              if there's a custom prototype involved.
              * API/JSObjectRef.cpp:
              (JSObjectMake): Ditto.
              (JSObjectMakeConstructor): Pass in a structure.
      
              * JavaScriptCore.exp: Updated.
      
              * VM/Machine.cpp:
              (JSC::jsLess): Added a special case for when both arguments are strings.
              This avoids converting both strings to with UString::toDouble.
              (JSC::jsLessEq): Ditto.
              (JSC::Machine::privateExecute): Pass in a structure.
              (JSC::Machine::cti_op_construct_JSConstruct): Ditto.
              (JSC::Machine::cti_op_new_regexp): Ditto.
              (JSC::Machine::cti_op_is_string): Ditto.
              * VM/Machine.h: Made isJSString public so it can be used in the CTI.
      
              * kjs/Arguments.cpp:
              (JSC::Arguments::Arguments): Pass in a structure.
      
              * kjs/JSCell.h: Mark constructor explicit.
      
              * kjs/JSGlobalObject.cpp:
              (JSC::markIfNeeded): Added an overload for marking structures.
              (JSC::JSGlobalObject::reset): Eliminate code to set data members to
              zero. We now do that in the constructor, and we no longer use this
              anywhere except in the constructor. Added code to create structures.
              Pass structures rather than prototypes when creating objects.
              (JSC::JSGlobalObject::mark): Mark the structures.
      
              * kjs/JSGlobalObject.h: Removed unneeded class declarations.
              Added initializers for raw pointers in JSGlobalObjectData so
              everything starts with a 0. Added structure data and accessor
              functions.
      
              * kjs/JSImmediate.cpp:
              (JSC::JSImmediate::nonInlineNaN): Added.
              * kjs/JSImmediate.h:
              (JSC::JSImmediate::toDouble): Rewrote to avoid PIC branches.
      
              * kjs/JSNumberCell.cpp:
              (JSC::jsNumberCell): Made non-inline to avoid PIC branches
              in functions that call this one.
              (JSC::jsNaN): Ditto.
              * kjs/JSNumberCell.h: Ditto.
      
              * kjs/JSObject.h: Removed constructor that takes a prototype.
              All callers now pass structures.
      
              * kjs/ArrayConstructor.cpp:
              (JSC::ArrayConstructor::ArrayConstructor):
              (JSC::constructArrayWithSizeQuirk):
              * kjs/ArrayConstructor.h:
              * kjs/ArrayPrototype.cpp:
              (JSC::ArrayPrototype::ArrayPrototype):
              * kjs/ArrayPrototype.h:
              * kjs/BooleanConstructor.cpp:
              (JSC::BooleanConstructor::BooleanConstructor):
              (JSC::constructBoolean):
              (JSC::constructBooleanFromImmediateBoolean):
              * kjs/BooleanConstructor.h:
              * kjs/BooleanObject.cpp:
              (JSC::BooleanObject::BooleanObject):
              * kjs/BooleanObject.h:
              * kjs/BooleanPrototype.cpp:
              (JSC::BooleanPrototype::BooleanPrototype):
              * kjs/BooleanPrototype.h:
              * kjs/DateConstructor.cpp:
              (JSC::DateConstructor::DateConstructor):
              (JSC::constructDate):
              * kjs/DateConstructor.h:
              * kjs/DateInstance.cpp:
              (JSC::DateInstance::DateInstance):
              * kjs/DateInstance.h:
              * kjs/DatePrototype.cpp:
              (JSC::DatePrototype::DatePrototype):
              * kjs/DatePrototype.h:
              * kjs/ErrorConstructor.cpp:
              (JSC::ErrorConstructor::ErrorConstructor):
              (JSC::constructError):
              * kjs/ErrorConstructor.h:
              * kjs/ErrorInstance.cpp:
              (JSC::ErrorInstance::ErrorInstance):
              * kjs/ErrorInstance.h:
              * kjs/ErrorPrototype.cpp:
              (JSC::ErrorPrototype::ErrorPrototype):
              * kjs/ErrorPrototype.h:
              * kjs/FunctionConstructor.cpp:
              (JSC::FunctionConstructor::FunctionConstructor):
              * kjs/FunctionConstructor.h:
              * kjs/FunctionPrototype.cpp:
              (JSC::FunctionPrototype::FunctionPrototype):
              (JSC::FunctionPrototype::addFunctionProperties):
              * kjs/FunctionPrototype.h:
              * kjs/GlobalEvalFunction.cpp:
              (JSC::GlobalEvalFunction::GlobalEvalFunction):
              * kjs/GlobalEvalFunction.h:
              * kjs/InternalFunction.cpp:
              (JSC::InternalFunction::InternalFunction):
              * kjs/InternalFunction.h:
              (JSC::InternalFunction::InternalFunction):
              * kjs/JSArray.cpp:
              (JSC::JSArray::JSArray):
              (JSC::constructEmptyArray):
              (JSC::constructArray):
              * kjs/JSArray.h:
              * kjs/JSFunction.cpp:
              (JSC::JSFunction::JSFunction):
              (JSC::JSFunction::construct):
              * kjs/JSObject.cpp:
              (JSC::constructEmptyObject):
              * kjs/JSString.cpp:
              (JSC::StringObject::create):
              * kjs/JSWrapperObject.h:
              * kjs/MathObject.cpp:
              (JSC::MathObject::MathObject):
              * kjs/MathObject.h:
              * kjs/NativeErrorConstructor.cpp:
              (JSC::NativeErrorConstructor::NativeErrorConstructor):
              (JSC::NativeErrorConstructor::construct):
              * kjs/NativeErrorConstructor.h:
              * kjs/NativeErrorPrototype.cpp:
              (JSC::NativeErrorPrototype::NativeErrorPrototype):
              * kjs/NativeErrorPrototype.h:
              * kjs/NumberConstructor.cpp:
              (JSC::NumberConstructor::NumberConstructor):
              (JSC::constructWithNumberConstructor):
              * kjs/NumberConstructor.h:
              * kjs/NumberObject.cpp:
              (JSC::NumberObject::NumberObject):
              (JSC::constructNumber):
              (JSC::constructNumberFromImmediateNumber):
              * kjs/NumberObject.h:
              * kjs/NumberPrototype.cpp:
              (JSC::NumberPrototype::NumberPrototype):
              * kjs/NumberPrototype.h:
              * kjs/ObjectConstructor.cpp:
              (JSC::ObjectConstructor::ObjectConstructor):
              (JSC::constructObject):
              * kjs/ObjectConstructor.h:
              * kjs/ObjectPrototype.cpp:
              (JSC::ObjectPrototype::ObjectPrototype):
              * kjs/ObjectPrototype.h:
              * kjs/PrototypeFunction.cpp:
              (JSC::PrototypeFunction::PrototypeFunction):
              * kjs/PrototypeFunction.h:
              * kjs/RegExpConstructor.cpp:
              (JSC::RegExpConstructor::RegExpConstructor):
              (JSC::RegExpMatchesArray::RegExpMatchesArray):
              (JSC::constructRegExp):
              * kjs/RegExpConstructor.h:
              * kjs/RegExpObject.cpp:
              (JSC::RegExpObject::RegExpObject):
              * kjs/RegExpObject.h:
              * kjs/RegExpPrototype.cpp:
              (JSC::RegExpPrototype::RegExpPrototype):
              * kjs/RegExpPrototype.h:
              * kjs/Shell.cpp:
              (GlobalObject::GlobalObject):
              * kjs/StringConstructor.cpp:
              (JSC::StringConstructor::StringConstructor):
              (JSC::constructWithStringConstructor):
              * kjs/StringConstructor.h:
              * kjs/StringObject.cpp:
              (JSC::StringObject::StringObject):
              * kjs/StringObject.h:
              * kjs/StringObjectThatMasqueradesAsUndefined.h:
              (JSC::StringObjectThatMasqueradesAsUndefined::StringObjectThatMasqueradesAsUndefined):
              * kjs/StringPrototype.cpp:
              (JSC::StringPrototype::StringPrototype):
              * kjs/StringPrototype.h:
              Take and pass structures.
      
      WebCore:
      
      2008-09-20  Darin Adler  <darin@apple.com>
      
              Reviewed by Maciej Stachowiak.
      
              - finish https://bugs.webkit.org/show_bug.cgi?id=20858
                make each distinct C++ class get a distinct JSC::Structure
      
              * bindings/js/JSCSSStyleDeclarationCustom.cpp:
              (WebCore::JSCSSStyleDeclaration::nameGetter): Pass in a structure
              ID. Note that this makes a new structure every time -- we could
              optimize this slightly be caching and reusing a single one.
      
              * bridge/runtime_method.cpp:
              (JSC::RuntimeMethod::RuntimeMethod): Create a unique structure using
              getDOMStructure.
              * bridge/runtime_method.h:
              (JSC::RuntimeMethod::createPrototype): Added createPrototype so
              getDOMStructure will work.
      
              * bindings/js/JSDOMWindowShell.cpp:
              (WebCore::JSDOMWindowShell::JSDOMWindowShell): Initialize m_window to
              0; needed in case garbage collection happens while creating the
              JSDOMWindow.
      
      
      
      git-svn-id: http://svn.webkit.org/repository/webkit/trunk@36726 268f45cc-cd09-0410-ab3c-d52691b4dbfc
      8281d838
  4. 12 Sep, 2008 1 commit
  5. 10 Sep, 2008 1 commit
    • mjs@apple.com's avatar
      2008-09-10 Maciej Stachowiak <mjs@apple.com> · 4fab8113
      mjs@apple.com authored
              Reviewed by Oliver.
              
              - enable polymorphic inline caching of properties of primitives
              
              1.012x speedup on SunSpider.
      
              We create special structure IDs for JSString and
              JSNumberCell. Unlike normal structure IDs, these cannot hold the
              true prototype. Due to JS autoboxing semantics, the prototype used
              when looking up string or number properties depends on the lexical
              global object of the call site, not the creation site. Thus we
              enable StructureIDs to handle this quirk for primitives.
              
              Everything else should be straightforward.
              
              * VM/CTI.cpp:
              (JSC::CTI::privateCompileGetByIdProto):
              (JSC::CTI::privateCompileGetByIdChain):
              * VM/CTI.h:
              (JSC::CTI::compileGetByIdProto):
              (JSC::CTI::compileGetByIdChain):
              * VM/JSPropertyNameIterator.h:
              (JSC::JSPropertyNameIterator::JSPropertyNameIterator):
              * VM/Machine.cpp:
              (JSC::Machine::Machine):
              (JSC::cachePrototypeChain):
              (JSC::Machine::tryCachePutByID):
              (JSC::Machine::tryCacheGetByID):
              (JSC::Machine::privateExecute):
              (JSC::Machine::tryCTICachePutByID):
              (JSC::Machine::tryCTICacheGetByID):
              * kjs/GetterSetter.h:
              (JSC::GetterSetter::GetterSetter):
              * kjs/JSCell.h:
              * kjs/JSGlobalData.cpp:
              (JSC::JSGlobalData::JSGlobalData):
              * kjs/JSGlobalData.h:
              * kjs/JSGlobalObject.h:
              (JSC::StructureID::prototypeForLookup):
              * kjs/JSNumberCell.h:
              (JSC::JSNumberCell::JSNumberCell):
              (JSC::jsNumberCell):
              * kjs/JSObject.h:
              (JSC::JSObject::prototype):
              * kjs/JSString.cpp:
              (JSC::jsString):
              (JSC::jsSubstring):
              (JSC::jsOwnedString):
              * kjs/JSString.h:
              (JSC::JSString::JSString):
              (JSC::JSString::):
              (JSC::jsSingleCharacterString):
              (JSC::jsSingleCharacterSubstring):
              (JSC::jsNontrivialString):
              * kjs/SmallStrings.cpp:
              (JSC::SmallStrings::createEmptyString):
              (JSC::SmallStrings::createSingleCharacterString):
              * kjs/StructureID.cpp:
              (JSC::StructureID::StructureID):
              (JSC::StructureID::addPropertyTransition):
              (JSC::StructureID::getterSetterTransition):
              (JSC::StructureIDChain::StructureIDChain):
              * kjs/StructureID.h:
              (JSC::StructureID::create):
              (JSC::StructureID::storedPrototype):
      
      
      
      git-svn-id: http://svn.webkit.org/repository/webkit/trunk@36316 268f45cc-cd09-0410-ab3c-d52691b4dbfc
      4fab8113
  6. 07 Sep, 2008 1 commit
    • cwzwarich@webkit.org's avatar
      2008-09-07 Cameron Zwarich <cwzwarich@uwaterloo.ca> · 3f782f6a
      cwzwarich@webkit.org authored
              Reviewed by Maciej Stachowiak.
      
              Bug 20704: Replace the KJS namespace
              <https://bugs.webkit.org/show_bug.cgi?id=20704>
      
              Rename the KJS namespace to JSC. There are still some uses of KJS in
              preprocessor macros and comments, but these will also be changed some
              time in the near future. There are also some uses in the names of JNI
              functions, but I will check if these are safe to change as well.
      
              JavaScriptCore:
      
              * API/APICast.h:
              (toJS):
              (toRef):
              (toGlobalRef):
              * API/JSBase.cpp:
              * API/JSCallbackConstructor.cpp:
              * API/JSCallbackConstructor.h:
              * API/JSCallbackFunction.cpp:
              * API/JSCallbackFunction.h:
              * API/JSCallbackObject.cpp:
              * API/JSCallbackObject.h:
              * API/JSCallbackObjectFunctions.h:
              * API/JSClassRef.cpp:
              (OpaqueJSClass::staticValues):
              (OpaqueJSClass::staticFunctions):
              * API/JSClassRef.h:
              * API/JSContextRef.cpp:
              * API/JSObjectRef.cpp:
              * API/JSProfilerPrivate.cpp:
              * API/JSStringRef.cpp:
              * API/JSValueRef.cpp:
              (JSValueGetType):
              * API/OpaqueJSString.cpp:
              * API/OpaqueJSString.h:
              * JavaScriptCore.Debug.exp:
              * JavaScriptCore.base.exp:
              * VM/CTI.cpp:
              (JSC::):
              * VM/CTI.h:
              * VM/CodeBlock.cpp:
              * VM/CodeBlock.h:
              * VM/CodeGenerator.cpp:
              * VM/CodeGenerator.h:
              * VM/ExceptionHelpers.cpp:
              * VM/ExceptionHelpers.h:
              * VM/Instruction.h:
              * VM/JSPropertyNameIterator.cpp:
              * VM/JSPropertyNameIterator.h:
              * VM/LabelID.h:
              * VM/Machine.cpp:
              * VM/Machine.h:
              * VM/Opcode.cpp:
              * VM/Opcode.h:
              * VM/Register.h:
              (WTF::):
              * VM/RegisterFile.cpp:
              * VM/RegisterFile.h:
              * VM/RegisterID.h:
              (WTF::):
              * VM/SamplingTool.cpp:
              * VM/SamplingTool.h:
              * VM/SegmentedVector.h:
              * kjs/ArgList.cpp:
              * kjs/ArgList.h:
              * kjs/Arguments.cpp:
              * kjs/Arguments.h:
              * kjs/ArrayConstructor.cpp:
              * kjs/ArrayConstructor.h:
              * kjs/ArrayPrototype.cpp:
              * kjs/ArrayPrototype.h:
              * kjs/BatchedTransitionOptimizer.h:
              * kjs/BooleanConstructor.cpp:
              * kjs/BooleanConstructor.h:
              * kjs/BooleanObject.cpp:
              * kjs/BooleanObject.h:
              * kjs/BooleanPrototype.cpp:
              * kjs/BooleanPrototype.h:
              * kjs/CallData.cpp:
              * kjs/CallData.h:
              * kjs/ClassInfo.h:
              * kjs/CommonIdentifiers.cpp:
              * kjs/CommonIdentifiers.h:
              * kjs/ConstructData.cpp:
              * kjs/ConstructData.h:
              * kjs/DateConstructor.cpp:
              * kjs/DateConstructor.h:
              * kjs/DateInstance.cpp:
              (JSC::DateInstance::msToGregorianDateTime):
              * kjs/DateInstance.h:
              * kjs/DateMath.cpp:
              * kjs/DateMath.h:
              * kjs/DatePrototype.cpp:
              * kjs/DatePrototype.h:
              * kjs/DebuggerCallFrame.cpp:
              * kjs/DebuggerCallFrame.h:
              * kjs/Error.cpp:
              * kjs/Error.h:
              * kjs/ErrorConstructor.cpp:
              * kjs/ErrorConstructor.h:
              * kjs/ErrorInstance.cpp:
              * kjs/ErrorInstance.h:
              * kjs/ErrorPrototype.cpp:
              * kjs/ErrorPrototype.h:
              * kjs/ExecState.cpp:
              * kjs/ExecState.h:
              * kjs/FunctionConstructor.cpp:
              * kjs/FunctionConstructor.h:
              * kjs/FunctionPrototype.cpp:
              * kjs/FunctionPrototype.h:
              * kjs/GetterSetter.cpp:
              * kjs/GetterSetter.h:
              * kjs/GlobalEvalFunction.cpp:
              * kjs/GlobalEvalFunction.h:
              * kjs/IndexToNameMap.cpp:
              * kjs/IndexToNameMap.h:
              * kjs/InitializeThreading.cpp:
              * kjs/InitializeThreading.h:
              * kjs/InternalFunction.cpp:
              * kjs/InternalFunction.h:
              (JSC::InternalFunction::InternalFunction):
              * kjs/JSActivation.cpp:
              * kjs/JSActivation.h:
              * kjs/JSArray.cpp:
              * kjs/JSArray.h:
              * kjs/JSCell.cpp:
              * kjs/JSCell.h:
              * kjs/JSFunction.cpp:
              * kjs/JSFunction.h:
              (JSC::JSFunction::JSFunction):
              * kjs/JSGlobalData.cpp:
              (JSC::JSGlobalData::JSGlobalData):
              * kjs/JSGlobalData.h:
              * kjs/JSGlobalObject.cpp:
              * kjs/JSGlobalObject.h:
              * kjs/JSGlobalObjectFunctions.cpp:
              * kjs/JSGlobalObjectFunctions.h:
              * kjs/JSImmediate.cpp:
              * kjs/JSImmediate.h:
              * kjs/JSLock.cpp:
              * kjs/JSLock.h:
              * kjs/JSNotAnObject.cpp:
              * kjs/JSNotAnObject.h:
              * kjs/JSNumberCell.cpp:
              * kjs/JSNumberCell.h:
              * kjs/JSObject.cpp:
              * kjs/JSObject.h:
              * kjs/JSStaticScopeObject.cpp:
              * kjs/JSStaticScopeObject.h:
              * kjs/JSString.cpp:
              * kjs/JSString.h:
              * kjs/JSType.h:
              * kjs/JSValue.cpp:
              * kjs/JSValue.h:
              * kjs/JSVariableObject.cpp:
              * kjs/JSVariableObject.h:
              * kjs/JSWrapperObject.cpp:
              * kjs/JSWrapperObject.h:
              * kjs/LabelStack.cpp:
              * kjs/LabelStack.h:
              * kjs/MathObject.cpp:
              * kjs/MathObject.h:
              * kjs/NativeErrorConstructor.cpp:
              * kjs/NativeErrorConstructor.h:
              * kjs/NativeErrorPrototype.cpp:
              * kjs/NativeErrorPrototype.h:
              * kjs/NodeInfo.h:
              * kjs/NumberConstructor.cpp:
              * kjs/NumberConstructor.h:
              * kjs/NumberObject.cpp:
              * kjs/NumberObject.h:
              * kjs/NumberPrototype.cpp:
              * kjs/NumberPrototype.h:
              * kjs/ObjectConstructor.cpp:
              * kjs/ObjectConstructor.h:
              * kjs/ObjectPrototype.cpp:
              * kjs/ObjectPrototype.h:
              * kjs/Parser.cpp:
              * kjs/Parser.h:
              * kjs/PropertyMap.cpp:
              (JSC::PropertyMapStatisticsExitLogger::~PropertyMapStatisticsExitLogger):
              * kjs/PropertyMap.h:
              * kjs/PropertyNameArray.cpp:
              * kjs/PropertyNameArray.h:
              * kjs/PropertySlot.cpp:
              * kjs/PropertySlot.h:
              * kjs/PrototypeFunction.cpp:
              * kjs/PrototypeFunction.h:
              * kjs/PutPropertySlot.h:
              * kjs/RegExpConstructor.cpp:
              * kjs/RegExpConstructor.h:
              * kjs/RegExpObject.cpp:
              * kjs/RegExpObject.h:
              * kjs/RegExpPrototype.cpp:
              * kjs/RegExpPrototype.h:
              * kjs/ScopeChain.cpp:
              * kjs/ScopeChain.h:
              * kjs/ScopeChainMark.h:
              * kjs/Shell.cpp:
              (jscmain):
              * kjs/SmallStrings.cpp:
              * kjs/SmallStrings.h:
              * kjs/SourceProvider.h:
              * kjs/SourceRange.h:
              * kjs/StringConstructor.cpp:
              * kjs/StringConstructor.h:
              * kjs/StringObject.cpp:
              * kjs/StringObject.h:
              * kjs/StringObjectThatMasqueradesAsUndefined.h:
              * kjs/StringPrototype.cpp:
              * kjs/StringPrototype.h:
              * kjs/StructureID.cpp:
              * kjs/StructureID.h:
              * kjs/SymbolTable.h:
              * kjs/collector.cpp:
              * kjs/collector.h:
              * kjs/completion.h:
              * kjs/create_hash_table:
              * kjs/debugger.cpp:
              * kjs/debugger.h:
              * kjs/dtoa.cpp:
              * kjs/dtoa.h:
              * kjs/grammar.y:
              * kjs/identifier.cpp:
              * kjs/identifier.h:
              (JSC::Identifier::equal):
              * kjs/interpreter.cpp:
              * kjs/interpreter.h:
              * kjs/lexer.cpp:
              (JSC::Lexer::Lexer):
              (JSC::Lexer::clear):
              (JSC::Lexer::makeIdentifier):
              * kjs/lexer.h:
              * kjs/lookup.cpp:
              * kjs/lookup.h:
              * kjs/nodes.cpp:
              * kjs/nodes.h:
              * kjs/nodes2string.cpp:
              * kjs/operations.cpp:
              * kjs/operations.h:
              * kjs/protect.h:
              * kjs/regexp.cpp:
              * kjs/regexp.h:
              * kjs/ustring.cpp:
              * kjs/ustring.h:
              (JSC::operator!=):
              (JSC::IdentifierRepHash::hash):
              (WTF::):
              * masm/MacroAssembler.h:
              * masm/MacroAssemblerWin.cpp:
              * masm/X86Assembler.h:
              * pcre/pcre_exec.cpp:
              * profiler/CallIdentifier.h:
              (WTF::):
              * profiler/HeavyProfile.cpp:
              * profiler/HeavyProfile.h:
              * profiler/Profile.cpp:
              * profiler/Profile.h:
              * profiler/ProfileGenerator.cpp:
              * profiler/ProfileGenerator.h:
              * profiler/ProfileNode.cpp:
              * profiler/ProfileNode.h:
              * profiler/Profiler.cpp:
              * profiler/Profiler.h:
              * profiler/TreeProfile.cpp:
              * profiler/TreeProfile.h:
              * wrec/WREC.cpp:
              * wrec/WREC.h:
              * wtf/AVLTree.h:
      
              WebCore:
      
              * WebCore.base.exp:
              * bindings/js/GCController.cpp:
              * bindings/js/JSAttrCustom.cpp:
              * bindings/js/JSAudioConstructor.cpp:
              * bindings/js/JSAudioConstructor.h:
              (WebCore::JSAudioConstructor::classInfo):
              * bindings/js/JSCSSRuleCustom.cpp:
              * bindings/js/JSCSSStyleDeclarationCustom.cpp:
              * bindings/js/JSCSSValueCustom.cpp:
              * bindings/js/JSCanvasPixelArrayCustom.cpp:
              * bindings/js/JSCanvasRenderingContext2DCustom.cpp:
              * bindings/js/JSClipboardCustom.cpp:
              * bindings/js/JSConsoleCustom.cpp:
              * bindings/js/JSCustomSQLStatementCallback.cpp:
              (WebCore::JSCustomSQLStatementCallback::handleEvent):
              * bindings/js/JSCustomSQLStatementCallback.h:
              (WebCore::JSCustomSQLStatementCallback::create):
              * bindings/js/JSCustomSQLStatementErrorCallback.cpp:
              (WebCore::JSCustomSQLStatementErrorCallback::handleEvent):
              * bindings/js/JSCustomSQLStatementErrorCallback.h:
              (WebCore::JSCustomSQLStatementErrorCallback::create):
              * bindings/js/JSCustomSQLTransactionCallback.cpp:
              (WebCore::JSCustomSQLTransactionCallback::handleEvent):
              * bindings/js/JSCustomSQLTransactionCallback.h:
              (WebCore::JSCustomSQLTransactionCallback::create):
              * bindings/js/JSCustomSQLTransactionErrorCallback.cpp:
              (WebCore::JSCustomSQLTransactionErrorCallback::handleEvent):
              * bindings/js/JSCustomSQLTransactionErrorCallback.h:
              (WebCore::JSCustomSQLTransactionErrorCallback::create):
              * bindings/js/JSCustomVoidCallback.cpp:
              (WebCore::JSCustomVoidCallback::handleEvent):
              * bindings/js/JSCustomVoidCallback.h:
              (WebCore::JSCustomVoidCallback::create):
              * bindings/js/JSCustomXPathNSResolver.cpp:
              (WebCore::JSCustomXPathNSResolver::create):
              * bindings/js/JSCustomXPathNSResolver.h:
              * bindings/js/JSDOMApplicationCacheCustom.cpp:
              (WebCore::JSDOMApplicationCache::dispatchEvent):
              * bindings/js/JSDOMBinding.cpp:
              (WebCore::jsOwnedStringOrNull):
              * bindings/js/JSDOMBinding.h:
              (WebCore::DOMObject::DOMObject):
              (WebCore::cacheDOMObject):
              (WebCore::cacheSVGDOMObject):
              (WebCore::DOMExceptionTranslator::DOMExceptionTranslator):
              (WebCore::toJS):
              * bindings/js/JSDOMWindowBase.cpp:
              * bindings/js/JSDOMWindowBase.h:
              (WebCore::JSDOMWindowBase::classInfo):
              (WebCore::JSDOMWindowBase::d):
              * bindings/js/JSDOMWindowCustom.cpp:
              (WebCore::JSDOMWindow::getPropertyAttributes):
              * bindings/js/JSDOMWindowCustom.h:
              (WebCore::asJSDOMWindow):
              (WebCore::JSDOMWindow::customGetOwnPropertySlot):
              (WebCore::JSDOMWindow::customPut):
              (WebCore::JSDOMWindowBase::allowsAccessFrom):
              (WebCore::JSDOMWindowBase::allowsAccessFromNoErrorMessage):
              * bindings/js/JSDOMWindowShell.cpp:
              (WebCore::JSDOMWindowShell::getPropertyAttributes):
              * bindings/js/JSDOMWindowShell.h:
              (WebCore::JSDOMWindowShell::classInfo):
              * bindings/js/JSDatabaseCustom.cpp:
              * bindings/js/JSDocumentCustom.cpp:
              * bindings/js/JSDocumentFragmentCustom.cpp:
              * bindings/js/JSElementCustom.cpp:
              * bindings/js/JSEventCustom.cpp:
              * bindings/js/JSEventListener.cpp:
              * bindings/js/JSEventListener.h:
              (WebCore::JSUnprotectedEventListener::create):
              (WebCore::JSEventListener::create):
              * bindings/js/JSEventTargetBase.cpp:
              * bindings/js/JSEventTargetBase.h:
              (WebCore::JSEventTargetBase::getValueProperty):
              (WebCore::JSEventTargetBase::putValueProperty):
              (WebCore::JSEventTargetBase::getOwnPropertySlot):
              (WebCore::JSEventTargetBase::put):
              (WebCore::JSEventTargetPrototype::JSEventTargetPrototype):
              (WebCore::JSEventTargetPrototype::self):
              (WebCore::JSEventTargetPrototype::getOwnPropertySlot):
              (WebCore::JSEventTargetPrototype::classInfo):
              * bindings/js/JSEventTargetNode.cpp:
              * bindings/js/JSEventTargetNode.h:
              (WebCore::JSEventTargetNode::getOwnPropertySlot):
              (WebCore::JSEventTargetNode::getValueProperty):
              (WebCore::JSEventTargetNode::put):
              (WebCore::JSEventTargetNode::putValueProperty):
              * bindings/js/JSHTMLAllCollection.h:
              (WebCore::JSHTMLAllCollection::JSHTMLAllCollection):
              (WebCore::JSHTMLAllCollection::toBoolean):
              * bindings/js/JSHTMLAppletElementCustom.cpp:
              * bindings/js/JSHTMLCollectionCustom.cpp:
              * bindings/js/JSHTMLDocumentCustom.cpp:
              * bindings/js/JSHTMLElementCustom.cpp:
              * bindings/js/JSHTMLEmbedElementCustom.cpp:
              * bindings/js/JSHTMLFormElementCustom.cpp:
              * bindings/js/JSHTMLFrameElementCustom.cpp:
              * bindings/js/JSHTMLFrameSetElementCustom.cpp:
              * bindings/js/JSHTMLIFrameElementCustom.cpp:
              * bindings/js/JSHTMLInputElementBase.cpp:
              (WebCore::JSHTMLInputElementBase::JSHTMLInputElementBase):
              (WebCore::JSHTMLInputElementBase::getOwnPropertySlot):
              * bindings/js/JSHTMLInputElementBase.h:
              (WebCore::JSHTMLInputElementBase::classInfo):
              * bindings/js/JSHTMLObjectElementCustom.cpp:
              * bindings/js/JSHTMLOptionElementConstructor.cpp:
              * bindings/js/JSHTMLOptionElementConstructor.h:
              (WebCore::JSHTMLOptionElementConstructor::classInfo):
              * bindings/js/JSHTMLOptionsCollectionCustom.cpp:
              * bindings/js/JSHTMLSelectElementCustom.cpp:
              (WebCore::selectIndexSetter):
              (WebCore::JSHTMLSelectElement::indexSetter):
              * bindings/js/JSHTMLSelectElementCustom.h:
              * bindings/js/JSHistoryCustom.cpp:
              * bindings/js/JSImageConstructor.cpp:
              * bindings/js/JSImageConstructor.h:
              (WebCore::JSImageConstructor::classInfo):
              * bindings/js/JSInspectedObjectWrapper.cpp:
              * bindings/js/JSInspectedObjectWrapper.h:
              (WebCore::JSInspectedObjectWrapper::wrapOutgoingValue):
              (WebCore::JSInspectedObjectWrapper::classInfo):
              * bindings/js/JSInspectorCallbackWrapper.cpp:
              * bindings/js/JSInspectorCallbackWrapper.h:
              (WebCore::JSInspectorCallbackWrapper::classInfo):
              (WebCore::JSInspectorCallbackWrapper::wrapOutgoingValue):
              * bindings/js/JSJavaScriptCallFrameCustom.cpp:
              * bindings/js/JSLocationCustom.cpp:
              * bindings/js/JSMimeTypeArrayCustom.cpp:
              * bindings/js/JSNSResolver.cpp:
              * bindings/js/JSNSResolver.h:
              (WebCore::JSNSResolver::create):
              * bindings/js/JSNamedNodeMapCustom.cpp:
              * bindings/js/JSNamedNodesCollection.cpp:
              (WebCore::JSNamedNodesCollection::JSNamedNodesCollection):
              * bindings/js/JSNamedNodesCollection.h:
              (WebCore::JSNamedNodesCollection::classInfo):
              * bindings/js/JSNavigatorCustom.cpp:
              * bindings/js/JSNodeCustom.cpp:
              * bindings/js/JSNodeFilterCondition.cpp:
              (WebCore::JSNodeFilterCondition::acceptNode):
              * bindings/js/JSNodeFilterCondition.h:
              (WebCore::JSNodeFilterCondition::create):
              * bindings/js/JSNodeFilterCustom.cpp:
              * bindings/js/JSNodeIteratorCustom.cpp:
              * bindings/js/JSNodeListCustom.cpp:
              * bindings/js/JSPluginArrayCustom.cpp:
              * bindings/js/JSPluginCustom.cpp:
              * bindings/js/JSPluginElementFunctions.cpp:
              (WebCore::getRuntimeObject):
              * bindings/js/JSPluginElementFunctions.h:
              * bindings/js/JSQuarantinedObjectWrapper.cpp:
              (WebCore::JSQuarantinedObjectWrapper::construct):
              (WebCore::JSQuarantinedObjectWrapper::call):
              * bindings/js/JSQuarantinedObjectWrapper.h:
              (WebCore::JSQuarantinedObjectWrapper::unwrappedObject):
              (WebCore::JSQuarantinedObjectWrapper::unwrappedGlobalObject):
              (WebCore::JSQuarantinedObjectWrapper::className):
              * bindings/js/JSRGBColor.cpp:
              * bindings/js/JSRGBColor.h:
              (WebCore::JSRGBColor::classInfo):
              * bindings/js/JSSQLResultSetRowListCustom.cpp:
              * bindings/js/JSSQLTransactionCustom.cpp:
              * bindings/js/JSSVGLazyEventListener.cpp:
              * bindings/js/JSSVGLazyEventListener.h:
              * bindings/js/JSSVGLengthCustom.cpp:
              * bindings/js/JSSVGMatrixCustom.cpp:
              (WebCore::JSSVGMatrix::inverse):
              (WebCore::JSSVGMatrix::rotateFromVector):
              * bindings/js/JSSVGPathSegCustom.cpp:
              * bindings/js/JSSVGPathSegListCustom.cpp:
              (WebCore::JSSVGPathSegList::initialize):
              (WebCore::JSSVGPathSegList::getItem):
              (WebCore::JSSVGPathSegList::insertItemBefore):
              (WebCore::JSSVGPathSegList::replaceItem):
              (WebCore::JSSVGPathSegList::removeItem):
              (WebCore::JSSVGPathSegList::appendItem):
              * bindings/js/JSSVGPointListCustom.cpp:
              * bindings/js/JSSVGTransformListCustom.cpp:
              * bindings/js/JSStorageCustom.cpp:
              * bindings/js/JSStyleSheetCustom.cpp:
              * bindings/js/JSStyleSheetListCustom.cpp:
              * bindings/js/JSTextCustom.cpp:
              * bindings/js/JSTreeWalkerCustom.cpp:
              * bindings/js/JSXMLHttpRequestConstructor.cpp:
              * bindings/js/JSXMLHttpRequestConstructor.h:
              (WebCore::JSXMLHttpRequestConstructor::classInfo):
              * bindings/js/JSXMLHttpRequestCustom.cpp:
              * bindings/js/JSXMLHttpRequestUploadCustom.cpp:
              * bindings/js/JSXSLTProcessorConstructor.cpp:
              * bindings/js/JSXSLTProcessorConstructor.h:
              (WebCore::JSXSLTProcessorConstructor::classInfo):
              * bindings/js/JSXSLTProcessorCustom.cpp:
              * bindings/js/ScheduledAction.cpp:
              * bindings/js/ScheduledAction.h:
              * bindings/js/ScriptController.cpp:
              (WebCore::ScriptController::attachDebugger):
              (WebCore::ScriptController::windowScriptNPObject):
              * bindings/js/ScriptController.h:
              * bindings/js/ScriptControllerGtk.cpp:
              (WebCore::ScriptController::createScriptInstanceForWidget):
              * bindings/js/ScriptControllerMac.mm:
              (WebCore::ScriptController::createScriptInstanceForWidget):
              (WebCore::ScriptController::windowScriptObject):
              (WebCore::ScriptController::clearPlatformScriptObjects):
              (WebCore::updateRenderingForBindings):
              (WebCore::ScriptController::initJavaJSBindings):
              * bindings/js/ScriptControllerQt.cpp:
              (WebCore::ScriptController::createScriptInstanceForWidget):
              * bindings/js/ScriptControllerWin.cpp:
              (WebCore::ScriptController::createScriptInstanceForWidget):
              * bindings/js/ScriptControllerWx.cpp:
              (WebCore::ScriptController::createScriptInstanceForWidget):
              * bindings/js/StringSourceProvider.h:
              (WebCore::StringSourceProvider::getRange):
              * bindings/objc/DOM.mm:
              (-[DOMNode JSC::Bindings::]):
              * bindings/objc/DOMInternal.h:
              * bindings/objc/DOMInternal.mm:
              (-[WebScriptObject _initializeScriptDOMNodeImp]):
              * bindings/objc/DOMUtility.mm:
              (JSC::createDOMWrapper):
              (WebCore::createDOMWrapper):
              * bindings/objc/WebScriptObject.mm:
              (WebCore::createJSWrapper):
              (-[WebScriptObject _initWithJSObject:JSC::originRootObject:JSC::Bindings::rootObject:JSC::Bindings::]):
              * bindings/objc/WebScriptObjectPrivate.h:
              * bindings/scripts/CodeGeneratorJS.pm:
              * bridge/NP_jsobject.cpp:
              * bridge/NP_jsobject.h:
              * bridge/c/c_class.cpp:
              * bridge/c/c_class.h:
              * bridge/c/c_instance.cpp:
              * bridge/c/c_instance.h:
              * bridge/c/c_runtime.cpp:
              * bridge/c/c_runtime.h:
              * bridge/c/c_utility.cpp:
              * bridge/c/c_utility.h:
              * bridge/jni/jni_class.cpp:
              * bridge/jni/jni_class.h:
              * bridge/jni/jni_instance.cpp:
              * bridge/jni/jni_instance.h:
              * bridge/jni/jni_jsobject.h:
              * bridge/jni/jni_jsobject.mm:
              (JavaJSObject::call):
              (JavaJSObject::convertJObjectToValue):
              * bridge/jni/jni_objc.mm:
              (JSC::Bindings::dispatchJNICall):
              * bridge/jni/jni_runtime.cpp:
              * bridge/jni/jni_runtime.h:
              * bridge/jni/jni_utility.cpp:
              * bridge/jni/jni_utility.h:
              * bridge/npruntime.cpp:
              (_NPN_GetStringIdentifier):
              * bridge/objc/WebScriptObject.h:
              * bridge/objc/objc_class.h:
              * bridge/objc/objc_class.mm:
              * bridge/objc/objc_instance.h:
              * bridge/objc/objc_instance.mm:
              * bridge/objc/objc_runtime.h:
              * bridge/objc/objc_runtime.mm:
              * bridge/objc/objc_utility.h:
              * bridge/objc/objc_utility.mm:
              * bridge/qt/qt_class.cpp:
              * bridge/qt/qt_class.h:
              * bridge/qt/qt_instance.cpp:
              * bridge/qt/qt_instance.h:
              * bridge/qt/qt_runtime.cpp:
              (JSC::Bindings::convertQVariantToValue):
              (JSC::Bindings::):
              * bridge/qt/qt_runtime.h:
              * bridge/runtime.cpp:
              * bridge/runtime.h:
              * bridge/runtime_array.cpp:
              * bridge/runtime_array.h:
              * bridge/runtime_method.cpp:
              * bridge/runtime_method.h:
              * bridge/runtime_object.cpp:
              * bridge/runtime_object.h:
              * bridge/runtime_root.cpp:
              (JSC::Bindings::RootObject::invalidate):
              (JSC::Bindings::RootObject::gcProtect):
              (JSC::Bindings::RootObject::gcUnprotect):
              * bridge/runtime_root.h:
              * bridge/testbindings.cpp:
              * bridge/testbindings.mm:
              * bridge/testqtbindings.cpp:
              * dom/Document.cpp:
              (WebCore::Document::~Document):
              * dom/NSResolver.h:
              * dom/Node.cpp:
              (WebCore::Node::setDocument):
              (WebCore::ResolveNamespaceFunctor::ResolveNamespaceFunctor):
              (WebCore::resolveNamespacesForSelector):
              (WebCore::Node::querySelector):
              (WebCore::Node::querySelectorAll):
              * dom/Node.h:
              * dom/NodeFilter.cpp:
              * dom/NodeFilter.h:
              * dom/NodeFilterCondition.cpp:
              * dom/NodeFilterCondition.h:
              * dom/NodeIterator.cpp:
              * dom/NodeIterator.h:
              * dom/Traversal.cpp:
              * dom/Traversal.h:
              * dom/TreeWalker.cpp:
              * dom/TreeWalker.h:
              * dom/make_names.pl:
              * history/CachedPage.cpp:
              * history/CachedPage.h:
              * html/HTMLPlugInElement.cpp:
              (WebCore::HTMLPlugInElement::getInstance):
              * html/HTMLPlugInElement.h:
              * loader/FrameLoader.cpp:
              * loader/FrameLoader.h:
              * loader/icon/IconDatabase.cpp:
              (WebCore::iconDatabase):
              * page/Console.cpp:
              * page/Console.h:
              * page/InspectorController.cpp:
              (WebCore::XMLHttpRequestResource::XMLHttpRequestResource):
              (WebCore::XMLHttpRequestResource::~XMLHttpRequestResource):
              (WebCore::InspectorResource::setXMLHttpRequestProperties):
              (WebCore::InspectorResource::sourceString):
              (WebCore::getResourceDocumentNode):
              (WebCore::search):
              (WebCore::InspectorController::focusNode):
              (WebCore::InspectorController::inspectedWindowScriptObjectCleared):
              (WebCore::InspectorController::addDatabaseScriptResource):
              (WebCore::InspectorController::resourceRetrievedByXMLHttpRequest):
              * page/InspectorController.h:
              (WebCore::InspectorController::profiles):
              * page/JavaScriptCallFrame.cpp:
              (WebCore::JavaScriptCallFrame::scopeChain):
              * page/JavaScriptCallFrame.h:
              (WebCore::JavaScriptCallFrame::create):
              (WebCore::JavaScriptCallFrame::update):
              * page/JavaScriptDebugListener.h:
              * page/JavaScriptDebugServer.cpp:
              (WebCore::dispatchDidParseSource):
              * page/JavaScriptDebugServer.h:
              * page/JavaScriptProfile.cpp:
              * page/JavaScriptProfile.h:
              * page/JavaScriptProfileNode.cpp:
              (WebCore::getTotalTime):
              (WebCore::getSelfTime):
              (WebCore::getTotalPercent):
              (WebCore::getSelfPercent):
              (WebCore::getNumberOfCalls):
              (WebCore::getChildren):
              (WebCore::getVisible):
              * page/JavaScriptProfileNode.h:
              * page/Page.cpp:
              (WebCore::Page::setDebuggerForAllPages):
              (WebCore::Page::setDebugger):
              * page/Page.h:
              (WebCore::Page::debugger):
              * page/mac/FrameMac.mm:
              * platform/KURL.h:
              (WebCore::KURL::operator JSC::UString):
              * platform/text/AtomicString.cpp:
              (WebCore::AtomicString::add):
              (WebCore::AtomicString::find):
              * platform/text/AtomicString.h:
              (WebCore::AtomicString::AtomicString):
              * platform/text/PlatformString.h:
              * platform/text/String.cpp:
              (WebCore::charactersToDouble):
              * platform/win/BString.cpp:
              * platform/win/BString.h:
              * plugins/MimeTypeArray.h:
              * plugins/Plugin.h:
              * plugins/PluginArray.h:
              * plugins/PluginView.cpp:
              (WebCore::PluginView::start):
              (WebCore::PluginView::performRequest):
              (WebCore::PluginView::bindingInstance):
              * plugins/PluginView.h:
              * plugins/gtk/PluginViewGtk.cpp:
              (WebCore::PluginView::paint):
              (WebCore::PluginView::handleKeyboardEvent):
              (WebCore::PluginView::handleMouseEvent):
              (WebCore::PluginView::setNPWindowRect):
              (WebCore::PluginView::stop):
              (WebCore::PluginView::init):
              * plugins/qt/PluginViewQt.cpp:
              (WebCore::PluginView::setNPWindowRect):
              (WebCore::PluginView::stop):
              (WebCore::PluginView::init):
              * plugins/win/PluginViewWin.cpp:
              (WebCore::PluginView::dispatchNPEvent):
              (WebCore::PluginView::handleKeyboardEvent):
              (WebCore::PluginView::handleMouseEvent):
              (WebCore::PluginView::setNPWindowRect):
              (WebCore::PluginView::stop):
              * storage/Database.cpp:
              (WebCore::Database::Database):
              * xml/XMLHttpRequest.cpp:
              (WebCore::XMLHttpRequest::responseText):
              (WebCore::XMLHttpRequest::loadRequestAsynchronously):
              (WebCore::XMLHttpRequest::clearResponse):
              (WebCore::XMLHttpRequest::dropProtection):
              (WebCore::XMLHttpRequest::didFinishLoading):
              (WebCore::XMLHttpRequest::didReceiveData):
              * xml/XMLHttpRequest.h:
      
              WebKit/gtk:
      
              * webkit/webkitprivate.cpp:
              (webkit_init):
      
              WebKit/mac:
      
              * Misc/WebCoreStatistics.mm:
              * Plugins/WebBaseNetscapePluginStream.mm:
              (-[WebBaseNetscapePluginStream wantsAllStreams]):
              * Plugins/WebBaseNetscapePluginView.mm:
              (-[WebBaseNetscapePluginView sendEvent:isDrawRect:]):
              (-[WebBaseNetscapePluginView setWindowIfNecessary]):
              (-[WebBaseNetscapePluginView start]):
              (-[WebBaseNetscapePluginView createPluginScriptableObject]):
              (-[WebBaseNetscapePluginView evaluateJavaScriptPluginRequest:]):
              (-[WebBaseNetscapePluginView webFrame:didFinishLoadWithReason:]):
              (-[WebBaseNetscapePluginView loadPluginRequest:]):
              (-[WebBaseNetscapePluginView _printedPluginBitmap]):
              * Plugins/WebPluginController.mm:
              (+[WebPluginController plugInViewWithArguments:fromPluginPackage:]):
              (-[WebPluginController startAllPlugins]):
              (-[WebPluginController stopAllPlugins]):
              (-[WebPluginController addPlugin:]):
              (-[WebPluginController destroyPlugin:]):
              (-[WebPluginController destroyAllPlugins]):
              * WebView/WebFrame.mm:
              * WebView/WebScriptDebugDelegate.mm:
              * WebView/WebScriptDebugger.h:
              * WebView/WebScriptDebugger.mm:
              * WebView/WebView.mm:
              (-[WebViewPrivate init]):
      
              WebKit/qt:
              
              * Api/qwebframe.cpp:
              (QWebFrame::addToJavaScriptWindowObject):
              (QWebFrame::evaluateJavaScript):
      
              WebKit/win:
      
              * WebCoreStatistics.cpp:
              * WebJavaScriptCollector.cpp:
              * WebScriptCallFrame.cpp:
              (WebScriptCallFrame::jsValueToString):
              * WebScriptCallFrame.h:
              (WebScriptCallFrame::state):
              * WebView.cpp:
              (WebView::WebView):
              (WebView::stringByEvaluatingJavaScriptFromString):
      
              WebKit/wx:
      
              * WebFrame.cpp:
              (wxWebFrame::RunScript):
      
      
      git-svn-id: http://svn.webkit.org/repository/webkit/trunk@36263 268f45cc-cd09-0410-ab3c-d52691b4dbfc
      3f782f6a
  7. 02 Sep, 2008 1 commit
    • ggaren@apple.com's avatar
      JavaScriptCore: · 8d8ff6a5
      ggaren@apple.com authored
      2008-09-02  Geoffrey Garen  <ggaren@apple.com>
      
              Reviewed by Sam Weinig.
              
              Implemented the rest of Darin's review comments for the 09-01 inline
              caching patch.
              
              SunSpider says 0.5% faster, but that seems like noise.
      
              * JavaScriptCore.xcodeproj/project.pbxproj: Put PutPropertySlot into
              its own file, and added BatchedTransitionOptimizer.
      
              * VM/CodeBlock.cpp:
              (KJS::CodeBlock::~CodeBlock): Use array indexing instead of a pointer
              iterator.
      
              * VM/CodeGenerator.cpp:
              (KJS::CodeGenerator::CodeGenerator): Used BatchedTransitionOptimizer to
              make batched put and remove for declared variables fast, without forever
              pessimizing the global object. Removed the old getDirect/removeDirect hack
              that tried to do the same in a more limited way.
      
              * VM/CodeGenerator.h: Moved IdentifierRepHash to the KJS namespace since
              it doesn't specialize anything in WTF.
      
              * VM/Machine.cpp:
              (KJS::Machine::Machine): Nixed the DummyConstruct tag because it was
              confusingly named.
      
              (KJS::Machine::execute):  Used BatchedTransitionOptimizer, as above. Fixed
              up some comments.
      
              (KJS::cachePrototypeChain): Cast to JSObject*, since it's more specific.
      
              (KJS::Machine::tryCachePutByID): Use isNull() instead of comparing to
              jsNull(), since isNull() leaves more options open for the future.
              (KJS::Machine::tryCacheGetByID): ditto
              (KJS::Machine::privateExecute): ditto
      
              * VM/SamplingTool.cpp:
              (KJS::SamplingTool::dump): Use C++-style cast, to match our style
              guidelines.
      
              * kjs/BatchedTransitionOptimizer.h: Added. New class that allows host
              code to add a batch of properties to an object in an efficient way.
      
              * kjs/JSActivation.cpp: Use isNull(), as above.
      
              * kjs/JSArray.cpp: Get rid of DummyConstruct tag, as above.
              * kjs/JSArray.h:
      
              * kjs/JSGlobalData.cpp: Nixed two unused StructureIDs.
              * kjs/JSGlobalData.h:
      
              * kjs/JSImmediate.cpp: Use isNull(), as above.
      
              * kjs/JSObject.cpp:
              (KJS::JSObject::mark): Moved mark tracing code elsewhere, to make this
              function more readable.
      
              (KJS::JSObject::put): Use isNull(), as above.
      
              (KJS::JSObject::createInheritorID): Return a raw pointer, since the
              object is owned by a data member, not necessarily the caller.
              * kjs/JSObject.h:
      
              * kjs/JSString.cpp: Use isNull(), as above.
      
              * kjs/PropertyMap.h: Updated to use PropertySlot::invalidOffset.
      
              * kjs/PropertySlot.h: Changed KJS_INVALID_OFFSET to WTF::notFound
              because C macros are so 80's.
      
              * kjs/PutPropertySlot.h: Added. Split out of PropertySlot.h. Also renamed
              PutPropertySlot::SlotType to PutPropertySlot::Type, and slotBase to base,
              since "slot" was redundant.
      
              * kjs/StructureID.cpp: Added a new transition *away* from dictionary
              status, to support BatchedTransitionOptimizer.
      
              (KJS::StructureIDChain::StructureIDChain): No need to store m_size as
              a data member, so keep it in a local, which might be faster.
              * kjs/StructureID.h:
      
              * kjs/SymbolTable.h: Moved IdentifierRepHash to KJS namespace, as above.
              * kjs/ustring.h:
      
      JavaScriptGlue:
      
      2008-09-02  Geoffrey Garen  <ggaren@apple.com>
      
              Reviewed by Sam Weinig.
              
              Implemented the rest of Darin's review comments for the 09-01 inline
              caching patch.
              
              * ForwardingHeaders/kjs/PutPropertySlot.h: Added.
      
      
      
      git-svn-id: http://svn.webkit.org/repository/webkit/trunk@36032 268f45cc-cd09-0410-ab3c-d52691b4dbfc
      8d8ff6a5
  8. 31 Aug, 2008 1 commit
    • darin@apple.com's avatar
      JavaScriptCore: · e794585e
      darin@apple.com authored
      2008-08-30  Darin Adler  <darin@apple.com>
      
              Reviewed by Maciej.
      
              - https://bugs.webkit.org/show_bug.cgi?id=20333
                improve JavaScript speed when handling single-character strings
      
              1.035x as fast on SunSpider overall.
              1.127x as fast on SunSpider string tests.
              1.910x as fast on SunSpider string-base64 test.
      
              * API/JSObjectRef.cpp:
              (JSObjectMakeFunction): Removed unneeded explicit construction of UString.
      
              * GNUmakefile.am: Added SmallStrings.h and SmallStrings.cpp.
              * JavaScriptCore.pri: Ditto.
              * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
              Ditto.
              * JavaScriptCore.xcodeproj/project.pbxproj: Ditto.
              * JavaScriptCoreSources.bkl: Ditto.
      
              * JavaScriptCore.exp: Updated.
      
              * VM/Machine.cpp:
              (KJS::jsAddSlowCase): Changed to use a code path that doesn't involve
              a UString constructor. This avoids an extra jump caused by the "in charge"
              vs. "not in charge" constructors.
              (KJS::jsAdd): Ditto.
              (KJS::jsTypeStringForValue): Adopted jsNontrivialString.
      
              * kjs/ArrayPrototype.cpp:
              (KJS::arrayProtoFuncToString): Adopted jsEmptyString.
              (KJS::arrayProtoFuncToLocaleString): Ditto.
              (KJS::arrayProtoFuncJoin): Ditto.
              * kjs/BooleanPrototype.cpp:
              (KJS::booleanProtoFuncToString): Adopted jsNontrivialString.
              * kjs/DateConstructor.cpp:
              (KJS::callDate): Ditto.
              * kjs/DatePrototype.cpp:
              (KJS::formatLocaleDate): Adopted jsEmptyString and jsNontrivialString.
              (KJS::dateProtoFuncToString): Ditto.
              (KJS::dateProtoFuncToUTCString): Ditto.
              (KJS::dateProtoFuncToDateString): Ditto.
              (KJS::dateProtoFuncToTimeString): Ditto.
              (KJS::dateProtoFuncToLocaleString): Ditto.
              (KJS::dateProtoFuncToLocaleDateString): Ditto.
              (KJS::dateProtoFuncToLocaleTimeString): Ditto.
              (KJS::dateProtoFuncToGMTString): Ditto.
      
              * kjs/ErrorPrototype.cpp:
              (KJS::ErrorPrototype::ErrorPrototype): Ditto.
              (KJS::errorProtoFuncToString): Ditto.
      
              * kjs/JSGlobalData.h: Added SmallStrings.
      
              * kjs/JSString.cpp:
              (KJS::jsString): Eliminated the overload that takes a const char*.
              Added code to use SmallStrings to get strings of small sizes rather
              than creating a new JSString every time.
              (KJS::jsSubstring): Added. Used when creating a string from a substring
              to avoid creating a JSString in cases where the substring will end up
              empty or as one character.
              (KJS::jsOwnedString): Added the same code as in jsString.
      
              * kjs/JSString.h: Added new functions jsEmptyString, jsSingleCharacterString,
              jsSingleCharacterSubstring, jsSubstring, and jsNontrivialString for various
              cases where we want to create JSString, and want special handling for small
              strings.
              (KJS::JSString::JSString): Added an overload that takes a PassRefPtr of
              a UString::Rep so you don't have to construct a UString; PassRefPtr can be
              more efficient.
              (KJS::jsEmptyString): Added.
              (KJS::jsSingleCharacterString): Added.
              (KJS::jsSingleCharacterSubstring): Added.
              (KJS::jsNontrivialString): Added.
              (KJS::JSString::getIndex): Adopted jsSingleCharacterSubstring.
              (KJS::JSString::getStringPropertySlot): Ditto.
      
              * kjs/NumberPrototype.cpp:
              (KJS::numberProtoFuncToFixed): Adopted jsNontrivialString.
              (KJS::numberProtoFuncToExponential): Ditto.
              (KJS::numberProtoFuncToPrecision): Ditto.
      
              * kjs/ObjectPrototype.cpp:
              (KJS::objectProtoFuncToLocaleString): Adopted toThisJSString.
              (KJS::objectProtoFuncToString): Adopted jsNontrivialString.
      
              * kjs/RegExpConstructor.cpp: Separated the lastInput value that's used
              with the lastOvector to return matches from the input value that can be
              changed via JavaScript. They will be equal in many cases, but not all.
              (KJS::RegExpConstructor::performMatch): Set input.
              (KJS::RegExpMatchesArray::RegExpMatchesArray): Ditto.
              (KJS::RegExpMatchesArray::fillArrayInstance): Adopted jsSubstring. Also,
              use input rather than lastInput in the appropriate place.
              (KJS::RegExpConstructor::getBackref): Adopted jsSubstring and jsEmptyString.
              Added code to handle the case where there is no backref -- before this
              depended on range checking in UString::substr which is not present in
              jsSubstring.
              (KJS::RegExpConstructor::getLastParen): Ditto.
              (KJS::RegExpConstructor::getLeftContext): Ditto.
              (KJS::RegExpConstructor::getRightContext): Ditto.
              (KJS::RegExpConstructor::getValueProperty): Use input rather than lastInput.
              Also adopt jsEmptyString.
              (KJS::RegExpConstructor::putValueProperty): Ditto.
              (KJS::RegExpConstructor::input): Ditto.
      
              * kjs/RegExpPrototype.cpp:
              (KJS::regExpProtoFuncToString): Adopt jsNonTrivialString. Also changed to
              use UString::append to append single characters rather than using += and
              a C-style string.
      
              * kjs/SmallStrings.cpp: Added.
              (KJS::SmallStringsStorage::SmallStringsStorage): Construct the
              buffer and UString::Rep for all 256 single-character strings for
              the U+0000 through U+00FF. This covers all the values used in
              the base64 test as well as most values seen elsewhere on the web
              as well. It's possible that later we might fix this to only work
              for U+0000 through U+007F but the others are used quite a bit in
              the current version of the base64 test.
              (KJS::SmallStringsStorage::~SmallStringsStorage): Free memory.
              (KJS::SmallStrings::SmallStrings): Create a set of small strings,
              initially not created; created later when they are used.
              (KJS::SmallStrings::~SmallStrings): Deallocate. Not left compiler
              generated because the SmallStringsStorage class's destructor needs
              to be visible.
              (KJS::SmallStrings::mark): Mark all the strings.
              (KJS::SmallStrings::createEmptyString): Create a cell for the
              empty string. Called only the first time.
              (KJS::SmallStrings::createSingleCharacterString): Create a cell
              for one of the single-character strings. Called only the first time.
              * kjs/SmallStrings.h: Added.
      
              * kjs/StringConstructor.cpp:
              (KJS::stringFromCharCodeSlowCase): Factored out of strinFromCharCode.
              Only used for cases where the caller does not pass exactly one argument.
              (KJS::stringFromCharCode): Adopted jsSingleCharacterString.
              (KJS::callStringConstructor): Adopted jsEmptyString.
      
              * kjs/StringObject.cpp:
              (KJS::StringObject::StringObject): Adopted jsEmptyString.
      
              * kjs/StringPrototype.cpp:
              (KJS::stringProtoFuncReplace): Adopted jsSubstring.
              (KJS::stringProtoFuncCharAt): Adopted jsEmptyString and
              jsSingleCharacterSubstring and also added a special case when the
              index is an immediate number to avoid conversion to and from floating
              point, since that's the common case.
              (KJS::stringProtoFuncCharCodeAt): Ditto.
              (KJS::stringProtoFuncMatch): Adopted jsSubstring and jsEmptyString.
              (KJS::stringProtoFuncSlice): Adopted jsSubstring and
              jsSingleCharacterSubstring. Also got rid of some unneeded locals and
              removed unneeded code to set the length property of the array, since it
              is automatically updated as values are added to the array.
              (KJS::stringProtoFuncSplit): Adopted jsEmptyString.
              (KJS::stringProtoFuncSubstr): Adopted jsSubstring.
              (KJS::stringProtoFuncSubstring): Ditto.
      
              * kjs/collector.cpp:
              (KJS::Heap::collect): Added a call to mark SmallStrings.
      
              * kjs/ustring.cpp:
              (KJS::UString::expandedSize): Made this a static member function since
              it doesn't need to look at any data members.
              (KJS::UString::expandCapacity): Use a non-inline function, makeNull, to
              set the rep to null in failure cases. This avoids adding a PIC branch for
              the normal case when there is no failure.
              (KJS::UString::expandPreCapacity): Ditto.
              (KJS::UString::UString): Ditto.
              (KJS::concatenate): Refactored the concatenation constructor into this
              separate function. Calling the concatenation constructor was leading to
              an extra branch because of the in-charge vs. not-in-charge versions not
              both being inlined, and this was showing up as nearly 1% on Shark. Also
              added a special case for when the second string is a single character,
              since it's a common idiom to build up a string that way and we can do
              things much more quickly, without involving memcpy for example. Also
              adopted the non-inline function, nullRep, for the same reason given for
              makeNull above.
              (KJS::UString::append): Adopted makeNull for failure cases.
              (KJS::UString::operator=): Ditto.
              (KJS::UString::toDouble): Added a special case for converting single
              character strings to numbers. We're doing this a ton of times while
              running the base64 test.
              (KJS::operator==): Added special cases so we can compare single-character
              strings without calling memcmp. Later we might want to special case other
              short lengths similarly.
              (KJS::UString::makeNull): Added.
              (KJS::UString::nullRep): Added.
              * kjs/ustring.h: Added declarations for the nullRep and makeNull. Changed
              expandedSize to be a static member function. Added a declaration of the
              concatenate function. Removed the concatenation constructor. Rewrote
              operator+ to use the concatenate function.
      
      WebCore:
      
      2008-08-30  Darin Adler  <darin@apple.com>
      
              Reviewed by Maciej.
      
              - adopt some new JavaScriptCore functions where appropriate
      
              * bindings/js/JSDOMWindowBase.cpp:
              (WebCore::windowProtoFuncAToB): Adopted jsEmptyString.
              (WebCore::windowProtoFuncBToA): Ditto.
              * bindings/js/JSEventListener.cpp:
              (WebCore::JSLazyEventListener::eventParameterName): Adopted
              jsNontrivialString.
              * bindings/js/JSSVGLazyEventListener.cpp:
              (WebCore::JSSVGLazyEventListener::eventParameterName): Ditto.
      
      LayoutTests:
      
      2008-08-30  Darin Adler  <darin@apple.com>
      
              Reviewed by Maciej.
      
              - updated incorrect results that reflected a bug in the RegExp object
      
              * fast/js/regexp-caching-expected.txt: Updated results to
              correctly show that $1 through $9, lastMatch, lastParen,
              leftContext, and rightContext are left alone both when
              a program changes the value of RegExp.input and when it
              performs an unsuccessful match. The new results match
              Gecko behavior (I tested both Firefox 2 and 3).
      
      
      
      git-svn-id: http://svn.webkit.org/repository/webkit/trunk@36006 268f45cc-cd09-0410-ab3c-d52691b4dbfc
      e794585e
  9. 18 Aug, 2008 1 commit
    • darin@apple.com's avatar
      JavaScriptCore: · 349e1eb0
      darin@apple.com authored
      2008-08-12  Darin Adler  <darin@apple.com>
      
              Reviewed by Geoff.
      
              - eliminate JSValue::type()
      
              This will make it slightly easier to change the JSImmediate design without
              having to touch so many call sites.
      
              SunSpider says this change is a wash (looked like a slight speedup, but not
              statistically significant).
      
              * API/JSStringRef.cpp: Removed include of JSType.h.
              * API/JSValueRef.cpp: Removed include of JSType.h.
              (JSValueGetType): Replaced use of JSValue::type() with
              JSValue::is functions.
      
              * JavaScriptCore.exp: Updated.
      
              * VM/JSPropertyNameIterator.cpp: Removed type() implementation.
              (KJS::JSPropertyNameIterator::toPrimitive): Changed to take
              PreferredPrimitiveType argument instead of JSType.
              * VM/JSPropertyNameIterator.h: Ditto.
      
              * VM/Machine.cpp:
              (KJS::fastIsNumber): Updated for name change.
              (KJS::fastToInt32): Ditto.
              (KJS::fastToUInt32): Ditto.
              (KJS::jsAddSlowCase): Updated toPrimitive caller for change from
              JSType to PreferredPrimitiveType.
              (KJS::jsAdd): Replaced calls to JSValue::type() with calls to
              JSValue::isString().
              (KJS::jsTypeStringForValue): Replaced calls to JSValue::type()
              with multiple calls to JSValue::is -- we could make this a
              virtual function instead if we want to have faster performance.
              (KJS::Machine::privateExecute): Renamed JSImmediate::toTruncatedUInt32
              to JSImmediate::getTruncatedUInt32 for consistency with other functions.
              Changed two calls of JSValue::type() to JSValue::isString().
      
              * kjs/GetterSetter.cpp:
              (KJS::GetterSetter::toPrimitive): Changed to take
              PreferredPrimitiveType argument instead of JSType.
              (KJS::GetterSetter::isGetterSetter): Added.
              * kjs/GetterSetter.h:
      
              * kjs/JSCell.cpp:
              (KJS::JSCell::isString): Added.
              (KJS::JSCell::isGetterSetter): Added.
              (KJS::JSCell::isObject): Added.
      
              * kjs/JSCell.h: Eliminated type function. Added isGetterSetter.
              Made isString and isObject virtual. Changed toPrimitive to take
              PreferredPrimitiveType argument instead of JSType.
              (KJS::JSCell::isNumber): Use Heap::isNumber for faster performance.
              (KJS::JSValue::isGetterSetter): Added.
              (KJS::JSValue::toPrimitive): Changed to take
              PreferredPrimitiveType argument instead of JSType.
      
              * kjs/JSImmediate.h: Removed JSValue::type() and replaced
              JSValue::toTruncatedUInt32 with JSValue::getTruncatedUInt32.
              (KJS::JSImmediate::isEitherImmediate): Added.
      
              * kjs/JSNotAnObject.cpp:
              (KJS::JSNotAnObject::toPrimitive): Changed to take
              PreferredPrimitiveType argument instead of JSType.
              * kjs/JSNotAnObject.h: Ditto.
              * kjs/JSNumberCell.cpp:
              (KJS::JSNumberCell::toPrimitive): Ditto.
              * kjs/JSNumberCell.h:
              (KJS::JSNumberCell::toInt32): Renamed from fastToInt32. There's no
              other "slow" version of this once you have a JSNumberCell, so there's
              no need for "fast" in the name. It's a feature that this hides the
              base class toInt32, which does the same job less efficiently (and has
              an additional ExecState argument).
              (KJS::JSNumberCell::toUInt32): Ditto.
      
              * kjs/JSObject.cpp:
              (KJS::callDefaultValueFunction): Use isGetterSetter instead of type.
              (KJS::JSObject::getPrimitiveNumber): Use PreferredPrimitiveType.
              (KJS::JSObject::defaultValue): Ditto.
              (KJS::JSObject::defineGetter): Use isGetterSetter.
              (KJS::JSObject::defineSetter): Ditto.
              (KJS::JSObject::lookupGetter): Ditto.
              (KJS::JSObject::lookupSetter): Ditto.
              (KJS::JSObject::toNumber): Use PreferredPrimitiveType.
              (KJS::JSObject::toString): Ditto.
              (KJS::JSObject::isObject): Added.
      
              * kjs/JSObject.h:
              (KJS::JSObject::inherits): Call the isObject from JSCell; it's now
              hidden by our override of isObject.
              (KJS::JSObject::getOwnPropertySlotForWrite): Use isGetterSetter
              instead of type.
              (KJS::JSObject::getOwnPropertySlot): Ditto.
              (KJS::JSObject::toPrimitive): Use PreferredPrimitiveType.
      
              * kjs/JSString.cpp:
              (KJS::JSString::toPrimitive): Use PreferredPrimitiveType.
              (KJS::JSString::isString): Added.
              * kjs/JSString.h: Ditto.
      
              * kjs/JSValue.h: Removed type(), added isGetterSetter(). Added
              PreferredPrimitiveType enum and used it as the argument for the
              toPrimitive function.
              (KJS::JSValue::getBoolean): Simplified a bit an removed a branch.
      
              * kjs/collector.cpp:
              (KJS::typeName): Changed to use JSCell::is functions instead of
              calling JSCell::type.
      
              * kjs/collector.h:
              (KJS::Heap::isNumber): Renamed from fastIsNumber.
      
              * kjs/nodes.h: Added now-needed include of JSType, since the type
              is used here to record types of values in the tree.
      
              * kjs/operations.cpp:
              (KJS::equal): Rewrote to no longer depend on type().
              (KJS::strictEqual): Ditto.
      
      JavaScriptGlue:
      
      2008-08-12  Darin Adler  <darin@apple.com>
      
              Reviewed by Geoff.
      
              - eliminate JSValue::type()
      
              * JSUtils.cpp:
              (KJSValueToCFTypeInternal): Replaced uses of JSValue::type() with
              JSValue::is functions.
              * UserObjectImp.cpp:
              (UserObjectImp::getOwnPropertySlot): Ditto.
              (UserObjectImp::toPrimitive): Take PreferredPrimitiveType argument
              instead of JSType argument.
              * UserObjectImp.h: Ditto.
      
      WebCore:
      
      2008-08-12  Darin Adler  <darin@apple.com>
      
              Reviewed by Geoff.
      
              - eliminate JSValue::type()
      
              * bridge/c/c_instance.cpp:
              (KJS::Bindings::CInstance::defaultValue): Take PreferredPrimitiveType
              argument instead of JSType argument. Removed unneeded code to handle
              boolean, since that's never passed.
              * bridge/c/c_instance.h: Ditto.
      
              * bridge/c/c_utility.cpp:
              (KJS::Bindings::convertValueToNPVariant): Use JSValue::is functions
              instead of JSValue::type(). Removed unneeded code to handle
              "unspecified".
      
              * bridge/jni/jni_instance.cpp:
              (JavaInstance::defaultValue): Take PreferredPrimitiveType argument
              instead of JSType argument. Removed unneeded code to handle boolean.
              * bridge/jni/jni_instance.h: Ditto.
      
              * bridge/jni/jni_jsobject.mm:
              (JavaJSObject::convertValueToJObject): Use JSValue::is functions
              instead of JSValue::type().
      
              * bridge/objc/objc_instance.h: Take PreferredPrimitiveType argument
              instead of JSType argument. Removed unused argument.
              * bridge/objc/objc_instance.mm:
              (ObjcInstance::getValueOfUndefinedField): Removed unused argument.
              (ObjcInstance::defaultValue): Take PreferredPrimitiveType argument
              instead of JSType argument. Removed unneeded code to handle boolean
              and another dead code path for unknown types.
      
              * bridge/objc/objc_runtime.h: Take PreferredPrimitiveType argument
              instead of JSType argument. Removed override of type() that caused
              the fallback object to return "UndefinedType" when there is no
              invokeUndefinedMethodFromWebScript:withArguments: method defined.
              That didn't accomplish much, since most checks for undefined don't
              ever call type().
              * bridge/objc/objc_runtime.mm:
              (ObjcFallbackObjectImp::defaultValue): Ditto.
      
              * bridge/qt/qt_instance.cpp:
              (KJS::Bindings::QtInstance::defaultValue): Take PreferredPrimitiveType
              argument instead of JSType argument. Removed unneeded code to handle
              boolean.
              * bridge/qt/qt_instance.h: Ditto.
      
              * bridge/runtime.h:
              (KJS::Bindings::Instance::getValueOfUndefinedField): Removed
              unsed argument.
              * bridge/runtime_object.cpp:
              (RuntimeObjectImp::defaultValue): Take PreferredPrimitiveType
              argument instead of JSType argument.
              * bridge/runtime_object.h: Ditto.
      
      WebKit/mac:
      
      2008-08-12  Darin Adler  <darin@apple.com>
      
              Reviewed by Geoff.
      
              - eliminate JSValue::type()
      
              * WebView/WebView.mm:
              (aeDescFromJSValue): Rewrite to use the JSValue::is functions instead
              of a switch on JSValue::type().
      
      LayoutTests:
      
      2008-08-12  Darin Adler  <darin@apple.com>
      
              Reviewed by Geoff.
      
              - added a test since I had to rewrite the == and === operators
      
              * fast/js/equality-expected.txt: Added.
              * fast/js/equality.html: Added.
              * fast/js/resources/equality.js: Added.
      
      
      
      git-svn-id: http://svn.webkit.org/repository/webkit/trunk@35830 268f45cc-cd09-0410-ab3c-d52691b4dbfc
      349e1eb0
  10. 17 Aug, 2008 1 commit
    • ggaren@apple.com's avatar
      2007-08-16 Geoffrey Garen <ggaren@apple.com> · 64fa293b
      ggaren@apple.com authored
              Reviewed by Oliver Hunt.
              
              Sped up property access for array.length and string.length by adding a
              mechanism for returning a temporary value directly instead of returning
              a pointer to a function that retrieves the value.
              
              Also removed some unused cruft from PropertySlot.
              
              SunSpider says 0.5% - 1.2% faster.
      
              NOTE: This optimization is not a good idea in general, because it's
              actually a pessimization in the case of resolve for assignment,
              and it may get in the way of other optimizations in the future.
      
      
      
      git-svn-id: http://svn.webkit.org/repository/webkit/trunk@35806 268f45cc-cd09-0410-ab3c-d52691b4dbfc
      64fa293b
  11. 06 Jul, 2008 1 commit
    • weinig@apple.com's avatar
      JavaScriptCore: · 2947a916
      weinig@apple.com authored
      2008-07-06  Sam Weinig  <sam@webkit.org>
      
              Reviewed by Cameron Zwarich.
      
              Second step in broad cleanup effort.
      
              [ File list elided ]
      
      WebCore:
      
      2008-07-06  Sam Weinig  <sam@webkit.org>
      
              Reviewed by Cameron Zwarich.
      
              Add #include for kjs/protect.h.
      
              * xml/XMLHttpRequest.cpp:
              (WebCore::XMLHttpRequest::loadRequestAsynchronously):
      
      
      
      git-svn-id: http://svn.webkit.org/repository/webkit/trunk@35027 268f45cc-cd09-0410-ab3c-d52691b4dbfc
      2947a916
  12. 01 Jul, 2008 1 commit
    • weinig@apple.com's avatar
      JavaScriptCore: · 6a03b4c4
      weinig@apple.com authored
      2008-07-01  Sam Weinig  <sam@webkit.org>
      
              Reviewed by Darin Adler.
      
              Split JSCell and JSNumberCell class declarations out of JSValue.h
      
              * GNUmakefile.am:
              * JavaScriptCore.pri:
              * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
              * JavaScriptCore.xcodeproj/project.pbxproj:
              * JavaScriptCoreSources.bkl:
              * VM/JSPropertyNameIterator.h:
              * kjs/AllInOneFile.cpp:
              * kjs/JSCell.cpp: Copied from JavaScriptCore/kjs/JSValue.cpp.
              * kjs/JSCell.h: Copied from JavaScriptCore/kjs/JSValue.h.
              (KJS::JSValue::getJSNumber):
              * kjs/JSNumberCell.cpp:
              * kjs/JSNumberCell.h: Copied from JavaScriptCore/kjs/JSValue.h.
              * kjs/JSObject.h:
              * kjs/JSString.cpp:
              (KJS::jsString):
              (KJS::jsOwnedString):
              * kjs/JSString.h:
              (KJS::JSValue::toThisJSString):
              * kjs/JSValue.cpp:
              * kjs/JSValue.h:
      
      WebCore:
      
      2008-07-01  Sam Weinig  <sam@webkit.org>
      
              Reviewed by Darin Adler.
      
              Split JSCell and JSNumberCell class declarations out of JSValue.h
      
              * ForwardingHeaders/kjs/JSNumberCell.h: Added.
              * bindings/scripts/CodeGeneratorJS.pm:
              * bridge/c/c_instance.cpp:
      
      
      
      git-svn-id: http://svn.webkit.org/repository/webkit/trunk@34921 268f45cc-cd09-0410-ab3c-d52691b4dbfc
      6a03b4c4
  13. 30 Jun, 2008 1 commit
    • weinig@apple.com's avatar
      2008-06-30 Sam Weinig <sam@webkit.org> · efdce0f9
      weinig@apple.com authored
              Rubber-stamped by Darin Adler.
      
              Remove internal.cpp and move its contents to there own .cpp files.
      
              * GNUmakefile.am:
              * JavaScriptCore.pri:
              * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
              * JavaScriptCore.xcodeproj/project.pbxproj:
              * JavaScriptCoreSources.bkl:
              * kjs/AllInOneFile.cpp:
              * kjs/GetterSetter.cpp: Copied from kjs/internal.cpp.
              * kjs/InternalFunction.cpp: Copied from kjs/internal.cpp.
              * kjs/JSNumberCell.cpp: Copied from kjs/internal.cpp.
              * kjs/JSString.cpp: Copied from kjs/internal.cpp.
              * kjs/JSString.h:
              * kjs/LabelStack.cpp: Copied from kjs/internal.cpp.
              * kjs/NumberConstructor.cpp:
              * kjs/NumberObject.cpp:
              (KJS::constructNumber):
              (KJS::constructNumberFromImmediateNumber):
              * kjs/internal.cpp: Removed.
      
      
      
      git-svn-id: http://svn.webkit.org/repository/webkit/trunk@34893 268f45cc-cd09-0410-ab3c-d52691b4dbfc
      efdce0f9