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