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