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