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