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