1. 20 Nov, 2002 8 commits
    • mjs's avatar
      * kjs/collector.cpp: · 4debf737
      mjs authored
              (Collector::allocate): Clear the flags on newly allocated objects.
      
      
      git-svn-id: http://svn.webkit.org/repository/webkit/trunk@2788 268f45cc-cd09-0410-ab3c-d52691b4dbfc
      4debf737
    • darin's avatar
      - oops, checked in big regression instead of 5% speedup · 1a208841
      darin authored
              * kjs/function.cpp: (ActivationImp::ActivationImp): Make a marking
      	list, not a refing list.
      
      	- a cut at the sparse array implementation
      
              * kjs/array_instance.h: Keep storageLength separate from length.
              * kjs/array_object.cpp:
              (ArrayInstanceImp::ArrayInstanceImp): Start with storageLength == length.
              (ArrayInstanceImp::get): Check against storage length.
              (ArrayInstanceImp::put): Ditto.
              (ArrayInstanceImp::hasProperty): Ditto.
              (ArrayInstanceImp::deleteProperty): Ditto.
              (ArrayInstanceImp::setLength): Only enlarge storage length up to a cutoff.
              (ArrayInstanceImp::mark): Use storageLength.
              (ArrayInstanceImp::pushUndefinedObjectsToEnd): Added FIXME.
      
      
      git-svn-id: http://svn.webkit.org/repository/webkit/trunk@2786 268f45cc-cd09-0410-ab3c-d52691b4dbfc
      1a208841
    • darin's avatar
      - decrease ref/deref -- 5% speedup in iBench · c758b286
      darin authored
              * JavaScriptCore.pbproj/project.pbxproj: Added array_instance.h
              * kjs/array_instance.h: Added so it can be shared by function.h.
      
              * kjs/array_object.cpp:
              * kjs/array_object.h:
              * kjs/bool_object.cpp:
              * kjs/bool_object.h:
              * kjs/collector.cpp:
              * kjs/date_object.cpp:
              * kjs/date_object.h:
              * kjs/error_object.cpp:
              * kjs/function.cpp:
              * kjs/function.h:
              * kjs/function_object.cpp:
              * kjs/internal.cpp:
              * kjs/internal.h:
              * kjs/math_object.cpp:
              * kjs/nodes.cpp:
              * kjs/number_object.cpp:
              * kjs/object.cpp:
              * kjs/object.h:
              * kjs/object_object.cpp:
              * kjs/property_map.cpp:
              * kjs/reference.cpp:
              * kjs/reference.h:
              * kjs/regexp_object.cpp:
              * kjs/string_object.cpp:
              * kjs/string_object.h:
              * kjs/value.cpp:
              * kjs/value.h:
      	Switched lots of interfaces so they don't require ref/deref.
      
      
      git-svn-id: http://svn.webkit.org/repository/webkit/trunk@2783 268f45cc-cd09-0410-ab3c-d52691b4dbfc
      c758b286
    • mjs's avatar
      Fixed the two most obvious problems with the new GC for another 6% · 3d0d1816
      mjs authored
      	improvement.
      
              * kjs/collector.cpp:
              (Collector::allocate): Don't bother doing the bit tests on a bitmap word if
      	all it's bits are on.
              (Collector::collect): Track memoryFull boolean.
              * kjs/collector.h: Inlined outOfMemory since it was showing up on profiles.
      
      
      git-svn-id: http://svn.webkit.org/repository/webkit/trunk@2781 268f45cc-cd09-0410-ab3c-d52691b4dbfc
      3d0d1816
    • mjs's avatar
      JavaScriptCore: · 6d32b07d
      mjs authored
      	Rewrote garbage collector to make blocks of actual memory instead
      	of blocks of pointers. 7% improvement on JavaScript
      	iBench. There's still lots of room to tune the new GC, this is
      	just my first cut.
      
              * kjs/collector.cpp:
              (Collector::allocate):
              (Collector::collect):
              (Collector::size):
              (Collector::outOfMemory):
              (Collector::finalCheck):
              (Collector::numGCNotAllowedObjects):
              (Collector::numReferencedObjects):
              (Collector::liveObjectClasses):
              * kjs/collector.h:
              * kjs/function.cpp:
              (ActivationImp::ActivationImp):
              * kjs/function.h:
      
      WebCore:
      
              * force-js-clean-timestamp: Work around PB lameness yet again.
      
      
      git-svn-id: http://svn.webkit.org/repository/webkit/trunk@2779 268f45cc-cd09-0410-ab3c-d52691b4dbfc
      6d32b07d
    • darin's avatar
      - on the road to killing ActivationImp · 0210a252
      darin authored
              * kjs/function.h: Add get/put to FunctionImp. Remove argumentsObject() from
      	ActivationImp. Add function() to ActivationImp.
              * kjs/function.cpp:
              (FunctionImp::FunctionImp): No arguments property.
              (FunctionImp::call): No need to set up the arguments property.
              (FunctionImp::parameterString): Remove ** strangeness.
              (FunctionImp::processParameters): Ditto.
              (FunctionImp::get): Added, handles arguments and length properties.
              (FunctionImp::put): Ditto.
              (FunctionImp::hasProperty): Ditto.
              (FunctionImp::deleteProperty): Ditto.
              (ActivationImp::ActivationImp): Store a function pointer so we can find it
      	in the context.
      
              * kjs/function_object.cpp: (FunctionObjectImp::construct): No need to set up
      	arguments property.
              * kjs/nodes.cpp: (FuncExprNode::evaluate): No need to set up length property.
      
              * kjs/internal.h: Return ObjectImp * for activation object.
      
              * kjs/interpreter.h: Remove stray declaration of ExecStateImp.
      
      
      git-svn-id: http://svn.webkit.org/repository/webkit/trunk@2778 268f45cc-cd09-0410-ab3c-d52691b4dbfc
      0210a252
    • darin's avatar
      - add a couple of list operations to avoid clearing lists so much during... · f7fc08d7
      darin authored
      	- add a couple of list operations to avoid clearing lists so much during sorting; gives 1.5% iBench
      
              * kjs/types.h: Added replaceFirst/replaceLast.
              * kjs/types.cpp: (List::replaceFirst), (List::replaceLast): Added.
      
              * kjs/array_object.cpp: (compareWithCompareFunctionForQSort): Use replaceFirst/replaceLast.
      
              * kjs/property_map.cpp: Put in an ifdef so I can re-add/remove the single entry to see if
      	it has outlived its usefulness. (It hasn't yet.)
      
      
      git-svn-id: http://svn.webkit.org/repository/webkit/trunk@2777 268f45cc-cd09-0410-ab3c-d52691b4dbfc
      f7fc08d7
    • darin's avatar
      - atomic identifiers; gives another 6.5% in the iBench suite · 302759c8
      darin authored
              * kjs/identifier.h: Did the real thing.
              * kjs/identifier.cpp: Ditto.
      
              * kjs/property_map.h: _tableSizeHashMask -> _tableSizeMask
              * kjs/property_map.cpp: The above, plus take advantage of comparing
      	by pointer instead of by comparing bytes.
      
      
      git-svn-id: http://svn.webkit.org/repository/webkit/trunk@2776 268f45cc-cd09-0410-ab3c-d52691b4dbfc
      302759c8
  2. 19 Nov, 2002 11 commits
    • darin's avatar
      - a few more globals for often-used property names · 55be9897
      darin authored
      	- conversion to Identifier from UString must now be explicit
      
              * kjs/error_object.cpp:
              * kjs/function.cpp:
              * kjs/function_object.cpp:
              * kjs/identifier.cpp:
              * kjs/identifier.h:
              * kjs/lexer.cpp:
              * kjs/nodes.cpp:
              * kjs/number_object.cpp:
              * kjs/object.cpp:
              * kjs/object.h:
              * kjs/string_object.cpp:
              * kjs/testkjs.cpp:
              * kjs/ustring.cpp:
              * kjs/ustring.h:
      
      
      git-svn-id: http://svn.webkit.org/repository/webkit/trunk@2772 268f45cc-cd09-0410-ab3c-d52691b4dbfc
      55be9897
    • darin's avatar
      - another step towards atomic identifiers; storing hash in the string rep. gives about · 5721aa9d
      darin authored
      	a 1.5% speedup in the JavaScript iBench
      
              * kjs/ustring.h: Add a hash field to UString::Rep.
              * kjs/ustring.cpp:
              (UString::Rep::create): Set hash to uninitialized value.
              (UString::Rep::destroy): Do the deleting in her, and call Identifier if needed.
              (UString::Rep::computeHash): Added.
              (UString::append): Set hash to 0 when modifying the string in place.
              (UString::operator=): Ditto.
      
              * kjs/property_map.cpp: Use the hash from UString.
      
              * kjs/identifier.h: Added aboutToDestroyUStringRep.
              * kjs/identifier.cpp: (Identifier::aboutToDestroyUStringRep): Added.
      
      
      git-svn-id: http://svn.webkit.org/repository/webkit/trunk@2769 268f45cc-cd09-0410-ab3c-d52691b4dbfc
      5721aa9d
    • darin's avatar
      JavaScriptCore: · d0ba328e
      darin authored
      	- next step towards atomic identifiers; Identifier is no longer derived from UString
      
              * kjs/identifier.h: Remove base class and add _ustring member.
              * kjs/identifier.cpp: Add null and an == that works with const char *.
              * kjs/property_map.cpp: Get rep through _ustring.
      
              * kjs/function.cpp: (FunctionImp::parameterString): Call ustring().
              * kjs/function_object.cpp: (FunctionProtoFuncImp::call): Ditto.
              * kjs/nodes.cpp:
              (PropertyNode::evaluate): Ditto.
              (VarDeclNode::evaluate): Ditto.
              (ForInNode::execute): Ditto.
              * kjs/nodes2string.cpp: (SourceStream::operator<<): Add overload for Identifier.
              * kjs/reference.cpp: (Reference::getValue): Call ustring().
              * kjs/regexp_object.cpp: (RegExpObjectImp::get): Call ustring().
      
      WebCore:
      
      	- next step towards atomic identifiers; Identifier is no longer derived from UString
      
              * khtml/ecma/kjs_binding.cpp:
              (Identifier::string): Added.
              (Identifier::qstring): Added.
      
              * khtml/ecma/kjs_binding.h:
              * khtml/ecma/kjs_css.cpp:
              (jsNameToProp):
              (DOMCSSStyleDeclaration::tryPut):
              (DOMStyleSheet::tryPut):
              (DOMStyleSheetList::tryGet):
              (DOMMediaList::tryGet):
              (DOMCSSRuleList::tryGet):
              (DOMCSSValueList::tryGet):
              * khtml/ecma/kjs_dom.cpp:
              (DOMNodeList::hasProperty):
              (DOMNodeList::tryGet):
              (DOMNodeListFunc::DOMNodeListFunc):
              (DOMElement::tryGet):
              (DOMNamedNodeMap::hasProperty):
              (DOMNamedNodeMap::tryGet):
              (DOMNamedNodesCollection::tryGet):
              * khtml/ecma/kjs_html.cpp:
              (KJS::HTMLDocument::tryGet):
              (HTMLElementFunction::HTMLElementFunction):
              (KJS::HTMLElement::putValue):
              (KJS::HTMLCollection::hasProperty):
              (KJS::HTMLCollection::tryGet):
              (KJS::HTMLSelectCollection::tryPut):
              (OptionConstructorImp::OptionConstructorImp):
              * khtml/ecma/kjs_navigator.cpp:
              (Plugins::get):
              (MimeTypes::get):
              (Plugin::get):
              * khtml/ecma/kjs_window.cpp:
              (WindowFunc::tryCall):
              (FrameArray::get):
      	Use lengthPropertyName instead of "length" for better speed.
      
      
      git-svn-id: http://svn.webkit.org/repository/webkit/trunk@2766 268f45cc-cd09-0410-ab3c-d52691b4dbfc
      d0ba328e
    • darin's avatar
      - fixed memory trasher · ff56afa0
      darin authored
              * kjs/ustring.cpp: (UString::from): Fix "end of buffer" computation.
      
      
      git-svn-id: http://svn.webkit.org/repository/webkit/trunk@2762 268f45cc-cd09-0410-ab3c-d52691b4dbfc
      ff56afa0
    • darin's avatar
      JavaScriptCore: · 880105d6
      darin authored
      	- a first step towards atomic identifiers in JavaScript
      
      	Most places that work with identifiers now use Identifier
      	instead of UString.
      
              * kjs/identifier.cpp: Added.
              * kjs/identifier.h: Added.
              * JavaScriptCore.pbproj/project.pbxproj: Added files.
      
              * kjs/array_object.cpp:
              * kjs/array_object.h:
              * kjs/completion.cpp:
              * kjs/completion.h:
              * kjs/date_object.cpp:
              * kjs/date_object.h:
              * kjs/function.cpp:
              * kjs/function.h:
              * kjs/function_object.cpp:
              * kjs/grammar.cpp:
              * kjs/grammar.cpp.h:
              * kjs/grammar.h:
              * kjs/grammar.y:
              * kjs/internal.cpp:
              * kjs/internal.h:
              * kjs/lexer.cpp:
              * kjs/lookup.cpp:
              * kjs/lookup.h:
              * kjs/math_object.cpp:
              * kjs/math_object.h:
              * kjs/nodes.cpp:
              * kjs/nodes.h:
              * kjs/number_object.cpp:
              * kjs/number_object.h:
              * kjs/object.cpp:
              * kjs/object.h:
              * kjs/property_map.cpp:
              * kjs/property_map.h:
              * kjs/reference.cpp:
              * kjs/reference.h:
              * kjs/regexp_object.cpp:
              * kjs/regexp_object.h:
              * kjs/string_object.cpp:
              * kjs/string_object.h:
      
      WebCore:
      
      	- a first step towards atomic identifiers in JavaScript
      
      	Most places that work with identifiers now use Identifier
      	instead of UString.
      
              * khtml/ecma/kjs_binding.cpp:
              * khtml/ecma/kjs_binding.h:
              * khtml/ecma/kjs_css.cpp:
              * khtml/ecma/kjs_css.h:
              * khtml/ecma/kjs_dom.cpp:
              * khtml/ecma/kjs_dom.h:
              * khtml/ecma/kjs_events.cpp:
              * khtml/ecma/kjs_events.h:
              * khtml/ecma/kjs_html.cpp:
              * khtml/ecma/kjs_html.h:
              * khtml/ecma/kjs_navigator.cpp:
              * khtml/ecma/kjs_navigator.h:
              * khtml/ecma/kjs_range.cpp:
              * khtml/ecma/kjs_range.h:
              * khtml/ecma/kjs_traversal.cpp:
              * khtml/ecma/kjs_traversal.h:
              * khtml/ecma/kjs_views.cpp:
              * khtml/ecma/kjs_views.h:
              * khtml/ecma/kjs_window.cpp:
              * khtml/ecma/kjs_window.h:
      
      
      git-svn-id: http://svn.webkit.org/repository/webkit/trunk@2760 268f45cc-cd09-0410-ab3c-d52691b4dbfc
      880105d6
    • darin's avatar
      - fix hash function and key comparison for the other kind of hash table; yields 3% · 091be39c
      darin authored
              * kjs/lookup.cpp:
              (keysMatch): Added.
              (Lookup::findEntry): Don't allocate and convert to ASCII just to search.
      
      
      git-svn-id: http://svn.webkit.org/repository/webkit/trunk@2758 268f45cc-cd09-0410-ab3c-d52691b4dbfc
      091be39c
    • darin's avatar
      - another hash table fix; yields a 2% improvement on iBench JavaScript · 8091bedc
      darin authored
              * kjs/property_map.cpp: A few more places where we use & instead of %.
      
      	- some List changes that don't affect speed yet
      
              * kjs/types.cpp:
              (List::prependList): Tighten up a tiny bit.
              (List::copy): Use prependList.
              * kjs/types.h: Remove appendList and globalClear.
      
              * kjs/interpreter.cpp: (Interpreter::finalCheck): Remove List::globalClear().
      
      
      git-svn-id: http://svn.webkit.org/repository/webkit/trunk@2757 268f45cc-cd09-0410-ab3c-d52691b4dbfc
      8091bedc
    • darin's avatar
      - fixed 3105026 -- REGRESSION: DHTML menus are broken all over the place · 8943db9c
      darin authored
              * kjs/types.cpp: (List::prepend): Fix backwards links in new node.
      
      
      git-svn-id: http://svn.webkit.org/repository/webkit/trunk@2756 268f45cc-cd09-0410-ab3c-d52691b4dbfc
      8943db9c
    • darin's avatar
      - a fix that gives another 1.5% on the iBench JavaScript test · 451d435e
      darin authored
              * kjs/ustring.cpp: (UString::from): Stop using sprintf to format integers.
      
      
      git-svn-id: http://svn.webkit.org/repository/webkit/trunk@2754 268f45cc-cd09-0410-ab3c-d52691b4dbfc
      451d435e
    • darin's avatar
      JavaScriptCore: · 66092a36
      darin authored
      	- reduced the creation of Value objects and hoisted the property map
              into Object for another gain of about 6%
      
              * JavaScriptCore.pbproj/project.pbxproj: Made property_map.h public.
              * kjs/array_object.cpp:
              (compareWithCompareFunctionForQSort): Don't wrap the ValueImp * in a Value
      	just to add it to a list.
              (ArrayProtoFuncImp::call): Pass the globalObject directly so we don't have
      	to ref/deref.
              * kjs/function.cpp:
              (FunctionImp::call): Use a reference for the global object to avoid ref/deref.
              (GlobalFuncImp::call): Ditto.
              * kjs/internal.cpp:
              (BooleanImp::toObject): Put the object directly into the list, don't create a Value.
              (StringImp::toObject): Ditto.
              (NumberImp::toObject): Ditto.
              (InterpreterImp::evaluate): Use a reference for the global object.
              * kjs/internal.h: Return a reference for the global object.
              * kjs/interpreter.cpp: (Interpreter::globalObject): Ditto.
              * kjs/interpreter.h: Ditto.
              * kjs/object.cpp: Use _prop directly in the object, not a separate pointer.
              * kjs/object.h: Ditto.
              * kjs/types.cpp: Added List methods that work directly with ValueImp.
              (List::append): Added a ValueImp version.
              (List::prepend): Ditto.
              (List::appendList): Work directly with the ValueImp's.
              (List::prependList): Ditto.
              (List::copy): Use appendList.
              (List::empty): Use a shared global List.
              * kjs/types.h: Update for above changes.
      
      WebCore:
      
              * force-js-clean-timestamp: Another Object change.
      
      
      git-svn-id: http://svn.webkit.org/repository/webkit/trunk@2753 268f45cc-cd09-0410-ab3c-d52691b4dbfc
      66092a36
    • darin's avatar
      * kjs/property_map.cpp: Oops, copyright goes to Apple, not me. · f1fce4bd
      darin authored
              * kjs/property_map.h: Ditto.
      
      
      git-svn-id: http://svn.webkit.org/repository/webkit/trunk@2751 268f45cc-cd09-0410-ab3c-d52691b4dbfc
      f1fce4bd
  3. 18 Nov, 2002 9 commits
    • darin's avatar
      - property and string improvements giving a 7% or so improvement in JavaScript iBench · a6cae2cc
      darin authored
              * kjs/property_map.h: Rewrite to use a hash table.
              * kjs/property_map.cpp: Ditto.
      
              * kjs/string_object.h:
              * kjs/string_object.cpp:
              (StringInstanceImp::StringInstanceImp): Construct a string with the right value
      	instead of putting the string in later.
              (StringInstanceImp::get): Get the length from the string, not a separate property.
              (StringInstanceImp::put): Ignore attempts to set length, since we don't put it in
      	the property map.
              (StringInstanceImp::hasProperty): Return true for length.
              (StringInstanceImp::deleteProperty): Return false for length.
              (StringObjectImp::construct): Call new StringInstanceImp constructor. Don't try
      	to set a length property.
      
              * kjs/ustring.h: Make the rep deref know how to deallocate the rep.
              * kjs/ustring.cpp:
              (UString::release): Move the real work to the rep's deref, since the hash table
      	now uses the rep directly.
      
              * kjs/object.h: Remove unused field.
      
      
      git-svn-id: http://svn.webkit.org/repository/webkit/trunk@2749 268f45cc-cd09-0410-ab3c-d52691b4dbfc
      a6cae2cc
    • mjs's avatar
      Change List to completely avoid going through the GC · 1e8f66ff
      mjs authored
      	allocator. 3.6% performance improvement on JavaScript iBench.
      
              * kjs/internal.cpp:
              (InterpreterImp::mark): Don't mark the empty list.
      
      	For all the methods below I basically lifted the ListImp version
      	up to the List method with minor tweaks.
      
              * kjs/types.cpp:
              (ListIterator::ListIterator):
              (List::List):
              (List::operator=):
              (List::~List):
              (List::mark):
              (List::append):
              (List::prepend):
              (List::appendList):
              (List::prependList):
              (List::removeFirst):
              (List::removeLast):
              (List::remove):
              (List::clear):
              (List::clearInternal):
              (List::copy):
              (List::begin):
              (List::end):
              (List::isEmpty):
              (List::size):
              (List::at):
              (List::operator[]):
              (List::empty):
              (List::erase):
              (List::refAll):
              (List::derefAll):
              (List::swap):
              (List::globalClear):
              * kjs/types.h:
      
      
      git-svn-id: http://svn.webkit.org/repository/webkit/trunk@2748 268f45cc-cd09-0410-ab3c-d52691b4dbfc
      1e8f66ff
    • mjs's avatar
      Fixed a horrible leak introduced with my last change that · 6e9d9853
      mjs authored
      	somehow did not show up on my machine.
      
              * kjs/types.cpp:
              (List::List): Mark ListImp as GC allowed.
      
      
      git-svn-id: http://svn.webkit.org/repository/webkit/trunk@2747 268f45cc-cd09-0410-ab3c-d52691b4dbfc
      6e9d9853
    • mjs's avatar
      Another step towards the List conversion: stop inheriting from Value. · 3964a7b6
      mjs authored
              * kjs/types.cpp:
              (ListIterator::ListIterator):
              (List::List):
              (List::operator=):
              (List::~List):
              (List::mark):
              (List::append):
              (List::prepend):
              (List::appendList):
              (List::prependList):
              (List::removeFirst):
              (List::removeLast):
              (List::remove):
              (List::clear):
              (List::copy):
              (List::begin):
              (List::end):
              (List::isEmpty):
              (List::size):
              (List::at):
              (List::operator[]):
              * kjs/types.h:
      
      
      git-svn-id: http://svn.webkit.org/repository/webkit/trunk@2744 268f45cc-cd09-0410-ab3c-d52691b4dbfc
      3964a7b6
    • mjs's avatar
      JavaScriptCore: · effd7e1c
      mjs authored
      	Partway to removing Value from List. Created a marking List
      	variant, used it in place of ListImp.
      
              * kjs/internal.h: Removed List stuff.
              * kjs/internal.cpp:
              (InterpreterImp::mark): Call appropriate List method to do marking of
      	empty ListImp.
              * kjs/object.h:
              * kjs/object.cpp: Use marking List instead of ListImp *.
              * kjs/types.h:
              * kjs/types.cpp:
              (List::List): New boolean needsMarking parameter.
              (List::operator=): Perform trickery related to needsMarking.
              (List::~List): Likewise.
              (List::mark): Mark the ListImp.
              (List::markEmptyList):
      	(ListImp::*): Moved here fron internal.cpp, they will be
      	integrated into the relevant List methods soon.
      
      WebCore:
      
              * force-js-clean-timestamp: Rebuild for JSC changes.
      
      
      git-svn-id: http://svn.webkit.org/repository/webkit/trunk@2741 268f45cc-cd09-0410-ab3c-d52691b4dbfc
      effd7e1c
    • darin's avatar
      - another string constant discovered that can be optimized · 2dd6a841
      darin authored
              * kjs/object.h: Add a property name constant for "__proto__".
              * kjs/object.cpp: Define it.
      	(ObjectImp::get): Use it.
      	(ObjectImp::hasProperty): Use it.
      
      	- prepare to turn PropertyMap into a hash table
      
              * kjs/object.cpp:
      	(ObjectImp::mark): Use the new PropertyMap::mark().
      	(ObjectImp::put): Use the new overload of PropertyMap::get().
      	(ObjectImp::deleteProperty): Use the new overload of PropertyMap::get().
      	(ObjectImp::propList): Use PropertyMap::addEnumerablesToReferenceList().
      
              * kjs/property_map.h: Remove PropertyMapNode and make all node-related methods private.
      	Add mark(), a new overload of get() that returns attributes, a clear() that takes no attributes,
      	and addEnumerablesToReferenceList().
              * kjs/property_map.cpp:
      	(PropertyMap::get): Added new overload.
      	(PropertyMap::clear): Added new overload.
      	(PropertyMap::mark): Added.
      	(PropertyMap::addEnumerablesToReferenceList): Added.
      
              * kjs/ustring.h: Added a hash function.
              * kjs/ustring.cpp: (KJS::hash): Added.
      
      
      git-svn-id: http://svn.webkit.org/repository/webkit/trunk@2740 268f45cc-cd09-0410-ab3c-d52691b4dbfc
      2dd6a841
    • darin's avatar
      - simplified the ExecState class, which was showing up in profiles · 3e1ce6e5
      darin authored
              Sped up JavaScript iBench by 6%.
      
              * kjs/interpreter.h: Removed the level of indirection, and made it all inline.
              * kjs/interpreter.cpp: Removed ExecState implementation from here altogether.
      
      	- fixed an oversight in my sort speedup
      
              * kjs/array_object.h: Add pushUndefinedObjectsToEnd.
              * kjs/array_object.cpp:
              (ArrayInstanceImp::sort): Call pushUndefinedObjectsToEnd.
              (ArrayInstanceImp::pushUndefinedObjectsToEnd): Added.
      	Pushes all undefined to the end of the array.
      
      
      git-svn-id: http://svn.webkit.org/repository/webkit/trunk@2738 268f45cc-cd09-0410-ab3c-d52691b4dbfc
      3e1ce6e5
    • darin's avatar
      - fix worst speed problems on the sort page of the iBench JavaScript test · 401641ee
      darin authored
      	Sped up JavaScript iBench by 70%, the sort page by 88%.
      
              * kjs/array_object.h: Add array-specific sort functions.
              * kjs/array_object.cpp:
              (compareByStringForQSort): Added.
              (ArrayInstanceImp::sort): Added.
              (compareWithCompareFunctionForQSort): Added.
              (ArrayProtoFuncImp::call): Use ArrayInstanceImp::sort if the object being
      	sorted is actually an array.
      
              * kjs/object.h: Add argumentsPropertyName.
              * kjs/object.cpp: Add argumentsPropertyName.
              * kjs/function.cpp:
              (FunctionImp::FunctionImp): Use argumentsPropertyName to avoid making a UString.
              (FunctionImp::call): Ditto.
              (ActivationImp::ActivationImp): Ditto.
              * kjs/function_object.cpp: (FunctionObjectImp::construct): Ditto.
      
              * kjs/ustring.h: Added compare function for -1/0/+1 comparison.
              * kjs/ustring.cpp: (KJS::compare): Added.
      
      
      git-svn-id: http://svn.webkit.org/repository/webkit/trunk@2736 268f45cc-cd09-0410-ab3c-d52691b4dbfc
      401641ee
    • mjs's avatar
      Change ArgumentListNode operations to be iterative instead of · a34e69ca
      mjs authored
      	recursive. This probably fixes 3095446 (Crash in
      	KJS::ArgumentListNode::ref()) but I can't reproduce it myself so
      	I'm not 100% sure. I think the original bug was a stack overflow
      	and this change would remove that possibility.
      
              * kjs/nodes.cpp:
              (ArgumentListNode::ref): Make iterative.
              (ArgumentListNode::deref): Make iterative.
              (ArgumentListNode::evaluateList): Make iterative.
      
      
      git-svn-id: http://svn.webkit.org/repository/webkit/trunk@2735 268f45cc-cd09-0410-ab3c-d52691b4dbfc
      a34e69ca
  4. 14 Nov, 2002 3 commits
  5. 13 Nov, 2002 2 commits
  6. 09 Nov, 2002 1 commit
  7. 08 Nov, 2002 1 commit
  8. 07 Nov, 2002 2 commits
  9. 01 Nov, 2002 1 commit
    • darin's avatar
      JavaScriptCore: · d9713704
      darin authored
              * kjs/object.cpp: Make the same change Maciej just did, but to the
      	other constructor right next to the one he changed.
      
      WebFoundation:
      
              * English.lproj/StringsNotToBeLocalized.txt: Update for recent changes.
      
      WebKit:
      
              * English.lproj/StringsNotToBeLocalized.txt: Update for recent changes.
      
      
      git-svn-id: http://svn.webkit.org/repository/webkit/trunk@2535 268f45cc-cd09-0410-ab3c-d52691b4dbfc
      d9713704
  10. 31 Oct, 2002 2 commits