]>
Commit | Line | Data |
---|---|---|
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. |