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