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