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