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