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