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