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