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