2010-01-25  Mark Rowe  <mrowe@apple.com>

        Merge r52749.

    2010-01-04  Dan Bernstein  <mitz@apple.com>

        Reviewed by Ada Chan and Mark Rowe.

        Updated copyright string

        * Info.plist:

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

        Reviewed by Dan Bernstein

        - fix <rdar://problem/6971484> REGRESSION (r30534): "Scrolling Credits"
          effect does not scroll on iMovie 7.1.4 on Tiger

        In <http://trac.webkit.org/changeset/30534>, the prototype of
        JSObject::put() which UserObjectImp had been overriding changed, but
        UserObjectImp wasn't updated, so its override was no longer getting
        called after that.

        * UserObjectImp.cpp:
        (UserObjectImp::put): Match the current prototype of JSObject::put().
        The PutPropertySlot argument is unused.
        * UserObjectImp.h: Ditto.

2009-06-19  Zoltan Horvath  <hzoltan@inf.u-szeged.hu>

        Reviewed by Darin Adler.

        Add FastAllocBase.h to JavaScriptGlue's ForwardingHeaders/wtf, because it's needed by HashCountedSet.h on MAC.

        * ForwardingHeaders/wtf/FastAllocBase.h: Added.

2009-06-02  Mark Rowe  <mrowe@apple.com>

        Reviewed by Anders Carlsson.

        Remove workaround that was added to address <rdar://problem/5488678> as it no longer affects our Tiger builds.

        * Configurations/Base.xcconfig:

2009-05-25  David Levin  <levin@chromium.org>

        Reviewed by Maciej Stachowiak and Oliver Hunt.

        https://bugs.webkit.org/show_bug.cgi?id=25126

        Added forwarding headers.

        * ForwardingHeaders/wtf/CrossThreadRefCounted.h: Added.
        * ForwardingHeaders/wtf/OwnFastMallocPtr.h: Added.

2009-05-23  David Kilzer  <ddkilzer@apple.com>

        Part 1 of 2: Bug 25495: Implement PassOwnPtr and replace uses of std::auto_ptr

        <https://bugs.webkit.org/show_bug.cgi?id=25495>

        Reviewed by Oliver Hunt.

        * ForwardingHeaders/wtf/OwnPtrCommon.h: Added.
        * ForwardingHeaders/wtf/PassOwnPtr.h: Added.

2009-05-14  Mark Rowe  <mrowe@apple.com>

        Rubber-stamped by Darin Adler.

        <rdar://problem/6681868> When building with Xcode 3.1.3 should be using gcc 4.2

        The meaning of XCODE_VERSION_ACTUAL is more sensible in newer versions of Xcode.
        Update our logic to select the compiler version to use the more appropriate XCODE_VERSION_MINOR
        if the version of Xcode supports it, and fall back to XCODE_VERSION_ACTUAL if not.

        * Configurations/Base.xcconfig:

2009-05-07  Oliver Hunt  <oliver@apple.com>

        Reviewed by Gavin Barraclough.

        Add calling convention annotation

        * JSObject.cpp:

2009-05-01  Geoffrey Garen  <ggaren@apple.com>

        Rubber Stamped by Sam Weinig.
        
        Renamed JSValuePtr => JSValue.

        * JSObject.cpp:
        (nativeCallFunction):
        * JSUtils.cpp:
        (KJSValueToJSObject):
        (JSObjectKJSValue):
        (KJSValueToCFTypeInternal):
        (KJSValueToCFType):
        * JSUtils.h:
        * JSValueWrapper.cpp:
        (JSValueWrapper::JSValueWrapper):
        (JSValueWrapper::GetValue):
        (JSValueWrapper::JSObjectCopyProperty):
        (JSValueWrapper::JSObjectSetProperty):
        (JSValueWrapper::JSObjectCallFunction):
        * JSValueWrapper.h:
        * UserObjectImp.cpp:
        (UserObjectImp::callAsFunction):
        (UserObjectImp::userObjectGetter):
        (UserObjectImp::getOwnPropertySlot):
        (UserObjectImp::put):
        (UserObjectImp::toPrimitive):
        * UserObjectImp.h:
        (UserObjectImp::createStructure):

2009-04-29  Oliver Hunt  <oliver@apple.com>

        Reviewed by Gavin Barraclough.

        Clean up ArgList to be a trivial type

        Start using MarkedArgumentBuffer to create argument lists for function calls

        * JSValueWrapper.cpp:
        (JSValueWrapper::JSObjectCallFunction):

2009-04-28  Geoffrey Garen  <ggaren@apple.com>

        Rubber stamped by Beth Dakin.
        
        Missed one.

        * UserObjectImp.cpp:
        (UserObjectImp::callAsFunction):

2009-04-21  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Mark Rowe.

        Tiger crash fix: Put VM tags in their own header file, and fixed up the
        #ifdefs so they're not used on Tiger.

        * ForwardingHeaders/wtf/VMTags.h: Copied from JavaScriptGlue/ForwardingHeaders/wtf/HashTraits.h.

2009-04-20  Sam Weinig  <sam@webkit.org>

        Rubber-stamped by Tim Hatcher.

        Add licenses for xcconfig files.

        * Configurations/Base.xcconfig:
        * Configurations/DebugRelease.xcconfig:
        * Configurations/JavaScriptGlue.xcconfig:
        * Configurations/Version.xcconfig:

2009-03-13  Mark Rowe  <mrowe@apple.com>

        Rubber-stamped by Dan Bernstein.

        Take advantage of the ability of recent versions of Xcode to easily switch the active
        architecture.

        * Configurations/DebugRelease.xcconfig:

2009-02-24  Mark Rowe  <mrowe@apple.com>

        Rubber-stamped by Dan Bernstein.

        <rdar://problem/6407844> JavaScriptGlue should use -Os rather than -O2

        * Configurations/Base.xcconfig:

2009-01-28  Sam Weinig  <sam@webkit.org>

        Reviewed by Gavin Barraclough.

        Fix for <rdar://problem/6525537>
        Hang occurs when closing Installer window (iTunes, Aperture)

        * JSUtils.cpp:
        (getThreadGlobalObject): Use the shared JSGlobalData instance.

2009-01-22  Mark Rowe  <mrowe@apple.com>

        Rubber-stamped by Anders Carlsson.

        Disable GCC_WARN_ABOUT_MISSING_PROTOTYPES temporarily.

        Current versions of Xcode only respect it for C and Objective-C files,
        and our code doesn't currently compile if it is applied to C++ and
        Objective-C++ files.

        * Configurations/Base.xcconfig:

2009-01-19  Sam Weinig  <sam@webkit.org>

        Rubber-stamped by Gavin Barraclough.

        Remove temporary operator-> from JSValuePtr.

        * JSUtils.cpp:
        (KJSValueToJSObject):
        (KJSValueToCFTypeInternal):
        * JSValueWrapper.cpp:
        (JSValueWrapper::JSObjectCopyPropertyNames):
        (JSValueWrapper::JSObjectCopyProperty):
        (JSValueWrapper::JSObjectSetProperty):
        (JSValueWrapper::JSObjectCallFunction):
        (JSValueWrapper::JSObjectMark):
        * UserObjectImp.cpp:
        (UserObjectImp::getOwnPropertySlot):

2009-01-14  Dan Bernstein  <mitz@apple.com>

        Reviewed by John Sullivan.

        - update copyright

        * Info.plist:

2009-01-09  David Levin  <levin@chromium.org>

        Reviewed by Oliver Hunt.

        https://bugs.webkit.org/show_bug.cgi?id=23175

        Added forwarding header.

        * ForwardingHeaders/wtf/PtrAndFlags.h: Added.

2009-01-05  Gavin Barraclough  <baraclough@apple.com>

        Rubber Stamped by Oliver Hunt.

        Replace all uses of JSValue* with new wrapper class, JSValuePtr.
        See JavaScriptCore/ChangeLog for more detailed description.

        * JSObject.cpp:
        (nativeCallFunction):
        * JSUtils.cpp:
        (KJSValueToJSObject):
        (JSObjectKJSValue):
        (KJSValueToCFTypeInternal):
        (KJSValueToCFType):
        * JSUtils.h:
        * JSValueWrapper.cpp:
        (JSValueWrapper::JSValueWrapper):
        (JSValueWrapper::GetValue):
        (JSValueWrapper::JSObjectCopyProperty):
        (JSValueWrapper::JSObjectSetProperty):
        (JSValueWrapper::JSObjectCallFunction):
        * JSValueWrapper.h:
        * UserObjectImp.cpp:
        (UserObjectImp::callAsFunction):
        (UserObjectImp::userObjectGetter):
        (UserObjectImp::getOwnPropertySlot):
        (UserObjectImp::put):
        (UserObjectImp::toPrimitive):
        * UserObjectImp.h:
        (UserObjectImp::createStructure):

2008-12-15  Mark Rowe  <mrowe@apple.com>

        Rubber-stamped by Cameron Zwarich.

        <rdar://problem/6289933> Change WebKit-related projects to build with GCC 4.2 on Leopard.

        * Configurations/Base.xcconfig:
        * Configurations/DebugRelease.xcconfig:

2008-12-08  David Kilzer  <ddkilzer@apple.com>

        Bug 22555: Sort "children" sections in Xcode project files

        <https://bugs.webkit.org/show_bug.cgi?id=22555>

        Reviewed by Eric Seidel.

        * JavaScriptGlue.xcodeproj/project.pbxproj: Sorted.

2008-11-17  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Sam Weinig.
        
        Updated for JavaScriptCore rename.

        * ForwardingHeaders/runtime/CallFrame.h: Copied from JavaScriptGlue/ForwardingHeaders/runtime/ExecState.h.
        * ForwardingHeaders/runtime/ExecState.h: Removed.
        * config.h:

2008-11-17  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Sam Weinig.
        
        Updated for JavaScriptCore rename.

        * ForwardingHeaders/interpreter: Added.
        * ForwardingHeaders/interpreter/CallFrame.h: Copied from ForwardingHeaders/runtime/ExecState.h.
        * ForwardingHeaders/runtime/ExecState.h: Removed.

2008-11-15  Darin Adler  <darin@apple.com>

        Rubber stamped by Geoff Garen.

        - do the long-planned StructureID -> Structure rename

        * JSRun.cpp:
        (JSGlueGlobalObject::JSGlueGlobalObject):
        (JSRun::JSRun):
        * JSRun.h:
        (JSGlueGlobalObject::userObjectStructure):
        * JSUtils.cpp:
        (getThreadGlobalObject):
        * UserObjectImp.cpp:
        (UserObjectImp::UserObjectImp):
        * UserObjectImp.h:
        (UserObjectImp::createStructure):

2008-11-15  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Sam Weinig.
        
        Updated for JavaScriptCore renames.

        * JSRun.cpp:
        (JSRun::Evaluate):
        (JSRun::CheckSyntax):

2008-11-05  Cameron Zwarich  <zwarich@apple.com>

        Not reviewed.

        Fix the JavaScriptGlue build. This wouldn't show up unless one was
        doing a clean build, because changes in JavaScriptCore don't cause
        anything in JavaScriptGlue to get rebuilt.

        * JSRun.cpp:
        * JSUtils.h:
        * JavaScriptGlue.cpp:

2008-11-04  Cameron Zwarich  <zwarich@apple.com>

        Reviewed by Mark Rowe.

        Remove JavaScriptGlue forwarding headers that are no longer necessary,
        and correct the path of the ExecState.h forwarding header.

        * ForwardingHeaders/kjs: Removed.
        * ForwardingHeaders/kjs/CTI.h: Removed.
        * ForwardingHeaders/kjs/ExecState.h: Removed.
        * ForwardingHeaders/kjs/JSValue.h: Removed.
        * ForwardingHeaders/kjs/PutPropertySlot.h: Removed.
        * ForwardingHeaders/kjs/ustring.h: Removed.
        * ForwardingHeaders/runtime: Added.
        * ForwardingHeaders/runtime/ExecState.h: Copied from ForwardingHeaders/kjs/ExecState.h.
        * config.h:

2008-10-31  Stephanie Lewis  <slewis@apple.com>

        Fix build by including right files.

        * JSRun.cpp:

2008-10-30  Mark Rowe  <mrowe@apple.com>

        Reviewed by Jon Homeycutt.

        Explicitly default to building for only the native architecture in debug and release builds.

        * Configurations/DebugRelease.xcconfig:

2008-10-24  Darin Adler  <darin@apple.com>

        - finish rolling out https://bugs.webkit.org/show_bug.cgi?id=21732

        * JSObject.cpp:
        (nativeCallFunction):
        * JSUtils.cpp:
        (KJSValueToJSObject):
        (JSObjectKJSValue):
        (KJSValueToCFTypeInternal):
        (KJSValueToCFType):
        * JSUtils.h:
        * JSValueWrapper.cpp:
        (JSValueWrapper::JSValueWrapper):
        (JSValueWrapper::GetValue):
        (JSValueWrapper::JSObjectCopyProperty):
        (JSValueWrapper::JSObjectSetProperty):
        (JSValueWrapper::JSObjectCallFunction):
        * JSValueWrapper.h:
        * UserObjectImp.cpp:
        (UserObjectImp::callAsFunction):
        (UserObjectImp::userObjectGetter):
        (UserObjectImp::getOwnPropertySlot):
        (UserObjectImp::put):
        (UserObjectImp::toPrimitive):
        * UserObjectImp.h:
        (UserObjectImp::createStructureID):
        Use JSValue* instead of JSValuePtr.

2008-10-23  Darin Adler  <darin@apple.com>

        - roll out https://bugs.webkit.org/show_bug.cgi?id=21732

        * JSValueWrapper.cpp:
        (JSValueWrapper::GetValue): Added missing call to .get().
        * JSValueWrapper.h: ProtectedPtr<JSValue> instead of ProtectedPtr<JSValuePtr>.

2008-10-22  Darin Adler  <darin@apple.com>

        Reviewed by Sam Weinig.

        - fix https://bugs.webkit.org/show_bug.cgi?id=21294
          Bug 21294: Devirtualize getOwnPropertySlot()

        * JSRun.cpp:
        (JSGlueGlobalObject::JSGlueGlobalObject): Moved constructor here.
        Set up flags in its new location in global object data, and set up
        a structure for UserObjectImp too.
        (JSRun::JSRun): Added code to give the JSGlueGlobalObject its own unique
        structure, rather than using the default one from JSGlobalObject.

        * JSRun.h: Made JSGlueGlobalObject take a structure ID. Also moved
        the data into a separate data object. And added userObjectStructure,
        a Structure to be used by UserObjectImp.

        * JSUtils.cpp: Removed unused sharedGlobalData global.
        (JSObjectKJSValue): Pass Structure in when creating UserObjectImp.
        (unprotectGlobalObject): Use JSGlueGLobalObject type specifically.
        (initializeGlobalObjectKey): Removed code to set up unused sharedGlobalData.
        (getThreadGlobalObject): Added. Shared by JSObjectKJSValue and
        getThreadGlobalExecState. Also now passes in a structure ID when creating
        the global object.
        (getThreadGlobalExecState): Changed to call getThreadGlobalObject.

        * UserObjectImp.cpp:
        (UserObjectImp::UserObjectImp): Changed to take a structure.
        * UserObjectImp.h:
        (UserObjectImp::createStructureID): Added. Returns a structure without
        HasStandardGetOwnPropertySlot since this class overrides getOwnPropertySlot.

2008-10-20  Sam Weinig  <sam@webkit.org>

        Reviewed by Cameron Zwarich.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=21766
        REGRESSION: 12 JSC tests fail

        The JSGlobalObject constructor no longer takes a JSGlobalData
        as an argument.

        * JSRun.cpp:
        (JSRun::JSRun):
        * JSRun.h:
        (JSGlueGlobalObject::JSGlueGlobalObject):
        * JSUtils.cpp:
        (getThreadGlobalExecState):

2008-10-19  Darin Adler  <darin@apple.com>

        Reviewed by Oliver Hunt.

        - next step of https://bugs.webkit.org/show_bug.cgi?id=21732
          improve performance by eliminating JSValue as a base class for JSCell

        Remove most uses of JSValue, which will be removed in a future patch.

        * JSValueWrapper.h: Use JSValuePtr instead of JSValue*.

2008-10-18  Darin Adler  <darin@apple.com>

        Reviewed by Oliver Hunt.

        - next step of https://bugs.webkit.org/show_bug.cgi?id=21732
          improve performance by eliminating JSValue as a base class for JSCell

        Tweak a little more to get closer to where we can make JSValuePtr a class.

        * JSObject.cpp:
        (nativeCallFunction): Call asObject.

        * JSUtils.cpp:
        (KJSValueToJSObject): Use JSValuePtr and asObject.
        (JSObjectKJSValue): Ditto.
        (KJSValueToCFTypeInternal): Ditto.
        (KJSValueToCFType): Ditto.
        * JSUtils.h: Ditto.

        * UserObjectImp.cpp:
        (UserObjectImp::callAsFunction): Use JSValuePtr and asObject.
        (UserObjectImp::userObjectGetter): Ditto.
        (UserObjectImp::getOwnPropertySlot): Ditto.
        (UserObjectImp::put): Ditto.
        (UserObjectImp::toPrimitive): Ditto.
        * UserObjectImp.h: Ditto.

2008-10-18  Darin Adler  <darin@apple.com>

        Reviewed by Cameron Zwarich.

        - next step on https://bugs.webkit.org/show_bug.cgi?id=21732
          improve performance by eliminating JSValue as a base class for JSCell

        Use JSValuePtr everywhere instead of JSValue*. In the future, we'll be
        changing JSValuePtr to be a class, and then eventually renaming it
        to JSValue once that's done.

        * JSObject.cpp:
        * JSValueWrapper.cpp:
        * UserObjectImp.cpp:
        * UserObjectImp.h:
        Replace JSValue* with JSValuePtr.

2008-10-13  Maciej Stachowiak  <mjs@apple.com>

        Rubber stamped by Mark Rowe.
        
        - use gcc 4.2 when building with Xcode 3.1 or newer on Leopard, even though this is not the default

        * Configurations/DebugRelease.xcconfig:

2008-10-06  Maciej Stachowiak  <mjs@apple.com>

        Not reviewed. Build fix.

        - revert toBoolean changes (r37333 and r37335); need to make WebCore work with these

        * JSUtils.cpp:
        (KJSValueToCFTypeInternal):

2008-10-06  Maciej Stachowiak  <mjs@apple.com>

        Not reviewed.
        
        - fix build; toBoolean no longer takes an ExecState

        * JSUtils.cpp:
        (KJSValueToCFTypeInternal):

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

        Reviewed by Tim Hatcher.

        Add a 'Check For Weak VTables' build phase to catch weak vtables as early as possible.

        * JavaScriptGlue.xcodeproj/project.pbxproj:

2008-10-01  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Darin Adler and Cameron Zwarich.

        * JSRun.cpp:
        (JSRun::Evaluate):
        (JSRun::CheckSyntax): Provide a SourceCode to the Interpreter, since
        other APIs are no longer supported.

2008-09-29  Geoffrey Garen  <ggaren@apple.com>

        Not reviewed.
        
        Forwarding headers to fix the build.

        * ForwardingHeaders/kjs/CTI.h: Copied from ForwardingHeaders/kjs/ExecState.h.
        * ForwardingHeaders/kjs/ustring.h: Copied from ForwardingHeaders/kjs/ExecState.h.
        * ForwardingHeaders/masm: Added.
        * ForwardingHeaders/masm/X86Assembler.h: Added.
        * ForwardingHeaders/profiler: Added.
        * ForwardingHeaders/profiler/Profiler.h: Added.

2008-09-08  Sam Weinig  <sam@webkit.org>

        Reviewed by Maciej Stachowiak and Oliver Hunt.

        Add forwarding headers.

        * ForwardingHeaders/wtf/HashFunctions.h: Added.
        * ForwardingHeaders/wtf/HashTraits.h: Added.

2008-09-02  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Sam Weinig.
        
        Implemented the rest of Darin's review comments for the 09-01 inline
        caching patch.
        
        * ForwardingHeaders/kjs/PutPropertySlot.h: Added.

2008-09-01  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Darin Adler.

        First cut at inline caching for access to vanilla JavaScript properties.
        
        Updated for JavaScriptCore changes. Mostly mechanical addition of StructureIDs
        to JavaScriptGlue classes, and PutPropertySlot& arguments to put functions.

2008-08-22  Anders Carlsson  <andersca@apple.com>

        Fix build for real this time.
        
        * UserObjectImp.h:

2008-08-22  Anders Carlsson  <andersca@apple.com>

        Fix build.
        
        * UserObjectImp.cpp:
        (UserObjectImp::toPrimitive):
        * UserObjectImp.h:

2008-08-19  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Geoff Garen.

        Bring back shared JSGlobalData and implicit locking, because too many clients rely on it.

        * JSBase.cpp:
        (JSBase::Release):
        * JSUtils.cpp:
        (JSObjectKJSValue):
        (KJSValueToCFTypeInternal):
        (unprotectGlobalObject):
        * JSUtils.h:
        * JSValueWrapper.cpp:
        (JSValueWrapper::JSObjectCopyPropertyNames):
        (JSValueWrapper::JSObjectCopyProperty):
        (JSValueWrapper::JSObjectSetProperty):
        (JSValueWrapper::JSObjectCallFunction):
        (JSValueWrapper::JSObjectCopyCFValue):
        * JavaScriptGlue.cpp:
        (JSRunCreate):
        (JSRunEvaluate):
        (JSRunCheckSyntax):
        (JSCollect):
        (JSLockInterpreter):
        (JSUnlockInterpreter):
        * UserObjectImp.cpp:
        (UserObjectImp::callAsFunction):

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

        Reviewed by Geoff.

        - eliminate JSValue::type()

        * JSUtils.cpp:
        (KJSValueToCFTypeInternal): Replaced uses of JSValue::type() with
        JSValue::is functions.
        * UserObjectImp.cpp:
        (UserObjectImp::getOwnPropertySlot): Ditto.
        (UserObjectImp::toPrimitive): Take PreferredPrimitiveType argument
        instead of JSType argument.
        * UserObjectImp.h: Ditto.

2008-08-17  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Cameron Zwarich.
        
        Updated project files to XCode 3.1.

        * JavaScriptGlue.xcodeproj/project.pbxproj:

2008-08-15  Mark Rowe  <mrowe@apple.com>

        Rubber-stamped by Geoff Garen.

        <rdar://problem/6139914> Please include a _debug version of JavaScriptCore framework

        * Configurations/Base.xcconfig: Factor out the debug-only settings so that they can shared
        between the Debug configuration and debug Production variant.
        * JavaScriptGlue.xcodeproj/project.pbxproj: Enable the debug variant.

2008-07-31  Alexey Proskuryakov  <ap@webkit.org>

        Rubber-stamped by Maciej.

        Eliminate JSLock (it was already disabled, removing the stub implementaion and all
        call sites now).

        * JSBase.cpp:
        (JSBase::Release):
        * JSUtils.cpp:
        (JSObjectKJSValue):
        (KJSValueToCFTypeInternal):
        (unprotectGlobalObject):
        * JSUtils.h:
        * JSValueWrapper.cpp:
        (JSValueWrapper::JSObjectCopyPropertyNames):
        (JSValueWrapper::JSObjectCopyProperty):
        (JSValueWrapper::JSObjectSetProperty):
        (JSValueWrapper::JSObjectCallFunction):
        (JSValueWrapper::JSObjectCopyCFValue):
        * JavaScriptGlue.cpp:
        (JSRunCreate):
        (JSRunEvaluate):
        (JSRunCheckSyntax):
        (JSCollect):
        (JSLockInterpreter):
        (JSUnlockInterpreter):
        * UserObjectImp.cpp:
        (UserObjectImp::callAsFunction):

2008-07-29  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Geoff Garen.

        Implement JSContextGroup APIs to make concurrent execution possible for
        JavaScriptCore clients.

        * JSRun.cpp:
        (JSRun::JSRun):
        * JSUtils.cpp:
        (getThreadGlobalExecState):
        Changed JavaScriptGlue to use a JSGlobalData of its own, now that there is no shared
        instance.

2008-07-23  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Geoff Garen.

        Make JSClassRef work with any context, not just the first one it was used in.

        * ForwardingHeaders/wtf/HashMap.h: Added.

2008-07-22  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Oliver Hunt and Sam Weinig.

        Next step toward putting doubles in registers: Prepare the Register class
        and its clients for registers that don't contain JSValue*s.
        
2008-07-21  Mark Rowe  <mrowe@apple.com>

        Reviewed by Sam Weinig.

        <rdar://problem/6091287> Revamp the handling of CFBundleShortVersionString to be fixed at the major component of the version number.

        * Configurations/Version.xcconfig:
        * Info.plist:

2008-07-18  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Cameron Zwarich.
        
        Three renames:
        
        "CallTypeNative" => "CallTypeHost"
        "code" => "byteCode"
        "generatedCode" => "generatedByteCode"

        * ChangeLog:
        * JSObject.cpp:
        (JSUserObject::getCallData):

2008-07-14  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Geoff Garen.

        Eliminate per-thread JavaScript global data instance support and make arbitrary
        global data/global object combinations possible.

        * ForwardingHeaders/wtf/ThreadSpecific.h: Added.
        * JSRun.cpp:
        (JSRun::JSRun):
        * JSUtils.cpp:
        (getThreadGlobalExecState):
        Adapt to the new way of asking for shared JSGlobalData.

2008-07-10  Mark Rowe  <mrowe@apple.com>

        Reviewed by Sam Weinig.

        Define WEBKIT_VERSION_MIN_REQUIRED=WEBKIT_VERSION_LATEST when building WebKit to ensure that no symbols end up with the weak_import attribute.

        * Configurations/JavaScriptGlue.xcconfig:

2008-07-09  Mark Rowe  <mrowe@apple.com>

        Reviewed by Geoff Garen.

        Don't warn about deprecated functions in production builds.

        * Configurations/Base.xcconfig:
        * Configurations/DebugRelease.xcconfig:

2008-07-08  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin Adler.

        <rdar://problem/6058368> REGRESSION: Crash occurs in KJS::Machine after launching
        Apple Installer

        The problem was that JSUserObject::getCallData() was setting call type to native, but
        left callData.native.function uninitialized.

        * JSObject.cpp:
        (JSUserObject::getCallData): Initialize callData.native.function.
        (nativeCallFunction): Call UserObjectImp::callAsFunction().

2008-07-04  Sam Weinig  <sam@webkit.org>

        Rubber-stamped by Dan Bernstein.

        * JSObject.h: Rename the header guard as it now conflicts with the
        JSObject in JavaScriptCore.

2008-07-01  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin Adler.

        Disable JSLock for per-thread contexts.

        * ForwardingHeaders/wtf/Locker.h: Added.
        * ForwardingHeaders/wtf/Threading.h: Added.
        * JSBase.cpp:
        (JSBase::Release):
        * JSUtils.cpp:
        (JSObjectKJSValue):
        (KJSValueToCFTypeInternal):
        (unprotectGlobalObject):
        * JSUtils.h:
        * JSValueWrapper.cpp:
        (JSValueWrapper::JSObjectCopyPropertyNames):
        (JSValueWrapper::JSObjectCopyProperty):
        (JSValueWrapper::JSObjectSetProperty):
        (JSValueWrapper::JSObjectCallFunction):
        (JSValueWrapper::JSObjectCopyCFValue):
        * JavaScriptGlue.cpp:
        (JSRunCreate):
        (JSRunEvaluate):
        (JSRunCheckSyntax):
        (JSCollect):
        (JSLockInterpreter):
        (JSUnlockInterpreter):
        * UserObjectImp.cpp:
        (UserObjectImp::callAsFunction):
        Pass a parameter (always true) to JSLock and JSLock::DropAllLocks to indicate that JSG
        clients always need implicit mutex protection.
        Added includes that are now needed.

2008-06-26  Darin Adler  <darin@apple.com>

        Reviewed by Geoff.

        * JSUtils.cpp: Added include of <JavaScriptCore/JSString.h> since jsString
        will soon be changed to return a JSString*.
        * UserObjectImp.cpp: Ditto.

2008-06-23  Darin Adler  <darin@apple.com>

        Reviewed by Geoff.

        * JSValueWrapper.cpp:
        (JSValueWrapper::JSObjectCallFunction): Updated to use getCallData and call instead
        of the old callAsFunction.

2008-06-17  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin Adler.

        Prepare JavaScript heap for being per-thread.

        * JSRun.cpp: (JSRun::JSRun): Create JSGlueGlobalObject in a shared JS heap.

        * JSUtils.h: Made getThreadGlobalExecState available throughout JSGlue.

        * JSUtils.cpp:
        (JSObjectKJSValue): Pass an ExecState where now required.
        (unprotectGlobalObject):
        (initializeGlobalObjectKey):
        (getThreadGlobalExecState):
        Moved these functions from JSValueWrapper.cpp, as the global exec state is now needed
        elsewhere. I'm not quite sure how this relates to the global object from JSRun, but
        since the new uses are all for Heap access, there doesn't seem to be any behavior change.

        * JavaScriptGlue.cpp:
        (JSLockInterpreter): Don't call registerThread explicitly, as JSLock will do that.

        * UserObjectImp.cpp: (UserObjectImp::toPrimitive): Pass ExecState* where now required.

2008-06-17  Mark Rowe  <mrowe@apple.com>

        Reviewed by Darin Adler.

        <rdar://problem/5775802> JavaScriptGlue should not force use of GCC 4.0.

        * JavaScriptGlue.xcodeproj/project.pbxproj:

2008-06-16  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Alexey.

        - removed nearly unused types.h and LocalStorageEntry.h headers

        * JSUtils.h:

2008-06-16  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Geoff Garen.

        Make Identifier construction use an explicitly passed IdentifierTable.

        * JSUtils.cpp:
        (CFStringToIdentifier):
        (KJSValueToCFTypeInternal):
        * JSUtils.h:
        * JSValueWrapper.cpp:
        (JSValueWrapper::JSObjectCopyPropertyNames):
        (JSValueWrapper::JSObjectCopyProperty):
        (JSValueWrapper::JSObjectSetProperty):
        * UserObjectImp.cpp:
        (UserObjectImp::getPropertyNames):
        Pass ExecState or JSGlobalData everywhere.

2008-06-15  Darin Adler  <darin@apple.com>

        - rename KJS::List to KJS::ArgList

        * JSValueWrapper.cpp:
        (JSValueWrapper::JSObjectCallFunction):
        * UserObjectImp.cpp:
        (UserObjectImp::callAsFunction):
        * UserObjectImp.h:

2008-06-15  Darin Adler  <darin@apple.com>

        - new names for a few key JavaScriptCore files

        * ForwardingHeaders/kjs/JSValue.h: Copied from JavaScriptGlue/ForwardingHeaders/kjs/value.h.
        * ForwardingHeaders/kjs/value.h: Removed.
        * JSUtils.h:

2008-06-03  Darin Adler  <darin@apple.com>

        - update for JavaScriptCore changes for https://bugs.webkit.org/show_bug.cgi?id=19269
          speed up SunSpider by eliminating the toObject call for most get/put/delete

        * UserObjectImp.cpp:
        (UserObjectImp::userObjectGetter): Removed originalObject argument.
        * UserObjectImp.h: Ditto.

2008-06-02  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Alexey Proskuryakov.

        Removed JSObject::call, since it just called JSObject::callAsFunction.

        SunSpider reports no change.

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

        Reviewed by Oliver Hunt.
        
        Fixed total destruction in Software Update.app.
        
        Updated JavaScriptGlue to honor squirrelfish's new getCallData mechanism for
        indicating that an object can be called as a function.

2008-05-10  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Oliver.

        - JavaScriptGlue part of fix for: "SQUIRRELFISH: function toString broken after calling"
        https://bugs.webkit.org/show_bug.cgi?id=18869
        
        * JSRun.cpp:
        (JSRun::Evaluate): Use UString version of eveluate() instead of
        the now departed UChar*/length variant; use of the lower-level
        version was gratuitous in any case.
        (JSRun::CheckSyntax): Ditto for checkSyntax().

2008-04-30  Geoffrey Garen  <ggaren@apple.com>

        Build fix: supply missing parameter that used to be implicit.

        * JSRun.cpp:
        (JSRun::Evaluate):

2008-03-30  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Oliver Hunt.
        
        Build fix.

        * ForwardingHeaders/wtf/UnusedParam.h: Copied from ForwardingHeaders/wtf/OwnPtr.h.

2008-05-12  Alexey Proskuryakov  <ap@webkit.org>

        Roll out recent  threading changes (r32807, r32810, r32819, r32822) to simplify
        SquirrelFish merging.

        * JSUtils.cpp:
        (JSObjectKJSValue):
        * JSUtils.h:
        * JSValueWrapper.cpp:
        (unprotectGlobalObject):
        (initializeGlobalObjectKey):
        (getThreadGlobalExecState):
        * JavaScriptGlue.cpp:
        (JSCollect):
        (JSLockInterpreter):
        * UserObjectImp.cpp:
        (UserObjectImp::toPrimitive):

2008-05-02  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin Adler.

        Make JavaScriptGlue and JavaScriptCore API functions implicitly call initializeThreading
        for the sake of non-WebKit clients.

        * JavaScriptGlue.cpp:
        (JSRunCreate):
        (JSCollect):
        (JSCreateJSArrayFromCFArray):
        (JSLockInterpreter):
        These are all possible JavaScriptGlue entry points.

2008-05-02  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Geoffrey Garen.

        https://bugs.webkit.org/show_bug.cgi?id=18826
        Make JavaScript heap per-thread

        * JSValueWrapper.cpp:
        * JSUtils.h:
        Moved getThreadGlobalExecState() to JSUtils and made it extern, as ExecState is now needed
        for all JS allocations.

        * JSUtils.cpp:
        (JSObjectKJSValue): Pass ExecState to functions that now need it.
        (unprotectGlobalObject): Moved from JSValueWrapper.cpp.
        (initializeGlobalObjectKey): Ditto.
        (getThreadGlobalExecState): Ditto.

        * UserObjectImp.cpp: (UserObjectImp::toPrimitive): Pass ExecState to jsString and jsNumber.

        * JavaScriptGlue.cpp:
        (JSCollect): Use current thread's heap.
        (JSLockInterpreter): Removed JSLock::registerThread(), because a JS heap doesn't need to
        know about other threads.

2008-04-25  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin Adler.

        Fix run-webkit-tests --threading
        and provisionally fix <https://bugs.webkit.org/show_bug.cgi?id=18661>
        Proxy server issue in Sunday's Nightly

        * UserObjectImp.cpp: Adjusted for the new member added to ClassInfo.

2008-04-25  Mark Rowe  <mrowe@apple.com>

        Reviewed by Adele Peterson.

        <rdar://problem/5891264> Don't install the JavaScriptGlue headers

        * JavaScriptGlue.xcodeproj/project.pbxproj:

2008-04-25  Mark Rowe  <mrowe@apple.com>

        Rubber-stamped by Sam Weinig.

        Add some content to an empty ICU header file to prevent verification errors.

        * icu/unicode/utf_old.h:

2008-04-02  Mark Rowe  <mrowe@apple.com>

        Reviewed by Oliver Hunt.

        Ensure that debug symbols are generated for x86_64 and ppc64 builds.

        * Configurations/Base.xcconfig:

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

        - fix build

        * ForwardingHeaders/wtf/ListRefPtr.h: Added.

2008-03-01  Mark Rowe  <mrowe@apple.com>

        Reviewed by Tim Hatcher.

        Update Xcode configuration to support building debug and release from the mysterious future.

        * Configurations/Base.xcconfig:
        * Configurations/DebugRelease.xcconfig:

2008-02-29  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by David Harrison.
        
        Fixed <rdar://problem/5765063> TOT REGRESSION: Software Update crash in
        KJS::Collector::collect() (missing JSLock)

        * JSValueWrapper.cpp:
        (unprotectGlobalObject): Added missing JSLock.

2008-02-05  Mark Rowe  <mrowe@apple.com>

        Reviewed by Oliver Hunt.

        Update versioning to support the mysterious future.

        * Configurations/Version.xcconfig: Add SYSTEM_VERSION_PREFIX_1060.

2008-01-28  Eric Seidel  <eric@webkit.org>

        Reviewed by darin.
        
        Add icu headers to JSG in preparation for depending on ::UChar.

        * Configurations/Base.xcconfig:
        * ForwardingHeaders/wtf/unicode: Added.
        * ForwardingHeaders/wtf/unicode/Unicode.h: Added.
        * ForwardingHeaders/wtf/unicode/icu: Added.
        * ForwardingHeaders/wtf/unicode/icu/UnicodeIcu.h: Added.
        * icu: Copied from ../JavaScriptCore/icu.

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

        Build fix.

        * ForwardingHeaders/wtf/VectorTraits.h: Added.

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

        Reviewed by Mark Rowe.

        <rdar://problem/5639463> Bundle versions on Tiger should be 4523.x not 523.x

        * Configurations/Version.xcconfig: Some Tiger versions of Xcode don't set MAC_OS_X_VERSION_MAJOR,
          so assume Tiger and use a 4 for the SYSTEM_VERSION_PREFIX.

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

        Reviewed by Darin Adler.

        Third step in refactoring JSGlobalObject: Moved data members and data
        member access from Interpreter to JSGlobalObject. Replaced JSInterpreter
        subclass with JSGlobalObject subclass.
        
        * JSRun.cpp:
        (JSRun::JSRun):
        (JSRun::Evaluate):
        (JSRun::CheckSyntax):
        * JSRun.h:
        (JSGlueGlobalObject::JSGlueGlobalObject):
        * JSUtils.cpp:
        (KJSValueToCFTypeInternal):
        * JSValueWrapper.cpp:
        (getThreadGlobalExecState):

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

        Reviewed by Eric Seidel.

        Updated to match the JavaScriptCore change to move virtual methods from
        Interpreter to JSGlobalObject.
        
        * JSRun.cpp:
        * JSRun.h:
        * JSValueWrapper.cpp:
        (getThreadGlobalExecState):
        * JavaScriptGlue.cpp:
        (JSRunCopyGlobalObject):
        (JSRunEvaluate):

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

        Reviewed by Beth Dakin.
        
        Modified to follow new JSGlobalObject/Interpreter ownership rules 
        in JavaScriptCore.

        * JSRun.cpp:
        (JSRun::JSRun):
        (JSRun::GetInterpreter):
        (JSRun::Evaluate):
        (JSRun::CheckSyntax):
        * JSRun.h:
        * JSValueWrapper.cpp:
        (unprotectGlobalObject):
        (initializeGlobalObjectKey):
        (getThreadGlobalExecState):

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

        Reviewed by Maciej.

        Fix REGRESSION(r27885): Installer hits assertion failure in JavaScriptGlue.

        * JSValueWrapper.cpp:
        (getThreadGlobalExecState): Set the global object on the Interpreter before using it.

2007-11-27  Anders Carlsson  <andersca@apple.com>
        
        Build fix.
        
        * JSUtils.cpp:
        (KJSValueToCFTypeInternal):
        * JSValueWrapper.cpp:
        (JSValueWrapper::JSObjectCopyPropertyNames):

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

        Reviewed by Eric.

        Fix JavaScriptGlue to build without warnings using GCC 4.2.

        * Configurations/Base.xcconfig:
        * JSRun.h:

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

        Reviewed by Darin Adler.

        Fix: <rdar://problem/5607032> REGRESSION: testapi exits with assertion failure in debug build
             <rdar://problem/5440659> JSGlobalContextCreate throws away globalObjectClass's prototype
             http://bugs.webkit.org/show_bug.cgi?id=16033

        Update for changes in Interpreter method signatures.

        * JSRun.h:

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

        Reviewed by Anders Carlsson.

        Renamed Shared to RefCounted.

        * ForwardingHeaders/wtf/RefCounted.h: Copied from JavaScriptGlue/ForwardingHeaders/wtf/Shared.h.
        * ForwardingHeaders/wtf/Shared.h: Removed.

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

        Reviewed by Sam Weinig.

        Moved Shared.h into wtf so it could be used in more places.

        * ForwardingHeaders/wtf/Shared.h: Added.

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

        Build fix.

        * ForwardingHeaders/wtf/MathExtras.h: Copied from WebCore/ForwardingHeaders/wtf/MathExtras.h.

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

        Build fix.

        * ForwardingHeaders/kjs/value.h: Added.

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

        Build-fix.

        * UserObjectImp.cpp:

2007-11-03  David D. Kilzer  <ddkilzer@webkit.org>

        Sort files(...); sections of Xcode project files.

        Rubber-stamped by Darin Adler.

        * JavaScriptGlue.xcodeproj/project.pbxproj:

2007-10-25  Eric Seidel  <eric@webkit.org>

        Reviewed by Geoff.
        
        Make JSG build again after JSGlobalObject change.

        * JSRun.cpp:
        (JSRun::JSRun):
        (JSRun::GlobalObject):
        * JSRun.h:
        (JSInterpreter::JSInterpreter):
        * JSUtils.h:

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-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-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:
        * JavaScriptGlue.xcodeproj/project.pbxproj:

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:
        * JavaScriptGlue.xcodeproj/project.pbxproj: Add a shell script phase to make to dependency between
        Version.xcconfig and Info.plist explicit to Xcode.

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-04-27  Mark Rowe  <mrowe@apple.com>

        Reviewed by Oliver.

        * JavaScriptGlue.xcodeproj/project.pbxproj: Improve dependencies in Xcode project
        by marking JavaScriptGlue as a dependency of testjsglue.

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

        Reviewed by Dave Hyatt.

        * JavaScriptGlue.xcodeproj/project.pbxproj: Use GCC 4.0 for testjsglue.

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

        Rubber-stamped by Darin Adler.

        * Configurations/JavaScriptGlue.xcconfig: Remove unnecessary INFOPLIST_PREPROCESS.

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)

        * JavaScriptGlue.xcodeproj/project.pbxproj:

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)

        * JavaScriptGlue.xcodeproj/project.pbxproj:

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/JavaScriptGlue.xcconfig:
        * Configurations/Version.xcconfig:

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/JavaScriptGlue.xcconfig: Added.
        * Configurations/Version.xcconfig: Added.
        * Info.plist:
        * JavaScriptGlue.xcodeproj/project.pbxproj:

=== Safari-5522.4 ===

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

        Reviewed by Oliver Hunt.
        
        Updated in light of fix for <rdar://problem/4681051> Installer crashes 
        in KJS::Collector::markOtherThreadConservatively(KJS::Collector::Thread*) 
        trying to install iLife 06 using Rosetta on an Intel Machine
        
        * JavaScriptGlue.cpp:
        (JSLockInterpreter): Ensure backwards compatibility by calling 
        registerThread() when explicitly taking the JSLock. (This doesn't happen 
        automatically anymore.) I doubt this actally matters, but in JavaScriptGlue
        territory, that kind of thinking will get you killed.

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

        Reviewed by Maciej Stachowiak.

        Fixed all known crashers exposed by run-webkit-tests --threaded while using
        a PAC file (for maximum carnage). See JavaScriptCore ChangeLog for 
        more details.

        * JSBase.cpp:
        (JSBase::Release): Lock when deleting, because we may be deleting an object
        (like a JSRun) that holds thread-unsafe data.

        * JSUtils.cpp:
        (CFStringToUString): Don't lock, because our caller locks. Also, locking
        inside a function that returns thread-unsafe data by copy will only mask
        threading problems.

        * JavaScriptGlue.cpp:
        (JSRunEvaluate): Added missing JSLock.
        (JSRunCheckSyntax): Converted to JSLock.
        * JavaScriptGlue.xcodeproj/project.pbxproj:

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

        Reviewed by Darin Adler.
        
        Fixed <rdar://problem/4942528> Installer.app Stuck "Examining additional 
        volumes..."
        
        The problem was that JavaScriptGlue held a JSObject in a static pointer
        without protecting it from garbage collection. 
        
            sUserObjectPrototypeImp  = new UserObjectPrototypeImp();
            static ProtectedPtr<UserObjectPrototypeImp> protectPrototype; // valiant, brave, but useless

        Through an interesting comedy of errors, this object would be collected 
        and then assigned as the prototype of another object allocated at the 
        same address, thus becoming its own prototype. (See http://www.ziplo.com/grandpa.htm
        for further explanation of this phenomenon.) Hence the infinte loop in 
        property lookup.
        
        The solution is equally humorous: all of this code was completely useless --
        it only served to create an empty object in the prototype chain -- so
        I just removed it.

        * UserObjectImp.cpp:
        (UserObjectImp::UserObjectImp):
        * UserObjectImp.h:

2007-02-19  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Geoff.

        <rdar://problem/4636301> Deprecate JavaScriptGlue

        * JavaScriptGlue.h: adds DEPRECATED_IN_MAC_OS_X_VERSION_10_5_AND_LATER to everything
        * JavaScriptGlue.xcodeproj/project.pbxproj: use -Wno-deprecated-declarations to keep the project building
        * config.h: define DEPRECATED_IN_MAC_OS_X_VERSION_10_5_AND_LATER as empty on other systems

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

        Reviewed by Anders.

        - fix <rdar://problem/5000216> JavaScriptGlue framework started turning all CFNumbers
          into signed 32bit values

        Circumstantial evidence seems to indicate that JavaScriptGlue was depending on a bug
        in CFNumber where CFNumberIsFloatType was returning true for 64-bit integer values.

        * JSUtils.cpp: (JSObjectKJSValue): Removed the call to CFNumberIsFloatType in the
        conversion of numeric values, and always use kCFNumberDoubleType, since double is
        the internal format of numbers in JavaScriptCore. There's no value to having a
        separate code path for integers. There's also no reason to check the return value
        from CFNumberGetValue -- if it returns false it still does the best it can to convert
        to a double, which is what we want.

        * UserObjectImp.cpp: (UserObjectImp::toString): Removed a similar code path that
        tried to handle integers separate from double. Instead, always use a double. For
        compatibility, use a format without a decimal point when CFNumberIsFloatType returns
        false. Also removed a bogus cast to float; the "%f" format string takes a double,
        not a float, so all the cast did was cut down on precision.

2007-01-25  Mark Rowe  <mrowe@apple.com>

        Reviewed by Maciej.

        * Info.plist: Update copyright string.

2006-12-19  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Darin Adler.

        <rdar://problem/4891774> Local WebCore/WebBrowser builds fail in 9A328 due to warning about ObjC-2.0 language features

        * JavaScriptGlue.xcodeproj/project.pbxproj:

=== Safari-521.26 ===

2006-08-15  Mark Rowe  <opendarwin.org@bdash.net.nz>

        Reviewed by Tim H.

        Build fix:  DWARF and -gfull are incompatible with symbol separation.

        * JavaScriptGlue.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

        * JavaScriptGlue.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

        * JavaScriptGlue.xcodeproj/project.pbxproj:

2006-08-04  Sam Weinig  <sam.weinig@gmail.com>

        Reviewed by Darin Adler.

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

        * JavaScriptGlue.xcodeproj/project.pbxproj:

2006-08-03  Sam Weinig  <sam.weinig@gmail.com>

        Reviewed by Darin Adler.

        - patch for http://bugs.webkit.org/show_bug.cgi?id=10176
          Make WebCore compile with -Wundef

          * Adds -Wundef flag to Xcode project

        * JavaScriptGlue.xcodeproj/project.pbxproj:

2006-07-29  Sam Weinig  <sam.weinig@gmail.com>

        Reviewed by Darin Adler.

        - 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:
          * Turning on gcc warning for missing newline at the end of a source file
            (GCC_WARN_ABOUT_MISSING_NEWLINE in Xcode, -Wnewline in gcc).

        * JavaScriptGlue.xcodeproj/project.pbxproj:

=== Safari-521.19 ===

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

        Fixed by Darin & Maciej, reviewed by me.
        
        - Fixed <rdar://problem/4638934> Leopard 9A227: Installer crashes right 
        after LCA and while preparing Installation

        Compile release/production with NDEBUG set, to ensure binary compatibility
        between JavaScriptGlue and JavaScriptCore. In debug builds, JavaScriptCore 
        includes an extra debug data member in HashSet.
        
        * JavaScriptGlue.xcodeproj/project.pbxproj:

=== Safari-521.18 ===

2006-07-15  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin Adler.

        - switch property lists to be vector+set of Identifiers instead of list of References
        
        * JSUtils.cpp:
        (KJSValueToCFTypeInternal): updated for JSC SPI changes
        * JSValueWrapper.cpp:
        (JSValueWrapper::JSObjectCopyPropertyNames): ditto
        * UserObjectImp.cpp:
        (UserObjectImp::getPropertyNames): ditto
        * UserObjectImp.h:

=== Safari-521.17 ===

2006-07-14  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Maciej.
        
        - Updated JSInterpreter to work with Interpreter ref-counting in JavaScriptCore.

        (JSInterpreter::JSInterpreter::~JSInterpreter): Now protected to catch
        manual delete.

2006-07-12  Anders Carlsson  <acarlsson@apple.com>

        Build fix
        
        * JSUtils.cpp:
        (KJSValueToCFTypeInternal):
        * JSValueWrapper.cpp:
        (JSValueWrapper::JSObjectCopyPropertyNames):
        * UserObjectImp.cpp:
        (UserObjectImp::getPropertyList):
        
=== Safari-521.15 ===

2006-07-07  Geoffrey Garen  <ggaren@apple.com>

        - build fix

        * JSUtils.cpp:
        (KJSValueToCFTypeInternal):
        * JSValueWrapper.cpp:
        (JSValueWrapper::JSObjectCopyPropertyNames):

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

        Reviewed by Maciej.
        
        * JSRun.cpp:
        (JSRun::CheckSyntax): Updated to use new checkSyntax syntax in JSC.
        * JavaScriptGlue.xcodeproj/project.pbxproj:

=== Safari-521.14 ===

2006-06-28  Timothy Hatcher  <timothy@apple.com>

        Prefer the Stabs debugging symbols format until DWARF bugs are fixed.

        * JavaScriptGlue.xcodeproj/project.pbxproj:

2006-06-24  David Kilzer  <ddkilzer@kilzer.net>

        Reviewed by Timothy.

        * Info.plist: Fixed copyright to include 2003-2006.

=== JavaScriptGlue-521.13 ===
        
2006-06-20  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Anders.
        
        - Required for JS API: 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.

        * JSUtils.cpp:
        (KJSValueToCFTypeInternal):
        * JSValueWrapper.cpp:
        (JSValueWrapper::JSObjectCopyPropertyNames):
        * UserObjectImp.cpp:
        (UserObjectImp::getPropertyList):
        * UserObjectImp.h:

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.

        * JavaScriptGlue.xcodeproj/project.pbxproj:

2006-06-12  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by TimO, Maciej.
        
        - JSGlue part of merging InterpreterImp into Interpreter.
        
        Since there's now a kjs forwarding header, I moved all forwarding
        headers into a "ForwardingHeaders" directory, like in WebCore.

        * ForwardingHeaders: Added.
        * ForwardingHeaders/kjs: Added.
        * ForwardingHeaders/kjs/ExecState.h: Added.
        * ForwardingHeaders/wtf: Added.
        * JavaScriptGlue.xcodeproj/project.pbxproj:
        * config.h:
        * wtf: Removed.
        * wtf/AlwaysInline.h: Removed.
        * wtf/Assertions.h: Removed.
        * wtf/FastMalloc.h: Removed.
        * wtf/Forward.h: Removed.
        * wtf/HashCountedSet.h: Removed.
        * wtf/HashSet.h: Removed.
        * wtf/Noncopyable.h: Removed.
        * wtf/OwnArrayPtr.h: Removed.
        * wtf/OwnPtr.h: Removed.
        * wtf/PassRefPtr.h: Removed.
        * wtf/Platform.h: Removed.
        * wtf/RefPtr.h: Removed.
        * wtf/Vector.h: Removed.

=== JavaScriptGlue-521.10 ===

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

        Rubber stamped by Anders.
        
        - renamed kxmlcore to wtf
        
        kxmlcore --> wtf
        KXMLCore --> WTF
        KXC --> WTF

        * config.h:
        * kxmlcore: Removed.
        * kxmlcore/AlwaysInline.h: Removed.
        * kxmlcore/Assertions.h: Removed.
        * kxmlcore/FastMalloc.h: Removed.
        * kxmlcore/Forward.h: Removed.
        * kxmlcore/HashCountedSet.h: Removed.
        * kxmlcore/HashSet.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/Vector.h: Removed.
        * wtf: Added.

2006-04-11  Darin Adler  <darin@apple.com>

        - try to fix Windows build

        * kxmlcore/HashForward.h: Removed.

2006-04-10  Darin Adler  <darin@apple.com>

        Rubber-stamped by John Sullivan.

        - added forwarding headers for the new Forward.h and HashForward.h files

        * kxmlcore/Forward.h: Added.
        * kxmlcore/HashForward.h: Added.

2006-04-04  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Darin Adler.

        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. 

        * JavaScriptGlue.xcodeproj/project.pbxproj:

2006-04-02  Eric Seidel  <eseidel@apple.com>

        Reviewed by andersca.

        Add missing forwarding header.

        * kxmlcore/Vector.h: Added.

2006-03-31  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Darin Adler.

        - Fixed <rdar://problem/4430836> JavaScript patch crashing Quartz
        Composer

        JSValueWrappers used to hold on to the ExecState that pertained at
        the time of their creation. Since ExecStates are transient, that
        design was totally bogus, and it would crash once the ExecState had
        been deallocated.

        Unfortunately, there's no clean solution to this problem, since
        the JSGlue API has no notion of state. The solution here is to use
        a shared, global ExecState for the purpose of JSGlue calls. Given
        the pre-existing limitations in the JSGlue API, this design
        shouldn't actually introduce any new limitations (see comments in
        JSValueWrapper.cpp).

        I tested with Quartz Composer and PAC files, neither of which are
        layout-testable.
        
        * JSUtils.cpp:
        (KJSValueToJSObject):
        * JSValueWrapper.cpp:
        (JSValueWrapper::JSValueWrapper):
        (JSValueWrapper::GetValue):
        (getProcessGlobalExecState):
        (JSValueWrapper::JSObjectCopyPropertyNames):
        (JSValueWrapper::JSObjectCopyProperty):
        (JSValueWrapper::JSObjectSetProperty):
        (JSValueWrapper::JSObjectCallFunction):
        (JSValueWrapper::JSObjectCopyCFValue):
        * JSValueWrapper.h:

        Also added a test harness file. It was helpful while I was testing,
        and may come in handy in the future:
        
        * JavaScriptGlue.xcodeproj/project.pbxproj:
        testjsglue.cpp: Added.

2006-03-28  Darin Adler  <darin@apple.com>

        Reviewed by Geoff.

        - added a build step that checks for init routines

        * JavaScriptGlue.xcodeproj/project.pbxproj: Added a custom build phase that invokes the
        check-for-global-initializers script.

2006-03-02  Maciej Stachowiak  <mjs@apple.com>

        Not reviewed, but I noticed these trivial extra changes were needed to avoid
        breaking the build with my reviewed patch for:
        
        http://bugs.webkit.org/show_bug.cgi?id=7387
        
        Add config.h, includes of it, and Platform.h forwarding header.

        * JSBase.cpp:
        * JSObject.cpp:
        * JSRun.cpp:
        * JSUtils.cpp:
        * JSValueWrapper.cpp:
        * JavaScriptGlue.cpp:
        * UserObjectImp.cpp:
        * config.h: Added.
        * kxmlcore/Platform.h: Added.

=== JavaScriptGlue-521.7 ===

2006-02-10  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by eric.

        - Fixed build.

        * UserObjectImp.cpp:
        (UserObjectImp::toPrimitive):
        * UserObjectImp.h:

2006-02-03  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Justin.

        Renamed configuration names to Debug, Release and Production.

        * JavaScriptGlue.xcodeproj/project.pbxproj:

2006-02-01  Darin Adler  <darin@apple.com>

        - added some forwarding headers to make new JavaScriptCore changes work

        * kxmlcore/Assertions.h: Added.
        * kxmlcore/Noncopyable.h: Added.
        * kxmlcore/OwnPtr.h: Added.
        * kxmlcore/OwnArrayPtr.h: Added.

2006-01-16  Timothy Hatcher  <timothy@apple.com>

        Adding the license header to all files so we can
        move JavaScriptGlue into the open source repository.

        * LICENSE: Added.
        * JSBase.cpp: license header added.
        * JSBase.h: ditto.
        * JSObject.cpp: ditto.
        * JSObject.h: ditto.
        * JSRun.cpp: ditto.
        * JSRun.h: ditto.
        * JSUtils.cpp: ditto.
        * JSUtils.h: ditto.
        * JSValueWrapper.cpp: ditto.
        * JSValueWrapper.h: ditto.
        * JavaScriptGlue.cpp: ditto.
        * JavaScriptGlue.h: ditto.
        * UserObjectImp.cpp: ditto.
        * UserObjectImp.h: ditto.

2005-12-21  Timothy Hatcher  <timothy@apple.com>

        * JavaScriptGlue.xcodeproj/project.pbxproj:
          Set tab width to 8, indent width to 4 and uses tabs to false per file.

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

        * kxmlcore/AlwaysInline.h: Added.

2005-12-15  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        * JSRun.cpp: (JSRun::Evaluate): Updated for change to Interpreter::evaluate.

2005-12-15  Darin Adler  <darin@apple.com>

        Reviewed by Tim Hatcher.

        * JavaScriptGlue.xcodeproj/project.pbxproj: Removed some redundant build
        settings, turned off prebinding explicitly for our Development and
        Deployment builds, remove .exp file from sources. All "clean-up".

=== Safari-521~5 ===

2005-12-13  Geoffrey Garen  <ggaren@apple.com>

    - Fixed build after Anders's last checkin to JavaScriptCore.
    
        Reviewed by darin.

        * UserObjectImp.cpp:
        (UserObjectImp::userObjectGetter): Updated to reflect new argument that 
    getters take (unused here).
        * UserObjectImp.h:

2005-12-13  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Eric.

    - added forwarding header for HashCountedSet

        * kxmlcore/HashCountedSet.h: Added.

2005-12-10  Darin Adler  <darin@apple.com>

        Rubber stamped by Maciej.

        - updated for KJS class renaming

        * many 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().

        * JSUtils.cpp:
        (JSObjectKJSValue):
        * UserObjectImp.cpp:
        (UserObjectImp::callAsFunction):
        (UserObjectImp::toPrimitive):

2005-12-05  Maciej Stachowiak  <mjs@apple.com>

        - added new forwarding headers

        * kxmlcore/PassRefPtr.h: Added.
        * kxmlcore/RefPtr.h: Added.

2005-12-05  Maciej Stachowiak  <mjs@apple.com>

        * kxmlcore/PassRefPtr.h: Added.

2005-11-26  Maciej Stachowiak  <mjs@apple.com>

        Rubber stamped by Eric.

    - renamed InterpreterLock to JSLock

        * JSUtils.cpp:
        (CFStringToUString):
        (JSObjectKJSValue):
        (KJSValueToCFTypeInternal):
        * JSValueWrapper.cpp:
        (JSValueWrapper::JSObjectCopyPropertyNames):
        (JSValueWrapper::JSObjectCopyProperty):
        (JSValueWrapper::JSObjectSetProperty):
        (JSValueWrapper::JSObjectCallFunction):
        (JSValueWrapper::JSObjectCopyCFValue):
        * JavaScriptGlue.cpp:
        (JSRunCreate):
        (JSCollect):
        (JSLockInterpreter):
        (JSUnlockInterpreter):
        * UserObjectImp.cpp:
        (UserObjectImp::callAsFunction):

2005-11-16  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Geoff.

    Updated to use new API to drop all locks.

        * JavaScriptGlue.cpp:
        (JSLockInterpreter):
        (JSUnlockInterpreter):
        * UserObjectImp.cpp:
        (UserObjectImp::callAsFunction):

2005-11-14  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by mjs.

        - Part of the fix for <rdar://problem/4342216> Installer crash in 
          KJS::ValueImp::marked() when garbage collector runs inside call to 
          ConstantValues::init()
          
        Added locking in JSRunCreate, since JSRun::JSRun constructs an object.
        
        * JavaScriptGlue.cpp:
        (JSRunCreate):

2005-11-10  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Maciej.

        - Fixed <rdar://problem/4334445> installer crashed on my 
          dual g4 450Mhz after clicking language

        - Reversed backwards NULL check.
        - Inserted guards against NULL fJSUserObject data member.
        - Cleaned up some style.

        * JSUtils.cpp:
        (KJSValueToCFTypeInternal):
        * UserObjectImp.cpp:
        (UserObjectImp::~UserObjectImp):
        (UserObjectImp::callAsFunction):
        (UserObjectImp::userObjectGetter):
        (UserObjectImp::getOwnPropertySlot):
        (UserObjectImp::put):
        (UserObjectImp::mark):

2005-11-04  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Darin Adler.

        * JavaScriptGlue.xcodeproj/project.pbxproj:
          Fixed the FRAMEWORK_SEARCH_PATHS to look in the WebKit
          Frameworks for the Default config.

2005-11-03  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Darin and Vicki.

        * JavaScriptGlue.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-01  Maciej Stachowiak  <mjs@apple.com>

    Reviewed by: Eric.
    
        <rdar://problem/4324107> get JavaScriptGlue working with TOT JavaScriptCore again

    - reverted all this stuff to use ReferenceList instead of IdentifierSequencedSet

        * JSUtils.cpp:
        (KJSValueToCFTypeInternal):
        * JSValueWrapper.cpp:
        (JSValueWrapper::JSObjectCopyPropertyNames):
        * UserObjectImp.cpp:
        (UserObjectImp::propList):
        * UserObjectImp.h:

2005-10-11  Timothy Hatcher  <timothy@apple.com>

        Setup the proper Framework search path for the Default config.
        Prepping for a TOT submission and build by B&I.

        * JavaScriptGlue.xcodeproj/project.pbxproj:

2005-10-10  Darin Adler  <darin@apple.com>

        Reviewed by Eric.

        - converted tabs to spaces, NULL to 0, added some (void), got rid of __ prefixes
          in headers (reserved for compiler/library)

        * Info.plist:
        * JSBase.cpp:
        * JSBase.h:
        * JSObject.cpp:
        * JSObject.h:
        * JSRun.cpp:
        * JSRun.h:
        * JSUtils.cpp:
        * JSUtils.h:
        * JSValueWrapper.cpp:
        * JSValueWrapper.h:
        * JavaScriptGlue.cpp:
        * JavaScriptGlue.h:
        * UserObjectImp.cpp:
        * UserObjectImp.h:

2005-10-10  Darin Adler  <darin@apple.com>

        * .cvsignore: Added. Ignore Makefile.in and Makefile.

2005-10-07  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Maciej.
        
        Build fix, needed to disable RTTI. Upgraded to a native target.

        * JavaScriptGlue.xcodeproj/project.pbxproj:
        * Info.plist

2005-10-05  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Eric and Darin.

    <rdar://problem/4260506> Port JavaScriptGlue to TOT JavaScriptCore

        * JSRun.cpp:
        (JSRun::JSRun):
        (JSRun::GlobalObject):
        * JSRun.h:
        (JSInterpreter::JSInterpreter):
        * JSUtils.cpp:
        (KJSValueToJSObject):
        (JSObjectKJSValue):
        (KJSValueToCFTypeInternal):
        (KJSValueToCFType):
        * JSUtils.h:
        * JSValueWrapper.cpp:
        (JSValueWrapper::JSValueWrapper):
        (JSValueWrapper::GetValue):
        (JSValueWrapper::JSObjectCopyPropertyNames):
        (JSValueWrapper::JSObjectCopyProperty):
        (JSValueWrapper::JSObjectSetProperty):
        (JSValueWrapper::JSObjectCallFunction):
        (JSValueWrapper::JSObjectMark):
        * JSValueWrapper.h:
        * JavaScriptGlue.cpp:
        (JSRunCopyGlobalObject):
        * JavaScriptGlue.xcodeproj/project.pbxproj:
        * Makefile.am: Added.
        * UserObjectImp.cpp:
        (UserObjectPrototypeImp::GlobalUserObjectPrototypeImp):
        (UserObjectImp::UserObjectImp):
        (UserObjectImp::callAsFunction):
        (UserObjectImp::getPropertyNames):
        (UserObjectImp::userObjectGetter):
        (UserObjectImp::getOwnPropertySlot):
        (UserObjectImp::put):
        (UserObjectImp::toPrimitive):
        (UserObjectImp::mark):
        * UserObjectImp.h:
        * kxmlcore/FastMalloc.h: Added.
        * kxmlcore/HashSet.h: Added.

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

        * JSUtils.cpp:
        (CFStringToUString):
        (JSObjectKJSValue):
        (KJSValueToCFTypeInternal):
        * JSUtils.h:
        * JSValueWrapper.cpp:
        (JSValueWrapper::JSObjectCopyPropertyNames):
        (JSValueWrapper::JSObjectCopyProperty):
        (JSValueWrapper::JSObjectSetProperty):
        (JSValueWrapper::JSObjectCallFunction):
        (JSValueWrapper::JSObjectCopyCFValue):
        * JavaScriptGlue.cpp:
        (JSCollect):

2005-09-27  Adele Peterson  <adele@apple.com>

        Reviewed by Maciej.

        <rdar://problem/4223297> JavaScriptGlue: Submit 64-bit compatible versions of your API and SPIs by September 15

        * JavaScriptGlue.h: Changed UInt32 to CFTypeID for JSTypeID

2005-09-06  Geoffrey Garen  <ggaren@apple.com>

        -upgraded project files to XCode 2.1

        * JavaScriptGlue.pbproj/project.pbxproj: Removed.
        * JavaScriptGlue.xcodeproj/.cvsignore: Added.
        * JavaScriptGlue.xcodeproj/project.pbxproj: Added.

2005-09-01  Maciej Stachowiak  <mjs@apple.com>

        Rubber stamped by hyatt.

    - initial import of JavaScriptGlue into our repository

        * English.lproj/InfoPlist.strings: Added.
        * JSBase.cpp: Added.
        (JSBase::JSBase):
        (JSBase::~JSBase):
        (JSBase::Retain):
        (JSBase::Release):
        (JSBase::RetainCount):
        (JSBase::GetTypeID):
        (JSBase::CopyDescription):
        (JSBase::Equal):
        * JSBase.h: Added.
        * JSObject.cpp: Added.
        (JSUserObject::JSUserObject):
        (JSUserObject::~JSUserObject):
        (JSUserObject::CopyPropertyNames):
        (JSUserObject::CopyProperty):
        (JSUserObject::SetProperty):
        (JSUserObject::ImplementsCall):
        (JSUserObject::CallFunction):
        (JSUserObject::CopyCFValue):
        (JSUserObject::Equal):
        (JSUserObject::Mark):
        (JSUserObject::GetData):
        * JSObject.h: Added.
        (JSUserObject::DataType):
        * JSRun.cpp: Added.
        (JSRun::JSRun):
        (JSRun::~JSRun):
        (JSRun::Flags):
        (JSRun::GetSource):
        (JSRun::GlobalObject):
        (JSRun::GetInterpreter):
        (JSRun::Evaluate):
        (JSRun::CheckSyntax):
        * JSRun.h: Added.
        (JSInterpreter::JSInterpreter):
        (JSInterpreter::JSInterpreter::~JSInterpreter):
        (JSInterpreter::Flags):
        * JSUtils.cpp: Added.
        (CFStringToUString):
        (UStringToCFString):
        (CFStringToIdentifier):
        (IdentifierToCFString):
        (KJSValueToJSObject):
        (JSObjectKJSValue):
        (KJSValueToCFTypeInternal):
        (KJSValueToCFType):
        (GetCFNull):
        * JSUtils.h: Added.
        (RetainCFType):
        (ReleaseCFType):
        * JSValueWrapper.cpp: Added.
        (JSValueWrapper::JSValueWrapper):
        (JSValueWrapper::~JSValueWrapper):
        (JSValueWrapper::GetValue):
        (JSValueWrapper::GetExecState):
        (JSValueWrapper::GetJSObectCallBacks):
        (JSValueWrapper::JSObjectDispose):
        (JSValueWrapper::JSObjectCopyPropertyNames):
        (JSValueWrapper::JSObjectCopyProperty):
        (JSValueWrapper::JSObjectSetProperty):
        (JSValueWrapper::JSObjectCallFunction):
        (JSValueWrapper::JSObjectCopyCFValue):
        (JSValueWrapper::JSObjectMark):
        * JSValueWrapper.h: Added.
        * JavaScriptGlue.cpp: Added.
        (JSSetCFNull):
        (JSGetCFNull):
        (JSRetain):
        (JSRelease):
        (JSCopyDescription):
        (JSEqual):
        (JSGetTypeID):
        (JSGetRetainCount):
        (JSObjectCreate):
        (JSObjectCreateInternal):
        (JSObjectCopyCFValue):
        (JSObjectGetData):
        (JSObjectCopyProperty):
        (JSObjectSetProperty):
        (JSObjectCallFunction):
        (JSRunCreate):
        (JSRunCopySource):
        (JSRunCopyGlobalObject):
        (JSRunEvaluate):
        (JSRunCheckSyntax):
        (JSCollect):
        (JSTypeGetCFArrayCallBacks):
        (JSCFRetain):
        (JSCFRelease):
        (JSObjectCreateWithCFType):
        (CFJSObjectDispose):
        (JSObjectCopyPropertyNames):
        (CFJSObjectCopyProperty):
        (CFJSObjectSetProperty):
        (CFJSObjectCopyCFValue):
        (CFJSObjectEqual):
        (CFJSObjectCopyPropertyNames):
        (JSCreateCFArrayFromJSArray):
        (JSCreateJSArrayFromCFArray):
        (JSLockInterpreter):
        (JSUnlockInterpreter):
        * JavaScriptGlue.exp: Added.
        * JavaScriptGlue.h: Added.
        * JavaScriptGlue.pbproj/project.pbxproj: Added.
        * UserObjectImp.cpp: Added.
        (UserObjectPrototypeImp::UserObjectPrototypeImp):
        (UserObjectPrototypeImp::GlobalUserObjectPrototypeImp):
        (UserObjectImp::UserObjectImp):
        (UserObjectImp::~UserObjectImp):
        (UserObjectImp::classInfo):
        (UserObjectImp::implementsCall):
        (UserObjectImp::call):
        (UserObjectImp::propList):
        (UserObjectImp::hasProperty):
        (UserObjectImp::get):
        (UserObjectImp::put):
        (UserObjectImp::GetJSUserObject):
        (UserObjectImp::toPrimitive):
        (UserObjectImp::toBoolean):
        (UserObjectImp::toNumber):
        (UserObjectImp::toString):
        (UserObjectImp::mark):
        * UserObjectImp.h: Added.

