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