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