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