1=== Start merge of feature-branch 2007-10-12 ===
2
32007-10-11  Andrew Wellington  <proton@wiretapped.net>
4
5        Reviewed by Eric Seidel.
6        
7        Fix for http://bugs.webkit.org/show_bug.cgi?id=15076
8        "deg2rad has multiple definitions"
9        
10        Define deg2rad, rad2deg, deg2grad, grad2deg, rad2grad, grad2rad
11        These are used through WebKit.
12        
13        Change based on original patch by Rob Buis.
14
15        * wtf/MathExtras.h:
16        (deg2rad):
17        (rad2deg):
18        (deg2grad):
19        (grad2deg):
20        (rad2grad):
21        (grad2rad):
22
232007-10-10  Maciej Stachowiak  <mjs@apple.com>
24
25        Reviewed by Eric.
26        
27        - fix assertion failures on quit.
28
29        * kjs/array_object.cpp:
30        (ArrayProtoFunc::callAsFunction): Dynamically alocate function-scope static
31        UStrings to avoid the static destructor getting called later.
32        * kjs/lookup.h: Dynamically alocate function-scope static
33        Identifiers to avoid the static destructor getting called later.
34
352007-10-07  Ed Schouten  <ed@fxq.nl>
36
37        Reviewed and landed by Alexey Proskuryakov.
38
39        Add PLATFORM(FREEBSD), so we can fix the build on FreeBSD-like
40        systems by including <pthread_np.h>. Also fix some (disabled)
41        regcomp()/regexec() code; it seems some variable names have
42        changed.
43
44        * kjs/config.h:
45        * kjs/regexp.cpp:
46        (KJS::RegExp::RegExp):
47        * wtf/Platform.h:
48
492007-10-02  Alexey Proskuryakov  <ap@webkit.org>
50
51        Reviewed by Darin.
52
53        http://bugs.webkit.org/show_bug.cgi?id=10370
54        RegExp fails to match non-ASCII characters against [\S\s]
55
56        Test: fast/js/regexp-negative-special-characters.html
57
58        * pcre/pcre_compile.c:
59        (compile_branch): Adjust opcode and bitmap as necessary to include (or exclude)
60        character codes >255. Fix suggested by Philip Hazel.
61
62        * pcre/pcre_exec.c:
63        (match): Merged fix for PCRE bug 580 (\S\S vs. \S{2}).
64
65        * tests/mozilla/expected.html: One test was fixed.
66        * pcre/MERGING: Added information about this fix.
67
682007-10-02  Maciej Stachowiak  <mjs@apple.com>
69
70        Reviewed by Oliver.
71        
72        - skip extra hash lookup and avoid converting char* to UString for 19% speedup on CK JS array test 
73        http://bugs.webkit.org/show_bug.cgi?id=15350
74
75        * kjs/array_object.cpp:
76        (ArrayProtoFunc::callAsFunction): Implement the two mentioned optimizations.
77
782007-10-02  Maciej Stachowiak  <mjs@apple.com>
79
80        Reviewed by Mark.
81        
82        - Efficiently handle regexp property identifiers for 19% speedup on Celtic Kane regexp test
83        http://bugs.webkit.org/show_bug.cgi?id=15337
84
85        * kjs/CommonIdentifiers.h:
86        * kjs/regexp_object.cpp:
87        (RegExpProtoFunc::callAsFunction):
88        (RegExpObjectImp::arrayOfMatches):
89        (RegExpObjectImp::construct):
90
912007-10-02  Maciej Stachowiak  <mjs@apple.com>
92
93        Reviewed by Mark.
94        
95        - Cache global prorotypes more efficiently for 10% speedup on CK AJAX benchmark
96        http://bugs.webkit.org/show_bug.cgi?id=15335
97
98        * kjs/lookup.h:
99
1002007-10-01  Oliver Hunt  <oliver@apple.com>
101
102        Reviewed by Mark.
103
104        Enable Experimental SVG features by default when building from Xcode
105
106        * Configurations/JavaScriptCore.xcconfig:
107
1082007-09-29  Rob Buis  <buis@kde.org>
109
110        Reviewed by Adam.
111
112        http://bugs.webkit.org/show_bug.cgi?id=13472
113        Misparsing date in javascript leads to year value of -1
114        http://bugs.webkit.org/show_bug.cgi?id=14176
115        Some date values not handled consistently with IE/Firefox
116
117        Allow an optional comma between month and year, and year and time.
118
119        * kjs/date_object.cpp:
120        (KJS::parseDate):
121
1222007-07-11  Nikolas Zimmermann  <zimmermann@kde.org>
123
124        Reviewed by Mark.
125
126        Forwardport the hash table fix from CodeGeneratorJS.pm to create_hash_table.
127        Reran run-jsc-tests, couldn't find any regressions. Suggested by Darin.
128
129        * kjs/create_hash_table:
130
1312007-06-25  Antti Koivisto  <antti@apple.com>
132
133        Reviewed by Maciej.
134        
135        Use intHash to hash floats and doubles too.
136
137        * ChangeLog:
138        * wtf/HashFunctions.h:
139        (WTF::FloatHash::hash):
140        (WTF::FloatHash::equal):
141        (WTF::):
142        * wtf/HashTraits.h:
143        (WTF::FloatHashTraits::emptyValue):
144        (WTF::FloatHashTraits::deletedValue):
145        (WTF::):
146
147=== End merge of feature-branch 2007-10-12 ===
148
1492007-10-11  Mark Rowe  <mrowe@apple.com>
150
151        Reviewed by Tim Hatcher.
152
153        Fix for <rdar://problem/5488678>.  Disable debugging symbols in production builds for 10.4
154        PowerPC to prevent a huge STABS section from being generated.
155
156        * Configurations/Base.xcconfig:
157
1582007-10-08  George Staikos  <staikos@kde.org>
159
160        Reviewed by Adam Roben.
161
162        Fix Qt build on Win32.
163
164        * kjs/testkjs.cpp:
165        (main):
166
1672007-10-10  Simon Hausmann  <hausmann@kde.org>
168
169        Reviewed by Lars.
170
171        Fix compilation using gcc 4.3. Header files have been reorganized and as a result some extra
172        includes are needed for INT_MAX, std::auto_ptr and the like.
173
174        * kjs/collector.cpp:
175        * kjs/collector.h:
176        * kjs/lexer.cpp:
177        * kjs/scope_chain.cpp:
178        * kjs/ustring.cpp:
179        * wtf/Vector.h:
180
1812007-10-09  Lars Knoll  <lars@trolltech.com>
182
183        Reviewed by Simon.
184
185        fix the invokation of slots with return types. Add a JSLock around the conversion from QVariant to JSValue.
186
187        * bindings/qt/qt_instance.cpp:
188        (KJS::Bindings::QtInstance::invokeMethod):
189        * bindings/qt/qt_runtime.cpp:
190        (KJS::Bindings::convertValueToQVariant):
191        (KJS::Bindings::convertQVariantToValue):
192
1932007-10-05  Geoffrey Garen  <ggaren@apple.com>
194
195        Reviewed by Sam Weinig.
196        
197        Added JSObject::removeDirect, to support the fix for 
198        <rdar://problem/5522487> REGRESSION: With JavaScript disabled, any 
199        page load causes a crash in PropertyMap::put
200
201        * kjs/object.cpp:
202        (KJS::JSObject::removeDirect):
203        * kjs/object.h:
204
2052007-10-04  Mark Rowe  <mrowe@apple.com>
206
207        Reviewed by Oliver.
208
209        Switch to default level of debugging symbols to resolve <rdar://problem/5488678>.
210        The "full" level appears to offer no observable benefits even though the documentation
211        suggests it be used for dead code stripping.  This should also decrease link times.
212
213        * Configurations/Base.xcconfig:
214
2152007-10-03  Lars Knoll  <lars@trolltech.com>
216
217        Reviewed by Rob.
218
219        Fix a stupid bug in Unicode::toUpper/toLower.
220        Fixes all three test failures in the JavaScriptCore test
221        suite.
222
223        * wtf/unicode/qt4/UnicodeQt4.h:
224        (WTF::Unicode::toLower):
225        (WTF::Unicode::toUpper):
226
2272007-10-02  Darin Adler  <darin@apple.com>
228
229        Reviewed by Adam.
230
231        - add support for GDI objects to OwnPtr; I plan to use this
232          to fix some GDI handle leaks
233
234        * kjs/grammar.y: Change parser to avoid macros that conflict
235        with macros defined in Windows system headers: THIS, DELETE,
236        VOID, IN, and CONST. This is needed because OwnPtr.h will now
237        include <windows.h>.
238        * kjs/keywords.table: Ditto.
239
240        * wtf/OwnPtr.h: For PLATFORM(WIN), add support so that OwnPtr can be
241        a GDI handle, and it will call DeleteObject. Also change to use the
242        RemovePointer technique used by RetainPtr, so you can say OwnPtr<HBITMAP>
243        rather than having to pass in the type pointed to by HBITMAP.
244
245        * wtf/OwnPtrWin.cpp: Added.
246        (WebCore::deleteOwnedPtr): Put this in a separate file so that we
247        don't have to include <windows.h> in OwnPtr.h.
248
249        * JavaScriptCore.vcproj/WTF/WTF.vcproj: Added OwnPtrWin.cpp.
250
2512007-09-29  Holger Hans Peter Freyther  <zecke@selfish.org>
252
253        Reviewed by Mark.
254
255        -Fix http://bugs.webkit.org/show_bug.cgi?id=13226.
256        Remove Bakefiles from svn.
257
258        * JavaScriptCoreSources.bkl: Removed.
259        * jscore.bkl: Removed.
260
2612007-09-27  Kevin Decker  <kdecker@apple.com>
262
263        Rubber stamped by John Sullivan.
264
265        <rdar://problem/5493093>
266        
267        * JavaScriptCore.order: Added.
268        * JavaScriptCore.xcodeproj/project.pbxproj: We're changing from using an order file built by
269         another team to using one we actually check into our project repository. Linker settings for
270         Symbol Ordering Flags have been updated accordingly.
271
2722007-09-26  Adam Roben  <aroben@apple.com>
273
274        Make testkjs delay-load WebKit.dll so WebKitInitializer can work its magic
275
276        Rubberstamped by Anders.
277
278        * JavaScriptCore.vcproj/testkjs/testkjs.vcproj:
279
2802007-09-25  Adam Roben  <aroben@apple.com>
281
282        Make testkjs delay-load its dependencies
283
284        This lets WebKitInitializer re-route the dependencies to be loaded out
285        of the Safari installation directory.
286
287        Rubberstamped by Sam.
288
289        * JavaScriptCore.vcproj/testkjs/testkjs.vcproj:
290
2912007-09-25  David Kilzer  <ddkilzer@webkit.org>
292
293        Reviewed by Adam.
294
295        - Fix http://bugs.webkit.org/show_bug.cgi?id=14885
296          LGPL'ed files contain incorrect FSF address
297
298        * COPYING.LIB:
299        * bindings/testbindings.cpp:
300        * kjs/AllInOneFile.cpp:
301        * kjs/DateMath.cpp:
302        * kjs/PropertyNameArray.cpp:
303        * kjs/PropertyNameArray.h:
304        * kjs/config.h:
305
3062007-09-25  Sam Weinig  <sam@webkit.org>
307
308        Fix location for build products for Debug_Internal.
309
310        Reviewed by Adam Roben.
311
312        * JavaScriptCore.vcproj/testkjs/testkjs.vcproj:
313
3142007-09-25  Adam Roben  <aroben@apple.com>
315
316        Make testkjs use WebKitInitializer
317
318        Reviewed by Sam.
319
320        * JavaScriptCore.vcproj/JavaScriptCore.sln: Add WebKitInitializer and
321        make testkjs depend on it.
322        * JavaScriptCore.vcproj/testkjs/testkjs.vcproj: Link against
323        WebKitInitializer.lib.
324        * kjs/testkjs.cpp:
325        (main): Call initializeWebKit.
326
3272007-09-24  Kevin McCullough  <kmccullough@apple.com>
328
329        Reviewed by Sam.
330
331        - Continued to update project files to not use Edit and Continue for Debug Information since it doesn't work and breaks some functionality.
332
333        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
334        * JavaScriptCore.vcproj/WTF/WTF.vcproj:
335
3362007-09-21  Kevin McCullough  <kmccullough@apple.com>
337
338        Reviewed by Sam.
339
340        - Updated project files to not use Edit and Continue for Debug Information since it doesn't work and breaks some functionality.
341
342        * JavaScriptCore.vcproj/dftables/dftables.vcproj:
343        * JavaScriptCore.vcproj/testkjs/testkjs.vcproj:
344
3452007-09-20  Holger Hans Peter Freyther  <zecke@selfish.org>
346
347        Rubber stamped by Adam.
348
349        Renamed files from *Gdk to *Gtk (see #14732) using the
350        work of Juan A. Suarez Romero as a base.
351
352        GDK -> GTK 
353
354        * JavaScriptCore.pri:
355        * kjs/testkjs.pro:
356        * pcre/dftables.pro:
357        * wtf/Platform.h: PLATFORM(GDK) to PLATFORM(GTK)
358
3592007-09-21  Mark Rowe  <mrowe@apple.com>
360
361        Reviewed by Antti Koivisto.
362
363        http://bugs.webkit.org/show_bug.cgi?id=15250
364        <rdar://problem/5496942> REGRESSION: Reproducible crash in Safari when evaluating script in Drosera console (15250)
365
366        * kjs/function.cpp:
367        (KJS::GlobalFuncImp::callAsFunction): Null-check thisObj before passing it to interpreterForGlobalObject.
368
3692007-09-19  Holger Hans Peter Freyther  <zecke@selfish.org>
370
371        Rubber stamped by Adam.
372
373        Make the guard/#if use the same name (ENABLE_FTPDIR) as the #define. This follows
374        the ENABLE_ICONDATABASE example from a couple of lines above.
375
376        * wtf/Platform.h:
377
3782007-09-19  Mark Rowe  <mrowe@apple.com>
379
380        Reviewed by Maciej.
381
382        <rdar://problem/5487107> NULL dereference crash in FastMallocZone::enumerate when running leaks against Safari
383
384        Storing remote pointers to their local equivalents in mapped memory was leading to the local pointer being
385        interpreted as a remote pointer.  This caused a crash when using the result of mapping this invalid remote pointer.
386        The fix is to follow the pattern used elsewhere in FastMallocZone by always doing the mapping after reading and
387        never storing the mapped pointer.
388
389        * wtf/FastMalloc.cpp:
390        (WTF::FastMallocZone::enumerate):
391
3922007-09-15  Darin Adler  <darin@apple.com>
393
394        - fix Mac build
395
396        * JavaScriptCore.exp: Export WTFLogVerbose.
397
3982007-09-14  Kevin McCullough  <kmccullough@apple.com>
399
400        Reviewed by Sam.
401
402        - Copy JSRetainPtr to include folder.
403
404        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
405
4062007-09-13  Geoffrey Garen  <ggaren@apple.com>
407
408        Try to fix GDK build.
409
410        * wtf/MathExtras.h:
411        (wtf_random_init):
412
4132007-09-12  Geoff Garen  <ggaren@apple.com>
414
415        Reviewed by Sam Weinig.
416        
417        Fixed <rdar://problem/5429064> 141885 Safari JavaScript: Math.random() slightly less randomly distributed than on Safari / Mac
418
419        Math.random was skewed slightly upward because it assumed that RAND_MAX was outside the range of
420        values that rand() might return. This problem was particularly pronounced on Windows because
421        the range of values returned by rand() on Windows is 2^16 smaller than the range of values
422        return by rand() on Mac.
423        
424        Fixed by accounting for RAND_MAX return values. Also, switched Windows over to rand_s, which has
425        a range that's equal to rand()'s range on Mac.
426        
427        * kjs/config.h:
428
429        * kjs/math_object.cpp:
430        (MathFuncImp::callAsFunction): Use the new new thing.
431
432        * wtf/MathExtras.h: Platform abstraction for random numbers, to cover over differences on Windows.
433        (wtf_random_init):
434        (wtf_random):
435
4362007-09-13  Antti Koivisto  <antti@apple.com>
437
438        Reviewed by Maciej.
439        
440        Small addition to previous path to cover
441        http://bugs.webkit.org/show_bug.cgi?id=11399
442        window.eval runs in the global scope of the calling window
443        
444        Switch variable scope as well.
445
446        * kjs/function.cpp:
447        (KJS::GlobalFuncImp::callAsFunction):
448
4492007-09-12  Antti Koivisto  <antti@apple.com>
450
451        Reviewed by Geoff, Maciej.
452        
453        Fix <rdar://problem/5445058>
454        REGRESSION: Unable to upload picture to eBay auction due to domain security check
455        
456        eBay uses window.eval() between windows. In Firefox window.eval() switches execution
457        and security context to the target window, something WebKit did not do. With WebKit
458        security tightening in r24781, this broke picture uploads.
459        
460        Fix by making WebKit switch context in window.eval().
461        
462        * kjs/Context.cpp:
463        (KJS::Context::Context):
464        (KJS::Context::~Context):
465        * kjs/context.h:
466        Save and restore interpreter context independently from calling context.
467        
468        * kjs/function.cpp:
469        (KJS::GlobalFuncImp::callAsFunction):
470        If eval is called for global object different than current one, switch execution context
471        to that object and push it to scope.
472
4732007-09-12  Sam Weinig  <sam@webkit.org>
474
475        Reviewed by Geoffrey Garen.
476
477        <rdar://problem/5478717> JSStringCreateWithCFString leaks when passed a zero length CFStringRef
478
479        * API/JSStringRefCF.cpp:
480        (JSStringCreateWithCFString): Special case the zero length string and remove the
481        UTF16 optimized path since it will always leak due to the fact that we won't be 
482        able to free the backing store that the CFStringRef provides.
483
4842007-09-10  Timothy Hatcher  <timothy@apple.com>
485
486        Reviewed by Darin Adler.
487
488        <rdar://problem/5456224> CrashTracer: [USER] 2 crashes in Toast Titanium at com.apple.CoreServices.CarbonCore: CSMemDisposePtr + 37
489
490        Removed the implementation of these malloc zone functions. We do not have the ability to 
491        check if a pointer is valid or not, so we can't correctly implement them. The system free 
492        does not fail if you pass in a bad pointer.
493
494        * wtf/FastMalloc.cpp:
495        (WTF::FastMallocZone::size):
496        (WTF::FastMallocZone::zoneMalloc):
497        (WTF::FastMallocZone::zoneCalloc):
498        (WTF::FastMallocZone::zoneFree):
499        (WTF::FastMallocZone::zoneRealloc):
500
5012007-09-07  Darin Adler  <darin@apple.com>
502
503        Reviewed by Steve Falkenburg.
504
505        - fix crash seen on Windows release builds
506
507        * wtf/FastMalloc.cpp: Change pthread_getspecific optimization to be done only
508        on the DARWIN platform. Also correct a couple reinterpret_cast that should be
509        static_cast instead.
510
5112007-09-06  Kevin McCullough  <kmccullough@apple.com>
512
513        Reviewed by Maciej.
514
515        - Moved JSRetainPtr to the API.
516
517        * API/JSRetainPtr.h: Copied from kjs/JSRetainPtr.h.
518        (JSRetain):
519        (JSRelease):
520        (JSRetainPtr::JSRetainPtr):
521        (JSRetainPtr::~JSRetainPtr):
522        (JSRetainPtr::get):
523        (JSRetainPtr::releaseRef):
524        (JSRetainPtr::operator->):
525        (JSRetainPtr::operator!):
526        (JSRetainPtr::operator UnspecifiedBoolType):
527        (::operator):
528        (::adopt):
529        (::swap):
530        (swap):
531        (operator==):
532        (operator!=):
533        * JavaScriptCore.xcodeproj/project.pbxproj:
534        * kjs/JSRetainPtr.h: Removed.
535
5362007-09-05  Maciej Stachowiak  <mjs@apple.com>
537
538        Reviewed by Darin.
539        
540        - Remove single-threaded optimization for FastMalloc. 
541        
542        It does not appear to help anywhere but Mac OS X on PPC, due to
543        pthread_getspecific being slow there. On Intel, removing the
544        optimization results in a ~1.5% PLT speedup, a ~1-5% JS iBench
545        speedup, and a ~1.5% HTML iBench speedup. On PPC this change is a
546        speedup on some benchmarks, a slight hit on others.
547
548        * JavaScriptCore.xcodeproj/project.pbxproj:
549        * kjs/collector.cpp:
550        (KJS::Collector::registerThread):
551        * wtf/FastMalloc.cpp:
552        (WTF::TCMalloc_ThreadCache::GetCache):
553        (WTF::TCMalloc_ThreadCache::GetCacheIfPresent):
554        (WTF::TCMalloc_ThreadCache::CreateCacheIfNecessary):
555        (WTF::do_malloc):
556        * wtf/FastMallocInternal.h: Removed.
557
5582007-09-05  Kevin McCullough  <kmccullough@apple.com>
559
560        Reviewed by Adam, Sam, Darin.
561
562        - Created a JSRetainPtr specifically for JSStringRefs so they can be automatically refed and derefed.
563
564        * JavaScriptCore.xcodeproj/project.pbxproj:
565        * kjs/JSRetainPtr.h: Copied from wtf/RetainPtr.h.
566        (KJS::JSRetain):
567        (KJS::JSRelease):
568        (KJS::):
569        (KJS::JSRetainPtr::JSRetainPtr):
570        (KJS::JSRetainPtr::~JSRetainPtr):
571        (KJS::JSRetainPtr::get):
572        (KJS::JSRetainPtr::releaseRef):
573        (KJS::JSRetainPtr::operator->):
574        (KJS::JSRetainPtr::operator UnspecifiedBoolType):
575        (KJS::::operator):
576        (KJS::::adopt):
577        (KJS::::swap):
578        (KJS::swap):
579        (KJS::operator==):
580        (KJS::operator!=):
581
5822007-09-05  Mark Rowe  <mrowe@apple.com>
583
584        Unreviewed Qt build fix.
585
586        * wtf/unicode/qt4/UnicodeQt4.h: Fix the constness of the src argument to toUpper to prevent build failures.
587
5882007-09-04  Maciej Stachowiak  <mjs@apple.com>
589
590        Back out accidentally committed change.
591
592        * JavaScriptCore.xcodeproj/project.pbxproj:
593        * kjs/collector.cpp:
594        (KJS::Collector::registerThread):
595        * wtf/FastMalloc.cpp:
596        (WTF::fastMallocSetIsMultiThreaded):
597        (WTF::TCMalloc_ThreadCache::GetCache):
598        (WTF::TCMalloc_ThreadCache::GetCacheIfPresent):
599        (WTF::TCMalloc_ThreadCache::CreateCacheIfNecessary):
600        (WTF::do_malloc):
601        * wtf/FastMallocInternal.h: Added.
602
6032007-09-04  Maciej Stachowiak  <mjs@apple.com>
604
605        Reviewed by Darin.
606        
607        - Added Vector::appendRange(), which appends to a vector based on a given start and end iterator
608        - Added keys() and values() functions to HashMap iterators, which give keys-only and values-only iterators
609        
610        Together, these allow easy copying of a set, or the keys or values of a map, into a Vector. Examples:
611        
612        HashMap<int, int> map;
613        HashSet<int> set;
614        Vector<int> vec;
615        // ...
616        vec.appendRange(set.begin(), set.end());
617        vec.appendRange(map.begin().keys(), map.end().keys());
618        vec.appendRange(map.begin().values(), map.end().values());
619
620        This also allows for a slightly nicer syntax when iterating a map. Instead of saying 
621        (*it)->first, you can say *it.values(). Similarly for keys. Example:
622        
623        HashMap<int, int>::const_iterator end = map.end();
624        for (HashMap<int, int>::const_iterator it = map.begin(); it != end; ++it)
625        printf(" [%d => %d]", *it.keys(), *it.values());
626
627        * JavaScriptCore.xcodeproj/project.pbxproj:
628        * wtf/HashIterators.h: Added.
629        (WTF::):
630        (WTF::HashTableConstKeysIterator::HashTableConstKeysIterator):
631        (WTF::HashTableConstKeysIterator::get):
632        (WTF::HashTableConstKeysIterator::operator*):
633        (WTF::HashTableConstKeysIterator::operator->):
634        (WTF::HashTableConstKeysIterator::operator++):
635        (WTF::HashTableConstValuesIterator::HashTableConstValuesIterator):
636        (WTF::HashTableConstValuesIterator::get):
637        (WTF::HashTableConstValuesIterator::operator*):
638        (WTF::HashTableConstValuesIterator::operator->):
639        (WTF::HashTableConstValuesIterator::operator++):
640        (WTF::HashTableKeysIterator::HashTableKeysIterator):
641        (WTF::HashTableKeysIterator::get):
642        (WTF::HashTableKeysIterator::operator*):
643        (WTF::HashTableKeysIterator::operator->):
644        (WTF::HashTableKeysIterator::operator++):
645        (WTF::HashTableKeysIterator::operator HashTableConstKeysIterator<HashTableType, KeyType, MappedType>):
646        (WTF::HashTableValuesIterator::HashTableValuesIterator):
647        (WTF::HashTableValuesIterator::get):
648        (WTF::HashTableValuesIterator::operator*):
649        (WTF::HashTableValuesIterator::operator->):
650        (WTF::HashTableValuesIterator::operator++):
651        (WTF::HashTableValuesIterator::operator HashTableConstValuesIterator<HashTableType, KeyType, MappedType>):
652        (WTF::operator==):
653        (WTF::operator!=):
654        * wtf/HashTable.h:
655        * wtf/Vector.h:
656        (WTF::::appendRange):
657
6582007-09-04  Maciej Stachowiak  <mjs@apple.com>
659
660        Reviewed by Darin.
661        
662        - Remove single-threaded optimization for FastMalloc. 
663        
664        It does not appear to help anywhere but Mac OS X on PPC, due to
665        pthread_getspecific being slow there. On Intel, removing the
666        optimization results in a 1% PLT speedup, a 2% JS iBench speedup,
667        and no measurable effect on HTML iBench (maybe a slight speedup).
668
669        * JavaScriptCore.xcodeproj/project.pbxproj:
670        * kjs/collector.cpp:
671        (KJS::Collector::registerThread):
672        * wtf/FastMalloc.cpp:
673        (WTF::TCMalloc_ThreadCache::GetCache):
674        (WTF::TCMalloc_ThreadCache::GetCacheIfPresent):
675        (WTF::TCMalloc_ThreadCache::CreateCacheIfNecessary):
676        (WTF::do_malloc):
677        * wtf/FastMallocInternal.h: Removed.
678
6792007-09-03  Mark Rowe  <mrowe@apple.com>
680
681        Reviewed by Tim Hatcher.
682
683        <rdar://problem/5452164> Production build with in symbols directory has no debug info
684
685        Enable debug symbol generation on all build configurations.  Production builds are stripped
686        of symbols by Xcode during deployment post-processing.
687
688        * Configurations/Base.xcconfig:
689        * JavaScriptCore.xcodeproj/project.pbxproj:
690
6912007-08-30  Riku Voipio  <riku.voipio@iki.fi>
692
693        Reviewed by Dave Kilzer.
694
695        Better ARM defines.
696
697        * kjs/ustring.h: Update comments to reflect the change and update test
698        to fit changes to Platform.h.
699        * wtf/Platform.h: Forced packing is only needed on oldabi ARM.
700        Set middle-endian floats only for little-endian oldabi ARM.
701        Set big-endian define for big-endian ARM.
702
7032007-08-29  Ryan Leavengood <leavengood@gmail.com>
704
705        Reviewed by Maciej.
706
707        http://bugs.webkit.org/show_bug.cgi?id=15043
708        - posix_memalign takes a void** as its first parameter. My port makes use of this function call.
709
710        * kjs/collector.cpp:
711        (KJS::allocateBlock):
712
7132007-08-26  Darin Adler  <darin@apple.com>
714
715        - quick follow on to that last check-in
716
717        * API/JSCallbackObject.cpp: (KJS::JSCallbackObject::JSCallbackObject):
718        Need to initialize m_class to 0.
719
7202007-08-26  Mark Rowe  <mrowe@apple.com>
721
722        Reviewed by Darin Adler.
723
724        <rdar://problem/4949002> JSGlobalContextCreate can cause crashes because it passes a NULL JSContextRef to the globalObjectClass's initialize callback
725
726        JSCallbackObject now tracks whether it was constructed with a null ExecState.  This will happen when the object is being used as the global object,
727        as the Interpreter needs to be created after the global object.  In this situation the initialization is deferred until after the Interpreter's
728        ExecState is available to be passed down to the initialize callbacks.
729
730        * API/JSCallbackObject.cpp:
731        (KJS::JSCallbackObject::init): Track whether we successfully initialized.
732        (KJS::JSCallbackObject::initializeIfNeeded): Attempt to initialize with the new ExecState.
733        * API/JSCallbackObject.h:
734        * API/JSContextRef.cpp:
735        (JSGlobalContextCreate): Initialize the JSCallbackObject with the Interpreter's ExecState.
736        * API/testapi.c:
737        (testInitializeOfGlobalObjectClassHasNonNullContext):
738        (main): Verify that the context passed to the initialize callback is non-null.
739
7402007-08-26  Mark Rowe  <mrowe@apple.com>
741
742        Reviewed by Darin Adler.
743
744        <rdar://problem/5438496> JSGlobalContextCreate crashes when passed a custom class
745
746        * API/JSContextRef.cpp:
747        (JSGlobalContextCreate): Specify jsNull() as the prototype and let Interpreter's constructor fix it up to point at builtinObjectPrototype().
748        * API/testapi.c:
749        (main): Use an instance of a custom class as the global object to ensure the code path is exercised in the test.
750
7512007-08-26  Mike Hommey  <glandium@debian.org>
752
753        Reviewed by Mark Rowe and David Kilzer.
754
755        Fix build failure on arm.
756
757        * wtf/Platform.h: Also test if __arm__ is defined.
758
7592007-08-25  Peter Kasting <pkasting@google.com>
760
761        Reviewed by Maciej Stachowiak.
762
763        Part 3 of http://bugs.webkit.org/show_bug.cgi?id=14967
764        Bug 14967: Reduce wtf::Vector::operator[]() overloads
765
766        * wtf/Vector.h:
767        (WTF::Vector::operator[]): Only provide versions of operator[] that takes a size_t argument.
768
7692007-08-25  Peter Kasting <pkasting@google.com>
770
771        Reviewed by Sam Weinig.
772
773        Part 2 of http://bugs.webkit.org/show_bug.cgi?id=14967.
774        Eliminate all remaining implicit conversions of wtf::Vector<T> to T*.  Where code was
775        previously checking that the Vector's data pointer was non-NULL, check !Vector::isEmpty()
776        instead.
777
778        * wtf/Vector.h:
779        (WTF::Vector::data):
780
7812007-08-16  Kevin McCullough  <kmccullough@apple.com>
782
783        Reviewed by Geoff and Adam.
784
785        - 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)
786
787        * kjs/object.cpp:
788
7892007-08-15  Peter Kasting  <pkasting@google.com>
790
791        Reviewed by Darin.
792        
793        http://bugs.webkit.org/show_bug.cgi?id=14967 part 1 - Eliminate most implicit
794        conversions of wtf::Vector<T> to T* by explicitly calling .data()
795
796        * API/JSCallbackConstructor.cpp:
797        (KJS::JSCallbackConstructor::construct):
798        * API/JSCallbackFunction.cpp:
799        (KJS::JSCallbackFunction::callAsFunction):
800        * API/JSCallbackObject.cpp:
801        (KJS::JSCallbackObject::construct):
802        (KJS::JSCallbackObject::callAsFunction):
803        * bindings/c/c_instance.cpp:
804        (KJS::Bindings::CInstance::invokeMethod):
805        (KJS::Bindings::CInstance::invokeDefaultMethod):
806        * kjs/number_object.cpp:
807        (integer_part_noexp):
808        (char_sequence):
809        * kjs/ustring.cpp:
810        (KJS::UString::UTF8String):
811
8122007-08-14  Darin Adler  <darin@apple.com>
813
814        Reviewed by Sam.
815
816        - fix <rdar://problem/5410570> Global initializer introduced by use of std::numeric_limits in r24919
817
818        * kjs/ustring.cpp:
819        (KJS::overflowIndicator): Turned into a function.
820        (KJS::maxUChars): Ditto.
821        (KJS::allocChars): Use the functions.
822        (KJS::reallocChars): Ditto.
823        (KJS::UString::expandedSize): Ditto.
824
8252007-08-12  Darin Adler  <darin@apple.com>
826
827        Reviewed by Maciej.
828
829        - fix http://bugs.webkit.org/show_bug.cgi?id=14931
830          <rdar://problem/5403816> JavaScript regular expression non-participating capturing parentheses
831          fail in 3 different ways
832
833        Test: fast/js/regexp-non-capturing-groups.html
834
835        * kjs/string_object.cpp:
836        (KJS::replace): Add missing code to handle undefined backreferences; before we'd get the empty string
837        instead of a JavaScript "undefined" value.
838        (KJS::StringProtoFunc::callAsFunction): Implemented backreference support for split.
839        * pcre/pcre_exec.c: (match): Made backreferences to undefined groups match the empty string instead
840        of always failing. Only in JAVASCRIPT mode.
841
842        * tests/mozilla/expected.html: Add a new expected test success, since this fixed one test result.
843
8442007-08-10  Timothy Hatcher  <timothy@apple.com>
845
846        Reviewed by Adam.
847
848        <rdar://problem/5394449> Stop using some Carbon UI APIs for 64 bit
849
850        Disable the NPAPI for 64-bit on Mac OS X.
851
852        * Configurations/JavaScriptCore.xcconfig: Use the 64-bit export file.
853        * JavaScriptCore.xcodeproj/project.pbxproj: Create a 64-bit export file
854        that filters out the NPN fnctions.
855        * bindings/NP_jsobject.cpp: #ifdef out this for 64-bit on Mac OS X
856        * bindings/NP_jsobject.h: Ditto.
857        * bindings/c/c_class.cpp: Ditto.
858        * bindings/c/c_class.h: Ditto.
859        * bindings/c/c_instance.cpp: Ditto.
860        * bindings/c/c_instance.h: Ditto.
861        * bindings/c/c_runtime.cpp: Ditto.
862        * bindings/c/c_runtime.h: Ditto.
863        * bindings/c/c_utility.cpp: Ditto.
864        * bindings/c/c_utility.h: Ditto.
865        * bindings/npapi.h: Ditto.
866        * bindings/npruntime.cpp: Ditto.
867        * bindings/npruntime.h: Ditto.
868        * bindings/npruntime_impl.h: Ditto.
869        * bindings/npruntime_priv.h: Ditto.
870        * bindings/runtime.cpp:
871        (KJS::Bindings::Instance::createBindingForLanguageInstance):
872         don't creat an NPObject on Mac OS X in 64-bit.
873
8742007-08-09  Mark Rowe  <mrowe@apple.com>
875
876        Reviewed by Antti.
877
878        <rdar://problem/5400709> Versioning in debug and release builds should include minor and tiny version before +
879
880        * Configurations/Version.xcconfig:
881        * JavaScriptCore.xcodeproj/project.pbxproj: Add a shell script phase to make to dependency between
882        Version.xcconfig and Info.plist explicit to Xcode.
883
8842007-08-08  George Staikos  <staikos@kde.org>
885
886        Make it compile with Qt again.
887
888        * wtf/unicode/qt4/UnicodeQt4.h:
889        (WTF::Unicode::toUpper):
890
8912007-08-07  Sam Weinig  <sam@webkit.org>
892
893        Reviewed by Oliver.
894
895        Fix for http://bugs.webkit.org/show_bug.cgi?id=14897
896        Decompilation of double negation fails and produces invalid or incorrect code
897
898        Test: fast/js/function-decompilation-operators.html
899
900        * kjs/nodes2string.cpp:
901        (UnaryPlusNode::streamTo): Put space after unary operator.  Matches Firefox.
902        (NegateNode::streamTo): Diito.
903        (MultNode::streamTo): Put spaces around binary operator.  Matches Firefox.
904        (AddNode::streamTo): Ditto.
905
9062007-08-07  Darin Adler  <darin@apple.com>
907
908        Reviewed by Adele.
909
910        - fix <rdar://problem/5383104> REGRESSION: XHR.responseText is null instead of empty string
911          in http/tests/xmlhttprequest/zero-length-response.html
912
913        The new code to handle out of memory conditions was turning a "" into a null string.
914
915        * kjs/ustring.h: Removed UCharReference, which has long been obsolete and unused.
916        Removed copyForWriting, which was only used for the upper/lowercasing code and for
917        UCharReference.
918        * kjs/ustring.cpp:
919        (KJS::allocChars): Removed special case that made this fail (return 0) when passed 0.
920        Instead assert that we're not passed 0. Also added an overflow check for two reasons:
921        1) for sizes that aren't checked this prevents us from allocating a buffer that's too
922        small, and 2) for sizes where we overflowed in the expandedSize function and returned
923        overflowIndicator, it guarantees we fail.
924        (KJS::reallocChars): Ditto.
925        (KJS::UString::expandedSize): Return a large number, overflowIndicator, rather than 0
926        for cases where we overflow.
927        (KJS::UString::spliceSubstringsWithSeparators): Added a special case for empty string so
928        we don't call allocChars with a length of 0.
929        (KJS::UString::operator=): Added special characters for both 0 and empty string so we
930        match the behavior of the constructor. This avoids calling allocChars with a length of 0
931        and making a null string rather than an empty string in that case, and also matches the
932        pattern used in the rest of the functions.
933        (KJS::UString::operator[]): Made the return value const so code that tries to use the
934        operator to modify the string will fail.
935
936        * kjs/string_object.cpp: (KJS::StringProtoFunc::callAsFunction): Rewrote uppercasing and
937        lowercasing functions so they don't need copyForWriting any more -- it wasn't really doing
938        any good for optimization purposes. Instead use a Vector and releaseBuffer.
939
940        * wtf/unicode/icu/UnicodeIcu.h: Eliminate one of the versions of toLower/toUpper -- we now
941        only need the version where both a source and destination buffer is passed in, not the one
942        that works in place.
943        * wtf/unicode/qt4/UnicodeQt4.h: Ditto.
944
9452007-08-06  Sam Weinig  <sam@webkit.org>
946
947        Reviewed by Oliver.
948
949        Fix for http://bugs.webkit.org/show_bug.cgi?id=14891
950        Decompilation of try block immediately following "else" fails
951
952        Test: fast/js/toString-try-else.html
953
954        * kjs/nodes2string.cpp:
955        (TryNode::streamTo): Add newline before "try".
956
9572007-08-07  Mark Rowe  <mrowe@apple.com>
958
959        Reviewed by Maciej.
960
961        <rdar://problem/5388774> REGRESSION: Hang occurs after clicking "Attach a file " link in a new .Mac message
962
963        Attempting to acquire the JSLock inside CollectorHeap::forceLock can lead to a deadlock if the thread currently
964        holding the lock is waiting on the thread that is forking.  It is not considered safe to use system frameworks
965        after a fork without first execing[*] so it is not particularly important to ensure that the collector and
966        fastMalloc allocators are unlocked in the child process.  If the child process wishes to use JavaScriptCore it
967        should exec after forking like it would to use any other system framework.
968        [*]: <http://lists.apple.com/archives/Cocoa-dev/2005/Jan/msg00676.html>
969
970        * kjs/CollectorHeapIntrospector.cpp: Remove forceLock and forceUnlock implementations.
971        * kjs/CollectorHeapIntrospector.h: Stub out forceLock and forceUnlock methods.
972        * wtf/FastMalloc.cpp: Ditto.
973
9742007-08-06  Darin Adler  <darin@apple.com>
975
976        Rubber stamped by Geoff.
977
978        * kjs/ustring.h: Added an assertion which would have helped us find the
979        previous bug more easily.
980
9812007-08-06  Darin Adler  <darin@apple.com>
982
983        Reviewed by Anders.
984
985        - fix <rdar://problem/5387589> 9A514: Quartz Composer crash on launch in KJS::jsString
986
987        * API/JSBase.cpp:
988        (JSEvaluateScript): Turn NULL for sourceURL into UString::null(), just as JSObjectMakeFunction already does.
989        (JSCheckScriptSyntax): Ditto.
990
9912007-08-06  Matt Lilek  <pewtermoose@gmail.com>
992
993        Not reviewed, build fix.
994
995        * kjs/string_object.cpp:
996        (KJS::StringProtoFunc::callAsFunction):
997
9982007-08-04  Darin Adler  <darin@apple.com>
999
1000        Reviewed by Maciej.
1001
1002        - fix <rdar://problem/5371862> crash in Dashcode due to Quartz Composer JavaScript garbage collector reentrancy
1003
1004        * API/JSBase.cpp: (JSGarbageCollect): Don't call collector() if isBusy() returns true.
1005
1006        * kjs/collector.h: Added isBusy(), removed the unused return value from collect()
1007        * kjs/collector.cpp: Added an "operation in progress" flag to the allocator.
1008        (KJS::Collector::allocate): Call abort() if an operation is already in progress. Set the new flag instead
1009        of using the debug-only GCLock.
1010        (KJS::Collector::collect): Ditto.
1011        (KJS::Collector::isBusy): Added.
1012
10132007-08-04  Maciej Stachowiak  <mjs@apple.com>
1014
1015        Reviewed by Darin and Adam.
1016        
1017        <rdar://problem/5368990> REGRESSION: newsgator.com sign-on 6x slower than Safari 3 beta due to GC changes (14808)
1018
1019        * kjs/string_object.cpp:
1020        (KJS::replace): if the string didn't change (very common in some cases) reuse the original string value.
1021        (KJS::StringProtoFunc::callAsFunction): Pass in the StringImp* when replacing, not just the UString.
1022        * kjs/string_object.h:
1023        (KJS::StringInstance::internalValue): covariant override to return StringImp for convenience
1024
10252007-08-04  Mark Rowe  <mrowe@apple.com>
1026
1027        Reviewed by Oliver Hunt.
1028
1029        <rdar://problem/5385145> r24843 introduces a crash on calling fork() (14878)
1030        http://bugs.webkit.org/show_bug.cgi?id=14878
1031
1032        Provide no-op functions for all members of the malloc_zone_t and malloc_introspection_t structures that we
1033        register to avoid crashes in system code that assumes they will be non-null.
1034
1035        * kjs/CollectorHeapIntrospector.cpp:
1036        (KJS::CollectorHeapIntrospector::CollectorHeapIntrospector):
1037        (KJS::CollectorHeapIntrospector::forceLock): Grab the lock.
1038        (KJS::CollectorHeapIntrospector::forceUnlock): Release the lock.
1039        * kjs/CollectorHeapIntrospector.h:
1040        (KJS::CollectorHeapIntrospector::goodSize):
1041        (KJS::CollectorHeapIntrospector::check):
1042        (KJS::CollectorHeapIntrospector::print):
1043        (KJS::CollectorHeapIntrospector::log):
1044        (KJS::CollectorHeapIntrospector::statistics):
1045        (KJS::CollectorHeapIntrospector::size):
1046        (KJS::CollectorHeapIntrospector::zoneMalloc):
1047        (KJS::CollectorHeapIntrospector::zoneCalloc):
1048        (KJS::CollectorHeapIntrospector::zoneFree):
1049        * wtf/FastMalloc.cpp:
1050        (WTF::FastMallocZone::goodSize):
1051        (WTF::FastMallocZone::check):
1052        (WTF::FastMallocZone::print):
1053        (WTF::FastMallocZone::log):
1054        (WTF::FastMallocZone::forceLock): Grab the TCMalloc locks.
1055        (WTF::FastMallocZone::forceUnlock): Release the TCMalloc locks.
1056        (WTF::FastMallocZone::FastMallocZone):
1057
10582007-08-04  Mark Rowe  <mrowe@apple.com>
1059
1060        Rubber-stamped by Anders.
1061
1062        * pcre/pcre_compile.c: Remove non-ASCII character from a comment.
1063
10642007-08-02  Mark Rowe  <mrowe@apple.com>
1065
1066        Reviewed by Geoff Garen.
1067
1068        <rdar://problem/4212199> 'leaks' reports false leaks in WebKit (because the WTF allocator uses mmap?)
1069
1070        Implement malloc zone introspection routines to allow leaks, heap, and friends to request information
1071        about specific memory regions that were allocated by FastMalloc or the JavaScriptCore collector.
1072
1073        This requires tool-side support before the regions will be displayed.  The addition of that support is
1074        tracked by <rdar://problems/5353057&5353060>.
1075
1076        * JavaScriptCore.exp: Export the two variables that are used by leaks to introspect the allocators.
1077        * JavaScriptCore.xcodeproj/project.pbxproj:
1078        * kjs/AllInOneFile.cpp:
1079        * kjs/CollectorHeapIntrospector.cpp: Added.
1080        (KJS::):
1081        (KJS::CollectorHeapIntrospector::init): 
1082        (KJS::CollectorHeapIntrospector::CollectorHeapIntrospector): Create and register our zone with the system.
1083        (KJS::CollectorHeapIntrospector::enumerate): Iterate over the CollectorBlocks that are in use and report them to the caller as being used.
1084        * kjs/CollectorHeapIntrospector.h: Added.
1085        (KJS::CollectorHeapIntrospector::size): Return zero to indicate the specified pointer does not belong to this zone.
1086        * kjs/collector.cpp:
1087        (KJS::Collector::registerThread): Register the CollectorHeapIntrospector with the system when the first thread is registered with the collector.
1088        * wtf/FastMalloc.cpp:
1089        (WTF::TCMalloc_PageHeap::GetDescriptorEnsureSafe):
1090        (WTF::TCMalloc_ThreadCache_FreeList::enumerateFreeObjects): Enumerate the objects on the free list.
1091        (WTF::TCMalloc_ThreadCache::enumerateFreeObjects): Ditto.
1092        (WTF::TCMalloc_Central_FreeList::enumerateFreeObjects): Ditto.
1093        (WTF::TCMalloc_ThreadCache::InitModule): Register the FastMallocZone with the system when initializing TCMalloc.
1094        (WTF::FreeObjectFinder::FreeObjectFinder):
1095        (WTF::FreeObjectFinder::visit): Add an object to the free list.
1096        (WTF::FreeObjectFinder::isFreeObject):
1097        (WTF::FreeObjectFinder::freeObjectCount):
1098        (WTF::FreeObjectFinder::findFreeObjects): Find the free objects within a thread cache or free list.
1099        (WTF::PageMapFreeObjectFinder::PageMapFreeObjectFinder): Find the free objects within a TC_PageMap.
1100        (WTF::PageMapFreeObjectFinder::visit): Called once per allocated span.  Record whether the span or any subobjects are free.
1101        (WTF::PageMapMemoryUsageRecorder::PageMapMemoryUsageRecorder):
1102        (WTF::PageMapMemoryUsageRecorder::visit): Called once per allocated span.  Report the range of memory as being allocated, and the span or
1103        its subobjects as being used if they do not appear on the free list.
1104        (WTF::FastMallocZone::enumerate): Map the key remote TCMalloc data structures into our address space.  We then locate all free memory ranges
1105        before reporting the other ranges as being in use.
1106        (WTF::FastMallocZone::size): Determine whether the given pointer originates from within our allocation zone.  If so,
1107        we return its allocation size.
1108        (WTF::FastMallocZone::zoneMalloc):
1109        (WTF::FastMallocZone::zoneCalloc):
1110        (WTF::FastMallocZone::zoneFree):
1111        (WTF::FastMallocZone::zoneRealloc):
1112        (WTF::):
1113        (WTF::FastMallocZone::FastMallocZone): Create and register our zone with the system.
1114        (WTF::FastMallocZone::init):
1115        * wtf/MallocZoneSupport.h: Added.
1116        (WTF::RemoteMemoryReader::RemoteMemoryReader): A helper class to ease the process of mapping memory in a different process into
1117        our local address space
1118        (WTF::RemoteMemoryReader::operator()):
1119        * wtf/TCPageMap.h:
1120        (TCMalloc_PageMap2::visit): Walk over the heap and visit each allocated span.
1121        (TCMalloc_PageMap3::visit): Ditto.
1122
11232007-08-02  Mark Rowe  <mrowe@apple.com>
1124
1125        Build fix.
1126
1127        * kjs/ustring.cpp:
1128        (KJS::UString::expandedSize):  Use std::numeric_limits<size_t>::max() rather than the non-portable SIZE_T_MAX.
1129
11302007-08-02  Mark Rowe  <mrowe@apple.com>
1131
1132        Reviewed by Maciej.
1133
1134        <rdar://problem/5352887> "Out of memory" error during repeated JS string concatenation leaks hundreds of MBs of RAM
1135
1136        A call to fastRealloc was failing which lead to UString::expandCapacity leaking the buffer it was trying to reallocate.
1137        It also resulted in the underlying UString::rep having both a null baseString and buf field, which meant that attempting
1138        to access the contents of the string after the failed memory reallocation would crash.
1139
1140        A third issue is that expandedSize size was calculating the new length in a way that led to an integer overflow occurring.
1141        Attempting to allocate a string more than 190,000,000 characters long would fail a the integer overflow would lead to a
1142        memory allocation of around 3.6GB being attempted rather than the expected 390MB.  Sizes that would lead to an overflow
1143        are now  returned as zero and callers are updated to treat this as though the memory allocation has failed.
1144
1145        * kjs/array_object.cpp:
1146        (ArrayProtoFunc::callAsFunction): Check whether the append failed and raise an "Out of memory" exception if it did.
1147        * kjs/ustring.cpp:
1148        (KJS::allocChars): Wrapper around fastMalloc that takes a length in characters.  It will return 0 when asked to allocate a zero-length buffer.
1149        (KJS::reallocChars): Wrapper around fastRealloc that takes a length in characters.  It will return 0 when asked to allocate a zero-length buffer.
1150        (KJS::UString::expandedSize): Split the size calculation in two and guard against overflow during each step.
1151        (KJS::UString::expandCapacity): Don't leak r->buf if reallocation fails.  Instead free the memory and use the null representation.
1152        (KJS::UString::expandPreCapacity): If fastMalloc fails then use the null representation rather than crashing in memcpy.
1153        (KJS::UString::UString): If calls to expandCapacity, expandPreCapacity or fastMalloc fail then use the null representation rather than crashing in memcpy.
1154        (KJS::UString::append): Ditto.
1155        (KJS::UString::operator=): Ditto.
1156        * kjs/ustring.h: Change return type of expandedSize from int to size_t.
1157
11582007-08-01  Darin Adler  <darin@apple.com>
1159
1160        Reviewed by Kevin McCullough.
1161
1162        - fix <rdar://problem/5375186> pointers to pieces of class definition passed to JSClassCreate should all be const
1163
1164        * API/JSObjectRef.h: Added const.
1165
1166        * API/JSClassRef.cpp:
1167        (OpaqueJSClass::OpaqueJSClass): Added const.
1168        (OpaqueJSClass::create): Added const.
1169        * API/JSObjectRef.cpp:
1170        (JSClassCreate): Added const.
1171
11722007-08-01  Steve Falkenburg  <sfalken@apple.com>
1173
1174        Build mod: Fix sln to match configs in vcproj.
1175        
1176        Reviewed by Adam.
1177
1178        * JavaScriptCore.vcproj/JavaScriptCore.make:
1179        * JavaScriptCore.vcproj/JavaScriptCore.sln:
1180
11812007-07-30  Simon Hausmann  <hausmann@kde.org>
1182
1183        Done with and reviewed by Lars.
1184
1185        Removed the __BUILDING_QT ifdef in JSStringRef.h and changed UChar for the Qt build to use wchar_t on Windows.
1186
1187        * API/JSStringRef.h:
1188        * wtf/unicode/qt4/UnicodeQt4.h:
1189
11902007-07-27  Simon Hausmann  <hausmann@kde.org>
1191
1192        Done with and reviewed by Lars and Zack.
1193
1194        Always define JSChar to be unsigned short for the Qt builds, to ensure compatibility with UChar.
1195
1196        * API/JSStringRef.h:
1197
11982007-07-27  Simon Hausmann  <hausmann@kde.org>
1199
1200        Done with and reviewed by Lars and Zack.
1201
1202        Fix compilation with Qt on Windows with MingW: Implemented currentThreadStackBase() for this platform.
1203
1204        * kjs/collector.cpp:
1205        (KJS::currentThreadStackBase):
1206
12072007-07-27  Simon Hausmann  <hausmann@kde.org>
1208
1209        Done with and reviewed by Lars and Zack.
1210
1211        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.
1212
1213        * kjs/DateMath.cpp:
1214        (KJS::getDSTOffsetSimple):
1215
12162007-07-27  Simon Hausmann  <hausmann@kde.org>
1217
1218        Done with and reviewed by Lars and Zack.
1219
1220        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.
1221
1222        * JavaScriptCore.pri:
1223
12242007-07-27  Simon Hausmann  <hausmann@kde.org>
1225
1226        Done with and reviewed by Lars and Zack.
1227
1228        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.
1229
1230        * kjs/interpreter.cpp:
1231        (KJS::getCurrentTime):
1232        * kjs/testkjs.cpp:
1233        (StopWatch::start):
1234        (StopWatch::stop):
1235
12362007-07-27  Simon Hausmann  <hausmann@kde.org>
1237
1238        Done with and reviewed by Lars and Zack.
1239
1240        Replace the use of snprintf with QByteArray to compile under msvc 2005 express.
1241
1242        * bindings/qt/qt_instance.cpp:
1243        (KJS::Bindings::QtInstance::stringValue):
1244
12452007-07-27  Simon Hausmann  <hausmann@kde.org>
1246
1247        Done with and reviewed by Lars and Zack.
1248
1249        Don't use pthread.h unless thread support is enabled.
1250
1251        * kjs/collector.cpp:
1252        (KJS::Collector::registerAsMainThread):
1253        (KJS::onMainThread):
1254
12552007-07-27  Simon Hausmann  <hausmann@kde.org>
1256
1257        Done with and reviewed by Lars and Zack.
1258
1259        Removed TCSystemMalloc from the Qt build, it's not necessary it seems.
1260
1261        * JavaScriptCore.pri:
1262
12632007-07-27  Simon Hausmann  <hausmann@kde.org>
1264
1265        Done with and reviewed by Lars and Zack.
1266
1267        Added os-win32 to the include search path for the Qt windows build in order to provide the fake stdint.h header file.
1268
1269        * JavaScriptCore.pri:
1270
12712007-07-25  Maciej Stachowiak  <mjs@apple.com>
1272
1273        Reviewed by Mark.
1274
1275        - follow-up to previous change
1276        
1277        * kjs/ustring.cpp:
1278        (KJS::UString::operator=): Make sure to reset the length when
1279        replacing the buffer contents for a single-owned string.
1280
12812007-07-25  Maciej Stachowiak  <mjs@apple.com>
1282
1283        Reviewed by Darin.
1284        
1285        - JavaScriptCore part of fix for <rdar://problem/5300291> Optimize GC to reclaim big, temporary objects (like XMLHttpRequest.responseXML) quickly
1286        
1287        Also, as a side effect of optimizations included in this patch:
1288        - 7% speedup on JavaScript iBench
1289        - 4% speedup on "Celtic Kane" JS benchmark
1290        
1291        The basic idea is explained in a big comment in collector.cpp. When unusually 
1292        large objecs are allocated, we push the next GC closer on the assumption that
1293        most objects are short-lived.
1294        
1295        I also did the following two optimizations in the course of tuning
1296        this not to be a performance regression:
1297
1298        1) Change UString::Rep to hold a self-pointer as the baseString in
1299        the unshared case, instead of a null pointer; this removes a
1300        number of null checks in hot code because many places already
1301        wanted to use the rep itself or the baseString as appropriate.
1302        
1303        2) Avoid creating duplicate StringImpls when creating a
1304        StringInstance (the object wrapper for a JS string) or calling
1305        their methods. Since a temporary wrapper object is made every time
1306        a string method is called, this resulted in two useless extra
1307        StringImpls being allocated for no reason whenever a String method
1308        was invoked on a string value. Now we bypass those.
1309        
1310        * kjs/collector.cpp:
1311        (KJS::):
1312        (KJS::Collector::recordExtraCost): Basics of the extra cost mechanism.
1313        (KJS::Collector::allocate): ditto
1314        (KJS::Collector::collect): ditto
1315        * kjs/collector.h:
1316        (KJS::Collector::reportExtraMemoryCost): ditto
1317        * kjs/array_object.cpp:
1318        (ArrayInstance::ArrayInstance): record extra cost
1319        * kjs/internal.cpp:
1320        (KJS::StringImp::toObject): don't create a whole new StringImpl just
1321        to be the internal value of a StringInstance! StringImpls are immutable
1322        so there's no point tot his.
1323        * kjs/internal.h:
1324        (KJS::StringImp::StringImp): report extra cost
1325        * kjs/string_object.cpp:
1326        (KJS::StringInstance::StringInstance): new version that takes a StringImp
1327        (KJS::StringProtoFunc::callAsFunction): don't create a whole new StringImpl
1328        just to convert self to string! we already have one in the internal value
1329        * kjs/string_object.h: report extra cost        
1330        * kjs/ustring.cpp: All changes to handle baseString being self instead of null in the 
1331        unshared case.
1332        (KJS::):
1333        (KJS::UString::Rep::create):
1334        (KJS::UString::Rep::destroy):
1335        (KJS::UString::usedCapacity):
1336        (KJS::UString::usedPreCapacity):
1337        (KJS::UString::expandCapacity):
1338        (KJS::UString::expandPreCapacity):
1339        (KJS::UString::UString):
1340        (KJS::UString::append):
1341        (KJS::UString::operator=):
1342        (KJS::UString::copyForWriting):
1343        * kjs/ustring.h:
1344        (KJS::UString::Rep::baseIsSelf): new method, now that baseString is
1345        self instead of null in the unshared case we can't just null check.
1346        (KJS::UString::Rep::data): adjusted as mentioned above
1347        (KJS::UString::cost): new method to compute the cost for a UString, for
1348        use by StringImpl.
1349
1350        * kjs/value.cpp:
1351        (KJS::jsString): style fixups.
1352        (KJS::jsOwnedString): new method, use this for strings allocated from UStrings
1353        held by the parse tree. Tracking their cost as part of string cost is pointless,
1354        because garbage collecting them will not actually free the relevant string buffer.
1355        * kjs/value.h: prototyped jsOwnedString.
1356        * kjs/nodes.cpp:
1357        (StringNode::evaluate): use jsOwnedString as appropriate
1358        (RegExpNode::evaluate): ditto
1359        (PropertyNameNode::evaluate): ditto
1360        (ForInNode::execute): ditto
1361        
1362        * JavaScriptCore.exp: Exported some new symbols.
1363
13642007-07-23  Anders Carlsson  <andersca@apple.com>
1365
1366        Reviewed by Geoff.
1367
1368        <rdar://problem/5121461> REGRESSION: Unable to load JigZone puzzle
1369        
1370        * bindings/jni/jni_jsobject.cpp:
1371        (JavaJSObject::createNative):
1372        
1373        Call RootObject::gcProtect on the global object, thereby putting it in the
1374        "protect count" set which is used for checking if a native handle is valid.
1375        
13762007-07-23  Darin Adler  <darin@apple.com>
1377
1378        * pcre/pcre_compile.c: Roll back a tiny accidental change in the unused !JAVASCRIPT
1379        side of an #ifdef. This has no effect when using PCRE in JAVASCRIPT mode as we do,
1380        but seems worth rolling back.
1381
13822007-07-23  Maciej Stachowiak  <mjs@apple.com>
1383
1384        Reviewed by Oliver.
1385        
1386        - fix remaining problems with Window shadowing
1387
1388        * kjs/nodes.cpp:
1389        (VarDeclNode::evaluate): Tweak the special case a little.
1390
13912007-07-23  Maciej Stachowiak  <mjs@apple.com>
1392
1393        Reviewed by Oliver.
1394        
1395        - fix Window shadowing regressions caused by the previous commit.
1396
1397        * kjs/nodes.cpp:
1398        (VarDeclNode::evaluate): Handle the case of global scope specially.
1399
14002007-07-22  Maciej Stachowiak  <mjs@apple.com>
1401
1402        Reviewed by Darin.
1403
1404        -fixed <rdar://problem/5353293> REGRESSION (r24287): 1% i-Bench JS slowdown from JavaScript compatibility fix (14719)
1405        http://bugs.webkit.org/show_bug.cgi?id=14719
1406        
1407        My fix for this actually resulted in JS iBench being 1% faster than before the regression
1408        and the Celtic Kane benchmark being 5% faster than before the regression.
1409        
1410        * kjs/nodes.cpp:
1411        (VarDeclNode::handleSlowCase): factored out the slow code path to be out of line.
1412        (VarDeclNode::evaluate): I did a couple of things:
1413        (1) Don't check if the variable is already declared by looking for the property in
1414        the variable object, that code path was dead code.
1415        (2) Special-case the common case where the top of the scope and the variable object
1416        are the same; in that case the variable must always be in the variable object.
1417        (3) Don't return a jsString() of the variable name, nothing uses the return value
1418        from this node types evaluate method.
1419        * kjs/nodes.h:
1420
14212007-07-22  Darin Adler  <darin@apple.com>
1422
1423        Reviewed by Kevin Decker.
1424
1425        - fix <rdar://problem/5126394> REGRESSION: Crash after clicking back button in test application (13250)
1426          http://bugs.webkit.org/show_bug.cgi?id=13250
1427
1428        * bindings/objc/objc_utility.mm: (KJS::Bindings::convertObjcValueToValue):
1429        If the object returns 0 for _imp, convert that to "undefined", since callers
1430        can't cope with a JSValue of 0.
1431
14322007-07-19  Geoffrey Garen  <ggaren@apple.com>
1433
1434        Reviewed by Darin Adler.
1435        
1436        Fixed http://bugs.webkit.org/show_bug.cgi?id=10880 | <rdar://problem/5335694>
1437        REGRESSION: JavaScript menu doesn't appear on pricepoint.com (14595)
1438        
1439        Though the ECMA spec says auto-semicolon insertion should not occur
1440        without a newline or '}', Firefox treats do-while specially, and the
1441        library used by pricepoint.com requires that special treatment.
1442        
1443        * JavaScriptCore.xcodeproj/project.pbxproj:
1444        * kjs/grammar.y:
1445
14462007-07-19  Darin Adler  <darin@apple.com>
1447
1448        Reviewed by Geoff.
1449
1450        - fix <rdar://problem/5345440> PCRE computes wrong length for expressions with quantifiers
1451          on named recursion or subexpressions
1452
1453        It's challenging to implement proper preflighting for compiling these advanced features.
1454        But we don't want them in the JavaScript engine anyway.
1455
1456        Turned off the following features of PCRE (some of these are simply parsed and not implemented):
1457
1458            \C \E \G \L \N \P \Q \U \X \Z
1459            \e \l \p \u \z
1460            [::] [..] [==]
1461            (?#) (?<=) (?<!) (?>)
1462            (?C) (?P) (?R)
1463            (?0) (and 1-9)
1464            (?imsxUX)
1465
1466        Added the following:
1467
1468            \u \v
1469
1470        Because of \v, the js1_2/regexp/special_characters.js test now passes.
1471
1472        To be conservative, I left some features that JavaScript doesn't want, such as
1473        \012 and \x{2013}, in place. We can revisit these later; they're not directly-enough
1474        related to avoiding the incorrect preflighting.
1475
1476        I also didn't try to remove unused opcodes and remove code from the execution engine.
1477        That could save code size and speed things up a bit, but it would require more changes.
1478
1479        * kjs/regexp.h:
1480        * kjs/regexp.cpp: (KJS::RegExp::RegExp): Remove the sanitizePattern workaround for
1481        lack of \u support, since the PCRE code now has \u support.
1482
1483        * pcre/pcre-config.h: Set JAVASCRIPT to 1.
1484        * pcre/pcre_internal.h: Added ESC_v.
1485
1486        * pcre/pcre_compile.c: Added a different escape table for when JAVASCRIPT is set that
1487        omits all the escapes we don't want interpreted and includes '\v'.
1488        (check_escape): Put !JAVASCRIPT around the code for '\l', '\L', '\N', '\u', and '\U',
1489        and added code to handle '\u2013' inside JAVASCRIPT.
1490        (compile_branch): Put !JAVASCRIPT if around all the code implementing the features we
1491        don't want.
1492        (pcre_compile2): Ditto.
1493
1494        * tests/mozilla/expected.html: Updated since js1_2/regexp/special_characters.js now
1495        passes.
1496
14972007-07-18  Darin Adler  <darin@apple.com>
1498
1499        Reviewed by Oliver Hunt.
1500
1501        - fix <rdar://problem/5345432> PCRE computes length wrong for expressions such as "[**]"
1502
1503        Test: fast/js/regexp-charclass-crash.html
1504
1505        * pcre/pcre_compile.c: (pcre_compile2): Fix the preflight code that calls
1506        check_posix_syntax to match the actual regular expression compilation code;
1507        before it was missing the check of the first character.
1508
15092007-07-19  Holger Hans Peter Freyther  <zecke@selfish.org>
1510
1511        Reviewed by Mark.
1512
1513        Define __BUILDING_GDK when building for Gdk to fix building testkjs on OSX.
1514
1515        * JavaScriptCore.pri:
1516
15172007-07-18  Simon Hausmann  <hausmann@kde.org>
1518
1519        * Fix the Qt build, call dftables from the right directory.
1520
1521        Reviewed by Adam Treat.
1522
1523        * pcre/pcre.pri:
1524
15252007-07-18  Simon Hausmann  <hausmann@kde.org>
1526
1527        Reviewed by Zack.
1528
1529        Don't call gcc directly when building the dftables tool but use a separate .pro file for the Qt build.
1530
1531        * pcre/dftables.pro: Added.
1532        * pcre/pcre.pri:
1533
15342007-07-17  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
1535
1536        Reviewed by Darin, Maciej, and Adam.
1537
1538        Fixes <http://bugs.webkit.org/show_bug.cgi?id=9697>,
1539              the failure of ecma/GlobalObject/15.1.2.2-2.js,
1540              the failure of ecma/LexicalConventions/7.7.3-1.js,
1541              and most of the failures of tests in ecma/TypeConversion/9.3.1-3.js.
1542
1543        Bug 9697: parseInt results may be inaccurate for numbers greater than 2^53
1544
1545        This patch also fixes similar issues in the lexer and UString::toDouble().
1546
1547        * kjs/function.cpp:
1548        (KJS::parseIntOverflow):
1549        (KJS::parseInt):
1550        * kjs/function.h:
1551        * kjs/lexer.cpp:
1552        (KJS::Lexer::lex):
1553        * kjs/ustring.cpp:
1554        (KJS::UString::toDouble):
1555        * tests/mozilla/expected.html:
1556
15572007-07-16  Sam Weinig  <sam@webkit.org>
1558
1559        Reviewed by Oliver.
1560
1561        Turn off -Wshorten-64-to-32 warning for 64-bit builds.
1562
1563        * Configurations/Base.xcconfig:
1564
15652007-07-14  Brady Eidson  <beidson@apple.com>
1566
1567        Reviewed by Sam Weinig
1568
1569        Initial check-in for <rdar://problem/3154486> - Supporting FTP directory listings in the browser
1570
1571        * wtf/Platform.h: Add ENABLE_FTPDIR feature to handle building on platforms that don't have the
1572          proper network-layer support
1573
15742007-07-14  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
1575
1576        Reviewed by Darin.
1577
1578        Fixes http://bugs.webkit.org/show_bug.cgi?id=13517,
1579              http://bugs.webkit.org/show_bug.cgi?id=14237, and
1580              the failure of test js1_5/Scope/regress-185485.js
1581
1582        Bug 13517: DOM Exception 8 in finance.aol.com sub-page
1583        Bug 14237: Javascript "var" statement interprets initialization in the topmost function scope
1584
1585        * kjs/nodes.cpp:
1586        (VarDeclNode::evaluate):
1587        * tests/mozilla/expected.html:
1588
15892007-07-12  Alexey Proskuryakov  <ap@webkit.org>
1590
1591        Reviewed by Mitz.
1592
1593        http://bugs.webkit.org/show_bug.cgi?id=14596
1594        Fix JSC compilation with KJS_VERBOSE.
1595
1596        * kjs/function.cpp:
1597        (KJS::FunctionImp::passInParameters):
1598
15992007-07-11  George Staikos  <staikos@kde.org>
1600
1601        Make it compile.
1602
1603        * ForwardingHeaders: Added.
1604        * ForwardingHeaders/JavaScriptCore: Added.
1605        * ForwardingHeaders/JavaScriptCore/APICast.h: Added.
1606        * ForwardingHeaders/JavaScriptCore/JSBase.h: Added.
1607        * ForwardingHeaders/JavaScriptCore/JSContextRef.h: Added.
1608        * ForwardingHeaders/JavaScriptCore/JSLock.h: Added.
1609        * ForwardingHeaders/JavaScriptCore/JSObjectRef.h: Added.
1610        * ForwardingHeaders/JavaScriptCore/JSStringRef.h: Added.
1611        * ForwardingHeaders/JavaScriptCore/JSStringRefCF.h: Added.
1612        * ForwardingHeaders/JavaScriptCore/JSValueRef.h: Added.
1613        * ForwardingHeaders/JavaScriptCore/JavaScriptCore.h: Added.
1614
16152007-07-11  Holger Hans Peter Freyther  <zecke@selfish.org>
1616
1617        Reviewed by Darin.
1618
1619        As of http://bugs.webkit.org/show_bug.cgi?id=14527 move the
1620        WebCore/ForwardingHeader/JavaScriptCore to JavaScriptCore
1621
1622        * ForwardingHeaders: Added.
1623        * ForwardingHeaders/JavaScriptCore: Copied from WebCore/ForwardingHeaders/JavaScriptCore.
1624
16252007-07-11  Nikolas Zimmermann  <zimmermann@kde.org>
1626
1627        Reviewed by Mark.
1628
1629        Forwardport the hash table fix from CodeGeneratorJS.pm to create_hash_table.
1630        Reran run-jsc-tests, couldn't find any regressions. Suggested by Darin.
1631
1632        * kjs/create_hash_table:
1633
16342007-07-09  Maciej Stachowiak  <mjs@apple.com>
1635
1636        Reviewed by Oliver.
1637        
1638        - 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
1639        
1640        * JavaScriptCore.exp: Added needed export.
1641
16422007-07-06  Maciej Stachowiak  <mjs@apple.com>
1643
1644        Reviewed by Antti.
1645
1646        - <rdar://problem/5311093> JavaScriptCore fails to build with strict-aliasing warnings
1647        
1648        * Configurations/Base.xcconfig: Re-enable -Wstrict-aliasing
1649        * bindings/jni/jni_utility.cpp:
1650        (KJS::Bindings::getJNIEnv): Type-pun via a union instead of a pointer cast.
1651        * wtf/HashMap.h:
1652        (WTF::): Instead of doing type-punned assignments via pointer cast, do one of three things:
1653        (1) assign directly w/o cast if storage type matches real type; (2) assign using cast
1654        via union if type does not need reffing; (3) copy with memcpy and ref/deref manually if type
1655        needs reffing. This is ok peref-wise because memcpy of a constant length gets optomized.
1656        HashTraits are now expected to make ref()/deref() take the storage type, not the true type.
1657        * wtf/HashSet.h:
1658        (WTF::): Same basic idea.
1659        * wtf/HashTable.h:
1660        (WTF::): Added Assigner template for use by HashMap/HashSet. Change RefCounter to call ref()
1661        and deref() via storage type, avoiding the need to
1662        type-pun.
1663        (WTF::RefCounter::ref): ditto
1664        (WTF::RefCounter::deref): ditto
1665        * wtf/HashTraits.h:
1666        (WTF::): Change ref() and deref() for RefPtr HashTraits to take the storage type; cast
1667        via union to pointer type.
1668        * wtf/FastMalloc.cpp:
1669        (WTF::TCMalloc_PageHeap::init): Changed from constructor to init function so this can go in a union.
1670        (WTF::): redefine pageheap macro in terms of getPageHeap().
1671        (WTF::getPageHeap): new inline function, helper for pageheap macro. This hides the cast in a union.
1672        (WTF::TCMalloc_ThreadCache::InitModule): Call init() instead of using placement new to initialize page
1673        heap.
1674        * wtf/TCPageMap.h:
1675        (TCMalloc_PageMap1::init): Changed from constructor to init function.
1676        (TCMalloc_PageMap2::init): ditto
1677        (TCMalloc_PageMap3::init): ditto
1678
1679
16802007-07-06  George Staikos  <staikos@kde.org>
1681
1682        Reviewed by Maciej.
1683
1684        Switch USE(ICONDATABASE) to ENABLE(ICONDATABASE)
1685
1686        * wtf/Platform.h:
1687
16882007-07-03  Sam Weinig  <sam@webkit.org>
1689
1690        Reviewed by Darin.
1691
1692        Eleventh round of fixes for implicit 64-32 bit conversion errors.
1693        <rdar://problem/5292262>
1694
1695        - Fixes a real bug where where we were setting long long and unsigned long long
1696          values to a long field.
1697
1698        * bindings/objc/objc_utility.mm:
1699        (KJS::Bindings::convertValueToObjcValue):
1700
17012007-07-03  Sam Weinig  <sam@webkit.org>
1702
1703        Reviewed by Brady Eidson.
1704
1705        Tenth round of fixes for implicit 64-32 bit conversion errors.
1706        <rdar://problem/5292262>
1707
1708        - Add explicit casts.
1709
1710        * kjs/dtoa.cpp:
1711        (Bigint::):
1712
17132007-07-02  Sam Weinig  <sam@webkit.org>
1714
1715        Reviewed by Kevin McCullough.
1716
1717        Fourth round of fixes for implicit 64-32 bit conversion errors.
1718        <rdar://problem/5292262>
1719
1720        Add custom piDouble and piFloat constants to use instead of M_PI.
1721
1722        * kjs/math_object.cpp:
1723        (MathObjectImp::getValueProperty):
1724        * wtf/MathExtras.h:
1725        (wtf_atan2):
1726
17272007-06-29  Sam Weinig  <sam@webkit.org>
1728
1729        Reviewed by Darin.
1730
1731        Second pass at fixing implicit 64-32 bit conversion errors.
1732        <rdar://problem/5292262>
1733
1734        - Add a toFloat() method to JSValue for float conversion.
1735
1736        * JavaScriptCore.exp:
1737        * kjs/value.cpp:
1738        (KJS::JSValue::toFloat):
1739        * kjs/value.h:
1740
17412007-06-27  Kevin McCullough  <kmccullough@apple.com>
1742
1743        Reviewed by Darin.
1744
1745        - <rdar://problem/5271937> REGRESSION: Apparent WebKit JavaScript memory smasher when submitting comment to iWeb site (crashes in kjs_pcre_compile2)
1746        - Correctly evaluate the return value of _pcre_ucp_findchar.
1747
1748        * pcre/pcre_compile.c:
1749        (compile_branch):
1750        * pcre/pcre_exec.c:
1751        (match):
1752
17532007-06-27  Sam Weinig  <sam@webkit.org>
1754
1755        Reviewed by Darin.
1756
1757        First pass at fixing implicit 64-32 bit conversion errors.
1758        <rdar://problem/5292262>
1759
1760        - Add 'f' suffix where necessary.
1761
1762        * kjs/testkjs.cpp:
1763        (StopWatch::getElapsedMS):
1764
17652007-06-26  Geoffrey Garen  <ggaren@apple.com>
1766
1767        Reviewed by Maciej Stachowiak.
1768        
1769        Fixed <rdar://problem/5296627> JSGarbageCollect headerdoc suggests that 
1770        using JavaScriptCore requires leaking memory
1771
1772        * API/JSBase.h: Changed documentation to explain that you can pass NULL
1773        to JSGarbageCollect.
1774
17752007-06-26  Adam Treat  <adam@staikos.net>
1776
1777        Reviewed by Adam Roben.
1778
1779        Make the SQLite icon database optional.
1780
1781        * wtf/Platform.h:
1782
17832007-06-15  George Staikos  <staikos@kde.org>
1784
1785        More missing files for Qt.
1786
1787        * JavaScriptCore.pri:
1788        * kjs/testkjs.pro:
1789
17902007-06-15  George Staikos  <staikos@kde.org>
1791
1792        Another Qt build fix.
1793
1794        * JavaScriptCore.pri:
1795        * kjs/testkjs.pro:
1796
17972007-06-15  George Staikos  <staikos@kde.org>
1798
1799        Fixing Qt build.
1800
1801        * JavaScriptCore.pri:
1802
18032007-06-20  Mark Rowe  <mrowe@apple.com>
1804
1805        Reviewed by Mitz.
1806
1807        Fix http://bugs.webkit.org/show_bug.cgi?id=14244
1808        Bug 14244: Data corruption when using a replace() callback function with data containing "$"
1809
1810        * kjs/string_object.cpp:
1811        (KJS::replace):  When 'replacement' is a function, do not replace $n placeholders in its return value.
1812        This matches the behaviour described in ECMA 262 3rd Ed section 15.5.4.1, and as implemented in Firefox.
1813
18142007-06-14  Anders Carlsson  <andersca@apple.com>
1815
1816        Fix Windows build.
1817        
1818        * bindings/runtime_object.cpp:
1819        (RuntimeObjectImp::canPut):
1820
18212007-06-14  Anders Carlsson  <andersca@apple.com>
1822
1823        Reviewed by Darin.
1824
1825        <rdar://problem/5103077> 
1826        Crash at _NPN_ReleaseObject when quitting page at http://eshop.macsales.com/shop/ModBook
1827        
1828        <rdar://problem/5183692>
1829        http://bugs.webkit.org/show_bug.cgi?id=13547
1830        REGRESSION: Crash in _NPN_ReleaseObject when closing Safari on nba.com (13547)
1831        
1832        <rdar://problem/5261499>
1833        CrashTracer: [USER] 75 crashes in Safari at com.apple.JavaScriptCore: KJS::Bindings::CInstance::~CInstance + 40
1834        
1835        Have the root object track all live instances of RuntimeObjectImp. When invalidating 
1836        the root object, also invalidate all live runtime objects by zeroing out their instance ivar.
1837        This prevents instances from outliving their plug-ins which lead to crashes.
1838        
1839        * bindings/c/c_utility.cpp:
1840        (KJS::Bindings::convertValueToNPVariant):
1841        * bindings/jni/jni_jsobject.cpp:
1842        (JavaJSObject::convertValueToJObject):
1843        * bindings/jni/jni_utility.cpp:
1844        (KJS::Bindings::convertValueToJValue):
1845        * bindings/objc/objc_runtime.mm:
1846        (ObjcFallbackObjectImp::callAsFunction):
1847        * bindings/runtime_array.cpp:
1848        (RuntimeArray::RuntimeArray):
1849        * bindings/runtime_array.h:
1850        (KJS::RuntimeArray::getConcreteArray):
1851        * bindings/runtime_method.cpp:
1852        (RuntimeMethod::callAsFunction):
1853        * bindings/runtime_method.h:
1854        * bindings/runtime_object.cpp:
1855        (RuntimeObjectImp::RuntimeObjectImp):
1856        (RuntimeObjectImp::~RuntimeObjectImp):
1857        (RuntimeObjectImp::invalidate):
1858        (RuntimeObjectImp::fallbackObjectGetter):
1859        (RuntimeObjectImp::fieldGetter):
1860        (RuntimeObjectImp::methodGetter):
1861        (RuntimeObjectImp::getOwnPropertySlot):
1862        (RuntimeObjectImp::put):
1863        (RuntimeObjectImp::canPut):
1864        (RuntimeObjectImp::defaultValue):
1865        (RuntimeObjectImp::implementsCall):
1866        (RuntimeObjectImp::callAsFunction):
1867        (RuntimeObjectImp::getPropertyNames):
1868        (RuntimeObjectImp::throwInvalidAccessError):
1869        * bindings/runtime_object.h:
1870        * bindings/runtime_root.cpp:
1871        (KJS::Bindings::RootObject::invalidate):
1872        (KJS::Bindings::RootObject::addRuntimeObject):
1873        (KJS::Bindings::RootObject::removeRuntimeObject):
1874        * bindings/runtime_root.h:
1875
18762007-06-14  Anders Carlsson  <andersca@apple.com>
1877
1878        Reviewed by Mitz.
1879
1880        <rdar://problem/5244948>
1881        Safari keeps on complaining about slow script playing NBC TV video (14133)
1882
1883        http://bugs.webkit.org/show_bug.cgi?id=14133
1884        Runaway JavaScript timer fires when spinning around in Google Maps street view
1885
1886        Make sure to start and stop the timeout checker around calls to JS.
1887        
1888        * bindings/NP_jsobject.cpp:
1889        (_NPN_InvokeDefault):
1890        (_NPN_Invoke):
1891        (_NPN_Evaluate):
1892        * bindings/jni/jni_jsobject.cpp:
1893        (JavaJSObject::call):
1894        (JavaJSObject::eval):
1895
18962007-06-13  Darin Adler  <darin@apple.com>
1897
1898        Reviewed by Mark Rowe.
1899
1900        - fix http://bugs.webkit.org/show_bug.cgi?id=14132
1901          array sort with > 10000 elements sets elements > 10000 undefined
1902
1903        Test: fast/js/sort-large-array.html
1904
1905        * kjs/array_instance.h: Replaced pushUndefinedObjectsToEnd with
1906        compactForSorting, and removed ExecState parameters.
1907
1908        * kjs/array_object.cpp:
1909        (ArrayInstance::sort): Changed to call compactForSorting.
1910        (ArrayInstance::compactForSorting): Do the get and delete of the
1911        properties directly on the property map instead of using public
1912        calls from JSObject. The public calls would just read the undefined
1913        values from the compacted sort results array!
1914
19152007-06-13  George Staikos  <staikos@kde.org>
1916
1917        Reviewed by Lars.
1918
1919        Fix Mac OS X build after last checkin.
1920
1921        * wtf/FastMalloc.h:
1922
19232007-06-14  Lars Knoll <lars@trolltech.com>
1924
1925        Reviewed by Maciej.
1926
1927        Disable FastMalloc for the Qt build and make sure we
1928        don't reimplement the global new/delete operators
1929        when using the system malloc.
1930
1931        * wtf/FastMalloc.cpp:
1932        * wtf/FastMalloc.h:
1933        * wtf/Platform.h:
1934
19352007-06-13  Anders Carlsson  <andersca@apple.com>
1936
1937        Reviewed by Geoff.
1938
1939        Make sure that bindings instances get correct root objects.
1940        
1941        * JavaScriptCore.exp:
1942        * bindings/NP_jsobject.cpp:
1943        (listFromVariantArgs):
1944        (_NPN_InvokeDefault):
1945        (_NPN_Invoke):
1946        (_NPN_SetProperty):
1947        * bindings/c/c_instance.cpp:
1948        (KJS::Bindings::CInstance::invokeMethod):
1949        (KJS::Bindings::CInstance::invokeDefaultMethod):
1950        * bindings/c/c_runtime.cpp:
1951        (KJS::Bindings::CField::valueFromInstance):
1952        * bindings/c/c_utility.cpp:
1953        (KJS::Bindings::convertNPVariantToValue):
1954        * bindings/c/c_utility.h:
1955        * bindings/objc/objc_instance.mm:
1956        (ObjcInstance::invokeMethod):
1957        (ObjcInstance::invokeDefaultMethod):
1958        (ObjcInstance::getValueOfUndefinedField):
1959        * bindings/objc/objc_runtime.mm:
1960        (ObjcField::valueFromInstance):
1961        (ObjcArray::valueAt):
1962        * bindings/objc/objc_utility.h:
1963        * bindings/objc/objc_utility.mm:
1964        (KJS::Bindings::convertObjcValueToValue):
1965        * bindings/runtime.h:
1966
19672007-06-13  Simon Hausmann  <hausmann@kde.org>
1968
1969        Reviewed by Lars.
1970
1971        * kjs/testkjs.pro: WebKitQt is now called QtWebKit.
1972
19732007-06-12  Anders Carlsson  <andersca@apple.com>
1974
1975        Another build fix.
1976        
1977        * bindings/qt/qt_instance.cpp:
1978        (KJS::Bindings::QtInstance::invokeMethod):
1979
19802007-06-12  Anders Carlsson  <andersca@apple.com>
1981
1982        Reviewed by Geoff.
1983
1984        Move the notion of field type to the JNI runtime since that's the only 
1985        one that was actually using it.
1986        
1987        * bindings/c/c_runtime.h:
1988        (KJS::Bindings::CField::CField):
1989        * bindings/jni/jni_runtime.h:
1990        * bindings/objc/objc_runtime.h:
1991        * bindings/objc/objc_runtime.mm:
1992        * bindings/qt/qt_runtime.h:
1993        * bindings/runtime.h:
1994        * bindings/runtime_method.cpp:
1995
19962007-06-12  Anders Carlsson  <andersca@apple.com>
1997
1998        Build fix.
1999        
2000        * bindings/qt/qt_class.cpp:
2001        (KJS::Bindings::QtClass::methodsNamed):
2002        * bindings/qt/qt_instance.cpp:
2003        (KJS::Bindings::QtInstance::invokeMethod):
2004
20052007-06-12  Anders Carlsson  <andersca@apple.com>
2006
2007        Reviewed by Oliver.
2008        
2009        Get rid of the MethodList class and use a good ol' Vector instead.
2010
2011        * bindings/c/c_class.cpp:
2012        (KJS::Bindings::CClass::methodsNamed):
2013        * bindings/c/c_instance.cpp:
2014        (KJS::Bindings::CInstance::invokeMethod):
2015        * bindings/jni/jni_class.cpp:
2016        (JavaClass::JavaClass):
2017        (JavaClass::~JavaClass):
2018        * bindings/jni/jni_instance.cpp:
2019        (JavaInstance::invokeMethod):
2020        * bindings/objc/objc_class.mm:
2021        (KJS::Bindings::ObjcClass::methodsNamed):
2022        * bindings/objc/objc_instance.mm:
2023        (ObjcInstance::invokeMethod):
2024        * bindings/objc/objc_runtime.mm:
2025        (ObjcFallbackObjectImp::callAsFunction):
2026        * bindings/runtime.cpp:
2027        * bindings/runtime.h:
2028        * bindings/runtime_method.cpp:
2029        (RuntimeMethod::lengthGetter):
2030        (RuntimeMethod::callAsFunction):
2031        * bindings/runtime_object.cpp:
2032        (RuntimeObjectImp::getOwnPropertySlot):
2033
20342007-06-12  Anders Carlsson  <andersca@apple.com>
2035
2036        Reviewed by Geoff.
2037
2038        Make RuntimeMethod's method list a pointer so that the object size doesn't
2039        grow beyond 32 bytes when we later will replace MethodList with a Vector.
2040        
2041        * bindings/runtime_method.cpp:
2042        (RuntimeMethod::RuntimeMethod):
2043        (RuntimeMethod::lengthGetter):
2044        (RuntimeMethod::callAsFunction):
2045        * bindings/runtime_method.h:
2046
20472007-06-12  Anders Carlsson  <andersca@apple.com>
2048
2049        Reviewed by Geoff.
2050
2051        Get rid of the Parameter class.
2052        
2053        * bindings/jni/jni_instance.cpp:
2054        (JavaInstance::invokeMethod):
2055        * bindings/jni/jni_runtime.cpp:
2056        (JavaMethod::signature):
2057        * bindings/jni/jni_runtime.h:
2058        (KJS::Bindings::JavaParameter::JavaParameter):
2059        (KJS::Bindings::JavaParameter::~JavaParameter):
2060        (KJS::Bindings::JavaParameter::type):
2061        (KJS::Bindings::JavaMethod::parameterAt):
2062        (KJS::Bindings::JavaMethod::numParameters):
2063        * bindings/runtime.h:
2064
20652007-06-12  Anders Carlsson  <andersca@apple.com>
2066
2067        Build fix.
2068        
2069        * bindings/qt/qt_class.h:
2070
20712007-06-12  Mark Rowe  <mrowe@apple.com>
2072
2073        Build fix.
2074
2075        * bindings/objc/objc_runtime.h:
2076
20772007-06-12  Anders Carlsson  <andersca@apple.com>
2078
2079        Reviewed by Geoff.
2080
2081        Get rid of Constructor and its only subclass JavaConstructor.
2082        
2083        * bindings/c/c_class.h:
2084        * bindings/jni/jni_class.cpp:
2085        (JavaClass::JavaClass):
2086        (JavaClass::~JavaClass):
2087        * bindings/jni/jni_class.h:
2088        * bindings/jni/jni_runtime.cpp:
2089        * bindings/jni/jni_runtime.h:
2090        * bindings/objc/objc_class.h:
2091        * bindings/runtime.h:
2092
20932007-06-12  Anders Carlsson  <andersca@apple.com>
2094
2095        Reviewed by Geoff.
2096
2097        Use RetainPtr throughout the bindings code.
2098        
2099        * bindings/objc/objc_class.h:
2100        * bindings/objc/objc_class.mm:
2101        (KJS::Bindings::ObjcClass::ObjcClass):
2102        (KJS::Bindings::ObjcClass::methodsNamed):
2103        (KJS::Bindings::ObjcClass::fieldNamed):
2104        * bindings/objc/objc_instance.h:
2105        (KJS::Bindings::ObjcInstance::getObject):
2106        * bindings/objc/objc_instance.mm:
2107        (ObjcInstance::ObjcInstance):
2108        (ObjcInstance::~ObjcInstance):
2109        (ObjcInstance::implementsCall):
2110        (ObjcInstance::invokeMethod):
2111        (ObjcInstance::invokeDefaultMethod):
2112        (ObjcInstance::defaultValue):
2113        * bindings/objc/objc_runtime.h:
2114        (KJS::Bindings::ObjcMethod::setJavaScriptName):
2115        (KJS::Bindings::ObjcMethod::javaScriptName):
2116        (KJS::Bindings::ObjcArray::getObjcArray):
2117        * bindings/objc/objc_runtime.mm:
2118        (ObjcField::name):
2119        (ObjcArray::ObjcArray):
2120        (ObjcArray::setValueAt):
2121        (ObjcArray::valueAt):
2122        (ObjcArray::getLength):
2123        * wtf/RetainPtr.h:
2124
21252007-06-12  Anders Carlsson  <andersca@apple.com>
2126
2127        Reviewed by Maciej.
2128
2129        Have JSCell inherit from Noncopyable.
2130        
2131        * bindings/objc/objc_runtime.h:
2132        * bindings/runtime_object.h:
2133        * kjs/value.h:
2134
21352007-06-12  Anders Carlsson  <andersca@apple.com>
2136
2137        Reviewed by Darin and Maciej.
2138
2139        More cleanup. Use our Noncopyable WTF class, add a root object member
2140        to the Array class.
2141        
2142        * bindings/c/c_class.h:
2143        * bindings/jni/jni_class.h:
2144        * bindings/jni/jni_instance.h:
2145        * bindings/jni/jni_runtime.cpp:
2146        (JavaArray::JavaArray):
2147        * bindings/jni/jni_runtime.h:
2148        * bindings/objc/objc_class.h:
2149        * bindings/objc/objc_runtime.h:
2150        * bindings/objc/objc_runtime.mm:
2151        (ObjcArray::ObjcArray):
2152        * bindings/objc/objc_utility.mm:
2153        (KJS::Bindings::convertObjcValueToValue):
2154        * bindings/runtime.cpp:
2155        (KJS::Bindings::Array::Array):
2156        (KJS::Bindings::Array::~Array):
2157        * bindings/runtime.h:
2158        * bindings/runtime_object.h:
2159        * bindings/runtime_root.h:
2160
21612007-06-08  Zack Rusin  <zrusin@trolltech.com>
2162
2163        Fix the Qt build
2164
2165        * bindings/qt/qt_instance.cpp:
2166        (KJS::Bindings::QtInstance::QtInstance):
2167        * bindings/qt/qt_instance.h:
2168
21692007-06-07  Anders Carlsson  <andersca@apple.com>
2170
2171        Reviewed by Geoff.
2172
2173        Get rid of Instance::setRootObject and pass the root object to the instance constructor instead.
2174        
2175        * bindings/c/c_instance.cpp:
2176        (KJS::Bindings::CInstance::CInstance):
2177        * bindings/c/c_instance.h:
2178        * bindings/jni/jni_instance.cpp:
2179        (JavaInstance::JavaInstance):
2180        * bindings/jni/jni_instance.h:
2181        * bindings/jni/jni_jsobject.cpp:
2182        (JavaJSObject::convertJObjectToValue):
2183        * bindings/objc/objc_instance.h:
2184        * bindings/objc/objc_instance.mm:
2185        (ObjcInstance::ObjcInstance):
2186        * bindings/runtime.cpp:
2187        (KJS::Bindings::Instance::Instance):
2188        (KJS::Bindings::Instance::createBindingForLanguageInstance):
2189        * bindings/runtime.h:
2190
21912007-06-07  Anders Carlsson  <andersca@apple.com>
2192
2193        Reviewed by Adam.
2194
2195        Don't use a JavaInstance to store the field when all we want to do is to keep the field
2196        from being garbage collected. Instead, use a JObjectWrapper.
2197        
2198        * bindings/jni/jni_instance.h:
2199        * bindings/jni/jni_runtime.cpp:
2200        (JavaField::JavaField):
2201        (JavaField::dispatchValueFromInstance):
2202        (JavaField::dispatchSetValueToInstance):
2203        * bindings/jni/jni_runtime.h:
2204        (KJS::Bindings::JavaField::JavaField):
2205        (KJS::Bindings::JavaField::operator=):
2206
22072007-05-30  Alp Toker  <alp.toker@collabora.co.uk>
2208
2209        Reviewed by Brady.
2210
2211        Enable logging in the Gdk port.
2212        http://bugs.webkit.org/show_bug.cgi?id=13936
2213
2214        * wtf/Assertions.cpp:
2215        * wtf/Assertions.h: Add WTFLogVerbose which also logs
2216        the file, line number and function.
2217
22182007-05-30  Mark Rowe  <mrowe@apple.com>
2219
2220        Mac build fix.  Update #include.
2221
2222        * API/JSCallbackFunction.h:
2223
22242007-05-30  Luciano Montanaro  <mikelima@cirulla.net>
2225
2226        Reviewed by Maciej.
2227
2228        - cross-port Harri Porten's commits 636099 and 636108 from KJS: 
2229        "publish a class anyway public already" and "class is being used from
2230        outside for quite some time" in preparation for further syncronizations
2231
2232        * kjs/context.h:
2233        * kjs/date_object.cpp:
2234        * kjs/date_object.h:
2235        * kjs/function.h:
2236        (KJS::):
2237        (KJS::InternalFunctionImp::classInfo):
2238        (KJS::InternalFunctionImp::functionName):
2239        * kjs/function_object.h:
2240        * kjs/internal.h:
2241        * kjs/lookup.h:
2242        (KJS::getStaticPropertySlot):
2243        (KJS::getStaticFunctionSlot):
2244        (KJS::getStaticValueSlot):
2245        * kjs/object_object.h:
2246
22472007-05-29  Sam Weinig  <sam@webkit.org>
2248
2249        Reviewed by Adam Roben.
2250
2251        Cleanup function and fix to match comparison API.
2252
2253        * kjs/string_object.cpp:
2254        (KJS::substituteBackreferences):
2255        (KJS::localeCompare):
2256
22572007-05-28  Geoffrey Garen  <ggaren@apple.com>
2258
2259        Slight clarification to an exception message.
2260
2261        * API/JSCallbackObject.cpp:
2262        (KJS::JSCallbackObject::put):
2263
22642007-05-27  Holger Freyther  <zecke@selfish.org>
2265
2266        Reviewed by Mark Rowe.
2267
2268        * wtf/Platform.h: Move Gdk up to allow building WebKit/Gdk on Darwin
2269
22702007-05-27  Darin Adler  <darin@apple.com>
2271
2272        - fix a couple ifdefs that said WIN instead of WIN_OS
2273
2274        * kjs/collector.cpp:
2275        (KJS::allocateBlock): WIN -> WIN_OS
2276        (KJS::freeBlock): Ditto.
2277
22782007-05-26  Sam Weinig  <sam@webkit.org>
2279
2280        Reviewed by Darin.
2281
2282        Patch for http://bugs.webkit.org/show_bug.cgi?id=13854
2283        Port of commit 667785 from kjs
2284
2285        - special case calling String.localeCompare() with no parameters to return 0.
2286
2287        * kjs/string_object.cpp:
2288        (KJS::StringProtoFunc::callAsFunction):
2289
22902007-05-25  Kimmo Kinnunen  <kimmok@iki.fi>
2291
2292        Reviewed by Darin.
2293
2294        - Fix for http://bugs.webkit.org/show_bug.cgi?id=13456
2295        REGRESSION: setTimeout "arguments" object gets shadowed by a local variable
2296
2297        - Add a explicit check for arguments. Previously check was done with getDirect,
2298        but since the arguments is created on-demand in ActivationImp, it doesn't
2299        show up in the test. 'arguments' should always be in the VarDeclNode's
2300        evaluation scope.
2301
2302        * kjs/nodes.cpp:
2303        (VarDeclNode::evaluate): Additional check if the var decl identifier is 'arguments'
2304
23052007-05-25  George Staikos  <staikos@kde.org>
2306
2307        Reviewed by Maciej.
2308
2309        - Use COMPILER(GCC), not PLATFORM(GCC) - as Platform.h defines
2310
2311        * wtf/FastMalloc.h:
2312
23132007-05-25  Kimmo Kinnunen  <kimmok@iki.fi>
2314
2315        Reviewed by Darin.
2316
2317        - http://bugs.webkit.org/show_bug.cgi?id=13623 (Decompilation of function
2318          doesn't compile with "++(x,y)")
2319        - Create the error node based on the actual node, not the node inside
2320          parenthesis
2321        - Fix applies to postfix, prefix and typeof operators
2322        - Produces run-time ReferenceError like other non-lvalue assignments etc.
2323
2324        * kjs/grammar.y: Create {Prefix,Postfix}ErrorNode based on the actual node,
2325        not the based on the node returned by "nodeInsideAllParens()". Same for
2326        TypeOfValueNode.
2327
23282007-05-25  Simon Hausmann  <hausmann@kde.org>
2329
2330        Reviewed by Zack.
2331
2332        Fix crash in Qt JavaScript bindings when the arguments used on the Qt side are not
2333        registered with QMetaType.
2334
2335        * bindings/qt/qt_instance.cpp:
2336        (KJS::Bindings::QtInstance::invokeMethod):
2337        * bindings/qt/qt_runtime.cpp:
2338
23392007-05-24  Luciano Montanaro  <mikelima@cirulla.net>
2340
2341        Reviewed by Darin
2342
2343        Patch for http://bugs.webkit.org/show_bug.cgi?id=13855
2344        Port patch 666176 to JavaScriptCore
2345
2346        - Renamed JSValue::downcast() to JSValue::asCell() which makes the
2347        function meaning cleaner. It's modeled after Harri Porten change in 
2348        KDE trunk.
2349
2350        * kjs/collector.cpp:
2351        (KJS::Collector::protect):
2352        (KJS::Collector::unprotect):
2353        (KJS::Collector::collectOnMainThreadOnly):
2354        * kjs/object.h:
2355        (KJS::JSValue::isObject):
2356        * kjs/string_object.cpp:
2357        (KJS::StringProtoFunc::callAsFunction):
2358        * kjs/value.h:
2359        (KJS::JSValue::asCell):
2360        (KJS::JSValue::isNumber):
2361        (KJS::JSValue::isString):
2362        (KJS::JSValue::isObject):
2363        (KJS::JSValue::getNumber):
2364        (KJS::JSValue::getString):
2365        (KJS::JSValue::getObject):
2366        (KJS::JSValue::getUInt32):
2367        (KJS::JSValue::mark):
2368        (KJS::JSValue::marked):
2369        (KJS::JSValue::type):
2370        (KJS::JSValue::toPrimitive):
2371        (KJS::JSValue::toBoolean):
2372        (KJS::JSValue::toNumber):
2373        (KJS::JSValue::toString):
2374        (KJS::JSValue::toObject):
2375
23762007-05-18  Holger Hans Peter Freyther  <zecke@selfish.org>
2377
2378        Reviewed by Mark Rowe.
2379
2380        * kjs/testkjs.pro: Make the Gdk port link to icu
2381
23822007-05-15  Geoffrey Garen  <ggaren@apple.com>
2383
2384        Reviewed by Adele Peterson.
2385        
2386        It helps if you swap the right variable.
2387
2388        * wtf/HashSet.h:
2389        (WTF::::operator):
2390
23912007-05-15  Lars Knoll <lars@trolltech.com>
2392
2393        Reviewed by Zack
2394
2395        Extend the QObject JavaScript bindings to work for slots with
2396        arguments.
2397
2398        * bindings/qt/qt_instance.cpp:
2399        (KJS::Bindings::QtInstance::invokeMethod):
2400
24012007-05-14  Kimmo Kinnunen  <kimmok@iki.fi>
2402
2403        Reviewed by Darin.
2404
2405        - Fixes http://bugs.webkit.org/show_bug.cgi?id=13622 (Decompiler
2406          omits trailing comma in array literal)
2407
2408         * kjs/nodes2string.cpp:
2409         (ArrayNode::streamTo): print extra ',' in case there was elision
2410         commas (check opt member var) and array elements present
2411         in the array expression
2412
24132007-05-14  Geoffrey Garen  <ggaren@apple.com>
2414
2415        Reviewed by Oliver Hunt.
2416        
2417        Added HashMap::swap and HashSet::swap. WebCore now uses HashSet::swap.
2418        I figured while I was in the neighborhood I might as well add HashMap::swap,
2419        too.
2420
2421        * wtf/HashMap.h:
2422        (WTF::::operator):
2423        (WTF::::swap):
2424        * wtf/HashSet.h:
2425        (WTF::::operator):
2426        (WTF::::swap):
2427
24282007-05-11  Kimmo Kinnunen  <kimmok@iki.fi>
2429
2430        Reviewed by Darin.
2431
2432        - Fix for bug http://bugs.webkit.org/show_bug.cgi?id=13620
2433          Bogus decompilation of "for (var j = 1 in [])"
2434        - ForInNode toString()'ed to syntax error if there was var decl
2435          and initializer
2436        - ForNode toStringed()'ed lost 'var ' if it was present
2437
2438        * kjs/nodes2string.cpp:
2439        (VarDeclListNode::streamTo): Print "var " here
2440        (VarStatementNode::streamTo): Don't print "var " here
2441        (ForNode::streamTo): Remove TODO comment, VarDeclListNode will
2442        stream the "var "
2443        (ForInNode::streamTo): ForIn initializer is printed by VarDeclNode
2444
24452007-05-11  Kimmo Kinnunen  <kimmok@iki.fi>
2446
2447        Reviewed by Darin.
2448
2449        - Fixes http://bugs.webkit.org/show_bug.cgi?id=10878
2450          (Incorrect decompilation for "4..x")
2451        - Group numbers in dotted expressions in toString() output, so we
2452          avoid the 4.x constructs  when the original input is 4..x.
2453          4..x means the same as 4. .x or (4).x or Number(4).x
2454
2455        * kjs/nodes2string.cpp:
2456        (KJS::SourceStream::):
2457        Add boolean flag to indicate that if next item is a number, it should be grouped.
2458        Add new formatting enum which turns on the boolean flag.
2459        (KJS::SourceStream::SourceStream): Added. Initialize the flag.
2460        (SourceStream::operator<<): Added. New overloaded operator with double value as parameter.
2461        (NumberNode::streamTo): Use the double operator
2462        (ArrayNode::streamTo):
2463        (DotAccessorNode::streamTo):
2464        (FunctionCallDotNode::streamTo):
2465        (FunctionCallParenDotNode::streamTo):
2466        (PostfixDotNode::streamTo):
2467        (DeleteDotNode::streamTo):
2468        (PrefixDotNode::streamTo):
2469        (AssignDotNode::streamTo): Use the new formatting enum to turn on the grouping flag.
2470
24712007-05-10  Lars Knoll <lars@trolltech.com>
2472
2473        Reviewed by Zack
2474
2475        Fix our last three test failures in the JavaScript
2476        tests.
2477
2478        * wtf/unicode/qt4/UnicodeQt4.h:
2479        (WTF::Unicode::toLower):
2480        (WTF::Unicode::toUpper):
2481
24822007-05-08  Geoffrey Garen  <ggaren@apple.com>
2483
2484        Reviewed by Darin Adler.
2485        
2486        Fixed #includes of JSStringRefCF.h and use of CF datatypes. I think I 
2487        misunderstood this issue before.
2488
2489        * API/JavaScriptCore.h: #include JSStringRefCF.h. Platforms that don't
2490        want this behavior can just #include individual headers, instead of the
2491        umbrella framework header. But we definitely want Mac OS X clients to
2492        get the #include of JSStringRefCF.h "for free."
2493        * API/minidom.c: Don't #include JSStringRefCF.h. (Don't need to #include
2494        JavaScriptCore.h, either.)
2495        * API/testapi.c: Don't #include JSStringRefCF.h. Do use CF datatypes
2496        regardless of whether __APPLE__ is defined. Platforms that don't support
2497        CF just shouldn't compile this file.
2498        (main):
2499
25002007-05-09  Eric Seidel  <eric@webkit.org>
2501
2502        Reviewed by mjs.
2503        
2504        http://bugs.webkit.org/show_bug.cgi?id=6985
2505        Cyclic __proto__ values cause WebKit to hang
2506
2507        * kjs/object.cpp:
2508        (KJS::JSObject::put): do a cycle check before setting __proto__
2509
25102007-05-08  Kimmo Kinnunen  <kimmok@iki.fi>
2511
2512        Reviewed by darin.  Landed by eseidel.
2513
2514        - http://bugs.webkit.org/show_bug.cgi?id=10880 (Do..while loop gains 
2515        a semicolon each time it is toStringed)
2516        Grammar in Ecma-66262, 12.6: "do Statement while ( Expression );"
2517        EmptyStatement was created after every do..while(expr) which
2518        had semicolon at the end.
2519
2520        * kjs/grammar.y: Require semicolon at the end of do..while
2521
25222007-05-08  Geoffrey Garen  <ggaren@apple.com>
2523
2524        Build fix -- this time for sure.
2525        
2526        APICast.h, being private, ends up in a different folder than JSValueRef.h,
2527        so we can't include one from the other using "". Instead, just forward
2528        declare the relevant data types.
2529
2530        * API/APICast.h:
2531
25322007-05-08  Geoffrey Garen  <ggaren@apple.com>
2533
2534        Build fix: export APICast.h for WebCore and WebKit.
2535
2536        * JavaScriptCore.xcodeproj/project.pbxproj:
2537
25382007-05-04  Darin Adler  <darin@apple.com>
2539
2540        Reviewed by Adele.
2541
2542        - fix http://bugs.webkit.org/show_bug.cgi?id=12821
2543          <rdar://problem/5007921> Number.toExponential doesn't work for negative numbers
2544
2545        * kjs/number_object.cpp: (NumberProtoFunc::callAsFunction):
2546        Added a call to fabs before calling log10.
2547
25482007-05-03  Holger Freyther <freyther@kde.org>
2549
2550        Reviewed by Zack, landed by Simon.
2551        This is bugzilla bug 13499.
2552
2553        * JavaScriptCore.pri: Place Qt into the qt-port scope
2554        * bindings/testbindings.pro: Place Qt into the qt-port scope
2555        * kjs/testkjs.pro: Place Qt into the qt-port scope
2556        * pcre/pcre.pri: Place Qt into the qt-port scope
2557
25582007-05-02  David Harrison  <harrison@apple.com>
2559
2560        Reviewed by Antti.
2561
2562        <rdar://problem/5174862> Crash resulting from DeprecatedString::insert()
2563
2564        Added insertion support for more than one value.
2565        
2566        * wtf/Vector.h:
2567        (WTF::::insert):
2568        Added support for inserting multiple values.
2569        
2570        (WTF::::prepend):
2571        New. Insert at the start of vectors. Convenient for vectors used as strings.
2572
25732007-05-01  Jungshik Shin  <jungshik.shin@gmail.com>
2574
2575        Reviewed by Alexey.
2576
2577        - get rid of non-ASCII lteral characters : suppress compiler warnings
2578        http://bugs.webkit.org/show_bug.cgi?id=13551
2579         
2580        * kjs/testkjs.cpp:
2581        * pcre/pcre_compile.c:
2582
25832007-04-28  Jungshik Shin  <jungshik.shin@gmail.com>
2584
2585        Reviewed by Sam Weinig.
2586
2587        - Replace copyright sign in Latin-1 (0xA9) with '(C)'
2588        http://bugs.webkit.org/show_bug.cgi?id=13531
2589
2590        * bindings/npruntime.h:
2591    
25922007-04-28  Darin Adler  <darin@apple.com>
2593
2594        Reviewed by Maciej.
2595
2596        - fix <rdar://problem/5154144> Hamachi test fails: assertion failure in ListHashSet
2597
2598        Test: fast/forms/add-remove-form-elements-stress-test.html
2599
2600        * wtf/ListHashSet.h:
2601        (WTF::ListHashSetNodeAllocator::ListHashSetNodeAllocator): Initialize
2602        m_isDoneWithInitialFreeList to false.
2603        (WTF::ListHashSetNodeAllocator::allocate): Added assertions based on a debug-only
2604        m_isAllocated flag that make sure we don't allocate a block that's already allocated.
2605        These assertions helped pinpoint the bug. Set m_isDoneWithInitialFreeList when we
2606        allocate the last block of the initial free list. Once we're done with the initial
2607        free list, turn off the rule that says that the next node in the pool after the last
2608        node in the free list is also free. This rule works because any free nodes are added
2609        to the head of the free list, so a node that hasn't been allocated even once is always
2610        at the tail of the free list and all the nodes after it also haven't been allocated
2611        even once. But it doesn't work any longer once the entire pool has been used at least
2612        once, because there's nothing special about the last node on the free list any more.
2613        (WTF::ListHashSetNodeAllocator::deallocate): Set the node's m_isAllocated to false.
2614        (WTF::ListHashSetNodeAllocator::pastPool): Added. Used above.
2615        (WTF::ListHashSetNodeAllocator::inPool): Changed to use the pastPool function.
2616        (WTF::ListHashSetNode::ListHashSetNode): Initialize m_isAllocated to true.
2617        (WTF::ListHashSetNode::operator new): Removed variable name for unused size
2618        parameter.
2619        (WTF::ListHashSetNode::destroy): Changed to call the destructor rather than
2620        delete -- this gets rid of the need to define an operator delete.
2621
26222007-04-27  Christopher Brichford  <chrisb@adobe.com>
2623
2624        Reviewed by Timothy Hatcher.
2625
2626        Fix for: Bug 13211: Move JavaScriptCore mac project files for apollo port
2627        http://bugs.webkit.org/show_bug.cgi?id=13211
2628
2629        * JavaScriptCore.apolloproj/mac/JavaScriptCore.Debug.xcconfig: Added.
2630        * JavaScriptCore.apolloproj/mac/JavaScriptCore.Release.xcconfig: Added.
2631        * JavaScriptCore.apolloproj/mac/JavaScriptCore.xcconfig: Added.
2632        * JavaScriptCore.apolloproj/mac/JavaScriptCore.xcodeproj/project.pbxproj: Added.
2633        * JavaScriptCore.apolloproj/mac/JavaScriptCore/JavaScriptCore.Debug.xcconfig: Removed.
2634        * JavaScriptCore.apolloproj/mac/JavaScriptCore/JavaScriptCore.Release.xcconfig: Removed.
2635        * JavaScriptCore.apolloproj/mac/JavaScriptCore/JavaScriptCore.xcconfig: Removed.
2636        * JavaScriptCore.apolloproj/mac/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj: Removed.
2637
26382007-04-27  Holger Freyther <freyther@kde.org>
2639
2640        Reviewed by Maciej.
2641
2642        Remove unmaintained CMake build system.
2643
2644        * CMakeLists.txt: Removed.
2645        * pcre/CMakeLists.txt: Removed.
2646
26472007-04-27  Mark Rowe  <mrowe@apple.com>
2648
2649        Reviewed by Oliver.
2650
2651        * JavaScriptCore.xcodeproj/project.pbxproj: Improve dependencies in Xcode project
2652        by marking dftables as a dependency of Generate Derived Sources rather than of
2653        JavaScriptCore itself.
2654
26552007-04-26  Geoffrey Garen  <ggaren@apple.com>
2656
2657        Build fix -- added #includes that we used to get implicitly through
2658        JSStringRef.h.
2659
2660        * API/JSNode.c:
2661        * API/JSNodeList.c:
2662        * API/minidom.c:
2663        * API/testapi.c:
2664
26652007-04-26  Geoffrey Garen  <ggaren@apple.com>
2666
2667        Reviewed by Maciej Stachowiak, Adam Roben.
2668        
2669        Fixed 
2670        <rdar://problem/4885130> Remove #include of JSStringRefCF.h from JSStringRef.h
2671        <rdar://problem/4885123> JavaScriptCore is not cross-platform -- JSStringRef.h references CF datatypes
2672
2673        * API/JSStringRef.h: Removed #include -- no clients need it anymore.
2674
26752007-04-25  David Kilzer  <ddkilzer@apple.com>
2676
2677        Reviewed by Maciej.
2678
2679        Add assertions for debug builds.
2680
2681        * kjs/JSLock.cpp:
2682        (KJS::JSLock::lock): Assert the return value of pthread_mutex_lock() in debug builds.
2683        (KJS::JSLock::unlock): Assert the return value of pthread_mutex_unlock() in debug builds.
2684
26852007-04-25  Maciej Stachowiak  <mjs@apple.com>
2686
2687        Reviewed by Anders.
2688        
2689        - fix build problems
2690
2691        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Disable warning that
2692        gives often downright incorrect results based on guessing what will happen in 64-bit.
2693
26942007-04-25  Darin Adler  <darin@apple.com>
2695
2696        Reviewed by Geoff.
2697
2698        - tweak the allocator for a small speedup -- Shark showed this was a win, but I can't
2699          measure an improvement right now, but it's also clear these changes do no harm
2700
2701        * wtf/FastMalloc.cpp:
2702        (WTF::LgFloor): Use ALWAYS_INLINE here; in testing I did a while back this was necessary
2703        to get this single-instruction function to be inlined.
2704        (WTF::SizeClass): Use ALWAYS_INLINE here too for the same reason. Also change the special
2705        case for a size of 0 to work without a branch for a bit of extra speed.
2706        (WTF::ByteSizeForClass): Use ALWAYS_INLINE here too for the same reason.
2707
27082007-04-24  Maciej Stachowiak  <mjs@apple.com>
2709
2710        Reviewed by Oliver.
2711        
2712        - use custom calling convention for everything in nodes.cpp on intel gcc for 1.5% speed boost
2713
2714        Nearly all functions in nodes.cpp were marked up to use the
2715        regparm(3) calling convention under GCC for x86, since this is
2716        faster and they are all guaranteed to be called only internally to
2717        kjs.
2718        
2719        The only exception is destructors, since delete doesn't know how to use a custom calling convention.
2720        
2721        * kjs/nodes.cpp:
2722        (dotExprDoesNotAllowCallsString):
2723        * kjs/nodes.h:
2724        (KJS::Node::):
2725        (KJS::StatementNode::):
2726        (KJS::NullNode::):
2727        (KJS::BooleanNode::):
2728        (KJS::NumberNode::):
2729        (KJS::StringNode::):
2730        (KJS::RegExpNode::):
2731        (KJS::ThisNode::):
2732        (KJS::ResolveNode::):
2733        (KJS::GroupNode::):
2734        (KJS::ElementNode::):
2735        (KJS::ArrayNode::):
2736        (KJS::PropertyNameNode::):
2737        (KJS::PropertyNode::):
2738        (KJS::PropertyListNode::):
2739        (KJS::ObjectLiteralNode::):
2740        (KJS::BracketAccessorNode::):
2741        (KJS::DotAccessorNode::):
2742        (KJS::ArgumentListNode::):
2743        (KJS::ArgumentsNode::):
2744        (KJS::NewExprNode::):
2745        (KJS::FunctionCallValueNode::):
2746        (KJS::FunctionCallResolveNode::):
2747        (KJS::FunctionCallBracketNode::):
2748        (KJS::FunctionCallParenBracketNode::):
2749        (KJS::FunctionCallDotNode::):
2750        (KJS::FunctionCallParenDotNode::):
2751        (KJS::PostfixResolveNode::):
2752        (KJS::PostfixBracketNode::):
2753        (KJS::PostfixDotNode::):
2754        (KJS::PostfixErrorNode::):
2755        (KJS::DeleteResolveNode::):
2756        (KJS::DeleteBracketNode::):
2757        (KJS::DeleteDotNode::):
2758        (KJS::DeleteValueNode::):
2759        (KJS::VoidNode::):
2760        (KJS::TypeOfResolveNode::):
2761        (KJS::TypeOfValueNode::):
2762        (KJS::PrefixResolveNode::):
2763        (KJS::PrefixBracketNode::):
2764        (KJS::PrefixDotNode::):
2765        (KJS::PrefixErrorNode::):
2766        (KJS::UnaryPlusNode::):
2767        (KJS::NegateNode::):
2768        (KJS::BitwiseNotNode::):
2769        (KJS::LogicalNotNode::):
2770        (KJS::MultNode::):
2771        (KJS::AddNode::):
2772        (KJS::ShiftNode::):
2773        (KJS::RelationalNode::):
2774        (KJS::EqualNode::):
2775        (KJS::BitOperNode::):
2776        (KJS::BinaryLogicalNode::):
2777        (KJS::ConditionalNode::):
2778        (KJS::AssignResolveNode::):
2779        (KJS::AssignBracketNode::):
2780        (KJS::AssignDotNode::):
2781        (KJS::AssignErrorNode::):
2782        (KJS::CommaNode::):
2783        (KJS::AssignExprNode::):
2784        (KJS::VarDeclListNode::):
2785        (KJS::VarStatementNode::):
2786        (KJS::EmptyStatementNode::):
2787        (KJS::ExprStatementNode::):
2788        (KJS::IfNode::):
2789        (KJS::DoWhileNode::):
2790        (KJS::WhileNode::):
2791        (KJS::ForNode::):
2792        (KJS::ContinueNode::):
2793        (KJS::BreakNode::):
2794        (KJS::ReturnNode::):
2795        (KJS::WithNode::):
2796        (KJS::LabelNode::):
2797        (KJS::ThrowNode::):
2798        (KJS::TryNode::):
2799        (KJS::ParameterNode::):
2800        (KJS::Parameter::):
2801        (KJS::FunctionBodyNode::):
2802        (KJS::FuncExprNode::):
2803        (KJS::FuncDeclNode::):
2804        (KJS::SourceElementsNode::):
2805        (KJS::CaseClauseNode::):
2806        (KJS::ClauseListNode::):
2807        (KJS::SwitchNode::):
2808
28092007-04-24  Oliver Hunt  <oliver@apple.com>
2810
2811        GTK Build fix, ::findEntry->KJS::findEntry
2812
2813        * kjs/lookup.cpp:
2814        (KJS::Lookup::findEntry):
2815        (KJS::Lookup::find):
2816
28172007-04-23  Maciej Stachowiak  <mjs@apple.com>
2818
2819        Reviewed by Geoff.
2820        
2821        - compile most of JavaScriptCore as one file for 4% JS iBench speed improvement 
2822
2823        * JavaScriptCore.xcodeproj/project.pbxproj: Add AllInOneFile.cpp, and remove files it includes
2824        from the build.
2825        * kjs/AllInOneFile.cpp: Added.
2826        * kjs/dtoa.cpp: Renamed CONST to CONST_ to avoid conflict.
2827        (Bigint::):
2828        (Bigint::nrv_alloc):
2829        * kjs/lookup.cpp: Use "namspace KJS { ... }" instead of "using namespace KJS;" 
2830
28312007-04-23  Maciej Stachowiak  <mjs@apple.com>
2832
2833        Build fix, not reviewed.
2834
2835        * kjs/collector.h: Fix struct/class mismatch.
2836
28372007-04-23  Maciej Stachowiak  <mjs@apple.com>
2838
2839        Reviewed by Darin.
2840
2841        - raise ALLOCATIONS_PER_COLLECTION to 4000, for 3.7% iBench speed improvement
2842         
2843        Now that the cell size is smaller and the block size is bigger, we can fit 4000 objects in
2844        the two spare cells the collector is willing to keep around, so collect a bit less often.
2845        
2846        * kjs/collector.cpp:
2847
28482007-04-23  Maciej Stachowiak  <mjs@apple.com>
2849
2850        Reviewed by Darin and Geoff.
2851        
2852        - move mark and collectOnMainThreadOnly bits into separate bitmaps
2853        
2854        This saves 4 bytes per cell, allowing shrink of cell size to 32,
2855        which leads to a .8% speed improvement on iBench.
2856        
2857        This is only feasible because of all the previous changes on the branch.
2858
2859        * kjs/collector.cpp:
2860        (KJS::allocateBlock): Adjust for some renames of constants. 
2861        (KJS::Collector::markStackObjectsConservatively): Now that cells are 32 bytes (64 
2862        bytes on 64-bit) the cell alignment check can be made much more strict, and also
2863        obsoletes the need for a % sizeof(CollectorCell) check. Also, we can mask off the low
2864        bits of the pointer to have a potential block pointer to look for.
2865        (KJS::Collector::collectOnMainThreadOnly): Use bitmap.
2866        (KJS::Collector::markMainThreadOnlyObjects): Use bitmap.
2867        (KJS::Collector::collect): When sweeping, use bitmaps directly to find mark bits.
2868        * kjs/collector.h:
2869        (KJS::): Move needed constants and type declarations here.
2870        (KJS::CollectorBitmap::get): Bit twiddling to get a bitmap value.
2871        (KJS::CollectorBitmap::set): Bit twiddling to set a bitmap bit to true.
2872        (KJS::CollectorBitmap::clear): Bit twiddling to set a bitmap bit to false.
2873        (KJS::CollectorBitmap::clearAll): Clear whole bitmap at one go.
2874        (KJS::Collector::cellBlock): New operation, compute the block pointer for
2875        a cell by masking off low bits.
2876        (KJS::Collector::cellOffset): New operation, compute the cell offset for a
2877        cell by masking off high bits and dividing (actually a shift).
2878        (KJS::Collector::isCellMarked): Check mark bit in bitmap
2879        (KJS::Collector::markCell): Set mark bit in bitmap.
2880        * kjs/value.h:
2881        (KJS::JSCell::JSCell): No more bits.
2882        (KJS::JSCell::marked): Let collector handle it.
2883        (KJS::JSCell::mark): Let collector handle it.
2884
28852007-04-23  Anders Carlsson  <andersca@apple.com>
2886
2887        Build fix.
2888        
2889        * kjs/regexp_object.h:
2890        RegExpObjectImpPrivate is a struct, not a class.
2891        
28922007-04-23  Maciej Stachowiak  <mjs@apple.com>
2893
2894        Reviewed by Darin.
2895        
2896        - shrink FunctionImp / DeclaredFunctionImp by 4 bytes, by moving parameter list to function body
2897        
2898        I reconciled this with a similar change in KDE kjs by Maks Orlovich <maksim@kde.org>.
2899
2900        * kjs/function.cpp:
2901        (KJS::FunctionImp::callAsFunction):
2902        (KJS::FunctionImp::passInParameters):
2903        (KJS::FunctionImp::lengthGetter):
2904        (KJS::FunctionImp::getParameterName):
2905        * kjs/function.h:
2906        * kjs/function_object.cpp:
2907        (FunctionProtoFunc::callAsFunction):
2908        (FunctionObjectImp::construct):
2909        * kjs/nodes.cpp:
2910        (FunctionBodyNode::addParam):
2911        (FunctionBodyNode::paramString):
2912        (FuncDeclNode::addParams):
2913        (FuncDeclNode::processFuncDecl):
2914        (FuncExprNode::addParams):
2915        (FuncExprNode::evaluate):
2916        * kjs/nodes.h:
2917        (KJS::Parameter::Parameter):
2918        (KJS::FunctionBodyNode::numParams):
2919        (KJS::FunctionBodyNode::paramName):
2920        (KJS::FunctionBodyNode::parameters):
2921        (KJS::FuncExprNode::FuncExprNode):
2922        (KJS::FuncDeclNode::FuncDeclNode):
2923        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Disable 64-bit warnings because
2924        they handle size_t badly.
2925
29262007-04-23  Maciej Stachowiak  <mjs@apple.com>
2927 
2928        Reviewed by Darin.
2929
2930        - shrink RegexpObjectImp by 4 bytes
2931        
2932        Somewhat inexplicably, this seems to be a .33% speedup on JS iBench.
2933        
2934        * kjs/regexp_object.cpp:
2935        (KJS::RegExpObjectImpPrivate::RegExpObjectImpPrivate):
2936        (RegExpObjectImp::RegExpObjectImp):
2937        (RegExpObjectImp::performMatch):
2938        (RegExpObjectImp::arrayOfMatches):
2939        (RegExpObjectImp::getBackref):
2940        (RegExpObjectImp::getLastMatch):
2941        (RegExpObjectImp::getLastParen):
2942        (RegExpObjectImp::getLeftContext):
2943        (RegExpObjectImp::getRightContext):
2944        (RegExpObjectImp::getValueProperty):
2945        (RegExpObjectImp::putValueProperty):
2946        * kjs/regexp_object.h:
2947
29482007-04-23  Maciej Stachowiak  <mjs@apple.com>
2949
2950        Reviewed by Oliver.
2951        
2952        - change to 1-bit bitfields instead of 8-bit, this turns out to lead to a .51% speedup on JS iBench
2953        
2954        The 1-bit bitfields are actually faster than just plain bools, at least on Intel (go figure).
2955
2956        * kjs/property_map.h:
2957
29582007-04-23  Maciej Stachowiak  <mjs@apple.com>
2959
2960        Reviewed by Darin.
2961       
2962        - shrink ArrayInstance objects by 4 bytes
2963        http://bugs.webkit.org/show_bug.cgi?id=13386
2964        
2965        I did this by storing the capacity before the beginning of the storage array. It turns out
2966        it is rarely needed and is by definition 0 when the storage array is null.
2967 
2968        * kjs/array_instance.h:
2969        (KJS::ArrayInstance::capacity): Get it from the secret stash
2970        * kjs/array_object.cpp:
2971        (allocateStorage): New function to encapsulate allocating the storage with extra space ahead
2972        for the capacity.
2973        (reallocateStorage): ditto for realloc
2974        (ArrayInstance::ArrayInstance):
2975        (ArrayInstance::~ArrayInstance):
2976        (ArrayInstance::resizeStorage):
2977
29782007-04-23  Darin Adler  <darin@apple.com>
2979
2980        Reviewed by Maciej.
2981
2982        - fix <rdar://problem/4840688> REGRESSION (r10588, r10621): JavaScript won't parse
2983          modifications of non-references (breaks 300themovie.warnerbros.com, fedex.com)
2984
2985        Despite the ECMAScript specification's claim that you can treat these as syntax
2986        errors, doing so creates some website incompatibilities. So this patch turns them back
2987        into evaluation errors instead.
2988
2989        Test: fast/js/modify-non-references.html
2990
2991        * kjs/grammar.y: Change makeAssignNode, makePrefixNode, and makePostfixNode so that they
2992        never fail to parse. Update rules that use them. Fix a little bit of indenting. Use
2993        new PostfixErrorNode, PrefixErrorNode, and AssignErrorNode classes.
2994
2995        * kjs/nodes.h: Added an overload of throwError that takes a char* argument.
2996        Replaced setExceptionDetailsIfNeeded and debugExceptionIfNeeded with handleException,
2997        which does both. Added PostfixErrorNode, PrefixErrorNode, and AssignErrorNode classes.
2998
2999        * kjs/nodes.cpp: Changed exception macros to use handleException; simpler and smaller
3000        code size than the two functions that we used before.
3001        (Node::throwError): Added the overload mentioned above.
3002        (Node::handleException): Added. Contains the code from both setExceptionDetailsIfNeeded
3003        and debugExceptionIfNeeded.
3004        (PostfixErrorNode::evaluate): Added. Throws an exception.
3005        (PrefixErrorNode::evaluate): Ditto.
3006        (AssignErrorNode::evaluate): Ditto.
3007        (ThrowNode::execute): Call handleException instead of debugExceptionIfNeeded; this
3008        effectively adds a call to setExceptionDetailsIfNeeded, which may help with getting
3009        the correct file and line number for these exceptions.
3010
3011        * kjs/nodes2string.cpp:
3012        (PostfixErrorNode::streamTo): Added.
3013        (PrefixErrorNode::streamTo): Added.
3014        (AssignErrorNode::streamTo): Added.
3015
30162007-04-23  Maciej Stachowiak  <mjs@apple.com>
3017
3018        Reviewed by Darin.
3019        
3020        - fix test failures / crashes on PPC
3021
3022        * kjs/property_map.h: Make the bool fields explicitly 8-bit bitfields, since bool is a full
3023        word there otherwise :-(
3024
30252007-04-23  Maciej Stachowiak  <mjs@apple.com>
3026
3027        Reviewed by Darin.
3028        
3029        - fix more test case failures
3030
3031        * bindings/runtime_array.cpp:
3032        (RuntimeArray::RuntimeArray): inherit from JSObject instead of ArrayInstance; it turns
3033        out that this class only needs the prototype and classInfo from ArrayInstance, not the
3034        actual class itself, and it was too big otherwise.
3035        (RuntimeArray::getOwnPropertySlot):
3036        * bindings/runtime_array.h:
3037
30382007-04-23  Maciej Stachowiak  <mjs@apple.com>
3039
3040        Reviewed by Darin.
3041        
3042        - fix some test failures
3043
3044        * bindings/runtime_method.cpp:
3045        (RuntimeMethod::RuntimeMethod): inherit from InternalFunctionImp instead of FunctionImpl,
3046        otherwise this is too big
3047        (RuntimeMethod::getOwnPropertySlot):
3048        * bindings/runtime_method.h:
3049
30502007-04-22  Maciej Stachowiak  <mjs@apple.com>
3051
3052        Reviewed by Darin.
3053        
3054        - discard the arguments List for an ActivationImp when the corresponding Context is destroyed (1.7% speedup)
3055        http://bugs.webkit.org/show_bug.cgi?id=13385
3056
3057        Based an idea by Christopher E. Hyde <C.Hyde@parableuk.force9.co.uk>. His patch to do 
3058        this also had many other List changes and I found this much simpler subset of the changes
3059        was actually a hair faster.
3060        
3061        This optimization is valid because the arguments list is only kept around to
3062        lazily make the arguments object. If it's not made by the time the function
3063        exits, it never will be, since any function that captures the continuation will
3064        have its own local arguments variable in scope.
3065        
3066        Besides the 1.7% speed improvement, it shrinks List by 4 bytes
3067        (which in turn shrinks ActivationImp by 4 bytes).
3068        
3069        * kjs/Context.cpp:
3070        (KJS::Context::~Context): Clear the activation's arguments list.
3071        * kjs/function.cpp:
3072        (KJS::ActivationImp::ActivationImp): Adjusted for list changes.
3073        (KJS::ActivationImp::mark): No need to mark, lists are always protected (this doesn't
3074        cause a ref-cycle for reasons stated above).
3075        (KJS::ActivationImp::createArgumentsObject): Clear arguments list.
3076        * kjs/function.h:
3077        * kjs/list.cpp:
3078        (KJS::List::List): No more needsMarking boolean
3079        (KJS::List::operator=): ditto
3080        * kjs/list.h:
3081        (KJS::List::List): ditto
3082        (KJS::List::reset): ditto
3083        (KJS::List::deref): ditto
3084
30852007-04-22  Maciej Stachowiak  <mjs@apple.com>
3086
3087        Reviewed by Darin.
3088        
3089        - shrink PropertyMap by 8 bytes and therefore shrink CELL_SIZE to 40 (for 32-bit; 
3090        similar shrinkage for 64-bit)
3091        http://bugs.webkit.org/show_bug.cgi?id=13384
3092
3093        Inspired by similar changes by Christopher E. Hyde <C.Hyde@parableuk.force9.co.uk>
3094        done in the kjs-tweaks branch of KDE's kjs. However, this version is somewhat 
3095        cleaner style-wise and avoids some of the negative speed impact (at least on gcc/x86) 
3096        of his version.
3097        
3098        This is nearly a wash performance-wise, maybe a slight slowdown, but worth doing
3099        to eventually reach cell size 32.
3100        
3101        * kjs/collector.cpp:
3102        (KJS::):
3103        * kjs/property_map.cpp:
3104        (KJS::PropertyMap::~PropertyMap):
3105        (KJS::PropertyMap::clear):
3106        (KJS::PropertyMap::get):
3107        (KJS::PropertyMap::getLocation):
3108        (KJS::PropertyMap::put):
3109        (KJS::PropertyMap::insert):
3110        (KJS::PropertyMap::expand):
3111        (KJS::PropertyMap::rehash):
3112        (KJS::PropertyMap::remove):
3113        (KJS::PropertyMap::mark):
3114        (KJS::PropertyMap::containsGettersOrSetters):
3115        (KJS::PropertyMap::getEnumerablePropertyNames):
3116        (KJS::PropertyMap::getSparseArrayPropertyNames):
3117        (KJS::PropertyMap::save):
3118        (KJS::PropertyMap::checkConsistency):
3119        * kjs/property_map.h:
3120        (KJS::PropertyMap::hasGetterSetterProperties):
3121        (KJS::PropertyMap::setHasGetterSetterProperties):
3122        (KJS::PropertyMap::):
3123        (KJS::PropertyMap::PropertyMap):
3124
31252007-04-22  Maciej Stachowiak  <mjs@apple.com>
3126
3127        Reviewed by Darin.
3128        
3129        - change blocks to 64k in size, and use various platform-specific calls to allocate at 64k-aligned addresses
3130        http://bugs.webkit.org/show_bug.cgi?id=13383
3131        
3132        * kjs/collector.cpp:
3133        (KJS::allocateBlock): New function to allocate 64k of 64k-aligned memory
3134        (KJS::freeBlock): Corresponding free
3135        (KJS::Collector::allocate):
3136        (KJS::Collector::collect):
3137
31382007-04-22  Maciej Stachowiak  <mjs@apple.com>
3139
3140        Reviewed by Darin and Geoff.
3141        
3142        - remove the concept of oversize objects, now that there aren't any (for now
3143        only enforced with an assert).
3144        http://bugs.webkit.org/show_bug.cgi?id=13382
3145
3146        This change is a .66% speedup on JS iBench for 32-bit platforms, probably much more
3147        for 64-bit since it finally gives a reasonable cell size, but I did not test that.
3148        
3149        * kjs/collector.cpp:
3150        (KJS::): Use different cell size for 32-bit and 64-bit, now that there is no
3151        oversize allocation.
3152        (KJS::Collector::allocate): Remove oversize allocator.
3153        (KJS::Collector::markStackObjectsConservatively): Don't check oversize objects.
3154        (KJS::Collector::markMainThreadOnlyObjects): Ditto.
3155        (KJS::Collector::collect): Ditto.
3156
31572007-04-21  Mitz Pettel  <mitz@webkit.org>
3158
3159        Reviewed by Adam.
3160
3161        - fix http://bugs.webkit.org/show_bug.cgi?id=13428
3162          REGRESSION (r20973-r20976): Failing ecma/Array/15.4.4.5-3.js
3163
3164        - fix http://bugs.webkit.org/show_bug.cgi?id=13429
3165          REGRESSION (r20973-r20976): Crashing in fast/dom/plugin-attributes-enumeration.html
3166
3167        * kjs/array_object.cpp:
3168        (ArrayInstance::sort): Free the old storage, not the new one.
3169
31702007-04-20  Maciej Stachowiak  <mjs@apple.com>
3171
3172        Not reviewed, build fix.
3173
3174        - fix build problem with last change - -O3 complains more about uninitialized variables
3175        
3176        * pcre/pcre_compile.c:
3177        (compile_branch):
3178        (pcre_compile2):
3179
31802007-04-20  Maciej Stachowiak  <mjs@apple.com>
3181
3182        Reviewed by Darin.
3183        
3184        - <rdar://problem/5149915> use mergesort when possible, since it leads to fewer compares (2% JS iBench speedup)
3185
3186        * kjs/array_object.cpp:
3187        (ArrayInstance::sort): Use mergesort(3) on platforms that have it, since it tends
3188        to do fewer compares than qsort; but avoid it very on large arrays since it uses extra
3189        memory. Also added comments identifying possibly even better sorting algorithms
3190        for sort by string value and sort by compare function.
3191        * kjs/config.h:
3192
31932007-04-20  Maciej Stachowiak  <mjs@apple.com>
3194
3195        Reviewed by Darin.
3196        
3197        - bump optimization flags up to -O3 for 1% JS iBench speed improvement 
3198
3199        * Configurations/Base.xcconfig:
3200
32012007-04-20  Mark Rowe  <mrowe@apple.com>
3202
3203        Reviewed by Maciej.
3204
3205        Fix bogus optimisation in the generic pthread code path.
3206
3207        * kjs/collector.cpp:
3208        (KJS::currentThreadStackBase):
3209
32102007-04-20  Mark Rowe  <mrowe@apple.com>
3211
3212        Reviewed by Anders.
3213
3214        Improve FreeBSD compatibility, as suggested by Alexander Botero-Lowry.
3215
3216        * kjs/collector.cpp:
3217        (KJS::currentThreadStackBase): FreeBSD requires that pthread_attr_t's are
3218        initialized via pthread_attr_init before being used in any context.
3219
32202007-04-19  Mark Rowe  <mrowe@apple.com>
3221
3222        Reviewed by Darin.
3223
3224        Fix http://bugs.webkit.org/show_bug.cgi?id=13401
3225        Bug 13401: Reproducible crash calling myArray.sort(compareFn) from within
3226        a sort comparison function
3227
3228        * kjs/array_object.cpp:
3229        (ArrayInstance::sort): Save/restore the static variables around calls to qsort
3230        to ensure nested calls to ArrayInstance::sort behave correctly.
3231
32322007-04-12  Deneb Meketa  <dmeketa@adobe.com>
3233
3234        Reviewed by Darin Adler.
3235
3236        http://bugs.webkit.org/show_bug.cgi?id=13029
3237        rdar://problem/4994849
3238        Bug 13029: Permit NPAPI plug-ins to see HTTP response headers.
3239        This doesn't actually change JavaScriptCore, but that's where npapi.h is.
3240
3241        * bindings/npapi.h:
3242        Add headers member to NPStream struct.  Also increase NP_VERSION_MINOR to 18.
3243        Increasing to >= 17 allows plug-ins to safely detect whether to look for
3244        NPStream::headers.  Increasing from 17 to 18 reflects presence of NPObject
3245        enumeration, which was added in a prior patch, and which has been agreed to
3246        constitute version 18 by the plugin-futures list.  Also add other missing
3247        bits of npapi.h to catch up from 14 to 18.  This includes features that are
3248        not implemented in WebKit, but those are safely stubbed.
3249
32502007-04-10  Geoffrey Garen  <ggaren@apple.com>
3251
3252        Reviewed by Mark Rowe.
3253        
3254        Fixed last check-in to print in release builds, too.
3255
3256        * kjs/collector.cpp:
3257        (KJS::getPlatformThreadRegisters):
3258
32592007-04-10  Geoffrey Garen  <ggaren@apple.com>
3260
3261        Reviewed by John Sullivan, Darin Adler.
3262        
3263        Fixed <rdar://problem/5121899> JavaScript garbage collection leads to 
3264        later crash under Rosetta (should abort or leak instead?)
3265        
3266        Log an error message and crash if the kernel reports failure during GC.
3267        We decided to do this instead of just leaking because we don't want people
3268        to get the mistaken impression that running in Rosetta is a supported
3269        configurtion.
3270        
3271        The CRASH macro will also hook into CrashReporter, which will tell us if 
3272        many (any?) users run into this issue.
3273
3274        * kjs/collector.cpp:
3275        (KJS::getPlatformThreadRegisters):
3276
32772007-04-06  Krzysztof Kowalczyk  <kkowalczyk@gmail.com>
3278
3279        Reviewed by darin.
3280
3281        Coverity fix. Coverity says:
3282        "Event var_deref_model: Variable "sourceRanges" tracked as NULL was passed to a
3283        function that dereferences it"
3284
3285        * kjs/string_object.cpp:
3286        (KJS::replace):
3287
32882007-04-06  Geoffrey Garen  <ggaren@apple.com>
3289
3290        Rubber stamped by Adele Peterson.
3291
3292        * kjs/ExecState.h: Removed obsolete forward/friend declaration of 
3293        RuntimeMethodImp.
3294
32952007-04-05  Krzysztof Kowalczyk  <kkowalczyk@gmail.com>
3296
3297        Reviewed by darin.
3298
3299        Coverity fix. Coverity says:
3300        "Event check_after_deref: Pointer "dateString" dereferenced before NULL check"
3301
3302        * kjs/date_object.cpp:
3303        (KJS::parseDate):
3304
33052007-04-05  Krzysztof Kowalczyk  <kkowalczyk@gmail.com>
3306
3307        Reviewed by darin.
3308
3309        Coverity fix. Coverity says:
3310        "Event check_after_deref: Pointer "re" dereferenced before NULL check"
3311
3312        * pcre/pcre_study.c:
3313        (pcre_study):
3314
33152007-04-05  Krzysztof Kowalczyk  <kkowalczyk@gmail.com>
3316
3317        Reviewed by darin.
3318
3319        Coverity fixes. Coverity says:
3320        "Event leaked_storage: Returned without freeing storage "buffer""
3321        and:
3322        "Event leaked_storage: Returned without freeing storage "script""
3323
3324        * kjs/testkjs.cpp:
3325        (doIt):
3326        (createStringWithContentsOfFile):
3327
33282007-04-05  Krzysztof Kowalczyk  <kkowalczyk@gmail.com>
3329
3330        Reviewed by darin.
3331
3332        Coverity fix: in single-threaded case currentThreadIsMainThread is always true
3333        so the code in if (!currentThreadIsMainThread) cannot possibly be reached
3334        and Coverity complains about dead code.
3335
3336        * kjs/collector.cpp:
3337        (KJS::Collector::collect):
3338
3339=== Safari-5522.6 ===
3340
33412007-04-03  Kevin McCullough  <kmccullough@apple.com>
3342
3343        Reviewed by Adam.
3344
3345        - Testing a post-commit hook.
3346
3347        * JavaScriptCore.vcproj/testkjs/testkjs.vcproj:
3348
33492007-04-03  Anders Carlsson  <andersca@apple.com>
3350
3351        Reviewed by Adam.
3352
3353        <rdar://problem/5107534>
3354        http://bugs.webkit.org/show_bug.cgi?id=13265
3355        REGRESSION: Crash in KJS::Bindings::convertValueToNPVariant
3356        
3357        * bindings/NP_jsobject.cpp:
3358        (_NPN_InvokeDefault):
3359        Return false if the object isn't a function. Set the return value to undefined by default
3360        (to match Firefox).
3361        
33622007-03-30  Anders Carlsson <andersca@apple.com>
3363
3364        Build fix.
3365        
3366        * bindings/NP_jsobject.cpp:
3367        (_NPN_Enumerate):
3368
33692007-03-30  Anders Carlsson  <andersca@apple.com>
3370
3371        Reviewed by Geoff.
3372
3373        Implement _NPN_Enumerate support.
3374        
3375        * JavaScriptCore.exp:
3376        * bindings/NP_jsobject.cpp:
3377        (_NPN_Enumerate):
3378        * bindings/c/c_instance.cpp:
3379        (KJS::Bindings::CInstance::getPropertyNames):
3380        * bindings/c/c_instance.h:
3381        * bindings/npapi.h:
3382        * bindings/npruntime.h:
3383        * bindings/npruntime_impl.h:
3384        * bindings/runtime.h:
3385        (KJS::Bindings::Instance::getPropertyNames):
3386        * bindings/runtime_object.cpp:
3387        (RuntimeObjectImp::getPropertyNames):
3388        * bindings/runtime_object.h:
3389        (KJS::RuntimeObjectImp::getInternalInstance):
3390
33912007-03-28  Jeff Walden  <jwalden+code@mit.edu>
3392
3393        Reviewed by Darin.
3394
3395        http://bugs.webkit.org/show_bug.cgi?id=12963
3396        Fix some inconsistencies in the Mozilla JS Array extras implementations
3397        with respect to the Mozilla implementation:
3398
3399          - holes in arrays should be skipped, not treated as undefined,
3400            by all such methods
3401          - an element with value undefined is not a hole
3402          - Array.prototype.forEach should return undefined
3403
3404        * kjs/array_object.cpp:
3405        (ArrayInstance::getOwnPropertySlot):
3406        (ArrayProtoFunc::callAsFunction):
3407
34082007-03-27  Anders Carlsson  <acarlsson@apple.com>
3409
3410        Reviewed by Geoff.
3411
3412        * bindings/NP_jsobject.cpp:
3413        (_NPN_InvokeDefault):
3414        Call JSObject:call for native JavaScript objects.
3415
34162007-03-26  David Carson  <dacarson@gmail.com>
3417
3418        Reviewed by Darin, landed by Anders.
3419
3420        Fix for: REGRESSION (r19559): Java applet crash
3421        http://bugs.webkit.org/show_bug.cgi?id=13142
3422        <rdar://problem/5080340>
3423
3424        The previous fix http://bugs.webkit.org/show_bug.cgi?id=12636 
3425        introduced new JNIType to enum in jni_utility.h This is a 
3426        problem on the Mac as it seems that the JNIType enum is also
3427        used in the JVM, it is used to specify the return type in
3428        jni_objc.mm
3429        Corrected the fix by moving type to the end, and changing
3430        jni_objc.mm to convert the new type to an old compatible
3431        type.
3432
3433        * bindings/jni/jni_objc.mm:
3434        (KJS::Bindings::dispatchJNICall):
3435        * bindings/jni/jni_utility.h:
3436
34372007-03-26  Christopher Brichford  <chrisb@adobe.com>
3438
3439        Reviewed/landed by Adam.
3440
3441        Bug 13198: Move build settings from project file to xcconfig file for apollo
3442        port JSCore
3443        http://bugs.webkit.org/show_bug.cgi?id=13198
3444
3445        - Moving build settings from xcode project file to xcconfig files.
3446
3447        * JavaScriptCore.apolloproj/mac/JavaScriptCore/JavaScriptCore.Debug.xcconfig:
3448        * JavaScriptCore.apolloproj/mac/JavaScriptCore/JavaScriptCore.Release.xcconfig:
3449        * JavaScriptCore.apolloproj/mac/JavaScriptCore/JavaScriptCore.xcconfig:
3450        * JavaScriptCore.apolloproj/mac/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj:
3451
34522007-03-26  Brady Eidson  <beidson@apple.com>
3453
3454        Rubberstamped by Anders and Maciej aand Geoff (oh my!)
3455        
3456        Since CFTypeRef is really void*, a RetainPtr couldn't be used. 
3457        RefType was "void", which doesn't actually exist as a type.
3458        Since RefType only existed for operator*(), and since that operator
3459        doesn't make any sense for RetainPtr, I removed them!
3460
3461        * kjs/nodes.cpp: Touch this to force a rebuild and (hopefully) help the
3462          compiler with dependencies
3463        * wtf/RetainPtr.h: Nuke RefType and operator*()
3464
34652007-03-26  Geoffrey Garen  <ggaren@apple.com>
3466
3467        Touched a file to (hopefully) help the compiler with RetainPtr dependencies.
3468
3469        * kjs/nodes.cpp:
3470        (Node::deref):
3471
34722007-03-24  Brady Eidson  <beidson@apple.com>
3473
3474        Reviewed by Adam
3475
3476        Whoops, RetainPtr should be in the WTF namespace
3477
3478        * wtf/RetainPtr.h:
3479
34802007-03-24  Brady Eidson  <beidson@apple.com>
3481
3482        Reviewed by Adam
3483        
3484        <rdar://problem/5086210> - Move RetainPtr to WTF
3485
3486        * wtf/RetainPtr.h: Added
3487        * JavaScriptCore.xcodeproj/project.pbxproj: Add it to the project file
3488        * JavaScriptCore.vcproj/WTF/WTF.vcproj: Ditto
3489
3490
34912007-03-23  Christopher Brichford  <chrisb@adobe.com>
3492
3493        Reviewed/landed by Adam.
3494
3495        Bug 13175: Make apollo mac project files for JavaScriptCore actually
3496        build something
3497        http://bugs.webkit.org/show_bug.cgi?id=13175
3498
3499        - Changing apollo mac project files for JavaScriptCore such that they actually build
3500        JavaScriptCore source code.
3501
3502        * JavaScriptCore.apolloproj/ForwardingSources/grammar.cpp: Added.
3503        * JavaScriptCore.apolloproj/mac/JavaScriptCore/JavaScriptCore.xcconfig:
3504        * JavaScriptCore.apolloproj/mac/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj:
3505
35062007-03-24  Mark Rowe  <mrowe@apple.com>
3507
3508        Rubber-stamped by Darin.
3509
3510        * Configurations/JavaScriptCore.xcconfig: Remove unnecessary INFOPLIST_PREPROCESS.
3511
35122007-03-22  Christopher Brichford  <chrisb@adobe.com>
3513
3514        Reviewed/landed by Adam.
3515
3516        Bug 13164: Initial version of mac JavaScriptCore project files for
3517        apollo port 
3518        http://bugs.webkit.org/show_bug.cgi?id=13164
3519
3520        - Adding mac project files for apollo port of JavaScriptCore. Currently project
3521        just builds dftables.
3522
3523        * JavaScriptCore.apolloproj/mac/JavaScriptCore/JavaScriptCore.Debug.xcconfig: Added.
3524        * JavaScriptCore.apolloproj/mac/JavaScriptCore/JavaScriptCore.Release.xcconfig: Added.
3525        * JavaScriptCore.apolloproj/mac/JavaScriptCore/JavaScriptCore.xcconfig: Added.
3526        * JavaScriptCore.apolloproj/mac/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj: Added.
3527
35282007-03-21  Timothy Hatcher  <timothy@apple.com>
3529
3530        Reviewed by Darin.
3531
3532        <rdar://problem/5076599> JavaScriptCore has a weak export (vtable for KJS::JSCell)
3533
3534        * JavaScriptCore.exp: Remove __ZTVN3KJS6JSCellE.
3535
35362007-03-21  Adele Peterson  <adele@apple.com>
3537
3538        Reviewed by Geoff.
3539
3540        * API/JSStringRef.cpp: (JSStringIsEqual): Added JSLock.
3541
35422007-03-21  Zack Rusin  <zrusin@trolltech.com>
3543
3544        Fix the compile when USE(MULTIPLE_THREADS) isn't
3545        defined
3546
3547        * kjs/JSLock.cpp:
3548        (KJS::JSLock::currentThreadIsHoldingLock):
3549
35502007-03-20  Maciej Stachowiak  <mjs@apple.com>
3551
3552        Reviewed by Geoff and Adam.
3553        
3554        - make USE(MULTIPLE_THREADS) support more portable
3555        http://bugs.webkit.org/show_bug.cgi?id=13069
3556        
3557        - fixed a threadsafety bug discovered by testing this
3558        
3559        - enhanced threadsafety assertions in collector
3560
3561        * API/JSCallbackObject.cpp:
3562        (KJS::JSCallbackObject::~JSCallbackObject): This destructor can't
3563        DropAllLocks around the finalize callback, because it gets called
3564        from garbage collection and we can't let other threads collect!
3565
3566        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
3567        * kjs/JSLock.cpp:
3568        (KJS::JSLock::currentThreadIsHoldingLock): Added new function
3569        to allow stronger assertions than just that the lock is held
3570        by some thread (you can now assert that the current thread is
3571        holding it, given the new JSLock design).
3572        * kjs/JSLock.h:
3573        * kjs/collector.cpp: Refactored for portability plus added some
3574        stronger assertions.
3575        (KJS::Collector::allocate):
3576        (KJS::currentThreadStackBase):
3577        (KJS::Collector::registerAsMainThread):
3578        (KJS::onMainThread):
3579        (KJS::PlatformThread::PlatformThread):
3580        (KJS::getCurrentPlatformThread):
3581        (KJS::Collector::Thread::Thread):
3582        (KJS::destroyRegisteredThread):
3583        (KJS::Collector::registerThread):
3584        (KJS::Collector::markCurrentThreadConservatively):
3585        (KJS::suspendThread):
3586        (KJS::resumeThread):
3587        (KJS::getPlatformThreadRegisters):
3588        (KJS::otherThreadStackPointer):
3589        (KJS::otherThreadStackBase):
3590        (KJS::Collector::markOtherThreadConservatively):
3591        (KJS::Collector::markStackObjectsConservatively):
3592        (KJS::Collector::protect):
3593        (KJS::Collector::unprotect):
3594        (KJS::Collector::collectOnMainThreadOnly):
3595        (KJS::Collector::markMainThreadOnlyObjects):
3596        (KJS::Collector::collect):
3597        * kjs/collector.h:
3598        * wtf/FastMalloc.cpp:
3599        (WTF::fastMallocSetIsMultiThreaded):
3600        * wtf/FastMallocInternal.h:
3601        * wtf/Platform.h:
3602
36032007-03-19  Darin Adler  <darin@apple.com>
3604
3605        * kjs/value.h: Roll ~JSValue change out. It was causing problems. I'll do it right later.
3606
36072007-03-19  Geoffrey Garen  <ggaren@apple.com>
3608
3609        Reviewed by John Sullivan.
3610
3611        Fixed <rdar://problem/5073380> REGRESSION: Crash occurs at WTF::fastFree() 
3612        when reloading liveconnect page (applet)
3613        
3614        Best to use free when you use malloc, especially when malloc and delete
3615        use completely different libraries.
3616
3617        * bindings/jni/jni_runtime.cpp:
3618        (JavaMethod::~JavaMethod):
3619
36202007-03-19  Andrew Wellington  <proton@wiretapped.net>
3621
3622        Reviewed by Maciej.
3623
3624        Really set Xcode editor to use 4 space indentation (http://webkit.org/coding/coding-style.html)
3625
3626        * JavaScriptCore.xcodeproj/project.pbxproj:
3627
36282007-03-19  Darin Adler  <darin@apple.com>
3629
3630        Reviewed by Geoff.
3631
3632        - Changed list size threshold to 5 based on testing.
3633
3634        I was testing the i-Bench JavaScript with the list statistics
3635        dumping on, and discovered that there were many 5-element lists.
3636        The fast case for lists was for 4 elements and fewer. By changing
3637        the threshold to 5 elements we get a measurable speedup. I believe
3638        this will help real web pages too, not just the benchmark.
3639
3640        * kjs/list.cpp: Change constant from 4 to 5.
3641
36422007-03-19  Darin Adler  <darin@apple.com>
3643
3644        * kjs/value.h: Oops, fix build.
3645
36462007-03-19  Darin Adler  <darin@apple.com>
3647
3648        Reviewed by Geoff.
3649
3650        - remove ~JSValue; tiny low-risk performance boost
3651
3652        * kjs/value.h: Remove unneeded empty virtual destructor from JSValue.
3653        The only class derived from JSValue is JSCell and it already has a
3654        virtual destructor. Declaring an empty constructor in JSValue had one
3655        good effect: it marked the destructor private, making it a compile
3656        time error to try to destroy a JSValue; but that's not a likely
3657        mistake for someone to make. It had two bad effects: (1) it caused gcc,
3658        at least, to generate code to fix up the virtual table pointer to
3659        point to the JSValue version of the virtual table inside the destructor
3660        of all classes derived from JSValue directly or indirectly; (2) it
3661        caused JSValue to be a polymorphic class so required a virtual table for
3662        it. It's cleaner to not have either of those.
3663
36642007-03-18  Maciej Stachowiak  <mjs@apple.com>
3665
3666        Reviewed by Mark.
3667        
3668        - avoid static construction (and global variable access) in a smarter, more portable way,
3669        to later enable MUTLI_THREAD mode to work on other platforms and compilers.
3670        
3671        * kjs/CommonIdentifiers.cpp: Added. New class to hold all the shared identifiers.
3672        (KJS::CommonIdentifiers::CommonIdentifiers):
3673        (KJS::CommonIdentifiers::shared):
3674        * kjs/CommonIdentifiers.h: Added.
3675
3676        * kjs/ExecState.h:
3677        (KJS::ExecState::propertyNames): Hand the CommonIdentifiers instance here for easy access.
3678        (KJS::ExecState::ExecState):
3679
3680        * API/JSObjectRef.cpp:
3681        (JSObjectMakeConstructor):
3682        * CMakeLists.txt:
3683        * JavaScriptCore.exp:
3684        * JavaScriptCore.pri:
3685        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
3686        * JavaScriptCore.xcodeproj/project.pbxproj:
3687        * JavaScriptCoreSources.bkl:
3688        * bindings/runtime_array.cpp:
3689        (RuntimeArray::getOwnPropertySlot):
3690        (RuntimeArray::put):
3691        * bindings/runtime_method.cpp:
3692        (RuntimeMethod::getOwnPropertySlot):
3693        * kjs/array_object.cpp:
3694        (ArrayInstance::getOwnPropertySlot):
3695        (ArrayInstance::put):
3696        (ArrayInstance::deleteProperty):
3697        (ArrayProtoFunc::ArrayProtoFunc):
3698        (ArrayProtoFunc::callAsFunction):
3699        (ArrayObjectImp::ArrayObjectImp):
3700        * kjs/bool_object.cpp:
3701        (BooleanPrototype::BooleanPrototype):
3702        (BooleanProtoFunc::BooleanProtoFunc):
3703        (BooleanProtoFunc::callAsFunction):
3704        (BooleanObjectImp::BooleanObjectImp):
3705        * kjs/completion.h:
3706        (KJS::Completion::Completion):
3707        * kjs/date_object.cpp:
3708        (KJS::DateProtoFunc::DateProtoFunc):
3709        (KJS::DateObjectImp::DateObjectImp):
3710        (KJS::DateObjectFuncImp::DateObjectFuncImp):
3711        * kjs/error_object.cpp:
3712        (ErrorPrototype::ErrorPrototype):
3713        (ErrorProtoFunc::ErrorProtoFunc):
3714        (ErrorProtoFunc::callAsFunction):
3715        (ErrorObjectImp::ErrorObjectImp):
3716        (ErrorObjectImp::construct):
3717        (NativeErrorPrototype::NativeErrorPrototype):
3718        (NativeErrorImp::NativeErrorImp):
3719        (NativeErrorImp::construct):
3720        (NativeErrorImp::callAsFunction):
3721        * kjs/function.cpp:
3722        (KJS::FunctionImp::getOwnPropertySlot):
3723        (KJS::FunctionImp::put):
3724        (KJS::FunctionImp::deleteProperty):
3725        (KJS::FunctionImp::getParameterName):
3726        (KJS::DeclaredFunctionImp::construct):
3727        (KJS::IndexToNameMap::unMap):
3728        (KJS::Arguments::Arguments):
3729        (KJS::ActivationImp::getOwnPropertySlot):
3730        (KJS::ActivationImp::deleteProperty):
3731        (KJS::GlobalFuncImp::GlobalFuncImp):
3732        * kjs/function_object.cpp:
3733        (FunctionPrototype::FunctionPrototype):
3734        (FunctionProtoFunc::FunctionProtoFunc):
3735        (FunctionProtoFunc::callAsFunction):
3736        (FunctionObjectImp::FunctionObjectImp):
3737        (FunctionObjectImp::construct):
3738        * kjs/grammar.y:
3739        * kjs/identifier.cpp:
3740        * kjs/identifier.h:
3741        * kjs/interpreter.cpp:
3742        (KJS::Interpreter::init):
3743        (KJS::Interpreter::initGlobalObject):
3744        * kjs/interpreter.h:
3745        * kjs/lookup.h:
3746        * kjs/math_object.cpp:
3747        (MathFuncImp::MathFuncImp):
3748        * kjs/nodes.cpp:
3749        (ArrayNode::evaluate):
3750        (FuncDeclNode::processFuncDecl):
3751        (FuncExprNode::evaluate):
3752        * kjs/number_object.cpp:
3753        (NumberPrototype::NumberPrototype):
3754        (NumberProtoFunc::NumberProtoFunc):
3755        (NumberObjectImp::NumberObjectImp):
3756        * kjs/object.cpp:
3757        (KJS::JSObject::put):
3758        (KJS::JSObject::defaultValue):
3759        (KJS::JSObject::hasInstance):
3760        * kjs/object.h:
3761        (KJS::JSObject::getOwnPropertySlot):
3762        * kjs/object_object.cpp:
3763        (ObjectPrototype::ObjectPrototype):
3764        (ObjectProtoFunc::ObjectProtoFunc):
3765        (ObjectObjectImp::ObjectObjectImp):
3766        * kjs/regexp_object.cpp:
3767        (RegExpPrototype::RegExpPrototype):
3768        (RegExpProtoFunc::RegExpProtoFunc):
3769        (RegExpObjectImp::RegExpObjectImp):
3770        * kjs/string_object.cpp:
3771        (KJS::StringInstance::getOwnPropertySlot):
3772        (KJS::StringInstance::put):
3773        (KJS::StringInstance::deleteProperty):
3774        (KJS::StringPrototype::StringPrototype):
3775        (KJS::StringProtoFunc::StringProtoFunc):
3776        (KJS::StringProtoFunc::callAsFunction):
3777        (KJS::StringObjectImp::StringObjectImp):
3778        (KJS::StringObjectFuncImp::StringObjectFuncImp):
3779        * kjs/testkjs.cpp:
3780        (TestFunctionImp::TestFunctionImp):
3781
37822007-03-18  Andrew Wellington  <proton@wiretapped.net>
3783
3784        Reviewed by Mark Rowe
3785        
3786        Set Xcode editor to use 4 space indentation (http://webkit.org/coding/coding-style.html) 
3787
3788        * JavaScriptCore.xcodeproj/project.pbxproj:
3789
37902007-03-19  Mark Rowe  <mrowe@apple.com>
3791
3792        Rubber-stamped by Brady.
3793
3794        Update references to bugzilla.opendarwin.org with bugs.webkit.org.
3795
3796        * bindings/c/c_utility.cpp:
3797        (KJS::Bindings::convertUTF8ToUTF16):
3798        * kjs/function.cpp:
3799        (KJS::FunctionImp::callAsFunction):
3800        * kjs/grammar.y:
3801        * kjs/keywords.table:
3802        * kjs/lexer.cpp:
3803        (KJS::Lexer::shift):
3804
38052007-03-18  Geoffrey Garen  <ggaren@apple.com>
3806
3807        Reviewed by Oliver Hunt.
3808        
3809        Exposed some extra toUInt32 functionality, as part of the fix for
3810        REGRESSION: Incomplete document.all implementation breaks abtelectronics.com 
3811        (Style Change Through JavaScript Blanks Content)
3812
3813        * JavaScriptCore.exp:
3814        * kjs/identifier.h:
3815        (KJS::Identifier::toUInt32):
3816
38172007-03-18  Geoffrey Garen  <ggaren@apple.com>
3818
3819        Removed duplicate export name.
3820        
3821        * JavaScriptCore.exp:
3822
38232007-03-15  Geoffrey Garen  <ggaren@apple.com>
3824
3825        Reviewed by Maciej Stachowiak.
3826        
3827        Fixed <rdar://problem/5064964> Repro ASSERT failure in JS Bindings when 
3828        closing window @ lowtrades.bptrade.com
3829        
3830        Unfortunately, the bindings depend on UString and Identifier as string 
3831        representations. So, they need to acquire the JSLock when doing something
3832        that will ref/deref their strings.
3833
3834        Layout tests, the original site, and Java, Flash, and Quicktime on the 
3835        web work. No leaks reported. No automated test for this because testing 
3836        the Java bindings, like math, is hard.
3837        
3838        * bindings/runtime.h: Made Noncopyable, just to be sure.
3839        
3840        * bindings/c/c_class.cpp: 
3841        (KJS::Bindings::CClass::~CClass): Acquire the JSLock and explicitly clear the keys
3842        in our hashtable, since they're UString::Reps, and ref/deref aren't thread-safe.
3843        (KJS::Bindings::CClass::methodsNamed): Also acquire the JSLock when adding
3844        keys to the table, since the table ref's them.
3845        (KJS::Bindings::CClass::fieldNamed): ditto.
3846
3847        * bindings/c/c_utility.cpp: Removed dead function.
3848        (KJS::Bindings::convertValueToNPVariant): Acquire the JSLock because doing
3849        it recursively is pretty cheap, and it's just too confusing to tell whether
3850        all our callers do it for us.
3851        (KJS::Bindings::convertNPVariantToValue): ditto
3852        * bindings/c/c_utility.h:
3853
3854        * bindings/jni/jni_class.cpp: Same deal as c_class.cpp.
3855        (JavaClass::JavaClass):
3856        (JavaClass::~JavaClass):
3857
3858        * bindings/jni/jni_instance.cpp: Same deal as c_utility.cpp.
3859        (JavaInstance::stringValue):
3860        * bindings/jni/jni_jsobject.cpp:
3861        (JavaJSObject::convertValueToJObject):
3862
3863        * bindings/jni/jni_runtime.cpp:
3864        (JavaMethod::~JavaMethod): Moved from header, for clarity.
3865        (appendClassName): Made this static, so the set of callers is known, and
3866        we can assert that we hold the JSLock. Also changed it to take a UString
3867        reference, which makes the calling code simpler.
3868        (JavaMethod::signature): Store the ASCII value we care about instead of
3869        a UString, since UString is so much more hassle. Hold the JSLock while
3870        building up the temporary UString.
3871
3872        * bindings/jni/jni_runtime.h: Nixed dead code in JavaMethod.
3873        (KJS::Bindings::JavaString::JavaString): Hold a UString::Rep instead of
3874        a UString, so we can acquire the JSLock and explicitly release it.
3875        (KJS::Bindings::JavaString::_commonInit):
3876        (KJS::Bindings::JavaString::~JavaString):
3877        (KJS::Bindings::JavaString::UTF8String):
3878        (KJS::Bindings::JavaString::uchars):
3879        (KJS::Bindings::JavaString::length):
3880        (KJS::Bindings::JavaString::ustring):
3881
3882        * bindings/jni/jni_utility.cpp:
3883        (KJS::Bindings::convertArrayInstanceToJavaArray): Made this static, so 
3884        the set of callers is known, and we can assert that we hold the JSLock. 
3885        (KJS::Bindings::convertValueToJValue): Acquire the JSLock because doing
3886        it recursively is pretty cheap, and it's just too confusing to tell whether
3887        all our callers do it for us.
3888
3889        * bindings/objc/objc_runtime.h: Nixed some dead code.
3890        * bindings/objc/objc_utility.mm:
3891        (KJS::Bindings::convertNSStringToString): Same drill as above.
3892
38932007-03-18  Alexey Proskuryakov  <ap@webkit.org>
3894
3895        Reviewed by Geoff.
3896
3897        http://bugs.webkit.org/show_bug.cgi?id=13105
3898        REGRESSION: an exception raised when calculating base value of a dot expression is not returned
3899
3900        Test: fast/js/dot-node-base-exception.html
3901
3902        * kjs/nodes.cpp:
3903        (FunctionCallDotNode::evaluate): Added the necessary KJS_CHECKEXCEPTIONVALUE.
3904
39052007-03-18  Steve Falkenburg  <sfalken@apple.com>
3906
3907        Build fix.
3908
3909        * JavaScriptCore.vcproj/testkjs/testkjs.vcproj:
3910
39112007-03-17  Timothy Hatcher  <timothy@apple.com>
3912
3913        Reviewed by Mark Rowe.
3914
3915        Made Version.xcconfig smarter when building for different configurations.
3916        Now uses the 522+ OpenSource version for Debug and Release, while using the
3917        full 522.4 version for Production builds. The system prefix is also computed
3918        based on the current system, so 4522.4 on Tiger and 5522.4 on Leopard.
3919
3920        * Configurations/JavaScriptCore.xcconfig:
3921        * Configurations/Version.xcconfig:
3922
39232007-03-15  Maciej Stachowiak  <mjs@apple.com>
3924
3925        Not reviewed.
3926        
3927        - build fix
3928
3929        * wtf/TCSystemAlloc.cpp:
3930
39312007-03-15  Maciej Stachowiak  <mjs@apple.com>
3932
3933        Reviewed by Geoff and Steve.
3934        
3935        - fix some portability issues with TCMalloc.
3936
3937        * JavaScriptCore.vcproj/WTF/WTF.vcproj:
3938        * kjs/config.h:
3939        * wtf/FastMalloc.cpp:
3940        (WTF::SizeClass):
3941        (WTF::InitSizeClasses):
3942        (WTF::TCMalloc_PageHeap::Split):
3943        (WTF::TCMalloc_PageHeap::RegisterSizeClass):
3944        (WTF::TCMalloc_Central_FreeList::length):
3945        (WTF::TCMalloc_ThreadCache::InitTSD):
3946        (WTF::TCMalloc_ThreadCache::CreateCacheIfNecessary):
3947        * wtf/TCSpinLock.h:
3948        * wtf/TCSystemAlloc.cpp:
3949        (TryVirtualAlloc):
3950        (TCMalloc_SystemAlloc):
3951
39522007-03-15  Timothy Hatcher  <timothy@apple.com>
3953
3954        Reviewed by John.
3955
3956        * Factored out most of our common build settings into .xcconfig files. Anything that was common in
3957          each build configuration was factored out into the shared .xcconfig file.
3958        * Adds a Version.xcconfig file to define the current framework version, to be used in other places.
3959        * Use the new $(BUNDLE_VERSION) (defined in Version.xcconfig) in the preprocessed Info.plist.
3960        * Use the versions defined in Version.xcconfig to set $(DYLIB_CURRENT_VERSION).
3961
3962        * Configurations/Base.xcconfig: Added.
3963        * Configurations/DebugRelease.xcconfig: Added.
3964        * Configurations/JavaScriptCore.xcconfig: Added.
3965        * Configurations/Version.xcconfig: Added.
3966        * Info.plist:
3967        * JavaScriptCore.xcodeproj/project.pbxproj:
3968
39692007-03-16  Shrikant Gangoda  <shrikant.gangoda@celunite.com>
3970
3971        Gdk build fix.
3972
3973        * kjs/DateMath.cpp:  gettimeofday comes from <sys/time.h> on Linux.
3974
39752007-03-14  Kevin McCullough  <kmccullough@apple.com>
3976
3977        Reviewed by .
3978
3979        - Fixed one more build breakage
3980
3981        * kjs/date_object.cpp:
3982        (KJS::formatLocaleDate):
3983
39842007-03-14  Kevin McCullough  <kmccullough@apple.com>
3985
3986        Reviewed by .
3987
3988        - Fixed a build breakage.
3989
3990        * kjs/DateMath.cpp:
3991        * kjs/date_object.cpp:
3992        (KJS::formatLocaleDate):
3993        (KJS::DateObjectImp::construct):
3994
39952007-03-14  Kevin McCullough  <kmccullough@apple.com>
3996
3997        Reviewed by Geoff.
3998
3999        - rdar://problem/5045720
4000        - DST changes in US affect JavaScript date calculations (12975)
4001        This fix was to ensure we properly test for the new changes to DST in the US.
4002        Also this fixes when we apply DST, now we correctly map most past years to current
4003        DST rules.  We still have a small issue with years before 1900 or after 2100.
4004        rdar://problem/5055038
4005
4006        * kjs/DateMath.cpp: Fix DST to match spec better.
4007        (KJS::getCurrentUTCTime):
4008        (KJS::mimimumYearForDST):
4009        (KJS::maximumYearForDST):
4010        (KJS::equivalentYearForDST):
4011        (KJS::getDSTOffset):
4012        * kjs/DateMath.h: Consolodated common funtionality.
4013        * kjs/date_object.cpp: Consolodated common functionality.
4014        (KJS::formatLocaleDate):
4015        (KJS::DateObjectImp::construct):
4016        * tests/mozilla/ecma/jsref.js: Added functions for finding the correct days when DST starts and ends.
4017        * tests/mozilla/ecma/shell.js: Added back in the old DST functions for ease of merging with mozilla if needed.
4018        * tests/mozilla/ecma_2/jsref.js: Added functions for finding the correct days when DST starts and ends.
4019        * tests/mozilla/ecma_3/Date/shell.js: Added functions for finding the correct days when DST starts and ends.
4020        * tests/mozilla/expected.html: Updated to show all date tests passing.
4021
4022=== Safari-5522.4 ===
4023
40242007-03-13  Kevin McCullough  <kmccullough@apple.com>
4025
4026        Reviewed by .
4027
4028        - Adding expected failures until the are truly fixed. 
4029        - rdar://problem/5060302
4030
4031        * tests/mozilla/expected.html:
4032
40332007-03-12  Kevin McCullough  <kmccullough@apple.com>
4034
4035        Reviewed by .
4036
4037        - Actually update tests for new DST rules.
4038
4039        * tests/mozilla/ecma/Date/15.9.3.1-1.js:
4040        * tests/mozilla/ecma/Date/15.9.3.1-2.js:
4041        * tests/mozilla/ecma/Date/15.9.3.1-3.js:
4042        * tests/mozilla/ecma/Date/15.9.3.1-4.js:
4043        * tests/mozilla/ecma/Date/15.9.3.1-5.js:
4044        * tests/mozilla/ecma/Date/15.9.3.2-1.js:
4045        * tests/mozilla/ecma/Date/15.9.3.2-2.js:
4046        * tests/mozilla/ecma/Date/15.9.3.2-3.js:
4047        * tests/mozilla/ecma/Date/15.9.3.2-4.js:
4048        * tests/mozilla/ecma/Date/15.9.3.2-5.js:
4049        * tests/mozilla/ecma/Date/15.9.3.8-1.js:
4050        * tests/mozilla/ecma/Date/15.9.3.8-2.js:
4051        * tests/mozilla/ecma/Date/15.9.3.8-3.js:
4052        * tests/mozilla/ecma/Date/15.9.3.8-4.js:
4053        * tests/mozilla/ecma/Date/15.9.3.8-5.js:
4054        * tests/mozilla/ecma/Date/15.9.5.10-1.js:
4055        * tests/mozilla/ecma/Date/15.9.5.10-10.js:
4056        * tests/mozilla/ecma/Date/15.9.5.10-11.js:
4057        * tests/mozilla/ecma/Date/15.9.5.10-12.js:
4058        * tests/mozilla/ecma/Date/15.9.5.10-13.js:
4059        * tests/mozilla/ecma/Date/15.9.5.10-2.js:
4060        * tests/mozilla/ecma/Date/15.9.5.10-3.js:
4061        * tests/mozilla/ecma/Date/15.9.5.10-4.js:
4062        * tests/mozilla/ecma/Date/15.9.5.10-5.js:
4063        * tests/mozilla/ecma/Date/15.9.5.10-6.js:
4064        * tests/mozilla/ecma/Date/15.9.5.10-7.js:
4065        * tests/mozilla/ecma/Date/15.9.5.10-8.js:
4066        * tests/mozilla/ecma/Date/15.9.5.10-9.js:
4067        * tests/mozilla/ecma/jsref.js:
4068        * tests/mozilla/ecma_2/jsref.js:
4069        * tests/mozilla/ecma_3/Date/shell.js:
4070
40712007-03-12  Kevin McCullough  <kmccullough@apple.com>
4072
4073        Reviewed by .
4074
4075        - Update tests for new DST rules.
4076
4077        * tests/mozilla/ecma/shell.js:
4078
40792007-03-11  Geoffrey Garen  <ggaren@apple.com>
4080
4081        Reviewed by Oliver Hunt.
4082        
4083        Fixed <rdar://problem/4681051> Installer crashes in KJS::Collector::
4084        markOtherThreadConservatively(KJS::Collector::Thread*) trying to install 
4085        iLife 06 using Rosetta on an Intel Machine
4086        
4087        The problem was that our thread-specific data destructor would modify the
4088        list of active JavaScript threads without holding the JSLock, corrupting
4089        the list. Corruption was especially likely if one JavaScript thread exited 
4090        while another was starting up.
4091
4092        * JavaScriptCore.exp:
4093        * kjs/JSLock.cpp: Don't conflate locking the JSLock with registering a
4094        thread, since the thread-specific data destructor needs to lock
4095        without registering a thread. Instead, treat thread registration as a
4096        part of the convenience of the JSLock object, and whittle down JSLock::lock()
4097        to just the bits that actually do the locking.
4098        (KJS::JSLock::lock):
4099        (KJS::JSLock::registerThread):
4100        * kjs/JSLock.h: Updated comments to mention the new behavior above, and
4101        other recent changes.
4102        (KJS::JSLock::JSLock):
4103        * kjs/collector.cpp:
4104        (KJS::destroyRegisteredThread): Lock here.
4105        (KJS::Collector::registerThread): To match, assert that we're locked here.
4106
41072007-03-10  Geoffrey Garen  <ggaren@apple.com>
4108
4109        Reviewed by Darin Adler.
4110
4111        Fixed <rdar://problem/4587763> PAC file: lock inversion between QT and 
4112        JSCore causes a hang @ www.panoramas.dk
4113        
4114        With a PAC file, run-webkit-tests --threaded passes, the reported site
4115        works, and all the Quicktime/JavaScript and Flash/JavaScript examples
4116        I found through Google work, too.
4117        
4118        Any time JavaScript causes arbitrary non-JavaScript code to execute, it 
4119        risks deadlock, because that code may block, trying to acquire a lock 
4120        owned by a thread that is waiting to execute JavaScript. In this case,
4121        the thread was a networking thread that was waiting to interpret a PAC file.
4122        
4123        Because non-JavaScript code may execute in response to, well, anything,
4124        a perfect solution to this problem is impossible. I've implemented an
4125        optimistic solution, instead: JavaScript will drop its lock whenever it
4126        makes a direct call to non-JavaScript code through a bridging/plug-in API,
4127        but will blissfully ignore the indirect ways it may cause non-JavaScript 
4128        code to run (resizing a window, for example). 
4129        
4130        Unfortunately, this solution introduces significant locking overhead in 
4131        the bridging APIs. I don't see a way around that.
4132
4133        This patch includes some distinct bug fixes I saw along the way:
4134        
4135        * bindings/objc/objc_instance.mm: Fixed a bug where a nested begin() call
4136        would leak its autorelease pool, because it would NULL out _pool without
4137        draining it.
4138
4139        * bindings/runtime_object.cpp:
4140        (RuntimeObjectImp::methodGetter): Don't copy an Identifier to ASCII only
4141        to turn around and make an Identifier from the ASCII. In an earlier 
4142        version of this patch, the copy caused an assertion failure. Now it's 
4143        just unnecessary work.
4144        (RuntimeObjectImp::getOwnPropertySlot): ditto
4145
4146        * bindings/objc/objc_instance.h: Removed overrides of setVAlueOfField and
4147        getValueOfField, because they did exactly what the base class versions did.
4148        Removed overrides of Noncopyable declarations for the same reason.
4149
4150        * bindings/runtime.h: Inherit from Noncopyable instead of rolling our own.
4151        * bindings/c/c_instance.h: ditto
4152
4153        And the actual patch:
4154        
4155        * API/JSCallbackConstructor.cpp: Drop all locks when calling out to C.
4156        (KJS::JSCallbackConstructor::construct):
4157        * API/JSCallbackFunction.cpp: ditto
4158        (KJS::JSCallbackFunction::callAsFunction):
4159        * API/JSCallbackObject.cpp: ditto
4160        (KJS::JSCallbackObject::init):
4161        (KJS::JSCallbackObject::~JSCallbackObject):
4162        (KJS::JSCallbackObject::getOwnPropertySlot):
4163        (KJS::JSCallbackObject::put):
4164        (KJS::JSCallbackObject::deleteProperty):
4165        (KJS::JSCallbackObject::construct):
4166        (KJS::JSCallbackObject::hasInstance):
4167        (KJS::JSCallbackObject::callAsFunction):
4168        (KJS::JSCallbackObject::getPropertyNames):
4169        (KJS::JSCallbackObject::toNumber):
4170        (KJS::JSCallbackObject::toString):
4171        (KJS::JSCallbackObject::staticValueGetter):
4172        (KJS::JSCallbackObject::callbackGetter):
4173        
4174        * bindings/c/c_instance.cpp: Drop all locks when calling out to C.
4175        (KJS::Bindings::CInstance::invokeMethod):
4176        (KJS::Bindings::CInstance::invokeDefaultMethod):
4177        * bindings/c/c_runtime.cpp: Drop all locks when calling out to C.
4178        (KJS::Bindings::CField::valueFromInstance):
4179        (KJS::Bindings::CField::setValueToInstance):
4180        * bindings/jni/jni_objc.mm:
4181        (KJS::Bindings::dispatchJNICall): Drop all locks when calling out to Java.
4182
4183        * bindings/objc/objc_instance.mm: The changes here are to accomodate the
4184        fact that C++ unwinding of DropAllLocks goes crazy when you put it inside
4185        a @try block. I moved all JavaScript stuff outside of the @try blocks, and 
4186        then prefixed the whole blocks with DropAllLocks objects. This required some
4187        supporting changes in other functions, which now acquire the JSLock for
4188        themselves, intead of relying on their callers to do so.
4189        (ObjcInstance::end):
4190        (ObjcInstance::invokeMethod):
4191        (ObjcInstance::invokeDefaultMethod):
4192        (ObjcInstance::setValueOfUndefinedField):
4193        (ObjcInstance::getValueOfUndefinedField):
4194        * bindings/objc/objc_runtime.mm: Same as above, except I didn't want to
4195        change throwError to acquire the JSLock for itself.
4196        (ObjcField::valueFromInstance):
4197        (ObjcField::setValueToInstance):
4198        * bindings/objc/objc_utility.mm: Supporting changes mentioned above.
4199        (KJS::Bindings::convertValueToObjcValue):
4200        (KJS::Bindings::convertObjcValueToValue):
4201
4202        * kjs/JSLock.cpp: 
4203        (1) Fixed DropAllLocks to behave as advertised, and drop the JSLock only 
4204        if the current thread actually acquired it in the first place. This is 
4205        important because WebKit needs to ensure that the JSLock has been 
4206        dropped before it makes a plug-in call, even though it doesn't know if 
4207        the current thread actually acquired the JSLock. (We don't want WebKit
4208        to accidentally drop a lock belonging to *another thread*.)
4209        (2) Used the new per-thread code written for (1) to make recursive calls
4210        to JSLock very cheap. JSLock now knows to call pthread_mutext_lock/ 
4211        pthread_mutext_unlock only at nesting level 0.
4212        (KJS::createDidLockJSMutex):
4213        (KJS::JSLock::lock):
4214        (KJS::JSLock::unlock):
4215        (KJS::DropAllLocks::DropAllLocks):
4216        (KJS::DropAllLocks::~DropAllLocks):
4217        (KJS::JSLock::lockCount):
4218        * kjs/JSLock.h: Don't duplicate Noncopyable.
4219        (KJS::JSLock::~JSLock):
4220
4221        * wtf/Assertions.h: Blind attempt at helping the Windows build.
4222
42232007-03-08  Darin Fisher  <darin@chromium.org>
4224
4225        Reviewed by Darin.
4226
4227        http://bugs.webkit.org/show_bug.cgi?id=13018
4228        Bug 13018: allow embedders to override the definition of CRASH.
4229
4230        * wtf/Assertions.h: make it possible to override CRASH.
4231
42322007-03-07  Huan Ren  <huanr@chromium.org>
4233
4234        Reviewed by Maciej.
4235
4236        Fix http://bugs.webkit.org/show_bug.cgi?id=12535
4237        Bug 12535: Stack-optimizing compilers can trick GC into freeing in-use objects
4238
4239        * kjs/internal.cpp:
4240        (KJS::StringImp::toObject): Copy val onto the stack so it is not subject to garbage collection.
4241
42422007-03-07  Geoffrey Garen  <ggaren@apple.com>
4243
4244        Build fix for non-multiple-thread folks.
4245        
4246        Use a shared global in the non-multiple-thread case.
4247
4248        * wtf/FastMalloc.cpp:
4249        (WTF::isForbidden):
4250        (WTF::fastMallocForbid):
4251        (WTF::fastMallocAllow):
4252
42532007-03-07  Geoffrey Garen  <ggaren@apple.com>
4254
4255        Reviewed by Darin Adler.
4256        
4257        Fixed ASSERT failure I just introduced.
4258        
4259        Made the fastMalloc isForbidden flag per thread. (Oops!) We expect that
4260        other threads will malloc while we're marking -- we just want to prevent
4261        our own marking from malloc'ing.
4262
4263        * wtf/FastMalloc.cpp:
4264        (WTF::initializeIsForbiddenKey):
4265        (WTF::isForbidden):
4266        (WTF::fastMallocForbid):
4267        (WTF::fastMallocAllow):
4268        (WTF::fastMalloc):
4269        (WTF::fastCalloc):
4270        (WTF::fastFree):
4271        (WTF::fastRealloc):
4272        (WTF::do_malloc):
4273
42742007-03-07  Shrikant Gangoda  <shrikant.gangoda@celunite.com>
4275
4276        Reviewed by Maciej.
4277
4278        http://bugs.webkit.org/show_bug.cgi?id=12997
4279
4280        Wrap pthread-specific assertion in #if USE(MULTIPLE_THREADS).
4281
4282        * kjs/collector.cpp:
4283        (KJS::Collector::markMainThreadOnlyObjects):
4284
42852007-03-06  Geoffrey Garen  <ggaren@apple.com>
4286
4287        Reviewed by Maciej Stachowiak.
4288        
4289        Fixed <rdar://problem/4576242> | http://bugs.webkit.org/show_bug.cgi?id=12586
4290        PAC file: malloc deadlock sometimes causes a hang @ www.apple.com/pro/profiles/ (12586)
4291        
4292        This is a modified version of r14752 on the branch.
4293        
4294        These changes just add debugging functionality. They ASSERT that we don't 
4295        malloc during the mark phase of a garbage collection, which can cause a
4296        deadlock.
4297
4298        * kjs/collector.cpp:
4299        (KJS::Collector::collect):
4300        * wtf/FastMalloc.cpp:
4301        (WTF::fastMallocForbid):
4302        (WTF::fastMallocAllow):
4303        (WTF::fastMalloc):
4304        (WTF::fastCalloc):
4305        (WTF::fastFree):
4306        (WTF::fastRealloc):
4307        (WTF::do_malloc):
4308        * wtf/FastMalloc.h:
4309
43102007-03-06  Geoffrey Garen  <ggaren@apple.com>
4311
4312        Reviewed by Maciej Stachowiak.
4313        
4314        Fixed all known crashers exposed by run-webkit-tests --threaded. This covers:
4315
4316        <rdar://problem/4565394> | http://bugs.webkit.org/show_bug.cgi?id=12585 
4317            PAC file: after closing a window that contains macworld.com, new window 
4318            crashes (KJS::PropertyMap::mark()) (12585)
4319        <rdar://problem/4571215> | http://bugs.webkit.org/show_bug.cgi?id=9211
4320            PAC file: Crash occurs when clicking on the navigation tabs at http://www.businessweek.com/ (9211)
4321        <rdar://problem/4557926> 
4322            PAC file: Crash occurs when attempting to view image in slideshow mode 
4323            at http://d.smugmug.com/gallery/581716 ( KJS::IfNode::execute (KJS::
4324            ExecState*) + 312) if you use a PAC file
4325
4326        (1) Added some missing JSLocks, along with related ASSERTs.
4327        
4328        (2) Fully implemented support for objects that can only be garbage collected
4329        on the main thread. So far, only WebCore uses this. We can add it to API
4330        later if we learn that it's needed. 
4331        
4332        The implementation uses a "main thread only" flag inside each object. When 
4333        collecting on a secondary thread, the Collector does an extra pass through 
4334        the heap to mark all flagged objects before sweeping. This solution makes
4335        the common case -- flag lots of objects, but never collect on a secondary 
4336        thread -- very fast, even though the uncommon case of garbage collecting
4337        on a secondary thread isn't as fast as it could be. I left some notes 
4338        about how to speed it up, if we ever care.
4339        
4340        For posterity, here are some things I learned about GC while investigating:
4341        
4342        * Each collect must either mark or delete every heap object. "Zombie" 
4343        objects, which are neither marked nor deleted, raise these issues:
4344
4345            * On the next pass, the conservative marking algorithm might mark a 
4346            zombie, causing it to mark freed objects.
4347
4348            * The client might try to use a zombie, which would seem live because 
4349            its finalizer had not yet run.
4350
4351        * A collect on the main thread is free to delete any object. Presumably, 
4352        objects allocated on secondary threads have thread-safe finalizers.
4353
4354        * A collect on a secondary thread must not delete thread-unsafe objects.
4355
4356        * The mark function must be thread-safe.
4357        
4358        Line by line comments:
4359
4360        * API/JSObjectRef.h: Added comment specifying that the finalize callback 
4361        may run on any thread.
4362
4363        * JavaScriptCore.exp: Nothing to see here.
4364
4365        * bindings/npruntime.cpp:
4366        (_NPN_GetStringIdentifier): Added JSLock.
4367
4368        * bindings/objc/objc_instance.h:
4369        * bindings/objc/objc_instance.mm:
4370        (ObjcInstance::~ObjcInstance): Use an autorelease pool. The other callers 
4371        to CFRelease needed one, too, but they were dead code, so I removed them 
4372        instead. (This fixes a leak seen while running run-webkit-tests --threaded,
4373        although I don't think it's specifically a threading issue.) 
4374        
4375        * kjs/collector.cpp:
4376        (KJS::Collector::collectOnMainThreadOnly): New function. Tells the collector
4377        to collect a value only if it's collecting on the main thread.
4378        (KJS::Collector::markMainThreadOnlyObjects): New function. Scans the heap
4379        for "main thread only" objects and marks them.
4380
4381        * kjs/date_object.cpp: 
4382        (KJS::DateObjectImp::DateObjectImp): To make the new ASSERTs happy, allocate 
4383        our globals on the heap, avoiding a seemingly unsafe destructor call at 
4384        program exit time.
4385        * kjs/function_object.cpp:
4386        (FunctionPrototype::FunctionPrototype): ditto
4387
4388        * kjs/interpreter.cpp:
4389        (KJS::Interpreter::mark): Removed boolean parameter, which was an incomplete
4390        and arguably hackish way to implement markMainThreadOnlyObjects() inside WebCore.
4391        * kjs/interpreter.h:
4392
4393        * kjs/identifier.cpp:
4394        (KJS::identifierTable): Added some ASSERTs to check for thread safety 
4395        problems.
4396
4397        * kjs/list.cpp: Added some ASSERTs to check for thread safety problems.
4398        (KJS::allocateListImp):
4399        (KJS::List::release):
4400        (KJS::List::append):
4401        (KJS::List::empty): Make the new ASSERTs happy.
4402
4403        * kjs/object.h:
4404        (KJS::JSObject::JSObject): "m_destructorIsThreadSafe" => "m_collectOnMainThreadOnly".
4405        I removed the constructor parameter because m_collectOnMainThreadOnly,
4406        like m_marked, is a Collector bit, so only the Collector should set or get it.
4407
4408        * kjs/object_object.cpp:
4409        (ObjectPrototype::ObjectPrototype): Make the ASSERTs happy.
4410        * kjs/regexp_object.cpp:
4411        (RegExpPrototype::RegExpPrototype): ditto
4412
4413        * kjs/ustring.cpp: Added some ASSERTs to check for thread safety problems.
4414        (KJS::UCharReference::ref): 
4415        (KJS::UString::Rep::createCopying):
4416        (KJS::UString::Rep::create):
4417        (KJS::UString::Rep::destroy):
4418        (KJS::UString::null): Make the new ASSERTs happy.
4419        * kjs/ustring.h:
4420        (KJS::UString::Rep::ref): Added some ASSERTs to check for thread safety problems.
4421        (KJS::UString::Rep::deref):
4422
4423        * kjs/value.h:
4424        (KJS::JSCell::JSCell):
4425
44262007-03-06  Geoffrey Garen  <ggaren@apple.com>
4427
4428        Reviewed by Maciej Stachowiak.
4429        
4430        2% speedup on super accurate JS iBench.
4431
4432        (KJS::Collector::collect): Removed anti-optimization to call
4433        pthread_is_threaded_np() before calling pthread_main_np(). Almost all 
4434        apps have more than one thread, so the extra call is actually worse.
4435        Interestingly, even the single-threaded testkjs shows a speed gain
4436        from removing the pthread_is_threaded_np() short-circuit. Not sure why.
4437
44382007-03-04  Peter Kasting  <pkasting@google.com>
4439
4440        Reviewed by Nikolas Zimmermann.
4441
4442        - fix http://bugs.webkit.org/show_bug.cgi?id=12950
4443          Assertions.cpp should not #define macros that are already defined
4444
4445        * wtf/Assertions.cpp: Don't #define WINVER and _WIN32_WINNT if they
4446        are already defined.
4447
44482007-03-02  Steve Falkenburg  <sfalken@apple.com>
4449
4450        Reviewed by Anders.
4451        
4452        Add unsigned int hash traits (matches existing unsigned long version)
4453
4454        * wtf/HashTraits.h:
4455        (WTF::):
4456
44572007-03-02  Adam Roben  <aroben@apple.com>
4458
4459        Reviewed by Kevin M.
4460
4461        Try to fix the Qt build.
4462
4463        * kjs/DateMath.cpp:
4464        (KJS::msToGregorianDateTime): Removed unnecessary "struct" keyword.
4465        * kjs/DateMath.h: Moved forward declarations to the top of the file
4466        before they are used.
4467        * kjs/date_object.cpp:
4468        (KJS::formatLocaleDate): Changed to take a const GregorianDateTime&
4469        since GregorianDateTime is Noncopyable.
4470
44712007-03-02  Darin Adler  <darin@apple.com>
4472
4473        Reviewed by Kevin McCullough.
4474
4475        - fix http://bugs.webkit.org/show_bug.cgi?id=12867
4476          REGRESSION: BenchJS test 7 (dates) is 220% slower than in Safari 2.0.4
4477
4478        * kjs/DateMath.h: Marked GregorianDateTime as noncopyable, since it has a non-trivial
4479        destructor and not the correspoding copy constructor or assignment operator.
4480        Changed the GregorianDateTime constructor to use member initialization syntax.
4481        Fixed the destructor to use the array delete operator, since timeZone is an array.
4482
4483        * kjs/DateMath.cpp:
4484        (KJS::daysInYear): Changed to call isLeapYear so the rule is not repeated twice.
4485        (KJS::getUTCOffset): Added caching on PLATFORM(DARWIN), since we can rely on the
4486        notify_check function and "com.apple.system.timezone" to let us know when the
4487        offset has changed.
4488
44892007-02-27  Geoffrey Garen  <ggaren@apple.com>
4490
4491        Reviewed by Darin Adler.
4492        
4493        Follow-up to fixing http://bugs.webkit.org/show_bug.cgi?id=12659 | <rdar://problem/4954306>
4494        JS objects not collected after closing window @ ebay.com/maps.google.com
4495        
4496        Changed Interpreter cache of global constructors and prototypes from
4497        ProtectedPtrs to bare, marked pointers. ProtectedPtrs are inefficient,
4498        and they increase the risk of reference cycles. Also, Darin said something
4499        about ProtectedPtrs giving him warts.
4500        
4501        Also changed data members to precise types from generic JSObject*'s.
4502        
4503        Layout tests and JS tests pass.
4504
4505        * kjs/SavedBuiltins.h:
4506        * kjs/interpreter.cpp:
4507        (KJS::Interpreter::init):
4508        (KJS::Interpreter::~Interpreter):
4509        (KJS::Interpreter::initGlobalObject): Moved Identifier::init() call to
4510        constructor, for clarity.
4511        (KJS::Interpreter::mark):
4512        * kjs/interpreter.h:
4513
45142007-02-27  Geoffrey Garen  <ggaren@apple.com>
4515
4516        Reviewed by Maciej Stachowiak.
4517        
4518        Fixed http://bugs.webkit.org/show_bug.cgi?id=12659 | <rdar://problem/4954306>
4519        JS objects not collected after closing window @ ebay.com/maps.google.com
4520
4521        Don't GC in the Interpreter destructor. For that to work, the Interpreter
4522        would have to NULL out all of its ProtectedPtrs before calling collect(). But 
4523        we've decided that we don't want things to work that way, anyway. We want the
4524        client to be in charge of manual GC so that it can optimize cases when
4525        it will be destroying many interpreters at once
4526        (e.g., http://bugs.webkit.org/show_bug.cgi?id=12900).
4527        
4528        Also removed Interpreter::collect() because it was redundant with 
4529        Collector::collect().
4530
4531        * JavaScriptCore.exp:
4532        * kjs/interpreter.cpp:
4533        (KJS::Interpreter::~Interpreter):
4534        * kjs/testkjs.cpp:
4535        (TestFunctionImp::callAsFunction):
4536
45372007-02-26  Krzysztof Kowalczyk  <kkowalczyk@gmail.com>
4538
4539        Reviewed by Adam Roben.
4540
4541        Rename *_SUPPORT defines to ENABLE_*.
4542
4543        * jscore.bkl:
4544
45452007-02-26  Maciej Stachowiak  <mjs@apple.com>
4546
4547        Reviewed by Lars.
4548        
4549        - <rdar://problem/5021698> Disable experimental SVG features (12883)
4550
4551        * wtf/Platform.h: Add ENABLE() macro similar to HAVE() and USE(), to
4552        allow nicer handling of optional WebKit features.
4553
45542007-02-22  George Staikos  <staikos@kde.org>
4555
4556        Reviewed by Lars.
4557
4558        Add return values
4559
4560        * wtf/unicode/qt4/UnicodeQt4.h:
4561        (WTF::Unicode::toLower):
4562        (WTF::Unicode::toUpper):
4563
45642007-02-22  Oscar Cwajbaum  <public@oscarc.net>
4565
4566        Reviewed by Maciej.
4567
4568        Fix ARM-specific alignment problem in FastMalloc
4569        http://bugs.webkit.org/show_bug.cgi?id=12841
4570
4571        * wtf/FastMalloc.cpp:
4572        Modify how pageheap_memory is declared to ensure proper alignment
4573        on architectures such as ARM
4574
45752007-02-20  Zack Rusin  <zrusin@trolltech.com>
4576
4577        Reviewed by Lars
4578
4579        Make sure that non-void methods always return something.
4580
4581        * wtf/unicode/qt4/UnicodeQt4.h:
4582        (WTF::Unicode::toLower):
4583        (WTF::Unicode::toUpper):
4584        (WTF::Unicode::foldCase):
4585
45862007-02-18  Kevin Ollivier  <kevino@theolliviers.com>
4587
4588        Reviewed by Adam Roben.
4589
4590        Fix cases where MSVC-specific code was identified as Win32 platform
4591        code. (as it should be compiled for e.g. wx port when using MSVC too)
4592        
4593        * wtf/Assertions.h: 
4594        * wtf/MathExtras.h:
4595        * wtf/StringExtras.h:
4596        changed PLATFORM(WIN) sections to COMPILER(MSVC) as necessary
4597
45982007-02-17  Krzysztof Kowalczyk  <kkowalczyk@gmail.com>
4599
4600        Reviewed by Adam Roben.
4601
4602        Fix crashes on ARM due to different struct packing. Based on a patch
4603        by Mike Emmel.
4604        * kjs/ustring.cpp: compile-time assert to make sure sizeof(UChar) == 2
4605        * kjs/ustring.h: pack UChar struct to ensure that sizeof(UChar) == 2
4606        * wtf/Assertions.h: add COMPILE_ASSERT macro for compile-time assertions
4607
46082007-02-16  George Staikos  <staikos@kde.org>
4609
4610        Reviewed by Maciej.
4611
4612        Fix uninitialized variable
4613
4614        * bindings/testbindings.cpp:
4615        (myAllocate):
4616
46172007-02-16  Anders Carlsson  <acarlsson@apple.com>
4618
4619        Reviewed by Mitz.
4620
4621        http://bugs.webkit.org/show_bug.cgi?id=12788
4622        REGRESSION: Going back one page in history has a noticeable delay
4623        
4624        Um...if all elements in two vectors are equal, then I guess we could say that
4625        the two vectors are equal too.
4626        
4627        * wtf/Vector.h:
4628        (WTF::):
4629
46302007-02-14  Anders Carlsson  <acarlsson@apple.com>
4631
4632        Reviewed by Darin.
4633
4634        Add new canCompareWithMemcmp vector trait and use it to determine whether
4635        operator== can use memcmp.
4636        
4637        * wtf/Vector.h:
4638        (WTF::):
4639        (WTF::VectorTypeOperations::compare):
4640        (WTF::operator==):
4641        * wtf/VectorTraits.h:
4642        (WTF::):
4643
46442007-02-13  Brady Eidson  <beidson@apple.com>
4645
4646        Reviewed by Darin
4647        
4648        Tweaked vector a bit
4649
4650        * wtf/Vector.h:
4651        (WTF::operator==):
4652
46532007-02-13  Matt Perry  <mpcomplete@chromium.org>
4654
4655        Reviewed by Darin.
4656
4657        - fix for http://bugs.webkit.org/show_bug.cgi?id=12750
4658          Vector operator== was not defined correctly. It returned void,
4659          did not accept const Vectors, and used an int instead of size_t. 
4660
4661        * wtf/Vector.h: fixed comparison operators
4662        (WTF::operator==):
4663        (WTF::operator!=):
4664
46652007-02-10  David Carson  <dacarson@gmail.com>
4666
4667        Reviewed by Maciej.
4668
4669        - fix for http://bugs.webkit.org/show_bug.cgi?id=12636
4670        Corrected the generation of method signatures when the parameter
4671        is an Array. 
4672        Added support for converting a Javascript array to a Java array.
4673
4674        * bindings/jni/jni_utility.h: added new type for array, array_type
4675        * bindings/jni/jni_runtime.cpp: add support for new array type
4676        (JavaField::valueFromInstance):
4677        (JavaField::setValueToInstance):
4678        (JavaMethod::JavaMethod):
4679        (JavaMethod::signature):
4680        * bindings/jni/jni_utility.cpp: add support for new array type
4681        (KJS::Bindings::callJNIMethod):
4682        (KJS::Bindings::callJNIStaticMethod):
4683        (KJS::Bindings::callJNIMethodIDA):
4684        (KJS::Bindings::JNITypeFromClassName):
4685        (KJS::Bindings::signatureFromPrimitiveType):
4686        (KJS::Bindings::JNITypeFromPrimitiveType):
4687        (KJS::Bindings::getJNIField):
4688        (KJS::Bindings::convertArrayInstanceToJavaArray): new method
4689        converts the Javascript array to the requested Java array.
4690        (KJS::Bindings::convertValueToJValue):
4691
46922007-02-08  Anders Carlsson  <acarlsson@apple.com>
4693
4694        Reviewed by Geoff.
4695
4696        <rdar://problem/4930614>
4697        Safari complains about "Slow Script" if GMail is left open and machine is busy
4698        
4699        <rdar://problem/4649516>
4700        Turn off slow script dialog or crank up time that makes it come up
4701        
4702        <rdar://problem/4963589>
4703        Slow script warning is displayed after closing of PROMPT or PRINT dialog
4704        
4705        Re-do the way script timeouts are handled. No longer use a unix timer that sends signals. Instead, add a 
4706        tick count and increment it in loop bodies. If the tick count reaches a threshold, do a timeout check. If the total time executing
4707        is higher than the timeout value, (possibly) interrupt the script. The timeout checker also adjusts the threshold dynamically
4708        to prevent doing the timeout check too often.
4709         
4710        * JavaScriptCore.exp:
4711        Remove pause and resume calls.
4712        
4713        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
4714        Add winmm.lib.
4715
4716        * kjs/interpreter.cpp:
4717        (KJS::Interpreter::init):
4718        (KJS::Interpreter::~Interpreter):
4719        (KJS::Interpreter::startTimeoutCheck):
4720        (KJS::Interpreter::stopTimeoutCheck):
4721        (KJS::Interpreter::resetTimeoutCheck):
4722        (KJS::getCurrentTime):
4723        (KJS::Interpreter::checkTimeout):
4724        * kjs/interpreter.h:
4725        (KJS::Interpreter::timedOut):
4726        * kjs/nodes.cpp:
4727        (DoWhileNode::execute):
4728        (WhileNode::execute):
4729        (ForNode::execute):
4730
47312007-02-07  Darin Adler  <darin@apple.com>
4732
4733        * JavaScriptCore.vcproj/JavaScriptCore.sln: Reenable testkjs.
4734
47352007-02-07  Darin Adler  <darin@apple.com>
4736
4737        Reviewed by Geoff.
4738
4739        - another build fix; this time for sure
4740
4741        * pcre/pcre_exec.c: (match):
4742        The compiler caught an incorrect use of the othercase variable across
4743        a call to RMATCH in character repeat processing. Local variables can
4744        change in the crazy NO_RECURSE mode that we use, so we instead need
4745        the value in othercase to be in one of the special stack frame variables.
4746        Added a new stack frame variable for this purpose named repeat_othercase.
4747        Also noted a similar error in the non-UTF-16 side of the #ifdef, but
4748        didn't try to fix that one. Also removed a SUPPORT_UCP #ifdef from the
4749        PCRE_UTF16 side; that code doesn't work without the Unicde properties
4750        table, and we don't try to use it that way.
4751
47522007-02-06  Steve Falkenburg  <sfalken@apple.com>
4753
4754        Disable testkjs in sln until we figure out mysterious compiler warning.
4755
4756        * JavaScriptCore.vcproj/JavaScriptCore.sln:
4757
47582007-02-06  Steve Falkenburg  <sfalken@apple.com>
4759
4760        Build fix by ggaren
4761
4762        * pcre/pcre_exec.c:
4763        (match):
4764
47652007-02-06  Darin Adler  <darin@apple.com>
4766
4767        Reviewed by Geoff.
4768
4769        - fix <rdar://problem/4979089> PCRE should avoid setjmp/longjmp even when compiler
4770          is not GCC
4771
4772        Added a new code path that's slower and way uglier but doesn't rely on GCC's
4773        computed gotos.
4774
4775        * pcre/pcre_exec.c: Added a numeric parameter to the RMATCH function. It must be
4776        different at every RMATCH call site. Changed the non-GCC NO_RECURSE version of
4777        the macro to use a label incorporating the number. Changed the RRETURN macro to
4778        use a goto instead of longjmp.
4779        (match): Added a different number at each callsite, using a perl script for the
4780        first-time task. Going forward it should be easy to maintain by hand. Added a
4781        switch statement at the bottom of the function. We'll get compile time errors
4782        if we have anything in the switch statement that's never used in an RMATCH,
4783        but errors in the other direction are silent except at runtime.
4784
47852007-02-06  Darin Adler  <darin@apple.com>
4786
4787        Reviewed by John.
4788
4789        - fix <rdar://problem/4687840> 9A241: JavaScript RegExp 25-30x slower than on 10.4.7
4790
4791        I used Shark to figure out what to do. The test case is now 15% faster than with
4792        stock Safari. Some other regular expression cases might still be a few % slower
4793        than before, but the >10x slowdown is now completely gone.
4794
4795        1) Fix slowness caused by setjmp/longjmp by using computed goto instead.
4796
4797        Use GCC extensions - locally declared labels, labels as values, and computed goto -
4798        instead of using setjmp/longjmp to implemement non-recursive version of the regular
4799        expression system. We could probably make this even faster if we reduced the use
4800        of malloc a bit too.
4801
4802        2) Fix slowness caused by allocating heapframe objects by allocating the first
4803           16 of them from the stack.
4804
4805        3) Speed up use of malloc and free in PCRE by making it use fastMalloc and fastFree.
4806
4807        4) Speed up the test case by adding a special case to a UString function.
4808
4809        5) Made a small improvement to the innermost hottest loop of match by hoisting
4810           the conversion from int to pcre_uchar out of the loop.
4811
4812        * JavaScriptCore.xcodeproj/project.pbxproj: Compile FastMallocPCRE.cpp, and don't
4813        compile pcre_globals.c.
4814
4815        * wtf/FastMallocPCRE.cpp: Added. A copy of pcre_globals.c that uses FastMalloc.h.
4816        This is better than code that sets the PCRE allocation globals because by doing it
4817        this way there's guaranteed to be no problem with order of initialization.
4818
4819        * kjs/ustring.cpp: (KJS::UString::spliceSubstringsWithSeparators): Add a fast
4820        special case when this is called for only one subrange and no seaprators. This
4821        was happening a lot in the test case and it seems quite reasonable to optimize this.
4822
4823        * pcre/pcre_exec.c: Create a copy of the RMATCH and RRETURN macros that use goto
4824        instead of setjmp/longjmp. Change code that calls pcre_stack_malloc to first use
4825        storage on the stack inside the match function.
4826        (match): Move initialization of utf8 up a couple lines to avoid "possibly used
4827        uninitialized" warning. Use a local variable so we compare with pcre_uchar instead
4828        of with int inside the inner "find a character" loop.
4829
48302007-02-03  George Staikos  <staikos@kde.org>
4831
4832        Reviewed by Alexey.
4833
4834        -1 is not a valid point.  We can't handle anything > 0xffff anyway.
4835        Fixes crash on cases like eval("x");
4836
4837        * wtf/unicode/qt4/UnicodeQt4.h:
4838        (WTF::Unicode::category):
4839
48402007-02-02  Darin Adler  <darin@apple.com>
4841
4842        Reviewed by Anders.
4843
4844        - fix copying and assigning a ListHashSet
4845
4846        No test because the code path with bugs I am fixing is not used yet.
4847
4848        * wtf/ListHashSet.h: Tweaked ListHashSetNodeAllocator a little bit for clarity.
4849        Changed m_allocator to be an OwnPtr instead of doing an explicit delete.
4850        Fixed bug in copy constructor where we'd have an uninitialized m_allocator.
4851        Fixed bug in assignment operator where it would swap only the hash table, and
4852        not the head, tail, and allocator pointers.
4853
48542007-02-02  Geoffrey Garen  <ggaren@apple.com>
4855
4856        Reviewed by Maciej Stachowiak.
4857        
4858        Use WTFLog instead of fprintf for logging KJS::Node leaks.
4859
4860        * kjs/nodes.cpp:
4861        (NodeCounter::~NodeCounter): Changed count to unsigned, updated
4862        to match style guidelines.
4863
48642007-02-02  Maciej Stachowiak  <mjs@apple.com>
4865
4866        - not reviewed, build fix
4867
4868        * wtf/ListHashSet.h:
4869        (WTF::ListHashSetNodeAllocator::ListHashSetNodeAllocator): ummm, use union correctly
4870
48712007-02-01  Maciej Stachowiak  <mjs@apple.com>
4872
4873        Reviewed by Darin.
4874        
4875        - use a custom allocator for ListHashSet, to fix ~1% perf regression using it for form control
4876
4877        * wtf/ListHashSet.h:
4878        (WTF::ListHashSetNodeAllocator::ListHashSetNodeAllocator):
4879        (WTF::ListHashSetNodeAllocator::allocate):
4880        (WTF::ListHashSetNodeAllocator::deallocate):
4881        (WTF::ListHashSetNode::operator new):
4882        (WTF::ListHashSetNode::operator delete):
4883        (WTF::ListHashSetNode::destroy):
4884        (WTF::ListHashSetTranslator::translate):
4885        (WTF::::ListHashSet):
4886        (WTF::::~ListHashSet):
4887        (WTF::::add):
4888        (WTF::::unlinkAndDelete):
4889        (WTF::::deleteAllNodes):
4890
48912007-01-31  Maciej Stachowiak  <mjs@apple.com>
4892
4893        Reviewed by Adam.
4894        
4895        - fix sporadic crash
4896
4897        * wtf/ListHashSet.h:
4898        (WTF::::remove): remove before deleting
4899
49002007-01-31  Maciej Stachowiak  <mjs@apple.com>
4901
4902        Reviewed by Mark with help from Lars.
4903        
4904        - added new ListHashSet class, which combines a hashtable and a linked list to provide a set
4905        that keeps elements in inserted order
4906        
4907        This is to assist in fixing the following:
4908        <rdar://problem/4751164> REGRESSION: Safari places text on incorrect button when returning to a page via back [10541]
4909        http://bugs.webkit.org/show_bug.cgi?id=10541
4910
4911        * JavaScriptCore.vcproj/WTF/WTF.vcproj:
4912        * JavaScriptCore.xcodeproj/project.pbxproj:
4913        * wtf/HashTable.h:
4914        (WTF::HashTable::find):
4915        (WTF::HashTable::contains):
4916        (WTF::::find):
4917        (WTF::::contains):
4918        * wtf/ListHashSet.h: Added.
4919        (WTF::ListHashSetNode::ListHashSetNode):
4920        (WTF::ListHashSetNodeHashFunctions::hash):
4921        (WTF::ListHashSetNodeHashFunctions::equal):
4922        (WTF::ListHashSetIterator::ListHashSetIterator):
4923        (WTF::ListHashSetIterator::get):
4924        (WTF::ListHashSetIterator::operator*):
4925        (WTF::ListHashSetIterator::operator->):
4926        (WTF::ListHashSetIterator::operator++):
4927        (WTF::ListHashSetIterator::operator--):
4928        (WTF::ListHashSetIterator::operator==):
4929        (WTF::ListHashSetIterator::operator!=):
4930        (WTF::ListHashSetIterator::operator const_iterator):
4931        (WTF::ListHashSetIterator::node):
4932        (WTF::ListHashSetConstIterator::ListHashSetConstIterator):
4933        (WTF::ListHashSetConstIterator::get):
4934        (WTF::ListHashSetConstIterator::operator*):
4935        (WTF::ListHashSetConstIterator::operator->):
4936        (WTF::ListHashSetConstIterator::operator++):
4937        (WTF::ListHashSetConstIterator::operator--):
4938        (WTF::ListHashSetConstIterator::operator==):
4939        (WTF::ListHashSetConstIterator::operator!=):
4940        (WTF::ListHashSetConstIterator::node):
4941        (WTF::ListHashSetTranslator::hash):
4942        (WTF::ListHashSetTranslator::equal):
4943        (WTF::ListHashSetTranslator::translate):
4944        (WTF::::ListHashSet):
4945        (WTF::::operator):
4946        (WTF::::~ListHashSet):
4947        (WTF::::size):
4948        (WTF::::capacity):
4949        (WTF::::isEmpty):
4950        (WTF::::begin):
4951        (WTF::::end):
4952        (WTF::::find):
4953        (WTF::::contains):
4954        (WTF::::add):
4955        (WTF::::remove):
4956        (WTF::::clear):
4957        (WTF::::unlinkAndDelete):
4958        (WTF::::appendNode):
4959        (WTF::::deleteAllNodes):
4960        (WTF::::makeIterator):
4961        (WTF::::makeConstIterator):
4962        (WTF::deleteAllValues):
4963
49642007-01-30  Darin Adler  <darin@apple.com>
4965
4966        * kjs/DateMath.cpp: Fix license header to reflect LGPL as the first license
4967        mentioned. We still mention the option of using under MPL or GPL since some
4968        of this code came from the Mozilla project with those license terms.
4969
49702007-01-30  Simon Hausmann  <hausmann@kde.org>
4971
4972        Reviewed by Zack.
4973
4974        Turned JavaScriptCore from a separate library into an includable
4975        project, to combine it all into libWebKitQt.
4976
4977        * JavaScriptCore.pri: Added.
4978        * JavaScriptCore.pro: Removed.
4979        * kjs/testkjs.pro:
4980
49812007-01-29  Geoffrey Garen  <ggaren@apple.com>
4982
4983        Reviewed by Maciej Stachowiak.
4984
4985        Fixed <rdar://problem/4485644> REGRESSION: JavaScriptCore has init routines
4986        
4987        The TCMalloc module now initializes, if needed, inside GetCache() and 
4988        fastMallocSetIsMultiThreaded(). We leverage the same synchronization 
4989        technique used for enabling / disabling the single-threaded optimization 
4990        to synchronize initialization of the library without requiring a lock 
4991        for every malloc.
4992        
4993        1,251 runs of tcmalloc_unittest, 2 runs of a custom, massively multi-threaded 
4994        tcmalloc_unittest, and my custom version of the PLT show no regressions.
4995        Super-accurate JS iBench reports a .24% regression, which is right at the
4996        limit of its error range, so I'm declaring victory.
4997
4998        * wtf/FastMalloc.cpp:
4999        (WTF::fastMallocSetIsMultiThreaded): Initialize, if needed. (InitModule()
5000        checks the "if needed" part.)
5001        (WTF::TCMalloc_ThreadCache::GetCache): Restored original TCMalloc code
5002        inside #ifdef, for posterity. Added new initialization logic.
5003        (WTF::TCMalloc_ThreadCache::InitModule): Call InitTSD(), since we don't
5004        have a static initializer to call it for us, now. This means that fastMalloc
5005        is not usable as a general libc allocator, but it never was, and if it were
5006        the general libc allocator, we wouldn't be here in the first place, so whatever.
5007        (WTF::TCMalloc_ThreadCache::InitTSD): Don't try to take the pageheap_lock, 
5008        since InitModule already has it.
5009
50102007-01-29  Kevin McCullough  <KMcCullough@apple.com>
5011
5012        Reviewed by Geoff and Oliver.
5013
5014        - rdar://problem/4955561
5015        - missusing JavaScript shouldn't crash webkit.  Now it doesn't, in this case.
5016
5017        * bindings/objc/objc_runtime.mm:
5018        (ObjcFallbackObjectImp::callAsFunction):
5019        * bindings/runtime_method.cpp:
5020        (RuntimeMethod::callAsFunction):
5021        * bindings/runtime_object.cpp:
5022        (RuntimeObjectImp::callAsFunction):
5023
50242007-01-28  Geoffrey Garen  <ggaren@apple.com>
5025
5026        Reviewed by Maciej Stachowiak.
5027        
5028        First step in fixing <rdar://problem/4485644> REGRESSION: JavaScriptCore 
5029        has init routines
5030        
5031        Don't rely on a static initializer to store the main thread's ID (which
5032        we would use to detect allocations on secondary threads). Instead, require 
5033        the caller to notify fastMalloc if it might allocate on a secondary thread.
5034        
5035        Also fixed what seemed like a race condition in do_malloc.
5036        
5037        tcmalloc_unittest and my custom versions of JS iBench and PLT show no
5038        regressions.
5039
5040        * wtf/FastMalloc.cpp:
5041        (WTF::fastMallocSetIsMultiThreaded): 
5042        (1) Renamed from "fastMallocRegisterThread", which was a misleading name because 
5043        not all threads need to register with fastMalloc -- only secondary threads 
5044        need to, and only for the purpose of disabling its single-threaded optimization. 
5045
5046        (2) Use the pageheap_lock instead of a custom one, since we need to synchronize
5047        with the read of isMultiThreaded inside CreateCacheIfNecessary. This is a new
5048        requirement, now that we can't guarantee that the first call to CreateCacheIfNecessary
5049        will occur on the main thread at init time, before any other threads have been created.
5050
5051        (WTF::TCMalloc_ThreadCache::CreateCacheIfNecessary):
5052        (WTF::do_malloc): Reverted WTF change only to call GetCache() if size <= kMaxSize.
5053        The WTF code would read phinited without holding the pageheap_lock, which
5054        seemed like a race condition. Regardless, calling GetCache reduces the number 
5055        of code paths to module initialization, which will help in writing the 
5056        final fix for this bug.
5057
50582007-01-28  David Kilzer  <ddkilzer@webkit.org>
5059
5060        Reviewed by Darin.
5061
5062        - fix http://bugs.webkit.org/show_bug.cgi?id=9815
5063          JavaScript TypeError loading Dean Edwards' JS compressor/obfuscator
5064
5065        Creating a function using 'new Function()' was not setting its prototype with the
5066        same flags as 'function() { }'.
5067
5068        Test: fast/js/function-prototype.html
5069
5070        * kjs/function_object.cpp:
5071        (FunctionObjectImp::construct): Change flags from DontEnum|DontDelete|ReadOnly to
5072        Internal|DontDelete to match FuncDeclNode::processFuncDecl() and
5073        FuncExprNode::evaluate() in kjs/nodes.cpp.
5074
50752007-01-27  Geoffrey Garen  <ggaren@apple.com>
5076
5077        Reviewed by Beth Dakin.
5078        
5079        Added some missing JSLocks, which might fix <rdar://problem/4889707>.
5080
5081        We need to lock whenever we might allocate memory because our FastMalloc
5082        implementation requires clients to register their threads, which we do
5083        through JSLock. 
5084        
5085        We also need to lock whenever modifying ref-counts because they're not 
5086        thread-safe.
5087
5088        * API/JSObjectRef.cpp:
5089        (JSClassCreate): Allocates memory
5090        (JSClassRetain): Modifies a ref-count
5091        (JSClassRelease): Modifies a ref-count
5092        (JSPropertyNameArrayRetain): Modifies a ref-count
5093        (JSPropertyNameArrayRelease): Modifies a ref-count
5094        * API/JSStringRef.cpp:
5095        (JSStringRetain): Modifies a ref-count
5096        * API/JSValueRef.cpp:
5097        (JSValueIsInstanceOfConstructor): Might allocate memory if an exception
5098        is thrown.
5099
51002007-01-27  Lars Knoll <lars@trolltech.com>
5101
5102        Fix the Qt build.
5103
5104        * bindings/qt/qt_instance.h:
5105
51062007-01-25  Geoffrey Garen  <ggaren@apple.com>
5107
5108        Reviewed by Maciej Stachowiak.
5109        
5110        Fixed <rdar://problem/4608404> WebScriptObject's _rootObject lack 
5111        of ownership policy causes crashes (e.g., in Dashcode)
5112        
5113        The old model for RootObject ownership was either to (1) leak them or (2) assign
5114        them to a single owner -- the WebCore::Frame -- which would destroy them 
5115        when it believed that all of its plug-ins had unloaded.
5116        
5117        This model was broken because of (1) and also because plug-ins are not the only 
5118        RootObject clients. All Bindings clients are RootObjects clients, including 
5119        applications, which outlive any particular WebCore::Frame.
5120        
5121        The new model for RootObject ownership is to reference-count them, with a
5122        throw-back to the old model: The WebCore::Frame tracks the RootObjects
5123        it creates, and invalidates them when it believes that all of its plug-ins 
5124        have unloaded.
5125        
5126        We maintain this throw-back to avoid plug-in leaks, particularly from Java.
5127        Java is completely broken when it comes to releasing JavaScript objects. 
5128        Comments in our code allege that Java does not always call finalize when 
5129        collecting objects. Moreoever, my own testing reveals that, when Java does 
5130        notify JavaScript of a finalize, the data it provides is totally bogus.
5131        
5132        This setup is far from ideal, but I don't think we can do better without
5133        completely rewriting the bindings code, and possibly part of the Java
5134        plug-in / VM.
5135        
5136        Layout tests pass. No additional leaks reported. WebCore/manual-tests/*liveconnect*
5137        and a few LiveConnect demos on the web also run without a hitch.
5138        
5139        const RootObject* => RootObject*, since we need to ref/deref
5140        
5141        * bindings/NP_jsobject.cpp:
5142        (jsDeallocate): deref our RootObjects. Also unprotect or JSObject, instead
5143        of just relying on the RootObject to do it for us when it's invalidated.
5144        (_isSafeScript): Check RootObject validity.
5145        (_NPN_CreateScriptObject): ditto
5146        (_NPN_Invoke): ditto
5147        (_NPN_Evaluate): ditto
5148        (_NPN_GetProperty): ditto
5149        (_NPN_SetProperty): ditto
5150        (_NPN_RemoveProperty): ditto
5151        (_NPN_HasProperty): ditto
5152        (_NPN_HasMethod): ditto
5153        (_NPN_SetException): ditto
5154
5155        * bindings/runtime_root.cpp: 
5156        Revived bit-rotted LIAR LIAR LIAR comment.
5157        
5158        LOOK: Added support for invalidating RootObjects without deleting them, 
5159        which is the main goal of this patch. 
5160
5161        Moved protect counting into the RootObject class, to emphasize that 
5162        the RootObject protects the JSObject, and unprotects it upon being invalidated.
5163            addNativeReference => RootObject::gcProtect
5164            removeNativeReference => RootObject::gcUnprotect
5165            ProtectCountSet::contains => RootObject::gcIsProtected
5166            
5167        I know we'll all be sad to see the word "native" go.
5168        
5169        * bindings/runtime_root.h: Added ref-counting support to RootObject, with
5170        all the standard accoutrements.
5171
5172        * bindings/c/c_utility.cpp:
5173        (KJS::Bindings::convertValueToNPVariant): If we can't find a valid RootObject,
5174        return void instead of just leaking.
5175
5176        * bindings/jni/jni_instance.cpp:
5177        (JavaInstance::JavaInstance): Don't take a RootObject in our constructor;
5178        be like other Instances and require the caller to call setRootObject. This
5179        reduces the number of ownership code paths.
5180        (JavaInstance::invokeMethod): Check RootObject for validity.
5181        * bindings/jni/jni_instance.h: Removed private no-arg constructor. Having
5182        an arg constructor accomplishes the same thing.
5183
5184        * bindings/jni/jni_jsobject.cpp:
5185        (JavaJSObject::invoke): No need to call findProtectCountSet, because finalize()
5186        checks for RootObject validity.
5187        (JavaJSObject::JavaJSObject): check RootObject for validity
5188        (JavaJSObject::call): ditto
5189        (JavaJSObject::eval): ditto
5190        (JavaJSObject::getMember): ditto
5191        (JavaJSObject::setMember): ditto
5192        (JavaJSObject::removeMember): ditto
5193        (JavaJSObject::getSlot): ditto
5194        (JavaJSObject::setSlot): ditto
5195        (JavaJSObject::toString): ditto
5196        (JavaJSObject::finalize): ditto
5197        (JavaJSObject::createNative): No need to tell the RootObject to protect 
5198        the global object, since the RootObject already owns the interpreter.
5199
5200        * bindings/jni/jni_runtime.cpp:
5201        (JavaArray::JavaArray): Removed copy construcutor becaue it was unused.
5202        Dead code is dangerous code.
5203
5204        * bindings/objc/objc_runtime.mm: Added WebUndefined protocol. Previous use
5205        of WebScriptObject was bogus, because WebUndefined is not a subclass of
5206        WebScriptObject.
5207        (convertValueToObjcObject): If we can't find a valid RootObject,
5208        return nil instead of just leaking.
5209
5210        * bindings/objc/objc_utility.mm:
5211        (KJS::Bindings::convertValueToObjcValue): If we can't find a valid RootObject,
5212        return nil instead of just leaking.
5213
52142007-01-27  Andrew Wellington  <proton@wiretapped.net>
5215
5216        Reviewed by Maciej.
5217        
5218        Fix for Repeated string concatenation results in OOM crash
5219        http://bugs.webkit.org/show_bug.cgi?id=11131
5220
5221        * kjs/operations.cpp:
5222        (KJS::add): Throw exception if string addition result is null
5223        * kjs/ustring.cpp:
5224        (KJS::UString::UString): Don't call memcpy when malloc failed
5225
52262007-01-25  Jan Kraemer  <camel@gmx.de>
5227
5228        Reviewed by Maciej
5229
5230        Fix for http://bugs.webkit.org/show_bug.cgi?id=12382
5231
5232        Fix crash on architectures with 32 bit ints and
5233        64 bit longs (For example Linux on AMD64)
5234
5235        * kjs/dtoa.cpp: #define Long int as suggested in comment
5236
52372007-01-24  Geoffrey Garen  <ggaren@apple.com>
5238
5239        Fixed up #include order for style. No review necessary.
5240
5241        * API/JSStringRef.cpp:
5242
52432007-01-24  Geoffrey Garen  <ggaren@apple.com>
5244
5245        Reviewed by Maciej Stachowiak.
5246
5247        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
5248        Copy JSStringRefCF, in case anybody wants to use it. (I just added
5249        it recently.)
5250
52512007-01-24  Maciej Stachowiak  <mjs@apple.com>
5252
5253        Not reviewed, trivial property change.
5254        
5255        * JavaScriptCore.vcproj/JavaScriptCore.sln: remove svn:mime-type
5256        property which made this binary.
5257
52582007-01-25  Mark Rowe  <mrowe@apple.com>
5259
5260        Reviewed by Darin.
5261
5262        * Info.plist: Update copyright string.
5263
52642007-01-24  Darin Adler  <darin@apple.com>
5265
5266        Reviewed by Mark Rowe.
5267
5268        * JavaScriptCore.xcodeproj/project.pbxproj: Changed to /usr/sbin/sysctl
5269        so we don't rely on people's paths.
5270
52712007-01-23  Alice Liu  <alice.liu@apple.com>
5272
5273        release build fix
5274
5275        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
5276        Copy APICasts.h
5277
52782007-01-23  Geoffrey Garen  <ggaren@apple.com>
5279
5280        build fix
5281
5282        * API/JSStringRef.h:
5283        * JavaScriptCore.xcodeproj/project.pbxproj:
5284
52852007-01-24  Mark Rowe  <mrowe@apple.com>
5286
5287        Build fix for DumpRenderTree.
5288
5289        * JavaScriptCore.xcodeproj/project.pbxproj: Make JSStringRefCF.h public so it's copied into built framework.
5290
52912007-01-23  Anders Carlsson  <acarlsson@apple.com>
5292
5293        Reviewed by Darin.
5294
5295        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
5296        Copy APICasts.h
5297
52982007-01-23  Geoffrey Garen  <ggaren@apple.com>
5299
5300        Reviewed by Maciej Stachowiak.
5301        
5302        Fixed <rdar://problem/4885131> Move CFString function declarations from 
5303        JSStringRef.h to JSStringRefCF.h
5304        
5305        Also removed remaining API FIXMEs and changed them into Radars.
5306
5307        * API/JSClassRef.cpp:
5308        (OpaqueJSClass::OpaqueJSClass): Added Radar numbers for UTF8 conversion.
5309
5310        * API/JSContextRef.cpp:
5311        (JSGlobalContextCreate): Replaced FIXME for NULL JSContextRef with Radar number.
5312
5313        * API/JSObjectRef.h: Removed FIXME, which is unprofessional in a public header.
5314
5315        * API/JSStringRef.cpp: Moved CF related implementations to JSStringRefCF.cpp.
5316        (JSStringCreateWithUTF8CString): Replaced FIXME with Radar number.
5317        * API/JSStringRef.h: Moved CF related declarations to JSStringRefCF.h. Added
5318        #include of JSStringRefCF.h as a stopgap until clients start #including
5319        it as needed by themselves.
5320
5321        * API/JSStringRefCF.cpp: Added.
5322        (JSStringCreateWithCFString):
5323        (JSStringCopyCFString): Replaced JSChar cast with UniChar cast, which is 
5324        more appropriate for a CF call.
5325        * API/JSStringRefCF.h: Added.
5326        * JavaScriptCore.xcodeproj/project.pbxproj:
5327
53282007-01-18  Sanjay Madhav  <sanjay12@gmail.com>
5329
5330        Reviewed by Darin.
5331
5332        Add JavaScriptCore define to help with tracing of when objects are marked.
5333
5334        * kjs/object.cpp:
5335        (KJS::JSObject::mark):
5336
53372007-01-18  Simon Hausmann  <hausmann@kde.org>
5338
5339        Reviewed by Zack.
5340
5341        * JavaScriptCore.pro: Remove generated files on make clean.
5342        * pcre/pcre.pri:
5343
53442007-01-16  Alexey Proskuryakov  <ap@webkit.org>
5345
5346        Reviewed by Maciej.
5347
5348        http://bugs.webkit.org/show_bug.cgi?id=12268
5349        Give object prototypes their own names
5350
5351        * kjs/lookup.h: Append "Prototype" to ClassName in KJS_IMPLEMENT_PROTOTYPE.
5352
53532007-01-16  Geoffrey Garen  <ggaren@apple.com>
5354
5355        Reviewed by Darin Adler.
5356        
5357        Added re-entrency checking to GC allocation and collection. It is an error
5358        to allocate or collect from within a collection. We've had at least one 
5359        case of each bug in the past.
5360        
5361        Added a comment to the API header, explaining that API clients must not
5362        make this mistake, either.
5363        
5364        Layout tests and JS tests pass.
5365
5366        * API/JSObjectRef.h:
5367        * kjs/collector.cpp:
5368        (KJS::GCLock::GCLock):
5369        (KJS::GCLock::~GCLock):
5370        (KJS::Collector::allocate):
5371        (KJS::Collector::collect):
5372
53732007-01-14  Mark Rowe  <mrowe@apple.com>
5374
5375        Reviewed by Mitz.
5376
5377        Minor fixes to JavaScript pretty-printing.
5378
5379        * JavaScriptCore.exp:
5380        * kjs/Parser.cpp:
5381        (KJS::Parser::prettyPrint): Return line number and error message if parsing fails.
5382        * kjs/Parser.h:
5383        * kjs/nodes2string.cpp:
5384        (ElementNode::streamTo): Include comma delimiters in array literals.
5385        (PropertyNameNode::streamTo): Quote property names in object literals to handle the case when the property name is not a valid identifier.
5386        * kjs/testkjs.cpp:
5387        (doIt): Print any errors encountered while pretty-printing.
5388
53892007-01-12  Anders Carlsson  <acarlsson@apple.com>
5390
5391        Reviewed by Darin.
5392
5393        * wtf/HashTraits.h:
5394        Add hash traits for unsigned long and unsigned long long.
5395
53962007-01-12  Geoffrey Garen  <ggaren@apple.com>
5397
5398        RS by Brady Eidson.
5399        
5400        Rolling back in r18786 with leaks fixed, and these renames slightly reworked:
5401
5402        Because they can return 0:
5403        rootObjectForImp => findRootObject (overloaded for JSObject* and Interpreter*)
5404        rootObjectForInterpreter => findRootObject (ditto)
5405        findReferenceSet => findProtectCountSet
5406
54072007-01-11  Geoffrey Garen  <ggaren@apple.com>
5408
5409        RS by Brady Eidson.
5410        
5411        Rolling out r18786 because it caused leaks.
5412
54132007-01-11  Geoffrey Garen  <ggaren@apple.com>
5414
5415        Reviewed by Anders Carlsson.
5416
5417        Even more cleanup in preparation for fixing <rdar://problem/4608404> 
5418        WebScriptObject's _executionContext lack of ownership policy causes 
5419        crashes (e.g., in Dashcode)
5420        
5421        Layout tests pass.
5422        
5423        Renames:
5424            ReferencesSet | ProtectCounts => ProtectCountSet (because it's a typename for a set of GC protect counts)
5425            ReferencesByRootMap => RootObjectMap (because RootObjectToProtectCountSetMap would have been confusing)
5426            pv => protectedValues
5427            rootObjectForImp => getRootObject (overloaded for JSObject* and Interpreter*)
5428            rootObjectForInterpreter => getRootObject (ditto)
5429            findReferenceSet => getProtectCountSet
5430            imp => jsObject
5431        
5432        (KJS::Bindings::getRootObjectMap): Changed to take advantage of built-in
5433        facility for initializing static variables.
5434
5435        (KJS::Bindings::getProtectCountSet):
5436        (KJS::Bindings::destroyProtectCountSet): Added. Helps encapsulate the fact
5437        that getting a ProtectCountSet entails adding a RootObject to a hash table,
5438        and destroying one entails the reverse.
5439
5440        (KJS::Bindings::getRootObject): Removed spurious NULL check.
5441        
5442        (KJS::Bindings::findReferenceSet): Renamed. Changed to use getRootObject()
5443        instead of iterating on its own.
5444
5445        (KJS::Bindings::addNativeReference): Changed to use an early return instead
5446        of indenting the whole function.
5447        (KJS::Bindings::removeNativeReference): Ditto.
5448
54492007-01-11  Geoffrey Garen  <ggaren@apple.com>
5450
5451        Reviewed by Anders Carlsson.
5452
5453        Even more cleanup in preparation for fixing <rdar://problem/4608404> 
5454        WebScriptObject's _executionContext lack of ownership policy causes 
5455        crashes (e.g., in Dashcode)
5456        
5457        Layout tests pass.
5458        
5459        Renames:
5460            findRootObjectForNativeHandleFunction => createRootObject
5461            FindRootObjectForNativeHandleFunctionPtr => CreateRootObjectFunction
5462            
5463        Also removed unnecessary use of "Bindings::" prefix.
5464
5465        * JavaScriptCore.exp:
5466        * bindings/jni/jni_jsobject.cpp:
5467        (JavaJSObject::createNative):
5468        (JavaJSObject::convertValueToJObject):
5469        (JavaJSObject::convertJObjectToValue):
5470        * bindings/runtime_root.cpp:
5471        (KJS::Bindings::RootObject::setCreateRootObject):
5472        * bindings/runtime_root.h:
5473        (KJS::Bindings::RootObject::createRootObject):
5474
54752007-01-11  George Staikos  <staikos@kde.org>
5476
5477        Reviewed by Maciej
5478
5479        Appears to be Mac specific right now.
5480
5481        * kjs/config.h:
5482
54832007-01-10  Lars Knoll <lars@trolltech.com>
5484
5485        Reviewed by Zack
5486
5487        Use the new functionality in Qt 4.3, to make
5488        the methods closer compliant with the Unicode
5489        spec.
5490
5491        Keep the old code so that it still compiles against
5492        Qt 4.2.
5493
5494        * wtf/unicode/qt4/UnicodeQt4.h:
5495        (WTF::Unicode::toLower):
5496        (WTF::Unicode::toUpper):
5497        (WTF::Unicode::toTitleCase):
5498        (WTF::Unicode::foldCase):
5499        (WTF::Unicode::isFormatChar):
5500        (WTF::Unicode::isPrintableChar):
5501        (WTF::Unicode::isSeparatorSpace):
5502        (WTF::Unicode::isPunct):
5503        (WTF::Unicode::isDigit):
5504        (WTF::Unicode::isLower):
5505        (WTF::Unicode::isUpper):
5506        (WTF::Unicode::digitValue):
5507        (WTF::Unicode::mirroredChar):
5508        (WTF::Unicode::combiningClass):
5509        (WTF::Unicode::decompositionType):
5510        (WTF::Unicode::umemcasecmp):
5511        (WTF::Unicode::direction):
5512        (WTF::Unicode::category):
5513
55142007-01-09  Darin Adler  <darin@apple.com>
5515
5516        - update 2007 Apple copyright for the new company name
5517
5518        * kjs/DateMath.cpp:
5519
55202007-01-09  Darin Adler  <darin@apple.com>
5521
5522        - fix build
5523
5524        * kjs/string_object.cpp: (KJS::StringProtoFunc::callAsFunction):
5525        Actually compile it this time.
5526
55272007-01-09  Darin Adler  <darin@apple.com>
5528
5529        - fix build
5530
5531        * kjs/string_object.cpp: (KJS::StringProtoFunc::callAsFunction):
5532        Change types.
5533
55342007-01-09  Darin Adler  <darin@apple.com>
5535
5536        - fix build on platforms where Unicode::UChar is != uint16_t
5537
5538        * kjs/string_object.cpp: (KJS::StringProtoFunc::callAsFunction):
5539        Change types.
5540
55412007-01-09  Mitz Pettel  <mitz@webkit.org>
5542
5543        Reviewed by Darin.
5544
5545        - changes for http://bugs.webkit.org/show_bug.cgi?id=11078
5546          Forms Don't Submit (ASP Pages)
5547
5548        * JavaScriptCore.exp:
5549        * kjs/value.cpp:
5550        (KJS::JSValue::toInt32): Folded toInt32Inline into this method, which was its
5551        only caller.
5552        (KJS::JSValue::toUInt32): Added a variant that reports if the conversion has
5553        succeeded.
5554        * kjs/value.h:
5555
55562007-01-09  Darin Adler  <darin@apple.com>
5557
5558        Reviewed by Maciej.
5559
5560        - fix http://bugs.webkit.org/show_bug.cgi?id=12174
5561          improve Unicode use (less WTF::Unicode:: prefix, centralized character names)
5562
5563        * wtf/unicode/icu/UnicodeIcu.h: Change parameter and return types
5564        to UChar32 and UChar. Removed unneeded type casts and added some
5565        const to functions that lacked it. Removed WTF::Unicode::memcmp.
5566        (WTF::Unicode::umemcasecmp): Renamed from strcasecmp since this
5567        doesn't work on 0-terminated strings as the str functions do.
5568        * wtf/unicode/qt4/UnicodeQt4.h: Ditto.
5569
5570        - got rid of namespace prefixes from most uses of WTF::Unicode
5571
5572        * kjs/function.cpp:
5573        (KJS::isStrWhiteSpace):
5574        (KJS::escapeStringForPrettyPrinting):
5575        * kjs/lexer.cpp:
5576        (KJS::Lexer::isWhiteSpace):
5577        (KJS::Lexer::isIdentStart):
5578        (KJS::Lexer::isIdentPart):
5579        * kjs/string_object.cpp:
5580        (KJS::StringProtoFunc::callAsFunction):
5581
55822007-01-07  David Kilzer  <ddkilzer@webkit.org>
5583
5584        Reviewed by Darin.
5585
5586        - fix http://bugs.webkit.org/show_bug.cgi?id=11917
5587          setlocale() can return null
5588
5589        * kjs/date_object.cpp:
5590        (KJS::DateProtoFunc::callAsFunction): Removed dead code.
5591
55922007-01-07  David Carson  <dacarson@gmail.com>
5593
5594        Reviewed by Darin.
5595
5596        - fix http://bugs.webkit.org/show_bug.cgi?id=12100
5597          JNI bindings should be available to non-Mac platforms that have JNI
5598
5599        Change JNI so that it is not wrapped in the PLATFORM(MAC) ifdef, enabling
5600        other platforms who have JNI to use it.
5601
5602        * bindings/jni/jni_instance.h:  
5603          Removed unnecessary include of <CoreFoundation/CoreFoundation.h>
5604        * bindings/jni/jni_utility.cpp:
5605        (KJS::Bindings::setJavaVM):
5606        * bindings/jni/jni_utility.h:
5607          Added new method for clients to set the JavaVM
5608        * bindings/runtime.cpp:
5609        (KJS::Bindings::Instance::createBindingForLanguageInstance):
5610          Changed code to utilize new #if HAVE(JNI)
5611        * kjs/config.h:
5612          Added new #define for JNI, ie HAVE_JNI
5613
56142007-01-07  David Carson  <dacarson@gmail.com>
5615
5616        Reviewed by Darin.
5617
5618        Fix http://bugs.webkit.org/show_bug.cgi?id=11431
5619        ARM platform has some byte alignment issues
5620
5621        Fix for NaN being 4 bytes and it must start on a byte boundary
5622        for ARM architectures.
5623
5624        * kjs/fpconst.cpp:
5625        (KJS::):
5626
56272007-01-04  David Kilzer  <ddkilzer@webkit.org>
5628
5629        Reviewed by Kevin McCullough.
5630
5631        - fix http://bugs.webkit.org/show_bug.cgi?id=12070
5632          REGRESSION: KJS::getUTCOffset() caches UTC offset but ignores time zone changes
5633
5634        * kjs/DateMath.cpp:
5635        (KJS::getUTCOffset): Don't cache UTC offset.
5636
56372007-01-02  Darin Adler  <darin@apple.com>
5638
5639        - minor tweak (hope this doesn't re-break Windows)
5640
5641        * pcre/pcre_compile.c: Removed use of const pcre_uchar const * -- Mitz probably
5642        meant const pcre_uchar *const, but I think we can do without the explicit const here.
5643
5644        * pcre/pcre_internal.h: Re-enabled warning C4114.
5645
56462007-01-02  David Kilzer  <ddkilzer@webkit.org>
5647
5648        Reviewed by NOBODY (Windows build fix).
5649
5650        The MSVC compiler requires variables to be declared at the top of the enclosing block in C source.
5651
5652        Disable this warning to prevent MSVC from complaining about the 'const pcre_uchar const *' type:
5653        warning C4114: same type qualifier used more than once
5654
5655        * pcre/pcre_compile.c:
5656        (pcre_compile2): Moved variable declarations to top of their respective enclosing blocks.
5657        * pcre/pcre_internal.h: Added pragma to disable compiler warning.
5658
56592007-01-01  Mitz Pettel  <mitz@webkit.org>
5660
5661        Reviewed by Darin.
5662
5663        - fix http://bugs.webkit.org/show_bug.cgi?id=11849
5664          REGRESSION (r18182): Google Calendar is broken (a regular expression containing a null character is not parsed correctly)
5665
5666        Modified pcre_compile() (and the functions that it calls) to work with patterns
5667        containing null characters.
5668
5669        Covered by JavaScriptCore tests ecma_3/RegExp/octal-002.js and ecma_3/RegExp/regress-85721.js
5670
5671        * kjs/regexp.cpp:
5672        (KJS::RegExp::RegExp): Changed to not null-terminate the pattern string and instead
5673        pass its length to pcre_compile.
5674        * pcre/pcre.h:
5675        * pcre/pcre_compile.c:
5676        (check_escape):
5677        (get_ucp):
5678        (is_counted_repeat):
5679        (check_posix_syntax):
5680        (compile_branch):
5681        (compile_regex):
5682        (pcre_compile): Added a parameter specifying the length of the pattern, which
5683        is no longer required to be null-terminated and may contain null characters. 
5684        (pcre_compile2):
5685        * pcre/pcre_internal.h:
5686        * tests/mozilla/expected.html: Updated for the two tests that this patch
5687        fixes. Also updated failing results for ecma_3/RegExp/regress-100199.js
5688        which were not updated after bug 6257 was fixed.
5689
56902007-01-01  David Kilzer  <ddkilzer@webkit.org>
5691
5692        Reviewed by Darin.
5693
5694        - fix http://bugs.webkit.org/show_bug.cgi?id=12057
5695          REGRESSION: JavaScript Date Is One Day In The Future in GMT time zone
5696
5697        Because Mac OS X returns geographically and historically accurate time zone information,
5698        converting Jan 02, 1970 12:00:00 AM to local time then subtracting 24 hours did not work
5699        in GMT (London - England) since it was in BST (+0100) all year in 1970[1].  Instead, the
5700        UTC offset is calculated by converting Jan 01, 2000 12:00:00 AM to local time then
5701        subtracting that from the same date in UTC.
5702
5703        [1] http://en.wikipedia.org/wiki/British_Summer_Time
5704
5705        * kjs/DateMath.cpp:
5706        (KJS::getUTCOffset): Updated UTC offset calculation.
5707        (KJS::getDSTOffset): Improved comment.
5708
57092006-12-31  David Kilzer  <ddkilzer@webkit.org>
5710
5711        Reviewed by Geoff.
5712
5713        Update embedded pcre library from version 6.2 to 6.4.  Changes from pcre 6.2 to 6.3
5714        did not include any files in JavaScriptCore/pcre.
5715
5716        All changes include renaming EXPORT to PCRE_EXPORT, renaming of ucp_findchar() to
5717        _pcre_ucp_findchar(), or comment changes.  Additional changes noted below.
5718
5719        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Updated source file list.
5720        * JavaScriptCore.xcodeproj/project.pbxproj: Renamed pcre_printint.c to pcre_printint.src
5721        and changed it from a source file to a header file.
5722        * JavaScriptCoreSources.bkl: Updated source file list.
5723        * pcre/CMakeLists.txt: Updated source file list.
5724        * pcre/pcre-config.h:
5725        * pcre/pcre.h: Updated version.
5726        * pcre/pcre.pri: Updated source file list.
5727        * pcre/pcre_compile.c: Include pcre_printint.src #if DEBUG.
5728        (pcre_compile2):
5729        * pcre/pcre_config.c:
5730        * pcre/pcre_exec.c:
5731        (match):
5732        * pcre/pcre_fullinfo.c:
5733        * pcre/pcre_info.c:
5734        * pcre/pcre_internal.h: Added header guard.  Removed export of _pcre_printint().
5735        * pcre/pcre_ord2utf8.c:
5736        * pcre/pcre_printint.c: Renamed to pcre_printint.src.
5737        * pcre/pcre_printint.src: Added.  Renamed _pcre_printint() to pcre_printint().
5738        * pcre/pcre_refcount.c:
5739        * pcre/pcre_study.c:
5740        * pcre/pcre_tables.c:
5741        * pcre/pcre_try_flipped.c:
5742        * pcre/pcre_ucp_findchar.c: Added contents of ucp_findchar.c.
5743        * pcre/pcre_version.c:
5744        * pcre/pcre_xclass.c:
5745        (_pcre_xclass):
5746        * pcre/ucp.h: Removed export of ucp_findchar().
5747        * pcre/ucp_findchar.c: Removed.  Contents moved to pcre_ucp_findchar.c.
5748
57492006-12-29  David Kilzer  <ddkilzer@webkit.org>
5750
5751        Reviewed by Geoff.
5752
5753        Update embedded pcre library from version 6.1 to 6.2.  From the pcre ChangeLog:
5754
5755        3. Added "b" to the 2nd argument of fopen() in dftables.c, for non-Unix-like
5756           operating environments where this matters.
5757
5758        5. Named capturing subpatterns were not being correctly counted when a pattern
5759           was compiled. This caused two problems: (a) If there were more than 100
5760           such subpatterns, the calculation of the memory needed for the whole
5761           compiled pattern went wrong, leading to an overflow error. (b) Numerical
5762           back references of the form \12, where the number was greater than 9, were
5763           not recognized as back references, even though there were sufficient
5764           previous subpatterns.
5765
5766        * pcre/dftables.c: Item 3.
5767        (main):
5768        * pcre/pcre.h: Updated version.
5769        * pcre/pcre_compile.c: Item 5.
5770        (read_repeat_counts):
5771        (pcre_compile2):
5772
57732006-12-29  Geoffrey Garen  <ggaren@apple.com>
5774
5775        Reviewed by Brian Dash... err... Mark Rowe.
5776
5777        More cleanup in preparation for fixing <rdar://problem/4608404> 
5778        WebScriptObject's _executionContext lack of ownership policy causes 
5779        crashes (e.g., in Dashcode)
5780        
5781        The key change here is to RootObject::RootObject().
5782        
5783        * JavaScriptCore.exp:
5784
5785        * bindings/c/c_utility.cpp:
5786        (KJS::Bindings::convertValueToNPVariant): Changed to use new constructor.
5787
5788        * bindings/jni/jni_jsobject.cpp:
5789        (JavaJSObject::createNative): Changed to use new constructor. Replaced
5790        large 'if' followed by default condition with "if !" and explicit default
5791        condition.
5792
5793        * bindings/objc/objc_runtime.mm:
5794        (convertValueToObjcObject): Changed to use new constructor.
5795
5796        * bindings/runtime_root.cpp:
5797        (KJS::Bindings::RootObject::destroy): "removeAllNativeReferences" => "destroy"
5798        because this function actually destroys the RootObject.
5799
5800        * bindings/runtime_root.h: Changed Interpreter* to RefPtr<Interpreter>
5801        to prevent a RootObject from holding a stale Interperter*.
5802        
5803        (KJS::Bindings::RootObject::RootObject): Changed constructor to take an 
5804        Interpreter*, since it's pointless to create a RootObject without one.
5805        Removed setRootObjectImp() and rootObjectImp() because they were just
5806        a confusing way of setting and getting the Interpreter's global object.
5807
5808        (KJS::Bindings::RootObject::nativeHandle): "_nativeHandle" => "m_nativeHandle"
5809        (KJS::Bindings::RootObject::interpreter): "_interpreter" => "m_interpreter"
5810
58112006-12-28  George Staikos  <staikos@kde.org>
5812
5813        Reviewed by Olliej.
5814
5815        * bindings/qt/qt_instance.cpp: build
5816        (KJS::Bindings::QtInstance::QtInstance):
5817
58182006-12-28  Geoffrey Garen  <ggaren@apple.com>
5819
5820        Reviewed by Oliver Hunt.
5821        
5822        More cleanup. Layout tests pass.
5823        
5824        Use a helper function to initialize and access WebUndefined and WebScriptObject.
5825
5826        * bindings/objc/objc_runtime.h:
5827        * bindings/objc/objc_runtime.mm:
5828        (KJS::Bindings::webScriptObjectClass):
5829        (KJS::Bindings::webUndefinedClass):
5830        (convertValueToObjcObject):
5831        * bindings/objc/objc_utility.mm:
5832        (KJS::Bindings::convertValueToObjcValue):
5833        (KJS::Bindings::convertObjcValueToValue):
5834
58352006-12-28  Geoffrey Garen  <ggaren@apple.com>
5836
5837        Reviewed by Brady Eidson.
5838        
5839        Some cleanup in preparation for fixing <rdar://problem/4608404> 
5840        WebScriptObject's _executionContext lack of ownership policy causes 
5841        crashes (e.g., in Dashcode)
5842        
5843        I'm just trying to make heads or tails of this baffling code.
5844        
5845        Renamed "root" | "execContext" | "executionContext" => "rootObject", because
5846        that's the object's (admittedly vague) type name.
5847        
5848        * bindings/runtime.cpp: Removed createLanguageInstanceForValue
5849        because I'll give you a dollar if you can explain to me what it actually did.
5850        
5851        * bindings/runtime_root.cpp: Put everything in the KJS::Bindings namespace,
5852        removing the KJS::Bindings prefix from individual functions and datatypes.
5853        This matches the header and eliminates a lot of syntax cruft.
5854        
5855        * bindings/c/c_utility.cpp:
5856        (KJS::Bindings::convertValueToNPVariant): Replaced use of createLanguageInstanceForValue
5857        with call to _NPN_CreateScriptObject because that's what createLanguageInstanceForValue
5858        actually did (but don't ask me for that dollar now; that's cheating.)
5859
5860        * bindings/objc/objc_utility.h:
5861        * bindings/objc/objc_utility.mm:
5862        (KJS::Bindings::convertValueToObjcValue): Removed. Its only purpose was 
5863        to call a single function for WebKit, which WebKit can do on its own.
5864
5865        * kjs/interpreter.h: Removed rtti() because it was unused, and this class
5866        is scheduled for demolition anyway.
5867        
5868        * kjs/interpreter.cpp: Removed createLanguageInstanceForValue because it had
5869        nothing to do with the Interpreter, and nothing makes Chuck Norris more mad
5870        than a function whose sole purpose is to call another function of the same
5871        name. (Really, I asked him.)
5872
58732006-12-26  Geoffrey Garen  <ggaren@apple.com>
5874
5875        Reviewed by Eric Seidel.
5876
5877        Some cleanup in preparation for fixing <rdar://problem/4740328> Safari 
5878        crash on quit in _NPN_ReleaseObject from KJS::Bindings::CInstance::~CInstance
5879
5880        * bindings/c/c_instance.cpp:
5881        * bindings/c/c_instance.h: Removed unused copy constructor and assignment
5882        operator. They made tracking data flow more difficult. Unused code is also 
5883        dangerous because it can succumb to bit rot with the stealth of a Ninja.
5884        
5885        Replaced #include with forward declaration to reduce header dependency.
5886        
5887        * bindings/npruntime.cpp: Sorted #includes.
5888        (_NPN_GetStringIdentifier): Replaced assert with ASSERT.
5889        (_NPN_GetStringIdentifiers): ditto
5890        (_NPN_ReleaseVariantValue): ditto
5891        (_NPN_CreateObject): ditto
5892        (_NPN_RetainObject): ditto
5893        (_NPN_ReleaseObject): ditto
5894        (_NPN_DeallocateObject): ditto
5895
58962006-12-20  Anders Carlsson  <acarlsson@apple.com>
5897
5898        * kjs/string_object.cpp:
5899        (localeCompare):
5900        Another speculative Win32 fix.
5901
59022006-12-20  Anders Carlsson  <acarlsson@apple.com>
5903
5904        * kjs/string_object.cpp:
5905        (localeCompare):
5906        Speculative Win32 fix.
5907
59082006-12-20  Anders Carlsson  <acarlsson@apple.com>
5909
5910        Reviewed by Darin.
5911
5912        <rdar://problem/4235733>
5913        <http://bugs.webkit.org/?show_bug.cgi?id=10193>
5914        support String.localeCompare.
5915        
5916        Implement localeCompare.
5917        
5918        * JavaScriptCore.xcodeproj/project.pbxproj:
5919        * kjs/string_object.cpp:
5920        (localeCompare):
5921        (StringProtoFunc::callAsFunction):
5922        * kjs/string_object.h:
5923        (KJS::StringProtoFunc::):
5924
59252006-12-20  Timothy Hatcher  <timothy@apple.com>
5926
5927        Reviewed by Mark Rowe.
5928
5929        * JavaScriptCore.xcodeproj/project.pbxproj: use GCC 4.0 for all the other test targets
5930
59312006-12-20  Timothy Hatcher  <timothy@apple.com>
5932
5933        Reviewed by Mark Rowe.
5934
5935        <rdar://problem/4871613> JavaScriptCore-421.31's dftables target needs to override default compiler and use gcc-4.0
5936
5937        * JavaScriptCore.xcodeproj/project.pbxproj:
5938
59392006-12-20  Lars Knoll <lars@trolltech.com>
5940
5941        Reviewed by David Hyatt
5942
5943        Added support to bind QObject's to 
5944        JavaScript.
5945
5946        * JavaScriptCore.pro:
5947        * bindings/qt/qt_class.cpp: Added.
5948        (KJS::Bindings::QtClass::QtClass):
5949        (KJS::Bindings::QtClass::~QtClass):
5950        (KJS::Bindings::QtClass::classForObject):
5951        (KJS::Bindings::QtClass::name):
5952        (KJS::Bindings::QtClass::methodsNamed):
5953        (KJS::Bindings::QtClass::fieldNamed):
5954        * bindings/qt/qt_class.h: Added.
5955        (KJS::Bindings::QtClass::constructorAt):
5956        (KJS::Bindings::QtClass::numConstructors):
5957        * bindings/qt/qt_instance.cpp: Added.
5958        (KJS::Bindings::QtInstance::QtInstance):
5959        (KJS::Bindings::QtInstance::~QtInstance):
5960        (KJS::Bindings::QtInstance::operator=):
5961        (KJS::Bindings::QtInstance::getClass):
5962        (KJS::Bindings::QtInstance::begin):
5963        (KJS::Bindings::QtInstance::end):
5964        (KJS::Bindings::QtInstance::implementsCall):
5965        (KJS::Bindings::QtInstance::invokeMethod):
5966        (KJS::Bindings::QtInstance::invokeDefaultMethod):
5967        (KJS::Bindings::QtInstance::defaultValue):
5968        (KJS::Bindings::QtInstance::stringValue):
5969        (KJS::Bindings::QtInstance::numberValue):
5970        (KJS::Bindings::QtInstance::booleanValue):
5971        (KJS::Bindings::QtInstance::valueOf):
5972        * bindings/qt/qt_instance.h: Added.
5973        (KJS::Bindings::QtInstance::getObject):
5974        * bindings/qt/qt_runtime.cpp: Added.
5975        (KJS::Bindings::convertValueToQVariant):
5976        (KJS::Bindings::convertQVariantToValue):
5977        (KJS::Bindings::QtField::name):
5978        (KJS::Bindings::QtField::valueFromInstance):
5979        (KJS::Bindings::QtField::setValueToInstance):
5980        * bindings/qt/qt_runtime.h: Added.
5981        (KJS::Bindings::QtField::QtField):
5982        (KJS::Bindings::QtField::type):
5983        (KJS::Bindings::QtMethod::QtMethod):
5984        (KJS::Bindings::QtMethod::name):
5985        (KJS::Bindings::QtMethod::numParameters):
5986        * bindings/runtime.cpp:
5987        (KJS::Bindings::Instance::createBindingForLanguageInstance):
5988        * bindings/runtime.h:
5989        (KJS::Bindings::Instance::):
5990        * bindings/testbindings.pro: Added.
5991        * bindings/testqtbindings.cpp: Added.
5992        (MyObject::MyObject):
5993        (MyObject::setTestString):
5994        (MyObject::setTestInt):
5995        (MyObject::testString):
5996        (MyObject::testInt):
5997        (MyObject::foo):
5998        (Global::className):
5999        (main):
6000
60012006-12-19  Anders Carlsson  <acarlsson@apple.com>
6002
6003        Reviewed by Geoff.
6004
6005        Add -p option to testkjs which pretty prints the files instead of executing them.
6006
6007        * JavaScriptCore.exp:
6008        * JavaScriptCore.xcodeproj/project.pbxproj:
6009        * kjs/Parser.cpp:
6010        (KJS::Parser::prettyPrint):
6011        * kjs/Parser.h:
6012        * kjs/testkjs.cpp:
6013        (doIt):
6014
60152006-12-19  Brady Eidson  <beidson@apple.com>
6016
6017        Rubberstamped by Lou
6018        
6019        Removed unneccessary "else"
6020
6021        * wtf/Assertions.cpp:
6022
60232006-12-19  Timothy Hatcher  <timothy@apple.com>
6024
6025        Reviewed by Darin.
6026
6027        <rdar://problem/4891774> Local WebCore/WebBrowser builds fail in 9A328 due to warning about ObjC-2.0 language features
6028
6029        * JavaScriptCore.xcodeproj/project.pbxproj:
6030
60312006-12-17  Simon Hausmann  <hausmann@kde.org>
6032
6033        Reviewed by Zack.
6034
6035        * kjs/testkjs.pro: Oops, make it also build on machines other than
6036        mine :)
6037
60382006-12-17  Simon Hausmann  <hausmann@kde.org>
6039
6040        Reviewed by Rob Buis.
6041
6042        * kjs/testkjs.pro: Added .pro file to build testkjs.
6043
60442006-12-16  Alexey Proskuryakov  <ap@webkit.org>
6045
6046        Reviewed by Rob.
6047
6048        A deleted object was accessed to prepare RegExp construction error messages.
6049
6050        * kjs/regexp_object.cpp:
6051        (RegExpObjectImp::construct): Wrap the RegExp into an OwnPtr.
6052
60532006-12-16  Mitz Pettel  <mitz@webkit.org>
6054
6055        Reviewed by Alexey.
6056
6057        - fix http://bugs.webkit.org/show_bug.cgi?id=11814
6058          REGRESSION(r18098): Find does not work with capital letters
6059
6060        Test: editing/execCommand/findString-3.html
6061
6062        * wtf/unicode/icu/UnicodeIcu.h:
6063        (WTF::Unicode::foldCase): Changed to not return an error if the result fits
6064        in the buffer without a null terminator.
6065
60662006-12-13  Maciej Stachowiak  <mjs@apple.com>
6067
6068        Reviewed by Anders.
6069        
6070        - added equality and inequality operations for HashMap and Vector, useful for comparing more complex types
6071
6072        * wtf/HashMap.h:
6073        (WTF::operator==):
6074        (WTF::operator!=):
6075        * wtf/Vector.h:
6076        (WTF::operator==):
6077        (WTF::operator!=):
6078
60792006-12-12  Alexey Proskuryakov  <ap@webkit.org>
6080
6081        Reviewed by Geoff. Based on a patch by Maks Orlovich.
6082
6083        http://bugs.webkit.org/show_bug.cgi?id=6257
6084        Throw errors on invalid expressions (KJS merge)
6085
6086        * kjs/regexp.cpp:
6087        (KJS::RegExp::RegExp):
6088        (KJS::RegExp::~RegExp):
6089        (KJS::RegExp::match):
6090        * kjs/regexp.h:
6091        (KJS::RegExp::flags):
6092        (KJS::RegExp::isValid):
6093        (KJS::RegExp::errorMessage):
6094        (KJS::RegExp::subPatterns):
6095        Remember and report RegExp construction failures. Renamed data members not to start with underscores.
6096
6097        * kjs/regexp_object.cpp:
6098        (RegExpObjectImp::construct): Raise an exception if RegExp construction fails.
6099        (RegExpObjectImp::callAsFunction): Removed an obsolete comment.
6100
6101        * tests/mozilla/ecma_3/RegExp/regress-119909.js: Reduced the number of nested parentheses to 
6102        a value supported by PCRE.
6103
61042006-12-11  Alexey Proskuryakov  <ap@webkit.org>
6105
6106        Reviewed by Darin.
6107
6108        http://bugs.webkit.org/show_bug.cgi?id=9673
6109        Add support for window.atob() and window.btoa()
6110
6111        * JavaScriptCore.exp: Export UString::is8Bit().
6112        * JavaScriptCore.xcodeproj/project.pbxproj: Added StringExtras.h as 
6113        a private header.
6114
61152006-12-11  Darin Adler  <darin@apple.com>
6116
6117        Reviewed by Brady.
6118
6119        * JavaScriptCore.xcodeproj/project.pbxproj: Let Xcode update this
6120        (I think Hyatt is using an old Xcode).
6121
61222006-12-11  David Hyatt  <hyatt@apple.com>
6123
6124        Fix the failing layout test.  Just remove Unicode::isSpace and
6125        revert StringImpl to do the same thing it was doing before.
6126
6127        Reviewed by darin
6128
6129        * wtf/unicode/icu/UnicodeIcu.h:
6130        * wtf/unicode/qt4/UnicodeQt4.h:
6131
61322006-12-09  George Staikos  <staikos@kde.org>
6133
6134        Reviewed by Zack.
6135
6136        Fix bison again on qmake build.
6137
6138        * JavaScriptCore.pro:
6139
61402006-12-09  Lars Knoll <lars@trolltech.com>
6141
6142        Reviewed by Zack
6143
6144        Make it possible to build WebKit with qmake.
6145
6146        * JavaScriptCore.pro: Added.
6147        * kjs/kjs.pro: Removed.
6148        * pcre/pcre.pri: Added.
6149
61502006-12-09  Zack Rusin  <zack@kde.org>
6151
6152        Fixing the compilation with platform kde after the icu changes.
6153
6154        * CMakeLists.txt:
6155
61562006-12-09  Adam Roben  <aroben@apple.com>
6157
6158        Reviewed by Darin.
6159
6160        Some updates in reaction to r18098.
6161
6162        * wtf/unicode/icu/UnicodeIcu.h: Use !! to convert UBool to bool in all
6163        cases.
6164        (WTF::Unicode::toLower):
6165        (WTF::Unicode::toUpper):
6166        (WTF::Unicode::isDigit):
6167        (WTF::Unicode::isSpace):
6168        (WTF::Unicode::isPunct):
6169        (WTF::Unicode::isLower):
6170        (WTF::Unicode::isUpper):
6171        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
6172        * JavaScriptCore.vcproj/WTF/WTF.vcproj:
6173
61742006-12-09  George Staikos  <staikos@kde.org>
6175
6176        Patch by Lars Knoll, comment out ICU dependency on Qt platform (unused code).
6177
6178        Reviewed by Darin.
6179
6180        * bindings/c/c_utility.cpp:
6181        (KJS::Bindings::convertUTF8ToUTF16):
6182
61832006-12-08  David Hyatt  <hyatt@apple.com>
6184
6185        Land the new ICU abstraction layer.  Patch by Lars.
6186
6187        Reviewed by me
6188
6189        * JavaScriptCore.xcodeproj/project.pbxproj:
6190        * wtf/Platform.h:
6191        * wtf/unicode/UnicodeCategory.h: Removed.
6192        * wtf/unicode/UnicodeDecomposition.h: Removed.
6193        * wtf/unicode/UnicodeDirection.h: Removed.
6194        * wtf/unicode/icu/UnicodeIcu.h:
6195        (WTF::Unicode::):
6196        (WTF::Unicode::foldCase):
6197        (WTF::Unicode::toLower):
6198        (WTF::Unicode::toUpper):
6199        (WTF::Unicode::toTitleCase):
6200        (WTF::Unicode::isDigit):
6201        (WTF::Unicode::isSpace):
6202        (WTF::Unicode::isPunct):
6203        (WTF::Unicode::mirroredChar):
6204        (WTF::Unicode::category):
6205        (WTF::Unicode::direction):
6206        (WTF::Unicode::isLower):
6207        (WTF::Unicode::isUpper):
6208        (WTF::Unicode::digitValue):
6209        (WTF::Unicode::combiningClass):
6210        (WTF::Unicode::decompositionType):
6211        (WTF::Unicode::strcasecmp):
6212        (WTF::Unicode::memset):
6213        * wtf/unicode/qt4/UnicodeQt4.cpp: Removed.
6214        * wtf/unicode/qt4/UnicodeQt4.h:
6215        (WTF::Unicode::):
6216        (WTF::Unicode::toLower):
6217        (WTF::Unicode::toUpper):
6218        (WTF::Unicode::toTitleCase):
6219        (WTF::Unicode::foldCase):
6220        (WTF::Unicode::isPrintableChar):
6221        (WTF::Unicode::isLower):
6222        (WTF::Unicode::isUpper):
6223        (WTF::Unicode::digitValue):
6224        (WTF::Unicode::combiningClass):
6225        (WTF::Unicode::decompositionType):
6226        (WTF::Unicode::strcasecmp):
6227        (WTF::Unicode::memset):
6228        (WTF::Unicode::direction):
6229        (WTF::Unicode::category):
6230
6231=== Safari-521.32 ===
6232
62332006-12-08  Adam Roben  <aroben@apple.com>
6234
6235        Reviewed by Anders.
6236
6237        This is a mo' better fix for ensuring we don't use macro definitions
6238        of min/max.
6239
6240        * kjs/config.h:
6241        * wtf/Vector.h:
6242
62432006-12-07  Kevin Fyure  <digdog@macports.org>
6244
6245        Reviewed by Darin.
6246
6247        http://bugs.webkit.org/show_bug.cgi?id=11545
6248        Disable the testcases do not follow the ECMA-262v3 specification.
6249        
6250        * tests/mozilla/expected.html: Update Results.
6251        * tests/mozilla/js1_2/String/concat.js:
6252        4 tests disabled. The result of concat Array object is not followinig
6253        ECMA 15.5.4.6
6254        * tests/mozilla/js1_2/function/Number.js:
6255        1 test disabled. The result of Array object to Number object conversion 
6256        is not following ECMA 9.3. And the test was duplicated in 
6257        ecma/TypeConversion/9.3-1.js
6258        * tests/mozilla/js1_2/function/String.js:
6259        2 tests disabled. The result of Object/Array object to String object 
6260        conversion is not following ECMA 15.5.1.1 and ECMA 9.8
6261
62622006-11-30  Steve Falkenburg  <sfalken@apple.com>
6263
6264        Reviewed by Oliver.
6265        
6266        Move WTF from JavaScriptCore project into a new WTF project.
6267
6268        * JavaScriptCore.vcproj/JavaScriptCore.sln: Add WTF.vcproj to sln
6269        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Remove WTF source files
6270        * JavaScriptCore.vcproj/WTF/WTF.vcproj: Added.
6271        * JavaScriptCore.vcproj/testkjs/testkjs.vcproj: Add dependency on WTF.lib
6272
62732006-11-30  Geoffrey Garen  <ggaren@apple.com>
6274
6275        Reviewed by Beth Dakin.
6276        
6277        Fixed up garbage collection at window close time.
6278
6279        * kjs/interpreter.cpp:
6280        (KJS::Interpreter::~Interpreter): Garbage collect here, since
6281        destroying the interpreter frees the global object and 
6282        therefore creates a lot of garbage.
6283
62842006-11-20  W. Andy Carrel  <wac@google.com>
6285
6286        Reviewed by Maciej.
6287
6288        http://bugs.webkit.org/show_bug.cgi?id=11501
6289        REGRESSION: \u no longer escapes metacharacters in RegExps
6290        http://bugs.webkit.org/show_bug.cgi?id=11502
6291        Serializing RegExps doesn't preserve Unicode escapes
6292
6293        * kjs/lexer.cpp:
6294        (Lexer::Lexer):
6295        (Lexer::setCode):
6296        (Lexer::shift):
6297        (Lexer::scanRegExp):
6298        Push \u parsing back down into the RegExp object rather than in the
6299        parser. This backs out r17354 in favor of a new fix that better 
6300        matches the behavior of other browsers.
6301
6302        * kjs/lexer.h:
6303        * kjs/regexp.cpp:
6304        (KJS::RegExp::RegExp):
6305        (KJS::sanitizePattern):
6306        (KJS::isHexDigit):
6307        (KJS::convertHex):
6308        (KJS::convertUnicode):
6309        * kjs/regexp.h:
6310        Translate \u escaped unicode characters for the benefit of pcre.
6311
6312        * kjs/ustring.cpp:
6313        (KJS::UString::append):
6314        Fix failure to increment length on the first UChar appended to a 
6315        UString that was copy-on-write.
6316
6317        * tests/mozilla/ecma_2/RegExp/properties-001.js:
6318        Adjust tests back to the uniform standards.
6319
63202006-11-20  Samuel Weinig  <sam@webkit.org>
6321
6322        Reviewed by Maciej.
6323
6324        Fix for http://bugs.webkit.org/show_bug.cgi?id=11647
6325        Fix Win32 build
6326
6327        * kjs/config.h: define NOMINMAX instead of min/max
6328        as themselves.
6329        * wtf/Vector.h: put back hack to ensure that min/max
6330        are not defined as macros.
6331
63322006-11-19  Simon Hausmann  <hausmann@kde.org>
6333
6334        Reviewed by Zack.
6335
6336        http://bugs.webkit.org/show_bug.cgi?id=11649
6337        Fix CMake Qt-only build without KDE CMake files
6338
6339        * CMakeLists.txt:
6340        * pcre/CMakeLists.txt:
6341
63422006-11-17  Anders Carlsson  <acarlsson@apple.com>
6343
6344        Reviewed by Adam.
6345
6346        Make sure that we always use std::min and std::max instead of macros.
6347        
6348        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
6349        * kjs/config.h:
6350        * wtf/Vector.h:
6351
6352=== Safari-521.31 ===
6353
63542006-11-12  Geoffrey Garen  <ggaren@apple.com>
6355
6356        Reviewed by Beth Dakin.
6357        
6358        Added project-wide setting to disable Microsoft's made-up deprecation 
6359        warnings related to std:: functions. (Doesn't have any affect yet,
6360        since we currently disable all deprecation warnings.)
6361
6362        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
6363
63642006-11-12  Mark Rowe  <bdash@webkit.org>
6365
6366        Reviewed by Mitz.
6367
6368        Clean up of JavaScriptCore bakefiles.
6369
6370        * JavaScriptCoreSources.bkl:
6371        * jscore.bkl:
6372
63732006-11-11  Alexey Proskuryakov  <ap@webkit.org>
6374
6375        Reviewed by Maciej.
6376
6377        http://bugs.webkit.org/show_bug.cgi?id=11508
6378        Undisable some warnings for JSImmediate.h
6379
6380        Fix suggested by Don Gibson.
6381
6382        * kjs/JSImmediate.h:
6383        Re-enable all MSVC warnings, move the remaining runtime checks
6384        to compile-time.
6385
63862006-11-10  Zalan Bujtas  <zalan.bujtas@nokia.com>
6387
6388        Reviewed by Maciej.
6389
6390        Added s60/symbian platform defines.
6391        http://bugs.webkit.org/show_bug.cgi?id=11540
6392
6393        * wtf/Platform.h:
6394
6395=== Safari-521.30 ===
6396
63972006-11-08  Ada Chan  <adachan@apple.com>
6398
6399        Reviewed by darin.
6400        
6401        Added a method to delete all the keys in a HashMap.
6402
6403        * wtf/HashMap.h:
6404        (WTF::deleteAllPairFirsts):
6405        (WTF::deleteAllKeys):
6406
64072006-11-07  Anders Carlsson  <acarlsson@apple.com>
6408
6409        Reviewed by Geoff.
6410
6411        * API/JSClassRef.cpp:
6412        (OpaqueJSClass::OpaqueJSClass):
6413        Initialize cachedPrototype to 0.
6414
64152006-11-06  Krzysztof Kowalczyk  <kkowalczyk@gmail.com>
6416
6417        Reviewed by Maciej.
6418
6419        Remove warning about garbage after #else. #else clause applies for all
6420        non-mac platforms, not only win.
6421
6422        * kjs/date_object.cpp:
6423
64242006-11-06  Mark Rowe  <bdash@webkit.org>
6425
6426        Reviewed by the wonderful Mitz Pettel.
6427
6428        http://bugs.webkit.org/show_bug.cgi?id=11524
6429        Bug 11524: REGRESSION(r9842): Array.prototype.join should use ToString operator rather than calling toString on each element
6430
6431        * kjs/array_object.cpp:
6432        (ArrayProtoFunc::callAsFunction): Use ToString operator on each element rather than calling their toString method.
6433
64342006-11-03  Steve Falkenburg  <sfalken@apple.com>
6435
6436        Fix build
6437
6438        * kjs/JSImmediate.h:
6439
64402006-11-03  Alexey Proskuryakov  <ap@nypop.com>
6441
6442        Reviewed by Darin.
6443
6444        http://bugs.webkit.org/show_bug.cgi?id=11504
6445        Fix warnings on non 32 bit platforms
6446
6447        * kjs/JSImmediate.h:
6448        (KJS::JSImmediate::NanAsBits):
6449        (KJS::JSImmediate::oneAsBits):
6450        Rewrite in a way that moves runtime checks to compile-time.
6451
6452        (KJS::):
6453        (KJS::JSImmediate::fromDouble):
6454        (KJS::JSImmediate::toDouble):
6455
64562006-11-02  George Staikos <staikos@kde.org>
6457
6458        Reviewed by Maciej.
6459
6460        * collector.cpp:
6461        Remove a deprecated pthreads call.
6462
64632006-11-02  Anders Carlsson  <acarlsson@apple.com>
6464
6465        Reviewed by Maciej, landed by Anders.
6466
6467        * CMakeLists.txt:
6468        Make KDE support optional.
6469
64702006-11-01  Kevin McCullough  <KMcCullough@apple.com>
6471
6472        Reviewed by Brady.
6473
6474        - Fixes many JavaScriptCore tests in other timezones.  The root problem is that on mac localtime() returns historically accurate information for DST, but the JavaScript spec explicitly states to not take into account historical information but rather to interpolate from valid years.
6475
6476        * kjs/DateMath.cpp:
6477        (KJS::equivalentYearForDST):
6478        (KJS::getDSTOffsetSimple):
6479        (KJS::getDSTOffset):
6480
64812006-10-31  Geoffrey Garen  <ggaren@apple.com>
6482
6483        Reviewed by Beth.
6484        
6485        Fixed http://bugs.webkit.org/show_bug.cgi?id=11477
6486        REGRESSION: GMail crashes in KJS::FunctionImp::callerGetter
6487
6488        * kjs/function.cpp:
6489        (KJS::FunctionImp::argumentsGetter): Removed unnecessary braces.
6490        (KJS::FunctionImp::callerGetter): More logical NULL checking.
6491
64922006-10-31  Oliver Hunt  <oliver@apple.com>
6493
6494        Reviewed by Geoff.
6495
6496        Adding definition for PLATFORM(CI)
6497
6498        * wtf/Platform.h:
6499
65002006-10-31  Vladimir Olexa  <vladimir.olexa@gmail.com>
6501
6502        Reviewed by Geoff.
6503
6504        http://bugs.webkit.org/show_bug.cgi?id=4166
6505        Function object does not support caller property
6506
6507        Test: fast/js/caller-property.html
6508
6509        * kjs/function.cpp: 
6510        (KJS::FunctionImp::callerGetter): added
6511        (KJS::FunctionImp::getOwnPropertySlot): added if statement to handle callerGetter()
6512        * kjs/function.h: added callerGetter() declaration
6513        * kjs/identifier.h: added caller property macro
6514        * tests/mozilla/expected.html: 
6515
65162006-10-30  Kevin McCullough  <KMcCullough@apple.com>
6517
6518        Reviewed by Adam.
6519
6520        - Fix some timezone issues and JavaScriptCore date tests.  Addresses bugzilla 4930.
6521
6522        * kjs/DateMath.h:
6523        (KJS::GregorianDateTime::GregorianDateTime): Here's the fix, to add parenthesis for order of precedence.
6524        * kjs/date_object.cpp:
6525        (KJS::DateProtoFunc::callAsFunction): 
6526        (KJS::DateObjectImp::construct): memset not needed as GregorianDateTime initializes itself.
6527
65282006-10-30  Darin Adler  <darin@apple.com>
6529
6530        Reviewed by John Sullivan.
6531
6532        * kjs/SavedBuiltins.h: Added needed include.
6533        * wtf/OwnPtr.h: (WTF::OwnPtr::set): Fixed mistake in assertion.
6534
65352006-10-28  Darin Adler  <darin@apple.com>
6536
6537        Reviewed by Maciej.
6538
6539        - renamed PassRefPtr::release to releaseRef to make it clearer that
6540          it's the counterpart of adoptRef, and to make it harder to confuse
6541          it with the safer-to-use RefPtr::release
6542
6543        * kjs/identifier.cpp:
6544        (KJS::CStringTranslator::translate):
6545        (KJS::UCharBufferTranslator::translate):
6546        * kjs/ustring.cpp:
6547        (KJS::UString::Rep::create):
6548        * wtf/PassRefPtr.h:
6549        (WTF::PassRefPtr::PassRefPtr):
6550        (WTF::PassRefPtr::~PassRefPtr):
6551        (WTF::PassRefPtr::get):
6552        (WTF::PassRefPtr::releaseRef):
6553        (WTF::PassRefPtr::operator->):
6554        (WTF::PassRefPtr::operator=):
6555        (WTF::adoptRef):
6556        (WTF::static_pointer_cast):
6557        (WTF::const_pointer_cast):
6558        * wtf/RefPtr.h:
6559        (WTF::RefPtr::RefPtr):
6560        (WTF::RefPtr::operator=):
6561
65622006-10-28  Darin Adler  <darin@apple.com>
6563
6564        Reviewed by Steve.
6565
6566        * kjs/grammar.y: Add definitions of YYMALLOC and YYFREE to fix
6567        a warning some people see (not sure why others don't see it).
6568
6569        * JavaScriptCore.vcproj/JavaScriptCore/grammarWrapper.cpp: Touch
6570        this file to force it to re-build grammar.cpp.
6571
65722006-10-28  Darin Adler  <darin@apple.com>
6573
6574        Reviewed by Geoff.
6575
6576        - made changes so the code compiles with the highest warning level
6577          under MSVC (disabling some warnings, making some code fixes)
6578
6579        * API/JSCallbackConstructor.cpp:
6580        (KJS::JSCallbackConstructor::construct):
6581        * API/JSCallbackFunction.cpp:
6582        (KJS::JSCallbackFunction::callAsFunction):
6583        * API/JSCallbackObject.cpp:
6584        (KJS::JSCallbackObject::init):
6585        (KJS::JSCallbackObject::construct):
6586        (KJS::JSCallbackObject::callAsFunction):
6587        * API/JSObjectRef.cpp:
6588        (JSPropertyNameArrayGetNameAtIndex):
6589        * API/JSStringRef.cpp:
6590        (JSStringCreateWithCharacters):
6591        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
6592        * bindings/c/c_utility.cpp:
6593        (KJS::Bindings::convertUTF8ToUTF16):
6594        (KJS::Bindings::coerceValueToNPVariantStringType):
6595        (KJS::Bindings::convertValueToNPVariant):
6596        * kjs/DateMath.h:
6597        (KJS::GregorianDateTime::GregorianDateTime):
6598        * kjs/ExecState.h:
6599        (KJS::ExecState::hadException):
6600        * kjs/JSImmediate.h:
6601        (KJS::JSImmediate::fromDouble):
6602        (KJS::JSImmediate::toDouble):
6603        (KJS::JSImmediate::NanAsBits):
6604        (KJS::JSImmediate::oneAsBits):
6605        * kjs/Parser.h:
6606        * kjs/PropertyNameArray.h:
6607        (KJS::PropertyNameArray::size):
6608        * kjs/array_object.cpp:
6609        (ArrayObjectImp::callAsFunction):
6610        * kjs/bool_object.cpp:
6611        (BooleanObjectImp::callAsFunction):
6612        * kjs/collector.cpp:
6613        (KJS::Collector::allocate):
6614        (KJS::Collector::markCurrentThreadConservatively):
6615        (KJS::Collector::collect):
6616        * kjs/completion.h:
6617        (KJS::Completion::isValueCompletion):
6618        * kjs/date_object.cpp:
6619        (KJS::findMonth):
6620        * kjs/debugger.cpp:
6621        (Debugger::sourceParsed):
6622        (Debugger::sourceUnused):
6623        (Debugger::exception):
6624        (Debugger::atStatement):
6625        (Debugger::callEvent):
6626        (Debugger::returnEvent):
6627        * kjs/dtoa.cpp:
6628        * kjs/error_object.cpp:
6629        (ErrorObjectImp::callAsFunction):
6630        (NativeErrorImp::callAsFunction):
6631        * kjs/function.cpp:
6632        (KJS::FunctionImp::processVarDecls):
6633        (KJS::GlobalFuncImp::callAsFunction):
6634        * kjs/function_object.cpp:
6635        (FunctionPrototype::callAsFunction):
6636        * kjs/grammar.y:
6637        * kjs/identifier.cpp:
6638        (KJS::CStringTranslator::translate):
6639        (KJS::Identifier::add):
6640        * kjs/internal.h:
6641        * kjs/lexer.cpp:
6642        (Lexer::lex):
6643        (Lexer::isIdentStart):
6644        (Lexer::isIdentPart):
6645        (isDecimalDigit):
6646        (Lexer::isHexDigit):
6647        (Lexer::isOctalDigit):
6648        (Lexer::matchPunctuator):
6649        (Lexer::singleEscape):
6650        (Lexer::convertOctal):
6651        (Lexer::convertHex):
6652        (Lexer::convertUnicode):
6653        (Lexer::record8):
6654        * kjs/lexer.h:
6655        * kjs/math_object.cpp:
6656        (MathFuncImp::callAsFunction):
6657        * kjs/number_object.cpp:
6658        (integer_part_noexp):
6659        (intPow10):
6660        (NumberProtoFunc::callAsFunction):
6661        (NumberObjectImp::callAsFunction):
6662        * kjs/object.cpp:
6663        (KJS::JSObject::deleteProperty):
6664        (KJS::JSObject::callAsFunction):
6665        (KJS::JSObject::toBoolean):
6666        (KJS::JSObject::toObject):
6667        * kjs/object.h:
6668        (KJS::JSObject::getPropertySlot):
6669        * kjs/property_map.cpp:
6670        (KJS::isValid):
6671        (KJS::PropertyMap::put):
6672        (KJS::PropertyMap::insert):
6673        (KJS::PropertyMap::containsGettersOrSetters):
6674        * kjs/property_map.h:
6675        (KJS::PropertyMap::hasGetterSetterProperties):
6676        * kjs/property_slot.h:
6677        * kjs/string_object.cpp:
6678        (StringInstance::getPropertyNames):
6679        (StringObjectImp::callAsFunction):
6680        (StringObjectFuncImp::callAsFunction):
6681        * kjs/ustring.cpp:
6682        (KJS::UString::Rep::computeHash):
6683        (KJS::UString::UString):
6684        (KJS::UString::from):
6685        (KJS::UString::append):
6686        (KJS::UString::ascii):
6687        (KJS::UString::operator=):
6688        (KJS::UString::find):
6689        (KJS::UString::rfind):
6690        * kjs/ustring.h:
6691        (KJS::UChar::high):
6692        (KJS::UChar::low):
6693        (KJS::UCharReference::low):
6694        (KJS::UCharReference::high):
6695        * kjs/value.cpp:
6696        (KJS::JSValue::toUInt16):
6697        * kjs/value.h:
6698        * pcre/pcre_compile.c:
6699        (get_othercase_range):
6700        * pcre/pcre_exec.c:
6701        (match):
6702        * pcre/pcre_internal.h:
6703        * wtf/HashFunctions.h:
6704        (WTF::intHash):
6705        (WTF::PtrHash::hash):
6706        * wtf/MathExtras.h:
6707        (isnan):
6708        (lround):
6709        (lroundf):
6710        * wtf/StringExtras.h:
6711        (strncasecmp):
6712        * wtf/unicode/icu/UnicodeIcu.h:
6713        (WTF::Unicode::isPrintableChar):
6714
67152006-10-26  W. Andy Carrel  <wac@google.com>
6716
6717        Reviewed by Maciej.
6718
6719        - Fix http://bugs.webkit.org/show_bug.cgi?id=7445 /
6720          <rdar://problem/4614195> (and 7253 / <rdar://4694011>) by changing
6721          inline regexps so that they can have \u escaped Unicode sequences and
6722          still work properly.
6723
6724        * kjs/lexer.cpp:
6725        (Lexer::Lexer): 
6726        (Lexer::setCode):
6727        (Lexer::shift): Looking ahead one additional character for the benefit
6728        of scanRegExp
6729        (Lexer::scanRegExp): Change code to support unicode escapes in inline 
6730        regexps.
6731        * kjs/lexer.h: Extra lookahead added.
6732
6733=== Safari-521.29 ===
6734
67352006-10-26  Nikolas Zimmermann  <zimmermann@kde.org>
6736
6737        Reviewed by Darin.
6738
6739        Fix build with older gcc 3.3.4.
6740
6741        * kjs/DateMath.cpp: Remove inline prefix.
6742        (KJS::equivalentYearForDST):
6743
67442006-10-26  Darin Adler  <darin@apple.com>
6745
6746        Reviewed by John.
6747
6748        - fix iteration of properties of string objects (found because of a warning
6749          emitted by the MSVC compiler)
6750
6751        * kjs/string_object.cpp: (StringInstance::getPropertyNames): Change code that
6752        wants to format a number as a string to use UString::from. Before it was using
6753        the UString constructor that makes a string from a character!
6754
6755        * kjs/ustring.h:
6756        * kjs/ustring.cpp: Remove the dangerous and not all that helpful UString(char)
6757        constructor.
6758
6759        * kjs/grammar.y: Change code to not depend on the UString(char) constructor.
6760        This is potentially more efficient anyway because we could overload the + operator
6761        some day to handle char* directly instead of creating a UString.
6762
6763        * kjs/nodes2string.cpp: (SourceStream::operator<<): Change code to not depend on
6764        the UString(char) constructor.
6765
67662006-10-25  Kevin McCullough  <KMcCullough@apple.com>
6767
6768        Reviewed by Steve (rubber stamp).
6769
6770        - Link against your local build of JavaScriptCore.lib first, this fixes some errors on release builds of testkjs.
6771
6772        * JavaScriptCore.vcproj/testkjs/testkjs.vcproj:
6773
67742006-10-25  Geoffrey Garen  <ggaren@apple.com>
6775
6776        Reviewed by Lou.
6777        
6778        Removed duplicate symbol declaration.
6779
6780        * JavaScriptCore.xcodeproj/project.pbxproj:
6781        * kjs/grammar.y:
6782
67832006-10-24  Steve Falkenburg  <sfalken@apple.com>
6784
6785        Build config change
6786
6787        * JavaScriptCore.vcproj/testkjs/testkjs.vcproj:
6788
67892006-10-24  Kevin McCullough  <KMcCullough@apple.com>
6790
6791        Reviewed by Brady.
6792
6793        - Fixes a date formatting issue on win.  Specifically strftime cannot handle some ranges of time so we shift time call strftime and then manipulate the returned string, if needed.
6794
6795        * kjs/date_object.cpp:
6796        (KJS::):
6797        (KJS::formatLocaleDate):
6798        (KJS::DateProtoFunc::callAsFunction):
6799
68002006-10-23  Kevin McCullough  <KMcCullough@apple.com>
6801
6802        Reviewed by 
6803
6804       - Build fix
6805
6806        * JavaScriptCore.xcodeproj/project.pbxproj:
6807        * kjs/grammar.y:
6808
68092006-10-23  Kevin McCullough  <KMcCullough@apple.com>
6810
6811        Reviewed by Maciej.
6812
6813        - Makes the toTM function an operator.  Was going to piggy back on a patch but the patch needs more work.
6814
6815        * kjs/DateMath.cpp:
6816        (KJS::equivalentYearForDST):
6817        * kjs/DateMath.h:
6818        (KJS::GregorianDateTime::operator tm):
6819        * kjs/date_object.cpp:
6820        (KJS::formatTime):
6821        (KJS::DateProtoFunc::callAsFunction):
6822
68232006-10-23  Kevin McCullough  <KMcCullough@apple.com>
6824
6825        Reviewed by Maciej.
6826
6827       - Fixes two regressions on win.  Both are stack overflows. For one the number of recursions is capped at 100, and for the other, nested parenthesis pairs are not evaluated (since they would evaluate to whatever is in them anyway).
6828
6829        * kjs/grammar.y:
6830        * kjs/object.cpp:
6831
68322006-10-21  Steve Falkenburg  <sfalken@apple.com>
6833
6834        Reviewed by Adam.
6835        
6836        Add minimal compatibility with MSVCRT leak checker
6837
6838        * wtf/FastMalloc.h:
6839
68402006-10-23  Kevin McCullough  <KMcCullough@apple.com>
6841
6842        Reviewed by Geof.
6843
6844        - Sets the lowercase range correctly in the test and consolidates a variable to make the test more readable.
6845
6846       * tests/mozilla/ecma/String/15.5.4.11-2.js:
6847
68482006-10-21  Darin Adler  <darin@apple.com>
6849
6850        Reviewed by Anders.
6851
6852        - http://bugs.webkit.org/show_bug.cgi?id=11377
6853          swap(Vector, Vector) should be O(1) instead of O(n)
6854
6855        * wtf/Vector.h:
6856        (WTF::VectorBuffer::swap): Added.
6857        (WTF::Vector::swap): Added.
6858        (WTF::swap): Added overload that takes two Vector objects.
6859
68602006-10-21  Darin Adler  <darin@apple.com>
6861
6862        Reviewed by Adam.
6863
6864        - http://bugs.webkit.org/show_bug.cgi?id=11376
6865          build scripts should invoke make with "-j" option for multiple processors
6866
6867        * JavaScriptCore.xcodeproj/project.pbxproj: Pass -j `sysctl -n hw.ncpu` to make.
6868
68692006-10-19  Kevin McCullough  <KMcCullough@apple.com>
6870
6871        Reviewed by Geof.
6872
6873        Changed test to make us pass Georgian case changing for Unicode 4.0 and 5.0.  This incorporates changes from the 1.4 revision of the same mozilla test.
6874        On Tiger we are still using Unicode 4.0 but on win and Leopard we are using Unicode 5.0, so this test currently allows for either answer.
6875
6876        * tests/mozilla/ecma/String/15.5.4.11-2.js:
6877
68782006-10-18  Maciej Stachowiak  <mjs@apple.com>
6879
6880        Reviewed by Geoff.
6881        
6882        - remove vestiges of KXMLCore name (former name of WTF).
6883
6884        * wtf/Assertions.h:
6885        * wtf/FastMalloc.h:
6886        (operator new):
6887        (operator delete):
6888        (operator new[]):
6889        (operator delete[]):
6890        * wtf/FastMallocInternal.h:
6891        * wtf/Forward.h:
6892        * wtf/GetPtr.h:
6893        * wtf/HashCountedSet.h:
6894        * wtf/HashFunctions.h:
6895        * wtf/HashMap.h:
6896        * wtf/HashSet.h:
6897        * wtf/HashTable.h:
6898        * wtf/HashTraits.h:
6899        * wtf/ListRefPtr.h:
6900        * wtf/MathExtras.h:
6901        * wtf/Noncopyable.h:
6902        * wtf/OwnArrayPtr.h:
6903        * wtf/OwnPtr.h:
6904        * wtf/PassRefPtr.h:
6905        * wtf/Platform.h:
6906        * wtf/RefPtr.h:
6907        * wtf/StringExtras.h:
6908        (snprintf):
6909        * wtf/UnusedParam.h:
6910        * wtf/Vector.h:
6911        * wtf/VectorTraits.h:
6912
69132006-10-17  Steve Falkenburg  <sfalken@apple.com>
6914
6915        Reviewed by Maciej.
6916        
6917        Adjust include paths
6918
6919        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
6920
69212006-10-17  Kevin McCullough  <KMcCullough@apple.com>
6922
6923        Reviewed by Darin.
6924
6925        Fixed a date issue where the UTC offset was not set in win.
6926
6927        * kjs/DateMath.cpp:
6928        (KJS::getDSTOffsetSimple):
6929        (KJS::getDSTOffset):
6930        (KJS::msToGregorianDateTime):
6931        * kjs/DateMath.h:
6932        (KJS::):
6933        (KJS::GregorianDateTime::GregorianDateTime):
6934
69352006-10-17  Kevin McCullough  <KMcCullough@apple.com>
6936
6937        Reviewed by Brady.
6938
6939        Fixes a JavaScriptCore math issue on win.
6940
6941        * kjs/math_object.cpp:
6942        (MathFuncImp::callAsFunction):
6943        * wtf/MathExtras.h:
6944        (wtf_atan2):
6945
69462006-10-16  Kevin McCullough  <kmccullough@apple.com>
6947
6948        Reviewed by Geof.
6949
6950        Removed unecessary global specifiers.
6951
6952        * kjs/math_object.cpp:
6953        (MathFuncImp::callAsFunction):
6954
69552006-10-16  Kevin McCullough  <KMcCullough@apple.com>
6956
6957        Reviewed by John.
6958
6959        Fixes a compile order issue for testkjs on win.
6960
6961        * JavaScriptCore.vcproj/testkjs/testkjs.vcproj:
6962
69632006-10-15  Krzysztof Kowalczyk  <kkowalczyk@gmail.com>
6964
6965        Reviewed by Anders.
6966
6967        Remove junk (as gcc calls it) after #else clause.
6968
6969        * wtf/FastMalloc.cpp:
6970        (WTF::do_free):
6971
69722006-10-14  Krzysztof Kowalczyk  <kkowalczyk@gmail.com>
6973
6974        Reviewed by Maciej.
6975
6976        Define KXMLCORE_USE_CURL for platforms that wish to use CURL as
6977        networking, and set it for GDK build
6978
6979        * wtf/Platform.h:
6980
69812006-10-13  Brett Wilson  <brettw@google.com>
6982
6983        Reviewed by Kevin McCullough.
6984
6985        Fixes http://bugs.webkit.org/show_bug.cgi?id=11283
6986        Fixes Qt/Linux and Windows build
6987
6988        * kjs/DateMath.cpp:
6989        * kjs/DateMath.h:
6990        * kjs/date_object.cpp:
6991        (KJS::DateProtoFunc::callAsFunction):
6992
69932006-10-13  Kevin McCullough  <KMcCullough@apple.com>
6994
6995        Reviewed by Adam, Geoff, Darin.
6996
6997       Fixed displaying the UTC offset and time zone string, as well as renamed the GregorianDateTime structure and clean up. 
6998
6999        * ChangeLog:
7000        * kjs/DateMath.cpp:
7001        (KJS::getUTCOffset):
7002        (KJS::getDSTOffsetSimple):
7003        (KJS::gregorianDateTimeToMS):
7004        (KJS::msToGregorianDateTime):
7005        * kjs/DateMath.h:
7006        (KJS::GregorianDateTime::GregorianDateTime):
7007        (KJS::GregorianDateTime::~GregorianDateTime):
7008        (KJS::GregorianDateTime::toTM):
7009        * kjs/date_object.cpp:
7010        (KJS::gmtoffset):
7011        (KJS::formatDate):
7012        (KJS::formatDateUTCVariant):
7013        (KJS::formatTime):
7014        (KJS::fillStructuresUsingTimeArgs):
7015        (KJS::fillStructuresUsingDateArgs):
7016        (KJS::DateInstance::getTime):
7017        (KJS::DateInstance::getUTCTime):
7018        (KJS::DateProtoFunc::callAsFunction):
7019        (KJS::DateObjectImp::construct):
7020        (KJS::DateObjectImp::callAsFunction):
7021        (KJS::DateObjectFuncImp::callAsFunction):
7022        (KJS::parseDate):
7023        * kjs/date_object.h:
7024
70252006-10-13  Kevin McCullough  <KMcCullough@apple.com>
7026
7027        Reviewed by Adam.
7028
7029        Gets JavaScripCore tests running on windows.
7030
7031        * Scripts/run-javascriptcore-tests:
7032        * Scripts/webkitdirs.pm:
7033
70342006-10-12  Geoffrey Garen  <ggaren@apple.com>
7035
7036        Reviewed by Maciej.
7037        
7038        Removed JSObjectMakeWithPrototype, clarified some comments. We really
7039        don't want people to manage their own prototypes, so we don't want an
7040        extra function in the API devoted to just that. People can still manage
7041        their own prototypes if they really want by using JSObjectSetPrototype.
7042
7043        * API/JSClassRef.cpp:
7044        (OpaqueJSClass::createNoAutomaticPrototype):
7045        (OpaqueJSClass::create):
7046        * API/JSClassRef.h:
7047        * API/JSObjectRef.cpp:
7048        (JSClassCreate):
7049        (JSObjectMake):
7050        * API/JSObjectRef.h:
7051        * API/testapi.c:
7052        (main):
7053        * JavaScriptCore.exp:
7054
70552006-10-12  Kevin McCullough  <KMcCullough@apple.com>
7056
7057        Reviewed by Adam.
7058
7059        Build breakage fix
7060
7061        * kjs/DateMath.cpp:
7062        (KJS::msToTM):
7063        * kjs/date_object.cpp:
7064        (KJS::gmtoffset):
7065
70662006-10-11  Kevin McCullough  <KMcCullough@apple.com>
7067
7068        Reviewed by Geoff.
7069
7070        Added our own tm struct to have a consistent set of fields, which lets us display the DST offset and timezone strings correctly.  Also there is some code cleanup.
7071
7072        * kjs/DateMath.cpp:
7073        (KJS::timeToMS):
7074        (KJS::getUTCOffset):
7075        (KJS::getDSTOffsetSimple):
7076        (KJS::dateToMS):
7077        (KJS::msToTM):
7078        (KJS::tmToKJStm):
7079        (KJS::KJStmToTm):
7080        * kjs/DateMath.h:
7081        * kjs/date_object.cpp: 
7082        (KJS::gmtoffset): 
7083        (KJS::formatTime): 
7084        (KJS::DateProtoFunc::callAsFunction): 
7085        (KJS::DateObjectImp::construct):
7086        (KJS::DateObjectImp::callAsFunction):
7087        (KJS::DateObjectFuncImp::callAsFunction):
7088        (KJS::parseDate):
7089        * kjs/date_object.h:
7090
70912006-10-09  Krzysztof Kowalczyk  <kkowalczyk@gmail.com>
7092
7093        Reviewed by Geoff.
7094
7095        Improve gdk build compiler flags (show warning, no rtti and exceptions).
7096
7097        * jscore.bkl:
7098
70992006-10-06  Kevin McCullough  <KMcCullough@apple.com>
7100
7101        Reviewed by Brady.
7102
7103        DST and TimeZones were wrong in some cases, specifically on some of the dates where DST changes.
7104
7105        * kjs/DateMath.cpp:
7106        (KJS::equivalentYearForDST):
7107        (KJS::getUTCOffset):
7108        (KJS::getDSTOffsetSimple):
7109        (KJS::getDSTOffset):
7110        (KJS::dateToMseconds):
7111        (KJS::msToTM):
7112        * kjs/DateMath.h:
7113        * kjs/date_object.cpp:
7114        (KJS::gmtoffset):
7115
71162006-10-05  Darin Adler  <darin@apple.com>
7117
7118        Reviewed by Kevin McCullough.
7119
7120        * wtf/Assertions.cpp: Fix build when _DEBUG is not defined.
7121
71222006-10-04  Kevin McCullough  <KMcCullough@apple.com>
7123
7124        Reviewed by Adam.
7125
7126        - Removed an unnecessary assert that was stopping many pages.  tm_gmtoff was not set for UTC time in mozilla but is always set for us.
7127
7128        * kjs/DateMath.cpp:
7129        (KJS::getUTCOffset):
7130        (KJS::msToTM):
7131        * kjs/date_object.cpp:
7132        (KJS::gmtoffset):
7133        (KJS::formatTime):
7134
71352006-10-04  Geoffrey Garen  <ggaren@apple.com>
7136
7137        Patch by Darin and me, reviewed by Maciej.
7138
7139        Fixed <rdar://problem/4518397> REGRESSION(?): Oft-seen but unrepro crash 
7140              in JavaScript garbage collection (KJS::Collector::collect())
7141               <rdar://problem/4752492> Crash in KJS::collect
7142              
7143        The issue here was allocating one garbage-collected object in the midst 
7144        of allocating a second garbage-collected object. In such a case, the
7145        zeroIfFree word lies.
7146
7147        * kjs/collector.cpp:
7148        (KJS::Collector::allocate):
7149        (KJS::Collector::collect):
7150
71512006-10-04  Kevin McCullough  <KMcCullough@apple.com>
7152
7153        Reviewed by Adam.
7154
7155        - Layout test fix
7156
7157        * kjs/DateMath.cpp:
7158        (KJS::dateToDayInYear): accept and correctly handle negative months
7159
71602006-10-05  Kevin McCullough  <KMcCullough@apple.com>
7161
7162       build fix
7163
7164        * kjs/DateMath.cpp:
7165        (KJS::dateToDayInYear):
7166
71672006-10-05  Mark Rowe  <bdash@webkit.org>
7168
7169        Reviewed by maculloch.
7170
7171        Gdk build fix.
7172
7173        * JavaScriptCoreSources.bkl: Add DateMath.cpp to file list.
7174
71752006-10-05  Kevin McCullough  <KMcCullough@apple.com>
7176
7177        Reviewed by aroben
7178
7179        - build fix
7180
7181        * JavaScriptCore.xcodeproj/project.pbxproj:
7182
71832006-10-04  Nikolas Zimmermann  <zimmermann@kde.org>
7184
7185        Reviewed by Mitz.
7186
7187        Fix Qt/Linux build by adding DateMath.cpp to compilation.
7188
7189        * CMakeLists.txt: Also replace tabs with spaces.
7190
71912006-10-04  Kevin McCullough  <KMcCullough@apple.com>
7192
7193        Reviewed by DethBakin.
7194
7195        - Apparently the build bot uses an older version of XCode which warns about conversions and the newest version does not.  I hope this fixes the build but I cann't be sure on my system.
7196
7197        * kjs/DateMath.cpp:
7198        (KJS::msToYear):
7199        (KJS::dayInYear):
7200        (KJS::dateToDayInYear):
7201
72022006-10-05  Darin Adler  <darin@apple.com>
7203
7204        Reviewed by Adam.
7205
7206        * wtf/Assertions.cpp: Changed assertion formatting to omit the "======"
7207        lines so you can see more assertions in less space. Also improved format
7208        of file/line information so it works with more development environments.
7209
72102006-10-04  Kevin McCullough  <KMcCullough@apple.com>
7211
7212        Reviewed by Tim H.
7213
7214        - The build machine is more sensitive about automatic conversions.  These fixes exp
7215licitly cast or change the input and return types of functions to avoid conversions.
7216
7217        * JavaScriptCore.xcodeproj/project.pbxproj:
7218        * kjs/DateMath.cpp:
7219        (KJS::):
7220        (KJS::msToDays):
7221        (KJS::msToYear):
7222        (KJS::dayInYear):
7223        (KJS::monthToDayInYear):
7224        (KJS::dateToDayInYear):
7225        (KJS::getDSTOffsetSimple):
7226        (KJS::getDSTOffset):
7227        (KJS::dateToMseconds):
7228        (KJS::msToTM):
7229
72302006-10-04  Kevin McCullough  <KMcCullough@apple.com>
7231
7232        Reviewed by GGaren
7233
7234        - This is a big makeover for our Date implemenetation.  This solves many platform specific issues, specifically dates before 1970, and simplifies some ugly code.  The purpose of this was to get us to pass many of the JavaScriptCore tests on windows.
7235
7236        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
7237        * JavaScriptCore.xcodeproj/project.pbxproj:
7238        * kjs/DateMath.cpp: Added.
7239        (KJS::):
7240        (KJS::daysInYear):
7241        (KJS::daysFrom1970ToYear):
7242        (KJS::msFrom1970ToYear):
7243        (KJS::msToDays):
7244        (KJS::msToYear):
7245        (KJS::isLeapYear):
7246        (KJS::isInLeapYear):
7247        (KJS::dayInYear):
7248        (KJS::msToMilliseconds):
7249        (KJS::msToWeekDay):
7250        (KJS::msToSeconds):
7251        (KJS::msToMinutes):
7252        (KJS::msToHours):
7253        (KJS::msToMonth):
7254        (KJS::msToDayInMonth):
7255        (KJS::monthToDayInYear):
7256        (KJS::timeToMseconds):
7257        (KJS::dateToDayInYear):
7258        (KJS::equivalentYearForDST):
7259        (KJS::getUTCOffset):
7260        (KJS::getDSTOffsetSimple):
7261        (KJS::getDSTOffset):
7262        (KJS::localTimeToUTC):
7263        (KJS::UTCToLocalTime):
7264        (KJS::dateToMseconds):
7265        (KJS::msToTM):
7266        (KJS::isDST):
7267        * kjs/DateMath.h: Added.
7268        (KJS::):
7269        * kjs/date_object.cpp:
7270        (KJS::gmtoffset):
7271        (KJS::formatTime):
7272        (KJS::DateInstance::getTime):
7273        (KJS::DateInstance::getUTCTime):
7274        (KJS::DateProtoFunc::callAsFunction):
7275        (KJS::DateObjectImp::construct):
7276        (KJS::DateObjectFuncImp::callAsFunction):
7277        (KJS::parseDate):
7278        * kjs/testkjs.cpp:
7279        * os-win32/stdint.h:
7280
72812006-10-02  Nikolas Zimmermann  <zimmermann@kde.org>
7282
7283        Reviewed/landed by Adam.
7284
7285        Build testkjs on Qt/Linux.
7286
7287        * CMakeLists.txt:
7288
72892006-10-02  Nikolas Zimmermann  <zimmermann@kde.org>
7290
7291        Reviewed by eseidel.  Landed by eseidel.
7292
7293        Fix win32 build, which has no inttypes.h
7294
7295        * wtf/Assertions.h:
7296
72972006-10-02  Nikolas Zimmermann <zimmermann@kde.org>
7298
7299        Reviewed by eseidel & mjs.  Landed by eseidel.
7300
7301        Fix Qt/Linux build with older gcc 3.3.4.
7302        http://bugs.webkit.org/show_bug.cgi?id=11116
7303 
7304        * kjs/lookup.h: Move cacheGlobalObject into KJS namespace.
7305        (KJS::cacheGlobalObject): Also remove GCC_ROOT_NS_HACK.
7306        * wtf/Assertions.h: Include inttypes.h for uintptr_t.
7307
73082006-09-28  Steve Falkenburg  <sfalken@apple.com>
7309
7310        Reviewed by Maciej.
7311        
7312        Use $(ConfigSuffix) set via vsprops files to add _debug
7313        to end of debug filenames.
7314
7315        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
7316        * JavaScriptCore.vcproj/debug.vsprops: Added.
7317        * JavaScriptCore.vcproj/dftables/dftables.vcproj:
7318        * JavaScriptCore.vcproj/release.vsprops: Added.
7319        * JavaScriptCore.vcproj/testkjs/testkjs.vcproj:
7320
73212006-09-28  Darin Adler  <darin@apple.com>
7322
7323        Reviewed by Alice.
7324
7325        - support for change that should fix <rdar://problem/4733044>
7326          REGRESSION: XML iBench shows 10% perf. regression (copying
7327          strings while decoding)
7328
7329        * wtf/Vector.h: Changed VectorBuffer so that the general case
7330        contains an instance of the 0 case, since deriving from it
7331        was violating the Liskov Substitution Principle.
7332        (WTF::VectorBuffer::releaseBuffer): Added. Releases the buffer so it can
7333        be adopted by another data structure that uses the FastMalloc.h allocator.
7334        Returns 0 if the internal buffer was being used.
7335        (WTF::Vector::releaseBuffer): Added. Releases the buffer as above or creates
7336        a new one in the case where the internal buffer was being used.
7337
73382006-09-28  Maciej Stachowiak  <mjs@apple.com>
7339
7340        Reviewed by Geoff.
7341        
7342        - change garbage collection to happen at increments proportional to number of live objects, not always
7343        every 1000 allocations
7344
7345        * kjs/collector.cpp:
7346        (KJS::Collector::allocate):
7347
73482006-09-28  Maciej Stachowiak  <mjs@apple.com>
7349
7350        Reviewed by Mitz.
7351
7352        - fixed REGRESSION (r16606): javascriptCore Crash on website load
7353        
7354        Plus style fixes.
7355        
7356            - fixed some possible off-by-one bugs
7357            - use indexing, not iterators, for Vectors
7358            - store Vector by pointer instead of by value to avoid blowing out FunctionImp size
7359        
7360        * kjs/function.cpp:
7361        (KJS::FunctionImp::addParameter):
7362        (KJS::FunctionImp::parameterString):
7363        (KJS::FunctionImp::processParameters):
7364        (KJS::FunctionImp::lengthGetter):
7365        (KJS::FunctionImp::getParameterName):
7366        * kjs/function.h:
7367
73682006-09-27  Steve Falkenburg  <sfalken@apple.com>
7369
7370        Reviewed by Maciej.
7371        
7372        More build tweaks
7373
7374        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
7375        * JavaScriptCore.vcproj/JavaScriptCore/dstroot-to-sdk.cmd: Removed.
7376
73772006-09-27  John Sullivan  <sullivan@apple.com>
7378
7379        * kjs/function.cpp:
7380        (KJS::FunctionImp::getParameterName):
7381        removed assertion that displeased gcc 4.0.1 (build 5420):
7382        ASSERT(static_cast<size_t>(index) == index);
7383
73842006-09-27  Kevin McCullough  <KMcCullough@apple.com>
7385
7386        Reviewed by GGaren.
7387
7388        Cleanup of previous fix which was to address Radar: 4752492
7389
7390        * kjs/function.cpp:
7391        (KJS::FunctionImp::addParameter):
7392        (KJS::FunctionImp::parameterString):
7393        (KJS::FunctionImp::processParameters):
7394        (KJS::FunctionImp::lengthGetter):
7395        (KJS::FunctionImp::getParameterName):
7396        * kjs/function.h:
7397
73982006-09-27  Kevin McCullough  <KMcCullough@apple.com>
7399
7400        Reviewed by Adele.
7401
7402        Fixes a GC stack overflow crash.
7403        The change is to move from a linked list implementation of Parameters to a Vector.
7404        The problem with the linked list is that each one creates it's own stack frame when being destroyed and in extreme cases this caused the stack to overflow. 
7405
7406        * kjs/function.cpp:
7407        (KJS::Parameter::Parameter):
7408        (KJS::FunctionImp::addParameter):
7409        (KJS::FunctionImp::parameterString):
7410        (KJS::FunctionImp::processParameters):
7411        (KJS::FunctionImp::lengthGetter):
7412        (KJS::FunctionImp::getParameterName):
7413        * kjs/function.h:
7414
74152006-09-27  Steve Falkenburg  <sfalken@apple.com>
7416
7417        Fix last path fix.
7418
7419        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
7420
74212006-09-27  Steve Falkenburg  <sfalken@apple.com>
7422
7423        Set path before build.
7424
7425        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
7426
74272006-09-27  Sean Gies  <seangies@apple.com>
7428
7429        Reviewed by Adam Roben.
7430
7431        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Debug config should link to debug runtime.
7432        * JavaScriptCore.vcproj/dftables/dftables.vcproj: Debug config should link to debug runtime.
7433
74342006-09-27  Don Melton  <gramps@apple.com>
7435
7436        Reviewed by Adam Roben.
7437
7438        Changed line ending from DOS to UNIX format so it doesn't die running
7439        on my machine. ;)
7440
7441        * JavaScriptCore.vcproj/JavaScriptCore/build-generated-files.sh:
7442
74432006-09-23  Alexey Proskuryakov  <ap@nypop.com>
7444
7445        Reviewed by Maciej.
7446
7447        http://bugs.webkit.org/show_bug.cgi?id=10183
7448        REGRESSION: obfuscated JS decoding breaks because of soft hyphen removal
7449        (Fanfiction.net author pages not listing stories)
7450
7451        Rolled out the fix for bug 4139.
7452
7453        * kjs/lexer.cpp:
7454        (Lexer::setCode):
7455        (Lexer::shift):
7456        * tests/mozilla/ecma/Array/15.4.5.1-1.js:
7457        * tests/mozilla/expected.html:
7458
74592006-09-22  Steve Falkenburg  <sfalken@apple.com>
7460
7461        Build fix.
7462
7463        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
7464
74652006-09-22  Darin Adler  <darin@apple.com>
7466
7467        Reviewed by Alice.
7468
7469        * wtf/Vector.h: Add an append that takes a pointer and length.
7470        Generalize the existing Vector append to work on vectors with
7471        any value for inlineCapacity. Change the append algorithm so
7472        it doesn't check capacity each time through the loop.
7473
74742006-09-22  Steve Falkenburg  <sfalken@apple.com>
7475
7476        Fix release build.
7477
7478        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
7479
74802006-09-21  Geoffrey Garen  <ggaren@apple.com>
7481
7482        Reviewed by Maciej.
7483
7484        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
7485        Updated to include the right path.
7486        * wtf/FastMalloc.h: #include Platform.h, since we use Platform macros.
7487
7488=== Safari-521.27 ===
7489
74902006-09-20  Anders Carlsson  <acarlsson@apple.com>
7491
7492        Reviewed by Dave Hyatt.
7493
7494        * wtf/MathExtras.h:
7495        Get rid of lrint.
7496
74972006-09-20  Sean Gies  <seangies@apple.com>
7498
7499        Reviewed by Steve Falkenburg.
7500
7501        * wtf/Assertions.cpp: Debug messages should go into debugger console.
7502
75032006-09-20  David Hyatt  <hyatt@apple.com>
7504
7505        Add an implementation of lrint for Win32.
7506
7507        Reviewed by anders
7508
7509        * wtf/MathExtras.h:
7510        (lrint):
7511
75122006-09-15  Krzysztof Kowalczyk  <kkowalczyk@gmail.com>
7513
7514        Reviewed by Adam.
7515
7516        http://bugs.webkit.org/show_bug.cgi?id=10864
7517        Bug 10864: Linux\GDK build fixes
7518
7519        * JavaScriptCoreSources.bkl:
7520        * jscore.bkl:
7521
75222006-09-15  Adam Roben  <aroben@apple.com>
7523
7524        Windows build fix.
7525
7526        * JavaScriptCore.vcproj/JavaScriptCore/build-generated-files.sh:
7527
75282006-09-15  Anders Carlsson  <acarlsson@apple.com>
7529
7530        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
7531        Fix the release build.
7532
75332006-09-15  Anders Carlsson  <acarlsson@apple.com>
7534
7535        Reviewed by Steve.
7536
7537        Add JavaScriptCore API to the build.
7538        * API/JSBase.cpp:
7539        * API/JSCallbackConstructor.cpp:
7540        * API/JSCallbackFunction.cpp:
7541        * API/JSCallbackObject.cpp:
7542        * API/JSClassRef.cpp:
7543        * API/JSContextRef.cpp:
7544        * API/JSObjectRef.cpp:
7545        * API/JSStringRef.cpp:
7546        * API/JSValueRef.cpp:
7547        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
7548        * os-win32/stdbool.h: Added.
7549
75502006-09-12  Steve Falkenburg  <sfalken@apple.com>
7551
7552        Reviewed by Ada.
7553        
7554        Build tweaks (doing JavaScriptCore now since it doesn't have
7555        dependencies).
7556
7557        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
7558        * JavaScriptCore.vcproj/JavaScriptCore/build-generated-files.sh:
7559        * JavaScriptCore.vcproj/JavaScriptCore/dstroot-to-sdk.cmd: Added.
7560        * JavaScriptCore.vcproj/dftables/dftables.vcproj:
7561        * JavaScriptCore.vcproj/testkjs/testkjs.vcproj:
7562
75632006-09-11  Brady Eidson  <beidson@apple.com>
7564
7565        Build fix - I think Tim's last checkin wasn't tested on Tiger, possibly.  I simply
7566        commented out the undefined constants until he can have a chance to make the right call
7567
7568        * bindings/objc/objc_utility.mm:
7569        (KJS::Bindings::objcValueTypeForType): Commented out undefined symbols
7570
75712006-09-11  Timothy Hatcher  <timothy@apple.com>
7572
7573        Reviewed by Tim O. and Darin.
7574
7575        Add support for more method signatures affecting ObjC methods called from JavaScript:
7576        - Added unsigned types and long long.
7577        - Allow methods that use const, oneway, bycopy and byref type modifiers.
7578
7579        * bindings/objc/objc_instance.mm:
7580        (ObjcInstance::invokeMethod):
7581        * bindings/objc/objc_utility.h:
7582        (KJS::Bindings::):
7583        * bindings/objc/objc_utility.mm:
7584        (KJS::Bindings::convertValueToObjcValue):
7585        (KJS::Bindings::convertObjcValueToValue):
7586        (KJS::Bindings::objcValueTypeForType):
7587
75882006-09-05  Timothy Hatcher  <timothy@apple.com>
7589
7590        Reviewed by Tim O.
7591
7592        <rdar://problem/4715840> SEL is not char*
7593
7594        * bindings/objc/objc_class.mm:
7595        (KJS::Bindings::ObjcClass::methodsNamed): use sel_getName instead of a char* cast.
7596        * bindings/objc/objc_runtime.mm:
7597        (ObjcFallbackObjectImp::callAsFunction): ditto
7598
75992006-09-03  Alexey Proskuryakov  <ap@nypop.com>
7600
7601        Reviewed by Tim H.
7602
7603        http://bugs.webkit.org/show_bug.cgi?id=10693
7604        Convert JavaScript arrays to AppleScript lists
7605
7606        * JavaScriptCore.exp: Export ArrayInstance::info and ArrayInstance::getItem().
7607        * kjs/array_instance.h:
7608        * kjs/array_object.cpp:
7609        (ArrayInstance::getItem): Added a method to access array items from C++.
7610
76112006-09-02  Krzysztof Kowalczyk  <kkowalczyk@gmail.com>
7612
7613        Reviewed by Tim H.
7614
7615        Bug 10454: Unix bakefile fixes
7616        http://bugs.webkit.org/show_bug.cgi?id=10454
7617
7618        * JavaScriptCoreSources.bkl:
7619
76202006-09-01  Nikolas Zimmermann  <zimmermann@kde.org>
7621
7622        Reviewed by hyatt.  Landed by eseidel.
7623
7624        Fix build on Linux.
7625
7626        * pcre/CMakeLists.txt: Add wtf/ include.
7627
76282006-09-01  Nikolas Zimmermann  <zimmermann@kde.org>
7629
7630        Reviewed and landed by ap.
7631
7632        Fix build on Linux (C89 without gcc extensions enabled).
7633
7634        * pcre/pcre_internal.h: Use C style comments.
7635        * wtf/Assertions.h: Use C style comments.
7636        * wtf/Platform.h: Use C style comments.
7637
76382006-09-01  Steve Falkenburg  <sfalken@apple.com>
7639
7640        Fix build.
7641
7642        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
7643        * JavaScriptCore.vcproj/dftables/dftables.vcproj:
7644
76452006-08-31  Anders Carlsson  <acarlsson@apple.com>
7646
7647        Reviewed by Darin.
7648        
7649        Add new portability functions to MathExtras.h and add StringExtras.h which is for
7650        string portability functions.
7651        
7652        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
7653        * bindings/c/c_instance.cpp:
7654        * kjs/date_object.cpp:
7655        * wtf/MathExtras.h:
7656        (copysign):
7657        (isfinite):
7658        * wtf/StringExtras.h: Added.
7659        (snprintf):
7660        (strncasecmp):
7661
76622006-08-31  Anders Carlsson  <acarlsson@apple.com>
7663
7664        Reviewed by Tim H.
7665        
7666        Fix Windows build.
7667        
7668        * JavaScriptCore.vcproj/dftables/dftables.vcproj:
7669        * pcre/pcre_internal.h:
7670
76712006-08-31  Timothy Hatcher  <timothy@apple.com>
7672
7673        Reviewed by Geoff.
7674
7675        Band-aid fix for PCRE to compile for ppc64 and x86_64 now that
7676        we use -Wshorten-64-to-32. Adds an INT_CAST macro that ASSERTs
7677        the value <= INT_MAX.
7678
7679        I filed <rdar://problem/4712064> to track the need to verify
7680        PCRE's 64-bit compliance.
7681
7682        * pcre/pcre_compile.c:
7683        (complete_callout):
7684        (compile_branch):
7685        (compile_regex):
7686        (pcre_compile2):
7687        * pcre/pcre_exec.c:
7688        (match):
7689        (pcre_exec):
7690        * pcre/pcre_get.c:
7691        (pcre_get_substring_list):
7692        * pcre/pcre_internal.h:
7693        * pcre/pcre_tables.c:
7694        * pcre/pcre_try_flipped.c:
7695        (_pcre_try_flipped):
7696
76972006-08-30  Darin Adler  <darin@apple.com>
7698
7699        Reviewed by Tim Hatcher.
7700
7701        - add WTF::getPtr, a function template that makes it possible to write
7702          generic code that gets a raw pointer out of any of our pointer types
7703
7704        * JavaScriptCore.xcodeproj/project.pbxproj:
7705        * wtf/GetPtr.h: Added.
7706        * wtf/ListRefPtr.h: (WTF::getPtr): Added.
7707        * wtf/OwnArrayPtr.h: (WTF::getPtr): Added.
7708        * wtf/OwnPtr.h: (WTF::getPtr): Added.
7709        * wtf/PassRefPtr.h: (WTF::getPtr): Added.
7710        * wtf/RefPtr.h: (WTF::getPtr): Added.
7711
77122006-08-29  waylonis  <waylonis@google.com>
7713
7714        Reviewed, tweaked by ggaren.
7715
7716        - Added storage and accessor functions for ExecState as a fix for
7717          http://bugs.webkit.org/show_bug.cgi?id=10114
7718        
7719        * kjs/ExecState.cpp:
7720        (KJS::ExecState::ExecState):
7721        * kjs/ExecState.h:
7722        * kjs/context.h:
7723        (KJS::Context::setExecState):
7724        (KJS::Context::execState):
7725
77262006-08-30  Nikolas Zimmermann  <zimmermann@kde.org>
7727
7728        Reviewed by Tim H.
7729
7730        Commit KDE related tweaks, to be able to
7731        differentiate between a Qt-only or a KDE build.
7732
7733        * CMakeLists.txt: Install wtf-unity library.
7734        * wtf/Platform.h: Add define for the KDE platform.
7735
77362006-08-28  Darin Adler  <darin@apple.com>
7737
7738        Reviewed by Geoff.
7739
7740        * kjs/list.h: Use explicit in constructor (as appropriate).
7741
77422006-08-24  Nikolas Zimmermann  <zimmermann@kde.org>
7743
7744        Reviewed, tweaked and landed by ap
7745
7746        http://bugs.webkit.org/show_bug.cgi?id=10467
7747        WebKit should have Qt platform support (Part II)
7748
7749        * CMakeLists.txt: Adjust to Anders' build fixes.
7750        * wtf/Platform.h: Fix define for the Qt platform (we don't use/need Cairo.)
7751
77522006-08-23  David Hyatt  <hyatt@apple.com>
7753
7754        Fix Platform.h to include #defines for graphics features.
7755
7756        Reviewed by darin
7757
7758        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
7759        * wtf/Platform.h:
7760
77612006-08-23  Anders Carlsson  <acarlsson@apple.com>
7762
7763        Reviewed by Darin.
7764
7765        Make the bindings compile without CoreFoundation.
7766        
7767        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
7768        * bindings/c/c_instance.cpp:
7769        * bindings/c/c_utility.cpp:
7770        (KJS::Bindings::convertUTF8ToUTF16):
7771        * bindings/npapi.h:
7772        * bindings/runtime.cpp:
7773        (KJS::Bindings::Instance::createBindingForLanguageInstance):
7774        (KJS::Bindings::Instance::createLanguageInstanceForValue):
7775        * bindings/runtime_root.cpp:
7776        * bindings/runtime_root.h:
7777        * kjs/interpreter.cpp:
7778        (KJS::Interpreter::createLanguageInstanceForValue):
7779        * kjs/interpreter.h:
7780
77812006-08-22  Anders Carlsson  <acarlsson@apple.com>
7782
7783        Reviewed by Darin.
7784
7785        Move the npruntime code over to using HashMap and the runtime_root code over to using 
7786        HashMap and HashCountedSet.
7787        
7788        * bindings/NP_jsobject.cpp:
7789        * bindings/c/c_utility.cpp:
7790        (KJS::Bindings::identifierFromNPIdentifier):
7791        * bindings/c/c_utility.h:
7792        * bindings/jni/jni_jsobject.cpp:
7793        (JavaJSObject::invoke):
7794        * bindings/npruntime.cpp:
7795        (getStringIdentifierMap):
7796        (getIntIdentifierMap):
7797        (_NPN_GetStringIdentifier):
7798        (_NPN_GetIntIdentifier):
7799        * bindings/runtime_root.cpp:
7800        (getReferencesByRootMap):
7801        (getReferencesSet):
7802        (KJS::Bindings::findReferenceSet):
7803        (KJS::Bindings::rootForImp):
7804        (KJS::Bindings::rootForInterpreter):
7805        (KJS::Bindings::addNativeReference):
7806        (KJS::Bindings::removeNativeReference):
7807        (RootObject::removeAllNativeReferences):
7808        * bindings/runtime_root.h:
7809
78102006-08-22  Anders Carlsson  <acarlsson@apple.com>
7811
7812        Reviewed by Geoff.
7813        
7814        Switch over the NPAPI and Java bindings to using HashMaps instead of dictionaries.
7815        
7816        * JavaScriptCore.xcodeproj/project.pbxproj:
7817        * bindings/c/c_class.cpp:
7818        (KJS::Bindings::CClass::CClass):
7819        (KJS::Bindings::CClass::~CClass):
7820        (KJS::Bindings::CClass::classForIsA):
7821        (KJS::Bindings::CClass::methodsNamed):
7822        (KJS::Bindings::CClass::fieldNamed):
7823        * bindings/c/c_class.h:
7824        * bindings/jni/jni_class.cpp:
7825        (JavaClass::JavaClass):
7826        (JavaClass::~JavaClass):
7827        (JavaClass::methodsNamed):
7828        (JavaClass::fieldNamed):
7829        * bindings/jni/jni_class.h:
7830        * bindings/objc/objc_class.h:
7831        * bindings/objc/objc_class.mm:
7832        (KJS::Bindings::deleteMethod):
7833        (KJS::Bindings::deleteField):
7834        (KJS::Bindings::):
7835        (KJS::Bindings::ObjcClass::methodsNamed):
7836        (KJS::Bindings::ObjcClass::fieldNamed):
7837        * bindings/runtime.cpp:
7838        * bindings/runtime.h:
7839        * bindings/runtime_object.cpp:
7840        (RuntimeObjectImp::fieldGetter):
7841        (RuntimeObjectImp::getOwnPropertySlot):
7842        (RuntimeObjectImp::put):
7843        (RuntimeObjectImp::canPut):
7844
78452006-08-21  Vladimir Olexa  <vladimir.olexa@gmail.com>
7846
7847        Reviewed by Darin.
7848
7849        http://bugs.webkit.org/show_bug.cgi?id=6252
7850        JavaScript 1.6 Array.lastIndexOf
7851
7852        Test: fast/js/array-lastIndexOf.html
7853
7854        * kjs/array_object.cpp:
7855        (ArrayProtoFunc::callAsFunction): Added a LastIndexOf case.
7856        * kjs/array_object.h:
7857        (KJS::ArrayProtoFunc::): Added LastIndexOf to enum.
7858        * tests/mozilla/expected.html: Two more tests now pass.
7859
78602006-08-20  Nikolas Zimmermann  <zimmermann@kde.org>
7861
7862        Reviewed by Maciej. Landed by rwlbuis.
7863
7864        Fixes parts of: http://bugs.webkit.org/show_bug.cgi?id=10463
7865        WebKit should have Qt platform support
7866
7867        Removing obsolete QConstString/QString constructors in kjs code.
7868
7869        * kjs/identifier.h:
7870        * kjs/ustring.h:
7871
78722006-08-17  Nikolas Zimmermann  <zimmermann@kde.org>
7873
7874        Reviewed by Maciej. Landed by rwlbuis.
7875
7876        Fixes: http://bugs.webkit.org/show_bug.cgi?id=10463
7877        WTF Changes needed for Qt platform code.
7878
7879        * wtf/Platform.h:
7880        * wtf/unicode/UnicodeDecomposition.h: Added.
7881        (WTF::Unicode::):
7882        * wtf/unicode/UnicodeDirection.h: Added.
7883        (WTF::Unicode::):
7884        * wtf/unicode/qt4/UnicodeQt4.cpp: Added.
7885        (WTF::Unicode::direction):
7886        (WTF::Unicode::category):
7887        (WTF::Unicode::decomposition):
7888        * wtf/unicode/qt4/UnicodeQt4.h:
7889        (WTF::Unicode::toLower):
7890        (WTF::Unicode::toUpper):
7891        (WTF::Unicode::isPrintableChar):
7892        (WTF::Unicode::isSpace):
7893        (WTF::Unicode::isPunct):
7894        (WTF::Unicode::isDigit):
7895        (WTF::Unicode::mirroredChar):
7896        (WTF::Unicode::compare):
7897
78982006-08-17  Nikolas Zimmermann  <zimmermann@kde.org>
7899
7900        Reviewed by Eric. Landed by rwlbuis.
7901
7902        Fixes: http://bugs.webkit.org/show_bug.cgi?id=10464
7903        Offer a cmake build system for Qt platform.
7904
7905        * CMakeLists.txt: Added.
7906        * pcre/CMakeLists.txt: Added.
7907
79082006-08-17  Anders Carlsson  <acarlsson@apple.com>
7909
7910        Reviewed by Maciej.
7911
7912        * bindings/npapi.h:
7913        Fix ifdef.
7914
79152006-08-15  Steve Falkenburg  <sfalken@apple.com>
7916
7917        Reviewed by mjs.
7918        
7919        Build fix.
7920
7921        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
7922        * wtf/Assertions.h:
7923
79242006-08-15  Mark Rowe  <opendarwin.org@bdash.net.nz>
7925
7926        Reviewed by Tim H.
7927
7928        Build fix:  DWARF and -gfull are incompatible with symbol separation.
7929
7930        * JavaScriptCore.xcodeproj/project.pbxproj:
7931
79322006-08-15  Mark Rowe  <opendarwin.org@bdash.net.nz>
7933
7934        Reviewed by Tim H.
7935
7936        http://bugs.webkit.org/show_bug.cgi?id=10394
7937        Bug 10394: WebKit Release and Production configurations should enable dead code stripping
7938
7939        * JavaScriptCore.xcodeproj/project.pbxproj:
7940
79412006-08-15  Mark Rowe  <opendarwin.org@bdash.net.nz>
7942
7943        Reviewed by Tim H.
7944
7945        http://bugs.webkit.org/show_bug.cgi?id=10384
7946        Bug 10384: Switch to DWARF for Release configuration
7947
7948        * JavaScriptCore.xcodeproj/project.pbxproj:
7949
79502006-08-13  Maks Orlovich  <maksim@kde.org>
7951
7952        Reviewed (and tweaked a little) by Maciej.
7953        
7954        - shrank the size of JSObject by 8 bytes and made the corresponding reduction to the cell size, resulting
7955        in a 1.2% speed improvement on JS iBench (and probably overall memory savings).
7956
7957        This was done by removing _scope and _internalValue data members
7958        from JSObject and moving them only to the subclasses that actually
7959        make use of them.
7960        
7961        * kjs/object.cpp: 
7962        (KJS::JSObject::mark): No need to mark scope or internal value here.
7963        * kjs/object.h:
7964        (KJS::JSObject::JSObject): Don't initialize them.
7965        * kjs/JSWrapperObject.cpp: Added. New base class for object types that
7966        wrap primitive values (Number, String, Boolean, Date).
7967        (KJS::JSWrapperObject::mark): 
7968        * kjs/JSWrapperObject.h: Added.
7969        (KJS::JSWrapperObject::JSWrapperObject):
7970        (KJS::JSWrapperObject::internalValue):
7971        (KJS::JSWrapperObject::setInternalValue):
7972        * kjs/array_object.cpp:
7973        (ArrayPrototype::ArrayPrototype): Don't set useless internal value.
7974        * kjs/bool_object.cpp:
7975        (BooleanInstance::BooleanInstance): Inherit from JSWrapperObject.
7976        (BooleanProtoFunc::callAsFunction): Fixed to account for fact that not all
7977        JSObjects have an internal value.
7978        (BooleanObjectImp::construct): ditto.
7979        * kjs/bool_object.h:
7980        * kjs/collector.cpp: Lowered cell size to 48.
7981        (KJS::Collector::allocate): meaningless whitespace change
7982        * kjs/date_object.cpp:
7983        (KJS::DateInstance::DateInstance): Inherit from JSWrapperObject.
7984        (KJS::DateProtoFunc::callAsFunction): adjusted for move of internalValue
7985        (KJS::DateObjectImp::construct): ditto
7986        * kjs/date_object.h:
7987        * kjs/error_object.cpp:
7988        (ErrorPrototype::ErrorPrototype): don't set internal value
7989        * kjs/function.cpp: move _scope and related handling here
7990        (KJS::FunctionImp::mark): mark scope
7991        * kjs/function.h:
7992        (KJS::FunctionImp::scope): moved here from JSObject
7993        (KJS::FunctionImp::setScope): ditto
7994        * kjs/number_object.cpp:
7995        (NumberInstance::NumberInstance): inherit from JSWrapperObject
7996        (NumberProtoFunc::callAsFunction): adjusted
7997        (NumberObjectImp::construct): adjusted
7998        * kjs/number_object.h: shring RegExp-related objects a little
7999        * kjs/regexp_object.cpp:
8000        (RegExpPrototype::RegExpPrototype): Adjust for size tweaks
8001        (RegExpObjectImp::RegExpObjectImp): ditto
8002        * kjs/regexp_object.h:
8003        * kjs/string_object.cpp:
8004        (StringInstance::StringInstance): inherit from JSWrapperObject
8005        (StringProtoFunc::callAsFunction): adjusted
8006        * kjs/string_object.h:
8007        * JavaScriptCore.exp: Exported new methods as needed.
8008        * JavaScriptCore.xcodeproj/project.pbxproj: Added new files to build.
8009
80102006-08-04  Brady Eidson  <beidson@apple.com>
8011
8012        Reviewed by Geoff's rubber stamp
8013
8014        Fix a build break on Intel hardware causes by adapting stricter
8015        compiler warnings (-Wshorten-64-to-32)
8016
8017        * API/testapi.c:
8018        (assertEqualsAsNumber): manually cast some doubles to floats
8019        (main): ditto
8020
80212006-08-04  Sam Weinig  <sam.weinig@gmail.com>
8022
8023        Reviewed by Darin.
8024
8025        - patch for http://bugs.webkit.org/show_bug.cgi?id=10192
8026          Make WebCore (and friends) compile with -Wshorten-64-to-32
8027
8028          * Adds -Wshorten-64-to-32 flag to Xcode project.
8029          * Adds explicit casts where OK.
8030
8031        * API/JSNodeList.c:
8032        (JSNodeList_item):
8033        (JSNodeList_getProperty):
8034        * JavaScriptCore.xcodeproj/project.pbxproj:
8035
80362006-08-04  Adam Roben  <aroben@apple.com>
8037
8038        Reviewed by Anders.
8039
8040        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Convert
8041        spaces to tabs
8042
80432006-08-03  Sam Weinig  <sam.weinig@gmail.com>
8044
8045        Reviewed by Darin.
8046
8047        - patch for http://bugs.webkit.org/show_bug.cgi?id=10176
8048          Make WebCore compile with -Wundef
8049
8050          * Adds -Wundef flag to Xcode project
8051          * Converts #ifs to #ifdef and #ifndefs where needed.
8052          * Added #define YYMAXDEPTH 10000 in kjs/grammar.y
8053            to fix a warning from within Bison.
8054
8055        * JavaScriptCore.xcodeproj/project.pbxproj:
8056        * bindings/jni/jni_jsobject.cpp:
8057        (JavaJSObject::getSlot):
8058        (JavaJSObject::setSlot):
8059        * bindings/npapi.h:
8060        * bindings/objc/objc_class.mm:
8061        (KJS::Bindings::ObjcClass::methodsNamed):
8062        (KJS::Bindings::ObjcClass::fieldNamed):
8063        * bindings/objc/objc_instance.mm:
8064        (ObjcInstance::invokeMethod):
8065        * bindings/objc/objc_runtime.mm:
8066        (ObjcMethod::getMethodSignature):
8067        (ObjcField::name):
8068        (ObjcField::type):
8069        * kjs/grammar.y:
8070        * kjs/identifier.h:
8071
80722006-08-03  Anders Carlsson  <acarlsson@apple.com>
8073
8074        Reviewed by John Sullivan.
8075
8076       * wtf/HashSet.h:
8077        (WTF::::operator):
8078        Return *this in operator=
8079
80802006-08-03  Adam Roben  <aroben@apple.com>
8081
8082        Reviewed by Anders.
8083
8084        - Fixed Windows build
8085
8086        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
8087        * wtf/MathExtras.h: Implement inline versions of these functions
8088        (nextafter):
8089        (nextafterf):
8090
80912006-08-02  Adam Roben  <aroben@apple.com>
8092
8093        Reviewed by Darin.
8094
8095        - Fixed build
8096
8097        * kjs/date_object.cpp:
8098        (KJS::formatTime):
8099
81002006-07-29  Darin Adler  <darin@apple.com>
8101
8102        - Removed tabs from these source files that still had them.
8103          We don't use them; that way source files look fine in editors
8104          that have tabs set to 8 spaces or to 4 spaces.
8105        - Removed allow-tabs Subversion property from the files too.
8106
8107        * bindings/NP_jsobject.cpp:
8108        * bindings/c/c_utility.cpp:
8109        * bindings/jni/jni_runtime.cpp:
8110        * bindings/jni/jni_utility.cpp:
8111        * bindings/objc/objc_utility.mm:
8112        * bindings/runtime.cpp:
8113        * bindings/runtime_method.cpp:
8114        * bindings/testbindings.cpp:
8115        * bindings/testbindings.mm:
8116        * kjs/date_object.cpp:
8117        * kjs/function.cpp:
8118        * kjs/list.cpp:
8119        * kjs/nodes.cpp:
8120        * kjs/nodes.h:
8121        * kjs/string_object.cpp:
8122        * kjs/ustring.cpp:
8123
81242006-07-29  Darin Adler  <darin@apple.com>
8125
8126        * tests/mozilla/expected.html: Update test results now that regress-185165.js
8127        is succeeding. I suspect Anders fix for bug 4620655 is the reason.
8128
81292006-07-29  Sam Weinig  <sam.weinig@gmail.com>
8130
8131        Reviewed by Darin.
8132
8133        - patch for http://bugs.webkit.org/show_bug.cgi?id=10080
8134          Adopt pedantic changes from the Unity project to improve 
8135          cross-compiler compatibility
8136
8137          Changes include:
8138          * Removing trailing semicolon from namespace braces.
8139          * Removing trailing comma from last enum declaration.
8140          * Updating to match style guidelines.
8141          * Adding missing newline to the end of the file.
8142          * Turning on gcc warning for missing newline at the end of a source file
8143            (GCC_WARN_ABOUT_MISSING_NEWLINE in Xcode, -Wnewline in gcc).
8144          * Alphabetical sorting of Xcode source list files. 
8145          * Replace use of non-portable variable-size array with Vector.
8146          * Use C-style comments instead of C++ comments in files that might
8147            be included by either C or C++ files.
8148
8149        * API/JSCallbackConstructor.cpp:
8150        (KJS::JSCallbackConstructor::construct):
8151        * API/JSCallbackFunction.cpp:
8152        (KJS::JSCallbackFunction::callAsFunction):
8153        * API/JSCallbackObject.cpp:
8154        (KJS::JSCallbackObject::construct):
8155        (KJS::JSCallbackObject::callAsFunction):
8156        * JavaScriptCore.xcodeproj/project.pbxproj:
8157        * JavaScriptCorePrefix.h:
8158        * bindings/jni/jni_class.cpp:
8159        (JavaClass::fieldNamed):
8160        * bindings/jni/jni_class.h:
8161        * bindings/jni/jni_instance.cpp:
8162        (JavaInstance::JavaInstance):
8163        (JavaInstance::valueOf):
8164        * bindings/jni/jni_objc.mm:
8165        (KJS::Bindings::dispatchJNICall):
8166        * bindings/jni/jni_runtime.cpp:
8167        (JavaParameter::JavaParameter):
8168        (JavaArray::JavaArray):
8169        * bindings/jni/jni_runtime.h:
8170        * bindings/jni/jni_utility.h:
8171        * bindings/objc/objc_instance.h:
8172        * bindings/runtime_array.h:
8173        * kjs/collector.h:
8174        * kjs/config.h:
8175        * kjs/ustring.cpp:
8176        * wtf/Platform.h:
8177
81782006-07-29  Mike Emmel  <mike.emmel@gmail.com>
8179
8180        Reviewed by Darin.
8181
8182        - fixes for Linux build
8183
8184        * JavaScriptCoreSources.bkl: Added new files to build, kjs/PropertyNameArray.cpp
8185        and kjs/testkjs.cpp, and removed old files.
8186
81872006-07-24  Dan Waylonis  <waylonis@google.com>
8188
8189        Reviewed and tweaked a bit by Darin.
8190
8191        - fix http://bugs.webkit.org/show_bug.cgi?id=9902
8192          jsNull and NSNull not properly converted between JS and ObjC
8193
8194        * bindings/objc/objc_utility.mm: (KJS::Bindings::convertObjcValueToValue):
8195        Added case for converting NSNull to jsNull.
8196
81972006-07-24  Rob Buis  <buis@kde.org>
8198
8199        Reviewed by Darin.
8200
8201        http://bugs.webkit.org/show_bug.cgi?id=4258
8202        Date().toString() only includes GMT offset, not timezone string
8203
8204        Use the info in tm_zone to append timezone abbreviation
8205        to Date().toString().
8206
8207        * kjs/date_object.cpp:
8208        (KJS::formatTime):
8209
82102006-07-24  Rob Buis  <buis@kde.org>
8211
8212        Reviewed by Darin.
8213
8214        http://bugs.webkit.org/show_bug.cgi?id=5257
8215        setYear() does not match FireFox/IE behavior
8216
8217        Make sure the right values end up in tm_year.
8218
8219        * kjs/date_object.cpp:
8220        (KJS::formatTime):
8221
82222006-07-23  Mark Rowe  <opendarwin.org@bdash.net.nz>
8223
8224        Reviewed by Maciej.
8225
8226        Bug 9686: [Drosera] Need the ability to break into Drosera on Javascript exceptions
8227        http://bugs.webkit.org/show_bug.cgi?id=9686
8228
8229        JavaScriptCore portion of the fix.
8230
8231        * JavaScriptCore.exp: Update symbol for change in argument type.
8232        * kjs/debugger.cpp:
8233        (Debugger::detach): Clear map of recent exceptions.
8234        (Debugger::hasHandledException): Track the most recent exception
8235        thrown by an interpreter.
8236        (Debugger::exception): Change exception argument to a JSValue.
8237        * kjs/debugger.h:
8238        * kjs/nodes.cpp:
8239        (Node::debugExceptionIfNeeded): Notify the debugger of an exception
8240        if it hasn't seen it before.
8241        (ThrowNode::execute): Notify the debugger that an exception is being thrown.
8242        * kjs/nodes.h:
8243
8244    2006-07-23  Geoffrey Garen  <ggaren@apple.com>
8245
8246        Patch by Eric Albert, reviewed by Darin and me.
8247        
8248        - Fixed <rdar://problem/4645931> JavaScriptCore stack-scanning code 
8249        crashes (Collector::markStackObjectsConservatively)
8250        
8251        * bindings/jni/jni_jsobject.cpp: On 64bit systems, jint is a long, not an
8252        int.
8253        (JavaJSObject::getSlot):
8254        (JavaJSObject::setSlot):
8255        * kjs/collector.cpp:
8256        (KJS::Collector::markCurrentThreadConservatively): Use a pointer instead of
8257        an int as 'dummy,' because on LP64 systems, an int is not pointer-aligned,
8258        and we want to scan the stack for pointers.
8259        * JavaScriptCore.xcodeproj/project.pbxproj: After a tense cease-fire, the 
8260        XCode war has started up again!
8261
8262=== Safari-521.20 ===
8263
82642006-07-21  Geoffrey Garen  <ggaren@apple.com>
8265
8266        Reviewed by Darin.
8267
8268        <rdar://problem/4507265> REGRESSION: overlays don't work on HousingMaps.com (Google Maps-based site)
8269
8270        - Added support for strings that masquerade as undefined. Currently used
8271        by WebCore to implement undetectable style.filter.
8272        
8273        The name is a little long, but it's only used in one line of code, so I
8274        thought clarity should win over brevity.
8275
8276        * JavaScriptCore.exp:
8277        * JavaScriptCore.xcodeproj/project.pbxproj:
8278        * kjs/object.h:
8279        * kjs/string_object.h:
8280        (KJS::StringInstanceThatMasqueradesAsUndefined::StringInstanceThatMasqueradesAsUndefined):
8281        (KJS::StringInstanceThatMasqueradesAsUndefined::masqueradeAsUndefined):
8282        (KJS::StringInstanceThatMasqueradesAsUndefined::toBoolean):
8283
8284=== Safari-521.19 ===
8285
82862006-07-20  Steve Falkenburg  <sfalken@apple.com>
8287
8288        Fix the build
8289
8290        * kjs/function.cpp:
8291        (KJS::escapeStringForPrettyPrinting):
8292
82932006-07-19  Anders Carlsson  <acarlsson@apple.com>
8294
8295        Reviewed by Darin.
8296
8297        <rdar://problem/4620655> REGRESSION(10.4.7-10.5): preview button for a blogger.com post doesn't work
8298        
8299        * kjs/nodes2string.cpp:
8300        (StringNode::streamTo):
8301        Return the escaped string.
8302        
8303        (RegExpNode::streamTo):
8304        Use the correct syntax.
8305        
8306        * kjs/function.cpp:
8307        (KJS::escapeStringForPrettyPrinting):
8308        * kjs/function.h:
8309        Add escape function which escapes a string for pretty-printing so it can be parsed again.
8310        
8311        * wtf/unicode/icu/UnicodeIcu.h:
8312        (WTF::Unicode::isPrintableChar):
8313        New function.
8314
83152006-07-18  Maciej Stachowiak  <mjs@apple.com>
8316
8317        Reviewed by Adele Peterson.
8318        
8319        <rdar://problem/4589530> REGRESSION: null character in JS string causes parse error (works in Tiger and in other browsers)
8320
8321        * kjs/lexer.cpp:
8322        (Lexer::shift):
8323        (Lexer::lex):
8324        (Lexer::record16):
8325        (Lexer::scanRegExp):
8326        * kjs/lexer.h:
8327
83282006-07-18  Tim Omernick  <timo@apple.com>
8329
8330        Reviewed by Tim Hatcher.
8331
8332        Removed a misleading comment; we recently added support for the NPNVPluginElementNPObject
8333        variable.
8334
8335        * bindings/npapi.h:
8336
8337=== Safari-521.18 ===
8338
83392006-07-18  Timothy Hatcher  <timothy@apple.com>
8340
8341        Made the following headers public:
8342
8343        * JavaScriptCore.h
8344        * JSBase.h
8345        * JSContextRef.h
8346        * JSObjectRef.h
8347        * JSStringRef.h
8348        * JSValueRef.h
8349
8350        * JavaScriptCore.xcodeproj/project.pbxproj:
8351
83522006-07-17  Geoffrey Garen  <ggaren@apple.com>
8353
8354        Reviewed by Maciej.
8355        
8356        - Added automatic prototype creation for classes.
8357        
8358        A class stores a weak reference to a prototype, which is cleared when
8359        the prototype is garbage collected, to avoid a reference cycle.
8360        
8361        We now have an attributes field in JSClassDefinition, that currently is
8362        used only to override automatic prototype creation when you want to manage your
8363        own prototypes, but can be extended in the future for other nefarious purposes.
8364        
8365        Similarly, we have JSObjectMake and JSObjectMakeWithPrototype, the latter
8366        allowing you to manage your own prototypes.
8367        
8368        JSObjectMakeConstructor is more interesting now, able to make a constructor
8369        on your behalf if you just give it a class.
8370        
8371        - Removed bogus old code from minidom.js.
8372        
8373        - Tweaked the headerdocs.
8374        
8375        - Added more GC testing, which caught some leaks, and tested more funny 
8376        edge cases in lookup, which caught a lookup bug. Removed some testing 
8377        we used to do with MyObject because it was redundant with the new, cool 
8378        stuff.
8379        
8380        While fixing the lookup bug I retracted this change:
8381        
8382            "If a static setProperty callback returns 'false', to indicate that the
8383            property was not set, we no longer forward the set request up the class
8384            chain, because that's almost certainly not what the programmer expected."
8385
8386        Returning false when setting a static property is a little silly, but you can see
8387        it being useful when shadowing a base class's static properties, and, regardless
8388        of usefullness, this is the defined behavior of the setProperty callback.
8389        
8390        - Plus a little ASCII art, for the kids.
8391
83922006-07-17  Timothy Hatcher  <timothy@apple.com>
8393
8394        Reviewed by Maciej.
8395
8396        <rdar://problem/4634874> WebScriptObject and WebUndefined are no longer defined by WebKit
8397
8398        Moves WebScriptObject and WebUndefined up to WebCore.
8399        This change does create an upwards-dependancy on WebScriptObject existing
8400        in the loaded process, but this code path in JavaScriptCore does not get used
8401        unless it is through WebKit/WebCore. Moving all of the binding code out of
8402        JavaScriptCore might make sense in the future.
8403
8404        * JavaScriptCore.exp:
8405        * JavaScriptCore.xcodeproj/project.pbxproj:
8406        * bindings/objc/WebScriptObject.h: Replaced.
8407        * bindings/objc/WebScriptObject.mm: Removed.
8408        * bindings/objc/WebScriptObjectPrivate.h: Removed.
8409        * bindings/objc/objc_class.h:
8410        * bindings/objc/objc_instance.h:
8411        * bindings/objc/objc_instance.mm:
8412        (ObjcInstance::~ObjcInstance):
8413        * bindings/objc/objc_runtime.h:
8414        * bindings/objc/objc_runtime.mm:
8415        (convertValueToObjcObject):
8416        * bindings/objc/objc_utility.mm:
8417        (KJS::Bindings::convertValueToObjcValue):
8418        (KJS::Bindings::convertObjcValueToValue):
8419        (KJS::Bindings::createObjcInstanceForValue):
8420
84212006-07-17  Darin Adler  <darin@apple.com>
8422
8423        * API/JSBase.h: Fix comment formatting where things used to be lined up but
8424        are now ragged. Got rid of spaces that attempted to line things up.
8425        * API/JSObjectRef.h: Ditto. Also add missing periods for a couple of comments.
8426
84272006-07-17  Geoffrey Garen  <ggaren@apple.com>
8428
8429        Reviewed by Maciej.
8430        
8431        - Removed the exception parameter from the initialize callback and, by extension,
8432        JSObjectMake. We have never had a need for exceptions when iniitializing,
8433        so the parameter seemed likely to "get in the way." 
8434        
8435        Also, an exception in JavaScript is thrown in response to input -- 
8436        "invalid URL", "index not a number", etc., so it's the job of the 
8437        constructor function, not the initialize method, to throw.
8438        
8439        If initialize *really* wants to throw, it can communicate the throw to
8440        the constructor through the constructed object's private data (e.g., set
8441        it to NULL, signaling to the consntructor that initialization failed.)
8442        
8443        - Added JSObjectMakeWithData, which enables a constructor to set private
8444        data on an object *before* it has been initialized. That way, the initialize
8445        methods can properly operate on the data. 
8446
8447        * API/JSNode.c: Moved ref into the initialize method, for better encapsulation,
8448        now that it's possible.
8449        * API/JSNodeList.c: ditto
8450        * API/minidom.c:
8451        (main): Do more aggressive garbage collection to test ref/deref and 
8452        initialize/finalize.
8453        * API/minidom.js: store childNodes in a temporary so it doesn't get re-created
8454        like a thousand times. This makes debugging ref/deref easier
8455
84562006-07-17  Geoffrey Garen  <ggaren@apple.com>
8457
8458        Reviewed by Maciej.
8459        
8460        - Changed the initialize callback to run from least derived class (parent
8461        class) to most derived class. This enables C++ style initialization,
8462        and derived class overriding of member data.
8463        
8464        - Added excpetion propopgation to JSObjectMake, to support initialize
8465        exceptions, and generally round out our policy of making function
8466        signatures as long as possible.
8467
8468        * API/JSCallbackObject.h: Use ExecState instead of ContextRef, cuz we're
8469        in C++ land now.
8470
84712006-07-17  Geoffrey Garen  <ggaren@apple.com>
8472
8473        Reviewed by Maciej.
8474        
8475        - Changed JSObjectMakeConstructor to JSObjectMakeConstructorWithCallback,
8476        to match JSObjectMakeFunctionWithCallback.
8477        
8478        - Added prototype parameter, so the generated constructor
8479        automatically works with hasInstance / instanceof
8480        
8481        - Moved hasInstance implementation from InternalFunctionImp to JSObject
8482        so that subclasses can inherit it without inheriting function-related baggage.
8483        More refactoring here would be good, but this seems like a good short-term
8484        solution.
8485
8486        (KJS::JSCallbackFunction::implementsHasInstance): override and return false,
8487        because callback functions aren't constructors.
8488
84892006-07-17  Maciej Stachowiak  <mjs@apple.com>
8490
8491        Reviewed by Geoff.
8492        
8493        - add a JSContextRef parameter to all JSValueRef, JSObjectRef, and JSContextRef operations;
8494        except JSObject{Get,Set}PrivateData which can be assumed to be simple pure accessors.
8495        
8496        Also renamed the parameter "context" to "ctx" because it makes the code read better with this pervasive
8497        but usually uninteresting parameter.
8498
8499        * API/JSBase.cpp:
8500        (JSEvaluateScript):
8501        (JSCheckScriptSyntax):
8502        (JSGarbageCollect):
8503        * API/JSBase.h:
8504        * API/JSCallbackObject.cpp:
8505        (KJS::JSCallbackObject::JSCallbackObject):
8506        (KJS::JSCallbackObject::init):
8507        (KJS::JSCallbackObject::getOwnPropertySlot):
8508        (KJS::JSCallbackObject::put):
8509        (KJS::JSCallbackObject::deleteProperty):
8510        (KJS::JSCallbackObject::toNumber):
8511        (KJS::JSCallbackObject::toString):
8512        * API/JSContextRef.cpp:
8513        (JSGlobalContextCreate):
8514        (JSGlobalContextRetain):
8515        (JSGlobalContextRelease):
8516        (JSContextGetGlobalObject):
8517        * API/JSContextRef.h:
8518        * API/JSNode.c:
8519        (JSNodePrototype_appendChild):
8520        (JSNodePrototype_removeChild):
8521        (JSNodePrototype_replaceChild):
8522        (JSNode_getNodeType):
8523        (JSNode_getFirstChild):
8524        (JSNode_prototype):
8525        * API/JSNodeList.c:
8526        (JSNodeListPrototype_item):
8527        (JSNodeList_length):
8528        (JSNodeList_getProperty):
8529        (JSNodeList_prototype):
8530        * API/JSObjectRef.cpp:
8531        (JSObjectMake):
8532        (JSObjectMakeFunctionWithCallback):
8533        (JSObjectMakeConstructor):
8534        (JSObjectMakeFunction):
8535        (JSObjectGetPrototype):
8536        (JSObjectSetPrototype):
8537        (JSObjectHasProperty):
8538        (JSObjectGetProperty):
8539        (JSObjectSetProperty):
8540        (JSObjectGetPropertyAtIndex):
8541        (JSObjectSetPropertyAtIndex):
8542        (JSObjectDeleteProperty):
8543        (JSObjectIsFunction):
8544        (JSObjectCallAsFunction):
8545        (JSObjectIsConstructor):
8546        (JSObjectCallAsConstructor):
8547        (JSObjectCopyPropertyNames):
8548        * API/JSObjectRef.h:
8549        * API/JSStringRef.cpp:
8550        * API/JSValueRef.cpp:
8551        (JSValueGetType):
8552        (JSValueIsUndefined):
8553        (JSValueIsNull):
8554        (JSValueIsBoolean):
8555        (JSValueIsNumber):
8556        (JSValueIsString):
8557        (JSValueIsObject):
8558        (JSValueIsObjectOfClass):
8559        (JSValueIsEqual):
8560        (JSValueIsStrictEqual):
8561        (JSValueIsInstanceOfConstructor):
8562        (JSValueMakeUndefined):
8563        (JSValueMakeNull):
8564        (JSValueMakeBoolean):
8565        (JSValueMakeNumber):
8566        (JSValueMakeString):
8567        (JSValueToBoolean):
8568        (JSValueToNumber):
8569        (JSValueToStringCopy):
8570        (JSValueToObject):
8571        (JSValueProtect):
8572        (JSValueUnprotect):
8573        * API/JSValueRef.h:
8574        * API/minidom.c:
8575        (print):
8576        * API/testapi.c:
8577        (MyObject_getProperty):
8578        (MyObject_deleteProperty):
8579        (MyObject_callAsFunction):
8580        (MyObject_callAsConstructor):
8581        (MyObject_convertToType):
8582        (print_callAsFunction):
8583        (main):
8584
85852006-07-16  Geoffrey Garen  <ggaren@apple.com>
8586
8587        Approved by Maciej, RS by Beth.
8588        
8589        JSObjectMakeFunction -> JSObjectMakeFunctionWithCallback
8590        JSObjectMakeFunctionWithBody -> JSObjectMakeFunction
8591        
8592        because the latter is more common, and more fundamental, than the former.
8593
8594        * API/APICast.h:
8595        (toJS):
8596        * API/JSBase.h:
8597        * API/JSCallbackObject.cpp:
8598        (KJS::JSCallbackObject::getOwnPropertySlot):
8599        (KJS::JSCallbackObject::put):
8600        (KJS::JSCallbackObject::deleteProperty):
8601        (KJS::JSCallbackObject::getPropertyNames):
8602        (KJS::JSCallbackObject::staticValueGetter):
8603        (KJS::JSCallbackObject::staticFunctionGetter):
8604        * API/JSClassRef.cpp:
8605        (OpaqueJSClass::OpaqueJSClass):
8606        (OpaqueJSClass::~OpaqueJSClass):
8607        * API/JSClassRef.h:
8608        * API/JSObjectRef.cpp:
8609        (JSClassCreate):
8610        (JSObjectMakeFunctionWithCallback):
8611        (JSObjectMakeFunction):
8612        (OpaqueJSPropertyNameArray::OpaqueJSPropertyNameArray):
8613        (JSObjectCopyPropertyNames):
8614        * API/JSObjectRef.h:
8615        * API/minidom.c:
8616        (main):
8617        * API/testapi.c:
8618        (main):
8619        * ChangeLog:
8620        * JavaScriptCore.exp:
8621
86222006-07-16  Geoffrey Garen  <ggaren@apple.com>
8623
8624        Laughed at by Beth.
8625        
8626        Replace __JS with OpaqueJS because the former, while used by CF, is
8627        a prefix that's triply-reserved by the compiler. (_* is reserved in global 
8628        names, _[A-Z] is reserved in all names, and __ is reserved in all names 
8629        in C++.)
8630        
8631        Opaque is an alternative used by other Mac OS X framewokrs.
8632
8633        * API/APICast.h:
8634        (toJS):
8635        * API/JSBase.h:
8636        * API/JSCallbackObject.cpp:
8637        (KJS::JSCallbackObject::getOwnPropertySlot):
8638        (KJS::JSCallbackObject::put):
8639        (KJS::JSCallbackObject::deleteProperty):
8640        (KJS::JSCallbackObject::getPropertyNames):
8641        (KJS::JSCallbackObject::staticValueGetter):
8642        (KJS::JSCallbackObject::staticFunctionGetter):
8643        * API/JSClassRef.cpp:
8644        (OpaqueJSClass::OpaqueJSClass):
8645        (OpaqueJSClass::~OpaqueJSClass):
8646        * API/JSClassRef.h:
8647        * API/JSObjectRef.cpp:
8648        (JSClassCreate):
8649        (OpaqueJSPropertyNameArray::OpaqueJSPropertyNameArray):
8650        (JSObjectCopyPropertyNames):
8651
86522006-07-16  Darin Adler  <darin@apple.com>
8653
8654        - try to fix Windows build
8655
8656        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
8657        Added some recently added files, removed some recently removed.
8658
86592006-07-16  Geoffrey Garen  <ggaren@apple.com>
8660
8661        Reviewed by Maciej.
8662        
8663        - Change getProperty* to return undefined, rather than NULL, for missing
8664        properties, since that's what the spec says. Also added exception out
8665        parameters to the *Index functions, because they can call through to the
8666        regular functions, which can throw for custom objects.
8667
8668        * API/JSObjectRef.cpp:
8669        (JSObjectGetProperty):
8670        (JSObjectGetPropertyAtIndex):
8671        (JSObjectSetPropertyAtIndex):
8672        * API/JSObjectRef.h:
8673        * API/testapi.c:
8674        (main):
8675
86762006-07-16  Geoffrey Garen  <ggaren@apple.com>
8677
8678        Reviewed by Maciej.
8679        
8680        - Properly document and handle NULL callbacks for static properties. We
8681        throw an exception in any case other than a ReadOnly property with a NULL
8682        setProperty callback, because a NULL callback almost certainly indicates 
8683        a programming error. Also throw an exception if hasProperty returns true
8684        for a property that getProperty can't get.
8685        
8686        - If a static setProperty callback returns 'false', to indicate that the
8687        property was not set, we no longer forward the set request up the class
8688        chain, because that's almost certainly not what the programmer expected.
8689
8690        * API/JSCallbackObject.cpp:
8691        (KJS::JSCallbackObject::getOwnPropertySlot):
8692        (KJS::JSCallbackObject::put):
8693        (KJS::JSCallbackObject::staticValueGetter):
8694        (KJS::JSCallbackObject::staticFunctionGetter):
8695        (KJS::JSCallbackObject::callbackGetter):
8696        * API/JSObjectRef.h:
8697        * API/minidom.js:
8698        * API/testapi.c:
8699        (MyObject_hasProperty):
8700        * API/testapi.js:
8701
87022006-07-16  Geoffrey Garen  <ggaren@apple.com>
8703
8704        Reviewed by Maciej.
8705        
8706        - Added names to functions.
8707        
8708        - Removed GetPrivate/SetPrivate from callbackFunctions and callbackConstructors.
8709        The private data idiom is that a JS object stores its native implementation
8710        as private data. For functions and constructors, the native implementation is nothing
8711        more than the callback they already store, so supporting private data, too,
8712        confuses the idiom. If you *really* want, you can still create a custom 
8713        function with private data.
8714
8715        * API/JSCallbackConstructor.cpp:
8716        * API/JSCallbackConstructor.h:
8717        * API/JSCallbackFunction.cpp:
8718        (KJS::JSCallbackFunction::JSCallbackFunction):
8719        * API/JSCallbackFunction.h:
8720        * API/JSCallbackObject.cpp:
8721        (KJS::JSCallbackObject::staticFunctionGetter):
8722        * API/JSObjectRef.cpp:
8723        (JSObjectMakeFunction):
8724        (JSObjectMakeFunctionWithBody):
8725        (JSObjectGetPrivate):
8726        (JSObjectSetPrivate):
8727        * API/JSObjectRef.h:
8728        * API/minidom.c:
8729        (main):
8730        * API/testapi.c:
8731        (main):
8732
87332006-07-15  Maciej Stachowiak  <mjs@apple.com>
8734
8735        Reviewed by Darin.
8736        
8737        - switch property lists to be vector+set of Identifiers instead of list of References
8738        
8739        This has the following benefits:
8740        
8741        - no duplicates in property lists
8742        - simplifies API calls
8743        - probably more efficient, since linked list is gone
8744        - entirely removed Reference, ReferenceList and ProtectedReference types from the API
8745
8746        * kjs/PropertyNameArray.cpp: Added.
8747        (KJS::PropertyNameArray::add): Check set, if not already there, add to
8748        vector.
8749        * kjs/PropertyNameArray.h: Added.
8750        (KJS::PropertyNameArray::PropertyNameArray): Newly added type, combines
8751        a set and a vector to make a unique but ordered list of identifiers.
8752        (KJS::PropertyNameArray::begin): ditto
8753        (KJS::PropertyNameArray::end): ditto
8754        (KJS::PropertyNameArray::size): ditto
8755        (KJS::PropertyNameArray::operator[]): ditto
8756        * kjs/array_instance.h:
8757        * kjs/array_object.cpp:
8758        (ArrayInstance::getPropertyNames): renamed from getPropertyList, updated
8759        for PropertyNameArray
8760        (ArrayInstance::setLength): updated for PropertyNameArray
8761        (ArrayInstance::pushUndefinedObjectsToEnd): ditto
8762        * kjs/nodes.cpp:
8763        (ForInNode::execute): updated for PropertyNameArray
8764        * kjs/nodes.h:
8765        * kjs/object.cpp:
8766        (KJS::JSObject::getPropertyNames): renamed from getPropertyList, updated
8767        for PropertyNameArray
8768        * kjs/object.h:
8769        * kjs/property_map.cpp:
8770        (KJS::PropertyMap::getEnumerablePropertyNames): updated for PropertyNameArray
8771        (KJS::PropertyMap::getSparseArrayPropertyNames): ditto
8772        * kjs/property_map.h:
8773        * kjs/protected_reference.h: Removed.
8774        * kjs/reference.cpp: Removed.
8775        * kjs/reference.h: Removed.
8776        * kjs/reference_list.cpp: Removed.
8777        * kjs/reference_list.h: Removed.
8778        * kjs/scope_chain.cpp:
8779        (KJS::ScopeChain::print): Use PropertyNamesArray instead of ReferenceList.
8780        * kjs/string_object.cpp:
8781        (StringInstance::getPropertyNames): Updated for new approach.
8782        * kjs/string_object.h:
8783        * kjs/ustring.h:
8784        * API/APICast.h:
8785        (toJS): Added overload for PropertyNameAccumulatorRef / PropertyNameArray*
8786        (toRef): ditto
8787        * API/JSBase.h:
8788        * API/JSCallbackObject.cpp:
8789        (KJS::JSCallbackObject::getPropertyNames): Fixed for new API.
8790        * API/JSCallbackObject.h:
8791        * API/JSObjectRef.cpp:
8792        (__JSPropertyNameArray::__JSPropertyNameArray): Type used for a publicly vended
8793        JSPropertyNameArrayRef.
8794        (JSObjectCopyPropertyNames): New API call - renamed / refactored from 
8795        JSObjectCreatePropertyList
8796        (JSPropertyNameArrayRetain): new retain call for JSPropertyNameArray.
8797        (JSPropertyNameArrayRelease): new release call for - " -.
8798        (JSPropertyNameArrayGetCount): Instead of having to use a stateful enumerator you
8799        can now get the count and items in any order.
8800        (JSPropertyNameArrayGetNameAtIndex): See above.
8801        (JSPropertyNameAccumulatorAddName): What you add properties to is now an opaque 
8802        accumulator object.
8803        * API/JSObjectRef.h: Prototyped new functions, removed old ones
8804        * JavaScriptCore.exp: Updated exported symbols.
8805        * JavaScriptCore.xcodeproj/project.pbxproj: Added new files, removed old.
8806        * API/testapi.c:
8807        (MyObject_getPropertyNames): Renamed / fixed callback to fit new paradigm.
8808        (main): Updated for new API.
8809
88102006-07-15  Darin Adler  <darin@apple.com>
8811
8812        - oops, missed a few more arrays that had to be const
8813
8814        * API/JSNode.c:
8815        (JSNodePrototype_appendChild): Added const.
8816        (JSNodePrototype_removeChild): Ditto.
8817        (JSNodePrototype_replaceChild): Ditto.
8818        (JSNode_construct): Ditto.
8819        * API/JSNodeList.c:
8820        (JSNodeListPrototype_item): Ditto.
8821        * API/JSObjectRef.cpp:
8822        (JSObjectMakeFunctionWithBody): Ditto.
8823        (JSObjectCallAsFunction): Ditto.
8824        (JSObjectCallAsConstructor): Ditto.
8825        * API/minidom.c:
8826        (print): Ditto.
8827        * API/testapi.c:
8828        (MyObject_callAsFunction): Ditto.
8829        (MyObject_callAsConstructor): Ditto.
8830        (print_callAsFunction): Ditto.
8831        (myConstructor_callAsConstructor): Ditto.
8832
88332006-07-15  Darin Adler  <darin@apple.com>
8834
8835        Reviewed by Maciej.
8836
8837        * API/JSNode.h: Made an array parameter const.
8838        * API/JSObjectRef.h: Made array parameters const. Fixed a comment.
8839
88402006-07-15  Geoffrey Garen  <ggaren@apple.com>
8841
8842        Reviewed by Maciej.
8843        
8844        - JSObjectMakeFunctionWithBody includes a function name and named parameters now.
8845
8846        * API/JSObjectRef.cpp:
8847        (JSObjectMakeFunctionWithBody):
8848        * API/JSObjectRef.h:
8849        * API/testapi.c:
8850        (assertEqualsAsUTF8String): More informative failure reporting.
8851        (main): Test more function cases.
8852
88532006-07-15  Geoffrey Garen  <ggaren@apple.com>
8854
8855        Reviewed by Maciej.
8856
8857        - Moved the arguments passed to JSClassCreate into a single structure,
8858        called JSClassDefinition. This will enable easier structure 
8859        migration/versioning in the future, if necessary.
8860        
8861        - Added support for class names.
8862        
8863        - kJSClassDefinitionNull replaces kJSObjectCallbacksNone.
8864        
8865        - JSClass is becoming a fairly complex struct, so I migrated all of its
8866        implementation other than reference counting to the sruct.
8867        
8868        - Also moved JSClass* functions in the API to JSObjectRef.cpp, since they're
8869        declared in JSObjectRef.h
8870        
8871        - Also added some more informative explanation to the class structure doc.
8872        
88732006-07-15  Darin Adler  <darin@apple.com>
8874
8875        Reviewed by Geoff.
8876
8877        - fix http://bugs.webkit.org/show_bug.cgi?id=8395
8878          <rdar://problem/4613467>
8879          REGRESSION: RegEx seems broken for hex escaped non breaking space
8880
8881        Test: fast/js/regexp-extended-characters-more.html
8882
8883        * pcre/pcre_exec.c:
8884        (match): Got rid of utf16Length local variable to guarantee there's no
8885        extra stack usage in recursive calls. Fixed two places in the PCRE_UTF16
8886        code that were using the length variable, which is the UTF-8 length of
8887        a character in the pattern, to move in the UTF-16 subject string. Instead
8888        they hardcode lengths of 1 and 2 since the code already handles BMP
8889        characters and surrogate pairs separately. Also fixed some DPRINTF so
8890        I could compile with DEBUG on.
8891        (pcre_exec): Changed a place that was checking for multibyte characters
8892        in the subject string to use ISMIDCHAR. Instead it was using hardcoded
8893        logic that was right for UTF-8 but wrong for UTF-16.
8894
8895        * pcre/pcre_compile.c: (pcre_compile2): Fixed a DPRINTF so I could compile
8896        with DEBUG on.
8897
88982006-07-14  Geoffrey Garen  <ggaren@apple.com>
8899
8900        RS by Maciej.
8901        
8902        Global replace in the API of argc/argv with argumentCount/arguments.
8903
89042006-07-14  Geoffrey Garen  <ggaren@apple.com>
8905
8906        Reviewed by Maciej.
8907        
8908        - Finalized exception handling in the API.
8909        
8910        setProperty can throw because it throws for built-in arrays. getProperty
8911        and deleteProperty can throw because setProperty can throw and we want
8912        to be consistent, and also because they seem like "actions." callAsFunction,
8913        callAsConstructor, and hasInstance can throw, because they caan throw for
8914        all built-ins.
8915        
8916        toBoolean can't throw because it's defined that way in the spec.
8917        
8918        - Documented that toBoolean and toObject can't be overridden by custom 
8919        objects because they're defined that way in the spec.
8920
8921=== Safari-521.17 ===
8922
89232006-07-14  Geoffrey Garen  <ggaren@apple.com>
8924
8925        Reviewed by Maciej.
8926        
8927        - Implemented ref-counting of JSContexts by splitting into two datatypes:
8928        JSGlobalContext, which you can create/retain/release, and JSContext, which
8929        you can't.
8930        
8931        Internally, you retain a JSGlobalContext/ExecState by retaining its
8932        interpreter, which, in the case of a global ExecState, owns it.
8933        
8934        - Also made ~Interpreter() protected to catch places where Interpreter
8935        is manually deleted. (Can't make it private because some crazy fool
8936        decided it would be a good idea to subclass Interpreter in other frameworks.
8937        I pity da fool.)
8938
8939        * API/APICast.h: 
8940        (toJS): Added cast for new JSGlobalContext
8941        * API/JSStringRef.h: Changed vague "you must" language to more specific
8942        (but, ultimately, equally vague) "behavior is undefined if you don't" 
8943        language.
8944        (KJS::Interpreter::Interpreter): Factored more common initialization into
8945        init()
8946        * kjs/interpreter.h:
8947        (KJS::Interpreter::ref): new
8948        (KJS::Interpreter::deref): new
8949        (KJS::Interpreter::refCount): new
8950        * kjs/testkjs.cpp: 
8951        (doIt): Ref-count the interpreter.
8952
89532006-07-14  Maciej Stachowiak  <mjs@apple.com>
8954
8955        Reviewed by Geoff.
8956        
8957        - removed bool return value from JSObjectSetProperty, since it is inefficient and
8958        also doesn't work quite right
8959        - added JSObjectGetPropertyAtIndex and JSObjectSetPropertyAtIndex
8960
8961        * API/JSObjectRef.cpp:
8962        (JSObjectSetProperty): Removed return value and canPut stuff.
8963        (JSObjectGetPropertyAtIndex): Added.
8964        (JSObjectSetPropertyAtIndex): Added.
8965        * API/JSObjectRef.h: Prototyped and documented new functions.
8966
89672006-07-14  Geoffrey Garen  <ggaren@apple.com>
8968
8969        Reviewed by Beth.
8970        
8971        Moved JSCheckScriptSyntax, JSEvaluateScript, and JSGarbageCollect into
8972        JSBase.h/.cpp. They don't belong in the value-specific or context-specific 
8973        files because they're not part of the value or context implementations.
8974
8975        * API/JSBase.h:
8976        * API/JSContextRef.cpp:
8977        (JSContextGetGlobalObject):
8978        * API/JSContextRef.h:
8979        * API/JSValueRef.cpp:
8980        (JSValueUnprotect):
8981        * API/JSValueRef.h:
8982        * JavaScriptCore.xcodeproj/project.pbxproj:
8983
89842006-07-13  Timothy Hatcher  <timothy@apple.com>
8985
8986        Reviewed by Maciej.
8987
8988        Moved JavaScriptCore to be a public framework.
8989
8990        * JavaScriptCore.xcodeproj/project.pbxproj:
8991
89922006-07-13  Mark Rowe  <opendarwin.org@bdash.net.nz>
8993
8994        Reviewed by Geoffrey.
8995
8996        http://bugs.webkit.org/show_bug.cgi?id=9742
8997        Bug 9742: REGRESSION: WebKit hangs when loading <http://www.vtbook.com>
8998
8999        * kjs/value.h:
9000        (KJS::JSValue::getUInt32): Only types tagged as numeric can be converted to UInt32.
9001
90022006-07-13  Geoffrey Garen  <ggaren@apple.com>
9003
9004        Pleasing to Maciej.
9005        
9006        - Renamed JSEvaluate -> JSEvaluateScript, JSCheckSyntax -> JSCheckScriptSyntax
9007        - Added exception out parameters to JSValueTo* and JSValueIsEqual because
9008        they can throw
9009        - Removed JSObjectGetDescription because it's useless and vague, and 
9010        JSValueToString/JSValueIsObjectOfClass do a better job, anyway
9011        - Clarified comments about "IsFunction/Constructor" to indicate that they
9012        are true of all functions/constructors, not just those created by JSObjectMake*
9013
90142006-07-12  Geoffrey Garen  <ggaren@apple.com>
9015
9016        RS by Beth.
9017        
9018        Finished previously approved JSInternalString -> JSString conversion 
9019        by renaming the files.
9020
9021        * API/JSCallbackObject.cpp:
9022        * API/JSInternalStringRef.cpp: Removed.
9023        * API/JSInternalStringRef.h: Removed.
9024        * API/JSStringRef.cpp: Added.
9025        * API/JSStringRef.h: Added.
9026        * API/JavaScriptCore.h:
9027        * JavaScriptCore.xcodeproj/project.pbxproj:
9028
90292006-07-12  Geoffrey Garen  <ggaren@apple.com>
9030
9031        Reviewed by Maciej.
9032        
9033        - Removed context and exception parameters from JSObjectGetPropertyEnumerator,
9034        removing the spurious use of ExecState inside JavaScriptCore that made
9035        us think this was necessary in the first place.
9036
9037        (StringInstance::getPropertyList): Use getString instead of toString because
9038        we know we're dealing with a string -- we put it there in the first place.
9039        While we're at it, store the string's size instead of retrieving it each time 
9040        through the loop, to avoid the unnecessary killing of puppies.
9041        * kjs/string_object.h:
9042
90432006-07-12  Maciej Stachowiak  <mjs@apple.com>
9044
9045        Reviewed by Geoff.
9046        
9047        - add handling of hasInstance callback for API objects
9048
9049        * API/JSCallbackObject.cpp:
9050        (KJS::JSCallbackObject::implementsHasInstance): Check if callback is present.
9051        (KJS::JSCallbackObject::hasInstance): Invoke appropriate callback.
9052        * API/JSCallbackObject.h:
9053        * API/JSClassRef.cpp:
9054        * API/JSObjectRef.h:
9055        * API/testapi.c:
9056        (MyObject_hasInstance): Test case; should match what construct would do.
9057        * API/testapi.js:
9058
90592006-07-11  Geoffrey Garen  <ggaren@apple.com>
9060
9061        Reviewed by Maciej.
9062        
9063        - Implemented a vast number of renames and comment clarifications 
9064        suggested during API review.
9065        
9066        JSInternalString -> JSString
9067        JS*Make -> JSValueMake*, JSObjectMake*
9068        JSTypeCode -> JSType
9069        JSValueIsInstanceOf -> JSValueIsInstanceOfConstructor (reads strangely well in client code)
9070        JSGC*Protect -> JSValue*Protect
9071        JS*Callback -> JSObject*Callback
9072        JSGetPropertyListCallback -> JSObjectAddPropertiesToListCallback
9073        JSPropertyEnumeratorGetNext -> JSPropertyEnumeratorGetNextName
9074        JSString* -> 
9075            JSStringCreateWithUTF8CString, JSStringGetUTF8CString,
9076            JSStringGetMaximumUTF8CStringSize JSStringIsEqualToUTF8CString, 
9077            JSStringCreateWithCFString, JSStringCopyCFString, JSStringCreateWithCharacters.
9078        
9079        - Changed functions taking a JSValue out arg and returning a bool indicating
9080        whether it was set to simply return a JSValue or NULL.
9081        
9082        - Removed JSStringGetCharacters because it's more documentation than code,
9083        and it's just a glorified memcpy built on existing API functionality.
9084        
9085        - Moved standard library includes into the headers that actually require them.
9086        
9087        - Standardized use of the phrase "Create Rule."
9088        
9089        - Removed JSLock from make functions that don't allocate.
9090        
9091        - Added exception handling to JSValueToBoolean, since we now allow
9092        callback objects to throw exceptions upon converting to boolean.
9093        
9094        - Renamed JSGCCollect to JSGarbageCollect.
9095
90962006-07-10  Geoffrey Garen  <ggaren@apple.com>
9097
9098        Reviewed by Darin.
9099        
9100        - Changed public header includes to the <JavaScriptCore/ style.
9101        - Changed instances of 'buffer' to 'string' since we decided on
9102        JSInternalString instead of JSStringBuffer.
9103
9104        * API/JSContextRef.h:
9105        * API/JSInternalStringRef.cpp:
9106        (JSStringMake):
9107        (JSInternalStringRetain):
9108        (JSInternalStringRelease):
9109        (JSValueCopyStringValue):
9110        (JSInternalStringGetLength):
9111        (JSInternalStringGetCharactersPtr):
9112        (JSInternalStringGetCharacters):
9113        (JSInternalStringGetMaxLengthUTF8):
9114        (JSInternalStringGetCharactersUTF8):
9115        (CFStringCreateWithJSInternalString):
9116        * API/JSInternalStringRef.h:
9117        * API/JSNode.c:
9118        (JSNodePrototype_appendChild):
9119        (JSNode_getNodeType):
9120        * API/JSObjectRef.cpp:
9121        (JSObjectCallAsConstructor):
9122        * API/JSValueRef.h:
9123        * API/JavaScriptCore.h:
9124        * API/minidom.c:
9125        (main):
9126        (print):
9127        * API/testapi.c:
9128        (MyObject_getPropertyList):
9129        (myConstructor_callAsConstructor):
9130        (main): I noticed that we were prematurely releasing some string buffers,
9131        so I moved their release calls to the end of main(). I got rid of 'Buf' in *Buf
9132        (sometimes changing to 'IString', when necessary to differentiate a variable) 
9133        to match the buffer->string change.
9134
9135=== Safari-521.16 ===
9136
91372006-07-10  Darin Adler  <darin@apple.com>
9138
9139        * kjs/value.cpp: (KJS::JSValue::toInt32Inline): Added inline keyword one more place.
9140        Just in case.
9141
91422006-07-10  Darin Adler  <darin@apple.com>
9143
9144        - fix the release build
9145
9146        * kjs/value.h:
9147        * kjs/value.cpp:
9148        (KJS::JSValue::toInt32Inline): Move the code here to an inline.
9149        (KJS::JSValue::toInt32): Call the inline from both overloaded toInt32 functions.
9150
91512006-07-10  David Kilzer  <ddkilzer@kilzer.net>
9152
9153        Reviewed by Darin.
9154
9155        - fix http://bugs.webkit.org/show_bug.cgi?id=9179
9156          Implement select.options.add() method
9157
9158        * JavaScriptCore.exp: Added overloaded KJS::JSValue::toInt32() method.
9159        * JavaScriptCore.xcodeproj/project.pbxproj: Altered attributes metadata for
9160        kjs/value.h to make it available as a forwarded header.
9161        * kjs/lookup.h:
9162        (KJS::lookupPut): Extracted a lookupPut() method from the existing lookupPut() method.
9163        The new method returns a boolean value if no entry is found in the lookup table.
9164        * kjs/value.cpp:
9165        (KJS::JSValue::toInt32): Overloaded toInt32() method with boolean "Ok" argument.
9166        * kjs/value.h: Ditto.
9167
91682006-07-10  Geoffrey Garen  <ggaren@apple.com>
9169
9170        No review necessary. Removed bogus file I accidentally checked in before.
9171
9172        * API/JSInternalSringRef.h: Removed.
9173
91742006-07-10  Geoffrey Garen  <ggaren@apple.com>
9175
9176        Reviewed by Darin.
9177        
9178        Added exception out parameter to API object callbacks, removed semi-bogus
9179        JSContext(.*)Exception functions.
9180        
9181        To make these calls syntactically simple, I added an exceptionSlot()
9182        method to the ExecState class, which provides a JSValue** slot in which to 
9183        store a JSValue* exception.
9184
9185        * API/APICast.h:
9186        (toRef):
9187        * API/JSCallbackConstructor.cpp:
9188        (KJS::JSCallbackConstructor::construct):
9189        * API/JSCallbackFunction.cpp:
9190        (KJS::JSCallbackFunction::callAsFunction):
9191        * API/JSCallbackObject.cpp:
9192        (KJS::JSCallbackObject::init):
9193        (KJS::JSCallbackObject::getOwnPropertySlot):
9194        (KJS::JSCallbackObject::put):
9195        (KJS::JSCallbackObject::deleteProperty):
9196        (KJS::JSCallbackObject::construct):
9197        (KJS::JSCallbackObject::callAsFunction):
9198        (KJS::JSCallbackObject::getPropertyList):
9199        (KJS::JSCallbackObject::toBoolean):
9200        (KJS::JSCallbackObject::toNumber):
9201        (KJS::JSCallbackObject::toString):
9202        (KJS::JSCallbackObject::staticValueGetter):
9203        (KJS::JSCallbackObject::callbackGetter):
9204        * API/JSContextRef.cpp:
9205        (JSCheckSyntax):
9206        * API/JSContextRef.h:
9207        * API/JSNode.c:
9208        (JSNodePrototype_appendChild):
9209        (JSNodePrototype_removeChild):
9210        (JSNodePrototype_replaceChild):
9211        (JSNode_getNodeType):
9212        (JSNode_getChildNodes):
9213        (JSNode_getFirstChild):
9214        (JSNode_construct):
9215        * API/JSNode.h:
9216        * API/JSNodeList.c:
9217        (JSNodeListPrototype_item):
9218        (JSNodeList_length):
9219        (JSNodeList_getProperty):
9220        * API/JSObjectRef.h:
9221        * API/minidom.c:
9222        (print):
9223        * API/testapi.c:
9224        (MyObject_initialize):
9225        (MyObject_hasProperty):
9226        (MyObject_getProperty):
9227        (MyObject_setProperty):
9228        (MyObject_deleteProperty):
9229        (MyObject_getPropertyList):
9230        (MyObject_callAsFunction):
9231        (MyObject_callAsConstructor):
9232        (MyObject_convertToType):
9233        (print_callAsFunction):
9234        (myConstructor_callAsConstructor):
9235        (main):
9236        * JavaScriptCore.exp:
9237        * kjs/ExecState.h:
9238        (KJS::ExecState::exceptionHandle):
9239
92402006-07-10  Geoffrey Garen  <ggaren@apple.com>
9241
9242        Reviewed by Darin.
9243
9244        Improved type safety by implementing opaque JSValue/JSObject typing through 
9245        abuse of 'const', not void*. Also fixed an alarming number of bugs
9246        exposed by this new type safety.
9247        
9248        I made one design change in JavaScriptCore, which is that the JSObject
9249        constructor should take a JSValue* as its prototype argument, not a JSObject*,
9250        since we allow the prototype to be any JSValue*, including jsNull(), for
9251        example.
9252        
9253        * API/APICast.h:
9254        (toJS):
9255        * API/JSBase.h:
9256        * API/JSCallbackConstructor.cpp:
9257        (KJS::JSCallbackConstructor::construct):
9258        * API/JSCallbackFunction.cpp:
9259        (KJS::JSCallbackFunction::callAsFunction):
9260        * API/JSCallbackObject.cpp:
9261        (KJS::JSCallbackObject::JSCallbackObject):
9262        (KJS::JSCallbackObject::getOwnPropertySlot):
9263        (KJS::JSCallbackObject::put):
9264        (KJS::JSCallbackObject::construct):
9265        (KJS::JSCallbackObject::callAsFunction):
9266        (KJS::JSCallbackObject::staticFunctionGetter):
9267        * API/JSCallbackObject.h:
9268        * API/JSContextRef.cpp:
9269        (JSEvaluate):
9270        * API/JSNode.c:
9271        (JSNodePrototype_appendChild):
9272        (JSNodePrototype_removeChild):
9273        (JSNodePrototype_replaceChild):
9274        * API/JSObjectRef.cpp:
9275        (JSObjectMake):
9276        (JSFunctionMakeWithBody):
9277        (JSObjectGetProperty):
9278        (JSObjectCallAsFunction):
9279        (JSObjectCallAsConstructor):
9280        * API/JSObjectRef.h:
9281        * API/testapi.c:
9282        (main):
9283        * ChangeLog:
9284        * kjs/object.h:
9285        (KJS::JSObject::JSObject):
9286
92872006-07-10  Geoffrey Garen  <ggaren@apple.com>
9288
9289        Approved by Maciej, Darin.
9290        
9291        Renamed JSStringBufferRef to JSInternalStringRef. "Internal string" means the 
9292        JavaScript engine's internal string representation, which is the most 
9293        low-level and efficient representation to use when interfacing with JavaScript.
9294
9295        * API/APICast.h:
9296        (toJS):
9297        (toRef):
9298        * API/JSBase.h:
9299        * API/JSCallbackObject.cpp:
9300        (KJS::JSCallbackObject::getOwnPropertySlot):
9301        (KJS::JSCallbackObject::put):
9302        (KJS::JSCallbackObject::deleteProperty):
9303        (KJS::JSCallbackObject::staticValueGetter):
9304        (KJS::JSCallbackObject::callbackGetter):
9305        * API/JSContextRef.cpp:
9306        (JSEvaluate):
9307        (JSCheckSyntax):
9308        * API/JSContextRef.h:
9309        * API/JSInternalStringRef.cpp: Added.
9310        (JSStringMake):
9311        (JSInternalStringCreate):
9312        (JSInternalStringCreateUTF8):
9313        (JSInternalStringRetain):
9314        (JSInternalStringRelease):
9315        (JSValueCopyStringValue):
9316        (JSInternalStringGetLength):
9317        (JSInternalStringGetCharactersPtr):
9318        (JSInternalStringGetCharacters):
9319        (JSInternalStringGetMaxLengthUTF8):
9320        (JSInternalStringGetCharactersUTF8):
9321        (JSInternalStringIsEqual):
9322        (JSInternalStringIsEqualUTF8):
9323        (JSInternalStringCreateCF):
9324        (CFStringCreateWithJSInternalString):
9325        * API/JSInternalStringRef.h: Added.
9326        * API/JSNode.c:
9327        (JSNodePrototype_appendChild):
9328        (JSNode_getNodeType):
9329        (JSNode_getChildNodes):
9330        (JSNode_getFirstChild):
9331        * API/JSNodeList.c:
9332        (JSNodeList_length):
9333        (JSNodeList_getProperty):
9334        * API/JSObjectRef.cpp:
9335        (JSFunctionMakeWithBody):
9336        (JSObjectGetDescription):
9337        (JSObjectHasProperty):
9338        (JSObjectGetProperty):
9339        (JSObjectSetProperty):
9340        (JSObjectDeleteProperty):
9341        (JSPropertyEnumeratorGetNext):
9342        (JSPropertyListAdd):
9343        * API/JSObjectRef.h:
9344        * API/JSStringBufferRef.cpp: Removed.
9345        * API/JSStringBufferRef.h: Removed.
9346        * API/JSValueRef.h:
9347        * API/JavaScriptCore.h:
9348        * API/minidom.c:
9349        (main):
9350        (print):
9351        * API/testapi.c:
9352        (assertEqualsAsUTF8String):
9353        (assertEqualsAsCharactersPtr):
9354        (assertEqualsAsCharacters):
9355        (MyObject_hasProperty):
9356        (MyObject_getProperty):
9357        (MyObject_setProperty):
9358        (MyObject_deleteProperty):
9359        (MyObject_getPropertyList):
9360        (print_callAsFunction):
9361        (myConstructor_callAsConstructor):
9362        (main):
9363        * JavaScriptCore.exp:
9364        * JavaScriptCore.xcodeproj/project.pbxproj:
9365
93662006-07-08  Tim Omernick  <timo@apple.com>
9367
9368        Reviewed by Maciej.
9369
9370        Added an OpenGL drawing model to the Netscape Plug-in API.
9371
9372        * bindings/npapi.h:
9373
93742006-07-08  Timothy Hatcher  <timothy@apple.com>
9375
9376        Reviewed by Maciej.
9377
9378        Moved KJS_GetCreatedJavaVMs to jni_utility.cpp.
9379        Switched KJS_GetCreatedJavaVMs over to use dlopen and dlsym
9380        now that NSAddImage, NSLookupSymbolInImage and NSAddressOfSymbol
9381        are deprecated in Leopard.
9382
9383        * JavaScriptCore.exp:
9384        * JavaScriptCore.xcodeproj/project.pbxproj:
9385        * bindings/jni/jni_utility.cpp:
9386        (KJS::Bindings::KJS_GetCreatedJavaVMs):
9387        * bindings/softlinking.c: Removed.
9388        * bindings/softlinking.h: Removed.
9389
93902006-07-08  Geoffrey Garen  <ggaren@apple.com>
9391
9392        Reviewed by Anders.
9393        
9394        - Make JSObjectGetProperty return a JSValue or NULL, like JSEvaluate does.
9395
9396        * API/JSObjectRef.cpp:
9397        (JSObjectGetProperty):
9398        * API/JSObjectRef.h:
9399        * API/testapi.c:
9400        (main):
9401
94022006-07-08  Geoffrey Garen  <ggaren@apple.com>
9403
9404        Style change -- no review necessary.
9405        
9406        Use 0 instead of NULL in API .cpp files, to match our style guidelines.
9407
9408        * API/JSContextRef.cpp:
9409        (JSEvaluate):
9410        * API/JSObjectRef.cpp:
9411        (JSFunctionMakeWithBody):
9412        (JSObjectCallAsFunction):
9413        (JSObjectCallAsConstructor):
9414        * API/JSValueRef.cpp:
9415        (JSValueToObject):
9416
94172006-07-08  Geoffrey Garen  <ggaren@apple.com>
9418
9419        Reviewed by TimO.
9420
9421        - Added ability to pass NULL for thisObject when calling JSObjectCallAsFunction,
9422        to match JSEvaluate.
9423        
9424        * API/JSObjectRef.cpp:
9425        (JSObjectCallAsFunction):
9426        * API/JSObjectRef.h:
9427        * API/testapi.c:
9428        (main):
9429
9430=== Safari-521.15 ===
9431
94322006-07-07  Geoffrey Garen  <ggaren@apple.com>
9433
9434        Reviewed by Maciej.
9435        
9436        - Standardized which functions take a JSContext as an argument. The rule is:
9437        if you might execute JavaScript, you take a JSContext, otherwise you don't.
9438        
9439        The FIXME in JSObjectRef.h requires refactoring some parts of Interpreter,
9440        but not API changes, so I'm putting it off until later.
9441
9442        * API/JSCallbackObject.cpp:
9443        (KJS::JSCallbackObject::JSCallbackObject):
9444        (KJS::JSCallbackObject::init):
9445        * API/JSCallbackObject.h:
9446        * API/JSContextRef.cpp:
9447        (JSContextCreate):
9448        * API/JSContextRef.h:
9449        * API/JSObjectRef.cpp:
9450        (JSObjectMake):
9451        (JSPropertyEnumeratorGetNext):
9452        * API/JSObjectRef.h:
9453        * API/testapi.c:
9454        (MyObject_initialize):
9455        (main):
9456        * JavaScriptCore.exp:
9457        * kjs/array_object.cpp:
9458        (ArrayInstance::setLength):
9459        (ArrayInstance::pushUndefinedObjectsToEnd):
9460        * kjs/nodes.cpp:
9461        (ForInNode::execute):
9462        * kjs/reference.cpp:
9463        (KJS::Reference::getPropertyName):
9464        (KJS::Reference::getValue):
9465        * kjs/reference.h:
9466        * kjs/scope_chain.cpp:
9467        (KJS::ScopeChain::print):
9468
94692006-07-06  Geoffrey Garen  <ggaren@apple.com>
9470
9471        Reviewed by Maciej.
9472        
9473        More API action.
9474        
9475        - Headerdoc finished
9476
9477        Semantic Changes:
9478        - Added a JSContextRef argument to many functions, because you need a 
9479        JSContextRef for doing virtually anything. I expect to add this argument
9480        to even more functions in a future patch.
9481        
9482        - Removed the globalObjectPrototype argument to JSContextCreate because
9483        you can't create an object until you have a context, so it's impossible
9484        to pass a prototype object to JSContextCreate. That's OK because (1) there's
9485        no reason to give the global object a prototype and (2) if you really want
9486        to, you can just use a separate call to JSObjectSetPrototype.
9487        
9488        - Removed the JSClassRef argument to JSClassCreate because it was unnecessary,
9489        and you need to be able to make the global object's class before you've
9490        created a JSContext.
9491        
9492        - Added an optional exception parameter to JSFunctionMakeWithBody because anything
9493        less would be uncivilized.
9494        
9495        - Made the return value parameter to JSObjectGetProperty optional to match
9496        all other return value parameters in the API.
9497        
9498        - Made JSObjectSetPrivate/JSObjectGetPrivate work on JSCallbackFunctions
9499        and JSCallbackConstructors. You could use an abstract base class or strategic
9500        placement of m_privateData in the class structure to implement this, but 
9501        the former seemed like overkill, and the latter seemed too dangerous.
9502        
9503        - Fixed a bug where JSPropertyEnumeratorGetNext would skip the first property.
9504
9505        Cosmetic Changes:
9506        - Reversed the logic of the JSChar #ifdef to avoid confusing headerdoc
9507        
9508        - Removed function names from @function declarations because headeroc
9509        can parse them automatically, and I wanted to rule out manual mismatch.
9510
9511        - Changed Error::create to take a const UString& instead of a UString*
9512        because it was looking at me funny.
9513        
9514        - Renamed JSStringBufferCreateWithCFString to JSStringBufferCreateCF
9515        because the latter is more concise and it matches JSStringBufferCreateUTF8.
9516        
9517        * API/JSCallbackObject.cpp:
9518        (KJS::JSCallbackObject::getOwnPropertySlot):
9519        (KJS::JSCallbackObject::put):
9520        (KJS::JSCallbackObject::deleteProperty):
9521        (KJS::JSCallbackObject::getPropertyList):
9522        (KJS::JSCallbackObject::toBoolean):
9523        (KJS::JSCallbackObject::toNumber):
9524        (KJS::JSCallbackObject::toString):
9525        * API/JSClassRef.cpp:
9526        (JSClassCreate):
9527        * API/JSContextRef.cpp:
9528        (JSContextCreate):
9529        (JSContextSetException):
9530        * API/JSContextRef.h:
9531        * API/JSNode.c:
9532        (JSNodePrototype_class):
9533        (JSNode_class):
9534        * API/JSNodeList.c:
9535        (JSNodeListPrototype_class):
9536        (JSNodeList_class):
9537        * API/JSObjectRef.cpp:
9538        (JSObjectGetProperty):
9539        (JSObjectGetPrivate):
9540        (JSObjectSetPrivate):
9541        (JSObjectCallAsFunction):
9542        (JSObjectCallAsConstructor):
9543        (JSPropertyEnumeratorGetNext):
9544        * API/JSObjectRef.h:
9545        * API/JSStringBufferRef.cpp:
9546        (JSStringBufferCreateCF):
9547        * API/JSStringBufferRef.h:
9548        * API/JSValueRef.cpp:
9549        (JSValueIsInstanceOf):
9550        * API/JSValueRef.h:
9551        * API/minidom.c:
9552        (main):
9553        * API/minidom.js:
9554        * API/testapi.c:
9555        (MyObject_hasProperty):
9556        (MyObject_setProperty):
9557        (MyObject_deleteProperty):
9558        (MyObject_getPropertyList):
9559        (MyObject_convertToType):
9560        (MyObject_class):
9561        (main):
9562        * JavaScriptCore.exp:
9563
95642006-07-07  Geoffrey Garen  <ggaren@apple.com>
9565
9566        Reviewed by John.
9567        
9568        - Fixed a few crashes resulting from NULL parameters to JSClassCreate.
9569
9570        * API/JSClassRef.cpp:
9571        (JSClassCreate):
9572        (JSClassRelease):
9573        * API/testapi.c: Added test for NULL parameters.
9574        (main):
9575
95762006-07-07  Geoffrey Garen  <ggaren@apple.com>
9577
9578        Reviewed by John, mocked by Darin.
9579        
9580        - Changed JSEvaluate to take a JSObjectRef instead of a JSValueRef as
9581        "this," since "this" must be an object.
9582
9583        * API/JSContextRef.cpp:
9584        (JSEvaluate):
9585        * API/JSContextRef.h:
9586
95872006-07-07  Geoffrey Garen  <ggaren@apple.com>
9588
9589        Reviewed by John.
9590        
9591        - More headerdoc
9592
9593        * API/JSBase.h:
9594        * JavaScriptCore.xcodeproj/project.pbxproj:
9595
95962006-07-05  Geoffrey Garen  <ggaren@apple.com>
9597
9598        RS by Beth.
9599        
9600        Renamed JSCharBufferRef, which was universally unpopular, to JSStringBufferRef,
9601        which, hopefully, will be less unpopular.
9602
9603        * API/APICast.h:
9604        (toJS):
9605        (toRef):
9606        * API/JSBase.h:
9607        * API/JSCallbackObject.cpp:
9608        (KJS::JSCallbackObject::getOwnPropertySlot):
9609        (KJS::JSCallbackObject::put):
9610        (KJS::JSCallbackObject::deleteProperty):
9611        (KJS::JSCallbackObject::staticValueGetter):
9612        (KJS::JSCallbackObject::callbackGetter):
9613        * API/JSCharBufferRef.cpp: Removed.
9614        * API/JSCharBufferRef.h: Removed.
9615        * API/JSContextRef.cpp:
9616        (JSEvaluate):
9617        (JSCheckSyntax):
9618        * API/JSContextRef.h:
9619        * API/JSNode.c:
9620        (JSNodePrototype_appendChild):
9621        (JSNode_getNodeType):
9622        (JSNode_getChildNodes):
9623        (JSNode_getFirstChild):
9624        * API/JSNodeList.c:
9625        (JSNodeList_length):
9626        (JSNodeList_getProperty):
9627        * API/JSObjectRef.cpp:
9628        (JSFunctionMakeWithBody):
9629        (JSObjectGetDescription):
9630        (JSObjectHasProperty):
9631        (JSObjectGetProperty):
9632        (JSObjectSetProperty):
9633        (JSObjectDeleteProperty):
9634        (JSPropertyEnumeratorGetNext):
9635        (JSPropertyListAdd):
9636        * API/JSObjectRef.h:
9637        * API/JSStringBufferRef.cpp: Added.
9638        (JSStringMake):
9639        (JSStringBufferCreate):
9640        (JSStringBufferCreateUTF8):
9641        (JSStringBufferRetain):
9642        (JSStringBufferRelease):
9643        (JSValueCopyStringValue):
9644        (JSStringBufferGetLength):
9645        (JSStringBufferGetCharactersPtr):
9646        (JSStringBufferGetCharacters):
9647        (JSStringBufferGetMaxLengthUTF8):
9648        (JSStringBufferGetCharactersUTF8):
9649        (JSStringBufferIsEqual):
9650        (JSStringBufferIsEqualUTF8):
9651        (JSStringBufferCreateWithCFString):
9652        (CFStringCreateWithJSStringBuffer):
9653        * API/JSStringBufferRef.h: Added.
9654        * API/JSValueRef.h:
9655        * API/JavaScriptCore.h:
9656        * API/minidom.c:
9657        (main):
9658        (print):
9659        * API/testapi.c:
9660        (assertEqualsAsUTF8String):
9661        (assertEqualsAsCharactersPtr):
9662        (assertEqualsAsCharacters):
9663        (MyObject_hasProperty):
9664        (MyObject_getProperty):
9665        (MyObject_setProperty):
9666        (MyObject_deleteProperty):
9667        (MyObject_getPropertyList):
9668        (print_callAsFunction):
9669        (myConstructor_callAsConstructor):
9670        (main):
9671        * JavaScriptCore.exp:
9672        * JavaScriptCore.xcodeproj/project.pbxproj:
9673
96742006-07-05  Geoffrey Garen  <ggaren@apple.com>
9675
9676        RS by Beth.
9677        
9678        Moved some code around for more logical file separation.
9679
9680        * API/JSBase.h:
9681        * API/JSContextRef.h:
9682        * API/JSObjectRef.cpp:
9683        * API/JSValueRef.cpp:
9684        (JSValueToObject):
9685        * API/JSValueRef.h:
9686
96872006-07-03  Geoffrey Garen  <ggaren@apple.com>
9688
9689        Reviewed by Maciej.
9690        
9691        Implemented JSFunctionMakeWithBody, which parses a script as a function body
9692        in the global scope, and returns the resulting anonymous function.
9693        
9694        I also removed private data from JSCallbackFunction. It never worked,
9695        since JSCallbackFunction doesn't inherit from JSCallbackObject.
9696
9697        * API/JSCallbackConstructor.cpp: Removed.
9698        * API/JSCallbackConstructor.h: Removed.
9699        * API/JSCallbackFunction.cpp:
9700        (KJS::JSCallbackFunction::JSCallbackFunction):
9701        (KJS::JSCallbackFunction::implementsConstruct):
9702        (KJS::JSCallbackFunction::construct):
9703        (KJS::JSCallbackFunction::implementsCall):
9704        (KJS::JSCallbackFunction::callAsFunction):
9705        * API/JSCallbackFunction.h:
9706        * API/JSCallbackObject.cpp:
9707        (KJS::JSCallbackObject::staticFunctionGetter):
9708        * API/JSObjectRef.cpp:
9709        (JSFunctionMake):
9710        (JSFunctionMakeWithCallbacks):
9711        * API/JSObjectRef.h:
9712        * API/JSValueRef.h:
9713        * API/minidom.c:
9714        (main):
9715        * API/testapi.c:
9716        (main):
9717        * JavaScriptCore.exp: Programmatically added all symbols exported by
9718        API object files, and sorted results
9719        * JavaScriptCore.xcodeproj/project.pbxproj:
9720
97212006-07-03  Geoffrey Garen  <ggaren@apple.com>
9722
9723        Reviewed by Maciej.
9724
9725        - Return syntax error in JSCheckSyntax through a JSValueRef* exception
9726        argument
9727        
9728        * API/JSBase.h:
9729        * API/JSContextRef.cpp:
9730        (JSCheckSyntax):
9731        * API/testapi.c:
9732        (main):
9733        * JavaScriptCore.exp:
9734        * kjs/interpreter.cpp:
9735        (KJS::Interpreter::checkSyntax):
9736        * kjs/interpreter.h:
9737
97382006-07-04  Darin Adler  <darin@apple.com>
9739
9740        - fixed build
9741
9742        * wtf/MathExtras.h: Oops. Added missing #endif.
9743
97442006-07-04  Bjoern Graf  <bjoern.graf@gmail.com>
9745
9746        Reviewed by Maciej.
9747        Tweaked a bit by Darin.
9748
9749        - http://bugs.webkit.org/show_bug.cgi?id=9678
9750          work around MSVCRT's fmod function returning NaN for fmod(x, infinity) instead of x
9751
9752        * wtf/MathExtras.h: Added include of <float.h>.
9753        (isinf): Fix to return false for NAN.
9754        (wtf_fmod): Added. An inline that works around the bug.
9755
9756        * kjs/nodes.cpp:
9757        * kjs/number_object.cpp:
9758        * kjs/operations.cpp:
9759        * kjs/value.cpp:
9760        Added includes of MathExtras.h to all files using fmod.
9761
9762        * JavaScriptCore.xcodeproj/project.pbxproj: Let Xcode 2.3 have its way with
9763        the project.
9764
97652006-07-01  Geoffrey Garen  <ggaren@apple.com>
9766
9767        Reviewed by Darin.
9768        
9769        - Refined value conversions in the API:
9770            - failed toNumber returns NaN
9771            - failed toObject returns NULL
9772            - failed toString returns empty string
9773        
9774        - Refined excpetion handling in the API:
9775            - failed value conversions do not throw exceptions
9776            - uncaught exceptions in JSEvaluate, JSObjectCallAsFunction, and 
9777              JSObjectCallAsConstructor are returned through a JSValueRef* exception
9778              argument
9779            - removed JSContextHasException, because JSContextGetException does
9780              the same job
9781            
9782        * API/JSBase.h:
9783        * API/JSCharBufferRef.cpp:
9784        (JSValueCopyStringValue):
9785        * API/JSContextRef.cpp:
9786        (JSEvaluate):
9787        * API/JSContextRef.h:
9788        * API/JSNodeList.c: Added test code demonstrating how you would use
9789        toNumber, and why you probably don't need toUInt32, etc.
9790        (JSNodeListPrototype_item):
9791        (JSNodeList_getProperty):
9792        * API/JSObjectRef.cpp:
9793        (JSValueToObject):
9794        (JSObjectCallAsFunction):
9795        (JSObjectCallAsConstructor):
9796        * API/JSObjectRef.h:
9797        * API/JSValueRef.cpp:
9798        (JSValueToNumber):
9799        * API/JSValueRef.h:
9800        * API/minidom.c:
9801        (main):
9802        * API/testapi.c:
9803        (main): Added tests for new rules, and call to JSGCProtect to fix Intel 
9804        crash
9805        * JavaScriptCore.exp:
9806
98072006-07-03  Darin Adler  <darin@apple.com>
9808
9809        - Rolled out HashMap implementation of NPRuntime, at least temporarily.
9810
9811        Fixes hang in the bindings section of layout tests seen on the
9812        buildbot.
9813
9814        This code was using HashMap<const char*, PrivateIdentifier*>.
9815        But that hashes based on pointer identity, not string value.
9816        The default hash for any pointer type is to hash based on the pointer.
9817        And WTF doesn't currently have a string hash for char*.
9818        We'll need to fix that before re-landing this patch.
9819
9820        (Formatting was also incorrect -- extra spaces in parentheses.)
9821
9822        * bindings/npruntime.cpp: Rolled out last change.
9823
98242006-07-02  Justin Haygood  <jhaygood@spsu.edu>
9825
9826        Reviewed, tweaked, landed by ggaren.
9827
9828        - Port NPRuntime from CFDictionary to HashMap.
9829
9830        * bindings/npruntime.cpp:
9831        (getStringIdentifierDictionary):
9832        (getIntIdentifierDictionary):
9833        (_NPN_GetStringIdentifier):
9834        (_NPN_GetIntIdentifier):
9835        * bindings/npruntime.h:
9836
98372006-07-01  Geoffrey Garen  <ggaren@apple.com>
9838
9839        Reviewed by Adele.
9840        
9841        - Fixed <rdar://problem/4611197> REGRESSION: Liveconnect with Java test 
9842        fails at http://www-sor.inria.fr/~dedieu/notes/liveconnect/simple_example.html
9843
9844        * JavaScriptCore.exp: Export symbols used by liveconnect
9845
98462006-06-29  Geoffrey Garen  <ggaren@apple.com>
9847
9848        Reviewed by Maciej.
9849        
9850        - Phase 2 in the JS API.
9851        
9852        - Added support for specifying static tables of values -- this should
9853        obviate the need for using complicated callbacks for most lookups.
9854        
9855        -  API objects are now created with classes (JSClassRef) -- in order to support
9856        static values, and in order to prevent API objects from storing their
9857        data inline, and thus falling into the oversized (read: slow and prone to
9858        giving Maciej the frowny face) heap.
9859        
9860        - Added two specialized JSObject subclasses -- JSCallbackFunction and JSCallbackConstructor -- 
9861        to allow JSFunctionMake and JSConstructorMake to continue to work with
9862        the new class model. Another solution to this problem would be to create
9863        a custom class object for each function and constructor you make. This
9864        solution is more code but also more efficient.
9865        
9866        - Substantially beefed up the minidom example to demonstrate and test a
9867        lot of these techniques. Its output is still pretty haphazard, though.
9868        
9869        - Gave the <kjs/ preface to some includes -- I'm told this matters to
9870        building on some versions of Linux.
9871        
9872        - Implemented JSValueIsInstanceOf and JSValueIsObjectOfClass
9873        
9874        - Removed GetDescription callback. Something in the class datastructure
9875        should take care of this.
9876
9877        * API/JSBase.h:
9878        * API/JSCallbackConstructor.cpp: Added.
9879        (KJS::):
9880        (KJS::JSCallbackConstructor::JSCallbackConstructor):
9881        (KJS::JSCallbackConstructor::implementsConstruct):
9882        (KJS::JSCallbackConstructor::construct):
9883        (KJS::JSCallbackConstructor::setPrivate):
9884        (KJS::JSCallbackConstructor::getPrivate):
9885        * API/JSCallbackConstructor.h: Added.
9886        (KJS::JSCallbackConstructor::classInfo):
9887        * API/JSCallbackFunction.cpp: Added.
9888        (KJS::):
9889        (KJS::JSCallbackFunction::JSCallbackFunction):
9890        (KJS::JSCallbackFunction::implementsCall):
9891        (KJS::JSCallbackFunction::callAsFunction):
9892        (KJS::JSCallbackFunction::setPrivate):
9893        (KJS::JSCallbackFunction::getPrivate):
9894        * API/JSCallbackFunction.h: Added.
9895        (KJS::JSCallbackFunction::classInfo):
9896        * API/JSCallbackObject.cpp:
9897        (KJS::):
9898        (KJS::JSCallbackObject::JSCallbackObject):
9899        (KJS::JSCallbackObject::init):
9900        (KJS::JSCallbackObject::~JSCallbackObject):
9901        (KJS::JSCallbackObject::className):
9902        (KJS::JSCallbackObject::getOwnPropertySlot):
9903        (KJS::JSCallbackObject::put):
9904        (KJS::JSCallbackObject::deleteProperty):
9905        (KJS::JSCallbackObject::implementsConstruct):
9906        (KJS::JSCallbackObject::construct):
9907        (KJS::JSCallbackObject::implementsCall):
9908        (KJS::JSCallbackObject::callAsFunction):
9909        (KJS::JSCallbackObject::getPropertyList):
9910        (KJS::JSCallbackObject::toBoolean):
9911        (KJS::JSCallbackObject::toNumber):
9912        (KJS::JSCallbackObject::toString):
9913        (KJS::JSCallbackObject::inherits):
9914        (KJS::JSCallbackObject::staticValueGetter):
9915        (KJS::JSCallbackObject::staticFunctionGetter):
9916        (KJS::JSCallbackObject::callbackGetter):
9917        * API/JSCallbackObject.h:
9918        * API/JSCharBufferRef.cpp:
9919        * API/JSClassRef.cpp: Added.
9920        (JSClassCreate):
9921        (JSClassRetain):
9922        (JSClassRelease):
9923        * API/JSClassRef.h: Added.
9924        (StaticValueEntry::StaticValueEntry):
9925        (StaticFunctionEntry::StaticFunctionEntry):
9926        (__JSClass::__JSClass):
9927        * API/JSContextRef.cpp:
9928        (JSContextCreate):
9929        (JSEvaluate):
9930        * API/JSContextRef.h:
9931        * API/JSNode.c: Added.
9932        (JSNodePrototype_appendChild):
9933        (JSNodePrototype_removeChild):
9934        (JSNodePrototype_replaceChild):
9935        (JSNodePrototype_class):
9936        (JSNode_getNodeType):
9937        (JSNode_getChildNodes):
9938        (JSNode_getFirstChild):
9939        (JSNode_finalize):
9940        (JSNode_class):
9941        (JSNode_prototype):
9942        (JSNode_new):
9943        (JSNode_construct):
9944        * API/JSNode.h: Added.
9945        * API/JSNodeList.c: Added.
9946        (JSNodeListPrototype_item):
9947        (JSNodeListPrototype_class):
9948        (JSNodeList_length):
9949        (JSNodeList_getProperty):
9950        (JSNodeList_finalize):
9951        (JSNodeList_class):
9952        (JSNodeList_prototype):
9953        (JSNodeList_new):
9954        * API/JSNodeList.h: Added.
9955        * API/JSObjectRef.cpp:
9956        (JSObjectMake):
9957        (JSFunctionMake):
9958        (JSConstructorMake):
9959        (__JSPropertyEnumerator::__JSPropertyEnumerator):
9960        (JSObjectCreatePropertyEnumerator):
9961        (JSPropertyEnumeratorGetNext):
9962        (JSPropertyEnumeratorRetain):
9963        (JSPropertyEnumeratorRelease):
9964        * API/JSObjectRef.h:
9965        (__JSObjectCallbacks::):
9966        * API/JSValueRef.cpp:
9967        (JSValueIsObjectOfClass):
9968        (JSValueIsInstanceOf):
9969        * API/JSValueRef.h:
9970        * API/Node.c: Added.
9971        (Node_new):
9972        (Node_appendChild):
9973        (Node_removeChild):
9974        (Node_replaceChild):
9975        (Node_ref):
9976        (Node_deref):
9977        * API/Node.h: Added.
9978        * API/NodeList.c: Added.
9979        (NodeList_new):
9980        (NodeList_length):
9981        (NodeList_item):
9982        (NodeList_ref):
9983        (NodeList_deref):
9984        * API/NodeList.h: Added.
9985        * API/minidom.c:
9986        (main):
9987        (print):
9988        (createStringWithContentsOfFile):
9989        * API/minidom.js:
9990        * API/testapi.c:
9991        (assertEqualsAsCharacters):
9992        (MyObject_getProperty):
9993        (MyObject_class):
9994        (myConstructor_callAsConstructor):
9995        (main):
9996        * API/testapi.js:
9997        * JavaScriptCore.xcodeproj/project.pbxproj:
9998
99992006-06-26  Kevin Ollivier  <kevino@theolliviers.com>
10000        
10001        Reviewed and tweaked by Darin.
10002
10003        - Compile fixes for wx port / gcc 4.0.2
10004
10005        * kjs/array_object.cpp:
10006        Added missing headers. 
10007
10008        * kjs/ExecState.h:
10009        gcc needs class prototypes before defining those classes as friend classes
10010
100112006-06-30  Mike Emmel  <mike.emmel@gmail.com>
10012
10013        Reviewed by Darin.
10014
10015        Compilation fixes for Linux/Gdk.
10016
10017        * JavaScriptCore/kjs/interpreter.cpp: added include of signal.h
10018        * JavaScriptCore/kjs/ExecState.h: added missing class declaration 
10019        * JavaScriptCore/kjs/ExecState.cpp: case wrong on include of context.h 
10020        * JavaScriptCore/JavaScriptCoreSources.bkl: added Context.cpp and ExecState.cpp
10021
10022=== Safari-521.14 ===
10023
100242006-06-29  Maciej Stachowiak  <mjs@apple.com>
10025
10026        Reviewed by Geoff.
10027        
10028        - add headerdoc comments to some of the new JS API headers
10029
10030        * API/JSBase.h:
10031        * API/JSValueRef.h:
10032
100332006-06-28  Timothy Hatcher  <timothy@apple.com>
10034
10035        Prefer the Stabs debugging symbols format until DWARF bugs are fixed.
10036
10037        * JavaScriptCore.xcodeproj/project.pbxproj:
10038
100392006-06-27  Timothy Hatcher  <timothy@apple.com>
10040
10041        Reviewed by Tim O.
10042
10043        <rdar://problem/4448350> Deprecated ObjC language API used in JavaScriptCore, WebCore, WebKit and WebBrowser
10044
10045        Switch to the new ObjC 2 API, ifdefed the old code around OBJC_API_VERSION so it still works on Tiger.
10046        Removed the use of the old stringWithCString, switched to the new Tiger version that accepts an encoding.
10047        Lots of code style cleanup.
10048
10049        * JavaScriptCore.xcodeproj/project.pbxproj:
10050        * bindings/objc/objc_class.h:
10051        * bindings/objc/objc_class.mm:
10052        (KJS::Bindings::ObjcClass::~ObjcClass):
10053        (KJS::Bindings::_createClassesByIsAIfNecessary):
10054        (KJS::Bindings::ObjcClass::classForIsA):
10055        (KJS::Bindings::ObjcClass::name):
10056        (KJS::Bindings::ObjcClass::methodsNamed):
10057        (KJS::Bindings::ObjcClass::fieldNamed):
10058        (KJS::Bindings::ObjcClass::fallbackObject):
10059        * bindings/objc/objc_header.h:
10060        * bindings/objc/objc_instance.h:
10061        * bindings/objc/objc_instance.mm:
10062        (ObjcInstance::ObjcInstance):
10063        (ObjcInstance::~ObjcInstance):
10064        (ObjcInstance::operator=):
10065        (ObjcInstance::begin):
10066        (ObjcInstance::end):
10067        (ObjcInstance::getClass):
10068        (ObjcInstance::invokeMethod):
10069        (ObjcInstance::invokeDefaultMethod):
10070        (ObjcInstance::setValueOfField):
10071        (ObjcInstance::supportsSetValueOfUndefinedField):
10072        (ObjcInstance::setValueOfUndefinedField):
10073        (ObjcInstance::getValueOfField):
10074        (ObjcInstance::getValueOfUndefinedField):
10075        (ObjcInstance::defaultValue):
10076        (ObjcInstance::stringValue):
10077        (ObjcInstance::numberValue):
10078        (ObjcInstance::booleanValue):
10079        (ObjcInstance::valueOf):
10080        * bindings/objc/objc_runtime.h:
10081        * bindings/objc/objc_runtime.mm:
10082        (ObjcMethod::ObjcMethod):
10083        (ObjcMethod::name):
10084        (ObjcMethod::getMethodSignature):
10085        (ObjcMethod::setJavaScriptName):
10086        (ObjcField::name):
10087        (ObjcField::type):
10088        (ObjcField::valueFromInstance):
10089        (convertValueToObjcObject):
10090        (ObjcField::setValueToInstance):
10091        (ObjcArray::operator=):
10092        (ObjcArray::setValueAt):
10093        (ObjcArray::valueAt):
10094        (ObjcFallbackObjectImp::ObjcFallbackObjectImp):
10095        (ObjcFallbackObjectImp::callAsFunction):
10096        (ObjcFallbackObjectImp::defaultValue):
10097
100982006-06-28  Anders Carlsson  <acarlsson@apple.com>
10099
10100        Reviewed by Geoff.
10101
10102        http://bugs.webkit.org/show_bug.cgi?id=8636
10103        REGRESSION: JavaScript access to Java applet causes hang (_webViewURL not implemented)
10104
10105        * bindings/jni/jni_objc.mm:
10106        (KJS::Bindings::dispatchJNICall):
10107        Just pass nil as the calling URL. This will cause the Java plugin to use the URL of the page
10108        containing the applet (which is what we used to do).
10109
101102006-06-27  Timothy Hatcher  <timothy@apple.com>
10111
10112        Reviewed by Darin.
10113
10114        <rdar://problem/4406785> Add an export file to TOT JavaScriptCore like the Safari-2-0-branch
10115
10116        * JavaScriptCore.exp: Added.
10117        * JavaScriptCore.xcodeproj/project.pbxproj:
10118
101192006-06-25  Geoffrey Garen  <ggaren@apple.com>
10120
10121        Reviewed by Adele.
10122        
10123        - Added JSConstructorMake to match JSFunctionMake, along with test code.
10124        
10125        [ I checked in the ChangeLog before without the actual files. ]
10126
10127        * API/JSObjectRef.cpp:
10128        (JSConstructorMake):
10129        * API/JSObjectRef.h:
10130        * API/testapi.c:
10131        (myConstructor_callAsConstructor):
10132        (main):
10133        * API/testapi.js:
10134        * ChangeLog:
10135        * JavaScriptCore.xcodeproj/project.pbxproj: Moved testapi.c to the testapi
10136        target -- this was an oversight in my earlier check-in.
10137
101382006-06-25  Timothy Hatcher  <timothy@apple.com>
10139
10140        Reviewed by Darin.
10141
10142        Bug 9574: Drosera should show inline scripts within the original HTML
10143        http://bugs.webkit.org/show_bug.cgi?id=9574
10144
10145        Pass the starting line number and error message to the debugger.
10146
10147        * kjs/debugger.cpp:
10148        (Debugger::sourceParsed):
10149        * kjs/debugger.h:
10150        * kjs/function.cpp:
10151        (KJS::GlobalFuncImp::callAsFunction):
10152        * kjs/function_object.cpp:
10153        (FunctionObjectImp::construct):
10154        * kjs/interpreter.cpp:
10155        (KJS::Interpreter::evaluate):
10156
101572006-06-24  Alexey Proskuryakov  <ap@nypop.com>
10158
10159        Rubber-stamped by Eric.
10160
10161        Add a -h (do not follow symlinks) option to ln in derived sources build script (without it,
10162        a symlink was created inside the source directory on second build).
10163
10164        * JavaScriptCore.xcodeproj/project.pbxproj:
10165
101662006-06-24  David Kilzer  <ddkilzer@kilzer.net>
10167
10168        Reviewed by Timothy.
10169
10170        * Info.plist: Fixed copyright to include 2003-2006.
10171
101722006-06-24  Alexey Proskuryakov  <ap@nypop.com>
10173
10174        Reviewed by Darin.
10175
10176        - http://bugs.webkit.org/show_bug.cgi?id=9418
10177        WebKit will not build when Space exists in path
10178
10179        * JavaScriptCore.xcodeproj/project.pbxproj: Enclose search paths in quotes; create symlinks to 
10180        avoid passing paths with spaces to make.
10181
101822006-06-23  Timothy Hatcher  <timothy@apple.com>
10183
10184        Reviewed by Darin.
10185
10186        Adding more operator[] overloads for long and short types.
10187
10188        * wtf/Vector.h:
10189        (WTF::Vector::operator[]):
10190
10191=== JavaScriptCore-521.13 ===
10192
101932006-06-22  Alexey Proskuryakov  <ap@nypop.com>
10194
10195        Build fix.
10196
10197        - http://bugs.webkit.org/show_bug.cgi?id=9539
10198        Another case error preventing build
10199
10200        * API/JSObjectRef.cpp: Changed "identifier.h" to "Identifier.h"
10201        
102022006-06-22  David Kilzer  <ddkilzer@kilzer.net>
10203
10204        Build fix.
10205
10206        http://bugs.webkit.org/show_bug.cgi?id=9539
10207        Another case error preventing build
10208
10209        * API/APICast.h: Changed "UString.h" to "ustring.h".
10210
102112006-06-21  Geoffrey Garen  <ggaren@apple.com>
10212
10213        Fixed release build, fixed accidental infinite recursion due to
10214        last minute global replace gone awry.
10215        
10216        * API/APICast.h:
10217        (toRef):
10218        * API/testapi.c:
10219        (assertEqualsAsBoolean):
10220        (assertEqualsAsNumber):
10221        (assertEqualsAsUTF8String):
10222        (assertEqualsAsCharactersPtr):
10223        * JavaScriptCore.xcodeproj/project.pbxproj:
10224
102252006-06-21  Geoffrey Garen  <ggaren@apple.com>
10226
10227        Reviewed by Anders.
10228        
10229        - First cut at C API to JavaScript. Includes a unit test, 'testapi.c', 
10230        and the outline of a test app, 'minidom.c'.
10231        
10232        Includes one change to JSC internals: Rename propList to getPropertyList and have it
10233        take its target property list by reference so that subclasses can
10234        add properties to the list before calling through to their superclasses.
10235        
10236        Also, I just ran prepare-ChangeLog in about 10 seconds, and I would like
10237        to give a shout-out to that.
10238        
10239        * API/APICast.h: Added.
10240        (toJS):
10241        (toRef):
10242        * API/JSBase.h: Added.
10243        * API/JSCallbackObject.cpp: Added.
10244        (KJS::):
10245        (KJS::JSCallbackObject::JSCallbackObject):
10246        (KJS::JSCallbackObject::~JSCallbackObject):
10247        (KJS::JSCallbackObject::className):
10248        (KJS::JSCallbackObject::getOwnPropertySlot):
10249        (KJS::JSCallbackObject::put):
10250        (KJS::JSCallbackObject::deleteProperty):
10251        (KJS::JSCallbackObject::implementsConstruct):
10252        (KJS::JSCallbackObject::construct):
10253        (KJS::JSCallbackObject::implementsCall):
10254        (KJS::JSCallbackObject::callAsFunction):
10255        (KJS::JSCallbackObject::getPropertyList):
10256        (KJS::JSCallbackObject::toBoolean):
10257        (KJS::JSCallbackObject::toNumber):
10258        (KJS::JSCallbackObject::toString):
10259        (KJS::JSCallbackObject::setPrivate):
10260        (KJS::JSCallbackObject::getPrivate):
10261        (KJS::JSCallbackObject::cachedValueGetter):
10262        (KJS::JSCallbackObject::callbackGetter):
10263        * API/JSCallbackObject.h: Added.
10264        (KJS::JSCallbackObject::classInfo):
10265        * API/JSCharBufferRef.cpp: Added.
10266        (JSStringMake):
10267        (JSCharBufferCreate):
10268        (JSCharBufferCreateUTF8):
10269        (JSCharBufferRetain):
10270        (JSCharBufferRelease):
10271        (JSValueCopyStringValue):
10272        (JSCharBufferGetLength):
10273        (JSCharBufferGetCharactersPtr):
10274        (JSCharBufferGetCharacters):
10275        (JSCharBufferGetMaxLengthUTF8):
10276        (JSCharBufferGetCharactersUTF8):
10277        (JSCharBufferIsEqual):
10278        (JSCharBufferIsEqualUTF8):
10279        (JSCharBufferCreateWithCFString):
10280        (CFStringCreateWithJSCharBuffer):
10281        * API/JSCharBufferRef.h: Added.
10282        * API/JSContextRef.cpp: Added.
10283        (JSContextCreate):
10284        (JSContextDestroy):
10285        (JSContextGetGlobalObject):
10286        (JSEvaluate):
10287        (JSCheckSyntax):
10288        (JSContextHasException):
10289        (JSContextGetException):
10290        (JSContextClearException):
10291        (JSContextSetException):
10292        * API/JSContextRef.h: Added.
10293        * API/JSObjectRef.cpp: Added.
10294        (JSValueToObject):
10295        (JSObjectMake):
10296        (JSFunctionMake):
10297        (JSObjectGetDescription):
10298        (JSObjectGetPrototype):
10299        (JSObjectSetPrototype):
10300        (JSObjectHasProperty):
10301        (JSObjectGetProperty):
10302        (JSObjectSetProperty):
10303        (JSObjectDeleteProperty):
10304        (JSObjectGetPrivate):
10305        (JSObjectSetPrivate):
10306        (JSObjectIsFunction):
10307        (JSObjectCallAsFunction):
10308        (JSObjectIsConstructor):
10309        (JSObjectCallAsConstructor):
10310        (__JSPropertyListEnumerator::__JSPropertyListEnumerator):
10311        (JSObjectCreatePropertyEnumerator):
10312        (JSPropertyEnumeratorGetNext):
10313        (JSPropertyEnumeratorRetain):
10314        (JSPropertyEnumeratorRelease):
10315        (JSPropertyListAdd):
10316        * API/JSObjectRef.h: Added.
10317        * API/JSValueRef.cpp: Added.
10318        (JSValueGetType):
10319        (JSValueIsUndefined):
10320        (JSValueIsNull):
10321        (JSValueIsBoolean):
10322        (JSValueIsNumber):
10323        (JSValueIsString):
10324        (JSValueIsObject):
10325        (JSValueIsEqual):
10326        (JSValueIsStrictEqual):
10327        (JSUndefinedMake):
10328        (JSNullMake):
10329        (JSBooleanMake):
10330        (JSNumberMake):
10331        (JSValueToBoolean):
10332        (JSValueToNumber):
10333        (JSGCProtect):
10334        (JSGCUnprotect):
10335        (JSGCCollect):
10336        * API/JSValueRef.h: Added.
10337        * API/JavaScriptCore.h: Added.
10338        * API/minidom.c: Added.
10339        (main):
10340        * API/minidom.html: Added.
10341        * API/minidom.js: Added.
10342        * API/testapi.c: Added.
10343        (assertEqualsAsBoolean):
10344        (assertEqualsAsNumber):
10345        (assertEqualsAsUTF8String):
10346        (assertEqualsAsCharactersPtr):
10347        (assertEqualsAsCharacters):
10348        (MyObject_initialize):
10349        (MyObject_copyDescription):
10350        (MyObject_hasProperty):
10351        (MyObject_getProperty):
10352        (MyObject_setProperty):
10353        (MyObject_deleteProperty):
10354        (MyObject_getPropertyList):
10355        (MyObject_callAsFunction):
10356        (MyObject_callAsConstructor):
10357        (MyObject_convertToType):
10358        (MyObject_finalize):
10359        (print_callAsFunction):
10360        (main):
10361        (createStringWithContentsOfFile):
10362        * API/testapi.js: Added.
10363        * ChangeLog:
10364        * JavaScriptCore.xcodeproj/project.pbxproj:
10365        * bindings/npruntime_impl.h:
10366        * kjs/array_instance.h:
10367        * kjs/array_object.cpp:
10368        (ArrayInstance::getPropertyList):
10369        * kjs/interpreter.cpp:
10370        (KJS::Interpreter::evaluate):
10371        * kjs/nodes.cpp:
10372        (ForInNode::execute):
10373        * kjs/object.cpp:
10374        (KJS::JSObject::put):
10375        (KJS::JSObject::canPut):
10376        (KJS::JSObject::deleteProperty):
10377        (KJS::JSObject::propertyIsEnumerable):
10378        (KJS::JSObject::getPropertyAttributes):
10379        (KJS::JSObject::getPropertyList):
10380        * kjs/object.h:
10381        * kjs/property_map.cpp:
10382        (KJS::PropertyMap::get):
10383        * kjs/property_map.h:
10384        * kjs/scope_chain.cpp:
10385        (KJS::ScopeChain::print):
10386        * kjs/string_object.cpp:
10387        (StringInstance::getPropertyList):
10388        * kjs/string_object.h:
10389        * kjs/ustring.h:
10390        (KJS::UString::Rep::ref):
10391
103922006-06-20  Timothy Hatcher  <timothy@apple.com>
10393
10394        Reviewed by Geoff.
10395
10396        Make sure we clear the exception before returning so
10397        that future calls will not fail because of an earlier
10398        exception state. Assert on entry that the WebScriptObject
10399        is working with an ExecState that dose not have an exception. 
10400        Document that evaluateWebScript and callWebScriptMethod return
10401        WebUndefined when an exception is thrown.
10402
10403        * bindings/objc/WebScriptObject.h:
10404        * bindings/objc/WebScriptObject.mm:
10405        (-[WebScriptObject callWebScriptMethod:withArguments:]):
10406        (-[WebScriptObject evaluateWebScript:]):
10407        (-[WebScriptObject setValue:forKey:]):
10408        (-[WebScriptObject valueForKey:]):
10409        (-[WebScriptObject removeWebScriptKey:]):
10410        (-[WebScriptObject webScriptValueAtIndex:]):
10411        (-[WebScriptObject setWebScriptValueAtIndex:value:]):
10412
104132006-06-19  Anders Carlsson  <acarlsson@apple.com>
10414
10415        Reviewed by John.
10416
10417        * kjs/interpreter.cpp:
10418        (KJS::TimeoutChecker::pauseTimeoutCheck):
10419        (KJS::TimeoutChecker::resumeTimeoutCheck):
10420        Fix argument order in setitimer calls.
10421
104222006-06-18  Anders Carlsson  <acarlsson@apple.com>
10423
10424        Reviewed by Geoff.
10425
10426        * kjs/interpreter.cpp:
10427        (KJS::TimeoutChecker::pauseTimeoutCheck):
10428        Do nothing if the timeout check hasn't been started.
10429        
10430        (KJS::TimeoutChecker::resumeTimeoutCheck):
10431        Do nothing if the timeout check hasn't been started.
10432        Use the right signal handler when unblocking.
10433        
10434        (KJS::Interpreter::handleTimeout):
10435        pause/resume the timeout check around the call to
10436        shouldInterruptScript().
10437        
104382006-06-16  Ben Goodger <beng@google.com>
10439        
10440        Reviewed by Maciej
10441
10442        http://bugs.webkit.org/show_bug.cgi?id=9491
10443        Windows build breaks in interpreter.cpp 
10444
10445        * kjs/interpreter.cpp
10446        (KJS::TimeoutChecker::pauseTimeoutCheck):
10447        (KJS::TimeoutChecker::resumeTimeoutCheck):
10448        Make sure to only assert equality with s_executingInterpreter when it 
10449        is being used (i.e. when HAVE(SYS_TIME_H) == true)
10450
104512006-06-17  David Kilzer  <ddkilzer@kilzer.net>
10452
10453        Reviewed by darin.
10454
10455        http://bugs.webkit.org/show_bug.cgi?id=9477
10456        REGRESSION: fast/dom/replaceChild.html crashes on WebKit ToT in debug build
10457
10458        * kjs/function.cpp:
10459        (KJS::FunctionImp::callAsFunction): Refetch the debugger after executing the function
10460        in case the WebFrame it was running in has since been destroyed.
10461
104622006-06-17  David Kilzer  <ddkilzer@kilzer.net>
10463
10464        Reviewed by ggaren.
10465
10466        http://bugs.webkit.org/show_bug.cgi?id=9476
10467        REGRESSION: Reproducible crash after closing window after viewing
10468        css2.1/t0803-c5501-imrgn-t-00-b-ag.html
10469
10470        * kjs/debugger.cpp:
10471        (Debugger::detach): Call setDebugger(0) for all interpreters removed from
10472        the 'attached to a debugger' list.
10473
104742006-06-17  Anders Carlsson  <acarlsson@apple.com>
10475
10476        Reviewed by Maciej and Geoff.
10477
10478        http://bugs.webkit.org/show_bug.cgi?id=7080
10479        Provide some way to stop a JavaScript infinite loop
10480        
10481        * kjs/completion.h:
10482        (KJS::):
10483        Add Interrupted completion type.
10484        
10485        * kjs/function.cpp:
10486        (KJS::FunctionImp::callAsFunction):
10487        (KJS::GlobalFuncImp::callAsFunction):
10488        Only set the exception on the new ExecState if the current one has had one.
10489        
10490        * kjs/interpreter.cpp:
10491        (KJS::TimeoutChecker::startTimeoutCheck):
10492        (KJS::TimeoutChecker::stopTimeoutCheck):
10493        (KJS::TimeoutChecker::alarmHandler):
10494        (KJS::TimeoutChecker::pauseTimeoutCheck):
10495        (KJS::TimeoutChecker::resumeTimeoutCheck):
10496        New TimeoutChecker class which handles setting Interpreter::m_timedOut flag after a given
10497        period of time. This currently only works on Unix platforms where setitimer and signals are used.
10498        
10499        (KJS::Interpreter::Interpreter):
10500        Initialize new member variables.
10501        
10502        (KJS::Interpreter::~Interpreter):
10503        Destroy the timeout checker.
10504        
10505        (KJS::Interpreter::startTimeoutCheck):
10506        (KJS::Interpreter::stopTimeoutCheck):
10507        (KJS::Interpreter::pauseTimeoutCheck):
10508        (KJS::Interpreter::resumeTimeoutCheck):
10509        Call the timeout checker.
10510        
10511        (KJS::Interpreter::handleTimeout):
10512        Called on timeout. Resets the m_timedOut flag and calls shouldInterruptScript.
10513        
10514        * kjs/interpreter.h:
10515        (KJS::Interpreter::setTimeoutTime):
10516        New function for setting the timeout time.
10517        
10518        (KJS::Interpreter::shouldInterruptScript):
10519        New function. The idea is that this should be overridden by subclasses in order to for example
10520        pop up a dialog asking the user if the script should be interrupted.
10521        
10522        (KJS::Interpreter::checkTimeout):
10523        New function which checks the m_timedOut flag and calls handleTimeout if it's set.
10524        
10525        * kjs/nodes.cpp:
10526        (DoWhileNode::execute):
10527        (WhileNode::execute):
10528        (ForNode::execute):
10529        Call Interpreter::checkTimeout after each iteration of the loop.
10530
105312006-06-15  Timothy Hatcher  <timothy@apple.com>
10532
10533        Reviewed by Geoff and Darin.
10534        
10535        Prefer the DWARF debugging symbols format for use in Xcode 2.3.
10536
10537        * JavaScriptCore.xcodeproj/project.pbxproj:
10538
105392006-06-14  Geoffrey Garen  <ggaren@apple.com>
10540
10541        Reviewed by Beth.
10542        
10543        - fixed http://bugs.webkit.org/show_bug.cgi?id=9438
10544        Someone broke ToT: cannot build
10545
10546        * JavaScriptCore.xcodeproj/project.pbxproj:
10547        * bindings/runtime_root.h: Changed "Interpreter.h" to "interpreter.h"
10548
105492006-06-12  Geoffrey Garen  <ggaren@apple.com>
10550
10551        build fix
10552        
10553        * bindings/objc/WebScriptObject.mm:
10554        (+[WebScriptObject throwException:]): Restore assignment I accidentally
10555        deleted in previous commit
10556
105572006-06-12  Geoffrey Garen  <ggaren@apple.com>
10558
10559        Reviewed by TimO, Maciej.
10560        
10561        - Merged InterpreterImp code into Interpreter, which implements
10562        all interpreter functionality now. This is part of my continuing quest
10563        to create an external notion of JS "execution context" that is unified and simple --
10564        something to replace the mix of Context, ContextImp, ExecState, Interpreter,
10565        InterpreterImp, and JSRun.
10566        
10567        All tests pass. Leaks test has not regressed from its baseline ~207 leaks
10568        with ~3460 leaked nodes.
10569
10570        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
10571        * JavaScriptCore.xcodeproj/project.pbxproj:
10572        * bindings/NP_jsobject.cpp:
10573        * bindings/objc/WebScriptObject.mm:
10574        (+[WebScriptObject throwException:]):
10575        * bindings/runtime_root.cpp:
10576        * bindings/runtime_root.h:
10577        * kjs/Context.cpp:
10578        (KJS::Context::Context):
10579        * kjs/ExecState.cpp: Added.
10580        (KJS::ExecState::lexicalInterpreter):
10581        * kjs/ExecState.h: Added.
10582        (KJS::ExecState::dynamicInterpreter):
10583        * kjs/SavedBuiltins.h: Added.
10584        * kjs/bool_object.cpp:
10585        (BooleanPrototype::BooleanPrototype):
10586        * kjs/collector.cpp:
10587        (KJS::Collector::collect):
10588        (KJS::Collector::numInterpreters):
10589        * kjs/context.h:
10590        * kjs/debugger.cpp:
10591        (Debugger::attach):
10592        (Debugger::detach):
10593        * kjs/function.cpp:
10594        (KJS::FunctionImp::callAsFunction):
10595        (KJS::GlobalFuncImp::callAsFunction):
10596        * kjs/function_object.cpp:
10597        (FunctionObjectImp::construct):
10598        * kjs/internal.cpp:
10599        * kjs/internal.h:
10600        * kjs/interpreter.cpp:
10601        (KJS::interpreterMap):
10602        (KJS::Interpreter::Interpreter):
10603        (KJS::Interpreter::init):
10604        (KJS::Interpreter::~Interpreter):
10605        (KJS::Interpreter::globalObject):
10606        (KJS::Interpreter::initGlobalObject):
10607        (KJS::Interpreter::globalExec):
10608        (KJS::Interpreter::checkSyntax):
10609        (KJS::Interpreter::evaluate):
10610        (KJS::Interpreter::builtinObject):
10611        (KJS::Interpreter::builtinFunction):
10612        (KJS::Interpreter::builtinArray):
10613        (KJS::Interpreter::builtinBoolean):
10614        (KJS::Interpreter::builtinString):
10615        (KJS::Interpreter::builtinNumber):
10616        (KJS::Interpreter::builtinDate):
10617        (KJS::Interpreter::builtinRegExp):
10618        (KJS::Interpreter::builtinError):
10619        (KJS::Interpreter::builtinObjectPrototype):
10620        (KJS::Interpreter::builtinFunctionPrototype):
10621        (KJS::Interpreter::builtinArrayPrototype):
10622        (KJS::Interpreter::builtinBooleanPrototype):
10623        (KJS::Interpreter::builtinStringPrototype):
10624        (KJS::Interpreter::builtinNumberPrototype):
10625        (KJS::Interpreter::builtinDatePrototype):
10626        (KJS::Interpreter::builtinRegExpPrototype):
10627        (KJS::Interpreter::builtinErrorPrototype):
10628        (KJS::Interpreter::builtinEvalError):
10629        (KJS::Interpreter::builtinRangeError):
10630        (KJS::Interpreter::builtinReferenceError):
10631        (KJS::Interpreter::builtinSyntaxError):
10632        (KJS::Interpreter::builtinTypeError):
10633        (KJS::Interpreter::builtinURIError):
10634        (KJS::Interpreter::builtinEvalErrorPrototype):
10635        (KJS::Interpreter::builtinRangeErrorPrototype):
10636        (KJS::Interpreter::builtinReferenceErrorPrototype):
10637        (KJS::Interpreter::builtinSyntaxErrorPrototype):
10638        (KJS::Interpreter::builtinTypeErrorPrototype):
10639        (KJS::Interpreter::builtinURIErrorPrototype):
10640        (KJS::Interpreter::mark):
10641        (KJS::Interpreter::interpreterWithGlobalObject):
10642        (KJS::Interpreter::saveBuiltins):
10643        (KJS::Interpreter::restoreBuiltins):
10644        * kjs/interpreter.h:
10645        (KJS::Interpreter::setCompatMode):
10646        (KJS::Interpreter::compatMode):
10647        (KJS::Interpreter::firstInterpreter):
10648        (KJS::Interpreter::nextInterpreter):
10649        (KJS::Interpreter::prevInterpreter):
10650        (KJS::Interpreter::debugger):
10651        (KJS::Interpreter::setDebugger):
10652        (KJS::Interpreter::setContext):
10653        (KJS::Interpreter::context):
10654        * kjs/nodes.cpp:
10655        (StatementNode::hitStatement):
10656        (RegExpNode::evaluate):
10657        * kjs/protect.h:
10658
106592006-06-12  Geoffrey Garen  <ggaren@apple.com>
10660
10661        Reviewed by Maciej.
10662        
10663        - Have *.lut.h files #include lookup.h to eliminate surprising header
10664        include order dependency.
10665
10666        * DerivedSources.make:
10667        * kjs/array_object.cpp:
10668        * kjs/date_object.cpp:
10669        * kjs/date_object.h:
10670        (KJS::DateProtoFunc::):
10671        * kjs/lexer.cpp:
10672        * kjs/math_object.cpp:
10673        * kjs/number_object.cpp:
10674        * kjs/regexp_object.cpp:
10675        * kjs/string_object.cpp:
10676
106772006-06-10  Geoffrey Garen  <ggaren@apple.com>
10678
10679        - http://bugs.webkit.org/show_bug.cgi?id=8515
10680        Linux porting compile bug
10681        
10682        Fix by Mike Emmel, Reviewed by Darin.
10683
10684        * JavaScriptCoreSources.bkl:
10685        * jscore.bkl:
10686        * wtf/Platform.h:
10687
106882006-06-09  Geoffrey Garen  <ggaren@apple.com>
10689
10690        Build fix -- I think :).
10691
10692        * JavaScriptCore.xcodeproj/project.pbxproj:
10693        * kjs/context.h:
10694
106952006-06-09  Geoffrey Garen  <ggaren@apple.com>
10696
10697        Reviewed by Eric (yay!).
10698        
10699        - Removed Context wrapper for ContextImp, renamed ContextImp to Context,
10700        split Context into its own file -- Context.cpp -- renamed _var to m_var,
10701        change ' *' to '* '.
10702
10703        * JavaScriptCore.xcodeproj/project.pbxproj:
10704        * kjs/Context.cpp: Added.
10705        (KJS::Context::Context):
10706        (KJS::Context::~Context):
10707        (KJS::Context::mark):
10708        * kjs/context.h:
10709        (KJS::Context::scopeChain):
10710        (KJS::Context::variableObject):
10711        (KJS::Context::setVariableObject):
10712        (KJS::Context::thisValue):
10713        (KJS::Context::callingContext):
10714        (KJS::Context::activationObject):
10715        (KJS::Context::currentBody):
10716        (KJS::Context::function):
10717        (KJS::Context::arguments):
10718        (KJS::Context::pushScope):
10719        (KJS::Context::seenLabels):
10720        * kjs/function.cpp:
10721        (KJS::FunctionImp::callAsFunction):
10722        (KJS::FunctionImp::processParameters):
10723        (KJS::FunctionImp::argumentsGetter):
10724        (KJS::GlobalFuncImp::callAsFunction):
10725        * kjs/internal.cpp:
10726        (KJS::InterpreterImp::evaluate):
10727        * kjs/internal.h:
10728        (KJS::InterpreterImp::setContext):
10729        (KJS::InterpreterImp::context):
10730        * kjs/interpreter.cpp:
10731        * kjs/interpreter.h:
10732        (KJS::ExecState::context):
10733        (KJS::ExecState::ExecState):
10734        * kjs/nodes.cpp:
10735        (currentSourceId):
10736        (currentSourceURL):
10737        (ThisNode::evaluate):
10738        (ResolveNode::evaluate):
10739        (FunctionCallResolveNode::evaluate):
10740        (PostfixResolveNode::evaluate):
10741        (DeleteResolveNode::evaluate):
10742        (TypeOfResolveNode::evaluate):
10743        (PrefixResolveNode::evaluate):
10744        (AssignResolveNode::evaluate):
10745        (VarDeclNode::evaluate):
10746        (VarDeclNode::processVarDecls):
10747        (DoWhileNode::execute):
10748        (WhileNode::execute):
10749        (ForNode::execute):
10750        (ForInNode::execute):
10751        (ContinueNode::execute):
10752        (BreakNode::execute):
10753        (ReturnNode::execute):
10754        (WithNode::execute):
10755        (SwitchNode::execute):
10756        (LabelNode::execute):
10757        (TryNode::execute):
10758        (FuncDeclNode::processFuncDecl):
10759        (FuncExprNode::evaluate):
10760
107612006-06-07  Geoffrey Garen  <ggaren@apple.com>
10762
10763        Removed API directory I prematurely/accidentally added.
10764
10765        * API: Removed.
10766
107672006-06-05  Mitz Pettel  <opendarwin.org@mitzpettel.com>
10768
10769        Reviewed and landed by Geoff.
10770
10771        - fix a regression in ecma_3/String/regress-104375.js
10772
10773        * kjs/string_object.cpp:
10774        (substituteBackreferences): If a 2-digit back reference is out of range,
10775        parse it as a 1-digit reference (followed by the other digit). This matches
10776        Firefox's behavior.
10777
107782006-06-05  Geoffrey Garen  <ggaren@apple.com>
10779
10780        Reviewed By Maciej.
10781        Darin already reviewed this change on the branch. See <rdar://problem/4317701>.
10782        
10783        - Fixed <rdar://problem/4291345> PCRE overflow in Safari JavaScriptCore
10784
10785        No test case because there's no behavior change.
10786        
10787        * pcre/pcre_compile.c:
10788        (read_repeat_counts): Check for integer overflow / out of bounds
10789
107902006-06-05  Geoffrey Garen  <ggaren@apple.com>
10791
10792        Reviewed by aliu.
10793
10794        - Changed CString length from int to size_t. We sould probably do this
10795        for UString, too. (Darin, if you're reading this: Maciej said so.)
10796        
10797        * kjs/function.cpp:
10798        (KJS::encode):
10799        * kjs/ustring.cpp:
10800        (KJS::CString::CString):
10801        (KJS::operator==):
10802        * kjs/ustring.h:
10803        (KJS::CString::size):
10804
108052006-06-04  Geoffrey Garen  <ggaren@apple.com>
10806
10807        Reviewed by Maciej.
10808        
10809        - http://bugs.webkit.org/show_bug.cgi?id=9304
10810        Minor cleanup in JavaScriptCore
10811
10812        * kjs/value.h: Removed redundant declarations
10813
108142006-06-04  Darin Adler  <darin@apple.com>
10815
10816        Reviewed by Anders.
10817
10818        - changed deleteAllValues so it can work on "const" collections
10819          Deleting the values affects the values, not the pointers in the
10820          collection, so it's legitimate to do it to a const collection,
10821          and a case of that actually came up in the XPath code.
10822
10823        * wtf/HashMap.h:
10824        (WTF::deleteAllPairSeconds): Use const iterators.
10825        (WTF::deleteAllValues): Take const HashMap reference as a parameter.
10826        * wtf/HashSet.h:
10827        (WTF::deleteAllValues): Take const HashSet reference as a parameter,
10828        and use const iterators.
10829        * wtf/Vector.h:
10830        (WTF::deleteAllValues): Take const Vector reference as a parameter.
10831
10832        - added more functions that are present in <math.h> on some platforms,
10833          but not on others; moved here from various files in WebCore
10834
10835        * wtf/MathExtras.h:
10836        (isinf): Added.
10837        (isnan): Added.
10838        (lround): Added.
10839        (lroundf): Tweaked.
10840        (round): Added.
10841        (roundf): Tweaked.
10842        (signbit): Added.
10843
108442006-06-02  Mitz Pettel  <opendarwin.org@mitzpettel.com>
10845
10846        Reviewed by ggaren.
10847
10848        - http://bugs.webkit.org/show_bug.cgi?id=9234
10849          Implement $&, $' and $` replacement codes in String.prototype.replace
10850
10851        Test: fast/js/string-replace-3.html
10852
10853        * kjs/string_object.cpp:
10854        (substituteBackreferences): Added support for $& (matched substring),
10855        $` (everything preceding matched substring), $' (everything following
10856        matched substring) and 2-digit back references, and cleaned up a little.
10857
108582006-06-02 Adele Peterson  <adele@apple.com>
10859
10860        Reviewed by Darin.
10861
10862        Set incremental linking to no. This seems to fix a build problem I was seeing
10863        where dftables couldn't find a dll. 
10864
10865        * JavaScriptCore.vcproj/dftables/dftables.vcproj:
10866
108672006-05-26  Steve Falkenburg  <sfalken@apple.com>
10868
10869        Build fixes/tweaks
10870
10871        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
10872
10873=== JavaScriptCore-521.11 ===
10874
108752006-05-24  Geoffrey Garen  <ggaren@apple.com>
10876
10877        Reviewed by mjs.
10878        
10879        - JSC half of fix for <rdar://problem/4557926> TOT REGRESSSION: Crash
10880        occurs when attempting to view image in slideshow mode at
10881        http://d.smugmug.com/gallery/581716 ( KJS::IfNode::execute
10882        (KJS::ExecState*) + 312)
10883
10884        On alternate threads, DOMObjects remain in the
10885        ScriptInterpreter's cache because they're not collected. So, they
10886        need an opportunity to mark their children.
10887        
10888        I'm not particularly happy with this solution because it fails to
10889        resolve many outstanding issues with the DOM object cache. Since none
10890        of those issues is a crasher or a serious compatibility concern,
10891        and since the behavior of other browsers is not much to go on in this
10892        case, I've filed <rdar://problem/4561439> about that, and I'm moving on 
10893        with my life.
10894
10895        * JavaScriptCore.xcodeproj/project.pbxproj:
10896        * kjs/collector.cpp:
10897        (KJS::Collector::collect):
10898        * kjs/internal.cpp:
10899        (KJS::InterpreterImp::mark):
10900        * kjs/internal.h:
10901        * kjs/interpreter.cpp:
10902        (KJS::Interpreter::mark):
10903        * kjs/interpreter.h:
10904
10905=== JavaScriptCore-521.10 ===
10906
109072006-05-22  Timothy Hatcher  <timothy@apple.com>
10908
10909        Reviewed by Eric, Kevin and Geoff.
10910
10911        Merge open source build fixes. <rdar://problem/4555500>
10912
10913        * kjs/collector.cpp: look at the rsp register in x86_64 
10914        (KJS::Collector::markOtherThreadConservatively):
10915        * wtf/Platform.h: add x86_64 to the platform list
10916
109172006-05-19  Anders Carlsson  <acarlsson@apple.com>
10918
10919        Reviewed by Geoff.
10920
10921        http://bugs.webkit.org/show_bug.cgi?id=8993
10922        Support function declaration in case statements
10923        
10924        * kjs/grammar.y: Get rid of StatementList and use SourceElements instead.
10925        
10926        * kjs/nodes.cpp:
10927        (CaseClauseNode::evalStatements):
10928        (CaseClauseNode::processVarDecls):
10929        (CaseClauseNode::processFuncDecl):
10930        (ClauseListNode::processFuncDecl):
10931        (CaseBlockNode::processFuncDecl):
10932        (SwitchNode::processFuncDecl):
10933        * kjs/nodes.h:
10934        (KJS::CaseClauseNode::CaseClauseNode):
10935        (KJS::ClauseListNode::ClauseListNode):
10936        (KJS::ClauseListNode::getClause):
10937        (KJS::ClauseListNode::getNext):
10938        (KJS::ClauseListNode::releaseNext):
10939        (KJS::SwitchNode::SwitchNode):
10940        Add processFuncDecl for the relevant nodes.        
10941
10942        * kjs/nodes2string.cpp:
10943        (CaseClauseNode::streamTo):
10944        next got renamed to source.
10945
109462006-05-17  George Staikos <staikos@kde.org>
10947
10948        Reviewed by Maciej, Alexey, and Eric.
10949
10950        * pcre/pcre_compile.c:
10951        * pcre/pcre_get.c:
10952        * pcre/pcre_exec.c:
10953        * wtf/UnusedParam.h:
10954        Use /**/ in .c files to compile with non-C99 and non-GCC compilers.
10955
10956        * kjs/testkjs.cpp:
10957        Change include to <wtf/HashTraits.h> from "HashTraits.h" to avoid -I
10958
10959        * wtf/unicode/qt4/UnicodeQt4.h:
10960        Use correct parentheses and correct mask for utf-32 support.
10961
109622006-05-17  Alexey Proskuryakov  <ap@nypop.com>
10963
10964        Reviewed by Darin.
10965
10966        - fix http://bugs.webkit.org/show_bug.cgi?id=8870
10967        Crash typing in Yahoo auto-complete widget.
10968
10969        Test: fast/js/regexp-stack-overflow.html
10970
10971        * pcre/pcre-config.h: Define NO_RECURSE.
10972
109732006-05-16  George Staikos <staikos@kde.org>
10974
10975        Reviewed by Maciej.
10976
10977        Fix some warnings and strict compilation errors.
10978
10979        * kjs/nodes.cpp: 
10980        * kjs/value.cpp: 
10981
109822006-05-15  Alexey Proskuryakov  <ap@nypop.com>
10983
10984        * make-generated-sources.sh: Changed to be executable and removed
10985        text in the file generated by "svn diff".
10986
109872006-05-15  Geoffrey Garen  <ggaren@apple.com>
10988
10989        Reviewed by Maciej.
10990
10991        - Fixed <rdar://problem/4534904> please do not treat "debugger" as
10992        a reserved word while parsing JavaScript (and other ECMA reserved
10993        words) 
10994
10995        AKA 
10996
10997        http://bugs.webkit.org/show_bug.cgi?id=6179 
10998        We treat "char" as a reserved word in JavaScript and firefox/IE do
10999        not
11000
11001        (1) I unreserved most of the spec's "future reserved words" because 
11002        they're not reserved in IE or FF. (Most, but not all, because IE
11003        somewhat randomly *does* reserve a few of them.)
11004        (2) I made 'debugger' a legitimate statement that acts like an empty
11005        statement because FF and IE support it.
11006        
11007        * kjs/grammar.y:
11008        * kjs/keywords.table:
11009
110102006-05-15  Tim Omernick  <timo@apple.com>
11011
11012        Reviewed by John Sullivan.
11013
11014        Part of <rdar://problem/4466508> Add 64-bit support to the Netscape Plugin API
11015
11016        Added to the Netscape Plugin API the concept of "plugin drawing models".  The drawing model
11017        determines the kind of graphics context created by the browser for the plugin, as well as 
11018        the Mac types of various Netscape Plugin API data structures.
11019
11020        There is a drawing model to represent the old QuickDraw-based API.  It is used by default
11021        if QuickDraw is available on the system, unless the plugin specifies another drawing model.
11022
11023        The big change is the addition of the CoreGraphics drawing model.  A plugin may request this
11024        drawing model to obtain access to a CGContextRef for drawing, instead of a QuickDraw CGrafPtr.
11025
11026        * bindings/npapi.h:
11027        Define NP_NO_QUICKDRAW when compiling 64-bit; there is no 64-bit QuickDraw.
11028        Added NPNVpluginDrawingModel, NPNVsupportsQuickDrawBool, and NPNVsupportsCoreGraphicsBool
11029        variables.
11030        Added NPDrawingModel enumeration.  Currently the only drawing models are QuickDraw and
11031        CoreGraphics.
11032        NPRegion's type now depends on the drawing model specified by the plugin.
11033        NP_Port is now only defined when QuickDraw is available.
11034        Added NP_CGContext, which is the type of the NPWindow's "window" member in CoreGraphics mode.
11035
110362006-05-13  Kevin M. Ollivier  <kevino@theolliviers.com>
11037
11038        Reviewed by Darin, landed by ap.
11039
11040        - http://bugs.webkit.org/show_bug.cgi?id=8528
11041          Bakefiles (and generated Makefiles) for wx and gdk ports
11042
11043        * make-generated-sources.sh: 
11044        Added script to configure environment to run DerivedSources.make
11045        
11046        * JavaScriptCoreSources.bkl:
11047        Added JavaScriptCore sources list for Bakefile.
11048        
11049        * jscore.bkl:
11050        Bakefile used to generate JavaScriptCore project files 
11051        (currently only used by wx and gdk ports)
11052
110532006-05-09  Steve Falkenburg  <sfalken@apple.com>
11054
11055        Fix Windows build.
11056        Minor fixes to WTF headers.
11057        
11058        Reviewed by kevin.
11059
11060        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Fix include dirs, paths to files. 
11061        * JavaScriptCore.vcproj/testkjs/testkjs.vcproj: Fix include dirs.
11062        * wtf/Assertions.h: include Platform.h to get definition for COMPILER()
11063        * wtf/Vector.h: include FastMalloc.h for definition of fastMalloc, fastFree
11064
110652006-05-09  Maciej Stachowiak  <mjs@apple.com>
11066
11067        Rubber stamped by Anders.
11068        
11069        - renamed kxmlcore to wtf
11070        
11071        kxmlcore --> wtf
11072        KXMLCore --> WTF
11073        KXC --> WTF
11074
11075        * JavaScriptCore.xcodeproj/project.pbxproj:
11076        * bindings/c/c_instance.cpp:
11077        * bindings/objc/WebScriptObject.mm:
11078        * kjs/JSImmediate.h:
11079        * kjs/Parser.cpp:
11080        * kjs/Parser.h:
11081        * kjs/array_object.cpp:
11082        * kjs/collector.cpp:
11083        (KJS::Collector::registerThread):
11084        * kjs/collector.h:
11085        * kjs/config.h:
11086        * kjs/function.cpp:
11087        (KJS::isStrWhiteSpace):
11088        * kjs/function.h:
11089        * kjs/identifier.cpp:
11090        * kjs/internal.cpp:
11091        * kjs/internal.h:
11092        * kjs/lexer.cpp:
11093        (Lexer::shift):
11094        (Lexer::isWhiteSpace):
11095        (Lexer::isIdentStart):
11096        (Lexer::isIdentPart):
11097        * kjs/lookup.cpp:
11098        * kjs/nodes.cpp:
11099        * kjs/nodes.h:
11100        * kjs/number_object.cpp:
11101        * kjs/object.h:
11102        * kjs/property_map.cpp:
11103        * kjs/property_map.h:
11104        * kjs/string_object.cpp:
11105        (StringProtoFunc::callAsFunction):
11106        * kjs/testkjs.cpp:
11107        (testIsInteger):
11108        * kjs/ustring.cpp:
11109        * kjs/ustring.h:
11110        * kxmlcore: Removed.
11111        * kxmlcore/AlwaysInline.h: Removed.
11112        * kxmlcore/Assertions.cpp: Removed.
11113        * kxmlcore/Assertions.h: Removed.
11114        * kxmlcore/FastMalloc.cpp: Removed.
11115        * kxmlcore/FastMalloc.h: Removed.
11116        * kxmlcore/FastMallocInternal.h: Removed.
11117        * kxmlcore/Forward.h: Removed.
11118        * kxmlcore/HashCountedSet.h: Removed.
11119        * kxmlcore/HashFunctions.h: Removed.
11120        * kxmlcore/HashMap.h: Removed.
11121        * kxmlcore/HashSet.h: Removed.
11122        * kxmlcore/HashTable.cpp: Removed.
11123        * kxmlcore/HashTable.h: Removed.
11124        * kxmlcore/HashTraits.h: Removed.
11125        * kxmlcore/ListRefPtr.h: Removed.
11126        * kxmlcore/Noncopyable.h: Removed.
11127        * kxmlcore/OwnArrayPtr.h: Removed.
11128        * kxmlcore/OwnPtr.h: Removed.
11129        * kxmlcore/PassRefPtr.h: Removed.
11130        * kxmlcore/Platform.h: Removed.
11131        * kxmlcore/RefPtr.h: Removed.
11132        * kxmlcore/TCPageMap.h: Removed.
11133        * kxmlcore/TCSpinLock.h: Removed.
11134        * kxmlcore/TCSystemAlloc.cpp: Removed.
11135        * kxmlcore/TCSystemAlloc.h: Removed.
11136        * kxmlcore/UnusedParam.h: Removed.
11137        * kxmlcore/Vector.h: Removed.
11138        * kxmlcore/VectorTraits.h: Removed.
11139        * kxmlcore/unicode: Removed.
11140        * kxmlcore/unicode/Unicode.h: Removed.
11141        * kxmlcore/unicode/UnicodeCategory.h: Removed.
11142        * kxmlcore/unicode/icu: Removed.
11143        * kxmlcore/unicode/icu/UnicodeIcu.h: Removed.
11144        * kxmlcore/unicode/posix: Removed.
11145        * kxmlcore/unicode/qt3: Removed.
11146        * kxmlcore/unicode/qt4: Removed.
11147        * kxmlcore/unicode/qt4/UnicodeQt4.h: Removed.
11148        * pcre/pcre_get.c:
11149        * wtf: Added.
11150        * wtf/Assertions.cpp:
11151        * wtf/Assertions.h:
11152        * wtf/FastMalloc.cpp:
11153        (WTF::TCMalloc_ThreadCache::Scavenge):
11154        (WTF::do_malloc):
11155        (WTF::do_free):
11156        (WTF::TCMallocGuard::TCMallocGuard):
11157        (WTF::malloc):
11158        (WTF::free):
11159        (WTF::calloc):
11160        (WTF::cfree):
11161        (WTF::realloc):
11162        * wtf/FastMalloc.h:
11163        * wtf/FastMallocInternal.h:
11164        * wtf/Forward.h:
11165        * wtf/HashCountedSet.h:
11166        * wtf/HashFunctions.h:
11167        * wtf/HashMap.h:
11168        * wtf/HashSet.h:
11169        * wtf/HashTable.cpp:
11170        * wtf/HashTable.h:
11171        * wtf/HashTraits.h:
11172        * wtf/ListRefPtr.h:
11173        * wtf/Noncopyable.h:
11174        * wtf/OwnArrayPtr.h:
11175        * wtf/OwnPtr.h:
11176        * wtf/PassRefPtr.h:
11177        * wtf/RefPtr.h:
11178        * wtf/TCSystemAlloc.cpp:
11179        (TCMalloc_SystemAlloc):
11180        * wtf/Vector.h:
11181        * wtf/VectorTraits.h:
11182        * wtf/unicode/UnicodeCategory.h:
11183        * wtf/unicode/icu/UnicodeIcu.h:
11184
111852006-05-08  Timothy Hatcher  <timothy@apple.com>
11186
11187        Reviewed by Tim O.
11188
11189        * bindings/npapi.h: do not define #pragma options align=mac68k if we are 64-bit
11190
111912006-05-07  Darin Adler  <darin@apple.com>
11192
11193        Reviewed and landed by Maciej.
11194
11195        - fix http://bugs.webkit.org/show_bug.cgi?id=8765
11196        Random crashes on TOT since the form state change
11197        
11198        I haven't figured out how to construct a test for this, but this does seem to fix the
11199        problem; Mitz mentioned that a double-destroy was occurring in these functions.
11200        
11201        * kxmlcore/HashMap.h: (KXMLCore::HashMap::remove): Use RefCounter::deref instead of calling
11202        ~ValueType, because ~ValueType often results in a double-destroy, since the HashTable also
11203        destroys the element based on the storage type. The RefCounter template correctly does work
11204        only in cases where ValueType and ValueStorageType differ and this class is what's used
11205        elsewhere for the same purpose; I somehow missed this case when optimizing HashMap.
11206        * kxmlcore/HashSet.h: (KXMLCore::HashSet::remove): Ditto.
11207        
112082006-05-05  Darin Adler  <darin@apple.com>
11209
11210        - http://bugs.webkit.org/show_bug.cgi?id=8722
11211          IE compatibility fix in date parsing
11212
11213        * kjs/date_object.cpp: (KJS::parseDate): Merged change that George Staikos provided
11214        from KDE 3.4.3 branch that allows day values of 0 and values that are > 1000.
11215
112162006-05-04  Anders Carlsson  <andersca@mac.com>
11217
11218        Reviewed by Maciej.
11219
11220        http://bugs.webkit.org/show_bug.cgi?id=8734
11221        Would like a Vector::append that takes another Vector
11222        
11223        * kxmlcore/Vector.h:
11224        (KXMLCore::::append):
11225        New function that takes another array.
11226
112272006-05-02  Steve Falkenburg  <sfalken@apple.com>
11228
11229        Reviewed by eric.
11230
11231        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: set NDEBUG for release build
11232        * kxmlcore/FastMalloc.cpp: Prevent USE_SYSTEM_MALLOC from being defined twice
11233
112342006-05-02  Anders Carlsson  <andersca@mac.com>
11235
11236        Reviewed by Maciej.
11237
11238        * kxmlcore/HashMap.h:
11239        (KXMLCore::::operator):
11240        Return *this
11241
112422006-05-01  Tim Omernick  <timo@apple.com>
11243
11244        Reviewed by Tim Hatcher.
11245
11246        <rdar://problem/4476875> Support printing for embedded Netscape plugins
11247
11248        * bindings/npapi.h:
11249        Fixed struct alignment problem in our npapi.h.  Structs must be 68k-aligned on both pre-Mac OS X
11250        and Mac OS X systems, as this is what plugins expect.
11251
112522006-05-01  Timothy Hatcher  <timothy@apple.com>
11253
11254        Reviewed by Maciej.
11255        
11256        <rdar://problem/4308243> 8F36 Regression: crash in malloc_consolidate if you use a .PAC file
11257
11258        The original fix missed the oversized cell case. Added a test for "currentThreadIsMainThread || 
11259        imp->m_destructorIsThreadSafe" where we collect oversized cells.
11260
11261        We don't have a way to test PAC files yet, so there's no test attached.
11262
11263        * kjs/collector.cpp:
11264        (KJS::Collector::collect): test the thread when we collect oversized cells
11265
112662006-05-01  Tim Omernick  <timo@apple.com>
11267
11268        Reviewed by Adele.
11269
11270        <rdar://problem/4526114> REGRESSION (two days ago): LOG() just prints @ for NSObject substitutions
11271
11272        * kxmlcore/Assertions.cpp:
11273        Changed sense of strstr("%@") check.  I already made the same fix to the WebBrowser assertions.
11274
112752006-04-28  Steve Falkenburg  <sfalken@apple.com>
11276
11277        Reviewed by kdecker
11278        
11279        Actually apply the change that was reviewed insted of checking it in with an #if 0 (oops).
11280
11281        * kjs/testkjs.cpp:
11282        (main): Suppress C runtime alerts
11283
112842006-04-28  Steve Falkenburg  <sfalken@apple.com>
11285
11286        Reviewed by kdecker
11287
11288        Suppress error reporting dialog that blocks Javascript tests from completing.
11289        
11290        Real error is due to an overflow in the date/time handling functions that needs
11291        to be addressed, but this will prevent the hang running the Javascript tests
11292        on the build bot (along with the related changes).
11293        
11294        * kjs/testkjs.cpp:
11295        (main): Suppress C runtime alerts
11296
112972006-04-27  Geoffrey Garen  <ggaren@apple.com>
11298
11299        Reviewed by Maciej
11300
11301        - Minor fixups I discovered while working on the autogenerator.
11302        
11303        * kjs/lookup.cpp:
11304        (findEntry): ASSERT that size is not 0, because otherwise we'll % by 0,
11305        compute a garbage address, and possibly crash.
11306        * kjs/lookup.h:
11307        (cacheGlobalObject): Don't enumerate cached objects -- ideally, they
11308        would be hidden entirely.
11309
113102006-04-21  Kevin M. Ollivier  <kevino@theolliviers.com>
11311
11312        Reviewed by Darin.
11313
11314        - http://bugs.webkit.org/show_bug.cgi?id=8507
11315          Compilation fixes for building on gcc 4.0.2, and without precomp headers
11316
11317        * kjs/operations.h:
11318        * kxmlcore/Assertions.cpp:
11319        * kxmlcore/FastMalloc.cpp:
11320        Added necessary headers to resolve compilation issues when not using
11321        precompiled headers.
11322        
11323        * kjs/value.h: Declare the JSCell class before friend declaration  
11324        to resolve compilation issues with gcc 4.0.2.
11325        
11326        * kxmlcore/Platform.h: Set Unicode support to use ICU on platforms
11327        other than KDE (previously only defined for Win and Mac OS)
11328                
113292006-04-18  Eric Seidel  <eseidel@apple.com>
11330
11331        Reviewed by ggaren.
11332
11333        Fix "new Function()" to correctly use lexical scoping.
11334        Add ScopeChain::print() function for debugging.
11335        <rdar://problem/4067864> REGRESSION (125-407): JavaScript failure on PeopleSoft REN Server
11336
11337        * kjs/function_object.cpp:
11338        (FunctionObjectImp::construct):
11339        * kjs/scope_chain.cpp:
11340        (KJS::ScopeChain::print):
11341        * kjs/scope_chain.h:
11342
113432006-04-14  James G. Speth  <speth@end.com>
11344
11345        Reviewed by Timothy.
11346
11347        Bug 8389: support for Cocoa bindings - binding an NSTreeController to the WebView's DOM
11348        http://bugs.webkit.org/show_bug.cgi?id=8389
11349
11350        Adds a category to WebScriptObject with array accessors for KVC/KVO.
11351
11352        If super valueForKey: fails it will call valueForUndefinedKey:, which is
11353        important because it causes the right behavior to happen with bindings using
11354        the "Raises for Not Applicable Keys" flag and the "Not Applicable Placeholder"
11355
11356        * bindings/objc/WebScriptObject.mm:
11357        (-[WebScriptObject valueForKey:]):
11358        (-[WebScriptObject count]):
11359        (-[WebScriptObject objectAtIndex:]):
11360        (-[WebUndefined description]): return "undefined"
11361
113622006-04-13  Geoffrey Garen  <ggaren@apple.com>
11363
11364        Reviewed by Darin.
11365
11366        * kjs/internal.cpp:
11367        (KJS::InterpreterImp::initGlobalObject): Add the built-in object
11368        prototype to the end of the global object's prototype chain instead of
11369        just blowing away its existing prototype. We need to do this because
11370        the window object has a meaningful prototype now.
11371
113722006-04-13  Maciej Stachowiak  <mjs@apple.com>
11373
11374        Reviewed by Geoff.
11375        
11376        - fix testkjs to not show false-positive KJS::Node leaks in debug builds
11377
11378        * kjs/testkjs.cpp:
11379        (doIt):
11380        (kjsmain):
11381
113822006-04-11  Geoffrey Garen  <ggaren@apple.com>
11383
11384        Reviewed by Maciej.
11385
11386        Minor code cleanup -- passes all the JS tests.
11387
11388        * kjs/object_object.cpp:
11389        (ObjectObjectImp::construct):
11390        (ObjectObjectImp::callAsFunction):
11391
113922006-04-11  Darin Adler  <darin@apple.com>
11393
11394        - another attempt to fix Windows build -- Vector in Forward.h was not working
11395
11396        * kxmlcore/Forward.h: Remove Vector.
11397        * kxmlcore/Vector.h: Add back default arguments, remove include of
11398        Forward.h.
11399
114002006-04-11  Darin Adler  <darin@apple.com>
11401
11402        - try to fix Windows build -- HashForward.h was not working
11403
11404        * kxmlcore/HashForward.h: Removed.
11405
11406        * JavaScriptCore.xcodeproj/project.pbxproj: Remove HashForward.h.
11407        * kjs/collector.h: Remove use of HashForward.h.
11408        * kxmlcore/HashCountedSet.h: Remove include of HashForward.h, restore
11409        default arguments.
11410        * kxmlcore/HashMap.h: Ditto.
11411        * kxmlcore/HashSet.h: Ditto.
11412
114132006-04-11  David Harrison  <harrison@apple.com>
11414
11415        Reviewed by Darin.
11416
11417        - fixed clean build, broken by Darin's check-in
11418
11419        * kjs/date_object.cpp: Add needed include of lookup.h.
11420        * kjs/regexp_object.cpp: Move include of .lut.h file below other includes.
11421
114222006-04-10  Darin Adler  <darin@apple.com>
11423
11424        Rubber-stamped by John Sullivan.
11425
11426        - switched from a shell script to a makefile for generated files
11427        - removed lots of unneeded includes
11428        - added new Forward.h and HashForward.h headers that allow compiling with
11429          fewer unneeded templates
11430
11431        * DerivedSources.make: Added.
11432        * generate-derived-sources: Removed.
11433        * JavaScriptCore.xcodeproj/project.pbxproj: Added new files, changed to use
11434        DerivedSources.make.
11435
11436        * kxmlcore/Forward.h: Added.
11437        * kxmlcore/HashForward.h: Added.
11438
11439        * kxmlcore/HashCountedSet.h: Include HashForward for default args.
11440        * kxmlcore/HashMap.h: Ditto.
11441        * kxmlcore/HashSet.h: Ditto.
11442
11443        * kjs/object.h:
11444        * kjs/object.cpp:
11445        Moved KJS_MAX_STACK into the .cpp file.
11446
11447        * bindings/NP_jsobject.cpp:
11448        * bindings/c/c_instance.h:
11449        * bindings/jni/jni_class.h:
11450        * bindings/jni/jni_runtime.h:
11451        * bindings/jni/jni_utility.h:
11452        * bindings/objc/WebScriptObject.mm:
11453        * bindings/objc/WebScriptObjectPrivate.h:
11454        * bindings/objc/objc_class.h:
11455        * bindings/objc/objc_class.mm:
11456        * bindings/objc/objc_instance.h:
11457        * bindings/objc/objc_instance.mm:
11458        * bindings/objc/objc_runtime.mm:
11459        * bindings/objc/objc_utility.mm:
11460        * bindings/runtime.h:
11461        * bindings/runtime_array.cpp:
11462        * bindings/runtime_array.h:
11463        * bindings/runtime_method.cpp:
11464        * bindings/runtime_method.h:
11465        * bindings/runtime_object.cpp:
11466        * bindings/runtime_root.h:
11467        * kjs/JSImmediate.cpp:
11468        * kjs/Parser.h:
11469        * kjs/array_object.cpp:
11470        * kjs/array_object.h:
11471        * kjs/bool_object.cpp:
11472        * kjs/bool_object.h:
11473        * kjs/collector.h:
11474        * kjs/context.h:
11475        * kjs/debugger.cpp:
11476        * kjs/error_object.h:
11477        * kjs/function_object.h:
11478        * kjs/internal.h:
11479        * kjs/lexer.cpp:
11480        * kjs/math_object.cpp:
11481        * kjs/math_object.h:
11482        * kjs/nodes.cpp:
11483        * kjs/nodes.h:
11484        * kjs/number_object.cpp:
11485        * kjs/number_object.h:
11486        * kjs/object_object.cpp:
11487        * kjs/operations.cpp:
11488        * kjs/protected_reference.h:
11489        * kjs/reference.h:
11490        * kjs/reference_list.h:
11491        * kjs/regexp_object.h:
11492        * kjs/string_object.cpp:
11493        * kjs/string_object.h:
11494        * kjs/testkjs.cpp:
11495        * kjs/value.cpp:
11496        * kjs/value.h:
11497        * kxmlcore/HashTable.h:
11498        * kxmlcore/ListRefPtr.h:
11499        * kxmlcore/TCPageMap.h:
11500        * kxmlcore/Vector.h:
11501        Removed unneeded header includes.
11502
115032006-04-09  Geoffrey Garen  <ggaren@apple.com>
11504
11505        Reviewed by eric.
11506
11507        - Fixed http://bugs.webkit.org/show_bug.cgi?id=8284
11508        prevent unnecessary entries in the "nodes with extra refs" hash table
11509
11510        This patch switches manually RefPtr exchange with use of
11511        RefPtr::release to ensure that a node's ref count never tops 1
11512        (in the normal case).
11513
11514        * kjs/nodes.cpp:
11515        (BlockNode::BlockNode):
11516        (CaseBlockNode::CaseBlockNode):
11517        * kjs/nodes.h:
11518        (KJS::ArrayNode::ArrayNode):
11519        (KJS::ObjectLiteralNode::ObjectLiteralNode):
11520        (KJS::ArgumentsNode::ArgumentsNode):
11521        (KJS::VarStatementNode::VarStatementNode):
11522        (KJS::ForNode::ForNode):
11523        (KJS::CaseClauseNode::CaseClauseNode):
11524        (KJS::FuncExprNode::FuncExprNode):
11525        (KJS::FuncDeclNode::FuncDeclNode):
11526
115272006-04-08  Alexey Proskuryakov  <ap@nypop.com>
11528
11529        Reviewed by Darin.
11530
11531        One more attempt - use reinterpret_cast, rather than static_cast.
11532
115332006-04-08  Alexey Proskuryakov  <ap@nypop.com>
11534
11535        Reviewed by Darin.
11536
11537        An attempt to fix Win32 build - ICU uses wchar_t on Windows, so we need a type cast.
11538
11539        * kxmlcore/unicode/icu/UnicodeIcu.h:
11540        (KXMLCore::Unicode::toLower):
11541        (KXMLCore::Unicode::toUpper):
11542
115432006-04-08  Alexey Proskuryakov  <ap@nypop.com>
11544
11545        Reviewed by Darin.
11546
11547        - fix http://bugs.webkit.org/show_bug.cgi?id=8264
11548        toLowerCase and toUpperCase don't honor special mappings
11549
11550        Test: fast/js/string-capitalization.html
11551
11552        * JavaScriptCore.xcodeproj/project.pbxproj: Added KXMLCore::Unicode headers to the project.
11553        * icu/unicode/putil.h: Added (copied from WebCore).
11554        * icu/unicode/uiter.h: Ditto.
11555        * icu/unicode/ustring.h: Ditto.
11556        * kjs/string_object.cpp:
11557        (StringProtoFunc::callAsFunction): Use the new KXMLCore::Unicode::toUpper() and toLower().
11558        * kjs/ustring.cpp: Removed unused (and evil) UChar::toLower() and toUpper().
11559        * kjs/ustring.h: Ditto.
11560
11561        * kxmlcore/unicode/Unicode.h: Corrected capitalization of the word Unicode.
11562        * kxmlcore/unicode/UnicodeCategory.h: Renamed include guard macro to match file name.
11563
11564        * kxmlcore/unicode/icu/UnicodeIcu.h:
11565        (KXMLCore::Unicode::toLower): Work on strings, not individual characters. Use ICU root locale.
11566        (KXMLCore::Unicode::toUpper): Ditto.
11567        (KXMLCore::Unicode::isFormatChar): Use int32_t, which can hold a complete code point.
11568        (KXMLCore::Unicode::isSeparatorSpace): Ditto.
11569        (KXMLCore::Unicode::category): Ditto.
11570        * kxmlcore/unicode/qt4/UnicodeQt4.h:
11571        (KXMLCore::Unicode::toLower): Work on strings, not individual characters.
11572        (KXMLCore::Unicode::toUpper): Ditto.
11573        (KXMLCore::Unicode::isFormatChar): Use int32_t, which can hold a complete code point.
11574        (KXMLCore::Unicode::isSeparatorSpace): Ditto.
11575        (KXMLCore::Unicode::category): Ditto.
11576
11577        * tests/mozilla/ecma/String/15.5.4.12-1.js: Corrected expected results.
11578        * tests/mozilla/ecma/String/15.5.4.12-5.js: Corrected expected results.
11579
115802006-04-05  Darin Adler  <darin@apple.com>
11581
11582        - attempt to fix Windows build
11583
11584        * kxmlcore/HashMap.h: (KXMLCore::HashMap::remove): Use (*it). instead of it->.
11585        * kxmlcore/HashSet.h: (KXMLCore::HashSet::remove): Ditto.
11586
115872006-04-05  Darin Adler  <darin@apple.com>
11588
11589        - attempt to fix Windows build
11590
11591        * os-win32/stdint.h: Add int8_t, uint8_t, int64_t.
11592
115932006-04-05  Darin Adler  <darin@apple.com>
11594
11595        Reviewed by Maciej.
11596
11597        - fix memory leak introduced by the previous change
11598
11599        * kxmlcore/HashTable.h: Specialize NeedsRef so that it correctly returns true when
11600        the value in question is a pair where one of the pair needs a ref and the other
11601        of the pair does not.
11602
116032006-04-05  Darin Adler  <darin@apple.com>
11604
11605        Reviewed by Maciej.
11606
11607        - JavaScriptCore part of fix for http://bugs.webkit.org/show_bug.cgi?id=8049
11608          StringImpl hash traits deleted value creates an init routine for WebCore
11609          <rdar://problem/4442248> REGRESSION: WebCore has init routines (8049)
11610
11611        Change HashMap and HashSet implementation so they fold various types together.
11612        This allows us to implement maps and sets that use RefPtr<WebCore::StringImpl>
11613        and WebCore::String in terms of the underlying raw pointer type, and hence use
11614        -1 for the deleted value.
11615
11616        * kxmlcore/HashTraits.h: Added a new type to HashTraits, StorageTraits, which is a
11617        type to be used when storing a value that has the same layout as the type itself.
11618        This is used only for non-key cases. In the case of keys, the hash function must also
11619        be considered. Moved emptyValue out of GenericHashTraitsBase into GenericHashTraits.
11620        Added a new bool to HashTraits, needsRef, which indicates whether the type needs
11621        explicit reference counting. If the type itself has needsRef true, but the storage
11622        type has needsRef false, then the HashSet or HashMap has to handle the reference
11623        counting explicitly. Added hash trait specializations for all signed integer values
11624        that give -1 as the deleted value. Gave all integers StorageTraits of the canonical
11625        integer type of the same size so int and long will share code. Gave all pointers and
11626        RefPtrs StorageTraits of the appropriately sized integer type. Removed redundant
11627        TraitType and emptyValue definitions in the pointer specialization for HashTraits.
11628        Added PairBaseHashTraits, which doesn't try to set up needsDestruction and deletedValue.
11629        Useful for types where we don't want to force the existence of deletedValue, such as
11630        the type of a pair in a HashMap which is not the actual storage type. Removed an
11631        unneeded parameter from the DeletedValueAssigner template. Added HashKeyStorageTraits
11632        template, which determines what type can be used to store a given hash key type with
11633        a given hash function, and specialized it for pointers and RefPtr so that pointer
11634        hash tables share an underlying HashTable that uses IntHash.
11635
11636        * kxmlcore/HashTable.h: Added HashTableConstIteratorAdapter, HashTableIteratorAdapter,
11637        NeedsRef, RefCountManagerBase, RefCountManager, HashTableRefCountManagerBase, and
11638        HashTableRefCountManager. All are used by both HashSet and HashMap to handle hash
11639        tables where the type stored is not the same as the real value type.
11640        
11641        * kxmlcore/HashFunctions.h: Added a new struct named IntTypes that finds an
11642        integer type given a sizeof value. Renamed pointerHash to intHash and made it
11643        use overloading and take integer parameters. Added an IntHash struct which is
11644        a hash function that works for integers. Changed PtrHash to call IntHash with
11645        an appropriately sized integer. Made IntHash the default hash function for
11646        many integer types. Made PtrHash the default hash function for RefPtr as well
11647        as for raw pointers.
11648
11649        * kxmlcore/HashSet.h: Changed implementation to use a separate "storage type"
11650        derived from the new traits. The HashTable will use the storage type and all
11651        necessary translation and ref/deref is done at the HashSet level. Also reorganized
11652        the file so that the HashSet is at the top and has no inline implementation inside
11653        it so it's easy to read the interface to HashSet.
11654
11655        * kxmlcore/HashMap.h: Changed implementation to use a separate "storage type"
11656        derived from the new traits. The HashTable will use the storage type and all
11657        necessary translation and ref/deref is done at the HashMap level. Also reorganized
11658        the file so that the HashMap is at the top and has no inline implementation inside
11659        it so it's easy to read the interface to HashMap.
11660
11661        * kxmlcore/HashMapPtrSpec.h: Removed. Superceded by optimizations in HashMap itself.
11662
11663        * JavaScriptCore.xcodeproj/project.pbxproj: Remove HashMapPtrSpec.h, resort files,
11664        and also remove some unnecessary build settings from the aggregate target that
11665        generates derived sources.
11666        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Ditto.
11667
116682006-04-04  Timothy Hatcher  <timothy@apple.com>
11669
11670        Reviewed by Darin.
11671
11672        The Debug and Release frameworks are now built with install paths relative to the build products directory.
11673        This removes the need for other projects to build with -framework WebCore and -framework JavaScriptCore. 
11674
11675        * JavaScriptCore.xcodeproj/project.pbxproj:
11676
116772006-04-04  Eric Seidel  <eseidel@apple.com>
11678
11679        Reviewed by ggaren.
11680
11681        Fix win32 build.
11682        Disable ASSERT redefinition warnings for now.
11683
11684        * JavaScriptCore.vcproj/testkjs/testkjs.vcproj:
11685        * kxmlcore/Assertions.h:
11686
116872006-04-04  Bjrn Graf  <bjoern.graf@gmail.com>
11688
11689        Reviewed by ggaren & darin.  Landed by eseidel.
11690
11691        Integrate CURL version of gettimeofday
11692        http://bugs.webkit.org/show_bug.cgi?id=7399
11693        Disable crash report dialogs for testkjs.exe in Release mode
11694        http://bugs.webkit.org/show_bug.cgi?id=8113
11695
11696        * kjs/testkjs.cpp:
11697        (StopWatch::start):
11698        (StopWatch::stop):
11699        (StopWatch::getElapsedMS):
11700        (main):
11701        (kjsmain):
11702
117032006-04-04  Eric Seidel  <eseidel@apple.com>
11704
11705        Reviewed by mjs.
11706
11707        * kjs/number_object.cpp:
11708        (NumberProtoFunc::callAsFunction): remove trunc() to fix win32.
11709
117102006-03-12  Maciej Stachowiak  <mjs@apple.com>
11711
11712        Reviewed by Darin.
11713        
11714        - fixed "toPrecision sometimes messes up the last digit on intel Macs"
11715        http://bugs.webkit.org/show_bug.cgi?id=7748
11716
11717        * kjs/number_object.cpp:
11718        (intPow10): Compute integer powers of 10 using exponentiation by squaring.
11719        (NumberProtoFunc::callAsFunction): Use intPow10(n) in place of all pow(10.0, n),
11720        plus a bit of refactoring.
11721
117222006-04-03  Darin Adler  <darin@apple.com>
11723
11724        - tweak config.h and Platform.h to try to get buildbot working
11725          (making some small changes at the same time)
11726
11727        * kjs/config.h: Removed now-unneeded HAVE_ICU.
11728        * kxmlcore/Platform.h: Tweak how platform gets set up. Move all the
11729        USE stuff to the end.
11730
117312006-04-03  George Staikos   <staikos@opensource.apple.com>
11732
11733        Reviewed by Maciej.
11734
11735        Fix Win32 build breakage from previous commit, remove unused forward.
11736
117372006-04-03  George Staikos   <staikos@opensource.apple.com>
11738
11739        Reviewed by Maciej.
11740
11741        Implement a unicode abstraction layer to make JavaScriptCore much more
11742        easily ported to other platforms without having to take in libicu.  Also
11743        makes the unicode related code easier to understand.
11744
117452006-04-03  Timothy Hatcher  <timothy@apple.com>
11746
11747        Reviewed by Adele.
11748
11749        Fixes <rdar://problem/4498338> JavaScriptCore fails to compile for ppc64
11750        Other 64 bit build fixes.
11751
11752        * kjs/collector.cpp:
11753        (KJS::Collector::markOtherThreadConservatively): test for __DARWIN_UNIX03 and use __r1
11754        * kjs/dtoa.cpp:
11755        (Bigint::): cast PRIVATE_mem to unsigned to prevent warning
11756        * bindings/jni/jni_utility.cpp:
11757        (KJS::Bindings::getJavaVM): cast jniError to long to prevent format warning
11758        (KJS::Bindings::getJNIEnv): cast jniError to long to prevent format warning
11759        * bindings/runtime_root.cpp:
11760        (KJS::Bindings::addNativeReference): cast CFDictionaryGetValue to unsigned long to prevent warning
11761        (KJS::Bindings::removeNativeReference): cast CFDictionaryGetValue to unsigned long to prevent warning
11762
117632006-03-31  Darin Adler  <darin@apple.com>
11764
11765        Reviewed by Geoff.
11766
11767        - <rdar://problem/4395622> API: WebScriptObject.h incorrectly reports that -isSelectorExcludedFromWebScript returns NO by default
11768
11769        * bindings/objc/WebScriptObject.h: Fixed comment.
11770
117712006-03-31  Eric Seidel  <eseidel@apple.com>
11772
11773        Reviewed by mjs.
11774
11775        A bit more code cleanup.
11776
11777        * bindings/c/c_utility.cpp:
11778        (KJS::Bindings::convertValueToNPVariant):
11779        * bindings/objc/objc_runtime.mm:
11780        (convertValueToObjcObject):
11781        * bindings/objc/objc_utility.mm:
11782        (KJS::Bindings::convertValueToObjcValue):
11783        * kjs/function.cpp:
11784        (KJS::GlobalFuncImp::callAsFunction):
11785        * kjs/interpreter.cpp:
11786        (KJS::ExecState::lexicalInterpreter):
11787        * kjs/interpreter.h:
11788        * kjs/operations.cpp:
11789        (KJS::equal):
11790
117912006-03-30  Eric Seidel  <eseidel@apple.com>
11792
11793        Reviewed by anders.
11794
11795        Small code-style update.
11796
11797        * kjs/operations.cpp:
11798        (KJS::isNaN):
11799        (KJS::isInf):
11800        (KJS::isPosInf):
11801        (KJS::isNegInf):
11802        (KJS::equal):
11803        (KJS::strictEqual):
11804        (KJS::relation):
11805        (KJS::maxInt):
11806        (KJS::minInt):
11807        (KJS::add):
11808        (KJS::mult):
11809
118102006-03-31  Anders Carlsson  <andersca@mac.com>
11811
11812        Reviewed by Maciej.
11813
11814        Make sure the GetterSetterImp objects are marked as well.
11815        
11816        * kjs/internal.cpp:
11817        (KJS::GetterSetterImp::mark):
11818        Call JSCell::mark().
11819
118202006-03-30  Eric Seidel  <eseidel@apple.com>
11821
11822        Reviewed by ggaren.
11823
11824        * kjs/nodes.h: Some various small style fixes.
11825
118262006-03-30  Eric Seidel  <eseidel@apple.com>
11827
11828        Reviewed by ggaren.
11829
11830        Clean-up style issues in node.h, remove redundant initializations.
11831
11832        * kjs/nodes.h:
11833        (KJS::StatementNode::evaluate):
11834        (KJS::ArrayNode::ArrayNode):
11835        (KJS::ObjectLiteralNode::ObjectLiteralNode):
11836        (KJS::ArgumentsNode::ArgumentsNode):
11837        (KJS::NewExprNode::NewExprNode):
11838        (KJS::CaseClauseNode::CaseClauseNode):
11839        (KJS::FuncDeclNode::FuncDeclNode):
11840
118412006-03-30  Tim Omernick  <timo@apple.com>
11842
11843        Reviewed by Geoff.
11844
11845        <rdar://problem/4212626> REGRESSION: LIVECONNECT: JavaScript type for Java Strings is function,
11846        not object
11847
11848        * bindings/runtime.h:
11849        (KJS::Bindings::Instance::implementsCall):
11850        New method.  Returns false by default.  Concrete subclasses can override this return true when
11851        the bound object may be called as a function.
11852        (KJS::Bindings::Instance::invokeDefaultMethod):
11853        Since bound objects are no longer treated as functions by default, we can return jsUndefined()
11854        here instead of in concrete subclasses that decide not to implement the default method
11855        functionality.
11856
11857        * bindings/runtime_object.cpp:
11858        (RuntimeObjectImp::implementsCall):
11859        Don't assume that the bound object is a function; instead, let the object instance decide whether
11860        it is callable.
11861
11862        * bindings/c/c_instance.h:
11863        * bindings/c/c_instance.cpp:
11864        (KJS::Bindings::CInstance::implementsCall):
11865        The object is callable if its class has an invokeDefault function.
11866
11867        * bindings/objc/objc_instance.h:
11868        * bindings/objc/objc_instance.mm:
11869        (ObjcInstance::implementsCall):
11870        The object is callable if the ObjC instance responds to -invokeDefaultMethodWithArguments:.
11871
11872        * bindings/jni/jni_instance.h:
11873        * bindings/jni/jni_instance.cpp:
11874        Moved bogus invokeDefaultMethod() to superclass.
11875
118762006-03-29  Geoffrey Garen  <ggaren@apple.com>
11877
11878        Reviewed by Darin.
11879
11880        - JavaScriptCore side of fix for <rdar://problem/4308243> 8F36 
11881        Regression: crash in malloc_consolidate if you use a .PAC file
11882
11883        The crash was a result of threaded deallocation of thread-unsafe
11884        objects. Pure JS objects are thread-safe because all JS execution
11885        is synchronized through JSLock. However, JS objects that wrap WebCore 
11886        objects are thread-unsafe because JS and WebCore execution are not 
11887        synchronized.  That unsafety comes into play when the collector 
11888        deallocates a JS object that wraps a WebCore object, thus causing the 
11889        WebCore object to be deallocated.
11890
11891        The solution here is to have each JSCell know whether it is safe to
11892        collect on a non-main thread, and to avoid collecting unsafe cells
11893        when on a non-main thread.
11894
11895        We don't have a way to test PAC files yet, so there's no test
11896        attached to this patch.
11897
11898        * kjs/collector.cpp:
11899        (KJS::Collector::collect):
11900        (1) Added the test "currentThreadIsMainThread || 
11901        imp->m_destructorIsThreadSafe". 
11902
11903        * kjs/protect.h:
11904        (KJS::gcProtectNullTolerant):
11905        (KJS::gcUnprotectNullTolerant):
11906        * kjs/value.h:
11907        (KJS::JSCell::JSCell): The bools here must be bitfields, otherwise
11908        m_destructorIsThreadSafe becomes another whole word, ruining the
11909        collector optimizations we've made based on the size of a JSObject.
11910        * kxmlcore/FastMalloc.cpp:
11911        (KXMLCore::currentThreadIsMainThread):
11912        (KXMLCore::fastMallocRegisterThread):
11913        * kxmlcore/FastMalloc.h:
11914
119152006-03-28  Darin Adler  <darin@apple.com>
11916
11917        Reviewed by Geoff.
11918
11919        - change some code that resulted in init routines on Mac OS X -- if the framework has
11920          init routines it will use memory and slow down applications that link with WebKit
11921          even in cases where those applications don't use WebKit
11922
11923        * kjs/date_object.cpp: Changed constants that were derived by multiplying other constants
11924        to use immediate numbers instead. Apparently, double constant expressions of the type we
11925        had here are evaluated at load time.
11926
11927        * kjs/list.cpp: Can't use OwnArrayPtr in ListImp because of the global instances of
11928        ListImp, so go back to using a plain old pointer.
11929        (KJS::List::List): Set overflow to 0 when initializing ListImp.
11930        (KJS::List::release): Replace a clear call with a delete and explicit set to 0.
11931        (KJS::List::append): Use raw pointers, and do a delete [] instead of finessing it with
11932        a swap of OwnArrayPtr.
11933        (KJS::List::copyFrom): Remove now-unneeded get().
11934        (KJS::List::copyTail): Ditto.
11935
11936        * kjs/ustring.cpp: Changed UString::Rep::empty initializer a bit so that it doesn't get
11937        a static initializer routine. Had to get rid of one level of constant to get the compiler
11938        to understand it could initialize without any code.
11939
11940        - added a build step that checks for init routines
11941
11942        * JavaScriptCore.xcodeproj/project.pbxproj: Deleted now-unused custom build rule that
11943        was replaced by the generate-derived-sources script a while back. Added a custom build
11944        phase that invokes the check-for-global-initializers script.
11945
119462006-03-28  Timothy Hatcher  <timothy@apple.com>
11947
11948        Reviewed by Eric.
11949
11950        fixes <rdar://problem/4458539> Unable to include Security(public) and WebKit(private) headers
11951
11952        * bindings/npapi.h: added #defines after the #ifndefs
11953
119542006-03-27  Maciej Stachowiak  <mjs@apple.com>
11955
11956        Reviewed by Anders.
11957        
11958        - fixed <rdar://problem/4489745> REGRESSION: Safari crashes at to display http://www.lgphilips-lcd.com/
11959
11960        * kjs/nodes.cpp:
11961        (Node::deref): take into account the case where the extra refcount table was never created
11962
119632006-03-23  David Carson <dacarson@gmail.com>
11964
11965        Reviewed by Darin.
11966        
11967        - JSObject in LiveConnect not working.
11968        http://bugs.webkit.org/show_bug.cgi?id=7917
11969
11970        * bindings/jni_jsobject.cpp:
11971        (JavaJSObject::convertJObjectToValue): Was trying to retrieve the native pointer from the wrong base
11972        class, and the GetFieldID was using the wrong signature.
11973
119742006-03-23  Darin Adler  <darin@apple.com>
11975
11976        Reviewed by Maciej.
11977
11978        - fix buildbot
11979
11980        * JavaScriptCore.xcodeproj/project.pbxproj: Change target name to JavaScriptCore (it was "include"!?).
11981        Also add -Y 3 option for linker.
11982
119832006-03-23  Darin Adler  <darin@apple.com>
11984
11985        Reviewed by Maciej.
11986
11987        - fix http://bugs.webkit.org/show_bug.cgi?id=7726
11988          REGRESSION: orbitz calendar fails (JavaScript function serialization/parsing)
11989
11990        * kjs/object.h: Take function name, as well as source URL and line number, when
11991        using the special overloaded construct for making functions.
11992        * kjs/object.cpp: (KJS::JSObject::construct): Ditto.
11993        * kjs/function_object.h: Ditto.
11994        * kjs/function_object.cpp: (FunctionObjectImp::construct): Pass a name when
11995        constructing the function rather than null. Use "anonymous" when making a
11996        function using the default function constructor.
11997
11998        * kjs/nodes2string.cpp: (FuncDeclNode::streamTo): Put a line break just before
11999        a function declaration.
12000
12001        - unrelated fix
12002
12003        * kxmlcore/HashMapPtrSpec.h: Add missing needed friend declaration.
12004
120052006-03-23  Darin Adler  <darin@apple.com>
12006
12007        Reviewed by Maciej.
12008
12009        - fix http://bugs.webkit.org/show_bug.cgi?id=7805
12010          LEAK: method name leaks in KJS::Bindings::CInstance::invokeMethod
12011
12012        * bindings/c/c_utility.h: Remove NPN_UTF16FromString declaration (not implemented).
12013        * bindings/c/c_utility.cpp:
12014        (KJS::Bindings::convertValueToNPVariant): Use DOUBLE_TO_NPVARIANT,
12015        BOOLEAN_TO_NPVARIANT, VOID_TO_NPVARIANT, NULL_TO_NPVARIANT, and
12016        OBJECT_TO_NPVARIANT. In the case of OBJECT, call _NPN_RetainObject in
12017        one case and remove a _NPN_ReleaseObject in another because this
12018        should return a retained value.
12019        (KJS::Bindings::convertNPVariantToValue): Use NPVARIANT_TO_BOOLEAN,
12020        NPVARIANT_TO_INT32, and NPVARIANT_TO_DOUBLE.
12021
12022        * bindings/c/c_runtime.h: Removed implementations of CMethod::name and
12023        CField::name that called _NPN_UTF8FromIdentifier and hence leaked.
12024        * bindings/c/c_runtime.cpp:
12025        (KJS::Bindings::CMethod::name): Added. Returns the string from inside the
12026        method object.
12027        (KJS::Bindings::CField::name): Added. Returns the string from inside the
12028        field object.
12029        (KJS::Bindings::CField::valueFromInstance): Added call to _NPN_ReleaseVariantValue
12030        on the result of getProperty after using it to fix a storage leak.
12031        (KJS::Bindings::CField::setValueToInstance): Added call to _NPN_ReleaseVariantValue
12032        after pasing a value to setProperty now that the conversion function does a retain.
12033
12034        * bindings/c/c_instance.cpp:
12035        (KJS::Bindings::CInstance::invokeMethod): Changed to use Vector for a local
12036        stack buffer. Removed special case for NPVARIANT_IS_VOID because the
12037        convertNPVariantToValue function handles that properly.
12038        (KJS::Bindings::CInstance::invokeDefaultMethod): Ditto.
12039
12040        * bindings/NP_jsobject.h: Formatting changes only.
12041        * bindings/NP_jsobject.cpp:
12042        (jsDeallocate): Changed parameter type so we don't need a function cast.
12043        (_NPN_InvokeDefault): Use VOID_TO_NPVARIANT.
12044        (_NPN_Invoke): Use NULL_TO_NPVARIANT and VOID_TO_NPVARIANT.
12045        (_NPN_Evaluate): Use VOID_TO_NPVARIANT.
12046        (_NPN_GetProperty): Use NULL_TO_NPVARIANT and VOID_TO_NPVARIANT.
12047
12048        * bindings/c/c_class.cpp: Formatting changes only.
12049        * bindings/c/c_class.h: Formatting changes only.
12050
12051        * bindings/npruntime_priv.h: Removed obsolete and now-unused functions:
12052        NPN_VariantIsVoid, NPN_VariantIsNull, NPN_VariantIsUndefined,
12053        NPN_VariantIsBool, NPN_VariantIsInt32, NPN_VariantIsDouble,
12054        NPN_VariantIsString, NPN_VariantIsObject, NPN_VariantToBool,
12055        NPN_VariantToInt32, NPN_VariantToDouble, NPN_VariantToString,
12056        NPN_VariantToStringCopy, NPN_VariantToObject, NPN_InitializeVariantAsVoid,
12057        NPN_InitializeVariantAsNull, NPN_InitializeVariantAsUndefined,
12058        NPN_InitializeVariantWithBool, NPN_InitializeVariantWithInt32,
12059        NPN_InitializeVariantWithDouble, NPN_InitializeVariantWithString,
12060        NPN_InitializeVariantWithObject, and NPN_InitializeVariantWithVariant.
12061        * bindings/npruntime.cpp:
12062        (getIntIdentifierDictionary): Don't bother creating custom callbacks for the
12063        integer dictionary since the default behavior is fine for integers.
12064
120652006-03-23  Mark Rowe  <opendarwin.org@bdash.net.nz>
12066
12067        Reviewed and landed by Maciej.
12068
12069        - WebKit no longer builds with bison 2.1
12070        http://bugs.webkit.org/show_bug.cgi?id=7923
12071
12072        * generate-derived-sources:  Handle generated header named either grammar.cpp.h
12073        or grammar.hpp.
12074
120752006-03-22  Maciej Stachowiak  <mjs@apple.com>
12076
12077        - fix the build
12078
12079        * JavaScriptCore.xcodeproj/project.pbxproj:
12080
120812006-03-21  Maciej Stachowiak  <mjs@apple.com>
12082
12083        * kjs/generate-derived-sources: Set executable property.
12084
120852006-03-21  Maciej Stachowiak  <mjs@apple.com>
12086
12087        Reviewed by Darin.
12088        
12089        Ensure that generated source dependencies are handled properly, as follows:
12090        
12091        - Made an external script that generates the sources into a
12092          DerivedSources dir in the build products directory.
12093        - Added a new build target that builds all the generated sources
12094          if needed. Sadly it has to be a target, not a phase for Xcode to notice changes.
12095        - Added the DerivedSources dir in question to the include path.
12096        - Added the new DerivedSources dir and its contents to the project as build-relative.
12097        
12098        * JavaScriptCore.xcodeproj/project.pbxproj:
12099        * kjs/generate-derived-sources: Added. Based on the windows version - maybe someday they
12100        can share more.
12101
121022006-03-11  Maciej Stachowiak  <mjs@apple.com>
12103
12104        Reviewed by Darin.
12105        
12106        - fixed "charAt layout test fails on intel macs; some NaNs are printed as -NaN"
12107        http://bugs.webkit.org/show_bug.cgi?id=7745
12108
12109        * kjs/ustring.cpp:
12110        (KJS::UString::from): Use "NaN" for all NaN values, regardless of sign.
12111
121122006-03-16  Maciej Stachowiak  <mjs@apple.com>
12113
12114        Reviewed by Darin.
12115        
12116        - tweaks to my change to redo KJS::Node refcounting
12117
12118        * kjs/nodes.cpp:
12119        (Node::ref):
12120        (Node::deref):
12121        (Node::refcount):
12122        (Node::clearNewNodes):
12123        * kjs/nodes.h:
12124
121252006-03-16  Darin Adler  <darin@apple.com>
12126
12127        Reviewed by Maciej.
12128
12129        - fixed Vector so that you can pass a reference to something in the vector
12130          to the append or insert functions
12131
12132        * kxmlcore/Vector.h:
12133        (KXMLCore::Vector::expandCapacity): Added new overloads that take a pointer to adjust
12134        and return the adjusted value of the pointer.
12135        (KXMLCore::Vector::append): Pass a pointer when expanding the vector, and use it when
12136        adding the new element. Makes the case where the element moves when the vector
12137        is expanded work.
12138        (KXMLCore::Vector::insert): Ditto.
12139
121402006-03-15  Eric Seidel  <eseidel@apple.com>
12141
12142        Reviewed by adele.
12143
12144        Build fix.
12145
12146        * kjs/date_object.cpp:
12147        (KJS::DateProtoFunc::callAsFunction): use size() not "len()"
12148
121492006-03-15  Eric Seidel  <eseidel@apple.com>
12150
12151        Reviewed by mjs.
12152
12153        Fix CString copy constructor, fixes Date.parse("") on Win32.
12154
12155        * kjs/date_object.cpp:
12156        (KJS::DateProtoFunc::callAsFunction):
12157        * kjs/ustring.cpp:
12158        (KJS::CString::CString):
12159        (KJS::CString::operator=):
12160
121612006-03-13  Maciej Stachowiak  <mjs@apple.com>
12162
12163        Reviewed by Anders.
12164        
12165        - KJS::Node and KJS::StatementNode are bigger than they need to be
12166        http://bugs.webkit.org/show_bug.cgi?id=7775
12167
12168        The memory usage of Node was reduced by 2 machine words per node:
12169
12170        - sourceURL was removed and only kept on FunctionBodyNode. The
12171        source URL can only be distinct per function or top-level program node, 
12172        and you always have one.
12173        
12174        - refcount was removed and kept in a separate hashtable when
12175        greater than 1. newNodes set represents floating nodes with
12176        refcount of 0. This helps because almost all nodes have a refcount of 1
12177        for almost all of their lifetime.
12178        
12179        * bindings/runtime_method.cpp:
12180        (RuntimeMethod::RuntimeMethod): Pass null body, added FIXME.
12181        * kjs/Parser.cpp:
12182        (KJS::clearNewNodes): New nodes are tracked in nodes.cpp now, but still clear
12183        them at the appropriate time.
12184        * kjs/context.h:
12185        (KJS::ContextImp::currentBody): added; used to retrieve source URL and sid
12186        for current code.
12187        (KJS::ContextImp::pushIteration): moved here from LabelStack
12188        (KJS::ContextImp::popIteration): ditto
12189        (KJS::ContextImp::inIteration): ditto
12190        (KJS::ContextImp::pushSwitch): ditto
12191        (KJS::ContextImp::popSwitch): ditto
12192        (KJS::ContextImp::inSwitch): ditto
12193        * kjs/function.cpp:
12194        (KJS::FunctionImp::FunctionImp): Add FunctionBodyNode* parameter.
12195        (KJS::FunctionImp::callAsFunction): Pass body to ContextImp.
12196        (KJS::FunctionImp::argumentsGetter): _context renamed to m_context.
12197        (KJS::DeclaredFunctionImp::DeclaredFunctionImp): Pass body to superclass
12198        constructor.
12199        (KJS::GlobalFuncImp::callAsFunction): Pass progNode as body for ContextImp in
12200        eval.
12201        * kjs/function.h: Move body field from DeclaredFunctionImp to
12202        FunctionImp.
12203        * kjs/grammar.y: Change DBG; statements no longer have a sourceid.
12204        * kjs/internal.cpp:
12205        (KJS::ContextImp::ContextImp): Initialize new m_currentBody, m_iterationDepth
12206        and m_switchDepth data members. New FunctionBodyNode* parameter - the
12207        function body provides source URL and SourceId.
12208        (KJS::InterpreterImp::mark): Use exception() function, not _exception directly.
12209        (KJS::InterpreterImp::evaluate): Pass progNode to ContextImp constructor
12210        to use as the body.
12211        * kjs/internal.h:
12212        (KJS::LabelStack::LabelStack): Remove iteration depth and switch depth;
12213        statement label stacks don't need these and it bloats their size. Put them
12214        in the ContextImp instead.
12215        * kjs/interpreter.cpp:
12216        (KJS::ExecState::lexicalInterpreter): Renamed _context to m_context.
12217        * kjs/interpreter.h:
12218        (KJS::ExecState::dynamicInterpreter): Renamed _context to m_context.
12219        (KJS::ExecState::context): ditto
12220        (KJS::ExecState::setException): Renamed _exception to m_exception
12221        (KJS::ExecState::clearException): ditto
12222        (KJS::ExecState::exception): ditto
12223        (KJS::ExecState::hadException): ditto
12224        (KJS::ExecState::ExecState): ditto both above renames
12225        * kjs/nodes.cpp:
12226        (Node::Node): Removed initialization of line, source URL and refcount. Add to
12227        local newNodes set instead of involving parser.
12228        (Node::ref): Instead of managing refcount directly, story refcount over 1 in a
12229        HashCountedSet, and keep a separate HashSet of "floating" nodes with refcount
12230        0.
12231        (Node::deref): ditto
12232        (Node::refcount): ditto
12233        (Node::clearNewNodes): Destroy anything left in the new nodes set.
12234        (currentSourceId): Inline helper to get sourceId from function body via context.
12235        (currentSourceURL): ditto for sourceURL.
12236        (Node::createErrorCompletion): use new helper
12237        (Node::throwError): ditto
12238        (Node::setExceptionDetailsIfNeeded): ditto
12239        (StatementNode::StatementNode): remove initialization of l0 and sid, rename
12240        l1 to m_lastLine.
12241        (StatementNode::setLoc): Set own m_lastLine and Node's m_line.
12242        (StatementNode::hitStatement): Get sid, first line, last line in the proper new ways.
12243        (StatListNode::StatListNode): updated for setLoc changes
12244        (BlockNode::BlockNode): ditto
12245        (DoWhileNode::execute): excpect iteraton counts on ContextImp, not LabelStack
12246        (WhileNode::execute): ditto
12247        (ForNode::execute): ditto
12248        (ForInNode::execute): ditto
12249        (ContinueNode::execute): excpect inIteration on ContextImp, not LabelStack
12250        (BreakNode::execute): excpect inIteration and inSwitch on ContextImp, not LabelStack
12251        (SwitchNode::execute): expect switch counts on ContextImp, not LabelStack
12252        (FunctionBodyNode::FunctionBodyNode): update for new setLoc
12253        (FunctionBodyNode::processFuncDecl): reindent
12254        (SourceElementsNode::SourceElementsNode): update for new setLoc
12255        * kjs/nodes.h:
12256        (KJS::Node::lineNo): Renamed _line to m_line
12257        (KJS::StatementNode::firstLine): Use lineNo()
12258        (KJS::StatementNode::lastLine): Renamed l1 to m_lastLine
12259        (KJS::FunctionBodyNode::sourceId): added
12260        (KJS::FunctionBodyNode::sourceURL): added
12261        * kjs/testkjs.cpp:
12262
122632006-03-14  Geoffrey Garen  <ggaren@apple.com>
12264
12265        - Fixed <rdar://problem/4478239> string sort puts "closed" before 
12266        "close"
12267
12268        Reviewed by Eric.
12269
12270        * kjs/ustring.cpp:
12271        (KJS::compare): Inverted a < in order to treat the longer string as > 
12272        the shorter string.
12273
122742006-03-12  Alexey Proskuryakov  <ap@nypop.com>
12275
12276        Reviewed by Maciej.
12277
12278        - fix http://bugs.webkit.org/show_bug.cgi?id=7708
12279        REGRESSION: Flash callback to JavaScript function not working.
12280
12281        Test: plugins/invoke.html
12282
12283        * bindings/c/c_utility.cpp:
12284        (KJS::Bindings::convertUTF8ToUTF16): Return a correct string length.
12285
122862006-03-08  Eric Seidel  <eseidel@apple.com>
12287
12288        Reviewed by darin.
12289
12290        Partially fix JS on win32 by fixing hash table generation.
12291
12292        * kjs/create_hash_table: limit << results to 32 bits.
12293        * kjs/testkjs.cpp:
12294        (TestFunctionImp::callAsFunction):
12295
122962006-03-07  Darin Adler  <darin@apple.com>
12297
12298        * kxmlcore/Vector.h: Quick fix to try to get Windows compiling again.
12299
123002006-03-07  Darin Adler  <darin@apple.com>
12301
12302        Reviewed by Anders.
12303
12304        - fix http://bugs.webkit.org/show_bug.cgi?id=7655
12305          unwanted output while running layout tests
12306
12307        * kjs/lexer.cpp: (Lexer::lex): Turn off the "yylex: ERROR" message.
12308        * kjs/regexp.cpp: (KJS::RegExp::RegExp): Remove the code to log errors from PCRE
12309        to standard output. I think we should arrange for the error text to be in JavaScript
12310        exceptions instead at some point.
12311        * kxmlcore/Vector.h: Add a check for overflow so that we'll abort if we pass a
12312        too-large size rather than allocating a buffer smaller than requested.
12313
123142006-03-06  David Carson <dacarson@gmail.com>
12315
12316        Reviewed by Darin, landed by ap.
12317
12318        - Fixed http://bugs.webkit.org/show_bug.cgi?id=7582
12319        c_utility.cpp contains CFString OS X platform-dependent code; should use ICU
12320
12321        Tested with test case from:
12322        http://bugs.webkit.org/show_bug.cgi?id=5163
12323
12324        * bindings/c_utility.cpp
12325        (convertUTF8ToUTF16): Changed to using Unicode converter from ICU, and manual Latin-1 conversion.
12326        * icu/unicode/ucnv.h: Copied from WebCore.
12327        * icu/unicode/ucnv_err.h: Ditto.
12328        * icu/unicode/uenum.h: Ditto.
12329
123302006-03-05  Darin Adler  <darin@apple.com>
12331
12332        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Updated.
12333
123342006-03-06  Mitz Pettel  <opendarwin.org@mitzpettel.com>
12335
12336        Fix suggested by Alexey Proskuryakov <ap@nypop.com>, reviewed by Maciej and Hyatt.
12337        
12338        - fix http://bugs.webkit.org/show_bug.cgi?id=7601
12339          REGRESSION (r13089): Reproducible crash dereferencing a deallocated element on google image search
12340
12341        * kxmlcore/Platform.h: Corrected the define to enable USE(MULTIPLE_THREADS) on Mac OS X.
12342
123432006-03-05  Darin Adler  <darin@apple.com>
12344
12345        Reviewed by Maciej.
12346
12347        - http://bugs.webkit.org/show_bug.cgi?id=7616
12348          get all references to KJS::Node out of internal.h
12349
12350        * JavaScriptCore.xcodeproj/project.pbxproj: Updated for file changes.
12351
12352        * kjs/Parser.cpp: Added.
12353        * kjs/Parser.h: Added.
12354
12355        * kjs/internal.cpp: Removed the Parser class.
12356        * kjs/internal.h: Ditto. Also removed unnecessary declarations of classes
12357        not used in this header.
12358
12359        * kjs/nodes.h: Added an include of "Parser.h".
12360        * kjs/function.h: Added a declaration of FunctionBodyNode.
12361
123622006-03-05  Geoffrey Garen  <ggaren@apple.com>
12363
12364        Reviewed by Maciej.
12365
12366        - JSC support for the fix for <rdar://problem/4467143> JavaScript 
12367        enumeration of HTML element properties skips DOM node properties
12368
12369        * kjs/lookup.h: 
12370        (1) Added the KJS_DEFINE_PROTOTYPE_WITH_PROTOTYPE macro. The 
12371        class definiton macro needs to know about the prototype's prototype so 
12372        that the class constructor properly sets it. 
12373        (2) Removed the KJS_IMPLEMENT_PROTOTYPE_WITH_PARENT macro. The class
12374        implementation macro does not need to know about the prototype's
12375        prototype, since getOwnPropertySlot should only look in the current 
12376        object's property map, and not its prototype's.
12377
123782006-03-05  Andrew Wellington  <proton@wiretapped.net>
12379
12380        Reviewed by Eric, landed by ap.
12381        
12382        - Remove unused breakpoint bool from StatementNodes. No test provided as
12383        there is no functionality change.
12384
12385        * kjs/nodes.cpp:
12386        (StatementNode::StatementNode):
12387        * kjs/nodes.h:
12388
123892006-03-03  Geoffrey Garen  <ggaren@apple.com>
12390
12391        Reviewed by Darin.
12392
12393        - Fixed <rdar://problem/4465598> REGRESSION (TOT): Crash occurs at 
12394        http://maps.google.com/?output=html ( KJS::Identifier::add(KJS::UString::Rep*)
12395
12396        This regression was caused by my fix for 4448098. I failed to account for the
12397        deleted entry sentinel in the mehtod that saves the contents of a property map to 
12398        the back/forward cache.
12399
12400        Manual test in WebCore/manual-tests/property-map-save-crash.html
12401
12402        * kjs/property_map.cpp:
12403        (KJS::deletedSentinel): Use 1 instead of -1 to facilitate an easy bit mask
12404        (KJS::isValid): New function: checks if a key is null or the deleted sentinel
12405        (KJS::PropertyMap::~PropertyMap): Fixed up the branch logic here for readability
12406        and a slight performance win
12407        (KJS::PropertyMap::clear):
12408        (KJS::PropertyMap::rehash):
12409        (KJS::PropertyMap::addSparseArrayPropertiesToReferenceList):
12410        (KJS::PropertyMap::save): Check keys with isValid()
12411
124122006-03-02  Maciej Stachowiak  <mjs@apple.com>
12413
12414        - now fix mac build again
12415
12416        * kjs/identifier.cpp:
12417
124182006-03-02  Maciej Stachowiak  <mjs@apple.com>
12419
12420        Rubber stamped by Anders and Eric.
12421
12422        - add fpconst.cpp to win32 build, it is now needed
12423
12424        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
12425        * kjs/fpconst.cpp:
12426
124272006-03-02  Maciej Stachowiak  <mjs@apple.com>
12428
12429        Reviewed by Eric.
12430
12431        - fix windows build, broken by my last patch
12432
12433        * kjs/JSImmediate.cpp:
12434        * kjs/identifier.cpp:
12435        * kxmlcore/FastMalloc.cpp:
12436        * kxmlcore/Platform.h:
12437
124382006-03-01  Maciej Stachowiak  <mjs@apple.com>
12439
12440        Reviewed by Darin.
12441        
12442        - Set up new prototype macros and avoid using #if without defined() in JSC
12443        
12444        Added new PLATFORM macros and related, to make sure #if's all check if relevant macros
12445        are defined, and to separate core OS-level dependencies from operating environment
12446        dependencies so you can, e.g., build KDE on Mac or Windows.
12447
12448        * kxmlcore/Platform.h: Added.
12449
12450        - deploy them everywhere in JavaScriptCore
12451        
12452        * JavaScriptCore.xcodeproj/project.pbxproj:
12453        * bindings/jni/jni_utility.cpp:
12454        (KJS::Bindings::convertValueToJValue):
12455        * bindings/objc/WebScriptObject.mm:
12456        * bindings/objc/objc_instance.mm:
12457        (ObjcInstance::end):
12458        * bindings/softlinking.h:
12459        * bindings/testbindings.mm:
12460        (main):
12461        * kjs/JSLock.cpp:
12462        * kjs/collector.cpp:
12463        (KJS::Collector::markCurrentThreadConservatively):
12464        (KJS::Collector::markOtherThreadConservatively):
12465        (KJS::Collector::markStackObjectsConservatively):
12466        * kjs/config.h:
12467        * kjs/date_object.cpp:
12468        (gmtoffset):
12469        (KJS::formatTime):
12470        (KJS::DateProtoFunc::callAsFunction):
12471        (KJS::DateObjectImp::construct):
12472        (KJS::makeTime):
12473        * kjs/dtoa.cpp:
12474        * kjs/fpconst.cpp:
12475        (KJS::sizeof):
12476        (KJS::):
12477        * kjs/grammar.y:
12478        * kjs/identifier.cpp:
12479        * kjs/internal.cpp:
12480        * kjs/interpreter.cpp:
12481        (KJS::Interpreter::evaluate):
12482        (KJS::Interpreter::createLanguageInstanceForValue):
12483        * kjs/interpreter.h:
12484        * kjs/lookup.cpp:
12485        * kjs/lookup.h:
12486        * kjs/math_object.cpp:
12487        * kjs/object.cpp:
12488        * kjs/object.h:
12489        * kjs/operations.cpp:
12490        (KJS::isNaN):
12491        (KJS::isInf):
12492        (KJS::isPosInf):
12493        (KJS::isNegInf):
12494        * kjs/operations.h:
12495        * kjs/regexp.cpp:
12496        (KJS::RegExp::RegExp):
12497        (KJS::RegExp::~RegExp):
12498        (KJS::RegExp::match):
12499        * kjs/regexp.h:
12500        * kjs/testkjs.cpp:
12501        (StopWatch::start):
12502        (StopWatch::stop):
12503        (StopWatch::getElapsedMS):
12504        * kjs/ustring.cpp:
12505        * kjs/ustring.h:
12506        * kxmlcore/AlwaysInline.h:
12507        * kxmlcore/Assertions.cpp:
12508        * kxmlcore/Assertions.h:
12509        * kxmlcore/FastMalloc.cpp:
12510        (KXMLCore::):
12511        * kxmlcore/FastMalloc.h:
12512        * kxmlcore/FastMallocInternal.h:
12513        * kxmlcore/HashTable.h:
12514        * kxmlcore/TCPageMap.h:
12515        * kxmlcore/TCSpinLock.h:
12516        (TCMalloc_SpinLock::Lock):
12517        (TCMalloc_SpinLock::Unlock):
12518        (TCMalloc_SlowLock):
12519        * kxmlcore/TCSystemAlloc.cpp:
12520        (TCMalloc_SystemAlloc):
12521        * os-win32/stdint.h:
12522
125232006-02-28  Geoffrey Garen  <ggaren@apple.com>
12524
12525        Reviewed by Darin.
12526
12527        - Fixed <rdar://problem/4448098> Switch PropertyMap deleted entry 
12528        placeholder to -1 from UString::Rep::null
12529
12530        This turned out to be only a small speedup (.12%). That's within the 
12531        margin of error for super accurate JS iBench, but Shark confirms the 
12532        same, so I think it's worth landing.
12533
12534        FYI, I also confirmed that the single entry optimization in 
12535        PropertyMap is a 3.2% speedup.
12536
12537        * kjs/property_map.cpp:
12538        (KJS::PropertyMap::~PropertyMap):
12539        (KJS::PropertyMap::clear):
12540        (KJS::PropertyMap::put):
12541        (KJS::PropertyMap::insert):
12542        (KJS::PropertyMap::rehash):
12543        (KJS::PropertyMap::remove):
12544        (KJS::PropertyMap::addSparseArrayPropertiesToReferenceList):
12545        (KJS::PropertyMap::checkConsistency):
12546        * kjs/property_map.h:
12547        (KJS::PropertyMap::deletedSentinel):
12548
125492006-02-27  Eric Seidel  <eseidel@apple.com>
12550
12551        Rubber-stamped by darin.
12552
12553        Remove fpconst.cpp, unused on win32 and the cause of linker warnings.
12554
12555        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
12556
125572006-02-27  Eric Seidel  <eseidel@apple.com>
12558
12559        Reviewed by mjs.
12560
12561        Fix Assertions.cpp to compile on win32.
12562
12563        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
12564        * kxmlcore/Assertions.cpp:
12565
125662006-02-27  Eric Seidel  <eseidel@apple.com>
12567
12568        Reviewed by mjs.
12569
12570        Made Assertions.cpp platform independent.
12571        Moved mac-specific logging logic up into WebCore.
12572        http://bugs.webkit.org/show_bug.cgi?id=7503
12573
12574        * JavaScriptCore.xcodeproj/project.pbxproj:
12575        * kxmlcore/Assertions.cpp: Added.
12576        * kxmlcore/Assertions.h:
12577        * kxmlcore/Assertions.mm: Removed.
12578
125792006-02-27  Darin Adler  <darin@apple.com>
12580
12581        - fixed Mac Debug build, there was an unused parameter
12582
12583        * kxmlcore/FastMalloc.cpp: (KXMLCore::fastMallocRegisterThread):
12584        Remove parameter name.
12585
12586        * kjs/debugger.h: Fixed comment.
12587
125882006-02-27  Eric Seidel  <eseidel@apple.com>
12589
12590        Reviewed by darin.
12591
12592        * kxmlcore/Vector.h:
12593        (KXMLCore::deleteAllValues): fix unused variable warning
12594
125952006-02-21  Maciej Stachowiak  <mjs@apple.com>
12596
12597        Reviewed by Darin.
12598        
12599        - Turn off -Wno-unused-param for JavaScriptCore and get rid of unused params
12600        http://bugs.webkit.org/show_bug.cgi?id=7384
12601
12602        * JavaScriptCore.xcodeproj/project.pbxproj:
12603        * bindings/NP_jsobject.cpp:
12604        (jsAllocate):
12605        (_NPN_InvokeDefault):
12606        (_NPN_Evaluate):
12607        (_NPN_GetProperty):
12608        (_NPN_SetProperty):
12609        (_NPN_RemoveProperty):
12610        (_NPN_HasProperty):
12611        (_NPN_HasMethod):
12612        * bindings/c/c_class.h:
12613        (KJS::Bindings::CClass::constructorAt):
12614        * bindings/c/c_utility.cpp:
12615        (KJS::Bindings::convertNPVariantToValue):
12616        * bindings/jni/jni_class.cpp:
12617        (JavaClass::methodsNamed):
12618        (JavaClass::fieldNamed):
12619        * bindings/jni/jni_instance.cpp:
12620        (JavaInstance::invokeDefaultMethod):
12621        * bindings/jni/jni_jsobject.cpp:
12622        * bindings/jni/jni_objc.mm:
12623        (-[NSObject KJS::Bindings::]):
12624        * bindings/objc/WebScriptObject.mm:
12625        (+[WebUndefined allocWithZone:]):
12626        (-[WebUndefined initWithCoder:]):
12627        (-[WebUndefined encodeWithCoder:]):
12628        (-[WebUndefined copyWithZone:]):
12629        * bindings/objc/objc_class.h:
12630        (KJS::Bindings::ObjcClass::constructorAt):
12631        * bindings/objc/objc_class.mm:
12632        (KJS::Bindings::ObjcClass::methodsNamed):
12633        (KJS::Bindings::ObjcClass::fallbackObject):
12634        * bindings/objc/objc_instance.mm:
12635        (ObjcInstance::getValueOfUndefinedField):
12636        * bindings/objc/objc_runtime.mm:
12637        (ObjcFallbackObjectImp::getOwnPropertySlot):
12638        (ObjcFallbackObjectImp::put):
12639        (ObjcFallbackObjectImp::canPut):
12640        (ObjcFallbackObjectImp::deleteProperty):
12641        (ObjcFallbackObjectImp::toBoolean):
12642        * bindings/runtime.cpp:
12643        (KJS::Bindings::Instance::createLanguageInstanceForValue):
12644        * bindings/runtime.h:
12645        (KJS::Bindings::Instance::getValueOfUndefinedField):
12646        (KJS::Bindings::Instance::setValueOfUndefinedField):
12647        * bindings/runtime_array.cpp:
12648        (RuntimeArray::lengthGetter):
12649        (RuntimeArray::indexGetter):
12650        (RuntimeArray::put):
12651        (RuntimeArray::deleteProperty):
12652        * bindings/runtime_method.cpp:
12653        (RuntimeMethod::lengthGetter):
12654        (RuntimeMethod::execute):
12655        * bindings/runtime_object.cpp:
12656        (RuntimeObjectImp::fallbackObjectGetter):
12657        (RuntimeObjectImp::fieldGetter):
12658        (RuntimeObjectImp::methodGetter):
12659        (RuntimeObjectImp::put):
12660        (RuntimeObjectImp::canPut):
12661        (RuntimeObjectImp::deleteProperty):
12662        (RuntimeObjectImp::defaultValue):
12663        (RuntimeObjectImp::callAsFunction):
12664        * bindings/runtime_root.cpp:
12665        (performJavaScriptAccess):
12666        * kjs/array_object.cpp:
12667        (ArrayInstance::lengthGetter):
12668        (ArrayInstance::getOwnPropertySlot):
12669        (ArrayPrototype::ArrayPrototype):
12670        (ArrayPrototype::getOwnPropertySlot):
12671        * kjs/bool_object.cpp:
12672        (BooleanObjectImp::BooleanObjectImp):
12673        * kjs/date_object.cpp:
12674        (KJS::DateObjectFuncImp::DateObjectFuncImp):
12675        (KJS::DateObjectFuncImp::callAsFunction):
12676        * kjs/error_object.cpp:
12677        (ErrorObjectImp::ErrorObjectImp):
12678        (NativeErrorPrototype::NativeErrorPrototype):
12679        (NativeErrorImp::NativeErrorImp):
12680        * kjs/function.cpp:
12681        (KJS::FunctionImp::argumentsGetter):
12682        (KJS::FunctionImp::lengthGetter):
12683        (KJS::Arguments::mappedIndexGetter):
12684        (KJS::ActivationImp::argumentsGetter):
12685        (KJS::ActivationImp::put):
12686        * kjs/function_object.cpp:
12687        (FunctionObjectImp::FunctionObjectImp):
12688        * kjs/internal.cpp:
12689        (KJS::GetterSetterImp::toPrimitive):
12690        (KJS::GetterSetterImp::toBoolean):
12691        * kjs/interpreter.cpp:
12692        (KJS::Interpreter::evaluate):
12693        * kjs/interpreter.h:
12694        (KJS::Interpreter::isGlobalObject):
12695        (KJS::Interpreter::interpreterForGlobalObject):
12696        (KJS::Interpreter::isSafeScript):
12697        * kjs/lexer.cpp:
12698        (Lexer::makeIdentifier):
12699        (Lexer::makeUString):
12700        * kjs/lookup.h:
12701        (KJS::staticFunctionGetter):
12702        (KJS::staticValueGetter):
12703        * kjs/nodes.cpp:
12704        (StatementNode::processFuncDecl):
12705        (PropertyNode::evaluate):
12706        (PropertyNameNode::evaluate):
12707        * kjs/number_object.cpp:
12708        (NumberObjectImp::NumberObjectImp):
12709        (NumberObjectImp::getOwnPropertySlot):
12710        * kjs/object.cpp:
12711        (KJS::JSObject::defineGetter):
12712        (KJS::JSObject::defineSetter):
12713        (KJS::JSObject::hasInstance):
12714        (KJS::JSObject::propertyIsEnumerable):
12715        * kjs/object_object.cpp:
12716        (ObjectObjectImp::ObjectObjectImp):
12717        * kjs/property_slot.cpp:
12718        (KJS::PropertySlot::undefinedGetter):
12719        (KJS::PropertySlot::functionGetter):
12720        * kjs/reference.cpp:
12721        (KJS::Reference::getPropertyName):
12722        * kjs/reference_list.cpp:
12723        (ReferenceListIterator::operator++):
12724        * kjs/regexp_object.cpp:
12725        (RegExpObjectImp::RegExpObjectImp):
12726        (RegExpObjectImp::getValueProperty):
12727        (RegExpObjectImp::putValueProperty):
12728        * kjs/string_object.cpp:
12729        (StringInstance::lengthGetter):
12730        (StringInstance::indexGetter):
12731        (StringPrototype::StringPrototype):
12732        * kxmlcore/Assertions.mm:
12733        * kxmlcore/FastMalloc.cpp:
12734        (KXMLCore::TCMalloc_PageHeap::CheckList):
12735        * kxmlcore/HashTable.h:
12736        (KXMLCore::HashTableConstIterator::checkValidity):
12737        (KXMLCore::IdentityHashTranslator::translate):
12738        * pcre/pcre_get.c:
12739        (pcre_get_stringnumber):
12740
127412006-02-23  Darin Adler  <darin@apple.com>
12742
12743        - try to fix buildbot failure
12744
12745        * bindings/c/c_utility.cpp: Touch this file, which seems to not have been
12746        recompiled after additional inlining was introduced (Xcode bug?).
12747
127482006-02-23  Geoffrey Garen  <ggaren@apple.com>
12749
12750        Reviewed by Darin, Maciej.
12751
12752        - Inline some functions suggested by Shark. 2.9% speedup on super
12753        accurate JS iBench.
12754
12755        http://bugs.webkit.org/show_bug.cgi?id=7411
12756        <rdar://problem/4448116>
12757
12758        * kjs/nodes.h:
12759        (KJS::ArgumentsNode::evaluateList):
12760        * kjs/object.cpp:
12761        * kjs/object.h:
12762        (KJS::ScopeChain::release):
12763        (KJS::JSObject::toPrimitive):
12764        * kjs/scope_chain.cpp:
12765        * kjs/ustring.cpp:
12766        * kjs/ustring.h:
12767        (KJS::UString::toArrayIndex):
12768        * kjs/value.cpp:
12769        * kjs/value.h:
12770        (KJS::JSValue::toObject):
12771        * kxmlcore/FastMalloc.cpp:
12772        (KXMLCore::TCMalloc_ThreadCache_FreeList::Push):
12773        (KXMLCore::TCMalloc_ThreadCache_FreeList::Pop):
12774
127752006-02-21  Eric Seidel  <eseidel@apple.com>
12776
12777        Added *.user to ignore list.
12778
127792006-02-21  Eric Seidel  <eseidel@apple.com>
12780
12781        Reviewed by ggaren.
12782
12783        Add grammarWrapper.cpp to work around visual studio bug plaguing buildbot.
12784
12785        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
12786        * JavaScriptCore.vcproj/JavaScriptCore/grammarWrapper.cpp: Added.
12787
127882006-02-21  Eric Seidel  <eseidel@apple.com>
12789
12790        Reviewed by ggaren.
12791
12792        * kjs/testkjs.cpp: #if out timeval code on win32
12793
127942006-02-21  Michael Emmel  <mike.emmel@gmail.com>
12795
12796        Reviewed by Darin.
12797
12798        - fix http://bugs.webkit.org/show_bug.cgi?id=7397
12799          TCPageMap.h would not compile for me because string.h was missing
12800
12801        * kxmlcore/TCPageMap.h: Added <string.h> include.
12802
128032006-02-21  Darin Adler  <darin@apple.com>
12804
12805        Reviewed by John Sullivan.
12806
12807        - http://bugs.webkit.org/show_bug.cgi?id=7404
12808          remove a bunch of extra implementsCall overrides
12809
12810        * JavaScriptCore.xcodeproj/project.pbxproj: Sorted files.
12811
12812        * kjs/internal.h: Made InternalFunctionImp::callAsFunction pure virtual so that
12813        we'll get a compile error if some derived class neglects to implement it.
12814
12815        * kjs/function.cpp: (KJS::FunctionImp::FunctionImp): Remove unneeded initialization
12816        of param, which is an OwnPtr so it gets initialized by default.
12817
12818        * bindings/runtime_method.cpp:
12819        * bindings/runtime_method.h:
12820        * kjs/array_object.cpp:
12821        * kjs/array_object.h:
12822        * kjs/bool_object.cpp:
12823        * kjs/bool_object.h:
12824        * kjs/date_object.cpp:
12825        * kjs/date_object.h:
12826        * kjs/error_object.cpp:
12827        * kjs/error_object.h:
12828        * kjs/function.cpp:
12829        * kjs/function.h:
12830        * kjs/function_object.cpp:
12831        * kjs/function_object.h:
12832        * kjs/math_object.cpp:
12833        * kjs/math_object.h:
12834        * kjs/number_object.cpp:
12835        * kjs/number_object.h:
12836        * kjs/object_object.cpp:
12837        * kjs/object_object.h:
12838        * kjs/regexp_object.cpp:
12839        * kjs/regexp_object.h:
12840        * kjs/string_object.cpp:
12841        * kjs/string_object.h:
12842        Removed many rendundant implementations of implementsCall from subclasses of
12843        InternalFunctionImp.
12844
128452006-02-21  Darin Adler  <darin@apple.com>
12846
12847        - fixed build
12848
12849        * kjs/internal.cpp: (KJS::InternalFunctionImp::implementsCall):
12850        Oops, fixed name.
12851
128522006-02-21  Darin Adler  <darin@apple.com>
12853
12854        Change suggested by Mitz.
12855
12856        - http://bugs.webkit.org/show_bug.cgi?id=7402
12857          REGRESSION: Methods do not execute
12858
12859        * kjs/internal.h: Add implementsHasCall to InternalFunctionImp.
12860        * kjs/internal.cpp: (KJS::InternalFunctionImp::implementsHasCall):
12861        Return true. All the classes derived from InternalFunctionImp need
12862        to return true from this -- later we can remove all the extra
12863        implementations too.
12864
128652006-02-21  Maciej Stachowiak  <mjs@apple.com>
12866
12867        - fix build breakage caused by last-minute change to my patch
12868
12869        * kjs/lookup.h:
12870
128712006-02-20  Maciej Stachowiak  <mjs@apple.com>
12872
12873        Reviewed by Geoff and Darin.
12874        
12875        Patch from Maks Orlovich, based on work by David Faure, hand-applied and 
12876        significantly reworked by me.
12877        
12878        - Patch: give internal function names (KJS merge)
12879        http://bugs.webkit.org/show_bug.cgi?id=6279
12880
12881        * tests/mozilla/expected.html: Updated for newly fixed test.
12882
12883        * kjs/array_object.cpp:
12884        (ArrayProtoFunc::ArrayProtoFunc):
12885        * kjs/array_object.h:
12886        * kjs/bool_object.cpp:
12887        (BooleanPrototype::BooleanPrototype):
12888        (BooleanProtoFunc::BooleanProtoFunc):
12889        * kjs/bool_object.h:
12890        * kjs/date_object.cpp:
12891        (KJS::DateProtoFunc::DateProtoFunc):
12892        (KJS::DateObjectImp::DateObjectImp):
12893        (KJS::DateObjectFuncImp::DateObjectFuncImp):
12894        * kjs/error_object.cpp:
12895        (ErrorPrototype::ErrorPrototype):
12896        (ErrorProtoFunc::ErrorProtoFunc):
12897        * kjs/error_object.h:
12898        * kjs/function.cpp:
12899        (KJS::FunctionImp::FunctionImp):
12900        (KJS::GlobalFuncImp::GlobalFuncImp):
12901        * kjs/function.h:
12902        * kjs/function_object.cpp:
12903        (FunctionPrototype::FunctionPrototype):
12904        (FunctionProtoFunc::FunctionProtoFunc):
12905        (FunctionProtoFunc::callAsFunction):
12906        * kjs/function_object.h:
12907        * kjs/internal.cpp:
12908        (KJS::InterpreterImp::initGlobalObject):
12909        (KJS::InternalFunctionImp::InternalFunctionImp):
12910        * kjs/internal.h:
12911        (KJS::InternalFunctionImp::functionName):
12912        * kjs/lookup.h:
12913        (KJS::staticFunctionGetter):
12914        (KJS::HashEntryFunction::HashEntryFunction):
12915        (KJS::HashEntryFunction::implementsCall):
12916        (KJS::HashEntryFunction::toBoolean):
12917        (KJS::HashEntryFunction::implementsHasInstance):
12918        (KJS::HashEntryFunction::hasInstance):
12919        * kjs/math_object.cpp:
12920        (MathFuncImp::MathFuncImp):
12921        * kjs/math_object.h:
12922        * kjs/number_object.cpp:
12923        (NumberPrototype::NumberPrototype):
12924        (NumberProtoFunc::NumberProtoFunc):
12925        * kjs/number_object.h:
12926        * kjs/object.cpp:
12927        (KJS::JSObject::putDirectFunction):
12928        (KJS::Error::create):
12929        * kjs/object.h:
12930        * kjs/object_object.cpp:
12931        (ObjectPrototype::ObjectPrototype):
12932        (ObjectProtoFunc::ObjectProtoFunc):
12933        * kjs/object_object.h:
12934        * kjs/regexp_object.cpp:
12935        (RegExpPrototype::RegExpPrototype):
12936        (RegExpProtoFunc::RegExpProtoFunc):
12937        * kjs/regexp_object.h:
12938        * kjs/string_object.cpp:
12939        (StringProtoFunc::StringProtoFunc):
12940        (StringObjectImp::StringObjectImp):
12941        (StringObjectFuncImp::StringObjectFuncImp):
12942        * kjs/string_object.h:
12943        
129442006-02-20  Geoffrey Garen  <ggaren@apple.com>
12945
12946        Reviewed by Darin, with help from Eric, Maciej.
12947
12948        - More changes to support super-accurate JS iBench. Doesn't work on 
12949        Windows. (Doesn't break Windows, either.) I've filed 
12950        [http://bugs.webkit.org/show_bug.cgi?id=7399] about that. 
12951
12952        * kjs/interpreter.cpp:
12953        (KJS::Interpreter::evaluate): Print line numbers with exception output
12954        * kjs/testkjs.cpp: Changed " *" to "* " because Eric says that's the 
12955        way we roll with .cpp files.
12956        (StopWatch::StopWatch): New class. Provides microsecond-accurate 
12957        timings.
12958        (StopWatch::~StopWatch):
12959        (StopWatch::start):
12960        (StopWatch::stop):
12961        (StopWatch::getElapsedMS):
12962        (TestFunctionImp::callAsFunction): Added missing return statement. 
12963        Fixed up "run" to use refactored helper functions. Removed bogus 
12964        return statement from "quit" case. Made "print" output to stdout 
12965        instead of stderr because that makes more sense, and PERL handles 
12966        stdout better.
12967        (main): Factored out KXMLCore unit tests. Removed custom exception 
12968        printing code because the interpreter prints exceptions for you. Added 
12969        a "delete" call for the GlobalImp we allocate.
12970        (testIsInteger): New function, result of refacotring.
12971        (createStringWithContentsOfFile): New function, result of refactoring. 
12972        Renamed "code" to "buffer" to match factored-out-ness.
12973
129742006-02-20  Eric Seidel  <eseidel@apple.com>
12975
12976        Reviewed by hyatt.
12977
12978        Fix "Copy ICU DLLs..." phase.
12979
12980        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
12981        * JavaScriptCore.vcproj/JavaScriptCore/build-generated-files.sh:
12982
129832006-02-19  Darin Adler  <darin@apple.com>
12984
12985        - renamed ERROR to LOG_ERROR to fix build
12986          presumably Maciej had this change and forgot to land it
12987
12988        * kjs/collector.cpp: Removed now-unneeded #undef ERROR.
12989        * kxmlcore/Assertions.h: Renamed ERROR to LOG_ERROR.
12990        * kxmlcore/FastMalloc.cpp: Changed MESSAGE macro to use LOG_ERROR.
12991
129922006-02-18  Mitz Pettel  <opendarwin.org@mitzpettel.com>
12993
12994        Test: fast/js/toString-exception.html
12995
12996        Reviewed by Maciej.
12997
12998        - fix http://bugs.webkit.org/show_bug.cgi?id=7343
12999          REGRESSION: fast/js/toString-overrides.html fails when run multiple times
13000
13001        * kjs/array_object.cpp:
13002        (ArrayProtoFunc::callAsFunction): Remove the object from the visited elements set before
13003        returning an error.
13004
130052006-02-18  Darin Adler  <darin@apple.com>
13006
13007        Reviewed by Maciej.
13008
13009        - http://bugs.webkit.org/show_bug.cgi?id=7345
13010          add insert and remove to KXMLCore::Vector
13011
13012        * kxmlcore/Vector.h: Added "moveOverlapping", which is used in both
13013        insert and remove to slide elements within the vector. Also added
13014        "insert" and "remove" functions.
13015
130162006-02-16  Geoffrey Garen  <ggaren@apple.com>
13017
13018        Reviewed by John.
13019
13020        - Fixed <rdar://problem/4448534> TOT REGRESSION: crash in KJS::
13021        Bindings::Instance::deref when leaving page @ gigaom.com
13022
13023        * bindings/c/c_instance.cpp:
13024        (KJS::Bindings::CInstance::~CInstance): Since we cache the class object
13025        globally, we shouldn't delete it, so don't.
13026
130272006-02-16  Timothy Hatcher  <timothy@apple.com>
13028
13029        Added -Wno-deprecated-declarations to all the ObjC binding files to prevent deprecation
13030        warnings. Using <rdar://problem/4448350> to track this.
13031
13032        * JavaScriptCore.xcodeproj/project.pbxproj:
13033        * bindings/objc/objc_jsobject.h: Removed empty file.
13034        * bindings/objc/objc_jsobject.mm: Removed empty file.
13035
130362006-02-16  Tim Omernick  <timo@apple.com>
13037
13038        Reviewed by Geoff.
13039
13040        <rdar://problem/4428609> Flash Player 8.0.22 can crash Safari (and WebKit apps) with
13041        javascript disabled (7015)
13042
13043        * bindings/NP_jsobject.cpp:
13044        (_NPN_CreateNoScriptObject):
13045        Returns an NPObject which is not bound to a JavaScript object.  This kind of NPObject
13046        can be given to a plugin as the "window script object" when JavaScript is disabled.
13047        The object has a custom NPClass, NPNoScriptObjectClass, which has no defined methods.
13048        Because of this, none of the NPN_* functions called by the plugin on this "no script
13049        object" will cause entry into JavaScript code.
13050        (_NPN_InvokeDefault):
13051        Make sure the NPVariant is filled before returning from this function.  This never
13052        mattered before because we never reached this case, having only created NPObjects of
13053        the class NPScriptObjectClass.
13054        (_NPN_Invoke):
13055        ditto
13056        (_NPN_Evaluate):
13057        ditto
13058        (_NPN_GetProperty):
13059        ditto
13060
13061        * bindings/NP_jsobject.h:
13062        Declared _NPN_CreateNoScriptObject().
13063
130642006-02-16  Darin Adler  <darin@apple.com>
13065
13066        Reviewed by me, change by Peter Kuemmel.
13067
13068        * kjs/operations.cpp: (KJS::isNegInf): Fix Windows code, which was
13069        checking for positive infinity (rolling in fix from KDE side).
13070
130712006-02-15  Geoffrey Garen  <ggaren@apple.com>
13072
13073        Reviewed by Maciej, Eric.
13074
13075        - JavaScriptCore half of fix for <rdar://problem/4176077> CrashTracer: 6569
13076        crashes in DashboardClient at com.apple.JavaScriptCore:
13077        KJS::Bindings::ObjcFallbackObjectImp::type()
13078
13079        WebCore and JavaScriptCore weren't sharing Instance objects very
13080        nicely. I made them use RefPtrs, and sent them to bed without dessert.
13081
13082        * bindings/jni/jni_instance.cpp: Made _instance a RefPtr
13083        (JavaInstance::~JavaInstance):
13084        (JObjectWrapper::JObjectWrapper):
13085        * bindings/jni/jni_instance.h:
13086        (KJS::Bindings::JObjectWrapper::ref):
13087        (KJS::Bindings::JObjectWrapper::deref):
13088        * bindings/jni/jni_runtime.cpp: Made _array a RefPtr
13089        (JavaArray::~JavaArray):
13090        (JavaArray::JavaArray):
13091        * bindings/jni/jni_runtime.h:
13092        (KJS::Bindings::JavaArray::operator=):
13093        * bindings/objc/objc_runtime.h:
13094        - Prohibited copying because that would muss the ref count.
13095        - Prohibited construction without instance because an instance wrapper
13096        without an instance is almost certainly a bug.
13097        * bindings/objc/objc_runtime.mm:
13098        (ObjcFallbackObjectImp::ObjcFallbackObjectImp):
13099        * bindings/runtime.cpp:
13100        (KJS::Bindings::Instance::Instance):
13101        (KJS::Bindings::Instance::createBindingForLanguageInstance):
13102        (KJS::Bindings::Instance::createRuntimeObject):
13103        * bindings/runtime.h:
13104        (KJS::Bindings::Instance::ref):
13105        (KJS::Bindings::Instance::deref):
13106        * bindings/runtime_object.cpp:
13107        (RuntimeObjectImp::RuntimeObjectImp):
13108        (RuntimeObjectImp::fallbackObjectGetter):
13109        (RuntimeObjectImp::fieldGetter):
13110        (RuntimeObjectImp::methodGetter):
13111        (RuntimeObjectImp::getOwnPropertySlot):
13112        (RuntimeObjectImp::put):
13113        (RuntimeObjectImp::canPut):
13114        * bindings/runtime_object.h: 
13115        - Removed ownsInstance data member because RefPtr takes care of 
13116        instance lifetime now. 
13117        - Prohibited copying because that would muss the ref count.
13118        - Prohibited construction without instance because an instance wrapper
13119        without an instance is almost certainly a bug.
13120        (KJS::RuntimeObjectImp::getInternalInstance):
13121
131222006-02-15  Geoffrey Garen  <ggaren@apple.com>
13123
13124        Reviewed by John.
13125
13126        - Applied the 4330457 change to CClass and ObjcClass as well.
13127
13128        Once plugins work in DumpRenderTree, running run-webkit-tests --leaks
13129        will catch this. 
13130
13131        This change isn't as critical because CClass and ObjcClass objects get 
13132        cached globally and never deleted, but it's good practice, in case we 
13133        ever do decide to delete CClass and ObjcClass objects.
13134
13135        This change requires prohibiting copying, because we don't do any 
13136        intelligent ref-counting -- when a Class is destroyed, it destroys its 
13137        methods and fields unconditionally. (Java classes already prohibited
13138        copying.)
13139
13140        * bindings/c/c_class.cpp:
13141        - Merged _commonInit and _commonDelete into constructor and destructor.
13142        (CClass::CClass):
13143        (CClass::~CClass):
13144        (CClass::methodsNamed): Added delete callbacks
13145        (CClass::fieldNamed): Added delete callbacks
13146        * bindings/c/c_class.h: Prohibited copying
13147        * bindings/c/c_instance.cpp: 
13148        (KJS::Bindings::CInstance::getClass): Changed to use the preferred 
13149        class factory method, to take advantage of the global cache.
13150
13151        [ Repeated changes applied to CClass for ObjcClass: ]
13152
13153        * bindings/objc/objc_class.h: 
13154        * bindings/objc/objc_class.mm:
13155        (KJS::Bindings::ObjcClass::ObjcClass):
13156        (KJS::Bindings::ObjcClass::~ObjcClass):
13157        (KJS::Bindings::ObjcClass::methodsNamed):
13158        (KJS::Bindings::ObjcClass::fieldNamed):
13159        * bindings/objc/objc_runtime.h:
13160        (KJS::Bindings::ObjcMethod::ObjcMethod): Initialized uninitialized
13161        variable to prevent bad CFRelease.
13162        (KJS::Bindings::ObjcMethod::~ObjcMethod): Removed erroneous ';' from
13163        if statement to prevent bad CFRelease.
13164        * bindings/objc/objc_runtime.cpp: Changed to use the preferred
13165        ObjectStructPtr, for clarity.
13166
131672006-02-14  Geoffrey Garen  <ggaren@apple.com>
13168
13169        Reviewed by John.
13170
13171        - Fixed <rdar://problem/4330457> CrashTracer: [REGRESSION] 3763 crashes
13172        in Safari at com.apple.JavaScriptCore: KJS::Bindings::JavaInstance::
13173        getClass const + 56
13174
13175        Once plugins work in DumpRenderTree, running run-webkit-tests --leaks
13176        will catch this. 
13177
13178        This was a memory leak in the bindings code. The leak was so extreme
13179        that it would cause Safari or the JVM to abort from lack of memory.
13180        Upon construction, Class objects create field and method objects, 
13181        storing them in CFDictionaries. The bug was that upon destruction, the 
13182        class objects released the dictionaries but didn't destroy the stored 
13183        objects.
13184
13185        The fix is to supply CFDictionary callbacks for destroying the values
13186        added to the dictionary. 
13187        
13188        * bindings/jni/jni_class.cpp: 
13189        (JavaClass::JavaClass): Added delete callbacks
13190        * bindings/runtime.cpp: Added definitions for delete callbacks
13191        (KJS::Bindings::deleteMethodList):
13192        (KJS::Bindings::deleteMethod):
13193        (KJS::Bindings::deleteField):
13194        * bindings/runtime.h: Added declarations for delete callbacks
13195
131962006-02-14  Timothy Hatcher  <timothy@apple.com>
13197
13198        Reviewed by Justin.
13199
13200        Fixed <rdar://problem/4415050> STD: WebCore build steps use echo -n, which will change
13201        behavior due to POSIX version of sh
13202
13203        * JavaScriptCore.xcodeproj/project.pbxproj: removed the use of echo -n, replaced with printf ""
13204
132052006-02-13   Dave Hyatt <hyatt@apple.com>
13206
13207        Fix Win32 bustage in JavaScriptCore.
13208
13209        Reviewed by darin
13210
13211        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
13212        Add JSImmediate to the Win32 project.
13213
13214        * kjs/JSImmediate.h:
13215        (KJS::JSImmediate::fromDouble):
13216        (KJS::JSImmediate::toDouble):
13217        (KJS::JSImmediate::NanAsBits):
13218        (KJS::JSImmediate::oneAsBits):
13219        Win32 needs explicit returns after abort() for non-void functions.
13220
13221        * kjs/testkjs.cpp:
13222        (run):
13223        Win32 catches a bug in testkjs!  The "return 2" should actually
13224        have been a return false.
13225
13226        * kjs/value.h:
13227        The extern decls of NaN and Inf need to be const.
13228
13229=== JavaScriptCore-521.7 ===
13230
132312006-02-13  Timothy Hatcher  <timothy@apple.com>
13232
13233        Reviewed by Darin.
13234
13235        Replaced the old NS_DURING exception blocking with @try/@catch.
13236
13237        * JavaScriptCorePrefix.h: undef try and catch to workaround a C++ conflict
13238        * bindings/objc/objc_instance.mm:
13239        (ObjcInstance::invokeMethod):
13240        (ObjcInstance::invokeDefaultMethod):
13241        (ObjcInstance::setValueOfUndefinedField):
13242        (ObjcInstance::getValueOfUndefinedField):
13243        * bindings/objc/objc_runtime.mm:
13244        (ObjcField::valueFromInstance):
13245        (ObjcField::setValueToInstance):
13246        (ObjcArray::setValueAt):
13247        (ObjcArray::valueAt):
13248
132492006-02-13  Darin Adler  <darin@apple.com>
13250
13251        - fix a couple problems building on Windows, based on requests
13252          from Krzysztof Kowalczyk <kkowalczyk@gmail.com>
13253
13254        * kjs/JSImmediate.h: Change code using non-standard u_int32/64_t types
13255        to the standard uint32/64_t. Also removed curious "isIEEE()" function
13256        that checked the sizes of some types (and type sizes alone don't tell you if
13257        the floating point conforms to the IEEE-standard). Added missing include
13258        of <stdint.h>.
13259
13260        * kjs/property_slot.h: Added missing include of <assert.h>.
13261
132622006-02-12  Geoffrey Garen  <ggaren@apple.com>
13263
13264        Reviewed by darin.
13265
13266        Cleaned up testkjs, added new "run" functionality to allow scripting 
13267        tests from within JS. ("run" is a part of my new super-accurate
13268        JS iBench.)
13269
13270        No regressions in run-javascriptcore-tests.
13271
13272        * kjs/testkjs.cpp:
13273        (GlobalImp::className):
13274        (TestFunctionImp::):
13275        (TestFunctionImp::callAsFunction):
13276        (main):
13277        (run):
13278
132792006-02-11  Alexey Proskuryakov  <ap@nypop.com>
13280
13281        Reviewed by Darin.
13282
13283        - improve fix for http://bugs.webkit.org/show_bug.cgi?id=5163
13284        RealPlayer.GetTitle() Crashes Safari/Dashboard
13285
13286        * bindings/c/c_utility.cpp: (KJS::Bindings::convertUTF8ToUTF16):
13287        Use kCFStringEncodingISOLatin1 rather than kCFStringEncodingWindowsLatin1, 
13288        because the latter encoding has holes, and conversion can still fail.
13289
132902006-02-10  Geoffrey Garen  <ggaren@apple.com>
13291
13292        Reviewed by Darin.
13293
13294        - Inlined RefPtr assignment operators. .7% performance win on 
13295        super-accurate JS iBench.
13296
13297        * kxmlcore/RefPtr.h:
13298        (KXMLCore::::operator):
13299
133002006-02-10  Geoffrey Garen  <ggaren@apple.com>
13301
13302        No review needed, just a build fix. This time for sure.
13303
13304        * kjs/JSType.h:
13305
133062006-02-10  Geoffrey Garen  <ggaren@apple.com>
13307
13308        Reviewed by eric.
13309        
13310        - Fixed build. As it goes without saying, I will not mention that I
13311        blame Kevin.
13312
13313        * JavaScriptCore.xcodeproj/project.pbxproj:
13314        * kjs/JSImmediate.cpp:
13315        (KJS::JSImmediate::toObject):
13316
133172006-02-09  Geoffrey Garen  <ggaren@apple.com>
13318
13319        Reviewed by mjs.
13320
13321        - Fixed <rdar://problem/4343730> Should switch ConstantValues (null, 
13322        undefined, true, false) from JS objects to immediate values similar to
13323        SimpleNumber
13324
13325        2.0% performance gain on my new super-accurate version of JS iBench.
13326        (I promise to land a version of it soon.)
13327
13328        The gist of the change:
13329        (1) The SimpleNumber class (simple_number.h) is now the JSImmediate
13330        class (JSImmediate.h/.cpp), and it handles not only numbers but also 
13331        null, undefined, true, and false. 
13332        (2) JSImmediate provides convenience methods for the bit masking
13333        necessary to encode and decode immediate values.
13334        (3) ConstantValues, BooleanImp, NullImp, and UndefinedImp are gone.
13335        (4) JSCell no longer implements functions like getBoolean, because
13336        only a JSImmediate can be a boolean.
13337        (5) JSImmediate no longer uses ALWAYS_INLINE because there's no need,
13338        and ALWAYS_INLINE is a non-portable option of last resort.
13339        (6) Type is now JSType, and it resides in its own file, JSType.h.
13340        Since I was there, I did some header include sorting as part of this
13341        change.
13342
13343        The rest pretty much explains itself.
13344
13345        * JavaScriptCore.xcodeproj/project.pbxproj: Removed simple_number.h,
13346        added JSImmediate.h/.cpp.
13347        * bindings/c/c_instance.cpp:
13348        (KJS::Bindings::CInstance::defaultValue):
13349        * bindings/c/c_instance.h:
13350        * bindings/c/c_utility.cpp:
13351        (KJS::Bindings::convertValueToNPVariant):
13352        * bindings/jni/jni_instance.cpp:
13353        (JavaInstance::defaultValue):
13354        * bindings/jni/jni_instance.h:
13355        * bindings/jni/jni_jsobject.cpp:
13356        (JavaJSObject::convertValueToJObject):
13357        * bindings/objc/WebScriptObject.mm:
13358        (+[WebScriptObject _convertValueToObjcValue:originExecutionContext:executionContext:]):
13359        Standardized calls to use getXXX instead of hand-rolling JSValue 
13360        functionality.
13361        * bindings/objc/objc_instance.h:
13362        * bindings/objc/objc_instance.mm:
13363        (ObjcInstance::getValueOfUndefinedField):
13364        (ObjcInstance::defaultValue):
13365        * bindings/objc/objc_runtime.h:
13366        * bindings/objc/objc_runtime.mm:
13367        (ObjcFallbackObjectImp::type):
13368        (ObjcFallbackObjectImp::defaultValue):
13369        * bindings/runtime.h:
13370        (KJS::Bindings::Instance::getValueOfUndefinedField):
13371        * bindings/runtime_object.cpp:
13372        (RuntimeObjectImp::defaultValue):
13373        * bindings/runtime_object.h:
13374        * kjs/JSImmediate.h: Added.
13375        (KJS::JSImmediate::isImmediate):
13376        (KJS::JSImmediate::isNumber):
13377        (KJS::JSImmediate::isBoolean):
13378        (KJS::JSImmediate::isUndefinedOrNull):
13379        (KJS::JSImmediate::fromDouble):
13380        (KJS::JSImmediate::toDouble):
13381        (KJS::JSImmediate::toBoolean):
13382        (KJS::JSImmediate::trueImmediate):
13383        (KJS::JSImmediate::falseImmediate):
13384        (KJS::JSImmediate::NaNImmediate):
13385        (KJS::JSImmediate::undefinedImmediate):
13386        (KJS::JSImmediate::nullImmediate):
13387        (KJS::JSImmediate::tag):
13388        (KJS::JSImmediate::unTag):
13389        (KJS::JSImmediate::getTag):
13390        (KJS::JSImmediate::):
13391        (KJS::JSImmediate::isIEEE):
13392        (KJS::JSImmediate::is32bit):
13393        (KJS::JSImmediate::is64bit):
13394        (KJS::JSImmediate::NanAsBits):
13395        (KJS::JSImmediate::zeroAsBits):
13396        (KJS::JSImmediate::oneAsBits):
13397        * kjs/JSLock.cpp:
13398        (KJS::JSLock::lock): Removed hack-o-rama to initialize ConstantValues.
13399        * kjs/JSType.h: Added.
13400        * kjs/collector.cpp:
13401        (KJS::Collector::protect):
13402        (KJS::Collector::unprotect):
13403        (KJS::Collector::collect):
13404        * kjs/internal.cpp:
13405        (KJS::StringImp::toPrimitive):
13406        (KJS::NumberImp::toPrimitive):
13407        (KJS::NumberImp::toBoolean):
13408        (KJS::GetterSetterImp::toPrimitive):
13409        * kjs/internal.h:
13410        (KJS::StringImp::type):
13411        (KJS::NumberImp::type):
13412        * kjs/object.cpp:
13413        (KJS::JSObject::type):
13414        (KJS::tryGetAndCallProperty): Replaced "Are you one of the six things
13415        I'm looking for?" test with "Are you not the one thing I'm not looking
13416        for" test.
13417        (KJS::JSObject::defaultValue):
13418        (KJS::JSObject::toPrimitive):
13419        * kjs/object.h:
13420        (KJS::GetterSetterImp::type):
13421        (KJS::JSValue::isObject):
13422        * kjs/operations.cpp:
13423        (KJS::equal):
13424        (KJS::strictEqual):
13425        (KJS::add):
13426        * kjs/reference.cpp:
13427        (KJS::Reference::deleteValue):
13428        * kjs/simple_number.h: Removed.
13429        * kjs/string_object.cpp:
13430        (StringInstance::getOwnPropertySlot): fixed indentation
13431        * kjs/value.cpp:
13432        (KJS::JSValue::toObject):
13433        (KJS::jsNumberCell): New function to quarantine a PIC branch -- allows
13434        us to inline jsNumber without adding PIC branches to callers.
13435        * kjs/value.h:
13436        (KJS::jsUndefined):
13437        (KJS::jsNull):
13438        (KJS::jsNaN):
13439        (KJS::jsBoolean):
13440        (KJS::jsNumber):
13441        (KJS::JSValue::downcast):
13442        (KJS::JSValue::isUndefinedOrNull):
13443        (KJS::JSValue::isBoolean):
13444        (KJS::JSValue::isNumber):
13445        (KJS::JSValue::isString):
13446        (KJS::JSValue::isObject):
13447        (KJS::JSValue::getBoolean):
13448        (KJS::JSValue::getNumber):
13449        (KJS::JSValue::getString):
13450        (KJS::JSValue::getObject):
13451        (KJS::JSValue::getUInt32):
13452        (KJS::JSValue::mark): Replaced !JSImmediate::is() test with assertion,
13453        resulting in a slight performance gain. Callers should always check
13454        !marked() before calling mark(), so it's impossible to call mark on
13455        a JSImmediate.
13456        (KJS::JSValue::marked):
13457        (KJS::JSValue::type):
13458        (KJS::JSValue::toPrimitive):
13459        (KJS::JSValue::toBoolean):
13460        (KJS::JSValue::toNumber):
13461        (KJS::JSValue::toString):
13462
134632006-02-06  Eric Seidel  <eseidel@apple.com>
13464
13465        Add svn:ignore properties for visual studio internals.
13466
134672006-02-06  Alexey Proskuryakov  <ap@nypop.com>
13468
13469        Reviewed by Darin.
13470
13471        - Refactor DateInstance to provide direct access to data. Several WIN32 modifications.
13472        http://bugs.webkit.org/show_bug.cgi?id=7107
13473
13474        - No tests added - only changed functionality on WIN32, which should be covered by 
13475        existing tests.
13476
13477        * kjs/date_object.cpp:
13478        (gmtoffset): On WIN32, use the recommended global (_timezone rather than timezone).
13479        Updated comments. 
13480        (KJS::timeZoneOffset): Removed, was basically the same as the above.
13481        (KJS::formatTime): Pass an UTC flag - UTC/local cannot be correctly selected on
13482        Windows based on struct tm itself.
13483        (KJS::DateInstance::getTime): Added.
13484        (KJS::DateInstance::getUTCTime): Added.
13485        (KJS::millisecondsToTM): Factored out from DateProtoFunc::callAsFunction().
13486        (KJS::DateObjectImp::callAsFunction): Use the new parameter to formatTime().
13487        (KJS::DateProtoFunc::callAsFunction): Updated for the other changes. The code for
13488        GetTimezoneOffset was incorrect on WIN32 - _daylight global has nothing to do
13489        with daylight savings time being in effect.
13490
13491        * kjs/date_object.h: Added prototypes for new functions.
13492
134932006-02-05  Maciej Stachowiak  <mjs@apple.com>
13494
13495        Reviewed by Anders.
13496        
13497        - fixed ~1100 KJS::Node leaked on layout tests
13498        http://bugs.webkit.org/show_bug.cgi?id=7097
13499
13500        * kjs/internal.cpp:
13501        (KJS::Parser::noteNodeCycle):
13502        (KJS::Parser::removeNodeCycle):
13503        (KJS::clearNewNodes):
13504        * kjs/internal.h:
13505        * kjs/nodes.cpp:
13506        (ElementNode::breakCycle):
13507        (PropertyListNode::breakCycle):
13508        (ArgumentListNode::breakCycle):
13509        (StatListNode::StatListNode):
13510        (StatListNode::breakCycle):
13511        (VarDeclListNode::breakCycle):
13512        (BlockNode::BlockNode):
13513        (ClauseListNode::breakCycle):
13514        (CaseBlockNode::CaseBlockNode):
13515        (ParameterNode::breakCycle):
13516        (SourceElementsNode::SourceElementsNode):
13517        (SourceElementsNode::breakCycle):
13518        * kjs/nodes.h:
13519        (KJS::Node::breakCycle):
13520        (KJS::ElementNode::ElementNode):
13521        (KJS::ArrayNode::ArrayNode):
13522        (KJS::PropertyListNode::PropertyListNode):
13523        (KJS::ObjectLiteralNode::ObjectLiteralNode):
13524        (KJS::ArgumentListNode::ArgumentListNode):
13525        (KJS::ArgumentsNode::ArgumentsNode):
13526        (KJS::VarDeclListNode::VarDeclListNode):
13527        (KJS::VarStatementNode::VarStatementNode):
13528        (KJS::ForNode::ForNode):
13529        (KJS::CaseClauseNode::CaseClauseNode):
13530        (KJS::ClauseListNode::ClauseListNode):
13531        (KJS::ParameterNode::ParameterNode):
13532        (KJS::FuncExprNode::FuncExprNode):
13533        (KJS::FuncDeclNode::FuncDeclNode):
13534
135352006-02-05  Maciej Stachowiak  <mjs@apple.com>
13536
13537        Reviewed by Hyatt.
13538        
13539        - fix default traits for classes to make sure default constructors get called
13540
13541        * kxmlcore/VectorTraits.h:
13542        (KXMLCore::):
13543
135442006-02-04  Darin Adler  <darin@apple.com>
13545
13546        Reviewed by Maciej.
13547
13548        - fix http://bugs.webkit.org/show_bug.cgi?id=5210
13549          REGRESSION: for/in loop with var changes global variable instead of making local
13550
13551        Test: fast/js/for-in-var-scope.html
13552
13553        * kjs/nodes.cpp:
13554        (valueForReadModifyAssignment): Use ALWAYS_INLINE macro.
13555        (ForInNode::execute): Break out of the scope chain loop once we find and set the
13556        loop variable. We don't want to set multiple loop variables.
13557        (ForInNode::processVarDecls): Process the declaration of the loop variable.
13558
13559        - other cleanup
13560
13561        * kjs/object.cpp: (KJS::tryGetAndCallProperty): Use ALWAYS_INLINE macro.
13562        * kxmlcore/FastMalloc.cpp: Change to use ALWAYS_INLINE macro from AlwaysInline.h
13563        instead of defining it here a second time.
13564
135652006-02-04  Maciej Stachowiak  <mjs@apple.com>
13566
13567        Reviewed by Hyatt.
13568        
13569        - change JavaScript collector statistics calls to use HashCountedSet instead
13570        of CFSet; other misc cleanup
13571        http://bugs.webkit.org/show_bug.cgi?id=7072
13572        
13573        * kjs/collector.cpp:
13574        (KJS::Collector::numProtectedObjects): renamed from numReferencedObjects
13575        (KJS::typeName):
13576        (KJS::Collector::rootObjectTypeCounts): renamed from rootObjectClasses,
13577        use HashSet
13578        * kjs/collector.h:
13579        (KJS::Collector::isOutOfMemory): Renamed from outOfMemory.
13580        * kjs/nodes.cpp:
13581
135822006-02-03  Timothy Hatcher  <timothy@apple.com>
13583
13584        Reviewed by Justin.
13585
13586        Renamed configuration names to Debug, Release and Production.
13587
13588        * JavaScriptCore.xcodeproj/project.pbxproj:
13589
135902006-02-02  George Staikos <staikos@opensource.apple.com>
13591
13592        Reviewed by Maciej.
13593
13594        * kjs/lookup.h: Fix compile, merged from KDE.
13595
135962006-02-02  Darin Adler  <darin@apple.com>
13597
13598        Reviewed by Maciej.
13599
13600        - http://bugs.webkit.org/show_bug.cgi?id=7005
13601          add Noncopyable, OwnPtr, OwnArrayPtr to KXMLCore
13602
13603        * kxmlcore/Noncopyable.h: Added.
13604        * kxmlcore/OwnArrayPtr.h: Added.
13605        * kxmlcore/OwnPtr.h: Added.
13606
13607        * JavaScriptCore.xcodeproj/project.pbxproj: Added new files.
13608
13609        * kjs/function.h:
13610        * kjs/function.cpp: Use OwnPtr for Parameter pointers.
13611
13612        * kjs/internal.h: Use Noncopyable for LabelStack.
13613
13614        * kjs/list.cpp: Use OwnArrayPtr for overflow.
13615
13616        * kjs/property_map.h:
13617        * kjs/property_map.cpp: Use OwnArrayPtr for SavedProperties.
13618        Use Vector for some stack buffers.
13619
13620        * kjs/regexp_object.h:
13621        * kjs/regexp_object.cpp: Use OwnArrayPtr for lastOvector.
13622
136232006-01-31  Maciej Stachowiak  <mjs@apple.com>
13624
13625        Reviewed by Darin.
13626        
13627        - fixed leak of hundreds of thousands of JS parser nodes on the layout tests, and added an exit counter
13628        that would catch them
13629
13630        * kjs/nodes.cpp:
13631        (NodeCounter::~NodeCounter): Added debug-only node counter.
13632        (Node::Node):
13633        (Node::~Node):
13634        * kxmlcore/VectorTraits.h: Simple classes like RefPtr do in fact need destruction.
13635
136362006-01-31  Darin Adler  <darin@apple.com>
13637
13638        Reviewed by Maciej.
13639
13640        - added deleteAllValues for HashSet as well as HashMap
13641        - fixed conversion from const_iterator to iterator, which I broke a while back
13642
13643        * kxmlcore/HashMap.h: Updated copyright date.
13644        * kxmlcore/HashSet.h: (KXMLCore::deleteAllValues): Added.
13645        * kxmlcore/HashTable.h: (KXMLCore::HashTableIterator::operator const_iterator): Added.
13646
136472006-01-31  Tim Omernick  <timo@apple.com>
13648
13649        Reviewed by Geoff Garen.
13650
13651        * bindings/c/c_utility.cpp:
13652        (KJS::Bindings::convertUTF8ToUTF16):
13653        Fixed an invalid assertion that UTF8Chars is not NULL.  It is valid for it to be NULL as long as
13654        UTF8Length is 0.
13655        This fixes an assertion failure on TOT at <http://www.musicindiaonline.com/p/x/tJO0OOBME9.As1NMvHdW/>,
13656        where JavaScript is getting a NULL string back from some call on the Real Player plugin.
13657
136582006-01-30  Anders Carlsson  <andersca@mac.com>
13659
13660        Reviewed by Darin.
13661
13662        Fix http://bugs.webkit.org/show_bug.cgi?id=6907
13663        REGRESSION: United.com menus messed up due to document.all/MSIE sniff
13664        
13665        * kjs/nodes.cpp:
13666        (typeStringForValue):
13667        Return "undefined" if the given object should masquerade as undefined.
13668        
13669        * kjs/object.h:
13670        (KJS::JSObject::masqueradeAsUndefined):
13671        Rename from isEqualToNull.
13672        
13673        * kjs/operations.cpp:
13674        (KJS::equal):
13675        Update for name change.
13676
136772006-01-29  Maciej Stachowiak  <mjs@apple.com>
13678
13679        Reviewed by Darin.
13680        
13681        - properly define Vector assignment operator; the private version was accidentally left
13682        in, and the template version is not enough to replace the default
13683
13684        * kxmlcore/Vector.h:
13685        (KXMLCore::Vector::operator=):
13686
136872006-01-29  Eric Seidel  <eseidel@apple.com>
13688
13689        Reviewed by darin.
13690
13691        Fix the build by applying a GCC-specific namespace hack.
13692
13693        * kjs/lookup.h:
13694
136952006-01-29  Eric Seidel <eseidel@apple.com>
13696
13697        Reviewed by hyatt.
13698
13699        Fix build on Win32.
13700
13701        * kjs/lookup.h: fixed ::cacheGlobalObject
13702        * kxmlcore/Vector.h:
13703        (KXMLCore::Vector::operator[]): use unsigned long
13704
137052006-01-29  Maciej Stachowiak  <mjs@apple.com>
13706
13707        Reviewed by Dave Hyatt.
13708
13709        * kxmlcore/Vector.h:
13710        (KXMLCore::Vector::operator[]): Add unsigned overload
13711
137122006-01-28  Darin Adler  <darin@apple.com>
13713
13714        Reviewed by John Sullivan.
13715
13716        - http://bugs.webkit.org/show_bug.cgi?id=6895
13717          include exception names in JavaScript form of DOM exception
13718
13719        * khtml/ecma/kjs_binding.cpp: (KJS::setDOMException): Include the name of the
13720        exception in the error message.
13721
137222006-01-28  Maciej Stachowiak  <mjs@apple.com>
13723
13724        Reviewed by Darin.
13725        
13726        - miscellaneous Vector improvements
13727
13728        * kxmlcore/Vector.h:
13729        (KXMLCore::Vector::at): Add range-checking asserts.
13730        (KXMLCore::Vector::first): Added as a convenience.
13731        (KXMLCore::Vector::last): Convenience for stack-style use.
13732        (KXMLCore::Vector::removeLast): ditto
13733
137342006-01-28  Darin Adler  <darin@apple.com>
13735
13736        Reviewed by John Sullivan
13737
13738        - fix http://bugs.webkit.org/show_bug.cgi?id=6870
13739          REGRESSION: JavaScript Date constructor won't accept another Date object
13740
13741        Test: fast/js/date-constructor.html
13742
13743        * kjs/date_object.cpp: (KJS::DateObjectImp::construct):
13744        Added a special case for constructing one date from another (to avoid losing
13745        milliseconds, which are not in the text form, to match Firefox), and changed
13746        the base code to convert to primitive before checking for string to match
13747        the standard. Also corrected a couple silly things in the "construct from
13748        current time" code path (removed a floor that does no good, and changed
13749        the constant used to convert microseconds to milliseconds to be a 1000
13750        rather than "msPerSecond").
13751
137522006-01-28  Darin Adler  <darin@apple.com>
13753
13754        * kjs/create_hash_table: Added missing license.
13755
137562006-01-28  Maciej Stachowiak  <mjs@apple.com>
13757
13758        Reviewed by Dave Hyatt.
13759        
13760        - added a Vector class
13761        http://bugs.webkit.org/show_bug.cgi?id=6894
13762
13763        * JavaScriptCore.xcodeproj/project.pbxproj:
13764        * kjs/internal.cpp:
13765        (KJS::Parser::saveNewNode): Apply Vector.
13766        (KJS::clearNewNodes): ditto
13767        * kjs/number_object.cpp:
13768        (integer_part_noexp): ditto
13769        (char_sequence): ditto
13770        * kjs/ustring.cpp:
13771        (KJS::UString::UTF8String): ditto
13772        * kxmlcore/HashMap.h:
13773        (KXMLCore::deleteAllValues): Tweaked this to only apply to HashMap,
13774        other versions are useful for other containers.
13775        * kxmlcore/Vector.h: Added. Implemented a Vector class, which should
13776        be usable for all Array/QVector style purposes, and also as a stack buffer
13777        with oversize handling. Also some helper classes to make vector operations
13778        as efficient as possible for POD types and for simple non-PODs like RefPtr.
13779        (KXMLCore::):
13780        (KXMLCore::VectorTypeOperations::destruct):
13781        (KXMLCore::VectorTypeOperations::initialize):
13782        (KXMLCore::VectorTypeOperations::move):
13783        (KXMLCore::VectorTypeOperations::uninitializedCopy):
13784        (KXMLCore::VectorTypeOperations::uninitializedFill):
13785        (KXMLCore::VectorBuffer::VectorBuffer):
13786        (KXMLCore::VectorBuffer::~VectorBuffer):
13787        (KXMLCore::VectorBuffer::deallocateBuffer):
13788        (KXMLCore::VectorBuffer::inlineBuffer):
13789        (KXMLCore::Vector::Vector):
13790        (KXMLCore::Vector::~Vector):
13791        (KXMLCore::Vector::size):
13792        (KXMLCore::Vector::capacity):
13793        (KXMLCore::Vector::isEmpty):
13794        (KXMLCore::Vector::at):
13795        (KXMLCore::Vector::operator[]):
13796        (KXMLCore::Vector::data):
13797        (KXMLCore::Vector::operator T*):
13798        (KXMLCore::Vector::operator const T*):
13799        (KXMLCore::Vector::begin):
13800        (KXMLCore::Vector::end):
13801        (KXMLCore::Vector::clear):
13802        (KXMLCore::Vector::fill):
13803        (KXMLCore::Vector::operator=):
13804        (KXMLCore::::Vector):
13805        (KXMLCore::::operator):
13806        (KXMLCore::::fill):
13807        (KXMLCore::::expandCapacity):
13808        (KXMLCore::::resize):
13809        (KXMLCore::::reserveCapacity):
13810        (KXMLCore::::append):
13811        (KXMLCore::deleteAllValues):
13812        * kxmlcore/VectorTraits.h: Added.
13813        (KXMLCore::VectorTraits): Traits to enable making Vector efficient for
13814        simple types.
13815
138162006-01-28  Alexey Proskuryakov  <ap@nypop.com>
13817
13818        Reviewed by Darin.
13819
13820        - fix http://bugs.webkit.org/show_bug.cgi?id=5163
13821        RealPlayer.GetTitle() Crashes Safari/Dashboard
13822
13823        * bindings/c/c_utility.cpp: (KJS::Bindings::convertUTF8ToUTF16):
13824        Fallback to kCFStringEncodingWindowsLatin1 if the passed buffer is not valid UTF-8, preventing crashes.
13825
138262006-01-25  George Staikos <staikos@opensource.apple.com>
13827
13828        Reviewed by Darin.
13829
13830        * kxmlcore/HashFunctions.h: Merge build fix from KDE.
13831
138322006-01-25  Darin Adler  <darin@apple.com>
13833
13834        - removed an unused source file
13835
13836        * kjs/pointer_hash.h: Removed.
13837        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Removed reference to pointer_hash.h.
13838
138392006-01-23  Anders Carlsson  <andersca@mac.com>
13840
13841        Reviewed by Maciej.
13842
13843        - fix http://bugs.webkit.org/show_bug.cgi?id=6737
13844        KJS_DEFINE_PROTOTYPE should work outside of the KJS namespace
13845        
13846        * kjs/lookup.h:
13847        Prefix all KJS types with KJS:: in KJS_DEFINE_PROTOTYPE.
13848        
13849        (cacheGlobalObject):
13850        Move this out of the KJS namespace.
13851
138522006-01-23  Maciej Stachowiak  <mjs@apple.com>
13853
13854        Reviewed by Eric.
13855
13856        - renamed PointerHash to PtrHash
13857        - made PtrHash the default hash function for int and pointer types that aren't further specialized
13858        - added an AtomicStringImpl class to make it easier and more typesafe to identity hash atomic strings
13859        - did appropriate consequent cleanup (very few places now need to declare a hash function)
13860        http://bugs.webkit.org/show_bug.cgi?id=6752
13861        
13862        * kjs/array_object.cpp:
13863        (ArrayProtoFunc::callAsFunction): no need to mention PointerHash
13864        * kjs/collector.cpp: ditto
13865        * kjs/identifier.cpp:
13866        (KXMLCore::): declare DefaultHash the new way
13867        * kjs/internal.cpp: no need to mention PointerHash
13868        * kjs/ustring.h:
13869        * kxmlcore/HashCountedSet.h: change how we get the default hash to make it
13870        easier to specialize on PtrHash
13871        * kxmlcore/HashFunctions.h:
13872        (KXMLCore::): renamed PointerHash to PtrHash; changed DefaultHash so that it has
13873        a Hash typedef rather than being a hash function class itself; declared DefaultHash
13874        for int and partializy specialized for pointer types
13875        * kxmlcore/HashMapPtrSpec.h:
13876        (KXMLCore::PtrHashIteratorAdapter::PtrHashIteratorAdapter): Slight tweaks for new
13877        way of handling pointer hash
13878        (KXMLCore::PtrHashConstIteratorAdapter::PtrHashConstIteratorAdapter): ditto
13879        (KXMLCore::): ditto
13880        * kxmlcore/HashMap.h: ditto
13881        * kxmlcore/HashSet.h: ditto
13882
138832006-01-23  Maciej Stachowiak  <mjs@apple.com>
13884
13885        Reviewed by Tim Omernick.
13886        
13887        - use classes instead of free functions for extractors, this better matches how other
13888        things work and should avoid the need for hacky workarounds on other compilers
13889        http://bugs.webkit.org/show_bug.cgi?id=6748
13890
13891        * kjs/array_object.cpp:
13892        * kjs/identifier.cpp:
13893        * kjs/internal.cpp:
13894        * kxmlcore/HashMap.h:
13895        (KXMLCore::PairFirstExtractor::extract):
13896        * kxmlcore/HashMapPtrSpec.h:
13897        (KXMLCore::):
13898        * kxmlcore/HashSet.h:
13899        (KXMLCore::IdentityExtractor::extract):
13900        * kxmlcore/HashTable.h:
13901        (KXMLCore::addIterator):
13902        (KXMLCore::removeIterator):
13903        (KXMLCore::HashTable::add):
13904        (KXMLCore::HashTable::isEmptyBucket):
13905        (KXMLCore::HashTable::isDeletedBucket):
13906        (KXMLCore::HashTable::HashTable):
13907        (KXMLCore::HashTable::lookup):
13908        (KXMLCore::HashTable::add):
13909        (KXMLCore::HashTable::reinsert):
13910        (KXMLCore::HashTable::find):
13911        (KXMLCore::HashTable::contains):
13912        (KXMLCore::HashTable::remove):
13913        (KXMLCore::HashTable::allocateTable):
13914        (KXMLCore::HashTable::deallocateTable):
13915        (KXMLCore::HashTable::expand):
13916        (KXMLCore::HashTable::rehash):
13917        (KXMLCore::HashTable::clear):
13918        (KXMLCore::HashTable::swap):
13919        (KXMLCore::HashTable::operator):
13920        (KXMLCore::HashTable::checkTableConsistency):
13921        (KXMLCore::HashTable::checkTableConsistencyExceptSize):
13922        (KXMLCore::HashTable::invalidateIterators):
13923
139242006-01-23  Maciej Stachowiak  <mjs@apple.com>
13925
13926        Rubber stamped by Tim Hatcher.
13927        
13928        - renamed inert() operation on HashSet, HashCountedSet and HashTable to add()
13929        for consistency with HashMap
13930
13931        * kjs/array_object.cpp:
13932        (ArrayProtoFunc::callAsFunction):
13933        * kjs/collector.cpp:
13934        (KJS::Collector::protect):
13935        * kjs/identifier.cpp:
13936        (KJS::Identifier::add):
13937        * kxmlcore/HashCountedSet.h:
13938        (KXMLCore::::add):
13939        * kxmlcore/HashMap.h:
13940        (KXMLCore::::inlineAdd):
13941        * kxmlcore/HashSet.h:
13942        (KXMLCore::::add):
13943        * kxmlcore/HashTable.h:
13944        (KXMLCore::HashTable::add):
13945        (KXMLCore::::add):
13946        (KXMLCore::::HashTable):
13947
139482006-01-23  Justin Garcia  <justin.garcia@apple.com>
13949
13950        Reviewed by thatcher
13951        
13952        Turned on -O2 for B&I build.
13953
13954        * JavaScriptCore.xcodeproj/project.pbxproj:
13955
139562006-01-23  Maciej Stachowiak  <mjs@apple.com>
13957
13958        Reviewed by Tim Hatcher.
13959        
13960        - it's "Franklin Street", not "Franklin Steet"
13961
13962        * kjs/array_instance.h:
13963        * kjs/array_object.cpp:
13964        * kjs/array_object.h:
13965        * kjs/bool_object.cpp:
13966        * kjs/bool_object.h:
13967        * kjs/collector.cpp:
13968        * kjs/collector.h:
13969        * kjs/completion.h:
13970        * kjs/context.h:
13971        * kjs/date_object.cpp:
13972        * kjs/date_object.h:
13973        * kjs/debugger.cpp:
13974        * kjs/debugger.h:
13975        * kjs/dtoa.h:
13976        * kjs/error_object.cpp:
13977        * kjs/error_object.h:
13978        * kjs/function.cpp:
13979        * kjs/function.h:
13980        * kjs/function_object.cpp:
13981        * kjs/function_object.h:
13982        * kjs/grammar.y:
13983        * kjs/identifier.cpp:
13984        * kjs/identifier.h:
13985        * kjs/internal.cpp:
13986        * kjs/internal.h:
13987        * kjs/interpreter.cpp:
13988        * kjs/interpreter.h:
13989        * kjs/lexer.cpp:
13990        * kjs/lexer.h:
13991        * kjs/list.cpp:
13992        * kjs/list.h:
13993        * kjs/lookup.cpp:
13994        * kjs/lookup.h:
13995        * kjs/math_object.cpp:
13996        * kjs/math_object.h:
13997        * kjs/nodes.cpp:
13998        * kjs/nodes.h:
13999        * kjs/nodes2string.cpp:
14000        * kjs/number_object.cpp:
14001        * kjs/number_object.h:
14002        * kjs/object.cpp:
14003        * kjs/object.h:
14004        * kjs/object_object.cpp:
14005        * kjs/object_object.h:
14006        * kjs/operations.cpp:
14007        * kjs/operations.h:
14008        * kjs/property_map.cpp:
14009        * kjs/property_map.h:
14010        * kjs/property_slot.cpp:
14011        * kjs/property_slot.h:
14012        * kjs/reference.cpp:
14013        * kjs/reference.h:
14014        * kjs/reference_list.cpp:
14015        * kjs/reference_list.h:
14016        * kjs/regexp.cpp:
14017        * kjs/regexp.h:
14018        * kjs/regexp_object.cpp:
14019        * kjs/regexp_object.h:
14020        * kjs/scope_chain.cpp:
14021        * kjs/scope_chain.h:
14022        * kjs/simple_number.h:
14023        * kjs/string_object.cpp:
14024        * kjs/string_object.h:
14025        * kjs/testkjs.cpp:
14026        * kjs/types.h:
14027        * kjs/ustring.cpp:
14028        * kjs/ustring.h:
14029        * kjs/value.cpp:
14030        * kjs/value.h:
14031        * kxmlcore/AlwaysInline.h:
14032        * kxmlcore/ListRefPtr.h:
14033        * kxmlcore/PassRefPtr.h:
14034        * kxmlcore/RefPtr.h:
14035
140362006-01-23  Darin Adler  <darin@apple.com>
14037
14038        Reviewed by John Sullivan.
14039
14040        - change needed for fix to http://bugs.webkit.org/show_bug.cgi?id=6617
14041          REGRESSION: Crash in cloneChildNodes when clicking element
14042
14043        * kxmlcore/PassRefPtr.h: Fix assignment operator from RefPtr of a different
14044        type by calling get() instead of going directly at m_ptr.
14045        * kxmlcore/RefPtr.h: Ditto.
14046
14047        - other changes
14048
14049        * JavaScriptCore.xcodeproj/project.pbxproj: Xcode decided to change this file.
14050        It's just a resorted list of keys in a dictionary.
14051
14052        * kjs/fpconst.cpp: Wrap this file in #if __APPLE__ since the alternate version
14053        in internal.cpp is in #if !__APPLE__. This file is to give us the "no init
14054        routine" property we want to have on OS X.
14055
140562006-01-22  Maciej Stachowiak  <mjs@apple.com>
14057
14058        Reviewed by Darin.
14059
14060        - Set up Page class and invert Frame / WebCoreFrameBridge ownership
14061        http://bugs.webkit.org/show_bug.cgi?id=6577
14062
14063        * kjs/interpreter.h: make globalExec virtual so ScriptInterpreter can 
14064        override it
14065
140662006-01-23  George Staikos <staikos@opensource.apple.com>
14067
14068        Reviewed by Maciej and Darin.
14069
14070        * kxmlcore/Assertions.h: This file only works with __APPLE__ right now
14071        * kjs/interpreter.cpp: ditto
14072        * kjs/simple_number.h: Add assert.h and remove from config.h
14073        * kjs/array_object.cpp: Use relative paths for kxmlcore includes
14074        * kjs/testkjs.cpp: Use relative paths for kxmlcore includes
14075
140762006-01-23  George Staikos <staikos@opensource.apple.com>
14077
14078        Reviewed by Maciej.
14079
14080        * kjs/config.h: unbreak preprocessor change
14081
140822006-01-23  George Staikos <staikos@opensource.apple.com>
14083
14084        Approved by Maciej and Darin.
14085
14086        * kjs/:
14087        * kxmlcore/:
14088             Update FSF address in license to make merging easier
14089
140902006-01-22  George Staikos <staikos@opensource.apple.com>
14091
14092        Reviewed by Maciej.
14093
14094        * kjs/collector.cpp: merge major speedup from KDE on Linux
14095                             patch by Maks Orlovich, bug #6145
14096                             Also unify cpu detection
14097        * kjs/config.h: define simpler CPU macros
14098
140992006-01-22  George Staikos <staikos@opensource.apple.com>
14100
14101        Reviewed by Maciej.
14102
14103        * kjs/collector.cpp: merge FreeBSD compile fix from KDE
14104                             -> requires build magic for use
14105
141062006-01-21  George Staikos <staikos@opensource.apple.com>
14107
14108        Reviewed by Maciej.
14109
14110        * kjs/nodes2string.cpp
14111        * kjs/operations.h
14112        * kjs/debugger.h
14113          Fix pedantic compile with some gcc versions (Merge from KDE)
14114
14115        * kjs/create_hash_table:
14116          Fix build with Perl 5.8.0 (Merge from KDE)
14117
141182006-01-18  Darin Adler  <darin@apple.com>
14119
14120        Reviewed by Hyatt.
14121
14122        - hash table fixes needed for my WebCore changes
14123
14124        * kxmlcore/HashTable.h: (KXMLCore::HashTableConstIterator::operator=):
14125        Added a missing return statement.
14126
14127        * kxmlcore/HashTraits.h: Fix traits so they work properly for classes where you
14128        can't instantiate with a 0 by using traits rather than ? : to select the default
14129        emtpy value of hash table keys.
14130
14131        - small cleanup of "runtime" code left over from recent JavaScript crash fix
14132
14133        * bindings/runtime_root.h:
14134        (KJS::Bindings::RootObject::RootObject): No explicit initialization of _imp needed
14135        since it's now a ProtectedPtr.
14136        (KJS::Bindings::RootObject::setRootObjectImp): Remove old code that relied on the
14137        fact that _imp was 0 and replaced with use of ProtectedPtr.
14138        (KJS::Bindings::RootObject::rootObjectImp): Updated since _imp is a ProtectedPtr.
14139
141402006-01-17  Darin Adler  <darin@apple.com>
14141
14142        Reviewed by Anders.
14143
14144        - http://bugs.webkit.org/show_bug.cgi?id=6611
14145          add assertions to check correct use of hash table iterators
14146
14147        * kxmlcore/HashTable.h:
14148        (KXMLCore::addIterator): Added. Helper function that adds an iterator to the list
14149        maintained by the specified hash table.
14150        (KXMLCore::removeIterator): Added. Helper function that removes an iterator from
14151        the list maintained by the hash table it's in.
14152        (KXMLCore::HashTableConstIterator::HashTableConstIterator): Added a HashTable
14153        parameter, ignored when not debugging. Call addIterator.
14154        (KXMLCore::HashTableConstIterator::~HashTableConstIterator):
14155        (KXMLCore::HashTableConstIterator::operator=): Call removeIterator.
14156        (KXMLCore::HashTableConstIterator::operator*): Call checkValidity.
14157        (KXMLCore::HashTableConstIterator::operator->): Ditto.
14158        (KXMLCore::HashTableConstIterator::operator++): Ditto.
14159        (KXMLCore::HashTableConstIterator::operator==): Ditto.
14160        (KXMLCore::HashTableConstIterator::operator!=): Ditto.
14161        (KXMLCore::HashTableConstIterator::checkValidity): Checks that the hash table
14162        pointer is not 0 and if there are two iterators that both point at the same table.
14163        (KXMLCore::HashTableIterator::HashTableIterator): Changed to use the const iterator
14164        as an implementation detail, to avoid having two separate iterator implementations.
14165        (KXMLCore::HashTableIterator::operator*): Ditto.
14166        (KXMLCore::HashTableIterator::operator->): Ditto.
14167        (KXMLCore::HashTableIterator::operator++): Ditto.
14168        (KXMLCore::HashTableIterator::operator==): Ditto.
14169        (KXMLCore::HashTableIterator::operator!=): Ditto.
14170        (KXMLCore::HashTable::HashTable): Initialize pointer to head of iterators list.
14171        (KXMLCore::HashTable::~HashTable): Added call to invalidateIterators.
14172        (KXMLCore::HashTable::makeIterator): Pass this pointer.
14173        (KXMLCore::HashTable::makeConstIterator): Ditto.
14174        (KXMLCore::HashTable::insert): Call invalidateIterators, since this is a public
14175        entry point that modifies the hash table.
14176        (KXMLCore::HashTable::remove): Ditto.
14177        (KXMLCore::HashTable::clear): Ditto.
14178        (KXMLCore::HashTable::swap): Ditto.
14179        (KXMLCore::HashTable::invalidateIterators): Added. Walks the iterators list and
14180        clears out the table, next, and previous pointers in all of them, and then clears
14181        the head so we have an empty list.
14182        (KXMLCore::addIterator): Added. Adds the iterator the the linked list in the
14183        passed-in table, and points the iterator at the table.
14184        (KXMLCore::removeIterator): Added. Removes the iterator from the linked list in
14185        the passed-in table.
14186
14187        * kxmlcore/HashTraits.h: A bit of tweaking and formatting.
14188
141892006-01-17  Justin Garcia  <justin.garcia@apple.com>
14190
14191        Reviewed by eric
14192        
14193        Deployment builds now use -O2
14194
14195        * JavaScriptCore.xcodeproj/project.pbxproj:
14196
141972006-01-17  Darin Adler  <darin@apple.com>
14198
14199        Reviewed by Anders.
14200
14201        - fix http://bugs.webkit.org/show_bug.cgi?id=6610
14202          change RefPtr so that it works when deref ends up deleting the RefPtr
14203
14204        * kxmlcore/PassRefPtr.h: Always set m_ptr before calling deref.
14205        * kxmlcore/RefPtr.h: Ditto.
14206
142072006-01-16  Geoffrey Garen  <ggaren@apple.com>
14208
14209        Reviewed by darin.
14210
14211        - Fixed http://bugs.webkit.org/show_bug.cgi?id=6322
14212        DateProtoFuncImp::callAsFunction can crash due to lack of type checking
14213
14214        * kjs/date_object.cpp:
14215        (KJS::DateProtoFunc::callAsFunction): Type check calls to all methods. 
14216        This matches section 15.9.5 in the spec.
14217
142182006-01-16  Tim Omernick  <timo@apple.com>
14219
14220        Reviewed by John Sullivan.
14221
14222        JavaScriptCore part of <rdar://problem/4211707> NPAPI ref count behavior differs with Mozilla
14223
14224        * bindings/npruntime.cpp:
14225        (_NPN_ReleaseObject):
14226        Refactored part of this function out into _NPN_DeallocateObject.
14227        (_NPN_DeallocateObject):
14228        Forcibly deallocates the passed object, even if its refcount is
14229        greater than zero.
14230        
14231        * bindings/npruntime_impl.h:
14232        Declared _NPN_DeallocateObject().
14233
142342006-01-16  Darin Adler  <darin@apple.com>
14235
14236        Reviewed by Maciej.
14237
14238        - fix problem with ++, ==, and != on const iterators in
14239          HashMaps that are using the pointer specialization
14240
14241        * kxmlcore/HashMapPtrSpec.h:
14242        (KXMLCore::PointerHashConstIteratorAdapter::operator++): Change type to const_iterator.
14243        (KXMLCore::PointerHashConstIteratorAdapter::operator==): Ditto.
14244        (KXMLCore::PointerHashConstIteratorAdapter::operator!=): Ditto.
14245
142462006-01-15  Alexey Proskuryakov  <ap@nypop.com>
14247
14248        Reviewed by Anders.
14249
14250        - fix http://bugs.webkit.org/show_bug.cgi?id=6561
14251        run-javascriptcore-tests doesn't work
14252
14253        * JavaScriptCore/tests/mozilla/Getopt/Mixed.pm: 
14254        Changed revision number to 1.8 (broken by svn migration).
14255
142562006-01-14  David Kilzer  <ddkilzer@kilzer.net>
14257
14258        Reviewed and landed by Anders.
14259
14260        * kjs/create_hash_table: Fixed comment typo.
14261
142622006-01-13  Maks Orlovich   <maksim@kde.org>
14263
14264        Mostly merging work by Peter Kelly. Reviewed by Maciej, landed by ap.
14265
14266        - fix http://bugs.webkit.org/show_bug.cgi?id=6261
14267        Misc. array object fixes from KJS
14268
14269        * kjs/array_object.cpp: Don't treat 2^32-1 as a real array index property.
14270        (ArrayInstance::getOwnPropertySlot): Ditto.
14271        (ArrayInstance::deleteProperty): Ditto.
14272        (ArrayInstance::put): Ditto.
14273        (ArrayInstance::propList): Added a FIXME comment.
14274        (ArrayInstance::put): Throw exception on trying to set invalid array length.
14275        (ArrayProtoFunc::callAsFunction): Do not use a separator argument when doing toString/toLocalString.
14276        * kjs/array_object.h: Added MAX_ARRAY_INDEX.
14277
142782006-01-13  Darin Adler  <darin@apple.com>
14279
14280        - Replaced tabs with spaces in source files that had less than 10 lines with tabs.
14281        - Set allow-tabs Subversion property in source files that have more than 10 lines with tabs.
14282
142832006-01-13  Anders Carlsson  <andersca@mac.com>
14284
14285        Reviewed by Eric.
14286
14287        * kjs/create_hash_table:
14288        Use correct size variables.
14289
142902006-01-13  Anders Carlsson  <andersca@mac.com>
14291
14292        Reviewed by Darin.
14293
14294        * kjs/create_hash_table:
14295        Don't create an empty entry array, instead add a entry with all fields
14296        set to null and set the hash table size to 1.
14297        
14298        * kjs/lookup.cpp:
14299        (findEntry):
14300        Remove the hash table size check
14301
143022006-01-12  Anders Carlsson  <andersca@mac.com>
14303
14304        Reviewed by Maciej.
14305
14306        - fix http://bugs.webkit.org/show_bug.cgi?id=6494
14307        Crash when assigning a new function to a DOMParser object
14308        
14309        * JavaScriptCore.xcodeproj/project.pbxproj:
14310        Move lookup.cpp before lookup.h
14311        
14312        * kjs/lookup.cpp:
14313        (findEntry):
14314        If the hash table is empty, return 0 early.
14315
143162006-01-12  George Staikos <staikos@kde.org>
14317
14318        Reviewed by Darin.
14319
14320        * kjs/interpreter.cpp:
14321        * kjs/testkjs.cpp:
14322        * kjs/interpreter.h:
14323        Add helper to interpreter to call the collector in order to facilitate
14324        visibility rules in KDE.
14325
143262006-01-12  George Staikos <staikos@kde.org>
14327
14328        Reviewed by Maciej.
14329
14330        * kjs/kjs.pro: Updates to build the whole thing on Linux at least.
14331
14332        * kxmlcore/HashTable.h: Add missing assert.h
14333
143342006-01-12  Darin Adler  <darin@apple.com>
14335
14336        Reviewed by Geoff.
14337
14338        - fix http://bugs.webkit.org/show_bug.cgi?id=6505
14339          retire APPLE_CHANGES from JavaScriptCore
14340
14341        * JavaScriptCore.xcodeproj/project.pbxproj: Removed both
14342        APPLE_CHANGES and HAVE_CONFIG_H from all targets.
14343
14344        * README: Removed. This had obsolete information in it
14345        and it wasn't clear what to replace it with.
14346
14347        * kjs/collector.h: Removed an APPLE_CHANGES if around something
14348        that's not really platform-specific (although it does use a
14349        platform-specific API at the moment).
14350        * kjs/collector.cpp: Removed a mistaken comment.
14351
14352        * kjs/grammar.y:
14353        * kjs/internal.cpp:
14354        * kjs/object.h:
14355        * kjs/operations.cpp:
14356        * kjs/operations.h:
14357        * kjs/ustring.h:
14358        Use __APPLE__ instead of APPLE_CHANGES for code that should be
14359        used only on Mac OS X.
14360
14361        * kjs/interpreter.cpp: Removed APPLE_CHANGES ifdef around the include
14362        of the runtime.h header. Even though that header isn't needed at the
14363        moment on platforms other than Mac OS X, the conditional stuff should
14364        be in the header itself, not in this one client.
14365
14366        * kjs/math_object.cpp: (MathFuncImp::callAsFunction): Removed some
14367        code inside APPLE_CHANGES. I'm pretty sure this code isn't needed on
14368        any platform where pow is implemented corrrectly according to the IEEE
14369        standard. If it is needed on some, we can add it back with an appropriate
14370        #if for the platforms where it is needed.
14371
143722006-01-12  Justin Haygood  <justin@xiondigital.net>
14373
14374        Reviewed, tweaked, and landed by Darin.
14375
14376        - fix http://bugs.webkit.org/show_bug.cgi?id=6416
14377          lexer.cpp, grammar.y protect include of config.h with "HAVE_CONFIG_H"
14378
14379        * kjs/dtoa.cpp: Removed HAVE_CONFIG_H, changed config.h to use
14380        quotes instead of angle brackets. Moved dtoa.h include to the top.
14381        Changed system header includes to use angle brackets instead of quotes.
14382        * kjs/grammar.y: Removed HAVE_CONFIG_H, changed config.h to use
14383        quotes instead of angle brackets.
14384        * kjs/lexer.cpp: Removed HAVE_CONFIG_H, changed config.h to use
14385        quotes instead of angle brackets. Moved lexer.h include to the top.
14386        * kjs/ustring.cpp: Removed HAVE_CONFIG_H, changed config.h to use
14387        quotes instead of angle brackets. Moved ustring.h include to the top.
14388
143892006-01-12  George Staikos <staikos@kde.org>
14390
14391        Reviewed by Maciej
14392
14393        - Import initial QMake file.  Doesn't fully work yet.
14394
143952006-01-11  Ricci Adams  <ricciadams@apple.com>
14396
14397        Reviewed by Maciej and Darin, landed by Darin.
14398
14399        - fix http://bugs.webkit.org/show_bug.cgi?id=5939
14400          final comma in javascript object prevents parsing
14401
14402        * kjs/grammar.y: Added rule to allow trailing comma in
14403        object construction.
14404
144052006-01-11  Ricci Adams  <ricciadams@apple.com>
14406
14407        Reviewed by Geoff, landed by Darin.
14408
14409        - fix http://bugs.webkit.org/show_bug.cgi?id=5308
14410          Number.toFixed doesn't include leading 0
14411
14412        * kjs/number_object.cpp: (NumberProtoFunc::callAsFunction):
14413        Fixed a "<" that should have been a "<=".
14414
144152006-01-11  Ricci Adams  <ricciadams@apple.com>
14416
14417        Reviewed by Geoff, landed by Darin.
14418
14419        - fix http://bugs.webkit.org/show_bug.cgi?id=5307
14420          Number.toFixed doesn't round 0.5 up
14421
14422        * kjs/number_object.cpp: (NumberProtoFunc::callAsFunction):
14423        Fixed a ">" that should have been a ">=".
14424
144252006-01-11  Justin Haygood  <justin@xiondigital.net>
14426
14427        Reviewed and landed by Darin.
14428
14429        - fix http://bugs.webkit.org/show_bug.cgi?id=6486
14430          JavaScriptCore should use system malloc on Windows
14431
14432        * kjs/config.h: Add USE_SYSTEM_MALLOC to the Win32 section.
14433
144342006-01-10  Darin Adler  <darin@apple.com>
14435
14436        * Makefile: Took out unneeded "export" line.
14437        * <many-files>: Changed a lot of flags (cleared bogus executable bits, set
14438          MIME types, other small corrections).
14439
144402006-01-09  Darin Adler  <darin@apple.com>
14441
14442        * Makefile.am: Removed.
14443
144442006-01-07  Anders Carlsson  <andersca@mac.com>
14445
14446        Reviewed by Maciej.
14447        
14448        - fix http://bugs.webkit.org/show_bug.cgi?id=6373
14449        REGRESSION: JavaScript hang when comparing large array to null
14450        
14451        * kjs/object.h:
14452        (KJS::JSObject::isEqualToNull):
14453        Add new function which returns true if an object should be treated as null when
14454        doing comparisons.
14455        
14456        * kjs/operations.cpp:
14457        (KJS::equal):
14458        Use isEqualToNull.
14459
144602006-01-07  Alexey Proskuryakov  <ap@nypop.com>
14461
14462        Reviewed by Maciej.
14463
14464        - Fix WebCore development build
14465        http://bugs.webkit.org/show_bug.cgi?id=6408
14466
14467        * kxmlcore/Assertions.h: Use __VA_ARGS__ in variadic macros.
14468
144692006-01-06  Maciej Stachowiak  <mjs@apple.com>
14470
14471        Reviewed by Darin.
14472
14473        - miscellaneous changes for 4% speedup on the JavaScript iBench
14474        http://bugs.webkit.org/show_bug.cgi?id=6396
14475        
14476        Changes mostly thanks to Maks Orlovich, tweaked a little by me.
14477
14478        * kjs/create_hash_table: Use the same hash as the one used by Identifier.
14479        * kjs/function.cpp:
14480        (KJS::FunctionImp::processParameters): Use the new List::copyFrom
14481        (KJS::ActivationImp::ActivationImp): track variable while iterating
14482        * kjs/internal.cpp:
14483        (KJS::StringImp::toObject): create StringInstance directly
14484        * kjs/list.cpp:
14485        (KJS::List::copy): implement in terms of copyFrom
14486        (KJS::List::copyFrom): more efficient way to copy in another list
14487        * kjs/list.h:
14488        * kjs/lookup.cpp:
14489        (keysMatch): updated to work with identifier hash
14490        (findEntry): ditto
14491        (Lookup::findEntry): ditto
14492        (Lookup::find): ditto
14493        * kjs/lookup.h:
14494
144952006-01-06  Maciej Stachowiak  <mjs@apple.com>
14496
14497        - fix development build failure from the previous checkin
14498
14499        * kjs/function.cpp:
14500        (KJS::ActivationImp::put): Use prototype() accessor in assert.
14501
145022006-01-05  Maciej Stachowiak  <mjs@apple.com>
14503
14504        Reviewed by Eric.
14505
14506        - fix remaining performance regression from Getter/Setter change
14507        http://bugs.webkit.org/show_bug.cgi?id=6249
14508
14509        - Activation objects should not have __proto__ property
14510        http://bugs.webkit.org/show_bug.cgi?id=6395
14511
14512        * kjs/function.cpp:
14513        (KJS::ActivationImp::getOwnPropertySlot): Implement directly, thus
14514        skipping getter/setter handling and __proto__ handling, as well
14515        as inlining needed superclass stuff.
14516        (KJS::ActivationImp::put): Implement directly, skipping getter/setter,
14517        __proto__, and do canPut directly in PropertyMap::put since there's no
14518        static property table either.
14519        * kjs/function.h:
14520        * kjs/property_map.cpp:
14521        (KJS::PropertyMap::put): Allow optionally inlining canPut check.
14522        * kjs/property_map.h:
14523
145242006-01-04  Geoffrey Garen  <ggaren@apple.com>
14525
14526        Patch by kimmo.t.kinnunen@nokia.com, reviewed by darin, tweaked by me.
14527
14528        - Fixed http://bugs.webkit.org/show_bug.cgi?id=4921
14529        \u escape sequences in JavaScript identifiers
14530
14531        * kjs/function_object.cpp:
14532        (FunctionObjectImp::construct):
14533        * kjs/lexer.cpp:
14534        (Lexer::shift):
14535        (Lexer::lex):
14536        (Lexer::isWhiteSpace):
14537        (Lexer::isLineTerminator):
14538        (Lexer::isIdentStart):
14539        (Lexer::isIdentPart):
14540        (isDecimalDigit):
14541        (Lexer::scanRegExp):
14542        * kjs/lexer.h:
14543        (KJS::Lexer::):
14544
14545        * tests/mozilla/expected.html: Updated test results.
14546
145472005-12-30  Maciej Stachowiak  <mjs@apple.com>
14548
14549        No review, just test result update.
14550
14551        * tests/mozilla/expected.html: Updated for newly passing test from recent fixes.
14552
145532005-12-30  Anders Carlsson  <andersca@mac.com>
14554
14555        Reviewed by Maciej.
14556
14557        - Fix http://bugs.webkit.org/show_bug.cgi?id=6298
14558        Getter setter test is failing
14559                
14560        * kjs/object.cpp:
14561        (KJS::JSObject::put):
14562        Rework the getter setter part. We now walk the prototype chain, checking for
14563        getter/setter properties and only take the slow path if any are found. 
14564
145652005-12-30  Maks Orlovich <maksim@kde.org>
14566
14567        Reviewed and committed by Maciej.
14568
14569        - Handle negative, FP numbers with non-10 radix in toString
14570        http://bugs.webkit.org/show_bug.cgi?id=6259
14571
14572        (Merged from KJS, original work by Harri Porten)
14573        
14574        * kjs/number_object.cpp:
14575        (NumberProtoFunc::callAsFunction): rewrote Number.toString(radix) to work with  
14576        negative numbers, floating point and very large numbers.
14577
145782005-12-29  Geoffrey Garen  <ggaren@apple.com>
14579
14580        Patch by Maks Orlovich, reviewed and landed by me.
14581
14582        - http://bugs.webkit.org/show_bug.cgi?id=6267
14583        Fix Number.prototype.toFixed/toExponential(undefined)
14584
14585        * kjs/number_object.cpp:
14586        (NumberProtoFunc::callAsFunction):
14587
145882005-12-29  Geoffrey Garen  <ggaren@apple.com>
14589
14590        Patch by Maks Orlovich, Reviewed and landed by me.
14591
14592        - http://bugs.webkit.org/show_bug.cgi?id=6266
14593        Minor object naming updates (to match Mozilla, KJS)
14594
14595        * kjs/number_object.cpp:
14596        * kjs/regexp_object.cpp:
14597
145982005-12-29  Geoffrey Garen  <ggaren@apple.com>
14599
14600        Patch by Maks Orlovich, reviewed by mjs.
14601
14602        This has 2 very minor fixes, covered by KJS testsuite:    
14603        1. Enumerates string indices in property list (with the same bug as array    
14604           object has in corresponding code). This is a mozilla emulation thing. 
14605        2. Permits properties with integer names in prototypes to be found    
14606
14607        * kjs/string_object.cpp:
14608        (StringInstance::getOwnPropertySlot):
14609        (StringInstanceImp::propList):
14610        * kjs/string_object.h:
14611
146122005-12-26  Geoffrey Garen  <ggaren@apple.com>
14613
14614        Reviewed by mjs.
14615
14616        - Fixed <rdar://problem/4364705> run-javascriptcore-tests crashes in 
14617        KJS::BlockNode::deref 
14618        AKA 
14619        http://bugs.webkit.org/show_bug.cgi?id=6233
14620        Reproducible stack-overflow crash in ~RefPtr<T> due to RefPtr<T> use in 
14621        linked lists
14622
14623        This patch does four things: 
14624        (1) Standardizes all our linked list nodes to use "next" as their next 
14625        pointers. 
14626        (2) Creates the ListRefPtr<T> class, a subclass of RefPtr<T> specialized
14627        to iteratively deref "next" pointers.
14628        (3) Standardizes our linked list nodes to use ListRefPtr<T> and 
14629        implement the releaseNext() function used by ~ListRefPtr<T>().
14630        (4) Adds to RefPtr<T> the release() method used by releaseNext().
14631
14632        - Modified existing mozilla test to ensure it would make deployment 
14633        builds crash as well.
14634
14635        * JavaScriptCore.xcodeproj/project.pbxproj:
14636        * kjs/nodes.cpp:
14637        (ElementNode::evaluate):
14638        (PropertyListNode::evaluate):
14639        (ArgumentListNode::evaluateList):
14640        (StatListNode::StatListNode):
14641        (StatListNode::execute):
14642        (StatListNode::processVarDecls):
14643        (VarDeclListNode::evaluate):
14644        (VarDeclListNode::processVarDecls):
14645        (VarStatementNode::execute):
14646        (VarStatementNode::processVarDecls):
14647        (BlockNode::BlockNode):
14648        (CaseClauseNode::evalStatements):
14649        (CaseClauseNode::processVarDecls):
14650        (ClauseListNode::processVarDecls):
14651        (CaseBlockNode::CaseBlockNode):
14652        (CaseBlockNode::evalBlock):
14653        (SourceElementsNode::SourceElementsNode):
14654        (SourceElementsNode::execute):
14655        (SourceElementsNode::processFuncDecl):
14656        (SourceElementsNode::processVarDecls):
14657        * kjs/nodes.h:
14658        (KJS::ElementNode::ElementNode):
14659        (KJS::ElementNode::releaseNext):
14660        (KJS::ArrayNode::ArrayNode):
14661        (KJS::PropertyListNode::PropertyListNode):
14662        (KJS::PropertyListNode::releaseNext):
14663        (KJS::ObjectLiteralNode::ObjectLiteralNode):
14664        (KJS::ArgumentListNode::ArgumentListNode):
14665        (KJS::ArgumentListNode::releaseNext):
14666        (KJS::ArgumentsNode::ArgumentsNode):
14667        (KJS::StatListNode::releaseNext):
14668        (KJS::VarDeclListNode::VarDeclListNode):
14669        (KJS::VarDeclListNode::releaseNext):
14670        (KJS::VarStatementNode::VarStatementNode):
14671        (KJS::ForNode::ForNode):
14672        (KJS::CaseClauseNode::CaseClauseNode):
14673        (KJS::ClauseListNode::ClauseListNode):
14674        (KJS::ClauseListNode::getClause):
14675        (KJS::ClauseListNode::getNext):
14676        (KJS::ClauseListNode::releaseNext):
14677        (KJS::ParameterNode::ParameterNode):
14678        (KJS::ParameterNode::releaseNext):
14679        (KJS::SourceElementsNode::releaseNext):
14680        * kjs/nodes2string.cpp:
14681        (ElementNode::streamTo):
14682        (PropertyListNode::streamTo):
14683        (ArgumentListNode::streamTo):
14684        (StatListNode::streamTo):
14685        (VarDeclListNode::streamTo):
14686        (VarStatementNode::streamTo):
14687        (CaseClauseNode::streamTo):
14688        (ClauseListNode::streamTo):
14689        (CaseBlockNode::streamTo):
14690        (SourceElementsNode::streamTo):
14691        * kxmlcore/ListRefPtr.h: Added.
14692        (KXMLCore::ListRefPtr::ListRefPtr):
14693        (KXMLCore::ListRefPtr::~ListRefPtr):
14694        (KXMLCore::ListRefPtr::operator=):
14695        * kxmlcore/RefPtr.h:
14696        (KXMLCore::RefPtr::release):
14697
146982005-12-29  Geoffrey Garen  <ggaren@apple.com>
14699
14700        Reviewed by mjs.
14701
14702        - Fixed http://bugs.webkit.org/show_bug.cgi?id=4026
14703        Math.random() not seeded.
14704
14705        Added call to sranddev() -- it executes the first time a process
14706        calls Math.random().
14707
14708        * kjs/math_object.cpp:
14709        (MathFuncImp::callAsFunction):
14710
147112005-12-29  Geoffrey Garen  <ggaren@apple.com>
14712
14713        Reviewed by darin.
14714
14715        - Fixed http://bugs.webkit.org/show_bug.cgi?id=6265
14716        Name change regression: Java doesn't know what JavaJSObject is
14717
14718        Changed strings passed to Java back to original "JSObject".
14719
14720        * bindings/jni/jni_jsobject.cpp:
14721        (JavaJSObject::convertValueToJObject):
14722        (JavaJSObject::convertJObjectToValue):
14723
147242005-12-28  Anders Carlsson  <andersca@mac.com>
14725
14726        Reviewed by Maciej.
14727
14728        - The JSC part of http://bugs.webkit.org/show_bug.cgi?id=6268
14729        Add undetectable document.all
14730        
14731        * kjs/operations.cpp:
14732        (KJS::equal):
14733        When comparing an object with null or undefined, call toPrimitive with 
14734        NullType as the preferred type.
14735
147362005-12-27  Anders Carlsson  <andersca@mac.com>
14737
14738        Reviewed by Darin.
14739
14740        * kjs/array_object.cpp:
14741        (ArrayProtoFunc::callAsFunction):
14742        Implement filter and map. Also, make the existing
14743        array iteration functions not invoke the callback for
14744        non-existing properties, just as Mozilla does now.
14745        
14746        * kjs/array_object.h:
14747        (KJS::ArrayProtoFunc::):
14748        Add filter and map.
14749        
14750        * tests/mozilla/expected.html:
14751        Update, two 1.6 tests now pass.
14752
147532005-12-27  Maciej Stachowiak  <mjs@apple.com>
14754
14755        - updated test results for new JS 1.6 tests
14756
14757        * tests/mozilla/expected.html:
14758
147592005-12-27  Anders Carlsson  <andersca@mac.com>
14760
14761        Reviewed by Maciej.
14762
14763        Add Mozilla JS 1.6 tests.
14764        
14765        * tests/mozilla/js1_6/Array/browser.js: Added.
14766        * tests/mozilla/js1_6/Array/regress-290592.js: Added.
14767        * tests/mozilla/js1_6/Array/regress-304828.js: Added.
14768        * tests/mozilla/js1_6/Array/regress-305002.js: Added.
14769        * tests/mozilla/js1_6/Array/regress-310425-01.js: Added.
14770        * tests/mozilla/js1_6/Array/regress-310425-02.js: Added.
14771        * tests/mozilla/js1_6/Array/regress-320887.js: Added.
14772        * tests/mozilla/js1_6/Array/shell.js: Added.
14773        * tests/mozilla/js1_6/README: Added.
14774        * tests/mozilla/js1_6/Regress/browser.js: Added.
14775        * tests/mozilla/js1_6/Regress/regress-301574.js: Added.
14776        * tests/mozilla/js1_6/Regress/regress-309242.js: Added.
14777        * tests/mozilla/js1_6/Regress/regress-311157-01.js: Added.
14778        * tests/mozilla/js1_6/Regress/regress-311157-02.js: Added.
14779        * tests/mozilla/js1_6/Regress/regress-314887.js: Added.
14780        * tests/mozilla/js1_6/Regress/regress-320172.js: Added.
14781        * tests/mozilla/js1_6/Regress/shell.js: Added.
14782        * tests/mozilla/js1_6/String/browser.js: Added.
14783        * tests/mozilla/js1_6/String/regress-306591.js: Added.
14784        * tests/mozilla/js1_6/String/shell.js: Added.
14785        * tests/mozilla/js1_6/browser.js: Added.
14786        * tests/mozilla/js1_6/shell.js: Added.
14787        * tests/mozilla/js1_6/template.js: Added.
14788
147892005-12-27  Maks Orlovich <maksim@kde.org>
14790
14791        Reviewed and landed by Maciej.
14792
14793        - fixed 6234: Can delete array index property incorrectly.
14794        http://bugs.webkit.org/show_bug.cgi?id=6234
14795
14796        * kjs/array_object.cpp:
14797        (ArrayInstance::deleteProperty): use toArrayIndex instead of toUInt32 when
14798        looking for array properties.
14799
148002005-12-27  Anders Carlsson  <andersca@mac.com>
14801
14802        Reviewed by Maciej.
14803
14804        * kjs/object.cpp:
14805        (KJS::JSObject::defineSetter):
14806        Remove duplicate call to putDirect.
14807
148082005-12-26  Maciej Stachowiak  <mjs@apple.com>
14809
14810        Reviewed by Darin and Geoff.
14811
14812        Changes by me and Anders.
14813
14814        - mostly fixed REGRESSION: 5-10% performance regression on JS iBench from getter/setter change
14815        http://bugs.webkit.org/show_bug.cgi?id=6083
14816
14817        - also fixed some warnings reported by -Winline
14818        
14819        * JavaScriptCorePrefix.h: Move new and delete definitions higher so there
14820        aren't conflicts with use in standard C++ headers
14821        * kjs/object.cpp:
14822        (KJS::throwSetterError): Moved this piece of put into a seprate function
14823        to avoid the PIC branch.
14824        (KJS::JSObject::put): Use hasGetterSetterProperties to avoid expensive stuff
14825        when not needed. Also use GetterSetter properties attribute.
14826        (KJS::JSObject::deleteProperty): Recompute whether any properties are getter/setter
14827        properties any more, if this one was one.
14828        (KJS::JSObject::defineGetter): Let the PropertyMap know that it has getter/setter
14829        properties now (and use the new attribute).
14830        (KJS::JSObject::defineSetter): Ditto.
14831        (KJS::JSObject::fillGetterPropertySlot): Out-of-line helper for getOwnPropertySlot,
14832        to avoid global variable access in the hot code path.
14833        * kjs/object.h:
14834        (KJS::): Added GetterSetter attribute.
14835        (KJS::JSCell::isObject): Moved lower to be after inline methods it uses.
14836        (KJS::JSValue::isObject): ditto
14837        (KJS::JSObject::getOwnPropertySlot): try to avoid impact of getters and setters
14838        as much as possible in the case where they are not being used
14839        * kjs/property_map.cpp:
14840        (KJS::PropertyMap::containsGettersOrSetters): New method to help with this
14841        * kjs/property_map.h:
14842        (KJS::PropertyMap::hasGetterSetterProperties): Ditto
14843        (KJS::PropertyMap::setHasGetterSetterProperties): Ditto
14844        (KJS::PropertyMap::PropertyMap): Added a crazy hack to store the
14845        global "has getter/setter properties" flag in the property map
14846        single entry, to avoid making objects any bigger.
14847        * kjs/value.h: Moved some things to object.h to make -Winline happier
14848
148492005-12-24  Maciej Stachowiak  <mjs@apple.com>
14850
14851        Reviewed by Eric and Dave Hyatt.
14852
14853        - make even const PassRefPtrs give transfer of ownership semantics
14854        http://bugs.webkit.org/show_bug.cgi?id=6238
14855        
14856        This is a somewhat cheesy change. Having to use PassRefPtr_Ref creates ambiguities
14857        in assignment and copy construction. And this makes life way easier and removes
14858        the need for pass(). It is not really correct, but we pretty much never need a real
14859        const PassRefPtr, and this takes care of things for PassRefPtr temporaries.
14860        
14861        * kjs/identifier.cpp:
14862        (KJS::Identifier::add): No more need for pass()
14863        * kjs/property_map.cpp:
14864        (KJS::PropertyMap::addSparseArrayPropertiesToReferenceList): No more need for pass()
14865        * kjs/ustring.cpp:
14866        (KJS::UString::Rep::create): Use adoptRef
14867        (KJS::UString::UString): No more need for pass
14868        (KJS::UString::append): No more need for pass
14869        (KJS::UString::substr): No more need for pass
14870        * kxmlcore/PassRefPtr.h: made m_ptr mutable (ugh)
14871        (KXMLCore::PassRefPtr::PassRefPtr): Take a const PassRefPtr reference
14872        (KXMLCore::PassRefPtr::release): Made this a const method (ugh)
14873        (KXMLCore::PassRefPtr::operator=): clean up appropriately
14874        (KXMLCore::adoptRef): Added this to use instead of PassRefPtr<T>::adopt, I think
14875        it makes the behavior more clear and it is less verbose.
14876        (KXMLCore::static_pointer_cast): use adoptRef
14877        (KXMLCore::const_pointer_cast): use adoptRef
14878        * kxmlcore/RefPtr.h:
14879        (KXMLCore::RefPtr::RefPtr): take const PassRefPtr&
14880        (KXMLCore::PassRefPtr::operator=): take const PassRefPtr&
14881
148822005-12-25  Eric Seidel  <eseidel@apple.com>
14883
14884        Reviewed by mjs.
14885
14886        Unbreak HashTableConstIterator++ by returning const_iterator
14887
14888        * kxmlcore/HashTable.h:
14889        (KXMLCore::HashTableConstIterator::operator++): use const_iterator
14890
148912005-12-25  Eric Seidel  <eseidel@apple.com>
14892
14893        Reviewed by mjs.
14894
14895        Un-break HashTable copy constructor.
14896
14897        * kxmlcore/HashTable.h:
14898        (KXMLCore::::HashTable): use const_iterator instead
14899
149002005-12-23  Maciej Stachowiak  <mjs@apple.com>
14901
14902        Reviewed by Eric.
14903
14904        - fixed "HashMap does not work with const pointer keys or values"
14905        http://bugs.webkit.org/show_bug.cgi?id=6222
14906        
14907        * kxmlcore/HashMapPtrSpec.h:
14908        (KXMLCore::HashMap): In all methods, explicitly cast all pointers
14909        to void * before passing to internal implementation. Use C-style
14910        casts instead of new-style casts, because the real solution would
14911        require a combo of reinterpret_cast anc const_cast.
14912
14913
149142005-12-23  Maciej Stachowiak  <mjs@apple.com>
14915
14916        - this time for sure
14917
14918        * kxmlcore/RefPtr.h:
14919        (KXMLCore::::swap):
14920
149212005-12-22  Maciej Stachowiak  <mjs@apple.com>
14922
14923        - fix build problem from last commit.
14924
14925        * kxmlcore/RefPtr.h:
14926        (KXMLCore::::swap):
14927
149282005-12-21  Maciej Stachowiak  <mjs@apple.com>
14929
14930        Reviewed by Darin.
14931
14932        - Make HashMap/HashSet support non-POD types
14933        http://bugs.webkit.org/show_bug.cgi?id=5332
14934
14935        The changes for support are relatively simple, but I also made extensive changes to
14936        avoid copying, so that there isn't refcount thrash when you put RefPtrs into a HashMap.
14937
14938        * kxmlcore/HashTable.h:
14939        (KXMLCore::swap): specialize swap for pairs, to swap elements individually,
14940        so that excess copies can be avoided.
14941        (KXMLCore::Mover::move): Template function to either copy or swap, used
14942        when transferring elements from old table to new.
14943        (KXMLCore::IdentityHashTranslator::hash): The old "converting lookup" templates
14944        that took two or three function parameters now take a class parameter, this is
14945        the class used to do a normal lookup.
14946        (KXMLCore::IdentityHashTranslator::equal): Ditto.
14947        (KXMLCore::IdentityHashTranslator::translate): Ditto. Translate now takes a reference
14948        to write into instead of returning a value to avoid redundant copies.
14949        (KXMLCore::HashTable::~HashTable): Use deallocateTable instead of freeing directly.
14950        (KXMLCore::HashTable::insert): Based on HashTranslator now instead of separate
14951        functions. Added a FIXME about a remaining rare excess copy.
14952        (KXMLCore::HashTable::isEmptyBucket): Use KeyTraits directly instead of unwrapping
14953        the key from Traits, to avoid creating and destroying pair, which copies.
14954        (KXMLCore::HashTable::isDeletedBucket): ditto
14955        (KXMLCore::HashTable::lookup): Use HashTranslator now instead of separate functions.
14956        (KXMLCore::HashTable::initializeBucket): Renamed from emptyBucket. Use placement new to
14957        work right for non-POD types.
14958        (KXMLCore::HashTable::deleteBucket): Use assignDeleted to avoid excess copies.
14959        (KXMLCore::HashTable::reinsert): use Mover template to copy or swap as appropriate
14960        (KXMLCore::HashTable::allocateTable): Initialize every bucket if calloc won't do.
14961        (KXMLCore::HashTable::deallocateTable): Destruct every bucket if needed.
14962        (KXMLCore::HashTable::rehash): Avoid copy before reinserting, so that swap can do its magic.
14963        (KXMLCore::HashTable::clear): use deallocateTable instead of freeing directly.
14964        (KXMLCore::HashTable::HashTable): be more dumb when copying to ensure that non-POD types
14965        work right
14966        * kxmlcore/HashFunctions.h:
14967        (KXMLCore::PointerHash): Specialize PointerHash for RefPtr
14968        * kxmlcore/HashMap.h:
14969        (KXMLCore::extractFirst): Return a reference not a full object to avoid
14970        copies.
14971        (KXMLCore::HashMapTranslator::hash): Use a special translator for insertion
14972        to defer making the pair as long as possible, thus avoiding needless copies.
14973        (KXMLCore::HashMapTranslator::equal): ditto
14974        (KXMLCore::HashMapTranslator::translate): ditto
14975        (KXMLCore::::inlineAdd): Shared by set and add to insert using HashMapTranslator
14976        (KXMLCore::::set): Use inlineAdd
14977        (KXMLCore::::add): Use inlineAdd
14978        * kxmlcore/HashMapPtrSpec.h:
14979        (KXMLCore::): Pass KeyTraits along
14980        * kxmlcore/HashSet.h:
14981        (KXMLCore::identityExtract): Return a reference not a full object to avoid copies.
14982        (KXMLCore::HashSetTranslatorAdapter::hash): Redo adapter stuff to work with
14983        the new HashTranslator approach.
14984        (KXMLCore::HashSetTranslatorAdapter::equal): ditto
14985        (KXMLCore::HashSetTranslatorAdapter::translate): ditto
14986        (KXMLCore::::insert): ditto
14987        * kxmlcore/HashTraits.h:
14988        (KXMLCore::GenericHashTraits): This is intended be used as a base class for
14989        customized traits: sensible defaults.
14990        (KXMLCore::): Use it a bunch
14991        (KXMLCore::assignDeleted): template function to allow pairs to be assigned the
14992        deleted value w/o excess copies.
14993        (KXMLCore::PairHashTraits::emptyValue): Updated
14994        (KXMLCore::PairHashTraits::deletedValue): Updated
14995        (KXMLCore::PairHashTraits::assignDeletedValue): part of assignDeleted hack
14996        (KXMLCore::DeletedValueAssigner::assignDeletedValue): Use template magic
14997        to either use use deletedValue or assignDeletedValue for the cases where we care.
14998        * kxmlcore/RefPtr.h:
14999        (KXMLCore::RefPtr::swap): Added swap method.
15000        (KXMLCore::swap): Added swap free function.
15001        * kjs/identifier.cpp:
15002        (KJS::CStringTranslator::hash): Use new HashTranslator class approach to
15003        alternate type based insertion.
15004        (KJS::CStringTranslator::equal): ditto
15005        (KJS::CStringTranslator::translate): ditto
15006        (KJS::Identifier::add): ditto
15007        (KJS::UCharBufferTranslator::hash): ditto
15008        (KJS::UCharBufferTranslator::equal): ditto
15009        (KJS::UCharBufferTranslator::translate): ditto
15010
15011        - irrelevant change:
15012        
15013        * kjs/array_object.cpp:
15014        (ArrayProtoFunc::callAsFunction): Removed a stray space.
15015
150162005-12-22  Anders Carlsson  <andersca@mac.com>
15017
15018        Reviewed by Eric and Darin.
15019
15020        - fix http://bugs.webkit.org/show_bug.cgi?id=6196
15021        Would like to be able to define prototypes in headers
15022        
15023        * kjs/lookup.h:
15024        Move ClassName from KJS_DECLARE_PROTOTYPE to KJS_IMPLEMENT_PROTOTYPE.
15025        Also, namespace all macros by prefixing them with KJS_. 
15026
150272005-12-22  Darin Adler  <darin@apple.com>
15028
15029        Reviewed by Maciej.
15030
15031        - fix http://bugs.webkit.org/show_bug.cgi?id=6191
15032          RefPtr/PassRefPtr have a leak issue, operator== issues
15033
15034        * kxmlcore/PassRefPtr.h:
15035        (KXMLCore::PassRefPtr::PassRefPtr): Remove non-template constructor that takes RefPtr
15036        since the constructor template that takes RefPtr should be sufficient. Add a constructor
15037        template that takes PassRefPtr&.
15038        (KXMLCore::PassRefPtr::adopt): Use PassRefPtr_Ref to avoid setting pointer first to
15039        0 and then to the pointer.
15040        (KXMLCore::PassRefPtr::operator=): Added template versions that take PassRefPtr& and
15041        RefPtr parameters.
15042        (KXMLCore::PassRefPtr::operator PassRefPtr<U>): Changed to fix leak -- old version
15043        would release and then ref.
15044        (KXMLCore::operator==): Make templates have two parameters so you can mix types.
15045        Also remove unneeded const in raw pointer versions.
15046        (KXMLCore::operator!=): Ditto.
15047
15048        * kxmlcore/RefPtr.h:
15049        (KXMLCore::RefPtr::RefPtr): Add constructor template that takes PassRefPtr.
15050        (KXMLCore::RefPtr::operator=): Add assignment operator templates that take
15051        RefPtr and PassRefPtr.
15052        (KXMLCore::operator==): Make templates have two parameters so you can mix types.
15053        Also remove unneeded const in raw pointer versions.
15054        (KXMLCore::operator!=): Ditto.
15055
150562005-12-21  Timothy Hatcher  <timothy@apple.com>
15057
15058        * JavaScriptCore.xcodeproj/project.pbxproj:
15059          Set tab width to 8, indent width to 4 and uses tabs to false per file.
15060
150612005-12-21  Geoffrey Garen  <ggaren@apple.com>
15062
15063        Reviewed by Darin.
15064
15065        Removed evil hack for determining if a type is an integer, replaced
15066        with template metaprogramming.
15067
15068        * JavaScriptCore.xcodeproj/project.pbxproj: Set tab size to 2 for
15069        testkjs.cpp
15070        * kjs/testkjs.cpp:
15071        (main): Inserted asserts to test IsInteger. FIXME: Move these to
15072        KXMLCore unit tests directory when we create one.
15073        * kxmlcore/HashTraits.h:
15074        (KXMLCore::): Added IsInteger class for querying types.
15075
150762005-12-20  Maciej Stachowiak  <mjs@apple.com>
15077
15078        Reviewed by Darin.
15079
15080        - made ALWAYS_INLINE declare things inline as well as __attribute__((always_inline))
15081        http://bugs.webkit.org/show_bug.cgi?id=6159
15082
15083        * kxmlcore/AlwaysInline.h:
15084
150852005-12-19  Maciej Stachowiak  <mjs@apple.com>
15086
15087        Reviewed by Darin.
15088
15089        - fixed a leak in the assignment operator from PassRefPtr to RefPtr
15090        http://bugs.webkit.org/show_bug.cgi?id=6158
15091
15092        * kxmlcore/RefPtr.h:
15093        (KXMLCore::RefPtr::operator=):
15094
15095        - fix problem with PassRefPtr that darin spotted - it lacked a copy constructor
15096        and therefore was using the default one, which can lead to excess derefs
15097
15098        I fixed this by adding a copy constructor from non-const
15099        reference, and by adding a template pass() function that you have
15100        to use when raw pointer or RefPtr are passed where PassRefPtr is
15101        expected.
15102
15103        * kjs/identifier.cpp:
15104        (KJS::Identifier::add): Changed to have PassRefPtr return type and
15105        pass() the results.
15106        * kjs/identifier.h:
15107        * kjs/property_map.cpp:
15108        (KJS::PropertyMap::addSparseArrayPropertiesToReferenceList): Use pass()
15109        where required.
15110        * kjs/ustring.cpp:
15111        (KJS::UString::UString): Use pass() as needed.
15112        (KJS::UString::append): ditto
15113        (KJS::UString::substr): ditto
15114        * kjs/ustring.h:
15115        (KJS::UString::UString): Use initializer instead of assignment
15116        * kxmlcore/PassRefPtr.h:
15117        (KXMLCore::PassRefPtr::PassRefPtr): Added copy constructor
15118        (KXMLCore::pass): new template function to make it convenient to pass
15119        a PassRefPtr
15120
151212005-12-19  Geoffrey Garen  <ggaren@apple.com>
15122  
15123        Reviewed by Maciej.
15124
15125        Fixed <rdar://problem/4370397> Missing return statement in
15126        JSMethodNameToObjcMethodName.
15127
15128        JSMethodNameToObjcMethodName had a check for a name being too long, but
15129        the check was missing a return statement.
15130
15131        A lot of this code was confusing and some of it was wrong, so I fixed
15132        it up, added some asserts to catch this type of bug in the future, 
15133        changed some comments, and renamed some variables.
15134
15135        The two advantages of the new algorithm are (1) It makes writing past
15136        the end of the buffer virtually impossible because the test on the main
15137        loop is "while (not past end of buffer)" and (2) It's twice as fast
15138        because it doesn't call strlen. (There's no need to call strlen when
15139        we're walking the string ourselves.) 
15140        
15141        methodsNamed also supports arbitrary-length method names now. Just in 
15142        case the AppKit folks start getting REALLY verbose...
15143
15144        * bindings/objc/objc_class.mm:
15145        (KJS::Bindings::ObjcClass::methodsNamed):
15146        * bindings/objc/objc_utility.h:
15147        * bindings/objc/objc_utility.mm:
15148        (KJS::Bindings::JSMethodNameToObjcMethodName):
15149
151502005-12-19  Darin Adler  <darin@apple.com>
15151
15152        Originally done by both George Staikos and Alexey Proskuryakov.
15153
15154        - fix http://bugs.webkit.org/show_bug.cgi?id=5706
15155          Sharedptr dependency can be removed
15156
15157        Our coding guidelines say "use 0 instead of NULL" and both RefPtr and
15158        PassRefPtr were using NULL, which required including a header that
15159        defines NULL.
15160
15161        * kxmlcore/PassRefPtr.h:
15162        (KXMLCore::PassRefPtr::PassRefPtr): Use 0 instead of NULL.
15163        (KXMLCore::PassRefPtr::operator!): Use ! instead of == NULL.
15164        * kxmlcore/RefPtr.h:
15165        (KXMLCore::RefPtr::RefPtr): Use 0 instead of NULL.
15166        (KXMLCore::RefPtr::operator!): Use ! instead of == NULL.
15167        Also did some reformatting.
15168
151692005-12-19  Darin Adler  <darin@apple.com>
15170
15171        Reviewed by Geoff Garen and Eric Seidel.
15172
15173        - fix http://bugs.webkit.org/show_bug.cgi?id=4923
15174          stop using <ostream> in WebCore, eliminating the <cmath> troubles it causes
15175
15176        * kjs/simple_number.h: Removed many unnecessary includes, including
15177        the <cmath> one to work around GCC library header bugs. We may have to
15178        add some includes elsewhere for platforms other than OS X, since our
15179        prefix header takes care of some things.
15180
15181        * kxmlcore/AlwaysInline.h: Added. Now clients that don't include
15182        simple_number.h can still get the ALWAYS_INLINE macro.
15183        * JavaScriptCore.xcodeproj/project.pbxproj: Added AlwaysInline.h.
15184
15185        * bindings/NP_jsobject.h: Removed a lot of unnecessary includes
15186        and removed C-specific stuff from this C++-only header.
15187        * bindings/jni/jni_jsobject.h: Removed a lot of unnecessary includes
15188        and did some reformatting.
15189        * bindings/objc/objc_runtime.h:  Removed an unnecessary include.
15190        * bindings/runtime.h: Removed some unneeded includes. Reformatted.
15191        * bindings/runtime.cpp: Updated to compile with header changes,
15192        including a lot of reformatting.
15193        * bindings/runtime_object.h: Removed an unnecessary include.
15194
151952005-12-13  Maciej Stachowiak  <mjs@apple.com>
15196
15197        Reviewed by Geoff and Adele
15198
15199        - replaced custom Identifier hashtable with HashSet
15200
15201        * kjs/identifier.cpp:
15202        (KXMLCore::):
15203        (KJS::identifierTable):
15204        (KJS::Identifier::equal):
15205        (KJS::hash):
15206        (KJS::equal):
15207        (KJS::convert):
15208        (KJS::Identifier::add):
15209        (KJS::Identifier::remove):
15210        * kjs/identifier.h:
15211        * kjs/internal.cpp:
15212        (KJS::InterpreterImp::initGlobalObject):
15213
152142005-12-18  Justin Haygood  <justin@xiondigital.net>
15215
15216        Reviewed, tweaked, and landed by Darin.
15217
15218        - fix http://bugs.webkit.org/show_bug.cgi?id=5227
15219          Array indexOf() extension for JavaScript 1.5 Core
15220
15221        * kjs/array_object.h:
15222        * kjs/array_object.cpp: (ArrayProtoFunc::callAsFunction): Added implementation of indexOf.
15223
152242005-12-18  Anders Carlsson  <andersca@mac.com>
15225
15226        Reviewed by Darin and Geoffrey.
15227
15228        - fix for <http://bugs.webkit.org/show_bug.cgi?id=4000>
15229        Object.prototype is missing isPrototypeOf
15230        
15231        * kjs/object_object.cpp:
15232        (ObjectPrototype::ObjectPrototype):
15233        Add isPrototypeOf to object prototype.
15234        
15235        (ObjectProtoFunc::callAsFunction):
15236        Implement isPrototypeOf
15237        
15238        * kjs/object_object.h:
15239        (KJS::ObjectProtoFunc::):
15240        Add id for isPrototypeOf.
15241
152422005-12-17  Geoffrey Garen  <ggaren@apple.com>
15243
15244        Reviewed by Darin.
15245
15246        Fixed http://bugs.webkit.org/show_bug.cgi?id=6119
15247        split() function ignores case insensitive modifier.
15248
15249        Glossary:
15250        RegExpImp: The C++ object you get when JavaScript executes
15251                   "new RegExp()".
15252        RegExp:    A C++ wrapper object that performs regular expression
15253                   matching on behalf of a RegExpImp.
15254
15255        Instead of unnecessarily constructing a RegExp which (wrongly) lacks
15256        any modifiers, String.split() now uses the RegExp built in to the 
15257        RegExpImp passed to it, which has the right modifiers already.
15258
15259        I also cleaned up other bits of the string code to standardized how
15260        we handle RegExpImp arguments.
15261
15262        * ChangeLog:
15263        * kjs/string_object.cpp:
15264        (replace):
15265        (StringProtoFunc::callAsFunction):
15266
152672005-12-16  David Hyatt  <hyatt@apple.com>
15268
15269        Remove unused RefPtr constructors that can create an ambiguity in ustring on some platforms.
15270        
15271        Reviewed by mjs
15272
15273        * kxmlcore/RefPtr.h:
15274        (KXMLCore::RefPtr::RefPtr):
15275
152762005-12-15  Darin Adler  <darin@apple.com>
15277
15278        Reviewed by Maciej.
15279
15280        - fix http://bugs.webkit.org/show_bug.cgi?id=5688
15281          speed up JavaScript parsing by not creating a UString just to parse
15282
15283        * kjs/internal.h:
15284        * kjs/internal.cpp: (KJS::InterpreterImp::evaluate): Change to take a character pointer
15285        and length rather than a UString.
15286
15287        * kjs/interpreter.h:
15288        * kjs/interpreter.cpp: (Interpreter::evaluate): Ditto.
15289
15290        * kjs/protect.h: Remove uneeded "convert to bool" operator since we already have a
15291        "convert to raw pointer" operator in this class.
15292
15293=== Safari-521~5 ===
15294
152952005-12-13  Geoffrey Garen  <ggaren@apple.com>
15296
15297        Updated test results to match Anders's last fix.
15298
15299        * tests/mozilla/expected.html:
15300
153012005-12-13  Anders Carlsson  <andersca@mac.com>
15302
15303        * ChangeLog: Add titles for my bugzilla bugs.
15304
153052005-12-13  Anders Carlsson  <andersca@mac.com>
15306
15307        Reviewed by Darin.
15308
15309        - Fixes <http://bugs.webkit.org/show_bug.cgi?id=6041>
15310        Support property getters and setters.
15311        
15312        * bindings/runtime_array.cpp:
15313        (RuntimeArray::lengthGetter):
15314        (RuntimeArray::indexGetter):
15315        * bindings/runtime_array.h:
15316        * bindings/runtime_method.cpp:
15317        (RuntimeMethod::lengthGetter):
15318        * bindings/runtime_method.h:
15319        * bindings/runtime_object.cpp:
15320        (RuntimeObjectImp::fallbackObjectGetter):
15321        (RuntimeObjectImp::fieldGetter):
15322        (RuntimeObjectImp::methodGetter):
15323        * bindings/runtime_object.h:
15324        * kjs/array_instance.h:
15325        * kjs/array_object.cpp:
15326        (ArrayInstance::lengthGetter):
15327        (getProperty):
15328        Update for changes to PropertySlot::getValue and
15329        PropertySlot::GetValueFunc.
15330        
15331        * kjs/collector.cpp:
15332        (KJS::className):
15333        Handle GetterSetterType.
15334        
15335        * kjs/function.cpp:
15336        (KJS::FunctionImp::argumentsGetter):
15337        (KJS::FunctionImp::lengthGetter):
15338        (KJS::Arguments::mappedIndexGetter):
15339        (KJS::ActivationImp::argumentsGetter):
15340        * kjs/function.h:
15341        Update for changes to PropertySlot::getValue and
15342        PropertySlot::GetValueFunc.
15343        
15344        * kjs/grammar.y:
15345        Rework grammar parts for get set declarations directly
15346        in the object literal.
15347        
15348        * kjs/internal.cpp:
15349        (KJS::GetterSetterImp::mark):
15350        (KJS::GetterSetterImp::toPrimitive):
15351        (KJS::GetterSetterImp::toBoolean):
15352        (KJS::GetterSetterImp::toNumber):
15353        (KJS::GetterSetterImp::toString):
15354        (KJS::GetterSetterImp::toObject):
15355        Add type conversion functions. These aren't meant to be called.
15356        
15357        (KJS::printInfo):
15358        Handle GetterSetterType.
15359        
15360        * kjs/lookup.h:        
15361        (KJS::staticFunctionGetter):
15362        (KJS::staticValueGetter):
15363        Update for changes to PropertySlot::GetValueFunc.
15364        
15365        * kjs/nodes.cpp:
15366        Refactor they way properties nodes are implemented.
15367        We now have a PropertyListNode which is a list of PropertyNodes.
15368        Each PropertyNode has a name (which is a PropertyNameNode) and an associated
15369        value node. PropertyNodes can be of different types. The Constant type is the
15370        old constant declaration and the Getter and Setter types are for property getters
15371        and setters.
15372        (ResolveNode::evaluate):
15373        Update for changes to PropertySlot::getValue.
15374        
15375        (PropertyListNode::evaluate):
15376        Go through all property nodes and set them on the newly created object. If the
15377        property nodes are of type Getter or Setter, define getters and setters. Otherwise,
15378        just add the properties like before.
15379        
15380        (PropertyNode::evaluate):
15381        This should never be called directly.
15382        
15383        (PropertyNameNode::evaluate):
15384        Rename from PropertyNode::evaluate.
15385        
15386        (FunctionCallResolveNode::evaluate):
15387        (FunctionCallBracketNode::evaluate):
15388        (FunctionCallDotNode::evaluate):
15389        (PostfixResolveNode::evaluate):
15390        (PostfixBracketNode::evaluate):
15391        (PostfixDotNode::evaluate):
15392        (TypeOfResolveNode::evaluate):
15393        (PrefixResolveNode::evaluate):
15394        (PrefixBracketNode::evaluate):
15395        (PrefixDotNode::evaluate):
15396        (AssignResolveNode::evaluate):
15397        (AssignDotNode::evaluate):
15398        (AssignBracketNode::evaluate):
15399        Update for changes to PropertySlot::getValue.
15400        
15401        * kjs/nodes.h:
15402        (KJS::PropertyNameNode::PropertyNameNode):
15403        Rename from PropertyNode.
15404        
15405        (KJS::PropertyNode::):
15406        (KJS::PropertyNode::PropertyNode):
15407        New class, representing a single property.
15408        
15409        (KJS::PropertyListNode::PropertyListNode):
15410        Rename from PropertyValueNode.
15411        
15412        (KJS::FuncExprNode::FuncExprNode):
15413        Put ParameterNode parameter last, and make it optional.
15414        
15415        (KJS::ObjectLiteralNode::ObjectLiteralNode):
15416        Use a PropertyListNode here now.
15417        
15418        * kjs/nodes2string.cpp:
15419        (PropertyListNode::streamTo):
15420        Iterate through all property nodes.
15421        
15422        (PropertyNode::streamTo):
15423        Print out the name and value. Doesn't handle getters and setters currently.
15424        
15425        (PropertyNameNode::streamTo):
15426        Rename from PropertyNode::streamTo.
15427        
15428        * kjs/object.cpp:
15429        (KJS::JSObject::get):
15430        Update for changes to PropertySlot::getValue.
15431        
15432        (KJS::JSObject::put):
15433        If the property already exists and has a Setter, invoke
15434        the setter function instead of setting the property directly.
15435        
15436        (KJS::JSObject::defineGetter):
15437        (KJS::JSObject::defineSetter):
15438        New functions for defining property getters and setters on the object.
15439        
15440        * kjs/object.h:
15441        (KJS::GetterSetterImp::type):
15442        (KJS::GetterSetterImp::GetterSetterImp):
15443        (KJS::GetterSetterImp::getGetter):
15444        (KJS::GetterSetterImp::setGetter):
15445        (KJS::GetterSetterImp::getSetter):
15446        (KJS::GetterSetterImp::setSetter):
15447        New class for properties which have getters and setters defined.
15448        This class is only used internally and should never be seen from the outside.
15449        
15450        (KJS::JSObject::getOwnPropertySlot):
15451         If the property is a getter, call setGetterSlot on the property slot.
15452         
15453        * kjs/object_object.cpp:
15454        (ObjectPrototype::ObjectPrototype):
15455        Add __defineGetter__, __defineSetter, __lookupGetter__, __lookupSetter__
15456        to prototype.
15457        
15458        (ObjectProtoFunc::callAsFunction):
15459        Implement handlers for new functions.
15460        
15461        * kjs/object_object.h:
15462        (KJS::ObjectProtoFunc::):
15463        Add ids for new functions.
15464        
15465        * kjs/property_slot.cpp:
15466        (KJS::PropertySlot::undefinedGetter):
15467        Update for changes to PropertySlot::GetValueFunc.
15468        
15469        (KJS::PropertySlot::functionGetter):
15470        Call the function getter object and return its value.
15471        
15472        * kjs/property_slot.h:
15473        (KJS::PropertySlot::getValue):
15474        Add a new argument which is the original object that
15475        getPropertySlot was called on.
15476        
15477        (KJS::PropertySlot::setGetterSlot):
15478        (KJS::PropertySlot::):
15479        New function which sets a getter slot. When getValue is called on a 
15480        getter slot, the getter function object is invoked.
15481        
15482        * kjs/string_object.cpp:
15483        (StringInstance::lengthGetter):
15484        (StringInstance::indexGetter):
15485        * kjs/string_object.h:
15486        Update for changes to PropertySlot::GetValueFunc.
15487        
15488        * kjs/value.h:
15489        (KJS::):
15490        Add GetterSetterType and make GetterSetterImp a friend class of JSCell.
15491
154922005-12-12  Maciej Stachowiak  <mjs@apple.com>
15493
15494        Reviewed by Eric.
15495
15496        - added a new HashCountedSet class for the common pattern of mapping items to counts that can change
15497        
15498        * kxmlcore/HashCountedSet.h: Added.
15499        (KXMLCore::HashCountedSet::*): Implemented, on top of HashMap.
15500        * kxmlcore/HashMap.h:
15501        (KXMLCore::HashMap::add): New method - does not replace existing value if key already present
15502        but otherwise like set().
15503        (KXMLCore::HashMap::set): Improved comments.
15504        * kxmlcore/HashMapPtrSpec.h:
15505        (KXMLCore::HashMap::add): Added to specializations too.
15506        * JavaScriptCore.xcodeproj/project.pbxproj: Add new  file.
15507        * kxmlcore/HashFunctions.h: Added include of stdint.h
15508        
15509        - replaced the custom hashtable for values protected from GC with HashCountedSet
15510
15511        * kjs/collector.cpp:
15512        (KJS::Collector::protect): Moved code here from ProtectedValues::increaseProtectCount
15513        since the code is so simple now.
15514        (KJS::Collector::unprotect): Ditto for ProtectedValues::decreaseProtectCount.
15515        (KJS::Collector::markProtectedObjects): Updated for new way of doing things, now
15516        simpler and safer.
15517        (KJS::Collector::numReferencedObjects): ditto
15518        (KJS::Collector::rootObjectClasses): ditto
15519        * kjs/collector.h: Added protect and unprotect static methods
15520        * kjs/protect.h:
15521        (KJS::gcProtect): Updated for removal of ProtectedValues class
15522        (KJS::gcUnprotect): likewise
15523        * kjs/protected_values.cpp: Removed.
15524        * kjs/protected_values.h: Removed.
15525
155262005-12-10  Darin Adler  <darin@apple.com>
15527
15528        Rubber stamped by Maciej.
15529
15530        - did long-promised KJS renaming:
15531        
15532            ValueImp -> JSValue
15533            ObjectImp -> JSObject
15534            AllocatedValueImp -> JSCell
15535        
15536        A renaming to get a class out of the way
15537        
15538            KJS::Bindings::JSObject -> JavaJSObject
15539 
15540        and some other "imp-reduction" renaming
15541        
15542            *InstanceImp -> *Instance
15543            *ProtoFuncImp -> *ProtoFunc
15544            *PrototypeImp -> *Prototype
15545            ArgumentsImp -> Arguments
15546            RuntimeArrayImp -> RuntimeArray
15547            RuntimeMethodImp -> RuntimeMethod
15548
15549        * most files and functions
15550
155512005-12-10  Darin Adler  <darin@apple.com>
15552
15553        Reviewed by Maciej.
15554
15555        - eliminated the old Undefined(), Null(), Boolean(), Number(), and String()
15556
15557        Code now uses jsUndefined(), jsNull(), jsBoolean(), jsNumber(), and jsString().
15558
15559        * bindings/NP_jsobject.cpp:
15560        (_NPN_Evaluate):
15561        * bindings/c/c_instance.cpp:
15562        (KJS::Bindings::CInstance::invokeMethod):
15563        (KJS::Bindings::CInstance::invokeDefaultMethod):
15564        * bindings/c/c_runtime.cpp:
15565        (CField::valueFromInstance):
15566        * bindings/c/c_utility.cpp:
15567        (KJS::Bindings::convertNPVariantToValue):
15568        * bindings/jni/jni_instance.cpp:
15569        (JavaInstance::invokeMethod):
15570        (JavaInstance::invokeDefaultMethod):
15571        * bindings/jni/jni_jsobject.cpp:
15572        (JSObject::eval):
15573        (JSObject::convertJObjectToValue):
15574        * bindings/jni/jni_runtime.cpp:
15575        (JavaArray::convertJObjectToArray):
15576        (JavaField::valueFromInstance):
15577        (JavaArray::valueAt):
15578        * bindings/objc/WebScriptObject.mm:
15579        (-[WebScriptObject callWebScriptMethod:withArguments:]):
15580        (-[WebScriptObject evaluateWebScript:]):
15581        (-[WebScriptObject valueForKey:]):
15582        (-[WebScriptObject webScriptValueAtIndex:]):
15583        * bindings/objc/objc_instance.mm:
15584        (ObjcInstance::invokeMethod):
15585        (ObjcInstance::invokeDefaultMethod):
15586        (ObjcInstance::getValueOfUndefinedField):
15587        * bindings/objc/objc_runtime.mm:
15588        (ObjcField::valueFromInstance):
15589        (ObjcFallbackObjectImp::callAsFunction):
15590        * bindings/objc/objc_utility.mm:
15591        (KJS::Bindings::convertNSStringToString):
15592        (KJS::Bindings::convertObjcValueToValue):
15593        * bindings/runtime.h:
15594        (KJS::Bindings::Class::fallbackObject):
15595        (KJS::Bindings::Instance::getValueOfUndefinedField):
15596        (KJS::Bindings::Instance::valueOf):
15597        * bindings/runtime_array.cpp:
15598        (RuntimeArrayImp::lengthGetter):
15599        * bindings/runtime_method.cpp:
15600        (RuntimeMethodImp::lengthGetter):
15601        (RuntimeMethodImp::callAsFunction):
15602        (RuntimeMethodImp::execute):
15603        * kjs/array_object.cpp:
15604        (ArrayInstanceImp::lengthGetter):
15605        (CompareWithCompareFunctionArguments::CompareWithCompareFunctionArguments):
15606        (ArrayPrototypeImp::ArrayPrototypeImp):
15607        (ArrayProtoFuncImp::ArrayProtoFuncImp):
15608        (ArrayProtoFuncImp::callAsFunction):
15609        (ArrayObjectImp::ArrayObjectImp):
15610        * kjs/bool_object.cpp:
15611        (BooleanPrototypeImp::BooleanPrototypeImp):
15612        (BooleanProtoFuncImp::callAsFunction):
15613        (BooleanObjectImp::BooleanObjectImp):
15614        (BooleanObjectImp::callAsFunction):
15615        * kjs/error_object.cpp:
15616        (ErrorPrototypeImp::ErrorPrototypeImp):
15617        (ErrorProtoFuncImp::ErrorProtoFuncImp):
15618        (ErrorProtoFuncImp::callAsFunction):
15619        (ErrorObjectImp::ErrorObjectImp):
15620        (NativeErrorImp::NativeErrorImp):
15621        * kjs/function.cpp:
15622        (KJS::FunctionImp::callAsFunction):
15623        (KJS::FunctionImp::processParameters):
15624        (KJS::FunctionImp::argumentsGetter):
15625        (KJS::FunctionImp::lengthGetter):
15626        (KJS::DeclaredFunctionImp::execute):
15627        (KJS::encode):
15628        (KJS::decode):
15629        (KJS::GlobalFuncImp::callAsFunction):
15630        * kjs/function_object.cpp:
15631        (FunctionPrototypeImp::FunctionPrototypeImp):
15632        (FunctionPrototypeImp::callAsFunction):
15633        (FunctionProtoFuncImp::callAsFunction):
15634        (FunctionObjectImp::FunctionObjectImp):
15635        * kjs/internal.cpp:
15636        (KJS::InterpreterImp::initGlobalObject):
15637        * kjs/interpreter.h:
15638        * kjs/lookup.h:
15639        * kjs/math_object.cpp:
15640        (MathObjectImp::getValueProperty):
15641        (MathFuncImp::callAsFunction):
15642        * kjs/nodes.cpp:
15643        (Node::setExceptionDetailsIfNeeded):
15644        (NullNode::evaluate):
15645        (PropertyNode::evaluate):
15646        (FunctionCallBracketNode::evaluate):
15647        (FunctionCallDotNode::evaluate):
15648        (PostfixBracketNode::evaluate):
15649        (PostfixDotNode::evaluate):
15650        (VoidNode::evaluate):
15651        (PrefixBracketNode::evaluate):
15652        (PrefixDotNode::evaluate):
15653        (ShiftNode::evaluate):
15654        (valueForReadModifyAssignment):
15655        (AssignDotNode::evaluate):
15656        (AssignBracketNode::evaluate):
15657        (VarDeclNode::evaluate):
15658        (VarDeclNode::processVarDecls):
15659        (VarDeclListNode::evaluate):
15660        (ReturnNode::execute):
15661        (CaseClauseNode::evalStatements):
15662        (ParameterNode::evaluate):
15663        (FuncDeclNode::processFuncDecl):
15664        * kjs/nodes.h:
15665        (KJS::StatementNode::evaluate):
15666        * kjs/number_object.cpp:
15667        (NumberPrototypeImp::NumberPrototypeImp):
15668        (NumberProtoFuncImp::callAsFunction):
15669        (NumberObjectImp::NumberObjectImp):
15670        (NumberObjectImp::getValueProperty):
15671        (NumberObjectImp::callAsFunction):
15672        * kjs/object.cpp:
15673        (KJS::ObjectImp::get):
15674        (KJS::Error::create):
15675        * kjs/object_object.cpp:
15676        (ObjectPrototypeImp::ObjectPrototypeImp):
15677        (ObjectProtoFuncImp::callAsFunction):
15678        (ObjectObjectImp::ObjectObjectImp):
15679        * kjs/property_slot.cpp:
15680        (KJS::PropertySlot::undefinedGetter):
15681        * kjs/regexp_object.cpp:
15682        (RegExpPrototypeImp::RegExpPrototypeImp):
15683        (RegExpProtoFuncImp::callAsFunction):
15684        (RegExpObjectImp::RegExpObjectImp):
15685        (RegExpObjectImp::arrayOfMatches):
15686        (RegExpObjectImp::getBackref):
15687        (RegExpObjectImp::getLastMatch):
15688        (RegExpObjectImp::getLastParen):
15689        (RegExpObjectImp::getLeftContext):
15690        (RegExpObjectImp::getRightContext):
15691        (RegExpObjectImp::getValueProperty):
15692        (RegExpObjectImp::construct):
15693        * kjs/string_object.cpp:
15694        (StringInstanceImp::StringInstanceImp):
15695        (StringPrototypeImp::StringPrototypeImp):
15696        (replace):
15697        (StringProtoFuncImp::callAsFunction):
15698        (StringObjectImp::StringObjectImp):
15699        (StringObjectImp::callAsFunction):
15700        (StringObjectFuncImp::StringObjectFuncImp):
15701        (StringObjectFuncImp::callAsFunction):
15702        * kjs/testkjs.cpp:
15703        (TestFunctionImp::callAsFunction):
15704        (VersionFunctionImp::callAsFunction):
15705        * kjs/value.h:
15706
157072005-12-10  Oliver Hunt  <ojh16@student.canterbury.ac.nz>
15708
15709        Reviewed by Maciej, landed by Darin.
15710
15711        - fix http://bugs.webkit.org/show_bug.cgi?id=3539
15712          Array join and toString methods do not support circular references
15713
15714        * kjs/array_object.cpp: (ArrayProtoFuncImp::callAsFunction):
15715        Added set of visited objects -- don't recurse if item is already in the set.
15716
157172005-12-08  Maciej Stachowiak  <mjs@apple.com>
15718
15719        Reviewed by John.
15720
15721        - fix major memory leak and resultant slowdown on JavaScript iBench from
15722        my PassRefPtr changes
15723        
15724        * kjs/ustring.cpp:
15725        (KJS::UString::Rep::create): I forgot to change one of the two overloads to create
15726        with a refcount of 0 instead of 1 (the smart pointer then bumps it. But instead of
15727        changing it, I changed both to start with a refcounter of 1 and use PassRefPtr::adopt
15728        to adopt the initial refcount, this may be a hair more efficient.
15729
15730        - made the assignment operators for smart pointers inline because Shark said so
15731        
15732        * kxmlcore/PassRefPtr.h:
15733        (KXMLCore::::operator=):
15734        * kxmlcore/RefPtr.h:
15735        (KXMLCore::::operator=):
15736
157372005-12-06  Anders Carlsson  <andersca@mac.com>
15738
15739        Reviewed by Darin.
15740
15741        - fix build when using gcc 4
15742                
15743        * kjs/ustring.h:
15744        Make Rep public.
15745
15746        * kxmlcore/PassRefPtr.h:
15747        (KXMLCore::::operator):
15748        Fix a typo.
15749
157502005-12-05  Maciej Stachowiak  <mjs@apple.com>
15751
15752        Reviewed by Eric.
15753
15754        - add PassRefPtr, a smart pointer class that works in conjunction
15755        with RefPtr but has transfer-of-ownership semantics
15756        - apply RefPtr and PassRefPtr to UString
15757        - cleaned up UString a little so that it doesn't need to have so many friend classes
15758
15759        * JavaScriptCore.xcodeproj/project.pbxproj:
15760        * kjs/identifier.cpp:
15761        (KJS::Identifier::add):
15762        * kjs/identifier.h:
15763        (KJS::Identifier::Identifier):
15764        (KJS::Identifier::equal):
15765        * kjs/property_map.cpp:
15766        (KJS::PropertyMap::get):
15767        (KJS::PropertyMap::getLocation):
15768        (KJS::PropertyMap::put):
15769        (KJS::PropertyMap::remove):
15770        * kjs/ustring.cpp:
15771        (KJS::UCharReference::operator=):
15772        (KJS::UCharReference::ref):
15773        (KJS::UString::Rep::createCopying):
15774        (KJS::UString::Rep::create):
15775        (KJS::UString::usedCapacity):
15776        (KJS::UString::usedPreCapacity):
15777        (KJS::UString::expandCapacity):
15778        (KJS::UString::expandPreCapacity):
15779        (KJS::UString::UString):
15780        (KJS::UString::spliceSubstringsWithSeparators):
15781        (KJS::UString::append):
15782        (KJS::UString::operator=):
15783        (KJS::UString::toStrictUInt32):
15784        (KJS::UString::substr):
15785        (KJS::UString::copyForWriting):
15786        (KJS::operator==):
15787        * kjs/ustring.h:
15788        (KJS::UString::UString):
15789        (KJS::UString::~UString):
15790        (KJS::UString::data):
15791        (KJS::UString::isNull):
15792        (KJS::UString::isEmpty):
15793        (KJS::UString::size):
15794        (KJS::UString::rep):
15795        * kxmlcore/RefPtr.h:
15796        (KXMLCore::RefPtr::RefPtr):
15797        (KXMLCore::RefPtr::operator*):
15798        (KXMLCore::::operator):
15799        (KXMLCore::operator==):
15800        (KXMLCore::operator!=):
15801        (KXMLCore::static_pointer_cast):
15802        (KXMLCore::const_pointer_cast):
15803
158042005-12-04  Geoffrey Garen  <ggaren@apple.com>
15805
15806        Update test results to match Anders's last checkin.
15807
15808        * tests/mozilla/expected.html:
15809
158102005-12-04  Anders Carlsson  <andersca@mac.com>
15811
15812        Reviewed by Geoffrey.
15813
15814        - Fixes <http://bugs.webkit.org/show_bug.cgi?id=3999>
15815        Object.prototype is missing propertyIsEnumerable
15816        
15817        * kjs/object.cpp:
15818        (KJS::ObjectImp::canPut):
15819        Refactor to use getPropertyAttributes.
15820
15821        (KJS::ObjectImp::propertyIsEnumerable):
15822        New function which checks if a property is enumerable.
15823
15824        (KJS::ObjectImp::getPropertyAttributes):
15825        * kjs/object.h:
15826        Add getPropertyAttributes and propertyIsEnumerable.
15827
15828        * kjs/object_object.cpp:
15829        (ObjectPrototypeImp::ObjectPrototypeImp):
15830        (ObjectProtoFuncImp::callAsFunction):
15831        * kjs/object_object.h:
15832        (KJS::ObjectProtoFuncImp::):
15833        Add propertyIsEnumerable to the Object prototype.
15834
158352005-12-01  Maciej Stachowiak  <mjs@apple.com>
15836
15837        Reviewed by Tim Hatcher.
15838
15839        - removed deprecated reset, isNull and nonNull methods
15840
15841        * kxmlcore/RefPtr.h:
15842
158432005-12-01  Anders Carlsson  <andersca@mac.com>
15844
15845        Reviewed by Darin.
15846
15847        - Fixes <http://bugs.webkit.org/show_bug.cgi?id=3382>
15848        nodes2strings.cpp fails to print left expression of ForInNode when 'var' is not used
15849        
15850        Patch by Mark Rowe.
15851
15852        * kjs/nodes2string.cpp:
15853        (ForInNode::streamTo):
15854        Add lexpr if there's no varDecl.
15855
158562005-12-01  Maciej Stachowiak  <mjs@apple.com>
15857
15858        Rubber stamped by Eric.
15859
15860        - renamed SharedPtr to RefPtr via script
15861
15862        * JavaScriptCore.xcodeproj/project.pbxproj:
15863        * kjs/function.cpp:
15864        (KJS::GlobalFuncImp::callAsFunction):
15865        * kjs/function.h:
15866        * kjs/function_object.cpp:
15867        (FunctionObjectImp::construct):
15868        * kjs/internal.cpp:
15869        (KJS::Parser::parse):
15870        (KJS::InterpreterImp::checkSyntax):
15871        (KJS::InterpreterImp::evaluate):
15872        * kjs/internal.h:
15873        * kjs/nodes.h:
15874        * kjs/nodes2string.cpp:
15875        (KJS::SourceStream::operator<<):
15876        * kjs/protect.h:
15877        * kxmlcore/RefPtr.h: Added.
15878        (KXMLCore::RefPtr::RefPtr):
15879        (KXMLCore::RefPtr::~RefPtr):
15880        (KXMLCore::RefPtr::isNull):
15881        (KXMLCore::RefPtr::notNull):
15882        (KXMLCore::RefPtr::reset):
15883        (KXMLCore::RefPtr::get):
15884        (KXMLCore::RefPtr::operator*):
15885        (KXMLCore::RefPtr::operator->):
15886        (KXMLCore::RefPtr::operator!):
15887        (KXMLCore::RefPtr::operator UnspecifiedBoolType):
15888        (KXMLCore::::operator):
15889        (KXMLCore::operator==):
15890        (KXMLCore::operator!=):
15891        (KXMLCore::static_pointer_cast):
15892        (KXMLCore::const_pointer_cast):
15893        * kxmlcore/SharedPtr.h: Removed.
15894
158952005-11-30  Maciej Stachowiak  <mjs@apple.com>
15896
15897        Reviewed by Dave Hyatt.
15898
15899        - change idiom used for implicit bool conversion of smart pointers, because the old one gives weird error messages sometimes
15900
15901        * kjs/protect.h:
15902        (KJS::ProtectedPtr::operator UnspecifiedBoolType):
15903        * kxmlcore/SharedPtr.h:
15904        (KXMLCore::SharedPtr::operator UnspecifiedBoolType):
15905
159062005-11-29  Mitz Pettel  <opendarwin.org@mitzpettel.com>
15907
15908        Reviewed by ggaren.  Committed by eseidel.
15909
15910        Date conversion to local time gets the DST flag wrong sometimes
15911        http://bugs.webkit.org/show_bug.cgi?id=5514
15912
15913        * kjs/date_object.cpp:
15914        (KJS::isTime_tSigned):
15915        (KJS::DateProtoFuncImp::callAsFunction):
15916
159172005-11-26  Maciej Stachowiak  <mjs@apple.com>
15918
15919        Rubber stamped by Eric.
15920
15921        - renamed InterpreterLock to JSLock
15922
15923        * bindings/NP_jsobject.cpp:
15924        (_NPN_Invoke):
15925        (_NPN_Evaluate):
15926        (_NPN_GetProperty):
15927        (_NPN_SetProperty):
15928        (_NPN_RemoveProperty):
15929        (_NPN_HasProperty):
15930        (_NPN_HasMethod):
15931        (_NPN_SetException):
15932        * bindings/jni/jni_jsobject.cpp:
15933        (JSObject::call):
15934        (JSObject::eval):
15935        (JSObject::getMember):
15936        (JSObject::setMember):
15937        (JSObject::removeMember):
15938        (JSObject::getSlot):
15939        (JSObject::setSlot):
15940        (JSObject::toString):
15941        (JSObject::convertJObjectToValue):
15942        * bindings/objc/WebScriptObject.mm:
15943        (-[WebScriptObject callWebScriptMethod:withArguments:]):
15944        (-[WebScriptObject evaluateWebScript:]):
15945        (-[WebScriptObject setValue:forKey:]):
15946        (-[WebScriptObject valueForKey:]):
15947        (-[WebScriptObject removeWebScriptKey:]):
15948        (-[WebScriptObject stringRepresentation]):
15949        (-[WebScriptObject webScriptValueAtIndex:]):
15950        (-[WebScriptObject setWebScriptValueAtIndex:value:]):
15951        (+[WebScriptObject _convertValueToObjcValue:originExecutionContext:executionContext:]):
15952        * bindings/runtime.cpp:
15953        (Instance::createRuntimeObject):
15954        * bindings/runtime_root.cpp:
15955        (KJS::Bindings::addNativeReference):
15956        (KJS::Bindings::removeNativeReference):
15957        (RootObject::removeAllNativeReferences):
15958        * bindings/runtime_root.h:
15959        (KJS::Bindings::RootObject::~RootObject):
15960        (KJS::Bindings::RootObject::setRootObjectImp):
15961        * bindings/testbindings.cpp:
15962        (main):
15963        * bindings/testbindings.mm:
15964        (main):
15965        * kjs/JSLock.cpp:
15966        (KJS::initializeJSLock):
15967        (KJS::JSLock::lock):
15968        (KJS::JSLock::unlock):
15969        (KJS::JSLock::lockCount):
15970        (KJS::JSLock::DropAllLocks::DropAllLocks):
15971        (KJS::JSLock::DropAllLocks::~DropAllLocks):
15972        * kjs/JSLock.h:
15973        (KJS::JSLock::JSLock):
15974        (KJS::JSLock::~JSLock):
15975        * kjs/collector.cpp:
15976        (KJS::Collector::allocate):
15977        (KJS::Collector::collect):
15978        * kjs/internal.cpp:
15979        (KJS::InterpreterImp::InterpreterImp):
15980        (KJS::InterpreterImp::clear):
15981        (KJS::InterpreterImp::checkSyntax):
15982        (KJS::InterpreterImp::evaluate):
15983        * kjs/interpreter.cpp:
15984        (Interpreter::evaluate):
15985        * kjs/protect.h:
15986        (KJS::::ProtectedPtr):
15987        (KJS::::~ProtectedPtr):
15988        (KJS::::operator):
15989        * kjs/protected_reference.h:
15990        (KJS::ProtectedReference::ProtectedReference):
15991        (KJS::ProtectedReference::~ProtectedReference):
15992        (KJS::ProtectedReference::operator=):
15993        * kjs/protected_values.cpp:
15994        (KJS::ProtectedValues::getProtectCount):
15995        (KJS::ProtectedValues::increaseProtectCount):
15996        (KJS::ProtectedValues::decreaseProtectCount):
15997        * kjs/testkjs.cpp:
15998        (TestFunctionImp::callAsFunction):
15999        (main):
16000
160012005-11-26  Darin Adler  <darin@apple.com>
16002
16003        Reviewed by eseidel.  Committed by eseidel.
16004
16005        Inline ScopeChain functions for speed.
16006        http://bugs.webkit.org/show_bug.cgi?id=5687
16007
16008        * kjs/object.h:
16009        (KJS::ScopeChain::mark):
16010        * kjs/scope_chain.cpp:
16011        * kjs/scope_chain.h:
16012        (KJS::ScopeChain::ref):
16013        (KJS::ScopeChain::operator=):
16014        (KJS::ScopeChain::bottom):
16015        (KJS::ScopeChain::push):
16016        (KJS::ScopeChain::pop):
16017
160182005-11-21  Maciej Stachowiak  <mjs@apple.com>
16019
16020        Reviewed by Geoff.
16021
16022        <rdar://problem/4139620> Seed: WebKit: hang when sending XMLHttpRequest if automatic proxy config is used
16023
16024        Also factored locking code completely into a separate class, and
16025        added a convenient packaged way to temporarily drop locks.
16026
16027        * JavaScriptCore.xcodeproj/project.pbxproj:
16028        * kjs/JSLock.cpp: Added.
16029        (KJS::initializeInterpreterLock):
16030        (KJS::InterpreterLock::lock):
16031        (KJS::InterpreterLock::unlock):
16032        (KJS::InterpreterLock::lockCount):
16033        (KJS::InterpreterLock::DropAllLocks::DropAllLocks):
16034        (KJS::InterpreterLock::DropAllLocks::~DropAllLocks):
16035        * kjs/JSLock.h: Added.
16036        (KJS::InterpreterLock::InterpreterLock):
16037        (KJS::InterpreterLock::~InterpreterLock):
16038        * kjs/internal.cpp:
16039        * kjs/internal.h:
16040        * kjs/interpreter.cpp:
16041        * kjs/interpreter.h:
16042        * kjs/protect.h:
16043        * kjs/testkjs.cpp:
16044        (TestFunctionImp::callAsFunction):
16045
160462005-11-21  Eric Seidel  <eseidel@apple.com>
16047
16048        Rubber-stamped by hyatt.
16049        
16050        Removed JavaScriptCore+SVG target.
16051
16052        * JavaScriptCore.xcodeproj/project.pbxproj:
16053
160542005-11-15  Geoffrey Garen  <ggaren@apple.com>
16055
16056        Reviewed by mjs.
16057        
16058        - Fixed <rdar://problem/4342216> Installer crash in 
16059          KJS::ValueImp::marked() when garbage collector runs inside call to 
16060          ConstantValues::init()
16061          
16062        I took responsibility for initializing and marking ConstantValues away 
16063        from InterpreterImp, since it's possible to reference such a value 
16064        before any interpreter has been created and after the last interpreter 
16065        has been destroyed.
16066
16067        InterpreterImp::lock now initializes ConstantValues. It's a good
16068        place for the initialization because you have to call it before
16069        creating any objects. Since ::lock can be called more than once,
16070        I added a check in ConstantValues::init to ensure that it executes 
16071        only once.
16072
16073        Collector:collect is now responsible for marking ConstantValues.
16074
16075        We no longer clear the ConstantValues since we can't guarantee that no 
16076        one has a reference to them.
16077
16078        FIXME: This is hackery. The long-term plan is to make ConstantValues
16079        use immediate values that require no initialization.
16080
16081        * ChangeLog:
16082        * kjs/collector.cpp:
16083        (KJS::Collector::collect):
16084        * kjs/internal.cpp:
16085        (KJS::InterpreterImp::InterpreterImp):
16086        (KJS::InterpreterImp::lock):
16087        (KJS::InterpreterImp::clear):
16088        (KJS::InterpreterImp::mark):
16089        * kjs/internal.h:
16090        * kjs/value.cpp:
16091        (KJS::ConstantValues::initIfNeeded):
16092        * kjs/value.h:
16093
160942005-11-08  Geoffrey Garen  <ggaren@apple.com>
16095
16096        Reviewed by Darin.
16097
16098        This patch fixes some naughty naughty code -- 5 crashes and 2 
16099        may-go-haywire-in-the-futures.
16100        
16101        One such crash is <rdar://problem/4247330> 8C46 Crash with with 
16102        incomplete parameter list to webScript object function.
16103        
16104        I replaced early returns from within NS_DURINGs with calls to
16105        NS_VALUERETURN because the doc says, "You cannot use goto or 
16106        return to exit an exception handling domain -- errors will result."
16107        
16108        I replaced hard-coded analyses of -[NSMethodSignature 
16109        methodReturnType] with more abstracted alternatives, since
16110        the documentation says "This encoding is implementation-specific, 
16111        so applications should use it with caution," and then emits an
16112        evil cackle.
16113        
16114        I removed the early return in the case where a JavaScript caller
16115        supplies an insufficient number of arguments, because the right
16116        thing to do in such a case is to use JavaScript's defined behavior
16117        of supplying "undefined" for any missing arguments.
16118        
16119        I also changed ObjcInstance::invokeMethod so that it no longer
16120        deletes the method passed to it. It doesn't create the method,
16121        so it shouldn't delete it. A friend of mine named
16122        KERNEL_PROTECTION_FAILURE agrees with me on this point.
16123        
16124        Finally, I changed an assert(true) to assert(false) because
16125        all the other asserts were making fun of it.
16126
16127        * bindings/objc/objc_instance.mm:
16128        (ObjcInstance::invokeMethod):
16129        (ObjcInstance::invokeDefaultMethod):
16130
161312005-11-06  Geoffrey Garen  <ggaren@apple.com>
16132
16133        Reviewed by Darin.
16134
16135        - Fixed http://bugs.webkit.org/show_bug.cgi?id=5571
16136          REGRESSION (412.5-TOT): duplicated words/sentences at 
16137          shakespeer.sourceforge.net
16138
16139        Our UTF16-modified PCRE didn't work with extended character classes
16140        (classes involving characters > 255) because it used the GETCHARINC
16141        macro to read through them. In UTF16 mode, GETCHARINC expects UTF16 
16142        input, but PCRE encodes character classes in UTF8 regardless of the
16143        input mode of the subject string.
16144
16145        The fix is to explicitly define GETUTF8CHARINC, and to use it,
16146        rather than GETCHARINC, when reading extended character classes. 
16147        
16148        In UTF8 mode, we simply define GETCHARINC to be GETUTF8CHARINC.
16149
16150        * pcre/pcre_internal.h:
16151        * pcre/pcre_xclass.c:
16152        (_pcre_xclass):
16153
161542005-11-05  Geoffrey Garen  <ggaren@apple.com>
16155
16156        Patch by Mitz Pettel, reviewed by Maciej.
16157
16158        - Fixed http://bugs.webkit.org/show_bug.cgi?id=5357
16159          REGRESSION: Scriptable plugin hides properties of OBJECT element
16160
16161        * bindings/objc/objc_class.mm:
16162        (KJS::Bindings::ObjcClass::fallbackObject):
16163
161642005-11-05  Geoffrey Garen  <ggaren@apple.com>
16165
16166        Reviewed by Darin.
16167
16168        - Fixed http://bugs.webkit.org/show_bug.cgi?id=5409
16169        slice() testcase doesn't pass
16170
16171        Modified String.slice to deal with funky values.
16172        Updated test results. We now pass <js1_2/String/slice.js>.
16173
16174        * kjs/string_object.cpp:
16175        (StringProtoFuncImp::callAsFunction):
16176        * tests/mozilla/expected.html:
16177
161782005-11-04  Darin Adler  <darin@apple.com>
16179
16180        Reviewed by Tim Hatcher.
16181
16182        * kxmlcore/HashSet.h: Fixed case of "hashfunctions.h" -- needs to be "HashFunctions.h".
16183
161842005-11-03  Timothy Hatcher  <timothy@apple.com>
16185
16186        Reviewed by Darin and Vicki.
16187
16188        * JavaScriptCore.xcodeproj/project.pbxproj:
16189          Change to use $(SYSTEM_LIBRARY_DIR) consistently and place
16190          $(NEXT_ROOT) in a few spots to make build-root work.
16191
161922005-11-03  Geoffrey Garen  <ggaren@apple.com>
16193
16194        - Updated JavaScriptCore test results to reflect recent fixes.
16195
16196        * tests/mozilla/expected.html:
16197
161982005-11-03  Geoffrey Garen  <ggaren@apple.com>
16199
16200        Reviewed by darin.
16201
16202        - Fixed http://bugs.webkit.org/show_bug.cgi?id=5602
16203          REGRESSION: RegExp("[^\\s$]+", "g") returns extra matches
16204
16205        We now update lastIndex relative to the start of the last match,
16206        rather than the start of the last search. We used to assume that
16207        the two were equal, but that is not the case when a pattern
16208        matches at a character after the first in the string.
16209
16210        * kjs/regexp_object.cpp:
16211        (RegExpProtoFuncImp::callAsFunction):
16212
162132005-10-24  John Sullivan  <sullivan@apple.com>
16214
16215        Reviewed by Darin Adler. Code changes by Alexey Proskuryakov.
16216        
16217        - fixed http://bugs.webkit.org/show_bug.cgi?id=4931
16218        Unicode format characters (Cf) should be removed from JavaScript source
16219
16220        * kjs/lexer.cpp:
16221        include <unicode/uchar.h>
16222        (Lexer::Lexer):
16223        use KJS::UChar instead of UChar to avoid ambiguity caused by new include
16224        (Lexer::setCode):
16225        ditto; also, use shift(4) to skip first 4 chars to take advantage of new
16226        logic there.
16227        (Lexer::shift):
16228        skip chars of type U_FORMAT_CHAR
16229        (Lexer::convertUnicode):
16230        use KJS::UChar instead of UChar to avoid ambiguity caused by new include
16231        (Lexer::record16):
16232        ditto
16233        (Lexer::makeIdentifier):
16234        ditto
16235        (Lexer::makeUString):
16236        ditto
16237        
16238        * tests/mozilla/ecma/Array/15.4.5.1-1.js:
16239        updated to skip soft hyphens
16240
162412005-10-24  John Sullivan  <sullivan@apple.com>
16242
16243        Reviewed by Darin Adler. Code changes by George Staikos/Geoff Garen.
16244        
16245        - fixed http://bugs.webkit.org/show_bug.cgi?id=4142
16246        Date object does not always adjust daylight savings correctly
16247
16248        * kjs/date_object.cpp:
16249        (KJS::makeTime):
16250        Fix the case where a time change crosses the daylight savings start/end dates.
16251
162522005-10-17  Maciej Stachowiak  <mjs@apple.com>
16253
16254        Reviewed by Geoff. Code changes by Darin.
16255
16256        - some micro-optimizations to FastMalloc to reduce math and branches.
16257
16258        * kxmlcore/FastMalloc.cpp:
16259        (KXMLCore::TCMalloc_Central_FreeList::Populate):
16260        (KXMLCore::fastMallocRegisterThread):
16261        (KXMLCore::TCMalloc_ThreadCache::GetCache):
16262        (KXMLCore::TCMalloc_ThreadCache::GetCacheIfPresent):
16263
162642005-10-15  Maciej Stachowiak  <mjs@apple.com>
16265
16266        Reverted fix for this bug, because it was part of a time range that caused a performance
16267        regression:
16268        
16269        <rdar://problem/4260481> Remove Reference type from JavaScriptCore
16270
162712005-10-15  Darin Adler  <darin@apple.com>
16272
16273        * kxmlcore/HashTable.cpp: Fixed build failure (said hashtable.h instead of HashTable.h).
16274
162752005-10-14  Geoffrey Garen  <ggaren@apple.com>
16276
16277        Style changes recommended by Darin.
16278        
16279        Changed to camelCase, changed ValueImp* to ValueImp *.
16280
16281        * kjs/simple_number.h:
16282        (KJS::SimpleNumber::make):
16283        (KJS::SimpleNumber::value):
16284
162852005-10-11  Geoffrey Garen  <ggaren@apple.com>
16286
16287        Added regexp_object.lut.h build phase from JavaScriptCore
16288        to JavaScriptCore+SVG.
16289
16290        Reviewed by mitz.
16291
16292        * JavaScriptCore.xcodeproj/project.pbxproj:
16293
162942005-10-11  Geoffrey Garen  <ggaren@apple.com>
16295
16296        Fixed build bustage from last checkin (stray characters
16297        in the project file).
16298
16299        Reviewed by mitz.
16300
16301        * JavaScriptCore.xcodeproj/project.pbxproj:
16302
163032005-10-11  Geoffrey Garen  <ggaren@apple.com>
16304
16305        New JavaScriptCore test results to reflect the last change.
16306
16307        * tests/mozilla/expected.html:
16308
163092005-10-10  Geoffrey Garen  <ggaren@apple.com>
16310
16311        - Implemented caching of match state inside the global RegExp object
16312          (lastParen, leftContext, rightContext, lastMatch, input).
16313
16314          exec(), test(), match(), search(), and replace() now dipatch regular
16315          expression matching through the RegExp object's performMatch function, 
16316          to facilitate caching. This replaces registerRegexp and 
16317          setSubPatterns.
16318        
16319        - Implemented the special '$' aliases (e.g. RegExp.input aliases to 
16320          RegExp.$_).
16321
16322        - Moved support for backreferences into the new static hash table
16323          used for other special RegExp properties. Truncated backreferences
16324          at $9 to match IE, FF, and the "What's New in Netscape 1.2?" doc.
16325          (String.replace still supports double-digit backreferences.)
16326
16327        - Tweaked RegExp.prototype.exec to handle ginormous values in lastIndex.
16328
16329        Fixes 11 -- count em, 11 -- JavaScriptCore tests.
16330
16331        * fast/js/regexp-caching-expected.txt: Added.
16332        * fast/js/regexp-caching.html: Added.
16333
16334        Reviewed by mjs.
16335
16336        * JavaScriptCore.xcodeproj/project.pbxproj: Added regexp_object.lut.h
16337        * kjs/create_hash_table: Tweaked to allow for more exotic characters.
16338                                 We now rely on the compiler to catch illegal
16339                                 identifiers.
16340        * kjs/regexp.cpp:
16341        (KJS::RegExp::RegExp):
16342        * kjs/regexp_object.cpp:
16343        (RegExpProtoFuncImp::callAsFunction):
16344        (RegExpObjectImp::RegExpObjectImp):
16345        (RegExpObjectImp::performMatch):
16346        (RegExpObjectImp::arrayOfMatches):
16347        (RegExpObjectImp::backrefGetter):
16348        (RegExpObjectImp::getLastMatch):
16349        (RegExpObjectImp::getLastParen):
16350        (RegExpObjectImp::getLeftContext):
16351        (RegExpObjectImp::getRightContext):
16352        (RegExpObjectImp::getOwnPropertySlot):
16353        (RegExpObjectImp::getValueProperty):
16354        (RegExpObjectImp::put):
16355        (RegExpObjectImp::putValueProperty):
16356        * kjs/regexp_object.h:
16357        (KJS::RegExpObjectImp::):
16358        * kjs/string_object.cpp:
16359        (substituteBackreferences):
16360        (replace):
16361        (StringProtoFuncImp::callAsFunction):
16362
163632005-10-09  Darin Adler  <darin@apple.com>
16364
16365        Reviewed by Maciej; some changes done after review.
16366
16367        - fixed <rdar://problem/4092064> hanging loading page; rte.ie (works in IE and Firefox)
16368        - fixed http://bugs.webkit.org/show_bug.cgi?id=5280
16369          Date.setMonth fails with negative values
16370        - fixed http://bugs.webkit.org/show_bug.cgi?id=5154
16371          JSC should switch to _r variants of unix time/date functions
16372        - fixed a few possible overflow cases
16373
16374        Retested all tests to be sure nothing broke; added layout test for bug 5280.
16375
16376        * kjs/config.h: Removed TIME_WITH_SYS_TIME define. Also set HAVE_SYS_TIMEB_H
16377        for the __APPLE__ case (the latter is accurate but irrelevant).
16378
16379        * kjs/date_object.h: Reformatted. Removed unnecessary include of "function_object.h".
16380        Moved declarations of helper classes and functions into the cpp file.
16381
16382        * kjs/date_object.cpp: Removed code at top to define macros to use CoreFoundation instead of
16383        POSIX date functions.
16384        (KJS::styleFromArgString): Tweaked to return early instead of using a variable.
16385        (KJS::formatLocaleDate): Tweaked to check for undefined rather than checking argument count.
16386        (KJS::formatDate): Made parameter const.
16387        (KJS::formatDateUTCVariant): Ditto.
16388        (KJS::formatTime): Ditto.
16389        (KJS::DateProtoFuncImp::callAsFunction): Use gmtime_r and localtime_r instead of gmtime and
16390        localtime.
16391        (KJS::DateObjectImp::callAsFunction): Use localtime_r instead of localtime.
16392        (KJS::ymdhmsToSeconds): Renamed from ymdhms_to_seconds. Changed computation to avoid possible
16393        overflow if year is an extremely large or small number.
16394        (KJS::makeTime): Removed code to move large month numbers from tm_mon to tm_year; this was
16395        to accomodate CFGregorianDate, which is no longer used (and didn't handle negative values).
16396        (KJS::parseDate): Renamed from KRFCDate_parseDate; changed to return a value in milliseconds
16397        rather than in seconds. Reformatted the code. Changed to use UTF8String() instead of ascii(),
16398        since ascii() is not thread safe. Changed some variables back from int to long to avoid
16399        trouble if the result of strtol does not fit in an int (64-bit issue only).
16400
164012005-10-08  Mitz Pettel  <opendarwin.org@mitzpettel.com>
16402
16403        Reviewed by Geoff.
16404        Tweaked and landed by Darin.
16405
16406        - fixed http://bugs.webkit.org/show_bug.cgi?id=5266
16407          Support parenthesized comments in Date.parse()
16408
16409        * kjs/date_object.cpp:
16410        (KJS::skipSpacesAndComments): Take a pointer, and advance it past spaces,
16411        and also past anything enclosed in parentheses.
16412        (KJS::KRFCDate_parseDate): Use skipSpacesAndComments wherever we formerly had
16413        code to skip spaces.
16414
164152005-10-08  Justin Haygood  <justin@xiondigital.net>
16416
16417        Reviewed, tweaked, and landed by Darin.
16418
16419        - fixed http://bugs.webkit.org/show_bug.cgi?id=5189
16420          pcre_exec.c fails to compile using MSVC
16421        - fixed http://bugs.webkit.org/show_bug.cgi?id=5190
16422          KJS config.h adjustment for Win32
16423        
16424        * kjs/config.h: Make sure HAVE_MMAP and HAVE_SBRK are off for Win32.
16425        Turn HAVE_ERRNO_H on for Mac OS X. Sort defines so they are easy to compare
16426        with each other. Remove #undef of DEBUG_COLLECTOR.
16427        * pcre/pcre_exec.c: (match): Work around strange MSVC complaint by splitting
16428        the definition of a local variable into a separate declaration and
16429        initialization.
16430
164312005-10-05  Geoffrey Garen  <ggaren@apple.com>
16432 
16433        - Darin and I rewrote our implementation of the SimpleNumber class
16434          to store number bit patterns in their floating point formats.
16435 
16436        My tweaks reviewed by Darin.
16437        
16438        ~1% speedup on JS iBench.
16439        
16440        * kjs/internal.h: removed obsolete jsNumber declarations.
16441        * kjs/math_object.cpp:
16442        (MathFuncImp::callAsFunction): changed KJS::isNaN to isNaN
16443        * kjs/nodes.cpp:
16444        (PostfixResolveNode::evaluate): removed obsolete knownToBeInteger
16445        (PostfixBracketNode::evaluate): ditto
16446        (PostfixDotNode::evaluate): ditto
16447        (PrefixResolveNode::evaluate): ditto
16448        (PrefixBracketNode::evaluate): ditto
16449        (PrefixDotNode::evaluate): ditto
16450        (NegateNode::evaluate): ditto
16451        (valueForReadModifyAssignment): ditto
16452        * kjs/number_object.cpp: removed obsolete comment
16453        * kjs/operations.cpp:
16454        (KJS::equal): removed unnecessary isNaN checks
16455        (KJS::strictEqual): ditto
16456        (KJS::add): removed obsolete knownToBeInteger
16457        (KJS::mult): ditto
16458        * kjs/operations.h: removed include of "value.h" to prevent circular reference
16459        * kjs/simple_number.h: removed unnecessary #includes
16460        (KJS::SimpleNumber::make): see above
16461        (KJS::SimpleNumber::is): ditto
16462        (KJS::SimpleNumber::value): ditto
16463        * kjs/string_object.cpp:
16464        (StringProtoFuncImp::callAsFunction): changed KJS::isNaN to isNaN
16465        * kjs/ustring.cpp: removed unnecessary isNaN check
16466        (KJS::UString::toUInt32): ditto
16467        * kjs/value.cpp:
16468        (KJS::jsNumber): removed obsolete jsNumber definitions
16469        (KJS::ConstantValues::init): NaN is no longer a ConstantValue
16470        (KJS::ConstantValues::clear): ditto
16471        (KJS::ConstantValues::mark): ditto
16472        * kjs/value.h: removed obsolete knownToBeInteger
16473        (KJS::jsNaN): now returns a SimpleNumber
16474        (KJS::ValueImp::getUInt32): changed to account for NaN being a SimpleNumber
16475        (KJS::ValueImp::toBoolean): ditto
16476        (KJS::ValueImp::toString): changed to account for +/- 0.0
16477        (KJS::jsZero): changed to reflect that SimpleNumber::make takes a double
16478        (KJS::jsOne): ditto
16479        (KJS::jsTwo): ditto
16480        (KJS::Number): removed obsolete non-double constructor declarations
16481
164822005-10-05  Maciej Stachowiak  <mjs@apple.com>
16483
16484        Reviewed by Eric.
16485
16486        - fixed <rdar://problem/4260481> Remove Reference type from JavaScriptCore
16487
16488        Also fixed some bugs with for..in enumeration while I was at it. object
16489        properties now come before prototype properties and duplicates
16490        between object and prototype are listed only once.
16491
16492        * JavaScriptCore.xcodeproj/project.pbxproj:
16493        * kjs/IdentifierSequencedSet.cpp: Added.
16494        (KJS::IdentifierSequencedSet::IdentifierSequencedSet):
16495        (KJS::IdentifierSequencedSet::deallocateVector):
16496        (KJS::IdentifierSequencedSet::~IdentifierSequencedSet):
16497        (KJS::IdentifierSequencedSet::insert):
16498        * kjs/IdentifierSequencedSet.h: Added.
16499        (KJS::IdentifierSequencedSetIterator::IdentifierSequencedSetIterator):
16500        (KJS::IdentifierSequencedSetIterator::operator*):
16501        (KJS::IdentifierSequencedSetIterator::operator->):
16502        (KJS::IdentifierSequencedSetIterator::operator++):
16503        (KJS::IdentifierSequencedSetIterator::operator==):
16504        (KJS::IdentifierSequencedSetIterator::operator!=):
16505        (KJS::IdentifierSequencedSet::begin):
16506        (KJS::IdentifierSequencedSet::end):
16507        (KJS::IdentifierSequencedSet::size):
16508        * kjs/array_instance.h:
16509        * kjs/array_object.cpp:
16510        (ArrayInstanceImp::getPropertyNames):
16511        (ArrayInstanceImp::setLength):
16512        (ArrayInstanceImp::pushUndefinedObjectsToEnd):
16513        * kjs/nodes.cpp:
16514        (ForInNode::execute):
16515        * kjs/nodes.h:
16516        * kjs/object.cpp:
16517        (KJS::ObjectImp::getPropertyNames):
16518        * kjs/object.h:
16519        * kjs/property_map.cpp:
16520        (KJS::PropertyMap::getEnumerablePropertyNames):
16521        (KJS::PropertyMap::getSparseArrayPropertyNames):
16522        * kjs/property_map.h:
16523        * kjs/protect.h:
16524        * kjs/protected_reference.h: Removed.
16525        * kjs/reference.cpp: Removed.
16526        * kjs/reference.h: Removed.
16527        * kjs/reference_list.cpp: Removed.
16528        * kjs/reference_list.h: Removed.
16529        * kjs/ustring.h:
16530        (KJS::UString::impl):
16531        * kxmlcore/HashSet.h:
16532
165332005-10-04  Eric Seidel  <eseidel@apple.com>
16534
16535        Reviewed by mjs.
16536
16537        Code cleanup, which resulted in a small win on iBench.
16538
16539        * kjs/object.cpp:
16540        (KJS::tryGetAndCallProperty): new static inline
16541        (KJS::ObjectImp::defaultValue): code cleanup
16542
165432005-10-03  Maciej Stachowiak  <mjs@apple.com>
16544
16545        Patch from George Staikos <staikos@kde.org>, reviewed and tweaked a bit by me.
16546
16547        - more Linux build fixes
16548        
16549        * kjs/operations.cpp:
16550        * kxmlcore/FastMalloc.h:
16551        * kxmlcore/TCSystemAlloc.cpp:
16552        (TCMalloc_SystemAlloc):
16553
165542005-10-03  Maciej Stachowiak  <mjs@apple.com>
16555
16556        Patch from George Staikos <staikos@kde.org>, reviewed and tweaked a bit by me.
16557
16558        http://bugs.webkit.org/show_bug.cgi?id=5174
16559        Add support for compiling on Linux (likely to help for other POSIX systems too)
16560
16561        * kjs/collector.cpp:
16562        (KJS::Collector::markCurrentThreadConservatively):
16563        (KJS::Collector::markOtherThreadConservatively):
16564        * kjs/config.h:
16565        * kjs/date_object.cpp:
16566        (KJS::formatDate):
16567        (KJS::formatDateUTCVariant):
16568        (KJS::formatTime):
16569        (KJS::timeZoneOffset):
16570        (KJS::DateProtoFuncImp::callAsFunction):
16571        (KJS::DateObjectImp::construct):
16572        (KJS::DateObjectImp::callAsFunction):
16573        (KJS::makeTime):
16574        * kjs/identifier.cpp:
16575        * kjs/internal.cpp:
16576        (KJS::initializeInterpreterLock):
16577        (KJS::lockInterpreter):
16578        (KJS::unlockInterpreter):
16579        (KJS::UndefinedImp::toPrimitive):
16580        (KJS::UndefinedImp::toBoolean):
16581        (KJS::UndefinedImp::toNumber):
16582        (KJS::UndefinedImp::toString):
16583        (KJS::NullImp::toPrimitive):
16584        (KJS::NullImp::toBoolean):
16585        (KJS::NullImp::toNumber):
16586        (KJS::NullImp::toString):
16587        (KJS::BooleanImp::toPrimitive):
16588        (KJS::BooleanImp::toBoolean):
16589        (KJS::BooleanImp::toNumber):
16590        (KJS::BooleanImp::toString):
16591        (KJS::StringImp::toPrimitive):
16592        (KJS::StringImp::toBoolean):
16593        (KJS::StringImp::toNumber):
16594        (KJS::StringImp::toString):
16595        * kjs/internal.h:
16596        * kjs/protected_values.cpp:
16597
165982005-10-03  Maciej Stachowiak  <mjs@apple.com>
16599
16600        - fix Development build after last checkin
16601
16602        * kxmlcore/FastMalloc.cpp:
16603        (KXMLCore::fastMallocRegisterThread):
16604
166052005-10-02  Maciej Stachowiak  <mjs@apple.com>
16606
16607        Reviewed by Darin.
16608
16609        <rdar://problem/4283967> REGRESSION: 3% regression on PLT from new FastMalloc
16610        http://bugs.webkit.org/show_bug.cgi?id=5243
16611        
16612        A number of optimizations to the new threadsafe malloc that make it actually as fast
16613        as dlmalloc (I measured wrong before) and as memory-efficient as the system malloc.
16614
16615        - use fastMalloc for everything - it now gets applied to all new/delete allocations
16616        via a private inline operator new that is now included into every file via config.h.
16617
16618        - tweaked some of the numeric parameters for size classes and amount of wasted memory
16619        allowed per allocation - this saves on memory use and consequently improves speed.
16620
16621        - so long as the allocator is not being used on background threads, get the per-thread
16622        cache from a global variable instead of from pthread_getspecific, since the latter is slow.
16623
16624        - inline more functions, and force the ones GCC refuses to inline with 
16625        attribute(always_inline), nearly all of these have one call site so inlining them has 
16626        to be a win.
16627
16628        - use some tricks to calculate allocation size more efficiently and fewer times for small
16629        allocations, to avoid hitting the huge size table array.
16630
16631        - avoid hitting the per-thread cache on code paths that don't need it.
16632
16633        - implement inline assembly version of spinlock for PowerPC (was already done for x86)
16634
16635        * bindings/NP_jsobject.cpp:
16636        * bindings/c/c_class.cpp:
16637        * bindings/c/c_instance.cpp:
16638        * bindings/c/c_runtime.cpp:
16639        * bindings/c/c_utility.cpp:
16640        * bindings/jni/jni_class.cpp:
16641        * bindings/jni/jni_instance.cpp:
16642        * bindings/jni/jni_jsobject.cpp:
16643        * bindings/jni/jni_objc.mm:
16644        * bindings/jni/jni_runtime.cpp:
16645        * bindings/jni/jni_utility.cpp:
16646        * bindings/npruntime.cpp:
16647        * bindings/objc/WebScriptObject.mm:
16648        * bindings/objc/objc_class.mm:
16649        * bindings/objc/objc_instance.mm:
16650        * bindings/objc/objc_runtime.mm:
16651        * bindings/objc/objc_utility.mm:
16652        * bindings/runtime.cpp:
16653        * bindings/runtime_array.cpp:
16654        * bindings/runtime_method.cpp:
16655        * bindings/runtime_object.cpp:
16656        * bindings/runtime_root.cpp:
16657        * bindings/testbindings.cpp:
16658        * bindings/testbindings.mm:
16659        * kjs/array_object.cpp:
16660        (ArrayInstanceImp::ArrayInstanceImp):
16661        (ArrayInstanceImp::~ArrayInstanceImp):
16662        (ArrayInstanceImp::resizeStorage):
16663        * kjs/bool_object.cpp:
16664        * kjs/collector.cpp:
16665        (KJS::Collector::registerThread):
16666        * kjs/config.h:
16667        * kjs/debugger.cpp:
16668        * kjs/error_object.cpp:
16669        * kjs/function.cpp:
16670        * kjs/function_object.cpp:
16671        * kjs/identifier.cpp:
16672        (KJS::Identifier::rehash):
16673        * kjs/internal.cpp:
16674        (KJS::Parser::saveNewNode):
16675        (KJS::clearNewNodes):
16676        * kjs/interpreter.cpp:
16677        * kjs/lexer.cpp:
16678        (Lexer::doneParsing):
16679        (Lexer::makeIdentifier):
16680        (Lexer::makeUString):
16681        * kjs/list.cpp:
16682        * kjs/math_object.cpp:
16683        * kjs/nodes.cpp:
16684        * kjs/nodes.h:
16685        * kjs/nodes2string.cpp:
16686        * kjs/number_object.cpp:
16687        (integer_part_noexp):
16688        (char_sequence):
16689        * kjs/object.cpp:
16690        * kjs/object_object.cpp:
16691        * kjs/property_map.cpp:
16692        * kjs/property_slot.cpp:
16693        * kjs/protected_values.cpp:
16694        (KJS::ProtectedValues::rehash):
16695        * kjs/reference.cpp:
16696        * kjs/reference_list.cpp:
16697        * kjs/regexp.cpp:
16698        * kjs/regexp_object.cpp:
16699        * kjs/scope_chain.cpp:
16700        * kjs/scope_chain.h:
16701        * kjs/string_object.cpp:
16702        * kjs/testkjs.cpp:
16703        * kjs/ustring.h:
16704        * kjs/value.cpp:
16705        * kxmlcore/Assertions.mm:
16706        * kxmlcore/FastMalloc.cpp:
16707        (KXMLCore::InitSizeClasses):
16708        (KXMLCore::DLL_IsEmpty):
16709        (KXMLCore::DLL_Prepend):
16710        (KXMLCore::TCMalloc_Central_FreeList::Insert):
16711        (KXMLCore::TCMalloc_Central_FreeList::Remove):
16712        (KXMLCore::TCMalloc_Central_FreeList::Populate):
16713        (KXMLCore::TCMalloc_ThreadCache::Allocate):
16714        (KXMLCore::TCMalloc_ThreadCache::FetchFromCentralCache):
16715        (KXMLCore::fastMallocRegisterThread):
16716        (KXMLCore::TCMalloc_ThreadCache::GetCache):
16717        (KXMLCore::TCMalloc_ThreadCache::GetCacheIfPresent):
16718        (KXMLCore::TCMalloc_ThreadCache::CreateCacheIfNecessary):
16719        (KXMLCore::do_malloc):
16720        (KXMLCore::do_free):
16721        (KXMLCore::realloc):
16722        * kxmlcore/FastMalloc.h:
16723        (operator new):
16724        (operator delete):
16725        (operator new[]):
16726        (operator delete[]):
16727        * kxmlcore/HashTable.cpp:
16728        * kxmlcore/TCSpinLock.h:
16729        (TCMalloc_SpinLock::Lock):
16730        (TCMalloc_SpinLock::Unlock):
16731        (TCMalloc_SlowLock):
16732        * kxmlcore/TCSystemAlloc.cpp:
16733
167342005-09-30  Geoffrey Garen  <ggaren@apple.com>
16735
16736        - Second cut at fixing <rdar://problem/4275206> Denver Regression: Seed: 
16737          Past Editions of Opinions display "NAN/Undefined" for www.washingtonpost.com
16738                
16739        Reviewed by john.
16740
16741        * kjs/date_object.cpp:
16742        (KJS::KRFCDate_parseDate): Intead of creating a timezone when one isn't specified,
16743        just rely on the fallback logic, which will do it for you. Also, return invalidDate
16744        if the date includes trailing garbage. (Somewhat accidentally, the timezone logic
16745        used to catch trailing garbage.)
16746
16747        Added test case to fast/js/date-parse-test.html.
16748
167492005-09-29  Eric Seidel  <eseidel@apple.com>
16750        Fix from Mitz Pettel <opendarwin.org@mitzpettel.com>
16751
16752        Reviewed by darin.
16753
16754        Fix JSC memory smasher in TOT.
16755        http://bugs.webkit.org/show_bug.cgi?id=5176
16756
16757        * pcre/pcre_exec.c:
16758        (match):
16759
167602005-09-29  Eric Seidel  <eseidel@apple.com>
16761        Fix from Mitz Pettel <opendarwin.org@mitzpettel.com>
16762
16763        Reviewed by mjs.
16764
16765        * JavaScriptCore.xcodeproj/project.pbxproj:
16766        Build fix for JSC+SVG after 5161.
16767        http://bugs.webkit.org/show_bug.cgi?id=5179
16768
167692005-09-28  Geoffrey Garen  <ggaren@apple.com>
16770
16771        - Fixed <rdar://problem/4275206> Denver Regression: Seed: Past Editions of Opinions display 
16772          "NAN/Undefined" for www.washingtonpost.com
16773          
16774        Reviewed by darin.
16775
16776        * kjs/date_object.cpp:
16777        (KJS::KRFCDate_parseDate): If the timezone isn't specified, rather than returning
16778        invalidDate, substitute the local timezone. This matches the behavior of FF/IE.
16779
167802005-09-28  Maciej Stachowiak  <mjs@apple.com>
16781
16782        Patch from George Staikos, reviewed by me.
16783
16784        - fixed some compile issues on Linux
16785        
16786        * kjs/property_slot.h:
16787        * kjs/simple_number.h:
16788
167892005-09-27  Maciej Stachowiak  <mjs@apple.com>
16790
16791        Reviewed by Eric.
16792
16793        - move HashMap/HashSet code down to JavaScriptCore
16794        http://bugs.webkit.org/show_bug.cgi?id=5161
16795        
16796        * JavaScriptCore.xcodeproj/project.pbxproj:
16797        * kjs/internal.cpp:
16798        (KJS::interpreterMap): Function that fetches the interpreter map on demand. 
16799        (KJS::InterpreterImp::InterpreterImp): Replace use of InterpreterMap
16800        class with an appropriate HashMap.
16801        (KJS::InterpreterImp::clear): ditto
16802        (KJS::InterpreterImp::interpreterWithGlobalObject): ditto
16803        * kjs/interpreter_map.cpp: Removed.
16804        * kjs/interpreter_map.h: Removed.
16805
16806        The HashMap/HashSet code (copied and slightly tweaked from WebCore)
16807        
16808        * kxmlcore/HashFunctions.h: Added.
16809        (KXMLCore::4):
16810        (KXMLCore::8):
16811        (KXMLCore::):
16812        (KXMLCore::PointerHash::hash):
16813        (KXMLCore::PointerHash::equal):
16814        * kxmlcore/HashMap.h: Added.
16815        (KXMLCore::extractFirst):
16816        (KXMLCore::HashMap::HashMap):
16817        (KXMLCore::::size):
16818        (KXMLCore::::capacity):
16819        (KXMLCore::::isEmpty):
16820        (KXMLCore::::begin):
16821        (KXMLCore::::end):
16822        (KXMLCore::::find):
16823        (KXMLCore::::contains):
16824        (KXMLCore::::set):
16825        (KXMLCore::::get):
16826        (KXMLCore::::remove):
16827        (KXMLCore::::clear):
16828        (KXMLCore::deleteAllValues):
16829        * kxmlcore/HashMapPtrSpec.h: Added.
16830        (KXMLCore::PointerHashIteratorAdapter::PointerHashIteratorAdapter):
16831        (KXMLCore::PointerHashIteratorAdapter::operator*):
16832        (KXMLCore::PointerHashIteratorAdapter::operator->):
16833        (KXMLCore::PointerHashIteratorAdapter::operator++):
16834        (KXMLCore::PointerHashIteratorAdapter::operator==):
16835        (KXMLCore::PointerHashIteratorAdapter::operator!=):
16836        (KXMLCore::PointerHashConstIteratorAdapter::PointerHashConstIteratorAdapter):
16837        (KXMLCore::PointerHashConstIteratorAdapter::operator*):
16838        (KXMLCore::PointerHashConstIteratorAdapter::operator->):
16839        (KXMLCore::PointerHashConstIteratorAdapter::operator++):
16840        (KXMLCore::PointerHashConstIteratorAdapter::operator==):
16841        (KXMLCore::PointerHashConstIteratorAdapter::operator!=):
16842        (KXMLCore::):
16843        * kxmlcore/HashSet.h: Added.
16844        (KXMLCore::identityExtract):
16845        (KXMLCore::convertAdapter):
16846        (KXMLCore::HashSet::HashSet):
16847        (KXMLCore::::size):
16848        (KXMLCore::::capacity):
16849        (KXMLCore::::isEmpty):
16850        (KXMLCore::::begin):
16851        (KXMLCore::::end):
16852        (KXMLCore::::find):
16853        (KXMLCore::::contains):
16854        (KXMLCore::::insert):
16855        (KXMLCore::::remove):
16856        (KXMLCore::::clear):
16857        * kxmlcore/HashTable.cpp: Added.
16858        (KXMLCore::HashTableStats::~HashTableStats):
16859        (KXMLCore::HashTableStats::recordCollisionAtCount):
16860        * kxmlcore/HashTable.h: Added.
16861        (KXMLCore::HashTableIterator::skipEmptyBuckets):
16862        (KXMLCore::HashTableIterator::HashTableIterator):
16863        (KXMLCore::HashTableIterator::operator*):
16864        (KXMLCore::HashTableIterator::operator->):
16865        (KXMLCore::HashTableIterator::operator++):
16866        (KXMLCore::HashTableIterator::operator==):
16867        (KXMLCore::HashTableIterator::operator!=):
16868        (KXMLCore::HashTableConstIterator::HashTableConstIterator):
16869        (KXMLCore::HashTableConstIterator::operator*):
16870        (KXMLCore::HashTableConstIterator::operator->):
16871        (KXMLCore::HashTableConstIterator::skipEmptyBuckets):
16872        (KXMLCore::HashTableConstIterator::operator++):
16873        (KXMLCore::HashTableConstIterator::operator==):
16874        (KXMLCore::HashTableConstIterator::operator!=):
16875        (KXMLCore::HashTable::HashTable):
16876        (KXMLCore::HashTable::~HashTable):
16877        (KXMLCore::HashTable::begin):
16878        (KXMLCore::HashTable::end):
16879        (KXMLCore::HashTable::size):
16880        (KXMLCore::HashTable::capacity):
16881        (KXMLCore::HashTable::insert):
16882        (KXMLCore::HashTable::isEmptyBucket):
16883        (KXMLCore::HashTable::isDeletedBucket):
16884        (KXMLCore::HashTable::isEmptyOrDeletedBucket):
16885        (KXMLCore::HashTable::hash):
16886        (KXMLCore::HashTable::equal):
16887        (KXMLCore::HashTable::identityConvert):
16888        (KXMLCore::HashTable::extractKey):
16889        (KXMLCore::HashTable::lookup):
16890        (KXMLCore::HashTable::shouldExpand):
16891        (KXMLCore::HashTable::mustRehashInPlace):
16892        (KXMLCore::HashTable::shouldShrink):
16893        (KXMLCore::HashTable::shrink):
16894        (KXMLCore::HashTable::clearBucket):
16895        (KXMLCore::HashTable::deleteBucket):
16896        (KXMLCore::HashTable::makeLookupResult):
16897        (KXMLCore::HashTable::makeIterator):
16898        (KXMLCore::HashTable::makeConstIterator):
16899        (KXMLCore::::lookup):
16900        (KXMLCore::::insert):
16901        (KXMLCore::::reinsert):
16902        (KXMLCore::::find):
16903        (KXMLCore::::contains):
16904        (KXMLCore::::remove):
16905        (KXMLCore::::allocateTable):
16906        (KXMLCore::::expand):
16907        (KXMLCore::::rehash):
16908        (KXMLCore::::clear):
16909        (KXMLCore::::HashTable):
16910        (KXMLCore::::swap):
16911        (KXMLCore::::operator):
16912        (KXMLCore::::checkTableConsistency):
16913        (KXMLCore::::checkTableConsistencyExceptSize):
16914        * kxmlcore/HashTraits.h: Added.
16915        (KXMLCore::HashTraits::emptyValue):
16916        (KXMLCore::):
16917        (KXMLCore::PairHashTraits::emptyValue):
16918        (KXMLCore::PairHashTraits::deletedValue):
16919
169202005-09-27  Darin Adler  <darin@apple.com>
16921
16922        Reviewed by Maciej.
16923
16924        - update grammar to fix conflicts; fixes one of our test cases
16925          because it resolves the relationship between function expressions
16926          and declarations in the way required by the ECMA specification
16927
16928        * kjs/grammar.y: Added lots of new grammar rules so we have no conflicts.
16929        A new set of rules for "no bracket or function at start of expression" and
16930        another set of rules for "no in anywhere in expression". Also simplified the
16931        handling of try to use only a single node and used operator precedence to
16932        get rid of the conflict in handling of if and else. Also used a macro to
16933        streamline the handling of automatic semicolons and changed parenthesis
16934        handling to use a virtual function.
16935
16936        * kjs/nodes.h: Added nodeInsideAllParens, removed unused abortStatement.
16937        (KJS::TryNode::TryNode): Updated to hold catch and finally blocks directly instead
16938        of using a special node for each.
16939        * kjs/nodes.cpp:
16940        (Node::createErrorCompletion): Added. Used instead of throwError when creating errors
16941        that should not be in a completion rather than an ExecState.
16942        (Node::throwUndefinedVariableError): Added. Sets source location unlike the call it
16943        replaces.
16944        (Node::nodeInsideAllParens): Added.
16945        (GroupNode::nodeInsideAllParens): Added.
16946        (StatListNode::execute): Removed code to move exceptions into completion objects;
16947        that's now done solely by the KJS_CHECKEXCEPTION macro.
16948        (TryNode::execute): Include execution of catch and finally here rather than using
16949        separate nodes.
16950        (FuncDeclNode::execute): Moved here, no longer inline.
16951        * kjs/nodes2string.cpp:
16952        (TryNode::streamTo): Updated for change.
16953        (FuncDeclNode::streamTo): Ditto.
16954        (FuncExprNode::streamTo): Ditto.
16955
16956        * kjs/kjs-test: Removed. Was part of "make check".
16957        * kjs/kjs-test.chk: Ditto.
16958        * kjs/test.js: Ditto.
16959
16960        * tests/mozilla/expected.html: Updated because one more test succeeds.
16961
169622005-09-27  Adele Peterson  <adele@apple.com>
16963
16964        Reviewed by Maciej.
16965
16966        Changed ints to size_t where appropriate.
16967
16968        * kjs/collector.cpp:
16969        (KJS::Collector::allocate):
16970        (KJS::Collector::markStackObjectsConservatively):
16971        (KJS::Collector::collect):
16972        (KJS::Collector::size):
16973        (KJS::Collector::numInterpreters):
16974        (KJS::Collector::numGCNotAllowedObjects):
16975        (KJS::Collector::numReferencedObjects):
16976        * kjs/collector.h:
16977
169782005-09-27  Eric Seidel  <eseidel@apple.com>
16979
16980        Reviewed by kevin.
16981
16982        * JavaScriptCore.xcodeproj/project.pbxproj: fix after malloc changes.
16983
169842005-09-27  Eric Seidel  <eseidel@apple.com>
16985
16986        Reviewed by mjs.
16987
16988        * kjs/nodes.cpp:
16989        (FuncExprNode::evaluate): Now sets .constructor properly.
16990        Test cases added to WebCore/layout-tests.
16991        http://bugs.webkit.org/show_bug.cgi?id=3537
16992
169932005-09-26  Maciej Stachowiak  <mjs@apple.com>
16994
16995        Reviewed by John.
16996
16997        - replace dlmalloc with tcmalloc
16998        http://bugs.webkit.org/show_bug.cgi?id=5145
16999
17000        I also moved SharedPtr and the assertion code from WebCore into a
17001        new kxmlcore directory.
17002        
17003        * JavaScriptCore.xcodeproj/project.pbxproj:
17004        * kjs/collector.cpp:
17005        (KJS::Collector::allocate):
17006        (KJS::Collector::collect):
17007        * kjs/config.h:
17008        * kjs/fast_malloc.cpp: Removed.
17009        * kjs/fast_malloc.h: Removed.
17010        * kjs/function.cpp:
17011        * kjs/function.h:
17012        * kjs/function_object.cpp:
17013        * kjs/identifier.cpp:
17014        (KJS::Identifier::add):
17015        * kjs/internal.cpp:
17016        * kjs/internal.h:
17017        * kjs/nodes.h:
17018        * kjs/nodes2string.cpp:
17019        * kjs/property_map.cpp:
17020        (KJS::PropertyMap::~PropertyMap):
17021        (KJS::PropertyMap::rehash):
17022        * kjs/scope_chain.h:
17023        * kjs/shared_ptr.h: Removed.
17024        * kjs/string_object.cpp:
17025        (StringObjectFuncImp::callAsFunction):
17026        * kjs/ustring.cpp:
17027        (KJS::UString::Rep::createCopying):
17028        (KJS::UString::Rep::destroy):
17029        (KJS::UString::expandCapacity):
17030        (KJS::UString::expandPreCapacity):
17031        (KJS::UString::UString):
17032        (KJS::UString::spliceSubstringsWithSeparators):
17033        (KJS::UString::append):
17034        (KJS::UString::operator=):
17035        (KJS::UString::detach):
17036        * kjs/ustring.h:
17037        * kxmlcore/Assertions.h: Added.
17038        * kxmlcore/Assertions.mm: Added.
17039        * kxmlcore/FastMalloc.cpp: Added.
17040        (KXMLCore::LgFloor):
17041        (KXMLCore::SizeClass):
17042        (KXMLCore::ByteSizeForClass):
17043        (KXMLCore::InitSizeClasses):
17044        (KXMLCore::MetaDataAlloc):
17045        (KXMLCore::PageHeapAllocator::Init):
17046        (KXMLCore::PageHeapAllocator::New):
17047        (KXMLCore::PageHeapAllocator::Delete):
17048        (KXMLCore::PageHeapAllocator::inuse):
17049        (KXMLCore::pages):
17050        (KXMLCore::AllocationSize):
17051        (KXMLCore::Event):
17052        (KXMLCore::NewSpan):
17053        (KXMLCore::DeleteSpan):
17054        (KXMLCore::DLL_Init):
17055        (KXMLCore::DLL_Remove):
17056        (KXMLCore::DLL_IsEmpty):
17057        (KXMLCore::DLL_Length):
17058        (KXMLCore::DLL_Print):
17059        (KXMLCore::DLL_Prepend):
17060        (KXMLCore::DLL_InsertOrdered):
17061        (KXMLCore::):
17062        (KXMLCore::TCMalloc_PageHeap::GetDescriptor):
17063        (KXMLCore::TCMalloc_PageHeap::SystemBytes):
17064        (KXMLCore::TCMalloc_PageHeap::FreeBytes):
17065        (KXMLCore::TCMalloc_PageHeap::RecordSpan):
17066        (KXMLCore::TCMalloc_PageHeap::TCMalloc_PageHeap):
17067        (KXMLCore::TCMalloc_PageHeap::New):
17068        (KXMLCore::TCMalloc_PageHeap::Split):
17069        (KXMLCore::TCMalloc_PageHeap::Carve):
17070        (KXMLCore::TCMalloc_PageHeap::Delete):
17071        (KXMLCore::TCMalloc_PageHeap::RegisterSizeClass):
17072        (KXMLCore::TCMalloc_PageHeap::Dump):
17073        (KXMLCore::TCMalloc_PageHeap::GrowHeap):
17074        (KXMLCore::TCMalloc_PageHeap::Check):
17075        (KXMLCore::TCMalloc_PageHeap::CheckList):
17076        (KXMLCore::TCMalloc_ThreadCache_FreeList::Init):
17077        (KXMLCore::TCMalloc_ThreadCache_FreeList::length):
17078        (KXMLCore::TCMalloc_ThreadCache_FreeList::empty):
17079        (KXMLCore::TCMalloc_ThreadCache_FreeList::lowwatermark):
17080        (KXMLCore::TCMalloc_ThreadCache_FreeList::clear_lowwatermark):
17081        (KXMLCore::TCMalloc_ThreadCache_FreeList::Push):
17082        (KXMLCore::TCMalloc_ThreadCache_FreeList::Pop):
17083        (KXMLCore::TCMalloc_ThreadCache::freelist_length):
17084        (KXMLCore::TCMalloc_ThreadCache::Size):
17085        (KXMLCore::TCMalloc_Central_FreeList::length):
17086        (KXMLCore::TCMalloc_Central_FreeList::Init):
17087        (KXMLCore::TCMalloc_Central_FreeList::Insert):
17088        (KXMLCore::TCMalloc_Central_FreeList::Remove):
17089        (KXMLCore::TCMalloc_Central_FreeList::Populate):
17090        (KXMLCore::TCMalloc_ThreadCache::SampleAllocation):
17091        (KXMLCore::TCMalloc_ThreadCache::Init):
17092        (KXMLCore::TCMalloc_ThreadCache::Cleanup):
17093        (KXMLCore::TCMalloc_ThreadCache::Allocate):
17094        (KXMLCore::TCMalloc_ThreadCache::Deallocate):
17095        (KXMLCore::TCMalloc_ThreadCache::FetchFromCentralCache):
17096        (KXMLCore::TCMalloc_ThreadCache::ReleaseToCentralCache):
17097        (KXMLCore::TCMalloc_ThreadCache::Scavenge):
17098        (KXMLCore::TCMalloc_ThreadCache::GetCache):
17099        (KXMLCore::TCMalloc_ThreadCache::GetCacheIfPresent):
17100        (KXMLCore::TCMalloc_ThreadCache::PickNextSample):
17101        (KXMLCore::TCMalloc_ThreadCache::InitModule):
17102        (KXMLCore::TCMalloc_ThreadCache::InitTSD):
17103        (KXMLCore::TCMalloc_ThreadCache::CreateCacheIfNecessary):
17104        (KXMLCore::TCMalloc_ThreadCache::DeleteCache):
17105        (KXMLCore::TCMalloc_ThreadCache::RecomputeThreadCacheSize):
17106        (KXMLCore::TCMalloc_ThreadCache::Print):
17107        (KXMLCore::ExtractStats):
17108        (KXMLCore::DumpStats):
17109        (KXMLCore::PrintStats):
17110        (KXMLCore::DumpStackTraces):
17111        (KXMLCore::TCMallocImplementation::GetStats):
17112        (KXMLCore::TCMallocImplementation::ReadStackTraces):
17113        (KXMLCore::TCMallocImplementation::GetNumericProperty):
17114        (KXMLCore::TCMallocImplementation::SetNumericProperty):
17115        (KXMLCore::DoSampledAllocation):
17116        (KXMLCore::do_malloc):
17117        (KXMLCore::do_free):
17118        (KXMLCore::do_memalign):
17119        (KXMLCore::TCMallocGuard::TCMallocGuard):
17120        (KXMLCore::TCMallocGuard::~TCMallocGuard):
17121        (KXMLCore::malloc):
17122        (KXMLCore::free):
17123        (KXMLCore::calloc):
17124        (KXMLCore::cfree):
17125        (KXMLCore::realloc):
17126        (KXMLCore::memalign):
17127        (KXMLCore::posix_memalign):
17128        (KXMLCore::valloc):
17129        (KXMLCore::pvalloc):
17130        (KXMLCore::malloc_stats):
17131        (KXMLCore::mallopt):
17132        (KXMLCore::mallinfo):
17133        * kxmlcore/FastMalloc.h: Added.
17134        (KXMLCore::FastAllocated::operator new):
17135        (KXMLCore::FastAllocated::operator delete):
17136        (KXMLCore::FastAllocated::operator new[]):
17137        (KXMLCore::FastAllocated::operator delete[]):
17138        * kxmlcore/SharedPtr.h: Added.
17139        (KXMLCore::SharedPtr::SharedPtr):
17140        (KXMLCore::SharedPtr::~SharedPtr):
17141        (KXMLCore::SharedPtr::isNull):
17142        (KXMLCore::SharedPtr::notNull):
17143        (KXMLCore::SharedPtr::reset):
17144        (KXMLCore::SharedPtr::get):
17145        (KXMLCore::SharedPtr::operator*):
17146        (KXMLCore::SharedPtr::operator->):
17147        (KXMLCore::SharedPtr::operator!):
17148        (KXMLCore::SharedPtr::operator bool):
17149        (KXMLCore::::operator):
17150        (KXMLCore::operator==):
17151        (KXMLCore::operator!=):
17152        (KXMLCore::static_pointer_cast):
17153        (KXMLCore::const_pointer_cast):
17154        * kxmlcore/TCPageMap.h: Added.
17155        (TCMalloc_PageMap1::TCMalloc_PageMap1):
17156        (TCMalloc_PageMap1::Ensure):
17157        (TCMalloc_PageMap1::get):
17158        (TCMalloc_PageMap1::set):
17159        (TCMalloc_PageMap2::TCMalloc_PageMap2):
17160        (TCMalloc_PageMap2::get):
17161        (TCMalloc_PageMap2::set):
17162        (TCMalloc_PageMap2::Ensure):
17163        (TCMalloc_PageMap3::NewNode):
17164        (TCMalloc_PageMap3::TCMalloc_PageMap3):
17165        (TCMalloc_PageMap3::get):
17166        (TCMalloc_PageMap3::set):
17167        (TCMalloc_PageMap3::Ensure):
17168        * kxmlcore/TCSpinLock.h: Added.
17169        (TCMalloc_SpinLock::Init):
17170        (TCMalloc_SpinLock::Finalize):
17171        (TCMalloc_SpinLock::Lock):
17172        (TCMalloc_SpinLock::Unlock):
17173        (TCMalloc_SlowLock):
17174        (TCMalloc_SpinLockHolder::TCMalloc_SpinLockHolder):
17175        (TCMalloc_SpinLockHolder::~TCMalloc_SpinLockHolder):
17176        * kxmlcore/TCSystemAlloc.cpp: Added.
17177        (TrySbrk):
17178        (TryMmap):
17179        (TryDevMem):
17180        (TCMalloc_SystemAlloc):
17181        * kxmlcore/TCSystemAlloc.h: Added.
17182
171832005-09-23  Maciej Stachowiak  <mjs@apple.com>
17184
17185        Reviewed by Darin.
17186
17187        <rdar://problem/4260479> Finish deploying PropertySlot in the interpreter
17188        http://bugs.webkit.org/show_bug.cgi?id=5112
17189        
17190        Convert postfix, prefix, delete, prefix, and for..in expressions to use
17191        PropertySlot-based lookup instead of evaluateReference.
17192
17193        3% speedup on JS iBench.
17194
17195        Fixed two of the JS tests:
17196        * tests/mozilla/expected.html:
17197
17198        * kjs/grammar.y:
17199        * kjs/nodes.cpp:
17200        (PostfixResolveNode::evaluate):
17201        (PostfixBracketNode::evaluate):
17202        (PostfixDotNode::evaluate):
17203        (DeleteResolveNode::evaluate):
17204        (DeleteBracketNode::evaluate):
17205        (DeleteDotNode::evaluate):
17206        (DeleteValueNode::evaluate):
17207        (typeStringForValue):
17208        (TypeOfResolveNode::evaluate):
17209        (TypeOfValueNode::evaluate):
17210        (PrefixResolveNode::evaluate):
17211        (PrefixBracketNode::evaluate):
17212        (PrefixDotNode::evaluate):
17213        (ForInNode::execute):
17214        * kjs/nodes.h:
17215        (KJS::PostfixResolveNode::PostfixResolveNode):
17216        (KJS::PostfixBracketNode::PostfixBracketNode):
17217        (KJS::PostfixDotNode::PostfixDotNode):
17218        (KJS::DeleteResolveNode::DeleteResolveNode):
17219        (KJS::DeleteBracketNode::DeleteBracketNode):
17220        (KJS::DeleteDotNode::DeleteDotNode):
17221        (KJS::DeleteValueNode::DeleteValueNode):
17222        (KJS::TypeOfResolveNode::TypeOfResolveNode):
17223        (KJS::TypeOfValueNode::TypeOfValueNode):
17224        (KJS::PrefixResolveNode::PrefixResolveNode):
17225        (KJS::PrefixBracketNode::PrefixBracketNode):
17226        (KJS::PrefixDotNode::PrefixDotNode):
17227        * kjs/nodes2string.cpp:
17228        (PostfixResolveNode::streamTo):
17229        (PostfixBracketNode::streamTo):
17230        (PostfixDotNode::streamTo):
17231        (DeleteResolveNode::streamTo):
17232        (DeleteBracketNode::streamTo):
17233        (DeleteDotNode::streamTo):
17234        (DeleteValueNode::streamTo):
17235        (TypeOfValueNode::streamTo):
17236        (TypeOfResolveNode::streamTo):
17237        (PrefixResolveNode::streamTo):
17238        (PrefixBracketNode::streamTo):
17239        (PrefixDotNode::streamTo):
17240        * kjs/reference.cpp:
17241        (KJS::Reference::Reference):
17242        (KJS::Reference::getPropertyName):
17243        (KJS::Reference::getValue):
17244        (KJS::Reference::deleteValue):
17245        * kjs/reference.h:
17246
172472005-09-23  Krzysztof Kowalczyk  <kkowalczyk@gmail.com>
17248
17249        Reviewed and landed by Darin.
17250
17251        - a Windows-specific file
17252
17253        * os-win32/stdint.h: Added. We plan to remove dependency on the <stdint.h> types,
17254        and if we do so, we will remove this file.
17255
172562005-09-22  Geoffrey Garen  <ggaren@apple.com>
17257
17258        - Fixed http://bugs.webkit.org/show_bug.cgi?id=5053
17259        Need to restore int/long changes to simple_number.h
17260        
17261        Reviewed by darin and mjs.
17262
17263        * kjs/simple_number.h: changed enums to indenpendent constants to clarify types
17264        (KJS::isNegativeZero): changed to static function - no reason to export
17265        (KJS::SimpleNumber::rightShiftSignExtended): new function for clarity
17266        (KJS::SimpleNumber::make): specified cast as reinterpret_cast
17267        (KJS::SimpleNumber::is): changed to use uintptr_t for portability
17268        (KJS::SimpleNumber::value): changed to use uintptr_t and rightShiftSignExtended
17269        (KJS::SimpleNumber::fits): inverted tests - probably only a performance win for double
17270        (KJS::SimpleNumber::integerFits): ditto
17271
172722005-09-20  Maciej Stachowiak  <mjs@apple.com>
17273
17274        Reviewed by Geoff and partly by Darin.
17275
17276        - fixed http://bugs.webkit.org/post_bug.cgi
17277        (Reduce conflicts in JavaScriptCore grammar)
17278
17279        This change gets us down from over 200 shift/reduce and 45 reduce/reduce to
17280        9 shift/reduce and 45 reduce/reduce.
17281
17282        * kjs/grammar.y:
17283        * kjs/grammar_types.h: Removed.
17284        * kjs/lexer.cpp:
17285        * kjs/nodes.h:
17286        (KJS::Node::isGroupNode):
17287        (KJS::Node::isLocation):
17288        (KJS::Node::isResolveNode):
17289        (KJS::Node::isBracketAccessorNode):
17290        (KJS::Node::isDotAccessorNode):
17291        (KJS::ResolveNode::isLocation):
17292        (KJS::ResolveNode::isResolveNode):
17293        (KJS::ResolveNode::identifier):
17294        (KJS::GroupNode::isGroupNode):
17295        (KJS::GroupNode::leafNode):
17296        (KJS::BracketAccessorNode::isLocation):
17297        (KJS::BracketAccessorNode::isBracketAccessorNode):
17298        (KJS::BracketAccessorNode::base):
17299        (KJS::BracketAccessorNode::subscript):
17300        (KJS::DotAccessorNode::isLocation):
17301        (KJS::DotAccessorNode::isDotAccessorNode):
17302        (KJS::DotAccessorNode::base):
17303        (KJS::DotAccessorNode::identifier):
17304        (KJS::FuncExprNode::FuncExprNode):
17305        (KJS::FuncExprNode::identifier):
17306        (KJS::FuncDeclNode::FuncDeclNode):
17307        (KJS::FuncDeclNode::execute):
17308
173092005-09-20  Geoffrey Garen  <ggaren@apple.com>
17310
17311        - Oops. The 4263434 change was only appropriate on the branch. Rolling out.
17312        
17313        Reviewed by eric.
17314        
17315        * kjs/internal.cpp:
17316        (KJS::InterpreterImp::mark):
17317
173182005-09-20  Geoffrey Garen  <ggaren@apple.com>
17319
17320        - More changes needed to fix <rdar://problem/4214783> 8F29 REGRESSION(Denver/Chardonnay):
17321          kjs_fast_malloc crash due to lack of locking on multiple threads (seen selecting volumes in
17322          the installer)
17323          
17324        Added InterpreterLocks in some places in the bindings we missed before.
17325        
17326        Reviewed by john.
17327
17328        * bindings/runtime_root.cpp:
17329        (KJS::Bindings::addNativeReference):
17330        (KJS::Bindings::removeNativeReference):
17331        (RootObject::removeAllNativeReferences):
17332        * bindings/runtime_root.h:
17333        (KJS::Bindings::RootObject::~RootObject):
17334        (KJS::Bindings::RootObject::setRootObjectImp):
17335
173362005-09-20  Geoffrey Garen  <ggaren@apple.com>
17337
17338        - Fixed <rdar://problem/4263434> <rdar://problem/4263434> Denver 8F29 Regression:
17339          KJS::InterpreterImp::mark() crash
17340          
17341        Fix by mjs, review by me.
17342
17343        * kjs/internal.cpp:
17344        (KJS::InterpreterImp::mark): Added a null check on globExec in case a
17345        garbage collection occurs inside InterpreterImp::globalInit (called
17346        from InterpreterImp::InterpreterImp), at which point globExec has not yet been initialized.
17347
173482005-09-20  Geoffrey Garen  <ggaren@apple.com>
17349
17350        - Rolled in fix for http://bugs.webkit.org/show_bug.cgi?id=4892
17351          Date constructor has problems with months larger than 11
17352
17353        Test cases added:
17354
17355        * layout-tests/fast/js/date-big-constructor-expected.txt: Added.
17356        * layout-tests/fast/js/date-big-constructor.html: Added.
17357
17358        Reviewed by darin.
17359
17360        * kjs/date_object.cpp:
17361        (KJS::fillStructuresUsingDateArgs):
17362        (KJS::makeTime):
17363
173642005-09-19  Geoffrey Garen  <ggaren@apple.com>
17365
17366        - Fixed http://bugs.webkit.org/show_bug.cgi?id=5028
17367          9 layout tests fail following the change from long to int
17368          
17369        - Rolled out changes to simple_number.h, and added fits(long long) 
17370          and SimpleNumber::fits(unsigned long long) to the old system.
17371        
17372        Reviewed by mjs.
17373
17374        * kjs/simple_number.h:
17375        (KJS::SimpleNumber::):
17376        (KJS::SimpleNumber::value):
17377        (KJS::SimpleNumber::fits):
17378        (KJS::SimpleNumber::integerFits):
17379        (KJS::SimpleNumber::make):
17380
173812005-09-14  Maciej Stachowiak  <mjs@apple.com>
17382
17383        Reviewed by Geoff.
17384
17385        - fixed <rdar://problem/4214783> REGRESSION: kjs_fast_malloc crash due to lack of locking on multiple threads (seen selecting volumes in the installer)
17386
17387        Make sure to lock using the InterpreterLock class in all places that need it
17388        (including anything that uses the collector, the parser, the protect count hash table,
17389        and anything that allocates via fast_malloc).
17390
17391        Also added assertions to ensure that the locking rules are followed for the relevant
17392        resources.
17393
17394        * Makefile.am:
17395        * bindings/NP_jsobject.cpp:
17396        (identifierFromNPIdentifier):
17397        (_NPN_Invoke):
17398        (_NPN_Evaluate):
17399        (_NPN_GetProperty):
17400        (_NPN_SetProperty):
17401        (_NPN_RemoveProperty):
17402        (_NPN_HasProperty):
17403        (_NPN_HasMethod):
17404        (_NPN_SetException):
17405        * bindings/jni/jni_jsobject.cpp:
17406        (JSObject::call):
17407        (JSObject::eval):
17408        (JSObject::getMember):
17409        (JSObject::setMember):
17410        (JSObject::removeMember):
17411        (JSObject::getSlot):
17412        (JSObject::setSlot):
17413        (JSObject::toString):
17414        (JSObject::convertJObjectToValue):
17415        * bindings/objc/WebScriptObject.mm:
17416        (-[WebScriptObject callWebScriptMethod:withArguments:]):
17417        (-[WebScriptObject evaluateWebScript:]):
17418        (-[WebScriptObject setValue:forKey:]):
17419        (-[WebScriptObject valueForKey:]):
17420        (-[WebScriptObject removeWebScriptKey:]):
17421        (-[WebScriptObject stringRepresentation]):
17422        (-[WebScriptObject webScriptValueAtIndex:]):
17423        (-[WebScriptObject setWebScriptValueAtIndex:value:]):
17424        (+[WebScriptObject _convertValueToObjcValue:KJS::originExecutionContext:Bindings::executionContext:Bindings::]):
17425        * bindings/runtime.cpp:
17426        (Instance::createRuntimeObject):
17427        * bindings/runtime_root.h:
17428        * bindings/testbindings.cpp:
17429        (main):
17430        * bindings/testbindings.mm:
17431        (main):
17432        * kjs/fast_malloc.cpp:
17433        (KJS::kjs_fast_malloc):
17434        (KJS::kjs_fast_calloc):
17435        (KJS::kjs_fast_free):
17436        (KJS::kjs_fast_realloc):
17437        * kjs/fast_malloc.h:
17438        * kjs/identifier.h:
17439        * kjs/internal.cpp:
17440        (InterpreterImp::InterpreterImp):
17441        (InterpreterImp::clear):
17442        (InterpreterImp::mark):
17443        (InterpreterImp::checkSyntax):
17444        (InterpreterImp::evaluate):
17445        * kjs/internal.h:
17446        (KJS::InterpreterImp::globalObject):
17447        * kjs/interpreter.cpp:
17448        (Interpreter::evaluate):
17449        * kjs/interpreter.h:
17450        (KJS::InterpreterLock::InterpreterLock):
17451        (KJS::InterpreterLock::~InterpreterLock):
17452        * kjs/nodes.h:
17453        * kjs/protect.h:
17454        (KJS::ProtectedValue::ProtectedValue):
17455        (KJS::ProtectedValue::~ProtectedValue):
17456        (KJS::ProtectedValue::operator=):
17457        (KJS::ProtectedObject::ProtectedObject):
17458        (KJS::ProtectedObject::~ProtectedObject):
17459        (KJS::ProtectedObject::operator=):
17460        (KJS::ProtectedReference::ProtectedReference):
17461        (KJS::ProtectedReference::~ProtectedReference):
17462        (KJS::ProtectedReference::operator=):
17463        * kjs/protected_object.h:
17464        * kjs/protected_values.cpp:
17465        (KJS::ProtectedValues::getProtectCount):
17466        (KJS::ProtectedValues::increaseProtectCount):
17467        (KJS::ProtectedValues::decreaseProtectCount):
17468        * kjs/string_object.cpp:
17469        (StringObjectImp::StringObjectImp):
17470        * kjs/testkjs.cpp:
17471        (main):
17472
174732005-09-16  Adele Peterson  <adele@apple.com>
17474
17475        Change by Darin, reviewed by me and Maciej.
17476
17477        Fixes http://bugs.webkit.org/show_bug.cgi?id=4547
17478        use int instead of long for 32-bit (to prepare for LP64 compiling)
17479
17480        * bindings/c/c_class.h:
17481        (KJS::Bindings::CClass::constructorAt):
17482        (KJS::Bindings::CClass::numConstructors):
17483        * bindings/c/c_runtime.h:
17484        (KJS::Bindings::CMethod::numParameters):
17485        * bindings/jni/jni_class.cpp:
17486        (JavaClass::JavaClass):
17487        * bindings/jni/jni_class.h:
17488        (KJS::Bindings::JavaClass::constructorAt):
17489        (KJS::Bindings::JavaClass::numConstructors):
17490        * bindings/jni/jni_instance.cpp:
17491        (JavaInstance::invokeMethod):
17492        * bindings/jni/jni_jsobject.cpp:
17493        (JSObject::convertJObjectToValue):
17494        (JSObject::listFromJArray):
17495        * bindings/jni/jni_runtime.cpp:
17496        (JavaMethod::JavaMethod):
17497        * bindings/jni/jni_runtime.h:
17498        (KJS::Bindings::JavaConstructor::_commonCopy):
17499        (KJS::Bindings::JavaConstructor::parameterAt):
17500        (KJS::Bindings::JavaConstructor::numParameters):
17501        (KJS::Bindings::JavaMethod::_commonCopy):
17502        (KJS::Bindings::JavaMethod::parameterAt):
17503        (KJS::Bindings::JavaMethod::numParameters):
17504        * bindings/npapi.h:
17505        * bindings/objc/WebScriptObject.mm:
17506        (listFromNSArray):
17507        * bindings/objc/objc_class.h:
17508        (KJS::Bindings::ObjcClass::constructorAt):
17509        (KJS::Bindings::ObjcClass::numConstructors):
17510        * bindings/objc/objc_instance.h:
17511        * bindings/objc/objc_runtime.h:
17512        * bindings/objc/objc_runtime.mm:
17513        (ObjcMethod::numParameters):
17514        * bindings/runtime.h:
17515        * kjs/identifier.h:
17516        * kjs/internal.h:
17517        * kjs/property_slot.h:
17518        (KJS::PropertySlot::setCustomIndex):
17519        (KJS::PropertySlot::index):
17520        (KJS::PropertySlot::):
17521        * kjs/regexp_object.cpp:
17522        (RegExpObjectImp::backrefGetter):
17523        (RegExpObjectImp::getOwnPropertySlot):
17524        * kjs/simple_number.h:
17525        (KJS::SimpleNumber::):
17526        (KJS::SimpleNumber::value):
17527        (KJS::SimpleNumber::fits):
17528        (KJS::SimpleNumber::integerFits):
17529        (KJS::SimpleNumber::make):
17530        * kjs/string_object.cpp:
17531        (substituteBackreferences):
17532        * kjs/ustring.cpp:
17533        (KJS::UString::from):
17534        (KJS::UString::toUInt32):
17535        (KJS::UString::find):
17536        (KJS::UString::rfind):
17537        * kjs/ustring.h:
17538        * kjs/value.cpp:
17539        (KJS::jsNumber):
17540        * kjs/value.h:
17541
175422005-09-11  Eric Seidel  <eseidel@apple.com>
17543
17544        No review requested, build fix affects only SVG.
17545
17546        * JavaScriptCore.xcodeproj/project.pbxproj: Fixed JSC+SVG
17547        Fixed JavaScriptCore+SVG after PCRE 6.1 merger.
17548        http://bugs.webkit.org/show_bug.cgi?id=4932
17549
175502005-09-10  Krzysztof Kowalczyk  <kkowalczyk@gmail.com>
17551
17552        Reviewed and landed by Darin.
17553
17554        * Makefile.vc: Added.
17555        * README-Win32.txt: Added.
17556
175572005-09-10  Darin Adler  <darin@apple.com>
17558
17559        - fixed compilation for WebCore (another try)
17560
17561        * kjs/simple_number.h: Added more "using" lines.
17562
175632005-09-10  Darin Adler  <darin@apple.com>
17564
17565        - fixed compilation for WebCore
17566
17567        * kjs/simple_number.h: Have to include <cmath> here to work around a bug in the GCC
17568        standard C++ library headers.
17569
175702005-09-10  Darin Adler  <darin@apple.com>
17571
17572        Windows changes by Krzysztof Kowalczyk <kkowalczyk@gmail.com>.
17573
17574        - fixed http://bugs.webkit.org/show_bug.cgi?id=4870
17575          win portability: fix IS_NEGATIVE_ZERO macro in simple_number.h
17576
17577        * kjs/simple_number.h:
17578        (KJS::isNegativeZero): Added. Inline function. Has a case for Windows that
17579        uses _fpclass and a case for other platforms that uses signbit.
17580        (KJS::SimpleNumber::fits): Use inline isNegativeZero instead of macro IS_NEGATIVE_ZERO.
17581
17582        * kjs/internal.cpp: Remove definition of now-unneeded negZero global.
17583
17584        * kjs/value.cpp: Touched the file because Xcode didn't know it needed to
17585        recompile it.
17586
17587        - improved test engine
17588
17589        * tests/mozilla/jsDriver.pl: Sort tests in numeric order instead of using
17590        a plain-ASCII sort; now test 33 will be after test 5 in any given set of
17591        numbered tests.
17592
175932005-09-08  Darin Adler  <darin@apple.com>
17594
17595        - fixed overloaded versions of throwError so that they substitute *all* 
17596          expected parameters into the message string -- some versions used to
17597          skip parameters, resulting in "%s" being printed in the error message.
17598        
17599        Reviewed by Geoff.
17600
17601        * kjs/nodes.h: Updated declarations to use "const &" and not to name parameters
17602        * kjs/nodes.cpp: (Node::throwError): Updated to match above and add one missing
17603        call to substitute.
17604
176052005-09-08  Darin Adler  <darin@apple.com>
17606
17607        Reviewed by Geoff.
17608
17609        - updated to PCRE 6.1
17610
17611        The original PCRE 6.1 sources are checked into the tree with the tag
17612        "pcre-6-1" for reference. What we're checking in right now is the original
17613        plus our changes to make it support UTF-16 and at least one other tweak
17614        (vertical tab considered whitespace). Our work to get our changes was
17615        done on "pcre-6-1-branch", with an anchor at "pcre-6-1-anchor" so you can
17616        see the evolution of the UTF-16 changes.
17617        
17618        Note also that there was one small change made here that's not on the branch
17619        in pcre_compile.c.
17620
17621        * Info.plist: Updated the part of the copyright message that's about PCRE.
17622
17623        * JavaScriptCore.xcodeproj/project.pbxproj: Added new PCRE source files,
17624        removed obsolete ones.
17625
17626        * pcre/AUTHORS: Updated to PCRE 6.1. Includes credits for Apple's UTF-16
17627        changes, but not the credits for Google's C++ wrapper, since we don't include that.
17628        * pcre/COPYING: Updated to PCRE 6.1.
17629        * pcre/LICENCE: Ditto.
17630        * pcre/dftables.c: Ditto.
17631        * pcre/pcre-config.h: Ditto.
17632        * pcre/pcre.h: Ditto.
17633
17634        * pcre/pcre_compile.c: Added for PCRE 6.1.
17635        * pcre/pcre_config.c: Ditto.
17636        * pcre/pcre_exec.c: Ditto.
17637        * pcre/pcre_fullinfo.c: Ditto.
17638        * pcre/pcre_get.c: Ditto.
17639        * pcre/pcre_globals.c: Ditto.
17640        * pcre/pcre_info.c: Ditto.
17641        * pcre/pcre_internal.h: Ditto.
17642        * pcre/pcre_maketables.c: Ditto.
17643        * pcre/pcre_ord2utf8.c: Ditto.
17644        * pcre/pcre_printint.c: Ditto.
17645        * pcre/pcre_refcount.c: Ditto.
17646        * pcre/pcre_study.c: Ditto.
17647        * pcre/pcre_tables.c: Ditto.
17648        * pcre/pcre_try_flipped.c: Ditto.
17649        * pcre/pcre_ucp_findchar.c: Ditto.
17650        * pcre/pcre_version.c: Ditto.
17651        * pcre/pcre_xclass.c: Ditto.
17652        * pcre/ucp.h: Ditto.
17653        * pcre/ucp_findchar.c: Ditto.
17654        * pcre/ucpinternal.h: Ditto.
17655        * pcre/ucptable.c: Ditto.
17656
17657        * pcre/get.c: Removed.
17658        * pcre/internal.h: Removed.
17659        * pcre/maketables.c: Removed.
17660        * pcre/pcre.c: Removed.
17661        * pcre/study.c: Removed.
17662
176632005-09-07  Geoffrey Garen  <ggaren@apple.com>
17664
17665        -fixed http://bugs.webkit.org/show_bug.cgi?id=4781
17666        Date.setMonth fails with big values due to overflow
17667
17668        Reviewed by darin.
17669
17670        * kjs/date_object.cpp:
17671        (timetUsingCF): for consistency, changed return statement to invalidDate instead of LONG_MAX
17672        (KJS::fillStructuresUsingTimeArgs): modified for readability
17673        (KJS::fillStructuresUsingDateArgs): new function analogous to fillStructuresUsingTimeArgs
17674        (KJS::DateProtoFuncImp::callAsFunction): modified to use fillStructuresUsingDateArgs
17675        (KJS::DateObjectImp::construct): moved variable declaration to proper scope
17676        (KJS::DateObjectFuncImp::callAsFunction): moved variable declaration to proper scope
17677
176782005-09-07  Geoffrey Garen  <ggaren@apple.com>
17679        -updated expected test results to reflect fix for 
17680        http://bugs.webkit.org/show_bug.cgi?id=4698
17681        kjs does not allow named functions in function expressions
17682 
17683        * tests/mozilla/expected.html:
17684
176852005-09-04  Darin Adler  <darin@apple.com>
17686
17687        * kjs/identifier.cpp: Fix comment, add missing include.
17688        (Follow-on to changes from yesterday.)
17689
176902005-09-03  Krzysztof Kowalczyk  <kkowalczyk@gmail.com>
17691
17692        Reviewed, tweaked and landed by Darin.
17693
17694        - another try at some of the Windows compilation fixes
17695          should fix these bugs: 4546, 4831, 4834, 4643, 4830, 4832, 4833, 4835
17696
17697        * kjs/collector.cpp: Add missing <setjmp.h> include.
17698        * kjs/date_object.cpp: Fix broken copysign macro.
17699        * kjs/dtoa.cpp: Move macro definitions down after all header includes.
17700        * kjs/fast_malloc.cpp: Add missing <assert.h> and <stddef.h> includes.
17701        * kjs/function.cpp: Remove broken isxdigit definition.
17702        * kjs/grammar.y: Add a missing semicolon (and remove an excess one).
17703        * kjs/identifier.cpp: Turn off AVOID_STATIC_CONSTRUCTORS because the placement new syntax
17704        doesn't seem to work in Visual C++ (I'm surprised to hear that, by the way).
17705        * kjs/value.h: Made ValueImp's destructor virtual because otherwise pointers to ValueImp
17706        on the stack aren't right for garbage collection on Windows (don't think it works that
17707        way with gcc's virtual table scheme, but it's a harmless change).
17708
177092005-09-03  Krzysztof Kowalczyk  <kkowalczyk@gmail.com>
17710
17711        Reviewed, tweaked and landed by Darin.
17712
17713        - some Windows compilation fixes, hoping to fix the problems reported in these bugs:
17714          4627, 4629, 4630, 4631, 4632, 4633, 4634, 4635, 4636, 4637, 4639, 4640, 4641, 4644, 4645
17715
17716        * kjs/collector.cpp: Include <windows.h> on WIN32. Put thread-related code inside
17717        KJS_MULTIPLE_THREADS #if directives.
17718        (KJS::Collector::markCurrentThreadConservatively): Use NT_TIB to find the stack base on Win32.
17719
17720        * kjs/config.h: Define HAVE_SYS_TIMEB_H for Win32.
17721
17722        * kjs/date_object.cpp: Add include of <limits.h>. Add definitions of strncasecmp, isfinite, and
17723        copysign for Win32.
17724        (KJS::KRFCDate_parseDate): Move "errno = 0" line down closer to the first call to strol -- I believe
17725        that on Win32 there's some other call before that setting errno.
17726
17727        * kjs/date_object.h: Remove unneeded include of <sys/time.h>.
17728
17729        * kjs/dtoa.cpp: Add an undef of strtod, needed on Win32.
17730
17731        * kjs/fast_malloc.cpp: Put #if !WIN32 around some customization that's not appropriate on Win32.
17732        (KJS::region_list_append): Add a missing cast so this Win32-specific function compiles in C++.
17733        (KJS::sbrk): Change parameter type to match the declaration.
17734
17735        * kjs/function.cpp: (isxdigit): Define a locale-independent isxdigit on Win32.
17736
17737        * kjs/function.h: Remove unneeded friend class Function for FunctionImp.
17738
17739        * kjs/identifier.cpp: Took out the APPLE_CHANGES from around the AVOID_STATIC_CONSTRUCTORS
17740        define. We ultimately intend to phase out APPLE_CHANGES entirely. Also fix the
17741        non-AVOID_STATIC_CONSTRUCTORS code path.
17742
17743        * kjs/internal.cpp: Remove uneeded include of <strings.h>, which was confused with <string.h>!
17744        Add a Win32 implementation of copysign. Put the threads code inside KJS_MULTIPLE_THREADS.
17745
17746        * kjs/internal.h: Define a KJS_MULTIPLE_THREADS macro on non-Win32 only. Later we can make this
17747        specific to Mac OS X if we like.
17748
17749        * kjs/interpreter_map.cpp: Add missing include of <stdlib.h>.
17750
17751        * kjs/list.cpp:
17752        (KJS::ListImp::markValues): Use std::min instead of MIN.
17753        (KJS::List::copy): Ditto.
17754        (KJS::List::copyTail): Ditto.
17755
17756        * kjs/math_object.cpp: (signbit): Add a Win32 implementation of signbit.
17757
17758        * kjs/nodes.cpp: (Node::finalCheck): Use unsigned instead of uint.
17759        Put the use of always_inline inside __GNUC__.
17760
17761        * kjs/number_object.cpp: (NumberProtoFuncImp::callAsFunction): Use "10.0" instead of "10"
17762        inside all the calls to pow to avoid ambiguity caused by overloading of pow on Win32, seen
17763        when passing an int rather than a double or float.
17764
17765        * kjs/operations.cpp:
17766        (KJS::isInf): Add Win32 implementation.
17767        (KJS::isPosInf): Add Win32 implementation.
17768        (KJS::isNegInf): Add Win32 implementation.
17769
17770        * kjs/regexp.cpp: Use unsigned instead of uint.
17771        * kjs/regexp.h: Ditto.
17772        * kjs/regexp_object.cpp: Ditto.
17773        * kjs/regexp_object.h: Ditto.
17774
177752005-09-02  Beth Dakin  <bdakin@apple.com>
17776
17777        Fix for <rdar://problem/4235531> Denver Regression: Safari crash in KWQStringData::makeUnicode
17778        The other half of the fix is in WebCore.
17779
17780        Fix written by Maciej and Darin.
17781        Reviewed by me/Maciej
17782
17783        As Maciej said in Radar: These problems was caused by a conflict between some of our custom 
17784        allocators, causing them to return null. Symptom is typically a null pointer dereference in 
17785        a place where it might be expected an allocation has just occurred.
17786
17787        * kjs/fast_malloc.cpp: Added #define for MORECORE_CONTIGUOUS, MORECORE_CANNOT_TRIM, 
17788                               and MALLOC_FAILURE_ACTION.
17789
177902005-08-31  Geoffrey Garen  <ggaren@apple.com>
17791
17792        -rolled in fix for http://bugs.webkit.org/show_bug.cgi?id=4698
17793        kjs does not allow named functions in function expressions
17794        
17795        Fix by Arthur Langereis.
17796        
17797        Reviewed by darin.
17798        
17799        * kjs/grammar.y:
17800        * kjs/nodes.cpp:
17801        (FuncExprNode::evaluate):
17802        * kjs/nodes.h:
17803        (KJS::FuncExprNode::FuncExprNode):
17804
17805        Test cases added:
17806
17807        * layout-tests/fast/js/named-function-expression-expected.txt: Added.
17808        * layout-tests/fast/js/named-function-expression.html: Added.
17809        
178102005-08-31  Justin Haygood  <justin@xiondigital.net>
17811
17812        Reviewed, tweaked, and landed by Darin.
17813
17814        - fixed http://bugs.webkit.org/show_bug.cgi?id=4085
17815        - fixed http://bugs.webkit.org/show_bug.cgi?id=4087
17816        - fixed http://bugs.webkit.org/show_bug.cgi?id=4096
17817          Some fixes for compiling on windows.
17818
17819        * kjs/config.h: Added a WIN32 case in here, with suitable defines.
17820        (To be tweaked as necessary.)
17821        * kjs/function.cpp: Took out APPLE_CHANGES around use of ICU.
17822        * kjs/operations.cpp: Removed some bogus code that always set HAVE_FLOAT_H.
17823
178242005-08-30  Darin Adler  <darin@apple.com>
17825
17826        Reviewed by John Sullivan.
17827
17828        - fixed http://bugs.webkit.org/show_bug.cgi?id=4758
17829          unify SharedPtr in WebCore and JavaScriptCore
17830
17831        * kjs/shared_ptr.h: Updated namespace to KXMLCore instead of kxhmlcore.
17832        Made a few small improvements to use local variables a bit more and added
17833        an "operator int" to reduce the chance that we'll convert a SharedPtr to
17834        an int by accident. Also made the == operators normal functions rather than
17835        friend functions, added a couple of comemnts.
17836
17837        * kjs/function.h: Updated for namespace change.
17838        * kjs/function.cpp: Ditto.
17839        * kjs/function_object.cpp: Ditto.
17840        * kjs/internal.h: Ditto.
17841        * kjs/internal.cpp: Ditto.
17842        * kjs/nodes.h: Ditto.
17843        * kjs/nodes2string.cpp: Ditto.
17844
178452005-08-26  Maciej Stachowiak  <mjs@apple.com>
17846
17847        Reviewed by John.
17848
17849        <rdar://problem/4224911> many many leaks in kjsyyparse with malformed Javascript        
17850
17851        Record all nodes that are created during parsing, and delete any
17852        that are left floating with a refcount of 0.
17853        
17854        * kjs/internal.cpp:
17855        (KJS::Parser::saveNewNode):
17856        (KJS::clearNewNodes):
17857        (KJS::Parser::parse):
17858        * kjs/internal.h:
17859        * kjs/nodes.cpp:
17860        (Node::Node):
17861        * kjs/nodes.h:
17862        (KJS::Node::refcount):
17863
178642005-08-26  Maciej Stachowiak  <mjs@apple.com>
17865
17866        Reviewed by John.
17867
17868        - fixed <rdar://problem/4232452> many many leaks in kjsyyparse on some well-formed JavaScript (can repro on sony.com, webkit tests)
17869        
17870        Fixed by changing the refcounting scheme for nodes. Instead of each node implementing a custom ref and
17871        deref for all its children (and being responsible for deleting them), nodes use a smart pointer to
17872        hold their children, and smart pointers are used outside the node tree as well. This change mostly
17873        removes code.
17874        
17875        * JavaScriptCore.xcodeproj/project.pbxproj:
17876        * kjs/function.cpp:
17877        (KJS::DeclaredFunctionImp::DeclaredFunctionImp):
17878        (KJS::GlobalFuncImp::callAsFunction):
17879        * kjs/function.h:
17880        * kjs/function_object.cpp:
17881        (FunctionObjectImp::construct):
17882        * kjs/grammar.y:
17883        * kjs/internal.cpp:
17884        (KJS::Parser::parse):
17885        (KJS::Parser::accept):
17886        (KJS::InterpreterImp::checkSyntax):
17887        (KJS::InterpreterImp::evaluate):
17888        * kjs/internal.h:
17889        * kjs/nodes.cpp:
17890        (Node::Node):
17891        (Node::~Node):
17892        (ElementNode::evaluate):
17893        (PropertyValueNode::evaluate):
17894        (ArgumentListNode::evaluateList):
17895        (NewExprNode::evaluate):
17896        (FunctionCallValueNode::evaluate):
17897        (FunctionCallBracketNode::evaluate):
17898        (FunctionCallDotNode::evaluate):
17899        (RelationalNode::evaluate):
17900        (StatListNode::execute):
17901        (StatListNode::processVarDecls):
17902        (VarDeclListNode::evaluate):
17903        (VarDeclListNode::processVarDecls):
17904        (ForInNode::ForInNode):
17905        (ClauseListNode::processVarDecls):
17906        (CaseBlockNode::evalBlock):
17907        (FuncDeclNode::processFuncDecl):
17908        (FuncExprNode::evaluate):
17909        (SourceElementsNode::execute):
17910        (SourceElementsNode::processFuncDecl):
17911        (SourceElementsNode::processVarDecls):
17912        * kjs/nodes.h:
17913        (KJS::Node::ref):
17914        (KJS::Node::deref):
17915        (KJS::NumberNode::NumberNode):
17916        (KJS::GroupNode::GroupNode):
17917        (KJS::ElementNode::ElementNode):
17918        (KJS::ArrayNode::ArrayNode):
17919        (KJS::PropertyValueNode::PropertyValueNode):
17920        (KJS::ObjectLiteralNode::ObjectLiteralNode):
17921        (KJS::BracketAccessorNode::BracketAccessorNode):
17922        (KJS::DotAccessorNode::DotAccessorNode):
17923        (KJS::ArgumentListNode::ArgumentListNode):
17924        (KJS::ArgumentsNode::ArgumentsNode):
17925        (KJS::NewExprNode::NewExprNode):
17926        (KJS::FunctionCallValueNode::FunctionCallValueNode):
17927        (KJS::FunctionCallResolveNode::FunctionCallResolveNode):
17928        (KJS::FunctionCallBracketNode::FunctionCallBracketNode):
17929        (KJS::FunctionCallDotNode::FunctionCallDotNode):
17930        (KJS::PostfixNode::PostfixNode):
17931        (KJS::DeleteNode::DeleteNode):
17932        (KJS::VoidNode::VoidNode):
17933        (KJS::TypeOfNode::TypeOfNode):
17934        (KJS::PrefixNode::PrefixNode):
17935        (KJS::UnaryPlusNode::UnaryPlusNode):
17936        (KJS::NegateNode::NegateNode):
17937        (KJS::BitwiseNotNode::BitwiseNotNode):
17938        (KJS::LogicalNotNode::LogicalNotNode):
17939        (KJS::MultNode::MultNode):
17940        (KJS::AddNode::AddNode):
17941        (KJS::ShiftNode::ShiftNode):
17942        (KJS::RelationalNode::RelationalNode):
17943        (KJS::EqualNode::EqualNode):
17944        (KJS::BitOperNode::BitOperNode):
17945        (KJS::BinaryLogicalNode::BinaryLogicalNode):
17946        (KJS::ConditionalNode::ConditionalNode):
17947        (KJS::AssignResolveNode::AssignResolveNode):
17948        (KJS::AssignBracketNode::AssignBracketNode):
17949        (KJS::AssignDotNode::AssignDotNode):
17950        (KJS::CommaNode::CommaNode):
17951        (KJS::AssignExprNode::AssignExprNode):
17952        (KJS::VarDeclListNode::VarDeclListNode):
17953        (KJS::VarStatementNode::VarStatementNode):
17954        (KJS::ExprStatementNode::ExprStatementNode):
17955        (KJS::IfNode::IfNode):
17956        (KJS::DoWhileNode::DoWhileNode):
17957        (KJS::WhileNode::WhileNode):
17958        (KJS::ForNode::ForNode):
17959        (KJS::ReturnNode::ReturnNode):
17960        (KJS::WithNode::WithNode):
17961        (KJS::CaseClauseNode::CaseClauseNode):
17962        (KJS::ClauseListNode::ClauseListNode):
17963        (KJS::ClauseListNode::clause):
17964        (KJS::ClauseListNode::next):
17965        (KJS::SwitchNode::SwitchNode):
17966        (KJS::LabelNode::LabelNode):
17967        (KJS::ThrowNode::ThrowNode):
17968        (KJS::CatchNode::CatchNode):
17969        (KJS::FinallyNode::FinallyNode):
17970        (KJS::TryNode::TryNode):
17971        (KJS::ParameterNode::ParameterNode):
17972        (KJS::ParameterNode::nextParam):
17973        (KJS::FuncDeclNode::FuncDeclNode):
17974        (KJS::FuncExprNode::FuncExprNode):
17975        * kjs/nodes2string.cpp:
17976        (KJS::SourceStream::operator<<):
17977        (ElementNode::streamTo):
17978        (PropertyValueNode::streamTo):
17979        (ArgumentListNode::streamTo):
17980        (StatListNode::streamTo):
17981        (VarDeclListNode::streamTo):
17982        (CaseBlockNode::streamTo):
17983        (ParameterNode::streamTo):
17984        (SourceElementsNode::streamTo):
17985        * kjs/shared_ptr.h: Added.
17986        (kxmlcore::SharedPtr::SharedPtr):
17987        (kxmlcore::SharedPtr::~SharedPtr):
17988        (kxmlcore::SharedPtr::isNull):
17989        (kxmlcore::SharedPtr::notNull):
17990        (kxmlcore::SharedPtr::reset):
17991        (kxmlcore::SharedPtr::get):
17992        (kxmlcore::SharedPtr::operator*):
17993        (kxmlcore::SharedPtr::operator->):
17994        (kxmlcore::SharedPtr::operator!):
17995        (kxmlcore::SharedPtr::operator bool):
17996        (kxmlcore::SharedPtr::operator==):
17997        (kxmlcore::::operator):
17998        (kxmlcore::operator!=):
17999        (kxmlcore::static_pointer_cast):
18000        (kxmlcore::const_pointer_cast):
18001
180022005-08-26  Geoff Garen  <ggaren@apple.com>
18003
18004        Reviewed by John.
18005        Landed by Darin.
18006
18007        - fixed http://bugs.webkit.org/show_bug.cgi?id=4664
18008          TOT Crash from backwards null check in WebScriptObject.mm
18009
18010        * bindings/objc/WebScriptObject.mm:
18011        (+[WebScriptObject _convertValueToObjcValue:originExecutionContext:executionContext:]):
18012        Remove bogus !.
18013
180142005-08-25  Darin Adler  <darin@apple.com>
18015
18016        Reviewed by John Sullivan.
18017
18018        - rename KJS::UString::string() to KJS::UString::domString()
18019        - rename KJS::Identifier::string() to KJS::Identifier::domString()
18020
18021        * kjs/identifier.h: Renamed.
18022        * kjs/ustring.h: Ditto.
18023
180242005-08-19  Darin Adler  <darin@apple.com>
18025
18026        Reviewed by Maciej.
18027
18028        - fixed http://bugs.webkit.org/show_bug.cgi?id=4435
18029          speed up JavaScript by tweaking the Identifier class
18030
18031        * kjs/identifier.h: Add a new global nullIdentifier and make Identifier::null a function
18032        that returns it.
18033        * kjs/identifier.cpp: (KJS::Identifier::init): Initialize a global for the null identifier
18034        as well as all the other globals for special identifiers.
18035
18036        * kjs/ustring.h: (KJS::UString::UString): Make this empty constructor inline.
18037        * kjs/ustring.cpp: Remove the old non-inline version.
18038
180392005-08-19  Mitz Pettel  <opendarwin.org@mitzpettel.com>
18040
18041        Reviewed by Maciej.
18042        Revised and landed by Darin.
18043
18044        - fixed http://bugs.webkit.org/show_bug.cgi?id=4474
18045          REGRESSION: Crash when using in-place operator on uninitialized array element
18046
18047        * kjs/nodes.cpp:
18048        (AssignResolveNode::evaluate): Remove unneeded "isSet" assertion.
18049        (AssignBracketNode::evaluate): Replace code that tested "isSet" with code that
18050        tests the return value of getPropertySlot.
18051
18052        * kjs/property_slot.h: Removed unneeded "isSet" function. Property slots are
18053        either uninitialized or set. There's no "initialized and not set" state.
18054
180552005-08-18  Adele Peterson  <adele@apple.com>
18056
18057        Checked "Inline Functions Hidden" box
18058
18059        * JavaScriptCore.xcodeproj/project.pbxproj:
18060
180612005-08-16  Darin Adler  <darin@apple.com>
18062
18063        Reviewed by Geoff.
18064
18065        - fixed crash in one of the JavaScript tests (introduced by my throwError change)
18066
18067        * kjs/nodes.cpp: (Node::setExceptionDetailsIfNeeded): Check if the exception is an
18068        object before setting the file and line number properties on it. Something to think
18069        about in the future -- do we really want to do this on any object that's thrown?
18070        How about limiting it to error objects that were created by the JavaScript engine?
18071
18072        - changed kjs_fast_malloc so we don't have two conflicting versions of the same function
18073
18074        * kjs/fast_malloc.h: Took out all the ifdefs from this header.
18075        * kjs/fast_malloc.cpp: Added non-NDEBUG versions of the functions that just call
18076        the system malloc, and put the NDEBUG versions in an #else.
18077
180782005-08-16  Darin Adler  <darin@apple.com>
18079
18080        Reviewed by Geoff.
18081
18082        - clean up exported symbols that are not in a "KJS" namespace
18083
18084        * bindings/NP_jsobject.cpp: (identiferFromNPIdentifier): Marked this function static
18085        so it no longer has external linkage.
18086        * bindings/c/c_utility.h: Put all this stuff inside the KJS namespace.
18087        * bindings/c/c_utility.cpp: Also marked some globals static so they don't have external
18088        linkage; not as important given the namespace.
18089        * bindings/npruntime.cpp: Marked functions static so they no longer have internal linkage.
18090        Also removed unused _NPN_SetExceptionWithUTF8 function (not in header, had C++ linkage!).
18091
18092        * bindings/jni/jni_utility.cpp: (KJS::Bindings::getJavaVM): Call KJS_GetCreatedJavaVMs
18093        using the soft linking header, instead of calling the JNI call. This allows processes
18094        to link both JavaScriptCore and JavaVM without a symbol conflict.
18095        * bindings/softlinking.c:
18096        (loadFramework): Marked this function static so it no longer has external linkage.
18097        (getFunctionPointer): Ditto.
18098        (KJS_GetCreatedJavaVMs): Renamed this so it has a KJS prefix.
18099
18100        * JavaScriptCore.xcodeproj/project.pbxproj: Added softlinking.h.
18101        * bindings/softlinking.h: Added.
18102
18103        * kjs/nodes2string.cpp: (streamAssignmentOperatorTo): Marked this function static so it
18104        no longer has external linkage.
18105
181062005-08-15  Darin Adler  <darin@apple.com>
18107
18108        Reviewed by Geoff.
18109
18110        - fixed http://bugs.webkit.org/show_bug.cgi?id=4437
18111          clean up error creation with new throwError function
18112
18113        * bindings/NP_jsobject.cpp:
18114        (_NPN_SetException):
18115        * bindings/jni/jni_instance.cpp:
18116        (JavaInstance::invokeMethod):
18117        * bindings/jni/jni_runtime.cpp:
18118        (JavaField::dispatchValueFromInstance):
18119        (JavaField::dispatchSetValueToInstance):
18120        * bindings/objc/WebScriptObject.mm:
18121        (-[WebScriptObject _initializeWithObjectImp:originExecutionContext:executionContext:]):
18122        (-[WebScriptObject _initWithObjectImp:originExecutionContext:executionContext:]):
18123        (+[WebScriptObject throwException:]):
18124        (-[WebScriptObject setException:]):
18125        (+[WebScriptObject _convertValueToObjcValue:originExecutionContext:executionContext:]):
18126        * bindings/objc/objc_class.h:
18127        (KJS::Bindings::ObjcClass::~ObjcClass):
18128        (KJS::Bindings::ObjcClass::ObjcClass):
18129        (KJS::Bindings::ObjcClass::operator=):
18130        (KJS::Bindings::ObjcClass::constructorAt):
18131        (KJS::Bindings::ObjcClass::numConstructors):
18132        * bindings/objc/objc_header.h:
18133        * bindings/objc/objc_runtime.h:
18134        (KJS::Bindings::ObjcField::~ObjcField):
18135        (KJS::Bindings::ObjcField::ObjcField):
18136        (KJS::Bindings::ObjcField::operator=):
18137        (KJS::Bindings::ObjcMethod::ObjcMethod):
18138        (KJS::Bindings::ObjcMethod::~ObjcMethod):
18139        (KJS::Bindings::ObjcMethod::operator=):
18140        * bindings/objc/objc_runtime.mm:
18141        (ObjcField::valueFromInstance):
18142        (ObjcField::setValueToInstance):
18143        (ObjcArray::setValueAt):
18144        (ObjcArray::valueAt):
18145        * bindings/objc/objc_utility.h:
18146        * bindings/objc/objc_utility.mm:
18147        (KJS::Bindings::JSMethodNameToObjCMethodName):
18148        (KJS::Bindings::convertValueToObjcValue):
18149        (KJS::Bindings::convertNSStringToString):
18150        (KJS::Bindings::convertObjcValueToValue):
18151        (KJS::Bindings::objcValueTypeForType):
18152        (KJS::Bindings::createObjcInstanceForValue):
18153        (KJS::Bindings::throwError):
18154        * bindings/runtime.h:
18155        (KJS::Bindings::Parameter::~Parameter):
18156        (KJS::Bindings::Method::~Method):
18157        (KJS::Bindings::Instance::Instance):
18158        (KJS::Bindings::Instance::begin):
18159        (KJS::Bindings::Instance::end):
18160        (KJS::Bindings::Instance::getValueOfUndefinedField):
18161        (KJS::Bindings::Instance::supportsSetValueOfUndefinedField):
18162        (KJS::Bindings::Instance::setValueOfUndefinedField):
18163        (KJS::Bindings::Instance::valueOf):
18164        * bindings/runtime_array.cpp:
18165        (RuntimeArrayImp::put):
18166        * bindings/runtime_object.h:
18167        (KJS::RuntimeObjectImp::setInternalInstance):
18168        (KJS::RuntimeObjectImp::getInternalInstance):
18169        * kjs/array_object.cpp:
18170        (getProperty):
18171        (ArrayProtoFuncImp::callAsFunction):
18172        (ArrayObjectImp::construct):
18173        * kjs/bool_object.cpp:
18174        (BooleanProtoFuncImp::callAsFunction):
18175        * kjs/date_object.cpp:
18176        (KJS::DateProtoFuncImp::callAsFunction):
18177        * kjs/function.cpp:
18178        (KJS::decode):
18179        (KJS::GlobalFuncImp::callAsFunction):
18180        * kjs/function_object.cpp:
18181        (FunctionProtoFuncImp::callAsFunction):
18182        (FunctionObjectImp::construct):
18183        * kjs/internal.cpp:
18184        (KJS::UndefinedImp::toObject):
18185        (KJS::NullImp::toObject):
18186        (KJS::InterpreterImp::evaluate):
18187        (KJS::InternalFunctionImp::hasInstance):
18188        * kjs/nodes.cpp:
18189        (Node::throwError):
18190        (substitute):
18191        (Node::setExceptionDetailsIfNeeded):
18192        (undefinedVariableError):
18193        (ProgramNode::ProgramNode):
18194        * kjs/number_object.cpp:
18195        (NumberProtoFuncImp::callAsFunction):
18196        * kjs/object.cpp:
18197        (KJS::ObjectImp::call):
18198        (KJS::ObjectImp::defaultValue):
18199        (KJS::Error::create):
18200        (KJS::throwError):
18201        * kjs/object.h:
18202        (KJS::ObjectImp::clearProperties):
18203        (KJS::ObjectImp::getPropertySlot):
18204        (KJS::ObjectImp::getOwnPropertySlot):
18205        * kjs/object_object.cpp:
18206        (ObjectProtoFuncImp::callAsFunction):
18207        * kjs/reference.cpp:
18208        (KJS::Reference::getBase):
18209        (KJS::Reference::getValue):
18210        (KJS::Reference::putValue):
18211        (KJS::Reference::deleteValue):
18212        * kjs/regexp_object.cpp:
18213        (RegExpProtoFuncImp::callAsFunction):
18214        (RegExpObjectImp::construct):
18215        * kjs/string_object.cpp:
18216        (StringProtoFuncImp::callAsFunction):
18217
182182005-08-15  Anders Carlsson  <andersca@mac.com>
18219
18220        Reviewed by Darin.
18221
18222        * tests/mozilla/ecma_3/Date/15.9.5.5.js:
18223        Remove the code which tests that Date.toLocaleString should be parsable
18224        by Date.parse. That is not true according to the spec.
18225
182262005-08-15  Darin Adler  <darin@apple.com>
18227
18228        Reviewed by Geoff.
18229
18230        * kjs/collector.cpp: (KJS::Collector::allocate): Use a local instead of a global in one
18231        more place; slight speedup.
18232
182332005-08-14  Darin Adler  <darin@apple.com>
18234
18235        Reviewed by Maciej.
18236
18237        - fixed crash observed on one of the Apple-only layout tests
18238
18239        * kjs/property_map.cpp: (KJS::PropertyMap::mark): Change code to understand that deleted
18240        entries have a value of NULL, so the deleted sentinel count doesn't need to be included
18241        in the count of things to mark since we're ignoring the keys.
18242
182432005-08-14  Darin Adler  <darin@apple.com>
18244
18245        Reviewed by Maciej.
18246
18247        - fixed http://bugs.webkit.org/show_bug.cgi?id=4421
18248          speed up JavaScript by inlining some label stack functions
18249
18250        * kjs/internal.h: Removed the copy constructor and assignment operator for LabelStack.
18251        They were unused, and the implementations had bugs; I removed them rather than fixing them.
18252        Also removed the clear function, since that was only needed to help the assignment operator
18253        share code with the destructor, and was not efficient enough for the destructor.
18254        (KJS::LabelStack::~LabelStack): Made this inline. Also used an efficient implementation
18255        that's nice and fast when the stack is empty, better than the old clear() function which
18256        used to keep updating and refetching "tos" each time through the loop.
18257        (KJS::LabelStack::pop): Made this inline.
18258
18259        * kjs/internal.cpp: Deleted the now-inline functions and the obsolete functions. Also
18260        deleted a commented-out line of code.
18261
182622005-08-14  Darin Adler  <darin@apple.com>
18263
18264        Reviewed by Maciej.
18265
18266        - fixed http://bugs.webkit.org/show_bug.cgi?id=4419
18267          speed up JavaScript by improving KJS::List
18268
18269        my measurements show an improvement of 1% on iBench JavaScript
18270
18271        * kjs/list.cpp: Rearrange list to make the values and free list share the same storage,
18272        which saves 4 bytes per list. Also remove the pointers used only on the heap from the
18273        lists that are in the pool, which saves 8 bytes per list. Moving the free list pointer
18274        closer to the start of the list object also speeds up access to the free list. New
18275        "HeapListImp" struct is used only for the lists on the heap.
18276        (KJS::List::markProtectedLists): Shadowed global variable in local and updated for the
18277        new terminology ("heap" instead of "outside pool").
18278        (KJS::allocateListImp): Updated for new terminology.
18279        (KJS::List::release): Moved the code from deallocateListImp in here -- it wasn't being
18280        inlined and didn't need to be in a separate function.
18281
182822005-08-14  Darin Adler  <darin@apple.com>
18283
18284        Reviewed by Maciej.
18285
18286        - fixed http://bugs.webkit.org/show_bug.cgi?id=4417
18287          speed up JavaScript with some small changes to the property map code
18288
18289        my measurements show an improvement of 2% on iBench JavaScript
18290
18291        * kjs/property_map.h: (KJS::PropertyMap::PropertyMap): Made the default constructor inline.
18292        * kjs/property_map.cpp:
18293        (KJS::PropertyMap::~PropertyMap): Changed loop to exit early once we know we've processed
18294        all the hash table entries, based on the count.
18295        (KJS::PropertyMap::mark): Ditto.
18296
18297        * kjs/object.h: Made an arbitrary change here to force recompiling so we pick up changes to
18298        property_map.h. Works around what seems to be an Xcode header dependency bug.
18299
183002005-08-14  Darin Adler  <darin@apple.com>
18301
18302        Reviewed by Maciej.
18303
18304        - fixed http://bugs.webkit.org/show_bug.cgi?id=4416
18305          speed up JavaScript with some improvements to the garbage collector
18306
18307        my measurements show an improvement of 2% on iBench JavaScript
18308
18309        * kjs/collector.cpp:
18310        (KJS::Collector::allocate): Use local variables to shadow globals instead of repeatedly
18311        going at global variables. Tighten up loop implementations to make the common case fast.
18312        (KJS::Collector::markStackObjectsConservatively): Use local variables to shadow globals.
18313        Used a goto to eliminate a boolean since it was showing up in the profile.
18314        (KJS::Collector::markProtectedObjects): Iterate through the table using pointer rather
18315        than an index since the profile showed that generating better code.
18316        (KJS::Collector::collect): Added a special case for blocks where all cells are used,
18317        Use local variables to shadow globals. Eliminated a boolean by computing it another
18318        way (checking to see if the number of live objects changed). Also used local variables
18319        to shadow fields in the current cell when sweeping.
18320        (KJS::Collector::numReferencedObjects): Use AllocatedValueImp instead of ValueImp
18321        in one place -- means we get faster versions of various functions that don't worry
18322        about SimpleNumber.
18323        (KJS::className): Ditto.
18324        (KJS::Collector::rootObjectClasses): Ditto.
18325
183262005-08-14  Darin Adler  <darin@apple.com>
18327
18328        - fixed http://bugs.webkit.org/show_bug.cgi?id=4344
18329          REGRESSION: JavaScript crash when going back from viewing a thread (NULL protoype)
18330
18331        * kjs/error_object.cpp: (NativeErrorImp::NativeErrorImp): Set proto in a more
18332        straightforward way. The old code set the proto to 0 and then to the correct value.
18333        This showed up as a "false positive" when searching for places that set prototype
18334        to NULL/0 so I fixed it.
18335
18336        * kjs/function_object.cpp: (FunctionPrototypeImp::FunctionPrototypeImp): Change to
18337        not pass an explicit "0" to the base class (InternalFunctionImp) constructor.
18338
18339        * kjs/internal.h: Added a default constructor for InternalFunctionImp.
18340        * kjs/internal.cpp: (KJS::InternalFunctionImp::InternalFunctionImp): Added the
18341        default constructor (empty body, just calls base class's default constructor).
18342
18343        * kjs/object.h:
18344        (KJS::ObjectImp::ObjectImp): Add an assertion to catch NULL prototypes earlier
18345        in Development builds.
18346        (KJS::ObjectImp::setPrototype): Ditto.
18347
183482005-08-12  Maciej Stachowiak  <mjs@apple.com>
18349
18350        Reviewed by John.
18351
18352        - two simple speed improvements for a 3% speed gain
18353        
18354        * JavaScriptCore.xcodeproj/project.pbxproj: turn on -fstrict-aliasing
18355
18356        * kjs/scope_chain.h:
18357        (KJS::ScopeChainIterator::ScopeChainIterator): Add a scope chain iterator
18358        so you can walk a scope chain without having to make a copy that you then mutate.
18359        (KJS::ScopeChainIterator::operator*): standard iterator operation
18360        (KJS::ScopeChainIterator::operator->): ditto
18361        (KJS::ScopeChainIterator::operator++): ditto
18362        (KJS::ScopeChainIterator::operator==): ditto
18363        (KJS::ScopeChainIterator::operator!=): ditto
18364        (KJS::ScopeChain::begin): Iterator for the top of the scope chain
18365        (KJS::ScopeChain::end): Iterator for one past the bottom (i.e. null)
18366        * kjs/nodes.cpp:
18367        (ResolveNode::evaluate): Use scope chain iterator instead of copying
18368        a scope chain and then modifying the copy
18369        (ResolveNode::evaluateReference): ditto
18370        (FunctionCallResolveNode::evaluate): ditto
18371        (AssignResolveNode::evaluate): ditto
18372
183732005-08-12  Maciej Stachowiak  <mjs@apple.com>
18374
18375        Patch from Anders Carlsson, reviewed by me.
18376
18377        * kjs/nodes.h: Fix build breakage.
18378
183792005-08-12  Maciej Stachowiak  <mjs@apple.com>
18380
18381        Reviewed by hyatt.
18382
18383        - refactor function calls, 3% speedup on JS iBench.
18384
18385        * kjs/grammar.y:
18386        * kjs/nodes.cpp:
18387        (Node::throwError): Added new useful variants.
18388        (FunctionCallValueNode::evaluate): New node to handle calls on expressions
18389        that are strictly values, not references.
18390        (FunctionCallValueNode::ref):  ditto
18391        (FunctionCallValueNode::deref): ditto
18392        (FunctionCallResolveNode::evaluate): New node to handle calls on identifier
18393        expressions, so that they are looked up in the scope chain.
18394        (FunctionCallResolveNode::ref): ditto
18395        (FunctionCallResolveNode::deref): ditto
18396        (FunctionCallBracketNode::evaluate): New node to handle calls on bracket
18397        dereferences, so that the expression before brackets is used as the this
18398        object.
18399        (FunctionCallBracketNode::ref): ditto
18400        (FunctionCallBracketNode::deref): ditto
18401        (FunctionCallDotNode::evaluate): New node to handle calls on dot
18402        dereferences, so that the expression before the dot is used as the this
18403        object.
18404        (FunctionCallDotNode::ref): ditto
18405        (FunctionCallDotNode::deref): ditto
18406        (dotExprNotAnObjectString): helper function to avoid global variable access.
18407        (dotExprDoesNotAllowCallsString): ditto
18408        * kjs/nodes.h: Declared new classes.
18409        * kjs/nodes2string.cpp:
18410        (FunctionCallValueNode::streamTo): Added - serializes the appropriate function call
18411        (FunctionCallResolveNode::streamTo): ditto
18412        (FunctionCallBracketNode::streamTo): ditto
18413        (FunctionCallParenBracketNode::streamTo): ditto
18414        (FunctionCallDotNode::streamTo): ditto
18415        (FunctionCallParenDotNode::streamTo): ditto
18416        * kjs/object.h:
18417        (KJS::ObjectImp::isActivation): Change how activation objects are
18418        detected in the scope chain, a virtual function is cheaper than the
18419        old inheritance test.
18420        * kjs/function.h:
18421        (KJS::ActivationImp::isActivation): Ditto.
18422
184232005-08-11  Maciej Stachowiak  <mjs@apple.com>
18424
18425        - added missing file from earlier checkin
18426
18427        * kjs/grammar_types.h: Added.
18428        (KJS::makeNodePair):
18429        (KJS::makeNodeWithIdent):
18430
184312005-08-11  Maciej Stachowiak  <mjs@apple.com>
18432
18433        Reviewed by Geoff.
18434
18435        * kjs/date_object.cpp:
18436        (timetUsingCF): Fix one of the date tests my making the CF version of mktime
18437        have the same quirk about the DST field as the real mktime.
18438        * tests/mozilla/expected.html: Updated for newly fixed test.
18439
184402005-08-11  Maciej Stachowiak  <mjs@apple.com>
18441
18442        - updated for one of the tests that Darin incidentally fixed.
18443
18444        * tests/mozilla/expected.html:
18445
184462005-08-10  Maciej Stachowiak  <mjs@apple.com>
18447
18448        Reviewed by Geoff.
18449
18450        Refactor assignment grammar to avoid Reference type, and to later
18451        be able to take advantage of writeable PropertySlots, when those
18452        are added. I also fixed a minor bug, turning a function to a
18453        string lost parentheses, I made sure they are printed at least
18454        where semantically significant.
18455        
18456        Test cases: see WebCore
18457        
18458        * kjs/grammar.y: Change grammar so that assignment expressions are parsed
18459        directly to nodes that know how to set the kind of location being assigned, instead
18460        of having a generic assign node that counts on evaluateReference.
18461        * kjs/lexer.cpp: Include grammar_types.h.
18462        * kjs/nodes.cpp:
18463        (BracketAccessorNode): Renamed from AccessorNode1 for clarity.
18464        (DotAccessorNode): Renamed from AccessorNode2 for clarity.
18465        (combineForAssignment): Inline function for doing the proper kind of
18466        operation for various update assignments like += or *=.
18467        (AssignResolveNode): Node that handles assignment to a bare identifier.
18468        (AssignDotNode): Node that handles assignments of the form EXPR . IDENT = EXPR
18469        (AssignBracketNode): EXPR [ IDENT ] = EXPR
18470        * kjs/nodes.h: Updated for declarations/renames of new classes.
18471        * kjs/nodes2string.cpp:
18472        (GroupNode::streamTo): Fixed to print parens around the expression.
18473        (BracketAccessorNode::streamTo): Renamed.
18474        (DotAccessorNode::streamTo): Renamed.
18475        (AssignResolveNode::streamTo): Added.
18476        (AssignBracketNode::streamTo): Added.
18477        (AssignDotNode::streamTo): Added.
18478        (streamAssignmentOperatorTo): helper function for the above
18479        * kjs/property_slot.h:
18480        (KJS::PropertySlot::isSet): Made this const.
18481
184822005-08-10  Adele Peterson  <adele@apple.com>
18483
18484        Bumping version to 420+
18485
18486        * Info.plist:
18487
184882005-08-10  Geoffrey Garen  <ggaren@apple.com>
18489
18490        -fixed <rdar://problem/4151132> REGRESSION: Some applet liveconnect calls 
18491        throws privilege exception.
18492        
18493        Reviewed by richard and mjs.
18494
18495        -I removed the global static JavaClass cache, since it violated Java
18496        security to cache classes between websites and applets.
18497        
18498        * bindings/jni/jni_class.cpp: 
18499            -removed global static cache dictionary
18500            -instance constructor and destructor now do the work that used to 
18501            be done by static factory methods
18502            -removed obsolete functions
18503        (JavaClass::JavaClass):
18504        (JavaClass::~JavaClass):
18505        * bindings/jni/jni_class.h:
18506            -removed obsolete function declarations
18507            -made copying private since it's unused and it's also not clear
18508            excatly how copying would work with Java security
18509            -made default construction private since it's meaningless
18510        * bindings/jni/jni_instance.cpp:
18511            -removed obsolete functions
18512        (JavaInstance::~JavaInstance):
18513        (JavaInstance::getClass):
18514        * bindings/jni/jni_instance.h:
18515           -made copying private since it's unused and it's also not clear
18516            excatly how copying would work with Java security
18517            -made default construction private since it's meaningless
18518
185192005-08-08  Geoffrey Garen  <ggaren@apple.com>
18520
18521        -fixed crash caused by fix for http://bugs.webkit.org/show_bug.cgi?id=4313
18522        
18523        - exceptionDescription now gets explicitly initialized to NULL in all
18524        the places listed below -- our wrapper classes used to take care of this 
18525        automagically
18526        
18527        * bindings/jni/jni_instance.cpp:
18528        (JavaInstance::invokeMethod):
18529        * bindings/jni/jni_runtime.cpp:
18530        (JavaField::dispatchValueFromInstance):
18531        (JavaField::dispatchSetValueToInstance):
18532
185332005-08-08  Darin Adler  <darin@apple.com>
18534
18535        Reviewed by John Sullivan.
18536
18537        - fixed http://bugs.webkit.org/show_bug.cgi?id=4325
18538          Mozilla Date tests have an unnecessary loop that runs 1970 times before each test
18539
18540        * tests/mozilla/ecma/shell.js: Added TIME_YEAR_0 constant.
18541
18542        * tests/mozilla/ecma/Date/15.9.5.10-1.js: Removed the loop and changed code to use the constant.
18543        * tests/mozilla/ecma/Date/15.9.5.10-10.js: Ditto.
18544        * tests/mozilla/ecma/Date/15.9.5.10-11.js: Ditto.
18545        * tests/mozilla/ecma/Date/15.9.5.10-12.js: Ditto.
18546        * tests/mozilla/ecma/Date/15.9.5.10-13.js: Ditto.
18547        * tests/mozilla/ecma/Date/15.9.5.10-2.js: Ditto.
18548        * tests/mozilla/ecma/Date/15.9.5.10-3.js: Ditto.
18549        * tests/mozilla/ecma/Date/15.9.5.10-4.js: Ditto.
18550        * tests/mozilla/ecma/Date/15.9.5.10-5.js: Ditto.
18551        * tests/mozilla/ecma/Date/15.9.5.10-6.js: Ditto.
18552        * tests/mozilla/ecma/Date/15.9.5.10-7.js: Ditto.
18553        * tests/mozilla/ecma/Date/15.9.5.10-8.js: Ditto.
18554        * tests/mozilla/ecma/Date/15.9.5.10-9.js: Ditto.
18555        * tests/mozilla/ecma/Date/15.9.5.11-2.js: Ditto.
18556        * tests/mozilla/ecma/Date/15.9.5.12-1.js: Ditto.
18557        * tests/mozilla/ecma/Date/15.9.5.12-2.js: Ditto.
18558        * tests/mozilla/ecma/Date/15.9.5.12-3.js: Ditto.
18559        * tests/mozilla/ecma/Date/15.9.5.12-4.js: Ditto.
18560        * tests/mozilla/ecma/Date/15.9.5.12-5.js: Ditto.
18561        * tests/mozilla/ecma/Date/15.9.5.12-6.js: Ditto.
18562        * tests/mozilla/ecma/Date/15.9.5.12-7.js: Ditto.
18563        * tests/mozilla/ecma/Date/15.9.5.12-8.js: Ditto.
18564        * tests/mozilla/ecma/Date/15.9.5.13-2.js: Ditto.
18565        * tests/mozilla/ecma/Date/15.9.5.13-8.js: Ditto.
18566        * tests/mozilla/ecma/Date/15.9.5.14.js: Ditto.
18567        * tests/mozilla/ecma/Date/15.9.5.15.js: Ditto.
18568        * tests/mozilla/ecma/Date/15.9.5.16.js: Ditto.
18569        * tests/mozilla/ecma/Date/15.9.5.17.js: Ditto.
18570        * tests/mozilla/ecma/Date/15.9.5.18.js: Ditto.
18571        * tests/mozilla/ecma/Date/15.9.5.19.js: Ditto.
18572        * tests/mozilla/ecma/Date/15.9.5.20.js: Ditto.
18573        * tests/mozilla/ecma/Date/15.9.5.21-1.js: Ditto.
18574        * tests/mozilla/ecma/Date/15.9.5.21-2.js: Ditto.
18575        * tests/mozilla/ecma/Date/15.9.5.21-3.js: Ditto.
18576        * tests/mozilla/ecma/Date/15.9.5.21-4.js: Ditto.
18577        * tests/mozilla/ecma/Date/15.9.5.21-5.js: Ditto.
18578        * tests/mozilla/ecma/Date/15.9.5.21-6.js: Ditto.
18579        * tests/mozilla/ecma/Date/15.9.5.21-7.js: Ditto.
18580        * tests/mozilla/ecma/Date/15.9.5.21-8.js: Ditto.
18581        * tests/mozilla/ecma/Date/15.9.5.22-1.js: Ditto.
18582        * tests/mozilla/ecma/Date/15.9.5.22-2.js: Ditto.
18583        * tests/mozilla/ecma/Date/15.9.5.22-3.js: Ditto.
18584        * tests/mozilla/ecma/Date/15.9.5.22-4.js: Ditto.
18585        * tests/mozilla/ecma/Date/15.9.5.22-5.js: Ditto.
18586        * tests/mozilla/ecma/Date/15.9.5.22-6.js: Ditto.
18587        * tests/mozilla/ecma/Date/15.9.5.22-7.js: Ditto.
18588        * tests/mozilla/ecma/Date/15.9.5.22-8.js: Ditto.
18589        * tests/mozilla/ecma/Date/15.9.5.23-4.js: Ditto.
18590        * tests/mozilla/ecma/Date/15.9.5.23-5.js: Ditto.
18591        * tests/mozilla/ecma/Date/15.9.5.23-6.js: Ditto.
18592        * tests/mozilla/ecma/Date/15.9.5.23-7.js: Ditto.
18593        * tests/mozilla/ecma/Date/15.9.5.23-8.js: Ditto.
18594        * tests/mozilla/ecma/Date/15.9.5.23-9.js: Ditto.
18595        * tests/mozilla/ecma/Date/15.9.5.5.js: Ditto.
18596        * tests/mozilla/ecma/Date/15.9.5.6.js: Ditto.
18597        * tests/mozilla/ecma/Date/15.9.5.7.js: Ditto.
18598        * tests/mozilla/ecma/Date/15.9.5.8.js: Ditto.
18599        * tests/mozilla/ecma/Date/15.9.5.9.js: Ditto.
18600
186012005-08-08  Darin Adler  <darin@apple.com>
18602
18603        - forgot to delete an obsolete file
18604
18605        * kjs/object_wrapper.h: Deleted.
18606
186072005-08-07  Darin Adler  <darin@apple.com>
18608
18609        - fixed two problems compiling with gcc 4.0
18610
18611        * kjs/array_object.cpp: (ArrayProtoFuncImp::callAsFunction): Initialized a
18612        variable to quiet an erroneous warning.
18613        * kjs/date_object.cpp: (KJS::makeTime): Removed extraneous KJS:: prefix.
18614
186152005-08-07  Darin Adler  <darin@apple.com>
18616
18617        Rubber stamped by Maciej.
18618
18619        - fixed http://bugs.webkit.org/show_bug.cgi?id=4313
18620          eliminate KJS::Value and KJS::Object smart pointer wrappers (for simplicity and speed)
18621
18622        * JavaScriptCore.xcodeproj/project.pbxproj: Removed object_wrapper.h.
18623
18624        Global replaces and other wonderful stuff.
18625
18626        * bindings/NP_jsobject.cpp:
18627        (_NPN_Invoke):
18628        (_NPN_Evaluate):
18629        (_NPN_GetProperty):
18630        (_NPN_SetProperty):
18631        (_NPN_HasMethod):
18632        (_NPN_SetException):
18633        * bindings/c/c_instance.cpp:
18634        (KJS::Bindings::CInstance::CInstance):
18635        (KJS::Bindings::CInstance::invokeMethod):
18636        (KJS::Bindings::CInstance::invokeDefaultMethod):
18637        (KJS::Bindings::CInstance::defaultValue):
18638        (KJS::Bindings::CInstance::stringValue):
18639        (KJS::Bindings::CInstance::numberValue):
18640        (KJS::Bindings::CInstance::booleanValue):
18641        (KJS::Bindings::CInstance::valueOf):
18642        * bindings/c/c_instance.h:
18643        * bindings/c/c_runtime.cpp:
18644        (CField::valueFromInstance):
18645        (CField::setValueToInstance):
18646        * bindings/c/c_runtime.h:
18647        * bindings/c/c_utility.cpp:
18648        (convertNPStringToUTF16):
18649        (convertUTF8ToUTF16):
18650        (coerceValueToNPVariantStringType):
18651        (convertValueToNPVariant):
18652        (convertNPVariantToValue):
18653        * bindings/c/c_utility.h:
18654        * bindings/jni/jni_instance.cpp:
18655        (JavaInstance::stringValue):
18656        (JavaInstance::numberValue):
18657        (JavaInstance::booleanValue):
18658        (JavaInstance::invokeMethod):
18659        (JavaInstance::invokeDefaultMethod):
18660        (JavaInstance::defaultValue):
18661        (JavaInstance::valueOf):
18662        * bindings/jni/jni_instance.h:
18663        * bindings/jni/jni_jsobject.cpp:
18664        (JSObject::invoke):
18665        (JSObject::call):
18666        (JSObject::eval):
18667        (JSObject::getMember):
18668        (JSObject::getSlot):
18669        (JSObject::toString):
18670        (JSObject::convertValueToJObject):
18671        (JSObject::convertJObjectToValue):
18672        (JSObject::listFromJArray):
18673        * bindings/jni/jni_jsobject.h:
18674        * bindings/jni/jni_objc.mm:
18675        (KJS::Bindings::dispatchJNICall):
18676        * bindings/jni/jni_runtime.cpp:
18677        (JavaArray::convertJObjectToArray):
18678        (JavaField::dispatchValueFromInstance):
18679        (JavaField::valueFromInstance):
18680        (JavaField::dispatchSetValueToInstance):
18681        (JavaField::setValueToInstance):
18682        (JavaArray::setValueAt):
18683        (JavaArray::valueAt):
18684        * bindings/jni/jni_runtime.h:
18685        (KJS::Bindings::JavaString::ustring):
18686        * bindings/jni/jni_utility.cpp:
18687        (KJS::Bindings::getJavaVM):
18688        (KJS::Bindings::getJNIEnv):
18689        (KJS::Bindings::getMethodID):
18690        (KJS::Bindings::callJNIVoidMethod):
18691        (KJS::Bindings::callJNIObjectMethod):
18692        (KJS::Bindings::callJNIBooleanMethod):
18693        (KJS::Bindings::callJNIStaticBooleanMethod):
18694        (KJS::Bindings::callJNIByteMethod):
18695        (KJS::Bindings::callJNICharMethod):
18696        (KJS::Bindings::callJNIShortMethod):
18697        (KJS::Bindings::callJNIIntMethod):
18698        (KJS::Bindings::callJNILongMethod):
18699        (KJS::Bindings::callJNIFloatMethod):
18700        (KJS::Bindings::callJNIDoubleMethod):
18701        (KJS::Bindings::callJNIVoidMethodA):
18702        (KJS::Bindings::callJNIObjectMethodA):
18703        (KJS::Bindings::callJNIByteMethodA):
18704        (KJS::Bindings::callJNICharMethodA):
18705        (KJS::Bindings::callJNIShortMethodA):
18706        (KJS::Bindings::callJNIIntMethodA):
18707        (KJS::Bindings::callJNILongMethodA):
18708        (KJS::Bindings::callJNIFloatMethodA):
18709        (KJS::Bindings::callJNIDoubleMethodA):
18710        (KJS::Bindings::callJNIBooleanMethodA):
18711        (KJS::Bindings::callJNIVoidMethodIDA):
18712        (KJS::Bindings::callJNIObjectMethodIDA):
18713        (KJS::Bindings::callJNIByteMethodIDA):
18714        (KJS::Bindings::callJNICharMethodIDA):
18715        (KJS::Bindings::callJNIShortMethodIDA):
18716        (KJS::Bindings::callJNIIntMethodIDA):
18717        (KJS::Bindings::callJNILongMethodIDA):
18718        (KJS::Bindings::callJNIFloatMethodIDA):
18719        (KJS::Bindings::callJNIDoubleMethodIDA):
18720        (KJS::Bindings::callJNIBooleanMethodIDA):
18721        (KJS::Bindings::getCharactersFromJString):
18722        (KJS::Bindings::releaseCharactersForJString):
18723        (KJS::Bindings::getCharactersFromJStringInEnv):
18724        (KJS::Bindings::releaseCharactersForJStringInEnv):
18725        (KJS::Bindings::getUCharactersFromJStringInEnv):
18726        (KJS::Bindings::releaseUCharactersForJStringInEnv):
18727        (KJS::Bindings::JNITypeFromClassName):
18728        (KJS::Bindings::signatureFromPrimitiveType):
18729        (KJS::Bindings::JNITypeFromPrimitiveType):
18730        (KJS::Bindings::getJNIField):
18731        (KJS::Bindings::convertValueToJValue):
18732        * bindings/jni/jni_utility.h:
18733        * bindings/objc/WebScriptObject.mm:
18734        (_didExecute):
18735        (-[WebScriptObject _initializeWithObjectImp:originExecutionContext:Bindings::executionContext:Bindings::]):
18736        (-[WebScriptObject _initWithObjectImp:originExecutionContext:Bindings::executionContext:Bindings::]):
18737        (-[WebScriptObject _imp]):
18738        (-[WebScriptObject _executionContext]):
18739        (-[WebScriptObject _setExecutionContext:]):
18740        (-[WebScriptObject _originExecutionContext]):
18741        (-[WebScriptObject _setOriginExecutionContext:]):
18742        (+[WebScriptObject throwException:]):
18743        (listFromNSArray):
18744        (-[WebScriptObject callWebScriptMethod:withArguments:]):
18745        (-[WebScriptObject evaluateWebScript:]):
18746        (-[WebScriptObject setValue:forKey:]):
18747        (-[WebScriptObject valueForKey:]):
18748        (-[WebScriptObject removeWebScriptKey:]):
18749        (-[WebScriptObject stringRepresentation]):
18750        (-[WebScriptObject webScriptValueAtIndex:]):
18751        (-[WebScriptObject setException:]):
18752        (+[WebScriptObject _convertValueToObjcValue:originExecutionContext:executionContext:Bindings::]):
18753        * bindings/objc/WebScriptObjectPrivate.h:
18754        * bindings/objc/objc_class.h:
18755        * bindings/objc/objc_class.mm:
18756        (KJS::Bindings::ObjcClass::fallbackObject):
18757        * bindings/objc/objc_instance.h:
18758        * bindings/objc/objc_instance.mm:
18759        (ObjcInstance::invokeMethod):
18760        (ObjcInstance::invokeDefaultMethod):
18761        (ObjcInstance::setValueOfField):
18762        (ObjcInstance::setValueOfUndefinedField):
18763        (ObjcInstance::getValueOfField):
18764        (ObjcInstance::getValueOfUndefinedField):
18765        (ObjcInstance::defaultValue):
18766        (ObjcInstance::stringValue):
18767        (ObjcInstance::numberValue):
18768        (ObjcInstance::booleanValue):
18769        (ObjcInstance::valueOf):
18770        * bindings/objc/objc_runtime.h:
18771        * bindings/objc/objc_runtime.mm:
18772        (ObjcField::valueFromInstance):
18773        (convertValueToObjcObject):
18774        (ObjcField::setValueToInstance):
18775        (ObjcArray::setValueAt):
18776        (ObjcArray::valueAt):
18777        (ObjcFallbackObjectImp::put):
18778        (ObjcFallbackObjectImp::callAsFunction):
18779        (ObjcFallbackObjectImp::defaultValue):
18780        * bindings/objc/objc_utility.h:
18781        * bindings/objc/objc_utility.mm:
18782        (Bindings::JSMethodNameToObjCMethodName):
18783        (Bindings::convertValueToObjcValue):
18784        (Bindings::convertNSStringToString):
18785        (Bindings::convertObjcValueToValue):
18786        (Bindings::objcValueTypeForType):
18787        (Bindings::createObjcInstanceForValue):
18788        * bindings/runtime.cpp:
18789        (Instance::getValueOfField):
18790        (Instance::setValueOfField):
18791        (Instance::createRuntimeObject):
18792        (Instance::createLanguageInstanceForValue):
18793        * bindings/runtime.h:
18794        (KJS::Bindings::Constructor::~Constructor):
18795        (KJS::Bindings::Field::~Field):
18796        (KJS::Bindings::MethodList::MethodList):
18797        (KJS::Bindings::Class::fallbackObject):
18798        (KJS::Bindings::Class::~Class):
18799        (KJS::Bindings::Instance::Instance):
18800        (KJS::Bindings::Instance::getValueOfUndefinedField):
18801        (KJS::Bindings::Instance::supportsSetValueOfUndefinedField):
18802        (KJS::Bindings::Instance::setValueOfUndefinedField):
18803        (KJS::Bindings::Instance::valueOf):
18804        (KJS::Bindings::Instance::setExecutionContext):
18805        (KJS::Bindings::Instance::~Instance):
18806        (KJS::Bindings::Array::~Array):
18807        * bindings/runtime_array.cpp:
18808        (RuntimeArrayImp::RuntimeArrayImp):
18809        (RuntimeArrayImp::lengthGetter):
18810        (RuntimeArrayImp::indexGetter):
18811        (RuntimeArrayImp::put):
18812        * bindings/runtime_array.h:
18813        * bindings/runtime_method.cpp:
18814        (RuntimeMethodImp::lengthGetter):
18815        (RuntimeMethodImp::callAsFunction):
18816        * bindings/runtime_method.h:
18817        * bindings/runtime_object.cpp:
18818        (RuntimeObjectImp::fallbackObjectGetter):
18819        (RuntimeObjectImp::fieldGetter):
18820        (RuntimeObjectImp::methodGetter):
18821        (RuntimeObjectImp::getOwnPropertySlot):
18822        (RuntimeObjectImp::put):
18823        (RuntimeObjectImp::defaultValue):
18824        (RuntimeObjectImp::callAsFunction):
18825        * bindings/runtime_object.h:
18826        * kjs/array_instance.h:
18827        * kjs/array_object.cpp:
18828        (ArrayInstanceImp::ArrayInstanceImp):
18829        (ArrayInstanceImp::lengthGetter):
18830        (ArrayInstanceImp::getOwnPropertySlot):
18831        (ArrayInstanceImp::put):
18832        (ArrayInstanceImp::propList):
18833        (ArrayInstanceImp::setLength):
18834        (compareByStringForQSort):
18835        (compareWithCompareFunctionForQSort):
18836        (ArrayInstanceImp::sort):
18837        (ArrayInstanceImp::pushUndefinedObjectsToEnd):
18838        (ArrayPrototypeImp::ArrayPrototypeImp):
18839        (ArrayProtoFuncImp::ArrayProtoFuncImp):
18840        (ArrayProtoFuncImp::callAsFunction):
18841        (ArrayObjectImp::ArrayObjectImp):
18842        (ArrayObjectImp::construct):
18843        (ArrayObjectImp::callAsFunction):
18844        * kjs/array_object.h:
18845        * kjs/bool_object.cpp:
18846        (BooleanPrototypeImp::BooleanPrototypeImp):
18847        (BooleanProtoFuncImp::BooleanProtoFuncImp):
18848        (BooleanProtoFuncImp::callAsFunction):
18849        (BooleanObjectImp::BooleanObjectImp):
18850        (BooleanObjectImp::construct):
18851        (BooleanObjectImp::callAsFunction):
18852        * kjs/bool_object.h:
18853        * kjs/collector.cpp:
18854        (KJS::Collector::markStackObjectsConservatively):
18855        (KJS::Collector::collect):
18856        (KJS::className):
18857        * kjs/completion.h:
18858        (KJS::Completion::Completion):
18859        (KJS::Completion::value):
18860        (KJS::Completion::isValueCompletion):
18861        * kjs/context.h:
18862        (KJS::ContextImp::variableObject):
18863        (KJS::ContextImp::setVariableObject):
18864        (KJS::ContextImp::thisValue):
18865        (KJS::ContextImp::activationObject):
18866        (KJS::ContextImp::pushScope):
18867        * kjs/date_object.cpp:
18868        (formatLocaleDate):
18869        (KJS::timeFromArgs):
18870        (KJS::DatePrototypeImp::DatePrototypeImp):
18871        (KJS::DateProtoFuncImp::DateProtoFuncImp):
18872        (KJS::DateProtoFuncImp::callAsFunction):
18873        (KJS::DateObjectImp::DateObjectImp):
18874        (KJS::DateObjectImp::construct):
18875        (KJS::DateObjectImp::callAsFunction):
18876        (KJS::DateObjectFuncImp::DateObjectFuncImp):
18877        (KJS::DateObjectFuncImp::callAsFunction):
18878        (KJS::parseDate):
18879        (KJS::KRFCDate_parseDate):
18880        (KJS::timeClip):
18881        * kjs/date_object.h:
18882        * kjs/debugger.cpp:
18883        (Debugger::exception):
18884        (Debugger::callEvent):
18885        (Debugger::returnEvent):
18886        * kjs/debugger.h:
18887        * kjs/error_object.cpp:
18888        (ErrorPrototypeImp::ErrorPrototypeImp):
18889        (ErrorProtoFuncImp::ErrorProtoFuncImp):
18890        (ErrorProtoFuncImp::callAsFunction):
18891        (ErrorObjectImp::ErrorObjectImp):
18892        (ErrorObjectImp::construct):
18893        (ErrorObjectImp::callAsFunction):
18894        (NativeErrorPrototypeImp::NativeErrorPrototypeImp):
18895        (NativeErrorImp::NativeErrorImp):
18896        (NativeErrorImp::construct):
18897        (NativeErrorImp::callAsFunction):
18898        * kjs/error_object.h:
18899        * kjs/function.cpp:
18900        (KJS::FunctionImp::FunctionImp):
18901        (KJS::FunctionImp::callAsFunction):
18902        (KJS::FunctionImp::processParameters):
18903        (KJS::FunctionImp::argumentsGetter):
18904        (KJS::FunctionImp::lengthGetter):
18905        (KJS::FunctionImp::put):
18906        (KJS::DeclaredFunctionImp::DeclaredFunctionImp):
18907        (KJS::DeclaredFunctionImp::construct):
18908        (KJS::ArgumentsImp::ArgumentsImp):
18909        (KJS::ArgumentsImp::mappedIndexGetter):
18910        (KJS::ArgumentsImp::put):
18911        (KJS::ActivationImp::argumentsGetter):
18912        (KJS::GlobalFuncImp::GlobalFuncImp):
18913        (KJS::encode):
18914        (KJS::decode):
18915        (KJS::GlobalFuncImp::callAsFunction):
18916        * kjs/function.h:
18917        * kjs/function_object.cpp:
18918        (FunctionPrototypeImp::FunctionPrototypeImp):
18919        (FunctionPrototypeImp::callAsFunction):
18920        (FunctionProtoFuncImp::FunctionProtoFuncImp):
18921        (FunctionProtoFuncImp::callAsFunction):
18922        (FunctionObjectImp::FunctionObjectImp):
18923        (FunctionObjectImp::construct):
18924        (FunctionObjectImp::callAsFunction):
18925        * kjs/function_object.h:
18926        * kjs/internal.cpp:
18927        (KJS::UndefinedImp::toPrimitive):
18928        (KJS::UndefinedImp::toObject):
18929        (KJS::NullImp::toPrimitive):
18930        (KJS::NullImp::toObject):
18931        (KJS::BooleanImp::toPrimitive):
18932        (KJS::BooleanImp::toObject):
18933        (KJS::StringImp::toPrimitive):
18934        (KJS::StringImp::toObject):
18935        (KJS::NumberImp::toPrimitive):
18936        (KJS::NumberImp::toObject):
18937        (KJS::NumberImp::getUInt32):
18938        (KJS::LabelStack::push):
18939        (KJS::ContextImp::ContextImp):
18940        (KJS::InterpreterImp::globalInit):
18941        (KJS::InterpreterImp::globalClear):
18942        (KJS::InterpreterImp::InterpreterImp):
18943        (KJS::InterpreterImp::initGlobalObject):
18944        (KJS::InterpreterImp::clear):
18945        (KJS::InterpreterImp::mark):
18946        (KJS::InterpreterImp::evaluate):
18947        (KJS::InternalFunctionImp::hasInstance):
18948        (KJS::roundValue):
18949        (KJS::printInfo):
18950        * kjs/internal.h:
18951        (KJS::InterpreterImp::builtinObject):
18952        (KJS::InterpreterImp::builtinFunction):
18953        (KJS::InterpreterImp::builtinArray):
18954        (KJS::InterpreterImp::builtinBoolean):
18955        (KJS::InterpreterImp::builtinString):
18956        (KJS::InterpreterImp::builtinNumber):
18957        (KJS::InterpreterImp::builtinDate):
18958        (KJS::InterpreterImp::builtinRegExp):
18959        (KJS::InterpreterImp::builtinError):
18960        (KJS::InterpreterImp::builtinObjectPrototype):
18961        (KJS::InterpreterImp::builtinFunctionPrototype):
18962        (KJS::InterpreterImp::builtinArrayPrototype):
18963        (KJS::InterpreterImp::builtinBooleanPrototype):
18964        (KJS::InterpreterImp::builtinStringPrototype):
18965        (KJS::InterpreterImp::builtinNumberPrototype):
18966        (KJS::InterpreterImp::builtinDatePrototype):
18967        (KJS::InterpreterImp::builtinRegExpPrototype):
18968        (KJS::InterpreterImp::builtinErrorPrototype):
18969        (KJS::InterpreterImp::builtinEvalError):
18970        (KJS::InterpreterImp::builtinRangeError):
18971        (KJS::InterpreterImp::builtinReferenceError):
18972        (KJS::InterpreterImp::builtinSyntaxError):
18973        (KJS::InterpreterImp::builtinTypeError):
18974        (KJS::InterpreterImp::builtinURIError):
18975        (KJS::InterpreterImp::builtinEvalErrorPrototype):
18976        (KJS::InterpreterImp::builtinRangeErrorPrototype):
18977        (KJS::InterpreterImp::builtinReferenceErrorPrototype):
18978        (KJS::InterpreterImp::builtinSyntaxErrorPrototype):
18979        (KJS::InterpreterImp::builtinTypeErrorPrototype):
18980        (KJS::InterpreterImp::builtinURIErrorPrototype):
18981        * kjs/interpreter.cpp:
18982        (Context::variableObject):
18983        (Context::thisValue):
18984        (Interpreter::Interpreter):
18985        (Interpreter::globalObject):
18986        (Interpreter::evaluate):
18987        (Interpreter::builtinObject):
18988        (Interpreter::builtinFunction):
18989        (Interpreter::builtinArray):
18990        (Interpreter::builtinBoolean):
18991        (Interpreter::builtinString):
18992        (Interpreter::builtinNumber):
18993        (Interpreter::builtinDate):
18994        (Interpreter::builtinRegExp):
18995        (Interpreter::builtinError):
18996        (Interpreter::builtinObjectPrototype):
18997        (Interpreter::builtinFunctionPrototype):
18998        (Interpreter::builtinArrayPrototype):
18999        (Interpreter::builtinBooleanPrototype):
19000        (Interpreter::builtinStringPrototype):
19001        (Interpreter::builtinNumberPrototype):
19002        (Interpreter::builtinDatePrototype):
19003        (Interpreter::builtinRegExpPrototype):
19004        (Interpreter::builtinErrorPrototype):
19005        (Interpreter::builtinEvalError):
19006        (Interpreter::builtinRangeError):
19007        (Interpreter::builtinReferenceError):
19008        (Interpreter::builtinSyntaxError):
19009        (Interpreter::builtinTypeError):
19010        (Interpreter::builtinURIError):
19011        (Interpreter::builtinEvalErrorPrototype):
19012        (Interpreter::builtinRangeErrorPrototype):
19013        (Interpreter::builtinReferenceErrorPrototype):
19014        (Interpreter::builtinSyntaxErrorPrototype):
19015        (Interpreter::builtinTypeErrorPrototype):
19016        (Interpreter::builtinURIErrorPrototype):
19017        (Interpreter::createLanguageInstanceForValue):
19018        * kjs/interpreter.h:
19019        (KJS::Interpreter::isGlobalObject):
19020        (KJS::ExecState::setException):
19021        (KJS::ExecState::clearException):
19022        (KJS::ExecState::exception):
19023        (KJS::ExecState::hadException):
19024        (KJS::ExecState::ExecState):
19025        * kjs/list.cpp:
19026        (KJS::List::at):
19027        * kjs/list.h:
19028        (KJS::List::operator[]):
19029        (KJS::ListIterator::operator->):
19030        (KJS::ListIterator::operator*):
19031        (KJS::ListIterator::operator++):
19032        (KJS::ListIterator::operator--):
19033        * kjs/lookup.h:
19034        (KJS::staticFunctionGetter):
19035        (KJS::staticValueGetter):
19036        (KJS::lookupPut):
19037        (KJS::cacheGlobalObject):
19038        * kjs/math_object.cpp:
19039        (MathObjectImp::getValueProperty):
19040        (MathFuncImp::MathFuncImp):
19041        (MathFuncImp::callAsFunction):
19042        * kjs/math_object.h:
19043        * kjs/nodes.cpp:
19044        (Node::evaluateReference):
19045        (Node::throwError):
19046        (Node::setExceptionDetailsIfNeeded):
19047        (NullNode::evaluate):
19048        (BooleanNode::evaluate):
19049        (NumberNode::evaluate):
19050        (StringNode::evaluate):
19051        (RegExpNode::evaluate):
19052        (ThisNode::evaluate):
19053        (ResolveNode::evaluate):
19054        (ResolveNode::evaluateReference):
19055        (GroupNode::evaluate):
19056        (ElementNode::evaluate):
19057        (ArrayNode::evaluate):
19058        (ObjectLiteralNode::evaluate):
19059        (PropertyValueNode::evaluate):
19060        (PropertyNode::evaluate):
19061        (AccessorNode1::evaluate):
19062        (AccessorNode1::evaluateReference):
19063        (AccessorNode2::evaluate):
19064        (AccessorNode2::evaluateReference):
19065        (ArgumentListNode::evaluate):
19066        (ArgumentListNode::evaluateList):
19067        (ArgumentsNode::evaluate):
19068        (NewExprNode::evaluate):
19069        (FunctionCallNode::evaluate):
19070        (PostfixNode::evaluate):
19071        (DeleteNode::evaluate):
19072        (VoidNode::evaluate):
19073        (TypeOfNode::evaluate):
19074        (PrefixNode::evaluate):
19075        (UnaryPlusNode::evaluate):
19076        (NegateNode::evaluate):
19077        (BitwiseNotNode::evaluate):
19078        (LogicalNotNode::evaluate):
19079        (MultNode::evaluate):
19080        (AddNode::evaluate):
19081        (ShiftNode::evaluate):
19082        (RelationalNode::evaluate):
19083        (EqualNode::evaluate):
19084        (BitOperNode::evaluate):
19085        (BinaryLogicalNode::evaluate):
19086        (ConditionalNode::evaluate):
19087        (AssignNode::evaluate):
19088        (CommaNode::evaluate):
19089        (StatListNode::execute):
19090        (AssignExprNode::evaluate):
19091        (VarDeclNode::evaluate):
19092        (VarDeclNode::processVarDecls):
19093        (VarDeclListNode::evaluate):
19094        (ExprStatementNode::execute):
19095        (IfNode::execute):
19096        (DoWhileNode::execute):
19097        (WhileNode::execute):
19098        (ForNode::execute):
19099        (ForInNode::execute):
19100        (ContinueNode::execute):
19101        (BreakNode::execute):
19102        (ReturnNode::execute):
19103        (WithNode::execute):
19104        (CaseClauseNode::evaluate):
19105        (ClauseListNode::evaluate):
19106        (CaseBlockNode::evaluate):
19107        (CaseBlockNode::evalBlock):
19108        (SwitchNode::execute):
19109        (ThrowNode::execute):
19110        (CatchNode::execute):
19111        (TryNode::execute):
19112        (ParameterNode::evaluate):
19113        (FuncDeclNode::processFuncDecl):
19114        (FuncExprNode::evaluate):
19115        (SourceElementsNode::execute):
19116        * kjs/nodes.h:
19117        (KJS::StatementNode::evaluate):
19118        * kjs/number_object.cpp:
19119        (NumberPrototypeImp::NumberPrototypeImp):
19120        (NumberProtoFuncImp::NumberProtoFuncImp):
19121        (NumberProtoFuncImp::callAsFunction):
19122        (NumberObjectImp::NumberObjectImp):
19123        (NumberObjectImp::getValueProperty):
19124        (NumberObjectImp::construct):
19125        (NumberObjectImp::callAsFunction):
19126        * kjs/number_object.h:
19127        * kjs/object.cpp:
19128        (KJS::ObjectImp::call):
19129        (KJS::ObjectImp::mark):
19130        (KJS::ObjectImp::classInfo):
19131        (KJS::ObjectImp::get):
19132        (KJS::ObjectImp::getProperty):
19133        (KJS::ObjectImp::getPropertySlot):
19134        (KJS::ObjectImp::put):
19135        (KJS::ObjectImp::hasOwnProperty):
19136        (KJS::ObjectImp::defaultValue):
19137        (KJS::ObjectImp::findPropertyHashEntry):
19138        (KJS::ObjectImp::construct):
19139        (KJS::ObjectImp::callAsFunction):
19140        (KJS::ObjectImp::hasInstance):
19141        (KJS::ObjectImp::propList):
19142        (KJS::ObjectImp::toPrimitive):
19143        (KJS::ObjectImp::toNumber):
19144        (KJS::ObjectImp::toString):
19145        (KJS::ObjectImp::toObject):
19146        (KJS::ObjectImp::putDirect):
19147        (KJS::Error::create):
19148        (KJS::error):
19149        * kjs/object.h:
19150        (KJS::):
19151        (KJS::ObjectImp::getPropertySlot):
19152        (KJS::AllocatedValueImp::isObject):
19153        (KJS::ObjectImp::ObjectImp):
19154        (KJS::ObjectImp::internalValue):
19155        (KJS::ObjectImp::setInternalValue):
19156        (KJS::ObjectImp::prototype):
19157        (KJS::ObjectImp::setPrototype):
19158        (KJS::ObjectImp::inherits):
19159        * kjs/object_object.cpp:
19160        (ObjectPrototypeImp::ObjectPrototypeImp):
19161        (ObjectProtoFuncImp::ObjectProtoFuncImp):
19162        (ObjectProtoFuncImp::callAsFunction):
19163        (ObjectObjectImp::ObjectObjectImp):
19164        (ObjectObjectImp::construct):
19165        (ObjectObjectImp::callAsFunction):
19166        * kjs/object_object.h:
19167        * kjs/operations.cpp:
19168        (KJS::equal):
19169        (KJS::strictEqual):
19170        (KJS::relation):
19171        (KJS::add):
19172        (KJS::mult):
19173        * kjs/operations.h:
19174        * kjs/property_map.cpp:
19175        (KJS::PropertyMap::mark):
19176        (KJS::PropertyMap::addEnumerablesToReferenceList):
19177        (KJS::PropertyMap::addSparseArrayPropertiesToReferenceList):
19178        (KJS::PropertyMap::save):
19179        (KJS::PropertyMap::restore):
19180        * kjs/property_map.h:
19181        * kjs/property_slot.cpp:
19182        (KJS::PropertySlot::undefinedGetter):
19183        * kjs/property_slot.h:
19184        (KJS::PropertySlot::getValue):
19185        * kjs/protect.h:
19186        (KJS::gcUnprotectNullTolerant):
19187        (KJS::ProtectedValue::ProtectedValue):
19188        (KJS::ProtectedValue::~ProtectedValue):
19189        (KJS::ProtectedValue::operator=):
19190        (KJS::ProtectedValue::operator ValueImp *):
19191        (KJS::ProtectedValue::operator->):
19192        * kjs/protected_object.h:
19193        (KJS::ProtectedObject::ProtectedObject):
19194        (KJS::ProtectedObject::operator=):
19195        (KJS::ProtectedObject::operator ValueImp *):
19196        (KJS::ProtectedObject::operator ObjectImp *):
19197        (KJS::ProtectedObject::operator->):
19198        (KJS::ProtectedReference::ProtectedReference):
19199        (KJS::ProtectedReference::~ProtectedReference):
19200        (KJS::ProtectedReference::operator=):
19201        * kjs/protected_values.cpp:
19202        (KJS::ProtectedValues::getProtectCount):
19203        (KJS::ProtectedValues::increaseProtectCount):
19204        (KJS::ProtectedValues::insert):
19205        (KJS::ProtectedValues::decreaseProtectCount):
19206        * kjs/protected_values.h:
19207        * kjs/reference.cpp:
19208        (KJS::Reference::Reference):
19209        (KJS::Reference::makeValueReference):
19210        (KJS::Reference::getBase):
19211        (KJS::Reference::getValue):
19212        (KJS::Reference::putValue):
19213        (KJS::Reference::deleteValue):
19214        * kjs/reference.h:
19215        (KJS::Reference::baseIfMutable):
19216        * kjs/regexp_object.cpp:
19217        (RegExpPrototypeImp::RegExpPrototypeImp):
19218        (RegExpProtoFuncImp::RegExpProtoFuncImp):
19219        (RegExpProtoFuncImp::callAsFunction):
19220        (RegExpObjectImp::RegExpObjectImp):
19221        (RegExpObjectImp::arrayOfMatches):
19222        (RegExpObjectImp::backrefGetter):
19223        (RegExpObjectImp::construct):
19224        (RegExpObjectImp::callAsFunction):
19225        * kjs/regexp_object.h:
19226        * kjs/string_object.cpp:
19227        (StringInstanceImp::lengthGetter):
19228        (StringInstanceImp::indexGetter):
19229        (StringInstanceImp::getOwnPropertySlot):
19230        (StringInstanceImp::put):
19231        (StringPrototypeImp::StringPrototypeImp):
19232        (StringProtoFuncImp::StringProtoFuncImp):
19233        (regExpIsGlobal):
19234        (replace):
19235        (StringProtoFuncImp::callAsFunction):
19236        (StringObjectImp::StringObjectImp):
19237        (StringObjectImp::construct):
19238        (StringObjectImp::callAsFunction):
19239        (StringObjectFuncImp::StringObjectFuncImp):
19240        (StringObjectFuncImp::callAsFunction):
19241        * kjs/string_object.h:
19242        * kjs/testkjs.cpp:
19243        (TestFunctionImp::callAsFunction):
19244        (VersionFunctionImp::callAsFunction):
19245        (main):
19246        * kjs/value.cpp:
19247        (KJS::AllocatedValueImp::operator new):
19248        (KJS::AllocatedValueImp::getUInt32):
19249        (KJS::ValueImp::toInteger):
19250        (KJS::ValueImp::toInt32):
19251        (KJS::ValueImp::toUInt32):
19252        (KJS::ValueImp::toUInt16):
19253        (KJS::ValueImp::toObject):
19254        (KJS::AllocatedValueImp::getBoolean):
19255        (KJS::AllocatedValueImp::getNumber):
19256        (KJS::AllocatedValueImp::getString):
19257        (KJS::AllocatedValueImp::getObject):
19258        (KJS::jsString):
19259        (KJS::jsNumber):
19260        (KJS::ConstantValues::init):
19261        (KJS::ConstantValues::clear):
19262        (KJS::ConstantValues::mark):
19263        * kjs/value.h:
19264        (KJS::):
19265        (KJS::jsUndefined):
19266        (KJS::jsNull):
19267        (KJS::jsBoolean):
19268        (KJS::jsNaN):
19269        (KJS::ValueImp::ValueImp):
19270        (KJS::ValueImp::~ValueImp):
19271        (KJS::AllocatedValueImp::AllocatedValueImp):
19272        (KJS::AllocatedValueImp::~AllocatedValueImp):
19273        (KJS::AllocatedValueImp::isBoolean):
19274        (KJS::AllocatedValueImp::isNumber):
19275        (KJS::AllocatedValueImp::isString):
19276        (KJS::AllocatedValueImp::isObject):
19277        (KJS::AllocatedValueImp::marked):
19278        (KJS::AllocatedValueImp::mark):
19279        (KJS::ValueImp::downcast):
19280        (KJS::ValueImp::isUndefined):
19281        (KJS::ValueImp::isNull):
19282        (KJS::ValueImp::isUndefinedOrNull):
19283        (KJS::ValueImp::isBoolean):
19284        (KJS::ValueImp::isNumber):
19285        (KJS::ValueImp::isString):
19286        (KJS::ValueImp::isObject):
19287        (KJS::ValueImp::getBoolean):
19288        (KJS::ValueImp::getNumber):
19289        (KJS::ValueImp::getString):
19290        (KJS::ValueImp::getObject):
19291        (KJS::ValueImp::getUInt32):
19292        (KJS::ValueImp::mark):
19293        (KJS::ValueImp::marked):
19294        (KJS::ValueImp::type):
19295        (KJS::ValueImp::toPrimitive):
19296        (KJS::ValueImp::toBoolean):
19297        (KJS::ValueImp::toNumber):
19298        (KJS::ValueImp::toString):
19299        (KJS::jsZero):
19300        (KJS::jsOne):
19301        (KJS::jsTwo):
19302        (KJS::Undefined):
19303        (KJS::Null):
19304        (KJS::Boolean):
19305        (KJS::Number):
19306        (KJS::String):
19307
193082005-08-06  Maciej Stachowiak  <mjs@apple.com>
19309
19310        Reviewed by Darin.
19311
19312        Change over to the new PropertySlot mechanism for property
19313        lookup. This allows the elimination of hasOwnProperty
19314        methods. Also did some of the performance tuning enabled by this
19315        (but not yet all the possible improvements for function calls,
19316        assignment, ++, and so forth). And also much code cleanup.
19317
19318        Net result is about a 2% speedup on the JS iBench.
19319        
19320        Also redid Geoff's fix for the chrashing applet by avoiding a NULL
19321        prototype in the bindings code and using the default of Null()
19322        instead.
19323        
19324        * JavaScriptCore.xcodeproj/project.pbxproj:
19325        * bindings/objc/objc_runtime.h:
19326        * bindings/objc/objc_runtime.mm:
19327        (ObjcFallbackObjectImp::ObjcFallbackObjectImp):
19328        (ObjcFallbackObjectImp::getOwnPropertySlot):
19329        * bindings/runtime_array.cpp:
19330        (RuntimeArrayImp::lengthGetter):
19331        (RuntimeArrayImp::indexGetter):
19332        (RuntimeArrayImp::getOwnPropertySlot):
19333        * bindings/runtime_array.h:
19334        * bindings/runtime_method.cpp:
19335        (RuntimeMethodImp::lengthGetter):
19336        (RuntimeMethodImp::getOwnPropertySlot):
19337        * bindings/runtime_method.h:
19338        * bindings/runtime_object.cpp:
19339        (RuntimeObjectImp::RuntimeObjectImp):
19340        (RuntimeObjectImp::fallbackObjectGetter):
19341        (RuntimeObjectImp::fieldGetter):
19342        (RuntimeObjectImp::methodGetter):
19343        (RuntimeObjectImp::getOwnPropertySlot):
19344        * bindings/runtime_object.h:
19345        * bindings/runtime_root.h:
19346        * kjs/array_instance.h:
19347        * kjs/array_object.cpp:
19348        (ArrayInstanceImp::lengthGetter):
19349        (ArrayInstanceImp::getOwnPropertySlot):
19350        (ArrayPrototypeImp::getOwnPropertySlot):
19351        * kjs/array_object.h:
19352        * kjs/date_object.cpp:
19353        (DatePrototypeImp::getOwnPropertySlot):
19354        * kjs/date_object.h:
19355        * kjs/function.cpp:
19356        (KJS::FunctionImp::argumentsGetter):
19357        (KJS::FunctionImp::lengthGetter):
19358        (KJS::FunctionImp::getOwnPropertySlot):
19359        (KJS::FunctionImp::put):
19360        (KJS::FunctionImp::deleteProperty):
19361        (KJS::ArgumentsImp::mappedIndexGetter):
19362        (KJS::ArgumentsImp::getOwnPropertySlot):
19363        (KJS::ActivationImp::argumentsGetter):
19364        (KJS::ActivationImp::getArgumentsGetter):
19365        (KJS::ActivationImp::getOwnPropertySlot):
19366        (KJS::ActivationImp::deleteProperty):
19367        * kjs/function.h:
19368        * kjs/internal.cpp:
19369        (InterpreterImp::InterpreterImp):
19370        (InterpreterImp::initGlobalObject):
19371        (InterpreterImp::~InterpreterImp):
19372        (InterpreterImp::evaluate):
19373        * kjs/internal.h:
19374        (KJS::InterpreterImp::globalExec):
19375        * kjs/interpreter.cpp:
19376        (Interpreter::Interpreter):
19377        (Interpreter::createLanguageInstanceForValue):
19378        * kjs/interpreter.h:
19379        (KJS::Interpreter::argumentsIdentifier):
19380        (KJS::Interpreter::specialPrototypeIdentifier):
19381        * kjs/lookup.h:
19382        (KJS::staticFunctionGetter):
19383        (KJS::staticValueGetter):
19384        (KJS::getStaticPropertySlot):
19385        (KJS::getStaticFunctionSlot):
19386        (KJS::getStaticValueSlot):
19387        * kjs/math_object.cpp:
19388        (MathObjectImp::getOwnPropertySlot):
19389        * kjs/math_object.h:
19390        * kjs/nodes.cpp:
19391        (ResolveNode::evaluate):
19392        (ResolveNode::evaluateReference):
19393        (AccessorNode1::evaluate):
19394        (AccessorNode2::evaluate):
19395        * kjs/number_object.cpp:
19396        (NumberObjectImp::getOwnPropertySlot):
19397        * kjs/number_object.h:
19398        * kjs/object.cpp:
19399        (KJS::ObjectImp::get):
19400        (KJS::ObjectImp::getProperty):
19401        (KJS::ObjectImp::getPropertySlot):
19402        (KJS::ObjectImp::getOwnPropertySlot):
19403        (KJS::ObjectImp::put):
19404        (KJS::ObjectImp::hasProperty):
19405        (KJS::ObjectImp::hasOwnProperty):
19406        * kjs/object.h:
19407        (KJS::ObjectImp::getDirectLocation):
19408        (KJS::ObjectImp::getPropertySlot):
19409        (KJS::ObjectImp::getOwnPropertySlot):
19410        * kjs/object_wrapper.h: Added.
19411        (KJS::):
19412        (KJS::Object::Object):
19413        (KJS::Object::operator ObjectImp *):
19414        * kjs/property_map.cpp:
19415        (KJS::PropertyMap::getLocation):
19416        * kjs/property_map.h:
19417        * kjs/property_slot.cpp: Added.
19418        (KJS::PropertySlot::undefinedGetter):
19419        * kjs/property_slot.h: Added.
19420        (KJS::PropertySlot::isSet):
19421        (KJS::PropertySlot::getValue):
19422        (KJS::PropertySlot::setValueSlot):
19423        (KJS::PropertySlot::setStaticEntry):
19424        (KJS::PropertySlot::setCustom):
19425        (KJS::PropertySlot::setCustomIndex):
19426        (KJS::PropertySlot::setUndefined):
19427        (KJS::PropertySlot::slotBase):
19428        (KJS::PropertySlot::staticEntry):
19429        (KJS::PropertySlot::index):
19430        (KJS::PropertySlot::):
19431        * kjs/protect.h:
19432        * kjs/protected_object.h: Added.
19433        (KJS::ProtectedObject::ProtectedObject):
19434        (KJS::ProtectedObject::~ProtectedObject):
19435        (KJS::ProtectedObject::operator=):
19436        (KJS::ProtectedReference::ProtectedReference):
19437        (KJS::ProtectedReference::~ProtectedReference):
19438        (KJS::ProtectedReference::operator=):
19439        * kjs/reference.h:
19440        * kjs/reference_list.cpp:
19441        * kjs/regexp_object.cpp:
19442        (RegExpObjectImp::backrefGetter):
19443        (RegExpObjectImp::getOwnPropertySlot):
19444        * kjs/regexp_object.h:
19445        * kjs/string_object.cpp:
19446        (StringInstanceImp::lengthGetter):
19447        (StringInstanceImp::indexGetter):
19448        (StringInstanceImp::getOwnPropertySlot):
19449        (StringPrototypeImp::getOwnPropertySlot):
19450        * kjs/string_object.h:
19451
194522005-08-05  Adele Peterson  <adele@apple.com>
19453
19454        Reviewed by Darin.
19455
19456        * JavaScriptCore.xcodeproj/project.pbxproj: Unchecked 'statics are thread safe' option.
19457
194582005-08-05  Geoffrey Garen  <ggaren@apple.com>
19459
19460        -fixed <rdar://problem/4207220> REGRESSION (DENVER): Crash occurs 
19461        after clicking on Hangman applet
19462
19463        Reviewed by darin.
19464
19465        * kjs/object.cpp:
19466        (KJS::ObjectImp::hasProperty): added check for null prototype.
19467
19468        FIXME: The long-term plan is to make runtime objects use JS Null()
19469        instead of null pointers, which will allow us to eliminate null
19470        checks, improving performance.
19471
194722005-08-05  Geoffrey Garen  <ggaren@apple.com>
19473
19474        Fix by darin, reviewed by me.
19475        
19476        - rolled in fix for: <rdar://problem/4161606> JavaScript regular 
19477        expressions with certain ranges of Unicode characters cause a crash
19478
19479        Test cases added:
19480
19481        * layout-tests/fast/js/regexp-big-unicode-ranges-expected.txt: Added.
19482        * layout-tests/fast/js/regexp-big-unicode-ranges.html: Added.
19483
19484        * pcre/pcre.c:
19485        (compile_branch): added checks for characters > 255
19486
194872005-08-04  Maciej Stachowiak  <mjs@apple.com>
19488
19489        - updated expected test results now that we no longer exlude the
19490        date tests (apparently this was overlooked)
19491
19492        * tests/mozilla/expected.html:
19493
194942005-07-31  Darin Adler  <darin@apple.com>
19495
19496        Reviewed by Maciej.
19497
19498        - remove uses of Mac-OS-X-specific MAX macro
19499        - remove one of the many excess "APPLE_CHANGES" ifdefs
19500
19501        * kjs/collector.cpp: (KJS::Collector::allocate): Use std::max instead of MAX.
19502        * kjs/property_map.cpp: (KJS::PropertyMap::rehash): Ditto.
19503        * kjs/ustring.cpp:
19504        (KJS::UChar::toLower): Take out non-ICU code path.
19505        (KJS::UChar::toUpper): Ditto.
19506        (KJS::UString::spliceSubstringsWithSeparators): Use std::max instead of MAX.
19507
195082005-07-27  Geoffrey Garen  <ggaren@apple.com>
19509
19510        - fixed http://bugs.webkit.org/show_bug.cgi?id=4147
19511        Array.toString() and toLocaleString() improvements from KDE KJS
19512        (rolled in KDE changes)
19513
19514        Test cases added:
19515
19516        * layout-tests/fast/js/toString-overrides-expected.txt: Added.
19517        * layout-tests/fast/js/toString-overrides.html: Added.
19518        
19519        * kjs/array_object.cpp:
19520        (ArrayProtoFuncImp::call):
19521
195222005-07-27  Maciej Stachowiak  <mjs@apple.com>
19523
19524        Changes by Michael Kahl, reviewed by me.
19525
19526        - fixed <rdar://problem/4194278> Need better debugging support in JavaScriptCore
19527        
19528        * JavaScriptCore.xcodeproj/project.pbxproj:
19529        * kjs/debugger.cpp:
19530        (KJS::AttachedInterpreter::AttachedInterpreter):
19531        (KJS::AttachedInterpreter::~AttachedInterpreter):
19532        (Debugger::~Debugger):
19533        (Debugger::attach):
19534        (Debugger::detach):
19535        (Debugger::sourceParsed):
19536        * kjs/debugger.h:
19537        * kjs/function.cpp:
19538        (KJS::FunctionImp::call):
19539        (KJS::GlobalFuncImp::call):
19540        * kjs/function_object.cpp:
19541        (FunctionObjectImp::construct):
19542        * kjs/grammar.y:
19543        * kjs/internal.cpp:
19544        (Parser::parse):
19545        (InterpreterImp::evaluate):
19546        * kjs/internal.h:
19547        (KJS::InterpreterImp::setDebugger):
19548        * kjs/interpreter.cpp:
19549        * kjs/interpreter.h:
19550        (KJS::Interpreter::imp):
19551        * kjs/nodes.cpp:
19552
195532005-07-27  Geoffrey Garen  <ggaren@apple.com>
19554
19555        - fixed http://bugs.webkit.org/show_bug.cgi?id=3381
19556        Date.prototype.setDate() incorrect for values >=128
19557        
19558        - Test cases added:
19559
19560        * layout-tests/fast/js/date-big-setdate-expected.txt: Added.
19561        * layout-tests/fast/js/date-big-setdate.html: Added.
19562
19563        Reviewed by darin.
19564
19565        * kjs/date_object.cpp:
19566        (DateProtoFuncImp::call):
19567
195682005-07-27  Geoffrey Garen  <ggaren@apple.com>
19569
19570        -rolled in patch by Carsten Guenther <cguenther@gmail.com>
19571        for http://bugs.webkit.org/show_bug.cgi?id=3759
19572        Date object enhancements
19573        
19574        Test cases added:
19575
19576        * layout-tests/fast/js/date-preserve-milliseconds-expected.txt: Added.
19577        * layout-tests/fast/js/date-preserve-milliseconds.html: Added.
19578
19579        Reviewed by darin.
19580
19581        * kjs/date_object.cpp:
19582        (timeFromArgs):
19583        (DateProtoFuncImp::call):
19584        (DateObjectImp::construct):
19585        (DateObjectFuncImp::call):
19586        (KJS::makeTime):
19587        * kjs/date_object.h:
19588        * tests/mozilla/expected.html:
19589
195902005-07-26  Justin Garcia  <justin.garcia@apple.com>
19591
19592        Added a forward declaration to fix gcc4 build error
19593
19594        * kjs/function.h:
19595
195962005-07-25  Geoffrey Garen  <ggaren@apple.com>
19597        - fixed mistake in my last checkin -- the expected results included
19598        results from a patch that hasn't landed yet.
19599        
19600        * tests/mozilla/expected.html:
19601
196022005-07-25  Maciej Stachowiak  <mjs@apple.com>
19603
19604        - fix mistake in last change that leads to assertion failure in the Development build
19605
19606        * kjs/lookup.h:
19607        (KJS::lookupGetOwnValue):
19608
196092005-07-24  Maciej Stachowiak  <mjs@apple.com>
19610
19611        Reviewed by Darin.
19612
19613        - http://bugs.webkit.org/show_bug.cgi?id=4124
19614        (change JavaScript property access to avoid double lookup)
19615
19616        - 10% speedup on JavaScript iBench
19617        - 5% speedup on 24fun BenchJS benchmark
19618
19619        Changed all get methods to getOwnProperty - they are no longer
19620        responsible for prototype lookup, and determine if the property
19621        was found as a side efect. 
19622
19623        get() is now a nonvirtual ObjectImp method which calls the virtual
19624        getOwnProperty and walks the prototype chain. A few selected
19625        methods were inlined.
19626
19627        Changed ResolveNode::evaluate plus some other places to use
19628        getProperty which does get() and hasProperty() in one lookup.
19629
19630        Also miscellaneous code cleanup.
19631        
19632        * bindings/objc/objc_runtime.h:
19633        * bindings/objc/objc_runtime.mm:
19634        (ObjcFallbackObjectImp::ObjcFallbackObjectImp):
19635        (ObjcFallbackObjectImp::getOwnProperty):
19636        * bindings/runtime_array.cpp:
19637        (RuntimeArrayImp::RuntimeArrayImp):
19638        (RuntimeArrayImp::getOwnProperty):
19639        * bindings/runtime_array.h:
19640        * bindings/runtime_method.cpp:
19641        (RuntimeMethodImp::getOwnProperty):
19642        * bindings/runtime_method.h:
19643        * bindings/runtime_object.cpp:
19644        (RuntimeObjectImp::getOwnProperty):
19645        * bindings/runtime_object.h:
19646        * kjs/array_instance.h:
19647        * kjs/array_object.cpp:
19648        (ArrayInstanceImp::getOwnProperty):
19649        (ArrayPrototypeImp::getOwnProperty):
19650        (ArrayProtoFuncImp::call):
19651        * kjs/array_object.h:
19652        * kjs/date_object.cpp:
19653        (DatePrototypeImp::getOwnProperty):
19654        * kjs/date_object.h:
19655        * kjs/function.cpp:
19656        (KJS::FunctionImp::getOwnProperty):
19657        (KJS::ArgumentsImp::getOwnProperty):
19658        (KJS::ActivationImp::getOwnProperty):
19659        * kjs/function.h:
19660        * kjs/lookup.h:
19661        (KJS::lookupGetOwnProperty):
19662        (KJS::lookupGetOwnFunction):
19663        (KJS::lookupGetOwnValue):
19664        * kjs/math_object.cpp:
19665        (MathObjectImp::getOwnProperty):
19666        (MathObjectImp::getValueProperty):
19667        * kjs/math_object.h:
19668        * kjs/nodes.cpp:
19669        (ResolveNode::evaluate):
19670        * kjs/number_object.cpp:
19671        (NumberObjectImp::getOwnProperty):
19672        * kjs/number_object.h:
19673        * kjs/object.cpp:
19674        (KJS::ObjectImp::get):
19675        (KJS::ObjectImp::getOwnProperty):
19676        (KJS::ObjectImp::getProperty):
19677        * kjs/object.h:
19678        (KJS::ObjectImp::getProperty):
19679        (KJS::ObjectImp::getOwnProperty):
19680        * kjs/object_object.cpp:
19681        (ObjectProtoFuncImp::call):
19682        * kjs/regexp_object.cpp:
19683        (RegExpObjectImp::getOwnProperty):
19684        * kjs/regexp_object.h:
19685        * kjs/string_object.cpp:
19686        (StringInstanceImp::getOwnProperty):
19687        (StringPrototypeImp::getOwnProperty):
19688        * kjs/string_object.h:
19689
196902005-07-25  Geoffrey Garen  <ggaren@apple.com>
19691
19692        - fixed http://bugs.webkit.org/show_bug.cgi?id=3971
19693        JS test suite depends on JS 1.2 behavior
19694        
19695        Reviewed by darin.
19696
19697        * tests/mozilla/js1_2/Array/tostring_1.js: now tests only for JS 1.5 behavior
19698        * tests/mozilla/js1_2/Array/tostring_2.js: ditto
19699        * tests/mozilla/expected.html:
19700
197012005-07-24  Justin Garcia  <justin.garcia@apple.com>
19702
19703        Reviewed by kevin.
19704
19705        Fixes make clean problem introduced in xcode2.1 transition
19706
19707        * Makefile.am:
19708
197092005-07-22  Geoffrey Garen  <ggaren@apple.com>
19710
19711        Reviewed by darin.
19712
19713        * kjs/date_object.cpp: DatePrototypeImp now identifies itself as a
19714        child class of DateInstanceImp -- this enables calls to Date.ValueOf().
19715        
19716        fixes: ecma/Date/15.9.5.js (once we enable the date tests).
19717
197182005-07-22  Geoffrey Garen  <ggaren@apple.com>
19719
19720        
19721        Reviewed by darin.
19722
19723        * tests/mozilla/jsDriver.pl: now takes the path to testkjs as a command-line argument
19724        * tests/mozilla/run-mozilla-tests: Removed.
19725
197262005-07-21  Geoffrey Garen  <ggaren@apple.com>
19727
19728        * JavaScriptCore.xcodeproj/.cvsignore: Added.
19729
197302005-07-21  Geoffrey Garen  <ggaren@apple.com>
19731
19732        * JavaScriptCore.pbproj/project.pbxproj: Removed.
19733        * JavaScriptCore.xcodeproj/ggaren.pbxuser: Added.
19734        * JavaScriptCore.xcodeproj/ggaren.perspective: Added.
19735        * JavaScriptCore.xcodeproj/project.pbxproj: Added.
19736        * Makefile.am:
19737
197382005-07-20  Maciej Stachowiak  <mjs@apple.com>
19739
19740        Patch from Trey Matteson <trey@usa.net>, reviewed by me.
19741
19742        - fixed http://bugs.webkit.org/show_bug.cgi?id=3956
19743        some of WebKit builds with symbols, some doesn't
19744        
19745        * JavaScriptCore.pbproj/project.pbxproj: Generate symbols even for
19746        Deployment.
19747
197482005-07-19  Geoffrey Garen  <ggaren@apple.com>
19749
19750        -fixed http://bugs.webkit.org/show_bug.cgi?id=3991
19751        JSC doesn't implement Array.prototype.toLocaleString()
19752
19753        -test failure: ecma_3/Array/15.4.4.3-1.js
19754
19755        Reviewed by mjs.
19756
19757        * kjs/array_object.cpp:
19758        (ArrayProtoFuncImp::call): now searches for toString and
19759        toLocaleString overrides in the array's elements
19760
19761        * tests/mozilla/expected.html: failures are under 100! woohoo!
19762
197632005-07-19  Darin Adler  <darin@apple.com>
19764
19765        - fixed the build
19766
19767        * kjs/lookup.h: (KJS::lookupPut): Remove bogus const; was preventing WebCore from
19768        compiling (not sure why this didn't affect my other build machine).
19769
19770        - one other tiny tweak (so sue me)
19771
19772        * bindings/runtime_root.cpp: Remove unneeded declaration.
19773
197742005-07-19  Darin Adler  <darin@apple.com>
19775
19776        Reviewed by Geoff Garen.
19777
19778        - eliminated try wrappers for get/put/call since we don't use C++ exceptions any more
19779
19780        * kjs/lookup.h: Changed tryCall in IMPLEMENT_PROTOFUNC here to call. It doesn't make
19781        sense for this macro to use the name tryCall anyway, since that's specific to how
19782        WebCore used this, so this is good anyway. On the other hand, it might be a problem
19783        for KDOM or KSVG, in which case we'll need another macro for them, since JavaScriptCore
19784        should presumably not have the C++ exception support.
19785
197862005-07-18  Geoffrey Garen  <ggaren@apple.com>
19787
19788        -fixed http://bugs.webkit.org/show_bug.cgi?id=4008
19789        Error objects report incorrect length
19790        
19791        Reviewed by darin.
19792
19793        * kjs/error_object.cpp: Error objects now include a length property
19794        (ErrorObjectImp::ErrorObjectImp):
19795
19796        * tests/mozilla/expected.html: updated expected results to reflect fix
19797        * tests/mozilla/js1_5/Exceptions/regress-123002.js: test now expects 
19798        ecma compliant results
19799
198002005-07-15  Geoffrey Garen  <ggaren@apple.com>
19801
19802        -rolled in KDE fixes for http://bugs.webkit.org/show_bug.cgi?id=3601
19803        Error instance type info
19804        
19805        Reviewed by mjs.
19806
19807        * kjs/error_object.cpp:
19808        - Created ErrorInstanceImp class for Error() objects. 
19809        - Changed parent object for Native Errors to "Function" (matches
19810        ECMA spec).
19811        (ErrorInstanceImp::ErrorInstanceImp):
19812        (ErrorProtoFuncImp::call):
19813        (ErrorObjectImp::construct):
19814        (NativeErrorImp::construct):
19815
19816        * kjs/error_object.h:
19817        (KJS::ErrorInstanceImp::classInfo):
19818        * kjs/object.h: made comment more informative about ClassInfo
19819
19820        * tests/mozilla/expected.html:
19821
198222005-07-14  Geoffrey Garen  <ggaren@apple.com>
19823
19824        - fixed: JS test suite expects an out of memory error
19825        that our memory efficiency avoids
19826        
19827        Reviewed by mjs.
19828
19829        * tests/mozilla/js1_5/Array/regress-157652.js:
19830        test now expects normal execution
19831        
19832        * tests/mozilla/expected.html:
19833
198342005-07-14  Geoffrey Garen  <ggaren@apple.com>
19835        - fixed http://bugs.webkit.org/show_bug.cgi?id=4006
19836        testkjs doesn't implement gc()
19837        
19838        - test failure:
19839        ecma_3/Function/regress-104584.js
19840        
19841        Reviewed by mjs.
19842
19843        * kjs/interpreter.cpp:
19844        (Interpreter::finalCheck): removed misleading while && comment
19845
19846        * kjs/testkjs.cpp: added "gc" function to global object
19847        (TestFunctionImp::):
19848        (TestFunctionImp::call):
19849        (main):
19850
19851        * tests/mozilla/expected.html:
19852
198532005-07-14  Geoffrey Garen  <ggaren@apple.com>
19854
19855        -rolled in patches for http://bugs.webkit.org/show_bug.cgi?id=3945
19856        [PATCH] Safe merges of comments and other trivialities from KDE's kjs
19857        
19858        -patch by Martijn Klingens <klingens@kde.org>
19859        
19860        * kjs/array_instance.h:
19861        * kjs/array_object.cpp:
19862        * kjs/array_object.h:
19863        * kjs/bool_object.cpp:
19864        * kjs/bool_object.h:
19865        * kjs/collector.cpp:
19866        * kjs/collector.h:
19867        * kjs/completion.h:
19868        * kjs/context.h:
19869        * kjs/date_object.cpp:
19870        * kjs/date_object.h:
19871        * kjs/debugger.cpp:
19872        * kjs/debugger.h:
19873        * kjs/dtoa.h:
19874        * kjs/error_object.cpp:
19875        * kjs/error_object.h:
19876        * kjs/function.cpp:
19877        * kjs/function.h:
19878        * kjs/function_object.cpp:
19879        * kjs/function_object.h:
19880        * kjs/grammar.y:
19881        * kjs/identifier.cpp:
19882        * kjs/identifier.h:
19883        * kjs/internal.cpp:
19884        * kjs/internal.h:
19885        * kjs/interpreter.cpp:
19886        * kjs/interpreter.h:
19887        * kjs/interpreter_map.cpp:
19888        * kjs/interpreter_map.h:
19889        * kjs/lexer.cpp:
19890        * kjs/lexer.h:
19891        * kjs/list.cpp:
19892        * kjs/list.h:
19893        * kjs/lookup.cpp:
19894        * kjs/lookup.h:
19895        * kjs/math_object.cpp:
19896        * kjs/math_object.h:
19897        * kjs/nodes.cpp:
19898        * kjs/nodes.h:
19899        * kjs/nodes2string.cpp:
19900        * kjs/number_object.cpp:
19901        * kjs/number_object.h:
19902        * kjs/object.cpp:
19903        * kjs/object.h:
19904        * kjs/object_object.cpp:
19905        * kjs/object_object.h:
19906        * kjs/operations.cpp:
19907        * kjs/operations.h:
19908        * kjs/property_map.cpp:
19909        * kjs/property_map.h:
19910        * kjs/reference.cpp:
19911        * kjs/reference.h:
19912        * kjs/reference_list.cpp:
19913        * kjs/reference_list.h:
19914        * kjs/regexp.cpp:
19915        * kjs/regexp.h:
19916        * kjs/regexp_object.cpp:
19917        * kjs/regexp_object.h:
19918        * kjs/scope_chain.cpp:
19919        * kjs/scope_chain.h:
19920        * kjs/simple_number.h:
19921        * kjs/string_object.cpp:
19922        * kjs/string_object.h:
19923        * kjs/testkjs.cpp:
19924        * kjs/types.h:
19925        * kjs/ustring.cpp:
19926        * kjs/ustring.h:
19927        * kjs/value.cpp:
19928        * kjs/value.h:
19929
199302005-07-14  Geoffrey Garen  <ggaren@apple.com>
19931
19932        -fixed http://bugs.webkit.org/show_bug.cgi?id=3970
19933        throw statements fail inside eval statements
19934        
19935        Reviewed by mjs.
19936
19937        * kjs/function.cpp:
19938        (KJS::GlobalFuncImp::call):
19939        Big change since I fixed the tabbing. The important part is:
19940        if (c.complType() == Throw)
19941          exec->setException(c.value());
19942
19943        * kjs/nodes.cpp:
19944        (ThrowNode::execute): removed duplicate KJS_CHECKEXCEPTION
19945        (TryNode::execute): 
19946        try now clears the exception state before the finally block executes,
19947        and checks the state after the block executes, so that exceptions in
19948        finally code get caught.
19949
19950        * tests/mozilla/expected.html:
19951
199522005-07-14  Geoffrey Garen  <ggaren@apple.com>
19953        
19954        -landed fix for http://bugs.webkit.org/show_bug.cgi?id=3412
19955        Object.prototype is missing toLocaleString
19956
19957        - patch by Mark Rowe (bdash) <opendarwin.org@bdash.net.nz>
19958        
19959        -layout test info in webcore changelog
19960
19961        Reviewed by mjs.
19962
19963        * kjs/object_object.cpp:
19964        (ObjectPrototypeImp::ObjectPrototypeImp):
19965        (ObjectProtoFuncImp::call):
19966        * kjs/object_object.h:
19967        (KJS::ObjectProtoFuncImp::):
19968
199692005-07-12  Geoffrey Garen  <ggaren@apple.com>
19970
19971        Reviewed by mjs.
19972
19973        * kjs/function.cpp:
19974        (KJS::IndexToNameMap::operator[]): fixed infinite recursion
19975        bug in last checkin
19976
199772005-07-12  Geoffrey Garen  <ggaren@apple.com>
19978
19979        -fixed http://bugs.webkit.org/show_bug.cgi?id=3881
19980        arguments object should share values with function parameters
19981
19982        Reviewed by mjs.
19983
19984        ArgumentsImp now uses a simple hash lookup to share values
19985        with the activation object.
19986
19987        * kjs/function.cpp:
19988        (KJS::FunctionImp::getParameterName):
19989        (KJS::IndexToNameMap::IndexToNameMap):
19990        (KJS::IndexToNameMap::~IndexToNameMap):
19991        (KJS::IndexToNameMap::isMapped):
19992        (KJS::IndexToNameMap::unMap):
19993        (KJS::IndexToNameMap::operator[]):
19994        (KJS::ArgumentsImp::ArgumentsImp):
19995        (KJS::ArgumentsImp::mark):
19996        (KJS::ArgumentsImp::get):
19997        (KJS::ArgumentsImp::put):
19998        (KJS::ArgumentsImp::deleteProperty):
19999        (KJS::ArgumentsImp::hasOwnProperty):
20000        (KJS::ActivationImp::createArgumentsObject):
20001        * kjs/function.h:
20002        * tests/mozilla/expected.html: updated results
20003
200042005-07-09  Maciej Stachowiak  <mjs@apple.com>
20005
20006        - backing out my earlier collector change, it causes a performance regression in TOT
20007
20008        * kjs/collector.cpp:
20009        (KJS::Collector::allocate):
20010
200112005-07-08  Eric Seidel  <eseidel@apple.com>
20012
20013        Reviewed by mjs/hyatt (only in concept).
20014
20015        * JavaScriptCore.pbproj/project.pbxproj: Added JavaScriptCore+SVG
20016        Turns on RTTI support for JavaScriptCore.framework when
20017        building the JavaScriptCore+SVG target.  This is needed as
20018        kdom (part of WebCore+SVG) requires RTTI for the time being.
20019
200202005-07-08  Maciej Stachowiak  <mjs@apple.com>
20021
20022        Reviewed by hyatt.
20023
20024        - When there are many live objects, GC less often, to try to make
20025        GC cost proportional to garbage, not proportional to total memory used.
20026
20027        * kjs/collector.cpp:
20028        (KJS::Collector::allocate):
20029
200302005-07-08  Vicki Murley  <vicki@apple.com>
20031
20032        Fix from Carsten Guenther, reviewed by Maciej
20033
20034        - fixed http://bugs.webkit.org/show_bug.cgi?id=3644 (Error string representation)
20035
20036        Switch from "-" to ":" in error strings.
20037
20038        * kjs/error_object.cpp:
20039        (ErrorProtoFuncImp::call):
20040        * tests/mozilla/expected.html:
20041
200422005-07-08  Geoffrey Garen  <ggaren@apple.com>
20043
20044        -rolled in patch for http://bugs.webkit.org/show_bug.cgi?id=3878
20045        arguments object should be an object not an array
20046
20047        Reviewed by mjs.
20048
20049        * kjs/function.cpp:
20050        (KJS::ArgumentsImp::ArgumentsImp): now manually handles initialization
20051        we used to get for free by inheriting from ArrayInstanceImp
20052        * kjs/function.h: ArgumentsImp now inherits from ObjectImp
20053        * tests/mozilla/expected.html: updated expected test results
20054
200552005-07-07  Eric Seidel  <eseidel@apple.com>
20056
20057        Reviewed by mjs.
20058
20059        * kjs/grammar.y: removed #define YYMAXDEPTH 0 for bison 2.0
20060        http://bugs.webkit.org/show_bug.cgi?id=3882
20061
200622005-07-03  Maciej Stachowiak  <mjs@apple.com>
20063
20064        Original patch from Mark Rowe <opendarwin.org@bdash.net.nz>, reviewed by me.
20065        Fixes to patch by me, reviewed by John Sullivan.
20066
20067        - fixed http://bugs.webkit.org/show_bug.cgi?id=3293
20068
20069        Test cases added:
20070        * tests/mozilla/expected.html: Two tests newly pass.
20071
20072        * bindings/objc/objc_runtime.h:
20073        * bindings/objc/objc_runtime.mm:
20074        (ObjcFallbackObjectImp::hasOwnProperty):
20075        * bindings/runtime_array.cpp:
20076        (RuntimeArrayImp::hasOwnProperty):
20077        * bindings/runtime_array.h:
20078        * bindings/runtime_object.cpp:
20079        (RuntimeObjectImp::hasOwnProperty):
20080        * bindings/runtime_object.h:
20081        * kjs/array_instance.h:
20082        * kjs/array_object.cpp:
20083        (ArrayInstanceImp::hasOwnProperty):
20084        * kjs/function.cpp:
20085        (KJS::FunctionImp::hasOwnProperty):
20086        (KJS::ActivationImp::hasOwnProperty):
20087        * kjs/function.h:
20088        * kjs/lookup.h:
20089        * kjs/object.cpp:
20090        (KJS::ObjectImp::hasProperty):
20091        (KJS::ObjectImp::hasOwnProperty):
20092        * kjs/object.h:
20093        (KJS::Object::hasOwnProperty):
20094        * kjs/object_object.cpp:
20095        (ObjectPrototypeImp::ObjectPrototypeImp):
20096        (ObjectProtoFuncImp::call):
20097        * kjs/object_object.h:
20098        (KJS::ObjectProtoFuncImp::):
20099        * kjs/string_object.cpp:
20100        (StringInstanceImp::hasOwnProperty):
20101        * kjs/string_object.h:
20102
201032005-07-01  Geoffrey Garen  <ggaren@apple.com>
20104
20105        -landed patch by Eric Seidel <macdome@opendarwin.org>
20106        
20107        -for http://bugs.webkit.org/show_bug.cgi?id=3657
20108        GroundWork:  Moving some functions from khtml->jsc following kjs TOT
20109        
20110        - no layout test necessary yet - only groundwork
20111
20112        Reviewed by darin.
20113
20114        * kjs/lookup.h:
20115        (KJS::cacheGlobalObject):
20116
201172005-07-01  Geoffrey Garen  <ggaren@apple.com>
20118
20119        -landed patch by Carsten Guenther <cguenther@gmail.com>
20120
20121        -fixes http://bugs.webkit.org/show_bug.cgi?id=3477
20122        some US-centric date formats not parsed by JavaScript (clock at news8austin.com)
20123
20124        -relevant tests:
20125               mozilla/ecma_3/Date/15.9.5.5.js 
20126               layout-tests/fast/js/date-parse-test.html
20127
20128        Reviewed by darin.
20129
20130        * kjs/date_object.cpp:
20131        (formatLocaleDate):
20132        (day):
20133        (dayFromYear):
20134        (daysInYear):
20135        (timeFromYear):
20136        (yearFromTime):
20137        (weekDay):
20138        (timeZoneOffset):
20139        (DateProtoFuncImp::call):
20140        (DateObjectImp::construct):
20141        (KJS::parseDate):
20142        (ymdhms_to_seconds):
20143        (KJS::makeTime):
20144        (findMonth):
20145        (KJS::KRFCDate_parseDate):
20146        * kjs/date_object.h:
20147        * tests/mozilla/expected.html: updated expected results to reflect fix
20148
201492005-07-01  Geoffrey Garen  <ggaren@apple.com>
20150
20151        -fixed <rdar://problem/4168186> JavaScript fails to throw exceptions 
20152        for invalid return statements
20153        
20154        relevant tests:
20155            ecma/Statements/12.9-1-n.js
20156            ecma_2/Exceptions/lexical-052.js
20157            ecma_2/Exceptions/statement-009.js
20158
20159        Reviewed by sullivan.
20160
20161        * kjs/nodes.cpp:
20162        (ReturnNode::execute): now throws exception if return is not inside
20163        a function.
20164
20165        * tests/mozilla/expected.html: updated to reflect fix
20166
201672005-07-01  Geoffrey Garen  <ggaren@apple.com>
20168
20169        Reviewed by sullivan.
20170
20171        * tests/mozilla/expected.html: Updated test results for last fix.
20172
201732005-07-01  Geoffrey Garen  <ggaren@apple.com>
20174
20175        -fixed <rdar://problem/4168161> JavaScript fails to throw an exception 
20176        for invalid function calls
20177        
20178        Reviewed by sullivan.
20179
20180        Relevant mozilla test: ecma_3/Exceptions/regress-95101.js 
20181
20182        * kjs/nodes.cpp:
20183        (FunctionCallNode::evaluate): evaluate now checks for an exception
20184        after resolving a function name (in case the function is undefined)
20185
201862005-07-01  Eric Seidel  <eseidel@apple.com>
20187
20188        Reviewed by darin.
20189
20190        * kjs/interpreter.h:
20191        (KJS::Context::curStmtFirstLine): stub for compatibility with KDE
20192        * kjs/value.h:
20193        (KJS::Value::isValid): compatibility with KDE
20194        http://bugs.webkit.org/show_bug.cgi?id=3687
20195
201962005-07-01  Eric Seidel  <eseidel@apple.com>
20197
20198        Reviewed by darin.
20199
20200        * kjs/create_hash_table: rolled in changes from KDE, including
20201        -n <namespace> support from KDOM and support for newer comments
20202        http://bugs.webkit.org/show_bug.cgi?id=3771
20203
202042005-06-30  Geoffrey Garen  <ggaren@apple.com>
20205
20206        -rolled in KDE fix to <rdar://problem/4167660> JavaScript fails to 
20207        throw exceptions for invalid break/continue statements
20208
20209        No layout tests because it's already covered by the Mozilla suite
20210
20211        Reviewed by mjs.
20212
20213        * kjs/internal.h: LabelStack now tracks where you are relative to
20214        switch and iteration (loop) statements
20215        
20216        (KJS::LabelStack::LabelStack):
20217        (KJS::LabelStack::pushIteration):
20218        (KJS::LabelStack::popIteration):
20219        (KJS::LabelStack::inIteration):
20220        (KJS::LabelStack::pushSwitch):
20221        (KJS::LabelStack::popSwitch):
20222        (KJS::LabelStack::inSwitch):
20223
20224        * kjs/nodes.cpp: 
20225        These files were updated to use the new LabelStack:
20226        (DoWhileNode::execute): 
20227        (WhileNode::execute):
20228        (ForNode::execute):
20229        (ForInNode::execute):
20230        (SwitchNode::execute):
20231        
20232        These files were updated to throw exceptions for invalid
20233        break/continue statements:
20234        (BreakNode::execute): 
20235        (ContinueNode::execute):
20236
20237        * tests/mozilla/expected.html: Updated expected results to reflect fix
20238
202392005-06-30  Kevin Decker  <kdecker@apple.com>
20240
20241        Reviewed by rjw.
20242
20243        fixed: <rdar://problem/4166838> failed assertion in`Interpreter::lockCount() > 0
20244
20245        no layout test added; this is in the bindings code.
20246
20247        * bindings/objc/WebScriptObject.mm:
20248        (+[WebScriptObject _convertValueToObjcValue:KJS::originExecutionContext:Bindings::executionContext:Bindings::]): make sure to lock and unlock the interpreter around allocations. 
20249
202502005-06-29  Geoffrey Garen  <ggaren@apple.com>
20251
20252        Patch by Francisco Tolmasky <tolmasky@gmail.com>
20253
20254        - fixes http://bugs.webkit.org/show_bug.cgi?id=3667
20255        Core JavaScript 1.5 Reference:Objects:Array:forEach
20256
20257        See WebCore Changelog for layout tests added.
20258
20259        Reviewed by darin.
20260
20261        * kjs/array_object.cpp:
20262        (ArrayProtoFuncImp::call):
20263        * kjs/array_object.h:
20264        (KJS::ArrayProtoFuncImp::):
20265
202662005-06-29  Geoffrey Garen  <ggaren@apple.com>
20267
20268        Patch contributed by Oliver Hunt <ojh16@student.canterbury.ac.nz>
20269
20270        -fixed http://bugs.webkit.org/show_bug.cgi?id=3743
20271        Incorrect error message given for certain calls
20272
20273        See WebCore Changelog for layout test added.
20274
20275        Reviewed by mjs.
20276
20277        * kjs/object.cpp:
20278        (KJS::ObjectImp::defaultValue):
20279
202802005-06-29  Geoffrey Garen  <ggaren@apple.com>
20281
20282        Rolling out date patch from 6-28-05 because it breaks 
20283        fast/js/date-parse-test
20284
20285        * kjs/date_object.cpp:
20286        (formatLocaleDate):
20287        (DateProtoFuncImp::call):
20288        (DateObjectImp::construct):
20289        (KJS::parseDate):
20290        (ymdhms_to_seconds):
20291        (isSpaceOrTab):
20292        (KJS::KRFCDate_parseDate):
20293        * kjs/date_object.h:
20294        * tests/mozilla/expected.html:
20295
202962005-06-29  Geoffrey Garen  <ggaren@apple.com>
20297
20298        Reviewed by Darin.
20299
20300        -fixes http://bugs.webkit.org/show_bug.cgi?id=3750
20301        build fails with KJS_VERBOSE set
20302
20303        * kjs/nodes.cpp: changed debug print statement to use UString
20304        (VarDeclNode::evaluate):
20305        * kjs/reference.cpp: ditto
20306        (KJS::Reference::putValue):
20307
203082005-06-28  Geoffrey Garen  <ggaren@apple.com>
20309
20310        Patch contributed by Carsten Guenther <cguenther@gmail.com>.
20311
20312        -fixes http://bugs.webkit.org/show_bug.cgi?id=3477
20313        some US-centric date formats not parsed by JavaScript (clock at news8austin.com)
20314
20315        Reviewed by darin.
20316
20317        * kjs/date_object.cpp:
20318        (formatLocaleDate):
20319        (day):
20320        (dayFromYear):
20321        (daysInYear):
20322        (timeFromYear):
20323        (yearFromTime):
20324        (weekDay):
20325        (timeZoneOffset):
20326        (DateProtoFuncImp::call):
20327        (DateObjectImp::construct):
20328        (KJS::parseDate):
20329        (ymdhms_to_seconds):
20330        (KJS::makeTime):
20331        (findMonth):
20332        (KJS::KRFCDate_parseDate):
20333        * kjs/date_object.h:
20334        * tests/mozilla/expected.html: updated expected test results to reflect fix
20335
203362005-06-26  Maciej Stachowiak  <mjs@apple.com>
20337
20338        Reviewed by Darin.
20339
20340        - replace hash functions  with better ones
20341
20342        * JavaScriptCore.pbproj/project.pbxproj: Add new file to build.
20343        * kjs/interpreter_map.cpp:
20344        (KJS::InterpreterMap::computeHash): Use shared pointer hash.
20345        * kjs/pointer_hash.h: Added.
20346        (KJS::pointerHash): Pointer hash based on 32-bit mix and 64-bit mix hashes.
20347        * kjs/protected_values.cpp:
20348        (KJS::ProtectedValues::computeHash): Use shared pointer hash.
20349        * kjs/ustring.cpp:
20350        (KJS::UString::Rep::computeHash): Use SuperFastHash algorithm.
20351
203522005-06-22  Darin Adler  <darin@apple.com>
20353
20354        Change by Anders Carlsson.
20355        Reviewed by me.
20356
20357        - fixed <http://bugs.webkit.org/show_bug.cgi?id=3294>
20358          String.prototype.replace() fails with function as second param
20359
20360        * kjs/string_object.cpp: (replace): Added code to handle functions.
20361
20362        * tests/mozilla/expected.html: Updated since ecma_3/RegExp/regress-209067.js is fixed now.
20363
20364        * tests/mozilla/run-mozilla-tests: Fix a minor coding style issue that leads to a warning each
20365        time we run the tests.
20366
203672005-06-21  Adele Peterson  <adele@apple.com>
20368
20369        rolling out fix for http://bugs.webkit.org/show_bug.cgi?id=3293, since it caused layout test failures.
20370        fast/forms/element-by-name
20371        fast/loader/loadInProgress
20372
20373        * ChangeLog:
20374        * bindings/objc/objc_runtime.h:
20375        * bindings/objc/objc_runtime.mm:
20376        (ObjcFallbackObjectImp::hasProperty):
20377        * bindings/runtime_array.cpp:
20378        (RuntimeArrayImp::hasProperty):
20379        * bindings/runtime_array.h:
20380        * bindings/runtime_object.cpp:
20381        (RuntimeObjectImp::hasProperty):
20382        * bindings/runtime_object.h:
20383        * kjs/array_instance.h:
20384        * kjs/array_object.cpp:
20385        (ArrayInstanceImp::hasProperty):
20386        * kjs/function.cpp:
20387        (KJS::FunctionImp::hasProperty):
20388        (KJS::ActivationImp::hasProperty):
20389        * kjs/function.h:
20390        * kjs/object.cpp:
20391        (KJS::ObjectImp::hasProperty):
20392        * kjs/object.h:
20393        * kjs/object_object.cpp:
20394        (ObjectPrototypeImp::ObjectPrototypeImp):
20395        (ObjectProtoFuncImp::call):
20396        * kjs/object_object.h:
20397        (KJS::ObjectProtoFuncImp::):
20398        * kjs/string_object.cpp:
20399        (StringInstanceImp::hasProperty):
20400        * kjs/string_object.h:
20401        * tests/mozilla/expected.html:
20402
204032005-06-21  Darin Adler  <darin@apple.com>
20404
20405        * JavaScriptCore.pbproj/project.pbxproj: Switched to a build rule rather than a build phase for
20406        .y files -- this gets rid of the problem where modifying the .y file would not cause sufficient
20407        compilation.
20408
20409        * kjs/grammar_wrapper.cpp: Removed.
20410
204112005-06-21  Adele Peterson  <adele@apple.com>
20412
20413        Patch from Anders Carlsson <andersca@mac.com>, reviewed by Darin.
20414
20415        Fixed: <http://bugs.webkit.org/show_bug.cgi?id=3450>
20416        <rdar://problem/3881901> String.replace() method not working when regex pattern contains {n, m}
20417
20418        * pcre/pcre.c: (pcre_compile): Remember the last char length so it can be subtracted correctly if needed.
20419
204202005-06-21  Geoffrey Garen  <ggaren@apple.com>
20421
20422        - fixed <rdar://problem/4155532> 'delete' succeeds on functions
20423        - fixed <rdar://problem/4155049> javascript function named as "opener" doesn't get called because of window.opener property
20424        
20425        Reviewed by cblu.
20426
20427        * kjs/nodes.cpp:
20428        (FuncDeclNode::processFuncDecl): Functions now have DontDelete and Internal attributes set when appropriate.
20429
20430        Test cases:
20431        * tests/mozilla/expected.html: Updated for one new success.
20432        - see also test case added in WebCore.
20433
204342005-06-20  Maciej Stachowiak  <mjs@apple.com>
20435
20436        Reviewed by Darin(first pass) and Hyatt.
20437
20438        - fixed http://bugs.webkit.org/show_bug.cgi?id=3576
20439        (roll in support for "const" keyword from KDE tree)
20440        - make processVarDecls handle deletability of variables declared
20441        in an eval block the same as evaluate would
20442        - make eval() call processVarDecls - needed to match mozilla and
20443        to make the second change testable
20444
20445        I started with the KDE implementation of const but I ended up changing it a bit
20446        to avoid the use of a global variable. Now instead of the global variable it distinguishes
20447        const and var at the grammar level so the appropriate node can know the right kind of
20448        declaration.
20449
20450        Test cases:
20451        * tests/mozilla/expected.html: Updated for one new test that is
20452        failing - we used to bail on it entirely because it checks for
20453        const support before starting.
20454        - see also test cases added in WebCore
20455
20456        * kjs/grammar.y: Add rules for const declarations.
20457        * kjs/keywords.table: Add const keyword.
20458        * kjs/nodes.cpp:
20459        (VarDeclNode::VarDeclNode): Add parameter.
20460        (VarDeclNode::evaluate): Add const support.
20461        (VarDeclNode::processVarDecls): Add const support.
20462        (VarStatementNode::execute): Irrelevant change.
20463        (ForInNode::ForInNode): Tell our variable node that it's a variable.
20464        * kjs/nodes.h:
20465        (KJS::VarDeclNode::): Add declaration of type enum, extra constructor parameter.
20466        (KJS::VarStatementNode::VarStatementNode): Irrelevant change.
20467        * kjs/function.cpp:
20468        (KJS::GlobalFuncImp::call): Process var decls before evaluating.
20469
204702005-06-20  Maciej Stachowiak  <mjs@apple.com>
20471
20472        Patch from Mark Rowe <opendarwin.org@bdash.net.nz>, reviewed by me.
20473
20474        - fixed http://bugs.webkit.org/show_bug.cgi?id=3293
20475        
20476        Test cases added: 
20477        * tests/mozilla/expected.html: Updated for two fixed tests.
20478        - also added a layout test
20479
20480        * bindings/objc/objc_runtime.h:
20481        * bindings/objc/objc_runtime.mm:
20482        (ObjcFallbackObjectImp::hasOwnProperty):
20483        * bindings/runtime_array.cpp:
20484        (RuntimeArrayImp::hasOwnProperty):
20485        * bindings/runtime_array.h:
20486        * bindings/runtime_object.cpp:
20487        (RuntimeObjectImp::hasOwnProperty):
20488        * bindings/runtime_object.h:
20489        * kjs/array_instance.h:
20490        * kjs/array_object.cpp:
20491        (ArrayInstanceImp::hasOwnProperty):
20492        * kjs/function.cpp:
20493        (KJS::FunctionImp::hasOwnProperty):
20494        (KJS::ActivationImp::hasOwnProperty):
20495        * kjs/function.h:
20496        * kjs/object.cpp:
20497        (KJS::ObjectImp::hasProperty):
20498        (KJS::ObjectImp::hasOwnProperty):
20499        * kjs/object.h:
20500        (KJS::Object::hasOwnProperty):
20501        * kjs/object_object.cpp:
20502        (ObjectPrototypeImp::ObjectPrototypeImp):
20503        (ObjectProtoFuncImp::call):
20504        * kjs/object_object.h:
20505        (KJS::ObjectProtoFuncImp::):
20506        * kjs/string_object.cpp:
20507        (StringInstanceImp::hasOwnProperty):
20508        * kjs/string_object.h:
20509
205102005-06-18  Darin Adler  <darin@apple.com>
20511
20512        Reviewed by Eric Seidel.
20513
20514        * pcre/get.c: (pcre_get_substring): Fix some computations so this works for UTF-16.
20515        This is unused in the current JavaScriptCore, but still good to fix.
20516
205172005-06-18  Darin Adler  <darin@apple.com>
20518
20519        Change by Finlay Dobbie.
20520        Reviewed by me.
20521
20522        - fixed <http://bugs.webkit.org/show_bug.cgi?id=3331>
20523          10.3.9 Build Failure: NSString may not respond to `+stringWithCString:encoding:'
20524
20525        * bindings/objc/WebScriptObject.mm: (-[WebScriptObject stringRepresentation]):
20526        Undo change we did a while back to work around the gcc 3.3 compiler error.
20527        It no longer seems to happen, and the workaround code was 10.4-specific.
20528
205292005-06-16  Geoffrey Garen  <ggaren@apple.com>
20530
20531        Fixed: <rdar://problem/4151759> 'delete' fails on variables declared inside 'eval' statements.
20532
20533        Reviewed by cblu.
20534
20535        * kjs/context.h:
20536        (KJS::ContextImp::codeType): Added code type accessor for execution context objects.
20537        * kjs/internal.cpp:
20538        (ContextImp::ContextImp): Reflects change to ContextImp::codeType.
20539        * kjs/nodes.cpp:
20540        (VarDeclNode::evaluate): Added separate code path for variable declarations inside 'eval' statements.
20541        * tests/mozilla/expected.html: Updated expected test results to reflect fix.
20542
205432005-06-14  Geoffrey Garen  <ggaren@apple.com>
20544
20545        Updated expected.html to reflect fix to <rdar://problem/4147745>.
20546
20547        Reviewed by cblu.
20548
20549        * tests/mozilla/expected.html:
20550
205512005-06-14  Geoffrey Garen  <ggaren@apple.com>
20552
20553        Fixed: <rdar://problem/4147745> JavaScript discards locally defined "arguments" property
20554
20555        No layout tests added because this change fixes existing tests:
20556        ecma/ExecutionContexts/10.1.6.js
20557        ecma_3/Function/regress-94506.js
20558        js1_4/Functions/function-001.js
20559
20560        Reviewed by cblu.
20561
20562        * kjs/function.cpp:
20563        (KJS::ActivationImp::get): get now checks for an "arguments" property defined in the local variable object
20564        before trying to return the built-in arguments array.
20565        
20566        * kjs/function.h: ActivationImp::put no longer overrides ObjectImp::put
20567
205682005-06-10  Darin Adler  <darin@apple.com>
20569
20570        Change by Mark Rowe <opendarwin.org@bdash.net.nz>.
20571        Reviewed by me.
20572
20573        - further improvements to exception file/line number fix
20574
20575        * kjs/nodes.h: Added setExceptionDetailsIfNeeded function.
20576        * kjs/nodes.cpp: Updated macros to call the new setExceptionDetailsIfNeeded function.
20577        (Node::setExceptionDetailsIfNeeded): Added.
20578
205792005-06-09  Darin Adler  <darin@apple.com>
20580
20581        Change by Mark Rowe <opendarwin.org@bdash.net.nz>
20582        Reviewed by me.
20583
20584        * kjs/nodes.cpp: Get rid of unneeded this->.
20585
205862005-06-08  Maciej Stachowiak  <mjs@apple.com>
20587
20588        Change by Mark Rowe <opendarwin.org@bdash.net.nz>
20589        Reviewed by me.
20590
20591        - fixed http://bugs.webkit.org/show_bug.cgi?id=3327
20592        (Exception When Setting Style to Invalid Value Lacks Line/File Information)
20593
20594        * kjs/nodes.cpp: Include source file and line number when making exception in
20595        KJS_CHECKEXCEPTIONVALUE.
20596
205972005-06-07  Darin Adler  <darin@apple.com>
20598
20599        Change by Toby Peterson <toby@opendarwin.org>.
20600        Reviewed by me.
20601
20602        * JavaScriptCore.pbproj/project.pbxproj: Allow bison 2.0, which generates the file
20603        with a different name.
20604
206052005-06-07  Darin Adler  <darin@apple.com>
20606
20607        Change by Toby Peterson <toby@opendarwin.org>.
20608        Reviewed by me.
20609
20610        * kjs/grammar.y: Remove bogus extra line from grammar.y. Toby got this change from KDE KJS.
20611
206122005-06-06  Darin Adler  <darin@apple.com>
20613
20614        * tests/mozilla/run-mozilla-tests: Wrote a perl version of this so we don't require
20615        the "jst" tool to run the tests.
20616
206172005-06-04  Darin Adler  <darin@apple.com>
20618
20619        Reviewed by Maciej.
20620
20621        - add libicu headers
20622
20623        * JavaScriptCore.pbproj/project.pbxproj: Added icu directory to header search path.
20624
20625        * icu/README: Added.
20626        * icu/unicode/platform.h: Added.
20627        * icu/unicode/uchar.h: Added.
20628        * icu/unicode/uconfig.h: Added.
20629        * icu/unicode/umachine.h: Added.
20630        * icu/unicode/urename.h: Added.
20631        * icu/unicode/utf.h: Added.
20632        * icu/unicode/utf16.h: Added.
20633        * icu/unicode/utf8.h: Added.
20634        * icu/unicode/utf_old.h: Added.
20635        * icu/unicode/utypes.h: Added.
20636        * icu/unicode/uversion.h: Added.
20637
206382005-05-19  Darin Adler  <darin@apple.com>
20639
20640        Reviewed by Maciej.
20641        
20642        - turned off exceptions and RTTI; seems to cut JavaScriptCore code size by about 22%
20643
20644        * JavaScriptCore.pbproj/project.pbxproj: Turn off exceptions and RTTI for both
20645        the framework and testkjs tool.
20646
206472005-05-18  Darin Adler  <darin@apple.com>
20648
20649        Reviewed by Maciej.
20650
20651        - got rid of code that depended on RTTI
20652
20653        * kjs/collector.cpp:
20654        (KJS::className): Added. Gets class name in a KJS way, rather than a C++ RTTI way.
20655        (KJS::Collector::rootObjectClasses): Use className instead of typeid names.
20656
206572005-05-18  Darin Adler  <darin@apple.com>
20658
20659        Reviewed by Maciej.
20660
20661        - fix a failure seen in the Mozilla JavaScript tests where a live object was garbage-collected
20662          when the only reference to it was in an argList on the stack
20663
20664        * kjs/list.h: Moved the operator= function into the .cpp file since it's too big to be
20665        a good choice to inline.
20666        * kjs/list.cpp: (KJS::List::operator=): Moved this formerly-inline function into a separate
20667        file and added missing code to update valueRefCount. It's the latter that fixes the bug.
20668
206692005-05-16  Darin Adler  <darin@apple.com>
20670
20671        Reviewed by Adele.
20672
20673        - fixed issues preventing us from compiling with newer versions of gcc 4.0
20674
20675        * kjs/ustring.cpp:
20676        (KJS::operator==): Remove redundant and illegal KJS:: prefix on this function's definition.
20677        (KJS::operator<): Ditto.
20678        (KJS::compare): Ditto.
20679
206802005-05-09  Darin Adler  <darin@apple.com>
20681
20682        Reviewed by John.
20683
20684        - turn on conservative GC unconditionally and start on SPI changes to
20685          eliminate the now-unneeded smart pointers since we don't ref count any more
20686
20687        * kjs/value.h: Removed macros to turn conservative GC on and off.
20688        Removed ref and deref functions.
20689        (KJS::ValueImp::ValueImp): Removed non-conservative-GC code path.
20690        (KJS::ValueImp::isUndefined): Added. New SPI to make it easier to deal with ValueImp directly.
20691        (KJS::ValueImp::isNull): Ditto.
20692        (KJS::ValueImp::isBoolean): Ditto.
20693        (KJS::ValueImp::isNumber): Ditto.
20694        (KJS::ValueImp::isString): Ditto.
20695        (KJS::ValueImp::isObject): Ditto.
20696        (KJS::Value::Value): Removed non-conservative-GC code path and made constructor no
20697        longer explicit so we can quietly create Value wrappers from ValueImp *; inexpensive with
20698        conservative GC and eases the transition.
20699        (KJS::Value::operator ValueImp *): Added. Quietly creates ValueImp * from Value.
20700        (KJS::ValueImp::marked): Removed non-conservative-GC code path.
20701
20702        * kjs/value.cpp:
20703        (KJS::ValueImp::mark): Removed non-conservative-GC code path.
20704        (KJS::ValueImp::isUndefinedOrNull): Added. New SPI to make it easier to deal with ValueImp directly.
20705        (KJS::ValueImp::isBoolean): Ditto.
20706        (KJS::ValueImp::isNumber): Ditto.
20707        (KJS::ValueImp::isString): Ditto.
20708        (KJS::ValueImp::asString): Ditto.
20709        (KJS::ValueImp::isObject): Ditto.
20710        (KJS::undefined): Ditto.
20711        (KJS::null): Ditto.
20712        (KJS::boolean): Ditto.
20713        (KJS::string): Ditto.
20714        (KJS::zero): Ditto.
20715        (KJS::one): Ditto.
20716        (KJS::two): Ditto.
20717        (KJS::number): Ditto.
20718
20719        * kjs/object.h: Made constructor no longer explicit so we can quietly create Object
20720        wrappers from ObjectImp *; inexpensive with conservative GC and eases the transition.
20721        (KJS::Object::operator ObjectImp *): Added. Quietly creates ObjectImp * from Object.
20722        (KJS::ValueImp::isObject): Added. Implementation of new object-related ValueImp function.
20723        (KJS::ValueImp::asObject): Ditto.
20724
20725        * kjs/object.cpp:
20726        (KJS::ObjectImp::setInternalValue): Remove non-conservative-GC code path.
20727        (KJS::ObjectImp::putDirect): Ditto.
20728        (KJS::error): Added. Function in the new SPI style to create an error object.
20729
20730        * kjs/internal.h: Added the new number-constructing functions as friends of NumberImp.
20731        There may be a more elegant way to do this later; what's important now is the new SPI.
20732
20733        * kjs/collector.h:  Remove non-conservative-GC code path and also take out some
20734        unneeded APPLE_CHANGES.
20735
20736        * bindings/runtime_root.cpp:
20737        (KJS::Bindings::addNativeReference): Remove non-conservative-GC code path.
20738        (KJS::Bindings::removeNativeReference): Ditto.
20739        (RootObject::removeAllNativeReferences): Ditto.
20740        * bindings/runtime_root.h:
20741        (KJS::Bindings::RootObject::~RootObject): Ditto.
20742        (KJS::Bindings::RootObject::setRootObjectImp): Ditto.
20743        * kjs/collector.cpp:
20744        (KJS::Collector::allocate): Ditto.
20745        (KJS::Collector::collect): Ditto.
20746        (KJS::Collector::numGCNotAllowedObjects): Ditto.
20747        (KJS::Collector::numReferencedObjects): Ditto.
20748        (KJS::Collector::rootObjectClasses): Ditto.
20749        * kjs/internal.cpp:
20750        (NumberImp::create): Ditto.
20751        (InterpreterImp::globalInit): Ditto.
20752        (InterpreterImp::globalClear): Ditto.
20753        * kjs/list.cpp:
20754        (KJS::List::markProtectedLists): Ditto.
20755        (KJS::List::clear): Ditto.
20756        (KJS::List::append): Ditto.
20757        * kjs/list.h:
20758        (KJS::List::List): Ditto.
20759        (KJS::List::deref): Ditto.
20760        (KJS::List::operator=): Ditto.
20761        * kjs/protect.h:
20762        (KJS::gcProtect): Ditto.
20763        (KJS::gcUnprotect): Ditto.
20764
207652005-05-09  Chris Blumenberg  <cblu@apple.com>
20766
20767        Workaround gcc 3.3 internal compiler errors.
20768
20769        Reviewed by darin.
20770
20771        * bindings/objc/WebScriptObject.mm:
20772        (-[WebScriptObject stringRepresentation]): call [NSString stringWithCString:encoding] rather than using @""
20773
207742005-05-09  Darin Adler  <darin@apple.com>
20775
20776        * Makefile.am: Don't set up PBXIntermediatesDirectory explicitly;
20777        Not needed to make builds work, spews undesirable error messages too.
20778
207792005-05-06  Darin Adler  <darin@apple.com>
20780
20781        Reviewed by Maciej.
20782
20783        - make building multiple trees with make work better
20784
20785        * Makefile.am: Set up Xcode build directory before invoking xcodebuild.
20786
207872005-05-04  Maciej Stachowiak  <mjs@apple.com>
20788
20789        Reviewed by Darin.
20790
20791        <rdar://problem/4086570> Crash in JavaScriptCore with RSS Visualizer
20792        
20793        * kjs/internal.cpp:
20794        (InterpreterImp::mark): mark staticNaN, it is usually protected by the Number
20795        prototype but there is a small window where it can get collected.
20796
207972005-05-04  Darin Adler  <darin@apple.com>
20798
20799        Reviewed by Dave Hyatt.
20800
20801        - another gcc-4.0-related fix
20802
20803        * bindings/runtime_root.h: Take off extra namespace prefixes that apparently cause problems
20804        compiling with gcc 4.0, although I have not observed the problems.
20805
208062005-05-04  Darin Adler  <darin@apple.com>
20807
20808        Reviewed by Dave Hyatt.
20809
20810        - fixed build rules to match other projects
20811
20812        * JavaScriptCore.pbproj/project.pbxproj: Set deployment target to 10.3 in the build styles.
20813        When built without a build style (by Apple B&I) we want to get the target from the
20814        environment. But when built with a build style (by Safari engineers and others), we want
20815        to use 10.3.
20816
20817        * Makefile.am: Took out extra parameters that make command-line building different from
20818        Xcode building. Now that this is fixed, you should not get a full rebuild if you switch
20819        from command line to Xcode or back.
20820
208212005-05-04  Maciej Stachowiak  <mjs@apple.com>
20822
20823        - revert presumably accidental change to mozilla JS test expected results, this
20824        was making the tests fail.
20825
20826        * tests/mozilla/expected.html:
20827
208282005-05-03  Richard Williamson   <rjw@apple.com>
20829
20830        Fixed <rdar://problem/4102644> Crash in LiveConnect below KJS::Bindings::JavaInstance::stringValue() const
20831
20832        Correctly handle accessing nil objects from a Java object array.
20833
20834        Reviewed by John.
20835
20836        * bindings/jni/jni_runtime.cpp:
20837        (JavaArray::valueAt):
20838
208392005-05-01  Darin Adler  <darin@apple.com>
20840
20841        - move to Xcode native targets and stop checking in generated files
20842
20843        * JavaScriptCore.pbproj/project.pbxproj: Updated to use native targets and generate all the generated
20844        files, so we don't have to check them in any more.
20845        * Info.plist: Added. Native targets use a separate file for this.
20846
20847        * Makefile.am: Removed pcre and kjs SUBDIRS. Also removed code that deleted the embedded copy of this
20848        framework, since we haven't been embedding it for some time.
20849
20850        * kjs/grammar_wrapper.cpp: Added. Shell used to compile grammar.cpp since we can't add a generated file
20851        easily to the list of files to be compiled.
20852
20853        * kjs/.cvsignore: Removed.
20854        * kjs/Makefile.am: Removed.
20855        * kjs/array_object.lut.h: Removed.
20856        * kjs/date_object.lut.h: Removed.
20857        * kjs/grammar.cpp: Removed.
20858        * kjs/grammar.cpp.h: Removed.
20859        * kjs/grammar.h: Removed.
20860        * kjs/lexer.lut.h: Removed.
20861        * kjs/math_object.lut.h: Removed.
20862        * kjs/number_object.lut.h: Removed.
20863        * kjs/string_object.lut.h: Removed.
20864        * pcre/.cvsignore: Removed.
20865        * pcre/Makefile.am: Removed.
20866        * pcre/chartables.c: Removed.
20867
208682005-04-28  Darin Adler  <darin@apple.com>
20869
20870        Reviewed by Dave Harrison.
20871
20872        - fixed problems preventing us from compiling with gcc 4.0
20873
20874        * JavaScriptCore.pbproj/project.pbxproj: Removed -Wmissing-prototypes from
20875        WARNING_CPLUSPLUSFLAGS since it's now a C-only warning.
20876
20877        * bindings/jni/jni_jsobject.cpp:
20878        (JSObject::getSlot): Changed some %d to %ld where the parameters where long ints.
20879        (JSObject::setSlot): Ditto.
20880        * bindings/jni/jni_utility.cpp:
20881        (KJS::Bindings::getJavaVM): Ditto.
20882        (KJS::Bindings::getJNIEnv): Ditto.
20883        * bindings/objc/objc_utility.mm: Fixed include of <JavascriptCore/internal.h> that needed the
20884        letter "S" capitalized.
20885        * kjs/bool_object.cpp: (BooleanProtoFuncImp::call): Rearranged how this function returns to
20886        avoid incorrect gcc 4.0 warning.
20887        * kjs/collector.cpp: (KJS::Collector::markStackObjectsConservatively): Changed code to check
20888        the alignment of the passed-in pointers to only require pointer-level alignment, not 8-byte alignment.
20889        Prevents a crash on garbage collect when compiled with gcc 4.0.
20890        * kjs/nodes.cpp:
20891        (WhileNode::execute): Added a redundant return after an infinite loop to work around incorrect gcc 4.0 warning.
20892        (ForNode::execute): Ditto.
20893        (SwitchNode::execute):Rearranged how this function returns to avoid incorrect gcc 4.0 warning.
20894        (LabelNode::execute): Ditto.
20895        * kjs/string_object.cpp: (replace): Ditto.
20896
208972005-04-26  Richard Williamson   <rjw@apple.com>
20898
20899        Fixed <rdar://problem/4098713> Scripting API is incompatible with Mozilla
20900        
20901        We were incompatible with Mozilla's implementation of the scripting APIs in
20902        two ways:
20903
20904        Their NPN_SetException has the following signature:
20905
20906            void NPN_SetException(NPObject *npobj, const NPUTF8 *message);
20907
20908        ours has:
20909
20910            void NPN_SetException (NPObject * npobj, const NPString *message);
20911
20912        Also, they expect the string returned from NPN_UTF8FromIdentifier() to be freed by caller.
20913        We do not.
20914
20915        I changed both behaviors to match Mozilla.
20916
20917        Reviewed by Chris.
20918
20919        * bindings/NP_jsobject.cpp:
20920        (_NPN_SetException):
20921        * bindings/npruntime.cpp:
20922        (_NPN_UTF8FromIdentifier):
20923        (_NPN_IntFromIdentifier):
20924        (_NPN_SetExceptionWithUTF8):
20925        * bindings/npruntime.h:
20926        * bindings/npruntime_impl.h:
20927
209282005-04-26  Maciej Stachowiak  <mjs@apple.com>
20929
20930        Reviewed by Chris.
20931
20932        <rdar://problem/4092136> reproducible crash in KJS::kjs_fast_realloc loading maps.google.com
20933        
20934        * kjs/string_object.cpp:
20935        (StringObjectFuncImp::call): Allocate adopted ustring buffer properly.
20936
209372005-04-22  Darin Adler  <darin@apple.com>
20938
20939        Reviewed by Maciej.
20940
20941        * kjs/ustring.cpp: (KJS::UString::UTF8String): Fix off-by-one error in surrogate pair logic.
20942
209432005-04-22  Darin Adler  <darin@apple.com>
20944
20945        Reviewed by John.
20946
20947        - fixed <rdar://problem/4090046> JavaScript throw statement causes parse error when no semicolon is present
20948
20949        * kjs/grammar.y: Added an additional rule for throw like the ones we have for all the other semicolon rules.
20950        Not sure why we missed this one earlier.
20951
20952        * kjs/grammar.cpp: Regenerated.
20953
20954=== JavaScriptCore-412.1 ===
20955
209562005-04-20  Darin Adler  <darin@apple.com>
20957
20958        Reviewed by Maciej.
20959
20960        - speedups, total 12% on JavaScript iBench
20961
20962        I ran the benchmark under Shark and followed its advice a lot, mainly.
20963
20964        * kjs/collector.cpp:
20965        (KJS::Collector::allocate): Take out special case for 0; costing speed but unexercised.
20966        Use numLiveObjectsAtLastCollect instead of numAllocationsSinceLastCollect so we don't
20967        have to bump it each time we call allocate. Put numLiveObjects into a local variable to
20968        cut down on global variable accesses. Make "next" cell pointer be a byte offset rather
20969        than a pointer so we don't need a special case for NULL. Allow freeList to point to some
20970        bogus item when the entire block is full rather than going out of our way to make it
20971        point to NULL.
20972        (KJS::Collector::markProtectedObjects): Get table size and pointer into locals outside
20973        the loop to avoid re-loading them over and over again.
20974        (KJS::Collector::collect): Put numLiveObjects into a local variable to cut down on global
20975        variable accesses. Make "next" cell pointer be a byte offset as above. Put numLiveObjects
20976        into a local variable to cut down on global variable accesses. Set numLiveObjectsAtLastCollect
20977        rather than numAllocationsSinceLastCollect.
20978        (KJS::Collector::numReferencedObjects): Get table size and pointer into locals outside
20979        the loop to avoid re-loading them over and over again.
20980        (KJS::Collector::rootObjectClasses): Ditto.
20981
20982        * kjs/internal.h: Make Value be a friend of NumberImp so it can construct number objects
20983        directly, avoiding the conversion from Number to Value.
20984
20985        * kjs/internal.cpp: (StringImp::toObject): Don't use Object::dynamicCast, because we know
20986        the thing is an object and we don't want to do all the extra work; just cast directly.
20987
20988        * kjs/list.cpp: (KJS::List::List): Construct valueRefCount in a way that avoids the need for
20989        a branch -- in the hot case this just meant avoiding checking a variable we just set to false.
20990
20991        * kjs/lookup.cpp: (keysMatch): Marked this inline.
20992
20993        * kjs/nodes.cpp: Disabled KJS_BREAKPOINT, to avoid calling hitStatement all the time.
20994        (BooleanNode::evaluate): Make a Value directly, rather than making a Boolean which is converted
20995        into a Value.
20996        (NumberNode::evaluate): Ditto.
20997        (StringNode::evaluate): Ditto.
20998        (ArrayNode::evaluate): Ditto.
20999        (FunctionCallNode::evaluate): Use new inline baseIfMutable to avoid unnecessary getBase function.
21000        Also just use a pointer for func, rather than an Object.
21001        (PostfixNode::evaluate): Change code so that it doesn't make an excess Number, and so that it
21002        passes a "known to be integer" boolean in, often avoiding a conversion from floating point to
21003        integer and back.
21004        (DeleteNode::evaluate): Make a Value directly.
21005        (TypeOfNode::evaluate): Use new inline baseIfMutable and make Value directly.
21006        (PrefixNode::evaluate): Change code so that it doesn't make an excess Number, and so that it
21007        passes a "known to be integer" boolean in, often avoiding a conversion from floating point to
21008        integer and back.
21009        (UnaryPlusNode::evaluate): Make a Value directly.
21010        (NegateNode::evaluate): Change code so that it doesn't make an excess Number, and so that it
21011        passes a "known to be integer" boolean in, often avoiding a conversion from floating point to
21012        integer and back.
21013        (BitwiseNotNode::evaluate): Make a Value directly.
21014        (LogicalNotNode::evaluate): Ditto.
21015        (ShiftNode::evaluate): Don't convert to a double before making a Value.
21016        (RelationalNode::evaluate): Make a Value directly.
21017        (EqualNode::evaluate): Ditto.
21018        (BitOperNode::evaluate): Ditto.
21019        (AssignNode::evaluate): Make a Value directly. Change code so that it passes a "known to be integer"
21020        boolean in, often avoiding a conversion from floating point to integer and back.
21021        (VarDeclNode::evaluate): Make a Value directly.
21022        (ForNode::execute): Remove unused local variable.
21023
21024        * kjs/operations.h:
21025        (KJS::isNaN): Inlined.
21026        (KJS::isInf): Ditto.
21027        (KJS::isPosInf): Ditto.
21028        (KJS::isNegInf): Ditto.
21029
21030        * kjs/operations.cpp: Change isNaN, isInf, isPosInf, and isNegInf to be inlines.
21031        (KJS::equal): Rewrite to avoid creating values and recursing back into the function.
21032        (KJS::relation): Rearranged code so that we don't need explicit isNaN checks.
21033        (KJS::add): Changed code to make Value directly, and so that it passes a "known to be integer"
21034        boolean in, often avoiding a conversion from floating point to integer and back.
21035        (KJS::mult): Ditto.
21036
21037        * kjs/property_map.cpp:
21038        (KJS::PropertyMap::~PropertyMap): Get size and entries pointer outside loop to avoid
21039        re-getting them inside the loop.
21040        (KJS::PropertyMap::clear): Ditto. Clear value pointer in addition to key, so we can just
21041        look at the value pointer in the mark function.
21042        (KJS::PropertyMap::get): Get sizeMask and entries pointer outside loop to avoid
21043        re-getting them inside the loop.
21044        (KJS::PropertyMap::put): Ditto.
21045        (KJS::PropertyMap::insert): Ditto.
21046        (KJS::PropertyMap::remove): Ditto.
21047        (KJS::PropertyMap::mark): Get size and entries pointer outside loop to avoid
21048        re-getting them inside the loop. Don't bother checking key for 0, since we already have
21049        to check value for 0. (Also had to change clear() to set value to 0.)
21050        (KJS::PropertyMap::addEnumerablesToReferenceList): Get size and entries pointer outside
21051        loop to avoid re-getting them inside the loop.
21052        (KJS::PropertyMap::addSparseArrayPropertiesToReferenceList): Ditto.
21053        (KJS::PropertyMap::save): Ditto.
21054
21055        - other changes
21056
21057        * kjs/protected_values.h: Remove unneeded class name qualifiers.
21058
21059        * kjs/reference.h:
21060        (KJS::Reference::baseIfMutable): New inline function: replaces isMutable().
21061        (KJS::Reference::Reference): Inlined.
21062        * kjs/reference.cpp:
21063        (KJS::Reference::getValue): Rewrite to not use getBase.
21064        (KJS::Reference::putValue): Ditto.
21065        (KJS::Reference::deleteValue): Dittol
21066
21067        * kjs/simple_number.h:
21068        (KJS::SimpleNumber::integerFits): Added. For use when the parameter is known to be integral.
21069
21070        * kjs/string_object.cpp: (StringProtoFuncImp::call): Create the number without first converting
21071        to double in various cases that involve integers.
21072
21073        * kjs/ustring.h:
21074        (KJS::UString::attach): Inlined.
21075        (KJS::UString::release): Inlined.
21076        * kjs/ustring.cpp:
21077        (KJS::UString::find): Get first character outside the loop instead of re-fetching it each time.
21078
21079        * kjs/value.cpp:
21080        (Value::Value): Added overloads for all the various specific types of values, so you don't have
21081        to convert from, say, Number to Value, just to create one.
21082        (Number::Number): Added an overload that takes a boolean to indicate the number is already
21083        known to be an integer.
21084
21085        * kjs/value.h: Added more Value constructors, added a version of toNumber that returns
21086        a boolean to indicate if the number is known to be an integer (because it was a "simple number").
21087        (KJS::ValueImp::marked): Inlined.
21088        (KJS::ValueImp::dispatchType): Inlined.
21089        (KJS::ValueImp::dispatchToPrimitive): Inlined.
21090        (KJS::ValueImp::dispatchToBoolean): Inlined.
21091        (KJS::ValueImp::dispatchToNumber): Inlined.
21092        (KJS::ValueImp::dispatchToString): Inlined.
21093        (KJS::ValueImp::dispatchToUInt32): Inlined.
21094
210952005-04-14  Maciej Stachowiak  <mjs@apple.com>
21096
21097        - make fast_malloc.h a private header, not project
21098
21099        * JavaScriptCore.pbproj/project.pbxproj:
21100
211012005-04-12  Maciej Stachowiak  <mjs@apple.com>
21102
21103        Reviewed by Richard.
21104
21105        <rdar://problem/4089734> JavaScript iBench can be sped up ~10% with custom allocator
21106
21107        - use custom single-threaded malloc for all non-GC JavaScriptCore
21108        allocations, for a 9.1% speedup on JavaScript iBench
21109        
21110        * JavaScriptCore.pbproj/project.pbxproj:
21111        * kjs/collector.cpp:
21112        (KJS::Collector::allocate): Use dlmalloc to allocate the collector blocks.
21113        (KJS::Collector::collect): And dlfree to free it.
21114        * kjs/fast_malloc.cpp: Added, just the standard dlmalloc here.
21115        * kjs/fast_malloc.h: Added. Declarations for the functions. Also added a handy
21116        macro to give a class custom operator new/delete
21117        * kjs/identifier.cpp:
21118        (KJS::Identifier::add): Use dlmalloc/dlfree.
21119        * kjs/nodes.h: make nodes KJS_FAST_ALLOCATED.
21120        * kjs/property_map.cpp:
21121        (KJS::PropertyMap::~PropertyMap): Use dlmalloc/dlfree.
21122        (KJS::PropertyMap::rehash): ditto
21123        * kjs/scope_chain.h:
21124        * kjs/ustring.cpp:
21125        (KJS::UString::Rep::createCopying): New named constructor that copies a passed-in
21126        buffer, to hide allocation details from webcore.
21127        (KJS::UString::UString): use createCopying when appropriate.
21128        (KJS::UString::Rep::destroy): Use dlmalloc/dlfree.
21129        (KJS::UString::expandedSize): likewise
21130        (KJS::UString::expandCapacity): likewise
21131        (KJS::UString::expandPreCapacity): likewise
21132        (KJS::UString::spliceSubstringsWithSeparators): likewise
21133        (KJS::UString::append): likewise
21134        (KJS::UString::operator=): likewise
21135        (KJS::UString::detach): likewise
21136        * kjs/ustring.h: make UString and UString::Rep KJS_FAST_ALLOCATED.
21137
211382005-04-11  Maciej Stachowiak  <mjs@apple.com>
21139
21140        Reviewed by John.
21141
21142        <rdar://problem/4086819> Avoid using protect count hash table so much for 5.6% JS iBench speedup
21143
21144        - Avoid using protected values hash for the two most common cases
21145        - Bump up ListImp high water mark, new testing shows 508 ListImps are
21146        created during JS iBench.
21147
21148        Net result is a 5.6% speedup on JavaScript iBench
21149        
21150        * kjs/collector.cpp:
21151        (KJS::Collector::collect): mark protected lists as appropriate.
21152        * kjs/context.h:
21153        * kjs/list.cpp:
21154        (KJS::ListImp::markValues): Moved implementation from List::markValues
21155        (KJS::List::markProtectedLists): Implemented - scan pool and overflow
21156        list.
21157        (KJS::allocateListImp): link lists outside the pool into a separate
21158        doubly linked list to be able to mark protected lists
21159        (KJS::deallocateListImp): do the corresponding delinking
21160        (KJS::List::derefValues): do nothing in conservative GC mode
21161        (KJS::List::refValues): do nothing in conservative GC mode
21162        (KJS::List::markValues): call ListImp version
21163        (KJS::List::append):
21164        * kjs/list.h:
21165
21166=== Safari-412 ===
21167
21168=== Safari-411 ===
21169
21170=== Safari-410 ===
21171
21172=== Safari-409 ===
21173
21174=== Safari-408 ===
21175
21176=== Safari-407 ===
21177
211782005-03-16  Jens Alfke  <jens@apple.com>
21179
21180        Reviewed by Kevin.
21181
21182        Fix for <rdar://problem/4025212> "REGRESSION (163-164): search not performed correctly; united.com"
21183        JavaScript unescape("") was returning a messed-up String object that appeared identical to an empty string, but would in some cases act as 'null' when passed to native functions, in this case the Option() constructor.
21184        In the implementation of unescape, the UString holding the result was not initialized to "", so it started out as a null string. If nothing was appended to it, it remained null, resulting in a JavaScript String object with some bad behaviors (namely, converting it to a DOMStringImpl results in a NULL pointer.)
21185        Darin says this regression occurred when we replaced our own implementation of unescape() with code from KJS.
21186
21187        * kjs/function.cpp:
21188        (KJS::GlobalFuncImp::call):
21189
211902005-03-15  Richard Williamson   <rjw@apple.com>
21191
21192        Fixed <rdar://problem/4053276> WebScripting protocol in WebKit cannot convert Boolean in Javascript to BOOL in Objective-C
21193
21194        Added JavaScript boolean to type that can be converted to
21195        ObjC scalar parameters.
21196
21197        Reviewed by Ken Kocienda.
21198
21199        * bindings/objc/objc_utility.mm:
21200        (KJS::Bindings::convertValueToObjcValue):
21201
21202=== Safari-406 ===
21203
21204=== Safari-405 ===
21205
21206=== Safari-403 ===
21207
21208=== Safari-402 ===
21209
21210=== Safari-401 ===
21211
21212=== Safari-400 ===
21213
21214=== Safari-188 ===
21215
212162005-02-21  Darin Adler  <darin@apple.com>
21217
21218        * kjs/date_object.cpp: (timetUsingCF): Fixed indenting.
21219
212202005-02-17  Richard Williamson   <rjw@apple.com>
21221
21222        Fixed <rdar://problem/4003251> Safari crashed at www.icelandair.com in LiveConnect code converting a Java object to a string
21223
21224        Added nil check.
21225
21226        Reviewed by John Sullivan.
21227
21228        * bindings/jni/jni_runtime.cpp:
21229        (JavaField::valueFromInstance):
21230
21231=== Safari-187 ===
21232
212332005-02-11  Richard Williamson   <rjw@apple.com>
21234
21235        Fixed <rdar://problem/3985118> DOM objects not being marshaled on JS->native calls
21236
21237        Re-factored how 'native' wrappers for JS objects are created.  The interpreter now
21238        creates these wrappers.  The WebCore subclass of the interpreter now overrides
21239        createLanguageInstanceForValue() and creates a DOM ObjC wrapper for DOM objects.
21240
21241        Reviewed by Ken.
21242
21243        * bindings/c/c_utility.cpp:
21244        (convertValueToNPVariant):
21245        * bindings/jni/jni_instance.cpp:
21246        (JavaInstance::invokeMethod):
21247        * bindings/jni/jni_objc.mm:
21248        (KJS::Bindings::dispatchJNICall):
21249        * bindings/jni/jni_runtime.cpp:
21250        (JavaField::valueFromInstance):
21251        (JavaArray::valueAt):
21252        * bindings/objc/WebScriptObject.mm:
21253        (-[WebScriptObject _setExecutionContext:KJS::Bindings::]):
21254        (+[WebScriptObject _convertValueToObjcValue:KJS::originExecutionContext:Bindings::executionContext:Bindings::]):
21255        * bindings/objc/WebScriptObjectPrivate.h:
21256        * bindings/objc/objc_utility.h:
21257        * bindings/objc/objc_utility.mm:
21258        (KJS::Bindings::convertObjcValueToValue):
21259        (KJS::Bindings::createObjcInstanceForValue):
21260        * bindings/runtime.cpp:
21261        (Instance::createBindingForLanguageInstance):
21262        (Instance::createRuntimeObject):
21263        (Instance::createLanguageInstanceForValue):
21264        * bindings/runtime.h:
21265        * kjs/interpreter.cpp:
21266        (Interpreter::createLanguageInstanceForValue):
21267        * kjs/interpreter.h:
21268
21269=== Safari-186 ===
21270
212712005-02-10  Darin Adler  <darin@apple.com>
21272
21273        "Reviewed" by Richard (he told me the file was obsolete).
21274
21275        - got rid of an obsolete file
21276
21277        * bindings/npsap.h: Removed.
21278
21279=== Safari-185 ===
21280
21281=== Safari-183 ===
21282
212832005-02-03  Richard Williamson   <rjw@apple.com>
21284
21285        Fixed <rdar://problem/3972905> CrashTracer: ...36 crashes at com.apple.WebCore: khtml::CSSStyleSelector::applyDeclarations + 120
21286
21287        Revert to old (and correct) behavior of returning runtime object
21288        when passed as a parameter, rather than it's corresponding DOM
21289        object.
21290
21291        Reviewed by Chris.
21292
21293        * bindings/objc/WebScriptObject.mm:
21294        (+[WebScriptObject _convertValueToObjcValue:KJS::originExecutionContext:Bindings::executionContext:Bindings::]):
21295
21296=== Safari-182 ===
21297
212982005-01-28  Richard Williamson   <rjw@apple.com>
21299
21300        Fixed <rdar://problem/3980389> JavaScript bindings access incorrect runtime object
21301
21302        Only use special 'back door' property to get the runtime object if thisObj isn't
21303        already a runtime object.
21304
21305        <gratuitous> Cleaned up a couple of strcmp on ClassInfo name.  Used == on
21306        ClassInfo pointer instead.
21307
21308        Reviewed by Chris.
21309
21310        * bindings/c/c_utility.cpp:
21311        (convertValueToNPVariant):
21312        * bindings/objc/WebScriptObject.mm:
21313        (+[WebScriptObject _convertValueToObjcValue:KJS::originExecutionContext:Bindings::executionContext:Bindings::]):
21314        * bindings/runtime_method.cpp:
21315        (RuntimeMethodImp::call):
21316
21317=== Safari-181 ===
21318
213192005-01-26  Richard Williamson   <rjw@apple.com>
21320
21321        Fixed <rdar://problem/3972522> (179-180) 40% slowdown on iBench JavaScript test
21322
21323        I added a member variable to ObjectImp.  This changed it's size and consequently
21324        hampered the optimizations built into the garbage collector.  Objects no longer
21325        fit within the allocators cell size, and thus allocation fell back to a slower
21326        allocator.
21327
21328        As a result of this fix I also dramatically cleaned up how runtime objects are
21329        accessed.  The path mostly *removes* code.
21330        
21331        Reviewed by Chris.
21332
21333        * bindings/runtime_method.cpp:
21334        (RuntimeMethodImp::call):
21335        * bindings/runtime_object.cpp:
21336        (RuntimeObjectImp::get):
21337        (RuntimeObjectImp::put):
21338        (RuntimeObjectImp::canPut):
21339        (RuntimeObjectImp::hasProperty):
21340        (RuntimeObjectImp::defaultValue):
21341        * bindings/runtime_object.h:
21342        * kjs/object.cpp:
21343        (KJS::ObjectImp::ObjectImp):
21344        * kjs/object.h:
21345
213462005-01-20  Darin Adler  <darin@apple.com>
21347
21348        Reviewed by me, changes by Han Ming Ong.
21349
21350        - <rdar://problem/3964302> SWB: A few files need to be updated to be compilable under GCC 4.0
21351
21352        * bindings/objc/WebScriptObjectPrivate.h: Make members public.
21353        * kjs/lookup.h: Change "value.h" to "object.h" because we need KJS::Object to compile a template.
21354
213552005-01-20  Richard Williamson   <rjw@apple.com>
21356
21357        Fixed <rdar://problem/3964634> undefined property value from binding seems to evaluate to true in an if statement
21358
21359        The comprehensive fix for this problem requires new API, as described in 3965326.  However,
21360        given that we can't add new API at this point, the 'ObjcFallbackObjectImp' will behave
21361        like and Undefined object if  invokeUndefinedMethodFromWebScript:withArguments: isn't
21362        implemented on the bound object.
21363
21364        Reviewed by Chris.
21365
21366        * bindings/objc/objc_runtime.h:
21367        * bindings/objc/objc_runtime.mm:
21368        (ObjcFallbackObjectImp::type):
21369        (ObjcFallbackObjectImp::implementsCall):
21370        (ObjcFallbackObjectImp::toBoolean):
21371        * bindings/testbindings.mm:
21372        (+[MyFirstInterface isSelectorExcludedFromWebScript:]):
21373        (+[MyFirstInterface isKeyExcludedFromWebScript:]):
21374
21375=== Safari-180 ===
21376
213772005-01-19  Richard Williamson   <rjw@apple.com>
21378
21379        Fixed <rdar://problem/3853676> Browser Crash when accessing CCWeb Progress Page - KJS::Bindings::convertValueToJValue
21380
21381        Fixed the following problems with LiveConnect that are demonstrated by the application
21382        described in 3853676.
21383
21384        1.  If a nil object is passed in an array from Java to JavaScript we will crash.
21385        2.  We sometimes will incorrectly attempt to access a generic JavaScript as a Java runtime object wrapper.
21386        3.  We will sometimes fail to find the correct static method ID.
21387
21388        Reviewed by Maciej.
21389
21390        * bindings/jni/jni_jsobject.cpp:
21391        (JSObject::convertJObjectToValue):
21392        (JSObject::listFromJArray):
21393        * bindings/jni/jni_runtime.cpp:
21394        (JavaField::valueFromInstance):
21395        (JavaField::setValueToInstance):
21396        * bindings/jni/jni_utility.cpp:
21397        (KJS::Bindings::getMethodID):
21398        (KJS::Bindings::convertValueToJValue):
21399        * bindings/runtime_array.h:
21400
214012005-01-18  Richard Williamson   <rjw@apple.com>
21402
21403        Fixed several issues all arising from analysis of plugin detection code at ifilm.com:
21404
21405        Fixed <rdar://problem/3958592> can't script plug-ins if plug-in is invoked with <object> element instead of <embed>
21406        Fixed <rdar://problem/3958597> <object> elements with IDs do not show up as named properties of the document
21407        Fixed <rdar://problem/3960973> DOM objects for plugin elements are not accessible
21408        Fixed <rdar://problem/3958601> need an additional class ID in WebCore for the Real plug-in
21409
21410        We now support accessing scriptable plugin objects that are specified with <applet>, <embed>, or <object>
21411        tags.  Also, if any of these elements are named they can be accessed from the document or window objects.
21412        Finally, DOM methods are properties will be forwarded appropriately for the plugin's root scriptable object.
21413
21414        Reviewed by Chris.
21415
21416        * bindings/objc/objc_instance.h:
21417        * bindings/objc/objc_instance.mm:
21418        (ObjcInstance::supportsSetValueOfUndefinedField):
21419        * bindings/runtime.h:
21420        (KJS::Bindings::Instance::supportsSetValueOfUndefinedField):
21421        * bindings/runtime_object.cpp:
21422        (RuntimeObjectImp::RuntimeObjectImp):
21423        (RuntimeObjectImp::get):
21424        (RuntimeObjectImp::put):
21425        (RuntimeObjectImp::canPut):
21426        (RuntimeObjectImp::hasProperty):
21427        (RuntimeObjectImp::defaultValue):
21428        * bindings/runtime_object.h:
21429        (KJS::RuntimeObjectImp::fallbackObject):
21430        * kjs/object.cpp:
21431        (KJS::ObjectImp::ObjectImp):
21432        * kjs/object.h:
21433        (KJS::ObjectImp::forwardingScriptMessage):
21434        (KJS::ObjectImp::setForwardingScriptMessage):
21435
214362005-01-18  Richard Williamson   <rjw@apple.com>
21437
21438        Back out a change that was incorrectly committed yesterday.
21439
21440        Reviewed by Chris.
21441
21442        * bindings/objc/objc_utility.mm:
21443        (KJS::Bindings::convertValueToObjcValue):
21444
214452005-01-17  Richard Williamson   <rjw@apple.com>
21446
21447        Fixed <rdar://problem/3753030> Need to ensure same origin for plugin binding invocations (origin security rules)
21448
21449        Keep track of originating execution context and target execution
21450        context for native JS object wrappers, and perform appropriate
21451        security checks.
21452
21453        Reviewed by David Harrison.
21454
21455        * bindings/NP_jsobject.cpp:
21456        (_isSafeScript):
21457        (_NPN_CreateScriptObject):
21458        (_NPN_Invoke):
21459        (_NPN_Evaluate):
21460        (_NPN_GetProperty):
21461        (_NPN_SetProperty):
21462        (_NPN_RemoveProperty):
21463        (_NPN_HasProperty):
21464        (_NPN_HasMethod):
21465        (_NPN_SetException):
21466        * bindings/NP_jsobject.h:
21467        * bindings/c/c_instance.cpp:
21468        (CInstance::CInstance):
21469        (CInstance::stringValue):
21470        * bindings/c/c_instance.h:
21471        * bindings/c/c_utility.cpp:
21472        (convertValueToNPVariant):
21473        * bindings/jni/jni_instance.cpp:
21474        (JavaInstance::JavaInstance):
21475        (JavaInstance::valueOf):
21476        * bindings/jni/jni_instance.h:
21477        * bindings/objc/WebScriptObject.mm:
21478        (-[WebScriptObject _initializeWithObjectImp:KJS::originExecutionContext:Bindings::executionContext:Bindings::]):
21479        (-[WebScriptObject _initWithObjectImp:KJS::originExecutionContext:Bindings::executionContext:Bindings::]):
21480        (-[WebScriptObject KJS::Bindings::]):
21481        (-[WebScriptObject _setOriginExecutionContext:KJS::Bindings::]):
21482        (-[WebScriptObject _isSafeScript]):
21483        (-[WebScriptObject callWebScriptMethod:withArguments:]):
21484        (-[WebScriptObject evaluateWebScript:]):
21485        (-[WebScriptObject setValue:forKey:]):
21486        (-[WebScriptObject valueForKey:]):
21487        (-[WebScriptObject removeWebScriptKey:]):
21488        (-[WebScriptObject stringRepresentation]):
21489        (-[WebScriptObject webScriptValueAtIndex:]):
21490        (-[WebScriptObject setWebScriptValueAtIndex:value:]):
21491        (+[WebScriptObject _convertValueToObjcValue:KJS::originExecutionContext:Bindings::executionContext:Bindings::]):
21492        * bindings/objc/WebScriptObjectPrivate.h:
21493        * bindings/objc/objc_instance.h:
21494        * bindings/objc/objc_runtime.mm:
21495        (convertValueToObjcObject):
21496        * bindings/objc/objc_utility.mm:
21497        (KJS::Bindings::convertValueToObjcValue):
21498        * bindings/runtime.cpp:
21499        (Instance::Instance):
21500        (Instance::operator=):
21501        * bindings/runtime.h:
21502        (KJS::Bindings::Instance::Instance):
21503        (KJS::Bindings::Instance::setExecutionContext):
21504        (KJS::Bindings::Instance::executionContext):
21505        * bindings/runtime_root.cpp:
21506        (RootObject::setInterpreter):
21507        * bindings/runtime_root.h:
21508        * kjs/interpreter.h:
21509        (KJS::Interpreter::isGlobalObject):
21510        (KJS::Interpreter::interpreterForGlobalObject):
21511        (KJS::Interpreter::isSafeScript):
21512
21513=== Safari-179 ===
21514
215152005-01-13  Vicki Murley <vicki@apple.com>
21516
21517        Reviewed by Adele.
21518
21519        - fix <rdar://problem/3946836> Safari about box lists 2004 instead of 2005
21520 
21521        * JavaScriptCore.pbproj/project.pbxproj: bump "2004" to "2005"
21522
215232005-01-12  Richard Williamson   <rjw@apple.com>
21524
21525        Avoid additional work on dealloc by adding early out to
21526        removeNativeReference().  (This will save time on dealloc
21527        for all ObjC DOM objects.)
21528
21529        Reviewed by Darin.
21530
21531        * bindings/runtime_root.cpp:
21532        (KJS::Bindings::removeNativeReference):
21533
215342005-01-12  Richard Williamson   <rjw@apple.com>
21535
21536        Fixed <rdar://problem/3923356> REGRESSION: Java/JavaScript security checks working incorrectly
21537
21538        We were always returning the first "root" object for all runtime
21539        objects.  Changed 0 in loop to i, the index.
21540
21541        Reviewed by David Harrison.
21542
21543        * bindings/runtime_root.cpp:
21544        (KJS::Bindings::rootForImp):
21545
215462005-01-11  Richard Williamson   <rjw@apple.com>
21547
21548        Fixed <rdar://problem/3887930> Must use new Java plug-in API to get/set fields so exception handling works (fixes many LiveConnect crashes)
21549
21550        Use the new dispatching API to invoke JNI, rather than calling JNI
21551        directly.
21552
21553        Reviewed by David Harrison.
21554
21555        * bindings/jni/jni_instance.cpp:
21556        (JavaInstance::invokeMethod):
21557        * bindings/jni/jni_runtime.cpp:
21558        (JavaField::dispatchValueFromInstance):
21559        (JavaField::valueFromInstance):
21560        (JavaField::dispatchSetValueToInstance):
21561        (JavaField::setValueToInstance):
21562        * bindings/jni/jni_runtime.h:
21563        * bindings/jni/jni_utility.cpp:
21564        (KJS::Bindings::convertValueToJValue):
21565
21566=== Safari-178 ===
21567
21568=== Safari-177 ===
21569
21570=== Safari-176 ===
21571
215722004-12-17  Maciej Stachowiak  <mjs@apple.com>
21573
21574        Reviewed by Kevin.
21575
21576        <rdar://problem/3926869> Opening caches window after running PLT causes crash
21577        
21578        * kjs/protected_values.cpp:
21579        (KJS::ProtectedValues::getProtectCount): Don't include simple numbers in
21580        the protected value table.
21581        (KJS::ProtectedValues::increaseProtectCount): Ditto.
21582        (KJS::ProtectedValues::decreaseProtectCount): Ditto.
21583
215842004-12-16  Darin Adler  <darin@apple.com>
21585
21586        Reviewed by Maciej.
21587
21588        - fixed <rdar://problem/3920764> Unimplemented String methods toLocaleLowerCase and toLocaleUpperCase
21589
21590        * kjs/string_object.h: Added toLocaleLowerCase and toLocaleUpperCase.
21591        * kjs/string_object.cpp: (StringProtoFuncImp::call): Made locale versions be synonmyms for the
21592        non-locale-specific versions.
21593        * kjs/string_object.lut.h: Regenerated.
21594
215952004-12-14  Richard Williamson   <rjw@apple.com>
21596
21597        Pass URL of plugin view when call into JNI.
21598
21599        Reviewed by Chris.
21600
21601        * bindings/jni/jni_objc.mm:
21602        (KJS::Bindings::dispatchJNICall):
21603
216042004-12-13  Richard Williamson   <rjw@apple.com>
21605
21606        Fixed <rdar://problem/3827799> repro. crash with IBM Rational ClearCase Web under Safari (Java/LiveConnect-related)
21607
21608        Add support for calling static Java methods from JavaScript.
21609
21610        Reviewed by Maciej.
21611
21612        * bindings/jni/jni_instance.cpp:
21613        (JavaInstance::invokeMethod):
21614        * bindings/jni/jni_runtime.cpp:
21615        (JavaMethod::JavaMethod):
21616        * bindings/jni/jni_runtime.h:
21617        (KJS::Bindings::JavaMethod::isStatic):
21618        * bindings/jni/jni_utility.cpp:
21619        (callJNIStaticMethod):
21620        (KJS::Bindings::callJNIBooleanMethod):
21621        (KJS::Bindings::callJNIStaticBooleanMethod):
21622        * bindings/jni/jni_utility.h:
21623
216242004-12-13  Richard Williamson   <rjw@apple.com>
21625
21626        Fixed <rdar://problem/3887767> LiveConnect doesn't propagate Java exceptions back to JavaScript (prevents security suite from running)
21627
21628        Reviewed by John.
21629
21630        * bindings/jni/jni_instance.cpp:
21631        (JavaInstance::invokeMethod):
21632        * bindings/jni/jni_objc.mm:
21633        (KJS::Bindings::dispatchJNICall):
21634        * bindings/jni/jni_runtime.h:
21635        * bindings/jni/jni_utility.h:
21636
21637=== Safari-175 ===
21638
216392004-12-07  Maciej Stachowiak  <mjs@apple.com>
21640
21641        Reviewed by Darin.
21642
21643        <rdar://problem/3908017> REGRESSION (172-173): assertion in ObjectImp::construct trying to create JS error (24hourfitness.com)
21644
21645        The fix was to implement copy constructor and assignment operator,
21646        the ones that worked on the base class did not replace the
21647        defaults apparently!
21648        
21649        * kjs/protect.h:
21650        (KJS::ProtectedValue::ProtectedValue):
21651        (KJS::ProtectedValue::operator=):
21652        (KJS::ProtectedObject::ProtectedObject):
21653        (KJS::ProtectedObject::operator=):
21654        
21655        Also fixed a bug in the GC test mode that compares the results of
21656        the old collector and the new collector.
21657
21658        * kjs/value.cpp:
21659        (ValueImp::mark):
21660
21661=== Safari-173 ===
21662
216632004-11-23  Richard Williamson   <rjw@apple.com>
21664
21665        Fixed <rdar://problem/3890385> field and method cache incorrectly capped (c bindings)
21666
21667        Reviewed by Ken.
21668
21669        * bindings/c/c_class.cpp:
21670        (CClass::_commonInit):
21671
216722004-11-21  Maciej Stachowiak  <mjs@apple.com>
21673
21674        Reviewed by Ken.
21675
21676        <rdar://problem/3889696> Enable conservative garbage collection for JavaScript
21677        
21678        * kjs/collector.cpp:
21679        (KJS::Collector::Thread::Thread):
21680        (KJS::destroyRegisteredThread):
21681        (KJS::initializeRegisteredThreadKey):
21682        (KJS::Collector::registerThread):
21683        (KJS::Collector::markStackObjectsConservatively):
21684        (KJS::Collector::markCurrentThreadConservatively):
21685        (KJS::Collector::markOtherThreadConservatively):
21686        * kjs/collector.h:
21687        * kjs/internal.cpp:
21688        (lockInterpreter):
21689        * kjs/value.h:
21690
21691=== Safari-172 ===
21692
216932004-11-15  Richard Williamson   <rjw@apple.com>
21694
21695        Fixed <rdar://problem/3880561> Default string value of ObjC object in JS should be [obj description].
21696
21697        Reviewed by Hyatt.
21698
21699        * bindings/objc/objc_instance.mm:
21700        (ObjcInstance::stringValue):
21701        * bindings/objc/objc_utility.h:
21702        * bindings/objc/objc_utility.mm:
21703        (KJS::Bindings::convertNSStringToString):
21704        (KJS::Bindings::convertObjcValueToValue):
21705
21706=== Safari-171 ===
21707
217082004-11-09  Chris Blumenberg  <cblu@apple.com>
21709
21710        Fixed: <rdar://problem/3872724> soft link against JavaVM to save ~2MB RSHRD
21711
21712        Reviewed by rjw.
21713
21714        * ChangeLog:
21715        * JavaScriptCore.pbproj/project.pbxproj: don't link against JavaVM
21716        * bindings/softlinking.c: Added.
21717        (loadFramework): new
21718        (getFunctionPointer): new
21719        (JNI_GetCreatedJavaVMs): load JavaVM if not already loaded, get _JNI_GetCreatedJavaVMs symbol if we don't already have it, call JNI_GetCreatedJavaVMs
21720
21721=== Safari-170 ===
21722
217232004-11-04  Darin Adler  <darin@apple.com>
21724
21725        Reviewed by Ken.
21726
21727        - fixed <rdar://problem/3865365> since -[WebScriptObject dealloc] does not call [super dealloc], the build will fail due to a warning
21728        - fixed behavior so that [[WebScriptObject alloc] initWithCoder:] doesn't leak WebUndefined instances
21729          and incidentally so that [[WebScriptObject alloc] init] returns the single shared instance rather
21730          than allocating a new one
21731
21732        * bindings/objc/WebScriptObject.mm: Removed some stray semicolons.
21733        (+[WebUndefined allocWithZone:]): Made this the common bottleneck that returns the single instance
21734        of WebUndefined, since it's the single method that normally allocates new instances. Calls super to
21735        actually allocate only the very first time it's called.
21736        (-[WebUndefined initWithCoder:]): Simplified to just return self (no reason to re-lookup the single
21737        shared instance since there can be only one).
21738        (-[WebUndefined copyWithZone:]): Ditto.
21739        (-[WebUndefined retain]): Ditto.
21740        (-[WebUndefined retainCount]): Use UINT_MAX constant here (matches usage in NSObject.m for retain count
21741        of class).
21742        (-[WebUndefined autorelease]): Simplified to just return self (see above).
21743        (-[WebUndefined copy]): No need to override this since it just turns around and calls copyWithZone:.
21744        (-[WebUndefined dealloc]): Added an assertion since this method should never be called. Also added
21745        a call to [super dealloc] after return; to make the new -Wdealloc-check compiler happy (fixing the
21746        bug mentioned above).
21747        (+[WebUndefined undefined]): Reimplemented; calls allocWithZone:NULL to get to the shared instance.
21748        No need to call init, since that's a no-op for this class.
21749
217502004-11-03  David Harrison  <harrison@apple.com>
21751
21752        Reviewed by Darin.
21753        
21754        Eliminate the use of a marker file to determine how to build.
21755
21756        * .cvsignore:
21757        * Makefile.am:
21758
217592004-11-01  Richard Williamson   <rjw@apple.com>
21760
21761        Fixed <rdar://problem/3861469> Latest Real player crashes Safari on some sites.
21762
21763        Reviewed by Ken.
21764
21765        * bindings/c/c_instance.cpp:
21766        (CInstance::invokeMethod):
21767        (CInstance::invokeDefaultMethod):
21768        Initialize out parameters to void type.
21769
21770        * bindings/c/c_runtime.cpp:
21771        (CField::valueFromInstance):
21772        (CField::setValueToInstance):
21773        Initialize out parameters to void type.
21774        Also added additional checks to protect against classes that 
21775        don't implement all functions.
21776
217772004-11-01  Richard Williamson   <rjw@apple.com>
21778
21779        Fixed <rdar://problem/3861257> WebUndefined should be returned for undefined values
21780
21781        Reviewed by John.
21782
21783        * ChangeLog:
21784        * bindings/objc/WebScriptObject.mm:
21785        (+[WebScriptObject _convertValueToObjcValue:KJS::root:Bindings::]):
21786        Added additional conversion Undefined -> WebUndefined.
21787        * bindings/objc/objc_utility.mm:
21788        (KJS::Bindings::convertObjcValueToValue):
21789        Added additional conversion WebUndefined -> Undefined.
21790
217912004-11-01  Darin Adler  <darin@apple.com>
21792
21793        - fixed <rdar://problem/3855573> Remove reference to "WebScriptMethods" from WebScriptObject.h comments
21794
21795        * bindings/objc/WebScriptObject.h: Removed unneeded #ifdef protection for multiple includes (since
21796        this is an Objective-C header and we use #import for those). Fixed comments as requested in the bug
21797        report to match the contents of the file.
21798
21799=== Safari-169 ===
21800
21801=== Safari-168 ===
21802
218032004-10-22  Ken Kocienda  <kocienda@apple.com>
21804
21805        Reviewed by me
21806
21807        * JavaScriptCore.pbproj/project.pbxproj:  
21808        Add GCC_ENABLE_OBJC_GC and GCC_FAST_OBJC_DISPATCH flags.
21809
21810=== Safari-167 ===
21811
218122004-10-13  Richard Williamson   <rjw@apple.com>
21813
21814        Moved boolean checks prior to NSNumber checks.  booleans are
21815        NSNumbers.
21816
21817        Follow on to <rdar://problem/3821515> binding layer needs to convert NSNumber-bools to js type boolean not number.
21818
21819        Reviewed by John.
21820
21821        * bindings/objc/objc_utility.mm:
21822        (KJS::Bindings::convertObjcValueToValue):
21823
218242004-10-12  Richard Williamson   <rjw@apple.com>
21825
21826        Fixed access to DOM object via WebScriptObject API.
21827        The execution context for DOM objects wasn't being found.
21828        <rdar://problem/3831372> The valueForKey method for @"offsetLeft" on a paragraph element causes a crash.
21829
21830        Reviewed by Chris.
21831
21832        * bindings/objc/WebScriptObject.mm:
21833        (_didExecute):
21834        (-[WebScriptObject KJS::Bindings::]):
21835        (-[WebScriptObject callWebScriptMethod:withArguments:]):
21836        (-[WebScriptObject evaluateWebScript:]):
21837        (-[WebScriptObject setValue:forKey:]):
21838        (-[WebScriptObject valueForKey:]):
21839        (-[WebScriptObject stringRepresentation]):
21840        * bindings/objc/WebScriptObjectPrivate.h:
21841
218422004-10-09  Darin Adler  <darin@apple.com>
21843
21844        Reviewed by Kevin.
21845
21846        - fixed <rdar://problem/3804661> REGRESSION: JavaScriptCore framework now has two init routines
21847
21848        * bindings/NP_jsobject.cpp: Fixed unnecessarily-complex globals set up that was
21849        creating an init routine.
21850
21851        * kjs/ustring.cpp: Changed around the UString::Rep::empty construction to not
21852        require a global constructor that creates an init routine.
21853
218542004-10-09  Darin Adler  <darin@apple.com>
21855
21856        Reviewed by Kevin.
21857
21858        - fixed <rdar://problem/3822618> REGRESSION (164-165): expedia.com's popup help doesn't work
21859
21860        * kjs/reference.cpp: (Reference::putValue): Change so that references not found in any object
21861        work with the window object of the page the function is in, not the page of the caller. This
21862        is what all other browsers do. This code was hidden before by the "everything is defined on
21863        window object" hack in WebCore.
21864
218652004-10-07  Richard Williamson   <rjw@apple.com>
21866
21867        Added simple JavaScript call tracing.  Very useful for
21868        debugging complex pages.
21869
21870        Tracing is only available in development builds and is
21871        enabled by:
21872
21873        (gdb) set traceJavaScript = 1
21874
21875        or programatically
21876
21877        setTraceJavaScript(true)
21878
21879        Function, args, and return values are printed to console.  Very
21880        verbose.
21881
21882        Reviewed by Ken.
21883
21884        * kjs/function_object.cpp:
21885        (FunctionProtoFuncImp::call):
21886        * kjs/object.cpp:
21887        (KJS::Object::call):
21888
21889=== Safari-166 ===
21890
218912004-10-05  Richard Williamson   <rjw@apple.com>
21892
21893        Fixed <rdar://problem/3819234> NPN_SetException (and throwException:) isn't implemented
21894
21895        Reviewed by Chris.
21896
21897        * bindings/NP_jsobject.cpp:
21898        (_NPN_SetException):
21899        * bindings/npruntime.cpp:
21900        (_NPN_SetExceptionWithUTF8):
21901        * bindings/objc/WebScriptObject.mm:
21902        (+[WebScriptObject throwException:]):
21903        * kjs/internal.h:
21904        (KJS::InterpreterImp::context):
21905
219062004-10-05  Richard Williamson   <rjw@apple.com>
21907
21908        Fixed <rdar://problem/3821515> binding layer needs to convert NSNumber-bools to js type boolean not number
21909
21910        Reviewed by Ken.
21911
21912        * bindings/objc/objc_utility.mm:
21913        (KJS::Bindings::convertObjcValueToValue):
21914
219152004-10-04  Darin Adler  <darin@apple.com>
21916
21917        Reviewed by Ken.
21918
21919        - rolled in a fix the KDE folks did for the operations that generate HTML fragments
21920
21921        * kjs/string_object.cpp: (StringProtoFuncImp::call): Added quote marks to generated HTML.
21922
21923        - rolled out an old workaround we don't need any more
21924
21925        * JavaScriptCore.pbproj/project.pbxproj: Remove -Wno-long-double because the <math.h> issue that
21926        required it is no longer there.
21927
219282004-09-30  Richard Williamson  <rjw@apple.com>
21929
21930        Fixed <rdar://problem/3821215> NPN hasMethod and hasProperty functions should take NPObjects, not NPClass
21931
21932        Reviewed by Chris.
21933
21934        * bindings/NP_jsobject.cpp:
21935        (_NPN_GetProperty):
21936        (_NPN_HasProperty):
21937        (_NPN_HasMethod):
21938        * bindings/c/c_class.cpp:
21939        (CClass::methodsNamed):
21940        (CClass::fieldNamed):
21941        * bindings/c/c_class.h:
21942        * bindings/c/c_instance.cpp:
21943        (CInstance::invokeMethod):
21944        * bindings/jni/jni_class.cpp:
21945        (JavaClass::methodsNamed):
21946        * bindings/jni/jni_class.h:
21947        * bindings/npruntime.h:
21948        * bindings/objc/objc_class.h:
21949        * bindings/objc/objc_class.mm:
21950        (ObjcClass::methodsNamed):
21951        * bindings/runtime.h:
21952        * bindings/runtime_object.cpp:
21953        (RuntimeObjectImp::get):
21954        (RuntimeObjectImp::hasProperty):
21955
219562004-09-29  Chris Blumenberg  <cblu@apple.com>
21957
21958        Prepended underscores to NPN methods so that when the QT plug-in loads these symbols, it uses the non-underscore versions in WebKit. Without this, the QT plug-in was failing to load when launching Safari from the command-line.
21959
21960        Reviewed by rjw.
21961
21962        * JavaScriptCore.pbproj/project.pbxproj:
21963        * bindings/NP_jsobject.cpp:
21964        (_NPN_CreateScriptObject):
21965        (_NPN_InvokeDefault):
21966        (_NPN_Invoke):
21967        (_NPN_Evaluate):
21968        (_NPN_GetProperty):
21969        (_NPN_SetProperty):
21970        (_NPN_RemoveProperty):
21971        (_NPN_HasProperty):
21972        (_NPN_HasMethod):
21973        * bindings/c/c_class.cpp:
21974        (CClass::methodsNamed):
21975        (CClass::fieldNamed):
21976        * bindings/c/c_instance.cpp:
21977        (CInstance::CInstance):
21978        (CInstance::~CInstance):
21979        (CInstance::operator=):
21980        (CInstance::invokeMethod):
21981        (CInstance::invokeDefaultMethod):
21982        * bindings/c/c_runtime.cpp:
21983        * bindings/c/c_runtime.h:
21984        (KJS::Bindings::CField::name):
21985        (KJS::Bindings::CMethod::name):
21986        * bindings/npruntime.cpp:
21987        (_NPN_GetStringIdentifier):
21988        (_NPN_GetStringIdentifiers):
21989        (_NPN_GetIntIdentifier):
21990        (_NPN_IdentifierIsString):
21991        (_NPN_UTF8FromIdentifier):
21992        (_NPN_IntFromIdentifier):
21993        (NPN_InitializeVariantWithObject):
21994        (_NPN_ReleaseVariantValue):
21995        (_NPN_CreateObject):
21996        (_NPN_RetainObject):
21997        (_NPN_ReleaseObject):
21998        (_NPN_SetExceptionWithUTF8):
21999        (_NPN_SetException):
22000
220012004-09-26  Darin Adler  <darin@apple.com>
22002
22003        * kjs/string_object.cpp: (StringProtoFuncImp::call): Remove strange use of high() and
22004        low() to get Unicode value of character, and just use unicode().
22005
220062004-09-26  Darin Adler  <darin@apple.com>
22007
22008        - refine charAt/charCodeAt fix slightly
22009
22010        * kjs/string_object.cpp: (StringProtoFuncImp::call): Treat undefined the same was as an
22011        omitted parameter, as we do everywhere else, and as other browsers do here.
22012
220132004-09-26  Darin Adler  <darin@apple.com>
22014
22015        Reviewed by Kevin.
22016
22017        - fixed <rdar://problem/3816097> REGRESSION: mailblocks, and presumably many other pages, failing because variable not found
22018
22019        * kjs/internal.cpp: (InterpreterImp::evaluate): Process variable declarations before executing
22020        the program. We were doing this properly for functions, but not entire programs.
22021
22022        - fixed <rdar://problem/3814706> REGRESSION: text fields in mailblocks wizards do not accept keystrokes due to use of charCodeAt()
22023
22024        * kjs/string_object.cpp: (StringProtoFuncImp::call): Changed the implementation of charAt
22025        and charCodeAt to treat a missing parameter as an index of 0, rather than an invalid index.
22026
22027        * tests/mozilla/expected.html: Update for two tests that now pass with these changes.
22028
22029=== Safari-165 ===
22030
22031=== Safari-164 ===
22032
220332004-09-14  Richard Williamson   <rjw@apple.com>
22034
22035        1.  Add class parameter to object allocation function.  This is somewhat redundant, given that
22036        the allocation function is in the class function vector, but people wanted to use the same
22037        allocation function for different classes.
22038        
22039        2.  Renamed NPN_Class to NPN_Invoke to match the name in the function vector.
22040        
22041        3.  Add support for a default function on an object.  This is a feature that ActiveX supports,
22042        and will allow JavaScript code to be written that will look exactly the same for both ActiveX
22043        plugins and Netscape or WebKit plugins.  There are implementations included for the 'C' and
22044        'Objective-C' bindings.
22045        
22046        There bugs are covered by
22047        
22048        <rdar://problem/3776343> Support for default functions in the JavaScript bindings
22049        <rdar://problem/3779186> NPN_Call needs to be renamed to NPN_Invoke
22050        <rdar://problem/3674754> Need to implement latest npruntime.h
22051
22052        Reviewed by John.
22053
22054        * bindings/NP_jsobject.cpp:
22055        (jsAllocate):
22056        (NPN_InvokeDefault):
22057        (NPN_Invoke):
22058        * bindings/c/c_class.cpp:
22059        * bindings/c/c_instance.cpp:
22060        (CInstance::CInstance):
22061        (CInstance::operator=):
22062        (CInstance::invokeMethod):
22063        (CInstance::invokeDefaultMethod):
22064        * bindings/c/c_instance.h:
22065        * bindings/c/c_runtime.cpp:
22066        * bindings/c/c_runtime.h:
22067        * bindings/jni/jni_instance.cpp:
22068        (JavaInstance::invokeDefaultMethod):
22069        * bindings/jni/jni_instance.h:
22070        * bindings/npruntime.cpp:
22071        (NPN_CreateObject):
22072        * bindings/npruntime.h:
22073        * bindings/objc/WebScriptObject.h:
22074        * bindings/objc/objc_class.mm:
22075        (ObjcClass::fallbackObject):
22076        * bindings/objc/objc_instance.h:
22077        * bindings/objc/objc_instance.mm:
22078        (ObjcInstance::invokeDefaultMethod):
22079        * bindings/objc/objc_runtime.h:
22080        * bindings/objc/objc_runtime.mm:
22081        (ObjcFallbackObjectImp::ObjcFallbackObjectImp):
22082        (ObjcFallbackObjectImp::get):
22083        (ObjcFallbackObjectImp::put):
22084        (ObjcFallbackObjectImp::canPut):
22085        (ObjcFallbackObjectImp::implementsCall):
22086        (ObjcFallbackObjectImp::call):
22087        (ObjcFallbackObjectImp::hasProperty):
22088        (ObjcFallbackObjectImp::deleteProperty):
22089        (ObjcFallbackObjectImp::defaultValue):
22090        * bindings/runtime.h:
22091        (KJS::Bindings::Class::fallbackObject):
22092        (KJS::Bindings::Instance::getValueOfUndefinedField):
22093        (KJS::Bindings::Instance::setValueOfUndefinedField):
22094        (KJS::Bindings::Instance::valueOf):
22095        * bindings/runtime_object.cpp:
22096        (RuntimeObjectImp::implementsCall):
22097        (RuntimeObjectImp::call):
22098        * bindings/runtime_object.h:
22099
221002004-09-13  Maciej Stachowiak  <mjs@apple.com>
22101
22102        Reviewed by Darin.
22103
22104        <rdar://problem/3794735> Gmail- sending a very long message with Safari is so slow it seems like a hang
22105        
22106        * kjs/string_object.cpp:
22107        (StringProtoFuncImp::call): Replaced implementation of replace()
22108        method with function below...
22109        (replace): In order to avoid excessive allocation and copying,
22110        figure out the ranges of the original string and replacement
22111        strings to be assembled, instead of constantly creating new
22112        strings at each substitution. The old behavior is basically O(N^2)
22113        for a global replace on a pattern that matches many places in the
22114        string.
22115        (regExpIsGlobal): Helper function for the above.
22116        (expandSourceRanges): ditto
22117        (pushSourceRange): ditto
22118        (expandReplacements): ditto
22119        (pushReplacement): ditto
22120        * kjs/ustring.cpp:
22121        (KJS::UString::spliceSubstringsWithSeparators): New method that
22122        pieces together substring ranges of this string together with
22123        specified separators, all at one go.
22124        * kjs/ustring.h:
22125        (KJS::UString::Range::Range): Added new helper class to represent
22126        substring choices.
22127
221282004-09-14  Maciej Stachowiak  <mjs@apple.com>
22129
22130        Reviewed by Darin.
22131
22132        - fixed <rdar://problem/3800315> encode-URI-test layout test is failing
22133        
22134        * kjs/function.cpp:
22135        (KJS::GlobalFuncImp::call): Make sure to escape null
22136        characters. This is a bug in the new code that made part of the
22137        test fail.
22138
221392004-09-13  Darin Adler  <darin@apple.com>
22140
22141        Reviewed by Kevin and Maciej.
22142
22143        - new function to support fix for DIG bug in WebCore
22144
22145        * kjs/scope_chain.h: Added new push function that pushes another entire scope chain.
22146        * kjs/scope_chain.cpp: (KJS::ScopeChain::push): Ditto.
22147
221482004-09-12  Darin Adler  <darin@apple.com>
22149
22150        * tests/mozilla/expected.html: Updated test results for 3 more tests that pass with the new version
22151        of escape and unescape.
22152
221532004-09-12  Darin Adler  <darin@apple.com>
22154
22155        Reviewed by Maciej.
22156
22157        - fixed <rdar://problem/3798209> any non-ASCII characters are garbled in the result of toLocaleString
22158
22159        * kjs/date_object.cpp:
22160        (formatLocaleDate): Replaced two old functions that used LongDateTime with this one new function that
22161        uses CFDateFormatter.
22162        (DateProtoFuncImp::call): Call the new formatLocaleDate instead of both formatLocaleDate and formatLocaleTime.
22163
221642004-09-09  Maciej Stachowiak  <mjs@apple.com>
22165
22166        Reviewed by Richard.
22167
22168        <rdar://problem/3493140> REGRESSION (85-100): cedille displays %-escaped in JavaScript message at hotmail.com
22169
22170        * kjs/function.cpp:
22171        (KJS::GlobalFuncImp::call): Replace our escape() and unescape() implementations with
22172        ones from KDE KJS, which have the proper latin-1 behavior to match Win IE.
22173        * kjs/lexer.cpp:
22174        (Lexer::isHexDigit): Made static and non-const.
22175        * kjs/lexer.h:
22176
22177=== Safari-163 ===
22178
221792004-09-06  Darin Adler  <darin@apple.com>
22180
22181        * JavaScriptCore.pbproj/project.pbxproj: Bump MACOSX_DEPLOYMENT_TARGET to 10.3.
22182
22183=== Safari-162 ===
22184
221852004-09-01  Richard Williamson   <rjw@apple.com>
22186
22187        Add pid to exception messages (to help debug dashboard clients).
22188
22189        Reviewed by Chris.
22190
22191        * kjs/interpreter.cpp:
22192        (Interpreter::evaluate):
22193
22194=== Safari-161 ===
22195
221962004-08-20  Richard Williamson   <rjw@apple.com>
22197
22198        Implemented new JNI abstraction.  We no longer invoke Java methods
22199        directly with JNI, rather we call into the plugin.  This allows the
22200        plugin to dispatch the call to the appropriate VM thread.  This
22201        change should (will?) fix a whole class of threading related problems with
22202        the Java VM.
22203
22204        Reviewed by Hyatt.
22205
22206        * JavaScriptCore.pbproj/project.pbxproj:
22207        * bindings/c/c_instance.h:
22208        (KJS::Bindings::CInstance::setExecutionContext):
22209        (KJS::Bindings::CInstance::executionContext):
22210        * bindings/jni/jni_instance.cpp:
22211        (JavaInstance::JavaInstance):
22212        (JavaInstance::invokeMethod):
22213        (JavaInstance::setExecutionContext):
22214        (JavaInstance::executionContext):
22215        * bindings/jni/jni_instance.h:
22216        * bindings/jni/jni_jsobject.cpp:
22217        (JSObject::convertJObjectToValue):
22218        * bindings/jni/jni_runtime.cpp:
22219        (JavaField::JavaField):
22220        (JavaArray::convertJObjectToArray):
22221        (JavaField::valueFromInstance):
22222        (JavaArray::JavaArray):
22223        (JavaArray::valueAt):
22224        * bindings/jni/jni_runtime.h:
22225        (KJS::Bindings::JavaArray::operator=):
22226        (KJS::Bindings::JavaArray::executionContext):
22227        * bindings/jni/jni_utility.h:
22228        * bindings/objc/objc_instance.h:
22229        (KJS::Bindings::ObjcInstance::setExecutionContext):
22230        (KJS::Bindings::ObjcInstance::executionContext):
22231        * bindings/runtime.cpp:
22232        (Instance::createBindingForLanguageInstance):
22233        * bindings/runtime.h:
22234        * bindings/runtime_root.h:
22235        (KJS::Bindings::RootObject::nativeHandle):
22236
22237=== Safari-158 ===
22238
222392004-08-19  Vicki Murley  <vicki@apple.com>
22240
22241        Reviewed by John.
22242
22243        * kjs/property_map.cpp:
22244        (KJS::PropertyMap::put): initialize deletedElementIndex to zero, to make the compiler happy
22245
222462004-08-17  Darin Adler  <darin@apple.com>
22247
22248        Reviewed by Adele.
22249
22250        - fixed <rdar://problem/3746676> SAP WebDynpro app hangs inside JavaScript property map hash table code (deleted sentinel problem)
22251
22252        * kjs/property_map.h: Added some private functions.
22253        * kjs/property_map.cpp:
22254        (KJS::PropertyMap::clear): Set sentinelCount to 0.
22255        (KJS::PropertyMap::put): Complete search for the element before choosing to use the deleted-element sentinel.
22256        Also keep sentinel count up to date when we destroy a sentinel by overwriting with a new added element.
22257        (KJS::PropertyMap::expand): Added. Calls rehash with a size 2x the old size, or 16.
22258        (KJS::PropertyMap::rehash): Added. Refactored the rehash code into a separate function.
22259        (KJS::PropertyMap::remove): Add one to sentinelCount, and rehash if 1/4 or more of the elements are
22260        deleted-element sentinels.
22261        (KJS::PropertyMap::checkConsistency): Check the sentinelCount.
22262
222632004-08-16  Maciej Stachowiak  <mjs@apple.com>
22264
22265        Code change by Eric Albert, reviewd by me.
22266
22267        <rdar://problem/3571960> washingtonpost.com claims I don't have cookies enabled and won't let me read articles
22268
22269        * kjs/date_object.cpp:
22270        (timetUsingCF): Clamp time to LONG_MAX (getting rid of time_t
22271        entirely would be even better, but is not required to fix this bug.
22272
22273=== Safari-157 ===
22274
222752004-08-16  Richard Williamson   <rjw@apple.com>
22276
22277        Fixed <rdar://problem/3581092> cash in KJS::Bindings::JSObject::eval at tcvetantcvetkov.com
22278
22279        Adds bullet proofing to protect against evaluation of bogus JS in all the flavors of bindings (Java, C, and ObjC).
22280
22281        Reviewed by Chris.
22282
22283        * bindings/NP_jsobject.cpp:
22284        (NPN_Evaluate):
22285        * bindings/jni/jni_jsobject.cpp:
22286        (JSObject::eval):
22287        * bindings/objc/WebScriptObject.mm:
22288        (-[WebScriptObject evaluateWebScript:]):
22289
222902004-08-15  Richard Williamson   <rjw@apple.com>
22291
22292        More updates to np headers.  Implemented new NPN functions.
22293
22294        Reviewed by Darin.
22295
22296        * bindings/NP_jsobject.cpp:
22297        (NPN_HasProperty):
22298        (NPN_HasMethod):
22299        * bindings/npapi.h:
22300        * bindings/npruntime.h:
22301
223022004-08-13  Darin Adler  <darin@apple.com>
22303
22304        - fix build so we can compile again
22305
22306        * bindings/npapi.h: Added. Richard forgot to check this in. The one I'm checking in here
22307        is good enough so that we can compile, but it's only a stopgap measure, because I think
22308        Richard has a newer one he wants to check in.
22309
223102004-08-12  Richard Williamson   <rjw@apple.com>
22311
22312        Bring npruntime.h and friends closer to compliance with
22313        latest spec.
22314
22315        Reviewed by Maciej.
22316
22317        * JavaScriptCore.pbproj/project.pbxproj:
22318        * bindings/NP_jsobject.cpp:
22319        (jsAllocate):
22320        (_NPN_CreateScriptObject):
22321        (NPN_Call):
22322        (NPN_Evaluate):
22323        (NPN_GetProperty):
22324        (NPN_SetProperty):
22325        (NPN_RemoveProperty):
22326        * bindings/NP_jsobject.h:
22327        * bindings/c/c_instance.cpp:
22328        (CInstance::invokeMethod):
22329        * bindings/c/c_utility.cpp:
22330        (convertNPVariantToValue):
22331        * bindings/npruntime.cpp:
22332        (NPN_IdentifierIsString):
22333        (NPN_VariantIsVoid):
22334        (NPN_VariantIsNull):
22335        (NPN_VariantIsUndefined):
22336        (NPN_VariantIsBool):
22337        (NPN_VariantIsInt32):
22338        (NPN_VariantIsDouble):
22339        (NPN_VariantIsString):
22340        (NPN_VariantIsObject):
22341        (NPN_VariantToBool):
22342        (NPN_VariantToString):
22343        (NPN_VariantToInt32):
22344        (NPN_VariantToDouble):
22345        (NPN_VariantToObject):
22346        (NPN_InitializeVariantAsVoid):
22347        (NPN_InitializeVariantAsNull):
22348        (NPN_InitializeVariantAsUndefined):
22349        (NPN_InitializeVariantWithBool):
22350        (NPN_InitializeVariantWithInt32):
22351        (NPN_InitializeVariantWithDouble):
22352        (NPN_InitializeVariantWithString):
22353        (NPN_InitializeVariantWithStringCopy):
22354        (NPN_InitializeVariantWithObject):
22355        (NPN_InitializeVariantWithVariant):
22356        (NPN_ReleaseVariantValue):
22357        (NPN_CreateObject):
22358        * bindings/npruntime.h:
22359        (_NPString::):
22360        (_NPString::_NPVariant::):
22361        * bindings/npruntime_priv.h: Added.
22362
223632004-08-12  Darin Adler  <darin@apple.com>
22364
22365        Reviewed by Adele.
22366
22367        - fixed 3 problems with parse functions that I just wrote, fixing 3 more Mozilla JavaScript tests
22368
22369        * kjs/function.cpp:
22370        (KJS::parseDigit): Fix typo, 'Z' instead of 'z', that prevented lowercase hex digits from working.
22371        (KJS::parseInt): Add octal support. Specification says it's optional, but I guess not.
22372        (KJS::parseFloat): Fix check for "0x" in parseFloat to return 0 rather than NaN. Also add code
22373        to skip leading "+" or "-".
22374
22375=== Safari-156 ===
22376
223772004-08-12  Darin Adler  <darin@apple.com>
22378
22379        Reviewed by Ken.
22380
22381        - fixed 43 Mozilla JavaScript tests
22382
22383        * kjs/date_object.h: Change parseDate and timeClip to take and return doubles.
22384        * kjs/date_object.cpp:
22385        (DateObjectImp::construct): Change to use a timeClip function that takes and returns a double rather
22386        than constructing a number object to pass to it.
22387        (DateObjectFuncImp::call): Change to use a parseDate function that returns a double.
22388        (KJS::parseDate): Change to return a double instead of creating the Number object here.
22389        (KJS::timeClip): Implement this as specified in the language standard.
22390
22391        * kjs/error_object.cpp: (NativeErrorImp::NativeErrorImp): Set the DontDelete, ReadOnly, and DontEnum
22392        flags on the prototype property.
22393
22394        * kjs/function.cpp:
22395        (KJS::FunctionImp::get): Return null rather than undefined for arguments when the function is not
22396        currently in scope.
22397        (KJS::isStrWhiteSpace): Added. Matches specification for StrWhiteSpace. Could move it to some utility
22398        file later.
22399        (KJS::parseDigit): Added. Helper function for parseInt.
22400        (KJS::parseInt): Added. Integer parser that puts result in a double so we're not limited to what
22401        strtoll can handle. Also matches standard more closely.
22402        (KJS::parseFloat): Added. Handles "0x" properly and passes flag to make empty string turn into NaN
22403        instead of 0.
22404        (KJS::GlobalFuncImp::call): Use the new parseInt and parseFloat.
22405
22406        * kjs/function_object.cpp: (FunctionPrototypeImp::FunctionPrototypeImp): Add a length property.
22407
22408        * kjs/lexer.h: Added error flag and sawError() function for detecting errors.
22409        * kjs/lexer.cpp:
22410        (Lexer::setCode): Clear error state.
22411        (Lexer::lex): Set error state if the lexer encounters an error
22412
22413        * kjs/internal.cpp:
22414        (NumberImp::toString): Roll in change from KDE version to special case 0 so we handle -0 correctly.
22415        (Parser::parse): Use new lexer error method so those errors are treated like parser errors.
22416
22417        * kjs/math_object.cpp: (MathFuncImp::call): Change min and max to treat -0 as less than +0.
22418        Change round to round values between -0.5 and -0 to -0 instead of +0.
22419
22420        * kjs/nodes.h: Add evaluateReference function to GroupNode.
22421        * kjs/nodes.cpp: (GroupNode::evaluateReference): Pass references through groups (parenthesized
22422        expressions) properly so that expressions like "delete (x.y)" work. Before, the parentheses
22423        would change x.y into a value that can't be deleted as a side effect.
22424
22425        * kjs/string_object.cpp: Change parameter count for indexOf and lastIndexOf from 2 to 1 to match
22426        the specification.
22427
22428        * kjs/testkjs.cpp: Rolled in changes from KDE to add a "quit" function to the test tool and
22429        get rid of the fixed size limit for code.
22430
22431        * kjs/ustring.cpp: (KJS::UString::substr): Added optimized case for substr(0, length) so it just
22432        returns the string without creating a new Rep, since I'm using substr in a place where it will
22433        often be passed a 0.
22434
22435        * tests/mozilla/ecma/String/15.5.4.11-1.js: Fixed one wrong entry in the Unicode table I added to
22436        the other day that was making a couple tests fail.
22437        * tests/mozilla/ecma/String/15.5.4.12-1.js: Ditto.
22438        * tests/mozilla/ecma/String/15.5.4.12-2.js: Ditto.
22439        * tests/mozilla/ecma/String/15.5.4.12-3.js: Ditto.
22440        * tests/mozilla/ecma/String/15.5.4.12-4.js: Ditto.
22441        * tests/mozilla/ecma/String/15.5.4.12-5.js: Ditto.
22442
22443        * kjs/string_object.lut.h: Regenerated.
22444
224452004-08-11  Darin Adler  <darin@apple.com>
22446
22447        - fixed a tiny problem with the UTF-16 PCRE check-in
22448
22449        * pcre/maketables.c: (pcre_maketables): Fix mistake in table-generating code that sometimes caused
22450        the ctype_meta flag to get set in items that should not have it.
22451
22452        * pcre/chartables.c: Regenerated.
22453
224542004-08-10  Richard Williamson   <rjw@apple.com>
22455
22456        Fixed <rdar://problem/3674747> Need to implement invokeUndefinedMethodFromWebScript:withArguments:
22457
22458        The following WebScripting methods are now supported on bound
22459        objects:
22460
22461        - (id)invokeUndefinedMethodFromWebScript:(NSString *)name withArguments:(NSArray *)args;
22462        - (void)setValue:(id)value forUndefinedKey:(NSString *)key
22463        - (id)valueForUndefinedKey:(NSString *)key
22464
22465        Reviewed by Chris.
22466
22467        * bindings/c/c_class.cpp:
22468        (CClass::fieldNamed):
22469        * bindings/c/c_class.h:
22470        * bindings/jni/jni_class.cpp:
22471        (JavaClass::fieldNamed):
22472        * bindings/jni/jni_class.h:
22473        * bindings/objc/objc_class.h:
22474        (KJS::Bindings::ObjcClass::isa):
22475        * bindings/objc/objc_class.mm:
22476        (ObjcClass::methodsNamed):
22477        (ObjcClass::fieldNamed):
22478        (ObjcClass::fallbackObject):
22479        * bindings/objc/objc_instance.h:
22480        * bindings/objc/objc_instance.mm:
22481        (ObjcInstance::invokeMethod):
22482        (ObjcInstance::setValueOfField):
22483        (ObjcInstance::setValueOfUndefinedField):
22484        (ObjcInstance::getValueOfField):
22485        (ObjcInstance::getValueOfUndefinedField):
22486        * bindings/objc/objc_runtime.h:
22487        (KJS::Bindings::ObjcField::~ObjcField):
22488        (KJS::Bindings::ObjcField::ObjcField):
22489        (KJS::Bindings::ObjcField::operator=):
22490        (KJS::Bindings::FallbackObjectImp::classInfo):
22491        * bindings/objc/objc_runtime.mm:
22492        (ObjcField::ObjcField):
22493        (ObjcField::name):
22494        (ObjcField::type):
22495        (ObjcField::valueFromInstance):
22496        (ObjcField::setValueToInstance):
22497        (FallbackObjectImp::FallbackObjectImp):
22498        (FallbackObjectImp::get):
22499        (FallbackObjectImp::put):
22500        (FallbackObjectImp::canPut):
22501        (FallbackObjectImp::implementsCall):
22502        (FallbackObjectImp::call):
22503        (FallbackObjectImp::hasProperty):
22504        (FallbackObjectImp::deleteProperty):
22505        (FallbackObjectImp::defaultValue):
22506        * bindings/runtime.h:
22507        (KJS::Bindings::Class::fallbackObject):
22508        (KJS::Bindings::Instance::getValueOfUndefinedField):
22509        (KJS::Bindings::Instance::setValueOfUndefinedField):
22510        * bindings/runtime_object.cpp:
22511        (RuntimeObjectImp::get):
22512        (RuntimeObjectImp::put):
22513        (RuntimeObjectImp::canPut):
22514        (RuntimeObjectImp::hasProperty):
22515        * bindings/testbindings.mm:
22516        (-[MyFirstInterface valueForUndefinedKey:]):
22517        (-[MyFirstInterface setValue:forUndefinedKey:]):
22518
225192004-08-10  Darin Adler  <darin@apple.com>
22520
22521        Reviewed by Dave.
22522
22523        - switch PCRE to do UTF-16 directly instead of converting to/from UTF-8 for speed
22524
22525        * pcre/pcre.h: Added PCRE_UTF16 switch, set to 1. Added pcre_char typedef, which is char
22526        or uint16_t depending on the mode, and used appropriate in the 7 public functions
22527        that need to use it.
22528        * pcre/pcre.c: Add UTF-16 support to all functions.
22529        * pcre/study.c: Ditto.
22530
22531        * pcre/internal.h: Added ichar typedef, which is unsigned char or uint16_t depending on
22532        the mode. Changed declarations to use symbolic constants and typedefs so we size
22533        things to ichar when needed.
22534
22535        * pcre/maketables.c: (pcre_maketables): Change code to make tables that are
22536        sized to 16-bit characters instead of 8-bit.
22537
22538        * pcre/get.c:
22539        (pcre_copy_substring): Use pcre_char instead of char.
22540        (pcre_get_substring_list): Ditto.
22541        (pcre_free_substring_list): Ditto.
22542        (pcre_get_substring): Ditto.
22543        (pcre_free_substring): Ditto.
22544
22545        * pcre/dftables.c: (main): Used a bit more const, and use ICHAR sizes instead
22546        of hard-coding 8-bit table sizes.
22547
22548        * pcre/chartables.c: Regenerated.
22549
22550        * kjs/ustring.h: Remove functions that convert UTF-16 to/from UTF-8 offsets.
22551        * kjs/ustring.cpp: Change the shared empty string to have a unicode pointer that
22552        is not null. The null string still has a null pointer. This prevents us from
22553        passing a null through to the regular expression engine (which results in a null
22554        error even when the string length is 0).
22555
22556        * kjs/regexp.cpp:
22557        (KJS::RegExp::RegExp): Null-terminate the pattern and pass it.
22558        (KJS::RegExp::match): Use the 16-bit string directly, no need to convert to UTF-8.
22559
225602004-08-09  Darin Adler  <darin@apple.com>
22561
22562        Reviewed by Maciej.
22563
22564        - fixed 28 Mozilla JavaScript tests
22565
22566        * kjs/array_object.cpp: (ArrayProtoFuncImp::call): Check for undefined rather than
22567        checking the number of arguments for the join method.
22568
22569        * kjs/lexer.cpp: (Lexer::lex): Parse hexadecimal and octal constants in doubles rather
22570        than integers, so we aren't limited to 32 bits.
22571
22572        * kjs/math_object.cpp: (MathFuncImp::call): Get rid of many unneeded special cases in
22573        the implementation of the pow operation. Also simplied a case that was handling positive
22574        and negative infinity separately.
22575
22576        * kjs/nodes.cpp: (ShiftNode::evaluate): Keep the result of shifts in a double instead of
22577        putting them in a long, so that unsigned shift will work properly.
22578
22579        * kjs/number_object.cpp: Add the DontDelete and ReadOnly flags to the numeric constants.
22580
22581        * kjs/operations.cpp:
22582        (KJS::isPosInf): Added an implementation inside APPLE_CHANGES that does not depend on the
22583        sign of isinf; our isinf function returns +1 even for negative infinity.
22584        (KJS::isNegInf): And again.
22585        (KJS::relation): Put in a nice simple implementation of comparison inside APPLE_CHANGES.
22586        Our floating point already handles the various infinity cases correctly.
22587
22588        * kjs/regexp_object.cpp:
22589        (RegExpProtoFuncImp::call): Add missing return before Null() in Exec method.
22590        (RegExpObjectImp::arrayOfMatches): Put undefined rather than an empty string into the
22591        array in cases where we did not match.
22592        (RegExpObjectImp::construct): Set the DontDelete, ReadOnly, and DontEnum flags for
22593        "global", "ignoreCase", "multiline", and "source".
22594
22595        * kjs/string_object.cpp: (StringProtoFuncImp::call): For the match method, turn a null
22596        string into undefined rather than an empty string. For the slice method, handle an
22597        undefined parameter for the limit properly as decribed in the specification, and add
22598        the limit to one case that didn't have the limit at all. For the methods that generate
22599        HTML strings, use lowercase tags instead of uppercase.
22600
22601        * kjs/ustring.cpp:
22602        (KJS::UChar::toLower): Use u_tolower from the ICU library.
22603        (KJS::UChar::toUpper): Use u_toupper from the ICU library.
22604        (KJS::UString::append): Fix some math that caused a buffer overflow.
22605        (KJS::convertUTF16OffsetsToUTF8Offsets): Ignore negative numbers (-1 is used as a special
22606        flag) rather than converting them all to 0.
22607        (KJS::convertUTF8OffsetsToUTF16Offsets): Ditto.
22608
22609        * tests/mozilla/jsDriver.pl: Fixed the relative links to point to our actual test files.
22610
22611        * tests/mozilla/ecma/String/15.5.4.11-1.js: Fixed the Unicode table in this test to match
22612        the Unicode specification in a few cases where it was wrong before.
22613        * tests/mozilla/ecma/String/15.5.4.11-2.js: Ditto.
22614        * tests/mozilla/ecma/String/15.5.4.11-3.js: Ditto.
22615        * tests/mozilla/ecma/String/15.5.4.11-5.js: Ditto.
22616        * tests/mozilla/ecma/String/15.5.4.11-6.js: Ditto.
22617        * tests/mozilla/ecma/String/15.5.4.12-1.js: Ditto.
22618        * tests/mozilla/ecma/String/15.5.4.12-2.js: Ditto.
22619        * tests/mozilla/ecma/String/15.5.4.12-3.js: Ditto.
22620        * tests/mozilla/ecma/String/15.5.4.12-4.js: Ditto.
22621        * tests/mozilla/ecma/String/15.5.4.12-5.js: Ditto.
22622
22623        * JavaScriptCore.pbproj/project.pbxproj: Link to libicu.
22624
22625        * kjs/number_object.lut.h: Regenerated.
22626
226272004-08-09  Darin Adler  <darin@apple.com>
22628
22629        Reviewed by Maciej.
22630
22631        - fixed <rdar://problem/3753467> REGRESSION (137-138): reproducible buffer overrun in UString manipulation code
22632
22633        * kjs/ustring.cpp: (KJS::UString::append): Fix incorrect size computation. Without it
22634        we get a buffer overflow.
22635
22636=== Safari-155 ===
22637
226382004-08-05  Richard Williamson   <rjw@apple.com>
22639
22640        Fixed part of 3674747.  The QT guys need this for feature freeze.
22641
22642        This patch implements support for the
22643
22644        - (id)invokeUndefinedMethodFromWebScript:(NSString *)name withArguments:(NSArray *)args
22645
22646        method of objects bound to JavaScript.
22647
22648        Reviewed by John.
22649
22650        * ChangeLog:
22651        * bindings/objc/objc_class.mm:
22652        (ObjcClass::methodsNamed):
22653        (ObjcClass::fieldNamed):
22654        * bindings/objc/objc_instance.mm:
22655        (ObjcInstance::invokeMethod):
22656        * bindings/objc/objc_runtime.h:
22657        (KJS::Bindings::ObjcMethod::~ObjcMethod):
22658        (KJS::Bindings::ObjcMethod::isFallbackMethod):
22659        (KJS::Bindings::ObjcMethod::javaScriptName):
22660        * bindings/objc/objc_runtime.mm:
22661        (ObjcMethod::ObjcMethod):
22662        (ObjcMethod::getMethodSignature):
22663        (ObjcMethod::setJavaScriptName):
22664        * bindings/testbindings.mm:
22665
226662004-08-04  Vicki Murley  <vicki@apple.com>
22667
22668        Reviewed by mjs.
22669 
22670        - fix <rdar://problem/3649789> SAP WebGUI has problems loading first page because of parse error        
22671
22672        * kjs/lexer.cpp:
22673        (Lexer::lex): if the current character is a '\' and the next character is a line terminator,
22674        go to the next line and continue parsing the string (instead of failing).  This matches 
22675        behavior in Mac IE and Mozilla.
22676
226772004-08-03  Kevin Decker  <kdecker@apple.com>
22678
22679        Reviewed by Darin.
22680
22681        Rolled in changes from the latest KJS sources that support additional 
22682        Number.prototype functions. 
22683
22684        Specifically this patch covers the follow parts of the ECMA 3 spec:
22685        15.7.4.5, 15.7.4.6, and 15.7.4.7 
22686        
22687        Fixes:
22688        <rdar://problem/3663716> missing Number.toFixed (and toPrecision, toExponential)
22689        <rdar://problem/3749492> missing Number.toPrecision prototype implementation
22690        <rdar://problem/3749591> missing Number.toExponential prototype implementation
22691
22692        * kjs/identifier.h: Added toFixed, toPrecision, and toExponential to the
22693        list of supported identifiers (a macro).
22694        * kjs/number_object.cpp: Implemented support for toFixed(), toPrecision(),
22695        and toExponential(). 
22696        (NumberPrototypeImp::NumberPrototypeImp):
22697        (NumberProtoFuncImp::call):
22698        * kjs/number_object.h: Added property names for toFixed, toPrecision,
22699        and toExponential. 
22700        (KJS::NumberProtoFuncImp::):
22701        * tests/mozilla/expected.html: Update results.
22702
227032004-08-03  Darin Adler  <darin@apple.com>
22704
22705        Reviewed by Ken.
22706
22707        - added support for copying RegExp objects so 7 more Mozilla regexp tests pass
22708
22709        * kjs/regexp_object.cpp: (RegExpObjectImp::construct): Check for case where
22710        we are supposed to just copy the regular expression object, and do so.
22711        Also tighten up arguments check to handle case where an actual "undefined"
22712        is passed rather than just omitting an argument.
22713
22714        * tests/mozilla/expected.html: Update results.
22715
227162004-08-02  Darin Adler  <darin@apple.com>
22717
22718        * tests/mozilla/.cvsignore: Added.
22719        * tests/mozilla/expected.html: Update results.
22720
227212004-08-02  Darin Adler  <darin@apple.com>
22722
22723        Reviewed by Ken.
22724
22725        - fixed RegExp.toString so 3 more Mozilla regexp tests pass
22726
22727        * kjs/regexp_object.cpp: (RegExpProtoFuncImp::call):
22728        Append the flags here so more tests paseed.
22729
227302004-08-02  Darin Adler  <darin@apple.com>
22731
22732        Reviewed by Ken.
22733
22734        - fixed a couple things making 5 Mozilla regexp tests pass
22735
22736        * kjs/regexp_object.cpp: (RegExpProtoFuncImp::call): Implement toString
22737        for the prototype.
22738        (RegExpObjectImp::construct): Fix bug where the string "undefined" would
22739        be used as the flags string when no parameter was passed.
22740
22741        * kjs/regexp_object.h: (KJS::RegExpPrototypeImp::classInfo):
22742        Added a class info object for RegExp prototype so it can return
22743        a string instead of raising an exception when converting to a string.
22744
22745        * tests/mozilla/expected.html: Update results.
22746
227472004-08-02  Darin Adler  <darin@apple.com>
22748
22749        Reviewed by Kevin.
22750
22751        - fix crashes in mozilla tests due to mishandling NaN
22752
22753        * kjs/array_object.cpp: (ArrayProtoFuncImp::call): Rerranged range checks after
22754        calls to toInteger so that NaN will get turned into something that fits in an integer.
22755        These were the ones John already fixed, but his fix used isnan and the new fix is
22756        more efficient.
22757
22758        * kjs/number_object.cpp: (NumberProtoFuncImp::call): Rearranged radix range checks
22759        after a call to toInteger to handle NaN properly. Also removed separate check
22760        for undefined that's not needed.
22761
22762        * kjs/string_object.cpp: (StringProtoFuncImp::call): More of the same kinds of changes
22763        as in the above two files, but for a lot more functions. Also changed one place with
22764        an explicit check for undefined to instead just check isNaN.
22765
22766        * tests/mozilla/run-mozilla-tests: Changed to invoke jst using $SYMROOTS for people
22767        like me who don't keep $SYMROOTS in their $PATH.
22768
22769=== Safari-154 ===
22770
22771=== Safari-153 ===
22772
227732004-07-26  Kevin Decker  <kdecker@apple.com>
22774
22775        Changes done by Darin, reviewed by Kevin.
22776
22777        - changed testkjs to build in Xcode rather than from Makefile
22778
22779        * .cvsignore: Removed obsolete files from this list.
22780        * Makefile.am: Removed code to build testkjs; we do this in Xcode now.
22781        Changed to build target "All" rather than default target. This makes us
22782        build the testkjs test tool.
22783        * dummy.cpp: Removed.
22784        * kjs/.cvsignore: Removed obsolete files from this list, including
22785        the testkjs tool, which is now built in the symroots directory.
22786        * kjs/testkjs.cpp: Added copyright notice that was missing, since we have
22787        changed this file. Also this has the nice side effect of causing the tool
22788        to be rebuilt in the new location even if there are no other changes in
22789        your tree when you check this out.
22790        * tests/mozilla/run-mozilla-tests: Invoke perl explicitly so this works
22791        without setting the execute bit on jsDriver.pl.
22792
227932004-07-22  Kevin Decker  <kdecker@apple.com>
22794
22795        Reviewed by Darin
22796        
22797        Fixed <rdar://problem/3682340> (error console does not include source urls or line numbers of event exceptions). 
22798
22799        * kjs/function_object.cpp:
22800        (FunctionObjectImp::construct):
22801        * kjs/function_object.h:
22802        * kjs/object.cpp:
22803        (KJS::ObjectImp::construct):
22804        * kjs/object.h:
22805        (KJS::Object::construct):
22806
228072004-07-21  Darin Adler  <darin@apple.com>
22808
22809        * bindings/npruntime.h: Fixed typo.
22810
228112004-07-19  John Sullivan  <sullivan@apple.com>
22812
22813        Reviewed by Maciej.
22814        
22815        - bulletproofed array.slice() against NAN arguments. Harri noticed this
22816        vulnerability in my patch for 3714644
22817
22818        * kjs/array_object.cpp:
22819        (ArrayProtoFuncImp::call):
22820        handle NAN parameters passed to slice() by clamping to 0 and length.
22821
228222004-07-19  Richard Williamson   <rjw@apple.com>
22823
22824        Fixed 3733349.  Prevent Java applet callbacks into JavaScript after applet
22825        has been destroyed.
22826
22827        Reviewed by John.
22828
22829        * bindings/jni/jni_jsobject.cpp:
22830        (JSObject::invoke):
22831        (JSObject::JSObject):
22832
228332004-07-16  John Sullivan  <sullivan@apple.com>
22834
22835        Reviewed by Maciej.
22836        
22837        - fixed <rdar://problem/3714644> REGRESSION (125.8-146): bugzilla submit link 
22838        hangs browser with javascript
22839
22840        * kjs/array_object.cpp:
22841        (ArrayProtoFuncImp::call):
22842        Check for undefined type for args[0] the same way we were already checking
22843        for args[1]. In this case, args was zero-length, but we were treating
22844        args[0] like an integer anyway. Resulted in some code looping from a NAN
22845        value to 4, taking approximately forever.
22846
22847        * JavaScriptCore.pbproj/project.pbxproj:
22848        version wars
22849        
22850=== Safari-152 ===
22851
228522004-07-14  Maciej Stachowiak  <mjs@apple.com>
22853
22854        Reviewed by John.
22855
22856        <rdar://problem/3711474>: (REGRESSION (125-146): JavaScript 'toString(16)' is broken)
22857        <rdar://problem/3644873>: (REGRESSION (125-140u): secondary list doesn't fill in at Southwest.com)
22858
22859        * kjs/number_object.cpp:
22860        (NumberProtoFuncImp::call): Initialize radix from dradix, not from itself!
22861
228622004-07-13  Kevin Decker  <kdecker@apple.com>
22863
22864        Reviewed by kocienda.
22865
22866        - made testkjs and JavaScriptCore a subtarget of 'All'
22867        - testkjs now builds in $SYMROOTS
22868
22869        * JavaScriptCore.pbproj/project.pbxproj:
22870
22871=== Safari-151 ===
22872
228732004-06-24  Chris Blumenberg  <cblu@apple.com>
22874
22875        Ignore .mode1 files in JavaScriptCore.pbproj
22876
22877        Reviewed by kocienda.
22878
22879        * JavaScriptCore.pbproj/.cvsignore:
22880
228812004-06-23  Richard Williamson   <rjw@apple.com>
22882
22883        Implemented changes for latest npruntime.h.
22884        
22885        Reviewed by Chris.
22886
22887        * JavaScriptCore.pbproj/project.pbxproj:
22888        * bindings/NP_jsobject.cpp:
22889        (listFromVariantArgs):
22890        (identiferFromNPIdentifier):
22891        (_NPN_CreateScriptObject):
22892        (NPN_Call):
22893        (NPN_Evaluate):
22894        (NPN_GetProperty):
22895        (NPN_SetProperty):
22896        (NPN_RemoveProperty):
22897        * bindings/NP_jsobject.h:
22898        * bindings/c/c_class.cpp:
22899        (CClass::methodsNamed):
22900        (CClass::fieldNamed):
22901        * bindings/c/c_instance.cpp:
22902        (CInstance::invokeMethod):
22903        * bindings/c/c_utility.cpp:
22904        (convertNPVariantToValue):
22905        * bindings/c/c_utility.h:
22906        * bindings/npruntime.cpp:
22907        (stringIdentifierEqual):
22908        (stringIdentifierHash):
22909        (getStringIdentifierDictionary):
22910        (intIdentifierEqual):
22911        (intIdentifierHash):
22912        (getIntIdentifierDictionary):
22913        (NPN_GetStringIdentifier):
22914        (NPN_GetStringIdentifiers):
22915        (NPN_GetIntIdentifier):
22916        (NPN_IdentifierIsString):
22917        (NPN_UTF8FromIdentifier):
22918        (NPN_VariantToInt32):
22919        (NPN_VariantToDouble):
22920        (NPN_SetException):
22921        * bindings/npruntime.h:
22922        * bindings/objc/WebScriptObject.mm:
22923        (+[WebScriptObject _convertValueToObjcValue:KJS::root:Bindings::]):
22924        * bindings/runtime_object.cpp:
22925        (RuntimeObjectImp::~RuntimeObjectImp):
22926        * bindings/runtime_root.cpp:
22927        (KJS::Bindings::rootForInterpreter):
22928        * bindings/testbindings.cpp:
22929        (initializeIdentifiers):
22930        (logMessage):
22931        (setDoubleValue):
22932        (setIntValue):
22933        (setBooleanValue):
22934
22935=== JavaScriptCore-146.1 ===
22936
229372004-06-16  Richard Williamson   <rjw@apple.com>
22938
22939        Fixed <rdar://problem/3702287> Crash returning nil from bound ObjC
22940
22941        This turned out to be a show stopper for Dashboard.  Accessing a nil
22942        ObjC property from JS caused a crash.  Similar to the problem
22943        3696112 fixed below.
22944        
22945        Reviewed by Trey.
22946
22947        * bindings/objc/objc_runtime.mm:
22948        (KJS::Bindings::ObjcField::valueFromInstance):
22949
22950=== Safari-146 ===
22951
229522004-06-16  Richard Williamson   <rjw@apple.com>
22953
22954        Fixed <rdar://problem/3696112>: nil from an Objective-C class seems to get wrapped as a JavaScript proxy that will not print.
22955
22956        This turned out to be a show stopper for Dashboard.  We now
22957        return Undefined() when nil is returned from a ObjC method
22958        that returns an object type.
22959        
22960        Reviewed by Maciej.
22961
22962        * bindings/objc/objc_utility.mm:
22963        (KJS::Bindings::convertObjcValueToValue):
22964
22965=== Safari-145 ===
22966
229672004-06-15  Richard Williamson   <rjw@apple.com>
22968
22969        Fixed <rdar://problem/3695875>: Objective-C instances that are exported to JavaScript are too promiscuous
22970
22971        No longer need to check respondsToSelector: for
22972        isSelectorExcludedFromWebScript: and isKeyExcludedFromWebScript:
22973        because these now have a default implementation on NSObject.
22974
22975        Reviewed by Trey.
22976
22977        * bindings/objc/objc_class.mm:
22978        (ObjcClass::methodsNamed):
22979        (ObjcClass::fieldNamed):
22980
229812004-06-14  Darin Adler  <darin@apple.com>
22982
22983        Reviewed by Maciej.
22984
22985        - fixed some things for GC that Patrick missed, or that happened after the branch
22986
22987        * bindings/objc/WebScriptObject.mm:
22988        (-[WebScriptObject dealloc]): Moved removeNativeReference call here from private object.
22989        (-[WebScriptObject finalize]): Added.
22990
22991        - added some missing nil checks
22992
22993        * bindings/objc/objc_instance.mm:
22994        (ObjcInstance::ObjcInstance): Check for nil.
22995        (ObjcInstance::~ObjcInstance): Check for nil.
22996        (ObjcInstance::operator=): Check for nil.
22997
229982004-06-14  Darin Adler  <darin@apple.com>
22999
23000        Reviewed by me, code changes by Patrick Beard.
23001
23002        - fixed <rdar://problem/3671507>: (WebKit should adopt GC changes and compile with GC enabled)
23003
23004        * bindings/objc/objc_instance.mm:
23005        (ObjcInstance::ObjcInstance): Use CFRetain instead of retain.
23006        (ObjcInstance::~ObjcInstance): Use CFRelease instead of release.
23007        (ObjcInstance::operator=): More of the same.
23008        (ObjcInstance::end): Use [pool drain] if compiling on Tiger.
23009
23010        * bindings/objc/objc_runtime.mm:
23011        (ObjcArray::ObjcArray): Use CFRetain instead of retain.
23012        (ObjcArray::~ObjcArray): Use CFRelease instead of release.
23013        (ObjcArray::operator=): More of the same.
23014
23015        * bindings/testbindings.mm: Fixed incorrect license.
23016        (main): Use [pool drain] if compiling on Tiger.
23017
23018=== Safari-144 ===
23019
230202004-06-10  Kevin Decker  <kdecker@apple.com>
23021
23022        Reviewed by John.
23023
23024        * kjs/lexer.cpp: 
23025        (Lexer::setCode):
23026            - fixed <rdar://problem/3682398>: (error console line numbers are offset by 1)
23027        * kjs/lexer.h:
23028        (KJS::Lexer::lineNo):
23029            - fixed <rdar://problem/3682398>: (error console line numbers are offset by 1)
23030
23031=== JavaScriptCore-143.2 ===
23032
230332004-06-07  Darin Adler  <darin@apple.com>
23034
23035        - fixed <rdar://problem/3682489>: (JavaScriptGlue no longer compiles because Interpreter::evaluate parameters changed)
23036
23037        * kjs/interpreter.h: Added an overload to make JavaScriptGlue compile.
23038        * kjs/interpreter.cpp: (KJS::Interpreter::evaluate): Implemented the overload.
23039
23040=== JavaScriptCore-143.1 ===
23041
230422004-06-04  Kevin Decker  <kdecker@apple.com>
23043
23044        Reviewed by Darin
23045        
23046        - fixed <rdar://problem/3680594>
23047
23048        * kjs/object.cpp:
23049        (KJS::Error::create):
23050
23051=== Safari-143 ===
23052
230532004-06-04  Darin Adler  <darin@apple.com>
23054
23055        * kjs/testkjs.cpp: (main): Fix build breakage by adding URL and line number parameters.
23056
230572004-06-04  Kevin Decker  <kdecker@apple.com>
23058
23059        Reviewed by Dave.
23060
23061        - ObjC bindings do not (yet) pass along sourceurl or line numbers
23062        - we don't have a way as of yet to accomidate line numbers and urls for dynamic javascript
23063        - changed the wording of an error message
23064        - the lexer, parser, and interpreter have been made "sourceURL aware"
23065        - stored the url into Error
23066         
23067        * bindings/NP_jsobject.cpp:
23068        (NPN_Evaluate):
23069        * bindings/jni/jni_jsobject.cpp:
23070        (JSObject::eval):
23071        * bindings/objc/WebScriptObject.mm:
23072        (-[WebScriptObject evaluateWebScript:]):
23073        * kjs/function.cpp:
23074        (GlobalFuncImp::call):
23075        * kjs/function_object.cpp:
23076        (FunctionObjectImp::construct):
23077        * kjs/internal.cpp:
23078        (Parser::parse):
23079        (InterpreterImp::checkSyntax):
23080        (InterpreterImp::evaluate):
23081        * kjs/internal.h:
23082        * kjs/interpreter.cpp:
23083        (Interpreter::evaluate):
23084        * kjs/interpreter.h:
23085        * kjs/lexer.cpp:
23086        (Lexer::setCode):
23087        * kjs/lexer.h:
23088        (KJS::Lexer::sourceURL):
23089        * kjs/nodes.cpp:
23090        (Node::Node):
23091        (Node::throwError):
23092        (FunctionCallNode::evaluate):
23093        * kjs/nodes.h:
23094        * kjs/object.cpp:
23095        (KJS::Error::create):
23096        * kjs/object.h:
23097
230982004-06-04  Richard Williamson   <rjw@apple.com>
23099
23100        Fixed crash when attempting to access properties on nil
23101        object.
23102        
23103        Reviewed by John.
23104
23105        * bindings/objc/objc_instance.mm:
23106        (ObjcInstance::getClass):
23107        * bindings/runtime_object.cpp:
23108        (RuntimeObjectImp::get):
23109        * bindings/testM.js:
23110        * bindings/testbindings.mm:
23111        (-[MyFirstInterface getString]):
23112
231132004-05-27  Kevin Decker  <kdecker@apple.com>
23114
23115        Reviewed by Ken.
23116
23117        -revised generated error message content
23118        
23119        * kjs/error_object.cpp:
23120        (ErrorProtoFuncImp::call):
23121        * kjs/internal.cpp:
23122        (Parser::parse):
23123        * kjs/object.cpp:
23124        (KJS::Error::create):
23125
23126=== Safari-142 ===
23127
231282004-05-27  Richard Williamson   <rjw@apple.com>
23129
23130        Renamed WebScriptMethods to WebScripting based on feedback from Nancy.
23131
23132        Reviewed by Chris.
23133
23134        * bindings/objc/WebScriptObject.h:
23135
231362004-05-27  Darin Adler  <darin@apple.com>
23137
23138        Reviewed by Maciej.
23139
23140        - moved to new symlink technique for embedding frameworks
23141
23142        * JavaScriptCore.pbproj/project.pbxproj: Get rid of embed-frameworks build step
23143        because we don't need it any more.
23144
231452004-05-24  Richard Williamson   <rjw@apple.com>
23146
23147        Changed RuntimeArrayImp to inherit from ArrayInstanceImp and
23148        fixed ClassInfo to correctly reflect inheritance.  This is required
23149        because of the runtime checks in JSC for arrays, i.e. in
23150        the Function objects apply method.
23151
23152        Reviewed by Ken.
23153
23154        * bindings/jni/jni_runtime.cpp:
23155        (JavaArray::convertJObjectToArray):
23156        * bindings/objc/objc_utility.mm:
23157        (KJS::Bindings::convertObjcValueToValue):
23158        * bindings/runtime_array.cpp:
23159        (RuntimeArrayImp::RuntimeArrayImp):
23160        * bindings/runtime_array.h:
23161        * bindings/testM.js: Added.
23162        * bindings/testbindings.mm:
23163        (+[MyFirstInterface webScriptNameForSelector:]):
23164        (-[MyFirstInterface logMessages:]):
23165        (-[MyFirstInterface logMessage:prefix:]):
23166        (-[MyFirstInterface callJSObject::]):
23167
231682004-05-22  Darin Adler  <darin@apple.com>
23169
23170        Reviewed by Maciej.
23171
23172        - fixed <rdar://problem/3664260>: (JS needs to listen to timezone change notifications)
23173
23174        * kjs/date_object.cpp: (CopyLocalTimeZone): As per Chris Kane and Jordan Hubbard, use <notify.h>
23175        with a hardcoded string of "com.apple.system.timezone", and do CFTimeZoneResetSystem since
23176        CoreFoundation doesn't do this itself. Turns out this affects the default time zone as long as
23177        it hasn't been set explicitly.
23178
23179=== Safari-141 ===
23180
231812004-05-20  Richard Williamson   <rjw@apple.com>
23182
23183        Implemented WebScriptObject/DOM wrapper voodoo.  DOM wrappers
23184        can now be referenced like any other WebScriptObject, meaning
23185        you can do JS operations on them.
23186
23187        All added implementation of finalizeForWebScript.
23188
23189        Reviewed by Ken.
23190
23191        * bindings/objc/WebScriptObject.h:
23192        * bindings/objc/WebScriptObject.mm:
23193        (-[WebScriptObject _initializeWithObjectImp:KJS::root:Bindings::]):
23194        (-[WebScriptObject _initWithObjectImp:KJS::root:Bindings::]):
23195        (-[WebScriptObject KJS::]):
23196        (-[WebScriptObject dealloc]):
23197        (-[WebScriptObject callWebScriptMethod:withArguments:]):
23198        (-[WebScriptObject evaluateWebScript:]):
23199        (-[WebScriptObject setValue:forKey:]):
23200        (-[WebScriptObject valueForKey:]):
23201        (-[WebScriptObject stringRepresentation]):
23202        * bindings/objc/WebScriptObjectPrivate.h:
23203        * bindings/objc/objc_instance.mm:
23204        (ObjcInstance::~ObjcInstance):
23205
232062004-05-19  Richard Williamson   <rjw@apple.com>
23207
23208        Removed extraneous tabs that were added (by XCode?).
23209
23210        * bindings/objc/WebScriptObject.h:
23211
232122004-05-19  Darin Adler  <darin@apple.com>
23213
23214        - fixed headers with licenses mangled by Xcode auto-indenting
23215
23216        * bindings/jni/jni_jsobject.cpp:
23217        * bindings/jni/jni_jsobject.h:
23218        * bindings/runtime_array.h:
23219        * bindings/runtime_root.cpp:
23220        * bindings/runtime_root.h:
23221
232222004-05-18  Richard Williamson   <rjw@apple.com>
23223
23224        Added exception logging.  Also check for exception and
23225        set results as appropriate.
23226
23227        Reviewed by Maciej (partially reviewed).
23228
23229        * bindings/objc/WebScriptObject.mm:
23230        (-[WebScriptObject callWebScriptMethod:withArguments:]):
23231        (-[WebScriptObject evaluateWebScript:]):
23232        (-[WebScriptObject setValue:forKey:]):
23233        (-[WebScriptObject valueForKey:]):
23234
232352004-05-18  Richard Williamson   <rjw@apple.com>
23236
23237        Finsished implementing support for windowScriptObject.
23238        Had to make WebScriptObjectPrivate.h accessible from
23239        WebCore.
23240
23241        Reviewed by Maciej.
23242
23243        * JavaScriptCore.pbproj/project.pbxproj:
23244        * bindings/objc/WebScriptObjectPrivate.h:
23245
232462004-05-18  Richard Williamson   <rjw@apple.com>
23247
23248        Use KVC to set/get values instead of directly accessing
23249        ivars.
23250
23251        Reviewed by Maciej.
23252
23253        * bindings/objc/WebScriptObject.mm:
23254        (-[WebScriptObject callWebScriptMethod:withArguments:]):
23255        (+[WebScriptObject _convertValueToObjcValue:KJS::root:Bindings::]):
23256        * bindings/objc/objc_runtime.mm:
23257        (ObjcField::valueFromInstance):
23258        (convertValueToObjcObject):
23259        (ObjcField::setValueToInstance):
23260
232612004-05-17  Richard Williamson   <rjw@apple.com>
23262
23263        Implemented new API for WebScriptObject.
23264
23265        Fixed <rdar://problem/3657145>: (objc to javascript method calls do not cause updates.)
23266        Fixed <rdar://problem/3654887>: (Update to JSC to refer to new JSObject LiveConnect object)  (w/ help from Vicki)
23267
23268        Reviewed by Hyatt.
23269
23270        * JavaScriptCore.pbproj/project.pbxproj:
23271        * bindings/c/c_instance.cpp:
23272        (CInstance::invokeMethod):
23273        * bindings/jni/jni_instance.cpp:
23274        (JavaInstance::invokeMethod):
23275        * bindings/jni/jni_jsobject.cpp:
23276        (JSObject::convertValueToJObject):
23277        * bindings/jni/jni_utility.cpp:
23278        (KJS::Bindings::getJNIField):
23279        * bindings/objc/WebScriptObject.mm:
23280        (_didExecute):
23281        (-[WebScriptObject _initWithObjectImp:KJS::root:Bindings::]):
23282        (-[WebScriptObject KJS::]):
23283        (-[WebScriptObject dealloc]):
23284        (+[WebScriptObject throwException:]):
23285        (listFromNSArray):
23286        (-[WebScriptObject callWebScriptMethod:withArguments:]):
23287        (-[WebScriptObject evaluateWebScript:]):
23288        (-[WebScriptObject setValue:forKey:]):
23289        (-[WebScriptObject valueForKey:]):
23290        (-[WebScriptObject stringRepresentation]):
23291        (+[WebScriptObject _convertValueToObjcValue:KJS::root:Bindings::]):
23292        (+[WebUndefined undefined]):
23293        (-[WebUndefined initWithCoder:]):
23294        (-[WebUndefined encodeWithCoder:]):
23295        (-[WebUndefined copyWithZone:]):
23296        (-[WebUndefined retain]):
23297        (-[WebUndefined release]):
23298        (-[WebUndefined retainCount]):
23299        (-[WebUndefined autorelease]):
23300        (-[WebUndefined dealloc]):
23301        (-[WebUndefined copy]):
23302        (-[WebUndefined replacementObjectForPortCoder:]):
23303        * bindings/objc/WebScriptObjectPrivate.h: Added.
23304        * bindings/objc/objc_class.mm:
23305        (ObjcClass::methodsNamed):
23306        (ObjcClass::fieldNamed):
23307        * bindings/objc/objc_instance.mm:
23308        (ObjcInstance::invokeMethod):
23309        * bindings/objc/objc_jsobject.h:
23310        * bindings/objc/objc_jsobject.mm:
23311        * bindings/objc/objc_runtime.mm:
23312        (ObjcField::valueFromInstance):
23313        * bindings/objc/objc_utility.mm:
23314        (KJS::Bindings::JSMethodNameToObjCMethodName):
23315        (KJS::Bindings::convertValueToObjcValue):
23316        (KJS::Bindings::convertObjcValueToValue):
23317        * bindings/runtime.cpp:
23318        (Instance::setDidExecuteFunction):
23319        (Instance::didExecuteFunction):
23320        (Instance::setValueOfField):
23321        * bindings/runtime.h:
23322        * bindings/testbindings.mm:
23323        (+[MyFirstInterface webScriptNameForSelector:]):
23324        (-[MyFirstInterface callJSObject::]):
23325
233262004-05-14  Vicki Murley  <vicki@apple.com>
23327
23328        Reviewed by mjs.
23329 
23330        <rdar://problem/3642427>: framework marketing number should be 2.0 for DoubleBarrel release
23331
23332        * JavaScriptCore.pbproj/project.pbxproj: change CFBundleShortVersionString to 2.0
23333
23334=== Safari-140 ===
23335
233362004-05-13  Richard Williamson   <rjw@apple.com>
23337
23338        Fixed indentation.
23339
23340        Reviewed by Chris.
23341
23342        * ChangeLog:
23343        * bindings/objc/WebScriptObject.h:
23344
233452004-05-13  Richard Williamson   <rjw@apple.com>
23346
23347        Approved API changes.  Currently unimplemented.
23348
23349        Reviewed by Chris.
23350
23351        * ChangeLog:
23352        * JavaScriptCore.pbproj/project.pbxproj:
23353        * bindings/objc/WebScriptObject.h: Added.
23354        * bindings/objc/WebScriptObject.mm: Added.
23355        (+[WebScriptObject throwException:]):
23356        (-[WebScriptObject callWebScriptMethod:withArguments:]):
23357        (-[WebScriptObject evaluateWebScript:]):
23358        (-[WebScriptObject stringRepresentation]):
23359        (+[WebUndefined undefined]):
23360        (-[WebUndefined initWithCoder:]):
23361        (-[WebUndefined encodeWithCoder:]):
23362        (-[WebUndefined copyWithZone:]):
23363
233642004-05-07  Vicki Murley  <vicki@apple.com>
23365
23366        Reviewed by darin.
23367
23368        Turn off GC since it uses ppc only instructions (which breaks 
23369        the B&I build).   
23370    
23371        * kjs/value.h: set USE_CONSERVATIVE_GC to 0
23372
23373=== Safari-139 ===
23374
233752004-05-07  Maciej Stachowiak  <mjs@apple.com>
23376
23377        Reviewed by Darin.
23378
23379        - add -funroll-loops=16 compiler option for approx .5% speedup on
23380        HTML iBench and .5-1% speedup on JS iBench.
23381        
23382        * JavaScriptCore.pbproj/project.pbxproj:
23383
233842004-04-25  Maciej Stachowiak  <mjs@apple.com>
23385
23386        Reviewed by Darin.
23387
23388        Enable full conservative GC mode in addition to test mode. When
23389        conservative GC is enabled, we now get an 11% speed improvement on
23390        the iBench. Also fix some spots I missed before.
23391
23392        Specific noteworth changes:
23393        
23394        * kjs/collector.cpp:
23395        (KJS::Collector::markStackObjectsConservatively): Check possible
23396        cell pointers for 8-byte aligment and verify they are not 0.
23397
23398        * kjs/protected_values.cpp:
23399        (KJS::ProtectedValues::increaseProtectCount): Move null-tolerance from here...
23400        (KJS::ProtectedValues::decreaseProtectCount): ...and here...
23401        * kjs/protect.h:
23402        (KJS::gcProtectNullTolerant): ...to here...
23403        (KJS::gcUnprotectNullTolerant): ...and here, because not all callers need the null
23404        tolerance, and doing the check is expensive.
23405
23406        * kjs/protected_values.cpp:
23407        (KJS::ProtectedValues::computeHash): Replace hash function with a much faster one
23408        that is still very good.
23409
23410        * kjs/protect.h:
23411        (KJS::gcProtect):
23412        (KJS::gcUnprotect):
23413        (KJS::ProtectedValue::ProtectedValue):
23414        (KJS::ProtectedValue::~ProtectedValue):
23415        (KJS::ProtectedValue::operator=):
23416        (KJS::ProtectedObject::ProtectedObject):
23417        (KJS::ProtectedObject::~ProtectedObject):
23418        (KJS::ProtectedObject::operator=):
23419        (KJS::ProtectedReference::ProtectedReference):
23420        (KJS::ProtectedReference::~ProtectedReference):
23421        (KJS::ProtectedReference::operator=):
23422        * kjs/protected_values.cpp:
23423        (KJS::ProtectedValues::getProtectCount):
23424        (KJS::ProtectedValues::increaseProtectCount):
23425        (KJS::ProtectedValues::decreaseProtectCount):
23426        (KJS::ProtectedValues::computeHash):
23427        * bindings/runtime_root.cpp:
23428        (KJS::Bindings::addNativeReference):
23429        (KJS::Bindings::removeNativeReference):
23430        (RootObject::removeAllNativeReferences):
23431        * bindings/runtime_root.h:
23432        (KJS::Bindings::RootObject::~RootObject):
23433        (KJS::Bindings::RootObject::setRootObjectImp):
23434        * kjs/collector.cpp:
23435        (KJS::Collector::allocate):
23436        (KJS::Collector::collect):
23437        * kjs/collector.h:
23438        * kjs/internal.cpp:
23439        (NumberImp::create):
23440        (InterpreterImp::globalInit):
23441        (InterpreterImp::globalClear):
23442        (InterpreterImp::mark):
23443        * kjs/list.cpp:
23444        (KJS::List::derefValues):
23445        (KJS::List::refValues):
23446        (KJS::List::append):
23447        * kjs/object.cpp:
23448        (KJS::ObjectImp::setInternalValue):
23449        (KJS::ObjectImp::putDirect):
23450        * kjs/value.cpp:
23451        (ValueImp::mark):
23452        (ValueImp::marked):
23453        * kjs/value.h:
23454        (KJS::ValueImp::ValueImp):
23455        (KJS::ValueImp::~ValueImp):
23456        (KJS::ValueImp::):
23457        (KJS::Value::Value):
23458        (KJS::Value::~Value):
23459        (KJS::Value::operator=):
23460
234612004-04-30  Richard Williamson   <rjw@apple.com>
23462
23463        Asking an NSInvocation for it's return value when return type
23464        is void throws an exception.  Added check for void return types
23465        to avoid this exception.
23466
23467        Reviewed by Ken.
23468
23469        * bindings/objc/objc_instance.mm:
23470        (ObjcInstance::invokeMethod):
23471
234722004-04-29  Richard Williamson   <rjw@apple.com>
23473
23474        Fixed several bad problems with the ObjC bindings.  In particular, conversion
23475        to/from JavaScriptObject (soon to be WebScriptObject) was completely broken.
23476
23477        Reviewed by Chris.
23478
23479        * bindings/objc/objc_jsobject.h:
23480        * bindings/objc/objc_jsobject.mm:
23481        (-[JavaScriptObject initWithObjectImp:KJS::root:Bindings::]):
23482        (-[JavaScriptObject KJS::]):
23483        (+[JavaScriptObject _convertValueToObjcValue:KJS::root:Bindings::]):
23484        (-[JavaScriptObject call:arguments:]):
23485        (-[JavaScriptObject evaluate:]):
23486        (-[JavaScriptObject getMember:]):
23487        (-[JavaScriptObject getSlot:]):
23488        * bindings/objc/objc_runtime.mm:
23489        (ObjcField::valueFromInstance):
23490        (ObjcField::setValueToInstance):
23491        * bindings/objc/objc_utility.mm:
23492        (KJS::Bindings::convertValueToObjcValue):
23493        (KJS::Bindings::convertObjcValueToValue):
23494        * bindings/runtime.h:
23495        * bindings/runtime_root.cpp:
23496        (KJS::Bindings::rootForInterpreter):
23497        (KJS::Bindings::addNativeReference):
23498        (KJS::Bindings::removeNativeReference):
23499        * bindings/runtime_root.h:
23500        * bindings/testbindings.mm:
23501        (-[MyFirstInterface logMessage:]):
23502        (-[MyFirstInterface setJSObject:]):
23503        (-[MyFirstInterface callJSObject::]):
23504
235052004-04-24  Darin Adler  <darin@apple.com>
23506
23507        Reviewed by Dave.
23508
23509        * kjs/ustring.cpp: (KJS::UString::append): Fix one case that was allocating a buffer
23510        that is 2x too big.
23511
235122004-04-23  Maciej Stachowiak  <mjs@apple.com>
23513
23514        Reviewed by Darin.
23515
23516        Implementation of conservative GC, based partly on code from
23517        Darin. It's turned off for now, so it shouldn't have any effect on
23518        the normal build.
23519        
23520        * JavaScriptCore.pbproj/project.pbxproj:
23521        * kjs/collector.cpp:
23522        (KJS::Collector::markStackObjectsConservatively):
23523        (KJS::Collector::markProtectedObjects):
23524        (KJS::Collector::collect):
23525        * kjs/collector.h:
23526        * kjs/protect.h:
23527        (KJS::gcProtect):
23528        (KJS::gcUnprotect):
23529        * kjs/protected_values.cpp: Added.
23530        (KJS::ProtectedValues::getProtectCount):
23531        (KJS::ProtectedValues::increaseProtectCount):
23532        (KJS::ProtectedValues::insert):
23533        (KJS::ProtectedValues::decreaseProtectCount):
23534        (KJS::ProtectedValues::expand):
23535        (KJS::ProtectedValues::shrink):
23536        (KJS::ProtectedValues::rehash):
23537        (KJS::ProtectedValues::computeHash):
23538        * kjs/protected_values.h: Added.
23539        * kjs/value.cpp:
23540        (ValueImp::useConservativeMark):
23541        (ValueImp::mark):
23542        (ValueImp::marked):
23543        * kjs/value.h:
23544        (KJS::ValueImp::):
23545
23546=== Safari-138 ===
23547
235482004-04-22  Richard Williamson   <rjw@apple.com>
23549
23550        Fixed build snafu (re-declaration of NPBool in npruntime.h and
23551        npapi.h).
23552
23553        * bindings/npruntime.h:
23554
235552004-04-22  Richard Williamson   <rjw@apple.com>
23556
23557        Updated plugin binding API to reflect latest revision from
23558        working group.
23559        
23560        Biggest change is the introduction of NPVariant used to represent
23561        value types.  NPVariant replaces the use of NPObject for the
23562        exchange of values between scripting environment and native code.
23563
23564        Reviewed by John.
23565
23566        * JavaScriptCore.pbproj/project.pbxproj:
23567        * bindings/NP_jsobject.cpp:
23568        (identiferFromNPIdentifier):
23569        (NPN_Call):
23570        (NPN_Evaluate):
23571        (NPN_GetProperty):
23572        (NPN_SetProperty):
23573        (NPN_ToString):
23574        (NPN_GetPropertyAtIndex):
23575        (NPN_SetPropertyAtIndex):
23576        * bindings/c/c_class.cpp:
23577        (CClass::methodsNamed):
23578        (CClass::fieldNamed):
23579        * bindings/c/c_instance.cpp:
23580        (CInstance::invokeMethod):
23581        (CInstance::defaultValue):
23582        * bindings/c/c_runtime.cpp:
23583        (CField::valueFromInstance):
23584        (CField::setValueToInstance):
23585        * bindings/c/c_utility.cpp:
23586        (convertNPStringToUTF16):
23587        (convertUTF8ToUTF16):
23588        (coerceValueToNPVariantStringType):
23589        (convertValueToNPVariant):
23590        (convertNPVariantToValue):
23591        * bindings/c/c_utility.h:
23592        * bindings/npruntime.cpp:
23593        (NPN_GetIdentifier):
23594        (NPN_GetIdentifiers):
23595        (NPN_UTF8FromIdentifier):
23596        (NPN_VariantIsVoid):
23597        (NPN_VariantIsNull):
23598        (NPN_VariantIsUndefined):
23599        (NPN_VariantIsBool):
23600        (NPN_VariantIsInt32):
23601        (NPN_VariantIsDouble):
23602        (NPN_VariantIsString):
23603        (NPN_VariantIsObject):
23604        (NPN_VariantToBool):
23605        (NPN_VariantToString):
23606        (NPN_VariantToInt32):
23607        (NPN_VariantToDouble):
23608        (NPN_VariantToObject):
23609        (NPN_InitializeVariantAsVoid):
23610        (NPN_InitializeVariantAsNull):
23611        (NPN_InitializeVariantAsUndefined):
23612        (NPN_InitializeVariantWithBool):
23613        (NPN_InitializeVariantWithInt32):
23614        (NPN_InitializeVariantWithDouble):
23615        (NPN_InitializeVariantWithString):
23616        (NPN_InitializeVariantWithStringCopy):
23617        (NPN_InitializeVariantWithObject):
23618        (NPN_InitializeVariantWithVariant):
23619        (NPN_ReleaseVariantValue):
23620        (NPN_CreateObject):
23621        (NPN_RetainObject):
23622        (NPN_ReleaseObject):
23623        (NPN_IsKindOfClass):
23624        (NPN_SetExceptionWithUTF8):
23625        (NPN_SetException):
23626        * bindings/npruntime.h:
23627        (_NPString::):
23628        (_NPString::_NPVariant::):
23629        * bindings/testbindings.cpp:
23630        (logMessage):
23631        (setDoubleValue):
23632        (setIntValue):
23633        (setStringValue):
23634        (setBooleanValue):
23635        (getDoubleValue):
23636        (getIntValue):
23637        (getStringValue):
23638        (getBooleanValue):
23639        (myGetProperty):
23640        (mySetProperty):
23641        (myInvoke):
23642        (myAllocate):
23643
236442004-04-22  Darin Adler  <darin@apple.com>
23645
23646        Reviewed by Maciej.
23647
23648        - fixed <rdar://problem/3627473>: "REGRESSION (125-137): memory trasher in UString::append, causing many different crashes"
23649
23650        * kjs/ustring.cpp:
23651        (KJS::UString::expandCapacity): Fix sizeof(UChar *) that should be sizeof(UChar).
23652        Was resulting in a buffer 2x the needed size.
23653        (KJS::UString::expandPreCapacity): Ditto.
23654        (KJS::UString::append): Fix malloc that is missing a sizeof(UChar).
23655
236562004-04-21  Maciej Stachowiak  <mjs@apple.com>
23657
23658        Reviewed by Darin.
23659
23660        Preliminary change for conservative GC. Create "protected"
23661        subclasses to GC-protect objects when on heap, since we will soon
23662        remove the built-in refcounting of the normal wrapper classes. Use
23663        them where needed.
23664        
23665        * JavaScriptCore.pbproj/project.pbxproj:
23666        * kjs/context.h:
23667        * kjs/internal.h:
23668        (KJS::InterpreterImp::globalObject):
23669        * kjs/interpreter.h:
23670        * kjs/property_map.cpp:
23671        * kjs/reference.h:
23672        * kjs/reference_list.cpp:
23673
236742004-04-19  Maciej Stachowiak  <mjs@apple.com>
23675
23676        Reviewed by Dave.
23677
23678        Optimize prepend using the shared substring optimization. Also,
23679        limit the applicability of shared append and shared prepend. If
23680        you overdo it, it does more harm than good, because you create a
23681        bunch of strings that are disqualified from future shared
23682        append/prepend, for not much immediate savings in allocate/copy
23683        expense.
23684        
23685        * kjs/ustring.cpp:
23686        (KJS::):
23687        (KJS::UString::Rep::create):
23688        (KJS::UString::expandedSize):
23689        (KJS::UString::usedPreCapacity):
23690        (KJS::UString::expandCapacity):
23691        (KJS::UString::expandPreCapacity):
23692        (KJS::UString::UString):
23693        (KJS::UString::append):
23694        (KJS::UString::operator=):
23695        * kjs/ustring.h:
23696        (KJS::UString::Rep::data):
23697
236982004-04-16  Maciej Stachowiak  <mjs@apple.com>
23699        Reviewed by Richard.
23700
23701        No more need for Completion or Reference to privately inherit from
23702        Value, none of the superclass functionality is used.
23703
23704        * kjs/completion.h:
23705        * kjs/reference.h:
23706
23707=== Safari-137 ===
23708
237092004-04-16  Richard Williamson   <rjw@apple.com>
23710
23711        Added interpreter lock protection around object creation.
23712
23713        Reviewed by Chris.
23714
23715        * bindings/runtime.cpp:
23716        (Instance::createRuntimeObject):
23717
237182004-04-16  Maciej Stachowiak  <mjs@apple.com>
23719
23720        Reviewed by Ken.
23721
23722        Another JavaScript speed improvement: use the mechanism from
23723        string append optimization to make taking a substring fast, again
23724        sharing the buffer.
23725
23726        A further 22% improvement on the 24fun string speed test.
23727        
23728        * kjs/ustring.cpp:
23729        (KJS::):
23730        (KJS::UString::Rep::create):
23731        (KJS::UString::UString):
23732        (KJS::UString::append):
23733        (KJS::UString::operator=):
23734        (KJS::UString::substr):
23735        * kjs/ustring.h:
23736        (KJS::UString::Rep::data):
23737
237382004-04-13  Maciej Stachowiak  <mjs@apple.com>
23739
23740        Reviewed by Darin.
23741
23742        - fixed <rdar://problem/3600695>: String manipulation in JavaScript 24fun test is very slow (slow)
23743        - fixed <rdar://problem/3600691>: Table generation test is really slow
23744        - fixed <rdar://problem/3600661>: 24fun date test is really slow
23745
23746        80% speedup on the string test, lesser speedups on the other two.
23747        
23748        Two different optimizations here:
23749
23750        1) Avoid large overhead of scanning strings to see if they are all
23751        ASCII before numeric conversion.
23752        
23753        * kjs/nodes.cpp:
23754        (AssignNode::evaluate): Don't convert to integer until we know for
23755        sure the operation will need it. Attempting to convert strings to
23756        numbers is a waste when they are being appended with +=.
23757
23758        2) Avoid huge cost of appending strings.
23759
23760        This is done by allowing multiple strings to share a buffer but
23761        actually use different ranges of it. The first time a string is
23762        appended to, we start leaving at least 10% extra space in the
23763        buffer, so doing N appends to the same string takes O(log N)
23764        mallocs instead of O(N).
23765        
23766        * kjs/identifier.cpp:
23767        (KJS::Identifier::equal):
23768        (KJS::Identifier::add):
23769        * kjs/ustring.cpp:
23770        (KJS::):
23771        (KJS::UCharReference::operator=):
23772        (KJS::UCharReference::ref):
23773        (KJS::UString::Rep::create):
23774        (KJS::UString::Rep::destroy):
23775        (KJS::UString::expandedSize):
23776        (KJS::UString::usedCapacity):
23777        (KJS::UString::expandCapacity):
23778        (KJS::UString::UString):
23779        (KJS::UString::null):
23780        (KJS::UString::append):
23781        (KJS::UString::operator=):
23782        (KJS::UString::toStrictUInt32):
23783        (KJS::UString::detach):
23784        (KJS::KJS::operator==):
23785        * kjs/ustring.h:
23786        (KJS::UString::Rep::data):
23787        (KJS::UString::Rep::hash):
23788
237892004-04-09  Maciej Stachowiak  <mjs@apple.com>
23790
23791        Reviewed by John.
23792
23793        - fix deployment build by avoiding deployment-only warning.
23794
23795        * kjs/scope_chain.cpp:
23796        (KJS::ScopeChain::bottom):
23797
237982004-04-09  Maciej Stachowiak  <mjs@apple.com>
23799
23800        Reviewed by John.
23801
23802        Changed things so that newly created objects get a prototype based
23803        on the scope chain of the current function, rather than the
23804        interpreter that started execution. This fixes the following bugs:
23805        
23806        <rdar://problem/3368523>: ARCH: wrong prototype used to create new objects (hang on lookup.atomica.com)
23807        <rdar://problem/3559173>: ARCH: Cannot scan using a HP Jetdirect product (JS object prototypes bind incorrectly)
23808
23809        * JavaScriptCore.pbproj/project.pbxproj:
23810        * kjs/array_object.cpp:
23811        (CompareWithCompareFunctionArguments::CompareWithCompareFunctionArguments):
23812        (ArrayProtoFuncImp::ArrayProtoFuncImp):
23813        (ArrayProtoFuncImp::call):
23814        (ArrayObjectImp::construct):
23815        * kjs/bool_object.cpp:
23816        (BooleanObjectImp::construct):
23817        * kjs/date_object.cpp:
23818        (DateProtoFuncImp::DateProtoFuncImp):
23819        (DateProtoFuncImp::call):
23820        (DateObjectImp::construct):
23821        * kjs/error_object.cpp:
23822        (ErrorObjectImp::construct):
23823        * kjs/function.cpp:
23824        (FunctionImp::FunctionImp):
23825        (FunctionImp::call):
23826        (DeclaredFunctionImp::construct):
23827        (ArgumentsImp::ArgumentsImp):
23828        (GlobalFuncImp::call):
23829        * kjs/function_object.cpp:
23830        (FunctionProtoFuncImp::call):
23831        (FunctionObjectImp::construct):
23832        * kjs/internal.cpp:
23833        (BooleanImp::toObject):
23834        (StringImp::toObject):
23835        (NumberImp::toObject):
23836        (InterpreterImp::InterpreterImp):
23837        (InterpreterImp::clear):
23838        (InterpreterImp::interpreterWithGlobalObject):
23839        * kjs/internal.h:
23840        * kjs/interpreter.cpp:
23841        (ExecState::lexicalInterpreter):
23842        * kjs/interpreter.h:
23843        (KJS::ExecState::dynamicInterpreter):
23844        (KJS::ExecState::interpreter):
23845        * kjs/math_object.cpp:
23846        (MathFuncImp::MathFuncImp):
23847        * kjs/nodes.cpp:
23848        (StatementNode::hitStatement):
23849        (StatementNode::abortStatement):
23850        (RegExpNode::evaluate):
23851        (ElementNode::evaluate):
23852        (ArrayNode::evaluate):
23853        (ObjectLiteralNode::evaluate):
23854        (PropertyValueNode::evaluate):
23855        (FunctionCallNode::evaluate):
23856        (FuncDeclNode::processFuncDecl):
23857        (FuncExprNode::evaluate):
23858        * kjs/number_object.cpp:
23859        (NumberObjectImp::construct):
23860        * kjs/object.cpp:
23861        (KJS::ObjectImp::defaultValue):
23862        (KJS::Error::create):
23863        * kjs/object_object.cpp:
23864        (ObjectObjectImp::construct):
23865        * kjs/reference.cpp:
23866        (Reference::putValue):
23867        * kjs/regexp_object.cpp:
23868        (RegExpProtoFuncImp::call):
23869        (RegExpObjectImp::arrayOfMatches):
23870        (RegExpObjectImp::construct):
23871        * kjs/scope_chain.cpp:
23872        (KJS::ScopeChain::bottom):
23873        * kjs/scope_chain.h:
23874        * kjs/string_object.cpp:
23875        (StringProtoFuncImp::StringProtoFuncImp):
23876        (StringProtoFuncImp::call):
23877        (StringObjectImp::construct):
23878
23879=== Safari-136 ===
23880
23881=== Safari-135 ===
23882
238832004-03-31  Richard Williamson   <rjw@apple.com>
23884
23885        Tedious renames based on feedback from plugin-futures list.
23886        NP_ functions are renamed with NPN_ prefix.
23887        Types prefix renamed from NP_ to NP.
23888        NPN_CreateStringWithUTF8 and NPN_SetExceptionWithUTF8 now take a length, optionally -1 if string is null terminated. 
23889        
23890        No review because this was just a renaming patch.
23891
23892        * bindings/NP_jsobject.cpp:
23893        (listFromNPArray):
23894        (jsAllocate):
23895        (identiferFromNPIdentifier):
23896        (NPN_Call):
23897        (NPN_Evaluate):
23898        (NPN_GetProperty):
23899        (NPN_SetProperty):
23900        (NPN_RemoveProperty):
23901        (NPN_ToString):
23902        (NPN_GetPropertyAtIndex):
23903        (NPN_SetPropertyAtIndex):
23904        * bindings/NP_jsobject.h:
23905        * bindings/c/c_class.cpp:
23906        (CClass::_commonInit):
23907        (CClass::classForIsA):
23908        (CClass::CClass):
23909        (CClass::methodsNamed):
23910        (CClass::fieldNamed):
23911        * bindings/c/c_class.h:
23912        * bindings/c/c_instance.cpp:
23913        (CInstance::CInstance):
23914        (CInstance::~CInstance):
23915        (CInstance::operator=):
23916        (CInstance::invokeMethod):
23917        (CInstance::defaultValue):
23918        * bindings/c/c_instance.h:
23919        (KJS::Bindings::CInstance::getObject):
23920        * bindings/c/c_runtime.cpp:
23921        (CField::valueFromInstance):
23922        (CField::setValueToInstance):
23923        * bindings/c/c_runtime.h:
23924        (KJS::Bindings::CField::CField):
23925        (KJS::Bindings::CField::name):
23926        (KJS::Bindings::CMethod::CMethod):
23927        (KJS::Bindings::CMethod::name):
23928        * bindings/c/c_utility.cpp:
23929        (coerceValueToNPString):
23930        (convertValueToNPValueType):
23931        (convertNPValueTypeToValue):
23932        * bindings/c/c_utility.h:
23933        * bindings/npruntime.cpp:
23934        (NPN_IdentifierFromUTF8):
23935        (NPN_IsValidIdentifier):
23936        (NPN_GetIdentifiers):
23937        (NPN_UTF8FromIdentifier):
23938        (NPN_CreateObject):
23939        (NPN_RetainObject):
23940        (NPN_ReleaseObject):
23941        (NPN_IsKindOfClass):
23942        (NPN_SetExceptionWithUTF8):
23943        (NPN_SetException):
23944        (numberAllocate):
23945        (NPN_CreateNumberWithInt):
23946        (NPN_CreateNumberWithFloat):
23947        (NPN_CreateNumberWithDouble):
23948        (NPN_IntFromNumber):
23949        (NPN_FloatFromNumber):
23950        (NPN_DoubleFromNumber):
23951        (stringAllocate):
23952        (NPN_CreateStringWithUTF8):
23953        (NPN_CreateStringWithUTF16):
23954        (NPN_DeallocateUTF8):
23955        (NPN_UTF8FromString):
23956        (NPN_UTF16FromString):
23957        (NPN_StringLength):
23958        (booleanAllocate):
23959        (NPN_CreateBoolean):
23960        (NPN_BoolFromBoolean):
23961        (nullAllocate):
23962        (NPN_GetNull):
23963        (undefinedAllocate):
23964        (NPN_GetUndefined):
23965        (arrayAllocate):
23966        (arrayDeallocate):
23967        (NPN_CreateArray):
23968        (NPN_CreateArrayV):
23969        (NPN_ObjectAtIndex):
23970        * bindings/npruntime.h:
23971        * bindings/runtime.cpp:
23972        (Instance::createBindingForLanguageInstance):
23973        * bindings/testbindings.cpp:
23974        (initializeIdentifiers):
23975        (myHasProperty):
23976        (myHasMethod):
23977        (myGetProperty):
23978        (mySetProperty):
23979        (logMessage):
23980        (setDoubleValue):
23981        (setIntValue):
23982        (setStringValue):
23983        (setBooleanValue):
23984        (getDoubleValue):
23985        (getIntValue):
23986        (getStringValue):
23987        (getBooleanValue):
23988        (myInvoke):
23989        (myAllocate):
23990        (myInvalidate):
23991        (myDeallocate):
23992        (main):
23993
239942004-03-31  Richard Williamson   <rjw@apple.com>
23995
23996        Changed references to NP_runtime.h to npruntime.h
23997        
23998        * JavaScriptCore.pbproj/project.pbxproj:
23999        * bindings/NP_jsobject.h:
24000        * bindings/c/c_class.h:
24001        * bindings/c/c_instance.h:
24002        * bindings/c/c_runtime.h:
24003        * bindings/c/c_utility.h:
24004        * bindings/npruntime.cpp:
24005
240062004-03-31  Richard Williamson   <rjw@apple.com>
24007
24008        Renamed NP_runtime.h to npruntime.h to match Netscape SDK.
24009
24010        * JavaScriptCore.pbproj/project.pbxproj:
24011        * bindings/NP_jsobject.h:
24012        * bindings/npruntime.cpp:
24013
24014=== Safari-134 ===
24015
240162004-03-23  Richard Williamson   <rjw@apple.com>
24017
24018        Added implementation of KJS::Value <-> NP_Object conversion functions.
24019        Augmented test program for 'C' bindings.
24020        Added asserts and parameter checking to all public API.        
24021
24022        Reviewed by Ken.
24023
24024        * JavaScriptCore.pbproj/project.pbxproj:
24025        * bindings/NP_jsobject.cpp:
24026        (NP_ToString):
24027        * bindings/NP_jsobject.h: Added.
24028        * bindings/NP_runtime.cpp:
24029        (NP_IdentifierFromUTF8):
24030        (NP_IsValidIdentifier):
24031        (NP_GetIdentifiers):
24032        (NP_CreateObject):
24033        (NP_RetainObject):
24034        (NP_ReleaseObject):
24035        (NP_IsKindOfClass):
24036        (NP_SetExceptionWithUTF8):
24037        (NP_SetException):
24038        (NP_IntFromNumber):
24039        (NP_FloatFromNumber):
24040        (NP_DoubleFromNumber):
24041        (NP_CreateStringWithUTF8):
24042        (NP_CreateStringWithUTF16):
24043        (NP_DeallocateUTF8):
24044        (NP_UTF8FromString):
24045        (NP_UTF16FromString):
24046        (NP_StringLength):
24047        (NP_BoolFromBoolean):
24048        * bindings/NP_runtime.h:
24049        * bindings/c/c_instance.cpp:
24050        (CInstance::invokeMethod):
24051        * bindings/c/c_utility.cpp:
24052        (coerceValueToNPString):
24053        (convertValueToNPValueType):
24054        (convertNPValueTypeToValue):
24055        * bindings/c/c_utility.h:
24056        * bindings/test.js:
24057        * bindings/testC.js: Added.
24058        * bindings/testbindings.cpp:
24059        (logMessage):
24060        (setDoubleValue):
24061        (setIntValue):
24062        (setStringValue):
24063        (setBooleanValue):
24064        (getDoubleValue):
24065        (getIntValue):
24066        (getStringValue):
24067        (getBooleanValue):
24068        (myInterfaceInvoke):
24069        (myInterfaceAllocate):
24070
24071=== Safari-133 ===
24072
240732004-03-19  Darin Adler  <darin@apple.com>
24074
24075        Reviewed by Ken.
24076
24077        - fixed problem with methods like setUTCHour
24078
24079        * kjs/date_object.cpp: (DateProtoFuncImp::call): Fix conversion back to time_t to use the appropriate
24080        GMT vs. local time function based on the utc flag.
24081
240822004-03-17  Richard Williamson   <rjw@apple.com>
24083
24084        Added a context parameter to result callbacks use by JavaScriptObject functions.  This was a change requested by Eric Carlson on the QT plugin team.
24085
24086        Reviewed by Ken.
24087
24088        * bindings/NP_jsobject.cpp:
24089        (NP_Call):
24090        (NP_Evaluate):
24091        (NP_GetProperty):
24092        (NP_ToString):
24093        (NP_GetPropertyAtIndex):
24094        * bindings/NP_runtime.h:
24095
240962004-03-16  Richard Williamson   <rjw@apple.com>
24097
24098        Fixed 3590169.  Regression (crash) caused by the switch to MethodLists.  Crash when attempting to invoke a method from JavaScript to Java that is not implemented.
24099
24100        Reviewed by John.
24101
24102        * bindings/jni/jni_class.cpp:
24103        (JavaClass::methodsNamed):
24104
241052004-03-15  Richard Williamson   <rjw@apple.com>
24106
24107        Fixed 3570854.  Don't attempt to convert Null to strings.  We
24108        were incorrectly converting to "Null".
24109
24110        Actually fixed by Scott Kovatch.
24111
24112        Reviewed by Richard.
24113
24114        * bindings/jni/jni_utility.cpp:
24115        (KJS::Bindings::convertValueToJValue):
24116
24117=== Safari-132 ===
24118
241192004-03-11  Richard Williamson   <rjw@apple.com>
24120
24121        Stitched together the NP stuff to our language independent
24122        JavaScript binding stuff.  Very close to being done.
24123        
24124        Added program to test C bindings (and NP stuff).  Just tests
24125        properties.  Will add methods and JavaScript access, etc.
24126
24127        Updated Makefile.am to account for new bindings/c directory.
24128
24129        Change NP_UTF8 from "const char *" to "char" to allow for
24130        declarations like "const NP_UTF8 *" and "NP_UTF8 *".  Ditto
24131        for NP_UTF16.
24132
24133        Added NP_IsValidIdentifier().
24134
24135        Reviewed by Chris.
24136
24137        * JavaScriptCore.pbproj/project.pbxproj:
24138        * Makefile.am:
24139        * bindings/NP_jsobject.cpp:
24140        (identiferFromNPIdentifier):
24141        (NP_Evaluate):
24142        * bindings/NP_runtime.cpp:
24143        (NP_IdentifierFromUTF8):
24144        (NP_IsValidIdentifier):
24145        (NP_GetIdentifiers):
24146        (NP_UTF8FromIdentifier):
24147        (NP_SetExceptionWithUTF8):
24148        (NP_SetException):
24149        (NP_CreateStringWithUTF8):
24150        (NP_CreateStringWithUTF16):
24151        (NP_UTF8FromString):
24152        (NP_UTF16FromString):
24153        * bindings/NP_runtime.h:
24154        * bindings/c/c_class.cpp: Added.
24155        (CClass::_commonDelete):
24156        (CClass::_commonCopy):
24157        (CClass::_commonInit):
24158        (_createClassesByIsAIfNecessary):
24159        (CClass::classForIsA):
24160        (CClass::CClass):
24161        (CClass::name):
24162        (CClass::methodsNamed):
24163        (CClass::fieldNamed):
24164        * bindings/c/c_class.h: Added.
24165        (KJS::Bindings::CClass::~CClass):
24166        (KJS::Bindings::CClass::CClass):
24167        (KJS::Bindings::CClass::operator=):
24168        (KJS::Bindings::CClass::constructorAt):
24169        (KJS::Bindings::CClass::numConstructors):
24170        * bindings/c/c_instance.cpp: Added.
24171        (CInstance::CInstance):
24172        (CInstance::~CInstance):
24173        (CInstance::operator=):
24174        (CInstance::getClass):
24175        (CInstance::begin):
24176        (CInstance::end):
24177        (CInstance::invokeMethod):
24178        (CInstance::defaultValue):
24179        (CInstance::stringValue):
24180        (CInstance::numberValue):
24181        (CInstance::booleanValue):
24182        (CInstance::valueOf):
24183        * bindings/c/c_instance.h: Added.
24184        (KJS::Bindings::CInstance::getObject):
24185        * bindings/c/c_runtime.cpp: Added.
24186        (CField::valueFromInstance):
24187        (CField::setValueToInstance):
24188        * bindings/c/c_runtime.h: Added.
24189        (KJS::Bindings::CField::CField):
24190        (KJS::Bindings::CField::name):
24191        (KJS::Bindings::CField::type):
24192        (KJS::Bindings::CMethod::CMethod):
24193        (KJS::Bindings::CMethod::name):
24194        (KJS::Bindings::CMethod::numParameters):
24195        * bindings/c/c_utility.cpp: Added.
24196        (coerceValueToNPValueType):
24197        (convertValueToNPValueType):
24198        (convertNPValueTypeToValue):
24199        * bindings/c/c_utility.h: Added.
24200        * bindings/make_testbindings:
24201        * bindings/runtime.cpp:
24202        (Instance::createBindingForLanguageInstance):
24203        * bindings/runtime.h:
24204        (KJS::Bindings::Instance::):
24205        * bindings/testbindings.cpp: Added.
24206        (initializeIdentifiers):
24207        (myInterfaceHasProperty):
24208        (myInterfaceHasMethod):
24209        (myInterfaceGetProperty):
24210        (myInterfaceSetProperty):
24211        (myInterfaceInvoke):
24212        (myInterfaceAllocate):
24213        (myInterfaceInvalidate):
24214        (myInterfaceDeallocate):
24215        (GlobalImp::className):
24216        (readJavaScriptFromFile):
24217        (main):
24218
242192004-03-10  Richard Williamson   <rjw@apple.com>
24220
24221        Made changes to support new asychronous approach to calls from
24222        plugin to JavaScript
24223
24224        Reviewed by Chris.
24225
24226        * bindings/NP_jsobject.cpp:
24227        (NP_Call):
24228        (NP_Evaluate):
24229        (NP_GetProperty):
24230        (NP_ToString):
24231        (NP_GetPropertyAtIndex):
24232        * bindings/NP_runtime.h:
24233        * bindings/make_testbindings:
24234        * bindings/runtime.cpp:
24235        (Instance::createBindingForLanguageInstance):
24236
242372004-03-10  Richard Williamson   <rjw@apple.com>
24238
24239        Updated header to include proposed changes from
24240        plugin-futures list.  Calls from plugin to JavaScript
24241        are now asynchronous.
24242
24243        Reviewed by Chris.
24244
24245        * bindings/NP_runtime.h:
24246
24247=== Safari-131 ===
24248
242492004-03-04  Richard Williamson   <rjw@apple.com>
24250
24251        Implementation of NP_JavaScriptObject.  This is the 'C' class
24252        that wraps a JavaScript object.
24253
24254        Reviewed by Chris.
24255
24256        * JavaScriptCore.pbproj/project.pbxproj:
24257        * bindings/NP_jsobject.cpp: Added.
24258        (coerceValueToNPValueType):
24259        (convertValueToNPValueType):
24260        (convertNPValueTypeToValue):
24261        (listFromNPArray):
24262        (jsAllocate):
24263        (jsDeallocate):
24264        (identiferFromNPIdentifier):
24265        (NP_Call):
24266        (NP_Evaluate):
24267        (NP_GetProperty):
24268        (NP_SetProperty):
24269        (NP_RemoveProperty):
24270        (NP_ToString):
24271        (NP_GetPropertyAtIndex):
24272        (NP_SetPropertyAtIndex):
24273        * bindings/NP_runtime.cpp:
24274        (NP_ObjectAtIndex):
24275        * bindings/NP_runtime.h:
24276        * bindings/runtime_object.h:
24277
242782004-03-04  Richard Williamson   <rjw@apple.com>
24279
24280        Added NP_Array implementation.  
24281
24282        Changed NP_Boolean to just depend on two static instances, no
24283        space is required for values.
24284
24285        Reviewed by Chris.
24286
24287        * bindings/NP_runtime.cpp:
24288        (NP_CreateBoolean):
24289        (NP_BoolFromBoolean):
24290        (arrayAllocate):
24291        (arrayDeallocate):
24292        (NP_CreateArray):
24293        (NP_CreateArrayV):
24294        (NP_ObjectAtIndex):
24295        * bindings/NP_runtime.h:
24296
242972004-03-03  Darin Adler  <darin@apple.com>
24298
24299        Reviewed by Vicki.
24300
24301        * English.lproj/InfoPlist.strings: Removed. No need to localize the version and
24302        copyright string, and that's all that was in here.
24303        * JavaScriptCore.pbproj/project.pbxproj: Removed InfoPlist.strings from build.
24304
243052004-03-03  Richard Williamson   <rjw@apple.com>
24306
24307        More 'C' binding implementation.  Fleshed out all the
24308        'primitive' data types.
24309
24310        Reviewed by Chris.
24311
24312        * bindings/NP_runtime.cpp:
24313        (NP_ReleaseObject):
24314        (numberAllocate):
24315        (stringAllocate):
24316        (stringDeallocate):
24317        (NP_CreateStringWithUTF8):
24318        (NP_CreateStringWithUTF16):
24319        (NP_UTF8FromString):
24320        (NP_UTF16FromString):
24321        (NP_StringLength):
24322        (booleanAllocate):
24323        (booleanDeallocate):
24324        (NP_CreateBoolean):
24325        (NP_BoolFromBoolean):
24326        (nullAllocate):
24327        (nullDeallocate):
24328        (NP_GetNull):
24329        (undefinedAllocate):
24330        (undefinedDeallocate):
24331        (NP_GetUndefined):
24332        * bindings/NP_runtime.h:
24333
243342004-03-03  Richard Williamson   <rjw@apple.com>
24335
24336        More 'C' binding implementation.
24337
24338        Reviewed by Chris.
24339
24340        * bindings/NP_runtime.cpp:
24341        (identifierEqual):
24342        (identifierHash):
24343        (getIdentifierDictionary):
24344        (NP_IdentifierFromUTF8):
24345        (NP_UTF8FromIdentifier):
24346        (NP_CreateObject):
24347        (NP_ReleaseObject):
24348        (NP_IsKindOfClass):
24349        (numberCreate):
24350        (NP_CreateNumberWithInt):
24351        (NP_CreateNumberWithFloat):
24352        (NP_CreateNumberWithDouble):
24353        (NP_IntFromNumber):
24354        (NP_FloatFromNumber):
24355        (NP_DoubleFromNumber):
24356        * bindings/NP_runtime.h:
24357
243582004-03-02  Richard Williamson   <rjw@apple.com>
24359
24360        Removed retain/release from NP_Class.  Classes will not be allowed to implement their
24361        own customer retain/release scheme.
24362
24363        Reviewed by Chris.
24364
24365        * bindings/NP_runtime.cpp:
24366        (NP_RetainObject):
24367        (NP_ReleaseObject):
24368        * bindings/NP_runtime.h:
24369
243702004-03-02  Richard Williamson   <rjw@apple.com>
24371
24372        C binding API.  Partial implementation.
24373
24374        Completed ObjectiveC bindings (not based on the C API).  These will re-implemented over the C binding API, but I wanted to get this code in the tree.
24375
24376        Factored root object reference counting scheme.  It is now useful independent
24377        of LiveConnect.
24378
24379        Reviewed by Chris.
24380
24381        * JavaScriptCore.pbproj/project.pbxproj:
24382        * bindings/NP_runtime.cpp: Added.
24383        (NP_IdentifierFromUTF8):
24384        (NP_GetIdentifiers):
24385        (NP_UTF8FromIdentifier):
24386        (NP_CreateObject):
24387        (NP_RetainObject):
24388        (NP_ReleaseObject):
24389        (NP_IsKindOfClass):
24390        (NP_SetException):
24391        (NP_Call):
24392        (NP_Evaluate):
24393        (NP_GetProperty):
24394        (NP_SetProperty):
24395        (NP_RemoveProperty):
24396        (NP_ToString):
24397        (NP_GetPropertyAtIndex):
24398        (NP_SetPropertyAtIndex):
24399        (NP_CreateNumberWithInt):
24400        (NP_CreateNumberWithFloat):
24401        (NP_CreateNumberWithDouble):
24402        (NP_IntFromNumber):
24403        (NP_FloatFromNumber):
24404        (NP_DoubleFromNumber):
24405        (NP_CreateStringWithUTF8):
24406        (NP_CreateStringWithUTF16):
24407        (NP_UTF8FromString):
24408        (NP_UTF16FromString):
24409        (NP_CreateBoolean):
24410        (NP_BoolFromBoolean):
24411        (NP_GetNull):
24412        (NP_GetUndefined):
24413        (NP_CreateArray):
24414        (NP_CreateArrayV):
24415        (NP_ObjectAtIndex):
24416        * bindings/NP_runtime.h: Added.
24417        * bindings/jni/jni_jsobject.cpp:
24418        (JSObject::invoke):
24419        (JSObject::finalize):
24420        (JSObject::createNative):
24421        (JSObject::convertValueToJObject):
24422        * bindings/jni/jni_jsobject.h:
24423        * bindings/objc/objc_jsobject.h:
24424        * bindings/objc/objc_jsobject.mm:
24425        (rootForView):
24426        (windowJavaScriptObject):
24427        (-[JavaScriptObject initWithObjectImp:KJS::root:Bindings::]):
24428        (-[JavaScriptObject dealloc]):
24429        (-[JavaScriptObject _convertValueToObjcValue:KJS::]):
24430        (-[JavaScriptObject call:arguments:]):
24431        (-[JavaScriptObject evaluate:]):
24432        (-[JavaScriptObject getMember:]):
24433        (-[JavaScriptObject setMember:value:]):
24434        (-[JavaScriptObject removeMember:]):
24435        (-[JavaScriptObject toString]):
24436        (-[JavaScriptObject getSlot:]):
24437        (-[JavaScriptObject setSlot:value:]):
24438        * bindings/objc/objc_utility.h:
24439        * bindings/objc/objc_utility.mm:
24440        (KJS::Bindings::convertValueToObjcValue):
24441        * bindings/runtime_root.cpp: Added.
24442        (getReferencesByRootDictionary):
24443        (getReferencesDictionary):
24444        (KJS::Bindings::findReferenceDictionary):
24445        (KJS::Bindings::rootForImp):
24446        (KJS::Bindings::addNativeReference):
24447        (KJS::Bindings::removeNativeReference):
24448        (completedJavaScriptAccess):
24449        (initializeJavaScriptAccessLock):
24450        (lockJavaScriptAccess):
24451        (unlockJavaScriptAccess):
24452        (RootObject::dispatchToJavaScriptThread):
24453        (performJavaScriptAccess):
24454        (RootObject::setFindRootObjectForNativeHandleFunction):
24455        (RootObject::removeAllNativeReferences):
24456        * bindings/runtime_root.h: Added.
24457        (KJS::Bindings::RootObject::RootObject):
24458        (KJS::Bindings::RootObject::~RootObject):
24459        (KJS::Bindings::RootObject::setRootObjectImp):
24460        (KJS::Bindings::RootObject::rootObjectImp):
24461        (KJS::Bindings::RootObject::setInterpreter):
24462        (KJS::Bindings::RootObject::interpreter):
24463        (KJS::Bindings::RootObject::findRootObjectForNativeHandleFunction):
24464        (KJS::Bindings::RootObject::runLoop):
24465        (KJS::Bindings::RootObject::performJavaScriptSource):
24466
24467=== Safari-130 ===
24468
24469=== Safari-129 ===
24470
244712004-02-18  Richard Williamson   <rjw@apple.com>
24472
24473        Added NSNumber/Number conversion.
24474
24475        Removed some unnecessary KJS:: namespace specifiers.
24476
24477        Reviewed by Ken.
24478
24479        * bindings/objc/objc_utility.mm:
24480        (KJS::Bindings::convertValueToObjcValue):
24481        (KJS::Bindings::convertObjcValueToValue):
24482        * bindings/runtime_array.h:
24483
244842004-02-18  Richard Williamson   <rjw@apple.com>
24485
24486        Added support for export NSArrays.
24487
24488        Updated valueAt() to take an ExecState so we can throw
24489        JS exceptions.
24490
24491        Implemented excludeSelectorFromJavaScript: in ObjcClass.  This allows
24492        ObjectiveC classes to control the visibility of their methods in 
24493        JavaScript.
24494
24495        Reviewed by Ken.
24496
24497        * bindings/jni/jni_runtime.cpp:
24498        (JavaField::valueFromInstance):
24499        (JavaArray::valueAt):
24500        * bindings/jni/jni_runtime.h:
24501        * bindings/objc/objc_class.mm:
24502        (ObjcClass::methodsNamed):
24503        * bindings/objc/objc_runtime.h:
24504        (KJS::Bindings::ObjcArray::getObjcArray):
24505        * bindings/objc/objc_runtime.mm:
24506        (ObjcField::valueFromInstance):
24507        (ObjcField::setValueToInstance):
24508        (ObjcArray::ObjcArray):
24509        (ObjcArray::~ObjcArray):
24510        (ObjcArray::operator=):
24511        (ObjcArray::setValueAt):
24512        (ObjcArray::valueAt):
24513        (ObjcArray::getLength):
24514        * bindings/objc/objc_utility.mm:
24515        (KJS::Bindings::convertValueToObjcValue):
24516        (KJS::Bindings::convertObjcValueToValue):
24517        * bindings/runtime.cpp:
24518        (Instance::getValueOfField):
24519        * bindings/runtime.h:
24520        * bindings/runtime_array.cpp:
24521        (RuntimeArrayImp::get):
24522        * bindings/runtime_object.cpp:
24523        (RuntimeObjectImp::get):
24524
245252004-02-17  Richard Williamson   <rjw@apple.com>
24526
24527        Added String <-> NSString conversion.
24528        Added tests of String <-> NSString conversion to test program.
24529
24530        Reviewed by Chris.
24531
24532        * bindings/objc/objc_utility.mm:
24533        (KJS::Bindings::convertValueToObjcValue):
24534        (KJS::Bindings::convertObjcValueToValue):
24535        * bindings/test.js:
24536        * bindings/testbindings.mm:
24537        (-[MyFirstInterface getString]):
24538
245392004-02-15  Darin Adler  <darin@apple.com>
24540
24541        Reviewed by Dave.
24542
24543        * JavaScriptCore.pbproj/project.pbxproj: Tweak build styles a bit, fixing OptimizedWithSymbols,
24544        and removing redundant settings of things that match defaults in other build styles.
24545
245462004-02-13  Richard Williamson   <rjw@apple.com>
24547
24548        Work towards the JavaScript ObjC bindings.  The bindings now work for 
24549        simple scalar types.  testbindings.mm is an illustration of how the 
24550        bindings work.
24551
24552        Reviewed by Ken.
24553
24554        * JavaScriptCore.pbproj/project.pbxproj:
24555        * Makefile.am:
24556        * bindings/jni/jni_class.cpp:
24557        (JavaClass::methodsNamed):
24558        * bindings/jni/jni_class.h:
24559        * bindings/jni/jni_instance.cpp:
24560        (JavaInstance::invokeMethod):
24561        * bindings/jni/jni_instance.h:
24562        * bindings/jni/jni_runtime.h:
24563        (KJS::Bindings::JavaMethod::returnType):
24564        * bindings/make_testbindings: Added.
24565        * bindings/objc/objc_class.h: Added.
24566        (KJS::Bindings::ObjcClass::~ObjcClass):
24567        (KJS::Bindings::ObjcClass::ObjcClass):
24568        (KJS::Bindings::ObjcClass::operator=):
24569        (KJS::Bindings::ObjcClass::constructorAt):
24570        (KJS::Bindings::ObjcClass::numConstructors):
24571        * bindings/objc/objc_class.mm: Added.
24572        (ObjcClass::_commonDelete):
24573        (ObjcClass::_commonCopy):
24574        (ObjcClass::_commonInit):
24575        (_createClassesByIsAIfNecessary):
24576        (ObjcClass::classForIsA):
24577        (ObjcClass::ObjcClass):
24578        (ObjcClass::name):
24579        (ObjcClass::methodsNamed):
24580        (ObjcClass::fieldNamed):
24581        * bindings/objc/objc_header.h: Added.
24582        * bindings/objc/objc_instance.h: Added.
24583        (KJS::Bindings::ObjcInstance::getObject):
24584        * bindings/objc/objc_instance.mm: Added.
24585        (ObjcInstance::ObjcInstance):
24586        (ObjcInstance::~ObjcInstance):
24587        (ObjcInstance::operator=):
24588        (ObjcInstance::begin):
24589        (ObjcInstance::end):
24590        (ObjcInstance::getClass):
24591        (ObjcInstance::invokeMethod):
24592        (ObjcInstance::defaultValue):
24593        (ObjcInstance::stringValue):
24594        (ObjcInstance::numberValue):
24595        (ObjcInstance::booleanValue):
24596        (ObjcInstance::valueOf):
24597        * bindings/objc/objc_jsobject.h: Added.
24598        * bindings/objc/objc_jsobject.mm: Added.
24599        * bindings/objc/objc_runtime.h:
24600        (KJS::Bindings::ObjcField::~ObjcField):
24601        (KJS::Bindings::ObjcField::ObjcField):
24602        (KJS::Bindings::ObjcField::operator=):
24603        (KJS::Bindings::ObjcMethod::ObjcMethod):
24604        (KJS::Bindings::ObjcMethod::~ObjcMethod):
24605        (KJS::Bindings::ObjcMethod::operator=):
24606        * bindings/objc/objc_runtime.mm: Added.
24607        (ObjcMethod::ObjcMethod):
24608        (ObjcMethod::name):
24609        (ObjcMethod::numParameters):
24610        (ObjcMethod::getMethodSignature):
24611        (ObjcField::ObjcField):
24612        (ObjcField::name):
24613        (ObjcField::type):
24614        (ObjcField::valueFromInstance):
24615        (ObjcField::setValueToInstance):
24616        * bindings/objc/objc_utility.h: Added.
24617        (KJS::Bindings::):
24618        * bindings/objc/objc_utility.mm: Added.
24619        (KJS::Bindings::JSMethodNameToObjCMethodName):
24620        (KJS::Bindings::convertValueToObjcValue):
24621        (KJS::Bindings::convertObjcValueToValue):
24622        (KJS::Bindings::objcValueTypeForType):
24623        * bindings/runtime.cpp:
24624        (MethodList::MethodList):
24625        (MethodList::operator=):
24626        (Instance::setValueOfField):
24627        (Instance::createBindingForLanguageInstance):
24628        (Instance::createRuntimeObject):
24629        * bindings/runtime.h:
24630        * bindings/runtime_method.cpp:
24631        (RuntimeMethodImp::RuntimeMethodImp):
24632        (RuntimeMethodImp::get):
24633        (RuntimeMethodImp::call):
24634        * bindings/runtime_method.h:
24635        * bindings/runtime_object.cpp:
24636        (RuntimeObjectImp::get):
24637        (RuntimeObjectImp::hasProperty):
24638        * bindings/test.js: Added.
24639        * bindings/testbindings.mm: Added.
24640        (-[MySecondInterface init]):
24641        (-[MyFirstInterface init]):
24642        (-[MyFirstInterface dealloc]):
24643        (+[MyFirstInterface JavaScriptNameForSelector:]):
24644        (-[MyFirstInterface getInt]):
24645        (-[MyFirstInterface setInt:]):
24646        (-[MyFirstInterface getMySecondInterface]):
24647        (-[MyFirstInterface logMessage:]):
24648        (GlobalImp::className):
24649        (readJavaScriptFromFile):
24650        (main):
24651
24652=== Safari-128 ===
24653
246542004-02-08  Darin Adler  <darin@apple.com>
24655
24656        Reviewed by Dave.
24657
24658        - fixed things seen in the profile, for a total speedup of 4% on cvs-base (including changes across all projects)
24659
24660        * JavaScriptCorePrefix.h: Add a workaround for a bug in our system headers that prevents the <ctype.h>
24661        macros from working right in C++ code that uses the <cctype> header.
24662
24663        * kjs/ustring.cpp:
24664        (KJS::inlineUTF8SequenceLengthNonASCII): Added.
24665        (KJS::UTF8SequenceLengthNonASCII): Added.
24666        (KJS::inlineUTF8SequenceLength): Added.
24667        (KJS::UTF8SequenceLength): Calls inlineUTF8SequenceLengthNonASCII now.
24668        (KJS::decodeUTF8Sequence): Use new inlineUTF8SequenceLengthNonASCII; faster for ASCII.
24669        (KJS::createSortedOffsetsArray): Add special case for 1, 2, and 3 offsets, so we don't do qsort for those.
24670        (KJS::convertUTF16OffsetsToUTF8Offsets): Use new inlineUTF8SequenceLengthNonASCII; faster for ASCII.
24671        (KJS::convertUTF8OffsetsToUTF16Offsets): Use new inlineUTF8SequenceLengthNonASCII; faster for ASCII.
24672
24673        - fixed the test program so it won't hit the interpreter lock assertion
24674
24675        * kjs/testkjs.cpp: (main): Just lock around the whole thing, since the test is singly threaded.
24676
24677=== Safari-127 ===
24678
246792004-02-06  Richard Williamson   <rjw@apple.com>
24680
24681        Fixed 3550242 and 3546977.  The first diff prevents an assert from firing.  The second diff prevents a JavaScript exception, caused be an invalid conversion, which has a downstream consequence of preventing a valid conversion.
24682
24683        Reviewed by John.
24684
24685        * bindings/jni/jni_jsobject.cpp:
24686        (JSObject::toString):
24687        * bindings/jni/jni_utility.cpp:
24688        (KJS::Bindings::convertValueToJValue):
24689
246902004-02-02  Darin Adler  <darin@apple.com>
24691
24692        Reviewed by Maciej.
24693
24694        - fixed <rdar://problem/3546613>: array of negative size leads to crash (test page at oscar.the-rileys.net)
24695
24696        * kjs/array_object.cpp:
24697        (ArrayInstanceImp::ArrayInstanceImp): If the length is greater than 10,000, don't allocate an array until
24698        we start putting values in. This prevents new Array(2147483647) from causing trouble.
24699        (ArrayObjectImp::construct): Check number as described in specification, and raise a range error if the
24700        number is out of range. This prevents new Array(-1) from causing trouble.
24701
24702        - fixed <rdar://problem/3545756>: Math.round screws up on numbers bigger than 2^31 (incorrect results on HP-35 calculator page)
24703
24704        * kjs/math_object.cpp: (MathFuncImp::call): Change implementation to be much simpler and not involve
24705        casting to int. Results now match those in other browsers.
24706
247072004-02-02  Darin Adler  <darin@apple.com>
24708
24709        Reviewed by Maciej.
24710
24711        - fixed <rdar://problem/3519285>: integer operations on large negative numbers yield bad results (discovered with "HTMLCrypt")
24712        - fixed other related overflow issues
24713
24714        * kjs/value.h: Changed return types of toInteger, toInt32, toUInt32, and toUInt16.
24715        * kjs/value.cpp:
24716        (ValueImp::toInteger): Change to return a double, since this operation, from the ECMA specification,
24717        must not restrict values to the range of a particular integer type.
24718        (ValueImp::toInt32): Used a sized integer type for the result of this function, and also added
24719        proper handling for negative results from fmod.
24720        (ValueImp::toUInt32): Ditto.
24721        (ValueImp::toUInt16): Ditto.
24722        (ValueImp::dispatchToUInt32): Changed result type from unsigned to uint32_t.
24723
24724        * kjs/array_object.cpp: (ArrayProtoFuncImp::call): Use a double instead of an int to handle
24725        out-of-integer-range values better in the slice function.
24726        * kjs/internal.cpp: (KJS::roundValue): Streamline the function, handling NAN and infinity properly.
24727        * kjs/number_object.cpp: (NumberProtoFuncImp::call): Use a double instead of an int to handle
24728        out-of-integer-range values better in the toString function.
24729        * kjs/string_object.cpp: (StringProtoFuncImp::call): Use a double instead of an int to handle
24730        out-of-integer-range values better in the charAt, charCodeAt, indexOf, lastIndexOf, slice,
24731        and substr functions.
24732
24733=== Safari-126 ===
24734
247352004-01-30  Richard Williamson   <rjw@apple.com>
24736
24737        Fixed 3542044.  Create KJS::String using UString constructor instead of passing UTF8 string to char* constructor.
24738
24739        Reviewed by Darin.
24740
24741        * bindings/jni/jni_instance.cpp:
24742        (JavaInstance::stringValue):
24743
247442004-01-26  Darin Adler  <darin@apple.com>
24745
24746        * Makefile.am: Switch from pbxbuild to xcodebuild.
24747
247482004-01-22  Richard Williamson   <rjw@apple.com>
24749
24750        Added stubs for ObjC language binding to JavaScript.
24751
24752        * JavaScriptCore.pbproj/project.pbxproj:
24753        * bindings/jni/jni_runtime.h:
24754        * bindings/objc/objc_runtime.h: Added.
24755        (KJS::Bindings::ObjcParameter::ObjcParameter):
24756        (KJS::Bindings::ObjcParameter::~ObjcParameter):
24757        (KJS::Bindings::ObjcParameter::operator=):
24758        (KJS::Bindings::ObjcParameter::type):
24759        (KJS::Bindings::ObjcConstructor::ObjcConstructor):
24760        (KJS::Bindings::ObjcConstructor::~ObjcConstructor):
24761        (KJS::Bindings::ObjcConstructor::_commonCopy):
24762        (KJS::Bindings::ObjcConstructor::operator=):
24763        (KJS::Bindings::ObjcConstructor::value):
24764        (KJS::Bindings::ObjcConstructor::parameterAt):
24765        (KJS::Bindings::ObjcConstructor::numParameters):
24766        (KJS::Bindings::ObjcField::ObjcField):
24767        (KJS::Bindings::ObjcField::~ObjcField):
24768        * bindings/runtime.h:
24769
247702004-01-22  Richard Williamson   <rjw@apple.com>
24771
24772        Simplified JavaString by using UString as backing store.  This
24773        revealed a bug in CString's assignment operator which I fixed.
24774
24775        Removed some dead code.
24776 
24777        Reviewed by John.
24778
24779        * bindings/jni/jni_runtime.h:
24780        (KJS::Bindings::JavaString::JavaString):
24781        (KJS::Bindings::JavaString::_commonInit):
24782        (KJS::Bindings::JavaString::UTF8String):
24783        (KJS::Bindings::JavaString::uchars):
24784        (KJS::Bindings::JavaString::length):
24785        (KJS::Bindings::JavaString::ustring):
24786        * bindings/runtime_object.cpp:
24787        (RuntimeObjectImp::RuntimeObjectImp):
24788        * bindings/runtime_object.h:
24789        * kjs/ustring.cpp:
24790        (KJS::CString::CString):
24791        (KJS::CString::operator=):
24792
24793=== Safari-125 ===
24794
24795=== Safari-124 ===
24796
247972004-01-16  Richard Williamson   <rjw@apple.com>
24798
24799        Fixed 3525853.  We weren't handling mapping to overloaded Java
24800        methods very well.  Even though this is undefined the other
24801        browsers support it.  Also fixed a bug with returning arrays
24802        from Java functions.
24803
24804        Reviewed by John.
24805
24806        * bindings/jni/jni_class.cpp:
24807        (JavaClass::_commonInit):
24808        (JavaClass::methodsNamed):
24809        * bindings/jni/jni_class.h:
24810        * bindings/jni/jni_instance.cpp:
24811        (JavaInstance::invokeMethod):
24812        * bindings/jni/jni_instance.h:
24813        * bindings/jni/jni_runtime.cpp:
24814        (JavaArray::convertJObjectToArray):
24815        (JavaField::valueFromInstance):
24816        (JavaMethod::signature):
24817        (JavaArray::valueAt):
24818        * bindings/jni/jni_runtime.h:
24819        * bindings/jni_jsobject.cpp:
24820        (JSObject::call):
24821        (JSObject::convertJObjectToValue):
24822        * bindings/runtime.cpp:
24823        (MethodList::addMethod):
24824        (MethodList::length):
24825        (MethodList::methodAt):
24826        (MethodList::~MethodList):
24827        * bindings/runtime.h:
24828        (KJS::Bindings::MethodList::MethodList):
24829        * bindings/runtime_method.cpp:
24830        (RuntimeMethodImp::RuntimeMethodImp):
24831        (RuntimeMethodImp::get):
24832        (RuntimeMethodImp::call):
24833        * bindings/runtime_method.h:
24834        * bindings/runtime_object.cpp:
24835        (RuntimeObjectImp::get):
24836        (RuntimeObjectImp::hasProperty):
24837
248382004-01-16  Richard Williamson   <rjw@apple.com>
24839
24840        Fixed 3531229.  Another place that needs the  Push/PopLocalFrame
24841        protection implemented for 3530401.
24842
24843        Reviewed by John.
24844
24845        * bindings/runtime_method.cpp:
24846        (RuntimeMethodImp::call):
24847
248482004-01-15  Richard Williamson   <rjw@apple.com>
24849
24850        Fixed 3530401.  JNI doesn't cleanup local refs created on the
24851        main thread.   IMO this is a bad bug in our JMI implementation.
24852
24853        To work-around the problem I explicitly delete all local refs.
24854        Further, I've added Push/PopLocalFrame calls to catch any refs
24855        that I may have missed.  This will guarantee that we don't leak
24856        any Java references.
24857
24858        Reviewed by John.
24859
24860        * bindings/jni/jni_class.cpp:
24861        (JavaClass::_commonInit):
24862        (JavaClass::JavaClass):
24863        * bindings/jni/jni_instance.cpp:
24864        (JavaInstance::begin):
24865        (JavaInstance::end):
24866        * bindings/jni/jni_instance.h:
24867        * bindings/jni/jni_runtime.cpp:
24868        (JavaConstructor::JavaConstructor):
24869        (JavaMethod::JavaMethod):
24870        * bindings/jni_jsobject.cpp:
24871        (JSObject::listFromJArray):
24872        * bindings/runtime.h:
24873        (KJS::Bindings::Instance::begin):
24874        (KJS::Bindings::Instance::end):
24875        * bindings/runtime_object.cpp:
24876        (RuntimeObjectImp::get):
24877        (RuntimeObjectImp::put):
24878        (RuntimeObjectImp::canPut):
24879        (RuntimeObjectImp::hasProperty):
24880        (RuntimeObjectImp::defaultValue):
24881
248822004-01-15  Vicki Murley  <vicki@apple.com>
24883
24884        Reviewed by Darin.
24885
24886        * JavaScriptCore.pbproj/project.pbxproj: Update copyright date to 2004.
24887
248882004-01-14  Richard Williamson   <rjw@apple.com>
24889        
24890        Fixed 3529466.  With recent changes to Java plugin we must no
24891        longer call DeleteLocalRef().  Not a problem, it was an optimization anyway.
24892
24893        Reviewed by John.
24894
24895        * bindings/jni/jni_instance.cpp:
24896        (JObjectWrapper::JObjectWrapper):
24897
24898=== Safari-122 ===
24899
249002004-01-14  Richard Williamson   <rjw@apple.com>
24901
24902        Fixed 3529010.
24903
24904        Finalize may be called on an JSObject after we've already remove all our references.  The assert in this case is firing because we've received a finalize call from Java for an instance that we no longer know about.  The fix is to check in finalize that we're getting a call on an instance that we still care about.
24905
24906        Reviewed by John.
24907
24908        * bindings/jni_jsobject.cpp:
24909        (addJavaReference):
24910        (removeJavaReference):
24911        (RootObject::removeAllJavaReferencesForRoot):
24912        (JSObject::invoke):
24913
249142004-01-13  Richard Williamson   <rjw@apple.com>
24915
24916        Fixed 3528324. 
24917
24918        The run loop that is used to execute JavaScript (in practice, always the main run loop) is held in a class variable.  It is set and retained once and should not be released.  Unfortunately is it being released when the 'root' object on a LiveConnect applet is released.  This has the symptom of eventually causing an deallocation of the main run loop!  Usually after about 5 instantiations/destructions of a LiveConnect applet.  The CFRelease of the run loop was removed.
24919
24920        Reviewed by Hyatt.
24921
24922        * bindings/jni_jsobject.h:
24923        (KJS::Bindings::RootObject::~RootObject):
24924
24925=== Safari-121 ===
24926
24927=== Safari-120 ===
24928
249292004-01-06  Richard Williamson   <rjw@apple.com>
24930
24931        Fixed 3521814.  Finalize messages weren't being dispatched!
24932
24933        Reviewed by John.
24934
24935        * bindings/jni_jsobject.cpp:
24936        (JSObject::invoke):
24937
249382004-01-05  Richard Williamson   <rjw@apple.com>
24939
24940        Added cache of JNI method IDs to minimize allocations.  This mitigates the problem
24941        described by 3515579.
24942
24943        Also cleanup up logging of Java exceptions.
24944
24945        Reviewed by John.
24946
24947        * bindings/jni/jni_class.cpp:
24948        (JavaClass::classForInstance):
24949        * bindings/jni/jni_instance.cpp:
24950        (JavaInstance::JavaInstance):
24951        (JavaInstance::getClass):
24952        (JavaInstance::invokeMethod):
24953        (JObjectWrapper::JObjectWrapper):
24954        (JObjectWrapper::~JObjectWrapper):
24955        * bindings/jni/jni_instance.h:
24956        (KJS::Bindings::JavaInstance::operator=):
24957        * bindings/jni/jni_runtime.cpp:
24958        (JavaMethod::JavaMethod):
24959        (JavaMethod::methodID):
24960        * bindings/jni/jni_runtime.h:
24961        (KJS::Bindings::JavaMethod::JavaMethod):
24962        * bindings/jni/jni_utility.cpp:
24963        (callJNIMethod):
24964        (callJNIMethodIDA):
24965        (callJNIMethodA):
24966        (KJS::Bindings::getMethodID):
24967        (KJS::Bindings::callJNIVoidMethodIDA):
24968        (KJS::Bindings::callJNIObjectMethodIDA):
24969        (KJS::Bindings::callJNIByteMethodIDA):
24970        (KJS::Bindings::callJNICharMethodIDA):
24971        (KJS::Bindings::callJNIShortMethodIDA):
24972        (KJS::Bindings::callJNIIntMethodIDA):
24973        (KJS::Bindings::callJNILongMethodIDA):
24974        (KJS::Bindings::callJNIFloatMethodIDA):
24975        (KJS::Bindings::callJNIDoubleMethodIDA):
24976        (KJS::Bindings::callJNIBooleanMethodIDA):
24977        (KJS::Bindings::getCharactersFromJStringInEnv):
24978        (KJS::Bindings::getUCharactersFromJStringInEnv):
24979        (KJS::Bindings::getJNIField):
24980        * bindings/jni/jni_utility.h:
24981
24982l2003-12-23  John Sullivan  <sullivan@apple.com>
24983
24984        * JavaScriptCore.pbproj/project.pbxproj:
24985        Xcode version wars, harmless
24986
249872003-12-23  Darin Adler  <darin@apple.com>
24988
24989        Reviewed by John (concept, not code, which is just the old code coming back).
24990
24991        - fixed 3518092: REGRESSION (100-119): getting NaN instead of HH:MM times
24992
24993        * kjs/date_object.cpp: Added back our CF-based implementations of gmtime, localtime,
24994        mktime, timegm, and time, because mktime, at least, won't handle a year of 0.
24995
249962003-12-19  Richard Williamson   <rjw@apple.com>
24997
24998        Fixed 3515597.  When an error occurs we need
24999        to make sure result values are zeroed.
25000
25001        Cleaned up logs by adding a newline.
25002
25003        Reviewed by John.
25004
25005        * bindings/jni/jni_utility.cpp:
25006        (KJS::Bindings::getJavaVM):
25007        (KJS::Bindings::getJNIEnv):
25008        (callJNIMethod):
25009        (callJNIMethodA):
25010        (KJS::Bindings::getJNIField):
25011        * bindings/jni_jsobject.cpp:
25012        (JSObject::convertValueToJObject):
25013
25014=== Safari-119 ===
25015
250162003-12-17  Richard Williamson   <rjw@apple.com>
25017
25018        Ensure that all the symbols we export are in the KJS
25019        namespace (3512245).
25020
25021        Also renamed JavaString.characters() to JavaString.UTF8String()
25022        for enhanced clarity.
25023
25024        Added some sanity checking to constructor of JObjectWrapper.
25025
25026        Reviewed by Dave.
25027
25028        * ChangeLog:
25029        * bindings/jni/jni_class.cpp:
25030        * bindings/jni/jni_class.h:
25031        * bindings/jni/jni_instance.cpp:
25032        (JavaInstance::invokeMethod):
25033        (JObjectWrapper::JObjectWrapper):
25034        * bindings/jni/jni_instance.h:
25035        * bindings/jni/jni_runtime.cpp:
25036        (JavaParameter::JavaParameter):
25037        (JavaField::JavaField):
25038        (JavaMethod::JavaMethod):
25039        (JavaMethod::signature):
25040        * bindings/jni/jni_runtime.h:
25041        (KJS::Bindings::JavaString::ascii):
25042        (KJS::Bindings::JavaString::UTF8String):
25043        (KJS::Bindings::JavaString::JavaString):
25044        (KJS::Bindings::JavaString::_commonInit):
25045        (KJS::Bindings::JavaString::uchars):
25046        (KJS::Bindings::JavaString::length):
25047        (KJS::Bindings::JavaString::ustring):
25048        (KJS::Bindings::JavaParameter::type):
25049        (KJS::Bindings::JavaField::name):
25050        (KJS::Bindings::JavaField::type):
25051        (KJS::Bindings::JavaMethod::name):
25052        (KJS::Bindings::JavaMethod::returnType):
25053        * bindings/jni/jni_utility.cpp:
25054        (KJS::Bindings::getJavaVM):
25055        (KJS::Bindings::getJNIEnv):
25056        (KJS::Bindings::callJNIVoidMethod):
25057        (KJS::Bindings::callJNIObjectMethod):
25058        (KJS::Bindings::callJNIBooleanMethod):
25059        (KJS::Bindings::callJNIByteMethod):
25060        (KJS::Bindings::callJNICharMethod):
25061        (KJS::Bindings::callJNIShortMethod):
25062        (KJS::Bindings::callJNIIntMethod):
25063        (KJS::Bindings::callJNILongMethod):
25064        (KJS::Bindings::callJNIFloatMethod):
25065        (KJS::Bindings::callJNIDoubleMethod):
25066        (KJS::Bindings::callJNIVoidMethodA):
25067        (KJS::Bindings::callJNIObjectMethodA):
25068        (KJS::Bindings::callJNIByteMethodA):
25069        (KJS::Bindings::callJNICharMethodA):
25070        (KJS::Bindings::callJNIShortMethodA):
25071        (KJS::Bindings::callJNIIntMethodA):
25072        (KJS::Bindings::callJNILongMethodA):
25073        (KJS::Bindings::callJNIFloatMethodA):
25074        (KJS::Bindings::callJNIDoubleMethodA):
25075        (KJS::Bindings::callJNIBooleanMethodA):
25076        (KJS::Bindings::getCharactersFromJString):
25077        (KJS::Bindings::releaseCharactersForJString):
25078        (KJS::Bindings::getCharactersFromJStringInEnv):
25079        (KJS::Bindings::releaseCharactersForJStringInEnv):
25080        (KJS::Bindings::getUCharactersFromJStringInEnv):
25081        (KJS::Bindings::releaseUCharactersForJStringInEnv):
25082        (KJS::Bindings::JNITypeFromClassName):
25083        (KJS::Bindings::signatureFromPrimitiveType):
25084        (KJS::Bindings::JNITypeFromPrimitiveType):
25085        (KJS::Bindings::getJNIField):
25086        (KJS::Bindings::convertValueToJValue):
25087        * bindings/jni/jni_utility.h:
25088        * bindings/jni_jsobject.cpp:
25089        (KJS::Bindings::JSObject::invoke):
25090        (KJS::Bindings::JSObject::JSObject):
25091        (KJS::Bindings::JSObject::call):
25092        (KJS::Bindings::JSObject::eval):
25093        (KJS::Bindings::JSObject::getMember):
25094        (KJS::Bindings::JSObject::setMember):
25095        (KJS::Bindings::JSObject::removeMember):
25096        (KJS::Bindings::JSObject::getSlot):
25097        (KJS::Bindings::JSObject::setSlot):
25098        (KJS::Bindings::JSObject::toString):
25099        (KJS::Bindings::JSObject::finalize):
25100        (KJS::Bindings::JSObject::createNative):
25101        (KJS::Bindings::JSObject::convertValueToJObject):
25102        (KJS::Bindings::JSObject::convertJObjectToValue):
25103        (KJS::Bindings::JSObject::listFromJArray):
25104        * bindings/jni_jsobject.h:
25105        * bindings/runtime.cpp:
25106        * bindings/runtime.h:
25107        * bindings/runtime_method.cpp:
25108        * bindings/runtime_method.h:
25109
25110=== Safari-118 ===
25111
251122003-12-16  Richard Williamson   <rjw@apple.com>
25113
25114        Ack!  More assertions.  Lock ALL entry points into the interpreter!
25115        (3511733).
25116
25117        Reviewed by Ken.
25118
25119        * bindings/jni_jsobject.cpp:
25120        (Bindings::JSObject::call):
25121        (Bindings::JSObject::eval):
25122        (Bindings::JSObject::getMember):
25123        (Bindings::JSObject::setMember):
25124        (Bindings::JSObject::removeMember):
25125        (Bindings::JSObject::getSlot):
25126        (Bindings::JSObject::setSlot):
25127        (Bindings::JSObject::convertJObjectToValue):
25128
251292003-12-15  Richard Williamson   <rjw@apple.com>
25130
25131        Fixed a couple of snafus and removed some logging.
25132
25133        Reviewed by Maciej.
25134
25135        * bindings/jni_jsobject.cpp:
25136        (Bindings::performJavaScriptAccess):
25137        (Bindings::completedJavaScriptAccess):
25138        (Bindings::dispatchToJavaScriptThread):
25139        Removed some annoying JS_LOG clutter.
25140
25141        (Bindings::RootObject::removeAllJavaReferencesForRoot):
25142        Fixed allocation of key buffer that was called after it was needed.
25143
25144        (Bindings::JSObject::invoke):
25145        (Bindings::JSObject::JSObject):
25146        (Bindings::JSObject::getMember):
25147        (Bindings::JSObject::getSlot):
25148        Added additional interpreter locks around getMember and getSlot. 
25149        These functions may cause allocation of JS impls.  
25150
251512003-12-15  Richard Williamson   <rjw@apple.com>
25152
25153        args weren't passed to 'call' invocation.  d'oh.
25154        lock interpreter when we create instances of JS impls.        
25155
25156        Reviewed by Maciej.
25157
25158        * bindings/jni_jsobject.cpp:
25159        (Bindings::JSObject::call):
25160        (Bindings::JSObject::eval):
25161        (Bindings::JSObject::getMember):
25162        (Bindings::JSObject::setMember):
25163        (Bindings::JSObject::getSlot):
25164        (Bindings::JSObject::convertValueToJObject):
25165        (Bindings::JSObject::convertJObjectToValue):
25166        (Bindings::JSObject::listFromJArray):
25167        * bindings/jni_jsobject.h:
25168
251692003-12-15  Richard Williamson   <rjw@apple.com>
25170
25171        Last piece of LiveConnect!  This checkin adds implementation
25172        of the Java to JavaScript object conversion functions.
25173
25174        Reviewed by John.
25175
25176        * bindings/jni/jni_instance.cpp:
25177        (JavaInstance::invokeMethod):
25178        * bindings/jni/jni_utility.cpp:
25179        * bindings/jni/jni_utility.h:
25180        * bindings/jni_jsobject.cpp:
25181        (Bindings::JSObject::invoke):
25182        (Bindings::JSObject::call):
25183        (Bindings::JSObject::eval):
25184        (Bindings::JSObject::getMember):
25185        (Bindings::JSObject::setMember):
25186        (Bindings::JSObject::getSlot):
25187        (Bindings::JSObject::setSlot):
25188        (Bindings::JSObject::createNative):
25189        (Bindings::JSObject::convertValueToJObject):
25190        (Bindings::JSObject::convertJObjectToValue):
25191        (Bindings::JSObject::listFromJArray):
25192        * bindings/jni_jsobject.h:
25193        (Bindings::):
25194        * bindings/runtime_method.cpp:
25195        (RuntimeMethodImp::get):
25196        (RuntimeMethodImp::codeType):
25197        (RuntimeMethodImp::execute):
25198
251992003-12-12  Richard Williamson   <rjw@apple.com>
25200
25201        Added implementation of stubs in JSObject.  All that
25202        remains is a couple of simple conversion functions stubs and
25203        we're done with LiveConnect.  Also, changed string passing to
25204        JS to use uchars instead of chars.  
25205
25206        Reviewed by Maciej.
25207
25208        * bindings/jni/jni_runtime.h:
25209        (Bindings::JavaString::JavaString):
25210        (Bindings::JavaString::_commonInit):
25211        (Bindings::JavaString::_commonCopy):
25212        (Bindings::JavaString::_commonDelete):
25213        (Bindings::JavaString::~JavaString):
25214        (Bindings::JavaString::operator=):
25215        (Bindings::JavaString::uchars):
25216        (Bindings::JavaString::length):
25217        (Bindings::JavaString::ustring):
25218        * bindings/jni/jni_utility.cpp:
25219        (getUCharactersFromJStringInEnv):
25220        (releaseUCharactersForJStringInEnv):
25221        (convertValueToJObject):
25222        (convertJObjectToValue):
25223        * bindings/jni/jni_utility.h:
25224        * bindings/jni_jsobject.cpp:
25225        (Bindings::JSObject::invoke):
25226        (Bindings::JSObject::call):
25227        (Bindings::JSObject::eval):
25228        (Bindings::JSObject::getMember):
25229        (Bindings::JSObject::setMember):
25230        (Bindings::JSObject::removeMember):
25231        (Bindings::JSObject::getSlot):
25232        (Bindings::JSObject::setSlot):
25233        * bindings/jni_jsobject.h:
25234
252352003-12-12  Richard Williamson   <rjw@apple.com>
25236
25237        Ensure that all calls from Java into JavaScript are
25238        performed on a designated thread (the main thread).
25239
25240        Reviewed by Ken.
25241
25242        * bindings/jni_jsobject.cpp:
25243        (isJavaScriptThread):
25244        (rootForImp):
25245        (Bindings::performJavaScriptAccess):
25246        (Bindings::completedJavaScriptAccess):
25247        (Bindings::initializeJavaScriptAccessLock):
25248        (Bindings::lockJavaScriptAccess):
25249        (Bindings::unlockJavaScriptAccess):
25250        (Bindings::dispatchToJavaScriptThread):
25251        (Bindings::RootObject::setFindRootObjectForNativeHandleFunction):
25252        (Bindings::RootObject::removeAllJavaReferencesForRoot):
25253        (Bindings::JSObject::invoke):
25254        (Bindings::JSObject::JSObject):
25255        (Bindings::JSObject::call):
25256        (Bindings::JSObject::eval):
25257        (Bindings::JSObject::getMember):
25258        (Bindings::JSObject::setMember):
25259        (Bindings::JSObject::removeMember):
25260        (Bindings::JSObject::getSlot):
25261        (Bindings::JSObject::setSlot):
25262        (Bindings::JSObject::toString):
25263        (Bindings::JSObject::finalize):
25264        (Bindings::JSObject::getWindow):
25265        * bindings/jni_jsobject.h:
25266        (Bindings::RootObject::~RootObject):
25267        (Bindings::RootObject::findRootObjectForNativeHandleFunction):
25268        (Bindings::RootObject::runLoop):
25269        (Bindings::RootObject::performJavaScriptSource):
25270        (Bindings::):
25271
252722003-12-11  Richard Williamson   <rjw@apple.com>
25273
25274        Added support for calling a JavaScript function from
25275        Java.  Right now this only works for void func(void)
25276        functions, but the conversion of args and return values
25277        will come shortly.
25278
25279        Cleaned up and verified reference counting scheme, and
25280        dereferencing of vended JavaScript objects when applet is
25281        destroyed (actually when part is destroyed).
25282        
25283        Removed link hack for testkjs now that the Java folks think
25284        they have a solution for the 1.4.2 JavaVM link problem.  Although
25285        Greg B. thinks his solution may cause problems for the 1.3.1
25286        version of the VM!?!
25287
25288        Reviewed by Ken.
25289
25290        * Makefile.am:
25291        * bindings/jni/jni_runtime.h:
25292        (Bindings::JavaString::JavaString):
25293        * bindings/jni/jni_utility.cpp:
25294        (convertValueToJValue):
25295        (convertValueToJObject):
25296        (listFromJArray):
25297        * bindings/jni/jni_utility.h:
25298        * bindings/jni_jsobject.cpp:
25299        (KJS_setFindRootObjectForNativeHandleFunction):
25300        (KJS_findRootObjectForNativeHandleFunction):
25301        (getReferencesByRootDictionary):
25302        (getReferencesDictionary):
25303        (findReferenceDictionary):
25304        (rootForImp):
25305        (addJavaReference):
25306        (removeJavaReference):
25307        * bindings/jni_jsobject.h:
25308        (Bindings::RootObject::RootObject):
25309        (Bindings::RootObject::~RootObject):
25310        (Bindings::RootObject::setRootObjectImp):
25311        (Bindings::RootObject::rootObjectImp):
25312        (Bindings::RootObject::setInterpreter):
25313        (Bindings::RootObject::interpreter):
25314
25315=== Safari-117 ===
25316
253172003-12-10  Darin Adler  <darin@apple.com>
25318
25319        Reviewed by Maciej.
25320
25321        - fixed regression in JavaScript tests reported by the KDE guys
25322        - fixed 3506345: REGRESSION (115-116): VIP: chordfind.com no longer displays chords
25323
25324        * kjs/ustring.h: Add tolerateEmptyString parameter to toDouble and toULong.
25325        * kjs/ustring.cpp:
25326        (KJS::UString::toDouble): Separate the "tolerant" parameter into two separate ones:
25327        tolerateTrailingJunk and tolerateEmptyString. Add new overloads; better for code size
25328        and binary compatibility than default parameter values.
25329        (KJS::UString::toULong): Pass tolerateEmptyString down to toDouble. Add new overload.
25330
25331        * kjs/string_object.cpp: (StringProtoFuncImp::call): Pass false for the new
25332        "tolerate empty string" parameter.
25333
253342003-12-10  Richard Williamson   <rjw@apple.com>
25335
25336        Added code to manage reference counting of JavaScript
25337        objects passed to Java.   Also added implementation of
25338        KJS_JSCreateNativeJSObject.  This is the function that
25339        provides the root object to Java (KJS::Window).
25340
25341        Reviewed by Hyatt.
25342
25343        * JavaScriptCore.pbproj/project.pbxproj:
25344        * bindings/jni_jsobject.cpp:
25345        (KJS_setFindObjectForNativeHandleFunction):
25346        (KJS_findObjectForNativeHandleFunction):
25347        (getReferencesByOwnerDictionary):
25348        (getReferencesDictionary):
25349        (findReferenceDictionary):
25350        (addJavaReference):
25351        (removeJavaReference):
25352        (removeAllJavaReferencesForOwner):
25353        * bindings/jni_jsobject.h:
25354
253552003-12-09  Richard Williamson   <rjw@apple.com>
25356
25357        LiveConnect stubs that correspond to the native methods
25358        on JSObject.  These will be called from the new Java plugin
25359        when an instance of JSObject is instantiated and messaged.
25360        When these are implemented the Java will be able to originate
25361        calls into JavaScript.
25362
25363        Also a temporary work-around added to Makefile.am to solve
25364        a link problem.  The 1.4.2 JavaVM accidentally links against
25365        libobjc.  This call a failure linking testkjs.  Mike Hay is
25366        working with someone to fix the problem (3505587).
25367
25368        Reviewed by Chris.
25369
25370        * JavaScriptCore.pbproj/project.pbxproj:
25371        * Makefile.am:
25372        * bindings/jni_jsobject.cpp: Added.
25373        (KJS_JSCreateNativeJSObject):
25374        (KJS_JSObject_JSFinalize):
25375        (KJS_JSObject_JSObjectCall):
25376        (KJS_JSObject_JSObjectEval):
25377        (KJS_JSObject_JSObjectGetMember):
25378        (KJS_JSObject_JSObjectSetMember):
25379        (KJS_JSObject_JSObjectRemoveMember):
25380        (KJS_JSObject_JSObjectGetSlot):
25381        (KJS_JSObject_JSObjectSetSlot):
25382        (KJS_JSObject_JSObjectToString):
25383        * bindings/jni_jsobject.h: Added.
25384
253852003-12-09  Maciej Stachowiak  <mjs@apple.com>
25386
25387        Reviewed by John.
25388
25389        <rdar://problem/3505183>: JavaScriptCore should assert that interpreter is locked in collector
25390
25391        * kjs/collector.cpp:
25392        (KJS::Collector::allocate): Assert that interpreter lock count is not 0.
25393        (KJS::Collector::collect): likewise
25394
253952003-12-08  Richard Williamson   <rjw@apple.com>
25396
25397        LiveConnect:  The last piece of the JavaScript side of the
25398        LiveConnect implementation.  This change adds support for
25399        setting/getting values from Java arrays in JavaScript.
25400
25401        Reviewed by John.
25402
25403        * bindings/jni/jni_instance.h:
25404        * bindings/jni/jni_runtime.cpp:
25405        (JavaField::JavaField):
25406        (convertJObjectToArray):
25407        (JavaArray::JavaArray):
25408        (JavaArray::~JavaArray):
25409        (JavaArray::setValueAt):
25410        (JavaArray::valueAt):
25411        (JavaArray::getLength):
25412        * bindings/jni/jni_runtime.h:
25413        (Bindings::JavaArray::operator=):
25414        (Bindings::JavaArray::javaArray):
25415        * bindings/jni/jni_utility.cpp:
25416        (JNITypeFromPrimitiveType):
25417        (convertValueToJValue):
25418        * bindings/jni/jni_utility.h:
25419        * bindings/runtime.h:
25420        * bindings/runtime_array.cpp:
25421        (RuntimeArrayImp::RuntimeArrayImp):
25422        (RuntimeArrayImp::~RuntimeArrayImp):
25423        (RuntimeArrayImp::get):
25424        (RuntimeArrayImp::put):
25425        (RuntimeArrayImp::hasProperty):
25426        * bindings/runtime_array.h:
25427        (KJS::RuntimeArrayImp::getLength):
25428        (KJS::RuntimeArrayImp::getConcreteArray):
25429        * bindings/runtime_object.cpp:
25430        (RuntimeObjectImp::get):
25431        (RuntimeObjectImp::canPut):
25432        (RuntimeObjectImp::hasProperty):
25433
254342003-12-05  Richard Williamson   <rjw@apple.com>
25435
25436        LiveConnect:  Part 1 of supporting JS bindings to
25437        native language arrays.
25438
25439        Reviewed by Chris.
25440
25441        * JavaScriptCore.pbproj/project.pbxproj:
25442        * bindings/jni/jni_runtime.cpp:
25443        (JavaField::JavaField):
25444        (convertJObjectToArray):
25445        (JavaField::valueFromInstance):
25446        (JavaField::setValueToInstance):
25447        * bindings/jni/jni_runtime.h:
25448        * bindings/runtime.cpp:
25449        (Instance::setValueOfField):
25450        * bindings/runtime.h:
25451        (Bindings::Array::~Array):
25452
254532003-12-04  Richard Williamson   <rjw@apple.com>
25454
25455        LiveConnect:  Moved defaultValue into concrete implementation because
25456        more intelligent conversion can be perform with knowledge
25457        of the class of the original instance.
25458
25459        Reviewed by Chris.
25460
25461        * bindings/jni/jni_class.cpp:
25462        (JavaClass::isNumberClass):
25463        (JavaClass::isBooleanClass):
25464        (JavaClass::isStringClass):
25465        * bindings/jni/jni_class.h:
25466        * bindings/jni/jni_instance.cpp:
25467        (JavaInstance::defaultValue):
25468        (JavaInstance::valueOf):
25469        * bindings/jni/jni_instance.h:
25470        (Bindings::JavaInstance::javaInstance):
25471        * bindings/runtime.h:
25472        * bindings/runtime_object.cpp:
25473        (RuntimeObjectImp::defaultValue):
25474
254752003-12-04  Richard Williamson   <rjw@apple.com>
25476
25477        LiveConnect:  Added support for setting the value of Java
25478        fields.
25479
25480        Reviewed by Chris.
25481
25482        * bindings/jni/jni_instance.cpp:
25483        (JavaInstance::invokeMethod):
25484        * bindings/jni/jni_runtime.cpp:
25485        (JavaParameter::JavaParameter):
25486        (JavaField::JavaField):
25487        (JavaField::valueFromInstance):
25488        (JavaField::setValueToInstance):
25489        (JavaMethod::JavaMethod):
25490        * bindings/jni/jni_runtime.h:
25491        (Bindings::JavaField::getJNIType):
25492        * bindings/jni/jni_utility.cpp:
25493        (JNITypeFromClassName):
25494        (convertValueToJValue):
25495        * bindings/jni/jni_utility.h:
25496        * bindings/runtime.cpp:
25497        (Instance::setValueOfField):
25498        * bindings/runtime.h:
25499        * bindings/runtime_object.cpp:
25500        (RuntimeObjectImp::get):
25501        (RuntimeObjectImp::put):
25502        (RuntimeObjectImp::defaultValue):
25503
255042003-12-04  Richard Williamson   <rjw@apple.com>
25505
25506        Added support for string conversions.
25507        Changed various JavaString member variables to be inline.
25508        Implemented defaultValue for context relevant type coercion.
25509
25510        Reviewed by Chris.
25511
25512        * bindings/jni/jni_class.cpp:
25513        (JavaClass::JavaClass):
25514        (JavaClass::setClassName):
25515        (JavaClass::classForInstance):
25516        * bindings/jni/jni_class.h:
25517        * bindings/jni/jni_instance.cpp:
25518        (JavaInstance::stringValue):
25519        (JavaInstance::numberValue):
25520        (JavaInstance::booleanValue):
25521        (JavaInstance::invokeMethod):
25522        * bindings/jni/jni_instance.h:
25523        * bindings/jni/jni_runtime.cpp:
25524        (JavaParameter::JavaParameter):
25525        (JavaField::JavaField):
25526        (JavaMethod::JavaMethod):
25527        (appendClassName):
25528        (JavaMethod::signature):
25529        * bindings/jni/jni_runtime.h:
25530        (Bindings::JavaString::JavaString):
25531        (Bindings::JavaString::~JavaString):
25532        (Bindings::JavaString::operator=):
25533        (Bindings::JavaString::characters):
25534        (Bindings::JavaParameter::JavaParameter):
25535        (Bindings::JavaParameter::~JavaParameter):
25536        (Bindings::JavaParameter::operator=):
25537        (Bindings::JavaParameter::type):
25538        (Bindings::JavaField::JavaField):
25539        (Bindings::JavaField::~JavaField):
25540        (Bindings::JavaField::operator=):
25541        (Bindings::JavaField::name):
25542        (Bindings::JavaField::type):
25543        (Bindings::JavaMethod::JavaMethod):
25544        (Bindings::JavaMethod::_commonDelete):
25545        (Bindings::JavaMethod::name):
25546        (Bindings::JavaMethod::returnType):
25547        * bindings/jni/jni_utility.cpp:
25548        (convertValueToJValue):
25549        * bindings/runtime.h:
25550        (Bindings::Instance::valueOf):
25551        * bindings/runtime_method.cpp:
25552        (RuntimeMethodImp::call):
25553        * bindings/runtime_object.cpp:
25554        (RuntimeObjectImp::RuntimeObjectImp):
25555        (RuntimeObjectImp::get):
25556        (RuntimeObjectImp::defaultValue):
25557        * bindings/runtime_object.h:
25558        (KJS::RuntimeObjectImp::classInfo):
25559
25560=== Safari-116 ===
25561
255622003-12-03  Richard Williamson   <rjw@apple.com>
25563
25564        LiveConnect:  Added support for parameter passing to Java and conversion
25565        of return values.
25566
25567        Reviewed by Chris.
25568
25569        * bindings/jni/jni_instance.cpp:
25570        (JavaInstance::invokeMethod):
25571        * bindings/jni/jni_instance.h:
25572        * bindings/jni/jni_runtime.cpp:
25573        (JavaParameter::JavaParameter):
25574        (JavaMethod::JavaMethod):
25575        (JavaMethod::signature):
25576        * bindings/jni/jni_runtime.h:
25577        (Bindings::JavaParameter::JavaParameter):
25578        (Bindings::JavaParameter::operator=):
25579        (Bindings::JavaParameter::getJNIType):
25580        * bindings/jni/jni_utility.cpp:
25581        (callJNIBooleanMethodA):
25582        (convertValueToJValue):
25583        * bindings/jni/jni_utility.h:
25584        * bindings/runtime.h:
25585        * bindings/runtime_method.cpp:
25586        (RuntimeMethodImp::call):
25587        * bindings/runtime_object.cpp:
25588        (RuntimeObjectImp::get):
25589
255902003-12-02  Richard Williamson   <rjw@apple.com>
25591
25592        Added support for calling simple methods in Java from JavaScript.
25593        (void return and no parameters).  Yay, LiveConnect lives.
25594
25595        Still need write argument and return value conversion code.
25596
25597        Reviewed by Chris.
25598
25599        * JavaScriptCore.pbproj/project.pbxproj:
25600        * bindings/jni/jni_instance.cpp:
25601        (JavaInstance::getClass):
25602        (JavaInstance::invokeMethod):
25603        * bindings/jni/jni_instance.h:
25604        * bindings/jni/jni_runtime.cpp:
25605        (JavaMethod::JavaMethod):
25606        (JavaMethod::signature):
25607        (JavaMethod::JNIReturnType):
25608        * bindings/jni/jni_runtime.h:
25609        (Bindings::JavaMethod::_commonDelete):
25610        (Bindings::JavaMethod::_commonCopy):
25611        (Bindings::JavaMethod::name):
25612        * bindings/jni/jni_utility.cpp:
25613        (signatureFromPrimitiveType):
25614        * bindings/jni/jni_utility.h:
25615        * bindings/runtime.h:
25616        * bindings/runtime_method.cpp: Added.
25617        (RuntimeMethodImp::RuntimeMethodImp):
25618        (RuntimeMethodImp::~RuntimeMethodImp):
25619        (RuntimeMethodImp::get):
25620        (RuntimeMethodImp::implementsCall):
25621        (RuntimeMethodImp::call):
25622        (RuntimeMethodImp::codeType):
25623        (RuntimeMethodImp::execute):
25624        * bindings/runtime_method.h: Added.
25625        * bindings/runtime_object.cpp:
25626        (RuntimeObjectImp::RuntimeObjectImp):
25627        (RuntimeObjectImp::get):
25628        * bindings/runtime_object.h:
25629        * kjs/function.cpp:
25630        (FunctionImp::FunctionImp):
25631        * kjs/interpreter.h:
25632
256332003-12-01  Darin Adler  <darin@apple.com>
25634
25635        Reviewed by Maciej.
25636
25637        - fixed 3493799: JavaScript string.replace expands $ if it's the last character in replacement string
25638
25639        * kjs/ustring.cpp: (KJS::UString::toDouble): Fix backwards handling of the "tolerant" boolean.
25640        This indirectly caused the string.replace bug.
25641
256422003-12-02  Maciej Stachowiak  <mjs@apple.com>
25643
25644        Merged patches from Harri Porten and David Faure to fix:
25645
25646        <rdar://problem/3497643>: reproducible crash printing self-referential array
25647        
25648        * kjs/array_object.cpp:
25649        (ArrayProtoFuncImp::call): Break out of the loop if an exception was thrown.
25650        * kjs/nodes.cpp:
25651        (FunctionCallNode::evaluate): Move function call depth check from here...
25652        * kjs/object.cpp:
25653        (KJS::Object::call): ...to here.
25654        * kjs/object.h: Un-inline Object::call now that it does more.
25655
256562003-12-01  Richard Williamson   <rjw@apple.com>
25657
25658        Fixed mistake in method signatures used to get boolean and integer fields.
25659
25660        Reviewed by Chris.
25661
25662        * bindings/jni/jni_runtime.cpp:
25663        (JavaField::valueFromInstance):
25664
256652003-12-01  Richard Williamson   <rjw@apple.com>
25666
25667Fixed parameter passing to applet.  Child elements are NOT valid in setStyle().  So we now create the widget before needed with createWidgetIfNecessary.  This either happens when doing the first layout, or when JavaScript first references the applet element.
25668
25669Fixed early delete of the the main applet instance.  When the JS collector cleaned up the last JS object referring to the applet instance we were deleting the java instance.  This caused the applet instance cached on the applet element to be invalid.  The applet instance is the only Java object not to be cleaned up by the JS collector.
25670
25671Added support for getting at Java object fields.
25672
25673        Reviewed by Chris.
25674
25675        * JavaScriptCore.pbproj/project.pbxproj:
25676        * Makefile.am:
25677        * bindings/jni/jni_instance.cpp:
25678        (JObjectWrapper::JObjectWrapper):
25679        * bindings/jni/jni_instance.h:
25680        (Bindings::JObjectWrapper::~JObjectWrapper):
25681        * bindings/jni/jni_runtime.cpp:
25682        (JavaField::valueFromInstance):
25683        * bindings/runtime_object.cpp:
25684        (RuntimeObjectImp::~RuntimeObjectImp):
25685        (RuntimeObjectImp::RuntimeObjectImp):
25686        (RuntimeObjectImp::get):
25687        (RuntimeObjectImp::deleteProperty):
25688        * bindings/runtime_object.h:
25689
25690=== Safari-115 ===
25691
256922003-11-21  Maciej Stachowiak  <mjs@apple.com>
25693
25694        Patch from Harri Porten, reviewed by me.
25695
25696        - fixed 3491712 - String slice with negative arguments does not offset from end of string
25697        
25698        * kjs/string_object.cpp:
25699        (StringProtoFuncImp::call): Handle negative arguments as offsets from end by
25700        adding length and clamping to [0,length-1].
25701
257022003-11-21  Maciej Stachowiak  <mjs@apple.com>
25703
25704        Patch from Harri Porten, reviewed by me.
25705
25706        - fixed 3491709 - using Function.apply with a primitive type as the arg list causes crash
25707        
25708        * kjs/function_object.cpp:
25709        (FunctionProtoFuncImp::call): Nest parentheses properly.
25710
257112003-11-20  Richard Williamson   <rjw@apple.com>
25712
25713        More LiveConnect stuff.  Primitive Java fields are now
25714        accessible from JavaScript!  Yay!
25715
25716        Reviewed by Maciej.
25717
25718        * bindings/jni/jni_class.cpp:
25719        (JavaClass::methodNamed):
25720        (JavaClass::fieldNamed):
25721        * bindings/jni/jni_class.h:
25722        (Bindings::JavaClass::_commonDelete):
25723        * bindings/jni/jni_instance.cpp:
25724        (JavaInstance::JavaInstance):
25725        (JavaInstance::~JavaInstance):
25726        (JavaInstance::getClass):
25727        * bindings/jni/jni_instance.h:
25728        (Bindings::JavaInstance::javaInstance):
25729        * bindings/jni/jni_runtime.cpp:
25730        (JavaField::JavaField):
25731        (JavaField::valueFromInstance):
25732        * bindings/jni/jni_runtime.h:
25733        (Bindings::JavaField::JavaField):
25734        (Bindings::JavaField::~JavaField):
25735        (Bindings::JavaField::operator=):
25736        * bindings/jni/jni_utility.cpp:
25737        (callJNIMethod):
25738        (callJNIMethodA):
25739        (callJNIVoidMethod):
25740        (callJNIObjectMethod):
25741        (callJNIBooleanMethod):
25742        (callJNIByteMethod):
25743        (callJNICharMethod):
25744        (callJNIShortMethod):
25745        (callJNIIntMethod):
25746        (callJNILongMethod):
25747        (callJNIFloatMethod):
25748        (callJNIDoubleMethod):
25749        (callJNIVoidMethodA):
25750        (callJNIObjectMethodA):
25751        (callJNIByteMethodA):
25752        (callJNICharMethodA):
25753        (callJNIShortMethodA):
25754        (callJNIIntMethodA):
25755        (callJNILongMethodA):
25756        (callJNIFloatMethodA):
25757        (callJNIDoubleMethodA):
25758        (releaseCharactersForJStringInEnv):
25759        (primitiveTypeFromClassName):
25760        (getJNIField):
25761        * bindings/jni/jni_utility.h:
25762        * bindings/runtime.cpp:
25763        (Instance::createBindingForLanguageInstance):
25764        (Instance::getValueOfField):
25765        * bindings/runtime.h:
25766        * bindings/runtime_object.cpp:
25767        (RuntimeObjectImp::get):
25768
257692003-11-20  Richard Williamson   <rjw@apple.com>
25770
25771        More LiveConnect stuff.
25772
25773        Reviewed by Chris.
25774
25775        * bindings/jni/jni_class.cpp:
25776        (JavaClass::classForName):
25777        (JavaClass::classForInstance):
25778        * bindings/jni/jni_instance.cpp:
25779        (JavaInstance::getValueOfField):
25780        * bindings/jni/jni_instance.h:
25781        (Bindings::JObjectWrapper::JObjectWrapper):
25782        * bindings/jni/jni_runtime.h:
25783        (Bindings::JavaConstructor::~JavaConstructor):
25784        (Bindings::JavaConstructor::operator=):
25785        (Bindings::JavaMethod::JavaMethod):
25786        (Bindings::JavaMethod::_commonDelete):
25787        (Bindings::JavaMethod::signature):
25788        * bindings/jni/jni_utility.cpp:
25789        (getJNIEnv):
25790        (attachToJavaVM):
25791        * bindings/jni/jni_utility.h:
25792        * bindings/runtime.h:
25793        * bindings/runtime_object.cpp:
25794        (RuntimeObjectImp::~RuntimeObjectImp):
25795        (RuntimeObjectImp::get):
25796        * bindings/runtime_object.h:
25797
257982003-11-19  Richard Williamson   <rjw@apple.com>
25799
25800        More LiveConnect stuff.
25801
25802        Reviewed by Ken.
25803
25804        * JavaScriptCore.pbproj/project.pbxproj:
25805        * bindings/jni/jni_class.cpp: Added.
25806        (JavaClass::_commonInit):
25807        (JavaClass::JavaClass):
25808        (_createClassesByNameIfNecessary):
25809        (JavaClass::classForName):
25810        (JavaClass::classForInstance):
25811        (JavaClass::methodNamed):
25812        (JavaClass::fieldNamed):
25813        * bindings/jni/jni_class.h: Added.
25814        (Bindings::JavaClass::_commonDelete):
25815        (Bindings::JavaClass::~JavaClass):
25816        (Bindings::JavaClass::_commonCopy):
25817        (Bindings::JavaClass::JavaClass):
25818        (Bindings::JavaClass::operator=):
25819        (Bindings::JavaClass::name):
25820        (Bindings::JavaClass::constructorAt):
25821        (Bindings::JavaClass::numConstructors):
25822        * bindings/jni/jni_instance.cpp: Added.
25823        (JavaInstance::JavaInstance):
25824        (JavaInstance::~JavaInstance):
25825        * bindings/jni/jni_instance.h: Added.
25826        (Bindings::JObjectWrapper::JObjectWrapper):
25827        (Bindings::JObjectWrapper::~JObjectWrapper):
25828        (Bindings::JObjectWrapper::ref):
25829        (Bindings::JObjectWrapper::deref):
25830        (Bindings::JavaInstance::getClass):
25831        (Bindings::JavaInstance::operator=):
25832        * bindings/jni/jni_runtime.cpp:
25833        (JavaMethod::JavaMethod):
25834        * bindings/jni/jni_runtime.h:
25835        (Bindings::JavaString::JavaString):
25836        (Bindings::JavaString::~JavaString):
25837        (Bindings::JavaString::operator=):
25838        * bindings/jni/jni_utility.cpp:
25839        (getJavaVM):
25840        (getJNIEnv):
25841        (getCharactersFromJString):
25842        (releaseCharactersForJString):
25843        (getCharactersFromJStringInEnv):
25844        (releaseCharactersForJStringInEnv):
25845        * bindings/jni/jni_utility.h:
25846        * bindings/runtime.cpp:
25847        (Instance::createBindingForLanguageInstance):
25848        * bindings/runtime.h:
25849        (Bindings::Instance::):
25850
258512003-11-18  Richard Williamson   <rjw@apple.com>
25852
25853        More live connect stubs.  We're getting close.
25854
25855        Reviewed by Chris.
25856
25857        * JavaScriptCore.pbproj/project.pbxproj:
25858        * bindings/jni/jni_runtime.cpp:
25859        (JavaClass::JavaClass):
25860        (JavaInstance::JavaInstance):
25861        (JavaInstance::~JavaInstance):
25862        * bindings/jni/jni_runtime.h:
25863        (Bindings::JavaConstructor::value):
25864        (Bindings::JavaField::value):
25865        (Bindings::JavaMethod::value):
25866        (Bindings::JavaClass::_commonDelete):
25867        (Bindings::JavaClass::_commonCopy):
25868        (Bindings::JavaClass::methodNamed):
25869        (Bindings::JavaClass::fieldNamed):
25870        (Bindings::JavaInstance::getClass):
25871        * bindings/runtime.cpp: Added.
25872        * bindings/runtime.h:
25873        (Bindings::Instance::~Instance):
25874        * bindings/runtime_object.cpp: Added.
25875        (RuntimeObjectImp::classInfo):
25876        (RuntimeObjectImp::RuntimeObjectImp):
25877        (RuntimeObjectImp::get):
25878        (RuntimeObjectImp::put):
25879        (RuntimeObjectImp::canPut):
25880        (RuntimeObjectImp::hasProperty):
25881        (RuntimeObjectImp::deleteProperty):
25882        (RuntimeObjectImp::defaultValue):
25883        (RuntimeObjectImp::_initializeClassInfoFromInstance):
25884        * bindings/runtime_object.h: Added.
25885        (KJS::RuntimeObjectImp::setInternalInstance):
25886        (KJS::RuntimeObjectImp::getInternalInstance):
25887        * kjs/object.cpp:
25888        (KJS::ObjectImp::get):
25889        (KJS::ObjectImp::hasProperty):
25890        * kjs/value.h:
25891        (KJS::):
25892
258932003-11-17  Maciej Stachowiak  <mjs@apple.com>
25894
25895        Patch from Harri, reviewed by me.
25896
25897        - fixed 3487375 - backwards array slice causes infinite loop
25898        
25899        * kjs/array_object.cpp:
25900        (ArrayProtoFuncImp::call):
25901
259022003-11-17  Maciej Stachowiak  <mjs@apple.com>
25903
25904        Patch from Harri Porten reviewed by me.
25905
25906        - fixed 3487371 - operator precedence for bitwise or, xor and and is wrong
25907
25908        * kjs/grammar.y: Correct the precedence.
25909
259102003-11-16  Maciej Stachowiak  <mjs@apple.com>
25911
25912        Reviewed by John.
25913
25914        - fixed 3483829 - JavaScriptCore needs workaround to compile on Merlot
25915        
25916        * JavaScriptCore.pbproj/project.pbxproj: Add -Wno-long-double to
25917        warning flags.
25918
25919=== Safari-114 ===
25920
259212003-11-13  Richard Williamson   <rjw@apple.com>
25922
25923        Factored common code between copy constructor and assignment operator.
25924
25925        Reviewed by Chris.
25926
25927        * ChangeLog:
25928        * bindings/jni/jni_runtime.h:
25929        (Bindings::JavaConstructor::_commonCopy):
25930        (Bindings::JavaConstructor::JavaConstructor):
25931        (Bindings::JavaConstructor::operator=):
25932        (Bindings::JavaField::type):
25933        * bindings/runtime.h:
25934
259352003-11-13  Richard Williamson   <rjw@apple.com>
25936
25937        More LiveConnect stuff.  This checkin adds abstract classes to model
25938        language runtimes and a JNI based set of concrete implementations for
25939        Java.
25940
25941        Reviewed by Chris.
25942
25943        * JavaScriptCore.pbproj/project.pbxproj:
25944        * Makefile.am:
25945        * bindings/Makefile.am: Removed.
25946        * bindings/jni/Makefile.am: Removed.
25947        * bindings/jni/jni_runtime.cpp: Added.
25948        (JavaField::JavaField):
25949        (JavaConstructor::JavaConstructor):
25950        (JavaMethod::JavaMethod):
25951        (JavaClass::JavaClass):
25952        * bindings/jni/jni_runtime.h: Added.
25953        (Bindings::JavaString::JavaString):
25954        (Bindings::JavaString::~JavaString):
25955        (Bindings::JavaString::operator=):
25956        (Bindings::JavaString::characters):
25957        (Bindings::JavaParameter::JavaParameter):
25958        (Bindings::JavaParameter::~JavaParameter):
25959        (Bindings::JavaParameter::operator=):
25960        (Bindings::JavaParameter::type):
25961        (Bindings::JavaConstructor::JavaConstructor):
25962        (Bindings::JavaConstructor::~JavaConstructor):
25963        (Bindings::JavaConstructor::operator=):
25964        (Bindings::JavaConstructor::parameterAt):
25965        (Bindings::JavaConstructor::numParameters):
25966        (Bindings::JavaField::JavaField):
25967        (Bindings::JavaField::~JavaField):
25968        (Bindings::JavaField::operator=):
25969        (Bindings::JavaField::name):
25970        (Bindings::JavaField::type):
25971        (Bindings::JavaMethod::JavaMethod):
25972        (Bindings::JavaMethod::_commonDelete):
25973        (Bindings::JavaMethod::~JavaMethod):
25974        (Bindings::JavaMethod::_commonCopy):
25975        (Bindings::JavaMethod::operator=):
25976        (Bindings::JavaMethod::name):
25977        (Bindings::JavaMethod::returnType):
25978        (Bindings::JavaMethod::parameterAt):
25979        (Bindings::JavaMethod::numParameters):
25980        (Bindings::JavaClass::_commonDelete):
25981        (Bindings::JavaClass::~JavaClass):
25982        (Bindings::JavaClass::_commonCopy):
25983        (Bindings::JavaClass::JavaClass):
25984        (Bindings::JavaClass::operator=):
25985        (Bindings::JavaClass::name):
25986        (Bindings::JavaClass::methodAt):
25987        (Bindings::JavaClass::numMethods):
25988        (Bindings::JavaClass::constructorAt):
25989        (Bindings::JavaClass::numConstructors):
25990        (Bindings::JavaClass::fieldAt):
25991        (Bindings::JavaClass::numFields):
25992        * bindings/jni/jni_utility.cpp:
25993        (callJNIMethod):
25994        (callJNIMethodA):
25995        (callJNIObjectMethod):
25996        (callJNIByteMethod):
25997        (callJNICharMethod):
25998        (callJNIShortMethod):
25999        (callJNIIntMethod):
26000        (callJNILongMethod):
26001        (callJNIFloatMethod):
26002        (callJNIDoubleMethod):
26003        (callJNIVoidMethodA):
26004        (callJNIObjectMethodA):
26005        (callJNIByteMethodA):
26006        (callJNICharMethodA):
26007        (callJNIShortMethodA):
26008        (callJNIIntMethodA):
26009        (callJNILongMethodA):
26010        (callJNIFloatMethodA):
26011        (callJNIDoubleMethodA):
26012        (getCharactersFromJString):
26013        (releaseCharactersForJString):
26014        * bindings/jni/jni_utility.h:
26015        * bindings/objc/Makefile.am: Removed.
26016        * bindings/runtime.h: Added.
26017        (Bindings::Parameter::~Parameter):
26018        (Bindings::Constructor::~Constructor):
26019        (Bindings::Field::~Field):
26020        (Bindings::Method::~Method):
26021        (Bindings::Class::~Class):
26022
260232003-11-13  Maciej Stachowiak  <mjs@apple.com>
26024
26025        Reviewed by John.
26026
26027        - fixed 3472562 - Null or Undefined variables passed to IN operator cause javascript exceptions
26028        
26029        * kjs/nodes.cpp:
26030        (ForInNode::execute): If the in value is null or undefined, bail
26031        out early, since attempting to iterate its properties will throw
26032        an exception.
26033
260342003-11-12  Darin Adler  <darin@apple.com>
26035
26036        - fixed the build
26037
26038        * Makefile.am: Fix the build by removing the bindings directory from SUBDIRS.
26039        Later, we can either add this back and add the Makefile.am files to the top
26040        level configure.in or leave it out and remove the Makefile.am files.
26041
260422003-11-12  Richard Williamson   <rjw@apple.com>
26043
26044        Added utility functions for calling JNI methods.
26045
26046        Reviewed by Chris.
26047
26048        * JavaScriptCore.pbproj/project.pbxproj:
26049        * Makefile.am:
26050        * bindings/Makefile.am: Added.
26051        * bindings/jni/Makefile.am: Added.
26052        * bindings/jni/jni_utility.cpp: Added.
26053        (attachToJavaVM):
26054        (callJNIMethod):
26055        (callJNIVoidMethod):
26056        (callJNIObjectMethod):
26057        (callJNIByteMethod):
26058        (callJNICharMethod):
26059        (callJNIShortMethod):
26060        (callJNIIntMethod):
26061        (callJNILongMethod):
26062        (callJNIFloatMethod):
26063        (callJNIDoubleMethod):
26064        * bindings/jni/jni_utility.h: Added.
26065        * bindings/objc/Makefile.am: Added.
26066
260672003-11-08  Darin Adler  <darin@apple.com>
26068
26069        Reviewed by John.
26070
26071        - fixed 3477528 -- array.sort(function) fails if the function returns a non-zero value that rounds to zero
26072
26073        * kjs/array_object.cpp:
26074        (compareByStringForQSort): Added checks for undefined values to match what the specification calls for.
26075        (compareWithCompareFunctionForQSort): Added checks for undefined values as above, and also changed the
26076        code that looks at the compare function result to look at the number returned without rounding to an integer.
26077        (ArrayProtoFuncImp::call): Changed the code that looks at the compare function result to look at the number
26078        returned without rounding to an integer.
26079
26080=== Safari-113 ===
26081
260822003-11-03  Vicki Murley <vicki@apple.com>
26083
26084        Reviewed by kocienda.
26085
26086        - fixed <rdar://problem/3471096>: non-B&I builds should not use order files, because they cause false "regressions" in perf.
26087
26088        * JavaScriptCore.pbproj/project.pbxproj: added empty SECTORDER_FLAGS variables to the Development and Deployment build styles
26089
260902003-11-02  Darin Adler  <darin@apple.com>
26091
26092        Reviewed by Maciej.
26093
26094        - changed list manipulation to use Harri Porten's idea of a circular
26095          linked list that is built from head to tail rather than building the
26096          list backwards and reversing the list when done
26097
26098        * kjs/grammar.y: Handle CatchNode and FinallyNode in a type-safe way.
26099        Change many places that passed 0L to pass nothing at all, or to pass 0.
26100
26101        * kjs/nodes.h:
26102        (KJS::ElementNode::ElementNode): Build a circular list instead of a 0-terminated
26103        backwards list.
26104        (KJS::ArrayNode::ArrayNode): Break the circular list instead of reversing the list.
26105        (KJS::PropertyValueNode::PropertyValueNode): Moved before ObjectLiteralNode so the
26106        inline code in ObjectLiteralNode works. Build a circular list instead of a 0-terminated
26107        backwards list. Made the case for the first node separate so we don't need a nil check.
26108        (KJS::ObjectLiteralNode::ObjectLiteralNode): Break the circular list instead of
26109        reversing the list.
26110        (KJS::ArgumentListNode::ArgumentListNode): Build a circular list instead of a 0-terminated
26111        backwards list. Also, made the constructors inline (moved here from .cpp file).
26112        (KJS::ArgumentsNode::ArgumentsNode): Break the circular list instead of
26113        reversing the list.
26114        (KJS::NewExprNode::NewExprNode): Changed a 0L to 0.
26115        (KJS::StatListNode::StatListNode): Make this constructor no longer inline (moved into
26116        .cpp file). The one in the .cpp file builds a circular list instead of a 0-terminated
26117        backwards list.
26118        (KJS::VarDeclListNode::VarDeclListNode): Build a circular list instead of a 0-terminated
26119        backwards list.
26120        (KJS::VarStatementNode::VarStatementNode): Break the circular list instead of reversing
26121        the list.
26122        (KJS::BlockNode::BlockNode): Make this constructor no longer inline (moved into .cpp file).
26123        The one in the .cpp file breaks the list instead of reversing it.
26124        (KJS::ForNode::ForNode): Break the circular list instead of reversing the list.
26125        (KJS::CaseClauseNode::CaseClauseNode): Break the circular list instead of reversing the
26126        list.
26127        (KJS::ClauseListNode::ClauseListNode): Build a circular list instead of a 0-terminated
26128        backwards list.
26129        (KJS::CaseBlockNode::CaseBlockNode): Make this constructor no longer inline (moved into
26130        .cpp file). The one in the .cpp file breaks the list instead of reversing it.
26131        (KJS::TryNode::TryNode): Changed constructor to take typed parameters for the catch and
26132        finally nodes rather than just Node.
26133        (KJS::ParameterNode::ParameterNode): Build a circular list instead of a 0-terminated
26134        backwards list.
26135        (KJS::FuncDeclNode::FuncDeclNode): Break the circular list instead of reversing the
26136        list.
26137        (KJS::FuncExprNode::FuncExprNode): Break the circular list instead of reversing the
26138        list.
26139
26140        * kjs/nodes.cpp:
26141        (StatListNode::StatListNode): Moved this constructor here, no longer inline.
26142        Did the "break circular list" thing instead of the "reverse list" thing.
26143        Added setLoc calls to match KJS in the KDE tree; since we don't currently
26144        use the JavaScript debugging support, it's unclear whether there's any benefit, but
26145        later we might be using it and it's good to be as close as possible.
26146        (BlockNode::BlockNode): Moved this constructor here, no longer inline.
26147        Did the "break circular list" thing instead of the "reverse list" thing.
26148        Added setLoc calls.
26149        (CaseBlockNode::CaseBlockNode): Moved this constructor here, no longer inline.
26150        Did the "break circular list" thing instead of the "reverse list" thing.
26151        (SourceElementsNode::SourceElementsNode): Moved this constructor here, no longer inline.
26152        Did the "break circular list" thing instead of the "reverse list" thing.
26153        Added setLoc calls.
26154
26155        * kjs/grammar.cpp: Regenerated.
26156        * kjs/grammar.cpp.h: Regenerated.
26157        * kjs/grammar.h: Regenerated.
26158
26159=== Safari-112 ===
26160
261612003-10-30  Maciej Stachowiak  <mjs@apple.com>
26162
26163        Reviewed by Ken.
26164
26165        - fixed 3427069 - browsing mp3.com causes leaks (KJS)
26166        
26167        * kjs/string_object.cpp:
26168        (StringProtoFuncImp::call): Don't do an early return, since that
26169        could leak a temporary regexp.
26170
261712003-10-29  Maciej Stachowiak  <mjs@apple.com>
26172
26173        Reviewed by Darin.
26174
26175        - fixed 3426076 - Leak of JS lexer data visiting http://www.ebay.com
26176        
26177        * kjs/grammar.cpp:
26178        (yyerror): Updated the commented code.
26179        * kjs/grammar.y: Don't delete string and identifier tokens when done
26180        with them any more, they'll get cleaned up by the lexer now.
26181        * kjs/internal.cpp:
26182        (Parser::parse): Tell lexer when done parsing.
26183        * kjs/lexer.cpp:
26184        (Lexer::Lexer): Initialize new data members.
26185        (Lexer::lex): Use new methods to make strings and identifiers, and
26186        save them.
26187        (Lexer::makeIdentifier): Make a new Identifier and save it in an
26188        auto-growing array.
26189        (Lexer::makeUString): Likewise for UStrings.
26190        (Lexer::doneParsing): Clean up arrays of Ifentifiers and UStrings.
26191        * kjs/lexer.h:
26192
261932003-10-28  Maciej Stachowiak  <mjs@apple.com>
26194
26195        Reviewed by Ken.
26196
26197        - fixed 3413962 -  malicious web pages can kill all future JavaScript execution by breaking recursion limit check
26198        
26199        * kjs/nodes.cpp:
26200        (FunctionCallNode::evaluate): If we're going to return early due
26201        to breaking the recursion limit, make sure to lower it again, or
26202        it will creep up by one each time it's exceeded.
26203
262042003-10-26  Darin Adler  <darin@apple.com>
26205
26206        * JavaScriptCorePrefix.h: Added a C case to the NULL definition since we use C as well
26207        as C++ in this project.
26208
262092003-10-26  Darin Adler  <darin@apple.com>
26210
26211        - rolled in some CString changes Harri Porten did on the KDE side
26212
26213        * kjs/ustring.cpp:
26214        (KJS::CString::CString): Use memcpy instead of strcpy for speed. Fix an off by one error
26215        in the copy constructor.
26216        (KJS::CString::operator=): Use memcpy instead of strcpy for speed.
26217
26218        * JavaScriptCorePrefix.h: Add a definition of NULL here that takes advantage of the GNU
26219        __null feature even if the system C library doesn't.
26220
26221== Rolled over to ChangeLog-2003-10-25 ==
26222