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