|
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. |