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