src/3rdparty/webkit/JavaScriptCore/ChangeLog-2002-12-03
changeset 0 1918ee327afb
equal deleted inserted replaced
-1:000000000000 0:1918ee327afb
       
     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.