dc38d8d5cc406758ee51eb176486dbc572fe1ee5
[WebKit-https.git] / JavaScriptCore / ChangeLog
1 2007-12-03  Dan Bernstein  <mitz@apple.com>
2
3         Reviewed by Darin Adler.
4
5         - fix an ASSERT when getIntIdentifier is called with 0 or -1
6
7         * bindings/npruntime.cpp:
8         (_NPN_GetIntIdentifier): We cannot use the hashmap for 0 and -1 since
9         they are the empty value and the deleted value. Instead, keep the
10         identifiers for those two integers in a static array.
11
12 2007-12-02  Darin Adler  <darin@apple.com>
13
14         Reviewed by Mitz.
15
16         - fix http://bugs.webkit.org/show_bug.cgi?id=15848
17           <rdar://problem/5619330> REGRESSION: Assertion failure viewing comments page on digg.com
18
19         Test: fast/js/sparse-array.html
20
21         * kjs/array_instance.cpp:
22         (KJS::ArrayInstance::inlineGetOwnPropertySlot): Check sparse array cutoff before looking
23         in hash map. Can't avoid the branch because we can't look for 0 in the hash.
24         (KJS::ArrayInstance::deleteProperty): Ditto.
25
26 2007-12-02  Geoffrey Garen  <ggaren@apple.com>
27
28         Build fix: added an #include.
29
30         * kjs/collector.cpp:
31
32 2007-12-02  Geoffrey Garen  <ggaren@apple.com>
33
34         Reviewed by Eric Seidel.
35
36         Second step in refactoring JSGlobalObject: moved virtual functions from
37         Interpreter to JSGlobalObject.
38         
39         Layout and JS tests pass. SunSpider reports a .7% speedup -- don't 
40         believe his lies.
41
42 2007-12-01  Alp Toker  <alp@atoker.com>
43
44         Reviewed by Adam Roben.
45
46         http://bugs.webkit.org/show_bug.cgi?id=16228
47         kJSClassDefinitionEmpty is not exported with JS_EXPORT
48
49         Add JS_EXPORT to kJSClassDefinitionEmpty.
50
51         Make the gcc compiler check take precedence over the WIN32||_WIN32
52         check to ensure that symbols are exported on Windows when using gcc.
53
54         Add a TODO referencing the bug about JS_EXPORT in the Win build
55         (http://bugs.webkit.org/show_bug.cgi?id=16227)
56
57         Don't define JS_EXPORT as 'extern' when the compiler is unknown since
58         it would result in the incorrect expansion:
59
60           extern extern const JSClassDefinition kJSClassDefinitionEmpty;
61
62         (This was something we inherited from CFBase.h that doesn't make sense
63         for JSBase.h)
64
65         * API/JSBase.h:
66         * API/JSObjectRef.h:
67
68 2007-11-30  Geoffrey Garen  <ggaren@apple.com>
69
70         Reviewed by Beth Dakin.
71         
72         Reversed the ownership relationship between Interpreter and JSGlobalObject.
73         Now, the JSGlobalObject owns the Interpreter, and top-level objects
74         that need the two to persist just protect the JSGlobalObject from GC.
75         
76         Global object bootstrapping looks a little odd right now, but it will
77         make much more sense soon, after further rounds of refactoring.
78
79         * bindings/runtime_root.h: Made this class inherit from RefCounted,
80         to avoid code duplication.
81
82         * kjs/collector.cpp:
83         (KJS::Collector::collect): No need to give special GC treatment to 
84         Interpreters, since we mark their global objects, which mark them.
85
86         * kjs/interpreter.cpp:
87         (KJS::Interpreter::mark): No need to mark our global object, since it
88         marks us.
89         * kjs/interpreter.h: Don't inherit from RefCounted -- JSGlobalObject 
90         owns us directly.
91
92         * kjs/testkjs.cpp: Modified to follow the new rules.
93         (createGlobalObject):
94         (runWithScripts):
95
96 2007-11-30  Brent Fulgham  <bfulgham@gmail.com>
97
98         Reviewed by Eric.
99
100         * ChangeLog:
101         * pcre/pcre_compile.cpp:
102         (compile_branch):
103
104 2007-11-30  Eric Seidel  <eric@webkit.org>
105
106         No review, build fix only.
107         
108         Fix uninitialized var warnings in release build.
109
110         * JavaScriptCore.xcodeproj/project.pbxproj:
111         * pcre/pcre_compile.cpp:
112         (compile_regex):
113
114 2007-11-30  Darin Adler  <darin@apple.com>
115
116         Reviewed by Adam Roben.
117
118         - fix http://bugs.webkit.org/show_bug.cgi?id=16207
119           JavaScript regular expressions should match UTF-16 code units rather than characters
120
121         SunSpider says this is 5.5% faster on the regexp test, 0.4% faste overall.
122
123         Test: fast/js/regexp-non-bmp.html
124
125         Renamed ANY_CHAR to NOT_NEWLINE to more-accurately reflect its meaning.
126
127         * pcre/pcre_compile.cpp:
128         (compile_branch): Removed calls to the UTF-16 character accessor functions, replacing
129         them with simple pointer dereferences in some cases, and no code at all in others.
130         (calculateCompiledPatternLengthAndFlags): Ditto.
131
132         * pcre/pcre_exec.cpp:
133         (match): Fixed indentation of some case labels (including all the BEGIN_OPCODE).
134         Removed calls to the UTF-16 character accessor functions, replacing them with simple
135         pointer dereferences in some cases, and no code at all in others. Also removed some
136         explicit UTF-16 support code in a few cases. Removed the unneeded "UTF-8" code path
137         in the ANY_CHAR repeat code, and in another case, eliminated the code to check against
138         end_subject in because it is already done outside the loop.
139         (jsRegExpExecute):
140
141         * pcre/pcre_internal.h: Removed all the UTF-16 helper functions.
142
143 2007-11-30  Eric Seidel  <eric@webkit.org>
144
145         Reviewed by darin.
146         
147         PCRE crashes under GuardMalloc
148         http://bugs.webkit.org/show_bug.cgi?id=16127
149         check against patternEnd to make sure we don't walk off the end of the string
150
151         * pcre/pcre_compile.cpp:
152         (compile_branch):
153         (calculateCompiledPatternLengthAndFlags):
154
155 2007-11-30  Eric Seidel  <eric@webkit.org>
156
157         Reviewed by Maciej.
158         
159         Fix layout test regressions caused by r28186
160         http://bugs.webkit.org/show_bug.cgi?id=16195
161         change first_byte and req_byte back to shorts instead of chars
162         (I think PCRE stuffs information in the high bits) 
163
164         * pcre/pcre_internal.h:
165
166 2007-11-29  Oliver Hunt  <oliver@apple.com>
167
168         Reviewed by Maciej and Darin.
169
170         Make the JS collector work with multiple threads 
171
172         Under heavy contention it was possible the GC to suspend other
173         threads inside the pthread spinlock, which could lead to the GC
174         thread blocking on the pthread spinlock itself.
175
176         We now determine and store each thread's stack base when it is
177         registered, thus removing the need for any calls to pthread_get_stackaddr_np
178         that needed the pthread spinlock.
179
180         * kjs/collector.cpp:
181         (KJS::Collector::Thread::Thread):
182         (KJS::Collector::registerThread):
183         (KJS::Collector::markOtherThreadConservatively):
184
185 2007-11-29  Adam Roben  <aroben@apple.com>
186
187         Windows build fix
188
189         Removed some unreachable code (ironically, the code was some
190         ASSERT_NOT_REACHED()s).
191
192         * pcre/pcre_compile.cpp:
193         (compile_branch):
194         * pcre/pcre_exec.cpp:
195         (match):
196
197 2007-11-29  Eric Seidel  <eric@webkit.org>
198
199         Reviewed by Mark Rowe.
200         
201         Fix for --guard crash of fast/js/regexp-charclass-crash introduced by r28151.
202
203         * pcre/pcre_compile.cpp:
204         (is_anchored):
205
206 2007-11-28  Mark Rowe  <mrowe@apple.com>
207
208         Gtk build fix.  Rubber-stamped by Eric.
209
210         * pcre/pcre_exec.cpp:
211         (match): Add braces around the body of the case statement to prevent
212         wanings about jumps across the initialization of a variable.
213
214 2007-11-29  Eric Seidel  <eric@webkit.org>
215
216         Reviewed by Mark Rowe.
217         
218         Attempt to fix non-mac builds after PCRE cleanup.
219
220         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
221         * JavaScriptCoreSources.bkl:
222         * pcre/pcre.pri:
223
224 2007-11-28  Eric Seidel  <eric@webkit.org>
225
226         Reviewed by Maciej.
227
228         Centralize code for subjectPtr adjustments using inlines, only ever check for a single trailing surrogate (as UTF16 only allows one), possibly fix PCRE bugs involving char classes and garbled UTF16 strings.
229
230         * pcre/pcre_exec.cpp:
231         (match):
232         (jsRegExpExecute):
233         * pcre/pcre_internal.h:
234         (getPreviousChar):
235         (movePtrToPreviousChar):
236         (movePtrToNextChar):
237         (movePtrToStartOfCurrentChar):
238
239 2007-11-28  Eric Seidel  <eric@webkit.org>
240
241         Reviewed by Maciej.
242
243         change getChar* functions to return result and push 'c' into local scopes for clarity
244
245         * pcre/pcre_compile.cpp:
246         (compile_branch):
247         (calculateCompiledPatternLengthAndFlags):
248         * pcre/pcre_exec.cpp:
249         (match):
250         * pcre/pcre_internal.h:
251         (getChar):
252         (getCharAndAdvance):
253         (getCharAndLength):
254         (getCharAndAdvanceIfSurrogate):
255
256 2007-11-28  Eric Seidel  <eric@webkit.org>
257
258         Reviewed by Sam.
259
260         Comment cleanup
261
262         * pcre/pcre_exec.cpp:
263         (match):
264
265 2007-11-26  Eric Seidel  <eric@webkit.org>
266
267         Reviewed by Sam.
268
269         Further cleanups to calculateCompiledPatternLengthAndFlags
270
271         * pcre/pcre_compile.cpp:
272         (calculateCompiledPatternLengthAndFlags):
273         * pcre/pcre_internal.h:
274
275 2007-11-26  Eric Seidel  <eric@webkit.org>
276
277         Reviewed by Sam.
278
279         Give consistent naming to the RegExp options/compile flags
280
281         * pcre/pcre_compile.cpp:
282         (compile_branch):
283         (is_anchored):
284         (find_firstassertedchar):
285         (printCompiledRegExp):
286         (jsRegExpCompile):
287         * pcre/pcre_exec.cpp:
288         (jsRegExpExecute):
289         * pcre/pcre_internal.h:
290
291 2007-11-26  Eric Seidel  <eric@webkit.org>
292
293         Reviewed by Sam.
294
295         Pull first_byte and req_byte optimizations out into separate static funtions, SunSpider reported this as a win.
296
297         * pcre/pcre_exec.cpp:
298         (tryFirstByteOptimization):
299         (tryRequiredByteOptimization):
300         (jsRegExpExecute):
301         * pcre/pcre_internal.h:
302
303 2007-11-26  Eric Seidel  <eric@webkit.org>
304
305         Reviewed by Maciej.
306
307         give PCRE_MULTILINE a better name: OptionMatchAcrossMultipleLines
308
309         * pcre/pcre_compile.cpp:
310         (compile_branch):
311         (is_anchored):
312         (printCompiledRegExp):
313         (jsRegExpCompile):
314         * pcre/pcre_exec.cpp:
315         (jsRegExpExecute):
316         * pcre/pcre_internal.h:
317
318 2007-11-26  Eric Seidel  <eric@webkit.org>
319
320         Reviewed by Oliver.
321
322         Deprecate jsRegExpExecute's offset-vector fallback code
323
324         * pcre/pcre_exec.cpp:
325         (jsRegExpExecute):
326
327 2007-11-26  Eric Seidel  <eric@webkit.org>
328
329         Reviewed by Maciej.
330
331         Make cur_is_word and prev_is_word locals, and change OP_ANY to OP_ANY_CHAR for clarity
332
333         * pcre/pcre_compile.cpp:
334         (find_fixedlength):
335         (compile_branch):
336         (canApplyFirstCharOptimization):
337         * pcre/pcre_exec.cpp:
338         (match):
339         * pcre/pcre_internal.h:
340
341 2007-11-26  Eric Seidel  <eric@webkit.org>
342
343         Reviewed by Mitz & Maciej.
344
345         Change _NC operators to use _IGNORING_CASE for clarity
346
347         * pcre/pcre_compile.cpp:
348         (find_fixedlength):
349         (compile_branch):
350         (find_firstassertedchar):
351         * pcre/pcre_exec.cpp:
352         (match):
353         * pcre/pcre_internal.h:
354
355 2007-11-26  Eric Seidel  <eric@webkit.org>
356
357         Reviewed by Mitz.
358
359         Remove branch from return
360
361         * pcre/pcre_compile.cpp:
362         (compile_branch):
363         * pcre/pcre_exec.cpp:
364         (match):
365
366 2007-11-26  Eric Seidel  <eric@webkit.org>
367
368         Reviewed by Maciej.
369
370         Add repeatInformationFromInstructionOffset inline
371
372         * pcre/pcre_exec.cpp:
373         (repeatInformationFromInstructionOffset):
374         (match):
375
376 2007-11-26  Eric Seidel  <eric@webkit.org>
377
378         Reviewed by Maciej.
379
380         Remove no longer used error code JSRegExpErrorMatchLimit
381
382         * kjs/regexp.cpp:
383         (KJS::RegExp::match):
384         * pcre/pcre.h:
385         * pcre/pcre_internal.h:
386
387 2007-11-26  Eric Seidel  <eric@webkit.org>
388
389         Reviewed by Sam.
390
391         Make i locally scoped for better code clarity
392
393         * pcre/pcre_exec.cpp:
394         (match):
395
396 2007-11-26  Eric Seidel  <eric@webkit.org>
397
398         Reviewed by Maciej.
399
400         Give subjectPtr and instructionPtr sane names, reduce size of MatchFrame for a 0.2% speedup.
401
402         * pcre/pcre_compile.cpp:
403         (compile_branch):
404         (calculateCompiledPatternLengthAndFlags):
405         * pcre/pcre_exec.cpp:
406         (match_ref):
407         (MatchStack::pushNewFrame):
408         (getUTF8CharAndIncrementLength):
409         (match):
410         * pcre/pcre_internal.h:
411         (getChar):
412         (getCharAndAdvance):
413         (getCharAndLength):
414         (getCharAndAdvanceIfSurrogate):
415         * pcre/pcre_xclass.cpp:
416         (getUTF8CharAndAdvancePointer):
417
418 2007-11-26  Eric Seidel  <eric@webkit.org>
419
420         Reviewed by Sam.
421
422         Small speedup (0.7%) by simplifying canUseStackBufferForNextFrame() check
423
424         * pcre/pcre_exec.cpp:
425         (MatchStack::MatchStack):
426         (MatchStack::popCurrentFrame):
427
428 2007-11-25  Eric Seidel  <eric@webkit.org>
429
430         Reviewed by Sam.
431
432         Lower MATCH_LIMIT_RECURSION to more sane levels to prevent hangs on run-javascriptcore-tests
433
434         * pcre/pcre_internal.h:
435
436 2007-11-25  Eric Seidel  <eric@webkit.org>
437
438         Reviewed by Maciej.
439
440         Remove match_is_group variable for another 5% speedup
441
442         * pcre/pcre_compile.cpp:
443         * pcre/pcre_exec.cpp:
444         (startNewGroup):
445         (match):
446
447 2007-11-28  Eric Seidel  <eric@webkit.org>
448
449         Reviewed by Sam.
450
451         Abstract frame variables into locals and args
452
453         * pcre/pcre_compile.cpp:
454         (compile_branch):
455         * pcre/pcre_exec.cpp:
456         (match):
457         * pcre/pcre_internal.h:
458
459 2007-11-28  Eric Seidel  <eric@webkit.org>
460
461         Reviewed by Sam.
462
463         Section off MatchData arguments into args struct
464
465         * pcre/pcre_exec.cpp:
466         (MatchStack::pushNewFrame):
467         (match):
468
469 2007-11-24  Eric Seidel  <eric@webkit.org>
470
471         Reviewed by Sam.
472
473         Remove redundant eptrblock struct
474
475         * pcre/pcre_exec.cpp:
476         (MatchStack::pushNewFrame):
477         (match):
478
479 2007-11-24  Eric Seidel  <eric@webkit.org>
480
481         Reviewed by Maciej.
482
483         Remove redundant match_call_count and move recursion check out of super-hot code path
484         SunSpider says this is at least an 8% speedup for regexp.
485
486         * pcre/pcre_exec.cpp:
487         (MatchStack::MatchStack):
488         (MatchStack::pushNewFrame):
489         (MatchStack::popCurrentFrame):
490         (MatchStack::popAllFrames):
491         (match):
492         (jsRegExpExecute):
493         * pcre/pcre_internal.h:
494
495 2007-11-24  Eric Seidel  <eric@webkit.org>
496
497         Reviewed by Sam.
498
499         Get rid of GETCHAR* macros, replacing them with better named inlines
500
501         * pcre/pcre_compile.cpp:
502         (compile_branch):
503         (calculateCompiledPatternLengthAndFlags):
504         * pcre/pcre_exec.cpp:
505         (match):
506         * pcre/pcre_internal.h:
507         (getCharAndAdvance):
508         (getCharAndLength):
509         (getCharAndAdvanceIfSurrogate):
510
511 2007-11-24  Eric Seidel  <eric@webkit.org>
512
513         Reviewed by Sam.
514
515         Further cleanup GET/PUT inlines
516
517         * pcre/pcre_internal.h:
518         (putOpcodeValueAtOffset):
519         (getOpcodeValueAtOffset):
520         (putOpcodeValueAtOffsetAndAdvance):
521         (put2ByteOpcodeValueAtOffset):
522         (get2ByteOpcodeValueAtOffset):
523         (put2ByteOpcodeValueAtOffsetAndAdvance):
524
525 2007-11-24  Eric Seidel  <eric@webkit.org>
526
527         Reviewed by Sam.
528
529         Give GET, PUT better names, and add (poor) moveOpcodePtrPastAnyAlternateBranches
530
531         * pcre/pcre_compile.cpp:
532         (firstSignificantOpCodeSkippingAssertions):
533         (find_fixedlength):
534         (complete_callout):
535         (compile_branch):
536         (compile_regex):
537         (is_anchored):
538         (canApplyFirstCharOptimization):
539         (find_firstassertedchar):
540         * pcre/pcre_exec.cpp:
541         (match):
542         * pcre/pcre_internal.h:
543         (putOpcodeValueAtOffset):
544         (getOpcodeValueAtOffset):
545         (putOpcodeValueAtOffsetAndAdvance):
546         (put2ByteOpcodeValueAtOffset):
547         (get2ByteOpcodeValueAtOffset):
548         (moveOpcodePtrPastAnyAlternateBranches):
549         * pcre/pcre_ucp_searchfuncs.cpp:
550         (_pcre_ucp_othercase):
551
552 2007-11-24  Eric Seidel  <eric@webkit.org>
553
554         Reviewed by Sam.
555
556         Add inlines for toLowerCase, isWordChar, isSpaceChar for further regexp speedup
557
558         * pcre/pcre_compile.cpp:
559         (compile_branch):
560         (jsRegExpCompile):
561         * pcre/pcre_exec.cpp:
562         (match):
563         (jsRegExpExecute):
564         * pcre/pcre_internal.h:
565         (toLowerCase):
566         (flipCase):
567         (classBitmapForChar):
568         (charTypeForChar):
569         (isWordChar):
570         (isSpaceChar):
571         (CompileData::CompileData):
572         * pcre/pcre_xclass.cpp:
573         (_pcre_xclass):
574
575 2007-11-24  Eric Seidel  <eric@webkit.org>
576
577         Reviewed by Sam.
578
579         cleanup _pcre_ucp_othercase
580
581         * pcre/pcre_ucp_searchfuncs.cpp:
582         (_pcre_ucp_othercase):
583
584 2007-11-24  Eric Seidel  <eric@webkit.org>
585
586         Reviewed by Maciej.
587
588         Use better variable names for case ignoring options
589
590         * pcre/pcre_compile.cpp:
591         (compile_branch):
592         (find_firstassertedchar):
593         (printCompiledRegExp):
594         (jsRegExpCompile):
595         * pcre/pcre_exec.cpp:
596         (match_ref):
597         (match):
598         (jsRegExpExecute):
599         * pcre/pcre_internal.h:
600
601 2007-11-24  Eric Seidel  <eric@webkit.org>
602
603         Reviewed by Sam.
604
605         split first_significant_code into two simpler functions
606
607         * pcre/pcre_compile.cpp:
608         (firstSignificantOpCode):
609         (firstSignificantOpCodeSkippingAssertions):
610         (is_anchored):
611         (canApplyFirstCharOptimization):
612         (find_firstassertedchar):
613
614 2007-11-24  Eric Seidel  <eric@webkit.org>
615
616         Reviewed by Sam.
617
618         clean up is_counted_repeat
619
620         * pcre/pcre_compile.cpp:
621         (is_counted_repeat):
622
623 2007-11-24  Eric Seidel  <eric@webkit.org>
624
625         Reviewed by Sam.
626
627         clean up check_escape
628
629         * pcre/pcre_compile.cpp:
630         (check_escape):
631
632 2007-11-24  Eric Seidel  <eric@webkit.org>
633
634         Reviewed by Sam.
635
636         Reformat find_fixedlength
637
638         * pcre/pcre_compile.cpp:
639         (find_fixedlength):
640
641 2007-11-24  Eric Seidel  <eric@webkit.org>
642
643         Reviewed by Sam.
644
645         reformat is_anchored
646
647         * pcre/pcre_compile.cpp:
648         (is_anchored):
649
650 2007-11-24  Eric Seidel  <eric@webkit.org>
651
652         Reviewed by Maciej.
653
654         Remove unused function could_be_empty_branch
655
656         * pcre/pcre_compile.cpp:
657         (first_significant_code):
658         (find_fixedlength):
659         (compile_branch):
660         (canApplyFirstCharOptimization):
661
662 2007-11-24  Eric Seidel  <eric@webkit.org>
663
664         Reviewed by Sam.
665
666         Pass around MatchData objects by reference
667
668         * pcre/pcre_exec.cpp:
669         (pchars):
670         (match_ref):
671         (match):
672         (jsRegExpExecute):
673
674 2007-11-24  Eric Seidel  <eric@webkit.org>
675
676         Reviewed by Sam.
677
678         give PCRE_STARTLINE a better name and rename match_data to MatchData
679
680         * pcre/pcre_compile.cpp:
681         (compile_branch):
682         (canApplyFirstCharOptimization):
683         (find_firstassertedchar):
684         (printCompiledRegExp):
685         (jsRegExpCompile):
686         * pcre/pcre_exec.cpp:
687         (pchars):
688         (jsRegExpExecute):
689         * pcre/pcre_internal.h:
690
691 2007-11-24  Eric Seidel  <eric@webkit.org>
692
693         Reviewed by Sam.
694
695         Clean up find_firstassertedchar
696
697         * pcre/pcre_compile.cpp:
698         (get_othercase_range):
699         (find_firstassertedchar):
700         (calculateCompiledPatternLengthAndFlags):
701
702 2007-11-24  Eric Seidel  <eric@webkit.org>
703
704         Reviewed by Tim Hatcher.
705
706         Pass around CompileData& instead of CompileData*
707
708         * pcre/pcre_compile.cpp:
709         (compile_branch):
710         (jsRegExpCompile):
711
712 2007-11-24  Eric Seidel  <eric@webkit.org>
713
714         Reviewed by Sam.
715
716         Clean up compile_branch, move _pcre_ord2utf8, and rename CompileData
717
718         * JavaScriptCore.xcodeproj/project.pbxproj:
719         * pcre/pcre_compile.cpp:
720         (_pcre_ord2utf8):
721         (calculateCompiledPatternLengthAndFlags):
722         (jsRegExpCompile):
723         * pcre/pcre_internal.h:
724         * pcre/pcre_ord2utf8.cpp: Removed.
725
726 2007-11-24  Eric Seidel  <eric@webkit.org>
727
728         Reviewed by Sam.
729
730         removing more macros
731
732         * pcre/pcre_compile.cpp:
733         (could_be_empty_branch):
734         (compile_branch):
735         (calculateCompiledPatternLengthAndFlags):
736         * pcre/pcre_exec.cpp:
737         (match):
738         (jsRegExpExecute):
739         * pcre/pcre_internal.h:
740         * pcre/pcre_xclass.cpp:
741
742 2007-11-24  Eric Seidel  <eric@webkit.org>
743
744         Reviewed by Maciej.
745
746         clean up formating in compile_branch
747
748         * pcre/pcre_compile.cpp:
749         (compile_branch):
750
751 2007-11-24  Eric Seidel  <eric@webkit.org>
752
753         Reviewed by Sam.
754
755         Fix spacing for read_repeat_counts
756
757         * pcre/pcre_compile.cpp:
758         (read_repeat_counts):
759
760 2007-11-24  Eric Seidel  <eric@webkit.org>
761
762         Reviewed by Sam.
763
764         Get rid of PCRE custom char types
765
766         * pcre/pcre_compile.cpp:
767         (check_escape):
768         (complete_callout):
769         (compile_branch):
770         (compile_regex):
771         (calculateCompiledPatternLengthAndFlags):
772         (jsRegExpCompile):
773         * pcre/pcre_exec.cpp:
774         (match_ref):
775         (match):
776         (jsRegExpExecute):
777         * pcre/pcre_internal.h:
778
779 2007-11-24  Eric Seidel  <eric@webkit.org>
780
781         Reviewed by Sam.
782
783         reformat get_othercase_range
784
785         * pcre/pcre_compile.cpp:
786         (get_othercase_range):
787
788 2007-11-24  Eric Seidel  <eric@webkit.org>
789
790         Reviewed by Maciej.
791
792         Remove register keyword and more cleanup
793
794         * pcre/pcre_compile.cpp:
795         (find_fixedlength):
796         (compile_branch):
797         (is_anchored):
798         (is_startline):
799         (find_firstassertedchar):
800         (calculateCompiledPatternLengthAndFlags):
801         (jsRegExpCompile):
802         * pcre/pcre_exec.cpp:
803         (MatchStack::canUseStackBufferForNextFrame):
804         (MatchStack::allocateNextFrame):
805         (MatchStack::pushNewFrame):
806         (MatchStack::frameIsStackAllocated):
807         (MatchStack::popCurrentFrame):
808         (MatchStack::unrollAnyHeapAllocatedFrames):
809         (getUTF8CharAndIncrementLength):
810         (match):
811         (jsRegExpExecute):
812         * pcre/pcre_internal.h:
813         (PUT2INC):
814         (isLeadingSurrogate):
815         (isTrailingSurrogate):
816         (decodeSurrogatePair):
817         (getChar):
818         * pcre/pcre_ord2utf8.cpp:
819         (_pcre_ord2utf8):
820         * pcre/pcre_xclass.cpp:
821         (getUTF8CharAndAdvancePointer):
822         (_pcre_xclass):
823
824 2007-11-24  Eric Seidel  <eric@webkit.org>
825
826         Reviewed by Maciej.
827
828         Clean up jsRegExpExecute
829
830         * pcre/pcre_compile.cpp:
831         (returnError):
832         (jsRegExpCompile):
833         * pcre/pcre_exec.cpp:
834         (jsRegExpExecute):
835         * pcre/pcre_internal.h:
836
837 2007-11-29  Oliver Hunt  <oliver@apple.com>
838
839         Reviewed by Geoff.
840
841         Merging updated system alloc and spinlock code from r38 of TCMalloc.
842
843         This is needed as a precursor to the merge of TCMalloc proper.
844
845         * wtf/FastMalloc.cpp:
846         (WTF::TCMalloc_PageHeap::GrowHeap):
847         * wtf/TCSpinLock.h:
848         (TCMalloc_SpinLock::TCMalloc_SpinLock):
849         (TCMalloc_SpinLock::):
850         (TCMalloc_SpinLock::Lock):
851         (TCMalloc_SpinLock::Unlock):
852         (TCMalloc_SpinLock::IsHeld):
853         * wtf/TCSystemAlloc.cpp:
854         (TrySbrk):
855         (TryMmap):
856         (TryVirtualAlloc):
857         (TryDevMem):
858         (TCMalloc_SystemAlloc):
859         * wtf/TCSystemAlloc.h:
860
861 2007-11-28  Brady Eidson <beidson@apple.com>
862
863         Reviewed by Geoff
864
865         Add copyKeysToVector utility, mirroring copyValuesToVector
866         Also change the copyValuesToVector implementation to be a little more attractive
867
868         * wtf/HashMap.h:
869         (WTF::copyKeysToVector):
870         (WTF::copyValuesToVector):
871
872 2007-11-27  Alp Toker  <alp@atoker.com>
873
874         Reviewed by Mark Rowe.
875
876         Add a list of public JavaScriptCore headers for installation.
877
878         This follows the convention used for the Qt and GTK+ header lists.
879
880         * headers.pri: Added.
881
882 2007-11-27  Alp Toker  <alp@atoker.com>
883
884         Prospective MSVC build fix.
885
886         Roll back dllexport/dllimport support for now.
887
888         * API/JSBase.h:
889
890 2007-11-27  Alp Toker  <alp@atoker.com>
891
892         Reviewed by Maciej.
893
894         http://bugs.webkit.org/show_bug.cgi?id=15569
895         [gtk] GTK JavaScriptCore needs to export symbols for JSC API and WTF
896
897         Introduce JS_EXPORT to mark symbols to be exported as public API.
898
899         Export all public symbols in the JavaScriptCore C API.
900
901         This matches conventions for exporting symbols set by the CF and CG
902         frameworks.
903
904         * API/JSBase.h:
905         * API/JSContextRef.h:
906         * API/JSObjectRef.h:
907         * API/JSStringRef.h:
908         * API/JSStringRefBSTR.h:
909         * API/JSStringRefCF.h:
910         * API/JSValueRef.h:
911
912 2007-11-27  Anders Carlsson  <andersca@apple.com>
913
914         Reviewed by Adam.
915
916         Make PropertyNameArray and ScopeChain COMEnumVariant friendly.
917         
918         * kjs/PropertyNameArray.cpp:
919         (KJS::PropertyNameArray::swap):
920         Implement PropertyNameArray::swap.
921         
922         * kjs/PropertyNameArray.h:
923         Add ValueType typedef. Replace PropertyNameArrayIterator with 
924         PropertyNameArray::const_iterator.
925         
926         * kjs/nodes.cpp:
927         (KJS::ForInNode::execute):
928         * kjs/scope_chain.cpp:
929         (KJS::ScopeChain::print):
930         Update for changes to PropertyNameArray.
931         
932         * kjs/scope_chain.h:
933         Add const_iterator and ValueType typedef.
934         
935 2007-11-27  Anders Carlsson  <andersca@apple.com>
936
937         Reviewed by Darin.
938
939         Add a ValueType typedef.
940         
941         * wtf/Vector.h:
942
943 2007-11-26  Darin Adler  <darin@apple.com>
944
945         Reviewed by Mitz.
946
947         - fix http://bugs.webkit.org/show_bug.cgi?id=16096
948           REGRESSION (r26653-r26699): Plaxo.com addressbook does not load in webkit nightlies
949
950         Test: fast/js/regexp-overflow.html
951
952         * pcre/pcre_compile.cpp: (calculateCompiledPatternLengthAndFlags):
953         Removed a stray "ptr++" that I added by accident when merging the
954         changes between PCRE 6.4 and 6.5. 
955
956 2007-11-26  Geoffrey Garen  <ggaren@apple.com>
957
958         Reviewed by Kevin McCullough.
959         
960         Fixed <rdar://problem/5597937> REGRESSION (r27126): Drosera does not 
961         show variables (can't enumerate ActivationImp properties)
962         
963         Implemented a custom ActivationImp::getPropertyNames, since 
964         ActivationImp now uses a custom property storage mechanism for local
965         variables.
966
967         * kjs/function.cpp:
968         (KJS::ActivationImp::getPropertyNames):
969         * kjs/function.h:
970
971 2007-11-26  Alp Toker  <alp@atoker.com>
972
973         GTK+/Qt/Wx build fix for breakage introduced in r28039.
974
975         * ForwardingHeaders/JavaScriptCore/JSRetainPtr.h: Added.
976
977 2007-11-24  Laszlo Gombos  <laszlo.gombos@gmail.com>
978
979         Reviewed by Maciej Stachowiak.
980
981         Fix minor compiler warning (GCC 4.1.3)
982
983         * pcre/pcre_internal.h:
984         * pcre/pcre_ucp_searchfuncs.cpp:
985         (_pcre_ucp_othercase):
986
987 2007-11-25  Mark Rowe  <mrowe@apple.com>
988
989         Reviewed by Dan Bernstein.
990
991         Fix http://bugs.webkit.org/show_bug.cgi?id=16129
992         Bug 16129: REGRESSION (r27761-r27811): malloc error while visiting http://mysit.es (crashes release build)
993
994         * pcre/pcre_compile.cpp: Change errorcode to be passed by reference so that any error code is propagated
995         to our caller like they expect.
996
997 2007-11-23  Kevin Ollivier  <kevino@theolliviers.com>
998
999         MSVC7 build fix. (rand_s doesn't exist there)
1000
1001         Reviewed by Adam Roben.
1002
1003         * kjs/config.h:
1004         * wtf/MathExtras.h:
1005
1006 2007-11-23  Kevin Ollivier  <kevino@theolliviers.com>
1007
1008         wx build fix. Move WX_PYTHON logic into project build settings,
1009         add WebKitLibraries dirs on Win, and explicitly include JSCore 
1010         headers in testkjs rather than getting them from a template.
1011         (Include dir order of JSCore/WTF and ICU headers is important due  
1012         to wtf/unicode/utf8.h.)
1013
1014         * jscore.bkl:
1015
1016 2007-11-23  Simon Hausmann  <hausmann@webkit.org>
1017
1018         Reviewed by George Staikos <staikos@kde.org>.
1019
1020         Fix make (dist)clean on Windows.
1021         
1022         OBJECTS_DIR_WTR does not exist anymore, use GENERATED_SOURCES_DIR.
1023         
1024
1025         * JavaScriptCore.pri:
1026         * pcre/pcre.pri:
1027
1028 2007-11-22  Simon Hausmann  <hausmann@kde.org>
1029
1030         Reviewed by George.
1031
1032         Make the directory of where to put the generated sources configurable through the GENERATED_SOURCE_DIR variable
1033
1034         * JavaScriptCore.pri:
1035         * pcre/pcre.pri:
1036
1037 2007-11-22  Simon Hausmann  <hausmann@kde.org>
1038
1039         Reviewed by George.
1040
1041         Centralize the setup for all the extra compilers in a addExtraCompiler function.
1042         
1043         This allows adding a "generated_files" target that builds all generated files using "make generated_files".
1044         For the build inside Qt we do not generate actual rules for the extra compilers but instead
1045         do the variable substitution of compiler.output manually and add the generated sources to SOURCES.
1046
1047         * JavaScriptCore.pri:
1048         * pcre/pcre.pri:
1049
1050 2007-11-20  Mark Rowe  <mrowe@apple.com>
1051
1052         Reviewed by Tim Hatcher.
1053
1054         <rdar://problem/5602936> Need to resolve new GCC 4.2 warnings
1055
1056         Fix all warnings emitted by GCC 4.2 when building JavaScriptCore.  This allows builds with
1057         -Werror to succeed.  At present they will crash when executed due to code that is not safe
1058         under strict aliasing (<rdar://problem/5536806>).
1059
1060         * Configurations/Base.xcconfig: Remove the -Wno-long-double flag.
1061         * kjs/date_object.cpp:
1062         (KJS::formatTime): Test whether the stack-allocated string is empty rather than at a non-null address.
1063         * kjs/dtoa.cpp:
1064         (Bigint::): Tweak formatting to silence warnings.
1065         * pcre/pcre_exec.cpp:
1066         (match): Tweak formatting to silence warnings
1067         * wtf/Assertions.cpp: Add printf format attribute to functions that warrant it.
1068         * wtf/Assertions.h: Ditto.
1069
1070 2007-11-19  Kevin Ollivier  <kevino@theolliviers.com>
1071
1072         wx port build fix (wx headers include ctype functions).
1073
1074         * kjs/config.h:
1075
1076 2007-11-19  Kevin Ollivier  <kevino@theolliviers.com>
1077
1078         Remove outdated and unused Windows port files.
1079
1080         Reviewed by Adam Roben.
1081
1082         * Makefile.vc: Removed.
1083         * README-Win32.txt: Removed.
1084
1085 2007-11-18  Eric Seidel  <eric@webkit.org>
1086
1087         Reviewed by Oliver.
1088
1089         * tests/mozilla/jsDriver.pl: exit non-0 when user aborts test run
1090
1091 2007-11-17  Mark Rowe  <mrowe@apple.com>
1092
1093         Reviewed by Darin Adler.
1094
1095         Fix: <rdar://problem/5607032> REGRESSION: testapi exits with assertion failure in debug build
1096              <rdar://problem/5440659> JSGlobalContextCreate throws away globalObjectClass's prototype
1097              http://bugs.webkit.org/show_bug.cgi?id=16033
1098
1099         Split Interpreter's initialization into two distinct steps:  the creation of the global prototypes
1100         and constructors, and storing them on the global object.  This allows JSClassRef's passed to
1101         JSGlobalContextCreate to be instantiated with the correct prototype.
1102
1103         * API/JSCallbackObject.cpp: Assert at compile-time that the custom global object will fit in a collector cell.
1104         * API/JSCallbackObject.h:
1105         * API/JSCallbackObjectFunctions.h:
1106         (KJS::::JSCallbackObject):
1107         (KJS::::init):
1108         * API/JSContextRef.cpp:
1109         (JSGlobalContextCreate): Construct and set the interpreter's global object separately.  When globalObjectClass
1110         is passed we need to set the interpreter's global object before doing the JSCallbackObject's initialization to
1111         prevent any JSObjectInitializeCallback's being invoked before a global object is set.
1112         * API/testapi.c:
1113         (globalObject_initialize): Test the object passed in is correct and that it has the expected global properties.
1114         (globalObject_get):
1115         (globalObject_set):
1116         (main):
1117         * API/testapi.js: Test that any static properties exposed by the global object's custom class are found.
1118         * JavaScriptCore.exp:
1119         * bindings/testbindings.cpp:
1120         (main): Update for changes in Interpreter method signatures.
1121         * bindings/testbindings.mm:
1122         (main): Ditto.
1123         * kjs/ExecState.cpp:
1124         (KJS::ExecState::ExecState):
1125         (KJS::ExecState::mark):
1126         (KJS::ExecState::setGlobalObject):
1127         * kjs/ExecState.h: Rename scope to m_scopeChain.
1128         * kjs/interpreter.cpp:
1129         (KJS::Interpreter::Interpreter):
1130         (KJS::Interpreter::init):
1131         (KJS::Interpreter::globalObject):
1132         (KJS::Interpreter::setGlobalObject):
1133         (KJS::Interpreter::resetGlobalObjectProperties):
1134         (KJS::Interpreter::createObjectsForGlobalObjectProperties):
1135         (KJS::Interpreter::setGlobalObjectProperties): Switch to using putDirect to ensure that the global object's put method
1136         cannot interfere with setting of the global properties.  This prevents a user-written JSClassRef from attempting to
1137         call back into JavaScript from the initialization of the global object's members.
1138         * kjs/interpreter.h:
1139         * kjs/testkjs.cpp:
1140         (setupInterpreter): Update for changes in Interpreter method signatures.
1141
1142 2007-11-17  Mark Rowe  <mrowe@apple.com>
1143
1144         Reviewed by Sam Weinig.
1145
1146         Prevent testapi from reporting false leaks.  Clear out local variables pointing at
1147         JSObjectRefs to allow their values to be collected.
1148
1149         * API/testapi.c:
1150         (main):
1151
1152 2007-11-17  Mark Rowe  <mrowe@apple.com>
1153
1154         Reviewed by Sam Weinig.
1155
1156         Prevent testapi from crashing if testapi.js can not be found by nil-checking the result of createStringWithContentsOfFile.
1157
1158         * API/testapi.c:
1159         (main):
1160
1161 2007-11-17  Alp Toker  <alp@atoker.com>
1162
1163         Reviewed by Eric.
1164
1165         http://bugs.webkit.org/show_bug.cgi?id=16032
1166         JS minidom is not portable
1167
1168         Use a plain UTF-8 string instead of a CFString.
1169
1170         Print to stdout, not stderr like CFShow() would have done, since that
1171         behaviour seems unintentional.
1172
1173         * API/minidom.c:
1174         (main):
1175
1176 2007-11-17  Steve Falkenburg  <sfalken@apple.com>
1177
1178         Windows build fix.
1179
1180         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
1181
1182 2007-11-16  Mark Rowe  <mrowe@apple.com>
1183
1184         Windows build fix.
1185
1186         * kjs/lexer.cpp:
1187         (KJS::Lexer::record8):
1188
1189 2007-11-16  Mark Rowe  <mrowe@apple.com>
1190
1191         Reviewed by Eric.
1192
1193         Replace strings, identifier, buffer8 and buffer16 members of Lexer with vectors.
1194         SunSpider claims this is a 0.7% speedup.
1195
1196         * kjs/lexer.cpp:
1197         (KJS::Lexer::Lexer):
1198         (KJS::Lexer::lex):
1199         (KJS::Lexer::record8):
1200         (KJS::Lexer::record16):
1201         (KJS::Lexer::scanRegExp):
1202         (KJS::Lexer::clear):
1203         (KJS::Lexer::makeIdentifier):
1204         (KJS::Lexer::makeUString):
1205         * kjs/lexer.h:
1206         * kjs/ustring.cpp:
1207         (KJS::UString::UString): Add a convenience constructor that takes a const Vector<UChar>&.
1208         * kjs/ustring.h:
1209
1210 2007-11-16  Adam Roben  <aroben@apple.com>
1211
1212         Windows build fix
1213
1214         * JavaScriptCore.vcproj/testkjs/testkjs.vcproj: Add a new include path
1215         and ignore the int -> bool conversion warning.
1216
1217 2007-11-16  Alexey Proskuryakov  <ap@webkit.org>
1218
1219         Fix Windows debug build.
1220         Rubber-stamped by Eric
1221
1222         * pcre/pcre_exec.cpp: (match): Removed ASSERT_NOT_REACHED assertions that were making MSVC
1223         complain about unreachable code.
1224
1225 2007-11-15  Mark Rowe  <mrowe@apple.com>
1226
1227         Gtk build fix.
1228
1229         * kjs/Parser.cpp:
1230
1231 2007-11-15  Mark Rowe  <mrowe@apple.com>
1232
1233         Mac build and header search path sanity fix.
1234
1235         Reviewed by Sam Weinig and Tim Hatcher.
1236
1237         Move base setting for HEADER_SEARCH_PATHS into Base.xcconfig, and extend
1238         it in JavaScriptCore.xcconfig.  This removes the need to override it on a
1239         per-target basis inside the .xcodeproj file.
1240
1241         * Configurations/Base.xcconfig:
1242         * Configurations/JavaScriptCore.xcconfig:
1243         * JavaScriptCore.xcodeproj/project.pbxproj:
1244
1245 2007-11-15  Mark Rowe  <mrowe@apple.com>
1246
1247         Qt build fix.
1248
1249         * kjs/Parser.h:
1250
1251 2007-11-15  Geoffrey Garen  <ggaren@apple.com>
1252
1253         Reviewed by Eric Seidel.
1254
1255         Another round of grammar / parsing cleanup.
1256         
1257         1. Created distinct parser calls for parsing function bodies vs
1258         programs. This will help later with optimizing global variable access.
1259         
1260         2. Turned Parser into a singleton. Cleaned up Lexer's singleton 
1261         interface.
1262         
1263         3. Modified Lexer to free a little more memory when done lexing. (Added
1264         FIXMEs for similar issues that I didn't fix.)
1265         
1266         4. Changed Lexer::makeIdentifier and Lexer::makeUString to start 
1267         respecting the arguments passed to them. (No behavior change, but this
1268         problem could have caused serious problems for an unsuspecting user of
1269         these functions.)
1270         
1271         5. Removed KJS_DEBUG_MEM because it was bit-rotted.
1272         
1273         6. Removed Parser::prettyPrint because the same work was simpler to do
1274         at the call site.
1275         
1276         7. Some renames:
1277         
1278             "Parser::accept" => "Parser::didFinishParsing"
1279             "Parser::sid" => "Parser::m_sourceID"
1280             "Lexer::doneParsing" => "Lexer::clear"
1281             "sid" => "sourceId"
1282             "lineno" => "lineNo"
1283         
1284         * JavaScriptCore.exp:
1285         * kjs/Parser.cpp:
1286         (KJS::Parser::Parser):
1287         (KJS::Parser::parseProgram):
1288         (KJS::Parser::parseFunctionBody):
1289         (KJS::Parser::parse):
1290         (KJS::Parser::didFinishParsing):
1291         (KJS::parser):
1292         * kjs/Parser.h:
1293         (KJS::Parser::sourceId):
1294         * kjs/function.cpp:
1295         (KJS::GlobalFuncImp::callAsFunction):
1296         * kjs/function_object.cpp:
1297         (FunctionObjectImp::construct):
1298         * kjs/grammar.y:
1299         * kjs/interpreter.cpp:
1300         (KJS::Interpreter::checkSyntax):
1301         (KJS::Interpreter::evaluate):
1302         * kjs/interpreter.h:
1303         * kjs/lexer.cpp:
1304         (kjsyylex):
1305         (KJS::lexer):
1306         (KJS::Lexer::Lexer):
1307         (KJS::Lexer::~Lexer):
1308         (KJS::Lexer::scanRegExp):
1309         (KJS::Lexer::doneParsing):
1310         (KJS::Lexer::makeIdentifier):
1311         (KJS::Lexer::makeUString):
1312         * kjs/lexer.h:
1313         (KJS::Lexer::pattern):
1314         (KJS::Lexer::flags):
1315         (KJS::Lexer::sawError):
1316         * kjs/nodes.cpp:
1317         (KJS::Node::Node):
1318         (KJS::FunctionBodyNode::FunctionBodyNode):
1319         * kjs/nodes.h:
1320         * kjs/testkjs.cpp:
1321         (prettyPrintScript):
1322         (kjsmain):
1323         * kjs/ustring.cpp:
1324         * kjs/ustring.h:
1325
1326 2007-11-15  Oliver Hunt  <oliver@apple.com>
1327
1328         Reviewed by Darin.
1329
1330         <rdar://problem/5601548> REGRESSION: All SourceElements and their children leak after a syntax error
1331         
1332         Add a stub node to maintain the Vector of SourceElements until assignment.
1333
1334         * kjs/grammar.y:
1335         * kjs/nodes.h:
1336         (KJS::SourceElementsStub::SourceElementsStub):
1337         (KJS::SourceElementsStub::append):
1338         (KJS::SourceElementsStub::release):
1339         (KJS::SourceElementsStub::):
1340         (KJS::SourceElementsStub::precedence):
1341
1342 2007-11-15  Eric Seidel  <eric@webkit.org>
1343
1344         Reviewed by Sam.
1345
1346         Abstract most of RMATCH into MatchStack functions.
1347         
1348         SunSpider claims this, combined with the last 2 patches was a 1% speedup, 10% for dna-regexp.
1349
1350         * pcre/pcre_exec.cpp:
1351         (MatchStack::canUseStackBufferForNextFrame):
1352         (MatchStack::allocateNextFrame):
1353         (MatchStack::pushNewFrame):
1354         (MatchStack::frameIsStackAllocated):
1355         (MatchStack::popCurrentFrame):
1356         (MatchStack::unrollAnyHeapAllocatedFrames):
1357         (match):
1358
1359 2007-11-15  Eric Seidel  <eric@webkit.org>
1360
1361         Reviewed by Sam.
1362
1363         Remove RETURN_ERROR, add MatchStack
1364         
1365         * pcre/pcre_exec.cpp:
1366         (MatchStack::MatchStack):
1367         (MatchStack::unrollAnyHeapAllocatedFrames):
1368         (matchError):
1369         (match):
1370         
1371 2007-11-15  Eric Seidel  <eric@webkit.org>
1372
1373         Reviewed by Sam.
1374
1375         Clean up match function to match WebKit style
1376
1377         * JavaScriptCore.xcodeproj/project.pbxproj:
1378         * pcre/pcre_exec.cpp:
1379         (match):
1380
1381 2007-11-15  Steve Falkenburg  <sfalken@apple.com>
1382
1383         Windows build fix.
1384
1385         * JavaScriptCore.vcproj/JavaScriptCore.make:
1386
1387 2007-11-14  Alexey Proskuryakov  <ap@webkit.org>
1388
1389         Reviewed by Darin.
1390
1391         http://bugs.webkit.org/show_bug.cgi?id=15982
1392         Improve JSString UTF-8 decoding
1393
1394         * API/JSStringRef.cpp:
1395         (JSStringCreateWithUTF8CString): Use strict decoding, return 0 on error.
1396
1397         * wtf/unicode/UTF8.cpp:
1398         (WTF::Unicode::convertUTF16ToUTF8):
1399         (WTF::Unicode::convertUTF8ToUTF16):
1400         * wtf/unicode/UTF8.h:
1401         Made these function names start with a lower case letter.
1402
1403         * kjs/ustring.cpp: (KJS::UString::UTF8String): Updated for the above renaming.
1404
1405         * bindings/c/c_utility.cpp:
1406         (KJS::Bindings::convertUTF8ToUTF16WithLatin1Fallback): Renamed to highlight the difference
1407         from convertUTF8ToUTF16 in wtf/unicode.
1408         (KJS::Bindings::convertNPStringToUTF16): Updated for the above renaming.
1409         (KJS::Bindings::identifierFromNPIdentifier): Ditto.
1410         * bindings/c/c_utility.h: Made convertUTF8ToUTF16WithLatin1Fallback() a file static.
1411
1412 2007-11-14  Sam Weinig  <sam@webkit.org>
1413
1414         Rubber-stamped by Anders.
1415
1416         Fix the Xcode project file after it was messed up in r27402.
1417
1418         * JavaScriptCore.xcodeproj/project.pbxproj:
1419
1420 2007-11-14  Eric Seidel  <eric@webkit.org>
1421
1422         Reviewed by Oliver.
1423         
1424         More PCRE style cleanup.
1425
1426         * pcre/pcre_compile.cpp:
1427         (compile_regex):
1428
1429 2007-11-14  Adam Roben  <aroben@apple.com>
1430
1431         Clean up the bison conflict checking script
1432
1433         Reviewed by Geoff.
1434
1435         * DerivedSources.make:
1436
1437 2007-11-14  Eric Seidel  <eric@webkit.org>
1438
1439         Reviewed by Geoff.
1440
1441         Another round of PCRE cleanups: inlines
1442         
1443         SunSpider claims that this, combined with my previous PCRE cleanup were a 0.7% speedup, go figure.
1444
1445         * pcre/pcre_compile.cpp:
1446         (jsRegExpCompile):
1447         * pcre/pcre_exec.cpp:
1448         (match):
1449         (jsRegExpExecute):
1450         * pcre/pcre_internal.h:
1451         (PUT):
1452         (GET):
1453         (PUT2):
1454         (GET2):
1455         (isNewline):
1456
1457 2007-11-14  Eric Seidel  <eric@webkit.org>
1458
1459         Reviewed by Sam.
1460         
1461         Give PCRE a (small) bath.
1462         Fix some formating and break things off into separate functions
1463         http://bugs.webkit.org/show_bug.cgi?id=15993
1464
1465         * pcre/pcre_compile.cpp:
1466         (calculateCompiledPatternLengthAndFlags):
1467         (printCompiledRegExp):
1468         (returnError):
1469         (jsRegExpCompile):
1470         * pcre/pcre_internal.h:
1471         (compile_data::compile_data):
1472
1473 2007-11-14  Geoffrey Garen  <ggaren@apple.com>
1474
1475         Reviewed by Eric Seidel.
1476         
1477         Cleaned up the JavaScript grammar a bit.
1478         
1479         1. Changed BlockNode to always hold a child vector (which may be empty),
1480         eliminating a few NULL-check branches in the common execution case.
1481         
1482         2. Changed the Block production to correctly report its starting and 
1483         ending line numbers to the debugger. (It used to report its ending line
1484         as its starting line.) Also, removed duplicate line-reporting code
1485         inside the BlockNode constructor.
1486         
1487         3. Moved curly braces up from FunctionBody production into parent
1488         productions. (I had to move the line number reporting code, too, since
1489         it depends on the location of the curly braces.) This matches the ECMA
1490         spec more closely, and makes some future changes I plan easier.
1491         
1492         4. Fixed statementList* convenience functions to deal appropriately with
1493         empty Vectors.
1494
1495         SunSpider reports a small and statistically insignificant speedup.
1496
1497         * kjs/grammar.y:
1498         * kjs/nodes.cpp:
1499         (KJS::statementListPushFIFO):
1500         (KJS::statementListGetDeclarations):
1501         (KJS::statementListInitializeDeclarationStack):
1502         (KJS::statementListInitializeVariableAccessStack):
1503         (KJS::BlockNode::BlockNode):
1504         (KJS::BlockNode::optimizeVariableAccess):
1505         (KJS::BlockNode::getDeclarations):
1506         (KJS::BlockNode::execute):
1507         (KJS::FunctionBodyNode::initializeDeclarationStacks):
1508         (KJS::FunctionBodyNode::optimizeVariableAccess):
1509
1510 2007-11-13  Anders Carlsson  <andersca@apple.com>
1511
1512         Add RefCounted.h (And remove Shared.h)
1513         
1514         * JavaScriptCore.vcproj/WTF/WTF.vcproj:
1515
1516 2007-11-13  Geoffrey Garen  <ggaren@apple.com>
1517
1518         Build fix.
1519
1520         * kjs/regexp.h:
1521
1522 2007-11-13  Geoffrey Garen  <ggaren@apple.com>
1523
1524         Reviewed by Anders Carlsson.
1525
1526         Renamed Shared to RefCounted.
1527
1528         * API/JSClassRef.h:
1529         * JavaScriptCore.xcodeproj/project.pbxproj:
1530         * kjs/interpreter.h:
1531         * kjs/regexp.h:
1532         * wtf/RefCounted.h: Copied from JavaScriptCore/wtf/Shared.h.
1533         (WTF::RefCounted::RefCounted):
1534         * wtf/Shared.h: Removed.
1535
1536 2007-11-13  Adam Roben  <aroben@apple.com>
1537
1538         Build fix
1539
1540         Reviewed by Geoff.
1541
1542         * kjs/regexp.h: Added a missing #include.
1543
1544 2007-11-13  Geoffrey Garen  <ggaren@apple.com>
1545
1546         Reviewed by Sam Weinig.
1547
1548         Moved Shared.h into wtf so it could be used in more places. Deployed
1549         Shared in places where JSCore previously had hand-rolled ref-counting
1550         classes.
1551
1552         * API/JSClassRef.cpp:
1553         (OpaqueJSClass::OpaqueJSClass):
1554         * API/JSClassRef.h:
1555         * API/JSObjectRef.cpp:
1556         (JSClassRetain):
1557         (JSClassRelease):
1558         * JavaScriptCore.vcproj/WTF/WTF.vcproj:
1559         * JavaScriptCore.xcodeproj/project.pbxproj:
1560         * kjs/interpreter.cpp:
1561         (KJS::Interpreter::init):
1562         * kjs/interpreter.h:
1563         * kjs/regexp.cpp:
1564         (KJS::RegExp::RegExp):
1565         * kjs/regexp.h:
1566         * wtf/Shared.h: Copied from WebCore/platform/Shared.h.
1567
1568 2007-11-13  Eric Seidel  <eric@webkit.org>
1569
1570         Reviewed by Maciej.
1571
1572         Add an ASSERT to getTruncatedInt32 to enforce proper usage.
1573         Best part about this patch?  It doesn't break the web!
1574
1575         * kjs/JSImmediate.h:
1576         (KJS::JSImmediate::getTruncatedInt32):
1577         (KJS::JSImmediate::toDouble):
1578         (KJS::JSImmediate::getUInt32):
1579
1580 2007-11-13  Alexey Proskuryakov  <ap@webkit.org>
1581
1582         Windows build fix.
1583
1584         * bindings/c/c_utility.cpp:
1585         (KJS::Bindings::convertUTF8ToUTF16):
1586         * kjs/ustring.cpp:
1587         (KJS::UString::UTF8String):
1588         * wtf/unicode/UTF8.cpp:
1589         (WTF::Unicode::ConvertUTF8ToUTF16):
1590
1591 2007-11-13  Darin Adler  <darin@apple.com>
1592
1593         Reviewed by Geoff.
1594
1595         - fix http://bugs.webkit.org/show_bug.cgi?id=11231
1596           RegExp bug when handling newline characters
1597           and a number of other differences between PCRE behvior
1598           and JavaScript regular expressions:
1599
1600           + single-digit sequences like \4 should be treated as octal
1601             character constants, unless there is a sufficient number
1602             of brackets for them to be treated as backreferences
1603
1604           + \8 turns into the character "8", not a binary zero character
1605             followed by "8" (same for 9)
1606
1607           + only the first 3 digits should be considered part of an
1608             octal character constant (the old behavior was to decode
1609             an arbitrarily long sequence and then mask with 0xFF)
1610
1611           + if \x is followed by anything other than two valid hex digits,
1612             then it should simply be treated a the letter "x"; that includes
1613             not supporting the \x{41} syntax
1614
1615           + if \u is followed by anything less than four valid hex digits,
1616             then it should simply be treated a the letter "u"
1617
1618           + an extra "+" should be a syntax error, rather than being treated
1619             as the "possessive quantifier"
1620
1621           + if a "]" character appears immediately after a "[" character that
1622             starts a character class, then that's an empty character class,
1623             rather than being the start of a character class that includes a
1624             "]" character
1625
1626           + a "$" should not match a terminating newline; we could have gotten
1627             PCRE to handle this the way we wanted by passing an appropriate option
1628
1629         Test: fast/js/regexp-no-extensions.html
1630
1631         * pcre/pcre_compile.cpp:
1632         (check_escape): Check backreferences against bracount to catch both
1633         overflows and things that should be treated as octal. Rewrite octal
1634         loop to not go on indefinitely. Rewrite both hex loops to match and
1635         remove \x{} support.
1636         (compile_branch): Restructure loops so that we don't special-case a "]"
1637         at the beginning of a character class. Remove code that treated "+" as
1638         the possessive quantifier.
1639         (jsRegExpCompile): Change the "]" handling here too.
1640
1641         * pcre/pcre_exec.cpp: (match): Changed CIRC to match the DOLL implementation.
1642         Changed DOLL to remove handling of "terminating newline", a Perl concept
1643         which we don't need.
1644
1645         * tests/mozilla/expected.html: Two tests are fixed now:
1646         ecma_3/RegExp/regress-100199.js and ecma_3/RegExp/regress-188206.js.
1647         One test fails now: ecma_3/RegExp/perlstress-002.js -- our success before
1648         was due to a bug (we treated all 1-character numeric escapes as backreferences).
1649         The date tests also now both expect success -- whatever was making them fail
1650         before was probably due to the time being close to a DST shift; maybe we need
1651         to get rid of those tests.
1652
1653 2007-11-13  Darin Adler  <darin@apple.com>
1654
1655         * kjs/JSImmediate.h: (KJS::JSImmediate::getTruncatedInt32):
1656         Remove too-strong assert that was firing constantly and preventing even basic
1657         web browsing from working in a debug build. This function is used in many
1658         cases where the immediate value is not a number; the assertion could perhaps
1659         be added back later with a bit of reorganization.
1660
1661 2007-11-13  Alp Toker  <alp@atoker.com>
1662
1663         Build fix for breakage to non-Mac builds introduced in r27746.
1664
1665         * kjs/ustring.cpp:
1666
1667 2007-11-13  Eric Seidel  <eric@webkit.org>
1668
1669         Reviewed by Maciej.
1670
1671         Clean up evaluateToBoolean functions to use inlines instead of copy/paste code
1672
1673         * kjs/JSImmediate.h:
1674         * kjs/nodes.cpp:
1675         (KJS::GreaterNode::inlineEvaluateToBoolean):
1676         (KJS::GreaterNode::evaluate):
1677         (KJS::LessEqNode::inlineEvaluateToBoolean):
1678         (KJS::LessEqNode::evaluate):
1679         (KJS::GreaterEqNode::inlineEvaluateToBoolean):
1680         (KJS::GreaterEqNode::evaluate):
1681         (KJS::InNode::evaluateToBoolean):
1682         (KJS::EqualNode::inlineEvaluateToBoolean):
1683         (KJS::EqualNode::evaluate):
1684         (KJS::NotEqualNode::inlineEvaluateToBoolean):
1685         (KJS::NotEqualNode::evaluate):
1686         (KJS::StrictEqualNode::inlineEvaluateToBoolean):
1687         (KJS::StrictEqualNode::evaluate):
1688         (KJS::NotStrictEqualNode::inlineEvaluateToBoolean):
1689         (KJS::NotStrictEqualNode::evaluate):
1690         * kjs/nodes.h:
1691
1692 2007-11-12  Geoffrey Garen  <ggaren@apple.com>
1693
1694         Reviewed by Sam Weinig.
1695         
1696         Fixed http://bugs.webkit.org/show_bug.cgi?id=15958
1697         base64 spends 1.1% of total time checking for special Infinity case
1698         
1699         Use a fast character test instead of calling strncmp.
1700         
1701         1.1% speedup on string-base64. SunSpider reports a .4% speedup overall;
1702         Sharks reports only .1%. Who are you going to believe? Huh?
1703
1704         * kjs/ustring.cpp:
1705         (KJS::UString::toDouble):
1706
1707 2007-11-12  Eric Seidel  <eric@webkit.org>
1708
1709         Reviewed by Oliver.
1710
1711         Add evaluateToInt32 and evaluateUInt32 methods and deploy them.
1712         Fix a few missing evaluateToBoolean methods
1713         Deploy all evaluateTo* functions to more nodes to avoid slowdowns
1714         http://bugs.webkit.org/show_bug.cgi?id=15950
1715         
1716         SunSpider claims this is at least a 1.4% speedup.
1717
1718         * kjs/JSImmediate.h:
1719         (KJS::JSImmediate::getTruncatedInt32):
1720         (KJS::JSImmediate::toDouble):
1721         (KJS::JSImmediate::getUInt32):
1722         * kjs/nodes.cpp:
1723         (KJS::ExpressionNode::evaluateToNumber):
1724         (KJS::ExpressionNode::evaluateToInt32):
1725         (KJS::ExpressionNode::evaluateToUInt32):
1726         (KJS::NumberNode::evaluateToInt32):
1727         (KJS::NumberNode::evaluateToUInt32):
1728         (KJS::ImmediateNumberNode::evaluateToInt32):
1729         (KJS::ImmediateNumberNode::evaluateToUInt32):
1730         (KJS::ResolveNode::evaluate):
1731         (KJS::ResolveNode::evaluateToNumber):
1732         (KJS::ResolveNode::evaluateToBoolean):
1733         (KJS::ResolveNode::evaluateToInt32):
1734         (KJS::ResolveNode::evaluateToUInt32):
1735         (KJS::LocalVarAccessNode::evaluateToInt32):
1736         (KJS::LocalVarAccessNode::evaluateToUInt32):
1737         (KJS::BracketAccessorNode::evaluateToNumber):
1738         (KJS::BracketAccessorNode::evaluateToBoolean):
1739         (KJS::BracketAccessorNode::evaluateToInt32):
1740         (KJS::BracketAccessorNode::evaluateToUInt32):
1741         (KJS::DotAccessorNode::inlineEvaluate):
1742         (KJS::DotAccessorNode::evaluate):
1743         (KJS::DotAccessorNode::evaluateToNumber):
1744         (KJS::DotAccessorNode::evaluateToBoolean):
1745         (KJS::DotAccessorNode::evaluateToInt32):
1746         (KJS::DotAccessorNode::evaluateToUInt32):
1747         (KJS::NewExprNode::inlineEvaluate):
1748         (KJS::NewExprNode::evaluate):
1749         (KJS::NewExprNode::evaluateToNumber):
1750         (KJS::NewExprNode::evaluateToBoolean):
1751         (KJS::NewExprNode::evaluateToInt32):
1752         (KJS::NewExprNode::evaluateToUInt32):
1753         (KJS::FunctionCallResolveNode::inlineEvaluate):
1754         (KJS::FunctionCallResolveNode::evaluate):
1755         (KJS::FunctionCallResolveNode::evaluateToNumber):
1756         (KJS::FunctionCallResolveNode::evaluateToBoolean):
1757         (KJS::FunctionCallResolveNode::evaluateToInt32):
1758         (KJS::FunctionCallResolveNode::evaluateToUInt32):
1759         (KJS::LocalVarFunctionCallNode::evaluate):
1760         (KJS::LocalVarFunctionCallNode::evaluateToNumber):
1761         (KJS::LocalVarFunctionCallNode::evaluateToBoolean):
1762         (KJS::LocalVarFunctionCallNode::evaluateToInt32):
1763         (KJS::LocalVarFunctionCallNode::evaluateToUInt32):
1764         (KJS::FunctionCallDotNode::evaluate):
1765         (KJS::FunctionCallDotNode::evaluateToNumber):
1766         (KJS::FunctionCallDotNode::evaluateToBoolean):
1767         (KJS::FunctionCallDotNode::evaluateToInt32):
1768         (KJS::FunctionCallDotNode::evaluateToUInt32):
1769         (KJS::PostDecLocalVarNode::inlineEvaluateToNumber):
1770         (KJS::PostDecLocalVarNode::evaluateToNumber):
1771         (KJS::PostDecLocalVarNode::evaluateToBoolean):
1772         (KJS::PostDecLocalVarNode::evaluateToInt32):
1773         (KJS::PostDecLocalVarNode::evaluateToUInt32):
1774         (KJS::typeStringForValue):
1775         (KJS::UnaryPlusNode::evaluate):
1776         (KJS::UnaryPlusNode::evaluateToBoolean):
1777         (KJS::UnaryPlusNode::evaluateToNumber):
1778         (KJS::UnaryPlusNode::evaluateToInt32):
1779         (KJS::BitwiseNotNode::inlineEvaluateToInt32):
1780         (KJS::BitwiseNotNode::evaluate):
1781         (KJS::BitwiseNotNode::evaluateToNumber):
1782         (KJS::BitwiseNotNode::evaluateToBoolean):
1783         (KJS::BitwiseNotNode::evaluateToInt32):
1784         (KJS::MultNode::evaluateToBoolean):
1785         (KJS::MultNode::evaluateToInt32):
1786         (KJS::MultNode::evaluateToUInt32):
1787         (KJS::DivNode::evaluateToInt32):
1788         (KJS::DivNode::evaluateToUInt32):
1789         (KJS::ModNode::evaluateToBoolean):
1790         (KJS::ModNode::evaluateToInt32):
1791         (KJS::ModNode::evaluateToUInt32):
1792         (KJS::AddNode::evaluateToNumber):
1793         (KJS::AddNode::evaluateToInt32):
1794         (KJS::AddNode::evaluateToUInt32):
1795         (KJS::AddNumbersNode::evaluateToInt32):
1796         (KJS::AddNumbersNode::evaluateToUInt32):
1797         (KJS::SubNode::evaluateToInt32):
1798         (KJS::SubNode::evaluateToUInt32):
1799         (KJS::LeftShiftNode::inlineEvaluateToInt32):
1800         (KJS::LeftShiftNode::evaluate):
1801         (KJS::LeftShiftNode::evaluateToNumber):
1802         (KJS::LeftShiftNode::evaluateToInt32):
1803         (KJS::RightShiftNode::inlineEvaluateToInt32):
1804         (KJS::RightShiftNode::evaluate):
1805         (KJS::RightShiftNode::evaluateToNumber):
1806         (KJS::RightShiftNode::evaluateToInt32):
1807         (KJS::UnsignedRightShiftNode::inlineEvaluateToUInt32):
1808         (KJS::UnsignedRightShiftNode::evaluate):
1809         (KJS::UnsignedRightShiftNode::evaluateToNumber):
1810         (KJS::UnsignedRightShiftNode::evaluateToInt32):
1811         (KJS::LessNode::inlineEvaluateToBoolean):
1812         (KJS::LessNode::evaluate):
1813         (KJS::LessNode::evaluateToBoolean):
1814         (KJS::LessNumbersNode::inlineEvaluateToBoolean):
1815         (KJS::LessNumbersNode::evaluate):
1816         (KJS::LessNumbersNode::evaluateToBoolean):
1817         (KJS::LessStringsNode::inlineEvaluateToBoolean):
1818         (KJS::LessStringsNode::evaluate):
1819         (KJS::BitAndNode::evaluate):
1820         (KJS::BitAndNode::inlineEvaluateToInt32):
1821         (KJS::BitAndNode::evaluateToNumber):
1822         (KJS::BitAndNode::evaluateToBoolean):
1823         (KJS::BitAndNode::evaluateToInt32):
1824         (KJS::BitXOrNode::inlineEvaluateToInt32):
1825         (KJS::BitXOrNode::evaluate):
1826         (KJS::BitXOrNode::evaluateToNumber):
1827         (KJS::BitXOrNode::evaluateToBoolean):
1828         (KJS::BitXOrNode::evaluateToInt32):
1829         (KJS::BitOrNode::inlineEvaluateToInt32):
1830         (KJS::BitOrNode::evaluate):
1831         (KJS::BitOrNode::evaluateToNumber):
1832         (KJS::BitOrNode::evaluateToBoolean):
1833         (KJS::BitOrNode::evaluateToInt32):
1834         (KJS::ConditionalNode::evaluateToNumber):
1835         (KJS::ConditionalNode::evaluateToInt32):
1836         (KJS::ConditionalNode::evaluateToUInt32):
1837         (KJS::valueForReadModifyAssignment):
1838         (KJS::AssignExprNode::evaluate):
1839         (KJS::AssignExprNode::evaluateToBoolean):
1840         (KJS::AssignExprNode::evaluateToNumber):
1841         (KJS::AssignExprNode::evaluateToInt32):
1842         (KJS::VarDeclNode::handleSlowCase):
1843         * kjs/nodes.h:
1844         (KJS::FunctionCallResolveNode::precedence):
1845         (KJS::AddNode::precedence):
1846         (KJS::AddNode::):
1847         (KJS::LessNumbersNode::):
1848         (KJS::LessStringsNode::):
1849         * kjs/value.cpp:
1850         (KJS::JSValue::toInt32SlowCase):
1851         (KJS::JSValue::toUInt32SlowCase):
1852         * kjs/value.h:
1853         (KJS::JSValue::asCell):
1854         (KJS::JSValue::toInt32):
1855         (KJS::JSValue::toUInt32):
1856
1857 2007-11-12  Alexey Proskuryakov  <ap@webkit.org>
1858
1859         Reviewed by Darin.
1860
1861         http://bugs.webkit.org/show_bug.cgi?id=15953
1862         Add UTF-8 encoding/decoding to WTF
1863
1864         * kjs/ustring.h: Moved UTF8SequenceLength() and decodeUTF8Sequence() to wtf/unicode.
1865         * kjs/ustring.cpp: (KJS::UString::UTF8String): Changed this function to take a strict/lenient
1866         parameter. Callers are not interested in getting decoding results in strict mode, so 
1867         this allows for bailing out as soon as an error is seen.
1868
1869         * kjs/function.cpp:
1870         (KJS::encode): Updated for new UString::UTF8String() signature.
1871
1872         * API/JSStringRef.cpp:
1873         (JSStringCreateWithCharacters): Disambiguate UChar.
1874         (JSStringCreateWithUTF8CString): Actually use UTF-8 when creating the string!
1875         * bindings/c/c_utility.cpp: (KJS::Bindings::convertUTF8ToUTF16): Use ConvertUTF8ToUTF16().
1876
1877         * wtf/unicode/UTF8.cpp: Added.
1878         (WTF::Unicode::inlineUTF8SequenceLengthNonASCII):
1879         (WTF::Unicode::inlineUTF8SequenceLength):
1880         (WTF::Unicode::UTF8SequenceLength):
1881         (WTF::Unicode::decodeUTF8Sequence):
1882         (WTF::Unicode::):
1883         (WTF::Unicode::ConvertUTF16ToUTF8):
1884         (WTF::Unicode::isLegalUTF8):
1885         (WTF::Unicode::ConvertUTF8ToUTF16):
1886         * wtf/unicode/UTF8.h: Added.
1887         (WTF::Unicode::):
1888         Some code moved from ustring.h, some adapted from unicode.org sources.
1889
1890         * JavaScriptCore.exp:
1891         * JavaScriptCore.pri:
1892         * JavaScriptCore.vcproj/WTF/WTF.vcproj:
1893         * JavaScriptCore.xcodeproj/project.pbxproj:
1894         * JavaScriptCoreSources.bkl:
1895         Added UTF8.{h,cpp}
1896
1897 2007-11-12  Josh Aas  <joshmoz@gmail.com>
1898
1899         Reviewed by Darin.
1900
1901         - http://bugs.webkit.org/show_bug.cgi?id=15946
1902           add NPPValue NPPVpluginDrawingModel (Mozilla bug 403418 compat)
1903
1904         * bindings/npapi.h:
1905
1906 2007-11-12  Darin Adler  <darin@apple.com>
1907
1908         Reviewed by Sam.
1909
1910         - http://bugs.webkit.org/show_bug.cgi?id=15951
1911           REGRESSION: assertion failure in regexp match() when running JS tests
1912
1913         Test: fast/js/regexp-many-brackets.html
1914
1915         * pcre/pcre_exec.cpp: (match): Added back accidentally-removed case for
1916         the BRANUMBER opcode.
1917
1918 2007-11-12  Darin Adler  <darin@apple.com>
1919
1920         Reviewed by Geoff.
1921
1922         - fix use of prefix and config.h, got rid of a few unneeded things in
1923           the PCRE code; no behavior changes
1924
1925         * API/JSBase.cpp: Added include of config.h.
1926         * API/JSCallbackConstructor.cpp: Ditto.
1927         * API/JSCallbackFunction.cpp: Ditto.
1928         * API/JSCallbackObject.cpp: Ditto.
1929         * API/JSClassRef.cpp: Ditto.
1930         * API/JSContextRef.cpp: Ditto.
1931         * API/JSObjectRef.cpp: Ditto.
1932         * API/JSStringRef.cpp: Ditto.
1933         * API/JSValueRef.cpp: Ditto.
1934
1935         * JavaScriptCorePrefix.h: Removed obsolete <ctype.h> workaround.
1936         Moved new/delete macros after includes, as they are in WebCore's prefix.
1937         Removed "config.h".
1938
1939         * pcre/dftables.cpp: (main): Changed back to not use a separate maketables
1940         function. This is needed for PCRE, but not helpful for our use. Also changed
1941         the tables to all be 128 entries long instead of 256, since only the first
1942         128 are ever used.
1943
1944         * pcre/pcre_compile.cpp: Added include of config.h. Eliminated digitab,
1945         which was only being used to check hex digits. Changed all uses of TRUE and
1946         FALSE to use the C++ true and false instead.
1947         (check_escape): Just the TRUE/FALSE thing.
1948         (is_counted_repeat): Ditto.
1949         (could_be_empty_branch): Ditto.
1950         (get_othercase_range): Ditto.
1951         (compile_branch): Ditto.
1952         (compile_regex): Ditto.
1953         (is_anchored): Ditto.
1954         (is_startline): Ditto.
1955         (find_firstassertedchar): Ditto.
1956         (jsRegExpCompile): Ditto.
1957
1958         * pcre/pcre_exec.cpp: Added include of config.h. Changed all uses of TRUE and
1959         FALSE to use the C++ true and false instead.
1960         (match_ref): Just the TRUE/FALSE thing.
1961         (match): Ditto. Removed some unneeded braces.
1962         (jsRegExpExecute): Just the TRUE/FALSE thing.
1963
1964         * pcre/pcre_internal.h: Moved the constants needed by dftables.cpp to the top
1965         of the file instead of the bottom, so they can be used. Also changed the table
1966         sizes to 128 instead of 256. Removed macro definitions of FALSE and TRUE.
1967         Set array sizes for all the const arrays. Changed _pcre_utf8_table1_size to
1968         be a macro instead of a extern int.
1969
1970         * pcre/pcre_maketables.cpp: Removed. It's all in dftables.cpp now.
1971
1972         * pcre/pcre_tables.cpp: Made table sizes explicit.
1973
1974         * pcre/pcre_xclass.cpp: Just the TRUE/FALSE thing.
1975
1976 2007-11-12  Adam Roben  <aroben@apple.com>
1977
1978         Build fix
1979
1980         * wtf/FastMalloc.h: Add missing using statement.
1981
1982 2007-11-11  Oliver Hunt  <oliver@apple.com>
1983
1984         Reviewed by Darin.
1985
1986         Add special fastZeroedMalloc function to replace a 
1987         number of fastCalloc calls where one argument was 1.
1988         
1989         This results in a 0.4% progression in SunSpider, more
1990         than making up for the earlier regression caused by 
1991         additional overflow checks.
1992
1993         * JavaScriptCore.exp:
1994         * kjs/array_instance.cpp:
1995         * kjs/property_map.cpp:
1996         * wtf/FastMalloc.cpp:
1997         * wtf/FastMalloc.h:
1998         * wtf/HashTable.h:
1999
2000 2007-11-11  Adam Roben  <aroben@apple.com>
2001
2002         Fix <rdar://5578982> ASSERT in HashTable::checkTableConsistencyExceptSize beneath WebNotificationCenter
2003
2004         The bug was due to a mismatch between HashMap::remove and
2005         HashTable::checkTableConsistency. HashMap::remove can delete the value
2006         stored in the HashTable (by derefing it), which is not normally
2007         allowed by HashTable. It's OK in this case because the value is about
2008         to be removed from the table, but HashTable wasn't aware of this.
2009
2010         HashMap::remove now performs the consistency check itself before
2011         derefing the value.
2012
2013         Darin noticed that the same bug would occur in HashSet, so I've fixed
2014         it there as well.
2015
2016         Reviewed by Darin.
2017
2018         * wtf/HashMap.h:
2019         (WTF::HashMap::remove): Perform the HashTable consistency check
2020         manually before calling deref.
2021         * wtf/HashSet.h:
2022         (WTF::HashSet::remove): Ditto.
2023         * wtf/HashTable.h: Made checkTableConsistency public so that HashMap
2024         and HashSet can call it.
2025         (WTF::HashTable::removeAndInvalidateWithoutEntryConsistencyCheck):
2026         Added.
2027         (WTF::HashTable::removeAndInvalidate): Added.
2028         (WTF::HashTable::remove):
2029         (WTF::HashTable::removeWithoutEntryConsistencyCheck): Added.
2030
2031 2007-11-11  Mark Rowe  <mrowe@apple.com>
2032
2033         Build fix.  Use the correct filename case.
2034
2035         * kjs/nodes.h:
2036
2037 2007-11-11  Geoffrey Garen  <ggaren@apple.com>
2038
2039         Reviewed by Sam Weinig.
2040         
2041         Fixed http://bugs.webkit.org/show_bug.cgi?id=15902
2042         15% of string-validate-input.js is spent compiling the same regular expression
2043         
2044         Store a compiled representation of the regular expression in the AST.
2045         
2046         Only a .2% SunSpider speedup overall, but a 10.6% speedup on 
2047         string-validate-input.js.
2048
2049         * kjs/nodes.cpp:
2050         (KJS::RegExpNode::evaluate):
2051         * kjs/nodes.h:
2052         (KJS::RegExpNode::):
2053         * kjs/nodes2string.cpp:
2054         (KJS::RegExpNode::streamTo):
2055         * kjs/regexp.cpp:
2056         (KJS::RegExp::flags):
2057         * kjs/regexp.h:
2058         (KJS::RegExp::pattern):
2059         * kjs/regexp_object.cpp:
2060         (KJS::RegExpObjectImp::construct):
2061         (KJS::RegExpObjectImp::createRegExpImp):
2062         * kjs/regexp_object.h:
2063
2064 2007-11-11  Oliver Hunt  <oliver@apple.com>
2065
2066         Reviewed by Eric.
2067
2068         Partial fix for <rdar://problem/5585334> numfuzz: integer overflows opening malformed SVG file in WebCore::ImageBuffer::create
2069
2070         Unfortunately this is a very slight regression, but is unavoidable.
2071
2072         * wtf/FastMalloc.cpp:
2073
2074 2007-11-10  Eric Seidel  <eric@webkit.org>
2075
2076         Reviewed by darin.
2077         
2078         Add simple type inferencing to the parser, and create custom
2079         AddNode and LessNode subclasses based on inferred types.
2080         http://bugs.webkit.org/show_bug.cgi?id=15884
2081         
2082         SunSpider claims this is at least a 0.5% speedup.
2083
2084         * JavaScriptCore.exp:
2085         * kjs/grammar.y:
2086         * kjs/internal.cpp:
2087         (KJS::NumberImp::getPrimitiveNumber):
2088         (KJS::GetterSetterImp::getPrimitiveNumber):
2089         * kjs/internal.h:
2090         * kjs/lexer.cpp:
2091         (KJS::Lexer::lex):
2092         * kjs/nodes.cpp:
2093         (KJS::Node::Node):
2094         (KJS::StringNode::evaluate):
2095         (KJS::StringNode::evaluateToNumber):
2096         (KJS::StringNode::evaluateToBoolean):
2097         (KJS::RegExpNode::evaluate):
2098         (KJS::UnaryPlusNode::optimizeVariableAccess):
2099         (KJS::AddNode::evaluate):
2100         (KJS::AddNode::evaluateToNumber):
2101         (KJS::AddNumbersNode::inlineEvaluateToNumber):
2102         (KJS::AddNumbersNode::evaluate):
2103         (KJS::AddNumbersNode::evaluateToNumber):
2104         (KJS::AddStringsNode::evaluate):
2105         (KJS::AddStringLeftNode::evaluate):
2106         (KJS::AddStringRightNode::evaluate):
2107         (KJS::lessThan):
2108         (KJS::lessThanEq):
2109         (KJS::LessNumbersNode::evaluate):
2110         (KJS::LessStringsNode::evaluate):
2111         * kjs/nodes.h:
2112         (KJS::ExpressionNode::):
2113         (KJS::RegExpNode::):
2114         (KJS::RegExpNode::precedence):
2115         (KJS::TypeOfResolveNode::):
2116         (KJS::LocalVarTypeOfNode::):
2117         (KJS::UnaryPlusNode::):
2118         (KJS::UnaryPlusNode::precedence):
2119         (KJS::AddNode::):
2120         (KJS::AddNode::precedence):
2121         (KJS::AddNumbersNode::):
2122         (KJS::AddStringLeftNode::):
2123         (KJS::AddStringRightNode::):
2124         (KJS::AddStringsNode::):
2125         (KJS::LessNode::):
2126         (KJS::LessNode::precedence):
2127         (KJS::LessNumbersNode::):
2128         (KJS::LessStringsNode::):
2129         * kjs/nodes2string.cpp:
2130         (KJS::StringNode::streamTo):
2131         * kjs/object.cpp:
2132         * kjs/object.h:
2133         * kjs/value.h:
2134         (KJS::JSValue::getPrimitiveNumber):
2135
2136 2007-11-11  Darin Adler  <darin@apple.com>
2137
2138         - try another way of fixing dftables builds -- refactor pcre_internal.h a bit
2139
2140         * pcre/pcre_internal.h: Make most of this header do nothing when DFTABLES is set.
2141         Later we can break it into two files.
2142
2143         * JavaScriptCore.vcproj/dftables/dftables.vcproj: Take out now-unneeded include paths.
2144         * pcre/dftables.cpp: Set DFTABLES. Use delete instead of free.
2145         * pcre/dftables.pro: Take out now-unneeded include paths.
2146         * pcre/pcre_maketables.cpp: Use new instead of malloc.
2147
2148 2007-11-11  Darin Adler  <darin@apple.com>
2149
2150         * pcre/dftables.pro: Try fixing Qt builds (I looked at qt-win) by adding
2151         another include path.
2152
2153 2007-11-11  Darin Adler  <darin@apple.com>
2154
2155         * JavaScriptCore.xcodeproj/project.pbxproj: Try fixing Mac Tiger builds
2156         by adding another include path.
2157
2158 2007-11-11  Darin Adler  <darin@apple.com>
2159
2160         Reviewed by Sam.
2161
2162         - http://bugs.webkit.org/show_bug.cgi?id=15924
2163           next round of changes to JSRegExp (formerly PCRE)
2164
2165         This is a combination of converting to C++, tweaking the API, and adding
2166         some additional optimizations.
2167
2168         Future steps will involve getting rid of the use of UTF-8 completely
2169         (we'll use UTF-16 exclusively instead), eliminating more source files,
2170         and some more speed-ups.
2171
2172         SunSpider says the current round is an 0.9% speed-up overall, and a
2173         5.3% speed-up for regexp.
2174
2175         * JavaScriptCore.exp: Updated for new entry points.
2176
2177         * JavaScriptCore.pri:
2178         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
2179         * JavaScriptCore.vcproj/dftables/dftables.vcproj:
2180         * JavaScriptCore.xcodeproj/project.pbxproj:
2181         * JavaScriptCoreSources.bkl:
2182         * jscore.bkl:
2183         Updated for new source file names and ForwardingHeaders.
2184
2185         * kjs/regexp.cpp:
2186         (KJS::RegExp::RegExp): Changed to use the error message without calling
2187         strdup on it and to pass the new types and options.
2188         (KJS::RegExp::~RegExp): Removed the now-unneeded free of the error message.
2189         (KJS::RegExp::match): Pass the new types and options.
2190         * kjs/regexp.h: Update type of m_constructionError.
2191
2192         * pcre/AUTHORS: Update to reflect the status of the project -- we don't include
2193         the Google parts, and this isn't the PCRE library, per se.
2194         * pcre/COPYING: Ditto.
2195
2196         * pcre/dftables.cpp: Copied from JavaScriptCore/pcre/dftables.c.
2197         (main): Removed unneeded ctype_digit.
2198
2199         * pcre/pcre.h: Convert to C++, tweak API a bit. Use UChar instead of JSRegExpChar.
2200
2201         * pcre/pcre_compile.cpp: Copied from JavaScriptCore/pcre/pcre_compile.c.
2202         Moved a lot of private stuff used only within this file here from pcre_internal.h.
2203         Renumbered the error codes.
2204         (error_text): Use a single string with embedded nulls for the error text (I got
2205         this idea from newer versions of PCRE).
2206         (check_escape): Changed return type to be enum instead of int. Replaced ctype_digit
2207         uses with isASCIIDigit.
2208         (is_counted_repeat): Ditto.
2209         (read_repeat_counts): Ditto.
2210         (first_significant_code): Ditto.
2211         (find_fixedlength): Ditto.
2212         (could_be_empty_branch): Ditto.
2213         (compile_branch): Ditto. Also removed some code that handles changing options.
2214         JavaScript doesn't have any of the features that allow options to change.
2215         (compile_regex): Updated for change to options parameter.
2216         (is_anchored): Ditto.
2217         (find_firstassertedchar): Ditto.
2218         (jsRegExpCompile): Changed to take separate flags instead of an options int.
2219         Also changed to call new/delete instead of pcre_malloc/free.
2220         (jsRegExpFree): Ditto.
2221
2222         * pcre/pcre_exec.cpp: Copied from JavaScriptCore/pcre/pcre_exec.c.
2223         Added a case that uses computed goto for the opcode loop, but did not turn it on.
2224         Changed the RMATCH macro to handle returns more efficiently by putting the where
2225         pointer in the new frame instead of the old one, allowing us to branch to the
2226         return with a single statement. Switched to new/delete from pcre_malloc/free.
2227         Changed many RRETURN callers to not set the return value since it's already
2228         set correctly. Replaced the rrc variable with an is_match variable. Values other
2229         than "match" and "no match" are now handled differently. This allows us to remove
2230         the code to check for those cases in various rules.
2231         (match): All the case statements use a macro BEGIN_OPCODE instead. And all the
2232         continue statements, or break statements that break out of the outer case use
2233         a macro NEXT_OPCODE instead. Replaced a few if statements with assertions.
2234         (jsRegExpExecute): Use new/delete instead of pcre_malloc/free. Removed unused
2235         start_match field from the match block.
2236
2237         * pcre/pcre_internal.h: Moved the last few configuration macros from pcre-config.h
2238         in here. Removed various unused types. Converted from JSRegExpChar to UChar.
2239         Eliminated pcre_malloc/free. Replaced the opcode enum with a macro that can be
2240         used in multiple places. Unfortunately we lose the comments for each opcode; we
2241         should find a place to put those back. Removed ctype_digit.
2242
2243         * pcre/pcre_maketables.cpp: Copied from JavaScriptCore/pcre/pcre_maketables.c.
2244         (pcre_maketables): Got rid of the conditional code that allows this to be compiled
2245         in -- it's only used for dftables now (and soon may be obsolete entirely).
2246         Changed code for cbit_digit to not use isdigit, and took the "_" case out of the
2247         loop. Removed ctype_digit.
2248
2249         * pcre/pcre_ord2utf8.cpp: Copied from JavaScriptCore/pcre/pcre_ord2utf8.c.
2250
2251         * pcre/pcre_tables.cpp: Copied from JavaScriptCore/pcre/pcre_tables.c.
2252         Moved _pcre_OP_lengths out of here into pcre_exec.cpp.
2253
2254         * pcre/pcre_ucp_searchfuncs.cpp: Copied from JavaScriptCore/pcre/pcre_ucp_searchfuncs.c.
2255         Updated for other file name changes.
2256
2257         * pcre/pcre_xclass.cpp: Copied from JavaScriptCore/pcre/pcre_xclass.c.
2258
2259         * pcre/ucpinternal.h: Updated header.
2260
2261         * pcre/ucptable.cpp: Copied from JavaScriptCore/pcre/ucptable.c.
2262
2263         * wtf/ASCIICType.h: (WTF::isASCIIDigit): Removed a branch by changing from && to
2264         & for this operation. Also added an overload that takes an int because that's
2265         useful for PCRE. Later we could optimize for int and overload other functions in
2266         this file; stuck to this simple one for now.
2267
2268         * wtf/unicode/icu/UnicodeIcu.h: Removed unused isUpper.
2269         * wtf/unicode/qt4/UnicodeQt4.h: Ditto.
2270
2271         * pcre/LICENCE: Removed.
2272         * pcre/pcre-config.h: Removed.
2273         * wtf/FastMallocPCRE.cpp: Removed.
2274
2275         * pcre/dftables.c: Renamed to cpp.
2276         * pcre/pcre_compile.c: Ditto.
2277         * pcre/pcre_exec.c: Ditto.
2278         * pcre/pcre_maketables.c: Ditto.
2279         * pcre/pcre_ord2utf8.c: Ditto.
2280         * pcre/pcre_tables.c: Ditto.
2281         * pcre/pcre_ucp_searchfuncs.c: Ditto.
2282         * pcre/pcre_xclass.c: Ditto.
2283         * pcre/ucptable.c: Ditto.
2284
2285 2007-11-11  Eric Seidel  <eric@webkit.org>
2286
2287         Reviewed by Oliver.
2288
2289         Add KJS_CHECKEXCEPTIONBOOLEAN to match rest of nodes.cpp
2290
2291         * kjs/nodes.cpp:
2292         (KJS::ExpressionNode::evaluateToBoolean):
2293         (KJS::LessNode::evaluateToBoolean):
2294         (KJS::GreaterNode::evaluateToBoolean):
2295         (KJS::LessEqNode::evaluateToBoolean):
2296         (KJS::GreaterEqNode::evaluateToBoolean):
2297         (KJS::InstanceOfNode::evaluateToBoolean):
2298         (KJS::InNode::evaluateToBoolean):
2299         (KJS::EqualNode::evaluateToBoolean):
2300         (KJS::NotEqualNode::evaluateToBoolean):
2301         (KJS::StrictEqualNode::evaluateToBoolean):
2302         (KJS::NotStrictEqualNode::evaluateToBoolean):
2303         (KJS::LogicalAndNode::evaluateToBoolean):
2304         (KJS::LogicalOrNode::evaluateToBoolean):
2305         (KJS::ConditionalNode::evaluateToBoolean):
2306
2307 2007-11-10  Darin Adler  <darin@apple.com>
2308
2309         Reviewed by Sam.
2310
2311         - fix http://bugs.webkit.org/show_bug.cgi?id=15927
2312           REGRESSION(r27487): delete a.c followed by __defineGetter__("c", ...) incorrectly deletes another property
2313           and <rdar://problem/5586384> REGRESSION (r27487): Can't switch out of Edit HTML Source mode on Leopard Wiki
2314
2315         Test: fast/js/delete-then-put.html
2316
2317         * kjs/property_map.cpp:
2318         (KJS::PropertyMap::put): Added a missing "- 1"; code to find an empty slot was not working.
2319         (KJS::PropertyMap::checkConsistency): Added a missing range check that would have caught this
2320         problem before.
2321
2322         - roll out a last-minute change to my evaluateToBoolean patch that was incorrect.
2323
2324         * kjs/nodes.h: (KJS::ExprStatementNode::ExprStatementNode): Take out call to
2325         optimizeForUnnecessaryResult, since the result is used in some cases.
2326
2327 2007-11-10  Adam Roben  <aroben@apple.com>
2328
2329         Windows build fix
2330
2331         Roll out some changes that were (seemingly accidentally) checked in
2332         with r27664.
2333
2334         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
2335
2336 2007-11-10  Darin Adler  <darin@apple.com>
2337
2338         Reviewed by Sam.
2339
2340         - http://bugs.webkit.org/show_bug.cgi?id=15915
2341           add an evaluation path for booleans like the one we have for numbers
2342
2343         Gives 1.1% on SunSpider.
2344
2345         * kjs/grammar.y: Create TrueNode and FalseNode instead of BooleanNode.
2346
2347         * kjs/nodes.h: Changed to use Noncopyable. Moved optimizeForUnnecessaryResult
2348         down from Node to ExpressionNode. Changed some classes to not inherit from
2349         ExpressionNode where not necessary, and removed unnneeded evaluate functions
2350         as well as evaluate functions that need not be virtual. Call the
2351         optimizeForUnnecessaryResult function on the start of a for loop too.
2352         * kjs/nodes.cpp:
2353         (KJS::ExpressionNode::evaluateToBoolean): Added.
2354         (KJS::FalseNode::evaluate): Added.
2355         (KJS::TrueNode::evaluate): Added.
2356         (KJS::NumberNode::evaluateToBoolean): Added.
2357         (KJS::StringNode::evaluateToBoolean): Added.
2358         (KJS::LocalVarAccessNode::evaluateToBoolean): Added.
2359         (KJS::BracketAccessorNode::evaluateToBoolean): Added.
2360         (KJS::LogicalNotNode::evaluate): Changed to call evaluateToBoolean.
2361         (KJS::LogicalNotNode::evaluateToBoolean): Added.
2362         (KJS::lessThan): Changed to return bool.
2363         (KJS::lessThanEq): Ditto.
2364         (KJS::LessNode::evaluate): Changed since lessThan returns bool.
2365         (KJS::LessNode::evaluateToBoolean): Added.
2366         (KJS::GreaterNode::evaluate): Changed since lessThanEq returns bool.
2367         (KJS::GreaterNode::evaluateToBoolean): Added.
2368         (KJS::LessEqNode::evaluate): Changed since lessThanEq returns bool.
2369         (KJS::LessEqNode::evaluateToBoolean): Added.
2370         (KJS::GreaterEqNode::evaluate): Changed since lessThan returns bool.
2371         (KJS::GreaterEqNode::evaluateToBoolean): Added.
2372         (KJS::InstanceOfNode::evaluateToBoolean): Added.
2373         (KJS::InNode::evaluateToBoolean): Added.
2374         (KJS::EqualNode::evaluateToBoolean): Added.
2375         (KJS::NotEqualNode::evaluateToBoolean): Added.
2376         (KJS::StrictEqualNode::evaluateToBoolean): Added.
2377         (KJS::NotStrictEqualNode::evaluateToBoolean): Added.
2378         (KJS::ConditionalNode::evaluate): Changed to call evaluateToBoolean.
2379         (KJS::IfNode::execute): Ditto.
2380         (KJS::DoWhileNode::execute): Ditto.
2381         (KJS::WhileNode::execute): Ditto.
2382         (KJS::ForNode::execute): Ditto.
2383
2384         * kjs/nodes2string.cpp:
2385         (KJS::FalseNode::streamTo): Added.
2386         (KJS::TrueNode::streamTo): Added.
2387
2388 2007-11-09  Adam Roben  <aroben@apple.com>
2389
2390         Windows build fix
2391
2392         Reviewed by Darin.
2393
2394         * kjs/value.h:
2395         (KJS::jsNumber): Add some explicit casts.
2396
2397 2007-11-08  Darin Adler  <darin@apple.com>
2398
2399         - fix build
2400
2401         * kjs/grammar.y:
2402         * kjs/nodes.h:
2403         * kjs/property_map.cpp:
2404
2405 2007-11-08  Darin Adler  <darin@apple.com>
2406
2407         - roll out accidentally-checked in changes
2408
2409         * kjs/nodes.cpp: Back to previous version.
2410         * kjs/nodes.h: Ditto.
2411         * kjs/grammar.y: Ditto.
2412
2413 2007-11-08  Darin Adler  <darin@apple.com>
2414
2415         Reviewed by Maciej.
2416
2417         - http://bugs.webkit.org/show_bug.cgi?id=15912
2418           fasta spends a lot of time in qsort
2419
2420         * kjs/property_map.cpp:
2421         (KJS::PropertyMap::getEnumerablePropertyNames):
2422         Use insertion sort instead of qsort for small sets of property names.
2423         We can probably do some even-better speedups of for/in, but this nets
2424         0.6% overall and 6.7% on fasta.
2425
2426 2007-11-08  Darin Adler  <darin@apple.com>
2427
2428         Reviewed by Maciej.
2429
2430         - http://bugs.webkit.org/show_bug.cgi?id=15906
2431           getting characters by indexing into a string is very slow
2432
2433         This fixes one source of the slowness -- the conversion to an unused
2434         Identifier as we call the get function from the slot -- but doesn't
2435         fix others, such as the fact that we have to allocate a new UString::Rep
2436         for every single character.
2437
2438         Speeds up string-base64 30%, and at least 0.5% overall.
2439         But does slow down access-fannkuch quite a bit. Might be worth
2440         revisiting in the future to see what we can do about that (although
2441         I did look at a profile for a while).
2442
2443         * kjs/property_slot.h: Add a new marker for "numeric" property slots;
2444         slots where we don't need to pass the identifier to the get function.
2445         (KJS::PropertySlot::getValue): Added code to call the numeric get function.
2446         (KJS::PropertySlot::setCustomNumeric): Added.
2447         * kjs/string_object.cpp:
2448         (KJS::StringInstance::indexGetter): Changed to use substr() instead
2449         of constructing a wholly new UString each time.
2450         (KJS::stringInstanceNumericPropertyGetter): Added. Like indexGetter, but
2451         takes advantage of setCustomNumeric to avoid creating an Identifier.
2452         (KJS::StringInstance::getOwnPropertySlot): Changed to use setCustomNumeric.
2453
2454 2007-11-08  Darin Adler  <darin@apple.com>
2455
2456         Reviewed by Oliver.
2457
2458         - http://bugs.webkit.org/show_bug.cgi?id=15904
2459           more speed-ups possible by tightening up int version of JSImmediate
2460
2461         1% improvement of SunSpider
2462
2463         * kjs/JSImmediate.h: Eliminate the now-unneeded FPBitValues struct template.
2464         (KJS::JSImmediate::from): Overload for most numeric types; many types can
2465         do fewer branches and checks.
2466         (KJS::JSImmediate::getUInt32): Removed unneeded check for undefined.
2467         (KJS::JSImmediate::getTruncatedInt32): Ditto.
2468         (KJS::JSImmediate::getTruncatedUInt32): Ditto. There's no difference any more
2469         between getUInt32 and getTruncatedUInt32, so that's worth a rename and merge later.
2470
2471         * kjs/grammar.y: Update since fromDouble is now just from.
2472         * kjs/nodes.h: Ditto.
2473
2474         * kjs/value.h: (KJS::jsNumber): Overload for most numeric types.
2475
2476 2007-11-08  Kevin Ollivier  <kevino@theolliviers.com>
2477
2478         Bakefiles for building JavaScriptCore, needed by wx port.
2479
2480         Reviewed by Mark Rowe.
2481
2482         * JavaScriptCoreSources.bkl: Added.
2483         * jscore.bkl: Added.
2484
2485 2007-11-08  Oliver Hunt  <oliver@apple.com>
2486
2487         Reviewed by Maciej.
2488
2489         Fix regression caused by earlier bitwise and optimisation.  1 & undefined != 1.
2490
2491         The implementation of JSImmediate::areBothImmediateNumbers relies on 
2492         (JSImmediate::getTag(immediate1) & JSImmediate::getTag(immediate2)) having 
2493         a unique result when both immediate values are numbers.
2494
2495         The regression was due to UndefinedType & NumberType returning NumberType (3 & 1).
2496         By swapping the value of NumberType and UndefinedType this ceases to be a problem.
2497
2498         * kjs/JSType.h:
2499         (KJS::):
2500
2501 2007-11-08  Darin Adler  <darin@apple.com>
2502
2503         - fix build
2504
2505         * kjs/nodes.h: Add missing parameter name.
2506
2507 2007-11-08  Eric Seidel  <eric@webkit.org>
2508
2509         Reviewed by darin.
2510
2511         Add ExpressionNode subclass of Node, use it.
2512
2513         * kjs/grammar.y:
2514         * kjs/nodes.cpp:
2515         (KJS::ForInNode::ForInNode):
2516         * kjs/nodes.h:
2517         (KJS::ExpressionNode::):
2518         (KJS::NullNode::):
2519         (KJS::NullNode::precedence):
2520         (KJS::BooleanNode::):
2521         (KJS::BooleanNode::precedence):
2522         (KJS::RegExpNode::):
2523         (KJS::RegExpNode::precedence):
2524         (KJS::ThisNode::):
2525         (KJS::ThisNode::precedence):
2526         (KJS::ResolveNode::):
2527         (KJS::ElementNode::):
2528         (KJS::ArrayNode::):
2529         (KJS::PropertyNode::):
2530         (KJS::PropertyNode::precedence):
2531         (KJS::PropertyNode::name):
2532         (KJS::PropertyListNode::):
2533         (KJS::ObjectLiteralNode::):
2534         (KJS::ObjectLiteralNode::precedence):
2535         (KJS::BracketAccessorNode::):
2536         (KJS::DotAccessorNode::):
2537         (KJS::DotAccessorNode::precedence):
2538         (KJS::ArgumentListNode::):
2539         (KJS::ArgumentsNode::):
2540         (KJS::NewExprNode::):
2541         (KJS::NewExprNode::precedence):
2542         (KJS::FunctionCallValueNode::):
2543         (KJS::FunctionCallValueNode::precedence):
2544         (KJS::FunctionCallResolveNode::):
2545         (KJS::FunctionCallBracketNode::):
2546         (KJS::FunctionCallBracketNode::precedence):
2547         (KJS::FunctionCallDotNode::):
2548         (KJS::FunctionCallDotNode::precedence):
2549         (KJS::PrePostResolveNode::):
2550         (KJS::PostfixBracketNode::):
2551         (KJS::PostfixBracketNode::precedence):
2552         (KJS::PostIncBracketNode::):
2553         (KJS::PostIncBracketNode::isIncrement):
2554         (KJS::PostDecBracketNode::):
2555         (KJS::PostDecBracketNode::isIncrement):
2556         (KJS::PostfixDotNode::):
2557         (KJS::PostfixDotNode::precedence):
2558         (KJS::PostIncDotNode::):
2559         (KJS::PostIncDotNode::isIncrement):
2560         (KJS::PostDecDotNode::):
2561         (KJS::PostDecDotNode::isIncrement):
2562         (KJS::PostfixErrorNode::):
2563         (KJS::PostfixErrorNode::precedence):
2564         (KJS::DeleteResolveNode::):
2565         (KJS::DeleteBracketNode::):
2566         (KJS::DeleteBracketNode::precedence):
2567         (KJS::DeleteDotNode::):
2568         (KJS::DeleteDotNode::precedence):
2569         (KJS::DeleteValueNode::):
2570         (KJS::DeleteValueNode::precedence):
2571         (KJS::VoidNode::):
2572         (KJS::VoidNode::precedence):
2573         (KJS::TypeOfResolveNode::):
2574         (KJS::TypeOfValueNode::):
2575         (KJS::PrefixBracketNode::):
2576         (KJS::PrefixBracketNode::precedence):
2577         (KJS::PreIncBracketNode::):
2578         (KJS::PreIncBracketNode::isIncrement):
2579         (KJS::PreDecBracketNode::):
2580         (KJS::PreDecBracketNode::isIncrement):
2581         (KJS::PrefixDotNode::):
2582         (KJS::PrefixDotNode::precedence):
2583         (KJS::PreIncDotNode::):
2584         (KJS::PreIncDotNode::isIncrement):
2585         (KJS::PreDecDotNode::):
2586         (KJS::PreDecDotNode::isIncrement):
2587         (KJS::PrefixErrorNode::):
2588         (KJS::PrefixErrorNode::precedence):
2589         (KJS::UnaryPlusNode::):
2590         (KJS::UnaryPlusNode::precedence):
2591         (KJS::NegateNode::):
2592         (KJS::NegateNode::precedence):
2593         (KJS::BitwiseNotNode::):
2594         (KJS::BitwiseNotNode::precedence):
2595         (KJS::LogicalNotNode::):
2596         (KJS::LogicalNotNode::precedence):
2597         (KJS::AddNode::):
2598         (KJS::AddNode::precedence):
2599         (KJS::LeftShiftNode::):
2600         (KJS::LeftShiftNode::precedence):
2601         (KJS::RightShiftNode::):
2602         (KJS::RightShiftNode::precedence):
2603         (KJS::UnsignedRightShiftNode::):
2604         (KJS::UnsignedRightShiftNode::precedence):
2605         (KJS::LessNode::):
2606         (KJS::LessNode::precedence):
2607         (KJS::GreaterNode::):
2608         (KJS::GreaterNode::precedence):
2609         (KJS::LessEqNode::):
2610         (KJS::LessEqNode::precedence):
2611         (KJS::GreaterEqNode::):
2612         (KJS::GreaterEqNode::precedence):
2613         (KJS::InstanceOfNode::):
2614         (KJS::InstanceOfNode::precedence):
2615         (KJS::InNode::):
2616         (KJS::InNode::precedence):
2617         (KJS::EqualNode::):
2618         (KJS::EqualNode::precedence):
2619         (KJS::NotEqualNode::):
2620         (KJS::NotEqualNode::precedence):
2621         (KJS::StrictEqualNode::):
2622         (KJS::StrictEqualNode::precedence):
2623         (KJS::NotStrictEqualNode::):
2624         (KJS::NotStrictEqualNode::precedence):
2625         (KJS::BitAndNode::):
2626         (KJS::BitAndNode::precedence):
2627         (KJS::BitOrNode::):
2628         (KJS::BitOrNode::precedence):
2629         (KJS::BitXOrNode::):
2630         (KJS::BitXOrNode::precedence):
2631         (KJS::LogicalAndNode::):
2632         (KJS::LogicalAndNode::precedence):
2633         (KJS::LogicalOrNode::):
2634         (KJS::LogicalOrNode::precedence):
2635         (KJS::ConditionalNode::):
2636         (KJS::ConditionalNode::precedence):
2637         (KJS::ReadModifyResolveNode::):
2638         (KJS::ReadModifyResolveNode::precedence):
2639         (KJS::AssignResolveNode::):
2640         (KJS::AssignResolveNode::precedence):
2641         (KJS::ReadModifyBracketNode::):
2642         (KJS::ReadModifyBracketNode::precedence):
2643         (KJS::AssignBracketNode::):
2644         (KJS::AssignBracketNode::precedence):
2645         (KJS::AssignDotNode::):
2646         (KJS::AssignDotNode::precedence):
2647         (KJS::ReadModifyDotNode::):
2648         (KJS::ReadModifyDotNode::precedence):
2649         (KJS::AssignErrorNode::):
2650         (KJS::AssignErrorNode::precedence):
2651         (KJS::CommaNode::):
2652         (KJS::CommaNode::precedence):
2653         (KJS::AssignExprNode::):
2654         (KJS::AssignExprNode::precedence):
2655         (KJS::ExprStatementNode::):
2656         (KJS::IfNode::):
2657         (KJS::DoWhileNode::):
2658         (KJS::WhileNode::):
2659         (KJS::ReturnNode::):
2660         (KJS::WithNode::):
2661         (KJS::ThrowNode::):
2662         (KJS::ParameterNode::):
2663         (KJS::CaseClauseNode::):
2664         (KJS::CaseClauseNode::precedence):
2665         (KJS::ClauseListNode::):
2666         (KJS::SwitchNode::):
2667
2668 2007-11-08  Oliver Hunt  <oliver@apple.com>
2669
2670         Reviewed by Sam.
2671
2672         Add a fast path for bitwise-and of two immediate numbers for a 0.7% improvement in SunSpider (4% bitop improvement).
2673
2674         This only improves bitwise-and performance, as the additional logic required 
2675         for similar code paths on or, xor, and shifting requires additional operations
2676         and branches that negate (and in certain cases, regress) any advantage we might
2677         otherwise receive.
2678
2679         This improves performance on all bitop tests, the cryptography tests, as well as 
2680         the string-base64 and string-unpack-code tests.  No significant degradation on 
2681         any other tests.
2682
2683         * kjs/JSImmediate.h:
2684         (KJS::JSImmediate::areBothImmediateNumbers):
2685         (KJS::JSImmediate::andImmediateNumbers):
2686         * kjs/nodes.cpp:
2687         (KJS::BitAndNode::evaluate):
2688         * kjs/value.h:
2689         (KJS::jsNumberFromAnd):
2690
2691 2007-11-08  Adam Roben  <aroben@apple.com>
2692
2693         Stop using KJS inside of MathExtras.h
2694
2695         Reviewed by Darin.
2696
2697         * wtf/MathExtras.h: Removed an unused header, and a now-unused
2698         forward-declaration.
2699         (wtf_atan2): Use std::numeric_limits intead of KJS.
2700
2701 2007-11-08  Sam Weinig  <sam@webkit.org>
2702
2703         Windows build fix.
2704
2705         * kjs/date_object.cpp:
2706         (KJS::DateProtoFuncToLocaleString::callAsFunction): Fix unused arg warning.
2707         (KJS::DateProtoFuncToLocaleDateString::callAsFunction): ditto
2708         (KJS::DateProtoFuncToLocaleTimeString::callAsFunction): ditto
2709
2710 2007-11-08  Mark Rowe  <mrowe@apple.com>
2711
2712         Gtk build fix.
2713
2714         * kjs/lookup.h: Add missing include.
2715
2716 2007-11-08  Sam Weinig  <sam@webkit.org>
2717
2718         Reviewed by Darin.
2719
2720         Convert JavaScript internal function objects to use one class per
2721         function.  This avoids a switch statement inside what used to be
2722         the shared function classes and will allow Shark to better analyze
2723         the code.
2724
2725         To make this switch, the value property of the HashEntry was changed
2726         to a union of an intptr_t (which is used to continue handle valueGetters)
2727         and function pointer which points to a static constructor for the
2728         individual new function objects.
2729
2730         SunSpider claims this is a 1.0% speedup.
2731
2732         * kjs/array_object.cpp:
2733         (KJS::ArrayPrototype::getOwnPropertySlot):
2734         (KJS::getProperty):
2735         (KJS::ArrayProtoFuncToString::callAsFunction):
2736         (KJS::ArrayProtoFuncToLocaleString::callAsFunction):
2737         (KJS::ArrayProtoFuncJoin::callAsFunction):
2738         (KJS::ArrayProtoFuncConcat::callAsFunction):
2739         (KJS::ArrayProtoFuncPop::callAsFunction):
2740         (KJS::ArrayProtoFuncPush::callAsFunction):
2741         (KJS::ArrayProtoFuncReverse::callAsFunction):
2742         (KJS::ArrayProtoFuncShift::callAsFunction):
2743         (KJS::ArrayProtoFuncSlice::callAsFunction):
2744         (KJS::ArrayProtoFuncSort::callAsFunction):
2745         (KJS::ArrayProtoFuncSplice::callAsFunction):
2746         (KJS::ArrayProtoFuncUnShift::callAsFunction):
2747         (KJS::ArrayProtoFuncFilter::callAsFunction):
2748         (KJS::ArrayProtoFuncMap::callAsFunction):
2749         (KJS::ArrayProtoFuncEvery::callAsFunction):
2750         (KJS::ArrayProtoFuncForEach::callAsFunction):
2751         (KJS::ArrayProtoFuncSome::callAsFunction):
2752         (KJS::ArrayProtoFuncIndexOf::callAsFunction):
2753         (KJS::ArrayProtoFuncLastIndexOf::callAsFunction):
2754         * kjs/array_object.h:
2755         (KJS::ArrayPrototype::classInfo):
2756         * kjs/create_hash_table:
2757         * kjs/date_object.cpp:
2758         (KJS::DatePrototype::getOwnPropertySlot):
2759         (KJS::DateProtoFuncToString::callAsFunction):
2760         (KJS::DateProtoFuncToUTCString::callAsFunction):
2761         (KJS::DateProtoFuncToDateString::callAsFunction):
2762         (KJS::DateProtoFuncToTimeString::callAsFunction):
2763         (KJS::DateProtoFuncToLocaleString::callAsFunction):
2764         (KJS::DateProtoFuncToLocaleDateString::callAsFunction):
2765         (KJS::DateProtoFuncToLocaleTimeString::callAsFunction):
2766         (KJS::DateProtoFuncValueOf::callAsFunction):
2767         (KJS::DateProtoFuncGetTime::callAsFunction):
2768         (KJS::DateProtoFuncGetFullYear::callAsFunction):
2769         (KJS::DateProtoFuncGetUTCFullYear::callAsFunction):
2770         (KJS::DateProtoFuncToGMTString::callAsFunction):
2771         (KJS::DateProtoFuncGetMonth::callAsFunction):
2772         (KJS::DateProtoFuncGetUTCMonth::callAsFunction):
2773         (KJS::DateProtoFuncGetDate::callAsFunction):
2774         (KJS::DateProtoFuncGetUTCDate::callAsFunction):
2775         (KJS::DateProtoFuncGetDay::callAsFunction):
2776         (KJS::DateProtoFuncGetUTCDay::callAsFunction):
2777         (KJS::DateProtoFuncGetHours::callAsFunction):
2778         (KJS::DateProtoFuncGetUTCHours::callAsFunction):
2779         (KJS::DateProtoFuncGetMinutes::callAsFunction):
2780         (KJS::DateProtoFuncGetUTCMinutes::callAsFunction):
2781         (KJS::DateProtoFuncGetSeconds::callAsFunction):
2782         (KJS::DateProtoFuncGetUTCSeconds::callAsFunction):
2783         (KJS::DateProtoFuncGetMilliSeconds::callAsFunction):
2784         (KJS::DateProtoFuncGetUTCMilliseconds::callAsFunction):
2785         (KJS::DateProtoFuncGetTimezoneOffset::callAsFunction):
2786         (KJS::DateProtoFuncSetTime::callAsFunction):
2787         (KJS::DateProtoFuncSetMilliSeconds::callAsFunction):
2788         (KJS::DateProtoFuncSetUTCMilliseconds::callAsFunction):
2789         (KJS::DateProtoFuncSetSeconds::callAsFunction):
2790         (KJS::DateProtoFuncSetUTCSeconds::callAsFunction):
2791         (KJS::DateProtoFuncSetMinutes::callAsFunction):
2792         (KJS::DateProtoFuncSetUTCMinutes::callAsFunction):
2793         (KJS::DateProtoFuncSetHours::callAsFunction):
2794         (KJS::DateProtoFuncSetUTCHours::callAsFunction):
2795         (KJS::DateProtoFuncSetDate::callAsFunction):
2796         (KJS::DateProtoFuncSetUTCDate::callAsFunction):
2797         (KJS::DateProtoFuncSetMonth::callAsFunction):
2798         (KJS::DateProtoFuncSetUTCMonth::callAsFunction):
2799         (KJS::DateProtoFuncSetFullYear::callAsFunction):
2800         (KJS::DateProtoFuncSetUTCFullYear::callAsFunction):
2801         (KJS::DateProtoFuncSetYear::callAsFunction):
2802         (KJS::DateProtoFuncGetYear::callAsFunction):
2803         * kjs/date_object.h:
2804         * kjs/lookup.cpp:
2805         (KJS::Lookup::find):
2806         * kjs/lookup.h:
2807         (KJS::HashEntry::):
2808         (KJS::staticFunctionGetter):
2809         (KJS::staticValueGetter):
2810         (KJS::getStaticPropertySlot):
2811         (KJS::getStaticFunctionSlot):
2812         (KJS::lookupPut):
2813         * kjs/math_object.cpp:
2814         (KJS::MathObjectImp::getOwnPropertySlot):
2815         (KJS::MathProtoFuncAbs::callAsFunction):
2816         (KJS::MathProtoFuncACos::callAsFunction):
2817         (KJS::MathProtoFuncASin::callAsFunction):
2818         (KJS::MathProtoFuncATan::callAsFunction):
2819         (KJS::MathProtoFuncATan2::callAsFunction):
2820         (KJS::MathProtoFuncCeil::callAsFunction):
2821         (KJS::MathProtoFuncCos::callAsFunction):
2822         (KJS::MathProtoFuncExp::callAsFunction):
2823         (KJS::MathProtoFuncFloor::callAsFunction):
2824         (KJS::MathProtoFuncLog::callAsFunction):
2825         (KJS::MathProtoFuncMax::callAsFunction):
2826         (KJS::MathProtoFuncMin::callAsFunction):
2827         (KJS::MathProtoFuncPow::callAsFunction):
2828         (KJS::MathProtoFuncRandom::callAsFunction):
2829         (KJS::MathProtoFuncRound::callAsFunction):
2830         (KJS::MathProtoFuncSin::callAsFunction):
2831         (KJS::MathProtoFuncSqrt::callAsFunction):
2832         (KJS::MathProtoFuncTan::callAsFunction):
2833         * kjs/math_object.h:
2834         (KJS::MathObjectImp::classInfo):
2835         (KJS::MathObjectImp::):
2836         * kjs/string_object.cpp:
2837         (KJS::StringPrototype::getOwnPropertySlot):
2838         (KJS::StringProtoFuncToString::callAsFunction):
2839         (KJS::StringProtoFuncValueOf::callAsFunction):
2840         (KJS::StringProtoFuncCharAt::callAsFunction):
2841         (KJS::StringProtoFuncCharCodeAt::callAsFunction):
2842         (KJS::StringProtoFuncConcat::callAsFunction):
2843         (KJS::StringProtoFuncIndexOf::callAsFunction):
2844         (KJS::StringProtoFuncLastIndexOf::callAsFunction):
2845         (KJS::StringProtoFuncMatch::callAsFunction):
2846         (KJS::StringProtoFuncSearch::callAsFunction):
2847         (KJS::StringProtoFuncReplace::callAsFunction):
2848         (KJS::StringProtoFuncSlice::callAsFunction):
2849         (KJS::StringProtoFuncSplit::callAsFunction):
2850         (KJS::StringProtoFuncSubstr::callAsFunction):
2851         (KJS::StringProtoFuncSubstring::callAsFunction):
2852         (KJS::StringProtoFuncToLowerCase::callAsFunction):
2853         (KJS::StringProtoFuncToUpperCase::callAsFunction):
2854         (KJS::StringProtoFuncToLocaleLowerCase::callAsFunction):
2855         (KJS::StringProtoFuncToLocaleUpperCase::callAsFunction):
2856         (KJS::StringProtoFuncLocaleCompare::callAsFunction):
2857         (KJS::StringProtoFuncBig::callAsFunction):
2858         (KJS::StringProtoFuncSmall::callAsFunction):
2859         (KJS::StringProtoFuncBlink::callAsFunction):
2860         (KJS::StringProtoFuncBold::callAsFunction):
2861         (KJS::StringProtoFuncFixed::callAsFunction):
2862         (KJS::StringProtoFuncItalics::callAsFunction):
2863         (KJS::StringProtoFuncStrike::callAsFunction):
2864         (KJS::StringProtoFuncSub::callAsFunction):
2865         (KJS::StringProtoFuncSup::callAsFunction):
2866         (KJS::StringProtoFuncFontcolor::callAsFunction):
2867         (KJS::StringProtoFuncFontsize::callAsFunction):
2868         (KJS::StringProtoFuncAnchor::callAsFunction):
2869         (KJS::StringProtoFuncLink::callAsFunction):
2870         * kjs/string_object.h:
2871
2872 2007-11-08  Adam Roben  <aroben@apple.com>
2873
2874         Windows build fix
2875
2876         Reviewed by Sam and Ada.
2877
2878         * wtf/MathExtras.h: Get rid of a circular #include dependency to fix
2879         the build.
2880
2881 2007-11-08  Adam Roben  <aroben@apple.com>
2882
2883         Fix a precedence warning on Windows
2884
2885         * kjs/JSImmediate.h:
2886         (KJS::JSImmediate::toBoolean):
2887
2888 2007-11-08  Mark Rowe  <mrowe@apple.com>
2889
2890         Build fix for JavaScriptGlue.
2891
2892         * wtf/MathExtras.h: Include stdlib.h for srand and RAND_MAX.
2893
2894 2007-11-08  Darin Adler  <darin@apple.com>
2895
2896         - Windows build fix
2897
2898         * kjs/JSImmediate.h: Include MathExtras.h rather than math.h since this file uses "signbit".
2899
2900 2007-11-08  Oliver Hunt  <oliver@apple.com>
2901
2902         Reviewed by Darin.
2903
2904         Replace the use of floats for immediate values with the use of integers for a 4.5% improvement in SunSpider.
2905
2906         Unfortunately this change results in NaN, +Inf, -Inf, and -0 being heap allocated now, but
2907         we should now have faster array access, faster immediate to double conversion, and the 
2908         potential to further improve bitwise operators in future.
2909
2910         This also removes the need for unions to avoid strict aliasing problems when extracting 
2911         a value from immediates.
2912
2913         * kjs/JSImmediate.h:
2914         (KJS::):
2915         (KJS::JSImmediate::trueImmediate):
2916         (KJS::JSImmediate::falseImmediate):
2917         (KJS::JSImmediate::undefinedImmediate):
2918         (KJS::JSImmediate::nullImmediate):
2919         (KJS::JSImmediate::toBoolean):
2920         * kjs/value.h:
2921         (KJS::jsNaN):
2922
2923 2007-11-07  Eric Seidel  <eric@webkit.org>
2924
2925         Reviewed by Darin and Oliver.
2926         
2927         Add evaluateToNumber parallel evaluation tree to speed up number operations.
2928         Make ImmediateNumberNode a subclass of NumberNode.
2929         Share evaluate logic between evaluate and evaluateToNumber using inline functions
2930         There is still a lot of improvement to be made here.
2931         
2932         SunSpider claims this is a 1.0% speedup overall (nbody 7.9%), base64 slowing 2.0%
2933         Given the huge win that this prepares us for with simple type inferencing I see the small
2934         regression in base64 being worth the substantial overall improvement.
2935
2936         * kjs/grammar.y:
2937         * kjs/nodes.cpp:
2938         (KJS::Node::evaluateToNumber):
2939         (KJS::NumberNode::evaluate):
2940         (KJS::NumberNode::evaluateToNumber):
2941         (KJS::StringNode::evaluateToNumber):
2942         (KJS::LocalVarAccessNode::inlineEvaluate):
2943         (KJS::LocalVarAccessNode::evaluate):
2944         (KJS::LocalVarAccessNode::evaluateToNumber):
2945         (KJS::BracketAccessorNode::inlineEvaluate):
2946         (KJS::BracketAccessorNode::evaluate):
2947         (KJS::BracketAccessorNode::evaluateToNumber):
2948         (KJS::NegateNode::evaluate):
2949         (KJS::NegateNode::evaluateToNumber):
2950         (KJS::MultNode::inlineEvaluateToNumber):
2951         (KJS::MultNode::evaluate):
2952         (KJS::MultNode::evaluateToNumber):
2953         (KJS::DivNode::inlineEvaluateToNumber):
2954         (KJS::DivNode::evaluate):
2955         (KJS::DivNode::evaluateToNumber):
2956         (KJS::ModNode::inlineEvaluateToNumber):
2957         (KJS::ModNode::evaluate):
2958         (KJS::ModNode::evaluateToNumber):
2959         (KJS::throwOutOfMemoryErrorToNumber):
2960         (KJS::addSlowCaseToNumber):
2961         (KJS::add):
2962         (KJS::addToNumber):
2963         (KJS::AddNode::evaluateToNumber):
2964         (KJS::SubNode::inlineEvaluateToNumber):
2965         (KJS::SubNode::evaluate):
2966         (KJS::SubNode::evaluateToNumber):
2967         (KJS::valueForReadModifyAssignment):
2968         (KJS::ReadModifyLocalVarNode::evaluate):
2969         (KJS::ReadModifyResolveNode::evaluate):
2970         (KJS::ReadModifyDotNode::evaluate):
2971         (KJS::ReadModifyBracketNode::evaluate):
2972         * kjs/nodes.h:
2973         (KJS::Node::):
2974         (KJS::NumberNode::):
2975         (KJS::ImmediateNumberNode::):
2976         (KJS::AddNode::precedence):
2977         * kjs/nodes2string.cpp:
2978         (KJS::NumberNode::streamTo):
2979
2980 2007-11-07  Mark Rowe  <mrowe@apple.com>
2981
2982         Reviewed by Eric.
2983
2984         Fix up initialization after being mangled in r27572, and remove the
2985         ternary expression as extraCost will always be zero for the numeric
2986         heap.
2987
2988         * kjs/collector.cpp:
2989         (KJS::Collector::heapAllocate):
2990
2991 2007-11-07  Mark Rowe  <mrowe@apple.com>
2992
2993         Gtk build fix.
2994
2995         * kjs/regexp_object.cpp:
2996
2997 2007-11-07  Geoffrey Garen  <ggaren@apple.com>
2998
2999         Reviewed by Beth Dakin.
3000         
3001         Eliminated a bogus (though compiled-out) branch in the collector.
3002
3003         * kjs/collector.cpp:
3004         (KJS::Collector::heapAllocate):
3005
3006 2007-11-06  Geoffrey Garen  <ggaren@apple.com>
3007
3008         Reviewed by Darin Adler.
3009         
3010         Fixed part of http://bugs.webkit.org/show_bug.cgi?id=15861 
3011         5.8% of string-validate-input.js is spent creating RegExpImps
3012
3013         Put RegExpImp properties into a static hashtable to avoid a slew of
3014         PropertyMap churn when creating a RegExpImp.
3015         
3016         Factored important bits of regular expression implementation out of
3017         RegExpImp (the JS object) and into RegExp (the PCRE wrapper class), 
3018         making RegExp a ref-counted class. (This will help later.)
3019
3020         Removed PCRE_POSIX support because I didn't quite know how to test it 
3021         and keep it working with these changes.
3022         
3023         1.1% SunSpider speedup. 5.8% speedup on string-validate-input.js.
3024
3025         * kjs/regexp.h: A few interface changes:
3026         1. Renamed "subpatterns()" => "numSubpatterns()"
3027         2. Made flag enumeration private and replaced it with public getters for
3028         specific flags.
3029         3. Made RegExp ref-counted so RegExps can be shared by RegExpImps.
3030         4. Made RegExp take a string of flags instead of an int, eliminating 
3031         duplicated flag parsing code elsewhere.
3032
3033         * kjs/regexp_object.cpp:
3034         (KJS::RegExpProtoFunc::callAsFunction): For RegExp.compile: 
3035         - Fixed a bug where compile(undefined) would throw an exception. 
3036         - Removed some now-redundant code.
3037         - Used RegExp sharing to eliminate an allocation and a bunch of 
3038         PropertyMap thrash. (Not a big win since compile is a deprecated 
3039         function. I mainly did this to test the plubming.)
3040
3041 2007-11-07  Simon Hausmann  <hausmann@kde.org>
3042
3043         Reviewed by nobody, Qt/Windows build fix.
3044
3045         JavaScriptCore.pri expects OBJECTS_DIR to be set, so set it in
3046         testkjs.pro, too, where it's included from.
3047
3048         * kjs/testkjs.pro:
3049
3050 2007-11-07  Simon Hausmann  <shausman@trolltech.com>
3051
3052         Reviewed by Lars.
3053
3054         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.
3055
3056         * JavaScriptCore.pri:
3057         * pcre/pcre.pri:
3058
3059 2007-11-07  Lars Knoll  <lars@trolltech.com>
3060
3061         Reviewed by Simon.
3062
3063         fix umemcasecmp
3064         
3065         Pretty embarrassing bug. Has the potential to fix quite a few test failures.
3066
3067         * wtf/unicode/qt4/UnicodeQt4.h:
3068         (WTF::Unicode::umemcasecmp):
3069
3070 2007-11-06  Maciej Stachowiak  <mjs@apple.com>
3071
3072         Reviewed by Eric.        
3073         
3074         - only collect when the heap is full, unless we have lots of extra cost garbage
3075         
3076         1.1% SunSpider speedup.
3077         
3078         This shouldn't hit memory use much since the extra space in those
3079         blocks hangs around either way.
3080
3081         * kjs/collector.cpp:
3082         (KJS::Collector::heapAllocate):
3083         (KJS::Collector::collect): Fix logic error that reversed the sense of collect's 
3084         return value.
3085
3086 2007-11-06  Oliver Hunt  <oliver@apple.com>
3087
3088         Reviewed by Maciej.
3089
3090         Avoid unnecessarily boxing the result from post inc/decrement for 0.3% gain in sunspider
3091         
3092         We now convert the common 'for (...; ...; <var>++) ...' to the semantically identical
3093         'for (...; ...; ++<var>) ...'.
3094
3095         * kjs/nodes.cpp:
3096         (KJS::PostIncResolveNode::optimizeForUnnecessaryResult):
3097         (KJS::PostIncLocalVarNode::evaluate):
3098         (KJS::PostIncLocalVarNode::optimizeForUnnecessaryResult):
3099         (KJS::PostDecResolveNode::optimizeForUnnecessaryResult):
3100         (KJS::PostDecLocalVarNode::evaluate):
3101         (KJS::PostDecLocalVarNode::optimizeForUnnecessaryResult):
3102         * kjs/nodes.h:
3103         (KJS::PrePostResolveNode::):
3104         (KJS::PostIncResolveNode::):
3105         (KJS::PostIncLocalVarNode::):
3106         (KJS::PostDecResolveNode::):
3107         (KJS::PostDecLocalVarNode::):
3108         (KJS::PreIncResolveNode::):
3109         (KJS::PreDecResolveNode::):
3110         (KJS::ForNode::ForNode):
3111
3112 2007-11-06  Eric Seidel  <eric@webkit.org>
3113
3114         Reviewed by darin.
3115
3116         This fixes a regressed layout test for string + object
3117         
3118         SunSpider claims this was an overall 0.3% speedup, although some individual tests were slower.
3119
3120         * kjs/nodes.cpp:
3121         (KJS::add): remove erroneous "fast path" for string + *
3122
3123 2007-11-06  Geoffrey Garen  <ggaren@apple.com>
3124
3125         Reviewed by Eric Seidel.
3126         
3127         Added toJSNumber, a fast path for converting a JSValue to a JS number,
3128         and deployed it in postfix expressions. In the fast case this 
3129         eliminates a call to jsNumber.
3130         
3131         0.4% speedup on SunSpider.
3132
3133         * ChangeLog:
3134         * kjs/nodes.cpp:
3135         (KJS::PostIncResolveNode::evaluate):
3136         (KJS::PostIncLocalVarNode::evaluate):
3137         (KJS::PostDecResolveNode::evaluate):
3138         (KJS::PostDecLocalVarNode::evaluate):
3139         (KJS::PostIncBracketNode::evaluate):
3140         (KJS::PostDecBracketNode::evaluate):
3141         (KJS::PostIncDotNode::evaluate):
3142         (KJS::PostDecDotNode::evaluate):
3143         (KJS::UnaryPlusNode::evaluate):
3144         * kjs/value.h:
3145         (KJS::JSValue::toJSNumber):
3146
3147 2007-11-06  Darin Adler  <darin@apple.com>
3148
3149         Reviewed by Maciej.
3150
3151         - http://bugs.webkit.org/show_bug.cgi?id=15846
3152           REGRESSION (r27387): Memory corruption when running fast/js/kde/delete.html
3153
3154         There was a mistake in the algorithm used to find an empty slot in the property
3155         map entries vector; when we were putting in a new property value and not overwriting
3156         an existing deleted sentinel, we would enlarge the entries vector, but would not
3157         overwrite the stale data that's in the new part. It was easy to pin this down by
3158         turning on property map consistency checks -- I never would have landed with this
3159         bug if I had run the regression tests once with consistency checks on!
3160
3161         * kjs/property_map.cpp: (KJS::PropertyMap::put): Changed logic for the case where
3162         foundDeletedElement is false to always use the item at the end of the entries vector.
3163         Also allowed me to merge with the logic for the "no deleted sentinels at all" case.
3164
3165 2007-11-06  Oliver Hunt  <oliver@apple.com>
3166
3167         RS=Darin.
3168
3169         Fix previous patch to use a 3 bit shift, a 16 bit shift causes a regression in sunspider.
3170
3171         * kjs/nodes.cpp:
3172         (KJS::add):
3173
3174 2007-11-06  Oliver Hunt  <oliver@apple.com>
3175
3176         Reviewed by Darin.
3177
3178         Replace boolean comparisons in AddNode with mask
3179         comparisons for a 0.2% improvement in sunspider.
3180
3181         * JavaScriptCore.xcodeproj/project.pbxproj:
3182         * kjs/nodes.cpp:
3183         (KJS::add):
3184
3185 2007-11-06  Eric Seidel  <eric@webkit.org>
3186
3187         Reviewed by darin.
3188         
3189         SunSpider claims this is a 1.1% speedup.
3190
3191         * kjs/nodes.cpp:
3192         (KJS::throwOutOfMemoryError): Added, non inline.
3193         (KJS::addSlowCase): renamed from add(), non inline.
3194         (KJS::add): add fast path for String + String, Number + Number and String + *
3195
3196 2007-11-06  Eric Seidel  <eric@webkit.org>
3197
3198         Reviewed by mjs.
3199         
3200         Avoid more UString creation.
3201         
3202         SunSpider claims this is a 0.4% speedup.
3203
3204         * kjs/regexp_object.cpp:
3205         (KJS::RegExpObjectImp::construct): use UString::find(UChar)
3206
3207 2007-11-05  Mark Rowe  <mrowe@apple.com>
3208
3209         Mac build fix.
3210
3211         * kjs/array_object.cpp:
3212         (KJS::ArrayProtoFunc::callAsFunction):
3213
3214 2007-11-05  Adam Roben  <aroben@apple.com>
3215
3216         Windows build fix
3217
3218         * kjs/list.h:
3219
3220 2007-11-05  Mark Rowe  <mrowe@apple.com>
3221
3222         Build fix.  Add missing #include.
3223
3224         * kjs/operations.cpp:
3225
3226 2007-11-05  Eric Seidel  <eric@webkit.org>
3227
3228         Reviewed by mjs.
3229         
3230         Remove another call to toString(exec)
3231         
3232         SunSpider claims this is a 0.5% speedup.
3233
3234         * kjs/operations.cpp:
3235         (KJS::equal): remove another toString
3236
3237 2007-11-05  Eric Seidel  <eric@webkit.org>
3238
3239         * kjs/operations.cpp:
3240         (KJS::equal): correct broken change.
3241
3242 2007-11-05  Eric Seidel  <eric@webkit.org>
3243
3244         Reviewed by mjs.
3245
3246         Remove one more call to toString(exec).
3247         
3248         SunSpider claims this is a 0.7% speedup.
3249
3250         * kjs/operations.cpp:
3251         (KJS::equal): remove a call to toString()
3252
3253 2007-11-05  Mark Rowe  <mrowe@apple.com>
3254
3255         Gtk build fix.
3256
3257         * pcre/pcre.pri:
3258
3259 2007-11-05  Mark Rowe  <mrowe@apple.com>
3260
3261         Gtk build fix.
3262
3263         * kjs/list.cpp:
3264
3265 2007-11-05  Geoffrey Garen  <ggaren@apple.com>
3266
3267         Touched a file to test my new HTTP access.
3268
3269         * kjs/scope_chain.cpp:
3270
3271 2007-11-05  Alp Toker  <alp@atoker.com>
3272
3273         Unreviewed build fix for qmake-based ports.
3274
3275         Someone with a better understanding of qmake still needs to sort out
3276         the INCLUDEPATH/DEPENDPATH mess.
3277
3278         * JavaScriptCore.pri:
3279
3280 2007-11-05  Geoffrey Garen  <ggaren@apple.com>
3281
3282         Reviewed by Darin Adler.
3283         
3284         http://bugs.webkit.org/show_bug.cgi?id=15835
3285
3286         Switched List implementation from a custom heap allocator to an inline
3287         Vector, for a disappointing .5% SunSpider speedup.
3288         
3289         Also renamed List::slice to List::getSlice because "get" is the 
3290         conventional prefix for functions returning a value through an out 
3291         parameter.
3292
3293         * kjs/array_object.cpp:
3294         (KJS::ArrayProtoFunc::callAsFunction): Removed some redundant function
3295         calls and memory accesses.
3296
3297         * kjs/bool_object.cpp:
3298         (BooleanObjectImp::construct): Removed questionable use of iterator.
3299
3300         * kjs/list.cpp:
3301         * kjs/list.h: New List class, implemented in terms of Vector. Two 
3302         interesting differences:
3303             1. The inline capacity is 8, not 5. Many of the Lists constructed 
3304             during a SunSpider run are larger than 5; almost none are larger
3305             than 8.
3306
3307             2. The growth factor is 4, not 2. Since we can guarantee that Lists
3308             aren't long-lived, we can grow them more aggressively, to avoid
3309             excessive copying.
3310
3311         * kjs/regexp_object.cpp:
3312         (RegExpObjectImp::construct): Removed redundant function calls.
3313
3314         * kjs/string_object.cpp:
3315         (KJS::StringObjectImp::construct): Removed questionable use of iterator.
3316
3317         * wtf/Vector.h:
3318         (WTF::::uncheckedAppend): Added a fast, unchecked version of append.
3319
3320 2007-11-05  Mark Rowe  <mrowe@apple.com>
3321
3322         Reviewed by Alp Toker.
3323
3324         Add DEPENDPATH to JavaScriptCore and pcre to help qmake with dependencies.
3325
3326         * JavaScriptCore.pri:
3327         * pcre/pcre.pri:
3328
3329 2007-11-04  Darin Adler  <darin@apple.com>
3330
3331         Reviewed by Maciej.
3332
3333         - http://bugs.webkit.org/show_bug.cgi?id=15826
3334           optimize opcode loop and case insensitive ASCII compares for a 30% speedup
3335
3336         SunSpider says it's 2.6% faster overall, 32.5% in the regular expression tests.
3337
3338         * pcre/pcre_internal.h: Added OP_ASCII_CHAR and OP_ASCII_LETTER_NC.
3339
3340         * pcre/pcre_compile.c:
3341         (find_fixedlength): Added cases for OP_ASCII_CHAR and OP_ASCII_LETTER_NC. Also
3342         added OP_NOT since there was no reason it should not be in here.
3343         (could_be_empty_branch): Ditto.
3344         (compile_branch): Streamlined all the single-character cases; there was a bit of
3345         duplicate code. Added cases for OP_ASCII_CHAR and OP_ASCII_LETTER_NC as needed.
3346         But in particular, compile to those opcodes when the single character match is
3347         ASCII.
3348         (find_firstassertedchar): Added cases for OP_ASCII_CHAR and OP_ASCII_LETTER_NC.
3349
3350         * pcre/pcre_exec.c: (match): Removed the "min", "minimize", and "op" fields from
3351         the matchframe, after I discovered that none of them needed to be saved and restored
3352         across recursive match calls. Also eliminated the ignored result field from the
3353         matchframe, since I discovered that rrc ("recursive result code") was already the
3354         exact same thing. Moved the handling of opcodes higher than OP_BRA into the default
3355         statement of the switch instead of doing them before the switch. This removes a
3356         branch from each iteration of the opcode interpreter, just as removal of "op"
3357         removed at least one store from each iteration. Last, but not least, add the
3358         OP_ASCII_CHAR and OP_ASCII_LETTER_NC functions. Neither can ever match a
3359         surrogate pair and the letter case can be handled efficiently.
3360
3361 2007-11-04  Darin Adler  <darin@apple.com>
3362
3363         * pcre/pcre_exec.c: (match): Try to fix the Windows build by removing unreachable code.
3364
3365 2007-11-03  Darin Adler  <darin@apple.com>
3366
3367         - fix non-Mac builds; remove some more unused PCRE stuff
3368
3369         * pcre/pcre_compile.c:
3370         (compile_branch): Removed branch chain and some unused ESC values.
3371         (compile_regex): Ditto.
3372         (jsRegExpCompile): Ditto.
3373         * pcre/pcre_exec.c:
3374         (match): Removed unused branch targets. Don't use macros any more.
3375         (jsRegExpExecute): More of the same.
3376
3377         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Update for removed files.
3378         * JavaScriptCore.xcodeproj/project.pbxproj: Ditto.
3379         * pcre/pcre.pri: Ditto.
3380
3381         * pcre/MERGING: Removed.
3382         * pcre/pcre_fullinfo.c: Removed.
3383         * pcre/pcre_get.c: Removed.
3384         * pcre/pcre_internal.h:
3385         * pcre/ucp.h: Removed.
3386
3387 2007-11-03  Darin Adler  <darin@apple.com>
3388
3389         Reviewed by Maciej.
3390
3391         - http://bugs.webkit.org/show_bug.cgi?id=15821
3392           remove unused PCRE features for speed
3393
3394         A first step toward removing the PCRE features we don't use.
3395         This gives a 0.8% speedup on SunSpider, and a 6.5% speedup on
3396         the SunSpider regular expression test.
3397
3398         Replaced the public interface with one that doesn't use the
3399         name PCRE. Removed code we don't need for JavaScript and various
3400         configurations we don't use. This is in preparation for still
3401         more changes in the future. We'll probably switch to C++ and
3402         make some even more significant changes to the regexp engine
3403         to get some additional speed.
3404
3405         There's probably additional unused stuff that I haven't
3406         deleted yet.
3407
3408         This does mean that our PCRE is now a fork, but I think that's
3409         not really a big deal.
3410
3411         * JavaScriptCore.exp: Remove the 5 old entry points and add
3412         the 3 new entry points for WebCore's direct use of the regular
3413         expression engine.
3414
3415         * kjs/config.h: Remove the USE(PCRE16) define. I decided to flip
3416         its sense and now there's a USE(POSIX_REGEX) instead, which should
3417         probably not be set by anyone. Maybe later we'll just get rid of it
3418         altogether.
3419
3420         * kjs/regexp.h:
3421         * kjs/regexp.cpp:
3422         (KJS::RegExp::RegExp): Switch to new jsRegExp function names and
3423         defines. Cut down on the number of functions used.
3424         (KJS::RegExp::~RegExp): Ditto.
3425         (KJS::RegExp::match): Ditto.
3426
3427         * pcre/dftables.c: (main): Get rid of ctype_letter and ctype_meta,
3428         which are unused.
3429
3430         * pcre/pcre-config.h: Get rid of EBCIDIC, PCRE_DATA_SCOPE, const,
3431         size_t, HAVE_STRERROR, HAVE_MEMMOVE, HAVE_BCOPY, NEWLINE,
3432         POSIX_MALLOC_THRESHOLD, NO_RECURSE, SUPPORT_UCP, SUPPORT_UTF8,
3433         and JAVASCRIPT. These are all no longer configurable in our copy
3434         of the library.
3435
3436         * pcre/pcre.h: Remove the macro-based kjs prefix hack, the PCRE
3437         version macros, PCRE_UTF16, the code to set up PCRE_DATA_SCOPE,
3438         the include of <stdlib.h>, and most of the constants and
3439         functions defined in this header. Changed the naming scheme to
3440         use a JSRegExp prefix rather than a pcre prefix. In the future,
3441         we'll probably change this to be a C++ header.
3442
3443         * pcre/pcre_compile.c: Removed all unused code branches,
3444         including many whole functions and various byte codes.
3445         Kept changes outside of removal to a minimum.
3446         (check_escape):
3447         (first_significant_code):
3448         (find_fixedlength):
3449         (find_recurse):
3450         (could_be_empty_branch):
3451         (compile_branch):
3452         (compile_regex):
3453         (is_anchored):
3454         (is_startline):
3455         (find_firstassertedchar):
3456         (jsRegExpCompile): Renamed from pcre_compile2 and changed the
3457         parameters around a bit.
3458         (jsRegExpFree): Added.
3459
3460         * pcre/pcre_exec.c: Removed many unused opcodes and variables.
3461         Also started tearing down the NO_RECURSE mechanism since it's
3462         now the default. In some cases there were things in the explicit
3463         frame that could be turned into plain old local variables and
3464         other small like optimizations.
3465         (pchars):
3466         (match_ref):
3467         (match): Changed parameters quite a bit since it's now not used
3468         recursively.
3469         (jsRegExpExecute): Renamed from pcre_exec.
3470
3471         * pcre/pcre_internal.h: Get rid of PCRE_DEFINITION, PCRE_SPTR,
3472         PCRE_IMS, PCRE_ICHANGED, PCRE_NOPARTIAL, PCRE_STUDY_MAPPED,
3473         PUBLIC_OPTIONS, PUBLIC_EXEC_OPTIONS, PUBLIC_DFA_EXEC_OPTIONS,
3474         PUBLIC_STUDY_OPTIONS, MAGIC_NUMBER, 16 of the opcodes,
3475         _pcre_utt, _pcre_utt_size, _pcre_try_flipped, _pcre_ucp_findprop,
3476         and _pcre_valid_utf8. Also moved pcre_malloc and pcre_free here.
3477
3478         * pcre/pcre_maketables.c: Changed to only compile in dftables.
3479         Also got rid of many of the tables that we don't use.
3480
3481         * pcre/pcre_tables.c: Removed the unused Unicode property tables.
3482
3483         * pcre/pcre_ucp_searchfuncs.c: Removed everything except for
3484         _pcre_ucp_othercase.
3485
3486         * pcre/pcre_xclass.c: (_pcre_xclass): Removed uneeded support
3487         for classes based on Unicode properties.
3488
3489         * wtf/FastMallocPCRE.cpp: Removed unused bits. It would be good
3490         to eliminate this completely, but we need the regular expression
3491         code to be C++ first.
3492
3493         * pcre/pcre_fullinfo.c:
3494         * pcre/pcre_get.c:
3495         * pcre/ucp.h:
3496         Files that are no longer needed. I didn't remove them with this
3497         check-in, because I didn't want to modify all the project files.
3498
3499 2007-11-03  Maciej Stachowiak  <mjs@apple.com>
3500
3501         Reviewed by Sam.
3502         
3503         - remove NaN check from JSImmediate::fromDouble for 0.5% SunSpider speedup
3504
3505         It turns out that doing this check costs more than it saves.
3506         
3507         * kjs/JSImmediate.h:
3508         (KJS::JSImmediate::fromDouble):
3509
3510 2007-11-03  Sam Weinig  <sam@webkit.org>
3511
3512         Reviewed by Oliver.
3513
3514         Remove dummy variable from ClassInfo reducing the size of the struct by 1 word.
3515         The variable had been kept around for binary compatibility, but since nothing
3516         else is there is no point in continuing to keep it around.
3517
3518         * API/JSCallbackConstructor.cpp:
3519         (KJS::):
3520         * API/JSCallbackFunction.cpp:
3521         (KJS::):
3522         * API/JSCallbackObject.cpp:
3523         (KJS::):
3524         * bindings/objc/objc_runtime.mm:
3525         * bindings/runtime_array.cpp:
3526         * bindings/runtime_object.cpp:
3527         * kjs/array_instance.cpp:
3528         (KJS::):
3529         * kjs/array_object.cpp:
3530         (KJS::):
3531         * kjs/bool_object.cpp:
3532         * kjs/date_object.cpp:
3533         (KJS::):
3534         * kjs/error_object.cpp:
3535         * kjs/function.cpp:
3536         (KJS::):
3537         * kjs/internal.cpp:
3538         (KJS::):
3539         * kjs/lookup.h:
3540         * kjs/math_object.cpp:
3541         * kjs/number_object.cpp:
3542         * kjs/object.h:
3543         * kjs/regexp_object.cpp:
3544         * kjs/string_object.cpp:
3545         (KJS::):
3546
3547 2007-11-03  Kevin McCullough  <kmccullough@apple.com>
3548
3549         - Updated testkjs results to make the build bots green until we
3550         can fix the tests that are failing.  The new failures are in DST.
3551
3552         * tests/mozilla/expected.html:
3553
3554 2007-11-03  Maciej Stachowiak  <mjs@apple.com>
3555
3556         Reviewed by Adam.
3557         
3558         - don't print the var twice for ForInNodes with a var declaration
3559
3560         * kjs/nodes2string.cpp:
3561         (KJS::ForInNode::streamTo):
3562
3563 2007-11-03  Darin Adler  <darin@apple.com>
3564
3565         * pcre/pcre_compile.c: (check_escape): Windows build fix. Get rid of
3566         C-incompatible declaration.
3567
3568 2007-11-03  Mark Rowe  <mrowe@apple.com>
3569
3570         Gtk build fix.
3571
3572         * kjs/nodes.cpp:  Add missing include.
3573
3574 2007-11-03  Darin Adler  <darin@apple.com>
3575
3576         Reviewed by Maciej.
3577
3578         - fix http://bugs.webkit.org/show_bug.cgi?id=15814
3579           <rdar://problem/5536644> fast/js/kde/encode_decode_uri.html fails
3580
3581         These changes cause us to match the JavaScript specification and pass the
3582         fast/js/kde/encode_decode_uri.html test.
3583
3584         * kjs/function.cpp: (KJS::encode): Call the UTF-8 string conversion in its
3585         new strict mode, throwing an exception if there are malformed UTF-16 surrogate
3586         pairs in the text.
3587
3588         * kjs/ustring.h: Added a strict version of the UTF-8 string conversion.
3589         * kjs/ustring.cpp:
3590         (KJS::decodeUTF8Sequence): Removed code to disallow U+FFFE and U+FFFF; while
3591         those might be illegal in some sense, they aren't supposed to get any special
3592         handling in the place where this function is currently used.
3593         (KJS::UString::UTF8String): Added the strictness.
3594
3595 2007-11-03  Darin Adler  <darin@apple.com>
3596
3597         Reviewed by Maciej.
3598
3599         - http://bugs.webkit.org/show_bug.cgi?id=15812
3600           some JavaScript tests (from the Mozilla test suite) are failing
3601
3602         Two or three fixes get 7 more of the Mozilla tests passing.
3603         This gets us down from 61 failing tests to 54.
3604
3605         * kjs/interpreter.h: (KJS::Interpreter::builtinRegExp):
3606         Made this inline and gave it a more specific type. Some day we should
3607         probably do that for all of these -- might even get a bit of a speed
3608         boost from it.
3609         * kjs/interpreter.cpp: Removed Interpreter::builtinRegExp now that it's
3610         inline in the header.
3611
3612         * kjs/regexp_object.h:
3613         * kjs/regexp_object.cpp:
3614         (KJS::RegExpProtoFunc::callAsFunction): Moved test and exec out of the
3615         switch statement into the RegExpImp object, so they can be shared with
3616         RegExpImp::callAsFunction.
3617         (KJS::RegExpImp::match): Added. Common code used by both test and exec.
3618         (KJS::RegExpImp::test): Added.
3619         (KJS::RegExpImp::exec): Added.
3620         (KJS::RegExpImp::implementsCall): Added.
3621         (KJS::RegExpImp::callAsFunction): Added.
3622         (KJS::RegExpObjectImpPrivate::RegExpObjectImpPrivate): Initialize
3623         lastInput to null rather than empty string -- we take advantage of the
3624         difference in RegExpImp::match.
3625         (KJS::RegExpObjectImp::input): Added. No reason to go through hash tables
3626         just to get at a field like this.
3627
3628         * pcre/pcre_compile.c: (check_escape): Changed the \u handling to match
3629         the JavaScript specification. If there are not 4 hex digits after the \u,
3630         then it's processed as if it wasn't an escape sequence at all.
3631
3632         * pcre/pcre_internal.h: Added IS_NEWLINE, with the appropriate definition
3633         for JavaScript (4 specific Unicode values).
3634         * pcre/pcre_exec.c:
3635         (match): Changed all call sites to use IS_NEWLINE.
3636         (pcre_exec): Ditto.
3637
3638         * tests/mozilla/expected.html: Updated to expect 7 more successful tests.
3639
3640 2007-11-03  David D. Kilzer  <ddkilzer@webkit.org>
3641
3642         Sort files(...); sections of Xcode project files.
3643
3644         Rubber-stamped by Darin.
3645
3646         * JavaScriptCore.xcodeproj/project.pbxproj:
3647
3648 2007-11-03  Maciej Stachowiak  <mjs@apple.com>
3649
3650         Reviewed by Oliver.
3651         
3652         - remove VarDeclListNode and simplify VarDeclNode evaluation for 0.4% SunSpider speedup
3653
3654         * kjs/grammar.y:
3655         * kjs/nodes.cpp:
3656         (KJS::VarDeclNode::optimizeVariableAccess):
3657         (KJS::VarDeclNode::getDeclarations):
3658         (KJS::VarDeclNode::handleSlowCase):
3659         (KJS::VarDeclNode::evaluateSingle):
3660         (KJS::VarDeclNode::evaluate):
3661         (KJS::VarStatementNode::execute):
3662         * kjs/nodes.h:
3663         (KJS::VarDeclNode::):
3664         (KJS::VarStatementNode::):
3665         * kjs/nodes2string.cpp:
3666         (KJS::VarDeclNode::streamTo):
3667
3668 2007-11-03  Alexey Proskuryakov  <ap@webkit.org>
3669
3670         Reviewed by Darin.
3671
3672         http://bugs.webkit.org/show_bug.cgi?id=15800
3673         REGRESSION (r27303): RegExp leaks
3674
3675         * kjs/regexp_object.h:
3676         (KJS::RegExpImp::setRegExp):
3677         (KJS::RegExpImp::regExp):
3678         (KJS::RegExpImp::classInfo):
3679         * kjs/regexp_object.cpp:
3680         (RegExpImp::RegExpImp):
3681         (RegExpImp::~RegExpImp):
3682         Renamed reg member variable to m_regExp, changed it to use OwnPtr.
3683
3684 2007-11-02  Maciej Stachowiak  <mjs@apple.com>
3685
3686         Reviewed by Oliver.
3687         
3688         - add SourceElements as a typedef for Vector<RefPtr<StatementNode> >.
3689
3690         * kjs/grammar.y:
3691         * kjs/nodes.cpp:
3692         (KJS::statementListPushFIFO):
3693         (KJS::statementListGetDeclarations):
3694         (KJS::statementListInitializeDeclarationStacks):
3695         (KJS::statementListInitializeVariableAccessStack):
3696         (KJS::statementListExecute):
3697         (KJS::BlockNode::BlockNode):
3698         (KJS::FunctionBodyNode::FunctionBodyNode):
3699         (KJS::ProgramNode::ProgramNode):
3700         * kjs/nodes.h:
3701         (KJS::CaseClauseNode::):
3702
3703 2007-11-02  Darin Adler  <darin@apple.com>
3704
3705         Reviewed by Maciej.
3706
3707         - http://bugs.webkit.org/show_bug.cgi?id=15791
3708           change property map data structure for less memory use, better speed
3709
3710         The property map now has an array of indices and a separate array of
3711         property map entries. This slightly slows down lookup because of a second
3712         memory acess, but makes property maps smaller and faster to iterate in
3713         functions like mark().
3714
3715         SunSpider says this is 1.2% faster, although it makes the bitwise-end test
3716         more than 10% slower. To fix that we'll need to optimize global variable lookup.
3717
3718         * kjs/property_map.cpp:
3719         (KJS::PropertyMapEntry::PropertyMapEntry):
3720         (KJS::PropertyMapHashTable::entries):
3721         (KJS::PropertyMapHashTable::allocationSize):
3722         (KJS::SavedProperties::SavedProperties):
3723         (KJS::SavedProperties::~SavedProperties):
3724         (KJS::PropertyMap::checkConsistency):
3725         (KJS::PropertyMap::~PropertyMap):
3726         (KJS::PropertyMap::clear):
3727         (KJS::PropertyMap::get):
3728         (KJS::PropertyMap::getLocation):
3729         (KJS::PropertyMap::put):
3730         (KJS::PropertyMap::insert):
3731         (KJS::PropertyMap::createTable):
3732         (KJS::PropertyMap::rehash):
3733         (KJS::PropertyMap::remove):
3734         (KJS::PropertyMap::mark):
3735         (KJS::comparePropertyMapEntryIndices):
3736         (KJS::PropertyMap::containsGettersOrSetters):
3737         (KJS::PropertyMap::getEnumerablePropertyNames):
3738         (KJS::PropertyMap::save):
3739         (KJS::PropertyMap::restore):
3740         * kjs/property_map.h:
3741
3742 2007-11-02  Darin Adler  <darin@apple.com>
3743
3744         Reviewed by Maciej.
3745
3746         - http://bugs.webkit.org/show_bug.cgi?id=15807
3747           HashMap needs a take() function that combines get and remove
3748
3749         * wtf/HashMap.h: Added take function. Simplistic implementation for now,
3750         but still does only one hash table lookup.
3751
3752         * kjs/array_instance.cpp: (KJS::ArrayInstance::put): Use take rather than
3753         a find followed by a remove.
3754
3755 2007-11-02  David Carson  <dacarson@gmail.com>
3756
3757         Reviewed by Darin.
3758
3759         Fix compiler warning "warning: suggest parentheses around && within ||"
3760         http://bugs.webkit.org/show_bug.cgi?id=15764
3761
3762         * kjs/value.h: (KJS::JSValue::isNumber): Add parentheses.
3763
3764 2007-11-01  Geoffrey Garen  <ggaren@apple.com>
3765
3766         Reviewed by Maciej Stachowiak.
3767         
3768         In preparation for making List a simple stack-allocated Vector:
3769
3770         Removed all instances of List copying and/or assignment, and made List 
3771         inherit from Noncopyable.
3772         
3773         Functions that used to return a List by copy now take List& out 
3774         parameters.
3775         
3776         Layout tests and JS tests pass.
3777
3778         * kjs/list.cpp:
3779         (KJS::List::slice): Replaced copyTail with a more generic slice 
3780         alternative. (JavaScriptCore only calls slice(1), but WebCore calls 
3781         slice(2)).
3782
3783 2007-11-01  Geoffrey Garen  <ggaren@apple.com>
3784
3785         Reviewed by Maciej Stachowiak.
3786
3787         Fixed http://bugs.webkit.org/show_bug.cgi?id=15785
3788         REGRESSION(r27344): Crash on load at finance.yahoo.com
3789         
3790         Reverted a small portion of my last check-in. (The speedup and the List 
3791         removal are still there, though.)
3792         
3793         ActivationImp needs to hold a pointer to its function, and mark that 
3794         pointer (rather than accessing its function through its ExecState, and 
3795         counting on the active scope to mark its function) because a closure 
3796         can cause an ActivationImp to outlive its ExecState along with any 
3797         active scope.
3798
3799         * kjs/ExecState.cpp:
3800         (KJS::ExecState::ExecState):
3801         * kjs/function.cpp:
3802         (KJS::FunctionImp::~FunctionImp):
3803         (KJS::ActivationImp::ActivationImp):
3804         * kjs/function.h:
3805         (KJS::ActivationImp::ActivationImpPrivate::ActivationImpPrivate):
3806
3807         Also made HashTable a little more crash-happy in debug builds, so 
3808         problems like this will show up earlier:
3809         
3810         * wtf/HashTable.h:
3811         (WTF::HashTable::~HashTable):
3812
3813 2007-11-01  Geoffrey Garen  <ggaren@apple.com>
3814
3815         Reviewed by Adam Roben.
3816         
3817         Addressed some of Darin's review comments.
3818         
3819         Used perl -p, which is the shorthand while(<>) {}.
3820         
3821         Made sure not to suppress bison's output.
3822         
3823         Added line to removed bison_out.txt, since this script removes other 
3824         intermediate files, too.
3825
3826         * DerivedSources.make:
3827
3828 2007-11-01  Geoffrey Garen  <ggaren@apple.com>
3829
3830         Reviewed by Oliver Hunt.
3831         
3832         Removed List from ActivationImp, in preparation for making all lists
3833         stack-allocated.
3834         
3835         Tests pass.
3836         
3837         1.0% speedup on SunSpider, presumably due to reduced List refcount thrash.
3838
3839         * kjs/ExecState.cpp:
3840         (KJS::ExecState::ExecState):
3841         (KJS::ExecState::~ExecState):
3842         * kjs/function.cpp:
3843         (KJS::ActivationImp::ActivationImp):
3844         (KJS::ActivationImp::createArgumentsObject):
3845         * kjs/function.h:
3846         (KJS::ActivationImp::ActivationImpPrivate::ActivationImpPrivate):
3847
3848 2007-11-01  Adam Roben  <aroben@apple.com>
3849
3850         Use jsNumberCell instead of jsNumber when converting double constants to JSValues
3851
3852         This fixes fast/js/math.html, ecma/Date/15.9.5.10-1.js, and
3853         ecma/Date/15.9.5.12-1.js, which were suffering from a bug in MSVC.
3854
3855         It also gets rid of an MSVC warning that we previously had to silence.
3856
3857         Reviewed by Geoff.
3858
3859         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Turn
3860         back on the "overflow in constant arithmetic" warning.
3861         * kjs/number_object.cpp:
3862         (NumberObjectImp::getValueProperty): Use jsNumberCell instead of
3863         jsNumber.
3864
3865 2007-10-31  Adam Roben  <aroben@apple.com>
3866
3867         Windows build fix
3868
3869         * kjs/ExecState.h:
3870
3871 2007-10-31  Maciej Stachowiak  <mjs@apple.com>
3872
3873         Reviewed by Oliver.
3874         
3875         - shave some cycles off of local storage access for a 1% SunSpider speedup
3876         
3877         Keep the LocalStorage pointer in the ExecState, instead of getting
3878         it from the ActivationImp all the time.
3879
3880         * kjs/ExecState.cpp:
3881         (KJS::ExecState::updateLocalStorage):
3882         * kjs/ExecState.h:
3883         (KJS::ExecState::localStorage):
3884         * kjs/nodes.cpp:
3885         (KJS::LocalVarAccessNode::evaluate):
3886         (KJS::LocalVarFunctionCallNode::evaluate):
3887         (KJS::PostIncLocalVarNode::evaluate):
3888         (KJS::PostDecLocalVarNode::evaluate):
3889         (KJS::LocalVarTypeOfNode::evaluate):
3890         (KJS::PreIncLocalVarNode::evaluate):
3891         (KJS::PreDecLocalVarNode::evaluate):
3892         (KJS::ReadModifyLocalVarNode::evaluate):
3893         (KJS::AssignLocalVarNode::evaluate):
3894         (KJS::FunctionBodyNode::processDeclarationsForFunctionCode):
3895
3896 2007-10-31  Adam Roben  <aroben@apple.com>
3897
3898         Fix a crash on launch due to a static initializer race
3899
3900         We now use fast inline assembler spinlocks which can be statically
3901         initialized at compile time.
3902
3903         As a side benefit, this speeds up SunSpider by 0.4%.
3904
3905         Reviewed by Oliver.
3906
3907         * wtf/FastMalloc.cpp:
3908         * wtf/TCSpinLock.h:
3909         (TCMalloc_SpinLock::Lock):
3910         (TCMalloc_SpinLock::Unlock):
3911         (TCMalloc_SlowLock):
3912         * wtf/TCSystemAlloc.cpp:
3913
3914 2007-10-31  Kevin McCullough  <kmccullough@apple.com>
3915
3916         Reviewed by Sam.
3917
3918         - Corrected spelling.
3919
3920         * wtf/HashTraits.h:
3921
3922 2007-10-31  Mark Rowe  <mrowe@apple.com>
3923
3924         Further Gtk build fixage.
3925
3926         * kjs/regexp_object.cpp:
3927
3928 2007-10-31  Mark Rowe  <mrowe@apple.com>
3929
3930         Gtk build fix.
3931
3932         * kjs/regexp.h:
3933
3934 2007-10-31  Darin Adler  <darin@apple.com>
3935
3936         Reviewed by Maciej.
3937
3938         - fix http://bugs.webkit.org/show_bug.cgi?id=15749
3939           RegExp/RegExpObjectImp cause needless UString creation
3940
3941         Speeds things up 0.4% according to SunSpider.
3942
3943         * kjs/config.h: Define USE(PCRE16) instead of HAVE(PCREPOSIX),
3944         because this library doesn't use the real PCRE -- it uses its
3945         own PCRE that works on UTF-16.
3946
3947         * kjs/regexp.h: Removed a few unused functions. Changed the ifdef.
3948         Use Noncopyable. Change the return value of match.
3949         * kjs/regexp.cpp:
3950         (KJS::RegExp::RegExp): Call pcre_compile2, for a slight speed boost.
3951         (KJS::RegExp::~RegExp): PCRE16 rather than PCREPOSIX.
3952         (KJS::RegExp::match): Change to return the position as an int and the
3953         ovector as a OwnArrayPtr<int> for efficiency and clearer storage management.
3954
3955         * kjs/regexp_object.h: Change performMatch and arrayOfMatches to no longer
3956         require a result string.
3957         * kjs/regexp_object.cpp:
3958         (RegExpProtoFunc::callAsFunction): Update for new signature of performMatch.
3959         (RegExpObjectImp::performMatch): Change so it doesn't return a string.
3960         (RegExpObjectImp::arrayOfMatches): Simplify by unifying the handling of
3961         the main result with the backreferences; now it doesn't need to take
3962         a result parameter.
3963         (RegExpObjectImp::getBackref): Minor tweaks.
3964         (RegExpObjectImp::getLastParen): Ditto.
3965         (RegExpObjectImp::getLeftContext): Ditto.
3966         (RegExpObjectImp::getRightContext): Ditto.
3967         (RegExpObjectImp::getValueProperty): Change LastMatch case to call
3968         getBackref(0) so we don't need a separate getLastMatch function.
3969
3970         * kjs/string_object.cpp:
3971         (KJS::replace): Update to use new performMatch, including merging the
3972         matched string section with the other substrings.
3973         (KJS::StringProtoFunc::callAsFunction): Update functions to use the
3974         new performMatch and match. Also change to use OwnArrayPtr.
3975
3976 2007-10-31  Oliver Hunt  <oliver@apple.com>
3977
3978         * kjs/nodes.h: include OwnPtr.h
3979
3980 2007-10-31  Oliver Hunt  <oliver@apple.com>
3981
3982         Reviewed by Maciej.
3983
3984         Remove SourceCodeElement class and replaced with a Vector for a 0.8% gain on sunspider
3985
3986         * kjs/grammar.y:
3987         * kjs/nodes.cpp:
3988         (KJS::statementListPushFIFO):
3989         (KJS::statementListGetDeclarations):
3990         (KJS::statementListInitializeDeclarationStacks):
3991         (KJS::statementListInitializeVariableAccessStack):
3992         (KJS::statementListExecute):
3993         (KJS::BlockNode::optimizeVariableAccess):
3994         (KJS::BlockNode::BlockNode):
3995         (KJS::BlockNode::getDeclarations):
3996         (KJS::BlockNode::execute):
3997         (KJS::CaseClauseNode::optimizeVariableAccess):
3998         (KJS::CaseClauseNode::getDeclarations):
3999         (KJS::CaseClauseNode::evalStatements):
4000         (KJS::FunctionBodyNode::initializeDeclarationStacks):
4001         (KJS::FunctionBodyNode::optimizeVariableAccess):
4002         * kjs/nodes.h:
4003         * kjs/nodes2string.cpp:
4004         (KJS::statementListStreamTo):
4005         (KJS::BlockNode::streamTo):
4006         (KJS::CaseClauseNode::streamTo):
4007
4008 2007-10-30  Mark Rowe  <mrowe@apple.com>
4009
4010         * kjs/property_map.cpp: Added a missing using directive to fix the build
4011         for non-Mac ports. Mac worked only because it does the AllInOneFile compile.
4012
4013 2007-10-31  Maciej Stachowiak  <mjs@apple.com>
4014
4015         * kjs/property_map.cpp: Include HashTable.h the right way to fix the build
4016         for non-Mac ports.
4017
4018 2007-10-31  Alexey Proskuryakov  <ap@webkit.org>
4019
4020         Reviewed by Darin.
4021
4022         http://bugs.webkit.org/show_bug.cgi?id=11001
4023         WebKit doesn't support RegExp.compile method
4024
4025         Test: fast/js/regexp-compile.html
4026
4027         * kjs/regexp_object.cpp:
4028         (RegExpPrototype::RegExpPrototype):
4029         (RegExpProtoFunc::callAsFunction):
4030         * kjs/regexp_object.h:
4031         (KJS::RegExpProtoFunc::):
4032         Added RegExp.compile.
4033
4034         * tests/mozilla/expected.html: js1_2/regexp/compile.js now passes.
4035
4036 2007-10-31  Maciej Stachowiak  <mjs@apple.com>
4037
4038         Reviewed by Oliver.
4039         
4040         - get rid of integer divide in PropertyMap and HashTable for 1% SunSpider speedup
4041         
4042         Integer divide sucks. Fortunately, a bunch of shifts and XORs
4043         biased towards the high bits is sufficient to provide a good
4044         double hash. Besides the SunSpider win, I used the dump statistics
4045         mode for both to verify that collisions did not increase and that
4046         the longest collision chain is not any longer.
4047
4048         * kjs/property_map.cpp:
4049         (KJS::doubleHash):
4050         (KJS::PropertyMap::get):
4051         (KJS::PropertyMap::getLocation):
4052         (KJS::PropertyMap::put):
4053         (KJS::PropertyMap::insert):
4054         (KJS::PropertyMap::remove):
4055         (KJS::PropertyMap::checkConsistency):
4056         * wtf/HashTable.h:
4057         (WTF::doubleHash):
4058         (WTF::::lookup):
4059         (WTF::::lookupForWriting):
4060         (WTF::::fullLookupForWriting):
4061         (WTF::::add):
4062
4063 2007-10-30  Adam Roben  <aroben@apple.com>
4064
4065         * kjs/collector.h: Make HeapType public so it can be used for non-member
4066         things like the HeapConstants struct template. Fixes the build on Windows.
4067
4068 2007-10-30  Adam Roben  <aroben@apple.com>
4069
4070         Change ALWAYS_INLINE and WTF_PRIVATE_INLINE to use __forceinline on Windows
4071
4072         Speeds up SunSpider by 0.4%.
4073
4074         Reviewed by Steve and Maciej.
4075
4076         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Disable
4077         a warning during LTCG in release builds about double -> float
4078         conversion.
4079         * wtf/AlwaysInline.h:
4080         * wtf/FastMalloc.h:
4081
4082 2007-10-30  Adam Roben  <aroben@apple.com>
4083
4084         Use GetCurrentThreadId instead of pthread_self in FastMalloc
4085
4086         Speeds up SunSpider by 0.3%.
4087
4088         Reviewed by Steve.
4089
4090         * wtf/FastMalloc.cpp:
4091         (WTF::TCMalloc_ThreadCache::InitTSD):
4092         (WTF::TCMalloc_ThreadCache::CreateCacheIfNecessary):
4093
4094 2007-10-30  Adam Roben  <aroben@apple.com>
4095
4096         Switch to a Win32 critical section implementation of spinlocks
4097         
4098         Speeds up SunSpider by 0.4%.
4099         
4100         Reviewed by Steve.
4101         
4102         * wtf/FastMalloc.cpp:
4103         * wtf/TCSpinLock.h:
4104         (TCMalloc_SpinLock::TCMalloc_SpinLock):
4105         (TCMalloc_SpinLock::Init):
4106         (TCMalloc_SpinLock::Finalize):
4107         (TCMalloc_SpinLock::Lock):
4108         (TCMalloc_SpinLock::Unlock):
4109         * wtf/TCSystemAlloc.cpp:
4110
4111 2007-10-30  Adam Roben  <aroben@apple.com>
4112
4113         Fix Bug 15586: REGRESSION (r26759-r26785): Windows nightly builds crash with Safari 3 Public Beta
4114
4115         http://bugs.webkit.org/show_bug.cgi?id=15586
4116
4117         Also fixes: <rdar://5565303> Cannot use regsvr32.exe to register WebKit.dll
4118
4119         Use Win32 TLS functions instead of __declspec(thread), which breaks
4120         delay-loading.
4121
4122         Reviewed by Steve.
4123
4124         * wtf/FastMalloc.cpp:
4125         (WTF::getThreadHeap):
4126         (WTF::TCMalloc_ThreadCache::InitModule):
4127
4128 2007-10-30  Maciej Stachowiak  <mjs@apple.com>
4129
4130         Reviewed by Oliver.
4131         
4132         - allocate numbers in half-size cells, for an 0.5% SunSpider speedup
4133         http://bugs.webkit.org/show_bug.cgi?id=15772
4134         
4135         We do this by using a single mark bit per two number cells, and
4136         tweaking marking.
4137         
4138         Besides being an 0.5% win overall, this is a 7.1% win on morph.
4139
4140         * kjs/collector.cpp:
4141         (KJS::):
4142         (KJS::Collector::heapAllocate):
4143         (KJS::Collector::markStackObjectsConservatively):
4144         (KJS::Collector::sweep):
4145         * kjs/collector.h:
4146         (KJS::SmallCollectorCell::):
4147
4148 2007-10-30  Geoffrey Garen  <ggaren@apple.com>
4149
4150         Reviewed by Adam Roben, Sam Weinig.
4151         
4152         Made conflicts in grammar.y a persistent build failure.
4153
4154         * DerivedSources.make:
4155
4156 2007-10-30  Kevin McCullough  <kmccullough@apple.com>
4157
4158         Reviewed by Adam and Geoff.
4159
4160         - Added a new cast so all the casts are in the same place.
4161
4162         * API/APICast.h:
4163         (toGlobalRef):
4164
4165 2007-10-30  Geoffrey Garen  <ggaren@apple.com>
4166
4167         Reviewed by Darin Adler.
4168
4169         Fixed <rdar://problem/5567504> shift/reduce conflict introduced in r24457
4170         
4171         JS tests, including 
4172
4173             ecma_2/Statements/dowhile-001.js
4174             ecma_2/Statements/dowhile-002.js
4175             ecma_2/Statements/dowhile-003.js
4176             ecma_2/Statements/dowhile-004.js
4177             ecma_2/Statements/dowhile-005.js
4178             ecma_2/Statements/dowhile-006.js
4179             ecma_2/Statements/dowhile-007.js
4180             js1_2/statements/do_while.js
4181
4182         and layout tests, including
4183
4184             do-while-expression-value.html
4185             do-while-semicolon.html
4186             do-while-without-semicolon.html
4187         
4188         pass.
4189         
4190         * kjs/grammar.y: Use the explicit "error" production, as we do with other
4191         automatic semicolon insertions, to disambiguate "do { } while();" from
4192         "do { } while()" followed by ";" (the empty statement).
4193
4194 2007-10-29  Oliver Hunt  <oliver@apple.com>
4195
4196         Reviewed by Maciej.
4197
4198         Debranching remaining assignment nodes, and miscellaneous cleanup
4199         
4200         Split read-modify code paths out of AssignBracketNode and AssignDotNode
4201         Removed now unnecessary check for write-only assignment in ReadModifyLocalVarNode 
4202         and ReadModifyResolveNode evaluate methods
4203
4204         Leads to a 1% gain in SunSpider.
4205
4206         * kjs/grammar.y:
4207         * kjs/nodes.cpp:
4208         (KJS::ReadModifyLocalVarNode::evaluate):
4209         (KJS::ReadModifyResolveNode::evaluate):
4210         (KJS::AssignDotNode::evaluate):
4211         (KJS::ReadModifyDotNode::optimizeVariableAccess):
4212         (KJS::ReadModifyDotNode::evaluate):
4213         (KJS::AssignBracketNode::evaluate):
4214         (KJS::ReadModifyBracketNode::optimizeVariableAccess):
4215         (KJS::ReadModifyBracketNode::evaluate):
4216         * kjs/nodes.h:
4217         (KJS::AssignBracketNode::):
4218         (KJS::AssignBracketNode::precedence):
4219         (KJS::AssignDotNode::):
4220         (KJS::AssignDotNode::precedence):
4221         * kjs/nodes2string.cpp:
4222         (KJS::ReadModifyBracketNode::streamTo):
4223         (KJS::AssignBracketNode::streamTo):
4224         (KJS::ReadModifyDotNode::streamTo):
4225         (KJS::AssignDotNode::streamTo):
4226
4227 2007-10-29  Oliver Hunt  <oliver@apple.com>
4228
4229         Debranching various Node::evaluate implementations
4230         
4231         Reviewed by Maciej.