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