2007-10-11  Mark Rowe  <mrowe@apple.com>

        Reviewed by Tim Hatcher.

        Fix for <rdar://problem/5488678>.  Disable debugging symbols in production builds for 10.4
        PowerPC to prevent a huge STABS section from being generated.

        * Configurations/Base.xcconfig:

2007-10-08  George Staikos  <staikos@kde.org>

        Reviewed by Adam Roben.

        Fix Qt build on Win32.

        * kjs/testkjs.cpp:
        (main):

2007-10-10  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Lars.

        Fix compilation using gcc 4.3. Header files have been reorganized and as a result some extra
        includes are needed for INT_MAX, std::auto_ptr and the like.

        * kjs/collector.cpp:
        * kjs/collector.h:
        * kjs/lexer.cpp:
        * kjs/scope_chain.cpp:
        * kjs/ustring.cpp:
        * wtf/Vector.h:

2007-10-09  Lars Knoll  <lars@trolltech.com>

        Reviewed by Simon.

        fix the invokation of slots with return types. Add a JSLock around the conversion from QVariant to JSValue.

        * bindings/qt/qt_instance.cpp:
        (KJS::Bindings::QtInstance::invokeMethod):
        * bindings/qt/qt_runtime.cpp:
        (KJS::Bindings::convertValueToQVariant):
        (KJS::Bindings::convertQVariantToValue):

2007-10-05  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Sam Weinig.
        
        Added JSObject::removeDirect, to support the fix for 
        <rdar://problem/5522487> REGRESSION: With JavaScript disabled, any 
        page load causes a crash in PropertyMap::put

        * kjs/object.cpp:
        (KJS::JSObject::removeDirect):
        * kjs/object.h:

2007-10-04  Mark Rowe  <mrowe@apple.com>

        Reviewed by Oliver.

        Switch to default level of debugging symbols to resolve <rdar://problem/5488678>.
        The "full" level appears to offer no observable benefits even though the documentation
        suggests it be used for dead code stripping.  This should also decrease link times.

        * Configurations/Base.xcconfig:

2007-10-03  Lars Knoll  <lars@trolltech.com>

        Reviewed by Rob.

        Fix a stupid bug in Unicode::toUpper/toLower.
        Fixes all three test failures in the JavaScriptCore test
        suite.

        * wtf/unicode/qt4/UnicodeQt4.h:
        (WTF::Unicode::toLower):
        (WTF::Unicode::toUpper):

2007-10-02  Darin Adler  <darin@apple.com>

        Reviewed by Adam.

        - add support for GDI objects to OwnPtr; I plan to use this
          to fix some GDI handle leaks

        * kjs/grammar.y: Change parser to avoid macros that conflict
        with macros defined in Windows system headers: THIS, DELETE,
        VOID, IN, and CONST. This is needed because OwnPtr.h will now
        include <windows.h>.
        * kjs/keywords.table: Ditto.

        * wtf/OwnPtr.h: For PLATFORM(WIN), add support so that OwnPtr can be
        a GDI handle, and it will call DeleteObject. Also change to use the
        RemovePointer technique used by RetainPtr, so you can say OwnPtr<HBITMAP>
        rather than having to pass in the type pointed to by HBITMAP.

        * wtf/OwnPtrWin.cpp: Added.
        (WebCore::deleteOwnedPtr): Put this in a separate file so that we
        don't have to include <windows.h> in OwnPtr.h.

        * JavaScriptCore.vcproj/WTF/WTF.vcproj: Added OwnPtrWin.cpp.

2007-09-29  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Mark.

        -Fix http://bugs.webkit.org/show_bug.cgi?id=13226.
        Remove Bakefiles from svn.

        * JavaScriptCoreSources.bkl: Removed.
        * jscore.bkl: Removed.

2007-09-27  Kevin Decker  <kdecker@apple.com>

        Rubber stamped by John Sullivan.

        <rdar://problem/5493093>
        
        * JavaScriptCore.order: Added.
        * JavaScriptCore.xcodeproj/project.pbxproj: We're changing from using an order file built by
         another team to using one we actually check into our project repository. Linker settings for
         Symbol Ordering Flags have been updated accordingly.

2007-09-26  Adam Roben  <aroben@apple.com>

        Make testkjs delay-load WebKit.dll so WebKitInitializer can work its magic

        Rubberstamped by Anders.

        * JavaScriptCore.vcproj/testkjs/testkjs.vcproj:

2007-09-25  Adam Roben  <aroben@apple.com>

        Make testkjs delay-load its dependencies

        This lets WebKitInitializer re-route the dependencies to be loaded out
        of the Safari installation directory.

        Rubberstamped by Sam.

        * JavaScriptCore.vcproj/testkjs/testkjs.vcproj:

2007-09-25  David Kilzer  <ddkilzer@webkit.org>

        Reviewed by Adam.

        - Fix http://bugs.webkit.org/show_bug.cgi?id=14885
          LGPL'ed files contain incorrect FSF address

        * COPYING.LIB:
        * bindings/testbindings.cpp:
        * kjs/AllInOneFile.cpp:
        * kjs/DateMath.cpp:
        * kjs/PropertyNameArray.cpp:
        * kjs/PropertyNameArray.h:
        * kjs/config.h:

2007-09-25  Sam Weinig  <sam@webkit.org>

        Fix location for build products for Debug_Internal.

        Reviewed by Adam Roben.

        * JavaScriptCore.vcproj/testkjs/testkjs.vcproj:

2007-09-25  Adam Roben  <aroben@apple.com>

        Make testkjs use WebKitInitializer

        Reviewed by Sam.

        * JavaScriptCore.vcproj/JavaScriptCore.sln: Add WebKitInitializer and
        make testkjs depend on it.
        * JavaScriptCore.vcproj/testkjs/testkjs.vcproj: Link against
        WebKitInitializer.lib.
        * kjs/testkjs.cpp:
        (main): Call initializeWebKit.

2007-09-24  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Sam.

        - Continued to update project files to not use Edit and Continue for Debug Information since it doesn't work and breaks some functionality.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
        * JavaScriptCore.vcproj/WTF/WTF.vcproj:

2007-09-21  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Sam.

        - Updated project files to not use Edit and Continue for Debug Information since it doesn't work and breaks some functionality.

        * JavaScriptCore.vcproj/dftables/dftables.vcproj:
        * JavaScriptCore.vcproj/testkjs/testkjs.vcproj:

2007-09-20  Holger Hans Peter Freyther  <zecke@selfish.org>

        Rubber stamped by Adam.

        Renamed files from *Gdk to *Gtk (see #14732) using the
        work of Juan A. Suarez Romero as a base.

        GDK -> GTK 

        * JavaScriptCore.pri:
        * kjs/testkjs.pro:
        * pcre/dftables.pro:
        * wtf/Platform.h: PLATFORM(GDK) to PLATFORM(GTK)

2007-09-21  Mark Rowe  <mrowe@apple.com>

        Reviewed by Antti Koivisto.

        http://bugs.webkit.org/show_bug.cgi?id=15250
        <rdar://problem/5496942> REGRESSION: Reproducible crash in Safari when evaluating script in Drosera console (15250)

        * kjs/function.cpp:
        (KJS::GlobalFuncImp::callAsFunction): Null-check thisObj before passing it to interpreterForGlobalObject.

2007-09-19  Holger Hans Peter Freyther  <zecke@selfish.org>

        Rubber stamped by Adam.

        Make the guard/#if use the same name (ENABLE_FTPDIR) as the #define. This follows
        the ENABLE_ICONDATABASE example from a couple of lines above.

        * wtf/Platform.h:

2007-09-19  Mark Rowe  <mrowe@apple.com>

        Reviewed by Maciej.

        <rdar://problem/5487107> NULL dereference crash in FastMallocZone::enumerate when running leaks against Safari

        Storing remote pointers to their local equivalents in mapped memory was leading to the local pointer being
        interpreted as a remote pointer.  This caused a crash when using the result of mapping this invalid remote pointer.
        The fix is to follow the pattern used elsewhere in FastMallocZone by always doing the mapping after reading and
        never storing the mapped pointer.

        * wtf/FastMalloc.cpp:
        (WTF::FastMallocZone::enumerate):

2007-09-15  Darin Adler  <darin@apple.com>

        - fix Mac build

        * JavaScriptCore.exp: Export WTFLogVerbose.

2007-09-14  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Sam.

        - Copy JSRetainPtr to include folder.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:

2007-09-13  Geoffrey Garen  <ggaren@apple.com>

        Try to fix GDK build.

        * wtf/MathExtras.h:
        (wtf_random_init):

2007-09-12  Geoff Garen  <ggaren@apple.com>

        Reviewed by Sam Weinig.
        
        Fixed <rdar://problem/5429064> 141885 Safari JavaScript: Math.random() slightly less randomly distributed than on Safari / Mac

        Math.random was skewed slightly upward because it assumed that RAND_MAX was outside the range of
        values that rand() might return. This problem was particularly pronounced on Windows because
        the range of values returned by rand() on Windows is 2^16 smaller than the range of values
        return by rand() on Mac.
        
        Fixed by accounting for RAND_MAX return values. Also, switched Windows over to rand_s, which has
        a range that's equal to rand()'s range on Mac.
        
        * kjs/config.h:

        * kjs/math_object.cpp:
        (MathFuncImp::callAsFunction): Use the new new thing.

        * wtf/MathExtras.h: Platform abstraction for random numbers, to cover over differences on Windows.
        (wtf_random_init):
        (wtf_random):

2007-09-13  Antti Koivisto  <antti@apple.com>

        Reviewed by Maciej.
        
        Small addition to previous path to cover
        http://bugs.webkit.org/show_bug.cgi?id=11399
        window.eval runs in the global scope of the calling window
        
        Switch variable scope as well.

        * kjs/function.cpp:
        (KJS::GlobalFuncImp::callAsFunction):

2007-09-12  Antti Koivisto  <antti@apple.com>

        Reviewed by Geoff, Maciej.
        
        Fix <rdar://problem/5445058>
        REGRESSION: Unable to upload picture to eBay auction due to domain security check
        
        eBay uses window.eval() between windows. In Firefox window.eval() switches execution
        and security context to the target window, something WebKit did not do. With WebKit
        security tightening in r24781, this broke picture uploads.
        
        Fix by making WebKit switch context in window.eval().
        
        * kjs/Context.cpp:
        (KJS::Context::Context):
        (KJS::Context::~Context):
        * kjs/context.h:
        Save and restore interpreter context independently from calling context.
        
        * kjs/function.cpp:
        (KJS::GlobalFuncImp::callAsFunction):
        If eval is called for global object different than current one, switch execution context
        to that object and push it to scope.

2007-09-12  Sam Weinig  <sam@webkit.org>

        Reviewed by Geoffrey Garen.

        <rdar://problem/5478717> JSStringCreateWithCFString leaks when passed a zero length CFStringRef

        * API/JSStringRefCF.cpp:
        (JSStringCreateWithCFString): Special case the zero length string and remove the
        UTF16 optimized path since it will always leak due to the fact that we won't be 
        able to free the backing store that the CFStringRef provides.

2007-09-10  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Darin Adler.

        <rdar://problem/5456224> CrashTracer: [USER] 2 crashes in Toast Titanium at com.apple.CoreServices.CarbonCore: CSMemDisposePtr + 37

        Removed the implementation of these malloc zone functions. We do not have the ability to 
        check if a pointer is valid or not, so we can't correctly implement them. The system free 
        does not fail if you pass in a bad pointer.

        * wtf/FastMalloc.cpp:
        (WTF::FastMallocZone::size):
        (WTF::FastMallocZone::zoneMalloc):
        (WTF::FastMallocZone::zoneCalloc):
        (WTF::FastMallocZone::zoneFree):
        (WTF::FastMallocZone::zoneRealloc):

2007-09-07  Darin Adler  <darin@apple.com>

        Reviewed by Steve Falkenburg.

        - fix crash seen on Windows release builds

        * wtf/FastMalloc.cpp: Change pthread_getspecific optimization to be done only
        on the DARWIN platform. Also correct a couple reinterpret_cast that should be
        static_cast instead.

2007-09-06  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Maciej.

        - Moved JSRetainPtr to the API.

        * API/JSRetainPtr.h: Copied from kjs/JSRetainPtr.h.
        (JSRetain):
        (JSRelease):
        (JSRetainPtr::JSRetainPtr):
        (JSRetainPtr::~JSRetainPtr):
        (JSRetainPtr::get):
        (JSRetainPtr::releaseRef):
        (JSRetainPtr::operator->):
        (JSRetainPtr::operator!):
        (JSRetainPtr::operator UnspecifiedBoolType):
        (::operator):
        (::adopt):
        (::swap):
        (swap):
        (operator==):
        (operator!=):
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * kjs/JSRetainPtr.h: Removed.

2007-09-05  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin.
        
        - Remove single-threaded optimization for FastMalloc. 
        
        It does not appear to help anywhere but Mac OS X on PPC, due to
        pthread_getspecific being slow there. On Intel, removing the
        optimization results in a ~1.5% PLT speedup, a ~1-5% JS iBench
        speedup, and a ~1.5% HTML iBench speedup. On PPC this change is a
        speedup on some benchmarks, a slight hit on others.

        * JavaScriptCore.xcodeproj/project.pbxproj:
        * kjs/collector.cpp:
        (KJS::Collector::registerThread):
        * wtf/FastMalloc.cpp:
        (WTF::TCMalloc_ThreadCache::GetCache):
        (WTF::TCMalloc_ThreadCache::GetCacheIfPresent):
        (WTF::TCMalloc_ThreadCache::CreateCacheIfNecessary):
        (WTF::do_malloc):
        * wtf/FastMallocInternal.h: Removed.

2007-09-05  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Adam, Sam, Darin.

        - Created a JSRetainPtr specifically for JSStringRefs so they can be automatically refed and derefed.

        * JavaScriptCore.xcodeproj/project.pbxproj:
        * kjs/JSRetainPtr.h: Copied from wtf/RetainPtr.h.
        (KJS::JSRetain):
        (KJS::JSRelease):
        (KJS::):
        (KJS::JSRetainPtr::JSRetainPtr):
        (KJS::JSRetainPtr::~JSRetainPtr):
        (KJS::JSRetainPtr::get):
        (KJS::JSRetainPtr::releaseRef):
        (KJS::JSRetainPtr::operator->):
        (KJS::JSRetainPtr::operator UnspecifiedBoolType):
        (KJS::::operator):
        (KJS::::adopt):
        (KJS::::swap):
        (KJS::swap):
        (KJS::operator==):
        (KJS::operator!=):

2007-09-05  Mark Rowe  <mrowe@apple.com>

        Unreviewed Qt build fix.

        * wtf/unicode/qt4/UnicodeQt4.h: Fix the constness of the src argument to toUpper to prevent build failures.

2007-09-04  Maciej Stachowiak  <mjs@apple.com>

        Back out accidentally committed change.

        * JavaScriptCore.xcodeproj/project.pbxproj:
        * kjs/collector.cpp:
        (KJS::Collector::registerThread):
        * wtf/FastMalloc.cpp:
        (WTF::fastMallocSetIsMultiThreaded):
        (WTF::TCMalloc_ThreadCache::GetCache):
        (WTF::TCMalloc_ThreadCache::GetCacheIfPresent):
        (WTF::TCMalloc_ThreadCache::CreateCacheIfNecessary):
        (WTF::do_malloc):
        * wtf/FastMallocInternal.h: Added.

2007-09-04  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin.
        
        - Added Vector::appendRange(), which appends to a vector based on a given start and end iterator
        - Added keys() and values() functions to HashMap iterators, which give keys-only and values-only iterators
        
        Together, these allow easy copying of a set, or the keys or values of a map, into a Vector. Examples:
        
        HashMap<int, int> map;
        HashSet<int> set;
        Vector<int> vec;
        // ...
        vec.appendRange(set.begin(), set.end());
        vec.appendRange(map.begin().keys(), map.end().keys());
        vec.appendRange(map.begin().values(), map.end().values());

        This also allows for a slightly nicer syntax when iterating a map. Instead of saying 
        (*it)->first, you can say *it.values(). Similarly for keys. Example:
        
        HashMap<int, int>::const_iterator end = map.end();
        for (HashMap<int, int>::const_iterator it = map.begin(); it != end; ++it)
        printf(" [%d => %d]", *it.keys(), *it.values());

        * JavaScriptCore.xcodeproj/project.pbxproj:
        * wtf/HashIterators.h: Added.
        (WTF::):
        (WTF::HashTableConstKeysIterator::HashTableConstKeysIterator):
        (WTF::HashTableConstKeysIterator::get):
        (WTF::HashTableConstKeysIterator::operator*):
        (WTF::HashTableConstKeysIterator::operator->):
        (WTF::HashTableConstKeysIterator::operator++):
        (WTF::HashTableConstValuesIterator::HashTableConstValuesIterator):
        (WTF::HashTableConstValuesIterator::get):
        (WTF::HashTableConstValuesIterator::operator*):
        (WTF::HashTableConstValuesIterator::operator->):
        (WTF::HashTableConstValuesIterator::operator++):
        (WTF::HashTableKeysIterator::HashTableKeysIterator):
        (WTF::HashTableKeysIterator::get):
        (WTF::HashTableKeysIterator::operator*):
        (WTF::HashTableKeysIterator::operator->):
        (WTF::HashTableKeysIterator::operator++):
        (WTF::HashTableKeysIterator::operator HashTableConstKeysIterator<HashTableType, KeyType, MappedType>):
        (WTF::HashTableValuesIterator::HashTableValuesIterator):
        (WTF::HashTableValuesIterator::get):
        (WTF::HashTableValuesIterator::operator*):
        (WTF::HashTableValuesIterator::operator->):
        (WTF::HashTableValuesIterator::operator++):
        (WTF::HashTableValuesIterator::operator HashTableConstValuesIterator<HashTableType, KeyType, MappedType>):
        (WTF::operator==):
        (WTF::operator!=):
        * wtf/HashTable.h:
        * wtf/Vector.h:
        (WTF::::appendRange):

2007-09-04  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin.
        
        - Remove single-threaded optimization for FastMalloc. 
        
        It does not appear to help anywhere but Mac OS X on PPC, due to
        pthread_getspecific being slow there. On Intel, removing the
        optimization results in a 1% PLT speedup, a 2% JS iBench speedup,
        and no measurable effect on HTML iBench (maybe a slight speedup).

        * JavaScriptCore.xcodeproj/project.pbxproj:
        * kjs/collector.cpp:
        (KJS::Collector::registerThread):
        * wtf/FastMalloc.cpp:
        (WTF::TCMalloc_ThreadCache::GetCache):
        (WTF::TCMalloc_ThreadCache::GetCacheIfPresent):
        (WTF::TCMalloc_ThreadCache::CreateCacheIfNecessary):
        (WTF::do_malloc):
        * wtf/FastMallocInternal.h: Removed.

2007-09-03  Mark Rowe  <mrowe@apple.com>

        Reviewed by Tim Hatcher.

        <rdar://problem/5452164> Production build with in symbols directory has no debug info

        Enable debug symbol generation on all build configurations.  Production builds are stripped
        of symbols by Xcode during deployment post-processing.

        * Configurations/Base.xcconfig:
        * JavaScriptCore.xcodeproj/project.pbxproj:

2007-08-30  Riku Voipio  <riku.voipio@iki.fi>

        Reviewed by Dave Kilzer.

        Better ARM defines.

        * kjs/ustring.h: Update comments to reflect the change and update test
        to fit changes to Platform.h.
        * wtf/Platform.h: Forced packing is only needed on oldabi ARM.
        Set middle-endian floats only for little-endian oldabi ARM.
        Set big-endian define for big-endian ARM.

2007-08-29  Ryan Leavengood <leavengood@gmail.com>

        Reviewed by Maciej.

        http://bugs.webkit.org/show_bug.cgi?id=15043
        - posix_memalign takes a void** as its first parameter. My port makes use of this function call.

        * kjs/collector.cpp:
        (KJS::allocateBlock):

2007-08-26  Darin Adler  <darin@apple.com>

        - quick follow on to that last check-in

        * API/JSCallbackObject.cpp: (KJS::JSCallbackObject::JSCallbackObject):
        Need to initialize m_class to 0.

2007-08-26  Mark Rowe  <mrowe@apple.com>

        Reviewed by Darin Adler.

        <rdar://problem/4949002> JSGlobalContextCreate can cause crashes because it passes a NULL JSContextRef to the globalObjectClass's initialize callback

        JSCallbackObject now tracks whether it was constructed with a null ExecState.  This will happen when the object is being used as the global object,
        as the Interpreter needs to be created after the global object.  In this situation the initialization is deferred until after the Interpreter's
        ExecState is available to be passed down to the initialize callbacks.

        * API/JSCallbackObject.cpp:
        (KJS::JSCallbackObject::init): Track whether we successfully initialized.
        (KJS::JSCallbackObject::initializeIfNeeded): Attempt to initialize with the new ExecState.
        * API/JSCallbackObject.h:
        * API/JSContextRef.cpp:
        (JSGlobalContextCreate): Initialize the JSCallbackObject with the Interpreter's ExecState.
        * API/testapi.c:
        (testInitializeOfGlobalObjectClassHasNonNullContext):
        (main): Verify that the context passed to the initialize callback is non-null.

2007-08-26  Mark Rowe  <mrowe@apple.com>

        Reviewed by Darin Adler.

        <rdar://problem/5438496> JSGlobalContextCreate crashes when passed a custom class

        * API/JSContextRef.cpp:
        (JSGlobalContextCreate): Specify jsNull() as the prototype and let Interpreter's constructor fix it up to point at builtinObjectPrototype().
        * API/testapi.c:
        (main): Use an instance of a custom class as the global object to ensure the code path is exercised in the test.

2007-08-26  Mike Hommey  <glandium@debian.org>

        Reviewed by Mark Rowe and David Kilzer.

        Fix build failure on arm.

        * wtf/Platform.h: Also test if __arm__ is defined.

2007-08-25  Peter Kasting <zerodpx@gmail.org>

        Reviewed by Maciej Stachowiak.

        Part 3 of http://bugs.webkit.org/show_bug.cgi?id=14967
        Bug 14967: Reduce wtf::Vector::operator[]() overloads

        * wtf/Vector.h:
        (WTF::Vector::operator[]): Only provide versions of operator[] that takes a size_t argument.

2007-08-25  Peter Kasting <zerodpx@gmail.org>

        Reviewed by Sam Weinig.

        Part 2 of http://bugs.webkit.org/show_bug.cgi?id=14967.
        Eliminate all remaining implicit conversions of wtf::Vector<T> to T*.  Where code was
        previously checking that the Vector's data pointer was non-NULL, check !Vector::isEmpty()
        instead.

        * wtf/Vector.h:
        (WTF::Vector::data):

2007-08-16  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Geoff and Adam.

        - 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)

        * kjs/object.cpp:

2007-08-15  Peter Kasting  <zerodpx@gmail.org>

        Reviewed by Darin.
        
        http://bugs.webkit.org/show_bug.cgi?id=14967 part 1 - Eliminate most implicit
        conversions of wtf::Vector<T> to T* by explicitly calling .data()

        * API/JSCallbackConstructor.cpp:
        (KJS::JSCallbackConstructor::construct):
        * API/JSCallbackFunction.cpp:
        (KJS::JSCallbackFunction::callAsFunction):
        * API/JSCallbackObject.cpp:
        (KJS::JSCallbackObject::construct):
        (KJS::JSCallbackObject::callAsFunction):
        * bindings/c/c_instance.cpp:
        (KJS::Bindings::CInstance::invokeMethod):
        (KJS::Bindings::CInstance::invokeDefaultMethod):
        * kjs/number_object.cpp:
        (integer_part_noexp):
        (char_sequence):
        * kjs/ustring.cpp:
        (KJS::UString::UTF8String):

2007-08-14  Darin Adler  <darin@apple.com>

        Reviewed by Sam.

        - fix <rdar://problem/5410570> Global initializer introduced by use of std::numeric_limits in r24919

        * kjs/ustring.cpp:
        (KJS::overflowIndicator): Turned into a function.
        (KJS::maxUChars): Ditto.
        (KJS::allocChars): Use the functions.
        (KJS::reallocChars): Ditto.
        (KJS::UString::expandedSize): Ditto.

2007-08-12  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        - fix http://bugs.webkit.org/show_bug.cgi?id=14931
          <rdar://problem/5403816> JavaScript regular expression non-participating capturing parentheses
          fail in 3 different ways

        Test: fast/js/regexp-non-capturing-groups.html

        * kjs/string_object.cpp:
        (KJS::replace): Add missing code to handle undefined backreferences; before we'd get the empty string
        instead of a JavaScript "undefined" value.
        (KJS::StringProtoFunc::callAsFunction): Implemented backreference support for split.
        * pcre/pcre_exec.c: (match): Made backreferences to undefined groups match the empty string instead
        of always failing. Only in JAVASCRIPT mode.

        * tests/mozilla/expected.html: Add a new expected test success, since this fixed one test result.

2007-08-10  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Adam.

        <rdar://problem/5394449> Stop using some Carbon UI APIs for 64 bit

        Disable the NPAPI for 64-bit on Mac OS X.

        * Configurations/JavaScriptCore.xcconfig: Use the 64-bit export file.
        * JavaScriptCore.xcodeproj/project.pbxproj: Create a 64-bit export file
        that filters out the NPN fnctions.
        * bindings/NP_jsobject.cpp: #ifdef out this for 64-bit on Mac OS X
        * bindings/NP_jsobject.h: Ditto.
        * bindings/c/c_class.cpp: Ditto.
        * bindings/c/c_class.h: Ditto.
        * bindings/c/c_instance.cpp: Ditto.
        * bindings/c/c_instance.h: Ditto.
        * bindings/c/c_runtime.cpp: Ditto.
        * bindings/c/c_runtime.h: Ditto.
        * bindings/c/c_utility.cpp: Ditto.
        * bindings/c/c_utility.h: Ditto.
        * bindings/npapi.h: Ditto.
        * bindings/npruntime.cpp: Ditto.
        * bindings/npruntime.h: Ditto.
        * bindings/npruntime_impl.h: Ditto.
        * bindings/npruntime_priv.h: Ditto.
        * bindings/runtime.cpp:
        (KJS::Bindings::Instance::createBindingForLanguageInstance):
         don't creat an NPObject on Mac OS X in 64-bit.

2007-08-09  Mark Rowe  <mrowe@apple.com>

        Reviewed by Antti.

        <rdar://problem/5400709> Versioning in debug and release builds should include minor and tiny version before +

        * Configurations/Version.xcconfig:
        * JavaScriptCore.xcodeproj/project.pbxproj: Add a shell script phase to make to dependency between
        Version.xcconfig and Info.plist explicit to Xcode.

2007-08-08  George Staikos  <staikos@kde.org>

        Make it compile with Qt again.

        * wtf/unicode/qt4/UnicodeQt4.h:
        (WTF::Unicode::toUpper):

2007-08-07  Sam Weinig  <sam@webkit.org>

        Reviewed by Oliver.

        Fix for http://bugs.webkit.org/show_bug.cgi?id=14897
        Decompilation of double negation fails and produces invalid or incorrect code

        Test: fast/js/function-decompilation-operators.html

        * kjs/nodes2string.cpp:
        (UnaryPlusNode::streamTo): Put space after unary operator.  Matches Firefox.
        (NegateNode::streamTo): Diito.
        (MultNode::streamTo): Put spaces around binary operator.  Matches Firefox.
        (AddNode::streamTo): Ditto.

2007-08-07  Darin Adler  <darin@apple.com>

        Reviewed by Adele.

        - fix <rdar://problem/5383104> REGRESSION: XHR.responseText is null instead of empty string
          in http/tests/xmlhttprequest/zero-length-response.html

        The new code to handle out of memory conditions was turning a "" into a null string.

        * kjs/ustring.h: Removed UCharReference, which has long been obsolete and unused.
        Removed copyForWriting, which was only used for the upper/lowercasing code and for
        UCharReference.
        * kjs/ustring.cpp:
        (KJS::allocChars): Removed special case that made this fail (return 0) when passed 0.
        Instead assert that we're not passed 0. Also added an overflow check for two reasons:
        1) for sizes that aren't checked this prevents us from allocating a buffer that's too
        small, and 2) for sizes where we overflowed in the expandedSize function and returned
        overflowIndicator, it guarantees we fail.
        (KJS::reallocChars): Ditto.
        (KJS::UString::expandedSize): Return a large number, overflowIndicator, rather than 0
        for cases where we overflow.
        (KJS::UString::spliceSubstringsWithSeparators): Added a special case for empty string so
        we don't call allocChars with a length of 0.
        (KJS::UString::operator=): Added special characters for both 0 and empty string so we
        match the behavior of the constructor. This avoids calling allocChars with a length of 0
        and making a null string rather than an empty string in that case, and also matches the
        pattern used in the rest of the functions.
        (KJS::UString::operator[]): Made the return value const so code that tries to use the
        operator to modify the string will fail.

        * kjs/string_object.cpp: (KJS::StringProtoFunc::callAsFunction): Rewrote uppercasing and
        lowercasing functions so they don't need copyForWriting any more -- it wasn't really doing
        any good for optimization purposes. Instead use a Vector and releaseBuffer.

        * wtf/unicode/icu/UnicodeIcu.h: Eliminate one of the versions of toLower/toUpper -- we now
        only need the version where both a source and destination buffer is passed in, not the one
        that works in place.
        * wtf/unicode/qt4/UnicodeQt4.h: Ditto.

2007-08-06  Sam Weinig  <sam@webkit.org>

        Reviewed by Oliver.

        Fix for http://bugs.webkit.org/show_bug.cgi?id=14891
        Decompilation of try block immediately following "else" fails

        Test: fast/js/toString-try-else.html

        * kjs/nodes2string.cpp:
        (TryNode::streamTo): Add newline before "try".

2007-08-07  Mark Rowe  <mrowe@apple.com>

        Reviewed by Maciej.

        <rdar://problem/5388774> REGRESSION: Hang occurs after clicking "Attach a file " link in a new .Mac message

        Attempting to acquire the JSLock inside CollectorHeap::forceLock can lead to a deadlock if the thread currently
        holding the lock is waiting on the thread that is forking.  It is not considered safe to use system frameworks
        after a fork without first execing[*] so it is not particularly important to ensure that the collector and
        fastMalloc allocators are unlocked in the child process.  If the child process wishes to use JavaScriptCore it
        should exec after forking like it would to use any other system framework.
        [*]: <http://lists.apple.com/archives/Cocoa-dev/2005/Jan/msg00676.html>

        * kjs/CollectorHeapIntrospector.cpp: Remove forceLock and forceUnlock implementations.
        * kjs/CollectorHeapIntrospector.h: Stub out forceLock and forceUnlock methods.
        * wtf/FastMalloc.cpp: Ditto.

2007-08-06  Darin Adler  <darin@apple.com>

        Rubber stamped by Geoff.

        * kjs/ustring.h: Added an assertion which would have helped us find the
        previous bug more easily.

2007-08-06  Darin Adler  <darin@apple.com>

        Reviewed by Anders.

        - fix <rdar://problem/5387589> 9A514: Quartz Composer crash on launch in KJS::jsString

        * API/JSBase.cpp:
        (JSEvaluateScript): Turn NULL for sourceURL into UString::null(), just as JSObjectMakeFunction already does.
        (JSCheckScriptSyntax): Ditto.

2007-08-06  Matt Lilek  <pewtermoose@gmail.com>

        Not reviewed, build fix.

        * kjs/string_object.cpp:
        (KJS::StringProtoFunc::callAsFunction):

2007-08-04  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        - fix <rdar://problem/5371862> crash in Dashcode due to Quartz Composer JavaScript garbage collector reentrancy

        * API/JSBase.cpp: (JSGarbageCollect): Don't call collector() if isBusy() returns true.

        * kjs/collector.h: Added isBusy(), removed the unused return value from collect()
        * kjs/collector.cpp: Added an "operation in progress" flag to the allocator.
        (KJS::Collector::allocate): Call abort() if an operation is already in progress. Set the new flag instead
        of using the debug-only GCLock.
        (KJS::Collector::collect): Ditto.
        (KJS::Collector::isBusy): Added.

2007-08-04  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin and Adam.
        
        <rdar://problem/5368990> REGRESSION: newsgator.com sign-on 6x slower than Safari 3 beta due to GC changes (14808)

        * kjs/string_object.cpp:
        (KJS::replace): if the string didn't change (very common in some cases) reuse the original string value.
        (KJS::StringProtoFunc::callAsFunction): Pass in the StringImp* when replacing, not just the UString.
        * kjs/string_object.h:
        (KJS::StringInstance::internalValue): covariant override to return StringImp for convenience

2007-08-04  Mark Rowe  <mrowe@apple.com>

        Reviewed by Oliver Hunt.

        <rdar://problem/5385145> r24843 introduces a crash on calling fork() (14878)
        http://bugs.webkit.org/show_bug.cgi?id=14878

        Provide no-op functions for all members of the malloc_zone_t and malloc_introspection_t structures that we
        register to avoid crashes in system code that assumes they will be non-null.

        * kjs/CollectorHeapIntrospector.cpp:
        (KJS::CollectorHeapIntrospector::CollectorHeapIntrospector):
        (KJS::CollectorHeapIntrospector::forceLock): Grab the lock.
        (KJS::CollectorHeapIntrospector::forceUnlock): Release the lock.
        * kjs/CollectorHeapIntrospector.h:
        (KJS::CollectorHeapIntrospector::goodSize):
        (KJS::CollectorHeapIntrospector::check):
        (KJS::CollectorHeapIntrospector::print):
        (KJS::CollectorHeapIntrospector::log):
        (KJS::CollectorHeapIntrospector::statistics):
        (KJS::CollectorHeapIntrospector::size):
        (KJS::CollectorHeapIntrospector::zoneMalloc):
        (KJS::CollectorHeapIntrospector::zoneCalloc):
        (KJS::CollectorHeapIntrospector::zoneFree):
        * wtf/FastMalloc.cpp:
        (WTF::FastMallocZone::goodSize):
        (WTF::FastMallocZone::check):
        (WTF::FastMallocZone::print):
        (WTF::FastMallocZone::log):
        (WTF::FastMallocZone::forceLock): Grab the TCMalloc locks.
        (WTF::FastMallocZone::forceUnlock): Release the TCMalloc locks.
        (WTF::FastMallocZone::FastMallocZone):

2007-08-04  Mark Rowe  <mrowe@apple.com>

        Rubber-stamped by Anders.

        * pcre/pcre_compile.c: Remove non-ASCII character from a comment.

2007-08-02  Mark Rowe  <mrowe@apple.com>

        Reviewed by Geoff Garen.

        <rdar://problem/4212199> 'leaks' reports false leaks in WebKit (because the WTF allocator uses mmap?)

        Implement malloc zone introspection routines to allow leaks, heap, and friends to request information
        about specific memory regions that were allocated by FastMalloc or the JavaScriptCore collector.

        This requires tool-side support before the regions will be displayed.  The addition of that support is
        tracked by <rdar://problems/5353057&5353060>.

        * JavaScriptCore.exp: Export the two variables that are used by leaks to introspect the allocators.
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * kjs/AllInOneFile.cpp:
        * kjs/CollectorHeapIntrospector.cpp: Added.
        (KJS::):
        (KJS::CollectorHeapIntrospector::init): 
        (KJS::CollectorHeapIntrospector::CollectorHeapIntrospector): Create and register our zone with the system.
        (KJS::CollectorHeapIntrospector::enumerate): Iterate over the CollectorBlocks that are in use and report them to the caller as being used.
        * kjs/CollectorHeapIntrospector.h: Added.
        (KJS::CollectorHeapIntrospector::size): Return zero to indicate the specified pointer does not belong to this zone.
        * kjs/collector.cpp:
        (KJS::Collector::registerThread): Register the CollectorHeapIntrospector with the system when the first thread is registered with the collector.
        * wtf/FastMalloc.cpp:
        (WTF::TCMalloc_PageHeap::GetDescriptorEnsureSafe):
        (WTF::TCMalloc_ThreadCache_FreeList::enumerateFreeObjects): Enumerate the objects on the free list.
        (WTF::TCMalloc_ThreadCache::enumerateFreeObjects): Ditto.
        (WTF::TCMalloc_Central_FreeList::enumerateFreeObjects): Ditto.
        (WTF::TCMalloc_ThreadCache::InitModule): Register the FastMallocZone with the system when initializing TCMalloc.
        (WTF::FreeObjectFinder::FreeObjectFinder):
        (WTF::FreeObjectFinder::visit): Add an object to the free list.
        (WTF::FreeObjectFinder::isFreeObject):
        (WTF::FreeObjectFinder::freeObjectCount):
        (WTF::FreeObjectFinder::findFreeObjects): Find the free objects within a thread cache or free list.
        (WTF::PageMapFreeObjectFinder::PageMapFreeObjectFinder): Find the free objects within a TC_PageMap.
        (WTF::PageMapFreeObjectFinder::visit): Called once per allocated span.  Record whether the span or any subobjects are free.
        (WTF::PageMapMemoryUsageRecorder::PageMapMemoryUsageRecorder):
        (WTF::PageMapMemoryUsageRecorder::visit): Called once per allocated span.  Report the range of memory as being allocated, and the span or
        its subobjects as being used if they do not appear on the free list.
        (WTF::FastMallocZone::enumerate): Map the key remote TCMalloc data structures into our address space.  We then locate all free memory ranges
        before reporting the other ranges as being in use.
        (WTF::FastMallocZone::size): Determine whether the given pointer originates from within our allocation zone.  If so,
        we return its allocation size.
        (WTF::FastMallocZone::zoneMalloc):
        (WTF::FastMallocZone::zoneCalloc):
        (WTF::FastMallocZone::zoneFree):
        (WTF::FastMallocZone::zoneRealloc):
        (WTF::):
        (WTF::FastMallocZone::FastMallocZone): Create and register our zone with the system.
        (WTF::FastMallocZone::init):
        * wtf/MallocZoneSupport.h: Added.
        (WTF::RemoteMemoryReader::RemoteMemoryReader): A helper class to ease the process of mapping memory in a different process into
        our local address space
        (WTF::RemoteMemoryReader::operator()):
        * wtf/TCPageMap.h:
        (TCMalloc_PageMap2::visit): Walk over the heap and visit each allocated span.
        (TCMalloc_PageMap3::visit): Ditto.

2007-08-02  Mark Rowe  <mrowe@apple.com>

        Build fix.

        * kjs/ustring.cpp:
        (KJS::UString::expandedSize):  Use std::numeric_limits<size_t>::max() rather than the non-portable SIZE_T_MAX.

2007-08-02  Mark Rowe  <mrowe@apple.com>

        Reviewed by Maciej.

        <rdar://problem/5352887> "Out of memory" error during repeated JS string concatenation leaks hundreds of MBs of RAM

        A call to fastRealloc was failing which lead to UString::expandCapacity leaking the buffer it was trying to reallocate.
        It also resulted in the underlying UString::rep having both a null baseString and buf field, which meant that attempting
        to access the contents of the string after the failed memory reallocation would crash.

        A third issue is that expandedSize size was calculating the new length in a way that led to an integer overflow occurring.
        Attempting to allocate a string more than 190,000,000 characters long would fail a the integer overflow would lead to a
        memory allocation of around 3.6GB being attempted rather than the expected 390MB.  Sizes that would lead to an overflow
        are now  returned as zero and callers are updated to treat this as though the memory allocation has failed.

        * kjs/array_object.cpp:
        (ArrayProtoFunc::callAsFunction): Check whether the append failed and raise an "Out of memory" exception if it did.
        * kjs/ustring.cpp:
        (KJS::allocChars): Wrapper around fastMalloc that takes a length in characters.  It will return 0 when asked to allocate a zero-length buffer.
        (KJS::reallocChars): Wrapper around fastRealloc that takes a length in characters.  It will return 0 when asked to allocate a zero-length buffer.
        (KJS::UString::expandedSize): Split the size calculation in two and guard against overflow during each step.
        (KJS::UString::expandCapacity): Don't leak r->buf if reallocation fails.  Instead free the memory and use the null representation.
        (KJS::UString::expandPreCapacity): If fastMalloc fails then use the null representation rather than crashing in memcpy.
        (KJS::UString::UString): If calls to expandCapacity, expandPreCapacity or fastMalloc fail then use the null representation rather than crashing in memcpy.
        (KJS::UString::append): Ditto.
        (KJS::UString::operator=): Ditto.
        * kjs/ustring.h: Change return type of expandedSize from int to size_t.

2007-08-01  Darin Adler  <darin@apple.com>

        Reviewed by Kevin McCullough.

        - fix <rdar://problem/5375186> pointers to pieces of class definition passed to JSClassCreate should all be const

        * API/JSObjectRef.h: Added const.

        * API/JSClassRef.cpp:
        (OpaqueJSClass::OpaqueJSClass): Added const.
        (OpaqueJSClass::create): Added const.
        * API/JSObjectRef.cpp:
        (JSClassCreate): Added const.

2007-08-01  Steve Falkenburg  <sfalken@apple.com>

        Build mod: Fix sln to match configs in vcproj.
        
        Reviewed by Adam.

        * JavaScriptCore.vcproj/JavaScriptCore.make:
        * JavaScriptCore.vcproj/JavaScriptCore.sln:

2007-07-30  Simon Hausmann  <hausmann@kde.org>

        Done with and reviewed by Lars.

        Removed the __BUILDING_QT ifdef in JSStringRef.h and changed UChar for the Qt build to use wchar_t on Windows.

        * API/JSStringRef.h:
        * wtf/unicode/qt4/UnicodeQt4.h:

2007-07-27  Simon Hausmann  <hausmann@kde.org>

        Done with and reviewed by Lars and Zack.

        Always define JSChar to be unsigned short for the Qt builds, to ensure compatibility with UChar.

        * API/JSStringRef.h:

2007-07-27  Simon Hausmann  <hausmann@kde.org>

        Done with and reviewed by Lars and Zack.

        Fix compilation with Qt on Windows with MingW: Implemented currentThreadStackBase() for this platform.

        * kjs/collector.cpp:
        (KJS::currentThreadStackBase):

2007-07-27  Simon Hausmann  <hausmann@kde.org>

        Done with and reviewed by Lars and Zack.

        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.

        * kjs/DateMath.cpp:
        (KJS::getDSTOffsetSimple):

2007-07-27  Simon Hausmann  <hausmann@kde.org>

        Done with and reviewed by Lars and Zack.

        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.

        * JavaScriptCore.pri:

2007-07-27  Simon Hausmann  <hausmann@kde.org>

        Done with and reviewed by Lars and Zack.

        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.

        * kjs/interpreter.cpp:
        (KJS::getCurrentTime):
        * kjs/testkjs.cpp:
        (StopWatch::start):
        (StopWatch::stop):

2007-07-27  Simon Hausmann  <hausmann@kde.org>

        Done with and reviewed by Lars and Zack.

        Replace the use of snprintf with QByteArray to compile under msvc 2005 express.

        * bindings/qt/qt_instance.cpp:
        (KJS::Bindings::QtInstance::stringValue):

2007-07-27  Simon Hausmann  <hausmann@kde.org>

        Done with and reviewed by Lars and Zack.

        Don't use pthread.h unless thread support is enabled.

        * kjs/collector.cpp:
        (KJS::Collector::registerAsMainThread):
        (KJS::onMainThread):

2007-07-27  Simon Hausmann  <hausmann@kde.org>

        Done with and reviewed by Lars and Zack.

        Removed TCSystemMalloc from the Qt build, it's not necessary it seems.

        * JavaScriptCore.pri:

2007-07-27  Simon Hausmann  <hausmann@kde.org>

        Done with and reviewed by Lars and Zack.

        Added os-win32 to the include search path for the Qt windows build in order to provide the fake stdint.h header file.

        * JavaScriptCore.pri:

2007-07-25  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Mark.

        - follow-up to previous change
        
        * kjs/ustring.cpp:
        (KJS::UString::operator=): Make sure to reset the length when
        replacing the buffer contents for a single-owned string.

2007-07-25  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin.
        
        - JavaScriptCore part of fix for <rdar://problem/5300291> Optimize GC to reclaim big, temporary objects (like XMLHttpRequest.responseXML) quickly
        
        Also, as a side effect of optimizations included in this patch:
        - 7% speedup on JavaScript iBench
        - 4% speedup on "Celtic Kane" JS benchmark
        
        The basic idea is explained in a big comment in collector.cpp. When unusually 
        large objecs are allocated, we push the next GC closer on the assumption that
        most objects are short-lived.
        
        I also did the following two optimizations in the course of tuning
        this not to be a performance regression:

        1) Change UString::Rep to hold a self-pointer as the baseString in
        the unshared case, instead of a null pointer; this removes a
        number of null checks in hot code because many places already
        wanted to use the rep itself or the baseString as appropriate.
        
        2) Avoid creating duplicate StringImpls when creating a
        StringInstance (the object wrapper for a JS string) or calling
        their methods. Since a temporary wrapper object is made every time
        a string method is called, this resulted in two useless extra
        StringImpls being allocated for no reason whenever a String method
        was invoked on a string value. Now we bypass those.
        
        * kjs/collector.cpp:
        (KJS::):
        (KJS::Collector::recordExtraCost): Basics of the extra cost mechanism.
        (KJS::Collector::allocate): ditto
        (KJS::Collector::collect): ditto
        * kjs/collector.h:
        (KJS::Collector::reportExtraMemoryCost): ditto
        * kjs/array_object.cpp:
        (ArrayInstance::ArrayInstance): record extra cost
        * kjs/internal.cpp:
        (KJS::StringImp::toObject): don't create a whole new StringImpl just
        to be the internal value of a StringInstance! StringImpls are immutable
        so there's no point tot his.
        * kjs/internal.h:
        (KJS::StringImp::StringImp): report extra cost
        * kjs/string_object.cpp:
        (KJS::StringInstance::StringInstance): new version that takes a StringImp
        (KJS::StringProtoFunc::callAsFunction): don't create a whole new StringImpl
        just to convert self to string! we already have one in the internal value
        * kjs/string_object.h: report extra cost        
        * kjs/ustring.cpp: All changes to handle baseString being self instead of null in the 
        unshared case.
        (KJS::):
        (KJS::UString::Rep::create):
        (KJS::UString::Rep::destroy):
        (KJS::UString::usedCapacity):
        (KJS::UString::usedPreCapacity):
        (KJS::UString::expandCapacity):
        (KJS::UString::expandPreCapacity):
        (KJS::UString::UString):
        (KJS::UString::append):
        (KJS::UString::operator=):
        (KJS::UString::copyForWriting):
        * kjs/ustring.h:
        (KJS::UString::Rep::baseIsSelf): new method, now that baseString is
        self instead of null in the unshared case we can't just null check.
        (KJS::UString::Rep::data): adjusted as mentioned above
        (KJS::UString::cost): new method to compute the cost for a UString, for
        use by StringImpl.

        * kjs/value.cpp:
        (KJS::jsString): style fixups.
        (KJS::jsOwnedString): new method, use this for strings allocated from UStrings
        held by the parse tree. Tracking their cost as part of string cost is pointless,
        because garbage collecting them will not actually free the relevant string buffer.
        * kjs/value.h: prototyped jsOwnedString.
        * kjs/nodes.cpp:
        (StringNode::evaluate): use jsOwnedString as appropriate
        (RegExpNode::evaluate): ditto
        (PropertyNameNode::evaluate): ditto
        (ForInNode::execute): ditto
        
        * JavaScriptCore.exp: Exported some new symbols.

2007-07-23  Anders Carlsson  <andersca@apple.com>

        Reviewed by Geoff.

        <rdar://problem/5121461> REGRESSION: Unable to load JigZone puzzle
        
        * bindings/jni/jni_jsobject.cpp:
        (JavaJSObject::createNative):
        
        Call RootObject::gcProtect on the global object, thereby putting it in the
        "protect count" set which is used for checking if a native handle is valid.
        
2007-07-23  Darin Adler  <darin@apple.com>

        * pcre/pcre_compile.c: Roll back a tiny accidental change in the unused !JAVASCRIPT
        side of an #ifdef. This has no effect when using PCRE in JAVASCRIPT mode as we do,
        but seems worth rolling back.

2007-07-23  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Oliver.
        
        - fix remaining problems with Window shadowing

        * kjs/nodes.cpp:
        (VarDeclNode::evaluate): Tweak the special case a little.

2007-07-23  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Oliver.
        
        - fix Window shadowing regressions caused by the previous commit.

        * kjs/nodes.cpp:
        (VarDeclNode::evaluate): Handle the case of global scope specially.

2007-07-22  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin.

        -fixed <rdar://problem/5353293> REGRESSION (r24287): 1% i-Bench JS slowdown from JavaScript compatibility fix (14719)
        http://bugs.webkit.org/show_bug.cgi?id=14719
        
        My fix for this actually resulted in JS iBench being 1% faster than before the regression
        and the Celtic Kane benchmark being 5% faster than before the regression.
        
        * kjs/nodes.cpp:
        (VarDeclNode::handleSlowCase): factored out the slow code path to be out of line.
        (VarDeclNode::evaluate): I did a couple of things:
        (1) Don't check if the variable is already declared by looking for the property in
        the variable object, that code path was dead code.
        (2) Special-case the common case where the top of the scope and the variable object
        are the same; in that case the variable must always be in the variable object.
        (3) Don't return a jsString() of the variable name, nothing uses the return value
        from this node types evaluate method.
        * kjs/nodes.h:

2007-07-22  Darin Adler  <darin@apple.com>

        Reviewed by Kevin Decker.

        - fix <rdar://problem/5126394> REGRESSION: Crash after clicking back button in test application (13250)
          http://bugs.webkit.org/show_bug.cgi?id=13250

        * bindings/objc/objc_utility.mm: (KJS::Bindings::convertObjcValueToValue):
        If the object returns 0 for _imp, convert that to "undefined", since callers
        can't cope with a JSValue of 0.

2007-07-19  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Darin Adler.
        
        Fixed http://bugs.webkit.org/show_bug.cgi?id=10880 | <rdar://problem/5335694>
        REGRESSION: JavaScript menu doesn't appear on pricepoint.com (14595)
        
        Though the ECMA spec says auto-semicolon insertion should not occur
        without a newline or '}', Firefox treats do-while specially, and the
        library used by pricepoint.com requires that special treatment.
        
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * kjs/grammar.y:

2007-07-19  Darin Adler  <darin@apple.com>

        Reviewed by Geoff.

        - fix <rdar://problem/5345440> PCRE computes wrong length for expressions with quantifiers
          on named recursion or subexpressions

        It's challenging to implement proper preflighting for compiling these advanced features.
        But we don't want them in the JavaScript engine anyway.

        Turned off the following features of PCRE (some of these are simply parsed and not implemented):

            \C \E \G \L \N \P \Q \U \X \Z
            \e \l \p \u \z
            [::] [..] [==]
            (?#) (?<=) (?<!) (?>)
            (?C) (?P) (?R)
            (?0) (and 1-9)
            (?imsxUX)

        Added the following:

            \u \v

        Because of \v, the js1_2/regexp/special_characters.js test now passes.

        To be conservative, I left some features that JavaScript doesn't want, such as
        \012 and \x{2013}, in place. We can revisit these later; they're not directly-enough
        related to avoiding the incorrect preflighting.

        I also didn't try to remove unused opcodes and remove code from the execution engine.
        That could save code size and speed things up a bit, but it would require more changes.

        * kjs/regexp.h:
        * kjs/regexp.cpp: (KJS::RegExp::RegExp): Remove the sanitizePattern workaround for
        lack of \u support, since the PCRE code now has \u support.

        * pcre/pcre-config.h: Set JAVASCRIPT to 1.
        * pcre/pcre_internal.h: Added ESC_v.

        * pcre/pcre_compile.c: Added a different escape table for when JAVASCRIPT is set that
        omits all the escapes we don't want interpreted and includes '\v'.
        (check_escape): Put !JAVASCRIPT around the code for '\l', '\L', '\N', '\u', and '\U',
        and added code to handle '\u2013' inside JAVASCRIPT.
        (compile_branch): Put !JAVASCRIPT if around all the code implementing the features we
        don't want.
        (pcre_compile2): Ditto.

        * tests/mozilla/expected.html: Updated since js1_2/regexp/special_characters.js now
        passes.

2007-07-18  Darin Adler  <darin@apple.com>

        Reviewed by Oliver Hunt.

        - fix <rdar://problem/5345432> PCRE computes length wrong for expressions such as "[**]"

        Test: fast/js/regexp-charclass-crash.html

        * pcre/pcre_compile.c: (pcre_compile2): Fix the preflight code that calls
        check_posix_syntax to match the actual regular expression compilation code;
        before it was missing the check of the first character.

2007-07-19  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Mark.

        Define __BUILDING_GDK when building for Gdk to fix building testkjs on OSX.

        * JavaScriptCore.pri:

2007-07-18  Simon Hausmann  <hausmann@kde.org>

        * Fix the Qt build, call dftables from the right directory.

        Reviewed by Adam Treat.

        * pcre/pcre.pri:

2007-07-18  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Zack.

        Don't call gcc directly when building the dftables tool but use a separate .pro file for the Qt build.

        * pcre/dftables.pro: Added.
        * pcre/pcre.pri:

2007-07-17  Cameron Zwarich  <cwzwarich@uwaterloo.ca>

        Reviewed by Darin, Maciej, and Adam.

        Fixes <http://bugs.webkit.org/show_bug.cgi?id=9697>,
              the failure of ecma/GlobalObject/15.1.2.2-2.js,
              the failure of ecma/LexicalConventions/7.7.3-1.js,
              and most of the failures of tests in ecma/TypeConversion/9.3.1-3.js.

        Bug 9697: parseInt results may be inaccurate for numbers greater than 2^53

        This patch also fixes similar issues in the lexer and UString::toDouble().

        * kjs/function.cpp:
        (KJS::parseIntOverflow):
        (KJS::parseInt):
        * kjs/function.h:
        * kjs/lexer.cpp:
        (KJS::Lexer::lex):
        * kjs/ustring.cpp:
        (KJS::UString::toDouble):
        * tests/mozilla/expected.html:

2007-07-16  Sam Weinig  <sam@webkit.org>

        Reviewed by Oliver.

        Turn off -Wshorten-64-to-32 warning for 64-bit builds.

        * Configurations/Base.xcconfig:

2007-07-14  Brady Eidson  <beidson@apple.com>

        Reviewed by Sam Weinig

        Initial check-in for <rdar://problem/3154486> - Supporting FTP directory listings in the browser

        * wtf/Platform.h: Add ENABLE_FTPDIR feature to handle building on platforms that don't have the
          proper network-layer support

2007-07-14  Cameron Zwarich  <cwzwarich@uwaterloo.ca>

        Reviewed by Darin.

        Fixes http://bugs.webkit.org/show_bug.cgi?id=13517,
              http://bugs.webkit.org/show_bug.cgi?id=14237, and
              the failure of test js1_5/Scope/regress-185485.js

        Bug 13517: DOM Exception 8 in finance.aol.com sub-page
        Bug 14237: Javascript "var" statement interprets initialization in the topmost function scope

        * kjs/nodes.cpp:
        (VarDeclNode::evaluate):
        * tests/mozilla/expected.html:

2007-07-12  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Mitz.

        http://bugs.webkit.org/show_bug.cgi?id=14596
        Fix JSC compilation with KJS_VERBOSE.

        * kjs/function.cpp:
        (KJS::FunctionImp::passInParameters):

2007-07-11  George Staikos  <staikos@kde.org>

        Make it compile.

        * ForwardingHeaders: Added.
        * ForwardingHeaders/JavaScriptCore: Added.
        * ForwardingHeaders/JavaScriptCore/APICast.h: Added.
        * ForwardingHeaders/JavaScriptCore/JSBase.h: Added.
        * ForwardingHeaders/JavaScriptCore/JSContextRef.h: Added.
        * ForwardingHeaders/JavaScriptCore/JSLock.h: Added.
        * ForwardingHeaders/JavaScriptCore/JSObjectRef.h: Added.
        * ForwardingHeaders/JavaScriptCore/JSStringRef.h: Added.
        * ForwardingHeaders/JavaScriptCore/JSStringRefCF.h: Added.
        * ForwardingHeaders/JavaScriptCore/JSValueRef.h: Added.
        * ForwardingHeaders/JavaScriptCore/JavaScriptCore.h: Added.

2007-07-11  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Darin.

        As of http://bugs.webkit.org/show_bug.cgi?id=14527 move the
        WebCore/ForwardingHeader/JavaScriptCore to JavaScriptCore

        * ForwardingHeaders: Added.
        * ForwardingHeaders/JavaScriptCore: Copied from WebCore/ForwardingHeaders/JavaScriptCore.

2007-07-11  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Mark.

        Forwardport the hash table fix from CodeGeneratorJS.pm to create_hash_table.
        Reran run-jsc-tests, couldn't find any regressions. Suggested by Darin.

        * kjs/create_hash_table:

2007-07-09  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Oliver.
        
        - 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
        
        * JavaScriptCore.exp: Added needed export.

2007-07-06  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Antti.

        - <rdar://problem/5311093> JavaScriptCore fails to build with strict-aliasing warnings
        
        * Configurations/Base.xcconfig: Re-enable -Wstrict-aliasing
        * bindings/jni/jni_utility.cpp:
        (KJS::Bindings::getJNIEnv): Type-pun via a union instead of a pointer cast.
        * wtf/HashMap.h:
        (WTF::): Instead of doing type-punned assignments via pointer cast, do one of three things:
        (1) assign directly w/o cast if storage type matches real type; (2) assign using cast
        via union if type does not need reffing; (3) copy with memcpy and ref/deref manually if type
        needs reffing. This is ok peref-wise because memcpy of a constant length gets optomized.
        HashTraits are now expected to make ref()/deref() take the storage type, not the true type.
        * wtf/HashSet.h:
        (WTF::): Same basic idea.
        * wtf/HashTable.h:
        (WTF::): Added Assigner template for use by HashMap/HashSet. Change RefCounter to call ref()
        and deref() via storage type, avoiding the need to
        type-pun.
        (WTF::RefCounter::ref): ditto
        (WTF::RefCounter::deref): ditto
        * wtf/HashTraits.h:
        (WTF::): Change ref() and deref() for RefPtr HashTraits to take the storage type; cast
        via union to pointer type.
        * wtf/FastMalloc.cpp:
        (WTF::TCMalloc_PageHeap::init): Changed from constructor to init function so this can go in a union.
        (WTF::): redefine pageheap macro in terms of getPageHeap().
        (WTF::getPageHeap): new inline function, helper for pageheap macro. This hides the cast in a union.
        (WTF::TCMalloc_ThreadCache::InitModule): Call init() instead of using placement new to initialize page
        heap.
        * wtf/TCPageMap.h:
        (TCMalloc_PageMap1::init): Changed from constructor to init function.
        (TCMalloc_PageMap2::init): ditto
        (TCMalloc_PageMap3::init): ditto


2007-07-06  George Staikos  <staikos@kde.org>

        Reviewed by Maciej.

        Switch USE(ICONDATABASE) to ENABLE(ICONDATABASE)

        * wtf/Platform.h:

2007-07-03  Sam Weinig  <sam@webkit.org>

        Reviewed by Darin.

        Eleventh round of fixes for implicit 64-32 bit conversion errors.
        <rdar://problem/5292262>

        - Fixes a real bug where where we were setting long long and unsigned long long
          values to a long field.

        * bindings/objc/objc_utility.mm:
        (KJS::Bindings::convertValueToObjcValue):

2007-07-03  Sam Weinig  <sam@webkit.org>

        Reviewed by Brady Eidson.

        Tenth round of fixes for implicit 64-32 bit conversion errors.
        <rdar://problem/5292262>

        - Add explicit casts.

        * kjs/dtoa.cpp:
        (Bigint::):

2007-07-02  Sam Weinig  <sam@webkit.org>

        Reviewed by Kevin McCullough.

        Fourth round of fixes for implicit 64-32 bit conversion errors.
        <rdar://problem/5292262>

        Add custom piDouble and piFloat constants to use instead of M_PI.

        * kjs/math_object.cpp:
        (MathObjectImp::getValueProperty):
        * wtf/MathExtras.h:
        (wtf_atan2):

2007-06-29  Sam Weinig  <sam@webkit.org>

        Reviewed by Darin.

        Second pass at fixing implicit 64-32 bit conversion errors.
        <rdar://problem/5292262>

        - Add a toFloat() method to JSValue for float conversion.

        * JavaScriptCore.exp:
        * kjs/value.cpp:
        (KJS::JSValue::toFloat):
        * kjs/value.h:

2007-06-27  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Darin.

        - <rdar://problem/5271937> REGRESSION: Apparent WebKit JavaScript memory smasher when submitting comment to iWeb site (crashes in kjs_pcre_compile2)
        - Correctly evaluate the return value of _pcre_ucp_findchar.

        * pcre/pcre_compile.c:
        (compile_branch):
        * pcre/pcre_exec.c:
        (match):

2007-06-27  Sam Weinig  <sam@webkit.org>

        Reviewed by Darin.

        First pass at fixing implicit 64-32 bit conversion errors.
        <rdar://problem/5292262>

        - Add 'f' suffix where necessary.

        * kjs/testkjs.cpp:
        (StopWatch::getElapsedMS):

2007-06-26  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Maciej Stachowiak.
        
        Fixed <rdar://problem/5296627> JSGarbageCollect headerdoc suggests that 
        using JavaScriptCore requires leaking memory

        * API/JSBase.h: Changed documentation to explain that you can pass NULL
        to JSGarbageCollect.

2007-06-26  Adam Treat  <adam@staikos.net>

        Reviewed by Adam Roben.

        Make the SQLite icon database optional.

        * wtf/Platform.h:

2007-06-15  George Staikos  <staikos@kde.org>

        More missing files for Qt.

        * JavaScriptCore.pri:
        * kjs/testkjs.pro:

2007-06-15  George Staikos  <staikos@kde.org>

        Another Qt build fix.

        * JavaScriptCore.pri:
        * kjs/testkjs.pro:

2007-06-15  George Staikos  <staikos@kde.org>

        Fixing Qt build.

        * JavaScriptCore.pri:

2007-06-20  Mark Rowe  <mrowe@apple.com>

        Reviewed by Mitz.

        Fix http://bugs.webkit.org/show_bug.cgi?id=14244
        Bug 14244: Data corruption when using a replace() callback function with data containing "$"

        * kjs/string_object.cpp:
        (KJS::replace):  When 'replacement' is a function, do not replace $n placeholders in its return value.
        This matches the behaviour described in ECMA 262 3rd Ed section 15.5.4.1, and as implemented in Firefox.

2007-06-14  Anders Carlsson  <andersca@apple.com>

        Fix Windows build.
        
        * bindings/runtime_object.cpp:
        (RuntimeObjectImp::canPut):

2007-06-14  Anders Carlsson  <andersca@apple.com>

        Reviewed by Darin.

        <rdar://problem/5103077> 
        Crash at _NPN_ReleaseObject when quitting page at http://eshop.macsales.com/shop/ModBook
        
        <rdar://problem/5183692>
        http://bugs.webkit.org/show_bug.cgi?id=13547
        REGRESSION: Crash in _NPN_ReleaseObject when closing Safari on nba.com (13547)
        
        <rdar://problem/5261499>
        CrashTracer: [USER] 75 crashes in Safari at com.apple.JavaScriptCore: KJS::Bindings::CInstance::~CInstance + 40
        
        Have the root object track all live instances of RuntimeObjectImp. When invalidating 
        the root object, also invalidate all live runtime objects by zeroing out their instance ivar.
        This prevents instances from outliving their plug-ins which lead to crashes.
        
        * bindings/c/c_utility.cpp:
        (KJS::Bindings::convertValueToNPVariant):
        * bindings/jni/jni_jsobject.cpp:
        (JavaJSObject::convertValueToJObject):
        * bindings/jni/jni_utility.cpp:
        (KJS::Bindings::convertValueToJValue):
        * bindings/objc/objc_runtime.mm:
        (ObjcFallbackObjectImp::callAsFunction):
        * bindings/runtime_array.cpp:
        (RuntimeArray::RuntimeArray):
        * bindings/runtime_array.h:
        (KJS::RuntimeArray::getConcreteArray):
        * bindings/runtime_method.cpp:
        (RuntimeMethod::callAsFunction):
        * bindings/runtime_method.h:
        * bindings/runtime_object.cpp:
        (RuntimeObjectImp::RuntimeObjectImp):
        (RuntimeObjectImp::~RuntimeObjectImp):
        (RuntimeObjectImp::invalidate):
        (RuntimeObjectImp::fallbackObjectGetter):
        (RuntimeObjectImp::fieldGetter):
        (RuntimeObjectImp::methodGetter):
        (RuntimeObjectImp::getOwnPropertySlot):
        (RuntimeObjectImp::put):
        (RuntimeObjectImp::canPut):
        (RuntimeObjectImp::defaultValue):
        (RuntimeObjectImp::implementsCall):
        (RuntimeObjectImp::callAsFunction):
        (RuntimeObjectImp::getPropertyNames):
        (RuntimeObjectImp::throwInvalidAccessError):
        * bindings/runtime_object.h:
        * bindings/runtime_root.cpp:
        (KJS::Bindings::RootObject::invalidate):
        (KJS::Bindings::RootObject::addRuntimeObject):
        (KJS::Bindings::RootObject::removeRuntimeObject):
        * bindings/runtime_root.h:

2007-06-14  Anders Carlsson  <andersca@apple.com>

        Reviewed by Mitz.

        <rdar://problem/5244948>
        Safari keeps on complaining about slow script playing NBC TV video (14133)

        http://bugs.webkit.org/show_bug.cgi?id=14133
        Runaway JavaScript timer fires when spinning around in Google Maps street view

        Make sure to start and stop the timeout checker around calls to JS.
        
        * bindings/NP_jsobject.cpp:
        (_NPN_InvokeDefault):
        (_NPN_Invoke):
        (_NPN_Evaluate):
        * bindings/jni/jni_jsobject.cpp:
        (JavaJSObject::call):
        (JavaJSObject::eval):

2007-06-13  Darin Adler  <darin@apple.com>

        Reviewed by Mark Rowe.

        - fix http://bugs.webkit.org/show_bug.cgi?id=14132
          array sort with > 10000 elements sets elements > 10000 undefined

        Test: fast/js/sort-large-array.html

        * kjs/array_instance.h: Replaced pushUndefinedObjectsToEnd with
        compactForSorting, and removed ExecState parameters.

        * kjs/array_object.cpp:
        (ArrayInstance::sort): Changed to call compactForSorting.
        (ArrayInstance::compactForSorting): Do the get and delete of the
        properties directly on the property map instead of using public
        calls from JSObject. The public calls would just read the undefined
        values from the compacted sort results array!

2007-06-13  George Staikos  <staikos@kde.org>

        Reviewed by Lars.

        Fix Mac OS X build after last checkin.

        * wtf/FastMalloc.h:

2007-06-14  Lars Knoll <lars@trolltech.com>

        Reviewed by Maciej.

        Disable FastMalloc for the Qt build and make sure we
        don't reimplement the global new/delete operators
        when using the system malloc.

        * wtf/FastMalloc.cpp:
        * wtf/FastMalloc.h:
        * wtf/Platform.h:

2007-06-13  Anders Carlsson  <andersca@apple.com>

        Reviewed by Geoff.

        Make sure that bindings instances get correct root objects.
        
        * JavaScriptCore.exp:
        * bindings/NP_jsobject.cpp:
        (listFromVariantArgs):
        (_NPN_InvokeDefault):
        (_NPN_Invoke):
        (_NPN_SetProperty):
        * bindings/c/c_instance.cpp:
        (KJS::Bindings::CInstance::invokeMethod):
        (KJS::Bindings::CInstance::invokeDefaultMethod):
        * bindings/c/c_runtime.cpp:
        (KJS::Bindings::CField::valueFromInstance):
        * bindings/c/c_utility.cpp:
        (KJS::Bindings::convertNPVariantToValue):
        * bindings/c/c_utility.h:
        * bindings/objc/objc_instance.mm:
        (ObjcInstance::invokeMethod):
        (ObjcInstance::invokeDefaultMethod):
        (ObjcInstance::getValueOfUndefinedField):
        * bindings/objc/objc_runtime.mm:
        (ObjcField::valueFromInstance):
        (ObjcArray::valueAt):
        * bindings/objc/objc_utility.h:
        * bindings/objc/objc_utility.mm:
        (KJS::Bindings::convertObjcValueToValue):
        * bindings/runtime.h:

2007-06-13  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Lars.

        * kjs/testkjs.pro: WebKitQt is now called QtWebKit.

2007-06-12  Anders Carlsson  <andersca@apple.com>

        Another build fix.
        
        * bindings/qt/qt_instance.cpp:
        (KJS::Bindings::QtInstance::invokeMethod):

2007-06-12  Anders Carlsson  <andersca@apple.com>

        Reviewed by Geoff.

        Move the notion of field type to the JNI runtime since that's the only 
        one that was actually using it.
        
        * bindings/c/c_runtime.h:
        (KJS::Bindings::CField::CField):
        * bindings/jni/jni_runtime.h:
        * bindings/objc/objc_runtime.h:
        * bindings/objc/objc_runtime.mm:
        * bindings/qt/qt_runtime.h:
        * bindings/runtime.h:
        * bindings/runtime_method.cpp:

2007-06-12  Anders Carlsson  <andersca@apple.com>

        Build fix.
        
        * bindings/qt/qt_class.cpp:
        (KJS::Bindings::QtClass::methodsNamed):
        * bindings/qt/qt_instance.cpp:
        (KJS::Bindings::QtInstance::invokeMethod):

2007-06-12  Anders Carlsson  <andersca@apple.com>

        Reviewed by Oliver.
        
        Get rid of the MethodList class and use a good ol' Vector instead.

        * bindings/c/c_class.cpp:
        (KJS::Bindings::CClass::methodsNamed):
        * bindings/c/c_instance.cpp:
        (KJS::Bindings::CInstance::invokeMethod):
        * bindings/jni/jni_class.cpp:
        (JavaClass::JavaClass):
        (JavaClass::~JavaClass):
        * bindings/jni/jni_instance.cpp:
        (JavaInstance::invokeMethod):
        * bindings/objc/objc_class.mm:
        (KJS::Bindings::ObjcClass::methodsNamed):
        * bindings/objc/objc_instance.mm:
        (ObjcInstance::invokeMethod):
        * bindings/objc/objc_runtime.mm:
        (ObjcFallbackObjectImp::callAsFunction):
        * bindings/runtime.cpp:
        * bindings/runtime.h:
        * bindings/runtime_method.cpp:
        (RuntimeMethod::lengthGetter):
        (RuntimeMethod::callAsFunction):
        * bindings/runtime_object.cpp:
        (RuntimeObjectImp::getOwnPropertySlot):

2007-06-12  Anders Carlsson  <andersca@apple.com>

        Reviewed by Geoff.

        Make RuntimeMethod's method list a pointer so that the object size doesn't
        grow beyond 32 bytes when we later will replace MethodList with a Vector.
        
        * bindings/runtime_method.cpp:
        (RuntimeMethod::RuntimeMethod):
        (RuntimeMethod::lengthGetter):
        (RuntimeMethod::callAsFunction):
        * bindings/runtime_method.h:

2007-06-12  Anders Carlsson  <andersca@apple.com>

        Reviewed by Geoff.

        Get rid of the Parameter class.
        
        * bindings/jni/jni_instance.cpp:
        (JavaInstance::invokeMethod):
        * bindings/jni/jni_runtime.cpp:
        (JavaMethod::signature):
        * bindings/jni/jni_runtime.h:
        (KJS::Bindings::JavaParameter::JavaParameter):
        (KJS::Bindings::JavaParameter::~JavaParameter):
        (KJS::Bindings::JavaParameter::type):
        (KJS::Bindings::JavaMethod::parameterAt):
        (KJS::Bindings::JavaMethod::numParameters):
        * bindings/runtime.h:

2007-06-12  Anders Carlsson  <andersca@apple.com>

        Build fix.
        
        * bindings/qt/qt_class.h:

2007-06-12  Mark Rowe  <mrowe@apple.com>

        Build fix.

        * bindings/objc/objc_runtime.h:

2007-06-12  Anders Carlsson  <andersca@apple.com>

        Reviewed by Geoff.

        Get rid of Constructor and its only subclass JavaConstructor.
        
        * bindings/c/c_class.h:
        * bindings/jni/jni_class.cpp:
        (JavaClass::JavaClass):
        (JavaClass::~JavaClass):
        * bindings/jni/jni_class.h:
        * bindings/jni/jni_runtime.cpp:
        * bindings/jni/jni_runtime.h:
        * bindings/objc/objc_class.h:
        * bindings/runtime.h:

2007-06-12  Anders Carlsson  <andersca@apple.com>

        Reviewed by Geoff.

        Use RetainPtr throughout the bindings code.
        
        * bindings/objc/objc_class.h:
        * bindings/objc/objc_class.mm:
        (KJS::Bindings::ObjcClass::ObjcClass):
        (KJS::Bindings::ObjcClass::methodsNamed):
        (KJS::Bindings::ObjcClass::fieldNamed):
        * bindings/objc/objc_instance.h:
        (KJS::Bindings::ObjcInstance::getObject):
        * bindings/objc/objc_instance.mm:
        (ObjcInstance::ObjcInstance):
        (ObjcInstance::~ObjcInstance):
        (ObjcInstance::implementsCall):
        (ObjcInstance::invokeMethod):
        (ObjcInstance::invokeDefaultMethod):
        (ObjcInstance::defaultValue):
        * bindings/objc/objc_runtime.h:
        (KJS::Bindings::ObjcMethod::setJavaScriptName):
        (KJS::Bindings::ObjcMethod::javaScriptName):
        (KJS::Bindings::ObjcArray::getObjcArray):
        * bindings/objc/objc_runtime.mm:
        (ObjcField::name):
        (ObjcArray::ObjcArray):
        (ObjcArray::setValueAt):
        (ObjcArray::valueAt):
        (ObjcArray::getLength):
        * wtf/RetainPtr.h:

2007-06-12  Anders Carlsson  <andersca@apple.com>

        Reviewed by Maciej.

        Have JSCell inherit from Noncopyable.
        
        * bindings/objc/objc_runtime.h:
        * bindings/runtime_object.h:
        * kjs/value.h:

2007-06-12  Anders Carlsson  <andersca@apple.com>

        Reviewed by Darin and Maciej.

        More cleanup. Use our Noncopyable WTF class, add a root object member
        to the Array class.
        
        * bindings/c/c_class.h:
        * bindings/jni/jni_class.h:
        * bindings/jni/jni_instance.h:
        * bindings/jni/jni_runtime.cpp:
        (JavaArray::JavaArray):
        * bindings/jni/jni_runtime.h:
        * bindings/objc/objc_class.h:
        * bindings/objc/objc_runtime.h:
        * bindings/objc/objc_runtime.mm:
        (ObjcArray::ObjcArray):
        * bindings/objc/objc_utility.mm:
        (KJS::Bindings::convertObjcValueToValue):
        * bindings/runtime.cpp:
        (KJS::Bindings::Array::Array):
        (KJS::Bindings::Array::~Array):
        * bindings/runtime.h:
        * bindings/runtime_object.h:
        * bindings/runtime_root.h:

2007-06-08  Zack Rusin  <zrusin@trolltech.com>

        Fix the Qt build

        * bindings/qt/qt_instance.cpp:
        (KJS::Bindings::QtInstance::QtInstance):
        * bindings/qt/qt_instance.h:

2007-06-07  Anders Carlsson  <andersca@apple.com>

        Reviewed by Geoff.

        Get rid of Instance::setRootObject and pass the root object to the instance constructor instead.
        
        * bindings/c/c_instance.cpp:
        (KJS::Bindings::CInstance::CInstance):
        * bindings/c/c_instance.h:
        * bindings/jni/jni_instance.cpp:
        (JavaInstance::JavaInstance):
        * bindings/jni/jni_instance.h:
        * bindings/jni/jni_jsobject.cpp:
        (JavaJSObject::convertJObjectToValue):
        * bindings/objc/objc_instance.h:
        * bindings/objc/objc_instance.mm:
        (ObjcInstance::ObjcInstance):
        * bindings/runtime.cpp:
        (KJS::Bindings::Instance::Instance):
        (KJS::Bindings::Instance::createBindingForLanguageInstance):
        * bindings/runtime.h:

2007-06-07  Anders Carlsson  <andersca@apple.com>

        Reviewed by Adam.

        Don't use a JavaInstance to store the field when all we want to do is to keep the field
        from being garbage collected. Instead, use a JObjectWrapper.
        
        * bindings/jni/jni_instance.h:
        * bindings/jni/jni_runtime.cpp:
        (JavaField::JavaField):
        (JavaField::dispatchValueFromInstance):
        (JavaField::dispatchSetValueToInstance):
        * bindings/jni/jni_runtime.h:
        (KJS::Bindings::JavaField::JavaField):
        (KJS::Bindings::JavaField::operator=):

2007-05-30  Alp Toker  <alp.toker@collabora.co.uk>

        Reviewed by Brady.

        Enable logging in the Gdk port.
        http://bugs.webkit.org/show_bug.cgi?id=13936

        * wtf/Assertions.cpp:
        * wtf/Assertions.h: Add WTFLogVerbose which also logs
        the file, line number and function.

2007-05-30  Mark Rowe  <mrowe@apple.com>

        Mac build fix.  Update #include.

        * API/JSCallbackFunction.h:

2007-05-30  Luciano Montanaro  <mikelima@cirulla.net>

        Reviewed by Maciej.

        - cross-port Harri Porten's commits 636099 and 636108 from KJS: 
        "publish a class anyway public already" and "class is being used from
        outside for quite some time" in preparation for further syncronizations

        * kjs/context.h:
        * kjs/date_object.cpp:
        * kjs/date_object.h:
        * kjs/function.h:
        (KJS::):
        (KJS::InternalFunctionImp::classInfo):
        (KJS::InternalFunctionImp::functionName):
        * kjs/function_object.h:
        * kjs/internal.h:
        * kjs/lookup.h:
        (KJS::getStaticPropertySlot):
        (KJS::getStaticFunctionSlot):
        (KJS::getStaticValueSlot):
        * kjs/object_object.h:

2007-05-29  Sam Weinig  <sam@webkit.org>

        Reviewed by Adam Roben.

        Cleanup function and fix to match comparison API.

        * kjs/string_object.cpp:
        (KJS::substituteBackreferences):
        (KJS::localeCompare):

2007-05-28  Geoffrey Garen  <ggaren@apple.com>

        Slight clarification to an exception message.

        * API/JSCallbackObject.cpp:
        (KJS::JSCallbackObject::put):

2007-05-27  Holger Freyther  <zecke@selfish.org>

        Reviewed by Mark Rowe.

        * wtf/Platform.h: Move Gdk up to allow building WebKit/Gdk on Darwin

2007-05-27  Darin Adler  <darin@apple.com>

        - fix a couple ifdefs that said WIN instead of WIN_OS

        * kjs/collector.cpp:
        (KJS::allocateBlock): WIN -> WIN_OS
        (KJS::freeBlock): Ditto.

2007-05-26  Sam Weinig  <sam@webkit.org>

        Reviewed by Darin.

        Patch for http://bugs.webkit.org/show_bug.cgi?id=13854
        Port of commit 667785 from kjs

        - special case calling String.localeCompare() with no parameters to return 0.

        * kjs/string_object.cpp:
        (KJS::StringProtoFunc::callAsFunction):

2007-05-25  Kimmo Kinnunen  <kimmok@iki.fi>

        Reviewed by Darin.

        - Fix for http://bugs.webkit.org/show_bug.cgi?id=13456
        REGRESSION: setTimeout "arguments" object gets shadowed by a local variable

        - Add a explicit check for arguments. Previously check was done with getDirect,
        but since the arguments is created on-demand in ActivationImp, it doesn't
        show up in the test. 'arguments' should always be in the VarDeclNode's
        evaluation scope.

        * kjs/nodes.cpp:
        (VarDeclNode::evaluate): Additional check if the var decl identifier is 'arguments'

2007-05-25  George Staikos  <staikos@kde.org>

        Reviewed by Maciej.

        - Use COMPILER(GCC), not PLATFORM(GCC) - as Platform.h defines

        * wtf/FastMalloc.h:

2007-05-25  Kimmo Kinnunen  <kimmok@iki.fi>

        Reviewed by Darin.

        - http://bugs.webkit.org/show_bug.cgi?id=13623 (Decompilation of function
          doesn't compile with "++(x,y)")
        - Create the error node based on the actual node, not the node inside
          parenthesis
        - Fix applies to postfix, prefix and typeof operators
        - Produces run-time ReferenceError like other non-lvalue assignments etc.

        * kjs/grammar.y: Create {Prefix,Postfix}ErrorNode based on the actual node,
        not the based on the node returned by "nodeInsideAllParens()". Same for
        TypeOfValueNode.

2007-05-25  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Zack.

        Fix crash in Qt JavaScript bindings when the arguments used on the Qt side are not
        registered with QMetaType.

        * bindings/qt/qt_instance.cpp:
        (KJS::Bindings::QtInstance::invokeMethod):
        * bindings/qt/qt_runtime.cpp:

2007-05-24  Luciano Montanaro  <mikelima@cirulla.net>

        Reviewed by Darin

        Patch for http://bugs.webkit.org/show_bug.cgi?id=13855
        Port patch 666176 to JavaScriptCore

        - Renamed JSValue::downcast() to JSValue::asCell() which makes the
        function meaning cleaner. It's modeled after Harri Porten change in 
        KDE trunk.

        * kjs/collector.cpp:
        (KJS::Collector::protect):
        (KJS::Collector::unprotect):
        (KJS::Collector::collectOnMainThreadOnly):
        * kjs/object.h:
        (KJS::JSValue::isObject):
        * kjs/string_object.cpp:
        (KJS::StringProtoFunc::callAsFunction):
        * kjs/value.h:
        (KJS::JSValue::asCell):
        (KJS::JSValue::isNumber):
        (KJS::JSValue::isString):
        (KJS::JSValue::isObject):
        (KJS::JSValue::getNumber):
        (KJS::JSValue::getString):
        (KJS::JSValue::getObject):
        (KJS::JSValue::getUInt32):
        (KJS::JSValue::mark):
        (KJS::JSValue::marked):
        (KJS::JSValue::type):
        (KJS::JSValue::toPrimitive):
        (KJS::JSValue::toBoolean):
        (KJS::JSValue::toNumber):
        (KJS::JSValue::toString):
        (KJS::JSValue::toObject):

2007-05-18  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Mark Rowe.

        * kjs/testkjs.pro: Make the Gdk port link to icu

2007-05-15  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Adele Peterson.
        
        It helps if you swap the right variable.

        * wtf/HashSet.h:
        (WTF::::operator):

2007-05-15  Lars Knoll <lars@trolltech.com>

        Reviewed by Zack

        Extend the QObject JavaScript bindings to work for slots with
        arguments.

        * bindings/qt/qt_instance.cpp:
        (KJS::Bindings::QtInstance::invokeMethod):

2007-05-14  Kimmo Kinnunen  <kimmok@iki.fi>

        Reviewed by Darin.

        - Fixes http://bugs.webkit.org/show_bug.cgi?id=13622 (Decompiler
          omits trailing comma in array literal)

         * kjs/nodes2string.cpp:
         (ArrayNode::streamTo): print extra ',' in case there was elision
         commas (check opt member var) and array elements present
         in the array expression

2007-05-14  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Oliver Hunt.
        
        Added HashMap::swap and HashSet::swap. WebCore now uses HashSet::swap.
        I figured while I was in the neighborhood I might as well add HashMap::swap,
        too.

        * wtf/HashMap.h:
        (WTF::::operator):
        (WTF::::swap):
        * wtf/HashSet.h:
        (WTF::::operator):
        (WTF::::swap):

2007-05-11  Kimmo Kinnunen  <kimmok@iki.fi>

        Reviewed by Darin.

        - Fix for bug http://bugs.webkit.org/show_bug.cgi?id=13620
          Bogus decompilation of "for (var j = 1 in [])"
        - ForInNode toString()'ed to syntax error if there was var decl
          and initializer
        - ForNode toStringed()'ed lost 'var ' if it was present

        * kjs/nodes2string.cpp:
        (VarDeclListNode::streamTo): Print "var " here
        (VarStatementNode::streamTo): Don't print "var " here
        (ForNode::streamTo): Remove TODO comment, VarDeclListNode will
        stream the "var "
        (ForInNode::streamTo): ForIn initializer is printed by VarDeclNode

2007-05-11  Kimmo Kinnunen  <kimmok@iki.fi>

        Reviewed by Darin.

        - Fixes http://bugs.webkit.org/show_bug.cgi?id=10878
          (Incorrect decompilation for "4..x")
        - Group numbers in dotted expressions in toString() output, so we
          avoid the 4.x constructs  when the original input is 4..x.
          4..x means the same as 4. .x or (4).x or Number(4).x

        * kjs/nodes2string.cpp:
        (KJS::SourceStream::):
        Add boolean flag to indicate that if next item is a number, it should be grouped.
        Add new formatting enum which turns on the boolean flag.
        (KJS::SourceStream::SourceStream): Added. Initialize the flag.
        (SourceStream::operator<<): Added. New overloaded operator with double value as parameter.
        (NumberNode::streamTo): Use the double operator
        (ArrayNode::streamTo):
        (DotAccessorNode::streamTo):
        (FunctionCallDotNode::streamTo):
        (FunctionCallParenDotNode::streamTo):
        (PostfixDotNode::streamTo):
        (DeleteDotNode::streamTo):
        (PrefixDotNode::streamTo):
        (AssignDotNode::streamTo): Use the new formatting enum to turn on the grouping flag.

2007-05-10  Lars Knoll <lars@trolltech.com>

        Reviewed by Zack

        Fix our last three test failures in the JavaScript
        tests.

        * wtf/unicode/qt4/UnicodeQt4.h:
        (WTF::Unicode::toLower):
        (WTF::Unicode::toUpper):

2007-05-08  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Darin Adler.
        
        Fixed #includes of JSStringRefCF.h and use of CF datatypes. I think I 
        misunderstood this issue before.

        * API/JavaScriptCore.h: #include JSStringRefCF.h. Platforms that don't
        want this behavior can just #include individual headers, instead of the
        umbrella framework header. But we definitely want Mac OS X clients to
        get the #include of JSStringRefCF.h "for free."
        * API/minidom.c: Don't #include JSStringRefCF.h. (Don't need to #include
        JavaScriptCore.h, either.)
        * API/testapi.c: Don't #include JSStringRefCF.h. Do use CF datatypes
        regardless of whether __APPLE__ is defined. Platforms that don't support
        CF just shouldn't compile this file.
        (main):

2007-05-09  Eric Seidel  <eric@webkit.org>

        Reviewed by mjs.
        
        http://bugs.webkit.org/show_bug.cgi?id=6985
        Cyclic __proto__ values cause WebKit to hang

        * kjs/object.cpp:
        (KJS::JSObject::put): do a cycle check before setting __proto__

2007-05-08  Kimmo Kinnunen  <kimmok@iki.fi>

        Reviewed by darin.  Landed by eseidel.

        - http://bugs.webkit.org/show_bug.cgi?id=10880 (Do..while loop gains 
        a semicolon each time it is toStringed)
        Grammar in Ecma-66262, 12.6: "do Statement while ( Expression );"
        EmptyStatement was created after every do..while(expr) which
        had semicolon at the end.

        * kjs/grammar.y: Require semicolon at the end of do..while

2007-05-08  Geoffrey Garen  <ggaren@apple.com>

        Build fix -- this time for sure.
        
        APICast.h, being private, ends up in a different folder than JSValueRef.h,
        so we can't include one from the other using "". Instead, just forward
        declare the relevant data types.

        * API/APICast.h:

2007-05-08  Geoffrey Garen  <ggaren@apple.com>

        Build fix: export APICast.h for WebCore and WebKit.

        * JavaScriptCore.xcodeproj/project.pbxproj:

2007-05-04  Darin Adler  <darin@apple.com>

        Reviewed by Adele.

        - fix http://bugs.webkit.org/show_bug.cgi?id=12821
          <rdar://problem/5007921> Number.toExponential doesn't work for negative numbers

        * kjs/number_object.cpp: (NumberProtoFunc::callAsFunction):
        Added a call to fabs before calling log10.

2007-05-03  Holger Freyther <freyther@kde.org>

        Reviewed by Zack, landed by Simon.
        This is bugzilla bug 13499.

        * JavaScriptCore.pri: Place Qt into the qt-port scope
        * bindings/testbindings.pro: Place Qt into the qt-port scope
        * kjs/testkjs.pro: Place Qt into the qt-port scope
        * pcre/pcre.pri: Place Qt into the qt-port scope

2007-05-02  David Harrison  <harrison@apple.com>

        Reviewed by Antti.

        <rdar://problem/5174862> Crash resulting from DeprecatedString::insert()

        Added insertion support for more than one value.
        
        * wtf/Vector.h:
        (WTF::::insert):
        Added support for inserting multiple values.
        
        (WTF::::prepend):
        New. Insert at the start of vectors. Convenient for vectors used as strings.

2007-05-01  Jungshik Shin  <jungshik.shin@gmail.com>

        Reviewed by Alexey.

        - get rid of non-ASCII lteral characters : suppress compiler warnings
        http://bugs.webkit.org/show_bug.cgi?id=13551
         
        * kjs/testkjs.cpp:
        * pcre/pcre_compile.c:

2007-04-28  Jungshik Shin  <jungshik.shin@gmail.com>

        Reviewed by Sam Weinig.

        - Replace copyright sign in Latin-1 (0xA9) with '(C)'
        http://bugs.webkit.org/show_bug.cgi?id=13531

        * bindings/npruntime.h:
    
2007-04-28  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        - fix <rdar://problem/5154144> Hamachi test fails: assertion failure in ListHashSet

        Test: fast/forms/add-remove-form-elements-stress-test.html

        * wtf/ListHashSet.h:
        (WTF::ListHashSetNodeAllocator::ListHashSetNodeAllocator): Initialize
        m_isDoneWithInitialFreeList to false.
        (WTF::ListHashSetNodeAllocator::allocate): Added assertions based on a debug-only
        m_isAllocated flag that make sure we don't allocate a block that's already allocated.
        These assertions helped pinpoint the bug. Set m_isDoneWithInitialFreeList when we
        allocate the last block of the initial free list. Once we're done with the initial
        free list, turn off the rule that says that the next node in the pool after the last
        node in the free list is also free. This rule works because any free nodes are added
        to the head of the free list, so a node that hasn't been allocated even once is always
        at the tail of the free list and all the nodes after it also haven't been allocated
        even once. But it doesn't work any longer once the entire pool has been used at least
        once, because there's nothing special about the last node on the free list any more.
        (WTF::ListHashSetNodeAllocator::deallocate): Set the node's m_isAllocated to false.
        (WTF::ListHashSetNodeAllocator::pastPool): Added. Used above.
        (WTF::ListHashSetNodeAllocator::inPool): Changed to use the pastPool function.
        (WTF::ListHashSetNode::ListHashSetNode): Initialize m_isAllocated to true.
        (WTF::ListHashSetNode::operator new): Removed variable name for unused size
        parameter.
        (WTF::ListHashSetNode::destroy): Changed to call the destructor rather than
        delete -- this gets rid of the need to define an operator delete.

2007-04-27  Christopher Brichford  <chrisb@adobe.com>

        Reviewed by Timothy Hatcher.

        Fix for: Bug 13211: Move JavaScriptCore mac project files for apollo port
        http://bugs.webkit.org/show_bug.cgi?id=13211

        * JavaScriptCore.apolloproj/mac/JavaScriptCore.Debug.xcconfig: Added.
        * JavaScriptCore.apolloproj/mac/JavaScriptCore.Release.xcconfig: Added.
        * JavaScriptCore.apolloproj/mac/JavaScriptCore.xcconfig: Added.
        * JavaScriptCore.apolloproj/mac/JavaScriptCore.xcodeproj/project.pbxproj: Added.
        * JavaScriptCore.apolloproj/mac/JavaScriptCore/JavaScriptCore.Debug.xcconfig: Removed.
        * JavaScriptCore.apolloproj/mac/JavaScriptCore/JavaScriptCore.Release.xcconfig: Removed.
        * JavaScriptCore.apolloproj/mac/JavaScriptCore/JavaScriptCore.xcconfig: Removed.
        * JavaScriptCore.apolloproj/mac/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj: Removed.

2007-04-27  Holger Freyther <freyther@kde.org>

        Reviewed by Maciej.

        Remove unmaintained CMake build system.

        * CMakeLists.txt: Removed.
        * pcre/CMakeLists.txt: Removed.

2007-04-27  Mark Rowe  <mrowe@apple.com>

        Reviewed by Oliver.

        * JavaScriptCore.xcodeproj/project.pbxproj: Improve dependencies in Xcode project
        by marking dftables as a dependency of Generate Derived Sources rather than of
        JavaScriptCore itself.

2007-04-26  Geoffrey Garen  <ggaren@apple.com>

        Build fix -- added #includes that we used to get implicitly through
        JSStringRef.h.

        * API/JSNode.c:
        * API/JSNodeList.c:
        * API/minidom.c:
        * API/testapi.c:

2007-04-26  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Maciej Stachowiak, Adam Roben.
        
        Fixed 
        <rdar://problem/4885130> Remove #include of JSStringRefCF.h from JSStringRef.h
        <rdar://problem/4885123> JavaScriptCore is not cross-platform -- JSStringRef.h references CF datatypes

        * API/JSStringRef.h: Removed #include -- no clients need it anymore.

2007-04-25  David Kilzer  <ddkilzer@apple.com>

        Reviewed by Maciej.

        Add assertions for debug builds.

        * kjs/JSLock.cpp:
        (KJS::JSLock::lock): Assert the return value of pthread_mutex_lock() in debug builds.
        (KJS::JSLock::unlock): Assert the return value of pthread_mutex_unlock() in debug builds.

2007-04-25  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Anders.
        
        - fix build problems

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Disable warning that
        gives often downright incorrect results based on guessing what will happen in 64-bit.

2007-04-25  Darin Adler  <darin@apple.com>

        Reviewed by Geoff.

        - tweak the allocator for a small speedup -- Shark showed this was a win, but I can't
          measure an improvement right now, but it's also clear these changes do no harm

        * wtf/FastMalloc.cpp:
        (WTF::LgFloor): Use ALWAYS_INLINE here; in testing I did a while back this was necessary
        to get this single-instruction function to be inlined.
        (WTF::SizeClass): Use ALWAYS_INLINE here too for the same reason. Also change the special
        case for a size of 0 to work without a branch for a bit of extra speed.
        (WTF::ByteSizeForClass): Use ALWAYS_INLINE here too for the same reason.

2007-04-24  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Oliver.
        
        - use custom calling convention for everything in nodes.cpp on intel gcc for 1.5% speed boost

        Nearly all functions in nodes.cpp were marked up to use the
        regparm(3) calling convention under GCC for x86, since this is
        faster and they are all guaranteed to be called only internally to
        kjs.
        
        The only exception is destructors, since delete doesn't know how to use a custom calling convention.
        
        * kjs/nodes.cpp:
        (dotExprDoesNotAllowCallsString):
        * kjs/nodes.h:
        (KJS::Node::):
        (KJS::StatementNode::):
        (KJS::NullNode::):
        (KJS::BooleanNode::):
        (KJS::NumberNode::):
        (KJS::StringNode::):
        (KJS::RegExpNode::):
        (KJS::ThisNode::):
        (KJS::ResolveNode::):
        (KJS::GroupNode::):
        (KJS::ElementNode::):
        (KJS::ArrayNode::):
        (KJS::PropertyNameNode::):
        (KJS::PropertyNode::):
        (KJS::PropertyListNode::):
        (KJS::ObjectLiteralNode::):
        (KJS::BracketAccessorNode::):
        (KJS::DotAccessorNode::):
        (KJS::ArgumentListNode::):
        (KJS::ArgumentsNode::):
        (KJS::NewExprNode::):
        (KJS::FunctionCallValueNode::):
        (KJS::FunctionCallResolveNode::):
        (KJS::FunctionCallBracketNode::):
        (KJS::FunctionCallParenBracketNode::):
        (KJS::FunctionCallDotNode::):
        (KJS::FunctionCallParenDotNode::):
        (KJS::PostfixResolveNode::):
        (KJS::PostfixBracketNode::):
        (KJS::PostfixDotNode::):
        (KJS::PostfixErrorNode::):
        (KJS::DeleteResolveNode::):
        (KJS::DeleteBracketNode::):
        (KJS::DeleteDotNode::):
        (KJS::DeleteValueNode::):
        (KJS::VoidNode::):
        (KJS::TypeOfResolveNode::):
        (KJS::TypeOfValueNode::):
        (KJS::PrefixResolveNode::):
        (KJS::PrefixBracketNode::):
        (KJS::PrefixDotNode::):
        (KJS::PrefixErrorNode::):
        (KJS::UnaryPlusNode::):
        (KJS::NegateNode::):
        (KJS::BitwiseNotNode::):
        (KJS::LogicalNotNode::):
        (KJS::MultNode::):
        (KJS::AddNode::):
        (KJS::ShiftNode::):
        (KJS::RelationalNode::):
        (KJS::EqualNode::):
        (KJS::BitOperNode::):
        (KJS::BinaryLogicalNode::):
        (KJS::ConditionalNode::):
        (KJS::AssignResolveNode::):
        (KJS::AssignBracketNode::):
        (KJS::AssignDotNode::):
        (KJS::AssignErrorNode::):
        (KJS::CommaNode::):
        (KJS::AssignExprNode::):
        (KJS::VarDeclListNode::):
        (KJS::VarStatementNode::):
        (KJS::EmptyStatementNode::):
        (KJS::ExprStatementNode::):
        (KJS::IfNode::):
        (KJS::DoWhileNode::):
        (KJS::WhileNode::):
        (KJS::ForNode::):
        (KJS::ContinueNode::):
        (KJS::BreakNode::):
        (KJS::ReturnNode::):
        (KJS::WithNode::):
        (KJS::LabelNode::):
        (KJS::ThrowNode::):
        (KJS::TryNode::):
        (KJS::ParameterNode::):
        (KJS::Parameter::):
        (KJS::FunctionBodyNode::):
        (KJS::FuncExprNode::):
        (KJS::FuncDeclNode::):
        (KJS::SourceElementsNode::):
        (KJS::CaseClauseNode::):
        (KJS::ClauseListNode::):
        (KJS::SwitchNode::):

2007-04-24  Oliver Hunt  <oliver@apple.com>

        GTK Build fix, ::findEntry->KJS::findEntry

        * kjs/lookup.cpp:
        (KJS::Lookup::findEntry):
        (KJS::Lookup::find):

2007-04-23  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Geoff.
        
        - compile most of JavaScriptCore as one file for 4% JS iBench speed improvement 

        * JavaScriptCore.xcodeproj/project.pbxproj: Add AllInOneFile.cpp, and remove files it includes
        from the build.
        * kjs/AllInOneFile.cpp: Added.
        * kjs/dtoa.cpp: Renamed CONST to CONST_ to avoid conflict.
        (Bigint::):
        (Bigint::nrv_alloc):
        * kjs/lookup.cpp: Use "namspace KJS { ... }" instead of "using namespace KJS;" 

2007-04-23  Maciej Stachowiak  <mjs@apple.com>

        Build fix, not reviewed.

        * kjs/collector.h: Fix struct/class mismatch.

2007-04-23  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin.

        - raise ALLOCATIONS_PER_COLLECTION to 4000, for 3.7% iBench speed improvement
         
        Now that the cell size is smaller and the block size is bigger, we can fit 4000 objects in
        the two spare cells the collector is willing to keep around, so collect a bit less often.
        
        * kjs/collector.cpp:

2007-04-23  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin and Geoff.
        
        - move mark and collectOnMainThreadOnly bits into separate bitmaps
        
        This saves 4 bytes per cell, allowing shrink of cell size to 32,
        which leads to a .8% speed improvement on iBench.
        
        This is only feasible because of all the previous changes on the branch.

        * kjs/collector.cpp:
        (KJS::allocateBlock): Adjust for some renames of constants. 
        (KJS::Collector::markStackObjectsConservatively): Now that cells are 32 bytes (64 
        bytes on 64-bit) the cell alignment check can be made much more strict, and also
        obsoletes the need for a % sizeof(CollectorCell) check. Also, we can mask off the low
        bits of the pointer to have a potential block pointer to look for.
        (KJS::Collector::collectOnMainThreadOnly): Use bitmap.
        (KJS::Collector::markMainThreadOnlyObjects): Use bitmap.
        (KJS::Collector::collect): When sweeping, use bitmaps directly to find mark bits.
        * kjs/collector.h:
        (KJS::): Move needed constants and type declarations here.
        (KJS::CollectorBitmap::get): Bit twiddling to get a bitmap value.
        (KJS::CollectorBitmap::set): Bit twiddling to set a bitmap bit to true.
        (KJS::CollectorBitmap::clear): Bit twiddling to set a bitmap bit to false.
        (KJS::CollectorBitmap::clearAll): Clear whole bitmap at one go.
        (KJS::Collector::cellBlock): New operation, compute the block pointer for
        a cell by masking off low bits.
        (KJS::Collector::cellOffset): New operation, compute the cell offset for a
        cell by masking off high bits and dividing (actually a shift).
        (KJS::Collector::isCellMarked): Check mark bit in bitmap
        (KJS::Collector::markCell): Set mark bit in bitmap.
        * kjs/value.h:
        (KJS::JSCell::JSCell): No more bits.
        (KJS::JSCell::marked): Let collector handle it.
        (KJS::JSCell::mark): Let collector handle it.

2007-04-23  Anders Carlsson  <andersca@apple.com>

        Build fix.
        
        * kjs/regexp_object.h:
        RegExpObjectImpPrivate is a struct, not a class.
        
2007-04-23  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin.
        
        - shrink FunctionImp / DeclaredFunctionImp by 4 bytes, by moving parameter list to function body
        
        I reconciled this with a similar change in KDE kjs by Maks Orlovich <maksim@kde.org>.

        * kjs/function.cpp:
        (KJS::FunctionImp::callAsFunction):
        (KJS::FunctionImp::passInParameters):
        (KJS::FunctionImp::lengthGetter):
        (KJS::FunctionImp::getParameterName):
        * kjs/function.h:
        * kjs/function_object.cpp:
        (FunctionProtoFunc::callAsFunction):
        (FunctionObjectImp::construct):
        * kjs/nodes.cpp:
        (FunctionBodyNode::addParam):
        (FunctionBodyNode::paramString):
        (FuncDeclNode::addParams):
        (FuncDeclNode::processFuncDecl):
        (FuncExprNode::addParams):
        (FuncExprNode::evaluate):
        * kjs/nodes.h:
        (KJS::Parameter::Parameter):
        (KJS::FunctionBodyNode::numParams):
        (KJS::FunctionBodyNode::paramName):
        (KJS::FunctionBodyNode::parameters):
        (KJS::FuncExprNode::FuncExprNode):
        (KJS::FuncDeclNode::FuncDeclNode):
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Disable 64-bit warnings because
        they handle size_t badly.

2007-04-23  Maciej Stachowiak  <mjs@apple.com>
 
        Reviewed by Darin.

        - shrink RegexpObjectImp by 4 bytes
        
        Somewhat inexplicably, this seems to be a .33% speedup on JS iBench.
        
        * kjs/regexp_object.cpp:
        (KJS::RegExpObjectImpPrivate::RegExpObjectImpPrivate):
        (RegExpObjectImp::RegExpObjectImp):
        (RegExpObjectImp::performMatch):
        (RegExpObjectImp::arrayOfMatches):
        (RegExpObjectImp::getBackref):
        (RegExpObjectImp::getLastMatch):
        (RegExpObjectImp::getLastParen):
        (RegExpObjectImp::getLeftContext):
        (RegExpObjectImp::getRightContext):
        (RegExpObjectImp::getValueProperty):
        (RegExpObjectImp::putValueProperty):
        * kjs/regexp_object.h:

2007-04-23  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Oliver.
        
        - change to 1-bit bitfields instead of 8-bit, this turns out to lead to a .51% speedup on JS iBench
        
        The 1-bit bitfields are actually faster than just plain bools, at least on Intel (go figure).

        * kjs/property_map.h:

2007-04-23  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin.
       
        - shrink ArrayInstance objects by 4 bytes
        http://bugs.webkit.org/show_bug.cgi?id=13386
        
        I did this by storing the capacity before the beginning of the storage array. It turns out
        it is rarely needed and is by definition 0 when the storage array is null.
 
        * kjs/array_instance.h:
        (KJS::ArrayInstance::capacity): Get it from the secret stash
        * kjs/array_object.cpp:
        (allocateStorage): New function to encapsulate allocating the storage with extra space ahead
        for the capacity.
        (reallocateStorage): ditto for realloc
        (ArrayInstance::ArrayInstance):
        (ArrayInstance::~ArrayInstance):
        (ArrayInstance::resizeStorage):

2007-04-23  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        - fix <rdar://problem/4840688> REGRESSION (r10588, r10621): JavaScript won't parse
          modifications of non-references (breaks 300themovie.warnerbros.com, fedex.com)

        Despite the ECMAScript specification's claim that you can treat these as syntax
        errors, doing so creates some website incompatibilities. So this patch turns them back
        into evaluation errors instead.

        Test: fast/js/modify-non-references.html

        * kjs/grammar.y: Change makeAssignNode, makePrefixNode, and makePostfixNode so that they
        never fail to parse. Update rules that use them. Fix a little bit of indenting. Use
        new PostfixErrorNode, PrefixErrorNode, and AssignErrorNode classes.

        * kjs/nodes.h: Added an overload of throwError that takes a char* argument.
        Replaced setExceptionDetailsIfNeeded and debugExceptionIfNeeded with handleException,
        which does both. Added PostfixErrorNode, PrefixErrorNode, and AssignErrorNode classes.

        * kjs/nodes.cpp: Changed exception macros to use handleException; simpler and smaller
        code size than the two functions that we used before.
        (Node::throwError): Added the overload mentioned above.
        (Node::handleException): Added. Contains the code from both setExceptionDetailsIfNeeded
        and debugExceptionIfNeeded.
        (PostfixErrorNode::evaluate): Added. Throws an exception.
        (PrefixErrorNode::evaluate): Ditto.
        (AssignErrorNode::evaluate): Ditto.
        (ThrowNode::execute): Call handleException instead of debugExceptionIfNeeded; this
        effectively adds a call to setExceptionDetailsIfNeeded, which may help with getting
        the correct file and line number for these exceptions.

        * kjs/nodes2string.cpp:
        (PostfixErrorNode::streamTo): Added.
        (PrefixErrorNode::streamTo): Added.
        (AssignErrorNode::streamTo): Added.

2007-04-23  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin.
        
        - fix test failures / crashes on PPC

        * kjs/property_map.h: Make the bool fields explicitly 8-bit bitfields, since bool is a full
        word there otherwise :-(

2007-04-23  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin.
        
        - fix more test case failures

        * bindings/runtime_array.cpp:
        (RuntimeArray::RuntimeArray): inherit from JSObject instead of ArrayInstance; it turns
        out that this class only needs the prototype and classInfo from ArrayInstance, not the
        actual class itself, and it was too big otherwise.
        (RuntimeArray::getOwnPropertySlot):
        * bindings/runtime_array.h:

2007-04-23  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin.
        
        - fix some test failures

        * bindings/runtime_method.cpp:
        (RuntimeMethod::RuntimeMethod): inherit from InternalFunctionImp instead of FunctionImpl,
        otherwise this is too big
        (RuntimeMethod::getOwnPropertySlot):
        * bindings/runtime_method.h:

2007-04-22  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin.
        
        - discard the arguments List for an ActivationImp when the corresponding Context is destroyed (1.7% speedup)
        http://bugs.webkit.org/show_bug.cgi?id=13385

        Based an idea by Christopher E. Hyde <C.Hyde@parableuk.force9.co.uk>. His patch to do 
        this also had many other List changes and I found this much simpler subset of the changes
        was actually a hair faster.
        
        This optimization is valid because the arguments list is only kept around to
        lazily make the arguments object. If it's not made by the time the function
        exits, it never will be, since any function that captures the continuation will
        have its own local arguments variable in scope.
        
        Besides the 1.7% speed improvement, it shrinks List by 4 bytes
        (which in turn shrinks ActivationImp by 4 bytes).
        
        * kjs/Context.cpp:
        (KJS::Context::~Context): Clear the activation's arguments list.
        * kjs/function.cpp:
        (KJS::ActivationImp::ActivationImp): Adjusted for list changes.
        (KJS::ActivationImp::mark): No need to mark, lists are always protected (this doesn't
        cause a ref-cycle for reasons stated above).
        (KJS::ActivationImp::createArgumentsObject): Clear arguments list.
        * kjs/function.h:
        * kjs/list.cpp:
        (KJS::List::List): No more needsMarking boolean
        (KJS::List::operator=): ditto
        * kjs/list.h:
        (KJS::List::List): ditto
        (KJS::List::reset): ditto
        (KJS::List::deref): ditto

2007-04-22  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin.
        
        - shrink PropertyMap by 8 bytes and therefore shrink CELL_SIZE to 40 (for 32-bit; 
        similar shrinkage for 64-bit)
        http://bugs.webkit.org/show_bug.cgi?id=13384

        Inspired by similar changes by Christopher E. Hyde <C.Hyde@parableuk.force9.co.uk>
        done in the kjs-tweaks branch of KDE's kjs. However, this version is somewhat 
        cleaner style-wise and avoids some of the negative speed impact (at least on gcc/x86) 
        of his version.
        
        This is nearly a wash performance-wise, maybe a slight slowdown, but worth doing
        to eventually reach cell size 32.
        
        * kjs/collector.cpp:
        (KJS::):
        * kjs/property_map.cpp:
        (KJS::PropertyMap::~PropertyMap):
        (KJS::PropertyMap::clear):
        (KJS::PropertyMap::get):
        (KJS::PropertyMap::getLocation):
        (KJS::PropertyMap::put):
        (KJS::PropertyMap::insert):
        (KJS::PropertyMap::expand):
        (KJS::PropertyMap::rehash):
        (KJS::PropertyMap::remove):
        (KJS::PropertyMap::mark):
        (KJS::PropertyMap::containsGettersOrSetters):
        (KJS::PropertyMap::getEnumerablePropertyNames):
        (KJS::PropertyMap::getSparseArrayPropertyNames):
        (KJS::PropertyMap::save):
        (KJS::PropertyMap::checkConsistency):
        * kjs/property_map.h:
        (KJS::PropertyMap::hasGetterSetterProperties):
        (KJS::PropertyMap::setHasGetterSetterProperties):
        (KJS::PropertyMap::):
        (KJS::PropertyMap::PropertyMap):

2007-04-22  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin.
        
        - change blocks to 64k in size, and use various platform-specific calls to allocate at 64k-aligned addresses
        http://bugs.webkit.org/show_bug.cgi?id=13383
        
        * kjs/collector.cpp:
        (KJS::allocateBlock): New function to allocate 64k of 64k-aligned memory
        (KJS::freeBlock): Corresponding free
        (KJS::Collector::allocate):
        (KJS::Collector::collect):

2007-04-22  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin and Geoff.
        
        - remove the concept of oversize objects, now that there aren't any (for now
        only enforced with an assert).
        http://bugs.webkit.org/show_bug.cgi?id=13382

        This change is a .66% speedup on JS iBench for 32-bit platforms, probably much more
        for 64-bit since it finally gives a reasonable cell size, but I did not test that.
        
        * kjs/collector.cpp:
        (KJS::): Use different cell size for 32-bit and 64-bit, now that there is no
        oversize allocation.
        (KJS::Collector::allocate): Remove oversize allocator.
        (KJS::Collector::markStackObjectsConservatively): Don't check oversize objects.
        (KJS::Collector::markMainThreadOnlyObjects): Ditto.
        (KJS::Collector::collect): Ditto.

2007-04-21  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Adam.

        - fix http://bugs.webkit.org/show_bug.cgi?id=13428
          REGRESSION (r20973-r20976): Failing ecma/Array/15.4.4.5-3.js

        - fix http://bugs.webkit.org/show_bug.cgi?id=13429
          REGRESSION (r20973-r20976): Crashing in fast/dom/plugin-attributes-enumeration.html

        * kjs/array_object.cpp:
        (ArrayInstance::sort): Free the old storage, not the new one.

2007-04-20  Maciej Stachowiak  <mjs@apple.com>

        Not reviewed, build fix.

        - fix build problem with last change - -O3 complains more about uninitialized variables
        
        * pcre/pcre_compile.c:
        (compile_branch):
        (pcre_compile2):

2007-04-20  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin.
        
        - <rdar://problem/5149915> use mergesort when possible, since it leads to fewer compares (2% JS iBench speedup)

        * kjs/array_object.cpp:
        (ArrayInstance::sort): Use mergesort(3) on platforms that have it, since it tends
        to do fewer compares than qsort; but avoid it very on large arrays since it uses extra
        memory. Also added comments identifying possibly even better sorting algorithms
        for sort by string value and sort by compare function.
        * kjs/config.h:

2007-04-20  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin.
        
        - bump optimization flags up to -O3 for 1% JS iBench speed improvement 

        * Configurations/Base.xcconfig:

2007-04-20  Mark Rowe  <mrowe@apple.com>

        Reviewed by Maciej.

        Fix bogus optimisation in the generic pthread code path.

        * kjs/collector.cpp:
        (KJS::currentThreadStackBase):

2007-04-20  Mark Rowe  <mrowe@apple.com>

        Reviewed by Anders.

        Improve FreeBSD compatibility, as suggested by Alexander Botero-Lowry.

        * kjs/collector.cpp:
        (KJS::currentThreadStackBase): FreeBSD requires that pthread_attr_t's are
        initialized via pthread_attr_init before being used in any context.

2007-04-19  Mark Rowe  <mrowe@apple.com>

        Reviewed by Darin.

        Fix http://bugs.webkit.org/show_bug.cgi?id=13401
        Bug 13401: Reproducible crash calling myArray.sort(compareFn) from within
        a sort comparison function

        * kjs/array_object.cpp:
        (ArrayInstance::sort): Save/restore the static variables around calls to qsort
        to ensure nested calls to ArrayInstance::sort behave correctly.

2007-04-12  Deneb Meketa  <dmeketa@adobe.com>

        Reviewed by Darin Adler.

        http://bugs.webkit.org/show_bug.cgi?id=13029
        rdar://problem/4994849
        Bug 13029: Permit NPAPI plug-ins to see HTTP response headers.
        This doesn't actually change JavaScriptCore, but that's where npapi.h is.

        * bindings/npapi.h:
        Add headers member to NPStream struct.  Also increase NP_VERSION_MINOR to 18.
        Increasing to >= 17 allows plug-ins to safely detect whether to look for
        NPStream::headers.  Increasing from 17 to 18 reflects presence of NPObject
        enumeration, which was added in a prior patch, and which has been agreed to
        constitute version 18 by the plugin-futures list.  Also add other missing
        bits of npapi.h to catch up from 14 to 18.  This includes features that are
        not implemented in WebKit, but those are safely stubbed.

2007-04-10  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Mark Rowe.
        
        Fixed last check-in to print in release builds, too.

        * kjs/collector.cpp:
        (KJS::getPlatformThreadRegisters):

2007-04-10  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by John Sullivan, Darin Adler.
        
        Fixed <rdar://problem/5121899> JavaScript garbage collection leads to 
        later crash under Rosetta (should abort or leak instead?)
        
        Log an error message and crash if the kernel reports failure during GC.
        We decided to do this instead of just leaking because we don't want people
        to get the mistaken impression that running in Rosetta is a supported
        configurtion.
        
        The CRASH macro will also hook into CrashReporter, which will tell us if 
        many (any?) users run into this issue.

        * kjs/collector.cpp:
        (KJS::getPlatformThreadRegisters):

2007-04-06  Krzysztof Kowalczyk  <kkowalczyk@gmail.com>

        Reviewed by darin.

        Coverity fix. Coverity says:
        "Event var_deref_model: Variable "sourceRanges" tracked as NULL was passed to a
        function that dereferences it"

        * kjs/string_object.cpp:
        (KJS::replace):

2007-04-06  Geoffrey Garen  <ggaren@apple.com>

        Rubber stamped by Adele Peterson.

        * kjs/ExecState.h: Removed obsolete forward/friend declaration of 
        RuntimeMethodImp.

2007-04-05  Krzysztof Kowalczyk  <kkowalczyk@gmail.com>

        Reviewed by darin.

        Coverity fix. Coverity says:
        "Event check_after_deref: Pointer "dateString" dereferenced before NULL check"

        * kjs/date_object.cpp:
        (KJS::parseDate):

2007-04-05  Krzysztof Kowalczyk  <kkowalczyk@gmail.com>

        Reviewed by darin.

        Coverity fix. Coverity says:
        "Event check_after_deref: Pointer "re" dereferenced before NULL check"

        * pcre/pcre_study.c:
        (pcre_study):

2007-04-05  Krzysztof Kowalczyk  <kkowalczyk@gmail.com>

        Reviewed by darin.

        Coverity fixes. Coverity says:
        "Event leaked_storage: Returned without freeing storage "buffer""
        and:
        "Event leaked_storage: Returned without freeing storage "script""

        * kjs/testkjs.cpp:
        (doIt):
        (createStringWithContentsOfFile):

2007-04-05  Krzysztof Kowalczyk  <kkowalczyk@gmail.com>

        Reviewed by darin.

        Coverity fix: in single-threaded case currentThreadIsMainThread is always true
        so the code in if (!currentThreadIsMainThread) cannot possibly be reached
        and Coverity complains about dead code.

        * kjs/collector.cpp:
        (KJS::Collector::collect):

=== Safari-5522.6 ===

2007-04-03  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Adam.

        - Testing a post-commit hook.

        * JavaScriptCore.vcproj/testkjs/testkjs.vcproj:

2007-04-03  Anders Carlsson  <andersca@apple.com>

        Reviewed by Adam.

        <rdar://problem/5107534>
        http://bugs.webkit.org/show_bug.cgi?id=13265
        REGRESSION: Crash in KJS::Bindings::convertValueToNPVariant
        
        * bindings/NP_jsobject.cpp:
        (_NPN_InvokeDefault):
        Return false if the object isn't a function. Set the return value to undefined by default
        (to match Firefox).
        
2007-03-30  Anders Carlsson <andersca@apple.com>

        Build fix.
        
        * bindings/NP_jsobject.cpp:
        (_NPN_Enumerate):

2007-03-30  Anders Carlsson  <andersca@apple.com>

        Reviewed by Geoff.

        Implement _NPN_Enumerate support.
        
        * JavaScriptCore.exp:
        * bindings/NP_jsobject.cpp:
        (_NPN_Enumerate):
        * bindings/c/c_instance.cpp:
        (KJS::Bindings::CInstance::getPropertyNames):
        * bindings/c/c_instance.h:
        * bindings/npapi.h:
        * bindings/npruntime.h:
        * bindings/npruntime_impl.h:
        * bindings/runtime.h:
        (KJS::Bindings::Instance::getPropertyNames):
        * bindings/runtime_object.cpp:
        (RuntimeObjectImp::getPropertyNames):
        * bindings/runtime_object.h:
        (KJS::RuntimeObjectImp::getInternalInstance):

2007-03-28  Jeff Walden  <jwalden+code@mit.edu>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=12963
        Fix some inconsistencies in the Mozilla JS Array extras implementations
        with respect to the Mozilla implementation:

          - holes in arrays should be skipped, not treated as undefined,
            by all such methods
          - an element with value undefined is not a hole
          - Array.prototype.forEach should return undefined

        * kjs/array_object.cpp:
        (ArrayInstance::getOwnPropertySlot):
        (ArrayProtoFunc::callAsFunction):

2007-03-27  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Geoff.

        * bindings/NP_jsobject.cpp:
        (_NPN_InvokeDefault):
        Call JSObject:call for native JavaScript objects.

2007-03-26  David Carson  <dacarson@gmail.com>

        Reviewed by Darin, landed by Anders.

        Fix for: REGRESSION (r19559): Java applet crash
        http://bugs.webkit.org/show_bug.cgi?id=13142
        <rdar://problem/5080340>

        The previous fix http://bugs.webkit.org/show_bug.cgi?id=12636 
        introduced new JNIType to enum in jni_utility.h This is a 
        problem on the Mac as it seems that the JNIType enum is also
        used in the JVM, it is used to specify the return type in
        jni_objc.mm
        Corrected the fix by moving type to the end, and changing
        jni_objc.mm to convert the new type to an old compatible
        type.

        * bindings/jni/jni_objc.mm:
        (KJS::Bindings::dispatchJNICall):
        * bindings/jni/jni_utility.h:

2007-03-26  Christopher Brichford  <chrisb@adobe.com>

        Reviewed/landed by Adam.

        Bug 13198: Move build settings from project file to xcconfig file for apollo
        port JSCore
        http://bugs.webkit.org/show_bug.cgi?id=13198

        - Moving build settings from xcode project file to xcconfig files.

        * JavaScriptCore.apolloproj/mac/JavaScriptCore/JavaScriptCore.Debug.xcconfig:
        * JavaScriptCore.apolloproj/mac/JavaScriptCore/JavaScriptCore.Release.xcconfig:
        * JavaScriptCore.apolloproj/mac/JavaScriptCore/JavaScriptCore.xcconfig:
        * JavaScriptCore.apolloproj/mac/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj:

2007-03-26  Brady Eidson  <beidson@apple.com>

        Rubberstamped by Anders and Maciej aand Geoff (oh my!)
        
        Since CFTypeRef is really void*, a RetainPtr couldn't be used. 
        RefType was "void", which doesn't actually exist as a type.
        Since RefType only existed for operator*(), and since that operator
        doesn't make any sense for RetainPtr, I removed them!

        * kjs/nodes.cpp: Touch this to force a rebuild and (hopefully) help the
          compiler with dependencies
        * wtf/RetainPtr.h: Nuke RefType and operator*()

2007-03-26  Geoffrey Garen  <ggaren@apple.com>

        Touched a file to (hopefully) help the compiler with RetainPtr dependencies.

        * kjs/nodes.cpp:
        (Node::deref):

2007-03-24  Brady Eidson  <beidson@apple.com>

        Reviewed by Adam

        Whoops, RetainPtr should be in the WTF namespace

        * wtf/RetainPtr.h:

2007-03-24  Brady Eidson  <beidson@apple.com>

        Reviewed by Adam
        
        <rdar://problem/5086210> - Move RetainPtr to WTF

        * wtf/RetainPtr.h: Added
        * JavaScriptCore.xcodeproj/project.pbxproj: Add it to the project file
        * JavaScriptCore.vcproj/WTF/WTF.vcproj: Ditto


2007-03-23  Christopher Brichford  <chrisb@adobe.com>

        Reviewed/landed by Adam.

        Bug 13175: Make apollo mac project files for JavaScriptCore actually
        build something
        http://bugs.webkit.org/show_bug.cgi?id=13175

        - Changing apollo mac project files for JavaScriptCore such that they actually build
        JavaScriptCore source code.

        * JavaScriptCore.apolloproj/ForwardingSources/grammar.cpp: Added.
        * JavaScriptCore.apolloproj/mac/JavaScriptCore/JavaScriptCore.xcconfig:
        * JavaScriptCore.apolloproj/mac/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj:

2007-03-24  Mark Rowe  <mrowe@apple.com>

        Rubber-stamped by Darin.

        * Configurations/JavaScriptCore.xcconfig: Remove unnecessary INFOPLIST_PREPROCESS.

2007-03-22  Christopher Brichford  <chrisb@adobe.com>

        Reviewed/landed by Adam.

        Bug 13164: Initial version of mac JavaScriptCore project files for
        apollo port 
        http://bugs.webkit.org/show_bug.cgi?id=13164

        - Adding mac project files for apollo port of JavaScriptCore. Currently project
        just builds dftables.

        * JavaScriptCore.apolloproj/mac/JavaScriptCore/JavaScriptCore.Debug.xcconfig: Added.
        * JavaScriptCore.apolloproj/mac/JavaScriptCore/JavaScriptCore.Release.xcconfig: Added.
        * JavaScriptCore.apolloproj/mac/JavaScriptCore/JavaScriptCore.xcconfig: Added.
        * JavaScriptCore.apolloproj/mac/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj: Added.

2007-03-21  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Darin.

        <rdar://problem/5076599> JavaScriptCore has a weak export (vtable for KJS::JSCell)

        * JavaScriptCore.exp: Remove __ZTVN3KJS6JSCellE.

2007-03-21  Adele Peterson  <adele@apple.com>

        Reviewed by Geoff.

        * API/JSStringRef.cpp: (JSStringIsEqual): Added JSLock.

2007-03-21  Zack Rusin  <zrusin@trolltech.com>

        Fix the compile when USE(MULTIPLE_THREADS) isn't
        defined

        * kjs/JSLock.cpp:
        (KJS::JSLock::currentThreadIsHoldingLock):

2007-03-20  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Geoff and Adam.
        
        - make USE(MULTIPLE_THREADS) support more portable
        http://bugs.webkit.org/show_bug.cgi?id=13069
        
        - fixed a threadsafety bug discovered by testing this
        
        - enhanced threadsafety assertions in collector

        * API/JSCallbackObject.cpp:
        (KJS::JSCallbackObject::~JSCallbackObject): This destructor can't
        DropAllLocks around the finalize callback, because it gets called
        from garbage collection and we can't let other threads collect!

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
        * kjs/JSLock.cpp:
        (KJS::JSLock::currentThreadIsHoldingLock): Added new function
        to allow stronger assertions than just that the lock is held
        by some thread (you can now assert that the current thread is
        holding it, given the new JSLock design).
        * kjs/JSLock.h:
        * kjs/collector.cpp: Refactored for portability plus added some
        stronger assertions.
        (KJS::Collector::allocate):
        (KJS::currentThreadStackBase):
        (KJS::Collector::registerAsMainThread):
        (KJS::onMainThread):
        (KJS::PlatformThread::PlatformThread):
        (KJS::getCurrentPlatformThread):
        (KJS::Collector::Thread::Thread):
        (KJS::destroyRegisteredThread):
        (KJS::Collector::registerThread):
        (KJS::Collector::markCurrentThreadConservatively):
        (KJS::suspendThread):
        (KJS::resumeThread):
        (KJS::getPlatformThreadRegisters):
        (KJS::otherThreadStackPointer):
        (KJS::otherThreadStackBase):
        (KJS::Collector::markOtherThreadConservatively):
        (KJS::Collector::markStackObjectsConservatively):
        (KJS::Collector::protect):
        (KJS::Collector::unprotect):
        (KJS::Collector::collectOnMainThreadOnly):
        (KJS::Collector::markMainThreadOnlyObjects):
        (KJS::Collector::collect):
        * kjs/collector.h:
        * wtf/FastMalloc.cpp:
        (WTF::fastMallocSetIsMultiThreaded):
        * wtf/FastMallocInternal.h:
        * wtf/Platform.h:

2007-03-19  Darin Adler  <darin@apple.com>

        * kjs/value.h: Roll ~JSValue change out. It was causing problems. I'll do it right later.

2007-03-19  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by John Sullivan.

        Fixed <rdar://problem/5073380> REGRESSION: Crash occurs at WTF::fastFree() 
        when reloading liveconnect page (applet)
        
        Best to use free when you use malloc, especially when malloc and delete
        use completely different libraries.

        * bindings/jni/jni_runtime.cpp:
        (JavaMethod::~JavaMethod):

2007-03-19  Andrew Wellington  <proton@wiretapped.net>

        Reviewed by Maciej.

        Really set Xcode editor to use 4 space indentation (http://webkit.org/coding/coding-style.html)

        * JavaScriptCore.xcodeproj/project.pbxproj:

2007-03-19  Darin Adler  <darin@apple.com>

        Reviewed by Geoff.

        - Changed list size threshold to 5 based on testing.

        I was testing the i-Bench JavaScript with the list statistics
        dumping on, and discovered that there were many 5-element lists.
        The fast case for lists was for 4 elements and fewer. By changing
        the threshold to 5 elements we get a measurable speedup. I believe
        this will help real web pages too, not just the benchmark.

        * kjs/list.cpp: Change constant from 4 to 5.

2007-03-19  Darin Adler  <darin@apple.com>

        * kjs/value.h: Oops, fix build.

2007-03-19  Darin Adler  <darin@apple.com>

        Reviewed by Geoff.

        - remove ~JSValue; tiny low-risk performance boost

        * kjs/value.h: Remove unneeded empty virtual destructor from JSValue.
        The only class derived from JSValue is JSCell and it already has a
        virtual destructor. Declaring an empty constructor in JSValue had one
        good effect: it marked the destructor private, making it a compile
        time error to try to destroy a JSValue; but that's not a likely
        mistake for someone to make. It had two bad effects: (1) it caused gcc,
        at least, to generate code to fix up the virtual table pointer to
        point to the JSValue version of the virtual table inside the destructor
        of all classes derived from JSValue directly or indirectly; (2) it
        caused JSValue to be a polymorphic class so required a virtual table for
        it. It's cleaner to not have either of those.

2007-03-18  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Mark.
        
        - avoid static construction (and global variable access) in a smarter, more portable way,
        to later enable MUTLI_THREAD mode to work on other platforms and compilers.
        
        * kjs/CommonIdentifiers.cpp: Added. New class to hold all the shared identifiers.
        (KJS::CommonIdentifiers::CommonIdentifiers):
        (KJS::CommonIdentifiers::shared):
        * kjs/CommonIdentifiers.h: Added.

        * kjs/ExecState.h:
        (KJS::ExecState::propertyNames): Hand the CommonIdentifiers instance here for easy access.
        (KJS::ExecState::ExecState):

        * API/JSObjectRef.cpp:
        (JSObjectMakeConstructor):
        * CMakeLists.txt:
        * JavaScriptCore.exp:
        * JavaScriptCore.pri:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * JavaScriptCoreSources.bkl:
        * bindings/runtime_array.cpp:
        (RuntimeArray::getOwnPropertySlot):
        (RuntimeArray::put):
        * bindings/runtime_method.cpp:
        (RuntimeMethod::getOwnPropertySlot):
        * kjs/array_object.cpp:
        (ArrayInstance::getOwnPropertySlot):
        (ArrayInstance::put):
        (ArrayInstance::deleteProperty):
        (ArrayProtoFunc::ArrayProtoFunc):
        (ArrayProtoFunc::callAsFunction):
        (ArrayObjectImp::ArrayObjectImp):
        * kjs/bool_object.cpp:
        (BooleanPrototype::BooleanPrototype):
        (BooleanProtoFunc::BooleanProtoFunc):
        (BooleanProtoFunc::callAsFunction):
        (BooleanObjectImp::BooleanObjectImp):
        * kjs/completion.h:
        (KJS::Completion::Completion):
        * kjs/date_object.cpp:
        (KJS::DateProtoFunc::DateProtoFunc):
        (KJS::DateObjectImp::DateObjectImp):
        (KJS::DateObjectFuncImp::DateObjectFuncImp):
        * kjs/error_object.cpp:
        (ErrorPrototype::ErrorPrototype):
        (ErrorProtoFunc::ErrorProtoFunc):
        (ErrorProtoFunc::callAsFunction):
        (ErrorObjectImp::ErrorObjectImp):
        (ErrorObjectImp::construct):
        (NativeErrorPrototype::NativeErrorPrototype):
        (NativeErrorImp::NativeErrorImp):
        (NativeErrorImp::construct):
        (NativeErrorImp::callAsFunction):
        * kjs/function.cpp:
        (KJS::FunctionImp::getOwnPropertySlot):
        (KJS::FunctionImp::put):
        (KJS::FunctionImp::deleteProperty):
        (KJS::FunctionImp::getParameterName):
        (KJS::DeclaredFunctionImp::construct):
        (KJS::IndexToNameMap::unMap):
        (KJS::Arguments::Arguments):
        (KJS::ActivationImp::getOwnPropertySlot):
        (KJS::ActivationImp::deleteProperty):
        (KJS::GlobalFuncImp::GlobalFuncImp):
        * kjs/function_object.cpp:
        (FunctionPrototype::FunctionPrototype):
        (FunctionProtoFunc::FunctionProtoFunc):
        (FunctionProtoFunc::callAsFunction):
        (FunctionObjectImp::FunctionObjectImp):
        (FunctionObjectImp::construct):
        * kjs/grammar.y:
        * kjs/identifier.cpp:
        * kjs/identifier.h:
        * kjs/interpreter.cpp:
        (KJS::Interpreter::init):
        (KJS::Interpreter::initGlobalObject):
        * kjs/interpreter.h:
        * kjs/lookup.h:
        * kjs/math_object.cpp:
        (MathFuncImp::MathFuncImp):
        * kjs/nodes.cpp:
        (ArrayNode::evaluate):
        (FuncDeclNode::processFuncDecl):
        (FuncExprNode::evaluate):
        * kjs/number_object.cpp:
        (NumberPrototype::NumberPrototype):
        (NumberProtoFunc::NumberProtoFunc):
        (NumberObjectImp::NumberObjectImp):
        * kjs/object.cpp:
        (KJS::JSObject::put):
        (KJS::JSObject::defaultValue):
        (KJS::JSObject::hasInstance):
        * kjs/object.h:
        (KJS::JSObject::getOwnPropertySlot):
        * kjs/object_object.cpp:
        (ObjectPrototype::ObjectPrototype):
        (ObjectProtoFunc::ObjectProtoFunc):
        (ObjectObjectImp::ObjectObjectImp):
        * kjs/regexp_object.cpp:
        (RegExpPrototype::RegExpPrototype):
        (RegExpProtoFunc::RegExpProtoFunc):
        (RegExpObjectImp::RegExpObjectImp):
        * kjs/string_object.cpp:
        (KJS::StringInstance::getOwnPropertySlot):
        (KJS::StringInstance::put):
        (KJS::StringInstance::deleteProperty):
        (KJS::StringPrototype::StringPrototype):
        (KJS::StringProtoFunc::StringProtoFunc):
        (KJS::StringProtoFunc::callAsFunction):
        (KJS::StringObjectImp::StringObjectImp):
        (KJS::StringObjectFuncImp::StringObjectFuncImp):
        * kjs/testkjs.cpp:
        (TestFunctionImp::TestFunctionImp):

2007-03-18  Andrew Wellington  <proton@wiretapped.net>

        Reviewed by Mark Rowe
        
        Set Xcode editor to use 4 space indentation (http://webkit.org/coding/coding-style.html) 

        * JavaScriptCore.xcodeproj/project.pbxproj:

2007-03-19  Mark Rowe  <mrowe@apple.com>

        Rubber-stamped by Brady.

        Update references to bugzilla.opendarwin.org with bugs.webkit.org.

        * bindings/c/c_utility.cpp:
        (KJS::Bindings::convertUTF8ToUTF16):
        * kjs/function.cpp:
        (KJS::FunctionImp::callAsFunction):
        * kjs/grammar.y:
        * kjs/keywords.table:
        * kjs/lexer.cpp:
        (KJS::Lexer::shift):

2007-03-18  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Oliver Hunt.
        
        Exposed some extra toUInt32 functionality, as part of the fix for
        REGRESSION: Incomplete document.all implementation breaks abtelectronics.com 
        (Style Change Through JavaScript Blanks Content)

        * JavaScriptCore.exp:
        * kjs/identifier.h:
        (KJS::Identifier::toUInt32):

2007-03-18  Geoffrey Garen  <ggaren@apple.com>

        Removed duplicate export name.
        
        * JavaScriptCore.exp:

2007-03-15  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Maciej Stachowiak.
        
        Fixed <rdar://problem/5064964> Repro ASSERT failure in JS Bindings when 
        closing window @ lowtrades.bptrade.com
        
        Unfortunately, the bindings depend on UString and Identifier as string 
        representations. So, they need to acquire the JSLock when doing something
        that will ref/deref their strings.

        Layout tests, the original site, and Java, Flash, and Quicktime on the 
        web work. No leaks reported. No automated test for this because testing 
        the Java bindings, like math, is hard.
        
        * bindings/runtime.h: Made Noncopyable, just to be sure.
        
        * bindings/c/c_class.cpp: 
        (KJS::Bindings::CClass::~CClass): Acquire the JSLock and explicitly clear the keys
        in our hashtable, since they're UString::Reps, and ref/deref aren't thread-safe.
        (KJS::Bindings::CClass::methodsNamed): Also acquire the JSLock when adding
        keys to the table, since the table ref's them.
        (KJS::Bindings::CClass::fieldNamed): ditto.

        * bindings/c/c_utility.cpp: Removed dead function.
        (KJS::Bindings::convertValueToNPVariant): Acquire the JSLock because doing
        it recursively is pretty cheap, and it's just too confusing to tell whether
        all our callers do it for us.
        (KJS::Bindings::convertNPVariantToValue): ditto
        * bindings/c/c_utility.h:

        * bindings/jni/jni_class.cpp: Same deal as c_class.cpp.
        (JavaClass::JavaClass):
        (JavaClass::~JavaClass):

        * bindings/jni/jni_instance.cpp: Same deal as c_utility.cpp.
        (JavaInstance::stringValue):
        * bindings/jni/jni_jsobject.cpp:
        (JavaJSObject::convertValueToJObject):

        * bindings/jni/jni_runtime.cpp:
        (JavaMethod::~JavaMethod): Moved from header, for clarity.
        (appendClassName): Made this static, so the set of callers is known, and
        we can assert that we hold the JSLock. Also changed it to take a UString
        reference, which makes the calling code simpler.
        (JavaMethod::signature): Store the ASCII value we care about instead of
        a UString, since UString is so much more hassle. Hold the JSLock while
        building up the temporary UString.

        * bindings/jni/jni_runtime.h: Nixed dead code in JavaMethod.
        (KJS::Bindings::JavaString::JavaString): Hold a UString::Rep instead of
        a UString, so we can acquire the JSLock and explicitly release it.
        (KJS::Bindings::JavaString::_commonInit):
        (KJS::Bindings::JavaString::~JavaString):
        (KJS::Bindings::JavaString::UTF8String):
        (KJS::Bindings::JavaString::uchars):
        (KJS::Bindings::JavaString::length):
        (KJS::Bindings::JavaString::ustring):

        * bindings/jni/jni_utility.cpp:
        (KJS::Bindings::convertArrayInstanceToJavaArray): Made this static, so 
        the set of callers is known, and we can assert that we hold the JSLock. 
        (KJS::Bindings::convertValueToJValue): Acquire the JSLock because doing
        it recursively is pretty cheap, and it's just too confusing to tell whether
        all our callers do it for us.

        * bindings/objc/objc_runtime.h: Nixed some dead code.
        * bindings/objc/objc_utility.mm:
        (KJS::Bindings::convertNSStringToString): Same drill as above.

2007-03-18  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Geoff.

        http://bugs.webkit.org/show_bug.cgi?id=13105
        REGRESSION: an exception raised when calculating base value of a dot expression is not returned

        Test: fast/js/dot-node-base-exception.html

        * kjs/nodes.cpp:
        (FunctionCallDotNode::evaluate): Added the necessary KJS_CHECKEXCEPTIONVALUE.

2007-03-18  Steve Falkenburg  <sfalken@apple.com>

        Build fix.

        * JavaScriptCore.vcproj/testkjs/testkjs.vcproj:

2007-03-17  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Mark Rowe.

        Made Version.xcconfig smarter when building for different configurations.
        Now uses the 522+ OpenSource version for Debug and Release, while using the
        full 522.4 version for Production builds. The system prefix is also computed
        based on the current system, so 4522.4 on Tiger and 5522.4 on Leopard.

        * Configurations/JavaScriptCore.xcconfig:
        * Configurations/Version.xcconfig:

2007-03-15  Maciej Stachowiak  <mjs@apple.com>

        Not reviewed.
        
        - build fix

        * wtf/TCSystemAlloc.cpp:

2007-03-15  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Geoff and Steve.
        
        - fix some portability issues with TCMalloc.

        * JavaScriptCore.vcproj/WTF/WTF.vcproj:
        * kjs/config.h:
        * wtf/FastMalloc.cpp:
        (WTF::SizeClass):
        (WTF::InitSizeClasses):
        (WTF::TCMalloc_PageHeap::Split):
        (WTF::TCMalloc_PageHeap::RegisterSizeClass):
        (WTF::TCMalloc_Central_FreeList::length):
        (WTF::TCMalloc_ThreadCache::InitTSD):
        (WTF::TCMalloc_ThreadCache::CreateCacheIfNecessary):
        * wtf/TCSpinLock.h:
        * wtf/TCSystemAlloc.cpp:
        (TryVirtualAlloc):
        (TCMalloc_SystemAlloc):

2007-03-15  Timothy Hatcher  <timothy@apple.com>

        Reviewed by John.

        * Factored out most of our common build settings into .xcconfig files. Anything that was common in
          each build configuration was factored out into the shared .xcconfig file.
        * Adds a Version.xcconfig file to define the current framework version, to be used in other places.
        * Use the new $(BUNDLE_VERSION) (defined in Version.xcconfig) in the preprocessed Info.plist.
        * Use the versions defined in Version.xcconfig to set $(DYLIB_CURRENT_VERSION).

        * Configurations/Base.xcconfig: Added.
        * Configurations/DebugRelease.xcconfig: Added.
        * Configurations/JavaScriptCore.xcconfig: Added.
        * Configurations/Version.xcconfig: Added.
        * Info.plist:
        * JavaScriptCore.xcodeproj/project.pbxproj:

2007-03-16  Shrikant Gangoda  <shrikant.gangoda@celunite.com>

        Gdk build fix.

        * kjs/DateMath.cpp:  gettimeofday comes from <sys/time.h> on Linux.

2007-03-14  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by .

        - Fixed one more build breakage

        * kjs/date_object.cpp:
        (KJS::formatLocaleDate):

2007-03-14  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by .

        - Fixed a build breakage.

        * kjs/DateMath.cpp:
        * kjs/date_object.cpp:
        (KJS::formatLocaleDate):
        (KJS::DateObjectImp::construct):

2007-03-14  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Geoff.

        - rdar://problem/5045720
        - DST changes in US affect JavaScript date calculations (12975)
        This fix was to ensure we properly test for the new changes to DST in the US.
        Also this fixes when we apply DST, now we correctly map most past years to current
        DST rules.  We still have a small issue with years before 1900 or after 2100.
        rdar://problem/5055038

        * kjs/DateMath.cpp: Fix DST to match spec better.
        (KJS::getCurrentUTCTime):
        (KJS::mimimumYearForDST):
        (KJS::maximumYearForDST):
        (KJS::equivalentYearForDST):
        (KJS::getDSTOffset):
        * kjs/DateMath.h: Consolodated common funtionality.
        * kjs/date_object.cpp: Consolodated common functionality.
        (KJS::formatLocaleDate):
        (KJS::DateObjectImp::construct):
        * tests/mozilla/ecma/jsref.js: Added functions for finding the correct days when DST starts and ends.
        * tests/mozilla/ecma/shell.js: Added back in the old DST functions for ease of merging with mozilla if needed.
        * tests/mozilla/ecma_2/jsref.js: Added functions for finding the correct days when DST starts and ends.
        * tests/mozilla/ecma_3/Date/shell.js: Added functions for finding the correct days when DST starts and ends.
        * tests/mozilla/expected.html: Updated to show all date tests passing.

=== Safari-5522.4 ===

2007-03-13  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by .

        - Adding expected failures until the are truly fixed. 
        - rdar://problem/5060302

        * tests/mozilla/expected.html:

2007-03-12  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by .

        - Actually update tests for new DST rules.

        * tests/mozilla/ecma/Date/15.9.3.1-1.js:
        * tests/mozilla/ecma/Date/15.9.3.1-2.js:
        * tests/mozilla/ecma/Date/15.9.3.1-3.js:
        * tests/mozilla/ecma/Date/15.9.3.1-4.js:
        * tests/mozilla/ecma/Date/15.9.3.1-5.js:
        * tests/mozilla/ecma/Date/15.9.3.2-1.js:
        * tests/mozilla/ecma/Date/15.9.3.2-2.js:
        * tests/mozilla/ecma/Date/15.9.3.2-3.js:
        * tests/mozilla/ecma/Date/15.9.3.2-4.js:
        * tests/mozilla/ecma/Date/15.9.3.2-5.js:
        * tests/mozilla/ecma/Date/15.9.3.8-1.js:
        * tests/mozilla/ecma/Date/15.9.3.8-2.js:
        * tests/mozilla/ecma/Date/15.9.3.8-3.js:
        * tests/mozilla/ecma/Date/15.9.3.8-4.js:
        * tests/mozilla/ecma/Date/15.9.3.8-5.js:
        * tests/mozilla/ecma/Date/15.9.5.10-1.js:
        * tests/mozilla/ecma/Date/15.9.5.10-10.js:
        * tests/mozilla/ecma/Date/15.9.5.10-11.js:
        * tests/mozilla/ecma/Date/15.9.5.10-12.js:
        * tests/mozilla/ecma/Date/15.9.5.10-13.js:
        * tests/mozilla/ecma/Date/15.9.5.10-2.js:
        * tests/mozilla/ecma/Date/15.9.5.10-3.js:
        * tests/mozilla/ecma/Date/15.9.5.10-4.js:
        * tests/mozilla/ecma/Date/15.9.5.10-5.js:
        * tests/mozilla/ecma/Date/15.9.5.10-6.js:
        * tests/mozilla/ecma/Date/15.9.5.10-7.js:
        * tests/mozilla/ecma/Date/15.9.5.10-8.js:
        * tests/mozilla/ecma/Date/15.9.5.10-9.js:
        * tests/mozilla/ecma/jsref.js:
        * tests/mozilla/ecma_2/jsref.js:
        * tests/mozilla/ecma_3/Date/shell.js:

2007-03-12  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by .

        - Update tests for new DST rules.

        * tests/mozilla/ecma/shell.js:

2007-03-11  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Oliver Hunt.
        
        Fixed <rdar://problem/4681051> Installer crashes in KJS::Collector::
        markOtherThreadConservatively(KJS::Collector::Thread*) trying to install 
        iLife 06 using Rosetta on an Intel Machine
        
        The problem was that our thread-specific data destructor would modify the
        list of active JavaScript threads without holding the JSLock, corrupting
        the list. Corruption was especially likely if one JavaScript thread exited 
        while another was starting up.

        * JavaScriptCore.exp:
        * kjs/JSLock.cpp: Don't conflate locking the JSLock with registering a
        thread, since the thread-specific data destructor needs to lock
        without registering a thread. Instead, treat thread registration as a
        part of the convenience of the JSLock object, and whittle down JSLock::lock()
        to just the bits that actually do the locking.
        (KJS::JSLock::lock):
        (KJS::JSLock::registerThread):
        * kjs/JSLock.h: Updated comments to mention the new behavior above, and
        other recent changes.
        (KJS::JSLock::JSLock):
        * kjs/collector.cpp:
        (KJS::destroyRegisteredThread): Lock here.
        (KJS::Collector::registerThread): To match, assert that we're locked here.

2007-03-10  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Darin Adler.

        Fixed <rdar://problem/4587763> PAC file: lock inversion between QT and 
        JSCore causes a hang @ www.panoramas.dk
        
        With a PAC file, run-webkit-tests --threaded passes, the reported site
        works, and all the Quicktime/JavaScript and Flash/JavaScript examples
        I found through Google work, too.
        
        Any time JavaScript causes arbitrary non-JavaScript code to execute, it 
        risks deadlock, because that code may block, trying to acquire a lock 
        owned by a thread that is waiting to execute JavaScript. In this case,
        the thread was a networking thread that was waiting to interpret a PAC file.
        
        Because non-JavaScript code may execute in response to, well, anything,
        a perfect solution to this problem is impossible. I've implemented an
        optimistic solution, instead: JavaScript will drop its lock whenever it
        makes a direct call to non-JavaScript code through a bridging/plug-in API,
        but will blissfully ignore the indirect ways it may cause non-JavaScript 
        code to run (resizing a window, for example). 
        
        Unfortunately, this solution introduces significant locking overhead in 
        the bridging APIs. I don't see a way around that.

        This patch includes some distinct bug fixes I saw along the way:
        
        * bindings/objc/objc_instance.mm: Fixed a bug where a nested begin() call
        would leak its autorelease pool, because it would NULL out _pool without
        draining it.

        * bindings/runtime_object.cpp:
        (RuntimeObjectImp::methodGetter): Don't copy an Identifier to ASCII only
        to turn around and make an Identifier from the ASCII. In an earlier 
        version of this patch, the copy caused an assertion failure. Now it's 
        just unnecessary work.
        (RuntimeObjectImp::getOwnPropertySlot): ditto

        * bindings/objc/objc_instance.h: Removed overrides of setVAlueOfField and
        getValueOfField, because they did exactly what the base class versions did.
        Removed overrides of Noncopyable declarations for the same reason.

        * bindings/runtime.h: Inherit from Noncopyable instead of rolling our own.
        * bindings/c/c_instance.h: ditto

        And the actual patch:
        
        * API/JSCallbackConstructor.cpp: Drop all locks when calling out to C.
        (KJS::JSCallbackConstructor::construct):
        * API/JSCallbackFunction.cpp: ditto
        (KJS::JSCallbackFunction::callAsFunction):
        * API/JSCallbackObject.cpp: ditto
        (KJS::JSCallbackObject::init):
        (KJS::JSCallbackObject::~JSCallbackObject):
        (KJS::JSCallbackObject::getOwnPropertySlot):
        (KJS::JSCallbackObject::put):
        (KJS::JSCallbackObject::deleteProperty):
        (KJS::JSCallbackObject::construct):
        (KJS::JSCallbackObject::hasInstance):
        (KJS::JSCallbackObject::callAsFunction):
        (KJS::JSCallbackObject::getPropertyNames):
        (KJS::JSCallbackObject::toNumber):
        (KJS::JSCallbackObject::toString):
        (KJS::JSCallbackObject::staticValueGetter):
        (KJS::JSCallbackObject::callbackGetter):
        
        * bindings/c/c_instance.cpp: Drop all locks when calling out to C.
        (KJS::Bindings::CInstance::invokeMethod):
        (KJS::Bindings::CInstance::invokeDefaultMethod):
        * bindings/c/c_runtime.cpp: Drop all locks when calling out to C.
        (KJS::Bindings::CField::valueFromInstance):
        (KJS::Bindings::CField::setValueToInstance):
        * bindings/jni/jni_objc.mm:
        (KJS::Bindings::dispatchJNICall): Drop all locks when calling out to Java.

        * bindings/objc/objc_instance.mm: The changes here are to accomodate the
        fact that C++ unwinding of DropAllLocks goes crazy when you put it inside
        a @try block. I moved all JavaScript stuff outside of the @try blocks, and 
        then prefixed the whole blocks with DropAllLocks objects. This required some
        supporting changes in other functions, which now acquire the JSLock for
        themselves, intead of relying on their callers to do so.
        (ObjcInstance::end):
        (ObjcInstance::invokeMethod):
        (ObjcInstance::invokeDefaultMethod):
        (ObjcInstance::setValueOfUndefinedField):
        (ObjcInstance::getValueOfUndefinedField):
        * bindings/objc/objc_runtime.mm: Same as above, except I didn't want to
        change throwError to acquire the JSLock for itself.
        (ObjcField::valueFromInstance):
        (ObjcField::setValueToInstance):
        * bindings/objc/objc_utility.mm: Supporting changes mentioned above.
        (KJS::Bindings::convertValueToObjcValue):
        (KJS::Bindings::convertObjcValueToValue):

        * kjs/JSLock.cpp: 
        (1) Fixed DropAllLocks to behave as advertised, and drop the JSLock only 
        if the current thread actually acquired it in the first place. This is 
        important because WebKit needs to ensure that the JSLock has been 
        dropped before it makes a plug-in call, even though it doesn't know if 
        the current thread actually acquired the JSLock. (We don't want WebKit
        to accidentally drop a lock belonging to *another thread*.)
        (2) Used the new per-thread code written for (1) to make recursive calls
        to JSLock very cheap. JSLock now knows to call pthread_mutext_lock/ 
        pthread_mutext_unlock only at nesting level 0.
        (KJS::createDidLockJSMutex):
        (KJS::JSLock::lock):
        (KJS::JSLock::unlock):
        (KJS::DropAllLocks::DropAllLocks):
        (KJS::DropAllLocks::~DropAllLocks):
        (KJS::JSLock::lockCount):
        * kjs/JSLock.h: Don't duplicate Noncopyable.
        (KJS::JSLock::~JSLock):

        * wtf/Assertions.h: Blind attempt at helping the Windows build.

2007-03-08  MorganL  <morganl.webkit@yahoo.com>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=13018
        Bug 13018: allow embedders to override the definition of CRASH.

        * wtf/Assertions.h: make it possible to override CRASH.

2007-03-07  Anrong Hu  <huanr@yahoo.com>

        Reviewed by Maciej.

        Fix http://bugs.webkit.org/show_bug.cgi?id=12535
        Bug 12535: Stack-optimizing compilers can trick GC into freeing in-use objects

        * kjs/internal.cpp:
        (KJS::StringImp::toObject): Copy val onto the stack so it is not subject to garbage collection.

2007-03-07  Geoffrey Garen  <ggaren@apple.com>

        Build fix for non-multiple-thread folks.
        
        Use a shared global in the non-multiple-thread case.

        * wtf/FastMalloc.cpp:
        (WTF::isForbidden):
        (WTF::fastMallocForbid):
        (WTF::fastMallocAllow):

2007-03-07  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Darin Adler.
        
        Fixed ASSERT failure I just introduced.
        
        Made the fastMalloc isForbidden flag per thread. (Oops!) We expect that
        other threads will malloc while we're marking -- we just want to prevent
        our own marking from malloc'ing.

        * wtf/FastMalloc.cpp:
        (WTF::initializeIsForbiddenKey):
        (WTF::isForbidden):
        (WTF::fastMallocForbid):
        (WTF::fastMallocAllow):
        (WTF::fastMalloc):
        (WTF::fastCalloc):
        (WTF::fastFree):
        (WTF::fastRealloc):
        (WTF::do_malloc):

2007-03-07  Shrikant Gangoda  <shrikant.gangoda@celunite.com>

        Reviewed by Maciej.

        http://bugs.webkit.org/show_bug.cgi?id=12997

        Wrap pthread-specific assertion in #if USE(MULTIPLE_THREADS).

        * kjs/collector.cpp:
        (KJS::Collector::markMainThreadOnlyObjects):

2007-03-06  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Maciej Stachowiak.
        
        Fixed <rdar://problem/4576242> | http://bugs.webkit.org/show_bug.cgi?id=12586
        PAC file: malloc deadlock sometimes causes a hang @ www.apple.com/pro/profiles/ (12586)
        
        This is a modified version of r14752 on the branch.
        
        These changes just add debugging functionality. They ASSERT that we don't 
        malloc during the mark phase of a garbage collection, which can cause a
        deadlock.

        * kjs/collector.cpp:
        (KJS::Collector::collect):
        * wtf/FastMalloc.cpp:
        (WTF::fastMallocForbid):
        (WTF::fastMallocAllow):
        (WTF::fastMalloc):
        (WTF::fastCalloc):
        (WTF::fastFree):
        (WTF::fastRealloc):
        (WTF::do_malloc):
        * wtf/FastMalloc.h:

2007-03-06  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Maciej Stachowiak.
        
        Fixed all known crashers exposed by run-webkit-tests --threaded. This covers:

        <rdar://problem/4565394> | http://bugs.webkit.org/show_bug.cgi?id=12585 
            PAC file: after closing a window that contains macworld.com, new window 
            crashes (KJS::PropertyMap::mark()) (12585)
        <rdar://problem/4571215> | http://bugs.webkit.org/show_bug.cgi?id=9211
            PAC file: Crash occurs when clicking on the navigation tabs at http://www.businessweek.com/ (9211)
        <rdar://problem/4557926> 
            PAC file: Crash occurs when attempting to view image in slideshow mode 
            at http://d.smugmug.com/gallery/581716 ( KJS::IfNode::execute (KJS::
            ExecState*) + 312) if you use a PAC file

        (1) Added some missing JSLocks, along with related ASSERTs.
        
        (2) Fully implemented support for objects that can only be garbage collected
        on the main thread. So far, only WebCore uses this. We can add it to API
        later if we learn that it's needed. 
        
        The implementation uses a "main thread only" flag inside each object. When 
        collecting on a secondary thread, the Collector does an extra pass through 
        the heap to mark all flagged objects before sweeping. This solution makes
        the common case -- flag lots of objects, but never collect on a secondary 
        thread -- very fast, even though the uncommon case of garbage collecting
        on a secondary thread isn't as fast as it could be. I left some notes 
        about how to speed it up, if we ever care.
        
        For posterity, here are some things I learned about GC while investigating:
        
        * Each collect must either mark or delete every heap object. "Zombie" 
        objects, which are neither marked nor deleted, raise these issues:

            * On the next pass, the conservative marking algorithm might mark a 
            zombie, causing it to mark freed objects.

            * The client might try to use a zombie, which would seem live because 
            its finalizer had not yet run.

        * A collect on the main thread is free to delete any object. Presumably, 
        objects allocated on secondary threads have thread-safe finalizers.

        * A collect on a secondary thread must not delete thread-unsafe objects.

        * The mark function must be thread-safe.
        
        Line by line comments:

        * API/JSObjectRef.h: Added comment specifying that the finalize callback 
        may run on any thread.

        * JavaScriptCore.exp: Nothing to see here.

        * bindings/npruntime.cpp:
        (_NPN_GetStringIdentifier): Added JSLock.

        * bindings/objc/objc_instance.h:
        * bindings/objc/objc_instance.mm:
        (ObjcInstance::~ObjcInstance): Use an autorelease pool. The other callers 
        to CFRelease needed one, too, but they were dead code, so I removed them 
        instead. (This fixes a leak seen while running run-webkit-tests --threaded,
        although I don't think it's specifically a threading issue.) 
        
        * kjs/collector.cpp:
        (KJS::Collector::collectOnMainThreadOnly): New function. Tells the collector
        to collect a value only if it's collecting on the main thread.
        (KJS::Collector::markMainThreadOnlyObjects): New function. Scans the heap
        for "main thread only" objects and marks them.

        * kjs/date_object.cpp: 
        (KJS::DateObjectImp::DateObjectImp): To make the new ASSERTs happy, allocate 
        our globals on the heap, avoiding a seemingly unsafe destructor call at 
        program exit time.
        * kjs/function_object.cpp:
        (FunctionPrototype::FunctionPrototype): ditto

        * kjs/interpreter.cpp:
        (KJS::Interpreter::mark): Removed boolean parameter, which was an incomplete
        and arguably hackish way to implement markMainThreadOnlyObjects() inside WebCore.
        * kjs/interpreter.h:

        * kjs/identifier.cpp:
        (KJS::identifierTable): Added some ASSERTs to check for thread safety 
        problems.

        * kjs/list.cpp: Added some ASSERTs to check for thread safety problems.
        (KJS::allocateListImp):
        (KJS::List::release):
        (KJS::List::append):
        (KJS::List::empty): Make the new ASSERTs happy.

        * kjs/object.h:
        (KJS::JSObject::JSObject): "m_destructorIsThreadSafe" => "m_collectOnMainThreadOnly".
        I removed the constructor parameter because m_collectOnMainThreadOnly,
        like m_marked, is a Collector bit, so only the Collector should set or get it.

        * kjs/object_object.cpp:
        (ObjectPrototype::ObjectPrototype): Make the ASSERTs happy.
        * kjs/regexp_object.cpp:
        (RegExpPrototype::RegExpPrototype): ditto

        * kjs/ustring.cpp: Added some ASSERTs to check for thread safety problems.
        (KJS::UCharReference::ref): 
        (KJS::UString::Rep::createCopying):
        (KJS::UString::Rep::create):
        (KJS::UString::Rep::destroy):
        (KJS::UString::null): Make the new ASSERTs happy.
        * kjs/ustring.h:
        (KJS::UString::Rep::ref): Added some ASSERTs to check for thread safety problems.
        (KJS::UString::Rep::deref):

        * kjs/value.h:
        (KJS::JSCell::JSCell):

2007-03-06  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Maciej Stachowiak.
        
        2% speedup on super accurate JS iBench.

        (KJS::Collector::collect): Removed anti-optimization to call
        pthread_is_threaded_np() before calling pthread_main_np(). Almost all 
        apps have more than one thread, so the extra call is actually worse.
        Interestingly, even the single-threaded testkjs shows a speed gain
        from removing the pthread_is_threaded_np() short-circuit. Not sure why.

2007-03-04  Don Gibson  <dgibson77@gmail.com>

        Reviewed by Nikolas Zimmermann.

        - fix http://bugs.webkit.org/show_bug.cgi?id=12950
          Assertions.cpp should not #define macros that are already defined

        * wtf/Assertions.cpp: Don't #define WINVER and _WIN32_WINNT if they
        are already defined.

2007-03-02  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Anders.
        
        Add unsigned int hash traits (matches existing unsigned long version)

        * wtf/HashTraits.h:
        (WTF::):

2007-03-02  Adam Roben  <aroben@apple.com>

        Reviewed by Kevin M.

        Try to fix the Qt build.

        * kjs/DateMath.cpp:
        (KJS::msToGregorianDateTime): Removed unnecessary "struct" keyword.
        * kjs/DateMath.h: Moved forward declarations to the top of the file
        before they are used.
        * kjs/date_object.cpp:
        (KJS::formatLocaleDate): Changed to take a const GregorianDateTime&
        since GregorianDateTime is Noncopyable.

2007-03-02  Darin Adler  <darin@apple.com>

        Reviewed by Kevin McCullough.

        - fix http://bugs.webkit.org/show_bug.cgi?id=12867
          REGRESSION: BenchJS test 7 (dates) is 220% slower than in Safari 2.0.4

        * kjs/DateMath.h: Marked GregorianDateTime as noncopyable, since it has a non-trivial
        destructor and not the correspoding copy constructor or assignment operator.
        Changed the GregorianDateTime constructor to use member initialization syntax.
        Fixed the destructor to use the array delete operator, since timeZone is an array.

        * kjs/DateMath.cpp:
        (KJS::daysInYear): Changed to call isLeapYear so the rule is not repeated twice.
        (KJS::getUTCOffset): Added caching on PLATFORM(DARWIN), since we can rely on the
        notify_check function and "com.apple.system.timezone" to let us know when the
        offset has changed.

2007-02-27  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Darin Adler.
        
        Follow-up to fixing http://bugs.webkit.org/show_bug.cgi?id=12659 | <rdar://problem/4954306>
        JS objects not collected after closing window @ ebay.com/maps.google.com
        
        Changed Interpreter cache of global constructors and prototypes from
        ProtectedPtrs to bare, marked pointers. ProtectedPtrs are inefficient,
        and they increase the risk of reference cycles. Also, Darin said something
        about ProtectedPtrs giving him warts.
        
        Also changed data members to precise types from generic JSObject*'s.
        
        Layout tests and JS tests pass.

        * kjs/SavedBuiltins.h:
        * kjs/interpreter.cpp:
        (KJS::Interpreter::init):
        (KJS::Interpreter::~Interpreter):
        (KJS::Interpreter::initGlobalObject): Moved Identifier::init() call to
        constructor, for clarity.
        (KJS::Interpreter::mark):
        * kjs/interpreter.h:

2007-02-27  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Maciej Stachowiak.
        
        Fixed http://bugs.webkit.org/show_bug.cgi?id=12659 | <rdar://problem/4954306>
        JS objects not collected after closing window @ ebay.com/maps.google.com

        Don't GC in the Interpreter destructor. For that to work, the Interpreter
        would have to NULL out all of its ProtectedPtrs before calling collect(). But 
        we've decided that we don't want things to work that way, anyway. We want the
        client to be in charge of manual GC so that it can optimize cases when
        it will be destroying many interpreters at once
        (e.g., http://bugs.webkit.org/show_bug.cgi?id=12900).
        
        Also removed Interpreter::collect() because it was redundant with 
        Collector::collect().

        * JavaScriptCore.exp:
        * kjs/interpreter.cpp:
        (KJS::Interpreter::~Interpreter):
        * kjs/testkjs.cpp:
        (TestFunctionImp::callAsFunction):

2007-02-26  Krzysztof Kowalczyk  <kkowalczyk@gmail.com>

        Reviewed by Adam Roben.

        Rename *_SUPPORT defines to ENABLE_*.

        * jscore.bkl:

2007-02-26  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Lars.
        
        - <rdar://problem/5021698> Disable experimental SVG features (12883)

        * wtf/Platform.h: Add ENABLE() macro similar to HAVE() and USE(), to
        allow nicer handling of optional WebKit features.

2007-02-22  George Staikos  <staikos@kde.org>

        Reviewed by Lars.

        Add return values

        * wtf/unicode/qt4/UnicodeQt4.h:
        (WTF::Unicode::toLower):
        (WTF::Unicode::toUpper):

2007-02-22  Oscar Cwajbaum  <public@oscarc.net>

        Reviewed by Maciej.

        Fix ARM-specific alignment problem in FastMalloc
        http://bugs.webkit.org/show_bug.cgi?id=12841

        * wtf/FastMalloc.cpp:
        Modify how pageheap_memory is declared to ensure proper alignment
        on architectures such as ARM

2007-02-20  Zack Rusin  <zrusin@trolltech.com>

        Reviewed by Lars

        Make sure that non-void methods always return something.

        * wtf/unicode/qt4/UnicodeQt4.h:
        (WTF::Unicode::toLower):
        (WTF::Unicode::toUpper):
        (WTF::Unicode::foldCase):

2007-02-18  Kevin Ollivier  <kevino@theolliviers.com>

        Reviewed by Adam Roben.

        Fix cases where MSVC-specific code was identified as Win32 platform
        code. (as it should be compiled for e.g. wx port when using MSVC too)
        
        * wtf/Assertions.h: 
        * wtf/MathExtras.h:
        * wtf/StringExtras.h:
        changed PLATFORM(WIN) sections to COMPILER(MSVC) as necessary

2007-02-17  Krzysztof Kowalczyk  <kkowalczyk@gmail.com>

        Reviewed by Adam Roben.

        Fix crashes on ARM due to different struct packing. Based on a patch
        by Mike Emmel.
        * kjs/ustring.cpp: compile-time assert to make sure sizeof(UChar) == 2
        * kjs/ustring.h: pack UChar struct to ensure that sizeof(UChar) == 2
        * wtf/Assertions.h: add COMPILE_ASSERT macro for compile-time assertions

2007-02-16  George Staikos  <staikos@kde.org>

        Reviewed by Maciej.

        Fix uninitialized variable

        * bindings/testbindings.cpp:
        (myAllocate):

2007-02-16  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Mitz.

        http://bugs.webkit.org/show_bug.cgi?id=12788
        REGRESSION: Going back one page in history has a noticeable delay
        
        Um...if all elements in two vectors are equal, then I guess we could say that
        the two vectors are equal too.
        
        * wtf/Vector.h:
        (WTF::):

2007-02-14  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Darin.

        Add new canCompareWithMemcmp vector trait and use it to determine whether
        operator== can use memcmp.
        
        * wtf/Vector.h:
        (WTF::):
        (WTF::VectorTypeOperations::compare):
        (WTF::operator==):
        * wtf/VectorTraits.h:
        (WTF::):

2007-02-13  Brady Eidson  <beidson@apple.com>

        Reviewed by Darin
        
        Tweaked vector a bit

        * wtf/Vector.h:
        (WTF::operator==):

2007-02-13  Dex Deacon  <occupant4@gmail.com>

        Reviewed by Darin.

        - fix for http://bugs.webkit.org/show_bug.cgi?id=12750
          Vector operator== was not defined correctly. It returned void,
          did not accept const Vectors, and used an int instead of size_t. 

        * wtf/Vector.h: fixed comparison operators
        (WTF::operator==):
        (WTF::operator!=):

2007-02-10  David Carson  <dacarson@gmail.com>

        Reviewed by Maciej.

        - fix for http://bugs.webkit.org/show_bug.cgi?id=12636
        Corrected the generation of method signatures when the parameter
        is an Array. 
        Added support for converting a Javascript array to a Java array.

        * bindings/jni/jni_utility.h: added new type for array, array_type
        * bindings/jni/jni_runtime.cpp: add support for new array type
        (JavaField::valueFromInstance):
        (JavaField::setValueToInstance):
        (JavaMethod::JavaMethod):
        (JavaMethod::signature):
        * bindings/jni/jni_utility.cpp: add support for new array type
        (KJS::Bindings::callJNIMethod):
        (KJS::Bindings::callJNIStaticMethod):
        (KJS::Bindings::callJNIMethodIDA):
        (KJS::Bindings::JNITypeFromClassName):
        (KJS::Bindings::signatureFromPrimitiveType):
        (KJS::Bindings::JNITypeFromPrimitiveType):
        (KJS::Bindings::getJNIField):
        (KJS::Bindings::convertArrayInstanceToJavaArray): new method
        converts the Javascript array to the requested Java array.
        (KJS::Bindings::convertValueToJValue):

2007-02-08  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Geoff.

        <rdar://problem/4930614>
        Safari complains about "Slow Script" if GMail is left open and machine is busy
        
        <rdar://problem/4649516>
        Turn off slow script dialog or crank up time that makes it come up
        
        <rdar://problem/4963589>
        Slow script warning is displayed after closing of PROMPT or PRINT dialog
        
        Re-do the way script timeouts are handled. No longer use a unix timer that sends signals. Instead, add a 
        tick count and increment it in loop bodies. If the tick count reaches a threshold, do a timeout check. If the total time executing
        is higher than the timeout value, (possibly) interrupt the script. The timeout checker also adjusts the threshold dynamically
        to prevent doing the timeout check too often.
         
        * JavaScriptCore.exp:
        Remove pause and resume calls.
        
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
        Add winmm.lib.

        * kjs/interpreter.cpp:
        (KJS::Interpreter::init):
        (KJS::Interpreter::~Interpreter):
        (KJS::Interpreter::startTimeoutCheck):
        (KJS::Interpreter::stopTimeoutCheck):
        (KJS::Interpreter::resetTimeoutCheck):
        (KJS::getCurrentTime):
        (KJS::Interpreter::checkTimeout):
        * kjs/interpreter.h:
        (KJS::Interpreter::timedOut):
        * kjs/nodes.cpp:
        (DoWhileNode::execute):
        (WhileNode::execute):
        (ForNode::execute):

2007-02-07  Darin Adler  <darin@apple.com>

        * JavaScriptCore.vcproj/JavaScriptCore.sln: Reenable testkjs.

2007-02-07  Darin Adler  <darin@apple.com>

        Reviewed by Geoff.

        - another build fix; this time for sure

        * pcre/pcre_exec.c: (match):
        The compiler caught an incorrect use of the othercase variable across
        a call to RMATCH in character repeat processing. Local variables can
        change in the crazy NO_RECURSE mode that we use, so we instead need
        the value in othercase to be in one of the special stack frame variables.
        Added a new stack frame variable for this purpose named repeat_othercase.
        Also noted a similar error in the non-UTF-16 side of the #ifdef, but
        didn't try to fix that one. Also removed a SUPPORT_UCP #ifdef from the
        PCRE_UTF16 side; that code doesn't work without the Unicde properties
        table, and we don't try to use it that way.

2007-02-06  Steve Falkenburg  <sfalken@apple.com>

        Disable testkjs in sln until we figure out mysterious compiler warning.

        * JavaScriptCore.vcproj/JavaScriptCore.sln:

2007-02-06  Steve Falkenburg  <sfalken@apple.com>

        Build fix by ggaren

        * pcre/pcre_exec.c:
        (match):

2007-02-06  Darin Adler  <darin@apple.com>

        Reviewed by Geoff.

        - fix <rdar://problem/4979089> PCRE should avoid setjmp/longjmp even when compiler
          is not GCC

        Added a new code path that's slower and way uglier but doesn't rely on GCC's
        computed gotos.

        * pcre/pcre_exec.c: Added a numeric parameter to the RMATCH function. It must be
        different at every RMATCH call site. Changed the non-GCC NO_RECURSE version of
        the macro to use a label incorporating the number. Changed the RRETURN macro to
        use a goto instead of longjmp.
        (match): Added a different number at each callsite, using a perl script for the
        first-time task. Going forward it should be easy to maintain by hand. Added a
        switch statement at the bottom of the function. We'll get compile time errors
        if we have anything in the switch statement that's never used in an RMATCH,
        but errors in the other direction are silent except at runtime.

2007-02-06  Darin Adler  <darin@apple.com>

        Reviewed by John.

        - fix <rdar://problem/4687840> 9A241: JavaScript RegExp 25-30x slower than on 10.4.7

        I used Shark to figure out what to do. The test case is now 15% faster than with
        stock Safari. Some other regular expression cases might still be a few % slower
        than before, but the >10x slowdown is now completely gone.

        1) Fix slowness caused by setjmp/longjmp by using computed goto instead.

        Use GCC extensions - locally declared labels, labels as values, and computed goto -
        instead of using setjmp/longjmp to implemement non-recursive version of the regular
        expression system. We could probably make this even faster if we reduced the use
        of malloc a bit too.

        2) Fix slowness caused by allocating heapframe objects by allocating the first
           16 of them from the stack.

        3) Speed up use of malloc and free in PCRE by making it use fastMalloc and fastFree.

        4) Speed up the test case by adding a special case to a UString function.

        5) Made a small improvement to the innermost hottest loop of match by hoisting
           the conversion from int to pcre_uchar out of the loop.

        * JavaScriptCore.xcodeproj/project.pbxproj: Compile FastMallocPCRE.cpp, and don't
        compile pcre_globals.c.

        * wtf/FastMallocPCRE.cpp: Added. A copy of pcre_globals.c that uses FastMalloc.h.
        This is better than code that sets the PCRE allocation globals because by doing it
        this way there's guaranteed to be no problem with order of initialization.

        * kjs/ustring.cpp: (KJS::UString::spliceSubstringsWithSeparators): Add a fast
        special case when this is called for only one subrange and no seaprators. This
        was happening a lot in the test case and it seems quite reasonable to optimize this.

        * pcre/pcre_exec.c: Create a copy of the RMATCH and RRETURN macros that use goto
        instead of setjmp/longjmp. Change code that calls pcre_stack_malloc to first use
        storage on the stack inside the match function.
        (match): Move initialization of utf8 up a couple lines to avoid "possibly used
        uninitialized" warning. Use a local variable so we compare with pcre_uchar instead
        of with int inside the inner "find a character" loop.

2007-02-03  George Staikos  <staikos@kde.org>

        Reviewed by Alexey.

        -1 is not a valid point.  We can't handle anything > 0xffff anyway.
        Fixes crash on cases like eval("x");

        * wtf/unicode/qt4/UnicodeQt4.h:
        (WTF::Unicode::category):

2007-02-02  Darin Adler  <darin@apple.com>

        Reviewed by Anders.

        - fix copying and assigning a ListHashSet

        No test because the code path with bugs I am fixing is not used yet.

        * wtf/ListHashSet.h: Tweaked ListHashSetNodeAllocator a little bit for clarity.
        Changed m_allocator to be an OwnPtr instead of doing an explicit delete.
        Fixed bug in copy constructor where we'd have an uninitialized m_allocator.
        Fixed bug in assignment operator where it would swap only the hash table, and
        not the head, tail, and allocator pointers.

2007-02-02  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Maciej Stachowiak.
        
        Use WTFLog instead of fprintf for logging KJS::Node leaks.

        * kjs/nodes.cpp:
        (NodeCounter::~NodeCounter): Changed count to unsigned, updated
        to match style guidelines.

2007-02-02  Maciej Stachowiak  <mjs@apple.com>

        - not reviewed, build fix

        * wtf/ListHashSet.h:
        (WTF::ListHashSetNodeAllocator::ListHashSetNodeAllocator): ummm, use union correctly

2007-02-01  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin.
        
        - use a custom allocator for ListHashSet, to fix ~1% perf regression using it for form control

        * wtf/ListHashSet.h:
        (WTF::ListHashSetNodeAllocator::ListHashSetNodeAllocator):
        (WTF::ListHashSetNodeAllocator::allocate):
        (WTF::ListHashSetNodeAllocator::deallocate):
        (WTF::ListHashSetNode::operator new):
        (WTF::ListHashSetNode::operator delete):
        (WTF::ListHashSetNode::destroy):
        (WTF::ListHashSetTranslator::translate):
        (WTF::::ListHashSet):
        (WTF::::~ListHashSet):
        (WTF::::add):
        (WTF::::unlinkAndDelete):
        (WTF::::deleteAllNodes):

2007-01-31  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Adam.
        
        - fix sporadic crash

        * wtf/ListHashSet.h:
        (WTF::::remove): remove before deleting

2007-01-31  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Mark with help from Lars.
        
        - added new ListHashSet class, which combines a hashtable and a linked list to provide a set
        that keeps elements in inserted order
        
        This is to assist in fixing the following:
        <rdar://problem/4751164> REGRESSION: Safari places text on incorrect button when returning to a page via back [10541]
        http://bugs.webkit.org/show_bug.cgi?id=10541

        * JavaScriptCore.vcproj/WTF/WTF.vcproj:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * wtf/HashTable.h:
        (WTF::HashTable::find):
        (WTF::HashTable::contains):
        (WTF::::find):
        (WTF::::contains):
        * wtf/ListHashSet.h: Added.
        (WTF::ListHashSetNode::ListHashSetNode):
        (WTF::ListHashSetNodeHashFunctions::hash):
        (WTF::ListHashSetNodeHashFunctions::equal):
        (WTF::ListHashSetIterator::ListHashSetIterator):
        (WTF::ListHashSetIterator::get):
        (WTF::ListHashSetIterator::operator*):
        (WTF::ListHashSetIterator::operator->):
        (WTF::ListHashSetIterator::operator++):
        (WTF::ListHashSetIterator::operator--):
        (WTF::ListHashSetIterator::operator==):
        (WTF::ListHashSetIterator::operator!=):
        (WTF::ListHashSetIterator::operator const_iterator):
        (WTF::ListHashSetIterator::node):
        (WTF::ListHashSetConstIterator::ListHashSetConstIterator):
        (WTF::ListHashSetConstIterator::get):
        (WTF::ListHashSetConstIterator::operator*):
        (WTF::ListHashSetConstIterator::operator->):
        (WTF::ListHashSetConstIterator::operator++):
        (WTF::ListHashSetConstIterator::operator--):
        (WTF::ListHashSetConstIterator::operator==):
        (WTF::ListHashSetConstIterator::operator!=):
        (WTF::ListHashSetConstIterator::node):
        (WTF::ListHashSetTranslator::hash):
        (WTF::ListHashSetTranslator::equal):
        (WTF::ListHashSetTranslator::translate):
        (WTF::::ListHashSet):
        (WTF::::operator):
        (WTF::::~ListHashSet):
        (WTF::::size):
        (WTF::::capacity):
        (WTF::::isEmpty):
        (WTF::::begin):
        (WTF::::end):
        (WTF::::find):
        (WTF::::contains):
        (WTF::::add):
        (WTF::::remove):
        (WTF::::clear):
        (WTF::::unlinkAndDelete):
        (WTF::::appendNode):
        (WTF::::deleteAllNodes):
        (WTF::::makeIterator):
        (WTF::::makeConstIterator):
        (WTF::deleteAllValues):

2007-01-30  Darin Adler  <darin@apple.com>

        * kjs/DateMath.cpp: Fix license header to reflect LGPL as the first license
        mentioned. We still mention the option of using under MPL or GPL since some
        of this code came from the Mozilla project with those license terms.

2007-01-30  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Zack.

        Turned JavaScriptCore from a separate library into an includable
        project, to combine it all into libWebKitQt.

        * JavaScriptCore.pri: Added.
        * JavaScriptCore.pro: Removed.
        * kjs/testkjs.pro:

2007-01-29  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Maciej Stachowiak.

        Fixed <rdar://problem/4485644> REGRESSION: JavaScriptCore has init routines
        
        The TCMalloc module now initializes, if needed, inside GetCache() and 
        fastMallocSetIsMultiThreaded(). We leverage the same synchronization 
        technique used for enabling / disabling the single-threaded optimization 
        to synchronize initialization of the library without requiring a lock 
        for every malloc.
        
        1,251 runs of tcmalloc_unittest, 2 runs of a custom, massively multi-threaded 
        tcmalloc_unittest, and my custom version of the PLT show no regressions.
        Super-accurate JS iBench reports a .24% regression, which is right at the
        limit of its error range, so I'm declaring victory.

        * wtf/FastMalloc.cpp:
        (WTF::fastMallocSetIsMultiThreaded): Initialize, if needed. (InitModule()
        checks the "if needed" part.)
        (WTF::TCMalloc_ThreadCache::GetCache): Restored original TCMalloc code
        inside #ifdef, for posterity. Added new initialization logic.
        (WTF::TCMalloc_ThreadCache::InitModule): Call InitTSD(), since we don't
        have a static initializer to call it for us, now. This means that fastMalloc
        is not usable as a general libc allocator, but it never was, and if it were
        the general libc allocator, we wouldn't be here in the first place, so whatever.
        (WTF::TCMalloc_ThreadCache::InitTSD): Don't try to take the pageheap_lock, 
        since InitModule already has it.

2007-01-29  Kevin McCullough  <KMcCullough@apple.com>

        Reviewed by Geoff and Oliver.

        - rdar://problem/4955561
        - missusing JavaScript shouldn't crash webkit.  Now it doesn't, in this case.

        * bindings/objc/objc_runtime.mm:
        (ObjcFallbackObjectImp::callAsFunction):
        * bindings/runtime_method.cpp:
        (RuntimeMethod::callAsFunction):
        * bindings/runtime_object.cpp:
        (RuntimeObjectImp::callAsFunction):

2007-01-28  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Maciej Stachowiak.
        
        First step in fixing <rdar://problem/4485644> REGRESSION: JavaScriptCore 
        has init routines
        
        Don't rely on a static initializer to store the main thread's ID (which
        we would use to detect allocations on secondary threads). Instead, require 
        the caller to notify fastMalloc if it might allocate on a secondary thread.
        
        Also fixed what seemed like a race condition in do_malloc.
        
        tcmalloc_unittest and my custom versions of JS iBench and PLT show no
        regressions.

        * wtf/FastMalloc.cpp:
        (WTF::fastMallocSetIsMultiThreaded): 
        (1) Renamed from "fastMallocRegisterThread", which was a misleading name because 
        not all threads need to register with fastMalloc -- only secondary threads 
        need to, and only for the purpose of disabling its single-threaded optimization. 

        (2) Use the pageheap_lock instead of a custom one, since we need to synchronize
        with the read of isMultiThreaded inside CreateCacheIfNecessary. This is a new
        requirement, now that we can't guarantee that the first call to CreateCacheIfNecessary
        will occur on the main thread at init time, before any other threads have been created.

        (WTF::TCMalloc_ThreadCache::CreateCacheIfNecessary):
        (WTF::do_malloc): Reverted WTF change only to call GetCache() if size <= kMaxSize.
        The WTF code would read phinited without holding the pageheap_lock, which
        seemed like a race condition. Regardless, calling GetCache reduces the number 
        of code paths to module initialization, which will help in writing the 
        final fix for this bug.

2007-01-28  David Kilzer  <ddkilzer@webkit.org>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=9815
          JavaScript TypeError loading Dean Edwards' JS compressor/obfuscator

        Creating a function using 'new Function()' was not setting its prototype with the
        same flags as 'function() { }'.

        Test: fast/js/function-prototype.html

        * kjs/function_object.cpp:
        (FunctionObjectImp::construct): Change flags from DontEnum|DontDelete|ReadOnly to
        Internal|DontDelete to match FuncDeclNode::processFuncDecl() and
        FuncExprNode::evaluate() in kjs/nodes.cpp.

2007-01-27  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Beth Dakin.
        
        Added some missing JSLocks, which might fix <rdar://problem/4889707>.

        We need to lock whenever we might allocate memory because our FastMalloc
        implementation requires clients to register their threads, which we do
        through JSLock. 
        
        We also need to lock whenever modifying ref-counts because they're not 
        thread-safe.

        * API/JSObjectRef.cpp:
        (JSClassCreate): Allocates memory
        (JSClassRetain): Modifies a ref-count
        (JSClassRelease): Modifies a ref-count
        (JSPropertyNameArrayRetain): Modifies a ref-count
        (JSPropertyNameArrayRelease): Modifies a ref-count
        * API/JSStringRef.cpp:
        (JSStringRetain): Modifies a ref-count
        * API/JSValueRef.cpp:
        (JSValueIsInstanceOfConstructor): Might allocate memory if an exception
        is thrown.

2007-01-27  Lars Knoll <lars@trolltech.com>

        Fix the Qt build.

        * bindings/qt/qt_instance.h:

2007-01-25  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Maciej Stachowiak.
        
        Fixed <rdar://problem/4608404> WebScriptObject's _rootObject lack 
        of ownership policy causes crashes (e.g., in Dashcode)
        
        The old model for RootObject ownership was either to (1) leak them or (2) assign
        them to a single owner -- the WebCore::Frame -- which would destroy them 
        when it believed that all of its plug-ins had unloaded.
        
        This model was broken because of (1) and also because plug-ins are not the only 
        RootObject clients. All Bindings clients are RootObjects clients, including 
        applications, which outlive any particular WebCore::Frame.
        
        The new model for RootObject ownership is to reference-count them, with a
        throw-back to the old model: The WebCore::Frame tracks the RootObjects
        it creates, and invalidates them when it believes that all of its plug-ins 
        have unloaded.
        
        We maintain this throw-back to avoid plug-in leaks, particularly from Java.
        Java is completely broken when it comes to releasing JavaScript objects. 
        Comments in our code allege that Java does not always call finalize when 
        collecting objects. Moreoever, my own testing reveals that, when Java does 
        notify JavaScript of a finalize, the data it provides is totally bogus.
        
        This setup is far from ideal, but I don't think we can do better without
        completely rewriting the bindings code, and possibly part of the Java
        plug-in / VM.
        
        Layout tests pass. No additional leaks reported. WebCore/manual-tests/*liveconnect*
        and a few LiveConnect demos on the web also run without a hitch.
        
        const RootObject* => RootObject*, since we need to ref/deref
        
        * bindings/NP_jsobject.cpp:
        (jsDeallocate): deref our RootObjects. Also unprotect or JSObject, instead
        of just relying on the RootObject to do it for us when it's invalidated.
        (_isSafeScript): Check RootObject validity.
        (_NPN_CreateScriptObject): ditto
        (_NPN_Invoke): ditto
        (_NPN_Evaluate): ditto
        (_NPN_GetProperty): ditto
        (_NPN_SetProperty): ditto
        (_NPN_RemoveProperty): ditto
        (_NPN_HasProperty): ditto
        (_NPN_HasMethod): ditto
        (_NPN_SetException): ditto

        * bindings/runtime_root.cpp: 
        Revived bit-rotted LIAR LIAR LIAR comment.
        
        LOOK: Added support for invalidating RootObjects without deleting them, 
        which is the main goal of this patch. 

        Moved protect counting into the RootObject class, to emphasize that 
        the RootObject protects the JSObject, and unprotects it upon being invalidated.
            addNativeReference => RootObject::gcProtect
            removeNativeReference => RootObject::gcUnprotect
            ProtectCountSet::contains => RootObject::gcIsProtected
            
        I know we'll all be sad to see the word "native" go.
        
        * bindings/runtime_root.h: Added ref-counting support to RootObject, with
        all the standard accoutrements.

        * bindings/c/c_utility.cpp:
        (KJS::Bindings::convertValueToNPVariant): If we can't find a valid RootObject,
        return void instead of just leaking.

        * bindings/jni/jni_instance.cpp:
        (JavaInstance::JavaInstance): Don't take a RootObject in our constructor;
        be like other Instances and require the caller to call setRootObject. This
        reduces the number of ownership code paths.
        (JavaInstance::invokeMethod): Check RootObject for validity.
        * bindings/jni/jni_instance.h: Removed private no-arg constructor. Having
        an arg constructor accomplishes the same thing.

        * bindings/jni/jni_jsobject.cpp:
        (JavaJSObject::invoke): No need to call findProtectCountSet, because finalize()
        checks for RootObject validity.
        (JavaJSObject::JavaJSObject): check RootObject for validity
        (JavaJSObject::call): ditto
        (JavaJSObject::eval): ditto
        (JavaJSObject::getMember): ditto
        (JavaJSObject::setMember): ditto
        (JavaJSObject::removeMember): ditto
        (JavaJSObject::getSlot): ditto
        (JavaJSObject::setSlot): ditto
        (JavaJSObject::toString): ditto
        (JavaJSObject::finalize): ditto
        (JavaJSObject::createNative): No need to tell the RootObject to protect 
        the global object, since the RootObject already owns the interpreter.

        * bindings/jni/jni_runtime.cpp:
        (JavaArray::JavaArray): Removed copy construcutor becaue it was unused.
        Dead code is dangerous code.

        * bindings/objc/objc_runtime.mm: Added WebUndefined protocol. Previous use
        of WebScriptObject was bogus, because WebUndefined is not a subclass of
        WebScriptObject.
        (convertValueToObjcObject): If we can't find a valid RootObject,
        return nil instead of just leaking.

        * bindings/objc/objc_utility.mm:
        (KJS::Bindings::convertValueToObjcValue): If we can't find a valid RootObject,
        return nil instead of just leaking.

2007-01-27  Andrew Wellington  <proton@wiretapped.net>

        Reviewed by Maciej.
        
        Fix for Repeated string concatenation results in OOM crash
        http://bugs.webkit.org/show_bug.cgi?id=11131

        * kjs/operations.cpp:
        (KJS::add): Throw exception if string addition result is null
        * kjs/ustring.cpp:
        (KJS::UString::UString): Don't call memcpy when malloc failed

2007-01-25  Jan Kraemer  <camel@gmx.de>

        Reviewed by Maciej

        Fix for http://bugs.webkit.org/show_bug.cgi?id=12382

        Fix crash on architectures with 32 bit ints and
        64 bit longs (For example Linux on AMD64)

        * kjs/dtoa.cpp: #define Long int as suggested in comment

2007-01-24  Geoffrey Garen  <ggaren@apple.com>

        Fixed up #include order for style. No review necessary.

        * API/JSStringRef.cpp:

2007-01-24  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Maciej Stachowiak.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
        Copy JSStringRefCF, in case anybody wants to use it. (I just added
        it recently.)

2007-01-24  Maciej Stachowiak  <mjs@apple.com>

        Not reviewed, trivial property change.
        
        * JavaScriptCore.vcproj/JavaScriptCore.sln: remove svn:mime-type
        property which made this binary.

2007-01-25  Mark Rowe  <mrowe@apple.com>

        Reviewed by Darin.

        * Info.plist: Update copyright string.

2007-01-24  Darin Adler  <darin@apple.com>

        Reviewed by Mark Rowe.

        * JavaScriptCore.xcodeproj/project.pbxproj: Changed to /usr/sbin/sysctl
        so we don't rely on people's paths.

2007-01-23  Alice Liu  <alice.liu@apple.com>

        release build fix

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
        Copy APICasts.h

2007-01-23  Geoffrey Garen  <ggaren@apple.com>

        build fix

        * API/JSStringRef.h:
        * JavaScriptCore.xcodeproj/project.pbxproj:

2007-01-24  Mark Rowe  <mrowe@apple.com>

        Build fix for DumpRenderTree.

        * JavaScriptCore.xcodeproj/project.pbxproj: Make JSStringRefCF.h public so it's copied into built framework.

2007-01-23  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Darin.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
        Copy APICasts.h

2007-01-23  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Maciej Stachowiak.
        
        Fixed <rdar://problem/4885131> Move CFString function declarations from 
        JSStringRef.h to JSStringRefCF.h
        
        Also removed remaining API FIXMEs and changed them into Radars.

        * API/JSClassRef.cpp:
        (OpaqueJSClass::OpaqueJSClass): Added Radar numbers for UTF8 conversion.

        * API/JSContextRef.cpp:
        (JSGlobalContextCreate): Replaced FIXME for NULL JSContextRef with Radar number.

        * API/JSObjectRef.h: Removed FIXME, which is unprofessional in a public header.

        * API/JSStringRef.cpp: Moved CF related implementations to JSStringRefCF.cpp.
        (JSStringCreateWithUTF8CString): Replaced FIXME with Radar number.
        * API/JSStringRef.h: Moved CF related declarations to JSStringRefCF.h. Added
        #include of JSStringRefCF.h as a stopgap until clients start #including
        it as needed by themselves.

        * API/JSStringRefCF.cpp: Added.
        (JSStringCreateWithCFString):
        (JSStringCopyCFString): Replaced JSChar cast with UniChar cast, which is 
        more appropriate for a CF call.
        * API/JSStringRefCF.h: Added.
        * JavaScriptCore.xcodeproj/project.pbxproj:

2007-01-18  Sanjay Madhav  <sanjay12@gmail.com>

        Reviewed by Darin.

        Add JavaScriptCore define to help with tracing of when objects are marked.

        * kjs/object.cpp:
        (KJS::JSObject::mark):

2007-01-18  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Zack.

        * JavaScriptCore.pro: Remove generated files on make clean.
        * pcre/pcre.pri:

2007-01-16  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Maciej.

        http://bugs.webkit.org/show_bug.cgi?id=12268
        Give object prototypes their own names

        * kjs/lookup.h: Append "Prototype" to ClassName in KJS_IMPLEMENT_PROTOTYPE.

2007-01-16  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Darin Adler.
        
        Added re-entrency checking to GC allocation and collection. It is an error
        to allocate or collect from within a collection. We've had at least one 
        case of each bug in the past.
        
        Added a comment to the API header, explaining that API clients must not
        make this mistake, either.
        
        Layout tests and JS tests pass.

        * API/JSObjectRef.h:
        * kjs/collector.cpp:
        (KJS::GCLock::GCLock):
        (KJS::GCLock::~GCLock):
        (KJS::Collector::allocate):
        (KJS::Collector::collect):

2007-01-14  Mark Rowe  <mrowe@apple.com>

        Reviewed by Mitz.

        Minor fixes to JavaScript pretty-printing.

        * JavaScriptCore.exp:
        * kjs/Parser.cpp:
        (KJS::Parser::prettyPrint): Return line number and error message if parsing fails.
        * kjs/Parser.h:
        * kjs/nodes2string.cpp:
        (ElementNode::streamTo): Include comma delimiters in array literals.
        (PropertyNameNode::streamTo): Quote property names in object literals to handle the case when the property name is not a valid identifier.
        * kjs/testkjs.cpp:
        (doIt): Print any errors encountered while pretty-printing.

2007-01-12  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Darin.

        * wtf/HashTraits.h:
        Add hash traits for unsigned long and unsigned long long.

2007-01-12  Geoffrey Garen  <ggaren@apple.com>

        RS by Brady Eidson.
        
        Rolling back in r18786 with leaks fixed, and these renames slightly reworked:

        Because they can return 0:
        rootObjectForImp => findRootObject (overloaded for JSObject* and Interpreter*)
        rootObjectForInterpreter => findRootObject (ditto)
        findReferenceSet => findProtectCountSet

2007-01-11  Geoffrey Garen  <ggaren@apple.com>

        RS by Brady Eidson.
        
        Rolling out r18786 because it caused leaks.

2007-01-11  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Anders Carlsson.

        Even more cleanup in preparation for fixing <rdar://problem/4608404> 
        WebScriptObject's _executionContext lack of ownership policy causes 
        crashes (e.g., in Dashcode)
        
        Layout tests pass.
        
        Renames:
            ReferencesSet | ProtectCounts => ProtectCountSet (because it's a typename for a set of GC protect counts)
            ReferencesByRootMap => RootObjectMap (because RootObjectToProtectCountSetMap would have been confusing)
            pv => protectedValues
            rootObjectForImp => getRootObject (overloaded for JSObject* and Interpreter*)
            rootObjectForInterpreter => getRootObject (ditto)
            findReferenceSet => getProtectCountSet
            imp => jsObject
        
        (KJS::Bindings::getRootObjectMap): Changed to take advantage of built-in
        facility for initializing static variables.

        (KJS::Bindings::getProtectCountSet):
        (KJS::Bindings::destroyProtectCountSet): Added. Helps encapsulate the fact
        that getting a ProtectCountSet entails adding a RootObject to a hash table,
        and destroying one entails the reverse.

        (KJS::Bindings::getRootObject): Removed spurious NULL check.
        
        (KJS::Bindings::findReferenceSet): Renamed. Changed to use getRootObject()
        instead of iterating on its own.

        (KJS::Bindings::addNativeReference): Changed to use an early return instead
        of indenting the whole function.
        (KJS::Bindings::removeNativeReference): Ditto.

2007-01-11  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Anders Carlsson.

        Even more cleanup in preparation for fixing <rdar://problem/4608404> 
        WebScriptObject's _executionContext lack of ownership policy causes 
        crashes (e.g., in Dashcode)
        
        Layout tests pass.
        
        Renames:
            findRootObjectForNativeHandleFunction => createRootObject
            FindRootObjectForNativeHandleFunctionPtr => CreateRootObjectFunction
            
        Also removed unnecessary use of "Bindings::" prefix.

        * JavaScriptCore.exp:
        * bindings/jni/jni_jsobject.cpp:
        (JavaJSObject::createNative):
        (JavaJSObject::convertValueToJObject):
        (JavaJSObject::convertJObjectToValue):
        * bindings/runtime_root.cpp:
        (KJS::Bindings::RootObject::setCreateRootObject):
        * bindings/runtime_root.h:
        (KJS::Bindings::RootObject::createRootObject):

2007-01-11  George Staikos  <staikos@kde.org>

        Reviewed by Maciej

        Appears to be Mac specific right now.

        * kjs/config.h:

2007-01-10  Lars Knoll <lars@trolltech.com>

        Reviewed by Zack

        Use the new functionality in Qt 4.3, to make
        the methods closer compliant with the Unicode
        spec.

        Keep the old code so that it still compiles against
        Qt 4.2.

        * wtf/unicode/qt4/UnicodeQt4.h:
        (WTF::Unicode::toLower):
        (WTF::Unicode::toUpper):
        (WTF::Unicode::toTitleCase):
        (WTF::Unicode::foldCase):
        (WTF::Unicode::isFormatChar):
        (WTF::Unicode::isPrintableChar):
        (WTF::Unicode::isSeparatorSpace):
        (WTF::Unicode::isPunct):
        (WTF::Unicode::isDigit):
        (WTF::Unicode::isLower):
        (WTF::Unicode::isUpper):
        (WTF::Unicode::digitValue):
        (WTF::Unicode::mirroredChar):
        (WTF::Unicode::combiningClass):
        (WTF::Unicode::decompositionType):
        (WTF::Unicode::umemcasecmp):
        (WTF::Unicode::direction):
        (WTF::Unicode::category):

2007-01-09  Darin Adler  <darin@apple.com>

        - update 2007 Apple copyright for the new company name

        * kjs/DateMath.cpp:

2007-01-09  Darin Adler  <darin@apple.com>

        - fix build

        * kjs/string_object.cpp: (KJS::StringProtoFunc::callAsFunction):
        Actually compile it this time.

2007-01-09  Darin Adler  <darin@apple.com>

        - fix build

        * kjs/string_object.cpp: (KJS::StringProtoFunc::callAsFunction):
        Change types.

2007-01-09  Darin Adler  <darin@apple.com>

        - fix build on platforms where Unicode::UChar is != uint16_t

        * kjs/string_object.cpp: (KJS::StringProtoFunc::callAsFunction):
        Change types.

2007-01-09  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Darin.

        - changes for http://bugs.webkit.org/show_bug.cgi?id=11078
          Forms Don't Submit (ASP Pages)

        * JavaScriptCore.exp:
        * kjs/value.cpp:
        (KJS::JSValue::toInt32): Folded toInt32Inline into this method, which was its
        only caller.
        (KJS::JSValue::toUInt32): Added a variant that reports if the conversion has
        succeeded.
        * kjs/value.h:

2007-01-09  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        - fix http://bugs.webkit.org/show_bug.cgi?id=12174
          improve Unicode use (less WTF::Unicode:: prefix, centralized character names)

        * wtf/unicode/icu/UnicodeIcu.h: Change parameter and return types
        to UChar32 and UChar. Removed unneeded type casts and added some
        const to functions that lacked it. Removed WTF::Unicode::memcmp.
        (WTF::Unicode::umemcasecmp): Renamed from strcasecmp since this
        doesn't work on 0-terminated strings as the str functions do.
        * wtf/unicode/qt4/UnicodeQt4.h: Ditto.

        - got rid of namespace prefixes from most uses of WTF::Unicode

        * kjs/function.cpp:
        (KJS::isStrWhiteSpace):
        (KJS::escapeStringForPrettyPrinting):
        * kjs/lexer.cpp:
        (KJS::Lexer::isWhiteSpace):
        (KJS::Lexer::isIdentStart):
        (KJS::Lexer::isIdentPart):
        * kjs/string_object.cpp:
        (KJS::StringProtoFunc::callAsFunction):

2007-01-07  David Kilzer  <ddkilzer@webkit.org>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=11917
          setlocale() can return null

        * kjs/date_object.cpp:
        (KJS::DateProtoFunc::callAsFunction): Removed dead code.

2007-01-07  David Carson  <dacarson@gmail.com>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=12100
          JNI bindings should be available to non-Mac platforms that have JNI

        Change JNI so that it is not wrapped in the PLATFORM(MAC) ifdef, enabling
        other platforms who have JNI to use it.

        * bindings/jni/jni_instance.h:  
          Removed unnecessary include of <CoreFoundation/CoreFoundation.h>
        * bindings/jni/jni_utility.cpp:
        (KJS::Bindings::setJavaVM):
        * bindings/jni/jni_utility.h:
          Added new method for clients to set the JavaVM
        * bindings/runtime.cpp:
        (KJS::Bindings::Instance::createBindingForLanguageInstance):
          Changed code to utilize new #if HAVE(JNI)
        * kjs/config.h:
          Added new #define for JNI, ie HAVE_JNI

2007-01-07  David Carson  <dacarson@gmail.com>

        Reviewed by Darin.

        Fix http://bugs.webkit.org/show_bug.cgi?id=11431
        ARM platform has some byte alignment issues

        Fix for NaN being 4 bytes and it must start on a byte boundary
        for ARM architectures.

        * kjs/fpconst.cpp:
        (KJS::):

2007-01-04  David Kilzer  <ddkilzer@webkit.org>

        Reviewed by Kevin McCullough.

        - fix http://bugs.webkit.org/show_bug.cgi?id=12070
          REGRESSION: KJS::getUTCOffset() caches UTC offset but ignores time zone changes

        * kjs/DateMath.cpp:
        (KJS::getUTCOffset): Don't cache UTC offset.

2007-01-02  Darin Adler  <darin@apple.com>

        - minor tweak (hope this doesn't re-break Windows)

        * pcre/pcre_compile.c: Removed use of const pcre_uchar const * -- Mitz probably
        meant const pcre_uchar *const, but I think we can do without the explicit const here.

        * pcre/pcre_internal.h: Re-enabled warning C4114.

2007-01-02  David Kilzer  <ddkilzer@webkit.org>

        Reviewed by NOBODY (Windows build fix).

        The MSVC compiler requires variables to be declared at the top of the enclosing block in C source.

        Disable this warning to prevent MSVC from complaining about the 'const pcre_uchar const *' type:
        warning C4114: same type qualifier used more than once

        * pcre/pcre_compile.c:
        (pcre_compile2): Moved variable declarations to top of their respective enclosing blocks.
        * pcre/pcre_internal.h: Added pragma to disable compiler warning.

2007-01-01  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=11849
          REGRESSION (r18182): Google Calendar is broken (a regular expression containing a null character is not parsed correctly)

        Modified pcre_compile() (and the functions that it calls) to work with patterns
        containing null characters.

        Covered by JavaScriptCore tests ecma_3/RegExp/octal-002.js and ecma_3/RegExp/regress-85721.js

        * kjs/regexp.cpp:
        (KJS::RegExp::RegExp): Changed to not null-terminate the pattern string and instead
        pass its length to pcre_compile.
        * pcre/pcre.h:
        * pcre/pcre_compile.c:
        (check_escape):
        (get_ucp):
        (is_counted_repeat):
        (check_posix_syntax):
        (compile_branch):
        (compile_regex):
        (pcre_compile): Added a parameter specifying the length of the pattern, which
        is no longer required to be null-terminated and may contain null characters. 
        (pcre_compile2):
        * pcre/pcre_internal.h:
        * tests/mozilla/expected.html: Updated for the two tests that this patch
        fixes. Also updated failing results for ecma_3/RegExp/regress-100199.js
        which were not updated after bug 6257 was fixed.

2007-01-01  David Kilzer  <ddkilzer@webkit.org>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=12057
          REGRESSION: JavaScript Date Is One Day In The Future in GMT time zone

        Because Mac OS X returns geographically and historically accurate time zone information,
        converting Jan 02, 1970 12:00:00 AM to local time then subtracting 24 hours did not work
        in GMT (London - England) since it was in BST (+0100) all year in 1970[1].  Instead, the
        UTC offset is calculated by converting Jan 01, 2000 12:00:00 AM to local time then
        subtracting that from the same date in UTC.

        [1] http://en.wikipedia.org/wiki/British_Summer_Time

        * kjs/DateMath.cpp:
        (KJS::getUTCOffset): Updated UTC offset calculation.
        (KJS::getDSTOffset): Improved comment.

2006-12-31  David Kilzer  <ddkilzer@webkit.org>

        Reviewed by Geoff.

        Update embedded pcre library from version 6.2 to 6.4.  Changes from pcre 6.2 to 6.3
        did not include any files in JavaScriptCore/pcre.

        All changes include renaming EXPORT to PCRE_EXPORT, renaming of ucp_findchar() to
        _pcre_ucp_findchar(), or comment changes.  Additional changes noted below.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Updated source file list.
        * JavaScriptCore.xcodeproj/project.pbxproj: Renamed pcre_printint.c to pcre_printint.src
        and changed it from a source file to a header file.
        * JavaScriptCoreSources.bkl: Updated source file list.
        * pcre/CMakeLists.txt: Updated source file list.
        * pcre/pcre-config.h:
        * pcre/pcre.h: Updated version.
        * pcre/pcre.pri: Updated source file list.
        * pcre/pcre_compile.c: Include pcre_printint.src #if DEBUG.
        (pcre_compile2):
        * pcre/pcre_config.c:
        * pcre/pcre_exec.c:
        (match):
        * pcre/pcre_fullinfo.c:
        * pcre/pcre_info.c:
        * pcre/pcre_internal.h: Added header guard.  Removed export of _pcre_printint().
        * pcre/pcre_ord2utf8.c:
        * pcre/pcre_printint.c: Renamed to pcre_printint.src.
        * pcre/pcre_printint.src: Added.  Renamed _pcre_printint() to pcre_printint().
        * pcre/pcre_refcount.c:
        * pcre/pcre_study.c:
        * pcre/pcre_tables.c:
        * pcre/pcre_try_flipped.c:
        * pcre/pcre_ucp_findchar.c: Added contents of ucp_findchar.c.
        * pcre/pcre_version.c:
        * pcre/pcre_xclass.c:
        (_pcre_xclass):
        * pcre/ucp.h: Removed export of ucp_findchar().
        * pcre/ucp_findchar.c: Removed.  Contents moved to pcre_ucp_findchar.c.

2006-12-29  David Kilzer  <ddkilzer@webkit.org>

        Reviewed by Geoff.

        Update embedded pcre library from version 6.1 to 6.2.  From the pcre ChangeLog:

        3. Added "b" to the 2nd argument of fopen() in dftables.c, for non-Unix-like
           operating environments where this matters.

        5. Named capturing subpatterns were not being correctly counted when a pattern
           was compiled. This caused two problems: (a) If there were more than 100
           such subpatterns, the calculation of the memory needed for the whole
           compiled pattern went wrong, leading to an overflow error. (b) Numerical
           back references of the form \12, where the number was greater than 9, were
           not recognized as back references, even though there were sufficient
           previous subpatterns.

        * pcre/dftables.c: Item 3.
        (main):
        * pcre/pcre.h: Updated version.
        * pcre/pcre_compile.c: Item 5.
        (read_repeat_counts):
        (pcre_compile2):

2006-12-29  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Brian Dash... err... Mark Rowe.

        More cleanup in preparation for fixing <rdar://problem/4608404> 
        WebScriptObject's _executionContext lack of ownership policy causes 
        crashes (e.g., in Dashcode)
        
        The key change here is to RootObject::RootObject().
        
        * JavaScriptCore.exp:

        * bindings/c/c_utility.cpp:
        (KJS::Bindings::convertValueToNPVariant): Changed to use new constructor.

        * bindings/jni/jni_jsobject.cpp:
        (JavaJSObject::createNative): Changed to use new constructor. Replaced
        large 'if' followed by default condition with "if !" and explicit default
        condition.

        * bindings/objc/objc_runtime.mm:
        (convertValueToObjcObject): Changed to use new constructor.

        * bindings/runtime_root.cpp:
        (KJS::Bindings::RootObject::destroy): "removeAllNativeReferences" => "destroy"
        because this function actually destroys the RootObject.

        * bindings/runtime_root.h: Changed Interpreter* to RefPtr<Interpreter>
        to prevent a RootObject from holding a stale Interperter*.
        
        (KJS::Bindings::RootObject::RootObject): Changed constructor to take an 
        Interpreter*, since it's pointless to create a RootObject without one.
        Removed setRootObjectImp() and rootObjectImp() because they were just
        a confusing way of setting and getting the Interpreter's global object.

        (KJS::Bindings::RootObject::nativeHandle): "_nativeHandle" => "m_nativeHandle"
        (KJS::Bindings::RootObject::interpreter): "_interpreter" => "m_interpreter"

2006-12-28  George Staikos  <staikos@kde.org>

        Reviewed by Olliej.

        * bindings/qt/qt_instance.cpp: build
        (KJS::Bindings::QtInstance::QtInstance):

2006-12-28  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Oliver Hunt.
        
        More cleanup. Layout tests pass.
        
        Use a helper function to initialize and access WebUndefined and WebScriptObject.

        * bindings/objc/objc_runtime.h:
        * bindings/objc/objc_runtime.mm:
        (KJS::Bindings::webScriptObjectClass):
        (KJS::Bindings::webUndefinedClass):
        (convertValueToObjcObject):
        * bindings/objc/objc_utility.mm:
        (KJS::Bindings::convertValueToObjcValue):
        (KJS::Bindings::convertObjcValueToValue):

2006-12-28  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Brady Eidson.
        
        Some cleanup in preparation for fixing <rdar://problem/4608404> 
        WebScriptObject's _executionContext lack of ownership policy causes 
        crashes (e.g., in Dashcode)
        
        I'm just trying to make heads or tails of this baffling code.
        
        Renamed "root" | "execContext" | "executionContext" => "rootObject", because
        that's the object's (admittedly vague) type name.
        
        * bindings/runtime.cpp: Removed createLanguageInstanceForValue
        because I'll give you a dollar if you can explain to me what it actually did.
        
        * bindings/runtime_root.cpp: Put everything in the KJS::Bindings namespace,
        removing the KJS::Bindings prefix from individual functions and datatypes.
        This matches the header and eliminates a lot of syntax cruft.
        
        * bindings/c/c_utility.cpp:
        (KJS::Bindings::convertValueToNPVariant): Replaced use of createLanguageInstanceForValue
        with call to _NPN_CreateScriptObject because that's what createLanguageInstanceForValue
        actually did (but don't ask me for that dollar now; that's cheating.)

        * bindings/objc/objc_utility.h:
        * bindings/objc/objc_utility.mm:
        (KJS::Bindings::convertValueToObjcValue): Removed. Its only purpose was 
        to call a single function for WebKit, which WebKit can do on its own.

        * kjs/interpreter.h: Removed rtti() because it was unused, and this class
        is scheduled for demolition anyway.
        
        * kjs/interpreter.cpp: Removed createLanguageInstanceForValue because it had
        nothing to do with the Interpreter, and nothing makes Chuck Norris more mad
        than a function whose sole purpose is to call another function of the same
        name. (Really, I asked him.)

2006-12-26  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Eric Seidel.

        Some cleanup in preparation for fixing <rdar://problem/4740328> Safari 
        crash on quit in _NPN_ReleaseObject from KJS::Bindings::CInstance::~CInstance

        * bindings/c/c_instance.cpp:
        * bindings/c/c_instance.h: Removed unused copy constructor and assignment
        operator. They made tracking data flow more difficult. Unused code is also 
        dangerous because it can succumb to bit rot with the stealth of a Ninja.
        
        Replaced #include with forward declaration to reduce header dependency.
        
        * bindings/npruntime.cpp: Sorted #includes.
        (_NPN_GetStringIdentifier): Replaced assert with ASSERT.
        (_NPN_GetStringIdentifiers): ditto
        (_NPN_ReleaseVariantValue): ditto
        (_NPN_CreateObject): ditto
        (_NPN_RetainObject): ditto
        (_NPN_ReleaseObject): ditto
        (_NPN_DeallocateObject): ditto

2006-12-20  Anders Carlsson  <acarlsson@apple.com>

        * kjs/string_object.cpp:
        (localeCompare):
        Another speculative Win32 fix.

2006-12-20  Anders Carlsson  <acarlsson@apple.com>

        * kjs/string_object.cpp:
        (localeCompare):
        Speculative Win32 fix.

2006-12-20  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Darin.

        <rdar://problem/4235733>
        <http://bugs.webkit.org/?show_bug.cgi?id=10193>
        support String.localeCompare.
        
        Implement localeCompare.
        
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * kjs/string_object.cpp:
        (localeCompare):
        (StringProtoFunc::callAsFunction):
        * kjs/string_object.h:
        (KJS::StringProtoFunc::):

2006-12-20  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Mark Rowe.

        * JavaScriptCore.xcodeproj/project.pbxproj: use GCC 4.0 for all the other test targets

2006-12-20  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Mark Rowe.

        <rdar://problem/4871613> JavaScriptCore-421.31's dftables target needs to override default compiler and use gcc-4.0

        * JavaScriptCore.xcodeproj/project.pbxproj:

2006-12-20  Lars Knoll <lars@trolltech.com>

        Reviewed by David Hyatt

        Added support to bind QObject's to 
        JavaScript.

        * JavaScriptCore.pro:
        * bindings/qt/qt_class.cpp: Added.
        (KJS::Bindings::QtClass::QtClass):
        (KJS::Bindings::QtClass::~QtClass):
        (KJS::Bindings::QtClass::classForObject):
        (KJS::Bindings::QtClass::name):
        (KJS::Bindings::QtClass::methodsNamed):
        (KJS::Bindings::QtClass::fieldNamed):
        * bindings/qt/qt_class.h: Added.
        (KJS::Bindings::QtClass::constructorAt):
        (KJS::Bindings::QtClass::numConstructors):
        * bindings/qt/qt_instance.cpp: Added.
        (KJS::Bindings::QtInstance::QtInstance):
        (KJS::Bindings::QtInstance::~QtInstance):
        (KJS::Bindings::QtInstance::operator=):
        (KJS::Bindings::QtInstance::getClass):
        (KJS::Bindings::QtInstance::begin):
        (KJS::Bindings::QtInstance::end):
        (KJS::Bindings::QtInstance::implementsCall):
        (KJS::Bindings::QtInstance::invokeMethod):
        (KJS::Bindings::QtInstance::invokeDefaultMethod):
        (KJS::Bindings::QtInstance::defaultValue):
        (KJS::Bindings::QtInstance::stringValue):
        (KJS::Bindings::QtInstance::numberValue):
        (KJS::Bindings::QtInstance::booleanValue):
        (KJS::Bindings::QtInstance::valueOf):
        * bindings/qt/qt_instance.h: Added.
        (KJS::Bindings::QtInstance::getObject):
        * bindings/qt/qt_runtime.cpp: Added.
        (KJS::Bindings::convertValueToQVariant):
        (KJS::Bindings::convertQVariantToValue):
        (KJS::Bindings::QtField::name):
        (KJS::Bindings::QtField::valueFromInstance):
        (KJS::Bindings::QtField::setValueToInstance):
        * bindings/qt/qt_runtime.h: Added.
        (KJS::Bindings::QtField::QtField):
        (KJS::Bindings::QtField::type):
        (KJS::Bindings::QtMethod::QtMethod):
        (KJS::Bindings::QtMethod::name):
        (KJS::Bindings::QtMethod::numParameters):
        * bindings/runtime.cpp:
        (KJS::Bindings::Instance::createBindingForLanguageInstance):
        * bindings/runtime.h:
        (KJS::Bindings::Instance::):
        * bindings/testbindings.pro: Added.
        * bindings/testqtbindings.cpp: Added.
        (MyObject::MyObject):
        (MyObject::setTestString):
        (MyObject::setTestInt):
        (MyObject::testString):
        (MyObject::testInt):
        (MyObject::foo):
        (Global::className):
        (main):

2006-12-19  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Geoff.

        Add -p option to testkjs which pretty prints the files instead of executing them.

        * JavaScriptCore.exp:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * kjs/Parser.cpp:
        (KJS::Parser::prettyPrint):
        * kjs/Parser.h:
        * kjs/testkjs.cpp:
        (doIt):

2006-12-19  Brady Eidson  <beidson@apple.com>

        Rubberstamped by Lou
        
        Removed unneccessary "else"

        * wtf/Assertions.cpp:

2006-12-19  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Darin.

        <rdar://problem/4891774> Local WebCore/WebBrowser builds fail in 9A328 due to warning about ObjC-2.0 language features

        * JavaScriptCore.xcodeproj/project.pbxproj:

2006-12-17  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Zack.

        * kjs/testkjs.pro: Oops, make it also build on machines other than
        mine :)

2006-12-17  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Rob Buis.

        * kjs/testkjs.pro: Added .pro file to build testkjs.

2006-12-16  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Rob.

        A deleted object was accessed to prepare RegExp construction error messages.

        * kjs/regexp_object.cpp:
        (RegExpObjectImp::construct): Wrap the RegExp into an OwnPtr.

2006-12-16  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Alexey.

        - fix http://bugs.webkit.org/show_bug.cgi?id=11814
          REGRESSION(r18098): Find does not work with capital letters

        Test: editing/execCommand/findString-3.html

        * wtf/unicode/icu/UnicodeIcu.h:
        (WTF::Unicode::foldCase): Changed to not return an error if the result fits
        in the buffer without a null terminator.

2006-12-13  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Anders.
        
        - added equality and inequality operations for HashMap and Vector, useful for comparing more complex types

        * wtf/HashMap.h:
        (WTF::operator==):
        (WTF::operator!=):
        * wtf/Vector.h:
        (WTF::operator==):
        (WTF::operator!=):

2006-12-12  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Geoff. Based on a patch by Maks Orlovich.

        http://bugs.webkit.org/show_bug.cgi?id=6257
        Throw errors on invalid expressions (KJS merge)

        * kjs/regexp.cpp:
        (KJS::RegExp::RegExp):
        (KJS::RegExp::~RegExp):
        (KJS::RegExp::match):
        * kjs/regexp.h:
        (KJS::RegExp::flags):
        (KJS::RegExp::isValid):
        (KJS::RegExp::errorMessage):
        (KJS::RegExp::subPatterns):
        Remember and report RegExp construction failures. Renamed data members not to start with underscores.

        * kjs/regexp_object.cpp:
        (RegExpObjectImp::construct): Raise an exception if RegExp construction fails.
        (RegExpObjectImp::callAsFunction): Removed an obsolete comment.

        * tests/mozilla/ecma_3/RegExp/regress-119909.js: Reduced the number of nested parentheses to 
        a value supported by PCRE.

2006-12-11  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=9673
        Add support for window.atob() and window.btoa()

        * JavaScriptCore.exp: Export UString::is8Bit().
        * JavaScriptCore.xcodeproj/project.pbxproj: Added StringExtras.h as 
        a private header.

2006-12-11  Darin Adler  <darin@apple.com>

        Reviewed by Brady.

        * JavaScriptCore.xcodeproj/project.pbxproj: Let Xcode update this
        (I think Hyatt is using an old Xcode).

2006-12-11  David Hyatt  <hyatt@apple.com>

        Fix the failing layout test.  Just remove Unicode::isSpace and
        revert StringImpl to do the same thing it was doing before.

        Reviewed by darin

        * wtf/unicode/icu/UnicodeIcu.h:
        * wtf/unicode/qt4/UnicodeQt4.h:

2006-12-09  George Staikos  <staikos@kde.org>

        Reviewed by Zack.

        Fix bison again on qmake build.

        * JavaScriptCore.pro:

2006-12-09  Lars Knoll <lars@trolltech.com>

        Reviewed by Zack

        Make it possible to build WebKit with qmake.

        * JavaScriptCore.pro: Added.
        * kjs/kjs.pro: Removed.
        * pcre/pcre.pri: Added.

2006-12-09  Zack Rusin  <zack@kde.org>

        Fixing the compilation with platform kde after the icu changes.

        * CMakeLists.txt:

2006-12-09  Adam Roben  <aroben@apple.com>

        Reviewed by Darin.

        Some updates in reaction to r18098.

        * wtf/unicode/icu/UnicodeIcu.h: Use !! to convert UBool to bool in all
        cases.
        (WTF::Unicode::toLower):
        (WTF::Unicode::toUpper):
        (WTF::Unicode::isDigit):
        (WTF::Unicode::isSpace):
        (WTF::Unicode::isPunct):
        (WTF::Unicode::isLower):
        (WTF::Unicode::isUpper):
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
        * JavaScriptCore.vcproj/WTF/WTF.vcproj:

2006-12-09  George Staikos  <staikos@kde.org>

        Patch by Lars Knoll, comment out ICU dependency on Qt platform (unused code).

        Reviewed by Darin.

        * bindings/c/c_utility.cpp:
        (KJS::Bindings::convertUTF8ToUTF16):

2006-12-08  David Hyatt  <hyatt@apple.com>

        Land the new ICU abstraction layer.  Patch by Lars.

        Reviewed by me

        * JavaScriptCore.xcodeproj/project.pbxproj:
        * wtf/Platform.h:
        * wtf/unicode/UnicodeCategory.h: Removed.
        * wtf/unicode/UnicodeDecomposition.h: Removed.
        * wtf/unicode/UnicodeDirection.h: Removed.
        * wtf/unicode/icu/UnicodeIcu.h:
        (WTF::Unicode::):
        (WTF::Unicode::foldCase):
        (WTF::Unicode::toLower):
        (WTF::Unicode::toUpper):
        (WTF::Unicode::toTitleCase):
        (WTF::Unicode::isDigit):
        (WTF::Unicode::isSpace):
        (WTF::Unicode::isPunct):
        (WTF::Unicode::mirroredChar):
        (WTF::Unicode::category):
        (WTF::Unicode::direction):
        (WTF::Unicode::isLower):
        (WTF::Unicode::isUpper):
        (WTF::Unicode::digitValue):
        (WTF::Unicode::combiningClass):
        (WTF::Unicode::decompositionType):
        (WTF::Unicode::strcasecmp):
        (WTF::Unicode::memset):
        * wtf/unicode/qt4/UnicodeQt4.cpp: Removed.
        * wtf/unicode/qt4/UnicodeQt4.h:
        (WTF::Unicode::):
        (WTF::Unicode::toLower):
        (WTF::Unicode::toUpper):
        (WTF::Unicode::toTitleCase):
        (WTF::Unicode::foldCase):
        (WTF::Unicode::isPrintableChar):
        (WTF::Unicode::isLower):
        (WTF::Unicode::isUpper):
        (WTF::Unicode::digitValue):
        (WTF::Unicode::combiningClass):
        (WTF::Unicode::decompositionType):
        (WTF::Unicode::strcasecmp):
        (WTF::Unicode::memset):
        (WTF::Unicode::direction):
        (WTF::Unicode::category):

=== Safari-521.32 ===

2006-12-08  Adam Roben  <aroben@apple.com>

        Reviewed by Anders.

        This is a mo' better fix for ensuring we don't use macro definitions
        of min/max.

        * kjs/config.h:
        * wtf/Vector.h:

2006-12-07  Kevin Fyure  <digdog@macports.org>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=11545
        Disable the testcases do not follow the ECMA-262v3 specification.
        
        * tests/mozilla/expected.html: Update Results.
        * tests/mozilla/js1_2/String/concat.js:
        4 tests disabled. The result of concat Array object is not followinig
        ECMA 15.5.4.6
        * tests/mozilla/js1_2/function/Number.js:
        1 test disabled. The result of Array object to Number object conversion 
        is not following ECMA 9.3. And the test was duplicated in 
        ecma/TypeConversion/9.3-1.js
        * tests/mozilla/js1_2/function/String.js:
        2 tests disabled. The result of Object/Array object to String object 
        conversion is not following ECMA 15.5.1.1 and ECMA 9.8

2006-11-30  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Oliver.
        
        Move WTF from JavaScriptCore project into a new WTF project.

        * JavaScriptCore.vcproj/JavaScriptCore.sln: Add WTF.vcproj to sln
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Remove WTF source files
        * JavaScriptCore.vcproj/WTF/WTF.vcproj: Added.
        * JavaScriptCore.vcproj/testkjs/testkjs.vcproj: Add dependency on WTF.lib

2006-11-30  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Beth Dakin.
        
        Fixed up garbage collection at window close time.

        * kjs/interpreter.cpp:
        (KJS::Interpreter::~Interpreter): Garbage collect here, since
        destroying the interpreter frees the global object and 
        therefore creates a lot of garbage.

2006-11-20  W. Andy Carrel  <wac@google.com>

        Reviewed by Maciej.

        http://bugs.webkit.org/show_bug.cgi?id=11501
        REGRESSION: \u no longer escapes metacharacters in RegExps
        http://bugs.webkit.org/show_bug.cgi?id=11502
        Serializing RegExps doesn't preserve Unicode escapes

        * kjs/lexer.cpp:
        (Lexer::Lexer):
        (Lexer::setCode):
        (Lexer::shift):
        (Lexer::scanRegExp):
        Push \u parsing back down into the RegExp object rather than in the
        parser. This backs out r17354 in favor of a new fix that better 
        matches the behavior of other browsers.

        * kjs/lexer.h:
        * kjs/regexp.cpp:
        (KJS::RegExp::RegExp):
        (KJS::sanitizePattern):
        (KJS::isHexDigit):
        (KJS::convertHex):
        (KJS::convertUnicode):
        * kjs/regexp.h:
        Translate \u escaped unicode characters for the benefit of pcre.

        * kjs/ustring.cpp:
        (KJS::UString::append):
        Fix failure to increment length on the first UChar appended to a 
        UString that was copy-on-write.

        * tests/mozilla/ecma_2/RegExp/properties-001.js:
        Adjust tests back to the uniform standards.

2006-11-20  Samuel Weinig  <sam@webkit.org>

        Reviewed by Maciej.

        Fix for http://bugs.webkit.org/show_bug.cgi?id=11647
        Fix Win32 build

        * kjs/config.h: define NOMINMAX instead of min/max
        as themselves.
        * wtf/Vector.h: put back hack to ensure that min/max
        are not defined as macros.

2006-11-19  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Zack.

        http://bugs.webkit.org/show_bug.cgi?id=11649
        Fix CMake Qt-only build without KDE CMake files

        * CMakeLists.txt:
        * pcre/CMakeLists.txt:

2006-11-17  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Adam.

        Make sure that we always use std::min and std::max instead of macros.
        
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
        * kjs/config.h:
        * wtf/Vector.h:

=== Safari-521.31 ===

2006-11-12  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Beth Dakin.
        
        Added project-wide setting to disable Microsoft's made-up deprecation 
        warnings related to std:: functions. (Doesn't have any affect yet,
        since we currently disable all deprecation warnings.)

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:

2006-11-12  Mark Rowe  <bdash@webkit.org>

        Reviewed by Mitz.

        Clean up of JavaScriptCore bakefiles.

        * JavaScriptCoreSources.bkl:
        * jscore.bkl:

2006-11-11  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Maciej.

        http://bugs.webkit.org/show_bug.cgi?id=11508
        Undisable some warnings for JSImmediate.h

        Fix suggested by Don Gibson.

        * kjs/JSImmediate.h:
        Re-enable all MSVC warnings, move the remaining runtime checks
        to compile-time.

2006-11-10  Zalan Bujtas  <zalan.bujtas@nokia.com>

        Reviewed by Maciej.

        Added s60/symbian platform defines.
        http://bugs.webkit.org/show_bug.cgi?id=11540

        * wtf/Platform.h:

=== Safari-521.30 ===

2006-11-08  Ada Chan  <adachan@apple.com>

        Reviewed by darin.
        
        Added a method to delete all the keys in a HashMap.

        * wtf/HashMap.h:
        (WTF::deleteAllPairFirsts):
        (WTF::deleteAllKeys):

2006-11-07  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Geoff.

        * API/JSClassRef.cpp:
        (OpaqueJSClass::OpaqueJSClass):
        Initialize cachedPrototype to 0.

2006-11-06  Krzysztof Kowalczyk  <kkowalczyk@gmail.com>

        Reviewed by Maciej.

        Remove warning about garbage after #else. #else clause applies for all
        non-mac platforms, not only win.

        * kjs/date_object.cpp:

2006-11-06  Mark Rowe  <bdash@webkit.org>

        Reviewed by the wonderful Mitz Pettel.

        http://bugs.webkit.org/show_bug.cgi?id=11524
        Bug 11524: REGRESSION(r9842): Array.prototype.join should use ToString operator rather than calling toString on each element

        * kjs/array_object.cpp:
        (ArrayProtoFunc::callAsFunction): Use ToString operator on each element rather than calling their toString method.

2006-11-03  Steve Falkenburg  <sfalken@apple.com>

        Fix build

        * kjs/JSImmediate.h:

2006-11-03  Alexey Proskuryakov  <ap@nypop.com>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=11504
        Fix warnings on non 32 bit platforms

        * kjs/JSImmediate.h:
        (KJS::JSImmediate::NanAsBits):
        (KJS::JSImmediate::oneAsBits):
        Rewrite in a way that moves runtime checks to compile-time.

        (KJS::):
        (KJS::JSImmediate::fromDouble):
        (KJS::JSImmediate::toDouble):

2006-11-02  George Staikos <staikos@kde.org>

        Reviewed by Maciej.

        * collector.cpp:
        Remove a deprecated pthreads call.

2006-11-02  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Maciej, landed by Anders.

        * CMakeLists.txt:
        Make KDE support optional.

2006-11-01  Kevin McCullough  <KMcCullough@apple.com>

        Reviewed by Brady.

        - 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.

        * kjs/DateMath.cpp:
        (KJS::equivalentYearForDST):
        (KJS::getDSTOffsetSimple):
        (KJS::getDSTOffset):

2006-10-31  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Beth.
        
        Fixed http://bugs.webkit.org/show_bug.cgi?id=11477
        REGRESSION: GMail crashes in KJS::FunctionImp::callerGetter

        * kjs/function.cpp:
        (KJS::FunctionImp::argumentsGetter): Removed unnecessary braces.
        (KJS::FunctionImp::callerGetter): More logical NULL checking.

2006-10-31  Oliver Hunt  <oliver@apple.com>

        Reviewed by Geoff.

        Adding definition for PLATFORM(CI)

        * wtf/Platform.h:

2006-10-31  Vladimir Olexa  <vladimir.olexa@gmail.com>

        Reviewed by Geoff.

        http://bugs.webkit.org/show_bug.cgi?id=4166
        Function object does not support caller property

        Test: fast/js/caller-property.html

        * kjs/function.cpp: 
        (KJS::FunctionImp::callerGetter): added
        (KJS::FunctionImp::getOwnPropertySlot): added if statement to handle callerGetter()
        * kjs/function.h: added callerGetter() declaration
        * kjs/identifier.h: added caller property macro
        * tests/mozilla/expected.html: 

2006-10-30  Kevin McCullough  <KMcCullough@apple.com>

        Reviewed by Adam.

        - Fix some timezone issues and JavaScriptCore date tests.  Addresses bugzilla 4930.

        * kjs/DateMath.h:
        (KJS::GregorianDateTime::GregorianDateTime): Here's the fix, to add parenthesis for order of precedence.
        * kjs/date_object.cpp:
        (KJS::DateProtoFunc::callAsFunction): 
        (KJS::DateObjectImp::construct): memset not needed as GregorianDateTime initializes itself.

2006-10-30  Darin Adler  <darin@apple.com>

        Reviewed by John Sullivan.

        * kjs/SavedBuiltins.h: Added needed include.
        * wtf/OwnPtr.h: (WTF::OwnPtr::set): Fixed mistake in assertion.

2006-10-28  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        - renamed PassRefPtr::release to releaseRef to make it clearer that
          it's the counterpart of adoptRef, and to make it harder to confuse
          it with the safer-to-use RefPtr::release

        * kjs/identifier.cpp:
        (KJS::CStringTranslator::translate):
        (KJS::UCharBufferTranslator::translate):
        * kjs/ustring.cpp:
        (KJS::UString::Rep::create):
        * wtf/PassRefPtr.h:
        (WTF::PassRefPtr::PassRefPtr):
        (WTF::PassRefPtr::~PassRefPtr):
        (WTF::PassRefPtr::get):
        (WTF::PassRefPtr::releaseRef):
        (WTF::PassRefPtr::operator->):
        (WTF::PassRefPtr::operator=):
        (WTF::adoptRef):
        (WTF::static_pointer_cast):
        (WTF::const_pointer_cast):
        * wtf/RefPtr.h:
        (WTF::RefPtr::RefPtr):
        (WTF::RefPtr::operator=):

2006-10-28  Darin Adler  <darin@apple.com>

        Reviewed by Steve.

        * kjs/grammar.y: Add definitions of YYMALLOC and YYFREE to fix
        a warning some people see (not sure why others don't see it).

        * JavaScriptCore.vcproj/JavaScriptCore/grammarWrapper.cpp: Touch
        this file to force it to re-build grammar.cpp.

2006-10-28  Darin Adler  <darin@apple.com>

        Reviewed by Geoff.

        - made changes so the code compiles with the highest warning level
          under MSVC (disabling some warnings, making some code fixes)

        * API/JSCallbackConstructor.cpp:
        (KJS::JSCallbackConstructor::construct):
        * API/JSCallbackFunction.cpp:
        (KJS::JSCallbackFunction::callAsFunction):
        * API/JSCallbackObject.cpp:
        (KJS::JSCallbackObject::init):
        (KJS::JSCallbackObject::construct):
        (KJS::JSCallbackObject::callAsFunction):
        * API/JSObjectRef.cpp:
        (JSPropertyNameArrayGetNameAtIndex):
        * API/JSStringRef.cpp:
        (JSStringCreateWithCharacters):
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
        * bindings/c/c_utility.cpp:
        (KJS::Bindings::convertUTF8ToUTF16):
        (KJS::Bindings::coerceValueToNPVariantStringType):
        (KJS::Bindings::convertValueToNPVariant):
        * kjs/DateMath.h:
        (KJS::GregorianDateTime::GregorianDateTime):
        * kjs/ExecState.h:
        (KJS::ExecState::hadException):
        * kjs/JSImmediate.h:
        (KJS::JSImmediate::fromDouble):
        (KJS::JSImmediate::toDouble):
        (KJS::JSImmediate::NanAsBits):
        (KJS::JSImmediate::oneAsBits):
        * kjs/Parser.h:
        * kjs/PropertyNameArray.h:
        (KJS::PropertyNameArray::size):
        * kjs/array_object.cpp:
        (ArrayObjectImp::callAsFunction):
        * kjs/bool_object.cpp:
        (BooleanObjectImp::callAsFunction):
        * kjs/collector.cpp:
        (KJS::Collector::allocate):
        (KJS::Collector::markCurrentThreadConservatively):
        (KJS::Collector::collect):
        * kjs/completion.h:
        (KJS::Completion::isValueCompletion):
        * kjs/date_object.cpp:
        (KJS::findMonth):
        * kjs/debugger.cpp:
        (Debugger::sourceParsed):
        (Debugger::sourceUnused):
        (Debugger::exception):
        (Debugger::atStatement):
        (Debugger::callEvent):
        (Debugger::returnEvent):
        * kjs/dtoa.cpp:
        * kjs/error_object.cpp:
        (ErrorObjectImp::callAsFunction):
        (NativeErrorImp::callAsFunction):
        * kjs/function.cpp:
        (KJS::FunctionImp::processVarDecls):
        (KJS::GlobalFuncImp::callAsFunction):
        * kjs/function_object.cpp:
        (FunctionPrototype::callAsFunction):
        * kjs/grammar.y:
        * kjs/identifier.cpp:
        (KJS::CStringTranslator::translate):
        (KJS::Identifier::add):
        * kjs/internal.h:
        * kjs/lexer.cpp:
        (Lexer::lex):
        (Lexer::isIdentStart):
        (Lexer::isIdentPart):
        (isDecimalDigit):
        (Lexer::isHexDigit):
        (Lexer::isOctalDigit):
        (Lexer::matchPunctuator):
        (Lexer::singleEscape):
        (Lexer::convertOctal):
        (Lexer::convertHex):
        (Lexer::convertUnicode):
        (Lexer::record8):
        * kjs/lexer.h:
        * kjs/math_object.cpp:
        (MathFuncImp::callAsFunction):
        * kjs/number_object.cpp:
        (integer_part_noexp):
        (intPow10):
        (NumberProtoFunc::callAsFunction):
        (NumberObjectImp::callAsFunction):
        * kjs/object.cpp:
        (KJS::JSObject::deleteProperty):
        (KJS::JSObject::callAsFunction):
        (KJS::JSObject::toBoolean):
        (KJS::JSObject::toObject):
        * kjs/object.h:
        (KJS::JSObject::getPropertySlot):
        * kjs/property_map.cpp:
        (KJS::isValid):
        (KJS::PropertyMap::put):
        (KJS::PropertyMap::insert):
        (KJS::PropertyMap::containsGettersOrSetters):
        * kjs/property_map.h:
        (KJS::PropertyMap::hasGetterSetterProperties):
        * kjs/property_slot.h:
        * kjs/string_object.cpp:
        (StringInstance::getPropertyNames):
        (StringObjectImp::callAsFunction):
        (StringObjectFuncImp::callAsFunction):
        * kjs/ustring.cpp:
        (KJS::UString::Rep::computeHash):
        (KJS::UString::UString):
        (KJS::UString::from):
        (KJS::UString::append):
        (KJS::UString::ascii):
        (KJS::UString::operator=):
        (KJS::UString::find):
        (KJS::UString::rfind):
        * kjs/ustring.h:
        (KJS::UChar::high):
        (KJS::UChar::low):
        (KJS::UCharReference::low):
        (KJS::UCharReference::high):
        * kjs/value.cpp:
        (KJS::JSValue::toUInt16):
        * kjs/value.h:
        * pcre/pcre_compile.c:
        (get_othercase_range):
        * pcre/pcre_exec.c:
        (match):
        * pcre/pcre_internal.h:
        * wtf/HashFunctions.h:
        (WTF::intHash):
        (WTF::PtrHash::hash):
        * wtf/MathExtras.h:
        (isnan):
        (lround):
        (lroundf):
        * wtf/StringExtras.h:
        (strncasecmp):
        * wtf/unicode/icu/UnicodeIcu.h:
        (WTF::Unicode::isPrintableChar):

2006-10-26  W. Andy Carrel  <wac@google.com>

        Reviewed by Maciej.

        - Fix http://bugs.webkit.org/show_bug.cgi?id=7445 /
          <rdar://problem/4614195> (and 7253 / <rdar://4694011>) by changing
          inline regexps so that they can have \u escaped Unicode sequences and
          still work properly.

        * kjs/lexer.cpp:
        (Lexer::Lexer): 
        (Lexer::setCode):
        (Lexer::shift): Looking ahead one additional character for the benefit
        of scanRegExp
        (Lexer::scanRegExp): Change code to support unicode escapes in inline 
        regexps.
        * kjs/lexer.h: Extra lookahead added.

=== Safari-521.29 ===

2006-10-26  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Darin.

        Fix build with older gcc 3.3.4.

        * kjs/DateMath.cpp: Remove inline prefix.
        (KJS::equivalentYearForDST):

2006-10-26  Darin Adler  <darin@apple.com>

        Reviewed by John.

        - fix iteration of properties of string objects (found because of a warning
          emitted by the MSVC compiler)

        * kjs/string_object.cpp: (StringInstance::getPropertyNames): Change code that
        wants to format a number as a string to use UString::from. Before it was using
        the UString constructor that makes a string from a character!

        * kjs/ustring.h:
        * kjs/ustring.cpp: Remove the dangerous and not all that helpful UString(char)
        constructor.

        * kjs/grammar.y: Change code to not depend on the UString(char) constructor.
        This is potentially more efficient anyway because we could overload the + operator
        some day to handle char* directly instead of creating a UString.

        * kjs/nodes2string.cpp: (SourceStream::operator<<): Change code to not depend on
        the UString(char) constructor.

2006-10-25  Kevin McCullough  <KMcCullough@apple.com>

        Reviewed by Steve (rubber stamp).

        - Link against your local build of JavaScriptCore.lib first, this fixes some errors on release builds of testkjs.

        * JavaScriptCore.vcproj/testkjs/testkjs.vcproj:

2006-10-25  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Lou.
        
        Removed duplicate symbol declaration.

        * JavaScriptCore.xcodeproj/project.pbxproj:
        * kjs/grammar.y:

2006-10-24  Steve Falkenburg  <sfalken@apple.com>

        Build config change

        * JavaScriptCore.vcproj/testkjs/testkjs.vcproj:

2006-10-24  Kevin McCullough  <KMcCullough@apple.com>

        Reviewed by Brady.

        - 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.

        * kjs/date_object.cpp:
        (KJS::):
        (KJS::formatLocaleDate):
        (KJS::DateProtoFunc::callAsFunction):

2006-10-23  Kevin McCullough  <KMcCullough@apple.com>

        Reviewed by 

       - Build fix

        * JavaScriptCore.xcodeproj/project.pbxproj:
        * kjs/grammar.y:

2006-10-23  Kevin McCullough  <KMcCullough@apple.com>

        Reviewed by Maciej.

        - Makes the toTM function an operator.  Was going to piggy back on a patch but the patch needs more work.

        * kjs/DateMath.cpp:
        (KJS::equivalentYearForDST):
        * kjs/DateMath.h:
        (KJS::GregorianDateTime::operator tm):
        * kjs/date_object.cpp:
        (KJS::formatTime):
        (KJS::DateProtoFunc::callAsFunction):

2006-10-23  Kevin McCullough  <KMcCullough@apple.com>

        Reviewed by Maciej.

       - 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).

        * kjs/grammar.y:
        * kjs/object.cpp:

2006-10-21  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Adam.
        
        Add minimal compatibility with MSVCRT leak checker

        * wtf/FastMalloc.h:

2006-10-23  Kevin McCullough  <KMcCullough@apple.com>

        Reviewed by Geof.

        - Sets the lowercase range correctly in the test and consolidates a variable to make the test more readable.

       * tests/mozilla/ecma/String/15.5.4.11-2.js:

2006-10-21  Darin Adler  <darin@apple.com>

        Reviewed by Anders.

        - http://bugs.webkit.org/show_bug.cgi?id=11377
          swap(Vector, Vector) should be O(1) instead of O(n)

        * wtf/Vector.h:
        (WTF::VectorBuffer::swap): Added.
        (WTF::Vector::swap): Added.
        (WTF::swap): Added overload that takes two Vector objects.

2006-10-21  Darin Adler  <darin@apple.com>

        Reviewed by Adam.

        - http://bugs.webkit.org/show_bug.cgi?id=11376
          build scripts should invoke make with "-j" option for multiple processors

        * JavaScriptCore.xcodeproj/project.pbxproj: Pass -j `sysctl -n hw.ncpu` to make.

2006-10-19  Kevin McCullough  <KMcCullough@apple.com>

        Reviewed by Geof.

        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.
        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.

        * tests/mozilla/ecma/String/15.5.4.11-2.js:

2006-10-18  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Geoff.
        
        - remove vestiges of KXMLCore name (former name of WTF).

        * wtf/Assertions.h:
        * wtf/FastMalloc.h:
        (operator new):
        (operator delete):
        (operator new[]):
        (operator delete[]):
        * wtf/FastMallocInternal.h:
        * wtf/Forward.h:
        * wtf/GetPtr.h:
        * wtf/HashCountedSet.h:
        * wtf/HashFunctions.h:
        * wtf/HashMap.h:
        * wtf/HashSet.h:
        * wtf/HashTable.h:
        * wtf/HashTraits.h:
        * wtf/ListRefPtr.h:
        * wtf/MathExtras.h:
        * wtf/Noncopyable.h:
        * wtf/OwnArrayPtr.h:
        * wtf/OwnPtr.h:
        * wtf/PassRefPtr.h:
        * wtf/Platform.h:
        * wtf/RefPtr.h:
        * wtf/StringExtras.h:
        (snprintf):
        * wtf/UnusedParam.h:
        * wtf/Vector.h:
        * wtf/VectorTraits.h:

2006-10-17  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Maciej.
        
        Adjust include paths

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:

2006-10-17  Kevin McCullough  <KMcCullough@apple.com>

        Reviewed by Darin.

        Fixed a date issue where the UTC offset was not set in win.

        * kjs/DateMath.cpp:
        (KJS::getDSTOffsetSimple):
        (KJS::getDSTOffset):
        (KJS::msToGregorianDateTime):
        * kjs/DateMath.h:
        (KJS::):
        (KJS::GregorianDateTime::GregorianDateTime):

2006-10-17  Kevin McCullough  <KMcCullough@apple.com>

        Reviewed by Brady.

        Fixes a JavaScriptCore math issue on win.

        * kjs/math_object.cpp:
        (MathFuncImp::callAsFunction):
        * wtf/MathExtras.h:
        (wtf_atan2):

2006-10-16  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Geof.

        Removed unecessary global specifiers.

        * kjs/math_object.cpp:
        (MathFuncImp::callAsFunction):

2006-10-16  Kevin McCullough  <KMcCullough@apple.com>

        Reviewed by John.

        Fixes a compile order issue for testkjs on win.

        * JavaScriptCore.vcproj/testkjs/testkjs.vcproj:

2006-10-15  Krzysztof Kowalczyk  <kkowalczyk@gmail.com>

        Reviewed by Anders.

        Remove junk (as gcc calls it) after #else clause.

        * wtf/FastMalloc.cpp:
        (WTF::do_free):

2006-10-14  Krzysztof Kowalczyk  <kkowalczyk@gmail.com>

        Reviewed by Maciej.

        Define KXMLCORE_USE_CURL for platforms that wish to use CURL as
        networking, and set it for GDK build

        * wtf/Platform.h:

2006-10-13  Marvin Decker  <marv.decker@gmail.com>

        Reviewed by Kevin McCullough.

        Fixes http://bugs.webkit.org/show_bug.cgi?id=11283
        Fixes Qt/Linux and Windows build

        * kjs/DateMath.cpp:
        * kjs/DateMath.h:
        * kjs/date_object.cpp:
        (KJS::DateProtoFunc::callAsFunction):

2006-10-13  Kevin McCullough  <KMcCullough@apple.com>

        Reviewed by Adam, Geoff, Darin.

       Fixed displaying the UTC offset and time zone string, as well as renamed the GregorianDateTime structure and clean up. 

        * ChangeLog:
        * kjs/DateMath.cpp:
        (KJS::getUTCOffset):
        (KJS::getDSTOffsetSimple):
        (KJS::gregorianDateTimeToMS):
        (KJS::msToGregorianDateTime):
        * kjs/DateMath.h:
        (KJS::GregorianDateTime::GregorianDateTime):
        (KJS::GregorianDateTime::~GregorianDateTime):
        (KJS::GregorianDateTime::toTM):
        * kjs/date_object.cpp:
        (KJS::gmtoffset):
        (KJS::formatDate):
        (KJS::formatDateUTCVariant):
        (KJS::formatTime):
        (KJS::fillStructuresUsingTimeArgs):
        (KJS::fillStructuresUsingDateArgs):
        (KJS::DateInstance::getTime):
        (KJS::DateInstance::getUTCTime):
        (KJS::DateProtoFunc::callAsFunction):
        (KJS::DateObjectImp::construct):
        (KJS::DateObjectImp::callAsFunction):
        (KJS::DateObjectFuncImp::callAsFunction):
        (KJS::parseDate):
        * kjs/date_object.h:

2006-10-13  Kevin McCullough  <KMcCullough@apple.com>

        Reviewed by Adam.

        Gets JavaScripCore tests running on windows.

        * Scripts/run-javascriptcore-tests:
        * Scripts/webkitdirs.pm:

2006-10-12  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Maciej.
        
        Removed JSObjectMakeWithPrototype, clarified some comments. We really
        don't want people to manage their own prototypes, so we don't want an
        extra function in the API devoted to just that. People can still manage
        their own prototypes if they really want by using JSObjectSetPrototype.

        * API/JSClassRef.cpp:
        (OpaqueJSClass::createNoAutomaticPrototype):
        (OpaqueJSClass::create):
        * API/JSClassRef.h:
        * API/JSObjectRef.cpp:
        (JSClassCreate):
        (JSObjectMake):
        * API/JSObjectRef.h:
        * API/testapi.c:
        (main):
        * JavaScriptCore.exp:

2006-10-12  Kevin McCullough  <KMcCullough@apple.com>

        Reviewed by Adam.

        Build breakage fix

        * kjs/DateMath.cpp:
        (KJS::msToTM):
        * kjs/date_object.cpp:
        (KJS::gmtoffset):

2006-10-11  Kevin McCullough  <KMcCullough@apple.com>

        Reviewed by Geoff.

        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.

        * kjs/DateMath.cpp:
        (KJS::timeToMS):
        (KJS::getUTCOffset):
        (KJS::getDSTOffsetSimple):
        (KJS::dateToMS):
        (KJS::msToTM):
        (KJS::tmToKJStm):
        (KJS::KJStmToTm):
        * kjs/DateMath.h:
        * kjs/date_object.cpp: 
        (KJS::gmtoffset): 
        (KJS::formatTime): 
        (KJS::DateProtoFunc::callAsFunction): 
        (KJS::DateObjectImp::construct):
        (KJS::DateObjectImp::callAsFunction):
        (KJS::DateObjectFuncImp::callAsFunction):
        (KJS::parseDate):
        * kjs/date_object.h:

2006-10-09  Krzysztof Kowalczyk  <kkowalczyk@gmail.com>

        Reviewed by Geoff.

        Improve gdk build compiler flags (show warning, no rtti and exceptions).

        * jscore.bkl:

2006-10-06  Kevin McCullough  <KMcCullough@apple.com>

        Reviewed by Brady.

        DST and TimeZones were wrong in some cases, specifically on some of the dates where DST changes.

        * kjs/DateMath.cpp:
        (KJS::equivalentYearForDST):
        (KJS::getUTCOffset):
        (KJS::getDSTOffsetSimple):
        (KJS::getDSTOffset):
        (KJS::dateToMseconds):
        (KJS::msToTM):
        * kjs/DateMath.h:
        * kjs/date_object.cpp:
        (KJS::gmtoffset):

2006-10-05  Darin Adler  <darin@apple.com>

        Reviewed by Kevin McCullough.

        * wtf/Assertions.cpp: Fix build when _DEBUG is not defined.

2006-10-04  Kevin McCullough  <KMcCullough@apple.com>

        Reviewed by Adam.

        - 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.

        * kjs/DateMath.cpp:
        (KJS::getUTCOffset):
        (KJS::msToTM):
        * kjs/date_object.cpp:
        (KJS::gmtoffset):
        (KJS::formatTime):

2006-10-04  Geoffrey Garen  <ggaren@apple.com>

        Patch by Darin and me, reviewed by Maciej.

        Fixed <rdar://problem/4518397> REGRESSION(?): Oft-seen but unrepro crash 
              in JavaScript garbage collection (KJS::Collector::collect())
               <rdar://problem/4752492> Crash in KJS::collect
              
        The issue here was allocating one garbage-collected object in the midst 
        of allocating a second garbage-collected object. In such a case, the
        zeroIfFree word lies.

        * kjs/collector.cpp:
        (KJS::Collector::allocate):
        (KJS::Collector::collect):

2006-10-04  Kevin McCullough  <KMcCullough@apple.com>

        Reviewed by Adam.

        - Layout test fix

        * kjs/DateMath.cpp:
        (KJS::dateToDayInYear): accept and correctly handle negative months

2006-10-05  Kevin McCullough  <KMcCullough@apple.com>

       build fix

        * kjs/DateMath.cpp:
        (KJS::dateToDayInYear):

2006-10-05  Mark Rowe  <bdash@webkit.org>

        Reviewed by maculloch.

        Gdk build fix.

        * JavaScriptCoreSources.bkl: Add DateMath.cpp to file list.

2006-10-05  Kevin McCullough  <KMcCullough@apple.com>

        Reviewed by aroben

        - build fix

        * JavaScriptCore.xcodeproj/project.pbxproj:

2006-10-04  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Mitz.

        Fix Qt/Linux build by adding DateMath.cpp to compilation.

        * CMakeLists.txt: Also replace tabs with spaces.

2006-10-04  Kevin McCullough  <KMcCullough@apple.com>

        Reviewed by DethBakin.

        - 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.

        * kjs/DateMath.cpp:
        (KJS::msToYear):
        (KJS::dayInYear):
        (KJS::dateToDayInYear):

2006-10-05  Darin Adler  <darin@apple.com>

        Reviewed by Adam.

        * wtf/Assertions.cpp: Changed assertion formatting to omit the "======"
        lines so you can see more assertions in less space. Also improved format
        of file/line information so it works with more development environments.

2006-10-04  Kevin McCullough  <KMcCullough@apple.com>

        Reviewed by Tim H.

        - The build machine is more sensitive about automatic conversions.  These fixes exp
licitly cast or change the input and return types of functions to avoid conversions.

        * JavaScriptCore.xcodeproj/project.pbxproj:
        * kjs/DateMath.cpp:
        (KJS::):
        (KJS::msToDays):
        (KJS::msToYear):
        (KJS::dayInYear):
        (KJS::monthToDayInYear):
        (KJS::dateToDayInYear):
        (KJS::getDSTOffsetSimple):
        (KJS::getDSTOffset):
        (KJS::dateToMseconds):
        (KJS::msToTM):

2006-10-04  Kevin McCullough  <KMcCullough@apple.com>

        Reviewed by GGaren

        - 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.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * kjs/DateMath.cpp: Added.
        (KJS::):
        (KJS::daysInYear):
        (KJS::daysFrom1970ToYear):
        (KJS::msFrom1970ToYear):
        (KJS::msToDays):
        (KJS::msToYear):
        (KJS::isLeapYear):
        (KJS::isInLeapYear):
        (KJS::dayInYear):
        (KJS::msToMilliseconds):
        (KJS::msToWeekDay):
        (KJS::msToSeconds):
        (KJS::msToMinutes):
        (KJS::msToHours):
        (KJS::msToMonth):
        (KJS::msToDayInMonth):
        (KJS::monthToDayInYear):
        (KJS::timeToMseconds):
        (KJS::dateToDayInYear):
        (KJS::equivalentYearForDST):
        (KJS::getUTCOffset):
        (KJS::getDSTOffsetSimple):
        (KJS::getDSTOffset):
        (KJS::localTimeToUTC):
        (KJS::UTCToLocalTime):
        (KJS::dateToMseconds):
        (KJS::msToTM):
        (KJS::isDST):
        * kjs/DateMath.h: Added.
        (KJS::):
        * kjs/date_object.cpp:
        (KJS::gmtoffset):
        (KJS::formatTime):
        (KJS::DateInstance::getTime):
        (KJS::DateInstance::getUTCTime):
        (KJS::DateProtoFunc::callAsFunction):
        (KJS::DateObjectImp::construct):
        (KJS::DateObjectFuncImp::callAsFunction):
        (KJS::parseDate):
        * kjs/testkjs.cpp:
        * os-win32/stdint.h:

2006-10-02  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed/landed by Adam.

        Build testkjs on Qt/Linux.

        * CMakeLists.txt:

2006-10-02  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by eseidel.  Landed by eseidel.

        Fix win32 build, which has no inttypes.h

        * wtf/Assertions.h:

2006-10-02  Nikolas Zimmermann <zimmermann@kde.org>

        Reviewed by eseidel & mjs.  Landed by eseidel.

        Fix Qt/Linux build with older gcc 3.3.4.
        http://bugs.webkit.org/show_bug.cgi?id=11116
 
        * kjs/lookup.h: Move cacheGlobalObject into KJS namespace.
        (KJS::cacheGlobalObject): Also remove GCC_ROOT_NS_HACK.
        * wtf/Assertions.h: Include inttypes.h for uintptr_t.

2006-09-28  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Maciej.
        
        Use $(ConfigSuffix) set via vsprops files to add _debug
        to end of debug filenames.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
        * JavaScriptCore.vcproj/debug.vsprops: Added.
        * JavaScriptCore.vcproj/dftables/dftables.vcproj:
        * JavaScriptCore.vcproj/release.vsprops: Added.
        * JavaScriptCore.vcproj/testkjs/testkjs.vcproj:

2006-09-28  Darin Adler  <darin@apple.com>

        Reviewed by Alice.

        - support for change that should fix <rdar://problem/4733044>
          REGRESSION: XML iBench shows 10% perf. regression (copying
          strings while decoding)

        * wtf/Vector.h: Changed VectorBuffer so that the general case
        contains an instance of the 0 case, since deriving from it
        was violating the Liskov Substitution Principle.
        (WTF::VectorBuffer::releaseBuffer): Added. Releases the buffer so it can
        be adopted by another data structure that uses the FastMalloc.h allocator.
        Returns 0 if the internal buffer was being used.
        (WTF::Vector::releaseBuffer): Added. Releases the buffer as above or creates
        a new one in the case where the internal buffer was being used.

2006-09-28  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Geoff.
        
        - change garbage collection to happen at increments proportional to number of live objects, not always
        every 1000 allocations

        * kjs/collector.cpp:
        (KJS::Collector::allocate):

2006-09-28  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Mitz.

        - fixed REGRESSION (r16606): javascriptCore Crash on website load
        
        Plus style fixes.
        
            - fixed some possible off-by-one bugs
            - use indexing, not iterators, for Vectors
            - store Vector by pointer instead of by value to avoid blowing out FunctionImp size
        
        * kjs/function.cpp:
        (KJS::FunctionImp::addParameter):
        (KJS::FunctionImp::parameterString):
        (KJS::FunctionImp::processParameters):
        (KJS::FunctionImp::lengthGetter):
        (KJS::FunctionImp::getParameterName):
        * kjs/function.h:

2006-09-27  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Maciej.
        
        More build tweaks

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
        * JavaScriptCore.vcproj/JavaScriptCore/dstroot-to-sdk.cmd: Removed.

2006-09-27  John Sullivan  <sullivan@apple.com>

        * kjs/function.cpp:
        (KJS::FunctionImp::getParameterName):
        removed assertion that displeased gcc 4.0.1 (build 5420):
        ASSERT(static_cast<size_t>(index) == index);

2006-09-27  Kevin McCullough  <KMcCullough@apple.com>

        Reviewed by GGaren.

        Cleanup of previous fix which was to address Radar: 4752492

        * kjs/function.cpp:
        (KJS::FunctionImp::addParameter):
        (KJS::FunctionImp::parameterString):
        (KJS::FunctionImp::processParameters):
        (KJS::FunctionImp::lengthGetter):
        (KJS::FunctionImp::getParameterName):
        * kjs/function.h:

2006-09-27  Kevin McCullough  <KMcCullough@apple.com>

        Reviewed by Adele.

        Fixes a GC stack overflow crash.
        The change is to move from a linked list implementation of Parameters to a Vector.
        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. 

        * kjs/function.cpp:
        (KJS::Parameter::Parameter):
        (KJS::FunctionImp::addParameter):
        (KJS::FunctionImp::parameterString):
        (KJS::FunctionImp::processParameters):
        (KJS::FunctionImp::lengthGetter):
        (KJS::FunctionImp::getParameterName):
        * kjs/function.h:

2006-09-27  Steve Falkenburg  <sfalken@apple.com>

        Fix last path fix.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:

2006-09-27  Steve Falkenburg  <sfalken@apple.com>

        Set path before build.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:

2006-09-27  Sean Gies  <seangies@apple.com>

        Reviewed by Adam Roben.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Debug config should link to debug runtime.
        * JavaScriptCore.vcproj/dftables/dftables.vcproj: Debug config should link to debug runtime.

2006-09-27  Don Melton  <gramps@apple.com>

        Reviewed by Adam Roben.

        Changed line ending from DOS to UNIX format so it doesn't die running
        on my machine. ;)

        * JavaScriptCore.vcproj/JavaScriptCore/build-generated-files.sh:

2006-09-23  Alexey Proskuryakov  <ap@nypop.com>

        Reviewed by Maciej.

        http://bugs.webkit.org/show_bug.cgi?id=10183
        REGRESSION: obfuscated JS decoding breaks because of soft hyphen removal
        (Fanfiction.net author pages not listing stories)

        Rolled out the fix for bug 4139.

        * kjs/lexer.cpp:
        (Lexer::setCode):
        (Lexer::shift):
        * tests/mozilla/ecma/Array/15.4.5.1-1.js:
        * tests/mozilla/expected.html:

2006-09-22  Steve Falkenburg  <sfalken@apple.com>

        Build fix.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:

2006-09-22  Darin Adler  <darin@apple.com>

        Reviewed by Alice.

        * wtf/Vector.h: Add an append that takes a pointer and length.
        Generalize the existing Vector append to work on vectors with
        any value for inlineCapacity. Change the append algorithm so
        it doesn't check capacity each time through the loop.

2006-09-22  Steve Falkenburg  <sfalken@apple.com>

        Fix release build.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:

2006-09-21  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Maciej.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
        Updated to include the right path.
        * wtf/FastMalloc.h: #include Platform.h, since we use Platform macros.

=== Safari-521.27 ===

2006-09-20  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Dave Hyatt.

        * wtf/MathExtras.h:
        Get rid of lrint.

2006-09-20  Sean Gies  <seangies@apple.com>

        Reviewed by Steve Falkenburg.

        * wtf/Assertions.cpp: Debug messages should go into debugger console.

2006-09-20  David Hyatt  <hyatt@apple.com>

        Add an implementation of lrint for Win32.

        Reviewed by anders

        * wtf/MathExtras.h:
        (lrint):

2006-09-15  Krzysztof Kowalczyk  <kkowalczyk@gmail.com>

        Reviewed by Adam.

        http://bugs.webkit.org/show_bug.cgi?id=10864
        Bug 10864: Linux\GDK build fixes

        * JavaScriptCoreSources.bkl:
        * jscore.bkl:

2006-09-15  Adam Roben  <aroben@apple.com>

        Windows build fix.

        * JavaScriptCore.vcproj/JavaScriptCore/build-generated-files.sh:

2006-09-15  Anders Carlsson  <acarlsson@apple.com>

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
        Fix the release build.

2006-09-15  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Steve.

        Add JavaScriptCore API to the build.
        * API/JSBase.cpp:
        * API/JSCallbackConstructor.cpp:
        * API/JSCallbackFunction.cpp:
        * API/JSCallbackObject.cpp:
        * API/JSClassRef.cpp:
        * API/JSContextRef.cpp:
        * API/JSObjectRef.cpp:
        * API/JSStringRef.cpp:
        * API/JSValueRef.cpp:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
        * os-win32/stdbool.h: Added.

2006-09-12  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Ada.
        
        Build tweaks (doing JavaScriptCore now since it doesn't have
        dependencies).

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
        * JavaScriptCore.vcproj/JavaScriptCore/build-generated-files.sh:
        * JavaScriptCore.vcproj/JavaScriptCore/dstroot-to-sdk.cmd: Added.
        * JavaScriptCore.vcproj/dftables/dftables.vcproj:
        * JavaScriptCore.vcproj/testkjs/testkjs.vcproj:

2006-09-11  Brady Eidson  <beidson@apple.com>

        Build fix - I think Tim's last checkin wasn't tested on Tiger, possibly.  I simply
        commented out the undefined constants until he can have a chance to make the right call

        * bindings/objc/objc_utility.mm:
        (KJS::Bindings::objcValueTypeForType): Commented out undefined symbols

2006-09-11  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Tim O. and Darin.

        Add support for more method signatures affecting ObjC methods called from JavaScript:
        - Added unsigned types and long long.
        - Allow methods that use const, oneway, bycopy and byref type modifiers.

        * bindings/objc/objc_instance.mm:
        (ObjcInstance::invokeMethod):
        * bindings/objc/objc_utility.h:
        (KJS::Bindings::):
        * bindings/objc/objc_utility.mm:
        (KJS::Bindings::convertValueToObjcValue):
        (KJS::Bindings::convertObjcValueToValue):
        (KJS::Bindings::objcValueTypeForType):

2006-09-05  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Tim O.

        <rdar://problem/4715840> SEL is not char*

        * bindings/objc/objc_class.mm:
        (KJS::Bindings::ObjcClass::methodsNamed): use sel_getName instead of a char* cast.
        * bindings/objc/objc_runtime.mm:
        (ObjcFallbackObjectImp::callAsFunction): ditto

2006-09-03  Alexey Proskuryakov  <ap@nypop.com>

        Reviewed by Tim H.

        http://bugs.webkit.org/show_bug.cgi?id=10693
        Convert JavaScript arrays to AppleScript lists

        * JavaScriptCore.exp: Export ArrayInstance::info and ArrayInstance::getItem().
        * kjs/array_instance.h:
        * kjs/array_object.cpp:
        (ArrayInstance::getItem): Added a method to access array items from C++.

2006-09-02  Krzysztof Kowalczyk  <kkowalczyk@gmail.com>

        Reviewed by Tim H.

        Bug 10454: Unix bakefile fixes
        http://bugs.webkit.org/show_bug.cgi?id=10454

        * JavaScriptCoreSources.bkl:

2006-09-01  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by hyatt.  Landed by eseidel.

        Fix build on Linux.

        * pcre/CMakeLists.txt: Add wtf/ include.

2006-09-01  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed and landed by ap.

        Fix build on Linux (C89 without gcc extensions enabled).

        * pcre/pcre_internal.h: Use C style comments.
        * wtf/Assertions.h: Use C style comments.
        * wtf/Platform.h: Use C style comments.

2006-09-01  Steve Falkenburg  <sfalken@apple.com>

        Fix build.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
        * JavaScriptCore.vcproj/dftables/dftables.vcproj:

2006-08-31  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Darin.
        
        Add new portability functions to MathExtras.h and add StringExtras.h which is for
        string portability functions.
        
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
        * bindings/c/c_instance.cpp:
        * kjs/date_object.cpp:
        * wtf/MathExtras.h:
        (copysign):
        (isfinite):
        * wtf/StringExtras.h: Added.
        (snprintf):
        (strncasecmp):

2006-08-31  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Tim H.
        
        Fix Windows build.
        
        * JavaScriptCore.vcproj/dftables/dftables.vcproj:
        * pcre/pcre_internal.h:

2006-08-31  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Geoff.

        Band-aid fix for PCRE to compile for ppc64 and x86_64 now that
        we use -Wshorten-64-to-32. Adds an INT_CAST macro that ASSERTs
        the value <= INT_MAX.

        I filed <rdar://problem/4712064> to track the need to verify
        PCRE's 64-bit compliance.

        * pcre/pcre_compile.c:
        (complete_callout):
        (compile_branch):
        (compile_regex):
        (pcre_compile2):
        * pcre/pcre_exec.c:
        (match):
        (pcre_exec):
        * pcre/pcre_get.c:
        (pcre_get_substring_list):
        * pcre/pcre_internal.h:
        * pcre/pcre_tables.c:
        * pcre/pcre_try_flipped.c:
        (_pcre_try_flipped):

2006-08-30  Darin Adler  <darin@apple.com>

        Reviewed by Tim Hatcher.

        - add WTF::getPtr, a function template that makes it possible to write
          generic code that gets a raw pointer out of any of our pointer types

        * JavaScriptCore.xcodeproj/project.pbxproj:
        * wtf/GetPtr.h: Added.
        * wtf/ListRefPtr.h: (WTF::getPtr): Added.
        * wtf/OwnArrayPtr.h: (WTF::getPtr): Added.
        * wtf/OwnPtr.h: (WTF::getPtr): Added.
        * wtf/PassRefPtr.h: (WTF::getPtr): Added.
        * wtf/RefPtr.h: (WTF::getPtr): Added.

2006-08-29  waylonis  <waylonis@google.com>

        Reviewed, tweaked by ggaren.

        - Added storage and accessor functions for ExecState as a fix for
          http://bugs.webkit.org/show_bug.cgi?id=10114
        
        * kjs/ExecState.cpp:
        (KJS::ExecState::ExecState):
        * kjs/ExecState.h:
        * kjs/context.h:
        (KJS::Context::setExecState):
        (KJS::Context::execState):

2006-08-30  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Tim H.

        Commit KDE related tweaks, to be able to
        differentiate between a Qt-only or a KDE build.

        * CMakeLists.txt: Install wtf-unity library.
        * wtf/Platform.h: Add define for the KDE platform.

2006-08-28  Darin Adler  <darin@apple.com>

        Reviewed by Geoff.

        * kjs/list.h: Use explicit in constructor (as appropriate).

2006-08-24  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed, tweaked and landed by ap

        http://bugs.webkit.org/show_bug.cgi?id=10467
        WebKit should have Qt platform support (Part II)

        * CMakeLists.txt: Adjust to Anders' build fixes.
        * wtf/Platform.h: Fix define for the Qt platform (we don't use/need Cairo.)

2006-08-23  David Hyatt  <hyatt@apple.com>

        Fix Platform.h to include #defines for graphics features.

        Reviewed by darin

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
        * wtf/Platform.h:

2006-08-23  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Darin.

        Make the bindings compile without CoreFoundation.
        
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
        * bindings/c/c_instance.cpp:
        * bindings/c/c_utility.cpp:
        (KJS::Bindings::convertUTF8ToUTF16):
        * bindings/npapi.h:
        * bindings/runtime.cpp:
        (KJS::Bindings::Instance::createBindingForLanguageInstance):
        (KJS::Bindings::Instance::createLanguageInstanceForValue):
        * bindings/runtime_root.cpp:
        * bindings/runtime_root.h:
        * kjs/interpreter.cpp:
        (KJS::Interpreter::createLanguageInstanceForValue):
        * kjs/interpreter.h:

2006-08-22  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Darin.

        Move the npruntime code over to using HashMap and the runtime_root code over to using 
        HashMap and HashCountedSet.
        
        * bindings/NP_jsobject.cpp:
        * bindings/c/c_utility.cpp:
        (KJS::Bindings::identifierFromNPIdentifier):
        * bindings/c/c_utility.h:
        * bindings/jni/jni_jsobject.cpp:
        (JavaJSObject::invoke):
        * bindings/npruntime.cpp:
        (getStringIdentifierMap):
        (getIntIdentifierMap):
        (_NPN_GetStringIdentifier):
        (_NPN_GetIntIdentifier):
        * bindings/runtime_root.cpp:
        (getReferencesByRootMap):
        (getReferencesSet):
        (KJS::Bindings::findReferenceSet):
        (KJS::Bindings::rootForImp):
        (KJS::Bindings::rootForInterpreter):
        (KJS::Bindings::addNativeReference):
        (KJS::Bindings::removeNativeReference):
        (RootObject::removeAllNativeReferences):
        * bindings/runtime_root.h:

2006-08-22  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Geoff.
        
        Switch over the NPAPI and Java bindings to using HashMaps instead of dictionaries.
        
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * bindings/c/c_class.cpp:
        (KJS::Bindings::CClass::CClass):
        (KJS::Bindings::CClass::~CClass):
        (KJS::Bindings::CClass::classForIsA):
        (KJS::Bindings::CClass::methodsNamed):
        (KJS::Bindings::CClass::fieldNamed):
        * bindings/c/c_class.h:
        * bindings/jni/jni_class.cpp:
        (JavaClass::JavaClass):
        (JavaClass::~JavaClass):
        (JavaClass::methodsNamed):
        (JavaClass::fieldNamed):
        * bindings/jni/jni_class.h:
        * bindings/objc/objc_class.h:
        * bindings/objc/objc_class.mm:
        (KJS::Bindings::deleteMethod):
        (KJS::Bindings::deleteField):
        (KJS::Bindings::):
        (KJS::Bindings::ObjcClass::methodsNamed):
        (KJS::Bindings::ObjcClass::fieldNamed):
        * bindings/runtime.cpp:
        * bindings/runtime.h:
        * bindings/runtime_object.cpp:
        (RuntimeObjectImp::fieldGetter):
        (RuntimeObjectImp::getOwnPropertySlot):
        (RuntimeObjectImp::put):
        (RuntimeObjectImp::canPut):

2006-08-21  Vladimir Olexa  <vladimir.olexa@gmail.com>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=6252
        JavaScript 1.6 Array.lastIndexOf

        Test: fast/js/array-lastIndexOf.html

        * kjs/array_object.cpp:
        (ArrayProtoFunc::callAsFunction): Added a LastIndexOf case.
        * kjs/array_object.h:
        (KJS::ArrayProtoFunc::): Added LastIndexOf to enum.
        * tests/mozilla/expected.html: Two more tests now pass.

2006-08-20  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Maciej. Landed by rwlbuis.

        Fixes parts of: http://bugs.webkit.org/show_bug.cgi?id=10463
        WebKit should have Qt platform support

        Removing obsolete QConstString/QString constructors in kjs code.

        * kjs/identifier.h:
        * kjs/ustring.h:

2006-08-17  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Maciej. Landed by rwlbuis.

        Fixes: http://bugs.webkit.org/show_bug.cgi?id=10463
        WTF Changes needed for Qt platform code.

        * wtf/Platform.h:
        * wtf/unicode/UnicodeDecomposition.h: Added.
        (WTF::Unicode::):
        * wtf/unicode/UnicodeDirection.h: Added.
        (WTF::Unicode::):
        * wtf/unicode/qt4/UnicodeQt4.cpp: Added.
        (WTF::Unicode::direction):
        (WTF::Unicode::category):
        (WTF::Unicode::decomposition):
        * wtf/unicode/qt4/UnicodeQt4.h:
        (WTF::Unicode::toLower):
        (WTF::Unicode::toUpper):
        (WTF::Unicode::isPrintableChar):
        (WTF::Unicode::isSpace):
        (WTF::Unicode::isPunct):
        (WTF::Unicode::isDigit):
        (WTF::Unicode::mirroredChar):
        (WTF::Unicode::compare):

2006-08-17  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Eric. Landed by rwlbuis.

        Fixes: http://bugs.webkit.org/show_bug.cgi?id=10464
        Offer a cmake build system for Qt platform.

        * CMakeLists.txt: Added.
        * pcre/CMakeLists.txt: Added.

2006-08-17  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Maciej.

        * bindings/npapi.h:
        Fix ifdef.

2006-08-15  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by mjs.
        
        Build fix.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
        * wtf/Assertions.h:

2006-08-15  Mark Rowe  <opendarwin.org@bdash.net.nz>

        Reviewed by Tim H.

        Build fix:  DWARF and -gfull are incompatible with symbol separation.

        * JavaScriptCore.xcodeproj/project.pbxproj:

2006-08-15  Mark Rowe  <opendarwin.org@bdash.net.nz>

        Reviewed by Tim H.

        http://bugs.webkit.org/show_bug.cgi?id=10394
        Bug 10394: WebKit Release and Production configurations should enable dead code stripping

        * JavaScriptCore.xcodeproj/project.pbxproj:

2006-08-15  Mark Rowe  <opendarwin.org@bdash.net.nz>

        Reviewed by Tim H.

        http://bugs.webkit.org/show_bug.cgi?id=10384
        Bug 10384: Switch to DWARF for Release configuration

        * JavaScriptCore.xcodeproj/project.pbxproj:

2006-08-13  Maks Orlovich  <maksim@kde.org>

        Reviewed (and tweaked a little) by Maciej.
        
        - shrank the size of JSObject by 8 bytes and made the corresponding reduction to the cell size, resulting
        in a 1.2% speed improvement on JS iBench (and probably overall memory savings).

        This was done by removing _scope and _internalValue data members
        from JSObject and moving them only to the subclasses that actually
        make use of them.
        
        * kjs/object.cpp: 
        (KJS::JSObject::mark): No need to mark scope or internal value here.
        * kjs/object.h:
        (KJS::JSObject::JSObject): Don't initialize them.
        * kjs/JSWrapperObject.cpp: Added. New base class for object types that
        wrap primitive values (Number, String, Boolean, Date).
        (KJS::JSWrapperObject::mark): 
        * kjs/JSWrapperObject.h: Added.
        (KJS::JSWrapperObject::JSWrapperObject):
        (KJS::JSWrapperObject::internalValue):
        (KJS::JSWrapperObject::setInternalValue):
        * kjs/array_object.cpp:
        (ArrayPrototype::ArrayPrototype): Don't set useless internal value.
        * kjs/bool_object.cpp:
        (BooleanInstance::BooleanInstance): Inherit from JSWrapperObject.
        (BooleanProtoFunc::callAsFunction): Fixed to account for fact that not all
        JSObjects have an internal value.
        (BooleanObjectImp::construct): ditto.
        * kjs/bool_object.h:
        * kjs/collector.cpp: Lowered cell size to 48.
        (KJS::Collector::allocate): meaningless whitespace change
        * kjs/date_object.cpp:
        (KJS::DateInstance::DateInstance): Inherit from JSWrapperObject.
        (KJS::DateProtoFunc::callAsFunction): adjusted for move of internalValue
        (KJS::DateObjectImp::construct): ditto
        * kjs/date_object.h:
        * kjs/error_object.cpp:
        (ErrorPrototype::ErrorPrototype): don't set internal value
        * kjs/function.cpp: move _scope and related handling here
        (KJS::FunctionImp::mark): mark scope
        * kjs/function.h:
        (KJS::FunctionImp::scope): moved here from JSObject
        (KJS::FunctionImp::setScope): ditto
        * kjs/number_object.cpp:
        (NumberInstance::NumberInstance): inherit from JSWrapperObject
        (NumberProtoFunc::callAsFunction): adjusted
        (NumberObjectImp::construct): adjusted
        * kjs/number_object.h: shring RegExp-related objects a little
        * kjs/regexp_object.cpp:
        (RegExpPrototype::RegExpPrototype): Adjust for size tweaks
        (RegExpObjectImp::RegExpObjectImp): ditto
        * kjs/regexp_object.h:
        * kjs/string_object.cpp:
        (StringInstance::StringInstance): inherit from JSWrapperObject
        (StringProtoFunc::callAsFunction): adjusted
        * kjs/string_object.h:
        * JavaScriptCore.exp: Exported new methods as needed.
        * JavaScriptCore.xcodeproj/project.pbxproj: Added new files to build.

2006-08-04  Brady Eidson  <beidson@apple.com>

        Reviewed by Geoff's rubber stamp

        Fix a build break on Intel hardware causes by adapting stricter
        compiler warnings (-Wshorten-64-to-32)

        * API/testapi.c:
        (assertEqualsAsNumber): manually cast some doubles to floats
        (main): ditto

2006-08-04  Sam Weinig  <sam.weinig@gmail.com>

        Reviewed by Darin.

        - patch for http://bugs.webkit.org/show_bug.cgi?id=10192
          Make WebCore (and friends) compile with -Wshorten-64-to-32

          * Adds -Wshorten-64-to-32 flag to Xcode project.
          * Adds explicit casts where OK.

        * API/JSNodeList.c:
        (JSNodeList_item):
        (JSNodeList_getProperty):
        * JavaScriptCore.xcodeproj/project.pbxproj:

2006-08-04  Adam Roben  <aroben@apple.com>

        Reviewed by Anders.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Convert
        spaces to tabs

2006-08-03  Sam Weinig  <sam.weinig@gmail.com>

        Reviewed by Darin.

        - patch for http://bugs.webkit.org/show_bug.cgi?id=10176
          Make WebCore compile with -Wundef

          * Adds -Wundef flag to Xcode project
          * Converts #ifs to #ifdef and #ifndefs where needed.
          * Added #define YYMAXDEPTH 10000 in kjs/grammar.y
            to fix a warning from within Bison.

        * JavaScriptCore.xcodeproj/project.pbxproj:
        * bindings/jni/jni_jsobject.cpp:
        (JavaJSObject::getSlot):
        (JavaJSObject::setSlot):
        * bindings/npapi.h:
        * bindings/objc/objc_class.mm:
        (KJS::Bindings::ObjcClass::methodsNamed):
        (KJS::Bindings::ObjcClass::fieldNamed):
        * bindings/objc/objc_instance.mm:
        (ObjcInstance::invokeMethod):
        * bindings/objc/objc_runtime.mm:
        (ObjcMethod::getMethodSignature):
        (ObjcField::name):
        (ObjcField::type):
        * kjs/grammar.y:
        * kjs/identifier.h:

2006-08-03  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by John Sullivan.

       * wtf/HashSet.h:
        (WTF::::operator):
        Return *this in operator=

2006-08-03  Adam Roben  <aroben@apple.com>

        Reviewed by Anders.

        - Fixed Windows build

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
        * wtf/MathExtras.h: Implement inline versions of these functions
        (nextafter):
        (nextafterf):

2006-08-02  Adam Roben  <aroben@apple.com>

        Reviewed by Darin.

        - Fixed build

        * kjs/date_object.cpp:
        (KJS::formatTime):

2006-07-29  Darin Adler  <darin@apple.com>

        - Removed tabs from these source files that still had them.
          We don't use them; that way source files look fine in editors
          that have tabs set to 8 spaces or to 4 spaces.
        - Removed allow-tabs Subversion property from the files too.

        * bindings/NP_jsobject.cpp:
        * bindings/c/c_utility.cpp:
        * bindings/jni/jni_runtime.cpp:
        * bindings/jni/jni_utility.cpp:
        * bindings/objc/objc_utility.mm:
        * bindings/runtime.cpp:
        * bindings/runtime_method.cpp:
        * bindings/testbindings.cpp:
        * bindings/testbindings.mm:
        * kjs/date_object.cpp:
        * kjs/function.cpp:
        * kjs/list.cpp:
        * kjs/nodes.cpp:
        * kjs/nodes.h:
        * kjs/string_object.cpp:
        * kjs/ustring.cpp:

2006-07-29  Darin Adler  <darin@apple.com>

        * tests/mozilla/expected.html: Update test results now that regress-185165.js
        is succeeding. I suspect Anders fix for bug 4620655 is the reason.

2006-07-29  Sam Weinig  <sam.weinig@gmail.com>

        Reviewed by Darin.

        - patch for http://bugs.webkit.org/show_bug.cgi?id=10080
          Adopt pedantic changes from the Unity project to improve 
          cross-compiler compatibility

          Changes include:
          * Removing trailing semicolon from namespace braces.
          * Removing trailing comma from last enum declaration.
          * Updating to match style guidelines.
          * Adding missing newline to the end of the file.
          * Turning on gcc warning for missing newline at the end of a source file
            (GCC_WARN_ABOUT_MISSING_NEWLINE in Xcode, -Wnewline in gcc).
          * Alphabetical sorting of Xcode source list files. 
          * Replace use of non-portable variable-size array with Vector.
          * Use C-style comments instead of C++ comments in files that might
            be included by either C or C++ files.

        * API/JSCallbackConstructor.cpp:
        (KJS::JSCallbackConstructor::construct):
        * API/JSCallbackFunction.cpp:
        (KJS::JSCallbackFunction::callAsFunction):
        * API/JSCallbackObject.cpp:
        (KJS::JSCallbackObject::construct):
        (KJS::JSCallbackObject::callAsFunction):
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * JavaScriptCorePrefix.h:
        * bindings/jni/jni_class.cpp:
        (JavaClass::fieldNamed):
        * bindings/jni/jni_class.h:
        * bindings/jni/jni_instance.cpp:
        (JavaInstance::JavaInstance):
        (JavaInstance::valueOf):
        * bindings/jni/jni_objc.mm:
        (KJS::Bindings::dispatchJNICall):
        * bindings/jni/jni_runtime.cpp:
        (JavaParameter::JavaParameter):
        (JavaArray::JavaArray):
        * bindings/jni/jni_runtime.h:
        * bindings/jni/jni_utility.h:
        * bindings/objc/objc_instance.h:
        * bindings/runtime_array.h:
        * kjs/collector.h:
        * kjs/config.h:
        * kjs/ustring.cpp:
        * wtf/Platform.h:

2006-07-29  Mike Emmel  <mike.emmel@gmail.com>

        Reviewed by Darin.

        - fixes for Linux build

        * JavaScriptCoreSources.bkl: Added new files to build, kjs/PropertyNameArray.cpp
        and kjs/testkjs.cpp, and removed old files.

2006-07-24  Dan Waylonis  <waylonis@google.com>

        Reviewed and tweaked a bit by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=9902
          jsNull and NSNull not properly converted between JS and ObjC

        * bindings/objc/objc_utility.mm: (KJS::Bindings::convertObjcValueToValue):
        Added case for converting NSNull to jsNull.

2006-07-24  Rob Buis  <buis@kde.org>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=4258
        Date().toString() only includes GMT offset, not timezone string

        Use the info in tm_zone to append timezone abbreviation
        to Date().toString().

        * kjs/date_object.cpp:
        (KJS::formatTime):

2006-07-24  Rob Buis  <buis@kde.org>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=5257
        setYear() does not match FireFox/IE behavior

        Make sure the right values end up in tm_year.

        * kjs/date_object.cpp:
        (KJS::formatTime):

2006-07-23  Mark Rowe  <opendarwin.org@bdash.net.nz>

        Reviewed by Maciej.

        Bug 9686: [Drosera] Need the ability to break into Drosera on Javascript exceptions
        http://bugs.webkit.org/show_bug.cgi?id=9686

        JavaScriptCore portion of the fix.

        * JavaScriptCore.exp: Update symbol for change in argument type.
        * kjs/debugger.cpp:
        (Debugger::detach): Clear map of recent exceptions.
        (Debugger::hasHandledException): Track the most recent exception
        thrown by an interpreter.
        (Debugger::exception): Change exception argument to a JSValue.
        * kjs/debugger.h:
        * kjs/nodes.cpp:
        (Node::debugExceptionIfNeeded): Notify the debugger of an exception
        if it hasn't seen it before.
        (ThrowNode::execute): Notify the debugger that an exception is being thrown.
        * kjs/nodes.h:

    2006-07-23  Geoffrey Garen  <ggaren@apple.com>

        Patch by Eric Albert, reviewed by Darin and me.
        
        - Fixed <rdar://problem/4645931> JavaScriptCore stack-scanning code 
        crashes (Collector::markStackObjectsConservatively)
        
        * bindings/jni/jni_jsobject.cpp: On 64bit systems, jint is a long, not an
        int.
        (JavaJSObject::getSlot):
        (JavaJSObject::setSlot):
        * kjs/collector.cpp:
        (KJS::Collector::markCurrentThreadConservatively): Use a pointer instead of
        an int as 'dummy,' because on LP64 systems, an int is not pointer-aligned,
        and we want to scan the stack for pointers.
        * JavaScriptCore.xcodeproj/project.pbxproj: After a tense cease-fire, the 
        XCode war has started up again!

=== Safari-521.20 ===

2006-07-21  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Darin.

        <rdar://problem/4507265> REGRESSION: overlays don't work on HousingMaps.com (Google Maps-based site)

        - Added support for strings that masquerade as undefined. Currently used
        by WebCore to implement undetectable style.filter.
        
        The name is a little long, but it's only used in one line of code, so I
        thought clarity should win over brevity.

        * JavaScriptCore.exp:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * kjs/object.h:
        * kjs/string_object.h:
        (KJS::StringInstanceThatMasqueradesAsUndefined::StringInstanceThatMasqueradesAsUndefined):
        (KJS::StringInstanceThatMasqueradesAsUndefined::masqueradeAsUndefined):
        (KJS::StringInstanceThatMasqueradesAsUndefined::toBoolean):

=== Safari-521.19 ===

2006-07-20  Steve Falkenburg  <sfalken@apple.com>

        Fix the build

        * kjs/function.cpp:
        (KJS::escapeStringForPrettyPrinting):

2006-07-19  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Darin.

        <rdar://problem/4620655> REGRESSION(10.4.7-10.5): preview button for a blogger.com post doesn't work
        
        * kjs/nodes2string.cpp:
        (StringNode::streamTo):
        Return the escaped string.
        
        (RegExpNode::streamTo):
        Use the correct syntax.
        
        * kjs/function.cpp:
        (KJS::escapeStringForPrettyPrinting):
        * kjs/function.h:
        Add escape function which escapes a string for pretty-printing so it can be parsed again.
        
        * wtf/unicode/icu/UnicodeIcu.h:
        (WTF::Unicode::isPrintableChar):
        New function.

2006-07-18  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Adele Peterson.
        
        <rdar://problem/4589530> REGRESSION: null character in JS string causes parse error (works in Tiger and in other browsers)

        * kjs/lexer.cpp:
        (Lexer::shift):
        (Lexer::lex):
        (Lexer::record16):
        (Lexer::scanRegExp):
        * kjs/lexer.h:

2006-07-18  Tim Omernick  <timo@apple.com>

        Reviewed by Tim Hatcher.

        Removed a misleading comment; we recently added support for the NPNVPluginElementNPObject
        variable.

        * bindings/npapi.h:

=== Safari-521.18 ===

2006-07-18  Timothy Hatcher  <timothy@apple.com>

        Made the following headers public:

        * JavaScriptCore.h
        * JSBase.h
        * JSContextRef.h
        * JSObjectRef.h
        * JSStringRef.h
        * JSValueRef.h

        * JavaScriptCore.xcodeproj/project.pbxproj:

2006-07-17  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Maciej.
        
        - Added automatic prototype creation for classes.
        
        A class stores a weak reference to a prototype, which is cleared when
        the prototype is garbage collected, to avoid a reference cycle.
        
        We now have an attributes field in JSClassDefinition, that currently is
        used only to override automatic prototype creation when you want to manage your
        own prototypes, but can be extended in the future for other nefarious purposes.
        
        Similarly, we have JSObjectMake and JSObjectMakeWithPrototype, the latter
        allowing you to manage your own prototypes.
        
        JSObjectMakeConstructor is more interesting now, able to make a constructor
        on your behalf if you just give it a class.
        
        - Removed bogus old code from minidom.js.
        
        - Tweaked the headerdocs.
        
        - Added more GC testing, which caught some leaks, and tested more funny 
        edge cases in lookup, which caught a lookup bug. Removed some testing 
        we used to do with MyObject because it was redundant with the new, cool 
        stuff.
        
        While fixing the lookup bug I retracted this change:
        
            "If a static setProperty callback returns 'false', to indicate that the
            property was not set, we no longer forward the set request up the class
            chain, because that's almost certainly not what the programmer expected."

        Returning false when setting a static property is a little silly, but you can see
        it being useful when shadowing a base class's static properties, and, regardless
        of usefullness, this is the defined behavior of the setProperty callback.
        
        - Plus a little ASCII art, for the kids.

2006-07-17  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Maciej.

        <rdar://problem/4634874> WebScriptObject and WebUndefined are no longer defined by WebKit

        Moves WebScriptObject and WebUndefined up to WebCore.
        This change does create an upwards-dependancy on WebScriptObject existing
        in the loaded process, but this code path in JavaScriptCore does not get used
        unless it is through WebKit/WebCore. Moving all of the binding code out of
        JavaScriptCore might make sense in the future.

        * JavaScriptCore.exp:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * bindings/objc/WebScriptObject.h: Replaced.
        * bindings/objc/WebScriptObject.mm: Removed.
        * bindings/objc/WebScriptObjectPrivate.h: Removed.
        * bindings/objc/objc_class.h:
        * bindings/objc/objc_instance.h:
        * bindings/objc/objc_instance.mm:
        (ObjcInstance::~ObjcInstance):
        * bindings/objc/objc_runtime.h:
        * bindings/objc/objc_runtime.mm:
        (convertValueToObjcObject):
        * bindings/objc/objc_utility.mm:
        (KJS::Bindings::convertValueToObjcValue):
        (KJS::Bindings::convertObjcValueToValue):
        (KJS::Bindings::createObjcInstanceForValue):

2006-07-17  Darin Adler  <darin@apple.com>

        * API/JSBase.h: Fix comment formatting where things used to be lined up but
        are now ragged. Got rid of spaces that attempted to line things up.
        * API/JSObjectRef.h: Ditto. Also add missing periods for a couple of comments.

2006-07-17  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Maciej.
        
        - Removed the exception parameter from the initialize callback and, by extension,
        JSObjectMake. We have never had a need for exceptions when iniitializing,
        so the parameter seemed likely to "get in the way." 
        
        Also, an exception in JavaScript is thrown in response to input -- 
        "invalid URL", "index not a number", etc., so it's the job of the 
        constructor function, not the initialize method, to throw.
        
        If initialize *really* wants to throw, it can communicate the throw to
        the constructor through the constructed object's private data (e.g., set
        it to NULL, signaling to the consntructor that initialization failed.)
        
        - Added JSObjectMakeWithData, which enables a constructor to set private
        data on an object *before* it has been initialized. That way, the initialize
        methods can properly operate on the data. 

        * API/JSNode.c: Moved ref into the initialize method, for better encapsulation,
        now that it's possible.
        * API/JSNodeList.c: ditto
        * API/minidom.c:
        (main): Do more aggressive garbage collection to test ref/deref and 
        initialize/finalize.
        * API/minidom.js: store childNodes in a temporary so it doesn't get re-created
        like a thousand times. This makes debugging ref/deref easier

2006-07-17  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Maciej.
        
        - Changed the initialize callback to run from least derived class (parent
        class) to most derived class. This enables C++ style initialization,
        and derived class overriding of member data.
        
        - Added excpetion propopgation to JSObjectMake, to support initialize
        exceptions, and generally round out our policy of making function
        signatures as long as possible.

        * API/JSCallbackObject.h: Use ExecState instead of ContextRef, cuz we're
        in C++ land now.

2006-07-17  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Maciej.
        
        - Changed JSObjectMakeConstructor to JSObjectMakeConstructorWithCallback,
        to match JSObjectMakeFunctionWithCallback.
        
        - Added prototype parameter, so the generated constructor
        automatically works with hasInstance / instanceof
        
        - Moved hasInstance implementation from InternalFunctionImp to JSObject
        so that subclasses can inherit it without inheriting function-related baggage.
        More refactoring here would be good, but this seems like a good short-term
        solution.

        (KJS::JSCallbackFunction::implementsHasInstance): override and return false,
        because callback functions aren't constructors.

2006-07-17  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Geoff.
        
        - add a JSContextRef parameter to all JSValueRef, JSObjectRef, and JSContextRef operations;
        except JSObject{Get,Set}PrivateData which can be assumed to be simple pure accessors.
        
        Also renamed the parameter "context" to "ctx" because it makes the code read better with this pervasive
        but usually uninteresting parameter.

        * API/JSBase.cpp:
        (JSEvaluateScript):
        (JSCheckScriptSyntax):
        (JSGarbageCollect):
        * API/JSBase.h:
        * API/JSCallbackObject.cpp:
        (KJS::JSCallbackObject::JSCallbackObject):
        (KJS::JSCallbackObject::init):
        (KJS::JSCallbackObject::getOwnPropertySlot):
        (KJS::JSCallbackObject::put):
        (KJS::JSCallbackObject::deleteProperty):
        (KJS::JSCallbackObject::toNumber):
        (KJS::JSCallbackObject::toString):
        * API/JSContextRef.cpp:
        (JSGlobalContextCreate):
        (JSGlobalContextRetain):
        (JSGlobalContextRelease):
        (JSContextGetGlobalObject):
        * API/JSContextRef.h:
        * API/JSNode.c:
        (JSNodePrototype_appendChild):
        (JSNodePrototype_removeChild):
        (JSNodePrototype_replaceChild):
        (JSNode_getNodeType):
        (JSNode_getFirstChild):
        (JSNode_prototype):
        * API/JSNodeList.c:
        (JSNodeListPrototype_item):
        (JSNodeList_length):
        (JSNodeList_getProperty):
        (JSNodeList_prototype):
        * API/JSObjectRef.cpp:
        (JSObjectMake):
        (JSObjectMakeFunctionWithCallback):
        (JSObjectMakeConstructor):
        (JSObjectMakeFunction):
        (JSObjectGetPrototype):
        (JSObjectSetPrototype):
        (JSObjectHasProperty):
        (JSObjectGetProperty):
        (JSObjectSetProperty):
        (JSObjectGetPropertyAtIndex):
        (JSObjectSetPropertyAtIndex):
        (JSObjectDeleteProperty):
        (JSObjectIsFunction):
        (JSObjectCallAsFunction):
        (JSObjectIsConstructor):
        (JSObjectCallAsConstructor):
        (JSObjectCopyPropertyNames):
        * API/JSObjectRef.h:
        * API/JSStringRef.cpp:
        * API/JSValueRef.cpp:
        (JSValueGetType):
        (JSValueIsUndefined):
        (JSValueIsNull):
        (JSValueIsBoolean):
        (JSValueIsNumber):
        (JSValueIsString):
        (JSValueIsObject):
        (JSValueIsObjectOfClass):
        (JSValueIsEqual):
        (JSValueIsStrictEqual):
        (JSValueIsInstanceOfConstructor):
        (JSValueMakeUndefined):
        (JSValueMakeNull):
        (JSValueMakeBoolean):
        (JSValueMakeNumber):
        (JSValueMakeString):
        (JSValueToBoolean):
        (JSValueToNumber):
        (JSValueToStringCopy):
        (JSValueToObject):
        (JSValueProtect):
        (JSValueUnprotect):
        * API/JSValueRef.h:
        * API/minidom.c:
        (print):
        * API/testapi.c:
        (MyObject_getProperty):
        (MyObject_deleteProperty):
        (MyObject_callAsFunction):
        (MyObject_callAsConstructor):
        (MyObject_convertToType):
        (print_callAsFunction):
        (main):

2006-07-16  Geoffrey Garen  <ggaren@apple.com>

        Approved by Maciej, RS by Beth.
        
        JSObjectMakeFunction -> JSObjectMakeFunctionWithCallback
        JSObjectMakeFunctionWithBody -> JSObjectMakeFunction
        
        because the latter is more common, and more fundamental, than the former.

        * API/APICast.h:
        (toJS):
        * API/JSBase.h:
        * API/JSCallbackObject.cpp:
        (KJS::JSCallbackObject::getOwnPropertySlot):
        (KJS::JSCallbackObject::put):
        (KJS::JSCallbackObject::deleteProperty):
        (KJS::JSCallbackObject::getPropertyNames):
        (KJS::JSCallbackObject::staticValueGetter):
        (KJS::JSCallbackObject::staticFunctionGetter):
        * API/JSClassRef.cpp:
        (OpaqueJSClass::OpaqueJSClass):
        (OpaqueJSClass::~OpaqueJSClass):
        * API/JSClassRef.h:
        * API/JSObjectRef.cpp:
        (JSClassCreate):
        (JSObjectMakeFunctionWithCallback):
        (JSObjectMakeFunction):
        (OpaqueJSPropertyNameArray::OpaqueJSPropertyNameArray):
        (JSObjectCopyPropertyNames):
        * API/JSObjectRef.h:
        * API/minidom.c:
        (main):
        * API/testapi.c:
        (main):
        * ChangeLog:
        * JavaScriptCore.exp:

2006-07-16  Geoffrey Garen  <ggaren@apple.com>

        Laughed at by Beth.
        
        Replace __JS with OpaqueJS because the former, while used by CF, is
        a prefix that's triply-reserved by the compiler. (_* is reserved in global 
        names, _[A-Z] is reserved in all names, and __ is reserved in all names 
        in C++.)
        
        Opaque is an alternative used by other Mac OS X framewokrs.

        * API/APICast.h:
        (toJS):
        * API/JSBase.h:
        * API/JSCallbackObject.cpp:
        (KJS::JSCallbackObject::getOwnPropertySlot):
        (KJS::JSCallbackObject::put):
        (KJS::JSCallbackObject::deleteProperty):
        (KJS::JSCallbackObject::getPropertyNames):
        (KJS::JSCallbackObject::staticValueGetter):
        (KJS::JSCallbackObject::staticFunctionGetter):
        * API/JSClassRef.cpp:
        (OpaqueJSClass::OpaqueJSClass):
        (OpaqueJSClass::~OpaqueJSClass):
        * API/JSClassRef.h:
        * API/JSObjectRef.cpp:
        (JSClassCreate):
        (OpaqueJSPropertyNameArray::OpaqueJSPropertyNameArray):
        (JSObjectCopyPropertyNames):

2006-07-16  Darin Adler  <darin@apple.com>

        - try to fix Windows build

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
        Added some recently added files, removed some recently removed.

2006-07-16  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Maciej.
        
        - Change getProperty* to return undefined, rather than NULL, for missing
        properties, since that's what the spec says. Also added exception out
        parameters to the *Index functions, because they can call through to the
        regular functions, which can throw for custom objects.

        * API/JSObjectRef.cpp:
        (JSObjectGetProperty):
        (JSObjectGetPropertyAtIndex):
        (JSObjectSetPropertyAtIndex):
        * API/JSObjectRef.h:
        * API/testapi.c:
        (main):

2006-07-16  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Maciej.
        
        - Properly document and handle NULL callbacks for static properties. We
        throw an exception in any case other than a ReadOnly property with a NULL
        setProperty callback, because a NULL callback almost certainly indicates 
        a programming error. Also throw an exception if hasProperty returns true
        for a property that getProperty can't get.
        
        - If a static setProperty callback returns 'false', to indicate that the
        property was not set, we no longer forward the set request up the class
        chain, because that's almost certainly not what the programmer expected.

        * API/JSCallbackObject.cpp:
        (KJS::JSCallbackObject::getOwnPropertySlot):
        (KJS::JSCallbackObject::put):
        (KJS::JSCallbackObject::staticValueGetter):
        (KJS::JSCallbackObject::staticFunctionGetter):
        (KJS::JSCallbackObject::callbackGetter):
        * API/JSObjectRef.h:
        * API/minidom.js:
        * API/testapi.c:
        (MyObject_hasProperty):
        * API/testapi.js:

2006-07-16  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Maciej.
        
        - Added names to functions.
        
        - Removed GetPrivate/SetPrivate from callbackFunctions and callbackConstructors.
        The private data idiom is that a JS object stores its native implementation
        as private data. For functions and constructors, the native implementation is nothing
        more than the callback they already store, so supporting private data, too,
        confuses the idiom. If you *really* want, you can still create a custom 
        function with private data.

        * API/JSCallbackConstructor.cpp:
        * API/JSCallbackConstructor.h:
        * API/JSCallbackFunction.cpp:
        (KJS::JSCallbackFunction::JSCallbackFunction):
        * API/JSCallbackFunction.h:
        * API/JSCallbackObject.cpp:
        (KJS::JSCallbackObject::staticFunctionGetter):
        * API/JSObjectRef.cpp:
        (JSObjectMakeFunction):
        (JSObjectMakeFunctionWithBody):
        (JSObjectGetPrivate):
        (JSObjectSetPrivate):
        * API/JSObjectRef.h:
        * API/minidom.c:
        (main):
        * API/testapi.c:
        (main):

2006-07-15  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin.
        
        - switch property lists to be vector+set of Identifiers instead of list of References
        
        This has the following benefits:
        
        - no duplicates in property lists
        - simplifies API calls
        - probably more efficient, since linked list is gone
        - entirely removed Reference, ReferenceList and ProtectedReference types from the API

        * kjs/PropertyNameArray.cpp: Added.
        (KJS::PropertyNameArray::add): Check set, if not already there, add to
        vector.
        * kjs/PropertyNameArray.h: Added.
        (KJS::PropertyNameArray::PropertyNameArray): Newly added type, combines
        a set and a vector to make a unique but ordered list of identifiers.
        (KJS::PropertyNameArray::begin): ditto
        (KJS::PropertyNameArray::end): ditto
        (KJS::PropertyNameArray::size): ditto
        (KJS::PropertyNameArray::operator[]): ditto
        * kjs/array_instance.h:
        * kjs/array_object.cpp:
        (ArrayInstance::getPropertyNames): renamed from getPropertyList, updated
        for PropertyNameArray
        (ArrayInstance::setLength): updated for PropertyNameArray
        (ArrayInstance::pushUndefinedObjectsToEnd): ditto
        * kjs/nodes.cpp:
        (ForInNode::execute): updated for PropertyNameArray
        * kjs/nodes.h:
        * kjs/object.cpp:
        (KJS::JSObject::getPropertyNames): renamed from getPropertyList, updated
        for PropertyNameArray
        * kjs/object.h:
        * kjs/property_map.cpp:
        (KJS::PropertyMap::getEnumerablePropertyNames): updated for PropertyNameArray
        (KJS::PropertyMap::getSparseArrayPropertyNames): ditto
        * kjs/property_map.h:
        * kjs/protected_reference.h: Removed.
        * kjs/reference.cpp: Removed.
        * kjs/reference.h: Removed.
        * kjs/reference_list.cpp: Removed.
        * kjs/reference_list.h: Removed.
        * kjs/scope_chain.cpp:
        (KJS::ScopeChain::print): Use PropertyNamesArray instead of ReferenceList.
        * kjs/string_object.cpp:
        (StringInstance::getPropertyNames): Updated for new approach.
        * kjs/string_object.h:
        * kjs/ustring.h:
        * API/APICast.h:
        (toJS): Added overload for PropertyNameAccumulatorRef / PropertyNameArray*
        (toRef): ditto
        * API/JSBase.h:
        * API/JSCallbackObject.cpp:
        (KJS::JSCallbackObject::getPropertyNames): Fixed for new API.
        * API/JSCallbackObject.h:
        * API/JSObjectRef.cpp:
        (__JSPropertyNameArray::__JSPropertyNameArray): Type used for a publicly vended
        JSPropertyNameArrayRef.
        (JSObjectCopyPropertyNames): New API call - renamed / refactored from 
        JSObjectCreatePropertyList
        (JSPropertyNameArrayRetain): new retain call for JSPropertyNameArray.
        (JSPropertyNameArrayRelease): new release call for - " -.
        (JSPropertyNameArrayGetCount): Instead of having to use a stateful enumerator you
        can now get the count and items in any order.
        (JSPropertyNameArrayGetNameAtIndex): See above.
        (JSPropertyNameAccumulatorAddName): What you add properties to is now an opaque 
        accumulator object.
        * API/JSObjectRef.h: Prototyped new functions, removed old ones
        * JavaScriptCore.exp: Updated exported symbols.
        * JavaScriptCore.xcodeproj/project.pbxproj: Added new files, removed old.
        * API/testapi.c:
        (MyObject_getPropertyNames): Renamed / fixed callback to fit new paradigm.
        (main): Updated for new API.

2006-07-15  Darin Adler  <darin@apple.com>

        - oops, missed a few more arrays that had to be const

        * API/JSNode.c:
        (JSNodePrototype_appendChild): Added const.
        (JSNodePrototype_removeChild): Ditto.
        (JSNodePrototype_replaceChild): Ditto.
        (JSNode_construct): Ditto.
        * API/JSNodeList.c:
        (JSNodeListPrototype_item): Ditto.
        * API/JSObjectRef.cpp:
        (JSObjectMakeFunctionWithBody): Ditto.
        (JSObjectCallAsFunction): Ditto.
        (JSObjectCallAsConstructor): Ditto.
        * API/minidom.c:
        (print): Ditto.
        * API/testapi.c:
        (MyObject_callAsFunction): Ditto.
        (MyObject_callAsConstructor): Ditto.
        (print_callAsFunction): Ditto.
        (myConstructor_callAsConstructor): Ditto.

2006-07-15  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        * API/JSNode.h: Made an array parameter const.
        * API/JSObjectRef.h: Made array parameters const. Fixed a comment.

2006-07-15  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Maciej.
        
        - JSObjectMakeFunctionWithBody includes a function name and named parameters now.

        * API/JSObjectRef.cpp:
        (JSObjectMakeFunctionWithBody):
        * API/JSObjectRef.h:
        * API/testapi.c:
        (assertEqualsAsUTF8String): More informative failure reporting.
        (main): Test more function cases.

2006-07-15  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Maciej.

        - Moved the arguments passed to JSClassCreate into a single structure,
        called JSClassDefinition. This will enable easier structure 
        migration/versioning in the future, if necessary.
        
        - Added support for class names.
        
        - kJSClassDefinitionNull replaces kJSObjectCallbacksNone.
        
        - JSClass is becoming a fairly complex struct, so I migrated all of its
        implementation other than reference counting to the sruct.
        
        - Also moved JSClass* functions in the API to JSObjectRef.cpp, since they're
        declared in JSObjectRef.h
        
        - Also added some more informative explanation to the class structure doc.
        
2006-07-15  Darin Adler  <darin@apple.com>

        Reviewed by Geoff.

        - fix http://bugs.webkit.org/show_bug.cgi?id=8395
          <rdar://problem/4613467>
          REGRESSION: RegEx seems broken for hex escaped non breaking space

        Test: fast/js/regexp-extended-characters-more.html

        * pcre/pcre_exec.c:
        (match): Got rid of utf16Length local variable to guarantee there's no
        extra stack usage in recursive calls. Fixed two places in the PCRE_UTF16
        code that were using the length variable, which is the UTF-8 length of
        a character in the pattern, to move in the UTF-16 subject string. Instead
        they hardcode lengths of 1 and 2 since the code already handles BMP
        characters and surrogate pairs separately. Also fixed some DPRINTF so
        I could compile with DEBUG on.
        (pcre_exec): Changed a place that was checking for multibyte characters
        in the subject string to use ISMIDCHAR. Instead it was using hardcoded
        logic that was right for UTF-8 but wrong for UTF-16.

        * pcre/pcre_compile.c: (pcre_compile2): Fixed a DPRINTF so I could compile
        with DEBUG on.

2006-07-14  Geoffrey Garen  <ggaren@apple.com>

        RS by Maciej.
        
        Global replace in the API of argc/argv with argumentCount/arguments.

2006-07-14  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Maciej.
        
        - Finalized exception handling in the API.
        
        setProperty can throw because it throws for built-in arrays. getProperty
        and deleteProperty can throw because setProperty can throw and we want
        to be consistent, and also because they seem like "actions." callAsFunction,
        callAsConstructor, and hasInstance can throw, because they caan throw for
        all built-ins.
        
        toBoolean can't throw because it's defined that way in the spec.
        
        - Documented that toBoolean and toObject can't be overridden by custom 
        objects because they're defined that way in the spec.

=== Safari-521.17 ===

2006-07-14  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Maciej.
        
        - Implemented ref-counting of JSContexts by splitting into two datatypes:
        JSGlobalContext, which you can create/retain/release, and JSContext, which
        you can't.
        
        Internally, you retain a JSGlobalContext/ExecState by retaining its
        interpreter, which, in the case of a global ExecState, owns it.
        
        - Also made ~Interpreter() protected to catch places where Interpreter
        is manually deleted. (Can't make it private because some crazy fool
        decided it would be a good idea to subclass Interpreter in other frameworks.
        I pity da fool.)

        * API/APICast.h: 
        (toJS): Added cast for new JSGlobalContext
        * API/JSStringRef.h: Changed vague "you must" language to more specific
        (but, ultimately, equally vague) "behavior is undefined if you don't" 
        language.
        (KJS::Interpreter::Interpreter): Factored more common initialization into
        init()
        * kjs/interpreter.h:
        (KJS::Interpreter::ref): new
        (KJS::Interpreter::deref): new
        (KJS::Interpreter::refCount): new
        * kjs/testkjs.cpp: 
        (doIt): Ref-count the interpreter.

2006-07-14  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Geoff.
        
        - removed bool return value from JSObjectSetProperty, since it is inefficient and
        also doesn't work quite right
        - added JSObjectGetPropertyAtIndex and JSObjectSetPropertyAtIndex

        * API/JSObjectRef.cpp:
        (JSObjectSetProperty): Removed return value and canPut stuff.
        (JSObjectGetPropertyAtIndex): Added.
        (JSObjectSetPropertyAtIndex): Added.
        * API/JSObjectRef.h: Prototyped and documented new functions.

2006-07-14  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Beth.
        
        Moved JSCheckScriptSyntax, JSEvaluateScript, and JSGarbageCollect into
        JSBase.h/.cpp. They don't belong in the value-specific or context-specific 
        files because they're not part of the value or context implementations.

        * API/JSBase.h:
        * API/JSContextRef.cpp:
        (JSContextGetGlobalObject):
        * API/JSContextRef.h:
        * API/JSValueRef.cpp:
        (JSValueUnprotect):
        * API/JSValueRef.h:
        * JavaScriptCore.xcodeproj/project.pbxproj:

2006-07-13  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Maciej.

        Moved JavaScriptCore to be a public framework.

        * JavaScriptCore.xcodeproj/project.pbxproj:

2006-07-13  Mark Rowe  <opendarwin.org@bdash.net.nz>

        Reviewed by Geoffrey.

        http://bugs.webkit.org/show_bug.cgi?id=9742
        Bug 9742: REGRESSION: WebKit hangs when loading <http://www.vtbook.com>

        * kjs/value.h:
        (KJS::JSValue::getUInt32): Only types tagged as numeric can be converted to UInt32.

2006-07-13  Geoffrey Garen  <ggaren@apple.com>

        Pleasing to Maciej.
        
        - Renamed JSEvaluate -> JSEvaluateScript, JSCheckSyntax -> JSCheckScriptSyntax
        - Added exception out parameters to JSValueTo* and JSValueIsEqual because
        they can throw
        - Removed JSObjectGetDescription because it's useless and vague, and 
        JSValueToString/JSValueIsObjectOfClass do a better job, anyway
        - Clarified comments about "IsFunction/Constructor" to indicate that they
        are true of all functions/constructors, not just those created by JSObjectMake*

2006-07-12  Geoffrey Garen  <ggaren@apple.com>

        RS by Beth.
        
        Finished previously approved JSInternalString -> JSString conversion 
        by renaming the files.

        * API/JSCallbackObject.cpp:
        * API/JSInternalStringRef.cpp: Removed.
        * API/JSInternalStringRef.h: Removed.
        * API/JSStringRef.cpp: Added.
        * API/JSStringRef.h: Added.
        * API/JavaScriptCore.h:
        * JavaScriptCore.xcodeproj/project.pbxproj:

2006-07-12  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Maciej.
        
        - Removed context and exception parameters from JSObjectGetPropertyEnumerator,
        removing the spurious use of ExecState inside JavaScriptCore that made
        us think this was necessary in the first place.

        (StringInstance::getPropertyList): Use getString instead of toString because
        we know we're dealing with a string -- we put it there in the first place.
        While we're at it, store the string's size instead of retrieving it each time 
        through the loop, to avoid the unnecessary killing of puppies.
        * kjs/string_object.h:

2006-07-12  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Geoff.
        
        - add handling of hasInstance callback for API objects

        * API/JSCallbackObject.cpp:
        (KJS::JSCallbackObject::implementsHasInstance): Check if callback is present.
        (KJS::JSCallbackObject::hasInstance): Invoke appropriate callback.
        * API/JSCallbackObject.h:
        * API/JSClassRef.cpp:
        * API/JSObjectRef.h:
        * API/testapi.c:
        (MyObject_hasInstance): Test case; should match what construct would do.
        * API/testapi.js:

2006-07-11  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Maciej.
        
        - Implemented a vast number of renames and comment clarifications 
        suggested during API review.
        
        JSInternalString -> JSString
        JS*Make -> JSValueMake*, JSObjectMake*
        JSTypeCode -> JSType
        JSValueIsInstanceOf -> JSValueIsInstanceOfConstructor (reads strangely well in client code)
        JSGC*Protect -> JSValue*Protect
        JS*Callback -> JSObject*Callback
        JSGetPropertyListCallback -> JSObjectAddPropertiesToListCallback
        JSPropertyEnumeratorGetNext -> JSPropertyEnumeratorGetNextName
        JSString* -> 
            JSStringCreateWithUTF8CString, JSStringGetUTF8CString,
            JSStringGetMaximumUTF8CStringSize JSStringIsEqualToUTF8CString, 
            JSStringCreateWithCFString, JSStringCopyCFString, JSStringCreateWithCharacters.
        
        - Changed functions taking a JSValue out arg and returning a bool indicating
        whether it was set to simply return a JSValue or NULL.
        
        - Removed JSStringGetCharacters because it's more documentation than code,
        and it's just a glorified memcpy built on existing API functionality.
        
        - Moved standard library includes into the headers that actually require them.
        
        - Standardized use of the phrase "Create Rule."
        
        - Removed JSLock from make functions that don't allocate.
        
        - Added exception handling to JSValueToBoolean, since we now allow
        callback objects to throw exceptions upon converting to boolean.
        
        - Renamed JSGCCollect to JSGarbageCollect.

2006-07-10  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Darin.
        
        - Changed public header includes to the <JavaScriptCore/ style.
        - Changed instances of 'buffer' to 'string' since we decided on
        JSInternalString instead of JSStringBuffer.

        * API/JSContextRef.h:
        * API/JSInternalStringRef.cpp:
        (JSStringMake):
        (JSInternalStringRetain):
        (JSInternalStringRelease):
        (JSValueCopyStringValue):
        (JSInternalStringGetLength):
        (JSInternalStringGetCharactersPtr):
        (JSInternalStringGetCharacters):
        (JSInternalStringGetMaxLengthUTF8):
        (JSInternalStringGetCharactersUTF8):
        (CFStringCreateWithJSInternalString):
        * API/JSInternalStringRef.h:
        * API/JSNode.c:
        (JSNodePrototype_appendChild):
        (JSNode_getNodeType):
        * API/JSObjectRef.cpp:
        (JSObjectCallAsConstructor):
        * API/JSValueRef.h:
        * API/JavaScriptCore.h:
        * API/minidom.c:
        (main):
        (print):
        * API/testapi.c:
        (MyObject_getPropertyList):
        (myConstructor_callAsConstructor):
        (main): I noticed that we were prematurely releasing some string buffers,
        so I moved their release calls to the end of main(). I got rid of 'Buf' in *Buf
        (sometimes changing to 'IString', when necessary to differentiate a variable) 
        to match the buffer->string change.

=== Safari-521.16 ===

2006-07-10  Darin Adler  <darin@apple.com>

        * kjs/value.cpp: (KJS::JSValue::toInt32Inline): Added inline keyword one more place.
        Just in case.

2006-07-10  Darin Adler  <darin@apple.com>

        - fix the release build

        * kjs/value.h:
        * kjs/value.cpp:
        (KJS::JSValue::toInt32Inline): Move the code here to an inline.
        (KJS::JSValue::toInt32): Call the inline from both overloaded toInt32 functions.

2006-07-10  David Kilzer  <ddkilzer@kilzer.net>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=9179
          Implement select.options.add() method

        * JavaScriptCore.exp: Added overloaded KJS::JSValue::toInt32() method.
        * JavaScriptCore.xcodeproj/project.pbxproj: Altered attributes metadata for
        kjs/value.h to make it available as a forwarded header.
        * kjs/lookup.h:
        (KJS::lookupPut): Extracted a lookupPut() method from the existing lookupPut() method.
        The new method returns a boolean value if no entry is found in the lookup table.
        * kjs/value.cpp:
        (KJS::JSValue::toInt32): Overloaded toInt32() method with boolean "Ok" argument.
        * kjs/value.h: Ditto.

2006-07-10  Geoffrey Garen  <ggaren@apple.com>

        No review necessary. Removed bogus file I accidentally checked in before.

        * API/JSInternalSringRef.h: Removed.

2006-07-10  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Darin.
        
        Added exception out parameter to API object callbacks, removed semi-bogus
        JSContext(.*)Exception functions.
        
        To make these calls syntactically simple, I added an exceptionSlot()
        method to the ExecState class, which provides a JSValue** slot in which to 
        store a JSValue* exception.

        * API/APICast.h:
        (toRef):
        * API/JSCallbackConstructor.cpp:
        (KJS::JSCallbackConstructor::construct):
        * API/JSCallbackFunction.cpp:
        (KJS::JSCallbackFunction::callAsFunction):
        * API/JSCallbackObject.cpp:
        (KJS::JSCallbackObject::init):
        (KJS::JSCallbackObject::getOwnPropertySlot):
        (KJS::JSCallbackObject::put):
        (KJS::JSCallbackObject::deleteProperty):
        (KJS::JSCallbackObject::construct):
        (KJS::JSCallbackObject::callAsFunction):
        (KJS::JSCallbackObject::getPropertyList):
        (KJS::JSCallbackObject::toBoolean):
        (KJS::JSCallbackObject::toNumber):
        (KJS::JSCallbackObject::toString):
        (KJS::JSCallbackObject::staticValueGetter):
        (KJS::JSCallbackObject::callbackGetter):
        * API/JSContextRef.cpp:
        (JSCheckSyntax):
        * API/JSContextRef.h:
        * API/JSNode.c:
        (JSNodePrototype_appendChild):
        (JSNodePrototype_removeChild):
        (JSNodePrototype_replaceChild):
        (JSNode_getNodeType):
        (JSNode_getChildNodes):
        (JSNode_getFirstChild):
        (JSNode_construct):
        * API/JSNode.h:
        * API/JSNodeList.c:
        (JSNodeListPrototype_item):
        (JSNodeList_length):
        (JSNodeList_getProperty):
        * API/JSObjectRef.h:
        * API/minidom.c:
        (print):
        * API/testapi.c:
        (MyObject_initialize):
        (MyObject_hasProperty):
        (MyObject_getProperty):
        (MyObject_setProperty):
        (MyObject_deleteProperty):
        (MyObject_getPropertyList):
        (MyObject_callAsFunction):
        (MyObject_callAsConstructor):
        (MyObject_convertToType):
        (print_callAsFunction):
        (myConstructor_callAsConstructor):
        (main):
        * JavaScriptCore.exp:
        * kjs/ExecState.h:
        (KJS::ExecState::exceptionHandle):

2006-07-10  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Darin.

        Improved type safety by implementing opaque JSValue/JSObject typing through 
        abuse of 'const', not void*. Also fixed an alarming number of bugs
        exposed by this new type safety.
        
        I made one design change in JavaScriptCore, which is that the JSObject
        constructor should take a JSValue* as its prototype argument, not a JSObject*,
        since we allow the prototype to be any JSValue*, including jsNull(), for
        example.
        
        * API/APICast.h:
        (toJS):
        * API/JSBase.h:
        * API/JSCallbackConstructor.cpp:
        (KJS::JSCallbackConstructor::construct):
        * API/JSCallbackFunction.cpp:
        (KJS::JSCallbackFunction::callAsFunction):
        * API/JSCallbackObject.cpp:
        (KJS::JSCallbackObject::JSCallbackObject):
        (KJS::JSCallbackObject::getOwnPropertySlot):
        (KJS::JSCallbackObject::put):
        (KJS::JSCallbackObject::construct):
        (KJS::JSCallbackObject::callAsFunction):
        (KJS::JSCallbackObject::staticFunctionGetter):
        * API/JSCallbackObject.h:
        * API/JSContextRef.cpp:
        (JSEvaluate):
        * API/JSNode.c:
        (JSNodePrototype_appendChild):
        (JSNodePrototype_removeChild):
        (JSNodePrototype_replaceChild):
        * API/JSObjectRef.cpp:
        (JSObjectMake):
        (JSFunctionMakeWithBody):
        (JSObjectGetProperty):
        (JSObjectCallAsFunction):
        (JSObjectCallAsConstructor):
        * API/JSObjectRef.h:
        * API/testapi.c:
        (main):
        * ChangeLog:
        * kjs/object.h:
        (KJS::JSObject::JSObject):

2006-07-10  Geoffrey Garen  <ggaren@apple.com>

        Approved by Maciej, Darin.
        
        Renamed JSStringBufferRef to JSInternalStringRef. "Internal string" means the 
        JavaScript engine's internal string representation, which is the most 
        low-level and efficient representation to use when interfacing with JavaScript.

        * API/APICast.h:
        (toJS):
        (toRef):
        * API/JSBase.h:
        * API/JSCallbackObject.cpp:
        (KJS::JSCallbackObject::getOwnPropertySlot):
        (KJS::JSCallbackObject::put):
        (KJS::JSCallbackObject::deleteProperty):
        (KJS::JSCallbackObject::staticValueGetter):
        (KJS::JSCallbackObject::callbackGetter):
        * API/JSContextRef.cpp:
        (JSEvaluate):
        (JSCheckSyntax):
        * API/JSContextRef.h:
        * API/JSInternalStringRef.cpp: Added.
        (JSStringMake):
        (JSInternalStringCreate):
        (JSInternalStringCreateUTF8):
        (JSInternalStringRetain):
        (JSInternalStringRelease):
        (JSValueCopyStringValue):
        (JSInternalStringGetLength):
        (JSInternalStringGetCharactersPtr):
        (JSInternalStringGetCharacters):
        (JSInternalStringGetMaxLengthUTF8):
        (JSInternalStringGetCharactersUTF8):
        (JSInternalStringIsEqual):
        (JSInternalStringIsEqualUTF8):
        (JSInternalStringCreateCF):
        (CFStringCreateWithJSInternalString):
        * API/JSInternalStringRef.h: Added.
        * API/JSNode.c:
        (JSNodePrototype_appendChild):
        (JSNode_getNodeType):
        (JSNode_getChildNodes):
        (JSNode_getFirstChild):
        * API/JSNodeList.c:
        (JSNodeList_length):
        (JSNodeList_getProperty):
        * API/JSObjectRef.cpp:
        (JSFunctionMakeWithBody):
        (JSObjectGetDescription):
        (JSObjectHasProperty):
        (JSObjectGetProperty):
        (JSObjectSetProperty):
        (JSObjectDeleteProperty):
        (JSPropertyEnumeratorGetNext):
        (JSPropertyListAdd):
        * API/JSObjectRef.h:
        * API/JSStringBufferRef.cpp: Removed.
        * API/JSStringBufferRef.h: Removed.
        * API/JSValueRef.h:
        * API/JavaScriptCore.h:
        * API/minidom.c:
        (main):
        (print):
        * API/testapi.c:
        (assertEqualsAsUTF8String):
        (assertEqualsAsCharactersPtr):
        (assertEqualsAsCharacters):
        (MyObject_hasProperty):
        (MyObject_getProperty):
        (MyObject_setProperty):
        (MyObject_deleteProperty):
        (MyObject_getPropertyList):
        (print_callAsFunction):
        (myConstructor_callAsConstructor):
        (main):
        * JavaScriptCore.exp:
        * JavaScriptCore.xcodeproj/project.pbxproj:

2006-07-08  Tim Omernick  <timo@apple.com>

        Reviewed by Maciej.

        Added an OpenGL drawing model to the Netscape Plug-in API.

        * bindings/npapi.h:

2006-07-08  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Maciej.

        Moved KJS_GetCreatedJavaVMs to jni_utility.cpp.
        Switched KJS_GetCreatedJavaVMs over to use dlopen and dlsym
        now that NSAddImage, NSLookupSymbolInImage and NSAddressOfSymbol
        are deprecated in Leopard.

        * JavaScriptCore.exp:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * bindings/jni/jni_utility.cpp:
        (KJS::Bindings::KJS_GetCreatedJavaVMs):
        * bindings/softlinking.c: Removed.
        * bindings/softlinking.h: Removed.

2006-07-08  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Anders.
        
        - Make JSObjectGetProperty return a JSValue or NULL, like JSEvaluate does.

        * API/JSObjectRef.cpp:
        (JSObjectGetProperty):
        * API/JSObjectRef.h:
        * API/testapi.c:
        (main):

2006-07-08  Geoffrey Garen  <ggaren@apple.com>

        Style change -- no review necessary.
        
        Use 0 instead of NULL in API .cpp files, to match our style guidelines.

        * API/JSContextRef.cpp:
        (JSEvaluate):
        * API/JSObjectRef.cpp:
        (JSFunctionMakeWithBody):
        (JSObjectCallAsFunction):
        (JSObjectCallAsConstructor):
        * API/JSValueRef.cpp:
        (JSValueToObject):

2006-07-08  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by TimO.

        - Added ability to pass NULL for thisObject when calling JSObjectCallAsFunction,
        to match JSEvaluate.
        
        * API/JSObjectRef.cpp:
        (JSObjectCallAsFunction):
        * API/JSObjectRef.h:
        * API/testapi.c:
        (main):

=== Safari-521.15 ===

2006-07-07  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Maciej.
        
        - Standardized which functions take a JSContext as an argument. The rule is:
        if you might execute JavaScript, you take a JSContext, otherwise you don't.
        
        The FIXME in JSObjectRef.h requires refactoring some parts of Interpreter,
        but not API changes, so I'm putting it off until later.

        * API/JSCallbackObject.cpp:
        (KJS::JSCallbackObject::JSCallbackObject):
        (KJS::JSCallbackObject::init):
        * API/JSCallbackObject.h:
        * API/JSContextRef.cpp:
        (JSContextCreate):
        * API/JSContextRef.h:
        * API/JSObjectRef.cpp:
        (JSObjectMake):
        (JSPropertyEnumeratorGetNext):
        * API/JSObjectRef.h:
        * API/testapi.c:
        (MyObject_initialize):
        (main):
        * JavaScriptCore.exp:
        * kjs/array_object.cpp:
        (ArrayInstance::setLength):
        (ArrayInstance::pushUndefinedObjectsToEnd):
        * kjs/nodes.cpp:
        (ForInNode::execute):
        * kjs/reference.cpp:
        (KJS::Reference::getPropertyName):
        (KJS::Reference::getValue):
        * kjs/reference.h:
        * kjs/scope_chain.cpp:
        (KJS::ScopeChain::print):

2006-07-06  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Maciej.
        
        More API action.
        
        - Headerdoc finished

        Semantic Changes:
        - Added a JSContextRef argument to many functions, because you need a 
        JSContextRef for doing virtually anything. I expect to add this argument
        to even more functions in a future patch.
        
        - Removed the globalObjectPrototype argument to JSContextCreate because
        you can't create an object until you have a context, so it's impossible
        to pass a prototype object to JSContextCreate. That's OK because (1) there's
        no reason to give the global object a prototype and (2) if you really want
        to, you can just use a separate call to JSObjectSetPrototype.
        
        - Removed the JSClassRef argument to JSClassCreate because it was unnecessary,
        and you need to be able to make the global object's class before you've
        created a JSContext.
        
        - Added an optional exception parameter to JSFunctionMakeWithBody because anything
        less would be uncivilized.
        
        - Made the return value parameter to JSObjectGetProperty optional to match
        all other return value parameters in the API.
        
        - Made JSObjectSetPrivate/JSObjectGetPrivate work on JSCallbackFunctions
        and JSCallbackConstructors. You could use an abstract base class or strategic
        placement of m_privateData in the class structure to implement this, but 
        the former seemed like overkill, and the latter seemed too dangerous.
        
        - Fixed a bug where JSPropertyEnumeratorGetNext would skip the first property.

        Cosmetic Changes:
        - Reversed the logic of the JSChar #ifdef to avoid confusing headerdoc
        
        - Removed function names from @function declarations because headeroc
        can parse them automatically, and I wanted to rule out manual mismatch.

        - Changed Error::create to take a const UString& instead of a UString*
        because it was looking at me funny.
        
        - Renamed JSStringBufferCreateWithCFString to JSStringBufferCreateCF
        because the latter is more concise and it matches JSStringBufferCreateUTF8.
        
        * API/JSCallbackObject.cpp:
        (KJS::JSCallbackObject::getOwnPropertySlot):
        (KJS::JSCallbackObject::put):
        (KJS::JSCallbackObject::deleteProperty):
        (KJS::JSCallbackObject::getPropertyList):
        (KJS::JSCallbackObject::toBoolean):
        (KJS::JSCallbackObject::toNumber):
        (KJS::JSCallbackObject::toString):
        * API/JSClassRef.cpp:
        (JSClassCreate):
        * API/JSContextRef.cpp:
        (JSContextCreate):
        (JSContextSetException):
        * API/JSContextRef.h:
        * API/JSNode.c:
        (JSNodePrototype_class):
        (JSNode_class):
        * API/JSNodeList.c:
        (JSNodeListPrototype_class):
        (JSNodeList_class):
        * API/JSObjectRef.cpp:
        (JSObjectGetProperty):
        (JSObjectGetPrivate):
        (JSObjectSetPrivate):
        (JSObjectCallAsFunction):
        (JSObjectCallAsConstructor):
        (JSPropertyEnumeratorGetNext):
        * API/JSObjectRef.h:
        * API/JSStringBufferRef.cpp:
        (JSStringBufferCreateCF):
        * API/JSStringBufferRef.h:
        * API/JSValueRef.cpp:
        (JSValueIsInstanceOf):
        * API/JSValueRef.h:
        * API/minidom.c:
        (main):
        * API/minidom.js:
        * API/testapi.c:
        (MyObject_hasProperty):
        (MyObject_setProperty):
        (MyObject_deleteProperty):
        (MyObject_getPropertyList):
        (MyObject_convertToType):
        (MyObject_class):
        (main):
        * JavaScriptCore.exp:

2006-07-07  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by John.
        
        - Fixed a few crashes resulting from NULL parameters to JSClassCreate.

        * API/JSClassRef.cpp:
        (JSClassCreate):
        (JSClassRelease):
        * API/testapi.c: Added test for NULL parameters.
        (main):

2006-07-07  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by John, mocked by Darin.
        
        - Changed JSEvaluate to take a JSObjectRef instead of a JSValueRef as
        "this," since "this" must be an object.

        * API/JSContextRef.cpp:
        (JSEvaluate):
        * API/JSContextRef.h:

2006-07-07  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by John.
        
        - More headerdoc

        * API/JSBase.h:
        * JavaScriptCore.xcodeproj/project.pbxproj:

2006-07-05  Geoffrey Garen  <ggaren@apple.com>

        RS by Beth.
        
        Renamed JSCharBufferRef, which was universally unpopular, to JSStringBufferRef,
        which, hopefully, will be less unpopular.

        * API/APICast.h:
        (toJS):
        (toRef):
        * API/JSBase.h:
        * API/JSCallbackObject.cpp:
        (KJS::JSCallbackObject::getOwnPropertySlot):
        (KJS::JSCallbackObject::put):
        (KJS::JSCallbackObject::deleteProperty):
        (KJS::JSCallbackObject::staticValueGetter):
        (KJS::JSCallbackObject::callbackGetter):
        * API/JSCharBufferRef.cpp: Removed.
        * API/JSCharBufferRef.h: Removed.
        * API/JSContextRef.cpp:
        (JSEvaluate):
        (JSCheckSyntax):
        * API/JSContextRef.h:
        * API/JSNode.c:
        (JSNodePrototype_appendChild):
        (JSNode_getNodeType):
        (JSNode_getChildNodes):
        (JSNode_getFirstChild):
        * API/JSNodeList.c:
        (JSNodeList_length):
        (JSNodeList_getProperty):
        * API/JSObjectRef.cpp:
        (JSFunctionMakeWithBody):
        (JSObjectGetDescription):
        (JSObjectHasProperty):
        (JSObjectGetProperty):
        (JSObjectSetProperty):
        (JSObjectDeleteProperty):
        (JSPropertyEnumeratorGetNext):
        (JSPropertyListAdd):
        * API/JSObjectRef.h:
        * API/JSStringBufferRef.cpp: Added.
        (JSStringMake):
        (JSStringBufferCreate):
        (JSStringBufferCreateUTF8):
        (JSStringBufferRetain):
        (JSStringBufferRelease):
        (JSValueCopyStringValue):
        (JSStringBufferGetLength):
        (JSStringBufferGetCharactersPtr):
        (JSStringBufferGetCharacters):
        (JSStringBufferGetMaxLengthUTF8):
        (JSStringBufferGetCharactersUTF8):
        (JSStringBufferIsEqual):
        (JSStringBufferIsEqualUTF8):
        (JSStringBufferCreateWithCFString):
        (CFStringCreateWithJSStringBuffer):
        * API/JSStringBufferRef.h: Added.
        * API/JSValueRef.h:
        * API/JavaScriptCore.h:
        * API/minidom.c:
        (main):
        (print):
        * API/testapi.c:
        (assertEqualsAsUTF8String):
        (assertEqualsAsCharactersPtr):
        (assertEqualsAsCharacters):
        (MyObject_hasProperty):
        (MyObject_getProperty):
        (MyObject_setProperty):
        (MyObject_deleteProperty):
        (MyObject_getPropertyList):
        (print_callAsFunction):
        (myConstructor_callAsConstructor):
        (main):
        * JavaScriptCore.exp:
        * JavaScriptCore.xcodeproj/project.pbxproj:

2006-07-05  Geoffrey Garen  <ggaren@apple.com>

        RS by Beth.
        
        Moved some code around for more logical file separation.

        * API/JSBase.h:
        * API/JSContextRef.h:
        * API/JSObjectRef.cpp:
        * API/JSValueRef.cpp:
        (JSValueToObject):
        * API/JSValueRef.h:

2006-07-03  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Maciej.
        
        Implemented JSFunctionMakeWithBody, which parses a script as a function body
        in the global scope, and returns the resulting anonymous function.
        
        I also removed private data from JSCallbackFunction. It never worked,
        since JSCallbackFunction doesn't inherit from JSCallbackObject.

        * API/JSCallbackConstructor.cpp: Removed.
        * API/JSCallbackConstructor.h: Removed.
        * API/JSCallbackFunction.cpp:
        (KJS::JSCallbackFunction::JSCallbackFunction):
        (KJS::JSCallbackFunction::implementsConstruct):
        (KJS::JSCallbackFunction::construct):
        (KJS::JSCallbackFunction::implementsCall):
        (KJS::JSCallbackFunction::callAsFunction):
        * API/JSCallbackFunction.h:
        * API/JSCallbackObject.cpp:
        (KJS::JSCallbackObject::staticFunctionGetter):
        * API/JSObjectRef.cpp:
        (JSFunctionMake):
        (JSFunctionMakeWithCallbacks):
        * API/JSObjectRef.h:
        * API/JSValueRef.h:
        * API/minidom.c:
        (main):
        * API/testapi.c:
        (main):
        * JavaScriptCore.exp: Programmatically added all symbols exported by
        API object files, and sorted results
        * JavaScriptCore.xcodeproj/project.pbxproj:

2006-07-03  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Maciej.

        - Return syntax error in JSCheckSyntax through a JSValueRef* exception
        argument
        
        * API/JSBase.h:
        * API/JSContextRef.cpp:
        (JSCheckSyntax):
        * API/testapi.c:
        (main):
        * JavaScriptCore.exp:
        * kjs/interpreter.cpp:
        (KJS::Interpreter::checkSyntax):
        * kjs/interpreter.h:

2006-07-04  Darin Adler  <darin@apple.com>

        - fixed build

        * wtf/MathExtras.h: Oops. Added missing #endif.

2006-07-04  Bjoern Graf  <bjoern.graf@gmail.com>

        Reviewed by Maciej.
        Tweaked a bit by Darin.

        - http://bugs.webkit.org/show_bug.cgi?id=9678
          work around MSVCRT's fmod function returning NaN for fmod(x, infinity) instead of x

        * wtf/MathExtras.h: Added include of <float.h>.
        (isinf): Fix to return false for NAN.
        (wtf_fmod): Added. An inline that works around the bug.

        * kjs/nodes.cpp:
        * kjs/number_object.cpp:
        * kjs/operations.cpp:
        * kjs/value.cpp:
        Added includes of MathExtras.h to all files using fmod.

        * JavaScriptCore.xcodeproj/project.pbxproj: Let Xcode 2.3 have its way with
        the project.

2006-07-01  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Darin.
        
        - Refined value conversions in the API:
            - failed toNumber returns NaN
            - failed toObject returns NULL
            - failed toString returns empty string
        
        - Refined excpetion handling in the API:
            - failed value conversions do not throw exceptions
            - uncaught exceptions in JSEvaluate, JSObjectCallAsFunction, and 
              JSObjectCallAsConstructor are returned through a JSValueRef* exception
              argument
            - removed JSContextHasException, because JSContextGetException does
              the same job
            
        * API/JSBase.h:
        * API/JSCharBufferRef.cpp:
        (JSValueCopyStringValue):
        * API/JSContextRef.cpp:
        (JSEvaluate):
        * API/JSContextRef.h:
        * API/JSNodeList.c: Added test code demonstrating how you would use
        toNumber, and why you probably don't need toUInt32, etc.
        (JSNodeListPrototype_item):
        (JSNodeList_getProperty):
        * API/JSObjectRef.cpp:
        (JSValueToObject):
        (JSObjectCallAsFunction):
        (JSObjectCallAsConstructor):
        * API/JSObjectRef.h:
        * API/JSValueRef.cpp:
        (JSValueToNumber):
        * API/JSValueRef.h:
        * API/minidom.c:
        (main):
        * API/testapi.c:
        (main): Added tests for new rules, and call to JSGCProtect to fix Intel 
        crash
        * JavaScriptCore.exp:

2006-07-03  Darin Adler  <darin@apple.com>

        - Rolled out HashMap implementation of NPRuntime, at least temporarily.

        Fixes hang in the bindings section of layout tests seen on the
        buildbot.

        This code was using HashMap<const char*, PrivateIdentifier*>.
        But that hashes based on pointer identity, not string value.
        The default hash for any pointer type is to hash based on the pointer.
        And WTF doesn't currently have a string hash for char*.
        We'll need to fix that before re-landing this patch.

        (Formatting was also incorrect -- extra spaces in parentheses.)

        * bindings/npruntime.cpp: Rolled out last change.

2006-07-02  Justin Haygood  <jhaygood@spsu.edu>

        Reviewed, tweaked, landed by ggaren.

        - Port NPRuntime from CFDictionary to HashMap.

        * bindings/npruntime.cpp:
        (getStringIdentifierDictionary):
        (getIntIdentifierDictionary):
        (_NPN_GetStringIdentifier):
        (_NPN_GetIntIdentifier):
        * bindings/npruntime.h:

2006-07-01  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Adele.
        
        - Fixed <rdar://problem/4611197> REGRESSION: Liveconnect with Java test 
        fails at http://www-sor.inria.fr/~dedieu/notes/liveconnect/simple_example.html

        * JavaScriptCore.exp: Export symbols used by liveconnect

2006-06-29  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Maciej.
        
        - Phase 2 in the JS API.
        
        - Added support for specifying static tables of values -- this should
        obviate the need for using complicated callbacks for most lookups.
        
        -  API objects are now created with classes (JSClassRef) -- in order to support
        static values, and in order to prevent API objects from storing their
        data inline, and thus falling into the oversized (read: slow and prone to
        giving Maciej the frowny face) heap.
        
        - Added two specialized JSObject subclasses -- JSCallbackFunction and JSCallbackConstructor -- 
        to allow JSFunctionMake and JSConstructorMake to continue to work with
        the new class model. Another solution to this problem would be to create
        a custom class object for each function and constructor you make. This
        solution is more code but also more efficient.
        
        - Substantially beefed up the minidom example to demonstrate and test a
        lot of these techniques. Its output is still pretty haphazard, though.
        
        - Gave the <kjs/ preface to some includes -- I'm told this matters to
        building on some versions of Linux.
        
        - Implemented JSValueIsInstanceOf and JSValueIsObjectOfClass
        
        - Removed GetDescription callback. Something in the class datastructure
        should take care of this.

        * API/JSBase.h:
        * API/JSCallbackConstructor.cpp: Added.
        (KJS::):
        (KJS::JSCallbackConstructor::JSCallbackConstructor):
        (KJS::JSCallbackConstructor::implementsConstruct):
        (KJS::JSCallbackConstructor::construct):
        (KJS::JSCallbackConstructor::setPrivate):
        (KJS::JSCallbackConstructor::getPrivate):
        * API/JSCallbackConstructor.h: Added.
        (KJS::JSCallbackConstructor::classInfo):
        * API/JSCallbackFunction.cpp: Added.
        (KJS::):
        (KJS::JSCallbackFunction::JSCallbackFunction):
        (KJS::JSCallbackFunction::implementsCall):
        (KJS::JSCallbackFunction::callAsFunction):
        (KJS::JSCallbackFunction::setPrivate):
        (KJS::JSCallbackFunction::getPrivate):
        * API/JSCallbackFunction.h: Added.
        (KJS::JSCallbackFunction::classInfo):
        * API/JSCallbackObject.cpp:
        (KJS::):
        (KJS::JSCallbackObject::JSCallbackObject):
        (KJS::JSCallbackObject::init):
        (KJS::JSCallbackObject::~JSCallbackObject):
        (KJS::JSCallbackObject::className):
        (KJS::JSCallbackObject::getOwnPropertySlot):
        (KJS::JSCallbackObject::put):
        (KJS::JSCallbackObject::deleteProperty):
        (KJS::JSCallbackObject::implementsConstruct):
        (KJS::JSCallbackObject::construct):
        (KJS::JSCallbackObject::implementsCall):
        (KJS::JSCallbackObject::callAsFunction):
        (KJS::JSCallbackObject::getPropertyList):
        (KJS::JSCallbackObject::toBoolean):
        (KJS::JSCallbackObject::toNumber):
        (KJS::JSCallbackObject::toString):
        (KJS::JSCallbackObject::inherits):
        (KJS::JSCallbackObject::staticValueGetter):
        (KJS::JSCallbackObject::staticFunctionGetter):
        (KJS::JSCallbackObject::callbackGetter):
        * API/JSCallbackObject.h:
        * API/JSCharBufferRef.cpp:
        * API/JSClassRef.cpp: Added.
        (JSClassCreate):
        (JSClassRetain):
        (JSClassRelease):
        * API/JSClassRef.h: Added.
        (StaticValueEntry::StaticValueEntry):
        (StaticFunctionEntry::StaticFunctionEntry):
        (__JSClass::__JSClass):
        * API/JSContextRef.cpp:
        (JSContextCreate):
        (JSEvaluate):
        * API/JSContextRef.h:
        * API/JSNode.c: Added.
        (JSNodePrototype_appendChild):
        (JSNodePrototype_removeChild):
        (JSNodePrototype_replaceChild):
        (JSNodePrototype_class):
        (JSNode_getNodeType):
        (JSNode_getChildNodes):
        (JSNode_getFirstChild):
        (JSNode_finalize):
        (JSNode_class):
        (JSNode_prototype):
        (JSNode_new):
        (JSNode_construct):
        * API/JSNode.h: Added.
        * API/JSNodeList.c: Added.
        (JSNodeListPrototype_item):
        (JSNodeListPrototype_class):
        (JSNodeList_length):
        (JSNodeList_getProperty):
        (JSNodeList_finalize):
        (JSNodeList_class):
        (JSNodeList_prototype):
        (JSNodeList_new):
        * API/JSNodeList.h: Added.
        * API/JSObjectRef.cpp:
        (JSObjectMake):
        (JSFunctionMake):
        (JSConstructorMake):
        (__JSPropertyEnumerator::__JSPropertyEnumerator):
        (JSObjectCreatePropertyEnumerator):
        (JSPropertyEnumeratorGetNext):
        (JSPropertyEnumeratorRetain):
        (JSPropertyEnumeratorRelease):
        * API/JSObjectRef.h:
        (__JSObjectCallbacks::):
        * API/JSValueRef.cpp:
        (JSValueIsObjectOfClass):
        (JSValueIsInstanceOf):
        * API/JSValueRef.h:
        * API/Node.c: Added.
        (Node_new):
        (Node_appendChild):
        (Node_removeChild):
        (Node_replaceChild):
        (Node_ref):
        (Node_deref):
        * API/Node.h: Added.
        * API/NodeList.c: Added.
        (NodeList_new):
        (NodeList_length):
        (NodeList_item):
        (NodeList_ref):
        (NodeList_deref):
        * API/NodeList.h: Added.
        * API/minidom.c:
        (main):
        (print):
        (createStringWithContentsOfFile):
        * API/minidom.js:
        * API/testapi.c:
        (assertEqualsAsCharacters):
        (MyObject_getProperty):
        (MyObject_class):
        (myConstructor_callAsConstructor):
        (main):
        * API/testapi.js:
        * JavaScriptCore.xcodeproj/project.pbxproj:

2006-06-26  Kevin Ollivier  <kevino@theolliviers.com>
        
        Reviewed and tweaked by Darin.

        - Compile fixes for wx port / gcc 4.0.2

        * kjs/array_object.cpp:
        Added missing headers. 

        * kjs/ExecState.h:
        gcc needs class prototypes before defining those classes as friend classes

2006-06-30  Mike Emmel  <mike.emmel@gmail.com>

        Reviewed by Darin.

        Compilation fixes for Linux/Gdk.

        * JavaScriptCore/kjs/interpreter.cpp: added include of signal.h
        * JavaScriptCore/kjs/ExecState.h: added missing class declaration 
        * JavaScriptCore/kjs/ExecState.cpp: case wrong on include of context.h 
        * JavaScriptCore/JavaScriptCoreSources.bkl: added Context.cpp and ExecState.cpp

=== Safari-521.14 ===

2006-06-29  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Geoff.
        
        - add headerdoc comments to some of the new JS API headers

        * API/JSBase.h:
        * API/JSValueRef.h:

2006-06-28  Timothy Hatcher  <timothy@apple.com>

        Prefer the Stabs debugging symbols format until DWARF bugs are fixed.

        * JavaScriptCore.xcodeproj/project.pbxproj:

2006-06-27  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Tim O.

        <rdar://problem/4448350> Deprecated ObjC language API used in JavaScriptCore, WebCore, WebKit and WebBrowser

        Switch to the new ObjC 2 API, ifdefed the old code around OBJC_API_VERSION so it still works on Tiger.
        Removed the use of the old stringWithCString, switched to the new Tiger version that accepts an encoding.
        Lots of code style cleanup.

        * JavaScriptCore.xcodeproj/project.pbxproj:
        * bindings/objc/objc_class.h:
        * bindings/objc/objc_class.mm:
        (KJS::Bindings::ObjcClass::~ObjcClass):
        (KJS::Bindings::_createClassesByIsAIfNecessary):
        (KJS::Bindings::ObjcClass::classForIsA):
        (KJS::Bindings::ObjcClass::name):
        (KJS::Bindings::ObjcClass::methodsNamed):
        (KJS::Bindings::ObjcClass::fieldNamed):
        (KJS::Bindings::ObjcClass::fallbackObject):
        * bindings/objc/objc_header.h:
        * bindings/objc/objc_instance.h:
        * bindings/objc/objc_instance.mm:
        (ObjcInstance::ObjcInstance):
        (ObjcInstance::~ObjcInstance):
        (ObjcInstance::operator=):
        (ObjcInstance::begin):
        (ObjcInstance::end):
        (ObjcInstance::getClass):
        (ObjcInstance::invokeMethod):
        (ObjcInstance::invokeDefaultMethod):
        (ObjcInstance::setValueOfField):
        (ObjcInstance::supportsSetValueOfUndefinedField):
        (ObjcInstance::setValueOfUndefinedField):
        (ObjcInstance::getValueOfField):
        (ObjcInstance::getValueOfUndefinedField):
        (ObjcInstance::defaultValue):
        (ObjcInstance::stringValue):
        (ObjcInstance::numberValue):
        (ObjcInstance::booleanValue):
        (ObjcInstance::valueOf):
        * bindings/objc/objc_runtime.h:
        * bindings/objc/objc_runtime.mm:
        (ObjcMethod::ObjcMethod):
        (ObjcMethod::name):
        (ObjcMethod::getMethodSignature):
        (ObjcMethod::setJavaScriptName):
        (ObjcField::name):
        (ObjcField::type):
        (ObjcField::valueFromInstance):
        (convertValueToObjcObject):
        (ObjcField::setValueToInstance):
        (ObjcArray::operator=):
        (ObjcArray::setValueAt):
        (ObjcArray::valueAt):
        (ObjcFallbackObjectImp::ObjcFallbackObjectImp):
        (ObjcFallbackObjectImp::callAsFunction):
        (ObjcFallbackObjectImp::defaultValue):

2006-06-28  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Geoff.

        http://bugs.webkit.org/show_bug.cgi?id=8636
        REGRESSION: JavaScript access to Java applet causes hang (_webViewURL not implemented)

        * bindings/jni/jni_objc.mm:
        (KJS::Bindings::dispatchJNICall):
        Just pass nil as the calling URL. This will cause the Java plugin to use the URL of the page
        containing the applet (which is what we used to do).

2006-06-27  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Darin.

        <rdar://problem/4406785> Add an export file to TOT JavaScriptCore like the Safari-2-0-branch

        * JavaScriptCore.exp: Added.
        * JavaScriptCore.xcodeproj/project.pbxproj:

2006-06-25  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Adele.
        
        - Added JSConstructorMake to match JSFunctionMake, along with test code.
        
        [ I checked in the ChangeLog before without the actual files. ]

        * API/JSObjectRef.cpp:
        (JSConstructorMake):
        * API/JSObjectRef.h:
        * API/testapi.c:
        (myConstructor_callAsConstructor):
        (main):
        * API/testapi.js:
        * ChangeLog:
        * JavaScriptCore.xcodeproj/project.pbxproj: Moved testapi.c to the testapi
        target -- this was an oversight in my earlier check-in.

2006-06-25  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Darin.

        Bug 9574: Drosera should show inline scripts within the original HTML
        http://bugs.webkit.org/show_bug.cgi?id=9574

        Pass the starting line number and error message to the debugger.

        * kjs/debugger.cpp:
        (Debugger::sourceParsed):
        * kjs/debugger.h:
        * kjs/function.cpp:
        (KJS::GlobalFuncImp::callAsFunction):
        * kjs/function_object.cpp:
        (FunctionObjectImp::construct):
        * kjs/interpreter.cpp:
        (KJS::Interpreter::evaluate):

2006-06-24  Alexey Proskuryakov  <ap@nypop.com>

        Rubber-stamped by Eric.

        Add a -h (do not follow symlinks) option to ln in derived sources build script (without it,
        a symlink was created inside the source directory on second build).

        * JavaScriptCore.xcodeproj/project.pbxproj:

2006-06-24  David Kilzer  <ddkilzer@kilzer.net>

        Reviewed by Timothy.

        * Info.plist: Fixed copyright to include 2003-2006.

2006-06-24  Alexey Proskuryakov  <ap@nypop.com>

        Reviewed by Darin.

        - http://bugs.webkit.org/show_bug.cgi?id=9418
        WebKit will not build when Space exists in path

        * JavaScriptCore.xcodeproj/project.pbxproj: Enclose search paths in quotes; create symlinks to 
        avoid passing paths with spaces to make.

2006-06-23  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Darin.

        Adding more operator[] overloads for long and short types.

        * wtf/Vector.h:
        (WTF::Vector::operator[]):

=== JavaScriptCore-521.13 ===

2006-06-22  Alexey Proskuryakov  <ap@nypop.com>

        Build fix.

        - http://bugs.webkit.org/show_bug.cgi?id=9539
        Another case error preventing build

        * API/JSObjectRef.cpp: Changed "identifier.h" to "Identifier.h"
        
2006-06-22  David Kilzer  <ddkilzer@kilzer.net>

        Build fix.

        http://bugs.webkit.org/show_bug.cgi?id=9539
        Another case error preventing build

        * API/APICast.h: Changed "UString.h" to "ustring.h".

2006-06-21  Geoffrey Garen  <ggaren@apple.com>

        Fixed release build, fixed accidental infinite recursion due to
        last minute global replace gone awry.
        
        * API/APICast.h:
        (toRef):
        * API/testapi.c:
        (assertEqualsAsBoolean):
        (assertEqualsAsNumber):
        (assertEqualsAsUTF8String):
        (assertEqualsAsCharactersPtr):
        * JavaScriptCore.xcodeproj/project.pbxproj:

2006-06-21  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Anders.
        
        - First cut at C API to JavaScript. Includes a unit test, 'testapi.c', 
        and the outline of a test app, 'minidom.c'.
        
        Includes one change to JSC internals: Rename propList to getPropertyList and have it
        take its target property list by reference so that subclasses can
        add properties to the list before calling through to their superclasses.
        
        Also, I just ran prepare-ChangeLog in about 10 seconds, and I would like
        to give a shout-out to that.
        
        * API/APICast.h: Added.
        (toJS):
        (toRef):
        * API/JSBase.h: Added.
        * API/JSCallbackObject.cpp: Added.
        (KJS::):
        (KJS::JSCallbackObject::JSCallbackObject):
        (KJS::JSCallbackObject::~JSCallbackObject):
        (KJS::JSCallbackObject::className):
        (KJS::JSCallbackObject::getOwnPropertySlot):
        (KJS::JSCallbackObject::put):
        (KJS::JSCallbackObject::deleteProperty):
        (KJS::JSCallbackObject::implementsConstruct):
        (KJS::JSCallbackObject::construct):
        (KJS::JSCallbackObject::implementsCall):
        (KJS::JSCallbackObject::callAsFunction):
        (KJS::JSCallbackObject::getPropertyList):
        (KJS::JSCallbackObject::toBoolean):
        (KJS::JSCallbackObject::toNumber):
        (KJS::JSCallbackObject::toString):
        (KJS::JSCallbackObject::setPrivate):
        (KJS::JSCallbackObject::getPrivate):
        (KJS::JSCallbackObject::cachedValueGetter):
        (KJS::JSCallbackObject::callbackGetter):
        * API/JSCallbackObject.h: Added.
        (KJS::JSCallbackObject::classInfo):
        * API/JSCharBufferRef.cpp: Added.
        (JSStringMake):
        (JSCharBufferCreate):
        (JSCharBufferCreateUTF8):
        (JSCharBufferRetain):
        (JSCharBufferRelease):
        (JSValueCopyStringValue):
        (JSCharBufferGetLength):
        (JSCharBufferGetCharactersPtr):
        (JSCharBufferGetCharacters):
        (JSCharBufferGetMaxLengthUTF8):
        (JSCharBufferGetCharactersUTF8):
        (JSCharBufferIsEqual):
        (JSCharBufferIsEqualUTF8):
        (JSCharBufferCreateWithCFString):
        (CFStringCreateWithJSCharBuffer):
        * API/JSCharBufferRef.h: Added.
        * API/JSContextRef.cpp: Added.
        (JSContextCreate):
        (JSContextDestroy):
        (JSContextGetGlobalObject):
        (JSEvaluate):
        (JSCheckSyntax):
        (JSContextHasException):
        (JSContextGetException):
        (JSContextClearException):
        (JSContextSetException):
        * API/JSContextRef.h: Added.
        * API/JSObjectRef.cpp: Added.
        (JSValueToObject):
        (JSObjectMake):
        (JSFunctionMake):
        (JSObjectGetDescription):
        (JSObjectGetPrototype):
        (JSObjectSetPrototype):
        (JSObjectHasProperty):
        (JSObjectGetProperty):
        (JSObjectSetProperty):
        (JSObjectDeleteProperty):
        (JSObjectGetPrivate):
        (JSObjectSetPrivate):
        (JSObjectIsFunction):
        (JSObjectCallAsFunction):
        (JSObjectIsConstructor):
        (JSObjectCallAsConstructor):
        (__JSPropertyListEnumerator::__JSPropertyListEnumerator):
        (JSObjectCreatePropertyEnumerator):
        (JSPropertyEnumeratorGetNext):
        (JSPropertyEnumeratorRetain):
        (JSPropertyEnumeratorRelease):
        (JSPropertyListAdd):
        * API/JSObjectRef.h: Added.
        * API/JSValueRef.cpp: Added.
        (JSValueGetType):
        (JSValueIsUndefined):
        (JSValueIsNull):
        (JSValueIsBoolean):
        (JSValueIsNumber):
        (JSValueIsString):
        (JSValueIsObject):
        (JSValueIsEqual):
        (JSValueIsStrictEqual):
        (JSUndefinedMake):
        (JSNullMake):
        (JSBooleanMake):
        (JSNumberMake):
        (JSValueToBoolean):
        (JSValueToNumber):
        (JSGCProtect):
        (JSGCUnprotect):
        (JSGCCollect):
        * API/JSValueRef.h: Added.
        * API/JavaScriptCore.h: Added.
        * API/minidom.c: Added.
        (main):
        * API/minidom.html: Added.
        * API/minidom.js: Added.
        * API/testapi.c: Added.
        (assertEqualsAsBoolean):
        (assertEqualsAsNumber):
        (assertEqualsAsUTF8String):
        (assertEqualsAsCharactersPtr):
        (assertEqualsAsCharacters):
        (MyObject_initialize):
        (MyObject_copyDescription):
        (MyObject_hasProperty):
        (MyObject_getProperty):
        (MyObject_setProperty):
        (MyObject_deleteProperty):
        (MyObject_getPropertyList):
        (MyObject_callAsFunction):
        (MyObject_callAsConstructor):
        (MyObject_convertToType):
        (MyObject_finalize):
        (print_callAsFunction):
        (main):
        (createStringWithContentsOfFile):
        * API/testapi.js: Added.
        * ChangeLog:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * bindings/npruntime_impl.h:
        * kjs/array_instance.h:
        * kjs/array_object.cpp:
        (ArrayInstance::getPropertyList):
        * kjs/interpreter.cpp:
        (KJS::Interpreter::evaluate):
        * kjs/nodes.cpp:
        (ForInNode::execute):
        * kjs/object.cpp:
        (KJS::JSObject::put):
        (KJS::JSObject::canPut):
        (KJS::JSObject::deleteProperty):
        (KJS::JSObject::propertyIsEnumerable):
        (KJS::JSObject::getPropertyAttributes):
        (KJS::JSObject::getPropertyList):
        * kjs/object.h:
        * kjs/property_map.cpp:
        (KJS::PropertyMap::get):
        * kjs/property_map.h:
        * kjs/scope_chain.cpp:
        (KJS::ScopeChain::print):
        * kjs/string_object.cpp:
        (StringInstance::getPropertyList):
        * kjs/string_object.h:
        * kjs/ustring.h:
        (KJS::UString::Rep::ref):

2006-06-20  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Geoff.

        Make sure we clear the exception before returning so
        that future calls will not fail because of an earlier
        exception state. Assert on entry that the WebScriptObject
        is working with an ExecState that dose not have an exception. 
        Document that evaluateWebScript and callWebScriptMethod return
        WebUndefined when an exception is thrown.

        * bindings/objc/WebScriptObject.h:
        * bindings/objc/WebScriptObject.mm:
        (-[WebScriptObject callWebScriptMethod:withArguments:]):
        (-[WebScriptObject evaluateWebScript:]):
        (-[WebScriptObject setValue:forKey:]):
        (-[WebScriptObject valueForKey:]):
        (-[WebScriptObject removeWebScriptKey:]):
        (-[WebScriptObject webScriptValueAtIndex:]):
        (-[WebScriptObject setWebScriptValueAtIndex:value:]):

2006-06-19  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by John.

        * kjs/interpreter.cpp:
        (KJS::TimeoutChecker::pauseTimeoutCheck):
        (KJS::TimeoutChecker::resumeTimeoutCheck):
        Fix argument order in setitimer calls.

2006-06-18  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Geoff.

        * kjs/interpreter.cpp:
        (KJS::TimeoutChecker::pauseTimeoutCheck):
        Do nothing if the timeout check hasn't been started.
        
        (KJS::TimeoutChecker::resumeTimeoutCheck):
        Do nothing if the timeout check hasn't been started.
        Use the right signal handler when unblocking.
        
        (KJS::Interpreter::handleTimeout):
        pause/resume the timeout check around the call to
        shouldInterruptScript().
        
2006-06-16  Ben Goodger <beng@google.com>
        
        Reviewed by Maciej

        http://bugs.webkit.org/show_bug.cgi?id=9491
        Windows build breaks in interpreter.cpp 

        * kjs/interpreter.cpp
        (KJS::TimeoutChecker::pauseTimeoutCheck):
        (KJS::TimeoutChecker::resumeTimeoutCheck):
        Make sure to only assert equality with s_executingInterpreter when it 
        is being used (i.e. when HAVE(SYS_TIME_H) == true)

2006-06-17  David Kilzer  <ddkilzer@kilzer.net>

        Reviewed by darin.

        http://bugs.webkit.org/show_bug.cgi?id=9477
        REGRESSION: fast/dom/replaceChild.html crashes on WebKit ToT in debug build

        * kjs/function.cpp:
        (KJS::FunctionImp::callAsFunction): Refetch the debugger after executing the function
        in case the WebFrame it was running in has since been destroyed.

2006-06-17  David Kilzer  <ddkilzer@kilzer.net>

        Reviewed by ggaren.

        http://bugs.webkit.org/show_bug.cgi?id=9476
        REGRESSION: Reproducible crash after closing window after viewing
        css2.1/t0803-c5501-imrgn-t-00-b-ag.html

        * kjs/debugger.cpp:
        (Debugger::detach): Call setDebugger(0) for all interpreters removed from
        the 'attached to a debugger' list.

2006-06-17  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Maciej and Geoff.

        http://bugs.webkit.org/show_bug.cgi?id=7080
        Provide some way to stop a JavaScript infinite loop
        
        * kjs/completion.h:
        (KJS::):
        Add Interrupted completion type.
        
        * kjs/function.cpp:
        (KJS::FunctionImp::callAsFunction):
        (KJS::GlobalFuncImp::callAsFunction):
        Only set the exception on the new ExecState if the current one has had one.
        
        * kjs/interpreter.cpp:
        (KJS::TimeoutChecker::startTimeoutCheck):
        (KJS::TimeoutChecker::stopTimeoutCheck):
        (KJS::TimeoutChecker::alarmHandler):
        (KJS::TimeoutChecker::pauseTimeoutCheck):
        (KJS::TimeoutChecker::resumeTimeoutCheck):
        New TimeoutChecker class which handles setting Interpreter::m_timedOut flag after a given
        period of time. This currently only works on Unix platforms where setitimer and signals are used.
        
        (KJS::Interpreter::Interpreter):
        Initialize new member variables.
        
        (KJS::Interpreter::~Interpreter):
        Destroy the timeout checker.
        
        (KJS::Interpreter::startTimeoutCheck):
        (KJS::Interpreter::stopTimeoutCheck):
        (KJS::Interpreter::pauseTimeoutCheck):
        (KJS::Interpreter::resumeTimeoutCheck):
        Call the timeout checker.
        
        (KJS::Interpreter::handleTimeout):
        Called on timeout. Resets the m_timedOut flag and calls shouldInterruptScript.
        
        * kjs/interpreter.h:
        (KJS::Interpreter::setTimeoutTime):
        New function for setting the timeout time.
        
        (KJS::Interpreter::shouldInterruptScript):
        New function. The idea is that this should be overridden by subclasses in order to for example
        pop up a dialog asking the user if the script should be interrupted.
        
        (KJS::Interpreter::checkTimeout):
        New function which checks the m_timedOut flag and calls handleTimeout if it's set.
        
        * kjs/nodes.cpp:
        (DoWhileNode::execute):
        (WhileNode::execute):
        (ForNode::execute):
        Call Interpreter::checkTimeout after each iteration of the loop.

2006-06-15  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Geoff and Darin.
        
        Prefer the DWARF debugging symbols format for use in Xcode 2.3.

        * JavaScriptCore.xcodeproj/project.pbxproj:

2006-06-14  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Beth.
        
        - fixed http://bugs.webkit.org/show_bug.cgi?id=9438
        Someone broke ToT: cannot build

        * JavaScriptCore.xcodeproj/project.pbxproj:
        * bindings/runtime_root.h: Changed "Interpreter.h" to "interpreter.h"

2006-06-12  Geoffrey Garen  <ggaren@apple.com>

        build fix
        
        * bindings/objc/WebScriptObject.mm:
        (+[WebScriptObject throwException:]): Restore assignment I accidentally
        deleted in previous commit

2006-06-12  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by TimO, Maciej.
        
        - Merged InterpreterImp code into Interpreter, which implements
        all interpreter functionality now. This is part of my continuing quest
        to create an external notion of JS "execution context" that is unified and simple --
        something to replace the mix of Context, ContextImp, ExecState, Interpreter,
        InterpreterImp, and JSRun.
        
        All tests pass. Leaks test has not regressed from its baseline ~207 leaks
        with ~3460 leaked nodes.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * bindings/NP_jsobject.cpp:
        * bindings/objc/WebScriptObject.mm:
        (+[WebScriptObject throwException:]):
        * bindings/runtime_root.cpp:
        * bindings/runtime_root.h:
        * kjs/Context.cpp:
        (KJS::Context::Context):
        * kjs/ExecState.cpp: Added.
        (KJS::ExecState::lexicalInterpreter):
        * kjs/ExecState.h: Added.
        (KJS::ExecState::dynamicInterpreter):
        * kjs/SavedBuiltins.h: Added.
        * kjs/bool_object.cpp:
        (BooleanPrototype::BooleanPrototype):
        * kjs/collector.cpp:
        (KJS::Collector::collect):
        (KJS::Collector::numInterpreters):
        * kjs/context.h:
        * kjs/debugger.cpp:
        (Debugger::attach):
        (Debugger::detach):
        * kjs/function.cpp:
        (KJS::FunctionImp::callAsFunction):
        (KJS::GlobalFuncImp::callAsFunction):
        * kjs/function_object.cpp:
        (FunctionObjectImp::construct):
        * kjs/internal.cpp:
        * kjs/internal.h:
        * kjs/interpreter.cpp:
        (KJS::interpreterMap):
        (KJS::Interpreter::Interpreter):
        (KJS::Interpreter::init):
        (KJS::Interpreter::~Interpreter):
        (KJS::Interpreter::globalObject):
        (KJS::Interpreter::initGlobalObject):
        (KJS::Interpreter::globalExec):
        (KJS::Interpreter::checkSyntax):
        (KJS::Interpreter::evaluate):
        (KJS::Interpreter::builtinObject):
        (KJS::Interpreter::builtinFunction):
        (KJS::Interpreter::builtinArray):
        (KJS::Interpreter::builtinBoolean):
        (KJS::Interpreter::builtinString):
        (KJS::Interpreter::builtinNumber):
        (KJS::Interpreter::builtinDate):
        (KJS::Interpreter::builtinRegExp):
        (KJS::Interpreter::builtinError):
        (KJS::Interpreter::builtinObjectPrototype):
        (KJS::Interpreter::builtinFunctionPrototype):
        (KJS::Interpreter::builtinArrayPrototype):
        (KJS::Interpreter::builtinBooleanPrototype):
        (KJS::Interpreter::builtinStringPrototype):
        (KJS::Interpreter::builtinNumberPrototype):
        (KJS::Interpreter::builtinDatePrototype):
        (KJS::Interpreter::builtinRegExpPrototype):
        (KJS::Interpreter::builtinErrorPrototype):
        (KJS::Interpreter::builtinEvalError):
        (KJS::Interpreter::builtinRangeError):
        (KJS::Interpreter::builtinReferenceError):
        (KJS::Interpreter::builtinSyntaxError):
        (KJS::Interpreter::builtinTypeError):
        (KJS::Interpreter::builtinURIError):
        (KJS::Interpreter::builtinEvalErrorPrototype):
        (KJS::Interpreter::builtinRangeErrorPrototype):
        (KJS::Interpreter::builtinReferenceErrorPrototype):
        (KJS::Interpreter::builtinSyntaxErrorPrototype):
        (KJS::Interpreter::builtinTypeErrorPrototype):
        (KJS::Interpreter::builtinURIErrorPrototype):
        (KJS::Interpreter::mark):
        (KJS::Interpreter::interpreterWithGlobalObject):
        (KJS::Interpreter::saveBuiltins):
        (KJS::Interpreter::restoreBuiltins):
        * kjs/interpreter.h:
        (KJS::Interpreter::setCompatMode):
        (KJS::Interpreter::compatMode):
        (KJS::Interpreter::firstInterpreter):
        (KJS::Interpreter::nextInterpreter):
        (KJS::Interpreter::prevInterpreter):
        (KJS::Interpreter::debugger):
        (KJS::Interpreter::setDebugger):
        (KJS::Interpreter::setContext):
        (KJS::Interpreter::context):
        * kjs/nodes.cpp:
        (StatementNode::hitStatement):
        (RegExpNode::evaluate):
        * kjs/protect.h:

2006-06-12  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Maciej.
        
        - Have *.lut.h files #include lookup.h to eliminate surprising header
        include order dependency.

        * DerivedSources.make:
        * kjs/array_object.cpp:
        * kjs/date_object.cpp:
        * kjs/date_object.h:
        (KJS::DateProtoFunc::):
        * kjs/lexer.cpp:
        * kjs/math_object.cpp:
        * kjs/number_object.cpp:
        * kjs/regexp_object.cpp:
        * kjs/string_object.cpp:

2006-06-10  Geoffrey Garen  <ggaren@apple.com>

        - http://bugs.webkit.org/show_bug.cgi?id=8515
        Linux porting compile bug
        
        Fix by Mike Emmel, Reviewed by Darin.

        * JavaScriptCoreSources.bkl:
        * jscore.bkl:
        * wtf/Platform.h:

2006-06-09  Geoffrey Garen  <ggaren@apple.com>

        Build fix -- I think :).

        * JavaScriptCore.xcodeproj/project.pbxproj:
        * kjs/context.h:

2006-06-09  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Eric (yay!).
        
        - Removed Context wrapper for ContextImp, renamed ContextImp to Context,
        split Context into its own file -- Context.cpp -- renamed _var to m_var,
        change ' *' to '* '.

        * JavaScriptCore.xcodeproj/project.pbxproj:
        * kjs/Context.cpp: Added.
        (KJS::Context::Context):
        (KJS::Context::~Context):
        (KJS::Context::mark):
        * kjs/context.h:
        (KJS::Context::scopeChain):
        (KJS::Context::variableObject):
        (KJS::Context::setVariableObject):
        (KJS::Context::thisValue):
        (KJS::Context::callingContext):
        (KJS::Context::activationObject):
        (KJS::Context::currentBody):
        (KJS::Context::function):
        (KJS::Context::arguments):
        (KJS::Context::pushScope):
        (KJS::Context::seenLabels):
        * kjs/function.cpp:
        (KJS::FunctionImp::callAsFunction):
        (KJS::FunctionImp::processParameters):
        (KJS::FunctionImp::argumentsGetter):
        (KJS::GlobalFuncImp::callAsFunction):
        * kjs/internal.cpp:
        (KJS::InterpreterImp::evaluate):
        * kjs/internal.h:
        (KJS::InterpreterImp::setContext):
        (KJS::InterpreterImp::context):
        * kjs/interpreter.cpp:
        * kjs/interpreter.h:
        (KJS::ExecState::context):
        (KJS::ExecState::ExecState):
        * kjs/nodes.cpp:
        (currentSourceId):
        (currentSourceURL):
        (ThisNode::evaluate):
        (ResolveNode::evaluate):
        (FunctionCallResolveNode::evaluate):
        (PostfixResolveNode::evaluate):
        (DeleteResolveNode::evaluate):
        (TypeOfResolveNode::evaluate):
        (PrefixResolveNode::evaluate):
        (AssignResolveNode::evaluate):
        (VarDeclNode::evaluate):
        (VarDeclNode::processVarDecls):
        (DoWhileNode::execute):
        (WhileNode::execute):
        (ForNode::execute):
        (ForInNode::execute):
        (ContinueNode::execute):
        (BreakNode::execute):
        (ReturnNode::execute):
        (WithNode::execute):
        (SwitchNode::execute):
        (LabelNode::execute):
        (TryNode::execute):
        (FuncDeclNode::processFuncDecl):
        (FuncExprNode::evaluate):

2006-06-07  Geoffrey Garen  <ggaren@apple.com>

        Removed API directory I prematurely/accidentally added.

        * API: Removed.

2006-06-05  Mitz Pettel  <opendarwin.org@mitzpettel.com>

        Reviewed and landed by Geoff.

        - fix a regression in ecma_3/String/regress-104375.js

        * kjs/string_object.cpp:
        (substituteBackreferences): If a 2-digit back reference is out of range,
        parse it as a 1-digit reference (followed by the other digit). This matches
        Firefox's behavior.

2006-06-05  Geoffrey Garen  <ggaren@apple.com>

        Reviewed By Maciej.
        Darin already reviewed this change on the branch. See <rdar://problem/4317701>.
        
        - Fixed <rdar://problem/4291345> PCRE overflow in Safari JavaScriptCore

        No test case because there's no behavior change.
        
        * pcre/pcre_compile.c:
        (read_repeat_counts): Check for integer overflow / out of bounds

2006-06-05  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by aliu.

        - Changed CString length from int to size_t. We sould probably do this
        for UString, too. (Darin, if you're reading this: Maciej said so.)
        
        * kjs/function.cpp:
        (KJS::encode):
        * kjs/ustring.cpp:
        (KJS::CString::CString):
        (KJS::operator==):
        * kjs/ustring.h:
        (KJS::CString::size):

2006-06-04  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Maciej.
        
        - http://bugs.webkit.org/show_bug.cgi?id=9304
        Minor cleanup in JavaScriptCore

        * kjs/value.h: Removed redundant declarations

2006-06-04  Darin Adler  <darin@apple.com>

        Reviewed by Anders.

        - changed deleteAllValues so it can work on "const" collections
          Deleting the values affects the values, not the pointers in the
          collection, so it's legitimate to do it to a const collection,
          and a case of that actually came up in the XPath code.

        * wtf/HashMap.h:
        (WTF::deleteAllPairSeconds): Use const iterators.
        (WTF::deleteAllValues): Take const HashMap reference as a parameter.
        * wtf/HashSet.h:
        (WTF::deleteAllValues): Take const HashSet reference as a parameter,
        and use const iterators.
        * wtf/Vector.h:
        (WTF::deleteAllValues): Take const Vector reference as a parameter.

        - added more functions that are present in <math.h> on some platforms,
          but not on others; moved here from various files in WebCore

        * wtf/MathExtras.h:
        (isinf): Added.
        (isnan): Added.
        (lround): Added.
        (lroundf): Tweaked.
        (round): Added.
        (roundf): Tweaked.
        (signbit): Added.

2006-06-02  Mitz Pettel  <opendarwin.org@mitzpettel.com>

        Reviewed by ggaren.

        - http://bugs.webkit.org/show_bug.cgi?id=9234
          Implement $&, $' and $` replacement codes in String.prototype.replace

        Test: fast/js/string-replace-3.html

        * kjs/string_object.cpp:
        (substituteBackreferences): Added support for $& (matched substring),
        $` (everything preceding matched substring), $' (everything following
        matched substring) and 2-digit back references, and cleaned up a little.

2006-06-02 Adele Peterson  <adele@apple.com>

        Reviewed by Darin.

        Set incremental linking to no. This seems to fix a build problem I was seeing
        where dftables couldn't find a dll. 

        * JavaScriptCore.vcproj/dftables/dftables.vcproj:

2006-05-26  Steve Falkenburg  <sfalken@apple.com>

        Build fixes/tweaks

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:

=== JavaScriptCore-521.11 ===

2006-05-24  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by mjs.
        
        - JSC half of fix for <rdar://problem/4557926> TOT REGRESSSION: Crash
        occurs when attempting to view image in slideshow mode at
        http://d.smugmug.com/gallery/581716 ( KJS::IfNode::execute
        (KJS::ExecState*) + 312)

        On alternate threads, DOMObjects remain in the
        ScriptInterpreter's cache because they're not collected. So, they
        need an opportunity to mark their children.
        
        I'm not particularly happy with this solution because it fails to
        resolve many outstanding issues with the DOM object cache. Since none
        of those issues is a crasher or a serious compatibility concern,
        and since the behavior of other browsers is not much to go on in this
        case, I've filed <rdar://problem/4561439> about that, and I'm moving on 
        with my life.

        * JavaScriptCore.xcodeproj/project.pbxproj:
        * kjs/collector.cpp:
        (KJS::Collector::collect):
        * kjs/internal.cpp:
        (KJS::InterpreterImp::mark):
        * kjs/internal.h:
        * kjs/interpreter.cpp:
        (KJS::Interpreter::mark):
        * kjs/interpreter.h:

=== JavaScriptCore-521.10 ===

2006-05-22  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Eric, Kevin and Geoff.

        Merge open source build fixes. <rdar://problem/4555500>

        * kjs/collector.cpp: look at the rsp register in x86_64 
        (KJS::Collector::markOtherThreadConservatively):
        * wtf/Platform.h: add x86_64 to the platform list

2006-05-19  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Geoff.

        http://bugs.webkit.org/show_bug.cgi?id=8993
        Support function declaration in case statements
        
        * kjs/grammar.y: Get rid of StatementList and use SourceElements instead.
        
        * kjs/nodes.cpp:
        (CaseClauseNode::evalStatements):
        (CaseClauseNode::processVarDecls):
        (CaseClauseNode::processFuncDecl):
        (ClauseListNode::processFuncDecl):
        (CaseBlockNode::processFuncDecl):
        (SwitchNode::processFuncDecl):
        * kjs/nodes.h:
        (KJS::CaseClauseNode::CaseClauseNode):
        (KJS::ClauseListNode::ClauseListNode):
        (KJS::ClauseListNode::getClause):
        (KJS::ClauseListNode::getNext):
        (KJS::ClauseListNode::releaseNext):
        (KJS::SwitchNode::SwitchNode):
        Add processFuncDecl for the relevant nodes.        

        * kjs/nodes2string.cpp:
        (CaseClauseNode::streamTo):
        next got renamed to source.

2006-05-17  George Staikos <staikos@kde.org>

        Reviewed by Maciej, Alexey, and Eric.

        * pcre/pcre_compile.c:
        * pcre/pcre_get.c:
        * pcre/pcre_exec.c:
        * wtf/UnusedParam.h:
        Use /**/ in .c files to compile with non-C99 and non-GCC compilers.

        * kjs/testkjs.cpp:
        Change include to <wtf/HashTraits.h> from "HashTraits.h" to avoid -I

        * wtf/unicode/qt4/UnicodeQt4.h:
        Use correct parentheses and correct mask for utf-32 support.

2006-05-17  Alexey Proskuryakov  <ap@nypop.com>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=8870
        Crash typing in Yahoo auto-complete widget.

        Test: fast/js/regexp-stack-overflow.html

        * pcre/pcre-config.h: Define NO_RECURSE.

2006-05-16  George Staikos <staikos@kde.org>

        Reviewed by Maciej.

        Fix some warnings and strict compilation errors.

        * kjs/nodes.cpp: 
        * kjs/value.cpp: 

2006-05-15  Alexey Proskuryakov  <ap@nypop.com>

        * make-generated-sources.sh: Changed to be executable and removed
        text in the file generated by "svn diff".

2006-05-15  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Maciej.

        - Fixed <rdar://problem/4534904> please do not treat "debugger" as
        a reserved word while parsing JavaScript (and other ECMA reserved
        words) 

        AKA 

        http://bugs.webkit.org/show_bug.cgi?id=6179 
        We treat "char" as a reserved word in JavaScript and firefox/IE do
        not

        (1) I unreserved most of the spec's "future reserved words" because 
        they're not reserved in IE or FF. (Most, but not all, because IE
        somewhat randomly *does* reserve a few of them.)
        (2) I made 'debugger' a legitimate statement that acts like an empty
        statement because FF and IE support it.
        
        * kjs/grammar.y:
        * kjs/keywords.table:

2006-05-15  Tim Omernick  <timo@apple.com>

        Reviewed by John Sullivan.

        Part of <rdar://problem/4466508> Add 64-bit support to the Netscape Plugin API

        Added to the Netscape Plugin API the concept of "plugin drawing models".  The drawing model
        determines the kind of graphics context created by the browser for the plugin, as well as 
        the Mac types of various Netscape Plugin API data structures.

        There is a drawing model to represent the old QuickDraw-based API.  It is used by default
        if QuickDraw is available on the system, unless the plugin specifies another drawing model.

        The big change is the addition of the CoreGraphics drawing model.  A plugin may request this
        drawing model to obtain access to a CGContextRef for drawing, instead of a QuickDraw CGrafPtr.

        * bindings/npapi.h:
        Define NP_NO_QUICKDRAW when compiling 64-bit; there is no 64-bit QuickDraw.
        Added NPNVpluginDrawingModel, NPNVsupportsQuickDrawBool, and NPNVsupportsCoreGraphicsBool
        variables.
        Added NPDrawingModel enumeration.  Currently the only drawing models are QuickDraw and
        CoreGraphics.
        NPRegion's type now depends on the drawing model specified by the plugin.
        NP_Port is now only defined when QuickDraw is available.
        Added NP_CGContext, which is the type of the NPWindow's "window" member in CoreGraphics mode.

2006-05-13  Kevin M. Ollivier  <kevino@theolliviers.com>

        Reviewed by Darin, landed by ap.

        - http://bugs.webkit.org/show_bug.cgi?id=8528
          Bakefiles (and generated Makefiles) for wx and gdk ports

        * make-generated-sources.sh: 
        Added script to configure environment to run DerivedSources.make
        
        * JavaScriptCoreSources.bkl:
        Added JavaScriptCore sources list for Bakefile.
        
        * jscore.bkl:
        Bakefile used to generate JavaScriptCore project files 
        (currently only used by wx and gdk ports)

2006-05-09  Steve Falkenburg  <sfalken@apple.com>

        Fix Windows build.
        Minor fixes to WTF headers.
        
        Reviewed by kevin.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Fix include dirs, paths to files. 
        * JavaScriptCore.vcproj/testkjs/testkjs.vcproj: Fix include dirs.
        * wtf/Assertions.h: include Platform.h to get definition for COMPILER()
        * wtf/Vector.h: include FastMalloc.h for definition of fastMalloc, fastFree

2006-05-09  Maciej Stachowiak  <mjs@apple.com>

        Rubber stamped by Anders.
        
        - renamed kxmlcore to wtf
        
        kxmlcore --> wtf
        KXMLCore --> WTF
        KXC --> WTF

        * JavaScriptCore.xcodeproj/project.pbxproj:
        * bindings/c/c_instance.cpp:
        * bindings/objc/WebScriptObject.mm:
        * kjs/JSImmediate.h:
        * kjs/Parser.cpp:
        * kjs/Parser.h:
        * kjs/array_object.cpp:
        * kjs/collector.cpp:
        (KJS::Collector::registerThread):
        * kjs/collector.h:
        * kjs/config.h:
        * kjs/function.cpp:
        (KJS::isStrWhiteSpace):
        * kjs/function.h:
        * kjs/identifier.cpp:
        * kjs/internal.cpp:
        * kjs/internal.h:
        * kjs/lexer.cpp:
        (Lexer::shift):
        (Lexer::isWhiteSpace):
        (Lexer::isIdentStart):
        (Lexer::isIdentPart):
        * kjs/lookup.cpp:
        * kjs/nodes.cpp:
        * kjs/nodes.h:
        * kjs/number_object.cpp:
        * kjs/object.h:
        * kjs/property_map.cpp:
        * kjs/property_map.h:
        * kjs/string_object.cpp:
        (StringProtoFunc::callAsFunction):
        * kjs/testkjs.cpp:
        (testIsInteger):
        * kjs/ustring.cpp:
        * kjs/ustring.h:
        * kxmlcore: Removed.
        * kxmlcore/AlwaysInline.h: Removed.
        * kxmlcore/Assertions.cpp: Removed.
        * kxmlcore/Assertions.h: Removed.
        * kxmlcore/FastMalloc.cpp: Removed.
        * kxmlcore/FastMalloc.h: Removed.
        * kxmlcore/FastMallocInternal.h: Removed.
        * kxmlcore/Forward.h: Removed.
        * kxmlcore/HashCountedSet.h: Removed.
        * kxmlcore/HashFunctions.h: Removed.
        * kxmlcore/HashMap.h: Removed.
        * kxmlcore/HashSet.h: Removed.
        * kxmlcore/HashTable.cpp: Removed.
        * kxmlcore/HashTable.h: Removed.
        * kxmlcore/HashTraits.h: Removed.
        * kxmlcore/ListRefPtr.h: Removed.
        * kxmlcore/Noncopyable.h: Removed.
        * kxmlcore/OwnArrayPtr.h: Removed.
        * kxmlcore/OwnPtr.h: Removed.
        * kxmlcore/PassRefPtr.h: Removed.
        * kxmlcore/Platform.h: Removed.
        * kxmlcore/RefPtr.h: Removed.
        * kxmlcore/TCPageMap.h: Removed.
        * kxmlcore/TCSpinLock.h: Removed.
        * kxmlcore/TCSystemAlloc.cpp: Removed.
        * kxmlcore/TCSystemAlloc.h: Removed.
        * kxmlcore/UnusedParam.h: Removed.
        * kxmlcore/Vector.h: Removed.
        * kxmlcore/VectorTraits.h: Removed.
        * kxmlcore/unicode: Removed.
        * kxmlcore/unicode/Unicode.h: Removed.
        * kxmlcore/unicode/UnicodeCategory.h: Removed.
        * kxmlcore/unicode/icu: Removed.
        * kxmlcore/unicode/icu/UnicodeIcu.h: Removed.
        * kxmlcore/unicode/posix: Removed.
        * kxmlcore/unicode/qt3: Removed.
        * kxmlcore/unicode/qt4: Removed.
        * kxmlcore/unicode/qt4/UnicodeQt4.h: Removed.
        * pcre/pcre_get.c:
        * wtf: Added.
        * wtf/Assertions.cpp:
        * wtf/Assertions.h:
        * wtf/FastMalloc.cpp:
        (WTF::TCMalloc_ThreadCache::Scavenge):
        (WTF::do_malloc):
        (WTF::do_free):
        (WTF::TCMallocGuard::TCMallocGuard):
        (WTF::malloc):
        (WTF::free):
        (WTF::calloc):
        (WTF::cfree):
        (WTF::realloc):
        * wtf/FastMalloc.h:
        * wtf/FastMallocInternal.h:
        * wtf/Forward.h:
        * wtf/HashCountedSet.h:
        * wtf/HashFunctions.h:
        * wtf/HashMap.h:
        * wtf/HashSet.h:
        * wtf/HashTable.cpp:
        * wtf/HashTable.h:
        * wtf/HashTraits.h:
        * wtf/ListRefPtr.h:
        * wtf/Noncopyable.h:
        * wtf/OwnArrayPtr.h:
        * wtf/OwnPtr.h:
        * wtf/PassRefPtr.h:
        * wtf/RefPtr.h:
        * wtf/TCSystemAlloc.cpp:
        (TCMalloc_SystemAlloc):
        * wtf/Vector.h:
        * wtf/VectorTraits.h:
        * wtf/unicode/UnicodeCategory.h:
        * wtf/unicode/icu/UnicodeIcu.h:

2006-05-08  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Tim O.

        * bindings/npapi.h: do not define #pragma options align=mac68k if we are 64-bit

2006-05-07  Darin Adler  <darin@apple.com>

        Reviewed and landed by Maciej.

        - fix http://bugs.webkit.org/show_bug.cgi?id=8765
        Random crashes on TOT since the form state change
        
        I haven't figured out how to construct a test for this, but this does seem to fix the
        problem; Mitz mentioned that a double-destroy was occurring in these functions.
        
        * kxmlcore/HashMap.h: (KXMLCore::HashMap::remove): Use RefCounter::deref instead of calling
        ~ValueType, because ~ValueType often results in a double-destroy, since the HashTable also
        destroys the element based on the storage type. The RefCounter template correctly does work
        only in cases where ValueType and ValueStorageType differ and this class is what's used
        elsewhere for the same purpose; I somehow missed this case when optimizing HashMap.
        * kxmlcore/HashSet.h: (KXMLCore::HashSet::remove): Ditto.
        
2006-05-05  Darin Adler  <darin@apple.com>

        - http://bugs.webkit.org/show_bug.cgi?id=8722
          IE compatibility fix in date parsing

        * kjs/date_object.cpp: (KJS::parseDate): Merged change that George Staikos provided
        from KDE 3.4.3 branch that allows day values of 0 and values that are > 1000.

2006-05-04  Anders Carlsson  <andersca@mac.com>

        Reviewed by Maciej.

        http://bugs.webkit.org/show_bug.cgi?id=8734
        Would like a Vector::append that takes another Vector
        
        * kxmlcore/Vector.h:
        (KXMLCore::::append):
        New function that takes another array.

2006-05-02  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by eric.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: set NDEBUG for release build
        * kxmlcore/FastMalloc.cpp: Prevent USE_SYSTEM_MALLOC from being defined twice

2006-05-02  Anders Carlsson  <andersca@mac.com>

        Reviewed by Maciej.

        * kxmlcore/HashMap.h:
        (KXMLCore::::operator):
        Return *this

2006-05-01  Tim Omernick  <timo@apple.com>

        Reviewed by Tim Hatcher.

        <rdar://problem/4476875> Support printing for embedded Netscape plugins

        * bindings/npapi.h:
        Fixed struct alignment problem in our npapi.h.  Structs must be 68k-aligned on both pre-Mac OS X
        and Mac OS X systems, as this is what plugins expect.

2006-05-01  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Maciej.
        
        <rdar://problem/4308243> 8F36 Regression: crash in malloc_consolidate if you use a .PAC file

        The original fix missed the oversized cell case. Added a test for "currentThreadIsMainThread || 
        imp->m_destructorIsThreadSafe" where we collect oversized cells.

        We don't have a way to test PAC files yet, so there's no test attached.

        * kjs/collector.cpp:
        (KJS::Collector::collect): test the thread when we collect oversized cells

2006-05-01  Tim Omernick  <timo@apple.com>

        Reviewed by Adele.

        <rdar://problem/4526114> REGRESSION (two days ago): LOG() just prints @ for NSObject substitutions

        * kxmlcore/Assertions.cpp:
        Changed sense of strstr("%@") check.  I already made the same fix to the WebBrowser assertions.

2006-04-28  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by kdecker
        
        Actually apply the change that was reviewed insted of checking it in with an #if 0 (oops).

        * kjs/testkjs.cpp:
        (main): Suppress C runtime alerts

2006-04-28  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by kdecker

        Suppress error reporting dialog that blocks Javascript tests from completing.
        
        Real error is due to an overflow in the date/time handling functions that needs
        to be addressed, but this will prevent the hang running the Javascript tests
        on the build bot (along with the related changes).
        
        * kjs/testkjs.cpp:
        (main): Suppress C runtime alerts

2006-04-27  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Maciej

        - Minor fixups I discovered while working on the autogenerator.
        
        * kjs/lookup.cpp:
        (findEntry): ASSERT that size is not 0, because otherwise we'll % by 0,
        compute a garbage address, and possibly crash.
        * kjs/lookup.h:
        (cacheGlobalObject): Don't enumerate cached objects -- ideally, they
        would be hidden entirely.

2006-04-21  Kevin M. Ollivier  <kevino@theolliviers.com>

        Reviewed by Darin.

        - http://bugs.webkit.org/show_bug.cgi?id=8507
          Compilation fixes for building on gcc 4.0.2, and without precomp headers

        * kjs/operations.h:
        * kxmlcore/Assertions.cpp:
        * kxmlcore/FastMalloc.cpp:
        Added necessary headers to resolve compilation issues when not using
        precompiled headers.
        
        * kjs/value.h: Declare the JSCell class before friend declaration  
        to resolve compilation issues with gcc 4.0.2.
        
        * kxmlcore/Platform.h: Set Unicode support to use ICU on platforms
        other than KDE (previously only defined for Win and Mac OS)
                
2006-04-18  Eric Seidel  <eseidel@apple.com>

        Reviewed by ggaren.

        Fix "new Function()" to correctly use lexical scoping.
        Add ScopeChain::print() function for debugging.
        <rdar://problem/4067864> REGRESSION (125-407): JavaScript failure on PeopleSoft REN Server

        * kjs/function_object.cpp:
        (FunctionObjectImp::construct):
        * kjs/scope_chain.cpp:
        (KJS::ScopeChain::print):
        * kjs/scope_chain.h:

2006-04-14  James G. Speth  <speth@end.com>

        Reviewed by Timothy.

        Bug 8389: support for Cocoa bindings - binding an NSTreeController to the WebView's DOM
        http://bugs.webkit.org/show_bug.cgi?id=8389

        Adds a category to WebScriptObject with array accessors for KVC/KVO.

        If super valueForKey: fails it will call valueForUndefinedKey:, which is
        important because it causes the right behavior to happen with bindings using
        the "Raises for Not Applicable Keys" flag and the "Not Applicable Placeholder"

        * bindings/objc/WebScriptObject.mm:
        (-[WebScriptObject valueForKey:]):
        (-[WebScriptObject count]):
        (-[WebScriptObject objectAtIndex:]):
        (-[WebUndefined description]): return "undefined"

2006-04-13  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Darin.

        * kjs/internal.cpp:
        (KJS::InterpreterImp::initGlobalObject): Add the built-in object
        prototype to the end of the global object's prototype chain instead of
        just blowing away its existing prototype. We need to do this because
        the window object has a meaningful prototype now.

2006-04-13  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Geoff.
        
        - fix testkjs to not show false-positive KJS::Node leaks in debug builds

        * kjs/testkjs.cpp:
        (doIt):
        (kjsmain):

2006-04-11  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Maciej.

        Minor code cleanup -- passes all the JS tests.

        * kjs/object_object.cpp:
        (ObjectObjectImp::construct):
        (ObjectObjectImp::callAsFunction):

2006-04-11  Darin Adler  <darin@apple.com>

        - another attempt to fix Windows build -- Vector in Forward.h was not working

        * kxmlcore/Forward.h: Remove Vector.
        * kxmlcore/Vector.h: Add back default arguments, remove include of
        Forward.h.

2006-04-11  Darin Adler  <darin@apple.com>

        - try to fix Windows build -- HashForward.h was not working

        * kxmlcore/HashForward.h: Removed.

        * JavaScriptCore.xcodeproj/project.pbxproj: Remove HashForward.h.
        * kjs/collector.h: Remove use of HashForward.h.
        * kxmlcore/HashCountedSet.h: Remove include of HashForward.h, restore
        default arguments.
        * kxmlcore/HashMap.h: Ditto.
        * kxmlcore/HashSet.h: Ditto.

2006-04-11  David Harrison  <harrison@apple.com>

        Reviewed by Darin.

        - fixed clean build, broken by Darin's check-in

        * kjs/date_object.cpp: Add needed include of lookup.h.
        * kjs/regexp_object.cpp: Move include of .lut.h file below other includes.

2006-04-10  Darin Adler  <darin@apple.com>

        Rubber-stamped by John Sullivan.

        - switched from a shell script to a makefile for generated files
        - removed lots of unneeded includes
        - added new Forward.h and HashForward.h headers that allow compiling with
          fewer unneeded templates

        * DerivedSources.make: Added.
        * generate-derived-sources: Removed.
        * JavaScriptCore.xcodeproj/project.pbxproj: Added new files, changed to use
        DerivedSources.make.

        * kxmlcore/Forward.h: Added.
        * kxmlcore/HashForward.h: Added.

        * kxmlcore/HashCountedSet.h: Include HashForward for default args.
        * kxmlcore/HashMap.h: Ditto.
        * kxmlcore/HashSet.h: Ditto.

        * kjs/object.h:
        * kjs/object.cpp:
        Moved KJS_MAX_STACK into the .cpp file.

        * bindings/NP_jsobject.cpp:
        * bindings/c/c_instance.h:
        * bindings/jni/jni_class.h:
        * bindings/jni/jni_runtime.h:
        * bindings/jni/jni_utility.h:
        * bindings/objc/WebScriptObject.mm:
        * bindings/objc/WebScriptObjectPrivate.h:
        * bindings/objc/objc_class.h:
        * bindings/objc/objc_class.mm:
        * bindings/objc/objc_instance.h:
        * bindings/objc/objc_instance.mm:
        * bindings/objc/objc_runtime.mm:
        * bindings/objc/objc_utility.mm:
        * bindings/runtime.h:
        * bindings/runtime_array.cpp:
        * bindings/runtime_array.h:
        * bindings/runtime_method.cpp:
        * bindings/runtime_method.h:
        * bindings/runtime_object.cpp:
        * bindings/runtime_root.h:
        * kjs/JSImmediate.cpp:
        * kjs/Parser.h:
        * kjs/array_object.cpp:
        * kjs/array_object.h:
        * kjs/bool_object.cpp:
        * kjs/bool_object.h:
        * kjs/collector.h:
        * kjs/context.h:
        * kjs/debugger.cpp:
        * kjs/error_object.h:
        * kjs/function_object.h:
        * kjs/internal.h:
        * kjs/lexer.cpp:
        * kjs/math_object.cpp:
        * kjs/math_object.h:
        * kjs/nodes.cpp:
        * kjs/nodes.h:
        * kjs/number_object.cpp:
        * kjs/number_object.h:
        * kjs/object_object.cpp:
        * kjs/operations.cpp:
        * kjs/protected_reference.h:
        * kjs/reference.h:
        * kjs/reference_list.h:
        * kjs/regexp_object.h:
        * kjs/string_object.cpp:
        * kjs/string_object.h:
        * kjs/testkjs.cpp:
        * kjs/value.cpp:
        * kjs/value.h:
        * kxmlcore/HashTable.h:
        * kxmlcore/ListRefPtr.h:
        * kxmlcore/TCPageMap.h:
        * kxmlcore/Vector.h:
        Removed unneeded header includes.

2006-04-09  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by eric.

        - Fixed http://bugs.webkit.org/show_bug.cgi?id=8284
        prevent unnecessary entries in the "nodes with extra refs" hash table

        This patch switches manually RefPtr exchange with use of
        RefPtr::release to ensure that a node's ref count never tops 1
        (in the normal case).

        * kjs/nodes.cpp:
        (BlockNode::BlockNode):
        (CaseBlockNode::CaseBlockNode):
        * kjs/nodes.h:
        (KJS::ArrayNode::ArrayNode):
        (KJS::ObjectLiteralNode::ObjectLiteralNode):
        (KJS::ArgumentsNode::ArgumentsNode):
        (KJS::VarStatementNode::VarStatementNode):
        (KJS::ForNode::ForNode):
        (KJS::CaseClauseNode::CaseClauseNode):
        (KJS::FuncExprNode::FuncExprNode):
        (KJS::FuncDeclNode::FuncDeclNode):

2006-04-08  Alexey Proskuryakov  <ap@nypop.com>

        Reviewed by Darin.

        One more attempt - use reinterpret_cast, rather than static_cast.

2006-04-08  Alexey Proskuryakov  <ap@nypop.com>

        Reviewed by Darin.

        An attempt to fix Win32 build - ICU uses wchar_t on Windows, so we need a type cast.

        * kxmlcore/unicode/icu/UnicodeIcu.h:
        (KXMLCore::Unicode::toLower):
        (KXMLCore::Unicode::toUpper):

2006-04-08  Alexey Proskuryakov  <ap@nypop.com>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=8264
        toLowerCase and toUpperCase don't honor special mappings

        Test: fast/js/string-capitalization.html

        * JavaScriptCore.xcodeproj/project.pbxproj: Added KXMLCore::Unicode headers to the project.
        * icu/unicode/putil.h: Added (copied from WebCore).
        * icu/unicode/uiter.h: Ditto.
        * icu/unicode/ustring.h: Ditto.
        * kjs/string_object.cpp:
        (StringProtoFunc::callAsFunction): Use the new KXMLCore::Unicode::toUpper() and toLower().
        * kjs/ustring.cpp: Removed unused (and evil) UChar::toLower() and toUpper().
        * kjs/ustring.h: Ditto.

        * kxmlcore/unicode/Unicode.h: Corrected capitalization of the word Unicode.
        * kxmlcore/unicode/UnicodeCategory.h: Renamed include guard macro to match file name.

        * kxmlcore/unicode/icu/UnicodeIcu.h:
        (KXMLCore::Unicode::toLower): Work on strings, not individual characters. Use ICU root locale.
        (KXMLCore::Unicode::toUpper): Ditto.
        (KXMLCore::Unicode::isFormatChar): Use int32_t, which can hold a complete code point.
        (KXMLCore::Unicode::isSeparatorSpace): Ditto.
        (KXMLCore::Unicode::category): Ditto.
        * kxmlcore/unicode/qt4/UnicodeQt4.h:
        (KXMLCore::Unicode::toLower): Work on strings, not individual characters.
        (KXMLCore::Unicode::toUpper): Ditto.
        (KXMLCore::Unicode::isFormatChar): Use int32_t, which can hold a complete code point.
        (KXMLCore::Unicode::isSeparatorSpace): Ditto.
        (KXMLCore::Unicode::category): Ditto.

        * tests/mozilla/ecma/String/15.5.4.12-1.js: Corrected expected results.
        * tests/mozilla/ecma/String/15.5.4.12-5.js: Corrected expected results.

2006-04-05  Darin Adler  <darin@apple.com>

        - attempt to fix Windows build

        * kxmlcore/HashMap.h: (KXMLCore::HashMap::remove): Use (*it). instead of it->.
        * kxmlcore/HashSet.h: (KXMLCore::HashSet::remove): Ditto.

2006-04-05  Darin Adler  <darin@apple.com>

        - attempt to fix Windows build

        * os-win32/stdint.h: Add int8_t, uint8_t, int64_t.

2006-04-05  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        - fix memory leak introduced by the previous change

        * kxmlcore/HashTable.h: Specialize NeedsRef so that it correctly returns true when
        the value in question is a pair where one of the pair needs a ref and the other
        of the pair does not.

2006-04-05  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        - JavaScriptCore part of fix for http://bugs.webkit.org/show_bug.cgi?id=8049
          StringImpl hash traits deleted value creates an init routine for WebCore
          <rdar://problem/4442248> REGRESSION: WebCore has init routines (8049)

        Change HashMap and HashSet implementation so they fold various types together.
        This allows us to implement maps and sets that use RefPtr<WebCore::StringImpl>
        and WebCore::String in terms of the underlying raw pointer type, and hence use
        -1 for the deleted value.

        * kxmlcore/HashTraits.h: Added a new type to HashTraits, StorageTraits, which is a
        type to be used when storing a value that has the same layout as the type itself.
        This is used only for non-key cases. In the case of keys, the hash function must also
        be considered. Moved emptyValue out of GenericHashTraitsBase into GenericHashTraits.
        Added a new bool to HashTraits, needsRef, which indicates whether the type needs
        explicit reference counting. If the type itself has needsRef true, but the storage
        type has needsRef false, then the HashSet or HashMap has to handle the reference
        counting explicitly. Added hash trait specializations for all signed integer values
        that give -1 as the deleted value. Gave all integers StorageTraits of the canonical
        integer type of the same size so int and long will share code. Gave all pointers and
        RefPtrs StorageTraits of the appropriately sized integer type. Removed redundant
        TraitType and emptyValue definitions in the pointer specialization for HashTraits.
        Added PairBaseHashTraits, which doesn't try to set up needsDestruction and deletedValue.
        Useful for types where we don't want to force the existence of deletedValue, such as
        the type of a pair in a HashMap which is not the actual storage type. Removed an
        unneeded parameter from the DeletedValueAssigner template. Added HashKeyStorageTraits
        template, which determines what type can be used to store a given hash key type with
        a given hash function, and specialized it for pointers and RefPtr so that pointer
        hash tables share an underlying HashTable that uses IntHash.

        * kxmlcore/HashTable.h: Added HashTableConstIteratorAdapter, HashTableIteratorAdapter,
        NeedsRef, RefCountManagerBase, RefCountManager, HashTableRefCountManagerBase, and
        HashTableRefCountManager. All are used by both HashSet and HashMap to handle hash
        tables where the type stored is not the same as the real value type.
        
        * kxmlcore/HashFunctions.h: Added a new struct named IntTypes that finds an
        integer type given a sizeof value. Renamed pointerHash to intHash and made it
        use overloading and take integer parameters. Added an IntHash struct which is
        a hash function that works for integers. Changed PtrHash to call IntHash with
        an appropriately sized integer. Made IntHash the default hash function for
        many integer types. Made PtrHash the default hash function for RefPtr as well
        as for raw pointers.

        * kxmlcore/HashSet.h: Changed implementation to use a separate "storage type"
        derived from the new traits. The HashTable will use the storage type and all
        necessary translation and ref/deref is done at the HashSet level. Also reorganized
        the file so that the HashSet is at the top and has no inline implementation inside
        it so it's easy to read the interface to HashSet.

        * kxmlcore/HashMap.h: Changed implementation to use a separate "storage type"
        derived from the new traits. The HashTable will use the storage type and all
        necessary translation and ref/deref is done at the HashMap level. Also reorganized
        the file so that the HashMap is at the top and has no inline implementation inside
        it so it's easy to read the interface to HashMap.

        * kxmlcore/HashMapPtrSpec.h: Removed. Superceded by optimizations in HashMap itself.

        * JavaScriptCore.xcodeproj/project.pbxproj: Remove HashMapPtrSpec.h, resort files,
        and also remove some unnecessary build settings from the aggregate target that
        generates derived sources.
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Ditto.

2006-04-04  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Darin.

        The Debug and Release frameworks are now built with install paths relative to the build products directory.
        This removes the need for other projects to build with -framework WebCore and -framework JavaScriptCore. 

        * JavaScriptCore.xcodeproj/project.pbxproj:

2006-04-04  Eric Seidel  <eseidel@apple.com>

        Reviewed by ggaren.

        Fix win32 build.
        Disable ASSERT redefinition warnings for now.

        * JavaScriptCore.vcproj/testkjs/testkjs.vcproj:
        * kxmlcore/Assertions.h:

2006-04-04  Bjrn Graf  <bjoern.graf@gmail.com>

        Reviewed by ggaren & darin.  Landed by eseidel.

        Integrate CURL version of gettimeofday
        http://bugs.webkit.org/show_bug.cgi?id=7399
        Disable crash report dialogs for testkjs.exe in Release mode
        http://bugs.webkit.org/show_bug.cgi?id=8113

        * kjs/testkjs.cpp:
        (StopWatch::start):
        (StopWatch::stop):
        (StopWatch::getElapsedMS):
        (main):
        (kjsmain):

2006-04-04  Eric Seidel  <eseidel@apple.com>

        Reviewed by mjs.

        * kjs/number_object.cpp:
        (NumberProtoFunc::callAsFunction): remove trunc() to fix win32.

2006-03-12  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin.
        
        - fixed "toPrecision sometimes messes up the last digit on intel Macs"
        http://bugs.webkit.org/show_bug.cgi?id=7748

        * kjs/number_object.cpp:
        (intPow10): Compute integer powers of 10 using exponentiation by squaring.
        (NumberProtoFunc::callAsFunction): Use intPow10(n) in place of all pow(10.0, n),
        plus a bit of refactoring.

2006-04-03  Darin Adler  <darin@apple.com>

        - tweak config.h and Platform.h to try to get buildbot working
          (making some small changes at the same time)

        * kjs/config.h: Removed now-unneeded HAVE_ICU.
        * kxmlcore/Platform.h: Tweak how platform gets set up. Move all the
        USE stuff to the end.

2006-04-03  George Staikos   <staikos@opensource.apple.com>

        Reviewed by Maciej.

        Fix Win32 build breakage from previous commit, remove unused forward.

2006-04-03  George Staikos   <staikos@opensource.apple.com>

        Reviewed by Maciej.

        Implement a unicode abstraction layer to make JavaScriptCore much more
        easily ported to other platforms without having to take in libicu.  Also
        makes the unicode related code easier to understand.

2006-04-03  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Adele.

        Fixes <rdar://problem/4498338> JavaScriptCore fails to compile for ppc64
        Other 64 bit build fixes.

        * kjs/collector.cpp:
        (KJS::Collector::markOtherThreadConservatively): test for __DARWIN_UNIX03 and use __r1
        * kjs/dtoa.cpp:
        (Bigint::): cast PRIVATE_mem to unsigned to prevent warning
        * bindings/jni/jni_utility.cpp:
        (KJS::Bindings::getJavaVM): cast jniError to long to prevent format warning
        (KJS::Bindings::getJNIEnv): cast jniError to long to prevent format warning
        * bindings/runtime_root.cpp:
        (KJS::Bindings::addNativeReference): cast CFDictionaryGetValue to unsigned long to prevent warning
        (KJS::Bindings::removeNativeReference): cast CFDictionaryGetValue to unsigned long to prevent warning

2006-03-31  Darin Adler  <darin@apple.com>

        Reviewed by Geoff.

        - <rdar://problem/4395622> API: WebScriptObject.h incorrectly reports that -isSelectorExcludedFromWebScript returns NO by default

        * bindings/objc/WebScriptObject.h: Fixed comment.

2006-03-31  Eric Seidel  <eseidel@apple.com>

        Reviewed by mjs.

        A bit more code cleanup.

        * bindings/c/c_utility.cpp:
        (KJS::Bindings::convertValueToNPVariant):
        * bindings/objc/objc_runtime.mm:
        (convertValueToObjcObject):
        * bindings/objc/objc_utility.mm:
        (KJS::Bindings::convertValueToObjcValue):
        * kjs/function.cpp:
        (KJS::GlobalFuncImp::callAsFunction):
        * kjs/interpreter.cpp:
        (KJS::ExecState::lexicalInterpreter):
        * kjs/interpreter.h:
        * kjs/operations.cpp:
        (KJS::equal):

2006-03-30  Eric Seidel  <eseidel@apple.com>

        Reviewed by anders.

        Small code-style update.

        * kjs/operations.cpp:
        (KJS::isNaN):
        (KJS::isInf):
        (KJS::isPosInf):
        (KJS::isNegInf):
        (KJS::equal):
        (KJS::strictEqual):
        (KJS::relation):
        (KJS::maxInt):
        (KJS::minInt):
        (KJS::add):
        (KJS::mult):

2006-03-31  Anders Carlsson  <andersca@mac.com>

        Reviewed by Maciej.

        Make sure the GetterSetterImp objects are marked as well.
        
        * kjs/internal.cpp:
        (KJS::GetterSetterImp::mark):
        Call JSCell::mark().

2006-03-30  Eric Seidel  <eseidel@apple.com>

        Reviewed by ggaren.

        * kjs/nodes.h: Some various small style fixes.

2006-03-30  Eric Seidel  <eseidel@apple.com>

        Reviewed by ggaren.

        Clean-up style issues in node.h, remove redundant initializations.

        * kjs/nodes.h:
        (KJS::StatementNode::evaluate):
        (KJS::ArrayNode::ArrayNode):
        (KJS::ObjectLiteralNode::ObjectLiteralNode):
        (KJS::ArgumentsNode::ArgumentsNode):
        (KJS::NewExprNode::NewExprNode):
        (KJS::CaseClauseNode::CaseClauseNode):
        (KJS::FuncDeclNode::FuncDeclNode):

2006-03-30  Tim Omernick  <timo@apple.com>

        Reviewed by Geoff.

        <rdar://problem/4212626> REGRESSION: LIVECONNECT: JavaScript type for Java Strings is function,
        not object

        * bindings/runtime.h:
        (KJS::Bindings::Instance::implementsCall):
        New method.  Returns false by default.  Concrete subclasses can override this return true when
        the bound object may be called as a function.
        (KJS::Bindings::Instance::invokeDefaultMethod):
        Since bound objects are no longer treated as functions by default, we can return jsUndefined()
        here instead of in concrete subclasses that decide not to implement the default method
        functionality.

        * bindings/runtime_object.cpp:
        (RuntimeObjectImp::implementsCall):
        Don't assume that the bound object is a function; instead, let the object instance decide whether
        it is callable.

        * bindings/c/c_instance.h:
        * bindings/c/c_instance.cpp:
        (KJS::Bindings::CInstance::implementsCall):
        The object is callable if its class has an invokeDefault function.

        * bindings/objc/objc_instance.h:
        * bindings/objc/objc_instance.mm:
        (ObjcInstance::implementsCall):
        The object is callable if the ObjC instance responds to -invokeDefaultMethodWithArguments:.

        * bindings/jni/jni_instance.h:
        * bindings/jni/jni_instance.cpp:
        Moved bogus invokeDefaultMethod() to superclass.

2006-03-29  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Darin.

        - JavaScriptCore side of fix for <rdar://problem/4308243> 8F36 
        Regression: crash in malloc_consolidate if you use a .PAC file

        The crash was a result of threaded deallocation of thread-unsafe
        objects. Pure JS objects are thread-safe because all JS execution
        is synchronized through JSLock. However, JS objects that wrap WebCore 
        objects are thread-unsafe because JS and WebCore execution are not 
        synchronized.  That unsafety comes into play when the collector 
        deallocates a JS object that wraps a WebCore object, thus causing the 
        WebCore object to be deallocated.

        The solution here is to have each JSCell know whether it is safe to
        collect on a non-main thread, and to avoid collecting unsafe cells
        when on a non-main thread.

        We don't have a way to test PAC files yet, so there's no test
        attached to this patch.

        * kjs/collector.cpp:
        (KJS::Collector::collect):
        (1) Added the test "currentThreadIsMainThread || 
        imp->m_destructorIsThreadSafe". 

        * kjs/protect.h:
        (KJS::gcProtectNullTolerant):
        (KJS::gcUnprotectNullTolerant):
        * kjs/value.h:
        (KJS::JSCell::JSCell): The bools here must be bitfields, otherwise
        m_destructorIsThreadSafe becomes another whole word, ruining the
        collector optimizations we've made based on the size of a JSObject.
        * kxmlcore/FastMalloc.cpp:
        (KXMLCore::currentThreadIsMainThread):
        (KXMLCore::fastMallocRegisterThread):
        * kxmlcore/FastMalloc.h:

2006-03-28  Darin Adler  <darin@apple.com>

        Reviewed by Geoff.

        - change some code that resulted in init routines on Mac OS X -- if the framework has
          init routines it will use memory and slow down applications that link with WebKit
          even in cases where those applications don't use WebKit

        * kjs/date_object.cpp: Changed constants that were derived by multiplying other constants
        to use immediate numbers instead. Apparently, double constant expressions of the type we
        had here are evaluated at load time.

        * kjs/list.cpp: Can't use OwnArrayPtr in ListImp because of the global instances of
        ListImp, so go back to using a plain old pointer.
        (KJS::List::List): Set overflow to 0 when initializing ListImp.
        (KJS::List::release): Replace a clear call with a delete and explicit set to 0.
        (KJS::List::append): Use raw pointers, and do a delete [] instead of finessing it with
        a swap of OwnArrayPtr.
        (KJS::List::copyFrom): Remove now-unneeded get().
        (KJS::List::copyTail): Ditto.

        * kjs/ustring.cpp: Changed UString::Rep::empty initializer a bit so that it doesn't get
        a static initializer routine. Had to get rid of one level of constant to get the compiler
        to understand it could initialize without any code.

        - added a build step that checks for init routines

        * JavaScriptCore.xcodeproj/project.pbxproj: Deleted now-unused custom build rule that
        was replaced by the generate-derived-sources script a while back. Added a custom build
        phase that invokes the check-for-global-initializers script.

2006-03-28  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Eric.

        fixes <rdar://problem/4458539> Unable to include Security(public) and WebKit(private) headers

        * bindings/npapi.h: added #defines after the #ifndefs

2006-03-27  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Anders.
        
        - fixed <rdar://problem/4489745> REGRESSION: Safari crashes at to display http://www.lgphilips-lcd.com/

        * kjs/nodes.cpp:
        (Node::deref): take into account the case where the extra refcount table was never created

2006-03-23  David Carson <dacarson@gmail.com>

        Reviewed by Darin.
        
        - JSObject in LiveConnect not working.
        http://bugs.webkit.org/show_bug.cgi?id=7917

        * bindings/jni_jsobject.cpp:
        (JavaJSObject::convertJObjectToValue): Was trying to retrieve the native pointer from the wrong base
        class, and the GetFieldID was using the wrong signature.

2006-03-23  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        - fix buildbot

        * JavaScriptCore.xcodeproj/project.pbxproj: Change target name to JavaScriptCore (it was "include"!?).
        Also add -Y 3 option for linker.

2006-03-23  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        - fix http://bugs.webkit.org/show_bug.cgi?id=7726
          REGRESSION: orbitz calendar fails (JavaScript function serialization/parsing)

        * kjs/object.h: Take function name, as well as source URL and line number, when
        using the special overloaded construct for making functions.
        * kjs/object.cpp: (KJS::JSObject::construct): Ditto.
        * kjs/function_object.h: Ditto.
        * kjs/function_object.cpp: (FunctionObjectImp::construct): Pass a name when
        constructing the function rather than null. Use "anonymous" when making a
        function using the default function constructor.

        * kjs/nodes2string.cpp: (FuncDeclNode::streamTo): Put a line break just before
        a function declaration.

        - unrelated fix

        * kxmlcore/HashMapPtrSpec.h: Add missing needed friend declaration.

2006-03-23  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        - fix http://bugs.webkit.org/show_bug.cgi?id=7805
          LEAK: method name leaks in KJS::Bindings::CInstance::invokeMethod

        * bindings/c/c_utility.h: Remove NPN_UTF16FromString declaration (not implemented).
        * bindings/c/c_utility.cpp:
        (KJS::Bindings::convertValueToNPVariant): Use DOUBLE_TO_NPVARIANT,
        BOOLEAN_TO_NPVARIANT, VOID_TO_NPVARIANT, NULL_TO_NPVARIANT, and
        OBJECT_TO_NPVARIANT. In the case of OBJECT, call _NPN_RetainObject in
        one case and remove a _NPN_ReleaseObject in another because this
        should return a retained value.
        (KJS::Bindings::convertNPVariantToValue): Use NPVARIANT_TO_BOOLEAN,
        NPVARIANT_TO_INT32, and NPVARIANT_TO_DOUBLE.

        * bindings/c/c_runtime.h: Removed implementations of CMethod::name and
        CField::name that called _NPN_UTF8FromIdentifier and hence leaked.
        * bindings/c/c_runtime.cpp:
        (KJS::Bindings::CMethod::name): Added. Returns the string from inside the
        method object.
        (KJS::Bindings::CField::name): Added. Returns the string from inside the
        field object.
        (KJS::Bindings::CField::valueFromInstance): Added call to _NPN_ReleaseVariantValue
        on the result of getProperty after using it to fix a storage leak.
        (KJS::Bindings::CField::setValueToInstance): Added call to _NPN_ReleaseVariantValue
        after pasing a value to setProperty now that the conversion function does a retain.

        * bindings/c/c_instance.cpp:
        (KJS::Bindings::CInstance::invokeMethod): Changed to use Vector for a local
        stack buffer. Removed special case for NPVARIANT_IS_VOID because the
        convertNPVariantToValue function handles that properly.
        (KJS::Bindings::CInstance::invokeDefaultMethod): Ditto.

        * bindings/NP_jsobject.h: Formatting changes only.
        * bindings/NP_jsobject.cpp:
        (jsDeallocate): Changed parameter type so we don't need a function cast.
        (_NPN_InvokeDefault): Use VOID_TO_NPVARIANT.
        (_NPN_Invoke): Use NULL_TO_NPVARIANT and VOID_TO_NPVARIANT.
        (_NPN_Evaluate): Use VOID_TO_NPVARIANT.
        (_NPN_GetProperty): Use NULL_TO_NPVARIANT and VOID_TO_NPVARIANT.

        * bindings/c/c_class.cpp: Formatting changes only.
        * bindings/c/c_class.h: Formatting changes only.

        * bindings/npruntime_priv.h: Removed obsolete and now-unused functions:
        NPN_VariantIsVoid, NPN_VariantIsNull, NPN_VariantIsUndefined,
        NPN_VariantIsBool, NPN_VariantIsInt32, NPN_VariantIsDouble,
        NPN_VariantIsString, NPN_VariantIsObject, NPN_VariantToBool,
        NPN_VariantToInt32, NPN_VariantToDouble, NPN_VariantToString,
        NPN_VariantToStringCopy, NPN_VariantToObject, NPN_InitializeVariantAsVoid,
        NPN_InitializeVariantAsNull, NPN_InitializeVariantAsUndefined,
        NPN_InitializeVariantWithBool, NPN_InitializeVariantWithInt32,
        NPN_InitializeVariantWithDouble, NPN_InitializeVariantWithString,
        NPN_InitializeVariantWithObject, and NPN_InitializeVariantWithVariant.
        * bindings/npruntime.cpp:
        (getIntIdentifierDictionary): Don't bother creating custom callbacks for the
        integer dictionary since the default behavior is fine for integers.

2006-03-23  Mark Rowe  <opendarwin.org@bdash.net.nz>

        Reviewed and landed by Maciej.

        - WebKit no longer builds with bison 2.1
        http://bugs.webkit.org/show_bug.cgi?id=7923

        * generate-derived-sources:  Handle generated header named either grammar.cpp.h
        or grammar.hpp.

2006-03-22  Maciej Stachowiak  <mjs@apple.com>

        - fix the build

        * JavaScriptCore.xcodeproj/project.pbxproj:

2006-03-21  Maciej Stachowiak  <mjs@apple.com>

        * kjs/generate-derived-sources: Set executable property.

2006-03-21  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin.
        
        Ensure that generated source dependencies are handled properly, as follows:
        
        - Made an external script that generates the sources into a
          DerivedSources dir in the build products directory.
        - Added a new build target that builds all the generated sources
          if needed. Sadly it has to be a target, not a phase for Xcode to notice changes.
        - Added the DerivedSources dir in question to the include path.
        - Added the new DerivedSources dir and its contents to the project as build-relative.
        
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * kjs/generate-derived-sources: Added. Based on the windows version - maybe someday they
        can share more.

2006-03-11  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin.
        
        - fixed "charAt layout test fails on intel macs; some NaNs are printed as -NaN"
        http://bugs.webkit.org/show_bug.cgi?id=7745

        * kjs/ustring.cpp:
        (KJS::UString::from): Use "NaN" for all NaN values, regardless of sign.

2006-03-16  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin.
        
        - tweaks to my change to redo KJS::Node refcounting

        * kjs/nodes.cpp:
        (Node::ref):
        (Node::deref):
        (Node::refcount):
        (Node::clearNewNodes):
        * kjs/nodes.h:

2006-03-16  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        - fixed Vector so that you can pass a reference to something in the vector
          to the append or insert functions

        * kxmlcore/Vector.h:
        (KXMLCore::Vector::expandCapacity): Added new overloads that take a pointer to adjust
        and return the adjusted value of the pointer.
        (KXMLCore::Vector::append): Pass a pointer when expanding the vector, and use it when
        adding the new element. Makes the case where the element moves when the vector
        is expanded work.
        (KXMLCore::Vector::insert): Ditto.

2006-03-15  Eric Seidel  <eseidel@apple.com>

        Reviewed by adele.

        Build fix.

        * kjs/date_object.cpp:
        (KJS::DateProtoFunc::callAsFunction): use size() not "len()"

2006-03-15  Eric Seidel  <eseidel@apple.com>

        Reviewed by mjs.

        Fix CString copy constructor, fixes Date.parse("") on Win32.

        * kjs/date_object.cpp:
        (KJS::DateProtoFunc::callAsFunction):
        * kjs/ustring.cpp:
        (KJS::CString::CString):
        (KJS::CString::operator=):

2006-03-13  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Anders.
        
        - KJS::Node and KJS::StatementNode are bigger than they need to be
        http://bugs.webkit.org/show_bug.cgi?id=7775

        The memory usage of Node was reduced by 2 machine words per node:

        - sourceURL was removed and only kept on FunctionBodyNode. The
        source URL can only be distinct per function or top-level program node, 
        and you always have one.
        
        - refcount was removed and kept in a separate hashtable when
        greater than 1. newNodes set represents floating nodes with
        refcount of 0. This helps because almost all nodes have a refcount of 1
        for almost all of their lifetime.
        
        * bindings/runtime_method.cpp:
        (RuntimeMethod::RuntimeMethod): Pass null body, added FIXME.
        * kjs/Parser.cpp:
        (KJS::clearNewNodes): New nodes are tracked in nodes.cpp now, but still clear
        them at the appropriate time.
        * kjs/context.h:
        (KJS::ContextImp::currentBody): added; used to retrieve source URL and sid
        for current code.
        (KJS::ContextImp::pushIteration): moved here from LabelStack
        (KJS::ContextImp::popIteration): ditto
        (KJS::ContextImp::inIteration): ditto
        (KJS::ContextImp::pushSwitch): ditto
        (KJS::ContextImp::popSwitch): ditto
        (KJS::ContextImp::inSwitch): ditto
        * kjs/function.cpp:
        (KJS::FunctionImp::FunctionImp): Add FunctionBodyNode* parameter.
        (KJS::FunctionImp::callAsFunction): Pass body to ContextImp.
        (KJS::FunctionImp::argumentsGetter): _context renamed to m_context.
        (KJS::DeclaredFunctionImp::DeclaredFunctionImp): Pass body to superclass
        constructor.
        (KJS::GlobalFuncImp::callAsFunction): Pass progNode as body for ContextImp in
        eval.
        * kjs/function.h: Move body field from DeclaredFunctionImp to
        FunctionImp.
        * kjs/grammar.y: Change DBG; statements no longer have a sourceid.
        * kjs/internal.cpp:
        (KJS::ContextImp::ContextImp): Initialize new m_currentBody, m_iterationDepth
        and m_switchDepth data members. New FunctionBodyNode* parameter - the
        function body provides source URL and SourceId.
        (KJS::InterpreterImp::mark): Use exception() function, not _exception directly.
        (KJS::InterpreterImp::evaluate): Pass progNode to ContextImp constructor
        to use as the body.
        * kjs/internal.h:
        (KJS::LabelStack::LabelStack): Remove iteration depth and switch depth;
        statement label stacks don't need these and it bloats their size. Put them
        in the ContextImp instead.
        * kjs/interpreter.cpp:
        (KJS::ExecState::lexicalInterpreter): Renamed _context to m_context.
        * kjs/interpreter.h:
        (KJS::ExecState::dynamicInterpreter): Renamed _context to m_context.
        (KJS::ExecState::context): ditto
        (KJS::ExecState::setException): Renamed _exception to m_exception
        (KJS::ExecState::clearException): ditto
        (KJS::ExecState::exception): ditto
        (KJS::ExecState::hadException): ditto
        (KJS::ExecState::ExecState): ditto both above renames
        * kjs/nodes.cpp:
        (Node::Node): Removed initialization of line, source URL and refcount. Add to
        local newNodes set instead of involving parser.
        (Node::ref): Instead of managing refcount directly, story refcount over 1 in a
        HashCountedSet, and keep a separate HashSet of "floating" nodes with refcount
        0.
        (Node::deref): ditto
        (Node::refcount): ditto
        (Node::clearNewNodes): Destroy anything left in the new nodes set.
        (currentSourceId): Inline helper to get sourceId from function body via context.
        (currentSourceURL): ditto for sourceURL.
        (Node::createErrorCompletion): use new helper
        (Node::throwError): ditto
        (Node::setExceptionDetailsIfNeeded): ditto
        (StatementNode::StatementNode): remove initialization of l0 and sid, rename
        l1 to m_lastLine.
        (StatementNode::setLoc): Set own m_lastLine and Node's m_line.
        (StatementNode::hitStatement): Get sid, first line, last line in the proper new ways.
        (StatListNode::StatListNode): updated for setLoc changes
        (BlockNode::BlockNode): ditto
        (DoWhileNode::execute): excpect iteraton counts on ContextImp, not LabelStack
        (WhileNode::execute): ditto
        (ForNode::execute): ditto
        (ForInNode::execute): ditto
        (ContinueNode::execute): excpect inIteration on ContextImp, not LabelStack
        (BreakNode::execute): excpect inIteration and inSwitch on ContextImp, not LabelStack
        (SwitchNode::execute): expect switch counts on ContextImp, not LabelStack
        (FunctionBodyNode::FunctionBodyNode): update for new setLoc
        (FunctionBodyNode::processFuncDecl): reindent
        (SourceElementsNode::SourceElementsNode): update for new setLoc
        * kjs/nodes.h:
        (KJS::Node::lineNo): Renamed _line to m_line
        (KJS::StatementNode::firstLine): Use lineNo()
        (KJS::StatementNode::lastLine): Renamed l1 to m_lastLine
        (KJS::FunctionBodyNode::sourceId): added
        (KJS::FunctionBodyNode::sourceURL): added
        * kjs/testkjs.cpp:

2006-03-14  Geoffrey Garen  <ggaren@apple.com>

        - Fixed <rdar://problem/4478239> string sort puts "closed" before 
        "close"

        Reviewed by Eric.

        * kjs/ustring.cpp:
        (KJS::compare): Inverted a < in order to treat the longer string as > 
        the shorter string.

2006-03-12  Alexey Proskuryakov  <ap@nypop.com>

        Reviewed by Maciej.

        - fix http://bugs.webkit.org/show_bug.cgi?id=7708
        REGRESSION: Flash callback to JavaScript function not working.

        Test: plugins/invoke.html

        * bindings/c/c_utility.cpp:
        (KJS::Bindings::convertUTF8ToUTF16): Return a correct string length.

2006-03-08  Eric Seidel  <eseidel@apple.com>

        Reviewed by darin.

        Partially fix JS on win32 by fixing hash table generation.

        * kjs/create_hash_table: limit << results to 32 bits.
        * kjs/testkjs.cpp:
        (TestFunctionImp::callAsFunction):

2006-03-07  Darin Adler  <darin@apple.com>

        * kxmlcore/Vector.h: Quick fix to try to get Windows compiling again.

2006-03-07  Darin Adler  <darin@apple.com>

        Reviewed by Anders.

        - fix http://bugs.webkit.org/show_bug.cgi?id=7655
          unwanted output while running layout tests

        * kjs/lexer.cpp: (Lexer::lex): Turn off the "yylex: ERROR" message.
        * kjs/regexp.cpp: (KJS::RegExp::RegExp): Remove the code to log errors from PCRE
        to standard output. I think we should arrange for the error text to be in JavaScript
        exceptions instead at some point.
        * kxmlcore/Vector.h: Add a check for overflow so that we'll abort if we pass a
        too-large size rather than allocating a buffer smaller than requested.

2006-03-06  David Carson <dacarson@gmail.com>

        Reviewed by Darin, landed by ap.

        - Fixed http://bugs.webkit.org/show_bug.cgi?id=7582
        c_utility.cpp contains CFString OS X platform-dependent code; should use ICU

        Tested with test case from:
        http://bugs.webkit.org/show_bug.cgi?id=5163

        * bindings/c_utility.cpp
        (convertUTF8ToUTF16): Changed to using Unicode converter from ICU, and manual Latin-1 conversion.
        * icu/unicode/ucnv.h: Copied from WebCore.
        * icu/unicode/ucnv_err.h: Ditto.
        * icu/unicode/uenum.h: Ditto.

2006-03-05  Darin Adler  <darin@apple.com>

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Updated.

2006-03-06  Mitz Pettel  <opendarwin.org@mitzpettel.com>

        Fix suggested by Alexey Proskuryakov <ap@nypop.com>, reviewed by Maciej and Hyatt.
        
        - fix http://bugs.webkit.org/show_bug.cgi?id=7601
          REGRESSION (r13089): Reproducible crash dereferencing a deallocated element on google image search

        * kxmlcore/Platform.h: Corrected the define to enable USE(MULTIPLE_THREADS) on Mac OS X.

2006-03-05  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        - http://bugs.webkit.org/show_bug.cgi?id=7616
          get all references to KJS::Node out of internal.h

        * JavaScriptCore.xcodeproj/project.pbxproj: Updated for file changes.

        * kjs/Parser.cpp: Added.
        * kjs/Parser.h: Added.

        * kjs/internal.cpp: Removed the Parser class.
        * kjs/internal.h: Ditto. Also removed unnecessary declarations of classes
        not used in this header.

        * kjs/nodes.h: Added an include of "Parser.h".
        * kjs/function.h: Added a declaration of FunctionBodyNode.

2006-03-05  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Maciej.

        - JSC support for the fix for <rdar://problem/4467143> JavaScript 
        enumeration of HTML element properties skips DOM node properties

        * kjs/lookup.h: 
        (1) Added the KJS_DEFINE_PROTOTYPE_WITH_PROTOTYPE macro. The 
        class definiton macro needs to know about the prototype's prototype so 
        that the class constructor properly sets it. 
        (2) Removed the KJS_IMPLEMENT_PROTOTYPE_WITH_PARENT macro. The class
        implementation macro does not need to know about the prototype's
        prototype, since getOwnPropertySlot should only look in the current 
        object's property map, and not its prototype's.

2006-03-05  Andrew Wellington  <proton@wiretapped.net>

        Reviewed by Eric, landed by ap.
        
        - Remove unused breakpoint bool from StatementNodes. No test provided as
        there is no functionality change.

        * kjs/nodes.cpp:
        (StatementNode::StatementNode):
        * kjs/nodes.h:

2006-03-03  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Darin.

        - Fixed <rdar://problem/4465598> REGRESSION (TOT): Crash occurs at 
        http://maps.google.com/?output=html ( KJS::Identifier::add(KJS::UString::Rep*)

        This regression was caused by my fix for 4448098. I failed to account for the
        deleted entry sentinel in the mehtod that saves the contents of a property map to 
        the back/forward cache.

        Manual test in WebCore/manual-tests/property-map-save-crash.html

        * kjs/property_map.cpp:
        (KJS::deletedSentinel): Use 1 instead of -1 to facilitate an easy bit mask
        (KJS::isValid): New function: checks if a key is null or the deleted sentinel
        (KJS::PropertyMap::~PropertyMap): Fixed up the branch logic here for readability
        and a slight performance win
        (KJS::PropertyMap::clear):
        (KJS::PropertyMap::rehash):
        (KJS::PropertyMap::addSparseArrayPropertiesToReferenceList):
        (KJS::PropertyMap::save): Check keys with isValid()

2006-03-02  Maciej Stachowiak  <mjs@apple.com>

        - now fix mac build again

        * kjs/identifier.cpp:

2006-03-02  Maciej Stachowiak  <mjs@apple.com>

        Rubber stamped by Anders and Eric.

        - add fpconst.cpp to win32 build, it is now needed

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
        * kjs/fpconst.cpp:

2006-03-02  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Eric.

        - fix windows build, broken by my last patch

        * kjs/JSImmediate.cpp:
        * kjs/identifier.cpp:
        * kxmlcore/FastMalloc.cpp:
        * kxmlcore/Platform.h:

2006-03-01  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin.
        
        - Set up new prototype macros and avoid using #if without defined() in JSC
        
        Added new PLATFORM macros and related, to make sure #if's all check if relevant macros
        are defined, and to separate core OS-level dependencies from operating environment
        dependencies so you can, e.g., build KDE on Mac or Windows.

        * kxmlcore/Platform.h: Added.

        - deploy them everywhere in JavaScriptCore
        
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * bindings/jni/jni_utility.cpp:
        (KJS::Bindings::convertValueToJValue):
        * bindings/objc/WebScriptObject.mm:
        * bindings/objc/objc_instance.mm:
        (ObjcInstance::end):
        * bindings/softlinking.h:
        * bindings/testbindings.mm:
        (main):
        * kjs/JSLock.cpp:
        * kjs/collector.cpp:
        (KJS::Collector::markCurrentThreadConservatively):
        (KJS::Collector::markOtherThreadConservatively):
        (KJS::Collector::markStackObjectsConservatively):
        * kjs/config.h:
        * kjs/date_object.cpp:
        (gmtoffset):
        (KJS::formatTime):
        (KJS::DateProtoFunc::callAsFunction):
        (KJS::DateObjectImp::construct):
        (KJS::makeTime):
        * kjs/dtoa.cpp:
        * kjs/fpconst.cpp:
        (KJS::sizeof):
        (KJS::):
        * kjs/grammar.y:
        * kjs/identifier.cpp:
        * kjs/internal.cpp:
        * kjs/interpreter.cpp:
        (KJS::Interpreter::evaluate):
        (KJS::Interpreter::createLanguageInstanceForValue):
        * kjs/interpreter.h:
        * kjs/lookup.cpp:
        * kjs/lookup.h:
        * kjs/math_object.cpp:
        * kjs/object.cpp:
        * kjs/object.h:
        * kjs/operations.cpp:
        (KJS::isNaN):
        (KJS::isInf):
        (KJS::isPosInf):
        (KJS::isNegInf):
        * kjs/operations.h:
        * kjs/regexp.cpp:
        (KJS::RegExp::RegExp):
        (KJS::RegExp::~RegExp):
        (KJS::RegExp::match):
        * kjs/regexp.h:
        * kjs/testkjs.cpp:
        (StopWatch::start):
        (StopWatch::stop):
        (StopWatch::getElapsedMS):
        * kjs/ustring.cpp:
        * kjs/ustring.h:
        * kxmlcore/AlwaysInline.h:
        * kxmlcore/Assertions.cpp:
        * kxmlcore/Assertions.h:
        * kxmlcore/FastMalloc.cpp:
        (KXMLCore::):
        * kxmlcore/FastMalloc.h:
        * kxmlcore/FastMallocInternal.h:
        * kxmlcore/HashTable.h:
        * kxmlcore/TCPageMap.h:
        * kxmlcore/TCSpinLock.h:
        (TCMalloc_SpinLock::Lock):
        (TCMalloc_SpinLock::Unlock):
        (TCMalloc_SlowLock):
        * kxmlcore/TCSystemAlloc.cpp:
        (TCMalloc_SystemAlloc):
        * os-win32/stdint.h:

2006-02-28  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Darin.

        - Fixed <rdar://problem/4448098> Switch PropertyMap deleted entry 
        placeholder to -1 from UString::Rep::null

        This turned out to be only a small speedup (.12%). That's within the 
        margin of error for super accurate JS iBench, but Shark confirms the 
        same, so I think it's worth landing.

        FYI, I also confirmed that the single entry optimization in 
        PropertyMap is a 3.2% speedup.

        * kjs/property_map.cpp:
        (KJS::PropertyMap::~PropertyMap):
        (KJS::PropertyMap::clear):
        (KJS::PropertyMap::put):
        (KJS::PropertyMap::insert):
        (KJS::PropertyMap::rehash):
        (KJS::PropertyMap::remove):
        (KJS::PropertyMap::addSparseArrayPropertiesToReferenceList):
        (KJS::PropertyMap::checkConsistency):
        * kjs/property_map.h:
        (KJS::PropertyMap::deletedSentinel):

2006-02-27  Eric Seidel  <eseidel@apple.com>

        Rubber-stamped by darin.

        Remove fpconst.cpp, unused on win32 and the cause of linker warnings.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:

2006-02-27  Eric Seidel  <eseidel@apple.com>

        Reviewed by mjs.

        Fix Assertions.cpp to compile on win32.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
        * kxmlcore/Assertions.cpp:

2006-02-27  Eric Seidel  <eseidel@apple.com>

        Reviewed by mjs.

        Made Assertions.cpp platform independent.
        Moved mac-specific logging logic up into WebCore.
        http://bugs.webkit.org/show_bug.cgi?id=7503

        * JavaScriptCore.xcodeproj/project.pbxproj:
        * kxmlcore/Assertions.cpp: Added.
        * kxmlcore/Assertions.h:
        * kxmlcore/Assertions.mm: Removed.

2006-02-27  Darin Adler  <darin@apple.com>

        - fixed Mac Debug build, there was an unused parameter

        * kxmlcore/FastMalloc.cpp: (KXMLCore::fastMallocRegisterThread):
        Remove parameter name.

        * kjs/debugger.h: Fixed comment.

2006-02-27  Eric Seidel  <eseidel@apple.com>

        Reviewed by darin.

        * kxmlcore/Vector.h:
        (KXMLCore::deleteAllValues): fix unused variable warning

2006-02-21  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin.
        
        - Turn off -Wno-unused-param for JavaScriptCore and get rid of unused params
        http://bugs.webkit.org/show_bug.cgi?id=7384

        * JavaScriptCore.xcodeproj/project.pbxproj:
        * bindings/NP_jsobject.cpp:
        (jsAllocate):
        (_NPN_InvokeDefault):
        (_NPN_Evaluate):
        (_NPN_GetProperty):
        (_NPN_SetProperty):
        (_NPN_RemoveProperty):
        (_NPN_HasProperty):
        (_NPN_HasMethod):
        * bindings/c/c_class.h:
        (KJS::Bindings::CClass::constructorAt):
        * bindings/c/c_utility.cpp:
        (KJS::Bindings::convertNPVariantToValue):
        * bindings/jni/jni_class.cpp:
        (JavaClass::methodsNamed):
        (JavaClass::fieldNamed):
        * bindings/jni/jni_instance.cpp:
        (JavaInstance::invokeDefaultMethod):
        * bindings/jni/jni_jsobject.cpp:
        * bindings/jni/jni_objc.mm:
        (-[NSObject KJS::Bindings::]):
        * bindings/objc/WebScriptObject.mm:
        (+[WebUndefined allocWithZone:]):
        (-[WebUndefined initWithCoder:]):
        (-[WebUndefined encodeWithCoder:]):
        (-[WebUndefined copyWithZone:]):
        * bindings/objc/objc_class.h:
        (KJS::Bindings::ObjcClass::constructorAt):
        * bindings/objc/objc_class.mm:
        (KJS::Bindings::ObjcClass::methodsNamed):
        (KJS::Bindings::ObjcClass::fallbackObject):
        * bindings/objc/objc_instance.mm:
        (ObjcInstance::getValueOfUndefinedField):
        * bindings/objc/objc_runtime.mm:
        (ObjcFallbackObjectImp::getOwnPropertySlot):
        (ObjcFallbackObjectImp::put):
        (ObjcFallbackObjectImp::canPut):
        (ObjcFallbackObjectImp::deleteProperty):
        (ObjcFallbackObjectImp::toBoolean):
        * bindings/runtime.cpp:
        (KJS::Bindings::Instance::createLanguageInstanceForValue):
        * bindings/runtime.h:
        (KJS::Bindings::Instance::getValueOfUndefinedField):
        (KJS::Bindings::Instance::setValueOfUndefinedField):
        * bindings/runtime_array.cpp:
        (RuntimeArray::lengthGetter):
        (RuntimeArray::indexGetter):
        (RuntimeArray::put):
        (RuntimeArray::deleteProperty):
        * bindings/runtime_method.cpp:
        (RuntimeMethod::lengthGetter):
        (RuntimeMethod::execute):
        * bindings/runtime_object.cpp:
        (RuntimeObjectImp::fallbackObjectGetter):
        (RuntimeObjectImp::fieldGetter):
        (RuntimeObjectImp::methodGetter):
        (RuntimeObjectImp::put):
        (RuntimeObjectImp::canPut):
        (RuntimeObjectImp::deleteProperty):
        (RuntimeObjectImp::defaultValue):
        (RuntimeObjectImp::callAsFunction):
        * bindings/runtime_root.cpp:
        (performJavaScriptAccess):
        * kjs/array_object.cpp:
        (ArrayInstance::lengthGetter):
        (ArrayInstance::getOwnPropertySlot):
        (ArrayPrototype::ArrayPrototype):
        (ArrayPrototype::getOwnPropertySlot):
        * kjs/bool_object.cpp:
        (BooleanObjectImp::BooleanObjectImp):
        * kjs/date_object.cpp:
        (KJS::DateObjectFuncImp::DateObjectFuncImp):
        (KJS::DateObjectFuncImp::callAsFunction):
        * kjs/error_object.cpp:
        (ErrorObjectImp::ErrorObjectImp):
        (NativeErrorPrototype::NativeErrorPrototype):
        (NativeErrorImp::NativeErrorImp):
        * kjs/function.cpp:
        (KJS::FunctionImp::argumentsGetter):
        (KJS::FunctionImp::lengthGetter):
        (KJS::Arguments::mappedIndexGetter):
        (KJS::ActivationImp::argumentsGetter):
        (KJS::ActivationImp::put):
        * kjs/function_object.cpp:
        (FunctionObjectImp::FunctionObjectImp):
        * kjs/internal.cpp:
        (KJS::GetterSetterImp::toPrimitive):
        (KJS::GetterSetterImp::toBoolean):
        * kjs/interpreter.cpp:
        (KJS::Interpreter::evaluate):
        * kjs/interpreter.h:
        (KJS::Interpreter::isGlobalObject):
        (KJS::Interpreter::interpreterForGlobalObject):
        (KJS::Interpreter::isSafeScript):
        * kjs/lexer.cpp:
        (Lexer::makeIdentifier):
        (Lexer::makeUString):
        * kjs/lookup.h:
        (KJS::staticFunctionGetter):
        (KJS::staticValueGetter):
        * kjs/nodes.cpp:
        (StatementNode::processFuncDecl):
        (PropertyNode::evaluate):
        (PropertyNameNode::evaluate):
        * kjs/number_object.cpp:
        (NumberObjectImp::NumberObjectImp):
        (NumberObjectImp::getOwnPropertySlot):
        * kjs/object.cpp:
        (KJS::JSObject::defineGetter):
        (KJS::JSObject::defineSetter):
        (KJS::JSObject::hasInstance):
        (KJS::JSObject::propertyIsEnumerable):
        * kjs/object_object.cpp:
        (ObjectObjectImp::ObjectObjectImp):
        * kjs/property_slot.cpp:
        (KJS::PropertySlot::undefinedGetter):
        (KJS::PropertySlot::functionGetter):
        * kjs/reference.cpp:
        (KJS::Reference::getPropertyName):
        * kjs/reference_list.cpp:
        (ReferenceListIterator::operator++):
        * kjs/regexp_object.cpp:
        (RegExpObjectImp::RegExpObjectImp):
        (RegExpObjectImp::getValueProperty):
        (RegExpObjectImp::putValueProperty):
        * kjs/string_object.cpp:
        (StringInstance::lengthGetter):
        (StringInstance::indexGetter):
        (StringPrototype::StringPrototype):
        * kxmlcore/Assertions.mm:
        * kxmlcore/FastMalloc.cpp:
        (KXMLCore::TCMalloc_PageHeap::CheckList):
        * kxmlcore/HashTable.h:
        (KXMLCore::HashTableConstIterator::checkValidity):
        (KXMLCore::IdentityHashTranslator::translate):
        * pcre/pcre_get.c:
        (pcre_get_stringnumber):

2006-02-23  Darin Adler  <darin@apple.com>

        - try to fix buildbot failure

        * bindings/c/c_utility.cpp: Touch this file, which seems to not have been
        recompiled after additional inlining was introduced (Xcode bug?).

2006-02-23  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Darin, Maciej.

        - Inline some functions suggested by Shark. 2.9% speedup on super
        accurate JS iBench.

        http://bugs.webkit.org/show_bug.cgi?id=7411
        <rdar://problem/4448116>

        * kjs/nodes.h:
        (KJS::ArgumentsNode::evaluateList):
        * kjs/object.cpp:
        * kjs/object.h:
        (KJS::ScopeChain::release):
        (KJS::JSObject::toPrimitive):
        * kjs/scope_chain.cpp:
        * kjs/ustring.cpp:
        * kjs/ustring.h:
        (KJS::UString::toArrayIndex):
        * kjs/value.cpp:
        * kjs/value.h:
        (KJS::JSValue::toObject):
        * kxmlcore/FastMalloc.cpp:
        (KXMLCore::TCMalloc_ThreadCache_FreeList::Push):
        (KXMLCore::TCMalloc_ThreadCache_FreeList::Pop):

2006-02-21  Eric Seidel  <eseidel@apple.com>

        Added *.user to ignore list.

2006-02-21  Eric Seidel  <eseidel@apple.com>

        Reviewed by ggaren.

        Add grammarWrapper.cpp to work around visual studio bug plaguing buildbot.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
        * JavaScriptCore.vcproj/JavaScriptCore/grammarWrapper.cpp: Added.

2006-02-21  Eric Seidel  <eseidel@apple.com>

        Reviewed by ggaren.

        * kjs/testkjs.cpp: #if out timeval code on win32

2006-02-21  Michael Emmel  <mike.emmel@gmail.com>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=7397
          TCPageMap.h would not compile for me because string.h was missing

        * kxmlcore/TCPageMap.h: Added <string.h> include.

2006-02-21  Darin Adler  <darin@apple.com>

        Reviewed by John Sullivan.

        - http://bugs.webkit.org/show_bug.cgi?id=7404
          remove a bunch of extra implementsCall overrides

        * JavaScriptCore.xcodeproj/project.pbxproj: Sorted files.

        * kjs/internal.h: Made InternalFunctionImp::callAsFunction pure virtual so that
        we'll get a compile error if some derived class neglects to implement it.

        * kjs/function.cpp: (KJS::FunctionImp::FunctionImp): Remove unneeded initialization
        of param, which is an OwnPtr so it gets initialized by default.

        * bindings/runtime_method.cpp:
        * bindings/runtime_method.h:
        * kjs/array_object.cpp:
        * kjs/array_object.h:
        * kjs/bool_object.cpp:
        * kjs/bool_object.h:
        * kjs/date_object.cpp:
        * kjs/date_object.h:
        * kjs/error_object.cpp:
        * kjs/error_object.h:
        * kjs/function.cpp:
        * kjs/function.h:
        * kjs/function_object.cpp:
        * kjs/function_object.h:
        * kjs/math_object.cpp:
        * kjs/math_object.h:
        * kjs/number_object.cpp:
        * kjs/number_object.h:
        * kjs/object_object.cpp:
        * kjs/object_object.h:
        * kjs/regexp_object.cpp:
        * kjs/regexp_object.h:
        * kjs/string_object.cpp:
        * kjs/string_object.h:
        Removed many rendundant implementations of implementsCall from subclasses of
        InternalFunctionImp.

2006-02-21  Darin Adler  <darin@apple.com>

        - fixed build

        * kjs/internal.cpp: (KJS::InternalFunctionImp::implementsCall):
        Oops, fixed name.

2006-02-21  Darin Adler  <darin@apple.com>

        Change suggested by Mitz.

        - http://bugs.webkit.org/show_bug.cgi?id=7402
          REGRESSION: Methods do not execute

        * kjs/internal.h: Add implementsHasCall to InternalFunctionImp.
        * kjs/internal.cpp: (KJS::InternalFunctionImp::implementsHasCall):
        Return true. All the classes derived from InternalFunctionImp need
        to return true from this -- later we can remove all the extra
        implementations too.

2006-02-21  Maciej Stachowiak  <mjs@apple.com>

        - fix build breakage caused by last-minute change to my patch

        * kjs/lookup.h:

2006-02-20  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Geoff and Darin.
        
        Patch from Maks Orlovich, based on work by David Faure, hand-applied and 
        significantly reworked by me.
        
        - Patch: give internal function names (KJS merge)
        http://bugs.webkit.org/show_bug.cgi?id=6279

        * tests/mozilla/expected.html: Updated for newly fixed test.

        * kjs/array_object.cpp:
        (ArrayProtoFunc::ArrayProtoFunc):
        * kjs/array_object.h:
        * kjs/bool_object.cpp:
        (BooleanPrototype::BooleanPrototype):
        (BooleanProtoFunc::BooleanProtoFunc):
        * kjs/bool_object.h:
        * kjs/date_object.cpp:
        (KJS::DateProtoFunc::DateProtoFunc):
        (KJS::DateObjectImp::DateObjectImp):
        (KJS::DateObjectFuncImp::DateObjectFuncImp):
        * kjs/error_object.cpp:
        (ErrorPrototype::ErrorPrototype):
        (ErrorProtoFunc::ErrorProtoFunc):
        * kjs/error_object.h:
        * kjs/function.cpp:
        (KJS::FunctionImp::FunctionImp):
        (KJS::GlobalFuncImp::GlobalFuncImp):
        * kjs/function.h:
        * kjs/function_object.cpp:
        (FunctionPrototype::FunctionPrototype):
        (FunctionProtoFunc::FunctionProtoFunc):
        (FunctionProtoFunc::callAsFunction):
        * kjs/function_object.h:
        * kjs/internal.cpp:
        (KJS::InterpreterImp::initGlobalObject):
        (KJS::InternalFunctionImp::InternalFunctionImp):
        * kjs/internal.h:
        (KJS::InternalFunctionImp::functionName):
        * kjs/lookup.h:
        (KJS::staticFunctionGetter):
        (KJS::HashEntryFunction::HashEntryFunction):
        (KJS::HashEntryFunction::implementsCall):
        (KJS::HashEntryFunction::toBoolean):
        (KJS::HashEntryFunction::implementsHasInstance):
        (KJS::HashEntryFunction::hasInstance):
        * kjs/math_object.cpp:
        (MathFuncImp::MathFuncImp):
        * kjs/math_object.h:
        * kjs/number_object.cpp:
        (NumberPrototype::NumberPrototype):
        (NumberProtoFunc::NumberProtoFunc):
        * kjs/number_object.h:
        * kjs/object.cpp:
        (KJS::JSObject::putDirectFunction):
        (KJS::Error::create):
        * kjs/object.h:
        * kjs/object_object.cpp:
        (ObjectPrototype::ObjectPrototype):
        (ObjectProtoFunc::ObjectProtoFunc):
        * kjs/object_object.h:
        * kjs/regexp_object.cpp:
        (RegExpPrototype::RegExpPrototype):
        (RegExpProtoFunc::RegExpProtoFunc):
        * kjs/regexp_object.h:
        * kjs/string_object.cpp:
        (StringProtoFunc::StringProtoFunc):
        (StringObjectImp::StringObjectImp):
        (StringObjectFuncImp::StringObjectFuncImp):
        * kjs/string_object.h:
        
2006-02-20  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Darin, with help from Eric, Maciej.

        - More changes to support super-accurate JS iBench. Doesn't work on 
        Windows. (Doesn't break Windows, either.) I've filed 
        [http://bugs.webkit.org/show_bug.cgi?id=7399] about that. 

        * kjs/interpreter.cpp:
        (KJS::Interpreter::evaluate): Print line numbers with exception output
        * kjs/testkjs.cpp: Changed " *" to "* " because Eric says that's the 
        way we roll with .cpp files.
        (StopWatch::StopWatch): New class. Provides microsecond-accurate 
        timings.
        (StopWatch::~StopWatch):
        (StopWatch::start):
        (StopWatch::stop):
        (StopWatch::getElapsedMS):
        (TestFunctionImp::callAsFunction): Added missing return statement. 
        Fixed up "run" to use refactored helper functions. Removed bogus 
        return statement from "quit" case. Made "print" output to stdout 
        instead of stderr because that makes more sense, and PERL handles 
        stdout better.
        (main): Factored out KXMLCore unit tests. Removed custom exception 
        printing code because the interpreter prints exceptions for you. Added 
        a "delete" call for the GlobalImp we allocate.
        (testIsInteger): New function, result of refacotring.
        (createStringWithContentsOfFile): New function, result of refactoring. 
        Renamed "code" to "buffer" to match factored-out-ness.

2006-02-20  Eric Seidel  <eseidel@apple.com>

        Reviewed by hyatt.

        Fix "Copy ICU DLLs..." phase.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
        * JavaScriptCore.vcproj/JavaScriptCore/build-generated-files.sh:

2006-02-19  Darin Adler  <darin@apple.com>

        - renamed ERROR to LOG_ERROR to fix build
          presumably Maciej had this change and forgot to land it

        * kjs/collector.cpp: Removed now-unneeded #undef ERROR.
        * kxmlcore/Assertions.h: Renamed ERROR to LOG_ERROR.
        * kxmlcore/FastMalloc.cpp: Changed MESSAGE macro to use LOG_ERROR.

2006-02-18  Mitz Pettel  <opendarwin.org@mitzpettel.com>

        Test: fast/js/toString-exception.html

        Reviewed by Maciej.

        - fix http://bugs.webkit.org/show_bug.cgi?id=7343
          REGRESSION: fast/js/toString-overrides.html fails when run multiple times

        * kjs/array_object.cpp:
        (ArrayProtoFunc::callAsFunction): Remove the object from the visited elements set before
        returning an error.

2006-02-18  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        - http://bugs.webkit.org/show_bug.cgi?id=7345
          add insert and remove to KXMLCore::Vector

        * kxmlcore/Vector.h: Added "moveOverlapping", which is used in both
        insert and remove to slide elements within the vector. Also added
        "insert" and "remove" functions.

2006-02-16  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by John.

        - Fixed <rdar://problem/4448534> TOT REGRESSION: crash in KJS::
        Bindings::Instance::deref when leaving page @ gigaom.com

        * bindings/c/c_instance.cpp:
        (KJS::Bindings::CInstance::~CInstance): Since we cache the class object
        globally, we shouldn't delete it, so don't.

2006-02-16  Timothy Hatcher  <timothy@apple.com>

        Added -Wno-deprecated-declarations to all the ObjC binding files to prevent deprecation
        warnings. Using <rdar://problem/4448350> to track this.

        * JavaScriptCore.xcodeproj/project.pbxproj:
        * bindings/objc/objc_jsobject.h: Removed empty file.
        * bindings/objc/objc_jsobject.mm: Removed empty file.

2006-02-16  Tim Omernick  <timo@apple.com>

        Reviewed by Geoff.

        <rdar://problem/4428609> Flash Player 8.0.22 can crash Safari (and WebKit apps) with
        javascript disabled (7015)

        * bindings/NP_jsobject.cpp:
        (_NPN_CreateNoScriptObject):
        Returns an NPObject which is not bound to a JavaScript object.  This kind of NPObject
        can be given to a plugin as the "window script object" when JavaScript is disabled.
        The object has a custom NPClass, NPNoScriptObjectClass, which has no defined methods.
        Because of this, none of the NPN_* functions called by the plugin on this "no script
        object" will cause entry into JavaScript code.
        (_NPN_InvokeDefault):
        Make sure the NPVariant is filled before returning from this function.  This never
        mattered before because we never reached this case, having only created NPObjects of
        the class NPScriptObjectClass.
        (_NPN_Invoke):
        ditto
        (_NPN_Evaluate):
        ditto
        (_NPN_GetProperty):
        ditto

        * bindings/NP_jsobject.h:
        Declared _NPN_CreateNoScriptObject().

2006-02-16  Darin Adler  <darin@apple.com>

        Reviewed by me, change by Peter Kuemmel.

        * kjs/operations.cpp: (KJS::isNegInf): Fix Windows code, which was
        checking for positive infinity (rolling in fix from KDE side).

2006-02-15  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Maciej, Eric.

        - JavaScriptCore half of fix for <rdar://problem/4176077> CrashTracer: 6569
        crashes in DashboardClient at com.apple.JavaScriptCore:
        KJS::Bindings::ObjcFallbackObjectImp::type()

        WebCore and JavaScriptCore weren't sharing Instance objects very
        nicely. I made them use RefPtrs, and sent them to bed without dessert.

        * bindings/jni/jni_instance.cpp: Made _instance a RefPtr
        (JavaInstance::~JavaInstance):
        (JObjectWrapper::JObjectWrapper):
        * bindings/jni/jni_instance.h:
        (KJS::Bindings::JObjectWrapper::ref):
        (KJS::Bindings::JObjectWrapper::deref):
        * bindings/jni/jni_runtime.cpp: Made _array a RefPtr
        (JavaArray::~JavaArray):
        (JavaArray::JavaArray):
        * bindings/jni/jni_runtime.h:
        (KJS::Bindings::JavaArray::operator=):
        * bindings/objc/objc_runtime.h:
        - Prohibited copying because that would muss the ref count.
        - Prohibited construction without instance because an instance wrapper
        without an instance is almost certainly a bug.
        * bindings/objc/objc_runtime.mm:
        (ObjcFallbackObjectImp::ObjcFallbackObjectImp):
        * bindings/runtime.cpp:
        (KJS::Bindings::Instance::Instance):
        (KJS::Bindings::Instance::createBindingForLanguageInstance):
        (KJS::Bindings::Instance::createRuntimeObject):
        * bindings/runtime.h:
        (KJS::Bindings::Instance::ref):
        (KJS::Bindings::Instance::deref):
        * bindings/runtime_object.cpp:
        (RuntimeObjectImp::RuntimeObjectImp):
        (RuntimeObjectImp::fallbackObjectGetter):
        (RuntimeObjectImp::fieldGetter):
        (RuntimeObjectImp::methodGetter):
        (RuntimeObjectImp::getOwnPropertySlot):
        (RuntimeObjectImp::put):
        (RuntimeObjectImp::canPut):
        * bindings/runtime_object.h: 
        - Removed ownsInstance data member because RefPtr takes care of 
        instance lifetime now. 
        - Prohibited copying because that would muss the ref count.
        - Prohibited construction without instance because an instance wrapper
        without an instance is almost certainly a bug.
        (KJS::RuntimeObjectImp::getInternalInstance):

2006-02-15  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by John.

        - Applied the 4330457 change to CClass and ObjcClass as well.

        Once plugins work in DumpRenderTree, running run-webkit-tests --leaks
        will catch this. 

        This change isn't as critical because CClass and ObjcClass objects get 
        cached globally and never deleted, but it's good practice, in case we 
        ever do decide to delete CClass and ObjcClass objects.

        This change requires prohibiting copying, because we don't do any 
        intelligent ref-counting -- when a Class is destroyed, it destroys its 
        methods and fields unconditionally. (Java classes already prohibited
        copying.)

        * bindings/c/c_class.cpp:
        - Merged _commonInit and _commonDelete into constructor and destructor.
        (CClass::CClass):
        (CClass::~CClass):
        (CClass::methodsNamed): Added delete callbacks
        (CClass::fieldNamed): Added delete callbacks
        * bindings/c/c_class.h: Prohibited copying
        * bindings/c/c_instance.cpp: 
        (KJS::Bindings::CInstance::getClass): Changed to use the preferred 
        class factory method, to take advantage of the global cache.

        [ Repeated changes applied to CClass for ObjcClass: ]

        * bindings/objc/objc_class.h: 
        * bindings/objc/objc_class.mm:
        (KJS::Bindings::ObjcClass::ObjcClass):
        (KJS::Bindings::ObjcClass::~ObjcClass):
        (KJS::Bindings::ObjcClass::methodsNamed):
        (KJS::Bindings::ObjcClass::fieldNamed):
        * bindings/objc/objc_runtime.h:
        (KJS::Bindings::ObjcMethod::ObjcMethod): Initialized uninitialized
        variable to prevent bad CFRelease.
        (KJS::Bindings::ObjcMethod::~ObjcMethod): Removed erroneous ';' from
        if statement to prevent bad CFRelease.
        * bindings/objc/objc_runtime.cpp: Changed to use the preferred
        ObjectStructPtr, for clarity.

2006-02-14  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by John.

        - Fixed <rdar://problem/4330457> CrashTracer: [REGRESSION] 3763 crashes
        in Safari at com.apple.JavaScriptCore: KJS::Bindings::JavaInstance::
        getClass const + 56

        Once plugins work in DumpRenderTree, running run-webkit-tests --leaks
        will catch this. 

        This was a memory leak in the bindings code. The leak was so extreme
        that it would cause Safari or the JVM to abort from lack of memory.
        Upon construction, Class objects create field and method objects, 
        storing them in CFDictionaries. The bug was that upon destruction, the 
        class objects released the dictionaries but didn't destroy the stored 
        objects.

        The fix is to supply CFDictionary callbacks for destroying the values
        added to the dictionary. 
        
        * bindings/jni/jni_class.cpp: 
        (JavaClass::JavaClass): Added delete callbacks
        * bindings/runtime.cpp: Added definitions for delete callbacks
        (KJS::Bindings::deleteMethodList):
        (KJS::Bindings::deleteMethod):
        (KJS::Bindings::deleteField):
        * bindings/runtime.h: Added declarations for delete callbacks

2006-02-14  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Justin.

        Fixed <rdar://problem/4415050> STD: WebCore build steps use echo -n, which will change
        behavior due to POSIX version of sh

        * JavaScriptCore.xcodeproj/project.pbxproj: removed the use of echo -n, replaced with printf ""

2006-02-13   Dave Hyatt <hyatt@apple.com>

        Fix Win32 bustage in JavaScriptCore.

        Reviewed by darin

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
        Add JSImmediate to the Win32 project.

        * kjs/JSImmediate.h:
        (KJS::JSImmediate::fromDouble):
        (KJS::JSImmediate::toDouble):
        (KJS::JSImmediate::NanAsBits):
        (KJS::JSImmediate::oneAsBits):
        Win32 needs explicit returns after abort() for non-void functions.

        * kjs/testkjs.cpp:
        (run):
        Win32 catches a bug in testkjs!  The "return 2" should actually
        have been a return false.

        * kjs/value.h:
        The extern decls of NaN and Inf need to be const.

=== JavaScriptCore-521.7 ===

2006-02-13  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Darin.

        Replaced the old NS_DURING exception blocking with @try/@catch.

        * JavaScriptCorePrefix.h: undef try and catch to workaround a C++ conflict
        * bindings/objc/objc_instance.mm:
        (ObjcInstance::invokeMethod):
        (ObjcInstance::invokeDefaultMethod):
        (ObjcInstance::setValueOfUndefinedField):
        (ObjcInstance::getValueOfUndefinedField):
        * bindings/objc/objc_runtime.mm:
        (ObjcField::valueFromInstance):
        (ObjcField::setValueToInstance):
        (ObjcArray::setValueAt):
        (ObjcArray::valueAt):

2006-02-13  Darin Adler  <darin@apple.com>

        - fix a couple problems building on Windows, based on requests
          from Krzysztof Kowalczyk <kkowalczyk@gmail.com>

        * kjs/JSImmediate.h: Change code using non-standard u_int32/64_t types
        to the standard uint32/64_t. Also removed curious "isIEEE()" function
        that checked the sizes of some types (and type sizes alone don't tell you if
        the floating point conforms to the IEEE-standard). Added missing include
        of <stdint.h>.

        * kjs/property_slot.h: Added missing include of <assert.h>.

2006-02-12  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by darin.

        Cleaned up testkjs, added new "run" functionality to allow scripting 
        tests from within JS. ("run" is a part of my new super-accurate
        JS iBench.)

        No regressions in run-javascriptcore-tests.

        * kjs/testkjs.cpp:
        (GlobalImp::className):
        (TestFunctionImp::):
        (TestFunctionImp::callAsFunction):
        (main):
        (run):

2006-02-11  Alexey Proskuryakov  <ap@nypop.com>

        Reviewed by Darin.

        - improve fix for http://bugs.webkit.org/show_bug.cgi?id=5163
        RealPlayer.GetTitle() Crashes Safari/Dashboard

        * bindings/c/c_utility.cpp: (KJS::Bindings::convertUTF8ToUTF16):
        Use kCFStringEncodingISOLatin1 rather than kCFStringEncodingWindowsLatin1, 
        because the latter encoding has holes, and conversion can still fail.

2006-02-10  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Darin.

        - Inlined RefPtr assignment operators. .7% performance win on 
        super-accurate JS iBench.

        * kxmlcore/RefPtr.h:
        (KXMLCore::::operator):

2006-02-10  Geoffrey Garen  <ggaren@apple.com>

        No review needed, just a build fix. This time for sure.

        * kjs/JSType.h:

2006-02-10  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by eric.
        
        - Fixed build. As it goes without saying, I will not mention that I
        blame Kevin.

        * JavaScriptCore.xcodeproj/project.pbxproj:
        * kjs/JSImmediate.cpp:
        (KJS::JSImmediate::toObject):

2006-02-09  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by mjs.

        - Fixed <rdar://problem/4343730> Should switch ConstantValues (null, 
        undefined, true, false) from JS objects to immediate values similar to
        SimpleNumber

        2.0% performance gain on my new super-accurate version of JS iBench.
        (I promise to land a version of it soon.)

        The gist of the change:
        (1) The SimpleNumber class (simple_number.h) is now the JSImmediate
        class (JSImmediate.h/.cpp), and it handles not only numbers but also 
        null, undefined, true, and false. 
        (2) JSImmediate provides convenience methods for the bit masking
        necessary to encode and decode immediate values.
        (3) ConstantValues, BooleanImp, NullImp, and UndefinedImp are gone.
        (4) JSCell no longer implements functions like getBoolean, because
        only a JSImmediate can be a boolean.
        (5) JSImmediate no longer uses ALWAYS_INLINE because there's no need,
        and ALWAYS_INLINE is a non-portable option of last resort.
        (6) Type is now JSType, and it resides in its own file, JSType.h.
        Since I was there, I did some header include sorting as part of this
        change.

        The rest pretty much explains itself.

        * JavaScriptCore.xcodeproj/project.pbxproj: Removed simple_number.h,
        added JSImmediate.h/.cpp.
        * bindings/c/c_instance.cpp:
        (KJS::Bindings::CInstance::defaultValue):
        * bindings/c/c_instance.h:
        * bindings/c/c_utility.cpp:
        (KJS::Bindings::convertValueToNPVariant):
        * bindings/jni/jni_instance.cpp:
        (JavaInstance::defaultValue):
        * bindings/jni/jni_instance.h:
        * bindings/jni/jni_jsobject.cpp:
        (JavaJSObject::convertValueToJObject):
        * bindings/objc/WebScriptObject.mm:
        (+[WebScriptObject _convertValueToObjcValue:originExecutionContext:executionContext:]):
        Standardized calls to use getXXX instead of hand-rolling JSValue 
        functionality.
        * bindings/objc/objc_instance.h:
        * bindings/objc/objc_instance.mm:
        (ObjcInstance::getValueOfUndefinedField):
        (ObjcInstance::defaultValue):
        * bindings/objc/objc_runtime.h:
        * bindings/objc/objc_runtime.mm:
        (ObjcFallbackObjectImp::type):
        (ObjcFallbackObjectImp::defaultValue):
        * bindings/runtime.h:
        (KJS::Bindings::Instance::getValueOfUndefinedField):
        * bindings/runtime_object.cpp:
        (RuntimeObjectImp::defaultValue):
        * bindings/runtime_object.h:
        * kjs/JSImmediate.h: Added.
        (KJS::JSImmediate::isImmediate):
        (KJS::JSImmediate::isNumber):
        (KJS::JSImmediate::isBoolean):
        (KJS::JSImmediate::isUndefinedOrNull):
        (KJS::JSImmediate::fromDouble):
        (KJS::JSImmediate::toDouble):
        (KJS::JSImmediate::toBoolean):
        (KJS::JSImmediate::trueImmediate):
        (KJS::JSImmediate::falseImmediate):
        (KJS::JSImmediate::NaNImmediate):
        (KJS::JSImmediate::undefinedImmediate):
        (KJS::JSImmediate::nullImmediate):
        (KJS::JSImmediate::tag):
        (KJS::JSImmediate::unTag):
        (KJS::JSImmediate::getTag):
        (KJS::JSImmediate::):
        (KJS::JSImmediate::isIEEE):
        (KJS::JSImmediate::is32bit):
        (KJS::JSImmediate::is64bit):
        (KJS::JSImmediate::NanAsBits):
        (KJS::JSImmediate::zeroAsBits):
        (KJS::JSImmediate::oneAsBits):
        * kjs/JSLock.cpp:
        (KJS::JSLock::lock): Removed hack-o-rama to initialize ConstantValues.
        * kjs/JSType.h: Added.
        * kjs/collector.cpp:
        (KJS::Collector::protect):
        (KJS::Collector::unprotect):
        (KJS::Collector::collect):
        * kjs/internal.cpp:
        (KJS::StringImp::toPrimitive):
        (KJS::NumberImp::toPrimitive):
        (KJS::NumberImp::toBoolean):
        (KJS::GetterSetterImp::toPrimitive):
        * kjs/internal.h:
        (KJS::StringImp::type):
        (KJS::NumberImp::type):
        * kjs/object.cpp:
        (KJS::JSObject::type):
        (KJS::tryGetAndCallProperty): Replaced "Are you one of the six things
        I'm looking for?" test with "Are you not the one thing I'm not looking
        for" test.
        (KJS::JSObject::defaultValue):
        (KJS::JSObject::toPrimitive):
        * kjs/object.h:
        (KJS::GetterSetterImp::type):
        (KJS::JSValue::isObject):
        * kjs/operations.cpp:
        (KJS::equal):
        (KJS::strictEqual):
        (KJS::add):
        * kjs/reference.cpp:
        (KJS::Reference::deleteValue):
        * kjs/simple_number.h: Removed.
        * kjs/string_object.cpp:
        (StringInstance::getOwnPropertySlot): fixed indentation
        * kjs/value.cpp:
        (KJS::JSValue::toObject):
        (KJS::jsNumberCell): New function to quarantine a PIC branch -- allows
        us to inline jsNumber without adding PIC branches to callers.
        * kjs/value.h:
        (KJS::jsUndefined):
        (KJS::jsNull):
        (KJS::jsNaN):
        (KJS::jsBoolean):
        (KJS::jsNumber):
        (KJS::JSValue::downcast):
        (KJS::JSValue::isUndefinedOrNull):
        (KJS::JSValue::isBoolean):
        (KJS::JSValue::isNumber):
        (KJS::JSValue::isString):
        (KJS::JSValue::isObject):
        (KJS::JSValue::getBoolean):
        (KJS::JSValue::getNumber):
        (KJS::JSValue::getString):
        (KJS::JSValue::getObject):
        (KJS::JSValue::getUInt32):
        (KJS::JSValue::mark): Replaced !JSImmediate::is() test with assertion,
        resulting in a slight performance gain. Callers should always check
        !marked() before calling mark(), so it's impossible to call mark on
        a JSImmediate.
        (KJS::JSValue::marked):
        (KJS::JSValue::type):
        (KJS::JSValue::toPrimitive):
        (KJS::JSValue::toBoolean):
        (KJS::JSValue::toNumber):
        (KJS::JSValue::toString):

2006-02-06  Eric Seidel  <eseidel@apple.com>

        Add svn:ignore properties for visual studio internals.

2006-02-06  Alexey Proskuryakov  <ap@nypop.com>

        Reviewed by Darin.

        - Refactor DateInstance to provide direct access to data. Several WIN32 modifications.
        http://bugs.webkit.org/show_bug.cgi?id=7107

        - No tests added - only changed functionality on WIN32, which should be covered by 
        existing tests.

        * kjs/date_object.cpp:
        (gmtoffset): On WIN32, use the recommended global (_timezone rather than timezone).
        Updated comments. 
        (KJS::timeZoneOffset): Removed, was basically the same as the above.
        (KJS::formatTime): Pass an UTC flag - UTC/local cannot be correctly selected on
        Windows based on struct tm itself.
        (KJS::DateInstance::getTime): Added.
        (KJS::DateInstance::getUTCTime): Added.
        (KJS::millisecondsToTM): Factored out from DateProtoFunc::callAsFunction().
        (KJS::DateObjectImp::callAsFunction): Use the new parameter to formatTime().
        (KJS::DateProtoFunc::callAsFunction): Updated for the other changes. The code for
        GetTimezoneOffset was incorrect on WIN32 - _daylight global has nothing to do
        with daylight savings time being in effect.

        * kjs/date_object.h: Added prototypes for new functions.

2006-02-05  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Anders.
        
        - fixed ~1100 KJS::Node leaked on layout tests
        http://bugs.webkit.org/show_bug.cgi?id=7097

        * kjs/internal.cpp:
        (KJS::Parser::noteNodeCycle):
        (KJS::Parser::removeNodeCycle):
        (KJS::clearNewNodes):
        * kjs/internal.h:
        * kjs/nodes.cpp:
        (ElementNode::breakCycle):
        (PropertyListNode::breakCycle):
        (ArgumentListNode::breakCycle):
        (StatListNode::StatListNode):
        (StatListNode::breakCycle):
        (VarDeclListNode::breakCycle):
        (BlockNode::BlockNode):
        (ClauseListNode::breakCycle):
        (CaseBlockNode::CaseBlockNode):
        (ParameterNode::breakCycle):
        (SourceElementsNode::SourceElementsNode):
        (SourceElementsNode::breakCycle):
        * kjs/nodes.h:
        (KJS::Node::breakCycle):
        (KJS::ElementNode::ElementNode):
        (KJS::ArrayNode::ArrayNode):
        (KJS::PropertyListNode::PropertyListNode):
        (KJS::ObjectLiteralNode::ObjectLiteralNode):
        (KJS::ArgumentListNode::ArgumentListNode):
        (KJS::ArgumentsNode::ArgumentsNode):
        (KJS::VarDeclListNode::VarDeclListNode):
        (KJS::VarStatementNode::VarStatementNode):
        (KJS::ForNode::ForNode):
        (KJS::CaseClauseNode::CaseClauseNode):
        (KJS::ClauseListNode::ClauseListNode):
        (KJS::ParameterNode::ParameterNode):
        (KJS::FuncExprNode::FuncExprNode):
        (KJS::FuncDeclNode::FuncDeclNode):

2006-02-05  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Hyatt.
        
        - fix default traits for classes to make sure default constructors get called

        * kxmlcore/VectorTraits.h:
        (KXMLCore::):

2006-02-04  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        - fix http://bugs.webkit.org/show_bug.cgi?id=5210
          REGRESSION: for/in loop with var changes global variable instead of making local

        Test: fast/js/for-in-var-scope.html

        * kjs/nodes.cpp:
        (valueForReadModifyAssignment): Use ALWAYS_INLINE macro.
        (ForInNode::execute): Break out of the scope chain loop once we find and set the
        loop variable. We don't want to set multiple loop variables.
        (ForInNode::processVarDecls): Process the declaration of the loop variable.

        - other cleanup

        * kjs/object.cpp: (KJS::tryGetAndCallProperty): Use ALWAYS_INLINE macro.
        * kxmlcore/FastMalloc.cpp: Change to use ALWAYS_INLINE macro from AlwaysInline.h
        instead of defining it here a second time.

2006-02-04  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Hyatt.
        
        - change JavaScript collector statistics calls to use HashCountedSet instead
        of CFSet; other misc cleanup
        http://bugs.webkit.org/show_bug.cgi?id=7072
        
        * kjs/collector.cpp:
        (KJS::Collector::numProtectedObjects): renamed from numReferencedObjects
        (KJS::typeName):
        (KJS::Collector::rootObjectTypeCounts): renamed from rootObjectClasses,
        use HashSet
        * kjs/collector.h:
        (KJS::Collector::isOutOfMemory): Renamed from outOfMemory.
        * kjs/nodes.cpp:

2006-02-03  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Justin.

        Renamed configuration names to Debug, Release and Production.

        * JavaScriptCore.xcodeproj/project.pbxproj:

2006-02-02  George Staikos <staikos@opensource.apple.com>

        Reviewed by Maciej.

        * kjs/lookup.h: Fix compile, merged from KDE.

2006-02-02  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        - http://bugs.webkit.org/show_bug.cgi?id=7005
          add Noncopyable, OwnPtr, OwnArrayPtr to KXMLCore

        * kxmlcore/Noncopyable.h: Added.
        * kxmlcore/OwnArrayPtr.h: Added.
        * kxmlcore/OwnPtr.h: Added.

        * JavaScriptCore.xcodeproj/project.pbxproj: Added new files.

        * kjs/function.h:
        * kjs/function.cpp: Use OwnPtr for Parameter pointers.

        * kjs/internal.h: Use Noncopyable for LabelStack.

        * kjs/list.cpp: Use OwnArrayPtr for overflow.

        * kjs/property_map.h:
        * kjs/property_map.cpp: Use OwnArrayPtr for SavedProperties.
        Use Vector for some stack buffers.

        * kjs/regexp_object.h:
        * kjs/regexp_object.cpp: Use OwnArrayPtr for lastOvector.

2006-01-31  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin.
        
        - fixed leak of hundreds of thousands of JS parser nodes on the layout tests, and added an exit counter
        that would catch them

        * kjs/nodes.cpp:
        (NodeCounter::~NodeCounter): Added debug-only node counter.
        (Node::Node):
        (Node::~Node):
        * kxmlcore/VectorTraits.h: Simple classes like RefPtr do in fact need destruction.

2006-01-31  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        - added deleteAllValues for HashSet as well as HashMap
        - fixed conversion from const_iterator to iterator, which I broke a while back

        * kxmlcore/HashMap.h: Updated copyright date.
        * kxmlcore/HashSet.h: (KXMLCore::deleteAllValues): Added.
        * kxmlcore/HashTable.h: (KXMLCore::HashTableIterator::operator const_iterator): Added.

2006-01-31  Tim Omernick  <timo@apple.com>

        Reviewed by Geoff Garen.

        * bindings/c/c_utility.cpp:
        (KJS::Bindings::convertUTF8ToUTF16):
        Fixed an invalid assertion that UTF8Chars is not NULL.  It is valid for it to be NULL as long as
        UTF8Length is 0.
        This fixes an assertion failure on TOT at <http://www.musicindiaonline.com/p/x/tJO0OOBME9.As1NMvHdW/>,
        where JavaScript is getting a NULL string back from some call on the Real Player plugin.

2006-01-30  Anders Carlsson  <andersca@mac.com>

        Reviewed by Darin.

        Fix http://bugs.webkit.org/show_bug.cgi?id=6907
        REGRESSION: United.com menus messed up due to document.all/MSIE sniff
        
        * kjs/nodes.cpp:
        (typeStringForValue):
        Return "undefined" if the given object should masquerade as undefined.
        
        * kjs/object.h:
        (KJS::JSObject::masqueradeAsUndefined):
        Rename from isEqualToNull.
        
        * kjs/operations.cpp:
        (KJS::equal):
        Update for name change.

2006-01-29  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin.
        
        - properly define Vector assignment operator; the private version was accidentally left
        in, and the template version is not enough to replace the default

        * kxmlcore/Vector.h:
        (KXMLCore::Vector::operator=):

2006-01-29  Eric Seidel  <eseidel@apple.com>

        Reviewed by darin.

        Fix the build by applying a GCC-specific namespace hack.

        * kjs/lookup.h:

2006-01-29  Eric Seidel <eseidel@apple.com>

        Reviewed by hyatt.

        Fix build on Win32.

        * kjs/lookup.h: fixed ::cacheGlobalObject
        * kxmlcore/Vector.h:
        (KXMLCore::Vector::operator[]): use unsigned long

2006-01-29  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Dave Hyatt.

        * kxmlcore/Vector.h:
        (KXMLCore::Vector::operator[]): Add unsigned overload

2006-01-28  Darin Adler  <darin@apple.com>

        Reviewed by John Sullivan.

        - http://bugs.webkit.org/show_bug.cgi?id=6895
          include exception names in JavaScript form of DOM exception

        * khtml/ecma/kjs_binding.cpp: (KJS::setDOMException): Include the name of the
        exception in the error message.

2006-01-28  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin.
        
        - miscellaneous Vector improvements

        * kxmlcore/Vector.h:
        (KXMLCore::Vector::at): Add range-checking asserts.
        (KXMLCore::Vector::first): Added as a convenience.
        (KXMLCore::Vector::last): Convenience for stack-style use.
        (KXMLCore::Vector::removeLast): ditto

2006-01-28  Darin Adler  <darin@apple.com>

        Reviewed by John Sullivan

        - fix http://bugs.webkit.org/show_bug.cgi?id=6870
          REGRESSION: JavaScript Date constructor won't accept another Date object

        Test: fast/js/date-constructor.html

        * kjs/date_object.cpp: (KJS::DateObjectImp::construct):
        Added a special case for constructing one date from another (to avoid losing
        milliseconds, which are not in the text form, to match Firefox), and changed
        the base code to convert to primitive before checking for string to match
        the standard. Also corrected a couple silly things in the "construct from
        current time" code path (removed a floor that does no good, and changed
        the constant used to convert microseconds to milliseconds to be a 1000
        rather than "msPerSecond").

2006-01-28  Darin Adler  <darin@apple.com>

        * kjs/create_hash_table: Added missing license.

2006-01-28  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Dave Hyatt.
        
        - added a Vector class
        http://bugs.webkit.org/show_bug.cgi?id=6894

        * JavaScriptCore.xcodeproj/project.pbxproj:
        * kjs/internal.cpp:
        (KJS::Parser::saveNewNode): Apply Vector.
        (KJS::clearNewNodes): ditto
        * kjs/number_object.cpp:
        (integer_part_noexp): ditto
        (char_sequence): ditto
        * kjs/ustring.cpp:
        (KJS::UString::UTF8String): ditto
        * kxmlcore/HashMap.h:
        (KXMLCore::deleteAllValues): Tweaked this to only apply to HashMap,
        other versions are useful for other containers.
        * kxmlcore/Vector.h: Added. Implemented a Vector class, which should
        be usable for all Array/QVector style purposes, and also as a stack buffer
        with oversize handling. Also some helper classes to make vector operations
        as efficient as possible for POD types and for simple non-PODs like RefPtr.
        (KXMLCore::):
        (KXMLCore::VectorTypeOperations::destruct):
        (KXMLCore::VectorTypeOperations::initialize):
        (KXMLCore::VectorTypeOperations::move):
        (KXMLCore::VectorTypeOperations::uninitializedCopy):
        (KXMLCore::VectorTypeOperations::uninitializedFill):
        (KXMLCore::VectorBuffer::VectorBuffer):
        (KXMLCore::VectorBuffer::~VectorBuffer):
        (KXMLCore::VectorBuffer::deallocateBuffer):
        (KXMLCore::VectorBuffer::inlineBuffer):
        (KXMLCore::Vector::Vector):
        (KXMLCore::Vector::~Vector):
        (KXMLCore::Vector::size):
        (KXMLCore::Vector::capacity):
        (KXMLCore::Vector::isEmpty):
        (KXMLCore::Vector::at):
        (KXMLCore::Vector::operator[]):
        (KXMLCore::Vector::data):
        (KXMLCore::Vector::operator T*):
        (KXMLCore::Vector::operator const T*):
        (KXMLCore::Vector::begin):
        (KXMLCore::Vector::end):
        (KXMLCore::Vector::clear):
        (KXMLCore::Vector::fill):
        (KXMLCore::Vector::operator=):
        (KXMLCore::::Vector):
        (KXMLCore::::operator):
        (KXMLCore::::fill):
        (KXMLCore::::expandCapacity):
        (KXMLCore::::resize):
        (KXMLCore::::reserveCapacity):
        (KXMLCore::::append):
        (KXMLCore::deleteAllValues):
        * kxmlcore/VectorTraits.h: Added.
        (KXMLCore::VectorTraits): Traits to enable making Vector efficient for
        simple types.

2006-01-28  Alexey Proskuryakov  <ap@nypop.com>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=5163
        RealPlayer.GetTitle() Crashes Safari/Dashboard

        * bindings/c/c_utility.cpp: (KJS::Bindings::convertUTF8ToUTF16):
        Fallback to kCFStringEncodingWindowsLatin1 if the passed buffer is not valid UTF-8, preventing crashes.

2006-01-25  George Staikos <staikos@opensource.apple.com>

        Reviewed by Darin.

        * kxmlcore/HashFunctions.h: Merge build fix from KDE.

2006-01-25  Darin Adler  <darin@apple.com>

        - removed an unused source file

        * kjs/pointer_hash.h: Removed.
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Removed reference to pointer_hash.h.

2006-01-23  Anders Carlsson  <andersca@mac.com>

        Reviewed by Maciej.

        - fix http://bugs.webkit.org/show_bug.cgi?id=6737
        KJS_DEFINE_PROTOTYPE should work outside of the KJS namespace
        
        * kjs/lookup.h:
        Prefix all KJS types with KJS:: in KJS_DEFINE_PROTOTYPE.
        
        (cacheGlobalObject):
        Move this out of the KJS namespace.

2006-01-23  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Eric.

        - renamed PointerHash to PtrHash
        - made PtrHash the default hash function for int and pointer types that aren't further specialized
        - added an AtomicStringImpl class to make it easier and more typesafe to identity hash atomic strings
        - did appropriate consequent cleanup (very few places now need to declare a hash function)
        http://bugs.webkit.org/show_bug.cgi?id=6752
        
        * kjs/array_object.cpp:
        (ArrayProtoFunc::callAsFunction): no need to mention PointerHash
        * kjs/collector.cpp: ditto
        * kjs/identifier.cpp:
        (KXMLCore::): declare DefaultHash the new way
        * kjs/internal.cpp: no need to mention PointerHash
        * kjs/ustring.h:
        * kxmlcore/HashCountedSet.h: change how we get the default hash to make it
        easier to specialize on PtrHash
        * kxmlcore/HashFunctions.h:
        (KXMLCore::): renamed PointerHash to PtrHash; changed DefaultHash so that it has
        a Hash typedef rather than being a hash function class itself; declared DefaultHash
        for int and partializy specialized for pointer types
        * kxmlcore/HashMapPtrSpec.h:
        (KXMLCore::PtrHashIteratorAdapter::PtrHashIteratorAdapter): Slight tweaks for new
        way of handling pointer hash
        (KXMLCore::PtrHashConstIteratorAdapter::PtrHashConstIteratorAdapter): ditto
        (KXMLCore::): ditto
        * kxmlcore/HashMap.h: ditto
        * kxmlcore/HashSet.h: ditto

2006-01-23  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Tim Omernick.
        
        - use classes instead of free functions for extractors, this better matches how other
        things work and should avoid the need for hacky workarounds on other compilers
        http://bugs.webkit.org/show_bug.cgi?id=6748

        * kjs/array_object.cpp:
        * kjs/identifier.cpp:
        * kjs/internal.cpp:
        * kxmlcore/HashMap.h:
        (KXMLCore::PairFirstExtractor::extract):
        * kxmlcore/HashMapPtrSpec.h:
        (KXMLCore::):
        * kxmlcore/HashSet.h:
        (KXMLCore::IdentityExtractor::extract):
        * kxmlcore/HashTable.h:
        (KXMLCore::addIterator):
        (KXMLCore::removeIterator):
        (KXMLCore::HashTable::add):
        (KXMLCore::HashTable::isEmptyBucket):
        (KXMLCore::HashTable::isDeletedBucket):
        (KXMLCore::HashTable::HashTable):
        (KXMLCore::HashTable::lookup):
        (KXMLCore::HashTable::add):
        (KXMLCore::HashTable::reinsert):
        (KXMLCore::HashTable::find):
        (KXMLCore::HashTable::contains):
        (KXMLCore::HashTable::remove):
        (KXMLCore::HashTable::allocateTable):
        (KXMLCore::HashTable::deallocateTable):
        (KXMLCore::HashTable::expand):
        (KXMLCore::HashTable::rehash):
        (KXMLCore::HashTable::clear):
        (KXMLCore::HashTable::swap):
        (KXMLCore::HashTable::operator):
        (KXMLCore::HashTable::checkTableConsistency):
        (KXMLCore::HashTable::checkTableConsistencyExceptSize):
        (KXMLCore::HashTable::invalidateIterators):

2006-01-23  Maciej Stachowiak  <mjs@apple.com>

        Rubber stamped by Tim Hatcher.
        
        - renamed inert() operation on HashSet, HashCountedSet and HashTable to add()
        for consistency with HashMap

        * kjs/array_object.cpp:
        (ArrayProtoFunc::callAsFunction):
        * kjs/collector.cpp:
        (KJS::Collector::protect):
        * kjs/identifier.cpp:
        (KJS::Identifier::add):
        * kxmlcore/HashCountedSet.h:
        (KXMLCore::::add):
        * kxmlcore/HashMap.h:
        (KXMLCore::::inlineAdd):
        * kxmlcore/HashSet.h:
        (KXMLCore::::add):
        * kxmlcore/HashTable.h:
        (KXMLCore::HashTable::add):
        (KXMLCore::::add):
        (KXMLCore::::HashTable):

2006-01-23  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by thatcher
        
        Turned on -O2 for B&I build.

        * JavaScriptCore.xcodeproj/project.pbxproj:

2006-01-23  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Tim Hatcher.
        
        - it's "Franklin Street", not "Franklin Steet"

        * kjs/array_instance.h:
        * kjs/array_object.cpp:
        * kjs/array_object.h:
        * kjs/bool_object.cpp:
        * kjs/bool_object.h:
        * kjs/collector.cpp:
        * kjs/collector.h:
        * kjs/completion.h:
        * kjs/context.h:
        * kjs/date_object.cpp:
        * kjs/date_object.h:
        * kjs/debugger.cpp:
        * kjs/debugger.h:
        * kjs/dtoa.h:
        * kjs/error_object.cpp:
        * kjs/error_object.h:
        * kjs/function.cpp:
        * kjs/function.h:
        * kjs/function_object.cpp:
        * kjs/function_object.h:
        * kjs/grammar.y:
        * kjs/identifier.cpp:
        * kjs/identifier.h:
        * kjs/internal.cpp:
        * kjs/internal.h:
        * kjs/interpreter.cpp:
        * kjs/interpreter.h:
        * kjs/lexer.cpp:
        * kjs/lexer.h:
        * kjs/list.cpp:
        * kjs/list.h:
        * kjs/lookup.cpp:
        * kjs/lookup.h:
        * kjs/math_object.cpp:
        * kjs/math_object.h:
        * kjs/nodes.cpp:
        * kjs/nodes.h:
        * kjs/nodes2string.cpp:
        * kjs/number_object.cpp:
        * kjs/number_object.h:
        * kjs/object.cpp:
        * kjs/object.h:
        * kjs/object_object.cpp:
        * kjs/object_object.h:
        * kjs/operations.cpp:
        * kjs/operations.h:
        * kjs/property_map.cpp:
        * kjs/property_map.h:
        * kjs/property_slot.cpp:
        * kjs/property_slot.h:
        * kjs/reference.cpp:
        * kjs/reference.h:
        * kjs/reference_list.cpp:
        * kjs/reference_list.h:
        * kjs/regexp.cpp:
        * kjs/regexp.h:
        * kjs/regexp_object.cpp:
        * kjs/regexp_object.h:
        * kjs/scope_chain.cpp:
        * kjs/scope_chain.h:
        * kjs/simple_number.h:
        * kjs/string_object.cpp:
        * kjs/string_object.h:
        * kjs/testkjs.cpp:
        * kjs/types.h:
        * kjs/ustring.cpp:
        * kjs/ustring.h:
        * kjs/value.cpp:
        * kjs/value.h:
        * kxmlcore/AlwaysInline.h:
        * kxmlcore/ListRefPtr.h:
        * kxmlcore/PassRefPtr.h:
        * kxmlcore/RefPtr.h:

2006-01-23  Darin Adler  <darin@apple.com>

        Reviewed by John Sullivan.

        - change needed for fix to http://bugs.webkit.org/show_bug.cgi?id=6617
          REGRESSION: Crash in cloneChildNodes when clicking element

        * kxmlcore/PassRefPtr.h: Fix assignment operator from RefPtr of a different
        type by calling get() instead of going directly at m_ptr.
        * kxmlcore/RefPtr.h: Ditto.

        - other changes

        * JavaScriptCore.xcodeproj/project.pbxproj: Xcode decided to change this file.
        It's just a resorted list of keys in a dictionary.

        * kjs/fpconst.cpp: Wrap this file in #if __APPLE__ since the alternate version
        in internal.cpp is in #if !__APPLE__. This file is to give us the "no init
        routine" property we want to have on OS X.

2006-01-22  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin.

        - Set up Page class and invert Frame / WebCoreFrameBridge ownership
        http://bugs.webkit.org/show_bug.cgi?id=6577

        * kjs/interpreter.h: make globalExec virtual so ScriptInterpreter can 
        override it

2006-01-23  George Staikos <staikos@opensource.apple.com>

        Reviewed by Maciej and Darin.

        * kxmlcore/Assertions.h: This file only works with __APPLE__ right now
        * kjs/interpreter.cpp: ditto
        * kjs/simple_number.h: Add assert.h and remove from config.h
        * kjs/array_object.cpp: Use relative paths for kxmlcore includes
        * kjs/testkjs.cpp: Use relative paths for kxmlcore includes

2006-01-23  George Staikos <staikos@opensource.apple.com>

        Reviewed by Maciej.

        * kjs/config.h: unbreak preprocessor change

2006-01-23  George Staikos <staikos@opensource.apple.com>

        Approved by Maciej and Darin.

        * kjs/:
        * kxmlcore/:
             Update FSF address in license to make merging easier

2006-01-22  George Staikos <staikos@opensource.apple.com>

        Reviewed by Maciej.

        * kjs/collector.cpp: merge major speedup from KDE on Linux
                             patch by Maks Orlovich, bug #6145
                             Also unify cpu detection
        * kjs/config.h: define simpler CPU macros

2006-01-22  George Staikos <staikos@opensource.apple.com>

        Reviewed by Maciej.

        * kjs/collector.cpp: merge FreeBSD compile fix from KDE
                             -> requires build magic for use

2006-01-21  George Staikos <staikos@opensource.apple.com>

        Reviewed by Maciej.

        * kjs/nodes2string.cpp
        * kjs/operations.h
        * kjs/debugger.h
          Fix pedantic compile with some gcc versions (Merge from KDE)

        * kjs/create_hash_table:
          Fix build with Perl 5.8.0 (Merge from KDE)

2006-01-18  Darin Adler  <darin@apple.com>

        Reviewed by Hyatt.

        - hash table fixes needed for my WebCore changes

        * kxmlcore/HashTable.h: (KXMLCore::HashTableConstIterator::operator=):
        Added a missing return statement.

        * kxmlcore/HashTraits.h: Fix traits so they work properly for classes where you
        can't instantiate with a 0 by using traits rather than ? : to select the default
        emtpy value of hash table keys.

        - small cleanup of "runtime" code left over from recent JavaScript crash fix

        * bindings/runtime_root.h:
        (KJS::Bindings::RootObject::RootObject): No explicit initialization of _imp needed
        since it's now a ProtectedPtr.
        (KJS::Bindings::RootObject::setRootObjectImp): Remove old code that relied on the
        fact that _imp was 0 and replaced with use of ProtectedPtr.
        (KJS::Bindings::RootObject::rootObjectImp): Updated since _imp is a ProtectedPtr.

2006-01-17  Darin Adler  <darin@apple.com>

        Reviewed by Anders.

        - http://bugs.webkit.org/show_bug.cgi?id=6611
          add assertions to check correct use of hash table iterators

        * kxmlcore/HashTable.h:
        (KXMLCore::addIterator): Added. Helper function that adds an iterator to the list
        maintained by the specified hash table.
        (KXMLCore::removeIterator): Added. Helper function that removes an iterator from
        the list maintained by the hash table it's in.
        (KXMLCore::HashTableConstIterator::HashTableConstIterator): Added a HashTable
        parameter, ignored when not debugging. Call addIterator.
        (KXMLCore::HashTableConstIterator::~HashTableConstIterator):
        (KXMLCore::HashTableConstIterator::operator=): Call removeIterator.
        (KXMLCore::HashTableConstIterator::operator*): Call checkValidity.
        (KXMLCore::HashTableConstIterator::operator->): Ditto.
        (KXMLCore::HashTableConstIterator::operator++): Ditto.
        (KXMLCore::HashTableConstIterator::operator==): Ditto.
        (KXMLCore::HashTableConstIterator::operator!=): Ditto.
        (KXMLCore::HashTableConstIterator::checkValidity): Checks that the hash table
        pointer is not 0 and if there are two iterators that both point at the same table.
        (KXMLCore::HashTableIterator::HashTableIterator): Changed to use the const iterator
        as an implementation detail, to avoid having two separate iterator implementations.
        (KXMLCore::HashTableIterator::operator*): Ditto.
        (KXMLCore::HashTableIterator::operator->): Ditto.
        (KXMLCore::HashTableIterator::operator++): Ditto.
        (KXMLCore::HashTableIterator::operator==): Ditto.
        (KXMLCore::HashTableIterator::operator!=): Ditto.
        (KXMLCore::HashTable::HashTable): Initialize pointer to head of iterators list.
        (KXMLCore::HashTable::~HashTable): Added call to invalidateIterators.
        (KXMLCore::HashTable::makeIterator): Pass this pointer.
        (KXMLCore::HashTable::makeConstIterator): Ditto.
        (KXMLCore::HashTable::insert): Call invalidateIterators, since this is a public
        entry point that modifies the hash table.
        (KXMLCore::HashTable::remove): Ditto.
        (KXMLCore::HashTable::clear): Ditto.
        (KXMLCore::HashTable::swap): Ditto.
        (KXMLCore::HashTable::invalidateIterators): Added. Walks the iterators list and
        clears out the table, next, and previous pointers in all of them, and then clears
        the head so we have an empty list.
        (KXMLCore::addIterator): Added. Adds the iterator the the linked list in the
        passed-in table, and points the iterator at the table.
        (KXMLCore::removeIterator): Added. Removes the iterator from the linked list in
        the passed-in table.

        * kxmlcore/HashTraits.h: A bit of tweaking and formatting.

2006-01-17  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by eric
        
        Deployment builds now use -O2

        * JavaScriptCore.xcodeproj/project.pbxproj:

2006-01-17  Darin Adler  <darin@apple.com>

        Reviewed by Anders.

        - fix http://bugs.webkit.org/show_bug.cgi?id=6610
          change RefPtr so that it works when deref ends up deleting the RefPtr

        * kxmlcore/PassRefPtr.h: Always set m_ptr before calling deref.
        * kxmlcore/RefPtr.h: Ditto.

2006-01-16  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by darin.

        - Fixed http://bugs.webkit.org/show_bug.cgi?id=6322
        DateProtoFuncImp::callAsFunction can crash due to lack of type checking

        * kjs/date_object.cpp:
        (KJS::DateProtoFunc::callAsFunction): Type check calls to all methods. 
        This matches section 15.9.5 in the spec.

2006-01-16  Tim Omernick  <timo@apple.com>

        Reviewed by John Sullivan.

        JavaScriptCore part of <rdar://problem/4211707> NPAPI ref count behavior differs with Mozilla

        * bindings/npruntime.cpp:
        (_NPN_ReleaseObject):
        Refactored part of this function out into _NPN_DeallocateObject.
        (_NPN_DeallocateObject):
        Forcibly deallocates the passed object, even if its refcount is
        greater than zero.
        
        * bindings/npruntime_impl.h:
        Declared _NPN_DeallocateObject().

2006-01-16  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        - fix problem with ++, ==, and != on const iterators in
          HashMaps that are using the pointer specialization

        * kxmlcore/HashMapPtrSpec.h:
        (KXMLCore::PointerHashConstIteratorAdapter::operator++): Change type to const_iterator.
        (KXMLCore::PointerHashConstIteratorAdapter::operator==): Ditto.
        (KXMLCore::PointerHashConstIteratorAdapter::operator!=): Ditto.

2006-01-15  Alexey Proskuryakov  <ap@nypop.com>

        Reviewed by Anders.

        - fix http://bugs.webkit.org/show_bug.cgi?id=6561
        run-javascriptcore-tests doesn't work

        * JavaScriptCore/tests/mozilla/Getopt/Mixed.pm: 
        Changed revision number to 1.8 (broken by svn migration).

2006-01-14  David Kilzer  <ddkilzer@kilzer.net>

        Reviewed and landed by Anders.

        * kjs/create_hash_table: Fixed comment typo.

2006-01-13  Maks Orlovich   <maksim@kde.org>

        Mostly merging work by Peter Kelly. Reviewed by Maciej, landed by ap.

        - fix http://bugs.webkit.org/show_bug.cgi?id=6261
        Misc. array object fixes from KJS

        * kjs/array_object.cpp: Don't treat 2^32-1 as a real array index property.
        (ArrayInstance::getOwnPropertySlot): Ditto.
        (ArrayInstance::deleteProperty): Ditto.
        (ArrayInstance::put): Ditto.
        (ArrayInstance::propList): Added a FIXME comment.
        (ArrayInstance::put): Throw exception on trying to set invalid array length.
        (ArrayProtoFunc::callAsFunction): Do not use a separator argument when doing toString/toLocalString.
        * kjs/array_object.h: Added MAX_ARRAY_INDEX.

2006-01-13  Darin Adler  <darin@apple.com>

        - Replaced tabs with spaces in source files that had less than 10 lines with tabs.
        - Set allow-tabs Subversion property in source files that have more than 10 lines with tabs.

2006-01-13  Anders Carlsson  <andersca@mac.com>

        Reviewed by Eric.

        * kjs/create_hash_table:
        Use correct size variables.

2006-01-13  Anders Carlsson  <andersca@mac.com>

        Reviewed by Darin.

        * kjs/create_hash_table:
        Don't create an empty entry array, instead add a entry with all fields
        set to null and set the hash table size to 1.
        
        * kjs/lookup.cpp:
        (findEntry):
        Remove the hash table size check

2006-01-12  Anders Carlsson  <andersca@mac.com>

        Reviewed by Maciej.

        - fix http://bugs.webkit.org/show_bug.cgi?id=6494
        Crash when assigning a new function to a DOMParser object
        
        * JavaScriptCore.xcodeproj/project.pbxproj:
        Move lookup.cpp before lookup.h
        
        * kjs/lookup.cpp:
        (findEntry):
        If the hash table is empty, return 0 early.

2006-01-12  George Staikos <staikos@kde.org>

        Reviewed by Darin.

        * kjs/interpreter.cpp:
        * kjs/testkjs.cpp:
        * kjs/interpreter.h:
        Add helper to interpreter to call the collector in order to facilitate
        visibility rules in KDE.

2006-01-12  George Staikos <staikos@kde.org>

        Reviewed by Maciej.

        * kjs/kjs.pro: Updates to build the whole thing on Linux at least.

        * kxmlcore/HashTable.h: Add missing assert.h

2006-01-12  Darin Adler  <darin@apple.com>

        Reviewed by Geoff.

        - fix http://bugs.webkit.org/show_bug.cgi?id=6505
          retire APPLE_CHANGES from JavaScriptCore

        * JavaScriptCore.xcodeproj/project.pbxproj: Removed both
        APPLE_CHANGES and HAVE_CONFIG_H from all targets.

        * README: Removed. This had obsolete information in it
        and it wasn't clear what to replace it with.

        * kjs/collector.h: Removed an APPLE_CHANGES if around something
        that's not really platform-specific (although it does use a
        platform-specific API at the moment).
        * kjs/collector.cpp: Removed a mistaken comment.

        * kjs/grammar.y:
        * kjs/internal.cpp:
        * kjs/object.h:
        * kjs/operations.cpp:
        * kjs/operations.h:
        * kjs/ustring.h:
        Use __APPLE__ instead of APPLE_CHANGES for code that should be
        used only on Mac OS X.

        * kjs/interpreter.cpp: Removed APPLE_CHANGES ifdef around the include
        of the runtime.h header. Even though that header isn't needed at the
        moment on platforms other than Mac OS X, the conditional stuff should
        be in the header itself, not in this one client.

        * kjs/math_object.cpp: (MathFuncImp::callAsFunction): Removed some
        code inside APPLE_CHANGES. I'm pretty sure this code isn't needed on
        any platform where pow is implemented corrrectly according to the IEEE
        standard. If it is needed on some, we can add it back with an appropriate
        #if for the platforms where it is needed.

2006-01-12  Justin Haygood  <justin@xiondigital.net>

        Reviewed, tweaked, and landed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=6416
          lexer.cpp, grammar.y protect include of config.h with "HAVE_CONFIG_H"

        * kjs/dtoa.cpp: Removed HAVE_CONFIG_H, changed config.h to use
        quotes instead of angle brackets. Moved dtoa.h include to the top.
        Changed system header includes to use angle brackets instead of quotes.
        * kjs/grammar.y: Removed HAVE_CONFIG_H, changed config.h to use
        quotes instead of angle brackets.
        * kjs/lexer.cpp: Removed HAVE_CONFIG_H, changed config.h to use
        quotes instead of angle brackets. Moved lexer.h include to the top.
        * kjs/ustring.cpp: Removed HAVE_CONFIG_H, changed config.h to use
        quotes instead of angle brackets. Moved ustring.h include to the top.

2006-01-12  George Staikos <staikos@kde.org>

        Reviewed by Maciej

        - Import initial QMake file.  Doesn't fully work yet.

2006-01-11  Ricci Adams  <ricciadams@apple.com>

        Reviewed by Maciej and Darin, landed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=5939
          final comma in javascript object prevents parsing

        * kjs/grammar.y: Added rule to allow trailing comma in
        object construction.

2006-01-11  Ricci Adams  <ricciadams@apple.com>

        Reviewed by Geoff, landed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=5308
          Number.toFixed doesn't include leading 0

        * kjs/number_object.cpp: (NumberProtoFunc::callAsFunction):
        Fixed a "<" that should have been a "<=".

2006-01-11  Ricci Adams  <ricciadams@apple.com>

        Reviewed by Geoff, landed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=5307
          Number.toFixed doesn't round 0.5 up

        * kjs/number_object.cpp: (NumberProtoFunc::callAsFunction):
        Fixed a ">" that should have been a ">=".

2006-01-11  Justin Haygood  <justin@xiondigital.net>

        Reviewed and landed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=6486
          JavaScriptCore should use system malloc on Windows

        * kjs/config.h: Add USE_SYSTEM_MALLOC to the Win32 section.

2006-01-10  Darin Adler  <darin@apple.com>

        * Makefile: Took out unneeded "export" line.
        * <many-files>: Changed a lot of flags (cleared bogus executable bits, set
          MIME types, other small corrections).

2006-01-09  Darin Adler  <darin@apple.com>

        * Makefile.am: Removed.

2006-01-07  Anders Carlsson  <andersca@mac.com>

        Reviewed by Maciej.
        
        - fix http://bugs.webkit.org/show_bug.cgi?id=6373
        REGRESSION: JavaScript hang when comparing large array to null
        
        * kjs/object.h:
        (KJS::JSObject::isEqualToNull):
        Add new function which returns true if an object should be treated as null when
        doing comparisons.
        
        * kjs/operations.cpp:
        (KJS::equal):
        Use isEqualToNull.

2006-01-07  Alexey Proskuryakov  <ap@nypop.com>

        Reviewed by Maciej.

        - Fix WebCore development build
        http://bugs.webkit.org/show_bug.cgi?id=6408

        * kxmlcore/Assertions.h: Use __VA_ARGS__ in variadic macros.

2006-01-06  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin.

        - miscellaneous changes for 4% speedup on the JavaScript iBench
        http://bugs.webkit.org/show_bug.cgi?id=6396
        
        Changes mostly thanks to Maks Orlovich, tweaked a little by me.

        * kjs/create_hash_table: Use the same hash as the one used by Identifier.
        * kjs/function.cpp:
        (KJS::FunctionImp::processParameters): Use the new List::copyFrom
        (KJS::ActivationImp::ActivationImp): track variable while iterating
        * kjs/internal.cpp:
        (KJS::StringImp::toObject): create StringInstance directly
        * kjs/list.cpp:
        (KJS::List::copy): implement in terms of copyFrom
        (KJS::List::copyFrom): more efficient way to copy in another list
        * kjs/list.h:
        * kjs/lookup.cpp:
        (keysMatch): updated to work with identifier hash
        (findEntry): ditto
        (Lookup::findEntry): ditto
        (Lookup::find): ditto
        * kjs/lookup.h:

2006-01-06  Maciej Stachowiak  <mjs@apple.com>

        - fix development build failure from the previous checkin

        * kjs/function.cpp:
        (KJS::ActivationImp::put): Use prototype() accessor in assert.

2006-01-05  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Eric.

        - fix remaining performance regression from Getter/Setter change
        http://bugs.webkit.org/show_bug.cgi?id=6249

        - Activation objects should not have __proto__ property
        http://bugs.webkit.org/show_bug.cgi?id=6395

        * kjs/function.cpp:
        (KJS::ActivationImp::getOwnPropertySlot): Implement directly, thus
        skipping getter/setter handling and __proto__ handling, as well
        as inlining needed superclass stuff.
        (KJS::ActivationImp::put): Implement directly, skipping getter/setter,
        __proto__, and do canPut directly in PropertyMap::put since there's no
        static property table either.
        * kjs/function.h:
        * kjs/property_map.cpp:
        (KJS::PropertyMap::put): Allow optionally inlining canPut check.
        * kjs/property_map.h:

2006-01-04  Geoffrey Garen  <ggaren@apple.com>

        Patch by kimmo.t.kinnunen@nokia.com, reviewed by darin, tweaked by me.

        - Fixed http://bugs.webkit.org/show_bug.cgi?id=4921
        \u escape sequences in JavaScript identifiers

        * kjs/function_object.cpp:
        (FunctionObjectImp::construct):
        * kjs/lexer.cpp:
        (Lexer::shift):
        (Lexer::lex):
        (Lexer::isWhiteSpace):
        (Lexer::isLineTerminator):
        (Lexer::isIdentStart):
        (Lexer::isIdentPart):
        (isDecimalDigit):
        (Lexer::scanRegExp):
        * kjs/lexer.h:
        (KJS::Lexer::):

        * tests/mozilla/expected.html: Updated test results.

2005-12-30  Maciej Stachowiak  <mjs@apple.com>

        No review, just test result update.

        * tests/mozilla/expected.html: Updated for newly passing test from recent fixes.

2005-12-30  Anders Carlsson  <andersca@mac.com>

        Reviewed by Maciej.

        - Fix http://bugs.webkit.org/show_bug.cgi?id=6298
        Getter setter test is failing
                
        * kjs/object.cpp:
        (KJS::JSObject::put):
        Rework the getter setter part. We now walk the prototype chain, checking for
        getter/setter properties and only take the slow path if any are found. 

2005-12-30  Maks Orlovich <maksim@kde.org>

        Reviewed and committed by Maciej.

        - Handle negative, FP numbers with non-10 radix in toString
        http://bugs.webkit.org/show_bug.cgi?id=6259

        (Merged from KJS, original work by Harri Porten)
        
        * kjs/number_object.cpp:
        (NumberProtoFunc::callAsFunction): rewrote Number.toString(radix) to work with  
        negative numbers, floating point and very large numbers.

2005-12-29  Geoffrey Garen  <ggaren@apple.com>

        Patch by Maks Orlovich, reviewed and landed by me.

        - http://bugs.webkit.org/show_bug.cgi?id=6267
        Fix Number.prototype.toFixed/toExponential(undefined)

        * kjs/number_object.cpp:
        (NumberProtoFunc::callAsFunction):

2005-12-29  Geoffrey Garen  <ggaren@apple.com>

        Patch by Maks Orlovich, Reviewed and landed by me.

        - http://bugs.webkit.org/show_bug.cgi?id=6266
        Minor object naming updates (to match Mozilla, KJS)

        * kjs/number_object.cpp:
        * kjs/regexp_object.cpp:

2005-12-29  Geoffrey Garen  <ggaren@apple.com>

        Patch by Maks Orlovich, reviewed by mjs.

        This has 2 very minor fixes, covered by KJS testsuite:    
        1. Enumerates string indices in property list (with the same bug as array    
           object has in corresponding code). This is a mozilla emulation thing. 
        2. Permits properties with integer names in prototypes to be found    

        * kjs/string_object.cpp:
        (StringInstance::getOwnPropertySlot):
        (StringInstanceImp::propList):
        * kjs/string_object.h:

2005-12-26  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by mjs.

        - Fixed <rdar://problem/4364705> run-javascriptcore-tests crashes in 
        KJS::BlockNode::deref 
        AKA 
        http://bugs.webkit.org/show_bug.cgi?id=6233
        Reproducible stack-overflow crash in ~RefPtr<T> due to RefPtr<T> use in 
        linked lists

        This patch does four things: 
        (1) Standardizes all our linked list nodes to use "next" as their next 
        pointers. 
        (2) Creates the ListRefPtr<T> class, a subclass of RefPtr<T> specialized
        to iteratively deref "next" pointers.
        (3) Standardizes our linked list nodes to use ListRefPtr<T> and 
        implement the releaseNext() function used by ~ListRefPtr<T>().
        (4) Adds to RefPtr<T> the release() method used by releaseNext().

        - Modified existing mozilla test to ensure it would make deployment 
        builds crash as well.

        * JavaScriptCore.xcodeproj/project.pbxproj:
        * kjs/nodes.cpp:
        (ElementNode::evaluate):
        (PropertyListNode::evaluate):
        (ArgumentListNode::evaluateList):
        (StatListNode::StatListNode):
        (StatListNode::execute):
        (StatListNode::processVarDecls):
        (VarDeclListNode::evaluate):
        (VarDeclListNode::processVarDecls):
        (VarStatementNode::execute):
        (VarStatementNode::processVarDecls):
        (BlockNode::BlockNode):
        (CaseClauseNode::evalStatements):
        (CaseClauseNode::processVarDecls):
        (ClauseListNode::processVarDecls):
        (CaseBlockNode::CaseBlockNode):
        (CaseBlockNode::evalBlock):
        (SourceElementsNode::SourceElementsNode):
        (SourceElementsNode::execute):
        (SourceElementsNode::processFuncDecl):
        (SourceElementsNode::processVarDecls):
        * kjs/nodes.h:
        (KJS::ElementNode::ElementNode):
        (KJS::ElementNode::releaseNext):
        (KJS::ArrayNode::ArrayNode):
        (KJS::PropertyListNode::PropertyListNode):
        (KJS::PropertyListNode::releaseNext):
        (KJS::ObjectLiteralNode::ObjectLiteralNode):
        (KJS::ArgumentListNode::ArgumentListNode):
        (KJS::ArgumentListNode::releaseNext):
        (KJS::ArgumentsNode::ArgumentsNode):
        (KJS::StatListNode::releaseNext):
        (KJS::VarDeclListNode::VarDeclListNode):
        (KJS::VarDeclListNode::releaseNext):
        (KJS::VarStatementNode::VarStatementNode):
        (KJS::ForNode::ForNode):
        (KJS::CaseClauseNode::CaseClauseNode):
        (KJS::ClauseListNode::ClauseListNode):
        (KJS::ClauseListNode::getClause):
        (KJS::ClauseListNode::getNext):
        (KJS::ClauseListNode::releaseNext):
        (KJS::ParameterNode::ParameterNode):
        (KJS::ParameterNode::releaseNext):
        (KJS::SourceElementsNode::releaseNext):
        * kjs/nodes2string.cpp:
        (ElementNode::streamTo):
        (PropertyListNode::streamTo):
        (ArgumentListNode::streamTo):
        (StatListNode::streamTo):
        (VarDeclListNode::streamTo):
        (VarStatementNode::streamTo):
        (CaseClauseNode::streamTo):
        (ClauseListNode::streamTo):
        (CaseBlockNode::streamTo):
        (SourceElementsNode::streamTo):
        * kxmlcore/ListRefPtr.h: Added.
        (KXMLCore::ListRefPtr::ListRefPtr):
        (KXMLCore::ListRefPtr::~ListRefPtr):
        (KXMLCore::ListRefPtr::operator=):
        * kxmlcore/RefPtr.h:
        (KXMLCore::RefPtr::release):

2005-12-29  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by mjs.

        - Fixed http://bugs.webkit.org/show_bug.cgi?id=4026
        Math.random() not seeded.

        Added call to sranddev() -- it executes the first time a process
        calls Math.random().

        * kjs/math_object.cpp:
        (MathFuncImp::callAsFunction):

2005-12-29  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by darin.

        - Fixed http://bugs.webkit.org/show_bug.cgi?id=6265
        Name change regression: Java doesn't know what JavaJSObject is

        Changed strings passed to Java back to original "JSObject".

        * bindings/jni/jni_jsobject.cpp:
        (JavaJSObject::convertValueToJObject):
        (JavaJSObject::convertJObjectToValue):

2005-12-28  Anders Carlsson  <andersca@mac.com>

        Reviewed by Maciej.

        - The JSC part of http://bugs.webkit.org/show_bug.cgi?id=6268
        Add undetectable document.all
        
        * kjs/operations.cpp:
        (KJS::equal):
        When comparing an object with null or undefined, call toPrimitive with 
        NullType as the preferred type.

2005-12-27  Anders Carlsson  <andersca@mac.com>

        Reviewed by Darin.

        * kjs/array_object.cpp:
        (ArrayProtoFunc::callAsFunction):
        Implement filter and map. Also, make the existing
        array iteration functions not invoke the callback for
        non-existing properties, just as Mozilla does now.
        
        * kjs/array_object.h:
        (KJS::ArrayProtoFunc::):
        Add filter and map.
        
        * tests/mozilla/expected.html:
        Update, two 1.6 tests now pass.

2005-12-27  Maciej Stachowiak  <mjs@apple.com>

        - updated test results for new JS 1.6 tests

        * tests/mozilla/expected.html:

2005-12-27  Anders Carlsson  <andersca@mac.com>

        Reviewed by Maciej.

        Add Mozilla JS 1.6 tests.
        
        * tests/mozilla/js1_6/Array/browser.js: Added.
        * tests/mozilla/js1_6/Array/regress-290592.js: Added.
        * tests/mozilla/js1_6/Array/regress-304828.js: Added.
        * tests/mozilla/js1_6/Array/regress-305002.js: Added.
        * tests/mozilla/js1_6/Array/regress-310425-01.js: Added.
        * tests/mozilla/js1_6/Array/regress-310425-02.js: Added.
        * tests/mozilla/js1_6/Array/regress-320887.js: Added.
        * tests/mozilla/js1_6/Array/shell.js: Added.
        * tests/mozilla/js1_6/README: Added.
        * tests/mozilla/js1_6/Regress/browser.js: Added.
        * tests/mozilla/js1_6/Regress/regress-301574.js: Added.
        * tests/mozilla/js1_6/Regress/regress-309242.js: Added.
        * tests/mozilla/js1_6/Regress/regress-311157-01.js: Added.
        * tests/mozilla/js1_6/Regress/regress-311157-02.js: Added.
        * tests/mozilla/js1_6/Regress/regress-314887.js: Added.
        * tests/mozilla/js1_6/Regress/regress-320172.js: Added.
        * tests/mozilla/js1_6/Regress/shell.js: Added.
        * tests/mozilla/js1_6/String/browser.js: Added.
        * tests/mozilla/js1_6/String/regress-306591.js: Added.
        * tests/mozilla/js1_6/String/shell.js: Added.
        * tests/mozilla/js1_6/browser.js: Added.
        * tests/mozilla/js1_6/shell.js: Added.
        * tests/mozilla/js1_6/template.js: Added.

2005-12-27  Maks Orlovich <maksim@kde.org>

        Reviewed and landed by Maciej.

        - fixed 6234: Can delete array index property incorrectly.
        http://bugs.webkit.org/show_bug.cgi?id=6234

        * kjs/array_object.cpp:
        (ArrayInstance::deleteProperty): use toArrayIndex instead of toUInt32 when
        looking for array properties.

2005-12-27  Anders Carlsson  <andersca@mac.com>

        Reviewed by Maciej.

        * kjs/object.cpp:
        (KJS::JSObject::defineSetter):
        Remove duplicate call to putDirect.

2005-12-26  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin and Geoff.

        Changes by me and Anders.

        - mostly fixed REGRESSION: 5-10% performance regression on JS iBench from getter/setter change
        http://bugs.webkit.org/show_bug.cgi?id=6083

        - also fixed some warnings reported by -Winline
        
        * JavaScriptCorePrefix.h: Move new and delete definitions higher so there
        aren't conflicts with use in standard C++ headers
        * kjs/object.cpp:
        (KJS::throwSetterError): Moved this piece of put into a seprate function
        to avoid the PIC branch.
        (KJS::JSObject::put): Use hasGetterSetterProperties to avoid expensive stuff
        when not needed. Also use GetterSetter properties attribute.
        (KJS::JSObject::deleteProperty): Recompute whether any properties are getter/setter
        properties any more, if this one was one.
        (KJS::JSObject::defineGetter): Let the PropertyMap know that it has getter/setter
        properties now (and use the new attribute).
        (KJS::JSObject::defineSetter): Ditto.
        (KJS::JSObject::fillGetterPropertySlot): Out-of-line helper for getOwnPropertySlot,
        to avoid global variable access in the hot code path.
        * kjs/object.h:
        (KJS::): Added GetterSetter attribute.
        (KJS::JSCell::isObject): Moved lower to be after inline methods it uses.
        (KJS::JSValue::isObject): ditto
        (KJS::JSObject::getOwnPropertySlot): try to avoid impact of getters and setters
        as much as possible in the case where they are not being used
        * kjs/property_map.cpp:
        (KJS::PropertyMap::containsGettersOrSetters): New method to help with this
        * kjs/property_map.h:
        (KJS::PropertyMap::hasGetterSetterProperties): Ditto
        (KJS::PropertyMap::setHasGetterSetterProperties): Ditto
        (KJS::PropertyMap::PropertyMap): Added a crazy hack to store the
        global "has getter/setter properties" flag in the property map
        single entry, to avoid making objects any bigger.
        * kjs/value.h: Moved some things to object.h to make -Winline happier

2005-12-24  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Eric and Dave Hyatt.

        - make even const PassRefPtrs give transfer of ownership semantics
        http://bugs.webkit.org/show_bug.cgi?id=6238
        
        This is a somewhat cheesy change. Having to use PassRefPtr_Ref creates ambiguities
        in assignment and copy construction. And this makes life way easier and removes
        the need for pass(). It is not really correct, but we pretty much never need a real
        const PassRefPtr, and this takes care of things for PassRefPtr temporaries.
        
        * kjs/identifier.cpp:
        (KJS::Identifier::add): No more need for pass()
        * kjs/property_map.cpp:
        (KJS::PropertyMap::addSparseArrayPropertiesToReferenceList): No more need for pass()
        * kjs/ustring.cpp:
        (KJS::UString::Rep::create): Use adoptRef
        (KJS::UString::UString): No more need for pass
        (KJS::UString::append): No more need for pass
        (KJS::UString::substr): No more need for pass
        * kxmlcore/PassRefPtr.h: made m_ptr mutable (ugh)
        (KXMLCore::PassRefPtr::PassRefPtr): Take a const PassRefPtr reference
        (KXMLCore::PassRefPtr::release): Made this a const method (ugh)
        (KXMLCore::PassRefPtr::operator=): clean up appropriately
        (KXMLCore::adoptRef): Added this to use instead of PassRefPtr<T>::adopt, I think
        it makes the behavior more clear and it is less verbose.
        (KXMLCore::static_pointer_cast): use adoptRef
        (KXMLCore::const_pointer_cast): use adoptRef
        * kxmlcore/RefPtr.h:
        (KXMLCore::RefPtr::RefPtr): take const PassRefPtr&
        (KXMLCore::PassRefPtr::operator=): take const PassRefPtr&

2005-12-25  Eric Seidel  <eseidel@apple.com>

        Reviewed by mjs.

        Unbreak HashTableConstIterator++ by returning const_iterator

        * kxmlcore/HashTable.h:
        (KXMLCore::HashTableConstIterator::operator++): use const_iterator

2005-12-25  Eric Seidel  <eseidel@apple.com>

        Reviewed by mjs.

        Un-break HashTable copy constructor.

        * kxmlcore/HashTable.h:
        (KXMLCore::::HashTable): use const_iterator instead

2005-12-23  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Eric.

        - fixed "HashMap does not work with const pointer keys or values"
        http://bugs.webkit.org/show_bug.cgi?id=6222
        
        * kxmlcore/HashMapPtrSpec.h:
        (KXMLCore::HashMap): In all methods, explicitly cast all pointers
        to void * before passing to internal implementation. Use C-style
        casts instead of new-style casts, because the real solution would
        require a combo of reinterpret_cast anc const_cast.


2005-12-23  Maciej Stachowiak  <mjs@apple.com>

        - this time for sure

        * kxmlcore/RefPtr.h:
        (KXMLCore::::swap):

2005-12-22  Maciej Stachowiak  <mjs@apple.com>

        - fix build problem from last commit.

        * kxmlcore/RefPtr.h:
        (KXMLCore::::swap):

2005-12-21  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin.

        - Make HashMap/HashSet support non-POD types
        http://bugs.webkit.org/show_bug.cgi?id=5332

        The changes for support are relatively simple, but I also made extensive changes to
        avoid copying, so that there isn't refcount thrash when you put RefPtrs into a HashMap.

        * kxmlcore/HashTable.h:
        (KXMLCore::swap): specialize swap for pairs, to swap elements individually,
        so that excess copies can be avoided.
        (KXMLCore::Mover::move): Template function to either copy or swap, used
        when transferring elements from old table to new.
        (KXMLCore::IdentityHashTranslator::hash): The old "converting lookup" templates
        that took two or three function parameters now take a class parameter, this is
        the class used to do a normal lookup.
        (KXMLCore::IdentityHashTranslator::equal): Ditto.
        (KXMLCore::IdentityHashTranslator::translate): Ditto. Translate now takes a reference
        to write into instead of returning a value to avoid redundant copies.
        (KXMLCore::HashTable::~HashTable): Use deallocateTable instead of freeing directly.
        (KXMLCore::HashTable::insert): Based on HashTranslator now instead of separate
        functions. Added a FIXME about a remaining rare excess copy.
        (KXMLCore::HashTable::isEmptyBucket): Use KeyTraits directly instead of unwrapping
        the key from Traits, to avoid creating and destroying pair, which copies.
        (KXMLCore::HashTable::isDeletedBucket): ditto
        (KXMLCore::HashTable::lookup): Use HashTranslator now instead of separate functions.
        (KXMLCore::HashTable::initializeBucket): Renamed from emptyBucket. Use placement new to
        work right for non-POD types.
        (KXMLCore::HashTable::deleteBucket): Use assignDeleted to avoid excess copies.
        (KXMLCore::HashTable::reinsert): use Mover template to copy or swap as appropriate
        (KXMLCore::HashTable::allocateTable): Initialize every bucket if calloc won't do.
        (KXMLCore::HashTable::deallocateTable): Destruct every bucket if needed.
        (KXMLCore::HashTable::rehash): Avoid copy before reinserting, so that swap can do its magic.
        (KXMLCore::HashTable::clear): use deallocateTable instead of freeing directly.
        (KXMLCore::HashTable::HashTable): be more dumb when copying to ensure that non-POD types
        work right
        * kxmlcore/HashFunctions.h:
        (KXMLCore::PointerHash): Specialize PointerHash for RefPtr
        * kxmlcore/HashMap.h:
        (KXMLCore::extractFirst): Return a reference not a full object to avoid
        copies.
        (KXMLCore::HashMapTranslator::hash): Use a special translator for insertion
        to defer making the pair as long as possible, thus avoiding needless copies.
        (KXMLCore::HashMapTranslator::equal): ditto
        (KXMLCore::HashMapTranslator::translate): ditto
        (KXMLCore::::inlineAdd): Shared by set and add to insert using HashMapTranslator
        (KXMLCore::::set): Use inlineAdd
        (KXMLCore::::add): Use inlineAdd
        * kxmlcore/HashMapPtrSpec.h:
        (KXMLCore::): Pass KeyTraits along
        * kxmlcore/HashSet.h:
        (KXMLCore::identityExtract): Return a reference not a full object to avoid copies.
        (KXMLCore::HashSetTranslatorAdapter::hash): Redo adapter stuff to work with
        the new HashTranslator approach.
        (KXMLCore::HashSetTranslatorAdapter::equal): ditto
        (KXMLCore::HashSetTranslatorAdapter::translate): ditto
        (KXMLCore::::insert): ditto
        * kxmlcore/HashTraits.h:
        (KXMLCore::GenericHashTraits): This is intended be used as a base class for
        customized traits: sensible defaults.
        (KXMLCore::): Use it a bunch
        (KXMLCore::assignDeleted): template function to allow pairs to be assigned the
        deleted value w/o excess copies.
        (KXMLCore::PairHashTraits::emptyValue): Updated
        (KXMLCore::PairHashTraits::deletedValue): Updated
        (KXMLCore::PairHashTraits::assignDeletedValue): part of assignDeleted hack
        (KXMLCore::DeletedValueAssigner::assignDeletedValue): Use template magic
        to either use use deletedValue or assignDeletedValue for the cases where we care.
        * kxmlcore/RefPtr.h:
        (KXMLCore::RefPtr::swap): Added swap method.
        (KXMLCore::swap): Added swap free function.
        * kjs/identifier.cpp:
        (KJS::CStringTranslator::hash): Use new HashTranslator class approach to
        alternate type based insertion.
        (KJS::CStringTranslator::equal): ditto
        (KJS::CStringTranslator::translate): ditto
        (KJS::Identifier::add): ditto
        (KJS::UCharBufferTranslator::hash): ditto
        (KJS::UCharBufferTranslator::equal): ditto
        (KJS::UCharBufferTranslator::translate): ditto

        - irrelevant change:
        
        * kjs/array_object.cpp:
        (ArrayProtoFunc::callAsFunction): Removed a stray space.

2005-12-22  Anders Carlsson  <andersca@mac.com>

        Reviewed by Eric and Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=6196
        Would like to be able to define prototypes in headers
        
        * kjs/lookup.h:
        Move ClassName from KJS_DECLARE_PROTOTYPE to KJS_IMPLEMENT_PROTOTYPE.
        Also, namespace all macros by prefixing them with KJS_. 

2005-12-22  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        - fix http://bugs.webkit.org/show_bug.cgi?id=6191
          RefPtr/PassRefPtr have a leak issue, operator== issues

        * kxmlcore/PassRefPtr.h:
        (KXMLCore::PassRefPtr::PassRefPtr): Remove non-template constructor that takes RefPtr
        since the constructor template that takes RefPtr should be sufficient. Add a constructor
        template that takes PassRefPtr&.
        (KXMLCore::PassRefPtr::adopt): Use PassRefPtr_Ref to avoid setting pointer first to
        0 and then to the pointer.
        (KXMLCore::PassRefPtr::operator=): Added template versions that take PassRefPtr& and
        RefPtr parameters.
        (KXMLCore::PassRefPtr::operator PassRefPtr<U>): Changed to fix leak -- old version
        would release and then ref.
        (KXMLCore::operator==): Make templates have two parameters so you can mix types.
        Also remove unneeded const in raw pointer versions.
        (KXMLCore::operator!=): Ditto.

        * kxmlcore/RefPtr.h:
        (KXMLCore::RefPtr::RefPtr): Add constructor template that takes PassRefPtr.
        (KXMLCore::RefPtr::operator=): Add assignment operator templates that take
        RefPtr and PassRefPtr.
        (KXMLCore::operator==): Make templates have two parameters so you can mix types.
        Also remove unneeded const in raw pointer versions.
        (KXMLCore::operator!=): Ditto.

2005-12-21  Timothy Hatcher  <timothy@apple.com>

        * JavaScriptCore.xcodeproj/project.pbxproj:
          Set tab width to 8, indent width to 4 and uses tabs to false per file.

2005-12-21  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Darin.

        Removed evil hack for determining if a type is an integer, replaced
        with template metaprogramming.

        * JavaScriptCore.xcodeproj/project.pbxproj: Set tab size to 2 for
        testkjs.cpp
        * kjs/testkjs.cpp:
        (main): Inserted asserts to test IsInteger. FIXME: Move these to
        KXMLCore unit tests directory when we create one.
        * kxmlcore/HashTraits.h:
        (KXMLCore::): Added IsInteger class for querying types.

2005-12-20  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin.

        - made ALWAYS_INLINE declare things inline as well as __attribute__((always_inline))
        http://bugs.webkit.org/show_bug.cgi?id=6159

        * kxmlcore/AlwaysInline.h:

2005-12-19  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin.

        - fixed a leak in the assignment operator from PassRefPtr to RefPtr
        http://bugs.webkit.org/show_bug.cgi?id=6158

        * kxmlcore/RefPtr.h:
        (KXMLCore::RefPtr::operator=):

        - fix problem with PassRefPtr that darin spotted - it lacked a copy constructor
        and therefore was using the default one, which can lead to excess derefs

        I fixed this by adding a copy constructor from non-const
        reference, and by adding a template pass() function that you have
        to use when raw pointer or RefPtr are passed where PassRefPtr is
        expected.

        * kjs/identifier.cpp:
        (KJS::Identifier::add): Changed to have PassRefPtr return type and
        pass() the results.
        * kjs/identifier.h:
        * kjs/property_map.cpp:
        (KJS::PropertyMap::addSparseArrayPropertiesToReferenceList): Use pass()
        where required.
        * kjs/ustring.cpp:
        (KJS::UString::UString): Use pass() as needed.
        (KJS::UString::append): ditto
        (KJS::UString::substr): ditto
        * kjs/ustring.h:
        (KJS::UString::UString): Use initializer instead of assignment
        * kxmlcore/PassRefPtr.h:
        (KXMLCore::PassRefPtr::PassRefPtr): Added copy constructor
        (KXMLCore::pass): new template function to make it convenient to pass
        a PassRefPtr

2005-12-19  Geoffrey Garen  <ggaren@apple.com>
  
        Reviewed by Maciej.

        Fixed <rdar://problem/4370397> Missing return statement in
        JSMethodNameToObjcMethodName.

        JSMethodNameToObjcMethodName had a check for a name being too long, but
        the check was missing a return statement.

        A lot of this code was confusing and some of it was wrong, so I fixed
        it up, added some asserts to catch this type of bug in the future, 
        changed some comments, and renamed some variables.

        The two advantages of the new algorithm are (1) It makes writing past
        the end of the buffer virtually impossible because the test on the main
        loop is "while (not past end of buffer)" and (2) It's twice as fast
        because it doesn't call strlen. (There's no need to call strlen when
        we're walking the string ourselves.) 
        
        methodsNamed also supports arbitrary-length method names now. Just in 
        case the AppKit folks start getting REALLY verbose...

        * bindings/objc/objc_class.mm:
        (KJS::Bindings::ObjcClass::methodsNamed):
        * bindings/objc/objc_utility.h:
        * bindings/objc/objc_utility.mm:
        (KJS::Bindings::JSMethodNameToObjcMethodName):

2005-12-19  Darin Adler  <darin@apple.com>

        Originally done by both George Staikos and Alexey Proskuryakov.

        - fix http://bugs.webkit.org/show_bug.cgi?id=5706
          Sharedptr dependency can be removed

        Our coding guidelines say "use 0 instead of NULL" and both RefPtr and
        PassRefPtr were using NULL, which required including a header that
        defines NULL.

        * kxmlcore/PassRefPtr.h:
        (KXMLCore::PassRefPtr::PassRefPtr): Use 0 instead of NULL.
        (KXMLCore::PassRefPtr::operator!): Use ! instead of == NULL.
        * kxmlcore/RefPtr.h:
        (KXMLCore::RefPtr::RefPtr): Use 0 instead of NULL.
        (KXMLCore::RefPtr::operator!): Use ! instead of == NULL.
        Also did some reformatting.

2005-12-19  Darin Adler  <darin@apple.com>

        Reviewed by Geoff Garen and Eric Seidel.

        - fix http://bugs.webkit.org/show_bug.cgi?id=4923
          stop using <ostream> in WebCore, eliminating the <cmath> troubles it causes

        * kjs/simple_number.h: Removed many unnecessary includes, including
        the <cmath> one to work around GCC library header bugs. We may have to
        add some includes elsewhere for platforms other than OS X, since our
        prefix header takes care of some things.

        * kxmlcore/AlwaysInline.h: Added. Now clients that don't include
        simple_number.h can still get the ALWAYS_INLINE macro.
        * JavaScriptCore.xcodeproj/project.pbxproj: Added AlwaysInline.h.

        * bindings/NP_jsobject.h: Removed a lot of unnecessary includes
        and removed C-specific stuff from this C++-only header.
        * bindings/jni/jni_jsobject.h: Removed a lot of unnecessary includes
        and did some reformatting.
        * bindings/objc/objc_runtime.h:  Removed an unnecessary include.
        * bindings/runtime.h: Removed some unneeded includes. Reformatted.
        * bindings/runtime.cpp: Updated to compile with header changes,
        including a lot of reformatting.
        * bindings/runtime_object.h: Removed an unnecessary include.

2005-12-13  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Geoff and Adele

        - replaced custom Identifier hashtable with HashSet

        * kjs/identifier.cpp:
        (KXMLCore::):
        (KJS::identifierTable):
        (KJS::Identifier::equal):
        (KJS::hash):
        (KJS::equal):
        (KJS::convert):
        (KJS::Identifier::add):
        (KJS::Identifier::remove):
        * kjs/identifier.h:
        * kjs/internal.cpp:
        (KJS::InterpreterImp::initGlobalObject):

2005-12-18  Justin Haygood  <justin@xiondigital.net>

        Reviewed, tweaked, and landed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=5227
          Array indexOf() extension for JavaScript 1.5 Core

        * kjs/array_object.h:
        * kjs/array_object.cpp: (ArrayProtoFunc::callAsFunction): Added implementation of indexOf.

2005-12-18  Anders Carlsson  <andersca@mac.com>

        Reviewed by Darin and Geoffrey.

        - fix for <http://bugs.webkit.org/show_bug.cgi?id=4000>
        Object.prototype is missing isPrototypeOf
        
        * kjs/object_object.cpp:
        (ObjectPrototype::ObjectPrototype):
        Add isPrototypeOf to object prototype.
        
        (ObjectProtoFunc::callAsFunction):
        Implement isPrototypeOf
        
        * kjs/object_object.h:
        (KJS::ObjectProtoFunc::):
        Add id for isPrototypeOf.

2005-12-17  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Darin.

        Fixed http://bugs.webkit.org/show_bug.cgi?id=6119
        split() function ignores case insensitive modifier.

        Glossary:
        RegExpImp: The C++ object you get when JavaScript executes
                   "new RegExp()".
        RegExp:    A C++ wrapper object that performs regular expression
                   matching on behalf of a RegExpImp.

        Instead of unnecessarily constructing a RegExp which (wrongly) lacks
        any modifiers, String.split() now uses the RegExp built in to the 
        RegExpImp passed to it, which has the right modifiers already.

        I also cleaned up other bits of the string code to standardized how
        we handle RegExpImp arguments.

        * ChangeLog:
        * kjs/string_object.cpp:
        (replace):
        (StringProtoFunc::callAsFunction):

2005-12-16  David Hyatt  <hyatt@apple.com>

        Remove unused RefPtr constructors that can create an ambiguity in ustring on some platforms.
        
        Reviewed by mjs

        * kxmlcore/RefPtr.h:
        (KXMLCore::RefPtr::RefPtr):

2005-12-15  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        - fix http://bugs.webkit.org/show_bug.cgi?id=5688
          speed up JavaScript parsing by not creating a UString just to parse

        * kjs/internal.h:
        * kjs/internal.cpp: (KJS::InterpreterImp::evaluate): Change to take a character pointer
        and length rather than a UString.

        * kjs/interpreter.h:
        * kjs/interpreter.cpp: (Interpreter::evaluate): Ditto.

        * kjs/protect.h: Remove uneeded "convert to bool" operator since we already have a
        "convert to raw pointer" operator in this class.

=== Safari-521~5 ===

2005-12-13  Geoffrey Garen  <ggaren@apple.com>

        Updated test results to match Anders's last fix.

        * tests/mozilla/expected.html:

2005-12-13  Anders Carlsson  <andersca@mac.com>

        * ChangeLog: Add titles for my bugzilla bugs.

2005-12-13  Anders Carlsson  <andersca@mac.com>

        Reviewed by Darin.

        - Fixes <http://bugs.webkit.org/show_bug.cgi?id=6041>
        Support property getters and setters.
        
        * bindings/runtime_array.cpp:
        (RuntimeArray::lengthGetter):
        (RuntimeArray::indexGetter):
        * bindings/runtime_array.h:
        * bindings/runtime_method.cpp:
        (RuntimeMethod::lengthGetter):
        * bindings/runtime_method.h:
        * bindings/runtime_object.cpp:
        (RuntimeObjectImp::fallbackObjectGetter):
        (RuntimeObjectImp::fieldGetter):
        (RuntimeObjectImp::methodGetter):
        * bindings/runtime_object.h:
        * kjs/array_instance.h:
        * kjs/array_object.cpp:
        (ArrayInstance::lengthGetter):
        (getProperty):
        Update for changes to PropertySlot::getValue and
        PropertySlot::GetValueFunc.
        
        * kjs/collector.cpp:
        (KJS::className):
        Handle GetterSetterType.
        
        * kjs/function.cpp:
        (KJS::FunctionImp::argumentsGetter):
        (KJS::FunctionImp::lengthGetter):
        (KJS::Arguments::mappedIndexGetter):
        (KJS::ActivationImp::argumentsGetter):
        * kjs/function.h:
        Update for changes to PropertySlot::getValue and
        PropertySlot::GetValueFunc.
        
        * kjs/grammar.y:
        Rework grammar parts for get set declarations directly
        in the object literal.
        
        * kjs/internal.cpp:
        (KJS::GetterSetterImp::mark):
        (KJS::GetterSetterImp::toPrimitive):
        (KJS::GetterSetterImp::toBoolean):
        (KJS::GetterSetterImp::toNumber):
        (KJS::GetterSetterImp::toString):
        (KJS::GetterSetterImp::toObject):
        Add type conversion functions. These aren't meant to be called.
        
        (KJS::printInfo):
        Handle GetterSetterType.
        
        * kjs/lookup.h:        
        (KJS::staticFunctionGetter):
        (KJS::staticValueGetter):
        Update for changes to PropertySlot::GetValueFunc.
        
        * kjs/nodes.cpp:
        Refactor they way properties nodes are implemented.
        We now have a PropertyListNode which is a list of PropertyNodes.
        Each PropertyNode has a name (which is a PropertyNameNode) and an associated
        value node. PropertyNodes can be of different types. The Constant type is the
        old constant declaration and the Getter and Setter types are for property getters
        and setters.
        (ResolveNode::evaluate):
        Update for changes to PropertySlot::getValue.
        
        (PropertyListNode::evaluate):
        Go through all property nodes and set them on the newly created object. If the
        property nodes are of type Getter or Setter, define getters and setters. Otherwise,
        just add the properties like before.
        
        (PropertyNode::evaluate):
        This should never be called directly.
        
        (PropertyNameNode::evaluate):
        Rename from PropertyNode::evaluate.
        
        (FunctionCallResolveNode::evaluate):
        (FunctionCallBracketNode::evaluate):
        (FunctionCallDotNode::evaluate):
        (PostfixResolveNode::evaluate):
        (PostfixBracketNode::evaluate):
        (PostfixDotNode::evaluate):
        (TypeOfResolveNode::evaluate):
        (PrefixResolveNode::evaluate):
        (PrefixBracketNode::evaluate):
        (PrefixDotNode::evaluate):
        (AssignResolveNode::evaluate):
        (AssignDotNode::evaluate):
        (AssignBracketNode::evaluate):
        Update for changes to PropertySlot::getValue.
        
        * kjs/nodes.h:
        (KJS::PropertyNameNode::PropertyNameNode):
        Rename from PropertyNode.
        
        (KJS::PropertyNode::):
        (KJS::PropertyNode::PropertyNode):
        New class, representing a single property.
        
        (KJS::PropertyListNode::PropertyListNode):
        Rename from PropertyValueNode.
        
        (KJS::FuncExprNode::FuncExprNode):
        Put ParameterNode parameter last, and make it optional.
        
        (KJS::ObjectLiteralNode::ObjectLiteralNode):
        Use a PropertyListNode here now.
        
        * kjs/nodes2string.cpp:
        (PropertyListNode::streamTo):
        Iterate through all property nodes.
        
        (PropertyNode::streamTo):
        Print out the name and value. Doesn't handle getters and setters currently.
        
        (PropertyNameNode::streamTo):
        Rename from PropertyNode::streamTo.
        
        * kjs/object.cpp:
        (KJS::JSObject::get):
        Update for changes to PropertySlot::getValue.
        
        (KJS::JSObject::put):
        If the property already exists and has a Setter, invoke
        the setter function instead of setting the property directly.
        
        (KJS::JSObject::defineGetter):
        (KJS::JSObject::defineSetter):
        New functions for defining property getters and setters on the object.
        
        * kjs/object.h:
        (KJS::GetterSetterImp::type):
        (KJS::GetterSetterImp::GetterSetterImp):
        (KJS::GetterSetterImp::getGetter):
        (KJS::GetterSetterImp::setGetter):
        (KJS::GetterSetterImp::getSetter):
        (KJS::GetterSetterImp::setSetter):
        New class for properties which have getters and setters defined.
        This class is only used internally and should never be seen from the outside.
        
        (KJS::JSObject::getOwnPropertySlot):
         If the property is a getter, call setGetterSlot on the property slot.
         
        * kjs/object_object.cpp:
        (ObjectPrototype::ObjectPrototype):
        Add __defineGetter__, __defineSetter, __lookupGetter__, __lookupSetter__
        to prototype.
        
        (ObjectProtoFunc::callAsFunction):
        Implement handlers for new functions.
        
        * kjs/object_object.h:
        (KJS::ObjectProtoFunc::):
        Add ids for new functions.
        
        * kjs/property_slot.cpp:
        (KJS::PropertySlot::undefinedGetter):
        Update for changes to PropertySlot::GetValueFunc.
        
        (KJS::PropertySlot::functionGetter):
        Call the function getter object and return its value.
        
        * kjs/property_slot.h:
        (KJS::PropertySlot::getValue):
        Add a new argument which is the original object that
        getPropertySlot was called on.
        
        (KJS::PropertySlot::setGetterSlot):
        (KJS::PropertySlot::):
        New function which sets a getter slot. When getValue is called on a 
        getter slot, the getter function object is invoked.
        
        * kjs/string_object.cpp:
        (StringInstance::lengthGetter):
        (StringInstance::indexGetter):
        * kjs/string_object.h:
        Update for changes to PropertySlot::GetValueFunc.
        
        * kjs/value.h:
        (KJS::):
        Add GetterSetterType and make GetterSetterImp a friend class of JSCell.

2005-12-12  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Eric.

        - added a new HashCountedSet class for the common pattern of mapping items to counts that can change
        
        * kxmlcore/HashCountedSet.h: Added.
        (KXMLCore::HashCountedSet::*): Implemented, on top of HashMap.
        * kxmlcore/HashMap.h:
        (KXMLCore::HashMap::add): New method - does not replace existing value if key already present
        but otherwise like set().
        (KXMLCore::HashMap::set): Improved comments.
        * kxmlcore/HashMapPtrSpec.h:
        (KXMLCore::HashMap::add): Added to specializations too.
        * JavaScriptCore.xcodeproj/project.pbxproj: Add new  file.
        * kxmlcore/HashFunctions.h: Added include of stdint.h
        
        - replaced the custom hashtable for values protected from GC with HashCountedSet

        * kjs/collector.cpp:
        (KJS::Collector::protect): Moved code here from ProtectedValues::increaseProtectCount
        since the code is so simple now.
        (KJS::Collector::unprotect): Ditto for ProtectedValues::decreaseProtectCount.
        (KJS::Collector::markProtectedObjects): Updated for new way of doing things, now
        simpler and safer.
        (KJS::Collector::numReferencedObjects): ditto
        (KJS::Collector::rootObjectClasses): ditto
        * kjs/collector.h: Added protect and unprotect static methods
        * kjs/protect.h:
        (KJS::gcProtect): Updated for removal of ProtectedValues class
        (KJS::gcUnprotect): likewise
        * kjs/protected_values.cpp: Removed.
        * kjs/protected_values.h: Removed.

2005-12-10  Darin Adler  <darin@apple.com>

        Rubber stamped by Maciej.

        - did long-promised KJS renaming:
        
            ValueImp -> JSValue
            ObjectImp -> JSObject
            AllocatedValueImp -> JSCell
        
        A renaming to get a class out of the way
        
            KJS::Bindings::JSObject -> JavaJSObject
 
        and some other "imp-reduction" renaming
        
            *InstanceImp -> *Instance
            *ProtoFuncImp -> *ProtoFunc
            *PrototypeImp -> *Prototype
            ArgumentsImp -> Arguments
            RuntimeArrayImp -> RuntimeArray
            RuntimeMethodImp -> RuntimeMethod

        * most files and functions

2005-12-10  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        - eliminated the old Undefined(), Null(), Boolean(), Number(), and String()

        Code now uses jsUndefined(), jsNull(), jsBoolean(), jsNumber(), and jsString().

        * bindings/NP_jsobject.cpp:
        (_NPN_Evaluate):
        * bindings/c/c_instance.cpp:
        (KJS::Bindings::CInstance::invokeMethod):
        (KJS::Bindings::CInstance::invokeDefaultMethod):
        * bindings/c/c_runtime.cpp:
        (CField::valueFromInstance):
        * bindings/c/c_utility.cpp:
        (KJS::Bindings::convertNPVariantToValue):
        * bindings/jni/jni_instance.cpp:
        (JavaInstance::invokeMethod):
        (JavaInstance::invokeDefaultMethod):
        * bindings/jni/jni_jsobject.cpp:
        (JSObject::eval):
        (JSObject::convertJObjectToValue):
        * bindings/jni/jni_runtime.cpp:
        (JavaArray::convertJObjectToArray):
        (JavaField::valueFromInstance):
        (JavaArray::valueAt):
        * bindings/objc/WebScriptObject.mm:
        (-[WebScriptObject callWebScriptMethod:withArguments:]):
        (-[WebScriptObject evaluateWebScript:]):
        (-[WebScriptObject valueForKey:]):
        (-[WebScriptObject webScriptValueAtIndex:]):
        * bindings/objc/objc_instance.mm:
        (ObjcInstance::invokeMethod):
        (ObjcInstance::invokeDefaultMethod):
        (ObjcInstance::getValueOfUndefinedField):
        * bindings/objc/objc_runtime.mm:
        (ObjcField::valueFromInstance):
        (ObjcFallbackObjectImp::callAsFunction):
        * bindings/objc/objc_utility.mm:
        (KJS::Bindings::convertNSStringToString):
        (KJS::Bindings::convertObjcValueToValue):
        * bindings/runtime.h:
        (KJS::Bindings::Class::fallbackObject):
        (KJS::Bindings::Instance::getValueOfUndefinedField):
        (KJS::Bindings::Instance::valueOf):
        * bindings/runtime_array.cpp:
        (RuntimeArrayImp::lengthGetter):
        * bindings/runtime_method.cpp:
        (RuntimeMethodImp::lengthGetter):
        (RuntimeMethodImp::callAsFunction):
        (RuntimeMethodImp::execute):
        * kjs/array_object.cpp:
        (ArrayInstanceImp::lengthGetter):
        (CompareWithCompareFunctionArguments::CompareWithCompareFunctionArguments):
        (ArrayPrototypeImp::ArrayPrototypeImp):
        (ArrayProtoFuncImp::ArrayProtoFuncImp):
        (ArrayProtoFuncImp::callAsFunction):
        (ArrayObjectImp::ArrayObjectImp):
        * kjs/bool_object.cpp:
        (BooleanPrototypeImp::BooleanPrototypeImp):
        (BooleanProtoFuncImp::callAsFunction):
        (BooleanObjectImp::BooleanObjectImp):
        (BooleanObjectImp::callAsFunction):
        * kjs/error_object.cpp:
        (ErrorPrototypeImp::ErrorPrototypeImp):
        (ErrorProtoFuncImp::ErrorProtoFuncImp):
        (ErrorProtoFuncImp::callAsFunction):
        (ErrorObjectImp::ErrorObjectImp):
        (NativeErrorImp::NativeErrorImp):
        * kjs/function.cpp:
        (KJS::FunctionImp::callAsFunction):
        (KJS::FunctionImp::processParameters):
        (KJS::FunctionImp::argumentsGetter):
        (KJS::FunctionImp::lengthGetter):
        (KJS::DeclaredFunctionImp::execute):
        (KJS::encode):
        (KJS::decode):
        (KJS::GlobalFuncImp::callAsFunction):
        * kjs/function_object.cpp:
        (FunctionPrototypeImp::FunctionPrototypeImp):
        (FunctionPrototypeImp::callAsFunction):
        (FunctionProtoFuncImp::callAsFunction):
        (FunctionObjectImp::FunctionObjectImp):
        * kjs/internal.cpp:
        (KJS::InterpreterImp::initGlobalObject):
        * kjs/interpreter.h:
        * kjs/lookup.h:
        * kjs/math_object.cpp:
        (MathObjectImp::getValueProperty):
        (MathFuncImp::callAsFunction):
        * kjs/nodes.cpp:
        (Node::setExceptionDetailsIfNeeded):
        (NullNode::evaluate):
        (PropertyNode::evaluate):
        (FunctionCallBracketNode::evaluate):
        (FunctionCallDotNode::evaluate):
        (PostfixBracketNode::evaluate):
        (PostfixDotNode::evaluate):
        (VoidNode::evaluate):
        (PrefixBracketNode::evaluate):
        (PrefixDotNode::evaluate):
        (ShiftNode::evaluate):
        (valueForReadModifyAssignment):
        (AssignDotNode::evaluate):
        (AssignBracketNode::evaluate):
        (VarDeclNode::evaluate):
        (VarDeclNode::processVarDecls):
        (VarDeclListNode::evaluate):
        (ReturnNode::execute):
        (CaseClauseNode::evalStatements):
        (ParameterNode::evaluate):
        (FuncDeclNode::processFuncDecl):
        * kjs/nodes.h:
        (KJS::StatementNode::evaluate):
        * kjs/number_object.cpp:
        (NumberPrototypeImp::NumberPrototypeImp):
        (NumberProtoFuncImp::callAsFunction):
        (NumberObjectImp::NumberObjectImp):
        (NumberObjectImp::getValueProperty):
        (NumberObjectImp::callAsFunction):
        * kjs/object.cpp:
        (KJS::ObjectImp::get):
        (KJS::Error::create):
        * kjs/object_object.cpp:
        (ObjectPrototypeImp::ObjectPrototypeImp):
        (ObjectProtoFuncImp::callAsFunction):
        (ObjectObjectImp::ObjectObjectImp):
        * kjs/property_slot.cpp:
        (KJS::PropertySlot::undefinedGetter):
        * kjs/regexp_object.cpp:
        (RegExpPrototypeImp::RegExpPrototypeImp):
        (RegExpProtoFuncImp::callAsFunction):
        (RegExpObjectImp::RegExpObjectImp):
        (RegExpObjectImp::arrayOfMatches):
        (RegExpObjectImp::getBackref):
        (RegExpObjectImp::getLastMatch):
        (RegExpObjectImp::getLastParen):
        (RegExpObjectImp::getLeftContext):
        (RegExpObjectImp::getRightContext):
        (RegExpObjectImp::getValueProperty):
        (RegExpObjectImp::construct):
        * kjs/string_object.cpp:
        (StringInstanceImp::StringInstanceImp):
        (StringPrototypeImp::StringPrototypeImp):
        (replace):
        (StringProtoFuncImp::callAsFunction):
        (StringObjectImp::StringObjectImp):
        (StringObjectImp::callAsFunction):
        (StringObjectFuncImp::StringObjectFuncImp):
        (StringObjectFuncImp::callAsFunction):
        * kjs/testkjs.cpp:
        (TestFunctionImp::callAsFunction):
        (VersionFunctionImp::callAsFunction):
        * kjs/value.h:

2005-12-10  Oliver Hunt  <ojh16@student.canterbury.ac.nz>

        Reviewed by Maciej, landed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=3539
          Array join and toString methods do not support circular references

        * kjs/array_object.cpp: (ArrayProtoFuncImp::callAsFunction):
        Added set of visited objects -- don't recurse if item is already in the set.

2005-12-08  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by John.

        - fix major memory leak and resultant slowdown on JavaScript iBench from
        my PassRefPtr changes
        
        * kjs/ustring.cpp:
        (KJS::UString::Rep::create): I forgot to change one of the two overloads to create
        with a refcount of 0 instead of 1 (the smart pointer then bumps it. But instead of
        changing it, I changed both to start with a refcounter of 1 and use PassRefPtr::adopt
        to adopt the initial refcount, this may be a hair more efficient.

        - made the assignment operators for smart pointers inline because Shark said so
        
        * kxmlcore/PassRefPtr.h:
        (KXMLCore::::operator=):
        * kxmlcore/RefPtr.h:
        (KXMLCore::::operator=):

2005-12-06  Anders Carlsson  <andersca@mac.com>

        Reviewed by Darin.

        - fix build when using gcc 4
                
        * kjs/ustring.h:
        Make Rep public.

        * kxmlcore/PassRefPtr.h:
        (KXMLCore::::operator):
        Fix a typo.

2005-12-05  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Eric.

        - add PassRefPtr, a smart pointer class that works in conjunction
        with RefPtr but has transfer-of-ownership semantics
        - apply RefPtr and PassRefPtr to UString
        - cleaned up UString a little so that it doesn't need to have so many friend classes

        * JavaScriptCore.xcodeproj/project.pbxproj:
        * kjs/identifier.cpp:
        (KJS::Identifier::add):
        * kjs/identifier.h:
        (KJS::Identifier::Identifier):
        (KJS::Identifier::equal):
        * kjs/property_map.cpp:
        (KJS::PropertyMap::get):
        (KJS::PropertyMap::getLocation):
        (KJS::PropertyMap::put):
        (KJS::PropertyMap::remove):
        * kjs/ustring.cpp:
        (KJS::UCharReference::operator=):
        (KJS::UCharReference::ref):
        (KJS::UString::Rep::createCopying):
        (KJS::UString::Rep::create):
        (KJS::UString::usedCapacity):
        (KJS::UString::usedPreCapacity):
        (KJS::UString::expandCapacity):
        (KJS::UString::expandPreCapacity):
        (KJS::UString::UString):
        (KJS::UString::spliceSubstringsWithSeparators):
        (KJS::UString::append):
        (KJS::UString::operator=):
        (KJS::UString::toStrictUInt32):
        (KJS::UString::substr):
        (KJS::UString::copyForWriting):
        (KJS::operator==):
        * kjs/ustring.h:
        (KJS::UString::UString):
        (KJS::UString::~UString):
        (KJS::UString::data):
        (KJS::UString::isNull):
        (KJS::UString::isEmpty):
        (KJS::UString::size):
        (KJS::UString::rep):
        * kxmlcore/RefPtr.h:
        (KXMLCore::RefPtr::RefPtr):
        (KXMLCore::RefPtr::operator*):
        (KXMLCore::::operator):
        (KXMLCore::operator==):
        (KXMLCore::operator!=):
        (KXMLCore::static_pointer_cast):
        (KXMLCore::const_pointer_cast):

2005-12-04  Geoffrey Garen  <ggaren@apple.com>

        Update test results to match Anders's last checkin.

        * tests/mozilla/expected.html:

2005-12-04  Anders Carlsson  <andersca@mac.com>

        Reviewed by Geoffrey.

        - Fixes <http://bugs.webkit.org/show_bug.cgi?id=3999>
        Object.prototype is missing propertyIsEnumerable
        
        * kjs/object.cpp:
        (KJS::ObjectImp::canPut):
        Refactor to use getPropertyAttributes.

        (KJS::ObjectImp::propertyIsEnumerable):
        New function which checks if a property is enumerable.

        (KJS::ObjectImp::getPropertyAttributes):
        * kjs/object.h:
        Add getPropertyAttributes and propertyIsEnumerable.

        * kjs/object_object.cpp:
        (ObjectPrototypeImp::ObjectPrototypeImp):
        (ObjectProtoFuncImp::callAsFunction):
        * kjs/object_object.h:
        (KJS::ObjectProtoFuncImp::):
        Add propertyIsEnumerable to the Object prototype.

2005-12-01  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Tim Hatcher.

        - removed deprecated reset, isNull and nonNull methods

        * kxmlcore/RefPtr.h:

2005-12-01  Anders Carlsson  <andersca@mac.com>

        Reviewed by Darin.

        - Fixes <http://bugs.webkit.org/show_bug.cgi?id=3382>
        nodes2strings.cpp fails to print left expression of ForInNode when 'var' is not used
        
        Patch by Mark Rowe.

        * kjs/nodes2string.cpp:
        (ForInNode::streamTo):
        Add lexpr if there's no varDecl.

2005-12-01  Maciej Stachowiak  <mjs@apple.com>

        Rubber stamped by Eric.

        - renamed SharedPtr to RefPtr via script

        * JavaScriptCore.xcodeproj/project.pbxproj:
        * kjs/function.cpp:
        (KJS::GlobalFuncImp::callAsFunction):
        * kjs/function.h:
        * kjs/function_object.cpp:
        (FunctionObjectImp::construct):
        * kjs/internal.cpp:
        (KJS::Parser::parse):
        (KJS::InterpreterImp::checkSyntax):
        (KJS::InterpreterImp::evaluate):
        * kjs/internal.h:
        * kjs/nodes.h:
        * kjs/nodes2string.cpp:
        (KJS::SourceStream::operator<<):
        * kjs/protect.h:
        * kxmlcore/RefPtr.h: Added.
        (KXMLCore::RefPtr::RefPtr):
        (KXMLCore::RefPtr::~RefPtr):
        (KXMLCore::RefPtr::isNull):
        (KXMLCore::RefPtr::notNull):
        (KXMLCore::RefPtr::reset):
        (KXMLCore::RefPtr::get):
        (KXMLCore::RefPtr::operator*):
        (KXMLCore::RefPtr::operator->):
        (KXMLCore::RefPtr::operator!):
        (KXMLCore::RefPtr::operator UnspecifiedBoolType):
        (KXMLCore::::operator):
        (KXMLCore::operator==):
        (KXMLCore::operator!=):
        (KXMLCore::static_pointer_cast):
        (KXMLCore::const_pointer_cast):
        * kxmlcore/SharedPtr.h: Removed.

2005-11-30  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Dave Hyatt.

        - change idiom used for implicit bool conversion of smart pointers, because the old one gives weird error messages sometimes

        * kjs/protect.h:
        (KJS::ProtectedPtr::operator UnspecifiedBoolType):
        * kxmlcore/SharedPtr.h:
        (KXMLCore::SharedPtr::operator UnspecifiedBoolType):

2005-11-29  Mitz Pettel  <opendarwin.org@mitzpettel.com>

        Reviewed by ggaren.  Committed by eseidel.

        Date conversion to local time gets the DST flag wrong sometimes
        http://bugs.webkit.org/show_bug.cgi?id=5514

        * kjs/date_object.cpp:
        (KJS::isTime_tSigned):
        (KJS::DateProtoFuncImp::callAsFunction):

2005-11-26  Maciej Stachowiak  <mjs@apple.com>

        Rubber stamped by Eric.

        - renamed InterpreterLock to JSLock

        * bindings/NP_jsobject.cpp:
        (_NPN_Invoke):
        (_NPN_Evaluate):
        (_NPN_GetProperty):
        (_NPN_SetProperty):
        (_NPN_RemoveProperty):
        (_NPN_HasProperty):
        (_NPN_HasMethod):
        (_NPN_SetException):
        * bindings/jni/jni_jsobject.cpp:
        (JSObject::call):
        (JSObject::eval):
        (JSObject::getMember):
        (JSObject::setMember):
        (JSObject::removeMember):
        (JSObject::getSlot):
        (JSObject::setSlot):
        (JSObject::toString):
        (JSObject::convertJObjectToValue):
        * bindings/objc/WebScriptObject.mm:
        (-[WebScriptObject callWebScriptMethod:withArguments:]):
        (-[WebScriptObject evaluateWebScript:]):
        (-[WebScriptObject setValue:forKey:]):
        (-[WebScriptObject valueForKey:]):
        (-[WebScriptObject removeWebScriptKey:]):
        (-[WebScriptObject stringRepresentation]):
        (-[WebScriptObject webScriptValueAtIndex:]):
        (-[WebScriptObject setWebScriptValueAtIndex:value:]):
        (+[WebScriptObject _convertValueToObjcValue:originExecutionContext:executionContext:]):
        * bindings/runtime.cpp:
        (Instance::createRuntimeObject):
        * bindings/runtime_root.cpp:
        (KJS::Bindings::addNativeReference):
        (KJS::Bindings::removeNativeReference):
        (RootObject::removeAllNativeReferences):
        * bindings/runtime_root.h:
        (KJS::Bindings::RootObject::~RootObject):
        (KJS::Bindings::RootObject::setRootObjectImp):
        * bindings/testbindings.cpp:
        (main):
        * bindings/testbindings.mm:
        (main):
        * kjs/JSLock.cpp:
        (KJS::initializeJSLock):
        (KJS::JSLock::lock):
        (KJS::JSLock::unlock):
        (KJS::JSLock::lockCount):
        (KJS::JSLock::DropAllLocks::DropAllLocks):
        (KJS::JSLock::DropAllLocks::~DropAllLocks):
        * kjs/JSLock.h:
        (KJS::JSLock::JSLock):
        (KJS::JSLock::~JSLock):
        * kjs/collector.cpp:
        (KJS::Collector::allocate):
        (KJS::Collector::collect):
        * kjs/internal.cpp:
        (KJS::InterpreterImp::InterpreterImp):
        (KJS::InterpreterImp::clear):
        (KJS::InterpreterImp::checkSyntax):
        (KJS::InterpreterImp::evaluate):
        * kjs/interpreter.cpp:
        (Interpreter::evaluate):
        * kjs/protect.h:
        (KJS::::ProtectedPtr):
        (KJS::::~ProtectedPtr):
        (KJS::::operator):
        * kjs/protected_reference.h:
        (KJS::ProtectedReference::ProtectedReference):
        (KJS::ProtectedReference::~ProtectedReference):
        (KJS::ProtectedReference::operator=):
        * kjs/protected_values.cpp:
        (KJS::ProtectedValues::getProtectCount):
        (KJS::ProtectedValues::increaseProtectCount):
        (KJS::ProtectedValues::decreaseProtectCount):
        * kjs/testkjs.cpp:
        (TestFunctionImp::callAsFunction):
        (main):

2005-11-26  Darin Adler  <darin@apple.com>

        Reviewed by eseidel.  Committed by eseidel.

        Inline ScopeChain functions for speed.
        http://bugs.webkit.org/show_bug.cgi?id=5687

        * kjs/object.h:
        (KJS::ScopeChain::mark):
        * kjs/scope_chain.cpp:
        * kjs/scope_chain.h:
        (KJS::ScopeChain::ref):
        (KJS::ScopeChain::operator=):
        (KJS::ScopeChain::bottom):
        (KJS::ScopeChain::push):
        (KJS::ScopeChain::pop):

2005-11-21  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Geoff.

        <rdar://problem/4139620> Seed: WebKit: hang when sending XMLHttpRequest if automatic proxy config is used

        Also factored locking code completely into a separate class, and
        added a convenient packaged way to temporarily drop locks.

        * JavaScriptCore.xcodeproj/project.pbxproj:
        * kjs/JSLock.cpp: Added.
        (KJS::initializeInterpreterLock):
        (KJS::InterpreterLock::lock):
        (KJS::InterpreterLock::unlock):
        (KJS::InterpreterLock::lockCount):
        (KJS::InterpreterLock::DropAllLocks::DropAllLocks):
        (KJS::InterpreterLock::DropAllLocks::~DropAllLocks):
        * kjs/JSLock.h: Added.
        (KJS::InterpreterLock::InterpreterLock):
        (KJS::InterpreterLock::~InterpreterLock):
        * kjs/internal.cpp:
        * kjs/internal.h:
        * kjs/interpreter.cpp:
        * kjs/interpreter.h:
        * kjs/protect.h:
        * kjs/testkjs.cpp:
        (TestFunctionImp::callAsFunction):

2005-11-21  Eric Seidel  <eseidel@apple.com>

        Rubber-stamped by hyatt.
        
        Removed JavaScriptCore+SVG target.

        * JavaScriptCore.xcodeproj/project.pbxproj:

2005-11-15  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by mjs.
        
        - Fixed <rdar://problem/4342216> Installer crash in 
          KJS::ValueImp::marked() when garbage collector runs inside call to 
          ConstantValues::init()
          
        I took responsibility for initializing and marking ConstantValues away 
        from InterpreterImp, since it's possible to reference such a value 
        before any interpreter has been created and after the last interpreter 
        has been destroyed.

        InterpreterImp::lock now initializes ConstantValues. It's a good
        place for the initialization because you have to call it before
        creating any objects. Since ::lock can be called more than once,
        I added a check in ConstantValues::init to ensure that it executes 
        only once.

        Collector:collect is now responsible for marking ConstantValues.

        We no longer clear the ConstantValues since we can't guarantee that no 
        one has a reference to them.

        FIXME: This is hackery. The long-term plan is to make ConstantValues
        use immediate values that require no initialization.

        * ChangeLog:
        * kjs/collector.cpp:
        (KJS::Collector::collect):
        * kjs/internal.cpp:
        (KJS::InterpreterImp::InterpreterImp):
        (KJS::InterpreterImp::lock):
        (KJS::InterpreterImp::clear):
        (KJS::InterpreterImp::mark):
        * kjs/internal.h:
        * kjs/value.cpp:
        (KJS::ConstantValues::initIfNeeded):
        * kjs/value.h:

2005-11-08  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Darin.

        This patch fixes some naughty naughty code -- 5 crashes and 2 
        may-go-haywire-in-the-futures.
        
        One such crash is <rdar://problem/4247330> 8C46 Crash with with 
        incomplete parameter list to webScript object function.
        
        I replaced early returns from within NS_DURINGs with calls to
        NS_VALUERETURN because the doc says, "You cannot use goto or 
        return to exit an exception handling domain -- errors will result."
        
        I replaced hard-coded analyses of -[NSMethodSignature 
        methodReturnType] with more abstracted alternatives, since
        the documentation says "This encoding is implementation-specific, 
        so applications should use it with caution," and then emits an
        evil cackle.
        
        I removed the early return in the case where a JavaScript caller
        supplies an insufficient number of arguments, because the right
        thing to do in such a case is to use JavaScript's defined behavior
        of supplying "undefined" for any missing arguments.
        
        I also changed ObjcInstance::invokeMethod so that it no longer
        deletes the method passed to it. It doesn't create the method,
        so it shouldn't delete it. A friend of mine named
        KERNEL_PROTECTION_FAILURE agrees with me on this point.
        
        Finally, I changed an assert(true) to assert(false) because
        all the other asserts were making fun of it.

        * bindings/objc/objc_instance.mm:
        (ObjcInstance::invokeMethod):
        (ObjcInstance::invokeDefaultMethod):

2005-11-06  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Darin.

        - Fixed http://bugs.webkit.org/show_bug.cgi?id=5571
          REGRESSION (412.5-TOT): duplicated words/sentences at 
          shakespeer.sourceforge.net

        Our UTF16-modified PCRE didn't work with extended character classes
        (classes involving characters > 255) because it used the GETCHARINC
        macro to read through them. In UTF16 mode, GETCHARINC expects UTF16 
        input, but PCRE encodes character classes in UTF8 regardless of the
        input mode of the subject string.

        The fix is to explicitly define GETUTF8CHARINC, and to use it,
        rather than GETCHARINC, when reading extended character classes. 
        
        In UTF8 mode, we simply define GETCHARINC to be GETUTF8CHARINC.

        * pcre/pcre_internal.h:
        * pcre/pcre_xclass.c:
        (_pcre_xclass):

2005-11-05  Geoffrey Garen  <ggaren@apple.com>

        Patch by Mitz Pettel, reviewed by Maciej.

        - Fixed http://bugs.webkit.org/show_bug.cgi?id=5357
          REGRESSION: Scriptable plugin hides properties of OBJECT element

        * bindings/objc/objc_class.mm:
        (KJS::Bindings::ObjcClass::fallbackObject):

2005-11-05  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Darin.

        - Fixed http://bugs.webkit.org/show_bug.cgi?id=5409
        slice() testcase doesn't pass

        Modified String.slice to deal with funky values.
        Updated test results. We now pass <js1_2/String/slice.js>.

        * kjs/string_object.cpp:
        (StringProtoFuncImp::callAsFunction):
        * tests/mozilla/expected.html:

2005-11-04  Darin Adler  <darin@apple.com>

        Reviewed by Tim Hatcher.

        * kxmlcore/HashSet.h: Fixed case of "hashfunctions.h" -- needs to be "HashFunctions.h".

2005-11-03  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Darin and Vicki.

        * JavaScriptCore.xcodeproj/project.pbxproj:
          Change to use $(SYSTEM_LIBRARY_DIR) consistently and place
          $(NEXT_ROOT) in a few spots to make build-root work.

2005-11-03  Geoffrey Garen  <ggaren@apple.com>

        - Updated JavaScriptCore test results to reflect recent fixes.

        * tests/mozilla/expected.html:

2005-11-03  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by darin.

        - Fixed http://bugs.webkit.org/show_bug.cgi?id=5602
          REGRESSION: RegExp("[^\\s$]+", "g") returns extra matches

        We now update lastIndex relative to the start of the last match,
        rather than the start of the last search. We used to assume that
        the two were equal, but that is not the case when a pattern
        matches at a character after the first in the string.

        * kjs/regexp_object.cpp:
        (RegExpProtoFuncImp::callAsFunction):

2005-10-24  John Sullivan  <sullivan@apple.com>

        Reviewed by Darin Adler. Code changes by Alexey Proskuryakov.
        
        - fixed http://bugs.webkit.org/show_bug.cgi?id=4931
        Unicode format characters (Cf) should be removed from JavaScript source

        * kjs/lexer.cpp:
        include <unicode/uchar.h>
        (Lexer::Lexer):
        use KJS::UChar instead of UChar to avoid ambiguity caused by new include
        (Lexer::setCode):
        ditto; also, use shift(4) to skip first 4 chars to take advantage of new
        logic there.
        (Lexer::shift):
        skip chars of type U_FORMAT_CHAR
        (Lexer::convertUnicode):
        use KJS::UChar instead of UChar to avoid ambiguity caused by new include
        (Lexer::record16):
        ditto
        (Lexer::makeIdentifier):
        ditto
        (Lexer::makeUString):
        ditto
        
        * tests/mozilla/ecma/Array/15.4.5.1-1.js:
        updated to skip soft hyphens

2005-10-24  John Sullivan  <sullivan@apple.com>

        Reviewed by Darin Adler. Code changes by George Staikos/Geoff Garen.
        
        - fixed http://bugs.webkit.org/show_bug.cgi?id=4142
        Date object does not always adjust daylight savings correctly

        * kjs/date_object.cpp:
        (KJS::makeTime):
        Fix the case where a time change crosses the daylight savings start/end dates.

2005-10-17  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Geoff. Code changes by Darin.

        - some micro-optimizations to FastMalloc to reduce math and branches.

        * kxmlcore/FastMalloc.cpp:
        (KXMLCore::TCMalloc_Central_FreeList::Populate):
        (KXMLCore::fastMallocRegisterThread):
        (KXMLCore::TCMalloc_ThreadCache::GetCache):
        (KXMLCore::TCMalloc_ThreadCache::GetCacheIfPresent):

2005-10-15  Maciej Stachowiak  <mjs@apple.com>

        Reverted fix for this bug, because it was part of a time range that caused a performance
        regression:
        
        <rdar://problem/4260481> Remove Reference type from JavaScriptCore

2005-10-15  Darin Adler  <darin@apple.com>

        * kxmlcore/HashTable.cpp: Fixed build failure (said hashtable.h instead of HashTable.h).

2005-10-14  Geoffrey Garen  <ggaren@apple.com>

        Style changes recommended by Darin.
        
        Changed to camelCase, changed ValueImp* to ValueImp *.

        * kjs/simple_number.h:
        (KJS::SimpleNumber::make):
        (KJS::SimpleNumber::value):

2005-10-11  Geoffrey Garen  <ggaren@apple.com>

        Added regexp_object.lut.h build phase from JavaScriptCore
        to JavaScriptCore+SVG.

        Reviewed by mitz.

        * JavaScriptCore.xcodeproj/project.pbxproj:

2005-10-11  Geoffrey Garen  <ggaren@apple.com>

        Fixed build bustage from last checkin (stray characters
        in the project file).

        Reviewed by mitz.

        * JavaScriptCore.xcodeproj/project.pbxproj:

2005-10-11  Geoffrey Garen  <ggaren@apple.com>

        New JavaScriptCore test results to reflect the last change.

        * tests/mozilla/expected.html:

2005-10-10  Geoffrey Garen  <ggaren@apple.com>

        - Implemented caching of match state inside the global RegExp object
          (lastParen, leftContext, rightContext, lastMatch, input).

          exec(), test(), match(), search(), and replace() now dipatch regular
          expression matching through the RegExp object's performMatch function, 
          to facilitate caching. This replaces registerRegexp and 
          setSubPatterns.
        
        - Implemented the special '$' aliases (e.g. RegExp.input aliases to 
          RegExp.$_).

        - Moved support for backreferences into the new static hash table
          used for other special RegExp properties. Truncated backreferences
          at $9 to match IE, FF, and the "What's New in Netscape 1.2?" doc.
          (String.replace still supports double-digit backreferences.)

        - Tweaked RegExp.prototype.exec to handle ginormous values in lastIndex.

        Fixes 11 -- count em, 11 -- JavaScriptCore tests.

        * fast/js/regexp-caching-expected.txt: Added.
        * fast/js/regexp-caching.html: Added.

        Reviewed by mjs.

        * JavaScriptCore.xcodeproj/project.pbxproj: Added regexp_object.lut.h
        * kjs/create_hash_table: Tweaked to allow for more exotic characters.
                                 We now rely on the compiler to catch illegal
                                 identifiers.
        * kjs/regexp.cpp:
        (KJS::RegExp::RegExp):
        * kjs/regexp_object.cpp:
        (RegExpProtoFuncImp::callAsFunction):
        (RegExpObjectImp::RegExpObjectImp):
        (RegExpObjectImp::performMatch):
        (RegExpObjectImp::arrayOfMatches):
        (RegExpObjectImp::backrefGetter):
        (RegExpObjectImp::getLastMatch):
        (RegExpObjectImp::getLastParen):
        (RegExpObjectImp::getLeftContext):
        (RegExpObjectImp::getRightContext):
        (RegExpObjectImp::getOwnPropertySlot):
        (RegExpObjectImp::getValueProperty):
        (RegExpObjectImp::put):
        (RegExpObjectImp::putValueProperty):
        * kjs/regexp_object.h:
        (KJS::RegExpObjectImp::):
        * kjs/string_object.cpp:
        (substituteBackreferences):
        (replace):
        (StringProtoFuncImp::callAsFunction):

2005-10-09  Darin Adler  <darin@apple.com>

        Reviewed by Maciej; some changes done after review.

        - fixed <rdar://problem/4092064> hanging loading page; rte.ie (works in IE and Firefox)
        - fixed http://bugs.webkit.org/show_bug.cgi?id=5280
          Date.setMonth fails with negative values
        - fixed http://bugs.webkit.org/show_bug.cgi?id=5154
          JSC should switch to _r variants of unix time/date functions
        - fixed a few possible overflow cases

        Retested all tests to be sure nothing broke; added layout test for bug 5280.

        * kjs/config.h: Removed TIME_WITH_SYS_TIME define. Also set HAVE_SYS_TIMEB_H
        for the __APPLE__ case (the latter is accurate but irrelevant).

        * kjs/date_object.h: Reformatted. Removed unnecessary include of "function_object.h".
        Moved declarations of helper classes and functions into the cpp file.

        * kjs/date_object.cpp: Removed code at top to define macros to use CoreFoundation instead of
        POSIX date functions.
        (KJS::styleFromArgString): Tweaked to return early instead of using a variable.
        (KJS::formatLocaleDate): Tweaked to check for undefined rather than checking argument count.
        (KJS::formatDate): Made parameter const.
        (KJS::formatDateUTCVariant): Ditto.
        (KJS::formatTime): Ditto.
        (KJS::DateProtoFuncImp::callAsFunction): Use gmtime_r and localtime_r instead of gmtime and
        localtime.
        (KJS::DateObjectImp::callAsFunction): Use localtime_r instead of localtime.
        (KJS::ymdhmsToSeconds): Renamed from ymdhms_to_seconds. Changed computation to avoid possible
        overflow if year is an extremely large or small number.
        (KJS::makeTime): Removed code to move large month numbers from tm_mon to tm_year; this was
        to accomodate CFGregorianDate, which is no longer used (and didn't handle negative values).
        (KJS::parseDate): Renamed from KRFCDate_parseDate; changed to return a value in milliseconds
        rather than in seconds. Reformatted the code. Changed to use UTF8String() instead of ascii(),
        since ascii() is not thread safe. Changed some variables back from int to long to avoid
        trouble if the result of strtol does not fit in an int (64-bit issue only).

2005-10-08  Mitz Pettel  <opendarwin.org@mitzpettel.com>

        Reviewed by Geoff.
        Tweaked and landed by Darin.

        - fixed http://bugs.webkit.org/show_bug.cgi?id=5266
          Support parenthesized comments in Date.parse()

        * kjs/date_object.cpp:
        (KJS::skipSpacesAndComments): Take a pointer, and advance it past spaces,
        and also past anything enclosed in parentheses.
        (KJS::KRFCDate_parseDate): Use skipSpacesAndComments wherever we formerly had
        code to skip spaces.

2005-10-08  Justin Haygood  <justin@xiondigital.net>

        Reviewed, tweaked, and landed by Darin.

        - fixed http://bugs.webkit.org/show_bug.cgi?id=5189
          pcre_exec.c fails to compile using MSVC
        - fixed http://bugs.webkit.org/show_bug.cgi?id=5190
          KJS config.h adjustment for Win32
        
        * kjs/config.h: Make sure HAVE_MMAP and HAVE_SBRK are off for Win32.
        Turn HAVE_ERRNO_H on for Mac OS X. Sort defines so they are easy to compare
        with each other. Remove #undef of DEBUG_COLLECTOR.
        * pcre/pcre_exec.c: (match): Work around strange MSVC complaint by splitting
        the definition of a local variable into a separate declaration and
        initialization.

2005-10-05  Geoffrey Garen  <ggaren@apple.com>
 
        - Darin and I rewrote our implementation of the SimpleNumber class
          to store number bit patterns in their floating point formats.
 
        My tweaks reviewed by Darin.
        
        ~1% speedup on JS iBench.
        
        * kjs/internal.h: removed obsolete jsNumber declarations.
        * kjs/math_object.cpp:
        (MathFuncImp::callAsFunction): changed KJS::isNaN to isNaN
        * kjs/nodes.cpp:
        (PostfixResolveNode::evaluate): removed obsolete knownToBeInteger
        (PostfixBracketNode::evaluate): ditto
        (PostfixDotNode::evaluate): ditto
        (PrefixResolveNode::evaluate): ditto
        (PrefixBracketNode::evaluate): ditto
        (PrefixDotNode::evaluate): ditto
        (NegateNode::evaluate): ditto
        (valueForReadModifyAssignment): ditto
        * kjs/number_object.cpp: removed obsolete comment
        * kjs/operations.cpp:
        (KJS::equal): removed unnecessary isNaN checks
        (KJS::strictEqual): ditto
        (KJS::add): removed obsolete knownToBeInteger
        (KJS::mult): ditto
        * kjs/operations.h: removed include of "value.h" to prevent circular reference
        * kjs/simple_number.h: removed unnecessary #includes
        (KJS::SimpleNumber::make): see above
        (KJS::SimpleNumber::is): ditto
        (KJS::SimpleNumber::value): ditto
        * kjs/string_object.cpp:
        (StringProtoFuncImp::callAsFunction): changed KJS::isNaN to isNaN
        * kjs/ustring.cpp: removed unnecessary isNaN check
        (KJS::UString::toUInt32): ditto
        * kjs/value.cpp:
        (KJS::jsNumber): removed obsolete jsNumber definitions
        (KJS::ConstantValues::init): NaN is no longer a ConstantValue
        (KJS::ConstantValues::clear): ditto
        (KJS::ConstantValues::mark): ditto
        * kjs/value.h: removed obsolete knownToBeInteger
        (KJS::jsNaN): now returns a SimpleNumber
        (KJS::ValueImp::getUInt32): changed to account for NaN being a SimpleNumber
        (KJS::ValueImp::toBoolean): ditto
        (KJS::ValueImp::toString): changed to account for +/- 0.0
        (KJS::jsZero): changed to reflect that SimpleNumber::make takes a double
        (KJS::jsOne): ditto
        (KJS::jsTwo): ditto
        (KJS::Number): removed obsolete non-double constructor declarations

2005-10-05  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Eric.

        - fixed <rdar://problem/4260481> Remove Reference type from JavaScriptCore

        Also fixed some bugs with for..in enumeration while I was at it. object
        properties now come before prototype properties and duplicates
        between object and prototype are listed only once.

        * JavaScriptCore.xcodeproj/project.pbxproj:
        * kjs/IdentifierSequencedSet.cpp: Added.
        (KJS::IdentifierSequencedSet::IdentifierSequencedSet):
        (KJS::IdentifierSequencedSet::deallocateVector):
        (KJS::IdentifierSequencedSet::~IdentifierSequencedSet):
        (KJS::IdentifierSequencedSet::insert):
        * kjs/IdentifierSequencedSet.h: Added.
        (KJS::IdentifierSequencedSetIterator::IdentifierSequencedSetIterator):
        (KJS::IdentifierSequencedSetIterator::operator*):
        (KJS::IdentifierSequencedSetIterator::operator->):
        (KJS::IdentifierSequencedSetIterator::operator++):
        (KJS::IdentifierSequencedSetIterator::operator==):
        (KJS::IdentifierSequencedSetIterator::operator!=):
        (KJS::IdentifierSequencedSet::begin):
        (KJS::IdentifierSequencedSet::end):
        (KJS::IdentifierSequencedSet::size):
        * kjs/array_instance.h:
        * kjs/array_object.cpp:
        (ArrayInstanceImp::getPropertyNames):
        (ArrayInstanceImp::setLength):
        (ArrayInstanceImp::pushUndefinedObjectsToEnd):
        * kjs/nodes.cpp:
        (ForInNode::execute):
        * kjs/nodes.h:
        * kjs/object.cpp:
        (KJS::ObjectImp::getPropertyNames):
        * kjs/object.h:
        * kjs/property_map.cpp:
        (KJS::PropertyMap::getEnumerablePropertyNames):
        (KJS::PropertyMap::getSparseArrayPropertyNames):
        * kjs/property_map.h:
        * kjs/protect.h:
        * kjs/protected_reference.h: Removed.
        * kjs/reference.cpp: Removed.
        * kjs/reference.h: Removed.
        * kjs/reference_list.cpp: Removed.
        * kjs/reference_list.h: Removed.
        * kjs/ustring.h:
        (KJS::UString::impl):
        * kxmlcore/HashSet.h:

2005-10-04  Eric Seidel  <eseidel@apple.com>

        Reviewed by mjs.

        Code cleanup, which resulted in a small win on iBench.

        * kjs/object.cpp:
        (KJS::tryGetAndCallProperty): new static inline
        (KJS::ObjectImp::defaultValue): code cleanup

2005-10-03  Maciej Stachowiak  <mjs@apple.com>

        Patch from George Staikos <staikos@kde.org>, reviewed and tweaked a bit by me.

        - more Linux build fixes
        
        * kjs/operations.cpp:
        * kxmlcore/FastMalloc.h:
        * kxmlcore/TCSystemAlloc.cpp:
        (TCMalloc_SystemAlloc):

2005-10-03  Maciej Stachowiak  <mjs@apple.com>

        Patch from George Staikos <staikos@kde.org>, reviewed and tweaked a bit by me.

        http://bugs.webkit.org/show_bug.cgi?id=5174
        Add support for compiling on Linux (likely to help for other POSIX systems too)

        * kjs/collector.cpp:
        (KJS::Collector::markCurrentThreadConservatively):
        (KJS::Collector::markOtherThreadConservatively):
        * kjs/config.h:
        * kjs/date_object.cpp:
        (KJS::formatDate):
        (KJS::formatDateUTCVariant):
        (KJS::formatTime):
        (KJS::timeZoneOffset):
        (KJS::DateProtoFuncImp::callAsFunction):
        (KJS::DateObjectImp::construct):
        (KJS::DateObjectImp::callAsFunction):
        (KJS::makeTime):
        * kjs/identifier.cpp:
        * kjs/internal.cpp:
        (KJS::initializeInterpreterLock):
        (KJS::lockInterpreter):
        (KJS::unlockInterpreter):
        (KJS::UndefinedImp::toPrimitive):
        (KJS::UndefinedImp::toBoolean):
        (KJS::UndefinedImp::toNumber):
        (KJS::UndefinedImp::toString):
        (KJS::NullImp::toPrimitive):
        (KJS::NullImp::toBoolean):
        (KJS::NullImp::toNumber):
        (KJS::NullImp::toString):
        (KJS::BooleanImp::toPrimitive):
        (KJS::BooleanImp::toBoolean):
        (KJS::BooleanImp::toNumber):
        (KJS::BooleanImp::toString):
        (KJS::StringImp::toPrimitive):
        (KJS::StringImp::toBoolean):
        (KJS::StringImp::toNumber):
        (KJS::StringImp::toString):
        * kjs/internal.h:
        * kjs/protected_values.cpp:

2005-10-03  Maciej Stachowiak  <mjs@apple.com>

        - fix Development build after last checkin

        * kxmlcore/FastMalloc.cpp:
        (KXMLCore::fastMallocRegisterThread):

2005-10-02  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin.

        <rdar://problem/4283967> REGRESSION: 3% regression on PLT from new FastMalloc
        http://bugs.webkit.org/show_bug.cgi?id=5243
        
        A number of optimizations to the new threadsafe malloc that make it actually as fast
        as dlmalloc (I measured wrong before) and as memory-efficient as the system malloc.

        - use fastMalloc for everything - it now gets applied to all new/delete allocations
        via a private inline operator new that is now included into every file via config.h.

        - tweaked some of the numeric parameters for size classes and amount of wasted memory
        allowed per allocation - this saves on memory use and consequently improves speed.

        - so long as the allocator is not being used on background threads, get the per-thread
        cache from a global variable instead of from pthread_getspecific, since the latter is slow.

        - inline more functions, and force the ones GCC refuses to inline with 
        attribute(always_inline), nearly all of these have one call site so inlining them has 
        to be a win.

        - use some tricks to calculate allocation size more efficiently and fewer times for small
        allocations, to avoid hitting the huge size table array.

        - avoid hitting the per-thread cache on code paths that don't need it.

        - implement inline assembly version of spinlock for PowerPC (was already done for x86)

        * bindings/NP_jsobject.cpp:
        * bindings/c/c_class.cpp:
        * bindings/c/c_instance.cpp:
        * bindings/c/c_runtime.cpp:
        * bindings/c/c_utility.cpp:
        * bindings/jni/jni_class.cpp:
        * bindings/jni/jni_instance.cpp:
        * bindings/jni/jni_jsobject.cpp:
        * bindings/jni/jni_objc.mm:
        * bindings/jni/jni_runtime.cpp:
        * bindings/jni/jni_utility.cpp:
        * bindings/npruntime.cpp:
        * bindings/objc/WebScriptObject.mm:
        * bindings/objc/objc_class.mm:
        * bindings/objc/objc_instance.mm:
        * bindings/objc/objc_runtime.mm:
        * bindings/objc/objc_utility.mm:
        * bindings/runtime.cpp:
        * bindings/runtime_array.cpp:
        * bindings/runtime_method.cpp:
        * bindings/runtime_object.cpp:
        * bindings/runtime_root.cpp:
        * bindings/testbindings.cpp:
        * bindings/testbindings.mm:
        * kjs/array_object.cpp:
        (ArrayInstanceImp::ArrayInstanceImp):
        (ArrayInstanceImp::~ArrayInstanceImp):
        (ArrayInstanceImp::resizeStorage):
        * kjs/bool_object.cpp:
        * kjs/collector.cpp:
        (KJS::Collector::registerThread):
        * kjs/config.h:
        * kjs/debugger.cpp:
        * kjs/error_object.cpp:
        * kjs/function.cpp:
        * kjs/function_object.cpp:
        * kjs/identifier.cpp:
        (KJS::Identifier::rehash):
        * kjs/internal.cpp:
        (KJS::Parser::saveNewNode):
        (KJS::clearNewNodes):
        * kjs/interpreter.cpp:
        * kjs/lexer.cpp:
        (Lexer::doneParsing):
        (Lexer::makeIdentifier):
        (Lexer::makeUString):
        * kjs/list.cpp:
        * kjs/math_object.cpp:
        * kjs/nodes.cpp:
        * kjs/nodes.h:
        * kjs/nodes2string.cpp:
        * kjs/number_object.cpp:
        (integer_part_noexp):
        (char_sequence):
        * kjs/object.cpp:
        * kjs/object_object.cpp:
        * kjs/property_map.cpp:
        * kjs/property_slot.cpp:
        * kjs/protected_values.cpp:
        (KJS::ProtectedValues::rehash):
        * kjs/reference.cpp:
        * kjs/reference_list.cpp:
        * kjs/regexp.cpp:
        * kjs/regexp_object.cpp:
        * kjs/scope_chain.cpp:
        * kjs/scope_chain.h:
        * kjs/string_object.cpp:
        * kjs/testkjs.cpp:
        * kjs/ustring.h:
        * kjs/value.cpp:
        * kxmlcore/Assertions.mm:
        * kxmlcore/FastMalloc.cpp:
        (KXMLCore::InitSizeClasses):
        (KXMLCore::DLL_IsEmpty):
        (KXMLCore::DLL_Prepend):
        (KXMLCore::TCMalloc_Central_FreeList::Insert):
        (KXMLCore::TCMalloc_Central_FreeList::Remove):
        (KXMLCore::TCMalloc_Central_FreeList::Populate):
        (KXMLCore::TCMalloc_ThreadCache::Allocate):
        (KXMLCore::TCMalloc_ThreadCache::FetchFromCentralCache):
        (KXMLCore::fastMallocRegisterThread):
        (KXMLCore::TCMalloc_ThreadCache::GetCache):
        (KXMLCore::TCMalloc_ThreadCache::GetCacheIfPresent):
        (KXMLCore::TCMalloc_ThreadCache::CreateCacheIfNecessary):
        (KXMLCore::do_malloc):
        (KXMLCore::do_free):
        (KXMLCore::realloc):
        * kxmlcore/FastMalloc.h:
        (operator new):
        (operator delete):
        (operator new[]):
        (operator delete[]):
        * kxmlcore/HashTable.cpp:
        * kxmlcore/TCSpinLock.h:
        (TCMalloc_SpinLock::Lock):
        (TCMalloc_SpinLock::Unlock):
        (TCMalloc_SlowLock):
        * kxmlcore/TCSystemAlloc.cpp:

2005-09-30  Geoffrey Garen  <ggaren@apple.com>

        - Second cut at fixing <rdar://problem/4275206> Denver Regression: Seed: 
          Past Editions of Opinions display "NAN/Undefined" for www.washingtonpost.com
                
        Reviewed by john.

        * kjs/date_object.cpp:
        (KJS::KRFCDate_parseDate): Intead of creating a timezone when one isn't specified,
        just rely on the fallback logic, which will do it for you. Also, return invalidDate
        if the date includes trailing garbage. (Somewhat accidentally, the timezone logic
        used to catch trailing garbage.)

        Added test case to fast/js/date-parse-test.html.

2005-09-29  Eric Seidel  <eseidel@apple.com>
        Fix from Mitz Pettel <opendarwin.org@mitzpettel.com>

        Reviewed by darin.

        Fix JSC memory smasher in TOT.
        http://bugs.webkit.org/show_bug.cgi?id=5176

        * pcre/pcre_exec.c:
        (match):

2005-09-29  Eric Seidel  <eseidel@apple.com>
        Fix from Mitz Pettel <opendarwin.org@mitzpettel.com>

        Reviewed by mjs.

        * JavaScriptCore.xcodeproj/project.pbxproj:
        Build fix for JSC+SVG after 5161.
        http://bugs.webkit.org/show_bug.cgi?id=5179

2005-09-28  Geoffrey Garen  <ggaren@apple.com>

        - Fixed <rdar://problem/4275206> Denver Regression: Seed: Past Editions of Opinions display 
          "NAN/Undefined" for www.washingtonpost.com
          
        Reviewed by darin.

        * kjs/date_object.cpp:
        (KJS::KRFCDate_parseDate): If the timezone isn't specified, rather than returning
        invalidDate, substitute the local timezone. This matches the behavior of FF/IE.

2005-09-28  Maciej Stachowiak  <mjs@apple.com>

        Patch from George Staikos, reviewed by me.

        - fixed some compile issues on Linux
        
        * kjs/property_slot.h:
        * kjs/simple_number.h:

2005-09-27  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Eric.

        - move HashMap/HashSet code down to JavaScriptCore
        http://bugs.webkit.org/show_bug.cgi?id=5161
        
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * kjs/internal.cpp:
        (KJS::interpreterMap): Function that fetches the interpreter map on demand. 
        (KJS::InterpreterImp::InterpreterImp): Replace use of InterpreterMap
        class with an appropriate HashMap.
        (KJS::InterpreterImp::clear): ditto
        (KJS::InterpreterImp::interpreterWithGlobalObject): ditto
        * kjs/interpreter_map.cpp: Removed.
        * kjs/interpreter_map.h: Removed.

        The HashMap/HashSet code (copied and slightly tweaked from WebCore)
        
        * kxmlcore/HashFunctions.h: Added.
        (KXMLCore::4):
        (KXMLCore::8):
        (KXMLCore::):
        (KXMLCore::PointerHash::hash):
        (KXMLCore::PointerHash::equal):
        * kxmlcore/HashMap.h: Added.
        (KXMLCore::extractFirst):
        (KXMLCore::HashMap::HashMap):
        (KXMLCore::::size):
        (KXMLCore::::capacity):
        (KXMLCore::::isEmpty):
        (KXMLCore::::begin):
        (KXMLCore::::end):
        (KXMLCore::::find):
        (KXMLCore::::contains):
        (KXMLCore::::set):
        (KXMLCore::::get):
        (KXMLCore::::remove):
        (KXMLCore::::clear):
        (KXMLCore::deleteAllValues):
        * kxmlcore/HashMapPtrSpec.h: Added.
        (KXMLCore::PointerHashIteratorAdapter::PointerHashIteratorAdapter):
        (KXMLCore::PointerHashIteratorAdapter::operator*):
        (KXMLCore::PointerHashIteratorAdapter::operator->):
        (KXMLCore::PointerHashIteratorAdapter::operator++):
        (KXMLCore::PointerHashIteratorAdapter::operator==):
        (KXMLCore::PointerHashIteratorAdapter::operator!=):
        (KXMLCore::PointerHashConstIteratorAdapter::PointerHashConstIteratorAdapter):
        (KXMLCore::PointerHashConstIteratorAdapter::operator*):
        (KXMLCore::PointerHashConstIteratorAdapter::operator->):
        (KXMLCore::PointerHashConstIteratorAdapter::operator++):
        (KXMLCore::PointerHashConstIteratorAdapter::operator==):
        (KXMLCore::PointerHashConstIteratorAdapter::operator!=):
        (KXMLCore::):
        * kxmlcore/HashSet.h: Added.
        (KXMLCore::identityExtract):
        (KXMLCore::convertAdapter):
        (KXMLCore::HashSet::HashSet):
        (KXMLCore::::size):
        (KXMLCore::::capacity):
        (KXMLCore::::isEmpty):
        (KXMLCore::::begin):
        (KXMLCore::::end):
        (KXMLCore::::find):
        (KXMLCore::::contains):
        (KXMLCore::::insert):
        (KXMLCore::::remove):
        (KXMLCore::::clear):
        * kxmlcore/HashTable.cpp: Added.
        (KXMLCore::HashTableStats::~HashTableStats):
        (KXMLCore::HashTableStats::recordCollisionAtCount):
        * kxmlcore/HashTable.h: Added.
        (KXMLCore::HashTableIterator::skipEmptyBuckets):
        (KXMLCore::HashTableIterator::HashTableIterator):
        (KXMLCore::HashTableIterator::operator*):
        (KXMLCore::HashTableIterator::operator->):
        (KXMLCore::HashTableIterator::operator++):
        (KXMLCore::HashTableIterator::operator==):
        (KXMLCore::HashTableIterator::operator!=):
        (KXMLCore::HashTableConstIterator::HashTableConstIterator):
        (KXMLCore::HashTableConstIterator::operator*):
        (KXMLCore::HashTableConstIterator::operator->):
        (KXMLCore::HashTableConstIterator::skipEmptyBuckets):
        (KXMLCore::HashTableConstIterator::operator++):
        (KXMLCore::HashTableConstIterator::operator==):
        (KXMLCore::HashTableConstIterator::operator!=):
        (KXMLCore::HashTable::HashTable):
        (KXMLCore::HashTable::~HashTable):
        (KXMLCore::HashTable::begin):
        (KXMLCore::HashTable::end):
        (KXMLCore::HashTable::size):
        (KXMLCore::HashTable::capacity):
        (KXMLCore::HashTable::insert):
        (KXMLCore::HashTable::isEmptyBucket):
        (KXMLCore::HashTable::isDeletedBucket):
        (KXMLCore::HashTable::isEmptyOrDeletedBucket):
        (KXMLCore::HashTable::hash):
        (KXMLCore::HashTable::equal):
        (KXMLCore::HashTable::identityConvert):
        (KXMLCore::HashTable::extractKey):
        (KXMLCore::HashTable::lookup):
        (KXMLCore::HashTable::shouldExpand):
        (KXMLCore::HashTable::mustRehashInPlace):
        (KXMLCore::HashTable::shouldShrink):
        (KXMLCore::HashTable::shrink):
        (KXMLCore::HashTable::clearBucket):
        (KXMLCore::HashTable::deleteBucket):
        (KXMLCore::HashTable::makeLookupResult):
        (KXMLCore::HashTable::makeIterator):
        (KXMLCore::HashTable::makeConstIterator):
        (KXMLCore::::lookup):
        (KXMLCore::::insert):
        (KXMLCore::::reinsert):
        (KXMLCore::::find):
        (KXMLCore::::contains):
        (KXMLCore::::remove):
        (KXMLCore::::allocateTable):
        (KXMLCore::::expand):
        (KXMLCore::::rehash):
        (KXMLCore::::clear):
        (KXMLCore::::HashTable):
        (KXMLCore::::swap):
        (KXMLCore::::operator):
        (KXMLCore::::checkTableConsistency):
        (KXMLCore::::checkTableConsistencyExceptSize):
        * kxmlcore/HashTraits.h: Added.
        (KXMLCore::HashTraits::emptyValue):
        (KXMLCore::):
        (KXMLCore::PairHashTraits::emptyValue):
        (KXMLCore::PairHashTraits::deletedValue):

2005-09-27  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        - update grammar to fix conflicts; fixes one of our test cases
          because it resolves the relationship between function expressions
          and declarations in the way required by the ECMA specification

        * kjs/grammar.y: Added lots of new grammar rules so we have no conflicts.
        A new set of rules for "no bracket or function at start of expression" and
        another set of rules for "no in anywhere in expression". Also simplified the
        handling of try to use only a single node and used operator precedence to
        get rid of the conflict in handling of if and else. Also used a macro to
        streamline the handling of automatic semicolons and changed parenthesis
        handling to use a virtual function.

        * kjs/nodes.h: Added nodeInsideAllParens, removed unused abortStatement.
        (KJS::TryNode::TryNode): Updated to hold catch and finally blocks directly instead
        of using a special node for each.
        * kjs/nodes.cpp:
        (Node::createErrorCompletion): Added. Used instead of throwError when creating errors
        that should not be in a completion rather than an ExecState.
        (Node::throwUndefinedVariableError): Added. Sets source location unlike the call it
        replaces.
        (Node::nodeInsideAllParens): Added.
        (GroupNode::nodeInsideAllParens): Added.
        (StatListNode::execute): Removed code to move exceptions into completion objects;
        that's now done solely by the KJS_CHECKEXCEPTION macro.
        (TryNode::execute): Include execution of catch and finally here rather than using
        separate nodes.
        (FuncDeclNode::execute): Moved here, no longer inline.
        * kjs/nodes2string.cpp:
        (TryNode::streamTo): Updated for change.
        (FuncDeclNode::streamTo): Ditto.
        (FuncExprNode::streamTo): Ditto.

        * kjs/kjs-test: Removed. Was part of "make check".
        * kjs/kjs-test.chk: Ditto.
        * kjs/test.js: Ditto.

        * tests/mozilla/expected.html: Updated because one more test succeeds.

2005-09-27  Adele Peterson  <adele@apple.com>

        Reviewed by Maciej.

        Changed ints to size_t where appropriate.

        * kjs/collector.cpp:
        (KJS::Collector::allocate):
        (KJS::Collector::markStackObjectsConservatively):
        (KJS::Collector::collect):
        (KJS::Collector::size):
        (KJS::Collector::numInterpreters):
        (KJS::Collector::numGCNotAllowedObjects):
        (KJS::Collector::numReferencedObjects):
        * kjs/collector.h:

2005-09-27  Eric Seidel  <eseidel@apple.com>

        Reviewed by kevin.

        * JavaScriptCore.xcodeproj/project.pbxproj: fix after malloc changes.

2005-09-27  Eric Seidel  <eseidel@apple.com>

        Reviewed by mjs.

        * kjs/nodes.cpp:
        (FuncExprNode::evaluate): Now sets .constructor properly.
        Test cases added to WebCore/layout-tests.
        http://bugs.webkit.org/show_bug.cgi?id=3537

2005-09-26  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by John.

        - replace dlmalloc with tcmalloc
        http://bugs.webkit.org/show_bug.cgi?id=5145

        I also moved SharedPtr and the assertion code from WebCore into a
        new kxmlcore directory.
        
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * kjs/collector.cpp:
        (KJS::Collector::allocate):
        (KJS::Collector::collect):
        * kjs/config.h:
        * kjs/fast_malloc.cpp: Removed.
        * kjs/fast_malloc.h: Removed.
        * kjs/function.cpp:
        * kjs/function.h:
        * kjs/function_object.cpp:
        * kjs/identifier.cpp:
        (KJS::Identifier::add):
        * kjs/internal.cpp:
        * kjs/internal.h:
        * kjs/nodes.h:
        * kjs/nodes2string.cpp:
        * kjs/property_map.cpp:
        (KJS::PropertyMap::~PropertyMap):
        (KJS::PropertyMap::rehash):
        * kjs/scope_chain.h:
        * kjs/shared_ptr.h: Removed.
        * kjs/string_object.cpp:
        (StringObjectFuncImp::callAsFunction):
        * kjs/ustring.cpp:
        (KJS::UString::Rep::createCopying):
        (KJS::UString::Rep::destroy):
        (KJS::UString::expandCapacity):
        (KJS::UString::expandPreCapacity):
        (KJS::UString::UString):
        (KJS::UString::spliceSubstringsWithSeparators):
        (KJS::UString::append):
        (KJS::UString::operator=):
        (KJS::UString::detach):
        * kjs/ustring.h:
        * kxmlcore/Assertions.h: Added.
        * kxmlcore/Assertions.mm: Added.
        * kxmlcore/FastMalloc.cpp: Added.
        (KXMLCore::LgFloor):
        (KXMLCore::SizeClass):
        (KXMLCore::ByteSizeForClass):
        (KXMLCore::InitSizeClasses):
        (KXMLCore::MetaDataAlloc):
        (KXMLCore::PageHeapAllocator::Init):
        (KXMLCore::PageHeapAllocator::New):
        (KXMLCore::PageHeapAllocator::Delete):
        (KXMLCore::PageHeapAllocator::inuse):
        (KXMLCore::pages):
        (KXMLCore::AllocationSize):
        (KXMLCore::Event):
        (KXMLCore::NewSpan):
        (KXMLCore::DeleteSpan):
        (KXMLCore::DLL_Init):
        (KXMLCore::DLL_Remove):
        (KXMLCore::DLL_IsEmpty):
        (KXMLCore::DLL_Length):
        (KXMLCore::DLL_Print):
        (KXMLCore::DLL_Prepend):
        (KXMLCore::DLL_InsertOrdered):
        (KXMLCore::):
        (KXMLCore::TCMalloc_PageHeap::GetDescriptor):
        (KXMLCore::TCMalloc_PageHeap::SystemBytes):
        (KXMLCore::TCMalloc_PageHeap::FreeBytes):
        (KXMLCore::TCMalloc_PageHeap::RecordSpan):
        (KXMLCore::TCMalloc_PageHeap::TCMalloc_PageHeap):
        (KXMLCore::TCMalloc_PageHeap::New):
        (KXMLCore::TCMalloc_PageHeap::Split):
        (KXMLCore::TCMalloc_PageHeap::Carve):
        (KXMLCore::TCMalloc_PageHeap::Delete):
        (KXMLCore::TCMalloc_PageHeap::RegisterSizeClass):
        (KXMLCore::TCMalloc_PageHeap::Dump):
        (KXMLCore::TCMalloc_PageHeap::GrowHeap):
        (KXMLCore::TCMalloc_PageHeap::Check):
        (KXMLCore::TCMalloc_PageHeap::CheckList):
        (KXMLCore::TCMalloc_ThreadCache_FreeList::Init):
        (KXMLCore::TCMalloc_ThreadCache_FreeList::length):
        (KXMLCore::TCMalloc_ThreadCache_FreeList::empty):
        (KXMLCore::TCMalloc_ThreadCache_FreeList::lowwatermark):
        (KXMLCore::TCMalloc_ThreadCache_FreeList::clear_lowwatermark):
        (KXMLCore::TCMalloc_ThreadCache_FreeList::Push):
        (KXMLCore::TCMalloc_ThreadCache_FreeList::Pop):
        (KXMLCore::TCMalloc_ThreadCache::freelist_length):
        (KXMLCore::TCMalloc_ThreadCache::Size):
        (KXMLCore::TCMalloc_Central_FreeList::length):
        (KXMLCore::TCMalloc_Central_FreeList::Init):
        (KXMLCore::TCMalloc_Central_FreeList::Insert):
        (KXMLCore::TCMalloc_Central_FreeList::Remove):
        (KXMLCore::TCMalloc_Central_FreeList::Populate):
        (KXMLCore::TCMalloc_ThreadCache::SampleAllocation):
        (KXMLCore::TCMalloc_ThreadCache::Init):
        (KXMLCore::TCMalloc_ThreadCache::Cleanup):
        (KXMLCore::TCMalloc_ThreadCache::Allocate):
        (KXMLCore::TCMalloc_ThreadCache::Deallocate):
        (KXMLCore::TCMalloc_ThreadCache::FetchFromCentralCache):
        (KXMLCore::TCMalloc_ThreadCache::ReleaseToCentralCache):
        (KXMLCore::TCMalloc_ThreadCache::Scavenge):
        (KXMLCore::TCMalloc_ThreadCache::GetCache):
        (KXMLCore::TCMalloc_ThreadCache::GetCacheIfPresent):
        (KXMLCore::TCMalloc_ThreadCache::PickNextSample):
        (KXMLCore::TCMalloc_ThreadCache::InitModule):
        (KXMLCore::TCMalloc_ThreadCache::InitTSD):
        (KXMLCore::TCMalloc_ThreadCache::CreateCacheIfNecessary):
        (KXMLCore::TCMalloc_ThreadCache::DeleteCache):
        (KXMLCore::TCMalloc_ThreadCache::RecomputeThreadCacheSize):
        (KXMLCore::TCMalloc_ThreadCache::Print):
        (KXMLCore::ExtractStats):
        (KXMLCore::DumpStats):
        (KXMLCore::PrintStats):
        (KXMLCore::DumpStackTraces):
        (KXMLCore::TCMallocImplementation::GetStats):
        (KXMLCore::TCMallocImplementation::ReadStackTraces):
        (KXMLCore::TCMallocImplementation::GetNumericProperty):
        (KXMLCore::TCMallocImplementation::SetNumericProperty):
        (KXMLCore::DoSampledAllocation):
        (KXMLCore::do_malloc):
        (KXMLCore::do_free):
        (KXMLCore::do_memalign):
        (KXMLCore::TCMallocGuard::TCMallocGuard):
        (KXMLCore::TCMallocGuard::~TCMallocGuard):
        (KXMLCore::malloc):
        (KXMLCore::free):
        (KXMLCore::calloc):
        (KXMLCore::cfree):
        (KXMLCore::realloc):
        (KXMLCore::memalign):
        (KXMLCore::posix_memalign):
        (KXMLCore::valloc):
        (KXMLCore::pvalloc):
        (KXMLCore::malloc_stats):
        (KXMLCore::mallopt):
        (KXMLCore::mallinfo):
        * kxmlcore/FastMalloc.h: Added.
        (KXMLCore::FastAllocated::operator new):
        (KXMLCore::FastAllocated::operator delete):
        (KXMLCore::FastAllocated::operator new[]):
        (KXMLCore::FastAllocated::operator delete[]):
        * kxmlcore/SharedPtr.h: Added.
        (KXMLCore::SharedPtr::SharedPtr):
        (KXMLCore::SharedPtr::~SharedPtr):
        (KXMLCore::SharedPtr::isNull):
        (KXMLCore::SharedPtr::notNull):
        (KXMLCore::SharedPtr::reset):
        (KXMLCore::SharedPtr::get):
        (KXMLCore::SharedPtr::operator*):
        (KXMLCore::SharedPtr::operator->):
        (KXMLCore::SharedPtr::operator!):
        (KXMLCore::SharedPtr::operator bool):
        (KXMLCore::::operator):
        (KXMLCore::operator==):
        (KXMLCore::operator!=):
        (KXMLCore::static_pointer_cast):
        (KXMLCore::const_pointer_cast):
        * kxmlcore/TCPageMap.h: Added.
        (TCMalloc_PageMap1::TCMalloc_PageMap1):
        (TCMalloc_PageMap1::Ensure):
        (TCMalloc_PageMap1::get):
        (TCMalloc_PageMap1::set):
        (TCMalloc_PageMap2::TCMalloc_PageMap2):
        (TCMalloc_PageMap2::get):
        (TCMalloc_PageMap2::set):
        (TCMalloc_PageMap2::Ensure):
        (TCMalloc_PageMap3::NewNode):
        (TCMalloc_PageMap3::TCMalloc_PageMap3):
        (TCMalloc_PageMap3::get):
        (TCMalloc_PageMap3::set):
        (TCMalloc_PageMap3::Ensure):
        * kxmlcore/TCSpinLock.h: Added.
        (TCMalloc_SpinLock::Init):
        (TCMalloc_SpinLock::Finalize):
        (TCMalloc_SpinLock::Lock):
        (TCMalloc_SpinLock::Unlock):
        (TCMalloc_SlowLock):
        (TCMalloc_SpinLockHolder::TCMalloc_SpinLockHolder):
        (TCMalloc_SpinLockHolder::~TCMalloc_SpinLockHolder):
        * kxmlcore/TCSystemAlloc.cpp: Added.
        (TrySbrk):
        (TryMmap):
        (TryDevMem):
        (TCMalloc_SystemAlloc):
        * kxmlcore/TCSystemAlloc.h: Added.

2005-09-23  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin.

        <rdar://problem/4260479> Finish deploying PropertySlot in the interpreter
        http://bugs.webkit.org/show_bug.cgi?id=5112
        
        Convert postfix, prefix, delete, prefix, and for..in expressions to use
        PropertySlot-based lookup instead of evaluateReference.

        3% speedup on JS iBench.

        Fixed two of the JS tests:
        * tests/mozilla/expected.html:

        * kjs/grammar.y:
        * kjs/nodes.cpp:
        (PostfixResolveNode::evaluate):
        (PostfixBracketNode::evaluate):
        (PostfixDotNode::evaluate):
        (DeleteResolveNode::evaluate):
        (DeleteBracketNode::evaluate):
        (DeleteDotNode::evaluate):
        (DeleteValueNode::evaluate):
        (typeStringForValue):
        (TypeOfResolveNode::evaluate):
        (TypeOfValueNode::evaluate):
        (PrefixResolveNode::evaluate):
        (PrefixBracketNode::evaluate):
        (PrefixDotNode::evaluate):
        (ForInNode::execute):
        * kjs/nodes.h:
        (KJS::PostfixResolveNode::PostfixResolveNode):
        (KJS::PostfixBracketNode::PostfixBracketNode):
        (KJS::PostfixDotNode::PostfixDotNode):
        (KJS::DeleteResolveNode::DeleteResolveNode):
        (KJS::DeleteBracketNode::DeleteBracketNode):
        (KJS::DeleteDotNode::DeleteDotNode):
        (KJS::DeleteValueNode::DeleteValueNode):
        (KJS::TypeOfResolveNode::TypeOfResolveNode):
        (KJS::TypeOfValueNode::TypeOfValueNode):
        (KJS::PrefixResolveNode::PrefixResolveNode):
        (KJS::PrefixBracketNode::PrefixBracketNode):
        (KJS::PrefixDotNode::PrefixDotNode):
        * kjs/nodes2string.cpp:
        (PostfixResolveNode::streamTo):
        (PostfixBracketNode::streamTo):
        (PostfixDotNode::streamTo):
        (DeleteResolveNode::streamTo):
        (DeleteBracketNode::streamTo):
        (DeleteDotNode::streamTo):
        (DeleteValueNode::streamTo):
        (TypeOfValueNode::streamTo):
        (TypeOfResolveNode::streamTo):
        (PrefixResolveNode::streamTo):
        (PrefixBracketNode::streamTo):
        (PrefixDotNode::streamTo):
        * kjs/reference.cpp:
        (KJS::Reference::Reference):
        (KJS::Reference::getPropertyName):
        (KJS::Reference::getValue):
        (KJS::Reference::deleteValue):
        * kjs/reference.h:

2005-09-23  Krzysztof Kowalczyk  <kkowalczyk@gmail.com>

        Reviewed and landed by Darin.

        - a Windows-specific file

        * os-win32/stdint.h: Added. We plan to remove dependency on the <stdint.h> types,
        and if we do so, we will remove this file.

2005-09-22  Geoffrey Garen  <ggaren@apple.com>

        - Fixed http://bugs.webkit.org/show_bug.cgi?id=5053
        Need to restore int/long changes to simple_number.h
        
        Reviewed by darin and mjs.

        * kjs/simple_number.h: changed enums to indenpendent constants to clarify types
        (KJS::isNegativeZero): changed to static function - no reason to export
        (KJS::SimpleNumber::rightShiftSignExtended): new function for clarity
        (KJS::SimpleNumber::make): specified cast as reinterpret_cast
        (KJS::SimpleNumber::is): changed to use uintptr_t for portability
        (KJS::SimpleNumber::value): changed to use uintptr_t and rightShiftSignExtended
        (KJS::SimpleNumber::fits): inverted tests - probably only a performance win for double
        (KJS::SimpleNumber::integerFits): ditto

2005-09-20  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Geoff and partly by Darin.

        - fixed http://bugs.webkit.org/post_bug.cgi
        (Reduce conflicts in JavaScriptCore grammar)

        This change gets us down from over 200 shift/reduce and 45 reduce/reduce to
        9 shift/reduce and 45 reduce/reduce.

        * kjs/grammar.y:
        * kjs/grammar_types.h: Removed.
        * kjs/lexer.cpp:
        * kjs/nodes.h:
        (KJS::Node::isGroupNode):
        (KJS::Node::isLocation):
        (KJS::Node::isResolveNode):
        (KJS::Node::isBracketAccessorNode):
        (KJS::Node::isDotAccessorNode):
        (KJS::ResolveNode::isLocation):
        (KJS::ResolveNode::isResolveNode):
        (KJS::ResolveNode::identifier):
        (KJS::GroupNode::isGroupNode):
        (KJS::GroupNode::leafNode):
        (KJS::BracketAccessorNode::isLocation):
        (KJS::BracketAccessorNode::isBracketAccessorNode):
        (KJS::BracketAccessorNode::base):
        (KJS::BracketAccessorNode::subscript):
        (KJS::DotAccessorNode::isLocation):
        (KJS::DotAccessorNode::isDotAccessorNode):
        (KJS::DotAccessorNode::base):
        (KJS::DotAccessorNode::identifier):
        (KJS::FuncExprNode::FuncExprNode):
        (KJS::FuncExprNode::identifier):
        (KJS::FuncDeclNode::FuncDeclNode):
        (KJS::FuncDeclNode::execute):

2005-09-20  Geoffrey Garen  <ggaren@apple.com>

        - Oops. The 4263434 change was only appropriate on the branch. Rolling out.
        
        Reviewed by eric.
        
        * kjs/internal.cpp:
        (KJS::InterpreterImp::mark):

2005-09-20  Geoffrey Garen  <ggaren@apple.com>

        - More changes needed to fix <rdar://problem/4214783> 8F29 REGRESSION(Denver/Chardonnay):
          kjs_fast_malloc crash due to lack of locking on multiple threads (seen selecting volumes in
          the installer)
          
        Added InterpreterLocks in some places in the bindings we missed before.
        
        Reviewed by john.

        * bindings/runtime_root.cpp:
        (KJS::Bindings::addNativeReference):
        (KJS::Bindings::removeNativeReference):
        (RootObject::removeAllNativeReferences):
        * bindings/runtime_root.h:
        (KJS::Bindings::RootObject::~RootObject):
        (KJS::Bindings::RootObject::setRootObjectImp):

2005-09-20  Geoffrey Garen  <ggaren@apple.com>

        - Fixed <rdar://problem/4263434> <rdar://problem/4263434> Denver 8F29 Regression:
          KJS::InterpreterImp::mark() crash
          
        Fix by mjs, review by me.

        * kjs/internal.cpp:
        (KJS::InterpreterImp::mark): Added a null check on globExec in case a
        garbage collection occurs inside InterpreterImp::globalInit (called
        from InterpreterImp::InterpreterImp), at which point globExec has not yet been initialized.

2005-09-20  Geoffrey Garen  <ggaren@apple.com>

        - Rolled in fix for http://bugs.webkit.org/show_bug.cgi?id=4892
          Date constructor has problems with months larger than 11

        Test cases added:

        * layout-tests/fast/js/date-big-constructor-expected.txt: Added.
        * layout-tests/fast/js/date-big-constructor.html: Added.

        Reviewed by darin.

        * kjs/date_object.cpp:
        (KJS::fillStructuresUsingDateArgs):
        (KJS::makeTime):

2005-09-19  Geoffrey Garen  <ggaren@apple.com>

        - Fixed http://bugs.webkit.org/show_bug.cgi?id=5028
          9 layout tests fail following the change from long to int
          
        - Rolled out changes to simple_number.h, and added fits(long long) 
          and SimpleNumber::fits(unsigned long long) to the old system.
        
        Reviewed by mjs.

        * kjs/simple_number.h:
        (KJS::SimpleNumber::):
        (KJS::SimpleNumber::value):
        (KJS::SimpleNumber::fits):
        (KJS::SimpleNumber::integerFits):
        (KJS::SimpleNumber::make):

2005-09-14  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Geoff.

        - fixed <rdar://problem/4214783> REGRESSION: kjs_fast_malloc crash due to lack of locking on multiple threads (seen selecting volumes in the installer)

        Make sure to lock using the InterpreterLock class in all places that need it
        (including anything that uses the collector, the parser, the protect count hash table,
        and anything that allocates via fast_malloc).

        Also added assertions to ensure that the locking rules are followed for the relevant
        resources.

        * Makefile.am:
        * bindings/NP_jsobject.cpp:
        (identifierFromNPIdentifier):
        (_NPN_Invoke):
        (_NPN_Evaluate):
        (_NPN_GetProperty):
        (_NPN_SetProperty):
        (_NPN_RemoveProperty):
        (_NPN_HasProperty):
        (_NPN_HasMethod):
        (_NPN_SetException):
        * bindings/jni/jni_jsobject.cpp:
        (JSObject::call):
        (JSObject::eval):
        (JSObject::getMember):
        (JSObject::setMember):
        (JSObject::removeMember):
        (JSObject::getSlot):
        (JSObject::setSlot):
        (JSObject::toString):
        (JSObject::convertJObjectToValue):
        * bindings/objc/WebScriptObject.mm:
        (-[WebScriptObject callWebScriptMethod:withArguments:]):
        (-[WebScriptObject evaluateWebScript:]):
        (-[WebScriptObject setValue:forKey:]):
        (-[WebScriptObject valueForKey:]):
        (-[WebScriptObject removeWebScriptKey:]):
        (-[WebScriptObject stringRepresentation]):
        (-[WebScriptObject webScriptValueAtIndex:]):
        (-[WebScriptObject setWebScriptValueAtIndex:value:]):
        (+[WebScriptObject _convertValueToObjcValue:KJS::originExecutionContext:Bindings::executionContext:Bindings::]):
        * bindings/runtime.cpp:
        (Instance::createRuntimeObject):
        * bindings/runtime_root.h:
        * bindings/testbindings.cpp:
        (main):
        * bindings/testbindings.mm:
        (main):
        * kjs/fast_malloc.cpp:
        (KJS::kjs_fast_malloc):
        (KJS::kjs_fast_calloc):
        (KJS::kjs_fast_free):
        (KJS::kjs_fast_realloc):
        * kjs/fast_malloc.h:
        * kjs/identifier.h:
        * kjs/internal.cpp:
        (InterpreterImp::InterpreterImp):
        (InterpreterImp::clear):
        (InterpreterImp::mark):
        (InterpreterImp::checkSyntax):
        (InterpreterImp::evaluate):
        * kjs/internal.h:
        (KJS::InterpreterImp::globalObject):
        * kjs/interpreter.cpp:
        (Interpreter::evaluate):
        * kjs/interpreter.h:
        (KJS::InterpreterLock::InterpreterLock):
        (KJS::InterpreterLock::~InterpreterLock):
        * kjs/nodes.h:
        * kjs/protect.h:
        (KJS::ProtectedValue::ProtectedValue):
        (KJS::ProtectedValue::~ProtectedValue):
        (KJS::ProtectedValue::operator=):
        (KJS::ProtectedObject::ProtectedObject):
        (KJS::ProtectedObject::~ProtectedObject):
        (KJS::ProtectedObject::operator=):
        (KJS::ProtectedReference::ProtectedReference):
        (KJS::ProtectedReference::~ProtectedReference):
        (KJS::ProtectedReference::operator=):
        * kjs/protected_object.h:
        * kjs/protected_values.cpp:
        (KJS::ProtectedValues::getProtectCount):
        (KJS::ProtectedValues::increaseProtectCount):
        (KJS::ProtectedValues::decreaseProtectCount):
        * kjs/string_object.cpp:
        (StringObjectImp::StringObjectImp):
        * kjs/testkjs.cpp:
        (main):

2005-09-16  Adele Peterson  <adele@apple.com>

        Change by Darin, reviewed by me and Maciej.

        Fixes http://bugs.webkit.org/show_bug.cgi?id=4547
        use int instead of long for 32-bit (to prepare for LP64 compiling)

        * bindings/c/c_class.h:
        (KJS::Bindings::CClass::constructorAt):
        (KJS::Bindings::CClass::numConstructors):
        * bindings/c/c_runtime.h:
        (KJS::Bindings::CMethod::numParameters):
        * bindings/jni/jni_class.cpp:
        (JavaClass::JavaClass):
        * bindings/jni/jni_class.h:
        (KJS::Bindings::JavaClass::constructorAt):
        (KJS::Bindings::JavaClass::numConstructors):
        * bindings/jni/jni_instance.cpp:
        (JavaInstance::invokeMethod):
        * bindings/jni/jni_jsobject.cpp:
        (JSObject::convertJObjectToValue):
        (JSObject::listFromJArray):
        * bindings/jni/jni_runtime.cpp:
        (JavaMethod::JavaMethod):
        * bindings/jni/jni_runtime.h:
        (KJS::Bindings::JavaConstructor::_commonCopy):
        (KJS::Bindings::JavaConstructor::parameterAt):
        (KJS::Bindings::JavaConstructor::numParameters):
        (KJS::Bindings::JavaMethod::_commonCopy):
        (KJS::Bindings::JavaMethod::parameterAt):
        (KJS::Bindings::JavaMethod::numParameters):
        * bindings/npapi.h:
        * bindings/objc/WebScriptObject.mm:
        (listFromNSArray):
        * bindings/objc/objc_class.h:
        (KJS::Bindings::ObjcClass::constructorAt):
        (KJS::Bindings::ObjcClass::numConstructors):
        * bindings/objc/objc_instance.h:
        * bindings/objc/objc_runtime.h:
        * bindings/objc/objc_runtime.mm:
        (ObjcMethod::numParameters):
        * bindings/runtime.h:
        * kjs/identifier.h:
        * kjs/internal.h:
        * kjs/property_slot.h:
        (KJS::PropertySlot::setCustomIndex):
        (KJS::PropertySlot::index):
        (KJS::PropertySlot::):
        * kjs/regexp_object.cpp:
        (RegExpObjectImp::backrefGetter):
        (RegExpObjectImp::getOwnPropertySlot):
        * kjs/simple_number.h:
        (KJS::SimpleNumber::):
        (KJS::SimpleNumber::value):
        (KJS::SimpleNumber::fits):
        (KJS::SimpleNumber::integerFits):
        (KJS::SimpleNumber::make):
        * kjs/string_object.cpp:
        (substituteBackreferences):
        * kjs/ustring.cpp:
        (KJS::UString::from):
        (KJS::UString::toUInt32):
        (KJS::UString::find):
        (KJS::UString::rfind):
        * kjs/ustring.h:
        * kjs/value.cpp:
        (KJS::jsNumber):
        * kjs/value.h:

2005-09-11  Eric Seidel  <eseidel@apple.com>

        No review requested, build fix affects only SVG.

        * JavaScriptCore.xcodeproj/project.pbxproj: Fixed JSC+SVG
        Fixed JavaScriptCore+SVG after PCRE 6.1 merger.
        http://bugs.webkit.org/show_bug.cgi?id=4932

2005-09-10  Krzysztof Kowalczyk  <kkowalczyk@gmail.com>

        Reviewed and landed by Darin.

        * Makefile.vc: Added.
        * README-Win32.txt: Added.

2005-09-10  Darin Adler  <darin@apple.com>

        - fixed compilation for WebCore (another try)

        * kjs/simple_number.h: Added more "using" lines.

2005-09-10  Darin Adler  <darin@apple.com>

        - fixed compilation for WebCore

        * kjs/simple_number.h: Have to include <cmath> here to work around a bug in the GCC
        standard C++ library headers.

2005-09-10  Darin Adler  <darin@apple.com>

        Windows changes by Krzysztof Kowalczyk <kkowalczyk@gmail.com>.

        - fixed http://bugs.webkit.org/show_bug.cgi?id=4870
          win portability: fix IS_NEGATIVE_ZERO macro in simple_number.h

        * kjs/simple_number.h:
        (KJS::isNegativeZero): Added. Inline function. Has a case for Windows that
        uses _fpclass and a case for other platforms that uses signbit.
        (KJS::SimpleNumber::fits): Use inline isNegativeZero instead of macro IS_NEGATIVE_ZERO.

        * kjs/internal.cpp: Remove definition of now-unneeded negZero global.

        * kjs/value.cpp: Touched the file because Xcode didn't know it needed to
        recompile it.

        - improved test engine

        * tests/mozilla/jsDriver.pl: Sort tests in numeric order instead of using
        a plain-ASCII sort; now test 33 will be after test 5 in any given set of
        numbered tests.

2005-09-08  Darin Adler  <darin@apple.com>

        - fixed overloaded versions of throwError so that they substitute *all* 
          expected parameters into the message string -- some versions used to
          skip parameters, resulting in "%s" being printed in the error message.
        
        Reviewed by Geoff.

        * kjs/nodes.h: Updated declarations to use "const &" and not to name parameters
        * kjs/nodes.cpp: (Node::throwError): Updated to match above and add one missing
        call to substitute.

2005-09-08  Darin Adler  <darin@apple.com>

        Reviewed by Geoff.

        - updated to PCRE 6.1

        The original PCRE 6.1 sources are checked into the tree with the tag
        "pcre-6-1" for reference. What we're checking in right now is the original
        plus our changes to make it support UTF-16 and at least one other tweak
        (vertical tab considered whitespace). Our work to get our changes was
        done on "pcre-6-1-branch", with an anchor at "pcre-6-1-anchor" so you can
        see the evolution of the UTF-16 changes.
        
        Note also that there was one small change made here that's not on the branch
        in pcre_compile.c.

        * Info.plist: Updated the part of the copyright message that's about PCRE.

        * JavaScriptCore.xcodeproj/project.pbxproj: Added new PCRE source files,
        removed obsolete ones.

        * pcre/AUTHORS: Updated to PCRE 6.1. Includes credits for Apple's UTF-16
        changes, but not the credits for Google's C++ wrapper, since we don't include that.
        * pcre/COPYING: Updated to PCRE 6.1.
        * pcre/LICENCE: Ditto.
        * pcre/dftables.c: Ditto.
        * pcre/pcre-config.h: Ditto.
        * pcre/pcre.h: Ditto.

        * pcre/pcre_compile.c: Added for PCRE 6.1.
        * pcre/pcre_config.c: Ditto.
        * pcre/pcre_exec.c: Ditto.
        * pcre/pcre_fullinfo.c: Ditto.
        * pcre/pcre_get.c: Ditto.
        * pcre/pcre_globals.c: Ditto.
        * pcre/pcre_info.c: Ditto.
        * pcre/pcre_internal.h: Ditto.
        * pcre/pcre_maketables.c: Ditto.
        * pcre/pcre_ord2utf8.c: Ditto.
        * pcre/pcre_printint.c: Ditto.
        * pcre/pcre_refcount.c: Ditto.
        * pcre/pcre_study.c: Ditto.
        * pcre/pcre_tables.c: Ditto.
        * pcre/pcre_try_flipped.c: Ditto.
        * pcre/pcre_ucp_findchar.c: Ditto.
        * pcre/pcre_version.c: Ditto.
        * pcre/pcre_xclass.c: Ditto.
        * pcre/ucp.h: Ditto.
        * pcre/ucp_findchar.c: Ditto.
        * pcre/ucpinternal.h: Ditto.
        * pcre/ucptable.c: Ditto.

        * pcre/get.c: Removed.
        * pcre/internal.h: Removed.
        * pcre/maketables.c: Removed.
        * pcre/pcre.c: Removed.
        * pcre/study.c: Removed.

2005-09-07  Geoffrey Garen  <ggaren@apple.com>

        -fixed http://bugs.webkit.org/show_bug.cgi?id=4781
        Date.setMonth fails with big values due to overflow

        Reviewed by darin.

        * kjs/date_object.cpp:
        (timetUsingCF): for consistency, changed return statement to invalidDate instead of LONG_MAX
        (KJS::fillStructuresUsingTimeArgs): modified for readability
        (KJS::fillStructuresUsingDateArgs): new function analogous to fillStructuresUsingTimeArgs
        (KJS::DateProtoFuncImp::callAsFunction): modified to use fillStructuresUsingDateArgs
        (KJS::DateObjectImp::construct): moved variable declaration to proper scope
        (KJS::DateObjectFuncImp::callAsFunction): moved variable declaration to proper scope

2005-09-07  Geoffrey Garen  <ggaren@apple.com>
        -updated expected test results to reflect fix for 
        http://bugs.webkit.org/show_bug.cgi?id=4698
        kjs does not allow named functions in function expressions
 
        * tests/mozilla/expected.html:

2005-09-04  Darin Adler  <darin@apple.com>

        * kjs/identifier.cpp: Fix comment, add missing include.
        (Follow-on to changes from yesterday.)

2005-09-03  Krzysztof Kowalczyk  <kkowalczyk@gmail.com>

        Reviewed, tweaked and landed by Darin.

        - another try at some of the Windows compilation fixes
          should fix these bugs: 4546, 4831, 4834, 4643, 4830, 4832, 4833, 4835

        * kjs/collector.cpp: Add missing <setjmp.h> include.
        * kjs/date_object.cpp: Fix broken copysign macro.
        * kjs/dtoa.cpp: Move macro definitions down after all header includes.
        * kjs/fast_malloc.cpp: Add missing <assert.h> and <stddef.h> includes.
        * kjs/function.cpp: Remove broken isxdigit definition.
        * kjs/grammar.y: Add a missing semicolon (and remove an excess one).
        * kjs/identifier.cpp: Turn off AVOID_STATIC_CONSTRUCTORS because the placement new syntax
        doesn't seem to work in Visual C++ (I'm surprised to hear that, by the way).
        * kjs/value.h: Made ValueImp's destructor virtual because otherwise pointers to ValueImp
        on the stack aren't right for garbage collection on Windows (don't think it works that
        way with gcc's virtual table scheme, but it's a harmless change).

2005-09-03  Krzysztof Kowalczyk  <kkowalczyk@gmail.com>

        Reviewed, tweaked and landed by Darin.

        - some Windows compilation fixes, hoping to fix the problems reported in these bugs:
          4627, 4629, 4630, 4631, 4632, 4633, 4634, 4635, 4636, 4637, 4639, 4640, 4641, 4644, 4645

        * kjs/collector.cpp: Include <windows.h> on WIN32. Put thread-related code inside
        KJS_MULTIPLE_THREADS #if directives.
        (KJS::Collector::markCurrentThreadConservatively): Use NT_TIB to find the stack base on Win32.

        * kjs/config.h: Define HAVE_SYS_TIMEB_H for Win32.

        * kjs/date_object.cpp: Add include of <limits.h>. Add definitions of strncasecmp, isfinite, and
        copysign for Win32.
        (KJS::KRFCDate_parseDate): Move "errno = 0" line down closer to the first call to strol -- I believe
        that on Win32 there's some other call before that setting errno.

        * kjs/date_object.h: Remove unneeded include of <sys/time.h>.

        * kjs/dtoa.cpp: Add an undef of strtod, needed on Win32.

        * kjs/fast_malloc.cpp: Put #if !WIN32 around some customization that's not appropriate on Win32.
        (KJS::region_list_append): Add a missing cast so this Win32-specific function compiles in C++.
        (KJS::sbrk): Change parameter type to match the declaration.

        * kjs/function.cpp: (isxdigit): Define a locale-independent isxdigit on Win32.

        * kjs/function.h: Remove unneeded friend class Function for FunctionImp.

        * kjs/identifier.cpp: Took out the APPLE_CHANGES from around the AVOID_STATIC_CONSTRUCTORS
        define. We ultimately intend to phase out APPLE_CHANGES entirely. Also fix the
        non-AVOID_STATIC_CONSTRUCTORS code path.

        * kjs/internal.cpp: Remove uneeded include of <strings.h>, which was confused with <string.h>!
        Add a Win32 implementation of copysign. Put the threads code inside KJS_MULTIPLE_THREADS.

        * kjs/internal.h: Define a KJS_MULTIPLE_THREADS macro on non-Win32 only. Later we can make this
        specific to Mac OS X if we like.

        * kjs/interpreter_map.cpp: Add missing include of <stdlib.h>.

        * kjs/list.cpp:
        (KJS::ListImp::markValues): Use std::min instead of MIN.
        (KJS::List::copy): Ditto.
        (KJS::List::copyTail): Ditto.

        * kjs/math_object.cpp: (signbit): Add a Win32 implementation of signbit.

        * kjs/nodes.cpp: (Node::finalCheck): Use unsigned instead of uint.
        Put the use of always_inline inside __GNUC__.

        * kjs/number_object.cpp: (NumberProtoFuncImp::callAsFunction): Use "10.0" instead of "10"
        inside all the calls to pow to avoid ambiguity caused by overloading of pow on Win32, seen
        when passing an int rather than a double or float.

        * kjs/operations.cpp:
        (KJS::isInf): Add Win32 implementation.
        (KJS::isPosInf): Add Win32 implementation.
        (KJS::isNegInf): Add Win32 implementation.

        * kjs/regexp.cpp: Use unsigned instead of uint.
        * kjs/regexp.h: Ditto.
        * kjs/regexp_object.cpp: Ditto.
        * kjs/regexp_object.h: Ditto.

2005-09-02  Beth Dakin  <bdakin@apple.com>

        Fix for <rdar://problem/4235531> Denver Regression: Safari crash in KWQStringData::makeUnicode
        The other half of the fix is in WebCore.

        Fix written by Maciej and Darin.
        Reviewed by me/Maciej

        As Maciej said in Radar: These problems was caused by a conflict between some of our custom 
        allocators, causing them to return null. Symptom is typically a null pointer dereference in 
        a place where it might be expected an allocation has just occurred.

        * kjs/fast_malloc.cpp: Added #define for MORECORE_CONTIGUOUS, MORECORE_CANNOT_TRIM, 
                               and MALLOC_FAILURE_ACTION.

2005-08-31  Geoffrey Garen  <ggaren@apple.com>

        -rolled in fix for http://bugs.webkit.org/show_bug.cgi?id=4698
        kjs does not allow named functions in function expressions
        
        Fix by Arthur Langereis.
        
        Reviewed by darin.
        
        * kjs/grammar.y:
        * kjs/nodes.cpp:
        (FuncExprNode::evaluate):
        * kjs/nodes.h:
        (KJS::FuncExprNode::FuncExprNode):

        Test cases added:

        * layout-tests/fast/js/named-function-expression-expected.txt: Added.
        * layout-tests/fast/js/named-function-expression.html: Added.
        
2005-08-31  Justin Haygood  <justin@xiondigital.net>

        Reviewed, tweaked, and landed by Darin.

        - fixed http://bugs.webkit.org/show_bug.cgi?id=4085
        - fixed http://bugs.webkit.org/show_bug.cgi?id=4087
        - fixed http://bugs.webkit.org/show_bug.cgi?id=4096
          Some fixes for compiling on windows.

        * kjs/config.h: Added a WIN32 case in here, with suitable defines.
        (To be tweaked as necessary.)
        * kjs/function.cpp: Took out APPLE_CHANGES around use of ICU.
        * kjs/operations.cpp: Removed some bogus code that always set HAVE_FLOAT_H.

2005-08-30  Darin Adler  <darin@apple.com>

        Reviewed by John Sullivan.

        - fixed http://bugs.webkit.org/show_bug.cgi?id=4758
          unify SharedPtr in WebCore and JavaScriptCore

        * kjs/shared_ptr.h: Updated namespace to KXMLCore instead of kxhmlcore.
        Made a few small improvements to use local variables a bit more and added
        an "operator int" to reduce the chance that we'll convert a SharedPtr to
        an int by accident. Also made the == operators normal functions rather than
        friend functions, added a couple of comemnts.

        * kjs/function.h: Updated for namespace change.
        * kjs/function.cpp: Ditto.
        * kjs/function_object.cpp: Ditto.
        * kjs/internal.h: Ditto.
        * kjs/internal.cpp: Ditto.
        * kjs/nodes.h: Ditto.
        * kjs/nodes2string.cpp: Ditto.

2005-08-26  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by John.

        <rdar://problem/4224911> many many leaks in kjsyyparse with malformed Javascript        

        Record all nodes that are created during parsing, and delete any
        that are left floating with a refcount of 0.
        
        * kjs/internal.cpp:
        (KJS::Parser::saveNewNode):
        (KJS::clearNewNodes):
        (KJS::Parser::parse):
        * kjs/internal.h:
        * kjs/nodes.cpp:
        (Node::Node):
        * kjs/nodes.h:
        (KJS::Node::refcount):

2005-08-26  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by John.

        - fixed <rdar://problem/4232452> many many leaks in kjsyyparse on some well-formed JavaScript (can repro on sony.com, webkit tests)
        
        Fixed by changing the refcounting scheme for nodes. Instead of each node implementing a custom ref and
        deref for all its children (and being responsible for deleting them), nodes use a smart pointer to
        hold their children, and smart pointers are used outside the node tree as well. This change mostly
        removes code.
        
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * kjs/function.cpp:
        (KJS::DeclaredFunctionImp::DeclaredFunctionImp):
        (KJS::GlobalFuncImp::callAsFunction):
        * kjs/function.h:
        * kjs/function_object.cpp:
        (FunctionObjectImp::construct):
        * kjs/grammar.y:
        * kjs/internal.cpp:
        (KJS::Parser::parse):
        (KJS::Parser::accept):
        (KJS::InterpreterImp::checkSyntax):
        (KJS::InterpreterImp::evaluate):
        * kjs/internal.h:
        * kjs/nodes.cpp:
        (Node::Node):
        (Node::~Node):
        (ElementNode::evaluate):
        (PropertyValueNode::evaluate):
        (ArgumentListNode::evaluateList):
        (NewExprNode::evaluate):
        (FunctionCallValueNode::evaluate):
        (FunctionCallBracketNode::evaluate):
        (FunctionCallDotNode::evaluate):
        (RelationalNode::evaluate):
        (StatListNode::execute):
        (StatListNode::processVarDecls):
        (VarDeclListNode::evaluate):
        (VarDeclListNode::processVarDecls):
        (ForInNode::ForInNode):
        (ClauseListNode::processVarDecls):
        (CaseBlockNode::evalBlock):
        (FuncDeclNode::processFuncDecl):
        (FuncExprNode::evaluate):
        (SourceElementsNode::execute):
        (SourceElementsNode::processFuncDecl):
        (SourceElementsNode::processVarDecls):
        * kjs/nodes.h:
        (KJS::Node::ref):
        (KJS::Node::deref):
        (KJS::NumberNode::NumberNode):
        (KJS::GroupNode::GroupNode):
        (KJS::ElementNode::ElementNode):
        (KJS::ArrayNode::ArrayNode):
        (KJS::PropertyValueNode::PropertyValueNode):
        (KJS::ObjectLiteralNode::ObjectLiteralNode):
        (KJS::BracketAccessorNode::BracketAccessorNode):
        (KJS::DotAccessorNode::DotAccessorNode):
        (KJS::ArgumentListNode::ArgumentListNode):
        (KJS::ArgumentsNode::ArgumentsNode):
        (KJS::NewExprNode::NewExprNode):
        (KJS::FunctionCallValueNode::FunctionCallValueNode):
        (KJS::FunctionCallResolveNode::FunctionCallResolveNode):
        (KJS::FunctionCallBracketNode::FunctionCallBracketNode):
        (KJS::FunctionCallDotNode::FunctionCallDotNode):
        (KJS::PostfixNode::PostfixNode):
        (KJS::DeleteNode::DeleteNode):
        (KJS::VoidNode::VoidNode):
        (KJS::TypeOfNode::TypeOfNode):
        (KJS::PrefixNode::PrefixNode):
        (KJS::UnaryPlusNode::UnaryPlusNode):
        (KJS::NegateNode::NegateNode):
        (KJS::BitwiseNotNode::BitwiseNotNode):
        (KJS::LogicalNotNode::LogicalNotNode):
        (KJS::MultNode::MultNode):
        (KJS::AddNode::AddNode):
        (KJS::ShiftNode::ShiftNode):
        (KJS::RelationalNode::RelationalNode):
        (KJS::EqualNode::EqualNode):
        (KJS::BitOperNode::BitOperNode):
        (KJS::BinaryLogicalNode::BinaryLogicalNode):
        (KJS::ConditionalNode::ConditionalNode):
        (KJS::AssignResolveNode::AssignResolveNode):
        (KJS::AssignBracketNode::AssignBracketNode):
        (KJS::AssignDotNode::AssignDotNode):
        (KJS::CommaNode::CommaNode):
        (KJS::AssignExprNode::AssignExprNode):
        (KJS::VarDeclListNode::VarDeclListNode):
        (KJS::VarStatementNode::VarStatementNode):
        (KJS::ExprStatementNode::ExprStatementNode):
        (KJS::IfNode::IfNode):
        (KJS::DoWhileNode::DoWhileNode):
        (KJS::WhileNode::WhileNode):
        (KJS::ForNode::ForNode):
        (KJS::ReturnNode::ReturnNode):
        (KJS::WithNode::WithNode):
        (KJS::CaseClauseNode::CaseClauseNode):
        (KJS::ClauseListNode::ClauseListNode):
        (KJS::ClauseListNode::clause):
        (KJS::ClauseListNode::next):
        (KJS::SwitchNode::SwitchNode):
        (KJS::LabelNode::LabelNode):
        (KJS::ThrowNode::ThrowNode):
        (KJS::CatchNode::CatchNode):
        (KJS::FinallyNode::FinallyNode):
        (KJS::TryNode::TryNode):
        (KJS::ParameterNode::ParameterNode):
        (KJS::ParameterNode::nextParam):
        (KJS::FuncDeclNode::FuncDeclNode):
        (KJS::FuncExprNode::FuncExprNode):
        * kjs/nodes2string.cpp:
        (KJS::SourceStream::operator<<):
        (ElementNode::streamTo):
        (PropertyValueNode::streamTo):
        (ArgumentListNode::streamTo):
        (StatListNode::streamTo):
        (VarDeclListNode::streamTo):
        (CaseBlockNode::streamTo):
        (ParameterNode::streamTo):
        (SourceElementsNode::streamTo):
        * kjs/shared_ptr.h: Added.
        (kxmlcore::SharedPtr::SharedPtr):
        (kxmlcore::SharedPtr::~SharedPtr):
        (kxmlcore::SharedPtr::isNull):
        (kxmlcore::SharedPtr::notNull):
        (kxmlcore::SharedPtr::reset):
        (kxmlcore::SharedPtr::get):
        (kxmlcore::SharedPtr::operator*):
        (kxmlcore::SharedPtr::operator->):
        (kxmlcore::SharedPtr::operator!):
        (kxmlcore::SharedPtr::operator bool):
        (kxmlcore::SharedPtr::operator==):
        (kxmlcore::::operator):
        (kxmlcore::operator!=):
        (kxmlcore::static_pointer_cast):
        (kxmlcore::const_pointer_cast):

2005-08-26  Geoff Garen  <ggaren@apple.com>

        Reviewed by John.
        Landed by Darin.

        - fixed http://bugs.webkit.org/show_bug.cgi?id=4664
          TOT Crash from backwards null check in WebScriptObject.mm

        * bindings/objc/WebScriptObject.mm:
        (+[WebScriptObject _convertValueToObjcValue:originExecutionContext:executionContext:]):
        Remove bogus !.

2005-08-25  Darin Adler  <darin@apple.com>

        Reviewed by John Sullivan.

        - rename KJS::UString::string() to KJS::UString::domString()
        - rename KJS::Identifier::string() to KJS::Identifier::domString()

        * kjs/identifier.h: Renamed.
        * kjs/ustring.h: Ditto.

2005-08-19  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        - fixed http://bugs.webkit.org/show_bug.cgi?id=4435
          speed up JavaScript by tweaking the Identifier class

        * kjs/identifier.h: Add a new global nullIdentifier and make Identifier::null a function
        that returns it.
        * kjs/identifier.cpp: (KJS::Identifier::init): Initialize a global for the null identifier
        as well as all the other globals for special identifiers.

        * kjs/ustring.h: (KJS::UString::UString): Make this empty constructor inline.
        * kjs/ustring.cpp: Remove the old non-inline version.

2005-08-19  Mitz Pettel  <opendarwin.org@mitzpettel.com>

        Reviewed by Maciej.
        Revised and landed by Darin.

        - fixed http://bugs.webkit.org/show_bug.cgi?id=4474
          REGRESSION: Crash when using in-place operator on uninitialized array element

        * kjs/nodes.cpp:
        (AssignResolveNode::evaluate): Remove unneeded "isSet" assertion.
        (AssignBracketNode::evaluate): Replace code that tested "isSet" with code that
        tests the return value of getPropertySlot.

        * kjs/property_slot.h: Removed unneeded "isSet" function. Property slots are
        either uninitialized or set. There's no "initialized and not set" state.

2005-08-18  Adele Peterson  <adele@apple.com>

        Checked "Inline Functions Hidden" box

        * JavaScriptCore.xcodeproj/project.pbxproj:

2005-08-16  Darin Adler  <darin@apple.com>

        Reviewed by Geoff.

        - fixed crash in one of the JavaScript tests (introduced by my throwError change)

        * kjs/nodes.cpp: (Node::setExceptionDetailsIfNeeded): Check if the exception is an
        object before setting the file and line number properties on it. Something to think
        about in the future -- do we really want to do this on any object that's thrown?
        How about limiting it to error objects that were created by the JavaScript engine?

        - changed kjs_fast_malloc so we don't have two conflicting versions of the same function

        * kjs/fast_malloc.h: Took out all the ifdefs from this header.
        * kjs/fast_malloc.cpp: Added non-NDEBUG versions of the functions that just call
        the system malloc, and put the NDEBUG versions in an #else.

2005-08-16  Darin Adler  <darin@apple.com>

        Reviewed by Geoff.

        - clean up exported symbols that are not in a "KJS" namespace

        * bindings/NP_jsobject.cpp: (identiferFromNPIdentifier): Marked this function static
        so it no longer has external linkage.
        * bindings/c/c_utility.h: Put all this stuff inside the KJS namespace.
        * bindings/c/c_utility.cpp: Also marked some globals static so they don't have external
        linkage; not as important given the namespace.
        * bindings/npruntime.cpp: Marked functions static so they no longer have internal linkage.
        Also removed unused _NPN_SetExceptionWithUTF8 function (not in header, had C++ linkage!).

        * bindings/jni/jni_utility.cpp: (KJS::Bindings::getJavaVM): Call KJS_GetCreatedJavaVMs
        using the soft linking header, instead of calling the JNI call. This allows processes
        to link both JavaScriptCore and JavaVM without a symbol conflict.
        * bindings/softlinking.c:
        (loadFramework): Marked this function static so it no longer has external linkage.
        (getFunctionPointer): Ditto.
        (KJS_GetCreatedJavaVMs): Renamed this so it has a KJS prefix.

        * JavaScriptCore.xcodeproj/project.pbxproj: Added softlinking.h.
        * bindings/softlinking.h: Added.

        * kjs/nodes2string.cpp: (streamAssignmentOperatorTo): Marked this function static so it
        no longer has external linkage.

2005-08-15  Darin Adler  <darin@apple.com>

        Reviewed by Geoff.

        - fixed http://bugs.webkit.org/show_bug.cgi?id=4437
          clean up error creation with new throwError function

        * bindings/NP_jsobject.cpp:
        (_NPN_SetException):
        * bindings/jni/jni_instance.cpp:
        (JavaInstance::invokeMethod):
        * bindings/jni/jni_runtime.cpp:
        (JavaField::dispatchValueFromInstance):
        (JavaField::dispatchSetValueToInstance):
        * bindings/objc/WebScriptObject.mm:
        (-[WebScriptObject _initializeWithObjectImp:originExecutionContext:executionContext:]):
        (-[WebScriptObject _initWithObjectImp:originExecutionContext:executionContext:]):
        (+[WebScriptObject throwException:]):
        (-[WebScriptObject setException:]):
        (+[WebScriptObject _convertValueToObjcValue:originExecutionContext:executionContext:]):
        * bindings/objc/objc_class.h:
        (KJS::Bindings::ObjcClass::~ObjcClass):
        (KJS::Bindings::ObjcClass::ObjcClass):
        (KJS::Bindings::ObjcClass::operator=):
        (KJS::Bindings::ObjcClass::constructorAt):
        (KJS::Bindings::ObjcClass::numConstructors):
        * bindings/objc/objc_header.h:
        * bindings/objc/objc_runtime.h:
        (KJS::Bindings::ObjcField::~ObjcField):
        (KJS::Bindings::ObjcField::ObjcField):
        (KJS::Bindings::ObjcField::operator=):
        (KJS::Bindings::ObjcMethod::ObjcMethod):
        (KJS::Bindings::ObjcMethod::~ObjcMethod):
        (KJS::Bindings::ObjcMethod::operator=):
        * bindings/objc/objc_runtime.mm:
        (ObjcField::valueFromInstance):
        (ObjcField::setValueToInstance):
        (ObjcArray::setValueAt):
        (ObjcArray::valueAt):
        * bindings/objc/objc_utility.h:
        * bindings/objc/objc_utility.mm:
        (KJS::Bindings::JSMethodNameToObjCMethodName):
        (KJS::Bindings::convertValueToObjcValue):
        (KJS::Bindings::convertNSStringToString):
        (KJS::Bindings::convertObjcValueToValue):
        (KJS::Bindings::objcValueTypeForType):
        (KJS::Bindings::createObjcInstanceForValue):
        (KJS::Bindings::throwError):
        * bindings/runtime.h:
        (KJS::Bindings::Parameter::~Parameter):
        (KJS::Bindings::Method::~Method):
        (KJS::Bindings::Instance::Instance):
        (KJS::Bindings::Instance::begin):
        (KJS::Bindings::Instance::end):
        (KJS::Bindings::Instance::getValueOfUndefinedField):
        (KJS::Bindings::Instance::supportsSetValueOfUndefinedField):
        (KJS::Bindings::Instance::setValueOfUndefinedField):
        (KJS::Bindings::Instance::valueOf):
        * bindings/runtime_array.cpp:
        (RuntimeArrayImp::put):
        * bindings/runtime_object.h:
        (KJS::RuntimeObjectImp::setInternalInstance):
        (KJS::RuntimeObjectImp::getInternalInstance):
        * kjs/array_object.cpp:
        (getProperty):
        (ArrayProtoFuncImp::callAsFunction):
        (ArrayObjectImp::construct):
        * kjs/bool_object.cpp:
        (BooleanProtoFuncImp::callAsFunction):
        * kjs/date_object.cpp:
        (KJS::DateProtoFuncImp::callAsFunction):
        * kjs/function.cpp:
        (KJS::decode):
        (KJS::GlobalFuncImp::callAsFunction):
        * kjs/function_object.cpp:
        (FunctionProtoFuncImp::callAsFunction):
        (FunctionObjectImp::construct):
        * kjs/internal.cpp:
        (KJS::UndefinedImp::toObject):
        (KJS::NullImp::toObject):
        (KJS::InterpreterImp::evaluate):
        (KJS::InternalFunctionImp::hasInstance):
        * kjs/nodes.cpp:
        (Node::throwError):
        (substitute):
        (Node::setExceptionDetailsIfNeeded):
        (undefinedVariableError):
        (ProgramNode::ProgramNode):
        * kjs/number_object.cpp:
        (NumberProtoFuncImp::callAsFunction):
        * kjs/object.cpp:
        (KJS::ObjectImp::call):
        (KJS::ObjectImp::defaultValue):
        (KJS::Error::create):
        (KJS::throwError):
        * kjs/object.h:
        (KJS::ObjectImp::clearProperties):
        (KJS::ObjectImp::getPropertySlot):
        (KJS::ObjectImp::getOwnPropertySlot):
        * kjs/object_object.cpp:
        (ObjectProtoFuncImp::callAsFunction):
        * kjs/reference.cpp:
        (KJS::Reference::getBase):
        (KJS::Reference::getValue):
        (KJS::Reference::putValue):
        (KJS::Reference::deleteValue):
        * kjs/regexp_object.cpp:
        (RegExpProtoFuncImp::callAsFunction):
        (RegExpObjectImp::construct):
        * kjs/string_object.cpp:
        (StringProtoFuncImp::callAsFunction):

2005-08-15  Anders Carlsson  <andersca@mac.com>

        Reviewed by Darin.

        * tests/mozilla/ecma_3/Date/15.9.5.5.js:
        Remove the code which tests that Date.toLocaleString should be parsable
        by Date.parse. That is not true according to the spec.

2005-08-15  Darin Adler  <darin@apple.com>

        Reviewed by Geoff.

        * kjs/collector.cpp: (KJS::Collector::allocate): Use a local instead of a global in one
        more place; slight speedup.

2005-08-14  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        - fixed crash observed on one of the Apple-only layout tests

        * kjs/property_map.cpp: (KJS::PropertyMap::mark): Change code to understand that deleted
        entries have a value of NULL, so the deleted sentinel count doesn't need to be included
        in the count of things to mark since we're ignoring the keys.

2005-08-14  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        - fixed http://bugs.webkit.org/show_bug.cgi?id=4421
          speed up JavaScript by inlining some label stack functions

        * kjs/internal.h: Removed the copy constructor and assignment operator for LabelStack.
        They were unused, and the implementations had bugs; I removed them rather than fixing them.
        Also removed the clear function, since that was only needed to help the assignment operator
        share code with the destructor, and was not efficient enough for the destructor.
        (KJS::LabelStack::~LabelStack): Made this inline. Also used an efficient implementation
        that's nice and fast when the stack is empty, better than the old clear() function which
        used to keep updating and refetching "tos" each time through the loop.
        (KJS::LabelStack::pop): Made this inline.

        * kjs/internal.cpp: Deleted the now-inline functions and the obsolete functions. Also
        deleted a commented-out line of code.

2005-08-14  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        - fixed http://bugs.webkit.org/show_bug.cgi?id=4419
          speed up JavaScript by improving KJS::List

        my measurements show an improvement of 1% on iBench JavaScript

        * kjs/list.cpp: Rearrange list to make the values and free list share the same storage,
        which saves 4 bytes per list. Also remove the pointers used only on the heap from the
        lists that are in the pool, which saves 8 bytes per list. Moving the free list pointer
        closer to the start of the list object also speeds up access to the free list. New
        "HeapListImp" struct is used only for the lists on the heap.
        (KJS::List::markProtectedLists): Shadowed global variable in local and updated for the
        new terminology ("heap" instead of "outside pool").
        (KJS::allocateListImp): Updated for new terminology.
        (KJS::List::release): Moved the code from deallocateListImp in here -- it wasn't being
        inlined and didn't need to be in a separate function.

2005-08-14  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        - fixed http://bugs.webkit.org/show_bug.cgi?id=4417
          speed up JavaScript with some small changes to the property map code

        my measurements show an improvement of 2% on iBench JavaScript

        * kjs/property_map.h: (KJS::PropertyMap::PropertyMap): Made the default constructor inline.
        * kjs/property_map.cpp:
        (KJS::PropertyMap::~PropertyMap): Changed loop to exit early once we know we've processed
        all the hash table entries, based on the count.
        (KJS::PropertyMap::mark): Ditto.

        * kjs/object.h: Made an arbitrary change here to force recompiling so we pick up changes to
        property_map.h. Works around what seems to be an Xcode header dependency bug.

2005-08-14  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        - fixed http://bugs.webkit.org/show_bug.cgi?id=4416
          speed up JavaScript with some improvements to the garbage collector

        my measurements show an improvement of 2% on iBench JavaScript

        * kjs/collector.cpp:
        (KJS::Collector::allocate): Use local variables to shadow globals instead of repeatedly
        going at global variables. Tighten up loop implementations to make the common case fast.
        (KJS::Collector::markStackObjectsConservatively): Use local variables to shadow globals.
        Used a goto to eliminate a boolean since it was showing up in the profile.
        (KJS::Collector::markProtectedObjects): Iterate through the table using pointer rather
        than an index since the profile showed that generating better code.
        (KJS::Collector::collect): Added a special case for blocks where all cells are used,
        Use local variables to shadow globals. Eliminated a boolean by computing it another
        way (checking to see if the number of live objects changed). Also used local variables
        to shadow fields in the current cell when sweeping.
        (KJS::Collector::numReferencedObjects): Use AllocatedValueImp instead of ValueImp
        in one place -- means we get faster versions of various functions that don't worry
        about SimpleNumber.
        (KJS::className): Ditto.
        (KJS::Collector::rootObjectClasses): Ditto.

2005-08-14  Darin Adler  <darin@apple.com>

        - fixed http://bugs.webkit.org/show_bug.cgi?id=4344
          REGRESSION: JavaScript crash when going back from viewing a thread (NULL protoype)

        * kjs/error_object.cpp: (NativeErrorImp::NativeErrorImp): Set proto in a more
        straightforward way. The old code set the proto to 0 and then to the correct value.
        This showed up as a "false positive" when searching for places that set prototype
        to NULL/0 so I fixed it.

        * kjs/function_object.cpp: (FunctionPrototypeImp::FunctionPrototypeImp): Change to
        not pass an explicit "0" to the base class (InternalFunctionImp) constructor.

        * kjs/internal.h: Added a default constructor for InternalFunctionImp.
        * kjs/internal.cpp: (KJS::InternalFunctionImp::InternalFunctionImp): Added the
        default constructor (empty body, just calls base class's default constructor).

        * kjs/object.h:
        (KJS::ObjectImp::ObjectImp): Add an assertion to catch NULL prototypes earlier
        in Development builds.
        (KJS::ObjectImp::setPrototype): Ditto.

2005-08-12  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by John.

        - two simple speed improvements for a 3% speed gain
        
        * JavaScriptCore.xcodeproj/project.pbxproj: turn on -fstrict-aliasing

        * kjs/scope_chain.h:
        (KJS::ScopeChainIterator::ScopeChainIterator): Add a scope chain iterator
        so you can walk a scope chain without having to make a copy that you then mutate.
        (KJS::ScopeChainIterator::operator*): standard iterator operation
        (KJS::ScopeChainIterator::operator->): ditto
        (KJS::ScopeChainIterator::operator++): ditto
        (KJS::ScopeChainIterator::operator==): ditto
        (KJS::ScopeChainIterator::operator!=): ditto
        (KJS::ScopeChain::begin): Iterator for the top of the scope chain
        (KJS::ScopeChain::end): Iterator for one past the bottom (i.e. null)
        * kjs/nodes.cpp:
        (ResolveNode::evaluate): Use scope chain iterator instead of copying
        a scope chain and then modifying the copy
        (ResolveNode::evaluateReference): ditto
        (FunctionCallResolveNode::evaluate): ditto
        (AssignResolveNode::evaluate): ditto

2005-08-12  Maciej Stachowiak  <mjs@apple.com>

        Patch from Anders Carlsson, reviewed by me.

        * kjs/nodes.h: Fix build breakage.

2005-08-12  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by hyatt.

        - refactor function calls, 3% speedup on JS iBench.

        * kjs/grammar.y:
        * kjs/nodes.cpp:
        (Node::throwError): Added new useful variants.
        (FunctionCallValueNode::evaluate): New node to handle calls on expressions
        that are strictly values, not references.
        (FunctionCallValueNode::ref):  ditto
        (FunctionCallValueNode::deref): ditto
        (FunctionCallResolveNode::evaluate): New node to handle calls on identifier
        expressions, so that they are looked up in the scope chain.
        (FunctionCallResolveNode::ref): ditto
        (FunctionCallResolveNode::deref): ditto
        (FunctionCallBracketNode::evaluate): New node to handle calls on bracket
        dereferences, so that the expression before brackets is used as the this
        object.
        (FunctionCallBracketNode::ref): ditto
        (FunctionCallBracketNode::deref): ditto
        (FunctionCallDotNode::evaluate): New node to handle calls on dot
        dereferences, so that the expression before the dot is used as the this
        object.
        (FunctionCallDotNode::ref): ditto
        (FunctionCallDotNode::deref): ditto
        (dotExprNotAnObjectString): helper function to avoid global variable access.
        (dotExprDoesNotAllowCallsString): ditto
        * kjs/nodes.h: Declared new classes.
        * kjs/nodes2string.cpp:
        (FunctionCallValueNode::streamTo): Added - serializes the appropriate function call
        (FunctionCallResolveNode::streamTo): ditto
        (FunctionCallBracketNode::streamTo): ditto
        (FunctionCallParenBracketNode::streamTo): ditto
        (FunctionCallDotNode::streamTo): ditto
        (FunctionCallParenDotNode::streamTo): ditto
        * kjs/object.h:
        (KJS::ObjectImp::isActivation): Change how activation objects are
        detected in the scope chain, a virtual function is cheaper than the
        old inheritance test.
        * kjs/function.h:
        (KJS::ActivationImp::isActivation): Ditto.

2005-08-11  Maciej Stachowiak  <mjs@apple.com>

        - added missing file from earlier checkin

        * kjs/grammar_types.h: Added.
        (KJS::makeNodePair):
        (KJS::makeNodeWithIdent):

2005-08-11  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Geoff.

        * kjs/date_object.cpp:
        (timetUsingCF): Fix one of the date tests my making the CF version of mktime
        have the same quirk about the DST field as the real mktime.
        * tests/mozilla/expected.html: Updated for newly fixed test.

2005-08-11  Maciej Stachowiak  <mjs@apple.com>

        - updated for one of the tests that Darin incidentally fixed.

        * tests/mozilla/expected.html:

2005-08-10  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Geoff.

        Refactor assignment grammar to avoid Reference type, and to later
        be able to take advantage of writeable PropertySlots, when those
        are added. I also fixed a minor bug, turning a function to a
        string lost parentheses, I made sure they are printed at least
        where semantically significant.
        
        Test cases: see WebCore
        
        * kjs/grammar.y: Change grammar so that assignment expressions are parsed
        directly to nodes that know how to set the kind of location being assigned, instead
        of having a generic assign node that counts on evaluateReference.
        * kjs/lexer.cpp: Include grammar_types.h.
        * kjs/nodes.cpp:
        (BracketAccessorNode): Renamed from AccessorNode1 for clarity.
        (DotAccessorNode): Renamed from AccessorNode2 for clarity.
        (combineForAssignment): Inline function for doing the proper kind of
        operation for various update assignments like += or *=.
        (AssignResolveNode): Node that handles assignment to a bare identifier.
        (AssignDotNode): Node that handles assignments of the form EXPR . IDENT = EXPR
        (AssignBracketNode): EXPR [ IDENT ] = EXPR
        * kjs/nodes.h: Updated for declarations/renames of new classes.
        * kjs/nodes2string.cpp:
        (GroupNode::streamTo): Fixed to print parens around the expression.
        (BracketAccessorNode::streamTo): Renamed.
        (DotAccessorNode::streamTo): Renamed.
        (AssignResolveNode::streamTo): Added.
        (AssignBracketNode::streamTo): Added.
        (AssignDotNode::streamTo): Added.
        (streamAssignmentOperatorTo): helper function for the above
        * kjs/property_slot.h:
        (KJS::PropertySlot::isSet): Made this const.

2005-08-10  Adele Peterson  <adele@apple.com>

        Bumping version to 420+

        * Info.plist:

2005-08-10  Geoffrey Garen  <ggaren@apple.com>

        -fixed <rdar://problem/4151132> REGRESSION: Some applet liveconnect calls 
        throws privilege exception.
        
        Reviewed by richard and mjs.

        -I removed the global static JavaClass cache, since it violated Java
        security to cache classes between websites and applets.
        
        * bindings/jni/jni_class.cpp: 
            -removed global static cache dictionary
            -instance constructor and destructor now do the work that used to 
            be done by static factory methods
            -removed obsolete functions
        (JavaClass::JavaClass):
        (JavaClass::~JavaClass):
        * bindings/jni/jni_class.h:
            -removed obsolete function declarations
            -made copying private since it's unused and it's also not clear
            excatly how copying would work with Java security
            -made default construction private since it's meaningless
        * bindings/jni/jni_instance.cpp:
            -removed obsolete functions
        (JavaInstance::~JavaInstance):
        (JavaInstance::getClass):
        * bindings/jni/jni_instance.h:
           -made copying private since it's unused and it's also not clear
            excatly how copying would work with Java security
            -made default construction private since it's meaningless

2005-08-08  Geoffrey Garen  <ggaren@apple.com>

        -fixed crash caused by fix for http://bugs.webkit.org/show_bug.cgi?id=4313
        
        - exceptionDescription now gets explicitly initialized to NULL in all
        the places listed below -- our wrapper classes used to take care of this 
        automagically
        
        * bindings/jni/jni_instance.cpp:
        (JavaInstance::invokeMethod):
        * bindings/jni/jni_runtime.cpp:
        (JavaField::dispatchValueFromInstance):
        (JavaField::dispatchSetValueToInstance):

2005-08-08  Darin Adler  <darin@apple.com>

        Reviewed by John Sullivan.

        - fixed http://bugs.webkit.org/show_bug.cgi?id=4325
          Mozilla Date tests have an unnecessary loop that runs 1970 times before each test

        * tests/mozilla/ecma/shell.js: Added TIME_YEAR_0 constant.

        * tests/mozilla/ecma/Date/15.9.5.10-1.js: Removed the loop and changed code to use the constant.
        * tests/mozilla/ecma/Date/15.9.5.10-10.js: Ditto.
        * tests/mozilla/ecma/Date/15.9.5.10-11.js: Ditto.
        * tests/mozilla/ecma/Date/15.9.5.10-12.js: Ditto.
        * tests/mozilla/ecma/Date/15.9.5.10-13.js: Ditto.
        * tests/mozilla/ecma/Date/15.9.5.10-2.js: Ditto.
        * tests/mozilla/ecma/Date/15.9.5.10-3.js: Ditto.
        * tests/mozilla/ecma/Date/15.9.5.10-4.js: Ditto.
        * tests/mozilla/ecma/Date/15.9.5.10-5.js: Ditto.
        * tests/mozilla/ecma/Date/15.9.5.10-6.js: Ditto.
        * tests/mozilla/ecma/Date/15.9.5.10-7.js: Ditto.
        * tests/mozilla/ecma/Date/15.9.5.10-8.js: Ditto.
        * tests/mozilla/ecma/Date/15.9.5.10-9.js: Ditto.
        * tests/mozilla/ecma/Date/15.9.5.11-2.js: Ditto.
        * tests/mozilla/ecma/Date/15.9.5.12-1.js: Ditto.
        * tests/mozilla/ecma/Date/15.9.5.12-2.js: Ditto.
        * tests/mozilla/ecma/Date/15.9.5.12-3.js: Ditto.
        * tests/mozilla/ecma/Date/15.9.5.12-4.js: Ditto.
        * tests/mozilla/ecma/Date/15.9.5.12-5.js: Ditto.
        * tests/mozilla/ecma/Date/15.9.5.12-6.js: Ditto.
        * tests/mozilla/ecma/Date/15.9.5.12-7.js: Ditto.
        * tests/mozilla/ecma/Date/15.9.5.12-8.js: Ditto.
        * tests/mozilla/ecma/Date/15.9.5.13-2.js: Ditto.
        * tests/mozilla/ecma/Date/15.9.5.13-8.js: Ditto.
        * tests/mozilla/ecma/Date/15.9.5.14.js: Ditto.
        * tests/mozilla/ecma/Date/15.9.5.15.js: Ditto.
        * tests/mozilla/ecma/Date/15.9.5.16.js: Ditto.
        * tests/mozilla/ecma/Date/15.9.5.17.js: Ditto.
        * tests/mozilla/ecma/Date/15.9.5.18.js: Ditto.
        * tests/mozilla/ecma/Date/15.9.5.19.js: Ditto.
        * tests/mozilla/ecma/Date/15.9.5.20.js: Ditto.
        * tests/mozilla/ecma/Date/15.9.5.21-1.js: Ditto.
        * tests/mozilla/ecma/Date/15.9.5.21-2.js: Ditto.
        * tests/mozilla/ecma/Date/15.9.5.21-3.js: Ditto.
        * tests/mozilla/ecma/Date/15.9.5.21-4.js: Ditto.
        * tests/mozilla/ecma/Date/15.9.5.21-5.js: Ditto.
        * tests/mozilla/ecma/Date/15.9.5.21-6.js: Ditto.
        * tests/mozilla/ecma/Date/15.9.5.21-7.js: Ditto.
        * tests/mozilla/ecma/Date/15.9.5.21-8.js: Ditto.
        * tests/mozilla/ecma/Date/15.9.5.22-1.js: Ditto.
        * tests/mozilla/ecma/Date/15.9.5.22-2.js: Ditto.
        * tests/mozilla/ecma/Date/15.9.5.22-3.js: Ditto.
        * tests/mozilla/ecma/Date/15.9.5.22-4.js: Ditto.
        * tests/mozilla/ecma/Date/15.9.5.22-5.js: Ditto.
        * tests/mozilla/ecma/Date/15.9.5.22-6.js: Ditto.
        * tests/mozilla/ecma/Date/15.9.5.22-7.js: Ditto.
        * tests/mozilla/ecma/Date/15.9.5.22-8.js: Ditto.
        * tests/mozilla/ecma/Date/15.9.5.23-4.js: Ditto.
        * tests/mozilla/ecma/Date/15.9.5.23-5.js: Ditto.
        * tests/mozilla/ecma/Date/15.9.5.23-6.js: Ditto.
        * tests/mozilla/ecma/Date/15.9.5.23-7.js: Ditto.
        * tests/mozilla/ecma/Date/15.9.5.23-8.js: Ditto.
        * tests/mozilla/ecma/Date/15.9.5.23-9.js: Ditto.
        * tests/mozilla/ecma/Date/15.9.5.5.js: Ditto.
        * tests/mozilla/ecma/Date/15.9.5.6.js: Ditto.
        * tests/mozilla/ecma/Date/15.9.5.7.js: Ditto.
        * tests/mozilla/ecma/Date/15.9.5.8.js: Ditto.
        * tests/mozilla/ecma/Date/15.9.5.9.js: Ditto.

2005-08-08  Darin Adler  <darin@apple.com>

        - forgot to delete an obsolete file

        * kjs/object_wrapper.h: Deleted.

2005-08-07  Darin Adler  <darin@apple.com>

        - fixed two problems compiling with gcc 4.0

        * kjs/array_object.cpp: (ArrayProtoFuncImp::callAsFunction): Initialized a
        variable to quiet an erroneous warning.
        * kjs/date_object.cpp: (KJS::makeTime): Removed extraneous KJS:: prefix.

2005-08-07  Darin Adler  <darin@apple.com>

        Rubber stamped by Maciej.

        - fixed http://bugs.webkit.org/show_bug.cgi?id=4313
          eliminate KJS::Value and KJS::Object smart pointer wrappers (for simplicity and speed)

        * JavaScriptCore.xcodeproj/project.pbxproj: Removed object_wrapper.h.

        Global replaces and other wonderful stuff.

        * bindings/NP_jsobject.cpp:
        (_NPN_Invoke):
        (_NPN_Evaluate):
        (_NPN_GetProperty):
        (_NPN_SetProperty):
        (_NPN_HasMethod):
        (_NPN_SetException):
        * bindings/c/c_instance.cpp:
        (KJS::Bindings::CInstance::CInstance):
        (KJS::Bindings::CInstance::invokeMethod):
        (KJS::Bindings::CInstance::invokeDefaultMethod):
        (KJS::Bindings::CInstance::defaultValue):
        (KJS::Bindings::CInstance::stringValue):
        (KJS::Bindings::CInstance::numberValue):
        (KJS::Bindings::CInstance::booleanValue):
        (KJS::Bindings::CInstance::valueOf):
        * bindings/c/c_instance.h:
        * bindings/c/c_runtime.cpp:
        (CField::valueFromInstance):
        (CField::setValueToInstance):
        * bindings/c/c_runtime.h:
        * bindings/c/c_utility.cpp:
        (convertNPStringToUTF16):
        (convertUTF8ToUTF16):
        (coerceValueToNPVariantStringType):
        (convertValueToNPVariant):
        (convertNPVariantToValue):
        * bindings/c/c_utility.h:
        * bindings/jni/jni_instance.cpp:
        (JavaInstance::stringValue):
        (JavaInstance::numberValue):
        (JavaInstance::booleanValue):
        (JavaInstance::invokeMethod):
        (JavaInstance::invokeDefaultMethod):
        (JavaInstance::defaultValue):
        (JavaInstance::valueOf):
        * bindings/jni/jni_instance.h:
        * bindings/jni/jni_jsobject.cpp:
        (JSObject::invoke):
        (JSObject::call):
        (JSObject::eval):
        (JSObject::getMember):
        (JSObject::getSlot):
        (JSObject::toString):
        (JSObject::convertValueToJObject):
        (JSObject::convertJObjectToValue):
        (JSObject::listFromJArray):
        * bindings/jni/jni_jsobject.h:
        * bindings/jni/jni_objc.mm:
        (KJS::Bindings::dispatchJNICall):
        * bindings/jni/jni_runtime.cpp:
        (JavaArray::convertJObjectToArray):
        (JavaField::dispatchValueFromInstance):
        (JavaField::valueFromInstance):
        (JavaField::dispatchSetValueToInstance):
        (JavaField::setValueToInstance):
        (JavaArray::setValueAt):
        (JavaArray::valueAt):
        * bindings/jni/jni_runtime.h:
        (KJS::Bindings::JavaString::ustring):
        * bindings/jni/jni_utility.cpp:
        (KJS::Bindings::getJavaVM):
        (KJS::Bindings::getJNIEnv):
        (KJS::Bindings::getMethodID):
        (KJS::Bindings::callJNIVoidMethod):
        (KJS::Bindings::callJNIObjectMethod):
        (KJS::Bindings::callJNIBooleanMethod):
        (KJS::Bindings::callJNIStaticBooleanMethod):
        (KJS::Bindings::callJNIByteMethod):
        (KJS::Bindings::callJNICharMethod):
        (KJS::Bindings::callJNIShortMethod):
        (KJS::Bindings::callJNIIntMethod):
        (KJS::Bindings::callJNILongMethod):
        (KJS::Bindings::callJNIFloatMethod):
        (KJS::Bindings::callJNIDoubleMethod):
        (KJS::Bindings::callJNIVoidMethodA):
        (KJS::Bindings::callJNIObjectMethodA):
        (KJS::Bindings::callJNIByteMethodA):
        (KJS::Bindings::callJNICharMethodA):
        (KJS::Bindings::callJNIShortMethodA):
        (KJS::Bindings::callJNIIntMethodA):
        (KJS::Bindings::callJNILongMethodA):
        (KJS::Bindings::callJNIFloatMethodA):
        (KJS::Bindings::callJNIDoubleMethodA):
        (KJS::Bindings::callJNIBooleanMethodA):
        (KJS::Bindings::callJNIVoidMethodIDA):
        (KJS::Bindings::callJNIObjectMethodIDA):
        (KJS::Bindings::callJNIByteMethodIDA):
        (KJS::Bindings::callJNICharMethodIDA):
        (KJS::Bindings::callJNIShortMethodIDA):
        (KJS::Bindings::callJNIIntMethodIDA):
        (KJS::Bindings::callJNILongMethodIDA):
        (KJS::Bindings::callJNIFloatMethodIDA):
        (KJS::Bindings::callJNIDoubleMethodIDA):
        (KJS::Bindings::callJNIBooleanMethodIDA):
        (KJS::Bindings::getCharactersFromJString):
        (KJS::Bindings::releaseCharactersForJString):
        (KJS::Bindings::getCharactersFromJStringInEnv):
        (KJS::Bindings::releaseCharactersForJStringInEnv):
        (KJS::Bindings::getUCharactersFromJStringInEnv):
        (KJS::Bindings::releaseUCharactersForJStringInEnv):
        (KJS::Bindings::JNITypeFromClassName):
        (KJS::Bindings::signatureFromPrimitiveType):
        (KJS::Bindings::JNITypeFromPrimitiveType):
        (KJS::Bindings::getJNIField):
        (KJS::Bindings::convertValueToJValue):
        * bindings/jni/jni_utility.h:
        * bindings/objc/WebScriptObject.mm:
        (_didExecute):
        (-[WebScriptObject _initializeWithObjectImp:originExecutionContext:Bindings::executionContext:Bindings::]):
        (-[WebScriptObject _initWithObjectImp:originExecutionContext:Bindings::executionContext:Bindings::]):
        (-[WebScriptObject _imp]):
        (-[WebScriptObject _executionContext]):
        (-[WebScriptObject _setExecutionContext:]):
        (-[WebScriptObject _originExecutionContext]):
        (-[WebScriptObject _setOriginExecutionContext:]):
        (+[WebScriptObject throwException:]):
        (listFromNSArray):
        (-[WebScriptObject callWebScriptMethod:withArguments:]):
        (-[WebScriptObject evaluateWebScript:]):
        (-[WebScriptObject setValue:forKey:]):
        (-[WebScriptObject valueForKey:]):
        (-[WebScriptObject removeWebScriptKey:]):
        (-[WebScriptObject stringRepresentation]):
        (-[WebScriptObject webScriptValueAtIndex:]):
        (-[WebScriptObject setException:]):
        (+[WebScriptObject _convertValueToObjcValue:originExecutionContext:executionContext:Bindings::]):
        * bindings/objc/WebScriptObjectPrivate.h:
        * bindings/objc/objc_class.h:
        * bindings/objc/objc_class.mm:
        (KJS::Bindings::ObjcClass::fallbackObject):
        * bindings/objc/objc_instance.h:
        * bindings/objc/objc_instance.mm:
        (ObjcInstance::invokeMethod):
        (ObjcInstance::invokeDefaultMethod):
        (ObjcInstance::setValueOfField):
        (ObjcInstance::setValueOfUndefinedField):
        (ObjcInstance::getValueOfField):
        (ObjcInstance::getValueOfUndefinedField):
        (ObjcInstance::defaultValue):
        (ObjcInstance::stringValue):
        (ObjcInstance::numberValue):
        (ObjcInstance::booleanValue):
        (ObjcInstance::valueOf):
        * bindings/objc/objc_runtime.h:
        * bindings/objc/objc_runtime.mm:
        (ObjcField::valueFromInstance):
        (convertValueToObjcObject):
        (ObjcField::setValueToInstance):
        (ObjcArray::setValueAt):
        (ObjcArray::valueAt):
        (ObjcFallbackObjectImp::put):
        (ObjcFallbackObjectImp::callAsFunction):
        (ObjcFallbackObjectImp::defaultValue):
        * bindings/objc/objc_utility.h:
        * bindings/objc/objc_utility.mm:
        (Bindings::JSMethodNameToObjCMethodName):
        (Bindings::convertValueToObjcValue):
        (Bindings::convertNSStringToString):
        (Bindings::convertObjcValueToValue):
        (Bindings::objcValueTypeForType):
        (Bindings::createObjcInstanceForValue):
        * bindings/runtime.cpp:
        (Instance::getValueOfField):
        (Instance::setValueOfField):
        (Instance::createRuntimeObject):
        (Instance::createLanguageInstanceForValue):
        * bindings/runtime.h:
        (KJS::Bindings::Constructor::~Constructor):
        (KJS::Bindings::Field::~Field):
        (KJS::Bindings::MethodList::MethodList):
        (KJS::Bindings::Class::fallbackObject):
        (KJS::Bindings::Class::~Class):
        (KJS::Bindings::Instance::Instance):
        (KJS::Bindings::Instance::getValueOfUndefinedField):
        (KJS::Bindings::Instance::supportsSetValueOfUndefinedField):
        (KJS::Bindings::Instance::setValueOfUndefinedField):
        (KJS::Bindings::Instance::valueOf):
        (KJS::Bindings::Instance::setExecutionContext):
        (KJS::Bindings::Instance::~Instance):
        (KJS::Bindings::Array::~Array):
        * bindings/runtime_array.cpp:
        (RuntimeArrayImp::RuntimeArrayImp):
        (RuntimeArrayImp::lengthGetter):
        (RuntimeArrayImp::indexGetter):
        (RuntimeArrayImp::put):
        * bindings/runtime_array.h:
        * bindings/runtime_method.cpp:
        (RuntimeMethodImp::lengthGetter):
        (RuntimeMethodImp::callAsFunction):
        * bindings/runtime_method.h:
        * bindings/runtime_object.cpp:
        (RuntimeObjectImp::fallbackObjectGetter):
        (RuntimeObjectImp::fieldGetter):
        (RuntimeObjectImp::methodGetter):
        (RuntimeObjectImp::getOwnPropertySlot):
        (RuntimeObjectImp::put):
        (RuntimeObjectImp::defaultValue):
        (RuntimeObjectImp::callAsFunction):
        * bindings/runtime_object.h:
        * kjs/array_instance.h:
        * kjs/array_object.cpp:
        (ArrayInstanceImp::ArrayInstanceImp):
        (ArrayInstanceImp::lengthGetter):
        (ArrayInstanceImp::getOwnPropertySlot):
        (ArrayInstanceImp::put):
        (ArrayInstanceImp::propList):
        (ArrayInstanceImp::setLength):
        (compareByStringForQSort):
        (compareWithCompareFunctionForQSort):
        (ArrayInstanceImp::sort):
        (ArrayInstanceImp::pushUndefinedObjectsToEnd):
        (ArrayPrototypeImp::ArrayPrototypeImp):
        (ArrayProtoFuncImp::ArrayProtoFuncImp):
        (ArrayProtoFuncImp::callAsFunction):
        (ArrayObjectImp::ArrayObjectImp):
        (ArrayObjectImp::construct):
        (ArrayObjectImp::callAsFunction):
        * kjs/array_object.h:
        * kjs/bool_object.cpp:
        (BooleanPrototypeImp::BooleanPrototypeImp):
        (BooleanProtoFuncImp::BooleanProtoFuncImp):
        (BooleanProtoFuncImp::callAsFunction):
        (BooleanObjectImp::BooleanObjectImp):
        (BooleanObjectImp::construct):
        (BooleanObjectImp::callAsFunction):
        * kjs/bool_object.h:
        * kjs/collector.cpp:
        (KJS::Collector::markStackObjectsConservatively):
        (KJS::Collector::collect):
        (KJS::className):
        * kjs/completion.h:
        (KJS::Completion::Completion):
        (KJS::Completion::value):
        (KJS::Completion::isValueCompletion):
        * kjs/context.h:
        (KJS::ContextImp::variableObject):
        (KJS::ContextImp::setVariableObject):
        (KJS::ContextImp::thisValue):
        (KJS::ContextImp::activationObject):
        (KJS::ContextImp::pushScope):
        * kjs/date_object.cpp:
        (formatLocaleDate):
        (KJS::timeFromArgs):
        (KJS::DatePrototypeImp::DatePrototypeImp):
        (KJS::DateProtoFuncImp::DateProtoFuncImp):
        (KJS::DateProtoFuncImp::callAsFunction):
        (KJS::DateObjectImp::DateObjectImp):
        (KJS::DateObjectImp::construct):
        (KJS::DateObjectImp::callAsFunction):
        (KJS::DateObjectFuncImp::DateObjectFuncImp):
        (KJS::DateObjectFuncImp::callAsFunction):
        (KJS::parseDate):
        (KJS::KRFCDate_parseDate):
        (KJS::timeClip):
        * kjs/date_object.h:
        * kjs/debugger.cpp:
        (Debugger::exception):
        (Debugger::callEvent):
        (Debugger::returnEvent):
        * kjs/debugger.h:
        * kjs/error_object.cpp:
        (ErrorPrototypeImp::ErrorPrototypeImp):
        (ErrorProtoFuncImp::ErrorProtoFuncImp):
        (ErrorProtoFuncImp::callAsFunction):
        (ErrorObjectImp::ErrorObjectImp):
        (ErrorObjectImp::construct):
        (ErrorObjectImp::callAsFunction):
        (NativeErrorPrototypeImp::NativeErrorPrototypeImp):
        (NativeErrorImp::NativeErrorImp):
        (NativeErrorImp::construct):
        (NativeErrorImp::callAsFunction):
        * kjs/error_object.h:
        * kjs/function.cpp:
        (KJS::FunctionImp::FunctionImp):
        (KJS::FunctionImp::callAsFunction):
        (KJS::FunctionImp::processParameters):
        (KJS::FunctionImp::argumentsGetter):
        (KJS::FunctionImp::lengthGetter):
        (KJS::FunctionImp::put):
        (KJS::DeclaredFunctionImp::DeclaredFunctionImp):
        (KJS::DeclaredFunctionImp::construct):
        (KJS::ArgumentsImp::ArgumentsImp):
        (KJS::ArgumentsImp::mappedIndexGetter):
        (KJS::ArgumentsImp::put):
        (KJS::ActivationImp::argumentsGetter):
        (KJS::GlobalFuncImp::GlobalFuncImp):
        (KJS::encode):
        (KJS::decode):
        (KJS::GlobalFuncImp::callAsFunction):
        * kjs/function.h:
        * kjs/function_object.cpp:
        (FunctionPrototypeImp::FunctionPrototypeImp):
        (FunctionPrototypeImp::callAsFunction):
        (FunctionProtoFuncImp::FunctionProtoFuncImp):
        (FunctionProtoFuncImp::callAsFunction):
        (FunctionObjectImp::FunctionObjectImp):
        (FunctionObjectImp::construct):
        (FunctionObjectImp::callAsFunction):
        * kjs/function_object.h:
        * kjs/internal.cpp:
        (KJS::UndefinedImp::toPrimitive):
        (KJS::UndefinedImp::toObject):
        (KJS::NullImp::toPrimitive):
        (KJS::NullImp::toObject):
        (KJS::BooleanImp::toPrimitive):
        (KJS::BooleanImp::toObject):
        (KJS::StringImp::toPrimitive):
        (KJS::StringImp::toObject):
        (KJS::NumberImp::toPrimitive):
        (KJS::NumberImp::toObject):
        (KJS::NumberImp::getUInt32):
        (KJS::LabelStack::push):
        (KJS::ContextImp::ContextImp):
        (KJS::InterpreterImp::globalInit):
        (KJS::InterpreterImp::globalClear):
        (KJS::InterpreterImp::InterpreterImp):
        (KJS::InterpreterImp::initGlobalObject):
        (KJS::InterpreterImp::clear):
        (KJS::InterpreterImp::mark):
        (KJS::InterpreterImp::evaluate):
        (KJS::InternalFunctionImp::hasInstance):
        (KJS::roundValue):
        (KJS::printInfo):
        * kjs/internal.h:
        (KJS::InterpreterImp::builtinObject):
        (KJS::InterpreterImp::builtinFunction):
        (KJS::InterpreterImp::builtinArray):
        (KJS::InterpreterImp::builtinBoolean):
        (KJS::InterpreterImp::builtinString):
        (KJS::InterpreterImp::builtinNumber):
        (KJS::InterpreterImp::builtinDate):
        (KJS::InterpreterImp::builtinRegExp):
        (KJS::InterpreterImp::builtinError):
        (KJS::InterpreterImp::builtinObjectPrototype):
        (KJS::InterpreterImp::builtinFunctionPrototype):
        (KJS::InterpreterImp::builtinArrayPrototype):
        (KJS::InterpreterImp::builtinBooleanPrototype):
        (KJS::InterpreterImp::builtinStringPrototype):
        (KJS::InterpreterImp::builtinNumberPrototype):
        (KJS::InterpreterImp::builtinDatePrototype):
        (KJS::InterpreterImp::builtinRegExpPrototype):
        (KJS::InterpreterImp::builtinErrorPrototype):
        (KJS::InterpreterImp::builtinEvalError):
        (KJS::InterpreterImp::builtinRangeError):
        (KJS::InterpreterImp::builtinReferenceError):
        (KJS::InterpreterImp::builtinSyntaxError):
        (KJS::InterpreterImp::builtinTypeError):
        (KJS::InterpreterImp::builtinURIError):
        (KJS::InterpreterImp::builtinEvalErrorPrototype):
        (KJS::InterpreterImp::builtinRangeErrorPrototype):
        (KJS::InterpreterImp::builtinReferenceErrorPrototype):
        (KJS::InterpreterImp::builtinSyntaxErrorPrototype):
        (KJS::InterpreterImp::builtinTypeErrorPrototype):
        (KJS::InterpreterImp::builtinURIErrorPrototype):
        * kjs/interpreter.cpp:
        (Context::variableObject):
        (Context::thisValue):
        (Interpreter::Interpreter):
        (Interpreter::globalObject):
        (Interpreter::evaluate):
        (Interpreter::builtinObject):
        (Interpreter::builtinFunction):
        (Interpreter::builtinArray):
        (Interpreter::builtinBoolean):
        (Interpreter::builtinString):
        (Interpreter::builtinNumber):
        (Interpreter::builtinDate):
        (Interpreter::builtinRegExp):
        (Interpreter::builtinError):
        (Interpreter::builtinObjectPrototype):
        (Interpreter::builtinFunctionPrototype):
        (Interpreter::builtinArrayPrototype):
        (Interpreter::builtinBooleanPrototype):
        (Interpreter::builtinStringPrototype):
        (Interpreter::builtinNumberPrototype):
        (Interpreter::builtinDatePrototype):
        (Interpreter::builtinRegExpPrototype):
        (Interpreter::builtinErrorPrototype):
        (Interpreter::builtinEvalError):
        (Interpreter::builtinRangeError):
        (Interpreter::builtinReferenceError):
        (Interpreter::builtinSyntaxError):
        (Interpreter::builtinTypeError):
        (Interpreter::builtinURIError):
        (Interpreter::builtinEvalErrorPrototype):
        (Interpreter::builtinRangeErrorPrototype):
        (Interpreter::builtinReferenceErrorPrototype):
        (Interpreter::builtinSyntaxErrorPrototype):
        (Interpreter::builtinTypeErrorPrototype):
        (Interpreter::builtinURIErrorPrototype):
        (Interpreter::createLanguageInstanceForValue):
        * kjs/interpreter.h:
        (KJS::Interpreter::isGlobalObject):
        (KJS::ExecState::setException):
        (KJS::ExecState::clearException):
        (KJS::ExecState::exception):
        (KJS::ExecState::hadException):
        (KJS::ExecState::ExecState):
        * kjs/list.cpp:
        (KJS::List::at):
        * kjs/list.h:
        (KJS::List::operator[]):
        (KJS::ListIterator::operator->):
        (KJS::ListIterator::operator*):
        (KJS::ListIterator::operator++):
        (KJS::ListIterator::operator--):
        * kjs/lookup.h:
        (KJS::staticFunctionGetter):
        (KJS::staticValueGetter):
        (KJS::lookupPut):
        (KJS::cacheGlobalObject):
        * kjs/math_object.cpp:
        (MathObjectImp::getValueProperty):
        (MathFuncImp::MathFuncImp):
        (MathFuncImp::callAsFunction):
        * kjs/math_object.h:
        * kjs/nodes.cpp:
        (Node::evaluateReference):
        (Node::throwError):
        (Node::setExceptionDetailsIfNeeded):
        (NullNode::evaluate):
        (BooleanNode::evaluate):
        (NumberNode::evaluate):
        (StringNode::evaluate):
        (RegExpNode::evaluate):
        (ThisNode::evaluate):
        (ResolveNode::evaluate):
        (ResolveNode::evaluateReference):
        (GroupNode::evaluate):
        (ElementNode::evaluate):
        (ArrayNode::evaluate):
        (ObjectLiteralNode::evaluate):
        (PropertyValueNode::evaluate):
        (PropertyNode::evaluate):
        (AccessorNode1::evaluate):
        (AccessorNode1::evaluateReference):
        (AccessorNode2::evaluate):
        (AccessorNode2::evaluateReference):
        (ArgumentListNode::evaluate):
        (ArgumentListNode::evaluateList):
        (ArgumentsNode::evaluate):
        (NewExprNode::evaluate):
        (FunctionCallNode::evaluate):
        (PostfixNode::evaluate):
        (DeleteNode::evaluate):
        (VoidNode::evaluate):
        (TypeOfNode::evaluate):
        (PrefixNode::evaluate):
        (UnaryPlusNode::evaluate):
        (NegateNode::evaluate):
        (BitwiseNotNode::evaluate):
        (LogicalNotNode::evaluate):
        (MultNode::evaluate):
        (AddNode::evaluate):
        (ShiftNode::evaluate):
        (RelationalNode::evaluate):
        (EqualNode::evaluate):
        (BitOperNode::evaluate):
        (BinaryLogicalNode::evaluate):
        (ConditionalNode::evaluate):
        (AssignNode::evaluate):
        (CommaNode::evaluate):
        (StatListNode::execute):
        (AssignExprNode::evaluate):
        (VarDeclNode::evaluate):
        (VarDeclNode::processVarDecls):
        (VarDeclListNode::evaluate):
        (ExprStatementNode::execute):
        (IfNode::execute):
        (DoWhileNode::execute):
        (WhileNode::execute):
        (ForNode::execute):
        (ForInNode::execute):
        (ContinueNode::execute):
        (BreakNode::execute):
        (ReturnNode::execute):
        (WithNode::execute):
        (CaseClauseNode::evaluate):
        (ClauseListNode::evaluate):
        (CaseBlockNode::evaluate):
        (CaseBlockNode::evalBlock):
        (SwitchNode::execute):
        (ThrowNode::execute):
        (CatchNode::execute):
        (TryNode::execute):
        (ParameterNode::evaluate):
        (FuncDeclNode::processFuncDecl):
        (FuncExprNode::evaluate):
        (SourceElementsNode::execute):
        * kjs/nodes.h:
        (KJS::StatementNode::evaluate):
        * kjs/number_object.cpp:
        (NumberPrototypeImp::NumberPrototypeImp):
        (NumberProtoFuncImp::NumberProtoFuncImp):
        (NumberProtoFuncImp::callAsFunction):
        (NumberObjectImp::NumberObjectImp):
        (NumberObjectImp::getValueProperty):
        (NumberObjectImp::construct):
        (NumberObjectImp::callAsFunction):
        * kjs/number_object.h:
        * kjs/object.cpp:
        (KJS::ObjectImp::call):
        (KJS::ObjectImp::mark):
        (KJS::ObjectImp::classInfo):
        (KJS::ObjectImp::get):
        (KJS::ObjectImp::getProperty):
        (KJS::ObjectImp::getPropertySlot):
        (KJS::ObjectImp::put):
        (KJS::ObjectImp::hasOwnProperty):
        (KJS::ObjectImp::defaultValue):
        (KJS::ObjectImp::findPropertyHashEntry):
        (KJS::ObjectImp::construct):
        (KJS::ObjectImp::callAsFunction):
        (KJS::ObjectImp::hasInstance):
        (KJS::ObjectImp::propList):
        (KJS::ObjectImp::toPrimitive):
        (KJS::ObjectImp::toNumber):
        (KJS::ObjectImp::toString):
        (KJS::ObjectImp::toObject):
        (KJS::ObjectImp::putDirect):
        (KJS::Error::create):
        (KJS::error):
        * kjs/object.h:
        (KJS::):
        (KJS::ObjectImp::getPropertySlot):
        (KJS::AllocatedValueImp::isObject):
        (KJS::ObjectImp::ObjectImp):
        (KJS::ObjectImp::internalValue):
        (KJS::ObjectImp::setInternalValue):
        (KJS::ObjectImp::prototype):
        (KJS::ObjectImp::setPrototype):
        (KJS::ObjectImp::inherits):
        * kjs/object_object.cpp:
        (ObjectPrototypeImp::ObjectPrototypeImp):
        (ObjectProtoFuncImp::ObjectProtoFuncImp):
        (ObjectProtoFuncImp::callAsFunction):
        (ObjectObjectImp::ObjectObjectImp):
        (ObjectObjectImp::construct):
        (ObjectObjectImp::callAsFunction):
        * kjs/object_object.h:
        * kjs/operations.cpp:
        (KJS::equal):
        (KJS::strictEqual):
        (KJS::relation):
        (KJS::add):
        (KJS::mult):
        * kjs/operations.h:
        * kjs/property_map.cpp:
        (KJS::PropertyMap::mark):
        (KJS::PropertyMap::addEnumerablesToReferenceList):
        (KJS::PropertyMap::addSparseArrayPropertiesToReferenceList):
        (KJS::PropertyMap::save):
        (KJS::PropertyMap::restore):
        * kjs/property_map.h:
        * kjs/property_slot.cpp:
        (KJS::PropertySlot::undefinedGetter):
        * kjs/property_slot.h:
        (KJS::PropertySlot::getValue):
        * kjs/protect.h:
        (KJS::gcUnprotectNullTolerant):
        (KJS::ProtectedValue::ProtectedValue):
        (KJS::ProtectedValue::~ProtectedValue):
        (KJS::ProtectedValue::operator=):
        (KJS::ProtectedValue::operator ValueImp *):
        (KJS::ProtectedValue::operator->):
        * kjs/protected_object.h:
        (KJS::ProtectedObject::ProtectedObject):
        (KJS::ProtectedObject::operator=):
        (KJS::ProtectedObject::operator ValueImp *):
        (KJS::ProtectedObject::operator ObjectImp *):
        (KJS::ProtectedObject::operator->):
        (KJS::ProtectedReference::ProtectedReference):
        (KJS::ProtectedReference::~ProtectedReference):
        (KJS::ProtectedReference::operator=):
        * kjs/protected_values.cpp:
        (KJS::ProtectedValues::getProtectCount):
        (KJS::ProtectedValues::increaseProtectCount):
        (KJS::ProtectedValues::insert):
        (KJS::ProtectedValues::decreaseProtectCount):
        * kjs/protected_values.h:
        * kjs/reference.cpp:
        (KJS::Reference::Reference):
        (KJS::Reference::makeValueReference):
        (KJS::Reference::getBase):
        (KJS::Reference::getValue):
        (KJS::Reference::putValue):
        (KJS::Reference::deleteValue):
        * kjs/reference.h:
        (KJS::Reference::baseIfMutable):
        * kjs/regexp_object.cpp:
        (RegExpPrototypeImp::RegExpPrototypeImp):
        (RegExpProtoFuncImp::RegExpProtoFuncImp):
        (RegExpProtoFuncImp::callAsFunction):
        (RegExpObjectImp::RegExpObjectImp):
        (RegExpObjectImp::arrayOfMatches):
        (RegExpObjectImp::backrefGetter):
        (RegExpObjectImp::construct):
        (RegExpObjectImp::callAsFunction):
        * kjs/regexp_object.h:
        * kjs/string_object.cpp:
        (StringInstanceImp::lengthGetter):
        (StringInstanceImp::indexGetter):
        (StringInstanceImp::getOwnPropertySlot):
        (StringInstanceImp::put):
        (StringPrototypeImp::StringPrototypeImp):
        (StringProtoFuncImp::StringProtoFuncImp):
        (regExpIsGlobal):
        (replace):
        (StringProtoFuncImp::callAsFunction):
        (StringObjectImp::StringObjectImp):
        (StringObjectImp::construct):
        (StringObjectImp::callAsFunction):
        (StringObjectFuncImp::StringObjectFuncImp):
        (StringObjectFuncImp::callAsFunction):
        * kjs/string_object.h:
        * kjs/testkjs.cpp:
        (TestFunctionImp::callAsFunction):
        (VersionFunctionImp::callAsFunction):
        (main):
        * kjs/value.cpp:
        (KJS::AllocatedValueImp::operator new):
        (KJS::AllocatedValueImp::getUInt32):
        (KJS::ValueImp::toInteger):
        (KJS::ValueImp::toInt32):
        (KJS::ValueImp::toUInt32):
        (KJS::ValueImp::toUInt16):
        (KJS::ValueImp::toObject):
        (KJS::AllocatedValueImp::getBoolean):
        (KJS::AllocatedValueImp::getNumber):
        (KJS::AllocatedValueImp::getString):
        (KJS::AllocatedValueImp::getObject):
        (KJS::jsString):
        (KJS::jsNumber):
        (KJS::ConstantValues::init):
        (KJS::ConstantValues::clear):
        (KJS::ConstantValues::mark):
        * kjs/value.h:
        (KJS::):
        (KJS::jsUndefined):
        (KJS::jsNull):
        (KJS::jsBoolean):
        (KJS::jsNaN):
        (KJS::ValueImp::ValueImp):
        (KJS::ValueImp::~ValueImp):
        (KJS::AllocatedValueImp::AllocatedValueImp):
        (KJS::AllocatedValueImp::~AllocatedValueImp):
        (KJS::AllocatedValueImp::isBoolean):
        (KJS::AllocatedValueImp::isNumber):
        (KJS::AllocatedValueImp::isString):
        (KJS::AllocatedValueImp::isObject):
        (KJS::AllocatedValueImp::marked):
        (KJS::AllocatedValueImp::mark):
        (KJS::ValueImp::downcast):
        (KJS::ValueImp::isUndefined):
        (KJS::ValueImp::isNull):
        (KJS::ValueImp::isUndefinedOrNull):
        (KJS::ValueImp::isBoolean):
        (KJS::ValueImp::isNumber):
        (KJS::ValueImp::isString):
        (KJS::ValueImp::isObject):
        (KJS::ValueImp::getBoolean):
        (KJS::ValueImp::getNumber):
        (KJS::ValueImp::getString):
        (KJS::ValueImp::getObject):
        (KJS::ValueImp::getUInt32):
        (KJS::ValueImp::mark):
        (KJS::ValueImp::marked):
        (KJS::ValueImp::type):
        (KJS::ValueImp::toPrimitive):
        (KJS::ValueImp::toBoolean):
        (KJS::ValueImp::toNumber):
        (KJS::ValueImp::toString):
        (KJS::jsZero):
        (KJS::jsOne):
        (KJS::jsTwo):
        (KJS::Undefined):
        (KJS::Null):
        (KJS::Boolean):
        (KJS::Number):
        (KJS::String):

2005-08-06  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin.

        Change over to the new PropertySlot mechanism for property
        lookup. This allows the elimination of hasOwnProperty
        methods. Also did some of the performance tuning enabled by this
        (but not yet all the possible improvements for function calls,
        assignment, ++, and so forth). And also much code cleanup.

        Net result is about a 2% speedup on the JS iBench.
        
        Also redid Geoff's fix for the chrashing applet by avoiding a NULL
        prototype in the bindings code and using the default of Null()
        instead.
        
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * bindings/objc/objc_runtime.h:
        * bindings/objc/objc_runtime.mm:
        (ObjcFallbackObjectImp::ObjcFallbackObjectImp):
        (ObjcFallbackObjectImp::getOwnPropertySlot):
        * bindings/runtime_array.cpp:
        (RuntimeArrayImp::lengthGetter):
        (RuntimeArrayImp::indexGetter):
        (RuntimeArrayImp::getOwnPropertySlot):
        * bindings/runtime_array.h:
        * bindings/runtime_method.cpp:
        (RuntimeMethodImp::lengthGetter):
        (RuntimeMethodImp::getOwnPropertySlot):
        * bindings/runtime_method.h:
        * bindings/runtime_object.cpp:
        (RuntimeObjectImp::RuntimeObjectImp):
        (RuntimeObjectImp::fallbackObjectGetter):
        (RuntimeObjectImp::fieldGetter):
        (RuntimeObjectImp::methodGetter):
        (RuntimeObjectImp::getOwnPropertySlot):
        * bindings/runtime_object.h:
        * bindings/runtime_root.h:
        * kjs/array_instance.h:
        * kjs/array_object.cpp:
        (ArrayInstanceImp::lengthGetter):
        (ArrayInstanceImp::getOwnPropertySlot):
        (ArrayPrototypeImp::getOwnPropertySlot):
        * kjs/array_object.h:
        * kjs/date_object.cpp:
        (DatePrototypeImp::getOwnPropertySlot):
        * kjs/date_object.h:
        * kjs/function.cpp:
        (KJS::FunctionImp::argumentsGetter):
        (KJS::FunctionImp::lengthGetter):
        (KJS::FunctionImp::getOwnPropertySlot):
        (KJS::FunctionImp::put):
        (KJS::FunctionImp::deleteProperty):
        (KJS::ArgumentsImp::mappedIndexGetter):
        (KJS::ArgumentsImp::getOwnPropertySlot):
        (KJS::ActivationImp::argumentsGetter):
        (KJS::ActivationImp::getArgumentsGetter):
        (KJS::ActivationImp::getOwnPropertySlot):
        (KJS::ActivationImp::deleteProperty):
        * kjs/function.h:
        * kjs/internal.cpp:
        (InterpreterImp::InterpreterImp):
        (InterpreterImp::initGlobalObject):
        (InterpreterImp::~InterpreterImp):
        (InterpreterImp::evaluate):
        * kjs/internal.h:
        (KJS::InterpreterImp::globalExec):
        * kjs/interpreter.cpp:
        (Interpreter::Interpreter):
        (Interpreter::createLanguageInstanceForValue):
        * kjs/interpreter.h:
        (KJS::Interpreter::argumentsIdentifier):
        (KJS::Interpreter::specialPrototypeIdentifier):
        * kjs/lookup.h:
        (KJS::staticFunctionGetter):
        (KJS::staticValueGetter):
        (KJS::getStaticPropertySlot):
        (KJS::getStaticFunctionSlot):
        (KJS::getStaticValueSlot):
        * kjs/math_object.cpp:
        (MathObjectImp::getOwnPropertySlot):
        * kjs/math_object.h:
        * kjs/nodes.cpp:
        (ResolveNode::evaluate):
        (ResolveNode::evaluateReference):
        (AccessorNode1::evaluate):
        (AccessorNode2::evaluate):
        * kjs/number_object.cpp:
        (NumberObjectImp::getOwnPropertySlot):
        * kjs/number_object.h:
        * kjs/object.cpp:
        (KJS::ObjectImp::get):
        (KJS::ObjectImp::getProperty):
        (KJS::ObjectImp::getPropertySlot):
        (KJS::ObjectImp::getOwnPropertySlot):
        (KJS::ObjectImp::put):
        (KJS::ObjectImp::hasProperty):
        (KJS::ObjectImp::hasOwnProperty):
        * kjs/object.h:
        (KJS::ObjectImp::getDirectLocation):
        (KJS::ObjectImp::getPropertySlot):
        (KJS::ObjectImp::getOwnPropertySlot):
        * kjs/object_wrapper.h: Added.
        (KJS::):
        (KJS::Object::Object):
        (KJS::Object::operator ObjectImp *):
        * kjs/property_map.cpp:
        (KJS::PropertyMap::getLocation):
        * kjs/property_map.h:
        * kjs/property_slot.cpp: Added.
        (KJS::PropertySlot::undefinedGetter):
        * kjs/property_slot.h: Added.
        (KJS::PropertySlot::isSet):
        (KJS::PropertySlot::getValue):
        (KJS::PropertySlot::setValueSlot):
        (KJS::PropertySlot::setStaticEntry):
        (KJS::PropertySlot::setCustom):
        (KJS::PropertySlot::setCustomIndex):
        (KJS::PropertySlot::setUndefined):
        (KJS::PropertySlot::slotBase):
        (KJS::PropertySlot::staticEntry):
        (KJS::PropertySlot::index):
        (KJS::PropertySlot::):
        * kjs/protect.h:
        * kjs/protected_object.h: Added.
        (KJS::ProtectedObject::ProtectedObject):
        (KJS::ProtectedObject::~ProtectedObject):
        (KJS::ProtectedObject::operator=):
        (KJS::ProtectedReference::ProtectedReference):
        (KJS::ProtectedReference::~ProtectedReference):
        (KJS::ProtectedReference::operator=):
        * kjs/reference.h:
        * kjs/reference_list.cpp:
        * kjs/regexp_object.cpp:
        (RegExpObjectImp::backrefGetter):
        (RegExpObjectImp::getOwnPropertySlot):
        * kjs/regexp_object.h:
        * kjs/string_object.cpp:
        (StringInstanceImp::lengthGetter):
        (StringInstanceImp::indexGetter):
        (StringInstanceImp::getOwnPropertySlot):
        (StringPrototypeImp::getOwnPropertySlot):
        * kjs/string_object.h:

2005-08-05  Adele Peterson  <adele@apple.com>

        Reviewed by Darin.

        * JavaScriptCore.xcodeproj/project.pbxproj: Unchecked 'statics are thread safe' option.

2005-08-05  Geoffrey Garen  <ggaren@apple.com>

        -fixed <rdar://problem/4207220> REGRESSION (DENVER): Crash occurs 
        after clicking on Hangman applet

        Reviewed by darin.

        * kjs/object.cpp:
        (KJS::ObjectImp::hasProperty): added check for null prototype.

        FIXME: The long-term plan is to make runtime objects use JS Null()
        instead of null pointers, which will allow us to eliminate null
        checks, improving performance.

2005-08-05  Geoffrey Garen  <ggaren@apple.com>

        Fix by darin, reviewed by me.
        
        - rolled in fix for: <rdar://problem/4161606> JavaScript regular 
        expressions with certain ranges of Unicode characters cause a crash

        Test cases added:

        * layout-tests/fast/js/regexp-big-unicode-ranges-expected.txt: Added.
        * layout-tests/fast/js/regexp-big-unicode-ranges.html: Added.

        * pcre/pcre.c:
        (compile_branch): added checks for characters > 255

2005-08-04  Maciej Stachowiak  <mjs@apple.com>

        - updated expected test results now that we no longer exlude the
        date tests (apparently this was overlooked)

        * tests/mozilla/expected.html:

2005-07-31  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        - remove uses of Mac-OS-X-specific MAX macro
        - remove one of the many excess "APPLE_CHANGES" ifdefs

        * kjs/collector.cpp: (KJS::Collector::allocate): Use std::max instead of MAX.
        * kjs/property_map.cpp: (KJS::PropertyMap::rehash): Ditto.
        * kjs/ustring.cpp:
        (KJS::UChar::toLower): Take out non-ICU code path.
        (KJS::UChar::toUpper): Ditto.
        (KJS::UString::spliceSubstringsWithSeparators): Use std::max instead of MAX.

2005-07-27  Geoffrey Garen  <ggaren@apple.com>

        - fixed http://bugs.webkit.org/show_bug.cgi?id=4147
        Array.toString() and toLocaleString() improvements from KDE KJS
        (rolled in KDE changes)

        Test cases added:

        * layout-tests/fast/js/toString-overrides-expected.txt: Added.
        * layout-tests/fast/js/toString-overrides.html: Added.
        
        * kjs/array_object.cpp:
        (ArrayProtoFuncImp::call):

2005-07-27  Maciej Stachowiak  <mjs@apple.com>

        Changes by Michael Kahl, reviewed by me.

        - fixed <rdar://problem/4194278> Need better debugging support in JavaScriptCore
        
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * kjs/debugger.cpp:
        (KJS::AttachedInterpreter::AttachedInterpreter):
        (KJS::AttachedInterpreter::~AttachedInterpreter):
        (Debugger::~Debugger):
        (Debugger::attach):
        (Debugger::detach):
        (Debugger::sourceParsed):
        * kjs/debugger.h:
        * kjs/function.cpp:
        (KJS::FunctionImp::call):
        (KJS::GlobalFuncImp::call):
        * kjs/function_object.cpp:
        (FunctionObjectImp::construct):
        * kjs/grammar.y:
        * kjs/internal.cpp:
        (Parser::parse):
        (InterpreterImp::evaluate):
        * kjs/internal.h:
        (KJS::InterpreterImp::setDebugger):
        * kjs/interpreter.cpp:
        * kjs/interpreter.h:
        (KJS::Interpreter::imp):
        * kjs/nodes.cpp:

2005-07-27  Geoffrey Garen  <ggaren@apple.com>

        - fixed http://bugs.webkit.org/show_bug.cgi?id=3381
        Date.prototype.setDate() incorrect for values >=128
        
        - Test cases added:

        * layout-tests/fast/js/date-big-setdate-expected.txt: Added.
        * layout-tests/fast/js/date-big-setdate.html: Added.

        Reviewed by darin.

        * kjs/date_object.cpp:
        (DateProtoFuncImp::call):

2005-07-27  Geoffrey Garen  <ggaren@apple.com>

        -rolled in patch by Carsten Guenther <cguenther@gmail.com>
        for http://bugs.webkit.org/show_bug.cgi?id=3759
        Date object enhancements
        
        Test cases added:

        * layout-tests/fast/js/date-preserve-milliseconds-expected.txt: Added.
        * layout-tests/fast/js/date-preserve-milliseconds.html: Added.

        Reviewed by darin.

        * kjs/date_object.cpp:
        (timeFromArgs):
        (DateProtoFuncImp::call):
        (DateObjectImp::construct):
        (DateObjectFuncImp::call):
        (KJS::makeTime):
        * kjs/date_object.h:
        * tests/mozilla/expected.html:

2005-07-26  Justin Garcia  <justin.garcia@apple.com>

        Added a forward declaration to fix gcc4 build error

        * kjs/function.h:

2005-07-25  Geoffrey Garen  <ggaren@apple.com>
        - fixed mistake in my last checkin -- the expected results included
        results from a patch that hasn't landed yet.
        
        * tests/mozilla/expected.html:

2005-07-25  Maciej Stachowiak  <mjs@apple.com>

        - fix mistake in last change that leads to assertion failure in the Development build

        * kjs/lookup.h:
        (KJS::lookupGetOwnValue):

2005-07-24  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin.

        - http://bugs.webkit.org/show_bug.cgi?id=4124
        (change JavaScript property access to avoid double lookup)

        - 10% speedup on JavaScript iBench
        - 5% speedup on 24fun BenchJS benchmark

        Changed all get methods to getOwnProperty - they are no longer
        responsible for prototype lookup, and determine if the property
        was found as a side efect. 

        get() is now a nonvirtual ObjectImp method which calls the virtual
        getOwnProperty and walks the prototype chain. A few selected
        methods were inlined.

        Changed ResolveNode::evaluate plus some other places to use
        getProperty which does get() and hasProperty() in one lookup.

        Also miscellaneous code cleanup.
        
        * bindings/objc/objc_runtime.h:
        * bindings/objc/objc_runtime.mm:
        (ObjcFallbackObjectImp::ObjcFallbackObjectImp):
        (ObjcFallbackObjectImp::getOwnProperty):
        * bindings/runtime_array.cpp:
        (RuntimeArrayImp::RuntimeArrayImp):
        (RuntimeArrayImp::getOwnProperty):
        * bindings/runtime_array.h:
        * bindings/runtime_method.cpp:
        (RuntimeMethodImp::getOwnProperty):
        * bindings/runtime_method.h:
        * bindings/runtime_object.cpp:
        (RuntimeObjectImp::getOwnProperty):
        * bindings/runtime_object.h:
        * kjs/array_instance.h:
        * kjs/array_object.cpp:
        (ArrayInstanceImp::getOwnProperty):
        (ArrayPrototypeImp::getOwnProperty):
        (ArrayProtoFuncImp::call):
        * kjs/array_object.h:
        * kjs/date_object.cpp:
        (DatePrototypeImp::getOwnProperty):
        * kjs/date_object.h:
        * kjs/function.cpp:
        (KJS::FunctionImp::getOwnProperty):
        (KJS::ArgumentsImp::getOwnProperty):
        (KJS::ActivationImp::getOwnProperty):
        * kjs/function.h:
        * kjs/lookup.h:
        (KJS::lookupGetOwnProperty):
        (KJS::lookupGetOwnFunction):
        (KJS::lookupGetOwnValue):
        * kjs/math_object.cpp:
        (MathObjectImp::getOwnProperty):
        (MathObjectImp::getValueProperty):
        * kjs/math_object.h:
        * kjs/nodes.cpp:
        (ResolveNode::evaluate):
        * kjs/number_object.cpp:
        (NumberObjectImp::getOwnProperty):
        * kjs/number_object.h:
        * kjs/object.cpp:
        (KJS::ObjectImp::get):
        (KJS::ObjectImp::getOwnProperty):
        (KJS::ObjectImp::getProperty):
        * kjs/object.h:
        (KJS::ObjectImp::getProperty):
        (KJS::ObjectImp::getOwnProperty):
        * kjs/object_object.cpp:
        (ObjectProtoFuncImp::call):
        * kjs/regexp_object.cpp:
        (RegExpObjectImp::getOwnProperty):
        * kjs/regexp_object.h:
        * kjs/string_object.cpp:
        (StringInstanceImp::getOwnProperty):
        (StringPrototypeImp::getOwnProperty):
        * kjs/string_object.h:

2005-07-25  Geoffrey Garen  <ggaren@apple.com>

        - fixed http://bugs.webkit.org/show_bug.cgi?id=3971
        JS test suite depends on JS 1.2 behavior
        
        Reviewed by darin.

        * tests/mozilla/js1_2/Array/tostring_1.js: now tests only for JS 1.5 behavior
        * tests/mozilla/js1_2/Array/tostring_2.js: ditto
        * tests/mozilla/expected.html:

2005-07-24  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by kevin.

        Fixes make clean problem introduced in xcode2.1 transition

        * Makefile.am:

2005-07-22  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by darin.

        * kjs/date_object.cpp: DatePrototypeImp now identifies itself as a
        child class of DateInstanceImp -- this enables calls to Date.ValueOf().
        
        fixes: ecma/Date/15.9.5.js (once we enable the date tests).

2005-07-22  Geoffrey Garen  <ggaren@apple.com>

        
        Reviewed by darin.

        * tests/mozilla/jsDriver.pl: now takes the path to testkjs as a command-line argument
        * tests/mozilla/run-mozilla-tests: Removed.

2005-07-21  Geoffrey Garen  <ggaren@apple.com>

        * JavaScriptCore.xcodeproj/.cvsignore: Added.

2005-07-21  Geoffrey Garen  <ggaren@apple.com>

        * JavaScriptCore.pbproj/project.pbxproj: Removed.
        * JavaScriptCore.xcodeproj/ggaren.pbxuser: Added.
        * JavaScriptCore.xcodeproj/ggaren.perspective: Added.
        * JavaScriptCore.xcodeproj/project.pbxproj: Added.
        * Makefile.am:

2005-07-20  Maciej Stachowiak  <mjs@apple.com>

        Patch from Trey Matteson <trey@usa.net>, reviewed by me.

        - fixed http://bugs.webkit.org/show_bug.cgi?id=3956
        some of WebKit builds with symbols, some doesn't
        
        * JavaScriptCore.pbproj/project.pbxproj: Generate symbols even for
        Deployment.

2005-07-19  Geoffrey Garen  <ggaren@apple.com>

        -fixed http://bugs.webkit.org/show_bug.cgi?id=3991
        JSC doesn't implement Array.prototype.toLocaleString()

        -test failure: ecma_3/Array/15.4.4.3-1.js

        Reviewed by mjs.

        * kjs/array_object.cpp:
        (ArrayProtoFuncImp::call): now searches for toString and
        toLocaleString overrides in the array's elements

        * tests/mozilla/expected.html: failures are under 100! woohoo!

2005-07-19  Darin Adler  <darin@apple.com>

        - fixed the build

        * kjs/lookup.h: (KJS::lookupPut): Remove bogus const; was preventing WebCore from
        compiling (not sure why this didn't affect my other build machine).

        - one other tiny tweak (so sue me)

        * bindings/runtime_root.cpp: Remove unneeded declaration.

2005-07-19  Darin Adler  <darin@apple.com>

        Reviewed by Geoff Garen.

        - eliminated try wrappers for get/put/call since we don't use C++ exceptions any more

        * kjs/lookup.h: Changed tryCall in IMPLEMENT_PROTOFUNC here to call. It doesn't make
        sense for this macro to use the name tryCall anyway, since that's specific to how
        WebCore used this, so this is good anyway. On the other hand, it might be a problem
        for KDOM or KSVG, in which case we'll need another macro for them, since JavaScriptCore
        should presumably not have the C++ exception support.

2005-07-18  Geoffrey Garen  <ggaren@apple.com>

        -fixed http://bugs.webkit.org/show_bug.cgi?id=4008
        Error objects report incorrect length
        
        Reviewed by darin.

        * kjs/error_object.cpp: Error objects now include a length property
        (ErrorObjectImp::ErrorObjectImp):

        * tests/mozilla/expected.html: updated expected results to reflect fix
        * tests/mozilla/js1_5/Exceptions/regress-123002.js: test now expects 
        ecma compliant results

2005-07-15  Geoffrey Garen  <ggaren@apple.com>

        -rolled in KDE fixes for http://bugs.webkit.org/show_bug.cgi?id=3601
        Error instance type info
        
        Reviewed by mjs.

        * kjs/error_object.cpp:
        - Created ErrorInstanceImp class for Error() objects. 
        - Changed parent object for Native Errors to "Function" (matches
        ECMA spec).
        (ErrorInstanceImp::ErrorInstanceImp):
        (ErrorProtoFuncImp::call):
        (ErrorObjectImp::construct):
        (NativeErrorImp::construct):

        * kjs/error_object.h:
        (KJS::ErrorInstanceImp::classInfo):
        * kjs/object.h: made comment more informative about ClassInfo

        * tests/mozilla/expected.html:

2005-07-14  Geoffrey Garen  <ggaren@apple.com>

        - fixed: JS test suite expects an out of memory error
        that our memory efficiency avoids
        
        Reviewed by mjs.

        * tests/mozilla/js1_5/Array/regress-157652.js:
        test now expects normal execution
        
        * tests/mozilla/expected.html:

2005-07-14  Geoffrey Garen  <ggaren@apple.com>
        - fixed http://bugs.webkit.org/show_bug.cgi?id=4006
        testkjs doesn't implement gc()
        
        - test failure:
        ecma_3/Function/regress-104584.js
        
        Reviewed by mjs.

        * kjs/interpreter.cpp:
        (Interpreter::finalCheck): removed misleading while && comment

        * kjs/testkjs.cpp: added "gc" function to global object
        (TestFunctionImp::):
        (TestFunctionImp::call):
        (main):

        * tests/mozilla/expected.html:

2005-07-14  Geoffrey Garen  <ggaren@apple.com>

        -rolled in patches for http://bugs.webkit.org/show_bug.cgi?id=3945
        [PATCH] Safe merges of comments and other trivialities from KDE's kjs
        
        -patch by Martijn Klingens <klingens@kde.org>
        
        * kjs/array_instance.h:
        * kjs/array_object.cpp:
        * kjs/array_object.h:
        * kjs/bool_object.cpp:
        * kjs/bool_object.h:
        * kjs/collector.cpp:
        * kjs/collector.h:
        * kjs/completion.h:
        * kjs/context.h:
        * kjs/date_object.cpp:
        * kjs/date_object.h:
        * kjs/debugger.cpp:
        * kjs/debugger.h:
        * kjs/dtoa.h:
        * kjs/error_object.cpp:
        * kjs/error_object.h:
        * kjs/function.cpp:
        * kjs/function.h:
        * kjs/function_object.cpp:
        * kjs/function_object.h:
        * kjs/grammar.y:
        * kjs/identifier.cpp:
        * kjs/identifier.h:
        * kjs/internal.cpp:
        * kjs/internal.h:
        * kjs/interpreter.cpp:
        * kjs/interpreter.h:
        * kjs/interpreter_map.cpp:
        * kjs/interpreter_map.h:
        * kjs/lexer.cpp:
        * kjs/lexer.h:
        * kjs/list.cpp:
        * kjs/list.h:
        * kjs/lookup.cpp:
        * kjs/lookup.h:
        * kjs/math_object.cpp:
        * kjs/math_object.h:
        * kjs/nodes.cpp:
        * kjs/nodes.h:
        * kjs/nodes2string.cpp:
        * kjs/number_object.cpp:
        * kjs/number_object.h:
        * kjs/object.cpp:
        * kjs/object.h:
        * kjs/object_object.cpp:
        * kjs/object_object.h:
        * kjs/operations.cpp:
        * kjs/operations.h:
        * kjs/property_map.cpp:
        * kjs/property_map.h:
        * kjs/reference.cpp:
        * kjs/reference.h:
        * kjs/reference_list.cpp:
        * kjs/reference_list.h:
        * kjs/regexp.cpp:
        * kjs/regexp.h:
        * kjs/regexp_object.cpp:
        * kjs/regexp_object.h:
        * kjs/scope_chain.cpp:
        * kjs/scope_chain.h:
        * kjs/simple_number.h:
        * kjs/string_object.cpp:
        * kjs/string_object.h:
        * kjs/testkjs.cpp:
        * kjs/types.h:
        * kjs/ustring.cpp:
        * kjs/ustring.h:
        * kjs/value.cpp:
        * kjs/value.h:

2005-07-14  Geoffrey Garen  <ggaren@apple.com>

        -fixed http://bugs.webkit.org/show_bug.cgi?id=3970
        throw statements fail inside eval statements
        
        Reviewed by mjs.

        * kjs/function.cpp:
        (KJS::GlobalFuncImp::call):
        Big change since I fixed the tabbing. The important part is:
        if (c.complType() == Throw)
          exec->setException(c.value());

        * kjs/nodes.cpp:
        (ThrowNode::execute): removed duplicate KJS_CHECKEXCEPTION
        (TryNode::execute): 
        try now clears the exception state before the finally block executes,
        and checks the state after the block executes, so that exceptions in
        finally code get caught.

        * tests/mozilla/expected.html:

2005-07-14  Geoffrey Garen  <ggaren@apple.com>
        
        -landed fix for http://bugs.webkit.org/show_bug.cgi?id=3412
        Object.prototype is missing toLocaleString

        - patch by Mark Rowe (bdash) <opendarwin.org@bdash.net.nz>
        
        -layout test info in webcore changelog

        Reviewed by mjs.

        * kjs/object_object.cpp:
        (ObjectPrototypeImp::ObjectPrototypeImp):
        (ObjectProtoFuncImp::call):
        * kjs/object_object.h:
        (KJS::ObjectProtoFuncImp::):

2005-07-12  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by mjs.

        * kjs/function.cpp:
        (KJS::IndexToNameMap::operator[]): fixed infinite recursion
        bug in last checkin

2005-07-12  Geoffrey Garen  <ggaren@apple.com>

        -fixed http://bugs.webkit.org/show_bug.cgi?id=3881
        arguments object should share values with function parameters

        Reviewed by mjs.

        ArgumentsImp now uses a simple hash lookup to share values
        with the activation object.

        * kjs/function.cpp:
        (KJS::FunctionImp::getParameterName):
        (KJS::IndexToNameMap::IndexToNameMap):
        (KJS::IndexToNameMap::~IndexToNameMap):
        (KJS::IndexToNameMap::isMapped):
        (KJS::IndexToNameMap::unMap):
        (KJS::IndexToNameMap::operator[]):
        (KJS::ArgumentsImp::ArgumentsImp):
        (KJS::ArgumentsImp::mark):
        (KJS::ArgumentsImp::get):
        (KJS::ArgumentsImp::put):
        (KJS::ArgumentsImp::deleteProperty):
        (KJS::ArgumentsImp::hasOwnProperty):
        (KJS::ActivationImp::createArgumentsObject):
        * kjs/function.h:
        * tests/mozilla/expected.html: updated results

2005-07-09  Maciej Stachowiak  <mjs@apple.com>

        - backing out my earlier collector change, it causes a performance regression in TOT

        * kjs/collector.cpp:
        (KJS::Collector::allocate):

2005-07-08  Eric Seidel  <eseidel@apple.com>

        Reviewed by mjs/hyatt (only in concept).

        * JavaScriptCore.pbproj/project.pbxproj: Added JavaScriptCore+SVG
        Turns on RTTI support for JavaScriptCore.framework when
        building the JavaScriptCore+SVG target.  This is needed as
        kdom (part of WebCore+SVG) requires RTTI for the time being.

2005-07-08  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by hyatt.

        - When there are many live objects, GC less often, to try to make
        GC cost proportional to garbage, not proportional to total memory used.

        * kjs/collector.cpp:
        (KJS::Collector::allocate):

2005-07-08  Vicki Murley  <vicki@apple.com>

        Fix from Carsten Guenther, reviewed by Maciej

        - fixed http://bugs.webkit.org/show_bug.cgi?id=3644 (Error string representation)

        Switch from "-" to ":" in error strings.

        * kjs/error_object.cpp:
        (ErrorProtoFuncImp::call):
        * tests/mozilla/expected.html:

2005-07-08  Geoffrey Garen  <ggaren@apple.com>

        -rolled in patch for http://bugs.webkit.org/show_bug.cgi?id=3878
        arguments object should be an object not an array

        Reviewed by mjs.

        * kjs/function.cpp:
        (KJS::ArgumentsImp::ArgumentsImp): now manually handles initialization
        we used to get for free by inheriting from ArrayInstanceImp
        * kjs/function.h: ArgumentsImp now inherits from ObjectImp
        * tests/mozilla/expected.html: updated expected test results

2005-07-07  Eric Seidel  <eseidel@apple.com>

        Reviewed by mjs.

        * kjs/grammar.y: removed #define YYMAXDEPTH 0 for bison 2.0
        http://bugs.webkit.org/show_bug.cgi?id=3882

2005-07-03  Maciej Stachowiak  <mjs@apple.com>

        Original patch from Mark Rowe <opendarwin.org@bdash.net.nz>, reviewed by me.
        Fixes to patch by me, reviewed by John Sullivan.

        - fixed http://bugs.webkit.org/show_bug.cgi?id=3293

        Test cases added:
        * tests/mozilla/expected.html: Two tests newly pass.

        * bindings/objc/objc_runtime.h:
        * bindings/objc/objc_runtime.mm:
        (ObjcFallbackObjectImp::hasOwnProperty):
        * bindings/runtime_array.cpp:
        (RuntimeArrayImp::hasOwnProperty):
        * bindings/runtime_array.h:
        * bindings/runtime_object.cpp:
        (RuntimeObjectImp::hasOwnProperty):
        * bindings/runtime_object.h:
        * kjs/array_instance.h:
        * kjs/array_object.cpp:
        (ArrayInstanceImp::hasOwnProperty):
        * kjs/function.cpp:
        (KJS::FunctionImp::hasOwnProperty):
        (KJS::ActivationImp::hasOwnProperty):
        * kjs/function.h:
        * kjs/lookup.h:
        * kjs/object.cpp:
        (KJS::ObjectImp::hasProperty):
        (KJS::ObjectImp::hasOwnProperty):
        * kjs/object.h:
        (KJS::Object::hasOwnProperty):
        * kjs/object_object.cpp:
        (ObjectPrototypeImp::ObjectPrototypeImp):
        (ObjectProtoFuncImp::call):
        * kjs/object_object.h:
        (KJS::ObjectProtoFuncImp::):
        * kjs/string_object.cpp:
        (StringInstanceImp::hasOwnProperty):
        * kjs/string_object.h:

2005-07-01  Geoffrey Garen  <ggaren@apple.com>

        -landed patch by Eric Seidel <macdome@opendarwin.org>
        
        -for http://bugs.webkit.org/show_bug.cgi?id=3657
        GroundWork:  Moving some functions from khtml->jsc following kjs TOT
        
        - no layout test necessary yet - only groundwork

        Reviewed by darin.

        * kjs/lookup.h:
        (KJS::cacheGlobalObject):

2005-07-01  Geoffrey Garen  <ggaren@apple.com>

        -landed patch by Carsten Guenther <cguenther@gmail.com>

        -fixes http://bugs.webkit.org/show_bug.cgi?id=3477
        some US-centric date formats not parsed by JavaScript (clock at news8austin.com)

        -relevant tests:
               mozilla/ecma_3/Date/15.9.5.5.js 
               layout-tests/fast/js/date-parse-test.html

        Reviewed by darin.

        * kjs/date_object.cpp:
        (formatLocaleDate):
        (day):
        (dayFromYear):
        (daysInYear):
        (timeFromYear):
        (yearFromTime):
        (weekDay):
        (timeZoneOffset):
        (DateProtoFuncImp::call):
        (DateObjectImp::construct):
        (KJS::parseDate):
        (ymdhms_to_seconds):
        (KJS::makeTime):
        (findMonth):
        (KJS::KRFCDate_parseDate):
        * kjs/date_object.h:
        * tests/mozilla/expected.html: updated expected results to reflect fix

2005-07-01  Geoffrey Garen  <ggaren@apple.com>

        -fixed <rdar://problem/4168186> JavaScript fails to throw exceptions 
        for invalid return statements
        
        relevant tests:
            ecma/Statements/12.9-1-n.js
            ecma_2/Exceptions/lexical-052.js
            ecma_2/Exceptions/statement-009.js

        Reviewed by sullivan.

        * kjs/nodes.cpp:
        (ReturnNode::execute): now throws exception if return is not inside
        a function.

        * tests/mozilla/expected.html: updated to reflect fix

2005-07-01  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by sullivan.

        * tests/mozilla/expected.html: Updated test results for last fix.

2005-07-01  Geoffrey Garen  <ggaren@apple.com>

        -fixed <rdar://problem/4168161> JavaScript fails to throw an exception 
        for invalid function calls
        
        Reviewed by sullivan.

        Relevant mozilla test: ecma_3/Exceptions/regress-95101.js 

        * kjs/nodes.cpp:
        (FunctionCallNode::evaluate): evaluate now checks for an exception
        after resolving a function name (in case the function is undefined)

2005-07-01  Eric Seidel  <eseidel@apple.com>

        Reviewed by darin.

        * kjs/interpreter.h:
        (KJS::Context::curStmtFirstLine): stub for compatibility with KDE
        * kjs/value.h:
        (KJS::Value::isValid): compatibility with KDE
        http://bugs.webkit.org/show_bug.cgi?id=3687

2005-07-01  Eric Seidel  <eseidel@apple.com>

        Reviewed by darin.

        * kjs/create_hash_table: rolled in changes from KDE, including
        -n <namespace> support from KDOM and support for newer comments
        http://bugs.webkit.org/show_bug.cgi?id=3771

2005-06-30  Geoffrey Garen  <ggaren@apple.com>

        -rolled in KDE fix to <rdar://problem/4167660> JavaScript fails to 
        throw exceptions for invalid break/continue statements

        No layout tests because it's already covered by the Mozilla suite

        Reviewed by mjs.

        * kjs/internal.h: LabelStack now tracks where you are relative to
        switch and iteration (loop) statements
        
        (KJS::LabelStack::LabelStack):
        (KJS::LabelStack::pushIteration):
        (KJS::LabelStack::popIteration):
        (KJS::LabelStack::inIteration):
        (KJS::LabelStack::pushSwitch):
        (KJS::LabelStack::popSwitch):
        (KJS::LabelStack::inSwitch):

        * kjs/nodes.cpp: 
        These files were updated to use the new LabelStack:
        (DoWhileNode::execute): 
        (WhileNode::execute):
        (ForNode::execute):
        (ForInNode::execute):
        (SwitchNode::execute):
        
        These files were updated to throw exceptions for invalid
        break/continue statements:
        (BreakNode::execute): 
        (ContinueNode::execute):

        * tests/mozilla/expected.html: Updated expected results to reflect fix

2005-06-30  Kevin Decker  <kdecker@apple.com>

        Reviewed by rjw.

        fixed: <rdar://problem/4166838> failed assertion in`Interpreter::lockCount() > 0

        no layout test added; this is in the bindings code.

        * bindings/objc/WebScriptObject.mm:
        (+[WebScriptObject _convertValueToObjcValue:KJS::originExecutionContext:Bindings::executionContext:Bindings::]): make sure to lock and unlock the interpreter around allocations. 

2005-06-29  Geoffrey Garen  <ggaren@apple.com>

        Patch by Francisco Tolmasky <tolmasky@gmail.com>

        - fixes http://bugs.webkit.org/show_bug.cgi?id=3667
        Core JavaScript 1.5 Reference:Objects:Array:forEach

        See WebCore Changelog for layout tests added.

        Reviewed by darin.

        * kjs/array_object.cpp:
        (ArrayProtoFuncImp::call):
        * kjs/array_object.h:
        (KJS::ArrayProtoFuncImp::):

2005-06-29  Geoffrey Garen  <ggaren@apple.com>

        Patch contributed by Oliver Hunt <ojh16@student.canterbury.ac.nz>

        -fixed http://bugs.webkit.org/show_bug.cgi?id=3743
        Incorrect error message given for certain calls

        See WebCore Changelog for layout test added.

        Reviewed by mjs.

        * kjs/object.cpp:
        (KJS::ObjectImp::defaultValue):

2005-06-29  Geoffrey Garen  <ggaren@apple.com>

        Rolling out date patch from 6-28-05 because it breaks 
        fast/js/date-parse-test

        * kjs/date_object.cpp:
        (formatLocaleDate):
        (DateProtoFuncImp::call):
        (DateObjectImp::construct):
        (KJS::parseDate):
        (ymdhms_to_seconds):
        (isSpaceOrTab):
        (KJS::KRFCDate_parseDate):
        * kjs/date_object.h:
        * tests/mozilla/expected.html:

2005-06-29  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Darin.

        -fixes http://bugs.webkit.org/show_bug.cgi?id=3750
        build fails with KJS_VERBOSE set

        * kjs/nodes.cpp: changed debug print statement to use UString
        (VarDeclNode::evaluate):
        * kjs/reference.cpp: ditto
        (KJS::Reference::putValue):

2005-06-28  Geoffrey Garen  <ggaren@apple.com>

        Patch contributed by Carsten Guenther <cguenther@gmail.com>.

        -fixes http://bugs.webkit.org/show_bug.cgi?id=3477
        some US-centric date formats not parsed by JavaScript (clock at news8austin.com)

        Reviewed by darin.

        * kjs/date_object.cpp:
        (formatLocaleDate):
        (day):
        (dayFromYear):
        (daysInYear):
        (timeFromYear):
        (yearFromTime):
        (weekDay):
        (timeZoneOffset):
        (DateProtoFuncImp::call):
        (DateObjectImp::construct):
        (KJS::parseDate):
        (ymdhms_to_seconds):
        (KJS::makeTime):
        (findMonth):
        (KJS::KRFCDate_parseDate):
        * kjs/date_object.h:
        * tests/mozilla/expected.html: updated expected test results to reflect fix

2005-06-26  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin.

        - replace hash functions  with better ones

        * JavaScriptCore.pbproj/project.pbxproj: Add new file to build.
        * kjs/interpreter_map.cpp:
        (KJS::InterpreterMap::computeHash): Use shared pointer hash.
        * kjs/pointer_hash.h: Added.
        (KJS::pointerHash): Pointer hash based on 32-bit mix and 64-bit mix hashes.
        * kjs/protected_values.cpp:
        (KJS::ProtectedValues::computeHash): Use shared pointer hash.
        * kjs/ustring.cpp:
        (KJS::UString::Rep::computeHash): Use SuperFastHash algorithm.

2005-06-22  Darin Adler  <darin@apple.com>

        Change by Anders Carlsson.
        Reviewed by me.

        - fixed <http://bugs.webkit.org/show_bug.cgi?id=3294>
          String.prototype.replace() fails with function as second param

        * kjs/string_object.cpp: (replace): Added code to handle functions.

        * tests/mozilla/expected.html: Updated since ecma_3/RegExp/regress-209067.js is fixed now.

        * tests/mozilla/run-mozilla-tests: Fix a minor coding style issue that leads to a warning each
        time we run the tests.

2005-06-21  Adele Peterson  <adele@apple.com>

        rolling out fix for http://bugs.webkit.org/show_bug.cgi?id=3293, since it caused layout test failures.
        fast/forms/element-by-name
        fast/loader/loadInProgress

        * ChangeLog:
        * bindings/objc/objc_runtime.h:
        * bindings/objc/objc_runtime.mm:
        (ObjcFallbackObjectImp::hasProperty):
        * bindings/runtime_array.cpp:
        (RuntimeArrayImp::hasProperty):
        * bindings/runtime_array.h:
        * bindings/runtime_object.cpp:
        (RuntimeObjectImp::hasProperty):
        * bindings/runtime_object.h:
        * kjs/array_instance.h:
        * kjs/array_object.cpp:
        (ArrayInstanceImp::hasProperty):
        * kjs/function.cpp:
        (KJS::FunctionImp::hasProperty):
        (KJS::ActivationImp::hasProperty):
        * kjs/function.h:
        * kjs/object.cpp:
        (KJS::ObjectImp::hasProperty):
        * kjs/object.h:
        * kjs/object_object.cpp:
        (ObjectPrototypeImp::ObjectPrototypeImp):
        (ObjectProtoFuncImp::call):
        * kjs/object_object.h:
        (KJS::ObjectProtoFuncImp::):
        * kjs/string_object.cpp:
        (StringInstanceImp::hasProperty):
        * kjs/string_object.h:
        * tests/mozilla/expected.html:

2005-06-21  Darin Adler  <darin@apple.com>

        * JavaScriptCore.pbproj/project.pbxproj: Switched to a build rule rather than a build phase for
        .y files -- this gets rid of the problem where modifying the .y file would not cause sufficient
        compilation.

        * kjs/grammar_wrapper.cpp: Removed.

2005-06-21  Adele Peterson  <adele@apple.com>

        Patch from Anders Carlsson <andersca@mac.com>, reviewed by Darin.

        Fixed: <http://bugs.webkit.org/show_bug.cgi?id=3450>
        <rdar://problem/3881901> String.replace() method not working when regex pattern contains {n, m}

        * pcre/pcre.c: (pcre_compile): Remember the last char length so it can be subtracted correctly if needed.

2005-06-21  Geoffrey Garen  <ggaren@apple.com>

        - fixed <rdar://problem/4155532> 'delete' succeeds on functions
        - fixed <rdar://problem/4155049> javascript function named as "opener" doesn't get called because of window.opener property
        
        Reviewed by cblu.

        * kjs/nodes.cpp:
        (FuncDeclNode::processFuncDecl): Functions now have DontDelete and Internal attributes set when appropriate.

        Test cases:
        * tests/mozilla/expected.html: Updated for one new success.
        - see also test case added in WebCore.

2005-06-20  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin(first pass) and Hyatt.

        - fixed http://bugs.webkit.org/show_bug.cgi?id=3576
        (roll in support for "const" keyword from KDE tree)
        - make processVarDecls handle deletability of variables declared
        in an eval block the same as evaluate would
        - make eval() call processVarDecls - needed to match mozilla and
        to make the second change testable

        I started with the KDE implementation of const but I ended up changing it a bit
        to avoid the use of a global variable. Now instead of the global variable it distinguishes
        const and var at the grammar level so the appropriate node can know the right kind of
        declaration.

        Test cases:
        * tests/mozilla/expected.html: Updated for one new test that is
        failing - we used to bail on it entirely because it checks for
        const support before starting.
        - see also test cases added in WebCore

        * kjs/grammar.y: Add rules for const declarations.
        * kjs/keywords.table: Add const keyword.
        * kjs/nodes.cpp:
        (VarDeclNode::VarDeclNode): Add parameter.
        (VarDeclNode::evaluate): Add const support.
        (VarDeclNode::processVarDecls): Add const support.
        (VarStatementNode::execute): Irrelevant change.
        (ForInNode::ForInNode): Tell our variable node that it's a variable.
        * kjs/nodes.h:
        (KJS::VarDeclNode::): Add declaration of type enum, extra constructor parameter.
        (KJS::VarStatementNode::VarStatementNode): Irrelevant change.
        * kjs/function.cpp:
        (KJS::GlobalFuncImp::call): Process var decls before evaluating.

2005-06-20  Maciej Stachowiak  <mjs@apple.com>

        Patch from Mark Rowe <opendarwin.org@bdash.net.nz>, reviewed by me.

        - fixed http://bugs.webkit.org/show_bug.cgi?id=3293
        
        Test cases added: 
        * tests/mozilla/expected.html: Updated for two fixed tests.
        - also added a layout test

        * bindings/objc/objc_runtime.h:
        * bindings/objc/objc_runtime.mm:
        (ObjcFallbackObjectImp::hasOwnProperty):
        * bindings/runtime_array.cpp:
        (RuntimeArrayImp::hasOwnProperty):
        * bindings/runtime_array.h:
        * bindings/runtime_object.cpp:
        (RuntimeObjectImp::hasOwnProperty):
        * bindings/runtime_object.h:
        * kjs/array_instance.h:
        * kjs/array_object.cpp:
        (ArrayInstanceImp::hasOwnProperty):
        * kjs/function.cpp:
        (KJS::FunctionImp::hasOwnProperty):
        (KJS::ActivationImp::hasOwnProperty):
        * kjs/function.h:
        * kjs/object.cpp:
        (KJS::ObjectImp::hasProperty):
        (KJS::ObjectImp::hasOwnProperty):
        * kjs/object.h:
        (KJS::Object::hasOwnProperty):
        * kjs/object_object.cpp:
        (ObjectPrototypeImp::ObjectPrototypeImp):
        (ObjectProtoFuncImp::call):
        * kjs/object_object.h:
        (KJS::ObjectProtoFuncImp::):
        * kjs/string_object.cpp:
        (StringInstanceImp::hasOwnProperty):
        * kjs/string_object.h:

2005-06-18  Darin Adler  <darin@apple.com>

        Reviewed by Eric Seidel.

        * pcre/get.c: (pcre_get_substring): Fix some computations so this works for UTF-16.
        This is unused in the current JavaScriptCore, but still good to fix.

2005-06-18  Darin Adler  <darin@apple.com>

        Change by Finlay Dobbie.
        Reviewed by me.

        - fixed <http://bugs.webkit.org/show_bug.cgi?id=3331>
          10.3.9 Build Failure: NSString may not respond to `+stringWithCString:encoding:'

        * bindings/objc/WebScriptObject.mm: (-[WebScriptObject stringRepresentation]):
        Undo change we did a while back to work around the gcc 3.3 compiler error.
        It no longer seems to happen, and the workaround code was 10.4-specific.

2005-06-16  Geoffrey Garen  <ggaren@apple.com>

        Fixed: <rdar://problem/4151759> 'delete' fails on variables declared inside 'eval' statements.

        Reviewed by cblu.

        * kjs/context.h:
        (KJS::ContextImp::codeType): Added code type accessor for execution context objects.
        * kjs/internal.cpp:
        (ContextImp::ContextImp): Reflects change to ContextImp::codeType.
        * kjs/nodes.cpp:
        (VarDeclNode::evaluate): Added separate code path for variable declarations inside 'eval' statements.
        * tests/mozilla/expected.html: Updated expected test results to reflect fix.

2005-06-14  Geoffrey Garen  <ggaren@apple.com>

        Updated expected.html to reflect fix to <rdar://problem/4147745>.

        Reviewed by cblu.

        * tests/mozilla/expected.html:

2005-06-14  Geoffrey Garen  <ggaren@apple.com>

        Fixed: <rdar://problem/4147745> JavaScript discards locally defined "arguments" property

        No layout tests added because this change fixes existing tests:
        ecma/ExecutionContexts/10.1.6.js
        ecma_3/Function/regress-94506.js
        js1_4/Functions/function-001.js

        Reviewed by cblu.

        * kjs/function.cpp:
        (KJS::ActivationImp::get): get now checks for an "arguments" property defined in the local variable object
        before trying to return the built-in arguments array.
        
        * kjs/function.h: ActivationImp::put no longer overrides ObjectImp::put

2005-06-10  Darin Adler  <darin@apple.com>

        Change by Mark Rowe <opendarwin.org@bdash.net.nz>.
        Reviewed by me.

        - further improvements to exception file/line number fix

        * kjs/nodes.h: Added setExceptionDetailsIfNeeded function.
        * kjs/nodes.cpp: Updated macros to call the new setExceptionDetailsIfNeeded function.
        (Node::setExceptionDetailsIfNeeded): Added.

2005-06-09  Darin Adler  <darin@apple.com>

        Change by Mark Rowe <opendarwin.org@bdash.net.nz>
        Reviewed by me.

        * kjs/nodes.cpp: Get rid of unneeded this->.

2005-06-08  Maciej Stachowiak  <mjs@apple.com>

        Change by Mark Rowe <opendarwin.org@bdash.net.nz>
        Reviewed by me.

        - fixed http://bugs.webkit.org/show_bug.cgi?id=3327
        (Exception When Setting Style to Invalid Value Lacks Line/File Information)

        * kjs/nodes.cpp: Include source file and line number when making exception in
        KJS_CHECKEXCEPTIONVALUE.

2005-06-07  Darin Adler  <darin@apple.com>

        Change by Toby Peterson <toby@opendarwin.org>.
        Reviewed by me.

        * JavaScriptCore.pbproj/project.pbxproj: Allow bison 2.0, which generates the file
        with a different name.

2005-06-07  Darin Adler  <darin@apple.com>

        Change by Toby Peterson <toby@opendarwin.org>.
        Reviewed by me.

        * kjs/grammar.y: Remove bogus extra line from grammar.y. Toby got this change from KDE KJS.

2005-06-06  Darin Adler  <darin@apple.com>

        * tests/mozilla/run-mozilla-tests: Wrote a perl version of this so we don't require
        the "jst" tool to run the tests.

2005-06-04  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        - add libicu headers

        * JavaScriptCore.pbproj/project.pbxproj: Added icu directory to header search path.

        * icu/README: Added.
        * icu/unicode/platform.h: Added.
        * icu/unicode/uchar.h: Added.
        * icu/unicode/uconfig.h: Added.
        * icu/unicode/umachine.h: Added.
        * icu/unicode/urename.h: Added.
        * icu/unicode/utf.h: Added.
        * icu/unicode/utf16.h: Added.
        * icu/unicode/utf8.h: Added.
        * icu/unicode/utf_old.h: Added.
        * icu/unicode/utypes.h: Added.
        * icu/unicode/uversion.h: Added.

2005-05-19  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.
        
        - turned off exceptions and RTTI; seems to cut JavaScriptCore code size by about 22%

        * JavaScriptCore.pbproj/project.pbxproj: Turn off exceptions and RTTI for both
        the framework and testkjs tool.

2005-05-18  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        - got rid of code that depended on RTTI

        * kjs/collector.cpp:
        (KJS::className): Added. Gets class name in a KJS way, rather than a C++ RTTI way.
        (KJS::Collector::rootObjectClasses): Use className instead of typeid names.

2005-05-18  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        - fix a failure seen in the Mozilla JavaScript tests where a live object was garbage-collected
          when the only reference to it was in an argList on the stack

        * kjs/list.h: Moved the operator= function into the .cpp file since it's too big to be
        a good choice to inline.
        * kjs/list.cpp: (KJS::List::operator=): Moved this formerly-inline function into a separate
        file and added missing code to update valueRefCount. It's the latter that fixes the bug.

2005-05-16  Darin Adler  <darin@apple.com>

        Reviewed by Adele.

        - fixed issues preventing us from compiling with newer versions of gcc 4.0

        * kjs/ustring.cpp:
        (KJS::operator==): Remove redundant and illegal KJS:: prefix on this function's definition.
        (KJS::operator<): Ditto.
        (KJS::compare): Ditto.

2005-05-09  Darin Adler  <darin@apple.com>

        Reviewed by John.

        - turn on conservative GC unconditionally and start on SPI changes to
          eliminate the now-unneeded smart pointers since we don't ref count any more

        * kjs/value.h: Removed macros to turn conservative GC on and off.
        Removed ref and deref functions.
        (KJS::ValueImp::ValueImp): Removed non-conservative-GC code path.
        (KJS::ValueImp::isUndefined): Added. New SPI to make it easier to deal with ValueImp directly.
        (KJS::ValueImp::isNull): Ditto.
        (KJS::ValueImp::isBoolean): Ditto.
        (KJS::ValueImp::isNumber): Ditto.
        (KJS::ValueImp::isString): Ditto.
        (KJS::ValueImp::isObject): Ditto.
        (KJS::Value::Value): Removed non-conservative-GC code path and made constructor no
        longer explicit so we can quietly create Value wrappers from ValueImp *; inexpensive with
        conservative GC and eases the transition.
        (KJS::Value::operator ValueImp *): Added. Quietly creates ValueImp * from Value.
        (KJS::ValueImp::marked): Removed non-conservative-GC code path.

        * kjs/value.cpp:
        (KJS::ValueImp::mark): Removed non-conservative-GC code path.
        (KJS::ValueImp::isUndefinedOrNull): Added. New SPI to make it easier to deal with ValueImp directly.
        (KJS::ValueImp::isBoolean): Ditto.
        (KJS::ValueImp::isNumber): Ditto.
        (KJS::ValueImp::isString): Ditto.
        (KJS::ValueImp::asString): Ditto.
        (KJS::ValueImp::isObject): Ditto.
        (KJS::undefined): Ditto.
        (KJS::null): Ditto.
        (KJS::boolean): Ditto.
        (KJS::string): Ditto.
        (KJS::zero): Ditto.
        (KJS::one): Ditto.
        (KJS::two): Ditto.
        (KJS::number): Ditto.

        * kjs/object.h: Made constructor no longer explicit so we can quietly create Object
        wrappers from ObjectImp *; inexpensive with conservative GC and eases the transition.
        (KJS::Object::operator ObjectImp *): Added. Quietly creates ObjectImp * from Object.
        (KJS::ValueImp::isObject): Added. Implementation of new object-related ValueImp function.
        (KJS::ValueImp::asObject): Ditto.

        * kjs/object.cpp:
        (KJS::ObjectImp::setInternalValue): Remove non-conservative-GC code path.
        (KJS::ObjectImp::putDirect): Ditto.
        (KJS::error): Added. Function in the new SPI style to create an error object.

        * kjs/internal.h: Added the new number-constructing functions as friends of NumberImp.
        There may be a more elegant way to do this later; what's important now is the new SPI.

        * kjs/collector.h:  Remove non-conservative-GC code path and also take out some
        unneeded APPLE_CHANGES.

        * bindings/runtime_root.cpp:
        (KJS::Bindings::addNativeReference): Remove non-conservative-GC code path.
        (KJS::Bindings::removeNativeReference): Ditto.
        (RootObject::removeAllNativeReferences): Ditto.
        * bindings/runtime_root.h:
        (KJS::Bindings::RootObject::~RootObject): Ditto.
        (KJS::Bindings::RootObject::setRootObjectImp): Ditto.
        * kjs/collector.cpp:
        (KJS::Collector::allocate): Ditto.
        (KJS::Collector::collect): Ditto.
        (KJS::Collector::numGCNotAllowedObjects): Ditto.
        (KJS::Collector::numReferencedObjects): Ditto.
        (KJS::Collector::rootObjectClasses): Ditto.
        * kjs/internal.cpp:
        (NumberImp::create): Ditto.
        (InterpreterImp::globalInit): Ditto.
        (InterpreterImp::globalClear): Ditto.
        * kjs/list.cpp:
        (KJS::List::markProtectedLists): Ditto.
        (KJS::List::clear): Ditto.
        (KJS::List::append): Ditto.
        * kjs/list.h:
        (KJS::List::List): Ditto.
        (KJS::List::deref): Ditto.
        (KJS::List::operator=): Ditto.
        * kjs/protect.h:
        (KJS::gcProtect): Ditto.
        (KJS::gcUnprotect): Ditto.

2005-05-09  Chris Blumenberg  <cblu@apple.com>

        Workaround gcc 3.3 internal compiler errors.

        Reviewed by darin.

        * bindings/objc/WebScriptObject.mm:
        (-[WebScriptObject stringRepresentation]): call [NSString stringWithCString:encoding] rather than using @""

2005-05-09  Darin Adler  <darin@apple.com>

        * Makefile.am: Don't set up PBXIntermediatesDirectory explicitly;
        Not needed to make builds work, spews undesirable error messages too.

2005-05-06  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        - make building multiple trees with make work better

        * Makefile.am: Set up Xcode build directory before invoking xcodebuild.

2005-05-04  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin.

        <rdar://problem/4086570> Crash in JavaScriptCore with RSS Visualizer
        
        * kjs/internal.cpp:
        (InterpreterImp::mark): mark staticNaN, it is usually protected by the Number
        prototype but there is a small window where it can get collected.

2005-05-04  Darin Adler  <darin@apple.com>

        Reviewed by Dave Hyatt.

        - another gcc-4.0-related fix

        * bindings/runtime_root.h: Take off extra namespace prefixes that apparently cause problems
        compiling with gcc 4.0, although I have not observed the problems.

2005-05-04  Darin Adler  <darin@apple.com>

        Reviewed by Dave Hyatt.

        - fixed build rules to match other projects

        * JavaScriptCore.pbproj/project.pbxproj: Set deployment target to 10.3 in the build styles.
        When built without a build style (by Apple B&I) we want to get the target from the
        environment. But when built with a build style (by Safari engineers and others), we want
        to use 10.3.

        * Makefile.am: Took out extra parameters that make command-line building different from
        Xcode building. Now that this is fixed, you should not get a full rebuild if you switch
        from command line to Xcode or back.

2005-05-04  Maciej Stachowiak  <mjs@apple.com>

        - revert presumably accidental change to mozilla JS test expected results, this
        was making the tests fail.

        * tests/mozilla/expected.html:

2005-05-03  Richard Williamson   <rjw@apple.com>

        Fixed <rdar://problem/4102644> Crash in LiveConnect below KJS::Bindings::JavaInstance::stringValue() const

        Correctly handle accessing nil objects from a Java object array.

        Reviewed by John.

        * bindings/jni/jni_runtime.cpp:
        (JavaArray::valueAt):

2005-05-01  Darin Adler  <darin@apple.com>

        - move to Xcode native targets and stop checking in generated files

        * JavaScriptCore.pbproj/project.pbxproj: Updated to use native targets and generate all the generated
        files, so we don't have to check them in any more.
        * Info.plist: Added. Native targets use a separate file for this.

        * Makefile.am: Removed pcre and kjs SUBDIRS. Also removed code that deleted the embedded copy of this
        framework, since we haven't been embedding it for some time.

        * kjs/grammar_wrapper.cpp: Added. Shell used to compile grammar.cpp since we can't add a generated file
        easily to the list of files to be compiled.

        * kjs/.cvsignore: Removed.
        * kjs/Makefile.am: Removed.
        * kjs/array_object.lut.h: Removed.
        * kjs/date_object.lut.h: Removed.
        * kjs/grammar.cpp: Removed.
        * kjs/grammar.cpp.h: Removed.
        * kjs/grammar.h: Removed.
        * kjs/lexer.lut.h: Removed.
        * kjs/math_object.lut.h: Removed.
        * kjs/number_object.lut.h: Removed.
        * kjs/string_object.lut.h: Removed.
        * pcre/.cvsignore: Removed.
        * pcre/Makefile.am: Removed.
        * pcre/chartables.c: Removed.

2005-04-28  Darin Adler  <darin@apple.com>

        Reviewed by Dave Harrison.

        - fixed problems preventing us from compiling with gcc 4.0

        * JavaScriptCore.pbproj/project.pbxproj: Removed -Wmissing-prototypes from
        WARNING_CPLUSPLUSFLAGS since it's now a C-only warning.

        * bindings/jni/jni_jsobject.cpp:
        (JSObject::getSlot): Changed some %d to %ld where the parameters where long ints.
        (JSObject::setSlot): Ditto.
        * bindings/jni/jni_utility.cpp:
        (KJS::Bindings::getJavaVM): Ditto.
        (KJS::Bindings::getJNIEnv): Ditto.
        * bindings/objc/objc_utility.mm: Fixed include of <JavascriptCore/internal.h> that needed the
        letter "S" capitalized.
        * kjs/bool_object.cpp: (BooleanProtoFuncImp::call): Rearranged how this function returns to
        avoid incorrect gcc 4.0 warning.
        * kjs/collector.cpp: (KJS::Collector::markStackObjectsConservatively): Changed code to check
        the alignment of the passed-in pointers to only require pointer-level alignment, not 8-byte alignment.
        Prevents a crash on garbage collect when compiled with gcc 4.0.
        * kjs/nodes.cpp:
        (WhileNode::execute): Added a redundant return after an infinite loop to work around incorrect gcc 4.0 warning.
        (ForNode::execute): Ditto.
        (SwitchNode::execute):Rearranged how this function returns to avoid incorrect gcc 4.0 warning.
        (LabelNode::execute): Ditto.
        * kjs/string_object.cpp: (replace): Ditto.

2005-04-26  Richard Williamson   <rjw@apple.com>

        Fixed <rdar://problem/4098713> Scripting API is incompatible with Mozilla
        
        We were incompatible with Mozilla's implementation of the scripting APIs in
        two ways:

        Their NPN_SetException has the following signature:

            void NPN_SetException(NPObject *npobj, const NPUTF8 *message);

        ours has:

            void NPN_SetException (NPObject * npobj, const NPString *message);

        Also, they expect the string returned from NPN_UTF8FromIdentifier() to be freed by caller.
        We do not.

        I changed both behaviors to match Mozilla.

        Reviewed by Chris.

        * bindings/NP_jsobject.cpp:
        (_NPN_SetException):
        * bindings/npruntime.cpp:
        (_NPN_UTF8FromIdentifier):
        (_NPN_IntFromIdentifier):
        (_NPN_SetExceptionWithUTF8):
        * bindings/npruntime.h:
        * bindings/npruntime_impl.h:

2005-04-26  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Chris.

        <rdar://problem/4092136> reproducible crash in KJS::kjs_fast_realloc loading maps.google.com
        
        * kjs/string_object.cpp:
        (StringObjectFuncImp::call): Allocate adopted ustring buffer properly.

2005-04-22  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        * kjs/ustring.cpp: (KJS::UString::UTF8String): Fix off-by-one error in surrogate pair logic.

2005-04-22  Darin Adler  <darin@apple.com>

        Reviewed by John.

        - fixed <rdar://problem/4090046> JavaScript throw statement causes parse error when no semicolon is present

        * kjs/grammar.y: Added an additional rule for throw like the ones we have for all the other semicolon rules.
        Not sure why we missed this one earlier.

        * kjs/grammar.cpp: Regenerated.

=== JavaScriptCore-412.1 ===

2005-04-20  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        - speedups, total 12% on JavaScript iBench

        I ran the benchmark under Shark and followed its advice a lot, mainly.

        * kjs/collector.cpp:
        (KJS::Collector::allocate): Take out special case for 0; costing speed but unexercised.
        Use numLiveObjectsAtLastCollect instead of numAllocationsSinceLastCollect so we don't
        have to bump it each time we call allocate. Put numLiveObjects into a local variable to
        cut down on global variable accesses. Make "next" cell pointer be a byte offset rather
        than a pointer so we don't need a special case for NULL. Allow freeList to point to some
        bogus item when the entire block is full rather than going out of our way to make it
        point to NULL.
        (KJS::Collector::markProtectedObjects): Get table size and pointer into locals outside
        the loop to avoid re-loading them over and over again.
        (KJS::Collector::collect): Put numLiveObjects into a local variable to cut down on global
        variable accesses. Make "next" cell pointer be a byte offset as above. Put numLiveObjects
        into a local variable to cut down on global variable accesses. Set numLiveObjectsAtLastCollect
        rather than numAllocationsSinceLastCollect.
        (KJS::Collector::numReferencedObjects): Get table size and pointer into locals outside
        the loop to avoid re-loading them over and over again.
        (KJS::Collector::rootObjectClasses): Ditto.

        * kjs/internal.h: Make Value be a friend of NumberImp so it can construct number objects
        directly, avoiding the conversion from Number to Value.

        * kjs/internal.cpp: (StringImp::toObject): Don't use Object::dynamicCast, because we know
        the thing is an object and we don't want to do all the extra work; just cast directly.

        * kjs/list.cpp: (KJS::List::List): Construct valueRefCount in a way that avoids the need for
        a branch -- in the hot case this just meant avoiding checking a variable we just set to false.

        * kjs/lookup.cpp: (keysMatch): Marked this inline.

        * kjs/nodes.cpp: Disabled KJS_BREAKPOINT, to avoid calling hitStatement all the time.
        (BooleanNode::evaluate): Make a Value directly, rather than making a Boolean which is converted
        into a Value.
        (NumberNode::evaluate): Ditto.
        (StringNode::evaluate): Ditto.
        (ArrayNode::evaluate): Ditto.
        (FunctionCallNode::evaluate): Use new inline baseIfMutable to avoid unnecessary getBase function.
        Also just use a pointer for func, rather than an Object.
        (PostfixNode::evaluate): Change code so that it doesn't make an excess Number, and so that it
        passes a "known to be integer" boolean in, often avoiding a conversion from floating point to
        integer and back.
        (DeleteNode::evaluate): Make a Value directly.
        (TypeOfNode::evaluate): Use new inline baseIfMutable and make Value directly.
        (PrefixNode::evaluate): Change code so that it doesn't make an excess Number, and so that it
        passes a "known to be integer" boolean in, often avoiding a conversion from floating point to
        integer and back.
        (UnaryPlusNode::evaluate): Make a Value directly.
        (NegateNode::evaluate): Change code so that it doesn't make an excess Number, and so that it
        passes a "known to be integer" boolean in, often avoiding a conversion from floating point to
        integer and back.
        (BitwiseNotNode::evaluate): Make a Value directly.
        (LogicalNotNode::evaluate): Ditto.
        (ShiftNode::evaluate): Don't convert to a double before making a Value.
        (RelationalNode::evaluate): Make a Value directly.
        (EqualNode::evaluate): Ditto.
        (BitOperNode::evaluate): Ditto.
        (AssignNode::evaluate): Make a Value directly. Change code so that it passes a "known to be integer"
        boolean in, often avoiding a conversion from floating point to integer and back.
        (VarDeclNode::evaluate): Make a Value directly.
        (ForNode::execute): Remove unused local variable.

        * kjs/operations.h:
        (KJS::isNaN): Inlined.
        (KJS::isInf): Ditto.
        (KJS::isPosInf): Ditto.
        (KJS::isNegInf): Ditto.

        * kjs/operations.cpp: Change isNaN, isInf, isPosInf, and isNegInf to be inlines.
        (KJS::equal): Rewrite to avoid creating values and recursing back into the function.
        (KJS::relation): Rearranged code so that we don't need explicit isNaN checks.
        (KJS::add): Changed code to make Value directly, and so that it passes a "known to be integer"
        boolean in, often avoiding a conversion from floating point to integer and back.
        (KJS::mult): Ditto.

        * kjs/property_map.cpp:
        (KJS::PropertyMap::~PropertyMap): Get size and entries pointer outside loop to avoid
        re-getting them inside the loop.
        (KJS::PropertyMap::clear): Ditto. Clear value pointer in addition to key, so we can just
        look at the value pointer in the mark function.
        (KJS::PropertyMap::get): Get sizeMask and entries pointer outside loop to avoid
        re-getting them inside the loop.
        (KJS::PropertyMap::put): Ditto.
        (KJS::PropertyMap::insert): Ditto.
        (KJS::PropertyMap::remove): Ditto.
        (KJS::PropertyMap::mark): Get size and entries pointer outside loop to avoid
        re-getting them inside the loop. Don't bother checking key for 0, since we already have
        to check value for 0. (Also had to change clear() to set value to 0.)
        (KJS::PropertyMap::addEnumerablesToReferenceList): Get size and entries pointer outside
        loop to avoid re-getting them inside the loop.
        (KJS::PropertyMap::addSparseArrayPropertiesToReferenceList): Ditto.
        (KJS::PropertyMap::save): Ditto.

        - other changes

        * kjs/protected_values.h: Remove unneeded class name qualifiers.

        * kjs/reference.h:
        (KJS::Reference::baseIfMutable): New inline function: replaces isMutable().
        (KJS::Reference::Reference): Inlined.
        * kjs/reference.cpp:
        (KJS::Reference::getValue): Rewrite to not use getBase.
        (KJS::Reference::putValue): Ditto.
        (KJS::Reference::deleteValue): Dittol

        * kjs/simple_number.h:
        (KJS::SimpleNumber::integerFits): Added. For use when the parameter is known to be integral.

        * kjs/string_object.cpp: (StringProtoFuncImp::call): Create the number without first converting
        to double in various cases that involve integers.

        * kjs/ustring.h:
        (KJS::UString::attach): Inlined.
        (KJS::UString::release): Inlined.
        * kjs/ustring.cpp:
        (KJS::UString::find): Get first character outside the loop instead of re-fetching it each time.

        * kjs/value.cpp:
        (Value::Value): Added overloads for all the various specific types of values, so you don't have
        to convert from, say, Number to Value, just to create one.
        (Number::Number): Added an overload that takes a boolean to indicate the number is already
        known to be an integer.

        * kjs/value.h: Added more Value constructors, added a version of toNumber that returns
        a boolean to indicate if the number is known to be an integer (because it was a "simple number").
        (KJS::ValueImp::marked): Inlined.
        (KJS::ValueImp::dispatchType): Inlined.
        (KJS::ValueImp::dispatchToPrimitive): Inlined.
        (KJS::ValueImp::dispatchToBoolean): Inlined.
        (KJS::ValueImp::dispatchToNumber): Inlined.
        (KJS::ValueImp::dispatchToString): Inlined.
        (KJS::ValueImp::dispatchToUInt32): Inlined.

2005-04-14  Maciej Stachowiak  <mjs@apple.com>

        - make fast_malloc.h a private header, not project

        * JavaScriptCore.pbproj/project.pbxproj:

2005-04-12  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Richard.

        <rdar://problem/4089734> JavaScript iBench can be sped up ~10% with custom allocator

        - use custom single-threaded malloc for all non-GC JavaScriptCore
        allocations, for a 9.1% speedup on JavaScript iBench
        
        * JavaScriptCore.pbproj/project.pbxproj:
        * kjs/collector.cpp:
        (KJS::Collector::allocate): Use dlmalloc to allocate the collector blocks.
        (KJS::Collector::collect): And dlfree to free it.
        * kjs/fast_malloc.cpp: Added, just the standard dlmalloc here.
        * kjs/fast_malloc.h: Added. Declarations for the functions. Also added a handy
        macro to give a class custom operator new/delete
        * kjs/identifier.cpp:
        (KJS::Identifier::add): Use dlmalloc/dlfree.
        * kjs/nodes.h: make nodes KJS_FAST_ALLOCATED.
        * kjs/property_map.cpp:
        (KJS::PropertyMap::~PropertyMap): Use dlmalloc/dlfree.
        (KJS::PropertyMap::rehash): ditto
        * kjs/scope_chain.h:
        * kjs/ustring.cpp:
        (KJS::UString::Rep::createCopying): New named constructor that copies a passed-in
        buffer, to hide allocation details from webcore.
        (KJS::UString::UString): use createCopying when appropriate.
        (KJS::UString::Rep::destroy): Use dlmalloc/dlfree.
        (KJS::UString::expandedSize): likewise
        (KJS::UString::expandCapacity): likewise
        (KJS::UString::expandPreCapacity): likewise
        (KJS::UString::spliceSubstringsWithSeparators): likewise
        (KJS::UString::append): likewise
        (KJS::UString::operator=): likewise
        (KJS::UString::detach): likewise
        * kjs/ustring.h: make UString and UString::Rep KJS_FAST_ALLOCATED.

2005-04-11  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by John.

        <rdar://problem/4086819> Avoid using protect count hash table so much for 5.6% JS iBench speedup

        - Avoid using protected values hash for the two most common cases
        - Bump up ListImp high water mark, new testing shows 508 ListImps are
        created during JS iBench.

        Net result is a 5.6% speedup on JavaScript iBench
        
        * kjs/collector.cpp:
        (KJS::Collector::collect): mark protected lists as appropriate.
        * kjs/context.h:
        * kjs/list.cpp:
        (KJS::ListImp::markValues): Moved implementation from List::markValues
        (KJS::List::markProtectedLists): Implemented - scan pool and overflow
        list.
        (KJS::allocateListImp): link lists outside the pool into a separate
        doubly linked list to be able to mark protected lists
        (KJS::deallocateListImp): do the corresponding delinking
        (KJS::List::derefValues): do nothing in conservative GC mode
        (KJS::List::refValues): do nothing in conservative GC mode
        (KJS::List::markValues): call ListImp version
        (KJS::List::append):
        * kjs/list.h:

=== Safari-412 ===

=== Safari-411 ===

=== Safari-410 ===

=== Safari-409 ===

=== Safari-408 ===

=== Safari-407 ===

2005-03-16  Jens Alfke  <jens@apple.com>

        Reviewed by Kevin.

        Fix for <rdar://problem/4025212> "REGRESSION (163-164): search not performed correctly; united.com"
        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.
        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.)
        Darin says this regression occurred when we replaced our own implementation of unescape() with code from KJS.

        * kjs/function.cpp:
        (KJS::GlobalFuncImp::call):

2005-03-15  Richard Williamson   <rjw@apple.com>

        Fixed <rdar://problem/4053276> WebScripting protocol in WebKit cannot convert Boolean in Javascript to BOOL in Objective-C

        Added JavaScript boolean to type that can be converted to
        ObjC scalar parameters.

        Reviewed by Ken Kocienda.

        * bindings/objc/objc_utility.mm:
        (KJS::Bindings::convertValueToObjcValue):

=== Safari-406 ===

=== Safari-405 ===

=== Safari-403 ===

=== Safari-402 ===

=== Safari-401 ===

=== Safari-400 ===

=== Safari-188 ===

2005-02-21  Darin Adler  <darin@apple.com>

        * kjs/date_object.cpp: (timetUsingCF): Fixed indenting.

2005-02-17  Richard Williamson   <rjw@apple.com>

        Fixed <rdar://problem/4003251> Safari crashed at www.icelandair.com in LiveConnect code converting a Java object to a string

        Added nil check.

        Reviewed by John Sullivan.

        * bindings/jni/jni_runtime.cpp:
        (JavaField::valueFromInstance):

=== Safari-187 ===

2005-02-11  Richard Williamson   <rjw@apple.com>

        Fixed <rdar://problem/3985118> DOM objects not being marshaled on JS->native calls

        Re-factored how 'native' wrappers for JS objects are created.  The interpreter now
        creates these wrappers.  The WebCore subclass of the interpreter now overrides
        createLanguageInstanceForValue() and creates a DOM ObjC wrapper for DOM objects.

        Reviewed by Ken.

        * bindings/c/c_utility.cpp:
        (convertValueToNPVariant):
        * bindings/jni/jni_instance.cpp:
        (JavaInstance::invokeMethod):
        * bindings/jni/jni_objc.mm:
        (KJS::Bindings::dispatchJNICall):
        * bindings/jni/jni_runtime.cpp:
        (JavaField::valueFromInstance):
        (JavaArray::valueAt):
        * bindings/objc/WebScriptObject.mm:
        (-[WebScriptObject _setExecutionContext:KJS::Bindings::]):
        (+[WebScriptObject _convertValueToObjcValue:KJS::originExecutionContext:Bindings::executionContext:Bindings::]):
        * bindings/objc/WebScriptObjectPrivate.h:
        * bindings/objc/objc_utility.h:
        * bindings/objc/objc_utility.mm:
        (KJS::Bindings::convertObjcValueToValue):
        (KJS::Bindings::createObjcInstanceForValue):
        * bindings/runtime.cpp:
        (Instance::createBindingForLanguageInstance):
        (Instance::createRuntimeObject):
        (Instance::createLanguageInstanceForValue):
        * bindings/runtime.h:
        * kjs/interpreter.cpp:
        (Interpreter::createLanguageInstanceForValue):
        * kjs/interpreter.h:

=== Safari-186 ===

2005-02-10  Darin Adler  <darin@apple.com>

        "Reviewed" by Richard (he told me the file was obsolete).

        - got rid of an obsolete file

        * bindings/npsap.h: Removed.

=== Safari-185 ===

=== Safari-183 ===

2005-02-03  Richard Williamson   <rjw@apple.com>

        Fixed <rdar://problem/3972905> CrashTracer: ...36 crashes at com.apple.WebCore: khtml::CSSStyleSelector::applyDeclarations + 120

        Revert to old (and correct) behavior of returning runtime object
        when passed as a parameter, rather than it's corresponding DOM
        object.

        Reviewed by Chris.

        * bindings/objc/WebScriptObject.mm:
        (+[WebScriptObject _convertValueToObjcValue:KJS::originExecutionContext:Bindings::executionContext:Bindings::]):

=== Safari-182 ===

2005-01-28  Richard Williamson   <rjw@apple.com>

        Fixed <rdar://problem/3980389> JavaScript bindings access incorrect runtime object

        Only use special 'back door' property to get the runtime object if thisObj isn't
        already a runtime object.

        <gratuitous> Cleaned up a couple of strcmp on ClassInfo name.  Used == on
        ClassInfo pointer instead.

        Reviewed by Chris.

        * bindings/c/c_utility.cpp:
        (convertValueToNPVariant):
        * bindings/objc/WebScriptObject.mm:
        (+[WebScriptObject _convertValueToObjcValue:KJS::originExecutionContext:Bindings::executionContext:Bindings::]):
        * bindings/runtime_method.cpp:
        (RuntimeMethodImp::call):

=== Safari-181 ===

2005-01-26  Richard Williamson   <rjw@apple.com>

        Fixed <rdar://problem/3972522> (179-180) 40% slowdown on iBench JavaScript test

        I added a member variable to ObjectImp.  This changed it's size and consequently
        hampered the optimizations built into the garbage collector.  Objects no longer
        fit within the allocators cell size, and thus allocation fell back to a slower
        allocator.

        As a result of this fix I also dramatically cleaned up how runtime objects are
        accessed.  The path mostly *removes* code.
        
        Reviewed by Chris.

        * bindings/runtime_method.cpp:
        (RuntimeMethodImp::call):
        * bindings/runtime_object.cpp:
        (RuntimeObjectImp::get):
        (RuntimeObjectImp::put):
        (RuntimeObjectImp::canPut):
        (RuntimeObjectImp::hasProperty):
        (RuntimeObjectImp::defaultValue):
        * bindings/runtime_object.h:
        * kjs/object.cpp:
        (KJS::ObjectImp::ObjectImp):
        * kjs/object.h:

2005-01-20  Darin Adler  <darin@apple.com>

        Reviewed by me, changes by Han Ming Ong.

        - <rdar://problem/3964302> SWB: A few files need to be updated to be compilable under GCC 4.0

        * bindings/objc/WebScriptObjectPrivate.h: Make members public.
        * kjs/lookup.h: Change "value.h" to "object.h" because we need KJS::Object to compile a template.

2005-01-20  Richard Williamson   <rjw@apple.com>

        Fixed <rdar://problem/3964634> undefined property value from binding seems to evaluate to true in an if statement

        The comprehensive fix for this problem requires new API, as described in 3965326.  However,
        given that we can't add new API at this point, the 'ObjcFallbackObjectImp' will behave
        like and Undefined object if  invokeUndefinedMethodFromWebScript:withArguments: isn't
        implemented on the bound object.

        Reviewed by Chris.

        * bindings/objc/objc_runtime.h:
        * bindings/objc/objc_runtime.mm:
        (ObjcFallbackObjectImp::type):
        (ObjcFallbackObjectImp::implementsCall):
        (ObjcFallbackObjectImp::toBoolean):
        * bindings/testbindings.mm:
        (+[MyFirstInterface isSelectorExcludedFromWebScript:]):
        (+[MyFirstInterface isKeyExcludedFromWebScript:]):

=== Safari-180 ===

2005-01-19  Richard Williamson   <rjw@apple.com>

        Fixed <rdar://problem/3853676> Browser Crash when accessing CCWeb Progress Page - KJS::Bindings::convertValueToJValue

        Fixed the following problems with LiveConnect that are demonstrated by the application
        described in 3853676.

        1.  If a nil object is passed in an array from Java to JavaScript we will crash.
        2.  We sometimes will incorrectly attempt to access a generic JavaScript as a Java runtime object wrapper.
        3.  We will sometimes fail to find the correct static method ID.

        Reviewed by Maciej.

        * bindings/jni/jni_jsobject.cpp:
        (JSObject::convertJObjectToValue):
        (JSObject::listFromJArray):
        * bindings/jni/jni_runtime.cpp:
        (JavaField::valueFromInstance):
        (JavaField::setValueToInstance):
        * bindings/jni/jni_utility.cpp:
        (KJS::Bindings::getMethodID):
        (KJS::Bindings::convertValueToJValue):
        * bindings/runtime_array.h:

2005-01-18  Richard Williamson   <rjw@apple.com>

        Fixed several issues all arising from analysis of plugin detection code at ifilm.com:

        Fixed <rdar://problem/3958592> can't script plug-ins if plug-in is invoked with <object> element instead of <embed>
        Fixed <rdar://problem/3958597> <object> elements with IDs do not show up as named properties of the document
        Fixed <rdar://problem/3960973> DOM objects for plugin elements are not accessible
        Fixed <rdar://problem/3958601> need an additional class ID in WebCore for the Real plug-in

        We now support accessing scriptable plugin objects that are specified with <applet>, <embed>, or <object>
        tags.  Also, if any of these elements are named they can be accessed from the document or window objects.
        Finally, DOM methods are properties will be forwarded appropriately for the plugin's root scriptable object.

        Reviewed by Chris.

        * bindings/objc/objc_instance.h:
        * bindings/objc/objc_instance.mm:
        (ObjcInstance::supportsSetValueOfUndefinedField):
        * bindings/runtime.h:
        (KJS::Bindings::Instance::supportsSetValueOfUndefinedField):
        * bindings/runtime_object.cpp:
        (RuntimeObjectImp::RuntimeObjectImp):
        (RuntimeObjectImp::get):
        (RuntimeObjectImp::put):
        (RuntimeObjectImp::canPut):
        (RuntimeObjectImp::hasProperty):
        (RuntimeObjectImp::defaultValue):
        * bindings/runtime_object.h:
        (KJS::RuntimeObjectImp::fallbackObject):
        * kjs/object.cpp:
        (KJS::ObjectImp::ObjectImp):
        * kjs/object.h:
        (KJS::ObjectImp::forwardingScriptMessage):
        (KJS::ObjectImp::setForwardingScriptMessage):

2005-01-18  Richard Williamson   <rjw@apple.com>

        Back out a change that was incorrectly committed yesterday.

        Reviewed by Chris.

        * bindings/objc/objc_utility.mm:
        (KJS::Bindings::convertValueToObjcValue):

2005-01-17  Richard Williamson   <rjw@apple.com>

        Fixed <rdar://problem/3753030> Need to ensure same origin for plugin binding invocations (origin security rules)

        Keep track of originating execution context and target execution
        context for native JS object wrappers, and perform appropriate
        security checks.

        Reviewed by David Harrison.

        * bindings/NP_jsobject.cpp:
        (_isSafeScript):
        (_NPN_CreateScriptObject):
        (_NPN_Invoke):
        (_NPN_Evaluate):
        (_NPN_GetProperty):
        (_NPN_SetProperty):
        (_NPN_RemoveProperty):
        (_NPN_HasProperty):
        (_NPN_HasMethod):
        (_NPN_SetException):
        * bindings/NP_jsobject.h:
        * bindings/c/c_instance.cpp:
        (CInstance::CInstance):
        (CInstance::stringValue):
        * bindings/c/c_instance.h:
        * bindings/c/c_utility.cpp:
        (convertValueToNPVariant):
        * bindings/jni/jni_instance.cpp:
        (JavaInstance::JavaInstance):
        (JavaInstance::valueOf):
        * bindings/jni/jni_instance.h:
        * bindings/objc/WebScriptObject.mm:
        (-[WebScriptObject _initializeWithObjectImp:KJS::originExecutionContext:Bindings::executionContext:Bindings::]):
        (-[WebScriptObject _initWithObjectImp:KJS::originExecutionContext:Bindings::executionContext:Bindings::]):
        (-[WebScriptObject KJS::Bindings::]):
        (-[WebScriptObject _setOriginExecutionContext:KJS::Bindings::]):
        (-[WebScriptObject _isSafeScript]):
        (-[WebScriptObject callWebScriptMethod:withArguments:]):
        (-[WebScriptObject evaluateWebScript:]):
        (-[WebScriptObject setValue:forKey:]):
        (-[WebScriptObject valueForKey:]):
        (-[WebScriptObject removeWebScriptKey:]):
        (-[WebScriptObject stringRepresentation]):
        (-[WebScriptObject webScriptValueAtIndex:]):
        (-[WebScriptObject setWebScriptValueAtIndex:value:]):
        (+[WebScriptObject _convertValueToObjcValue:KJS::originExecutionContext:Bindings::executionContext:Bindings::]):
        * bindings/objc/WebScriptObjectPrivate.h:
        * bindings/objc/objc_instance.h:
        * bindings/objc/objc_runtime.mm:
        (convertValueToObjcObject):
        * bindings/objc/objc_utility.mm:
        (KJS::Bindings::convertValueToObjcValue):
        * bindings/runtime.cpp:
        (Instance::Instance):
        (Instance::operator=):
        * bindings/runtime.h:
        (KJS::Bindings::Instance::Instance):
        (KJS::Bindings::Instance::setExecutionContext):
        (KJS::Bindings::Instance::executionContext):
        * bindings/runtime_root.cpp:
        (RootObject::setInterpreter):
        * bindings/runtime_root.h:
        * kjs/interpreter.h:
        (KJS::Interpreter::isGlobalObject):
        (KJS::Interpreter::interpreterForGlobalObject):
        (KJS::Interpreter::isSafeScript):

=== Safari-179 ===

2005-01-13  Vicki Murley <vicki@apple.com>

        Reviewed by Adele.

        - fix <rdar://problem/3946836> Safari about box lists 2004 instead of 2005
 
        * JavaScriptCore.pbproj/project.pbxproj: bump "2004" to "2005"

2005-01-12  Richard Williamson   <rjw@apple.com>

        Avoid additional work on dealloc by adding early out to
        removeNativeReference().  (This will save time on dealloc
        for all ObjC DOM objects.)

        Reviewed by Darin.

        * bindings/runtime_root.cpp:
        (KJS::Bindings::removeNativeReference):

2005-01-12  Richard Williamson   <rjw@apple.com>

        Fixed <rdar://problem/3923356> REGRESSION: Java/JavaScript security checks working incorrectly

        We were always returning the first "root" object for all runtime
        objects.  Changed 0 in loop to i, the index.

        Reviewed by David Harrison.

        * bindings/runtime_root.cpp:
        (KJS::Bindings::rootForImp):

2005-01-11  Richard Williamson   <rjw@apple.com>

        Fixed <rdar://problem/3887930> Must use new Java plug-in API to get/set fields so exception handling works (fixes many LiveConnect crashes)

        Use the new dispatching API to invoke JNI, rather than calling JNI
        directly.

        Reviewed by David Harrison.

        * bindings/jni/jni_instance.cpp:
        (JavaInstance::invokeMethod):
        * bindings/jni/jni_runtime.cpp:
        (JavaField::dispatchValueFromInstance):
        (JavaField::valueFromInstance):
        (JavaField::dispatchSetValueToInstance):
        (JavaField::setValueToInstance):
        * bindings/jni/jni_runtime.h:
        * bindings/jni/jni_utility.cpp:
        (KJS::Bindings::convertValueToJValue):

=== Safari-178 ===

=== Safari-177 ===

=== Safari-176 ===

2004-12-17  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Kevin.

        <rdar://problem/3926869> Opening caches window after running PLT causes crash
        
        * kjs/protected_values.cpp:
        (KJS::ProtectedValues::getProtectCount): Don't include simple numbers in
        the protected value table.
        (KJS::ProtectedValues::increaseProtectCount): Ditto.
        (KJS::ProtectedValues::decreaseProtectCount): Ditto.

2004-12-16  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        - fixed <rdar://problem/3920764> Unimplemented String methods toLocaleLowerCase and toLocaleUpperCase

        * kjs/string_object.h: Added toLocaleLowerCase and toLocaleUpperCase.
        * kjs/string_object.cpp: (StringProtoFuncImp::call): Made locale versions be synonmyms for the
        non-locale-specific versions.
        * kjs/string_object.lut.h: Regenerated.

2004-12-14  Richard Williamson   <rjw@apple.com>

        Pass URL of plugin view when call into JNI.

        Reviewed by Chris.

        * bindings/jni/jni_objc.mm:
        (KJS::Bindings::dispatchJNICall):

2004-12-13  Richard Williamson   <rjw@apple.com>

        Fixed <rdar://problem/3827799> repro. crash with IBM Rational ClearCase Web under Safari (Java/LiveConnect-related)

        Add support for calling static Java methods from JavaScript.

        Reviewed by Maciej.

        * bindings/jni/jni_instance.cpp:
        (JavaInstance::invokeMethod):
        * bindings/jni/jni_runtime.cpp:
        (JavaMethod::JavaMethod):
        * bindings/jni/jni_runtime.h:
        (KJS::Bindings::JavaMethod::isStatic):
        * bindings/jni/jni_utility.cpp:
        (callJNIStaticMethod):
        (KJS::Bindings::callJNIBooleanMethod):
        (KJS::Bindings::callJNIStaticBooleanMethod):
        * bindings/jni/jni_utility.h:

2004-12-13  Richard Williamson   <rjw@apple.com>

        Fixed <rdar://problem/3887767> LiveConnect doesn't propagate Java exceptions back to JavaScript (prevents security suite from running)

        Reviewed by John.

        * bindings/jni/jni_instance.cpp:
        (JavaInstance::invokeMethod):
        * bindings/jni/jni_objc.mm:
        (KJS::Bindings::dispatchJNICall):
        * bindings/jni/jni_runtime.h:
        * bindings/jni/jni_utility.h:

=== Safari-175 ===

2004-12-07  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin.

        <rdar://problem/3908017> REGRESSION (172-173): assertion in ObjectImp::construct trying to create JS error (24hourfitness.com)

        The fix was to implement copy constructor and assignment operator,
        the ones that worked on the base class did not replace the
        defaults apparently!
        
        * kjs/protect.h:
        (KJS::ProtectedValue::ProtectedValue):
        (KJS::ProtectedValue::operator=):
        (KJS::ProtectedObject::ProtectedObject):
        (KJS::ProtectedObject::operator=):
        
        Also fixed a bug in the GC test mode that compares the results of
        the old collector and the new collector.

        * kjs/value.cpp:
        (ValueImp::mark):

=== Safari-173 ===

2004-11-23  Richard Williamson   <rjw@apple.com>

        Fixed <rdar://problem/3890385> field and method cache incorrectly capped (c bindings)

        Reviewed by Ken.

        * bindings/c/c_class.cpp:
        (CClass::_commonInit):

2004-11-21  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Ken.

        <rdar://problem/3889696> Enable conservative garbage collection for JavaScript
        
        * kjs/collector.cpp:
        (KJS::Collector::Thread::Thread):
        (KJS::destroyRegisteredThread):
        (KJS::initializeRegisteredThreadKey):
        (KJS::Collector::registerThread):
        (KJS::Collector::markStackObjectsConservatively):
        (KJS::Collector::markCurrentThreadConservatively):
        (KJS::Collector::markOtherThreadConservatively):
        * kjs/collector.h:
        * kjs/internal.cpp:
        (lockInterpreter):
        * kjs/value.h:

=== Safari-172 ===

2004-11-15  Richard Williamson   <rjw@apple.com>

        Fixed <rdar://problem/3880561> Default string value of ObjC object in JS should be [obj description].

        Reviewed by Hyatt.

        * bindings/objc/objc_instance.mm:
        (ObjcInstance::stringValue):
        * bindings/objc/objc_utility.h:
        * bindings/objc/objc_utility.mm:
        (KJS::Bindings::convertNSStringToString):
        (KJS::Bindings::convertObjcValueToValue):

=== Safari-171 ===

2004-11-09  Chris Blumenberg  <cblu@apple.com>

        Fixed: <rdar://problem/3872724> soft link against JavaVM to save ~2MB RSHRD

        Reviewed by rjw.

        * ChangeLog:
        * JavaScriptCore.pbproj/project.pbxproj: don't link against JavaVM
        * bindings/softlinking.c: Added.
        (loadFramework): new
        (getFunctionPointer): new
        (JNI_GetCreatedJavaVMs): load JavaVM if not already loaded, get _JNI_GetCreatedJavaVMs symbol if we don't already have it, call JNI_GetCreatedJavaVMs

=== Safari-170 ===

2004-11-04  Darin Adler  <darin@apple.com>

        Reviewed by Ken.

        - fixed <rdar://problem/3865365> since -[WebScriptObject dealloc] does not call [super dealloc], the build will fail due to a warning
        - fixed behavior so that [[WebScriptObject alloc] initWithCoder:] doesn't leak WebUndefined instances
          and incidentally so that [[WebScriptObject alloc] init] returns the single shared instance rather
          than allocating a new one

        * bindings/objc/WebScriptObject.mm: Removed some stray semicolons.
        (+[WebUndefined allocWithZone:]): Made this the common bottleneck that returns the single instance
        of WebUndefined, since it's the single method that normally allocates new instances. Calls super to
        actually allocate only the very first time it's called.
        (-[WebUndefined initWithCoder:]): Simplified to just return self (no reason to re-lookup the single
        shared instance since there can be only one).
        (-[WebUndefined copyWithZone:]): Ditto.
        (-[WebUndefined retain]): Ditto.
        (-[WebUndefined retainCount]): Use UINT_MAX constant here (matches usage in NSObject.m for retain count
        of class).
        (-[WebUndefined autorelease]): Simplified to just return self (see above).
        (-[WebUndefined copy]): No need to override this since it just turns around and calls copyWithZone:.
        (-[WebUndefined dealloc]): Added an assertion since this method should never be called. Also added
        a call to [super dealloc] after return; to make the new -Wdealloc-check compiler happy (fixing the
        bug mentioned above).
        (+[WebUndefined undefined]): Reimplemented; calls allocWithZone:NULL to get to the shared instance.
        No need to call init, since that's a no-op for this class.

2004-11-03  David Harrison  <harrison@apple.com>

        Reviewed by Darin.
        
        Eliminate the use of a marker file to determine how to build.

        * .cvsignore:
        * Makefile.am:

2004-11-01  Richard Williamson   <rjw@apple.com>

        Fixed <rdar://problem/3861469> Latest Real player crashes Safari on some sites.

        Reviewed by Ken.

        * bindings/c/c_instance.cpp:
        (CInstance::invokeMethod):
        (CInstance::invokeDefaultMethod):
        Initialize out parameters to void type.

        * bindings/c/c_runtime.cpp:
        (CField::valueFromInstance):
        (CField::setValueToInstance):
        Initialize out parameters to void type.
        Also added additional checks to protect against classes that 
        don't implement all functions.

2004-11-01  Richard Williamson   <rjw@apple.com>

        Fixed <rdar://problem/3861257> WebUndefined should be returned for undefined values

        Reviewed by John.

        * ChangeLog:
        * bindings/objc/WebScriptObject.mm:
        (+[WebScriptObject _convertValueToObjcValue:KJS::root:Bindings::]):
        Added additional conversion Undefined -> WebUndefined.
        * bindings/objc/objc_utility.mm:
        (KJS::Bindings::convertObjcValueToValue):
        Added additional conversion WebUndefined -> Undefined.

2004-11-01  Darin Adler  <darin@apple.com>

        - fixed <rdar://problem/3855573> Remove reference to "WebScriptMethods" from WebScriptObject.h comments

        * bindings/objc/WebScriptObject.h: Removed unneeded #ifdef protection for multiple includes (since
        this is an Objective-C header and we use #import for those). Fixed comments as requested in the bug
        report to match the contents of the file.

=== Safari-169 ===

=== Safari-168 ===

2004-10-22  Ken Kocienda  <kocienda@apple.com>

        Reviewed by me

        * JavaScriptCore.pbproj/project.pbxproj:  
        Add GCC_ENABLE_OBJC_GC and GCC_FAST_OBJC_DISPATCH flags.

=== Safari-167 ===

2004-10-13  Richard Williamson   <rjw@apple.com>

        Moved boolean checks prior to NSNumber checks.  booleans are
        NSNumbers.

        Follow on to <rdar://problem/3821515> binding layer needs to convert NSNumber-bools to js type boolean not number.

        Reviewed by John.

        * bindings/objc/objc_utility.mm:
        (KJS::Bindings::convertObjcValueToValue):

2004-10-12  Richard Williamson   <rjw@apple.com>

        Fixed access to DOM object via WebScriptObject API.
        The execution context for DOM objects wasn't being found.
        <rdar://problem/3831372> The valueForKey method for @"offsetLeft" on a paragraph element causes a crash.

        Reviewed by Chris.

        * bindings/objc/WebScriptObject.mm:
        (_didExecute):
        (-[WebScriptObject KJS::Bindings::]):
        (-[WebScriptObject callWebScriptMethod:withArguments:]):
        (-[WebScriptObject evaluateWebScript:]):
        (-[WebScriptObject setValue:forKey:]):
        (-[WebScriptObject valueForKey:]):
        (-[WebScriptObject stringRepresentation]):
        * bindings/objc/WebScriptObjectPrivate.h:

2004-10-09  Darin Adler  <darin@apple.com>

        Reviewed by Kevin.

        - fixed <rdar://problem/3804661> REGRESSION: JavaScriptCore framework now has two init routines

        * bindings/NP_jsobject.cpp: Fixed unnecessarily-complex globals set up that was
        creating an init routine.

        * kjs/ustring.cpp: Changed around the UString::Rep::empty construction to not
        require a global constructor that creates an init routine.

2004-10-09  Darin Adler  <darin@apple.com>

        Reviewed by Kevin.

        - fixed <rdar://problem/3822618> REGRESSION (164-165): expedia.com's popup help doesn't work

        * kjs/reference.cpp: (Reference::putValue): Change so that references not found in any object
        work with the window object of the page the function is in, not the page of the caller. This
        is what all other browsers do. This code was hidden before by the "everything is defined on
        window object" hack in WebCore.

2004-10-07  Richard Williamson   <rjw@apple.com>

        Added simple JavaScript call tracing.  Very useful for
        debugging complex pages.

        Tracing is only available in development builds and is
        enabled by:

        (gdb) set traceJavaScript = 1

        or programatically

        setTraceJavaScript(true)

        Function, args, and return values are printed to console.  Very
        verbose.

        Reviewed by Ken.

        * kjs/function_object.cpp:
        (FunctionProtoFuncImp::call):
        * kjs/object.cpp:
        (KJS::Object::call):

=== Safari-166 ===

2004-10-05  Richard Williamson   <rjw@apple.com>

        Fixed <rdar://problem/3819234> NPN_SetException (and throwException:) isn't implemented

        Reviewed by Chris.

        * bindings/NP_jsobject.cpp:
        (_NPN_SetException):
        * bindings/npruntime.cpp:
        (_NPN_SetExceptionWithUTF8):
        * bindings/objc/WebScriptObject.mm:
        (+[WebScriptObject throwException:]):
        * kjs/internal.h:
        (KJS::InterpreterImp::context):

2004-10-05  Richard Williamson   <rjw@apple.com>

        Fixed <rdar://problem/3821515> binding layer needs to convert NSNumber-bools to js type boolean not number

        Reviewed by Ken.

        * bindings/objc/objc_utility.mm:
        (KJS::Bindings::convertObjcValueToValue):

2004-10-04  Darin Adler  <darin@apple.com>

        Reviewed by Ken.

        - rolled in a fix the KDE folks did for the operations that generate HTML fragments

        * kjs/string_object.cpp: (StringProtoFuncImp::call): Added quote marks to generated HTML.

        - rolled out an old workaround we don't need any more

        * JavaScriptCore.pbproj/project.pbxproj: Remove -Wno-long-double because the <math.h> issue that
        required it is no longer there.

2004-09-30  Richard Williamson  <rjw@apple.com>

        Fixed <rdar://problem/3821215> NPN hasMethod and hasProperty functions should take NPObjects, not NPClass

        Reviewed by Chris.

        * bindings/NP_jsobject.cpp:
        (_NPN_GetProperty):
        (_NPN_HasProperty):
        (_NPN_HasMethod):
        * bindings/c/c_class.cpp:
        (CClass::methodsNamed):
        (CClass::fieldNamed):
        * bindings/c/c_class.h:
        * bindings/c/c_instance.cpp:
        (CInstance::invokeMethod):
        * bindings/jni/jni_class.cpp:
        (JavaClass::methodsNamed):
        * bindings/jni/jni_class.h:
        * bindings/npruntime.h:
        * bindings/objc/objc_class.h:
        * bindings/objc/objc_class.mm:
        (ObjcClass::methodsNamed):
        * bindings/runtime.h:
        * bindings/runtime_object.cpp:
        (RuntimeObjectImp::get):
        (RuntimeObjectImp::hasProperty):

2004-09-29  Chris Blumenberg  <cblu@apple.com>

        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.

        Reviewed by rjw.

        * JavaScriptCore.pbproj/project.pbxproj:
        * bindings/NP_jsobject.cpp:
        (_NPN_CreateScriptObject):
        (_NPN_InvokeDefault):
        (_NPN_Invoke):
        (_NPN_Evaluate):
        (_NPN_GetProperty):
        (_NPN_SetProperty):
        (_NPN_RemoveProperty):
        (_NPN_HasProperty):
        (_NPN_HasMethod):
        * bindings/c/c_class.cpp:
        (CClass::methodsNamed):
        (CClass::fieldNamed):
        * bindings/c/c_instance.cpp:
        (CInstance::CInstance):
        (CInstance::~CInstance):
        (CInstance::operator=):
        (CInstance::invokeMethod):
        (CInstance::invokeDefaultMethod):
        * bindings/c/c_runtime.cpp:
        * bindings/c/c_runtime.h:
        (KJS::Bindings::CField::name):
        (KJS::Bindings::CMethod::name):
        * bindings/npruntime.cpp:
        (_NPN_GetStringIdentifier):
        (_NPN_GetStringIdentifiers):
        (_NPN_GetIntIdentifier):
        (_NPN_IdentifierIsString):
        (_NPN_UTF8FromIdentifier):
        (_NPN_IntFromIdentifier):
        (NPN_InitializeVariantWithObject):
        (_NPN_ReleaseVariantValue):
        (_NPN_CreateObject):
        (_NPN_RetainObject):
        (_NPN_ReleaseObject):
        (_NPN_SetExceptionWithUTF8):
        (_NPN_SetException):

2004-09-26  Darin Adler  <darin@apple.com>

        * kjs/string_object.cpp: (StringProtoFuncImp::call): Remove strange use of high() and
        low() to get Unicode value of character, and just use unicode().

2004-09-26  Darin Adler  <darin@apple.com>

        - refine charAt/charCodeAt fix slightly

        * kjs/string_object.cpp: (StringProtoFuncImp::call): Treat undefined the same was as an
        omitted parameter, as we do everywhere else, and as other browsers do here.

2004-09-26  Darin Adler  <darin@apple.com>

        Reviewed by Kevin.

        - fixed <rdar://problem/3816097> REGRESSION: mailblocks, and presumably many other pages, failing because variable not found

        * kjs/internal.cpp: (InterpreterImp::evaluate): Process variable declarations before executing
        the program. We were doing this properly for functions, but not entire programs.

        - fixed <rdar://problem/3814706> REGRESSION: text fields in mailblocks wizards do not accept keystrokes due to use of charCodeAt()

        * kjs/string_object.cpp: (StringProtoFuncImp::call): Changed the implementation of charAt
        and charCodeAt to treat a missing parameter as an index of 0, rather than an invalid index.

        * tests/mozilla/expected.html: Update for two tests that now pass with these changes.

=== Safari-165 ===

=== Safari-164 ===

2004-09-14  Richard Williamson   <rjw@apple.com>

        1.  Add class parameter to object allocation function.  This is somewhat redundant, given that
        the allocation function is in the class function vector, but people wanted to use the same
        allocation function for different classes.
        
        2.  Renamed NPN_Class to NPN_Invoke to match the name in the function vector.
        
        3.  Add support for a default function on an object.  This is a feature that ActiveX supports,
        and will allow JavaScript code to be written that will look exactly the same for both ActiveX
        plugins and Netscape or WebKit plugins.  There are implementations included for the 'C' and
        'Objective-C' bindings.
        
        There bugs are covered by
        
        <rdar://problem/3776343> Support for default functions in the JavaScript bindings
        <rdar://problem/3779186> NPN_Call needs to be renamed to NPN_Invoke
        <rdar://problem/3674754> Need to implement latest npruntime.h

        Reviewed by John.

        * bindings/NP_jsobject.cpp:
        (jsAllocate):
        (NPN_InvokeDefault):
        (NPN_Invoke):
        * bindings/c/c_class.cpp:
        * bindings/c/c_instance.cpp:
        (CInstance::CInstance):
        (CInstance::operator=):
        (CInstance::invokeMethod):
        (CInstance::invokeDefaultMethod):
        * bindings/c/c_instance.h:
        * bindings/c/c_runtime.cpp:
        * bindings/c/c_runtime.h:
        * bindings/jni/jni_instance.cpp:
        (JavaInstance::invokeDefaultMethod):
        * bindings/jni/jni_instance.h:
        * bindings/npruntime.cpp:
        (NPN_CreateObject):
        * bindings/npruntime.h:
        * bindings/objc/WebScriptObject.h:
        * bindings/objc/objc_class.mm:
        (ObjcClass::fallbackObject):
        * bindings/objc/objc_instance.h:
        * bindings/objc/objc_instance.mm:
        (ObjcInstance::invokeDefaultMethod):
        * bindings/objc/objc_runtime.h:
        * bindings/objc/objc_runtime.mm:
        (ObjcFallbackObjectImp::ObjcFallbackObjectImp):
        (ObjcFallbackObjectImp::get):
        (ObjcFallbackObjectImp::put):
        (ObjcFallbackObjectImp::canPut):
        (ObjcFallbackObjectImp::implementsCall):
        (ObjcFallbackObjectImp::call):
        (ObjcFallbackObjectImp::hasProperty):
        (ObjcFallbackObjectImp::deleteProperty):
        (ObjcFallbackObjectImp::defaultValue):
        * bindings/runtime.h:
        (KJS::Bindings::Class::fallbackObject):
        (KJS::Bindings::Instance::getValueOfUndefinedField):
        (KJS::Bindings::Instance::setValueOfUndefinedField):
        (KJS::Bindings::Instance::valueOf):
        * bindings/runtime_object.cpp:
        (RuntimeObjectImp::implementsCall):
        (RuntimeObjectImp::call):
        * bindings/runtime_object.h:

2004-09-13  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin.

        <rdar://problem/3794735> Gmail- sending a very long message with Safari is so slow it seems like a hang
        
        * kjs/string_object.cpp:
        (StringProtoFuncImp::call): Replaced implementation of replace()
        method with function below...
        (replace): In order to avoid excessive allocation and copying,
        figure out the ranges of the original string and replacement
        strings to be assembled, instead of constantly creating new
        strings at each substitution. The old behavior is basically O(N^2)
        for a global replace on a pattern that matches many places in the
        string.
        (regExpIsGlobal): Helper function for the above.
        (expandSourceRanges): ditto
        (pushSourceRange): ditto
        (expandReplacements): ditto
        (pushReplacement): ditto
        * kjs/ustring.cpp:
        (KJS::UString::spliceSubstringsWithSeparators): New method that
        pieces together substring ranges of this string together with
        specified separators, all at one go.
        * kjs/ustring.h:
        (KJS::UString::Range::Range): Added new helper class to represent
        substring choices.

2004-09-14  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin.

        - fixed <rdar://problem/3800315> encode-URI-test layout test is failing
        
        * kjs/function.cpp:
        (KJS::GlobalFuncImp::call): Make sure to escape null
        characters. This is a bug in the new code that made part of the
        test fail.

2004-09-13  Darin Adler  <darin@apple.com>

        Reviewed by Kevin and Maciej.

        - new function to support fix for DIG bug in WebCore

        * kjs/scope_chain.h: Added new push function that pushes another entire scope chain.
        * kjs/scope_chain.cpp: (KJS::ScopeChain::push): Ditto.

2004-09-12  Darin Adler  <darin@apple.com>

        * tests/mozilla/expected.html: Updated test results for 3 more tests that pass with the new version
        of escape and unescape.

2004-09-12  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        - fixed <rdar://problem/3798209> any non-ASCII characters are garbled in the result of toLocaleString

        * kjs/date_object.cpp:
        (formatLocaleDate): Replaced two old functions that used LongDateTime with this one new function that
        uses CFDateFormatter.
        (DateProtoFuncImp::call): Call the new formatLocaleDate instead of both formatLocaleDate and formatLocaleTime.

2004-09-09  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Richard.

        <rdar://problem/3493140> REGRESSION (85-100): cedille displays %-escaped in JavaScript message at hotmail.com

        * kjs/function.cpp:
        (KJS::GlobalFuncImp::call): Replace our escape() and unescape() implementations with
        ones from KDE KJS, which have the proper latin-1 behavior to match Win IE.
        * kjs/lexer.cpp:
        (Lexer::isHexDigit): Made static and non-const.
        * kjs/lexer.h:

=== Safari-163 ===

2004-09-06  Darin Adler  <darin@apple.com>

        * JavaScriptCore.pbproj/project.pbxproj: Bump MACOSX_DEPLOYMENT_TARGET to 10.3.

=== Safari-162 ===

2004-09-01  Richard Williamson   <rjw@apple.com>

        Add pid to exception messages (to help debug dashboard clients).

        Reviewed by Chris.

        * kjs/interpreter.cpp:
        (Interpreter::evaluate):

=== Safari-161 ===

2004-08-20  Richard Williamson   <rjw@apple.com>

        Implemented new JNI abstraction.  We no longer invoke Java methods
        directly with JNI, rather we call into the plugin.  This allows the
        plugin to dispatch the call to the appropriate VM thread.  This
        change should (will?) fix a whole class of threading related problems with
        the Java VM.

        Reviewed by Hyatt.

        * JavaScriptCore.pbproj/project.pbxproj:
        * bindings/c/c_instance.h:
        (KJS::Bindings::CInstance::setExecutionContext):
        (KJS::Bindings::CInstance::executionContext):
        * bindings/jni/jni_instance.cpp:
        (JavaInstance::JavaInstance):
        (JavaInstance::invokeMethod):
        (JavaInstance::setExecutionContext):
        (JavaInstance::executionContext):
        * bindings/jni/jni_instance.h:
        * bindings/jni/jni_jsobject.cpp:
        (JSObject::convertJObjectToValue):
        * bindings/jni/jni_runtime.cpp:
        (JavaField::JavaField):
        (JavaArray::convertJObjectToArray):
        (JavaField::valueFromInstance):
        (JavaArray::JavaArray):
        (JavaArray::valueAt):
        * bindings/jni/jni_runtime.h:
        (KJS::Bindings::JavaArray::operator=):
        (KJS::Bindings::JavaArray::executionContext):
        * bindings/jni/jni_utility.h:
        * bindings/objc/objc_instance.h:
        (KJS::Bindings::ObjcInstance::setExecutionContext):
        (KJS::Bindings::ObjcInstance::executionContext):
        * bindings/runtime.cpp:
        (Instance::createBindingForLanguageInstance):
        * bindings/runtime.h:
        * bindings/runtime_root.h:
        (KJS::Bindings::RootObject::nativeHandle):

=== Safari-158 ===

2004-08-19  Vicki Murley  <vicki@apple.com>

        Reviewed by John.

        * kjs/property_map.cpp:
        (KJS::PropertyMap::put): initialize deletedElementIndex to zero, to make the compiler happy

2004-08-17  Darin Adler  <darin@apple.com>

        Reviewed by Adele.

        - fixed <rdar://problem/3746676> SAP WebDynpro app hangs inside JavaScript property map hash table code (deleted sentinel problem)

        * kjs/property_map.h: Added some private functions.
        * kjs/property_map.cpp:
        (KJS::PropertyMap::clear): Set sentinelCount to 0.
        (KJS::PropertyMap::put): Complete search for the element before choosing to use the deleted-element sentinel.
        Also keep sentinel count up to date when we destroy a sentinel by overwriting with a new added element.
        (KJS::PropertyMap::expand): Added. Calls rehash with a size 2x the old size, or 16.
        (KJS::PropertyMap::rehash): Added. Refactored the rehash code into a separate function.
        (KJS::PropertyMap::remove): Add one to sentinelCount, and rehash if 1/4 or more of the elements are
        deleted-element sentinels.
        (KJS::PropertyMap::checkConsistency): Check the sentinelCount.

2004-08-16  Maciej Stachowiak  <mjs@apple.com>

        Code change by Eric Albert, reviewd by me.

        <rdar://problem/3571960> washingtonpost.com claims I don't have cookies enabled and won't let me read articles

        * kjs/date_object.cpp:
        (timetUsingCF): Clamp time to LONG_MAX (getting rid of time_t
        entirely would be even better, but is not required to fix this bug.

=== Safari-157 ===

2004-08-16  Richard Williamson   <rjw@apple.com>

        Fixed <rdar://problem/3581092> cash in KJS::Bindings::JSObject::eval at tcvetantcvetkov.com

        Adds bullet proofing to protect against evaluation of bogus JS in all the flavors of bindings (Java, C, and ObjC).

        Reviewed by Chris.

        * bindings/NP_jsobject.cpp:
        (NPN_Evaluate):
        * bindings/jni/jni_jsobject.cpp:
        (JSObject::eval):
        * bindings/objc/WebScriptObject.mm:
        (-[WebScriptObject evaluateWebScript:]):

2004-08-15  Richard Williamson   <rjw@apple.com>

        More updates to np headers.  Implemented new NPN functions.

        Reviewed by Darin.

        * bindings/NP_jsobject.cpp:
        (NPN_HasProperty):
        (NPN_HasMethod):
        * bindings/npapi.h:
        * bindings/npruntime.h:

2004-08-13  Darin Adler  <darin@apple.com>

        - fix build so we can compile again

        * bindings/npapi.h: Added. Richard forgot to check this in. The one I'm checking in here
        is good enough so that we can compile, but it's only a stopgap measure, because I think
        Richard has a newer one he wants to check in.

2004-08-12  Richard Williamson   <rjw@apple.com>

        Bring npruntime.h and friends closer to compliance with
        latest spec.

        Reviewed by Maciej.

        * JavaScriptCore.pbproj/project.pbxproj:
        * bindings/NP_jsobject.cpp:
        (jsAllocate):
        (_NPN_CreateScriptObject):
        (NPN_Call):
        (NPN_Evaluate):
        (NPN_GetProperty):
        (NPN_SetProperty):
        (NPN_RemoveProperty):
        * bindings/NP_jsobject.h:
        * bindings/c/c_instance.cpp:
        (CInstance::invokeMethod):
        * bindings/c/c_utility.cpp:
        (convertNPVariantToValue):
        * bindings/npruntime.cpp:
        (NPN_IdentifierIsString):
        (NPN_VariantIsVoid):
        (NPN_VariantIsNull):
        (NPN_VariantIsUndefined):
        (NPN_VariantIsBool):
        (NPN_VariantIsInt32):
        (NPN_VariantIsDouble):
        (NPN_VariantIsString):
        (NPN_VariantIsObject):
        (NPN_VariantToBool):
        (NPN_VariantToString):
        (NPN_VariantToInt32):
        (NPN_VariantToDouble):
        (NPN_VariantToObject):
        (NPN_InitializeVariantAsVoid):
        (NPN_InitializeVariantAsNull):
        (NPN_InitializeVariantAsUndefined):
        (NPN_InitializeVariantWithBool):
        (NPN_InitializeVariantWithInt32):
        (NPN_InitializeVariantWithDouble):
        (NPN_InitializeVariantWithString):
        (NPN_InitializeVariantWithStringCopy):
        (NPN_InitializeVariantWithObject):
        (NPN_InitializeVariantWithVariant):
        (NPN_ReleaseVariantValue):
        (NPN_CreateObject):
        * bindings/npruntime.h:
        (_NPString::):
        (_NPString::_NPVariant::):
        * bindings/npruntime_priv.h: Added.

2004-08-12  Darin Adler  <darin@apple.com>

        Reviewed by Adele.

        - fixed 3 problems with parse functions that I just wrote, fixing 3 more Mozilla JavaScript tests

        * kjs/function.cpp:
        (KJS::parseDigit): Fix typo, 'Z' instead of 'z', that prevented lowercase hex digits from working.
        (KJS::parseInt): Add octal support. Specification says it's optional, but I guess not.
        (KJS::parseFloat): Fix check for "0x" in parseFloat to return 0 rather than NaN. Also add code
        to skip leading "+" or "-".

=== Safari-156 ===

2004-08-12  Darin Adler  <darin@apple.com>

        Reviewed by Ken.

        - fixed 43 Mozilla JavaScript tests

        * kjs/date_object.h: Change parseDate and timeClip to take and return doubles.
        * kjs/date_object.cpp:
        (DateObjectImp::construct): Change to use a timeClip function that takes and returns a double rather
        than constructing a number object to pass to it.
        (DateObjectFuncImp::call): Change to use a parseDate function that returns a double.
        (KJS::parseDate): Change to return a double instead of creating the Number object here.
        (KJS::timeClip): Implement this as specified in the language standard.

        * kjs/error_object.cpp: (NativeErrorImp::NativeErrorImp): Set the DontDelete, ReadOnly, and DontEnum
        flags on the prototype property.

        * kjs/function.cpp:
        (KJS::FunctionImp::get): Return null rather than undefined for arguments when the function is not
        currently in scope.
        (KJS::isStrWhiteSpace): Added. Matches specification for StrWhiteSpace. Could move it to some utility
        file later.
        (KJS::parseDigit): Added. Helper function for parseInt.
        (KJS::parseInt): Added. Integer parser that puts result in a double so we're not limited to what
        strtoll can handle. Also matches standard more closely.
        (KJS::parseFloat): Added. Handles "0x" properly and passes flag to make empty string turn into NaN
        instead of 0.
        (KJS::GlobalFuncImp::call): Use the new parseInt and parseFloat.

        * kjs/function_object.cpp: (FunctionPrototypeImp::FunctionPrototypeImp): Add a length property.

        * kjs/lexer.h: Added error flag and sawError() function for detecting errors.
        * kjs/lexer.cpp:
        (Lexer::setCode): Clear error state.
        (Lexer::lex): Set error state if the lexer encounters an error

        * kjs/internal.cpp:
        (NumberImp::toString): Roll in change from KDE version to special case 0 so we handle -0 correctly.
        (Parser::parse): Use new lexer error method so those errors are treated like parser errors.

        * kjs/math_object.cpp: (MathFuncImp::call): Change min and max to treat -0 as less than +0.
        Change round to round values between -0.5 and -0 to -0 instead of +0.

        * kjs/nodes.h: Add evaluateReference function to GroupNode.
        * kjs/nodes.cpp: (GroupNode::evaluateReference): Pass references through groups (parenthesized
        expressions) properly so that expressions like "delete (x.y)" work. Before, the parentheses
        would change x.y into a value that can't be deleted as a side effect.

        * kjs/string_object.cpp: Change parameter count for indexOf and lastIndexOf from 2 to 1 to match
        the specification.

        * kjs/testkjs.cpp: Rolled in changes from KDE to add a "quit" function to the test tool and
        get rid of the fixed size limit for code.

        * kjs/ustring.cpp: (KJS::UString::substr): Added optimized case for substr(0, length) so it just
        returns the string without creating a new Rep, since I'm using substr in a place where it will
        often be passed a 0.

        * tests/mozilla/ecma/String/15.5.4.11-1.js: Fixed one wrong entry in the Unicode table I added to
        the other day that was making a couple tests fail.
        * tests/mozilla/ecma/String/15.5.4.12-1.js: Ditto.
        * tests/mozilla/ecma/String/15.5.4.12-2.js: Ditto.
        * tests/mozilla/ecma/String/15.5.4.12-3.js: Ditto.
        * tests/mozilla/ecma/String/15.5.4.12-4.js: Ditto.
        * tests/mozilla/ecma/String/15.5.4.12-5.js: Ditto.

        * kjs/string_object.lut.h: Regenerated.

2004-08-11  Darin Adler  <darin@apple.com>

        - fixed a tiny problem with the UTF-16 PCRE check-in

        * pcre/maketables.c: (pcre_maketables): Fix mistake in table-generating code that sometimes caused
        the ctype_meta flag to get set in items that should not have it.

        * pcre/chartables.c: Regenerated.

2004-08-10  Richard Williamson   <rjw@apple.com>

        Fixed <rdar://problem/3674747> Need to implement invokeUndefinedMethodFromWebScript:withArguments:

        The following WebScripting methods are now supported on bound
        objects:

        - (id)invokeUndefinedMethodFromWebScript:(NSString *)name withArguments:(NSArray *)args;
        - (void)setValue:(id)value forUndefinedKey:(NSString *)key
        - (id)valueForUndefinedKey:(NSString *)key

        Reviewed by Chris.

        * bindings/c/c_class.cpp:
        (CClass::fieldNamed):
        * bindings/c/c_class.h:
        * bindings/jni/jni_class.cpp:
        (JavaClass::fieldNamed):
        * bindings/jni/jni_class.h:
        * bindings/objc/objc_class.h:
        (KJS::Bindings::ObjcClass::isa):
        * bindings/objc/objc_class.mm:
        (ObjcClass::methodsNamed):
        (ObjcClass::fieldNamed):
        (ObjcClass::fallbackObject):
        * bindings/objc/objc_instance.h:
        * bindings/objc/objc_instance.mm:
        (ObjcInstance::invokeMethod):
        (ObjcInstance::setValueOfField):
        (ObjcInstance::setValueOfUndefinedField):
        (ObjcInstance::getValueOfField):
        (ObjcInstance::getValueOfUndefinedField):
        * bindings/objc/objc_runtime.h:
        (KJS::Bindings::ObjcField::~ObjcField):
        (KJS::Bindings::ObjcField::ObjcField):
        (KJS::Bindings::ObjcField::operator=):
        (KJS::Bindings::FallbackObjectImp::classInfo):
        * bindings/objc/objc_runtime.mm:
        (ObjcField::ObjcField):
        (ObjcField::name):
        (ObjcField::type):
        (ObjcField::valueFromInstance):
        (ObjcField::setValueToInstance):
        (FallbackObjectImp::FallbackObjectImp):
        (FallbackObjectImp::get):
        (FallbackObjectImp::put):
        (FallbackObjectImp::canPut):
        (FallbackObjectImp::implementsCall):
        (FallbackObjectImp::call):
        (FallbackObjectImp::hasProperty):
        (FallbackObjectImp::deleteProperty):
        (FallbackObjectImp::defaultValue):
        * bindings/runtime.h:
        (KJS::Bindings::Class::fallbackObject):
        (KJS::Bindings::Instance::getValueOfUndefinedField):
        (KJS::Bindings::Instance::setValueOfUndefinedField):
        * bindings/runtime_object.cpp:
        (RuntimeObjectImp::get):
        (RuntimeObjectImp::put):
        (RuntimeObjectImp::canPut):
        (RuntimeObjectImp::hasProperty):
        * bindings/testbindings.mm:
        (-[MyFirstInterface valueForUndefinedKey:]):
        (-[MyFirstInterface setValue:forUndefinedKey:]):

2004-08-10  Darin Adler  <darin@apple.com>

        Reviewed by Dave.

        - switch PCRE to do UTF-16 directly instead of converting to/from UTF-8 for speed

        * pcre/pcre.h: Added PCRE_UTF16 switch, set to 1. Added pcre_char typedef, which is char
        or uint16_t depending on the mode, and used appropriate in the 7 public functions
        that need to use it.
        * pcre/pcre.c: Add UTF-16 support to all functions.
        * pcre/study.c: Ditto.

        * pcre/internal.h: Added ichar typedef, which is unsigned char or uint16_t depending on
        the mode. Changed declarations to use symbolic constants and typedefs so we size
        things to ichar when needed.

        * pcre/maketables.c: (pcre_maketables): Change code to make tables that are
        sized to 16-bit characters instead of 8-bit.

        * pcre/get.c:
        (pcre_copy_substring): Use pcre_char instead of char.
        (pcre_get_substring_list): Ditto.
        (pcre_free_substring_list): Ditto.
        (pcre_get_substring): Ditto.
        (pcre_free_substring): Ditto.

        * pcre/dftables.c: (main): Used a bit more const, and use ICHAR sizes instead
        of hard-coding 8-bit table sizes.

        * pcre/chartables.c: Regenerated.

        * kjs/ustring.h: Remove functions that convert UTF-16 to/from UTF-8 offsets.
        * kjs/ustring.cpp: Change the shared empty string to have a unicode pointer that
        is not null. The null string still has a null pointer. This prevents us from
        passing a null through to the regular expression engine (which results in a null
        error even when the string length is 0).

        * kjs/regexp.cpp:
        (KJS::RegExp::RegExp): Null-terminate the pattern and pass it.
        (KJS::RegExp::match): Use the 16-bit string directly, no need to convert to UTF-8.

2004-08-09  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        - fixed 28 Mozilla JavaScript tests

        * kjs/array_object.cpp: (ArrayProtoFuncImp::call): Check for undefined rather than
        checking the number of arguments for the join method.

        * kjs/lexer.cpp: (Lexer::lex): Parse hexadecimal and octal constants in doubles rather
        than integers, so we aren't limited to 32 bits.

        * kjs/math_object.cpp: (MathFuncImp::call): Get rid of many unneeded special cases in
        the implementation of the pow operation. Also simplied a case that was handling positive
        and negative infinity separately.

        * kjs/nodes.cpp: (ShiftNode::evaluate): Keep the result of shifts in a double instead of
        putting them in a long, so that unsigned shift will work properly.

        * kjs/number_object.cpp: Add the DontDelete and ReadOnly flags to the numeric constants.

        * kjs/operations.cpp:
        (KJS::isPosInf): Added an implementation inside APPLE_CHANGES that does not depend on the
        sign of isinf; our isinf function returns +1 even for negative infinity.
        (KJS::isNegInf): And again.
        (KJS::relation): Put in a nice simple implementation of comparison inside APPLE_CHANGES.
        Our floating point already handles the various infinity cases correctly.

        * kjs/regexp_object.cpp:
        (RegExpProtoFuncImp::call): Add missing return before Null() in Exec method.
        (RegExpObjectImp::arrayOfMatches): Put undefined rather than an empty string into the
        array in cases where we did not match.
        (RegExpObjectImp::construct): Set the DontDelete, ReadOnly, and DontEnum flags for
        "global", "ignoreCase", "multiline", and "source".

        * kjs/string_object.cpp: (StringProtoFuncImp::call): For the match method, turn a null
        string into undefined rather than an empty string. For the slice method, handle an
        undefined parameter for the limit properly as decribed in the specification, and add
        the limit to one case that didn't have the limit at all. For the methods that generate
        HTML strings, use lowercase tags instead of uppercase.

        * kjs/ustring.cpp:
        (KJS::UChar::toLower): Use u_tolower from the ICU library.
        (KJS::UChar::toUpper): Use u_toupper from the ICU library.
        (KJS::UString::append): Fix some math that caused a buffer overflow.
        (KJS::convertUTF16OffsetsToUTF8Offsets): Ignore negative numbers (-1 is used as a special
        flag) rather than converting them all to 0.
        (KJS::convertUTF8OffsetsToUTF16Offsets): Ditto.

        * tests/mozilla/jsDriver.pl: Fixed the relative links to point to our actual test files.

        * tests/mozilla/ecma/String/15.5.4.11-1.js: Fixed the Unicode table in this test to match
        the Unicode specification in a few cases where it was wrong before.
        * tests/mozilla/ecma/String/15.5.4.11-2.js: Ditto.
        * tests/mozilla/ecma/String/15.5.4.11-3.js: Ditto.
        * tests/mozilla/ecma/String/15.5.4.11-5.js: Ditto.
        * tests/mozilla/ecma/String/15.5.4.11-6.js: Ditto.
        * tests/mozilla/ecma/String/15.5.4.12-1.js: Ditto.
        * tests/mozilla/ecma/String/15.5.4.12-2.js: Ditto.
        * tests/mozilla/ecma/String/15.5.4.12-3.js: Ditto.
        * tests/mozilla/ecma/String/15.5.4.12-4.js: Ditto.
        * tests/mozilla/ecma/String/15.5.4.12-5.js: Ditto.

        * JavaScriptCore.pbproj/project.pbxproj: Link to libicu.

        * kjs/number_object.lut.h: Regenerated.

2004-08-09  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        - fixed <rdar://problem/3753467> REGRESSION (137-138): reproducible buffer overrun in UString manipulation code

        * kjs/ustring.cpp: (KJS::UString::append): Fix incorrect size computation. Without it
        we get a buffer overflow.

=== Safari-155 ===

2004-08-05  Richard Williamson   <rjw@apple.com>

        Fixed part of 3674747.  The QT guys need this for feature freeze.

        This patch implements support for the

        - (id)invokeUndefinedMethodFromWebScript:(NSString *)name withArguments:(NSArray *)args

        method of objects bound to JavaScript.

        Reviewed by John.

        * ChangeLog:
        * bindings/objc/objc_class.mm:
        (ObjcClass::methodsNamed):
        (ObjcClass::fieldNamed):
        * bindings/objc/objc_instance.mm:
        (ObjcInstance::invokeMethod):
        * bindings/objc/objc_runtime.h:
        (KJS::Bindings::ObjcMethod::~ObjcMethod):
        (KJS::Bindings::ObjcMethod::isFallbackMethod):
        (KJS::Bindings::ObjcMethod::javaScriptName):
        * bindings/objc/objc_runtime.mm:
        (ObjcMethod::ObjcMethod):
        (ObjcMethod::getMethodSignature):
        (ObjcMethod::setJavaScriptName):
        * bindings/testbindings.mm:

2004-08-04  Vicki Murley  <vicki@apple.com>

        Reviewed by mjs.
 
        - fix <rdar://problem/3649789> SAP WebGUI has problems loading first page because of parse error        

        * kjs/lexer.cpp:
        (Lexer::lex): if the current character is a '\' and the next character is a line terminator,
        go to the next line and continue parsing the string (instead of failing).  This matches 
        behavior in Mac IE and Mozilla.

2004-08-03  Kevin Decker  <kdecker@apple.com>

        Reviewed by Darin.

        Rolled in changes from the latest KJS sources that support additional 
        Number.prototype functions. 

        Specifically this patch covers the follow parts of the ECMA 3 spec:
        15.7.4.5, 15.7.4.6, and 15.7.4.7 
        
        Fixes:
        <rdar://problem/3663716> missing Number.toFixed (and toPrecision, toExponential)
        <rdar://problem/3749492> missing Number.toPrecision prototype implementation
        <rdar://problem/3749591> missing Number.toExponential prototype implementation

        * kjs/identifier.h: Added toFixed, toPrecision, and toExponential to the
        list of supported identifiers (a macro).
        * kjs/number_object.cpp: Implemented support for toFixed(), toPrecision(),
        and toExponential(). 
        (NumberPrototypeImp::NumberPrototypeImp):
        (NumberProtoFuncImp::call):
        * kjs/number_object.h: Added property names for toFixed, toPrecision,
        and toExponential. 
        (KJS::NumberProtoFuncImp::):
        * tests/mozilla/expected.html: Update results.

2004-08-03  Darin Adler  <darin@apple.com>

        Reviewed by Ken.

        - added support for copying RegExp objects so 7 more Mozilla regexp tests pass

        * kjs/regexp_object.cpp: (RegExpObjectImp::construct): Check for case where
        we are supposed to just copy the regular expression object, and do so.
        Also tighten up arguments check to handle case where an actual "undefined"
        is passed rather than just omitting an argument.

        * tests/mozilla/expected.html: Update results.

2004-08-02  Darin Adler  <darin@apple.com>

        * tests/mozilla/.cvsignore: Added.
        * tests/mozilla/expected.html: Update results.

2004-08-02  Darin Adler  <darin@apple.com>

        Reviewed by Ken.

        - fixed RegExp.toString so 3 more Mozilla regexp tests pass

        * kjs/regexp_object.cpp: (RegExpProtoFuncImp::call):
        Append the flags here so more tests paseed.

2004-08-02  Darin Adler  <darin@apple.com>

        Reviewed by Ken.

        - fixed a couple things making 5 Mozilla regexp tests pass

        * kjs/regexp_object.cpp: (RegExpProtoFuncImp::call): Implement toString
        for the prototype.
        (RegExpObjectImp::construct): Fix bug where the string "undefined" would
        be used as the flags string when no parameter was passed.

        * kjs/regexp_object.h: (KJS::RegExpPrototypeImp::classInfo):
        Added a class info object for RegExp prototype so it can return
        a string instead of raising an exception when converting to a string.

        * tests/mozilla/expected.html: Update results.

2004-08-02  Darin Adler  <darin@apple.com>

        Reviewed by Kevin.

        - fix crashes in mozilla tests due to mishandling NaN

        * kjs/array_object.cpp: (ArrayProtoFuncImp::call): Rerranged range checks after
        calls to toInteger so that NaN will get turned into something that fits in an integer.
        These were the ones John already fixed, but his fix used isnan and the new fix is
        more efficient.

        * kjs/number_object.cpp: (NumberProtoFuncImp::call): Rearranged radix range checks
        after a call to toInteger to handle NaN properly. Also removed separate check
        for undefined that's not needed.

        * kjs/string_object.cpp: (StringProtoFuncImp::call): More of the same kinds of changes
        as in the above two files, but for a lot more functions. Also changed one place with
        an explicit check for undefined to instead just check isNaN.

        * tests/mozilla/run-mozilla-tests: Changed to invoke jst using $SYMROOTS for people
        like me who don't keep $SYMROOTS in their $PATH.

=== Safari-154 ===

=== Safari-153 ===

2004-07-26  Kevin Decker  <kdecker@apple.com>

        Changes done by Darin, reviewed by Kevin.

        - changed testkjs to build in Xcode rather than from Makefile

        * .cvsignore: Removed obsolete files from this list.
        * Makefile.am: Removed code to build testkjs; we do this in Xcode now.
        Changed to build target "All" rather than default target. This makes us
        build the testkjs test tool.
        * dummy.cpp: Removed.
        * kjs/.cvsignore: Removed obsolete files from this list, including
        the testkjs tool, which is now built in the symroots directory.
        * kjs/testkjs.cpp: Added copyright notice that was missing, since we have
        changed this file. Also this has the nice side effect of causing the tool
        to be rebuilt in the new location even if there are no other changes in
        your tree when you check this out.
        * tests/mozilla/run-mozilla-tests: Invoke perl explicitly so this works
        without setting the execute bit on jsDriver.pl.

2004-07-22  Kevin Decker  <kdecker@apple.com>

        Reviewed by Darin
        
        Fixed <rdar://problem/3682340> (error console does not include source urls or line numbers of event exceptions). 

        * kjs/function_object.cpp:
        (FunctionObjectImp::construct):
        * kjs/function_object.h:
        * kjs/object.cpp:
        (KJS::ObjectImp::construct):
        * kjs/object.h:
        (KJS::Object::construct):

2004-07-21  Darin Adler  <darin@apple.com>

        * bindings/npruntime.h: Fixed typo.

2004-07-19  John Sullivan  <sullivan@apple.com>

        Reviewed by Maciej.
        
        - bulletproofed array.slice() against NAN arguments. Harri noticed this
        vulnerability in my patch for 3714644

        * kjs/array_object.cpp:
        (ArrayProtoFuncImp::call):
        handle NAN parameters passed to slice() by clamping to 0 and length.

2004-07-19  Richard Williamson   <rjw@apple.com>

        Fixed 3733349.  Prevent Java applet callbacks into JavaScript after applet
        has been destroyed.

        Reviewed by John.

        * bindings/jni/jni_jsobject.cpp:
        (JSObject::invoke):
        (JSObject::JSObject):

2004-07-16  John Sullivan  <sullivan@apple.com>

        Reviewed by Maciej.
        
        - fixed <rdar://problem/3714644> REGRESSION (125.8-146): bugzilla submit link 
        hangs browser with javascript

        * kjs/array_object.cpp:
        (ArrayProtoFuncImp::call):
        Check for undefined type for args[0] the same way we were already checking
        for args[1]. In this case, args was zero-length, but we were treating
        args[0] like an integer anyway. Resulted in some code looping from a NAN
        value to 4, taking approximately forever.

        * JavaScriptCore.pbproj/project.pbxproj:
        version wars
        
=== Safari-152 ===

2004-07-14  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by John.

        <rdar://problem/3711474>: (REGRESSION (125-146): JavaScript 'toString(16)' is broken)
        <rdar://problem/3644873>: (REGRESSION (125-140u): secondary list doesn't fill in at Southwest.com)

        * kjs/number_object.cpp:
        (NumberProtoFuncImp::call): Initialize radix from dradix, not from itself!

2004-07-13  Kevin Decker  <kdecker@apple.com>

        Reviewed by kocienda.

        - made testkjs and JavaScriptCore a subtarget of 'All'
        - testkjs now builds in $SYMROOTS

        * JavaScriptCore.pbproj/project.pbxproj:

=== Safari-151 ===

2004-06-24  Chris Blumenberg  <cblu@apple.com>

        Ignore .mode1 files in JavaScriptCore.pbproj

        Reviewed by kocienda.

        * JavaScriptCore.pbproj/.cvsignore:

2004-06-23  Richard Williamson   <rjw@apple.com>

        Implemented changes for latest npruntime.h.
        
        Reviewed by Chris.

        * JavaScriptCore.pbproj/project.pbxproj:
        * bindings/NP_jsobject.cpp:
        (listFromVariantArgs):
        (identiferFromNPIdentifier):
        (_NPN_CreateScriptObject):
        (NPN_Call):
        (NPN_Evaluate):
        (NPN_GetProperty):
        (NPN_SetProperty):
        (NPN_RemoveProperty):
        * bindings/NP_jsobject.h:
        * bindings/c/c_class.cpp:
        (CClass::methodsNamed):
        (CClass::fieldNamed):
        * bindings/c/c_instance.cpp:
        (CInstance::invokeMethod):
        * bindings/c/c_utility.cpp:
        (convertNPVariantToValue):
        * bindings/c/c_utility.h:
        * bindings/npruntime.cpp:
        (stringIdentifierEqual):
        (stringIdentifierHash):
        (getStringIdentifierDictionary):
        (intIdentifierEqual):
        (intIdentifierHash):
        (getIntIdentifierDictionary):
        (NPN_GetStringIdentifier):
        (NPN_GetStringIdentifiers):
        (NPN_GetIntIdentifier):
        (NPN_IdentifierIsString):
        (NPN_UTF8FromIdentifier):
        (NPN_VariantToInt32):
        (NPN_VariantToDouble):
        (NPN_SetException):
        * bindings/npruntime.h:
        * bindings/objc/WebScriptObject.mm:
        (+[WebScriptObject _convertValueToObjcValue:KJS::root:Bindings::]):
        * bindings/runtime_object.cpp:
        (RuntimeObjectImp::~RuntimeObjectImp):
        * bindings/runtime_root.cpp:
        (KJS::Bindings::rootForInterpreter):
        * bindings/testbindings.cpp:
        (initializeIdentifiers):
        (logMessage):
        (setDoubleValue):
        (setIntValue):
        (setBooleanValue):

=== JavaScriptCore-146.1 ===

2004-06-16  Richard Williamson   <rjw@apple.com>

        Fixed <rdar://problem/3702287> Crash returning nil from bound ObjC

        This turned out to be a show stopper for Dashboard.  Accessing a nil
        ObjC property from JS caused a crash.  Similar to the problem
        3696112 fixed below.
        
        Reviewed by Trey.

        * bindings/objc/objc_runtime.mm:
        (KJS::Bindings::ObjcField::valueFromInstance):

=== Safari-146 ===

2004-06-16  Richard Williamson   <rjw@apple.com>

        Fixed <rdar://problem/3696112>: nil from an Objective-C class seems to get wrapped as a JavaScript proxy that will not print.

        This turned out to be a show stopper for Dashboard.  We now
        return Undefined() when nil is returned from a ObjC method
        that returns an object type.
        
        Reviewed by Maciej.

        * bindings/objc/objc_utility.mm:
        (KJS::Bindings::convertObjcValueToValue):

=== Safari-145 ===

2004-06-15  Richard Williamson   <rjw@apple.com>

        Fixed <rdar://problem/3695875>: Objective-C instances that are exported to JavaScript are too promiscuous

        No longer need to check respondsToSelector: for
        isSelectorExcludedFromWebScript: and isKeyExcludedFromWebScript:
        because these now have a default implementation on NSObject.

        Reviewed by Trey.

        * bindings/objc/objc_class.mm:
        (ObjcClass::methodsNamed):
        (ObjcClass::fieldNamed):

2004-06-14  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        - fixed some things for GC that Patrick missed, or that happened after the branch

        * bindings/objc/WebScriptObject.mm:
        (-[WebScriptObject dealloc]): Moved removeNativeReference call here from private object.
        (-[WebScriptObject finalize]): Added.

        - added some missing nil checks

        * bindings/objc/objc_instance.mm:
        (ObjcInstance::ObjcInstance): Check for nil.
        (ObjcInstance::~ObjcInstance): Check for nil.
        (ObjcInstance::operator=): Check for nil.

2004-06-14  Darin Adler  <darin@apple.com>

        Reviewed by me, code changes by Patrick Beard.

        - fixed <rdar://problem/3671507>: (WebKit should adopt GC changes and compile with GC enabled)

        * bindings/objc/objc_instance.mm:
        (ObjcInstance::ObjcInstance): Use CFRetain instead of retain.
        (ObjcInstance::~ObjcInstance): Use CFRelease instead of release.
        (ObjcInstance::operator=): More of the same.
        (ObjcInstance::end): Use [pool drain] if compiling on Tiger.

        * bindings/objc/objc_runtime.mm:
        (ObjcArray::ObjcArray): Use CFRetain instead of retain.
        (ObjcArray::~ObjcArray): Use CFRelease instead of release.
        (ObjcArray::operator=): More of the same.

        * bindings/testbindings.mm: Fixed incorrect license.
        (main): Use [pool drain] if compiling on Tiger.

=== Safari-144 ===

2004-06-10  Kevin Decker  <kdecker@apple.com>

        Reviewed by John.

        * kjs/lexer.cpp: 
        (Lexer::setCode):
            - fixed <rdar://problem/3682398>: (error console line numbers are offset by 1)
        * kjs/lexer.h:
        (KJS::Lexer::lineNo):
            - fixed <rdar://problem/3682398>: (error console line numbers are offset by 1)

=== JavaScriptCore-143.2 ===

2004-06-07  Darin Adler  <darin@apple.com>

        - fixed <rdar://problem/3682489>: (JavaScriptGlue no longer compiles because Interpreter::evaluate parameters changed)

        * kjs/interpreter.h: Added an overload to make JavaScriptGlue compile.
        * kjs/interpreter.cpp: (KJS::Interpreter::evaluate): Implemented the overload.

=== JavaScriptCore-143.1 ===

2004-06-04  Kevin Decker  <kdecker@apple.com>

        Reviewed by Darin
        
        - fixed <rdar://problem/3680594>

        * kjs/object.cpp:
        (KJS::Error::create):

=== Safari-143 ===

2004-06-04  Darin Adler  <darin@apple.com>

        * kjs/testkjs.cpp: (main): Fix build breakage by adding URL and line number parameters.

2004-06-04  Kevin Decker  <kdecker@apple.com>

        Reviewed by Dave.

        - ObjC bindings do not (yet) pass along sourceurl or line numbers
        - we don't have a way as of yet to accomidate line numbers and urls for dynamic javascript
        - changed the wording of an error message
        - the lexer, parser, and interpreter have been made "sourceURL aware"
        - stored the url into Error
         
        * bindings/NP_jsobject.cpp:
        (NPN_Evaluate):
        * bindings/jni/jni_jsobject.cpp:
        (JSObject::eval):
        * bindings/objc/WebScriptObject.mm:
        (-[WebScriptObject evaluateWebScript:]):
        * kjs/function.cpp:
        (GlobalFuncImp::call):
        * kjs/function_object.cpp:
        (FunctionObjectImp::construct):
        * kjs/internal.cpp:
        (Parser::parse):
        (InterpreterImp::checkSyntax):
        (InterpreterImp::evaluate):
        * kjs/internal.h:
        * kjs/interpreter.cpp:
        (Interpreter::evaluate):
        * kjs/interpreter.h:
        * kjs/lexer.cpp:
        (Lexer::setCode):
        * kjs/lexer.h:
        (KJS::Lexer::sourceURL):
        * kjs/nodes.cpp:
        (Node::Node):
        (Node::throwError):
        (FunctionCallNode::evaluate):
        * kjs/nodes.h:
        * kjs/object.cpp:
        (KJS::Error::create):
        * kjs/object.h:

2004-06-04  Richard Williamson   <rjw@apple.com>

        Fixed crash when attempting to access properties on nil
        object.
        
        Reviewed by John.

        * bindings/objc/objc_instance.mm:
        (ObjcInstance::getClass):
        * bindings/runtime_object.cpp:
        (RuntimeObjectImp::get):
        * bindings/testM.js:
        * bindings/testbindings.mm:
        (-[MyFirstInterface getString]):

2004-05-27  Kevin Decker  <kdecker@apple.com>

        Reviewed by Ken.

        -revised generated error message content
        
        * kjs/error_object.cpp:
        (ErrorProtoFuncImp::call):
        * kjs/internal.cpp:
        (Parser::parse):
        * kjs/object.cpp:
        (KJS::Error::create):

=== Safari-142 ===

2004-05-27  Richard Williamson   <rjw@apple.com>

        Renamed WebScriptMethods to WebScripting based on feedback from Nancy.

        Reviewed by Chris.

        * bindings/objc/WebScriptObject.h:

2004-05-27  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        - moved to new symlink technique for embedding frameworks

        * JavaScriptCore.pbproj/project.pbxproj: Get rid of embed-frameworks build step
        because we don't need it any more.

2004-05-24  Richard Williamson   <rjw@apple.com>

        Changed RuntimeArrayImp to inherit from ArrayInstanceImp and
        fixed ClassInfo to correctly reflect inheritance.  This is required
        because of the runtime checks in JSC for arrays, i.e. in
        the Function objects apply method.

        Reviewed by Ken.

        * bindings/jni/jni_runtime.cpp:
        (JavaArray::convertJObjectToArray):
        * bindings/objc/objc_utility.mm:
        (KJS::Bindings::convertObjcValueToValue):
        * bindings/runtime_array.cpp:
        (RuntimeArrayImp::RuntimeArrayImp):
        * bindings/runtime_array.h:
        * bindings/testM.js: Added.
        * bindings/testbindings.mm:
        (+[MyFirstInterface webScriptNameForSelector:]):
        (-[MyFirstInterface logMessages:]):
        (-[MyFirstInterface logMessage:prefix:]):
        (-[MyFirstInterface callJSObject::]):

2004-05-22  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        - fixed <rdar://problem/3664260>: (JS needs to listen to timezone change notifications)

        * kjs/date_object.cpp: (CopyLocalTimeZone): As per Chris Kane and Jordan Hubbard, use <notify.h>
        with a hardcoded string of "com.apple.system.timezone", and do CFTimeZoneResetSystem since
        CoreFoundation doesn't do this itself. Turns out this affects the default time zone as long as
        it hasn't been set explicitly.

=== Safari-141 ===

2004-05-20  Richard Williamson   <rjw@apple.com>

        Implemented WebScriptObject/DOM wrapper voodoo.  DOM wrappers
        can now be referenced like any other WebScriptObject, meaning
        you can do JS operations on them.

        All added implementation of finalizeForWebScript.

        Reviewed by Ken.

        * bindings/objc/WebScriptObject.h:
        * bindings/objc/WebScriptObject.mm:
        (-[WebScriptObject _initializeWithObjectImp:KJS::root:Bindings::]):
        (-[WebScriptObject _initWithObjectImp:KJS::root:Bindings::]):
        (-[WebScriptObject KJS::]):
        (-[WebScriptObject dealloc]):
        (-[WebScriptObject callWebScriptMethod:withArguments:]):
        (-[WebScriptObject evaluateWebScript:]):
        (-[WebScriptObject setValue:forKey:]):
        (-[WebScriptObject valueForKey:]):
        (-[WebScriptObject stringRepresentation]):
        * bindings/objc/WebScriptObjectPrivate.h:
        * bindings/objc/objc_instance.mm:
        (ObjcInstance::~ObjcInstance):

2004-05-19  Richard Williamson   <rjw@apple.com>

        Removed extraneous tabs that were added (by XCode?).

        * bindings/objc/WebScriptObject.h:

2004-05-19  Darin Adler  <darin@apple.com>

        - fixed headers with licenses mangled by Xcode auto-indenting

        * bindings/jni/jni_jsobject.cpp:
        * bindings/jni/jni_jsobject.h:
        * bindings/runtime_array.h:
        * bindings/runtime_root.cpp:
        * bindings/runtime_root.h:

2004-05-18  Richard Williamson   <rjw@apple.com>

        Added exception logging.  Also check for exception and
        set results as appropriate.

        Reviewed by Maciej (partially reviewed).

        * bindings/objc/WebScriptObject.mm:
        (-[WebScriptObject callWebScriptMethod:withArguments:]):
        (-[WebScriptObject evaluateWebScript:]):
        (-[WebScriptObject setValue:forKey:]):
        (-[WebScriptObject valueForKey:]):

2004-05-18  Richard Williamson   <rjw@apple.com>

        Finsished implementing support for windowScriptObject.
        Had to make WebScriptObjectPrivate.h accessible from
        WebCore.

        Reviewed by Maciej.

        * JavaScriptCore.pbproj/project.pbxproj:
        * bindings/objc/WebScriptObjectPrivate.h:

2004-05-18  Richard Williamson   <rjw@apple.com>

        Use KVC to set/get values instead of directly accessing
        ivars.

        Reviewed by Maciej.

        * bindings/objc/WebScriptObject.mm:
        (-[WebScriptObject callWebScriptMethod:withArguments:]):
        (+[WebScriptObject _convertValueToObjcValue:KJS::root:Bindings::]):
        * bindings/objc/objc_runtime.mm:
        (ObjcField::valueFromInstance):
        (convertValueToObjcObject):
        (ObjcField::setValueToInstance):

2004-05-17  Richard Williamson   <rjw@apple.com>

        Implemented new API for WebScriptObject.

        Fixed <rdar://problem/3657145>: (objc to javascript method calls do not cause updates.)
        Fixed <rdar://problem/3654887>: (Update to JSC to refer to new JSObject LiveConnect object)  (w/ help from Vicki)

        Reviewed by Hyatt.

        * JavaScriptCore.pbproj/project.pbxproj:
        * bindings/c/c_instance.cpp:
        (CInstance::invokeMethod):
        * bindings/jni/jni_instance.cpp:
        (JavaInstance::invokeMethod):
        * bindings/jni/jni_jsobject.cpp:
        (JSObject::convertValueToJObject):
        * bindings/jni/jni_utility.cpp:
        (KJS::Bindings::getJNIField):
        * bindings/objc/WebScriptObject.mm:
        (_didExecute):
        (-[WebScriptObject _initWithObjectImp:KJS::root:Bindings::]):
        (-[WebScriptObject KJS::]):
        (-[WebScriptObject dealloc]):
        (+[WebScriptObject throwException:]):
        (listFromNSArray):
        (-[WebScriptObject callWebScriptMethod:withArguments:]):
        (-[WebScriptObject evaluateWebScript:]):
        (-[WebScriptObject setValue:forKey:]):
        (-[WebScriptObject valueForKey:]):
        (-[WebScriptObject stringRepresentation]):
        (+[WebScriptObject _convertValueToObjcValue:KJS::root:Bindings::]):
        (+[WebUndefined undefined]):
        (-[WebUndefined initWithCoder:]):
        (-[WebUndefined encodeWithCoder:]):
        (-[WebUndefined copyWithZone:]):
        (-[WebUndefined retain]):
        (-[WebUndefined release]):
        (-[WebUndefined retainCount]):
        (-[WebUndefined autorelease]):
        (-[WebUndefined dealloc]):
        (-[WebUndefined copy]):
        (-[WebUndefined replacementObjectForPortCoder:]):
        * bindings/objc/WebScriptObjectPrivate.h: Added.
        * bindings/objc/objc_class.mm:
        (ObjcClass::methodsNamed):
        (ObjcClass::fieldNamed):
        * bindings/objc/objc_instance.mm:
        (ObjcInstance::invokeMethod):
        * bindings/objc/objc_jsobject.h:
        * bindings/objc/objc_jsobject.mm:
        * bindings/objc/objc_runtime.mm:
        (ObjcField::valueFromInstance):
        * bindings/objc/objc_utility.mm:
        (KJS::Bindings::JSMethodNameToObjCMethodName):
        (KJS::Bindings::convertValueToObjcValue):
        (KJS::Bindings::convertObjcValueToValue):
        * bindings/runtime.cpp:
        (Instance::setDidExecuteFunction):
        (Instance::didExecuteFunction):
        (Instance::setValueOfField):
        * bindings/runtime.h:
        * bindings/testbindings.mm:
        (+[MyFirstInterface webScriptNameForSelector:]):
        (-[MyFirstInterface callJSObject::]):

2004-05-14  Vicki Murley  <vicki@apple.com>

        Reviewed by mjs.
 
        <rdar://problem/3642427>: framework marketing number should be 2.0 for DoubleBarrel release

        * JavaScriptCore.pbproj/project.pbxproj: change CFBundleShortVersionString to 2.0

=== Safari-140 ===

2004-05-13  Richard Williamson   <rjw@apple.com>

        Fixed indentation.

        Reviewed by Chris.

        * ChangeLog:
        * bindings/objc/WebScriptObject.h:

2004-05-13  Richard Williamson   <rjw@apple.com>

        Approved API changes.  Currently unimplemented.

        Reviewed by Chris.

        * ChangeLog:
        * JavaScriptCore.pbproj/project.pbxproj:
        * bindings/objc/WebScriptObject.h: Added.
        * bindings/objc/WebScriptObject.mm: Added.
        (+[WebScriptObject throwException:]):
        (-[WebScriptObject callWebScriptMethod:withArguments:]):
        (-[WebScriptObject evaluateWebScript:]):
        (-[WebScriptObject stringRepresentation]):
        (+[WebUndefined undefined]):
        (-[WebUndefined initWithCoder:]):
        (-[WebUndefined encodeWithCoder:]):
        (-[WebUndefined copyWithZone:]):

2004-05-07  Vicki Murley  <vicki@apple.com>

        Reviewed by darin.

        Turn off GC since it uses ppc only instructions (which breaks 
        the B&I build).   
    
        * kjs/value.h: set USE_CONSERVATIVE_GC to 0

=== Safari-139 ===

2004-05-07  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin.

        - add -funroll-loops=16 compiler option for approx .5% speedup on
        HTML iBench and .5-1% speedup on JS iBench.
        
        * JavaScriptCore.pbproj/project.pbxproj:

2004-04-25  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin.

        Enable full conservative GC mode in addition to test mode. When
        conservative GC is enabled, we now get an 11% speed improvement on
        the iBench. Also fix some spots I missed before.

        Specific noteworth changes:
        
        * kjs/collector.cpp:
        (KJS::Collector::markStackObjectsConservatively): Check possible
        cell pointers for 8-byte aligment and verify they are not 0.

        * kjs/protected_values.cpp:
        (KJS::ProtectedValues::increaseProtectCount): Move null-tolerance from here...
        (KJS::ProtectedValues::decreaseProtectCount): ...and here...
        * kjs/protect.h:
        (KJS::gcProtectNullTolerant): ...to here...
        (KJS::gcUnprotectNullTolerant): ...and here, because not all callers need the null
        tolerance, and doing the check is expensive.

        * kjs/protected_values.cpp:
        (KJS::ProtectedValues::computeHash): Replace hash function with a much faster one
        that is still very good.

        * kjs/protect.h:
        (KJS::gcProtect):
        (KJS::gcUnprotect):
        (KJS::ProtectedValue::ProtectedValue):
        (KJS::ProtectedValue::~ProtectedValue):
        (KJS::ProtectedValue::operator=):
        (KJS::ProtectedObject::ProtectedObject):
        (KJS::ProtectedObject::~ProtectedObject):
        (KJS::ProtectedObject::operator=):
        (KJS::ProtectedReference::ProtectedReference):
        (KJS::ProtectedReference::~ProtectedReference):
        (KJS::ProtectedReference::operator=):
        * kjs/protected_values.cpp:
        (KJS::ProtectedValues::getProtectCount):
        (KJS::ProtectedValues::increaseProtectCount):
        (KJS::ProtectedValues::decreaseProtectCount):
        (KJS::ProtectedValues::computeHash):
        * bindings/runtime_root.cpp:
        (KJS::Bindings::addNativeReference):
        (KJS::Bindings::removeNativeReference):
        (RootObject::removeAllNativeReferences):
        * bindings/runtime_root.h:
        (KJS::Bindings::RootObject::~RootObject):
        (KJS::Bindings::RootObject::setRootObjectImp):
        * kjs/collector.cpp:
        (KJS::Collector::allocate):
        (KJS::Collector::collect):
        * kjs/collector.h:
        * kjs/internal.cpp:
        (NumberImp::create):
        (InterpreterImp::globalInit):
        (InterpreterImp::globalClear):
        (InterpreterImp::mark):
        * kjs/list.cpp:
        (KJS::List::derefValues):
        (KJS::List::refValues):
        (KJS::List::append):
        * kjs/object.cpp:
        (KJS::ObjectImp::setInternalValue):
        (KJS::ObjectImp::putDirect):
        * kjs/value.cpp:
        (ValueImp::mark):
        (ValueImp::marked):
        * kjs/value.h:
        (KJS::ValueImp::ValueImp):
        (KJS::ValueImp::~ValueImp):
        (KJS::ValueImp::):
        (KJS::Value::Value):
        (KJS::Value::~Value):
        (KJS::Value::operator=):

2004-04-30  Richard Williamson   <rjw@apple.com>

        Asking an NSInvocation for it's return value when return type
        is void throws an exception.  Added check for void return types
        to avoid this exception.

        Reviewed by Ken.

        * bindings/objc/objc_instance.mm:
        (ObjcInstance::invokeMethod):

2004-04-29  Richard Williamson   <rjw@apple.com>

        Fixed several bad problems with the ObjC bindings.  In particular, conversion
        to/from JavaScriptObject (soon to be WebScriptObject) was completely broken.

        Reviewed by Chris.

        * bindings/objc/objc_jsobject.h:
        * bindings/objc/objc_jsobject.mm:
        (-[JavaScriptObject initWithObjectImp:KJS::root:Bindings::]):
        (-[JavaScriptObject KJS::]):
        (+[JavaScriptObject _convertValueToObjcValue:KJS::root:Bindings::]):
        (-[JavaScriptObject call:arguments:]):
        (-[JavaScriptObject evaluate:]):
        (-[JavaScriptObject getMember:]):
        (-[JavaScriptObject getSlot:]):
        * bindings/objc/objc_runtime.mm:
        (ObjcField::valueFromInstance):
        (ObjcField::setValueToInstance):
        * bindings/objc/objc_utility.mm:
        (KJS::Bindings::convertValueToObjcValue):
        (KJS::Bindings::convertObjcValueToValue):
        * bindings/runtime.h:
        * bindings/runtime_root.cpp:
        (KJS::Bindings::rootForInterpreter):
        (KJS::Bindings::addNativeReference):
        (KJS::Bindings::removeNativeReference):
        * bindings/runtime_root.h:
        * bindings/testbindings.mm:
        (-[MyFirstInterface logMessage:]):
        (-[MyFirstInterface setJSObject:]):
        (-[MyFirstInterface callJSObject::]):

2004-04-24  Darin Adler  <darin@apple.com>

        Reviewed by Dave.

        * kjs/ustring.cpp: (KJS::UString::append): Fix one case that was allocating a buffer
        that is 2x too big.

2004-04-23  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin.

        Implementation of conservative GC, based partly on code from
        Darin. It's turned off for now, so it shouldn't have any effect on
        the normal build.
        
        * JavaScriptCore.pbproj/project.pbxproj:
        * kjs/collector.cpp:
        (KJS::Collector::markStackObjectsConservatively):
        (KJS::Collector::markProtectedObjects):
        (KJS::Collector::collect):
        * kjs/collector.h:
        * kjs/protect.h:
        (KJS::gcProtect):
        (KJS::gcUnprotect):
        * kjs/protected_values.cpp: Added.
        (KJS::ProtectedValues::getProtectCount):
        (KJS::ProtectedValues::increaseProtectCount):
        (KJS::ProtectedValues::insert):
        (KJS::ProtectedValues::decreaseProtectCount):
        (KJS::ProtectedValues::expand):
        (KJS::ProtectedValues::shrink):
        (KJS::ProtectedValues::rehash):
        (KJS::ProtectedValues::computeHash):
        * kjs/protected_values.h: Added.
        * kjs/value.cpp:
        (ValueImp::useConservativeMark):
        (ValueImp::mark):
        (ValueImp::marked):
        * kjs/value.h:
        (KJS::ValueImp::):

=== Safari-138 ===

2004-04-22  Richard Williamson   <rjw@apple.com>

        Fixed build snafu (re-declaration of NPBool in npruntime.h and
        npapi.h).

        * bindings/npruntime.h:

2004-04-22  Richard Williamson   <rjw@apple.com>

        Updated plugin binding API to reflect latest revision from
        working group.
        
        Biggest change is the introduction of NPVariant used to represent
        value types.  NPVariant replaces the use of NPObject for the
        exchange of values between scripting environment and native code.

        Reviewed by John.

        * JavaScriptCore.pbproj/project.pbxproj:
        * bindings/NP_jsobject.cpp:
        (identiferFromNPIdentifier):
        (NPN_Call):
        (NPN_Evaluate):
        (NPN_GetProperty):
        (NPN_SetProperty):
        (NPN_ToString):
        (NPN_GetPropertyAtIndex):
        (NPN_SetPropertyAtIndex):
        * bindings/c/c_class.cpp:
        (CClass::methodsNamed):
        (CClass::fieldNamed):
        * bindings/c/c_instance.cpp:
        (CInstance::invokeMethod):
        (CInstance::defaultValue):
        * bindings/c/c_runtime.cpp:
        (CField::valueFromInstance):
        (CField::setValueToInstance):
        * bindings/c/c_utility.cpp:
        (convertNPStringToUTF16):
        (convertUTF8ToUTF16):
        (coerceValueToNPVariantStringType):
        (convertValueToNPVariant):
        (convertNPVariantToValue):
        * bindings/c/c_utility.h:
        * bindings/npruntime.cpp:
        (NPN_GetIdentifier):
        (NPN_GetIdentifiers):
        (NPN_UTF8FromIdentifier):
        (NPN_VariantIsVoid):
        (NPN_VariantIsNull):
        (NPN_VariantIsUndefined):
        (NPN_VariantIsBool):
        (NPN_VariantIsInt32):
        (NPN_VariantIsDouble):
        (NPN_VariantIsString):
        (NPN_VariantIsObject):
        (NPN_VariantToBool):
        (NPN_VariantToString):
        (NPN_VariantToInt32):
        (NPN_VariantToDouble):
        (NPN_VariantToObject):
        (NPN_InitializeVariantAsVoid):
        (NPN_InitializeVariantAsNull):
        (NPN_InitializeVariantAsUndefined):
        (NPN_InitializeVariantWithBool):
        (NPN_InitializeVariantWithInt32):
        (NPN_InitializeVariantWithDouble):
        (NPN_InitializeVariantWithString):
        (NPN_InitializeVariantWithStringCopy):
        (NPN_InitializeVariantWithObject):
        (NPN_InitializeVariantWithVariant):
        (NPN_ReleaseVariantValue):
        (NPN_CreateObject):
        (NPN_RetainObject):
        (NPN_ReleaseObject):
        (NPN_IsKindOfClass):
        (NPN_SetExceptionWithUTF8):
        (NPN_SetException):
        * bindings/npruntime.h:
        (_NPString::):
        (_NPString::_NPVariant::):
        * bindings/testbindings.cpp:
        (logMessage):
        (setDoubleValue):
        (setIntValue):
        (setStringValue):
        (setBooleanValue):
        (getDoubleValue):
        (getIntValue):
        (getStringValue):
        (getBooleanValue):
        (myGetProperty):
        (mySetProperty):
        (myInvoke):
        (myAllocate):

2004-04-22  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        - fixed <rdar://problem/3627473>: "REGRESSION (125-137): memory trasher in UString::append, causing many different crashes"

        * kjs/ustring.cpp:
        (KJS::UString::expandCapacity): Fix sizeof(UChar *) that should be sizeof(UChar).
        Was resulting in a buffer 2x the needed size.
        (KJS::UString::expandPreCapacity): Ditto.
        (KJS::UString::append): Fix malloc that is missing a sizeof(UChar).

2004-04-21  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin.

        Preliminary change for conservative GC. Create "protected"
        subclasses to GC-protect objects when on heap, since we will soon
        remove the built-in refcounting of the normal wrapper classes. Use
        them where needed.
        
        * JavaScriptCore.pbproj/project.pbxproj:
        * kjs/context.h:
        * kjs/internal.h:
        (KJS::InterpreterImp::globalObject):
        * kjs/interpreter.h:
        * kjs/property_map.cpp:
        * kjs/reference.h:
        * kjs/reference_list.cpp:

2004-04-19  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Dave.

        Optimize prepend using the shared substring optimization. Also,
        limit the applicability of shared append and shared prepend. If
        you overdo it, it does more harm than good, because you create a
        bunch of strings that are disqualified from future shared
        append/prepend, for not much immediate savings in allocate/copy
        expense.
        
        * kjs/ustring.cpp:
        (KJS::):
        (KJS::UString::Rep::create):
        (KJS::UString::expandedSize):
        (KJS::UString::usedPreCapacity):
        (KJS::UString::expandCapacity):
        (KJS::UString::expandPreCapacity):
        (KJS::UString::UString):
        (KJS::UString::append):
        (KJS::UString::operator=):
        * kjs/ustring.h:
        (KJS::UString::Rep::data):

2004-04-16  Maciej Stachowiak  <mjs@apple.com>
        Reviewed by Richard.

        No more need for Completion or Reference to privately inherit from
        Value, none of the superclass functionality is used.

        * kjs/completion.h:
        * kjs/reference.h:

=== Safari-137 ===

2004-04-16  Richard Williamson   <rjw@apple.com>

        Added interpreter lock protection around object creation.

        Reviewed by Chris.

        * bindings/runtime.cpp:
        (Instance::createRuntimeObject):

2004-04-16  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Ken.

        Another JavaScript speed improvement: use the mechanism from
        string append optimization to make taking a substring fast, again
        sharing the buffer.

        A further 22% improvement on the 24fun string speed test.
        
        * kjs/ustring.cpp:
        (KJS::):
        (KJS::UString::Rep::create):
        (KJS::UString::UString):
        (KJS::UString::append):
        (KJS::UString::operator=):
        (KJS::UString::substr):
        * kjs/ustring.h:
        (KJS::UString::Rep::data):

2004-04-13  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin.

        - fixed <rdar://problem/3600695>: String manipulation in JavaScript 24fun test is very slow (slow)
        - fixed <rdar://problem/3600691>: Table generation test is really slow
        - fixed <rdar://problem/3600661>: 24fun date test is really slow

        80% speedup on the string test, lesser speedups on the other two.
        
        Two different optimizations here:

        1) Avoid large overhead of scanning strings to see if they are all
        ASCII before numeric conversion.
        
        * kjs/nodes.cpp:
        (AssignNode::evaluate): Don't convert to integer until we know for
        sure the operation will need it. Attempting to convert strings to
        numbers is a waste when they are being appended with +=.

        2) Avoid huge cost of appending strings.

        This is done by allowing multiple strings to share a buffer but
        actually use different ranges of it. The first time a string is
        appended to, we start leaving at least 10% extra space in the
        buffer, so doing N appends to the same string takes O(log N)
        mallocs instead of O(N).
        
        * kjs/identifier.cpp:
        (KJS::Identifier::equal):
        (KJS::Identifier::add):
        * kjs/ustring.cpp:
        (KJS::):
        (KJS::UCharReference::operator=):
        (KJS::UCharReference::ref):
        (KJS::UString::Rep::create):
        (KJS::UString::Rep::destroy):
        (KJS::UString::expandedSize):
        (KJS::UString::usedCapacity):
        (KJS::UString::expandCapacity):
        (KJS::UString::UString):
        (KJS::UString::null):
        (KJS::UString::append):
        (KJS::UString::operator=):
        (KJS::UString::toStrictUInt32):
        (KJS::UString::detach):
        (KJS::KJS::operator==):
        * kjs/ustring.h:
        (KJS::UString::Rep::data):
        (KJS::UString::Rep::hash):

2004-04-09  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by John.

        - fix deployment build by avoiding deployment-only warning.

        * kjs/scope_chain.cpp:
        (KJS::ScopeChain::bottom):

2004-04-09  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by John.

        Changed things so that newly created objects get a prototype based
        on the scope chain of the current function, rather than the
        interpreter that started execution. This fixes the following bugs:
        
        <rdar://problem/3368523>: ARCH: wrong prototype used to create new objects (hang on lookup.atomica.com)
        <rdar://problem/3559173>: ARCH: Cannot scan using a HP Jetdirect product (JS object prototypes bind incorrectly)

        * JavaScriptCore.pbproj/project.pbxproj:
        * kjs/array_object.cpp:
        (CompareWithCompareFunctionArguments::CompareWithCompareFunctionArguments):
        (ArrayProtoFuncImp::ArrayProtoFuncImp):
        (ArrayProtoFuncImp::call):
        (ArrayObjectImp::construct):
        * kjs/bool_object.cpp:
        (BooleanObjectImp::construct):
        * kjs/date_object.cpp:
        (DateProtoFuncImp::DateProtoFuncImp):
        (DateProtoFuncImp::call):
        (DateObjectImp::construct):
        * kjs/error_object.cpp:
        (ErrorObjectImp::construct):
        * kjs/function.cpp:
        (FunctionImp::FunctionImp):
        (FunctionImp::call):
        (DeclaredFunctionImp::construct):
        (ArgumentsImp::ArgumentsImp):
        (GlobalFuncImp::call):
        * kjs/function_object.cpp:
        (FunctionProtoFuncImp::call):
        (FunctionObjectImp::construct):
        * kjs/internal.cpp:
        (BooleanImp::toObject):
        (StringImp::toObject):
        (NumberImp::toObject):
        (InterpreterImp::InterpreterImp):
        (InterpreterImp::clear):
        (InterpreterImp::interpreterWithGlobalObject):
        * kjs/internal.h:
        * kjs/interpreter.cpp:
        (ExecState::lexicalInterpreter):
        * kjs/interpreter.h:
        (KJS::ExecState::dynamicInterpreter):
        (KJS::ExecState::interpreter):
        * kjs/math_object.cpp:
        (MathFuncImp::MathFuncImp):
        * kjs/nodes.cpp:
        (StatementNode::hitStatement):
        (StatementNode::abortStatement):
        (RegExpNode::evaluate):
        (ElementNode::evaluate):
        (ArrayNode::evaluate):
        (ObjectLiteralNode::evaluate):
        (PropertyValueNode::evaluate):
        (FunctionCallNode::evaluate):
        (FuncDeclNode::processFuncDecl):
        (FuncExprNode::evaluate):
        * kjs/number_object.cpp:
        (NumberObjectImp::construct):
        * kjs/object.cpp:
        (KJS::ObjectImp::defaultValue):
        (KJS::Error::create):
        * kjs/object_object.cpp:
        (ObjectObjectImp::construct):
        * kjs/reference.cpp:
        (Reference::putValue):
        * kjs/regexp_object.cpp:
        (RegExpProtoFuncImp::call):
        (RegExpObjectImp::arrayOfMatches):
        (RegExpObjectImp::construct):
        * kjs/scope_chain.cpp:
        (KJS::ScopeChain::bottom):
        * kjs/scope_chain.h:
        * kjs/string_object.cpp:
        (StringProtoFuncImp::StringProtoFuncImp):
        (StringProtoFuncImp::call):
        (StringObjectImp::construct):

=== Safari-136 ===

=== Safari-135 ===

2004-03-31  Richard Williamson   <rjw@apple.com>

        Tedious renames based on feedback from plugin-futures list.
        NP_ functions are renamed with NPN_ prefix.
        Types prefix renamed from NP_ to NP.
        NPN_CreateStringWithUTF8 and NPN_SetExceptionWithUTF8 now take a length, optionally -1 if string is null terminated. 
        
        No review because this was just a renaming patch.

        * bindings/NP_jsobject.cpp:
        (listFromNPArray):
        (jsAllocate):
        (identiferFromNPIdentifier):
        (NPN_Call):
        (NPN_Evaluate):
        (NPN_GetProperty):
        (NPN_SetProperty):
        (NPN_RemoveProperty):
        (NPN_ToString):
        (NPN_GetPropertyAtIndex):
        (NPN_SetPropertyAtIndex):
        * bindings/NP_jsobject.h:
        * bindings/c/c_class.cpp:
        (CClass::_commonInit):
        (CClass::classForIsA):
        (CClass::CClass):
        (CClass::methodsNamed):
        (CClass::fieldNamed):
        * bindings/c/c_class.h:
        * bindings/c/c_instance.cpp:
        (CInstance::CInstance):
        (CInstance::~CInstance):
        (CInstance::operator=):
        (CInstance::invokeMethod):
        (CInstance::defaultValue):
        * bindings/c/c_instance.h:
        (KJS::Bindings::CInstance::getObject):
        * bindings/c/c_runtime.cpp:
        (CField::valueFromInstance):
        (CField::setValueToInstance):
        * bindings/c/c_runtime.h:
        (KJS::Bindings::CField::CField):
        (KJS::Bindings::CField::name):
        (KJS::Bindings::CMethod::CMethod):
        (KJS::Bindings::CMethod::name):
        * bindings/c/c_utility.cpp:
        (coerceValueToNPString):
        (convertValueToNPValueType):
        (convertNPValueTypeToValue):
        * bindings/c/c_utility.h:
        * bindings/npruntime.cpp:
        (NPN_IdentifierFromUTF8):
        (NPN_IsValidIdentifier):
        (NPN_GetIdentifiers):
        (NPN_UTF8FromIdentifier):
        (NPN_CreateObject):
        (NPN_RetainObject):
        (NPN_ReleaseObject):
        (NPN_IsKindOfClass):
        (NPN_SetExceptionWithUTF8):
        (NPN_SetException):
        (numberAllocate):
        (NPN_CreateNumberWithInt):
        (NPN_CreateNumberWithFloat):
        (NPN_CreateNumberWithDouble):
        (NPN_IntFromNumber):
        (NPN_FloatFromNumber):
        (NPN_DoubleFromNumber):
        (stringAllocate):
        (NPN_CreateStringWithUTF8):
        (NPN_CreateStringWithUTF16):
        (NPN_DeallocateUTF8):
        (NPN_UTF8FromString):
        (NPN_UTF16FromString):
        (NPN_StringLength):
        (booleanAllocate):
        (NPN_CreateBoolean):
        (NPN_BoolFromBoolean):
        (nullAllocate):
        (NPN_GetNull):
        (undefinedAllocate):
        (NPN_GetUndefined):
        (arrayAllocate):
        (arrayDeallocate):
        (NPN_CreateArray):
        (NPN_CreateArrayV):
        (NPN_ObjectAtIndex):
        * bindings/npruntime.h:
        * bindings/runtime.cpp:
        (Instance::createBindingForLanguageInstance):
        * bindings/testbindings.cpp:
        (initializeIdentifiers):
        (myHasProperty):
        (myHasMethod):
        (myGetProperty):
        (mySetProperty):
        (logMessage):
        (setDoubleValue):
        (setIntValue):
        (setStringValue):
        (setBooleanValue):
        (getDoubleValue):
        (getIntValue):
        (getStringValue):
        (getBooleanValue):
        (myInvoke):
        (myAllocate):
        (myInvalidate):
        (myDeallocate):
        (main):

2004-03-31  Richard Williamson   <rjw@apple.com>

        Changed references to NP_runtime.h to npruntime.h
        
        * JavaScriptCore.pbproj/project.pbxproj:
        * bindings/NP_jsobject.h:
        * bindings/c/c_class.h:
        * bindings/c/c_instance.h:
        * bindings/c/c_runtime.h:
        * bindings/c/c_utility.h:
        * bindings/npruntime.cpp:

2004-03-31  Richard Williamson   <rjw@apple.com>

        Renamed NP_runtime.h to npruntime.h to match Netscape SDK.

        * JavaScriptCore.pbproj/project.pbxproj:
        * bindings/NP_jsobject.h:
        * bindings/npruntime.cpp:

=== Safari-134 ===

2004-03-23  Richard Williamson   <rjw@apple.com>

        Added implementation of KJS::Value <-> NP_Object conversion functions.
        Augmented test program for 'C' bindings.
        Added asserts and parameter checking to all public API.        

        Reviewed by Ken.

        * JavaScriptCore.pbproj/project.pbxproj:
        * bindings/NP_jsobject.cpp:
        (NP_ToString):
        * bindings/NP_jsobject.h: Added.
        * bindings/NP_runtime.cpp:
        (NP_IdentifierFromUTF8):
        (NP_IsValidIdentifier):
        (NP_GetIdentifiers):
        (NP_CreateObject):
        (NP_RetainObject):
        (NP_ReleaseObject):
        (NP_IsKindOfClass):
        (NP_SetExceptionWithUTF8):
        (NP_SetException):
        (NP_IntFromNumber):
        (NP_FloatFromNumber):
        (NP_DoubleFromNumber):
        (NP_CreateStringWithUTF8):
        (NP_CreateStringWithUTF16):
        (NP_DeallocateUTF8):
        (NP_UTF8FromString):
        (NP_UTF16FromString):
        (NP_StringLength):
        (NP_BoolFromBoolean):
        * bindings/NP_runtime.h:
        * bindings/c/c_instance.cpp:
        (CInstance::invokeMethod):
        * bindings/c/c_utility.cpp:
        (coerceValueToNPString):
        (convertValueToNPValueType):
        (convertNPValueTypeToValue):
        * bindings/c/c_utility.h:
        * bindings/test.js:
        * bindings/testC.js: Added.
        * bindings/testbindings.cpp:
        (logMessage):
        (setDoubleValue):
        (setIntValue):
        (setStringValue):
        (setBooleanValue):
        (getDoubleValue):
        (getIntValue):
        (getStringValue):
        (getBooleanValue):
        (myInterfaceInvoke):
        (myInterfaceAllocate):

=== Safari-133 ===

2004-03-19  Darin Adler  <darin@apple.com>

        Reviewed by Ken.

        - fixed problem with methods like setUTCHour

        * kjs/date_object.cpp: (DateProtoFuncImp::call): Fix conversion back to time_t to use the appropriate
        GMT vs. local time function based on the utc flag.

2004-03-17  Richard Williamson   <rjw@apple.com>

        Added a context parameter to result callbacks use by JavaScriptObject functions.  This was a change requested by Eric Carlson on the QT plugin team.

        Reviewed by Ken.

        * bindings/NP_jsobject.cpp:
        (NP_Call):
        (NP_Evaluate):
        (NP_GetProperty):
        (NP_ToString):
        (NP_GetPropertyAtIndex):
        * bindings/NP_runtime.h:

2004-03-16  Richard Williamson   <rjw@apple.com>

        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.

        Reviewed by John.

        * bindings/jni/jni_class.cpp:
        (JavaClass::methodsNamed):

2004-03-15  Richard Williamson   <rjw@apple.com>

        Fixed 3570854.  Don't attempt to convert Null to strings.  We
        were incorrectly converting to "Null".

        Actually fixed by Scott Kovatch.

        Reviewed by Richard.

        * bindings/jni/jni_utility.cpp:
        (KJS::Bindings::convertValueToJValue):

=== Safari-132 ===

2004-03-11  Richard Williamson   <rjw@apple.com>

        Stitched together the NP stuff to our language independent
        JavaScript binding stuff.  Very close to being done.
        
        Added program to test C bindings (and NP stuff).  Just tests
        properties.  Will add methods and JavaScript access, etc.

        Updated Makefile.am to account for new bindings/c directory.

        Change NP_UTF8 from "const char *" to "char" to allow for
        declarations like "const NP_UTF8 *" and "NP_UTF8 *".  Ditto
        for NP_UTF16.

        Added NP_IsValidIdentifier().

        Reviewed by Chris.

        * JavaScriptCore.pbproj/project.pbxproj:
        * Makefile.am:
        * bindings/NP_jsobject.cpp:
        (identiferFromNPIdentifier):
        (NP_Evaluate):
        * bindings/NP_runtime.cpp:
        (NP_IdentifierFromUTF8):
        (NP_IsValidIdentifier):
        (NP_GetIdentifiers):
        (NP_UTF8FromIdentifier):
        (NP_SetExceptionWithUTF8):
        (NP_SetException):
        (NP_CreateStringWithUTF8):
        (NP_CreateStringWithUTF16):
        (NP_UTF8FromString):
        (NP_UTF16FromString):
        * bindings/NP_runtime.h:
        * bindings/c/c_class.cpp: Added.
        (CClass::_commonDelete):
        (CClass::_commonCopy):
        (CClass::_commonInit):
        (_createClassesByIsAIfNecessary):
        (CClass::classForIsA):
        (CClass::CClass):
        (CClass::name):
        (CClass::methodsNamed):
        (CClass::fieldNamed):
        * bindings/c/c_class.h: Added.
        (KJS::Bindings::CClass::~CClass):
        (KJS::Bindings::CClass::CClass):
        (KJS::Bindings::CClass::operator=):
        (KJS::Bindings::CClass::constructorAt):
        (KJS::Bindings::CClass::numConstructors):
        * bindings/c/c_instance.cpp: Added.
        (CInstance::CInstance):
        (CInstance::~CInstance):
        (CInstance::operator=):
        (CInstance::getClass):
        (CInstance::begin):
        (CInstance::end):
        (CInstance::invokeMethod):
        (CInstance::defaultValue):
        (CInstance::stringValue):
        (CInstance::numberValue):
        (CInstance::booleanValue):
        (CInstance::valueOf):
        * bindings/c/c_instance.h: Added.
        (KJS::Bindings::CInstance::getObject):
        * bindings/c/c_runtime.cpp: Added.
        (CField::valueFromInstance):
        (CField::setValueToInstance):
        * bindings/c/c_runtime.h: Added.
        (KJS::Bindings::CField::CField):
        (KJS::Bindings::CField::name):
        (KJS::Bindings::CField::type):
        (KJS::Bindings::CMethod::CMethod):
        (KJS::Bindings::CMethod::name):
        (KJS::Bindings::CMethod::numParameters):
        * bindings/c/c_utility.cpp: Added.
        (coerceValueToNPValueType):
        (convertValueToNPValueType):
        (convertNPValueTypeToValue):
        * bindings/c/c_utility.h: Added.
        * bindings/make_testbindings:
        * bindings/runtime.cpp:
        (Instance::createBindingForLanguageInstance):
        * bindings/runtime.h:
        (KJS::Bindings::Instance::):
        * bindings/testbindings.cpp: Added.
        (initializeIdentifiers):
        (myInterfaceHasProperty):
        (myInterfaceHasMethod):
        (myInterfaceGetProperty):
        (myInterfaceSetProperty):
        (myInterfaceInvoke):
        (myInterfaceAllocate):
        (myInterfaceInvalidate):
        (myInterfaceDeallocate):
        (GlobalImp::className):
        (readJavaScriptFromFile):
        (main):

2004-03-10  Richard Williamson   <rjw@apple.com>

        Made changes to support new asychronous approach to calls from
        plugin to JavaScript

        Reviewed by Chris.

        * bindings/NP_jsobject.cpp:
        (NP_Call):
        (NP_Evaluate):
        (NP_GetProperty):
        (NP_ToString):
        (NP_GetPropertyAtIndex):
        * bindings/NP_runtime.h:
        * bindings/make_testbindings:
        * bindings/runtime.cpp:
        (Instance::createBindingForLanguageInstance):

2004-03-10  Richard Williamson   <rjw@apple.com>

        Updated header to include proposed changes from
        plugin-futures list.  Calls from plugin to JavaScript
        are now asynchronous.

        Reviewed by Chris.

        * bindings/NP_runtime.h:

=== Safari-131 ===

2004-03-04  Richard Williamson   <rjw@apple.com>

        Implementation of NP_JavaScriptObject.  This is the 'C' class
        that wraps a JavaScript object.

        Reviewed by Chris.

        * JavaScriptCore.pbproj/project.pbxproj:
        * bindings/NP_jsobject.cpp: Added.
        (coerceValueToNPValueType):
        (convertValueToNPValueType):
        (convertNPValueTypeToValue):
        (listFromNPArray):
        (jsAllocate):
        (jsDeallocate):
        (identiferFromNPIdentifier):
        (NP_Call):
        (NP_Evaluate):
        (NP_GetProperty):
        (NP_SetProperty):
        (NP_RemoveProperty):
        (NP_ToString):
        (NP_GetPropertyAtIndex):
        (NP_SetPropertyAtIndex):
        * bindings/NP_runtime.cpp:
        (NP_ObjectAtIndex):
        * bindings/NP_runtime.h:
        * bindings/runtime_object.h:

2004-03-04  Richard Williamson   <rjw@apple.com>

        Added NP_Array implementation.  

        Changed NP_Boolean to just depend on two static instances, no
        space is required for values.

        Reviewed by Chris.

        * bindings/NP_runtime.cpp:
        (NP_CreateBoolean):
        (NP_BoolFromBoolean):
        (arrayAllocate):
        (arrayDeallocate):
        (NP_CreateArray):
        (NP_CreateArrayV):
        (NP_ObjectAtIndex):
        * bindings/NP_runtime.h:

2004-03-03  Darin Adler  <darin@apple.com>

        Reviewed by Vicki.

        * English.lproj/InfoPlist.strings: Removed. No need to localize the version and
        copyright string, and that's all that was in here.
        * JavaScriptCore.pbproj/project.pbxproj: Removed InfoPlist.strings from build.

2004-03-03  Richard Williamson   <rjw@apple.com>

        More 'C' binding implementation.  Fleshed out all the
        'primitive' data types.

        Reviewed by Chris.

        * bindings/NP_runtime.cpp:
        (NP_ReleaseObject):
        (numberAllocate):
        (stringAllocate):
        (stringDeallocate):
        (NP_CreateStringWithUTF8):
        (NP_CreateStringWithUTF16):
        (NP_UTF8FromString):
        (NP_UTF16FromString):
        (NP_StringLength):
        (booleanAllocate):
        (booleanDeallocate):
        (NP_CreateBoolean):
        (NP_BoolFromBoolean):
        (nullAllocate):
        (nullDeallocate):
        (NP_GetNull):
        (undefinedAllocate):
        (undefinedDeallocate):
        (NP_GetUndefined):
        * bindings/NP_runtime.h:

2004-03-03  Richard Williamson   <rjw@apple.com>

        More 'C' binding implementation.

        Reviewed by Chris.

        * bindings/NP_runtime.cpp:
        (identifierEqual):
        (identifierHash):
        (getIdentifierDictionary):
        (NP_IdentifierFromUTF8):
        (NP_UTF8FromIdentifier):
        (NP_CreateObject):
        (NP_ReleaseObject):
        (NP_IsKindOfClass):
        (numberCreate):
        (NP_CreateNumberWithInt):
        (NP_CreateNumberWithFloat):
        (NP_CreateNumberWithDouble):
        (NP_IntFromNumber):
        (NP_FloatFromNumber):
        (NP_DoubleFromNumber):
        * bindings/NP_runtime.h:

2004-03-02  Richard Williamson   <rjw@apple.com>

        Removed retain/release from NP_Class.  Classes will not be allowed to implement their
        own customer retain/release scheme.

        Reviewed by Chris.

        * bindings/NP_runtime.cpp:
        (NP_RetainObject):
        (NP_ReleaseObject):
        * bindings/NP_runtime.h:

2004-03-02  Richard Williamson   <rjw@apple.com>

        C binding API.  Partial implementation.

        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.

        Factored root object reference counting scheme.  It is now useful independent
        of LiveConnect.

        Reviewed by Chris.

        * JavaScriptCore.pbproj/project.pbxproj:
        * bindings/NP_runtime.cpp: Added.
        (NP_IdentifierFromUTF8):
        (NP_GetIdentifiers):
        (NP_UTF8FromIdentifier):
        (NP_CreateObject):
        (NP_RetainObject):
        (NP_ReleaseObject):
        (NP_IsKindOfClass):
        (NP_SetException):
        (NP_Call):
        (NP_Evaluate):
        (NP_GetProperty):
        (NP_SetProperty):
        (NP_RemoveProperty):
        (NP_ToString):
        (NP_GetPropertyAtIndex):
        (NP_SetPropertyAtIndex):
        (NP_CreateNumberWithInt):
        (NP_CreateNumberWithFloat):
        (NP_CreateNumberWithDouble):
        (NP_IntFromNumber):
        (NP_FloatFromNumber):
        (NP_DoubleFromNumber):
        (NP_CreateStringWithUTF8):
        (NP_CreateStringWithUTF16):
        (NP_UTF8FromString):
        (NP_UTF16FromString):
        (NP_CreateBoolean):
        (NP_BoolFromBoolean):
        (NP_GetNull):
        (NP_GetUndefined):
        (NP_CreateArray):
        (NP_CreateArrayV):
        (NP_ObjectAtIndex):
        * bindings/NP_runtime.h: Added.
        * bindings/jni/jni_jsobject.cpp:
        (JSObject::invoke):
        (JSObject::finalize):
        (JSObject::createNative):
        (JSObject::convertValueToJObject):
        * bindings/jni/jni_jsobject.h:
        * bindings/objc/objc_jsobject.h:
        * bindings/objc/objc_jsobject.mm:
        (rootForView):
        (windowJavaScriptObject):
        (-[JavaScriptObject initWithObjectImp:KJS::root:Bindings::]):
        (-[JavaScriptObject dealloc]):
        (-[JavaScriptObject _convertValueToObjcValue:KJS::]):
        (-[JavaScriptObject call:arguments:]):
        (-[JavaScriptObject evaluate:]):
        (-[JavaScriptObject getMember:]):
        (-[JavaScriptObject setMember:value:]):
        (-[JavaScriptObject removeMember:]):
        (-[JavaScriptObject toString]):
        (-[JavaScriptObject getSlot:]):
        (-[JavaScriptObject setSlot:value:]):
        * bindings/objc/objc_utility.h:
        * bindings/objc/objc_utility.mm:
        (KJS::Bindings::convertValueToObjcValue):
        * bindings/runtime_root.cpp: Added.
        (getReferencesByRootDictionary):
        (getReferencesDictionary):
        (KJS::Bindings::findReferenceDictionary):
        (KJS::Bindings::rootForImp):
        (KJS::Bindings::addNativeReference):
        (KJS::Bindings::removeNativeReference):
        (completedJavaScriptAccess):
        (initializeJavaScriptAccessLock):
        (lockJavaScriptAccess):
        (unlockJavaScriptAccess):
        (RootObject::dispatchToJavaScriptThread):
        (performJavaScriptAccess):
        (RootObject::setFindRootObjectForNativeHandleFunction):
        (RootObject::removeAllNativeReferences):
        * bindings/runtime_root.h: Added.
        (KJS::Bindings::RootObject::RootObject):
        (KJS::Bindings::RootObject::~RootObject):
        (KJS::Bindings::RootObject::setRootObjectImp):
        (KJS::Bindings::RootObject::rootObjectImp):
        (KJS::Bindings::RootObject::setInterpreter):
        (KJS::Bindings::RootObject::interpreter):
        (KJS::Bindings::RootObject::findRootObjectForNativeHandleFunction):
        (KJS::Bindings::RootObject::runLoop):
        (KJS::Bindings::RootObject::performJavaScriptSource):

=== Safari-130 ===

=== Safari-129 ===

2004-02-18  Richard Williamson   <rjw@apple.com>

        Added NSNumber/Number conversion.

        Removed some unnecessary KJS:: namespace specifiers.

        Reviewed by Ken.

        * bindings/objc/objc_utility.mm:
        (KJS::Bindings::convertValueToObjcValue):
        (KJS::Bindings::convertObjcValueToValue):
        * bindings/runtime_array.h:

2004-02-18  Richard Williamson   <rjw@apple.com>

        Added support for export NSArrays.

        Updated valueAt() to take an ExecState so we can throw
        JS exceptions.

        Implemented excludeSelectorFromJavaScript: in ObjcClass.  This allows
        ObjectiveC classes to control the visibility of their methods in 
        JavaScript.

        Reviewed by Ken.

        * bindings/jni/jni_runtime.cpp:
        (JavaField::valueFromInstance):
        (JavaArray::valueAt):
        * bindings/jni/jni_runtime.h:
        * bindings/objc/objc_class.mm:
        (ObjcClass::methodsNamed):
        * bindings/objc/objc_runtime.h:
        (KJS::Bindings::ObjcArray::getObjcArray):
        * bindings/objc/objc_runtime.mm:
        (ObjcField::valueFromInstance):
        (ObjcField::setValueToInstance):
        (ObjcArray::ObjcArray):
        (ObjcArray::~ObjcArray):
        (ObjcArray::operator=):
        (ObjcArray::setValueAt):
        (ObjcArray::valueAt):
        (ObjcArray::getLength):
        * bindings/objc/objc_utility.mm:
        (KJS::Bindings::convertValueToObjcValue):
        (KJS::Bindings::convertObjcValueToValue):
        * bindings/runtime.cpp:
        (Instance::getValueOfField):
        * bindings/runtime.h:
        * bindings/runtime_array.cpp:
        (RuntimeArrayImp::get):
        * bindings/runtime_object.cpp:
        (RuntimeObjectImp::get):

2004-02-17  Richard Williamson   <rjw@apple.com>

        Added String <-> NSString conversion.
        Added tests of String <-> NSString conversion to test program.

        Reviewed by Chris.

        * bindings/objc/objc_utility.mm:
        (KJS::Bindings::convertValueToObjcValue):
        (KJS::Bindings::convertObjcValueToValue):
        * bindings/test.js:
        * bindings/testbindings.mm:
        (-[MyFirstInterface getString]):

2004-02-15  Darin Adler  <darin@apple.com>

        Reviewed by Dave.

        * JavaScriptCore.pbproj/project.pbxproj: Tweak build styles a bit, fixing OptimizedWithSymbols,
        and removing redundant settings of things that match defaults in other build styles.

2004-02-13  Richard Williamson   <rjw@apple.com>

        Work towards the JavaScript ObjC bindings.  The bindings now work for 
        simple scalar types.  testbindings.mm is an illustration of how the 
        bindings work.

        Reviewed by Ken.

        * JavaScriptCore.pbproj/project.pbxproj:
        * Makefile.am:
        * bindings/jni/jni_class.cpp:
        (JavaClass::methodsNamed):
        * bindings/jni/jni_class.h:
        * bindings/jni/jni_instance.cpp:
        (JavaInstance::invokeMethod):
        * bindings/jni/jni_instance.h:
        * bindings/jni/jni_runtime.h:
        (KJS::Bindings::JavaMethod::returnType):
        * bindings/make_testbindings: Added.
        * bindings/objc/objc_class.h: Added.
        (KJS::Bindings::ObjcClass::~ObjcClass):
        (KJS::Bindings::ObjcClass::ObjcClass):
        (KJS::Bindings::ObjcClass::operator=):
        (KJS::Bindings::ObjcClass::constructorAt):
        (KJS::Bindings::ObjcClass::numConstructors):
        * bindings/objc/objc_class.mm: Added.
        (ObjcClass::_commonDelete):
        (ObjcClass::_commonCopy):
        (ObjcClass::_commonInit):
        (_createClassesByIsAIfNecessary):
        (ObjcClass::classForIsA):
        (ObjcClass::ObjcClass):
        (ObjcClass::name):
        (ObjcClass::methodsNamed):
        (ObjcClass::fieldNamed):
        * bindings/objc/objc_header.h: Added.
        * bindings/objc/objc_instance.h: Added.
        (KJS::Bindings::ObjcInstance::getObject):
        * bindings/objc/objc_instance.mm: Added.
        (ObjcInstance::ObjcInstance):
        (ObjcInstance::~ObjcInstance):
        (ObjcInstance::operator=):
        (ObjcInstance::begin):
        (ObjcInstance::end):
        (ObjcInstance::getClass):
        (ObjcInstance::invokeMethod):
        (ObjcInstance::defaultValue):
        (ObjcInstance::stringValue):
        (ObjcInstance::numberValue):
        (ObjcInstance::booleanValue):
        (ObjcInstance::valueOf):
        * bindings/objc/objc_jsobject.h: Added.
        * bindings/objc/objc_jsobject.mm: Added.
        * bindings/objc/objc_runtime.h:
        (KJS::Bindings::ObjcField::~ObjcField):
        (KJS::Bindings::ObjcField::ObjcField):
        (KJS::Bindings::ObjcField::operator=):
        (KJS::Bindings::ObjcMethod::ObjcMethod):
        (KJS::Bindings::ObjcMethod::~ObjcMethod):
        (KJS::Bindings::ObjcMethod::operator=):
        * bindings/objc/objc_runtime.mm: Added.
        (ObjcMethod::ObjcMethod):
        (ObjcMethod::name):
        (ObjcMethod::numParameters):
        (ObjcMethod::getMethodSignature):
        (ObjcField::ObjcField):
        (ObjcField::name):
        (ObjcField::type):
        (ObjcField::valueFromInstance):
        (ObjcField::setValueToInstance):
        * bindings/objc/objc_utility.h: Added.
        (KJS::Bindings::):
        * bindings/objc/objc_utility.mm: Added.
        (KJS::Bindings::JSMethodNameToObjCMethodName):
        (KJS::Bindings::convertValueToObjcValue):
        (KJS::Bindings::convertObjcValueToValue):
        (KJS::Bindings::objcValueTypeForType):
        * bindings/runtime.cpp:
        (MethodList::MethodList):
        (MethodList::operator=):
        (Instance::setValueOfField):
        (Instance::createBindingForLanguageInstance):
        (Instance::createRuntimeObject):
        * bindings/runtime.h:
        * bindings/runtime_method.cpp:
        (RuntimeMethodImp::RuntimeMethodImp):
        (RuntimeMethodImp::get):
        (RuntimeMethodImp::call):
        * bindings/runtime_method.h:
        * bindings/runtime_object.cpp:
        (RuntimeObjectImp::get):
        (RuntimeObjectImp::hasProperty):
        * bindings/test.js: Added.
        * bindings/testbindings.mm: Added.
        (-[MySecondInterface init]):
        (-[MyFirstInterface init]):
        (-[MyFirstInterface dealloc]):
        (+[MyFirstInterface JavaScriptNameForSelector:]):
        (-[MyFirstInterface getInt]):
        (-[MyFirstInterface setInt:]):
        (-[MyFirstInterface getMySecondInterface]):
        (-[MyFirstInterface logMessage:]):
        (GlobalImp::className):
        (readJavaScriptFromFile):
        (main):

=== Safari-128 ===

2004-02-08  Darin Adler  <darin@apple.com>

        Reviewed by Dave.

        - fixed things seen in the profile, for a total speedup of 4% on cvs-base (including changes across all projects)

        * JavaScriptCorePrefix.h: Add a workaround for a bug in our system headers that prevents the <ctype.h>
        macros from working right in C++ code that uses the <cctype> header.

        * kjs/ustring.cpp:
        (KJS::inlineUTF8SequenceLengthNonASCII): Added.
        (KJS::UTF8SequenceLengthNonASCII): Added.
        (KJS::inlineUTF8SequenceLength): Added.
        (KJS::UTF8SequenceLength): Calls inlineUTF8SequenceLengthNonASCII now.
        (KJS::decodeUTF8Sequence): Use new inlineUTF8SequenceLengthNonASCII; faster for ASCII.
        (KJS::createSortedOffsetsArray): Add special case for 1, 2, and 3 offsets, so we don't do qsort for those.
        (KJS::convertUTF16OffsetsToUTF8Offsets): Use new inlineUTF8SequenceLengthNonASCII; faster for ASCII.
        (KJS::convertUTF8OffsetsToUTF16Offsets): Use new inlineUTF8SequenceLengthNonASCII; faster for ASCII.

        - fixed the test program so it won't hit the interpreter lock assertion

        * kjs/testkjs.cpp: (main): Just lock around the whole thing, since the test is singly threaded.

=== Safari-127 ===

2004-02-06  Richard Williamson   <rjw@apple.com>

        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.

        Reviewed by John.

        * bindings/jni/jni_jsobject.cpp:
        (JSObject::toString):
        * bindings/jni/jni_utility.cpp:
        (KJS::Bindings::convertValueToJValue):

2004-02-02  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        - fixed <rdar://problem/3546613>: array of negative size leads to crash (test page at oscar.the-rileys.net)

        * kjs/array_object.cpp:
        (ArrayInstanceImp::ArrayInstanceImp): If the length is greater than 10,000, don't allocate an array until
        we start putting values in. This prevents new Array(2147483647) from causing trouble.
        (ArrayObjectImp::construct): Check number as described in specification, and raise a range error if the
        number is out of range. This prevents new Array(-1) from causing trouble.

        - fixed <rdar://problem/3545756>: Math.round screws up on numbers bigger than 2^31 (incorrect results on HP-35 calculator page)

        * kjs/math_object.cpp: (MathFuncImp::call): Change implementation to be much simpler and not involve
        casting to int. Results now match those in other browsers.

2004-02-02  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        - fixed <rdar://problem/3519285>: integer operations on large negative numbers yield bad results (discovered with "HTMLCrypt")
        - fixed other related overflow issues

        * kjs/value.h: Changed return types of toInteger, toInt32, toUInt32, and toUInt16.
        * kjs/value.cpp:
        (ValueImp::toInteger): Change to return a double, since this operation, from the ECMA specification,
        must not restrict values to the range of a particular integer type.
        (ValueImp::toInt32): Used a sized integer type for the result of this function, and also added
        proper handling for negative results from fmod.
        (ValueImp::toUInt32): Ditto.
        (ValueImp::toUInt16): Ditto.
        (ValueImp::dispatchToUInt32): Changed result type from unsigned to uint32_t.

        * kjs/array_object.cpp: (ArrayProtoFuncImp::call): Use a double instead of an int to handle
        out-of-integer-range values better in the slice function.
        * kjs/internal.cpp: (KJS::roundValue): Streamline the function, handling NAN and infinity properly.
        * kjs/number_object.cpp: (NumberProtoFuncImp::call): Use a double instead of an int to handle
        out-of-integer-range values better in the toString function.
        * kjs/string_object.cpp: (StringProtoFuncImp::call): Use a double instead of an int to handle
        out-of-integer-range values better in the charAt, charCodeAt, indexOf, lastIndexOf, slice,
        and substr functions.

=== Safari-126 ===

2004-01-30  Richard Williamson   <rjw@apple.com>

        Fixed 3542044.  Create KJS::String using UString constructor instead of passing UTF8 string to char* constructor.

        Reviewed by Darin.

        * bindings/jni/jni_instance.cpp:
        (JavaInstance::stringValue):

2004-01-26  Darin Adler  <darin@apple.com>

        * Makefile.am: Switch from pbxbuild to xcodebuild.

2004-01-22  Richard Williamson   <rjw@apple.com>

        Added stubs for ObjC language binding to JavaScript.

        * JavaScriptCore.pbproj/project.pbxproj:
        * bindings/jni/jni_runtime.h:
        * bindings/objc/objc_runtime.h: Added.
        (KJS::Bindings::ObjcParameter::ObjcParameter):
        (KJS::Bindings::ObjcParameter::~ObjcParameter):
        (KJS::Bindings::ObjcParameter::operator=):
        (KJS::Bindings::ObjcParameter::type):
        (KJS::Bindings::ObjcConstructor::ObjcConstructor):
        (KJS::Bindings::ObjcConstructor::~ObjcConstructor):
        (KJS::Bindings::ObjcConstructor::_commonCopy):
        (KJS::Bindings::ObjcConstructor::operator=):
        (KJS::Bindings::ObjcConstructor::value):
        (KJS::Bindings::ObjcConstructor::parameterAt):
        (KJS::Bindings::ObjcConstructor::numParameters):
        (KJS::Bindings::ObjcField::ObjcField):
        (KJS::Bindings::ObjcField::~ObjcField):
        * bindings/runtime.h:

2004-01-22  Richard Williamson   <rjw@apple.com>

        Simplified JavaString by using UString as backing store.  This
        revealed a bug in CString's assignment operator which I fixed.

        Removed some dead code.
 
        Reviewed by John.

        * bindings/jni/jni_runtime.h:
        (KJS::Bindings::JavaString::JavaString):
        (KJS::Bindings::JavaString::_commonInit):
        (KJS::Bindings::JavaString::UTF8String):
        (KJS::Bindings::JavaString::uchars):
        (KJS::Bindings::JavaString::length):
        (KJS::Bindings::JavaString::ustring):
        * bindings/runtime_object.cpp:
        (RuntimeObjectImp::RuntimeObjectImp):
        * bindings/runtime_object.h:
        * kjs/ustring.cpp:
        (KJS::CString::CString):
        (KJS::CString::operator=):

=== Safari-125 ===

=== Safari-124 ===

2004-01-16  Richard Williamson   <rjw@apple.com>

        Fixed 3525853.  We weren't handling mapping to overloaded Java
        methods very well.  Even though this is undefined the other
        browsers support it.  Also fixed a bug with returning arrays
        from Java functions.

        Reviewed by John.

        * bindings/jni/jni_class.cpp:
        (JavaClass::_commonInit):
        (JavaClass::methodsNamed):
        * bindings/jni/jni_class.h:
        * bindings/jni/jni_instance.cpp:
        (JavaInstance::invokeMethod):
        * bindings/jni/jni_instance.h:
        * bindings/jni/jni_runtime.cpp:
        (JavaArray::convertJObjectToArray):
        (JavaField::valueFromInstance):
        (JavaMethod::signature):
        (JavaArray::valueAt):
        * bindings/jni/jni_runtime.h:
        * bindings/jni_jsobject.cpp:
        (JSObject::call):
        (JSObject::convertJObjectToValue):
        * bindings/runtime.cpp:
        (MethodList::addMethod):
        (MethodList::length):
        (MethodList::methodAt):
        (MethodList::~MethodList):
        * bindings/runtime.h:
        (KJS::Bindings::MethodList::MethodList):
        * bindings/runtime_method.cpp:
        (RuntimeMethodImp::RuntimeMethodImp):
        (RuntimeMethodImp::get):
        (RuntimeMethodImp::call):
        * bindings/runtime_method.h:
        * bindings/runtime_object.cpp:
        (RuntimeObjectImp::get):
        (RuntimeObjectImp::hasProperty):

2004-01-16  Richard Williamson   <rjw@apple.com>

        Fixed 3531229.  Another place that needs the  Push/PopLocalFrame
        protection implemented for 3530401.

        Reviewed by John.

        * bindings/runtime_method.cpp:
        (RuntimeMethodImp::call):

2004-01-15  Richard Williamson   <rjw@apple.com>

        Fixed 3530401.  JNI doesn't cleanup local refs created on the
        main thread.   IMO this is a bad bug in our JMI implementation.

        To work-around the problem I explicitly delete all local refs.
        Further, I've added Push/PopLocalFrame calls to catch any refs
        that I may have missed.  This will guarantee that we don't leak
        any Java references.

        Reviewed by John.

        * bindings/jni/jni_class.cpp:
        (JavaClass::_commonInit):
        (JavaClass::JavaClass):
        * bindings/jni/jni_instance.cpp:
        (JavaInstance::begin):
        (JavaInstance::end):
        * bindings/jni/jni_instance.h:
        * bindings/jni/jni_runtime.cpp:
        (JavaConstructor::JavaConstructor):
        (JavaMethod::JavaMethod):
        * bindings/jni_jsobject.cpp:
        (JSObject::listFromJArray):
        * bindings/runtime.h:
        (KJS::Bindings::Instance::begin):
        (KJS::Bindings::Instance::end):
        * bindings/runtime_object.cpp:
        (RuntimeObjectImp::get):
        (RuntimeObjectImp::put):
        (RuntimeObjectImp::canPut):
        (RuntimeObjectImp::hasProperty):
        (RuntimeObjectImp::defaultValue):

2004-01-15  Vicki Murley  <vicki@apple.com>

        Reviewed by Darin.

        * JavaScriptCore.pbproj/project.pbxproj: Update copyright date to 2004.

2004-01-14  Richard Williamson   <rjw@apple.com>
        
        Fixed 3529466.  With recent changes to Java plugin we must no
        longer call DeleteLocalRef().  Not a problem, it was an optimization anyway.

        Reviewed by John.

        * bindings/jni/jni_instance.cpp:
        (JObjectWrapper::JObjectWrapper):

=== Safari-122 ===

2004-01-14  Richard Williamson   <rjw@apple.com>

        Fixed 3529010.

        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.

        Reviewed by John.

        * bindings/jni_jsobject.cpp:
        (addJavaReference):
        (removeJavaReference):
        (RootObject::removeAllJavaReferencesForRoot):
        (JSObject::invoke):

2004-01-13  Richard Williamson   <rjw@apple.com>

        Fixed 3528324. 

        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.

        Reviewed by Hyatt.

        * bindings/jni_jsobject.h:
        (KJS::Bindings::RootObject::~RootObject):

=== Safari-121 ===

=== Safari-120 ===

2004-01-06  Richard Williamson   <rjw@apple.com>

        Fixed 3521814.  Finalize messages weren't being dispatched!

        Reviewed by John.

        * bindings/jni_jsobject.cpp:
        (JSObject::invoke):

2004-01-05  Richard Williamson   <rjw@apple.com>

        Added cache of JNI method IDs to minimize allocations.  This mitigates the problem
        described by 3515579.

        Also cleanup up logging of Java exceptions.

        Reviewed by John.

        * bindings/jni/jni_class.cpp:
        (JavaClass::classForInstance):
        * bindings/jni/jni_instance.cpp:
        (JavaInstance::JavaInstance):
        (JavaInstance::getClass):
        (JavaInstance::invokeMethod):
        (JObjectWrapper::JObjectWrapper):
        (JObjectWrapper::~JObjectWrapper):
        * bindings/jni/jni_instance.h:
        (KJS::Bindings::JavaInstance::operator=):
        * bindings/jni/jni_runtime.cpp:
        (JavaMethod::JavaMethod):
        (JavaMethod::methodID):
        * bindings/jni/jni_runtime.h:
        (KJS::Bindings::JavaMethod::JavaMethod):
        * bindings/jni/jni_utility.cpp:
        (callJNIMethod):
        (callJNIMethodIDA):
        (callJNIMethodA):
        (KJS::Bindings::getMethodID):
        (KJS::Bindings::callJNIVoidMethodIDA):
        (KJS::Bindings::callJNIObjectMethodIDA):
        (KJS::Bindings::callJNIByteMethodIDA):
        (KJS::Bindings::callJNICharMethodIDA):
        (KJS::Bindings::callJNIShortMethodIDA):
        (KJS::Bindings::callJNIIntMethodIDA):
        (KJS::Bindings::callJNILongMethodIDA):
        (KJS::Bindings::callJNIFloatMethodIDA):
        (KJS::Bindings::callJNIDoubleMethodIDA):
        (KJS::Bindings::callJNIBooleanMethodIDA):
        (KJS::Bindings::getCharactersFromJStringInEnv):
        (KJS::Bindings::getUCharactersFromJStringInEnv):
        (KJS::Bindings::getJNIField):
        * bindings/jni/jni_utility.h:

l2003-12-23  John Sullivan  <sullivan@apple.com>

        * JavaScriptCore.pbproj/project.pbxproj:
        Xcode version wars, harmless

2003-12-23  Darin Adler  <darin@apple.com>

        Reviewed by John (concept, not code, which is just the old code coming back).

        - fixed 3518092: REGRESSION (100-119): getting NaN instead of HH:MM times

        * kjs/date_object.cpp: Added back our CF-based implementations of gmtime, localtime,
        mktime, timegm, and time, because mktime, at least, won't handle a year of 0.

2003-12-19  Richard Williamson   <rjw@apple.com>

        Fixed 3515597.  When an error occurs we need
        to make sure result values are zeroed.

        Cleaned up logs by adding a newline.

        Reviewed by John.

        * bindings/jni/jni_utility.cpp:
        (KJS::Bindings::getJavaVM):
        (KJS::Bindings::getJNIEnv):
        (callJNIMethod):
        (callJNIMethodA):
        (KJS::Bindings::getJNIField):
        * bindings/jni_jsobject.cpp:
        (JSObject::convertValueToJObject):

=== Safari-119 ===

2003-12-17  Richard Williamson   <rjw@apple.com>

        Ensure that all the symbols we export are in the KJS
        namespace (3512245).

        Also renamed JavaString.characters() to JavaString.UTF8String()
        for enhanced clarity.

        Added some sanity checking to constructor of JObjectWrapper.

        Reviewed by Dave.

        * ChangeLog:
        * bindings/jni/jni_class.cpp:
        * bindings/jni/jni_class.h:
        * bindings/jni/jni_instance.cpp:
        (JavaInstance::invokeMethod):
        (JObjectWrapper::JObjectWrapper):
        * bindings/jni/jni_instance.h:
        * bindings/jni/jni_runtime.cpp:
        (JavaParameter::JavaParameter):
        (JavaField::JavaField):
        (JavaMethod::JavaMethod):
        (JavaMethod::signature):
        * bindings/jni/jni_runtime.h:
        (KJS::Bindings::JavaString::ascii):
        (KJS::Bindings::JavaString::UTF8String):
        (KJS::Bindings::JavaString::JavaString):
        (KJS::Bindings::JavaString::_commonInit):
        (KJS::Bindings::JavaString::uchars):
        (KJS::Bindings::JavaString::length):
        (KJS::Bindings::JavaString::ustring):
        (KJS::Bindings::JavaParameter::type):
        (KJS::Bindings::JavaField::name):
        (KJS::Bindings::JavaField::type):
        (KJS::Bindings::JavaMethod::name):
        (KJS::Bindings::JavaMethod::returnType):
        * bindings/jni/jni_utility.cpp:
        (KJS::Bindings::getJavaVM):
        (KJS::Bindings::getJNIEnv):
        (KJS::Bindings::callJNIVoidMethod):
        (KJS::Bindings::callJNIObjectMethod):
        (KJS::Bindings::callJNIBooleanMethod):
        (KJS::Bindings::callJNIByteMethod):
        (KJS::Bindings::callJNICharMethod):
        (KJS::Bindings::callJNIShortMethod):
        (KJS::Bindings::callJNIIntMethod):
        (KJS::Bindings::callJNILongMethod):
        (KJS::Bindings::callJNIFloatMethod):
        (KJS::Bindings::callJNIDoubleMethod):
        (KJS::Bindings::callJNIVoidMethodA):
        (KJS::Bindings::callJNIObjectMethodA):
        (KJS::Bindings::callJNIByteMethodA):
        (KJS::Bindings::callJNICharMethodA):
        (KJS::Bindings::callJNIShortMethodA):
        (KJS::Bindings::callJNIIntMethodA):
        (KJS::Bindings::callJNILongMethodA):
        (KJS::Bindings::callJNIFloatMethodA):
        (KJS::Bindings::callJNIDoubleMethodA):
        (KJS::Bindings::callJNIBooleanMethodA):
        (KJS::Bindings::getCharactersFromJString):
        (KJS::Bindings::releaseCharactersForJString):
        (KJS::Bindings::getCharactersFromJStringInEnv):
        (KJS::Bindings::releaseCharactersForJStringInEnv):
        (KJS::Bindings::getUCharactersFromJStringInEnv):
        (KJS::Bindings::releaseUCharactersForJStringInEnv):
        (KJS::Bindings::JNITypeFromClassName):
        (KJS::Bindings::signatureFromPrimitiveType):
        (KJS::Bindings::JNITypeFromPrimitiveType):
        (KJS::Bindings::getJNIField):
        (KJS::Bindings::convertValueToJValue):
        * bindings/jni/jni_utility.h:
        * bindings/jni_jsobject.cpp:
        (KJS::Bindings::JSObject::invoke):
        (KJS::Bindings::JSObject::JSObject):
        (KJS::Bindings::JSObject::call):
        (KJS::Bindings::JSObject::eval):
        (KJS::Bindings::JSObject::getMember):
        (KJS::Bindings::JSObject::setMember):
        (KJS::Bindings::JSObject::removeMember):
        (KJS::Bindings::JSObject::getSlot):
        (KJS::Bindings::JSObject::setSlot):
        (KJS::Bindings::JSObject::toString):
        (KJS::Bindings::JSObject::finalize):
        (KJS::Bindings::JSObject::createNative):
        (KJS::Bindings::JSObject::convertValueToJObject):
        (KJS::Bindings::JSObject::convertJObjectToValue):
        (KJS::Bindings::JSObject::listFromJArray):
        * bindings/jni_jsobject.h:
        * bindings/runtime.cpp:
        * bindings/runtime.h:
        * bindings/runtime_method.cpp:
        * bindings/runtime_method.h:

=== Safari-118 ===

2003-12-16  Richard Williamson   <rjw@apple.com>

        Ack!  More assertions.  Lock ALL entry points into the interpreter!
        (3511733).

        Reviewed by Ken.

        * bindings/jni_jsobject.cpp:
        (Bindings::JSObject::call):
        (Bindings::JSObject::eval):
        (Bindings::JSObject::getMember):
        (Bindings::JSObject::setMember):
        (Bindings::JSObject::removeMember):
        (Bindings::JSObject::getSlot):
        (Bindings::JSObject::setSlot):
        (Bindings::JSObject::convertJObjectToValue):

2003-12-15  Richard Williamson   <rjw@apple.com>

        Fixed a couple of snafus and removed some logging.

        Reviewed by Maciej.

        * bindings/jni_jsobject.cpp:
        (Bindings::performJavaScriptAccess):
        (Bindings::completedJavaScriptAccess):
        (Bindings::dispatchToJavaScriptThread):
        Removed some annoying JS_LOG clutter.

        (Bindings::RootObject::removeAllJavaReferencesForRoot):
        Fixed allocation of key buffer that was called after it was needed.

        (Bindings::JSObject::invoke):
        (Bindings::JSObject::JSObject):
        (Bindings::JSObject::getMember):
        (Bindings::JSObject::getSlot):
        Added additional interpreter locks around getMember and getSlot. 
        These functions may cause allocation of JS impls.  

2003-12-15  Richard Williamson   <rjw@apple.com>

        args weren't passed to 'call' invocation.  d'oh.
        lock interpreter when we create instances of JS impls.        

        Reviewed by Maciej.

        * bindings/jni_jsobject.cpp:
        (Bindings::JSObject::call):
        (Bindings::JSObject::eval):
        (Bindings::JSObject::getMember):
        (Bindings::JSObject::setMember):
        (Bindings::JSObject::getSlot):
        (Bindings::JSObject::convertValueToJObject):
        (Bindings::JSObject::convertJObjectToValue):
        (Bindings::JSObject::listFromJArray):
        * bindings/jni_jsobject.h:

2003-12-15  Richard Williamson   <rjw@apple.com>

        Last piece of LiveConnect!  This checkin adds implementation
        of the Java to JavaScript object conversion functions.

        Reviewed by John.

        * bindings/jni/jni_instance.cpp:
        (JavaInstance::invokeMethod):
        * bindings/jni/jni_utility.cpp:
        * bindings/jni/jni_utility.h:
        * bindings/jni_jsobject.cpp:
        (Bindings::JSObject::invoke):
        (Bindings::JSObject::call):
        (Bindings::JSObject::eval):
        (Bindings::JSObject::getMember):
        (Bindings::JSObject::setMember):
        (Bindings::JSObject::getSlot):
        (Bindings::JSObject::setSlot):
        (Bindings::JSObject::createNative):
        (Bindings::JSObject::convertValueToJObject):
        (Bindings::JSObject::convertJObjectToValue):
        (Bindings::JSObject::listFromJArray):
        * bindings/jni_jsobject.h:
        (Bindings::):
        * bindings/runtime_method.cpp:
        (RuntimeMethodImp::get):
        (RuntimeMethodImp::codeType):
        (RuntimeMethodImp::execute):

2003-12-12  Richard Williamson   <rjw@apple.com>

        Added implementation of stubs in JSObject.  All that
        remains is a couple of simple conversion functions stubs and
        we're done with LiveConnect.  Also, changed string passing to
        JS to use uchars instead of chars.  

        Reviewed by Maciej.

        * bindings/jni/jni_runtime.h:
        (Bindings::JavaString::JavaString):
        (Bindings::JavaString::_commonInit):
        (Bindings::JavaString::_commonCopy):
        (Bindings::JavaString::_commonDelete):
        (Bindings::JavaString::~JavaString):
        (Bindings::JavaString::operator=):
        (Bindings::JavaString::uchars):
        (Bindings::JavaString::length):
        (Bindings::JavaString::ustring):
        * bindings/jni/jni_utility.cpp:
        (getUCharactersFromJStringInEnv):
        (releaseUCharactersForJStringInEnv):
        (convertValueToJObject):
        (convertJObjectToValue):
        * bindings/jni/jni_utility.h:
        * bindings/jni_jsobject.cpp:
        (Bindings::JSObject::invoke):
        (Bindings::JSObject::call):
        (Bindings::JSObject::eval):
        (Bindings::JSObject::getMember):
        (Bindings::JSObject::setMember):
        (Bindings::JSObject::removeMember):
        (Bindings::JSObject::getSlot):
        (Bindings::JSObject::setSlot):
        * bindings/jni_jsobject.h:

2003-12-12  Richard Williamson   <rjw@apple.com>

        Ensure that all calls from Java into JavaScript are
        performed on a designated thread (the main thread).

        Reviewed by Ken.

        * bindings/jni_jsobject.cpp:
        (isJavaScriptThread):
        (rootForImp):
        (Bindings::performJavaScriptAccess):
        (Bindings::completedJavaScriptAccess):
        (Bindings::initializeJavaScriptAccessLock):
        (Bindings::lockJavaScriptAccess):
        (Bindings::unlockJavaScriptAccess):
        (Bindings::dispatchToJavaScriptThread):
        (Bindings::RootObject::setFindRootObjectForNativeHandleFunction):
        (Bindings::RootObject::removeAllJavaReferencesForRoot):
        (Bindings::JSObject::invoke):
        (Bindings::JSObject::JSObject):
        (Bindings::JSObject::call):
        (Bindings::JSObject::eval):
        (Bindings::JSObject::getMember):
        (Bindings::JSObject::setMember):
        (Bindings::JSObject::removeMember):
        (Bindings::JSObject::getSlot):
        (Bindings::JSObject::setSlot):
        (Bindings::JSObject::toString):
        (Bindings::JSObject::finalize):
        (Bindings::JSObject::getWindow):
        * bindings/jni_jsobject.h:
        (Bindings::RootObject::~RootObject):
        (Bindings::RootObject::findRootObjectForNativeHandleFunction):
        (Bindings::RootObject::runLoop):
        (Bindings::RootObject::performJavaScriptSource):
        (Bindings::):

2003-12-11  Richard Williamson   <rjw@apple.com>

        Added support for calling a JavaScript function from
        Java.  Right now this only works for void func(void)
        functions, but the conversion of args and return values
        will come shortly.

        Cleaned up and verified reference counting scheme, and
        dereferencing of vended JavaScript objects when applet is
        destroyed (actually when part is destroyed).
        
        Removed link hack for testkjs now that the Java folks think
        they have a solution for the 1.4.2 JavaVM link problem.  Although
        Greg B. thinks his solution may cause problems for the 1.3.1
        version of the VM!?!

        Reviewed by Ken.

        * Makefile.am:
        * bindings/jni/jni_runtime.h:
        (Bindings::JavaString::JavaString):
        * bindings/jni/jni_utility.cpp:
        (convertValueToJValue):
        (convertValueToJObject):
        (listFromJArray):
        * bindings/jni/jni_utility.h:
        * bindings/jni_jsobject.cpp:
        (KJS_setFindRootObjectForNativeHandleFunction):
        (KJS_findRootObjectForNativeHandleFunction):
        (getReferencesByRootDictionary):
        (getReferencesDictionary):
        (findReferenceDictionary):
        (rootForImp):
        (addJavaReference):
        (removeJavaReference):
        * bindings/jni_jsobject.h:
        (Bindings::RootObject::RootObject):
        (Bindings::RootObject::~RootObject):
        (Bindings::RootObject::setRootObjectImp):
        (Bindings::RootObject::rootObjectImp):
        (Bindings::RootObject::setInterpreter):
        (Bindings::RootObject::interpreter):

=== Safari-117 ===

2003-12-10  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        - fixed regression in JavaScript tests reported by the KDE guys
        - fixed 3506345: REGRESSION (115-116): VIP: chordfind.com no longer displays chords

        * kjs/ustring.h: Add tolerateEmptyString parameter to toDouble and toULong.
        * kjs/ustring.cpp:
        (KJS::UString::toDouble): Separate the "tolerant" parameter into two separate ones:
        tolerateTrailingJunk and tolerateEmptyString. Add new overloads; better for code size
        and binary compatibility than default parameter values.
        (KJS::UString::toULong): Pass tolerateEmptyString down to toDouble. Add new overload.

        * kjs/string_object.cpp: (StringProtoFuncImp::call): Pass false for the new
        "tolerate empty string" parameter.

2003-12-10  Richard Williamson   <rjw@apple.com>

        Added code to manage reference counting of JavaScript
        objects passed to Java.   Also added implementation of
        KJS_JSCreateNativeJSObject.  This is the function that
        provides the root object to Java (KJS::Window).

        Reviewed by Hyatt.

        * JavaScriptCore.pbproj/project.pbxproj:
        * bindings/jni_jsobject.cpp:
        (KJS_setFindObjectForNativeHandleFunction):
        (KJS_findObjectForNativeHandleFunction):
        (getReferencesByOwnerDictionary):
        (getReferencesDictionary):
        (findReferenceDictionary):
        (addJavaReference):
        (removeJavaReference):
        (removeAllJavaReferencesForOwner):
        * bindings/jni_jsobject.h:

2003-12-09  Richard Williamson   <rjw@apple.com>

        LiveConnect stubs that correspond to the native methods
        on JSObject.  These will be called from the new Java plugin
        when an instance of JSObject is instantiated and messaged.
        When these are implemented the Java will be able to originate
        calls into JavaScript.

        Also a temporary work-around added to Makefile.am to solve
        a link problem.  The 1.4.2 JavaVM accidentally links against
        libobjc.  This call a failure linking testkjs.  Mike Hay is
        working with someone to fix the problem (3505587).

        Reviewed by Chris.

        * JavaScriptCore.pbproj/project.pbxproj:
        * Makefile.am:
        * bindings/jni_jsobject.cpp: Added.
        (KJS_JSCreateNativeJSObject):
        (KJS_JSObject_JSFinalize):
        (KJS_JSObject_JSObjectCall):
        (KJS_JSObject_JSObjectEval):
        (KJS_JSObject_JSObjectGetMember):
        (KJS_JSObject_JSObjectSetMember):
        (KJS_JSObject_JSObjectRemoveMember):
        (KJS_JSObject_JSObjectGetSlot):
        (KJS_JSObject_JSObjectSetSlot):
        (KJS_JSObject_JSObjectToString):
        * bindings/jni_jsobject.h: Added.

2003-12-09  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by John.

        <rdar://problem/3505183>: JavaScriptCore should assert that interpreter is locked in collector

        * kjs/collector.cpp:
        (KJS::Collector::allocate): Assert that interpreter lock count is not 0.
        (KJS::Collector::collect): likewise

2003-12-08  Richard Williamson   <rjw@apple.com>

        LiveConnect:  The last piece of the JavaScript side of the
        LiveConnect implementation.  This change adds support for
        setting/getting values from Java arrays in JavaScript.

        Reviewed by John.

        * bindings/jni/jni_instance.h:
        * bindings/jni/jni_runtime.cpp:
        (JavaField::JavaField):
        (convertJObjectToArray):
        (JavaArray::JavaArray):
        (JavaArray::~JavaArray):
        (JavaArray::setValueAt):
        (JavaArray::valueAt):
        (JavaArray::getLength):
        * bindings/jni/jni_runtime.h:
        (Bindings::JavaArray::operator=):
        (Bindings::JavaArray::javaArray):
        * bindings/jni/jni_utility.cpp:
        (JNITypeFromPrimitiveType):
        (convertValueToJValue):
        * bindings/jni/jni_utility.h:
        * bindings/runtime.h:
        * bindings/runtime_array.cpp:
        (RuntimeArrayImp::RuntimeArrayImp):
        (RuntimeArrayImp::~RuntimeArrayImp):
        (RuntimeArrayImp::get):
        (RuntimeArrayImp::put):
        (RuntimeArrayImp::hasProperty):
        * bindings/runtime_array.h:
        (KJS::RuntimeArrayImp::getLength):
        (KJS::RuntimeArrayImp::getConcreteArray):
        * bindings/runtime_object.cpp:
        (RuntimeObjectImp::get):
        (RuntimeObjectImp::canPut):
        (RuntimeObjectImp::hasProperty):

2003-12-05  Richard Williamson   <rjw@apple.com>

        LiveConnect:  Part 1 of supporting JS bindings to
        native language arrays.

        Reviewed by Chris.

        * JavaScriptCore.pbproj/project.pbxproj:
        * bindings/jni/jni_runtime.cpp:
        (JavaField::JavaField):
        (convertJObjectToArray):
        (JavaField::valueFromInstance):
        (JavaField::setValueToInstance):
        * bindings/jni/jni_runtime.h:
        * bindings/runtime.cpp:
        (Instance::setValueOfField):
        * bindings/runtime.h:
        (Bindings::Array::~Array):

2003-12-04  Richard Williamson   <rjw@apple.com>

        LiveConnect:  Moved defaultValue into concrete implementation because
        more intelligent conversion can be perform with knowledge
        of the class of the original instance.

        Reviewed by Chris.

        * bindings/jni/jni_class.cpp:
        (JavaClass::isNumberClass):
        (JavaClass::isBooleanClass):
        (JavaClass::isStringClass):
        * bindings/jni/jni_class.h:
        * bindings/jni/jni_instance.cpp:
        (JavaInstance::defaultValue):
        (JavaInstance::valueOf):
        * bindings/jni/jni_instance.h:
        (Bindings::JavaInstance::javaInstance):
        * bindings/runtime.h:
        * bindings/runtime_object.cpp:
        (RuntimeObjectImp::defaultValue):

2003-12-04  Richard Williamson   <rjw@apple.com>

        LiveConnect:  Added support for setting the value of Java
        fields.

        Reviewed by Chris.

        * bindings/jni/jni_instance.cpp:
        (JavaInstance::invokeMethod):
        * bindings/jni/jni_runtime.cpp:
        (JavaParameter::JavaParameter):
        (JavaField::JavaField):
        (JavaField::valueFromInstance):
        (JavaField::setValueToInstance):
        (JavaMethod::JavaMethod):
        * bindings/jni/jni_runtime.h:
        (Bindings::JavaField::getJNIType):
        * bindings/jni/jni_utility.cpp:
        (JNITypeFromClassName):
        (convertValueToJValue):
        * bindings/jni/jni_utility.h:
        * bindings/runtime.cpp:
        (Instance::setValueOfField):
        * bindings/runtime.h:
        * bindings/runtime_object.cpp:
        (RuntimeObjectImp::get):
        (RuntimeObjectImp::put):
        (RuntimeObjectImp::defaultValue):

2003-12-04  Richard Williamson   <rjw@apple.com>

        Added support for string conversions.
        Changed various JavaString member variables to be inline.
        Implemented defaultValue for context relevant type coercion.

        Reviewed by Chris.

        * bindings/jni/jni_class.cpp:
        (JavaClass::JavaClass):
        (JavaClass::setClassName):
        (JavaClass::classForInstance):
        * bindings/jni/jni_class.h:
        * bindings/jni/jni_instance.cpp:
        (JavaInstance::stringValue):
        (JavaInstance::numberValue):
        (JavaInstance::booleanValue):
        (JavaInstance::invokeMethod):
        * bindings/jni/jni_instance.h:
        * bindings/jni/jni_runtime.cpp:
        (JavaParameter::JavaParameter):
        (JavaField::JavaField):
        (JavaMethod::JavaMethod):
        (appendClassName):
        (JavaMethod::signature):
        * bindings/jni/jni_runtime.h:
        (Bindings::JavaString::JavaString):
        (Bindings::JavaString::~JavaString):
        (Bindings::JavaString::operator=):
        (Bindings::JavaString::characters):
        (Bindings::JavaParameter::JavaParameter):
        (Bindings::JavaParameter::~JavaParameter):
        (Bindings::JavaParameter::operator=):
        (Bindings::JavaParameter::type):
        (Bindings::JavaField::JavaField):
        (Bindings::JavaField::~JavaField):
        (Bindings::JavaField::operator=):
        (Bindings::JavaField::name):
        (Bindings::JavaField::type):
        (Bindings::JavaMethod::JavaMethod):
        (Bindings::JavaMethod::_commonDelete):
        (Bindings::JavaMethod::name):
        (Bindings::JavaMethod::returnType):
        * bindings/jni/jni_utility.cpp:
        (convertValueToJValue):
        * bindings/runtime.h:
        (Bindings::Instance::valueOf):
        * bindings/runtime_method.cpp:
        (RuntimeMethodImp::call):
        * bindings/runtime_object.cpp:
        (RuntimeObjectImp::RuntimeObjectImp):
        (RuntimeObjectImp::get):
        (RuntimeObjectImp::defaultValue):
        * bindings/runtime_object.h:
        (KJS::RuntimeObjectImp::classInfo):

=== Safari-116 ===

2003-12-03  Richard Williamson   <rjw@apple.com>

        LiveConnect:  Added support for parameter passing to Java and conversion
        of return values.

        Reviewed by Chris.

        * bindings/jni/jni_instance.cpp:
        (JavaInstance::invokeMethod):
        * bindings/jni/jni_instance.h:
        * bindings/jni/jni_runtime.cpp:
        (JavaParameter::JavaParameter):
        (JavaMethod::JavaMethod):
        (JavaMethod::signature):
        * bindings/jni/jni_runtime.h:
        (Bindings::JavaParameter::JavaParameter):
        (Bindings::JavaParameter::operator=):
        (Bindings::JavaParameter::getJNIType):
        * bindings/jni/jni_utility.cpp:
        (callJNIBooleanMethodA):
        (convertValueToJValue):
        * bindings/jni/jni_utility.h:
        * bindings/runtime.h:
        * bindings/runtime_method.cpp:
        (RuntimeMethodImp::call):
        * bindings/runtime_object.cpp:
        (RuntimeObjectImp::get):

2003-12-02  Richard Williamson   <rjw@apple.com>

        Added support for calling simple methods in Java from JavaScript.
        (void return and no parameters).  Yay, LiveConnect lives.

        Still need write argument and return value conversion code.

        Reviewed by Chris.

        * JavaScriptCore.pbproj/project.pbxproj:
        * bindings/jni/jni_instance.cpp:
        (JavaInstance::getClass):
        (JavaInstance::invokeMethod):
        * bindings/jni/jni_instance.h:
        * bindings/jni/jni_runtime.cpp:
        (JavaMethod::JavaMethod):
        (JavaMethod::signature):
        (JavaMethod::JNIReturnType):
        * bindings/jni/jni_runtime.h:
        (Bindings::JavaMethod::_commonDelete):
        (Bindings::JavaMethod::_commonCopy):
        (Bindings::JavaMethod::name):
        * bindings/jni/jni_utility.cpp:
        (signatureFromPrimitiveType):
        * bindings/jni/jni_utility.h:
        * bindings/runtime.h:
        * bindings/runtime_method.cpp: Added.
        (RuntimeMethodImp::RuntimeMethodImp):
        (RuntimeMethodImp::~RuntimeMethodImp):
        (RuntimeMethodImp::get):
        (RuntimeMethodImp::implementsCall):
        (RuntimeMethodImp::call):
        (RuntimeMethodImp::codeType):
        (RuntimeMethodImp::execute):
        * bindings/runtime_method.h: Added.
        * bindings/runtime_object.cpp:
        (RuntimeObjectImp::RuntimeObjectImp):
        (RuntimeObjectImp::get):
        * bindings/runtime_object.h:
        * kjs/function.cpp:
        (FunctionImp::FunctionImp):
        * kjs/interpreter.h:

2003-12-01  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        - fixed 3493799: JavaScript string.replace expands $ if it's the last character in replacement string

        * kjs/ustring.cpp: (KJS::UString::toDouble): Fix backwards handling of the "tolerant" boolean.
        This indirectly caused the string.replace bug.

2003-12-02  Maciej Stachowiak  <mjs@apple.com>

        Merged patches from Harri Porten and David Faure to fix:

        <rdar://problem/3497643>: reproducible crash printing self-referential array
        
        * kjs/array_object.cpp:
        (ArrayProtoFuncImp::call): Break out of the loop if an exception was thrown.
        * kjs/nodes.cpp:
        (FunctionCallNode::evaluate): Move function call depth check from here...
        * kjs/object.cpp:
        (KJS::Object::call): ...to here.
        * kjs/object.h: Un-inline Object::call now that it does more.

2003-12-01  Richard Williamson   <rjw@apple.com>

        Fixed mistake in method signatures used to get boolean and integer fields.

        Reviewed by Chris.

        * bindings/jni/jni_runtime.cpp:
        (JavaField::valueFromInstance):

2003-12-01  Richard Williamson   <rjw@apple.com>

Fixed 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.

Fixed 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.

Added support for getting at Java object fields.

        Reviewed by Chris.

        * JavaScriptCore.pbproj/project.pbxproj:
        * Makefile.am:
        * bindings/jni/jni_instance.cpp:
        (JObjectWrapper::JObjectWrapper):
        * bindings/jni/jni_instance.h:
        (Bindings::JObjectWrapper::~JObjectWrapper):
        * bindings/jni/jni_runtime.cpp:
        (JavaField::valueFromInstance):
        * bindings/runtime_object.cpp:
        (RuntimeObjectImp::~RuntimeObjectImp):
        (RuntimeObjectImp::RuntimeObjectImp):
        (RuntimeObjectImp::get):
        (RuntimeObjectImp::deleteProperty):
        * bindings/runtime_object.h:

=== Safari-115 ===

2003-11-21  Maciej Stachowiak  <mjs@apple.com>

        Patch from Harri Porten, reviewed by me.

        - fixed 3491712 - String slice with negative arguments does not offset from end of string
        
        * kjs/string_object.cpp:
        (StringProtoFuncImp::call): Handle negative arguments as offsets from end by
        adding length and clamping to [0,length-1].

2003-11-21  Maciej Stachowiak  <mjs@apple.com>

        Patch from Harri Porten, reviewed by me.

        - fixed 3491709 - using Function.apply with a primitive type as the arg list causes crash
        
        * kjs/function_object.cpp:
        (FunctionProtoFuncImp::call): Nest parentheses properly.

2003-11-20  Richard Williamson   <rjw@apple.com>

        More LiveConnect stuff.  Primitive Java fields are now
        accessible from JavaScript!  Yay!

        Reviewed by Maciej.

        * bindings/jni/jni_class.cpp:
        (JavaClass::methodNamed):
        (JavaClass::fieldNamed):
        * bindings/jni/jni_class.h:
        (Bindings::JavaClass::_commonDelete):
        * bindings/jni/jni_instance.cpp:
        (JavaInstance::JavaInstance):
        (JavaInstance::~JavaInstance):
        (JavaInstance::getClass):
        * bindings/jni/jni_instance.h:
        (Bindings::JavaInstance::javaInstance):
        * bindings/jni/jni_runtime.cpp:
        (JavaField::JavaField):
        (JavaField::valueFromInstance):
        * bindings/jni/jni_runtime.h:
        (Bindings::JavaField::JavaField):
        (Bindings::JavaField::~JavaField):
        (Bindings::JavaField::operator=):
        * bindings/jni/jni_utility.cpp:
        (callJNIMethod):
        (callJNIMethodA):
        (callJNIVoidMethod):
        (callJNIObjectMethod):
        (callJNIBooleanMethod):
        (callJNIByteMethod):
        (callJNICharMethod):
        (callJNIShortMethod):
        (callJNIIntMethod):
        (callJNILongMethod):
        (callJNIFloatMethod):
        (callJNIDoubleMethod):
        (callJNIVoidMethodA):
        (callJNIObjectMethodA):
        (callJNIByteMethodA):
        (callJNICharMethodA):
        (callJNIShortMethodA):
        (callJNIIntMethodA):
        (callJNILongMethodA):
        (callJNIFloatMethodA):
        (callJNIDoubleMethodA):
        (releaseCharactersForJStringInEnv):
        (primitiveTypeFromClassName):
        (getJNIField):
        * bindings/jni/jni_utility.h:
        * bindings/runtime.cpp:
        (Instance::createBindingForLanguageInstance):
        (Instance::getValueOfField):
        * bindings/runtime.h:
        * bindings/runtime_object.cpp:
        (RuntimeObjectImp::get):

2003-11-20  Richard Williamson   <rjw@apple.com>

        More LiveConnect stuff.

        Reviewed by Chris.

        * bindings/jni/jni_class.cpp:
        (JavaClass::classForName):
        (JavaClass::classForInstance):
        * bindings/jni/jni_instance.cpp:
        (JavaInstance::getValueOfField):
        * bindings/jni/jni_instance.h:
        (Bindings::JObjectWrapper::JObjectWrapper):
        * bindings/jni/jni_runtime.h:
        (Bindings::JavaConstructor::~JavaConstructor):
        (Bindings::JavaConstructor::operator=):
        (Bindings::JavaMethod::JavaMethod):
        (Bindings::JavaMethod::_commonDelete):
        (Bindings::JavaMethod::signature):
        * bindings/jni/jni_utility.cpp:
        (getJNIEnv):
        (attachToJavaVM):
        * bindings/jni/jni_utility.h:
        * bindings/runtime.h:
        * bindings/runtime_object.cpp:
        (RuntimeObjectImp::~RuntimeObjectImp):
        (RuntimeObjectImp::get):
        * bindings/runtime_object.h:

2003-11-19  Richard Williamson   <rjw@apple.com>

        More LiveConnect stuff.

        Reviewed by Ken.

        * JavaScriptCore.pbproj/project.pbxproj:
        * bindings/jni/jni_class.cpp: Added.
        (JavaClass::_commonInit):
        (JavaClass::JavaClass):
        (_createClassesByNameIfNecessary):
        (JavaClass::classForName):
        (JavaClass::classForInstance):
        (JavaClass::methodNamed):
        (JavaClass::fieldNamed):
        * bindings/jni/jni_class.h: Added.
        (Bindings::JavaClass::_commonDelete):
        (Bindings::JavaClass::~JavaClass):
        (Bindings::JavaClass::_commonCopy):
        (Bindings::JavaClass::JavaClass):
        (Bindings::JavaClass::operator=):
        (Bindings::JavaClass::name):
        (Bindings::JavaClass::constructorAt):
        (Bindings::JavaClass::numConstructors):
        * bindings/jni/jni_instance.cpp: Added.
        (JavaInstance::JavaInstance):
        (JavaInstance::~JavaInstance):
        * bindings/jni/jni_instance.h: Added.
        (Bindings::JObjectWrapper::JObjectWrapper):
        (Bindings::JObjectWrapper::~JObjectWrapper):
        (Bindings::JObjectWrapper::ref):
        (Bindings::JObjectWrapper::deref):
        (Bindings::JavaInstance::getClass):
        (Bindings::JavaInstance::operator=):
        * bindings/jni/jni_runtime.cpp:
        (JavaMethod::JavaMethod):
        * bindings/jni/jni_runtime.h:
        (Bindings::JavaString::JavaString):
        (Bindings::JavaString::~JavaString):
        (Bindings::JavaString::operator=):
        * bindings/jni/jni_utility.cpp:
        (getJavaVM):
        (getJNIEnv):
        (getCharactersFromJString):
        (releaseCharactersForJString):
        (getCharactersFromJStringInEnv):
        (releaseCharactersForJStringInEnv):
        * bindings/jni/jni_utility.h:
        * bindings/runtime.cpp:
        (Instance::createBindingForLanguageInstance):
        * bindings/runtime.h:
        (Bindings::Instance::):

2003-11-18  Richard Williamson   <rjw@apple.com>

        More live connect stubs.  We're getting close.

        Reviewed by Chris.

        * JavaScriptCore.pbproj/project.pbxproj:
        * bindings/jni/jni_runtime.cpp:
        (JavaClass::JavaClass):
        (JavaInstance::JavaInstance):
        (JavaInstance::~JavaInstance):
        * bindings/jni/jni_runtime.h:
        (Bindings::JavaConstructor::value):
        (Bindings::JavaField::value):
        (Bindings::JavaMethod::value):
        (Bindings::JavaClass::_commonDelete):
        (Bindings::JavaClass::_commonCopy):
        (Bindings::JavaClass::methodNamed):
        (Bindings::JavaClass::fieldNamed):
        (Bindings::JavaInstance::getClass):
        * bindings/runtime.cpp: Added.
        * bindings/runtime.h:
        (Bindings::Instance::~Instance):
        * bindings/runtime_object.cpp: Added.
        (RuntimeObjectImp::classInfo):
        (RuntimeObjectImp::RuntimeObjectImp):
        (RuntimeObjectImp::get):
        (RuntimeObjectImp::put):
        (RuntimeObjectImp::canPut):
        (RuntimeObjectImp::hasProperty):
        (RuntimeObjectImp::deleteProperty):
        (RuntimeObjectImp::defaultValue):
        (RuntimeObjectImp::_initializeClassInfoFromInstance):
        * bindings/runtime_object.h: Added.
        (KJS::RuntimeObjectImp::setInternalInstance):
        (KJS::RuntimeObjectImp::getInternalInstance):
        * kjs/object.cpp:
        (KJS::ObjectImp::get):
        (KJS::ObjectImp::hasProperty):
        * kjs/value.h:
        (KJS::):

2003-11-17  Maciej Stachowiak  <mjs@apple.com>

        Patch from Harri, reviewed by me.

        - fixed 3487375 - backwards array slice causes infinite loop
        
        * kjs/array_object.cpp:
        (ArrayProtoFuncImp::call):

2003-11-17  Maciej Stachowiak  <mjs@apple.com>

        Patch from Harri Porten reviewed by me.

        - fixed 3487371 - operator precedence for bitwise or, xor and and is wrong

        * kjs/grammar.y: Correct the precedence.

2003-11-16  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by John.

        - fixed 3483829 - JavaScriptCore needs workaround to compile on Merlot
        
        * JavaScriptCore.pbproj/project.pbxproj: Add -Wno-long-double to
        warning flags.

=== Safari-114 ===

2003-11-13  Richard Williamson   <rjw@apple.com>

        Factored common code between copy constructor and assignment operator.

        Reviewed by Chris.

        * ChangeLog:
        * bindings/jni/jni_runtime.h:
        (Bindings::JavaConstructor::_commonCopy):
        (Bindings::JavaConstructor::JavaConstructor):
        (Bindings::JavaConstructor::operator=):
        (Bindings::JavaField::type):
        * bindings/runtime.h:

2003-11-13  Richard Williamson   <rjw@apple.com>

        More LiveConnect stuff.  This checkin adds abstract classes to model
        language runtimes and a JNI based set of concrete implementations for
        Java.

        Reviewed by Chris.

        * JavaScriptCore.pbproj/project.pbxproj:
        * Makefile.am:
        * bindings/Makefile.am: Removed.
        * bindings/jni/Makefile.am: Removed.
        * bindings/jni/jni_runtime.cpp: Added.
        (JavaField::JavaField):
        (JavaConstructor::JavaConstructor):
        (JavaMethod::JavaMethod):
        (JavaClass::JavaClass):
        * bindings/jni/jni_runtime.h: Added.
        (Bindings::JavaString::JavaString):
        (Bindings::JavaString::~JavaString):
        (Bindings::JavaString::operator=):
        (Bindings::JavaString::characters):
        (Bindings::JavaParameter::JavaParameter):
        (Bindings::JavaParameter::~JavaParameter):
        (Bindings::JavaParameter::operator=):
        (Bindings::JavaParameter::type):
        (Bindings::JavaConstructor::JavaConstructor):
        (Bindings::JavaConstructor::~JavaConstructor):
        (Bindings::JavaConstructor::operator=):
        (Bindings::JavaConstructor::parameterAt):
        (Bindings::JavaConstructor::numParameters):
        (Bindings::JavaField::JavaField):
        (Bindings::JavaField::~JavaField):
        (Bindings::JavaField::operator=):
        (Bindings::JavaField::name):
        (Bindings::JavaField::type):
        (Bindings::JavaMethod::JavaMethod):
        (Bindings::JavaMethod::_commonDelete):
        (Bindings::JavaMethod::~JavaMethod):
        (Bindings::JavaMethod::_commonCopy):
        (Bindings::JavaMethod::operator=):
        (Bindings::JavaMethod::name):
        (Bindings::JavaMethod::returnType):
        (Bindings::JavaMethod::parameterAt):
        (Bindings::JavaMethod::numParameters):
        (Bindings::JavaClass::_commonDelete):
        (Bindings::JavaClass::~JavaClass):
        (Bindings::JavaClass::_commonCopy):
        (Bindings::JavaClass::JavaClass):
        (Bindings::JavaClass::operator=):
        (Bindings::JavaClass::name):
        (Bindings::JavaClass::methodAt):
        (Bindings::JavaClass::numMethods):
        (Bindings::JavaClass::constructorAt):
        (Bindings::JavaClass::numConstructors):
        (Bindings::JavaClass::fieldAt):
        (Bindings::JavaClass::numFields):
        * bindings/jni/jni_utility.cpp:
        (callJNIMethod):
        (callJNIMethodA):
        (callJNIObjectMethod):
        (callJNIByteMethod):
        (callJNICharMethod):
        (callJNIShortMethod):
        (callJNIIntMethod):
        (callJNILongMethod):
        (callJNIFloatMethod):
        (callJNIDoubleMethod):
        (callJNIVoidMethodA):
        (callJNIObjectMethodA):
        (callJNIByteMethodA):
        (callJNICharMethodA):
        (callJNIShortMethodA):
        (callJNIIntMethodA):
        (callJNILongMethodA):
        (callJNIFloatMethodA):
        (callJNIDoubleMethodA):
        (getCharactersFromJString):
        (releaseCharactersForJString):
        * bindings/jni/jni_utility.h:
        * bindings/objc/Makefile.am: Removed.
        * bindings/runtime.h: Added.
        (Bindings::Parameter::~Parameter):
        (Bindings::Constructor::~Constructor):
        (Bindings::Field::~Field):
        (Bindings::Method::~Method):
        (Bindings::Class::~Class):

2003-11-13  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by John.

        - fixed 3472562 - Null or Undefined variables passed to IN operator cause javascript exceptions
        
        * kjs/nodes.cpp:
        (ForInNode::execute): If the in value is null or undefined, bail
        out early, since attempting to iterate its properties will throw
        an exception.

2003-11-12  Darin Adler  <darin@apple.com>

        - fixed the build

        * Makefile.am: Fix the build by removing the bindings directory from SUBDIRS.
        Later, we can either add this back and add the Makefile.am files to the top
        level configure.in or leave it out and remove the Makefile.am files.

2003-11-12  Richard Williamson   <rjw@apple.com>

        Added utility functions for calling JNI methods.

        Reviewed by Chris.

        * JavaScriptCore.pbproj/project.pbxproj:
        * Makefile.am:
        * bindings/Makefile.am: Added.
        * bindings/jni/Makefile.am: Added.
        * bindings/jni/jni_utility.cpp: Added.
        (attachToJavaVM):
        (callJNIMethod):
        (callJNIVoidMethod):
        (callJNIObjectMethod):
        (callJNIByteMethod):
        (callJNICharMethod):
        (callJNIShortMethod):
        (callJNIIntMethod):
        (callJNILongMethod):
        (callJNIFloatMethod):
        (callJNIDoubleMethod):
        * bindings/jni/jni_utility.h: Added.
        * bindings/objc/Makefile.am: Added.

2003-11-08  Darin Adler  <darin@apple.com>

        Reviewed by John.

        - fixed 3477528 -- array.sort(function) fails if the function returns a non-zero value that rounds to zero

        * kjs/array_object.cpp:
        (compareByStringForQSort): Added checks for undefined values to match what the specification calls for.
        (compareWithCompareFunctionForQSort): Added checks for undefined values as above, and also changed the
        code that looks at the compare function result to look at the number returned without rounding to an integer.
        (ArrayProtoFuncImp::call): Changed the code that looks at the compare function result to look at the number
        returned without rounding to an integer.

=== Safari-113 ===

2003-11-03  Vicki Murley <vicki@apple.com>

        Reviewed by kocienda.

        - fixed <rdar://problem/3471096>: non-B&I builds should not use order files, because they cause false "regressions" in perf.

        * JavaScriptCore.pbproj/project.pbxproj: added empty SECTORDER_FLAGS variables to the Development and Deployment build styles

2003-11-02  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        - changed list manipulation to use Harri Porten's idea of a circular
          linked list that is built from head to tail rather than building the
          list backwards and reversing the list when done

        * kjs/grammar.y: Handle CatchNode and FinallyNode in a type-safe way.
        Change many places that passed 0L to pass nothing at all, or to pass 0.

        * kjs/nodes.h:
        (KJS::ElementNode::ElementNode): Build a circular list instead of a 0-terminated
        backwards list.
        (KJS::ArrayNode::ArrayNode): Break the circular list instead of reversing the list.
        (KJS::PropertyValueNode::PropertyValueNode): Moved before ObjectLiteralNode so the
        inline code in ObjectLiteralNode works. Build a circular list instead of a 0-terminated
        backwards list. Made the case for the first node separate so we don't need a nil check.
        (KJS::ObjectLiteralNode::ObjectLiteralNode): Break the circular list instead of
        reversing the list.
        (KJS::ArgumentListNode::ArgumentListNode): Build a circular list instead of a 0-terminated
        backwards list. Also, made the constructors inline (moved here from .cpp file).
        (KJS::ArgumentsNode::ArgumentsNode): Break the circular list instead of
        reversing the list.
        (KJS::NewExprNode::NewExprNode): Changed a 0L to 0.
        (KJS::StatListNode::StatListNode): Make this constructor no longer inline (moved into
        .cpp file). The one in the .cpp file builds a circular list instead of a 0-terminated
        backwards list.
        (KJS::VarDeclListNode::VarDeclListNode): Build a circular list instead of a 0-terminated
        backwards list.
        (KJS::VarStatementNode::VarStatementNode): Break the circular list instead of reversing
        the list.
        (KJS::BlockNode::BlockNode): Make this constructor no longer inline (moved into .cpp file).
        The one in the .cpp file breaks the list instead of reversing it.
        (KJS::ForNode::ForNode): Break the circular list instead of reversing the list.
        (KJS::CaseClauseNode::CaseClauseNode): Break the circular list instead of reversing the
        list.
        (KJS::ClauseListNode::ClauseListNode): Build a circular list instead of a 0-terminated
        backwards list.
        (KJS::CaseBlockNode::CaseBlockNode): Make this constructor no longer inline (moved into
        .cpp file). The one in the .cpp file breaks the list instead of reversing it.
        (KJS::TryNode::TryNode): Changed constructor to take typed parameters for the catch and
        finally nodes rather than just Node.
        (KJS::ParameterNode::ParameterNode): Build a circular list instead of a 0-terminated
        backwards list.
        (KJS::FuncDeclNode::FuncDeclNode): Break the circular list instead of reversing the
        list.
        (KJS::FuncExprNode::FuncExprNode): Break the circular list instead of reversing the
        list.

        * kjs/nodes.cpp:
        (StatListNode::StatListNode): Moved this constructor here, no longer inline.
        Did the "break circular list" thing instead of the "reverse list" thing.
        Added setLoc calls to match KJS in the KDE tree; since we don't currently
        use the JavaScript debugging support, it's unclear whether there's any benefit, but
        later we might be using it and it's good to be as close as possible.
        (BlockNode::BlockNode): Moved this constructor here, no longer inline.
        Did the "break circular list" thing instead of the "reverse list" thing.
        Added setLoc calls.
        (CaseBlockNode::CaseBlockNode): Moved this constructor here, no longer inline.
        Did the "break circular list" thing instead of the "reverse list" thing.
        (SourceElementsNode::SourceElementsNode): Moved this constructor here, no longer inline.
        Did the "break circular list" thing instead of the "reverse list" thing.
        Added setLoc calls.

        * kjs/grammar.cpp: Regenerated.
        * kjs/grammar.cpp.h: Regenerated.
        * kjs/grammar.h: Regenerated.

=== Safari-112 ===

2003-10-30  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Ken.

        - fixed 3427069 - browsing mp3.com causes leaks (KJS)
        
        * kjs/string_object.cpp:
        (StringProtoFuncImp::call): Don't do an early return, since that
        could leak a temporary regexp.

2003-10-29  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin.

        - fixed 3426076 - Leak of JS lexer data visiting http://www.ebay.com
        
        * kjs/grammar.cpp:
        (yyerror): Updated the commented code.
        * kjs/grammar.y: Don't delete string and identifier tokens when done
        with them any more, they'll get cleaned up by the lexer now.
        * kjs/internal.cpp:
        (Parser::parse): Tell lexer when done parsing.
        * kjs/lexer.cpp:
        (Lexer::Lexer): Initialize new data members.
        (Lexer::lex): Use new methods to make strings and identifiers, and
        save them.
        (Lexer::makeIdentifier): Make a new Identifier and save it in an
        auto-growing array.
        (Lexer::makeUString): Likewise for UStrings.
        (Lexer::doneParsing): Clean up arrays of Ifentifiers and UStrings.
        * kjs/lexer.h:

2003-10-28  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Ken.

        - fixed 3413962 -  malicious web pages can kill all future JavaScript execution by breaking recursion limit check
        
        * kjs/nodes.cpp:
        (FunctionCallNode::evaluate): If we're going to return early due
        to breaking the recursion limit, make sure to lower it again, or
        it will creep up by one each time it's exceeded.

2003-10-26  Darin Adler  <darin@apple.com>

        * JavaScriptCorePrefix.h: Added a C case to the NULL definition since we use C as well
        as C++ in this project.

2003-10-26  Darin Adler  <darin@apple.com>

        - rolled in some CString changes Harri Porten did on the KDE side

        * kjs/ustring.cpp:
        (KJS::CString::CString): Use memcpy instead of strcpy for speed. Fix an off by one error
        in the copy constructor.
        (KJS::CString::operator=): Use memcpy instead of strcpy for speed.

        * JavaScriptCorePrefix.h: Add a definition of NULL here that takes advantage of the GNU
        __null feature even if the system C library doesn't.

== Rolled over to ChangeLog-2003-10-25 ==
