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