|         |      1 2002-12-03  Maciej Stachowiak  <mjs@apple.com> | 
|         |      2  | 
|         |      3         Reviewed by: Darin Adler | 
|         |      4  | 
|         |      5 	- fixed Deployment build. | 
|         |      6 	 | 
|         |      7         * kjs/dtoa.cpp: Work around warnings. | 
|         |      8  | 
|         |      9 2002-12-03  Maciej Stachowiak  <mjs@apple.com> | 
|         |     10  | 
|         |     11 	- fixed 3114790 - Gamespot reviews pages badly mis-rendering | 
|         |     12 	because floating point numbers format wide | 
|         |     13  | 
|         |     14 	Reviewed by: David Hyatt | 
|         |     15 	 | 
|         |     16 	* kjs/dtoa.cpp: Imported float <--> string conversion routines | 
|         |     17 	from David M. Gay. I changed this to fix warnings and avoid | 
|         |     18 	colliding with names of standard library functions. | 
|         |     19         * kjs/dtoa.h: Added a header I made up for dtoa.cpp | 
|         |     20         * kjs/ustring.cpp: | 
|         |     21         (UString::from): Use new double to string routine (kjs_strtod). | 
|         |     22         (UString::toDouble): Use new string to double routine (kjs_dtoa). | 
|         |     23         * JavaScriptCore.pbproj/project.pbxproj: Added new files | 
|         |     24  | 
|         |     25 2002-11-27  John Sullivan  <sullivan@apple.com> | 
|         |     26  | 
|         |     27         * kjs/collector.cpp: | 
|         |     28 	removed puts("COLLECT") leftover debugging spam that was | 
|         |     29 	buggin' gramps | 
|         |     30  | 
|         |     31 === Alexander-34 === | 
|         |     32  | 
|         |     33 2002-11-26  Maciej Stachowiak  <mjs@apple.com> | 
|         |     34  | 
|         |     35 	Change ActivationImp to be allocated via the garbage collector | 
|         |     36 	again instead of on the stack. This fixes the following four | 
|         |     37 	regressions but sadly it causes a 6% performance hit. It's | 
|         |     38 	probably possibly to reduce the hit a bit by being smarter about | 
|         |     39 	inlining and the way the marking list variant is implemented, but | 
|         |     40 	I'll look into that later. | 
|         |     41  | 
|         |     42 	- fixed 3111500 - REGRESSION: crash in "KJS::ScopeChain::mark()" on www.posci.com | 
|         |     43 	- fixed 3111145 - REGRESSION: reproducible crash in KJS hashtable lookup at time.com | 
|         |     44 	- fixed 3110897 - REGRESSION: javascript crasher on http://bmwgallery.tripod.com/ | 
|         |     45 	- fixed 3109987 - REGRESSION: Reproducible crash in KJS ObjectImp at live365.com | 
|         |     46 	 | 
|         |     47 	Also: | 
|         |     48 	 | 
|         |     49 	- improved DEBUG_COLLECTOR mode a bit by never giving memory back | 
|         |     50 	to the system. | 
|         |     51 	 | 
|         |     52         * kjs/collector.cpp: | 
|         |     53         * kjs/context.h: | 
|         |     54         * kjs/function.cpp: | 
|         |     55         (ActivationImp::ActivationImp): | 
|         |     56         (ActivationImp::mark): | 
|         |     57         (ActivationImp::createArgumentsObject): | 
|         |     58         * kjs/function.h: | 
|         |     59         * kjs/internal.cpp: | 
|         |     60         (ContextImp::ContextImp): | 
|         |     61         (ContextImp::mark): | 
|         |     62         * kjs/list.cpp: | 
|         |     63         * kjs/list.h: | 
|         |     64         * kjs/value.cpp: | 
|         |     65         (Value::Value): | 
|         |     66  | 
|         |     67 2002-11-26  Darin Adler  <darin@apple.com> | 
|         |     68  | 
|         |     69         * kjs/property_map.cpp: | 
|         |     70 	(PropertyMap::save): Look at the attributes the same way in the single hash entry | 
|         |     71 	case as in the actual hash table case. Change the rule for which attributes to save | 
|         |     72 	to "attributes that don't have the ReadOnly, DontEnum, or Function bit set". | 
|         |     73         Also fix bug where saving an empty property map would leave the count set to the old value. | 
|         |     74  | 
|         |     75 2002-11-26  Richard Williamson   <rjw@apple.com> | 
|         |     76  | 
|         |     77         Remove debugging code.  Could be cause of performance regresssion. | 
|         |     78         * kjs/nodes.cpp: | 
|         |     79         (FunctionCallNode::evaluate): | 
|         |     80  | 
|         |     81         Restire attributes correctly. | 
|         |     82         * kjs/property_map.cpp: | 
|         |     83  | 
|         |     84 2002-11-25  Richard Williamson   <rjw@apple.com> | 
|         |     85  | 
|         |     86         Use delete[] (not delete) operator to delete array. | 
|         |     87          | 
|         |     88         * kjs/property_map.cpp: | 
|         |     89  | 
|         |     90 2002-11-25  Richard Williamson   <rjw@apple.com> | 
|         |     91  | 
|         |     92         Added debugging info.  Fixed property map save function. | 
|         |     93          | 
|         |     94         * kjs/nodes.cpp: | 
|         |     95         (FunctionCallNode::evaluate): | 
|         |     96         * kjs/property_map.cpp: | 
|         |     97  | 
|         |     98 2002-11-25  Richard Williamson   <rjw@apple.com> | 
|         |     99  | 
|         |    100         Changes for back/forward.  Currently disabled. | 
|         |    101  | 
|         |    102         * kjs/property_map.cpp: | 
|         |    103         * kjs/property_map.h: | 
|         |    104  | 
|         |    105 2002-11-25  Darin Adler  <darin@apple.com> | 
|         |    106  | 
|         |    107         * kjs/property_map.cpp: Rearrange code a little bit and tweak indentation. | 
|         |    108 	This might provide a tiny speedup because we don't look at the single entry | 
|         |    109 	any more in cases where the _table pointer is non-0. | 
|         |    110  | 
|         |    111 2002-11-24  Darin Adler  <darin@apple.com> | 
|         |    112  | 
|         |    113 	- changed ScopeChain to not ref each item in the chain, and use | 
|         |    114         marking instead; gains 1% on JavaScript iBench | 
|         |    115  | 
|         |    116         * kjs/context.h: Return chain by reference. | 
|         |    117         * kjs/internal.cpp: (ContextImp::mark): Mark the scope chain. | 
|         |    118         * kjs/interpreter.cpp: (Context::scopeChain): Return chain by reference. | 
|         |    119         * kjs/interpreter.h: Make some Context methods inline. | 
|         |    120         * kjs/nodes.cpp: | 
|         |    121         (ThisNode::evaluate): Get at ContextImp directly. | 
|         |    122         (ResolveNode::evaluateReference): Ditto. | 
|         |    123         (VarDeclNode::evaluate): Ditto. | 
|         |    124         (VarDeclNode::processVarDecls): Ditto. | 
|         |    125         (FuncDeclNode::processFuncDecl): Pass ScopeChain directly to avoid copying. | 
|         |    126         (FuncExprNode::evaluate): Ditto. | 
|         |    127         * kjs/object.cpp: Make scope and setScope inline. | 
|         |    128         * kjs/object.h: Make scope return a chain by reference. Make scope and | 
|         |    129 	setScope both be inline. Use a normal ScopeChain instead of NoRefScopeChain | 
|         |    130 	since they are now one and the same. | 
|         |    131         * kjs/scope_chain.cpp: Remove all the code to ref and deref objects. | 
|         |    132 	Merge NoRefScopeChain in with ScopeChain since they both work this way now. | 
|         |    133         * kjs/scope_chain.h: Remove NoRefScopeChain and simplify the ref counts. | 
|         |    134 	Make more functions inline. | 
|         |    135  | 
|         |    136 2002-11-24  Maciej Stachowiak  <mjs@apple.com> | 
|         |    137  | 
|         |    138 	- fixed 3098356 - Hard hang on movie search at www.movietickets.com | 
|         |    139 	 | 
|         |    140         * kjs/string_object.cpp: | 
|         |    141         (StringProtoFuncImp::call): When doing a regexp replacement that | 
|         |    142 	results in an empty match, always move on to the next character | 
|         |    143 	after doing the replacement. The previous code would hit an | 
|         |    144 	infinite loop if an initial empty match was replaced with the | 
|         |    145 	empty string. | 
|         |    146  | 
|         |    147 2002-11-24  Maciej Stachowiak  <mjs@apple.com> | 
|         |    148  | 
|         |    149 	- fixed 3095446 - Crash on AppleScript page due to very long argument list | 
|         |    150 	 | 
|         |    151         * kjs/grammar.y: Don't try to construct the argument list in the | 
|         |    152 	right order, since that blows out the parser stack. | 
|         |    153 	* kjs/nodes.cpp: | 
|         |    154         (ArgumentsNode::ArgumentsNode): Instead reverse the argument list | 
|         |    155 	here. | 
|         |    156         * kjs/nodes.h: Make ArgumentsNode a friend of ArgumentListNode. | 
|         |    157         * kjs/grammar.cpp: Updated from grammar.y. | 
|         |    158  | 
|         |    159 2002-11-23  Maciej Stachowiak  <mjs@apple.com> | 
|         |    160  | 
|         |    161 	- completed Darin's mostly-fix for 3037795 - Resource use | 
|         |    162 	increases when accessing very high index value in array | 
|         |    163  | 
|         |    164 	The two missing pieces were handling sparse properties when | 
|         |    165 	shrinking the array, and when sorting. Thse are now both taken | 
|         |    166 	care of. | 
|         |    167 	 | 
|         |    168         * kjs/array_instance.h: | 
|         |    169         * kjs/array_object.cpp: | 
|         |    170         (ArrayInstanceImp::put): | 
|         |    171         (ArrayInstanceImp::deleteProperty): | 
|         |    172         (ArrayInstanceImp::resizeStorage): | 
|         |    173         (ArrayInstanceImp::setLength): | 
|         |    174         (ArrayInstanceImp::sort): | 
|         |    175         (ArrayInstanceImp::pushUndefinedObjectsToEnd): | 
|         |    176         * kjs/identifier.h: | 
|         |    177         * kjs/object.h: | 
|         |    178         * kjs/property_map.cpp: | 
|         |    179         * kjs/property_map.h: | 
|         |    180         * kjs/reference_list.cpp: | 
|         |    181         (ReferenceList::append): | 
|         |    182         (ReferenceList::length): | 
|         |    183         * kjs/reference_list.h: | 
|         |    184         * kjs/ustring.cpp: | 
|         |    185         (UString::toUInt32): | 
|         |    186         * kjs/ustring.h: | 
|         |    187  | 
|         |    188 2002-11-23  Maciej Stachowiak  <mjs@apple.com> | 
|         |    189  | 
|         |    190 	Numerous collector changes for a net gain of 3% on JS ibench: | 
|         |    191  | 
|         |    192 	- Replaced per-block bitmap with free list. | 
|         |    193 	- Increased number of empty blocks kept around to 2. | 
|         |    194 	- Doubled block size. | 
|         |    195 	- When scanning heap in collector, skip scanning the rest of a | 
|         |    196 	block as soon as we see as many live cells as the the number of | 
|         |    197 	used cells it had originally. | 
|         |    198  | 
|         |    199 	Also the following collector changes unrelated to performance: | 
|         |    200  | 
|         |    201 	- Made constants `const int' instead of `static const int'. | 
|         |    202 	- Miscellaneous code cleanup. | 
|         |    203 		 | 
|         |    204         * kjs/collector.cpp: | 
|         |    205  | 
|         |    206 	- Added debugging mode enabled by defining DEBUG_GC which asserts | 
|         |    207 	when a destroyed ValueImp | 
|         |    208  | 
|         |    209         * kjs/internal.cpp: | 
|         |    210         (ContextImp::mark): | 
|         |    211         * kjs/value.cpp: | 
|         |    212         (Value::Value): | 
|         |    213         * kjs/value.h: | 
|         |    214 	* kjs/config.h: | 
|         |    215 	 | 
|         |    216 2002-11-22  Darin Adler  <darin@apple.com> | 
|         |    217  | 
|         |    218 	- replaced List class with a vector rather than a linked list, changed it | 
|         |    219 	to use a pool of instances instead of all the nodes allocated off of the | 
|         |    220 	heap; gives 10% gain on iBench | 
|         |    221  | 
|         |    222         * kjs/list.h: Complete rewrite. | 
|         |    223         * kjs/list.cpp: Ditto. | 
|         |    224  | 
|         |    225         * kjs/array_object.cpp: (compareWithCompareFunctionForQSort): Go back to | 
|         |    226 	doing a clear and two appends here. Fast with the new list implementation. | 
|         |    227  | 
|         |    228         * kjs/collector.h: Remove _COLLECTOR hack and just make rootObjectClasses | 
|         |    229 	return a const void *. | 
|         |    230         * kjs/collector.cpp: Remove _COLLECTOR hack, and various other minor tweaks. | 
|         |    231  | 
|         |    232 2002-11-22  Darin Adler  <darin@apple.com> | 
|         |    233  | 
|         |    234 	- prepare to reimplement KJS::List; move to its own file, add statistics | 
|         |    235  | 
|         |    236         * kjs/function_object.cpp: (FunctionProtoFuncImp::call): Use new copyTail() | 
|         |    237 	function rather than copy() and removeFirst(). | 
|         |    238  | 
|         |    239         * kjs/identifier.cpp: Add statistics, off by default. | 
|         |    240         * kjs/property_map.cpp: Add statistics, off by default. | 
|         |    241  | 
|         |    242         * kjs/list.cpp: Added. Moved code here. To be rewritten. | 
|         |    243         * kjs/list.h: Added. Moved interface here. To be rewritten. | 
|         |    244  | 
|         |    245         * kjs/types.cpp: Removed. | 
|         |    246         * kjs/types.h: Now just an empty header that includes other headers. | 
|         |    247  | 
|         |    248         * JavaScriptCore.pbproj/project.pbxproj: Add new files, rearrange. | 
|         |    249  | 
|         |    250 2002-11-22  Maciej Stachowiak  <mjs@apple.com> | 
|         |    251  | 
|         |    252 	- reduce cell size to 56 bytes from 64, now that nearly all | 
|         |    253 	objects fit in that size. .5% speed gain and probably some | 
|         |    254 	footprint gain. | 
|         |    255 	 | 
|         |    256         * kjs/collector.cpp: Change CELL_SIZE from 64 to 56. | 
|         |    257  | 
|         |    258 2002-11-22  Darin Adler  <darin@apple.com> | 
|         |    259  | 
|         |    260 	- change ScopeChain to be a singly linked list shares tails, gives 11% gain on iBench | 
|         |    261  | 
|         |    262         * kjs/context.h: | 
|         |    263         (ContextImp::pushScope): Make inline, use push instead of prepend, and pass imp pointer. | 
|         |    264         (ContextImp::popScope): Make inline, use pop instead of removeFirst. | 
|         |    265         * kjs/function.cpp: (DeclaredFunctionImp::DeclaredFunctionImp): No need to copy. | 
|         |    266         * kjs/function_object.cpp: (FunctionObjectImp::construct): Use push instead of | 
|         |    267 	prepend, and pass imp pointer. | 
|         |    268         * kjs/internal.cpp: (ContextImp::ContextImp): Use clear, push instead of prepend, | 
|         |    269 	and pass imp pointers. | 
|         |    270         * kjs/nodes.cpp: (ResolveNode::evaluateReference): Use isEmpty, pop, and top instead | 
|         |    271 	of ScopeChainIterator. | 
|         |    272         * kjs/object.h: Change _scope to be a NoRefScopeChain. | 
|         |    273         * kjs/object.cpp: No need to initialize _scope any more, since it's not a NoRefScopeChain. | 
|         |    274  | 
|         |    275         * kjs/scope_chain.h: Rewrite, different implementation and interface. | 
|         |    276         * kjs/scope_chain.cpp: More of the same. | 
|         |    277  | 
|         |    278 2002-11-22  Maciej Stachowiak  <mjs@apple.com> | 
|         |    279  | 
|         |    280 	- a simple change for .4% gain on ibench - instead of unmarking | 
|         |    281 	all objects at the start of collection, instead unmark as part of | 
|         |    282 	the sweep phase | 
|         |    283 	 | 
|         |    284         * kjs/collector.cpp: | 
|         |    285         (Collector::collect): Remove separate unmarking pass and instead | 
|         |    286 	unmark the objects that don't get collected during the sweep | 
|         |    287 	phase. | 
|         |    288  | 
|         |    289 2002-11-21  Darin Adler  <darin@apple.com> | 
|         |    290  | 
|         |    291 	- stop garbage collecting the ActivationImp objects, gets 3% on iBench | 
|         |    292 	- pave the way to separate the argument lists from scope chains | 
|         |    293  | 
|         |    294         * kjs/context.h: Added. Moved ContextImp here so it can use things defined | 
|         |    295 	in function.h | 
|         |    296  | 
|         |    297         * kjs/scope_chain.h: Added. Starting as a copy of List, to be improved. | 
|         |    298         * kjs/scope_chain.cpp: Added. Starting as a copy of List, to be improved. | 
|         |    299  | 
|         |    300         * JavaScriptCore.pbproj/project.pbxproj: Rearranged things, added context.h. | 
|         |    301  | 
|         |    302         * kjs/function.cpp: | 
|         |    303         (FunctionImp::call): Pass InterpreterImp, not ExecState, to ContextImp. | 
|         |    304         (DeclaredFunctionImp::DeclaredFunctionImp): List -> ScopeChain. | 
|         |    305         (ActivationImp::createArgumentsObject): ArgumentList -> List. | 
|         |    306         (GlobalFuncImp::call): Pass InterpreterImp, not an ExecState, to ContextImp. | 
|         |    307         * kjs/function.h: List -> ScopeChain. | 
|         |    308         * kjs/function_object.cpp: (FunctionObjectImp::construct): List -> ScopeChain. | 
|         |    309         * kjs/internal.cpp: | 
|         |    310         (ContextImp::ContextImp): Set the context in the interpreter. | 
|         |    311         (ContextImp::~ContextImp): Set the context in the interpreter to the caller. | 
|         |    312         (ContextImp::mark): Mark all the activation objects. | 
|         |    313         (InterpreterImp::InterpreterImp): Initialize context to 0. | 
|         |    314         (InterpreterImp::mark): Mark the top context. | 
|         |    315         (InterpreterImp::evaluate): Pass InterpreterImp to ContextImp. | 
|         |    316         * kjs/internal.h: Move ContextImp to its own header. Add setContext to InterpreterImp. | 
|         |    317         * kjs/interpreter.cpp: (Context::scopeChain): List -> ScopeChain. | 
|         |    318         * kjs/interpreter.h: List -> ScopeChain. | 
|         |    319         * kjs/nodes.cpp: | 
|         |    320         (ResolveNode::evaluateReference): List -> ScopeChain. | 
|         |    321         (FuncDeclNode::processFuncDecl): List -> ScopeChain. | 
|         |    322         (FuncExprNode::evaluate): List -> ScopeChain. | 
|         |    323         * kjs/object.cpp: List -> ScopeChain. | 
|         |    324         * kjs/object.h: List -> ScopeChain. | 
|         |    325  | 
|         |    326         * kjs/types.h: Remove needsMarking features from List. | 
|         |    327         * kjs/types.cpp: Ditto. | 
|         |    328  | 
|         |    329 2002-11-21  Maciej Stachowiak  <mjs@apple.com> | 
|         |    330  | 
|         |    331 	- reduced the size of PropertyMap by storing sizes and such in the | 
|         |    332 	dynamically allocated part of the object to reduce the size of | 
|         |    333 	ObjectImp - .5% speed improvement on JS iBench. | 
|         |    334 	 | 
|         |    335         * kjs/property_map.cpp: | 
|         |    336         * kjs/property_map.h: | 
|         |    337  | 
|         |    338 2002-11-21  Maciej Stachowiak  <mjs@apple.com> | 
|         |    339  | 
|         |    340         * Makefile.am: Pass symroots for this tree to pbxbuild. | 
|         |    341  | 
|         |    342 === Alexander-33 === | 
|         |    343  | 
|         |    344 2002-11-21  Darin Adler  <darin@apple.com> | 
|         |    345  | 
|         |    346         * kjs/property_map.cpp: More assertions. | 
|         |    347  | 
|         |    348 2002-11-21  Darin Adler  <darin@apple.com> | 
|         |    349  | 
|         |    350         * kjs/property_map.cpp: Turn that consistency check back off. | 
|         |    351  | 
|         |    352 2002-11-21  Darin Adler  <darin@apple.com> | 
|         |    353  | 
|         |    354 	- someone somewhere must be defining a macro named check, causing a compile failure in WebCore | 
|         |    355  | 
|         |    356 	Rename check() to checkConsistency(). | 
|         |    357  | 
|         |    358         * kjs/property_map.h: Rename. | 
|         |    359         * kjs/property_map.cpp: Yes, rename. | 
|         |    360  | 
|         |    361 2002-11-21  Darin Adler  <darin@apple.com> | 
|         |    362  | 
|         |    363 	- add self-check to property map in hopes of finding the cnet.com bug | 
|         |    364  | 
|         |    365         * kjs/property_map.h: Add check() function. | 
|         |    366         * kjs/property_map.cpp: Add the checking, controlled by DO_CONSISTENCY_CHECK. | 
|         |    367  | 
|         |    368 	 - fixed UChar interface so it's not so slow in debug builds | 
|         |    369  | 
|         |    370         * kjs/ustring.h: Nothing in UChar needs to be private. | 
|         |    371  | 
|         |    372         * kjs/function.cpp: (GlobalFuncImp::call): | 
|         |    373         * kjs/function_object.cpp: (FunctionObjectImp::construct): | 
|         |    374         * kjs/identifier.cpp: | 
|         |    375         * kjs/lexer.cpp: (Lexer::setCode), (Lexer::shift): | 
|         |    376         * kjs/lookup.cpp: (keysMatch): | 
|         |    377         * kjs/ustring.cpp: (UString::Rep::computeHash), (KJS::compare): | 
|         |    378 	Use the "uc" field instead of the "unicode()" inline function. | 
|         |    379  | 
|         |    380 2002-11-21  Darin Adler  <darin@apple.com> | 
|         |    381  | 
|         |    382 	- fixed a null-dereference I ran into while trying to reproduce bug 3107351 | 
|         |    383  | 
|         |    384         * kjs/function.h: Change ActivationImp constructor to take context parameter. | 
|         |    385         * kjs/function.cpp: (ActivationImp::ActivationImp): Take context parameter, | 
|         |    386 	not execution state parameter. | 
|         |    387  | 
|         |    388         * kjs/internal.cpp: (ContextImp::ContextImp): Initialize activation object | 
|         |    389 	from context, not execution state, because the new context is not yet in the | 
|         |    390 	execution state. | 
|         |    391  | 
|         |    392 2002-11-20  Darin Adler  <darin@apple.com> | 
|         |    393  | 
|         |    394 	- added a feature for Richard to use in his back/forward cache | 
|         |    395  | 
|         |    396         * kjs/object.h: Added save/restoreProperties. | 
|         |    397         * kjs/property_map.h: Here too. | 
|         |    398         * kjs/property_map.cpp: Here too. | 
|         |    399  | 
|         |    400 2002-11-20  Darin Adler  <darin@apple.com> | 
|         |    401  | 
|         |    402 	- created argument list objects only on demand for a 7.5% speedup | 
|         |    403  | 
|         |    404         * kjs/function.h: Change ActivationImp around. | 
|         |    405         * kjs/function.cpp: | 
|         |    406         (FunctionImp::call): Pass a pointer to the arguments list to avoid ref/unref. | 
|         |    407         (FunctionImp::get): Get the function pointer from the context directly, | 
|         |    408 	not the activation object. | 
|         |    409         (ArgumentsImp::ArgumentsImp): Add an overload that takes no arguments. | 
|         |    410         (ActivationImp::ActivationImp): Store a context pointer and an arguments object pointer. | 
|         |    411         (ActivationImp::get): Special case for arguments, create it and return it. | 
|         |    412         (ActivationImp::put): Special case for arguments, can't be set. | 
|         |    413         (ActivationImp::hasProperty): Special case for arguments, return true. | 
|         |    414         (ActivationImp::deleteProperty): Special case for arguments, refuse to delete. | 
|         |    415         (ActivationImp::mark): Mark the arguments object. | 
|         |    416         (ActivationImp::createArgumentsObject): Do the work of actually creating it. | 
|         |    417         (GlobalFuncImp::call): Use stack-based objects for the ContextImp and ExecState. | 
|         |    418  | 
|         |    419         * kjs/internal.h: Keep function and arguments pointer in the context. | 
|         |    420         * kjs/internal.cpp: | 
|         |    421         (ContextImp::ContextImp): Don't pass in the func and args when making an ActivationImp. | 
|         |    422         (InterpreterImp::evaluate): Use stack-based objects here. | 
|         |    423  | 
|         |    424         * kjs/types.h: Add ArgumentList as a synonym for List, soon to be separate. | 
|         |    425  | 
|         |    426 2002-11-20  Maciej Stachowiak  <mjs@apple.com> | 
|         |    427  | 
|         |    428 	Reduced the size of ValueImp by 8 bytes for a .5% speedup. | 
|         |    429 	 | 
|         |    430         * kjs/value.h: Removed destructed flag. Made refcount and flag 16 | 
|         |    431 	bits each. | 
|         |    432         * kjs/value.cpp: | 
|         |    433         (ValueImp::~ValueImp): Don't set destructed flag. | 
|         |    434  | 
|         |    435 2002-11-20  Darin Adler  <darin@apple.com> | 
|         |    436  | 
|         |    437         * kjs/types.cpp: Keep ref count for the whole lists of nodes. | 
|         |    438 	Doesn't speed things up much, less than 1%. | 
|         |    439  | 
|         |    440 2002-11-20  Maciej Stachowiak  <mjs@apple.com> | 
|         |    441  | 
|         |    442         * kjs/collector.cpp: | 
|         |    443         (Collector::allocate): Clear the flags on newly allocated objects. | 
|         |    444  | 
|         |    445 2002-11-20  Darin Adler  <darin@apple.com> | 
|         |    446  | 
|         |    447 	- oops, checked in big regression instead of 5% speedup | 
|         |    448  | 
|         |    449         * kjs/function.cpp: (ActivationImp::ActivationImp): Make a marking | 
|         |    450 	list, not a refing list. | 
|         |    451  | 
|         |    452 	- a cut at the sparse array implementation | 
|         |    453  | 
|         |    454         * kjs/array_instance.h: Keep storageLength separate from length. | 
|         |    455         * kjs/array_object.cpp: | 
|         |    456         (ArrayInstanceImp::ArrayInstanceImp): Start with storageLength == length. | 
|         |    457         (ArrayInstanceImp::get): Check against storage length. | 
|         |    458         (ArrayInstanceImp::put): Ditto. | 
|         |    459         (ArrayInstanceImp::hasProperty): Ditto. | 
|         |    460         (ArrayInstanceImp::deleteProperty): Ditto. | 
|         |    461         (ArrayInstanceImp::setLength): Only enlarge storage length up to a cutoff. | 
|         |    462         (ArrayInstanceImp::mark): Use storageLength. | 
|         |    463         (ArrayInstanceImp::pushUndefinedObjectsToEnd): Added FIXME. | 
|         |    464  | 
|         |    465 2002-11-20  Darin Adler  <darin@apple.com> | 
|         |    466  | 
|         |    467 	- decrease ref/deref -- 5% speedup in iBench | 
|         |    468  | 
|         |    469         * JavaScriptCore.pbproj/project.pbxproj: Added array_instance.h | 
|         |    470         * kjs/array_instance.h: Added so it can be shared by function.h. | 
|         |    471  | 
|         |    472         * kjs/array_object.cpp: | 
|         |    473         * kjs/array_object.h: | 
|         |    474         * kjs/bool_object.cpp: | 
|         |    475         * kjs/bool_object.h: | 
|         |    476         * kjs/collector.cpp: | 
|         |    477         * kjs/date_object.cpp: | 
|         |    478         * kjs/date_object.h: | 
|         |    479         * kjs/error_object.cpp: | 
|         |    480         * kjs/function.cpp: | 
|         |    481         * kjs/function.h: | 
|         |    482         * kjs/function_object.cpp: | 
|         |    483         * kjs/internal.cpp: | 
|         |    484         * kjs/internal.h: | 
|         |    485         * kjs/math_object.cpp: | 
|         |    486         * kjs/nodes.cpp: | 
|         |    487         * kjs/number_object.cpp: | 
|         |    488         * kjs/object.cpp: | 
|         |    489         * kjs/object.h: | 
|         |    490         * kjs/object_object.cpp: | 
|         |    491         * kjs/property_map.cpp: | 
|         |    492         * kjs/reference.cpp: | 
|         |    493         * kjs/reference.h: | 
|         |    494         * kjs/regexp_object.cpp: | 
|         |    495         * kjs/string_object.cpp: | 
|         |    496         * kjs/string_object.h: | 
|         |    497         * kjs/value.cpp: | 
|         |    498         * kjs/value.h: | 
|         |    499 	Switched lots of interfaces so they don't require ref/deref. | 
|         |    500  | 
|         |    501 2002-11-20  Maciej Stachowiak  <mjs@apple.com> | 
|         |    502  | 
|         |    503 	Fixed the two most obvious problems with the new GC for another 6% | 
|         |    504 	improvement. | 
|         |    505 	 | 
|         |    506         * kjs/collector.cpp: | 
|         |    507         (Collector::allocate): Don't bother doing the bit tests on a bitmap word if | 
|         |    508 	all it's bits are on. | 
|         |    509         (Collector::collect): Track memoryFull boolean. | 
|         |    510         * kjs/collector.h: Inlined outOfMemory since it was showing up on profiles. | 
|         |    511  | 
|         |    512 2002-11-20  Maciej Stachowiak  <mjs@apple.com> | 
|         |    513  | 
|         |    514 	Rewrote garbage collector to make blocks of actual memory instead | 
|         |    515 	of blocks of pointers. 7% improvement on JavaScript | 
|         |    516 	iBench. There's still lots of room to tune the new GC, this is | 
|         |    517 	just my first cut. | 
|         |    518 	 | 
|         |    519         * kjs/collector.cpp: | 
|         |    520         (Collector::allocate): | 
|         |    521         (Collector::collect): | 
|         |    522         (Collector::size): | 
|         |    523         (Collector::outOfMemory): | 
|         |    524         (Collector::finalCheck): | 
|         |    525         (Collector::numGCNotAllowedObjects): | 
|         |    526         (Collector::numReferencedObjects): | 
|         |    527         (Collector::liveObjectClasses): | 
|         |    528         * kjs/collector.h: | 
|         |    529         * kjs/function.cpp: | 
|         |    530         (ActivationImp::ActivationImp): | 
|         |    531         * kjs/function.h: | 
|         |    532  | 
|         |    533 2002-11-20  Darin Adler  <darin@apple.com> | 
|         |    534  | 
|         |    535 	- on the road to killing ActivationImp | 
|         |    536  | 
|         |    537         * kjs/function.h: Add get/put to FunctionImp. Remove argumentsObject() from | 
|         |    538 	ActivationImp. Add function() to ActivationImp. | 
|         |    539         * kjs/function.cpp: | 
|         |    540         (FunctionImp::FunctionImp): No arguments property. | 
|         |    541         (FunctionImp::call): No need to set up the arguments property. | 
|         |    542         (FunctionImp::parameterString): Remove ** strangeness. | 
|         |    543         (FunctionImp::processParameters): Ditto. | 
|         |    544         (FunctionImp::get): Added, handles arguments and length properties. | 
|         |    545         (FunctionImp::put): Ditto. | 
|         |    546         (FunctionImp::hasProperty): Ditto. | 
|         |    547         (FunctionImp::deleteProperty): Ditto. | 
|         |    548         (ActivationImp::ActivationImp): Store a function pointer so we can find it | 
|         |    549 	in the context. | 
|         |    550  | 
|         |    551         * kjs/function_object.cpp: (FunctionObjectImp::construct): No need to set up | 
|         |    552 	arguments property. | 
|         |    553         * kjs/nodes.cpp: (FuncExprNode::evaluate): No need to set up length property. | 
|         |    554  | 
|         |    555         * kjs/internal.h: Return ObjectImp * for activation object. | 
|         |    556  | 
|         |    557         * kjs/interpreter.h: Remove stray declaration of ExecStateImp. | 
|         |    558  | 
|         |    559 2002-11-20  Darin Adler  <darin@apple.com> | 
|         |    560  | 
|         |    561 	- add a couple of list operations to avoid clearing lists so much during sorting; gives 1.5% iBench | 
|         |    562  | 
|         |    563         * kjs/types.h: Added replaceFirst/replaceLast. | 
|         |    564         * kjs/types.cpp: (List::replaceFirst), (List::replaceLast): Added. | 
|         |    565  | 
|         |    566         * kjs/array_object.cpp: (compareWithCompareFunctionForQSort): Use replaceFirst/replaceLast. | 
|         |    567  | 
|         |    568         * kjs/property_map.cpp: Put in an ifdef so I can re-add/remove the single entry to see if | 
|         |    569 	it has outlived its usefulness. (It hasn't yet.) | 
|         |    570  | 
|         |    571 2002-11-20  Darin Adler  <darin@apple.com> | 
|         |    572  | 
|         |    573 	- atomic identifiers; gives another 6.5% in the iBench suite | 
|         |    574  | 
|         |    575         * kjs/identifier.h: Did the real thing. | 
|         |    576         * kjs/identifier.cpp: Ditto. | 
|         |    577  | 
|         |    578         * kjs/property_map.h: _tableSizeHashMask -> _tableSizeMask | 
|         |    579         * kjs/property_map.cpp: The above, plus take advantage of comparing | 
|         |    580 	by pointer instead of by comparing bytes. | 
|         |    581  | 
|         |    582 2002-11-19  Darin Adler  <darin@apple.com> | 
|         |    583  | 
|         |    584 	- a few more globals for often-used property names | 
|         |    585 	- conversion to Identifier from UString must now be explicit | 
|         |    586  | 
|         |    587         * kjs/error_object.cpp: | 
|         |    588         * kjs/function.cpp: | 
|         |    589         * kjs/function_object.cpp: | 
|         |    590         * kjs/identifier.cpp: | 
|         |    591         * kjs/identifier.h: | 
|         |    592         * kjs/lexer.cpp: | 
|         |    593         * kjs/nodes.cpp: | 
|         |    594         * kjs/number_object.cpp: | 
|         |    595         * kjs/object.cpp: | 
|         |    596         * kjs/object.h: | 
|         |    597         * kjs/string_object.cpp: | 
|         |    598         * kjs/testkjs.cpp: | 
|         |    599         * kjs/ustring.cpp: | 
|         |    600         * kjs/ustring.h: | 
|         |    601  | 
|         |    602 2002-11-19  Darin Adler  <darin@apple.com> | 
|         |    603  | 
|         |    604 	- another step towards atomic identifiers; storing hash in the string rep. gives about | 
|         |    605 	a 1.5% speedup in the JavaScript iBench | 
|         |    606  | 
|         |    607         * kjs/ustring.h: Add a hash field to UString::Rep. | 
|         |    608         * kjs/ustring.cpp: | 
|         |    609         (UString::Rep::create): Set hash to uninitialized value. | 
|         |    610         (UString::Rep::destroy): Do the deleting in her, and call Identifier if needed. | 
|         |    611         (UString::Rep::computeHash): Added. | 
|         |    612         (UString::append): Set hash to 0 when modifying the string in place. | 
|         |    613         (UString::operator=): Ditto. | 
|         |    614  | 
|         |    615         * kjs/property_map.cpp: Use the hash from UString. | 
|         |    616  | 
|         |    617         * kjs/identifier.h: Added aboutToDestroyUStringRep. | 
|         |    618         * kjs/identifier.cpp: (Identifier::aboutToDestroyUStringRep): Added. | 
|         |    619  | 
|         |    620 2002-11-19  Darin Adler  <darin@apple.com> | 
|         |    621  | 
|         |    622 	- next step towards atomic identifiers; Identifier is no longer derived from UString | 
|         |    623  | 
|         |    624         * kjs/identifier.h: Remove base class and add _ustring member. | 
|         |    625         * kjs/identifier.cpp: Add null and an == that works with const char *. | 
|         |    626         * kjs/property_map.cpp: Get rep through _ustring. | 
|         |    627  | 
|         |    628         * kjs/function.cpp: (FunctionImp::parameterString): Call ustring(). | 
|         |    629         * kjs/function_object.cpp: (FunctionProtoFuncImp::call): Ditto. | 
|         |    630         * kjs/nodes.cpp: | 
|         |    631         (PropertyNode::evaluate): Ditto. | 
|         |    632         (VarDeclNode::evaluate): Ditto. | 
|         |    633         (ForInNode::execute): Ditto. | 
|         |    634         * kjs/nodes2string.cpp: (SourceStream::operator<<): Add overload for Identifier. | 
|         |    635         * kjs/reference.cpp: (Reference::getValue): Call ustring(). | 
|         |    636         * kjs/regexp_object.cpp: (RegExpObjectImp::get): Call ustring(). | 
|         |    637  | 
|         |    638 2002-11-19  Darin Adler  <darin@apple.com> | 
|         |    639  | 
|         |    640 	- fixed memory trasher | 
|         |    641  | 
|         |    642         * kjs/ustring.cpp: (UString::from): Fix "end of buffer" computation. | 
|         |    643  | 
|         |    644 2002-11-19  Darin Adler  <darin@apple.com> | 
|         |    645  | 
|         |    646 	- a first step towards atomic identifiers in JavaScript | 
|         |    647  | 
|         |    648 	Most places that work with identifiers now use Identifier | 
|         |    649 	instead of UString. | 
|         |    650  | 
|         |    651         * kjs/identifier.cpp: Added. | 
|         |    652         * kjs/identifier.h: Added. | 
|         |    653         * JavaScriptCore.pbproj/project.pbxproj: Added files. | 
|         |    654  | 
|         |    655         * kjs/array_object.cpp: | 
|         |    656         * kjs/array_object.h: | 
|         |    657         * kjs/completion.cpp: | 
|         |    658         * kjs/completion.h: | 
|         |    659         * kjs/date_object.cpp: | 
|         |    660         * kjs/date_object.h: | 
|         |    661         * kjs/function.cpp: | 
|         |    662         * kjs/function.h: | 
|         |    663         * kjs/function_object.cpp: | 
|         |    664         * kjs/grammar.cpp: | 
|         |    665         * kjs/grammar.cpp.h: | 
|         |    666         * kjs/grammar.h: | 
|         |    667         * kjs/grammar.y: | 
|         |    668         * kjs/internal.cpp: | 
|         |    669         * kjs/internal.h: | 
|         |    670         * kjs/lexer.cpp: | 
|         |    671         * kjs/lookup.cpp: | 
|         |    672         * kjs/lookup.h: | 
|         |    673         * kjs/math_object.cpp: | 
|         |    674         * kjs/math_object.h: | 
|         |    675         * kjs/nodes.cpp: | 
|         |    676         * kjs/nodes.h: | 
|         |    677         * kjs/number_object.cpp: | 
|         |    678         * kjs/number_object.h: | 
|         |    679         * kjs/object.cpp: | 
|         |    680         * kjs/object.h: | 
|         |    681         * kjs/property_map.cpp: | 
|         |    682         * kjs/property_map.h: | 
|         |    683         * kjs/reference.cpp: | 
|         |    684         * kjs/reference.h: | 
|         |    685         * kjs/regexp_object.cpp: | 
|         |    686         * kjs/regexp_object.h: | 
|         |    687         * kjs/string_object.cpp: | 
|         |    688         * kjs/string_object.h: | 
|         |    689  | 
|         |    690 2002-11-19  Darin Adler  <darin@apple.com> | 
|         |    691  | 
|         |    692 	- fix hash function and key comparison for the other kind of hash table; yields 3% | 
|         |    693  | 
|         |    694         * kjs/lookup.cpp: | 
|         |    695         (keysMatch): Added. | 
|         |    696         (Lookup::findEntry): Don't allocate and convert to ASCII just to search. | 
|         |    697  | 
|         |    698 2002-11-19  Darin Adler  <darin@apple.com> | 
|         |    699  | 
|         |    700 	- another hash table fix; yields a 2% improvement on iBench JavaScript | 
|         |    701  | 
|         |    702         * kjs/property_map.cpp: A few more places where we use & instead of %. | 
|         |    703  | 
|         |    704 	- some List changes that don't affect speed yet | 
|         |    705  | 
|         |    706         * kjs/types.cpp: | 
|         |    707         (List::prependList): Tighten up a tiny bit. | 
|         |    708         (List::copy): Use prependList. | 
|         |    709         * kjs/types.h: Remove appendList and globalClear. | 
|         |    710  | 
|         |    711         * kjs/interpreter.cpp: (Interpreter::finalCheck): Remove List::globalClear(). | 
|         |    712  | 
|         |    713 2002-11-19  Darin Adler  <darin@apple.com> | 
|         |    714  | 
|         |    715 	- fixed 3105026 -- REGRESSION: DHTML menus are broken all over the place | 
|         |    716  | 
|         |    717         * kjs/types.cpp: (List::prepend): Fix backwards links in new node. | 
|         |    718  | 
|         |    719 2002-11-19  Darin Adler  <darin@apple.com> | 
|         |    720  | 
|         |    721 	- a fix that gives another 1.5% on the iBench JavaScript test | 
|         |    722  | 
|         |    723         * kjs/ustring.cpp: (UString::from): Stop using sprintf to format integers. | 
|         |    724  | 
|         |    725 2002-11-18  Darin Adler  <darin@apple.com> | 
|         |    726  | 
|         |    727 	- reduced the creation of Value objects and hoisted the property map | 
|         |    728         into Object for another gain of about 6% | 
|         |    729  | 
|         |    730         * JavaScriptCore.pbproj/project.pbxproj: Made property_map.h public. | 
|         |    731         * kjs/array_object.cpp: | 
|         |    732         (compareWithCompareFunctionForQSort): Don't wrap the ValueImp * in a Value | 
|         |    733 	just to add it to a list. | 
|         |    734         (ArrayProtoFuncImp::call): Pass the globalObject directly so we don't have | 
|         |    735 	to ref/deref. | 
|         |    736         * kjs/function.cpp: | 
|         |    737         (FunctionImp::call): Use a reference for the global object to avoid ref/deref. | 
|         |    738         (GlobalFuncImp::call): Ditto. | 
|         |    739         * kjs/internal.cpp: | 
|         |    740         (BooleanImp::toObject): Put the object directly into the list, don't create a Value. | 
|         |    741         (StringImp::toObject): Ditto. | 
|         |    742         (NumberImp::toObject): Ditto. | 
|         |    743         (InterpreterImp::evaluate): Use a reference for the global object. | 
|         |    744         * kjs/internal.h: Return a reference for the global object. | 
|         |    745         * kjs/interpreter.cpp: (Interpreter::globalObject): Ditto. | 
|         |    746         * kjs/interpreter.h: Ditto. | 
|         |    747         * kjs/object.cpp: Use _prop directly in the object, not a separate pointer. | 
|         |    748         * kjs/object.h: Ditto. | 
|         |    749         * kjs/types.cpp: Added List methods that work directly with ValueImp. | 
|         |    750         (List::append): Added a ValueImp version. | 
|         |    751         (List::prepend): Ditto. | 
|         |    752         (List::appendList): Work directly with the ValueImp's. | 
|         |    753         (List::prependList): Ditto. | 
|         |    754         (List::copy): Use appendList. | 
|         |    755         (List::empty): Use a shared global List. | 
|         |    756         * kjs/types.h: Update for above changes. | 
|         |    757  | 
|         |    758 2002-11-18  Darin Adler  <darin@apple.com> | 
|         |    759  | 
|         |    760         * kjs/property_map.cpp: Oops, copyright goes to Apple, not me. | 
|         |    761         * kjs/property_map.h: Ditto. | 
|         |    762  | 
|         |    763 2002-11-18  Darin Adler  <darin@apple.com> | 
|         |    764  | 
|         |    765 	- property and string improvements giving a 7% or so improvement in JavaScript iBench | 
|         |    766  | 
|         |    767         * kjs/property_map.h: Rewrite to use a hash table. | 
|         |    768         * kjs/property_map.cpp: Ditto. | 
|         |    769  | 
|         |    770         * kjs/string_object.h: | 
|         |    771         * kjs/string_object.cpp: | 
|         |    772         (StringInstanceImp::StringInstanceImp): Construct a string with the right value | 
|         |    773 	instead of putting the string in later. | 
|         |    774         (StringInstanceImp::get): Get the length from the string, not a separate property. | 
|         |    775         (StringInstanceImp::put): Ignore attempts to set length, since we don't put it in | 
|         |    776 	the property map. | 
|         |    777         (StringInstanceImp::hasProperty): Return true for length. | 
|         |    778         (StringInstanceImp::deleteProperty): Return false for length. | 
|         |    779         (StringObjectImp::construct): Call new StringInstanceImp constructor. Don't try | 
|         |    780 	to set a length property. | 
|         |    781  | 
|         |    782         * kjs/ustring.h: Make the rep deref know how to deallocate the rep. | 
|         |    783         * kjs/ustring.cpp: | 
|         |    784         (UString::release): Move the real work to the rep's deref, since the hash table | 
|         |    785 	now uses the rep directly. | 
|         |    786  | 
|         |    787         * kjs/object.h: Remove unused field. | 
|         |    788  | 
|         |    789 2002-11-18  Maciej Stachowiak  <mjs@apple.com> | 
|         |    790  | 
|         |    791 	Change List to completely avoid going through the GC | 
|         |    792 	allocator. 3.6% performance improvement on JavaScript iBench. | 
|         |    793 	 | 
|         |    794         * kjs/internal.cpp: | 
|         |    795         (InterpreterImp::mark): Don't mark the empty list. | 
|         |    796  | 
|         |    797 	For all the methods below I basically lifted the ListImp version | 
|         |    798 	up to the List method with minor tweaks. | 
|         |    799 	 | 
|         |    800         * kjs/types.cpp: | 
|         |    801         (ListIterator::ListIterator): | 
|         |    802         (List::List): | 
|         |    803         (List::operator=): | 
|         |    804         (List::~List): | 
|         |    805         (List::mark): | 
|         |    806         (List::append): | 
|         |    807         (List::prepend): | 
|         |    808         (List::appendList): | 
|         |    809         (List::prependList): | 
|         |    810         (List::removeFirst): | 
|         |    811         (List::removeLast): | 
|         |    812         (List::remove): | 
|         |    813         (List::clear): | 
|         |    814         (List::clearInternal): | 
|         |    815         (List::copy): | 
|         |    816         (List::begin): | 
|         |    817         (List::end): | 
|         |    818         (List::isEmpty): | 
|         |    819         (List::size): | 
|         |    820         (List::at): | 
|         |    821         (List::operator[]): | 
|         |    822         (List::empty): | 
|         |    823         (List::erase): | 
|         |    824         (List::refAll): | 
|         |    825         (List::derefAll): | 
|         |    826         (List::swap): | 
|         |    827         (List::globalClear): | 
|         |    828         * kjs/types.h: | 
|         |    829  | 
|         |    830 2002-11-18  Maciej Stachowiak  <mjs@apple.com> | 
|         |    831  | 
|         |    832 	Fixed a horrible leak introduced with my last change that | 
|         |    833 	somehow did not show up on my machine. | 
|         |    834  | 
|         |    835         * kjs/types.cpp: | 
|         |    836         (List::List): Mark ListImp as GC allowed. | 
|         |    837  | 
|         |    838 2002-11-18  Maciej Stachowiak  <mjs@apple.com> | 
|         |    839  | 
|         |    840 	Another step towards the List conversion: stop inheriting from Value. | 
|         |    841 	 | 
|         |    842         * kjs/types.cpp: | 
|         |    843         (ListIterator::ListIterator): | 
|         |    844         (List::List): | 
|         |    845         (List::operator=): | 
|         |    846         (List::~List): | 
|         |    847         (List::mark): | 
|         |    848         (List::append): | 
|         |    849         (List::prepend): | 
|         |    850         (List::appendList): | 
|         |    851         (List::prependList): | 
|         |    852         (List::removeFirst): | 
|         |    853         (List::removeLast): | 
|         |    854         (List::remove): | 
|         |    855         (List::clear): | 
|         |    856         (List::copy): | 
|         |    857         (List::begin): | 
|         |    858         (List::end): | 
|         |    859         (List::isEmpty): | 
|         |    860         (List::size): | 
|         |    861         (List::at): | 
|         |    862         (List::operator[]): | 
|         |    863         * kjs/types.h: | 
|         |    864  | 
|         |    865 2002-11-18  Maciej Stachowiak  <mjs@apple.com> | 
|         |    866  | 
|         |    867 	Partway to removing Value from List. Created a marking List | 
|         |    868 	variant, used it in place of ListImp. | 
|         |    869 	 | 
|         |    870         * kjs/internal.h: Removed List stuff. | 
|         |    871         * kjs/internal.cpp: | 
|         |    872         (InterpreterImp::mark): Call appropriate List method to do marking of | 
|         |    873 	empty ListImp. | 
|         |    874         * kjs/object.h: | 
|         |    875         * kjs/object.cpp: Use marking List instead of ListImp *. | 
|         |    876         * kjs/types.h: | 
|         |    877         * kjs/types.cpp: | 
|         |    878         (List::List): New boolean needsMarking parameter.  | 
|         |    879         (List::operator=): Perform trickery related to needsMarking. | 
|         |    880         (List::~List): Likewise. | 
|         |    881         (List::mark): Mark the ListImp. | 
|         |    882         (List::markEmptyList): | 
|         |    883 	(ListImp::*): Moved here fron internal.cpp, they will be | 
|         |    884 	integrated into the relevant List methods soon. | 
|         |    885  | 
|         |    886 2002-11-18  Darin Adler  <darin@apple.com> | 
|         |    887  | 
|         |    888 	- another string constant discovered that can be optimized | 
|         |    889  | 
|         |    890         * kjs/object.h: Add a property name constant for "__proto__". | 
|         |    891         * kjs/object.cpp: Define it. | 
|         |    892 	(ObjectImp::get): Use it. | 
|         |    893 	(ObjectImp::hasProperty): Use it. | 
|         |    894  | 
|         |    895 	- prepare to turn PropertyMap into a hash table | 
|         |    896  | 
|         |    897         * kjs/object.cpp: | 
|         |    898 	(ObjectImp::mark): Use the new PropertyMap::mark(). | 
|         |    899 	(ObjectImp::put): Use the new overload of PropertyMap::get(). | 
|         |    900 	(ObjectImp::deleteProperty): Use the new overload of PropertyMap::get(). | 
|         |    901 	(ObjectImp::propList): Use PropertyMap::addEnumerablesToReferenceList(). | 
|         |    902  | 
|         |    903         * kjs/property_map.h: Remove PropertyMapNode and make all node-related methods private. | 
|         |    904 	Add mark(), a new overload of get() that returns attributes, a clear() that takes no attributes, | 
|         |    905 	and addEnumerablesToReferenceList(). | 
|         |    906         * kjs/property_map.cpp: | 
|         |    907 	(PropertyMap::get): Added new overload. | 
|         |    908 	(PropertyMap::clear): Added new overload. | 
|         |    909 	(PropertyMap::mark): Added. | 
|         |    910 	(PropertyMap::addEnumerablesToReferenceList): Added. | 
|         |    911  | 
|         |    912         * kjs/ustring.h: Added a hash function. | 
|         |    913         * kjs/ustring.cpp: (KJS::hash): Added. | 
|         |    914  | 
|         |    915 2002-11-18  Darin Adler  <darin@apple.com> | 
|         |    916  | 
|         |    917 	- simplified the ExecState class, which was showing up in profiles | 
|         |    918          | 
|         |    919         Sped up JavaScript iBench by 6%. | 
|         |    920  | 
|         |    921         * kjs/interpreter.h: Removed the level of indirection, and made it all inline. | 
|         |    922         * kjs/interpreter.cpp: Removed ExecState implementation from here altogether. | 
|         |    923  | 
|         |    924 	- fixed an oversight in my sort speedup | 
|         |    925  | 
|         |    926         * kjs/array_object.h: Add pushUndefinedObjectsToEnd. | 
|         |    927         * kjs/array_object.cpp: | 
|         |    928         (ArrayInstanceImp::sort): Call pushUndefinedObjectsToEnd. | 
|         |    929         (ArrayInstanceImp::pushUndefinedObjectsToEnd): Added. | 
|         |    930 	Pushes all undefined to the end of the array. | 
|         |    931  | 
|         |    932 2002-11-18  Darin Adler  <darin@apple.com> | 
|         |    933  | 
|         |    934 	- fix worst speed problems on the sort page of the iBench JavaScript test | 
|         |    935  | 
|         |    936 	Sped up JavaScript iBench by 70%, the sort page by 88%. | 
|         |    937  | 
|         |    938         * kjs/array_object.h: Add array-specific sort functions. | 
|         |    939         * kjs/array_object.cpp: | 
|         |    940         (compareByStringForQSort): Added. | 
|         |    941         (ArrayInstanceImp::sort): Added. | 
|         |    942         (compareWithCompareFunctionForQSort): Added. | 
|         |    943         (ArrayProtoFuncImp::call): Use ArrayInstanceImp::sort if the object being | 
|         |    944 	sorted is actually an array. | 
|         |    945  | 
|         |    946         * kjs/object.h: Add argumentsPropertyName. | 
|         |    947         * kjs/object.cpp: Add argumentsPropertyName. | 
|         |    948         * kjs/function.cpp: | 
|         |    949         (FunctionImp::FunctionImp): Use argumentsPropertyName to avoid making a UString. | 
|         |    950         (FunctionImp::call): Ditto. | 
|         |    951         (ActivationImp::ActivationImp): Ditto. | 
|         |    952         * kjs/function_object.cpp: (FunctionObjectImp::construct): Ditto. | 
|         |    953  | 
|         |    954         * kjs/ustring.h: Added compare function for -1/0/+1 comparison. | 
|         |    955         * kjs/ustring.cpp: (KJS::compare): Added. | 
|         |    956  | 
|         |    957 2002-11-18  Maciej Stachowiak  <mjs@apple.com> | 
|         |    958  | 
|         |    959 	Change ArgumentListNode operations to be iterative instead of | 
|         |    960 	recursive. This probably fixes 3095446 (Crash in | 
|         |    961 	KJS::ArgumentListNode::ref()) but I can't reproduce it myself so | 
|         |    962 	I'm not 100% sure. I think the original bug was a stack overflow | 
|         |    963 	and this change would remove that possibility. | 
|         |    964 	 | 
|         |    965         * kjs/nodes.cpp: | 
|         |    966         (ArgumentListNode::ref): Make iterative. | 
|         |    967         (ArgumentListNode::deref): Make iterative. | 
|         |    968         (ArgumentListNode::evaluateList): Make iterative. | 
|         |    969  | 
|         |    970 === Alexander-32 === | 
|         |    971  | 
|         |    972 2002-11-14  Darin Adler  <darin@apple.com> | 
|         |    973  | 
|         |    974 	- fixed 3101243 -- excite passes date that can't be parsed, results in bogus date at top right corner | 
|         |    975  | 
|         |    976         * kjs/date_object.cpp: (KJS::KRFCDate_parseDate): Handle errors from strtol | 
|         |    977 	by checking errno. Check the "string in a haystack" to be sure it's a multiple | 
|         |    978 	of 3. Add case that allows year to be after time. | 
|         |    979  | 
|         |    980 2002-11-14  Darin Adler  <darin@apple.com> | 
|         |    981  | 
|         |    982 	- fixed 3101191 -- REGRESSION: Hang loading excite.com | 
|         |    983  | 
|         |    984         * kjs/date_object.cpp: | 
|         |    985         (mktimeUsingCF): Pick an arbitrary cutoff of 3000, and return -1 if the | 
|         |    986 	year passed in is that big so we don't infinite loop. Also validate the | 
|         |    987 	rest of the date with CFGregorianDateIsValid.  | 
|         |    988         (DateProtoFuncImp::call): Handle a -1 result from mktime. | 
|         |    989         (DateObjectImp::construct): Check for NaN before calling mktime, and also | 
|         |    990 	handle a -1 result from mktime. | 
|         |    991         (DateObjectFuncImp::call): Check for NaN before calling mktime, and also | 
|         |    992 	handle a -1 result from mktime. | 
|         |    993  | 
|         |    994 2002-11-13  Darin Adler  <darin@apple.com> | 
|         |    995  | 
|         |    996 	- fixed 3099930 -- dates/times without time zones are parsed as UTC by kjs, | 
|         |    997 	local time by other browsers | 
|         |    998  | 
|         |    999         * kjs/date_object.cpp: | 
|         |   1000         (DateProtoFuncImp::call): Handle the NaN case better, like Mozilla and OmniWeb. | 
|         |   1001         (DateObjectFuncImp::call): Return NaN rather than Undefined() for bad dates. | 
|         |   1002         (KJS::parseDate): Return NaN rather than Undefined() or 0 for bad dates. | 
|         |   1003         (KJS::KRFCDate_parseDate): Return -1 rather than 0 for bad dates. | 
|         |   1004 	Assume local time if no time zone is passed. Don't return 1 if we parse 0. | 
|         |   1005  | 
|         |   1006 2002-11-13  Darin Adler  <darin@apple.com> | 
|         |   1007  | 
|         |   1008         - fixed 3073230 -- JavaScript time calls do I/O by lstat()ing /etc/localtime | 
|         |   1009  | 
|         |   1010         * kjs/date_object.cpp: | 
|         |   1011         (formatDate): Added. | 
|         |   1012         (formatTime): Added. | 
|         |   1013         (formatLocaleDate): Added. | 
|         |   1014         (formatLocaleTime): Added. | 
|         |   1015         (DateProtoFuncImp::call): Changed to use the above functions instead of | 
|         |   1016 	using strftime. | 
|         |   1017  | 
|         |   1018 2002-11-08  Darin Adler  <darin@apple.com> | 
|         |   1019  | 
|         |   1020         * kjs/date_object.cpp: | 
|         |   1021         (ctimeUsingCF): Added. | 
|         |   1022         (timeUsingCF): Added. | 
|         |   1023  | 
|         |   1024 2002-11-07  Darin Adler  <darin@apple.com> | 
|         |   1025  | 
|         |   1026         * kjs/date_object.cpp: (mktimeUsingCF): Fix storage leak. | 
|         |   1027  | 
|         |   1028 2002-11-07  Maciej Stachowiak  <mjs@apple.com> | 
|         |   1029  | 
|         |   1030 	- partial fix to 3073230 - JavaScript time calls do I/O by | 
|         |   1031 	lastat()ing /etc/localtime | 
|         |   1032 	 | 
|         |   1033         * kjs/date_object.cpp: | 
|         |   1034         (mktimeUsingCF): Implementation of mktime using CF. | 
|         |   1035  | 
|         |   1036 === Alexander-31 === | 
|         |   1037  | 
|         |   1038 2002-11-01  Darin Adler  <darin@apple.com> | 
|         |   1039  | 
|         |   1040         * kjs/object.cpp: Make the same change Maciej just did, but to the | 
|         |   1041 	other constructor right next to the one he changed. | 
|         |   1042  | 
|         |   1043 2002-10-31  Maciej Stachowiak  <mjs@apple.com> | 
|         |   1044  | 
|         |   1045 	- fixed 3082660 - REGRESSION: one ListImp leaks opening/closing nearly empty web page | 
|         |   1046 	 | 
|         |   1047         * kjs/object.cpp: Set gc allowed on freshly created ListImp, since | 
|         |   1048 	there is no List wrapper for it. | 
|         |   1049  | 
|         |   1050 2002-10-31  Darin Adler  <darin@apple.com> | 
|         |   1051  | 
|         |   1052         * kjs/grammar.y: Fix the APPLE_CHANGES thing here too. | 
|         |   1053         * kjs/grammar.cpp: Regenerated this file. | 
|         |   1054  | 
|         |   1055 === Alexander-30 === | 
|         |   1056  | 
|         |   1057 2002-10-30  Darin Adler  <darin@apple.com> | 
|         |   1058  | 
|         |   1059 	- fixed 3073230 -- Alex is doing file I/O when executing JavaScript by asking for localtime | 
|         |   1060  | 
|         |   1061 	I fixed this by using Core Foundation time functions instead. | 
|         |   1062  | 
|         |   1063         * kjs/date_object.cpp: | 
|         |   1064         (tmUsingCF): Function that uses Core Foundation to get the time and then puts it into | 
|         |   1065 	a tm struct. | 
|         |   1066         (gmtimeUsingCF): Function used instead of gmtime (used a macro to make the substitution). | 
|         |   1067         (localtimeUsingCF): Function used instead of localtime (used a macro to make the substitution). | 
|         |   1068  | 
|         |   1069 2002-10-26  Darin Adler  <darin@apple.com> | 
|         |   1070  | 
|         |   1071 	- changed to use #if APPLE_CHANGES and #if !APPLE_CHANGES consistently | 
|         |   1072  | 
|         |   1073 	We no longer do #ifdef APPLE_CHANGES or #ifndef APPLE_CHANGES. | 
|         |   1074  | 
|         |   1075         * kjs/collector.cpp: | 
|         |   1076         * kjs/collector.h: | 
|         |   1077         * kjs/grammar.cpp: | 
|         |   1078         * kjs/internal.cpp: | 
|         |   1079         * kjs/ustring.h: | 
|         |   1080  | 
|         |   1081 2002-10-25  Darin Adler  <darin@apple.com> | 
|         |   1082  | 
|         |   1083 	- fixed 3038011 -- drop-down menu hierarchy broken at yahoo new acct page | 
|         |   1084  | 
|         |   1085         * kjs/array_object.cpp: (ArrayProtoFuncImp::call): | 
|         |   1086 	Fix bug calling concat on an empty array. The old code tried to | 
|         |   1087 	optimize in a way that would prevent appending any arrays until | 
|         |   1088 	at least one element was in the destination array. So if you were | 
|         |   1089 	concatenating a non-empty array into an empty array, you got an empty array. | 
|         |   1090  | 
|         |   1091 === Alexander-29 === | 
|         |   1092  | 
|         |   1093 === Alexander-28 === | 
|         |   1094  | 
|         |   1095 2002-10-10  Darin Adler  <darin@apple.com> | 
|         |   1096  | 
|         |   1097 	- fixed 3072643 -- infinite loop in JavaScript code at walgreens.com | 
|         |   1098  | 
|         |   1099 	The problem is that "xxx".indexOf("", 1) needs to return 1, but we | 
|         |   1100 	were returning 0. | 
|         |   1101  | 
|         |   1102         * kjs/ustring.cpp: | 
|         |   1103         (UString::find): Return pos, not 0, when the search string is empty. | 
|         |   1104         (UString::rfind): Make sure that pos is not past the end of the string, | 
|         |   1105 	taking into account the search string; fixes a potential read off the end | 
|         |   1106 	of the buffer. Also return pos, not 0, when the search string is empty. | 
|         |   1107  | 
|         |   1108 === Alexander-27 === | 
|         |   1109  | 
|         |   1110 2002-10-07  Darin Adler  <darin@apple.com> | 
|         |   1111  | 
|         |   1112 	Fixed absurdly high memory usage when looking at pages that use a lot of JavaScript. | 
|         |   1113  | 
|         |   1114         * kjs/collector.cpp: | 
|         |   1115         (Collector::allocate): Implement a new policy of doing a garbage collect every 1000 | 
|         |   1116 	allocations. The old policy was both complicated and misguided. | 
|         |   1117         (Collector::collect): Zero out the "number of allocations since last collect". | 
|         |   1118  | 
|         |   1119 2002-10-06  Darin Adler  <darin@apple.com> | 
|         |   1120  | 
|         |   1121 	I noticed some broken lists at mapblast.com and tracked it down to this. | 
|         |   1122  | 
|         |   1123         * kjs/array_object.cpp: | 
|         |   1124         (ArrayInstanceImp::put): Don't truncate the list; only extend the length if | 
|         |   1125 	it's not already long enough. | 
|         |   1126         (ArrayProtoFuncImp::call): Fix some ifdef'd code so it compiles if you turn | 
|         |   1127 	the ifdefs on. | 
|         |   1128  | 
|         |   1129 2002-10-04  Darin Adler  <darin@apple.com> | 
|         |   1130  | 
|         |   1131         Fixed problems parsing numbers that are larger than a long with parseInt. | 
|         |   1132  | 
|         |   1133         * kjs/config.h: Define HAVE_FUNC_STRTOLL. | 
|         |   1134         * kjs/function.cpp: (GlobalFuncImp::call): | 
|         |   1135 	Change parseInt to use strtoll if available. | 
|         |   1136  | 
|         |   1137 === Alexander-26 === | 
|         |   1138  | 
|         |   1139 2002-09-27  Darin Adler  <darin@apple.com> | 
|         |   1140  | 
|         |   1141 	- fixed 3033969 -- repro crash (infinite recursion in JavaScript) | 
|         |   1142 	clicking on "screens" option at fsv.sf.net | 
|         |   1143  | 
|         |   1144         * kjs/object.h: Change recursion limit to 100 levels rather than 1000. | 
|         |   1145  | 
|         |   1146 === Alexander-25 === | 
|         |   1147  | 
|         |   1148 2002-09-26  Darin Adler  <darin@apple.com> | 
|         |   1149  | 
|         |   1150 	Fix the infinity problem Dave worked around. We didn't have the | 
|         |   1151 	configuration flags set right to make infinity work. Setting those | 
|         |   1152 	properly made everything work without changes to min and max. | 
|         |   1153  | 
|         |   1154         * kjs/config.h: Define HAVE_FUNC_ISINF, HAVE_STRING_H, and | 
|         |   1155 	also WORDS_BIGENDIAN (if on ppc). | 
|         |   1156  | 
|         |   1157         * kjs/math_object.cpp: (MathFuncImp::call): Roll out min and max | 
|         |   1158 	changes from yesterday. | 
|         |   1159  | 
|         |   1160 2002-09-25  David Hyatt  <hyatt@apple.com> | 
|         |   1161  | 
|         |   1162 	Fix the impls of min/max to not use +inf/-inf when you have | 
|         |   1163 	arguments.  Technically there's still a bug here for the no | 
|         |   1164 	argument case, probably caused by a screwup when +inf/-inf are | 
|         |   1165 	converted to doubles. | 
|         |   1166 	 | 
|         |   1167         * kjs/math_object.cpp: | 
|         |   1168         (MathFuncImp::call): | 
|         |   1169  | 
|         |   1170 2002-09-25  Darin Adler  <darin@apple.com> | 
|         |   1171  | 
|         |   1172 	- fixed 3057964 -- JS problem performing MD5 script embedded in yahoo login page | 
|         |   1173  | 
|         |   1174         * kjs/simple_number.h: Fix incorrect check for sign bit that was munging numbers | 
|         |   1175 	in the range 0x10000000 to 0x1FFFFFFF. | 
|         |   1176  | 
|         |   1177 === Alexander-24 === | 
|         |   1178  | 
|         |   1179 === Alexander-22 === | 
|         |   1180  | 
|         |   1181 2002-09-05  Maciej Stachowiak  <mjs@apple.com> | 
|         |   1182  | 
|         |   1183 	First baby step towards moving List away from garbage collection. | 
|         |   1184 	 | 
|         |   1185         * kjs/types.h: Add needsMarking boolean and make List inherit from | 
|         |   1186 	Value privately instead of publicly. | 
|         |   1187  | 
|         |   1188 2002-08-30  Darin Adler  <darin@apple.com> | 
|         |   1189  | 
|         |   1190         * JavaScriptCore.pbproj/project.pbxproj: Allowed the new Project Builder to put in | 
|         |   1191 	encodings for each file. | 
|         |   1192  | 
|         |   1193 === Alexander-21 === | 
|         |   1194  | 
|         |   1195 === Alexander-20 === | 
|         |   1196  | 
|         |   1197 2002-08-20  Darin Adler  <darin@apple.com> | 
|         |   1198  | 
|         |   1199 	Three small changes to things that showed up in the sample. | 
|         |   1200  | 
|         |   1201 	5% speed increase on cvs-js-performance test. | 
|         |   1202 	 | 
|         |   1203         * kjs/simple_number.h: Check if double is an integer with d == (double)(int)d | 
|         |   1204 	instead of remainder(d, 1) == 0, saving a function call each time. | 
|         |   1205  | 
|         |   1206         * kjs/ustring.cpp: | 
|         |   1207         (UString::find): Compare the first character before calling memcmp for the rest. | 
|         |   1208         (UString::rfind): Ditto. | 
|         |   1209         (KJS::operator==): Don't do a strlen before starting to compare the characters. | 
|         |   1210  | 
|         |   1211 2002-08-20  Maciej Stachowiak  <mjs@apple.com> | 
|         |   1212  | 
|         |   1213         * kjs/object.cpp: Don't reference other ValueImps in the | 
|         |   1214 	destructor, they may have already been destroyed, and will have | 
|         |   1215 	GC_ALLOWED set already in any case. | 
|         |   1216  | 
|         |   1217 2002-08-19  Maciej Stachowiak  <mjs@apple.com> | 
|         |   1218  | 
|         |   1219 	Fixed the bug that made sony.com menus come out wrong and made | 
|         |   1220 	aa.com crash (Radar 3027762). | 
|         |   1221 	 | 
|         |   1222 	Mode most methods inline. | 
|         |   1223 	 | 
|         |   1224         * kjs/completion.cpp: | 
|         |   1225         * kjs/completion.h: | 
|         |   1226  | 
|         |   1227 2002-08-19  Maciej Stachowiak  <mjs@apple.com> | 
|         |   1228  | 
|         |   1229 	Maintain stack of old "arguments" property values for functions | 
|         |   1230 	implicitly on the system stack instead of explicitly in the | 
|         |   1231 	FunctionImp. This eliminates only a trivial number of GC | 
|         |   1232 	allocations (less than 200) but eliminates one of the two cases | 
|         |   1233 	where a ListImp * is stored directly, paving the way to separate | 
|         |   1234 	List from Value. | 
|         |   1235 	 | 
|         |   1236         * kjs/function.h: Remove argStack, pushArgs and popArgs. | 
|         |   1237         * kjs/function.cpp: | 
|         |   1238         (FunctionImp::FunctionImp): Don't initalize argStack. | 
|         |   1239         (FunctionImp::~FunctionImp): Remove comment about argStack. | 
|         |   1240         (FunctionImp::mark): Don't mark the argStack. | 
|         |   1241         (FunctionImp::call): Save old "arguments" property in a Value, | 
|         |   1242 	where it will be GC-protected, rather than keeping a list, and | 
|         |   1243 	restore the old value when done executing. | 
|         |   1244  | 
|         |   1245 2002-08-18  Darin Adler  <darin@apple.com> | 
|         |   1246  | 
|         |   1247         * kjs/internal.cpp: (KJS::printInfo): Remove one more CompletionType | 
|         |   1248 	that Maciej missed. | 
|         |   1249  | 
|         |   1250 2002-08-18  Maciej Stachowiak  <mjs@apple.com> | 
|         |   1251  | 
|         |   1252 	Remove stray references to CompletionType and CompletionImp. | 
|         |   1253 	 | 
|         |   1254         * kjs/completion.h: | 
|         |   1255         * kjs/object.cpp: | 
|         |   1256         * kjs/value.h: | 
|         |   1257  | 
|         |   1258 2002-08-18  Maciej Stachowiak  <mjs@apple.com> | 
|         |   1259  | 
|         |   1260 	Separated Completion from Value and made it a pure stack | 
|         |   1261 	object. This removed another 160,000 of the remaining 580,000 | 
|         |   1262 	garbage collected object allocations. | 
|         |   1263  | 
|         |   1264 	6% speed increase on cvs-js-performance test. | 
|         |   1265 	 | 
|         |   1266         * kjs/completion.cpp: Added. New implementation that doesn't | 
|         |   1267 	require a ValueImp *. | 
|         |   1268         (Completion::Completion): | 
|         |   1269         (Completion::complType): | 
|         |   1270         (Completion::value): | 
|         |   1271         (Completion::target): | 
|         |   1272         (Completion::isValueCompletion): | 
|         |   1273         * kjs/completion.h: Added. | 
|         |   1274         * kjs/function.cpp: | 
|         |   1275 	(GlobalFuncImp::call): Removed some (apparently mistaken) uses of | 
|         |   1276 	Completion as a Value. | 
|         |   1277         * kjs/internal.cpp: | 
|         |   1278         * kjs/internal.h: | 
|         |   1279         * kjs/types.cpp: Removed Completion stuff. | 
|         |   1280         * kjs/types.h: Removed Completion stuff. | 
|         |   1281         * JavaScriptCore.pbproj/project.pbxproj: Added new header. | 
|         |   1282  | 
|         |   1283 2002-08-16  Darin Adler  <darin@apple.com> | 
|         |   1284  | 
|         |   1285 	Fix the Development build. | 
|         |   1286  | 
|         |   1287         * kjs/object.cpp: Take out a use of ReferenceType. | 
|         |   1288  | 
|         |   1289         * kjs/ustring.h: Added a bit more inlining. | 
|         |   1290         * kjs/ustring.cpp: Moved the function out of here. | 
|         |   1291  | 
|         |   1292 2002-08-16  Maciej Stachowiak  <mjs@apple.com> | 
|         |   1293  | 
|         |   1294 	Final step of the Reference change. Completely separate Reference | 
|         |   1295 	from Value, and eliminate ReferenceImp. | 
|         |   1296  | 
|         |   1297 	18% speedup on cvs-js-performance test. | 
|         |   1298  | 
|         |   1299         * kjs/internal.cpp, kjs/internal.h: Remove ReferenceImp. | 
|         |   1300         * kjs/nodes.cpp: | 
|         |   1301         (Node::evaluateReference): Use Reference::makeValueReference(), | 
|         |   1302 	not ConstReference. | 
|         |   1303         * kjs/reference.cpp: | 
|         |   1304         (Reference::Reference): New implementation, handles both regular | 
|         |   1305 	and value references. | 
|         |   1306         (Reference::makeValueReference): Incorporate functionality of ConstReference | 
|         |   1307 	into this class. | 
|         |   1308         (Reference::getBase): New implementation (incorporates error vase | 
|         |   1309 	for value references). | 
|         |   1310 	(Reference::getPropertyName): New implementation (incorporates error case | 
|         |   1311 	for value references). | 
|         |   1312         (Reference::putValue): New implementation (incorporates error case | 
|         |   1313 	for value references). | 
|         |   1314         (Reference::deleteValue): New implementation (incorporates error case | 
|         |   1315 	for value references). | 
|         |   1316         (Reference::getValue): New implementation (incorporates special case | 
|         |   1317 	for value references). | 
|         |   1318         (Reference::isMutable): New implementation. | 
|         |   1319 	* kjs/reference.h: New implementation that merges ReferenceImp | 
|         |   1320 	into the stack object. | 
|         |   1321         * kjs/value.h, kjs/value.cpp: Removed all reference-related method. | 
|         |   1322  | 
|         |   1323 2002-08-16  Darin Adler  <darin@apple.com> | 
|         |   1324  | 
|         |   1325 	- fixed 3026184 -- Hang going to http://aa.com/ while executing JavaScript | 
|         |   1326  | 
|         |   1327         * kjs/simple_number.h: (SimpleNumber::value): Fixed conversion to a negative | 
|         |   1328 	number. The technique of using division was no good. Instead, or in the sign | 
|         |   1329 	bits as needed. | 
|         |   1330  | 
|         |   1331 2002-08-16  Maciej Stachowiak  <mjs@apple.com> | 
|         |   1332  | 
|         |   1333         * kjs/reference_list.h: Must include headers with "", not | 
|         |   1334 	<>. D'oh! | 
|         |   1335  | 
|         |   1336 2002-08-16  Maciej Stachowiak  <mjs@apple.com> | 
|         |   1337  | 
|         |   1338         * JavaScriptCore.pbproj/project.pbxproj: Install reference.h and | 
|         |   1339 	reference_list.h so WebCore compiles (duh). | 
|         |   1340  | 
|         |   1341 2002-08-16  Maciej Stachowiak  <mjs@apple.com> | 
|         |   1342  | 
|         |   1343         * JavaScriptCore.pbproj/project.pbxproj: | 
|         |   1344         * kjs/internal.cpp: | 
|         |   1345         * kjs/internal.h: | 
|         |   1346         * kjs/nodes.cpp: | 
|         |   1347         (Node::evaluateReference): | 
|         |   1348         * kjs/reference.cpp: | 
|         |   1349         (Reference::Reference): | 
|         |   1350         (Reference::makeValueReference): | 
|         |   1351         (Reference::getBase): | 
|         |   1352         (Reference::getPropertyName): | 
|         |   1353         (Reference::getValue): | 
|         |   1354         (Reference::putValue): | 
|         |   1355         (Reference::deleteValue): | 
|         |   1356         (Reference::isMutable): | 
|         |   1357         * kjs/reference.h: | 
|         |   1358         * kjs/reference_list.h: | 
|         |   1359         * kjs/value.cpp: | 
|         |   1360         (ValueImp::dispatchToUInt32): | 
|         |   1361         * kjs/value.h: | 
|         |   1362  | 
|         |   1363 2002-08-16  Maciej Stachowiak  <mjs@apple.com> | 
|         |   1364  | 
|         |   1365 	Next step: reimplement ReferenceList from scratch, and store it as | 
|         |   1366 	an actual Reference object, so ReferenceList no longer depends on | 
|         |   1367 	Reference being a Value or having a ReferenceImp. A resizing | 
|         |   1368 	vector might be even better the way this is used. | 
|         |   1369  | 
|         |   1370 	Also moved Reference to its own header and implementation file in | 
|         |   1371 	preparation for reimplementing it. | 
|         |   1372 	 | 
|         |   1373         * JavaScriptCore.pbproj/project.pbxproj: | 
|         |   1374         * kjs/nodes.cpp: | 
|         |   1375         (ForInNode::execute): | 
|         |   1376         * kjs/reference.cpp: Added. | 
|         |   1377         (Reference::Reference): | 
|         |   1378         (Reference::dynamicCast): | 
|         |   1379         (ConstReference::ConstReference): | 
|         |   1380         * kjs/reference.h: Added. | 
|         |   1381         * kjs/reference_list.cpp: Added. | 
|         |   1382         (ReferenceList::ReferenceList): | 
|         |   1383         (ReferenceList::operator=): | 
|         |   1384         (ReferenceList::swap): | 
|         |   1385         (ReferenceList::append): | 
|         |   1386         (ReferenceList::~ReferenceList): | 
|         |   1387         (ReferenceList::begin): | 
|         |   1388         (ReferenceList::end): | 
|         |   1389         (ReferenceListIterator::ReferenceListIterator): | 
|         |   1390         (ReferenceListIterator::operator!=): | 
|         |   1391         (ReferenceListIterator::operator->): | 
|         |   1392         (ReferenceListIterator::operator++): | 
|         |   1393         * kjs/reference_list.h: | 
|         |   1394         * kjs/types.cpp: | 
|         |   1395         * kjs/types.h: | 
|         |   1396  | 
|         |   1397 2002-08-16  Maciej Stachowiak  <mjs@apple.com> | 
|         |   1398  | 
|         |   1399 	Fix Development build - some NDEBUG code had to be changed for the | 
|         |   1400 	Value/Reference split. | 
|         |   1401 	 | 
|         |   1402         * kjs/internal.cpp: | 
|         |   1403         (KJS::printInfo): | 
|         |   1404         * kjs/nodes.cpp: | 
|         |   1405         (FunctionCallNode::evaluate): | 
|         |   1406  | 
|         |   1407 2002-08-16  Maciej Stachowiak  <mjs@apple.com> | 
|         |   1408  | 
|         |   1409         * kjs/reference_list.h: Added file I forgot to check in last time. | 
|         |   1410  | 
|         |   1411 2002-08-15  Maciej Stachowiak  <mjs@apple.com> | 
|         |   1412  | 
|         |   1413 	Phase 1 of optimization to stop allocating references through the | 
|         |   1414 	collector. This step clearly splits evaluating to a reference and | 
|         |   1415 	evaluating to a value, and moves all of the reference-specific | 
|         |   1416 	operations from Value to Reference. A special ConstReference class | 
|         |   1417 	helps out for the one case where you need special reference | 
|         |   1418 	operations if the result is a reference, and not otherwise. | 
|         |   1419  | 
|         |   1420 	Also, Reference now inherits privately from Value, and there is a | 
|         |   1421 	new ReferenceList class that inherits privately from List, so the | 
|         |   1422 	uses of Reference and Value are now completely orthogonal. This | 
|         |   1423 	means that as the next step, their implementations can be | 
|         |   1424 	completely disentangled. | 
|         |   1425 	 | 
|         |   1426 	This step has no actual performance impact. | 
|         |   1427 	 | 
|         |   1428         * kjs/collector.cpp: | 
|         |   1429         (Collector::collect): | 
|         |   1430         * kjs/nodes.cpp: | 
|         |   1431         (Node::evaluateReference): | 
|         |   1432         (ResolveNode::evaluate): | 
|         |   1433         (ResolveNode::evaluateReference): | 
|         |   1434         (ElementNode::evaluate): | 
|         |   1435         (PropertyValueNode::evaluate): | 
|         |   1436         (AccessorNode1::evaluate): | 
|         |   1437         (AccessorNode1::evaluateReference): | 
|         |   1438         (AccessorNode2::evaluate): | 
|         |   1439         (AccessorNode2::evaluateReference): | 
|         |   1440         (ArgumentListNode::evaluateList): | 
|         |   1441         (NewExprNode::evaluate): | 
|         |   1442         (FunctionCallNode::evaluate): | 
|         |   1443         (PostfixNode::evaluate): | 
|         |   1444         (DeleteNode::evaluate): | 
|         |   1445         (VoidNode::evaluate): | 
|         |   1446         (TypeOfNode::evaluate): | 
|         |   1447         (PrefixNode::evaluate): | 
|         |   1448         (UnaryPlusNode::evaluate): | 
|         |   1449         (NegateNode::evaluate): | 
|         |   1450         (BitwiseNotNode::evaluate): | 
|         |   1451         (LogicalNotNode::evaluate): | 
|         |   1452         (MultNode::evaluate): | 
|         |   1453         (AddNode::evaluate): | 
|         |   1454         (ShiftNode::evaluate): | 
|         |   1455         (RelationalNode::evaluate): | 
|         |   1456         (EqualNode::evaluate): | 
|         |   1457         (BitOperNode::evaluate): | 
|         |   1458         (BinaryLogicalNode::evaluate): | 
|         |   1459         (ConditionalNode::evaluate): | 
|         |   1460         (AssignNode::evaluate): | 
|         |   1461         (CommaNode::evaluate): | 
|         |   1462         (VarDeclNode::evaluate): | 
|         |   1463         (ExprStatementNode::execute): | 
|         |   1464         (IfNode::execute): | 
|         |   1465         (DoWhileNode::execute): | 
|         |   1466         (WhileNode::execute): | 
|         |   1467         (ForNode::execute): | 
|         |   1468         (ForInNode::execute): | 
|         |   1469         (ReturnNode::execute): | 
|         |   1470         (WithNode::execute): | 
|         |   1471         (CaseClauseNode::evaluate): | 
|         |   1472         (SwitchNode::execute): | 
|         |   1473         (ThrowNode::execute): | 
|         |   1474         * kjs/nodes.h: | 
|         |   1475         * kjs/types.cpp: | 
|         |   1476         (ConstReference::ConstReference): | 
|         |   1477         * kjs/types.h: | 
|         |   1478         * kjs/value.h: | 
|         |   1479  | 
|         |   1480 2002-08-15  Darin Adler  <darin@apple.com> | 
|         |   1481  | 
|         |   1482 	Tweaks and small bug fixes to Maciej's excellent new fixnum optimization. | 
|         |   1483 	Also updated or removed comments that call it "fixnum" instead of "simple number". | 
|         |   1484  | 
|         |   1485         * kjs/simple_number.h: Change constant names so they don't SHOUT the way macro | 
|         |   1486 	names do. Added constants for shift, min, and max. Fixed off-by-1 error that | 
|         |   1487 	prevented us from using the extreme values on either end. Base the range of | 
|         |   1488 	numbers on a fixed 32 bits constant rather than the size of a long, because | 
|         |   1489 	code elsewhere depends on positive numbers fitting into both "unsigned" and | 
|         |   1490 	"UInt32" while assuming it doesn't need to check; we can easily change this | 
|         |   1491 	later. Used int types rather than long for essentially the same reason. | 
|         |   1492 	Fixed the value-extraction function so it will work for negative numbers even | 
|         |   1493         if the shift is logical, not arithmetic, by using division instead. | 
|         |   1494 	Renamed functions to be quite terse since they are inside a class. | 
|         |   1495  | 
|         |   1496         * kjs/value.h: | 
|         |   1497         * kjs/value.cpp: | 
|         |   1498         (ValueImp::dispatchToObject): Call NumberImp::toObject in a "non-virtual" | 
|         |   1499 	way rather than repeating the code here. | 
|         |   1500         (ValueImp::dispatchToUInt32): Handle the negative number case correctly. | 
|         |   1501         (ValueImp::dispatchGetBase): Call ValueImp::getBase in a "non-virtual" | 
|         |   1502 	way rather than repeating the code here. | 
|         |   1503         (ValueImp::dispatchGetPropertyName): Call ValueImp::getPropertyName in a | 
|         |   1504 	"non-virtual" way rather than repeating the code here. | 
|         |   1505         (ValueImp::dispatchPutValue): Call ValueImp::putValue in a "non-virtual" | 
|         |   1506 	way rather than repeating the code here. | 
|         |   1507         (ValueImp::dispatchDeleteValue): Call ValueImp::deleteValue in a "non-virtual" | 
|         |   1508 	way rather than repeating the code here. | 
|         |   1509         (Number::Number): Fixed a bug where the double-based constructor was casting | 
|         |   1510 	to long, so wouldn't do the "remainder" check. | 
|         |   1511  | 
|         |   1512 === Alexander-19 === | 
|         |   1513  | 
|         |   1514 === Alexander-18 === | 
|         |   1515  | 
|         |   1516 2002-08-15  Maciej Stachowiak  <mjs@apple.com> | 
|         |   1517  | 
|         |   1518 	Phase 2 of fixnum optimization. Store any integral number that | 
|         |   1519 	will fit in two bits less than a long inside the ValueImp * | 
|         |   1520 	itself, thus avoiding the need to deal with the garbage collector | 
|         |   1521 	at all for these types. Such numbers comprised .5 million of the | 
|         |   1522 	1.7 million ValueImps created during the cvs-js-performance test, | 
|         |   1523 	so traffic through the garbage collector should be | 
|         |   1524  | 
|         |   1525 	20% improvement on cvs-js-performance. This may also show up on | 
|         |   1526 	cvs-base, but I did not compare and I am too lazy to make clean in | 
|         |   1527 	WebCore yet again.  | 
|         |   1528  | 
|         |   1529 	This also significantly reduces memory footprint on | 
|         |   1530 	JavaScript-heavy pages. Size after going through | 
|         |   1531 	cvs-js-performance suite is now 22MB to 17.5MB. | 
|         |   1532 	 | 
|         |   1533         * JavaScriptCore.pbproj/project.pbxproj: | 
|         |   1534         * kjs/simple_number.h: Added. Some inline static methods for handling | 
|         |   1535 	simple numbers that are stored in the pointer. | 
|         |   1536         * kjs/ustring.h: | 
|         |   1537         * kjs/ustring.cpp: | 
|         |   1538         (UString::from): Added new overload for long. | 
|         |   1539         * kjs/value.cpp: | 
|         |   1540         (ValueImp::marked): Add special case for simple numbers. | 
|         |   1541         (ValueImp::setGcAllowed): Likewise. | 
|         |   1542 	(ValueImp::toInteger): Call dispatch version of | 
|         |   1543 	toUInt32(unsigned&), not the real method. | 
|         |   1544         (ValueImp::toInt32): Likewise. | 
|         |   1545         (ValueImp::toUInt32): Likewise. | 
|         |   1546         (ValueImp::toUInt16): Likewise. | 
|         |   1547         (ValueImp::dispatchType): Add special case for simple numbers. | 
|         |   1548         (ValueImp::dispatchToPrimitive): Likewise. | 
|         |   1549         (ValueImp::dispatchToBoolean): Likewise. | 
|         |   1550         (ValueImp::dispatchToNumber): Likewise. | 
|         |   1551         (ValueImp::dispatchToString): Likewise. | 
|         |   1552         (ValueImp::dispatchToObject): Likewise. | 
|         |   1553         (ValueImp::dispatchToUInt32): Likewise. | 
|         |   1554         (ValueImp::dispatchGetBase): Likewise. | 
|         |   1555         (ValueImp::dispatchGetPropertyName): Likewise. | 
|         |   1556         (ValueImp::dispatchPutValue): Likewise. | 
|         |   1557         (ValueImp::dispatchDeleteValue): Likewise. | 
|         |   1558         (Number::Number): Create a simple number instead of a full-blown | 
|         |   1559 	ValueImp when possible. | 
|         |   1560         (Number::value): Likewise. | 
|         |   1561         * kjs/value.h: | 
|         |   1562  | 
|         |   1563 2002-08-15  Maciej Stachowiak  <mjs@apple.com> | 
|         |   1564  | 
|         |   1565 	Phase one of the "fixnum" optimization (storing small enough | 
|         |   1566 	integers in the pointer). This just paves the way for the change | 
|         |   1567 	by making all the virtual functions of ValueImp private and adding | 
|         |   1568 	non-virtual dispatchers which can call the virtual function or | 
|         |   1569 	handle fixnums specially. | 
|         |   1570  | 
|         |   1571 	Also, I marked every place that should need a special case with a | 
|         |   1572 	FIXNUM comment. | 
|         |   1573 	 | 
|         |   1574         * kjs/bool_object.cpp: | 
|         |   1575         (BooleanObjectImp::construct): Call dispatch method not the real method. | 
|         |   1576         * kjs/internal.h: Make toUInt32 private to make sure no one calls it directly | 
|         |   1577 	on a NumberImp*. | 
|         |   1578         * kjs/nodes.cpp: | 
|         |   1579         (ForInNode::execute): Call dispatch method not the real method. | 
|         |   1580         * kjs/object.cpp: | 
|         |   1581 	(ObjectImp::propList): Call dispatch method not the real method. | 
|         |   1582         * kjs/object.h: | 
|         |   1583         * kjs/string_object.cpp: | 
|         |   1584         (StringProtoFuncImp::call): Call dispatch method not the real method. | 
|         |   1585         (StringObjectImp::construct): Call dispatch method not the real method. | 
|         |   1586         * kjs/value.h: | 
|         |   1587         * kjs/value.cpp: | 
|         |   1588         (ValueImp::marked): Put a comment about required FIXNUM change. | 
|         |   1589         (ValueImp::setGcAllowed): Likewise. | 
|         |   1590         (ValueImp::dispatchType): Just call the virtual method for now. | 
|         |   1591         (ValueImp::dispatchToPrimitive): Likewise. | 
|         |   1592         (ValueImp::dispatchToBoolean): Likewise. | 
|         |   1593         (ValueImp::dispatchToNumber): Likewise. | 
|         |   1594         (ValueImp::dispatchToString): Likewise. | 
|         |   1595         (ValueImp::dispatchToObject): Likewise. | 
|         |   1596         (ValueImp::dispatchToUInt32): Likewise. | 
|         |   1597         (ValueImp::dispatchGetBase): Likewise. | 
|         |   1598         (ValueImp::dispatchGetPropertyName): Likewise. | 
|         |   1599         (ValueImp::dispatchGetValue): Likewise. | 
|         |   1600         (ValueImp::dispatchPutValue): Likewise. | 
|         |   1601         (ValueImp::dispatchDeleteValue): Likewise. | 
|         |   1602  | 
|         |   1603 2002-08-14  Darin Adler  <darin@apple.com> | 
|         |   1604  | 
|         |   1605 	Another pass of tweaks, including one bug fix. | 
|         |   1606  | 
|         |   1607         * kjs/array_object.cpp: | 
|         |   1608         (ArrayInstanceImp::ArrayInstanceImp): Use malloc, not new. | 
|         |   1609         (ArrayInstanceImp::get): Use a local variable so we don't rely on the optimizer | 
|         |   1610 	to avoid indexing twice. | 
|         |   1611         (ArrayInstanceImp::hasProperty): Use a local variable, and also check against | 
|         |   1612 	UndefinedImp::staticUndefined rather than doing type() != UndefinedType. | 
|         |   1613  | 
|         |   1614 2002-08-14  Maciej Stachowiak  <mjs@apple.com> | 
|         |   1615  | 
|         |   1616         Simplified array handling by using NULL to represent empty cells | 
|         |   1617 	instead of the Undefined object, so we can use calloc, realloc and | 
|         |   1618 	memset instead of loops. Inspired by a suggestion of Darin's. | 
|         |   1619  | 
|         |   1620 	* kjs/array_object.cpp: | 
|         |   1621         (ArrayInstanceImp::ArrayInstanceImp): | 
|         |   1622         (ArrayInstanceImp::~ArrayInstanceImp): | 
|         |   1623         (ArrayInstanceImp::get): | 
|         |   1624         (ArrayInstanceImp::hasProperty): | 
|         |   1625         (ArrayInstanceImp::deleteProperty): | 
|         |   1626         (ArrayInstanceImp::setLength): | 
|         |   1627         (ArrayInstanceImp::mark): | 
|         |   1628  | 
|         |   1629 2002-08-14  Maciej Stachowiak  <mjs@apple.com> | 
|         |   1630  | 
|         |   1631         Fix major JavaScript memory leak. run-plt says cvs-base improved | 
|         |   1632 	by 2% and cvs-js-performance improved by 7%. However, this was | 
|         |   1633 	within the possible noise level in each case. | 
|         |   1634          | 
|         |   1635 	The fix was to store ValueImp *'s in the array instead of Value | 
|         |   1636 	objects, since the Value wrapper will keep a ref and make the | 
|         |   1637 	object immortal. | 
|         |   1638  | 
|         |   1639 	* kjs/array_object.cpp: | 
|         |   1640         (ArrayInstanceImp::ArrayInstanceImp): | 
|         |   1641         (ArrayInstanceImp::get): | 
|         |   1642         (ArrayInstanceImp::put): | 
|         |   1643         (ArrayInstanceImp::hasProperty): | 
|         |   1644         (ArrayInstanceImp::deleteProperty): | 
|         |   1645         (ArrayInstanceImp::setLength): | 
|         |   1646         (ArrayInstanceImp::mark): | 
|         |   1647         * kjs/array_object.h: | 
|         |   1648  | 
|         |   1649 2002-08-13  Maciej Stachowiak  <mjs@apple.com> | 
|         |   1650  | 
|         |   1651 	Add the ability to determine the classes of live JavaScript | 
|         |   1652 	objects, to help with leak fixing. | 
|         |   1653  | 
|         |   1654         * kjs/collector.h, kjs/collector.cpp: | 
|         |   1655         (Collector::liveObjectClasses): | 
|         |   1656  | 
|         |   1657 2002-08-13  Maciej Stachowiak  <mjs@apple.com> | 
|         |   1658  | 
|         |   1659 	Small speed improvement. 3% faster on cvs-js-performance, no | 
|         |   1660 	measurable change on cvs-static-urls. | 
|         |   1661 	 | 
|         |   1662         * kjs/collector.cpp: | 
|         |   1663         (Collector::collect): Combine 3 loops over all objects into one, | 
|         |   1664 	to reduce flat time and improve locality of reference. | 
|         |   1665  | 
|         |   1666 2002-08-12  Darin Adler  <darin@apple.com> | 
|         |   1667  | 
|         |   1668 	Speed improvements. 19% faster on cvs-js-performance, 1% on cvs-static-urls. | 
|         |   1669  | 
|         |   1670 	Use global string objects for length and other common property names rather | 
|         |   1671 	than constantly making and destroying them. Use integer versions of get() and | 
|         |   1672 	other related calls rather than always making a string. | 
|         |   1673  | 
|         |   1674 	Also get rid of many unneeded constructors, destructors, copy constructors, and | 
|         |   1675 	assignment operators. And make some functions non-virtual. | 
|         |   1676  | 
|         |   1677         * kjs/internal.h: | 
|         |   1678         * kjs/internal.cpp: | 
|         |   1679         (NumberImp::toUInt32): Implement. | 
|         |   1680         (ReferenceImp::ReferenceImp): Special case for numeric property names. | 
|         |   1681         (ReferenceImp::getPropertyName): Moved guts here from ValueImp. Handle numeric case. | 
|         |   1682         (ReferenceImp::getValue): Moved guts here from ValueImp. Handle numeric case. | 
|         |   1683         (ReferenceImp::putValue): Moved guts here from ValueImp. Handle numeric case. | 
|         |   1684         (ReferenceImp::deleteValue): Added. Handle numeric case. | 
|         |   1685  | 
|         |   1686         * kjs/array_object.h: | 
|         |   1687         * kjs/array_object.cpp: All-new array implementation that stores the elements | 
|         |   1688 	in a C++ array rather than in a property map. | 
|         |   1689         (ArrayInstanceImp::ArrayInstanceImp): Allocate the C++ array. | 
|         |   1690         (ArrayInstanceImp::~ArrayInstanceImp): Delete the C++ array. | 
|         |   1691         (ArrayInstanceImp::get): Implement both the old version and the new overload that | 
|         |   1692 	takes an unsigned index for speed. | 
|         |   1693         (ArrayInstanceImp::put): Implement both the old version and the new overload that | 
|         |   1694 	takes an unsigned index for speed. | 
|         |   1695         (ArrayInstanceImp::hasProperty): Implement both the old version and the new overload that | 
|         |   1696 	takes an unsigned index for speed. | 
|         |   1697         (ArrayInstanceImp::deleteProperty): Implement both the old version and the new overload that | 
|         |   1698 	takes an unsigned index for speed. | 
|         |   1699         (ArrayInstanceImp::setLength): Added. Used by the above to resize the array. | 
|         |   1700         (ArrayInstanceImp::mark): Mark the elements of the array too. | 
|         |   1701         (ArrayPrototypeImp::ArrayPrototypeImp): Pass the length to the array instance constructor. | 
|         |   1702  | 
|         |   1703         * kjs/bool_object.cpp: | 
|         |   1704         * kjs/date_object.cpp: | 
|         |   1705         * kjs/error_object.cpp: | 
|         |   1706         * kjs/function.cpp: | 
|         |   1707         * kjs/function_object.cpp: | 
|         |   1708         * kjs/math_object.cpp: | 
|         |   1709         * kjs/nodes.cpp: | 
|         |   1710         * kjs/nodes.h: | 
|         |   1711         * kjs/number_object.cpp: | 
|         |   1712         * kjs/object_object.cpp: | 
|         |   1713         * kjs/regexp_object.cpp: | 
|         |   1714         * kjs/string_object.cpp: | 
|         |   1715  | 
|         |   1716         * kjs/nodes2string.cpp: (SourceStream::operator<<): Add a special case for char now that | 
|         |   1717 	you can't create a UString from a char implicitly. | 
|         |   1718  | 
|         |   1719         * kjs/object.h: | 
|         |   1720         * kjs/object.cpp: | 
|         |   1721         (ObjectImp::get): Call through to the string version if the numeric version is not implemented. | 
|         |   1722         (ObjectImp::put): Call through to the string version if the numeric version is not implemented. | 
|         |   1723         (ObjectImp::hasProperty): Call through to the string version if the numeric version is not implemented. | 
|         |   1724         (ObjectImp::deleteProperty): Call through to the string version if the numeric version is not implemented. | 
|         |   1725  | 
|         |   1726         * kjs/types.h: | 
|         |   1727         * kjs/types.cpp: | 
|         |   1728         (Reference::Reference): Added constructors for the numeric property name case. | 
|         |   1729  | 
|         |   1730         * kjs/ustring.h: Made the constructor that turns a character into a string be explicit so we | 
|         |   1731 	don't get numbers that turn themselves into strings. | 
|         |   1732         * kjs/ustring.cpp: | 
|         |   1733         (UString::UString): Detect the empty string case, and use a shared empty string. | 
|         |   1734         (UString::find): Add an overload for single character finds. | 
|         |   1735         (UString::rfind): Add an overload for single character finds. | 
|         |   1736         (KJS::operator==): Fix bug where it would call strlen(0) if the first string was not null. | 
|         |   1737 	Also handle non-ASCII characters consistently with the rest of the code by casting to unsigned char | 
|         |   1738 	just in case. | 
|         |   1739  | 
|         |   1740         * kjs/value.h: Make ValueImp and all subclasses non-copyable and non-assignable. | 
|         |   1741         * kjs/value.cpp: | 
|         |   1742         (ValueImp::toUInt32): New interface, mainly useful so we can detect array indices and not turn | 
|         |   1743 	them into strings and back. | 
|         |   1744         (ValueImp::toInteger): Use the new toUInt32. Probably can use more improvement. | 
|         |   1745         (ValueImp::toInt32): Use the new toUInt32. Probably can use more improvement. | 
|         |   1746         (ValueImp::toUInt16): Use the new toUInt32. Probably can use more improvement. | 
|         |   1747         (ValueImp::getBase): Remove handling of the Reference case. That's in ReferenceImp now. | 
|         |   1748         (ValueImp::getPropertyName): Remove handling of the Reference case. That's in ReferenceImp now. | 
|         |   1749         (ValueImp::getValue): Remove handling of the Reference case. That's in ReferenceImp now. | 
|         |   1750         (ValueImp::putValue): Remove handling of the Reference case. That's in ReferenceImp now. | 
|         |   1751         (ValueImp::deleteValue): Added. Used so we can do delete the same way we do put. | 
|         |   1752  | 
|         |   1753 === Alexander-17 === | 
|         |   1754  | 
|         |   1755 2002-08-09  Darin Adler  <darin@apple.com> | 
|         |   1756  | 
|         |   1757 	Some string speedups. Makes sony.com cached 11% faster on Development, but | 
|         |   1758         the improvement for Deployment should be greater. | 
|         |   1759  | 
|         |   1760         * kjs/ustring.h: Made it possible for UChar objects to be uninitialized, which | 
|         |   1761 	gives a speed boost. Inlined CString's +=, UString's destructor, +=, and +. | 
|         |   1762         * kjs/ustring.cpp: | 
|         |   1763         (UString::UString): Optimize const char * version, which showed up | 
|         |   1764 	heavily in performance analysis. Added new two-UString version, which | 
|         |   1765 	makes the + operator fast.  | 
|         |   1766         (UString::ascii): Remove thread safety changes. Change static buffer to remember | 
|         |   1767 	its size, and to always be at least 4096 bytes long; that way we never have to | 
|         |   1768 	reallocate unless it's for a long string. Also make code to extract the characters | 
|         |   1769 	significantly faster by getting rid of two pointer dereferences per character. | 
|         |   1770         (UString::is8Bit): Avoid one pointer dereference per character. | 
|         |   1771         (UString::toDouble): Use ascii() instead of cstring() to avoid copying the string. | 
|         |   1772  | 
|         |   1773         * kjs/collector.cpp: Remove unneeded APPLE_CHANGES. | 
|         |   1774         * kjs/regexp.cpp: Remove ifdefs around some APPLE_CHANGES that we | 
|         |   1775 	want to keep, because they just fix warnings. | 
|         |   1776         * kjs/value.h: Remove obsolete APPLE_CHANGES comment. | 
|         |   1777  | 
|         |   1778         * JavaScriptCore.pbproj/project.pbxproj: Project Builder decided | 
|         |   1779 	to move a line around in the file. | 
|         |   1780  | 
|         |   1781 2002-08-09  Maciej Stachowiak  <mjs@apple.com> | 
|         |   1782  | 
|         |   1783 	Fix my last change to actually call the versions of the lock functions | 
|         |   1784 	that are recursive and initialize as needed. | 
|         |   1785 	 | 
|         |   1786         * kjs/internal.cpp: | 
|         |   1787         (InterpreterImp::InterpreterImp): | 
|         |   1788         (InterpreterImp::clear): | 
|         |   1789         (InterpreterImp::evaluate): | 
|         |   1790  | 
|         |   1791 2002-08-09  Maciej Stachowiak  <mjs@apple.com> | 
|         |   1792  | 
|         |   1793         - fixed 2948835 - JavaScriptCore locking is too fine grained, makes it too slow | 
|         |   1794  | 
|         |   1795 	* kjs/collector.cpp: | 
|         |   1796         (Collector::allocate): | 
|         |   1797         (Collector::collect): | 
|         |   1798         (Collector::finalCheck): | 
|         |   1799         (Collector::numInterpreters): | 
|         |   1800         (Collector::numGCNotAllowedObjects): | 
|         |   1801         (Collector::numReferencedObjects): | 
|         |   1802         * kjs/collector.h: | 
|         |   1803         * kjs/internal.cpp: | 
|         |   1804         (initializeInterpreterLock): | 
|         |   1805         (lockInterpreter): | 
|         |   1806         (unlockInterpreter): | 
|         |   1807         (Parser::parse): | 
|         |   1808         (InterpreterImp::InterpreterImp): | 
|         |   1809         (InterpreterImp::clear): | 
|         |   1810         (InterpreterImp::evaluate): | 
|         |   1811         * kjs/value.cpp: | 
|         |   1812         (ValueImp::ValueImp): | 
|         |   1813         (ValueImp::setGcAllowed): | 
|         |   1814  | 
|         |   1815 === milestone 0.5 === | 
|         |   1816  | 
|         |   1817 === Alexander-16 === | 
|         |   1818  | 
|         |   1819 2002-08-05  Maciej Stachowiak  <mjs@apple.com> | 
|         |   1820  | 
|         |   1821 	- fixed 3007072 - need to be able to build fat | 
|         |   1822 	 | 
|         |   1823         * JavaScriptCore.pbproj/project.pbxproj: Fixed DeploymentFat build. | 
|         |   1824  | 
|         |   1825 === Alexander-15 === | 
|         |   1826  | 
|         |   1827 2002-07-25  Darin Adler  <darin@apple.com> | 
|         |   1828  | 
|         |   1829         * JavaScriptCore.pbproj/project.pbxproj: Add DeploymentFat build style. | 
|         |   1830  | 
|         |   1831 === Alexander-14 === | 
|         |   1832  | 
|         |   1833 2002-07-21  Darin Adler  <darin@apple.com> | 
|         |   1834  | 
|         |   1835         * kjs/*: Roll KDE 3.0.2 changes in. Also switch to not using APPLE_CHANGES | 
|         |   1836 	for some of the changes that we definitely want to contribute upstream. | 
|         |   1837  | 
|         |   1838 2002-07-21  Maciej Stachowiak  <mjs@apple.com> | 
|         |   1839  | 
|         |   1840         * Makefile.am: Remove products from symroots on `make clean'. | 
|         |   1841  | 
|         |   1842 === Alexander-13 === | 
|         |   1843  | 
|         |   1844 2002-07-13  Darin Adler  <darin@apple.com> | 
|         |   1845  | 
|         |   1846         * Makefile.am: Don't use embed.am any more. | 
|         |   1847         * JavaScriptCore.pbproj/project.pbxproj: Use embed-into-alex instead | 
|         |   1848 	of make embed. | 
|         |   1849  | 
|         |   1850 2002-07-12  Darin Adler  <darin@apple.com> | 
|         |   1851  | 
|         |   1852         * kjs/ustring.h: Since <sys/types.h> includes ushort and uint now, had | 
|         |   1853 	to change the includes here to be compatible with that. | 
|         |   1854  | 
|         |   1855 2002-07-11  Darin Adler  <darin@apple.com> | 
|         |   1856  | 
|         |   1857         * JavaScriptCore.pbproj/project.pbxproj: To make the build of | 
|         |   1858 	WebCore work without using -I to peek at JavaScriptCore sources, | 
|         |   1859 	made all the Public sources Private so they are all in one directory. | 
|         |   1860 	Also, made lookup.h be Private. | 
|         |   1861  | 
|         |   1862 === Alexander-11 === | 
|         |   1863  | 
|         |   1864 === Alexander-10 === | 
|         |   1865  | 
|         |   1866 2002-06-25  Darin Adler  <darin@apple.com> | 
|         |   1867  | 
|         |   1868         * JavaScriptCore.pbproj/project.pbxproj: Re-add -Wmissing-format-attribute. | 
|         |   1869  | 
|         |   1870 === Alexander-9 === | 
|         |   1871  | 
|         |   1872 2002-06-19  Kenneth Kocienda  <kocienda@apple.com> | 
|         |   1873  | 
|         |   1874         I just played alchemical voodoo games with the linker to  | 
|         |   1875         make all our frameworks and Alexander prebound. | 
|         |   1876  | 
|         |   1877 	* JavaScriptCore.pbproj/project.pbxproj | 
|         |   1878  | 
|         |   1879 2002-06-15  Darin Adler  <darin@apple.com> | 
|         |   1880  | 
|         |   1881 	* JavaScriptCore.pbproj/project.pbxproj: Removed explicit PFE_FILE_C_DIALECTS now that | 
|         |   1882 	Project Builder handles this automatically. Removed explicit USE_GCC3 since that's implicit | 
|         |   1883 	now. Also, since this project is all C++, only use WARNING_CFLAGS with flags that are appropriate | 
|         |   1884 	for C++; don't bother breaking out C vs. C++. | 
|         |   1885  | 
|         |   1886 	* kjs/collector.cpp: Now that the system warning is fixed, use PTHREAD_MUTEX_INITIALIZER and | 
|         |   1887 	PTHREAD_COND_INITIALIZER. | 
|         |   1888 	* kjs/internal.cpp: Use PTHREAD_MUTEX_INITIALIZER. | 
|         |   1889 	* kjs/ustring.cpp: Use PTHREAD_ONCE_INIT. | 
|         |   1890  | 
|         |   1891 2002-06-15  Maciej Stachowiak  <mjs@apple.com> | 
|         |   1892  | 
|         |   1893         Made Development build mode mean what Unoptimized used to mean. Removed Unoptimized build mode.  | 
|         |   1894         Added a Mixed build mode which does what Deployment used to. All this to fix: | 
|         |   1895          | 
|         |   1896         Radar 2955367 - Change default build style to "Unoptimized" | 
|         |   1897          | 
|         |   1898 	* JavaScriptCore.pbproj/project.pbxproj: | 
|         |   1899  | 
|         |   1900 2002-06-12  Darin Adler  <darin@apple.com> | 
|         |   1901  | 
|         |   1902 	* kjs/nodes.cpp: (Node::finalCheck): A bit of APPLE_CHANGES so we | 
|         |   1903 	can compile with KJS_DEBUG_MEM defined if we want to. | 
|         |   1904  | 
|         |   1905 2002-06-10  Darin Adler  <darin@apple.com> | 
|         |   1906  | 
|         |   1907 	Merged in changes from KDE 3.0.1. | 
|         |   1908  | 
|         |   1909 	* kjs/collector.cpp: | 
|         |   1910 	* kjs/date_object.cpp: | 
|         |   1911 	* kjs/function.cpp: | 
|         |   1912 	* kjs/internal.cpp: | 
|         |   1913 	* kjs/lookup.h: | 
|         |   1914 	* kjs/object.cpp: | 
|         |   1915 	* kjs/operations.cpp: | 
|         |   1916 	* kjs/regexp.cpp: | 
|         |   1917 	* kjs/regexp_object.cpp: | 
|         |   1918 	* kjs/regexp_object.h: | 
|         |   1919 	* kjs/string_object.cpp: | 
|         |   1920 	* kjs/testkjs.cpp: | 
|         |   1921 	* kjs/ustring.cpp: | 
|         |   1922 	* kjs/value.cpp: | 
|         |   1923 	* kjs/value.h: | 
|         |   1924 	Do the merge, and add APPLE_CHANGES as needed to make things compile. | 
|         |   1925  | 
|         |   1926 	* kjs/date_object.lut.h: Re-generated. | 
|         |   1927  | 
|         |   1928 2002-06-07  Darin Adler  <darin@apple.com> | 
|         |   1929  | 
|         |   1930 	* Makefile.am: Use new shared "embed.am" file so we don't need four copies of | 
|         |   1931 	the embedding rules for WebFoundation, JavaScriptCore, WebCore, and WebKit. | 
|         |   1932  | 
|         |   1933 2002-06-07  Darin Adler  <darin@apple.com> | 
|         |   1934  | 
|         |   1935 	* JavaScriptCore.pbproj/project.pbxproj: Don't use any warning flags for C that won't work | 
|         |   1936 	for C++, because PFE uses the C warning flags on a C++ compile. | 
|         |   1937  | 
|         |   1938 === Alexander-8 === | 
|         |   1939  | 
|         |   1940 2002-06-06  Darin Adler  <darin@apple.com> | 
|         |   1941  | 
|         |   1942 	* JavaScriptCore.pbproj/project.pbxproj: Update warning flags for compatibility | 
|         |   1943 	with new C++. | 
|         |   1944  | 
|         |   1945 2002-06-05  Darin Adler  <darin@apple.com> | 
|         |   1946  | 
|         |   1947 	Fix problem seen as build failure on Jersey. | 
|         |   1948  | 
|         |   1949 	* Makefile.am: JavaScriptCore-stamp needs to be a dependency, not a | 
|         |   1950 	source file, because it doesn't have a corresponding object file. | 
|         |   1951 	Making it a dependency causes things to compile in the right order. | 
|         |   1952  | 
|         |   1953 2002-06-04  Darin Adler  <darin@apple.com> | 
|         |   1954  | 
|         |   1955 	Improve the speed of the JavaScript string append operation by growing | 
|         |   1956 	the capacity so we don't need to reallocate the string every time. | 
|         |   1957  | 
|         |   1958 	Also fix script execution so it doesn't use recursion to advance from | 
|         |   1959 	one statement to the next, using iteration instead. | 
|         |   1960  | 
|         |   1961 	* Makefile.am: Stop using BUILT_SOURCES to build JavaScriptCore-stamp, | 
|         |   1962 	because this causes the Project Builder project to build *before* the | 
|         |   1963 	subdir. Intead, use an all-am rule in a way more similar to all our | 
|         |   1964 	other directories. | 
|         |   1965  | 
|         |   1966 	* kjs/grammar.y: Link the SourceElementsNode in the opposite direction, | 
|         |   1967 	so we can walk the list and execute each element instead of using | 
|         |   1968 	recursion to reverse the list. | 
|         |   1969 	* kjs/grammar.cpp: Check in new generated file. | 
|         |   1970  | 
|         |   1971 	* kjs/nodes.cpp: | 
|         |   1972 	(SourceElementsNode::execute): | 
|         |   1973 	(SourceElementsNode::processFuncDecl): | 
|         |   1974 	(SourceElementsNode::processVarDecls): | 
|         |   1975 	Use loops instead of recursion. | 
|         |   1976  | 
|         |   1977 	* kjs/ustring.h: Don't initialize all UChar objects to 0. This was | 
|         |   1978 	wasting a *huge* amount of time. | 
|         |   1979 	* kjs/ustring.cpp: | 
|         |   1980 	(UString::Rep::create): Add a "capacity" along with the length. | 
|         |   1981 	(UString::append): Include 50% extra capacity when appending. | 
|         |   1982 	(UString::operator=): Reuse the buffer if possible rather than | 
|         |   1983 	always creating a new one. | 
|         |   1984  | 
|         |   1985 2002-06-02  Darin Adler  <darin@apple.com> | 
|         |   1986  | 
|         |   1987 	* COPYING.LIB: Fix line endings. It was using CRs. | 
|         |   1988  | 
|         |   1989 2002-05-31  Darin Adler  <darin@apple.com> | 
|         |   1990  | 
|         |   1991 	* Makefile.am: | 
|         |   1992 	* kjs/Makefile.am: | 
|         |   1993 	Slight improvements to rules that touch stamp files. | 
|         |   1994  | 
|         |   1995 2002-05-28  Maciej Stachowiak  <mjs@apple.com> | 
|         |   1996  | 
|         |   1997 	* THANKS: Demangled. | 
|         |   1998  | 
|         |   1999 === Alexander-7 === | 
|         |   2000  | 
|         |   2001 2002-05-24  Maciej Stachowiak  <mjs@apple.com> | 
|         |   2002  | 
|         |   2003 	Added license and acknowledgements. | 
|         |   2004  | 
|         |   2005 	* AUTHORS: Added. | 
|         |   2006 	* COPYING.LIB: Added. | 
|         |   2007 	* THANKS: Added. | 
|         |   2008  | 
|         |   2009 === 0.3 === | 
|         |   2010  | 
|         |   2011 === Alexander-6 === | 
|         |   2012  | 
|         |   2013 === Alexander-5 === | 
|         |   2014  | 
|         |   2015 === Alexander-4 === | 
|         |   2016  | 
|         |   2017 === JavaScriptCore-5 === | 
|         |   2018  | 
|         |   2019 2002-05-21  Maciej Stachowiak  <mjs@apple.com> | 
|         |   2020  | 
|         |   2021 	Reviewed by: Richard Williamson | 
|         |   2022  | 
|         |   2023 	Fixed Radar 2928775 - Sherlock crashes sitting in stocks channel | 
|         |   2024  | 
|         |   2025 	* kjs/internal.cpp: | 
|         |   2026 	(InterpreterImp::InterpreterImp): Set the interp pointer earlier, | 
|         |   2027 	in case garbage collection takes place while creating the global | 
|         |   2028 	values. | 
|         |   2029  | 
|         |   2030 2002-05-15  Darin Adler  <darin@apple.com> | 
|         |   2031  | 
|         |   2032 	Reviewed by: Maciej Stachowiak | 
|         |   2033 	 | 
|         |   2034 	* Makefile.am: | 
|         |   2035 	Use all-am and clean-am instead of all and clean because it's better and | 
|         |   2036 	to make "make check" at the top level work right. | 
|         |   2037  | 
|         |   2038 2002-05-13  Darin Adler  <darin@apple.com> | 
|         |   2039  | 
|         |   2040 	Reviewed by: Maciej Stachowiak | 
|         |   2041  | 
|         |   2042 	* kjs/value.h: Fix comment typos. | 
|         |   2043  | 
|         |   2044 === JavaScriptCore-4 === | 
|         |   2045  | 
|         |   2046 2002-05-10  Maciej Stachowiak  <mjs@apple.com> | 
|         |   2047  | 
|         |   2048 	Reviewed by: Ken Kocienda and Darin Adler | 
|         |   2049  | 
|         |   2050 	Fixed the following bug: | 
|         |   2051  | 
|         |   2052 	Radar 2890573 - JavaScriptCore needs to be thread-safe | 
|         |   2053  | 
|         |   2054 	Actually this is only a weak form of thread-safety - you can safely | 
|         |   2055 	use different interpreters from different threads at the same | 
|         |   2056 	time. If you try to use a single interpreter object from multiple | 
|         |   2057 	threads, you need to provide your own locking. | 
|         |   2058  | 
|         |   2059 	* kjs/collector.h, kjs/collector.cpp: | 
|         |   2060 	(Collector::lock, Collector::unlock): Trivial implementation of a | 
|         |   2061 	recursive mutex. | 
|         |   2062 	(Collector::allocate): Lock around the body of this function. | 
|         |   2063 	(Collector::collect): Likewise. | 
|         |   2064 	(Collector::finalCheck): Likewise. | 
|         |   2065 	(Collector::numInterpreters): Likewise. | 
|         |   2066 	(Collector::numGCNotAllowedObjects): Likewise. | 
|         |   2067 	(Collector::numReferencedObjects): Likewise. | 
|         |   2068 	* kjs/internal.cpp: | 
|         |   2069 	(Parser::parse): use a mutex to lock around the whole parse, since | 
|         |   2070 	it uses a bunch of global state. | 
|         |   2071 	(InterpreterImp::InterpreterImp): Grab the Collector lock here, | 
|         |   2072 	both the mutually exclude calls to the body of this function, and | 
|         |   2073 	to protect the s_hook static member which the collector pokes at. | 
|         |   2074 	(InterpreterImp::clear): Likewise. | 
|         |   2075 	* kjs/ustring.cpp: | 
|         |   2076 	(statBufferKeyCleanup, statBufferKeyInit, UString::ascii): Convert | 
|         |   2077 	use of static variable | 
|         |   2078 	* kjs/value.cpp: | 
|         |   2079 	(ValueImp::ValueImp, ValueImp::mark, ValueImp::marked, | 
|         |   2080 	ValueImp::setGcAllowed): Grab the GC lock around any flag changes. | 
|         |   2081  | 
|         |   2082 === Alexander-3 === | 
|         |   2083  | 
|         |   2084 2002-05-08  Darin Adler  <darin@apple.com> | 
|         |   2085  | 
|         |   2086 	* kjs/collector.h: | 
|         |   2087 	* kjs/collector.cpp: | 
|         |   2088 	(Collector::numInterpreters): | 
|         |   2089 	(Collector::numGCNotAllowedObjects): | 
|         |   2090 	(Collector::numReferencedObjects): | 
|         |   2091 	Add three new functions so we can see a bit more about leaking JavaScriptCore. | 
|         |   2092  | 
|         |   2093 2002-05-06  Darin Adler  <darin@apple.com> | 
|         |   2094  | 
|         |   2095 	* JavaScriptCorePrefix.h: Added. | 
|         |   2096 	* JavaScriptCore.pbproj/project.pbxproj: Use PFE precompiling. | 
|         |   2097 	Also switch from xNDEBUG to NDEBUG. | 
|         |   2098  | 
|         |   2099 === Alexander 0.3c2 (v1) === | 
|         |   2100  | 
|         |   2101 2002-04-18  Darin Adler  <darin@apple.com> | 
|         |   2102  | 
|         |   2103 	* JavaScriptCore.pbproj/project.pbxproj: Oops. Take out -Wstrict-prototypes, put back | 
|         |   2104 	-Wmissing-prototypes. | 
|         |   2105  | 
|         |   2106 2002-04-18  Darin Adler  <darin@apple.com> | 
|         |   2107  | 
|         |   2108 	* JavaScriptCore.pbproj/project.pbxproj: Take out -Wmissing-prototypes | 
|         |   2109 	because system headers are triggering it when we don't have | 
|         |   2110 	precompiled headers on. | 
|         |   2111  | 
|         |   2112 2002-04-18  Darin Adler  <darin@apple.com> | 
|         |   2113  | 
|         |   2114 	Reviewed by Maciej | 
|         |   2115  | 
|         |   2116 	* JavaScriptCore.pbproj/project.pbxproj: Turn on gcc3 and the same set of warnings | 
|         |   2117 	as in the rest of Labyrinth (see top level ChangeLog for details). | 
|         |   2118  | 
|         |   2119 2002-04-17  Maciej Stachowiak  <mjs@apple.com> | 
|         |   2120  | 
|         |   2121 	Reviewed by: Darin Adler  <darin@apple.com> | 
|         |   2122  | 
|         |   2123 	* kjs/testkjs.cpp: Don't include <iostream.h> to avoid gcc3 | 
|         |   2124 	warning. | 
|         |   2125  | 
|         |   2126 2002-04-15  Darin Adler  <darin@apple.com> | 
|         |   2127  | 
|         |   2128 	Reviwed by: Maciej Stachowiak  <mjs@apple.com> | 
|         |   2129  | 
|         |   2130 	* kjs/internal.cpp: | 
|         |   2131 	* kjs/property_map.cpp: | 
|         |   2132 	* kjs/ustring.h: | 
|         |   2133 	Removed some unneeded <config.h> includes so we are more similar | 
|         |   2134 	to the real KDE sources. | 
|         |   2135  | 
|         |   2136 2002-04-15  Darin Adler  <darin@apple.com> | 
|         |   2137  | 
|         |   2138 	Reviwed by: Maciej Stachowiak  <mjs@apple.com> | 
|         |   2139  | 
|         |   2140 	Merged changes from KDE 3.0 final and did some build fixes. | 
|         |   2141  | 
|         |   2142 	* JavaScriptCore.pbproj/project.pbxproj: Added nodes2string.cpp. | 
|         |   2143  | 
|         |   2144 	* kjs/grammar.*: Regenerated. | 
|         |   2145 	* kjs/*.lut.h: Regenerated. | 
|         |   2146  | 
|         |   2147 2002-04-08  Darin Adler  <darin@apple.com> | 
|         |   2148  | 
|         |   2149 	Reviwed by: Maciej Stachowiak  <mjs@apple.com> | 
|         |   2150  | 
|         |   2151 	* JavaScriptCore.pbproj/project.pbxproj: Re-added -Wno-format-y2k. | 
|         |   2152  | 
|         |   2153 2002-04-04  Darin Adler  <darin@apple.com> | 
|         |   2154  | 
|         |   2155 	* JavaScriptCore.pbproj/project.pbxproj: Add an Unoptimized build | 
|         |   2156 	style: exactly like Development except without the -O. | 
|         |   2157  | 
|         |   2158 2002-04-03  Darin Adler  <darin@apple.com> | 
|         |   2159  | 
|         |   2160 	* kjs/Makefile.am: Gratuitous cleanup. | 
|         |   2161  | 
|         |   2162 2002-04-02  Darin Adler  <darin@apple.com> | 
|         |   2163  | 
|         |   2164 	* JavaScriptCore.pbproj/project.pbxproj: Update flags as I did for | 
|         |   2165 	WebFoundation. | 
|         |   2166  | 
|         |   2167 2002-04-02  Maciej Stachowiak  <mjs@apple.com> | 
|         |   2168  | 
|         |   2169 	* JavaScriptCore.pbproj/project.pbxproj: Pass -Wno-format-y2k so | 
|         |   2170 	the project builds with gcc3. | 
|         |   2171 	 | 
|         |   2172 	* kjs/nodes.cpp: Avoid including an obsolete header to avoid | 
|         |   2173 	warning with gcc3. | 
|         |   2174  | 
|         |   2175 2002-04-02  Darin Adler  <darin@apple.com> | 
|         |   2176  | 
|         |   2177 	* kjs/property_map.cpp: (PropertyMap::~PropertyMap): Deallocate the | 
|         |   2178         map by calling clear so we don't leak the entire map. | 
|         |   2179  | 
|         |   2180 2002-04-02  Darin Adler  <darin@apple.com> | 
|         |   2181  | 
|         |   2182 	* kjs/internal.cpp: (InterpreterImp::globalClear): Add code to | 
|         |   2183         deallocate and null out emptyList, because once the last interpreter | 
|         |   2184         is destroyed there's nothing to keep it from being garbage collected. | 
|         |   2185  | 
|         |   2186 2002-04-01  Darin Adler  <darin@apple.com> | 
|         |   2187  | 
|         |   2188         Got rid of KWQDef.h because it's dangerous to have two files with | 
|         |   2189         the same name and different contents. | 
|         |   2190  | 
|         |   2191 	* JavaScriptCore.pbproj/project.pbxproj: | 
|         |   2192 	* kjs/KWQDef.h: Removed. | 
|         |   2193 	* kjs/ustring.h: Defines unsigned int types inline now. | 
|         |   2194  | 
|         |   2195 2002-03-30  Maciej Stachowiak  <mjs@apple.com> | 
|         |   2196  | 
|         |   2197 	Fixed Radar 2891272 (JavaScript crashes loading quicktime.com and | 
|         |   2198 	apple.com) | 
|         |   2199  | 
|         |   2200 	* kjs/object.cpp: (ObjectImp::~ObjectImp): Don't call setGCAlloc | 
|         |   2201 	on object internals pointed to, because they may have already been | 
|         |   2202 	collected by the time this object is collected, and in that case | 
|         |   2203 	we would corrupt the malloc arena. | 
|         |   2204  | 
|         |   2205 	* Makefile.am: Make the stamp file depend on all the sources and | 
|         |   2206 	headers so the framework gets rebuilt properly. | 
|         |   2207  | 
|         |   2208 	* JavaScriptCore.pbproj/project.pbxproj: Some random numbers moved | 
|         |   2209 	around. No idea what I really changed. | 
|         |   2210  | 
|         |   2211 2002-03-30  Darin Adler  <darin@apple.com> | 
|         |   2212  | 
|         |   2213 	* kjs/grammar.y: Took out Id tag so we won't constantly need to | 
|         |   2214         update grammar.cpp. | 
|         |   2215 	* kjs/grammar.cpp: Regenerated without Id tag. | 
|         |   2216  | 
|         |   2217 	* .cvsignore: Ignore some additional autogenerated files. | 
|         |   2218 	* kjs/.cvsignore: Ignore some additional autogenerated files. | 
|         |   2219  | 
|         |   2220 2002-03-30  Maciej Stachowiak  <mjs@apple.com> | 
|         |   2221  | 
|         |   2222 	* JavaScriptCore.pbproj/project.pbxproj: Install some of the | 
|         |   2223 	headers. | 
|         |   2224  | 
|         |   2225 2002-03-30  Maciej Stachowiak  <mjs@apple.com> | 
|         |   2226  | 
|         |   2227 	Converted JavaScriptCore to build with Project Builder, in | 
|         |   2228 	preparation for B&I submission. | 
|         |   2229  | 
|         |   2230 	* English.lproj/InfoPlist.strings: Added. | 
|         |   2231 	* JavaScriptCore.pbproj/.cvsignore: Added. | 
|         |   2232 	* JavaScriptCore.pbproj/project.pbxproj: Added. | 
|         |   2233 	 | 
|         |   2234 	* .cvsignore: Update the set of ignored things. | 
|         |   2235  | 
|         |   2236 	* Makefile.am: Hand off to PB for the main build, but still handle | 
|         |   2237 	the generated files and the test program. | 
|         |   2238  | 
|         |   2239 	* kjs/Makefile.am: Don't build anything except the generated | 
|         |   2240 	source files. | 
|         |   2241  | 
|         |   2242 	* kjs/KWQDef.h, kjs/config.h: Added minimal versions of these | 
|         |   2243 	files to get kjs to build. | 
|         |   2244  | 
|         |   2245 	Check in all the genrated files, since Project Builder isn't up to | 
|         |   2246 	the task of handling built sources: | 
|         |   2247 	 | 
|         |   2248 	* kjs/array_object.lut.h: Added. | 
|         |   2249 	* kjs/date_object.lut.h: Added. | 
|         |   2250 	* kjs/grammar.cpp: Added. | 
|         |   2251 	* kjs/grammar.cpp.h: Added. | 
|         |   2252 	* kjs/grammar.h: Added. | 
|         |   2253 	* kjs/lexer.lut.h: Added. | 
|         |   2254 	* kjs/math_object.lut.h: Added. | 
|         |   2255 	* kjs/number_object.lut.h: Added. | 
|         |   2256 	* kjs/string_object.lut.h: Added. | 
|         |   2257  | 
|         |   2258 	* kjs/.cvsignore: Update set of ignored things. | 
|         |   2259  | 
|         |   2260 2002-03-28  Maciej Stachowiak  <mjs@apple.com> | 
|         |   2261  | 
|         |   2262 	* kjs/kjs-test.chk: Update output for new test results. | 
|         |   2263  | 
|         |   2264 2002-03-26  Maciej Stachowiak  <mjs@apple.com> | 
|         |   2265  | 
|         |   2266 	Set up kjs to build by itself into libJavaScriptCore.dylib. | 
|         |   2267 	 | 
|         |   2268 	* .cvsignore: Added. | 
|         |   2269 	* Makefile.am: Added. | 
|         |   2270 	* dummy.cpp: Added. | 
|         |   2271 	* kjs/.cvsignore: Added. |