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