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