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