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