Reviewed by Darin.
[WebKit-https.git] / JavaScriptCore / ChangeLog
1 2007-04-23  Maciej Stachowiak  <mjs@apple.com>
2
3         Reviewed by Darin.
4         
5         - fix some test failures
6
7         * bindings/runtime_method.cpp:
8         (RuntimeMethod::RuntimeMethod): inherit from InternalFunctionImp instead of FunctionImpl,
9         otherwise this is too big
10         (RuntimeMethod::getOwnPropertySlot):
11         * bindings/runtime_method.h:
12
13 2007-04-22  Maciej Stachowiak  <mjs@apple.com>
14
15         Reviewed by Darin.
16         
17         - discard the arguments List for an ActivationImp when the corresponding Context is destroyed (1.7% speedup)
18         http://bugs.webkit.org/show_bug.cgi?id=13385
19
20         Based an idea by Christopher E. Hyde <C.Hyde@parableuk.force9.co.uk>. His patch to do 
21         this also had many other List changes and I found this much simpler subset of the changes
22         was actually a hair faster.
23         
24         This optimization is valid because the arguments list is only kept around to
25         lazily make the arguments object. If it's not made by the time the function
26         exits, it never will be, since any function that captures the continuation will
27         have its own local arguments variable in scope.
28         
29         Besides the 1.7% speed improvement, it shrinks List by 4 bytes
30         (which in turn shrinks ActivationImp by 4 bytes).
31         
32         * kjs/Context.cpp:
33         (KJS::Context::~Context): Clear the activation's arguments list.
34         * kjs/function.cpp:
35         (KJS::ActivationImp::ActivationImp): Adjusted for list changes.
36         (KJS::ActivationImp::mark): No need to mark, lists are always protected (this doesn't
37         cause a ref-cycle for reasons stated above).
38         (KJS::ActivationImp::createArgumentsObject): Clear arguments list.
39         * kjs/function.h:
40         * kjs/list.cpp:
41         (KJS::List::List): No more needsMarking boolean
42         (KJS::List::operator=): ditto
43         * kjs/list.h:
44         (KJS::List::List): ditto
45         (KJS::List::reset): ditto
46         (KJS::List::deref): ditto
47
48 2007-04-22  Maciej Stachowiak  <mjs@apple.com>
49
50         Reviewed by Darin.
51         
52         - shrink PropertyMap by 8 bytes and therefore shrink CELL_SIZE to 40 (for 32-bit; 
53         similar shrinkage for 64-bit)
54         http://bugs.webkit.org/show_bug.cgi?id=13384
55
56         Inspired by similar changes by Christopher E. Hyde <C.Hyde@parableuk.force9.co.uk>
57         done in the kjs-tweaks branch of KDE's kjs. However, this version is somewhat 
58         cleaner style-wise and avoids some of the negative speed impact (at least on gcc/x86) 
59         of his version.
60         
61         This is nearly a wash performance-wise, maybe a slight slowdown, but worth doing
62         to eventually reach cell size 32.
63         
64         * kjs/collector.cpp:
65         (KJS::):
66         * kjs/property_map.cpp:
67         (KJS::PropertyMap::~PropertyMap):
68         (KJS::PropertyMap::clear):
69         (KJS::PropertyMap::get):
70         (KJS::PropertyMap::getLocation):
71         (KJS::PropertyMap::put):
72         (KJS::PropertyMap::insert):
73         (KJS::PropertyMap::expand):
74         (KJS::PropertyMap::rehash):
75         (KJS::PropertyMap::remove):
76         (KJS::PropertyMap::mark):
77         (KJS::PropertyMap::containsGettersOrSetters):
78         (KJS::PropertyMap::getEnumerablePropertyNames):
79         (KJS::PropertyMap::getSparseArrayPropertyNames):
80         (KJS::PropertyMap::save):
81         (KJS::PropertyMap::checkConsistency):
82         * kjs/property_map.h:
83         (KJS::PropertyMap::hasGetterSetterProperties):
84         (KJS::PropertyMap::setHasGetterSetterProperties):
85         (KJS::PropertyMap::):
86         (KJS::PropertyMap::PropertyMap):
87
88 2007-04-22  Maciej Stachowiak  <mjs@apple.com>
89
90         Reviewed by Darin.
91         
92         - change blocks to 64k in size, and use various platform-specific calls to allocate at 64k-aligned addresses
93         http://bugs.webkit.org/show_bug.cgi?id=13383
94         
95         * kjs/collector.cpp:
96         (KJS::allocateBlock): New function to allocate 64k of 64k-aligned memory
97         (KJS::freeBlock): Corresponding free
98         (KJS::Collector::allocate):
99         (KJS::Collector::collect):
100
101 2007-04-22  Maciej Stachowiak  <mjs@apple.com>
102
103         Reviewed by Darin and Geoff.
104         
105         - remove the concept of oversize objects, now that there aren't any (for now
106         only enforced with an assert).
107         http://bugs.webkit.org/show_bug.cgi?id=13382
108
109         This change is a .66% speedup on JS iBench for 32-bit platforms, probably much more
110         for 64-bit since it finally gives a reasonable cell size, but I did not test that.
111         
112         * kjs/collector.cpp:
113         (KJS::): Use different cell size for 32-bit and 64-bit, now that there is no
114         oversize allocation.
115         (KJS::Collector::allocate): Remove oversize allocator.
116         (KJS::Collector::markStackObjectsConservatively): Don't check oversize objects.
117         (KJS::Collector::markMainThreadOnlyObjects): Ditto.
118         (KJS::Collector::collect): Ditto.
119
120 2007-04-21  Mitz Pettel  <mitz@webkit.org>
121
122         Reviewed by Adam.
123
124         - fix http://bugs.webkit.org/show_bug.cgi?id=13428
125           REGRESSION (r20973-r20976): Failing ecma/Array/15.4.4.5-3.js
126
127         - fix http://bugs.webkit.org/show_bug.cgi?id=13429
128           REGRESSION (r20973-r20976): Crashing in fast/dom/plugin-attributes-enumeration.html
129
130         * kjs/array_object.cpp:
131         (ArrayInstance::sort): Free the old storage, not the new one.
132
133 2007-04-20  Maciej Stachowiak  <mjs@apple.com>
134
135         Not reviewed, build fix.
136
137         - fix build problem with last change - -O3 complains more about uninitialized variables
138         
139         * pcre/pcre_compile.c:
140         (compile_branch):
141         (pcre_compile2):
142
143 2007-04-20  Maciej Stachowiak  <mjs@apple.com>
144
145         Reviewed by Darin.
146         
147         - <rdar://problem/5149915> use mergesort when possible, since it leads to fewer compares (2% JS iBench speedup)
148
149         * kjs/array_object.cpp:
150         (ArrayInstance::sort): Use mergesort(3) on platforms that have it, since it tends
151         to do fewer compares than qsort; but avoid it very on large arrays since it uses extra
152         memory. Also added comments identifying possibly even better sorting algorithms
153         for sort by string value and sort by compare function.
154         * kjs/config.h:
155
156 2007-04-20  Maciej Stachowiak  <mjs@apple.com>
157
158         Reviewed by Darin.
159         
160         - bump optimization flags up to -O3 for 1% JS iBench speed improvement 
161
162         * Configurations/Base.xcconfig:
163
164 2007-04-20  Mark Rowe  <mrowe@apple.com>
165
166         Reviewed by Maciej.
167
168         Fix bogus optimisation in the generic pthread code path.
169
170         * kjs/collector.cpp:
171         (KJS::currentThreadStackBase):
172
173 2007-04-20  Mark Rowe  <mrowe@apple.com>
174
175         Reviewed by Anders.
176
177         Improve FreeBSD compatibility, as suggested by Alexander Botero-Lowry.
178
179         * kjs/collector.cpp:
180         (KJS::currentThreadStackBase): FreeBSD requires that pthread_attr_t's are
181         initialized via pthread_attr_init before being used in any context.
182
183 2007-04-19  Mark Rowe  <mrowe@apple.com>
184
185         Reviewed by Darin.
186
187         Fix http://bugs.webkit.org/show_bug.cgi?id=13401
188         Bug 13401: Reproducible crash calling myArray.sort(compareFn) from within
189         a sort comparison function
190
191         * kjs/array_object.cpp:
192         (ArrayInstance::sort): Save/restore the static variables around calls to qsort
193         to ensure nested calls to ArrayInstance::sort behave correctly.
194
195 2007-04-12  Deneb Meketa  <dmeketa@adobe.com>
196
197         Reviewed by Darin Adler.
198
199         http://bugs.webkit.org/show_bug.cgi?id=13029
200         rdar://problem/4994849
201         Bug 13029: Permit NPAPI plug-ins to see HTTP response headers.
202         This doesn't actually change JavaScriptCore, but that's where npapi.h is.
203
204         * bindings/npapi.h:
205         Add headers member to NPStream struct.  Also increase NP_VERSION_MINOR to 18.
206         Increasing to >= 17 allows plug-ins to safely detect whether to look for
207         NPStream::headers.  Increasing from 17 to 18 reflects presence of NPObject
208         enumeration, which was added in a prior patch, and which has been agreed to
209         constitute version 18 by the plugin-futures list.  Also add other missing
210         bits of npapi.h to catch up from 14 to 18.  This includes features that are
211         not implemented in WebKit, but those are safely stubbed.
212
213 2007-04-10  Geoffrey Garen  <ggaren@apple.com>
214
215         Reviewed by Mark Rowe.
216         
217         Fixed last check-in to print in release builds, too.
218
219         * kjs/collector.cpp:
220         (KJS::getPlatformThreadRegisters):
221
222 2007-04-10  Geoffrey Garen  <ggaren@apple.com>
223
224         Reviewed by John Sullivan, Darin Adler.
225         
226         Fixed <rdar://problem/5121899> JavaScript garbage collection leads to 
227         later crash under Rosetta (should abort or leak instead?)
228         
229         Log an error message and crash if the kernel reports failure during GC.
230         We decided to do this instead of just leaking because we don't want people
231         to get the mistaken impression that running in Rosetta is a supported
232         configurtion.
233         
234         The CRASH macro will also hook into CrashReporter, which will tell us if 
235         many (any?) users run into this issue.
236
237         * kjs/collector.cpp:
238         (KJS::getPlatformThreadRegisters):
239
240 2007-04-06  Krzysztof Kowalczyk  <kkowalczyk@gmail.com>
241
242         Reviewed by darin.
243
244         Coverity fix. Coverity says:
245         "Event var_deref_model: Variable "sourceRanges" tracked as NULL was passed to a
246         function that dereferences it"
247
248         * kjs/string_object.cpp:
249         (KJS::replace):
250
251 2007-04-06  Geoffrey Garen  <ggaren@apple.com>
252
253         Rubber stamped by Adele Peterson.
254
255         * kjs/ExecState.h: Removed obsolete forward/friend declaration of 
256         RuntimeMethodImp.
257
258 2007-04-05  Krzysztof Kowalczyk  <kkowalczyk@gmail.com>
259
260         Reviewed by darin.
261
262         Coverity fix. Coverity says:
263         "Event check_after_deref: Pointer "dateString" dereferenced before NULL check"
264
265         * kjs/date_object.cpp:
266         (KJS::parseDate):
267
268 2007-04-05  Krzysztof Kowalczyk  <kkowalczyk@gmail.com>
269
270         Reviewed by darin.
271
272         Coverity fix. Coverity says:
273         "Event check_after_deref: Pointer "re" dereferenced before NULL check"
274
275         * pcre/pcre_study.c:
276         (pcre_study):
277
278 2007-04-05  Krzysztof Kowalczyk  <kkowalczyk@gmail.com>
279
280         Reviewed by darin.
281
282         Coverity fixes. Coverity says:
283         "Event leaked_storage: Returned without freeing storage "buffer""
284         and:
285         "Event leaked_storage: Returned without freeing storage "script""
286
287         * kjs/testkjs.cpp:
288         (doIt):
289         (createStringWithContentsOfFile):
290
291 2007-04-05  Krzysztof Kowalczyk  <kkowalczyk@gmail.com>
292
293         Reviewed by darin.
294
295         Coverity fix: in single-threaded case currentThreadIsMainThread is always true
296         so the code in if (!currentThreadIsMainThread) cannot possibly be reached
297         and Coverity complains about dead code.
298
299         * kjs/collector.cpp:
300         (KJS::Collector::collect):
301
302 === Safari-5522.6 ===
303
304 2007-04-03  Kevin McCullough  <kmccullough@apple.com>
305
306         Reviewed by Adam.
307
308         - Testing a post-commit hook.
309
310         * JavaScriptCore.vcproj/testkjs/testkjs.vcproj:
311
312 2007-04-03  Anders Carlsson  <andersca@apple.com>
313
314         Reviewed by Adam.
315
316         <rdar://problem/5107534>
317         http://bugs.webkit.org/show_bug.cgi?id=13265
318         REGRESSION: Crash in KJS::Bindings::convertValueToNPVariant
319         
320         * bindings/NP_jsobject.cpp:
321         (_NPN_InvokeDefault):
322         Return false if the object isn't a function. Set the return value to undefined by default
323         (to match Firefox).
324         
325 2007-03-30  Anders Carlsson <andersca@apple.com>
326
327         Build fix.
328         
329         * bindings/NP_jsobject.cpp:
330         (_NPN_Enumerate):
331
332 2007-03-30  Anders Carlsson  <andersca@apple.com>
333
334         Reviewed by Geoff.
335
336         Implement _NPN_Enumerate support.
337         
338         * JavaScriptCore.exp:
339         * bindings/NP_jsobject.cpp:
340         (_NPN_Enumerate):
341         * bindings/c/c_instance.cpp:
342         (KJS::Bindings::CInstance::getPropertyNames):
343         * bindings/c/c_instance.h:
344         * bindings/npapi.h:
345         * bindings/npruntime.h:
346         * bindings/npruntime_impl.h:
347         * bindings/runtime.h:
348         (KJS::Bindings::Instance::getPropertyNames):
349         * bindings/runtime_object.cpp:
350         (RuntimeObjectImp::getPropertyNames):
351         * bindings/runtime_object.h:
352         (KJS::RuntimeObjectImp::getInternalInstance):
353
354 2007-03-28  Jeff Walden  <jwalden+code@mit.edu>
355
356         Reviewed by Darin.
357
358         http://bugs.webkit.org/show_bug.cgi?id=12963
359         Fix some inconsistencies in the Mozilla JS Array extras implementations
360         with respect to the Mozilla implementation:
361
362           - holes in arrays should be skipped, not treated as undefined,
363             by all such methods
364           - an element with value undefined is not a hole
365           - Array.prototype.forEach should return undefined
366
367         * kjs/array_object.cpp:
368         (ArrayInstance::getOwnPropertySlot):
369         (ArrayProtoFunc::callAsFunction):
370
371 2007-03-27  Anders Carlsson  <acarlsson@apple.com>
372
373         Reviewed by Geoff.
374
375         * bindings/NP_jsobject.cpp:
376         (_NPN_InvokeDefault):
377         Call JSObject:call for native JavaScript objects.
378
379 2007-03-26  David Carson  <dacarson@gmail.com>
380
381         Reviewed by Darin, landed by Anders.
382
383         Fix for: REGRESSION (r19559): Java applet crash
384         http://bugs.webkit.org/show_bug.cgi?id=13142
385         <rdar://problem/5080340>
386
387         The previous fix http://bugs.webkit.org/show_bug.cgi?id=12636 
388         introduced new JNIType to enum in jni_utility.h This is a 
389         problem on the Mac as it seems that the JNIType enum is also
390         used in the JVM, it is used to specify the return type in
391         jni_objc.mm
392         Corrected the fix by moving type to the end, and changing
393         jni_objc.mm to convert the new type to an old compatible
394         type.
395
396         * bindings/jni/jni_objc.mm:
397         (KJS::Bindings::dispatchJNICall):
398         * bindings/jni/jni_utility.h:
399
400 2007-03-26  Christopher Brichford  <chrisb@adobe.com>
401
402         Reviewed/landed by Adam.
403
404         Bug 13198: Move build settings from project file to xcconfig file for apollo
405         port JSCore
406         http://bugs.webkit.org/show_bug.cgi?id=13198
407
408         - Moving build settings from xcode project file to xcconfig files.
409
410         * JavaScriptCore.apolloproj/mac/JavaScriptCore/JavaScriptCore.Debug.xcconfig:
411         * JavaScriptCore.apolloproj/mac/JavaScriptCore/JavaScriptCore.Release.xcconfig:
412         * JavaScriptCore.apolloproj/mac/JavaScriptCore/JavaScriptCore.xcconfig:
413         * JavaScriptCore.apolloproj/mac/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj:
414
415 2007-03-26  Brady Eidson  <beidson@apple.com>
416
417         Rubberstamped by Anders and Maciej aand Geoff (oh my!)
418         
419         Since CFTypeRef is really void*, a RetainPtr couldn't be used. 
420         RefType was "void", which doesn't actually exist as a type.
421         Since RefType only existed for operator*(), and since that operator
422         doesn't make any sense for RetainPtr, I removed them!
423
424         * kjs/nodes.cpp: Touch this to force a rebuild and (hopefully) help the
425           compiler with dependencies
426         * wtf/RetainPtr.h: Nuke RefType and operator*()
427
428 2007-03-26  Geoffrey Garen  <ggaren@apple.com>
429
430         Touched a file to (hopefully) help the compiler with RetainPtr dependencies.
431
432         * kjs/nodes.cpp:
433         (Node::deref):
434
435 2007-03-24  Brady Eidson  <beidson@apple.com>
436
437         Reviewed by Adam
438
439         Whoops, RetainPtr should be in the WTF namespace
440
441         * wtf/RetainPtr.h:
442
443 2007-03-24  Brady Eidson  <beidson@apple.com>
444
445         Reviewed by Adam
446         
447         <rdar://problem/5086210> - Move RetainPtr to WTF
448
449         * wtf/RetainPtr.h: Added
450         * JavaScriptCore.xcodeproj/project.pbxproj: Add it to the project file
451         * JavaScriptCore.vcproj/WTF/WTF.vcproj: Ditto
452
453
454 2007-03-23  Christopher Brichford  <chrisb@adobe.com>
455
456         Reviewed/landed by Adam.
457
458         Bug 13175: Make apollo mac project files for JavaScriptCore actually
459         build something
460         http://bugs.webkit.org/show_bug.cgi?id=13175
461
462         - Changing apollo mac project files for JavaScriptCore such that they actually build
463         JavaScriptCore source code.
464
465         * JavaScriptCore.apolloproj/ForwardingSources/grammar.cpp: Added.
466         * JavaScriptCore.apolloproj/mac/JavaScriptCore/JavaScriptCore.xcconfig:
467         * JavaScriptCore.apolloproj/mac/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj:
468
469 2007-03-24  Mark Rowe  <mrowe@apple.com>
470
471         Rubber-stamped by Darin.
472
473         * Configurations/JavaScriptCore.xcconfig: Remove unnecessary INFOPLIST_PREPROCESS.
474
475 2007-03-22  Christopher Brichford  <chrisb@adobe.com>
476
477         Reviewed/landed by Adam.
478
479         Bug 13164: Initial version of mac JavaScriptCore project files for
480         apollo port 
481         http://bugs.webkit.org/show_bug.cgi?id=13164
482
483         - Adding mac project files for apollo port of JavaScriptCore. Currently project
484         just builds dftables.
485
486         * JavaScriptCore.apolloproj/mac/JavaScriptCore/JavaScriptCore.Debug.xcconfig: Added.
487         * JavaScriptCore.apolloproj/mac/JavaScriptCore/JavaScriptCore.Release.xcconfig: Added.
488         * JavaScriptCore.apolloproj/mac/JavaScriptCore/JavaScriptCore.xcconfig: Added.
489         * JavaScriptCore.apolloproj/mac/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj: Added.
490
491 2007-03-21  Timothy Hatcher  <timothy@apple.com>
492
493         Reviewed by Darin.
494
495         <rdar://problem/5076599> JavaScriptCore has a weak export (vtable for KJS::JSCell)
496
497         * JavaScriptCore.exp: Remove __ZTVN3KJS6JSCellE.
498
499 2007-03-21  Adele Peterson  <adele@apple.com>
500
501         Reviewed by Geoff.
502
503         * API/JSStringRef.cpp: (JSStringIsEqual): Added JSLock.
504
505 2007-03-21  Zack Rusin  <zrusin@trolltech.com>
506
507         Fix the compile when USE(MULTIPLE_THREADS) isn't
508         defined
509
510         * kjs/JSLock.cpp:
511         (KJS::JSLock::currentThreadIsHoldingLock):
512
513 2007-03-20  Maciej Stachowiak  <mjs@apple.com>
514
515         Reviewed by Geoff and Adam.
516         
517         - make USE(MULTIPLE_THREADS) support more portable
518         http://bugs.webkit.org/show_bug.cgi?id=13069
519         
520         - fixed a threadsafety bug discovered by testing this
521         
522         - enhanced threadsafety assertions in collector
523
524         * API/JSCallbackObject.cpp:
525         (KJS::JSCallbackObject::~JSCallbackObject): This destructor can't
526         DropAllLocks around the finalize callback, because it gets called
527         from garbage collection and we can't let other threads collect!
528
529         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
530         * kjs/JSLock.cpp:
531         (KJS::JSLock::currentThreadIsHoldingLock): Added new function
532         to allow stronger assertions than just that the lock is held
533         by some thread (you can now assert that the current thread is
534         holding it, given the new JSLock design).
535         * kjs/JSLock.h:
536         * kjs/collector.cpp: Refactored for portability plus added some
537         stronger assertions.
538         (KJS::Collector::allocate):
539         (KJS::currentThreadStackBase):
540         (KJS::Collector::registerAsMainThread):
541         (KJS::onMainThread):
542         (KJS::PlatformThread::PlatformThread):
543         (KJS::getCurrentPlatformThread):
544         (KJS::Collector::Thread::Thread):
545         (KJS::destroyRegisteredThread):
546         (KJS::Collector::registerThread):
547         (KJS::Collector::markCurrentThreadConservatively):
548         (KJS::suspendThread):
549         (KJS::resumeThread):
550         (KJS::getPlatformThreadRegisters):
551         (KJS::otherThreadStackPointer):
552         (KJS::otherThreadStackBase):
553         (KJS::Collector::markOtherThreadConservatively):
554         (KJS::Collector::markStackObjectsConservatively):
555         (KJS::Collector::protect):
556         (KJS::Collector::unprotect):
557         (KJS::Collector::collectOnMainThreadOnly):
558         (KJS::Collector::markMainThreadOnlyObjects):
559         (KJS::Collector::collect):
560         * kjs/collector.h:
561         * wtf/FastMalloc.cpp:
562         (WTF::fastMallocSetIsMultiThreaded):
563         * wtf/FastMallocInternal.h:
564         * wtf/Platform.h:
565
566 2007-03-19  Darin Adler  <darin@apple.com>
567
568         * kjs/value.h: Roll ~JSValue change out. It was causing problems. I'll do it right later.
569
570 2007-03-19  Geoffrey Garen  <ggaren@apple.com>
571
572         Reviewed by John Sullivan.
573
574         Fixed <rdar://problem/5073380> REGRESSION: Crash occurs at WTF::fastFree() 
575         when reloading liveconnect page (applet)
576         
577         Best to use free when you use malloc, especially when malloc and delete
578         use completely different libraries.
579
580         * bindings/jni/jni_runtime.cpp:
581         (JavaMethod::~JavaMethod):
582
583 2007-03-19  Andrew Wellington  <proton@wiretapped.net>
584
585         Reviewed by Maciej.
586
587         Really set Xcode editor to use 4 space indentation (http://webkit.org/coding/coding-style.html)
588
589         * JavaScriptCore.xcodeproj/project.pbxproj:
590
591 2007-03-19  Darin Adler  <darin@apple.com>
592
593         Reviewed by Geoff.
594
595         - Changed list size threshold to 5 based on testing.
596
597         I was testing the i-Bench JavaScript with the list statistics
598         dumping on, and discovered that there were many 5-element lists.
599         The fast case for lists was for 4 elements and fewer. By changing
600         the threshold to 5 elements we get a measurable speedup. I believe
601         this will help real web pages too, not just the benchmark.
602
603         * kjs/list.cpp: Change constant from 4 to 5.
604
605 2007-03-19  Darin Adler  <darin@apple.com>
606
607         * kjs/value.h: Oops, fix build.
608
609 2007-03-19  Darin Adler  <darin@apple.com>
610
611         Reviewed by Geoff.
612
613         - remove ~JSValue; tiny low-risk performance boost
614
615         * kjs/value.h: Remove unneeded empty virtual destructor from JSValue.
616         The only class derived from JSValue is JSCell and it already has a
617         virtual destructor. Declaring an empty constructor in JSValue had one
618         good effect: it marked the destructor private, making it a compile
619         time error to try to destroy a JSValue; but that's not a likely
620         mistake for someone to make. It had two bad effects: (1) it caused gcc,
621         at least, to generate code to fix up the virtual table pointer to
622         point to the JSValue version of the virtual table inside the destructor
623         of all classes derived from JSValue directly or indirectly; (2) it
624         caused JSValue to be a polymorphic class so required a virtual table for
625         it. It's cleaner to not have either of those.
626
627 2007-03-18  Maciej Stachowiak  <mjs@apple.com>
628
629         Reviewed by Mark.
630         
631         - avoid static construction (and global variable access) in a smarter, more portable way,
632         to later enable MUTLI_THREAD mode to work on other platforms and compilers.
633         
634         * kjs/CommonIdentifiers.cpp: Added. New class to hold all the shared identifiers.
635         (KJS::CommonIdentifiers::CommonIdentifiers):
636         (KJS::CommonIdentifiers::shared):
637         * kjs/CommonIdentifiers.h: Added.
638
639         * kjs/ExecState.h:
640         (KJS::ExecState::propertyNames): Hand the CommonIdentifiers instance here for easy access.
641         (KJS::ExecState::ExecState):
642
643         * API/JSObjectRef.cpp:
644         (JSObjectMakeConstructor):
645         * CMakeLists.txt:
646         * JavaScriptCore.exp:
647         * JavaScriptCore.pri:
648         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
649         * JavaScriptCore.xcodeproj/project.pbxproj:
650         * JavaScriptCoreSources.bkl:
651         * bindings/runtime_array.cpp:
652         (RuntimeArray::getOwnPropertySlot):
653         (RuntimeArray::put):
654         * bindings/runtime_method.cpp:
655         (RuntimeMethod::getOwnPropertySlot):
656         * kjs/array_object.cpp:
657         (ArrayInstance::getOwnPropertySlot):
658         (ArrayInstance::put):
659         (ArrayInstance::deleteProperty):
660         (ArrayProtoFunc::ArrayProtoFunc):
661         (ArrayProtoFunc::callAsFunction):
662         (ArrayObjectImp::ArrayObjectImp):
663         * kjs/bool_object.cpp:
664         (BooleanPrototype::BooleanPrototype):
665         (BooleanProtoFunc::BooleanProtoFunc):
666         (BooleanProtoFunc::callAsFunction):
667         (BooleanObjectImp::BooleanObjectImp):
668         * kjs/completion.h:
669         (KJS::Completion::Completion):
670         * kjs/date_object.cpp:
671         (KJS::DateProtoFunc::DateProtoFunc):
672         (KJS::DateObjectImp::DateObjectImp):
673         (KJS::DateObjectFuncImp::DateObjectFuncImp):
674         * kjs/error_object.cpp:
675         (ErrorPrototype::ErrorPrototype):
676         (ErrorProtoFunc::ErrorProtoFunc):
677         (ErrorProtoFunc::callAsFunction):
678         (ErrorObjectImp::ErrorObjectImp):
679         (ErrorObjectImp::construct):
680         (NativeErrorPrototype::NativeErrorPrototype):
681         (NativeErrorImp::NativeErrorImp):
682         (NativeErrorImp::construct):
683         (NativeErrorImp::callAsFunction):
684         * kjs/function.cpp:
685         (KJS::FunctionImp::getOwnPropertySlot):
686         (KJS::FunctionImp::put):
687         (KJS::FunctionImp::deleteProperty):
688         (KJS::FunctionImp::getParameterName):
689         (KJS::DeclaredFunctionImp::construct):
690         (KJS::IndexToNameMap::unMap):
691         (KJS::Arguments::Arguments):
692         (KJS::ActivationImp::getOwnPropertySlot):
693         (KJS::ActivationImp::deleteProperty):
694         (KJS::GlobalFuncImp::GlobalFuncImp):
695         * kjs/function_object.cpp:
696         (FunctionPrototype::FunctionPrototype):
697         (FunctionProtoFunc::FunctionProtoFunc):
698         (FunctionProtoFunc::callAsFunction):
699         (FunctionObjectImp::FunctionObjectImp):
700         (FunctionObjectImp::construct):
701         * kjs/grammar.y:
702         * kjs/identifier.cpp:
703         * kjs/identifier.h:
704         * kjs/interpreter.cpp:
705         (KJS::Interpreter::init):
706         (KJS::Interpreter::initGlobalObject):
707         * kjs/interpreter.h:
708         * kjs/lookup.h:
709         * kjs/math_object.cpp:
710         (MathFuncImp::MathFuncImp):
711         * kjs/nodes.cpp:
712         (ArrayNode::evaluate):
713         (FuncDeclNode::processFuncDecl):
714         (FuncExprNode::evaluate):
715         * kjs/number_object.cpp:
716         (NumberPrototype::NumberPrototype):
717         (NumberProtoFunc::NumberProtoFunc):
718         (NumberObjectImp::NumberObjectImp):
719         * kjs/object.cpp:
720         (KJS::JSObject::put):
721         (KJS::JSObject::defaultValue):
722         (KJS::JSObject::hasInstance):
723         * kjs/object.h:
724         (KJS::JSObject::getOwnPropertySlot):
725         * kjs/object_object.cpp:
726         (ObjectPrototype::ObjectPrototype):
727         (ObjectProtoFunc::ObjectProtoFunc):
728         (ObjectObjectImp::ObjectObjectImp):
729         * kjs/regexp_object.cpp:
730         (RegExpPrototype::RegExpPrototype):
731         (RegExpProtoFunc::RegExpProtoFunc):
732         (RegExpObjectImp::RegExpObjectImp):
733         * kjs/string_object.cpp:
734         (KJS::StringInstance::getOwnPropertySlot):
735         (KJS::StringInstance::put):
736         (KJS::StringInstance::deleteProperty):
737         (KJS::StringPrototype::StringPrototype):
738         (KJS::StringProtoFunc::StringProtoFunc):
739         (KJS::StringProtoFunc::callAsFunction):
740         (KJS::StringObjectImp::StringObjectImp):
741         (KJS::StringObjectFuncImp::StringObjectFuncImp):
742         * kjs/testkjs.cpp:
743         (TestFunctionImp::TestFunctionImp):
744
745 2007-03-18  Andrew Wellington  <proton@wiretapped.net>
746
747         Reviewed by Mark Rowe
748         
749         Set Xcode editor to use 4 space indentation (http://webkit.org/coding/coding-style.html) 
750
751         * JavaScriptCore.xcodeproj/project.pbxproj:
752
753 2007-03-19  Mark Rowe  <mrowe@apple.com>
754
755         Rubber-stamped by Brady.
756
757         Update references to bugzilla.opendarwin.org with bugs.webkit.org.
758
759         * bindings/c/c_utility.cpp:
760         (KJS::Bindings::convertUTF8ToUTF16):
761         * kjs/function.cpp:
762         (KJS::FunctionImp::callAsFunction):
763         * kjs/grammar.y:
764         * kjs/keywords.table:
765         * kjs/lexer.cpp:
766         (KJS::Lexer::shift):
767
768 2007-03-18  Geoffrey Garen  <ggaren@apple.com>
769
770         Reviewed by Oliver Hunt.
771         
772         Exposed some extra toUInt32 functionality, as part of the fix for
773         REGRESSION: Incomplete document.all implementation breaks abtelectronics.com 
774         (Style Change Through JavaScript Blanks Content)
775
776         * JavaScriptCore.exp:
777         * kjs/identifier.h:
778         (KJS::Identifier::toUInt32):
779
780 2007-03-18  Geoffrey Garen  <ggaren@apple.com>
781
782         Removed duplicate export name.
783         
784         * JavaScriptCore.exp:
785
786 2007-03-15  Geoffrey Garen  <ggaren@apple.com>
787
788         Reviewed by Maciej Stachowiak.
789         
790         Fixed <rdar://problem/5064964> Repro ASSERT failure in JS Bindings when 
791         closing window @ lowtrades.bptrade.com
792         
793         Unfortunately, the bindings depend on UString and Identifier as string 
794         representations. So, they need to acquire the JSLock when doing something
795         that will ref/deref their strings.
796
797         Layout tests, the original site, and Java, Flash, and Quicktime on the 
798         web work. No leaks reported. No automated test for this because testing 
799         the Java bindings, like math, is hard.
800         
801         * bindings/runtime.h: Made Noncopyable, just to be sure.
802         
803         * bindings/c/c_class.cpp: 
804         (KJS::Bindings::CClass::~CClass): Acquire the JSLock and explicitly clear the keys
805         in our hashtable, since they're UString::Reps, and ref/deref aren't thread-safe.
806         (KJS::Bindings::CClass::methodsNamed): Also acquire the JSLock when adding
807         keys to the table, since the table ref's them.
808         (KJS::Bindings::CClass::fieldNamed): ditto.
809
810         * bindings/c/c_utility.cpp: Removed dead function.
811         (KJS::Bindings::convertValueToNPVariant): Acquire the JSLock because doing
812         it recursively is pretty cheap, and it's just too confusing to tell whether
813         all our callers do it for us.
814         (KJS::Bindings::convertNPVariantToValue): ditto
815         * bindings/c/c_utility.h:
816
817         * bindings/jni/jni_class.cpp: Same deal as c_class.cpp.
818         (JavaClass::JavaClass):
819         (JavaClass::~JavaClass):
820
821         * bindings/jni/jni_instance.cpp: Same deal as c_utility.cpp.
822         (JavaInstance::stringValue):
823         * bindings/jni/jni_jsobject.cpp:
824         (JavaJSObject::convertValueToJObject):
825
826         * bindings/jni/jni_runtime.cpp:
827         (JavaMethod::~JavaMethod): Moved from header, for clarity.
828         (appendClassName): Made this static, so the set of callers is known, and
829         we can assert that we hold the JSLock. Also changed it to take a UString
830         reference, which makes the calling code simpler.
831         (JavaMethod::signature): Store the ASCII value we care about instead of
832         a UString, since UString is so much more hassle. Hold the JSLock while
833         building up the temporary UString.
834
835         * bindings/jni/jni_runtime.h: Nixed dead code in JavaMethod.
836         (KJS::Bindings::JavaString::JavaString): Hold a UString::Rep instead of
837         a UString, so we can acquire the JSLock and explicitly release it.
838         (KJS::Bindings::JavaString::_commonInit):
839         (KJS::Bindings::JavaString::~JavaString):
840         (KJS::Bindings::JavaString::UTF8String):
841         (KJS::Bindings::JavaString::uchars):
842         (KJS::Bindings::JavaString::length):
843         (KJS::Bindings::JavaString::ustring):
844
845         * bindings/jni/jni_utility.cpp:
846         (KJS::Bindings::convertArrayInstanceToJavaArray): Made this static, so 
847         the set of callers is known, and we can assert that we hold the JSLock. 
848         (KJS::Bindings::convertValueToJValue): Acquire the JSLock because doing
849         it recursively is pretty cheap, and it's just too confusing to tell whether
850         all our callers do it for us.
851
852         * bindings/objc/objc_runtime.h: Nixed some dead code.
853         * bindings/objc/objc_utility.mm:
854         (KJS::Bindings::convertNSStringToString): Same drill as above.
855
856 2007-03-18  Alexey Proskuryakov  <ap@webkit.org>
857
858         Reviewed by Geoff.
859
860         http://bugs.webkit.org/show_bug.cgi?id=13105
861         REGRESSION: an exception raised when calculating base value of a dot expression is not returned
862
863         Test: fast/js/dot-node-base-exception.html
864
865         * kjs/nodes.cpp:
866         (FunctionCallDotNode::evaluate): Added the necessary KJS_CHECKEXCEPTIONVALUE.
867
868 2007-03-18  Steve Falkenburg  <sfalken@apple.com>
869
870         Build fix.
871
872         * JavaScriptCore.vcproj/testkjs/testkjs.vcproj:
873
874 2007-03-17  Timothy Hatcher  <timothy@apple.com>
875
876         Reviewed by Mark Rowe.
877
878         Made Version.xcconfig smarter when building for different configurations.
879         Now uses the 522+ OpenSource version for Debug and Release, while using the
880         full 522.4 version for Production builds. The system prefix is also computed
881         based on the current system, so 4522.4 on Tiger and 5522.4 on Leopard.
882
883         * Configurations/JavaScriptCore.xcconfig:
884         * Configurations/Version.xcconfig:
885
886 2007-03-15  Maciej Stachowiak  <mjs@apple.com>
887
888         Not reviewed.
889         
890         - build fix
891
892         * wtf/TCSystemAlloc.cpp:
893
894 2007-03-15  Maciej Stachowiak  <mjs@apple.com>
895
896         Reviewed by Geoff and Steve.
897         
898         - fix some portability issues with TCMalloc.
899
900         * JavaScriptCore.vcproj/WTF/WTF.vcproj:
901         * kjs/config.h:
902         * wtf/FastMalloc.cpp:
903         (WTF::SizeClass):
904         (WTF::InitSizeClasses):
905         (WTF::TCMalloc_PageHeap::Split):
906         (WTF::TCMalloc_PageHeap::RegisterSizeClass):
907         (WTF::TCMalloc_Central_FreeList::length):
908         (WTF::TCMalloc_ThreadCache::InitTSD):
909         (WTF::TCMalloc_ThreadCache::CreateCacheIfNecessary):
910         * wtf/TCSpinLock.h:
911         * wtf/TCSystemAlloc.cpp:
912         (TryVirtualAlloc):
913         (TCMalloc_SystemAlloc):
914
915 2007-03-15  Timothy Hatcher  <timothy@apple.com>
916
917         Reviewed by John.
918
919         * Factored out most of our common build settings into .xcconfig files. Anything that was common in
920           each build configuration was factored out into the shared .xcconfig file.
921         * Adds a Version.xcconfig file to define the current framework version, to be used in other places.
922         * Use the new $(BUNDLE_VERSION) (defined in Version.xcconfig) in the preprocessed Info.plist.
923         * Use the versions defined in Version.xcconfig to set $(DYLIB_CURRENT_VERSION).
924
925         * Configurations/Base.xcconfig: Added.
926         * Configurations/DebugRelease.xcconfig: Added.
927         * Configurations/JavaScriptCore.xcconfig: Added.
928         * Configurations/Version.xcconfig: Added.
929         * Info.plist:
930         * JavaScriptCore.xcodeproj/project.pbxproj:
931
932 2007-03-16  Shrikant Gangoda  <shrikant.gangoda@celunite.com>
933
934         Gdk build fix.
935
936         * kjs/DateMath.cpp:  gettimeofday comes from <sys/time.h> on Linux.
937
938 2007-03-14  Kevin McCullough  <kmccullough@apple.com>
939
940         Reviewed by .
941
942         - Fixed one more build breakage
943
944         * kjs/date_object.cpp:
945         (KJS::formatLocaleDate):
946
947 2007-03-14  Kevin McCullough  <kmccullough@apple.com>
948
949         Reviewed by .
950
951         - Fixed a build breakage.
952
953         * kjs/DateMath.cpp:
954         * kjs/date_object.cpp:
955         (KJS::formatLocaleDate):
956         (KJS::DateObjectImp::construct):
957
958 2007-03-14  Kevin McCullough  <kmccullough@apple.com>
959
960         Reviewed by Geoff.
961
962         - rdar://problem/5045720
963         - DST changes in US affect JavaScript date calculations (12975)
964         This fix was to ensure we properly test for the new changes to DST in the US.
965         Also this fixes when we apply DST, now we correctly map most past years to current
966         DST rules.  We still have a small issue with years before 1900 or after 2100.
967         rdar://problem/5055038
968
969         * kjs/DateMath.cpp: Fix DST to match spec better.
970         (KJS::getCurrentUTCTime):
971         (KJS::mimimumYearForDST):
972         (KJS::maximumYearForDST):
973         (KJS::equivalentYearForDST):
974         (KJS::getDSTOffset):
975         * kjs/DateMath.h: Consolodated common funtionality.
976         * kjs/date_object.cpp: Consolodated common functionality.
977         (KJS::formatLocaleDate):
978         (KJS::DateObjectImp::construct):
979         * tests/mozilla/ecma/jsref.js: Added functions for finding the correct days when DST starts and ends.
980         * tests/mozilla/ecma/shell.js: Added back in the old DST functions for ease of merging with mozilla if needed.
981         * tests/mozilla/ecma_2/jsref.js: Added functions for finding the correct days when DST starts and ends.
982         * tests/mozilla/ecma_3/Date/shell.js: Added functions for finding the correct days when DST starts and ends.
983         * tests/mozilla/expected.html: Updated to show all date tests passing.
984
985 === Safari-5522.4 ===
986
987 2007-03-13  Kevin McCullough  <kmccullough@apple.com>
988
989         Reviewed by .
990
991         - Adding expected failures until the are truly fixed. 
992         - rdar://problem/5060302
993
994         * tests/mozilla/expected.html:
995
996 2007-03-12  Kevin McCullough  <kmccullough@apple.com>
997
998         Reviewed by .
999
1000         - Actually update tests for new DST rules.
1001
1002         * tests/mozilla/ecma/Date/15.9.3.1-1.js:
1003         * tests/mozilla/ecma/Date/15.9.3.1-2.js:
1004         * tests/mozilla/ecma/Date/15.9.3.1-3.js:
1005         * tests/mozilla/ecma/Date/15.9.3.1-4.js:
1006         * tests/mozilla/ecma/Date/15.9.3.1-5.js:
1007         * tests/mozilla/ecma/Date/15.9.3.2-1.js:
1008         * tests/mozilla/ecma/Date/15.9.3.2-2.js:
1009         * tests/mozilla/ecma/Date/15.9.3.2-3.js:
1010         * tests/mozilla/ecma/Date/15.9.3.2-4.js:
1011         * tests/mozilla/ecma/Date/15.9.3.2-5.js:
1012         * tests/mozilla/ecma/Date/15.9.3.8-1.js:
1013         * tests/mozilla/ecma/Date/15.9.3.8-2.js:
1014         * tests/mozilla/ecma/Date/15.9.3.8-3.js:
1015         * tests/mozilla/ecma/Date/15.9.3.8-4.js:
1016         * tests/mozilla/ecma/Date/15.9.3.8-5.js:
1017         * tests/mozilla/ecma/Date/15.9.5.10-1.js:
1018         * tests/mozilla/ecma/Date/15.9.5.10-10.js:
1019         * tests/mozilla/ecma/Date/15.9.5.10-11.js:
1020         * tests/mozilla/ecma/Date/15.9.5.10-12.js:
1021         * tests/mozilla/ecma/Date/15.9.5.10-13.js:
1022         * tests/mozilla/ecma/Date/15.9.5.10-2.js:
1023         * tests/mozilla/ecma/Date/15.9.5.10-3.js:
1024         * tests/mozilla/ecma/Date/15.9.5.10-4.js:
1025         * tests/mozilla/ecma/Date/15.9.5.10-5.js:
1026         * tests/mozilla/ecma/Date/15.9.5.10-6.js:
1027         * tests/mozilla/ecma/Date/15.9.5.10-7.js:
1028         * tests/mozilla/ecma/Date/15.9.5.10-8.js:
1029         * tests/mozilla/ecma/Date/15.9.5.10-9.js:
1030         * tests/mozilla/ecma/jsref.js:
1031         * tests/mozilla/ecma_2/jsref.js:
1032         * tests/mozilla/ecma_3/Date/shell.js:
1033
1034 2007-03-12  Kevin McCullough  <kmccullough@apple.com>
1035
1036         Reviewed by .
1037
1038         - Update tests for new DST rules.
1039
1040         * tests/mozilla/ecma/shell.js:
1041
1042 2007-03-11  Geoffrey Garen  <ggaren@apple.com>
1043
1044         Reviewed by Oliver Hunt.
1045         
1046         Fixed <rdar://problem/4681051> Installer crashes in KJS::Collector::
1047         markOtherThreadConservatively(KJS::Collector::Thread*) trying to install 
1048         iLife 06 using Rosetta on an Intel Machine
1049         
1050         The problem was that our thread-specific data destructor would modify the
1051         list of active JavaScript threads without holding the JSLock, corrupting
1052         the list. Corruption was especially likely if one JavaScript thread exited 
1053         while another was starting up.
1054
1055         * JavaScriptCore.exp:
1056         * kjs/JSLock.cpp: Don't conflate locking the JSLock with registering a
1057         thread, since the thread-specific data destructor needs to lock
1058         without registering a thread. Instead, treat thread registration as a
1059         part of the convenience of the JSLock object, and whittle down JSLock::lock()
1060         to just the bits that actually do the locking.
1061         (KJS::JSLock::lock):
1062         (KJS::JSLock::registerThread):
1063         * kjs/JSLock.h: Updated comments to mention the new behavior above, and
1064         other recent changes.
1065         (KJS::JSLock::JSLock):
1066         * kjs/collector.cpp:
1067         (KJS::destroyRegisteredThread): Lock here.
1068         (KJS::Collector::registerThread): To match, assert that we're locked here.
1069
1070 2007-03-10  Geoffrey Garen  <ggaren@apple.com>
1071
1072         Reviewed by Darin Adler.
1073
1074         Fixed <rdar://problem/4587763> PAC file: lock inversion between QT and 
1075         JSCore causes a hang @ www.panoramas.dk
1076         
1077         With a PAC file, run-webkit-tests --threaded passes, the reported site
1078         works, and all the Quicktime/JavaScript and Flash/JavaScript examples
1079         I found through Google work, too.
1080         
1081         Any time JavaScript causes arbitrary non-JavaScript code to execute, it 
1082         risks deadlock, because that code may block, trying to acquire a lock 
1083         owned by a thread that is waiting to execute JavaScript. In this case,
1084         the thread was a networking thread that was waiting to interpret a PAC file.
1085         
1086         Because non-JavaScript code may execute in response to, well, anything,
1087         a perfect solution to this problem is impossible. I've implemented an
1088         optimistic solution, instead: JavaScript will drop its lock whenever it
1089         makes a direct call to non-JavaScript code through a bridging/plug-in API,
1090         but will blissfully ignore the indirect ways it may cause non-JavaScript 
1091         code to run (resizing a window, for example). 
1092         
1093         Unfortunately, this solution introduces significant locking overhead in 
1094         the bridging APIs. I don't see a way around that.
1095
1096         This patch includes some distinct bug fixes I saw along the way:
1097         
1098         * bindings/objc/objc_instance.mm: Fixed a bug where a nested begin() call
1099         would leak its autorelease pool, because it would NULL out _pool without
1100         draining it.
1101
1102         * bindings/runtime_object.cpp:
1103         (RuntimeObjectImp::methodGetter): Don't copy an Identifier to ASCII only
1104         to turn around and make an Identifier from the ASCII. In an earlier 
1105         version of this patch, the copy caused an assertion failure. Now it's 
1106         just unnecessary work.
1107         (RuntimeObjectImp::getOwnPropertySlot): ditto
1108
1109         * bindings/objc/objc_instance.h: Removed overrides of setVAlueOfField and
1110         getValueOfField, because they did exactly what the base class versions did.
1111         Removed overrides of Noncopyable declarations for the same reason.
1112
1113         * bindings/runtime.h: Inherit from Noncopyable instead of rolling our own.
1114         * bindings/c/c_instance.h: ditto
1115
1116         And the actual patch:
1117         
1118         * API/JSCallbackConstructor.cpp: Drop all locks when calling out to C.
1119         (KJS::JSCallbackConstructor::construct):
1120         * API/JSCallbackFunction.cpp: ditto
1121         (KJS::JSCallbackFunction::callAsFunction):
1122         * API/JSCallbackObject.cpp: ditto
1123         (KJS::JSCallbackObject::init):
1124         (KJS::JSCallbackObject::~JSCallbackObject):
1125         (KJS::JSCallbackObject::getOwnPropertySlot):
1126         (KJS::JSCallbackObject::put):
1127         (KJS::JSCallbackObject::deleteProperty):
1128         (KJS::JSCallbackObject::construct):
1129         (KJS::JSCallbackObject::hasInstance):
1130         (KJS::JSCallbackObject::callAsFunction):
1131         (KJS::JSCallbackObject::getPropertyNames):
1132         (KJS::JSCallbackObject::toNumber):
1133         (KJS::JSCallbackObject::toString):
1134         (KJS::JSCallbackObject::staticValueGetter):
1135         (KJS::JSCallbackObject::callbackGetter):
1136         
1137         * bindings/c/c_instance.cpp: Drop all locks when calling out to C.
1138         (KJS::Bindings::CInstance::invokeMethod):
1139         (KJS::Bindings::CInstance::invokeDefaultMethod):
1140         * bindings/c/c_runtime.cpp: Drop all locks when calling out to C.
1141         (KJS::Bindings::CField::valueFromInstance):
1142         (KJS::Bindings::CField::setValueToInstance):
1143         * bindings/jni/jni_objc.mm:
1144         (KJS::Bindings::dispatchJNICall): Drop all locks when calling out to Java.
1145
1146         * bindings/objc/objc_instance.mm: The changes here are to accomodate the
1147         fact that C++ unwinding of DropAllLocks goes crazy when you put it inside
1148         a @try block. I moved all JavaScript stuff outside of the @try blocks, and 
1149         then prefixed the whole blocks with DropAllLocks objects. This required some
1150         supporting changes in other functions, which now acquire the JSLock for
1151         themselves, intead of relying on their callers to do so.
1152         (ObjcInstance::end):
1153         (ObjcInstance::invokeMethod):
1154         (ObjcInstance::invokeDefaultMethod):
1155         (ObjcInstance::setValueOfUndefinedField):
1156         (ObjcInstance::getValueOfUndefinedField):
1157         * bindings/objc/objc_runtime.mm: Same as above, except I didn't want to
1158         change throwError to acquire the JSLock for itself.
1159         (ObjcField::valueFromInstance):
1160         (ObjcField::setValueToInstance):
1161         * bindings/objc/objc_utility.mm: Supporting changes mentioned above.
1162         (KJS::Bindings::convertValueToObjcValue):
1163         (KJS::Bindings::convertObjcValueToValue):
1164
1165         * kjs/JSLock.cpp: 
1166         (1) Fixed DropAllLocks to behave as advertised, and drop the JSLock only 
1167         if the current thread actually acquired it in the first place. This is 
1168         important because WebKit needs to ensure that the JSLock has been 
1169         dropped before it makes a plug-in call, even though it doesn't know if 
1170         the current thread actually acquired the JSLock. (We don't want WebKit
1171         to accidentally drop a lock belonging to *another thread*.)
1172         (2) Used the new per-thread code written for (1) to make recursive calls
1173         to JSLock very cheap. JSLock now knows to call pthread_mutext_lock/ 
1174         pthread_mutext_unlock only at nesting level 0.
1175         (KJS::createDidLockJSMutex):
1176         (KJS::JSLock::lock):
1177         (KJS::JSLock::unlock):
1178         (KJS::DropAllLocks::DropAllLocks):
1179         (KJS::DropAllLocks::~DropAllLocks):
1180         (KJS::JSLock::lockCount):
1181         * kjs/JSLock.h: Don't duplicate Noncopyable.
1182         (KJS::JSLock::~JSLock):
1183
1184         * wtf/Assertions.h: Blind attempt at helping the Windows build.
1185
1186 2007-03-08  MorganL  <morganl.webkit@yahoo.com>
1187
1188         Reviewed by Darin.
1189
1190         http://bugs.webkit.org/show_bug.cgi?id=13018
1191         Bug 13018: allow embedders to override the definition of CRASH.
1192
1193         * wtf/Assertions.h: make it possible to override CRASH.
1194
1195 2007-03-07  Anrong Hu  <huanr@yahoo.com>
1196
1197         Reviewed by Maciej.
1198
1199         Fix http://bugs.webkit.org/show_bug.cgi?id=12535
1200         Bug 12535: Stack-optimizing compilers can trick GC into freeing in-use objects
1201
1202         * kjs/internal.cpp:
1203         (KJS::StringImp::toObject): Copy val onto the stack so it is not subject to garbage collection.
1204
1205 2007-03-07  Geoffrey Garen  <ggaren@apple.com>
1206
1207         Build fix for non-multiple-thread folks.
1208         
1209         Use a shared global in the non-multiple-thread case.
1210
1211         * wtf/FastMalloc.cpp:
1212         (WTF::isForbidden):
1213         (WTF::fastMallocForbid):
1214         (WTF::fastMallocAllow):
1215
1216 2007-03-07  Geoffrey Garen  <ggaren@apple.com>
1217
1218         Reviewed by Darin Adler.
1219         
1220         Fixed ASSERT failure I just introduced.
1221         
1222         Made the fastMalloc isForbidden flag per thread. (Oops!) We expect that
1223         other threads will malloc while we're marking -- we just want to prevent
1224         our own marking from malloc'ing.
1225
1226         * wtf/FastMalloc.cpp:
1227         (WTF::initializeIsForbiddenKey):
1228         (WTF::isForbidden):
1229         (WTF::fastMallocForbid):
1230         (WTF::fastMallocAllow):
1231         (WTF::fastMalloc):
1232         (WTF::fastCalloc):
1233         (WTF::fastFree):
1234         (WTF::fastRealloc):
1235         (WTF::do_malloc):
1236
1237 2007-03-07  Shrikant Gangoda  <shrikant.gangoda@celunite.com>
1238
1239         Reviewed by Maciej.
1240
1241         http://bugs.webkit.org/show_bug.cgi?id=12997
1242
1243         Wrap pthread-specific assertion in #if USE(MULTIPLE_THREADS).
1244
1245         * kjs/collector.cpp:
1246         (KJS::Collector::markMainThreadOnlyObjects):
1247
1248 2007-03-06  Geoffrey Garen  <ggaren@apple.com>
1249
1250         Reviewed by Maciej Stachowiak.
1251         
1252         Fixed <rdar://problem/4576242> | http://bugs.webkit.org/show_bug.cgi?id=12586
1253         PAC file: malloc deadlock sometimes causes a hang @ www.apple.com/pro/profiles/ (12586)
1254         
1255         This is a modified version of r14752 on the branch.
1256         
1257         These changes just add debugging functionality. They ASSERT that we don't 
1258         malloc during the mark phase of a garbage collection, which can cause a
1259         deadlock.
1260
1261         * kjs/collector.cpp:
1262         (KJS::Collector::collect):
1263         * wtf/FastMalloc.cpp:
1264         (WTF::fastMallocForbid):
1265         (WTF::fastMallocAllow):
1266         (WTF::fastMalloc):
1267         (WTF::fastCalloc):
1268         (WTF::fastFree):
1269         (WTF::fastRealloc):
1270         (WTF::do_malloc):
1271         * wtf/FastMalloc.h:
1272
1273 2007-03-06  Geoffrey Garen  <ggaren@apple.com>
1274
1275         Reviewed by Maciej Stachowiak.
1276         
1277         Fixed all known crashers exposed by run-webkit-tests --threaded. This covers:
1278
1279         <rdar://problem/4565394> | http://bugs.webkit.org/show_bug.cgi?id=12585 
1280             PAC file: after closing a window that contains macworld.com, new window 
1281             crashes (KJS::PropertyMap::mark()) (12585)
1282         <rdar://problem/4571215> | http://bugs.webkit.org/show_bug.cgi?id=9211
1283             PAC file: Crash occurs when clicking on the navigation tabs at http://www.businessweek.com/ (9211)
1284         <rdar://problem/4557926> 
1285             PAC file: Crash occurs when attempting to view image in slideshow mode 
1286             at http://d.smugmug.com/gallery/581716 ( KJS::IfNode::execute (KJS::
1287             ExecState*) + 312) if you use a PAC file
1288
1289         (1) Added some missing JSLocks, along with related ASSERTs.
1290         
1291         (2) Fully implemented support for objects that can only be garbage collected
1292         on the main thread. So far, only WebCore uses this. We can add it to API
1293         later if we learn that it's needed. 
1294         
1295         The implementation uses a "main thread only" flag inside each object. When 
1296         collecting on a secondary thread, the Collector does an extra pass through 
1297         the heap to mark all flagged objects before sweeping. This solution makes
1298         the common case -- flag lots of objects, but never collect on a secondary 
1299         thread -- very fast, even though the uncommon case of garbage collecting
1300         on a secondary thread isn't as fast as it could be. I left some notes 
1301         about how to speed it up, if we ever care.
1302         
1303         For posterity, here are some things I learned about GC while investigating:
1304         
1305         * Each collect must either mark or delete every heap object. "Zombie" 
1306         objects, which are neither marked nor deleted, raise these issues:
1307
1308             * On the next pass, the conservative marking algorithm might mark a 
1309             zombie, causing it to mark freed objects.
1310
1311             * The client might try to use a zombie, which would seem live because 
1312             its finalizer had not yet run.
1313
1314         * A collect on the main thread is free to delete any object. Presumably, 
1315         objects allocated on secondary threads have thread-safe finalizers.
1316
1317         * A collect on a secondary thread must not delete thread-unsafe objects.
1318
1319         * The mark function must be thread-safe.
1320         
1321         Line by line comments:
1322
1323         * API/JSObjectRef.h: Added comment specifying that the finalize callback 
1324         may run on any thread.
1325
1326         * JavaScriptCore.exp: Nothing to see here.
1327
1328         * bindings/npruntime.cpp:
1329         (_NPN_GetStringIdentifier): Added JSLock.
1330
1331         * bindings/objc/objc_instance.h:
1332         * bindings/objc/objc_instance.mm:
1333         (ObjcInstance::~ObjcInstance): Use an autorelease pool. The other callers 
1334         to CFRelease needed one, too, but they were dead code, so I removed them 
1335         instead. (This fixes a leak seen while running run-webkit-tests --threaded,
1336         although I don't think it's specifically a threading issue.) 
1337         
1338         * kjs/collector.cpp:
1339         (KJS::Collector::collectOnMainThreadOnly): New function. Tells the collector
1340         to collect a value only if it's collecting on the main thread.
1341         (KJS::Collector::markMainThreadOnlyObjects): New function. Scans the heap
1342         for "main thread only" objects and marks them.
1343
1344         * kjs/date_object.cpp: 
1345         (KJS::DateObjectImp::DateObjectImp): To make the new ASSERTs happy, allocate 
1346         our globals on the heap, avoiding a seemingly unsafe destructor call at 
1347         program exit time.
1348         * kjs/function_object.cpp:
1349         (FunctionPrototype::FunctionPrototype): ditto
1350
1351         * kjs/interpreter.cpp:
1352         (KJS::Interpreter::mark): Removed boolean parameter, which was an incomplete
1353         and arguably hackish way to implement markMainThreadOnlyObjects() inside WebCore.
1354         * kjs/interpreter.h:
1355
1356         * kjs/identifier.cpp:
1357         (KJS::identifierTable): Added some ASSERTs to check for thread safety 
1358         problems.
1359
1360         * kjs/list.cpp: Added some ASSERTs to check for thread safety problems.
1361         (KJS::allocateListImp):
1362         (KJS::List::release):
1363         (KJS::List::append):
1364         (KJS::List::empty): Make the new ASSERTs happy.
1365
1366         * kjs/object.h:
1367         (KJS::JSObject::JSObject): "m_destructorIsThreadSafe" => "m_collectOnMainThreadOnly".
1368         I removed the constructor parameter because m_collectOnMainThreadOnly,
1369         like m_marked, is a Collector bit, so only the Collector should set or get it.
1370
1371         * kjs/object_object.cpp:
1372         (ObjectPrototype::ObjectPrototype): Make the ASSERTs happy.
1373         * kjs/regexp_object.cpp:
1374         (RegExpPrototype::RegExpPrototype): ditto
1375
1376         * kjs/ustring.cpp: Added some ASSERTs to check for thread safety problems.
1377         (KJS::UCharReference::ref): 
1378         (KJS::UString::Rep::createCopying):
1379         (KJS::UString::Rep::create):
1380         (KJS::UString::Rep::destroy):
1381         (KJS::UString::null): Make the new ASSERTs happy.
1382         * kjs/ustring.h:
1383         (KJS::UString::Rep::ref): Added some ASSERTs to check for thread safety problems.
1384         (KJS::UString::Rep::deref):
1385
1386         * kjs/value.h:
1387         (KJS::JSCell::JSCell):
1388
1389 2007-03-06  Geoffrey Garen  <ggaren@apple.com>
1390
1391         Reviewed by Maciej Stachowiak.
1392         
1393         2% speedup on super accurate JS iBench.
1394
1395         (KJS::Collector::collect): Removed anti-optimization to call
1396         pthread_is_threaded_np() before calling pthread_main_np(). Almost all 
1397         apps have more than one thread, so the extra call is actually worse.
1398         Interestingly, even the single-threaded testkjs shows a speed gain
1399         from removing the pthread_is_threaded_np() short-circuit. Not sure why.
1400
1401 2007-03-04  Don Gibson  <dgibson77@gmail.com>
1402
1403         Reviewed by Nikolas Zimmermann.
1404
1405         - fix http://bugs.webkit.org/show_bug.cgi?id=12950
1406           Assertions.cpp should not #define macros that are already defined
1407
1408         * wtf/Assertions.cpp: Don't #define WINVER and _WIN32_WINNT if they
1409         are already defined.
1410
1411 2007-03-02  Steve Falkenburg  <sfalken@apple.com>
1412
1413         Reviewed by Anders.
1414         
1415         Add unsigned int hash traits (matches existing unsigned long version)
1416
1417         * wtf/HashTraits.h:
1418         (WTF::):
1419
1420 2007-03-02  Adam Roben  <aroben@apple.com>
1421
1422         Reviewed by Kevin M.
1423
1424         Try to fix the Qt build.
1425
1426         * kjs/DateMath.cpp:
1427         (KJS::msToGregorianDateTime): Removed unnecessary "struct" keyword.
1428         * kjs/DateMath.h: Moved forward declarations to the top of the file
1429         before they are used.
1430         * kjs/date_object.cpp:
1431         (KJS::formatLocaleDate): Changed to take a const GregorianDateTime&
1432         since GregorianDateTime is Noncopyable.
1433
1434 2007-03-02  Darin Adler  <darin@apple.com>
1435
1436         Reviewed by Kevin McCullough.
1437
1438         - fix http://bugs.webkit.org/show_bug.cgi?id=12867
1439           REGRESSION: BenchJS test 7 (dates) is 220% slower than in Safari 2.0.4
1440
1441         * kjs/DateMath.h: Marked GregorianDateTime as noncopyable, since it has a non-trivial
1442         destructor and not the correspoding copy constructor or assignment operator.
1443         Changed the GregorianDateTime constructor to use member initialization syntax.
1444         Fixed the destructor to use the array delete operator, since timeZone is an array.
1445
1446         * kjs/DateMath.cpp:
1447         (KJS::daysInYear): Changed to call isLeapYear so the rule is not repeated twice.
1448         (KJS::getUTCOffset): Added caching on PLATFORM(DARWIN), since we can rely on the
1449         notify_check function and "com.apple.system.timezone" to let us know when the
1450         offset has changed.
1451
1452 2007-02-27  Geoffrey Garen  <ggaren@apple.com>
1453
1454         Reviewed by Darin Adler.
1455         
1456         Follow-up to fixing http://bugs.webkit.org/show_bug.cgi?id=12659 | <rdar://problem/4954306>
1457         JS objects not collected after closing window @ ebay.com/maps.google.com
1458         
1459         Changed Interpreter cache of global constructors and prototypes from
1460         ProtectedPtrs to bare, marked pointers. ProtectedPtrs are inefficient,
1461         and they increase the risk of reference cycles. Also, Darin said something
1462         about ProtectedPtrs giving him warts.
1463         
1464         Also changed data members to precise types from generic JSObject*'s.
1465         
1466         Layout tests and JS tests pass.
1467
1468         * kjs/SavedBuiltins.h:
1469         * kjs/interpreter.cpp:
1470         (KJS::Interpreter::init):
1471         (KJS::Interpreter::~Interpreter):
1472         (KJS::Interpreter::initGlobalObject): Moved Identifier::init() call to
1473         constructor, for clarity.
1474         (KJS::Interpreter::mark):
1475         * kjs/interpreter.h:
1476
1477 2007-02-27  Geoffrey Garen  <ggaren@apple.com>
1478
1479         Reviewed by Maciej Stachowiak.
1480         
1481         Fixed http://bugs.webkit.org/show_bug.cgi?id=12659 | <rdar://problem/4954306>
1482         JS objects not collected after closing window @ ebay.com/maps.google.com
1483
1484         Don't GC in the Interpreter destructor. For that to work, the Interpreter
1485         would have to NULL out all of its ProtectedPtrs before calling collect(). But 
1486         we've decided that we don't want things to work that way, anyway. We want the
1487         client to be in charge of manual GC so that it can optimize cases when
1488         it will be destroying many interpreters at once
1489         (e.g., http://bugs.webkit.org/show_bug.cgi?id=12900).
1490         
1491         Also removed Interpreter::collect() because it was redundant with 
1492         Collector::collect().
1493
1494         * JavaScriptCore.exp:
1495         * kjs/interpreter.cpp:
1496         (KJS::Interpreter::~Interpreter):
1497         * kjs/testkjs.cpp:
1498         (TestFunctionImp::callAsFunction):
1499
1500 2007-02-26  Krzysztof Kowalczyk  <kkowalczyk@gmail.com>
1501
1502         Reviewed by Adam Roben.
1503
1504         Rename *_SUPPORT defines to ENABLE_*.
1505
1506         * jscore.bkl:
1507
1508 2007-02-26  Maciej Stachowiak  <mjs@apple.com>
1509
1510         Reviewed by Lars.
1511         
1512         - <rdar://problem/5021698> Disable experimental SVG features (12883)
1513
1514         * wtf/Platform.h: Add ENABLE() macro similar to HAVE() and USE(), to
1515         allow nicer handling of optional WebKit features.
1516
1517 2007-02-22  George Staikos  <staikos@kde.org>
1518
1519         Reviewed by Lars.
1520
1521         Add return values
1522
1523         * wtf/unicode/qt4/UnicodeQt4.h:
1524         (WTF::Unicode::toLower):
1525         (WTF::Unicode::toUpper):
1526
1527 2007-02-22  Oscar Cwajbaum  <public@oscarc.net>
1528
1529         Reviewed by Maciej.
1530
1531         Fix ARM-specific alignment problem in FastMalloc
1532         http://bugs.webkit.org/show_bug.cgi?id=12841
1533
1534         * wtf/FastMalloc.cpp:
1535         Modify how pageheap_memory is declared to ensure proper alignment
1536         on architectures such as ARM
1537
1538 2007-02-20  Zack Rusin  <zrusin@trolltech.com>
1539
1540         Reviewed by Lars
1541
1542         Make sure that non-void methods always return something.
1543
1544         * wtf/unicode/qt4/UnicodeQt4.h:
1545         (WTF::Unicode::toLower):
1546         (WTF::Unicode::toUpper):
1547         (WTF::Unicode::foldCase):
1548
1549 2007-02-18  Kevin Ollivier  <kevino@theolliviers.com>
1550
1551         Reviewed by Adam Roben.
1552
1553         Fix cases where MSVC-specific code was identified as Win32 platform
1554         code. (as it should be compiled for e.g. wx port when using MSVC too)
1555         
1556         * wtf/Assertions.h: 
1557         * wtf/MathExtras.h:
1558         * wtf/StringExtras.h:
1559         changed PLATFORM(WIN) sections to COMPILER(MSVC) as necessary
1560
1561 2007-02-17  Krzysztof Kowalczyk  <kkowalczyk@gmail.com>
1562
1563         Reviewed by Adam Roben.
1564
1565         Fix crashes on ARM due to different struct packing. Based on a patch
1566         by Mike Emmel.
1567         * kjs/ustring.cpp: compile-time assert to make sure sizeof(UChar) == 2
1568         * kjs/ustring.h: pack UChar struct to ensure that sizeof(UChar) == 2
1569         * wtf/Assertions.h: add COMPILE_ASSERT macro for compile-time assertions
1570
1571 2007-02-16  George Staikos  <staikos@kde.org>
1572
1573         Reviewed by Maciej.
1574
1575         Fix uninitialized variable
1576
1577         * bindings/testbindings.cpp:
1578         (myAllocate):
1579
1580 2007-02-16  Anders Carlsson  <acarlsson@apple.com>
1581
1582         Reviewed by Mitz.
1583
1584         http://bugs.webkit.org/show_bug.cgi?id=12788
1585         REGRESSION: Going back one page in history has a noticeable delay
1586         
1587         Um...if all elements in two vectors are equal, then I guess we could say that
1588         the two vectors are equal too.
1589         
1590         * wtf/Vector.h:
1591         (WTF::):
1592
1593 2007-02-14  Anders Carlsson  <acarlsson@apple.com>
1594
1595         Reviewed by Darin.
1596
1597         Add new canCompareWithMemcmp vector trait and use it to determine whether
1598         operator== can use memcmp.
1599         
1600         * wtf/Vector.h:
1601         (WTF::):
1602         (WTF::VectorTypeOperations::compare):
1603         (WTF::operator==):
1604         * wtf/VectorTraits.h:
1605         (WTF::):
1606
1607 2007-02-13  Brady Eidson  <beidson@apple.com>
1608
1609         Reviewed by Darin
1610         
1611         Tweaked vector a bit
1612
1613         * wtf/Vector.h:
1614         (WTF::operator==):
1615
1616 2007-02-13  Dex Deacon  <occupant4@gmail.com>
1617
1618         Reviewed by Darin.
1619
1620         - fix for http://bugs.webkit.org/show_bug.cgi?id=12750
1621           Vector operator== was not defined correctly. It returned void,
1622           did not accept const Vectors, and used an int instead of size_t. 
1623
1624         * wtf/Vector.h: fixed comparison operators
1625         (WTF::operator==):
1626         (WTF::operator!=):
1627
1628 2007-02-10  David Carson  <dacarson@gmail.com>
1629
1630         Reviewed by Maciej.
1631
1632         - fix for http://bugs.webkit.org/show_bug.cgi?id=12636
1633         Corrected the generation of method signatures when the parameter
1634         is an Array. 
1635         Added support for converting a Javascript array to a Java array.
1636
1637         * bindings/jni/jni_utility.h: added new type for array, array_type
1638         * bindings/jni/jni_runtime.cpp: add support for new array type
1639         (JavaField::valueFromInstance):
1640         (JavaField::setValueToInstance):
1641         (JavaMethod::JavaMethod):
1642         (JavaMethod::signature):
1643         * bindings/jni/jni_utility.cpp: add support for new array type
1644         (KJS::Bindings::callJNIMethod):
1645         (KJS::Bindings::callJNIStaticMethod):
1646         (KJS::Bindings::callJNIMethodIDA):
1647         (KJS::Bindings::JNITypeFromClassName):
1648         (KJS::Bindings::signatureFromPrimitiveType):
1649         (KJS::Bindings::JNITypeFromPrimitiveType):
1650         (KJS::Bindings::getJNIField):
1651         (KJS::Bindings::convertArrayInstanceToJavaArray): new method
1652         converts the Javascript array to the requested Java array.
1653         (KJS::Bindings::convertValueToJValue):
1654
1655 2007-02-08  Anders Carlsson  <acarlsson@apple.com>
1656
1657         Reviewed by Geoff.
1658
1659         <rdar://problem/4930614>
1660         Safari complains about "Slow Script" if GMail is left open and machine is busy
1661         
1662         <rdar://problem/4649516>
1663         Turn off slow script dialog or crank up time that makes it come up
1664         
1665         <rdar://problem/4963589>
1666         Slow script warning is displayed after closing of PROMPT or PRINT dialog
1667         
1668         Re-do the way script timeouts are handled. No longer use a unix timer that sends signals. Instead, add a 
1669         tick count and increment it in loop bodies. If the tick count reaches a threshold, do a timeout check. If the total time executing
1670         is higher than the timeout value, (possibly) interrupt the script. The timeout checker also adjusts the threshold dynamically
1671         to prevent doing the timeout check too often.
1672          
1673         * JavaScriptCore.exp:
1674         Remove pause and resume calls.
1675         
1676         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
1677         Add winmm.lib.
1678
1679         * kjs/interpreter.cpp:
1680         (KJS::Interpreter::init):
1681         (KJS::Interpreter::~Interpreter):
1682         (KJS::Interpreter::startTimeoutCheck):
1683         (KJS::Interpreter::stopTimeoutCheck):
1684         (KJS::Interpreter::resetTimeoutCheck):
1685         (KJS::getCurrentTime):
1686         (KJS::Interpreter::checkTimeout):
1687         * kjs/interpreter.h:
1688         (KJS::Interpreter::timedOut):
1689         * kjs/nodes.cpp:
1690         (DoWhileNode::execute):
1691         (WhileNode::execute):
1692         (ForNode::execute):
1693
1694 2007-02-07  Darin Adler  <darin@apple.com>
1695
1696         * JavaScriptCore.vcproj/JavaScriptCore.sln: Reenable testkjs.
1697
1698 2007-02-07  Darin Adler  <darin@apple.com>
1699
1700         Reviewed by Geoff.
1701
1702         - another build fix; this time for sure
1703
1704         * pcre/pcre_exec.c: (match):
1705         The compiler caught an incorrect use of the othercase variable across
1706         a call to RMATCH in character repeat processing. Local variables can
1707         change in the crazy NO_RECURSE mode that we use, so we instead need
1708         the value in othercase to be in one of the special stack frame variables.
1709         Added a new stack frame variable for this purpose named repeat_othercase.
1710         Also noted a similar error in the non-UTF-16 side of the #ifdef, but
1711         didn't try to fix that one. Also removed a SUPPORT_UCP #ifdef from the
1712         PCRE_UTF16 side; that code doesn't work without the Unicde properties
1713         table, and we don't try to use it that way.
1714
1715 2007-02-06  Steve Falkenburg  <sfalken@apple.com>
1716
1717         Disable testkjs in sln until we figure out mysterious compiler warning.
1718
1719         * JavaScriptCore.vcproj/JavaScriptCore.sln:
1720
1721 2007-02-06  Steve Falkenburg  <sfalken@apple.com>
1722
1723         Build fix by ggaren
1724
1725         * pcre/pcre_exec.c:
1726         (match):
1727
1728 2007-02-06  Darin Adler  <darin@apple.com>
1729
1730         Reviewed by Geoff.
1731
1732         - fix <rdar://problem/4979089> PCRE should avoid setjmp/longjmp even when compiler
1733           is not GCC
1734
1735         Added a new code path that's slower and way uglier but doesn't rely on GCC's
1736         computed gotos.
1737
1738         * pcre/pcre_exec.c: Added a numeric parameter to the RMATCH function. It must be
1739         different at every RMATCH call site. Changed the non-GCC NO_RECURSE version of
1740         the macro to use a label incorporating the number. Changed the RRETURN macro to
1741         use a goto instead of longjmp.
1742         (match): Added a different number at each callsite, using a perl script for the
1743         first-time task. Going forward it should be easy to maintain by hand. Added a
1744         switch statement at the bottom of the function. We'll get compile time errors
1745         if we have anything in the switch statement that's never used in an RMATCH,
1746         but errors in the other direction are silent except at runtime.
1747
1748 2007-02-06  Darin Adler  <darin@apple.com>
1749
1750         Reviewed by John.
1751
1752         - fix <rdar://problem/4687840> 9A241: JavaScript RegExp 25-30x slower than on 10.4.7
1753
1754         I used Shark to figure out what to do. The test case is now 15% faster than with
1755         stock Safari. Some other regular expression cases might still be a few % slower
1756         than before, but the >10x slowdown is now completely gone.
1757
1758         1) Fix slowness caused by setjmp/longjmp by using computed goto instead.
1759
1760         Use GCC extensions - locally declared labels, labels as values, and computed goto -
1761         instead of using setjmp/longjmp to implemement non-recursive version of the regular
1762         expression system. We could probably make this even faster if we reduced the use
1763         of malloc a bit too.
1764
1765         2) Fix slowness caused by allocating heapframe objects by allocating the first
1766            16 of them from the stack.
1767
1768         3) Speed up use of malloc and free in PCRE by making it use fastMalloc and fastFree.
1769
1770         4) Speed up the test case by adding a special case to a UString function.
1771
1772         5) Made a small improvement to the innermost hottest loop of match by hoisting
1773            the conversion from int to pcre_uchar out of the loop.
1774
1775         * JavaScriptCore.xcodeproj/project.pbxproj: Compile FastMallocPCRE.cpp, and don't
1776         compile pcre_globals.c.
1777
1778         * wtf/FastMallocPCRE.cpp: Added. A copy of pcre_globals.c that uses FastMalloc.h.
1779         This is better than code that sets the PCRE allocation globals because by doing it
1780         this way there's guaranteed to be no problem with order of initialization.
1781
1782         * kjs/ustring.cpp: (KJS::UString::spliceSubstringsWithSeparators): Add a fast
1783         special case when this is called for only one subrange and no seaprators. This
1784         was happening a lot in the test case and it seems quite reasonable to optimize this.
1785
1786         * pcre/pcre_exec.c: Create a copy of the RMATCH and RRETURN macros that use goto
1787         instead of setjmp/longjmp. Change code that calls pcre_stack_malloc to first use
1788         storage on the stack inside the match function.
1789         (match): Move initialization of utf8 up a couple lines to avoid "possibly used
1790         uninitialized" warning. Use a local variable so we compare with pcre_uchar instead
1791         of with int inside the inner "find a character" loop.
1792
1793 2007-02-03  George Staikos  <staikos@kde.org>
1794
1795         Reviewed by Alexey.
1796
1797         -1 is not a valid point.  We can't handle anything > 0xffff anyway.
1798         Fixes crash on cases like eval("x");
1799
1800         * wtf/unicode/qt4/UnicodeQt4.h:
1801         (WTF::Unicode::category):
1802
1803 2007-02-02  Darin Adler  <darin@apple.com>
1804
1805         Reviewed by Anders.
1806
1807         - fix copying and assigning a ListHashSet
1808
1809         No test because the code path with bugs I am fixing is not used yet.
1810
1811         * wtf/ListHashSet.h: Tweaked ListHashSetNodeAllocator a little bit for clarity.
1812         Changed m_allocator to be an OwnPtr instead of doing an explicit delete.
1813         Fixed bug in copy constructor where we'd have an uninitialized m_allocator.
1814         Fixed bug in assignment operator where it would swap only the hash table, and
1815         not the head, tail, and allocator pointers.
1816
1817 2007-02-02  Geoffrey Garen  <ggaren@apple.com>
1818
1819         Reviewed by Maciej Stachowiak.
1820         
1821         Use WTFLog instead of fprintf for logging KJS::Node leaks.
1822
1823         * kjs/nodes.cpp:
1824         (NodeCounter::~NodeCounter): Changed count to unsigned, updated
1825         to match style guidelines.
1826
1827 2007-02-02  Maciej Stachowiak  <mjs@apple.com>
1828
1829         - not reviewed, build fix
1830
1831         * wtf/ListHashSet.h:
1832         (WTF::ListHashSetNodeAllocator::ListHashSetNodeAllocator): ummm, use union correctly
1833
1834 2007-02-01  Maciej Stachowiak  <mjs@apple.com>
1835
1836         Reviewed by Darin.
1837         
1838         - use a custom allocator for ListHashSet, to fix ~1% perf regression using it for form control
1839
1840         * wtf/ListHashSet.h:
1841         (WTF::ListHashSetNodeAllocator::ListHashSetNodeAllocator):
1842         (WTF::ListHashSetNodeAllocator::allocate):
1843         (WTF::ListHashSetNodeAllocator::deallocate):
1844         (WTF::ListHashSetNode::operator new):
1845         (WTF::ListHashSetNode::operator delete):
1846         (WTF::ListHashSetNode::destroy):
1847         (WTF::ListHashSetTranslator::translate):
1848         (WTF::::ListHashSet):
1849         (WTF::::~ListHashSet):
1850         (WTF::::add):
1851         (WTF::::unlinkAndDelete):
1852         (WTF::::deleteAllNodes):
1853
1854 2007-01-31  Maciej Stachowiak  <mjs@apple.com>
1855
1856         Reviewed by Adam.
1857         
1858         - fix sporadic crash
1859
1860         * wtf/ListHashSet.h:
1861         (WTF::::remove): remove before deleting
1862
1863 2007-01-31  Maciej Stachowiak  <mjs@apple.com>
1864
1865         Reviewed by Mark with help from Lars.
1866         
1867         - added new ListHashSet class, which combines a hashtable and a linked list to provide a set
1868         that keeps elements in inserted order
1869         
1870         This is to assist in fixing the following:
1871         <rdar://problem/4751164> REGRESSION: Safari places text on incorrect button when returning to a page via back [10541]
1872         http://bugs.webkit.org/show_bug.cgi?id=10541
1873
1874         * JavaScriptCore.vcproj/WTF/WTF.vcproj:
1875         * JavaScriptCore.xcodeproj/project.pbxproj:
1876         * wtf/HashTable.h:
1877         (WTF::HashTable::find):
1878         (WTF::HashTable::contains):
1879         (WTF::::find):
1880         (WTF::::contains):
1881         * wtf/ListHashSet.h: Added.
1882         (WTF::ListHashSetNode::ListHashSetNode):
1883         (WTF::ListHashSetNodeHashFunctions::hash):
1884         (WTF::ListHashSetNodeHashFunctions::equal):
1885         (WTF::ListHashSetIterator::ListHashSetIterator):
1886         (WTF::ListHashSetIterator::get):
1887         (WTF::ListHashSetIterator::operator*):
1888         (WTF::ListHashSetIterator::operator->):
1889         (WTF::ListHashSetIterator::operator++):
1890         (WTF::ListHashSetIterator::operator--):
1891         (WTF::ListHashSetIterator::operator==):
1892         (WTF::ListHashSetIterator::operator!=):
1893         (WTF::ListHashSetIterator::operator const_iterator):
1894         (WTF::ListHashSetIterator::node):
1895         (WTF::ListHashSetConstIterator::ListHashSetConstIterator):
1896         (WTF::ListHashSetConstIterator::get):
1897         (WTF::ListHashSetConstIterator::operator*):
1898         (WTF::ListHashSetConstIterator::operator->):
1899         (WTF::ListHashSetConstIterator::operator++):
1900         (WTF::ListHashSetConstIterator::operator--):
1901         (WTF::ListHashSetConstIterator::operator==):
1902         (WTF::ListHashSetConstIterator::operator!=):
1903         (WTF::ListHashSetConstIterator::node):
1904         (WTF::ListHashSetTranslator::hash):
1905         (WTF::ListHashSetTranslator::equal):
1906         (WTF::ListHashSetTranslator::translate):
1907         (WTF::::ListHashSet):
1908         (WTF::::operator):
1909         (WTF::::~ListHashSet):
1910         (WTF::::size):
1911         (WTF::::capacity):
1912         (WTF::::isEmpty):
1913         (WTF::::begin):
1914         (WTF::::end):
1915         (WTF::::find):
1916         (WTF::::contains):
1917         (WTF::::add):
1918         (WTF::::remove):
1919         (WTF::::clear):
1920         (WTF::::unlinkAndDelete):
1921         (WTF::::appendNode):
1922         (WTF::::deleteAllNodes):
1923         (WTF::::makeIterator):
1924         (WTF::::makeConstIterator):
1925         (WTF::deleteAllValues):
1926
1927 2007-01-30  Darin Adler  <darin@apple.com>
1928
1929         * kjs/DateMath.cpp: Fix license header to reflect LGPL as the first license
1930         mentioned. We still mention the option of using under MPL or GPL since some
1931         of this code came from the Mozilla project with those license terms.
1932
1933 2007-01-30  Simon Hausmann  <hausmann@kde.org>
1934
1935         Reviewed by Zack.
1936
1937         Turned JavaScriptCore from a separate library into an includable
1938         project, to combine it all into libWebKitQt.
1939
1940         * JavaScriptCore.pri: Added.
1941         * JavaScriptCore.pro: Removed.
1942         * kjs/testkjs.pro:
1943
1944 2007-01-29  Geoffrey Garen  <ggaren@apple.com>
1945
1946         Reviewed by Maciej Stachowiak.
1947
1948         Fixed <rdar://problem/4485644> REGRESSION: JavaScriptCore has init routines
1949         
1950         The TCMalloc module now initializes, if needed, inside GetCache() and 
1951         fastMallocSetIsMultiThreaded(). We leverage the same synchronization 
1952         technique used for enabling / disabling the single-threaded optimization 
1953         to synchronize initialization of the library without requiring a lock 
1954         for every malloc.
1955         
1956         1,251 runs of tcmalloc_unittest, 2 runs of a custom, massively multi-threaded 
1957         tcmalloc_unittest, and my custom version of the PLT show no regressions.
1958         Super-accurate JS iBench reports a .24% regression, which is right at the
1959         limit of its error range, so I'm declaring victory.
1960
1961         * wtf/FastMalloc.cpp:
1962         (WTF::fastMallocSetIsMultiThreaded): Initialize, if needed. (InitModule()
1963         checks the "if needed" part.)
1964         (WTF::TCMalloc_ThreadCache::GetCache): Restored original TCMalloc code
1965         inside #ifdef, for posterity. Added new initialization logic.
1966         (WTF::TCMalloc_ThreadCache::InitModule): Call InitTSD(), since we don't
1967         have a static initializer to call it for us, now. This means that fastMalloc
1968         is not usable as a general libc allocator, but it never was, and if it were
1969         the general libc allocator, we wouldn't be here in the first place, so whatever.
1970         (WTF::TCMalloc_ThreadCache::InitTSD): Don't try to take the pageheap_lock, 
1971         since InitModule already has it.
1972
1973 2007-01-29  Kevin McCullough  <KMcCullough@apple.com>
1974
1975         Reviewed by Geoff and Oliver.
1976
1977         - rdar://problem/4955561
1978         - missusing JavaScript shouldn't crash webkit.  Now it doesn't, in this case.
1979
1980         * bindings/objc/objc_runtime.mm:
1981         (ObjcFallbackObjectImp::callAsFunction):
1982         * bindings/runtime_method.cpp:
1983         (RuntimeMethod::callAsFunction):
1984         * bindings/runtime_object.cpp:
1985         (RuntimeObjectImp::callAsFunction):
1986
1987 2007-01-28  Geoffrey Garen  <ggaren@apple.com>
1988
1989         Reviewed by Maciej Stachowiak.
1990         
1991         First step in fixing <rdar://problem/4485644> REGRESSION: JavaScriptCore 
1992         has init routines
1993         
1994         Don't rely on a static initializer to store the main thread's ID (which
1995         we would use to detect allocations on secondary threads). Instead, require 
1996         the caller to notify fastMalloc if it might allocate on a secondary thread.
1997         
1998         Also fixed what seemed like a race condition in do_malloc.
1999         
2000         tcmalloc_unittest and my custom versions of JS iBench and PLT show no
2001         regressions.
2002
2003         * wtf/FastMalloc.cpp:
2004         (WTF::fastMallocSetIsMultiThreaded): 
2005         (1) Renamed from "fastMallocRegisterThread", which was a misleading name because 
2006         not all threads need to register with fastMalloc -- only secondary threads 
2007         need to, and only for the purpose of disabling its single-threaded optimization. 
2008
2009         (2) Use the pageheap_lock instead of a custom one, since we need to synchronize
2010         with the read of isMultiThreaded inside CreateCacheIfNecessary. This is a new
2011         requirement, now that we can't guarantee that the first call to CreateCacheIfNecessary
2012         will occur on the main thread at init time, before any other threads have been created.
2013
2014         (WTF::TCMalloc_ThreadCache::CreateCacheIfNecessary):
2015         (WTF::do_malloc): Reverted WTF change only to call GetCache() if size <= kMaxSize.
2016         The WTF code would read phinited without holding the pageheap_lock, which
2017         seemed like a race condition. Regardless, calling GetCache reduces the number 
2018         of code paths to module initialization, which will help in writing the 
2019         final fix for this bug.
2020
2021 2007-01-28  David Kilzer  <ddkilzer@webkit.org>
2022
2023         Reviewed by Darin.
2024
2025         - fix http://bugs.webkit.org/show_bug.cgi?id=9815
2026           JavaScript TypeError loading Dean Edwards' JS compressor/obfuscator
2027
2028         Creating a function using 'new Function()' was not setting its prototype with the
2029         same flags as 'function() { }'.
2030
2031         Test: fast/js/function-prototype.html
2032
2033         * kjs/function_object.cpp:
2034         (FunctionObjectImp::construct): Change flags from DontEnum|DontDelete|ReadOnly to
2035         Internal|DontDelete to match FuncDeclNode::processFuncDecl() and
2036         FuncExprNode::evaluate() in kjs/nodes.cpp.
2037
2038 2007-01-27  Geoffrey Garen  <ggaren@apple.com>
2039
2040         Reviewed by Beth Dakin.
2041         
2042         Added some missing JSLocks, which might fix <rdar://problem/4889707>.
2043
2044         We need to lock whenever we might allocate memory because our FastMalloc
2045         implementation requires clients to register their threads, which we do
2046         through JSLock. 
2047         
2048         We also need to lock whenever modifying ref-counts because they're not 
2049         thread-safe.
2050
2051         * API/JSObjectRef.cpp:
2052         (JSClassCreate): Allocates memory
2053         (JSClassRetain): Modifies a ref-count
2054         (JSClassRelease): Modifies a ref-count
2055         (JSPropertyNameArrayRetain): Modifies a ref-count
2056         (JSPropertyNameArrayRelease): Modifies a ref-count
2057         * API/JSStringRef.cpp:
2058         (JSStringRetain): Modifies a ref-count
2059         * API/JSValueRef.cpp:
2060         (JSValueIsInstanceOfConstructor): Might allocate memory if an exception
2061         is thrown.
2062
2063 2007-01-27  Lars Knoll <lars@trolltech.com>
2064
2065         Fix the Qt build.
2066
2067         * bindings/qt/qt_instance.h:
2068
2069 2007-01-25  Geoffrey Garen  <ggaren@apple.com>
2070
2071         Reviewed by Maciej Stachowiak.
2072         
2073         Fixed <rdar://problem/4608404> WebScriptObject's _rootObject lack 
2074         of ownership policy causes crashes (e.g., in Dashcode)
2075         
2076         The old model for RootObject ownership was either to (1) leak them or (2) assign
2077         them to a single owner -- the WebCore::Frame -- which would destroy them 
2078         when it believed that all of its plug-ins had unloaded.
2079         
2080         This model was broken because of (1) and also because plug-ins are not the only 
2081         RootObject clients. All Bindings clients are RootObjects clients, including 
2082         applications, which outlive any particular WebCore::Frame.
2083         
2084         The new model for RootObject ownership is to reference-count them, with a
2085         throw-back to the old model: The WebCore::Frame tracks the RootObjects
2086         it creates, and invalidates them when it believes that all of its plug-ins 
2087         have unloaded.
2088         
2089         We maintain this throw-back to avoid plug-in leaks, particularly from Java.
2090         Java is completely broken when it comes to releasing JavaScript objects. 
2091         Comments in our code allege that Java does not always call finalize when 
2092         collecting objects. Moreoever, my own testing reveals that, when Java does 
2093         notify JavaScript of a finalize, the data it provides is totally bogus.
2094         
2095         This setup is far from ideal, but I don't think we can do better without
2096         completely rewriting the bindings code, and possibly part of the Java
2097         plug-in / VM.
2098         
2099         Layout tests pass. No additional leaks reported. WebCore/manual-tests/*liveconnect*
2100         and a few LiveConnect demos on the web also run without a hitch.
2101         
2102         const RootObject* => RootObject*, since we need to ref/deref
2103         
2104         * bindings/NP_jsobject.cpp:
2105         (jsDeallocate): deref our RootObjects. Also unprotect or JSObject, instead
2106         of just relying on the RootObject to do it for us when it's invalidated.
2107         (_isSafeScript): Check RootObject validity.
2108         (_NPN_CreateScriptObject): ditto
2109         (_NPN_Invoke): ditto
2110         (_NPN_Evaluate): ditto
2111         (_NPN_GetProperty): ditto
2112         (_NPN_SetProperty): ditto
2113         (_NPN_RemoveProperty): ditto
2114         (_NPN_HasProperty): ditto
2115         (_NPN_HasMethod): ditto
2116         (_NPN_SetException): ditto
2117
2118         * bindings/runtime_root.cpp: 
2119         Revived bit-rotted LIAR LIAR LIAR comment.
2120         
2121         LOOK: Added support for invalidating RootObjects without deleting them, 
2122         which is the main goal of this patch. 
2123
2124         Moved protect counting into the RootObject class, to emphasize that 
2125         the RootObject protects the JSObject, and unprotects it upon being invalidated.
2126             addNativeReference => RootObject::gcProtect
2127             removeNativeReference => RootObject::gcUnprotect
2128             ProtectCountSet::contains => RootObject::gcIsProtected
2129             
2130         I know we'll all be sad to see the word "native" go.
2131         
2132         * bindings/runtime_root.h: Added ref-counting support to RootObject, with
2133         all the standard accoutrements.
2134
2135         * bindings/c/c_utility.cpp:
2136         (KJS::Bindings::convertValueToNPVariant): If we can't find a valid RootObject,
2137         return void instead of just leaking.
2138
2139         * bindings/jni/jni_instance.cpp:
2140         (JavaInstance::JavaInstance): Don't take a RootObject in our constructor;
2141         be like other Instances and require the caller to call setRootObject. This
2142         reduces the number of ownership code paths.
2143         (JavaInstance::invokeMethod): Check RootObject for validity.
2144         * bindings/jni/jni_instance.h: Removed private no-arg constructor. Having
2145         an arg constructor accomplishes the same thing.
2146
2147         * bindings/jni/jni_jsobject.cpp:
2148         (JavaJSObject::invoke): No need to call findProtectCountSet, because finalize()
2149         checks for RootObject validity.
2150         (JavaJSObject::JavaJSObject): check RootObject for validity
2151         (JavaJSObject::call): ditto
2152         (JavaJSObject::eval): ditto
2153         (JavaJSObject::getMember): ditto
2154         (JavaJSObject::setMember): ditto
2155         (JavaJSObject::removeMember): ditto
2156         (JavaJSObject::getSlot): ditto
2157         (JavaJSObject::setSlot): ditto
2158         (JavaJSObject::toString): ditto
2159         (JavaJSObject::finalize): ditto
2160         (JavaJSObject::createNative): No need to tell the RootObject to protect 
2161         the global object, since the RootObject already owns the interpreter.
2162
2163         * bindings/jni/jni_runtime.cpp:
2164         (JavaArray::JavaArray): Removed copy construcutor becaue it was unused.
2165         Dead code is dangerous code.
2166
2167         * bindings/objc/objc_runtime.mm: Added WebUndefined protocol. Previous use
2168         of WebScriptObject was bogus, because WebUndefined is not a subclass of
2169         WebScriptObject.
2170         (convertValueToObjcObject): If we can't find a valid RootObject,
2171         return nil instead of just leaking.
2172
2173         * bindings/objc/objc_utility.mm:
2174         (KJS::Bindings::convertValueToObjcValue): If we can't find a valid RootObject,
2175         return nil instead of just leaking.
2176
2177 2007-01-27  Andrew Wellington  <proton@wiretapped.net>
2178
2179         Reviewed by Maciej.
2180         
2181         Fix for Repeated string concatenation results in OOM crash
2182         http://bugs.webkit.org/show_bug.cgi?id=11131
2183
2184         * kjs/operations.cpp:
2185         (KJS::add): Throw exception if string addition result is null
2186         * kjs/ustring.cpp:
2187         (KJS::UString::UString): Don't call memcpy when malloc failed
2188
2189 2007-01-25  Jan Kraemer  <camel@gmx.de>
2190
2191         Reviewed by Maciej
2192
2193         Fix for http://bugs.webkit.org/show_bug.cgi?id=12382
2194
2195         Fix crash on architectures with 32 bit ints and
2196         64 bit longs (For example Linux on AMD64)
2197
2198         * kjs/dtoa.cpp: #define Long int as suggested in comment
2199
2200 2007-01-24  Geoffrey Garen  <ggaren@apple.com>
2201
2202         Fixed up #include order for style. No review necessary.
2203
2204         * API/JSStringRef.cpp:
2205
2206 2007-01-24  Geoffrey Garen  <ggaren@apple.com>
2207
2208         Reviewed by Maciej Stachowiak.
2209
2210         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
2211         Copy JSStringRefCF, in case anybody wants to use it. (I just added
2212         it recently.)
2213
2214 2007-01-24  Maciej Stachowiak  <mjs@apple.com>
2215
2216         Not reviewed, trivial property change.
2217         
2218         * JavaScriptCore.vcproj/JavaScriptCore.sln: remove svn:mime-type
2219         property which made this binary.
2220
2221 2007-01-25  Mark Rowe  <mrowe@apple.com>
2222
2223         Reviewed by Darin.
2224
2225         * Info.plist: Update copyright string.
2226
2227 2007-01-24  Darin Adler  <darin@apple.com>
2228
2229         Reviewed by Mark Rowe.
2230
2231         * JavaScriptCore.xcodeproj/project.pbxproj: Changed to /usr/sbin/sysctl
2232         so we don't rely on people's paths.
2233
2234 2007-01-23  Alice Liu  <alice.liu@apple.com>
2235
2236         release build fix
2237
2238         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
2239         Copy APICasts.h
2240
2241 2007-01-23  Geoffrey Garen  <ggaren@apple.com>
2242
2243         build fix
2244
2245         * API/JSStringRef.h:
2246         * JavaScriptCore.xcodeproj/project.pbxproj:
2247
2248 2007-01-24  Mark Rowe  <mrowe@apple.com>
2249
2250         Build fix for DumpRenderTree.
2251
2252         * JavaScriptCore.xcodeproj/project.pbxproj: Make JSStringRefCF.h public so it's copied into built framework.
2253
2254 2007-01-23  Anders Carlsson  <acarlsson@apple.com>
2255
2256         Reviewed by Darin.
2257
2258         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
2259         Copy APICasts.h
2260
2261 2007-01-23  Geoffrey Garen  <ggaren@apple.com>
2262
2263         Reviewed by Maciej Stachowiak.
2264         
2265         Fixed <rdar://problem/4885131> Move CFString function declarations from 
2266         JSStringRef.h to JSStringRefCF.h
2267         
2268         Also removed remaining API FIXMEs and changed them into Radars.
2269
2270         * API/JSClassRef.cpp:
2271         (OpaqueJSClass::OpaqueJSClass): Added Radar numbers for UTF8 conversion.
2272
2273         * API/JSContextRef.cpp:
2274         (JSGlobalContextCreate): Replaced FIXME for NULL JSContextRef with Radar number.
2275
2276         * API/JSObjectRef.h: Removed FIXME, which is unprofessional in a public header.
2277
2278         * API/JSStringRef.cpp: Moved CF related implementations to JSStringRefCF.cpp.
2279         (JSStringCreateWithUTF8CString): Replaced FIXME with Radar number.
2280         * API/JSStringRef.h: Moved CF related declarations to JSStringRefCF.h. Added
2281         #include of JSStringRefCF.h as a stopgap until clients start #including
2282         it as needed by themselves.
2283
2284         * API/JSStringRefCF.cpp: Added.
2285         (JSStringCreateWithCFString):
2286         (JSStringCopyCFString): Replaced JSChar cast with UniChar cast, which is 
2287         more appropriate for a CF call.
2288         * API/JSStringRefCF.h: Added.
2289         * JavaScriptCore.xcodeproj/project.pbxproj:
2290
2291 2007-01-18  Sanjay Madhav  <sanjay12@gmail.com>
2292
2293         Reviewed by Darin.
2294
2295         Add JavaScriptCore define to help with tracing of when objects are marked.
2296
2297         * kjs/object.cpp:
2298         (KJS::JSObject::mark):
2299
2300 2007-01-18  Simon Hausmann  <hausmann@kde.org>
2301
2302         Reviewed by Zack.
2303
2304         * JavaScriptCore.pro: Remove generated files on make clean.
2305         * pcre/pcre.pri:
2306
2307 2007-01-16  Alexey Proskuryakov  <ap@webkit.org>
2308
2309         Reviewed by Maciej.
2310
2311         http://bugs.webkit.org/show_bug.cgi?id=12268
2312         Give object prototypes their own names
2313
2314         * kjs/lookup.h: Append "Prototype" to ClassName in KJS_IMPLEMENT_PROTOTYPE.
2315
2316 2007-01-16  Geoffrey Garen  <ggaren@apple.com>
2317
2318         Reviewed by Darin Adler.
2319         
2320         Added re-entrency checking to GC allocation and collection. It is an error
2321         to allocate or collect from within a collection. We've had at least one 
2322         case of each bug in the past.
2323         
2324         Added a comment to the API header, explaining that API clients must not
2325         make this mistake, either.
2326         
2327         Layout tests and JS tests pass.
2328
2329         * API/JSObjectRef.h:
2330         * kjs/collector.cpp:
2331         (KJS::GCLock::GCLock):
2332         (KJS::GCLock::~GCLock):
2333         (KJS::Collector::allocate):
2334         (KJS::Collector::collect):
2335
2336 2007-01-14  Mark Rowe  <mrowe@apple.com>
2337
2338         Reviewed by Mitz.
2339
2340         Minor fixes to JavaScript pretty-printing.
2341
2342         * JavaScriptCore.exp:
2343         * kjs/Parser.cpp:
2344         (KJS::Parser::prettyPrint): Return line number and error message if parsing fails.
2345         * kjs/Parser.h:
2346         * kjs/nodes2string.cpp:
2347         (ElementNode::streamTo): Include comma delimiters in array literals.
2348         (PropertyNameNode::streamTo): Quote property names in object literals to handle the case when the property name is not a valid identifier.
2349         * kjs/testkjs.cpp:
2350         (doIt): Print any errors encountered while pretty-printing.
2351
2352 2007-01-12  Anders Carlsson  <acarlsson@apple.com>
2353
2354         Reviewed by Darin.
2355
2356         * wtf/HashTraits.h:
2357         Add hash traits for unsigned long and unsigned long long.
2358
2359 2007-01-12  Geoffrey Garen  <ggaren@apple.com>
2360
2361         RS by Brady Eidson.
2362         
2363         Rolling back in r18786 with leaks fixed, and these renames slightly reworked:
2364
2365         Because they can return 0:
2366         rootObjectForImp => findRootObject (overloaded for JSObject* and Interpreter*)
2367         rootObjectForInterpreter => findRootObject (ditto)
2368         findReferenceSet => findProtectCountSet
2369
2370 2007-01-11  Geoffrey Garen  <ggaren@apple.com>
2371
2372         RS by Brady Eidson.
2373         
2374         Rolling out r18786 because it caused leaks.
2375
2376 2007-01-11  Geoffrey Garen  <ggaren@apple.com>
2377
2378         Reviewed by Anders Carlsson.
2379
2380         Even more cleanup in preparation for fixing <rdar://problem/4608404> 
2381         WebScriptObject's _executionContext lack of ownership policy causes 
2382         crashes (e.g., in Dashcode)
2383         
2384         Layout tests pass.
2385         
2386         Renames:
2387             ReferencesSet | ProtectCounts => ProtectCountSet (because it's a typename for a set of GC protect counts)
2388             ReferencesByRootMap => RootObjectMap (because RootObjectToProtectCountSetMap would have been confusing)
2389             pv => protectedValues
2390             rootObjectForImp => getRootObject (overloaded for JSObject* and Interpreter*)
2391             rootObjectForInterpreter => getRootObject (ditto)
2392             findReferenceSet => getProtectCountSet
2393             imp => jsObject
2394         
2395         (KJS::Bindings::getRootObjectMap): Changed to take advantage of built-in
2396         facility for initializing static variables.
2397
2398         (KJS::Bindings::getProtectCountSet):
2399         (KJS::Bindings::destroyProtectCountSet): Added. Helps encapsulate the fact
2400         that getting a ProtectCountSet entails adding a RootObject to a hash table,
2401         and destroying one entails the reverse.
2402
2403         (KJS::Bindings::getRootObject): Removed spurious NULL check.
2404         
2405         (KJS::Bindings::findReferenceSet): Renamed. Changed to use getRootObject()
2406         instead of iterating on its own.
2407
2408         (KJS::Bindings::addNativeReference): Changed to use an early return instead
2409         of indenting the whole function.
2410         (KJS::Bindings::removeNativeReference): Ditto.
2411
2412 2007-01-11  Geoffrey Garen  <ggaren@apple.com>
2413
2414         Reviewed by Anders Carlsson.
2415
2416         Even more cleanup in preparation for fixing <rdar://problem/4608404> 
2417         WebScriptObject's _executionContext lack of ownership policy causes 
2418         crashes (e.g., in Dashcode)
2419         
2420         Layout tests pass.
2421         
2422         Renames:
2423             findRootObjectForNativeHandleFunction => createRootObject
2424             FindRootObjectForNativeHandleFunctionPtr => CreateRootObjectFunction
2425             
2426         Also removed unnecessary use of "Bindings::" prefix.
2427
2428         * JavaScriptCore.exp:
2429         * bindings/jni/jni_jsobject.cpp:
2430         (JavaJSObject::createNative):
2431         (JavaJSObject::convertValueToJObject):
2432         (JavaJSObject::convertJObjectToValue):
2433         * bindings/runtime_root.cpp:
2434         (KJS::Bindings::RootObject::setCreateRootObject):
2435         * bindings/runtime_root.h:
2436         (KJS::Bindings::RootObject::createRootObject):
2437
2438 2007-01-11  George Staikos  <staikos@kde.org>
2439
2440         Reviewed by Maciej
2441
2442         Appears to be Mac specific right now.
2443
2444         * kjs/config.h:
2445
2446 2007-01-10  Lars Knoll <lars@trolltech.com>
2447
2448         Reviewed by Zack
2449
2450         Use the new functionality in Qt 4.3, to make
2451         the methods closer compliant with the Unicode
2452         spec.
2453
2454         Keep the old code so that it still compiles against
2455         Qt 4.2.
2456
2457         * wtf/unicode/qt4/UnicodeQt4.h:
2458         (WTF::Unicode::toLower):
2459         (WTF::Unicode::toUpper):
2460         (WTF::Unicode::toTitleCase):
2461         (WTF::Unicode::foldCase):
2462         (WTF::Unicode::isFormatChar):
2463         (WTF::Unicode::isPrintableChar):
2464         (WTF::Unicode::isSeparatorSpace):
2465         (WTF::Unicode::isPunct):
2466         (WTF::Unicode::isDigit):
2467         (WTF::Unicode::isLower):
2468         (WTF::Unicode::isUpper):
2469         (WTF::Unicode::digitValue):
2470         (WTF::Unicode::mirroredChar):
2471         (WTF::Unicode::combiningClass):
2472         (WTF::Unicode::decompositionType):
2473         (WTF::Unicode::umemcasecmp):
2474         (WTF::Unicode::direction):
2475         (WTF::Unicode::category):
2476
2477 2007-01-09  Darin Adler  <darin@apple.com>
2478
2479         - update 2007 Apple copyright for the new company name
2480
2481         * kjs/DateMath.cpp:
2482
2483 2007-01-09  Darin Adler  <darin@apple.com>
2484
2485         - fix build
2486
2487         * kjs/string_object.cpp: (KJS::StringProtoFunc::callAsFunction):
2488         Actually compile it this time.
2489
2490 2007-01-09  Darin Adler  <darin@apple.com>
2491
2492         - fix build
2493
2494         * kjs/string_object.cpp: (KJS::StringProtoFunc::callAsFunction):
2495         Change types.
2496
2497 2007-01-09  Darin Adler  <darin@apple.com>
2498
2499         - fix build on platforms where Unicode::UChar is != uint16_t
2500
2501         * kjs/string_object.cpp: (KJS::StringProtoFunc::callAsFunction):
2502         Change types.
2503
2504 2007-01-09  Mitz Pettel  <mitz@webkit.org>
2505
2506         Reviewed by Darin.
2507
2508         - changes for http://bugs.webkit.org/show_bug.cgi?id=11078
2509           Forms Don't Submit (ASP Pages)
2510
2511         * JavaScriptCore.exp:
2512         * kjs/value.cpp:
2513         (KJS::JSValue::toInt32): Folded toInt32Inline into this method, which was its
2514         only caller.
2515         (KJS::JSValue::toUInt32): Added a variant that reports if the conversion has
2516         succeeded.
2517         * kjs/value.h:
2518
2519 2007-01-09  Darin Adler  <darin@apple.com>
2520
2521         Reviewed by Maciej.
2522
2523         - fix http://bugs.webkit.org/show_bug.cgi?id=12174
2524           improve Unicode use (less WTF::Unicode:: prefix, centralized character names)
2525
2526         * wtf/unicode/icu/UnicodeIcu.h: Change parameter and return types
2527         to UChar32 and UChar. Removed unneeded type casts and added some
2528         const to functions that lacked it. Removed WTF::Unicode::memcmp.
2529         (WTF::Unicode::umemcasecmp): Renamed from strcasecmp since this
2530         doesn't work on 0-terminated strings as the str functions do.
2531         * wtf/unicode/qt4/UnicodeQt4.h: Ditto.
2532
2533         - got rid of namespace prefixes from most uses of WTF::Unicode
2534
2535         * kjs/function.cpp:
2536         (KJS::isStrWhiteSpace):
2537         (KJS::escapeStringForPrettyPrinting):
2538         * kjs/lexer.cpp:
2539         (KJS::Lexer::isWhiteSpace):
2540         (KJS::Lexer::isIdentStart):
2541         (KJS::Lexer::isIdentPart):
2542         * kjs/string_object.cpp:
2543         (KJS::StringProtoFunc::callAsFunction):
2544
2545 2007-01-07  David Kilzer  <ddkilzer@webkit.org>
2546
2547         Reviewed by Darin.
2548
2549         - fix http://bugs.webkit.org/show_bug.cgi?id=11917
2550           setlocale() can return null
2551
2552         * kjs/date_object.cpp:
2553         (KJS::DateProtoFunc::callAsFunction): Removed dead code.
2554
2555 2007-01-07  David Carson  <dacarson@gmail.com>
2556
2557         Reviewed by Darin.
2558
2559         - fix http://bugs.webkit.org/show_bug.cgi?id=12100
2560           JNI bindings should be available to non-Mac platforms that have JNI
2561
2562         Change JNI so that it is not wrapped in the PLATFORM(MAC) ifdef, enabling
2563         other platforms who have JNI to use it.
2564
2565         * bindings/jni/jni_instance.h:  
2566           Removed unnecessary include of <CoreFoundation/CoreFoundation.h>
2567         * bindings/jni/jni_utility.cpp:
2568         (KJS::Bindings::setJavaVM):
2569         * bindings/jni/jni_utility.h:
2570           Added new method for clients to set the JavaVM
2571         * bindings/runtime.cpp:
2572         (KJS::Bindings::Instance::createBindingForLanguageInstance):
2573           Changed code to utilize new #if HAVE(JNI)
2574         * kjs/config.h:
2575           Added new #define for JNI, ie HAVE_JNI
2576
2577 2007-01-07  David Carson  <dacarson@gmail.com>
2578
2579         Reviewed by Darin.
2580
2581         Fix http://bugs.webkit.org/show_bug.cgi?id=11431
2582         ARM platform has some byte alignment issues
2583
2584         Fix for NaN being 4 bytes and it must start on a byte boundary
2585         for ARM architectures.
2586
2587         * kjs/fpconst.cpp:
2588         (KJS::):
2589
2590 2007-01-04  David Kilzer  <ddkilzer@webkit.org>
2591
2592         Reviewed by Kevin McCullough.
2593
2594         - fix http://bugs.webkit.org/show_bug.cgi?id=12070
2595           REGRESSION: KJS::getUTCOffset() caches UTC offset but ignores time zone changes
2596
2597         * kjs/DateMath.cpp:
2598         (KJS::getUTCOffset): Don't cache UTC offset.
2599
2600 2007-01-02  Darin Adler  <darin@apple.com>
2601
2602         - minor tweak (hope this doesn't re-break Windows)
2603
2604         * pcre/pcre_compile.c: Removed use of const pcre_uchar const * -- Mitz probably
2605         meant const pcre_uchar *const, but I think we can do without the explicit const here.
2606
2607         * pcre/pcre_internal.h: Re-enabled warning C4114.
2608
2609 2007-01-02  David Kilzer  <ddkilzer@webkit.org>
2610
2611         Reviewed by NOBODY (Windows build fix).
2612
2613         The MSVC compiler requires variables to be declared at the top of the enclosing block in C source.
2614
2615         Disable this warning to prevent MSVC from complaining about the 'const pcre_uchar const *' type:
2616         warning C4114: same type qualifier used more than once
2617
2618         * pcre/pcre_compile.c:
2619         (pcre_compile2): Moved variable declarations to top of their respective enclosing blocks.
2620         * pcre/pcre_internal.h: Added pragma to disable compiler warning.
2621
2622 2007-01-01  Mitz Pettel  <mitz@webkit.org>
2623
2624         Reviewed by Darin.
2625
2626         - fix http://bugs.webkit.org/show_bug.cgi?id=11849
2627           REGRESSION (r18182): Google Calendar is broken (a regular expression containing a null character is not parsed correctly)
2628
2629         Modified pcre_compile() (and the functions that it calls) to work with patterns
2630         containing null characters.
2631
2632         Covered by JavaScriptCore tests ecma_3/RegExp/octal-002.js and ecma_3/RegExp/regress-85721.js
2633
2634         * kjs/regexp.cpp:
2635         (KJS::RegExp::RegExp): Changed to not null-terminate the pattern string and instead
2636         pass its length to pcre_compile.
2637         * pcre/pcre.h:
2638         * pcre/pcre_compile.c:
2639         (check_escape):
2640         (get_ucp):
2641         (is_counted_repeat):
2642         (check_posix_syntax):
2643         (compile_branch):
2644         (compile_regex):
2645         (pcre_compile): Added a parameter specifying the length of the pattern, which
2646         is no longer required to be null-terminated and may contain null characters. 
2647         (pcre_compile2):
2648         * pcre/pcre_internal.h:
2649         * tests/mozilla/expected.html: Updated for the two tests that this patch
2650         fixes. Also updated failing results for ecma_3/RegExp/regress-100199.js
2651         which were not updated after bug 6257 was fixed.
2652
2653 2007-01-01  David Kilzer  <ddkilzer@webkit.org>
2654
2655         Reviewed by Darin.
2656
2657         - fix http://bugs.webkit.org/show_bug.cgi?id=12057
2658           REGRESSION: JavaScript Date Is One Day In The Future in GMT time zone
2659
2660         Because Mac OS X returns geographically and historically accurate time zone information,
2661         converting Jan 02, 1970 12:00:00 AM to local time then subtracting 24 hours did not work
2662         in GMT (London - England) since it was in BST (+0100) all year in 1970[1].  Instead, the
2663         UTC offset is calculated by converting Jan 01, 2000 12:00:00 AM to local time then
2664         subtracting that from the same date in UTC.
2665
2666         [1] http://en.wikipedia.org/wiki/British_Summer_Time
2667
2668         * kjs/DateMath.cpp:
2669         (KJS::getUTCOffset): Updated UTC offset calculation.
2670         (KJS::getDSTOffset): Improved comment.
2671
2672 2006-12-31  David Kilzer  <ddkilzer@webkit.org>
2673
2674         Reviewed by Geoff.
2675
2676         Update embedded pcre library from version 6.2 to 6.4.  Changes from pcre 6.2 to 6.3
2677         did not include any files in JavaScriptCore/pcre.
2678
2679         All changes include renaming EXPORT to PCRE_EXPORT, renaming of ucp_findchar() to
2680         _pcre_ucp_findchar(), or comment changes.  Additional changes noted below.
2681
2682         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Updated source file list.
2683         * JavaScriptCore.xcodeproj/project.pbxproj: Renamed pcre_printint.c to pcre_printint.src
2684         and changed it from a source file to a header file.
2685         * JavaScriptCoreSources.bkl: Updated source file list.
2686         * pcre/CMakeLists.txt: Updated source file list.
2687         * pcre/pcre-config.h:
2688         * pcre/pcre.h: Updated version.
2689         * pcre/pcre.pri: Updated source file list.
2690         * pcre/pcre_compile.c: Include pcre_printint.src #if DEBUG.
2691         (pcre_compile2):
2692         * pcre/pcre_config.c:
2693         * pcre/pcre_exec.c:
2694         (match):
2695         * pcre/pcre_fullinfo.c:
2696         * pcre/pcre_info.c:
2697         * pcre/pcre_internal.h: Added header guard.  Removed export of _pcre_printint().
2698         * pcre/pcre_ord2utf8.c:
2699         * pcre/pcre_printint.c: Renamed to pcre_printint.src.
2700         * pcre/pcre_printint.src: Added.  Renamed _pcre_printint() to pcre_printint().
2701         * pcre/pcre_refcount.c:
2702         * pcre/pcre_study.c:
2703         * pcre/pcre_tables.c:
2704         * pcre/pcre_try_flipped.c:
2705         * pcre/pcre_ucp_findchar.c: Added contents of ucp_findchar.c.
2706         * pcre/pcre_version.c:
2707         * pcre/pcre_xclass.c:
2708         (_pcre_xclass):
2709         * pcre/ucp.h: Removed export of ucp_findchar().
2710         * pcre/ucp_findchar.c: Removed.  Contents moved to pcre_ucp_findchar.c.
2711
2712 2006-12-29  David Kilzer  <ddkilzer@webkit.org>
2713
2714         Reviewed by Geoff.
2715
2716         Update embedded pcre library from version 6.1 to 6.2.  From the pcre ChangeLog:
2717
2718         3. Added "b" to the 2nd argument of fopen() in dftables.c, for non-Unix-like
2719            operating environments where this matters.
2720
2721         5. Named capturing subpatterns were not being correctly counted when a pattern
2722            was compiled. This caused two problems: (a) If there were more than 100
2723            such subpatterns, the calculation of the memory needed for the whole
2724            compiled pattern went wrong, leading to an overflow error. (b) Numerical
2725            back references of the form \12, where the number was greater than 9, were
2726            not recognized as back references, even though there were sufficient
2727            previous subpatterns.
2728
2729         * pcre/dftables.c: Item 3.
2730         (main):
2731         * pcre/pcre.h: Updated version.
2732         * pcre/pcre_compile.c: Item 5.
2733         (read_repeat_counts):
2734         (pcre_compile2):
2735
2736 2006-12-29  Geoffrey Garen  <ggaren@apple.com>
2737
2738         Reviewed by Brian Dash... err... Mark Rowe.
2739
2740         More cleanup in preparation for fixing <rdar://problem/4608404> 
2741         WebScriptObject's _executionContext lack of ownership policy causes 
2742         crashes (e.g., in Dashcode)
2743         
2744         The key change here is to RootObject::RootObject().
2745         
2746         * JavaScriptCore.exp:
2747
2748         * bindings/c/c_utility.cpp:
2749         (KJS::Bindings::convertValueToNPVariant): Changed to use new constructor.
2750
2751         * bindings/jni/jni_jsobject.cpp:
2752         (JavaJSObject::createNative): Changed to use new constructor. Replaced
2753         large 'if' followed by default condition with "if !" and explicit default
2754         condition.
2755
2756         * bindings/objc/objc_runtime.mm:
2757         (convertValueToObjcObject): Changed to use new constructor.
2758
2759         * bindings/runtime_root.cpp:
2760         (KJS::Bindings::RootObject::destroy): "removeAllNativeReferences" => "destroy"
2761         because this function actually destroys the RootObject.
2762
2763         * bindings/runtime_root.h: Changed Interpreter* to RefPtr<Interpreter>
2764         to prevent a RootObject from holding a stale Interperter*.
2765         
2766         (KJS::Bindings::RootObject::RootObject): Changed constructor to take an 
2767         Interpreter*, since it's pointless to create a RootObject without one.
2768         Removed setRootObjectImp() and rootObjectImp() because they were just
2769         a confusing way of setting and getting the Interpreter's global object.
2770
2771         (KJS::Bindings::RootObject::nativeHandle): "_nativeHandle" => "m_nativeHandle"
2772         (KJS::Bindings::RootObject::interpreter): "_interpreter" => "m_interpreter"
2773
2774 2006-12-28  George Staikos  <staikos@kde.org>
2775
2776         Reviewed by Olliej.
2777
2778         * bindings/qt/qt_instance.cpp: build
2779         (KJS::Bindings::QtInstance::QtInstance):
2780
2781 2006-12-28  Geoffrey Garen  <ggaren@apple.com>
2782
2783         Reviewed by Oliver Hunt.
2784         
2785         More cleanup. Layout tests pass.
2786         
2787         Use a helper function to initialize and access WebUndefined and WebScriptObject.
2788
2789         * bindings/objc/objc_runtime.h:
2790         * bindings/objc/objc_runtime.mm:
2791         (KJS::Bindings::webScriptObjectClass):
2792         (KJS::Bindings::webUndefinedClass):
2793         (convertValueToObjcObject):
2794         * bindings/objc/objc_utility.mm:
2795         (KJS::Bindings::convertValueToObjcValue):
2796         (KJS::Bindings::convertObjcValueToValue):
2797
2798 2006-12-28  Geoffrey Garen  <ggaren@apple.com>
2799
2800         Reviewed by Brady Eidson.
2801         
2802         Some cleanup in preparation for fixing <rdar://problem/4608404> 
2803         WebScriptObject's _executionContext lack of ownership policy causes 
2804         crashes (e.g., in Dashcode)
2805         
2806         I'm just trying to make heads or tails of this baffling code.
2807         
2808         Renamed "root" | "execContext" | "executionContext" => "rootObject", because
2809         that's the object's (admittedly vague) type name.
2810         
2811         * bindings/runtime.cpp: Removed createLanguageInstanceForValue
2812         because I'll give you a dollar if you can explain to me what it actually did.
2813         
2814         * bindings/runtime_root.cpp: Put everything in the KJS::Bindings namespace,
2815         removing the KJS::Bindings prefix from individual functions and datatypes.
2816         This matches the header and eliminates a lot of syntax cruft.
2817         
2818         * bindings/c/c_utility.cpp:
2819         (KJS::Bindings::convertValueToNPVariant): Replaced use of createLanguageInstanceForValue
2820         with call to _NPN_CreateScriptObject because that's what createLanguageInstanceForValue
2821         actually did (but don't ask me for that dollar now; that's cheating.)
2822
2823         * bindings/objc/objc_utility.h:
2824         * bindings/objc/objc_utility.mm:
2825         (KJS::Bindings::convertValueToObjcValue): Removed. Its only purpose was 
2826         to call a single function for WebKit, which WebKit can do on its own.
2827
2828         * kjs/interpreter.h: Removed rtti() because it was unused, and this class
2829         is scheduled for demolition anyway.
2830         
2831         * kjs/interpreter.cpp: Removed createLanguageInstanceForValue because it had
2832         nothing to do with the Interpreter, and nothing makes Chuck Norris more mad
2833         than a function whose sole purpose is to call another function of the same
2834         name. (Really, I asked him.)
2835
2836 2006-12-26  Geoffrey Garen  <ggaren@apple.com>
2837
2838         Reviewed by Eric Seidel.
2839
2840         Some cleanup in preparation for fixing <rdar://problem/4740328> Safari 
2841         crash on quit in _NPN_ReleaseObject from KJS::Bindings::CInstance::~CInstance
2842
2843         * bindings/c/c_instance.cpp:
2844         * bindings/c/c_instance.h: Removed unused copy constructor and assignment
2845         operator. They made tracking data flow more difficult. Unused code is also 
2846         dangerous because it can succumb to bit rot with the stealth of a Ninja.
2847         
2848         Replaced #include with forward declaration to reduce header dependency.
2849         
2850         * bindings/npruntime.cpp: Sorted #includes.
2851         (_NPN_GetStringIdentifier): Replaced assert with ASSERT.
2852         (_NPN_GetStringIdentifiers): ditto
2853         (_NPN_ReleaseVariantValue): ditto
2854         (_NPN_CreateObject): ditto
2855         (_NPN_RetainObject): ditto
2856         (_NPN_ReleaseObject): ditto
2857         (_NPN_DeallocateObject): ditto
2858
2859 2006-12-20  Anders Carlsson  <acarlsson@apple.com>
2860
2861         * kjs/string_object.cpp:
2862         (localeCompare):
2863         Another speculative Win32 fix.
2864
2865 2006-12-20  Anders Carlsson  <acarlsson@apple.com>
2866
2867         * kjs/string_object.cpp:
2868         (localeCompare):
2869         Speculative Win32 fix.
2870
2871 2006-12-20  Anders Carlsson  <acarlsson@apple.com>
2872
2873         Reviewed by Darin.
2874
2875         <rdar://problem/4235733>
2876         <http://bugs.webkit.org/?show_bug.cgi?id=10193>
2877         support String.localeCompare.
2878         
2879         Implement localeCompare.
2880         
2881         * JavaScriptCore.xcodeproj/project.pbxproj:
2882         * kjs/string_object.cpp:
2883         (localeCompare):
2884         (StringProtoFunc::callAsFunction):
2885         * kjs/string_object.h:
2886         (KJS::StringProtoFunc::):
2887
2888 2006-12-20  Timothy Hatcher  <timothy@apple.com>
2889
2890         Reviewed by Mark Rowe.
2891
2892         * JavaScriptCore.xcodeproj/project.pbxproj: use GCC 4.0 for all the other test targets
2893
2894 2006-12-20  Timothy Hatcher  <timothy@apple.com>
2895
2896         Reviewed by Mark Rowe.
2897
2898         <rdar://problem/4871613> JavaScriptCore-421.31's dftables target needs to override default compiler and use gcc-4.0
2899
2900         * JavaScriptCore.xcodeproj/project.pbxproj:
2901
2902 2006-12-20  Lars Knoll <lars@trolltech.com>
2903
2904         Reviewed by David Hyatt
2905
2906         Added support to bind QObject's to 
2907         JavaScript.
2908
2909         * JavaScriptCore.pro:
2910         * bindings/qt/qt_class.cpp: Added.
2911         (KJS::Bindings::QtClass::QtClass):
2912         (KJS::Bindings::QtClass::~QtClass):
2913         (KJS::Bindings::QtClass::classForObject):
2914         (KJS::Bindings::QtClass::name):
2915         (KJS::Bindings::QtClass::methodsNamed):
2916         (KJS::Bindings::QtClass::fieldNamed):
2917         * bindings/qt/qt_class.h: Added.
2918         (KJS::Bindings::QtClass::constructorAt):
2919         (KJS::Bindings::QtClass::numConstructors):
2920         * bindings/qt/qt_instance.cpp: Added.
2921         (KJS::Bindings::QtInstance::QtInstance):
2922         (KJS::Bindings::QtInstance::~QtInstance):
2923         (KJS::Bindings::QtInstance::operator=):
2924         (KJS::Bindings::QtInstance::getClass):
2925         (KJS::Bindings::QtInstance::begin):
2926         (KJS::Bindings::QtInstance::end):
2927         (KJS::Bindings::QtInstance::implementsCall):
2928         (KJS::Bindings::QtInstance::invokeMethod):
2929         (KJS::Bindings::QtInstance::invokeDefaultMethod):
2930         (KJS::Bindings::QtInstance::defaultValue):
2931         (KJS::Bindings::QtInstance::stringValue):
2932         (KJS::Bindings::QtInstance::numberValue):
2933         (KJS::Bindings::QtInstance::booleanValue):
2934         (KJS::Bindings::QtInstance::valueOf):
2935         * bindings/qt/qt_instance.h: Added.
2936         (KJS::Bindings::QtInstance::getObject):
2937         * bindings/qt/qt_runtime.cpp: Added.
2938         (KJS::Bindings::convertValueToQVariant):
2939         (KJS::Bindings::convertQVariantToValue):
2940         (KJS::Bindings::QtField::name):
2941         (KJS::Bindings::QtField::valueFromInstance):
2942         (KJS::Bindings::QtField::setValueToInstance):
2943         * bindings/qt/qt_runtime.h: Added.
2944         (KJS::Bindings::QtField::QtField):
2945         (KJS::Bindings::QtField::type):
2946         (KJS::Bindings::QtMethod::QtMethod):
2947         (KJS::Bindings::QtMethod::name):
2948         (KJS::Bindings::QtMethod::numParameters):
2949         * bindings/runtime.cpp:
2950         (KJS::Bindings::Instance::createBindingForLanguageInstance):
2951         * bindings/runtime.h:
2952         (KJS::Bindings::Instance::):
2953         * bindings/testbindings.pro: Added.
2954         * bindings/testqtbindings.cpp: Added.
2955         (MyObject::MyObject):
2956         (MyObject::setTestString):
2957         (MyObject::setTestInt):
2958         (MyObject::testString):
2959         (MyObject::testInt):
2960         (MyObject::foo):
2961         (Global::className):
2962         (main):
2963
2964 2006-12-19  Anders Carlsson  <acarlsson@apple.com>
2965
2966         Reviewed by Geoff.
2967
2968         Add -p option to testkjs which pretty prints the files instead of executing them.
2969
2970         * JavaScriptCore.exp:
2971         * JavaScriptCore.xcodeproj/project.pbxproj:
2972         * kjs/Parser.cpp:
2973         (KJS::Parser::prettyPrint):
2974         * kjs/Parser.h:
2975         * kjs/testkjs.cpp:
2976         (doIt):
2977
2978 2006-12-19  Brady Eidson  <beidson@apple.com>
2979
2980         Rubberstamped by Lou
2981         
2982         Removed unneccessary "else"
2983
2984         * wtf/Assertions.cpp:
2985
2986 2006-12-19  Timothy Hatcher  <timothy@apple.com>
2987
2988         Reviewed by Darin.
2989
2990         <rdar://problem/4891774> Local WebCore/WebBrowser builds fail in 9A328 due to warning about ObjC-2.0 language features
2991
2992         * JavaScriptCore.xcodeproj/project.pbxproj:
2993
2994 2006-12-17  Simon Hausmann  <hausmann@kde.org>
2995
2996         Reviewed by Zack.
2997
2998         * kjs/testkjs.pro: Oops, make it also build on machines other than
2999         mine :)
3000
3001 2006-12-17  Simon Hausmann  <hausmann@kde.org>
3002
3003         Reviewed by Rob Buis.
3004
3005         * kjs/testkjs.pro: Added .pro file to build testkjs.
3006
3007 2006-12-16  Alexey Proskuryakov  <ap@webkit.org>
3008
3009         Reviewed by Rob.
3010
3011         A deleted object was accessed to prepare RegExp construction error messages.
3012
3013         * kjs/regexp_object.cpp:
3014         (RegExpObjectImp::construct): Wrap the RegExp into an OwnPtr.
3015
3016 2006-12-16  Mitz Pettel  <mitz@webkit.org>
3017
3018         Reviewed by Alexey.
3019
3020         - fix http://bugs.webkit.org/show_bug.cgi?id=11814
3021           REGRESSION(r18098): Find does not work with capital letters
3022
3023         Test: editing/execCommand/findString-3.html
3024
3025         * wtf/unicode/icu/UnicodeIcu.h:
3026         (WTF::Unicode::foldCase): Changed to not return an error if the result fits
3027         in the buffer without a null terminator.
3028
3029 2006-12-13  Maciej Stachowiak  <mjs@apple.com>
3030
3031         Reviewed by Anders.
3032         
3033         - added equality and inequality operations for HashMap and Vector, useful for comparing more complex types
3034
3035         * wtf/HashMap.h:
3036         (WTF::operator==):
3037         (WTF::operator!=):
3038         * wtf/Vector.h:
3039         (WTF::operator==):
3040         (WTF::operator!=):
3041
3042 2006-12-12  Alexey Proskuryakov  <ap@webkit.org>
3043
3044         Reviewed by Geoff. Based on a patch by Maks Orlovich.
3045
3046         http://bugs.webkit.org/show_bug.cgi?id=6257
3047         Throw errors on invalid expressions (KJS merge)
3048
3049         * kjs/regexp.cpp:
3050         (KJS::RegExp::RegExp):
3051         (KJS::RegExp::~RegExp):
3052         (KJS::RegExp::match):
3053         * kjs/regexp.h:
3054         (KJS::RegExp::flags):
3055         (KJS::RegExp::isValid):
3056         (KJS::RegExp::errorMessage):
3057         (KJS::RegExp::subPatterns):
3058         Remember and report RegExp construction failures. Renamed data members not to start with underscores.
3059
3060         * kjs/regexp_object.cpp:
3061         (RegExpObjectImp::construct): Raise an exception if RegExp construction fails.
3062         (RegExpObjectImp::callAsFunction): Removed an obsolete comment.
3063
3064         * tests/mozilla/ecma_3/RegExp/regress-119909.js: Reduced the number of nested parentheses to 
3065         a value supported by PCRE.
3066
3067 2006-12-11  Alexey Proskuryakov  <ap@webkit.org>
3068
3069         Reviewed by Darin.
3070
3071         http://bugs.webkit.org/show_bug.cgi?id=9673
3072         Add support for window.atob() and window.btoa()
3073
3074         * JavaScriptCore.exp: Export UString::is8Bit().
3075         * JavaScriptCore.xcodeproj/project.pbxproj: Added StringExtras.h as 
3076         a private header.
3077
3078 2006-12-11  Darin Adler  <darin@apple.com>
3079
3080         Reviewed by Brady.
3081
3082         * JavaScriptCore.xcodeproj/project.pbxproj: Let Xcode update this
3083         (I think Hyatt is using an old Xcode).
3084
3085 2006-12-11  David Hyatt  <hyatt@apple.com>
3086
3087         Fix the failing layout test.  Just remove Unicode::isSpace and
3088         revert StringImpl to do the same thing it was doing before.
3089
3090         Reviewed by darin
3091
3092         * wtf/unicode/icu/UnicodeIcu.h:
3093         * wtf/unicode/qt4/UnicodeQt4.h:
3094
3095 2006-12-09  George Staikos  <staikos@kde.org>
3096
3097         Reviewed by Zack.
3098
3099         Fix bison again on qmake build.
3100
3101         * JavaScriptCore.pro:
3102
3103 2006-12-09  Lars Knoll <lars@trolltech.com>
3104
3105         Reviewed by Zack
3106
3107         Make it possible to build WebKit with qmake.
3108
3109         * JavaScriptCore.pro: Added.
3110         * kjs/kjs.pro: Removed.
3111         * pcre/pcre.pri: Added.
3112
3113 2006-12-09  Zack Rusin  <zack@kde.org>
3114
3115         Fixing the compilation with platform kde after the icu changes.
3116
3117         * CMakeLists.txt:
3118
3119 2006-12-09  Adam Roben  <aroben@apple.com>
3120
3121         Reviewed by Darin.
3122
3123         Some updates in reaction to r18098.
3124
3125         * wtf/unicode/icu/UnicodeIcu.h: Use !! to convert UBool to bool in all
3126         cases.
3127         (WTF::Unicode::toLower):
3128         (WTF::Unicode::toUpper):
3129         (WTF::Unicode::isDigit):
3130         (WTF::Unicode::isSpace):
3131         (WTF::Unicode::isPunct):
3132         (WTF::Unicode::isLower):
3133         (WTF::Unicode::isUpper):
3134         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
3135         * JavaScriptCore.vcproj/WTF/WTF.vcproj:
3136
3137 2006-12-09  George Staikos  <staikos@kde.org>
3138
3139         Patch by Lars Knoll, comment out ICU dependency on Qt platform (unused code).
3140
3141         Reviewed by Darin.
3142
3143         * bindings/c/c_utility.cpp:
3144         (KJS::Bindings::convertUTF8ToUTF16):
3145
3146 2006-12-08  David Hyatt  <hyatt@apple.com>
3147
3148         Land the new ICU abstraction layer.  Patch by Lars.
3149
3150         Reviewed by me
3151
3152         * JavaScriptCore.xcodeproj/project.pbxproj:
3153         * wtf/Platform.h:
3154         * wtf/unicode/UnicodeCategory.h: Removed.
3155         * wtf/unicode/UnicodeDecomposition.h: Removed.
3156         * wtf/unicode/UnicodeDirection.h: Removed.
3157         * wtf/unicode/icu/UnicodeIcu.h:
3158         (WTF::Unicode::):
3159         (WTF::Unicode::foldCase):
3160         (WTF::Unicode::toLower):
3161         (WTF::Unicode::toUpper):
3162         (WTF::Unicode::toTitleCase):
3163         (WTF::Unicode::isDigit):
3164         (WTF::Unicode::isSpace):
3165         (WTF::Unicode::isPunct):
3166         (WTF::Unicode::mirroredChar):
3167         (WTF::Unicode::category):
3168         (WTF::Unicode::direction):
3169         (WTF::Unicode::isLower):
3170         (WTF::Unicode::isUpper):
3171         (WTF::Unicode::digitValue):
3172         (WTF::Unicode::combiningClass):
3173         (WTF::Unicode::decompositionType):
3174         (WTF::Unicode::strcasecmp):
3175         (WTF::Unicode::memset):
3176         * wtf/unicode/qt4/UnicodeQt4.cpp: Removed.
3177         * wtf/unicode/qt4/UnicodeQt4.h:
3178         (WTF::Unicode::):
3179         (WTF::Unicode::toLower):
3180         (WTF::Unicode::toUpper):
3181         (WTF::Unicode::toTitleCase):
3182         (WTF::Unicode::foldCase):
3183         (WTF::Unicode::isPrintableChar):
3184         (WTF::Unicode::isLower):
3185         (WTF::Unicode::isUpper):
3186         (WTF::Unicode::digitValue):
3187         (WTF::Unicode::combiningClass):
3188         (WTF::Unicode::decompositionType):
3189         (WTF::Unicode::strcasecmp):
3190         (WTF::Unicode::memset):
3191         (WTF::Unicode::direction):
3192         (WTF::Unicode::category):
3193
3194 === Safari-521.32 ===
3195
3196 2006-12-08  Adam Roben  <aroben@apple.com>
3197
3198         Reviewed by Anders.
3199
3200         This is a mo' better fix for ensuring we don't use macro definitions
3201         of min/max.
3202
3203         * kjs/config.h:
3204         * wtf/Vector.h:
3205
3206 2006-12-07  Kevin Fyure  <digdog@macports.org>
3207
3208         Reviewed by Darin.
3209
3210         http://bugs.webkit.org/show_bug.cgi?id=11545
3211         Disable the testcases do not follow the ECMA-262v3 specification.
3212         
3213         * tests/mozilla/expected.html: Update Results.
3214         * tests/mozilla/js1_2/String/concat.js:
3215         4 tests disabled. The result of concat Array object is not followinig
3216         ECMA 15.5.4.6
3217         * tests/mozilla/js1_2/function/Number.js:
3218         1 test disabled. The result of Array object to Number object conversion 
3219         is not following ECMA 9.3. And the test was duplicated in 
3220         ecma/TypeConversion/9.3-1.js
3221         * tests/mozilla/js1_2/function/String.js:
3222         2 tests disabled. The result of Object/Array object to String object 
3223         conversion is not following ECMA 15.5.1.1 and ECMA 9.8
3224
3225 2006-11-30  Steve Falkenburg  <sfalken@apple.com>
3226
3227         Reviewed by Oliver.
3228         
3229         Move WTF from JavaScriptCore project into a new WTF project.
3230
3231         * JavaScriptCore.vcproj/JavaScriptCore.sln: Add WTF.vcproj to sln
3232         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Remove WTF source files
3233         * JavaScriptCore.vcproj/WTF/WTF.vcproj: Added.
3234         * JavaScriptCore.vcproj/testkjs/testkjs.vcproj: Add dependency on WTF.lib
3235
3236 2006-11-30  Geoffrey Garen  <ggaren@apple.com>
3237
3238         Reviewed by Beth Dakin.
3239         
3240         Fixed up garbage collection at window close time.
3241
3242         * kjs/interpreter.cpp:
3243         (KJS::Interpreter::~Interpreter): Garbage collect here, since
3244         destroying the interpreter frees the global object and 
3245         therefore creates a lot of garbage.
3246
3247 2006-11-20  W. Andy Carrel  <wac@google.com>
3248
3249         Reviewed by Maciej.
3250
3251         http://bugs.webkit.org/show_bug.cgi?id=11501
3252         REGRESSION: \u no longer escapes metacharacters in RegExps
3253         http://bugs.webkit.org/show_bug.cgi?id=11502
3254         Serializing RegExps doesn't preserve Unicode escapes
3255
3256         * kjs/lexer.cpp:
3257         (Lexer::Lexer):
3258         (Lexer::setCode):
3259         (Lexer::shift):
3260         (Lexer::scanRegExp):
3261         Push \u parsing back down into the RegExp object rather than in the
3262         parser. This backs out r17354 in favor of a new fix that better 
3263         matches the behavior of other browsers.
3264
3265         * kjs/lexer.h:
3266         * kjs/regexp.cpp:
3267         (KJS::RegExp::RegExp):
3268         (KJS::sanitizePattern):
3269         (KJS::isHexDigit):
3270         (KJS::convertHex):
3271         (KJS::convertUnicode):
3272         * kjs/regexp.h:
3273         Translate \u escaped unicode characters for the benefit of pcre.
3274
3275         * kjs/ustring.cpp:
3276         (KJS::UString::append):
3277         Fix failure to increment length on the first UChar appended to a 
3278         UString that was copy-on-write.
3279
3280         * tests/mozilla/ecma_2/RegExp/properties-001.js:
3281         Adjust tests back to the uniform standards.
3282
3283 2006-11-20  Samuel Weinig  <sam@webkit.org>
3284
3285         Reviewed by Maciej.
3286
3287         Fix for http://bugs.webkit.org/show_bug.cgi?id=11647
3288         Fix Win32 build
3289
3290         * kjs/config.h: define NOMINMAX instead of min/max
3291         as themselves.
3292         * wtf/Vector.h: put back hack to ensure that min/max
3293         are not defined as macros.
3294
3295 2006-11-19  Simon Hausmann  <hausmann@kde.org>
3296
3297         Reviewed by Zack.
3298
3299         http://bugs.webkit.org/show_bug.cgi?id=11649
3300         Fix CMake Qt-only build without KDE CMake files
3301
3302         * CMakeLists.txt:
3303         * pcre/CMakeLists.txt:
3304
3305 2006-11-17  Anders Carlsson  <acarlsson@apple.com>
3306
3307         Reviewed by Adam.
3308
3309         Make sure that we always use std::min and std::max instead of macros.
3310         
3311         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
3312         * kjs/config.h:
3313         * wtf/Vector.h:
3314
3315 === Safari-521.31 ===
3316
3317 2006-11-12  Geoffrey Garen  <ggaren@apple.com>
3318
3319         Reviewed by Beth Dakin.
3320         
3321         Added project-wide setting to disable Microsoft's made-up deprecation 
3322         warnings related to std:: functions. (Doesn't have any affect yet,
3323         since we currently disable all deprecation warnings.)
3324
3325         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
3326
3327 2006-11-12  Mark Rowe  <bdash@webkit.org>
3328
3329         Reviewed by Mitz.
3330
3331         Clean up of JavaScriptCore bakefiles.
3332
3333         * JavaScriptCoreSources.bkl:
3334         * jscore.bkl:
3335
3336 2006-11-11  Alexey Proskuryakov  <ap@webkit.org>
3337
3338         Reviewed by Maciej.
3339
3340         http://bugs.webkit.org/show_bug.cgi?id=11508
3341         Undisable some warnings for JSImmediate.h
3342
3343         Fix suggested by Don Gibson.
3344
3345         * kjs/JSImmediate.h:
3346         Re-enable all MSVC warnings, move the remaining runtime checks
3347         to compile-time.
3348
3349 2006-11-10  Zalan Bujtas  <zalan.bujtas@nokia.com>
3350
3351         Reviewed by Maciej.
3352
3353         Added s60/symbian platform defines.
3354         http://bugs.webkit.org/show_bug.cgi?id=11540
3355
3356         * wtf/Platform.h:
3357
3358 === Safari-521.30 ===
3359
3360 2006-11-08  Ada Chan  <adachan@apple.com>
3361
3362         Reviewed by darin.
3363         
3364         Added a method to delete all the keys in a HashMap.
3365
3366         * wtf/HashMap.h:
3367         (WTF::deleteAllPairFirsts):
3368         (WTF::deleteAllKeys):
3369
3370 2006-11-07  Anders Carlsson  <acarlsson@apple.com>
3371
3372         Reviewed by Geoff.
3373
3374         * API/JSClassRef.cpp:
3375         (OpaqueJSClass::OpaqueJSClass):
3376         Initialize cachedPrototype to 0.
3377
3378 2006-11-06  Krzysztof Kowalczyk  <kkowalczyk@gmail.com>
3379
3380         Reviewed by Maciej.
3381
3382         Remove warning about garbage after #else. #else clause applies for all
3383         non-mac platforms, not only win.
3384
3385         * kjs/date_object.cpp:
3386
3387 2006-11-06  Mark Rowe  <bdash@webkit.org>
3388
3389         Reviewed by the wonderful Mitz Pettel.
3390
3391         http://bugs.webkit.org/show_bug.cgi?id=11524
3392         Bug 11524: REGRESSION(r9842): Array.prototype.join should use ToString operator rather than calling toString on each element
3393
3394         * kjs/array_object.cpp:
3395         (ArrayProtoFunc::callAsFunction): Use ToString operator on each element rather than calling their toString method.
3396
3397 2006-11-03  Steve Falkenburg  <sfalken@apple.com>
3398
3399         Fix build
3400
3401         * kjs/JSImmediate.h:
3402
3403 2006-11-03  Alexey Proskuryakov  <ap@nypop.com>
3404
3405         Reviewed by Darin.
3406
3407         http://bugs.webkit.org/show_bug.cgi?id=11504
3408         Fix warnings on non 32 bit platforms
3409
3410         * kjs/JSImmediate.h:
3411         (KJS::JSImmediate::NanAsBits):
3412         (KJS::JSImmediate::oneAsBits):
3413         Rewrite in a way that moves runtime checks to compile-time.
3414
3415         (KJS::):
3416         (KJS::JSImmediate::fromDouble):
3417         (KJS::JSImmediate::toDouble):
3418
3419 2006-11-02  George Staikos <staikos@kde.org>
3420
3421         Reviewed by Maciej.
3422
3423         * collector.cpp:
3424         Remove a deprecated pthreads call.
3425
3426 2006-11-02  Anders Carlsson  <acarlsson@apple.com>
3427
3428         Reviewed by Maciej, landed by Anders.
3429
3430         * CMakeLists.txt:
3431         Make KDE support optional.
3432
3433 2006-11-01  Kevin McCullough  <KMcCullough@apple.com>
3434
3435         Reviewed by Brady.
3436
3437         - Fixes many JavaScriptCore tests in other timezones.  The root problem is that on mac localtime() returns historically accurate information for DST, but the JavaScript spec explicitly states to not take into account historical information but rather to interpolate from valid years.
3438
3439         * kjs/DateMath.cpp:
3440         (KJS::equivalentYearForDST):
3441         (KJS::getDSTOffsetSimple):
3442         (KJS::getDSTOffset):
3443
3444 2006-10-31  Geoffrey Garen  <ggaren@apple.com>
3445
3446         Reviewed by Beth.
3447         
3448         Fixed http://bugs.webkit.org/show_bug.cgi?id=11477
3449         REGRESSION: GMail crashes in KJS::FunctionImp::callerGetter
3450
3451         * kjs/function.cpp:
3452         (KJS::FunctionImp::argumentsGetter): Removed unnecessary braces.
3453         (KJS::FunctionImp::callerGetter): More logical NULL checking.
3454
3455 2006-10-31  Oliver Hunt  <oliver@apple.com>
3456
3457         Reviewed by Geoff.
3458
3459         Adding definition for PLATFORM(CI)
3460
3461         * wtf/Platform.h:
3462
3463 2006-10-31  Vladimir Olexa  <vladimir.olexa@gmail.com>
3464
3465         Reviewed by Geoff.
3466
3467         http://bugs.webkit.org/show_bug.cgi?id=4166
3468         Function object does not support caller property
3469
3470         Test: fast/js/caller-property.html
3471
3472         * kjs/function.cpp: 
3473         (KJS::FunctionImp::callerGetter): added
3474         (KJS::FunctionImp::getOwnPropertySlot): added if statement to handle callerGetter()
3475         * kjs/function.h: added callerGetter() declaration
3476         * kjs/identifier.h: added caller property macro
3477         * tests/mozilla/expected.html: 
3478
3479 2006-10-30  Kevin McCullough  <KMcCullough@apple.com>
3480
3481         Reviewed by Adam.
3482
3483         - Fix some timezone issues and JavaScriptCore date tests.  Addresses bugzilla 4930.
3484
3485         * kjs/DateMath.h:
3486         (KJS::GregorianDateTime::GregorianDateTime): Here's the fix, to add parenthesis for order of precedence.
3487         * kjs/date_object.cpp:
3488         (KJS::DateProtoFunc::callAsFunction): 
3489         (KJS::DateObjectImp::construct): memset not needed as GregorianDateTime initializes itself.
3490
3491 2006-10-30  Darin Adler  <darin@apple.com>
3492
3493         Reviewed by John Sullivan.
3494
3495         * kjs/SavedBuiltins.h: Added needed include.
3496         * wtf/OwnPtr.h: (WTF::OwnPtr::set): Fixed mistake in assertion.
3497
3498 2006-10-28  Darin Adler  <darin@apple.com>
3499
3500         Reviewed by Maciej.
3501
3502         - renamed PassRefPtr::release to releaseRef to make it clearer that
3503           it's the counterpart of adoptRef, and to make it harder to confuse
3504           it with the safer-to-use RefPtr::release
3505
3506         * kjs/identifier.cpp:
3507         (KJS::CStringTranslator::translate):
3508         (KJS::UCharBufferTranslator::translate):
3509         * kjs/ustring.cpp:
3510         (KJS::UString::Rep::create):
3511         * wtf/PassRefPtr.h:
3512         (WTF::PassRefPtr::PassRefPtr):
3513         (WTF::PassRefPtr::~PassRefPtr):
3514         (WTF::PassRefPtr::get):
3515         (WTF::PassRefPtr::releaseRef):
3516         (WTF::PassRefPtr::operator->):
3517         (WTF::PassRefPtr::operator=):
3518         (WTF::adoptRef):
3519         (WTF::static_pointer_cast):
3520         (WTF::const_pointer_cast):
3521         * wtf/RefPtr.h:
3522         (WTF::RefPtr::RefPtr):
3523         (WTF::RefPtr::operator=):
3524
3525 2006-10-28  Darin Adler  <darin@apple.com>
3526
3527         Reviewed by Steve.
3528
3529         * kjs/grammar.y: Add definitions of YYMALLOC and YYFREE to fix