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