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