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