d5f9d27195bc69bc744abf297a020c43428cf280
[WebKit-https.git] / JavaScriptCore / ChangeLog
1 2007-11-08  Mark Rowe  <mrowe@apple.com>
2
3         Build fix for JavaScriptGlue.
4
5         * wtf/MathExtras.h: Include stdlib.h for srand and RAND_MAX.
6
7 2007-11-08  Darin Adler  <darin@apple.com>
8
9         - Windows build fix
10
11         * kjs/JSImmediate.h: Include MathExtras.h rather than math.h since this file uses "signbit".
12
13 2007-11-08  Oliver Hunt  <oliver@apple.com>
14
15         Reviewed by Darin.
16
17         Replace the use of floats for immediate values with the use of integers for a 4.5% improvement in SunSpider.
18
19         Unfortunately this change results in NaN, +Inf, -Inf, and -0 being heap allocated now, but
20         we should now have faster array access, faster immediate to double conversion, and the 
21         potential to further improve bitwise operators in future.
22
23         This also removes the need for unions to avoid strict aliasing problems when extracting 
24         a value from immediates.
25
26         * kjs/JSImmediate.h:
27         (KJS::):
28         (KJS::JSImmediate::trueImmediate):
29         (KJS::JSImmediate::falseImmediate):
30         (KJS::JSImmediate::undefinedImmediate):
31         (KJS::JSImmediate::nullImmediate):
32         (KJS::JSImmediate::toBoolean):
33         * kjs/value.h:
34         (KJS::jsNaN):
35
36 2007-11-07  Eric Seidel  <eric@webkit.org>
37
38         Reviewed by Darin and Oliver.
39         
40         Add evaluateToNumber parallel evaluation tree to speed up number operations.
41         Make ImmediateNumberNode a subclass of NumberNode.
42         Share evaluate logic between evaluate and evaluateToNumber using inline functions
43         There is still a lot of improvement to be made here.
44         
45         SunSpider claims this is a 1.0% speedup overall (nbody 7.9%), base64 slowing 2.0%
46         Given the huge win that this prepares us for with simple type inferencing I see the small
47         regression in base64 being worth the substantial overall improvement.
48
49         * kjs/grammar.y:
50         * kjs/nodes.cpp:
51         (KJS::Node::evaluateToNumber):
52         (KJS::NumberNode::evaluate):
53         (KJS::NumberNode::evaluateToNumber):
54         (KJS::StringNode::evaluateToNumber):
55         (KJS::LocalVarAccessNode::inlineEvaluate):
56         (KJS::LocalVarAccessNode::evaluate):
57         (KJS::LocalVarAccessNode::evaluateToNumber):
58         (KJS::BracketAccessorNode::inlineEvaluate):
59         (KJS::BracketAccessorNode::evaluate):
60         (KJS::BracketAccessorNode::evaluateToNumber):
61         (KJS::NegateNode::evaluate):
62         (KJS::NegateNode::evaluateToNumber):
63         (KJS::MultNode::inlineEvaluateToNumber):
64         (KJS::MultNode::evaluate):
65         (KJS::MultNode::evaluateToNumber):
66         (KJS::DivNode::inlineEvaluateToNumber):
67         (KJS::DivNode::evaluate):
68         (KJS::DivNode::evaluateToNumber):
69         (KJS::ModNode::inlineEvaluateToNumber):
70         (KJS::ModNode::evaluate):
71         (KJS::ModNode::evaluateToNumber):
72         (KJS::throwOutOfMemoryErrorToNumber):
73         (KJS::addSlowCaseToNumber):
74         (KJS::add):
75         (KJS::addToNumber):
76         (KJS::AddNode::evaluateToNumber):
77         (KJS::SubNode::inlineEvaluateToNumber):
78         (KJS::SubNode::evaluate):
79         (KJS::SubNode::evaluateToNumber):
80         (KJS::valueForReadModifyAssignment):
81         (KJS::ReadModifyLocalVarNode::evaluate):
82         (KJS::ReadModifyResolveNode::evaluate):
83         (KJS::ReadModifyDotNode::evaluate):
84         (KJS::ReadModifyBracketNode::evaluate):
85         * kjs/nodes.h:
86         (KJS::Node::):
87         (KJS::NumberNode::):
88         (KJS::ImmediateNumberNode::):
89         (KJS::AddNode::precedence):
90         * kjs/nodes2string.cpp:
91         (KJS::NumberNode::streamTo):
92
93 2007-11-07  Mark Rowe  <mrowe@apple.com>
94
95         Reviewed by Eric.
96
97         Fix up initialization after being mangled in r27572, and remove the
98         ternary expression as extraCost will always be zero for the numeric
99         heap.
100
101         * kjs/collector.cpp:
102         (KJS::Collector::heapAllocate):
103
104 2007-11-07  Mark Rowe  <mrowe@apple.com>
105
106         Gtk build fix.
107
108         * kjs/regexp_object.cpp:
109
110 2007-11-07  Geoffrey Garen  <ggaren@apple.com>
111
112         Reviewed by Beth Dakin.
113         
114         Eliminated a bogus (though compiled-out) branch in the collector.
115
116         * kjs/collector.cpp:
117         (KJS::Collector::heapAllocate):
118
119 2007-11-06  Geoffrey Garen  <ggaren@apple.com>
120
121         Reviewed by Darin Adler.
122         
123         Fixed part of http://bugs.webkit.org/show_bug.cgi?id=15861 
124         15% of string-validate-input.js is spent compiling the same regular expression.
125
126         Put RegExpImp properties into a static hashtable to avoid a slew of
127         PropertyMap churn when creating a RegExpImp.
128         
129         Factored important bits of regular expression implementation out of
130         RegExpImp (the JS object) and into RegExp (the PCRE wrapper class), 
131         making RegExp a ref-counted class. (This will help later.)
132
133         Removed PCRE_POSIX support because I didn't quite know how to test it 
134         and keep it working with these changes.
135         
136         1.1% SunSpider speedup. 5.8% speedup on string-validate-input.js.
137
138         * kjs/regexp.h: A few interface changes:
139         1. Renamed "subpatterns()" => "numSubpatterns()"
140         2. Made flag enumeration private and replaced it with public getters for
141         specific flags.
142         3. Made RegExp ref-counted so RegExps can be shared by RegExpImps.
143         4. Made RegExp take a string of flags instead of an int, eliminating 
144         duplicated flag parsing code elsewhere.
145
146         * kjs/regexp_object.cpp:
147         (KJS::RegExpProtoFunc::callAsFunction): For RegExp.compile: 
148         - Fixed a bug where compile(undefined) would throw an exception. 
149         - Removed some now-redundant code.
150         - Used RegExp sharing to eliminate an allocation and a bunch of 
151         PropertyMap thrash. (Not a big win since compile is a deprecated 
152         function. I mainly did this to test the plubming.)
153
154 2007-11-07  Simon Hausmann  <hausmann@kde.org>
155
156         Reviewed by nobody, Qt/Windows build fix.
157
158         JavaScriptCore.pri expects OBJECTS_DIR to be set, so set it in
159         testkjs.pro, too, where it's included from.
160
161         * kjs/testkjs.pro:
162
163 2007-11-07  Simon Hausmann  <shausman@trolltech.com>
164
165         Reviewed by Lars.
166
167         Fix "nmake clean" for the Qt/Windows build by replacing tmp/ with a variable that ends with the correct type of slash/backslash depending on the choice of compiler/make tool.
168
169         * JavaScriptCore.pri:
170         * pcre/pcre.pri:
171
172 2007-11-07  Lars Knoll  <lars@trolltech.com>
173
174         Reviewed by Simon.
175
176         fix umemcasecmp
177         
178         Pretty embarrassing bug. Has the potential to fix quite a few test failures.
179
180         * wtf/unicode/qt4/UnicodeQt4.h:
181         (WTF::Unicode::umemcasecmp):
182
183 2007-11-06  Maciej Stachowiak  <mjs@apple.com>
184
185         Reviewed by Eric.        
186         
187         - only collect when the heap is full, unless we have lots of extra cost garbage
188         
189         1.1% SunSpider speedup.
190         
191         This shouldn't hit memory use much since the extra space in those
192         blocks hangs around either way.
193
194         * kjs/collector.cpp:
195         (KJS::Collector::heapAllocate):
196         (KJS::Collector::collect): Fix logic error that reversed the sense of collect's 
197         return value.
198
199 2007-11-06  Oliver Hunt  <oliver@apple.com>
200
201         Reviewed by Maciej.
202
203         Avoid unnecessarily boxing the result from post inc/decrement for 0.3% gain in sunspider
204         
205         We now convert the common 'for (...; ...; <var>++) ...' to the semantically identical
206         'for (...; ...; ++<var>) ...'.
207
208         * kjs/nodes.cpp:
209         (KJS::PostIncResolveNode::optimizeForUnnecessaryResult):
210         (KJS::PostIncLocalVarNode::evaluate):
211         (KJS::PostIncLocalVarNode::optimizeForUnnecessaryResult):
212         (KJS::PostDecResolveNode::optimizeForUnnecessaryResult):
213         (KJS::PostDecLocalVarNode::evaluate):
214         (KJS::PostDecLocalVarNode::optimizeForUnnecessaryResult):
215         * kjs/nodes.h:
216         (KJS::PrePostResolveNode::):
217         (KJS::PostIncResolveNode::):
218         (KJS::PostIncLocalVarNode::):
219         (KJS::PostDecResolveNode::):
220         (KJS::PostDecLocalVarNode::):
221         (KJS::PreIncResolveNode::):
222         (KJS::PreDecResolveNode::):
223         (KJS::ForNode::ForNode):
224
225 2007-11-06  Eric Seidel  <eric@webkit.org>
226
227         Reviewed by darin.
228
229         This fixes a regressed layout test for string + object
230         
231         SunSpider claims this was an overall 0.3% speedup, although some individual tests were slower.
232
233         * kjs/nodes.cpp:
234         (KJS::add): remove erroneous "fast path" for string + *
235
236 2007-11-06  Geoffrey Garen  <ggaren@apple.com>
237
238         Reviewed by Eric Seidel.
239         
240         Added toJSNumber, a fast path for converting a JSValue to a JS number,
241         and deployed it in postfix expressions. In the fast case this 
242         eliminates a call to jsNumber.
243         
244         0.4% speedup on SunSpider.
245
246         * ChangeLog:
247         * kjs/nodes.cpp:
248         (KJS::PostIncResolveNode::evaluate):
249         (KJS::PostIncLocalVarNode::evaluate):
250         (KJS::PostDecResolveNode::evaluate):
251         (KJS::PostDecLocalVarNode::evaluate):
252         (KJS::PostIncBracketNode::evaluate):
253         (KJS::PostDecBracketNode::evaluate):
254         (KJS::PostIncDotNode::evaluate):
255         (KJS::PostDecDotNode::evaluate):
256         (KJS::UnaryPlusNode::evaluate):
257         * kjs/value.h:
258         (KJS::JSValue::toJSNumber):
259
260 2007-11-06  Darin Adler  <darin@apple.com>
261
262         Reviewed by Maciej.
263
264         - http://bugs.webkit.org/show_bug.cgi?id=15846
265           REGRESSION (r27387): Memory corruption when running fast/js/kde/delete.html
266
267         There was a mistake in the algorithm used to find an empty slot in the property
268         map entries vector; when we were putting in a new property value and not overwriting
269         an existing deleted sentinel, we would enlarge the entries vector, but would not
270         overwrite the stale data that's in the new part. It was easy to pin this down by
271         turning on property map consistency checks -- I never would have landed with this
272         bug if I had run the regression tests once with consistency checks on!
273
274         * kjs/property_map.cpp: (KJS::PropertyMap::put): Changed logic for the case where
275         foundDeletedElement is false to always use the item at the end of the entries vector.
276         Also allowed me to merge with the logic for the "no deleted sentinels at all" case.
277
278 2007-11-06  Oliver Hunt  <oliver@apple.com>
279
280         RS=Darin.
281
282         Fix previous patch to use a 3 bit shift, a 16 bit shift causes a regression in sunspider.
283
284         * kjs/nodes.cpp:
285         (KJS::add):
286
287 2007-11-06  Oliver Hunt  <oliver@apple.com>
288
289         Reviewed by Darin.
290
291         Replace boolean comparisons in AddNode with mask
292         comparisons for a 0.2% improvement in sunspider.
293
294         * JavaScriptCore.xcodeproj/project.pbxproj:
295         * kjs/nodes.cpp:
296         (KJS::add):
297
298 2007-11-06  Eric Seidel  <eric@webkit.org>
299
300         Reviewed by darin.
301         
302         SunSpider claims this is a 1.1% speedup.
303
304         * kjs/nodes.cpp:
305         (KJS::throwOutOfMemoryError): Added, non inline.
306         (KJS::addSlowCase): renamed from add(), non inline.
307         (KJS::add): add fast path for String + String, Number + Number and String + *
308
309 2007-11-06  Eric Seidel  <eric@webkit.org>
310
311         Reviewed by mjs.
312         
313         Avoid more UString creation.
314         
315         SunSpider claims this is a 0.4% speedup.
316
317         * kjs/regexp_object.cpp:
318         (KJS::RegExpObjectImp::construct): use UString::find(UChar)
319
320 2007-11-05  Mark Rowe  <mrowe@apple.com>
321
322         Mac build fix.
323
324         * kjs/array_object.cpp:
325         (KJS::ArrayProtoFunc::callAsFunction):
326
327 2007-11-05  Adam Roben  <aroben@apple.com>
328
329         Windows build fix
330
331         * kjs/list.h:
332
333 2007-11-05  Mark Rowe  <mrowe@apple.com>
334
335         Build fix.  Add missing #include.
336
337         * kjs/operations.cpp:
338
339 2007-11-05  Eric Seidel  <eric@webkit.org>
340
341         Reviewed by mjs.
342         
343         Remove another call to toString(exec)
344         
345         SunSpider claims this is a 0.5% speedup.
346
347         * kjs/operations.cpp:
348         (KJS::equal): remove another toString
349
350 2007-11-05  Eric Seidel  <eric@webkit.org>
351
352         * kjs/operations.cpp:
353         (KJS::equal): correct broken change.
354
355 2007-11-05  Eric Seidel  <eric@webkit.org>
356
357         Reviewed by mjs.
358
359         Remove one more call to toString(exec).
360         
361         SunSpider claims this is a 0.7% speedup.
362
363         * kjs/operations.cpp:
364         (KJS::equal): remove a call to toString()
365
366 2007-11-05  Mark Rowe  <mrowe@apple.com>
367
368         Gtk build fix.
369
370         * pcre/pcre.pri:
371
372 2007-11-05  Mark Rowe  <mrowe@apple.com>
373
374         Gtk build fix.
375
376         * kjs/list.cpp:
377
378 2007-11-05  Geoffrey Garen  <ggaren@apple.com>
379
380         Touched a file to test my new HTTP access.
381
382         * kjs/scope_chain.cpp:
383
384 2007-11-05  Alp Toker  <alp@atoker.com>
385
386         Unreviewed build fix for qmake-based ports.
387
388         Someone with a better understanding of qmake still needs to sort out
389         the INCLUDEPATH/DEPENDPATH mess.
390
391         * JavaScriptCore.pri:
392
393 2007-11-05  Geoffrey Garen  <ggaren@apple.com>
394
395         Reviewed by Darin Adler.
396         
397         http://bugs.webkit.org/show_bug.cgi?id=15835
398
399         Switched List implementation from a custom heap allocator to an inline
400         Vector, for a disappointing .5% SunSpider speedup.
401         
402         Also renamed List::slice to List::getSlice because "get" is the 
403         conventional prefix for functions returning a value through an out 
404         parameter.
405
406         * kjs/array_object.cpp:
407         (KJS::ArrayProtoFunc::callAsFunction): Removed some redundant function
408         calls and memory accesses.
409
410         * kjs/bool_object.cpp:
411         (BooleanObjectImp::construct): Removed questionable use of iterator.
412
413         * kjs/list.cpp:
414         * kjs/list.h: New List class, implemented in terms of Vector. Two 
415         interesting differences:
416             1. The inline capacity is 8, not 5. Many of the Lists constructed 
417             during a SunSpider run are larger than 5; almost none are larger
418             than 8.
419
420             2. The growth factor is 4, not 2. Since we can guarantee that Lists
421             aren't long-lived, we can grow them more aggressively, to avoid
422             excessive copying.
423
424         * kjs/regexp_object.cpp:
425         (RegExpObjectImp::construct): Removed redundant function calls.
426
427         * kjs/string_object.cpp:
428         (KJS::StringObjectImp::construct): Removed questionable use of iterator.
429
430         * wtf/Vector.h:
431         (WTF::::uncheckedAppend): Added a fast, unchecked version of append.
432
433 2007-11-05  Mark Rowe  <mrowe@apple.com>
434
435         Reviewed by Alp Toker.
436
437         Add DEPENDPATH to JavaScriptCore and pcre to help qmake with dependencies.
438
439         * JavaScriptCore.pri:
440         * pcre/pcre.pri:
441
442 2007-11-04  Darin Adler  <darin@apple.com>
443
444         Reviewed by Maciej.
445
446         - http://bugs.webkit.org/show_bug.cgi?id=15826
447           optimize opcode loop and case insensitive ASCII compares for a 30% speedup
448
449         SunSpider says it's 2.6% faster overall, 32.5% in the regular expression tests.
450
451         * pcre/pcre_internal.h: Added OP_ASCII_CHAR and OP_ASCII_LETTER_NC.
452
453         * pcre/pcre_compile.c:
454         (find_fixedlength): Added cases for OP_ASCII_CHAR and OP_ASCII_LETTER_NC. Also
455         added OP_NOT since there was no reason it should not be in here.
456         (could_be_empty_branch): Ditto.
457         (compile_branch): Streamlined all the single-character cases; there was a bit of
458         duplicate code. Added cases for OP_ASCII_CHAR and OP_ASCII_LETTER_NC as needed.
459         But in particular, compile to those opcodes when the single character match is
460         ASCII.
461         (find_firstassertedchar): Added cases for OP_ASCII_CHAR and OP_ASCII_LETTER_NC.
462
463         * pcre/pcre_exec.c: (match): Removed the "min", "minimize", and "op" fields from
464         the matchframe, after I discovered that none of them needed to be saved and restored
465         across recursive match calls. Also eliminated the ignored result field from the
466         matchframe, since I discovered that rrc ("recursive result code") was already the
467         exact same thing. Moved the handling of opcodes higher than OP_BRA into the default
468         statement of the switch instead of doing them before the switch. This removes a
469         branch from each iteration of the opcode interpreter, just as removal of "op"
470         removed at least one store from each iteration. Last, but not least, add the
471         OP_ASCII_CHAR and OP_ASCII_LETTER_NC functions. Neither can ever match a
472         surrogate pair and the letter case can be handled efficiently.
473
474 2007-11-04  Darin Adler  <darin@apple.com>
475
476         * pcre/pcre_exec.c: (match): Try to fix the Windows build by removing unreachable code.
477
478 2007-11-03  Darin Adler  <darin@apple.com>
479
480         - fix non-Mac builds; remove some more unused PCRE stuff
481
482         * pcre/pcre_compile.c:
483         (compile_branch): Removed branch chain and some unused ESC values.
484         (compile_regex): Ditto.
485         (jsRegExpCompile): Ditto.
486         * pcre/pcre_exec.c:
487         (match): Removed unused branch targets. Don't use macros any more.
488         (jsRegExpExecute): More of the same.
489
490         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Update for removed files.
491         * JavaScriptCore.xcodeproj/project.pbxproj: Ditto.
492         * pcre/pcre.pri: Ditto.
493
494         * pcre/MERGING: Removed.
495         * pcre/pcre_fullinfo.c: Removed.
496         * pcre/pcre_get.c: Removed.
497         * pcre/pcre_internal.h:
498         * pcre/ucp.h: Removed.
499
500 2007-11-03  Darin Adler  <darin@apple.com>
501
502         Reviewed by Maciej.
503
504         - http://bugs.webkit.org/show_bug.cgi?id=15821
505           remove unused PCRE features for speed
506
507         A first step toward removing the PCRE features we don't use.
508         This gives a 0.8% speedup on SunSpider, and a 6.5% speedup on
509         the SunSpider regular expression test.
510
511         Replaced the public interface with one that doesn't use the
512         name PCRE. Removed code we don't need for JavaScript and various
513         configurations we don't use. This is in preparation for still
514         more changes in the future. We'll probably switch to C++ and
515         make some even more significant changes to the regexp engine
516         to get some additional speed.
517
518         There's probably additional unused stuff that I haven't
519         deleted yet.
520
521         This does mean that our PCRE is now a fork, but I think that's
522         not really a big deal.
523
524         * JavaScriptCore.exp: Remove the 5 old entry points and add
525         the 3 new entry points for WebCore's direct use of the regular
526         expression engine.
527
528         * kjs/config.h: Remove the USE(PCRE16) define. I decided to flip
529         its sense and now there's a USE(POSIX_REGEX) instead, which should
530         probably not be set by anyone. Maybe later we'll just get rid of it
531         altogether.
532
533         * kjs/regexp.h:
534         * kjs/regexp.cpp:
535         (KJS::RegExp::RegExp): Switch to new jsRegExp function names and
536         defines. Cut down on the number of functions used.
537         (KJS::RegExp::~RegExp): Ditto.
538         (KJS::RegExp::match): Ditto.
539
540         * pcre/dftables.c: (main): Get rid of ctype_letter and ctype_meta,
541         which are unused.
542
543         * pcre/pcre-config.h: Get rid of EBCIDIC, PCRE_DATA_SCOPE, const,
544         size_t, HAVE_STRERROR, HAVE_MEMMOVE, HAVE_BCOPY, NEWLINE,
545         POSIX_MALLOC_THRESHOLD, NO_RECURSE, SUPPORT_UCP, SUPPORT_UTF8,
546         and JAVASCRIPT. These are all no longer configurable in our copy
547         of the library.
548
549         * pcre/pcre.h: Remove the macro-based kjs prefix hack, the PCRE
550         version macros, PCRE_UTF16, the code to set up PCRE_DATA_SCOPE,
551         the include of <stdlib.h>, and most of the constants and
552         functions defined in this header. Changed the naming scheme to
553         use a JSRegExp prefix rather than a pcre prefix. In the future,
554         we'll probably change this to be a C++ header.
555
556         * pcre/pcre_compile.c: Removed all unused code branches,
557         including many whole functions and various byte codes.
558         Kept changes outside of removal to a minimum.
559         (check_escape):
560         (first_significant_code):
561         (find_fixedlength):
562         (find_recurse):
563         (could_be_empty_branch):
564         (compile_branch):
565         (compile_regex):
566         (is_anchored):
567         (is_startline):
568         (find_firstassertedchar):
569         (jsRegExpCompile): Renamed from pcre_compile2 and changed the
570         parameters around a bit.
571         (jsRegExpFree): Added.
572
573         * pcre/pcre_exec.c: Removed many unused opcodes and variables.
574         Also started tearing down the NO_RECURSE mechanism since it's
575         now the default. In some cases there were things in the explicit
576         frame that could be turned into plain old local variables and
577         other small like optimizations.
578         (pchars):
579         (match_ref):
580         (match): Changed parameters quite a bit since it's now not used
581         recursively.
582         (jsRegExpExecute): Renamed from pcre_exec.
583
584         * pcre/pcre_internal.h: Get rid of PCRE_DEFINITION, PCRE_SPTR,
585         PCRE_IMS, PCRE_ICHANGED, PCRE_NOPARTIAL, PCRE_STUDY_MAPPED,
586         PUBLIC_OPTIONS, PUBLIC_EXEC_OPTIONS, PUBLIC_DFA_EXEC_OPTIONS,
587         PUBLIC_STUDY_OPTIONS, MAGIC_NUMBER, 16 of the opcodes,
588         _pcre_utt, _pcre_utt_size, _pcre_try_flipped, _pcre_ucp_findprop,
589         and _pcre_valid_utf8. Also moved pcre_malloc and pcre_free here.
590
591         * pcre/pcre_maketables.c: Changed to only compile in dftables.
592         Also got rid of many of the tables that we don't use.
593
594         * pcre/pcre_tables.c: Removed the unused Unicode property tables.
595
596         * pcre/pcre_ucp_searchfuncs.c: Removed everything except for
597         _pcre_ucp_othercase.
598
599         * pcre/pcre_xclass.c: (_pcre_xclass): Removed uneeded support
600         for classes based on Unicode properties.
601
602         * wtf/FastMallocPCRE.cpp: Removed unused bits. It would be good
603         to eliminate this completely, but we need the regular expression
604         code to be C++ first.
605
606         * pcre/pcre_fullinfo.c:
607         * pcre/pcre_get.c:
608         * pcre/ucp.h:
609         Files that are no longer needed. I didn't remove them with this
610         check-in, because I didn't want to modify all the project files.
611
612 2007-11-03  Maciej Stachowiak  <mjs@apple.com>
613
614         Reviewed by Sam.
615         
616         - remove NaN check from JSImmediate::fromDouble for 0.5% SunSpider speedup
617
618         It turns out that doing this check costs more than it saves.
619         
620         * kjs/JSImmediate.h:
621         (KJS::JSImmediate::fromDouble):
622
623 2007-11-03  Sam Weinig  <sam@webkit.org>
624
625         Reviewed by Oliver.
626
627         Remove dummy variable from ClassInfo reducing the size of the struct by 1 word.
628         The variable had been kept around for binary compatibility, but since nothing
629         else is there is no point in continuing to keep it around.
630
631         * API/JSCallbackConstructor.cpp:
632         (KJS::):
633         * API/JSCallbackFunction.cpp:
634         (KJS::):
635         * API/JSCallbackObject.cpp:
636         (KJS::):
637         * bindings/objc/objc_runtime.mm:
638         * bindings/runtime_array.cpp:
639         * bindings/runtime_object.cpp:
640         * kjs/array_instance.cpp:
641         (KJS::):
642         * kjs/array_object.cpp:
643         (KJS::):
644         * kjs/bool_object.cpp:
645         * kjs/date_object.cpp:
646         (KJS::):
647         * kjs/error_object.cpp:
648         * kjs/function.cpp:
649         (KJS::):
650         * kjs/internal.cpp:
651         (KJS::):
652         * kjs/lookup.h:
653         * kjs/math_object.cpp:
654         * kjs/number_object.cpp:
655         * kjs/object.h:
656         * kjs/regexp_object.cpp:
657         * kjs/string_object.cpp:
658         (KJS::):
659
660 2007-11-03  Kevin McCullough  <kmccullough@apple.com>
661
662         - Updated testkjs results to make the build bots green until we
663         can fix the tests that are failing.  The new failures are in DST.
664
665         * tests/mozilla/expected.html:
666
667 2007-11-03  Maciej Stachowiak  <mjs@apple.com>
668
669         Reviewed by Adam.
670         
671         - don't print the var twice for ForInNodes with a var declaration
672
673         * kjs/nodes2string.cpp:
674         (KJS::ForInNode::streamTo):
675
676 2007-11-03  Darin Adler  <darin@apple.com>
677
678         * pcre/pcre_compile.c: (check_escape): Windows build fix. Get rid of
679         C-incompatible declaration.
680
681 2007-11-03  Mark Rowe  <mrowe@apple.com>
682
683         Gtk build fix.
684
685         * kjs/nodes.cpp:  Add missing include.
686
687 2007-11-03  Darin Adler  <darin@apple.com>
688
689         Reviewed by Maciej.
690
691         - fix http://bugs.webkit.org/show_bug.cgi?id=15814
692           <rdar://problem/5536644> fast/js/kde/encode_decode_uri.html fails
693
694         These changes cause us to match the JavaScript specification and pass the
695         fast/js/kde/encode_decode_uri.html test.
696
697         * kjs/function.cpp: (KJS::encode): Call the UTF-8 string conversion in its
698         new strict mode, throwing an exception if there are malformed UTF-16 surrogate
699         pairs in the text.
700
701         * kjs/ustring.h: Added a strict version of the UTF-8 string conversion.
702         * kjs/ustring.cpp:
703         (KJS::decodeUTF8Sequence): Removed code to disallow U+FFFE and U+FFFF; while
704         those might be illegal in some sense, they aren't supposed to get any special
705         handling in the place where this function is currently used.
706         (KJS::UString::UTF8String): Added the strictness.
707
708 2007-11-03  Darin Adler  <darin@apple.com>
709
710         Reviewed by Maciej.
711
712         - http://bugs.webkit.org/show_bug.cgi?id=15812
713           some JavaScript tests (from the Mozilla test suite) are failing
714
715         Two or three fixes get 7 more of the Mozilla tests passing.
716         This gets us down from 61 failing tests to 54.
717
718         * kjs/interpreter.h: (KJS::Interpreter::builtinRegExp):
719         Made this inline and gave it a more specific type. Some day we should
720         probably do that for all of these -- might even get a bit of a speed
721         boost from it.
722         * kjs/interpreter.cpp: Removed Interpreter::builtinRegExp now that it's
723         inline in the header.
724
725         * kjs/regexp_object.h:
726         * kjs/regexp_object.cpp:
727         (KJS::RegExpProtoFunc::callAsFunction): Moved test and exec out of the
728         switch statement into the RegExpImp object, so they can be shared with
729         RegExpImp::callAsFunction.
730         (KJS::RegExpImp::match): Added. Common code used by both test and exec.
731         (KJS::RegExpImp::test): Added.
732         (KJS::RegExpImp::exec): Added.
733         (KJS::RegExpImp::implementsCall): Added.
734         (KJS::RegExpImp::callAsFunction): Added.
735         (KJS::RegExpObjectImpPrivate::RegExpObjectImpPrivate): Initialize
736         lastInput to null rather than empty string -- we take advantage of the
737         difference in RegExpImp::match.
738         (KJS::RegExpObjectImp::input): Added. No reason to go through hash tables
739         just to get at a field like this.
740
741         * pcre/pcre_compile.c: (check_escape): Changed the \u handling to match
742         the JavaScript specification. If there are not 4 hex digits after the \u,
743         then it's processed as if it wasn't an escape sequence at all.
744
745         * pcre/pcre_internal.h: Added IS_NEWLINE, with the appropriate definition
746         for JavaScript (4 specific Unicode values).
747         * pcre/pcre_exec.c:
748         (match): Changed all call sites to use IS_NEWLINE.
749         (pcre_exec): Ditto.
750
751         * tests/mozilla/expected.html: Updated to expect 7 more successful tests.
752
753 2007-11-03  David D. Kilzer  <ddkilzer@webkit.org>
754
755         Sort files(...); sections of Xcode project files.
756
757         Rubber-stamped by Darin.
758
759         * JavaScriptCore.xcodeproj/project.pbxproj:
760
761 2007-11-03  Maciej Stachowiak  <mjs@apple.com>
762
763         Reviewed by Oliver.
764         
765         - remove VarDeclListNode and simplify VarDeclNode evaluation for 0.4% SunSpider speedup
766
767         * kjs/grammar.y:
768         * kjs/nodes.cpp:
769         (KJS::VarDeclNode::optimizeVariableAccess):
770         (KJS::VarDeclNode::getDeclarations):
771         (KJS::VarDeclNode::handleSlowCase):
772         (KJS::VarDeclNode::evaluateSingle):
773         (KJS::VarDeclNode::evaluate):
774         (KJS::VarStatementNode::execute):
775         * kjs/nodes.h:
776         (KJS::VarDeclNode::):
777         (KJS::VarStatementNode::):
778         * kjs/nodes2string.cpp:
779         (KJS::VarDeclNode::streamTo):
780
781 2007-11-03  Alexey Proskuryakov  <ap@webkit.org>
782
783         Reviewed by Darin.
784
785         http://bugs.webkit.org/show_bug.cgi?id=15800
786         REGRESSION (r27303): RegExp leaks
787
788         * kjs/regexp_object.h:
789         (KJS::RegExpImp::setRegExp):
790         (KJS::RegExpImp::regExp):
791         (KJS::RegExpImp::classInfo):
792         * kjs/regexp_object.cpp:
793         (RegExpImp::RegExpImp):
794         (RegExpImp::~RegExpImp):
795         Renamed reg member variable to m_regExp, changed it to use OwnPtr.
796
797 2007-11-02  Maciej Stachowiak  <mjs@apple.com>
798
799         Reviewed by Oliver.
800         
801         - add SourceElements as a typedef for Vector<RefPtr<StatementNode> >.
802
803         * kjs/grammar.y:
804         * kjs/nodes.cpp:
805         (KJS::statementListPushFIFO):
806         (KJS::statementListGetDeclarations):
807         (KJS::statementListInitializeDeclarationStacks):
808         (KJS::statementListInitializeVariableAccessStack):
809         (KJS::statementListExecute):
810         (KJS::BlockNode::BlockNode):
811         (KJS::FunctionBodyNode::FunctionBodyNode):
812         (KJS::ProgramNode::ProgramNode):
813         * kjs/nodes.h:
814         (KJS::CaseClauseNode::):
815
816 2007-11-02  Darin Adler  <darin@apple.com>
817
818         Reviewed by Maciej.
819
820         - http://bugs.webkit.org/show_bug.cgi?id=15791
821           change property map data structure for less memory use, better speed
822
823         The property map now has an array of indices and a separate array of
824         property map entries. This slightly slows down lookup because of a second
825         memory acess, but makes property maps smaller and faster to iterate in
826         functions like mark().
827
828         SunSpider says this is 1.2% faster, although it makes the bitwise-end test
829         more than 10% slower. To fix that we'll need to optimize global variable lookup.
830
831         * kjs/property_map.cpp:
832         (KJS::PropertyMapEntry::PropertyMapEntry):
833         (KJS::PropertyMapHashTable::entries):
834         (KJS::PropertyMapHashTable::allocationSize):
835         (KJS::SavedProperties::SavedProperties):
836         (KJS::SavedProperties::~SavedProperties):
837         (KJS::PropertyMap::checkConsistency):
838         (KJS::PropertyMap::~PropertyMap):
839         (KJS::PropertyMap::clear):
840         (KJS::PropertyMap::get):
841         (KJS::PropertyMap::getLocation):
842         (KJS::PropertyMap::put):
843         (KJS::PropertyMap::insert):
844         (KJS::PropertyMap::createTable):
845         (KJS::PropertyMap::rehash):
846         (KJS::PropertyMap::remove):
847         (KJS::PropertyMap::mark):
848         (KJS::comparePropertyMapEntryIndices):
849         (KJS::PropertyMap::containsGettersOrSetters):
850         (KJS::PropertyMap::getEnumerablePropertyNames):
851         (KJS::PropertyMap::save):
852         (KJS::PropertyMap::restore):
853         * kjs/property_map.h:
854
855 2007-11-02  Darin Adler  <darin@apple.com>
856
857         Reviewed by Maciej.
858
859         - http://bugs.webkit.org/show_bug.cgi?id=15807
860           HashMap needs a take() function that combines get and remove
861
862         * wtf/HashMap.h: Added take function. Simplistic implementation for now,
863         but still does only one hash table lookup.
864
865         * kjs/array_instance.cpp: (KJS::ArrayInstance::put): Use take rather than
866         a find followed by a remove.
867
868 2007-11-02  David Carson  <dacarson@gmail.com>
869
870         Reviewed by Darin.
871
872         Fix compiler warning "warning: suggest parentheses around && within ||"
873         http://bugs.webkit.org/show_bug.cgi?id=15764
874
875         * kjs/value.h: (KJS::JSValue::isNumber): Add parentheses.
876
877 2007-11-01  Geoffrey Garen  <ggaren@apple.com>
878
879         Reviewed by Maciej Stachowiak.
880         
881         In preparation for making List a simple stack-allocated Vector:
882
883         Removed all instances of List copying and/or assignment, and made List 
884         inherit from Noncopyable.
885         
886         Functions that used to return a List by copy now take List& out 
887         parameters.
888         
889         Layout tests and JS tests pass.
890
891         * kjs/list.cpp:
892         (KJS::List::slice): Replaced copyTail with a more generic slice 
893         alternative. (JavaScriptCore only calls slice(1), but WebCore calls 
894         slice(2)).
895
896 2007-11-01  Geoffrey Garen  <ggaren@apple.com>
897
898         Reviewed by Maciej Stachowiak.
899
900         Fixed http://bugs.webkit.org/show_bug.cgi?id=15785
901         REGRESSION(r27344): Crash on load at finance.yahoo.com
902         
903         Reverted a small portion of my last check-in. (The speedup and the List 
904         removal are still there, though.)
905         
906         ActivationImp needs to hold a pointer to its function, and mark that 
907         pointer (rather than accessing its function through its ExecState, and 
908         counting on the active scope to mark its function) because a closure 
909         can cause an ActivationImp to outlive its ExecState along with any 
910         active scope.
911
912         * kjs/ExecState.cpp:
913         (KJS::ExecState::ExecState):
914         * kjs/function.cpp:
915         (KJS::FunctionImp::~FunctionImp):
916         (KJS::ActivationImp::ActivationImp):
917         * kjs/function.h:
918         (KJS::ActivationImp::ActivationImpPrivate::ActivationImpPrivate):
919
920         Also made HashTable a little more crash-happy in debug builds, so 
921         problems like this will show up earlier:
922         
923         * wtf/HashTable.h:
924         (WTF::HashTable::~HashTable):
925
926 2007-11-01  Geoffrey Garen  <ggaren@apple.com>
927
928         Reviewed by Adam Roben.
929         
930         Addressed some of Darin's review comments.
931         
932         Used perl -p, which is the shorthand while(<>) {}.
933         
934         Made sure not to suppress bison's output.
935         
936         Added line to removed bison_out.txt, since this script removes other 
937         intermediate files, too.
938
939         * DerivedSources.make:
940
941 2007-11-01  Geoffrey Garen  <ggaren@apple.com>
942
943         Reviewed by Oliver Hunt.
944         
945         Removed List from ActivationImp, in preparation for making all lists
946         stack-allocated.
947         
948         Tests pass.
949         
950         1.0% speedup on SunSpider, presumably due to reduced List refcount thrash.
951
952         * kjs/ExecState.cpp:
953         (KJS::ExecState::ExecState):
954         (KJS::ExecState::~ExecState):
955         * kjs/function.cpp:
956         (KJS::ActivationImp::ActivationImp):
957         (KJS::ActivationImp::createArgumentsObject):
958         * kjs/function.h:
959         (KJS::ActivationImp::ActivationImpPrivate::ActivationImpPrivate):
960
961 2007-11-01  Adam Roben  <aroben@apple.com>
962
963         Use jsNumberCell instead of jsNumber when converting double constants to JSValues
964
965         This fixes fast/js/math.html, ecma/Date/15.9.5.10-1.js, and
966         ecma/Date/15.9.5.12-1.js, which were suffering from a bug in MSVC.
967
968         It also gets rid of an MSVC warning that we previously had to silence.
969
970         Reviewed by Geoff.
971
972         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Turn
973         back on the "overflow in constant arithmetic" warning.
974         * kjs/number_object.cpp:
975         (NumberObjectImp::getValueProperty): Use jsNumberCell instead of
976         jsNumber.
977
978 2007-10-31  Adam Roben  <aroben@apple.com>
979
980         Windows build fix
981
982         * kjs/ExecState.h:
983
984 2007-10-31  Maciej Stachowiak  <mjs@apple.com>
985
986         Reviewed by Oliver.
987         
988         - shave some cycles off of local storage access for a 1% SunSpider speedup
989         
990         Keep the LocalStorage pointer in the ExecState, instead of getting
991         it from the ActivationImp all the time.
992
993         * kjs/ExecState.cpp:
994         (KJS::ExecState::updateLocalStorage):
995         * kjs/ExecState.h:
996         (KJS::ExecState::localStorage):
997         * kjs/nodes.cpp:
998         (KJS::LocalVarAccessNode::evaluate):
999         (KJS::LocalVarFunctionCallNode::evaluate):
1000         (KJS::PostIncLocalVarNode::evaluate):
1001         (KJS::PostDecLocalVarNode::evaluate):
1002         (KJS::LocalVarTypeOfNode::evaluate):
1003         (KJS::PreIncLocalVarNode::evaluate):
1004         (KJS::PreDecLocalVarNode::evaluate):
1005         (KJS::ReadModifyLocalVarNode::evaluate):
1006         (KJS::AssignLocalVarNode::evaluate):
1007         (KJS::FunctionBodyNode::processDeclarationsForFunctionCode):
1008
1009 2007-10-31  Adam Roben  <aroben@apple.com>
1010
1011         Fix a crash on launch due to a static initializer race
1012
1013         We now use fast inline assembler spinlocks which can be statically
1014         initialized at compile time.
1015
1016         As a side benefit, this speeds up SunSpider by 0.4%.
1017
1018         Reviewed by Oliver.
1019
1020         * wtf/FastMalloc.cpp:
1021         * wtf/TCSpinLock.h:
1022         (TCMalloc_SpinLock::Lock):
1023         (TCMalloc_SpinLock::Unlock):
1024         (TCMalloc_SlowLock):
1025         * wtf/TCSystemAlloc.cpp:
1026
1027 2007-10-31  Kevin McCullough  <kmccullough@apple.com>
1028
1029         Reviewed by Sam.
1030
1031         - Corrected spelling.
1032
1033         * wtf/HashTraits.h:
1034
1035 2007-10-31  Mark Rowe  <mrowe@apple.com>
1036
1037         Further Gtk build fixage.
1038
1039         * kjs/regexp_object.cpp:
1040
1041 2007-10-31  Mark Rowe  <mrowe@apple.com>
1042
1043         Gtk build fix.
1044
1045         * kjs/regexp.h:
1046
1047 2007-10-31  Darin Adler  <darin@apple.com>
1048
1049         Reviewed by Maciej.
1050
1051         - fix http://bugs.webkit.org/show_bug.cgi?id=15749
1052           RegExp/RegExpObjectImp cause needless UString creation
1053
1054         Speeds things up 0.4% according to SunSpider.
1055
1056         * kjs/config.h: Define USE(PCRE16) instead of HAVE(PCREPOSIX),
1057         because this library doesn't use the real PCRE -- it uses its
1058         own PCRE that works on UTF-16.
1059
1060         * kjs/regexp.h: Removed a few unused functions. Changed the ifdef.
1061         Use Noncopyable. Change the return value of match.
1062         * kjs/regexp.cpp:
1063         (KJS::RegExp::RegExp): Call pcre_compile2, for a slight speed boost.
1064         (KJS::RegExp::~RegExp): PCRE16 rather than PCREPOSIX.
1065         (KJS::RegExp::match): Change to return the position as an int and the
1066         ovector as a OwnArrayPtr<int> for efficiency and clearer storage management.
1067
1068         * kjs/regexp_object.h: Change performMatch and arrayOfMatches to no longer
1069         require a result string.
1070         * kjs/regexp_object.cpp:
1071         (RegExpProtoFunc::callAsFunction): Update for new signature of performMatch.
1072         (RegExpObjectImp::performMatch): Change so it doesn't return a string.
1073         (RegExpObjectImp::arrayOfMatches): Simplify by unifying the handling of
1074         the main result with the backreferences; now it doesn't need to take
1075         a result parameter.
1076         (RegExpObjectImp::getBackref): Minor tweaks.
1077         (RegExpObjectImp::getLastParen): Ditto.
1078         (RegExpObjectImp::getLeftContext): Ditto.
1079         (RegExpObjectImp::getRightContext): Ditto.
1080         (RegExpObjectImp::getValueProperty): Change LastMatch case to call
1081         getBackref(0) so we don't need a separate getLastMatch function.
1082
1083         * kjs/string_object.cpp:
1084         (KJS::replace): Update to use new performMatch, including merging the
1085         matched string section with the other substrings.
1086         (KJS::StringProtoFunc::callAsFunction): Update functions to use the
1087         new performMatch and match. Also change to use OwnArrayPtr.
1088
1089 2007-10-31  Oliver Hunt  <oliver@apple.com>
1090
1091         * kjs/nodes.h: include OwnPtr.h
1092
1093 2007-10-31  Oliver Hunt  <oliver@apple.com>
1094
1095         Reviewed by Maciej.
1096
1097         Remove SourceCodeElement class and replaced with a Vector for a 0.8% gain on sunspider
1098
1099         * kjs/grammar.y:
1100         * kjs/nodes.cpp:
1101         (KJS::statementListPushFIFO):
1102         (KJS::statementListGetDeclarations):
1103         (KJS::statementListInitializeDeclarationStacks):
1104         (KJS::statementListInitializeVariableAccessStack):
1105         (KJS::statementListExecute):
1106         (KJS::BlockNode::optimizeVariableAccess):
1107         (KJS::BlockNode::BlockNode):
1108         (KJS::BlockNode::getDeclarations):
1109         (KJS::BlockNode::execute):
1110         (KJS::CaseClauseNode::optimizeVariableAccess):
1111         (KJS::CaseClauseNode::getDeclarations):
1112         (KJS::CaseClauseNode::evalStatements):
1113         (KJS::FunctionBodyNode::initializeDeclarationStacks):
1114         (KJS::FunctionBodyNode::optimizeVariableAccess):
1115         * kjs/nodes.h:
1116         * kjs/nodes2string.cpp:
1117         (KJS::statementListStreamTo):
1118         (KJS::BlockNode::streamTo):
1119         (KJS::CaseClauseNode::streamTo):
1120
1121 2007-10-30  Mark Rowe  <mrowe@apple.com>
1122
1123         * kjs/property_map.cpp: Added a missing using directive to fix the build
1124         for non-Mac ports. Mac worked only because it does the AllInOneFile compile.
1125
1126 2007-10-31  Maciej Stachowiak  <mjs@apple.com>
1127
1128         * kjs/property_map.cpp: Include HashTable.h the right way to fix the build
1129         for non-Mac ports.
1130
1131 2007-10-31  Alexey Proskuryakov  <ap@webkit.org>
1132
1133         Reviewed by Darin.
1134
1135         http://bugs.webkit.org/show_bug.cgi?id=11001
1136         WebKit doesn't support RegExp.compile method
1137
1138         Test: fast/js/regexp-compile.html
1139
1140         * kjs/regexp_object.cpp:
1141         (RegExpPrototype::RegExpPrototype):
1142         (RegExpProtoFunc::callAsFunction):
1143         * kjs/regexp_object.h:
1144         (KJS::RegExpProtoFunc::):
1145         Added RegExp.compile.
1146
1147         * tests/mozilla/expected.html: js1_2/regexp/compile.js now passes.
1148
1149 2007-10-31  Maciej Stachowiak  <mjs@apple.com>
1150
1151         Reviewed by Oliver.
1152         
1153         - get rid of integer divide in PropertyMap and HashTable for 1% SunSpider speedup
1154         
1155         Integer divide sucks. Fortunately, a bunch of shifts and XORs
1156         biased towards the high bits is sufficient to provide a good
1157         double hash. Besides the SunSpider win, I used the dump statistics
1158         mode for both to verify that collisions did not increase and that
1159         the longest collision chain is not any longer.
1160
1161         * kjs/property_map.cpp:
1162         (KJS::doubleHash):
1163         (KJS::PropertyMap::get):
1164         (KJS::PropertyMap::getLocation):
1165         (KJS::PropertyMap::put):
1166         (KJS::PropertyMap::insert):
1167         (KJS::PropertyMap::remove):
1168         (KJS::PropertyMap::checkConsistency):
1169         * wtf/HashTable.h:
1170         (WTF::doubleHash):
1171         (WTF::::lookup):
1172         (WTF::::lookupForWriting):
1173         (WTF::::fullLookupForWriting):
1174         (WTF::::add):
1175
1176 2007-10-30  Adam Roben  <aroben@apple.com>
1177
1178         * kjs/collector.h: Make HeapType public so it can be used for non-member
1179         things like the HeapConstants struct template. Fixes the build on Windows.
1180
1181 2007-10-30  Adam Roben  <aroben@apple.com>
1182
1183         Change ALWAYS_INLINE and WTF_PRIVATE_INLINE to use __forceinline on Windows
1184
1185         Speeds up SunSpider by 0.4%.
1186
1187         Reviewed by Steve and Maciej.
1188
1189         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Disable
1190         a warning during LTCG in release builds about double -> float
1191         conversion.
1192         * wtf/AlwaysInline.h:
1193         * wtf/FastMalloc.h:
1194
1195 2007-10-30  Adam Roben  <aroben@apple.com>
1196
1197         Use GetCurrentThreadId instead of pthread_self in FastMalloc
1198
1199         Speeds up SunSpider by 0.3%.
1200
1201         Reviewed by Steve.
1202
1203         * wtf/FastMalloc.cpp:
1204         (WTF::TCMalloc_ThreadCache::InitTSD):
1205         (WTF::TCMalloc_ThreadCache::CreateCacheIfNecessary):
1206
1207 2007-10-30  Adam Roben  <aroben@apple.com>
1208
1209         Switch to a Win32 critical section implementation of spinlocks
1210         
1211         Speeds up SunSpider by 0.4%.
1212         
1213         Reviewed by Steve.
1214         
1215         * wtf/FastMalloc.cpp:
1216         * wtf/TCSpinLock.h:
1217         (TCMalloc_SpinLock::TCMalloc_SpinLock):
1218         (TCMalloc_SpinLock::Init):
1219         (TCMalloc_SpinLock::Finalize):
1220         (TCMalloc_SpinLock::Lock):
1221         (TCMalloc_SpinLock::Unlock):
1222         * wtf/TCSystemAlloc.cpp:
1223
1224 2007-10-30  Adam Roben  <aroben@apple.com>
1225
1226         Fix Bug 15586: REGRESSION (r26759-r26785): Windows nightly builds crash with Safari 3 Public Beta
1227
1228         http://bugs.webkit.org/show_bug.cgi?id=15586
1229
1230         Also fixes: <rdar://5565303> Cannot use regsvr32.exe to register WebKit.dll
1231
1232         Use Win32 TLS functions instead of __declspec(thread), which breaks
1233         delay-loading.
1234
1235         Reviewed by Steve.
1236
1237         * wtf/FastMalloc.cpp:
1238         (WTF::getThreadHeap):
1239         (WTF::TCMalloc_ThreadCache::InitModule):
1240
1241 2007-10-30  Maciej Stachowiak  <mjs@apple.com>
1242
1243         Reviewed by Oliver.
1244         
1245         - allocate numbers in half-size cells, for an 0.5% SunSpider speedup
1246         http://bugs.webkit.org/show_bug.cgi?id=15772
1247         
1248         We do this by using a single mark bit per two number cells, and
1249         tweaking marking.
1250         
1251         Besides being an 0.5% win overall, this is a 7.1% win on morph.
1252
1253         * kjs/collector.cpp:
1254         (KJS::):
1255         (KJS::Collector::heapAllocate):
1256         (KJS::Collector::markStackObjectsConservatively):
1257         (KJS::Collector::sweep):
1258         * kjs/collector.h:
1259         (KJS::SmallCollectorCell::):
1260
1261 2007-10-30  Geoffrey Garen  <ggaren@apple.com>
1262
1263         Reviewed by Adam Roben, Sam Weinig.
1264         
1265         Made conflicts in grammar.y a persistent build failure.
1266
1267         * DerivedSources.make:
1268
1269 2007-10-30  Kevin McCullough  <kmccullough@apple.com>
1270
1271         Reviewed by Adam and Geoff.
1272
1273         - Added a new cast so all the casts are in the same place.
1274
1275         * API/APICast.h:
1276         (toGlobalRef):
1277
1278 2007-10-30  Geoffrey Garen  <ggaren@apple.com>
1279
1280         Reviewed by Darin Adler.
1281
1282         Fixed <rdar://problem/5567504> shift/reduce conflict introduced in r24457
1283         
1284         JS tests, including 
1285
1286             ecma_2/Statements/dowhile-001.js
1287             ecma_2/Statements/dowhile-002.js
1288             ecma_2/Statements/dowhile-003.js
1289             ecma_2/Statements/dowhile-004.js
1290             ecma_2/Statements/dowhile-005.js
1291             ecma_2/Statements/dowhile-006.js
1292             ecma_2/Statements/dowhile-007.js
1293             js1_2/statements/do_while.js
1294
1295         and layout tests, including
1296
1297             do-while-expression-value.html
1298             do-while-semicolon.html
1299             do-while-without-semicolon.html
1300         
1301         pass.
1302         
1303         * kjs/grammar.y: Use the explicit "error" production, as we do with other
1304         automatic semicolon insertions, to disambiguate "do { } while();" from
1305         "do { } while()" followed by ";" (the empty statement).
1306
1307 2007-10-29  Oliver Hunt  <oliver@apple.com>
1308
1309         Reviewed by Maciej.
1310
1311         Debranching remaining assignment nodes, and miscellaneous cleanup
1312         
1313         Split read-modify code paths out of AssignBracketNode and AssignDotNode
1314         Removed now unnecessary check for write-only assignment in ReadModifyLocalVarNode 
1315         and ReadModifyResolveNode evaluate methods
1316
1317         Leads to a 1% gain in SunSpider.
1318
1319         * kjs/grammar.y:
1320         * kjs/nodes.cpp:
1321         (KJS::ReadModifyLocalVarNode::evaluate):
1322         (KJS::ReadModifyResolveNode::evaluate):
1323         (KJS::AssignDotNode::evaluate):
1324         (KJS::ReadModifyDotNode::optimizeVariableAccess):
1325         (KJS::ReadModifyDotNode::evaluate):
1326         (KJS::AssignBracketNode::evaluate):
1327         (KJS::ReadModifyBracketNode::optimizeVariableAccess):
1328         (KJS::ReadModifyBracketNode::evaluate):
1329         * kjs/nodes.h:
1330         (KJS::AssignBracketNode::):
1331         (KJS::AssignBracketNode::precedence):
1332         (KJS::AssignDotNode::):
1333         (KJS::AssignDotNode::precedence):
1334         * kjs/nodes2string.cpp:
1335         (KJS::ReadModifyBracketNode::streamTo):
1336         (KJS::AssignBracketNode::streamTo):
1337         (KJS::ReadModifyDotNode::streamTo):
1338         (KJS::AssignDotNode::streamTo):
1339
1340 2007-10-29  Oliver Hunt  <oliver@apple.com>
1341
1342         Debranching various Node::evaluate implementations
1343         
1344         Reviewed by Maciej.
1345         
1346         Split the read-modify-write assignment cases out of AssignResolveNode and into ReadModifyResolveNode
1347         Split the increment and decrement cases for Prefix- and Postfix- ResolveNode, BracketNode, and DotNode
1348         
1349         Gains 1.6% on SunSpider
1350
1351         * JavaScriptCore.xcodeproj/project.pbxproj:
1352         * kjs/grammar.y:
1353         * kjs/nodes.cpp:
1354         (KJS::PostIncResolveNode::optimizeVariableAccess):
1355         (KJS::PostIncResolveNode::evaluate):
1356         (KJS::PostIncLocalVarNode::evaluate):
1357         (KJS::PostDecResolveNode::optimizeVariableAccess):
1358         (KJS::PostDecResolveNode::evaluate):
1359         (KJS::PostDecLocalVarNode::evaluate):
1360         (KJS::PostIncBracketNode::evaluate):
1361         (KJS::PostDecBracketNode::evaluate):
1362         (KJS::PostIncDotNode::evaluate):
1363         (KJS::PostDecDotNode::evaluate):
1364         (KJS::PreIncResolveNode::optimizeVariableAccess):
1365         (KJS::PreIncLocalVarNode::evaluate):
1366         (KJS::PreIncResolveNode::evaluate):
1367         (KJS::PreDecResolveNode::optimizeVariableAccess):
1368         (KJS::PreDecLocalVarNode::evaluate):
1369         (KJS::PreDecResolveNode::evaluate):
1370         (KJS::PreIncBracketNode::evaluate):
1371         (KJS::PreDecBracketNode::evaluate):
1372         (KJS::PreIncDotNode::evaluate):
1373         (KJS::PreDecDotNode::evaluate):
1374         (KJS::ReadModifyResolveNode::optimizeVariableAccess):
1375         (KJS::AssignResolveNode::optimizeVariableAccess):
1376         (KJS::AssignLocalVarNode::evaluate):
1377         (KJS::AssignResolveNode::evaluate):
1378         * kjs/nodes.h:
1379         (KJS::PostDecResolveNode::):
1380         (KJS::PostDecResolveNode::precedence):
1381         (KJS::PostDecLocalVarNode::):
1382         (KJS::PostfixBracketNode::):
1383         (KJS::PostfixBracketNode::precedence):
1384         (KJS::PostIncBracketNode::):
1385         (KJS::PostIncBracketNode::isIncrement):
1386         (KJS::PostDecBracketNode::):
1387         (KJS::PostDecBracketNode::isIncrement):
1388         (KJS::PostfixDotNode::):
1389         (KJS::PostfixDotNode::precedence):
1390         (KJS::PostIncDotNode::):
1391         (KJS::PostIncDotNode::isIncrement):
1392         (KJS::PostDecDotNode::):
1393         (KJS::PreIncResolveNode::):
1394         (KJS::PreDecResolveNode::):
1395         (KJS::PreDecResolveNode::precedence):
1396         (KJS::PreDecLocalVarNode::):
1397         (KJS::PrefixBracketNode::):
1398         (KJS::PrefixBracketNode::precedence):
1399         (KJS::PreIncBracketNode::):
1400         (KJS::PreIncBracketNode::isIncrement):
1401         (KJS::PreDecBracketNode::):
1402         (KJS::PreDecBracketNode::isIncrement):
1403         (KJS::PrefixDotNode::):
1404         (KJS::PrefixDotNode::precedence):
1405         (KJS::PreIncDotNode::):
1406         (KJS::PreIncDotNode::isIncrement):
1407         (KJS::PreDecDotNode::):
1408         (KJS::ReadModifyResolveNode::):
1409         (KJS::ReadModifyLocalVarNode::):
1410         (KJS::AssignResolveNode::):
1411         (KJS::AssignResolveNode::precedence):
1412         * kjs/nodes2string.cpp:
1413         (KJS::PostIncResolveNode::streamTo):
1414         (KJS::PostDecResolveNode::streamTo):
1415         (KJS::PostfixBracketNode::streamTo):
1416         (KJS::PostfixDotNode::streamTo):
1417         (KJS::PreIncResolveNode::streamTo):
1418         (KJS::PreDecResolveNode::streamTo):
1419         (KJS::ReadModifyResolveNode::streamTo):
1420         (KJS::AssignResolveNode::streamTo):
1421
1422 2007-10-29  Maciej Stachowiak  <mjs@apple.com>
1423
1424         Not reviewed, build fix.
1425         
1426         - Include Vector.h in a way that actually works.
1427
1428         * kjs/LocalStorage.h:
1429
1430 2007-10-29  Maciej Stachowiak  <mjs@apple.com>
1431
1432         Not reviewed, build fix.
1433         
1434         - Install LocalStorage.h as a private header.
1435
1436         * JavaScriptCore.xcodeproj/project.pbxproj:
1437
1438 2007-10-29  Maciej Stachowiak  <mjs@apple.com>
1439
1440         Reviewed by Darin.
1441         
1442         - Define good VectorTraits for LocalStorage entry for 0.5% speed improvement on SunSpider.
1443
1444         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
1445         * JavaScriptCore.xcodeproj/project.pbxproj:
1446         * kjs/LocalStorage.h: Added.
1447         (KJS::LocalStorageEntry::LocalStorageEntry):
1448         (WTF::):
1449         * kjs/function.h:
1450         * kjs/nodes.cpp:
1451         (KJS::FunctionBodyNode::processDeclarationsForFunctionCode):
1452
1453 2007-10-29  Geoffrey Garen  <ggaren@apple.com>
1454
1455         Reviewed by Oliver Hunt.
1456         
1457         Some small tweaks that I notice while reviewing Oliver's last patch.
1458         
1459         Includes removal of an unnecessary KJS_CHECKEXCEPTIONVALUE.
1460         
1461         No change in SunSpider because SunSpider doesn't take the code path that
1462         would execute the unnecessary KJS_CHECKEXCEPTIONVALUE much.
1463
1464         * kjs/nodes.cpp:
1465         (KJS::LocalVarPostfixNode::evaluate):
1466         (KJS::TypeOfResolveNode::optimizeVariableAccess):
1467         (KJS::LocalVarTypeOfNode::evaluate):
1468         (KJS::PrefixResolveNode::optimizeVariableAccess):
1469         (KJS::LocalVarPrefixNode::evaluate):
1470         (KJS::AssignResolveNode::optimizeVariableAccess):
1471         (KJS::LocalVarAssignNode::evaluate):
1472         * kjs/nodes.h:
1473         (KJS::LocalVarTypeOfNode::):
1474         (KJS::PrefixResolveNode::):
1475         (KJS::LocalVarPrefixNode::):
1476         (KJS::AssignResolveNode::):
1477         (KJS::LocalVarAssignNode::):
1478
1479 2007-10-29  Eric Seidel  <eric@webkit.org>
1480
1481         Reviewed by Maciej.
1482         
1483         SunSpider claims this was a 0.7% speedup.
1484
1485         * kjs/string_object.cpp:
1486         (KJS::StringProtoFunc::callAsFunction): avoid mallocing a jsString in the common case
1487
1488 2007-10-29  Maciej Stachowiak  <mjs@apple.com>
1489
1490         Reviewed by Mark.
1491         
1492         - re-enable asserts for access to empty or deleted keys
1493
1494         * wtf/HashTable.h:
1495         (WTF::::lookup):
1496         (WTF::::lookupForWriting):
1497         (WTF::::fullLookupForWriting):
1498         (WTF::::add):
1499
1500 2007-10-29  Eric Seidel  <eric@webkit.org>
1501
1502         Build fix only, no review.
1503
1504         * JavaScriptCore.exp: Export symbol for new StringInstance::getOwnPropertySlot
1505
1506 2007-10-29  Mark Rowe  <mrowe@apple.com>
1507
1508         Gtk build fix.  Move struct declarations into nodes.h.
1509
1510         * kjs/grammar.y:
1511         * kjs/nodes.h:
1512
1513 2007-10-29  Eric Seidel  <eric@webkit.org>
1514
1515         Reviewed by darin.
1516         
1517         Give StringInstance a getOwnPropertySlot(ExecState, unsigned, PropertySlot) fastpath, just like Arrays.
1518         Make it a compile time error to use toString(ExecState) on a StringInstance
1519         
1520         SunSpider claims this was a 6.6% speedup overall (22% on string-base64)
1521
1522         * kjs/internal.h:
1523         (KJS::StringImp::getLength):
1524         * kjs/string_object.cpp:
1525         (KJS::StringInstance::lengthGetter):
1526         (KJS::StringInstance::inlineGetOwnPropertySlot):
1527         (KJS::StringInstance::getOwnPropertySlot):
1528         * kjs/string_object.h:
1529
1530 2007-10-28  Oliver Hunt  <oliver@apple.com>
1531
1532         Reviewed by Darin.
1533
1534         Add nodes to allow Assignment, TypeOf, and prefix operators to 
1535         make use of the new optimised local variable look up.
1536
1537         5% gain on sunspider
1538
1539         * kjs/nodes.cpp:
1540         (KJS::TypeOfResolveNode::optimizeVariableAccess):
1541         (KJS::LocalTypeOfAccessNode::evaluate):
1542         (KJS::PrefixResolveNode::optimizeVariableAccess):
1543         (KJS::PrefixLocalAccessNode::evaluate):
1544         (KJS::AssignResolveNode::optimizeVariableAccess):
1545         (KJS::AssignLocalAccessNode::evaluate):
1546         * kjs/nodes.h:
1547         (KJS::TypeOfResolveNode::):
1548         (KJS::TypeOfResolveNode::precedence):
1549         (KJS::LocalTypeOfAccessNode::):
1550         (KJS::PrefixResolveNode::):
1551         (KJS::PrefixResolveNode::precedence):
1552         (KJS::PrefixLocalAccessNode::):
1553         (KJS::AssignResolveNode::):
1554         (KJS::AssignLocalAccessNode::):
1555
1556 2007-10-28  Maciej Stachowiak  <mjs@apple.com>
1557
1558         Reviewed by Darin.
1559         
1560         - avoid creating and then breaking circular lists in the parser, instead track head and tail pointers at parse time
1561         http://bugs.webkit.org/show_bug.cgi?id=15748
1562         
1563         Not a significant speedup or slowdown on SunSpider.
1564
1565         * kjs/Parser.cpp:
1566         (KJS::clearNewNodes):
1567         * kjs/Parser.h:
1568         * kjs/grammar.y:
1569         * kjs/nodes.cpp:
1570         (KJS::BlockNode::BlockNode):
1571         (KJS::CaseBlockNode::CaseBlockNode):
1572         (KJS::FunctionBodyNode::FunctionBodyNode):
1573         (KJS::SourceElementsNode::SourceElementsNode):
1574         (KJS::ProgramNode::ProgramNode):
1575         * kjs/nodes.h:
1576         (KJS::ElementNode::):
1577         (KJS::ArrayNode::):
1578         (KJS::PropertyListNode::):
1579         (KJS::ObjectLiteralNode::):
1580         (KJS::ArgumentListNode::):
1581         (KJS::ArgumentsNode::):
1582         (KJS::VarDeclListNode::):
1583         (KJS::VarStatementNode::):
1584         (KJS::ForNode::):
1585         (KJS::ParameterNode::):
1586         (KJS::FuncExprNode::):
1587         (KJS::FuncDeclNode::):
1588         (KJS::SourceElementsNode::):
1589         (KJS::CaseClauseNode::):
1590         (KJS::ClauseListNode::):
1591
1592 2007-10-28  Mark Rowe  <mrowe@apple.com>
1593
1594         Disable assertions in a manner that doesn't break the Qt Windows build.
1595
1596         * wtf/HashTable.h:
1597         (WTF::::lookup):
1598         (WTF::::lookupForWriting):
1599         (WTF::::fullLookupForWriting):
1600
1601 2007-10-28  Geoffrey Garen  <ggaren@apple.com>
1602
1603         Temporarily disabling some ASSERTs I introduced in my last check-in 
1604         because of http://bugs.webkit.org/show_bug.cgi?id=15747
1605         Lots of layout tests fail the !HashTranslator::equal(KeyTraits::emptyValue() ASSERT
1606
1607         * wtf/HashTable.h:
1608         (WTF::::lookup):
1609         (WTF::::lookupForWriting):
1610         (WTF::::fullLookupForWriting):
1611         (WTF::::add):
1612
1613 2007-10-28  Geoffrey Garen  <ggaren@apple.com>
1614
1615         Reviewed by Darin Adler.
1616         
1617         Fixed http://bugs.webkit.org/show_bug.cgi?id=15746
1618         #ifndef ASSERT_DISABLED is no good!
1619         
1620         Replaced with #if !ASSERT_DISABLED.
1621
1622         * wtf/HashTable.h:
1623         (WTF::::lookup):
1624         (WTF::::lookupForWriting):
1625         (WTF::::fullLookupForWriting):
1626         (WTF::::add):
1627
1628 2007-10-28  Geoffrey Garen  <ggaren@apple.com>
1629
1630         Reviewed by Darin Adler.
1631         
1632         Added FunctionCallResolveNode, PostfixResolveNode, and DeleteResolveNode
1633         to the AST transfom that replaces slow resolve nodes with fast local 
1634         variable alternatives.
1635         
1636         2.5% speedup on SunSpider.
1637         
1638         Also added some missing copyright notices.
1639         
1640         * kjs/nodes.cpp:
1641         (KJS::FunctionCallResolveNode::optimizeVariableAccess):
1642         (KJS::FunctionCallResolveNode::evaluate):
1643         (KJS::LocalVarFunctionCallNode::evaluate):
1644         (KJS::PostfixResolveNode::optimizeVariableAccess):
1645         (KJS::PostfixResolveNode::evaluate):
1646         (KJS::LocalVarPostfixNode::evaluate):
1647         (KJS::DeleteResolveNode::optimizeVariableAccess):
1648         (KJS::DeleteResolveNode::evaluate):
1649         (KJS::LocalVarDeleteNode::evaluate):
1650         * kjs/nodes.h:
1651         (KJS::FunctionCallResolveNode::):
1652         (KJS::LocalVarFunctionCallNode::LocalVarFunctionCallNode):
1653         (KJS::PostfixResolveNode::):
1654         (KJS::LocalVarPostfixNode::LocalVarPostfixNode):
1655         (KJS::DeleteResolveNode::):
1656         (KJS::LocalVarDeleteNode::LocalVarDeleteNode):
1657
1658 2007-10-28  Eric Seidel  <eric@webkit.org>
1659
1660         Reviewed by darin.
1661         
1662         Inline UString::Rep::deref() for a 0.8% improvement in SunSpider
1663         Add virtual keyword to a few virtual functions previously unmarked.
1664
1665         * kjs/internal.h:
1666         (KJS::StringImp::type):
1667         (KJS::NumberImp::type):
1668         * kjs/ustring.h:
1669         (KJS::UString::Rep::deref):
1670
1671 2007-10-28  Darin Adler  <darin@apple.com>
1672
1673         - fix "broken everything" from the storage leak fix
1674
1675         * wtf/RefPtr.h: (WTF::RefPtr::RefPtr): Added a PlacementNewAdopt constructor.
1676         * kjs/ustring.h: (KJS::UString::UString): Pass PlacementNewAdopt along to RefPtr.
1677
1678 2007-10-28  Darin Adler  <darin@apple.com>
1679
1680         Reviewed by Adam.
1681
1682         - turn on unused parameter waring on Mac OS X because it's already on elsewhere
1683
1684         * Configurations/Base.xcconfig: Took out -wno-unused-parameter.
1685
1686         * API/JSNode.c:
1687         * API/JSNodeList.c:
1688         * API/minidom.c:
1689         * API/testapi.c:
1690         Fixed unused variables by using them or marked them with UNUSED_PARAM.
1691
1692         * kjs/CollectorHeapIntrospector.h: (KJS::CollectorHeapIntrospector::zoneCalloc):
1693         Removed parameter names to indicate they are unused.
1694
1695 2007-10-28  Darin Adler  <darin@apple.com>
1696
1697         Reviewed by Maciej.
1698
1699         - fix a storage leak where we ref the UString every time we replace
1700           a ResolveNode with a LocalVarAccessNode
1701
1702         * kjs/identifier.h: (KJS::Identifier::Identifier): Added a constructor
1703         that takes PlacementNewAdopt.
1704
1705         * kjs/nodes.h: (KJS::ResolveNode::ResolveNode): Initialize the ident
1706         with PlacementNewAdopt instead of the old value of ident.
1707
1708         * kjs/ustring.h: (KJS::UString::UString): Added a constructor that
1709         takes PlacementNewAdopt.
1710
1711 2007-10-28  Darin Adler  <darin@apple.com>
1712
1713         - Windows build fix; get rid of unused parameter
1714
1715         * kjs/nodes.cpp: (KJS::ResolveNode::optimizeVariableAccess): Don't pass it.
1716         * kjs/nodes.h: (KJS::LocalVarAccessNode::LocalVarAccessNode): Remove it.
1717         The assertions weren't all that helpful.
1718
1719 2007-10-28  Mark Rowe  <mrowe@apple.com>
1720
1721         Gtk build fix.  Add include of MathExtras.h.
1722
1723         * kjs/string_object.cpp:
1724
1725 2007-10-28  Mark Rowe  <mrowe@apple.com>
1726
1727         Reviewed by Maciej and Tim.
1728
1729         Replace uses of isNaN and isInf with isnan and isinf, and
1730         remove isNaN and isInf.
1731
1732         * kjs/config.h: Remove unused HAVE_'s.
1733         * kjs/date_object.cpp:
1734         (KJS::DateInstance::getTime):
1735         (KJS::DateInstance::getUTCTime):
1736         (KJS::DateProtoFunc::callAsFunction):
1737         (KJS::DateObjectImp::construct):
1738         (KJS::DateObjectFuncImp::callAsFunction):
1739         * kjs/function.cpp:
1740         (KJS::GlobalFuncImp::callAsFunction):
1741         * kjs/math_object.cpp:
1742         (MathFuncImp::callAsFunction):
1743         * kjs/nodes2string.cpp:
1744         (KJS::isParserRoundTripNumber):
1745         * kjs/number_object.cpp:
1746         (NumberProtoFunc::callAsFunction):
1747         * kjs/operations.cpp:
1748         * kjs/operations.h:
1749         * kjs/string_object.cpp:
1750         (KJS::StringProtoFunc::callAsFunction):
1751         * kjs/ustring.cpp:
1752         (KJS::UString::from):
1753         * kjs/value.cpp:
1754         (KJS::JSValue::toInteger):
1755         (KJS::JSValue::toInt32SlowCase):
1756         (KJS::JSValue::toUInt32SlowCase):
1757
1758 2007-10-28  Geoffrey Garen  <ggaren@apple.com>
1759
1760         Build fix: use the new-fangled missingSymbolMarker().
1761
1762         * kjs/nodes.cpp:
1763         (KJS::ResolveNode::optimizeVariableAccess):
1764         * kjs/nodes.h:
1765         (KJS::LocalVarAccessNode::LocalVarAccessNode):
1766
1767 2007-10-28  Geoffrey Garen  <ggaren@apple.com>
1768
1769         Reviewed by Maciej Stachowiak, Darin Adler.
1770         
1771         Much supporting work done by Maciej Stachowiak, Maks Orlovich, and 
1772         Cameron Zwarich.
1773         
1774         AST transfom to replace slow resolve nodes with fast local variable
1775         alternatives that do direct memory access. Currently, only ResolveNode
1776         provides a fast local variable alternative. 6 others are soon to come.
1777         
1778         16.7% speedup on SunSpider.
1779         
1780         Most of this patch is just scaffolding to support iterating all the 
1781         resolve nodes in the AST through optimizeResolveNodes(). In 
1782         optimizeResolveNodes(), most classes just push their child nodes onto 
1783         the processing stack, while ResolveNodes actually replace themselves in 
1784         the tree with more optimized alternatives, if possible.
1785
1786         Here are the interesting bits:
1787
1788         * kjs/nodes.h: Added PlacementNewAdoptTag, along with implementations 
1789         in Node and ResolveNode. This tag allows you to use placement new to 
1790         swap out a base class Node in favor of a subclass copy that holds the
1791         same data. (Without this tag, default initialization would NULL out
1792         RefPtrs, change line numbers, etc.)
1793
1794         * kjs/nodes.cpp:
1795         (KJS::ResolveNode::evaluate): Since we're taking the slow path, ASSERT
1796         that the fast path is impossible, to make sure we didn't leave anything
1797         on the table.
1798
1799         (KJS::FunctionBodyNode::optimizeResolveNodes): Here's where the AST 
1800         transformation happens.
1801         
1802         (KJS::ResolveNode::optimizeResolveNodes): Here's where the ResolveNode
1803         optimization happens.
1804
1805         * kjs/function.h: Added symbolTable() accessor for, for the sake of 
1806         an ASSERT.
1807
1808 2007-10-28  Mark Rowe  <mrowe@apple.com>
1809
1810         Reviewed by Maciej.
1811
1812         Fix "AllInOneFile.o has a global initializer in it".
1813
1814         Some versions of gcc generate a global initializer for std::numeric_limits<size_t>::max().
1815         We can avoid this by moving it inside an inline function.
1816
1817         * kjs/SymbolTable.h:
1818         (KJS::missingSymbolMarker):
1819         * kjs/function.cpp:
1820         (KJS::ActivationImp::getOwnPropertySlot):
1821         (KJS::ActivationImp::put):
1822
1823 2007-10-28  Maciej Stachowiak  <mjs@apple.com>
1824
1825         Reviewed by Mark.
1826         
1827         - Added assertions to protect against adding empty or deleted keys to a HashTable
1828
1829         * wtf/HashTable.h:
1830         (WTF::HashTable::lookup):
1831         (WTF::HashTable::lookupForWriting):
1832         (WTF::HashTable::fullLookupForWriting):
1833         (WTF::HashTable::add):
1834
1835 2007-10-28  Darin Adler  <darin@apple.com>
1836
1837         - fix GTK build
1838
1839         * kjs/nodes2string.cpp: (KJS::isParserRoundTripNumber):
1840         Use isNaN and isInf instead of isnan and isinf.
1841
1842 2007-10-28  Darin Adler  <darin@apple.com>
1843
1844         Reviewed by Maciej.
1845
1846         - http://bugs.webkit.org/show_bug.cgi?id=15735
1847           remove GroupNode to simplify AST and possibly get a modest speedup
1848
1849         This patch removes 4 node types: GroupNode, PropertyNameNode,
1850         FunctionCallParenBracketNode, and FunctionCallParenDotNode.
1851
1852         To remove GroupNode, we add knowledge of precedence to the tree nodes,
1853         and use that when serializing to determine where parentheses are needed.
1854         This means we no longer have to represent parentheses in the tree.
1855
1856         The precedence values are named after productions in the grammar from the
1857         JavaScript standard.
1858
1859         SunSpider says this is an 0.4% speedup.
1860
1861         * kjs/function.h:
1862         * kjs/function.cpp: Removed escapeStringForPrettyPrinting -- it's part of
1863         serialization, so I moved it to the file that takes care of that.
1864
1865         * kjs/grammar.y: Changed makeGetterOrSetterPropertyNode to use 0 to
1866         indicate failure instead of a separate boolean. Got rid of PropertyNameNode
1867         by merging the PropertyName rule into the Property rule (which was easier
1868         than figuring out how to pass the Identifier from one node to another).
1869         Got rid of GroupNode, nodeInsideAllParens(), FunctionCallParenBracketNode,
1870         and FunctionCallParenDotNode.
1871
1872         * kjs/nodes.h: Removed unused forward declarations and Operator values.
1873         Added Precedence enum, and precedence function to all nodes. Removed
1874         nodeInsideAllParens. Added streamBinaryOperator function for serialization.
1875         Removed GroupNode and PropertyNameNode. Made PropertyNode store an Identifier.
1876         Removed FunctionCallParenBracketNode and FunctionCallParenDotNode.
1877
1878         * kjs/nodes.cpp: Removed Node::nodinsideAllParens, GroupNode, and PropertyNameNode.
1879         (KJS::PropertyListNode::evaluate): Changed code to get name directly instead
1880         of converting it from an Identifier to a jsString then back to a UString
1881         then into an Identifier again!
1882
1883         * kjs/nodes2string.cpp: Changed special-token implementation to use a separate
1884         function for each of Endl, Indent, Unindent, and DotExpr instead of using a
1885         single function with a switch. Added a precedence that you can stream in, to
1886         cause the next node serialized to add parentheses based on that precedence value.
1887         (KJS::operatorString): Moved to the top of the file.
1888         (KJS::escapeStringForPrettyPrinting): Moved here from function.cpp. Removed old
1889         workaround for snprintf, since StringExtras.h takes care of that.
1890         (KJS::operator<<): Made the char and char* versions faster by using UString's
1891         character append functions instead of constructing a UString. Added the logic
1892         to the Node* version to add parentheses if needed.
1893         (KJS::Node::streamLeftAssociativeBinaryOperator): Added helper function.
1894         (KJS::ElementNode::streamTo): Use PrecAssignment for the elements.
1895         (KJS::BracketAccessorNode::streamTo): Use PrecCall for the expression before
1896         the bracket.
1897         (KJS::DotAccessorNode::streamTo): Use PrecCall for the expression before the dot.
1898         (KJS::ArgumentListNode::streamTo): Use PrecAssignment for the arguments.
1899         (KJS::NewExprNode::streamTo): Use PrecMember for the expression.
1900         (KJS::FunctionCallValueNode::streamTo): Use PrecCall.
1901         (KJS::FunctionCallBracketNode::streamTo): Ditto.
1902         (KJS::FunctionCallDotNode::streamTo): Ditto.
1903         (KJS::PostfixBracketNode::streamTo): Ditto.
1904         (KJS::PostfixDotNode::streamTo): Ditto.
1905         (KJS::PostfixErrorNode::streamTo): Use PrecLeftHandSide.
1906         (KJS::DeleteBracketNode::streamTo): Use PrecCall.
1907         (KJS::DeleteDotNode::streamTo): Ditto.
1908         (KJS::DeleteValueNode::streamTo): Use PrecUnary.
1909         (KJS::VoidNode::streamTo): Ditto.
1910         (KJS::TypeOfValueNode::streamTo): Ditto.
1911         (KJS::PrefixBracketNode::streamTo): Use PrecCall.
1912         (KJS::PrefixDotNode::streamTo): Ditto.
1913         (KJS::PrefixErrorNode::streamTo): Use PrecUnary.
1914         (KJS::UnaryPlusNode::streamTo): Ditto.
1915         (KJS::NegateNode::streamTo): Ditto.
1916         (KJS::BitwiseNotNode::streamTo): Ditto.
1917         (KJS::LogicalNotNode::streamTo): Ditto.
1918         (KJS::MultNode::streamTo): Use streamLeftAssociativeBinaryOperator.
1919         (KJS::DivNode::streamTo): Ditto.
1920         (KJS::ModNode::streamTo): Ditto.
1921         (KJS::AddNode::streamTo): Ditto.
1922         (KJS::SubNode::streamTo): Ditto.
1923         (KJS::LeftShiftNode::streamTo): Ditto.
1924         (KJS::RightShiftNode::streamTo): Ditto.
1925         (KJS::UnsignedRightShiftNode::streamTo): Ditto.
1926         (KJS::LessNode::streamTo): Ditto.
1927         (KJS::GreaterNode::streamTo): Ditto.
1928         (KJS::LessEqNode::streamTo): Ditto.
1929         (KJS::GreaterEqNode::streamTo): Ditto.
1930         (KJS::InstanceOfNode::streamTo): Ditto.
1931         (KJS::InNode::streamTo): Ditto.
1932         (KJS::EqualNode::streamTo): Ditto.
1933         (KJS::NotEqualNode::streamTo): Ditto.
1934         (KJS::StrictEqualNode::streamTo): Ditto.
1935         (KJS::NotStrictEqualNode::streamTo): Ditto.
1936         (KJS::BitAndNode::streamTo): Ditto.
1937         (KJS::BitXOrNode::streamTo): Ditto.
1938         (KJS::BitOrNode::streamTo): Ditto.
1939         (KJS::LogicalAndNode::streamTo): Ditto.
1940         (KJS::LogicalOrNode::streamTo): Ditto.
1941         (KJS::ConditionalNode::streamTo): Ditto.
1942         (KJS::AssignResolveNode::streamTo): Use PrecAssignment for the right side.
1943         (KJS::AssignBracketNode::streamTo): Use PrecCall for the expression before
1944         the bracket and PrecAssignment for the right side.
1945         (KJS::AssignDotNode::streamTo): Ditto.
1946         (KJS::AssignErrorNode::streamTo): Use PrecLeftHandSide for the left side
1947         and PrecAssignment for the right side.
1948         (KJS::CommaNode::streamTo): Use PrecAssignment for both expressions.
1949         (KJS::AssignExprNode::streamTo): Use PrecAssignment.
1950
1951 2007-10-28  Kevin Ollivier  <kevino@theolliviers.com>
1952
1953         Define wx port and set wx port USE options.
1954
1955         Reviewed by Adam Roben.
1956
1957         * wtf/Platform.h:
1958
1959 2007-10-28  Mark Rowe  <mrowe@apple.com>
1960
1961         We don't include "config.h" in headers.
1962
1963         * bindings/jni/jni_instance.h:
1964         * kjs/regexp.h:
1965         * wtf/TCPageMap.h:
1966         * wtf/TCSpinLock.h:
1967
1968 2007-10-28  Maciej Stachowiak  <mjs@apple.com>
1969
1970         Rubber stamped by Mark.
1971         
1972         - avoid using non-portable SIZE_T_MAX in favor of std::numeric_limits
1973
1974         * kjs/SymbolTable.h:
1975         (KJS::SymbolTableIndexHashTraits::emptyValue):
1976         * kjs/function.cpp:
1977         (KJS::ActivationImp::getOwnPropertySlot):
1978         (KJS::ActivationImp::put):
1979
1980 2007-10-28  Maciej Stachowiak  <mjs@apple.com>
1981
1982         Reviewed by Eric.
1983         
1984         - switch SymbolTable to be a HashMap instead of a PropertyMap for 3% SunSpider speedup
1985
1986         * kjs/SymbolTable.h:
1987         (KJS::IdentifierRepHash::hash): Special hash function for identifier reps.
1988         (KJS::IdentifierRepHash::equal): ditto
1989         (KJS::SymbolTableIndexHashTraits::emptyValue): Special HashTraits for the index value.
1990         (KJS::SymbolTable): change to a typedef for a HashMap.
1991         * kjs/function.cpp:
1992         (KJS::ActivationImp::getOwnPropertySlot): Adjusted for new SymbolTable API.
1993         (KJS::ActivationImp::deleteProperty): ditto
1994         (KJS::ActivationImp::put): ditto
1995
1996         * kjs/nodes.cpp:
1997         (KJS::FunctionBodyNode::initializesymbolTable): Adjusted, since
1998         you now have to store a UString::rep, not an identifier.
1999
2000 2007-10-27  Maciej Stachowiak  <mjs@apple.com>
2001
2002         Reviewed by Oliver.
2003         
2004         - numerous HashTable performance improvements
2005         
2006         This does not quite add up to a measurable win on SunSpider, but it allows a
2007         follow-on > 3% improvement and probably helps WebCore too.
2008         
2009         I made the following improvements, among others:
2010         
2011         - Made HashFunctions note whether it is ok to compare a real value with the equal() function
2012         to the empty or deleted value, and used this to optimize the comparisons done in hash lookup.
2013         
2014         - Specialized lookup so it doesn't have to do so many extra branches and build so many extra
2015         std::pairs for cases that don't need them. There are now four versions, one for read-only access,
2016         two for writing, and one folded directly into add() (these all were improvments).
2017         
2018         - Made HashMap::get() use lookup() directly instead of find() to avoid having to build iterators.
2019         
2020         - Made a special constructor for iterators that knows it points to
2021         a valid filled cell and so skips updating itself.
2022
2023         - Reordered memory accesses in the various lookup functions for better code generation
2024         
2025         - Made simple translators avoid passing a hash code around
2026         
2027         - Other minor tweaks
2028         
2029         * wtf/HashTable.h:
2030         (WTF::):
2031         (WTF::HashTableConstIterator::HashTableConstIterator):
2032         (WTF::HashTableIterator::HashTableIterator):
2033         (WTF::IdentityHashTranslator::translate):
2034         (WTF::HashTable::end):
2035         (WTF::HashTable::lookup):
2036         (WTF::HashTable::lookupForWriting):
2037         (WTF::HashTable::makeKnownGoodIterator):
2038         (WTF::HashTable::makeKnownGoodConstIterator):
2039         (WTF::::lookup):
2040         (WTF::::lookupForWriting):
2041         (WTF::::fullLookupForWriting):
2042         (WTF::::add):
2043         (WTF::::addPassingHashCode):
2044         (WTF::::reinsert):
2045         (WTF::::find):
2046         (WTF::::contains):
2047         * kjs/identifier.cpp:
2048         (WTF::):
2049         * wtf/HashFunctions.h:
2050         (WTF::):
2051         * wtf/HashMap.h:
2052         (WTF::):
2053         (WTF::::get):
2054         * wtf/HashSet.h:
2055         (WTF::):
2056         (WTF::::add):
2057         * wtf/ListHashSet.h:
2058         (WTF::ListHashSetTranslator::translate):
2059
2060 2007-10-27  Darin Adler  <darin@apple.com>
2061
2062         Reviewed by Eric.
2063
2064         - fix ASCIICType.h for some Windows compiles
2065
2066         * wtf/ASCIICType.h: Check the compiler, not the OS, since it's the
2067         compiler/library that has the wchar_t that is just a typedef.
2068
2069 2007-10-27  Kevin McCullough  <kmccullough@apple.com>
2070
2071         - BuildFix
2072         - Forgot to change the build step when I changed the filename.
2073
2074         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
2075
2076 2007-10-27  Geoffrey Garen  <ggaren@apple.com>
2077
2078         Reviewed by Darin Adler.
2079         
2080         Fixed the rest of "ASSERTION FAILED: _hash in KJS::UString::Rep::
2081         computedHash()"
2082         http://bugs.webkit.org/show_bug.cgi?id=15718
2083
2084         * kjs/identifier.cpp: Fixed more cases where an Identifier didn't get a 
2085         hash value. Also changed O(n) strlen to O(1) check for empty string.
2086         (KJS::Identifier::add):
2087
2088         * kjs/ustring.cpp: Changed O(n) strlens to O(1) checks for empty string.
2089         (KJS::UString::UString):
2090         (KJS::UString::operator=):
2091
2092 2007-10-27  Darin Adler  <darin@apple.com>
2093
2094         Reviewed by Eric.
2095
2096         - fix pow on Windows
2097
2098         * wtf/MathExtras.h: (wtf_pow): Add a special case for MSVC, which has
2099         a "pow" function that does not properly handle the case where arg1 is
2100         NaN and arg2 is 0.
2101
2102         * kjs/math_object.cpp: (MathFuncImp::callAsFunction): Don't explicity
2103         specify "::pow" -- just "pow" is fine.
2104
2105 2007-10-27  Darin Adler  <darin@apple.com>
2106
2107         Reviewed by Maciej.
2108
2109         - http://bugs.webkit.org/show_bug.cgi?id=15711
2110           force JSImmediate to be inlined for roughly 1.2% SunSpider speedup
2111
2112         * kjs/JSImmediate.h: Put ALWAYS_INLINE on everything.
2113
2114         * kjs/object.h: Removed redundant includes.
2115         * kjs/value.h: Ditto.
2116
2117 2007-10-27  Maciej Stachowiak  <mjs@apple.com>
2118
2119         Reviewed by Mark.
2120         
2121         - fixed "ASSERTION FAILED: _hash in KJS::UString::Rep::computedHash()"
2122         http://bugs.webkit.org/show_bug.cgi?id=15718
2123
2124         * kjs/identifier.cpp:
2125         (KJS::Identifier::addSlowCase): Ensure that empty Identifiers have a hash computed,
2126         now that we count on all Identifiers already having one.
2127
2128 2007-10-27  Mark Rowe  <mrowe@apple.com>
2129
2130         Silence a warning.
2131
2132         * kjs/SymbolTable.h:
2133
2134 2007-10-27  Mark Rowe  <mrowe@apple.com>
2135
2136         Gtk build fix.
2137
2138         * kjs/function.h:
2139
2140 2007-10-26  Kevin McCullough  <kmccullough@apple.com>
2141
2142        Rubber stamp by Adam. 
2143
2144         - Renamed JSStringRefCOM to JSStringRefBSTR since it he only thing the
2145         files contain are functions that operate on BSTRs.
2146
2147         * API/JSStringRefBSTR.cpp: Copied from API/JSStringRefCOM.cpp.
2148         * API/JSStringRefBSTR.h: Copied from API/JSStringRefCOM.h.
2149         * API/JSStringRefCOM.cpp: Removed.
2150         * API/JSStringRefCOM.h: Removed.
2151         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
2152
2153 2007-10-26  Kevin McCullough  <kmccullough@apple.com>
2154
2155         Reviewed by Adam.
2156
2157         - Made JSStringCreateWithBSTR capable of handling null BSTRs.
2158
2159         * API/JSStringRefCOM.cpp:
2160         (JSStringCreateWithBSTR):
2161
2162 2007-10-26  Sam Weinig  <sam@webkit.org>
2163
2164         Windows build fix.
2165
2166         * kjs/SymbolTable.h: Add header gaurd.
2167         * kjs/nodes.h: #include "SymbolTable.h"
2168
2169 2007-10-26  Geoffrey Garen  <ggaren@apple.com>
2170
2171         Suggested by Anders Carlsson.
2172         
2173         Fixed tyop.
2174
2175         * kjs/function.cpp:
2176         (KJS::ActivationImp::getOwnPropertySlot):
2177
2178 2007-10-26  Geoffrey Garen  <ggaren@apple.com>
2179
2180         Suggested by Darin Adler.
2181         
2182         Use computedHash(), which is safer than just directly accessing _hash.
2183
2184         * kjs/lookup.cpp:
2185         (KJS::Lookup::findEntry):
2186         (KJS::Lookup::find):
2187
2188 2007-10-26  Geoffrey Garen  <ggaren@apple.com>
2189
2190         Build fix: svn add SymbolTable.h
2191
2192         * kjs/SymbolTable.h: Added.
2193         (KJS::SymbolTable::set):
2194         (KJS::SymbolTable::get):
2195
2196 2007-10-26  Geoffrey Garen  <ggaren@apple.com>
2197
2198         Build fix: export SymbolTable.h to WebCore.
2199
2200         * JavaScriptCore.xcodeproj/project.pbxproj:
2201
2202 2007-10-26  Geoffrey Garen  <ggaren@apple.com>
2203
2204         Comment tweak suggested by Maciej.
2205
2206         * kjs/function.cpp:
2207         (KJS::ActivationImp::getOwnPropertySlot):
2208
2209 2007-10-26  Geoffrey Garen  <ggaren@apple.com>
2210
2211         Reviewed by Maciej Stachowiak.
2212         
2213         Tweaked property maps to remove 2 branches. 2.5% speedup on SunSpider.
2214
2215         * kjs/property_map.cpp: Use a special no branch accessor to the UString's
2216         hash value. Also, return immediately instead of branching to the end
2217         of the loop if the value is not found.
2218         (KJS::PropertyMap::get):
2219         (KJS::PropertyMap::getLocation):
2220         (KJS::PropertyMap::put):
2221         (KJS::PropertyMap::insert):
2222         (KJS::PropertyMap::remove):
2223         (KJS::PropertyMap::checkConsistency):
2224
2225         * kjs/ustring.h:
2226         (KJS::UString::Rep::computedHash): Special no branch accessor to the
2227         UString's hash value. Used when the caller knows that the hash value
2228         has already been computed. (For example, if the caller got the UString
2229         from an Identifier.)
2230
2231 2007-10-26  Geoffrey Garen  <ggaren@apple.com>
2232
2233         Reviewed by Maciej Stachowiak.
2234         
2235         Switched ActivationImp to using a symbol table. For now, though, all
2236         clients take the slow path.
2237         
2238         Net .6% speedup on SunSpider.
2239         
2240         Slowdowns:
2241             - ActivationImp now mallocs in its constructor
2242             - Local variable hits use an extra level of indirection to retrieve 
2243             data
2244             - Local variable misses do two lookups
2245
2246         Speedups:
2247             - Fast initialization of local variables upon function entry
2248
2249         * JavaScriptCore.xcodeproj/project.pbxproj: Added SymbolTable.h
2250         
2251         * kjs/function.cpp:
2252         (KJS::ActivationImp::ActivationImp): Malloc a private structure to hold
2253         data that won't fit in a JSCell.
2254         (KJS::ActivationImp::argumentsGetter): Use slow symbol table path for 
2255         lookup.
2256         (KJS::ActivationImp::getOwnPropertySlot): ditto
2257         (KJS::ActivationImp::deleteProperty): ditto
2258         (KJS::ActivationImp::put): ditto
2259         (KJS::ActivationImp::createArgumentsObject): ditto
2260
2261         (KJS::ActivationImp::mark): Call JSObject::mark first so that one of
2262         our properties doesn't try to recursively mark us. (This caused a crash
2263         in earlier testing. Not sure why we haven't run into it before.)
2264
2265         * kjs/nodes.cpp: Functions now build a symbol table the first time 
2266         they're called.
2267         (KJS::VarDeclNode::evaluate):
2268         (KJS::FunctionBodyNode::FunctionBodyNode):
2269         (KJS::FunctionBodyNode::initializeSymbolTable):
2270         (KJS::FunctionBodyNode::processDeclarations):
2271         (KJS::FunctionBodyNode::processDeclarationsForFunctionCode):
2272         (KJS::FunctionBodyNode::processDeclarationsForProgramCode):
2273
2274         * kjs/nodes.h:
2275         (KJS::FunctionBodyNode::symbolTable):
2276
2277         * wtf/Forward.h: Added Vector.
2278
2279 2007-10-26  Kevin McCullough  <kmccullough@apple.com>
2280
2281         - Corrected function name mistake in this changelog.
2282
2283 2007-10-26  Kevin McCullough  <kmccullough@apple.com>
2284         Reviewed by Sam and Steve.
2285
2286         - Added convenience methods for converting between BSTR and JSStringRefs
2287
2288         * API/JSStringRefCOM.cpp: Added.
2289         (JSStringCreateWithBSTR):
2290         (JSStringCopyBSTR):
2291         * API/JSStringRefCOM.h: Added.
2292         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
2293
2294 2007-10-26  Mark Rowe  <mrowe@apple.com>
2295
2296         Windows build fix.
2297
2298         * kjs/collector.cpp:
2299         (KJS::Collector::collect):
2300
2301 2007-10-26  Oliver Hunt  <oliver@apple.com>
2302
2303         Reviewed by Maciej.
2304
2305         Make the JSC GC use a separate heap for JSNumbers to get a 0.7-1.4% progression in SunSpider.
2306
2307         * kjs/CollectorHeapIntrospector.cpp:
2308         (KJS::CollectorHeapIntrospector::init):
2309         (KJS::CollectorHeapIntrospector::enumerate):
2310         * kjs/CollectorHeapIntrospector.h:
2311         * kjs/collector.cpp:
2312         (KJS::Collector::recordExtraCost):
2313         (KJS::Collector::heapAllocate):
2314         (KJS::Collector::allocate):
2315         (KJS::Collector::allocateNumber):
2316         (KJS::Collector::registerThread):
2317         (KJS::Collector::markStackObjectsConservatively):
2318         (KJS::Collector::markMainThreadOnlyObjects):
2319         (KJS::Collector::sweep):
2320         (KJS::Collector::collect):
2321         * kjs/collector.h:
2322         * kjs/internal.h:
2323         (KJS::NumberImp::operator new):
2324           Force numbers to be allocated in the secondary heap.
2325
2326 2007-10-26  Maciej Stachowiak  <mjs@apple.com>
2327
2328         Reviewed by Oliver.
2329         
2330         - encourage GCC a little harder to inline a few hot functions for 1.5% improvement on SunSpider.
2331
2332         * kjs/value.h:
2333         (KJS::JSValue::getUInt32):
2334         (KJS::JSValue::getTruncatedInt32):
2335         (KJS::JSValue::toNumber):
2336         * wtf/PassRefPtr.h:
2337         (WTF::PassRefPtr::~PassRefPtr):
2338         * wtf/RefPtr.h:
2339         (WTF::RefPtr::operator->):
2340
2341 2007-10-26  Mark Rowe  <mrowe@apple.com>
2342
2343         Gtk build fix.
2344
2345         * kjs/ExecState.h:
2346
2347 2007-10-26  Maciej Stachowiak  <mjs@apple.com>
2348
2349         Reviewed by Mark.
2350
2351         - Merge Context class fully into ExecState, since they are always created and used together.
2352
2353         No measurable performance impact but this is a useful cleanup.
2354
2355         * JavaScriptCore.pri:
2356         * kjs/ExecState.cpp:
2357         (KJS::ExecState::ExecState):
2358         (KJS::ExecState::~ExecState):
2359         (KJS::ExecState::mark):
2360         (KJS::ExecState::lexicalInterpreter):
2361         * kjs/ExecState.h:
2362         (KJS::ExecState::dynamicInterpreter):
2363         (KJS::ExecState::setException):
2364         (KJS::ExecState::clearException):
2365         (KJS::ExecState::exception):
2366         (KJS::ExecState::exceptionSlot):
2367         (KJS::ExecState::hadException):
2368         (KJS::ExecState::scopeChain):
2369         (KJS::ExecState::callingExecState):
2370         (KJS::ExecState::propertyNames):
2371         * kjs/collector.cpp:
2372         (KJS::Collector::reportOutOfMemoryToAllInterpreters):
2373         * kjs/function.cpp:
2374         (KJS::FunctionImp::callAsFunction):
2375         (KJS::FunctionImp::argumentsGetter):
2376         (KJS::FunctionImp::callerGetter):
2377         (KJS::GlobalFuncImp::callAsFunction):
2378         * kjs/interpreter.cpp:
2379         (KJS::Interpreter::Interpreter):
2380         (KJS::Interpreter::init):
2381         (KJS::Interpreter::evaluate):
2382         (KJS::Interpreter::mark):
2383         * kjs/interpreter.h:
2384         (KJS::Interpreter::setCurrentExec):
2385         (KJS::Interpreter::currentExec):
2386         * kjs/nodes.cpp:
2387         (KJS::currentSourceId):
2388         (KJS::currentSourceURL):
2389         (KJS::ThisNode::evaluate):
2390         (KJS::ResolveNode::evaluate):
2391         (KJS::FunctionCallResolveNode::evaluate):
2392         (KJS::PostfixResolveNode::evaluate):
2393         (KJS::DeleteResolveNode::evaluate):
2394         (KJS::TypeOfResolveNode::evaluate):
2395         (KJS::PrefixResolveNode::evaluate):
2396         (KJS::AssignResolveNode::evaluate):
2397         (KJS::VarDeclNode::evaluate):
2398         (KJS::DoWhileNode::execute):
2399         (KJS::WhileNode::execute):
2400         (KJS::ForNode::execute):
2401         (KJS::ForInNode::execute):
2402         (KJS::ContinueNode::execute):
2403         (KJS::BreakNode::execute):
2404         (KJS::ReturnNode::execute):
2405         (KJS::WithNode::execute):
2406         (KJS::SwitchNode::execute):
2407         (KJS::LabelNode::execute):
2408         (KJS::TryNode::execute):
2409         (KJS::FunctionBodyNode::processDeclarationsFunctionCode):
2410         (KJS::FunctionBodyNode::processDeclarationsProgramCode):
2411         (KJS::FunctionBodyNode::processDeclarations):
2412         (KJS::FuncDeclNode::makeFunction):
2413         (KJS::FuncExprNode::evaluate):
2414
2415 2007-10-26  Mark Rowe  <mrowe@apple.com>
2416
2417         Windows build fix.
2418
2419         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
2420
2421 2007-10-26  Mark Rowe  <mrowe@apple.com>
2422
2423         Gtk build fix.
2424
2425         * JavaScriptCore.pri:
2426         * kjs/ExecState.cpp:
2427
2428 2007-10-26  Maciej Stachowiak  <mjs@apple.com>
2429
2430         Reviewed by Oliver.
2431         
2432         - moved Context class into ExecState.{h,cpp} in preparation for merging 
2433         ExecState and Context classes.
2434
2435         * kjs/ExecState.h: Moved CodeType enum and Context class here in
2436         preparation for merging ExecState and Context.
2437         * kjs/ExecState.cpp: Moved Context class here from Context.cpp.
2438         (KJS::Context::Context):
2439         (KJS::Context::~Context):
2440         (KJS::Context::mark):
2441         * kjs/context.h: Removed.
2442         * kjs/Context.cpp: Removed.
2443         * kjs/function.h: Removed CodeType enum.
2444         * kjs/LabelStack.h: Added. Pulled LabelStack class out of internal.h.
2445         * kjs/internal.h: Removed LabelStack.
2446         * JavaScriptCore.xcodeproj/project.pbxproj: Added new file, removed ones that are gone.
2447         * kjs/collector.cpp: Fixed includes.
2448         * kjs/function.cpp: ditto
2449         * kjs/internal.cpp: ditto
2450         * kjs/interpreter.cpp: ditto
2451         * kjs/lookup.h: ditto
2452         * kjs/nodes.cpp: ditto
2453
2454 2007-10-26  Mark Rowe  <mrowe@apple.com>
2455
2456         Windows build fix.
2457
2458         * kjs/string_object.cpp:
2459         (KJS::StringObjectFuncImp::callAsFunction):
2460
2461 2007-10-25  Darin Adler  <darin@apple.com>
2462
2463         Reviewed by Maciej.
2464
2465         - http://bugs.webkit.org/show_bug.cgi?id=15703
2466           fix numeric functions -- improve correctness and speed
2467
2468         Gives about 1% gain on SunSpider.
2469
2470         * kjs/value.h: Added toIntegerPreserveNan, removed toUInt16.
2471         (KJS::JSValue::toInt32): Changed to call getTruncatedInt32 in a way that works
2472         with both immediate and number values.
2473         (KJS::JSValue::toUInt32): Ditto.
2474         * kjs/value.cpp:
2475         (KJS::JSValue::toInteger): Moved the logic from roundValue here, with a couple
2476         differences. One is that it now correctly returns 0 for NaN, and another is that
2477         there's no special case for 0 or infinity, since the general case already handles
2478         those correctly.
2479         (KJS::JSValue::toIntegerPreserveNaN): Added. Like toInteger, but without the
2480         check for NaN.
2481         (KJS::JSValue::toInt32SlowCase): Call toNumber instead of roundValue. The
2482         truncation done by the typecast already does the necessary truncation that
2483         roundValue was doing.
2484         (KJS::JSValue::toUInt32SlowCase): Ditto.
2485         (KJS::JSValue::toUInt16): Removed.
2486
2487         * kjs/internal.h: Removed roundValue.
2488         * kjs/internal.cpp: Ditto.
2489
2490         * kjs/array_object.cpp: (KJS::ArrayProtoFunc::callAsFunction): Remove unneeded
2491         code to handle NaN in Array.slice; toInteger now never returns NaN as specified.
2492
2493         * kjs/date_object.cpp:
2494         (KJS::fillStructuresUsingTimeArgs): Replaced call to roundValue with a call to
2495         toNumber as specified.
2496         (KJS::DateProtoFunc::callAsFunction): In SetTime case, replaced call to roundValue
2497         with a call to toNumber and timeClip as specified.
2498         (KJS::DateObjectImp::construct): Removed unnecessary checks of numArgs in cases
2499         where the default behavior of toInt32 (returning 0) was already correct. Replaced
2500         call to roundValue with a call to toNumber as specified.
2501         (KJS::DateObjectFuncImp::callAsFunction): Ditto.
2502
2503         * kjs/math_object.cpp: (MathFuncImp::callAsFunction): Removed unnecessary special
2504         cases for the pow function that the library already handles correctly.
2505
2506         * kjs/number_object.cpp: (NumberProtoFunc::callAsFunction): Changed ToString to
2507         call toIntegerPreserveNaN, so we can continue to handle the NaN case differently.
2508         The real toInteger now returns 0 for NaN. Took out unneeded special case in
2509         ToFixed for undefined; was only needed because our toInteger was wrong. Same
2510         thing in ToExponential. Changed ToPrecision to call toIntegerPreserveNaN.
2511
2512         * kjs/string_object.cpp:
2513         (KJS::StringProtoFunc::callAsFunction): Took out CharAt and CharCodeAt special
2514         cases for undefined that were only needed because toInteger was wrong. Same in
2515         IndexOf, and was able to remove some special cases. In LastIndexOf, used
2516         toIntegerPreserveNaN, but was able to remove some special cases there too.
2517         Changed Substr implementation to preserve correct behavior with the change
2518         to toInteger and match the specification. Also made sure we weren't converting
2519         an out of range double to an int.
2520         (KJS::StringObjectFuncImp::callAsFunction): Changed constructor to just use
2521         toUInt32, because truncating toUInt32 to 16 bits is the same thing and there's
2522         no reason to have toUInt16 as a second, less-optimized function that's only
2523         called at this one call site.
2524
2525         * wtf/MathExtras.h: Added trunc function for Windows.
2526
2527 2007-10-25  Geoffrey Garen  <ggaren@apple.com>
2528
2529         Reviewed by Maciej Stachowiak.
2530         
2531         Tweaked the inner hashtable lookup loop to remove a branch in the "not 
2532         found" case. .5% speedup on SunSpider.
2533
2534         * JavaScriptCore.xcodeproj/project.pbxproj:
2535         * wtf/HashTable.h:
2536         (WTF::::lookup):
2537
2538 2007-10-25  Maciej Stachowiak  <mjs@apple.com>
2539
2540         Reviewed by Oliver.
2541
2542         - fold together toPrimitive() and toNumber() conversions for 0.5% gain on SunSpider
2543
2544         * kjs/nodes.cpp:
2545         (KJS::SubNode::evaluate): Subtract directly, since toPrimitive() is not
2546         adding any value over toNumber() here.
2547         (KJS::valueForReadModifyAssignment): Ditto.
2548         (KJS::lessThan): Use new getPrimitiveNumber() method to avoid some virtual calls
2549         and branches.
2550         (KJS::lessThanEq): Ditto.
2551         * JavaScriptCore.exp: Export new functions as needed.
2552         * kjs/value.h:
2553         (KJS::JSValue::toPrimitive): Fixed formatting.
2554         (KJS::JSValue::getPrimitiveNumber): New method - this simultaneously converts
2555         to number and tells you whether a toPrimitive() conversion with a Number hint
2556         would have given a string.
2557         * kjs/internal.cpp:
2558         (KJS::StringImp::getPrimitiveNumber): Implemented. 
2559         (KJS::NumberImp::getPrimitiveNumber): ditto
2560         (KJS::GetterSetterImp::getPrimitiveNumber): ditto
2561         (KJS::StringImp::toPrimitive): Fixed formatting.
2562         (KJS::NumberImp::toPrimitive): ditto
2563         (KJS::GetterSetterImp::toPrimitive): ditto
2564         * kjs/internal.h:
2565         * kjs/object.cpp:
2566         (KJS::JSObject::getPrimitiveNumber): Implemented.
2567         * kjs/object.h:
2568
2569 2007-10-25  Sam Weinig  <sam@webkit.org>
2570
2571         Reviewed by Adam Roben.
2572
2573         Remove JSStringRefCFHack from windows as it is no longer needed.
2574
2575         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
2576
2577 2007-10-25  Geoffrey Garen  <ggaren@apple.com>
2578
2579         Reviewed by Oliver Hunt.
2580         
2581         Rolled out my last patch. It turns out that I needed 2 words, not 1,
2582         so it didn't help.
2583
2584 2007-10-25  Geoffrey Garen  <ggaren@apple.com>
2585
2586         Reviewed by Oliver Hunt.
2587         
2588         Fixed http://bugs.webkit.org/show_bug.cgi?id=15694
2589         Shrink the size of an activation object by 1 word
2590         
2591         This is in preparation for adding a symbol table to the activation 
2592         object.
2593         
2594         The basic strategy here is to rely on the mutual exclusion between
2595         the arguments object pointer and the function pointer (you only need
2596         the latter in order to create the former), and store them in the same 
2597         place. The LazyArgumentsObject class encapsulates this strategy.
2598         
2599         Also inlined the ArgumentsImp constructor, for good measure.
2600         
2601         SunSpider reports no regression. Regression tests pass.
2602
2603         * JavaScriptCore.xcodeproj/project.pbxproj:
2604         * kjs/Context.cpp:
2605         (KJS::Context::~Context):
2606         * kjs/function.cpp:
2607         (KJS::ActivationImp::LazyArgumentsObject::createArgumentsObject):
2608         (KJS::ActivationImp::LazyArgumentsObject::mark):
2609         (KJS::):
2610         (KJS::ActivationImp::argumentsGetter):
2611         (KJS::ActivationImp::mark):
2612         * kjs/function.h:
2613         (KJS::ActivationImp::LazyArgumentsObject::LazyArgumentsObject):
2614         (KJS::ActivationImp::LazyArgumentsObject::getOrCreate):
2615         (KJS::ActivationImp::LazyArgumentsObject::resetArguments):
2616         (KJS::ActivationImp::LazyArgumentsObject::setArgumentsObject):
2617         (KJS::ActivationImp::LazyArgumentsObject::argumentsObject):
2618         (KJS::ActivationImp::LazyArgumentsObject::setFunction):
2619         (KJS::ActivationImp::LazyArgumentsObject::function):
2620         (KJS::ActivationImp::LazyArgumentsObject::createdArgumentsObject):
2621         (KJS::ActivationImp::LazyArgumentsObject::):
2622         (KJS::ActivationImp::ActivationImp::ActivationImp):
2623         (KJS::ActivationImp::resetArguments):
2624
2625 2007-10-25  Adam Roben  <aroben@apple.com>
2626
2627         Change JavaScriptCore.vcproj to use DerivedSources.make
2628
2629         We were trying to emulate the logic of make in
2630         build-generated-files.sh, but we got it wrong. We now use a
2631         build-generated-files very much like the one that WebCore uses to
2632         invoke make.
2633
2634         We also now only have a Debug configuration of dftables which we build
2635         even when doing a Release build of JavaScriptCore. dftables also no
2636         longer has the "_debug" name suffix.
2637
2638         Changes mostly made by Darin, reviewed by me.
2639
2640         * DerivedSources.make: Add a variable to set the extension used for
2641         the dftables executable.
2642         * JavaScriptCore.vcproj/JavaScriptCore.sln: Updated to use Debug
2643         dftables in Release configurations.
2644         * JavaScriptCore.vcproj/JavaScriptCoreSubmit.sln: Ditto.
2645         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
2646            - Updated include path to point to the new location of the derived
2647              sources.
2648            - Modified pre-build event to pass the right arguments to
2649              build-generated-files.sh and not call dftables directly.
2650            - Added the derived source files to the project.
2651            - Removed grammarWrapper.cpp, which isn't needed now that we're
2652              compiling grammar.cpp directly.
2653         * JavaScriptCore.vcproj/JavaScriptCore/build-generated-files.sh:
2654         Slightly modified from the WebCore version.
2655         * JavaScriptCore.vcproj/JavaScriptCore/grammarWrapper.cpp: Removed.
2656         * JavaScriptCore.vcproj/dftables/dftables.vcproj:
2657             - Changed the output location to match Mac.
2658             - Removed the Release configuration.
2659             - Removed the _debug suffix.
2660
2661 2007-10-25  Geoffrey Garen  <ggaren@apple.com>
2662
2663         Reviewed by Eric Seidel.
2664         
2665         Slightly elaborated the differences between declaration procesing in 
2666         Function Code and Program Code.
2667         
2668         .3% speedup on SunSpider.
2669
2670         * kjs/nodes.cpp:
2671         (KJS::FunctionBodyNode::processDeclarationsFunctionCode): 
2672         (KJS::FunctionBodyNode::processDeclarationsProgramCode): Store a 
2673         minimum set of attributes instead of recomputing all the time. Also,
2674         ignore m_parameters, since programs don't have arguments.
2675
2676 2007-10-25  Eric Seidel  <eric@webkit.org>
2677
2678         Reviewed by Maciej.
2679         
2680         More preparation work before adding long-running mode to testkjs.
2681
2682         * kjs/testkjs.cpp:
2683         (TestFunctionImp::callAsFunction):
2684         (prettyPrintScript):
2685         (runWithScripts):
2686         (parseArguments):
2687         (kjsmain):
2688         (fillBufferWithContentsOfFile):
2689
2690 2007-10-25  Eric Seidel  <eric@webkit.org>
2691
2692         Reviewed by Maciej.
2693         
2694         Bring testkjs code out of the dark ages in preparation for more
2695         radical improvements (like long-running testing support!)
2696
2697         * kjs/testkjs.cpp:
2698         (TestFunctionImp::callAsFunction):
2699         (setupInterpreter):
2700         (doIt):
2701         (fillBufferWithContentsOfFile):
2702
2703 2007-10-25  Geoffrey Garen  <ggaren@apple.com>
2704
2705         Reviewed by Maciej Stachowiak.
2706         
2707         Make a fast path for declaration processing inside Function Code.
2708         
2709         Lifted declaration processing code up from individual declaration nodes
2710         and into processDeclarations.
2711         
2712         Broke out processDeclarations into two cases, depending on the type of 
2713         code. This eliminates 2 branches, and facilitates more radical 
2714         divergeance in the future.
2715         
2716         2.5% SunSpider speedup.
2717
2718         * JavaScriptCore.xcodeproj/project.pbxproj:
2719         * kjs/nodes.cpp:
2720         (KJS::FunctionBodyNode::initializeDeclarationStacks):
2721         (KJS::FunctionBodyNode::processDeclarationsFunctionCode):
2722         (KJS::FunctionBodyNode::processDeclarationsProgramCode):
2723         (KJS::FunctionBodyNode::execute):
2724         (KJS::FuncDeclNode::makeFunction):
2725         * kjs/nodes.h:
2726         (KJS::):
2727
2728 2007-10-25  Maciej Stachowiak  <mjs@apple.com>
2729
2730         Reviewed by Adam.
2731         
2732         - add header includes needed on platforms that don't use AllInOneFile.cpp
2733
2734         * API/JSCallbackObject.cpp:
2735         * kjs/Context.cpp:
2736         * kjs/ExecState.cpp:
2737         * kjs/array_instance.cpp:
2738         * kjs/function_object.cpp:
2739         * kjs/interpreter.cpp:
2740         * kjs/nodes.cpp:
2741
2742 2007-10-25  Eric Seidel  <eric@webkit.org>
2743
2744         Reviewed by Geoff.
2745
2746         * JavaScriptCore.xcodeproj/project.pbxproj: re-mark JSGlobalObject.h as private
2747
2748 2007-10-25  Geoffrey Garen  <ggaren@apple.com>
2749
2750         Reviewed by Maciej Stachowiak.
2751         
2752         Fixed http://bugs.webkit.org/show_bug.cgi?id=15683
2753         Re-order declaration initialization to avoid calling hasProperty inside
2754         VarDeclNode::processDeclaration
2755         
2756         .7% speedup on SunSpider.
2757
2758         * kjs/function.h:
2759         * kjs/function.cpp: Merged parameter processing into FunctionBodyNode's
2760         other processing of declared symbols, so the order of execution could 
2761         change.
2762
2763         * kjs/nodes.cpp:
2764         (KJS::VarDeclNode::getDeclarations): Added special case for the 
2765         "arguments" property name, explained in the comment.
2766
2767         (KJS::VarDeclNode::processDeclaration): Removed call to hasProperty
2768         in the case of function code, since we know the declared symbol
2769         management will resolve conflicts between symbols. Yay!
2770
2771         (KJS::VarDeclListNode::getDeclarations): Now that VarDeclNode's 
2772         implementation of getDeclarations is non-trivial, we can't take a 
2773         short-cut here any longer -- we need to put the VarDecl node on the 
2774         stack so it gets processed normally.
2775
2776         (KJS::FunctionBodyNode::processDeclarations): Changed the order of 
2777         processing to enforce mutual exclusion rules.
2778
2779         * kjs/nodes.h:
2780         (KJS::DeclarationStacks::DeclarationStacks): Structure includes an 
2781         ExecState now, for fast access to the "arguments" property name.
2782
2783 2007-10-24  Eric Seidel  <eric@webkit.org>
2784
2785         Reviewed by Maciej.
2786         
2787         Add a JSGlobalObject class and remove the InterpreterMap
2788         http://bugs.webkit.org/show_bug.cgi?id=15681
2789         
2790         This required making JSCallbackObject a template class to allow for
2791         JSGlobalObjects with JSCallbackObject functionality.
2792         
2793         SunSpider claims this was a 0.5% speedup.
2794
2795         * API/JSCallbackObject.cpp:
2796         (KJS::):
2797         * API/JSCallbackObject.h:
2798         * API/JSCallbackObjectFunctions.h: Copied from API/JSCallbackObject.cpp.
2799         (KJS::::JSCallbackObject):
2800         (KJS::::init):
2801         (KJS::::~JSCallbackObject):
2802         (KJS::::initializeIfNeeded):
2803         (KJS::::className):
2804         (KJS::::getOwnPropertySlot):
2805         (KJS::::put):
2806         (KJS::::deleteProperty):
2807         (KJS::::implementsConstruct):
2808         (KJS::::construct):
2809         (KJS::::implementsHasInstance):
2810         (KJS::::hasInstance):
2811         (KJS::::implementsCall):
2812         (KJS::::callAsFunction):
2813         (KJS::::getPropertyNames):
2814         (KJS::::toNumber):
2815         (KJS::::toString):
2816         (KJS::::setPrivate):
2817         (KJS::::getPrivate):
2818         (KJS::::inherits):
2819         (KJS::::cachedValueGetter):
2820         (KJS::::staticValueGetter):
2821         (KJS::::staticFunctionGetter):
2822         (KJS::::callbackGetter):
2823         * API/JSClassRef.cpp:
2824         (OpaqueJSClass::prototype):
2825         * API/JSContextRef.cpp:
2826         (JSGlobalContextCreate):
2827         * API/JSObjectRef.cpp:
2828         (JSObjectMake):
2829         (JSObjectGetPrivate):
2830         (JSObjectSetPrivate):
2831         * API/JSValueRef.cpp:
2832         (JSValueIsObjectOfClass):
2833         * JavaScriptCore.exp:
2834         * JavaScriptCore.xcodeproj/project.pbxproj:
2835         * bindings/c/c_utility.cpp:
2836         (KJS::Bindings::convertValueToNPVariant):
2837         * bindings/jni/jni_jsobject.cpp:
2838         * bindings/objc/objc_utility.mm:
2839         (KJS::Bindings::convertValueToObjcValue):
2840         * kjs/Context.cpp:
2841         (KJS::Context::Context):
2842         * kjs/ExecState.cpp:
2843         (KJS::ExecState::lexicalInterpreter):
2844         * kjs/JSGlobalObject.h: Added.
2845         (KJS::JSGlobalObject::JSGlobalObject):
2846         (KJS::JSGlobalObject::isGlobalObject):
2847         (KJS::JSGlobalObject::interpreter):
2848         (KJS::JSGlobalObject::setInterpreter):
2849         * kjs/array_instance.cpp:
2850         * kjs/context.h:
2851         * kjs/function.cpp:
2852         (KJS::FunctionImp::callAsFunction):
2853         (KJS::GlobalFuncImp::callAsFunction):
2854         * kjs/interpreter.cpp:
2855         (KJS::Interpreter::Interpreter):
2856         (KJS::Interpreter::init):
2857         (KJS::Interpreter::~Interpreter):
2858         (KJS::Interpreter::globalObject):
2859         (KJS::Interpreter::initGlobalObject):
2860         (KJS::Interpreter::evaluate):
2861         * kjs/interpreter.h:
2862         * kjs/lookup.h:
2863         (KJS::cacheGlobalObject):
2864         * kjs/object.h:
2865         (KJS::JSObject::isGlobalObject):
2866         * kjs/testkjs.cpp:
2867
2868 2007-10-24  Eric Seidel  <eric@webkit.org>
2869
2870         Build fix for Gtk, no review.
2871
2872         * kjs/collector.cpp: #include "context.h"
2873
2874 2007-10-24  Eric Seidel  <eric@webkit.org>
2875
2876         Reviewed by Maciej.
2877         
2878         Stop checking isOutOfMemory after every allocation, instead let the collector
2879         notify all ExecStates if we ever hit this rare condition.
2880         
2881         SunSpider claims this was a 2.2% speedup.
2882
2883         * kjs/collector.cpp:
2884         (KJS::Collector::collect):
2885         (KJS::Collector::reportOutOfMemoryToAllInterpreters):
2886         * kjs/collector.h:
2887         * kjs/nodes.cpp:
2888         (KJS::TryNode::execute):
2889
2890 2007-10-24  Mark Rowe  <mrowe@apple.com>
2891
2892         Gtk build fix.
2893
2894         * kjs/identifier.h:  Remove extra qualification.
2895
2896 2007-10-24  Geoffrey Garen  <ggaren@apple.com>
2897
2898         Reviewed by Sam Weinig.
2899         
2900         Disable ALWAYS_INLINE in debug builds, since it drives the debugger
2901         crazy.
2902
2903         * wtf/AlwaysInline.h:
2904
2905 2007-10-24  Geoffrey Garen  <ggaren@apple.com>
2906
2907         Reviewed by Sam Weinig.
2908         
2909         Inlined the fast path for creating an Identifier from an Identifier. 
2910         
2911         This is a .4% speedup on SunSpider overall, but as big as a 2.5% 
2912         speedup on certain individual tests. 65% of the Identifiers creating 
2913         by SunSpider are already Identifiers.
2914         
2915         (The main reason I'm making this change is that it resolves a large
2916         regression in a patch I haven't checked in yet.)
2917
2918         * JavaScriptCore.exp:
2919         * kjs/identifier.cpp:
2920         (KJS::Identifier::addSlowCase):
2921         * kjs/identifier.h:
2922         (KJS::Identifier::Identifier::add):
2923
2924 2007-10-24  Lars Knoll  <lars@trolltech.com>
2925
2926         Reviewed by Simon.
2927
2928         some changes to the way JS values are converted to Qt values in the script bindings. Added support for converting JS arrays into QStringList's.
2929
2930         * bindings/qt/qt_instance.cpp:
2931         (KJS::Bindings::QtInstance::invokeMethod):
2932         * bindings/qt/qt_runtime.cpp:
2933         (KJS::Bindings::convertValueToQVariant):
2934         (KJS::Bindings::QtField::setValueToInstance):
2935
2936 2007-10-24  Oliver Hunt  <oliver@apple.com>
2937
2938         Reviewed by Darin.
2939
2940         Remove old relation method, replace with specialised LessThan and lessThenEq functions for a 0.5-0.6% improvement in SunSpider
2941
2942         * kjs/nodes.cpp:
2943         (KJS::lessThan):
2944         (KJS::lessThanEq):
2945         (KJS::LessNode::evaluate):
2946         (KJS::GreaterNode::evaluate):
2947         (KJS::LessEqNode::evaluate):
2948         (KJS::GreaterEqNode::evaluate):
2949         * kjs/operations.cpp:
2950         * kjs/operations.h:
2951
2952 2007-10-24  Eric Seidel  <eric@webkit.org>
2953
2954         Reviewed by darin.
2955
2956         * kjs/nodes.h:
2957         (KJS::ImmediateNumberNode::): Fix ASSERT correctness (and debug build!)
2958
2959 2007-10-24  Darin Adler  <darin@apple.com>
2960
2961         Reviewed by Eric.
2962
2963         * kjs/object.cpp: (KJS::JSObject::defaultValue): Get rid of a little
2964         Identifier ref/deref for what SunSpider claims is a 0.4% speedup.
2965
2966 2007-10-24  Darin Adler  <darin@apple.com>
2967
2968         Reviewed by Maciej.
2969
2970         - separate out the code to create a hash table the first time from the code
2971           to rehash
2972
2973         SunSpider claims this was a 0.7% speedup.
2974
2975         * kjs/property_map.cpp:
2976         (KJS::PropertyMap::expand): Changed to call either createTable or rehash.
2977         (KJS::PropertyMap::createTable): Added. For the case where we had no table.
2978         (KJS::PropertyMap::rehash): Removed code needed only in the case where we
2979         had no table.
2980         * kjs/property_map.h: Added createTable.
2981
2982 2007-10-24  Eric Seidel  <eric@webkit.org>
2983
2984         Reviewed by darin.
2985         
2986         Add ImmediateNumberNode to hold a JSValue* instead of a double for numbers
2987         which can be represented by JSImmediate.
2988         
2989         SunSpider claims this was a 0.6% speedup.
2990
2991         * kjs/grammar.y:
2992         * kjs/nodes.cpp:
2993         (KJS::NumberNode::evaluate):
2994         (KJS::ImmediateNumberNode::evaluate):
2995         * kjs/nodes.h:
2996         (KJS::Node::):
2997         (KJS::ImmediateNumberNode::):
2998         * kjs/nodes2string.cpp:
2999         (ImmediateNumberNode::streamTo):
3000
3001 2007-10-24  Darin Adler  <darin@apple.com>
3002
3003         Reviewed by Maciej.
3004
3005         - http://bugs.webkit.org/show_bug.cgi?id=15657
3006           change static hash tables to use powers of two for speed
3007
3008         Seems to give 0.7% SunSpider speedup.
3009
3010         * kjs/create_hash_table: Updated to generate new format.
3011         * kjs/lookup.cpp:
3012         (KJS::keysMatch): Took out unneeded typecast.
3013         (KJS::findEntry): Updated to expect table type 3 -- changed the printf to a plain old assert.
3014         Replaced the modulus with a bit mask.
3015         (KJS::Lookup::findEntry): Get the hash directly, since we know identifiers already have computed
3016         their hash -- saves a branch.
3017         (KJS::Lookup::find): Ditto.
3018         * kjs/lookup.h: Changed attr from 2-byte value to one-byte value. Replaced hashSize with hashSizeMask.
3019
3020 2007-10-24  Maciej Stachowiak  <mjs@apple.com>
3021
3022         Reviewed by Darin.
3023         
3024         - remove KJS_CHECKEXCEPTIONs in places where exceptions can't happen for 0.6% SunSpider speedup
3025
3026         * kjs/nodes.cpp:
3027         (KJS::DoWhileNode::execute):
3028         (KJS::WhileNode::execute):
3029         (KJS::ForNode::execute):
3030         (KJS::ForInNode::execute):
3031         (KJS::SourceElementsNode::execute):
3032
3033 2007-10-23  Darin Adler  <darin@apple.com>
3034
3035         Reviewed by Maciej.
3036
3037         * kjs/JSImmediate.h: (KJS::JSImmediate::getUInt32):
3038         Changed an && to an & for a 1% gain in SunSpider.
3039
3040 2007-10-23  Oliver Hunt  <oliver@apple.com>
3041
3042         Reviewed by Maciej.
3043
3044         Reduce branching in implementations of some operator implementations, yielding 1.3% boost to SunSpider.
3045
3046         * kjs/nodes.cpp:
3047         (KJS::MultNode::evaluate):
3048         (KJS::DivNode::evaluate):
3049         (KJS::ModNode::evaluate):
3050         (KJS::add):
3051         (KJS::sub):
3052         (KJS::AddNode::evaluate):
3053         (KJS::SubNode::evaluate):
3054         (KJS::valueForReadModifyAssignment):
3055         * kjs/operations.cpp:
3056         * kjs/operations.h:
3057
3058 2007-10-23  Oliver Hunt  <oliver@apple.com>
3059
3060         Reviewed by Maciej.
3061
3062         Separating all of the simple (eg. non-read-modify-write) binary operators
3063         into separate classes in preparation for further JS optimisations.
3064         
3065         Happily this produces a 0.8% to 1.0% performance increase in SunSpider with
3066         no further work.
3067
3068         * JavaScriptCore.xcodeproj/project.pbxproj:
3069         * kjs/grammar.y:
3070         * kjs/nodes.cpp:
3071         (KJS::MultNode::evaluate):
3072         (KJS::DivNode::evaluate):
3073         (KJS::ModNode::evaluate):
3074         (KJS::AddNode::evaluate):
3075         (KJS::SubNode::evaluate):
3076         (KJS::LeftShiftNode::evaluate):
3077         (KJS::RightShiftNode::evaluate):
3078         (KJS::UnsignedRightShiftNode::evaluate):
3079         (KJS::LessNode::evaluate):
3080         (KJS::GreaterNode::evaluate):
3081         (KJS::LessEqNode::evaluate):
3082         (KJS::GreaterEqNode::evaluate):
3083         (KJS::InstanceOfNode::evaluate):
3084         (KJS::InNode::evaluate):
3085         (KJS::EqualNode::evaluate):
3086         (KJS::NotEqualNode::evaluate):
3087         (KJS::StrictEqualNode::evaluate):
3088         (KJS::NotStrictEqualNode::evaluate):
3089         (KJS::BitAndNode::evaluate):
3090         (KJS::BitXOrNode::evaluate):
3091         (KJS::BitOrNode::evaluate):
3092         (KJS::LogicalAndNode::evaluate):
3093         (KJS::LogicalOrNode::evaluate):
3094         * kjs/nodes.h:
3095         (KJS::MultNode::):
3096         (KJS::DivNode::):
3097         (KJS::ModNode::):
3098         (KJS::AddNode::):
3099         (KJS::SubNode::):
3100         (KJS::LeftShiftNode::):
3101         (KJS::RightShiftNode::):
3102         (KJS::UnsignedRightShiftNode::):
3103         (KJS::LessNode::):
3104         (KJS::GreaterNode::):
3105         (KJS::LessEqNode::):
3106         (KJS::GreaterEqNode::):
3107         (KJS::InstanceOfNode::):
3108         (KJS::InNode::):
3109         (KJS::EqualNode::):
3110         (KJS::NotEqualNode::):
3111         (KJS::StrictEqualNode::):
3112         (KJS::NotStrictEqualNode::):
3113         (KJS::BitAndNode::):
3114         (KJS::BitOrNode::):
3115         (KJS::BitXOrNode::):
3116         (KJS::LogicalAndNode::):
3117         (KJS::LogicalOrNode::):
3118         * kjs/nodes2string.cpp:
3119         (MultNode::streamTo):
3120         (DivNode::streamTo):
3121         (ModNode::streamTo):
3122         (AddNode::streamTo):
3123         (SubNode::streamTo):
3124         (LeftShiftNode::streamTo):
3125         (RightShiftNode::streamTo):
3126         (UnsignedRightShiftNode::streamTo):
3127         (LessNode::streamTo):
3128         (GreaterNode::streamTo):
3129         (LessEqNode::streamTo):
3130         (GreaterEqNode::streamTo):
3131         (InstanceOfNode::streamTo):
3132         (InNode::streamTo):
3133         (EqualNode::streamTo):
3134         (NotEqualNode::streamTo):
3135         (StrictEqualNode::streamTo):
3136         (NotStrictEqualNode::streamTo):
3137         (BitAndNode::streamTo):
3138         (BitXOrNode::streamTo):
3139         (BitOrNode::streamTo):
3140         (LogicalAndNode::streamTo):
3141
3142 2007-10-23  Darin Adler  <darin@apple.com>
3143
3144         Reviewed by Maciej.
3145
3146         - fix http://bugs.webkit.org/show_bug.cgi?id=15639
3147           fix Math.abs(0), Math.ceil(-0), and Math.floor(-0)
3148
3149         Test: fast/js/math.html
3150
3151         * kjs/math_object.cpp: (MathFuncImp::callAsFunction):
3152         Fix abs to look at the sign bit. Add a special case for values in the range
3153         between -0 and -1 and a special case for ceil and for -0 for floor.
3154
3155 2007-10-23  Darin Adler  <darin@apple.com>
3156
3157         Reviewed by Eric.
3158
3159         - streamline exception handling code for a >1% speed-up of SunSpider
3160
3161         * kjs/nodes.cpp: Changed macros to use functions for everything that's not
3162         part of normal execution. We'll take function call overhead when propagating
3163         an exception or out of memory.
3164         (KJS::createOutOfMemoryCompletion): Added.
3165         (KJS::substitute): Use append instead of the relatively inefficient + operator.
3166         (KJS::Node::rethrowException): Added.
3167         * kjs/nodes.h: Added rethrowException.
3168
3169 2007-10-22  Darin Adler  <darin@apple.com>
3170
3171         Reviewed by Maciej.
3172
3173         - fix http://bugs.webkit.org/show_bug.cgi?id=15636
3174           some JavaScriptCore regression tests are failing due to numeric conversion
3175
3176         This should restore correctness and make speed better too, restoring some
3177         of the optimization we lost in my last check-in.
3178
3179         * kjs/JSImmediate.h:
3180         (KJS::JSImmediate::getTruncatedInt32): Added. Uses the range checking idiom
3181         I used in my patch yesterday.
3182         (KJS::JSImmediate::getTruncatedUInt32): Ditto.
3183
3184         * kjs/internal.h: Removed getInt32 and added getTruncatedInt/UInt32.
3185         * kjs/internal.cpp:
3186         (KJS::NumberImp::getUInt32): Changed to always use double, since I can't find
3187         a way to write this more efficiently for float.
3188         (KJS::NumberImp::getTruncatedInt32): Added.
3189         (KJS::NumberImp::getTruncatedUInt32): Added.
3190
3191         * kjs/value.h: Removed getInt32 and added getTruncatedInt/UInt32.
3192         (KJS::JSValue::getUInt32):
3193         (KJS::JSValue::getTruncatedInt32): Added.
3194         (KJS::JSValue::getTruncatedUInt32): Added.
3195         (KJS::JSValue::toInt32): Changed getInt32 call to getTruncatedInt32.
3196         (KJS::JSValue::toUInt32): Changed getUInt32 call to getTruncatedUInt32.
3197         * kjs/value.cpp:
3198         (KJS::JSCell::getTruncatedInt32): Added.
3199         (KJS::JSCell::getTruncatedUInt32): Added.
3200         (KJS::JSValue::toInteger): Changed getUInt32 call to getTruncatedInt32.
3201         (KJS::JSValue::toInt32SlowCase): Removed extra getInt32 call I accidentally
3202         had left in here.
3203         (KJS::JSValue::toUInt32SlowCase): Ditto.
3204         (KJS::JSValue::toUInt16): Changed getUInt32 call to getTruncatedUInt32.
3205
3206         * JavaScriptCore.exp: Updated.
3207
3208 2007-10-22  Darin Adler  <darin@apple.com>
3209
3210         Reviewed by Geoff.
3211
3212         - fix http://bugs.webkit.org/show_bug.cgi?id=15632
3213           js1_5/Array/array-001.js test failing
3214
3215         One of the JavaScriptCore tests was failing; it failed because of
3216         my change to NumberImp::getUInt32. The incorrect code I copied was
3217         from JSImmediate::getUInt32, and was a pre-existing bug.
3218
3219         This patch fixes correctness, but will surely slow down SunSpider.
3220         We may be able to code this tighter and get the speed back.
3221
3222         * kjs/JSImmediate.h:
3223         (KJS::JSImmediate::getInt32): Renamed from toInt32 to more accurately
3224         reflect the fact that this function only returns true if the value is
3225         accurate (no fractional part, etc.). Changed code so that it returns
3226         false when the value has a fraction.
3227         (KJS::JSImmediate::getUInt32): Ditto.
3228
3229         * kjs/internal.cpp:
3230         (KJS::NumberImp::getInt32): Changed code so that it returns false when
3231         the value has a fraction. Restores the old behavior.
3232         (KJS::NumberImp::getUInt32): Ditto.
3233
3234         * kjs/value.h:
3235         (KJS::JSValue::getInt32): Updated for name change.
3236         (KJS::JSValue::getUInt32): Ditto.
3237         (KJS::JSValue::toInt32): Ditto.
3238         (KJS::JSValue::toUInt32): Ditto.
3239
3240 2007-10-22  Darin Adler  <darin@apple.com>
3241
3242         Reviewed by Brady.
3243
3244         - fix crash seen when running JavaScriptCore tests
3245
3246         * kjs/array_instance.cpp: (KJS::ArrayInstance::mark):
3247         Copy and paste error: I accidentally had code here that was
3248         making a copy of the HashMap -- that's illegal inside a mark
3249         function and was unnecessary. The other callsite was modifying
3250         the map as it iterated it, but this function is not.
3251
3252 2007-10-22  Maciej Stachowiak  <mjs@apple.com>
3253
3254         Reviewed by Oliver.
3255         
3256         - Avoid moving floats into integer registers in jsNumber() for 3% speedup on SunSpider
3257         http://bugs.webkit.org/show_bug.cgi?id=15627
3258
3259         * kjs/JSImmediate.h:
3260         (KJS::JSImmediate::fromDouble): Avoid moving floats to integer
3261         registers since this is very slow.
3262
3263 2007-10-22  Darin Adler  <darin@apple.com>
3264
3265         Reviewed by Eric Seidel.
3266
3267         - http://bugs.webkit.org/show_bug.cgi?id=15617
3268           improve speed of integer conversions
3269
3270         Makes SunSpider 6% faster.
3271
3272         * kjs/JSImmediate.h: Added toInt32 and toUInt32, with separate versions for
3273         32-bit and 64-bit.
3274         * kjs/value.h:
3275         (KJS::JSValue::getUInt32): Call JSImmediate::toUInt32.
3276
3277         * kjs/internal.h: Added getInt32.
3278         * kjs/internal.cpp:
3279         (KJS::NumberImp::getInt32): Added.
3280         (KJS::NumberImp::getUInt32): Replaced with more-optimal implementation
3281         stolen from JSValue.
3282
3283         * kjs/value.h:
3284         (KJS::jsNumber): Marked ALWAYS_INLINE, because this wasn't getting
3285         inlined.
3286         (KJS::JSValue::getInt32): Added.
3287         (KJS::JSValue::getUInt32): Changed to call the new JSImmediate::toUInt32
3288         to avoid converting from float to double.
3289         (KJS::JSValue::toInt32): Made inline, separated out the slow case.
3290         (KJS::JSValue::toUInt32): Ditto.
3291         * kjs/value.cpp:
3292         (KJS::JSCell::getInt32): Added.
3293         (KJS::JSValue::toInt32SlowCase): Renamed from toInt32. Changed to use the
3294         new getInt32. Added a faster case for in-range numbers.
3295         (KJS::JSValue::toUInt32SlowCase): Ditto.
3296         (KJS::JSValue::toUInt16): Added a faster case for in-range numbers.
3297
3298         * JavaScriptCore.exp: Updated for changes.
3299
3300 2007-10-22  Adam Roben  <aroben@apple.com>
3301
3302         Windows build fix
3303
3304         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Turn off
3305         warning about implicit conversion to bool.
3306
3307 2007-10-22  Mark Rowe  <mrowe@apple.com>
3308
3309         Gtk build fix.
3310
3311         * kjs/array_instance.cpp:
3312
3313 2007-10-22  Darin Adler  <darin@apple.com>
3314
3315         Reviewed by Maciej.
3316
3317         - http://bugs.webkit.org/show_bug.cgi?id=15606
3318           make cut-off for sparse vs. dense arrays smarter for speed with large arrays
3319
3320         Makes the morph test in SunSpider 26% faster, and the overall
3321         benchmark 3% faster.
3322
3323         This also fixes some small problems we had with the distinction
3324         between nonexistent and undefined values in arrays.
3325
3326         * kjs/array_instance.h: Tweaked formatting and naming.
3327         * kjs/array_instance.cpp: Copied from kjs/array_object.cpp.
3328         (KJS::storageSize): Added. Computes the size of the storage given a vector length.
3329         (KJS::increasedVectorLength): Added. Implements the rule for resizing the vector.
3330         (KJS::isDenseEnoughForVector): Added.
3331         (KJS::ArrayInstance::ArrayInstance): Initialize the new fields.
3332         (KJS::ArrayInstance::~ArrayInstance): Since m_storage is now never 0, delete it.
3333         (KJS::ArrayInstance::getItem): Updated for name changes.
3334         (KJS::ArrayInstance::lengthGetter): Ditto.
3335         (KJS::ArrayInstance::inlineGetOwnPropertySlot): Added. Allows both versions of
3336         getOwnPropertySlot to share more code.
3337         (KJS::ArrayInstance::getOwnPropertySlot): Just refactored, no code change.
3338         (KJS::ArrayInstance::put): Added logic for extending the vector as long as the
3339         array is dense enough. Also keep m_numValuesInVector up to date.
3340         (KJS::ArrayInstance::deleteProperty): Added code to keep m_numValuesInVector
3341         up to date.
3342         (KJS::ArrayInstance::getPropertyNames): Fixed bug where this would omit names
3343         for array indices with undefined values.
3344         (KJS::ArrayInstance::increaseVectorLength): Renamed from resizeStorage. Also
3345         simplified to only handle getting larger.
3346         (KJS::ArrayInstance::setLength): Added code to update m_numValuesInVector, to
3347         zero out the unused part of the vector and to delete the map if it's no longer
3348         needed.
3349         (KJS::ArrayInstance::mark): Tweaked formatting.
3350         (KJS::compareByStringForQSort): Ditto.
3351         (KJS::ArrayInstance::sort): Ditto.
3352         (KJS::CompareWithCompareFunctionArguments::CompareWithCompareFunctionArguments):
3353         Ditto.
3354         (KJS::compareWithCompareFunctionForQSort): Ditto.
3355         (KJS::ArrayInstance::compactForSorting): Fixed bug where this would turn
3356         undefined values into nonexistent values in some cases.
3357
3358         * kjs/array_object.h: Removed MAX_ARRAY_INDEX.
3359         * kjs/array_object.cpp: Removed ArrayInstance. Moved to a separate file.
3360
3361         * JavaScriptCore.pri: Added array_instance.cpp.
3362         * JavaScriptCore.xcodeproj/project.pbxproj: Ditto.
3363         * kjs/AllInOneFile.cpp: Ditto.
3364
3365 2007-10-22  Andrew Wellington  <proton@wiretapped.net>
3366
3367         Reviewed by Mark Rowe.
3368         
3369         Fix for local database support after r26879
3370         Ensure that ENABLE_DATABASE and ENABLE_ICONDATABASE are correctly set
3371
3372         * Configurations/JavaScriptCore.xcconfig:
3373
3374 2007-10-22  Simon Hausmann  <hausmann@kde.org>
3375
3376         Reviewed by Alp.
3377
3378         Build fix for the non-qmake builds.
3379
3380         * wtf/Platform.h: Default to enabling the database features unless
3381         otherwise specified. (similar to ENABLE_ICONDATABASE)
3382
3383 2007-10-22  Holger Freyther  <zecke@selfish.org>
3384
3385         Reviewed by Simon Hausmann <hausmann@kde.org>.
3386
3387         * Do not build testkjs as an application bundle. This is
3388         needed for run-javascriptcore-tests on OSX.
3389         * Also, based on r26633, allow to test the WebKit/Qt port on OSX.
3390         * Set DYLD_LIBRARY_PATH if it was set in the environment. It must be set
3391         as we do not have -rpath on OSX.
3392
3393         * kjs/testkjs.pro:
3394
3395 2007-10-21  Mark Rowe  <mrowe@apple.com>
3396
3397         Reviewed by Alp.
3398
3399         http://bugs.webkit.org/show_bug.cgi?id=15575
3400         Bug 15575: [GTK] Implement threading using GThread
3401
3402         * wtf/Platform.h: Do not enable pthreads for Gtk.
3403
3404 2007-10-21  Mark Rowe  <mrowe@apple.com>
3405
3406         Reviewed by Mitz.
3407
3408         Fix http://bugs.webkit.org/show_bug.cgi?id=15603
3409         Bug 15603: Regression(r26847): Crash when sorting an empty array from JavaScript
3410
3411         * kjs/array_object.cpp:
3412         (KJS::freeStorage): Reinstate null-check that was removed in r26847.
3413
3414 2007-10-21  Darin Adler  <darin@apple.com>
3415
3416         - fix Windows build
3417
3418         * kjs/array_instance.h: Removed unused ExecState parameter.
3419         * kjs/array_object.cpp:
3420         (KJS::ArrayInstance::put): Ditto.
3421         (KJS::ArrayInstance::setLength): Ditto.
3422
3423 2007-10-21  Darin Adler  <darin@apple.com>
3424
3425         * kjs/array_object.cpp: (KJS::ArrayInstance::put):
3426         Add missing assignment that was causing regression test crash.
3427
3428 2007-10-21  Darin Adler  <darin@apple.com>
3429
3430         Reviewed by Maciej.
3431
3432         - http://bugs.webkit.org/show_bug.cgi?id=15585
3433           speed up sparse arrays by using a custom map
3434     
3435         Speeds up SunSpider by 10%.
3436
3437         * kjs/array_object.cpp:
3438         (allocateStorage): Leave room for an additional pointer.
3439         (reallocateStorage): Ditto.
3440         (freeStorage): Ditto.
3441         (ArrayInstance::~ArrayInstance): Delete the overflow map if present.
3442         (ArrayInstance::getItem): Read values from the overflow map if present.
3443         Removed the check of length, since it slows down the common case.
3444         (ArrayInstance::getOwnPropertySlot): Ditto. Also removed the fallback
3445         to the property map.
3446         (ArrayInstance::put): Write values into the overflow map as needed.
3447         Also create overflow map when needed.
3448         (ArrayInstance::deleteProperty): Remove values from the overflow map
3449         as appropriate.
3450         (ArrayInstance::getPropertyNames): Add a name for each identifier in
3451         the property map. This is extremely inefficient.
3452         (ArrayInstance::setLength): Remove any values in the overflow map
3453         that are past the new length, as we formerly did with the property map.
3454         (ArrayInstance::mark): Mark any values in the overflow map.
3455         (compareByStringForQSort): Removed unneeded undefined case, since
3456         compactForSorting guarantees we will have no undefined values.
3457         (compareWithCompareFunctionForQSort): Ditto.
3458         (ArrayInstance::compactForSorting): Copy all the values out of the
3459         overflow map and destroy it.
3460
3461         * kjs/property_map.h: Removed now-unused getSparseArrayPropertyNames.
3462         * kjs/property_map.cpp: Ditto.
3463
3464 2007-10-20  Darin Adler  <darin@apple.com>
3465
3466         Reviewed by Maciej.
3467
3468         - http://bugs.webkit.org/show_bug.cgi?id=15579
3469           stop churning identifier reference counts copying Completion objects
3470
3471         * kjs/completion.h: Replace the Identifier with an Identifier*.
3472         * kjs/nodes.cpp:
3473         (ForInNode::execute): Update for change to Completion constructor.
3474         (ContinueNode::execute): Ditto.
3475         (BreakNode::execute): Ditto.
3476
3477 2007-10-20  Mark Rowe  <mrowe@apple.com>
3478
3479         Reviewed by Alp.
3480
3481         Gtk changes needed to enable HTML 5 client-side database storage.
3482
3483         * wtf/Platform.h: Have Gtk use pthreads for now.
3484
3485 2007-10-20  Geoffrey Garen  <ggaren@apple.com>
3486
3487         Reviewed by Maciej Stachowiak.
3488
3489         Fixed http://bugs.webkit.org/show_bug.cgi?id=15570
3490         Store gathered declaration nodes in the function body node.
3491         
3492         This means that you only have to gather the declaration nodes the first 
3493         time the function executes. Performance gain of 2.10% on SunSpider, 
3494         0.90% on command-line JS iBench.
3495
3496         * kjs/nodes.cpp: Split declaration stack initialization code off into 
3497         initializeDeclarationStacks().
3498         (FunctionBodyNode::FunctionBodyNode):
3499         (FunctionBodyNode::initializeDeclarationStacks):
3500         (FunctionBodyNode::processDeclarations):
3501
3502         * kjs/nodes.h: Changed DeclarationStacks structure to hold references, 
3503         since the actual Vectors are now stored either on the stack or in the 
3504         function body node.
3505
3506 2007-10-19  Geoffrey Garen  <ggaren@apple.com>
3507
3508         Reviewed by Darin Adler.
3509         
3510         http://bugs.webkit.org/show_bug.cgi?id=15559
3511         Moved processDeclarations call into FunctionBodyNode::execute
3512
3513         To improve encapsulation, moved processDeclarations call into
3514         FunctionBodyNode::execute. Also marked processDeclarations 
3515         ALWAYS_INLINE, since it has only 1 caller now. This is a .71% speedup 
3516         on command-line JS iBench.
3517
3518         * kjs/function.cpp:
3519         (KJS::FunctionImp::callAsFunction):
3520         (KJS::GlobalFuncImp::callAsFunction):
3521         * kjs/function.h:
3522         * kjs/interpreter.cpp:
3523         (KJS::Interpreter::evaluate):
3524         * kjs/nodes.cpp:
3525         (FunctionBodyNode::execute):
3526         * kjs/nodes.h:
3527
3528 2007-10-19  Brady Eidson  <beidson@apple.com>
3529
3530         Reviewed by Sam
3531
3532         Queue -> Deque! and small style tweaks
3533
3534         * JavaScriptCore.vcproj/WTF/WTF.vcproj:
3535         * JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj
3536         * wtf/Deque.h: Added.
3537         (WTF::DequeNode::DequeNode):
3538         (WTF::Deque::Deque):
3539         (WTF::Deque::~Deque):
3540         (WTF::Deque::size):
3541         (WTF::Deque::isEmpty):
3542         (WTF::Deque::append):
3543         (WTF::Deque::prepend):
3544         (WTF::Deque::first):
3545         (WTF::Deque::last):
3546         (WTF::Deque::removeFirst):
3547         (WTF::Deque::clear):
3548         * wtf/Queue.h: Removed.
3549
3550
3551 2007-10-19  Brady Eidson <beidson@apple.com>
3552
3553         Reviewed by Oliver
3554
3555         Added a simple LinkedList based Queue to wtf
3556         We can make a better, more sophisticated an efficient one later, but have
3557         needed one for some time, now!
3558
3559         * JavaScriptCore.xcodeproj/project.pbxproj:
3560         * wtf/Queue.h: Added.
3561         (WTF::QueueNode::QueueNode):
3562         (WTF::Queue::Queue):
3563         (WTF::Queue::~Queue):
3564         (WTF::Queue::size):
3565         (WTF::Queue::isEmpty):
3566         (WTF::Queue::append):
3567         (WTF::Queue::prepend):
3568         (WTF::Queue::first):
3569         (WTF::Queue::last):
3570         (WTF::Queue::removeFirst):
3571         (WTF::Queue::clear):
3572
3573 2007-10-19  Nikolas Zimmermann  <zimmermann@kde.org>
3574
3575         Reviewed by Anders.
3576
3577         Try to fix Qt/Win build slave, by including windows.h also on Qt/Win.
3578
3579         * kjs/testkjs.cpp: Change PLATFORM(WIN) to PLATFORM(WIN_OS)
3580
3581 2007-10-19  Simon Hausmann  <hausmann@kde.org>
3582
3583         Reviewed by Lars.
3584
3585         Fix compilation on Windows when wchar_t is a typedef instead of a native type (triggered by -Zc:wchar_t-).
3586         Don't provide the wchar_t overloads then as they conflict with the unsigned short ones.
3587
3588         * wtf/ASCIICType.h:
3589         (WTF::isASCIIAlpha):
3590         (WTF::isASCIIAlphanumeric):
3591         (WTF::isASCIIDigit):
3592         (WTF::isASCIIHexDigit):
3593         (WTF::isASCIILower):
3594         (WTF::isASCIISpace):
3595         (WTF::toASCIILower):
3596         (WTF::toASCIIUpper):
3597
3598 2007-10-19  Simon Hausmann  <hausmann@kde.org>
3599
3600         Reviewed by Lars.
3601
3602         Another build fix for the windows/qt build: Apply the same fix as in revision 26686 also to kjs/config.h to disable the disallowctype feature.
3603
3604         * kjs/config.h:
3605
3606 2007-10-18  Maciej Stachowiak  <mjs@apple.com>
3607
3608         Reviewed by Adam.
3609         
3610         - use __declspec(thread) for fast thread-local storage on Windows
3611         
3612         - 2.2% speedup on sunspider (on Windows)
3613         - 7% speedup on the string section
3614         - 6% speedup on JS iBench
3615         
3616         - fixed <rdar://problem/5473084> PLT on Windows got 2.5% slower between r25406 and r25422
3617         - fixed at least some of <rdar://5527965? i-Bench JS was 14% slower in 310A11 than 310A10
3618         
3619         
3620         * wtf/FastMalloc.cpp:
3621         (WTF::getThreadHeap):
3622         (WTF::setThreadHeap):
3623         (WTF::TCMalloc_ThreadCache::GetCache):
3624         (WTF::TCMalloc_ThreadCache::GetCacheIfPresent):
3625         (WTF::TCMalloc_ThreadCache::CreateCacheIfNecessary):
3626
3627 2007-10-17  Darin Adler  <darin@apple.com>
3628
3629         Reviewed by Mark Rowe.
3630
3631         - fix http://bugs.webkit.org/show_bug.cgi?id=15543
3632           <rdar://problem/5545639> REGRESSION (r26697):
3633           GoogleDocs: Can't create new documents or open existing ones
3634
3635         Test: fast/js/regexp-non-character.html
3636
3637         * pcre/pcre_compile.c: (check_escape): Take out the checks for valid characters
3638         in the \u sequences -- not needed and actively harmful.
3639
3640 2007-10-17  Anders Carlsson  <andersca@apple.com>
3641
3642         Reviewed by Oliver.
3643
3644         * wtf/Platform.h:
3645         #define USE_PTHREADS on Mac.
3646
3647 2007-10-17  Geoffrey Garen  <ggaren@apple.com>
3648
3649         Reviewed by Darin Adler.
3650         
3651         Merged DeclaredFunctionImp into FunctionImp (the base class) because 
3652         the distinction between the two was unused.
3653         
3654         Removed codeType() from FunctionImp because FunctionImp and its 
3655         subclasses all returned FunctionCode, so it was unused, practically 
3656         speaking.
3657         
3658         Removed a different codeType() from GlobalFuncImp because it was unused.
3659         (Perhaps it was vestigial from a time when GlobalFuncImp used to 
3660         inherit from FunctionImp.)
3661
3662         * bindings/runtime_method.cpp:
3663         * bindings/runtime_method.h:
3664         * kjs/function.cpp:
3665         (KJS::):
3666         (KJS::FunctionImp::FunctionImp):
3667         (KJS::FunctionImp::callAsFunction):
3668         (KJS::FunctionImp::construct):
3669         (KJS::FunctionImp::execute):
3670         (KJS::FunctionImp::processVarDecls):
3671         * kjs/function.h:
3672         (KJS::FunctionImp::implementsConstruct):
3673         (KJS::FunctionImp::scope):
3674         * kjs/function_object.cpp:
3675         (FunctionProtoFunc::callAsFunction):
3676         (FunctionObjectImp::construct):
3677         * kjs/nodes.cpp:
3678         (FuncDeclNode::processFuncDecl):
3679         (FuncExprNode::evaluate):
3680
3681 2007-10-17  Adam Roben  <aroben@apple.com>
3682
3683         Windows build fix part 2.
3684
3685         Fix was by Darin, reviewed by Anders and Adam.
3686
3687         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Add
3688         FastMallocPCRE.cpp to the project, and let Visual Studio have its way
3689         with the post-build step.
3690         * pcre/pcre.h: Don't DLL export the entry points just because this
3691         is Win32 -- this is an internal copy of PCRE and should be private.
3692         * pcre/pcre_compile.c: Fix an uninitialized variable warning --
3693         there's no real problem but it's better to quiet the compiler by
3694         tweaking the code slightly than turn off the warning entirely.
3695
3696 2007-10-17  Adam Roben  <aroben@apple.com>
3697
3698         Windows build fix.
3699
3700         Reviewed by Anders.
3701
3702         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Disable
3703         some mismatched signed/unsigned comparison warnings.
3704         * pcre/pcre_exec.c:
3705         (match): #if-out some labels that don't seem to exist.
3706
3707 2007-10-17  Mark Rowe  <mrowe@apple.com>
3708
3709         Gtk build fix.
3710
3711         * JavaScriptCore.pri: Add FastMallocPCRE.cpp.
3712         * pcre/pcre_get. #if out two functions that depend on pcre_get_stringnumber, which
3713         is currently unavailable for UTF-16.
3714
3715 2007-10-16  Darin Adler  <darin@apple.com>
3716
3717         Reviewed by Geoff.
3718
3719         - merged PCRE changes between 6.4 and 6.5
3720
3721         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
3722         * JavaScriptCore.xcodeproj/project.pbxproj:
3723         Removed pcre_config.c, pcre_globals.c, pcre_info.c, pcre_maketables.c,
3724         pcre_printint.src, pcre_refcount.c, pcre_study.c, pcre_try_flipped.c,
3725         pcre_ucp_findchar.c, pcre_version.c, and ucptable.c. Added pcre_ucp_searchfuncs.c.
3726
3727         * pcre/AUTHORS:
3728         * pcre/LICENCE:
3729         * pcre/MERGING:
3730         * pcre/dftables.c:
3731         * pcre/pcre-config.h:
3732         * pcre/pcre.h:
3733         * pcre/pcre.pri:
3734         * pcre/pcre_compile.c:
3735         * pcre/pcre_exec.c:
3736         * pcre/pcre_fullinfo.c:
3737         * pcre/pcre_get.c:
3738         * pcre/pcre_internal.h:
3739         * pcre/pcre_maketables.c:
3740         * pcre/pcre_ord2utf8.c:
3741         * pcre/pcre_tables.c:
3742         * pcre/pcre_ucp_searchfuncs.c: Copied from pcre/pcre_ucp_findchar.c.
3743         * pcre/pcre_xclass.c:
3744         * pcre/ucp.h:
3745         * pcre/ucpinternal.h:
3746         * pcre/ucptable.c:
3747         Updated with new versions from the PCRE 6.5 release, merged with changes.
3748
3749         * pcre/pcre_config.c: Removed.
3750         * pcre/pcre_globals.c: Removed.
3751         * pcre/pcre_info.c: Removed.
3752         * pcre/pcre_printint.src: Removed.
3753         * pcre/pcre_refcount.c: Removed.
3754         * pcre/pcre_study.c: Removed.
3755         * pcre/pcre_try_flipped.c: Removed.
3756         * pcre/pcre_ucp_findchar.c: Removed.
3757         * pcre/pcre_version.c: Removed.
3758
3759 2007-10-16  Geoffrey Garen  <ggaren@apple.com>
3760
3761         Reviewed by Darin Adler.
3762
3763         Removed KJS_VERBOSE because it was getting in the way of readability, 
3764         and the messages didn't seem very helpful.
3765
3766         * kjs/function.cpp:
3767         (KJS::FunctionImp::callAsFunction):
3768         (KJS::FunctionImp::passInParameters):
3769         * kjs/lookup.h:
3770         (KJS::lookupPut):
3771         * kjs/object.cpp:
3772         (KJS::JSObject::put):
3773         * kjs/value.h:
3774
3775 2007-10-16  Geoffrey Garen  <ggaren@apple.com>
3776
3777         Reviewed by Darin Adler.
3778         
3779         Removed the Parameter class because it was a redundant wrapper around 
3780         Identifier.
3781
3782         * kjs/function.cpp:
3783         (KJS::FunctionImp::passInParameters):
3784         (KJS::FunctionImp::getParameterName):
3785         * kjs/nodes.cpp:
3786         (FunctionBodyNode::addParam):
3787         * kjs/nodes.h:
3788         (KJS::FunctionBodyNode::):
3789
3790 2007-10-16  Geoffrey Garen  <ggaren@apple.com>
3791
3792         Reviewed by Darin Adler.
3793         
3794         Global replace of assert with ASSERT.
3795
3796 2007-10-16  Adam Roben  <aroben@apple.com>
3797
3798         Make testkjs not delay-load WebKit
3799
3800         Soon, delay-loading WebKit will be impossible (because we will be
3801         using __declspec(thread) for thread-local storage). This change
3802         prepares testkjs for the future.
3803
3804         Reviewed by Sam.
3805
3806         * JavaScriptCore.vcproj/JavaScriptCore.sln: Removed WebKitInitializer,
3807         added FindSafari.
3808         * JavaScriptCore.vcproj/testkjs/testkjs.vcproj: Don't link against
3809         WebKitInitializer, don't delay-load WebKit.
3810         * kjs/testkjs.cpp: Don't use WebKitInitializer.
3811
3812 2007-10-16  Adam Roben  <aroben@apple.com>
3813
3814         Updated testkjs for the rename of WebKit_debug.dll to WebKit.dll for the Debug configuration
3815
3816         Reviewed by Kevin McCullough.
3817
3818         * JavaScriptCore.vcproj/debug.vsprops: Added WebKitDLLConfigSuffix.
3819         * JavaScriptCore.vcproj/debug_internal.vsprops: Ditto.
3820         * JavaScriptCore.vcproj/release.vsprops: Ditto.
3821         * JavaScriptCore.vcproj/testkjs/testkjs.vcproj: Use
3822         WebKitDLLConfigSuffix when referring to WebKit.dll, and fixed a typo
3823         in the name of icuuc36[_debug].dll.
3824
3825 2007-10-16  Geoffrey Garen  <ggaren@apple.com>
3826
3827         Reviewed by Maciej Stachowiak.
3828         
3829         Re-structured variable and function declaration code.
3830         
3831         Command-line JS iBench shows no regression.
3832         
3833         Here are the changes:
3834
3835         1. Function declarations are now processed at the same time as var 
3836         declarations -- namely, immediately upon entry to an execution context. 
3837         This does not match Firefox, which waits to process a function
3838         declaration until the declaration's containing block executes, but it 
3839         does match IE and the ECMA spec. (10.1.3 states that var and function 
3840         declarations should be processed at the same time -- namely, "On 
3841         entering an execution context." 12.2 states that "A Block does not 
3842         define a new execution scope.")
3843
3844         2. Declaration processing proceeds iteratively now, rather than 
3845         recursively, storing the nodes is finds in stacks. This will later 
3846         facilitate an optimization to hold on to the gathered declaration nodes, 
3847         rather than re-fetching them in every function call. 
3848         [ http://bugs.webkit.org/show_bug.cgi?id=14868 ]
3849
3850         Modified these tests because they expected the incorrect Mozilla 
3851         behavior described above:
3852
3853         * tests/mozilla/ecma_3/Function/scope-001.js:
3854         * tests/mozilla/js1_5/Scope/regress-184107.js:
3855
3856 2007-10-16  Darin Adler  <darin@apple.com>
3857
3858         - try to fix the GTK build
3859
3860         * kjs/ustring.cpp: Include ASCIICType.h, not ASCIICtype.h.
3861
3862 2007-10-16  Darin Adler  <darin@apple.com>
3863
3864         - try to fix the Windows build
3865
3866         * kjs/date_object.cpp: (KJS::parseDate): A couple instances of isspace were
3867         in here. Not sure why it wasn't failing elsewhere. Changed to isASCIISpace.
3868
3869 2007-10-16  Darin Adler  <darin@apple.com>
3870
3871         - try to fix the GTK build
3872
3873         * kjs/ustring.cpp: Include ASCIICType.h.
3874
3875 2007-10-16  Darin Adler  <darin@apple.com>
3876
3877         Reviewed by Maciej and Geoff (and looked over by Eric).
3878
3879         - http://bugs.webkit.org/show_bug.cgi?id=15519
3880           eliminate use of <ctype.h> for processing ASCII
3881
3882         * wtf/ASCIICType.h: Added.
3883         * wtf/DisallowCType.h: Added.
3884
3885         * kjs/config.h: Include DisallowCType.h.
3886
3887         * kjs/date_object.cpp:
3888         (KJS::skipSpacesAndComments):
3889         (KJS::findMonth):
3890         (KJS::parseDate):
3891         * kjs/function.cpp:
3892         (KJS::decode):
3893         * kjs/ustring.cpp:
3894         (KJS::UString::toDouble):
3895         Use ASCIICType.h functions instead of ctype.h ones.
3896
3897 2007-10-14  Maciej Stachowiak  <mjs@apple.com>
3898
3899         Reviewed by Darin.
3900
3901         - fixes for "New JavaScript benchmark"
3902         http://bugs.webkit.org/show_bug.cgi?id=15515
3903         
3904         * kjs/testkjs.cpp:
3905         (TestFunctionImp::callAsFunction): Implement "load" for compatibility
3906         with SpiderMonkey.
3907         (TestFunctionImp::): ditto
3908         (doIt): ditto
3909         (kjsmain): Drop useless --> from output.
3910
3911 2007-10-15  Geoffrey Garen  <ggaren@apple.com>
3912
3913         Removed unnecessary #include.
3914
3915         * API/JSObjectRef.cpp:
3916
3917 2007-10-15  Geoffrey Garen  <ggaren@apple.com>
3918
3919         Double-reverse build fix. My tree was out of date.
3920
3921         * kjs/nodes.cpp:
3922         (NumberNode::evaluate):
3923
3924 2007-10-15  Geoffrey Garen  <ggaren@apple.com>
3925
3926         Build fix.
3927
3928         * kjs/nodes.cpp:
3929         (NumberNode::evaluate):
3930
3931 2007-10-15  Geoffrey Garen  <ggaren@apple.com>
3932
3933         Reviewed by Darin Adler.
3934         
3935         Removed surprising self-named "hack" that made nested functions 
3936         available as named properties of their containing functions, and placed
3937         containing function objects in the scope chains of nested functions.
3938         
3939         There were a few reasons to remove this "hack:"
3940
3941         1. It contradicted FF, IE, and the ECMA spec.
3942
3943         2. It incurred a performance penalty, since merely parsing a function 
3944         required parsing its body for nested functions (and so on).
3945
3946         3. SVN history contains no explanation for why it was added. It was just
3947         legacy code in a large merge a long, long time ago.
3948
3949         [ Patch broken off from http://bugs.webkit.org/show_bug.cgi?id=14868 ]
3950
3951         * kjs/nodes.cpp:
3952         (FuncDeclNode::processFuncDecl):
3953
3954 2007-10-15  Geoffrey Garen  <ggaren@apple.com>
3955
3956         Reviewed by Darin Adler.
3957         
3958         Removed the concept of AnonymousCode. It was unused, and it doesn't
3959         exist in the ECMA spec.
3960         
3961         [ Patch broken off from http://bugs.webkit.org/show_bug.cgi?id=14868 ]
3962
3963         * kjs/Context.cpp:
3964         (KJS::Context::Context):
3965         * kjs/function.h:
3966         (KJS::):
3967         * kjs/nodes.cpp:
3968         (ReturnNode::execute):
3969
3970 2007-10-15  Geoffrey Garen  <ggaren@apple.com>
3971
3972         Reviewed by Darin Adler.
3973         
3974         Made function parameters DontDelete. This matches FF and the vague
3975         description in ECMA 10.1.3. It's also required in order to make
3976         symbol table based lookup of function parameters valid. (If the 
3977         parameters aren't DontDelete, you can't guarantee that you'll find
3978         them later in the symbol table.)
3979
3980         [ Patch broken off from http://bugs.webkit.org/show_bug.cgi?id=14868 ]
3981
3982         * kjs/function.cpp:
3983         (KJS::FunctionImp::passInParameters):
3984
3985 2007-10-15  Geoffrey Garen  <ggaren@apple.com>
3986
3987         Reviewed by Maciej Stachowiak.
3988         
3989         Some Vector optimizations. These are especially important when using
3990         Vector as a stack for implementing recursive algorithms iteratively.
3991         
3992         [ Broken off from http://bugs.webkit.org/show_bug.cgi?id=14868 ]
3993
3994         1. Added shrink(), which is a version of resize() that you can call
3995         to save a branch / improve code generation and inlining when you know 
3996         that the vector is not getting bigger.
3997         
3998         2. Changed subclassing relationship in VectorBuffer to remove a call to
3999         fastFree() in the destructor for the inlineCapacity != 0 template
4000         specialization. This brings inline Vectors one step closer to true
4001         stack-allocated arrays.
4002         
4003         Also changed abort() to CRASH(), since the latter works better.
4004
4005         * wtf/Vector.h:
4006         (WTF::VectorBufferBase::allocateBuffer):
4007         (WTF::VectorBufferBase::deallocateBuffer):
4008         (WTF::VectorBufferBase::VectorBufferBase):
4009         (WTF::VectorBufferBase::~VectorBufferBase):
4010         (WTF::):
4011         (WTF::VectorBuffer::VectorBuffer):
4012         (WTF::VectorBuffer::~VectorBuffer):
4013         (WTF::VectorBuffer::deallocateBuffer):
4014         (WTF::VectorBuffer::releaseBuffer):
4015         (WTF::Vector::clear):
4016         (WTF::Vector::removeLast):
4017         (WTF::::operator):
4018         (WTF::::fill):
4019         (WTF::::shrink):
4020
4021 2007-10-12  Geoffrey Garen  <ggaren@apple.com>
4022
4023         Reviewed by Maciej Stachowiak.
4024         
4025         Fixed http://bugs.webkit.org/show_bug.cgi?id=15490
4026         Iteration statements sometimes incorrectly evaluate to the empty value 
4027         (KDE r670547). 
4028         
4029         [ Broken off from http://bugs.webkit.org/show_bug.cgi?id=14868 ]
4030         
4031         This patch is a merge of KDE r670547, with substantial modification 
4032         for performance.
4033         
4034         It fixes do-while statements to evaluate to a value. (They used
4035         to evaluate to the empty value in all cases.) 
4036
4037         It also fixes SourceElementsNode to maintain the value of abnormal 
4038         completions like "break" and "continue."
4039         
4040         It also re-works the main execution loop in SourceElementsNode so that
4041         it (1) makes a little more sense and (2) avoids unnecessary work. This 
4042         is a .28% speedup on command-line JS iBench.
4043
4044         * kjs/nodes.cpp:
4045         (DoWhileNode::execute):
4046         (SourceElementsNode::execute):
4047
4048 2007-10-15  Simon Hausmann  <hausmann@kde.org>
4049
4050         Reviewed by Lars.
4051
4052         Fix compilation with gcc 4.3 by including 'limits' due to the use of std::numeric_limits.
4053
4054         * wtf/HashTraits.h:
4055
4056 2007-10-5  Kevin Ollivier  <kevino@theolliviers.com>
4057  
4058         Reviewed by Adam.
4059         
4060         Add support for MSVC7, and fix cases where PLATFORM(WIN) should
4061         be PLATFORM(WIN_OS) for other ports building on Windows.
4062  
4063         * kjs/DateMath.cpp:
4064         (KJS::getDSTOffsetSimple):
4065         * kjs/JSImmediate.h:
4066         * wtf/Assertions.cpp:
4067         * wtf/Assertions.h:
4068         * wtf/Platform.h:
4069         * wtf/StringExtras.h:
4070         (snprintf):
4071         (vsnprintf):
4072
4073 2007-10-14  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
4074
4075         Reviewed by Darin.
4076
4077         Adds NegateNode optimization from KJS. The relevant revision in KDE
4078         is 666736.
4079
4080         * kjs/grammar.y:
4081         * kjs/nodes.cpp:
4082         (NumberNode::evaluate):
4083         * kjs/nodes.h:
4084         (KJS::Node::):
4085         (KJS::NumberNode::):
4086         * kjs/nodes2string.cpp:
4087         (NumberNode::streamTo):
4088
4089 2007-10-14  Jason Foreman  <jason@threeve.org>
4090
4091         Reviewed by Maciej.
4092
4093         Fix http://bugs.webkit.org/show_bug.cgi?id=15145
4094         
4095         Ensure that if adjusting n to minimize the difference of n*intPow10(e-p+1) to x,
4096         that the property n < intPow10(p) is maintained.
4097
4098         * kjs/number_object.cpp:
4099         (NumberProtoFunc::callAsFunction):
4100
4101 == Rolled over to ChangeLog-2007-10-14 ==