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