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