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