2002-12-03 Maciej Stachowiak <mjs@apple.com> | |
Reviewed by: Darin Adler | |
- fixed Deployment build. | |
* kjs/dtoa.cpp: Work around warnings. | |
2002-12-03 Maciej Stachowiak <mjs@apple.com> | |
- fixed 3114790 - Gamespot reviews pages badly mis-rendering | |
because floating point numbers format wide | |
Reviewed by: David Hyatt | |
* kjs/dtoa.cpp: Imported float <--> string conversion routines | |
from David M. Gay. I changed this to fix warnings and avoid | |
colliding with names of standard library functions. | |
* kjs/dtoa.h: Added a header I made up for dtoa.cpp | |
* kjs/ustring.cpp: | |
(UString::from): Use new double to string routine (kjs_strtod). | |
(UString::toDouble): Use new string to double routine (kjs_dtoa). | |
* JavaScriptCore.pbproj/project.pbxproj: Added new files | |
2002-11-27 John Sullivan <sullivan@apple.com> | |
* kjs/collector.cpp: | |
removed puts("COLLECT") leftover debugging spam that was | |
buggin' gramps | |
=== Alexander-34 === | |
2002-11-26 Maciej Stachowiak <mjs@apple.com> | |
Change ActivationImp to be allocated via the garbage collector | |
again instead of on the stack. This fixes the following four | |
regressions but sadly it causes a 6% performance hit. It's | |
probably possibly to reduce the hit a bit by being smarter about | |
inlining and the way the marking list variant is implemented, but | |
I'll look into that later. | |
- fixed 3111500 - REGRESSION: crash in "KJS::ScopeChain::mark()" on www.posci.com | |
- fixed 3111145 - REGRESSION: reproducible crash in KJS hashtable lookup at time.com | |
- fixed 3110897 - REGRESSION: javascript crasher on http://bmwgallery.tripod.com/ | |
- fixed 3109987 - REGRESSION: Reproducible crash in KJS ObjectImp at live365.com | |
Also: | |
- improved DEBUG_COLLECTOR mode a bit by never giving memory back | |
to the system. | |
* kjs/collector.cpp: | |
* kjs/context.h: | |
* kjs/function.cpp: | |
(ActivationImp::ActivationImp): | |
(ActivationImp::mark): | |
(ActivationImp::createArgumentsObject): | |
* kjs/function.h: | |
* kjs/internal.cpp: | |
(ContextImp::ContextImp): | |
(ContextImp::mark): | |
* kjs/list.cpp: | |
* kjs/list.h: | |
* kjs/value.cpp: | |
(Value::Value): | |
2002-11-26 Darin Adler <darin@apple.com> | |
* kjs/property_map.cpp: | |
(PropertyMap::save): Look at the attributes the same way in the single hash entry | |
case as in the actual hash table case. Change the rule for which attributes to save | |
to "attributes that don't have the ReadOnly, DontEnum, or Function bit set". | |
Also fix bug where saving an empty property map would leave the count set to the old value. | |
2002-11-26 Richard Williamson <rjw@apple.com> | |
Remove debugging code. Could be cause of performance regresssion. | |
* kjs/nodes.cpp: | |
(FunctionCallNode::evaluate): | |
Restire attributes correctly. | |
* kjs/property_map.cpp: | |
2002-11-25 Richard Williamson <rjw@apple.com> | |
Use delete[] (not delete) operator to delete array. | |
* kjs/property_map.cpp: | |
2002-11-25 Richard Williamson <rjw@apple.com> | |
Added debugging info. Fixed property map save function. | |
* kjs/nodes.cpp: | |
(FunctionCallNode::evaluate): | |
* kjs/property_map.cpp: | |
2002-11-25 Richard Williamson <rjw@apple.com> | |
Changes for back/forward. Currently disabled. | |
* kjs/property_map.cpp: | |
* kjs/property_map.h: | |
2002-11-25 Darin Adler <darin@apple.com> | |
* kjs/property_map.cpp: Rearrange code a little bit and tweak indentation. | |
This might provide a tiny speedup because we don't look at the single entry | |
any more in cases where the _table pointer is non-0. | |
2002-11-24 Darin Adler <darin@apple.com> | |
- changed ScopeChain to not ref each item in the chain, and use | |
marking instead; gains 1% on JavaScript iBench | |
* kjs/context.h: Return chain by reference. | |
* kjs/internal.cpp: (ContextImp::mark): Mark the scope chain. | |
* kjs/interpreter.cpp: (Context::scopeChain): Return chain by reference. | |
* kjs/interpreter.h: Make some Context methods inline. | |
* kjs/nodes.cpp: | |
(ThisNode::evaluate): Get at ContextImp directly. | |
(ResolveNode::evaluateReference): Ditto. | |
(VarDeclNode::evaluate): Ditto. | |
(VarDeclNode::processVarDecls): Ditto. | |
(FuncDeclNode::processFuncDecl): Pass ScopeChain directly to avoid copying. | |
(FuncExprNode::evaluate): Ditto. | |
* kjs/object.cpp: Make scope and setScope inline. | |
* kjs/object.h: Make scope return a chain by reference. Make scope and | |
setScope both be inline. Use a normal ScopeChain instead of NoRefScopeChain | |
since they are now one and the same. | |
* kjs/scope_chain.cpp: Remove all the code to ref and deref objects. | |
Merge NoRefScopeChain in with ScopeChain since they both work this way now. | |
* kjs/scope_chain.h: Remove NoRefScopeChain and simplify the ref counts. | |
Make more functions inline. | |
2002-11-24 Maciej Stachowiak <mjs@apple.com> | |
- fixed 3098356 - Hard hang on movie search at www.movietickets.com | |
* kjs/string_object.cpp: | |
(StringProtoFuncImp::call): When doing a regexp replacement that | |
results in an empty match, always move on to the next character | |
after doing the replacement. The previous code would hit an | |
infinite loop if an initial empty match was replaced with the | |
empty string. | |
2002-11-24 Maciej Stachowiak <mjs@apple.com> | |
- fixed 3095446 - Crash on AppleScript page due to very long argument list | |
* kjs/grammar.y: Don't try to construct the argument list in the | |
right order, since that blows out the parser stack. | |
* kjs/nodes.cpp: | |
(ArgumentsNode::ArgumentsNode): Instead reverse the argument list | |
here. | |
* kjs/nodes.h: Make ArgumentsNode a friend of ArgumentListNode. | |
* kjs/grammar.cpp: Updated from grammar.y. | |
2002-11-23 Maciej Stachowiak <mjs@apple.com> | |
- completed Darin's mostly-fix for 3037795 - Resource use | |
increases when accessing very high index value in array | |
The two missing pieces were handling sparse properties when | |
shrinking the array, and when sorting. Thse are now both taken | |
care of. | |
* kjs/array_instance.h: | |
* kjs/array_object.cpp: | |
(ArrayInstanceImp::put): | |
(ArrayInstanceImp::deleteProperty): | |
(ArrayInstanceImp::resizeStorage): | |
(ArrayInstanceImp::setLength): | |
(ArrayInstanceImp::sort): | |
(ArrayInstanceImp::pushUndefinedObjectsToEnd): | |
* kjs/identifier.h: | |
* kjs/object.h: | |
* kjs/property_map.cpp: | |
* kjs/property_map.h: | |
* kjs/reference_list.cpp: | |
(ReferenceList::append): | |
(ReferenceList::length): | |
* kjs/reference_list.h: | |
* kjs/ustring.cpp: | |
(UString::toUInt32): | |
* kjs/ustring.h: | |
2002-11-23 Maciej Stachowiak <mjs@apple.com> | |
Numerous collector changes for a net gain of 3% on JS ibench: | |
- Replaced per-block bitmap with free list. | |
- Increased number of empty blocks kept around to 2. | |
- Doubled block size. | |
- When scanning heap in collector, skip scanning the rest of a | |
block as soon as we see as many live cells as the the number of | |
used cells it had originally. | |
Also the following collector changes unrelated to performance: | |
- Made constants `const int' instead of `static const int'. | |
- Miscellaneous code cleanup. | |
* kjs/collector.cpp: | |
- Added debugging mode enabled by defining DEBUG_GC which asserts | |
when a destroyed ValueImp | |
* kjs/internal.cpp: | |
(ContextImp::mark): | |
* kjs/value.cpp: | |
(Value::Value): | |
* kjs/value.h: | |
* kjs/config.h: | |
2002-11-22 Darin Adler <darin@apple.com> | |
- replaced List class with a vector rather than a linked list, changed it | |
to use a pool of instances instead of all the nodes allocated off of the | |
heap; gives 10% gain on iBench | |
* kjs/list.h: Complete rewrite. | |
* kjs/list.cpp: Ditto. | |
* kjs/array_object.cpp: (compareWithCompareFunctionForQSort): Go back to | |
doing a clear and two appends here. Fast with the new list implementation. | |
* kjs/collector.h: Remove _COLLECTOR hack and just make rootObjectClasses | |
return a const void *. | |
* kjs/collector.cpp: Remove _COLLECTOR hack, and various other minor tweaks. | |
2002-11-22 Darin Adler <darin@apple.com> | |
- prepare to reimplement KJS::List; move to its own file, add statistics | |
* kjs/function_object.cpp: (FunctionProtoFuncImp::call): Use new copyTail() | |
function rather than copy() and removeFirst(). | |
* kjs/identifier.cpp: Add statistics, off by default. | |
* kjs/property_map.cpp: Add statistics, off by default. | |
* kjs/list.cpp: Added. Moved code here. To be rewritten. | |
* kjs/list.h: Added. Moved interface here. To be rewritten. | |
* kjs/types.cpp: Removed. | |
* kjs/types.h: Now just an empty header that includes other headers. | |
* JavaScriptCore.pbproj/project.pbxproj: Add new files, rearrange. | |
2002-11-22 Maciej Stachowiak <mjs@apple.com> | |
- reduce cell size to 56 bytes from 64, now that nearly all | |
objects fit in that size. .5% speed gain and probably some | |
footprint gain. | |
* kjs/collector.cpp: Change CELL_SIZE from 64 to 56. | |
2002-11-22 Darin Adler <darin@apple.com> | |
- change ScopeChain to be a singly linked list shares tails, gives 11% gain on iBench | |
* kjs/context.h: | |
(ContextImp::pushScope): Make inline, use push instead of prepend, and pass imp pointer. | |
(ContextImp::popScope): Make inline, use pop instead of removeFirst. | |
* kjs/function.cpp: (DeclaredFunctionImp::DeclaredFunctionImp): No need to copy. | |
* kjs/function_object.cpp: (FunctionObjectImp::construct): Use push instead of | |
prepend, and pass imp pointer. | |
* kjs/internal.cpp: (ContextImp::ContextImp): Use clear, push instead of prepend, | |
and pass imp pointers. | |
* kjs/nodes.cpp: (ResolveNode::evaluateReference): Use isEmpty, pop, and top instead | |
of ScopeChainIterator. | |
* kjs/object.h: Change _scope to be a NoRefScopeChain. | |
* kjs/object.cpp: No need to initialize _scope any more, since it's not a NoRefScopeChain. | |
* kjs/scope_chain.h: Rewrite, different implementation and interface. | |
* kjs/scope_chain.cpp: More of the same. | |
2002-11-22 Maciej Stachowiak <mjs@apple.com> | |
- a simple change for .4% gain on ibench - instead of unmarking | |
all objects at the start of collection, instead unmark as part of | |
the sweep phase | |
* kjs/collector.cpp: | |
(Collector::collect): Remove separate unmarking pass and instead | |
unmark the objects that don't get collected during the sweep | |
phase. | |
2002-11-21 Darin Adler <darin@apple.com> | |
- stop garbage collecting the ActivationImp objects, gets 3% on iBench | |
- pave the way to separate the argument lists from scope chains | |
* kjs/context.h: Added. Moved ContextImp here so it can use things defined | |
in function.h | |
* kjs/scope_chain.h: Added. Starting as a copy of List, to be improved. | |
* kjs/scope_chain.cpp: Added. Starting as a copy of List, to be improved. | |
* JavaScriptCore.pbproj/project.pbxproj: Rearranged things, added context.h. | |
* kjs/function.cpp: | |
(FunctionImp::call): Pass InterpreterImp, not ExecState, to ContextImp. | |
(DeclaredFunctionImp::DeclaredFunctionImp): List -> ScopeChain. | |
(ActivationImp::createArgumentsObject): ArgumentList -> List. | |
(GlobalFuncImp::call): Pass InterpreterImp, not an ExecState, to ContextImp. | |
* kjs/function.h: List -> ScopeChain. | |
* kjs/function_object.cpp: (FunctionObjectImp::construct): List -> ScopeChain. | |
* kjs/internal.cpp: | |
(ContextImp::ContextImp): Set the context in the interpreter. | |
(ContextImp::~ContextImp): Set the context in the interpreter to the caller. | |
(ContextImp::mark): Mark all the activation objects. | |
(InterpreterImp::InterpreterImp): Initialize context to 0. | |
(InterpreterImp::mark): Mark the top context. | |
(InterpreterImp::evaluate): Pass InterpreterImp to ContextImp. | |
* kjs/internal.h: Move ContextImp to its own header. Add setContext to InterpreterImp. | |
* kjs/interpreter.cpp: (Context::scopeChain): List -> ScopeChain. | |
* kjs/interpreter.h: List -> ScopeChain. | |
* kjs/nodes.cpp: | |
(ResolveNode::evaluateReference): List -> ScopeChain. | |
(FuncDeclNode::processFuncDecl): List -> ScopeChain. | |
(FuncExprNode::evaluate): List -> ScopeChain. | |
* kjs/object.cpp: List -> ScopeChain. | |
* kjs/object.h: List -> ScopeChain. | |
* kjs/types.h: Remove needsMarking features from List. | |
* kjs/types.cpp: Ditto. | |
2002-11-21 Maciej Stachowiak <mjs@apple.com> | |
- reduced the size of PropertyMap by storing sizes and such in the | |
dynamically allocated part of the object to reduce the size of | |
ObjectImp - .5% speed improvement on JS iBench. | |
* kjs/property_map.cpp: | |
* kjs/property_map.h: | |
2002-11-21 Maciej Stachowiak <mjs@apple.com> | |
* Makefile.am: Pass symroots for this tree to pbxbuild. | |
=== Alexander-33 === | |
2002-11-21 Darin Adler <darin@apple.com> | |
* kjs/property_map.cpp: More assertions. | |
2002-11-21 Darin Adler <darin@apple.com> | |
* kjs/property_map.cpp: Turn that consistency check back off. | |
2002-11-21 Darin Adler <darin@apple.com> | |
- someone somewhere must be defining a macro named check, causing a compile failure in WebCore | |
Rename check() to checkConsistency(). | |
* kjs/property_map.h: Rename. | |
* kjs/property_map.cpp: Yes, rename. | |
2002-11-21 Darin Adler <darin@apple.com> | |
- add self-check to property map in hopes of finding the cnet.com bug | |
* kjs/property_map.h: Add check() function. | |
* kjs/property_map.cpp: Add the checking, controlled by DO_CONSISTENCY_CHECK. | |
- fixed UChar interface so it's not so slow in debug builds | |
* kjs/ustring.h: Nothing in UChar needs to be private. | |
* kjs/function.cpp: (GlobalFuncImp::call): | |
* kjs/function_object.cpp: (FunctionObjectImp::construct): | |
* kjs/identifier.cpp: | |
* kjs/lexer.cpp: (Lexer::setCode), (Lexer::shift): | |
* kjs/lookup.cpp: (keysMatch): | |
* kjs/ustring.cpp: (UString::Rep::computeHash), (KJS::compare): | |
Use the "uc" field instead of the "unicode()" inline function. | |
2002-11-21 Darin Adler <darin@apple.com> | |
- fixed a null-dereference I ran into while trying to reproduce bug 3107351 | |
* kjs/function.h: Change ActivationImp constructor to take context parameter. | |
* kjs/function.cpp: (ActivationImp::ActivationImp): Take context parameter, | |
not execution state parameter. | |
* kjs/internal.cpp: (ContextImp::ContextImp): Initialize activation object | |
from context, not execution state, because the new context is not yet in the | |
execution state. | |
2002-11-20 Darin Adler <darin@apple.com> | |
- added a feature for Richard to use in his back/forward cache | |
* kjs/object.h: Added save/restoreProperties. | |
* kjs/property_map.h: Here too. | |
* kjs/property_map.cpp: Here too. | |
2002-11-20 Darin Adler <darin@apple.com> | |
- created argument list objects only on demand for a 7.5% speedup | |
* kjs/function.h: Change ActivationImp around. | |
* kjs/function.cpp: | |
(FunctionImp::call): Pass a pointer to the arguments list to avoid ref/unref. | |
(FunctionImp::get): Get the function pointer from the context directly, | |
not the activation object. | |
(ArgumentsImp::ArgumentsImp): Add an overload that takes no arguments. | |
(ActivationImp::ActivationImp): Store a context pointer and an arguments object pointer. | |
(ActivationImp::get): Special case for arguments, create it and return it. | |
(ActivationImp::put): Special case for arguments, can't be set. | |
(ActivationImp::hasProperty): Special case for arguments, return true. | |
(ActivationImp::deleteProperty): Special case for arguments, refuse to delete. | |
(ActivationImp::mark): Mark the arguments object. | |
(ActivationImp::createArgumentsObject): Do the work of actually creating it. | |
(GlobalFuncImp::call): Use stack-based objects for the ContextImp and ExecState. | |
* kjs/internal.h: Keep function and arguments pointer in the context. | |
* kjs/internal.cpp: | |
(ContextImp::ContextImp): Don't pass in the func and args when making an ActivationImp. | |
(InterpreterImp::evaluate): Use stack-based objects here. | |
* kjs/types.h: Add ArgumentList as a synonym for List, soon to be separate. | |
2002-11-20 Maciej Stachowiak <mjs@apple.com> | |
Reduced the size of ValueImp by 8 bytes for a .5% speedup. | |
* kjs/value.h: Removed destructed flag. Made refcount and flag 16 | |
bits each. | |
* kjs/value.cpp: | |
(ValueImp::~ValueImp): Don't set destructed flag. | |
2002-11-20 Darin Adler <darin@apple.com> | |
* kjs/types.cpp: Keep ref count for the whole lists of nodes. | |
Doesn't speed things up much, less than 1%. | |
2002-11-20 Maciej Stachowiak <mjs@apple.com> | |
* kjs/collector.cpp: | |
(Collector::allocate): Clear the flags on newly allocated objects. | |
2002-11-20 Darin Adler <darin@apple.com> | |
- oops, checked in big regression instead of 5% speedup | |
* 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. | |
2002-11-20 Darin Adler <darin@apple.com> | |
- decrease ref/deref -- 5% speedup in iBench | |
* 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. | |
2002-11-20 Maciej Stachowiak <mjs@apple.com> | |
Fixed the two most obvious problems with the new GC for another 6% | |
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. | |
2002-11-20 Maciej Stachowiak <mjs@apple.com> | |
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: | |
2002-11-20 Darin Adler <darin@apple.com> | |
- on the road to killing ActivationImp | |
* 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. | |
2002-11-20 Darin Adler <darin@apple.com> | |
- 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.) | |
2002-11-20 Darin Adler <darin@apple.com> | |
- atomic identifiers; gives another 6.5% in the iBench suite | |
* 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. | |
2002-11-19 Darin Adler <darin@apple.com> | |
- a few more globals for often-used property names | |
- 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: | |
2002-11-19 Darin Adler <darin@apple.com> | |
- another step towards atomic identifiers; storing hash in the string rep. gives about | |
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. | |
2002-11-19 Darin Adler <darin@apple.com> | |
- 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(). | |
2002-11-19 Darin Adler <darin@apple.com> | |
- fixed memory trasher | |
* kjs/ustring.cpp: (UString::from): Fix "end of buffer" computation. | |
2002-11-19 Darin Adler <darin@apple.com> | |
- 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: | |
2002-11-19 Darin Adler <darin@apple.com> | |
- fix hash function and key comparison for the other kind of hash table; yields 3% | |
* kjs/lookup.cpp: | |
(keysMatch): Added. | |
(Lookup::findEntry): Don't allocate and convert to ASCII just to search. | |
2002-11-19 Darin Adler <darin@apple.com> | |
- another hash table fix; yields a 2% improvement on iBench JavaScript | |
* 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(). | |
2002-11-19 Darin Adler <darin@apple.com> | |
- fixed 3105026 -- REGRESSION: DHTML menus are broken all over the place | |
* kjs/types.cpp: (List::prepend): Fix backwards links in new node. | |
2002-11-19 Darin Adler <darin@apple.com> | |
- a fix that gives another 1.5% on the iBench JavaScript test | |
* kjs/ustring.cpp: (UString::from): Stop using sprintf to format integers. | |
2002-11-18 Darin Adler <darin@apple.com> | |
- 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. | |
2002-11-18 Darin Adler <darin@apple.com> | |
* kjs/property_map.cpp: Oops, copyright goes to Apple, not me. | |
* kjs/property_map.h: Ditto. | |
2002-11-18 Darin Adler <darin@apple.com> | |
- property and string improvements giving a 7% or so improvement in JavaScript iBench | |
* 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. | |
2002-11-18 Maciej Stachowiak <mjs@apple.com> | |
Change List to completely avoid going through the GC | |
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: | |
2002-11-18 Maciej Stachowiak <mjs@apple.com> | |
Fixed a horrible leak introduced with my last change that | |
somehow did not show up on my machine. | |
* kjs/types.cpp: | |
(List::List): Mark ListImp as GC allowed. | |
2002-11-18 Maciej Stachowiak <mjs@apple.com> | |
Another step towards the List conversion: stop inheriting from Value. | |
* 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: | |
2002-11-18 Maciej Stachowiak <mjs@apple.com> | |
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. | |
2002-11-18 Darin Adler <darin@apple.com> | |
- another string constant discovered that can be optimized | |
* 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. | |
2002-11-18 Darin Adler <darin@apple.com> | |
- simplified the ExecState class, which was showing up in profiles | |
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. | |
2002-11-18 Darin Adler <darin@apple.com> | |
- fix worst speed problems on the sort page of the iBench JavaScript test | |
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. | |
2002-11-18 Maciej Stachowiak <mjs@apple.com> | |
Change ArgumentListNode operations to be iterative instead of | |
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. | |
=== Alexander-32 === | |
2002-11-14 Darin Adler <darin@apple.com> | |
- fixed 3101243 -- excite passes date that can't be parsed, results in bogus date at top right corner | |
* kjs/date_object.cpp: (KJS::KRFCDate_parseDate): Handle errors from strtol | |
by checking errno. Check the "string in a haystack" to be sure it's a multiple | |
of 3. Add case that allows year to be after time. | |
2002-11-14 Darin Adler <darin@apple.com> | |
- fixed 3101191 -- REGRESSION: Hang loading excite.com | |
* kjs/date_object.cpp: | |
(mktimeUsingCF): Pick an arbitrary cutoff of 3000, and return -1 if the | |
year passed in is that big so we don't infinite loop. Also validate the | |
rest of the date with CFGregorianDateIsValid. | |
(DateProtoFuncImp::call): Handle a -1 result from mktime. | |
(DateObjectImp::construct): Check for NaN before calling mktime, and also | |
handle a -1 result from mktime. | |
(DateObjectFuncImp::call): Check for NaN before calling mktime, and also | |
handle a -1 result from mktime. | |
2002-11-13 Darin Adler <darin@apple.com> | |
- fixed 3099930 -- dates/times without time zones are parsed as UTC by kjs, | |
local time by other browsers | |
* kjs/date_object.cpp: | |
(DateProtoFuncImp::call): Handle the NaN case better, like Mozilla and OmniWeb. | |
(DateObjectFuncImp::call): Return NaN rather than Undefined() for bad dates. | |
(KJS::parseDate): Return NaN rather than Undefined() or 0 for bad dates. | |
(KJS::KRFCDate_parseDate): Return -1 rather than 0 for bad dates. | |
Assume local time if no time zone is passed. Don't return 1 if we parse 0. | |
2002-11-13 Darin Adler <darin@apple.com> | |
- fixed 3073230 -- JavaScript time calls do I/O by lstat()ing /etc/localtime | |
* kjs/date_object.cpp: | |
(formatDate): Added. | |
(formatTime): Added. | |
(formatLocaleDate): Added. | |
(formatLocaleTime): Added. | |
(DateProtoFuncImp::call): Changed to use the above functions instead of | |
using strftime. | |
2002-11-08 Darin Adler <darin@apple.com> | |
* kjs/date_object.cpp: | |
(ctimeUsingCF): Added. | |
(timeUsingCF): Added. | |
2002-11-07 Darin Adler <darin@apple.com> | |
* kjs/date_object.cpp: (mktimeUsingCF): Fix storage leak. | |
2002-11-07 Maciej Stachowiak <mjs@apple.com> | |
- partial fix to 3073230 - JavaScript time calls do I/O by | |
lastat()ing /etc/localtime | |
* kjs/date_object.cpp: | |
(mktimeUsingCF): Implementation of mktime using CF. | |
=== Alexander-31 === | |
2002-11-01 Darin Adler <darin@apple.com> | |
* kjs/object.cpp: Make the same change Maciej just did, but to the | |
other constructor right next to the one he changed. | |
2002-10-31 Maciej Stachowiak <mjs@apple.com> | |
- fixed 3082660 - REGRESSION: one ListImp leaks opening/closing nearly empty web page | |
* kjs/object.cpp: Set gc allowed on freshly created ListImp, since | |
there is no List wrapper for it. | |
2002-10-31 Darin Adler <darin@apple.com> | |
* kjs/grammar.y: Fix the APPLE_CHANGES thing here too. | |
* kjs/grammar.cpp: Regenerated this file. | |
=== Alexander-30 === | |
2002-10-30 Darin Adler <darin@apple.com> | |
- fixed 3073230 -- Alex is doing file I/O when executing JavaScript by asking for localtime | |
I fixed this by using Core Foundation time functions instead. | |
* kjs/date_object.cpp: | |
(tmUsingCF): Function that uses Core Foundation to get the time and then puts it into | |
a tm struct. | |
(gmtimeUsingCF): Function used instead of gmtime (used a macro to make the substitution). | |
(localtimeUsingCF): Function used instead of localtime (used a macro to make the substitution). | |
2002-10-26 Darin Adler <darin@apple.com> | |
- changed to use #if APPLE_CHANGES and #if !APPLE_CHANGES consistently | |
We no longer do #ifdef APPLE_CHANGES or #ifndef APPLE_CHANGES. | |
* kjs/collector.cpp: | |
* kjs/collector.h: | |
* kjs/grammar.cpp: | |
* kjs/internal.cpp: | |
* kjs/ustring.h: | |
2002-10-25 Darin Adler <darin@apple.com> | |
- fixed 3038011 -- drop-down menu hierarchy broken at yahoo new acct page | |
* kjs/array_object.cpp: (ArrayProtoFuncImp::call): | |
Fix bug calling concat on an empty array. The old code tried to | |
optimize in a way that would prevent appending any arrays until | |
at least one element was in the destination array. So if you were | |
concatenating a non-empty array into an empty array, you got an empty array. | |
=== Alexander-29 === | |
=== Alexander-28 === | |
2002-10-10 Darin Adler <darin@apple.com> | |
- fixed 3072643 -- infinite loop in JavaScript code at walgreens.com | |
The problem is that "xxx".indexOf("", 1) needs to return 1, but we | |
were returning 0. | |
* kjs/ustring.cpp: | |
(UString::find): Return pos, not 0, when the search string is empty. | |
(UString::rfind): Make sure that pos is not past the end of the string, | |
taking into account the search string; fixes a potential read off the end | |
of the buffer. Also return pos, not 0, when the search string is empty. | |
=== Alexander-27 === | |
2002-10-07 Darin Adler <darin@apple.com> | |
Fixed absurdly high memory usage when looking at pages that use a lot of JavaScript. | |
* kjs/collector.cpp: | |
(Collector::allocate): Implement a new policy of doing a garbage collect every 1000 | |
allocations. The old policy was both complicated and misguided. | |
(Collector::collect): Zero out the "number of allocations since last collect". | |
2002-10-06 Darin Adler <darin@apple.com> | |
I noticed some broken lists at mapblast.com and tracked it down to this. | |
* kjs/array_object.cpp: | |
(ArrayInstanceImp::put): Don't truncate the list; only extend the length if | |
it's not already long enough. | |
(ArrayProtoFuncImp::call): Fix some ifdef'd code so it compiles if you turn | |
the ifdefs on. | |
2002-10-04 Darin Adler <darin@apple.com> | |
Fixed problems parsing numbers that are larger than a long with parseInt. | |
* kjs/config.h: Define HAVE_FUNC_STRTOLL. | |
* kjs/function.cpp: (GlobalFuncImp::call): | |
Change parseInt to use strtoll if available. | |
=== Alexander-26 === | |
2002-09-27 Darin Adler <darin@apple.com> | |
- fixed 3033969 -- repro crash (infinite recursion in JavaScript) | |
clicking on "screens" option at fsv.sf.net | |
* kjs/object.h: Change recursion limit to 100 levels rather than 1000. | |
=== Alexander-25 === | |
2002-09-26 Darin Adler <darin@apple.com> | |
Fix the infinity problem Dave worked around. We didn't have the | |
configuration flags set right to make infinity work. Setting those | |
properly made everything work without changes to min and max. | |
* kjs/config.h: Define HAVE_FUNC_ISINF, HAVE_STRING_H, and | |
also WORDS_BIGENDIAN (if on ppc). | |
* kjs/math_object.cpp: (MathFuncImp::call): Roll out min and max | |
changes from yesterday. | |
2002-09-25 David Hyatt <hyatt@apple.com> | |
Fix the impls of min/max to not use +inf/-inf when you have | |
arguments. Technically there's still a bug here for the no | |
argument case, probably caused by a screwup when +inf/-inf are | |
converted to doubles. | |
* kjs/math_object.cpp: | |
(MathFuncImp::call): | |
2002-09-25 Darin Adler <darin@apple.com> | |
- fixed 3057964 -- JS problem performing MD5 script embedded in yahoo login page | |
* kjs/simple_number.h: Fix incorrect check for sign bit that was munging numbers | |
in the range 0x10000000 to 0x1FFFFFFF. | |
=== Alexander-24 === | |
=== Alexander-22 === | |
2002-09-05 Maciej Stachowiak <mjs@apple.com> | |
First baby step towards moving List away from garbage collection. | |
* kjs/types.h: Add needsMarking boolean and make List inherit from | |
Value privately instead of publicly. | |
2002-08-30 Darin Adler <darin@apple.com> | |
* JavaScriptCore.pbproj/project.pbxproj: Allowed the new Project Builder to put in | |
encodings for each file. | |
=== Alexander-21 === | |
=== Alexander-20 === | |
2002-08-20 Darin Adler <darin@apple.com> | |
Three small changes to things that showed up in the sample. | |
5% speed increase on cvs-js-performance test. | |
* kjs/simple_number.h: Check if double is an integer with d == (double)(int)d | |
instead of remainder(d, 1) == 0, saving a function call each time. | |
* kjs/ustring.cpp: | |
(UString::find): Compare the first character before calling memcmp for the rest. | |
(UString::rfind): Ditto. | |
(KJS::operator==): Don't do a strlen before starting to compare the characters. | |
2002-08-20 Maciej Stachowiak <mjs@apple.com> | |
* kjs/object.cpp: Don't reference other ValueImps in the | |
destructor, they may have already been destroyed, and will have | |
GC_ALLOWED set already in any case. | |
2002-08-19 Maciej Stachowiak <mjs@apple.com> | |
Fixed the bug that made sony.com menus come out wrong and made | |
aa.com crash (Radar 3027762). | |
Mode most methods inline. | |
* kjs/completion.cpp: | |
* kjs/completion.h: | |
2002-08-19 Maciej Stachowiak <mjs@apple.com> | |
Maintain stack of old "arguments" property values for functions | |
implicitly on the system stack instead of explicitly in the | |
FunctionImp. This eliminates only a trivial number of GC | |
allocations (less than 200) but eliminates one of the two cases | |
where a ListImp * is stored directly, paving the way to separate | |
List from Value. | |
* kjs/function.h: Remove argStack, pushArgs and popArgs. | |
* kjs/function.cpp: | |
(FunctionImp::FunctionImp): Don't initalize argStack. | |
(FunctionImp::~FunctionImp): Remove comment about argStack. | |
(FunctionImp::mark): Don't mark the argStack. | |
(FunctionImp::call): Save old "arguments" property in a Value, | |
where it will be GC-protected, rather than keeping a list, and | |
restore the old value when done executing. | |
2002-08-18 Darin Adler <darin@apple.com> | |
* kjs/internal.cpp: (KJS::printInfo): Remove one more CompletionType | |
that Maciej missed. | |
2002-08-18 Maciej Stachowiak <mjs@apple.com> | |
Remove stray references to CompletionType and CompletionImp. | |
* kjs/completion.h: | |
* kjs/object.cpp: | |
* kjs/value.h: | |
2002-08-18 Maciej Stachowiak <mjs@apple.com> | |
Separated Completion from Value and made it a pure stack | |
object. This removed another 160,000 of the remaining 580,000 | |
garbage collected object allocations. | |
6% speed increase on cvs-js-performance test. | |
* kjs/completion.cpp: Added. New implementation that doesn't | |
require a ValueImp *. | |
(Completion::Completion): | |
(Completion::complType): | |
(Completion::value): | |
(Completion::target): | |
(Completion::isValueCompletion): | |
* kjs/completion.h: Added. | |
* kjs/function.cpp: | |
(GlobalFuncImp::call): Removed some (apparently mistaken) uses of | |
Completion as a Value. | |
* kjs/internal.cpp: | |
* kjs/internal.h: | |
* kjs/types.cpp: Removed Completion stuff. | |
* kjs/types.h: Removed Completion stuff. | |
* JavaScriptCore.pbproj/project.pbxproj: Added new header. | |
2002-08-16 Darin Adler <darin@apple.com> | |
Fix the Development build. | |
* kjs/object.cpp: Take out a use of ReferenceType. | |
* kjs/ustring.h: Added a bit more inlining. | |
* kjs/ustring.cpp: Moved the function out of here. | |
2002-08-16 Maciej Stachowiak <mjs@apple.com> | |
Final step of the Reference change. Completely separate Reference | |
from Value, and eliminate ReferenceImp. | |
18% speedup on cvs-js-performance test. | |
* kjs/internal.cpp, kjs/internal.h: Remove ReferenceImp. | |
* kjs/nodes.cpp: | |
(Node::evaluateReference): Use Reference::makeValueReference(), | |
not ConstReference. | |
* kjs/reference.cpp: | |
(Reference::Reference): New implementation, handles both regular | |
and value references. | |
(Reference::makeValueReference): Incorporate functionality of ConstReference | |
into this class. | |
(Reference::getBase): New implementation (incorporates error vase | |
for value references). | |
(Reference::getPropertyName): New implementation (incorporates error case | |
for value references). | |
(Reference::putValue): New implementation (incorporates error case | |
for value references). | |
(Reference::deleteValue): New implementation (incorporates error case | |
for value references). | |
(Reference::getValue): New implementation (incorporates special case | |
for value references). | |
(Reference::isMutable): New implementation. | |
* kjs/reference.h: New implementation that merges ReferenceImp | |
into the stack object. | |
* kjs/value.h, kjs/value.cpp: Removed all reference-related method. | |
2002-08-16 Darin Adler <darin@apple.com> | |
- fixed 3026184 -- Hang going to http://aa.com/ while executing JavaScript | |
* kjs/simple_number.h: (SimpleNumber::value): Fixed conversion to a negative | |
number. The technique of using division was no good. Instead, or in the sign | |
bits as needed. | |
2002-08-16 Maciej Stachowiak <mjs@apple.com> | |
* kjs/reference_list.h: Must include headers with "", not | |
<>. D'oh! | |
2002-08-16 Maciej Stachowiak <mjs@apple.com> | |
* JavaScriptCore.pbproj/project.pbxproj: Install reference.h and | |
reference_list.h so WebCore compiles (duh). | |
2002-08-16 Maciej Stachowiak <mjs@apple.com> | |
* JavaScriptCore.pbproj/project.pbxproj: | |
* kjs/internal.cpp: | |
* kjs/internal.h: | |
* kjs/nodes.cpp: | |
(Node::evaluateReference): | |
* kjs/reference.cpp: | |
(Reference::Reference): | |
(Reference::makeValueReference): | |
(Reference::getBase): | |
(Reference::getPropertyName): | |
(Reference::getValue): | |
(Reference::putValue): | |
(Reference::deleteValue): | |
(Reference::isMutable): | |
* kjs/reference.h: | |
* kjs/reference_list.h: | |
* kjs/value.cpp: | |
(ValueImp::dispatchToUInt32): | |
* kjs/value.h: | |
2002-08-16 Maciej Stachowiak <mjs@apple.com> | |
Next step: reimplement ReferenceList from scratch, and store it as | |
an actual Reference object, so ReferenceList no longer depends on | |
Reference being a Value or having a ReferenceImp. A resizing | |
vector might be even better the way this is used. | |
Also moved Reference to its own header and implementation file in | |
preparation for reimplementing it. | |
* JavaScriptCore.pbproj/project.pbxproj: | |
* kjs/nodes.cpp: | |
(ForInNode::execute): | |
* kjs/reference.cpp: Added. | |
(Reference::Reference): | |
(Reference::dynamicCast): | |
(ConstReference::ConstReference): | |
* kjs/reference.h: Added. | |
* kjs/reference_list.cpp: Added. | |
(ReferenceList::ReferenceList): | |
(ReferenceList::operator=): | |
(ReferenceList::swap): | |
(ReferenceList::append): | |
(ReferenceList::~ReferenceList): | |
(ReferenceList::begin): | |
(ReferenceList::end): | |
(ReferenceListIterator::ReferenceListIterator): | |
(ReferenceListIterator::operator!=): | |
(ReferenceListIterator::operator->): | |
(ReferenceListIterator::operator++): | |
* kjs/reference_list.h: | |
* kjs/types.cpp: | |
* kjs/types.h: | |
2002-08-16 Maciej Stachowiak <mjs@apple.com> | |
Fix Development build - some NDEBUG code had to be changed for the | |
Value/Reference split. | |
* kjs/internal.cpp: | |
(KJS::printInfo): | |
* kjs/nodes.cpp: | |
(FunctionCallNode::evaluate): | |
2002-08-16 Maciej Stachowiak <mjs@apple.com> | |
* kjs/reference_list.h: Added file I forgot to check in last time. | |
2002-08-15 Maciej Stachowiak <mjs@apple.com> | |
Phase 1 of optimization to stop allocating references through the | |
collector. This step clearly splits evaluating to a reference and | |
evaluating to a value, and moves all of the reference-specific | |
operations from Value to Reference. A special ConstReference class | |
helps out for the one case where you need special reference | |
operations if the result is a reference, and not otherwise. | |
Also, Reference now inherits privately from Value, and there is a | |
new ReferenceList class that inherits privately from List, so the | |
uses of Reference and Value are now completely orthogonal. This | |
means that as the next step, their implementations can be | |
completely disentangled. | |
This step has no actual performance impact. | |
* kjs/collector.cpp: | |
(Collector::collect): | |
* kjs/nodes.cpp: | |
(Node::evaluateReference): | |
(ResolveNode::evaluate): | |
(ResolveNode::evaluateReference): | |
(ElementNode::evaluate): | |
(PropertyValueNode::evaluate): | |
(AccessorNode1::evaluate): | |
(AccessorNode1::evaluateReference): | |
(AccessorNode2::evaluate): | |
(AccessorNode2::evaluateReference): | |
(ArgumentListNode::evaluateList): | |
(NewExprNode::evaluate): | |
(FunctionCallNode::evaluate): | |
(PostfixNode::evaluate): | |
(DeleteNode::evaluate): | |
(VoidNode::evaluate): | |
(TypeOfNode::evaluate): | |
(PrefixNode::evaluate): | |
(UnaryPlusNode::evaluate): | |
(NegateNode::evaluate): | |
(BitwiseNotNode::evaluate): | |
(LogicalNotNode::evaluate): | |
(MultNode::evaluate): | |
(AddNode::evaluate): | |
(ShiftNode::evaluate): | |
(RelationalNode::evaluate): | |
(EqualNode::evaluate): | |
(BitOperNode::evaluate): | |
(BinaryLogicalNode::evaluate): | |
(ConditionalNode::evaluate): | |
(AssignNode::evaluate): | |
(CommaNode::evaluate): | |
(VarDeclNode::evaluate): | |
(ExprStatementNode::execute): | |
(IfNode::execute): | |
(DoWhileNode::execute): | |
(WhileNode::execute): | |
(ForNode::execute): | |
(ForInNode::execute): | |
(ReturnNode::execute): | |
(WithNode::execute): | |
(CaseClauseNode::evaluate): | |
(SwitchNode::execute): | |
(ThrowNode::execute): | |
* kjs/nodes.h: | |
* kjs/types.cpp: | |
(ConstReference::ConstReference): | |
* kjs/types.h: | |
* kjs/value.h: | |
2002-08-15 Darin Adler <darin@apple.com> | |
Tweaks and small bug fixes to Maciej's excellent new fixnum optimization. | |
Also updated or removed comments that call it "fixnum" instead of "simple number". | |
* kjs/simple_number.h: Change constant names so they don't SHOUT the way macro | |
names do. Added constants for shift, min, and max. Fixed off-by-1 error that | |
prevented us from using the extreme values on either end. Base the range of | |
numbers on a fixed 32 bits constant rather than the size of a long, because | |
code elsewhere depends on positive numbers fitting into both "unsigned" and | |
"UInt32" while assuming it doesn't need to check; we can easily change this | |
later. Used int types rather than long for essentially the same reason. | |
Fixed the value-extraction function so it will work for negative numbers even | |
if the shift is logical, not arithmetic, by using division instead. | |
Renamed functions to be quite terse since they are inside a class. | |
* kjs/value.h: | |
* kjs/value.cpp: | |
(ValueImp::dispatchToObject): Call NumberImp::toObject in a "non-virtual" | |
way rather than repeating the code here. | |
(ValueImp::dispatchToUInt32): Handle the negative number case correctly. | |
(ValueImp::dispatchGetBase): Call ValueImp::getBase in a "non-virtual" | |
way rather than repeating the code here. | |
(ValueImp::dispatchGetPropertyName): Call ValueImp::getPropertyName in a | |
"non-virtual" way rather than repeating the code here. | |
(ValueImp::dispatchPutValue): Call ValueImp::putValue in a "non-virtual" | |
way rather than repeating the code here. | |
(ValueImp::dispatchDeleteValue): Call ValueImp::deleteValue in a "non-virtual" | |
way rather than repeating the code here. | |
(Number::Number): Fixed a bug where the double-based constructor was casting | |
to long, so wouldn't do the "remainder" check. | |
=== Alexander-19 === | |
=== Alexander-18 === | |
2002-08-15 Maciej Stachowiak <mjs@apple.com> | |
Phase 2 of fixnum optimization. Store any integral number that | |
will fit in two bits less than a long inside the ValueImp * | |
itself, thus avoiding the need to deal with the garbage collector | |
at all for these types. Such numbers comprised .5 million of the | |
1.7 million ValueImps created during the cvs-js-performance test, | |
so traffic through the garbage collector should be | |
20% improvement on cvs-js-performance. This may also show up on | |
cvs-base, but I did not compare and I am too lazy to make clean in | |
WebCore yet again. | |
This also significantly reduces memory footprint on | |
JavaScript-heavy pages. Size after going through | |
cvs-js-performance suite is now 22MB to 17.5MB. | |
* JavaScriptCore.pbproj/project.pbxproj: | |
* kjs/simple_number.h: Added. Some inline static methods for handling | |
simple numbers that are stored in the pointer. | |
* kjs/ustring.h: | |
* kjs/ustring.cpp: | |
(UString::from): Added new overload for long. | |
* kjs/value.cpp: | |
(ValueImp::marked): Add special case for simple numbers. | |
(ValueImp::setGcAllowed): Likewise. | |
(ValueImp::toInteger): Call dispatch version of | |
toUInt32(unsigned&), not the real method. | |
(ValueImp::toInt32): Likewise. | |
(ValueImp::toUInt32): Likewise. | |
(ValueImp::toUInt16): Likewise. | |
(ValueImp::dispatchType): Add special case for simple numbers. | |
(ValueImp::dispatchToPrimitive): Likewise. | |
(ValueImp::dispatchToBoolean): Likewise. | |
(ValueImp::dispatchToNumber): Likewise. | |
(ValueImp::dispatchToString): Likewise. | |
(ValueImp::dispatchToObject): Likewise. | |
(ValueImp::dispatchToUInt32): Likewise. | |
(ValueImp::dispatchGetBase): Likewise. | |
(ValueImp::dispatchGetPropertyName): Likewise. | |
(ValueImp::dispatchPutValue): Likewise. | |
(ValueImp::dispatchDeleteValue): Likewise. | |
(Number::Number): Create a simple number instead of a full-blown | |
ValueImp when possible. | |
(Number::value): Likewise. | |
* kjs/value.h: | |
2002-08-15 Maciej Stachowiak <mjs@apple.com> | |
Phase one of the "fixnum" optimization (storing small enough | |
integers in the pointer). This just paves the way for the change | |
by making all the virtual functions of ValueImp private and adding | |
non-virtual dispatchers which can call the virtual function or | |
handle fixnums specially. | |
Also, I marked every place that should need a special case with a | |
FIXNUM comment. | |
* kjs/bool_object.cpp: | |
(BooleanObjectImp::construct): Call dispatch method not the real method. | |
* kjs/internal.h: Make toUInt32 private to make sure no one calls it directly | |
on a NumberImp*. | |
* kjs/nodes.cpp: | |
(ForInNode::execute): Call dispatch method not the real method. | |
* kjs/object.cpp: | |
(ObjectImp::propList): Call dispatch method not the real method. | |
* kjs/object.h: | |
* kjs/string_object.cpp: | |
(StringProtoFuncImp::call): Call dispatch method not the real method. | |
(StringObjectImp::construct): Call dispatch method not the real method. | |
* kjs/value.h: | |
* kjs/value.cpp: | |
(ValueImp::marked): Put a comment about required FIXNUM change. | |
(ValueImp::setGcAllowed): Likewise. | |
(ValueImp::dispatchType): Just call the virtual method for now. | |
(ValueImp::dispatchToPrimitive): Likewise. | |
(ValueImp::dispatchToBoolean): Likewise. | |
(ValueImp::dispatchToNumber): Likewise. | |
(ValueImp::dispatchToString): Likewise. | |
(ValueImp::dispatchToObject): Likewise. | |
(ValueImp::dispatchToUInt32): Likewise. | |
(ValueImp::dispatchGetBase): Likewise. | |
(ValueImp::dispatchGetPropertyName): Likewise. | |
(ValueImp::dispatchGetValue): Likewise. | |
(ValueImp::dispatchPutValue): Likewise. | |
(ValueImp::dispatchDeleteValue): Likewise. | |
2002-08-14 Darin Adler <darin@apple.com> | |
Another pass of tweaks, including one bug fix. | |
* kjs/array_object.cpp: | |
(ArrayInstanceImp::ArrayInstanceImp): Use malloc, not new. | |
(ArrayInstanceImp::get): Use a local variable so we don't rely on the optimizer | |
to avoid indexing twice. | |
(ArrayInstanceImp::hasProperty): Use a local variable, and also check against | |
UndefinedImp::staticUndefined rather than doing type() != UndefinedType. | |
2002-08-14 Maciej Stachowiak <mjs@apple.com> | |
Simplified array handling by using NULL to represent empty cells | |
instead of the Undefined object, so we can use calloc, realloc and | |
memset instead of loops. Inspired by a suggestion of Darin's. | |
* kjs/array_object.cpp: | |
(ArrayInstanceImp::ArrayInstanceImp): | |
(ArrayInstanceImp::~ArrayInstanceImp): | |
(ArrayInstanceImp::get): | |
(ArrayInstanceImp::hasProperty): | |
(ArrayInstanceImp::deleteProperty): | |
(ArrayInstanceImp::setLength): | |
(ArrayInstanceImp::mark): | |
2002-08-14 Maciej Stachowiak <mjs@apple.com> | |
Fix major JavaScript memory leak. run-plt says cvs-base improved | |
by 2% and cvs-js-performance improved by 7%. However, this was | |
within the possible noise level in each case. | |
The fix was to store ValueImp *'s in the array instead of Value | |
objects, since the Value wrapper will keep a ref and make the | |
object immortal. | |
* kjs/array_object.cpp: | |
(ArrayInstanceImp::ArrayInstanceImp): | |
(ArrayInstanceImp::get): | |
(ArrayInstanceImp::put): | |
(ArrayInstanceImp::hasProperty): | |
(ArrayInstanceImp::deleteProperty): | |
(ArrayInstanceImp::setLength): | |
(ArrayInstanceImp::mark): | |
* kjs/array_object.h: | |
2002-08-13 Maciej Stachowiak <mjs@apple.com> | |
Add the ability to determine the classes of live JavaScript | |
objects, to help with leak fixing. | |
* kjs/collector.h, kjs/collector.cpp: | |
(Collector::liveObjectClasses): | |
2002-08-13 Maciej Stachowiak <mjs@apple.com> | |
Small speed improvement. 3% faster on cvs-js-performance, no | |
measurable change on cvs-static-urls. | |
* kjs/collector.cpp: | |
(Collector::collect): Combine 3 loops over all objects into one, | |
to reduce flat time and improve locality of reference. | |
2002-08-12 Darin Adler <darin@apple.com> | |
Speed improvements. 19% faster on cvs-js-performance, 1% on cvs-static-urls. | |
Use global string objects for length and other common property names rather | |
than constantly making and destroying them. Use integer versions of get() and | |
other related calls rather than always making a string. | |
Also get rid of many unneeded constructors, destructors, copy constructors, and | |
assignment operators. And make some functions non-virtual. | |
* kjs/internal.h: | |
* kjs/internal.cpp: | |
(NumberImp::toUInt32): Implement. | |
(ReferenceImp::ReferenceImp): Special case for numeric property names. | |
(ReferenceImp::getPropertyName): Moved guts here from ValueImp. Handle numeric case. | |
(ReferenceImp::getValue): Moved guts here from ValueImp. Handle numeric case. | |
(ReferenceImp::putValue): Moved guts here from ValueImp. Handle numeric case. | |
(ReferenceImp::deleteValue): Added. Handle numeric case. | |
* kjs/array_object.h: | |
* kjs/array_object.cpp: All-new array implementation that stores the elements | |
in a C++ array rather than in a property map. | |
(ArrayInstanceImp::ArrayInstanceImp): Allocate the C++ array. | |
(ArrayInstanceImp::~ArrayInstanceImp): Delete the C++ array. | |
(ArrayInstanceImp::get): Implement both the old version and the new overload that | |
takes an unsigned index for speed. | |
(ArrayInstanceImp::put): Implement both the old version and the new overload that | |
takes an unsigned index for speed. | |
(ArrayInstanceImp::hasProperty): Implement both the old version and the new overload that | |
takes an unsigned index for speed. | |
(ArrayInstanceImp::deleteProperty): Implement both the old version and the new overload that | |
takes an unsigned index for speed. | |
(ArrayInstanceImp::setLength): Added. Used by the above to resize the array. | |
(ArrayInstanceImp::mark): Mark the elements of the array too. | |
(ArrayPrototypeImp::ArrayPrototypeImp): Pass the length to the array instance constructor. | |
* kjs/bool_object.cpp: | |
* kjs/date_object.cpp: | |
* kjs/error_object.cpp: | |
* kjs/function.cpp: | |
* kjs/function_object.cpp: | |
* kjs/math_object.cpp: | |
* kjs/nodes.cpp: | |
* kjs/nodes.h: | |
* kjs/number_object.cpp: | |
* kjs/object_object.cpp: | |
* kjs/regexp_object.cpp: | |
* kjs/string_object.cpp: | |
* kjs/nodes2string.cpp: (SourceStream::operator<<): Add a special case for char now that | |
you can't create a UString from a char implicitly. | |
* kjs/object.h: | |
* kjs/object.cpp: | |
(ObjectImp::get): Call through to the string version if the numeric version is not implemented. | |
(ObjectImp::put): Call through to the string version if the numeric version is not implemented. | |
(ObjectImp::hasProperty): Call through to the string version if the numeric version is not implemented. | |
(ObjectImp::deleteProperty): Call through to the string version if the numeric version is not implemented. | |
* kjs/types.h: | |
* kjs/types.cpp: | |
(Reference::Reference): Added constructors for the numeric property name case. | |
* kjs/ustring.h: Made the constructor that turns a character into a string be explicit so we | |
don't get numbers that turn themselves into strings. | |
* kjs/ustring.cpp: | |
(UString::UString): Detect the empty string case, and use a shared empty string. | |
(UString::find): Add an overload for single character finds. | |
(UString::rfind): Add an overload for single character finds. | |
(KJS::operator==): Fix bug where it would call strlen(0) if the first string was not null. | |
Also handle non-ASCII characters consistently with the rest of the code by casting to unsigned char | |
just in case. | |
* kjs/value.h: Make ValueImp and all subclasses non-copyable and non-assignable. | |
* kjs/value.cpp: | |
(ValueImp::toUInt32): New interface, mainly useful so we can detect array indices and not turn | |
them into strings and back. | |
(ValueImp::toInteger): Use the new toUInt32. Probably can use more improvement. | |
(ValueImp::toInt32): Use the new toUInt32. Probably can use more improvement. | |
(ValueImp::toUInt16): Use the new toUInt32. Probably can use more improvement. | |
(ValueImp::getBase): Remove handling of the Reference case. That's in ReferenceImp now. | |
(ValueImp::getPropertyName): Remove handling of the Reference case. That's in ReferenceImp now. | |
(ValueImp::getValue): Remove handling of the Reference case. That's in ReferenceImp now. | |
(ValueImp::putValue): Remove handling of the Reference case. That's in ReferenceImp now. | |
(ValueImp::deleteValue): Added. Used so we can do delete the same way we do put. | |
=== Alexander-17 === | |
2002-08-09 Darin Adler <darin@apple.com> | |
Some string speedups. Makes sony.com cached 11% faster on Development, but | |
the improvement for Deployment should be greater. | |
* kjs/ustring.h: Made it possible for UChar objects to be uninitialized, which | |
gives a speed boost. Inlined CString's +=, UString's destructor, +=, and +. | |
* kjs/ustring.cpp: | |
(UString::UString): Optimize const char * version, which showed up | |
heavily in performance analysis. Added new two-UString version, which | |
makes the + operator fast. | |
(UString::ascii): Remove thread safety changes. Change static buffer to remember | |
its size, and to always be at least 4096 bytes long; that way we never have to | |
reallocate unless it's for a long string. Also make code to extract the characters | |
significantly faster by getting rid of two pointer dereferences per character. | |
(UString::is8Bit): Avoid one pointer dereference per character. | |
(UString::toDouble): Use ascii() instead of cstring() to avoid copying the string. | |
* kjs/collector.cpp: Remove unneeded APPLE_CHANGES. | |
* kjs/regexp.cpp: Remove ifdefs around some APPLE_CHANGES that we | |
want to keep, because they just fix warnings. | |
* kjs/value.h: Remove obsolete APPLE_CHANGES comment. | |
* JavaScriptCore.pbproj/project.pbxproj: Project Builder decided | |
to move a line around in the file. | |
2002-08-09 Maciej Stachowiak <mjs@apple.com> | |
Fix my last change to actually call the versions of the lock functions | |
that are recursive and initialize as needed. | |
* kjs/internal.cpp: | |
(InterpreterImp::InterpreterImp): | |
(InterpreterImp::clear): | |
(InterpreterImp::evaluate): | |
2002-08-09 Maciej Stachowiak <mjs@apple.com> | |
- fixed 2948835 - JavaScriptCore locking is too fine grained, makes it too slow | |
* kjs/collector.cpp: | |
(Collector::allocate): | |
(Collector::collect): | |
(Collector::finalCheck): | |
(Collector::numInterpreters): | |
(Collector::numGCNotAllowedObjects): | |
(Collector::numReferencedObjects): | |
* kjs/collector.h: | |
* kjs/internal.cpp: | |
(initializeInterpreterLock): | |
(lockInterpreter): | |
(unlockInterpreter): | |
(Parser::parse): | |
(InterpreterImp::InterpreterImp): | |
(InterpreterImp::clear): | |
(InterpreterImp::evaluate): | |
* kjs/value.cpp: | |
(ValueImp::ValueImp): | |
(ValueImp::setGcAllowed): | |
=== milestone 0.5 === | |
=== Alexander-16 === | |
2002-08-05 Maciej Stachowiak <mjs@apple.com> | |
- fixed 3007072 - need to be able to build fat | |
* JavaScriptCore.pbproj/project.pbxproj: Fixed DeploymentFat build. | |
=== Alexander-15 === | |
2002-07-25 Darin Adler <darin@apple.com> | |
* JavaScriptCore.pbproj/project.pbxproj: Add DeploymentFat build style. | |
=== Alexander-14 === | |
2002-07-21 Darin Adler <darin@apple.com> | |
* kjs/*: Roll KDE 3.0.2 changes in. Also switch to not using APPLE_CHANGES | |
for some of the changes that we definitely want to contribute upstream. | |
2002-07-21 Maciej Stachowiak <mjs@apple.com> | |
* Makefile.am: Remove products from symroots on `make clean'. | |
=== Alexander-13 === | |
2002-07-13 Darin Adler <darin@apple.com> | |
* Makefile.am: Don't use embed.am any more. | |
* JavaScriptCore.pbproj/project.pbxproj: Use embed-into-alex instead | |
of make embed. | |
2002-07-12 Darin Adler <darin@apple.com> | |
* kjs/ustring.h: Since <sys/types.h> includes ushort and uint now, had | |
to change the includes here to be compatible with that. | |
2002-07-11 Darin Adler <darin@apple.com> | |
* JavaScriptCore.pbproj/project.pbxproj: To make the build of | |
WebCore work without using -I to peek at JavaScriptCore sources, | |
made all the Public sources Private so they are all in one directory. | |
Also, made lookup.h be Private. | |
=== Alexander-11 === | |
=== Alexander-10 === | |
2002-06-25 Darin Adler <darin@apple.com> | |
* JavaScriptCore.pbproj/project.pbxproj: Re-add -Wmissing-format-attribute. | |
=== Alexander-9 === | |
2002-06-19 Kenneth Kocienda <kocienda@apple.com> | |
I just played alchemical voodoo games with the linker to | |
make all our frameworks and Alexander prebound. | |
* JavaScriptCore.pbproj/project.pbxproj | |
2002-06-15 Darin Adler <darin@apple.com> | |
* JavaScriptCore.pbproj/project.pbxproj: Removed explicit PFE_FILE_C_DIALECTS now that | |
Project Builder handles this automatically. Removed explicit USE_GCC3 since that's implicit | |
now. Also, since this project is all C++, only use WARNING_CFLAGS with flags that are appropriate | |
for C++; don't bother breaking out C vs. C++. | |
* kjs/collector.cpp: Now that the system warning is fixed, use PTHREAD_MUTEX_INITIALIZER and | |
PTHREAD_COND_INITIALIZER. | |
* kjs/internal.cpp: Use PTHREAD_MUTEX_INITIALIZER. | |
* kjs/ustring.cpp: Use PTHREAD_ONCE_INIT. | |
2002-06-15 Maciej Stachowiak <mjs@apple.com> | |
Made Development build mode mean what Unoptimized used to mean. Removed Unoptimized build mode. | |
Added a Mixed build mode which does what Deployment used to. All this to fix: | |
Radar 2955367 - Change default build style to "Unoptimized" | |
* JavaScriptCore.pbproj/project.pbxproj: | |
2002-06-12 Darin Adler <darin@apple.com> | |
* kjs/nodes.cpp: (Node::finalCheck): A bit of APPLE_CHANGES so we | |
can compile with KJS_DEBUG_MEM defined if we want to. | |
2002-06-10 Darin Adler <darin@apple.com> | |
Merged in changes from KDE 3.0.1. | |
* kjs/collector.cpp: | |
* kjs/date_object.cpp: | |
* kjs/function.cpp: | |
* kjs/internal.cpp: | |
* kjs/lookup.h: | |
* kjs/object.cpp: | |
* kjs/operations.cpp: | |
* kjs/regexp.cpp: | |
* kjs/regexp_object.cpp: | |
* kjs/regexp_object.h: | |
* kjs/string_object.cpp: | |
* kjs/testkjs.cpp: | |
* kjs/ustring.cpp: | |
* kjs/value.cpp: | |
* kjs/value.h: | |
Do the merge, and add APPLE_CHANGES as needed to make things compile. | |
* kjs/date_object.lut.h: Re-generated. | |
2002-06-07 Darin Adler <darin@apple.com> | |
* Makefile.am: Use new shared "embed.am" file so we don't need four copies of | |
the embedding rules for WebFoundation, JavaScriptCore, WebCore, and WebKit. | |
2002-06-07 Darin Adler <darin@apple.com> | |
* JavaScriptCore.pbproj/project.pbxproj: Don't use any warning flags for C that won't work | |
for C++, because PFE uses the C warning flags on a C++ compile. | |
=== Alexander-8 === | |
2002-06-06 Darin Adler <darin@apple.com> | |
* JavaScriptCore.pbproj/project.pbxproj: Update warning flags for compatibility | |
with new C++. | |
2002-06-05 Darin Adler <darin@apple.com> | |
Fix problem seen as build failure on Jersey. | |
* Makefile.am: JavaScriptCore-stamp needs to be a dependency, not a | |
source file, because it doesn't have a corresponding object file. | |
Making it a dependency causes things to compile in the right order. | |
2002-06-04 Darin Adler <darin@apple.com> | |
Improve the speed of the JavaScript string append operation by growing | |
the capacity so we don't need to reallocate the string every time. | |
Also fix script execution so it doesn't use recursion to advance from | |
one statement to the next, using iteration instead. | |
* Makefile.am: Stop using BUILT_SOURCES to build JavaScriptCore-stamp, | |
because this causes the Project Builder project to build *before* the | |
subdir. Intead, use an all-am rule in a way more similar to all our | |
other directories. | |
* kjs/grammar.y: Link the SourceElementsNode in the opposite direction, | |
so we can walk the list and execute each element instead of using | |
recursion to reverse the list. | |
* kjs/grammar.cpp: Check in new generated file. | |
* kjs/nodes.cpp: | |
(SourceElementsNode::execute): | |
(SourceElementsNode::processFuncDecl): | |
(SourceElementsNode::processVarDecls): | |
Use loops instead of recursion. | |
* kjs/ustring.h: Don't initialize all UChar objects to 0. This was | |
wasting a *huge* amount of time. | |
* kjs/ustring.cpp: | |
(UString::Rep::create): Add a "capacity" along with the length. | |
(UString::append): Include 50% extra capacity when appending. | |
(UString::operator=): Reuse the buffer if possible rather than | |
always creating a new one. | |
2002-06-02 Darin Adler <darin@apple.com> | |
* COPYING.LIB: Fix line endings. It was using CRs. | |
2002-05-31 Darin Adler <darin@apple.com> | |
* Makefile.am: | |
* kjs/Makefile.am: | |
Slight improvements to rules that touch stamp files. | |
2002-05-28 Maciej Stachowiak <mjs@apple.com> | |
* THANKS: Demangled. | |
=== Alexander-7 === | |
2002-05-24 Maciej Stachowiak <mjs@apple.com> | |
Added license and acknowledgements. | |
* AUTHORS: Added. | |
* COPYING.LIB: Added. | |
* THANKS: Added. | |
=== 0.3 === | |
=== Alexander-6 === | |
=== Alexander-5 === | |
=== Alexander-4 === | |
=== JavaScriptCore-5 === | |
2002-05-21 Maciej Stachowiak <mjs@apple.com> | |
Reviewed by: Richard Williamson | |
Fixed Radar 2928775 - Sherlock crashes sitting in stocks channel | |
* kjs/internal.cpp: | |
(InterpreterImp::InterpreterImp): Set the interp pointer earlier, | |
in case garbage collection takes place while creating the global | |
values. | |
2002-05-15 Darin Adler <darin@apple.com> | |
Reviewed by: Maciej Stachowiak | |
* Makefile.am: | |
Use all-am and clean-am instead of all and clean because it's better and | |
to make "make check" at the top level work right. | |
2002-05-13 Darin Adler <darin@apple.com> | |
Reviewed by: Maciej Stachowiak | |
* kjs/value.h: Fix comment typos. | |
=== JavaScriptCore-4 === | |
2002-05-10 Maciej Stachowiak <mjs@apple.com> | |
Reviewed by: Ken Kocienda and Darin Adler | |
Fixed the following bug: | |
Radar 2890573 - JavaScriptCore needs to be thread-safe | |
Actually this is only a weak form of thread-safety - you can safely | |
use different interpreters from different threads at the same | |
time. If you try to use a single interpreter object from multiple | |
threads, you need to provide your own locking. | |
* kjs/collector.h, kjs/collector.cpp: | |
(Collector::lock, Collector::unlock): Trivial implementation of a | |
recursive mutex. | |
(Collector::allocate): Lock around the body of this function. | |
(Collector::collect): Likewise. | |
(Collector::finalCheck): Likewise. | |
(Collector::numInterpreters): Likewise. | |
(Collector::numGCNotAllowedObjects): Likewise. | |
(Collector::numReferencedObjects): Likewise. | |
* kjs/internal.cpp: | |
(Parser::parse): use a mutex to lock around the whole parse, since | |
it uses a bunch of global state. | |
(InterpreterImp::InterpreterImp): Grab the Collector lock here, | |
both the mutually exclude calls to the body of this function, and | |
to protect the s_hook static member which the collector pokes at. | |
(InterpreterImp::clear): Likewise. | |
* kjs/ustring.cpp: | |
(statBufferKeyCleanup, statBufferKeyInit, UString::ascii): Convert | |
use of static variable | |
* kjs/value.cpp: | |
(ValueImp::ValueImp, ValueImp::mark, ValueImp::marked, | |
ValueImp::setGcAllowed): Grab the GC lock around any flag changes. | |
=== Alexander-3 === | |
2002-05-08 Darin Adler <darin@apple.com> | |
* kjs/collector.h: | |
* kjs/collector.cpp: | |
(Collector::numInterpreters): | |
(Collector::numGCNotAllowedObjects): | |
(Collector::numReferencedObjects): | |
Add three new functions so we can see a bit more about leaking JavaScriptCore. | |
2002-05-06 Darin Adler <darin@apple.com> | |
* JavaScriptCorePrefix.h: Added. | |
* JavaScriptCore.pbproj/project.pbxproj: Use PFE precompiling. | |
Also switch from xNDEBUG to NDEBUG. | |
=== Alexander 0.3c2 (v1) === | |
2002-04-18 Darin Adler <darin@apple.com> | |
* JavaScriptCore.pbproj/project.pbxproj: Oops. Take out -Wstrict-prototypes, put back | |
-Wmissing-prototypes. | |
2002-04-18 Darin Adler <darin@apple.com> | |
* JavaScriptCore.pbproj/project.pbxproj: Take out -Wmissing-prototypes | |
because system headers are triggering it when we don't have | |
precompiled headers on. | |
2002-04-18 Darin Adler <darin@apple.com> | |
Reviewed by Maciej | |
* JavaScriptCore.pbproj/project.pbxproj: Turn on gcc3 and the same set of warnings | |
as in the rest of Labyrinth (see top level ChangeLog for details). | |
2002-04-17 Maciej Stachowiak <mjs@apple.com> | |
Reviewed by: Darin Adler <darin@apple.com> | |
* kjs/testkjs.cpp: Don't include <iostream.h> to avoid gcc3 | |
warning. | |
2002-04-15 Darin Adler <darin@apple.com> | |
Reviwed by: Maciej Stachowiak <mjs@apple.com> | |
* kjs/internal.cpp: | |
* kjs/property_map.cpp: | |
* kjs/ustring.h: | |
Removed some unneeded <config.h> includes so we are more similar | |
to the real KDE sources. | |
2002-04-15 Darin Adler <darin@apple.com> | |
Reviwed by: Maciej Stachowiak <mjs@apple.com> | |
Merged changes from KDE 3.0 final and did some build fixes. | |
* JavaScriptCore.pbproj/project.pbxproj: Added nodes2string.cpp. | |
* kjs/grammar.*: Regenerated. | |
* kjs/*.lut.h: Regenerated. | |
2002-04-08 Darin Adler <darin@apple.com> | |
Reviwed by: Maciej Stachowiak <mjs@apple.com> | |
* JavaScriptCore.pbproj/project.pbxproj: Re-added -Wno-format-y2k. | |
2002-04-04 Darin Adler <darin@apple.com> | |
* JavaScriptCore.pbproj/project.pbxproj: Add an Unoptimized build | |
style: exactly like Development except without the -O. | |
2002-04-03 Darin Adler <darin@apple.com> | |
* kjs/Makefile.am: Gratuitous cleanup. | |
2002-04-02 Darin Adler <darin@apple.com> | |
* JavaScriptCore.pbproj/project.pbxproj: Update flags as I did for | |
WebFoundation. | |
2002-04-02 Maciej Stachowiak <mjs@apple.com> | |
* JavaScriptCore.pbproj/project.pbxproj: Pass -Wno-format-y2k so | |
the project builds with gcc3. | |
* kjs/nodes.cpp: Avoid including an obsolete header to avoid | |
warning with gcc3. | |
2002-04-02 Darin Adler <darin@apple.com> | |
* kjs/property_map.cpp: (PropertyMap::~PropertyMap): Deallocate the | |
map by calling clear so we don't leak the entire map. | |
2002-04-02 Darin Adler <darin@apple.com> | |
* kjs/internal.cpp: (InterpreterImp::globalClear): Add code to | |
deallocate and null out emptyList, because once the last interpreter | |
is destroyed there's nothing to keep it from being garbage collected. | |
2002-04-01 Darin Adler <darin@apple.com> | |
Got rid of KWQDef.h because it's dangerous to have two files with | |
the same name and different contents. | |
* JavaScriptCore.pbproj/project.pbxproj: | |
* kjs/KWQDef.h: Removed. | |
* kjs/ustring.h: Defines unsigned int types inline now. | |
2002-03-30 Maciej Stachowiak <mjs@apple.com> | |
Fixed Radar 2891272 (JavaScript crashes loading quicktime.com and | |
apple.com) | |
* kjs/object.cpp: (ObjectImp::~ObjectImp): Don't call setGCAlloc | |
on object internals pointed to, because they may have already been | |
collected by the time this object is collected, and in that case | |
we would corrupt the malloc arena. | |
* Makefile.am: Make the stamp file depend on all the sources and | |
headers so the framework gets rebuilt properly. | |
* JavaScriptCore.pbproj/project.pbxproj: Some random numbers moved | |
around. No idea what I really changed. | |
2002-03-30 Darin Adler <darin@apple.com> | |
* kjs/grammar.y: Took out Id tag so we won't constantly need to | |
update grammar.cpp. | |
* kjs/grammar.cpp: Regenerated without Id tag. | |
* .cvsignore: Ignore some additional autogenerated files. | |
* kjs/.cvsignore: Ignore some additional autogenerated files. | |
2002-03-30 Maciej Stachowiak <mjs@apple.com> | |
* JavaScriptCore.pbproj/project.pbxproj: Install some of the | |
headers. | |
2002-03-30 Maciej Stachowiak <mjs@apple.com> | |
Converted JavaScriptCore to build with Project Builder, in | |
preparation for B&I submission. | |
* English.lproj/InfoPlist.strings: Added. | |
* JavaScriptCore.pbproj/.cvsignore: Added. | |
* JavaScriptCore.pbproj/project.pbxproj: Added. | |
* .cvsignore: Update the set of ignored things. | |
* Makefile.am: Hand off to PB for the main build, but still handle | |
the generated files and the test program. | |
* kjs/Makefile.am: Don't build anything except the generated | |
source files. | |
* kjs/KWQDef.h, kjs/config.h: Added minimal versions of these | |
files to get kjs to build. | |
Check in all the genrated files, since Project Builder isn't up to | |
the task of handling built sources: | |
* kjs/array_object.lut.h: Added. | |
* kjs/date_object.lut.h: Added. | |
* kjs/grammar.cpp: Added. | |
* kjs/grammar.cpp.h: Added. | |
* kjs/grammar.h: Added. | |
* kjs/lexer.lut.h: Added. | |
* kjs/math_object.lut.h: Added. | |
* kjs/number_object.lut.h: Added. | |
* kjs/string_object.lut.h: Added. | |
* kjs/.cvsignore: Update set of ignored things. | |
2002-03-28 Maciej Stachowiak <mjs@apple.com> | |
* kjs/kjs-test.chk: Update output for new test results. | |
2002-03-26 Maciej Stachowiak <mjs@apple.com> | |
Set up kjs to build by itself into libJavaScriptCore.dylib. | |
* .cvsignore: Added. | |
* Makefile.am: Added. | |
* dummy.cpp: Added. | |
* kjs/.cvsignore: Added. |