2009-01-14  Adam Treat  <adam.treat@torchmobile.com>

        Build fix for Qt from Dmitry Titov.

        * wtf/ThreadingQt.cpp:
        (WTF::ThreadCondition::timedWait):

2009-01-14  Oliver Hunt  <oliver@apple.com>

        Reviewed by Cameron Zwarich.

        Bug 22903: REGRESSION (r36267): visiting this site reliably crashes WebKit nightly

        EvalCodeBlock's do not reference the functions that are declared inside the eval
        code, this means that simply marking the EvalCodeBlock through the global object
        is insufficient to mark the declared functions.  This patch corrects this by
        explicitly marking the CodeBlocks of all the functions declared in the cached
        EvalNode.

        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::mark):
        * bytecode/CodeBlock.h:
        (JSC::CodeBlock::hasFunctions):
        * bytecode/EvalCodeCache.h:
        (JSC::EvalCodeCache::mark):
        * parser/Nodes.cpp:
        (JSC::ScopeNodeData::mark):
        (JSC::EvalNode::mark):
        * parser/Nodes.h:

2009-01-14  Dmitry Titov  <dimich@chromium.org>

        Reviewed by Alexey Proskuryakov.

        https://bugs.webkit.org/show_bug.cgi?id=23312
        Implement MessageQueue::waitForMessageTimed()
        Also fixed ThreadCondition::timedWait() to take absolute time, as discussed on webkit-dev.
        Win32 version of timedWait still has to be implemented.

        * wtf/MessageQueue.h:
        (WTF::MessageQueueWaitResult: new enum for the result of MessageQueue::waitForMessageTimed.
        (WTF::MessageQueue::waitForMessage):
        (WTF::MessageQueue::waitForMessageTimed): New method.
        * wtf/Threading.h:
        * wtf/ThreadingGtk.cpp:
        (WTF::ThreadCondition::timedWait): changed to use absolute time instead of interval.
        * wtf/ThreadingNone.cpp:
        (WTF::ThreadCondition::timedWait): ditto.
        * wtf/ThreadingPthreads.cpp:
        (WTF::ThreadCondition::timedWait): ditto.
        * wtf/ThreadingQt.cpp:
        (WTF::ThreadCondition::timedWait): ditto.
        * wtf/ThreadingWin.cpp:
        (WTF::ThreadCondition::timedWait): ditto. The actual Win32 code is still to be implemented.

2009-01-14  Dean McNamee  <deanm@chromium.org>

        Reviewed by Darin Adler and Oliver hunt.

        Correctly match allocation functions by implementing a custom deref().

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

        * runtime/ByteArray.h:
        (JSC::ByteArray::deref):
        (JSC::ByteArray::ByteArray):

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

        Reviewed by John Sullivan.

        - update copyright

        * Info.plist:

2009-01-13  Beth Dakin  <bdakin@apple.com>

        Reviewed by Darin Adler and Oliver Hunt.

        <rdar://problem/6489314> REGRESSION: Business widget's front side 
        fails to render correctly when flipping widget

        The problem here is that parseInt was parsing NaN as 0. This patch 
        corrects that by parsing NaN as NaN. This matches our old behavior 
        and Firefox. 

        * runtime/JSGlobalObjectFunctions.cpp:
        (JSC::globalFuncParseInt):

2009-01-13  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Oliver Hunt.

        Fix for: https://bugs.webkit.org/show_bug.cgi?id=23292

        Implementation of two argument canDoFastAdditiveOperations does not correlate well with reality.

        * runtime/JSImmediate.h:
        (JSC::JSFastMath::canDoFastAdditiveOperations):

2009-01-13  Zalan Bujtas  <zbujtas@gmail.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=23290
        Fix JSImmediate::isImmediate(src) to !src->isCell()

        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::privateExecute):

2009-01-13  Dmitry Titov  <dimich@chromium.org>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=23281
        Fix the Chromium Win build.
        Need to use PLATFORM(WIN_OS) instead of PLATFORM(WIN).
        Moved GTK and WX up in #if sequence because they could come with WIN_OS too,
        while they have their own implementation even on Windows.

        * wtf/CurrentTime.cpp:
        (WTF::currentTime):

2009-01-12  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Oliver Hunt.

        Make the JSImmediate interface private.

        All manipulation of JS values should be through the JSValuePtr class, not by using JSImmediate
        directly.  The key missing methods on JSValuePtr are:

            * isCell() - check for values that are JSCell*s, and as such where asCell() may be used.
            * isInt32Fast() getInt32Fast() - fast check/access for integer immediates.
            * isUInt32Fast() getUInt32Fast() - ditto for unsigned integer immediates.

        The JIT is allowed full access to JSImmediate, since it needs to be able to directly
        manipulate JSValuePtrs.  The Interpreter is provided access to perform operations directly
        on JSValuePtrs through the new JSFastMath interface.

        No performance impact.

        * API/JSCallbackObjectFunctions.h:
        (JSC::::toNumber):
        * API/JSValueRef.cpp:
        (JSValueIsEqual):
        (JSValueIsStrictEqual):
        * JavaScriptCore.exp:
        * bytecode/CodeBlock.h:
        (JSC::CodeBlock::isKnownNotImmediate):
        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::keyForImmediateSwitch):
        * bytecompiler/BytecodeGenerator.h:
        (JSC::BytecodeGenerator::JSValueHashTraits::constructDeletedValue):
        (JSC::BytecodeGenerator::JSValueHashTraits::isDeletedValue):
        * interpreter/Interpreter.cpp:
        (JSC::jsLess):
        (JSC::jsLessEq):
        (JSC::jsAdd):
        (JSC::jsIsObjectType):
        (JSC::cachePrototypeChain):
        (JSC::Interpreter::tryCachePutByID):
        (JSC::Interpreter::tryCacheGetByID):
        (JSC::Interpreter::privateExecute):
        (JSC::Interpreter::tryCTICachePutByID):
        (JSC::Interpreter::tryCTICacheGetByID):
        (JSC::Interpreter::cti_op_add):
        (JSC::Interpreter::cti_op_get_by_id_self_fail):
        (JSC::Interpreter::cti_op_get_by_id_proto_list):
        (JSC::Interpreter::cti_op_instanceof):
        (JSC::Interpreter::cti_op_mul):
        (JSC::Interpreter::cti_op_get_by_val):
        (JSC::Interpreter::cti_op_get_by_val_byte_array):
        (JSC::Interpreter::cti_op_sub):
        (JSC::Interpreter::cti_op_put_by_val):
        (JSC::Interpreter::cti_op_put_by_val_array):
        (JSC::Interpreter::cti_op_put_by_val_byte_array):
        (JSC::Interpreter::cti_op_negate):
        (JSC::Interpreter::cti_op_div):
        (JSC::Interpreter::cti_op_eq):
        (JSC::Interpreter::cti_op_lshift):
        (JSC::Interpreter::cti_op_bitand):
        (JSC::Interpreter::cti_op_rshift):
        (JSC::Interpreter::cti_op_bitnot):
        (JSC::Interpreter::cti_op_neq):
        (JSC::Interpreter::cti_op_urshift):
        (JSC::Interpreter::cti_op_call_eval):
        (JSC::Interpreter::cti_op_throw):
        (JSC::Interpreter::cti_op_is_undefined):
        (JSC::Interpreter::cti_op_stricteq):
        (JSC::Interpreter::cti_op_nstricteq):
        (JSC::Interpreter::cti_op_switch_imm):
        (JSC::Interpreter::cti_vm_throw):
        * interpreter/Interpreter.h:
        (JSC::Interpreter::isJSArray):
        (JSC::Interpreter::isJSString):
        (JSC::Interpreter::isJSByteArray):
        * jit/JIT.cpp:
        (JSC::JIT::compileOpStrictEq):
        (JSC::JIT::privateCompileMainPass):
        * jit/JIT.h:
        (JSC::JIT::isStrictEqCaseHandledInJITCode):
        * jit/JITArithmetic.cpp:
        (JSC::JIT::compileFastArith_op_rshift):
        (JSC::JIT::compileFastArith_op_bitand):
        (JSC::JIT::compileFastArith_op_mod):
        * jit/JITCall.cpp:
        (JSC::JIT::unlinkCall):
        (JSC::JIT::compileOpCall):
        * jit/JITInlineMethods.h:
        (JSC::JIT::getConstantOperandImmediateInt):
        (JSC::JIT::isOperandConstantImmediateInt):
        * parser/Nodes.cpp:
        (JSC::processClauseList):
        * runtime/ArrayPrototype.cpp:
        (JSC::arrayProtoFuncIndexOf):
        (JSC::arrayProtoFuncLastIndexOf):
        * runtime/BooleanPrototype.cpp:
        (JSC::booleanProtoFuncValueOf):
        * runtime/Collector.cpp:
        (JSC::Heap::protect):
        (JSC::Heap::unprotect):
        (JSC::Heap::heap):
        * runtime/JSByteArray.cpp:
        (JSC::JSByteArray::getOwnPropertySlot):
        * runtime/JSByteArray.h:
        (JSC::JSByteArray::getIndex):
        * runtime/JSCell.cpp:
        * runtime/JSCell.h:
        (JSC::JSValuePtr::isNumberCell):
        (JSC::JSValuePtr::asCell):
        (JSC::JSValuePtr::isNumber):
        * runtime/JSGlobalObjectFunctions.cpp:
        (JSC::globalFuncParseInt):
        * runtime/JSImmediate.h:
        (JSC::js0):
        (JSC::jsImpossibleValue):
        (JSC::JSValuePtr::toInt32):
        (JSC::JSValuePtr::toUInt32):
        (JSC::JSValuePtr::isCell):
        (JSC::JSValuePtr::isInt32Fast):
        (JSC::JSValuePtr::getInt32Fast):
        (JSC::JSValuePtr::isUInt32Fast):
        (JSC::JSValuePtr::getUInt32Fast):
        (JSC::JSValuePtr::makeInt32Fast):
        (JSC::JSValuePtr::areBothInt32Fast):
        (JSC::JSFastMath::canDoFastBitwiseOperations):
        (JSC::JSFastMath::equal):
        (JSC::JSFastMath::notEqual):
        (JSC::JSFastMath::andImmediateNumbers):
        (JSC::JSFastMath::xorImmediateNumbers):
        (JSC::JSFastMath::orImmediateNumbers):
        (JSC::JSFastMath::canDoFastRshift):
        (JSC::JSFastMath::canDoFastUrshift):
        (JSC::JSFastMath::rightShiftImmediateNumbers):
        (JSC::JSFastMath::canDoFastAdditiveOperations):
        (JSC::JSFastMath::addImmediateNumbers):
        (JSC::JSFastMath::subImmediateNumbers):
        (JSC::JSFastMath::incImmediateNumber):
        (JSC::JSFastMath::decImmediateNumber):
        * runtime/JSNumberCell.h:
        (JSC::JSValuePtr::asNumberCell):
        (JSC::jsNumber):
        (JSC::JSValuePtr::uncheckedGetNumber):
        (JSC::JSNumberCell::toInt32):
        (JSC::JSNumberCell::toUInt32):
        (JSC::JSValuePtr::toJSNumber):
        (JSC::JSValuePtr::getNumber):
        (JSC::JSValuePtr::numberToInt32):
        (JSC::JSValuePtr::numberToUInt32):
        * runtime/JSObject.h:
        (JSC::JSValuePtr::isObject):
        (JSC::JSValuePtr::get):
        (JSC::JSValuePtr::put):
        * runtime/JSValue.cpp:
        (JSC::JSValuePtr::toInteger):
        (JSC::JSValuePtr::toIntegerPreserveNaN):
        * runtime/JSValue.h:
        * runtime/Operations.cpp:
        (JSC::JSValuePtr::equalSlowCase):
        (JSC::JSValuePtr::strictEqualSlowCase):
        * runtime/Operations.h:
        (JSC::JSValuePtr::equal):
        (JSC::JSValuePtr::equalSlowCaseInline):
        (JSC::JSValuePtr::strictEqual):
        (JSC::JSValuePtr::strictEqualSlowCaseInline):
        * runtime/Protect.h:
        (JSC::gcProtect):
        (JSC::gcUnprotect):
        * runtime/StringPrototype.cpp:
        (JSC::stringProtoFuncCharAt):
        (JSC::stringProtoFuncCharCodeAt):
        * runtime/Structure.cpp:
        (JSC::Structure::createCachedPrototypeChain):

2009-01-12  Kevin Ollivier  <kevino@theolliviers.com>

        Since date time functions have moved here, now the wx port JSC
        needs to depend on wx.

        * jscore.bkl:

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

        Reviewed by Darin Adler.

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

        Add initializeThreading to key places in JS API to ensure that
        UString is properly initialized.

        * API/JSContextRef.cpp:
        (JSContextGroupCreate):
        (JSGlobalContextCreate):
        * API/JSObjectRef.cpp:
        (JSClassCreate):
        * API/JSStringRef.cpp:
        (JSStringCreateWithCharacters):
        (JSStringCreateWithUTF8CString):
        * API/JSStringRefCF.cpp:
        (JSStringCreateWithCFString):

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

        Reviewed by Darin Adler.

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

        Separate out BaseString information from UString::Rep and make all baseString access go through
        a member function, so that it may be used for something else (in the future) in the BaseString
        case.

        * runtime/SmallStrings.cpp:
        (JSC::SmallStringsStorage::rep):
        (JSC::SmallStringsStorage::SmallStringsStorage):
        (JSC::SmallStrings::SmallStrings):
        (JSC::SmallStrings::mark):
        Adjust to account for the changes in UString and put the UString in place in
        SmallStringsStorage to aid in locality of reference among the UChar[] and UString::Rep's.

        * runtime/SmallStrings.h:
        * runtime/UString.cpp:
        (JSC::initializeStaticBaseString):
        (JSC::initializeUString):
        (JSC::UString::Rep::create):
        (JSC::UString::Rep::destroy):
        (JSC::UString::Rep::checkConsistency):
        (JSC::expandCapacity):
        (JSC::UString::expandPreCapacity):
        (JSC::concatenate):
        (JSC::UString::append):
        (JSC::UString::operator=):
        * runtime/UString.h:
        (JSC::UString::Rep::baseIsSelf):
        (JSC::UString::Rep::setBaseString):
        (JSC::UString::Rep::baseString):
        (JSC::UString::Rep::):
        (JSC::UString::Rep::null):
        (JSC::UString::Rep::empty):
        (JSC::UString::Rep::data):
        (JSC::UString::cost):
        Separate out the items out used by base strings from those used in Rep's that only
        point to base strings.  (This potentially saves 24 bytes per Rep.)

2009-01-11  Darin Adler  <darin@apple.com>

        Reviewed by Dan Bernstein.

        Bug 23239: improve handling of unused arguments in JavaScriptCore
        https://bugs.webkit.org/show_bug.cgi?id=23239

        * runtime/DatePrototype.cpp: Moved LocaleDateTimeFormat enum outside #if
        so we can use this on all platforms. Changed valueOf to share the same
        function with getTime, since the contents of the two are identical. Removed
        a FIXME since the idea isn't really specific enough or helpful enough to
        need to sit here in the source code.
        (JSC::formatLocaleDate): Changed the Mac version of this function to take
        the same arguments as the non-Mac version so the caller doesn't have to
        special-case the two platforms. Also made the formatString array be const;
        before the characters were, but the array was a modifiable global variable.
        (JSC::dateProtoFuncToLocaleString): Changed to call the new unified
        version of formatLocaleDate and remove the ifdef.
        (JSC::dateProtoFuncToLocaleDateString): Ditto.
        (JSC::dateProtoFuncToLocaleTimeString): Ditto.

        * runtime/JSNotAnObject.cpp:
        (JSC::JSNotAnObject::toObject): Use the new ASSERT_UNUSED instead of the
        old UNUSED_PARAM.

        * runtime/RegExp.cpp:
        (JSC::RegExp::RegExp): Changed to only use UNUSED_PARAM when the parameter
        is actually unused.

        * wtf/TCSystemAlloc.cpp:
        (TCMalloc_SystemRelease): Changed to only use UNUSED_PARAM when the parameter
        is actually unused.
        (TCMalloc_SystemCommit): Changed to omit the argument names instead of using
        UNUSED_PARAM.

2009-01-11  Oliver Hunt  <oliver@apple.com>

        Reviewed by NOBODY (Build fix).

        Fix the build (whoops)

        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::cti_op_get_by_val):

2009-01-11  Oliver Hunt  <oliver@apple.com>

        Reviewed by Darin Adler and Anders Carlsson

        Bug 23128: get/put_by_val need to respecialise in the face of ByteArray

        Restructure the code slightly, and add comments per Darin's suggestions

        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::cti_op_get_by_val):
        (JSC::Interpreter::cti_op_get_by_val_byte_array):
        (JSC::Interpreter::cti_op_put_by_val):
        (JSC::Interpreter::cti_op_put_by_val_byte_array):

2009-01-11  Oliver Hunt  <oliver@apple.com>

        Reviewed by Anders Carlsson.

        Whoops, I accidentally removed an exception check from fast the
        fast path for string indexing when i originally landed the
        byte array logic.

        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::cti_op_get_by_val):

2009-01-11  Oliver Hunt  <oliver@apple.com>

        Reviewed by Anders Carlsson.

        Bug 23128: get/put_by_val need to respecialise in the face of ByteArray
        <https://bugs.webkit.org/show_bug.cgi?id=23128>

        Fairly simple patch, add specialised versions of cti_op_get/put_by_val
        that assume ByteArray, thus avoiding a few branches in the case of bytearray
        manipulation.

        No effect on SunSpider.  15% win on the original testcase.

        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::cti_op_get_by_val):
        (JSC::Interpreter::cti_op_get_by_val_byte_array):
        (JSC::Interpreter::cti_op_put_by_val):
        (JSC::Interpreter::cti_op_put_by_val_byte_array):
        * interpreter/Interpreter.h:

2009-01-11  Alexey Proskuryakov  <ap@webkit.org>

        Try to fix Windows build.

        * wtf/CurrentTime.cpp: Added a definition of msPerSecond (previously, this code was in
        DateMath.cpp, with constant definition in DateTime.h)

2009-01-11  Alexey Proskuryakov  <ap@webkit.org>

        Try to fix Windows build.

        * wtf/CurrentTime.cpp: Include <sys/types.h> and <sys/timeb.h>, as MSDN says to.

2009-01-11  Dmitry Titov  <dimich@chromium.org>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=23207
        Moved currentTime() to from WebCore to WTF.

        * GNUmakefile.am:
        * JavaScriptCore.exp: added export for WTF::currentTime()
        * JavaScriptCore.pri:
        * JavaScriptCore.scons:
        * JavaScriptCore.vcproj/WTF/WTF.vcproj:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * JavaScriptCoreSources.bkl:
        * runtime/DateMath.cpp:
        (JSC::getCurrentUTCTimeWithMicroseconds): This function had another implementation of currentTime(), essentially. Now uses WTF version.
        * wtf/CurrentTime.cpp: Added.
        (WTF::currentTime):
        (WTF::highResUpTime):
        (WTF::lowResUTCTime):
        (WTF::qpcAvailable):
        * wtf/CurrentTime.h: Added.

2009-01-09  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Oliver Hunt.

        Stage two of converting JSValue from a pointer to a class type.
        Remove the class JSValue.  The functionallity has been transitioned
        into the wrapper class type JSValuePtr.

        The last stage will be to rename JSValuePtr to JSValue, remove the
        overloaded -> operator, and switch operations on JSValuePtrs from
        using '->' to use '.' instead.

        * API/APICast.h:
        * JavaScriptCore.exp:
        * runtime/JSCell.h:
        (JSC::asCell):
        (JSC::JSValuePtr::asCell):
        (JSC::JSValuePtr::isNumber):
        (JSC::JSValuePtr::isString):
        (JSC::JSValuePtr::isGetterSetter):
        (JSC::JSValuePtr::isObject):
        (JSC::JSValuePtr::getNumber):
        (JSC::JSValuePtr::getString):
        (JSC::JSValuePtr::getObject):
        (JSC::JSValuePtr::getCallData):
        (JSC::JSValuePtr::getConstructData):
        (JSC::JSValuePtr::getUInt32):
        (JSC::JSValuePtr::getTruncatedInt32):
        (JSC::JSValuePtr::getTruncatedUInt32):
        (JSC::JSValuePtr::mark):
        (JSC::JSValuePtr::marked):
        (JSC::JSValuePtr::toPrimitive):
        (JSC::JSValuePtr::getPrimitiveNumber):
        (JSC::JSValuePtr::toBoolean):
        (JSC::JSValuePtr::toNumber):
        (JSC::JSValuePtr::toString):
        (JSC::JSValuePtr::toObject):
        (JSC::JSValuePtr::toThisObject):
        (JSC::JSValuePtr::needsThisConversion):
        (JSC::JSValuePtr::toThisString):
        (JSC::JSValuePtr::getJSNumber):
        * runtime/JSImmediate.h:
        (JSC::JSValuePtr::isUndefined):
        (JSC::JSValuePtr::isNull):
        (JSC::JSValuePtr::isUndefinedOrNull):
        (JSC::JSValuePtr::isBoolean):
        (JSC::JSValuePtr::getBoolean):
        (JSC::JSValuePtr::toInt32):
        (JSC::JSValuePtr::toUInt32):
        * runtime/JSNumberCell.h:
        (JSC::JSValuePtr::uncheckedGetNumber):
        (JSC::JSValuePtr::toJSNumber):
        * runtime/JSObject.h:
        (JSC::JSValuePtr::isObject):
        (JSC::JSValuePtr::get):
        (JSC::JSValuePtr::put):
        * runtime/JSString.h:
        (JSC::JSValuePtr::toThisJSString):
        * runtime/JSValue.cpp:
        (JSC::JSValuePtr::toInteger):
        (JSC::JSValuePtr::toIntegerPreserveNaN):
        (JSC::JSValuePtr::toInt32SlowCase):
        (JSC::JSValuePtr::toUInt32SlowCase):
        * runtime/JSValue.h:
        (JSC::JSValuePtr::makeImmediate):
        (JSC::JSValuePtr::immediateValue):
        (JSC::JSValuePtr::JSValuePtr):
        (JSC::JSValuePtr::operator->):
        (JSC::JSValuePtr::operator bool):
        (JSC::JSValuePtr::operator==):
        (JSC::JSValuePtr::operator!=):
        (JSC::JSValuePtr::encode):
        (JSC::JSValuePtr::decode):
        (JSC::JSValuePtr::toFloat):
        (JSC::JSValuePtr::asValue):
        (JSC::operator==):
        (JSC::operator!=):

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

        Reviewed by Oliver Hunt.

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

        Adjustment to previous patch.  Remove call to initilizeThreading from JSGlobalCreate
        and fix jsc.cpp instead.

        * jsc.cpp:
        (main):
        (jscmain):
        * runtime/JSGlobalData.cpp:
        (JSC::JSGlobalData::create):

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

        Roll r39720 back in with a working interpreted mode.

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

        Reviewed by Oliver Hunt.

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

        Added a template to make the pointer and flags combination
        in UString more readable and less error prone.

        * GNUmakefile.am:
        * JavaScriptCore.exp:
        * JavaScriptCore.vcproj/WTF/WTF.vcproj:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        Added PtrAndFlags.h (and sorted the xcode project file).

        * runtime/Identifier.cpp:
        (JSC::Identifier::add):
        (JSC::Identifier::addSlowCase):
        * runtime/InitializeThreading.cpp:
        (JSC::initializeThreadingOnce):
        Made the init threading initialize the UString globals.  Before
        these were initilized using {} but that became harder due to the
        addition of this tempalte class.

        * runtime/JSGlobalData.cpp:
        (JSC::JSGlobalData::create):
        * runtime/PropertyNameArray.cpp:
        (JSC::PropertyNameArray::add):
        * runtime/UString.cpp:
        (JSC::initializeStaticBaseString):
        (JSC::initializeUString):
        (JSC::UString::Rep::create):
        (JSC::UString::Rep::createFromUTF8):
        (JSC::createRep):
        (JSC::UString::UString):
        (JSC::concatenate):
        (JSC::UString::operator=):
        (JSC::UString::makeNull):
        (JSC::UString::nullRep):
        * runtime/UString.h:
        (JSC::UString::Rep::identifierTable):
        (JSC::UString::Rep::setIdentifierTable):
        (JSC::UString::Rep::isStatic):
        (JSC::UString::Rep::setStatic):
        (JSC::UString::Rep::):
        (JSC::UString::Rep::null):
        (JSC::UString::Rep::empty):
        (JSC::UString::isNull):
        (JSC::UString::null):
        (JSC::UString::UString):

        * wtf/PtrAndFlags.h: Added.
        (WTF::PtrAndFlags::PtrAndFlags):
        (WTF::PtrAndFlags::isFlagSet):
        (WTF::PtrAndFlags::setFlag):
        (WTF::PtrAndFlags::clearFlag):
        (WTF::PtrAndFlags::get):
        (WTF::PtrAndFlags::set):
        A simple way to layer together a pointer and 2 flags.  It relies on the pointer being 4 byte aligned,
        which should happen for all allocators (due to aligning pointers, int's, etc. on 4 byte boundaries).

2009-01-08  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by -O-l-i-v-e-r- -H-u-n-t- Sam Weinig (sorry, Sam!).

        Encode immediates in the low word of JSValuePtrs, on x86-64.

        On 32-bit platforms a JSValuePtr may represent a 31-bit signed integer.
        On 64-bit platforms, if USE(ALTERNATE_JSIMMEDIATE) is defined, a full
        32-bit integer may be stored in an immediate.
        
        Presently USE(ALTERNATE_JSIMMEDIATE) uses the same encoding as the default
        immediate format - the value is left shifted by one, so a one bit tag can
        be added to indicate the value is an immediate.  However this means that
        values must be commonly be detagged (by right shifting by one) before
        arithmetic operations can be performed on immediates.  This patch modifies
        the formattting so the the high bits of the immediate mark values as being
        integer.

        * assembler/MacroAssembler.h:
        (JSC::MacroAssembler::not32):
        (JSC::MacroAssembler::orPtr):
        (JSC::MacroAssembler::zeroExtend32ToPtr):
        (JSC::MacroAssembler::jaePtr):
        (JSC::MacroAssembler::jbPtr):
        (JSC::MacroAssembler::jnzPtr):
        (JSC::MacroAssembler::jzPtr):
        * assembler/X86Assembler.h:
        (JSC::X86Assembler::):
        (JSC::X86Assembler::notl_r):
        (JSC::X86Assembler::testq_i32r):
        * jit/JIT.cpp:
        (JSC::JIT::privateCompileMainPass):
        (JSC::JIT::privateCompileSlowCases):
        (JSC::JIT::privateCompileCTIMachineTrampolines):
        * jit/JIT.h:
        * jit/JITArithmetic.cpp:
        (JSC::JIT::compileFastArith_op_lshift):
        (JSC::JIT::compileFastArith_op_rshift):
        (JSC::JIT::compileFastArith_op_bitand):
        (JSC::JIT::compileFastArithSlow_op_bitand):
        (JSC::JIT::compileFastArith_op_mod):
        (JSC::JIT::compileFastArithSlow_op_mod):
        (JSC::JIT::compileFastArith_op_add):
        (JSC::JIT::compileFastArith_op_mul):
        (JSC::JIT::compileFastArith_op_post_inc):
        (JSC::JIT::compileFastArith_op_post_dec):
        (JSC::JIT::compileFastArith_op_pre_inc):
        (JSC::JIT::compileFastArith_op_pre_dec):
        (JSC::JIT::putDoubleResultToJSNumberCellOrJSImmediate):
        (JSC::JIT::compileBinaryArithOp):
        * jit/JITCall.cpp:
        (JSC::JIT::compileOpCallSlowCase):
        * jit/JITInlineMethods.h:
        (JSC::JIT::emitJumpIfJSCell):
        (JSC::JIT::emitJumpIfNotJSCell):
        (JSC::JIT::emitJumpIfImmNum):
        (JSC::JIT::emitJumpSlowCaseIfNotImmNum):
        (JSC::JIT::emitJumpSlowCaseIfNotImmNums):
        (JSC::JIT::emitFastArithDeTagImmediate):
        (JSC::JIT::emitFastArithDeTagImmediateJumpIfZero):
        (JSC::JIT::emitFastArithReTagImmediate):
        (JSC::JIT::emitFastArithImmToInt):
        (JSC::JIT::emitFastArithIntToImmNoCheck):
        (JSC::JIT::emitTagAsBoolImmediate):
        * jit/JITPropertyAccess.cpp:
        (JSC::resizePropertyStorage):
        (JSC::JIT::privateCompilePutByIdTransition):
        (JSC::JIT::privateCompilePatchGetArrayLength):
        (JSC::JIT::privateCompileGetByIdSelf):
        (JSC::JIT::privateCompileGetByIdProto):
        (JSC::JIT::privateCompileGetByIdChain):
        (JSC::JIT::privateCompilePutByIdReplace):
        * runtime/JSImmediate.h:
        (JSC::JSImmediate::isNumber):
        (JSC::JSImmediate::isPositiveNumber):
        (JSC::JSImmediate::areBothImmediateNumbers):
        (JSC::JSImmediate::xorImmediateNumbers):
        (JSC::JSImmediate::rightShiftImmediateNumbers):
        (JSC::JSImmediate::canDoFastAdditiveOperations):
        (JSC::JSImmediate::addImmediateNumbers):
        (JSC::JSImmediate::subImmediateNumbers):
        (JSC::JSImmediate::makeInt):
        (JSC::JSImmediate::toBoolean):
        * wtf/Platform.h:

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

        Revert r39720. It broke Interpreted mode.

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

        Reviewed by Oliver Hunt.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=23197
        Delay creating the PCVector until an exception is thrown
        Part of <rdar://problem/6469060>
        Don't store exception information for a CodeBlock until first exception is thrown

        - Change the process for re-parsing/re-generating bytecode for exception information
          to use data from the original CodeBlock (offsets of GlobalResolve instructions) to
          aid in creating an identical instruction stream on re-parse, instead of padding
          interchangeable opcodes, which would result in different JITed code.
        - Fix bug where the wrong ScopeChainNode was used when re-parsing/regenerating from
          within some odd modified scope chains.
        - Lazily create the pcVector by re-JITing the regenerated CodeBlock and stealing the
          the pcVector from it.

        Saves ~2MB on Membuster head.

        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::dump):
        (JSC::CodeBlock::reparseForExceptionInfoIfNecessary):
        (JSC::CodeBlock::hasGlobalResolveInstructionAtBytecodeOffset):
        (JSC::CodeBlock::hasGlobalResolveInfoAtBytecodeOffset):
        * bytecode/CodeBlock.h:
        (JSC::JITCodeRef::JITCodeRef):
        (JSC::GlobalResolveInfo::GlobalResolveInfo):
        (JSC::CodeBlock::getBytecodeIndex):
        (JSC::CodeBlock::addGlobalResolveInstruction):
        (JSC::CodeBlock::addGlobalResolveInfo):
        (JSC::CodeBlock::addFunctionRegisterInfo):
        (JSC::CodeBlock::hasExceptionInfo):
        (JSC::CodeBlock::pcVector):
        (JSC::EvalCodeBlock::EvalCodeBlock):
        (JSC::EvalCodeBlock::baseScopeDepth):
        * bytecode/Opcode.h:
        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::BytecodeGenerator):
        (JSC::BytecodeGenerator::emitResolve):
        (JSC::BytecodeGenerator::emitGetScopedVar):
        * bytecompiler/BytecodeGenerator.h:
        (JSC::BytecodeGenerator::setRegeneratingForExceptionInfo):
        * interpreter/Interpreter.cpp:
        (JSC::bytecodeOffsetForPC):
        (JSC::Interpreter::unwindCallFrame):
        (JSC::Interpreter::privateExecute):
        (JSC::Interpreter::retrieveLastCaller):
        (JSC::Interpreter::cti_op_instanceof):
        (JSC::Interpreter::cti_op_call_NotJSFunction):
        (JSC::Interpreter::cti_op_resolve):
        (JSC::Interpreter::cti_op_construct_NotJSConstruct):
        (JSC::Interpreter::cti_op_resolve_func):
        (JSC::Interpreter::cti_op_resolve_skip):
        (JSC::Interpreter::cti_op_resolve_global):
        (JSC::Interpreter::cti_op_resolve_with_base):
        (JSC::Interpreter::cti_op_throw):
        (JSC::Interpreter::cti_op_in):
        (JSC::Interpreter::cti_vm_throw):
        * jit/JIT.cpp:
        (JSC::JIT::privateCompile):
        * parser/Nodes.cpp:
        (JSC::EvalNode::generateBytecode):
        (JSC::EvalNode::bytecodeForExceptionInfoReparse):
        (JSC::FunctionBodyNode::bytecodeForExceptionInfoReparse):
        * parser/Nodes.h:

2009-01-08  Jian Li  <jianli@chromium.org>

        Reviewed by Alexey Proskuryakov.

        Add Win32 implementation of ThreadSpecific.
        https://bugs.webkit.org/show_bug.cgi?id=22614

        * JavaScriptCore.vcproj/WTF/WTF.vcproj:
        * wtf/ThreadSpecific.h:
        (WTF::ThreadSpecific::ThreadSpecific):
        (WTF::ThreadSpecific::~ThreadSpecific):
        (WTF::ThreadSpecific::get):
        (WTF::ThreadSpecific::set):
        (WTF::ThreadSpecific::destroy):
        * wtf/ThreadSpecificWin.cpp: Added.
        (WTF::ThreadSpecificThreadExit):
        * wtf/ThreadingWin.cpp:
        (WTF::wtfThreadEntryPoint):

2009-01-08  Justin McPherson <justin.mcpherson@nokia.com>

        Reviewed by Simon Hausmann.

        Fix compilation with Qt on NetBSD.

        * runtime/Collector.cpp:
        (JSC::currentThreadStackBase): Use PLATFORM(NETBSD) to enter the
        code path to retrieve the stack base using pthread_attr_get_np.
        The PTHREAD_NP_H define is not used because the header file does
        not exist on NetBSD, but the function is declared nevertheless.
        * wtf/Platform.h: Introduce WTF_PLATFORM_NETBSD.

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

        Reviewed by Geoffrey Garen.

        <rdar://problem/6469060> Don't store exception information for a CodeBlock until first exception is thrown

        Don't initially store exception information (lineNumber/expressionRange/getByIdExcecptionInfo)
        in CodeBlocks blocks.  Instead, re-parse for the data on demand and cache it then.

        One important change that was needed to make this work was to pad op_get_global_var with nops to
        be the same length as op_resolve_global, since one could be replaced for the other on re-parsing,
        and we want to keep the offsets bytecode offsets the same.

        1.3MB improvement on Membuster head.

        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::dump): Update op_get_global_var to account for the padding.
        (JSC::CodeBlock::dumpStatistics): Add more statistic dumping.
        (JSC::CodeBlock::CodeBlock): Initialize m_exceptionInfo.
        (JSC::CodeBlock::reparseForExceptionInfoIfNecessary): Re-parses the CodeBlocks
        associated SourceCode and steals the ExceptionInfo from it.
        (JSC::CodeBlock::lineNumberForBytecodeOffset): Creates the exception info on demand.
        (JSC::CodeBlock::expressionRangeForBytecodeOffset): Ditto.
        (JSC::CodeBlock::getByIdExceptionInfoForBytecodeOffset): Ditto.
        * bytecode/CodeBlock.h:
        (JSC::CodeBlock::numberOfExceptionHandlers): Updated to account for m_exceptionInfo indirection.
        (JSC::CodeBlock::addExceptionHandler): Ditto.
        (JSC::CodeBlock::exceptionHandler): Ditto.
        (JSC::CodeBlock::clearExceptionInfo): Ditto.
        (JSC::CodeBlock::addExpressionInfo): Ditto.
        (JSC::CodeBlock::addGetByIdExceptionInfo): Ditto.
        (JSC::CodeBlock::numberOfLineInfos): Ditto.
        (JSC::CodeBlock::addLineInfo): Ditto.
        (JSC::CodeBlock::lastLineInfo): Ditto.

        * bytecode/Opcode.h: Change length of op_get_global_var to match op_resolve_global.

        * bytecode/SamplingTool.cpp:
        (JSC::SamplingTool::dump): Add comment indicating why it is okay not to pass a CallFrame.

        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::generate): Clear the exception info after generation for Function and Eval
        Code when not in regenerate for exception info mode.
        (JSC::BytecodeGenerator::BytecodeGenerator): Initialize m_regeneratingForExceptionInfo to false.
        (JSC::BytecodeGenerator::emitGetScopedVar): Pad op_get_global_var with 2 nops.
        * bytecompiler/BytecodeGenerator.h:
        (JSC::BytecodeGenerator::setRegeneratingForExcpeptionInfo): Added.

        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::throwException): Pass the CallFrame to exception info accessors.
        (JSC::Interpreter::privateExecute): Ditto.
        (JSC::Interpreter::retrieveLastCaller): Ditto.
        (JSC::Interpreter::cti_op_new_error): Ditto.

        * jit/JIT.cpp:
        (JSC::JIT::privateCompileMainPass): Pass the current bytecode offset instead of hard coding the
        line number, the stub will do the accessing if it gets called.

        * parser/Nodes.cpp:
        (JSC::ProgramNode::emitBytecode): Moved.
        (JSC::ProgramNode::generateBytecode): Moved.
        (JSC::EvalNode::create): Moved.
        (JSC::EvalNode::bytecodeForExceptionInfoReparse): Added.
        (JSC::FunctionBodyNode::generateBytecode): Rename reparse to reparseInPlace.
        (JSC::FunctionBodyNode::bytecodeForExceptionInfoReparse): Addded.

        * parser/Nodes.h:
        (JSC::ScopeNode::features): Added getter.
        * parser/Parser.cpp:
        (JSC::Parser::reparseInPlace): Renamed from reparse.
        * parser/Parser.h:
        (JSC::Parser::reparse): Added. Re-parses the passed in Node into
        a new Node.
        * runtime/ExceptionHelpers.cpp:
        (JSC::createUndefinedVariableError): Pass along CallFrame.
        (JSC::createInvalidParamError): Ditto.
        (JSC::createNotAConstructorError): Ditto.
        (JSC::createNotAFunctionError): Ditto.
        (JSC::createNotAnObjectError): Ditto.

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

        Reviewed by Maciej Stachowiak.

        Replace accidentally removed references in BytecodeGenerator, deleting these
        will be hindering the sharing of constant numbers and strings.

        The code to add a new constant (either number or string) to their respective
        map works by attempting to add a null entry, then checking the result of the
        add for null.  The first time, this should return the null (or noValue).
        The code checks for null (to see if this is the initial add), and then allocates
        a new number / string object.  This code relies on the result returned from
        the add to the map being stored as a reference, such that the allocated object
        will be stored in the map, and will be resused if the same constant is encountered
        again.  By failing to use a reference we will be leaking GC object for each
        additional entry added to the map.  As GC objects they should be clollected,
        be we should no be allocatin them in the first place.

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

        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::emitLoad):

2009-01-06  Oliver Hunt  <oliver@apple.com>

        Reviewed by Gavin Barraclough.

        <rdar://problem/6040850> JavaScript register file should use VirtualAlloc on Windows

        Fairly simple, just reserve 4Mb of address space for the
        register file, and then commit one section at a time.  We
        don't release committed memory as we drop back, but then
        mac doesn't either so this probably not too much of a 
        problem.

        * interpreter/RegisterFile.cpp:
        (JSC::RegisterFile::~RegisterFile):
        * interpreter/RegisterFile.h:
        (JSC::RegisterFile::RegisterFile):
        (JSC::RegisterFile::grow):

2009-01-06  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=23142
        ThreadGlobalData leaks seen on buildbot

        * wtf/ThreadSpecific.h: (WTF::ThreadSpecific::destroy): Temporarily reset the thread
        specific value to make getter work on Mac OS X.

        * wtf/Platform.h: Touch this file again to make sure all Windows builds use the most recent
        version of ThreadSpecific.h.

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

        Reviewed by Oliver Hunt.

        Replace all uses of JSValue* with a new smart pointer type, JSValuePtr.
        
        A JavaScript value may be a heap object or boxed primitive, represented by a
        pointer, or may be an unboxed immediate value, such as an integer.  Since a
        value may dynamically need to contain either a pointer value or an immediate,
        we encode immediates as pointer values (since all valid JSCell pointers are
        allocated at alligned addesses, unaligned addresses are available to encode
        immediates).  As such all JavaScript values are represented using a JSValue*.

        This implementation is encumbered by a number of constraints.  It ties the
        JSValue representation to the size of pointer on the platform, which, for
        example, means that we currently can represent different ranges of integers
        as immediates on x86 and x86-64.  It also prevents us from overloading the
        to-boolean conversion used to test for noValue() - effectively forcing us
        to represent noValue() as 0.  This would potentially be problematic were we
        to wish to encode integer values differently (e.g. were we to use the v8
        encoding, where pointers are tagged with 1 and integers with 0, then the
        immediate integer 0 would conflict with noValue()).

        This patch replaces all usage of JSValue* with a new class, JSValuePtr,
        which encapsulates the pointer.  JSValuePtr maintains the same interface as
        JSValue*, overloading operator-> and operator bool such that previous
        operations in the code on variables of type JSValue* are still supported.

        In order to provide a ProtectPtr<> type with support for the new value
        representation (without using the internal JSValue type directly), a new
        ProtectJSValuePtr type has been added, equivalent to the previous type
        ProtectPtr<JSValue>.

        This patch is likely the first in a sequence of three changes.  With the
        value now encapsulated it will likely make sense to migrate the functionality
        from JSValue into JSValuePtr, such that the internal pointer representation
        need not be exposed.  Through migrating the functionality to the wrapper
        class the existing JSValue should be rendered redundant, and the class is
        likely to be removed (the JSValuePtr now wrapping a pointer to a JSCell).
        At this stage it will likely make sense to rename JSValuePtr to JSValue.

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

        * API/APICast.h:
        (toJS):
        (toRef):
        * API/JSBase.cpp:
        (JSEvaluateScript):
        * API/JSCallbackConstructor.h:
        (JSC::JSCallbackConstructor::createStructure):
        * API/JSCallbackFunction.cpp:
        (JSC::JSCallbackFunction::call):
        * API/JSCallbackFunction.h:
        (JSC::JSCallbackFunction::createStructure):
        * API/JSCallbackObject.h:
        (JSC::JSCallbackObject::createStructure):
        * API/JSCallbackObjectFunctions.h:
        (JSC::::asCallbackObject):
        (JSC::::put):
        (JSC::::hasInstance):
        (JSC::::call):
        (JSC::::staticValueGetter):
        (JSC::::staticFunctionGetter):
        (JSC::::callbackGetter):
        * API/JSContextRef.cpp:
        * API/JSObjectRef.cpp:
        (JSObjectMakeConstructor):
        (JSObjectSetPrototype):
        (JSObjectGetProperty):
        (JSObjectSetProperty):
        (JSObjectGetPropertyAtIndex):
        (JSObjectSetPropertyAtIndex):
        * API/JSValueRef.cpp:
        (JSValueGetType):
        (JSValueIsUndefined):
        (JSValueIsNull):
        (JSValueIsBoolean):
        (JSValueIsNumber):
        (JSValueIsString):
        (JSValueIsObject):
        (JSValueIsObjectOfClass):
        (JSValueIsEqual):
        (JSValueIsStrictEqual):
        (JSValueIsInstanceOfConstructor):
        (JSValueToBoolean):
        (JSValueToNumber):
        (JSValueToStringCopy):
        (JSValueToObject):
        (JSValueProtect):
        (JSValueUnprotect):
        * JavaScriptCore.exp:
        * bytecode/CodeBlock.cpp:
        (JSC::valueToSourceString):
        (JSC::constantName):
        (JSC::CodeBlock::dump):
        * bytecode/CodeBlock.h:
        (JSC::CodeBlock::getConstant):
        (JSC::CodeBlock::addUnexpectedConstant):
        (JSC::CodeBlock::unexpectedConstant):
        * bytecode/EvalCodeCache.h:
        (JSC::EvalCodeCache::get):
        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::BytecodeGenerator):
        (JSC::BytecodeGenerator::addConstant):
        (JSC::BytecodeGenerator::addUnexpectedConstant):
        (JSC::BytecodeGenerator::emitLoad):
        (JSC::BytecodeGenerator::emitLoadJSV):
        (JSC::BytecodeGenerator::emitGetScopedVar):
        (JSC::BytecodeGenerator::emitPutScopedVar):
        (JSC::BytecodeGenerator::emitNewError):
        (JSC::keyForImmediateSwitch):
        * bytecompiler/BytecodeGenerator.h:
        (JSC::BytecodeGenerator::JSValueHashTraits::constructDeletedValue):
        (JSC::BytecodeGenerator::JSValueHashTraits::isDeletedValue):
        * debugger/DebuggerCallFrame.cpp:
        (JSC::DebuggerCallFrame::evaluate):
        * debugger/DebuggerCallFrame.h:
        (JSC::DebuggerCallFrame::DebuggerCallFrame):
        (JSC::DebuggerCallFrame::exception):
        * interpreter/CallFrame.cpp:
        (JSC::CallFrame::thisValue):
        * interpreter/CallFrame.h:
        (JSC::ExecState::setException):
        (JSC::ExecState::exception):
        (JSC::ExecState::exceptionSlot):
        (JSC::ExecState::hadException):
        * interpreter/Interpreter.cpp:
        (JSC::fastIsNumber):
        (JSC::fastToInt32):
        (JSC::fastToUInt32):
        (JSC::jsLess):
        (JSC::jsLessEq):
        (JSC::jsAddSlowCase):
        (JSC::jsAdd):
        (JSC::jsTypeStringForValue):
        (JSC::jsIsObjectType):
        (JSC::jsIsFunctionType):
        (JSC::Interpreter::resolve):
        (JSC::Interpreter::resolveSkip):
        (JSC::Interpreter::resolveGlobal):
        (JSC::inlineResolveBase):
        (JSC::Interpreter::resolveBase):
        (JSC::Interpreter::resolveBaseAndProperty):
        (JSC::Interpreter::resolveBaseAndFunc):
        (JSC::isNotObject):
        (JSC::Interpreter::callEval):
        (JSC::Interpreter::unwindCallFrame):
        (JSC::Interpreter::throwException):
        (JSC::Interpreter::execute):
        (JSC::Interpreter::checkTimeout):
        (JSC::Interpreter::createExceptionScope):
        (JSC::cachePrototypeChain):
        (JSC::Interpreter::tryCachePutByID):
        (JSC::countPrototypeChainEntriesAndCheckForProxies):
        (JSC::Interpreter::tryCacheGetByID):
        (JSC::Interpreter::privateExecute):
        (JSC::Interpreter::retrieveArguments):
        (JSC::Interpreter::retrieveCaller):
        (JSC::Interpreter::retrieveLastCaller):
        (JSC::Interpreter::tryCTICachePutByID):
        (JSC::Interpreter::tryCTICacheGetByID):
        (JSC::returnToThrowTrampoline):
        (JSC::Interpreter::cti_op_convert_this):
        (JSC::Interpreter::cti_op_add):
        (JSC::Interpreter::cti_op_pre_inc):
        (JSC::Interpreter::cti_op_loop_if_less):
        (JSC::Interpreter::cti_op_loop_if_lesseq):
        (JSC::Interpreter::cti_op_get_by_id_generic):
        (JSC::Interpreter::cti_op_get_by_id):
        (JSC::Interpreter::cti_op_get_by_id_second):
        (JSC::Interpreter::cti_op_get_by_id_self_fail):
        (JSC::Interpreter::cti_op_get_by_id_proto_list):
        (JSC::Interpreter::cti_op_get_by_id_proto_list_full):
        (JSC::Interpreter::cti_op_get_by_id_proto_fail):
        (JSC::Interpreter::cti_op_get_by_id_array_fail):
        (JSC::Interpreter::cti_op_get_by_id_string_fail):
        (JSC::Interpreter::cti_op_instanceof):
        (JSC::Interpreter::cti_op_del_by_id):
        (JSC::Interpreter::cti_op_mul):
        (JSC::Interpreter::cti_op_call_NotJSFunction):
        (JSC::Interpreter::cti_op_resolve):
        (JSC::Interpreter::cti_op_construct_NotJSConstruct):
        (JSC::Interpreter::cti_op_get_by_val):
        (JSC::Interpreter::cti_op_resolve_func):
        (JSC::Interpreter::cti_op_sub):
        (JSC::Interpreter::cti_op_put_by_val):
        (JSC::Interpreter::cti_op_put_by_val_array):
        (JSC::Interpreter::cti_op_lesseq):
        (JSC::Interpreter::cti_op_loop_if_true):
        (JSC::Interpreter::cti_op_negate):
        (JSC::Interpreter::cti_op_resolve_base):
        (JSC::Interpreter::cti_op_resolve_skip):
        (JSC::Interpreter::cti_op_resolve_global):
        (JSC::Interpreter::cti_op_div):
        (JSC::Interpreter::cti_op_pre_dec):
        (JSC::Interpreter::cti_op_jless):
        (JSC::Interpreter::cti_op_not):
        (JSC::Interpreter::cti_op_jtrue):
        (JSC::Interpreter::cti_op_post_inc):
        (JSC::Interpreter::cti_op_eq):
        (JSC::Interpreter::cti_op_lshift):
        (JSC::Interpreter::cti_op_bitand):
        (JSC::Interpreter::cti_op_rshift):
        (JSC::Interpreter::cti_op_bitnot):
        (JSC::Interpreter::cti_op_resolve_with_base):
        (JSC::Interpreter::cti_op_mod):
        (JSC::Interpreter::cti_op_less):
        (JSC::Interpreter::cti_op_neq):
        (JSC::Interpreter::cti_op_post_dec):
        (JSC::Interpreter::cti_op_urshift):
        (JSC::Interpreter::cti_op_bitxor):
        (JSC::Interpreter::cti_op_bitor):
        (JSC::Interpreter::cti_op_call_eval):
        (JSC::Interpreter::cti_op_throw):
        (JSC::Interpreter::cti_op_next_pname):
        (JSC::Interpreter::cti_op_typeof):
        (JSC::Interpreter::cti_op_is_undefined):
        (JSC::Interpreter::cti_op_is_boolean):
        (JSC::Interpreter::cti_op_is_number):
        (JSC::Interpreter::cti_op_is_string):
        (JSC::Interpreter::cti_op_is_object):
        (JSC::Interpreter::cti_op_is_function):
        (JSC::Interpreter::cti_op_stricteq):
        (JSC::Interpreter::cti_op_nstricteq):
        (JSC::Interpreter::cti_op_to_jsnumber):
        (JSC::Interpreter::cti_op_in):
        (JSC::Interpreter::cti_op_switch_imm):
        (JSC::Interpreter::cti_op_switch_char):
        (JSC::Interpreter::cti_op_switch_string):
        (JSC::Interpreter::cti_op_del_by_val):
        (JSC::Interpreter::cti_op_new_error):
        (JSC::Interpreter::cti_vm_throw):
        * interpreter/Interpreter.h:
        (JSC::Interpreter::isJSArray):
        (JSC::Interpreter::isJSString):
        * interpreter/Register.h:
        (JSC::Register::):
        (JSC::Register::Register):
        (JSC::Register::jsValue):
        (JSC::Register::getJSValue):
        * jit/JIT.cpp:
        (JSC::):
        (JSC::JIT::compileOpStrictEq):
        (JSC::JIT::privateCompileMainPass):
        (JSC::JIT::privateCompileSlowCases):
        * jit/JIT.h:
        (JSC::):
        (JSC::JIT::execute):
        * jit/JITArithmetic.cpp:
        (JSC::JIT::compileFastArith_op_rshift):
        (JSC::JIT::compileFastArithSlow_op_rshift):
        * jit/JITCall.cpp:
        (JSC::JIT::unlinkCall):
        (JSC::JIT::compileOpCallInitializeCallFrame):
        (JSC::JIT::compileOpCall):
        * jit/JITInlineMethods.h:
        (JSC::JIT::emitGetVirtualRegister):
        (JSC::JIT::getConstantOperand):
        (JSC::JIT::isOperandConstant31BitImmediateInt):
        (JSC::JIT::emitPutJITStubArgFromVirtualRegister):
        (JSC::JIT::emitInitRegister):
        * jit/JITPropertyAccess.cpp:
        (JSC::resizePropertyStorage):
        (JSC::JIT::privateCompilePutByIdTransition):
        (JSC::JIT::patchGetByIdSelf):
        (JSC::JIT::patchPutByIdReplace):
        (JSC::JIT::privateCompileGetByIdSelf):
        (JSC::JIT::privateCompileGetByIdProto):
        (JSC::JIT::privateCompileGetByIdSelfList):
        (JSC::JIT::privateCompileGetByIdProtoList):
        (JSC::JIT::privateCompileGetByIdChainList):
        (JSC::JIT::privateCompileGetByIdChain):
        (JSC::JIT::privateCompilePutByIdReplace):
        * jsc.cpp:
        (functionPrint):
        (functionDebug):
        (functionGC):
        (functionVersion):
        (functionRun):
        (functionLoad):
        (functionReadline):
        (functionQuit):
        * parser/Nodes.cpp:
        (JSC::NullNode::emitBytecode):
        (JSC::ArrayNode::emitBytecode):
        (JSC::FunctionCallValueNode::emitBytecode):
        (JSC::FunctionCallResolveNode::emitBytecode):
        (JSC::VoidNode::emitBytecode):
        (JSC::ConstDeclNode::emitCodeSingle):
        (JSC::ReturnNode::emitBytecode):
        (JSC::processClauseList):
        (JSC::EvalNode::emitBytecode):
        (JSC::FunctionBodyNode::emitBytecode):
        (JSC::ProgramNode::emitBytecode):
        * profiler/ProfileGenerator.cpp:
        (JSC::ProfileGenerator::addParentForConsoleStart):
        * profiler/Profiler.cpp:
        (JSC::Profiler::willExecute):
        (JSC::Profiler::didExecute):
        (JSC::Profiler::createCallIdentifier):
        * profiler/Profiler.h:
        * runtime/ArgList.cpp:
        (JSC::ArgList::slowAppend):
        * runtime/ArgList.h:
        (JSC::ArgList::at):
        (JSC::ArgList::append):
        * runtime/Arguments.cpp:
        (JSC::Arguments::put):
        * runtime/Arguments.h:
        (JSC::Arguments::createStructure):
        (JSC::asArguments):
        * runtime/ArrayConstructor.cpp:
        (JSC::callArrayConstructor):
        * runtime/ArrayPrototype.cpp:
        (JSC::getProperty):
        (JSC::putProperty):
        (JSC::arrayProtoFuncToString):
        (JSC::arrayProtoFuncToLocaleString):
        (JSC::arrayProtoFuncJoin):
        (JSC::arrayProtoFuncConcat):
        (JSC::arrayProtoFuncPop):
        (JSC::arrayProtoFuncPush):
        (JSC::arrayProtoFuncReverse):
        (JSC::arrayProtoFuncShift):
        (JSC::arrayProtoFuncSlice):
        (JSC::arrayProtoFuncSort):
        (JSC::arrayProtoFuncSplice):
        (JSC::arrayProtoFuncUnShift):
        (JSC::arrayProtoFuncFilter):
        (JSC::arrayProtoFuncMap):
        (JSC::arrayProtoFuncEvery):
        (JSC::arrayProtoFuncForEach):
        (JSC::arrayProtoFuncSome):
        (JSC::arrayProtoFuncIndexOf):
        (JSC::arrayProtoFuncLastIndexOf):
        * runtime/BooleanConstructor.cpp:
        (JSC::callBooleanConstructor):
        (JSC::constructBooleanFromImmediateBoolean):
        * runtime/BooleanConstructor.h:
        * runtime/BooleanObject.h:
        (JSC::asBooleanObject):
        * runtime/BooleanPrototype.cpp:
        (JSC::booleanProtoFuncToString):
        (JSC::booleanProtoFuncValueOf):
        * runtime/CallData.cpp:
        (JSC::call):
        * runtime/CallData.h:
        * runtime/Collector.cpp:
        (JSC::Heap::protect):
        (JSC::Heap::unprotect):
        (JSC::Heap::heap):
        (JSC::Heap::collect):
        * runtime/Collector.h:
        * runtime/Completion.cpp:
        (JSC::evaluate):
        * runtime/Completion.h:
        (JSC::Completion::Completion):
        (JSC::Completion::value):
        (JSC::Completion::setValue):
        (JSC::Completion::isValueCompletion):
        * runtime/ConstructData.cpp:
        (JSC::construct):
        * runtime/ConstructData.h:
        * runtime/DateConstructor.cpp:
        (JSC::constructDate):
        (JSC::callDate):
        (JSC::dateParse):
        (JSC::dateNow):
        (JSC::dateUTC):
        * runtime/DateInstance.h:
        (JSC::asDateInstance):
        * runtime/DatePrototype.cpp:
        (JSC::dateProtoFuncToString):
        (JSC::dateProtoFuncToUTCString):
        (JSC::dateProtoFuncToDateString):
        (JSC::dateProtoFuncToTimeString):
        (JSC::dateProtoFuncToLocaleString):
        (JSC::dateProtoFuncToLocaleDateString):
        (JSC::dateProtoFuncToLocaleTimeString):
        (JSC::dateProtoFuncValueOf):
        (JSC::dateProtoFuncGetTime):
        (JSC::dateProtoFuncGetFullYear):
        (JSC::dateProtoFuncGetUTCFullYear):
        (JSC::dateProtoFuncToGMTString):
        (JSC::dateProtoFuncGetMonth):
        (JSC::dateProtoFuncGetUTCMonth):
        (JSC::dateProtoFuncGetDate):
        (JSC::dateProtoFuncGetUTCDate):
        (JSC::dateProtoFuncGetDay):
        (JSC::dateProtoFuncGetUTCDay):
        (JSC::dateProtoFuncGetHours):
        (JSC::dateProtoFuncGetUTCHours):
        (JSC::dateProtoFuncGetMinutes):
        (JSC::dateProtoFuncGetUTCMinutes):
        (JSC::dateProtoFuncGetSeconds):
        (JSC::dateProtoFuncGetUTCSeconds):
        (JSC::dateProtoFuncGetMilliSeconds):
        (JSC::dateProtoFuncGetUTCMilliseconds):
        (JSC::dateProtoFuncGetTimezoneOffset):
        (JSC::dateProtoFuncSetTime):
        (JSC::setNewValueFromTimeArgs):
        (JSC::setNewValueFromDateArgs):
        (JSC::dateProtoFuncSetMilliSeconds):
        (JSC::dateProtoFuncSetUTCMilliseconds):
        (JSC::dateProtoFuncSetSeconds):
        (JSC::dateProtoFuncSetUTCSeconds):
        (JSC::dateProtoFuncSetMinutes):
        (JSC::dateProtoFuncSetUTCMinutes):
        (JSC::dateProtoFuncSetHours):
        (JSC::dateProtoFuncSetUTCHours):
        (JSC::dateProtoFuncSetDate):
        (JSC::dateProtoFuncSetUTCDate):
        (JSC::dateProtoFuncSetMonth):
        (JSC::dateProtoFuncSetUTCMonth):
        (JSC::dateProtoFuncSetFullYear):
        (JSC::dateProtoFuncSetUTCFullYear):
        (JSC::dateProtoFuncSetYear):
        (JSC::dateProtoFuncGetYear):
        * runtime/DatePrototype.h:
        (JSC::DatePrototype::createStructure):
        * runtime/ErrorConstructor.cpp:
        (JSC::callErrorConstructor):
        * runtime/ErrorPrototype.cpp:
        (JSC::errorProtoFuncToString):
        * runtime/ExceptionHelpers.cpp:
        (JSC::createInterruptedExecutionException):
        (JSC::createError):
        (JSC::createStackOverflowError):
        (JSC::createUndefinedVariableError):
        (JSC::createErrorMessage):
        (JSC::createInvalidParamError):
        (JSC::createNotAConstructorError):
        (JSC::createNotAFunctionError):
        * runtime/ExceptionHelpers.h:
        * runtime/FunctionConstructor.cpp:
        (JSC::callFunctionConstructor):
        * runtime/FunctionPrototype.cpp:
        (JSC::callFunctionPrototype):
        (JSC::functionProtoFuncToString):
        (JSC::functionProtoFuncApply):
        (JSC::functionProtoFuncCall):
        * runtime/FunctionPrototype.h:
        (JSC::FunctionPrototype::createStructure):
        * runtime/GetterSetter.cpp:
        (JSC::GetterSetter::toPrimitive):
        (JSC::GetterSetter::getPrimitiveNumber):
        * runtime/GetterSetter.h:
        (JSC::asGetterSetter):
        * runtime/InitializeThreading.cpp:
        * runtime/InternalFunction.h:
        (JSC::InternalFunction::createStructure):
        (JSC::asInternalFunction):
        * runtime/JSActivation.cpp:
        (JSC::JSActivation::getOwnPropertySlot):
        (JSC::JSActivation::put):
        (JSC::JSActivation::putWithAttributes):
        (JSC::JSActivation::argumentsGetter):
        * runtime/JSActivation.h:
        (JSC::JSActivation::createStructure):
        (JSC::asActivation):
        * runtime/JSArray.cpp:
        (JSC::storageSize):
        (JSC::JSArray::JSArray):
        (JSC::JSArray::getOwnPropertySlot):
        (JSC::JSArray::put):
        (JSC::JSArray::putSlowCase):
        (JSC::JSArray::deleteProperty):
        (JSC::JSArray::getPropertyNames):
        (JSC::JSArray::setLength):
        (JSC::JSArray::pop):
        (JSC::JSArray::push):
        (JSC::JSArray::mark):
        (JSC::JSArray::sort):
        (JSC::JSArray::compactForSorting):
        (JSC::JSArray::checkConsistency):
        (JSC::constructArray):
        * runtime/JSArray.h:
        (JSC::JSArray::getIndex):
        (JSC::JSArray::setIndex):
        (JSC::JSArray::createStructure):
        (JSC::asArray):
        * runtime/JSCell.cpp:
        (JSC::JSCell::put):
        (JSC::JSCell::getJSNumber):
        * runtime/JSCell.h:
        (JSC::asCell):
        (JSC::JSValue::asCell):
        (JSC::JSValue::toPrimitive):
        (JSC::JSValue::getPrimitiveNumber):
        (JSC::JSValue::getJSNumber):
        * runtime/JSFunction.cpp:
        (JSC::JSFunction::call):
        (JSC::JSFunction::argumentsGetter):
        (JSC::JSFunction::callerGetter):
        (JSC::JSFunction::lengthGetter):
        (JSC::JSFunction::getOwnPropertySlot):
        (JSC::JSFunction::put):
        (JSC::JSFunction::construct):
        * runtime/JSFunction.h:
        (JSC::JSFunction::createStructure):
        (JSC::asFunction):
        * runtime/JSGlobalData.h:
        * runtime/JSGlobalObject.cpp:
        (JSC::markIfNeeded):
        (JSC::JSGlobalObject::put):
        (JSC::JSGlobalObject::putWithAttributes):
        (JSC::JSGlobalObject::reset):
        (JSC::JSGlobalObject::resetPrototype):
        * runtime/JSGlobalObject.h:
        (JSC::JSGlobalObject::createStructure):
        (JSC::JSGlobalObject::GlobalPropertyInfo::GlobalPropertyInfo):
        (JSC::asGlobalObject):
        (JSC::Structure::prototypeForLookup):
        * runtime/JSGlobalObjectFunctions.cpp:
        (JSC::encode):
        (JSC::decode):
        (JSC::globalFuncEval):
        (JSC::globalFuncParseInt):
        (JSC::globalFuncParseFloat):
        (JSC::globalFuncIsNaN):
        (JSC::globalFuncIsFinite):
        (JSC::globalFuncDecodeURI):
        (JSC::globalFuncDecodeURIComponent):
        (JSC::globalFuncEncodeURI):
        (JSC::globalFuncEncodeURIComponent):
        (JSC::globalFuncEscape):
        (JSC::globalFuncUnescape):
        (JSC::globalFuncJSCPrint):
        * runtime/JSGlobalObjectFunctions.h:
        * runtime/JSImmediate.cpp:
        (JSC::JSImmediate::toThisObject):
        (JSC::JSImmediate::toObject):
        (JSC::JSImmediate::prototype):
        (JSC::JSImmediate::toString):
        * runtime/JSImmediate.h:
        (JSC::JSImmediate::isImmediate):
        (JSC::JSImmediate::isNumber):
        (JSC::JSImmediate::isPositiveNumber):
        (JSC::JSImmediate::isBoolean):
        (JSC::JSImmediate::isUndefinedOrNull):
        (JSC::JSImmediate::isNegative):
        (JSC::JSImmediate::isEitherImmediate):
        (JSC::JSImmediate::isAnyImmediate):
        (JSC::JSImmediate::areBothImmediate):
        (JSC::JSImmediate::areBothImmediateNumbers):
        (JSC::JSImmediate::andImmediateNumbers):
        (JSC::JSImmediate::xorImmediateNumbers):
        (JSC::JSImmediate::orImmediateNumbers):
        (JSC::JSImmediate::rightShiftImmediateNumbers):
        (JSC::JSImmediate::canDoFastAdditiveOperations):
        (JSC::JSImmediate::addImmediateNumbers):
        (JSC::JSImmediate::subImmediateNumbers):
        (JSC::JSImmediate::incImmediateNumber):
        (JSC::JSImmediate::decImmediateNumber):
        (JSC::JSImmediate::makeValue):
        (JSC::JSImmediate::makeInt):
        (JSC::JSImmediate::makeBool):
        (JSC::JSImmediate::makeUndefined):
        (JSC::JSImmediate::makeNull):
        (JSC::JSImmediate::intValue):
        (JSC::JSImmediate::uintValue):
        (JSC::JSImmediate::boolValue):
        (JSC::JSImmediate::rawValue):
        (JSC::JSImmediate::trueImmediate):
        (JSC::JSImmediate::falseImmediate):
        (JSC::JSImmediate::undefinedImmediate):
        (JSC::JSImmediate::nullImmediate):
        (JSC::JSImmediate::zeroImmediate):
        (JSC::JSImmediate::oneImmediate):
        (JSC::JSImmediate::impossibleValue):
        (JSC::JSImmediate::toBoolean):
        (JSC::JSImmediate::getTruncatedUInt32):
        (JSC::JSImmediate::from):
        (JSC::JSImmediate::getTruncatedInt32):
        (JSC::JSImmediate::toDouble):
        (JSC::JSImmediate::getUInt32):
        (JSC::jsNull):
        (JSC::jsBoolean):
        (JSC::jsUndefined):
        (JSC::JSValue::isUndefined):
        (JSC::JSValue::isNull):
        (JSC::JSValue::isUndefinedOrNull):
        (JSC::JSValue::isBoolean):
        (JSC::JSValue::getBoolean):
        (JSC::JSValue::toInt32):
        (JSC::JSValue::toUInt32):
        (JSC::toInt32):
        (JSC::toUInt32):
        * runtime/JSNotAnObject.cpp:
        (JSC::JSNotAnObject::toPrimitive):
        (JSC::JSNotAnObject::getPrimitiveNumber):
        (JSC::JSNotAnObject::put):
        * runtime/JSNotAnObject.h:
        (JSC::JSNotAnObject::createStructure):
        * runtime/JSNumberCell.cpp:
        (JSC::JSNumberCell::toPrimitive):
        (JSC::JSNumberCell::getPrimitiveNumber):
        (JSC::JSNumberCell::getJSNumber):
        (JSC::jsNumberCell):
        (JSC::jsNaN):
        * runtime/JSNumberCell.h:
        (JSC::JSNumberCell::createStructure):
        (JSC::asNumberCell):
        (JSC::jsNumber):
        (JSC::JSValue::toJSNumber):
        * runtime/JSObject.cpp:
        (JSC::JSObject::mark):
        (JSC::JSObject::put):
        (JSC::JSObject::putWithAttributes):
        (JSC::callDefaultValueFunction):
        (JSC::JSObject::getPrimitiveNumber):
        (JSC::JSObject::defaultValue):
        (JSC::JSObject::defineGetter):
        (JSC::JSObject::defineSetter):
        (JSC::JSObject::lookupGetter):
        (JSC::JSObject::lookupSetter):
        (JSC::JSObject::hasInstance):
        (JSC::JSObject::toNumber):
        (JSC::JSObject::toString):
        (JSC::JSObject::fillGetterPropertySlot):
        * runtime/JSObject.h:
        (JSC::JSObject::getDirect):
        (JSC::JSObject::getDirectLocation):
        (JSC::JSObject::offsetForLocation):
        (JSC::JSObject::locationForOffset):
        (JSC::JSObject::getDirectOffset):
        (JSC::JSObject::putDirectOffset):
        (JSC::JSObject::createStructure):
        (JSC::asObject):
        (JSC::JSObject::prototype):
        (JSC::JSObject::setPrototype):
        (JSC::JSObject::inlineGetOwnPropertySlot):
        (JSC::JSObject::getOwnPropertySlotForWrite):
        (JSC::JSObject::getPropertySlot):
        (JSC::JSObject::get):
        (JSC::JSObject::putDirect):
        (JSC::JSObject::putDirectWithoutTransition):
        (JSC::JSObject::toPrimitive):
        (JSC::JSValue::get):
        (JSC::JSValue::put):
        (JSC::JSObject::allocatePropertyStorageInline):
        * runtime/JSPropertyNameIterator.cpp:
        (JSC::JSPropertyNameIterator::toPrimitive):
        (JSC::JSPropertyNameIterator::getPrimitiveNumber):
        * runtime/JSPropertyNameIterator.h:
        (JSC::JSPropertyNameIterator::create):
        (JSC::JSPropertyNameIterator::next):
        * runtime/JSStaticScopeObject.cpp:
        (JSC::JSStaticScopeObject::put):
        (JSC::JSStaticScopeObject::putWithAttributes):
        * runtime/JSStaticScopeObject.h:
        (JSC::JSStaticScopeObject::JSStaticScopeObject):
        (JSC::JSStaticScopeObject::createStructure):
        * runtime/JSString.cpp:
        (JSC::JSString::toPrimitive):
        (JSC::JSString::getPrimitiveNumber):
        (JSC::JSString::getOwnPropertySlot):
        * runtime/JSString.h:
        (JSC::JSString::createStructure):
        (JSC::asString):
        * runtime/JSValue.h:
        (JSC::JSValuePtr::makeImmediate):
        (JSC::JSValuePtr::immediateValue):
        (JSC::JSValuePtr::JSValuePtr):
        (JSC::JSValuePtr::operator->):
        (JSC::JSValuePtr::hasValue):
        (JSC::JSValuePtr::operator==):
        (JSC::JSValuePtr::operator!=):
        (JSC::JSValuePtr::encode):
        (JSC::JSValuePtr::decode):
        (JSC::JSValue::asValue):
        (JSC::noValue):
        (JSC::operator==):
        (JSC::operator!=):
        * runtime/JSVariableObject.h:
        (JSC::JSVariableObject::symbolTablePut):
        (JSC::JSVariableObject::symbolTablePutWithAttributes):
        * runtime/JSWrapperObject.cpp:
        (JSC::JSWrapperObject::mark):
        * runtime/JSWrapperObject.h:
        (JSC::JSWrapperObject::internalValue):
        (JSC::JSWrapperObject::setInternalValue):
        * runtime/Lookup.cpp:
        (JSC::setUpStaticFunctionSlot):
        * runtime/Lookup.h:
        (JSC::lookupPut):
        * runtime/MathObject.cpp:
        (JSC::mathProtoFuncAbs):
        (JSC::mathProtoFuncACos):
        (JSC::mathProtoFuncASin):
        (JSC::mathProtoFuncATan):
        (JSC::mathProtoFuncATan2):
        (JSC::mathProtoFuncCeil):
        (JSC::mathProtoFuncCos):
        (JSC::mathProtoFuncExp):
        (JSC::mathProtoFuncFloor):
        (JSC::mathProtoFuncLog):
        (JSC::mathProtoFuncMax):
        (JSC::mathProtoFuncMin):
        (JSC::mathProtoFuncPow):
        (JSC::mathProtoFuncRandom):
        (JSC::mathProtoFuncRound):
        (JSC::mathProtoFuncSin):
        (JSC::mathProtoFuncSqrt):
        (JSC::mathProtoFuncTan):
        * runtime/MathObject.h:
        (JSC::MathObject::createStructure):
        * runtime/NativeErrorConstructor.cpp:
        (JSC::callNativeErrorConstructor):
        * runtime/NumberConstructor.cpp:
        (JSC::numberConstructorNaNValue):
        (JSC::numberConstructorNegInfinity):
        (JSC::numberConstructorPosInfinity):
        (JSC::numberConstructorMaxValue):
        (JSC::numberConstructorMinValue):
        (JSC::callNumberConstructor):
        * runtime/NumberConstructor.h:
        (JSC::NumberConstructor::createStructure):
        * runtime/NumberObject.cpp:
        (JSC::NumberObject::getJSNumber):
        (JSC::constructNumberFromImmediateNumber):
        * runtime/NumberObject.h:
        * runtime/NumberPrototype.cpp:
        (JSC::numberProtoFuncToString):
        (JSC::numberProtoFuncToLocaleString):
        (JSC::numberProtoFuncValueOf):
        (JSC::numberProtoFuncToFixed):
        (JSC::numberProtoFuncToExponential):
        (JSC::numberProtoFuncToPrecision):
        * runtime/ObjectConstructor.cpp:
        (JSC::constructObject):
        (JSC::callObjectConstructor):
        * runtime/ObjectPrototype.cpp:
        (JSC::objectProtoFuncValueOf):
        (JSC::objectProtoFuncHasOwnProperty):
        (JSC::objectProtoFuncIsPrototypeOf):
        (JSC::objectProtoFuncDefineGetter):
        (JSC::objectProtoFuncDefineSetter):
        (JSC::objectProtoFuncLookupGetter):
        (JSC::objectProtoFuncLookupSetter):
        (JSC::objectProtoFuncPropertyIsEnumerable):
        (JSC::objectProtoFuncToLocaleString):
        (JSC::objectProtoFuncToString):
        * runtime/ObjectPrototype.h:
        * runtime/Operations.cpp:
        (JSC::equal):
        (JSC::equalSlowCase):
        (JSC::strictEqual):
        (JSC::strictEqualSlowCase):
        (JSC::throwOutOfMemoryError):
        * runtime/Operations.h:
        (JSC::equalSlowCaseInline):
        (JSC::strictEqualSlowCaseInline):
        * runtime/PropertySlot.cpp:
        (JSC::PropertySlot::functionGetter):
        * runtime/PropertySlot.h:
        (JSC::PropertySlot::PropertySlot):
        (JSC::PropertySlot::getValue):
        (JSC::PropertySlot::putValue):
        (JSC::PropertySlot::setValueSlot):
        (JSC::PropertySlot::setValue):
        (JSC::PropertySlot::setCustom):
        (JSC::PropertySlot::setCustomIndex):
        (JSC::PropertySlot::slotBase):
        (JSC::PropertySlot::setBase):
        (JSC::PropertySlot::):
        * runtime/Protect.h:
        (JSC::gcProtect):
        (JSC::gcUnprotect):
        (JSC::ProtectedPtr::ProtectedPtr):
        (JSC::ProtectedPtr::operator JSValuePtr):
        (JSC::ProtectedJSValuePtr::ProtectedJSValuePtr):
        (JSC::ProtectedJSValuePtr::get):
        (JSC::ProtectedJSValuePtr::operator JSValuePtr):
        (JSC::ProtectedJSValuePtr::operator->):
        (JSC::::ProtectedPtr):
        (JSC::::~ProtectedPtr):
        (JSC::::operator):
        (JSC::ProtectedJSValuePtr::~ProtectedJSValuePtr):
        (JSC::ProtectedJSValuePtr::operator=):
        (JSC::operator==):
        (JSC::operator!=):
        * runtime/RegExpConstructor.cpp:
        (JSC::RegExpConstructor::getBackref):
        (JSC::RegExpConstructor::getLastParen):
        (JSC::RegExpConstructor::getLeftContext):
        (JSC::RegExpConstructor::getRightContext):
        (JSC::regExpConstructorDollar1):
        (JSC::regExpConstructorDollar2):
        (JSC::regExpConstructorDollar3):
        (JSC::regExpConstructorDollar4):
        (JSC::regExpConstructorDollar5):
        (JSC::regExpConstructorDollar6):
        (JSC::regExpConstructorDollar7):
        (JSC::regExpConstructorDollar8):
        (JSC::regExpConstructorDollar9):
        (JSC::regExpConstructorInput):
        (JSC::regExpConstructorMultiline):
        (JSC::regExpConstructorLastMatch):
        (JSC::regExpConstructorLastParen):
        (JSC::regExpConstructorLeftContext):
        (JSC::regExpConstructorRightContext):
        (JSC::RegExpConstructor::put):
        (JSC::setRegExpConstructorInput):
        (JSC::setRegExpConstructorMultiline):
        (JSC::constructRegExp):
        (JSC::callRegExpConstructor):
        * runtime/RegExpConstructor.h:
        (JSC::RegExpConstructor::createStructure):
        (JSC::asRegExpConstructor):
        * runtime/RegExpMatchesArray.h:
        (JSC::RegExpMatchesArray::put):
        * runtime/RegExpObject.cpp:
        (JSC::regExpObjectGlobal):
        (JSC::regExpObjectIgnoreCase):
        (JSC::regExpObjectMultiline):
        (JSC::regExpObjectSource):
        (JSC::regExpObjectLastIndex):
        (JSC::RegExpObject::put):
        (JSC::setRegExpObjectLastIndex):
        (JSC::RegExpObject::test):
        (JSC::RegExpObject::exec):
        (JSC::callRegExpObject):
        * runtime/RegExpObject.h:
        (JSC::RegExpObject::createStructure):
        (JSC::asRegExpObject):
        * runtime/RegExpPrototype.cpp:
        (JSC::regExpProtoFuncTest):
        (JSC::regExpProtoFuncExec):
        (JSC::regExpProtoFuncCompile):
        (JSC::regExpProtoFuncToString):
        * runtime/StringConstructor.cpp:
        (JSC::stringFromCharCodeSlowCase):
        (JSC::stringFromCharCode):
        (JSC::callStringConstructor):
        * runtime/StringObject.cpp:
        (JSC::StringObject::put):
        * runtime/StringObject.h:
        (JSC::StringObject::createStructure):
        (JSC::asStringObject):
        * runtime/StringObjectThatMasqueradesAsUndefined.h:
        (JSC::StringObjectThatMasqueradesAsUndefined::createStructure):
        * runtime/StringPrototype.cpp:
        (JSC::stringProtoFuncReplace):
        (JSC::stringProtoFuncToString):
        (JSC::stringProtoFuncCharAt):
        (JSC::stringProtoFuncCharCodeAt):
        (JSC::stringProtoFuncConcat):
        (JSC::stringProtoFuncIndexOf):
        (JSC::stringProtoFuncLastIndexOf):
        (JSC::stringProtoFuncMatch):
        (JSC::stringProtoFuncSearch):
        (JSC::stringProtoFuncSlice):
        (JSC::stringProtoFuncSplit):
        (JSC::stringProtoFuncSubstr):
        (JSC::stringProtoFuncSubstring):
        (JSC::stringProtoFuncToLowerCase):
        (JSC::stringProtoFuncToUpperCase):
        (JSC::stringProtoFuncLocaleCompare):
        (JSC::stringProtoFuncBig):
        (JSC::stringProtoFuncSmall):
        (JSC::stringProtoFuncBlink):
        (JSC::stringProtoFuncBold):
        (JSC::stringProtoFuncFixed):
        (JSC::stringProtoFuncItalics):
        (JSC::stringProtoFuncStrike):
        (JSC::stringProtoFuncSub):
        (JSC::stringProtoFuncSup):
        (JSC::stringProtoFuncFontcolor):
        (JSC::stringProtoFuncFontsize):
        (JSC::stringProtoFuncAnchor):
        (JSC::stringProtoFuncLink):
        * runtime/Structure.cpp:
        (JSC::Structure::Structure):
        (JSC::Structure::changePrototypeTransition):
        (JSC::Structure::createCachedPrototypeChain):
        * runtime/Structure.h:
        (JSC::Structure::create):
        (JSC::Structure::setPrototypeWithoutTransition):
        (JSC::Structure::storedPrototype):

2009-01-06  Oliver Hunt  <oliver@apple.com>

        Reviewed by Cameron Zwarich.

        <https://bugs.webkit.org/show_bug.cgi?id=23085> [jsfunfuzz] Over released ScopeChainNode
        <rdar://problem/6474110>

        So this delightful bug was caused by our unwind code using a ScopeChain to perform
        the unwind.  The ScopeChain would ref the initial top of the scope chain, then deref
        the resultant top of scope chain, which is incorrect.

        This patch removes the dependency on ScopeChain for the unwind, and i've filed
        <https://bugs.webkit.org/show_bug.cgi?id=23144> to look into the unintuitive
        ScopeChain behaviour.

        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::throwException):

2009-01-06  Adam Roben  <aroben@apple.com>

        Hopeful Windows crash-on-launch fix

        * wtf/Platform.h: Force a world rebuild by touching this file.

2009-01-06  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by NOBODY (Build fix).

        * GNUmakefile.am:Add ByteArray.cpp too

2009-01-06  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by NOBODY (Speculative build fix).

        AllInOneFile.cpp does not include the JSByteArray.cpp include it...

        * GNUmakefile.am:

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

        Reviewed by NOBODY (Build fix).

        Fix Wx build

        * JavaScriptCoreSources.bkl:

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

        Windows build fixes

        Rubber-stamped by Alice Liu.

        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::Interpreter):
        * runtime/ByteArray.cpp:
        (JSC::ByteArray::create):
        * runtime/ByteArray.h:

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

        Reviewed by Gavin Barraclough.

        CanvasPixelArray performance is too slow 
        <https://bugs.webkit.org/show_bug.cgi?id=23123>

        The fix to this is to devirtualise get and put in a manner similar to
        JSString and JSArray.  To do this I've added a ByteArray implementation
        and JSByteArray wrapper to JSC.  We can then do vptr comparisons to
        devirtualise the calls.

        This devirtualisation improves performance by 1.5-2x in my somewhat ad
        hoc tests.

        * GNUmakefile.am:
        * JavaScriptCore.exp:
        * JavaScriptCore.pri:
        * JavaScriptCore.scons:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::Interpreter):
        (JSC::Interpreter::privateExecute):
        (JSC::Interpreter::cti_op_get_by_val):
        (JSC::Interpreter::cti_op_put_by_val):
        * interpreter/Interpreter.h:
        (JSC::Interpreter::isJSByteArray):
        * runtime/ByteArray.cpp: Added.
        (JSC::ByteArray::create):
        * runtime/ByteArray.h: Added.
        (JSC::ByteArray::length):
        (JSC::ByteArray::set):
        (JSC::ByteArray::get):
        (JSC::ByteArray::data):
        (JSC::ByteArray::ByteArray):
        * runtime/JSByteArray.cpp: Added.
        (JSC::):
        (JSC::JSByteArray::JSByteArray):
        (JSC::JSByteArray::createStructure):
        (JSC::JSByteArray::getOwnPropertySlot):
        (JSC::JSByteArray::put):
        (JSC::JSByteArray::getPropertyNames):
        * runtime/JSByteArray.h: Added.
        (JSC::JSByteArray::canAccessIndex):
        (JSC::JSByteArray::getIndex):
        (JSC::JSByteArray::setIndex):
        (JSC::JSByteArray::classInfo):
        (JSC::JSByteArray::length):
        (JSC::JSByteArray::):
        (JSC::JSByteArray::JSByteArray):
        (JSC::asByteArray):

2009-01-05  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=23073
        <rdar://problem/6471129> Workers crash on Windows Release builds

        * wtf/ThreadSpecific.h:
        (WTF::ThreadSpecific::destroy): Changed to clear the pointer only after data object
        destruction is finished - otherwise, WebCore::ThreadGlobalData destructor was re-creating
        the object in order to access atomic string table.
        (WTF::ThreadSpecific::operator T*): Symmetrically, set up the per-thread pointer before
        data constructor is called.

        * wtf/ThreadingWin.cpp: (WTF::wtfThreadEntryPoint): Remove a Windows-only hack to finalize
        a thread - pthreadVC2 is a DLL, so it gets thread detached messages, and cleans up thread
        specific data automatically. Besides, this code wasn't even compiled in for some time now.

2009-01-05  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=23115
        Create a version of ASSERT for use with otherwise unused variables

        * wtf/Assertions.h: Added ASSERT_UNUSED.

        * jit/ExecutableAllocatorPosix.cpp:
        (JSC::ExecutablePool::systemRelease):
        * runtime/Collector.cpp:
        (JSC::Heap::destroy):
        (JSC::Heap::heapAllocate):
        * runtime/JSNotAnObject.cpp:
        (JSC::JSNotAnObject::toPrimitive):
        (JSC::JSNotAnObject::getPrimitiveNumber):
        (JSC::JSNotAnObject::toBoolean):
        (JSC::JSNotAnObject::toNumber):
        (JSC::JSNotAnObject::toString):
        (JSC::JSNotAnObject::getOwnPropertySlot):
        (JSC::JSNotAnObject::put):
        (JSC::JSNotAnObject::deleteProperty):
        (JSC::JSNotAnObject::getPropertyNames):
        * wtf/TCSystemAlloc.cpp:
        (TCMalloc_SystemRelease):
        Use it in some places that used other idioms for this purpose.

2009-01-04  Alice Liu  <alice.liu@apple.com>

        <rdar://problem/6341776> Merge m_transitionCount and m_offset in Structure.

        Reviewed by Darin Adler.

        * runtime/Structure.cpp:
        (JSC::Structure::Structure): Remove m_transitionCount
        (JSC::Structure::addPropertyTransitionToExistingStructure): No need to wait until after the assignment to offset to assert if it's notFound; move it up.
        (JSC::Structure::addPropertyTransition): Use method for transitionCount instead of m_transitionCount. Remove line that maintains the m_transitionCount.
        (JSC::Structure::changePrototypeTransition): Remove line that maintains the m_transitionCount.
        (JSC::Structure::getterSetterTransition): Remove line that maintains the m_transitionCount.
        * runtime/Structure.h:
        Changed s_maxTransitionLength and m_offset from size_t to signed char.  m_offset will never become greater than 64 
        because the structure transitions to a dictionary at that time.
        (JSC::Structure::transitionCount): method to replace the data member

2009-01-04  Darin Adler  <darin@apple.com>

        Reviewed by David Kilzer.

        Bug 15114: Provide compile-time assertions for sizeof(UChar), sizeof(DeprecatedChar), etc.
        https://bugs.webkit.org/show_bug.cgi?id=15114

        * wtf/unicode/Unicode.h: Assert size of UChar. There is no DeprecatedChar any more.

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

        Reviewed by Oliver Hunt.

        Change the pcVector from storing native code pointers to storing offsets
        from the base pointer. This will allow us to generate the pcVector on demand
        for exceptions.

        * bytecode/CodeBlock.h:
        (JSC::PC::PC):
        (JSC::getNativePCOffset):
        (JSC::CodeBlock::getBytecodeIndex):
        * jit/JIT.cpp:
        (JSC::JIT::privateCompile):

2009-01-02  Oliver Hunt  <oliver@apple.com>

        Reviewed by NOBODY (Build fix).
        
        * runtime/ScopeChain.cpp:

2009-01-02  Oliver Hunt  <oliver@apple.com>

        Reviewed by Gavin Barraclough.

        [jsfunfuzz] unwind logic for exceptions in eval fails to account for dynamic scope external to the eval
        https://bugs.webkit.org/show_bug.cgi?id=23078

        This bug was caused by eval codeblocks being generated without accounting
        for the depth of the scope chain they inherited.  This meant that exception
        handlers would understate their expected scope chain depth, which in turn
        led to incorrectly removing nodes from the scope chain.

        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::BytecodeGenerator):
        (JSC::BytecodeGenerator::emitCatch):
        * bytecompiler/BytecodeGenerator.h:
        * interpreter/Interpreter.cpp:
        (JSC::depth):
        * runtime/ScopeChain.cpp:
        (JSC::ScopeChain::localDepth):
        * runtime/ScopeChain.h:
        (JSC::ScopeChainNode::deref):
        (JSC::ScopeChainNode::ref):

2009-01-02  David Smith  <catfish.man@gmail.com>

        Reviewed by Darin Adler.
        
        https://bugs.webkit.org/show_bug.cgi?id=22699
        Enable NodeList caching for getElementsByTagName

        * wtf/HashFunctions.h: Moved the definition of PHI here and renamed to stringHashingStartValue

2009-01-02  David Kilzer  <ddkilzer@apple.com>

        Attempt to fix Qt Linux build after r39553

        * wtf/RandomNumberSeed.h: Include <sys/time.h> for gettimeofday().
        Include <sys/types.h> and <unistd.h> for getpid().

2009-01-02  David Kilzer  <ddkilzer@apple.com>

        Bug 23081: These files are no longer part of the KDE libraries

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

        Reviewed by Darin Adler.

        Removed "This file is part of the KDE libraries" comment from
        source files.  Added or updated Apple copyrights as well.

        * parser/Lexer.h:
        * wtf/HashCountedSet.h:
        * wtf/RetainPtr.h:
        * wtf/VectorTraits.h:

2009-01-02  David Kilzer  <ddkilzer@apple.com>

        Bug 23080: Remove last vestiges of KJS references

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

        Reviewed by Darin Adler.

        Also updated Apple copyright statements.

        * DerivedSources.make: Changed bison "kjsyy" prefix to "jscyy".
        * GNUmakefile.am: Ditto.
        * JavaScriptCore.pri: Ditto.  Also changed KJSBISON to JSCBISON
        and kjsbison to jscbison.

        * JavaScriptCoreSources.bkl: Changed JSCORE_KJS_SOURCES to
        JSCORE_JSC_SOURCES.
        * jscore.bkl: Ditto.

        * create_hash_table: Updated copyright and removed old comment.

        * parser/Grammar.y: Changed "kjsyy" prefix to "jscyy" prefix.
        * parser/Lexer.cpp: Ditto.  Also changed KJS_DEBUG_LEX to
        JSC_DEBUG_LEX.
        (jscyylex):
        (JSC::Lexer::lex):
        * parser/Parser.cpp: Ditto.
        (JSC::Parser::parse):

        * pcre/dftables: Changed "kjs_pcre_" prefix to "jsc_pcre_".
        * pcre/pcre_compile.cpp: Ditto.
        (getOthercaseRange):
        (encodeUTF8):
        (compileBranch):
        (calculateCompiledPatternLength):
        * pcre/pcre_exec.cpp: Ditto.
        (matchRef):
        (getUTF8CharAndIncrementLength):
        (match):
        * pcre/pcre_internal.h: Ditto.
        (toLowerCase):
        (flipCase):
        (classBitmapForChar):
        (charTypeForChar):
        * pcre/pcre_tables.cpp: Ditto.
        * pcre/pcre_ucp_searchfuncs.cpp: Ditto.
        (jsc_pcre_ucp_othercase):
        * pcre/pcre_xclass.cpp: Ditto.
        (getUTF8CharAndAdvancePointer):
        (jsc_pcre_xclass):

        * runtime/Collector.h: Updated header guards using the
        clean-header-guards script.
        * runtime/CollectorHeapIterator.h: Added missing header guard.
        * runtime/Identifier.h: Updated header guards.
        * runtime/JSFunction.h: Fixed end-of-namespace comment.

        * runtime/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::reset): Renamed "kjsprint" debug function
        to "jscprint".  Changed implementation method from
        globalFuncKJSPrint() to globalFuncJSCPrint().
        * runtime/JSGlobalObjectFunctions.cpp:
        (JSC::globalFuncJSCPrint): Renamed from globalFuncKJSPrint().
        * runtime/JSGlobalObjectFunctions.h: Ditto.

        * runtime/JSImmediate.h: Updated header guards.
        * runtime/JSLock.h: Ditto.
        * runtime/JSType.h: Ditto.
        * runtime/JSWrapperObject.h: Ditto.
        * runtime/Lookup.h: Ditto.
        * runtime/Operations.h: Ditto.
        * runtime/Protect.h: Ditto.
        * runtime/RegExp.h: Ditto.
        * runtime/UString.h: Ditto.

        * tests/mozilla/js1_5/Array/regress-157652.js: Changed "KJS"
        reference in comment to "JSC".

        * wrec/CharacterClassConstructor.cpp: Change "kjs_pcre_" function
        prefixes to "jsc_pcre_".
        (JSC::WREC::CharacterClassConstructor::put):
        (JSC::WREC::CharacterClassConstructor::flush):

        * wtf/unicode/Unicode.h: Change "KJS_" header guard to "WTF_".
        * wtf/unicode/icu/UnicodeIcu.h: Ditto.
        * wtf/unicode/qt4/UnicodeQt4.h: Ditto.

2009-01-02  Oliver Hunt  <oliver@apple.com>

        Reviewed by Maciej Stachowiak.

        Make randomNumber generate 2^53 values instead of 2^32 (or 2^31 for rand() platforms)

        * wtf/RandomNumber.cpp:
        (WTF::randomNumber):

2009-01-02  David Kilzer  <ddkilzer@apple.com>

        Remove declaration for JSC::Identifier::initializeIdentifierThreading()

        Reviewed by Alexey Proskuryakov.

        * runtime/Identifier.h:
        (JSC::Identifier::initializeIdentifierThreading): Removed
        declaration since the implementation was removed in r34412.

2009-01-01  Darin Adler  <darin@apple.com>

        Reviewed by Oliver Hunt.

        String.replace does not support $& replacement metacharacter when search term is not a RegExp
        <https://bugs.webkit.org/show_bug.cgi?id=21431>
        <rdar://problem/6274993>

        Test: fast/js/string-replace-3.html

        * runtime/StringPrototype.cpp:
        (JSC::substituteBackreferences): Added a null check here so we won't try to handle $$-$9
        backreferences when the search term is a string, not a RegExp. Added a check for 0 so we
        won't try to handle $0 or $00 as a backreference.
        (JSC::stringProtoFuncReplace): Added a call to substituteBackreferences.

2009-01-01  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Darin Adler.

        Allow 32-bit integers to be stored in JSImmediates, on x64-bit.
        Presently the top 32-bits of a 64-bit JSImmediate serve as a sign extension of a 31-bit
        int stored in the low word (shifted left by one, to make room for a tag).  In the new
        format, the top 31-bits serve as a sign extension of a 32-bit int, still shifted left by
        one.

        The new behavior is enabled using a flag in Platform.h, 'WTF_USE_ALTERNATE_JSIMMEDIATE'.
        When this is set the constants defining the range of ints allowed to be stored as
        JSImmediate values is extended.  The code in JSImmediate.h can safely operate on either
        format.  This patch updates the JIT so that it can also operate with the new format.

        ~2% progression on x86-64, with & without the JIT, on sunspider & v8 tests.

        * assembler/MacroAssembler.h:
        (JSC::MacroAssembler::addPtr):
        (JSC::MacroAssembler::orPtr):
        (JSC::MacroAssembler::or32):
        (JSC::MacroAssembler::rshiftPtr):
        (JSC::MacroAssembler::rshift32):
        (JSC::MacroAssembler::subPtr):
        (JSC::MacroAssembler::xorPtr):
        (JSC::MacroAssembler::xor32):
        (JSC::MacroAssembler::move):
        (JSC::MacroAssembler::compareImm64ForBranch):
        (JSC::MacroAssembler::compareImm64ForBranchEquality):
        (JSC::MacroAssembler::jePtr):
        (JSC::MacroAssembler::jgePtr):
        (JSC::MacroAssembler::jlPtr):
        (JSC::MacroAssembler::jlePtr):
        (JSC::MacroAssembler::jnePtr):
        (JSC::MacroAssembler::jnzSubPtr):
        (JSC::MacroAssembler::joAddPtr):
        (JSC::MacroAssembler::jzSubPtr):
        * assembler/X86Assembler.h:
        (JSC::X86Assembler::addq_rr):
        (JSC::X86Assembler::orq_ir):
        (JSC::X86Assembler::subq_ir):
        (JSC::X86Assembler::xorq_rr):
        (JSC::X86Assembler::sarq_CLr):
        (JSC::X86Assembler::sarq_i8r):
        (JSC::X86Assembler::cmpq_ir):
        * jit/JIT.cpp:
        (JSC::JIT::compileOpStrictEq):
        (JSC::JIT::privateCompileMainPass):
        (JSC::JIT::privateCompileSlowCases):
        (JSC::JIT::privateCompileCTIMachineTrampolines):
        * jit/JIT.h:
        * jit/JITArithmetic.cpp:
        (JSC::JIT::compileFastArith_op_lshift):
        (JSC::JIT::compileFastArithSlow_op_lshift):
        (JSC::JIT::compileFastArith_op_rshift):
        (JSC::JIT::compileFastArithSlow_op_rshift):
        (JSC::JIT::compileFastArith_op_bitand):
        (JSC::JIT::compileFastArithSlow_op_bitand):
        (JSC::JIT::compileFastArith_op_mod):
        (JSC::JIT::compileFastArithSlow_op_mod):
        (JSC::JIT::compileFastArith_op_add):
        (JSC::JIT::compileFastArithSlow_op_add):
        (JSC::JIT::compileFastArith_op_mul):
        (JSC::JIT::compileFastArithSlow_op_mul):
        (JSC::JIT::compileFastArith_op_post_inc):
        (JSC::JIT::compileFastArithSlow_op_post_inc):
        (JSC::JIT::compileFastArith_op_post_dec):
        (JSC::JIT::compileFastArithSlow_op_post_dec):
        (JSC::JIT::compileFastArith_op_pre_inc):
        (JSC::JIT::compileFastArithSlow_op_pre_inc):
        (JSC::JIT::compileFastArith_op_pre_dec):
        (JSC::JIT::compileFastArithSlow_op_pre_dec):
        (JSC::JIT::compileBinaryArithOp):
        * jit/JITInlineMethods.h:
        (JSC::JIT::getConstantOperand):
        (JSC::JIT::getConstantOperandImmediateInt):
        (JSC::JIT::isOperandConstantImmediateInt):
        (JSC::JIT::isOperandConstant31BitImmediateInt):
        (JSC::JIT::emitFastArithDeTagImmediate):
        (JSC::JIT::emitFastArithDeTagImmediateJumpIfZero):
        (JSC::JIT::emitFastArithReTagImmediate):
        (JSC::JIT::emitFastArithImmToInt):
        (JSC::JIT::emitFastArithIntToImmNoCheck):
        * runtime/JSImmediate.h:
        (JSC::JSImmediate::isPositiveNumber):
        (JSC::JSImmediate::isNegative):
        (JSC::JSImmediate::rightShiftImmediateNumbers):
        (JSC::JSImmediate::canDoFastAdditiveOperations):
        (JSC::JSImmediate::makeValue):
        (JSC::JSImmediate::makeInt):
        (JSC::JSImmediate::makeBool):
        (JSC::JSImmediate::intValue):
        (JSC::JSImmediate::rawValue):
        (JSC::JSImmediate::toBoolean):
        (JSC::JSImmediate::from):
        * wtf/Platform.h:

2008-12-31  Oliver Hunt  <oliver@apple.com>

        Reviewed by Cameron Zwarich.

        [jsfunfuzz] Assertion + incorrect behaviour with dynamically created local variable in a catch block
        <https://bugs.webkit.org/show_bug.cgi?id=23063>

        Eval inside a catch block attempts to use the catch block's static scope in
        an unsafe way by attempting to add new properties to the scope.  This patch
        fixes this issue simply by preventing the catch block from using a static
        scope if it contains an eval.

        * parser/Grammar.y:
        * parser/Nodes.cpp:
        (JSC::TryNode::emitBytecode):
        * parser/Nodes.h:
        (JSC::TryNode::):

2008-12-31  Oliver Hunt  <oliver@apple.com>

        Reviewed by Gavin Barraclough.

        [jsfunfuzz] Computed exception offset wrong when first instruction is attempt to resolve deleted eval
        <https://bugs.webkit.org/show_bug.cgi?id=23062>

        This was caused by the expression information for the initial resolve of
        eval not being emitted.  If this resolve was the first instruction that
        could throw an exception the information search would fail leading to an
        assertion failure.  If it was not the first throwable opcode the wrong
        expression information would used.

        Fix is simply to emit the expression info.

        * parser/Nodes.cpp:
        (JSC::EvalFunctionCallNode::emitBytecode):

2008-12-31  Cameron Zwarich  <cwzwarich@uwaterloo.ca>

        Reviewed by Oliver Hunt.

        Bug 23054: Caching of global lookups occurs even when the global object has become a dictionary
        <https://bugs.webkit.org/show_bug.cgi?id=23054>
        <rdar://problem/6469905>

        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::resolveGlobal): Do not cache lookup if the global
        object has transitioned to a dictionary.
        (JSC::Interpreter::cti_op_resolve_global): Do not cache lookup if the
        global object has transitioned to a dictionary.

2008-12-30  Oliver Hunt  <oliver@apple.com>

        Reviewed by Darin Adler.

        <https://bugs.webkit.org/show_bug.cgi?id=23049> [jsfunfuzz] With blocks do not correctly protect their scope object
        <rdar://problem/6469742> Crash in JSC::TypeInfo::hasStandardGetOwnPropertySlot() running jsfunfuzz

        The problem that caused this was that with nodes were not correctly protecting
        the final object that was placed in the scope chain.  We correct this by forcing
        the use of a temporary register (which stops us relying on a local register
        protecting the scope) and changing the behaviour of op_push_scope so that it
        will store the final scope object.

        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::emitPushScope):
        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::privateExecute):
        (JSC::Interpreter::cti_op_push_scope):
        * interpreter/Interpreter.h:
        * jit/JIT.cpp:
        (JSC::JIT::privateCompileMainPass):
        * parser/Nodes.cpp:
        (JSC::WithNode::emitBytecode):

2008-12-30  Cameron Zwarich  <cwzwarich@uwaterloo.ca>

        Reviewed by Sam Weinig.

        Bug 23037: Parsing and reparsing disagree on automatic semicolon insertion
        <https://bugs.webkit.org/show_bug.cgi?id=23037>
        <rdar://problem/6467124>

        Parsing and reparsing disagree about automatic semicolon insertion, so that a
        function like

        function() { a = 1, }

        is parsed as being syntactically valid but gets a syntax error upon reparsing.
        This leads to an assertion failure in Parser::reparse(). It is not that big of
        an issue in practice, because in a Release build such a function will return
        'undefined' when called.

        In this case, we are not following the spec and it should be a syntax error.
        However, unless there is a newline separating the ',' and the '}', WebKit would
        not treat it as a syntax error in the past either. It would be a bit of work to
        make the automatic semicolon insertion match the spec exactly, so this patch
        changes it to match our past behaviour.

        The problem is that even during reparsing, the Lexer adds a semicolon at the
        end of the input, which confuses allowAutomaticSemicolon(), because it is
        expecting either a '}', the end of input, or a terminator like a newline.

        * parser/Lexer.cpp:
        (JSC::Lexer::Lexer): Initialize m_isReparsing to false.
        (JSC::Lexer::lex): Do not perform automatic semicolon insertion in the Lexer if
        we are in the middle of reparsing.
        (JSC::Lexer::clear): Set m_isReparsing to false.
        * parser/Lexer.h:
        (JSC::Lexer::setIsReparsing): Added.
        * parser/Parser.cpp:
        (JSC::Parser::reparse): Call Lexer::setIsReparsing() to notify the Lexer of
        reparsing.

2008-12-29  Oliver Hunt  <oliver@apple.com>

        Reviewed by NOBODY (Build fix).

        Yet another attempt to fix Tiger.

        * wtf/RandomNumber.cpp:
        (WTF::randomNumber):

2008-12-29  Oliver Hunt  <oliver@apple.com>

        Reviewed by NOBODY (Build fix).

        Tiger build fix (correct this time)

        * wtf/RandomNumber.cpp:

2008-12-29  Cameron Zwarich  <cwzwarich@uwaterloo.ca>

        Rubber-stamped by Alexey Proskuryakov.

        Revert r39509, because kjsyydebug is used in the generated code if YYDEBUG is 1.

        * parser/Grammar.y:

2008-12-29  Oliver Hunt  <oliver@apple.com>

        Reviewed by NOBODY (Build fix).

        Tiger build fix.

        * wtf/RandomNumber.cpp:

2008-12-29  Oliver Hunt  <oliver@apple.com>

        Reviewed by Mark Rowe.

        <rdar://problem/6358108> Insecure randomness in Math.random() leads to user tracking

        Switch to arc4random on PLATFORM(DARWIN), this is ~1.5x slower than random(), but the
        it is still so fast that there is no fathomable way it could be a bottleneck for anything.

        randomNumber is called in two places
          * During form submission where it is called once per form
          * Math.random in JSC.  For this difference to show up you have to be looping on
            a cached local copy of random, for a large (>10000) calls.

        No change in SunSpider.

        * wtf/RandomNumber.cpp:
        (WTF::randomNumber):
        * wtf/RandomNumberSeed.h:
        (WTF::initializeRandomNumberGenerator):

2008-12-29  Cameron Zwarich  <cwzwarich@uwaterloo.ca>

        Rubber-stamped by Sam Weinig.

        Remove unused kjsyydebug #define.

        * parser/Grammar.y:

2008-12-29  Cameron Zwarich  <cwzwarich@uwaterloo.ca>

        Reviewed by Oliver Hunt and Sam Weinig.

        Bug 23029: REGRESSION (r39337): jsfunfuzz generates identical test files
        <https://bugs.webkit.org/show_bug.cgi?id=23029>
        <rdar://problem/6469185>

        The unification of random number generation in r39337 resulted in random()
        being initialized on Darwin, but rand() actually being used. Fix this by
        making randomNumber() use random() instead of rand() on Darwin.

        * wtf/RandomNumber.cpp:
        (WTF::randomNumber):

2008-12-29  Sam Weinig  <sam@webkit.org>

        Fix buildbots.

        * runtime/Structure.cpp:

2008-12-29  Sam Weinig  <sam@webkit.org>

        Reviewed by Oliver Hunt.

        Patch for https://bugs.webkit.org/show_bug.cgi?id=23026
        Move the deleted offsets vector into the PropertyMap

        Saves 3 words per Structure.

        * runtime/PropertyMapHashTable.h:
        * runtime/Structure.cpp:
        (JSC::Structure::addPropertyTransition):
        (JSC::Structure::changePrototypeTransition):
        (JSC::Structure::getterSetterTransition):
        (JSC::Structure::toDictionaryTransition):
        (JSC::Structure::fromDictionaryTransition):
        (JSC::Structure::copyPropertyTable):
        (JSC::Structure::put):
        (JSC::Structure::remove):
        (JSC::Structure::rehashPropertyMapHashTable):
        * runtime/Structure.h:
        (JSC::Structure::propertyStorageSize):

2008-12-29  Cameron Zwarich  <cwzwarich@uwaterloo.ca>

        Reviewed by Oliver Hunt.

        Change code using m_body.get() as a boolean to take advantage of the 
        implicit conversion of RefPtr to boolean.

        * runtime/JSFunction.cpp:
        (JSC::JSFunction::~JSFunction):

2008-12-28  Cameron Zwarich  <cwzwarich@uwaterloo.ca>

        Reviewed by Oliver Hunt.

        Bug 22840: REGRESSION (r38349): Gmail doesn't load with profiling enabled
        <https://bugs.webkit.org/show_bug.cgi?id=22840>
        <rdar://problem/6468077>

        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::emitNewArray): Add an assertion that the range
        of registers passed to op_new_array is sequential.
        (JSC::BytecodeGenerator::emitCall): Correct the relocation of registers
        when emitting profiler hooks so that registers aren't leaked. Also, add
        an assertion that the 'this' register is always ref'd (because it is),
        remove the needless protection of the 'this' register when relocating,
        and add an assertion that the range of registers passed to op_call for
        function call arguments is sequential.
        (JSC::BytecodeGenerator::emitConstruct): Correct the relocation of
        registers when emitting profiler hooks so that registers aren't leaked.
        Also, add an assertion that the range of registers passed to op_construct
        for function call arguments is sequential.

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

        Reviewed by Alexey Proskuryakov.

        <rdar://problem/6467376> Race condition in WTF::currentThread can lead to a thread using two different identifiers during its lifetime

        If a newly-created thread calls WTF::currentThread() before WTF::createThread calls establishIdentifierForPthreadHandle
        then more than one identifier will be used for the same thread.  We can avoid this by adding some extra synchronization
        during thread creation that delays the execution of the thread function until the thread identifier has been set up, and
        an assertion to catch this problem should it reappear in the future.

        * wtf/Threading.cpp: Added.
        (WTF::NewThreadContext::NewThreadContext):
        (WTF::threadEntryPoint):
        (WTF::createThread): Add cross-platform createThread function that delays the execution of the thread function until
        after the thread identifier has been set up.
        * wtf/Threading.h:
        * wtf/ThreadingGtk.cpp:
        (WTF::establishIdentifierForThread):
        (WTF::createThreadInternal):
        * wtf/ThreadingNone.cpp:
        (WTF::createThreadInternal):
        * wtf/ThreadingPthreads.cpp:
        (WTF::establishIdentifierForPthreadHandle):
        (WTF::createThreadInternal):
        * wtf/ThreadingQt.cpp:
        (WTF::identifierByQthreadHandle):
        (WTF::establishIdentifierForThread):
        (WTF::createThreadInternal):
        * wtf/ThreadingWin.cpp:
        (WTF::storeThreadHandleByIdentifier):
        (WTF::createThreadInternal):

        Add Threading.cpp to the build.

        * GNUmakefile.am:
        * JavaScriptCore.pri:
        * JavaScriptCore.scons:
        * JavaScriptCore.vcproj/WTF/WTF.vcproj:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * JavaScriptCoreSources.bkl:

2008-12-26  Sam Weinig  <sam@webkit.org>

        Reviewed by Alexey Proskuryakov.

        Remove unused method.

        * runtime/Structure.h: Remove mutableTypeInfo.

2008-12-22  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Oliver Hunt.

        Fix rounding / bounds / signed comparison bug in ExecutableAllocator.

        ExecutableAllocator::alloc assumed that m_freePtr would be aligned.  This was
        not always true, since the first allocation from an additional pool would not
        be rounded up.  Subsequent allocations would be unaligned, and too much memory
        could be erroneously allocated from the pool, when the size requested was
        available, but the size rounded up to word granularity was not available in the
        pool.  This may result in the value of m_freePtr being greater than m_end.

        Under these circumstances, the unsigned check for space will always pass,
        resulting in pointers to memory outside of the arena being returned, and
        ultimately segfaulty goodness when attempting to memcpy the hot freshly jitted
        code from the AssemblerBuffer.

        https://bugs.webkit.org/show_bug.cgi?id=22974
        ... and probably many, many more.

        * jit/ExecutableAllocator.h:
        (JSC::ExecutablePool::alloc):
        (JSC::ExecutablePool::roundUpAllocationSize):
        (JSC::ExecutablePool::ExecutablePool):
        (JSC::ExecutablePool::poolAllocate):

2008-12-22  Sam Weinig  <sam@webkit.org>

        Reviewed by Gavin Barraclough.

        Rename all uses of the term "repatch" to "patch".

        * assembler/MacroAssembler.h:
        (JSC::MacroAssembler::DataLabelPtr::patch):
        (JSC::MacroAssembler::DataLabel32::patch):
        (JSC::MacroAssembler::Jump::patch):
        (JSC::MacroAssembler::PatchBuffer::PatchBuffer):
        (JSC::MacroAssembler::PatchBuffer::setPtr):
        (JSC::MacroAssembler::loadPtrWithAddressOffsetPatch):
        (JSC::MacroAssembler::storePtrWithAddressOffsetPatch):
        (JSC::MacroAssembler::storePtrWithPatch):
        (JSC::MacroAssembler::jnePtrWithPatch):
        * assembler/X86Assembler.h:
        (JSC::X86Assembler::patchAddress):
        (JSC::X86Assembler::patchImmediate):
        (JSC::X86Assembler::patchPointer):
        (JSC::X86Assembler::patchBranchOffset):
        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::tryCTICachePutByID):
        (JSC::Interpreter::tryCTICacheGetByID):
        (JSC::Interpreter::cti_op_put_by_id):
        (JSC::Interpreter::cti_op_get_by_id):
        (JSC::Interpreter::cti_op_get_by_id_self_fail):
        (JSC::Interpreter::cti_op_get_by_id_proto_list):
        (JSC::Interpreter::cti_vm_dontLazyLinkCall):
        * jit/JIT.cpp:
        (JSC::ctiPatchCallByReturnAddress):
        (JSC::JIT::privateCompileMainPass):
        (JSC::JIT::privateCompile):
        (JSC::JIT::privateCompileCTIMachineTrampolines):
        * jit/JIT.h:
        * jit/JITCall.cpp:
        (JSC::JIT::unlinkCall):
        (JSC::JIT::linkCall):
        (JSC::JIT::compileOpCall):
        * jit/JITPropertyAccess.cpp:
        (JSC::JIT::compileGetByIdHotPath):
        (JSC::JIT::compilePutByIdHotPath):
        (JSC::JIT::compileGetByIdSlowCase):
        (JSC::JIT::compilePutByIdSlowCase):
        (JSC::JIT::privateCompilePutByIdTransition):
        (JSC::JIT::patchGetByIdSelf):
        (JSC::JIT::patchPutByIdReplace):
        (JSC::JIT::privateCompilePatchGetArrayLength):
        (JSC::JIT::privateCompileGetByIdSelf):
        (JSC::JIT::privateCompileGetByIdProto):
        (JSC::JIT::privateCompileGetByIdSelfList):
        (JSC::JIT::privateCompileGetByIdProtoList):
        (JSC::JIT::privateCompileGetByIdChainList):
        (JSC::JIT::privateCompileGetByIdChain):
        (JSC::JIT::privateCompilePutByIdReplace):

2008-12-22  Adam Roben  <aroben@apple.com>

        Build fix after r39428

        * jit/JITCall.cpp:
        (JSC::JIT::compileOpCallSlowCase): Added a missing MacroAssembler::

2008-12-22  Nikolas Zimmermann  <nikolas.zimmermann@torchmobile.com>

        Rubber-stamped by George Staikos.

        Unify all TorchMobile copyright lines. Consolidate in a single line, as requested by Mark Rowe, some time ago.

        * wtf/RandomNumber.cpp:
        * wtf/RandomNumber.h:
        * wtf/RandomNumberSeed.h:

2008-12-21  Nikolas Zimmermann  <nikolas.zimmermann@torchmobile.com>

        Rubber-stamped by George Staikos.

        Fix copyright of the new RandomNumber* files.

        * wtf/RandomNumber.cpp:
        * wtf/RandomNumber.h:
        * wtf/RandomNumberSeed.h:

2008-12-21  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Oliver Hunt & Cameron Zwarich.

        Add support for call and property access repatching on x86-64.

        No change in performance on current configurations (2x impovement on v8-tests with JIT enabled on x86-64).

        * assembler/MacroAssembler.h:
        (JSC::MacroAssembler::DataLabelPtr::repatch):
        (JSC::MacroAssembler::DataLabelPtr::operator X86Assembler::JmpDst):
        (JSC::MacroAssembler::DataLabel32::repatch):
        (JSC::MacroAssembler::RepatchBuffer::addressOf):
        (JSC::MacroAssembler::add32):
        (JSC::MacroAssembler::sub32):
        (JSC::MacroAssembler::loadPtrWithAddressOffsetRepatch):
        (JSC::MacroAssembler::storePtrWithAddressOffsetRepatch):
        (JSC::MacroAssembler::jePtr):
        (JSC::MacroAssembler::jnePtr):
        (JSC::MacroAssembler::jnePtrWithRepatch):
        (JSC::MacroAssembler::differenceBetween):
        * assembler/X86Assembler.h:
        (JSC::X86Assembler::addl_im):
        (JSC::X86Assembler::subl_im):
        (JSC::X86Assembler::cmpl_rm):
        (JSC::X86Assembler::movq_rm_disp32):
        (JSC::X86Assembler::movq_mr_disp32):
        (JSC::X86Assembler::repatchPointer):
        (JSC::X86Assembler::X86InstructionFormatter::oneByteOp64_disp32):
        * jit/JIT.cpp:
        (JSC::JIT::privateCompile):
        (JSC::JIT::privateCompileCTIMachineTrampolines):
        * jit/JIT.h:
        * jit/JITCall.cpp:
        (JSC::JIT::unlinkCall):
        (JSC::JIT::linkCall):
        (JSC::JIT::compileOpCall):
        (JSC::JIT::compileOpCallSlowCase):
        * jit/JITInlineMethods.h:
        (JSC::JIT::restoreArgumentReferenceForTrampoline):
        * jit/JITPropertyAccess.cpp:
        (JSC::JIT::compileGetByIdHotPath):
        (JSC::JIT::compileGetByIdSlowCase):
        (JSC::JIT::compilePutByIdHotPath):
        (JSC::JIT::compilePutByIdSlowCase):
        (JSC::resizePropertyStorage):
        (JSC::JIT::privateCompilePutByIdTransition):
        (JSC::JIT::privateCompileGetByIdProto):
        (JSC::JIT::privateCompileGetByIdProtoList):
        (JSC::JIT::privateCompileGetByIdChainList):
        (JSC::JIT::privateCompileGetByIdChain):
        * wtf/Platform.h:

2008-12-20  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Oliver Hunt.

        Port optimized property access generation to the MacroAssembler.

        * assembler/MacroAssembler.h:
        (JSC::MacroAssembler::AbsoluteAddress::AbsoluteAddress):
        (JSC::MacroAssembler::DataLabelPtr::repatch):
        (JSC::MacroAssembler::DataLabel32::DataLabel32):
        (JSC::MacroAssembler::DataLabel32::repatch):
        (JSC::MacroAssembler::Label::operator X86Assembler::JmpDst):
        (JSC::MacroAssembler::Jump::repatch):
        (JSC::MacroAssembler::JumpList::empty):
        (JSC::MacroAssembler::RepatchBuffer::link):
        (JSC::MacroAssembler::add32):
        (JSC::MacroAssembler::and32):
        (JSC::MacroAssembler::sub32):
        (JSC::MacroAssembler::loadPtrWithAddressRepatch):
        (JSC::MacroAssembler::storePtrWithAddressRepatch):
        (JSC::MacroAssembler::push):
        (JSC::MacroAssembler::ja32):
        (JSC::MacroAssembler::jePtr):
        (JSC::MacroAssembler::jnePtr):
        (JSC::MacroAssembler::jnePtrWithRepatch):
        (JSC::MacroAssembler::align):
        (JSC::MacroAssembler::differenceBetween):
        * assembler/X86Assembler.h:
        (JSC::X86Assembler::movl_rm_disp32):
        (JSC::X86Assembler::movl_mr_disp32):
        (JSC::X86Assembler::X86InstructionFormatter::oneByteOp_disp32):
        (JSC::X86Assembler::X86InstructionFormatter::memoryModRM):
        * jit/JIT.cpp:
        (JSC::ctiRepatchCallByReturnAddress):
        (JSC::JIT::privateCompileMainPass):
        (JSC::JIT::privateCompile):
        (JSC::JIT::privateCompileCTIMachineTrampolines):
        * jit/JIT.h:
        * jit/JITPropertyAccess.cpp:
        (JSC::JIT::compileGetByIdHotPath):
        (JSC::JIT::compileGetByIdSlowCase):
        (JSC::JIT::compilePutByIdHotPath):
        (JSC::JIT::compilePutByIdSlowCase):
        (JSC::resizePropertyStorage):
        (JSC::JIT::privateCompilePutByIdTransition):
        (JSC::JIT::patchGetByIdSelf):
        (JSC::JIT::patchPutByIdReplace):
        (JSC::JIT::privateCompilePatchGetArrayLength):
        (JSC::JIT::privateCompileGetByIdSelf):
        (JSC::JIT::privateCompileGetByIdProto):
        (JSC::JIT::privateCompileGetByIdSelfList):
        (JSC::JIT::privateCompileGetByIdProtoList):
        (JSC::JIT::privateCompileGetByIdChainList):
        (JSC::JIT::privateCompileGetByIdChain):
        (JSC::JIT::privateCompilePutByIdReplace):
        * wtf/RefCounted.h:
        (WTF::RefCountedBase::addressOfCount):

2008-12-19  Gustavo Noronha Silva  <gns@gnome.org>

        Reviewed by Holger Freyther.

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

        Added file which was missing to the javascriptcore_sources
        variable, so that it shows up in the tarball created by `make
        dist'.

        * GNUmakefile.am:

2008-12-19  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Antti Koivisto.

        Build fix when building JS API tests with a c89 c compiler

        Do not use C++ style comments and convert them to C comments.

        * wtf/Platform.h:

2008-12-18  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Sam Weinig.

        Same as last revision, adding cases for pre & post inc & dec.

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

        * jit/JIT.cpp:
        (JSC::JIT::privateCompileMainPass):

2008-12-18  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Sam Weinig.

        Fixes for the JIT's handling of JSImmediate values on x86-64.
        On 64-bit systems, the code in JSImmediate.h relies on the upper
        bits of a JSImmediate being a sign extension of the low 32-bits.
        This was not being enforced by the JIT, since a number of inline
        operations were being performed on 32-bit values in registers, and
        when a 32-bit result is written to a register on x86-64 the value
        is zero-extended to 64-bits.
        
        This fix honors previous behavoir.  A better fix in the long run
        (when the JIT is enabled by default) may be to change JSImmediate.h
        so it no longer relies on the upper bits of the pointer,... though
        if we're going to change JSImmediate.h for 64-bit, we probably may
        as well change the format so that the full range of 32-bit ints can
        be stored, rather than just 31-bits.

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

        * assembler/MacroAssembler.h:
        (JSC::MacroAssembler::addPtr):
        (JSC::MacroAssembler::andPtr):
        (JSC::MacroAssembler::orPtr):
        (JSC::MacroAssembler::or32):
        (JSC::MacroAssembler::xor32):
        (JSC::MacroAssembler::xorPtr):
        (JSC::MacroAssembler::signExtend32ToPtr):
        * assembler/X86Assembler.h:
        (JSC::X86Assembler::):
        (JSC::X86Assembler::andq_rr):
        (JSC::X86Assembler::andq_ir):
        (JSC::X86Assembler::orq_rr):
        (JSC::X86Assembler::xorq_ir):
        (JSC::X86Assembler::movsxd_rr):
        * jit/JIT.cpp:
        (JSC::JIT::privateCompileMainPass):
        * jit/JITInlineMethods.h:
        (JSC::JIT::emitFastArithReTagImmediate):
        (JSC::JIT::emitFastArithPotentiallyReTagImmediate):
        (JSC::JIT::emitFastArithImmToInt):

2008-12-18  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Sam Weinig.

        Just a tidy up - rename & refactor some the #defines configuring the JIT.

        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::cti_op_convert_this):
        (JSC::Interpreter::cti_op_end):
        (JSC::Interpreter::cti_op_add):
        (JSC::Interpreter::cti_op_pre_inc):
        (JSC::Interpreter::cti_timeout_check):
        (JSC::Interpreter::cti_register_file_check):
        (JSC::Interpreter::cti_op_loop_if_less):
        (JSC::Interpreter::cti_op_loop_if_lesseq):
        (JSC::Interpreter::cti_op_new_object):
        (JSC::Interpreter::cti_op_put_by_id_generic):
        (JSC::Interpreter::cti_op_get_by_id_generic):
        (JSC::Interpreter::cti_op_put_by_id):
        (JSC::Interpreter::cti_op_put_by_id_second):
        (JSC::Interpreter::cti_op_put_by_id_fail):
        (JSC::Interpreter::cti_op_get_by_id):
        (JSC::Interpreter::cti_op_get_by_id_second):
        (JSC::Interpreter::cti_op_get_by_id_self_fail):
        (JSC::Interpreter::cti_op_get_by_id_proto_list):
        (JSC::Interpreter::cti_op_get_by_id_proto_list_full):
        (JSC::Interpreter::cti_op_get_by_id_proto_fail):
        (JSC::Interpreter::cti_op_get_by_id_array_fail):
        (JSC::Interpreter::cti_op_get_by_id_string_fail):
        (JSC::Interpreter::cti_op_instanceof):
        (JSC::Interpreter::cti_op_del_by_id):
        (JSC::Interpreter::cti_op_mul):
        (JSC::Interpreter::cti_op_new_func):
        (JSC::Interpreter::cti_op_call_JSFunction):
        (JSC::Interpreter::cti_op_call_arityCheck):
        (JSC::Interpreter::cti_vm_dontLazyLinkCall):
        (JSC::Interpreter::cti_vm_lazyLinkCall):
        (JSC::Interpreter::cti_op_push_activation):
        (JSC::Interpreter::cti_op_call_NotJSFunction):
        (JSC::Interpreter::cti_op_create_arguments):
        (JSC::Interpreter::cti_op_create_arguments_no_params):
        (JSC::Interpreter::cti_op_tear_off_activation):
        (JSC::Interpreter::cti_op_tear_off_arguments):
        (JSC::Interpreter::cti_op_profile_will_call):
        (JSC::Interpreter::cti_op_profile_did_call):
        (JSC::Interpreter::cti_op_ret_scopeChain):
        (JSC::Interpreter::cti_op_new_array):
        (JSC::Interpreter::cti_op_resolve):
        (JSC::Interpreter::cti_op_construct_JSConstruct):
        (JSC::Interpreter::cti_op_construct_NotJSConstruct):
        (JSC::Interpreter::cti_op_get_by_val):
        (JSC::Interpreter::cti_op_resolve_func):
        (JSC::Interpreter::cti_op_sub):
        (JSC::Interpreter::cti_op_put_by_val):
        (JSC::Interpreter::cti_op_put_by_val_array):
        (JSC::Interpreter::cti_op_lesseq):
        (JSC::Interpreter::cti_op_loop_if_true):
        (JSC::Interpreter::cti_op_negate):
        (JSC::Interpreter::cti_op_resolve_base):
        (JSC::Interpreter::cti_op_resolve_skip):
        (JSC::Interpreter::cti_op_resolve_global):
        (JSC::Interpreter::cti_op_div):
        (JSC::Interpreter::cti_op_pre_dec):
        (JSC::Interpreter::cti_op_jless):
        (JSC::Interpreter::cti_op_not):
        (JSC::Interpreter::cti_op_jtrue):
        (JSC::Interpreter::cti_op_post_inc):
        (JSC::Interpreter::cti_op_eq):
        (JSC::Interpreter::cti_op_lshift):
        (JSC::Interpreter::cti_op_bitand):
        (JSC::Interpreter::cti_op_rshift):
        (JSC::Interpreter::cti_op_bitnot):
        (JSC::Interpreter::cti_op_resolve_with_base):
        (JSC::Interpreter::cti_op_new_func_exp):
        (JSC::Interpreter::cti_op_mod):
        (JSC::Interpreter::cti_op_less):
        (JSC::Interpreter::cti_op_neq):
        (JSC::Interpreter::cti_op_post_dec):
        (JSC::Interpreter::cti_op_urshift):
        (JSC::Interpreter::cti_op_bitxor):
        (JSC::Interpreter::cti_op_new_regexp):
        (JSC::Interpreter::cti_op_bitor):
        (JSC::Interpreter::cti_op_call_eval):
        (JSC::Interpreter::cti_op_throw):
        (JSC::Interpreter::cti_op_get_pnames):
        (JSC::Interpreter::cti_op_next_pname):
        (JSC::Interpreter::cti_op_push_scope):
        (JSC::Interpreter::cti_op_pop_scope):
        (JSC::Interpreter::cti_op_typeof):
        (JSC::Interpreter::cti_op_is_undefined):
        (JSC::Interpreter::cti_op_is_boolean):
        (JSC::Interpreter::cti_op_is_number):
        (JSC::Interpreter::cti_op_is_string):
        (JSC::Interpreter::cti_op_is_object):
        (JSC::Interpreter::cti_op_is_function):
        (JSC::Interpreter::cti_op_stricteq):
        (JSC::Interpreter::cti_op_nstricteq):
        (JSC::Interpreter::cti_op_to_jsnumber):
        (JSC::Interpreter::cti_op_in):
        (JSC::Interpreter::cti_op_push_new_scope):
        (JSC::Interpreter::cti_op_jmp_scopes):
        (JSC::Interpreter::cti_op_put_by_index):
        (JSC::Interpreter::cti_op_switch_imm):
        (JSC::Interpreter::cti_op_switch_char):
        (JSC::Interpreter::cti_op_switch_string):
        (JSC::Interpreter::cti_op_del_by_val):
        (JSC::Interpreter::cti_op_put_getter):
        (JSC::Interpreter::cti_op_put_setter):
        (JSC::Interpreter::cti_op_new_error):
        (JSC::Interpreter::cti_op_debug):
        (JSC::Interpreter::cti_vm_throw):
        * interpreter/Interpreter.h:
        * jit/JIT.cpp:
        (JSC::):
        (JSC::JIT::privateCompileMainPass):
        (JSC::JIT::privateCompile):
        * jit/JIT.h:
        * jit/JITInlineMethods.h:
        (JSC::JIT::restoreArgumentReference):
        (JSC::JIT::restoreArgumentReferenceForTrampoline):
        * wtf/Platform.h:

2008-12-18  Cameron Zwarich  <zwarich@apple.com>

        Reviewed by Geoff Garen.

        Bug 21855: REGRESSION (r37323): Gmail complains about popup blocking when opening a link
        <https://bugs.webkit.org/show_bug.cgi?id=21855>
        <rdar://problem/6278244>

        Move DynamicGlobalObjectScope to JSGlobalObject.h so that it can be used
        from WebCore.

        * interpreter/Interpreter.cpp:
        * runtime/JSGlobalObject.h:
        (JSC::DynamicGlobalObjectScope::DynamicGlobalObjectScope):
        (JSC::DynamicGlobalObjectScope::~DynamicGlobalObjectScope):

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

        Reviewed by Gavin Barraclough.
        
        Fixed https://bugs.webkit.org/show_bug.cgi?id=22393
        Segfault when caching property accesses to primitive cells.
        
        Changed some asObject casts to asCell casts in cases where a primitive
        value may be a cell and not an object.
        
        Re-enabled property caching for primitives in cases where it had been
        disabled because of this bug.
        
        Updated a comment to better explain something Darin thought needed
        explaining in an old patch review.

        * interpreter/Interpreter.cpp:
        (JSC::countPrototypeChainEntriesAndCheckForProxies):
        (JSC::Interpreter::tryCacheGetByID):
        (JSC::Interpreter::tryCTICacheGetByID):
        (JSC::Interpreter::cti_op_get_by_id_self_fail):
        (JSC::Interpreter::cti_op_get_by_id_proto_list):

2008-12-17  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Cameron Zwarich.

        Fixes for Sunspider failures with the JIT enabled on x86-64.

        * assembler/MacroAssembler.h:
            Switch the order of the RegisterID & Address form of je32, to keep it consistent with jne32.
        * jit/JIT.cpp:
        * jit/JIT.h:
        * jit/JITInlineMethods.h:
            Port the m_ctiVirtualCall tramopline generation to use the MacroAssembler interface.
        * jit/JITCall.cpp:
            Fix bug in the non-optimizing code path, vptr check should have been to the memory address pointer
            to by the register, not to the register itself.
        * wrec/WRECGenerator.cpp:
            See assembler/MacroAssembler.h, above.

2008-12-17  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Sam Weinig.

        print("Hello, 64-bit jitted world!");
        Get hello-world working through the JIT, on x86-64.

        * assembler/X86Assembler.h:
            Fix encoding of opcode + RegisterID format instructions for 64-bit.
        * interpreter/Interpreter.cpp:
        * interpreter/Interpreter.h:
            Make VoidPtrPair actually be a pair of void*s.
            (Possibly should make this change for 32-bit Mac platforms, too - but won't change 32-bit behaviour in this patch).
        * jit/JIT.cpp:
        * jit/JIT.h:
            Provide names for the timeoutCheckRegister & callFrameRegister on x86-64,
            force x86-64 ctiTrampoline arguments onto the stack,
            implement the asm trampolines for x86-64,
            implement the restoreArgumentReference methods for x86-64 calling conventions.
        * jit/JITCall.cpp:
        * jit/JITInlineMethods.h:
        * wtf/Platform.h:
            Add switch settings to ENABLE(JIT), on PLATFORM(X86_64) (currently still disabled).

2008-12-17  Sam Weinig  <sam@webkit.org>

        Reviewed by Gavin Barraclough.

        Add more CodeBlock statistics.

        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::dumpStatistics):

2008-12-17  Sam Weinig  <sam@webkit.org>

        Reviewed by Darin Adler.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=22897
        <rdar://problem/6428342>
        Look into feasibility of discarding bytecode after native codegen

        Clear the bytecode Instruction vector at the end JIT generation.

        Saves 4.8 MB on Membuster head.

        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::dump): Add logging for the case that someone tries
        to dump the instructions of a CodeBlock that has had its bytecode
        vector cleared.
        (JSC::CodeBlock::CodeBlock): Initialize the instructionCount
        (JSC::CodeBlock::handlerForBytecodeOffset): Use instructionCount instead
        of the size of the instruction vector in the assertion.
        (JSC::CodeBlock::lineNumberForBytecodeOffset): Ditto.
        (JSC::CodeBlock::expressionRangeForBytecodeOffset): Ditto.
        (JSC::CodeBlock::getByIdExceptionInfoForBytecodeOffset): Ditto.
        (JSC::CodeBlock::functionRegisterForBytecodeOffset): Ditto.
        * bytecode/CodeBlock.h:
        (JSC::CodeBlock::setInstructionCount): Store the instruction vector size
        in debug builds for assertions.
        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::generate):
        * jit/JIT.cpp:
        (JSC::JIT::privateCompile): Clear the bytecode vector unless we
        have compiled with Opcode sampling where we will continue to require it

2008-12-17  Cary Clark  <caryclark@google.com>

        Reviewed by Darin Adler.
        Landed by Adam Barth.

        Add ENABLE_TEXT_CARET to permit the ANDROID platform
        to invalidate and draw the caret in a separate thread.

        * wtf/Platform.h:
        Default ENABLE_TEXT_CARET to 1.

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

        Reviewed by Darin Adler.

        Don't use unique context group in JSGlobalContextCreate() on Tiger or Leopard, take two.

        * API/JSContextRef.cpp: The previous patch that claimed to do this was making Tiger and
        Leopard always use unique context group instead.

2008-12-16  Sam Weinig  <sam@webkit.org>

        Reviewed by Geoffrey Garen.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=22838
        Remove dependency on the bytecode Instruction buffer in Interpreter::throwException
        Part of <rdar://problem/6428342>

        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::functionRegisterForBytecodeOffset): Added. Function to get
        a function Register index in a callFrame for a bytecode offset.
        (JSC::CodeBlock::shrinkToFit): Shrink m_getByIdExceptionInfo and m_functionRegisterInfos.
        * bytecode/CodeBlock.h:
        (JSC::FunctionRegisterInfo::FunctionRegisterInfo): Added.
        (JSC::CodeBlock::addFunctionRegisterInfo):
        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::emitCall):
        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::throwException): Use functionRegisterForBytecodeOffset in JIT
        mode.

2008-12-16  Sam Weinig  <sam@webkit.org>

        Reviewed by Gavin Barraclough.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=22837
        Remove dependency on the bytecode Instruction buffer in Interpreter::cti_op_call_NotJSFunction
        Part of <rdar://problem/6428342>

        * interpreter/CallFrame.h: Added comment regarding returnPC storing a void*.
        * interpreter/Interpreter.cpp:
        (JSC::bytecodeOffsetForPC): We no longer have any cases of the PC
        being in the instruction stream for JIT, so we can remove the check.
        (JSC::Interpreter::cti_op_call_NotJSFunction): Use the CTI_RETURN_ADDRESS
        as the call frame returnPC as it is only necessary for looking up when
        throwing an exception.
        * interpreter/RegisterFile.h:
        (JSC::RegisterFile::): Added comment regarding returnPC storing a void*.
        * jit/JIT.h: Remove ARG_instr4.
        * jit/JITCall.cpp:
        (JSC::JIT::compileOpCallSetupArgs): Don't pass the instruction pointer.

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

        Reviewed and landed by Cameron Zwarich.

        Preparatory work for fixing

        Bug 22887: Make UString::Rep use RefCounted rather than implementing its own ref counting
        <https://bugs.webkit.org/show_bug.cgi?id=22887>

        Change the various string translators used by Identifier:add() so that
        they never zero the ref count of a newly created UString::Rep.

        * runtime/Identifier.cpp:
        (JSC::CStringTranslator::translate):
        (JSC::Identifier::add):
        (JSC::UCharBufferTranslator::translate):

2008-12-16  Gavin Barraclough  <barraclough@apple.com>

        Build fix for 'doze.

        * assembler/AssemblerBuffer.h:

2008-12-16  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Cameron Zwarich.

        Make the JIT compile on x86-64.
        This largely involves populting the missing calls in MacroAssembler.h.
        In addition some reinterpret_casts need removing from the JIT, and the
        repatching property access code will need to be fully compiled out for
        now.  The changes in interpret.cpp are to reorder the functions so that
        the _generic forms come before all other property access methods, and
        then to place all property access methods other than the generic forms
        under control of the ENABLE_JIT_OPTIMIZE_PROPERTY_ACCESS macro.

        No performance impact.

        * assembler/AssemblerBuffer.h:
        (JSC::AssemblerBuffer::putInt64Unchecked):
        * assembler/MacroAssembler.h:
        (JSC::MacroAssembler::loadPtr):
        (JSC::MacroAssembler::load32):
        (JSC::MacroAssembler::storePtr):
        (JSC::MacroAssembler::storePtrWithRepatch):
        (JSC::MacroAssembler::store32):
        (JSC::MacroAssembler::poke):
        (JSC::MacroAssembler::move):
        (JSC::MacroAssembler::testImm64):
        (JSC::MacroAssembler::jePtr):
        (JSC::MacroAssembler::jnePtr):
        (JSC::MacroAssembler::jnzPtr):
        (JSC::MacroAssembler::jzPtr):
        * assembler/X86Assembler.h:
        (JSC::X86Assembler::):
        (JSC::X86Assembler::cmpq_rr):
        (JSC::X86Assembler::cmpq_rm):
        (JSC::X86Assembler::cmpq_im):
        (JSC::X86Assembler::testq_i32m):
        (JSC::X86Assembler::movl_mEAX):
        (JSC::X86Assembler::movl_i32r):
        (JSC::X86Assembler::movl_EAXm):
        (JSC::X86Assembler::movq_rm):
        (JSC::X86Assembler::movq_mEAX):
        (JSC::X86Assembler::movq_mr):
        (JSC::X86Assembler::movq_i64r):
        (JSC::X86Assembler::movl_mr):
        (JSC::X86Assembler::X86InstructionFormatter::oneByteOp64):
        (JSC::X86Assembler::X86InstructionFormatter::immediate64):
        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::cti_op_put_by_id_generic):
        (JSC::Interpreter::cti_op_get_by_id_generic):
        (JSC::Interpreter::cti_op_put_by_id):
        (JSC::Interpreter::cti_op_put_by_id_second):
        * jit/JIT.cpp:
        (JSC::JIT::privateCompileMainPass):
        (JSC::JIT::privateCompile):
        (JSC::JIT::privateCompileCTIMachineTrampolines):
        * jit/JITCall.cpp:
        (JSC::JIT::compileOpCallSetupArgs):
        (JSC::JIT::compileOpCall):
        * jit/JITPropertyAccess.cpp:
        (JSC::JIT::compileGetByIdHotPath):
        (JSC::JIT::compilePutByIdHotPath):
        * runtime/JSImmediate.h:
        (JSC::JSImmediate::makeInt):

2008-12-16  Cameron Zwarich  <zwarich@apple.com>

        Reviewed by Darin Adler.

        Bug 22869: REGRESSION (r38407): http://news.cnet.com/8301-13579_3-9953533-37.html crashes
        <https://bugs.webkit.org/show_bug.cgi?id=22869>
        <rdar://problem/6402499>

        Before r38407, Structure::m_nameInPrevious was ref'd due to it being
        stored in a PropertyMap. However, PropertyMaps are created lazily after
        r38407, so Structure::m_nameInPrevious is not necessarily ref'd while
        it is being used. Making it a RefPtr instead of a raw pointer fixes
        the problem.

        Unfortunately, the crash in the bug is rather intermittent, and it is
        impossible to add an assertion in UString::Ref::ref() to catch this bug
        because some users of UString::Rep deliberately zero out the reference
        count. Therefore, there is no layout test accompanying this bug fix.

        * runtime/Structure.cpp:
        (JSC::Structure::~Structure): Use get().
        (JSC::Structure::materializePropertyMap): Use get().
        (JSC::Structure::addPropertyTransitionToExistingStructure): Use get().
        (JSC::Structure::addPropertyTransition): Use get().
        * runtime/Structure.h: Make Structure::m_nameInPrevious a RefPtr instead
        of a raw pointer.

2008-12-16  Nikolas Zimmermann  <nikolas.zimmermann@torchmobile.com>

        Not reviewed. Attempt to fix win build. No 'using namespace WTF' in this file, needs manual WTF:: prefix.
        Not sure why the build works as is here.

        * runtime/MathObject.cpp:
        (JSC::mathProtoFuncRandom):

2008-12-16  Nikolas Zimmermann  <nikolas.zimmermann@torchmobile.com>

        Reviewed by Darin Adler.

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

        Unify random number generation in JavaScriptCore & WebCore, by introducing
        wtf/RandomNumber.h and moving wtf_random/wtf_random_init out of MathExtras.h.

        wtf_random_init() has been renamed to initializeRandomNumberGenerator() and
        lives in it's own private header: wtf/RandomNumberSeed.h, only intended to
        be used from within JavaScriptCore.

        wtf_random() has been renamed to randomNumber() and lives in a public header
        wtf/RandomNumber.h, usable from within JavaScriptCore & WebCore. It encapsulates
        the code taking care of initializing the random number generator (only when
        building without ENABLE(JSC_MULTIPLE_THREADS), otherwhise initializeThreading()
        already took care of that).

        Functional change on darwin: Use random() instead of rand(), as it got a larger
        period (more randomness). HTMLFormElement already contains this implementation
        and I just moved it in randomNumber(), as  special case for PLATFORM(DARWIN).

        * GNUmakefile.am: Add RandomNumber.(cpp/h) / RandomNumberSeed.h.
        * JavaScriptCore.exp: Ditto.
        * JavaScriptCore.pri: Ditto.
        * JavaScriptCore.scons: Ditto.
        * JavaScriptCore.vcproj/WTF/WTF.vcproj: Ditto.
        * JavaScriptCore.xcodeproj/project.pbxproj: Ditto.
        * JavaScriptCoreSources.bkl: Ditto.
        * runtime/MathObject.cpp: Use new WTF::randomNumber() functionality.
        (JSC::mathProtoFuncRandom):
        * wtf/MathExtras.h: Move wtf_random / wtf_random_init to new files.
        * wtf/RandomNumber.cpp: Added.
        (WTF::randomNumber):
        * wtf/RandomNumber.h: Added.
        * wtf/RandomNumberSeed.h: Added. Internal usage within JSC only.
        (WTF::initializeRandomNumberGenerator):
        * wtf/ThreadingGtk.cpp: Rename wtf_random_init() to initializeRandomNumberGenerator().
        (WTF::initializeThreading):
        * wtf/ThreadingPthreads.cpp: Ditto.
        (WTF::initializeThreading):
        * wtf/ThreadingQt.cpp: Ditto.
        (WTF::initializeThreading):
        * wtf/ThreadingWin.cpp: Ditto.
        (WTF::initializeThreading):

2008-12-16 Yael Aharon <yael.aharon@nokia.com>

        Reviewed by Tor Arne Vestbø.

        Qt/Win build fix

        * JavaScriptCore.pri:

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

        Reviewed by Cameron Zwarich.

        Fix the build with GCC 4.0.

        * Configurations/JavaScriptCore.xcconfig:  GCC 4.0 appears to have a bug when compiling with -funwind-tables on,
        so don't use it with that compiler version.

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-15  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin Adler.

        Don't use unique context group in JSGlobalContextCreate() on Tiger or Leopard.

        * API/JSContextRef.cpp: (JSGlobalContextCreate):

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

        Reviewed by Darin Adler.

        <rdar://problem/6445089> Mach ports leak from worker threads

        * interpreter/Interpreter.cpp: (JSC::getCPUTime):
        Deallocate the thread self port.

2008-12-15  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Mark Rowe.

        Construct stack frames in JIT code, so that backtracing can still work.
        <rdar://problem/6447870> JIT should play nice with attempts to take stack traces

        * jit/JIT.cpp:
        (JSC::):
        (JSC::JIT::privateCompileMainPass):

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

        Reviewed by Gavin Barraclough.

        <rdar://problem/6402262> JavaScriptCore needs exception handling tables in order to get stack traces without frame pointers

        * Configurations/JavaScriptCore.xcconfig:

2008-12-15  Gavin Barraclough  <barraclough@apple.com>

        Rubber stamped by Mark Rowe.

        Revert r39226 / Bug 22818: Unify JIT callback argument access OS X / Windows
        This causes Acid3 failures – reverting for now & will revisit later.
        https://bugs.webkit.org/show_bug.cgi?id=22873

        * interpreter/Interpreter.h:
        * jit/JIT.cpp:
        (JSC::JIT::privateCompileCTIMachineTrampolines):
        * jit/JIT.h:
        * jit/JITInlineMethods.h:
        (JSC::JIT::restoreArgumentReference):
        (JSC::JIT::restoreArgumentReferenceForTrampoline):
        (JSC::JIT::emitCTICall_internal):
        * jit/JITPropertyAccess.cpp:
        (JSC::JIT::privateCompilePutByIdTransition):
        * wtf/Platform.h:

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

        Reviewed by Sam Weinig.

        - fix <rdar://problem/6427048> crash due to infinite recursion after setting window.__proto__ = window

        Replaced toGlobalObject with the more generally useful unwrappedObject and used it to
        fix the cycle detection code in put(__proto__).

        * JavaScriptCore.exp: Updated.

        * runtime/JSGlobalObject.cpp: Removed toGlobalObject. We now use unwrappedObject instead.
        * runtime/JSGlobalObject.h:
        (JSC::JSGlobalObject::isGlobalObject): Ditto.

        * runtime/JSGlobalObjectFunctions.cpp:
        (JSC::globalFuncEval): Use unwrappedObject and isGlobalObject here rather than toGlobalObject.

        * runtime/JSObject.cpp:
        (JSC::JSObject::put): Rewrote prototype cycle checking loop. Use unwrappedObject in the loop now.
        (JSC::JSObject::unwrappedObject): Replaced toGlobalObject with this new function.
        * runtime/JSObject.h: More of the same.

2008-12-15  Steve Falkenburg  <sfalken@apple.com>

        Windows build fix.
        
        Visual Studio requires visibility of forward declarations to match class declaration.

        * assembler/X86Assembler.h:

2008-12-15  Gustavo Noronha Silva  <kov@kov.eti.br>

        Reviewed by Mark Rowe.

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

        GTK+ build fix.

        * GNUmakefile.am:

2008-12-15  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Geoff Garen.

        Add support to X86Assembler emitting instructions that access all 16 registers on x86-64.
        Add a new formating class, that is reponsible for both emitting the opcode bytes and the
        ModRm  bytes of an instruction in a single call; this can insert the REX byte as necessary
        before the opcode, but has access to the register numbers to build the REX.

        * assembler/AssemblerBuffer.h:
        (JSC::AssemblerBuffer::isAligned):
        (JSC::AssemblerBuffer::data):
        * assembler/MacroAssembler.h:
        (JSC::MacroAssembler::addPtr):
        (JSC::MacroAssembler::add32):
        (JSC::MacroAssembler::and32):
        (JSC::MacroAssembler::or32):
        (JSC::MacroAssembler::sub32):
        (JSC::MacroAssembler::xor32):
        (JSC::MacroAssembler::loadPtr):
        (JSC::MacroAssembler::load32):
        (JSC::MacroAssembler::load16):
        (JSC::MacroAssembler::storePtr):
        (JSC::MacroAssembler::storePtrWithRepatch):
        (JSC::MacroAssembler::store32):
        (JSC::MacroAssembler::pop):
        (JSC::MacroAssembler::push):
        (JSC::MacroAssembler::compareImm32ForBranch):
        (JSC::MacroAssembler::compareImm32ForBranchEquality):
        (JSC::MacroAssembler::testImm32):
        (JSC::MacroAssembler::jae32):
        (JSC::MacroAssembler::jb32):
        (JSC::MacroAssembler::je16):
        (JSC::MacroAssembler::jg32):
        (JSC::MacroAssembler::jnePtr):
        (JSC::MacroAssembler::jne32):
        (JSC::MacroAssembler::jump):
        * assembler/X86Assembler.h:
        (JSC::X86::):
        (JSC::X86Assembler::):
        (JSC::X86Assembler::size):
        (JSC::X86Assembler::push_r):
        (JSC::X86Assembler::pop_r):
        (JSC::X86Assembler::push_i32):
        (JSC::X86Assembler::push_m):
        (JSC::X86Assembler::pop_m):
        (JSC::X86Assembler::addl_rr):
        (JSC::X86Assembler::addl_mr):
        (JSC::X86Assembler::addl_ir):
        (JSC::X86Assembler::addq_ir):
        (JSC::X86Assembler::addl_im):
        (JSC::X86Assembler::andl_rr):
        (JSC::X86Assembler::andl_ir):
        (JSC::X86Assembler::orl_rr):
        (JSC::X86Assembler::orl_mr):
        (JSC::X86Assembler::orl_ir):
        (JSC::X86Assembler::subl_rr):
        (JSC::X86Assembler::subl_mr):
        (JSC::X86Assembler::subl_ir):
        (JSC::X86Assembler::subl_im):
        (JSC::X86Assembler::xorl_rr):
        (JSC::X86Assembler::xorl_ir):
        (JSC::X86Assembler::sarl_i8r):
        (JSC::X86Assembler::sarl_CLr):
        (JSC::X86Assembler::shll_i8r):
        (JSC::X86Assembler::shll_CLr):
        (JSC::X86Assembler::imull_rr):
        (JSC::X86Assembler::imull_i32r):
        (JSC::X86Assembler::idivl_r):
        (JSC::X86Assembler::cmpl_rr):
        (JSC::X86Assembler::cmpl_rm):
        (JSC::X86Assembler::cmpl_mr):
        (JSC::X86Assembler::cmpl_ir):
        (JSC::X86Assembler::cmpl_ir_force32):
        (JSC::X86Assembler::cmpl_im):
        (JSC::X86Assembler::cmpl_im_force32):
        (JSC::X86Assembler::cmpw_rm):
        (JSC::X86Assembler::testl_rr):
        (JSC::X86Assembler::testl_i32r):
        (JSC::X86Assembler::testl_i32m):
        (JSC::X86Assembler::testq_rr):
        (JSC::X86Assembler::testq_i32r):
        (JSC::X86Assembler::testb_i8r):
        (JSC::X86Assembler::sete_r):
        (JSC::X86Assembler::setz_r):
        (JSC::X86Assembler::setne_r):
        (JSC::X86Assembler::setnz_r):
        (JSC::X86Assembler::cdq):
        (JSC::X86Assembler::xchgl_rr):
        (JSC::X86Assembler::movl_rr):
        (JSC::X86Assembler::movl_rm):
        (JSC::X86Assembler::movl_mr):
        (JSC::X86Assembler::movl_i32r):
        (JSC::X86Assembler::movl_i32m):
        (JSC::X86Assembler::movq_rr):
        (JSC::X86Assembler::movq_rm):
        (JSC::X86Assembler::movq_mr):
        (JSC::X86Assembler::movzwl_mr):
        (JSC::X86Assembler::movzbl_rr):
        (JSC::X86Assembler::leal_mr):
        (JSC::X86Assembler::call):
        (JSC::X86Assembler::jmp):
        (JSC::X86Assembler::jmp_r):
        (JSC::X86Assembler::jmp_m):
        (JSC::X86Assembler::jne):
        (JSC::X86Assembler::jnz):
        (JSC::X86Assembler::je):
        (JSC::X86Assembler::jl):
        (JSC::X86Assembler::jb):
        (JSC::X86Assembler::jle):
        (JSC::X86Assembler::jbe):
        (JSC::X86Assembler::jge):
        (JSC::X86Assembler::jg):
        (JSC::X86Assembler::ja):
        (JSC::X86Assembler::jae):
        (JSC::X86Assembler::jo):
        (JSC::X86Assembler::jp):
        (JSC::X86Assembler::js):
        (JSC::X86Assembler::addsd_rr):
        (JSC::X86Assembler::addsd_mr):
        (JSC::X86Assembler::cvtsi2sd_rr):
        (JSC::X86Assembler::cvttsd2si_rr):
        (JSC::X86Assembler::movd_rr):
        (JSC::X86Assembler::movsd_rm):
        (JSC::X86Assembler::movsd_mr):
        (JSC::X86Assembler::mulsd_rr):
        (JSC::X86Assembler::mulsd_mr):
        (JSC::X86Assembler::pextrw_irr):
        (JSC::X86Assembler::subsd_rr):
        (JSC::X86Assembler::subsd_mr):
        (JSC::X86Assembler::ucomis_rr):
        (JSC::X86Assembler::int3):
        (JSC::X86Assembler::ret):
        (JSC::X86Assembler::predictNotTaken):
        (JSC::X86Assembler::label):
        (JSC::X86Assembler::align):
        (JSC::X86Assembler::link):
        (JSC::X86Assembler::executableCopy):
        (JSC::X86Assembler::X86InstructionFormater::prefix):
        (JSC::X86Assembler::X86InstructionFormater::oneByteOp):
        (JSC::X86Assembler::X86InstructionFormater::twoByteOp):
        (JSC::X86Assembler::X86InstructionFormater::oneByteOp64):
        (JSC::X86Assembler::X86InstructionFormater::oneByteOp8):
        (JSC::X86Assembler::X86InstructionFormater::twoByteOp8):
        (JSC::X86Assembler::X86InstructionFormater::instructionImmediate8):
        (JSC::X86Assembler::X86InstructionFormater::instructionImmediate32):
        (JSC::X86Assembler::X86InstructionFormater::instructionRel32):
        (JSC::X86Assembler::X86InstructionFormater::size):
        (JSC::X86Assembler::X86InstructionFormater::isAligned):
        (JSC::X86Assembler::X86InstructionFormater::data):
        (JSC::X86Assembler::X86InstructionFormater::executableCopy):
        (JSC::X86Assembler::X86InstructionFormater::registerModRM):
        (JSC::X86Assembler::X86InstructionFormater::memoryModRM):
        * jit/JIT.cpp:
        (JSC::JIT::privateCompileMainPass):
        (JSC::JIT::privateCompile):
        (JSC::JIT::privateCompileCTIMachineTrampolines):
        * jit/JITArithmetic.cpp:
        (JSC::JIT::putDoubleResultToJSNumberCellOrJSImmediate):
        (JSC::JIT::compileBinaryArithOp):
        * jit/JITCall.cpp:
        (JSC::JIT::compileOpCall):
        (JSC::JIT::compileOpCallSlowCase):
        * jit/JITPropertyAccess.cpp:
        (JSC::JIT::compileGetByIdHotPath):
        (JSC::JIT::compilePutByIdHotPath):
        (JSC::JIT::privateCompilePutByIdTransition):
        (JSC::JIT::privateCompilePatchGetArrayLength):
        (JSC::JIT::privateCompileGetByIdProto):
        (JSC::JIT::privateCompileGetByIdProtoList):
        (JSC::JIT::privateCompileGetByIdChainList):
        (JSC::JIT::privateCompileGetByIdChain):

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

        * interpreter/RegisterFile.h: Tweak include formatting.

2008-12-15  Holger Hans Peter Freyther  <zecke@selfish.org>

        Build fix for Gtk+.

        * interpreter/RegisterFile.h: Include stdio.h for fprintf

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

        Reviewed by Oliver Hunt.

        <rdar://problem/6444455> Worker Thread crash running multiple workers for a moderate amount of time

        * interpreter/RegisterFile.h: (JSC::RegisterFile::RegisterFile):
        Improve error handling: if mmap fails, crash immediately, and print out the reason.

2008-12-13  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Cameron Zwarich.

        Re-enable WREC on 64-bit.
        Implements one of the MacroAssembler::jnzPtr methods, previously only implemented for 32-bit x86.

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

        * assembler/MacroAssembler.h:
        (JSC::MacroAssembler::testImm64):
        (JSC::MacroAssembler::jnzPtr):
        * assembler/X86Assembler.h:
        (JSC::X86Assembler::testq_i32r):
        (JSC::X86Assembler::testq_rr):
        * wtf/Platform.h:

2008-12-13  Gavin Barraclough  <barraclough@apple.com>

        Fix PPC builds.

        * assembler/MacroAssembler.h:

2008-12-13  Gavin Barraclough  <barraclough@apple.com>

        Build fix only, no review.

        * bytecode/CodeBlock.h:

2008-12-13  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Cameron Zwarich.

        Port the remainder of the JIT, bar calling convention related code, and code
        implementing optimizations which can be disabled, to use the MacroAssembler.

        * assembler/MacroAssembler.h:
        (JSC::MacroAssembler::DataLabelPtr::DataLabelPtr):
        (JSC::MacroAssembler::RepatchBuffer::RepatchBuffer):
        (JSC::MacroAssembler::RepatchBuffer::link):
        (JSC::MacroAssembler::RepatchBuffer::addressOf):
        (JSC::MacroAssembler::RepatchBuffer::setPtr):
        (JSC::MacroAssembler::addPtr):
        (JSC::MacroAssembler::lshift32):
        (JSC::MacroAssembler::mod32):
        (JSC::MacroAssembler::rshift32):
        (JSC::MacroAssembler::storePtrWithRepatch):
        (JSC::MacroAssembler::jnzPtr):
        (JSC::MacroAssembler::jzPtr):
        (JSC::MacroAssembler::jump):
        (JSC::MacroAssembler::label):
        * assembler/X86Assembler.h:
        (JSC::X86Assembler::):
        (JSC::X86Assembler::xchgl_rr):
        (JSC::X86Assembler::jmp_m):
        (JSC::X86Assembler::repatchAddress):
        (JSC::X86Assembler::getRelocatedAddress):
        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::CodeBlock):
        * bytecode/CodeBlock.h:
        (JSC::JITCodeRef::JITCodeRef):
        (JSC::CodeBlock::setJITCode):
        (JSC::CodeBlock::jitCode):
        (JSC::CodeBlock::executablePool):
        * jit/JIT.cpp:
        (JSC::JIT::privateCompileMainPass):
        (JSC::JIT::privateCompileLinkPass):
        (JSC::JIT::privateCompile):
        (JSC::JIT::privateCompileCTIMachineTrampolines):
        * jit/JIT.h:
        (JSC::CallRecord::CallRecord):
        (JSC::JumpTable::JumpTable):
        (JSC::JIT::emitCTICall):
        (JSC::JIT::JSRInfo::JSRInfo):
        * jit/JITArithmetic.cpp:
        * jit/JITCall.cpp:
        * jit/JITInlineMethods.h:
        (JSC::JIT::emitNakedCall):
        (JSC::JIT::emitCTICall_internal):
        (JSC::JIT::checkStructure):
        (JSC::JIT::emitFastArithDeTagImmediateJumpIfZero):
        (JSC::JIT::addSlowCase):
        (JSC::JIT::addJump):
        (JSC::JIT::emitJumpSlowToHot):
        * jit/JITPropertyAccess.cpp:
        (JSC::JIT::privateCompileGetByIdChainList):
        (JSC::JIT::privateCompileGetByIdChain):

2008-12-12  Cameron Zwarich  <zwarich@apple.com>

        Reviewed by Sam Weinig.

        Fix the failures of the following layout tests, which regressed in
        r39255:

        fast/dom/StyleSheet/ownerNode-lifetime-2.html
        fast/xsl/transform-xhr-doc.xhtml

        The binary search in CodeBlock::getByIdExceptionInfoForBytecodeOffset()
        doesn't guarantee that it actually finds a match, so add an explicit check
        for this.

        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::getByIdExceptionInfoForBytecodeOffset):

2008-12-12  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Cameron Zwarich.

        Replace emitPutCallArg methods with emitPutJITStubArg methods.  Primarily to make the argument numbering
        more sensible (1-based incrementing by 1, rather than 0-based incrementing by 4).  The CTI name also seems
        to be being deprecated from the code generally.

        * jit/JIT.cpp:
        (JSC::JIT::privateCompileMainPass):
        (JSC::JIT::privateCompileSlowCases):
        (JSC::JIT::privateCompileCTIMachineTrampolines):
        * jit/JIT.h:
        * jit/JITArithmetic.cpp:
        (JSC::JIT::compileBinaryArithOp):
        (JSC::JIT::compileBinaryArithOpSlowCase):
        * jit/JITCall.cpp:
        (JSC::JIT::compileOpCallSetupArgs):
        (JSC::JIT::compileOpCallEvalSetupArgs):
        (JSC::JIT::compileOpConstructSetupArgs):
        (JSC::JIT::compileOpCall):
        * jit/JITInlineMethods.h:
        (JSC::JIT::emitPutJITStubArg):
        (JSC::JIT::emitPutJITStubArgConstant):
        (JSC::JIT::emitGetJITStubArg):
        (JSC::JIT::emitPutJITStubArgFromVirtualRegister):
        * jit/JITPropertyAccess.cpp:
        (JSC::JIT::compileGetByIdHotPath):
        (JSC::JIT::compilePutByIdHotPath):
        (JSC::JIT::compileGetByIdSlowCase):
        (JSC::JIT::compilePutByIdSlowCase):

2008-12-12  Gavin Barraclough  <barraclough@apple.com>

        Fix windows builds.

        * jit/JIT.cpp:
        (JSC::JIT::privateCompileMainPass):
        (JSC::JIT::privateCompileSlowCases):
        (JSC::JIT::privateCompile):

2008-12-12  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Geoff Garen.

        Remove loop counter 'i' from the JIT generation passes, replace with a member m_bytecodeIndex.

        No impact on performance.

        * jit/JIT.cpp:
        (JSC::JIT::compileOpStrictEq):
        (JSC::JIT::emitSlowScriptCheck):
        (JSC::JIT::privateCompileMainPass):
        (JSC::JIT::privateCompileSlowCases):
        (JSC::JIT::privateCompile):
        * jit/JIT.h:
        (JSC::CallRecord::CallRecord):
        (JSC::JmpTable::JmpTable):
        (JSC::JIT::emitCTICall):
        * jit/JITArithmetic.cpp:
        (JSC::JIT::compileBinaryArithOp):
        (JSC::JIT::compileBinaryArithOpSlowCase):
        * jit/JITCall.cpp:
        (JSC::JIT::compileOpCall):
        (JSC::JIT::compileOpCallSlowCase):
        * jit/JITInlineMethods.h:
        (JSC::JIT::emitGetVirtualRegister):
        (JSC::JIT::emitGetVirtualRegisters):
        (JSC::JIT::emitNakedCall):
        (JSC::JIT::emitCTICall_internal):
        (JSC::JIT::emitJumpSlowCaseIfJSCell):
        (JSC::JIT::emitJumpSlowCaseIfNotJSCell):
        (JSC::JIT::emitJumpSlowCaseIfNotImmNum):
        (JSC::JIT::emitJumpSlowCaseIfNotImmNums):
        (JSC::JIT::emitFastArithIntToImmOrSlowCase):
        (JSC::JIT::addSlowCase):
        (JSC::JIT::addJump):
        (JSC::JIT::emitJumpSlowToHot):
        * jit/JITPropertyAccess.cpp:
        (JSC::JIT::compileGetByIdHotPath):
        (JSC::JIT::compileGetByIdSlowCase):
        (JSC::JIT::compilePutByIdHotPath):
        (JSC::JIT::compilePutByIdSlowCase):

2008-12-12  Sam Weinig  <sam@webkit.org>

        Reviewed by Cameron Zwarich.

        <rdar://problem/6428342> Look into feasibility of discarding bytecode after native codegen

        Move more JIT functionality to using offsets into the Instruction buffer
        instead of raw pointers. Two to go!

        * interpreter/Interpreter.cpp:
        (JSC::bytecodeOffsetForPC): Rename from vPCForPC.
        (JSC::Interpreter::resolve): Pass offset to exception helper.
        (JSC::Interpreter::resolveSkip): Ditto.
        (JSC::Interpreter::resolveGlobal): Ditto.
        (JSC::Interpreter::resolveBaseAndProperty): Ditto.
        (JSC::Interpreter::resolveBaseAndFunc): Ditto.
        (JSC::isNotObject): Ditto.
        (JSC::Interpreter::unwindCallFrame): Call bytecodeOffsetForPC.
        (JSC::Interpreter::throwException): Use offsets instead of vPCs.
        (JSC::Interpreter::privateExecute): Pass offset to exception helper.
        (JSC::Interpreter::retrieveLastCaller): Ditto.
        (JSC::Interpreter::cti_op_instanceof): Ditto.
        (JSC::Interpreter::cti_op_call_NotJSFunction): Ditto.
        (JSC::Interpreter::cti_op_resolve): Pass offset to exception helper.
        (JSC::Interpreter::cti_op_construct_NotJSConstruct): Ditto.
        (JSC::Interpreter::cti_op_resolve_func): Ditto.
        (JSC::Interpreter::cti_op_resolve_skip): Ditto.
        (JSC::Interpreter::cti_op_resolve_global): Ditto.
        (JSC::Interpreter::cti_op_resolve_with_base): Ditto.
        (JSC::Interpreter::cti_op_throw): Ditto.
        (JSC::Interpreter::cti_op_in): Ditto.
        (JSC::Interpreter::cti_vm_throw): Ditto.
        * interpreter/Interpreter.h:

        * jit/JIT.cpp:
        (JSC::JIT::privateCompileMainPass): Don't pass unnecessary vPC to stub.
        * jit/JIT.h: Remove ARG_instr1 - ARG_instr3 and ARG_instr5 - ARG_instr6.
        * jit/JITCall.cpp:
        (JSC::JIT::compileOpCallEvalSetupArgs): Don't pass unnecessary vPC to stub..
        (JSC::JIT::compileOpConstructSetupArgs): Ditto.

        * runtime/ExceptionHelpers.cpp:
        (JSC::createUndefinedVariableError): Take an offset instead of vPC.
        (JSC::createInvalidParamError): Ditto.
        (JSC::createNotAConstructorError): Ditto.
        (JSC::createNotAFunctionError): Ditto.
        (JSC::createNotAnObjectError): Ditto.
        * runtime/ExceptionHelpers.h:

2008-12-12  Cameron Zwarich  <zwarich@apple.com>

        Reviewed by Oliver Hunt.

        Bug 22835: Crash during bytecode generation when comparing to null
        <https://bugs.webkit.org/show_bug.cgi?id=22835>
        <rdar://problem/6286749>

        Change the special cases in bytecode generation for comparison to null
        to use tempDestination().

        * parser/Nodes.cpp:
        (JSC::BinaryOpNode::emitBytecode):
        (JSC::EqualNode::emitBytecode):

2008-12-12  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Geoff Garen.

        Move slow-cases of JIT code generation over to the MacroAssembler interface.

        * assembler/MacroAssembler.h:
        (JSC::MacroAssembler::Label::Label):
        (JSC::MacroAssembler::jae32):
        (JSC::MacroAssembler::jg32):
        (JSC::MacroAssembler::jzPtr):
        * jit/JIT.cpp:
        (JSC::JIT::privateCompileSlowCases):
        (JSC::JIT::privateCompile):
        (JSC::JIT::emitGetVariableObjectRegister):
        (JSC::JIT::emitPutVariableObjectRegister):
        * jit/JIT.h:
        (JSC::SlowCaseEntry::SlowCaseEntry):
        (JSC::JIT::getSlowCase):
        (JSC::JIT::linkSlowCase):
        * jit/JITArithmetic.cpp:
        (JSC::JIT::compileBinaryArithOpSlowCase):
        * jit/JITCall.cpp:
        (JSC::JIT::compileOpCallInitializeCallFrame):
        (JSC::JIT::compileOpCall):
        (JSC::JIT::compileOpCallSlowCase):
        * jit/JITInlineMethods.h:
        (JSC::JIT::emitJumpSlowCaseIfNotJSCell):
        (JSC::JIT::linkSlowCaseIfNotJSCell):
        * jit/JITPropertyAccess.cpp:
        (JSC::JIT::compileGetByIdHotPath):
        (JSC::JIT::compilePutByIdHotPath):
        (JSC::JIT::compileGetByIdSlowCase):
        (JSC::JIT::compilePutByIdSlowCase):

2008-12-12  Cameron Zwarich  <zwarich@apple.com>

        Reviewed by Sam Weinig.

        Bug 22828: Do not inspect bytecode instruction stream for op_get_by_id exception information
        <https://bugs.webkit.org/show_bug.cgi?id=22828>

        In order to remove the bytecode instruction stream after generating
        native code, all inspection of bytecode instructions at runtime must
        be removed. One particular instance of this is the special handling of
        exceptions thrown by the op_get_by_id emitted directly before an
        op_construct or an op_instanceof. This patch moves that information to
        an auxiliary data structure in CodeBlock.

        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::getByIdExceptionInfoForBytecodeOffset):
        * bytecode/CodeBlock.h:
        (JSC::CodeBlock::addGetByIdExceptionInfo):
        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::emitConstruct):
        * bytecompiler/BytecodeGenerator.h:
        (JSC::BytecodeGenerator::emitGetByIdExceptionInfo):
        * parser/Nodes.cpp:
        (JSC::InstanceOfNode::emitBytecode):
        * runtime/ExceptionHelpers.cpp:
        (JSC::createNotAnObjectError):

2008-12-12  Sam Weinig  <sam@webkit.org>

        Reviewed by Geoffrey Garen.

        Change exception information accessors to take offsets into the bytecode
        instruction buffer instead of pointers so that they can work even even
        if the bytecode buffer is purged.

        * bytecode/CodeBlock.cpp:
        (JSC::instructionOffsetForNth):
        (JSC::CodeBlock::handlerForBytecodeOffset):
        (JSC::CodeBlock::lineNumberForBytecodeOffset):
        (JSC::CodeBlock::expressionRangeForBytecodeOffset):
        * bytecode/CodeBlock.h:
        * bytecode/SamplingTool.cpp:
        (JSC::SamplingTool::dump):
        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::throwException):
        (JSC::Interpreter::privateExecute):
        (JSC::Interpreter::retrieveLastCaller):
        * jit/JIT.cpp:
        (JSC::JIT::privateCompileMainPass):
        * runtime/ExceptionHelpers.cpp:
        (JSC::createUndefinedVariableError):
        (JSC::createInvalidParamError):
        (JSC::createNotAConstructorError):
        (JSC::createNotAFunctionError):
        (JSC::createNotAnObjectError):

2008-12-12  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Cameron Zwarich.
        
        Tiny bit of refactoring in quantifier generation.

        * wrec/WRECGenerator.cpp:
        (JSC::WREC::Generator::generateNonGreedyQuantifier):
        (JSC::WREC::Generator::generateGreedyQuantifier):

2008-12-11  Sam Weinig  <sam@webkit.org>

        Reviewed by Geoffrey Garen.

        Remove dependancy on having the Instruction buffer in order to
        deref Structures used for property access and global resolves.
        Instead, we put references to the necessary Structures in auxiliary
        data structures on the CodeBlock. This is not an ideal solution,
        as we still pay for having the Structures in two places and we
        would like to eventually just hold on to offsets into the machine
        code buffer.

        - Also removes CodeBlock bloat in non-JIT by #ifdefing the JIT
          only data structures.

        * GNUmakefile.am:
        * JavaScriptCore.pri:
        * JavaScriptCore.scons:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * JavaScriptCoreSources.bkl:
        * bytecode/CodeBlock.cpp:
        (JSC::isGlobalResolve):
        (JSC::isPropertyAccess):
        (JSC::instructionOffsetForNth):
        (JSC::printGlobalResolveInfo):
        (JSC::printStructureStubInfo):
        (JSC::CodeBlock::printStructures):
        (JSC::CodeBlock::dump):
        (JSC::CodeBlock::~CodeBlock):
        (JSC::CodeBlock::shrinkToFit):
        * bytecode/CodeBlock.h:
        (JSC::GlobalResolveInfo::GlobalResolveInfo):
        (JSC::getNativePC):
        (JSC::CodeBlock::instructions):
        (JSC::CodeBlock::getStubInfo):
        (JSC::CodeBlock::getBytecodeIndex):
        (JSC::CodeBlock::addPropertyAccessInstruction):
        (JSC::CodeBlock::addGlobalResolveInstruction):
        (JSC::CodeBlock::numberOfStructureStubInfos):
        (JSC::CodeBlock::addStructureStubInfo):
        (JSC::CodeBlock::structureStubInfo):
        (JSC::CodeBlock::addGlobalResolveInfo):
        (JSC::CodeBlock::globalResolveInfo):
        (JSC::CodeBlock::numberOfCallLinkInfos):
        (JSC::CodeBlock::addCallLinkInfo):
        (JSC::CodeBlock::callLinkInfo):
        * bytecode/Instruction.h:
        (JSC::PolymorphicAccessStructureList::PolymorphicStubInfo::set):
        (JSC::PolymorphicAccessStructureList::PolymorphicAccessStructureList):
        * bytecode/Opcode.h:
        (JSC::):
        * bytecode/StructureStubInfo.cpp: Copied from bytecode/CodeBlock.cpp.
        (JSC::StructureStubInfo::deref):
        * bytecode/StructureStubInfo.h: Copied from bytecode/CodeBlock.h.
        (JSC::StructureStubInfo::StructureStubInfo):
        (JSC::StructureStubInfo::initGetByIdSelf):
        (JSC::StructureStubInfo::initGetByIdProto):
        (JSC::StructureStubInfo::initGetByIdChain):
        (JSC::StructureStubInfo::initGetByIdSelfList):
        (JSC::StructureStubInfo::initGetByIdProtoList):
        (JSC::StructureStubInfo::initPutByIdTransition):
        (JSC::StructureStubInfo::initPutByIdReplace):
        (JSC::StructureStubInfo::):
        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::emitResolve):
        (JSC::BytecodeGenerator::emitGetById):
        (JSC::BytecodeGenerator::emitPutById):
        (JSC::BytecodeGenerator::emitCall):
        (JSC::BytecodeGenerator::emitConstruct):
        (JSC::BytecodeGenerator::emitCatch):
        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::tryCTICachePutByID):
        (JSC::Interpreter::tryCTICacheGetByID):
        (JSC::Interpreter::cti_op_get_by_id_self_fail):
        (JSC::getPolymorphicAccessStructureListSlot):
        (JSC::Interpreter::cti_op_get_by_id_proto_list):
        (JSC::Interpreter::cti_op_resolve_global):
        * jit/JIT.cpp:
        (JSC::JIT::JIT):
        (JSC::JIT::privateCompileMainPass):
        (JSC::JIT::privateCompileSlowCases):
        (JSC::JIT::privateCompile):
        * jit/JITPropertyAccess.cpp:
        (JSC::JIT::compileGetByIdHotPath):
        (JSC::JIT::compilePutByIdHotPath):
        (JSC::JIT::compileGetByIdSlowCase):
        (JSC::JIT::compilePutByIdSlowCase):
        (JSC::JIT::privateCompileGetByIdSelfList):
        (JSC::JIT::privateCompileGetByIdProtoList):
        (JSC::JIT::privateCompileGetByIdChainList):

2008-12-11  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Oliver Hunt.

        Remove CTI_ARGUMENTS mode, use va_start implementation on Windows,
        unifying JIT callback (cti_*) argument access on OS X & Windows

        No performance impact.

        * interpreter/Interpreter.h:
        * jit/JIT.cpp:
        (JSC::JIT::privateCompileCTIMachineTrampolines):
        * jit/JIT.h:
        * jit/JITInlineMethods.h:
        (JSC::JIT::emitCTICall):
        * jit/JITPropertyAccess.cpp:
        (JSC::JIT::privateCompilePutByIdTransition):
        * wtf/Platform.h:

2008-12-11  Holger Freyther  <zecke@selfish.org>

        Reviewed by Simon Hausmann.

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

        For Qt it is not pratical to have a FontCache and GlyphPageTreeNode
        implementation. This is one of the reasons why the Qt port is currently not
        using WebCore/platform/graphics/Font.cpp. By allowing to not use
        the simple/fast-path the Qt port will be able to use it.

        Introduce USE(FONT_FAST_PATH) and define it for every port but the
        Qt one.

        * wtf/Platform.h: Enable USE(FONT_FAST_PATH)

2008-12-11  Gabor Loki  <loki@inf.u-szeged.hu>

        Reviewed by Darin Adler and landed by Holger Freyther.

        <https://bugs.webkit.org/show_bug.cgi?id=22648>
        Fix threading on Qt-port and Gtk-port for Sampling tool.

        * wtf/ThreadingGtk.cpp:
        (WTF::waitForThreadCompletion):
        * wtf/ThreadingQt.cpp:
        (WTF::waitForThreadCompletion):

2008-12-10  Cameron Zwarich  <zwarich@apple.com>

        Reviewed by Oliver Hunt.

        Bug 22734: Debugger crashes when stepping into a function call in a return statement
        <https://bugs.webkit.org/show_bug.cgi?id=22734>
        <rdar://problem/6426796>

        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::BytecodeGenerator): The DebuggerCallFrame uses
        the 'this' value stored in a callFrame, so op_convert_this should be
        emitted at the beginning of a function body when generating bytecode
        with debug hooks.
        * debugger/DebuggerCallFrame.cpp:
        (JSC::DebuggerCallFrame::thisObject): The assertion inherent in the call
        to asObject() here is valid, because any 'this' value should have been
        converted to a JSObject*.

2008-12-10  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Geoff Garen.

        Port more of the JIT to use the MacroAssembler interface.
        
        Everything in the main pass, bar a few corner cases (operations with required
        registers, or calling convention code).  Slightly refactors array creation,
        moving the offset calculation into the callFrame into C code (reducing code
        planted).

        Overall this appears to be a 1% win on v8-tests, due to the smaller immediates
        being planted (in jfalse in particular).

        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::cti_op_new_array):
        * jit/JIT.cpp:
        (JSC::JIT::privateCompileMainPass):
        (JSC::JIT::privateCompileSlowCases):
        * jit/JIT.h:
        * wrec/WRECGenerator.cpp:
        (JSC::WREC::Generator::generateEnter):

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

        Fix non-JIT builds.

        * bytecode/CodeBlock.h:

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

        Reviewed by Geoffrey Garen.

        <rdar://problem/6428332> Remove the CTI return address table from CodeBlock

        Step 2:

        Convert the return address table from a HashMap to a sorted Vector.  This
        reduces the size of the data structure by ~4.5MB on Membuster head.

        SunSpider reports a 0.5% progression.

        * bytecode/CodeBlock.cpp:
        (JSC::sizeInBytes): Generic method to get the cost of a Vector.
        (JSC::CodeBlock::dumpStatistics): Add dumping of member sizes.
        * bytecode/CodeBlock.h:
        (JSC::PC::PC): Struct representing NativePC -> VirtualPC mappings.
        (JSC::getNativePC): Helper for binary chop.
        (JSC::CodeBlock::getBytecodeIndex): Used to get the VirtualPC from a
        NativePC using a binary chop of the pcVector.
        (JSC::CodeBlock::pcVector): Accessor.

        * interpreter/Interpreter.cpp:
        (JSC::vPCForPC): Use getBytecodeIndex instead of jitReturnAddressVPCMap().get().
        (JSC::Interpreter::cti_op_instanceof): Ditto.
        (JSC::Interpreter::cti_op_resolve): Ditto.
        (JSC::Interpreter::cti_op_resolve_func): Ditto.
        (JSC::Interpreter::cti_op_resolve_skip): Ditto.
        (JSC::Interpreter::cti_op_resolve_with_base): Ditto.
        (JSC::Interpreter::cti_op_throw): Ditto.
        (JSC::Interpreter::cti_op_in): Ditto.
        (JSC::Interpreter::cti_vm_throw): Ditto.

        * jit/JIT.cpp:
        (JSC::JIT::privateCompile): Reserve exact capacity and fill the pcVector.

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

        Reviewed by Oliver Hunt.

        Added WREC support for an assertion followed by a quantifier. Fixed
        PCRE to match.

        * wrec/WRECParser.cpp:
        (JSC::WREC::Parser::parseParentheses): Throw away the quantifier, since
        it's meaningless. (Firefox does the same.)

        * pcre/pcre_compile.cpp:
        (compileBranch): ditto.

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

        Reviewed by Cameron Zwarich.

        In preparation for compiling WREC without PCRE:
        
        Further relaxed WREC's parsing to be more web-compatible. Fixed PCRE to
        match in cases where it didn't already.
        
        Changed JavaScriptCore to report syntax errors detected by WREC, rather
        than falling back on PCRE any time WREC sees an error.
        
        * pcre/pcre_compile.cpp:
        (checkEscape): Relaxed parsing of \c and \N escapes to be more
        web-compatible.
        
        * runtime/RegExp.cpp:
        (JSC::RegExp::RegExp): Only fall back on PCRE if WREC has not reported
        a syntax error.

        * wrec/WREC.cpp:
        (JSC::WREC::Generator::compileRegExp): Fixed some error reporting to
        match PCRE.

        * wrec/WRECParser.cpp: Added error messages that match PCRE.

        (JSC::WREC::Parser::consumeGreedyQuantifier):
        (JSC::WREC::Parser::parseParentheses):
        (JSC::WREC::Parser::parseCharacterClass):
        (JSC::WREC::Parser::parseNonCharacterEscape): Updated the above functions to
        use the new setError API.

        (JSC::WREC::Parser::consumeEscape): Relaxed parsing of \c \N \u \x \B
        to be more web-compatible.

        (JSC::WREC::Parser::parseAlternative): Distinguish between a malformed
        quantifier and a quantifier with no prefix, like PCRE does.

        (JSC::WREC::Parser::consumeParenthesesType): Updated to use the new setError API.

        * wrec/WRECParser.h:
        (JSC::WREC::Parser::error):
        (JSC::WREC::Parser::syntaxError):
        (JSC::WREC::Parser::parsePattern):
        (JSC::WREC::Parser::reset):
        (JSC::WREC::Parser::setError): Store error messages instead of error codes,
        to provide for exception messages. Use a setter for reporting errors, so
        errors detected early are not overwritten by errors detected later.

2008-12-09  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Oliver Hunt.

        Use va_args to access cti function arguments.
        https://bugs.webkit.org/show_bug.cgi?id=22774

        This may be a minor regression, but we'll take the hit if so to reduce fragility.

        * interpreter/Interpreter.cpp:
        * interpreter/Interpreter.h:

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

        Reviewed twice by Cameron Zwarich.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=22752
        Clear SymbolTable after codegen for Function codeblocks that
        don't require an activation

        This is a ~1.5MB improvement on Membuster-head.

        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::dumpStatistics): Add logging of non-empty symbol tables
        and total size used by symbol tables.
        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::generate): Clear the symbol table here.

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

        Reviewed by Geoffrey Garen.

        Remove unnecessary extra lookup when throwing an exception.
        We used to first lookup the target offset using getHandlerForVPC
        and then we would lookup the native code stub using 
        nativeExceptionCodeForHandlerVPC.  Instead, we can just pass around
        the HandlerInfo.

        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::handlerForVPC): Return the HandlerInfo.
        * bytecode/CodeBlock.h: Remove nativeExceptionCodeForHandlerVPC.

        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::throwException): Return a HandlerInfo instead of
        and Instruction offset.
        (JSC::Interpreter::privateExecute): Get the offset from HandlerInfo.
        (JSC::Interpreter::cti_op_throw): Get the native code from the HandleInfo.
        (JSC::Interpreter::cti_vm_throw): Ditto.
        * interpreter/Interpreter.h:

2008-12-09  Eric Seidel  <eric@webkit.org>

        Build fix only, no review.

        Speculative fix for the Chromium-Windows bot.
        Add JavaScriptCore/os-win32 to the include path (for stdint.h)
        Strangely it builds fine on my local windows box (or at least doesn't hit this error)

        * JavaScriptCore.scons:

2008-12-09  Eric Seidel  <eric@webkit.org>

        No review, build fix only.
        
        Add ExecutableAllocator files missing from Scons build.

        * JavaScriptCore.scons:

2008-12-09  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Timothy Hatcher.

        https://bugs.webkit.org/show_bug.cgi?id=22631
        Allow ScriptCallFrame query names of functions in the call stack.

        * JavaScriptCore.exp: added InternalFunction::name and
        UString operator==() as exported symbol

2008-12-08  Judit Jasz  <jasy@inf.u-szeged.hu>

        Reviewed and tweaked by Cameron Zwarich.

        Bug 22352: Annotate opcodes with their length
        <https://bugs.webkit.org/show_bug.cgi?id=22352>

        * bytecode/Opcode.cpp:
        * bytecode/Opcode.h:
        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::privateExecute):
        * jit/JIT.cpp:
        (JSC::JIT::privateCompileMainPass):
        (JSC::JIT::privateCompileSlowCases):

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

        Reviewed by Oliver Hunt.
        
        Implemented more of the relaxed and somewhat weird rules for deciding
        how to interpret a non-pattern-character.
        
        * wrec/Escapes.h:
        (JSC::WREC::Escape::):
        (JSC::WREC::Escape::Escape): Eliminated Escape::None because it was
        unused. If you see an '\\', it's either a valid escape or an error.

        * wrec/Quantifier.h:
        (JSC::WREC::Quantifier::Quantifier):
        * wrec/WRECGenerator.cpp:
        (JSC::WREC::Generator::generateNonGreedyQuantifier):
        (JSC::WREC::Generator::generateGreedyQuantifier): Renamed "noMaxSpecified"
        to "Infinity", since that's what it means.

        * wrec/WRECParser.cpp:
        (JSC::WREC::Parser::consumeGreedyQuantifier): Re-wrote {n,m} parsing rules
        because they were too strict before. Added support for backtracking
        in the case where the {n,m} fails to parse as a quantifier, and yet is
        not a syntax error.

        (JSC::WREC::Parser::parseCharacterClass):
        (JSC::WREC::Parser::parseNonCharacterEscape): Eliminated Escape::None,
        as above.

        (JSC::WREC::Parser::consumeEscape): Don't treat ASCII and _ escapes
        as syntax errors. See fast/regex/non-pattern-characters.html.
        
        * wrec/WRECParser.h:
        (JSC::WREC::Parser::SavedState::SavedState):
        (JSC::WREC::Parser::SavedState::restore): Added a state backtracker,
        since parsing {n,m} forms requires backtracking if the form turns out
        not to be a quantifier.

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

        Reviewed by Oliver Hunt.
        
        Refactored WREC parsing so that only one piece of code needs to know
        the relaxed and somewhat weird rules for deciding how to interpret a
        non-pattern-character, in preparation for implementing those rules.
        
        Also, implemented the relaxed and somewhat weird rules for '}' and ']'.

        * wrec/WREC.cpp: Reduced the regular expression size limit. Now that
        WREC handles ']' properly, it compiles fast/js/regexp-charclass-crash.html,
        which makes it hang at the old limit. (The old limit was based on the
        misimpression that the same value in PCRE limited the regular expression
        pattern size; in reality, it limited the expected compiled regular
        expression size. WREC doesn't have a way to calculate an expected
        compiled regular expression size, but this should be good enough.)

        * wrec/WRECParser.cpp:
        (JSC::WREC::parsePatternCharacterSequence): Nixed this function because
        it contained a second copy of the logic for handling non-pattern-characters,
        which is about to get a lot more complicated.

        (JSC::WREC::PatternCharacterSequence::PatternCharacterSequence): 
        (JSC::WREC::PatternCharacterSequence::size):
        (JSC::WREC::PatternCharacterSequence::append):
        (JSC::WREC::PatternCharacterSequence::flush): Helper object for generating
        an optimized sequence of pattern characters.

        (JSC::WREC::Parser::parseNonCharacterEscape): Renamed to reflect the fact
        that the main parseAlternative loop handles character escapes.

        (JSC::WREC::Parser::parseAlternative): Moved pattern character sequence
        logic from parsePatternCharacterSequence to here, using
        PatternCharacterSequence to help with the details.

        * wrec/WRECParser.h: Updated for renames.

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

        Reviewed by Geoff Garen.

        <rdar://problem/6166088> Give JSGlobalContextCreate a behavior that is concurrency aware,
        and un-deprecate it

        * API/JSContextRef.cpp: (JSGlobalContextCreate):
        * API/JSContextRef.h:
        Use a unique context group for the context, unless the application was linked against old
        JavaScriptCore.

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

        Reviewed by Cameron Zwarich.

        Fix for <rdar://problem/6428332> Remove the CTI return address table from CodeBlock

        Step 1:

        Remove use of jitReturnAddressVPCMap when looking for vPC to store Structures
        in for cached lookup.  Instead, use the offset in the StructureStubInfo that is
        already required.

        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::dumpStatistics): Fix extraneous semicolon.
        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::tryCTICachePutByID):
        (JSC::Interpreter::tryCTICacheGetByID):
        (JSC::Interpreter::cti_op_get_by_id_self_fail):
        (JSC::Interpreter::cti_op_get_by_id_proto_list):
        * jit/JIT.h:
        (JSC::JIT::compileGetByIdSelf):
        (JSC::JIT::compileGetByIdProto):
        (JSC::JIT::compileGetByIdChain):
        (JSC::JIT::compilePutByIdReplace):
        (JSC::JIT::compilePutByIdTransition):
        * jit/JITPropertyAccess.cpp:
        (JSC::JIT::privateCompilePutByIdTransition):
        (JSC::JIT::patchGetByIdSelf):
        (JSC::JIT::patchPutByIdReplace):
        (JSC::JIT::privateCompilePatchGetArrayLength): Remove extra call to getStubInfo.
        (JSC::JIT::privateCompileGetByIdSelf):
        (JSC::JIT::privateCompileGetByIdProto):
        (JSC::JIT::privateCompileGetByIdChain):
        (JSC::JIT::privateCompilePutByIdReplace):

2008-12-08  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Oliver Hunt.

        Port the op_j?n?eq_null JIT code generation to use the MacroAssembler,
        and clean up slightly at the same time.  The 'j' forms currently compare,
        then set a register, then compare again, then branch.  Branch directly on
        the result of the first compare.

        Around a 1% progression on deltablue, crypto & early boyer, for about 1/2%
        overall on v8-tests.

        * jit/JIT.cpp:
        (JSC::JIT::privateCompileMainPass):
        * jit/JITPropertyAccess.cpp:
        (JSC::JIT::compileGetByIdSlowCase):

2008-12-08  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Geoff Garen.

        Expand MacroAssembler to support more operations, required by the JIT.

        Generally adds more operations and permutations of operands to the existing
        interface.  Rename 'jset' to 'jnz' and 'jnset' to 'jz', which seem clearer,
        and require that immediate pointer operands (though not pointer addresses to
        load and store instructions) are wrapped in a ImmPtr() type, akin to Imm32().

        No performance impact.

        * assembler/MacroAssembler.h:
        (JSC::MacroAssembler::):
        (JSC::MacroAssembler::ImmPtr::ImmPtr):
        (JSC::MacroAssembler::add32):
        (JSC::MacroAssembler::and32):
        (JSC::MacroAssembler::or32):
        (JSC::MacroAssembler::sub32):
        (JSC::MacroAssembler::xor32):
        (JSC::MacroAssembler::loadPtr):
        (JSC::MacroAssembler::load32):
        (JSC::MacroAssembler::storePtr):
        (JSC::MacroAssembler::store32):
        (JSC::MacroAssembler::poke):
        (JSC::MacroAssembler::move):
        (JSC::MacroAssembler::testImm32):
        (JSC::MacroAssembler::jae32):
        (JSC::MacroAssembler::jb32):
        (JSC::MacroAssembler::jePtr):
        (JSC::MacroAssembler::je32):
        (JSC::MacroAssembler::jnePtr):
        (JSC::MacroAssembler::jne32):
        (JSC::MacroAssembler::jnzPtr):
        (JSC::MacroAssembler::jnz32):
        (JSC::MacroAssembler::jzPtr):
        (JSC::MacroAssembler::jz32):
        (JSC::MacroAssembler::joSub32):
        (JSC::MacroAssembler::jump):
        (JSC::MacroAssembler::sete32):
        (JSC::MacroAssembler::setne32):
        (JSC::MacroAssembler::setnz32):
        (JSC::MacroAssembler::setz32):
        * assembler/X86Assembler.h:
        (JSC::X86Assembler::addl_mr):
        (JSC::X86Assembler::andl_i8r):
        (JSC::X86Assembler::cmpl_rm):
        (JSC::X86Assembler::cmpl_mr):
        (JSC::X86Assembler::cmpl_i8m):
        (JSC::X86Assembler::subl_mr):
        (JSC::X86Assembler::testl_i32m):
        (JSC::X86Assembler::xorl_i32r):
        (JSC::X86Assembler::movl_rm):
        (JSC::X86Assembler::modRm_opmsib):
        * jit/JIT.cpp:
        (JSC::JIT::privateCompileMainPass):
        * jit/JITInlineMethods.h:
        (JSC::JIT::emitGetVirtualRegister):
        (JSC::JIT::emitPutCTIArgConstant):
        (JSC::JIT::emitPutCTIParam):
        (JSC::JIT::emitPutImmediateToCallFrameHeader):
        (JSC::JIT::emitInitRegister):
        (JSC::JIT::checkStructure):
        (JSC::JIT::emitJumpIfJSCell):
        (JSC::JIT::emitJumpIfNotJSCell):
        (JSC::JIT::emitJumpSlowCaseIfNotImmNum):

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

        Reviewed by Sam Weinig.
        
        Fixed a bug where WREC would allow a quantifier whose minimum was
        greater than its maximum.
        
        * wrec/Quantifier.h:
        (JSC::WREC::Quantifier::Quantifier): ASSERT that the quantifier is not
        backwards.
        
        * wrec/WRECParser.cpp:
        (JSC::WREC::Parser::consumeGreedyQuantifier): Verify that the minimum
        is not greater than the maximum.

2008-12-08  Eric Seidel  <eric@webkit.org>
        
        Build fix only, no review.

        * JavaScriptCore.scons: add bytecode/JumpTable.cpp

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

        Reviewed by Geoffrey Garen.

        Patch for https://bugs.webkit.org/show_bug.cgi?id=22716
        <rdar://problem/6428315>
        Add RareData structure to CodeBlock for infrequently used auxiliary data
        members.

        Reduces memory on Membuster-head by ~.5MB 

        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::dump):
        (JSC::CodeBlock::dumpStatistics):
        (JSC::CodeBlock::mark):
        (JSC::CodeBlock::getHandlerForVPC):
        (JSC::CodeBlock::nativeExceptionCodeForHandlerVPC):
        (JSC::CodeBlock::shrinkToFit):
        * bytecode/CodeBlock.h:
        (JSC::CodeBlock::numberOfExceptionHandlers):
        (JSC::CodeBlock::addExceptionHandler):
        (JSC::CodeBlock::exceptionHandler):
        (JSC::CodeBlock::addFunction):
        (JSC::CodeBlock::function):
        (JSC::CodeBlock::addUnexpectedConstant):
        (JSC::CodeBlock::unexpectedConstant):
        (JSC::CodeBlock::addRegExp):
        (JSC::CodeBlock::regexp):
        (JSC::CodeBlock::numberOfImmediateSwitchJumpTables):
        (JSC::CodeBlock::addImmediateSwitchJumpTable):
        (JSC::CodeBlock::immediateSwitchJumpTable):
        (JSC::CodeBlock::numberOfCharacterSwitchJumpTables):
        (JSC::CodeBlock::addCharacterSwitchJumpTable):
        (JSC::CodeBlock::characterSwitchJumpTable):
        (JSC::CodeBlock::numberOfStringSwitchJumpTables):
        (JSC::CodeBlock::addStringSwitchJumpTable):
        (JSC::CodeBlock::stringSwitchJumpTable):
        (JSC::CodeBlock::evalCodeCache):
        (JSC::CodeBlock::createRareDataIfNecessary):

2008-11-26  Peter Kasting  <pkasting@google.com>

        Reviewed by Anders Carlsson.

        https://bugs.webkit.org/show_bug.cgi?id=16814
        Allow ports to disable ActiveX->NPAPI conversion for Media Player.
        Improve handling of miscellaneous ActiveX objects.

        * wtf/Platform.h: Add another ENABLE(...).

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

        Reviewed by Mark Rowe.

        Add dumping of CodeBlock member structure usage.

        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::dumpStatistics):
        * bytecode/EvalCodeCache.h:
        (JSC::EvalCodeCache::isEmpty):

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.

        * JavaScriptCore.xcodeproj/project.pbxproj: Sorted.

2008-12-08  Tony Chang  <tony@chromium.org>

        Reviewed by Eric Seidel.

        Enable Pan scrolling only when building on PLATFORM(WIN_OS)
        Previously platforms like Apple Windows WebKit, Cairo Windows WebKit,
        Wx and Chromium were enabling it explicitly, now we just turn it on
        for all WIN_OS, later platforms can turn it off as needed on Windows
        (or turn it on under Linux, etc.)
        https://bugs.webkit.org/show_bug.cgi?id=22698

        * wtf/Platform.h:

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

        Reviewed by Cameron Zwarich.

        Add basic memory statistics dumping for CodeBlock.

        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::dumpStatistics):
        (JSC::CodeBlock::CodeBlock):
        (JSC::CodeBlock::~CodeBlock):
        * bytecode/CodeBlock.h:

2008-12-08  Simon Hausmann  <simon.hausmann@nokia.com>

        Fix the Linux build with newer gcc/glibc.

        * jit/ExecutableAllocatorPosix.cpp: Include unistd.h for
        getpagesize(), according to
        http://opengroup.org/onlinepubs/007908775/xsh/getpagesize.html

2008-12-08  Simon Hausmann  <simon.hausmann@nokia.com>

        Fix the build with Qt on Windows.

        * JavaScriptCore.pri: Compile ExecutableAllocatorWin.cpp on Windows.

2008-12-07  Oliver Hunt  <oliver@apple.com>

        Reviewed by NOBODY (Buildfix).

        Fix non-WREC builds

        * runtime/RegExp.cpp:
        (JSC::RegExp::RegExp):

2008-12-07  Oliver Hunt  <oliver@apple.com>

        Reviewed by NOBODY (Build fix).

        Put ENABLE(ASSEMBLER) guards around use of ExecutableAllocator in global data

        Correct Qt and Gtk project files

        * GNUmakefile.am:
        * JavaScriptCore.pri:
        * runtime/JSGlobalData.h:

2008-12-07  Oliver Hunt  <oliver@apple.com>

        Reviewed by NOBODY (Build fix).

        Add new files to other projects.

        * GNUmakefile.am:
        * JavaScriptCore.pri:
        * JavaScriptCore.pro:

2008-12-07  Oliver Hunt  <oliver@apple.com>

        Rubber stamped by Mark Rowe.

        Rename ExecutableAllocatorMMAP to the more sensible ExecutableAllocatorPosix

        * JavaScriptCore.xcodeproj/project.pbxproj:
        * jit/ExecutableAllocator.h:
        * jit/ExecutableAllocatorPosix.cpp: Renamed from JavaScriptCore/jit/ExecutableAllocatorMMAP.cpp.
        (JSC::ExecutableAllocator::intializePageSize):
        (JSC::ExecutablePool::systemAlloc):
        (JSC::ExecutablePool::systemRelease):

2008-12-07  Oliver Hunt  <oliver@apple.com>

        Reviewed by Cameron Zwarich and Sam Weinig

        <rdar://problem/6309878> Need more granular control over allocation of executable memory (21783)
        <https://bugs.webkit.org/show_bug.cgi?id=21783>

        Add a new allocator for use by the JIT that provides executable pages, so
        we can get rid of the current hack that makes the entire heap executable.

        1-2% progression on SunSpider-v8, 1% on SunSpider.  Reduces memory usage as well!

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
        * JavaScriptCore.vcproj/jsc/jsc.vcproj:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * assembler/AssemblerBuffer.h:
        (JSC::AssemblerBuffer::size):
        (JSC::AssemblerBuffer::executableCopy):
        * assembler/MacroAssembler.h:
        (JSC::MacroAssembler::size):
        (JSC::MacroAssembler::copyCode):
        * assembler/X86Assembler.h:
        (JSC::X86Assembler::size):
        (JSC::X86Assembler::executableCopy):
        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::~CodeBlock):
        * bytecode/CodeBlock.h:
        (JSC::CodeBlock::executablePool):
        (JSC::CodeBlock::setExecutablePool):
        * bytecode/Instruction.h:
        (JSC::PolymorphicAccessStructureList::derefStructures):
        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::~Interpreter):
        * interpreter/Interpreter.h:
        * jit/ExecutableAllocator.cpp: Added.
        * jit/ExecutableAllocator.h: Added.
        (JSC::ExecutablePool::create):
        (JSC::ExecutablePool::alloc):
        (JSC::ExecutablePool::~ExecutablePool):
        (JSC::ExecutablePool::available):
        (JSC::ExecutablePool::ExecutablePool):
        (JSC::ExecutablePool::poolAllocate):
        (JSC::ExecutableAllocator::ExecutableAllocator):
        (JSC::ExecutableAllocator::poolForSize):
        (JSC::ExecutablePool::sizeForAllocation):
        * jit/ExecutableAllocatorMMAP.cpp: Added.
        (JSC::ExecutableAllocator::intializePageSize):
        (JSC::ExecutablePool::systemAlloc):
        (JSC::ExecutablePool::systemRelease):
        * jit/ExecutableAllocatorWin.cpp: Added.
        (JSC::ExecutableAllocator::intializePageSize):
        (JSC::ExecutablePool::systemAlloc):
        (JSC::ExecutablePool::systemRelease):
        * jit/JIT.cpp:
        (JSC::JIT::privateCompile):
        (JSC::JIT::privateCompileCTIMachineTrampolines):
        * jit/JIT.h:
        (JSC::JIT::compileCTIMachineTrampolines):
        * jit/JITPropertyAccess.cpp:
        (JSC::JIT::privateCompilePutByIdTransition):
        (JSC::JIT::privateCompilePatchGetArrayLength):
        (JSC::JIT::privateCompileGetByIdSelf):
        (JSC::JIT::privateCompileGetByIdProto):
        (JSC::JIT::privateCompileGetByIdSelfList):
        (JSC::JIT::privateCompileGetByIdProtoList):
        (JSC::JIT::privateCompileGetByIdChainList):
        (JSC::JIT::privateCompileGetByIdChain):
        (JSC::JIT::privateCompilePutByIdReplace):
        * parser/Nodes.cpp:
        (JSC::RegExpNode::emitBytecode):
        * runtime/JSGlobalData.h:
        (JSC::JSGlobalData::poolForSize):
        * runtime/RegExp.cpp:
        (JSC::RegExp::RegExp):
        (JSC::RegExp::create):
        (JSC::RegExp::~RegExp):
        * runtime/RegExp.h:
        * runtime/RegExpConstructor.cpp:
        (JSC::constructRegExp):
        * runtime/RegExpPrototype.cpp:
        (JSC::regExpProtoFuncCompile):
        * runtime/StringPrototype.cpp:
        (JSC::stringProtoFuncMatch):
        (JSC::stringProtoFuncSearch):
        * wrec/WREC.cpp:
        (JSC::WREC::Generator::compileRegExp):
        * wrec/WRECGenerator.h:
        * wtf/FastMalloc.cpp:
        * wtf/FastMalloc.h:
        * wtf/TCSystemAlloc.cpp:
        (TryMmap):
        (TryVirtualAlloc):
        (TryDevMem):
        (TCMalloc_SystemRelease):

2008-12-06  Sam Weinig  <sam@webkit.org>

        Fix the Gtk build.

        * jit/JITPropertyAccess.cpp:
        (JSC::JIT::compileGetByIdHotPath):
        (JSC::JIT::compilePutByIdHotPath):

2008-12-06  Sam Weinig  <sam@webkit.org>

        Reviewed by Cameron Zwarich,

        Move CodeBlock constructor into the .cpp file.

        Sunspider reports a .7% progression, but I can only assume this
        is noise.

        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::CodeBlock):
        * bytecode/CodeBlock.h:

2008-12-06  Sam Weinig  <sam@webkit.org>

        Reviewed by Cameron Zwarich.

        Split JumpTable code into its own file.

        * GNUmakefile.am:
        * JavaScriptCore.pri:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * JavaScriptCoreSources.bkl:
        * bytecode/CodeBlock.cpp:
        * bytecode/CodeBlock.h:
        * bytecode/JumpTable.cpp: Copied from bytecode/CodeBlock.cpp.
        * bytecode/JumpTable.h: Copied from bytecode/CodeBlock.h.

2008-12-05  Sam Weinig  <sam@webkit.org>

        Reviewed by Cameron Zwarich.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=22715
        Encapsulate more CodeBlock members in preparation
        of moving some of them to a rare data structure.

        * bytecode/CodeBlock.cpp:
        (JSC::locationForOffset):
        (JSC::printConditionalJump):
        (JSC::printGetByIdOp):
        (JSC::printPutByIdOp):
        (JSC::CodeBlock::printStructure):
        (JSC::CodeBlock::printStructures):
        (JSC::CodeBlock::dump):
        (JSC::CodeBlock::~CodeBlock):
        (JSC::CodeBlock::unlinkCallers):
        (JSC::CodeBlock::derefStructures):
        (JSC::CodeBlock::refStructures):
        (JSC::CodeBlock::mark):
        (JSC::CodeBlock::getHandlerForVPC):
        (JSC::CodeBlock::nativeExceptionCodeForHandlerVPC):
        (JSC::CodeBlock::lineNumberForVPC):
        (JSC::CodeBlock::expressionRangeForVPC):
        (JSC::CodeBlock::shrinkToFit):
        * bytecode/CodeBlock.h:
        (JSC::CodeBlock::CodeBlock):
        (JSC::CodeBlock::addCaller):
        (JSC::CodeBlock::removeCaller):
        (JSC::CodeBlock::isKnownNotImmediate):
        (JSC::CodeBlock::isConstantRegisterIndex):
        (JSC::CodeBlock::getConstant):
        (JSC::CodeBlock::isTemporaryRegisterIndex):
        (JSC::CodeBlock::getStubInfo):
        (JSC::CodeBlock::getCallLinkInfo):
        (JSC::CodeBlock::instructions):
        (JSC::CodeBlock::setJITCode):
        (JSC::CodeBlock::jitCode):
        (JSC::CodeBlock::ownerNode):
        (JSC::CodeBlock::setGlobalData):
        (JSC::CodeBlock::setThisRegister):
        (JSC::CodeBlock::thisRegister):
        (JSC::CodeBlock::setNeedsFullScopeChain):
        (JSC::CodeBlock::needsFullScopeChain):
        (JSC::CodeBlock::setUsesEval):
        (JSC::CodeBlock::usesEval):
        (JSC::CodeBlock::setUsesArguments):
        (JSC::CodeBlock::usesArguments):
        (JSC::CodeBlock::codeType):
        (JSC::CodeBlock::source):
        (JSC::CodeBlock::sourceOffset):
        (JSC::CodeBlock::addGlobalResolveInstruction):
        (JSC::CodeBlock::numberOfPropertyAccessInstructions):
        (JSC::CodeBlock::addPropertyAccessInstruction):
        (JSC::CodeBlock::propertyAccessInstruction):
        (JSC::CodeBlock::numberOfCallLinkInfos):
        (JSC::CodeBlock::addCallLinkInfo):
        (JSC::CodeBlock::callLinkInfo):
        (JSC::CodeBlock::numberOfJumpTargets):
        (JSC::CodeBlock::addJumpTarget):
        (JSC::CodeBlock::jumpTarget):
        (JSC::CodeBlock::lastJumpTarget):
        (JSC::CodeBlock::numberOfExceptionHandlers):
        (JSC::CodeBlock::addExceptionHandler):
        (JSC::CodeBlock::exceptionHandler):
        (JSC::CodeBlock::addExpressionInfo):
        (JSC::CodeBlock::numberOfLineInfos):
        (JSC::CodeBlock::addLineInfo):
        (JSC::CodeBlock::lastLineInfo):
        (JSC::CodeBlock::jitReturnAddressVPCMap):
        (JSC::CodeBlock::numberOfIdentifiers):
        (JSC::CodeBlock::addIdentifier):
        (JSC::CodeBlock::identifier):
        (JSC::CodeBlock::numberOfConstantRegisters):
        (JSC::CodeBlock::addConstantRegister):
        (JSC::CodeBlock::constantRegister):
        (JSC::CodeBlock::addFunction):
        (JSC::CodeBlock::function):
        (JSC::CodeBlock::addFunctionExpression):
        (JSC::CodeBlock::functionExpression):
        (JSC::CodeBlock::addUnexpectedConstant):
        (JSC::CodeBlock::unexpectedConstant):
        (JSC::CodeBlock::addRegExp):
        (JSC::CodeBlock::regexp):
        (JSC::CodeBlock::symbolTable):
        (JSC::CodeBlock::evalCodeCache):
        New inline setters/getters.

        (JSC::ProgramCodeBlock::ProgramCodeBlock):
        (JSC::ProgramCodeBlock::~ProgramCodeBlock):
        (JSC::ProgramCodeBlock::clearGlobalObject):
        * bytecode/SamplingTool.cpp:
        (JSC::ScopeSampleRecord::sample):
        (JSC::SamplingTool::dump):
        * bytecompiler/BytecodeGenerator.cpp:
        * bytecompiler/BytecodeGenerator.h:
        * bytecompiler/Label.h:
        * interpreter/CallFrame.cpp:
        * interpreter/Interpreter.cpp:
        * jit/JIT.cpp:
        * jit/JITCall.cpp:
        * jit/JITInlineMethods.h:
        * jit/JITPropertyAccess.cpp:
        * parser/Nodes.cpp:
        * runtime/Arguments.h:
        * runtime/ExceptionHelpers.cpp:
        * runtime/JSActivation.cpp:
        * runtime/JSActivation.h:
        * runtime/JSGlobalObject.cpp:
        Change direct access to use new getter/setters.

2008-12-05  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Oliver Hunt.

        Prevent GCC4.2 from hanging when trying to compile Interpreter.cpp.
        Added "-fno-var-tracking" compiler flag.

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

        * JavaScriptCore.xcodeproj/project.pbxproj:

2008-12-05  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Oliver Hunt.

        Ordering of branch operands in MacroAssembler in unnecessarily  inconsistent.

        je, jg etc take an immediate operand as the second argument, but for the
        equality branches (je, jne) the immediate operand was the first argument.  This
        was unnecessarily inconsistent.  Change je, jne methods to take the immediate
        as the second argument.

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

        * assembler/MacroAssembler.h:
        (JSC::MacroAssembler::je32):
        (JSC::MacroAssembler::jne32):
        * jit/JIT.cpp:
        (JSC::JIT::compileOpStrictEq):
        * wrec/WRECGenerator.cpp:
        (JSC::WREC::Generator::generateEnter):
        (JSC::WREC::Generator::generateNonGreedyQuantifier):
        (JSC::WREC::Generator::generateGreedyQuantifier):
        (JSC::WREC::Generator::generatePatternCharacterPair):
        (JSC::WREC::Generator::generatePatternCharacter):
        (JSC::WREC::Generator::generateCharacterClassInvertedRange):
        (JSC::WREC::Generator::generateCharacterClassInverted):
        (JSC::WREC::Generator::generateAssertionBOL):
        (JSC::WREC::Generator::generateAssertionWordBoundary):

2008-12-05  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Geoff Garen.

        Second tranche of porting JIT.cpp to MacroAssembler interface.

        * assembler/MacroAssembler.h:
        (JSC::MacroAssembler::mul32):
        (JSC::MacroAssembler::jl32):
        (JSC::MacroAssembler::jnzSub32):
        (JSC::MacroAssembler::joAdd32):
        (JSC::MacroAssembler::joMul32):
        (JSC::MacroAssembler::jzSub32):
        * jit/JIT.cpp:
        (JSC::JIT::emitSlowScriptCheck):
        (JSC::JIT::privateCompileMainPass):
        (JSC::JIT::privateCompileSlowCases):
        (JSC::JIT::privateCompileCTIMachineTrampolines):
        * jit/JIT.h:
        * jit/JITInlineMethods.h:
        (JSC::JIT::emitJumpIfNotJSCell):
        (JSC::JIT::emitJumpSlowCaseIfNotJSCell):

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

        Bug 22609: Provide a build-time choice when generating hash tables for properties of built-in DOM objects

        <https://bugs.webkit.org/show_bug.cgi?id=22609>
        <rdar://problem/6331749>

        Reviewed by Darin Adler.

        Initial patch by Yosen Lin.  Adapted for ToT WebKit by David Kilzer.

        Added back the code that generates a "compact" hash (instead of a
        perfect hash) as a build-time option using the
        ENABLE(PERFECT_HASH_SIZE) macro as defined in Lookup.h.

        * create_hash_table: Rename variables to differentiate perfect hash
        values from compact hash values.  Added back code to compute compact
        hash tables.  Generate both hash table sizes and emit
        conditionalized code based on ENABLE(PERFECT_HASH_SIZE).
        * runtime/Lookup.cpp:
        (JSC::HashTable::createTable): Added version of createTable() for
        use with compact hash tables.
        (JSC::HashTable::deleteTable): Updated to work with compact hash
        tables.
        * runtime/Lookup.h: Defined ENABLE(PERFECT_HASH_SIZE) macro here.
        (JSC::HashEntry::initialize): Set m_next to zero when using compact
        hash tables.
        (JSC::HashEntry::setNext): Added for compact hash tables.
        (JSC::HashEntry::next): Added for compact hash tables.
        (JSC::HashTable::entry): Added version of entry() for use with
        compact hash tables.
        * runtime/Structure.cpp:
        (JSC::Structure::getEnumerablePropertyNames): Updated to work with
        compact hash tables.

2008-12-05  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Geoff Garen.

        Remove redundant calls to JIT::emitSlowScriptCheck.
        This is checked in the hot path, so is not needed on the slow path - and the code
        was being planted before the start of the slow case, so was completely unreachable!

        * jit/JIT.cpp:
        (JSC::JIT::privateCompileSlowCases):

2008-12-05  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Geoff Garen.

        Move JIT::compileOpStrictEq to MacroAssembler interface.

        The rewrite also looks like a small (<1%) performance progression.

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

        * jit/JIT.cpp:
        (JSC::JIT::compileOpStrictEq):
        (JSC::JIT::privateCompileSlowCases):
        * jit/JIT.h:
        * jit/JITInlineMethods.h:
        (JSC::JIT::emitJumpIfJSCell):
        (JSC::JIT::emitJumpSlowCaseIfJSCell):

2008-12-05  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Geoff Garen.

        Remove m_assembler from MacroAssembler::Jump.
        Keeping a pointer allowed for some syntactic sugar - "link()" looks nicer
        than "link(this)".  But maintaining this doubles the size of Jump, which
        is even more unfortunate for the JIT, since there are many large structures
        holding JmpSrcs.  Probably best to remove it.

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

        * assembler/MacroAssembler.h:
        (JSC::MacroAssembler::Jump::Jump):
        (JSC::MacroAssembler::Jump::link):
        (JSC::MacroAssembler::Jump::linkTo):
        (JSC::MacroAssembler::JumpList::link):
        (JSC::MacroAssembler::JumpList::linkTo):
        (JSC::MacroAssembler::jae32):
        (JSC::MacroAssembler::je32):
        (JSC::MacroAssembler::je16):
        (JSC::MacroAssembler::jg32):
        (JSC::MacroAssembler::jge32):
        (JSC::MacroAssembler::jl32):
        (JSC::MacroAssembler::jle32):
        (JSC::MacroAssembler::jnePtr):
        (JSC::MacroAssembler::jne32):
        (JSC::MacroAssembler::jnset32):
        (JSC::MacroAssembler::jset32):
        (JSC::MacroAssembler::jump):
        (JSC::MacroAssembler::jzSub32):
        (JSC::MacroAssembler::joAdd32):
        (JSC::MacroAssembler::call):
        * wrec/WREC.cpp:
        (JSC::WREC::Generator::compileRegExp):
        * wrec/WRECGenerator.cpp:
        (JSC::WREC::Generator::generateEnter):
        (JSC::WREC::Generator::generateBackreferenceQuantifier):
        (JSC::WREC::Generator::generateNonGreedyQuantifier):
        (JSC::WREC::Generator::generateGreedyQuantifier):
        (JSC::WREC::Generator::generatePatternCharacter):
        (JSC::WREC::Generator::generateCharacterClassInvertedRange):
        (JSC::WREC::Generator::generateCharacterClassInverted):
        (JSC::WREC::Generator::generateCharacterClass):
        (JSC::WREC::Generator::generateParenthesesAssertion):
        (JSC::WREC::Generator::generateParenthesesInvertedAssertion):
        (JSC::WREC::Generator::generateParenthesesNonGreedy):
        (JSC::WREC::Generator::generateParenthesesResetTrampoline):
        (JSC::WREC::Generator::generateAssertionBOL):
        (JSC::WREC::Generator::generateAssertionEOL):
        (JSC::WREC::Generator::generateAssertionWordBoundary):
        (JSC::WREC::Generator::generateBackreference):
        (JSC::WREC::Generator::terminateAlternative):
        (JSC::WREC::Generator::terminateDisjunction):
        * wrec/WRECParser.h:

2008-12-05  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Geoffrey Garen.

        Simplify JIT generated checks for timeout code, by moving more work into the C function.
        https://bugs.webkit.org/show_bug.cgi?id=22688

        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::cti_timeout_check):
        * interpreter/Interpreter.h:
        * jit/JIT.cpp:
        (JSC::JIT::emitSlowScriptCheck):

2008-12-05  Sam Weinig  <sam@webkit.org>

        Reviewed by Geoffrey Garen.

        Encapsulate access to jump tables in the CodeBlock in preparation
        of moving them to a rare data structure.

        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::dump):
        (JSC::CodeBlock::shrinkToFit):
        * bytecode/CodeBlock.h:
        (JSC::CodeBlock::numberOfImmediateSwitchJumpTables):
        (JSC::CodeBlock::addImmediateSwitchJumpTable):
        (JSC::CodeBlock::immediateSwitchJumpTable):
        (JSC::CodeBlock::numberOfCharacterSwitchJumpTables):
        (JSC::CodeBlock::addCharacterSwitchJumpTable):
        (JSC::CodeBlock::characterSwitchJumpTable):
        (JSC::CodeBlock::numberOfStringSwitchJumpTables):
        (JSC::CodeBlock::addStringSwitchJumpTable):
        (JSC::CodeBlock::stringSwitchJumpTable):
        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::generate):
        (JSC::BytecodeGenerator::endSwitch):
        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::privateExecute):
        (JSC::Interpreter::cti_op_switch_imm):
        (JSC::Interpreter::cti_op_switch_char):
        (JSC::Interpreter::cti_op_switch_string):
        * jit/JIT.cpp:
        (JSC::JIT::privateCompileMainPass):

2008-12-05  Adam Roben  <aroben@apple.com>

        Windows build fix after r39020

        * jit/JITInlineMethods.h:
        (JSC::JIT::restoreArgumentReference):
        (JSC::JIT::restoreArgumentReferenceForTrampoline):
        Add some apparently-missing __.

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

        Reviewed by Darin Adler.
        
        https://bugs.webkit.org/show_bug.cgi?id=22673
        
        Added support for the assertion (?=) and inverted assertion (?!) atoms
        in WREC.

        * wrec/WRECGenerator.cpp:
        (JSC::WREC::Generator::generateParenthesesAssertion):
        (JSC::WREC::Generator::generateParenthesesInvertedAssertion): Split the
        old (unused) generateParentheses into these two functions, with more
        limited capabilities.
        
        * wrec/WRECGenerator.h:
        (JSC::WREC::Generator::): Moved an enum to the top of the class definition,
        to match the WebKit style, and removed a defunct comment.

        * wrec/WRECParser.cpp:
        (JSC::WREC::Parser::parseParentheses):
        (JSC::WREC::Parser::consumeParenthesesType):
        * wrec/WRECParser.h:
        (JSC::WREC::Parser::): Added support for parsing (?=) and (?!).

2008-12-05  Simon Hausmann  <simon.hausmann@nokia.com>

        Rubber-stamped by Tor Arne Vestbø.

        Disable the JIT for the Qt build alltogether again, after observing
        more miscompilations in a wider range of newer gcc versions.

        * JavaScriptCore.pri:

2008-12-05  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Tor Arne Vestbø.

        Disable the JIT for the Qt build on Linux unless gcc is >= 4.2,
        due to miscompilations.

        * JavaScriptCore.pri:

2008-12-04  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Geoff Garen.

        Start porting the JIT to use the MacroAssembler.

        https://bugs.webkit.org/show_bug.cgi?id=22671
        No change in performance.

        * assembler/MacroAssembler.h:
        (JSC::MacroAssembler::Jump::operator X86Assembler::JmpSrc):
        (JSC::MacroAssembler::add32):
        (JSC::MacroAssembler::and32):
        (JSC::MacroAssembler::lshift32):
        (JSC::MacroAssembler::rshift32):
        (JSC::MacroAssembler::storePtr):
        (JSC::MacroAssembler::store32):
        (JSC::MacroAssembler::poke):
        (JSC::MacroAssembler::move):
        (JSC::MacroAssembler::compareImm32ForBranchEquality):
        (JSC::MacroAssembler::jnePtr):
        (JSC::MacroAssembler::jnset32):
        (JSC::MacroAssembler::jset32):
        (JSC::MacroAssembler::jzeroSub32):
        (JSC::MacroAssembler::joverAdd32):
        (JSC::MacroAssembler::call):
        * assembler/X86Assembler.h:
        (JSC::X86Assembler::shll_i8r):
        * jit/JIT.cpp:
        (JSC::JIT::privateCompileMainPass):
        (JSC::JIT::privateCompile):
        (JSC::JIT::privateCompileCTIMachineTrampolines):
        * jit/JIT.h:
        * jit/JITArithmetic.cpp:
        (JSC::JIT::compileBinaryArithOp):
        * jit/JITInlineMethods.h:
        (JSC::JIT::emitGetVirtualRegister):
        (JSC::JIT::emitPutCTIArg):
        (JSC::JIT::emitPutCTIArgConstant):
        (JSC::JIT::emitGetCTIArg):
        (JSC::JIT::emitPutCTIArgFromVirtualRegister):
        (JSC::JIT::emitPutCTIParam):
        (JSC::JIT::emitGetCTIParam):
        (JSC::JIT::emitPutToCallFrameHeader):
        (JSC::JIT::emitPutImmediateToCallFrameHeader):
        (JSC::JIT::emitGetFromCallFrameHeader):
        (JSC::JIT::emitPutVirtualRegister):
        (JSC::JIT::emitInitRegister):
        (JSC::JIT::emitNakedCall):
        (JSC::JIT::restoreArgumentReference):
        (JSC::JIT::restoreArgumentReferenceForTrampoline):
        (JSC::JIT::emitCTICall):
        (JSC::JIT::checkStructure):
        (JSC::JIT::emitJumpSlowCaseIfNotJSCell):
        (JSC::JIT::emitJumpSlowCaseIfNotImmNum):
        (JSC::JIT::emitJumpSlowCaseIfNotImmNums):
        (JSC::JIT::emitFastArithDeTagImmediate):
        (JSC::JIT::emitFastArithDeTagImmediateJumpIfZero):
        (JSC::JIT::emitFastArithReTagImmediate):
        (JSC::JIT::emitFastArithPotentiallyReTagImmediate):
        (JSC::JIT::emitFastArithImmToInt):
        (JSC::JIT::emitFastArithIntToImmOrSlowCase):
        (JSC::JIT::emitFastArithIntToImmNoCheck):
        (JSC::JIT::emitTagAsBoolImmediate):
        * jit/JITPropertyAccess.cpp:
        (JSC::JIT::privateCompilePutByIdTransition):

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

        Reviewed by Oliver Hunt.
        
        Some refactoring for generateGreedyQuantifier.
        
        SunSpider reports no change (possibly a 0.3% speedup).

        * wrec/WRECGenerator.cpp:
        (JSC::WREC::Generator::generateGreedyQuantifier): Clarified label
        meanings and unified some logic to simplify things.

        * wrec/WRECParser.h:
        (JSC::WREC::Parser::parseAlternative): Added a version of parseAlternative
        that can jump to a Label, instead of a JumpList, upon failure. (Eventually,
        when we have a true Label class, this will be redundant.) This makes
        things easier for generateGreedyQuantifier, because it can avoid
        explicitly linking things.

2008-12-04  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Holger Freyther.

        Fix crashes in the Qt build on Linux/i386 with non-executable memory
        by enabling TCSystemAlloc and the PROT_EXEC flag for mmap.

        * JavaScriptCore.pri: Enable the use of TCSystemAlloc if the JIT is
        enabled.
        * wtf/TCSystemAlloc.cpp: Extend the PROT_EXEC permissions to
        PLATFORM(QT).

2008-12-04  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Tor Arne Vestbø.

        Enable ENABLE_JIT_OPTIMIZE_CALL, ENABLE_JIT_OPTIMIZE_PROPERTY_ACCESS
        and ENABLE_JIT_OPTIMIZE_ARITHMETIC, as suggested by Niko.

        * JavaScriptCore.pri: 

2008-12-04  Kent Hansen  <khansen@trolltech.com>

        Reviewed by Simon Hausmann.

        Enable the JSC jit for the Qt build by default for release builds on
        linux-g++ and win32-msvc.

        * JavaScriptCore.pri:

2008-12-04  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Oliver Hunt.

        Allow JIT to function without property access repatching and arithmetic optimizations.
        Controlled by ENABLE_JIT_OPTIMIZE_PROPERTY_ACCESS and ENABLE_JIT_OPTIMIZE_ARITHMETIC switches.

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

        * JavaScriptCore.xcodeproj/project.pbxproj:
        * jit/JIT.cpp:
        (JSC::JIT::privateCompileMainPass):
        (JSC::JIT::privateCompileSlowCases):
        * jit/JIT.h:
        * jit/JITArithmetic.cpp: Copied from jit/JIT.cpp.
        (JSC::JIT::compileBinaryArithOp):
        (JSC::JIT::compileBinaryArithOpSlowCase):
        * jit/JITPropertyAccess.cpp: Copied from jit/JIT.cpp.
        (JSC::JIT::compileGetByIdHotPath):
        (JSC::JIT::compileGetByIdSlowCase):
        (JSC::JIT::compilePutByIdHotPath):
        (JSC::JIT::compilePutByIdSlowCase):
        (JSC::resizePropertyStorage):
        (JSC::transitionWillNeedStorageRealloc):
        (JSC::JIT::privateCompilePutByIdTransition):
        (JSC::JIT::patchGetByIdSelf):
        (JSC::JIT::patchPutByIdReplace):
        (JSC::JIT::privateCompilePatchGetArrayLength):
        * wtf/Platform.h:

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

        Reviewed by Oliver Hunt.
        
        Optimized sequences of characters in regular expressions by comparing
        two characters at a time.
        
        1-2% speedup on SunSpider, 19-25% speedup on regexp-dna.

        * assembler/MacroAssembler.h:
        (JSC::MacroAssembler::load32):
        (JSC::MacroAssembler::jge32): Filled out a few more macro methods.

        * assembler/X86Assembler.h:
        (JSC::X86Assembler::movl_mr): Added a verion of movl_mr that operates
        without an offset, to allow the macro assembler to optmize for that case.
        
        * wrec/WREC.cpp:
        (JSC::WREC::Generator::compileRegExp): Test the saved value of index
        instead of the index register when checking for "end of input." The
        index register doesn't increment by 1 in an orderly fashion, so testing
        it for == "end of input" is not valid.
        
        Also, jump all the way to "return failure" upon reaching "end of input,"
        instead of executing the next alternative. This is more logical, and
        it's a slight optimization in the case of an expression with many alternatives.

        * wrec/WRECGenerator.cpp:
        (JSC::WREC::Generator::generateIncrementIndex): Added support for
        jumping to a failure label in the case where the index has reached "end
        of input."

        (JSC::WREC::Generator::generatePatternCharacterSequence):
        (JSC::WREC::Generator::generatePatternCharacterPair): This is the
        optmization. It's basically like generatePatternCharacter, but it runs two
        characters at a time.
        
        (JSC::WREC::Generator::generatePatternCharacter): Changed to use isASCII,
        since it's clearer than comparing to a magic hex value.
        
        * wrec/WRECGenerator.h:

2008-12-03  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Cameron Zwarich.

        Allow JIT to operate without the call-repatching optimization.
        Controlled by ENABLE(JIT_OPTIMIZE_CALL), defaults on, disabling
        this leads to significant performance regression.

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

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * jit/JIT.cpp:
        (JSC::JIT::privateCompileSlowCases):
        * jit/JIT.h:
        * jit/JITCall.cpp: Copied from jit/JIT.cpp.
        (JSC::JIT::compileOpCallInitializeCallFrame):
        (JSC::JIT::compileOpCallSetupArgs):
        (JSC::JIT::compileOpCallEvalSetupArgs):
        (JSC::JIT::compileOpConstructSetupArgs):
        (JSC::JIT::compileOpCall):
        (JSC::JIT::compileOpCallSlowCase):
        (JSC::unreachable):
        * jit/JITInlineMethods.h: Copied from jit/JIT.cpp.
        (JSC::JIT::checkStructure):
        (JSC::JIT::emitFastArithPotentiallyReTagImmediate):
        (JSC::JIT::emitTagAsBoolImmediate):
        * wtf/Platform.h:

2008-12-03  Eric Seidel  <eric@webkit.org>

        Rubber-stamped by David Hyatt.

        Make HAVE_ACCESSIBILITY only define if !defined

        * wtf/Platform.h:

2008-12-03  Sam Weinig  <sam@webkit.org>

        Fix build.

        * assembler/X86Assembler.h:
        (JSC::X86Assembler::orl_i32r):

2008-12-03  Sam Weinig  <sam@webkit.org>

        Reviewed by Geoffrey Garen.

        Remove shared AssemblerBuffer 1MB buffer and instead give AssemblerBuffer
        an 256 byte inline capacity.

        1% progression on Sunspider.

        * assembler/AssemblerBuffer.h:
        (JSC::AssemblerBuffer::AssemblerBuffer):
        (JSC::AssemblerBuffer::~AssemblerBuffer):
        (JSC::AssemblerBuffer::grow):
        * assembler/MacroAssembler.h:
        (JSC::MacroAssembler::MacroAssembler):
        * assembler/X86Assembler.h:
        (JSC::X86Assembler::X86Assembler):
        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::Interpreter):
        * interpreter/Interpreter.h:
        * jit/JIT.cpp:
        (JSC::JIT::JIT):
        * parser/Nodes.cpp:
        (JSC::RegExpNode::emitBytecode):
        * runtime/RegExp.cpp:
        (JSC::RegExp::RegExp):
        (JSC::RegExp::create):
        * runtime/RegExp.h:
        * runtime/RegExpConstructor.cpp:
        (JSC::constructRegExp):
        * runtime/RegExpPrototype.cpp:
        (JSC::regExpProtoFuncCompile):
        * runtime/StringPrototype.cpp:
        (JSC::stringProtoFuncMatch):
        (JSC::stringProtoFuncSearch):
        * wrec/WREC.cpp:
        (JSC::WREC::Generator::compileRegExp):
        * wrec/WRECGenerator.h:
        (JSC::WREC::Generator::Generator):
        * wrec/WRECParser.h:
        (JSC::WREC::Parser::Parser):

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

        Reviewed by Oliver Hunt, with help from Gavin Barraclough.
        
        orl_i32r was actually coded as an 8bit OR. So, I renamed orl_i32r to
        orl_i8r, changed all orl_i32r clients to use orl_i8r, and then added
        a new orl_i32r that actually does a 32bit OR.
        
        (32bit OR is currently unused, but a patch I'm working on uses it.)

        * assembler/MacroAssembler.h:
        (JSC::MacroAssembler::or32): Updated to choose between 8bit and 32bit OR.

        * assembler/X86Assembler.h:
        (JSC::X86Assembler::orl_i8r): The old orl_i32r.
        (JSC::X86Assembler::orl_i32r): The new orl_i32r.
        
        * jit/JIT.cpp:
        (JSC::JIT::emitFastArithPotentiallyReTagImmediate):
        (JSC::JIT::emitTagAsBoolImmediate): Use orl_i8r, since we're ORing 8bit
        values.

2008-12-03  Dean Jackson  <dino@apple.com>

        Reviewed by Dan Bernstein.

        Helper functions for turn -> degrees.
        https://bugs.webkit.org/show_bug.cgi?id=22497

        * wtf/MathExtras.h:
        (turn2deg):
        (deg2turn):

2008-12-02  Cameron Zwarich  <zwarich@apple.com>

        Reviewed by Geoff Garen.

        Bug 22504: Crashes during code generation occur due to refing of ignoredResult()
        <https://bugs.webkit.org/show_bug.cgi?id=22504>

        Since ignoredResult() was implemented by casting 1 to a RegisterID*, any
        attempt to ref ignoredResult() results in a crash. This will occur in
        code generation of a function body where a node emits another node with
        the dst that was passed to it, and then refs the returned RegisterID*.

        To fix this problem, make ignoredResult() a member function of
        BytecodeGenerator that simply returns a pointe to a fixed RegisterID
        member of BytecodeGenerator.

        * bytecompiler/BytecodeGenerator.h:
        (JSC::BytecodeGenerator::ignoredResult):
        * bytecompiler/RegisterID.h:
        * parser/Nodes.cpp:
        (JSC::NullNode::emitBytecode):
        (JSC::BooleanNode::emitBytecode):
        (JSC::NumberNode::emitBytecode):
        (JSC::StringNode::emitBytecode):
        (JSC::RegExpNode::emitBytecode):
        (JSC::ThisNode::emitBytecode):
        (JSC::ResolveNode::emitBytecode):
        (JSC::ObjectLiteralNode::emitBytecode):
        (JSC::PostfixResolveNode::emitBytecode):
        (JSC::PostfixBracketNode::emitBytecode):
        (JSC::PostfixDotNode::emitBytecode):
        (JSC::DeleteValueNode::emitBytecode):
        (JSC::VoidNode::emitBytecode):
        (JSC::TypeOfResolveNode::emitBytecode):
        (JSC::TypeOfValueNode::emitBytecode):
        (JSC::PrefixResolveNode::emitBytecode):
        (JSC::AssignResolveNode::emitBytecode):
        (JSC::CommaNode::emitBytecode):
        (JSC::ForNode::emitBytecode):
        (JSC::ForInNode::emitBytecode):
        (JSC::ReturnNode::emitBytecode):
        (JSC::ThrowNode::emitBytecode):
        (JSC::FunctionBodyNode::emitBytecode):
        (JSC::FuncDeclNode::emitBytecode):

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

        Reviewed by Cameron Zwarich.
        
        Fixed https://bugs.webkit.org/show_bug.cgi?id=22537
        REGRESSION (r38745): Assertion failure in jsSubstring() at ge.com

        The bug was that index would become greater than length, so our
        "end of input" checks, which all check "index == length", would fail.
        
        The solution is to check for end of input before incrementing index,
        to ensure that index is always <= length.
        
        As a side benefit, generateJumpIfEndOfInput can now use je instead of
        jg, which should be slightly faster.

        * wrec/WREC.cpp:
        (JSC::WREC::Generator::compileRegExp):
        * wrec/WRECGenerator.cpp:
        (JSC::WREC::Generator::generateJumpIfEndOfInput):

2008-12-02  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Geoffrey Garen.

        Plant shift right immediate instructions, which are awesome.
        https://bugs.webkit.org/show_bug.cgi?id=22610
        ~5% on the v8-crypto test.

        * jit/JIT.cpp:
        (JSC::JIT::privateCompileMainPass):
        (JSC::JIT::privateCompileSlowCases):

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

        Reviewed by Sam Weinig.
        
        Cleaned up SegmentedVector by abstracting segment access into helper
        functions.
        
        SunSpider reports no change.

        * bytecompiler/SegmentedVector.h:
        (JSC::SegmentedVector::SegmentedVector):
        (JSC::SegmentedVector::~SegmentedVector):
        (JSC::SegmentedVector::size):
        (JSC::SegmentedVector::at):
        (JSC::SegmentedVector::operator[]):
        (JSC::SegmentedVector::last):
        (JSC::SegmentedVector::append):
        (JSC::SegmentedVector::removeLast):
        (JSC::SegmentedVector::grow):
        (JSC::SegmentedVector::clear):
        (JSC::SegmentedVector::deleteAllSegments):
        (JSC::SegmentedVector::segmentFor):
        (JSC::SegmentedVector::subscriptFor):
        (JSC::SegmentedVector::ensureSegmentsFor):
        (JSC::SegmentedVector::ensureSegment):

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

        Reviewed by Geoffrey Garen. (Patch by Cameron Zwarich <zwarich@apple.com>.)
        
        Fixed https://bugs.webkit.org/show_bug.cgi?id=22482
        REGRESSION (r37991): Occasionally see "Scene rendered incorrectly"
        message when running the V8 Raytrace benchmark
        
        Rolled out r37991. It didn't properly save xmm0, which is caller-save,
        before calling helper functions.
        
        SunSpider and v8 benchmarks show little change -- possibly a .2%
        SunSpider regression, possibly a .2% v8 benchmark speedup.

        * assembler/X86Assembler.h:
        (JSC::X86Assembler::):
        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::dump):
        * bytecode/Instruction.h:
        (JSC::Instruction::):
        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::emitUnaryOp):
        * bytecompiler/BytecodeGenerator.h:
        (JSC::BytecodeGenerator::emitToJSNumber):
        (JSC::BytecodeGenerator::emitTypeOf):
        (JSC::BytecodeGenerator::emitGetPropertyNames):
        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::privateExecute):
        * interpreter/Interpreter.h:
        * jit/JIT.cpp:
        (JSC::JIT::privateCompileMainPass):
        (JSC::JIT::privateCompileSlowCases):
        * jit/JIT.h:
        * parser/Nodes.cpp:
        (JSC::UnaryOpNode::emitBytecode):
        (JSC::BinaryOpNode::emitBytecode):
        (JSC::EqualNode::emitBytecode):
        * parser/ResultType.h:
        (JSC::ResultType::isReusable):
        (JSC::ResultType::mightBeNumber):
        * runtime/JSNumberCell.h:

2008-12-01  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Geoffrey Garen.

        Remove unused (sampling only, and derivable) argument to JIT::emitCTICall.
        https://bugs.webkit.org/show_bug.cgi?id=22587

        * jit/JIT.cpp:
        (JSC::JIT::emitCTICall):
        (JSC::JIT::compileOpCall):
        (JSC::JIT::emitSlowScriptCheck):
        (JSC::JIT::compileBinaryArithOpSlowCase):
        (JSC::JIT::privateCompileMainPass):
        (JSC::JIT::privateCompileSlowCases):
        (JSC::JIT::privateCompile):
        * jit/JIT.h:

2008-12-02  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Eric Seidel.
        
        Fix the inheritance chain for JSFunction.

        * runtime/JSFunction.cpp:
        (JSC::JSFunction::info): Add InternalFunction::info as parent class

2008-12-02  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Tor Arne Vestbø.

        Fix ability to include JavaScriptCore.pri from other .pro files.

        * JavaScriptCore.pri: Moved -O3 setting into the .pro files.
        * JavaScriptCore.pro:
        * jsc.pro:

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

        Reviewed by Cameron Zwarich, with help from Gavin Barraclough.
        
        Fixed https://bugs.webkit.org/show_bug.cgi?id=22583.

        Refactored regular expression parsing to parse sequences of characters
        as a single unit, in preparation for optimizing sequences of characters.
        
        SunSpider reports no change.

        * JavaScriptCore.xcodeproj/project.pbxproj:
        * wrec/Escapes.h: Added. Set of classes for representing an escaped
        token in a pattern.

        * wrec/Quantifier.h:
        (JSC::WREC::Quantifier::Quantifier): Simplified this constructor slightly,
        to match the new Escape constructor.

        * wrec/WRECGenerator.cpp:
        (JSC::WREC::Generator::generatePatternCharacterSequence):
        * wrec/WRECGenerator.h: Added an interface for generating a sequence
        of pattern characters at a time. It doesn't do anything special yet.

        * wrec/WRECParser.cpp:
        (JSC::WREC::Parser::consumeGreedyQuantifier):
        (JSC::WREC::Parser::consumeQuantifier): Renamed "parse" to "consume" in
        these functions, to match "consumeEscape."

        (JSC::WREC::Parser::parsePatternCharacterSequence): New function for
        iteratively aggregating a sequence of characters in a pattern.

        (JSC::WREC::Parser::parseCharacterClassQuantifier):
        (JSC::WREC::Parser::parseBackreferenceQuantifier): Renamed "parse" to
        "consume" in these functions, to match "consumeEscape."

        (JSC::WREC::Parser::parseCharacterClass): Refactored to use the common
        escape processing code in consumeEscape.

        (JSC::WREC::Parser::parseEscape): Refactored to use the common
        escape processing code in consumeEscape.

        (JSC::WREC::Parser::consumeEscape): Factored escaped token processing
        into a common function, since we were doing this in a few places.

        (JSC::WREC::Parser::parseTerm): Refactored to use the common
        escape processing code in consumeEscape.

        * wrec/WRECParser.h:
        (JSC::WREC::Parser::consumeOctal): Refactored to use a helper function
        for reading a digit.

2008-12-01  Cameron Zwarich  <zwarich@apple.com>

        Reviewed by Oliver Hunt.

        Bug 20340: SegmentedVector segment allocations can lead to unsafe use of temporary registers
        <https://bugs.webkit.org/show_bug.cgi?id=20340>

        SegmentedVector currently frees segments and reallocates them when used
        as a stack. This can lead to unsafe use of pointers into freed segments.

        In order to fix this problem, SegmentedVector will be changed to only
        grow and never shrink. Also, rename the reserveCapacity() member
        function to grow() to match the actual usage in BytecodeGenerator, where
        this function is used to allocate a group of registers at once, rather
        than merely saving space for them.

        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::BytecodeGenerator): Use grow() instead of 
        reserveCapacity().
        * bytecompiler/SegmentedVector.h:
        (JSC::SegmentedVector::SegmentedVector):
        (JSC::SegmentedVector::last):
        (JSC::SegmentedVector::append):
        (JSC::SegmentedVector::removeLast):
        (JSC::SegmentedVector::grow): Renamed from reserveCapacity().
        (JSC::SegmentedVector::clear):

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

        Rubber-stamped by Anders Carlsson.

        Disable WREC for x86_64 since memory allocated by the system allocator is not marked executable,
        which causes 64-bit debug builds to crash.  Once we have a dedicated allocator for executable
        memory we can turn this back on.

        * wtf/Platform.h:

2008-12-01  Antti Koivisto  <antti@apple.com>

        Reviewed by Maciej Stachowiak.
        
        Restore inline buffer after vector is shrunk back below its inline capacity.

        * wtf/Vector.h:
        (WTF::):
        (WTF::VectorBuffer::restoreInlineBufferIfNeeded):
        (WTF::::shrinkCapacity):

2008-11-30  Antti Koivisto  <antti@apple.com>

        Reviewed by Mark Rowe.
        
        Try to return free pages in the current thread cache too.

        * wtf/FastMalloc.cpp:
        (WTF::TCMallocStats::releaseFastMallocFreeMemory):

2008-12-01  David Levin  <levin@chromium.org>

        Reviewed by Alexey Proskuryakov.

        https://bugs.webkit.org/show_bug.cgi?id=22567
        Make HashTable work as expected with respect to threads. Specifically, it has class-level
        thread safety and constant methods work on constant objects without synchronization.
        
        No observable change in behavior, so no test. This only affects debug builds.

        * wtf/HashTable.cpp:
        (WTF::hashTableStatsMutex):
        (WTF::HashTableStats::~HashTableStats):
        (WTF::HashTableStats::recordCollisionAtCount):
        Guarded variable access with a mutex.

        * wtf/HashTable.h:
        (WTF::::lookup):
        (WTF::::lookupForWriting):
        (WTF::::fullLookupForWriting):
        (WTF::::add):
        (WTF::::reinsert):
        (WTF::::remove):
        (WTF::::rehash):
        Changed increments of static variables to use atomicIncrement.

        (WTF::::invalidateIterators):
        (WTF::addIterator):
        (WTF::removeIterator):
        Guarded mutable access with a mutex.

2008-11-29  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Cameron Zwarich.

        Enable WREC on PLATFORM(X86_64).  This change predominantly requires changes to the
        WREC::Generator::generateEnter method to support the x86-64 ABI, and addition of
        support for a limited number of quadword operations in the X86Assembler.

        This patch will cause the JS heap to be allocated with RWX permissions on 64-bit Mac
        platforms.  This is a regression with respect to previous 64-bit behaviour, but is no
        more permissive than on 32-bit builds.  This issue should be addressed at some point.
        (This is tracked by bug #21783.)

        https://bugs.webkit.org/show_bug.cgi?id=22554
        Greater than 4x speedup on regexp-dna, on x86-64.

        * assembler/MacroAssembler.h:
        (JSC::MacroAssembler::addPtr):
        (JSC::MacroAssembler::loadPtr):
        (JSC::MacroAssembler::storePtr):
        (JSC::MacroAssembler::pop):
        (JSC::MacroAssembler::push):
        (JSC::MacroAssembler::move):
        * assembler/X86Assembler.h:
        (JSC::X86Assembler::):
        (JSC::X86Assembler::movq_rr):
        (JSC::X86Assembler::addl_i8m):
        (JSC::X86Assembler::addl_i32r):
        (JSC::X86Assembler::addq_i8r):
        (JSC::X86Assembler::addq_i32r):
        (JSC::X86Assembler::movq_mr):
        (JSC::X86Assembler::movq_rm):
        * wrec/WREC.h:
        * wrec/WRECGenerator.cpp:
        (JSC::WREC::Generator::generateEnter):
        (JSC::WREC::Generator::generateReturnSuccess):
        (JSC::WREC::Generator::generateReturnFailure):
        * wtf/Platform.h:
        * wtf/TCSystemAlloc.cpp:

2008-12-01  Cameron Zwarich  <zwarich@apple.com>

        Reviewed by Sam Weinig.

        Preliminary work for bug 20340: SegmentedVector segment allocations can lead to unsafe use of temporary registers
        <https://bugs.webkit.org/show_bug.cgi?id=20340>

        SegmentedVector currently frees segments and reallocates them when used
        as a stack. This can lead to unsafe use of pointers into freed segments.

        In order to fix this problem, SegmentedVector will be changed to only
        grow and never shrink, with the sole exception of clearing all of its
        data, a capability that is required by Lexer. This patch changes the
        public interface to only allow for these capabilities.

        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::BytecodeGenerator): Use reserveCapacity()
        instead of resize() for m_globals and m_parameters.
        * bytecompiler/SegmentedVector.h:
        (JSC::SegmentedVector::resize): Removed.
        (JSC::SegmentedVector::reserveCapacity): Added.
        (JSC::SegmentedVector::clear): Added.
        (JSC::SegmentedVector::shrink): Removed.
        (JSC::SegmentedVector::grow): Removed.
        * parser/Lexer.cpp:
        (JSC::Lexer::clear): Use clear() instead of resize(0).

2008-11-30  Sam Weinig  <sam@webkit.org>

        Reviewed by Mark Rowe.

        Renames jumps to m_jumps in JumpList.

        * assembler/MacroAssembler.h:
        (JSC::MacroAssembler::JumpList::link):
        (JSC::MacroAssembler::JumpList::linkTo):
        (JSC::MacroAssembler::JumpList::append):

2008-11-30  Antti Koivisto  <antti@apple.com>

        Reviewed by Mark Rowe.
        
        https://bugs.webkit.org/show_bug.cgi?id=22557
        
        Report free size in central and thread caches too.

        * wtf/FastMalloc.cpp:
        (WTF::TCMallocStats::fastMallocStatistics):
        * wtf/FastMalloc.h:

2008-11-29  Antti Koivisto  <antti@apple.com>

        Reviewed by Dan Bernstein.
        
        https://bugs.webkit.org/show_bug.cgi?id=22557
        Add statistics for JavaScript GC heap.

        * JavaScriptCore.exp:
        * runtime/Collector.cpp:
        (JSC::Heap::objectCount):
        (JSC::addToStatistics):
        (JSC::Heap::statistics):
        * runtime/Collector.h:

2008-11-29  Antti Koivisto  <antti@apple.com>

        Fix debug build by adding a stub method.

        * wtf/FastMalloc.cpp:
        (WTF::fastMallocStatistics):

2008-11-29  Antti Koivisto  <antti@apple.com>

        Reviewed by Alexey Proskuryakov.
        
        https://bugs.webkit.org/show_bug.cgi?id=22557
        
        Add function for getting basic statistics from FastMalloc.

        * JavaScriptCore.exp:
        * wtf/FastMalloc.cpp:
        (WTF::DLL_Length):
        (WTF::TCMalloc_PageHeap::ReturnedBytes):
        (WTF::TCMallocStats::fastMallocStatistics):
        * wtf/FastMalloc.h:

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

        Not reviewed.

        The C++ standard does not automatically grant the friendships of an
        enclosing class to its nested subclasses, so we should do so explicitly.
        This fixes the GCC 4.0 build, although both GCC 4.2 and Visual C++ 2005
        accept the incorrect code as it is.

        * assembler/MacroAssembler.h:

2008-11-29  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Cameron Zwarich.

        Add the class MacroAssembler to provide some abstraction of code generation,
        and change WREC to make use of this class, rather than directly accessing
        the X86Assembler.

        This patch also allows WREC to be compiled without the rest of the JIT enabled.

        * JavaScriptCore.xcodeproj/project.pbxproj:
        * assembler/MacroAssembler.h: Added.
        (JSC::MacroAssembler::):
        (JSC::MacroAssembler::MacroAssembler):
        (JSC::MacroAssembler::copyCode):
        (JSC::MacroAssembler::Address::Address):
        (JSC::MacroAssembler::ImplicitAddress::ImplicitAddress):
        (JSC::MacroAssembler::BaseIndex::BaseIndex):
        (JSC::MacroAssembler::Label::Label):
        (JSC::MacroAssembler::Jump::Jump):
        (JSC::MacroAssembler::Jump::link):
        (JSC::MacroAssembler::Jump::linkTo):
        (JSC::MacroAssembler::JumpList::link):
        (JSC::MacroAssembler::JumpList::linkTo):
        (JSC::MacroAssembler::JumpList::append):
        (JSC::MacroAssembler::Imm32::Imm32):
        (JSC::MacroAssembler::add32):
        (JSC::MacroAssembler::or32):
        (JSC::MacroAssembler::sub32):
        (JSC::MacroAssembler::loadPtr):
        (JSC::MacroAssembler::load32):
        (JSC::MacroAssembler::load16):
        (JSC::MacroAssembler::storePtr):
        (JSC::MacroAssembler::store32):
        (JSC::MacroAssembler::pop):
        (JSC::MacroAssembler::push):
        (JSC::MacroAssembler::peek):
        (JSC::MacroAssembler::poke):
        (JSC::MacroAssembler::move):
        (JSC::MacroAssembler::compareImm32ForBranch):
        (JSC::MacroAssembler::compareImm32ForBranchEquality):
        (JSC::MacroAssembler::jae32):
        (JSC::MacroAssembler::je32):
        (JSC::MacroAssembler::je16):
        (JSC::MacroAssembler::jg32):
        (JSC::MacroAssembler::jge32):
        (JSC::MacroAssembler::jl32):
        (JSC::MacroAssembler::jle32):
        (JSC::MacroAssembler::jne32):
        (JSC::MacroAssembler::jump):
        (JSC::MacroAssembler::breakpoint):
        (JSC::MacroAssembler::ret):
        * assembler/X86Assembler.h:
        (JSC::X86Assembler::cmpw_rm):
        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::Interpreter):
        * interpreter/Interpreter.h:
        (JSC::Interpreter::assemblerBuffer):
        * runtime/RegExp.cpp:
        (JSC::RegExp::RegExp):
        * wrec/WREC.cpp:
        (JSC::WREC::Generator::compileRegExp):
        * wrec/WREC.h:
        * wrec/WRECFunctors.cpp:
        (JSC::WREC::GeneratePatternCharacterFunctor::generateAtom):
        (JSC::WREC::GenerateCharacterClassFunctor::generateAtom):
        (JSC::WREC::GenerateBackreferenceFunctor::generateAtom):
        (JSC::WREC::GenerateParenthesesNonGreedyFunctor::generateAtom):
        * wrec/WRECFunctors.h:
        (JSC::WREC::GenerateParenthesesNonGreedyFunctor::GenerateParenthesesNonGreedyFunctor):
        * wrec/WRECGenerator.cpp:
        (JSC::WREC::Generator::generateEnter):
        (JSC::WREC::Generator::generateReturnSuccess):
        (JSC::WREC::Generator::generateSaveIndex):
        (JSC::WREC::Generator::generateIncrementIndex):
        (JSC::WREC::Generator::generateLoadCharacter):
        (JSC::WREC::Generator::generateJumpIfEndOfInput):
        (JSC::WREC::Generator::generateJumpIfNotEndOfInput):
        (JSC::WREC::Generator::generateReturnFailure):
        (JSC::WREC::Generator::generateBacktrack1):
        (JSC::WREC::Generator::generateBacktrackBackreference):
        (JSC::WREC::Generator::generateBackreferenceQuantifier):
        (JSC::WREC::Generator::generateNonGreedyQuantifier):
        (JSC::WREC::Generator::generateGreedyQuantifier):
        (JSC::WREC::Generator::generatePatternCharacter):
        (JSC::WREC::Generator::generateCharacterClassInvertedRange):
        (JSC::WREC::Generator::generateCharacterClassInverted):
        (JSC::WREC::Generator::generateCharacterClass):
        (JSC::WREC::Generator::generateParentheses):
        (JSC::WREC::Generator::generateParenthesesNonGreedy):
        (JSC::WREC::Generator::generateParenthesesResetTrampoline):
        (JSC::WREC::Generator::generateAssertionBOL):
        (JSC::WREC::Generator::generateAssertionEOL):
        (JSC::WREC::Generator::generateAssertionWordBoundary):
        (JSC::WREC::Generator::generateBackreference):
        (JSC::WREC::Generator::terminateAlternative):
        (JSC::WREC::Generator::terminateDisjunction):
        * wrec/WRECGenerator.h:
        (JSC::WREC::Generator::Generator):
        * wrec/WRECParser.cpp:
        (JSC::WREC::Parser::parsePatternCharacterQualifier):
        (JSC::WREC::Parser::parseCharacterClassQuantifier):
        (JSC::WREC::Parser::parseBackreferenceQuantifier):
        (JSC::WREC::Parser::parseParentheses):
        (JSC::WREC::Parser::parseCharacterClass):
        (JSC::WREC::Parser::parseOctalEscape):
        (JSC::WREC::Parser::parseEscape):
        (JSC::WREC::Parser::parseTerm):
        (JSC::WREC::Parser::parseDisjunction):
        * wrec/WRECParser.h:
        (JSC::WREC::Parser::Parser):
        (JSC::WREC::Parser::parsePattern):
        (JSC::WREC::Parser::parseAlternative):
        * wtf/Platform.h:

2008-11-28  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Tor Arne Vestbø.

        Fix compilation on Windows CE

        Port away from the use of errno after calling strtol(), instead
        detect conversion errors by checking the result and the stop
        position.

        * runtime/DateMath.cpp:
        (JSC::parseLong):
        (JSC::parseDate):

2008-11-28  Joerg Bornemann  <joerg.bornemann@trolltech.com>

        Reviewed by Simon Hausmann.

        Implement lowResUTCTime() on Windows CE using GetSystemTime as _ftime() is not available.

        * runtime/DateMath.cpp:
        (JSC::lowResUTCTime):

2008-11-28  Simon Hausmann  <hausmann@webkit.org>

        Rubber-stamped by Tor Arne Vestbø.

        Removed unnecessary inclusion of errno.h, which also fixes compilation on Windows CE.

        * runtime/JSGlobalObjectFunctions.cpp:

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

        Not reviewed.

        r38825 made JSFunction::m_body private, but some inspector code in
        WebCore sets the field. Add setters for it.

        * runtime/JSFunction.h:
        (JSC::JSFunction::setBody):

2008-11-27  Sam Weinig  <sam@webkit.org>

        Reviewed by Cameron Zwarich.

        Fix FIXME by adding accessor for JSFunction's m_body property.

        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::cti_op_call_JSFunction):
        (JSC::Interpreter::cti_vm_dontLazyLinkCall):
        (JSC::Interpreter::cti_vm_lazyLinkCall):
        * profiler/Profiler.cpp:
        (JSC::createCallIdentifierFromFunctionImp):
        * runtime/Arguments.h:
        (JSC::Arguments::getArgumentsData):
        (JSC::Arguments::Arguments):
        * runtime/FunctionPrototype.cpp:
        (JSC::functionProtoFuncToString):
        * runtime/JSFunction.h:
        (JSC::JSFunction::JSFunction):
        (JSC::JSFunction::body):

2008-11-27  Sam Weinig  <sam@webkit.org>

        Reviewed by Oliver Hunt.

        Remove unused member variables from ProgramNode.

        * parser/Nodes.h:

2008-11-27  Brent Fulgham  <bfulgham@gmail.com>

        Reviewed by Alexey Proskuryakov.

        Enable mouse panning feaure on Windows Cairo build.
        See http://bugs.webkit.org/show_bug.cgi?id=22525

        * wtf/Platform.h: Enable mouse panning feaure on Windows Cairo build.

2008-11-27  Alp Toker  <alp@nuanti.com>

        Change recently introduced C++ comments in Platform.h to C comments to
        fix the minidom build with traditional C.

        Build GtkLauncher and minidom with the '-ansi' compiler flag to detect
        API header breakage at build time.

        * GNUmakefile.am:
        * wtf/Platform.h:

2008-11-27  Alp Toker  <alp@nuanti.com>

        Remove C++ comment from JavaScriptCore API headers (introduced r35449).
        Fixes build for ANSI C applications using the public API.

        * API/WebKitAvailability.h:

2008-11-26  Eric Seidel  <eric@webkit.org>

        No review, build fix only.

        Fix the JSC Chromium Mac build by adding JavaScriptCore/icu into the include path

        * JavaScriptCore.scons:

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

        Reviewed by Maciej Stachowiak.

        Remove the unused member function JSFunction::getParameterName().

        * runtime/JSFunction.cpp:
        * runtime/JSFunction.h:

2008-11-24  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Geoff Garen.

        Polymorpic caching for get by id chain.  Similar to the polymorphic caching already implemented
        for self and proto accesses (implemented by allowing multiple trampolines to be JIT genertaed,
        and linked together) - the get by id chain caching is implemented as a genericization of the
        proto list caching, allowing cached access lists to contain a mix of proto and proto chain
        accesses (since in JS style inheritance hierarchies you may commonly see a mix of properties
        being overridden on the direct prototype, or higher up its prototype chain).

        In order to allow this patch to compile there is a fix to appease gcc 4.2 compiler issues
        (removing the jumps between fall-through cases in privateExecute).
        
        This patch also removes redundant immediate checking from the reptach code, and fixes a related
        memory leak (failure to deallocate trampolines). 

        ~2% progression on v8 tests (bulk on the win on deltablue)

        * bytecode/Instruction.h:
        (JSC::PolymorphicAccessStructureList::PolymorphicStubInfo::):
        (JSC::PolymorphicAccessStructureList::PolymorphicStubInfo::set):
        (JSC::PolymorphicAccessStructureList::PolymorphicAccessStructureList):
        (JSC::PolymorphicAccessStructureList::derefStructures):
        * interpreter/Interpreter.cpp:
        (JSC::countPrototypeChainEntriesAndCheckForProxies):
        (JSC::Interpreter::tryCacheGetByID):
        (JSC::Interpreter::privateExecute):
        (JSC::Interpreter::tryCTICacheGetByID):
        (JSC::Interpreter::cti_op_get_by_id_self_fail):
        (JSC::getPolymorphicAccessStructureListSlot):
        (JSC::Interpreter::cti_op_get_by_id_proto_list):
        * interpreter/Interpreter.h:
        * jit/JIT.cpp:
        (JSC::JIT::privateCompileGetByIdProto):
        (JSC::JIT::privateCompileGetByIdSelfList):
        (JSC::JIT::privateCompileGetByIdProtoList):
        (JSC::JIT::privateCompileGetByIdChainList):
        (JSC::JIT::privateCompileGetByIdChain):
        (JSC::JIT::privateCompilePatchGetArrayLength):
        * jit/JIT.h:
        (JSC::JIT::compileGetByIdChainList):

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

        Reviewed by Alexey Proskuryakov.

        Move the collect() call in Heap::heapAllocate() that is conditionally
        compiled under COLLECT_ON_EVERY_ALLOCATION so that it is before we get
        information about the heap. This was causing assertion failures for me
        while I was reducing a bug.

        * runtime/Collector.cpp:
        (JSC::Heap::heapAllocate):

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

        Reviewed by Geoff Garen.

        Bug 13790: Function declarations are not treated as statements (used to affect starcraft2.com)
        <https://bugs.webkit.org/show_bug.cgi?id=13790>

        Modify the parser to treat function declarations as statements,
        simplifying the grammar in the process. Technically, according to the
        grammar in the ECMA spec, function declarations are not statements and
        can not be used everywhere that statements can, but it is not worth the
        possibility compatibility issues just to stick to the spec in this case.

        * parser/Grammar.y:
        * parser/Nodes.cpp:
        (JSC::FuncDeclNode::emitBytecode): Avoid returning ignoredResult()
        as a result, because it causes a crash in DoWhileNode::emitBytecode().

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

        Reviewed by Sam Weinig.
        
        Unroll the regexp matching loop by 1. 10% speedup on simple matching
        stress test. No change on SunSpider.
        
        (I decided not to unroll to arbitrary levels because the returns diminsh
        quickly.)

        * wrec/WREC.cpp:
        (JSC::WREC::compileRegExp):
        * wrec/WRECGenerator.cpp:
        (JSC::WREC::Generator::generateJumpIfEndOfInput):
        (JSC::WREC::Generator::generateJumpIfNotEndOfInput):
        * wrec/WRECGenerator.h:
        * wrec/WRECParser.h:
        (JSC::WREC::Parser::error):
        (JSC::WREC::Parser::parsePattern):

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

        Reviewed by Sam Weinig.
        
        Removed some unnecessary "Generator::" prefixes.

        * wrec/WRECGenerator.cpp:
        (JSC::WREC::Generator::generateEnter):
        (JSC::WREC::Generator::generateReturnSuccess):
        (JSC::WREC::Generator::generateSaveIndex):
        (JSC::WREC::Generator::generateIncrementIndex):
        (JSC::WREC::Generator::generateLoopIfNotEndOfInput):
        (JSC::WREC::Generator::generateReturnFailure):

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

        Reviewed by Sam Weinig.
        
        Made a bunch of WREC::Parser functions private, and added an explicit
        "reset()" function, so a parser can be reused.

        * wrec/WRECParser.h:
        (JSC::WREC::Parser::Parser):
        (JSC::WREC::Parser::generator):
        (JSC::WREC::Parser::ignoreCase):
        (JSC::WREC::Parser::multiline):
        (JSC::WREC::Parser::recordSubpattern):
        (JSC::WREC::Parser::numSubpatterns):
        (JSC::WREC::Parser::parsePattern):
        (JSC::WREC::Parser::parseAlternative):
        (JSC::WREC::Parser::reset):

2008-11-24  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Cameron Zwarich.

        Implement repatching for get by id chain.
        Previously the access is performed in a function stub, in the repatch form
        the trampoline is not called to; instead the hot path is relinked to jump
        directly to the trampoline, if it fails it will jump to the slow case.

        https://bugs.webkit.org/show_bug.cgi?id=22449
        3% progression on deltablue.

        * jit/JIT.cpp:
        (JSC::JIT::privateCompileGetByIdProto):
        (JSC::JIT::privateCompileGetByIdChain):

2008-11-24  Joerg Bornemann  <joerg.bornemann@trolltech.com>

        Reviewed by Simon Hausmann.

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

        Various small compilation fixes to make the Qt port of WebKit
        compile on Windows CE.

        * config.h: Don't set _CRT_RAND_S for CE, it's not available.
        * jsc.cpp: Disabled use of debugger includes for CE. It
          does not have the debugging functions.
        * runtime/DateMath.cpp: Use localtime() on Windows CE.
        * wtf/Assertions.cpp: Compile on Windows CE without debugger.
        * wtf/Assertions.h: Include windows.h before defining ASSERT.
        * wtf/MathExtras.h: Include stdlib.h instead of xmath.h.
        * wtf/Platform.h: Disable ERRNO_H and detect endianess based
          on the Qt endianess. On Qt for Windows CE the endianess is
          defined by the vendor specific build spec.
        * wtf/Threading.h: Use the volatile-less atomic functions.
        * wtf/dtoa.cpp: Compile without errno.
        * wtf/win/MainThreadWin.cpp: Don't include windows.h on CE after
        Assertions.h due to the redefinition of ASSERT.

2008-11-22  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Cameron Zwarich.

        Replace accidentally deleted immediate check from get by id chain trampoline.
        https://bugs.webkit.org/show_bug.cgi?id=22413

        * jit/JIT.cpp:
        (JSC::JIT::privateCompileGetByIdChain):

2008-11-21  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Oliver Hunt.

        Add (really) polymorphic caching for get by id self.
        Very similar to caching of prototype accesses, described below.

        Oh, also, probably shouldn't have been leaking those structure list objects.
        
        4% preogression on deltablue.

        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::dump):
        (JSC::CodeBlock::derefStructures):
        (JSC::PrototypeStructureList::derefStructures):
        * bytecode/Instruction.h:
        * bytecode/Opcode.h:
        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::privateExecute):
        (JSC::Interpreter::cti_op_get_by_id_self_fail):
        * jit/JIT.cpp:
        (JSC::JIT::privateCompileMainPass):
        (JSC::JIT::privateCompileGetByIdSelfList):
        (JSC::JIT::patchGetByIdSelf):
        * jit/JIT.h:
        (JSC::JIT::compileGetByIdSelfList):

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

        Reviewed by Sam Weinig.
        
        Fixed many crashes seen 'round the world (but only in release builds).
        
        Update outputParameter offset to reflect slight re-ordering of push
        instructions in r38669.

        * wrec/WRECGenerator.cpp:

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

        Reviewed by Sam Weinig.
        
        A little more RegExp refactoring.
        
        Deployed a helper function for reading the next character. Used the "link
        vector of jumps" helper in a place I missed before.

        * wrec/WRECGenerator.cpp:
        (JSC::WREC::Generator::generateLoadCharacter):
        (JSC::WREC::Generator::generatePatternCharacter):
        (JSC::WREC::Generator::generateCharacterClass):
        (JSC::WREC::Generator::generateAssertionEOL):
        (JSC::WREC::Generator::generateAssertionWordBoundary):
        * wrec/WRECGenerator.h:

2008-11-21  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Dan Bernstein.

        https://bugs.webkit.org/show_bug.cgi?id=22402
        Replace abort() with CRASH()

        * wtf/Assertions.h: Added a different method to crash, which should work even is 0xbbadbeef
        is a valid memory address.

        * runtime/Collector.cpp:
        * wtf/FastMalloc.cpp:
        * wtf/FastMalloc.h:
        * wtf/TCSpinLock.h:
        Replace abort() with CRASH().

2008-11-21  Alexey Proskuryakov  <ap@webkit.org>

        Reverted fix for bug 22042 (Replace abort() with CRASH()), because it was breaking
        FOR_EACH_OPCODE_ID macro somehow, making Safari crash.

        * runtime/Collector.cpp:
        (JSC::Heap::heapAllocate):
        (JSC::Heap::collect):
        * wtf/Assertions.h:
        * wtf/FastMalloc.cpp:
        (WTF::fastMalloc):
        (WTF::fastCalloc):
        (WTF::fastRealloc):
        (WTF::InitSizeClasses):
        (WTF::PageHeapAllocator::New):
        (WTF::TCMallocStats::do_malloc):
        * wtf/FastMalloc.h:
        * wtf/TCSpinLock.h:
        (TCMalloc_SpinLock::Init):
        (TCMalloc_SpinLock::Finalize):
        (TCMalloc_SpinLock::Lock):
        (TCMalloc_SpinLock::Unlock):

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

        Reviewed by Sam Weinig.
        
        A little more RegExp refactoring.
        
        Moved all assembly from WREC.cpp into WRECGenerator helper functions.
        This should help with portability and readability.
        
        Removed ASSERTs after calls to executableCopy(), and changed
        executableCopy() to ASSERT instead.

        * assembler/X86Assembler.h:
        (JSC::X86Assembler::executableCopy):
        * jit/JIT.cpp:
        (JSC::JIT::privateCompile):
        (JSC::JIT::privateCompileGetByIdSelf):
        (JSC::JIT::privateCompileGetByIdProto):
        (JSC::JIT::privateCompileGetByIdChain):
        (JSC::JIT::privateCompilePutByIdReplace):
        (JSC::JIT::privateCompilePutByIdTransition):
        (JSC::JIT::privateCompileCTIMachineTrampolines):
        (JSC::JIT::privateCompilePatchGetArrayLength):
        * wrec/WREC.cpp:
        (JSC::WREC::compileRegExp):
        * wrec/WRECGenerator.cpp:
        (JSC::WREC::Generator::generateEnter):
        (JSC::WREC::Generator::generateReturnSuccess):
        (JSC::WREC::Generator::generateSaveIndex):
        (JSC::WREC::Generator::generateIncrementIndex):
        (JSC::WREC::Generator::generateLoopIfNotEndOfInput):
        (JSC::WREC::Generator::generateReturnFailure):
        * wrec/WRECGenerator.h:
        * wrec/WRECParser.h:
        (JSC::WREC::Parser::ignoreCase):
        (JSC::WREC::Parser::generator):

2008-11-21  Alexey Proskuryakov  <ap@webkit.org>

        Build fix.

        * wtf/Assertions.h: Use ::abort for C++ code.

2008-11-21  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=22402
        Replace abort() with CRASH()

        * wtf/Assertions.h: Added abort() after an attempt to crash for extra safety.

        * runtime/Collector.cpp:
        * wtf/FastMalloc.cpp:
        * wtf/FastMalloc.h:
        * wtf/TCSpinLock.h:
        Replace abort() with CRASH().

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

        Reviewed by Sam Weinig.
        
        Renamed wrec => generator.

        * wrec/WRECFunctors.cpp:
        (JSC::WREC::GeneratePatternCharacterFunctor::generateAtom):
        (JSC::WREC::GeneratePatternCharacterFunctor::backtrack):
        (JSC::WREC::GenerateCharacterClassFunctor::generateAtom):
        (JSC::WREC::GenerateCharacterClassFunctor::backtrack):
        (JSC::WREC::GenerateBackreferenceFunctor::generateAtom):
        (JSC::WREC::GenerateBackreferenceFunctor::backtrack):
        (JSC::WREC::GenerateParenthesesNonGreedyFunctor::generateAtom):

2008-11-19  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Darin Adler.

        Add support for (really) polymorphic caching of prototype accesses.
        
        If a cached prototype access misses, cti_op_get_by_id_proto_list is called.
        When this occurs the Structure pointers from the instruction stream are copied
        off into a new ProtoStubInfo object.  A second prototype access trampoline is
        generated, and chained onto the first.  Subsequent missed call to
        cti_op_get_by_id_proto_list_append, which append futher new trampolines, up to
        PROTOTYPE_LIST_CACHE_SIZE (currently 4).  If any of the misses result in an
        access other than to a direct prototype property, list formation is halted (or
        for the initial miss, does not take place at all).

        Separate fail case functions are provided for each access since this contributes
        to the performance progression (enables better processor branch prediction).

        Overall this is a near 5% progression on v8, with around 10% wins on richards
        and deltablue.

        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::dump):
        (JSC::CodeBlock::derefStructures):
        * bytecode/Instruction.h:
        (JSC::ProtoStructureList::ProtoStubInfo::set):
        (JSC::ProtoStructureList::ProtoStructureList):
        (JSC::Instruction::Instruction):
        (JSC::Instruction::):
        * bytecode/Opcode.h:
        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::privateExecute):
        (JSC::Interpreter::tryCTICacheGetByID):
        (JSC::Interpreter::cti_op_put_by_id_fail):
        (JSC::Interpreter::cti_op_get_by_id_self_fail):
        (JSC::Interpreter::cti_op_get_by_id_proto_list):
        (JSC::Interpreter::cti_op_get_by_id_proto_list_append):
        (JSC::Interpreter::cti_op_get_by_id_proto_list_full):
        (JSC::Interpreter::cti_op_get_by_id_proto_fail):
        (JSC::Interpreter::cti_op_get_by_id_chain_fail):
        (JSC::Interpreter::cti_op_get_by_id_array_fail):
        (JSC::Interpreter::cti_op_get_by_id_string_fail):
        * interpreter/Interpreter.h:
        * jit/JIT.cpp:
        (JSC::JIT::privateCompileMainPass):
        (JSC::JIT::privateCompileGetByIdSelf):
        (JSC::JIT::privateCompileGetByIdProto):
        (JSC::JIT::privateCompileGetByIdProtoList):
        (JSC::JIT::privateCompileGetByIdChain):
        (JSC::JIT::privateCompileCTIMachineTrampolines):
        (JSC::JIT::privateCompilePatchGetArrayLength):
        * jit/JIT.h:
        (JSC::JIT::compileGetByIdProtoList):

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

        Try and fix the tiger build.

        * parser/Grammar.y:

2008-11-20  Eric Seidel  <eric@webkit.org>

        Reviewed by Darin Adler.

        Make JavaScriptCore Chromium build under Windows (cmd only, cygwin almost works)
        https://bugs.webkit.org/show_bug.cgi?id=22347

        * JavaScriptCore.scons:
        * parser/Parser.cpp: Add using std::auto_ptr since we use auto_ptr

2008-11-20  Steve Falkenburg  <sfalken@apple.com>

        Fix build.
        
        Reviewed by Sam Weinig.

        * parser/Parser.cpp:
        (JSC::Parser::reparse):

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

        Reviewed by Sam Weinig.

        A little more RegExp refactoring.
        
        Created a helper function in the assembler for linking a vector of
        JmpSrc to a location, and deployed it in a bunch of places.

        * JavaScriptCore.xcodeproj/project.pbxproj:
        * assembler/X86Assembler.h:
        (JSC::X86Assembler::link):
        * wrec/WREC.cpp:
        (JSC::WREC::compileRegExp):
        * wrec/WRECGenerator.cpp:
        (JSC::WREC::Generator::generateNonGreedyQuantifier):
        (JSC::WREC::Generator::generateGreedyQuantifier):
        (JSC::WREC::Generator::generateCharacterClassInverted):
        (JSC::WREC::Generator::generateParentheses):
        (JSC::WREC::Generator::generateParenthesesResetTrampoline):
        (JSC::WREC::Generator::generateAssertionBOL):
        (JSC::WREC::Generator::generateAssertionEOL):
        (JSC::WREC::Generator::generateAssertionWordBoundary):
        (JSC::WREC::Generator::terminateAlternative):
        (JSC::WREC::Generator::terminateDisjunction):
        * wrec/WRECParser.cpp:
        * wrec/WRECParser.h:
        (JSC::WREC::Parser::consumeHex):

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

        Fix non-mac builds.

        * parser/Lexer.cpp:
        * parser/Parser.cpp:

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

        Reviewed by Darin Adler.

        Patch for https://bugs.webkit.org/show_bug.cgi?id=22385
        <rdar://problem/6390179>
        Lazily reparse FunctionBodyNodes on first execution.

        - Saves 57MB on Membuster head.

        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::generate): Remove vector shrinking since this is now
        handled by destroying the ScopeNodeData after generation.

        * parser/Grammar.y: Add alternate NoNode version of the grammar
        that does not create nodes.  This is used to lazily create FunctionBodyNodes
        on first execution.

        * parser/Lexer.cpp:
        (JSC::Lexer::setCode): Fix bug where on reparse, the Lexer was confused about
        what position and length meant. Position is the current position in the original
        data buffer (important for getting correct line/column information) and length
        the end offset in the original buffer.
        * parser/Lexer.h:
        (JSC::Lexer::sourceCode): Positions are relative to the beginning of the buffer.

        * parser/Nodes.cpp:
        (JSC::ScopeNodeData::ScopeNodeData): Move initialization of ScopeNode data here.
        (JSC::ScopeNode::ScopeNode): Add constructor that only sets the JSGlobalData
        for FunctionBodyNode stubs.
        (JSC::ScopeNode::~ScopeNode): Release m_children now that we don't inherit from
        BlockNode.
        (JSC::ScopeNode::releaseNodes): Ditto.
        (JSC::EvalNode::generateBytecode): Only shrink m_children, as we need to keep around
        the rest of the data.
        (JSC::FunctionBodyNode::FunctionBodyNode): Add constructor that only sets the
        JSGlobalData. 
        (JSC::FunctionBodyNode::create): Ditto.
        (JSC::FunctionBodyNode::generateBytecode): If we don't have the data, do a reparse
        to construct it. Then after generation, destroy the data.
        (JSC::ProgramNode::generateBytecode): After generation, destroy the AST data.
        * parser/Nodes.h:
        (JSC::ExpressionNode::): Add isFuncExprNode for FunctionConstructor.
        (JSC::StatementNode::): Add isExprStatementNode for FunctionConstructor.
        (JSC::ExprStatementNode::): Ditto.
        (JSC::ExprStatementNode::expr): Add accessor for FunctionConstructor.
        (JSC::FuncExprNode::): Add isFuncExprNode for FunctionConstructor

        (JSC::ScopeNode::adoptData): Adopts a ScopeNodeData.
        (JSC::ScopeNode::data): Accessor for ScopeNodeData.
        (JSC::ScopeNode::destroyData): Deletes the ScopeNodeData.
        (JSC::ScopeNode::setFeatures): Added.
        (JSC::ScopeNode::varStack): Added assert.
        (JSC::ScopeNode::functionStack): Ditto.
        (JSC::ScopeNode::children): Ditto.
        (JSC::ScopeNode::neededConstants): Ditto.
        Factor m_varStack, m_functionStack, m_children and m_numConstants into ScopeNodeData.

        * parser/Parser.cpp:
        (JSC::Parser::reparse): Reparse the SourceCode in the FunctionBodyNode and set
        set up the ScopeNodeData for it. 
        * parser/Parser.h:

        * parser/SourceCode.h:
        (JSC::SourceCode::endOffset): Added for use in the lexer.

        * runtime/FunctionConstructor.cpp:
        (JSC::getFunctionBody): Assuming a ProgramNode with one FunctionExpression in it,
        get the FunctionBodyNode.  Any issues signifies a parse failure in constructFunction. 
        (JSC::constructFunction): Make parsing functions in the form new Function(""), easier
        by concatenating the strings together (with some glue) and parsing the function expression
        as a ProgramNode from which we can receive the FunctionBodyNode. This has the added benefit
        of not having special parsing code for the arguments and lazily constructing the 
        FunctionBodyNode's AST on first execution.

        * runtime/Identifier.h:
        (JSC::operator!=): Added.

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

        Reviewed by Geoffrey Garen.

        Speedup the lexer to offset coming re-parsing patch.

        - .6% progression on Sunspider.

        * bytecompiler/SegmentedVector.h:
        (JSC::SegmentedVector::shrink): Fixed bug where m_size would not be
        set when shrinking to 0.

        * parser/Lexer.cpp:
        (JSC::Lexer::Lexer):
        (JSC::Lexer::isIdentStart): Use isASCIIAlpha and isASCII to avoid going into ICU in the common cases.
        (JSC::Lexer::isIdentPart): Use isASCIIAlphanumeric and isASCII to avoid going into ICU in the common cases
        (JSC::isDecimalDigit): Use version in ASCIICType.h. Inlining it was a regression.
        (JSC::Lexer::isHexDigit): Ditto.
        (JSC::Lexer::isOctalDigit): Ditto.
        (JSC::Lexer::clear): Resize the m_identifiers SegmentedVector to initial
        capacity
        * parser/Lexer.h: Remove unused m_strings vector. Make m_identifiers
        a SegmentedVector<Identifier> to avoid allocating a new Identifier* for
        each identifier found.  The SegmentedVector is need so we can passes 
        references to the Identifier to the parser, which remain valid even when
        the vector is resized.
        (JSC::Lexer::makeIdentifier): Inline and return a reference to the added
        Identifier.

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

        Reviewed by Darin Adler.

        Add isASCII to ASCIICType.  Use coming soon!

        * wtf/ASCIICType.h:
        (WTF::isASCII):

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

        Reviewed by Darin Adler.

        Add OwnPtr constructor and OwnPtr::adopt that take an auto_ptr.

        * wtf/OwnPtr.h:
        (WTF::OwnPtr::OwnPtr):
        (WTF::OwnPtr::adopt):

2008-11-20  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=22364
        Crashes seen on Tiger buildbots due to worker threads exhausting pthread keys

        * runtime/Collector.cpp:
        (JSC::Heap::Heap):
        (JSC::Heap::destroy):
        (JSC::Heap::makeUsableFromMultipleThreads):
        (JSC::Heap::registerThread):
        * runtime/Collector.h:
        Pthread key for tracking threads is only created on request now, because this is a limited
        resource, and thread tracking is not needed for worker heaps, or for WebCore heap.

        * API/JSContextRef.cpp: (JSGlobalContextCreateInGroup): Call makeUsableFromMultipleThreads().

        * runtime/JSGlobalData.cpp: (JSC::JSGlobalData::sharedInstance): Ditto.

        * runtime/JSGlobalData.h: (JSC::JSGlobalData::makeUsableFromMultipleThreads): Just forward
        the call to Heap, which clients need not know about, ideally.

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

        Reviewed by Sam Weinig.
        
        A little more WREC refactoring.
        
        Removed the "Register" suffix from register names in WREC, and renamed:
            currentPosition => index
            currentValue => character
            quantifierCount => repeatCount
            
        Added a top-level parsePattern function to the WREC parser, which
        allowed me to remove the error() and atEndOfPattern() accessors.
        
        Factored out an MSVC customization into a constant.
        
        Renamed nextLabel => beginPattern.

        * wrec/WREC.cpp:
        (JSC::WREC::compileRegExp):
        * wrec/WRECGenerator.cpp:
        (JSC::WREC::Generator::generateBacktrack1):
        (JSC::WREC::Generator::generateBacktrackBackreference):
        (JSC::WREC::Generator::generateBackreferenceQuantifier):
        (JSC::WREC::Generator::generateNonGreedyQuantifier):
        (JSC::WREC::Generator::generateGreedyQuantifier):
        (JSC::WREC::Generator::generatePatternCharacter):
        (JSC::WREC::Generator::generateCharacterClassInvertedRange):
        (JSC::WREC::Generator::generateCharacterClassInverted):
        (JSC::WREC::Generator::generateCharacterClass):
        (JSC::WREC::Generator::generateParentheses):
        (JSC::WREC::Generator::generateParenthesesResetTrampoline):
        (JSC::WREC::Generator::generateAssertionBOL):
        (JSC::WREC::Generator::generateAssertionEOL):
        (JSC::WREC::Generator::generateAssertionWordBoundary):
        (JSC::WREC::Generator::generateBackreference):
        (JSC::WREC::Generator::generateDisjunction):
        (JSC::WREC::Generator::terminateDisjunction):
        * wrec/WRECGenerator.h:
        * wrec/WRECParser.h:
        (JSC::WREC::Parser::parsePattern):

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

        Reviewed by Darin Adler.
        
        https://bugs.webkit.org/show_bug.cgi?id=22361
        A little more RegExp refactoring.
        
        Consistently named variables holding the starting position at which
        regexp matching should begin to "startOffset".
        
        A few more "regExpObject" => "regExpConstructor" changes.
        
        Refactored RegExpObject::match for clarity, and replaced a slow "get"
        of the "global" property with a fast access to the global bit.
        
        Made the error message you see when RegExpObject::match has no input a
        little more informative, as in Firefox.

        * runtime/RegExp.cpp:
        (JSC::RegExp::match):
        * runtime/RegExp.h:
        * runtime/RegExpObject.cpp:
        (JSC::RegExpObject::match):
        * runtime/StringPrototype.cpp:
        (JSC::stringProtoFuncReplace):
        (JSC::stringProtoFuncMatch):
        (JSC::stringProtoFuncSearch):

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

        Reviewed by Sam Weinig.
        
        A little more refactoring.
        
        Removed the "emit" and "emitUnlinked" prefixes from the assembler.
        
        Moved the JmpSrc and JmpDst class definitions to the top of the X86
        assembler class, in accordance with WebKit style guidelines.

        * assembler/X86Assembler.h:
        (JSC::X86Assembler::JmpSrc::JmpSrc):
        (JSC::X86Assembler::JmpDst::JmpDst):
        (JSC::X86Assembler::int3):
        (JSC::X86Assembler::pushl_m):
        (JSC::X86Assembler::popl_m):
        (JSC::X86Assembler::movl_rr):
        (JSC::X86Assembler::addl_rr):
        (JSC::X86Assembler::addl_i8r):
        (JSC::X86Assembler::addl_i8m):
        (JSC::X86Assembler::addl_i32r):
        (JSC::X86Assembler::addl_mr):
        (JSC::X86Assembler::andl_rr):
        (JSC::X86Assembler::andl_i32r):
        (JSC::X86Assembler::cmpl_i8r):
        (JSC::X86Assembler::cmpl_rr):
        (JSC::X86Assembler::cmpl_rm):
        (JSC::X86Assembler::cmpl_mr):
        (JSC::X86Assembler::cmpl_i32r):
        (JSC::X86Assembler::cmpl_i32m):
        (JSC::X86Assembler::cmpl_i8m):
        (JSC::X86Assembler::cmpw_rm):
        (JSC::X86Assembler::orl_rr):
        (JSC::X86Assembler::orl_mr):
        (JSC::X86Assembler::orl_i32r):
        (JSC::X86Assembler::subl_rr):
        (JSC::X86Assembler::subl_i8r):
        (JSC::X86Assembler::subl_i8m):
        (JSC::X86Assembler::subl_i32r):
        (JSC::X86Assembler::subl_mr):
        (JSC::X86Assembler::testl_i32r):
        (JSC::X86Assembler::testl_i32m):
        (JSC::X86Assembler::testl_rr):
        (JSC::X86Assembler::xorl_i8r):
        (JSC::X86Assembler::xorl_rr):
        (JSC::X86Assembler::sarl_i8r):
        (JSC::X86Assembler::sarl_CLr):
        (JSC::X86Assembler::shl_i8r):
        (JSC::X86Assembler::shll_CLr):
        (JSC::X86Assembler::imull_rr):
        (JSC::X86Assembler::imull_i32r):
        (JSC::X86Assembler::idivl_r):
        (JSC::X86Assembler::negl_r):
        (JSC::X86Assembler::movl_mr):
        (JSC::X86Assembler::movzbl_rr):
        (JSC::X86Assembler::movzwl_mr):
        (JSC::X86Assembler::movl_rm):
        (JSC::X86Assembler::movl_i32r):
        (JSC::X86Assembler::movl_i32m):
        (JSC::X86Assembler::leal_mr):
        (JSC::X86Assembler::jmp_r):
        (JSC::X86Assembler::jmp_m):
        (JSC::X86Assembler::movsd_mr):
        (JSC::X86Assembler::xorpd_mr):
        (JSC::X86Assembler::movsd_rm):
        (JSC::X86Assembler::movd_rr):
        (JSC::X86Assembler::cvtsi2sd_rr):
        (JSC::X86Assembler::cvttsd2si_rr):
        (JSC::X86Assembler::addsd_mr):
        (JSC::X86Assembler::subsd_mr):
        (JSC::X86Assembler::mulsd_mr):
        (JSC::X86Assembler::addsd_rr):
        (JSC::X86Assembler::subsd_rr):
        (JSC::X86Assembler::mulsd_rr):
        (JSC::X86Assembler::ucomis_rr):
        (JSC::X86Assembler::pextrw_irr):
        (JSC::X86Assembler::call):
        (JSC::X86Assembler::jmp):
        (JSC::X86Assembler::jne):
        (JSC::X86Assembler::jnz):
        (JSC::X86Assembler::je):
        (JSC::X86Assembler::jl):
        (JSC::X86Assembler::jb):
        (JSC::X86Assembler::jle):
        (JSC::X86Assembler::jbe):
        (JSC::X86Assembler::jge):
        (JSC::X86Assembler::jg):
        (JSC::X86Assembler::ja):
        (JSC::X86Assembler::jae):
        (JSC::X86Assembler::jo):
        (JSC::X86Assembler::jp):
        (JSC::X86Assembler::js):
        (JSC::X86Assembler::predictNotTaken):
        (JSC::X86Assembler::convertToFastCall):
        (JSC::X86Assembler::restoreArgumentReference):
        (JSC::X86Assembler::restoreArgumentReferenceForTrampoline):
        (JSC::X86Assembler::modRm_rr):
        (JSC::X86Assembler::modRm_rr_Unchecked):
        (JSC::X86Assembler::modRm_rm):
        (JSC::X86Assembler::modRm_rm_Unchecked):
        (JSC::X86Assembler::modRm_rmsib):
        (JSC::X86Assembler::modRm_opr):
        (JSC::X86Assembler::modRm_opr_Unchecked):
        (JSC::X86Assembler::modRm_opm):
        (JSC::X86Assembler::modRm_opm_Unchecked):
        (JSC::X86Assembler::modRm_opmsib):
        * jit/JIT.cpp:
        (JSC::JIT::emitNakedCall):
        (JSC::JIT::emitNakedFastCall):
        (JSC::JIT::emitCTICall):
        (JSC::JIT::emitJumpSlowCaseIfNotJSCell):
        (JSC::JIT::emitJumpSlowCaseIfNotImmNum):
        (JSC::JIT::emitFastArithDeTagImmediateJumpIfZero):
        (JSC::JIT::emitFastArithIntToImmOrSlowCase):
        (JSC::JIT::emitArithIntToImmWithJump):
        (JSC::JIT::compileOpCall):
        (JSC::JIT::compileOpStrictEq):
        (JSC::JIT::emitSlowScriptCheck):
        (JSC::JIT::putDoubleResultToJSNumberCellOrJSImmediate):
        (JSC::JIT::compileBinaryArithOp):
        (JSC::JIT::privateCompileMainPass):
        (JSC::JIT::privateCompileSlowCases):
        (JSC::JIT::privateCompile):
        (JSC::JIT::privateCompileGetByIdSelf):
        (JSC::JIT::privateCompileGetByIdProto):
        (JSC::JIT::privateCompileGetByIdChain):
        (JSC::JIT::privateCompilePutByIdReplace):
        (JSC::JIT::privateCompilePutByIdTransition):
        (JSC::JIT::privateCompileCTIMachineTrampolines):
        (JSC::JIT::privateCompilePatchGetArrayLength):
        * wrec/WREC.cpp:
        (JSC::WREC::compileRegExp):
        * wrec/WRECGenerator.cpp:
        (JSC::WREC::Generator::generateBackreferenceQuantifier):
        (JSC::WREC::Generator::generateNonGreedyQuantifier):
        (JSC::WREC::Generator::generateGreedyQuantifier):
        (JSC::WREC::Generator::generatePatternCharacter):
        (JSC::WREC::Generator::generateCharacterClassInvertedRange):
        (JSC::WREC::Generator::generateCharacterClassInverted):
        (JSC::WREC::Generator::generateCharacterClass):
        (JSC::WREC::Generator::generateParentheses):
        (JSC::WREC::Generator::generateParenthesesNonGreedy):
        (JSC::WREC::Generator::generateParenthesesResetTrampoline):
        (JSC::WREC::Generator::generateAssertionBOL):
        (JSC::WREC::Generator::generateAssertionEOL):
        (JSC::WREC::Generator::generateAssertionWordBoundary):
        (JSC::WREC::Generator::generateBackreference):
        (JSC::WREC::Generator::generateDisjunction):

2008-11-19  Simon Hausmann  <hausmann@webkit.org>

        Sun CC build fix, removed trailing comman for last enum value.

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

2008-11-19  Mark Rowe  <mrowe@apple.com>

        Reviewed by Alexey Proskuryakov.

        Expand the workaround for Apple GCC compiler bug <rdar://problem/6354696> to all versions of GCC 4.0.1.
        It has been observed with builds 5465 (Xcode 3.0) and 5484 (Xcode 3.1), and there is no evidence
        that it has been fixed in newer builds of GCC 4.0.1.

        This addresses <https://bugs.webkit.org/show_bug.cgi?id=22351> (WebKit nightly crashes on launch on 10.4.11).

        * wtf/StdLibExtras.h:

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

        Reviewed by Maciej Stachowiak and Geoff Garen.

        Bug 22287: ASSERTION FAILED: Not enough jumps linked in slow case codegen in CTI::privateCompileSlowCases())
        <https://bugs.webkit.org/show_bug.cgi?id=22287>

        Fix a typo in the number cell reuse code where the first and second
        operands are sometimes confused.

        * jit/JIT.cpp:
        (JSC::JIT::compileBinaryArithOpSlowCase):

2008-11-18  Dan Bernstein  <mitz@apple.com>

        - try to fix the Windows build

        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::privateExecute):

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

        Reviewed by Sam Weinig.
        
        Minor RegExp cleanup.
        
        SunSpider says no change.

        * runtime/RegExpObject.cpp:
        (JSC::RegExpObject::match): Renamed "regExpObj" to "regExpConstructor".

        * wrec/WREC.cpp:
        (JSC::WREC::compileRegExp): Instead of checking for a NULL output vector,
        ASSERT that the output vector is not NULL. (The rest of WREC is not
        safe to use with a NULL output vector, and we probably don't want to
        spend the time and/or performance to make it safe.)

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

        Reviewed by Darin Adler.
        
        A little more renaming and refactoring.
        
        VM_CHECK_EXCEPTION() => CHECK_FOR_EXCEPTION().
        NEXT_INSTRUCTION => NEXT_INSTRUCTION().

        Removed the "Error_" and "TempError_" prefixes from WREC error types.

        Refactored the WREC parser so it doesn't need a "setError" function,
        and changed "isEndOfPattern" and its use -- they read kind of backwards
        before.
        
        Changed our "TODO:" error messages at least to say something, since you
        can't say "TODO:" in shipping software.

        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::privateExecute):
        (JSC::Interpreter::cti_op_convert_this):
        (JSC::Interpreter::cti_op_add):
        (JSC::Interpreter::cti_op_pre_inc):
        (JSC::Interpreter::cti_op_loop_if_less):
        (JSC::Interpreter::cti_op_loop_if_lesseq):
        (JSC::Interpreter::cti_op_put_by_id):
        (JSC::Interpreter::cti_op_put_by_id_second):
        (JSC::Interpreter::cti_op_put_by_id_generic):
        (JSC::Interpreter::cti_op_put_by_id_fail):
        (JSC::Interpreter::cti_op_get_by_id):
        (JSC::Interpreter::cti_op_get_by_id_second):
        (JSC::Interpreter::cti_op_get_by_id_generic):
        (JSC::Interpreter::cti_op_get_by_id_fail):
        (JSC::Interpreter::cti_op_instanceof):
        (JSC::Interpreter::cti_op_del_by_id):
        (JSC::Interpreter::cti_op_mul):
        (JSC::Interpreter::cti_op_call_NotJSFunction):
        (JSC::Interpreter::cti_op_resolve):
        (JSC::Interpreter::cti_op_construct_NotJSConstruct):
        (JSC::Interpreter::cti_op_get_by_val):
        (JSC::Interpreter::cti_op_resolve_func):
        (JSC::Interpreter::cti_op_sub):
        (JSC::Interpreter::cti_op_put_by_val):
        (JSC::Interpreter::cti_op_put_by_val_array):
        (JSC::Interpreter::cti_op_lesseq):
        (JSC::Interpreter::cti_op_loop_if_true):
        (JSC::Interpreter::cti_op_negate):
        (JSC::Interpreter::cti_op_resolve_skip):
        (JSC::Interpreter::cti_op_resolve_global):
        (JSC::Interpreter::cti_op_div):
        (JSC::Interpreter::cti_op_pre_dec):
        (JSC::Interpreter::cti_op_jless):
        (JSC::Interpreter::cti_op_not):
        (JSC::Interpreter::cti_op_jtrue):
        (JSC::Interpreter::cti_op_post_inc):
        (JSC::Interpreter::cti_op_eq):
        (JSC::Interpreter::cti_op_lshift):
        (JSC::Interpreter::cti_op_bitand):
        (JSC::Interpreter::cti_op_rshift):
        (JSC::Interpreter::cti_op_bitnot):
        (JSC::Interpreter::cti_op_resolve_with_base):
        (JSC::Interpreter::cti_op_mod):
        (JSC::Interpreter::cti_op_less):
        (JSC::Interpreter::cti_op_neq):
        (JSC::Interpreter::cti_op_post_dec):
        (JSC::Interpreter::cti_op_urshift):
        (JSC::Interpreter::cti_op_bitxor):
        (JSC::Interpreter::cti_op_bitor):
        (JSC::Interpreter::cti_op_push_scope):
        (JSC::Interpreter::cti_op_to_jsnumber):
        (JSC::Interpreter::cti_op_in):
        (JSC::Interpreter::cti_op_del_by_val):
        * wrec/WREC.cpp:
        (JSC::WREC::compileRegExp):
        * wrec/WRECParser.cpp:
        (JSC::WREC::Parser::parseGreedyQuantifier):
        (JSC::WREC::Parser::parseParentheses):
        (JSC::WREC::Parser::parseCharacterClass):
        (JSC::WREC::Parser::parseEscape):
        * wrec/WRECParser.h:
        (JSC::WREC::Parser::):
        (JSC::WREC::Parser::atEndOfPattern):

2008-11-18  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=22337
        Enable workers by default

        * Configurations/JavaScriptCore.xcconfig: Define ENABLE_WORKERS.

2008-11-18  Alexey Proskuryakov  <ap@webkit.org>

        - Windows build fix

        * wrec/WRECFunctors.h:
        * wrec/WRECGenerator.h:
        * wrec/WRECParser.h:
        CharacterClass is a struct, not a class, fix forward declarations.

2008-11-18  Dan Bernstein  <mitz@apple.com>

        - Windows build fix

        * assembler/X86Assembler.h:

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

        Not reviewed.
        
        Try to fix gtk build.

        * wrec/Quantifier.h:

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

        Not reviewed.
        
        Try to fix gtk build.

        * assembler/AssemblerBuffer.h:

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

        Reviewed by Sam Weinig.
        
        Split WREC classes out into individual files, with a few modifications
        to more closely match the WebKit coding style.

        * GNUmakefile.am:
        * JavaScriptCore.scons:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * assembler/X86Assembler.h:
        * runtime/RegExp.cpp:
        * wrec/CharacterClass.cpp: Copied from wrec/CharacterClassConstructor.cpp.
        (JSC::WREC::CharacterClass::newline):
        (JSC::WREC::CharacterClass::digits):
        (JSC::WREC::CharacterClass::spaces):
        (JSC::WREC::CharacterClass::wordchar):
        (JSC::WREC::CharacterClass::nondigits):
        (JSC::WREC::CharacterClass::nonspaces):
        (JSC::WREC::CharacterClass::nonwordchar):
        * wrec/CharacterClass.h: Copied from wrec/CharacterClassConstructor.h.
        * wrec/CharacterClassConstructor.cpp:
        (JSC::WREC::CharacterClassConstructor::addSortedRange):
        (JSC::WREC::CharacterClassConstructor::append):
        * wrec/CharacterClassConstructor.h:
        * wrec/Quantifier.h: Copied from wrec/WREC.h.
        * wrec/WREC.cpp:
        (JSC::WREC::compileRegExp):
        * wrec/WREC.h:
        * wrec/WRECFunctors.cpp: Copied from wrec/WREC.cpp.
        * wrec/WRECFunctors.h: Copied from wrec/WREC.cpp.
        (JSC::WREC::GenerateAtomFunctor::~GenerateAtomFunctor):
        (JSC::WREC::GeneratePatternCharacterFunctor::GeneratePatternCharacterFunctor):
        (JSC::WREC::GenerateCharacterClassFunctor::GenerateCharacterClassFunctor):
        (JSC::WREC::GenerateBackreferenceFunctor::GenerateBackreferenceFunctor):
        (JSC::WREC::GenerateParenthesesNonGreedyFunctor::GenerateParenthesesNonGreedyFunctor):
        * wrec/WRECGenerator.cpp: Copied from wrec/WREC.cpp.
        (JSC::WREC::Generator::generatePatternCharacter):
        (JSC::WREC::Generator::generateCharacterClassInvertedRange):
        (JSC::WREC::Generator::generateCharacterClassInverted):
        (JSC::WREC::Generator::generateCharacterClass):
        (JSC::WREC::Generator::generateParentheses):
        (JSC::WREC::Generator::generateAssertionBOL):
        (JSC::WREC::Generator::generateAssertionEOL):
        (JSC::WREC::Generator::generateAssertionWordBoundary):
        * wrec/WRECGenerator.h: Copied from wrec/WREC.h.
        * wrec/WRECParser.cpp: Copied from wrec/WREC.cpp.
        (JSC::WREC::Parser::parseGreedyQuantifier):
        (JSC::WREC::Parser::parseCharacterClassQuantifier):
        (JSC::WREC::Parser::parseParentheses):
        (JSC::WREC::Parser::parseCharacterClass):
        (JSC::WREC::Parser::parseEscape):
        (JSC::WREC::Parser::parseTerm):
        * wrec/WRECParser.h: Copied from wrec/WREC.h.
        (JSC::WREC::Parser::):
        (JSC::WREC::Parser::Parser):
        (JSC::WREC::Parser::setError):
        (JSC::WREC::Parser::error):
        (JSC::WREC::Parser::recordSubpattern):
        (JSC::WREC::Parser::numSubpatterns):
        (JSC::WREC::Parser::ignoreCase):
        (JSC::WREC::Parser::multiline):

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

        Not reviewed.
        
        Try to fix a few builds.

        * JavaScriptCoreSources.bkl:

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

        Not reviewed.
        
        Try to fix a few builds.

        * JavaScriptCore.pri:
        * JavaScriptCore.scons:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:

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

        Reviewed by Sam Weinig.
        
        Moved VM/CTI.* => jit/JIT.*.
        
        Removed VM.

        * GNUmakefile.am:
        * JavaScriptCore.pri:
        * JavaScriptCore.scons:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * VM/CTI.cpp: Removed.
        * VM/CTI.h: Removed.
        * bytecode/CodeBlock.cpp:
        * interpreter/Interpreter.cpp:
        * jit: Added.
        * jit/JIT.cpp: Copied from VM/CTI.cpp.
        * jit/JIT.h: Copied from VM/CTI.h.
        * runtime/RegExp.cpp:

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

        Reviewed by Sam Weinig.
        
        Moved runtime/ExecState.* => interpreter/CallFrame.*.

        * API/JSBase.cpp:
        * API/OpaqueJSString.cpp:
        * GNUmakefile.am:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * debugger/DebuggerCallFrame.h:
        * interpreter/CallFrame.cpp: Copied from runtime/ExecState.cpp.
        * interpreter/CallFrame.h: Copied from runtime/ExecState.h.
        * interpreter/Interpreter.cpp:
        * parser/Nodes.cpp:
        * profiler/ProfileGenerator.cpp:
        * profiler/Profiler.cpp:
        * runtime/ClassInfo.h:
        * runtime/Collector.cpp:
        * runtime/Completion.cpp:
        * runtime/ExceptionHelpers.cpp:
        * runtime/ExecState.cpp: Removed.
        * runtime/ExecState.h: Removed.
        * runtime/Identifier.cpp:
        * runtime/JSFunction.cpp:
        * runtime/JSGlobalObjectFunctions.cpp:
        * runtime/JSLock.cpp:
        * runtime/JSNumberCell.h:
        * runtime/JSObject.h:
        * runtime/JSString.h:
        * runtime/Lookup.h:
        * runtime/PropertyNameArray.h:

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

        Not reviewed.
        
        Try to fix Windows build.

        * API/APICast.h:

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

        Not reviewed.
        
        Try to fix Windows build.

        * API/APICast.h:
        * runtime/ExecState.h:

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

        Reviewed by Sam Weinig.
        
        Moved VM/SamplingTool.* => bytecode/SamplingTool.*.

        * GNUmakefile.am:
        * JavaScriptCore.pri:
        * JavaScriptCore.scons:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * JavaScriptCoreSources.bkl:
        * VM/SamplingTool.cpp: Removed.
        * VM/SamplingTool.h: Removed.
        * bytecode/SamplingTool.cpp: Copied from VM/SamplingTool.cpp.
        * bytecode/SamplingTool.h: Copied from VM/SamplingTool.h.
        * jsc.cpp:
        (runWithScripts):

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

        Not reviewed.
        
        Try to fix Windows build.

        * runtime/ExecState.h:

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

        Reviewed by Sam Weinig.
        
        Moved VM/ExceptionHelpers.cpp => runtime/ExceptionHelpers.cpp.

        * GNUmakefile.am:
        * JavaScriptCore.pri:
        * JavaScriptCore.scons:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * JavaScriptCoreSources.bkl:
        * VM/ExceptionHelpers.cpp: Removed.
        * runtime/ExceptionHelpers.cpp: Copied from VM/ExceptionHelpers.cpp.

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

        Reviewed by Sam Weinig.
        
        Moved VM/RegisterFile.cpp => interpreter/RegisterFile.cpp.

        * AllInOneFile.cpp:
        * GNUmakefile.am:
        * JavaScriptCore.pri:
        * JavaScriptCore.scons:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * JavaScriptCoreSources.bkl:
        * VM/RegisterFile.cpp: Removed.
        * interpreter/RegisterFile.cpp: Copied from VM/RegisterFile.cpp.

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

        Not reviewed.
        
        Try to fix Windows build.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:

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

        Not reviewed.
        
        Try to fix Windows build.

        * JavaScriptCore.vcproj/jsc/jsc.vcproj:

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

        Not reviewed.
        
        Try to fix Windows build.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:

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

        Reviewed by Sam Weinig.
        
        Moved:
            VM/ExceptionHelpers.h => runtime/ExceptionHelpers.h
            VM/Register.h => interpreter/Register.h
            VM/RegisterFile.h => interpreter/RegisterFile.h
        
        
        * GNUmakefile.am:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * VM/ExceptionHelpers.h: Removed.
        * VM/Register.h: Removed.
        * VM/RegisterFile.h: Removed.
        * interpreter/Register.h: Copied from VM/Register.h.
        * interpreter/RegisterFile.h: Copied from VM/RegisterFile.h.
        * runtime/ExceptionHelpers.h: Copied from VM/ExceptionHelpers.h.

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

        Not reviewed.
        
        Try to fix Qt build.

        * JavaScriptCore.pri:

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

        Reviewed by Sam Weinig.
        
        Moved VM/Machine.cpp => interpreter/Interpreter.cpp.

        * DerivedSources.make:
        * GNUmakefile.am:
        * JavaScriptCore.pri:
        * JavaScriptCore.scons:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * JavaScriptCoreSources.bkl:
        * VM/Machine.cpp: Removed.
        * interpreter/Interpreter.cpp: Copied from VM/Machine.cpp.

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

        Reviewed by Sam Weinig.
        
        Moved VM/Machine.h => interpreter/Interpreter.h

        * GNUmakefile.am:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * VM/CTI.cpp:
        * VM/CTI.h:
        * VM/ExceptionHelpers.cpp:
        * VM/Machine.cpp:
        * VM/Machine.h: Removed.
        * VM/SamplingTool.cpp:
        * bytecode/CodeBlock.cpp:
        * bytecompiler/BytecodeGenerator.cpp:
        * bytecompiler/BytecodeGenerator.h:
        * debugger/DebuggerCallFrame.cpp:
        * interpreter: Added.
        * interpreter/Interpreter.h: Copied from VM/Machine.h.
        * profiler/ProfileGenerator.cpp:
        * runtime/Arguments.h:
        * runtime/ArrayPrototype.cpp:
        * runtime/Collector.cpp:
        * runtime/Completion.cpp:
        * runtime/ExecState.h:
        * runtime/FunctionPrototype.cpp:
        * runtime/JSActivation.cpp:
        * runtime/JSFunction.cpp:
        * runtime/JSGlobalData.cpp:
        * runtime/JSGlobalObject.cpp:
        * runtime/JSGlobalObjectFunctions.cpp:
        * wrec/WREC.cpp:

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

        Reviewed by Sam Weinig.
        
        Moved runtime/Interpreter.cpp => runtime/Completion.cpp.

        Moved functions from Interpreter.h to Completion.h, and removed
        Interpreter.h from the project.

        * API/JSBase.cpp:
        * AllInOneFile.cpp:
        * GNUmakefile.am:
        * JavaScriptCore.pri:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * JavaScriptCoreSources.bkl:
        * jsc.cpp:
        * runtime/Completion.cpp: Copied from runtime/Interpreter.cpp.
        * runtime/Completion.h:
        * runtime/Interpreter.cpp: Removed.
        * runtime/Interpreter.h: Removed.

2008-11-17  Gabor Loki  <loki@inf.u-szeged.hu>

        Reviewed by Darin Adler.

        <https://bugs.webkit.org/show_bug.cgi?id=22312>
        Fix PCRE include path problem on Qt-port

        * JavaScriptCore.pri:
        * pcre/pcre.pri:

2008-11-17  Gabor Loki  <loki@inf.u-szeged.hu>

        Reviewed by Darin Adler.

        <https://bugs.webkit.org/show_bug.cgi?id=22313>
        Add missing CTI source to the build system on Qt-port

        * JavaScriptCore.pri:

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

        Not reviewed.
        
        Try to fix JSGlue build.

        * JavaScriptCore.xcodeproj/project.pbxproj:

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

        Not reviewed.
        
        Try to fix Qt build.

        * jsc.pro:

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

        Not reviewed.
        
        Try to fix Qt build.

        * JavaScriptCore.pri:

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

        Not reviewed.
        
        Try to fix Qt build.

        * JavaScriptCore.pri:

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

        Reviewed by Sam Weinig.
        
        More file moves:
        
        VM/CodeBlock.* => bytecode/CodeBlock.*
        VM/EvalCodeCache.h => bytecode/EvalCodeCache.h
        VM/Instruction.h => bytecode/Instruction.h
        VM/Opcode.* => bytecode/Opcode.*

        * GNUmakefile.am:
        * JavaScriptCore.scons:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
        * JavaScriptCore.vcproj/jsc/jsc.vcproj:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * JavaScriptCoreSources.bkl:
        * VM/CodeBlock.cpp: Removed.
        * VM/CodeBlock.h: Removed.
        * VM/EvalCodeCache.h: Removed.
        * VM/Instruction.h: Removed.
        * VM/Opcode.cpp: Removed.
        * VM/Opcode.h: Removed.
        * bytecode: Added.
        * bytecode/CodeBlock.cpp: Copied from VM/CodeBlock.cpp.
        * bytecode/CodeBlock.h: Copied from VM/CodeBlock.h.
        * bytecode/EvalCodeCache.h: Copied from VM/EvalCodeCache.h.
        * bytecode/Instruction.h: Copied from VM/Instruction.h.
        * bytecode/Opcode.cpp: Copied from VM/Opcode.cpp.
        * bytecode/Opcode.h: Copied from VM/Opcode.h.
        * jsc.pro:
        * jscore.bkl:

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

        Not reviewed.
        
        Try to fix a few more builds.

        * GNUmakefile.am:
        * JavaScriptCore.pri:
        * JavaScriptCore.scons:
        * JavaScriptCoreSources.bkl:

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

        Not reviewed.
        
        Try to fix gtk build.

        * GNUmakefile.am:

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

        Not reviewed.
        
        Try to fix Windows build.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:

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

        Reviewed by Sam Weinig.
        
        Some file moves:
        
        VM/LabelID.h => bytecompiler/Label.h
        VM/RegisterID.h => bytecompiler/RegisterID.h
        VM/SegmentedVector.h => bytecompiler/SegmentedVector.h
        bytecompiler/CodeGenerator.* => bytecompiler/BytecodeGenerator.*

        * AllInOneFile.cpp:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * VM/LabelID.h: Removed.
        * VM/RegisterID.h: Removed.
        * VM/SegmentedVector.h: Removed.
        * bytecompiler/BytecodeGenerator.cpp: Copied from bytecompiler/CodeGenerator.cpp.
        * bytecompiler/BytecodeGenerator.h: Copied from bytecompiler/CodeGenerator.h.
        * bytecompiler/CodeGenerator.cpp: Removed.
        * bytecompiler/CodeGenerator.h: Removed.
        * bytecompiler/Label.h: Copied from VM/LabelID.h.
        * bytecompiler/LabelScope.h:
        * bytecompiler/RegisterID.h: Copied from VM/RegisterID.h.
        * bytecompiler/SegmentedVector.h: Copied from VM/SegmentedVector.h.
        * jsc.cpp:
        * parser/Nodes.cpp:

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

        Not reviewed.
        
        Try to fix Windows build.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:

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

        Not reviewed.
        
        Try to fix Windows build.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:

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

        Not reviewed.
        
        Try to fix Windows build.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:

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

        Not reviewed.
        
        Try to fix Windows build.

        * JavaScriptCore.vcproj/jsc/jsc.vcproj:

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

        Not reviewed.
        
        Try to fix Windows build.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:

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

        Reviewed by Sam Weinig.
        
        Moved masm => assembler and split "AssemblerBuffer.h" out of "X86Assembler.h".
        
        Also renamed ENABLE_MASM to ENABLE_ASSEMBLER.

        * GNUmakefile.am:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * assembler: Added.
        * assembler/AssemblerBuffer.h: Copied from masm/X86Assembler.h.
        (JSC::AssemblerBuffer::AssemblerBuffer):
        (JSC::AssemblerBuffer::~AssemblerBuffer):
        (JSC::AssemblerBuffer::ensureSpace):
        (JSC::AssemblerBuffer::isAligned):
        (JSC::AssemblerBuffer::putByteUnchecked):
        (JSC::AssemblerBuffer::putByte):
        (JSC::AssemblerBuffer::putShortUnchecked):
        (JSC::AssemblerBuffer::putShort):
        (JSC::AssemblerBuffer::putIntUnchecked):
        (JSC::AssemblerBuffer::putInt):
        (JSC::AssemblerBuffer::data):
        (JSC::AssemblerBuffer::size):
        (JSC::AssemblerBuffer::reset):
        (JSC::AssemblerBuffer::executableCopy):
        (JSC::AssemblerBuffer::grow):
        * assembler/X86Assembler.h: Copied from masm/X86Assembler.h.
        * masm: Removed.
        * masm/X86Assembler.h: Removed.
        * wtf/Platform.h:

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

        Not reviewed.
        
        Try to fix gtk build.

        * GNUmakefile.am:

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

        Not reviewed.
        
        Fixed tyop.

        * VM/CTI.cpp:

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

        Not reviewed.
        
        Try to fix windows build.

        * VM/CTI.cpp:

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

        Not reviewed.
        
        Try to fix gtk build.

        * GNUmakefile.am:

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

        Reviewed by Sam Weinig.

        Renamed ENABLE_CTI and ENABLE(CTI) to ENABLE_JIT and ENABLE(JIT).

        * VM/CTI.cpp:
        * VM/CTI.h:
        * VM/CodeBlock.cpp:
        (JSC::CodeBlock::~CodeBlock):
        * VM/CodeBlock.h:
        (JSC::CodeBlock::CodeBlock):
        * VM/Machine.cpp:
        (JSC::Interpreter::Interpreter):
        (JSC::Interpreter::initialize):
        (JSC::Interpreter::~Interpreter):
        (JSC::Interpreter::execute):
        (JSC::Interpreter::privateExecute):
        * VM/Machine.h:
        * bytecompiler/CodeGenerator.cpp:
        (JSC::prepareJumpTableForStringSwitch):
        * runtime/JSFunction.cpp:
        (JSC::JSFunction::~JSFunction):
        * runtime/JSGlobalData.h:
        * wrec/WREC.h:
        * wtf/Platform.h:
        * wtf/TCSystemAlloc.cpp:

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

        Not reviewed.
        
        Try to fix gtk build.

        * VM/CTI.cpp:

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

        Reviewed by a few people on squirrelfish-dev.
        
        Renamed CTI => JIT.

        * VM/CTI.cpp:
        (JSC::JIT::killLastResultRegister):
        (JSC::JIT::emitGetVirtualRegister):
        (JSC::JIT::emitGetVirtualRegisters):
        (JSC::JIT::emitPutCTIArgFromVirtualRegister):
        (JSC::JIT::emitPutCTIArg):
        (JSC::JIT::emitGetCTIArg):
        (JSC::JIT::emitPutCTIArgConstant):
        (JSC::JIT::getConstantImmediateNumericArg):
        (JSC::JIT::emitPutCTIParam):
        (JSC::JIT::emitGetCTIParam):
        (JSC::JIT::emitPutToCallFrameHeader):
        (JSC::JIT::emitGetFromCallFrameHeader):
        (JSC::JIT::emitPutVirtualRegister):
        (JSC::JIT::emitInitRegister):
        (JSC::JIT::printBytecodeOperandTypes):
        (JSC::JIT::emitAllocateNumber):
        (JSC::JIT::emitNakedCall):
        (JSC::JIT::emitNakedFastCall):
        (JSC::JIT::emitCTICall):
        (JSC::JIT::emitJumpSlowCaseIfNotJSCell):
        (JSC::JIT::linkSlowCaseIfNotJSCell):
        (JSC::JIT::emitJumpSlowCaseIfNotImmNum):
        (JSC::JIT::emitJumpSlowCaseIfNotImmNums):
        (JSC::JIT::getDeTaggedConstantImmediate):
        (JSC::JIT::emitFastArithDeTagImmediate):
        (JSC::JIT::emitFastArithDeTagImmediateJumpIfZero):
        (JSC::JIT::emitFastArithReTagImmediate):
        (JSC::JIT::emitFastArithPotentiallyReTagImmediate):
        (JSC::JIT::emitFastArithImmToInt):
        (JSC::JIT::emitFastArithIntToImmOrSlowCase):
        (JSC::JIT::emitFastArithIntToImmNoCheck):
        (JSC::JIT::emitArithIntToImmWithJump):
        (JSC::JIT::emitTagAsBoolImmediate):
        (JSC::JIT::JIT):
        (JSC::JIT::compileOpCallInitializeCallFrame):
        (JSC::JIT::compileOpCallSetupArgs):
        (JSC::JIT::compileOpCallEvalSetupArgs):
        (JSC::JIT::compileOpConstructSetupArgs):
        (JSC::JIT::compileOpCall):
        (JSC::JIT::compileOpStrictEq):
        (JSC::JIT::emitSlowScriptCheck):
        (JSC::JIT::putDoubleResultToJSNumberCellOrJSImmediate):
        (JSC::JIT::compileBinaryArithOp):
        (JSC::JIT::compileBinaryArithOpSlowCase):
        (JSC::JIT::privateCompileMainPass):
        (JSC::JIT::privateCompileLinkPass):
        (JSC::JIT::privateCompileSlowCases):
        (JSC::JIT::privateCompile):
        (JSC::JIT::privateCompileGetByIdSelf):
        (JSC::JIT::privateCompileGetByIdProto):
        (JSC::JIT::privateCompileGetByIdChain):
        (JSC::JIT::privateCompilePutByIdReplace):
        (JSC::JIT::privateCompilePutByIdTransition):
        (JSC::JIT::unlinkCall):
        (JSC::JIT::linkCall):
        (JSC::JIT::privateCompileCTIMachineTrampolines):
        (JSC::JIT::freeCTIMachineTrampolines):
        (JSC::JIT::patchGetByIdSelf):
        (JSC::JIT::patchPutByIdReplace):
        (JSC::JIT::privateCompilePatchGetArrayLength):
        (JSC::JIT::emitGetVariableObjectRegister):
        (JSC::JIT::emitPutVariableObjectRegister):
        * VM/CTI.h:
        (JSC::JIT::compile):
        (JSC::JIT::compileGetByIdSelf):
        (JSC::JIT::compileGetByIdProto):
        (JSC::JIT::compileGetByIdChain):
        (JSC::JIT::compilePutByIdReplace):
        (JSC::JIT::compilePutByIdTransition):
        (JSC::JIT::compileCTIMachineTrampolines):
        (JSC::JIT::compilePatchGetArrayLength):
        * VM/CodeBlock.cpp:
        (JSC::CodeBlock::unlinkCallers):
        * VM/Machine.cpp:
        (JSC::Interpreter::initialize):
        (JSC::Interpreter::~Interpreter):
        (JSC::Interpreter::execute):
        (JSC::Interpreter::tryCTICachePutByID):
        (JSC::Interpreter::tryCTICacheGetByID):
        (JSC::Interpreter::cti_op_call_JSFunction):
        (JSC::Interpreter::cti_vm_dontLazyLinkCall):
        (JSC::Interpreter::cti_vm_lazyLinkCall):
        * VM/Machine.h:
        * VM/RegisterFile.h:
        * parser/Nodes.h:
        * runtime/JSArray.h:
        * runtime/JSCell.h:
        * runtime/JSFunction.h:
        * runtime/JSImmediate.h:
        * runtime/JSNumberCell.h:
        * runtime/JSObject.h:
        * runtime/JSString.h:
        * runtime/JSVariableObject.h:
        * runtime/ScopeChain.h:
        * runtime/Structure.h:
        * runtime/TypeInfo.h:
        * runtime/UString.h:

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

        Not reviewed.
        
        Try to fix wx build.

        * jscore.bkl:

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

        Reviewed by Sam Weinig.

        Nixed X86:: and X86Assembler:: prefixes in a lot of places using typedefs.

        * VM/CTI.cpp:
        (JSC::CTI::emitGetVirtualRegister):
        (JSC::CTI::emitGetVirtualRegisters):
        (JSC::CTI::emitPutCTIArgFromVirtualRegister):
        (JSC::CTI::emitPutCTIArg):
        (JSC::CTI::emitGetCTIArg):
        (JSC::CTI::emitPutCTIParam):
        (JSC::CTI::emitGetCTIParam):
        (JSC::CTI::emitPutToCallFrameHeader):
        (JSC::CTI::emitGetFromCallFrameHeader):
        (JSC::CTI::emitPutVirtualRegister):
        (JSC::CTI::emitNakedCall):
        (JSC::CTI::emitNakedFastCall):
        (JSC::CTI::emitCTICall):
        (JSC::CTI::emitJumpSlowCaseIfNotJSCell):
        (JSC::CTI::emitJumpSlowCaseIfNotImmNum):
        (JSC::CTI::emitJumpSlowCaseIfNotImmNums):
        (JSC::CTI::emitFastArithDeTagImmediate):
        (JSC::CTI::emitFastArithDeTagImmediateJumpIfZero):
        (JSC::CTI::emitFastArithReTagImmediate):
        (JSC::CTI::emitFastArithPotentiallyReTagImmediate):
        (JSC::CTI::emitFastArithImmToInt):
        (JSC::CTI::emitFastArithIntToImmOrSlowCase):
        (JSC::CTI::emitFastArithIntToImmNoCheck):
        (JSC::CTI::emitArithIntToImmWithJump):
        (JSC::CTI::emitTagAsBoolImmediate):
        (JSC::CTI::compileOpCall):
        (JSC::CTI::compileOpStrictEq):
        (JSC::CTI::emitSlowScriptCheck):
        (JSC::CTI::putDoubleResultToJSNumberCellOrJSImmediate):
        (JSC::CTI::compileBinaryArithOp):
        (JSC::CTI::compileBinaryArithOpSlowCase):
        (JSC::CTI::privateCompileMainPass):
        (JSC::CTI::privateCompileSlowCases):
        (JSC::CTI::privateCompile):
        (JSC::CTI::privateCompileGetByIdSelf):
        (JSC::CTI::privateCompileGetByIdProto):
        (JSC::CTI::privateCompileGetByIdChain):
        (JSC::CTI::privateCompilePutByIdReplace):
        (JSC::CTI::privateCompilePutByIdTransition):
        (JSC::CTI::privateCompileCTIMachineTrampolines):
        (JSC::CTI::privateCompilePatchGetArrayLength):
        (JSC::CTI::emitGetVariableObjectRegister):
        (JSC::CTI::emitPutVariableObjectRegister):
        * VM/CTI.h:
        (JSC::CallRecord::CallRecord):
        (JSC::JmpTable::JmpTable):
        (JSC::SlowCaseEntry::SlowCaseEntry):
        (JSC::CTI::JSRInfo::JSRInfo):
        * wrec/WREC.h:

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

        Not reviewed.
        
        Try to fix Qt build.

        * JavaScriptCore.pri:

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

        Reviewed by Sam Weinig.
        
        Renamed OBJECT_OFFSET => FIELD_OFFSET

        Nixed use of OBJECT_OFFSET outside of CTI.cpp by making CTI a friend in
        more places.

        * VM/CTI.cpp:
        (JSC::CTI::compileOpCallInitializeCallFrame):
        (JSC::CTI::compileOpCall):
        (JSC::CTI::emitSlowScriptCheck):
        (JSC::CTI::putDoubleResultToJSNumberCellOrJSImmediate):
        (JSC::CTI::compileBinaryArithOp):
        (JSC::CTI::privateCompileMainPass):
        (JSC::CTI::privateCompileSlowCases):
        (JSC::CTI::privateCompile):
        (JSC::CTI::privateCompileGetByIdSelf):
        (JSC::CTI::privateCompileGetByIdProto):
        (JSC::CTI::privateCompileGetByIdChain):
        (JSC::CTI::privateCompilePutByIdReplace):
        (JSC::CTI::privateCompilePutByIdTransition):
        (JSC::CTI::privateCompileCTIMachineTrampolines):
        (JSC::CTI::privateCompilePatchGetArrayLength):
        (JSC::CTI::emitGetVariableObjectRegister):
        (JSC::CTI::emitPutVariableObjectRegister):
        * runtime/JSValue.h:
        * runtime/JSVariableObject.h:

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

        Reviewed by Sam Weinig.
        
        Renames:
        
        X86Assembler::copy => X86Assembler::executableCopy
        AssemblerBuffer::copy => AssemblerBuffer::executableCopy

        * VM/CTI.cpp:
        (JSC::CTI::privateCompile):
        (JSC::CTI::privateCompileGetByIdSelf):
        (JSC::CTI::privateCompileGetByIdProto):
        (JSC::CTI::privateCompileGetByIdChain):
        (JSC::CTI::privateCompilePutByIdReplace):
        (JSC::CTI::privateCompilePutByIdTransition):
        (JSC::CTI::privateCompileCTIMachineTrampolines):
        (JSC::CTI::privateCompilePatchGetArrayLength):
        * masm/X86Assembler.h:
        (JSC::AssemblerBuffer::executableCopy):
        (JSC::X86Assembler::executableCopy):
        * wrec/WREC.cpp:
        (JSC::WREC::compileRegExp):

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

        Reviewed by Sam Weinig.
        
        Renamed WREC => JSC::WREC, removing JSC:: prefix in a lot of places.
        Renamed WRECFunction => WREC::CompiledRegExp, and deployed this type
        name in place of a few casts.

        * runtime/RegExp.cpp:
        (JSC::RegExp::RegExp):
        (JSC::RegExp::~RegExp):
        (JSC::RegExp::match):
        * runtime/RegExp.h:
        * wrec/CharacterClassConstructor.cpp:
        * wrec/CharacterClassConstructor.h:
        * wrec/WREC.cpp:
        (JSC::WREC::compileRegExp):
        * wrec/WREC.h:
        (JSC::WREC::Generator::Generator):
        (JSC::WREC::Parser::Parser):
        (JSC::WREC::Parser::parseAlternative):

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

        Reviewed by Sam Weinig.
        
        Renamed BytecodeInterpreter => Interpreter.

        * JavaScriptCore.exp:
        * VM/CTI.cpp:
        (JSC::):
        (JSC::CTI::compileOpCall):
        (JSC::CTI::emitSlowScriptCheck):
        (JSC::CTI::compileBinaryArithOpSlowCase):
        (JSC::CTI::privateCompileMainPass):
        (JSC::CTI::privateCompileSlowCases):
        (JSC::CTI::privateCompile):
        (JSC::CTI::privateCompileGetByIdSelf):
        (JSC::CTI::privateCompileGetByIdProto):
        (JSC::CTI::privateCompileGetByIdChain):
        (JSC::CTI::privateCompilePutByIdReplace):
        (JSC::CTI::privateCompilePutByIdTransition):
        (JSC::CTI::privateCompileCTIMachineTrampolines):
        (JSC::CTI::freeCTIMachineTrampolines):
        (JSC::CTI::patchGetByIdSelf):
        (JSC::CTI::patchPutByIdReplace):
        (JSC::CTI::privateCompilePatchGetArrayLength):
        * VM/CTI.h:
        * VM/CodeBlock.cpp:
        (JSC::CodeBlock::printStructures):
        (JSC::CodeBlock::derefStructures):
        (JSC::CodeBlock::refStructures):
        * VM/Machine.cpp:
        (JSC::jsLess):
        (JSC::jsLessEq):
        (JSC::Interpreter::resolve):
        (JSC::Interpreter::resolveSkip):
        (JSC::Interpreter::resolveGlobal):
        (JSC::Interpreter::resolveBase):
        (JSC::Interpreter::resolveBaseAndProperty):
        (JSC::Interpreter::resolveBaseAndFunc):
        (JSC::Interpreter::slideRegisterWindowForCall):
        (JSC::Interpreter::callEval):
        (JSC::Interpreter::Interpreter):
        (JSC::Interpreter::initialize):
        (JSC::Interpreter::~Interpreter):
        (JSC::Interpreter::dumpCallFrame):
        (JSC::Interpreter::dumpRegisters):
        (JSC::Interpreter::isOpcode):
        (JSC::Interpreter::unwindCallFrame):
        (JSC::Interpreter::throwException):
        (JSC::Interpreter::execute):
        (JSC::Interpreter::debug):
        (JSC::Interpreter::resetTimeoutCheck):
        (JSC::Interpreter::checkTimeout):
        (JSC::Interpreter::createExceptionScope):
        (JSC::Interpreter::tryCachePutByID):
        (JSC::Interpreter::uncachePutByID):
        (JSC::Interpreter::tryCacheGetByID):
        (JSC::Interpreter::uncacheGetByID):
        (JSC::Interpreter::privateExecute):
        (JSC::Interpreter::retrieveArguments):
        (JSC::Interpreter::retrieveCaller):
        (JSC::Interpreter::retrieveLastCaller):
        (JSC::Interpreter::findFunctionCallFrame):
        (JSC::Interpreter::tryCTICachePutByID):
        (JSC::Interpreter::tryCTICacheGetByID):
        (JSC::Interpreter::cti_op_convert_this):
        (JSC::Interpreter::cti_op_end):
        (JSC::Interpreter::cti_op_add):
        (JSC::Interpreter::cti_op_pre_inc):
        (JSC::Interpreter::cti_timeout_check):
        (JSC::Interpreter::cti_register_file_check):
        (JSC::Interpreter::cti_op_loop_if_less):
        (JSC::Interpreter::cti_op_loop_if_lesseq):
        (JSC::Interpreter::cti_op_new_object):
        (JSC::Interpreter::cti_op_put_by_id):
        (JSC::Interpreter::cti_op_put_by_id_second):
        (JSC::Interpreter::cti_op_put_by_id_generic):
        (JSC::Interpreter::cti_op_put_by_id_fail):
        (JSC::Interpreter::cti_op_get_by_id):
        (JSC::Interpreter::cti_op_get_by_id_second):
        (JSC::Interpreter::cti_op_get_by_id_generic):
        (JSC::Interpreter::cti_op_get_by_id_fail):
        (JSC::Interpreter::cti_op_instanceof):
        (JSC::Interpreter::cti_op_del_by_id):
        (JSC::Interpreter::cti_op_mul):
        (JSC::Interpreter::cti_op_new_func):
        (JSC::Interpreter::cti_op_call_JSFunction):
        (JSC::Interpreter::cti_op_call_arityCheck):
        (JSC::Interpreter::cti_vm_dontLazyLinkCall):
        (JSC::Interpreter::cti_vm_lazyLinkCall):
        (JSC::Interpreter::cti_op_push_activation):
        (JSC::Interpreter::cti_op_call_NotJSFunction):
        (JSC::Interpreter::cti_op_create_arguments):
        (JSC::Interpreter::cti_op_create_arguments_no_params):
        (JSC::Interpreter::cti_op_tear_off_activation):
        (JSC::Interpreter::cti_op_tear_off_arguments):
        (JSC::Interpreter::cti_op_profile_will_call):
        (JSC::Interpreter::cti_op_profile_did_call):
        (JSC::Interpreter::cti_op_ret_scopeChain):
        (JSC::Interpreter::cti_op_new_array):
        (JSC::Interpreter::cti_op_resolve):
        (JSC::Interpreter::cti_op_construct_JSConstruct):
        (JSC::Interpreter::cti_op_construct_NotJSConstruct):
        (JSC::Interpreter::cti_op_get_by_val):
        (JSC::Interpreter::cti_op_resolve_func):
        (JSC::Interpreter::cti_op_sub):
        (JSC::Interpreter::cti_op_put_by_val):
        (JSC::Interpreter::cti_op_put_by_val_array):
        (JSC::Interpreter::cti_op_lesseq):
        (JSC::Interpreter::cti_op_loop_if_true):
        (JSC::Interpreter::cti_op_negate):
        (JSC::Interpreter::cti_op_resolve_base):
        (JSC::Interpreter::cti_op_resolve_skip):
        (JSC::Interpreter::cti_op_resolve_global):
        (JSC::Interpreter::cti_op_div):
        (JSC::Interpreter::cti_op_pre_dec):
        (JSC::Interpreter::cti_op_jless):
        (JSC::Interpreter::cti_op_not):
        (JSC::Interpreter::cti_op_jtrue):
        (JSC::Interpreter::cti_op_post_inc):
        (JSC::Interpreter::cti_op_eq):
        (JSC::Interpreter::cti_op_lshift):
        (JSC::Interpreter::cti_op_bitand):
        (JSC::Interpreter::cti_op_rshift):
        (JSC::Interpreter::cti_op_bitnot):
        (JSC::Interpreter::cti_op_resolve_with_base):
        (JSC::Interpreter::cti_op_new_func_exp):
        (JSC::Interpreter::cti_op_mod):
        (JSC::Interpreter::cti_op_less):
        (JSC::Interpreter::cti_op_neq):
        (JSC::Interpreter::cti_op_post_dec):
        (JSC::Interpreter::cti_op_urshift):
        (JSC::Interpreter::cti_op_bitxor):
        (JSC::Interpreter::cti_op_new_regexp):
        (JSC::Interpreter::cti_op_bitor):
        (JSC::Interpreter::cti_op_call_eval):
        (JSC::Interpreter::cti_op_throw):
        (JSC::Interpreter::cti_op_get_pnames):
        (JSC::Interpreter::cti_op_next_pname):
        (JSC::Interpreter::cti_op_push_scope):
        (JSC::Interpreter::cti_op_pop_scope):
        (JSC::Interpreter::cti_op_typeof):
        (JSC::Interpreter::cti_op_is_undefined):
        (JSC::Interpreter::cti_op_is_boolean):
        (JSC::Interpreter::cti_op_is_number):
        (JSC::Interpreter::cti_op_is_string):
        (JSC::Interpreter::cti_op_is_object):
        (JSC::Interpreter::cti_op_is_function):
        (JSC::Interpreter::cti_op_stricteq):
        (JSC::Interpreter::cti_op_nstricteq):
        (JSC::Interpreter::cti_op_to_jsnumber):
        (JSC::Interpreter::cti_op_in):
        (JSC::Interpreter::cti_op_push_new_scope):
        (JSC::Interpreter::cti_op_jmp_scopes):
        (JSC::Interpreter::cti_op_put_by_index):
        (JSC::Interpreter::cti_op_switch_imm):
        (JSC::Interpreter::cti_op_switch_char):
        (JSC::Interpreter::cti_op_switch_string):
        (JSC::Interpreter::cti_op_del_by_val):
        (JSC::Interpreter::cti_op_put_getter):
        (JSC::Interpreter::cti_op_put_setter):
        (JSC::Interpreter::cti_op_new_error):
        (JSC::Interpreter::cti_op_debug):
        (JSC::Interpreter::cti_vm_throw):
        * VM/Machine.h:
        * VM/Register.h:
        * VM/SamplingTool.h:
        (JSC::SamplingTool::SamplingTool):
        * bytecompiler/CodeGenerator.cpp:
        (JSC::BytecodeGenerator::generate):
        (JSC::BytecodeGenerator::BytecodeGenerator):
        * jsc.cpp:
        (runWithScripts):
        * runtime/ExecState.h:
        (JSC::ExecState::interpreter):
        * runtime/JSCell.h:
        * runtime/JSFunction.h:
        * runtime/JSGlobalData.cpp:
        (JSC::JSGlobalData::JSGlobalData):
        * runtime/JSGlobalData.h:
        * runtime/JSString.h:
        * wrec/WREC.cpp:
        (WREC::compileRegExp):
        * wrec/WREC.h:

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

        Roll out r38461 (my last patch) because it broke the world.

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

        Reviewed by Sam Weinig.

        A few more renames:

        BytecodeInterpreter => Interpreter
        WREC => JSC::WREC, removing JSC:: prefix in a lot of places
        X86Assembler::copy => X86Assembler::executableCopy
        AssemblerBuffer::copy => AssemblerBuffer::executableCopy
        WRECFunction => WREC::RegExpFunction
        OBJECT_OFFSET => FIELD_OFFSET
        
        Also:

        Nixed use of OBJECT_OFFSET outside of CTI.cpp by making CTI a friend in more places.
        Nixed X86:: and X86Assembler:: prefixes in a lot of places using typedefs

        * JavaScriptCore.exp:
        * VM/CTI.cpp:
        (JSC::):
        (JSC::CTI::emitGetVirtualRegister):
        (JSC::CTI::emitGetVirtualRegisters):
        (JSC::CTI::emitPutCTIArgFromVirtualRegister):
        (JSC::CTI::emitPutCTIArg):
        (JSC::CTI::emitGetCTIArg):
        (JSC::CTI::emitPutCTIParam):
        (JSC::CTI::emitGetCTIParam):
        (JSC::CTI::emitPutToCallFrameHeader):
        (JSC::CTI::emitGetFromCallFrameHeader):
        (JSC::CTI::emitPutVirtualRegister):
        (JSC::CTI::emitNakedCall):
        (JSC::CTI::emitNakedFastCall):
        (JSC::CTI::emitCTICall):
        (JSC::CTI::emitJumpSlowCaseIfNotJSCell):
        (JSC::CTI::emitJumpSlowCaseIfNotImmNum):
        (JSC::CTI::emitJumpSlowCaseIfNotImmNums):
        (JSC::CTI::emitFastArithDeTagImmediate):
        (JSC::CTI::emitFastArithDeTagImmediateJumpIfZero):
        (JSC::CTI::emitFastArithReTagImmediate):
        (JSC::CTI::emitFastArithPotentiallyReTagImmediate):
        (JSC::CTI::emitFastArithImmToInt):
        (JSC::CTI::emitFastArithIntToImmOrSlowCase):
        (JSC::CTI::emitFastArithIntToImmNoCheck):
        (JSC::CTI::emitArithIntToImmWithJump):
        (JSC::CTI::emitTagAsBoolImmediate):
        (JSC::CTI::compileOpCallInitializeCallFrame):
        (JSC::CTI::compileOpCall):
        (JSC::CTI::compileOpStrictEq):
        (JSC::CTI::emitSlowScriptCheck):
        (JSC::CTI::putDoubleResultToJSNumberCellOrJSImmediate):
        (JSC::CTI::compileBinaryArithOp):
        (JSC::CTI::compileBinaryArithOpSlowCase):
        (JSC::CTI::privateCompileMainPass):
        (JSC::CTI::privateCompileSlowCases):
        (JSC::CTI::privateCompile):
        (JSC::CTI::privateCompileGetByIdSelf):
        (JSC::CTI::privateCompileGetByIdProto):
        (JSC::CTI::privateCompileGetByIdChain):
        (JSC::CTI::privateCompilePutByIdReplace):
        (JSC::CTI::privateCompilePutByIdTransition):
        (JSC::CTI::privateCompileCTIMachineTrampolines):
        (JSC::CTI::freeCTIMachineTrampolines):
        (JSC::CTI::patchGetByIdSelf):
        (JSC::CTI::patchPutByIdReplace):
        (JSC::CTI::privateCompilePatchGetArrayLength):
        (JSC::CTI::emitGetVariableObjectRegister):
        (JSC::CTI::emitPutVariableObjectRegister):
        * VM/CTI.h:
        (JSC::CallRecord::CallRecord):
        (JSC::JmpTable::JmpTable):
        (JSC::SlowCaseEntry::SlowCaseEntry):
        (JSC::CTI::JSRInfo::JSRInfo):
        * VM/CodeBlock.cpp:
        (JSC::CodeBlock::printStructures):
        (JSC::CodeBlock::derefStructures):
        (JSC::CodeBlock::refStructures):
        * VM/Machine.cpp:
        (JSC::jsLess):
        (JSC::jsLessEq):
        (JSC::Interpreter::resolve):
        (JSC::Interpreter::resolveSkip):
        (JSC::Interpreter::resolveGlobal):
        (JSC::Interpreter::resolveBase):
        (JSC::Interpreter::resolveBaseAndProperty):
        (JSC::Interpreter::resolveBaseAndFunc):
        (JSC::Interpreter::slideRegisterWindowForCall):
        (JSC::Interpreter::callEval):
        (JSC::Interpreter::Interpreter):
        (JSC::Interpreter::initialize):
        (JSC::Interpreter::~Interpreter):
        (JSC::Interpreter::dumpCallFrame):
        (JSC::Interpreter::dumpRegisters):
        (JSC::Interpreter::isOpcode):
        (JSC::Interpreter::unwindCallFrame):
        (JSC::Interpreter::throwException):
        (JSC::Interpreter::execute):
        (JSC::Interpreter::debug):
        (JSC::Interpreter::resetTimeoutCheck):
        (JSC::Interpreter::checkTimeout):
        (JSC::Interpreter::createExceptionScope):
        (JSC::Interpreter::tryCachePutByID):
        (JSC::Interpreter::uncachePutByID):
        (JSC::Interpreter::tryCacheGetByID):
        (JSC::Interpreter::uncacheGetByID):
        (JSC::Interpreter::privateExecute):
        (JSC::Interpreter::retrieveArguments):
        (JSC::Interpreter::retrieveCaller):
        (JSC::Interpreter::retrieveLastCaller):
        (JSC::Interpreter::findFunctionCallFrame):
        (JSC::Interpreter::tryCTICachePutByID):
        (JSC::Interpreter::tryCTICacheGetByID):
        (JSC::):
        (JSC::Interpreter::cti_op_convert_this):
        (JSC::Interpreter::cti_op_end):
        (JSC::Interpreter::cti_op_add):
        (JSC::Interpreter::cti_op_pre_inc):
        (JSC::Interpreter::cti_timeout_check):
        (JSC::Interpreter::cti_register_file_check):
        (JSC::Interpreter::cti_op_loop_if_less):
        (JSC::Interpreter::cti_op_loop_if_lesseq):
        (JSC::Interpreter::cti_op_new_object):
        (JSC::Interpreter::cti_op_put_by_id):
        (JSC::Interpreter::cti_op_put_by_id_second):
        (JSC::Interpreter::cti_op_put_by_id_generic):
        (JSC::Interpreter::cti_op_put_by_id_fail):
        (JSC::Interpreter::cti_op_get_by_id):
        (JSC::Interpreter::cti_op_get_by_id_second):
        (JSC::Interpreter::cti_op_get_by_id_generic):
        (JSC::Interpreter::cti_op_get_by_id_fail):
        (JSC::Interpreter::cti_op_instanceof):
        (JSC::Interpreter::cti_op_del_by_id):
        (JSC::Interpreter::cti_op_mul):
        (JSC::Interpreter::cti_op_new_func):
        (JSC::Interpreter::cti_op_call_JSFunction):
        (JSC::Interpreter::cti_op_call_arityCheck):
        (JSC::Interpreter::cti_vm_dontLazyLinkCall):
        (JSC::Interpreter::cti_vm_lazyLinkCall):
        (JSC::Interpreter::cti_op_push_activation):
        (JSC::Interpreter::cti_op_call_NotJSFunction):
        (JSC::Interpreter::cti_op_create_arguments):
        (JSC::Interpreter::cti_op_create_arguments_no_params):
        (JSC::Interpreter::cti_op_tear_off_activation):
        (JSC::Interpreter::cti_op_tear_off_arguments):
        (JSC::Interpreter::cti_op_profile_will_call):
        (JSC::Interpreter::cti_op_profile_did_call):
        (JSC::Interpreter::cti_op_ret_scopeChain):
        (JSC::Interpreter::cti_op_new_array):
        (JSC::Interpreter::cti_op_resolve):
        (JSC::Interpreter::cti_op_construct_JSConstruct):
        (JSC::Interpreter::cti_op_construct_NotJSConstruct):
        (JSC::Interpreter::cti_op_get_by_val):
        (JSC::Interpreter::cti_op_resolve_func):
        (JSC::Interpreter::cti_op_sub):
        (JSC::Interpreter::cti_op_put_by_val):
        (JSC::Interpreter::cti_op_put_by_val_array):
        (JSC::Interpreter::cti_op_lesseq):
        (JSC::Interpreter::cti_op_loop_if_true):
        (JSC::Interpreter::cti_op_negate):
        (JSC::Interpreter::cti_op_resolve_base):
        (JSC::Interpreter::cti_op_resolve_skip):
        (JSC::Interpreter::cti_op_resolve_global):
        (JSC::Interpreter::cti_op_div):
        (JSC::Interpreter::cti_op_pre_dec):
        (JSC::Interpreter::cti_op_jless):
        (JSC::Interpreter::cti_op_not):
        (JSC::Interpreter::cti_op_jtrue):
        (JSC::Interpreter::cti_op_post_inc):
        (JSC::Interpreter::cti_op_eq):
        (JSC::Interpreter::cti_op_lshift):
        (JSC::Interpreter::cti_op_bitand):
        (JSC::Interpreter::cti_op_rshift):
        (JSC::Interpreter::cti_op_bitnot):
        (JSC::Interpreter::cti_op_resolve_with_base):
        (JSC::Interpreter::cti_op_new_func_exp):
        (JSC::Interpreter::cti_op_mod):
        (JSC::Interpreter::cti_op_less):
        (JSC::Interpreter::cti_op_neq):
        (JSC::Interpreter::cti_op_post_dec):
        (JSC::Interpreter::cti_op_urshift):
        (JSC::Interpreter::cti_op_bitxor):
        (JSC::Interpreter::cti_op_new_regexp):
        (JSC::Interpreter::cti_op_bitor):
        (JSC::Interpreter::cti_op_call_eval):
        (JSC::Interpreter::cti_op_throw):
        (JSC::Interpreter::cti_op_get_pnames):
        (JSC::Interpreter::cti_op_next_pname):
        (JSC::Interpreter::cti_op_push_scope):
        (JSC::Interpreter::cti_op_pop_scope):
        (JSC::Interpreter::cti_op_typeof):
        (JSC::Interpreter::cti_op_is_undefined):
        (JSC::Interpreter::cti_op_is_boolean):
        (JSC::Interpreter::cti_op_is_number):
        (JSC::Interpreter::cti_op_is_string):
        (JSC::Interpreter::cti_op_is_object):
        (JSC::Interpreter::cti_op_is_function):
        (JSC::Interpreter::cti_op_stricteq):
        (JSC::Interpreter::cti_op_nstricteq):
        (JSC::Interpreter::cti_op_to_jsnumber):
        (JSC::Interpreter::cti_op_in):
        (JSC::Interpreter::cti_op_push_new_scope):
        (JSC::Interpreter::cti_op_jmp_scopes):
        (JSC::Interpreter::cti_op_put_by_index):
        (JSC::Interpreter::cti_op_switch_imm):
        (JSC::Interpreter::cti_op_switch_char):
        (JSC::Interpreter::cti_op_switch_string):
        (JSC::Interpreter::cti_op_del_by_val):
        (JSC::Interpreter::cti_op_put_getter):
        (JSC::Interpreter::cti_op_put_setter):
        (JSC::Interpreter::cti_op_new_error):
        (JSC::Interpreter::cti_op_debug):
        (JSC::Interpreter::cti_vm_throw):
        * VM/Machine.h:
        * VM/Register.h:
        * VM/SamplingTool.cpp:
        (JSC::SamplingTool::dump):
        * VM/SamplingTool.h:
        (JSC::SamplingTool::SamplingTool):
        * bytecompiler/CodeGenerator.cpp:
        (JSC::BytecodeGenerator::generate):
        (JSC::BytecodeGenerator::BytecodeGenerator):
        * jsc.cpp:
        (runWithScripts):
        * masm/X86Assembler.h:
        (JSC::AssemblerBuffer::executableCopy):
        (JSC::X86Assembler::executableCopy):
        * runtime/ExecState.h:
        (JSC::ExecState::interpreter):
        * runtime/JSCell.h:
        * runtime/JSFunction.h:
        * runtime/JSGlobalData.cpp:
        (JSC::JSGlobalData::JSGlobalData):
        * runtime/JSGlobalData.h:
        * runtime/JSImmediate.h:
        * runtime/JSString.h:
        * runtime/JSValue.h:
        * runtime/JSVariableObject.h:
        * runtime/RegExp.cpp:
        (JSC::RegExp::RegExp):
        (JSC::RegExp::~RegExp):
        (JSC::RegExp::match):
        * runtime/RegExp.h:
        * wrec/CharacterClassConstructor.cpp:
        * wrec/CharacterClassConstructor.h:
        * wrec/WREC.cpp:
        (JSC::WREC::compileRegExp):
        * wrec/WREC.h:
        (JSC::WREC::Generator::Generator):
        (JSC::WREC::Parser::):
        (JSC::WREC::Parser::Parser):
        (JSC::WREC::Parser::parseAlternative):

2008-11-16  Greg Bolsinga  <bolsinga@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=21810
        Remove use of static C++ objects that are destroyed at exit time (destructors)

        Conditionally have the DEFINE_STATIC_LOCAL workaround <rdar://problem/6354696> 
        (Codegen issue with C++ static reference in gcc build 5465) based upon the compiler 
        build versions. It will use the:
        static T& = *new T;
        style for all other compilers.

        * wtf/StdLibExtras.h:

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

        Reviewed by Dan Bernstein.

        https://bugs.webkit.org/show_bug.cgi?id=22290
        Remove cross-heap GC and MessagePort multi-threading support

        It is broken (and may not be implementable at all), and no longer needed, as we
        don't use MessagePorts for communication with workers any more.

        * JavaScriptCore.exp:
        * runtime/Collector.cpp:
        (JSC::Heap::collect):
        * runtime/JSGlobalObject.cpp:
        * runtime/JSGlobalObject.h:
        Remove hooks for cross-heap GC.

2008-11-15  Sam Weinig  <sam@webkit.org>

        Reviewed by Cameron Zwarich.

        Cleanup jsc command line code a little.

        * jsc.cpp:
        (functionQuit):
        (main): Use standard exit status macros
        (cleanupGlobalData): Factor out cleanup code into this function.
        (printUsageStatement): Use standard exit status macros.

2008-11-15  Sam Weinig  <sam@webkit.org>

        Reviewed by Cameron Zwarich.

        Cleanup BytecodeGenerator constructors.

        * bytecompiler/CodeGenerator.cpp:
        (JSC::BytecodeGenerator::BytecodeGenerator):
        * bytecompiler/CodeGenerator.h:
        * parser/Nodes.cpp:
        (JSC::ProgramNode::generateBytecode):

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

        Rubber stamped by Geoff Garen.

        - do the long-planned StructureID -> Structure rename

        * API/JSCallbackConstructor.cpp:
        (JSC::JSCallbackConstructor::JSCallbackConstructor):
        * API/JSCallbackConstructor.h:
        (JSC::JSCallbackConstructor::createStructure):
        * API/JSCallbackFunction.h:
        (JSC::JSCallbackFunction::createStructure):
        * API/JSCallbackObject.h:
        (JSC::JSCallbackObject::createStructure):
        * API/JSCallbackObjectFunctions.h:
        (JSC::::JSCallbackObject):
        * API/JSValueRef.cpp:
        (JSValueIsInstanceOfConstructor):
        * GNUmakefile.am:
        * JavaScriptCore.exp:
        * JavaScriptCore.pri:
        * JavaScriptCore.scons:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * JavaScriptCoreSources.bkl:
        * VM/CTI.cpp:
        (JSC::CTI::compileBinaryArithOp):
        (JSC::CTI::privateCompileMainPass):
        (JSC::CTI::privateCompileGetByIdSelf):
        (JSC::CTI::privateCompileGetByIdProto):
        (JSC::CTI::privateCompileGetByIdChain):
        (JSC::CTI::privateCompilePutByIdReplace):
        (JSC::transitionWillNeedStorageRealloc):
        (JSC::CTI::privateCompilePutByIdTransition):
        (JSC::CTI::patchGetByIdSelf):
        (JSC::CTI::patchPutByIdReplace):
        * VM/CTI.h:
        (JSC::CTI::compileGetByIdSelf):
        (JSC::CTI::compileGetByIdProto):
        (JSC::CTI::compileGetByIdChain):
        (JSC::CTI::compilePutByIdReplace):
        (JSC::CTI::compilePutByIdTransition):
        * VM/CodeBlock.cpp:
        (JSC::CodeBlock::printStructure):
        (JSC::CodeBlock::printStructures):
        (JSC::CodeBlock::dump):
        (JSC::CodeBlock::~CodeBlock):
        (JSC::CodeBlock::derefStructures):
        (JSC::CodeBlock::refStructures):
        * VM/CodeBlock.h:
        * VM/Instruction.h:
        (JSC::Instruction::Instruction):
        (JSC::Instruction::):
        * VM/Machine.cpp:
        (JSC::jsTypeStringForValue):
        (JSC::jsIsObjectType):
        (JSC::BytecodeInterpreter::resolveGlobal):
        (JSC::BytecodeInterpreter::BytecodeInterpreter):
        (JSC::cachePrototypeChain):
        (JSC::BytecodeInterpreter::tryCachePutByID):
        (JSC::BytecodeInterpreter::uncachePutByID):
        (JSC::BytecodeInterpreter::tryCacheGetByID):
        (JSC::BytecodeInterpreter::uncacheGetByID):
        (JSC::BytecodeInterpreter::privateExecute):
        (JSC::BytecodeInterpreter::tryCTICachePutByID):
        (JSC::BytecodeInterpreter::tryCTICacheGetByID):
        (JSC::BytecodeInterpreter::cti_op_instanceof):
        (JSC::BytecodeInterpreter::cti_op_construct_JSConstruct):
        (JSC::BytecodeInterpreter::cti_op_resolve_global):
        (JSC::BytecodeInterpreter::cti_op_is_undefined):
        * runtime/Arguments.h:
        (JSC::Arguments::createStructure):
        * runtime/ArrayConstructor.cpp:
        (JSC::ArrayConstructor::ArrayConstructor):
        * runtime/ArrayConstructor.h:
        * runtime/ArrayPrototype.cpp:
        (JSC::ArrayPrototype::ArrayPrototype):
        * runtime/ArrayPrototype.h:
        * runtime/BatchedTransitionOptimizer.h:
        (JSC::BatchedTransitionOptimizer::BatchedTransitionOptimizer):
        (JSC::BatchedTransitionOptimizer::~BatchedTransitionOptimizer):
        * runtime/BooleanConstructor.cpp:
        (JSC::BooleanConstructor::BooleanConstructor):
        * runtime/BooleanConstructor.h:
        * runtime/BooleanObject.cpp:
        (JSC::BooleanObject::BooleanObject):
        * runtime/BooleanObject.h:
        * runtime/BooleanPrototype.cpp:
        (JSC::BooleanPrototype::BooleanPrototype):
        * runtime/BooleanPrototype.h:
        * runtime/DateConstructor.cpp:
        (JSC::DateConstructor::DateConstructor):
        * runtime/DateConstructor.h:
        * runtime/DateInstance.cpp:
        (JSC::DateInstance::DateInstance):
        * runtime/DateInstance.h:
        * runtime/DatePrototype.cpp:
        (JSC::DatePrototype::DatePrototype):
        * runtime/DatePrototype.h:
        (JSC::DatePrototype::createStructure):
        * runtime/ErrorConstructor.cpp:
        (JSC::ErrorConstructor::ErrorConstructor):
        * runtime/ErrorConstructor.h:
        * runtime/ErrorInstance.cpp:
        (JSC::ErrorInstance::ErrorInstance):
        * runtime/ErrorInstance.h:
        * runtime/ErrorPrototype.cpp:
        (JSC::ErrorPrototype::ErrorPrototype):
        * runtime/ErrorPrototype.h:
        * runtime/FunctionConstructor.cpp:
        (JSC::FunctionConstructor::FunctionConstructor):
        * runtime/FunctionConstructor.h:
        * runtime/FunctionPrototype.cpp:
        (JSC::FunctionPrototype::FunctionPrototype):
        (JSC::FunctionPrototype::addFunctionProperties):
        * runtime/FunctionPrototype.h:
        (JSC::FunctionPrototype::createStructure):
        * runtime/GlobalEvalFunction.cpp:
        (JSC::GlobalEvalFunction::GlobalEvalFunction):
        * runtime/GlobalEvalFunction.h:
        * runtime/Identifier.h:
        * runtime/InternalFunction.cpp:
        (JSC::InternalFunction::InternalFunction):
        * runtime/InternalFunction.h:
        (JSC::InternalFunction::createStructure):
        (JSC::InternalFunction::InternalFunction):
        * runtime/JSActivation.cpp:
        (JSC::JSActivation::JSActivation):
        * runtime/JSActivation.h:
        (JSC::JSActivation::createStructure):
        * runtime/JSArray.cpp:
        (JSC::JSArray::JSArray):
        * runtime/JSArray.h:
        (JSC::JSArray::createStructure):
        * runtime/JSCell.h:
        (JSC::JSCell::JSCell):
        (JSC::JSCell::isObject):
        (JSC::JSCell::isString):
        (JSC::JSCell::structure):
        (JSC::JSValue::needsThisConversion):
        * runtime/JSFunction.cpp:
        (JSC::JSFunction::construct):
        * runtime/JSFunction.h:
        (JSC::JSFunction::JSFunction):
        (JSC::JSFunction::createStructure):
        * runtime/JSGlobalData.cpp:
        (JSC::JSGlobalData::JSGlobalData):
        (JSC::JSGlobalData::createLeaked):
        * runtime/JSGlobalData.h:
        * runtime/JSGlobalObject.cpp:
        (JSC::markIfNeeded):
        (JSC::JSGlobalObject::reset):
        * runtime/JSGlobalObject.h:
        (JSC::JSGlobalObject::JSGlobalObject):
        (JSC::JSGlobalObject::argumentsStructure):
        (JSC::JSGlobalObject::arrayStructure):
        (JSC::JSGlobalObject::booleanObjectStructure):
        (JSC::JSGlobalObject::callbackConstructorStructure):
        (JSC::JSGlobalObject::callbackFunctionStructure):
        (JSC::JSGlobalObject::callbackObjectStructure):
        (JSC::JSGlobalObject::dateStructure):
        (JSC::JSGlobalObject::emptyObjectStructure):
        (JSC::JSGlobalObject::errorStructure):
        (JSC::JSGlobalObject::functionStructure):
        (JSC::JSGlobalObject::numberObjectStructure):
        (JSC::JSGlobalObject::prototypeFunctionStructure):
        (JSC::JSGlobalObject::regExpMatchesArrayStructure):
        (JSC::JSGlobalObject::regExpStructure):
        (JSC::JSGlobalObject::stringObjectStructure):
        (JSC::JSGlobalObject::createStructure):
        (JSC::Structure::prototypeForLookup):
        * runtime/JSNotAnObject.h:
        (JSC::JSNotAnObject::createStructure):
        * runtime/JSNumberCell.h:
        (JSC::JSNumberCell::createStructure):
        (JSC::JSNumberCell::JSNumberCell):
        * runtime/JSObject.cpp:
        (JSC::JSObject::mark):
        (JSC::JSObject::put):
        (JSC::JSObject::deleteProperty):
        (JSC::JSObject::defineGetter):
        (JSC::JSObject::defineSetter):
        (JSC::JSObject::getPropertyAttributes):
        (JSC::JSObject::getPropertyNames):
        (JSC::JSObject::removeDirect):
        (JSC::JSObject::createInheritorID):
        * runtime/JSObject.h:
        (JSC::JSObject::getDirect):
        (JSC::JSObject::getDirectLocation):
        (JSC::JSObject::hasCustomProperties):
        (JSC::JSObject::hasGetterSetterProperties):
        (JSC::JSObject::createStructure):
        (JSC::JSObject::JSObject):
        (JSC::JSObject::~JSObject):
        (JSC::JSObject::prototype):
        (JSC::JSObject::setPrototype):
        (JSC::JSObject::setStructure):
        (JSC::JSObject::inheritorID):
        (JSC::JSObject::inlineGetOwnPropertySlot):
        (JSC::JSObject::getOwnPropertySlotForWrite):
        (JSC::JSCell::fastGetOwnPropertySlot):
        (JSC::JSObject::putDirect):
        (JSC::JSObject::putDirectWithoutTransition):
        (JSC::JSObject::transitionTo):
        * runtime/JSPropertyNameIterator.h:
        (JSC::JSPropertyNameIterator::next):
        * runtime/JSStaticScopeObject.h:
        (JSC::JSStaticScopeObject::JSStaticScopeObject):
        (JSC::JSStaticScopeObject::createStructure):
        * runtime/JSString.h:
        (JSC::JSString::JSString):
        (JSC::JSString::createStructure):
        * runtime/JSVariableObject.h:
        (JSC::JSVariableObject::JSVariableObject):
        * runtime/JSWrapperObject.h:
        (JSC::JSWrapperObject::JSWrapperObject):
        * runtime/MathObject.cpp:
        (JSC::MathObject::MathObject):
        * runtime/MathObject.h:
        (JSC::MathObject::createStructure):
        * runtime/NativeErrorConstructor.cpp:
        (JSC::NativeErrorConstructor::NativeErrorConstructor):
        * runtime/NativeErrorConstructor.h:
        * runtime/NativeErrorPrototype.cpp:
        (JSC::NativeErrorPrototype::NativeErrorPrototype):
        * runtime/NativeErrorPrototype.h:
        * runtime/NumberConstructor.cpp:
        (JSC::NumberConstructor::NumberConstructor):
        * runtime/NumberConstructor.h:
        (JSC::NumberConstructor::createStructure):
        * runtime/NumberObject.cpp:
        (JSC::NumberObject::NumberObject):
        * runtime/NumberObject.h:
        * runtime/NumberPrototype.cpp:
        (JSC::NumberPrototype::NumberPrototype):
        * runtime/NumberPrototype.h:
        * runtime/ObjectConstructor.cpp:
        (JSC::ObjectConstructor::ObjectConstructor):
        * runtime/ObjectConstructor.h:
        * runtime/ObjectPrototype.cpp:
        (JSC::ObjectPrototype::ObjectPrototype):
        * runtime/ObjectPrototype.h:
        * runtime/Operations.h:
        (JSC::equalSlowCaseInline):
        * runtime/PropertyNameArray.h:
        (JSC::PropertyNameArrayData::setCachedStructure):
        (JSC::PropertyNameArrayData::cachedStructure):
        (JSC::PropertyNameArrayData::setCachedPrototypeChain):
        (JSC::PropertyNameArrayData::cachedPrototypeChain):
        (JSC::PropertyNameArrayData::PropertyNameArrayData):
        * runtime/PrototypeFunction.cpp:
        (JSC::PrototypeFunction::PrototypeFunction):
        * runtime/PrototypeFunction.h:
        * runtime/RegExpConstructor.cpp:
        (JSC::RegExpConstructor::RegExpConstructor):
        * runtime/RegExpConstructor.h:
        (JSC::RegExpConstructor::createStructure):
        * runtime/RegExpObject.cpp:
        (JSC::RegExpObject::RegExpObject):
        * runtime/RegExpObject.h:
        (JSC::RegExpObject::createStructure):
        * runtime/RegExpPrototype.cpp:
        (JSC::RegExpPrototype::RegExpPrototype):
        * runtime/RegExpPrototype.h:
        * runtime/StringConstructor.cpp:
        (JSC::StringConstructor::StringConstructor):
        * runtime/StringConstructor.h:
        * runtime/StringObject.cpp:
        (JSC::StringObject::StringObject):
        * runtime/StringObject.h:
        (JSC::StringObject::createStructure):
        * runtime/StringObjectThatMasqueradesAsUndefined.h:
        (JSC::StringObjectThatMasqueradesAsUndefined::create):
        (JSC::StringObjectThatMasqueradesAsUndefined::StringObjectThatMasqueradesAsUndefined):
        (JSC::StringObjectThatMasqueradesAsUndefined::createStructure):
        * runtime/StringPrototype.cpp:
        (JSC::StringPrototype::StringPrototype):
        * runtime/StringPrototype.h:
        * runtime/Structure.cpp: Copied from JavaScriptCore/runtime/StructureID.cpp.
        (JSC::Structure::dumpStatistics):
        (JSC::Structure::Structure):
        (JSC::Structure::~Structure):
        (JSC::Structure::startIgnoringLeaks):
        (JSC::Structure::stopIgnoringLeaks):
        (JSC::Structure::materializePropertyMap):
        (JSC::Structure::getEnumerablePropertyNames):
        (JSC::Structure::clearEnumerationCache):
        (JSC::Structure::growPropertyStorageCapacity):
        (JSC::Structure::addPropertyTransitionToExistingStructure):
        (JSC::Structure::addPropertyTransition):
        (JSC::Structure::removePropertyTransition):
        (JSC::Structure::changePrototypeTransition):
        (JSC::Structure::getterSetterTransition):
        (JSC::Structure::toDictionaryTransition):
        (JSC::Structure::fromDictionaryTransition):
        (JSC::Structure::addPropertyWithoutTransition):
        (JSC::Structure::removePropertyWithoutTransition):
        (JSC::Structure::createCachedPrototypeChain):
        (JSC::Structure::checkConsistency):
        (JSC::Structure::copyPropertyTable):
        (JSC::Structure::get):
        (JSC::Structure::put):
        (JSC::Structure::remove):
        (JSC::Structure::insertIntoPropertyMapHashTable):
        (JSC::Structure::createPropertyMapHashTable):
        (JSC::Structure::expandPropertyMapHashTable):
        (JSC::Structure::rehashPropertyMapHashTable):
        (JSC::Structure::getEnumerablePropertyNamesInternal):
        * runtime/Structure.h: Copied from JavaScriptCore/runtime/StructureID.h.
        (JSC::Structure::create):
        (JSC::Structure::previousID):
        (JSC::Structure::setCachedPrototypeChain):
        (JSC::Structure::cachedPrototypeChain):
        (JSC::Structure::):
        (JSC::Structure::get):
        * runtime/StructureChain.cpp: Copied from JavaScriptCore/runtime/StructureIDChain.cpp.
        (JSC::StructureChain::StructureChain):
        (JSC::structureChainsAreEqual):
        * runtime/StructureChain.h: Copied from JavaScriptCore/runtime/StructureIDChain.h.
        (JSC::StructureChain::create):
        (JSC::StructureChain::head):
        * runtime/StructureID.cpp: Removed.
        * runtime/StructureID.h: Removed.
        * runtime/StructureIDChain.cpp: Removed.
        * runtime/StructureIDChain.h: Removed.
        * runtime/StructureIDTransitionTable.h: Removed.
        * runtime/StructureTransitionTable.h: Copied from JavaScriptCore/runtime/StructureIDTransitionTable.h.

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

        - fix non-WREC build

        * runtime/RegExp.cpp: Put "using namespace WREC" inside #if ENABLE(WREC).

2008-11-15  Kevin Ollivier  <kevino@theolliviers.com>

        Reviewed by Timothy Hatcher.
        
        As ThreadingNone doesn't implement threads, isMainThread should return true,
        not false.
        
        https://bugs.webkit.org/show_bug.cgi?id=22285

        * wtf/ThreadingNone.cpp:
        (WTF::isMainThread):

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

        Reviewed by Sam Weinig.
        
        Moved all WREC-related code into WREC.cpp and put it in a WREC namespace.
        Removed the WREC prefix from class names.

        * VM/CTI.cpp:
        * VM/CTI.h:
        * VM/Machine.h:
        (JSC::BytecodeInterpreter::assemblerBuffer):
        * masm/X86Assembler.h:
        * runtime/RegExp.cpp:
        (JSC::RegExp::RegExp):
        * wrec/CharacterClassConstructor.cpp:
        * wrec/CharacterClassConstructor.h:
        * wrec/WREC.cpp:
        (WREC::GenerateParenthesesNonGreedyFunctor::GenerateParenthesesNonGreedyFunctor):
        (WREC::GeneratePatternCharacterFunctor::generateAtom):
        (WREC::GeneratePatternCharacterFunctor::backtrack):
        (WREC::GenerateCharacterClassFunctor::generateAtom):
        (WREC::GenerateCharacterClassFunctor::backtrack):
        (WREC::GenerateBackreferenceFunctor::generateAtom):
        (WREC::GenerateBackreferenceFunctor::backtrack):
        (WREC::GenerateParenthesesNonGreedyFunctor::generateAtom):
        (WREC::GenerateParenthesesNonGreedyFunctor::backtrack):
        (WREC::Generator::generateBacktrack1):
        (WREC::Generator::generateBacktrackBackreference):
        (WREC::Generator::generateBackreferenceQuantifier):
        (WREC::Generator::generateNonGreedyQuantifier):
        (WREC::Generator::generateGreedyQuantifier):
        (WREC::Generator::generatePatternCharacter):
        (WREC::Generator::generateCharacterClassInvertedRange):
        (WREC::Generator::generateCharacterClassInverted):
        (WREC::Generator::generateCharacterClass):
        (WREC::Generator::generateParentheses):
        (WREC::Generator::generateParenthesesNonGreedy):
        (WREC::Generator::generateParenthesesResetTrampoline):
        (WREC::Generator::generateAssertionBOL):
        (WREC::Generator::generateAssertionEOL):
        (WREC::Generator::generateAssertionWordBoundary):
        (WREC::Generator::generateBackreference):
        (WREC::Generator::generateDisjunction):
        (WREC::Generator::terminateDisjunction):
        (WREC::Parser::parseGreedyQuantifier):
        (WREC::Parser::parseQuantifier):
        (WREC::Parser::parsePatternCharacterQualifier):
        (WREC::Parser::parseCharacterClassQuantifier):
        (WREC::Parser::parseBackreferenceQuantifier):
        (WREC::Parser::parseParentheses):
        (WREC::Parser::parseCharacterClass):
        (WREC::Parser::parseOctalEscape):
        (WREC::Parser::parseEscape):
        (WREC::Parser::parseTerm):
        (WREC::Parser::parseDisjunction):
        (WREC::compileRegExp):
        * wrec/WREC.h:
        (WREC::Generator::Generator):
        (WREC::Parser::Parser):
        (WREC::Parser::parseAlternative):

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

        Reviewed by Sam Weinig.
        
        Changed another case of "m_jit" to "m_assembler".

        * VM/CTI.cpp:
        * wrec/WREC.cpp:
        * wrec/WREC.h:
        (JSC::WRECGenerator::WRECGenerator):
        (JSC::WRECParser::WRECParser):

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

        Reviewed by Sam Weinig.
        
        Renamed "jit" to "assembler" and, for brevity, replaced *jit.* with __
        using a macro.

        * VM/CTI.cpp:
        (JSC::CTI::emitGetVirtualRegister):
        (JSC::CTI::emitPutCTIArgFromVirtualRegister):
        (JSC::CTI::emitPutCTIArg):
        (JSC::CTI::emitGetCTIArg):
        (JSC::CTI::emitPutCTIArgConstant):
        (JSC::CTI::emitPutCTIParam):
        (JSC::CTI::emitGetCTIParam):
        (JSC::CTI::emitPutToCallFrameHeader):
        (JSC::CTI::emitGetFromCallFrameHeader):
        (JSC::CTI::emitPutVirtualRegister):
        (JSC::CTI::emitInitRegister):
        (JSC::CTI::emitAllocateNumber):
        (JSC::CTI::emitNakedCall):
        (JSC::CTI::emitNakedFastCall):
        (JSC::CTI::emitCTICall):
        (JSC::CTI::emitJumpSlowCaseIfNotJSCell):
        (JSC::CTI::linkSlowCaseIfNotJSCell):
        (JSC::CTI::emitJumpSlowCaseIfNotImmNum):
        (JSC::CTI::emitJumpSlowCaseIfNotImmNums):
        (JSC::CTI::emitFastArithDeTagImmediate):
        (JSC::CTI::emitFastArithDeTagImmediateJumpIfZero):
        (JSC::CTI::emitFastArithReTagImmediate):
        (JSC::CTI::emitFastArithPotentiallyReTagImmediate):
        (JSC::CTI::emitFastArithImmToInt):
        (JSC::CTI::emitFastArithIntToImmOrSlowCase):
        (JSC::CTI::emitFastArithIntToImmNoCheck):
        (JSC::CTI::emitArithIntToImmWithJump):
        (JSC::CTI::emitTagAsBoolImmediate):
        (JSC::CTI::CTI):
        (JSC::CTI::compileOpCallInitializeCallFrame):
        (JSC::CTI::compileOpCall):
        (JSC::CTI::compileOpStrictEq):
        (JSC::CTI::emitSlowScriptCheck):
        (JSC::CTI::putDoubleResultToJSNumberCellOrJSImmediate):
        (JSC::CTI::compileBinaryArithOp):
        (JSC::CTI::compileBinaryArithOpSlowCase):
        (JSC::CTI::privateCompileMainPass):
        (JSC::CTI::privateCompileLinkPass):
        (JSC::CTI::privateCompileSlowCases):
        (JSC::CTI::privateCompile):
        (JSC::CTI::privateCompileGetByIdSelf):
        (JSC::CTI::privateCompileGetByIdProto):
        (JSC::CTI::privateCompileGetByIdChain):
        (JSC::CTI::privateCompilePutByIdReplace):
        (JSC::CTI::privateCompilePutByIdTransition):
        (JSC::CTI::privateCompileCTIMachineTrampolines):
        (JSC::CTI::privateCompilePatchGetArrayLength):
        (JSC::CTI::emitGetVariableObjectRegister):
        (JSC::CTI::emitPutVariableObjectRegister):
        (JSC::CTI::compileRegExp):
        * VM/CTI.h:
        * wrec/WREC.cpp:
        (JSC::WRECGenerator::generateBacktrack1):
        (JSC::WRECGenerator::generateBacktrackBackreference):
        (JSC::WRECGenerator::generateBackreferenceQuantifier):
        (JSC::WRECGenerator::generateNonGreedyQuantifier):
        (JSC::WRECGenerator::generateGreedyQuantifier):
        (JSC::WRECGenerator::generatePatternCharacter):
        (JSC::WRECGenerator::generateCharacterClassInvertedRange):
        (JSC::WRECGenerator::generateCharacterClassInverted):
        (JSC::WRECGenerator::generateCharacterClass):
        (JSC::WRECGenerator::generateParentheses):
        (JSC::WRECGenerator::generateParenthesesNonGreedy):
        (JSC::WRECGenerator::generateParenthesesResetTrampoline):
        (JSC::WRECGenerator::generateAssertionBOL):
        (JSC::WRECGenerator::generateAssertionEOL):
        (JSC::WRECGenerator::generateAssertionWordBoundary):
        (JSC::WRECGenerator::generateBackreference):
        (JSC::WRECGenerator::generateDisjunction):
        (JSC::WRECGenerator::terminateDisjunction):

2008-11-15  Sam Weinig  <sam@webkit.org>

        Reviewed by Geoffrey Garen.

        Remove dead method declaration.

        * bytecompiler/CodeGenerator.h:

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

        Reviewed by Sam Weinig.
        
        Renamed LabelID to Label, Label::isForwardLabel to Label::isForward.

        * VM/LabelID.h:
        (JSC::Label::Label):
        (JSC::Label::isForward):
        * bytecompiler/CodeGenerator.cpp:
        (JSC::BytecodeGenerator::newLabel):
        (JSC::BytecodeGenerator::emitLabel):
        (JSC::BytecodeGenerator::emitJump):
        (JSC::BytecodeGenerator::emitJumpIfTrue):
        (JSC::BytecodeGenerator::emitJumpIfFalse):
        (JSC::BytecodeGenerator::pushFinallyContext):
        (JSC::BytecodeGenerator::emitComplexJumpScopes):
        (JSC::BytecodeGenerator::emitJumpScopes):
        (JSC::BytecodeGenerator::emitNextPropertyName):
        (JSC::BytecodeGenerator::emitCatch):
        (JSC::BytecodeGenerator::emitJumpSubroutine):
        (JSC::prepareJumpTableForImmediateSwitch):
        (JSC::prepareJumpTableForCharacterSwitch):
        (JSC::prepareJumpTableForStringSwitch):
        (JSC::BytecodeGenerator::endSwitch):
        * bytecompiler/CodeGenerator.h:
        * bytecompiler/LabelScope.h:
        (JSC::LabelScope::LabelScope):
        (JSC::LabelScope::breakTarget):
        (JSC::LabelScope::continueTarget):
        * parser/Nodes.cpp:
        (JSC::LogicalOpNode::emitBytecode):
        (JSC::ConditionalNode::emitBytecode):
        (JSC::IfNode::emitBytecode):
        (JSC::IfElseNode::emitBytecode):
        (JSC::DoWhileNode::emitBytecode):
        (JSC::WhileNode::emitBytecode):
        (JSC::ForNode::emitBytecode):
        (JSC::ForInNode::emitBytecode):
        (JSC::ReturnNode::emitBytecode):
        (JSC::CaseBlockNode::emitBytecodeForBlock):
        (JSC::TryNode::emitBytecode):

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

        Reviewed by Sam Weinig.
        
        Renamed JITCodeBuffer to AssemblerBuffer and renamed its data members
        to be more like the rest of our buffer classes, with a size and a
        capacity.
        
        Added an assert in the unchecked put case to match the test in the checked
        put case.
        
        Changed a C-style cast to a C++-style cast.
        
        Renamed MAX_INSTRUCTION_SIZE to maxInstructionSize.

        * VM/CTI.cpp:
        (JSC::CTI::CTI):
        (JSC::CTI::compileRegExp):
        * VM/Machine.cpp:
        (JSC::BytecodeInterpreter::BytecodeInterpreter):
        * VM/Machine.h:
        (JSC::BytecodeInterpreter::assemblerBuffer):
        * masm/X86Assembler.h:
        (JSC::AssemblerBuffer::AssemblerBuffer):
        (JSC::AssemblerBuffer::~AssemblerBuffer):
        (JSC::AssemblerBuffer::ensureSpace):
        (JSC::AssemblerBuffer::isAligned):
        (JSC::AssemblerBuffer::putByteUnchecked):
        (JSC::AssemblerBuffer::putByte):
        (JSC::AssemblerBuffer::putShortUnchecked):
        (JSC::AssemblerBuffer::putShort):
        (JSC::AssemblerBuffer::putIntUnchecked):
        (JSC::AssemblerBuffer::putInt):
        (JSC::AssemblerBuffer::data):
        (JSC::AssemblerBuffer::size):
        (JSC::AssemblerBuffer::reset):
        (JSC::AssemblerBuffer::copy):
        (JSC::AssemblerBuffer::grow):
        (JSC::X86Assembler::):
        (JSC::X86Assembler::X86Assembler):
        (JSC::X86Assembler::testl_i32r):
        (JSC::X86Assembler::movl_mr):
        (JSC::X86Assembler::movl_rm):
        (JSC::X86Assembler::movl_i32m):
        (JSC::X86Assembler::emitCall):
        (JSC::X86Assembler::label):
        (JSC::X86Assembler::emitUnlinkedJmp):
        (JSC::X86Assembler::emitUnlinkedJne):
        (JSC::X86Assembler::emitUnlinkedJe):
        (JSC::X86Assembler::emitUnlinkedJl):
        (JSC::X86Assembler::emitUnlinkedJb):
        (JSC::X86Assembler::emitUnlinkedJle):
        (JSC::X86Assembler::emitUnlinkedJbe):
        (JSC::X86Assembler::emitUnlinkedJge):
        (JSC::X86Assembler::emitUnlinkedJg):
        (JSC::X86Assembler::emitUnlinkedJa):
        (JSC::X86Assembler::emitUnlinkedJae):
        (JSC::X86Assembler::emitUnlinkedJo):
        (JSC::X86Assembler::emitUnlinkedJp):
        (JSC::X86Assembler::emitUnlinkedJs):
        (JSC::X86Assembler::link):
        (JSC::X86Assembler::emitModRm_rr):
        (JSC::X86Assembler::emitModRm_rm):
        (JSC::X86Assembler::emitModRm_opr):

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

        Suggested by Maciej Stachowiak.
        
        Reverted most "opcode" => "bytecode" renames. We use "bytecode" as a
        mass noun to refer to a stream of instructions. Each instruction may be
        an opcode or an operand.

        * VM/CTI.cpp:
        (JSC::CTI::emitCTICall):
        (JSC::CTI::compileOpCall):
        (JSC::CTI::compileBinaryArithOp):
        (JSC::CTI::compileBinaryArithOpSlowCase):
        (JSC::CTI::privateCompileMainPass):
        (JSC::CTI::privateCompileSlowCases):
        (JSC::CTI::privateCompile):
        * VM/CTI.h:
        * VM/CodeBlock.cpp:
        (JSC::CodeBlock::printStructureIDs):
        (JSC::CodeBlock::dump):
        (JSC::CodeBlock::derefStructureIDs):
        (JSC::CodeBlock::refStructureIDs):
        * VM/CodeBlock.h:
        * VM/ExceptionHelpers.cpp:
        (JSC::createNotAnObjectError):
        * VM/Instruction.h:
        (JSC::Instruction::Instruction):
        (JSC::Instruction::):
        * VM/Machine.cpp:
        (JSC::BytecodeInterpreter::isOpcode):
        (JSC::BytecodeInterpreter::throwException):
        (JSC::BytecodeInterpreter::tryCachePutByID):
        (JSC::BytecodeInterpreter::uncachePutByID):
        (JSC::BytecodeInterpreter::tryCacheGetByID):
        (JSC::BytecodeInterpreter::uncacheGetByID):
        (JSC::BytecodeInterpreter::privateExecute):
        (JSC::BytecodeInterpreter::tryCTICachePutByID):
        (JSC::BytecodeInterpreter::tryCTICacheGetByID):
        * VM/Machine.h:
        (JSC::BytecodeInterpreter::getOpcode):
        (JSC::BytecodeInterpreter::getOpcodeID):
        (JSC::BytecodeInterpreter::isCallBytecode):
        * VM/Opcode.cpp:
        (JSC::):
        (JSC::OpcodeStats::OpcodeStats):
        (JSC::compareOpcodeIndices):
        (JSC::compareOpcodePairIndices):
        (JSC::OpcodeStats::~OpcodeStats):
        (JSC::OpcodeStats::recordInstruction):
        (JSC::OpcodeStats::resetLastInstruction):
        * VM/Opcode.h:
        (JSC::):
        (JSC::padOpcodeName):
        * VM/SamplingTool.cpp:
        (JSC::ScopeSampleRecord::sample):
        (JSC::SamplingTool::run):
        (JSC::compareOpcodeIndicesSampling):
        (JSC::SamplingTool::dump):
        * VM/SamplingTool.h:
        (JSC::ScopeSampleRecord::ScopeSampleRecord):
        (JSC::SamplingTool::SamplingTool):
        * bytecompiler/CodeGenerator.cpp:
        (JSC::BytecodeGenerator::BytecodeGenerator):
        (JSC::BytecodeGenerator::emitLabel):
        (JSC::BytecodeGenerator::emitOpcode):
        (JSC::BytecodeGenerator::emitJump):
        (JSC::BytecodeGenerator::emitJumpIfTrue):
        (JSC::BytecodeGenerator::emitJumpIfFalse):
        (JSC::BytecodeGenerator::emitMove):
        (JSC::BytecodeGenerator::emitUnaryOp):
        (JSC::BytecodeGenerator::emitPreInc):
        (JSC::BytecodeGenerator::emitPreDec):
        (JSC::BytecodeGenerator::emitPostInc):
        (JSC::BytecodeGenerator::emitPostDec):
        (JSC::BytecodeGenerator::emitBinaryOp):
        (JSC::BytecodeGenerator::emitEqualityOp):
        (JSC::BytecodeGenerator::emitUnexpectedLoad):
        (JSC::BytecodeGenerator::emitInstanceOf):
        (JSC::BytecodeGenerator::emitResolve):
        (JSC::BytecodeGenerator::emitGetScopedVar):
        (JSC::BytecodeGenerator::emitPutScopedVar):
        (JSC::BytecodeGenerator::emitResolveBase):
        (JSC::BytecodeGenerator::emitResolveWithBase):
        (JSC::BytecodeGenerator::emitResolveFunction):
        (JSC::BytecodeGenerator::emitGetById):
        (JSC::BytecodeGenerator::emitPutById):
        (JSC::BytecodeGenerator::emitPutGetter):
        (JSC::BytecodeGenerator::emitPutSetter):
        (JSC::BytecodeGenerator::emitDeleteById):
        (JSC::BytecodeGenerator::emitGetByVal):
        (JSC::BytecodeGenerator::emitPutByVal):
        (JSC::BytecodeGenerator::emitDeleteByVal):
        (JSC::BytecodeGenerator::emitPutByIndex):
        (JSC::BytecodeGenerator::emitNewObject):
        (JSC::BytecodeGenerator::emitNewArray):
        (JSC::BytecodeGenerator::emitNewFunction):
        (JSC::BytecodeGenerator::emitNewRegExp):
        (JSC::BytecodeGenerator::emitNewFunctionExpression):
        (JSC::BytecodeGenerator::emitCall):
        (JSC::BytecodeGenerator::emitReturn):
        (JSC::BytecodeGenerator::emitUnaryNoDstOp):
        (JSC::BytecodeGenerator::emitConstruct):
        (JSC::BytecodeGenerator::emitPopScope):
        (JSC::BytecodeGenerator::emitDebugHook):
        (JSC::BytecodeGenerator::emitComplexJumpScopes):
        (JSC::BytecodeGenerator::emitJumpScopes):
        (JSC::BytecodeGenerator::emitNextPropertyName):
        (JSC::BytecodeGenerator::emitCatch):
        (JSC::BytecodeGenerator::emitNewError):
        (JSC::BytecodeGenerator::emitJumpSubroutine):
        (JSC::BytecodeGenerator::emitSubroutineReturn):
        (JSC::BytecodeGenerator::emitPushNewScope):
        (JSC::BytecodeGenerator::beginSwitch):
        * bytecompiler/CodeGenerator.h:
        * jsc.cpp:
        (runWithScripts):
        * masm/X86Assembler.h:
        (JSC::X86Assembler::):
        (JSC::X86Assembler::emitModRm_opr):
        (JSC::X86Assembler::emitModRm_opr_Unchecked):
        (JSC::X86Assembler::emitModRm_opm):
        (JSC::X86Assembler::emitModRm_opm_Unchecked):
        (JSC::X86Assembler::emitModRm_opmsib):
        * parser/Nodes.cpp:
        (JSC::UnaryOpNode::emitBytecode):
        (JSC::BinaryOpNode::emitBytecode):
        (JSC::ReverseBinaryOpNode::emitBytecode):
        (JSC::ThrowableBinaryOpNode::emitBytecode):
        (JSC::emitReadModifyAssignment):
        (JSC::ScopeNode::ScopeNode):
        * parser/Nodes.h:
        (JSC::UnaryPlusNode::):
        (JSC::NegateNode::):
        (JSC::BitwiseNotNode::):
        (JSC::LogicalNotNode::):
        (JSC::MultNode::):
        (JSC::DivNode::):
        (JSC::ModNode::):
        (JSC::AddNode::):
        (JSC::SubNode::):
        (JSC::LeftShiftNode::):
        (JSC::RightShiftNode::):
        (JSC::UnsignedRightShiftNode::):
        (JSC::LessNode::):
        (JSC::GreaterNode::):
        (JSC::LessEqNode::):
        (JSC::GreaterEqNode::):
        (JSC::InstanceOfNode::):
        (JSC::InNode::):
        (JSC::EqualNode::):
        (JSC::NotEqualNode::):
        (JSC::StrictEqualNode::):
        (JSC::NotStrictEqualNode::):
        (JSC::BitAndNode::):
        (JSC::BitOrNode::):
        (JSC::BitXOrNode::):
        * runtime/StructureID.cpp:
        (JSC::StructureID::fromDictionaryTransition):
        * wtf/Platform.h:

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

        Reviewed by Sam Weinig.
        
        Renames:
        
        CodeGenerator => BytecodeGenerator
        emitCodeForBlock => emitBytecodeForBlock
        generatedByteCode => generatedBytecode
        generateCode => generateBytecode

        * JavaScriptCore.exp:
        * bytecompiler/CodeGenerator.cpp:
        (JSC::BytecodeGenerator::setDumpsGeneratedCode):
        (JSC::BytecodeGenerator::generate):
        (JSC::BytecodeGenerator::addVar):
        (JSC::BytecodeGenerator::addGlobalVar):
        (JSC::BytecodeGenerator::allocateConstants):
        (JSC::BytecodeGenerator::BytecodeGenerator):
        (JSC::BytecodeGenerator::addParameter):
        (JSC::BytecodeGenerator::registerFor):
        (JSC::BytecodeGenerator::constRegisterFor):
        (JSC::BytecodeGenerator::isLocal):
        (JSC::BytecodeGenerator::isLocalConstant):
        (JSC::BytecodeGenerator::newRegister):
        (JSC::BytecodeGenerator::newTemporary):
        (JSC::BytecodeGenerator::highestUsedRegister):
        (JSC::BytecodeGenerator::newLabelScope):
        (JSC::BytecodeGenerator::newLabel):
        (JSC::BytecodeGenerator::emitLabel):
        (JSC::BytecodeGenerator::emitBytecode):
        (JSC::BytecodeGenerator::retrieveLastBinaryOp):
        (JSC::BytecodeGenerator::retrieveLastUnaryOp):
        (JSC::BytecodeGenerator::rewindBinaryOp):
        (JSC::BytecodeGenerator::rewindUnaryOp):
        (JSC::BytecodeGenerator::emitJump):
        (JSC::BytecodeGenerator::emitJumpIfTrue):
        (JSC::BytecodeGenerator::emitJumpIfFalse):
        (JSC::BytecodeGenerator::addConstant):
        (JSC::BytecodeGenerator::addUnexpectedConstant):
        (JSC::BytecodeGenerator::addRegExp):
        (JSC::BytecodeGenerator::emitMove):
        (JSC::BytecodeGenerator::emitUnaryOp):
        (JSC::BytecodeGenerator::emitPreInc):
        (JSC::BytecodeGenerator::emitPreDec):
        (JSC::BytecodeGenerator::emitPostInc):
        (JSC::BytecodeGenerator::emitPostDec):
        (JSC::BytecodeGenerator::emitBinaryOp):
        (JSC::BytecodeGenerator::emitEqualityOp):
        (JSC::BytecodeGenerator::emitLoad):
        (JSC::BytecodeGenerator::emitUnexpectedLoad):
        (JSC::BytecodeGenerator::findScopedProperty):
        (JSC::BytecodeGenerator::emitInstanceOf):
        (JSC::BytecodeGenerator::emitResolve):
        (JSC::BytecodeGenerator::emitGetScopedVar):
        (JSC::BytecodeGenerator::emitPutScopedVar):
        (JSC::BytecodeGenerator::emitResolveBase):
        (JSC::BytecodeGenerator::emitResolveWithBase):
        (JSC::BytecodeGenerator::emitResolveFunction):
        (JSC::BytecodeGenerator::emitGetById):
        (JSC::BytecodeGenerator::emitPutById):
        (JSC::BytecodeGenerator::emitPutGetter):
        (JSC::BytecodeGenerator::emitPutSetter):
        (JSC::BytecodeGenerator::emitDeleteById):
        (JSC::BytecodeGenerator::emitGetByVal):
        (JSC::BytecodeGenerator::emitPutByVal):
        (JSC::BytecodeGenerator::emitDeleteByVal):
        (JSC::BytecodeGenerator::emitPutByIndex):
        (JSC::BytecodeGenerator::emitNewObject):
        (JSC::BytecodeGenerator::emitNewArray):
        (JSC::BytecodeGenerator::emitNewFunction):
        (JSC::BytecodeGenerator::emitNewRegExp):
        (JSC::BytecodeGenerator::emitNewFunctionExpression):
        (JSC::BytecodeGenerator::emitCall):
        (JSC::BytecodeGenerator::emitCallEval):
        (JSC::BytecodeGenerator::emitReturn):
        (JSC::BytecodeGenerator::emitUnaryNoDstOp):
        (JSC::BytecodeGenerator::emitConstruct):
        (JSC::BytecodeGenerator::emitPushScope):
        (JSC::BytecodeGenerator::emitPopScope):
        (JSC::BytecodeGenerator::emitDebugHook):
        (JSC::BytecodeGenerator::pushFinallyContext):
        (JSC::BytecodeGenerator::popFinallyContext):
        (JSC::BytecodeGenerator::breakTarget):
        (JSC::BytecodeGenerator::continueTarget):
        (JSC::BytecodeGenerator::emitComplexJumpScopes):
        (JSC::BytecodeGenerator::emitJumpScopes):
        (JSC::BytecodeGenerator::emitNextPropertyName):
        (JSC::BytecodeGenerator::emitCatch):
        (JSC::BytecodeGenerator::emitNewError):
        (JSC::BytecodeGenerator::emitJumpSubroutine):
        (JSC::BytecodeGenerator::emitSubroutineReturn):
        (JSC::BytecodeGenerator::emitPushNewScope):
        (JSC::BytecodeGenerator::beginSwitch):
        (JSC::BytecodeGenerator::endSwitch):
        (JSC::BytecodeGenerator::emitThrowExpressionTooDeepException):
        * bytecompiler/CodeGenerator.h:
        * jsc.cpp:
        (runWithScripts):
        * parser/Nodes.cpp:
        (JSC::ThrowableExpressionData::emitThrowError):
        (JSC::NullNode::emitBytecode):
        (JSC::BooleanNode::emitBytecode):
        (JSC::NumberNode::emitBytecode):
        (JSC::StringNode::emitBytecode):
        (JSC::RegExpNode::emitBytecode):
        (JSC::ThisNode::emitBytecode):
        (JSC::ResolveNode::isPure):
        (JSC::ResolveNode::emitBytecode):
        (JSC::ArrayNode::emitBytecode):
        (JSC::ObjectLiteralNode::emitBytecode):
        (JSC::PropertyListNode::emitBytecode):
        (JSC::BracketAccessorNode::emitBytecode):
        (JSC::DotAccessorNode::emitBytecode):
        (JSC::ArgumentListNode::emitBytecode):
        (JSC::NewExprNode::emitBytecode):
        (JSC::EvalFunctionCallNode::emitBytecode):
        (JSC::FunctionCallValueNode::emitBytecode):
        (JSC::FunctionCallResolveNode::emitBytecode):
        (JSC::FunctionCallBracketNode::emitBytecode):
        (JSC::FunctionCallDotNode::emitBytecode):
        (JSC::emitPreIncOrDec):
        (JSC::emitPostIncOrDec):
        (JSC::PostfixResolveNode::emitBytecode):
        (JSC::PostfixBracketNode::emitBytecode):
        (JSC::PostfixDotNode::emitBytecode):
        (JSC::PostfixErrorNode::emitBytecode):
        (JSC::DeleteResolveNode::emitBytecode):
        (JSC::DeleteBracketNode::emitBytecode):
        (JSC::DeleteDotNode::emitBytecode):
        (JSC::DeleteValueNode::emitBytecode):
        (JSC::VoidNode::emitBytecode):
        (JSC::TypeOfResolveNode::emitBytecode):
        (JSC::TypeOfValueNode::emitBytecode):
        (JSC::PrefixResolveNode::emitBytecode):
        (JSC::PrefixBracketNode::emitBytecode):
        (JSC::PrefixDotNode::emitBytecode):
        (JSC::PrefixErrorNode::emitBytecode):
        (JSC::UnaryOpNode::emitBytecode):
        (JSC::BinaryOpNode::emitBytecode):
        (JSC::EqualNode::emitBytecode):
        (JSC::StrictEqualNode::emitBytecode):
        (JSC::ReverseBinaryOpNode::emitBytecode):
        (JSC::ThrowableBinaryOpNode::emitBytecode):
        (JSC::InstanceOfNode::emitBytecode):
        (JSC::LogicalOpNode::emitBytecode):
        (JSC::ConditionalNode::emitBytecode):
        (JSC::emitReadModifyAssignment):
        (JSC::ReadModifyResolveNode::emitBytecode):
        (JSC::AssignResolveNode::emitBytecode):
        (JSC::AssignDotNode::emitBytecode):
        (JSC::ReadModifyDotNode::emitBytecode):
        (JSC::AssignErrorNode::emitBytecode):
        (JSC::AssignBracketNode::emitBytecode):
        (JSC::ReadModifyBracketNode::emitBytecode):
        (JSC::CommaNode::emitBytecode):
        (JSC::ConstDeclNode::emitCodeSingle):
        (JSC::ConstDeclNode::emitBytecode):
        (JSC::ConstStatementNode::emitBytecode):
        (JSC::statementListEmitCode):
        (JSC::BlockNode::emitBytecode):
        (JSC::EmptyStatementNode::emitBytecode):
        (JSC::DebuggerStatementNode::emitBytecode):
        (JSC::ExprStatementNode::emitBytecode):
        (JSC::VarStatementNode::emitBytecode):
        (JSC::IfNode::emitBytecode):
        (JSC::IfElseNode::emitBytecode):
        (JSC::DoWhileNode::emitBytecode):
        (JSC::WhileNode::emitBytecode):
        (JSC::ForNode::emitBytecode):
        (JSC::ForInNode::emitBytecode):
        (JSC::ContinueNode::emitBytecode):
        (JSC::BreakNode::emitBytecode):
        (JSC::ReturnNode::emitBytecode):
        (JSC::WithNode::emitBytecode):
        (JSC::CaseBlockNode::emitBytecodeForBlock):
        (JSC::SwitchNode::emitBytecode):
        (JSC::LabelNode::emitBytecode):
        (JSC::ThrowNode::emitBytecode):
        (JSC::TryNode::emitBytecode):
        (JSC::EvalNode::emitBytecode):
        (JSC::EvalNode::generateBytecode):
        (JSC::FunctionBodyNode::generateBytecode):
        (JSC::FunctionBodyNode::emitBytecode):
        (JSC::ProgramNode::emitBytecode):
        (JSC::ProgramNode::generateBytecode):
        (JSC::FuncDeclNode::emitBytecode):
        (JSC::FuncExprNode::emitBytecode):
        * parser/Nodes.h:
        (JSC::ExpressionNode::):
        (JSC::BooleanNode::):
        (JSC::NumberNode::):
        (JSC::StringNode::):
        (JSC::ProgramNode::):
        (JSC::EvalNode::):
        (JSC::FunctionBodyNode::):
        * runtime/Arguments.h:
        (JSC::Arguments::getArgumentsData):
        (JSC::JSActivation::copyRegisters):
        * runtime/JSActivation.cpp:
        (JSC::JSActivation::mark):
        * runtime/JSActivation.h:
        (JSC::JSActivation::JSActivationData::JSActivationData):
        * runtime/JSFunction.cpp:
        (JSC::JSFunction::~JSFunction):

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

        Reviewed by Sam Weinig.
        
        Renamed all forms of "byte code" "opcode" "op code" "code" "bitcode"
        etc. to "bytecode".

        * VM/CTI.cpp:
        (JSC::CTI::printBytecodeOperandTypes):
        (JSC::CTI::emitAllocateNumber):
        (JSC::CTI::emitNakedCall):
        (JSC::CTI::emitNakedFastCall):
        (JSC::CTI::emitCTICall):
        (JSC::CTI::emitJumpSlowCaseIfNotJSCell):
        (JSC::CTI::emitJumpSlowCaseIfNotImmNum):
        (JSC::CTI::emitJumpSlowCaseIfNotImmNums):
        (JSC::CTI::emitFastArithIntToImmOrSlowCase):
        (JSC::CTI::compileOpCall):
        (JSC::CTI::emitSlowScriptCheck):
        (JSC::CTI::compileBinaryArithOp):
        (JSC::CTI::compileBinaryArithOpSlowCase):
        (JSC::CTI::privateCompileMainPass):
        (JSC::CTI::privateCompileSlowCases):
        (JSC::CTI::privateCompile):
        * VM/CTI.h:
        (JSC::CallRecord::CallRecord):
        (JSC::SwitchRecord::SwitchRecord):
        * VM/CodeBlock.cpp:
        (JSC::CodeBlock::printStructureIDs):
        (JSC::CodeBlock::dump):
        (JSC::CodeBlock::~CodeBlock):
        (JSC::CodeBlock::derefStructureIDs):
        (JSC::CodeBlock::refStructureIDs):
        * VM/CodeBlock.h:
        (JSC::StructureStubInfo::StructureStubInfo):
        * VM/ExceptionHelpers.cpp:
        (JSC::createNotAnObjectError):
        * VM/Instruction.h:
        (JSC::Instruction::Instruction):
        (JSC::Instruction::):
        * VM/Machine.cpp:
        (JSC::BytecodeInterpreter::isBytecode):
        (JSC::BytecodeInterpreter::throwException):
        (JSC::BytecodeInterpreter::execute):
        (JSC::BytecodeInterpreter::tryCachePutByID):
        (JSC::BytecodeInterpreter::uncachePutByID):
        (JSC::BytecodeInterpreter::tryCacheGetByID):
        (JSC::BytecodeInterpreter::uncacheGetByID):
        (JSC::BytecodeInterpreter::privateExecute):
        (JSC::BytecodeInterpreter::tryCTICachePutByID):
        (JSC::BytecodeInterpreter::tryCTICacheGetByID):
        (JSC::BytecodeInterpreter::cti_op_call_JSFunction):
        (JSC::BytecodeInterpreter::cti_vm_dontLazyLinkCall):
        (JSC::BytecodeInterpreter::cti_vm_lazyLinkCall):
        * VM/Machine.h:
        (JSC::BytecodeInterpreter::getBytecode):
        (JSC::BytecodeInterpreter::getBytecodeID):
        (JSC::BytecodeInterpreter::isCallBytecode):
        * VM/Opcode.cpp:
        (JSC::):
        (JSC::BytecodeStats::BytecodeStats):
        (JSC::compareBytecodeIndices):
        (JSC::compareBytecodePairIndices):
        (JSC::BytecodeStats::~BytecodeStats):
        (JSC::BytecodeStats::recordInstruction):
        (JSC::BytecodeStats::resetLastInstruction):
        * VM/Opcode.h:
        (JSC::):
        (JSC::padBytecodeName):
        * VM/SamplingTool.cpp:
        (JSC::ScopeSampleRecord::sample):
        (JSC::SamplingTool::run):
        (JSC::compareBytecodeIndicesSampling):
        (JSC::SamplingTool::dump):
        * VM/SamplingTool.h:
        (JSC::ScopeSampleRecord::ScopeSampleRecord):
        (JSC::SamplingTool::SamplingTool):
        * bytecompiler/CodeGenerator.cpp:
        (JSC::CodeGenerator::generate):
        (JSC::CodeGenerator::CodeGenerator):
        (JSC::CodeGenerator::emitLabel):
        (JSC::CodeGenerator::emitBytecode):
        (JSC::CodeGenerator::emitJump):
        (JSC::CodeGenerator::emitJumpIfTrue):
        (JSC::CodeGenerator::emitJumpIfFalse):
        (JSC::CodeGenerator::emitMove):
        (JSC::CodeGenerator::emitUnaryOp):
        (JSC::CodeGenerator::emitPreInc):
        (JSC::CodeGenerator::emitPreDec):
        (JSC::CodeGenerator::emitPostInc):
        (JSC::CodeGenerator::emitPostDec):
        (JSC::CodeGenerator::emitBinaryOp):
        (JSC::CodeGenerator::emitEqualityOp):
        (JSC::CodeGenerator::emitUnexpectedLoad):
        (JSC::CodeGenerator::emitInstanceOf):
        (JSC::CodeGenerator::emitResolve):
        (JSC::CodeGenerator::emitGetScopedVar):
        (JSC::CodeGenerator::emitPutScopedVar):
        (JSC::CodeGenerator::emitResolveBase):
        (JSC::CodeGenerator::emitResolveWithBase):
        (JSC::CodeGenerator::emitResolveFunction):
        (JSC::CodeGenerator::emitGetById):
        (JSC::CodeGenerator::emitPutById):
        (JSC::CodeGenerator::emitPutGetter):
        (JSC::CodeGenerator::emitPutSetter):
        (JSC::CodeGenerator::emitDeleteById):
        (JSC::CodeGenerator::emitGetByVal):
        (JSC::CodeGenerator::emitPutByVal):
        (JSC::CodeGenerator::emitDeleteByVal):
        (JSC::CodeGenerator::emitPutByIndex):
        (JSC::CodeGenerator::emitNewObject):
        (JSC::CodeGenerator::emitNewArray):
        (JSC::CodeGenerator::emitNewFunction):
        (JSC::CodeGenerator::emitNewRegExp):
        (JSC::CodeGenerator::emitNewFunctionExpression):
        (JSC::CodeGenerator::emitCall):
        (JSC::CodeGenerator::emitReturn):
        (JSC::CodeGenerator::emitUnaryNoDstOp):
        (JSC::CodeGenerator::emitConstruct):
        (JSC::CodeGenerator::emitPopScope):
        (JSC::CodeGenerator::emitDebugHook):
        (JSC::CodeGenerator::emitComplexJumpScopes):
        (JSC::CodeGenerator::emitJumpScopes):
        (JSC::CodeGenerator::emitNextPropertyName):
        (JSC::CodeGenerator::emitCatch):
        (JSC::CodeGenerator::emitNewError):
        (JSC::CodeGenerator::emitJumpSubroutine):
        (JSC::CodeGenerator::emitSubroutineReturn):
        (JSC::CodeGenerator::emitPushNewScope):
        (JSC::CodeGenerator::beginSwitch):
        (JSC::CodeGenerator::endSwitch):
        * bytecompiler/CodeGenerator.h:
        (JSC::CodeGenerator::emitNode):
        * jsc.cpp:
        (runWithScripts):
        * masm/X86Assembler.h:
        (JSC::X86Assembler::):
        (JSC::X86Assembler::emitModRm_opr):
        (JSC::X86Assembler::emitModRm_opr_Unchecked):
        (JSC::X86Assembler::emitModRm_opm):
        (JSC::X86Assembler::emitModRm_opm_Unchecked):
        (JSC::X86Assembler::emitModRm_opmsib):
        * parser/Nodes.cpp:
        (JSC::NullNode::emitBytecode):
        (JSC::BooleanNode::emitBytecode):
        (JSC::NumberNode::emitBytecode):
        (JSC::StringNode::emitBytecode):
        (JSC::RegExpNode::emitBytecode):
        (JSC::ThisNode::emitBytecode):
        (JSC::ResolveNode::emitBytecode):
        (JSC::ArrayNode::emitBytecode):
        (JSC::ObjectLiteralNode::emitBytecode):
        (JSC::PropertyListNode::emitBytecode):
        (JSC::BracketAccessorNode::emitBytecode):
        (JSC::DotAccessorNode::emitBytecode):
        (JSC::ArgumentListNode::emitBytecode):
        (JSC::NewExprNode::emitBytecode):
        (JSC::EvalFunctionCallNode::emitBytecode):
        (JSC::FunctionCallValueNode::emitBytecode):
        (JSC::FunctionCallResolveNode::emitBytecode):
        (JSC::FunctionCallBracketNode::emitBytecode):
        (JSC::FunctionCallDotNode::emitBytecode):
        (JSC::PostfixResolveNode::emitBytecode):
        (JSC::PostfixBracketNode::emitBytecode):
        (JSC::PostfixDotNode::emitBytecode):
        (JSC::PostfixErrorNode::emitBytecode):
        (JSC::DeleteResolveNode::emitBytecode):
        (JSC::DeleteBracketNode::emitBytecode):
        (JSC::DeleteDotNode::emitBytecode):
        (JSC::DeleteValueNode::emitBytecode):
        (JSC::VoidNode::emitBytecode):
        (JSC::TypeOfResolveNode::emitBytecode):
        (JSC::TypeOfValueNode::emitBytecode):
        (JSC::PrefixResolveNode::emitBytecode):
        (JSC::PrefixBracketNode::emitBytecode):
        (JSC::PrefixDotNode::emitBytecode):
        (JSC::PrefixErrorNode::emitBytecode):
        (JSC::UnaryOpNode::emitBytecode):
        (JSC::BinaryOpNode::emitBytecode):
        (JSC::EqualNode::emitBytecode):
        (JSC::StrictEqualNode::emitBytecode):
        (JSC::ReverseBinaryOpNode::emitBytecode):
        (JSC::ThrowableBinaryOpNode::emitBytecode):
        (JSC::InstanceOfNode::emitBytecode):
        (JSC::LogicalOpNode::emitBytecode):
        (JSC::ConditionalNode::emitBytecode):
        (JSC::emitReadModifyAssignment):
        (JSC::ReadModifyResolveNode::emitBytecode):
        (JSC::AssignResolveNode::emitBytecode):
        (JSC::AssignDotNode::emitBytecode):
        (JSC::ReadModifyDotNode::emitBytecode):
        (JSC::AssignErrorNode::emitBytecode):
        (JSC::AssignBracketNode::emitBytecode):
        (JSC::ReadModifyBracketNode::emitBytecode):
        (JSC::CommaNode::emitBytecode):
        (JSC::ConstDeclNode::emitBytecode):
        (JSC::ConstStatementNode::emitBytecode):
        (JSC::BlockNode::emitBytecode):
        (JSC::EmptyStatementNode::emitBytecode):
        (JSC::DebuggerStatementNode::emitBytecode):
        (JSC::ExprStatementNode::emitBytecode):
        (JSC::VarStatementNode::emitBytecode):
        (JSC::IfNode::emitBytecode):
        (JSC::IfElseNode::emitBytecode):
        (JSC::DoWhileNode::emitBytecode):
        (JSC::WhileNode::emitBytecode):
        (JSC::ForNode::emitBytecode):
        (JSC::ForInNode::emitBytecode):
        (JSC::ContinueNode::emitBytecode):
        (JSC::BreakNode::emitBytecode):
        (JSC::ReturnNode::emitBytecode):
        (JSC::WithNode::emitBytecode):
        (JSC::SwitchNode::emitBytecode):
        (JSC::LabelNode::emitBytecode):
        (JSC::ThrowNode::emitBytecode):
        (JSC::TryNode::emitBytecode):
        (JSC::ScopeNode::ScopeNode):
        (JSC::EvalNode::emitBytecode):
        (JSC::FunctionBodyNode::emitBytecode):
        (JSC::ProgramNode::emitBytecode):
        (JSC::FuncDeclNode::emitBytecode):
        (JSC::FuncExprNode::emitBytecode):
        * parser/Nodes.h:
        (JSC::UnaryPlusNode::):
        (JSC::NegateNode::):
        (JSC::BitwiseNotNode::):
        (JSC::LogicalNotNode::):
        (JSC::MultNode::):
        (JSC::DivNode::):
        (JSC::ModNode::):
        (JSC::AddNode::):
        (JSC::SubNode::):
        (JSC::LeftShiftNode::):
        (JSC::RightShiftNode::):
        (JSC::UnsignedRightShiftNode::):
        (JSC::LessNode::):
        (JSC::GreaterNode::):
        (JSC::LessEqNode::):
        (JSC::GreaterEqNode::):
        (JSC::InstanceOfNode::):
        (JSC::InNode::):
        (JSC::EqualNode::):
        (JSC::NotEqualNode::):
        (JSC::StrictEqualNode::):
        (JSC::NotStrictEqualNode::):
        (JSC::BitAndNode::):
        (JSC::BitOrNode::):
        (JSC::BitXOrNode::):
        (JSC::ProgramNode::):
        (JSC::EvalNode::):
        (JSC::FunctionBodyNode::):
        * runtime/JSNotAnObject.h:
        * runtime/StructureID.cpp:
        (JSC::StructureID::fromDictionaryTransition):
        * wtf/Platform.h:

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

        Reviewed by Sam Weinig.
        
        Renamed Machine to BytecodeInterpreter.
        
        Nixed the Interpreter class, and changed its two functions to stand-alone
        functions.

        * JavaScriptCore.exp:
        * VM/CTI.cpp:
        (JSC::):
        (JSC::CTI::emitCTICall):
        (JSC::CTI::CTI):
        (JSC::CTI::compileOpCall):
        (JSC::CTI::emitSlowScriptCheck):
        (JSC::CTI::compileBinaryArithOpSlowCase):
        (JSC::CTI::privateCompileMainPass):
        (JSC::CTI::privateCompileSlowCases):
        (JSC::CTI::privateCompile):
        (JSC::CTI::privateCompileGetByIdSelf):
        (JSC::CTI::privateCompileGetByIdProto):
        (JSC::CTI::privateCompileGetByIdChain):
        (JSC::CTI::privateCompilePutByIdReplace):
        (JSC::CTI::privateCompilePutByIdTransition):
        (JSC::CTI::privateCompileCTIMachineTrampolines):
        (JSC::CTI::freeCTIMachineTrampolines):
        (JSC::CTI::patchGetByIdSelf):
        (JSC::CTI::patchPutByIdReplace):
        (JSC::CTI::privateCompilePatchGetArrayLength):
        (JSC::CTI::compileRegExp):
        * VM/CTI.h:
        * VM/CodeBlock.cpp:
        (JSC::CodeBlock::printStructureIDs):
        (JSC::CodeBlock::dump):
        (JSC::CodeBlock::derefStructureIDs):
        (JSC::CodeBlock::refStructureIDs):
        * VM/ExceptionHelpers.cpp:
        (JSC::createNotAnObjectError):
        * VM/Machine.cpp:
        (JSC::jsLess):
        (JSC::jsLessEq):
        (JSC::BytecodeInterpreter::resolve):
        (JSC::BytecodeInterpreter::resolveSkip):
        (JSC::BytecodeInterpreter::resolveGlobal):
        (JSC::BytecodeInterpreter::resolveBase):
        (JSC::BytecodeInterpreter::resolveBaseAndProperty):
        (JSC::BytecodeInterpreter::resolveBaseAndFunc):
        (JSC::BytecodeInterpreter::slideRegisterWindowForCall):
        (JSC::BytecodeInterpreter::callEval):
        (JSC::BytecodeInterpreter::BytecodeInterpreter):
        (JSC::BytecodeInterpreter::initialize):
        (JSC::BytecodeInterpreter::~BytecodeInterpreter):
        (JSC::BytecodeInterpreter::dumpCallFrame):
        (JSC::BytecodeInterpreter::dumpRegisters):
        (JSC::BytecodeInterpreter::isOpcode):
        (JSC::BytecodeInterpreter::unwindCallFrame):
        (JSC::BytecodeInterpreter::throwException):
        (JSC::BytecodeInterpreter::execute):
        (JSC::BytecodeInterpreter::debug):
        (JSC::BytecodeInterpreter::resetTimeoutCheck):
        (JSC::BytecodeInterpreter::checkTimeout):
        (JSC::BytecodeInterpreter::createExceptionScope):
        (JSC::BytecodeInterpreter::tryCachePutByID):
        (JSC::BytecodeInterpreter::uncachePutByID):
        (JSC::BytecodeInterpreter::tryCacheGetByID):
        (JSC::BytecodeInterpreter::uncacheGetByID):
        (JSC::BytecodeInterpreter::privateExecute):
        (JSC::BytecodeInterpreter::retrieveArguments):
        (JSC::BytecodeInterpreter::retrieveCaller):
        (JSC::BytecodeInterpreter::retrieveLastCaller):
        (JSC::BytecodeInterpreter::findFunctionCallFrame):
        (JSC::BytecodeInterpreter::tryCTICachePutByID):
        (JSC::BytecodeInterpreter::tryCTICacheGetByID):
        (JSC::BytecodeInterpreter::cti_op_convert_this):
        (JSC::BytecodeInterpreter::cti_op_end):
        (JSC::BytecodeInterpreter::cti_op_add):
        (JSC::BytecodeInterpreter::cti_op_pre_inc):
        (JSC::BytecodeInterpreter::cti_timeout_check):
        (JSC::BytecodeInterpreter::cti_register_file_check):
        (JSC::BytecodeInterpreter::cti_op_loop_if_less):
        (JSC::BytecodeInterpreter::cti_op_loop_if_lesseq):
        (JSC::BytecodeInterpreter::cti_op_new_object):
        (JSC::BytecodeInterpreter::cti_op_put_by_id):
        (JSC::BytecodeInterpreter::cti_op_put_by_id_second):
        (JSC::BytecodeInterpreter::cti_op_put_by_id_generic):
        (JSC::BytecodeInterpreter::cti_op_put_by_id_fail):
        (JSC::BytecodeInterpreter::cti_op_get_by_id):
        (JSC::BytecodeInterpreter::cti_op_get_by_id_second):
        (JSC::BytecodeInterpreter::cti_op_get_by_id_generic):
        (JSC::BytecodeInterpreter::cti_op_get_by_id_fail):
        (JSC::BytecodeInterpreter::cti_op_instanceof):
        (JSC::BytecodeInterpreter::cti_op_del_by_id):
        (JSC::BytecodeInterpreter::cti_op_mul):
        (JSC::BytecodeInterpreter::cti_op_new_func):
        (JSC::BytecodeInterpreter::cti_op_call_JSFunction):
        (JSC::BytecodeInterpreter::cti_op_call_arityCheck):
        (JSC::BytecodeInterpreter::cti_vm_dontLazyLinkCall):
        (JSC::BytecodeInterpreter::cti_vm_lazyLinkCall):
        (JSC::BytecodeInterpreter::cti_op_push_activation):
        (JSC::BytecodeInterpreter::cti_op_call_NotJSFunction):
        (JSC::BytecodeInterpreter::cti_op_create_arguments):
        (JSC::BytecodeInterpreter::cti_op_create_arguments_no_params):
        (JSC::BytecodeInterpreter::cti_op_tear_off_activation):
        (JSC::BytecodeInterpreter::cti_op_tear_off_arguments):
        (JSC::BytecodeInterpreter::cti_op_profile_will_call):
        (JSC::BytecodeInterpreter::cti_op_profile_did_call):
        (JSC::BytecodeInterpreter::cti_op_ret_scopeChain):
        (JSC::BytecodeInterpreter::cti_op_new_array):
        (JSC::BytecodeInterpreter::cti_op_resolve):
        (JSC::BytecodeInterpreter::cti_op_construct_JSConstruct):
        (JSC::BytecodeInterpreter::cti_op_construct_NotJSConstruct):
        (JSC::BytecodeInterpreter::cti_op_get_by_val):
        (JSC::BytecodeInterpreter::cti_op_resolve_func):
        (JSC::BytecodeInterpreter::cti_op_sub):
        (JSC::BytecodeInterpreter::cti_op_put_by_val):
        (JSC::BytecodeInterpreter::cti_op_put_by_val_array):
        (JSC::BytecodeInterpreter::cti_op_lesseq):
        (JSC::BytecodeInterpreter::cti_op_loop_if_true):
        (JSC::BytecodeInterpreter::cti_op_negate):
        (JSC::BytecodeInterpreter::cti_op_resolve_base):
        (JSC::BytecodeInterpreter::cti_op_resolve_skip):
        (JSC::BytecodeInterpreter::cti_op_resolve_global):
        (JSC::BytecodeInterpreter::cti_op_div):
        (JSC::BytecodeInterpreter::cti_op_pre_dec):
        (JSC::BytecodeInterpreter::cti_op_jless):
        (JSC::BytecodeInterpreter::cti_op_not):
        (JSC::BytecodeInterpreter::cti_op_jtrue):
        (JSC::BytecodeInterpreter::cti_op_post_inc):
        (JSC::BytecodeInterpreter::cti_op_eq):
        (JSC::BytecodeInterpreter::cti_op_lshift):
        (JSC::BytecodeInterpreter::cti_op_bitand):
        (JSC::BytecodeInterpreter::cti_op_rshift):
        (JSC::BytecodeInterpreter::cti_op_bitnot):
        (JSC::BytecodeInterpreter::cti_op_resolve_with_base):
        (JSC::BytecodeInterpreter::cti_op_new_func_exp):
        (JSC::BytecodeInterpreter::cti_op_mod):
        (JSC::BytecodeInterpreter::cti_op_less):
        (JSC::BytecodeInterpreter::cti_op_neq):
        (JSC::BytecodeInterpreter::cti_op_post_dec):
        (JSC::BytecodeInterpreter::cti_op_urshift):
        (JSC::BytecodeInterpreter::cti_op_bitxor):
        (JSC::BytecodeInterpreter::cti_op_new_regexp):
        (JSC::BytecodeInterpreter::cti_op_bitor):
        (JSC::BytecodeInterpreter::cti_op_call_eval):
        (JSC::BytecodeInterpreter::cti_op_throw):
        (JSC::BytecodeInterpreter::cti_op_get_pnames):
        (JSC::BytecodeInterpreter::cti_op_next_pname):
        (JSC::BytecodeInterpreter::cti_op_push_scope):
        (JSC::BytecodeInterpreter::cti_op_pop_scope):
        (JSC::BytecodeInterpreter::cti_op_typeof):
        (JSC::BytecodeInterpreter::cti_op_is_undefined):
        (JSC::BytecodeInterpreter::cti_op_is_boolean):
        (JSC::BytecodeInterpreter::cti_op_is_number):
        (JSC::BytecodeInterpreter::cti_op_is_string):
        (JSC::BytecodeInterpreter::cti_op_is_object):
        (JSC::BytecodeInterpreter::cti_op_is_function):
        (JSC::BytecodeInterpreter::cti_op_stricteq):
        (JSC::BytecodeInterpreter::cti_op_nstricteq):
        (JSC::BytecodeInterpreter::cti_op_to_jsnumber):
        (JSC::BytecodeInterpreter::cti_op_in):
        (JSC::BytecodeInterpreter::cti_op_push_new_scope):
        (JSC::BytecodeInterpreter::cti_op_jmp_scopes):
        (JSC::BytecodeInterpreter::cti_op_put_by_index):
        (JSC::BytecodeInterpreter::cti_op_switch_imm):
        (JSC::BytecodeInterpreter::cti_op_switch_char):
        (JSC::BytecodeInterpreter::cti_op_switch_string):
        (JSC::BytecodeInterpreter::cti_op_del_by_val):
        (JSC::BytecodeInterpreter::cti_op_put_getter):
        (JSC::BytecodeInterpreter::cti_op_put_setter):
        (JSC::BytecodeInterpreter::cti_op_new_error):
        (JSC::BytecodeInterpreter::cti_op_debug):
        (JSC::BytecodeInterpreter::cti_vm_throw):
        * VM/Machine.h:
        * VM/Register.h:
        * VM/SamplingTool.cpp:
        (JSC::SamplingTool::run):
        * VM/SamplingTool.h:
        (JSC::SamplingTool::SamplingTool):
        * bytecompiler/CodeGenerator.cpp:
        (JSC::CodeGenerator::generate):
        (JSC::CodeGenerator::CodeGenerator):
        (JSC::CodeGenerator::emitOpcode):
        * debugger/DebuggerCallFrame.cpp:
        (JSC::DebuggerCallFrame::evaluate):
        * jsc.cpp:
        (runWithScripts):
        * parser/Nodes.cpp:
        (JSC::ScopeNode::ScopeNode):
        * profiler/ProfileGenerator.cpp:
        (JSC::ProfileGenerator::addParentForConsoleStart):
        * runtime/ArrayPrototype.cpp:
        (JSC::arrayProtoFuncPop):
        (JSC::arrayProtoFuncPush):
        * runtime/Collector.cpp:
        (JSC::Heap::collect):
        * runtime/ExecState.h:
        (JSC::ExecState::interpreter):
        * runtime/FunctionPrototype.cpp:
        (JSC::functionProtoFuncApply):
        * runtime/Interpreter.cpp:
        (JSC::Interpreter::evaluate):
        * runtime/JSCell.h:
        * runtime/JSFunction.cpp:
        (JSC::JSFunction::call):
        (JSC::JSFunction::argumentsGetter):
        (JSC::JSFunction::callerGetter):
        (JSC::JSFunction::construct):
        * runtime/JSFunction.h:
        * runtime/JSGlobalData.cpp:
        (JSC::JSGlobalData::JSGlobalData):
        (JSC::JSGlobalData::~JSGlobalData):
        * runtime/JSGlobalData.h:
        * runtime/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::~JSGlobalObject):
        (JSC::JSGlobalObject::setTimeoutTime):
        (JSC::JSGlobalObject::startTimeoutCheck):
        (JSC::JSGlobalObject::stopTimeoutCheck):
        (JSC::JSGlobalObject::mark):
        * runtime/JSGlobalObjectFunctions.cpp:
        (JSC::globalFuncEval):
        * runtime/JSString.h:
        * runtime/RegExp.cpp:
        (JSC::RegExp::RegExp):

2008-11-15  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Sam Weinig.
        
        - Remove SymbolTable from FunctionBodyNode and move it to CodeBlock
        
        It's not needed for functions that have never been executed, so no
        need to waste the memory. Saves ~4M on membuster after 30 pages.

        * VM/CodeBlock.h:
        * VM/Machine.cpp:
        (JSC::Machine::retrieveArguments):
        * parser/Nodes.cpp:
        (JSC::EvalNode::generateCode):
        (JSC::FunctionBodyNode::generateCode):
        * parser/Nodes.h:
        * runtime/JSActivation.h:
        (JSC::JSActivation::JSActivationData::JSActivationData):

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

        Reviewed by Darin Adler.

        Bug 22259: Make all opcodes use eax as their final result register
        <https://bugs.webkit.org/show_bug.cgi?id=22259>

        Change one case of op_add (and the corresponding slow case) to use eax
        rather than edx. Also, change the order in which the two results of
        resolve_func and resolve_base are emitted so that the retrieved value is
        put last into eax.

        This gives no performance change on SunSpider or the V8 benchmark suite
        when run in either harness.

        * VM/CTI.cpp:
        (JSC::CTI::privateCompileMainPass):
        (JSC::CTI::privateCompileSlowCases):

2008-11-14  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Geoff Garen.

        Geoff has this wacky notion that emitGetArg and emitPutArg should be related to
        doing the same thing.  Crazy.
        
        Rename the methods for accessing virtual registers to say 'VirtualRegister' in the
        name, and those for setting up the arguments for CTI methods to contain 'CTIArg'.

        * VM/CTI.cpp:
        (JSC::CTI::emitGetVirtualRegister):
        (JSC::CTI::emitGetVirtualRegisters):
        (JSC::CTI::emitPutCTIArgFromVirtualRegister):
        (JSC::CTI::emitPutCTIArg):
        (JSC::CTI::emitGetCTIArg):
        (JSC::CTI::emitPutCTIArgConstant):
        (JSC::CTI::emitPutVirtualRegister):
        (JSC::CTI::compileOpCallSetupArgs):
        (JSC::CTI::compileOpCallEvalSetupArgs):
        (JSC::CTI::compileOpConstructSetupArgs):
        (JSC::CTI::compileOpCall):
        (JSC::CTI::compileOpStrictEq):
        (JSC::CTI::putDoubleResultToJSNumberCellOrJSImmediate):
        (JSC::CTI::compileBinaryArithOp):
        (JSC::CTI::compileBinaryArithOpSlowCase):
        (JSC::CTI::privateCompileMainPass):
        (JSC::CTI::privateCompileSlowCases):
        (JSC::CTI::privateCompileCTIMachineTrampolines):
        * VM/CTI.h:

2008-11-14  Greg Bolsinga  <bolsinga@apple.com>

        Reviewed by Antti Koivisto

        Fix potential build break by adding StdLibExtras.h
        
        * GNUmakefile.am:
        * JavaScriptCore.vcproj/WTF/WTF.vcproj:

2008-11-14  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Geoff Garen.

        Generate less code for the slow cases of op_call and op_construct.
        https://bugs.webkit.org/show_bug.cgi?id=22272

        1% progression on v8 tests.

        * VM/CTI.cpp:
        (JSC::CTI::emitRetrieveArg):
        (JSC::CTI::emitNakedCall):
        (JSC::CTI::compileOpCallInitializeCallFrame):
        (JSC::CTI::compileOpCall):
        (JSC::CTI::privateCompileSlowCases):
        (JSC::CTI::privateCompileCTIMachineTrampolines):
        * VM/CTI.h:
        * VM/CodeBlock.h:
        (JSC::getCallLinkInfoReturnLocation):
        (JSC::CodeBlock::getCallLinkInfo):
        * VM/Machine.cpp:
        (JSC::Machine::Machine):
        (JSC::Machine::cti_vm_dontLazyLinkCall):
        (JSC::Machine::cti_vm_lazyLinkCall):
        * VM/Machine.h:

2008-11-14  Greg Bolsinga  <bolsinga@apple.com>

        Reviewed by Darin Alder.

        https://bugs.webkit.org/show_bug.cgi?id=21810
        Remove use of static C++ objects that are destroyed at exit time (destructors)

        Create DEFINE_STATIC_LOCAL macro. Change static local objects to leak to avoid 
        exit-time destructor. Update code that was changed to fix this issue that ran 
        into a gcc bug (<rdar://problem/6354696> Codegen issue with C++ static reference 
        in gcc build 5465). Also typdefs for template types needed to be added in some 
        cases so the type could make it through the macro successfully.

        Basically code of the form:
        static T m;
        becomes:
        DEFINE_STATIC_LOCAL(T, m, ());

        Also any code of the form:
        static T& m = *new T;
        also becomes:
        DEFINE_STATIC_LOCAL(T, m, ());

        * JavaScriptCore.xcodeproj/project.pbxproj:
        * wtf/MainThread.cpp:
        (WTF::mainThreadFunctionQueueMutex):
        (WTF::functionQueue):
        * wtf/StdLibExtras.h: Added. Add DEFINE_STATIC_LOCAL macro
        * wtf/ThreadingPthreads.cpp:
        (WTF::threadMapMutex):
        (WTF::threadMap):
        (WTF::identifierByPthreadHandle):

2008-11-13  Sam Weinig  <sam@webkit.org>

        Reviewed by Darin Adler

        Fix for https://bugs.webkit.org/show_bug.cgi?id=22269
        Reduce PropertyMap usage

        From observation of StructureID statistics, it became clear that many
        StructureID's were not being used as StructureIDs themselves, but rather
        only being necessary as links in the transition chain.  Acknowledging this
        and that PropertyMaps stored in StructureIDs can be treated as caches, that
        is that they can be reconstructed on demand, it became clear that we could
        reduce the memory consumption of StructureIDs by only keeping PropertyMaps
        for the StructureIDs that need them the most.

        The specific strategy used to reduce the number of StructureIDs with
        PropertyMaps is to take the previous StructureIDs PropertyMap when initially
        transitioning (addPropertyTransition) from it and clearing out the pointer 
        in the process.  The next time we need to do the same transition, for instance
        repeated calls to the same constructor, we use the new addPropertyTransitionToExistingStructure
        first, which allows us not to need the PropertyMap to determine if the property
        exists already, since a transition to that property would require it not already
        be present in the StructureID.  Should there be no transition, the PropertyMap
        can be constructed on demand (via materializePropertyMap) to determine if the put is a 
        replace or a transition to a new StructureID.

        Reduces memory use on Membuster head test (30 pages open) by ~15MB.

        * JavaScriptCore.exp:
        * runtime/JSObject.h:
        (JSC::JSObject::putDirect): First use addPropertyTransitionToExistingStructure
        so that we can avoid building the PropertyMap on subsequent similar object
        creations.
        * runtime/PropertyMapHashTable.h:
        (JSC::PropertyMapEntry::PropertyMapEntry): Add version of constructor which takes
        all values to be used when lazily building the PropertyMap. 
        * runtime/StructureID.cpp:
        (JSC::StructureID::dumpStatistics): Add statistics on the number of StructureIDs
        with PropertyMaps.
        (JSC::StructureID::StructureID): Rename m_cachedTransistionOffset to m_offset
        (JSC::isPowerOf2):
        (JSC::nextPowerOf2):
        (JSC::sizeForKeyCount): Returns the expected size of a PropertyMap for a key count.
        (JSC::StructureID::materializePropertyMap): Builds the PropertyMap out of its previous pointer chain.
        (JSC::StructureID::addPropertyTransitionToExistingStructure): Only transitions if there is a
        an existing transition.
        (JSC::StructureID::addPropertyTransition): Instead of always copying the ProperyMap, try and take
        it from it previous pointer.
        (JSC::StructureID::removePropertyTransition): Simplify by calling toDictionaryTransition() to do
        transition work.
        (JSC::StructureID::changePrototypeTransition): Build the PropertyMap if necessary before transitioning
        because once you have transitioned, you will not be able to reconstruct it afterwards as there is no
        previous pointer, pinning the ProperyMap as well.
        (JSC::StructureID::getterSetterTransition): Ditto.
        (JSC::StructureID::toDictionaryTransition): Pin the PropertyMap so that it is not destroyed on further transitions.
        (JSC::StructureID::fromDictionaryTransition): We can only transition back from a dictionary transition if there
        are no deleted offsets.
        (JSC::StructureID::addPropertyWithoutTransition): Build PropertyMap on demands and pin.
        (JSC::StructureID::removePropertyWithoutTransition): Ditto.
        (JSC::StructureID::get): Build on demand.
        (JSC::StructureID::createPropertyMapHashTable): Add version of create that takes a size
        for on demand building.
        (JSC::StructureID::expandPropertyMapHashTable):
        (JSC::StructureID::rehashPropertyMapHashTable):
        (JSC::StructureID::getEnumerablePropertyNamesInternal): Build PropertyMap on demand.
        * runtime/StructureID.h:
        (JSC::StructureID::propertyStorageSize): Account for StructureIDs without PropertyMaps.
        (JSC::StructureID::isEmpty): Ditto.
        (JSC::StructureID::materializePropertyMapIfNecessary):
        (JSC::StructureID::get): Build PropertyMap on demand

2008-11-14  Csaba Osztrogonac  <oszi@inf.u-szeged.hu>

        Reviewed by Simon Hausmann.

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

        JavaScriptCore build with -O3 flag instead of -O2 (gcc).
        2.02% speedup on SunSpider (Qt-port on Linux)
        1.10% speedup on V8 (Qt-port on Linux)
        3.45% speedup on WindScorpion (Qt-port on Linux)

        * JavaScriptCore.pri:

2008-11-14  Kristian Amlie  <kristian.amlie@trolltech.com>

        Reviewed by Darin Adler.

        Compile fix for RVCT.

        In reality, it is two fixes:

        1. Remove typename. I believe typename can only be used when the named
        type depends on the template parameters, which it doesn't in this
        case, so I think this is more correct.
        2. Replace ::iterator scope with specialized typedef. This is to work
        around a bug in RVCT.

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

        * wtf/ListHashSet.h:
        (WTF::::find):

2008-11-14  Kristian Amlie  <kristian.amlie@trolltech.com>

        Reviewed by Darin Adler.

        Compile fix for WINSCW.

        This fix doesn't protect against implicit conversions from bool to
        integers, but most likely that will be caught on another platform.

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

        * wtf/PassRefPtr.h:
        (WTF::PassRefPtr::operator bool):
        * wtf/RefPtr.h:
        (WTF::RefPtr::operator bool):

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

        Reviewed by Darin Adler.

        Bug 22245: Move wtf/dtoa.h into the WTF namespace
        <https://bugs.webkit.org/show_bug.cgi?id=22245>

        Move wtf/dtoa.h into the WTF namespace from the JSC namespace. This
        introduces some ambiguities in name lookups, so I changed all uses of
        the functions in wtf/dtoa.h to explicitly state the namespace.

        * JavaScriptCore.exp:
        * parser/Lexer.cpp:
        (JSC::Lexer::lex):
        * runtime/InitializeThreading.cpp:
        * runtime/JSGlobalObjectFunctions.cpp:
        (JSC::parseInt):
        * runtime/NumberPrototype.cpp:
        (JSC::integerPartNoExp):
        (JSC::numberProtoFuncToExponential):
        * runtime/UString.cpp:
        (JSC::concatenate):
        (JSC::UString::from):
        (JSC::UString::toDouble):
        * wtf/dtoa.cpp:
        * wtf/dtoa.h:

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

        Reviewed by Maciej Stachowiak.

        Bug 22257: Enable redundant read optimizations for results generated by compileBinaryArithOp()
        <https://bugs.webkit.org/show_bug.cgi?id=22257>

        This shows no change in performance on either SunSpider or the V8
        benchmark suite, but it removes an ugly special case and allows for
        future optimizations to be implemented in a cleaner fashion.

        This patch was essentially given to me by Gavin Barraclough upon my
        request, but I did regression and performance testing so that he could
        work on something else.

        * VM/CTI.cpp:
        (JSC::CTI::putDoubleResultToJSNumberCellOrJSImmediate): Move the final
        result to eax if it is not already there.
        (JSC::CTI::compileBinaryArithOp): Remove the killing of the final result
        register that disables the optimization.

2008-11-13  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Roben.

        Add a Scons-based build system for building
        the Chromium-Mac build of JavaScriptCore.
        https://bugs.webkit.org/show_bug.cgi?id=21991

        * JavaScriptCore.scons: Added.
        * SConstruct: Added.

2008-11-13  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Roben.
        
        Add PLATFORM(CHROMIUM) to the "we don't use cairo" blacklist
        until https://bugs.webkit.org/show_bug.cgi?id=22250 is fixed.

        * wtf/Platform.h:

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

        Reviewed by Sam Weinig.

        In r38375 the 'jsc' shell was changed to improve teardown on quit. The
        main() function in jsc.cpp uses Structured Exception Handling, so Visual
        C++ emits a warning when destructors are used.
        
        In order to speculatively fix the Windows build, this patch changes that
        code to use explicit pointer manipulation and locking rather than smart
        pointers and RAII.

        * jsc.cpp:
        (main):

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

        Reviewed by Darin Adler.

        Bug 22246: Get arguments for opcodes together to eliminate more redundant memory reads
        <https://bugs.webkit.org/show_bug.cgi?id=22246>

        It is common for opcodes to read their first operand into eax and their
        second operand into edx. If the value intended for the second operand is
        in eax, we should first move eax to the register for the second operand
        and then read the first operand into eax.

        This is a 0.5% speedup on SunSpider and a 2.0% speedup on the V8
        benchmark suite when measured using the V8 harness.

        * VM/CTI.cpp:
        (JSC::CTI::emitGetArgs):
        (JSC::CTI::compileOpStrictEq):
        (JSC::CTI::compileBinaryArithOp):
        (JSC::CTI::privateCompileMainPass):
        (JSC::CTI::privateCompileSlowCases):
        * VM/CTI.h:

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

        Reviewed by Darin Adler.

        Bug 22238: Avoid unnecessary reads of temporaries when the target machine register is not eax
        <https://bugs.webkit.org/show_bug.cgi?id=22238>

        Enable the optimization of not reading a value back from memory that we
        just wrote when the target machine register is not eax. In order to do
        this, the code generation for op_put_global_var must be changed to
        read its argument into a register before overwriting eax.

        This is a 0.5% speedup on SunSpider and shows no change on the V8
        benchmark suite when run in either harness.

        * VM/CTI.cpp:
        (JSC::CTI::emitGetArg):
        (JSC::CTI::privateCompileMainPass):

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

        Reviewed by Alexey Proskuryakov.

        Perform teardown in the 'jsc' shell in order to suppress annoying and
        misleading leak messages. There is still a lone JSC::Node leaking when
        quit() is called, but hopefully that can be fixed as well.

        * jsc.cpp:
        (functionQuit):
        (main):

2008-11-13  Mike Pinkerton  <pinkerton@chromium.org>

        Reviewed by Sam Weinig.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=22087
        Need correct platform defines for Mac Chromium

        Set the appropriate platform defines for Mac Chromium, which is
        similar to PLATFORM(MAC), but isn't.

        * wtf/Platform.h:

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

        Reviewed by Cameron Zwarich.
        
        - remove immediate checks from native codegen for known non-immediate cases like "this"
        
        ~.5% speedup on v8 benchmarks
        
        In the future we can extend this model to remove all sorts of
        typechecks based on local type info or type inference.
        
        I also added an assertion to verify that all slow cases linked as
        many slow case jumps as the corresponding fast case generated, and
        fixed the pre-existing cases where this was not true.
        
        * VM/CTI.cpp:
        (JSC::CTI::emitJumpSlowCaseIfNotJSCell):
        (JSC::CTI::linkSlowCaseIfNotJSCell):
        (JSC::CTI::compileBinaryArithOp):
        (JSC::CTI::compileBinaryArithOpSlowCase):
        (JSC::CTI::privateCompileMainPass):
        (JSC::CTI::privateCompileSlowCases):
        * VM/CTI.h:
        * VM/CodeBlock.h:
        (JSC::CodeBlock::isKnownNotImmediate):

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

        Reviewed by Maciej Stachowiak.

        Bug 21943: Avoid needless reads of temporary values in CTI code
        <https://bugs.webkit.org/show_bug.cgi?id=21943>

        If an opcode needs to load a virtual register and a previous opcode left
        the contents of that virtual register in a machine register, use the
        value in the machine register rather than getting it from memory.

        In order to perform this optimization, it is necessary to know the
        jump tagets in the CodeBlock. For temporaries, the only problematic
        jump targets are binary logical operators and the ternary conditional
        operator. However, if this optimization were to be extended to local 
        variable registers as well, other jump targets would need to be
        included, like switch statement cases and the beginnings of catch
        blocks.

        This optimization also requires that the fast case and the slow case
        of an opcode use emitPutResult() on the same register, which was chosen
        to be eax, as that is the register into which we read the first operand
        of opcodes. In order to make this the case, we needed to add some mov
        instructions to the slow cases of some instructions.

        This optimizaton is not applied whenever compileBinaryArithOp() is used
        to compile an opcode, because different machine registers may be used to
        store the final result. It seems possible to rewrite the code generation
        in compileBinaryArithOp() to allow for this optimization.

        This optimization is also not applied when generating slow cases,
        because some fast cases overwrite the value of eax before jumping to the
        slow case. In the future, it may be possible to apply this optimization
        to slow cases as well, but it did not seem to be a speedup when testing
        an early version of this patch.

        This is a 1.0% speedup on SunSpider and a 6.3% speedup on the V8
        benchmark suite.

        * VM/CTI.cpp:
        (JSC::CTI::killLastResultRegister):
        (JSC::CTI::emitGetArg):
        (JSC::CTI::emitGetPutArg):
        (JSC::CTI::emitGetCTIParam):
        (JSC::CTI::emitGetFromCallFrameHeader):
        (JSC::CTI::emitPutResult):
        (JSC::CTI::emitCTICall):
        (JSC::CTI::CTI):
        (JSC::CTI::compileOpCall):
        (JSC::CTI::compileOpStrictEq):
        (JSC::CTI::emitSlowScriptCheck):
        (JSC::CTI::compileBinaryArithOp):
        (JSC::CTI::privateCompileMainPass):
        (JSC::CTI::privateCompileSlowCases):
        (JSC::CTI::privateCompileGetByIdProto):
        (JSC::CTI::privateCompilePatchGetArrayLength):
        * VM/CTI.h:
        * VM/CodeBlock.h:
        (JSC::CodeBlock::isTemporaryRegisterIndex):
        * bytecompiler/CodeGenerator.cpp:
        (JSC::CodeGenerator::emitLabel):

2008-11-12  Alp Toker  <alp@nuanti.com>

        autotools build system fix-up only. Add FloatQuad.h to the source
        lists and sort them.

        * GNUmakefile.am:

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

        Reviewed by Sam Weinig.
        
        Fixed https://bugs.webkit.org/show_bug.cgi?id=22192
        +37 failures in fast/profiler
        
        along with Darin's review comments in
        https://bugs.webkit.org/show_bug.cgi?id=22174
        Simplified op_call by nixing its responsibility for moving the value of
        "this" into the first argument slot

        * VM/Machine.cpp:
        (JSC::returnToThrowTrampoline):
        (JSC::throwStackOverflowError):
        (JSC::Machine::cti_register_file_check):
        (JSC::Machine::cti_op_call_arityCheck):
        (JSC::Machine::cti_vm_throw): Moved the throw logic into a function, since
        functions are better than macros.

        * bytecompiler/CodeGenerator.cpp:
        (JSC::CodeGenerator::emitCall):
        (JSC::CodeGenerator::emitConstruct): Ensure that the function register
        is preserved if profiling is enabled, since the profiler uses that
        register.

        * runtime/JSGlobalData.h: Renamed throwReturnAddress to exceptionLocation,
        because I had a hard time understanding what "throwReturnAddress" meant.

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

        Reviewed by Sam Weinig.

        Roll in r38322, now that test failures have been fixed.

        * VM/CTI.cpp:
        (JSC::CTI::compileOpCallSetupArgs):
        (JSC::CTI::compileOpCallEvalSetupArgs):
        (JSC::CTI::compileOpConstructSetupArgs):
        (JSC::CTI::compileOpCall):
        (JSC::CTI::privateCompileMainPass):
        (JSC::CTI::privateCompileSlowCases):
        * VM/CTI.h:
        * VM/CodeBlock.cpp:
        (JSC::CodeBlock::dump):
        * VM/Machine.cpp:
        (JSC::Machine::callEval):
        (JSC::Machine::dumpCallFrame):
        (JSC::Machine::dumpRegisters):
        (JSC::Machine::execute):
        (JSC::Machine::privateExecute):
        (JSC::Machine::cti_register_file_check):
        (JSC::Machine::cti_op_call_arityCheck):
        (JSC::Machine::cti_op_call_NotJSFunction):
        (JSC::Machine::cti_op_construct_JSConstruct):
        (JSC::Machine::cti_op_construct_NotJSConstruct):
        (JSC::Machine::cti_op_call_eval):
        (JSC::Machine::cti_vm_throw):
        * VM/Machine.h:
        * bytecompiler/CodeGenerator.cpp:
        (JSC::CodeGenerator::emitCall):
        (JSC::CodeGenerator::emitCallEval):
        (JSC::CodeGenerator::emitConstruct):
        * bytecompiler/CodeGenerator.h:
        * parser/Nodes.cpp:
        (JSC::EvalFunctionCallNode::emitCode):
        (JSC::FunctionCallValueNode::emitCode):
        (JSC::FunctionCallResolveNode::emitCode):
        (JSC::FunctionCallBracketNode::emitCode):
        (JSC::FunctionCallDotNode::emitCode):
        * parser/Nodes.h:
        (JSC::ScopeNode::neededConstants):

2008-11-12  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Cameron Zwarich.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=22201
        Integer conversion in array.length was safe signed values,
        but the length is unsigned.

        * VM/CTI.cpp:
        (JSC::CTI::privateCompilePatchGetArrayLength):

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

        Rubber-stamped by Mark Rowe.

        Roll out r38322 due to test failures on the bots.

        * VM/CTI.cpp:
        (JSC::CTI::compileOpCallSetupArgs):
        (JSC::CTI::compileOpCall):
        (JSC::CTI::privateCompileMainPass):
        (JSC::CTI::privateCompileSlowCases):
        * VM/CTI.h:
        * VM/CodeBlock.cpp:
        (JSC::CodeBlock::dump):
        * VM/Machine.cpp:
        (JSC::Machine::callEval):
        (JSC::Machine::dumpCallFrame):
        (JSC::Machine::dumpRegisters):
        (JSC::Machine::execute):
        (JSC::Machine::privateExecute):
        (JSC::Machine::throwStackOverflowPreviousFrame):
        (JSC::Machine::cti_register_file_check):
        (JSC::Machine::cti_op_call_arityCheck):
        (JSC::Machine::cti_op_call_NotJSFunction):
        (JSC::Machine::cti_op_construct_JSConstruct):
        (JSC::Machine::cti_op_construct_NotJSConstruct):
        (JSC::Machine::cti_op_call_eval):
        (JSC::Machine::cti_vm_throw):
        * VM/Machine.h:
        * bytecompiler/CodeGenerator.cpp:
        (JSC::CodeGenerator::emitCall):
        (JSC::CodeGenerator::emitCallEval):
        (JSC::CodeGenerator::emitConstruct):
        * bytecompiler/CodeGenerator.h:
        * parser/Nodes.cpp:
        (JSC::EvalFunctionCallNode::emitCode):
        (JSC::FunctionCallValueNode::emitCode):
        (JSC::FunctionCallResolveNode::emitCode):
        (JSC::FunctionCallBracketNode::emitCode):
        (JSC::FunctionCallDotNode::emitCode):
        * parser/Nodes.h:
        (JSC::ScopeNode::neededConstants):

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

        Reviewed by Darin Adler.
        
        Fixed https://bugs.webkit.org/show_bug.cgi?id=22174
        Simplified op_call by nixing its responsibility for moving the value of
        "this" into the first argument slot.

        Instead, the caller emits an explicit load or mov instruction, or relies
        on implicit knowledge that "this" is already in the first argument slot.
        As a result, two operands to op_call are gone: firstArg and thisVal.
        
        SunSpider and v8 tests show no change in bytecode or CTI.

        * VM/CTI.cpp:
        (JSC::CTI::compileOpCallSetupArgs):
        (JSC::CTI::compileOpCallEvalSetupArgs):
        (JSC::CTI::compileOpConstructSetupArgs): Split apart these three versions
        of setting up arguments to op_call, because they're more different than
        they are the same -- even more so with this patch.

        (JSC::CTI::compileOpCall): Updated for the fact that op_construct doesn't
        match op_call anymore.

        (JSC::CTI::privateCompileMainPass):
        (JSC::CTI::privateCompileSlowCases): Merged a few call cases. Updated
        for changes mentioned above.

        * VM/CTI.h:

        * VM/CodeBlock.cpp:
        (JSC::CodeBlock::dump): Updated for new bytecode format of call / construct.

        * VM/Machine.cpp:
        (JSC::Machine::callEval): Updated for new bytecode format of call / construct.

        (JSC::Machine::dumpCallFrame):
        (JSC::Machine::dumpRegisters): Simplified these debugging functions, 
        taking advantage of the new call frame layout.

        (JSC::Machine::execute): Fixed up the eval version of execute to be
        friendlier to calls in the new format.

        (JSC::Machine::privateExecute): Implemented the new call format in
        bytecode.

        (JSC::Machine::cti_op_call_NotJSFunction):
        (JSC::Machine::cti_op_construct_JSConstruct):
        (JSC::Machine::cti_op_construct_NotJSConstruct):
        (JSC::Machine::cti_op_call_eval): Updated CTI helpers to match the new
        call format.
        
        Fixed a latent bug in stack overflow checking that is now hit because
        the register layout has changed a bit -- namely: when throwing a stack
        overflow exception inside an op_call helper, we need to account for the
        fact that the current call frame is only half-constructed, and use the
        parent call frame instead.

        * VM/Machine.h:

        * bytecompiler/CodeGenerator.cpp:
        (JSC::CodeGenerator::emitCall):
        (JSC::CodeGenerator::emitCallEval):
        (JSC::CodeGenerator::emitConstruct):
        * bytecompiler/CodeGenerator.h: Updated codegen to match the new call
        format.

        * parser/Nodes.cpp:
        (JSC::EvalFunctionCallNode::emitCode):
        (JSC::FunctionCallValueNode::emitCode):
        (JSC::FunctionCallResolveNode::emitCode):
        (JSC::FunctionCallBracketNode::emitCode):
        (JSC::FunctionCallDotNode::emitCode):
        * parser/Nodes.h:
        (JSC::ScopeNode::neededConstants): ditto

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

        Reviewed by Geoff Garen.

        Remove an unused forwarding header for a file that no longer exists.

        * ForwardingHeaders/JavaScriptCore/JSLock.h: Removed.

2008-11-11  Mark Rowe  <mrowe@apple.com>

        Fix broken dependencies building JavaScriptCore on a freezing cold cat, caused
        by failure to update all instances of "kjs" to their new locations.

        * JavaScriptCore.xcodeproj/project.pbxproj:

2008-11-11  Alexey Proskuryakov  <ap@webkit.org>

        Rubber-stamped by Adam Roben.

        * wtf/AVLTree.h: (WTF::AVLTree::Iterator::start_iter):
        Fix indentation a little more.

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

        Rubber-stamped by Sam Weinig.

        Clean up EvalCodeCache to match our coding style a bit more.

        * VM/EvalCodeCache.h:
        (JSC::EvalCodeCache::get):

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

        Rubber-stamped by Sam Weinig.

        Bug 22179: Move EvalCodeCache from CodeBlock.h into its own file
        <https://bugs.webkit.org/show_bug.cgi?id=22179>

        * GNUmakefile.am:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * VM/CodeBlock.h:
        * VM/EvalCodeCache.h: Copied from VM/CodeBlock.h.
        * VM/Machine.cpp:

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

        Reviewed by Sam Weinig.

        Remove the 'm_' prefix from the fields of the SwitchRecord struct.

        * VM/CTI.cpp:
        (JSC::CTI::privateCompile):
        * VM/CTI.h:
        (JSC::SwitchRecord):
        (JSC::SwitchRecord::SwitchRecord):

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

        Rubber-stamped by Sam Weinig.

        Make asInteger() a static function so that it has internal linkage.

        * VM/CTI.cpp:
        (JSC::asInteger):

2008-11-11  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Mark Rowe.
        
        - shrink CodeBlock and AST related Vectors to exact fit (5-10M savings on membuster test)
        
        No perf regression combined with the last patch (each seems like a small regression individually)

        * bytecompiler/CodeGenerator.cpp:
        (JSC::CodeGenerator::generate):
        * parser/Nodes.h:
        (JSC::SourceElements::releaseContentsIntoVector):
        * wtf/Vector.h:
        (WTF::Vector::shrinkToFit):

2008-11-11  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Mark Rowe.
        
        - remove inline capacity from declaration stacks (15M savings on membuster test)

        No perf regression on SunSpider or V8 test combined with other upcoming memory improvement patch.
        
        * JavaScriptCore.exp:
        * parser/Nodes.h:

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

        Reviewed by Oliver Hunt.

        While r38286 removed the need for the m_callFrame member variable of
        CTI, it should be also be removed.

        * VM/CTI.h:

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

        Reviewed by Oliver Hunt.

        Make CTI::asInteger() a non-member function, since it needs no access to
        any of CTI's member variables.

        * VM/CTI.cpp:
        (JSC::asInteger):
        * VM/CTI.h:

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

        Reviewed by Maciej Stachowiak.

        Use 'value' instead of 'js' in CTI as a name for JSValue* to match our
        usual convention elsewhere.

        * VM/CTI.cpp:
        (JSC::CTI::emitGetArg):
        (JSC::CTI::emitGetPutArg):
        (JSC::CTI::getConstantImmediateNumericArg):
        (JSC::CTI::printOpcodeOperandTypes):

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

        Reviewed by Maciej Stachowiak.

        Make CTI::getConstant() a member function of CodeBlock instead.

        * VM/CTI.cpp:
        (JSC::CTI::emitGetArg):
        (JSC::CTI::emitGetPutArg):
        (JSC::CTI::getConstantImmediateNumericArg):
        (JSC::CTI::printOpcodeOperandTypes):
        (JSC::CTI::privateCompileMainPass):
        * VM/CTI.h:
        * VM/CodeBlock.h:
        (JSC::CodeBlock::getConstant):

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

        Reviewed by Sam Weinig.

        Rename CodeBlock::isConstant() to isConstantRegisterIndex().

        * VM/CTI.cpp:
        (JSC::CTI::emitGetArg):
        (JSC::CTI::emitGetPutArg):
        (JSC::CTI::getConstantImmediateNumericArg):
        (JSC::CTI::printOpcodeOperandTypes):
        (JSC::CTI::privateCompileMainPass):
        * VM/CodeBlock.h:
        (JSC::CodeBlock::isConstantRegisterIndex):
        * bytecompiler/CodeGenerator.cpp:
        (JSC::CodeGenerator::emitEqualityOp):

2008-11-10  Gavin Barraclough  <barraclough@apple.com>

        Build fix for non-CTI builds.

        * VM/Machine.cpp:
        (JSC::Machine::initialize):

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

        Reviewed by Sam Weinig.

        Remove the unused labels member variable of CodeBlock.

        * VM/CodeBlock.h:
        * VM/LabelID.h:
        (JSC::LabelID::setLocation):

2008-11-10  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Cameron Zwarich.

        Batch compile the set of static trampolines at the point Machine is constructed, using a single allocation.
        Refactor out m_callFrame from CTI, since this is only needed to access the global data (instead store a
        pointer to the global data directly, since this is available at the point the Machine is constructed).
        Add a method to align the code buffer, to allow JIT generation for multiple trampolines in one block.

        * VM/CTI.cpp:
        (JSC::CTI::getConstant):
        (JSC::CTI::emitGetArg):
        (JSC::CTI::emitGetPutArg):
        (JSC::CTI::getConstantImmediateNumericArg):
        (JSC::CTI::printOpcodeOperandTypes):
        (JSC::CTI::CTI):
        (JSC::CTI::compileBinaryArithOp):
        (JSC::CTI::privateCompileMainPass):
        (JSC::CTI::privateCompileGetByIdProto):
        (JSC::CTI::privateCompileGetByIdChain):
        (JSC::CTI::privateCompileCTIMachineTrampolines):
        (JSC::CTI::freeCTIMachineTrampolines):
        * VM/CTI.h:
        (JSC::CTI::compile):
        (JSC::CTI::compileGetByIdSelf):
        (JSC::CTI::compileGetByIdProto):
        (JSC::CTI::compileGetByIdChain):
        (JSC::CTI::compilePutByIdReplace):
        (JSC::CTI::compilePutByIdTransition):
        (JSC::CTI::compileCTIMachineTrampolines):
        (JSC::CTI::compilePatchGetArrayLength):
        * VM/Machine.cpp:
        (JSC::Machine::initialize):
        (JSC::Machine::~Machine):
        (JSC::Machine::execute):
        (JSC::Machine::tryCTICachePutByID):
        (JSC::Machine::tryCTICacheGetByID):
        (JSC::Machine::cti_op_call_JSFunction):
        (JSC::Machine::cti_vm_lazyLinkCall):
        * VM/Machine.h:
        * masm/X86Assembler.h:
        (JSC::JITCodeBuffer::isAligned):
        (JSC::X86Assembler::):
        (JSC::X86Assembler::align):
        * runtime/JSGlobalData.cpp:
        (JSC::JSGlobalData::JSGlobalData):

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

        Reviewed by Antti Koivisto.
        
        - Make Vector::clear() release the Vector's memory (1MB savings on membuster)
        https://bugs.webkit.org/show_bug.cgi?id=22170

        * wtf/Vector.h:
        (WTF::VectorBufferBase::deallocateBuffer): Set capacity to 0 as
        well as size, otherwise shrinking capacity to 0 can fail to reset
        the capacity and thus cause a future crash.
        (WTF::Vector::~Vector): Shrink size not capacity; we only need
        to call destructors, the buffer will be freed anyway.
        (WTF::Vector::clear): Change this to shrinkCapacity(0), not just shrink(0).
        (WTF::::shrinkCapacity): Use shrink() instead of resize() for case where
        the size is greater than the new capacity, to work with types that have no
        default constructor.

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

        Reviewed by Maciej Stachowiak.

        Split multiple definitions into separate lines.

        * VM/CTI.cpp:
        (JSC::CTI::compileBinaryArithOp):

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

        Reviewed by Geoff Garen.

        Bug 22162: Remove cachedValueGetter from the JavaScriptCore API implementation
        <https://bugs.webkit.org/show_bug.cgi?id=22162>

        There is no more need for the cachedValueGetter hack now that we have
        PropertySlot::setValue(), so we should remove it.

        * API/JSCallbackObject.h:
        * API/JSCallbackObjectFunctions.h:
        (JSC::::getOwnPropertySlot):

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

        Reviewed by Darin Adler.

        Bug 22152: Remove asObject() call from JSCallbackObject::getOwnPropertySlot()
        <https://bugs.webkit.org/show_bug.cgi?id=22152>

        With the recent change to adopt asType() style cast functions with
        assertions instead of static_casts in many places, the assertion for
        the asObject() call in JSCallbackObject::getOwnPropertySlot() has been
        failing when using any nontrivial client of the JavaScriptCore API.
        The cast isn't even necessary to call slot.setCustom(), so it should
        be removed.

        * API/JSCallbackObjectFunctions.h:
        (JSC::JSCallbackObject::getOwnPropertySlot):

2008-11-10  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Adam Roben.

        A few coding style fixes for AVLTree.

        * wtf/AVLTree.h: Moved to WTF namespace, Removed "KJS_" from include guards.
        (WTF::AVLTree::Iterator::start_iter): Fixed indentation

        * runtime/JSArray.cpp: Added "using namepace WTF".

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

        Not reviewed.

        Speculatively fix the non-AllInOne build.

        * runtime/NativeErrorConstructor.cpp:

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

        Reviewed by Tim Hatcher.

        - https://bugs.webkit.org/show_bug.cgi?id=22149
          remove unused code from the parser

        * AllInOneFile.cpp: Removed nodes2string.cpp.
        * GNUmakefile.am: Ditto.
        * JavaScriptCore.exp: Ditto.
        * JavaScriptCore.pri: Ditto.
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Ditto.
        * JavaScriptCore.xcodeproj/project.pbxproj: Ditto.
        * JavaScriptCoreSources.bkl: Ditto.

        * VM/CodeBlock.h: Added include.

        * VM/Machine.cpp: (JSC::Machine::execute): Use the types from
        DeclarationStacks as DeclarationStacks:: rather than Node:: since
        "Node" really has little to do with it.
        * bytecompiler/CodeGenerator.cpp:
        (JSC::CodeGenerator::CodeGenerator): Ditto.

        * jsc.cpp:
        (Options::Options): Removed prettyPrint option.
        (runWithScripts): Ditto.
        (printUsageStatement): Ditto.
        (parseArguments): Ditto.
        (jscmain): Ditto.

        * parser/Grammar.y: Removed use of obsolete ImmediateNumberNode.

        * parser/Nodes.cpp:
        (JSC::ThrowableExpressionData::emitThrowError): Use inline functions
        instead of direct member access for ThrowableExpressionData values.
        (JSC::BracketAccessorNode::emitCode): Ditto.
        (JSC::DotAccessorNode::emitCode): Ditto.
        (JSC::NewExprNode::emitCode): Ditto.
        (JSC::EvalFunctionCallNode::emitCode): Ditto.
        (JSC::FunctionCallValueNode::emitCode): Ditto.
        (JSC::FunctionCallResolveNode::emitCode): Ditto.
        (JSC::FunctionCallBracketNode::emitCode): Ditto.
        (JSC::FunctionCallDotNode::emitCode): Ditto.
        (JSC::PostfixResolveNode::emitCode): Ditto.
        (JSC::PostfixBracketNode::emitCode): Ditto.
        (JSC::PostfixDotNode::emitCode): Ditto.
        (JSC::DeleteResolveNode::emitCode): Ditto.
        (JSC::DeleteBracketNode::emitCode): Ditto.
        (JSC::DeleteDotNode::emitCode): Ditto.
        (JSC::PrefixResolveNode::emitCode): Ditto.
        (JSC::PrefixBracketNode::emitCode): Ditto.
        (JSC::PrefixDotNode::emitCode): Ditto.
        (JSC::ThrowableBinaryOpNode::emitCode): Ditto.
        (JSC::InstanceOfNode::emitCode): Ditto.
        (JSC::ReadModifyResolveNode::emitCode): Ditto.
        (JSC::AssignResolveNode::emitCode): Ditto.
        (JSC::AssignDotNode::emitCode): Ditto.
        (JSC::ReadModifyDotNode::emitCode): Ditto.
        (JSC::AssignBracketNode::emitCode): Ditto.
        (JSC::ReadModifyBracketNode::emitCode): Ditto.
        (JSC::statementListEmitCode): Take a const StatementVector instead
        of a non-const one. Also removed unused statementListPushFIFO.
        (JSC::ForInNode::emitCode): Inline functions instead of member access.
        (JSC::ThrowNode::emitCode): Ditto.
        (JSC::EvalNode::emitCode): Ditto.
        (JSC::FunctionBodyNode::emitCode): Ditto.
        (JSC::ProgramNode::emitCode): Ditto.

        * parser/Nodes.h: Removed unused includes and forward declarations.
        Removed Precedence enum. Made many more members private instead of
        protected or public. Removed unused NodeStack typedef. Moved the
        VarStack and FunctionStack typedefs from Node to ScopeNode. Made
        Node::emitCode pure virtual and changed classes that don't emit
        any code to inherit from ParserRefCounted rather than Node.
        Moved isReturnNode from Node to StatementNode. Removed the
        streamTo, precedence, and needsParensIfLeftmost functions from
        all classes. Removed the ImmediateNumberNode class and make
        NumberNode::setValue nonvirtual.

        * parser/nodes2string.cpp: Removed.

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

        Reviewed by Sam Weinig and Maciej Stachowiak.
        Includes some work done by Chris Brichford.

        - fix https://bugs.webkit.org/show_bug.cgi?id=14886
          Stack overflow due to deeply nested parse tree doing repeated string concatentation

        Test: fast/js/large-expressions.html

        1) Code generation is recursive, so takes stack proportional to the complexity
           of the source code expression. Fixed by setting an arbitrary recursion limit
           of 10,000 nodes.

        2) Destruction of the syntax tree was recursive. Fixed by introducing a
           non-recursive mechanism for destroying the tree.

        * bytecompiler/CodeGenerator.cpp:
        (JSC::CodeGenerator::CodeGenerator): Initialize depth to 0.
        (JSC::CodeGenerator::emitThrowExpressionTooDeepException): Added. Emits the code
        to throw a "too deep" exception.
        * bytecompiler/CodeGenerator.h:
        (JSC::CodeGenerator::emitNode): Check depth and emit an exception if we exceed
        the maximum depth.

        * parser/Nodes.cpp:
        (JSC::NodeReleaser::releaseAllNodes): Added. To be called inside node destructors
        to avoid recursive calls to destructors for nodes inside this one.
        (JSC::NodeReleaser::release): Added. To be called inside releaseNodes functions.
        Also added releaseNodes functions and calls to releaseAllNodes inside destructors
        for each class derived from Node that has RefPtr to other nodes.
        (JSC::NodeReleaser::adopt): Added. Used by the release function.
        (JSC::NodeReleaser::adoptFunctionBodyNode): Added.

        * parser/Nodes.h: Added declarations of releaseNodes and destructors in all classes
        that needed it. Eliminated use of ListRefPtr and releaseNext, which are the two parts
        of an older solution to the non-recursive destruction problem that works only for
        lists, whereas the new solution works for other graphs. Changed ReverseBinaryOpNode
        to use BinaryOpNode as a base class to avoid some duplicated code.

2008-11-08  Kevin Ollivier  <kevino@theolliviers.com>
        
        wx build fixes after addition of JSCore parser and bycompiler dirs. Also cleanup
        the JSCore Bakefile's group names to be consistent.

        * JavaScriptCoreSources.bkl:
        * jscore.bkl:

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

        Reviewed by Geoff Garen.

        Bug 21801: REGRESSION (r37821): YUI date formatting JavaScript puts the letter 'd' in place of the day
        <https://bugs.webkit.org/show_bug.cgi?id=21801>

        Fix the constant register check in the 'typeof' optimization in
        CodeGenerator, which was completely broken after r37821.

        * bytecompiler/CodeGenerator.cpp:
        (JSC::CodeGenerator::emitEqualityOp):

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

        Reviewed by Geoff Garen.

        Bug 22129: Move CTI::isConstant() to CodeBlock
        <https://bugs.webkit.org/show_bug.cgi?id=22129>

        * VM/CTI.cpp:
        (JSC::CTI::emitGetArg):
        (JSC::CTI::emitGetPutArg):
        (JSC::CTI::getConstantImmediateNumericArg):
        (JSC::CTI::printOpcodeOperandTypes):
        (JSC::CTI::privateCompileMainPass):
        * VM/CTI.h:
        * VM/CodeBlock.h:
        (JSC::CodeBlock::isConstant):

2008-11-07  Alp Toker  <alp@nuanti.com>

        autotools fix. Always use the configured perl binary (which may be
        different to the one in $PATH) when generating sources.

        * GNUmakefile.am:

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

        Not reviewed.

        Change grammar.cpp to Grammar.cpp and grammar.h to Grammar.h in several
        build scripts.

        * DerivedSources.make:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
        * JavaScriptCoreSources.bkl:

2008-11-07  Alp Toker  <alp@nuanti.com>

        More grammar.cpp -> Grammar.cpp build fixes.

        * AllInOneFile.cpp:
        * GNUmakefile.am:

2008-11-07  Simon Hausmann  <hausmann@webkit.org>

        Fix the build on case-sensitive file systems. grammar.y was renamed to
        Grammar.y but Lexer.cpp includes grammar.h. The build bots didn't
        notice this change because of stale files.

        * parser/Lexer.cpp:

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

        Reviewed by Alexey Proskuryakov.

        Rename the m_nextGlobal, m_nextParameter, and m_nextConstant member
        variables of CodeGenerator to m_nextGlobalIndex, m_nextParameterIndex,
        and m_nextConstantIndex respectively. This is to distinguish these from
        member variables like m_lastConstant, which are actually RefPtrs to
        Registers.

        * bytecompiler/CodeGenerator.cpp:
        (JSC::CodeGenerator::addGlobalVar):
        (JSC::CodeGenerator::allocateConstants):
        (JSC::CodeGenerator::CodeGenerator):
        (JSC::CodeGenerator::addParameter):
        (JSC::CodeGenerator::addConstant):
        * bytecompiler/CodeGenerator.h:

2008-11-06  Gavin Barraclough  barraclough@apple.com

        Reviewed by Oliver Hunt.

        Do not make a cti_* call to perform an op_call unless either:
        (1) The codeblock for the function body has not been generated.
        (2) The number of arguments passed does not match the callee arity.

        ~1% progression on sunspider --v8

        * VM/CTI.cpp:
        (JSC::CTI::compileOpCallInitializeCallFrame):
        (JSC::CTI::compileOpCall):
        (JSC::CTI::privateCompileSlowCases):
        * VM/CTI.h:
        * VM/Machine.cpp:
        (JSC::Machine::cti_op_call_JSFunction):
        (JSC::Machine::cti_op_call_arityCheck):
        (JSC::Machine::cti_op_construct_JSConstruct):
        * VM/Machine.h:
        * kjs/nodes.h:

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

        Reviewed by Geoff Garen.

        Move the remaining files in the kjs subdirectory of JavaScriptCore to
        a new parser subdirectory, and remove the kjs subdirectory entirely.

        * AllInOneFile.cpp:
        * DerivedSources.make:
        * GNUmakefile.am:
        * JavaScriptCore.pri:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
        * JavaScriptCore.vcproj/WTF/WTF.vcproj:
        * JavaScriptCore.vcproj/jsc/jsc.vcproj:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * JavaScriptCoreSources.bkl:
        * VM/CodeBlock.h:
        * VM/ExceptionHelpers.cpp:
        * VM/SamplingTool.h:
        * bytecompiler/CodeGenerator.h:
        * jsc.pro:
        * jscore.bkl:
        * kjs: Removed.
        * kjs/NodeInfo.h: Removed.
        * kjs/Parser.cpp: Removed.
        * kjs/Parser.h: Removed.
        * kjs/ResultType.h: Removed.
        * kjs/SourceCode.h: Removed.
        * kjs/SourceProvider.h: Removed.
        * kjs/grammar.y: Removed.
        * kjs/keywords.table: Removed.
        * kjs/lexer.cpp: Removed.
        * kjs/lexer.h: Removed.
        * kjs/nodes.cpp: Removed.
        * kjs/nodes.h: Removed.
        * kjs/nodes2string.cpp: Removed.
        * parser: Added.
        * parser/Grammar.y: Copied from kjs/grammar.y.
        * parser/Keywords.table: Copied from kjs/keywords.table.
        * parser/Lexer.cpp: Copied from kjs/lexer.cpp.
        * parser/Lexer.h: Copied from kjs/lexer.h.
        * parser/NodeInfo.h: Copied from kjs/NodeInfo.h.
        * parser/Nodes.cpp: Copied from kjs/nodes.cpp.
        * parser/Nodes.h: Copied from kjs/nodes.h.
        * parser/Parser.cpp: Copied from kjs/Parser.cpp.
        * parser/Parser.h: Copied from kjs/Parser.h.
        * parser/ResultType.h: Copied from kjs/ResultType.h.
        * parser/SourceCode.h: Copied from kjs/SourceCode.h.
        * parser/SourceProvider.h: Copied from kjs/SourceProvider.h.
        * parser/nodes2string.cpp: Copied from kjs/nodes2string.cpp.
        * pcre/pcre.pri:
        * pcre/pcre_exec.cpp:
        * runtime/FunctionConstructor.cpp:
        * runtime/JSActivation.h:
        * runtime/JSFunction.h:
        * runtime/JSGlobalData.cpp:
        * runtime/JSGlobalObjectFunctions.cpp:
        * runtime/JSObject.cpp:
        (JSC::JSObject::toNumber):
        * runtime/RegExp.cpp:

2008-11-06  Adam Roben  <aroben@apple.com>

        Windows build fix after r38196

        * JavaScriptCore.vcproj/jsc/jsc.vcproj: Added bytecompiler/ to the
        include path.

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

        Rubber-stamped by Sam Weinig.

        Create a new bytecompiler subdirectory of JavaScriptCore and move some
        relevant files to it.

        * AllInOneFile.cpp:
        * GNUmakefile.am:
        * JavaScriptCore.pri:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * JavaScriptCoreSources.bkl:
        * VM/CodeGenerator.cpp: Removed.
        * VM/CodeGenerator.h: Removed.
        * bytecompiler: Added.
        * bytecompiler/CodeGenerator.cpp: Copied from VM/CodeGenerator.cpp.
        * bytecompiler/CodeGenerator.h: Copied from VM/CodeGenerator.h.
        * bytecompiler/LabelScope.h: Copied from kjs/LabelScope.h.
        * jscore.bkl:
        * kjs/LabelScope.h: Removed.

2008-11-06  Adam Roben  <aroben@apple.com>

        Windows clean build fix after r38155

        Rubberstamped by Cameron Zwarich.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Update
        the post-build event for the move of create_hash_table out of kjs/.

2008-11-06  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Darin Adler.

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

        Bug uncovered during RVCT port in functions not used. get_lt() and
        get_gt() takes only one argument - remove second argument where
        applicable.

        * wtf/AVLTree.h:
        (JSC::AVLTree::remove): Remove second argument of get_lt/get_gt().
        (JSC::AVLTree::subst): Ditto.

2008-11-06  Alp Toker  <alp@nuanti.com>

        Reviewed by Cameron Zwarich.

        https://bugs.webkit.org/show_bug.cgi?id=22033
        [GTK] CTI/Linux r38064 crashes; JIT requires executable memory

        Mark pages allocated by the FastMalloc mmap code path executable with
        PROT_EXEC. This fixes crashes seen on CPUs and kernels that enforce
        non-executable memory (like ExecShield on Fedora Linux) when the JIT
        is enabled.

        This patch does not resolve the issue on debug builds so affected
        developers may still need to pass --disable-jit to configure.

        * wtf/TCSystemAlloc.cpp:
        (TryMmap):
        (TryDevMem):
        (TCMalloc_SystemRelease):

2008-11-06  Peter Gal  <galpeter@inf.u-szeged.hu>

        Reviewed by Cameron Zwarich.

        Bug 22099: Make the Qt port build the JSC shell in the correct place
        <https://bugs.webkit.org/show_bug.cgi?id=22099>

        Adjust include paths and build destination dir for the 'jsc' executable
        in the Qt build.

        * jsc.pro:

2008-11-06  Kristian Amlie  <kristian.amlie@nokia.com>

        Reviewed by Simon Hausmann.

        Implemented the block allocation on Symbian through heap allocation.

        Unfortunately there is no way to allocate virtual memory. The Posix
        layer provides mmap() but no anonymous mapping. So this is a very slow
        solution but it should work as a start.

        * runtime/Collector.cpp:
        (JSC::allocateBlock):
        (JSC::freeBlock):

2008-11-06  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Simon Hausmann.

        Borrow some math functions from the MSVC port to the build with the
        RVCT compiler.

        * wtf/MathExtras.h:
        (isinf):
        (isnan):
        (signbit):

2008-11-06  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Simon Hausmann.

        Include strings.h for strncasecmp().
        This is needed for compilation inside Symbian and it is also
        confirmed by the man-page on Linux.

        * runtime/DateMath.cpp:

2008-11-06  Norbert Leser  <norbert.leser@nokia.com>

        Reviewed by Simon Hausmann.

        Implemented currentThreadStackBase for Symbian.

        * runtime/Collector.cpp:
        (JSC::currentThreadStackBase):

2008-11-06  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Simon Hausmann.

        RVCT does not support tm_gmtoff field, so disable that code just like
        for MSVC.

        * runtime/DateMath.h:
        (JSC::GregorianDateTime::GregorianDateTime):
        (JSC::GregorianDateTime::operator tm):

2008-11-06  Kristian Amlie  <kristian.amlie@nokia.com>

        Reviewed by Simon Hausmann.

        Define PLATFORM(UNIX) for S60. Effectively WebKit on S60 is compiled
        on top of the Posix layer.

        * wtf/Platform.h:

2008-11-06  Norbert Leser  <norbert.leser@nokia.com>

        Reviewed by Simon Hausmann.

        Added __SYMBIAN32__ condition for defining PLATFORM(SYMBIAN).

        * wtf/Platform.h:

2008-11-06  Ariya Hidayat  <ariya.hidayat@trolltech.com>

        Reviewed by Simon Hausmann.

        Added WINSCW compiler define for Symbian S60.

        * wtf/Platform.h:

2008-11-06  Kristian Amlie  <kristian.amlie@nokia.com>

        Reviewed by Simon Hausmann.

        Use the GCC defines of the WTF_ALIGN* macros for the RVCT and the
        MINSCW compiler.

        * wtf/Vector.h:

2008-11-06  Kristian Amlie  <kristian.amlie@nokia.com>

        Reviewed by Simon Hausmann.

        Define capabilities of the SYMBIAN platform. Some of the system
        headers are actually dependent on RVCT.

        * wtf/Platform.h:

2008-11-06  Kristian Amlie  <kristian.amlie@nokia.com>

        Reviewed by Simon Hausmann.

        Add missing stddef.h header needed for compilation in Symbian.

        * runtime/Collector.h:

2008-11-06  Kristian Amlie  <kristian.amlie@nokia.com>

        Reviewed by Simon Hausmann.

        Added COMPILER(RVCT) to detect the ARM RVCT compiler used in the Symbian environment.

        * wtf/Platform.h:

2008-11-06  Simon Hausmann  <hausmann@webkit.org>

        Fix the Qt build, adjust include paths after move of jsc.pro.

        * jsc.pro:

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

        Rubber-stamped by Sam Weinig.

        Move kjs/Shell.cpp to the top level of the JavaScriptCore directory and
        rename it to jsc.cpp to reflect the name of the binary compiled from it.

        * GNUmakefile.am:
        * JavaScriptCore.vcproj/jsc/jsc.vcproj:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * jsc.cpp: Copied from kjs/Shell.cpp.
        * jsc.pro:
        * jscore.bkl:
        * kjs/Shell.cpp: Removed.

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

        Rubber-stamped by Sam Weinig.

        Move create_hash_table and jsc.pro out of the kjs directory and into the
        root directory of JavaScriptCore.

        * DerivedSources.make:
        * JavaScriptCore.pri:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * create_hash_table: Copied from kjs/create_hash_table.
        * jsc.pro: Copied from kjs/jsc.pro.
        * kjs/create_hash_table: Removed.
        * kjs/jsc.pro: Removed.
        * make-generated-sources.sh:

2008-11-05  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Maciej Stachowiak.

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

        Fix for bug where the callee incorrectly recieves the caller's lexical
        global object as this, rather than its own.  Implementation closely
        follows the spec, passing jsNull, checking in the callee and replacing
        with the global object where necessary.

        * VM/CTI.cpp:
        (JSC::CTI::compileOpCall):
        * VM/Machine.cpp:
        (JSC::Machine::cti_op_call_NotJSFunction):
        (JSC::Machine::cti_op_call_eval):
        * runtime/JSCell.h:
        (JSC::JSValue::toThisObject):
        * runtime/JSImmediate.cpp:
        (JSC::JSImmediate::toThisObject):
        * runtime/JSImmediate.h:

2008-11-05  Kevin Ollivier  <kevino@theolliviers.com>

        wx build fix after Operations.cpp move.

        * JavaScriptCoreSources.bkl:

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

        Not reviewed.

        Fix the build for case-sensitive build systems and wxWindows.

        * JavaScriptCoreSources.bkl:
        * kjs/create_hash_table:

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

        Not reviewed.

        Fix the build for case-sensitive build systems.

        * JavaScriptCoreSources.bkl:
        * kjs/Shell.cpp:
        * runtime/Interpreter.cpp:
        * runtime/JSArray.cpp:

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

        Not reviewed.

        Fix the build for case-sensitive build systems.

        * API/JSBase.cpp:
        * API/JSObjectRef.cpp:
        * runtime/CommonIdentifiers.h:
        * runtime/Identifier.cpp:
        * runtime/InitializeThreading.cpp:
        * runtime/InternalFunction.h:
        * runtime/JSString.h:
        * runtime/Lookup.h:
        * runtime/PropertyNameArray.h:
        * runtime/PropertySlot.h:
        * runtime/StructureID.cpp:
        * runtime/StructureID.h:
        * runtime/UString.cpp:

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

        Rubber-stamped by Sam Weinig.

        Move more files to the runtime subdirectory of JavaScriptCore.

        * API/APICast.h:
        * API/JSBase.cpp:
        * API/JSCallbackObject.cpp:
        * API/JSClassRef.cpp:
        * API/JSClassRef.h:
        * API/JSStringRefCF.cpp:
        * API/JSValueRef.cpp:
        * API/OpaqueJSString.cpp:
        * API/OpaqueJSString.h:
        * AllInOneFile.cpp:
        * GNUmakefile.am:
        * JavaScriptCore.pri:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * JavaScriptCoreSources.bkl:
        * VM/CodeBlock.h:
        * VM/CodeGenerator.cpp:
        * VM/Machine.cpp:
        * VM/RegisterFile.h:
        * debugger/Debugger.h:
        * kjs/SourceProvider.h:
        * kjs/TypeInfo.h: Removed.
        * kjs/collector.cpp: Removed.
        * kjs/collector.h: Removed.
        * kjs/completion.h: Removed.
        * kjs/create_hash_table:
        * kjs/identifier.cpp: Removed.
        * kjs/identifier.h: Removed.
        * kjs/interpreter.cpp: Removed.
        * kjs/interpreter.h: Removed.
        * kjs/lexer.cpp:
        * kjs/lexer.h:
        * kjs/lookup.cpp: Removed.
        * kjs/lookup.h: Removed.
        * kjs/nodes.cpp:
        * kjs/nodes.h:
        * kjs/operations.cpp: Removed.
        * kjs/operations.h: Removed.
        * kjs/protect.h: Removed.
        * kjs/regexp.cpp: Removed.
        * kjs/regexp.h: Removed.
        * kjs/ustring.cpp: Removed.
        * kjs/ustring.h: Removed.
        * pcre/pcre_exec.cpp:
        * profiler/CallIdentifier.h:
        * profiler/Profile.h:
        * runtime/ArrayConstructor.cpp:
        * runtime/ArrayPrototype.cpp:
        * runtime/ArrayPrototype.h:
        * runtime/Collector.cpp: Copied from kjs/collector.cpp.
        * runtime/Collector.h: Copied from kjs/collector.h.
        * runtime/CollectorHeapIterator.h:
        * runtime/Completion.h: Copied from kjs/completion.h.
        * runtime/ErrorPrototype.cpp:
        * runtime/Identifier.cpp: Copied from kjs/identifier.cpp.
        * runtime/Identifier.h: Copied from kjs/identifier.h.
        * runtime/InitializeThreading.cpp:
        * runtime/Interpreter.cpp: Copied from kjs/interpreter.cpp.
        * runtime/Interpreter.h: Copied from kjs/interpreter.h.
        * runtime/JSCell.h:
        * runtime/JSGlobalData.cpp:
        * runtime/JSGlobalData.h:
        * runtime/JSLock.cpp:
        * runtime/JSNumberCell.cpp:
        * runtime/JSNumberCell.h:
        * runtime/JSObject.cpp:
        * runtime/JSValue.h:
        * runtime/Lookup.cpp: Copied from kjs/lookup.cpp.
        * runtime/Lookup.h: Copied from kjs/lookup.h.
        * runtime/MathObject.cpp:
        * runtime/NativeErrorPrototype.cpp:
        * runtime/NumberPrototype.cpp:
        * runtime/Operations.cpp: Copied from kjs/operations.cpp.
        * runtime/Operations.h: Copied from kjs/operations.h.
        * runtime/PropertyMapHashTable.h:
        * runtime/Protect.h: Copied from kjs/protect.h.
        * runtime/RegExp.cpp: Copied from kjs/regexp.cpp.
        * runtime/RegExp.h: Copied from kjs/regexp.h.
        * runtime/RegExpConstructor.cpp:
        * runtime/RegExpObject.h:
        * runtime/RegExpPrototype.cpp:
        * runtime/SmallStrings.h:
        * runtime/StringObjectThatMasqueradesAsUndefined.h:
        * runtime/StructureID.cpp:
        * runtime/StructureID.h:
        * runtime/StructureIDTransitionTable.h:
        * runtime/SymbolTable.h:
        * runtime/TypeInfo.h: Copied from kjs/TypeInfo.h.
        * runtime/UString.cpp: Copied from kjs/ustring.cpp.
        * runtime/UString.h: Copied from kjs/ustring.h.
        * wrec/CharacterClassConstructor.h:
        * wrec/WREC.h:

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

        Suggested by Darin Adler.
        
        Removed two copy constructors that the compiler can generate for us
        automatically.

        * VM/LabelID.h:
        (JSC::LabelID::setLocation):
        (JSC::LabelID::offsetFrom):
        (JSC::LabelID::ref):
        (JSC::LabelID::refCount):
        * kjs/LabelScope.h:

2008-11-05  Anders Carlsson  <andersca@apple.com>

        Fix Snow Leopard build.
        
        * JavaScriptCore.xcodeproj/project.pbxproj:

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

        Rubber-stamped by Steve Falkenburg.

        Move dtoa.cpp and dtoa.h to the WTF Visual Studio project to reflect
        their movement in the filesystem.

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

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

        Rubber-stamped by Sam Weinig.

        Move kjs/dtoa.h to the wtf subdirectory of JavaScriptCore.

        * AllInOneFile.cpp:
        * GNUmakefile.am:
        * JavaScriptCore.pri:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * JavaScriptCoreSources.bkl:
        * kjs/dtoa.cpp: Removed.
        * kjs/dtoa.h: Removed.
        * wtf/dtoa.cpp: Copied from kjs/dtoa.cpp.
        * wtf/dtoa.h: Copied from kjs/dtoa.h.

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

        Rubber-stamped by Sam Weinig.

        Move kjs/config.h to the top level of JavaScriptCore.

        * GNUmakefile.am:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * config.h: Copied from kjs/config.h.
        * kjs/config.h: Removed.

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

        Reviewed by Tim Hatcher.

        * wtf/ThreadingNone.cpp: Tweak formatting.

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

        Reviewed by Tim Hatcher.

        - https://bugs.webkit.org/show_bug.cgi?id=22061
          create script to check for exit-time destructors

        * JavaScriptCore.exp: Changed to export functions rather than
        a global for the atomically initialized static mutex.

        * JavaScriptCore.xcodeproj/project.pbxproj: Added a script
        phase that runs the check-for-exit-time-destructors script.

        * wtf/MainThread.cpp:
        (WTF::mainThreadFunctionQueueMutex): Changed to leak an object
        rather than using an exit time destructor.
        (WTF::functionQueue): Ditto.
        * wtf/unicode/icu/CollatorICU.cpp:
        (WTF::cachedCollatorMutex): Ditto.

        * wtf/Threading.h: Changed other platforms to share the Windows
        approach where the mutex is internal and the functions are exported.
        * wtf/ThreadingGtk.cpp:
        (WTF::lockAtomicallyInitializedStaticMutex): Ditto.
        (WTF::unlockAtomicallyInitializedStaticMutex): Ditto.
        * wtf/ThreadingNone.cpp:
        (WTF::lockAtomicallyInitializedStaticMutex): Ditto.
        (WTF::unlockAtomicallyInitializedStaticMutex): Ditto.
        * wtf/ThreadingPthreads.cpp:
        (WTF::threadMapMutex): Changed to leak an object rather than using
        an exit time destructor.
        (WTF::lockAtomicallyInitializedStaticMutex): Mutex change.
        (WTF::unlockAtomicallyInitializedStaticMutex): Ditto.
        (WTF::threadMap): Changed to leak an object rather than using
        an exit time destructor.
        * wtf/ThreadingQt.cpp:
        (WTF::lockAtomicallyInitializedStaticMutex): Mutex change.
        (WTF::unlockAtomicallyInitializedStaticMutex): Ditto.
        * wtf/ThreadingWin.cpp:
        (WTF::lockAtomicallyInitializedStaticMutex): Added an assertion.

2008-11-04  Adam Roben  <aroben@apple.com>

        Windows build fix

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Update
        the location of JSStaticScopeObject.{cpp,h}.

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

        Reviewed by Alexey Proskuryakov.

        Move AllInOneFile.cpp to the top level of JavaScriptCore.

        * AllInOneFile.cpp: Copied from kjs/AllInOneFile.cpp.
        * GNUmakefile.am:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * kjs/AllInOneFile.cpp: Removed.

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

        Rubber-stamped by Alexey Proskuryakov.

        Add NodeInfo.h to the JavaScriptCore Xcode project.

        * JavaScriptCore.xcodeproj/project.pbxproj:

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

        Rubber-stamped by Maciej Stachowiak.

        Move more files into the runtime subdirectory of JavaScriptCore.

        * API/JSBase.cpp:
        * API/JSCallbackConstructor.cpp:
        * API/JSCallbackFunction.cpp:
        * API/JSClassRef.cpp:
        * API/OpaqueJSString.cpp:
        * GNUmakefile.am:
        * JavaScriptCore.pri:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * JavaScriptCoreSources.bkl:
        * kjs/AllInOneFile.cpp:
        * kjs/ArgList.cpp: Removed.
        * kjs/ArgList.h: Removed.
        * kjs/Arguments.cpp: Removed.
        * kjs/Arguments.h: Removed.
        * kjs/BatchedTransitionOptimizer.h: Removed.
        * kjs/CollectorHeapIterator.h: Removed.
        * kjs/CommonIdentifiers.cpp: Removed.
        * kjs/CommonIdentifiers.h: Removed.
        * kjs/ExecState.cpp: Removed.
        * kjs/ExecState.h: Removed.
        * kjs/GetterSetter.cpp: Removed.
        * kjs/GetterSetter.h: Removed.
        * kjs/InitializeThreading.cpp: Removed.
        * kjs/InitializeThreading.h: Removed.
        * kjs/JSActivation.cpp: Removed.
        * kjs/JSActivation.h: Removed.
        * kjs/JSGlobalData.cpp: Removed.
        * kjs/JSGlobalData.h: Removed.
        * kjs/JSLock.cpp: Removed.
        * kjs/JSLock.h: Removed.
        * kjs/JSStaticScopeObject.cpp: Removed.
        * kjs/JSStaticScopeObject.h: Removed.
        * kjs/JSType.h: Removed.
        * kjs/PropertyNameArray.cpp: Removed.
        * kjs/PropertyNameArray.h: Removed.
        * kjs/ScopeChain.cpp: Removed.
        * kjs/ScopeChain.h: Removed.
        * kjs/ScopeChainMark.h: Removed.
        * kjs/SymbolTable.h: Removed.
        * kjs/Tracing.d: Removed.
        * kjs/Tracing.h: Removed.
        * runtime/ArgList.cpp: Copied from kjs/ArgList.cpp.
        * runtime/ArgList.h: Copied from kjs/ArgList.h.
        * runtime/Arguments.cpp: Copied from kjs/Arguments.cpp.
        * runtime/Arguments.h: Copied from kjs/Arguments.h.
        * runtime/BatchedTransitionOptimizer.h: Copied from kjs/BatchedTransitionOptimizer.h.
        * runtime/CollectorHeapIterator.h: Copied from kjs/CollectorHeapIterator.h.
        * runtime/CommonIdentifiers.cpp: Copied from kjs/CommonIdentifiers.cpp.
        * runtime/CommonIdentifiers.h: Copied from kjs/CommonIdentifiers.h.
        * runtime/ExecState.cpp: Copied from kjs/ExecState.cpp.
        * runtime/ExecState.h: Copied from kjs/ExecState.h.
        * runtime/GetterSetter.cpp: Copied from kjs/GetterSetter.cpp.
        * runtime/GetterSetter.h: Copied from kjs/GetterSetter.h.
        * runtime/InitializeThreading.cpp: Copied from kjs/InitializeThreading.cpp.
        * runtime/InitializeThreading.h: Copied from kjs/InitializeThreading.h.
        * runtime/JSActivation.cpp: Copied from kjs/JSActivation.cpp.
        * runtime/JSActivation.h: Copied from kjs/JSActivation.h.
        * runtime/JSGlobalData.cpp: Copied from kjs/JSGlobalData.cpp.
        * runtime/JSGlobalData.h: Copied from kjs/JSGlobalData.h.
        * runtime/JSLock.cpp: Copied from kjs/JSLock.cpp.
        * runtime/JSLock.h: Copied from kjs/JSLock.h.
        * runtime/JSStaticScopeObject.cpp: Copied from kjs/JSStaticScopeObject.cpp.
        * runtime/JSStaticScopeObject.h: Copied from kjs/JSStaticScopeObject.h.
        * runtime/JSType.h: Copied from kjs/JSType.h.
        * runtime/PropertyNameArray.cpp: Copied from kjs/PropertyNameArray.cpp.
        * runtime/PropertyNameArray.h: Copied from kjs/PropertyNameArray.h.
        * runtime/ScopeChain.cpp: Copied from kjs/ScopeChain.cpp.
        * runtime/ScopeChain.h: Copied from kjs/ScopeChain.h.
        * runtime/ScopeChainMark.h: Copied from kjs/ScopeChainMark.h.
        * runtime/SymbolTable.h: Copied from kjs/SymbolTable.h.
        * runtime/Tracing.d: Copied from kjs/Tracing.d.
        * runtime/Tracing.h: Copied from kjs/Tracing.h.

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

        Reviewed by Mark Rowe.

        Move #define to turn on dumping StructureID statistics to StructureID.cpp so that
        turning it on does not require a full rebuild. 

        * runtime/StructureID.cpp:
        (JSC::StructureID::dumpStatistics):
        * runtime/StructureID.h:

2008-11-03  Alp Toker  <alp@nuanti.com>

        Reviewed by Geoffrey Garen.

        Fix warning when building on Darwin without JSC_MULTIPLE_THREADS
        enabled.

        * kjs/InitializeThreading.cpp:

2008-11-02  Matt Lilek  <webkit@mattlilek.com>

        Reviewed by Cameron Zwarich.

        Bug 22042: REGRESSION(r38066): ASSERTION FAILED: source in CodeBlock
        <https://bugs.webkit.org/show_bug.cgi?id=22042>

        Rename parameter name to avoid ASSERT.

        * VM/CodeBlock.h:
        (JSC::CodeBlock::CodeBlock):
        (JSC::ProgramCodeBlock::ProgramCodeBlock):
        (JSC::EvalCodeBlock::EvalCodeBlock):

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

        Reviewed by Oliver Hunt.

        Bug 22035: Remove the '_' suffix on constructor parameter names for structs
        <https://bugs.webkit.org/show_bug.cgi?id=22035>

        * API/JSCallbackObject.h:
        (JSC::JSCallbackObject::JSCallbackObjectData::JSCallbackObjectData):
        * VM/CodeBlock.h:
        (JSC::CodeBlock::CodeBlock):
        (JSC::ProgramCodeBlock::ProgramCodeBlock):
        (JSC::EvalCodeBlock::EvalCodeBlock):
        * wrec/WREC.h:
        (JSC::Quantifier::Quantifier):

2008-10-31  Cameron Zwarich  <zwarich@apple.com>

        Rubber-stamped by Geoff Garen.

        Rename SourceRange.h to SourceCode.h.

        * API/JSBase.cpp:
        * GNUmakefile.am:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * VM/CodeBlock.h:
        * kjs/SourceCode.h: Copied from kjs/SourceRange.h.
        * kjs/SourceRange.h: Removed.
        * kjs/grammar.y:
        * kjs/lexer.h:
        * kjs/nodes.cpp:
        (JSC::ForInNode::ForInNode):
        * kjs/nodes.h:
        (JSC::ThrowableExpressionData::setExceptionSourceCode):

2008-10-31  Cameron Zwarich  <zwarich@apple.com>

        Reviewed by Darin Adler.

        Bug 22019: Move JSC::Interpreter::shouldPrintExceptions() to WebCore::Console
        <https://bugs.webkit.org/show_bug.cgi?id=22019>

        The JSC::Interpreter::shouldPrintExceptions() function is not used at
        all in JavaScriptCore, so it should be moved to WebCore::Console, its
        only user.

        * JavaScriptCore.exp:
        * kjs/interpreter.cpp:
        * kjs/interpreter.h:

2008-10-31  Cameron Zwarich  <zwarich@apple.com>

        Not reviewed.

        Windows build fix.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:

2008-10-31  Cameron Zwarich  <zwarich@apple.com>

        Rubber-stamped by Sam Weinig.

        Remove the call to Interpreter::setShouldPrintExceptions() from the
        GlobalObject constructor in the shell. The shouldPrintExceptions()
        information is not used anywhere in JavaScriptCore, only in WebCore.

        * kjs/Shell.cpp:
        (GlobalObject::GlobalObject):

2008-10-31  Kevin Ollivier  <kevino@theolliviers.com>

        wxMSW build fix.

        * wtf/Threading.h:

2008-10-31  Cameron Zwarich  <zwarich@apple.com>

        Rubber-stamped by Sam Weinig.

        Move more files from the kjs subdirectory of JavaScriptCore to the
        runtime subdirectory.

        * GNUmakefile.am:
        * JavaScriptCore.pri:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * JavaScriptCoreSources.bkl:
        * kjs/AllInOneFile.cpp:
        * kjs/RegExpConstructor.cpp: Removed.
        * kjs/RegExpConstructor.h: Removed.
        * kjs/RegExpMatchesArray.h: Removed.
        * kjs/RegExpObject.cpp: Removed.
        * kjs/RegExpObject.h: Removed.
        * kjs/RegExpPrototype.cpp: Removed.
        * kjs/RegExpPrototype.h: Removed.
        * runtime/RegExpConstructor.cpp: Copied from kjs/RegExpConstructor.cpp.
        * runtime/RegExpConstructor.h: Copied from kjs/RegExpConstructor.h.
        * runtime/RegExpMatchesArray.h: Copied from kjs/RegExpMatchesArray.h.
        * runtime/RegExpObject.cpp: Copied from kjs/RegExpObject.cpp.
        * runtime/RegExpObject.h: Copied from kjs/RegExpObject.h.
        * runtime/RegExpPrototype.cpp: Copied from kjs/RegExpPrototype.cpp.
        * runtime/RegExpPrototype.h: Copied from kjs/RegExpPrototype.h.

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

        Revert an incorrect portion of r38034.

        * profiler/ProfilerServer.mm:

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

        Fix the 64-bit build.

        Disable strict aliasing in ProfilerServer.mm as it leads to the compiler being unhappy
        with the common Obj-C idiom self = [super init];

        * JavaScriptCore.xcodeproj/project.pbxproj:

2008-10-31  Cameron Zwarich  <zwarich@apple.com>

        Reviewed by Alexey Proskuryakov.

        Change a header guard to match our coding style.

        * kjs/InitializeThreading.h:

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

        Reviewed by Oliver Hunt.
        
        Fixed a small bit of https://bugs.webkit.org/show_bug.cgi?id=21962
        AST uses way too much memory
        
        Removed a word from StatementNode by nixing LabelStack and turning it
        into a compile-time data structure managed by CodeGenerator.
        
        v8 tests and SunSpider, run by Gavin, report no change.

        * GNUmakefile.am:
        * JavaScriptCore.order:
        * JavaScriptCore.pri:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * kjs/AllInOneFile.cpp:
        * JavaScriptCoreSources.bkl: I sure hope this builds!
        
        * VM/CodeGenerator.cpp:
        (JSC::CodeGenerator::CodeGenerator):
        (JSC::CodeGenerator::newLabelScope):
        (JSC::CodeGenerator::breakTarget):
        (JSC::CodeGenerator::continueTarget):
        * VM/CodeGenerator.h: Nixed the JumpContext system because it depended
        on a LabelStack in the AST, and it was a little cumbersome on the client
        side. Replaced with LabelScope, which tracks all break / continue
        information in the CodeGenerator, just like we track LabelIDs and other
        stacks of compile-time data.

        * kjs/LabelScope.h: Added.
        (JSC::LabelScope::):
        (JSC::LabelScope::LabelScope):
        (JSC::LabelScope::ref):
        (JSC::LabelScope::deref):
        (JSC::LabelScope::refCount):
        (JSC::LabelScope::breakTarget):
        (JSC::LabelScope::continueTarget):
        (JSC::LabelScope::type):
        (JSC::LabelScope::name):
        (JSC::LabelScope::scopeDepth): Simple abstraction for holding everything
        you might want to know about a break-able / continue-able scope.

        * kjs/LabelStack.cpp: Removed.
        * kjs/LabelStack.h: Removed.

        * kjs/grammar.y: No need to push labels at parse time -- we don't store
        LabelStacks in the AST anymore.

        * kjs/nodes.cpp:
        (JSC::DoWhileNode::emitCode):
        (JSC::WhileNode::emitCode):
        (JSC::ForNode::emitCode):
        (JSC::ForInNode::emitCode):
        (JSC::ContinueNode::emitCode):
        (JSC::BreakNode::emitCode):
        (JSC::SwitchNode::emitCode):
        (JSC::LabelNode::emitCode):
        * kjs/nodes.h:
        (JSC::StatementNode::):
        (JSC::LabelNode::): Use LabelScope where we used to use JumpContext.
        Simplified a bunch of code. Touched up label-related error messages a
        bit.

        * kjs/nodes2string.cpp:
        (JSC::LabelNode::streamTo): Updated for rename.

2008-10-31  Cameron Zwarich  <zwarich@apple.com>

        Reviewed by Darin Adler.

        Bug 22005: Move StructureIDChain into its own file
        <https://bugs.webkit.org/show_bug.cgi?id=22005>

        * GNUmakefile.am:
        * JavaScriptCore.pri:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * JavaScriptCoreSources.bkl:
        * runtime/StructureID.cpp:
        * runtime/StructureID.h:
        * runtime/StructureIDChain.cpp: Copied from runtime/StructureID.cpp.
        * runtime/StructureIDChain.h: Copied from runtime/StructureID.h.

2008-10-31  Steve Falkenburg  <sfalken@apple.com>

        Build fix.

        * JavaScriptCore.vcproj/jsc/jsc.vcproj:

2008-10-31  Steve Falkenburg  <sfalken@apple.com>

        Build fix.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:

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

        Reviewed by Dan Bernstein.

        - fix storage leak seen on buildbot

        Some other cleanup too. The storage leak was caused by the fact
        that HashTraits<CallIdentifier>::needsDestruction was false, so
        the call identifier objects didn't get deleted.

        * profiler/CallIdentifier.h:
        
        Added a default constructor to create empty call identifiers.

        Changed the normal constructor to use const UString&
        to avoid extra copying and reference count thrash.
        
        Removed the explicit copy constructor definition, since it's what
        the compiler will automatically generate. (Rule of thumb: Either
        you need both a custom copy constructor and a custom assignment
        operator, or neither.)

        Moved the CallIdentifier hash function out of the WTF namespace;
        there's no reason to put it there.

        Changed the CallIdentifier hash function to be a struct rather than
        a specialization of the IntHash struct template. Having it be
        a specialization made no sense, since CallIdentifier is not an integer,
        and did no good.

        Removed explicit definition of emptyValueIsZero in the hash traits,
        since inheriting from GenericHashTraits already makes that false.

        Removed explicit definition of emptyValue, instead relying on the
        default constructor and GenericHashTraits.

        Removed explicit definition of needsDestruction, because we want it
        to have its default value: true, not false. This fixes the leak!

        Changed constructDeletedValue and isDeletedValue to use a line number
        of numeric_limits<unsigned>::max() to indicate a value is deleted.
        Previously this used empty strings for the empty value and null strings
        for the deleted value, but it's more efficient to use null for both.

2008-10-31  Timothy Hatcher  <timothy@apple.com>

        Emit the WillExecuteStatement debugger hook before the for loop body
        when the statement node for the body isn't a block. This allows
        breakpoints on those statements in the Web Inspector.

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

        Reviewed by Darin Adler.

        * kjs/nodes.cpp:
        (JSC::ForNode::emitCode): Emit the WillExecuteStatement
        debugger hook before the statement node if isn't a block.
        Also emit the WillExecuteStatement debugger hook for the
        loop as the first op-code.
        (JSC::ForInNode::emitCode): Ditto.

2008-10-31  Timothy Hatcher  <timothy@apple.com>

        Fixes console warnings about not having an autorelease pool.
        Also fixes the build for Snow Leopard, by including individual
        Foundation headers instead of Foundation.h.

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

        Reviewed by Oliver Hunt.

        * profiler/ProfilerServer.mm:
        (-[ProfilerServer init]): Create a NSAutoreleasePool and drain it.

2008-10-31  Cameron Zwarich  <zwarich@apple.com>

        Not reviewed.

        Speculative wxWindows build fix.

        * JavaScriptCoreSources.bkl:
        * jscore.bkl:

2008-10-31  Cameron Zwarich  <zwarich@apple.com>

        Rubber-stamped by Maciej Stachowiak.

        Move VM/JSPropertyNameIterator.cpp and VM/JSPropertyNameIterator.h to
        the runtime directory.

        * GNUmakefile.am:
        * JavaScriptCore.pri:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * JavaScriptCoreSources.bkl:
        * VM/JSPropertyNameIterator.cpp: Removed.
        * VM/JSPropertyNameIterator.h: Removed.
        * runtime/JSPropertyNameIterator.cpp: Copied from VM/JSPropertyNameIterator.cpp.
        * runtime/JSPropertyNameIterator.h: Copied from VM/JSPropertyNameIterator.h.

2008-10-31  Cameron Zwarich  <zwarich@apple.com>

        Not reviewed.

        Speculative wxWindows build fix.

        * jscore.bkl:

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-30  Cameron Zwarich  <zwarich@apple.com>

        Rubber-stamped by Sam Weinig.

        Create a debugger directory in JavaScriptCore and move the relevant
        files to it.

        * GNUmakefile.am:
        * JavaScriptCore.pri:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * VM/CodeBlock.cpp:
        * VM/CodeGenerator.h:
        * VM/Machine.cpp:
        * debugger: Added.
        * debugger/Debugger.cpp: Copied from kjs/debugger.cpp.
        * debugger/Debugger.h: Copied from kjs/debugger.h.
        * debugger/DebuggerCallFrame.cpp: Copied from kjs/DebuggerCallFrame.cpp.
        * debugger/DebuggerCallFrame.h: Copied from kjs/DebuggerCallFrame.h.
        * kjs/AllInOneFile.cpp:
        * kjs/DebuggerCallFrame.cpp: Removed.
        * kjs/DebuggerCallFrame.h: Removed.
        * kjs/Parser.cpp:
        * kjs/Parser.h:
        * kjs/debugger.cpp: Removed.
        * kjs/debugger.h: Removed.
        * kjs/interpreter.cpp:
        * kjs/nodes.cpp:
        * runtime/FunctionConstructor.cpp:
        * runtime/JSGlobalObject.cpp:

2008-10-30  Benjamin K. Stuhl  <bks24@cornell.edu>

        gcc 4.3.3/linux-x86 generates "suggest parentheses around && within ||"
        warnings; add some parentheses to disambiguate things. No functional
        changes, so no tests.

        https://bugs.webkit.org/show_bug.cgi?id=21973
        Add parentheses to clean up some gcc warnings

        Reviewed by Dan Bernstein.

        * wtf/ASCIICType.h:
        (WTF::isASCIIAlphanumeric):
        (WTF::isASCIIHexDigit):

2008-10-30  Kevin Lindeman  <klindeman@apple.com>

        Adds ProfilerServer, which is a distributed notification listener
        that allows starting and stopping the profiler remotely for use
        in conjunction with the profiler's DTace probes.

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

        Reviewed by Timothy Hatcher.

        * JavaScriptCore.xcodeproj/project.pbxproj:
        * kjs/JSGlobalData.cpp:
        (JSC::JSGlobalData::JSGlobalData): Calls startProfilerServerIfNeeded.
        * profiler/ProfilerServer.h: Added.
        * profiler/ProfilerServer.mm: Added.
        (+[ProfilerServer sharedProfileServer]):
        (-[ProfilerServer init]):
        (-[ProfilerServer startProfiling]):
        (-[ProfilerServer stopProfiling]):
        (JSC::startProfilerServerIfNeeded):

2008-10-30  Kevin Ollivier  <kevino@theolliviers.com>

        wx build fix after PropertyMap and StructureID merge.

        * JavaScriptCoreSources.bkl:

2008-10-30  Cameron Zwarich  <zwarich@apple.com>

        Reviewed by Mark Rowe.

        Change the JavaScriptCore Xcode project to use relative paths for the
        PCRE source files.

        * JavaScriptCore.xcodeproj/project.pbxproj:

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

        Reviewed by Cameron Zwarich and Geoffrey Garen.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=21989
        Merge PropertyMap and StructureID

        - Move PropertyMap code into StructureID in preparation for lazily
          creating the map on gets.
        - Make remove with transition explicit by adding removePropertyTransition.
        - Make the put/remove without transition explicit.
        - Make cache invalidation part of put/remove without transition.

        1% speedup on SunSpider; 0.5% speedup on v8 suite.

        * GNUmakefile.am:
        * JavaScriptCore.exp:
        * JavaScriptCore.pri:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * JavaScriptCoreSources.bkl:
        * kjs/AllInOneFile.cpp:
        * kjs/identifier.h:
        * runtime/JSObject.cpp:
        (JSC::JSObject::removeDirect):
        * runtime/JSObject.h:
        (JSC::JSObject::putDirect):
        * runtime/PropertyMap.cpp: Removed.
        * runtime/PropertyMap.h: Removed.
        * runtime/PropertyMapHashTable.h: Copied from runtime/PropertyMap.h.
        * runtime/StructureID.cpp:
        (JSC::StructureID::dumpStatistics):
        (JSC::StructureID::StructureID):
        (JSC::StructureID::~StructureID):
        (JSC::StructureID::getEnumerablePropertyNames):
        (JSC::StructureID::addPropertyTransition):
        (JSC::StructureID::removePropertyTransition):
        (JSC::StructureID::toDictionaryTransition):
        (JSC::StructureID::changePrototypeTransition):
        (JSC::StructureID::getterSetterTransition):
        (JSC::StructureID::addPropertyWithoutTransition):
        (JSC::StructureID::removePropertyWithoutTransition):
        (JSC::PropertyMapStatisticsExitLogger::~PropertyMapStatisticsExitLogger):
        (JSC::StructureID::checkConsistency):
        (JSC::StructureID::copyPropertyTable):
        (JSC::StructureID::get):
        (JSC::StructureID::put):
        (JSC::StructureID::remove):
        (JSC::StructureID::insertIntoPropertyMapHashTable):
        (JSC::StructureID::expandPropertyMapHashTable):
        (JSC::StructureID::createPropertyMapHashTable):
        (JSC::StructureID::rehashPropertyMapHashTable):
        (JSC::comparePropertyMapEntryIndices):
        (JSC::StructureID::getEnumerablePropertyNamesInternal):
        * runtime/StructureID.h:
        (JSC::StructureID::propertyStorageSize):
        (JSC::StructureID::isEmpty):
        (JSC::StructureID::get):

2008-10-30  Cameron Zwarich  <zwarich@apple.com>

        Reviewed by Oliver Hunt.

        Bug 21987: CTI::putDoubleResultToJSNumberCellOrJSImmediate() hardcodes its result register
        <https://bugs.webkit.org/show_bug.cgi?id=21987>

        CTI::putDoubleResultToJSNumberCellOrJSImmediate() hardcodes its result
        register as ecx, but it should be tempReg1, which is ecx at all of its
        callsites.

        * VM/CTI.cpp:
        (JSC::CTI::putDoubleResultToJSNumberCellOrJSImmediate):

2008-10-30  Cameron Zwarich  <zwarich@apple.com>

        Reviewed by Sam Weinig.

        Bug 21985: Opcodes should use eax as their destination register whenever possible
        <https://bugs.webkit.org/show_bug.cgi?id=21985>

        Change more opcodes to use eax as the register for their final result,
        and change calls to emitPutResult() that pass eax to rely on the default
        value of eax.

        * VM/CTI.cpp:
        (JSC::CTI::privateCompileMainPass):

2008-10-30  Alp Toker  <alp@nuanti.com>

        Build fix attempt for older gcc on the trunk-mac-intel build bot
        (error: initializer for scalar variable requires one element).

        Modify the initializer syntax slightly with an additional comma.

        * VM/Machine.cpp:
        (JSC::Machine::cti_op_call_JSFunction):
        (JSC::Machine::cti_op_construct_JSConstruct):
        (JSC::Machine::cti_op_resolve_func):
        (JSC::Machine::cti_op_post_inc):
        (JSC::Machine::cti_op_resolve_with_base):
        (JSC::Machine::cti_op_post_dec):

2008-10-30  Alp Toker  <alp@nuanti.com>

        Reviewed by Alexey Proskuryakov.

        https://bugs.webkit.org/show_bug.cgi?id=21571
        VoidPtrPair breaks CTI on Linux

        The VoidPtrPair return change made in r37457 does not work on Linux
        since POD structs aren't passed in registers.

        This patch uses a union to vectorize VoidPtrPair to a uint64_t and
        matches Darwin/MSVC fixing CTI/WREC on Linux.

        Alexey reports no measurable change in Mac performance with this fix.

        * VM/Machine.cpp:
        (JSC::Machine::cti_op_call_JSFunction):
        (JSC::Machine::cti_op_construct_JSConstruct):
        (JSC::Machine::cti_op_resolve_func):
        (JSC::Machine::cti_op_post_inc):
        (JSC::Machine::cti_op_resolve_with_base):
        (JSC::Machine::cti_op_post_dec):
        * VM/Machine.h:
        (JSC::):

2008-10-29  Oliver Hunt  <oliver@apple.com>

        Reviewed by Geoff Garen.

        Initial work to reduce cost of JSNumberCell allocation

        This does the initial work needed to bring more of number
        allocation into CTI code directly, rather than just falling
        back onto the slow paths if we can't guarantee that a number
        cell can be reused.

        Initial implementation only used by op_negate to make sure
        it all works.  In a negate heavy (though not dominated) test
        it results in a 10% win in the non-reusable cell case.

        * VM/CTI.cpp:
        (JSC::):
        (JSC::CTI::emitAllocateNumber):
        (JSC::CTI::emitNakedFastCall):
        (JSC::CTI::emitArithIntToImmWithJump):
        (JSC::CTI::privateCompileMainPass):
        (JSC::CTI::privateCompileSlowCases):
        * VM/CTI.h:
        * VM/CodeBlock.cpp:
        (JSC::CodeBlock::dump):
        * VM/CodeGenerator.cpp:
        (JSC::CodeGenerator::emitUnaryOp):
        * VM/CodeGenerator.h:
        (JSC::CodeGenerator::emitToJSNumber):
        (JSC::CodeGenerator::emitTypeOf):
        (JSC::CodeGenerator::emitGetPropertyNames):
        * VM/Machine.cpp:
        (JSC::Machine::privateExecute):
        * VM/Machine.h:
        * kjs/ResultType.h:
        (JSC::ResultType::isReusableNumber):
        (JSC::ResultType::toInt):
        * kjs/nodes.cpp:
        (JSC::UnaryOpNode::emitCode):
        (JSC::BinaryOpNode::emitCode):
        (JSC::EqualNode::emitCode):
        * masm/X86Assembler.h:
        (JSC::X86Assembler::):
        (JSC::X86Assembler::negl_r):
        (JSC::X86Assembler::xorpd_mr):
        * runtime/JSNumberCell.h:
        (JSC::JSNumberCell::JSNumberCell):

2008-10-29  Steve Falkenburg  <sfalken@apple.com>

        <rdar://problem/6326563> Crash on launch

        For Windows, export explicit functions rather than exporting data for atomicallyInitializedStaticMutex.
        
        Exporting data from a DLL on Windows requires specifying __declspec(dllimport) in the header used by
        callers, but __declspec(dllexport) when defined in the DLL implementation. By instead exporting
        the explicit lock/unlock functions, we can avoid this.
        
        Fixes a crash on launch, since we were previously erroneously exporting atomicallyInitializedStaticMutex as a function.
        
        Reviewed by Darin Adler.

        * wtf/Threading.h:
        (WTF::lockAtomicallyInitializedStaticMutex):
        (WTF::unlockAtomicallyInitializedStaticMutex):
        * wtf/ThreadingWin.cpp:
        (WTF::lockAtomicallyInitializedStaticMutex):
        (WTF::unlockAtomicallyInitializedStaticMutex):

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

        Reviewed by Oliver Hunt.

        Remove direct use of PropertyMap.

        * JavaScriptCore.exp:
        * runtime/JSObject.cpp:
        (JSC::JSObject::mark):
        (JSC::JSObject::put):
        (JSC::JSObject::deleteProperty):
        (JSC::JSObject::getPropertyAttributes):
        (JSC::JSObject::removeDirect):
        * runtime/JSObject.h:
        (JSC::JSObject::getDirect):
        (JSC::JSObject::getDirectLocation):
        (JSC::JSObject::hasCustomProperties):
        (JSC::JSObject::JSObject):
        (JSC::JSObject::putDirect):
        * runtime/PropertyMap.cpp:
        (JSC::PropertyMap::get):
        * runtime/PropertyMap.h:
        (JSC::PropertyMap::isEmpty):
        (JSC::PropertyMap::get):
        * runtime/StructureID.cpp:
        (JSC::StructureID::dumpStatistics):
        * runtime/StructureID.h:
        (JSC::StructureID::propertyStorageSize):
        (JSC::StructureID::get):
        (JSC::StructureID::put):
        (JSC::StructureID::remove):
        (JSC::StructureID::isEmpty):

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

        Reviewed by Geoffrey Garen.

        Rename and move the StructureID transition table to its own file.

        * GNUmakefile.am:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * runtime/StructureID.cpp:
        (JSC::StructureID::addPropertyTransition):
        * runtime/StructureID.h:
        (JSC::StructureID::):
        * runtime/StructureIDTransitionTable.h: Copied from runtime/StructureID.h.
        (JSC::StructureIDTransitionTableHash::hash):
        (JSC::StructureIDTransitionTableHash::equal):

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

        Reviewed by Cameron Zwarich.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=21958
        Pack bits in StructureID to reduce the size of each StructureID by 2 words.

        * runtime/PropertyMap.h:
        (JSC::PropertyMap::propertyMapSize):
        * runtime/StructureID.cpp:
        (JSC::StructureID::dumpStatistics): Add additional size statistics when dumping.
        (JSC::StructureID::StructureID):
        * runtime/StructureID.h:

2008-10-29  Kevin Ollivier  <kevino@theolliviers.com>

        wx build fixes after addition of runtime and ImageBuffer changes.

        * JavaScriptCoreSources.bkl:
        * jscore.bkl:

2008-10-29  Timothy Hatcher  <timothy@apple.com>

        Emit the WillExecuteStatement debugger hook before the "else" body
        when there is no block for the "else" body. This allows breakpoints
        on those statements in the Web Inspector.

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

        Reviewed by Maciej Stachowiak.

        * kjs/nodes.cpp:
        (JSC::IfElseNode::emitCode): Emit the WillExecuteStatement
        debugger hook before the else node if isn't a block.

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

        Build fix.

        * JavaScriptCore.exp: Export HashTable::deleteTable().

2008-10-28  Alp Toker  <alp@nuanti.com>

        Fix builddir != srcdir builds after kjs -> runtime breakage. Sources
        may now be generated in both kjs/ and runtime/.

        Also sort the sources list for readability.

        * GNUmakefile.am:

2008-10-28  Alp Toker  <alp@nuanti.com>

        Reviewed by Cameron Zwarich.

        Build fix attempt after kjs -> runtime rename.

        * GNUmakefile.am:

2008-10-28  Cameron Zwarich  <zwarich@apple.com>

        Not reviewed.

        Remove a duplicate includes directory.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:

2008-10-28  Cameron Zwarich  <zwarich@apple.com>

        Not reviewed.

        Attempt to fix the Windows build.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
        * JavaScriptCore.vcproj/jsc/jsc.vcproj:

2008-10-28  Dan Bernstein  <mitz@apple.com>

        Reviewed by Mark Rowe.

        - export WTF::atomicallyInitializedStaticMutex

        * JavaScriptCore.exp:

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

        Reviewed by Cameron Zwarich.
        
        Fixed CodeBlock dumping to accurately report constant register indices.

        * VM/CodeBlock.cpp:
        (JSC::CodeBlock::dump):

2008-10-28  Cameron Zwarich  <zwarich@apple.com>

        Not reviewed.

        More Qt build fixes.

        * JavaScriptCore.pri:

2008-10-28  Cameron Zwarich  <zwarich@apple.com>

        Not reviewed.

        Fix the Qt build, hopefully for real this time.

        * JavaScriptCore.pri:

2008-10-28  Cameron Zwarich  <zwarich@apple.com>

        Not reviewed.

        Fix the Qt build.

        * JavaScriptCore.pri:

2008-10-28  Cameron Zwarich  <zwarich@apple.com>

        Not reviewed.

        Fix the Windows build.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:

2008-10-28  Cameron Zwarich  <zwarich@apple.com>

        Rubber-stamped by Sam Weinig.

        Create a runtime directory in JavaScriptCore and begin moving files to
        it. This is the first step towards removing the kjs directory and
        placing files in more meaningful subdirectories of JavaScriptCore.

        * API/JSBase.cpp:
        * API/JSCallbackConstructor.cpp:
        * API/JSCallbackConstructor.h:
        * API/JSCallbackFunction.cpp:
        * API/JSClassRef.cpp:
        * API/JSClassRef.h:
        * API/JSStringRefCF.cpp:
        * API/JSValueRef.cpp:
        * API/OpaqueJSString.cpp:
        * DerivedSources.make:
        * GNUmakefile.am:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * kjs/AllInOneFile.cpp:
        * kjs/ArrayConstructor.cpp: Removed.
        * kjs/ArrayConstructor.h: Removed.
        * kjs/ArrayPrototype.cpp: Removed.
        * kjs/ArrayPrototype.h: Removed.
        * kjs/BooleanConstructor.cpp: Removed.
        * kjs/BooleanConstructor.h: Removed.
        * kjs/BooleanObject.cpp: Removed.
        * kjs/BooleanObject.h: Removed.
        * kjs/BooleanPrototype.cpp: Removed.
        * kjs/BooleanPrototype.h: Removed.
        * kjs/CallData.cpp: Removed.
        * kjs/CallData.h: Removed.
        * kjs/ClassInfo.h: Removed.
        * kjs/ConstructData.cpp: Removed.
        * kjs/ConstructData.h: Removed.
        * kjs/DateConstructor.cpp: Removed.
        * kjs/DateConstructor.h: Removed.
        * kjs/DateInstance.cpp: Removed.
        * kjs/DateInstance.h: Removed.
        * kjs/DateMath.cpp: Removed.
        * kjs/DateMath.h: Removed.
        * kjs/DatePrototype.cpp: Removed.
        * kjs/DatePrototype.h: Removed.
        * kjs/Error.cpp: Removed.
        * kjs/Error.h: Removed.
        * kjs/ErrorConstructor.cpp: Removed.
        * kjs/ErrorConstructor.h: Removed.
        * kjs/ErrorInstance.cpp: Removed.
        * kjs/ErrorInstance.h: Removed.
        * kjs/ErrorPrototype.cpp: Removed.
        * kjs/ErrorPrototype.h: Removed.
        * kjs/FunctionConstructor.cpp: Removed.
        * kjs/FunctionConstructor.h: Removed.
        * kjs/FunctionPrototype.cpp: Removed.
        * kjs/FunctionPrototype.h: Removed.
        * kjs/GlobalEvalFunction.cpp: Removed.
        * kjs/GlobalEvalFunction.h: Removed.
        * kjs/InternalFunction.cpp: Removed.
        * kjs/InternalFunction.h: Removed.
        * kjs/JSArray.cpp: Removed.
        * kjs/JSArray.h: Removed.
        * kjs/JSCell.cpp: Removed.
        * kjs/JSCell.h: Removed.
        * kjs/JSFunction.cpp: Removed.
        * kjs/JSFunction.h: Removed.
        * kjs/JSGlobalObject.cpp: Removed.
        * kjs/JSGlobalObject.h: Removed.
        * kjs/JSGlobalObjectFunctions.cpp: Removed.
        * kjs/JSGlobalObjectFunctions.h: Removed.
        * kjs/JSImmediate.cpp: Removed.
        * kjs/JSImmediate.h: Removed.
        * kjs/JSNotAnObject.cpp: Removed.
        * kjs/JSNotAnObject.h: Removed.
        * kjs/JSNumberCell.cpp: Removed.
        * kjs/JSNumberCell.h: Removed.
        * kjs/JSObject.cpp: Removed.
        * kjs/JSObject.h: Removed.
        * kjs/JSString.cpp: Removed.
        * kjs/JSString.h: Removed.
        * kjs/JSValue.cpp: Removed.
        * kjs/JSValue.h: Removed.
        * kjs/JSVariableObject.cpp: Removed.
        * kjs/JSVariableObject.h: Removed.
        * kjs/JSWrapperObject.cpp: Removed.
        * kjs/JSWrapperObject.h: Removed.
        * kjs/MathObject.cpp: Removed.
        * kjs/MathObject.h: Removed.
        * kjs/NativeErrorConstructor.cpp: Removed.
        * kjs/NativeErrorConstructor.h: Removed.
        * kjs/NativeErrorPrototype.cpp: Removed.
        * kjs/NativeErrorPrototype.h: Removed.
        * kjs/NumberConstructor.cpp: Removed.
        * kjs/NumberConstructor.h: Removed.
        * kjs/NumberObject.cpp: Removed.
        * kjs/NumberObject.h: Removed.
        * kjs/NumberPrototype.cpp: Removed.
        * kjs/NumberPrototype.h: Removed.
        * kjs/ObjectConstructor.cpp: Removed.
        * kjs/ObjectConstructor.h: Removed.
        * kjs/ObjectPrototype.cpp: Removed.
        * kjs/ObjectPrototype.h: Removed.
        * kjs/PropertyMap.cpp: Removed.
        * kjs/PropertyMap.h: Removed.
        * kjs/PropertySlot.cpp: Removed.
        * kjs/PropertySlot.h: Removed.
        * kjs/PrototypeFunction.cpp: Removed.
        * kjs/PrototypeFunction.h: Removed.
        * kjs/PutPropertySlot.h: Removed.
        * kjs/SmallStrings.cpp: Removed.
        * kjs/SmallStrings.h: Removed.
        * kjs/StringConstructor.cpp: Removed.
        * kjs/StringConstructor.h: Removed.
        * kjs/StringObject.cpp: Removed.
        * kjs/StringObject.h: Removed.
        * kjs/StringObjectThatMasqueradesAsUndefined.h: Removed.
        * kjs/StringPrototype.cpp: Removed.
        * kjs/StringPrototype.h: Removed.
        * kjs/StructureID.cpp: Removed.
        * kjs/StructureID.h: Removed.
        * kjs/completion.h:
        * kjs/interpreter.h:
        * runtime: Added.
        * runtime/ArrayConstructor.cpp: Copied from kjs/ArrayConstructor.cpp.
        * runtime/ArrayConstructor.h: Copied from kjs/ArrayConstructor.h.
        * runtime/ArrayPrototype.cpp: Copied from kjs/ArrayPrototype.cpp.
        * runtime/ArrayPrototype.h: Copied from kjs/ArrayPrototype.h.
        * runtime/BooleanConstructor.cpp: Copied from kjs/BooleanConstructor.cpp.
        * runtime/BooleanConstructor.h: Copied from kjs/BooleanConstructor.h.
        * runtime/BooleanObject.cpp: Copied from kjs/BooleanObject.cpp.
        * runtime/BooleanObject.h: Copied from kjs/BooleanObject.h.
        * runtime/BooleanPrototype.cpp: Copied from kjs/BooleanPrototype.cpp.
        * runtime/BooleanPrototype.h: Copied from kjs/BooleanPrototype.h.
        * runtime/CallData.cpp: Copied from kjs/CallData.cpp.
        * runtime/CallData.h: Copied from kjs/CallData.h.
        * runtime/ClassInfo.h: Copied from kjs/ClassInfo.h.
        * runtime/ConstructData.cpp: Copied from kjs/ConstructData.cpp.
        * runtime/ConstructData.h: Copied from kjs/ConstructData.h.
        * runtime/DateConstructor.cpp: Copied from kjs/DateConstructor.cpp.
        * runtime/DateConstructor.h: Copied from kjs/DateConstructor.h.
        * runtime/DateInstance.cpp: Copied from kjs/DateInstance.cpp.
        * runtime/DateInstance.h: Copied from kjs/DateInstance.h.
        * runtime/DateMath.cpp: Copied from kjs/DateMath.cpp.
        * runtime/DateMath.h: Copied from kjs/DateMath.h.
        * runtime/DatePrototype.cpp: Copied from kjs/DatePrototype.cpp.
        * runtime/DatePrototype.h: Copied from kjs/DatePrototype.h.
        * runtime/Error.cpp: Copied from kjs/Error.cpp.
        * runtime/Error.h: Copied from kjs/Error.h.
        * runtime/ErrorConstructor.cpp: Copied from kjs/ErrorConstructor.cpp.
        * runtime/ErrorConstructor.h: Copied from kjs/ErrorConstructor.h.
        * runtime/ErrorInstance.cpp: Copied from kjs/ErrorInstance.cpp.
        * runtime/ErrorInstance.h: Copied from kjs/ErrorInstance.h.
        * runtime/ErrorPrototype.cpp: Copied from kjs/ErrorPrototype.cpp.
        * runtime/ErrorPrototype.h: Copied from kjs/ErrorPrototype.h.
        * runtime/FunctionConstructor.cpp: Copied from kjs/FunctionConstructor.cpp.
        * runtime/FunctionConstructor.h: Copied from kjs/FunctionConstructor.h.
        * runtime/FunctionPrototype.cpp: Copied from kjs/FunctionPrototype.cpp.
        * runtime/FunctionPrototype.h: Copied from kjs/FunctionPrototype.h.
        * runtime/GlobalEvalFunction.cpp: Copied from kjs/GlobalEvalFunction.cpp.
        * runtime/GlobalEvalFunction.h: Copied from kjs/GlobalEvalFunction.h.
        * runtime/InternalFunction.cpp: Copied from kjs/InternalFunction.cpp.
        * runtime/InternalFunction.h: Copied from kjs/InternalFunction.h.
        * runtime/JSArray.cpp: Copied from kjs/JSArray.cpp.
        * runtime/JSArray.h: Copied from kjs/JSArray.h.
        * runtime/JSCell.cpp: Copied from kjs/JSCell.cpp.
        * runtime/JSCell.h: Copied from kjs/JSCell.h.
        * runtime/JSFunction.cpp: Copied from kjs/JSFunction.cpp.
        * runtime/JSFunction.h: Copied from kjs/JSFunction.h.
        * runtime/JSGlobalObject.cpp: Copied from kjs/JSGlobalObject.cpp.
        * runtime/JSGlobalObject.h: Copied from kjs/JSGlobalObject.h.
        * runtime/JSGlobalObjectFunctions.cpp: Copied from kjs/JSGlobalObjectFunctions.cpp.
        * runtime/JSGlobalObjectFunctions.h: Copied from kjs/JSGlobalObjectFunctions.h.
        * runtime/JSImmediate.cpp: Copied from kjs/JSImmediate.cpp.
        * runtime/JSImmediate.h: Copied from kjs/JSImmediate.h.
        * runtime/JSNotAnObject.cpp: Copied from kjs/JSNotAnObject.cpp.
        * runtime/JSNotAnObject.h: Copied from kjs/JSNotAnObject.h.
        * runtime/JSNumberCell.cpp: Copied from kjs/JSNumberCell.cpp.
        * runtime/JSNumberCell.h: Copied from kjs/JSNumberCell.h.
        * runtime/JSObject.cpp: Copied from kjs/JSObject.cpp.
        * runtime/JSObject.h: Copied from kjs/JSObject.h.
        * runtime/JSString.cpp: Copied from kjs/JSString.cpp.
        * runtime/JSString.h: Copied from kjs/JSString.h.
        * runtime/JSValue.cpp: Copied from kjs/JSValue.cpp.
        * runtime/JSValue.h: Copied from kjs/JSValue.h.
        * runtime/JSVariableObject.cpp: Copied from kjs/JSVariableObject.cpp.
        * runtime/JSVariableObject.h: Copied from kjs/JSVariableObject.h.
        * runtime/JSWrapperObject.cpp: Copied from kjs/JSWrapperObject.cpp.
        * runtime/JSWrapperObject.h: Copied from kjs/JSWrapperObject.h.
        * runtime/MathObject.cpp: Copied from kjs/MathObject.cpp.
        * runtime/MathObject.h: Copied from kjs/MathObject.h.
        * runtime/NativeErrorConstructor.cpp: Copied from kjs/NativeErrorConstructor.cpp.
        * runtime/NativeErrorConstructor.h: Copied from kjs/NativeErrorConstructor.h.
        * runtime/NativeErrorPrototype.cpp: Copied from kjs/NativeErrorPrototype.cpp.
        * runtime/NativeErrorPrototype.h: Copied from kjs/NativeErrorPrototype.h.
        * runtime/NumberConstructor.cpp: Copied from kjs/NumberConstructor.cpp.
        * runtime/NumberConstructor.h: Copied from kjs/NumberConstructor.h.
        * runtime/NumberObject.cpp: Copied from kjs/NumberObject.cpp.
        * runtime/NumberObject.h: Copied from kjs/NumberObject.h.
        * runtime/NumberPrototype.cpp: Copied from kjs/NumberPrototype.cpp.
        * runtime/NumberPrototype.h: Copied from kjs/NumberPrototype.h.
        * runtime/ObjectConstructor.cpp: Copied from kjs/ObjectConstructor.cpp.
        * runtime/ObjectConstructor.h: Copied from kjs/ObjectConstructor.h.
        * runtime/ObjectPrototype.cpp: Copied from kjs/ObjectPrototype.cpp.
        * runtime/ObjectPrototype.h: Copied from kjs/ObjectPrototype.h.
        * runtime/PropertyMap.cpp: Copied from kjs/PropertyMap.cpp.
        * runtime/PropertyMap.h: Copied from kjs/PropertyMap.h.
        * runtime/PropertySlot.cpp: Copied from kjs/PropertySlot.cpp.
        * runtime/PropertySlot.h: Copied from kjs/PropertySlot.h.
        * runtime/PrototypeFunction.cpp: Copied from kjs/PrototypeFunction.cpp.
        * runtime/PrototypeFunction.h: Copied from kjs/PrototypeFunction.h.
        * runtime/PutPropertySlot.h: Copied from kjs/PutPropertySlot.h.
        * runtime/SmallStrings.cpp: Copied from kjs/SmallStrings.cpp.
        * runtime/SmallStrings.h: Copied from kjs/SmallStrings.h.
        * runtime/StringConstructor.cpp: Copied from kjs/StringConstructor.cpp.
        * runtime/StringConstructor.h: Copied from kjs/StringConstructor.h.
        * runtime/StringObject.cpp: Copied from kjs/StringObject.cpp.
        * runtime/StringObject.h: Copied from kjs/StringObject.h.
        * runtime/StringObjectThatMasqueradesAsUndefined.h: Copied from kjs/StringObjectThatMasqueradesAsUndefined.h.
        * runtime/StringPrototype.cpp: Copied from kjs/StringPrototype.cpp.
        * runtime/StringPrototype.h: Copied from kjs/StringPrototype.h.
        * runtime/StructureID.cpp: Copied from kjs/StructureID.cpp.
        * runtime/StructureID.h: Copied from kjs/StructureID.h.

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

        Reviewed by Sam Weinig.
        
        Fixed https://bugs.webkit.org/show_bug.cgi?id=21919
        Sampler reports bogus time in op_enter during 3d-raytrace.js
        
        Fixed a bug where we would pass the incorrect Instruction* during some
        parts of CTI codegen.

        * VM/CTI.cpp:
        (JSC::CTI::privateCompileMainPass):
        (JSC::CTI::privateCompileSlowCases):
        * VM/SamplingTool.cpp:
        (JSC::SamplingTool::run):
        * wtf/Platform.h:

2008-10-28  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Dan Bernstein.

        -Removed unused includes.
        Apparent .4% speedup in Sunspider

        * kjs/JSObject.cpp:
        * kjs/interpreter.cpp:

2008-10-28  Alp Toker  <alp@nuanti.com>

        Include copyright license files in the autotools dist target.

        Change suggested by Mike Hommey.

        * GNUmakefile.am:

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

        Reviewed by Maciej Stachowiak.
        
        Stop discarding CodeBlock samples that can't be charged to a specific
        opcode. Instead, charge the relevant CodeBlock, and provide a footnote
        explaining the situation.
        
        This will help us tell which CodeBlocks are hot, even if we can't
        identify specific lines of code within the CodeBlocks.

        * VM/SamplingTool.cpp:
        (JSC::ScopeSampleRecord::sample):
        (JSC::compareScopeSampleRecords):
        (JSC::SamplingTool::dump):

        * VM/SamplingTool.h:
        (JSC::ScopeSampleRecord::ScopeSampleRecord):
        (JSC::ScopeSampleRecord::~ScopeSampleRecord):

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

        Reviewed by Sam Weinig.
        
        Added a mutex around the SamplingTool's ScopeNode* map, to solve a crash
        when sampling the v8 tests.

        * VM/SamplingTool.cpp:
        (JSC::SamplingTool::run):
        (JSC::SamplingTool::notifyOfScope):
        * VM/SamplingTool.h: Since new ScopeNodes can be created after
        the SamplingTools has begun sampling, reads and writes to / from the
        map need to be synchronized. Shark says this doesn't measurably increase
        sampling overhead.

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

        Not reviewed.
        
        Try to fix Windows build.

        * VM/Machine.cpp:
        (JSC::Machine::privateExecute): Provide a dummy value to the
        HostCallRecord in CTI non-sampling builds, to silence compiler warning.

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

        Not reviewed.
        
        Try to fix Windows build.

        * VM/SamplingTool.h:
        (JSC::SamplingTool::encodeSample): Explicitly cast bool to int, to
        silence compiler warning.

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

        Reviewed by Sam Weinig, with Gavin Barraclough's help.
        
        Fixed Sampling Tool:
            - Made CodeBlock sampling work with CTI
            - Improved accuracy by unifying most sampling data into a single
              32bit word, which can be written / read atomically.
            - Split out three different #ifdefs for modularity: OPCODE_SAMPLING;
              CODEBLOCK_SAMPLING; OPCODE_STATS.
            - Improved reporting clarity
            - Refactored for code clarity

        * JavaScriptCore.exp: Exported another symbol.

        * VM/CTI.cpp:
        (JSC::CTI::emitCTICall):
        (JSC::CTI::compileOpCall):
        (JSC::CTI::emitSlowScriptCheck):
        (JSC::CTI::compileBinaryArithOpSlowCase):
        (JSC::CTI::privateCompileMainPass):
        (JSC::CTI::privateCompileSlowCases):
        (JSC::CTI::privateCompile):
        * VM/CTI.h: Updated CTI codegen to use the unified SamplingTool interface
        for encoding samples. (This required passing the current vPC to a lot
        more functions, since the unified interface samples the current vPC.)
        Added hooks for writing the current CodeBlock* on function entry and
        after a function call, for the sake of the CodeBlock sampler. Removed
        obsolete hook for clearing the current sample inside op_end. Also removed
        the custom enum used to differentiate flavors of op_call, since the
        OpcodeID enum works just as well. (This was important in an earlier
        version of the patch, but now it's just cleanup.)

        * VM/CodeBlock.cpp:
        (JSC::CodeBlock::lineNumberForVPC):
        * VM/CodeBlock.h: Upated for refactored #ifdefs. Changed lineNumberForVPC
        to be robust against vPCs not recorded for exception handling, since
        the Sampler may ask for an arbitrary vPC.

        * VM/Machine.cpp:
        (JSC::Machine::execute):
        (JSC::Machine::privateExecute):
        (JSC::Machine::cti_op_call_NotJSFunction):
        (JSC::Machine::cti_op_construct_NotJSConstruct):
        * VM/Machine.h:
        (JSC::Machine::setSampler):
        (JSC::Machine::sampler):
        (JSC::Machine::jitCodeBuffer): Upated for refactored #ifdefs. Changed
        Machine to use SamplingTool helper objects to record movement in and
        out of host code. This makes samples a bit more precise.
        
        * VM/Opcode.cpp:
        (JSC::OpcodeStats::~OpcodeStats):
        * VM/Opcode.h: Upated for refactored #ifdefs. Added a little more padding,
        to accomodate our more verbose opcode names.

        * VM/SamplingTool.cpp:
        (JSC::ScopeSampleRecord::sample): Only count a sample toward our total
        if we actually record it. This solves cases where a CodeBlock will
        claim to have been sampled many times, with reported samples that don't
        match.

        (JSC::SamplingTool::run): Read the current sample into a Sample helper
        object, to ensure that the data doesn't change while we're analyzing it,
        and to help decode the data. Only access the CodeBlock sampling hash
        table if CodeBlock sampling has been enabled, so non-CodeBlock sampling
        runs can operate with even less overhead.

        (JSC::SamplingTool::dump): I reorganized this code a lot to print the
        most important info at the top, print as a table, annotate and document
        the stuff I didn't understand when I started, etc.

        * VM/SamplingTool.h: New helper classes, described above.

        * kjs/Parser.h:
        * kjs/Shell.cpp:
        (runWithScripts):
        * kjs/nodes.cpp:
        (JSC::ScopeNode::ScopeNode): Updated for new sampling APIs.

        * wtf/Platform.h: Moved sampling #defines here, since our custom is to
        put ENABLE #defines into Platform.h. Made explicit the fact that
        CODEBLOCK_SAMPLING depends on OPCODE_SAMPLING.

2008-10-25  Jan Michael Alonzo  <jmalonzo@webkit.org>

        JSC Build fix, not reviewed.

        * VM/CTI.cpp: add missing include stdio.h for debug builds

2008-10-24  Eric Seidel  <eric@webkit.org>

        Reviewed by Darin Adler.
        
        Get rid of a bonus ASSERT when using a null string as a regexp.
        Specifically calling: RegularExpression::match() with String::empty()
        will hit this ASSERT.
        Chromium hits this, but I don't know of any way to make a layout test.

        * pcre/pcre_exec.cpp:
        (jsRegExpExecute):

2008-10-24  Alexey Proskuryakov  <ap@webkit.org>

        Suggested and rubber-stamped by Geoff Garen.

        Fix a crash when opening Font Picker.

        The change also hopefully fixes this bug, which I could never reproduce:
        https://bugs.webkit.org/show_bug.cgi?id=20241
        <rdar://problem/6290576> Safari crashes at JSValueUnprotect() when fontpicker view close

        * API/JSContextRef.cpp: (JSContextGetGlobalObject): Use lexical global object instead of
        dynamic one.

2008-10-24  Cameron Zwarich  <zwarich@apple.com>

        Reviewed by Geoff Garen.

        Remove ScopeChainNode::bottom() and inline it into its only caller,
        ScopeChainnode::globalObject().

        * kjs/JSGlobalObject.h:
        (JSC::ScopeChainNode::globalObject):
        * kjs/ScopeChain.h:
        (JSC::ScopeChain::bottom):

2008-10-24  Cameron Zwarich  <zwarich@apple.com>

        Reviewed by Maciej Stachowiak.

        Bug 21862: Create JSFunction prototype property lazily
        <https://bugs.webkit.org/show_bug.cgi?id=21862>

        This is a 1.5% speedup on SunSpider and a 1.4% speedup on the V8
        benchmark suite, including a 3.8% speedup on Earley-Boyer.

        * kjs/JSFunction.cpp:
        (JSC::JSFunction::getOwnPropertySlot):
        * kjs/nodes.cpp:
        (JSC::FuncDeclNode::makeFunction):
        (JSC::FuncExprNode::makeFunction):

2008-10-24  Greg Bolsinga  <bolsinga@apple.com>

        Reviewed by Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=21475
        
        Provide support for the Geolocation API
        
        http://dev.w3.org/geo/api/spec-source.html

        * wtf/Platform.h: ENABLE_GEOLOCATION defaults to 0

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

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

        * API/APICast.h:
        * API/JSCallbackConstructor.h:
        * API/JSCallbackFunction.cpp:
        * API/JSCallbackFunction.h:
        * API/JSCallbackObject.h:
        * API/JSCallbackObjectFunctions.h:
        * API/JSContextRef.cpp:
        * API/JSObjectRef.cpp:
        * API/JSValueRef.cpp:
        * VM/CTI.cpp:
        * VM/CTI.h:
        * VM/CodeBlock.cpp:
        * VM/CodeBlock.h:
        * VM/CodeGenerator.cpp:
        * VM/CodeGenerator.h:
        * VM/ExceptionHelpers.cpp:
        * VM/ExceptionHelpers.h:
        * VM/JSPropertyNameIterator.cpp:
        * VM/JSPropertyNameIterator.h:
        * VM/Machine.cpp:
        * VM/Machine.h:
        * VM/Register.h:
        * kjs/ArgList.cpp:
        * kjs/ArgList.h:
        * kjs/Arguments.cpp:
        * kjs/Arguments.h:
        * kjs/ArrayConstructor.cpp:
        * kjs/ArrayPrototype.cpp:
        * kjs/BooleanConstructor.cpp:
        * kjs/BooleanConstructor.h:
        * kjs/BooleanObject.h:
        * kjs/BooleanPrototype.cpp:
        * kjs/CallData.cpp:
        * kjs/CallData.h:
        * kjs/ConstructData.cpp:
        * kjs/ConstructData.h:
        * kjs/DateConstructor.cpp:
        * kjs/DateInstance.h:
        * kjs/DatePrototype.cpp:
        * kjs/DatePrototype.h:
        * kjs/DebuggerCallFrame.cpp:
        * kjs/DebuggerCallFrame.h:
        * kjs/ErrorConstructor.cpp:
        * kjs/ErrorPrototype.cpp:
        * kjs/ExecState.cpp:
        * kjs/ExecState.h:
        * kjs/FunctionConstructor.cpp:
        * kjs/FunctionPrototype.cpp:
        * kjs/FunctionPrototype.h:
        * kjs/GetterSetter.cpp:
        * kjs/GetterSetter.h:
        * kjs/InternalFunction.h:
        * kjs/JSActivation.cpp:
        * kjs/JSActivation.h:
        * kjs/JSArray.cpp:
        * kjs/JSArray.h:
        * kjs/JSCell.cpp:
        * kjs/JSCell.h:
        * kjs/JSFunction.cpp:
        * kjs/JSFunction.h:
        * kjs/JSGlobalData.h:
        * kjs/JSGlobalObject.cpp:
        * kjs/JSGlobalObject.h:
        * kjs/JSGlobalObjectFunctions.cpp:
        * kjs/JSGlobalObjectFunctions.h:
        * kjs/JSImmediate.cpp:
        * kjs/JSImmediate.h:
        * kjs/JSNotAnObject.cpp:
        * kjs/JSNotAnObject.h:
        * kjs/JSNumberCell.cpp:
        * kjs/JSNumberCell.h:
        * kjs/JSObject.cpp:
        * kjs/JSObject.h:
        * kjs/JSStaticScopeObject.cpp:
        * kjs/JSStaticScopeObject.h:
        * kjs/JSString.cpp:
        * kjs/JSString.h:
        * kjs/JSValue.h:
        * kjs/JSVariableObject.h:
        * kjs/JSWrapperObject.h:
        * kjs/MathObject.cpp:
        * kjs/MathObject.h:
        * kjs/NativeErrorConstructor.cpp:
        * kjs/NumberConstructor.cpp:
        * kjs/NumberConstructor.h:
        * kjs/NumberObject.cpp:
        * kjs/NumberObject.h:
        * kjs/NumberPrototype.cpp:
        * kjs/ObjectConstructor.cpp:
        * kjs/ObjectPrototype.cpp:
        * kjs/ObjectPrototype.h:
        * kjs/PropertyMap.h:
        * kjs/PropertySlot.cpp:
        * kjs/PropertySlot.h:
        * kjs/RegExpConstructor.cpp:
        * kjs/RegExpConstructor.h:
        * kjs/RegExpMatchesArray.h:
        * kjs/RegExpObject.cpp:
        * kjs/RegExpObject.h:
        * kjs/RegExpPrototype.cpp:
        * kjs/Shell.cpp:
        * kjs/StringConstructor.cpp:
        * kjs/StringObject.cpp:
        * kjs/StringObject.h:
        * kjs/StringObjectThatMasqueradesAsUndefined.h:
        * kjs/StringPrototype.cpp:
        * kjs/StructureID.cpp:
        * kjs/StructureID.h:
        * kjs/collector.cpp:
        * kjs/collector.h:
        * kjs/completion.h:
        * kjs/grammar.y:
        * kjs/interpreter.cpp:
        * kjs/interpreter.h:
        * kjs/lookup.cpp:
        * kjs/lookup.h:
        * kjs/nodes.h:
        * kjs/operations.cpp:
        * kjs/operations.h:
        * kjs/protect.h:
        * profiler/ProfileGenerator.cpp:
        * profiler/Profiler.cpp:
        * profiler/Profiler.h:
        Use JSValue* instead of JSValuePtr.

2008-10-24  David Kilzer  <ddkilzer@apple.com>

        Rolled out r37840.

        * wtf/Platform.h:

2008-10-23  Greg Bolsinga  <bolsinga@apple.com>

        Reviewed by Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=21475
        
        Provide support for the Geolocation API
        
        http://dev.w3.org/geo/api/spec-source.html

        * wtf/Platform.h: ENABLE_GEOLOCATION defaults to 0

2008-10-23  David Kilzer  <ddkilzer@apple.com>

        Bug 21832: Fix scripts using 'new File::Temp' for Perl 5.10

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

        Reviewed by Sam Weinig.

        * pcre/dftables: Use imported tempfile() from File::Temp instead of
        'new File::Temp' to make the script work with Perl 5.10.

2008-10-23  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Oliver Hunt.

        Fix hideous pathological case performance when looking up repatch info, bug #21727.

        When repatching JIT code to optimize we look up records providing information about
        the generated code (also used to track recsources used in linking to be later released). 
        The lookup was being performed using a linear scan of all such records.

        (1) Split up the different types of reptach information.  This means we can search them
            separately, and in some cases should reduce their size.
        (2) In the case of property accesses, search with a binary chop over the data.
        (3) In the case of calls, pass a pointer to the repatch info into the relink function.

        * VM/CTI.cpp:
        (JSC::CTI::CTI):
        (JSC::CTI::compileOpCall):
        (JSC::CTI::privateCompileMainPass):
        (JSC::CTI::privateCompileSlowCases):
        (JSC::CTI::privateCompile):
        (JSC::CTI::unlinkCall):
        (JSC::CTI::linkCall):
        * VM/CTI.h:
        * VM/CodeBlock.cpp:
        (JSC::CodeBlock::dump):
        (JSC::CodeBlock::~CodeBlock):
        (JSC::CodeBlock::unlinkCallers):
        (JSC::CodeBlock::derefStructureIDs):
        * VM/CodeBlock.h:
        (JSC::StructureStubInfo::StructureStubInfo):
        (JSC::CallLinkInfo::CallLinkInfo):
        (JSC::CallLinkInfo::setUnlinked):
        (JSC::CallLinkInfo::isLinked):
        (JSC::getStructureStubInfoReturnLocation):
        (JSC::binaryChop):
        (JSC::CodeBlock::addCaller):
        (JSC::CodeBlock::getStubInfo):
        * VM/CodeGenerator.cpp:
        (JSC::CodeGenerator::emitResolve):
        (JSC::CodeGenerator::emitGetById):
        (JSC::CodeGenerator::emitPutById):
        (JSC::CodeGenerator::emitCall):
        (JSC::CodeGenerator::emitConstruct):
        * VM/Machine.cpp:
        (JSC::Machine::cti_vm_lazyLinkCall):

2008-10-23  Peter Kasting  <pkasting@google.com>

        Reviewed by Adam Roben.

        https://bugs.webkit.org/show_bug.cgi?id=21833
        Place JavaScript Debugger hooks under #if ENABLE(JAVASCRIPT_DEBUGGER).

        * wtf/Platform.h:

2008-10-23  David Kilzer  <ddkilzer@apple.com>

        Bug 21831: Fix create_hash_table for Perl 5.10

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

        Reviewed by Sam Weinig.

        * kjs/create_hash_table: Escaped square brackets so that Perl 5.10
        doesn't try to use @nameEntries.

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

        - roll out https://bugs.webkit.org/show_bug.cgi?id=21732
          to remove the JSValuePtr class, to fix two problems

            1) slowness under MSVC, since it doesn't handle a
               class with a single pointer in it as efficiently
               as a pointer

            2) uninitialized pointers in Vector

        * JavaScriptCore.exp: Updated.

        * API/APICast.h:
        (toRef):
        * VM/CTI.cpp:
        (JSC::CTI::asInteger):
        * VM/CodeGenerator.cpp:
        (JSC::CodeGenerator::addConstant):
        * VM/CodeGenerator.h:
        (JSC::CodeGenerator::JSValueHashTraits::constructDeletedValue):
        (JSC::CodeGenerator::JSValueHashTraits::isDeletedValue):
        * VM/Machine.cpp:
        (JSC::Machine::cti_op_add):
        (JSC::Machine::cti_op_pre_inc):
        (JSC::Machine::cti_op_get_by_id):
        (JSC::Machine::cti_op_get_by_id_second):
        (JSC::Machine::cti_op_get_by_id_generic):
        (JSC::Machine::cti_op_get_by_id_fail):
        (JSC::Machine::cti_op_instanceof):
        (JSC::Machine::cti_op_del_by_id):
        (JSC::Machine::cti_op_mul):
        (JSC::Machine::cti_op_call_NotJSFunction):
        (JSC::Machine::cti_op_resolve):
        (JSC::Machine::cti_op_construct_NotJSConstruct):
        (JSC::Machine::cti_op_get_by_val):
        (JSC::Machine::cti_op_sub):
        (JSC::Machine::cti_op_lesseq):
        (JSC::Machine::cti_op_negate):
        (JSC::Machine::cti_op_resolve_base):
        (JSC::Machine::cti_op_resolve_skip):
        (JSC::Machine::cti_op_resolve_global):
        (JSC::Machine::cti_op_div):
        (JSC::Machine::cti_op_pre_dec):
        (JSC::Machine::cti_op_not):
        (JSC::Machine::cti_op_eq):
        (JSC::Machine::cti_op_lshift):
        (JSC::Machine::cti_op_bitand):
        (JSC::Machine::cti_op_rshift):
        (JSC::Machine::cti_op_bitnot):
        (JSC::Machine::cti_op_mod):
        (JSC::Machine::cti_op_less):
        (JSC::Machine::cti_op_neq):
        (JSC::Machine::cti_op_urshift):
        (JSC::Machine::cti_op_bitxor):
        (JSC::Machine::cti_op_bitor):
        (JSC::Machine::cti_op_call_eval):
        (JSC::Machine::cti_op_throw):
        (JSC::Machine::cti_op_next_pname):
        (JSC::Machine::cti_op_typeof):
        (JSC::Machine::cti_op_is_undefined):
        (JSC::Machine::cti_op_is_boolean):
        (JSC::Machine::cti_op_is_number):
        (JSC::Machine::cti_op_is_string):
        (JSC::Machine::cti_op_is_object):
        (JSC::Machine::cti_op_is_function):
        (JSC::Machine::cti_op_stricteq):
        (JSC::Machine::cti_op_nstricteq):
        (JSC::Machine::cti_op_to_jsnumber):
        (JSC::Machine::cti_op_in):
        (JSC::Machine::cti_op_del_by_val):
        (JSC::Machine::cti_vm_throw):
        Removed calls to payload functions.

        * VM/Register.h:
        (JSC::Register::Register): Removed overload for JSCell and call
        to payload function.

        * kjs/JSCell.h: Changed JSCell to derive from JSValue again.
        Removed JSValuePtr constructor.
        (JSC::asCell): Changed cast from reinterpret_cast to static_cast.

        * kjs/JSImmediate.h: Removed JSValuePtr class. Added typedef back.

        * kjs/JSValue.h:
        (JSC::JSValue::JSValue): Added empty protected inline constructor back.
        (JSC::JSValue::~JSValue): Same for destructor.
        Removed == and != operator for JSValuePtr.

        * kjs/PropertySlot.h:
        (JSC::PropertySlot::PropertySlot): Chnaged argument to const JSValue*
        and added a const_cast.

        * kjs/protect.h: Removed overloads and specialization for JSValuePtr.

2008-10-22  Oliver Hunt  <oliver@apple.com>

        Reviewed by Maciej Stachowiak.

        Really "fix" CTI mode on windows 2k3.

        This adds new methods fastMallocExecutable and fastFreeExecutable
        to wrap allocation for cti code.  This still just makes fastMalloc
        return executable memory all the time, which will be fixed in a
        later patch.

        However in windows debug builds all executable allocations will be
        allocated on separate executable pages, which should resolve any
        remaining 2k3 issues.  Conveniently the 2k3 bot will now also fail
        if there are any fastFree vs. fastFreeExecutable errors.

        * ChangeLog:
        * VM/CodeBlock.cpp:
        (JSC::CodeBlock::~CodeBlock):
        * kjs/regexp.cpp:
        (JSC::RegExp::~RegExp):
        * masm/X86Assembler.h:
        (JSC::JITCodeBuffer::copy):
        * wtf/FastMalloc.cpp:
        (WTF::fastMallocExecutable):
        (WTF::fastFreeExecutable):
        (WTF::TCMallocStats::fastMallocExecutable):
        (WTF::TCMallocStats::fastFreeExecutable):
        * wtf/FastMalloc.h:

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

        A bit over 3% faster on V8 tests.

        * JavascriptCore.exp: Export leak-related functions..

        * API/JSCallbackConstructor.h:
        (JSC::JSCallbackConstructor::createStructureID): Set HasStandardGetOwnPropertySlot
        since this class doesn't override getPropertySlot.
        * API/JSCallbackFunction.h:
        (JSC::JSCallbackFunction::createStructureID): Ditto.

        * VM/ExceptionHelpers.cpp:
        (JSC::InterruptedExecutionError::InterruptedExecutionError): Use a structure
        that's created just for this class instead of trying to share a single "null
        prototype" structure.

        * VM/Machine.cpp:
        (JSC::Machine::cti_op_create_arguments_no_params): Rename
        Arguments::ArgumentsNoParameters to Arguments::NoParameters.
        
        * kjs/Arguments.h: Rename the enum from Arguments::ArgumentsParameters to
        Arguments::NoParametersType and the value from Arguments::ArgumentsNoParameters
        to Arguments::NoParameters.
        (JSC::Arguments::createStructureID): Added. Returns a structure without
        HasStandardGetOwnPropertySlot since this class overrides getOwnPropertySlot.
        (JSC::Arguments::Arguments): Added an assertion that there are no parameters.

        * kjs/DatePrototype.h:
        (JSC::DatePrototype::createStructureID): Added. Returns a structure without
        HasStandardGetOwnPropertySlot since this class overrides getOwnPropertySlot.

        * kjs/FunctionPrototype.h:
        (JSC::FunctionPrototype::createStructureID): Set HasStandardGetOwnPropertySlot
        since this class doesn't override getPropertySlot.
        * kjs/InternalFunction.h:
        (JSC::InternalFunction::createStructureID): Ditto.

        * kjs/JSArray.h:
        (JSC::JSArray::createStructureID): Added. Returns a structure without
        HasStandardGetOwnPropertySlot since this class overrides getOwnPropertySlot.

        * kjs/JSCell.h: Added declaration of fastGetOwnPropertySlot; a non-virtual
        version that uses the structure bit to decide whether to call the virtual
        version.

        * kjs/JSFunction.h:
        (JSC::JSFunction::createStructureID): Added. Returns a structure without
        HasStandardGetOwnPropertySlot since this class overrides getOwnPropertySlot.

        * kjs/JSGlobalData.cpp:
        (JSC::JSGlobalData::JSGlobalData): Initialize new structures; removed
        nullProtoStructureID.
        * kjs/JSGlobalData.h: Added new structures. Removed nullProtoStructureID.

        * kjs/JSGlobalObject.h:
        (JSC::JSGlobalObject::createStructureID): Added. Returns a structure without
        HasStandardGetOwnPropertySlot since this class overrides getOwnPropertySlot.

        * kjs/JSNotAnObject.h:
        (JSC::JSNotAnObjectErrorStub::JSNotAnObjectErrorStub): Use a structure
        that's created just for this class instead of trying to share a single "null
        prototype" structure.
        (JSC::JSNotAnObjectErrorStub::isNotAnObjectErrorStub): Marked this function
        virtual for clarity and made it private since no one should call it if they
        already have a pointer to this specific type.
        (JSC::JSNotAnObject::JSNotAnObject): Use a structure that's created just
        for this class instead of trying to share a single "null prototype" structure.
        (JSC::JSNotAnObject::createStructureID): Added. Returns a structure without
        HasStandardGetOwnPropertySlot since this class overrides getOwnPropertySlot.

        * kjs/JSObject.h:
        (JSC::JSObject::createStructureID): Added HasStandardGetOwnPropertySlot.
        (JSC::JSObject::inlineGetOwnPropertySlot): Added. Used so we can share code
        between getOwnPropertySlot and fastGetOwnPropertySlot.
        (JSC::JSObject::getOwnPropertySlot): Moved so that functions are above the
        functions that call them. Moved the guts of this function into
        inlineGetOwnPropertySlot.
        (JSC::JSCell::fastGetOwnPropertySlot): Added. Checks the
        HasStandardGetOwnPropertySlot bit and if it's set, calls
        inlineGetOwnPropertySlot, otherwise calls getOwnPropertySlot.
        (JSC::JSObject::getPropertySlot): Changed to call fastGetOwnPropertySlot.
        (JSC::JSValue::get): Changed to call fastGetOwnPropertySlot.

        * kjs/JSWrapperObject.h: Made constructor protected to emphasize that
        this class is only a base class and never instantiated.

        * kjs/MathObject.h:
        (JSC::MathObject::createStructureID): Added. Returns a structure without
        HasStandardGetOwnPropertySlot since this class overrides getOwnPropertySlot.
        * kjs/NumberConstructor.h:
        (JSC::NumberConstructor::createStructureID): Ditto.
        * kjs/RegExpConstructor.h:
        (JSC::RegExpConstructor::createStructureID): Ditto.
        * kjs/RegExpObject.h:
        (JSC::RegExpObject::createStructureID): Ditto.
        * kjs/StringObject.h:
        (JSC::StringObject::createStructureID): Ditto.

        * kjs/TypeInfo.h: Added HasStandardGetOwnPropertySlot flag and
        hasStandardGetOwnPropertySlot accessor function.

2008-10-22  Cameron Zwarich  <zwarich@apple.com>

        Reviewed by Geoff Garen.

        Bug 21803: Fuse op_jfalse with op_eq_null and op_neq_null
        <https://bugs.webkit.org/show_bug.cgi?id=21803>

        Fuse op_jfalse with op_eq_null and op_neq_null to make the new opcodes
        op_jeq_null and op_jneq_null.

        This is a 2.6% speedup on the V8 Raytrace benchmark, and strangely also
        a 4.7% speedup on the V8 Arguments benchmark, even though it uses
        neither of the two new opcodes.

        * VM/CTI.cpp:
        (JSC::CTI::privateCompileMainPass):
        * VM/CodeBlock.cpp:
        (JSC::CodeBlock::dump):
        * VM/CodeGenerator.cpp:
        (JSC::CodeGenerator::emitJumpIfTrue):
        (JSC::CodeGenerator::emitJumpIfFalse):
        * VM/Machine.cpp:
        (JSC::Machine::privateExecute):
        * VM/Opcode.h:

2008-10-22  Darin Fisher  <darin@chromium.org>

        Reviewed by Eric Seidel.

        Should not define PLATFORM(WIN,MAC,GTK) when PLATFORM(CHROMIUM) is defined
        https://bugs.webkit.org/show_bug.cgi?id=21757

        PLATFORM(CHROMIUM) implies HAVE_ACCESSIBILITY

        * wtf/Platform.h:

2008-10-22  Cameron Zwarich  <zwarich@apple.com>

        Reviewed by Alexey Proskuryakov.

        Correct opcode names in documentation.

        * VM/Machine.cpp:
        (JSC::Machine::privateExecute):

2008-10-21  Oliver Hunt <oliver@apple.com>

        RS=Maciej Stachowiak.

        Force FastMalloc to make all allocated pages executable in
        a vague hope this will allow the Win2k3 bot to be able to
        run tests.

        Filed Bug 21783: Need more granular control over allocation of executable memory
        to cover a more granular version of this patch.

        * wtf/TCSystemAlloc.cpp:
        (TryVirtualAlloc):

2008-10-21  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=21769
        MessagePort should be GC protected if there are messages to be delivered

        * wtf/MessageQueue.h:
        (WTF::::isEmpty): Added. Also added a warning for methods that return a snapshot of queue
        state, thus likely to cause race conditions.

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

        Reviewed by Maciej Stachowiak.

        - convert post-increment to pre-increment in a couple more places for speed

        Speeds up V8 benchmarks a little on most computers. (But, strangely, slows
        them down a little on my computer.)

        * kjs/nodes.cpp:
        (JSC::statementListEmitCode): Removed default argument, since we always want
        to specify this explicitly.
        (JSC::ForNode::emitCode): Tolerate ignoredResult() as the dst -- means the
        same thing as 0.
        (JSC::ReturnNode::emitCode): Ditto.
        (JSC::ThrowNode::emitCode): Ditto.
        (JSC::FunctionBodyNode::emitCode): Pass ignoredResult() so that we know we
        don't have to compute the result of function statements.

2008-10-21  Peter Kasting  <pkasting@google.com>

        Reviewed by Maciej Stachowiak.

        Fix an include of a non-public header to use "" instead of <>.

        * API/JSProfilerPrivate.cpp:

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 was mutating the shared nullProtoStructureID when
        used in jsc.  Instead of using nullProtoStructureID, use a new StructureID.

        * API/JSCallbackObject.h:
        * API/JSCallbackObjectFunctions.h:
        (JSC::::JSCallbackObject):
        * API/JSContextRef.cpp:
        (JSGlobalContextCreateInGroup):
        * kjs/JSGlobalObject.h:
        (JSC::JSGlobalObject::JSGlobalObject):
        * kjs/Shell.cpp:
        (GlobalObject::GlobalObject):
        (jscmain):

2008-10-20  Cameron Zwarich  <zwarich@apple.com>

        Reviewed by Maciej Stachowiak.

        Remove an untaken branch in CodeGenerator::emitJumpIfFalse(). This
        function is never called with a backwards target LabelID, and there is
        even an assertion to this effect at the top of the function body.

        * VM/CodeGenerator.cpp:
        (JSC::CodeGenerator::emitJumpIfFalse):

2008-10-20  Cameron Zwarich  <zwarich@apple.com>

        Rubber-stamped by Sam Weinig.

        Add opcode documentation for undocumented opcodes.

        * VM/Machine.cpp:
        (JSC::Machine::privateExecute):

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

        Reviewed by Cameron Zwarich.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=21683
        Don't create intermediate StructureIDs for builtin objects

        Second stage in reduce number of StructureIDs created when initializing the
        JSGlobalObject.

        - Use putDirectWithoutTransition for the remaining singleton objects to reduce
          the number of StructureIDs create for about:blank from 132 to 73.

        * kjs/ArrayConstructor.cpp:
        (JSC::ArrayConstructor::ArrayConstructor):
        * kjs/BooleanConstructor.cpp:
        (JSC::BooleanConstructor::BooleanConstructor):
        * kjs/BooleanPrototype.cpp:
        (JSC::BooleanPrototype::BooleanPrototype):
        * kjs/DateConstructor.cpp:
        (JSC::DateConstructor::DateConstructor):
        * kjs/ErrorConstructor.cpp:
        (JSC::ErrorConstructor::ErrorConstructor):
        * kjs/ErrorPrototype.cpp:
        (JSC::ErrorPrototype::ErrorPrototype):
        * kjs/FunctionConstructor.cpp:
        (JSC::FunctionConstructor::FunctionConstructor):
        * kjs/FunctionPrototype.cpp:
        (JSC::FunctionPrototype::FunctionPrototype):
        (JSC::FunctionPrototype::addFunctionProperties):
        * kjs/FunctionPrototype.h:
        (JSC::FunctionPrototype::createStructureID):
        * kjs/InternalFunction.cpp:
        * kjs/InternalFunction.h:
        (JSC::InternalFunction::InternalFunction):
        * kjs/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::reset):
        * kjs/JSObject.h:
        * kjs/MathObject.cpp:
        (JSC::MathObject::MathObject):
        * kjs/NumberConstructor.cpp:
        (JSC::NumberConstructor::NumberConstructor):
        * kjs/NumberPrototype.cpp:
        (JSC::NumberPrototype::NumberPrototype):
        * kjs/ObjectConstructor.cpp:
        (JSC::ObjectConstructor::ObjectConstructor):
        * kjs/RegExpConstructor.cpp:
        (JSC::RegExpConstructor::RegExpConstructor):
        * kjs/RegExpPrototype.cpp:
        (JSC::RegExpPrototype::RegExpPrototype):
        * kjs/StringConstructor.cpp:
        (JSC::StringConstructor::StringConstructor):
        * kjs/StringPrototype.cpp:
        (JSC::StringPrototype::StringPrototype):
        * kjs/StructureID.cpp:
        (JSC::StructureID::dumpStatistics):
        * kjs/StructureID.h:
        (JSC::StructureID::setPrototypeWithoutTransition):

2008-10-20  Alp Toker  <alp@nuanti.com>

        Fix autotools dist build target by listing recently added header
        files only. Not reviewed.

        * GNUmakefile.am:

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

        Reviewed by Anders Carlsson.

        * VM/Machine.cpp:
        (JSC::Machine::tryCacheGetByID): Removed a redundant and sometimes
        incorrect cast, which started ASSERTing after Darin's last checkin.

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

        Not reviewed.
        
        Re-enable CTI, which I accidentally disabled while checking in fixes
        to bytecode.

        * wtf/Platform.h:

2008-10-20  Alp Toker  <alp@nuanti.com>

        Rubber-stamped by Mark Rowe.

        Typo fix in function name: mimimum -> minimum.

        * kjs/DateMath.cpp:
        (JSC::minimumYearForDST):
        (JSC::equivalentYearForDST):

2008-10-20  Alp Toker  <alp@nuanti.com>

        Reviewed by Mark Rowe.

        Use pthread instead of GThread where possible in the GTK+ port. This
        fixes issues with global initialisation, particularly on GTK+/Win32
        where a late g_thread_init() will cause hangs.

        * GNUmakefile.am:
        * wtf/Platform.h:
        * wtf/Threading.h:
        * wtf/ThreadingGtk.cpp:
        * wtf/ThreadingPthreads.cpp:

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

        Reviewed by Darin Adler.
        
        Fixed https://bugs.webkit.org/show_bug.cgi?id=21735
        Emit profiling instrumentation only if the Web Inspector's profiling
        feature is enabled

        22.2% speedup on empty function call benchmark.
        2.9% speedup on v8 benchmark.
        0.7% speedup on SunSpider.
        
        Lesser but similar speedups in bytecode.

        * VM/CTI.cpp:
        (JSC::CTI::compileOpCall):
        (JSC::CTI::privateCompileMainPass):
        (JSC::CTI::privateCompileSlowCases): Nixed JITed profiler hooks. Profiler
        hooks now have their own opcodes. Added support for compiling profiler
        hook opcodes.
        
        (JSC::CodeBlock::dump): Dump support for the new profiling opcodes.

        * VM/CodeGenerator.h:
        * VM/CodeGenerator.cpp:
        (JSC::CodeGenerator::CodeGenerator):
        (JSC::CodeGenerator::emitCall):
        (JSC::CodeGenerator::emitConstruct): Conditionally emit profiling hooks
        around call and construct, at the call site. (It's easier to get things
        right this way, if you have profiled code calling non-profiled code.
        Also, you get a slightly more accurate profile, since you charge the full
        cost of the call / construct operation to the callee.)
        
        Also, fixed a bug where construct would fetch the ".prototype" property
        from the constructor before evaluating the arguments to the constructor,
        incorrectly allowing an "invalid constructor" exception to short-circuit
        argument evaluation. I encountered this bug when trying to make
        constructor exceptions work with profiling.

        * VM/Machine.cpp:
        (JSC::Machine::callEval): Removed obsolete profiler hooks.

        (JSC::Machine::throwException): Added a check for an exception thrown
        within a call instruction. We didn't need this before because the call
        instruction would check for a valid call before involing the profiler.
        (JSC::Machine::execute): Added a didExecute hook at the end of top-level
        function invocation, since op_ret no longer does this for us.

        (JSC::Machine::privateExecute): Removed obsolete profiler hooks. Added
        profiler opcodes. Changed some ++vPC to vPC[x] notation, since the
        latter is better for performance, and it makes reasoning about the
        current opcode in exception handling much simpler.

        (JSC::Machine::cti_op_call_NotJSFunction): Removed obsolete profiler
        hooks.

        (JSC::Machine::cti_op_create_arguments_no_params): Added missing
        CTI_STACK_HACK that I noticed when adding CTI_STACK_HACK to the new
        profiler opcode functions.

        (JSC::Machine::cti_op_profile_will_call):
        (JSC::Machine::cti_op_profile_did_call): The new profiler opcode
        functions.

        (JSC::Machine::cti_op_construct_NotJSConstruct): Removed obsolete profiler
        hooks.

        * VM/Machine.h:
        (JSC::Machine::isCallOpcode): Helper for exception handling.

        * VM/Opcode.h: Declare new opcodes.

        * kjs/JSGlobalObject.h:
        (JSC::JSGlobalObject::supportsProfiling): Added virtual interface that
        allows WebCore to specify whether the target global object has the Web
        Inspector's profiling feature enabled.

        * profiler/Profiler.cpp:
        (JSC::Profiler::willExecute):
        (JSC::Profiler::didExecute):
        (JSC::Profiler::createCallIdentifier):
        * profiler/Profiler.h: Added support for invoking the profiler with
        an arbitrary JSValue*, and not a known object. We didn't need this
        before because the call instruction would check for a valid call before
        involing the profiler.

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

        Reviewed by Geoff Garen.

        - get CTI working on Windows again

        * VM/CTI.cpp:
        (JSC::CTI::emitCTICall): Add an overload for functions that
        return JSObject*.
        * VM/CTI.h: Use JSValue* and JSObject* as return types for
        cti_op functions. Apparently, MSVC doesn't handle returning
        the JSValuePtr struct in a register. We'll have to look into
        this more.

        * VM/Machine.cpp:
        (JSC::Machine::cti_op_convert_this):
        (JSC::Machine::cti_op_add):
        (JSC::Machine::cti_op_pre_inc):
        (JSC::Machine::cti_op_new_object):
        (JSC::Machine::cti_op_get_by_id):
        (JSC::Machine::cti_op_get_by_id_second):
        (JSC::Machine::cti_op_get_by_id_generic):
        (JSC::Machine::cti_op_get_by_id_fail):
        (JSC::Machine::cti_op_instanceof):
        (JSC::Machine::cti_op_del_by_id):
        (JSC::Machine::cti_op_mul):
        (JSC::Machine::cti_op_new_func):
        (JSC::Machine::cti_op_push_activation):
        (JSC::Machine::cti_op_call_NotJSFunction):
        (JSC::Machine::cti_op_new_array):
        (JSC::Machine::cti_op_resolve):
        (JSC::Machine::cti_op_construct_JSConstructFast):
        (JSC::Machine::cti_op_construct_NotJSConstruct):
        (JSC::Machine::cti_op_get_by_val):
        (JSC::Machine::cti_op_sub):
        (JSC::Machine::cti_op_lesseq):
        (JSC::Machine::cti_op_negate):
        (JSC::Machine::cti_op_resolve_base):
        (JSC::Machine::cti_op_resolve_skip):
        (JSC::Machine::cti_op_resolve_global):
        (JSC::Machine::cti_op_div):
        (JSC::Machine::cti_op_pre_dec):
        (JSC::Machine::cti_op_not):
        (JSC::Machine::cti_op_eq):
        (JSC::Machine::cti_op_lshift):
        (JSC::Machine::cti_op_bitand):
        (JSC::Machine::cti_op_rshift):
        (JSC::Machine::cti_op_bitnot):
        (JSC::Machine::cti_op_new_func_exp):
        (JSC::Machine::cti_op_mod):
        (JSC::Machine::cti_op_less):
        (JSC::Machine::cti_op_neq):
        (JSC::Machine::cti_op_urshift):
        (JSC::Machine::cti_op_bitxor):
        (JSC::Machine::cti_op_new_regexp):
        (JSC::Machine::cti_op_bitor):
        (JSC::Machine::cti_op_call_eval):
        (JSC::Machine::cti_op_throw):
        (JSC::Machine::cti_op_next_pname):
        (JSC::Machine::cti_op_typeof):
        (JSC::Machine::cti_op_is_undefined):
        (JSC::Machine::cti_op_is_boolean):
        (JSC::Machine::cti_op_is_number):
        (JSC::Machine::cti_op_is_string):
        (JSC::Machine::cti_op_is_object):
        (JSC::Machine::cti_op_is_function):
        (JSC::Machine::cti_op_stricteq):
        (JSC::Machine::cti_op_nstricteq):
        (JSC::Machine::cti_op_to_jsnumber):
        (JSC::Machine::cti_op_in):
        (JSC::Machine::cti_op_push_new_scope):
        (JSC::Machine::cti_op_del_by_val):
        (JSC::Machine::cti_op_new_error):
        (JSC::Machine::cti_vm_throw):
        Change these functions to return pointer types, and never
        JSValuePtr.
        * VM/Machine.h: Ditto.

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

        Reviewed by Darin Adler.
        
        Fixed some recent break-age in bytecode mode.

        * VM/CodeBlock.cpp:
        (JSC::CodeBlock::printStructureIDs): Fixed up an ASSERT caused by
        Gavin's last checkin. This is a temporary fix so I can keep on moving.
        I'll send email about what I think is an underlying problem soon.

        * VM/Machine.cpp:
        (JSC::Machine::privateExecute): Removed a redundant and sometimes
        incorrect cast, which started ASSERTing after Darin's last checkin.

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

        - another similar Windows build fix

        * VM/CTI.cpp: Changed return type to JSObject* instead of JSValuePtr.

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

        - try to fix Windows build

        * VM/CTI.cpp: Use JSValue* instead of JSValuePtr for ctiTrampoline.
        * VM/CTI.h: Ditto.

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

        Reviewed by Cameron Zwarich.

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

        * VM/Machine.cpp:
        (JSC::Machine::cti_op_call_profiler): Use asFunction.
        (JSC::Machine::cti_vm_lazyLinkCall): Ditto.
        (JSC::Machine::cti_op_construct_JSConstructFast): Use asObject.

        * kjs/JSCell.h: Re-sort friend classes. Eliminate inheritance from
        JSValue. Changed cast in asCell from static_cast to reinterpret_cast.
        Removed JSValue::getNumber(double&) and one of JSValue::getObject
        overloads.

        * kjs/JSValue.h: Made the private constructor and destructor both
        non-virtual and also remove the definitions. This class can never
        be instantiated or derived.

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

        Reviewed by Cameron Zwarich.

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

        Change JSValuePtr from a typedef into a class. This allows us to support
        conversion from JSCell* to JSValuePtr even if JSCell isn't derived from
        JSValue.

        * JavaScriptCore.exp: Updated symbols that involve JSValuePtr, since
        it's now a distinct type.

        * API/APICast.h:
        (toRef): Extract the JSValuePtr payload explicitly since we can't just
        cast any more.
        * VM/CTI.cpp:
        (JSC::CTI::asInteger): Ditto.

        * VM/CodeGenerator.cpp:
        (JSC::CodeGenerator::addConstant): Get at the payload directly.
        (JSC::CodeGenerator::emitLoad): Added an overload of JSCell* because
        otherwise classes derived from JSValue end up calling the bool
        overload instead of JSValuePtr.
        * VM/CodeGenerator.h: Ditto. Also update traits to use JSValue*
        and the payload functions.

        * VM/Register.h: Added a JSCell* overload and use of payload functions.

        * kjs/JSCell.h:
        (JSC::asCell): Use payload function.
        (JSC::JSValue::asCell): Use JSValue* instead of JSValuePtr.
        (JSC::JSValuePtr::JSValuePtr): Added. Constructor that takes JSCell*
        and creates a JSValuePtr.

        * kjs/JSImmediate.h: Added JSValuePtr class. Also updated makeValue
        and makeInt to work with JSValue* and the payload function.

        * kjs/JSValue.h: Added == and != operators for JSValuePtr. Put them
        here because eventually all the JSValue functions should go here
        except what's needed by JSImmediate. Also fix asValue to use
        JSValue* instead of JSValuePtr.

        * kjs/PropertySlot.h: Change constructor to take JSValuePtr.

        * kjs/protect.h: Update gcProtect functions to work with JSCell*
        as well as JSValuePtr. Also updated the ProtectedPtr<JSValuePtr>
        specialization to work more directly. Also changed all the call
        sites to use gcProtectNullTolerant.

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.

        * VM/Machine.cpp:
        (JSC::fastToUInt32): Call toUInt32SlowCase function; no longer a member
        of JSValue.
        * kjs/JSNumberCell.h:
        (JSC::JSNumberCell::toInt32): Ditto.
        (JSC::JSNumberCell::toUInt32): Ditto.

        * kjs/JSValue.cpp:
        (JSC::toInt32SlowCase): Made a non-member function.
        (JSC::JSValue::toInt32SlowCase): Changed to call non-member function.
        (JSC::toUInt32SlowCase): More of the same.
        (JSC::JSValue::toUInt32SlowCase): Ditto.

        * kjs/JSValue.h: Moved static member function so they are no longer
        member functions at all.

        * VM/CTI.h: Removed forward declaration of JSValue.
        * VM/ExceptionHelpers.h: Ditto.
        * kjs/CallData.h: Ditto.
        * kjs/ConstructData.h: Ditto.
        * kjs/JSGlobalObjectFunctions.h: Ditto.
        * kjs/PropertyMap.h: Ditto.
        * kjs/StructureID.h: Ditto.
        * kjs/collector.h: Ditto.
        * kjs/completion.h: Ditto.

        * kjs/grammar.y:
        (JSC::makeBitwiseNotNode): Call new non-member toInt32 function.
        (JSC::makeLeftShiftNode): More of the same.
        (JSC::makeRightShiftNode): Ditto.

        * kjs/protect.h: Added a specialization for ProtectedPtr<JSValuePtr>
        so this can be used with JSValuePtr.

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.

        * API/APICast.h:
        (toJS): Change back to JSValue* here, since we're converting the
        pointer type.
        * VM/CTI.cpp:
        (JSC::CTI::unlinkCall): Call asPointer.
        * VM/CTI.h: Cast to JSValue* here, since it's a pointer cast.
        * kjs/DebuggerCallFrame.h:
        (JSC::DebuggerCallFrame::DebuggerCallFrame): Call noValue.
        * kjs/JSGlobalData.cpp:
        (JSC::JSGlobalData::JSGlobalData): Call noValue.
        * kjs/JSImmediate.cpp:
        (JSC::JSImmediate::toObject): Remove unneeded const_cast.
        * kjs/JSWrapperObject.h:
        (JSC::JSWrapperObject::JSWrapperObject): Call noValue.

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

        - fix non-all-in-one build

        * kjs/completion.h:
        (JSC::Completion::Completion): Add include of JSValue.h.

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

        Reviewed by Oliver Hunt.

        - fix assertions I introduced with my casting changes

        These were showing up as failures in the JavaScriptCore tests.

        * VM/Machine.cpp:
        (JSC::Machine::cti_op_instanceof): Remove the bogus asCell casting that
        was at the top of the function, and instead cast at the point of use.
        (JSC::Machine::cti_op_construct_NotJSConstruct): Moved the cast to
        object after checking the construct type.

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

        - fix non-all-in-one build

        * kjs/JSGlobalObjectFunctions.h: Add include of JSImmedate.h (for now).

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

        - fix build

        * kjs/interpreter.h: Include JSValue.h instead of JSImmediate.h.

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

        * kjs/interpreter.h: Fix include of JSImmediate.h.

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

        - fix non-all-in-one build

        * kjs/interpreter.h: Add include of JSImmediate.h.

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

        - fix non-all-in-one build

        * kjs/ConstructData.h: Add include of JSImmedate.h (for now).

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

        - try to fix Windows build

        * VM/Machine.cpp:
        (JSC::Machine::Machine): Use JSCell* type since MSVC seems to only allow
        calling ~JSCell directly if it's a JSCell*.

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.

        * JavaScriptCore.exp: Update entry points, since some now take JSValue*
        instead of const JSValue*.

        * API/APICast.h:
        * API/JSCallbackConstructor.h:
        * API/JSCallbackFunction.cpp:
        * API/JSCallbackFunction.h:
        * API/JSCallbackObject.h:
        * API/JSCallbackObjectFunctions.h:
        * API/JSContextRef.cpp:
        * API/JSObjectRef.cpp:
        * API/JSValueRef.cpp:
        * VM/CTI.cpp:
        * VM/CTI.h:
        * VM/CodeBlock.cpp:
        * VM/CodeBlock.h:
        * VM/CodeGenerator.cpp:
        * VM/CodeGenerator.h:
        * VM/ExceptionHelpers.cpp:
        * VM/ExceptionHelpers.h:
        * VM/JSPropertyNameIterator.cpp:
        * VM/JSPropertyNameIterator.h:
        * VM/Machine.cpp:
        * VM/Machine.h:
        * VM/Register.h:
        * kjs/ArgList.cpp:
        * kjs/ArgList.h:
        * kjs/Arguments.cpp:
        * kjs/Arguments.h:
        * kjs/ArrayConstructor.cpp:
        * kjs/ArrayPrototype.cpp:
        * kjs/BooleanConstructor.cpp:
        * kjs/BooleanConstructor.h:
        * kjs/BooleanObject.h:
        * kjs/BooleanPrototype.cpp:
        * kjs/CallData.cpp:
        * kjs/CallData.h:
        * kjs/ConstructData.cpp:
        * kjs/ConstructData.h:
        * kjs/DateConstructor.cpp:
        * kjs/DateInstance.h:
        * kjs/DatePrototype.cpp:
        * kjs/DebuggerCallFrame.cpp:
        * kjs/DebuggerCallFrame.h:
        * kjs/ErrorConstructor.cpp:
        * kjs/ErrorPrototype.cpp:
        * kjs/ExecState.cpp:
        * kjs/ExecState.h:
        * kjs/FunctionConstructor.cpp:
        * kjs/FunctionPrototype.cpp:
        * kjs/GetterSetter.cpp:
        * kjs/GetterSetter.h:
        * kjs/InternalFunction.h:
        * kjs/JSActivation.cpp:
        * kjs/JSActivation.h:
        * kjs/JSArray.cpp:
        * kjs/JSArray.h:
        * kjs/JSCell.cpp:
        * kjs/JSCell.h:
        * kjs/JSFunction.cpp:
        * kjs/JSFunction.h:
        * kjs/JSGlobalData.h:
        * kjs/JSGlobalObject.cpp:
        * kjs/JSGlobalObject.h:
        * kjs/JSGlobalObjectFunctions.cpp:
        * kjs/JSGlobalObjectFunctions.h:
        * kjs/JSImmediate.cpp:
        * kjs/JSImmediate.h:
        * kjs/JSNotAnObject.cpp:
        * kjs/JSNotAnObject.h:
        * kjs/JSNumberCell.cpp:
        * kjs/JSNumberCell.h:
        * kjs/JSObject.cpp:
        * kjs/JSObject.h:
        * kjs/JSStaticScopeObject.cpp:
        * kjs/JSStaticScopeObject.h:
        * kjs/JSString.cpp:
        * kjs/JSString.h:
        * kjs/JSValue.h:
        * kjs/JSVariableObject.h:
        * kjs/JSWrapperObject.h:
        * kjs/MathObject.cpp:
        * kjs/NativeErrorConstructor.cpp:
        * kjs/NumberConstructor.cpp:
        * kjs/NumberConstructor.h:
        * kjs/NumberObject.cpp:
        * kjs/NumberObject.h:
        * kjs/NumberPrototype.cpp:
        * kjs/ObjectConstructor.cpp:
        * kjs/ObjectPrototype.cpp:
        * kjs/ObjectPrototype.h:
        * kjs/PropertyMap.h:
        * kjs/PropertySlot.cpp:
        * kjs/PropertySlot.h:
        * kjs/RegExpConstructor.cpp:
        * kjs/RegExpConstructor.h:
        * kjs/RegExpMatchesArray.h:
        * kjs/RegExpObject.cpp:
        * kjs/RegExpObject.h:
        * kjs/RegExpPrototype.cpp:
        * kjs/Shell.cpp:
        * kjs/StringConstructor.cpp:
        * kjs/StringObject.cpp:
        * kjs/StringObject.h:
        * kjs/StringObjectThatMasqueradesAsUndefined.h:
        * kjs/StringPrototype.cpp:
        * kjs/StructureID.cpp:
        * kjs/StructureID.h:
        * kjs/collector.cpp:
        * kjs/collector.h:
        * kjs/completion.h:
        * kjs/grammar.y:
        * kjs/interpreter.cpp:
        * kjs/interpreter.h:
        * kjs/lookup.cpp:
        * kjs/lookup.h:
        * kjs/nodes.h:
        * kjs/operations.cpp:
        * kjs/operations.h:
        * kjs/protect.h:
        * profiler/ProfileGenerator.cpp:
        Replace JSValue* with JSValuePtr.

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

        * VM/Machine.cpp:
        (JSC::Machine::cti_op_call_eval): Removed stray parentheses from my
        last check-in.

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

        Reviewed by Oliver Hunt.

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

        Remove casts from JSValue* to derived classes, replacing them with
        calls to inline casting functions. These functions are also a bit
        better than aidrect cast because they also do a runtime assertion.

        Removed use of 0 as for JSValue*, changing call sites to use a
        noValue() function instead.

        Move things needed by classes derived from JSValue out of the class,
        since the classes won't be deriving from JSValue any more soon.

        I did most of these changes by changing JSValue to not be JSValue* any
        more, then fixing a lot of the compilation problems, then rolling out
        the JSValue change.

        1.011x as fast on SunSpider (presumably due to some of the Machine.cpp changes)

        * API/APICast.h: Removed unneeded forward declarations.

        * API/JSCallbackObject.h: Added an asCallbackObject function for casting.
        * API/JSCallbackObjectFunctions.h:
        (JSC::JSCallbackObject::asCallbackObject): Added.
        (JSC::JSCallbackObject::getOwnPropertySlot): Use asObject.
        (JSC::JSCallbackObject::call): Use noValue.
        (JSC::JSCallbackObject::staticValueGetter): Use asCallbackObject.
        (JSC::JSCallbackObject::staticFunctionGetter): Ditto.
        (JSC::JSCallbackObject::callbackGetter): Ditto.

        * JavaScriptCore.exp: Updated.

        * JavaScriptCore.xcodeproj/project.pbxproj: Added RegExpMatchesArray.h.

        * VM/CTI.cpp:
        (JSC::CTI::asInteger): Added. For use casting a JSValue to an integer.
        (JSC::CTI::emitGetArg): Use asInteger.
        (JSC::CTI::emitGetPutArg): Ditto.
        (JSC::CTI::getConstantImmediateNumericArg): Ditto. Also use noValue.
        (JSC::CTI::emitInitRegister): Use asInteger.
        (JSC::CTI::getDeTaggedConstantImmediate): Ditto.
        (JSC::CTI::compileOpCallInitializeCallFrame): Ditto.
        (JSC::CTI::compileOpCall): Ditto.
        (JSC::CTI::compileOpStrictEq): Ditto.
        (JSC::CTI::privateCompileMainPass): Ditto.
        (JSC::CTI::privateCompileGetByIdProto): Ditto.
        (JSC::CTI::privateCompileGetByIdChain): Ditto.
        (JSC::CTI::privateCompilePutByIdTransition): Ditto.
        * VM/CTI.h: Rewrite the ARG-related macros to use C++ casts instead of
        C casts and get rid of some extra parentheses. Addd declaration of
        asInteger.

        * VM/CodeGenerator.cpp:
        (JSC::CodeGenerator::emitEqualityOp): Use asString.
        (JSC::CodeGenerator::emitLoad): Use noValue.
        (JSC::CodeGenerator::findScopedProperty): Change globalObject argument
        to JSObject* instead of JSValue*.
        (JSC::CodeGenerator::emitResolve): Remove unneeded cast.
        (JSC::CodeGenerator::emitGetScopedVar): Use asCell.
        (JSC::CodeGenerator::emitPutScopedVar): Ditto.
        * VM/CodeGenerator.h: Changed out argument of findScopedProperty.
        Also change the JSValueMap to use PtrHash explicitly instead of
        getting it from DefaultHash.

        * VM/JSPropertyNameIterator.cpp:
        (JSC::JSPropertyNameIterator::toPrimitive): Use noValue.
        * VM/JSPropertyNameIterator.h:
        (JSC::JSPropertyNameIterator::next): Ditto.

        * VM/Machine.cpp:
        (JSC::fastIsNumber): Moved isImmediate check here instead of
        checking for 0 inside Heap::isNumber. Use asCell and asNumberCell.
        (JSC::fastToInt32): Ditto.
        (JSC::fastToUInt32): Ditto.
        (JSC::jsLess): Use asString.
        (JSC::jsLessEq): Ditto.
        (JSC::jsAdd): Ditto.
        (JSC::jsTypeStringForValue): Use asObject.
        (JSC::jsIsObjectType): Ditto.
        (JSC::jsIsFunctionType): Ditto.
        (JSC::inlineResolveBase): Use noValue.
        (JSC::Machine::callEval): Use asString. Initialize result to
        undefined, not 0.
        (JSC::Machine::Machine): Remove unneeded casts to JSCell*.
        (JSC::Machine::throwException): Use asObject.
        (JSC::Machine::debug): Remove explicit calls to the DebuggerCallFrame
        constructor.
        (JSC::Machine::checkTimeout): Use noValue.
        (JSC::cachePrototypeChain): Use asObject.
        (JSC::Machine::tryCachePutByID): Use asCell.
        (JSC::Machine::tryCacheGetByID): Use aCell and asObject.
        (JSC::Machine::privateExecute): Use noValue, asCell, asObject, asString,
        asArray, asActivation, asFunction. Changed code that creates call frames
        for host functions to pass 0 for the function pointer -- the call frame
        needs a JSFunction* and a host function object is not one. This was
        caught by the assertions in the casting functions. Also remove some
        unneeded casts in cases where two values are compared.
        (JSC::Machine::retrieveLastCaller): Use noValue.
        (JSC::Machine::tryCTICachePutByID): Use asCell.
        (JSC::Machine::tryCTICacheGetByID): Use aCell and asObject.
        (JSC::setUpThrowTrampolineReturnAddress): Added this function to restore
        the PIC-branch-avoidance that was recently lost.
        (JSC::Machine::cti_op_add): Use asString.
        (JSC::Machine::cti_op_instanceof): Use asCell and asObject.
        (JSC::Machine::cti_op_call_JSFunction): Use asFunction.
        (JSC::Machine::cti_op_call_NotJSFunction): Changed code to pass 0 for
        the function pointer, since we don't have a JSFunction. Use asObject.
        (JSC::Machine::cti_op_tear_off_activation): Use asActivation.
        (JSC::Machine::cti_op_construct_JSConstruct): Use asFunction and asObject.
        (JSC::Machine::cti_op_construct_NotJSConstruct): use asObject.
        (JSC::Machine::cti_op_get_by_val): Use asArray and asString.
        (JSC::Machine::cti_op_resolve_func): Use asPointer; this helps prepare
        us for a situation where JSValue is not a pointer.
        (JSC::Machine::cti_op_put_by_val): Use asArray.
        (JSC::Machine::cti_op_put_by_val_array): Ditto.
        (JSC::Machine::cti_op_resolve_global): Use asGlobalObject.
        (JSC::Machine::cti_op_post_inc): Change VM_CHECK_EXCEPTION_2 to
        VM_CHECK_EXCEPTION_AT_END, since there's no observable work done after
        that point. Also use asPointer.
        (JSC::Machine::cti_op_resolve_with_base): Use asPointer.
        (JSC::Machine::cti_op_post_dec): Change VM_CHECK_EXCEPTION_2 to
        VM_CHECK_EXCEPTION_AT_END, since there's no observable work done after
        that point. Also use asPointer.
        (JSC::Machine::cti_op_call_eval): Use asObject, noValue, and change
        VM_CHECK_EXCEPTION_ARG to VM_THROW_EXCEPTION_AT_END.
        (JSC::Machine::cti_op_throw): Change return value to a JSValue*.
        (JSC::Machine::cti_op_in): Use asObject.
        (JSC::Machine::cti_op_switch_char): Use asString.
        (JSC::Machine::cti_op_switch_string): Ditto.
        (JSC::Machine::cti_op_put_getter): Use asObject.
        (JSC::Machine::cti_op_put_setter): Ditto.
        (JSC::Machine::cti_vm_throw): Change return value to a JSValue*.
        Use noValue.
        * VM/Machine.h: Change return values of both cti_op_throw and
        cti_vm_throw to JSValue*.

        * VM/Register.h: Remove nullJSValue, which is the same thing
        as noValue(). Also removed unneeded definition of JSValue.

        * kjs/ArgList.h: Removed unneeded definition of JSValue.

        * kjs/Arguments.h:
        (JSC::asArguments): Added.

        * kjs/ArrayPrototype.cpp:
        (JSC::getProperty): Use noValue.
        (JSC::arrayProtoFuncToString): Use asArray.
        (JSC::arrayProtoFuncToLocaleString): Ditto.
        (JSC::arrayProtoFuncConcat): Ditto.
        (JSC::arrayProtoFuncPop): Ditto. Also removed unneeded initialization
        of the result, which is set in both sides of the branch.
        (JSC::arrayProtoFuncPush): Ditto.
        (JSC::arrayProtoFuncShift): Removed unneeded initialization
        of the result, which is set in both sides of the branch.
        (JSC::arrayProtoFuncSort): Use asArray.

        * kjs/BooleanObject.h:
        (JSC::asBooleanObject): Added.

        * kjs/BooleanPrototype.cpp:
        (JSC::booleanProtoFuncToString): Use asBooleanObject.
        (JSC::booleanProtoFuncValueOf): Ditto.

        * kjs/CallData.cpp:
        (JSC::call): Use asObject and asFunction.
        * kjs/ConstructData.cpp:
        (JSC::construct): Ditto.

        * kjs/DateConstructor.cpp:
        (JSC::constructDate): Use asDateInstance.

        * kjs/DateInstance.h:
        (JSC::asDateInstance): Added.

        * kjs/DatePrototype.cpp:
        (JSC::dateProtoFuncToString): Use asDateInstance.
        (JSC::dateProtoFuncToUTCString): Ditto.
        (JSC::dateProtoFuncToDateString): Ditto.
        (JSC::dateProtoFuncToTimeString): Ditto.
        (JSC::dateProtoFuncToLocaleString): Ditto.
        (JSC::dateProtoFuncToLocaleDateString): Ditto.
        (JSC::dateProtoFuncToLocaleTimeString): Ditto.
        (JSC::dateProtoFuncValueOf): Ditto.
        (JSC::dateProtoFuncGetTime): Ditto.
        (JSC::dateProtoFuncGetFullYear): Ditto.
        (JSC::dateProtoFuncGetUTCFullYear): Ditto.
        (JSC::dateProtoFuncToGMTString): Ditto.
        (JSC::dateProtoFuncGetMonth): Ditto.
        (JSC::dateProtoFuncGetUTCMonth): Ditto.
        (JSC::dateProtoFuncGetDate): Ditto.
        (JSC::dateProtoFuncGetUTCDate): Ditto.
        (JSC::dateProtoFuncGetDay): Ditto.
        (JSC::dateProtoFuncGetUTCDay): Ditto.
        (JSC::dateProtoFuncGetHours): Ditto.
        (JSC::dateProtoFuncGetUTCHours): Ditto.
        (JSC::dateProtoFuncGetMinutes): Ditto.
        (JSC::dateProtoFuncGetUTCMinutes): Ditto.
        (JSC::dateProtoFuncGetSeconds): Ditto.
        (JSC::dateProtoFuncGetUTCSeconds): Ditto.
        (JSC::dateProtoFuncGetMilliSeconds): Ditto.
        (JSC::dateProtoFuncGetUTCMilliseconds): Ditto.
        (JSC::dateProtoFuncGetTimezoneOffset): Ditto.
        (JSC::dateProtoFuncSetTime): Ditto.
        (JSC::setNewValueFromTimeArgs): Ditto.
        (JSC::setNewValueFromDateArgs): Ditto.
        (JSC::dateProtoFuncSetYear): Ditto.
        (JSC::dateProtoFuncGetYear): Ditto.

        * kjs/DebuggerCallFrame.cpp:
        (JSC::DebuggerCallFrame::thisObject): Use asObject.
        (JSC::DebuggerCallFrame::evaluate): Use noValue.
        * kjs/DebuggerCallFrame.h: Added a constructor that
        takes only a callFrame.

        * kjs/ExecState.h:
        (JSC::ExecState::clearException): Use noValue.

        * kjs/FunctionPrototype.cpp:
        (JSC::functionProtoFuncToString): Use asFunction.
        (JSC::functionProtoFuncApply): Use asArguments and asArray.

        * kjs/GetterSetter.cpp:
        (JSC::GetterSetter::getPrimitiveNumber): Use noValue.

        * kjs/GetterSetter.h:
        (JSC::asGetterSetter): Added.

        * kjs/InternalFunction.cpp:
        (JSC::InternalFunction::name): Use asString.

        * kjs/InternalFunction.h:
        (JSC::asInternalFunction): Added.

        * kjs/JSActivation.cpp:
        (JSC::JSActivation::argumentsGetter): Use asActivation.

        * kjs/JSActivation.h:
        (JSC::asActivation): Added.

        * kjs/JSArray.cpp:
        (JSC::JSArray::putSlowCase): Use noValue.
        (JSC::JSArray::deleteProperty): Ditto.
        (JSC::JSArray::increaseVectorLength): Ditto.
        (JSC::JSArray::setLength): Ditto.
        (JSC::JSArray::pop): Ditto.
        (JSC::JSArray::sort): Ditto.
        (JSC::JSArray::compactForSorting): Ditto.
        * kjs/JSArray.h:
        (JSC::asArray): Added.

        * kjs/JSCell.cpp:
        (JSC::JSCell::getJSNumber): Use noValue.

        * kjs/JSCell.h:
        (JSC::asCell): Added.
        (JSC::JSValue::asCell): Changed to not preserve const.
        Given the wide use of JSValue* and JSCell*, it's not
        really useful to use const.
        (JSC::JSValue::isNumber): Use asValue.
        (JSC::JSValue::isString): Ditto.
        (JSC::JSValue::isGetterSetter): Ditto.
        (JSC::JSValue::isObject): Ditto.
        (JSC::JSValue::getNumber): Ditto.
        (JSC::JSValue::getString): Ditto.
        (JSC::JSValue::getObject): Ditto.
        (JSC::JSValue::getCallData): Ditto.
        (JSC::JSValue::getConstructData): Ditto.
        (JSC::JSValue::getUInt32): Ditto.
        (JSC::JSValue::getTruncatedInt32): Ditto.
        (JSC::JSValue::getTruncatedUInt32): Ditto.
        (JSC::JSValue::mark): Ditto.
        (JSC::JSValue::marked): Ditto.
        (JSC::JSValue::toPrimitive): Ditto.
        (JSC::JSValue::getPrimitiveNumber): Ditto.
        (JSC::JSValue::toBoolean): Ditto.
        (JSC::JSValue::toNumber): Ditto.
        (JSC::JSValue::toString): Ditto.
        (JSC::JSValue::toObject): Ditto.
        (JSC::JSValue::toThisObject): Ditto.
        (JSC::JSValue::needsThisConversion): Ditto.
        (JSC::JSValue::toThisString): Ditto.
        (JSC::JSValue::getJSNumber): Ditto.

        * kjs/JSFunction.cpp:
        (JSC::JSFunction::argumentsGetter): Use asFunction.
        (JSC::JSFunction::callerGetter): Ditto.
        (JSC::JSFunction::lengthGetter): Ditto.
        (JSC::JSFunction::construct): Use asObject.

        * kjs/JSFunction.h:
        (JSC::asFunction): Added.

        * kjs/JSGlobalObject.cpp:
        (JSC::lastInPrototypeChain): Use asObject.

        * kjs/JSGlobalObject.h:
        (JSC::asGlobalObject): Added.
        (JSC::ScopeChainNode::globalObject): Use asGlobalObject.

        * kjs/JSImmediate.h: Added noValue, asPointer, and makeValue
        functions. Use rawValue, makeValue, and noValue consistently
        instead of doing reinterpret_cast in various functions.

        * kjs/JSNumberCell.h:
        (JSC::asNumberCell): Added.
        (JSC::JSValue::uncheckedGetNumber): Use asValue and asNumberCell.
        (JSC::JSValue::toJSNumber): Use asValue.

        * kjs/JSObject.cpp:
        (JSC::JSObject::put): Use asObject and asGetterSetter.
        (JSC::callDefaultValueFunction): Use noValue.
        (JSC::JSObject::defineGetter): Use asGetterSetter.
        (JSC::JSObject::defineSetter): Ditto.
        (JSC::JSObject::lookupGetter): Ditto. Also use asObject.
        (JSC::JSObject::lookupSetter): Ditto.
        (JSC::JSObject::hasInstance): Use asObject.
        (JSC::JSObject::fillGetterPropertySlot): Use asGetterSetter.

        * kjs/JSObject.h:
        (JSC::JSObject::getDirect): Use noValue.
        (JSC::asObject): Added.
        (JSC::JSValue::isObject): Use asValue.
        (JSC::JSObject::get): Removed unneeded const_cast.
        (JSC::JSObject::getPropertySlot): Use asObject.
        (JSC::JSValue::get): Removed unneeded const_cast.
        Use asValue, asCell, and asObject.
        (JSC::JSValue::put): Ditto.
        (JSC::JSObject::allocatePropertyStorageInline): Fixed spelling
        of "oldPropertStorage".

        * kjs/JSString.cpp:
        (JSC::JSString::getOwnPropertySlot): Use asObject.

        * kjs/JSString.h:
        (JSC::asString): Added.
        (JSC::JSValue::toThisJSString): Use asValue.

        * kjs/JSValue.h: Make PreferredPrimitiveType a top level enum
        instead of a member of JSValue. Added an asValue function that
        returns this. Removed overload of asCell for const. Use asValue
        instead of getting right at this.

        * kjs/ObjectPrototype.cpp:
        (JSC::objectProtoFuncIsPrototypeOf): Use asObject.
        (JSC::objectProtoFuncDefineGetter): Ditto.
        (JSC::objectProtoFuncDefineSetter): Ditto.

        * kjs/PropertySlot.h:
        (JSC::PropertySlot::PropertySlot): Take a const JSValue* so the
        callers don't have to worry about const.
        (JSC::PropertySlot::clearBase): Use noValue.
        (JSC::PropertySlot::clearValue): Ditto.

        * kjs/RegExpConstructor.cpp:
        (JSC::regExpConstructorDollar1): Use asRegExpConstructor.
        (JSC::regExpConstructorDollar2): Ditto.
        (JSC::regExpConstructorDollar3): Ditto.
        (JSC::regExpConstructorDollar4): Ditto.
        (JSC::regExpConstructorDollar5): Ditto.
        (JSC::regExpConstructorDollar6): Ditto.
        (JSC::regExpConstructorDollar7): Ditto.
        (JSC::regExpConstructorDollar8): Ditto.
        (JSC::regExpConstructorDollar9): Ditto.
        (JSC::regExpConstructorInput): Ditto.
        (JSC::regExpConstructorMultiline): Ditto.
        (JSC::regExpConstructorLastMatch): Ditto.
        (JSC::regExpConstructorLastParen): Ditto.
        (JSC::regExpConstructorLeftContext): Ditto.
        (JSC::regExpConstructorRightContext): Ditto.
        (JSC::setRegExpConstructorInput): Ditto.
        (JSC::setRegExpConstructorMultiline): Ditto.
        (JSC::constructRegExp): Use asObject.

        * kjs/RegExpConstructor.h:
        (JSC::asRegExpConstructor): Added.

        * kjs/RegExpObject.cpp:
        (JSC::regExpObjectGlobal): Use asRegExpObject.
        (JSC::regExpObjectIgnoreCase): Ditto.
        (JSC::regExpObjectMultiline): Ditto.
        (JSC::regExpObjectSource): Ditto.
        (JSC::regExpObjectLastIndex): Ditto.
        (JSC::setRegExpObjectLastIndex): Ditto.
        (JSC::callRegExpObject): Ditto.

        * kjs/RegExpObject.h:
        (JSC::asRegExpObject): Added.

        * kjs/RegExpPrototype.cpp:
        (JSC::regExpProtoFuncTest): Use asRegExpObject.
        (JSC::regExpProtoFuncExec): Ditto.
        (JSC::regExpProtoFuncCompile): Ditto.
        (JSC::regExpProtoFuncToString): Ditto.

        * kjs/StringObject.h:
        (JSC::StringObject::internalValue): Use asString.
        (JSC::asStringObject): Added.

        * kjs/StringPrototype.cpp:
        (JSC::stringProtoFuncReplace): Use asRegExpObject.
        (JSC::stringProtoFuncToString): Ue asStringObject.
        (JSC::stringProtoFuncMatch): Use asRegExpObject.
        (JSC::stringProtoFuncSearch): Ditto.
        (JSC::stringProtoFuncSplit): Ditto.

        * kjs/StructureID.cpp:
        (JSC::StructureID::getEnumerablePropertyNames): Use asObject.
        (JSC::StructureID::createCachedPrototypeChain): Ditto.
        (JSC::StructureIDChain::StructureIDChain): Use asCell and asObject.

        * kjs/collector.h:
        (JSC::Heap::isNumber): Removed null handling. This can only be called
        on valid cells.
        (JSC::Heap::cellBlock): Removed overload for const and non-const.
        Whether the JSCell* is const or not really should have no effect on
        whether you can modify the collector block it's in.

        * kjs/interpreter.cpp:
        (JSC::Interpreter::evaluate): Use noValue and noObject.

        * kjs/nodes.cpp:
        (JSC::FunctionCallResolveNode::emitCode): Use JSObject for the global
        object rather than JSValue.
        (JSC::PostfixResolveNode::emitCode): Ditto.
        (JSC::PrefixResolveNode::emitCode): Ditto.
        (JSC::ReadModifyResolveNode::emitCode): Ditto.
        (JSC::AssignResolveNode::emitCode): Ditto.

        * kjs/operations.h:
        (JSC::equalSlowCaseInline): Use asString, asCell, asNumberCell, 
        (JSC::strictEqualSlowCaseInline): Ditto.

2008-10-18  Cameron Zwarich  <zwarich@apple.com>

        Reviewed by Oliver Hunt.

        Bug 21702: Special op_create_activation for the case where there are no named parameters
        <https://bugs.webkit.org/show_bug.cgi?id=21702>

        This is a 2.5% speedup on the V8 Raytrace benchmark and a 1.1% speedup
        on the V8 Earley-Boyer benchmark.

        * VM/CTI.cpp:
        (JSC::CTI::privateCompileMainPass):
        * VM/Machine.cpp:
        (JSC::Machine::cti_op_create_arguments_no_params):
        * VM/Machine.h:
        * kjs/Arguments.h:
        (JSC::Arguments::):
        (JSC::Arguments::Arguments):

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

        Reviewed by Cameron Zwarich.
        
        - in debug builds, alter the stack to avoid blowing out MallocStackLogging
        
        (In essence, while executing a CTI function we alter the return
        address to jscGeneratedNativeCode so that a single consistent
        function is on the stack instead of many random functions without
        symbols.)

        * VM/CTI.h:
        * VM/Machine.cpp:
        (JSC::doSetReturnAddress):
        (JSC::):
        (JSC::StackHack::StackHack):
        (JSC::StackHack::~StackHack):
        (JSC::Machine::cti_op_convert_this):
        (JSC::Machine::cti_op_end):
        (JSC::Machine::cti_op_add):
        (JSC::Machine::cti_op_pre_inc):
        (JSC::Machine::cti_timeout_check):
        (JSC::Machine::cti_register_file_check):
        (JSC::Machine::cti_op_loop_if_less):
        (JSC::Machine::cti_op_loop_if_lesseq):
        (JSC::Machine::cti_op_new_object):
        (JSC::Machine::cti_op_put_by_id):
        (JSC::Machine::cti_op_put_by_id_second):
        (JSC::Machine::cti_op_put_by_id_generic):
        (JSC::Machine::cti_op_put_by_id_fail):
        (JSC::Machine::cti_op_get_by_id):
        (JSC::Machine::cti_op_get_by_id_second):
        (JSC::Machine::cti_op_get_by_id_generic):
        (JSC::Machine::cti_op_get_by_id_fail):
        (JSC::Machine::cti_op_instanceof):
        (JSC::Machine::cti_op_del_by_id):
        (JSC::Machine::cti_op_mul):
        (JSC::Machine::cti_op_new_func):
        (JSC::Machine::cti_op_call_profiler):
        (JSC::Machine::cti_op_call_JSFunction):
        (JSC::Machine::cti_vm_lazyLinkCall):
        (JSC::Machine::cti_vm_compile):
        (JSC::Machine::cti_op_push_activation):
        (JSC::Machine::cti_op_call_NotJSFunction):
        (JSC::Machine::cti_op_create_arguments):
        (JSC::Machine::cti_op_tear_off_activation):
        (JSC::Machine::cti_op_tear_off_arguments):
        (JSC::Machine::cti_op_ret_profiler):
        (JSC::Machine::cti_op_ret_scopeChain):
        (JSC::Machine::cti_op_new_array):
        (JSC::Machine::cti_op_resolve):
        (JSC::Machine::cti_op_construct_JSConstructFast):
        (JSC::Machine::cti_op_construct_JSConstruct):
        (JSC::Machine::cti_op_construct_NotJSConstruct):
        (JSC::Machine::cti_op_get_by_val):
        (JSC::Machine::cti_op_resolve_func):
        (JSC::Machine::cti_op_sub):
        (JSC::Machine::cti_op_put_by_val):
        (JSC::Machine::cti_op_put_by_val_array):
        (JSC::Machine::cti_op_lesseq):
        (JSC::Machine::cti_op_loop_if_true):
        (JSC::Machine::cti_op_negate):
        (JSC::Machine::cti_op_resolve_base):
        (JSC::Machine::cti_op_resolve_skip):
        (JSC::Machine::cti_op_resolve_global):
        (JSC::Machine::cti_op_div):
        (JSC::Machine::cti_op_pre_dec):
        (JSC::Machine::cti_op_jless):
        (JSC::Machine::cti_op_not):
        (JSC::Machine::cti_op_jtrue):
        (JSC::Machine::cti_op_post_inc):
        (JSC::Machine::cti_op_eq):
        (JSC::Machine::cti_op_lshift):
        (JSC::Machine::cti_op_bitand):
        (JSC::Machine::cti_op_rshift):
        (JSC::Machine::cti_op_bitnot):
        (JSC::Machine::cti_op_resolve_with_base):
        (JSC::Machine::cti_op_new_func_exp):
        (JSC::Machine::cti_op_mod):
        (JSC::Machine::cti_op_less):
        (JSC::Machine::cti_op_neq):
        (JSC::Machine::cti_op_post_dec):
        (JSC::Machine::cti_op_urshift):
        (JSC::Machine::cti_op_bitxor):
        (JSC::Machine::cti_op_new_regexp):
        (JSC::Machine::cti_op_bitor):
        (JSC::Machine::cti_op_call_eval):
        (JSC::Machine::cti_op_throw):
        (JSC::Machine::cti_op_get_pnames):
        (JSC::Machine::cti_op_next_pname):
        (JSC::Machine::cti_op_push_scope):
        (JSC::Machine::cti_op_pop_scope):
        (JSC::Machine::cti_op_typeof):
        (JSC::Machine::cti_op_is_undefined):
        (JSC::Machine::cti_op_is_boolean):
        (JSC::Machine::cti_op_is_number):
        (JSC::Machine::cti_op_is_string):
        (JSC::Machine::cti_op_is_object):
        (JSC::Machine::cti_op_is_function):
        (JSC::Machine::cti_op_stricteq):
        (JSC::Machine::cti_op_nstricteq):
        (JSC::Machine::cti_op_to_jsnumber):
        (JSC::Machine::cti_op_in):
        (JSC::Machine::cti_op_push_new_scope):
        (JSC::Machine::cti_op_jmp_scopes):
        (JSC::Machine::cti_op_put_by_index):
        (JSC::Machine::cti_op_switch_imm):
        (JSC::Machine::cti_op_switch_char):
        (JSC::Machine::cti_op_switch_string):
        (JSC::Machine::cti_op_del_by_val):
        (JSC::Machine::cti_op_put_getter):
        (JSC::Machine::cti_op_put_setter):
        (JSC::Machine::cti_op_new_error):
        (JSC::Machine::cti_op_debug):
        (JSC::Machine::cti_vm_throw):

2008-10-17  Gavin Barraclough  <barraclough@apple.com>

        Optimize op_call by allowing call sites to be directly linked to callees.

        For the hot path of op_call, CTI now generates a check (initially for an impossible
        value), and the first time the call is executed we attempt to link the call directly
        to the callee.  We can currently only do so if the arity of the caller and callee
        match.  The (optimized) setup for the call on the hot path is linked directly to
        the ctiCode for the callee, without indirection.
        
        Two forms of the slow case of the call are generated, the first will be executed the
        first time the call is reached.  As well as this path attempting to link the call to
        a callee, it also relinks the slow case to a second slow case, which will not continue
        to attempt relinking the call.  (This policy could be changed in future, but for not
        this is intended to prevent thrashing).

        If a callee that the caller has been linked to is garbage collected, then the link
        in the caller's JIt code will be reset back to a value that cannot match - to prevent
        any false positive matches.

        ~20% progression on deltablue & richards, >12% overall reduction in v8-tests
        runtime, one or two percent progression on sunspider.

        Reviewed by Oliver Hunt.

        * VM/CTI.cpp:
        (JSC::):
        (JSC::CTI::emitNakedCall):
        (JSC::unreachable):
        (JSC::CTI::compileOpCallInitializeCallFrame):
        (JSC::CTI::compileOpCallSetupArgs):
        (JSC::CTI::compileOpCall):
        (JSC::CTI::privateCompileMainPass):
        (JSC::CTI::privateCompileSlowCases):
        (JSC::CTI::privateCompile):
        (JSC::CTI::unlinkCall):
        (JSC::CTI::linkCall):
        * VM/CTI.h:
        * VM/CodeBlock.cpp:
        (JSC::CodeBlock::~CodeBlock):
        (JSC::CodeBlock::unlinkCallers):
        (JSC::CodeBlock::derefStructureIDs):
        * VM/CodeBlock.h:
        (JSC::StructureStubInfo::StructureStubInfo):
        (JSC::CallLinkInfo::CallLinkInfo):
        (JSC::CodeBlock::addCaller):
        (JSC::CodeBlock::removeCaller):
        (JSC::CodeBlock::getStubInfo):
        * VM/CodeGenerator.cpp:
        (JSC::CodeGenerator::emitCall):
        (JSC::CodeGenerator::emitConstruct):
        * VM/Machine.cpp:
        (JSC::Machine::cti_op_call_profiler):
        (JSC::Machine::cti_op_call_JSFunction):
        (JSC::Machine::cti_vm_lazyLinkCall):
        (JSC::Machine::cti_op_construct_JSConstructFast):
        (JSC::Machine::cti_op_construct_JSConstruct):
        (JSC::Machine::cti_op_construct_NotJSConstruct):
        * VM/Machine.h:
        * kjs/JSFunction.cpp:
        (JSC::JSFunction::~JSFunction):
        * kjs/JSFunction.h:
        * kjs/nodes.h:
        (JSC::FunctionBodyNode::):
        * masm/X86Assembler.h:
        (JSC::X86Assembler::getDifferenceBetweenLabels):

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

        Reviewed by Geoff Garen.
        
        - remove ASSERT that makes the leaks buildbot cry

        * kjs/JSFunction.cpp:
        (JSC::JSFunction::JSFunction):

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

        Reviewed by Cameron Zwarich
        
        - don't bother to do arguments tearoff when it will have no effect

        ~1% on v8 raytrace
        
        * VM/CodeGenerator.cpp:
        (JSC::CodeGenerator::emitReturn):

2008-10-17  Marco Barisione  <marco.barisione@collabora.co.uk>

        Reviewed by Sam Weinig. Landed by Jan Alonzo.

        https://bugs.webkit.org/show_bug.cgi?id=21603
        [GTK] Minor fixes to GOwnPtr

        * wtf/GOwnPtr.cpp:
        (WTF::GError):
        (WTF::GList):
        (WTF::GCond):
        (WTF::GMutex):
        (WTF::GPatternSpec):
        (WTF::GDir):
        * wtf/GOwnPtr.h:
        (WTF::freeOwnedGPtr):
        (WTF::GOwnPtr::~GOwnPtr):
        (WTF::GOwnPtr::outPtr):
        (WTF::GOwnPtr::set):
        (WTF::GOwnPtr::clear):
        * wtf/Threading.h:

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

        Reviewed by Cameron Zwarich.
        
        - speed up transitions that resize the property storage a fair bit
        
        ~3% speedup on v8 RayTrace benchmark, ~1% on DeltaBlue

        * VM/CTI.cpp:
        (JSC::resizePropertyStorage): renamed from transitionObject, and reduced to just resize
        the object's property storage with one inline call.
        (JSC::CTI::privateCompilePutByIdTransition): Use a separate function for property storage
        resize, but still do all the rest of the work in assembly in that case, and pass the known
        compile-time constants of old and new size rather than structureIDs, saving a bunch of
        redundant memory access.
        * kjs/JSObject.cpp:
        (JSC::JSObject::allocatePropertyStorage): Just call the inline version.
        * kjs/JSObject.h:
        (JSC::JSObject::allocatePropertyStorageInline): Inline version of allocatePropertyStorage
        * masm/X86Assembler.h:
        (JSC::X86Assembler::):
        (JSC::X86Assembler::pushl_i32): Add code to assmeble push of a constant; code originally by Cameron Zwarich.

2008-10-17  Cameron Zwarich  <zwarich@apple.com>

        Reviewed by Maciej Stachowiak.

        Remove some C style casts.

        * masm/X86Assembler.h:
        (JSC::JITCodeBuffer::putIntUnchecked):
        (JSC::X86Assembler::link):
        (JSC::X86Assembler::linkAbsoluteAddress):
        (JSC::X86Assembler::getRelocatedAddress):

2008-10-17  Cameron Zwarich  <zwarich@apple.com>

        Rubber-stamped by Maciej Stachowiak.

        Remove some C style casts.

        * VM/CTI.cpp:
        (JSC::CTI::patchGetByIdSelf):
        (JSC::CTI::patchPutByIdReplace):
        * VM/Machine.cpp:
        (JSC::Machine::tryCTICachePutByID):
        (JSC::Machine::tryCTICacheGetByID):
        (JSC::Machine::cti_op_put_by_id):
        (JSC::Machine::cti_op_put_by_id_fail):
        (JSC::Machine::cti_op_get_by_id):
        (JSC::Machine::cti_op_get_by_id_fail):

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

        Reviewed by Cameron Zwarich.
        
        - Avoid restoring the caller's 'r' value in op_ret
        https://bugs.webkit.org/show_bug.cgi?id=21319

        This patch stops writing the call frame at call and return points;
        instead it does so immediately before any CTI call.
        
        0.5% speedup or so on the v8 benchmark
               
        * VM/CTI.cpp:
        (JSC::CTI::emitCTICall):
        (JSC::CTI::compileOpCall):
        (JSC::CTI::emitSlowScriptCheck):
        (JSC::CTI::compileBinaryArithOpSlowCase):
        (JSC::CTI::privateCompileMainPass):
        (JSC::CTI::privateCompileSlowCases):
        (JSC::CTI::privateCompile):
        * VM/CTI.h:

2008-10-17  Cameron Zwarich  <zwarich@apple.com>

        Reviewed by Sam Weinig.

        Make WREC require CTI because it won't actually compile otherwise.

        * wtf/Platform.h:

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

        Reviewed by Geoff Garen.

        - fixed <rdar://problem/5806316> JavaScriptCore should not force building with gcc 4.0
        - use gcc 4.2 when building with Xcode 3.1 or newer on Leopard, even though this is not the default

        This time there is no performance regression; we can avoid having
        to use the fastcall calling convention for CTI functions by using
        varargs to prevent the compiler from moving things around on the
        stack.
        
        * Configurations/DebugRelease.xcconfig:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * VM/CTI.cpp:
        * VM/Machine.h:
        * wtf/Platform.h:

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

        Reviewed by Oliver Hunt.

        - fix for REGRESSION: r37631 causing crashes on buildbot
        https://bugs.webkit.org/show_bug.cgi?id=21682
        
        * kjs/collector.cpp:
        (JSC::Heap::collect): Avoid crashing when a GC occurs while no global objects are live.

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

        Reviewed by Maciej Stachowiak.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=21683
        Don't create intermediate StructureIDs for builtin objects

        First step in reduce number of StructureIDs created when initializing the
        JSGlobalObject.

        - In order to avoid creating the intermediate StructureIDs use the new putDirectWithoutTransition
          and putDirectFunctionWithoutTransition to add properties to JSObjects without transitioning
          the StructureID.  This patch just implements this strategy for ObjectPrototype but alone
          reduces the number of StructureIDs create for about:blank by 10, from 142 to 132.

        * kjs/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::reset):
        * kjs/JSObject.cpp:
        (JSC::JSObject::putDirectFunctionWithoutTransition):
        * kjs/JSObject.h:
        (JSC::JSObject::putDirectWithoutTransition):
        * kjs/ObjectPrototype.cpp:
        (JSC::ObjectPrototype::ObjectPrototype):
        * kjs/ObjectPrototype.h:
        * kjs/StructureID.cpp:
        (JSC::StructureID::addPropertyWithoutTransition):
        * kjs/StructureID.h:

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

        Reviewed by Cameron Zwarich.
        
        - fix for: REGRESSION: over 100 StructureIDs leak loading about:blank (result of fix for bug 21633)
        
        Apparent slight progression (< 0.5%) on v8 benchmarks and SunSpider.

        * kjs/StructureID.cpp:
        (JSC::StructureID::~StructureID): Don't deref this object's parent's pointer to
        itself from the destructor; that doesn't even make sense.
        (JSC::StructureID::addPropertyTransition): Don't refer the single transition;
        the rule is that parent StructureIDs are ref'd but child ones are not. Refing
        the child creates a cycle.

2008-10-15  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=21609
        Make MessagePorts protect their peers across heaps

        * JavaScriptCore.exp:
        * kjs/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::markCrossHeapDependentObjects):
        * kjs/JSGlobalObject.h:
        * kjs/collector.cpp:
        (JSC::Heap::collect):
        Before GC sweep phase, a function supplied by global object is now called for all global
        objects in the heap, making it possible to implement cross-heap dependencies.

2008-10-15  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=21610
        run-webkit-threads --threaded crashes in StructureID destructor

        * kjs/StructureID.cpp:
        (JSC::StructureID::StructureID):
        (JSC::StructureID::~StructureID):
        Protect access to a static (debug-only) HashSet with a lock.

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

        Reviewed by Goeffrey Garen.

        Add function to dump statistics for StructureIDs.

        * kjs/StructureID.cpp:
        (JSC::StructureID::dumpStatistics):
        (JSC::StructureID::StructureID):
        (JSC::StructureID::~StructureID):
        * kjs/StructureID.h:

2008-10-15  Cameron Zwarich  <zwarich@apple.com>

        Reviewed by Maciej Stachowiak.

        Bug 21633: Avoid using a HashMap when there is only a single transition
        <https://bugs.webkit.org/show_bug.cgi?id=21633>

        This is a 0.8% speedup on SunSpider and between a 0.5% and 1.0% speedup
        on the V8 benchmark suite, depending on which harness we use. It will
        also slightly reduce the memory footprint of a StructureID.

        * kjs/StructureID.cpp:
        (JSC::StructureID::StructureID):
        (JSC::StructureID::~StructureID):
        (JSC::StructureID::addPropertyTransition):
        * kjs/StructureID.h:
        (JSC::StructureID::):

2008-10-15  Csaba Osztrogonac  <oszi@inf.u-szeged.hu>

        Reviewed by Geoffrey Garen.

        1.40% speedup on SunSpider, 1.44% speedup on V8. (Linux)
        
        No change on Mac.

        * VM/Machine.cpp:
        (JSC::fastIsNumber): ALWAYS_INLINE modifier added.

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

        Reviewed by Cameron Zwarich.

        Fixed https://bugs.webkit.org/show_bug.cgi?id=21345
        Start the debugger without reloading the inspected page

        * JavaScriptCore.exp: New symbols.
        * JavaScriptCore.xcodeproj/project.pbxproj: New files.

        * VM/CodeBlock.h:
        (JSC::EvalCodeCache::get): Updated for tweak to parsing API.

        * kjs/CollectorHeapIterator.h: Added. An iterator for the object heap,
        which we use to find all the live functions and recompile them.

        * kjs/DebuggerCallFrame.cpp:
        (JSC::DebuggerCallFrame::evaluate): Updated for tweak to parsing API.

        * kjs/FunctionConstructor.cpp:
        (JSC::constructFunction): Updated for tweak to parsing API.

        * kjs/JSFunction.cpp:
        (JSC::JSFunction::JSFunction): Try to validate our SourceCode in debug
        builds by ASSERTing that it's syntactically valid. This doesn't catch
        all SourceCode bugs, but it catches a lot of them.

        * kjs/JSGlobalObjectFunctions.cpp:
        (JSC::globalFuncEval): Updated for tweak to parsing API.

        * kjs/Parser.cpp:
        (JSC::Parser::parse):
        * kjs/Parser.h:
        (JSC::Parser::parse): Tweaked the parser to make it possible to parse
        without an ExecState, and to allow the client to specify a debugger to
        notify (or not) about the source we parse. This allows the inspector
        to recompile even though no JavaScript is executing, then notify the
        debugger about all source code when it's done.

        * kjs/Shell.cpp:
        (prettyPrintScript): Updated for tweak to parsing API.

        * kjs/SourceRange.h:
        (JSC::SourceCode::isNull): Added to help with ASSERTs.

        * kjs/collector.cpp:
        (JSC::Heap::heapAllocate):
        (JSC::Heap::sweep):
        (JSC::Heap::primaryHeapBegin):
        (JSC::Heap::primaryHeapEnd):
        * kjs/collector.h:
        (JSC::): Moved a bunch of declarations around to enable compilation of
        CollectorHeapIterator.

        * kjs/interpreter.cpp:
        (JSC::Interpreter::checkSyntax):
        (JSC::Interpreter::evaluate): Updated for tweak to parsing API.

        * kjs/lexer.h:
        (JSC::Lexer::sourceCode): BUG FIX: Calculate SourceCode ranges relative
        to the SourceCode range in which we're lexing, otherwise nested functions
        that are compiled individually get SourceCode ranges that don't reflect
        their nesting.

        * kjs/nodes.cpp:
        (JSC::FunctionBodyNode::FunctionBodyNode):
        (JSC::FunctionBodyNode::finishParsing):
        (JSC::FunctionBodyNode::create):
        (JSC::FunctionBodyNode::copyParameters):
        * kjs/nodes.h:
        (JSC::ScopeNode::setSource):
        (JSC::FunctionBodyNode::parameterCount): Added some helper functions for
        copying one FunctionBodyNode's parameters to another. The recompiler uses
        these when calling "finishParsing".

2008-10-15  Joerg Bornemann  <joerg.bornemann@trolltech.com>

        Reviewed by Darin Adler.

        - part of https://bugs.webkit.org/show_bug.cgi?id=20746
          Fix compilation on Windows CE.

        str(n)icmp, strdup and vsnprintf are not available on Windows CE,
        they are called _str(n)icmp, etc. instead

        * wtf/StringExtras.h: Added inline function implementations.

2008-10-15  Gabor Loki  <loki@inf.u-szeged.hu>

        Reviewed by Cameron Zwarich.

        <https://bugs.webkit.org/show_bug.cgi?id=20912>
        Use simple uint32_t multiplication on op_mul if both operands are
        immediate number and they are between zero and 0x7FFF.

        * VM/Machine.cpp:
        (JSC::Machine::privateExecute):

2008-10-09  Darin Fisher  <darin@chromium.org>

        Reviewed by Sam Weinig.

        Make pan scrolling a platform configurable option.
        https://bugs.webkit.org/show_bug.cgi?id=21515

        * wtf/Platform.h: Add ENABLE_PAN_SCROLLING

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

        Rubber stamped by Sam Weinig.
        
        - revert r37572 and r37581 for now
        
        Turns out GCC 4.2 is still a (small) regression, we'll have to do
        more work to turn it on.

        * Configurations/DebugRelease.xcconfig:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * VM/CTI.cpp:
        * VM/CTI.h:
        * VM/Machine.cpp:
        (JSC::Machine::cti_op_convert_this):
        (JSC::Machine::cti_op_end):
        (JSC::Machine::cti_op_add):
        (JSC::Machine::cti_op_pre_inc):
        (JSC::Machine::cti_timeout_check):
        (JSC::Machine::cti_register_file_check):
        (JSC::Machine::cti_op_loop_if_less):
        (JSC::Machine::cti_op_loop_if_lesseq):
        (JSC::Machine::cti_op_new_object):
        (JSC::Machine::cti_op_put_by_id):
        (JSC::Machine::cti_op_put_by_id_second):
        (JSC::Machine::cti_op_put_by_id_generic):
        (JSC::Machine::cti_op_put_by_id_fail):
        (JSC::Machine::cti_op_get_by_id):
        (JSC::Machine::cti_op_get_by_id_second):
        (JSC::Machine::cti_op_get_by_id_generic):
        (JSC::Machine::cti_op_get_by_id_fail):
        (JSC::Machine::cti_op_instanceof):
        (JSC::Machine::cti_op_del_by_id):
        (JSC::Machine::cti_op_mul):
        (JSC::Machine::cti_op_new_func):
        (JSC::Machine::cti_op_call_JSFunction):
        (JSC::Machine::cti_vm_compile):
        (JSC::Machine::cti_op_push_activation):
        (JSC::Machine::cti_op_call_NotJSFunction):
        (JSC::Machine::cti_op_create_arguments):
        (JSC::Machine::cti_op_tear_off_activation):
        (JSC::Machine::cti_op_tear_off_arguments):
        (JSC::Machine::cti_op_ret_profiler):
        (JSC::Machine::cti_op_ret_scopeChain):
        (JSC::Machine::cti_op_new_array):
        (JSC::Machine::cti_op_resolve):
        (JSC::Machine::cti_op_construct_JSConstruct):
        (JSC::Machine::cti_op_construct_NotJSConstruct):
        (JSC::Machine::cti_op_get_by_val):
        (JSC::Machine::cti_op_resolve_func):
        (JSC::Machine::cti_op_sub):
        (JSC::Machine::cti_op_put_by_val):
        (JSC::Machine::cti_op_put_by_val_array):
        (JSC::Machine::cti_op_lesseq):
        (JSC::Machine::cti_op_loop_if_true):
        (JSC::Machine::cti_op_negate):
        (JSC::Machine::cti_op_resolve_base):
        (JSC::Machine::cti_op_resolve_skip):
        (JSC::Machine::cti_op_resolve_global):
        (JSC::Machine::cti_op_div):
        (JSC::Machine::cti_op_pre_dec):
        (JSC::Machine::cti_op_jless):
        (JSC::Machine::cti_op_not):
        (JSC::Machine::cti_op_jtrue):
        (JSC::Machine::cti_op_post_inc):
        (JSC::Machine::cti_op_eq):
        (JSC::Machine::cti_op_lshift):
        (JSC::Machine::cti_op_bitand):
        (JSC::Machine::cti_op_rshift):
        (JSC::Machine::cti_op_bitnot):
        (JSC::Machine::cti_op_resolve_with_base):
        (JSC::Machine::cti_op_new_func_exp):
        (JSC::Machine::cti_op_mod):
        (JSC::Machine::cti_op_less):
        (JSC::Machine::cti_op_neq):
        (JSC::Machine::cti_op_post_dec):
        (JSC::Machine::cti_op_urshift):
        (JSC::Machine::cti_op_bitxor):
        (JSC::Machine::cti_op_new_regexp):
        (JSC::Machine::cti_op_bitor):
        (JSC::Machine::cti_op_call_eval):
        (JSC::Machine::cti_op_throw):
        (JSC::Machine::cti_op_get_pnames):
        (JSC::Machine::cti_op_next_pname):
        (JSC::Machine::cti_op_push_scope):
        (JSC::Machine::cti_op_pop_scope):
        (JSC::Machine::cti_op_typeof):
        (JSC::Machine::cti_op_is_undefined):
        (JSC::Machine::cti_op_is_boolean):
        (JSC::Machine::cti_op_is_number):
        (JSC::Machine::cti_op_is_string):
        (JSC::Machine::cti_op_is_object):
        (JSC::Machine::cti_op_is_function):
        (JSC::Machine::cti_op_stricteq):
        (JSC::Machine::cti_op_nstricteq):
        (JSC::Machine::cti_op_to_jsnumber):
        (JSC::Machine::cti_op_in):
        (JSC::Machine::cti_op_push_new_scope):
        (JSC::Machine::cti_op_jmp_scopes):
        (JSC::Machine::cti_op_put_by_index):
        (JSC::Machine::cti_op_switch_imm):
        (JSC::Machine::cti_op_switch_char):
        (JSC::Machine::cti_op_switch_string):
        (JSC::Machine::cti_op_del_by_val):
        (JSC::Machine::cti_op_put_getter):
        (JSC::Machine::cti_op_put_setter):
        (JSC::Machine::cti_op_new_error):
        (JSC::Machine::cti_op_debug):
        (JSC::Machine::cti_vm_throw):
        * VM/Machine.h:
        * masm/X86Assembler.h:
        (JSC::X86Assembler::emitRestoreArgumentReference):
        (JSC::X86Assembler::emitRestoreArgumentReferenceForTrampoline):
        * wtf/Platform.h:

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

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=20256
        Array.push and other standard methods disappear

        * kjs/JSGlobalData.cpp:
        (JSC::JSGlobalData::JSGlobalData):
        (JSC::JSGlobalData::~JSGlobalData):
        Don't use static hash tables even on platforms that don't enable JSC_MULTIPLE_THREADS -
        these tables reference IdentifierTable, which is always per-GlobalData.

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

        Reviewed by Cameron Zwarich.
        
        - always use CTI_ARGUMENTS and CTI_ARGUMENTS_FASTCALL
        
        This is a small regression for GCC 4.0, but simplifies the code
        for future improvements and lets us focus on GCC 4.2+ and MSVC.

        * VM/CTI.cpp:
        * VM/CTI.h:
        * VM/Machine.cpp:
        (JSC::Machine::cti_op_convert_this):
        (JSC::Machine::cti_op_end):
        (JSC::Machine::cti_op_add):
        (JSC::Machine::cti_op_pre_inc):
        (JSC::Machine::cti_timeout_check):
        (JSC::Machine::cti_register_file_check):
        (JSC::Machine::cti_op_loop_if_less):
        (JSC::Machine::cti_op_loop_if_lesseq):
        (JSC::Machine::cti_op_new_object):
        (JSC::Machine::cti_op_put_by_id):
        (JSC::Machine::cti_op_put_by_id_second):
        (JSC::Machine::cti_op_put_by_id_generic):
        (JSC::Machine::cti_op_put_by_id_fail):
        (JSC::Machine::cti_op_get_by_id):
        (JSC::Machine::cti_op_get_by_id_second):
        (JSC::Machine::cti_op_get_by_id_generic):
        (JSC::Machine::cti_op_get_by_id_fail):
        (JSC::Machine::cti_op_instanceof):
        (JSC::Machine::cti_op_del_by_id):
        (JSC::Machine::cti_op_mul):
        (JSC::Machine::cti_op_new_func):
        (JSC::Machine::cti_op_call_JSFunction):
        (JSC::Machine::cti_vm_compile):
        (JSC::Machine::cti_op_push_activation):
        (JSC::Machine::cti_op_call_NotJSFunction):
        (JSC::Machine::cti_op_create_arguments):
        (JSC::Machine::cti_op_tear_off_activation):
        (JSC::Machine::cti_op_tear_off_arguments):
        (JSC::Machine::cti_op_ret_profiler):
        (JSC::Machine::cti_op_ret_scopeChain):
        (JSC::Machine::cti_op_new_array):
        (JSC::Machine::cti_op_resolve):
        (JSC::Machine::cti_op_construct_JSConstruct):
        (JSC::Machine::cti_op_construct_NotJSConstruct):
        (JSC::Machine::cti_op_get_by_val):
        (JSC::Machine::cti_op_resolve_func):
        (JSC::Machine::cti_op_sub):
        (JSC::Machine::cti_op_put_by_val):
        (JSC::Machine::cti_op_put_by_val_array):
        (JSC::Machine::cti_op_lesseq):
        (JSC::Machine::cti_op_loop_if_true):
        (JSC::Machine::cti_op_negate):
        (JSC::Machine::cti_op_resolve_base):
        (JSC::Machine::cti_op_resolve_skip):
        (JSC::Machine::cti_op_resolve_global):
        (JSC::Machine::cti_op_div):
        (JSC::Machine::cti_op_pre_dec):
        (JSC::Machine::cti_op_jless):
        (JSC::Machine::cti_op_not):
        (JSC::Machine::cti_op_jtrue):
        (JSC::Machine::cti_op_post_inc):
        (JSC::Machine::cti_op_eq):
        (JSC::Machine::cti_op_lshift):
        (JSC::Machine::cti_op_bitand):
        (JSC::Machine::cti_op_rshift):
        (JSC::Machine::cti_op_bitnot):
        (JSC::Machine::cti_op_resolve_with_base):
        (JSC::Machine::cti_op_new_func_exp):
        (JSC::Machine::cti_op_mod):
        (JSC::Machine::cti_op_less):
        (JSC::Machine::cti_op_neq):
        (JSC::Machine::cti_op_post_dec):
        (JSC::Machine::cti_op_urshift):
        (JSC::Machine::cti_op_bitxor):
        (JSC::Machine::cti_op_new_regexp):
        (JSC::Machine::cti_op_bitor):
        (JSC::Machine::cti_op_call_eval):
        (JSC::Machine::cti_op_throw):
        (JSC::Machine::cti_op_get_pnames):
        (JSC::Machine::cti_op_next_pname):
        (JSC::Machine::cti_op_push_scope):
        (JSC::Machine::cti_op_pop_scope):
        (JSC::Machine::cti_op_typeof):
        (JSC::Machine::cti_op_is_undefined):
        (JSC::Machine::cti_op_is_boolean):
        (JSC::Machine::cti_op_is_number):
        (JSC::Machine::cti_op_is_string):
        (JSC::Machine::cti_op_is_object):
        (JSC::Machine::cti_op_is_function):
        (JSC::Machine::cti_op_stricteq):
        (JSC::Machine::cti_op_nstricteq):
        (JSC::Machine::cti_op_to_jsnumber):
        (JSC::Machine::cti_op_in):
        (JSC::Machine::cti_op_push_new_scope):
        (JSC::Machine::cti_op_jmp_scopes):
        (JSC::Machine::cti_op_put_by_index):
        (JSC::Machine::cti_op_switch_imm):
        (JSC::Machine::cti_op_switch_char):
        (JSC::Machine::cti_op_switch_string):
        (JSC::Machine::cti_op_del_by_val):
        (JSC::Machine::cti_op_put_getter):
        (JSC::Machine::cti_op_put_setter):
        (JSC::Machine::cti_op_new_error):
        (JSC::Machine::cti_op_debug):
        (JSC::Machine::cti_vm_throw):
        * VM/Machine.h:
        * masm/X86Assembler.h:
        (JSC::X86Assembler::emitRestoreArgumentReference):
        (JSC::X86Assembler::emitRestoreArgumentReferenceForTrampoline):
        * wtf/Platform.h:

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

        Reviewed by Cameron Zwarich.
        
        - make Machine::getArgumentsData an Arguments method and inline it
        
        ~2% on v8 raytrace

        * VM/Machine.cpp:
        * kjs/Arguments.h:
        (JSC::Machine::getArgumentsData):

2008-10-13  Alp Toker  <alp@nuanti.com>

        Fix autotools dist build target by listing recently added header
        files only. Not reviewed.

        * GNUmakefile.am:

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

        Rubber stamped by Mark Rowe.
        
        - fixed <rdar://problem/5806316> JavaScriptCore should not force building with gcc 4.0
        - use gcc 4.2 when building with Xcode 3.1 or newer on Leopard, even though this is not the default

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

2008-10-13  Cameron Zwarich  <zwarich@apple.com>

        Reviewed by Geoff Garen.

        Bug 21541: Move RegisterFile growth check to callee
        <https://bugs.webkit.org/show_bug.cgi?id=21541>

        Move the RegisterFile growth check to the callee in the common case,
        where some of the information is known statically at JIT time. There is
        still a check in the caller in the case where the caller provides too
        few arguments.

        This is a 2.1% speedup on the V8 benchmark, including a 5.1% speedup on
        the Richards benchmark, a 4.1% speedup on the DeltaBlue benchmark, and a
        1.4% speedup on the Earley-Boyer benchmark. It is also a 0.5% speedup on
        SunSpider.

        * VM/CTI.cpp:
        (JSC::CTI::privateCompile):
        * VM/Machine.cpp:
        (JSC::Machine::cti_register_file_check):
        (JSC::Machine::cti_op_call_JSFunction):
        (JSC::Machine::cti_op_construct_JSConstruct):
        * VM/Machine.h:
        * VM/RegisterFile.h:
        * masm/X86Assembler.h:
        (JSC::X86Assembler::):
        (JSC::X86Assembler::cmpl_mr):
        (JSC::X86Assembler::emitUnlinkedJg):

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

        Reviewed by Dan Bernstein.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=21577
        5 false positive StructureID leaks

        - Add leak ignore set to StructureID to selectively ignore leaking some StructureIDs.
        - Add create method to JSGlolalData to be used when the data will be intentionally
          leaked and ignore all leaks caused the StructureIDs stored in it.

        * JavaScriptCore.exp:
        * kjs/JSGlobalData.cpp:
        (JSC::JSGlobalData::createLeaked):
        * kjs/JSGlobalData.h:
        * kjs/StructureID.cpp:
        (JSC::StructureID::StructureID):
        (JSC::StructureID::~StructureID):
        (JSC::StructureID::startIgnoringLeaks):
        (JSC::StructureID::stopIgnoringLeaks):
        * kjs/StructureID.h:

2008-10-13  Marco Barisione  <marco.barisione@collabora.co.uk>

        Reviewed by Darin Adler. Landed by Jan Alonzo.

        WebKit GTK Port needs a smartpointer to handle g_free (GFreePtr?)
        http://bugs.webkit.org/show_bug.cgi?id=20483

        Add a GOwnPtr smart pointer (similar to OwnPtr) to handle memory
        allocated by GLib and start the conversion to use it.

        * GNUmakefile.am:
        * wtf/GOwnPtr.cpp: Added.
        (WTF::GError):
        (WTF::GList):
        (WTF::GCond):
        (WTF::GMutex):
        (WTF::GPatternSpec):
        (WTF::GDir):
        * wtf/GOwnPtr.h: Added.
        (WTF::freeOwnedPtr):
        (WTF::GOwnPtr::GOwnPtr):
        (WTF::GOwnPtr::~GOwnPtr):
        (WTF::GOwnPtr::get):
        (WTF::GOwnPtr::release):
        (WTF::GOwnPtr::rawPtr):
        (WTF::GOwnPtr::set):
        (WTF::GOwnPtr::clear):
        (WTF::GOwnPtr::operator*):
        (WTF::GOwnPtr::operator->):
        (WTF::GOwnPtr::operator!):
        (WTF::GOwnPtr::operator UnspecifiedBoolType):
        (WTF::GOwnPtr::swap):
        (WTF::swap):
        (WTF::operator==):
        (WTF::operator!=):
        (WTF::getPtr):
        * wtf/Threading.h:
        * wtf/ThreadingGtk.cpp:
        (WTF::Mutex::~Mutex):
        (WTF::Mutex::lock):
        (WTF::Mutex::tryLock):
        (WTF::Mutex::unlock):
        (WTF::ThreadCondition::~ThreadCondition):
        (WTF::ThreadCondition::wait):
        (WTF::ThreadCondition::timedWait):
        (WTF::ThreadCondition::signal):
        (WTF::ThreadCondition::broadcast):

2008-10-12  Gabriella Toth  <gtoth@inf.u-szeged.hu>

        Reviewed by Darin Adler.

        - part of https://bugs.webkit.org/show_bug.cgi?id=21055
          Bug 21055: not invoked functions

        * kjs/nodes.cpp: Deleted a function that is not invoked:
        statementListInitializeVariableAccessStack.

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

        Reviewed by Sam Weinig.

        * wtf/unicode/icu/UnicodeIcu.h: Fixed indentation to match WebKit coding style.
        * wtf/unicode/qt4/UnicodeQt4.h: Ditto.

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

        Reviewed by Sam Weinig.

        - https://bugs.webkit.org/show_bug.cgi?id=21556
          Bug 21556: non-ASCII digits are allowed in places where only ASCII should be

        * wtf/unicode/icu/UnicodeIcu.h: Removed isDigit, digitValue, and isFormatChar.
        * wtf/unicode/qt4/UnicodeQt4.h: Ditto.

2008-10-12  Anders Carlsson  <andersca@apple.com>

        Reviewed by Darin Adler.

        Make the append method that takes a Vector more strict - it now requires the elements 
        of the vector to be appended same type as the elements of the Vector they're being appended to.
        
        This would cause problems when dealing with Vectors containing other Vectors.
        
        * wtf/Vector.h:
        (WTF::::append):

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

        Reviewed by Sam Weinig.

        Clean up RegExpMatchesArray.h to match our coding style.

        * kjs/RegExpMatchesArray.h:
        (JSC::RegExpMatchesArray::getOwnPropertySlot):
        (JSC::RegExpMatchesArray::put):
        (JSC::RegExpMatchesArray::deleteProperty):
        (JSC::RegExpMatchesArray::getPropertyNames):

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

        Reviewed by Sam Weinig.

        Bug 21525: 55 StructureID leaks on Wikitravel's main page
        <https://bugs.webkit.org/show_bug.cgi?id=21525>

        Bug 21533: Simple JavaScript code leaks StructureIDs
        <https://bugs.webkit.org/show_bug.cgi?id=21533>

        StructureID::getEnumerablePropertyNames() ends up calling back to itself
        via JSObject::getPropertyNames(), which causes the PropertyNameArray to
        be cached twice. This leads to a memory leak in almost every use of
        JSObject::getPropertyNames() on an object. The fix here is based on a
        suggestion of Sam Weinig.

        This patch also fixes every StructureID leaks that occurs while running
        the Mozilla MemBuster test.

        * kjs/PropertyNameArray.h:
        (JSC::PropertyNameArray::PropertyNameArray):
        (JSC::PropertyNameArray::setCacheable):
        (JSC::PropertyNameArray::cacheable):
        * kjs/StructureID.cpp:
        (JSC::StructureID::getEnumerablePropertyNames):

2008-10-10  Oliver Hunt  <oliver@apple.com>

        Reviewed by Cameron Zwarich.

        Use fastcall calling convention on GCC > 4.0

        Results in a 2-3% improvement in GCC 4.2 performance, so
        that it is no longer a regression vs. GCC 4.0

        * VM/CTI.cpp:
        * VM/Machine.h:
        * wtf/Platform.h:

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

        Reviewed by Darin Adler.

        - Add a workaround for a bug in ceil in Darwin libc.
        - Remove old workarounds for JS math functions that are not needed
          anymore.

        The math functions are heavily tested by fast/js/math.html.

        * kjs/MathObject.cpp:
        (JSC::mathProtoFuncAbs): Remove workaround.
        (JSC::mathProtoFuncCeil): Ditto.
        (JSC::mathProtoFuncFloor): Ditto.
        * wtf/MathExtras.h:
        (wtf_ceil): Add ceil workaround for darwin.

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

        Reviewed by Darin Adler

        Add Assertions to JSObject constructor.

        * kjs/JSObject.h:
        (JSC::JSObject::JSObject):

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

        Reviewed by Cameron Zwarich.

        Remove now unused m_getterSetterFlag variable from PropertyMap.

        * kjs/PropertyMap.cpp:
        (JSC::PropertyMap::operator=):
        * kjs/PropertyMap.h:
        (JSC::PropertyMap::PropertyMap):

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

        Reviewed by Maciej Stachowiak.

        Add leaks checking to StructureID.

        * kjs/StructureID.cpp:
        (JSC::StructureID::StructureID):
        (JSC::StructureID::~StructureID):

2008-10-09  Alp Toker  <alp@nuanti.com>

        Reviewed by Mark Rowe.

        https://bugs.webkit.org/show_bug.cgi?id=20760
        Implement support for x86 Linux in CTI

        Prepare to enable CTI/WREC on supported architectures.

        Make it possible to use the CTI_ARGUMENT workaround with GCC as well
        as MSVC by fixing some preprocessor conditionals.

        Note that CTI/WREC no longer requires CTI_ARGUMENT on Linux so we
        don't actually enable it except when building with MSVC. GCC on Win32
        remains untested.

        Adapt inline ASM code to use the global symbol underscore prefix only
        on Darwin and to call the properly mangled Machine::cti_vm_throw
        symbol name depending on CTI_ARGUMENT.

        Also avoid global inclusion of the JIT infrastructure headers
        throughout WebCore and WebKit causing recompilation of about ~1500
        source files after modification to X86Assembler.h, CTI.h, WREC.h,
        which are only used deep inside JavaScriptCore.

        * GNUmakefile.am:
        * VM/CTI.cpp:
        * VM/CTI.h:
        * VM/Machine.cpp:
        * VM/Machine.h:
        * kjs/regexp.cpp:
        (JSC::RegExp::RegExp):
        (JSC::RegExp::~RegExp):
        (JSC::RegExp::match):
        * kjs/regexp.h:
        * masm/X86Assembler.h:
        (JSC::X86Assembler::emitConvertToFastCall):
        (JSC::X86Assembler::emitRestoreArgumentReferenceForTrampoline):
        (JSC::X86Assembler::emitRestoreArgumentReference):

2008-10-09  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Cameron Zwarich.

        Fix for bug #21160, x=0;1/(x*-1) == -Infinity

        * ChangeLog:
        * VM/CTI.cpp:
        (JSC::CTI::emitFastArithDeTagImmediate):
        (JSC::CTI::emitFastArithDeTagImmediateJumpIfZero):
        (JSC::CTI::compileBinaryArithOp):
        (JSC::CTI::compileBinaryArithOpSlowCase):
        (JSC::CTI::privateCompileMainPass):
        (JSC::CTI::privateCompileSlowCases):
        * VM/CTI.h:
        * masm/X86Assembler.h:
        (JSC::X86Assembler::):
        (JSC::X86Assembler::emitUnlinkedJs):

2008-10-09  Cameron Zwarich  <zwarich@apple.com>

        Reviewed by Oliver Hunt.

        Bug 21459: REGRESSION (r37324): Safari crashes inside JavaScriptCore while browsing hulu.com
        <https://bugs.webkit.org/show_bug.cgi?id=21459>

        After r37324, an Arguments object does not mark an associated activation
        object. This change was made because Arguments no longer directly used
        the activation object in any way. However, if an activation is torn off,
        then the backing store of Arguments becomes the register array of the
        activation object. Arguments directly marks all of the arguments, but
        the activation object is being collected, which causes its register
        array to be freed and new memory to be allocated in its place.

        Unfortunately, it does not seem possible to reproduce this issue in a
        layout test.

        * kjs/Arguments.cpp:
        (JSC::Arguments::mark):
        * kjs/Arguments.h:
        (JSC::Arguments::setActivation):
        (JSC::Arguments::Arguments):
        (JSC::JSActivation::copyRegisters):

2008-10-09  Ariya Hidayat  <ariya.hidayat@trolltech.com>

        Reviewed by Simon.

        Build fix for MinGW.

        * wtf/AlwaysInline.h:

2008-10-08  Cameron Zwarich  <zwarich@apple.com>

        Reviewed by Maciej Stachowiak.

        Bug 21497: REGRESSION (r37433): Bytecode JSC tests are severely broken
        <https://bugs.webkit.org/show_bug.cgi?id=21497>

        Fix a typo in r37433 that causes the failure of a large number of JSC
        tests with the bytecode interpreter enabled.

        * VM/Machine.cpp:
        (JSC::Machine::privateExecute):

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

        Windows build fix.

        * VM/CTI.cpp:
        (JSC::): Update type of argument to ctiTrampoline.

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

        Reviewed by Cameron Zwarich.

        - https://bugs.webkit.org/show_bug.cgi?id=21403
          Bug 21403: use new CallFrame class rather than Register* for call frame manipulation

        Add CallFrame as a synonym for ExecState. Arguably, some day we should switch every
        client over to the new name.

        Use CallFrame* consistently rather than Register* or ExecState* in low-level code such
        as Machine.cpp and CTI.cpp. Similarly, use callFrame rather than r as its name and use
        accessor functions to get at things in the frame.

        Eliminate other uses of ExecState* that aren't needed, replacing in some cases with
        JSGlobalData* and in other cases eliminating them entirely.

        * API/JSObjectRef.cpp:
        (JSObjectMakeFunctionWithCallback):
        (JSObjectMakeFunction):
        (JSObjectHasProperty):
        (JSObjectGetProperty):
        (JSObjectSetProperty):
        (JSObjectDeleteProperty):
        * API/OpaqueJSString.cpp:
        * API/OpaqueJSString.h:
        * VM/CTI.cpp:
        (JSC::CTI::getConstant):
        (JSC::CTI::emitGetArg):
        (JSC::CTI::emitGetPutArg):
        (JSC::CTI::getConstantImmediateNumericArg):
        (JSC::CTI::printOpcodeOperandTypes):
        (JSC::CTI::CTI):
        (JSC::CTI::compileOpCall):
        (JSC::CTI::compileBinaryArithOp):
        (JSC::CTI::privateCompileMainPass):
        (JSC::CTI::privateCompile):
        (JSC::CTI::privateCompileGetByIdProto):
        (JSC::CTI::privateCompileGetByIdChain):
        (JSC::CTI::compileRegExp):
        * VM/CTI.h:
        * VM/CodeBlock.h:
        * VM/CodeGenerator.cpp:
        (JSC::CodeGenerator::emitEqualityOp):
        (JSC::CodeGenerator::emitLoad):
        (JSC::CodeGenerator::emitUnexpectedLoad):
        (JSC::CodeGenerator::emitConstruct):
        * VM/CodeGenerator.h:
        * VM/Machine.cpp:
        (JSC::jsLess):
        (JSC::jsLessEq):
        (JSC::jsAddSlowCase):
        (JSC::jsAdd):
        (JSC::jsTypeStringForValue):
        (JSC::Machine::resolve):
        (JSC::Machine::resolveSkip):
        (JSC::Machine::resolveGlobal):
        (JSC::inlineResolveBase):
        (JSC::Machine::resolveBase):
        (JSC::Machine::resolveBaseAndProperty):
        (JSC::Machine::resolveBaseAndFunc):
        (JSC::Machine::slideRegisterWindowForCall):
        (JSC::isNotObject):
        (JSC::Machine::callEval):
        (JSC::Machine::dumpCallFrame):
        (JSC::Machine::dumpRegisters):
        (JSC::Machine::unwindCallFrame):
        (JSC::Machine::throwException):
        (JSC::DynamicGlobalObjectScope::DynamicGlobalObjectScope):
        (JSC::DynamicGlobalObjectScope::~DynamicGlobalObjectScope):
        (JSC::Machine::execute):
        (JSC::Machine::debug):
        (JSC::Machine::createExceptionScope):
        (JSC::cachePrototypeChain):
        (JSC::Machine::tryCachePutByID):
        (JSC::Machine::tryCacheGetByID):
        (JSC::Machine::privateExecute):
        (JSC::Machine::retrieveArguments):
        (JSC::Machine::retrieveCaller):
        (JSC::Machine::retrieveLastCaller):
        (JSC::Machine::findFunctionCallFrame):
        (JSC::Machine::getArgumentsData):
        (JSC::Machine::tryCTICachePutByID):
        (JSC::Machine::getCTIArrayLengthTrampoline):
        (JSC::Machine::getCTIStringLengthTrampoline):
        (JSC::Machine::tryCTICacheGetByID):
        (JSC::Machine::cti_op_convert_this):
        (JSC::Machine::cti_op_end):
        (JSC::Machine::cti_op_add):
        (JSC::Machine::cti_op_pre_inc):
        (JSC::Machine::cti_timeout_check):
        (JSC::Machine::cti_op_loop_if_less):
        (JSC::Machine::cti_op_loop_if_lesseq):
        (JSC::Machine::cti_op_new_object):
        (JSC::Machine::cti_op_put_by_id):
        (JSC::Machine::cti_op_put_by_id_second):
        (JSC::Machine::cti_op_put_by_id_generic):
        (JSC::Machine::cti_op_put_by_id_fail):
        (JSC::Machine::cti_op_get_by_id):
        (JSC::Machine::cti_op_get_by_id_second):
        (JSC::Machine::cti_op_get_by_id_generic):
        (JSC::Machine::cti_op_get_by_id_fail):
        (JSC::Machine::cti_op_instanceof):
        (JSC::Machine::cti_op_del_by_id):
        (JSC::Machine::cti_op_mul):
        (JSC::Machine::cti_op_new_func):
        (JSC::Machine::cti_op_call_JSFunction):
        (JSC::Machine::cti_vm_compile):
        (JSC::Machine::cti_op_push_activation):
        (JSC::Machine::cti_op_call_NotJSFunction):
        (JSC::Machine::cti_op_create_arguments):
        (JSC::Machine::cti_op_tear_off_activation):
        (JSC::Machine::cti_op_tear_off_arguments):
        (JSC::Machine::cti_op_ret_profiler):
        (JSC::Machine::cti_op_ret_scopeChain):
        (JSC::Machine::cti_op_new_array):
        (JSC::Machine::cti_op_resolve):
        (JSC::Machine::cti_op_construct_JSConstruct):
        (JSC::Machine::cti_op_construct_NotJSConstruct):
        (JSC::Machine::cti_op_get_by_val):
        (JSC::Machine::cti_op_resolve_func):
        (JSC::Machine::cti_op_sub):
        (JSC::Machine::cti_op_put_by_val):
        (JSC::Machine::cti_op_put_by_val_array):
        (JSC::Machine::cti_op_lesseq):
        (JSC::Machine::cti_op_loop_if_true):
        (JSC::Machine::cti_op_negate):
        (JSC::Machine::cti_op_resolve_base):
        (JSC::Machine::cti_op_resolve_skip):
        (JSC::Machine::cti_op_resolve_global):
        (JSC::Machine::cti_op_div):
        (JSC::Machine::cti_op_pre_dec):
        (JSC::Machine::cti_op_jless):
        (JSC::Machine::cti_op_not):
        (JSC::Machine::cti_op_jtrue):
        (JSC::Machine::cti_op_post_inc):
        (JSC::Machine::cti_op_eq):
        (JSC::Machine::cti_op_lshift):
        (JSC::Machine::cti_op_bitand):
        (JSC::Machine::cti_op_rshift):
        (JSC::Machine::cti_op_bitnot):
        (JSC::Machine::cti_op_resolve_with_base):
        (JSC::Machine::cti_op_new_func_exp):
        (JSC::Machine::cti_op_mod):
        (JSC::Machine::cti_op_less):
        (JSC::Machine::cti_op_neq):
        (JSC::Machine::cti_op_post_dec):
        (JSC::Machine::cti_op_urshift):
        (JSC::Machine::cti_op_bitxor):
        (JSC::Machine::cti_op_new_regexp):
        (JSC::Machine::cti_op_bitor):
        (JSC::Machine::cti_op_call_eval):
        (JSC::Machine::cti_op_throw):
        (JSC::Machine::cti_op_get_pnames):
        (JSC::Machine::cti_op_next_pname):
        (JSC::Machine::cti_op_push_scope):
        (JSC::Machine::cti_op_pop_scope):
        (JSC::Machine::cti_op_typeof):
        (JSC::Machine::cti_op_to_jsnumber):
        (JSC::Machine::cti_op_in):
        (JSC::Machine::cti_op_push_new_scope):
        (JSC::Machine::cti_op_jmp_scopes):
        (JSC::Machine::cti_op_put_by_index):
        (JSC::Machine::cti_op_switch_imm):
        (JSC::Machine::cti_op_switch_char):
        (JSC::Machine::cti_op_switch_string):
        (JSC::Machine::cti_op_del_by_val):
        (JSC::Machine::cti_op_put_getter):
        (JSC::Machine::cti_op_put_setter):
        (JSC::Machine::cti_op_new_error):
        (JSC::Machine::cti_op_debug):
        (JSC::Machine::cti_vm_throw):
        * VM/Machine.h:
        * VM/Register.h:
        * VM/RegisterFile.h:
        * kjs/Arguments.h:
        * kjs/DebuggerCallFrame.cpp:
        (JSC::DebuggerCallFrame::functionName):
        (JSC::DebuggerCallFrame::type):
        (JSC::DebuggerCallFrame::thisObject):
        (JSC::DebuggerCallFrame::evaluate):
        * kjs/DebuggerCallFrame.h:
        * kjs/ExecState.cpp:
        (JSC::CallFrame::thisValue):
        * kjs/ExecState.h:
        * kjs/FunctionConstructor.cpp:
        (JSC::constructFunction):
        * kjs/JSActivation.cpp:
        (JSC::JSActivation::JSActivation):
        (JSC::JSActivation::argumentsGetter):
        * kjs/JSActivation.h:
        * kjs/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::init):
        * kjs/JSGlobalObjectFunctions.cpp:
        (JSC::globalFuncEval):
        * kjs/JSVariableObject.h:
        * kjs/Parser.cpp:
        (JSC::Parser::parse):
        * kjs/RegExpConstructor.cpp:
        (JSC::constructRegExp):
        * kjs/RegExpPrototype.cpp:
        (JSC::regExpProtoFuncCompile):
        * kjs/Shell.cpp:
        (prettyPrintScript):
        * kjs/StringPrototype.cpp:
        (JSC::stringProtoFuncMatch):
        (JSC::stringProtoFuncSearch):
        * kjs/identifier.cpp:
        (JSC::Identifier::checkSameIdentifierTable):
        * kjs/interpreter.cpp:
        (JSC::Interpreter::checkSyntax):
        (JSC::Interpreter::evaluate):
        * kjs/nodes.cpp:
        (JSC::ThrowableExpressionData::emitThrowError):
        (JSC::RegExpNode::emitCode):
        (JSC::ArrayNode::emitCode):
        (JSC::InstanceOfNode::emitCode):
        * kjs/nodes.h:
        * kjs/regexp.cpp:
        (JSC::RegExp::RegExp):
        (JSC::RegExp::create):
        * kjs/regexp.h:
        * profiler/HeavyProfile.h:
        * profiler/Profile.h:
        * wrec/WREC.cpp:
        * wrec/WREC.h:

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

        Typed by Maciej Stachowiak, reviewed by Mark Rowe.

        Fix crash in fast/js/constant-folding.html with CTI disabled.

        * VM/Machine.cpp:
        (JSC::Machine::privateExecute):

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

        Roll out r37427 because it causes an infinite recursion loading about:blank.

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

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

        Reviewed by Cameron Zwarich.

        - https://bugs.webkit.org/show_bug.cgi?id=21403
          Bug 21403: use new CallFrame class rather than Register* for call frame manipulation

        Add CallFrame as a synonym for ExecState. Arguably, some day we should switch every
        client over to the new name.

        Use CallFrame* consistently rather than Register* or ExecState* in low-level code such
        as Machine.cpp and CTI.cpp. Similarly, use callFrame rather than r as its name and use
        accessor functions to get at things in the frame.

        Eliminate other uses of ExecState* that aren't needed, replacing in some cases with
        JSGlobalData* and in other cases eliminating them entirely.

        * API/JSObjectRef.cpp:
        (JSObjectMakeFunctionWithCallback):
        (JSObjectMakeFunction):
        (JSObjectHasProperty):
        (JSObjectGetProperty):
        (JSObjectSetProperty):
        (JSObjectDeleteProperty):
        * API/OpaqueJSString.cpp:
        * API/OpaqueJSString.h:
        * VM/CTI.cpp:
        (JSC::CTI::getConstant):
        (JSC::CTI::emitGetArg):
        (JSC::CTI::emitGetPutArg):
        (JSC::CTI::getConstantImmediateNumericArg):
        (JSC::CTI::printOpcodeOperandTypes):
        (JSC::CTI::CTI):
        (JSC::CTI::compileOpCall):
        (JSC::CTI::compileBinaryArithOp):
        (JSC::CTI::privateCompileMainPass):
        (JSC::CTI::privateCompile):
        (JSC::CTI::privateCompileGetByIdProto):
        (JSC::CTI::privateCompileGetByIdChain):
        (JSC::CTI::compileRegExp):
        * VM/CTI.h:
        * VM/CodeBlock.h:
        * VM/CodeGenerator.cpp:
        (JSC::CodeGenerator::emitEqualityOp):
        (JSC::CodeGenerator::emitLoad):
        (JSC::CodeGenerator::emitUnexpectedLoad):
        (JSC::CodeGenerator::emitConstruct):
        * VM/CodeGenerator.h:
        * VM/Machine.cpp:
        (JSC::jsLess):
        (JSC::jsLessEq):
        (JSC::jsAddSlowCase):
        (JSC::jsAdd):
        (JSC::jsTypeStringForValue):
        (JSC::Machine::resolve):
        (JSC::Machine::resolveSkip):
        (JSC::Machine::resolveGlobal):
        (JSC::inlineResolveBase):
        (JSC::Machine::resolveBase):
        (JSC::Machine::resolveBaseAndProperty):
        (JSC::Machine::resolveBaseAndFunc):
        (JSC::Machine::slideRegisterWindowForCall):
        (JSC::isNotObject):
        (JSC::Machine::callEval):
        (JSC::Machine::dumpCallFrame):
        (JSC::Machine::dumpRegisters):
        (JSC::Machine::unwindCallFrame):
        (JSC::Machine::throwException):
        (JSC::DynamicGlobalObjectScope::DynamicGlobalObjectScope):
        (JSC::DynamicGlobalObjectScope::~DynamicGlobalObjectScope):
        (JSC::Machine::execute):
        (JSC::Machine::debug):
        (JSC::Machine::createExceptionScope):
        (JSC::cachePrototypeChain):
        (JSC::Machine::tryCachePutByID):
        (JSC::Machine::tryCacheGetByID):
        (JSC::Machine::privateExecute):
        (JSC::Machine::retrieveArguments):
        (JSC::Machine::retrieveCaller):
        (JSC::Machine::retrieveLastCaller):
        (JSC::Machine::findFunctionCallFrame):
        (JSC::Machine::getArgumentsData):
        (JSC::Machine::tryCTICachePutByID):
        (JSC::Machine::getCTIArrayLengthTrampoline):
        (JSC::Machine::getCTIStringLengthTrampoline):
        (JSC::Machine::tryCTICacheGetByID):
        (JSC::Machine::cti_op_convert_this):
        (JSC::Machine::cti_op_end):
        (JSC::Machine::cti_op_add):
        (JSC::Machine::cti_op_pre_inc):
        (JSC::Machine::cti_timeout_check):
        (JSC::Machine::cti_op_loop_if_less):
        (JSC::Machine::cti_op_loop_if_lesseq):
        (JSC::Machine::cti_op_new_object):
        (JSC::Machine::cti_op_put_by_id):
        (JSC::Machine::cti_op_put_by_id_second):
        (JSC::Machine::cti_op_put_by_id_generic):
        (JSC::Machine::cti_op_put_by_id_fail):
        (JSC::Machine::cti_op_get_by_id):
        (JSC::Machine::cti_op_get_by_id_second):
        (JSC::Machine::cti_op_get_by_id_generic):
        (JSC::Machine::cti_op_get_by_id_fail):
        (JSC::Machine::cti_op_instanceof):
        (JSC::Machine::cti_op_del_by_id):
        (JSC::Machine::cti_op_mul):
        (JSC::Machine::cti_op_new_func):
        (JSC::Machine::cti_op_call_JSFunction):
        (JSC::Machine::cti_vm_compile):
        (JSC::Machine::cti_op_push_activation):
        (JSC::Machine::cti_op_call_NotJSFunction):
        (JSC::Machine::cti_op_create_arguments):
        (JSC::Machine::cti_op_tear_off_activation):
        (JSC::Machine::cti_op_tear_off_arguments):
        (JSC::Machine::cti_op_ret_profiler):
        (JSC::Machine::cti_op_ret_scopeChain):
        (JSC::Machine::cti_op_new_array):
        (JSC::Machine::cti_op_resolve):
        (JSC::Machine::cti_op_construct_JSConstruct):
        (JSC::Machine::cti_op_construct_NotJSConstruct):
        (JSC::Machine::cti_op_get_by_val):
        (JSC::Machine::cti_op_resolve_func):
        (JSC::Machine::cti_op_sub):
        (JSC::Machine::cti_op_put_by_val):
        (JSC::Machine::cti_op_put_by_val_array):
        (JSC::Machine::cti_op_lesseq):
        (JSC::Machine::cti_op_loop_if_true):
        (JSC::Machine::cti_op_negate):
        (JSC::Machine::cti_op_resolve_base):
        (JSC::Machine::cti_op_resolve_skip):
        (JSC::Machine::cti_op_resolve_global):
        (JSC::Machine::cti_op_div):
        (JSC::Machine::cti_op_pre_dec):
        (JSC::Machine::cti_op_jless):
        (JSC::Machine::cti_op_not):
        (JSC::Machine::cti_op_jtrue):
        (JSC::Machine::cti_op_post_inc):
        (JSC::Machine::cti_op_eq):
        (JSC::Machine::cti_op_lshift):
        (JSC::Machine::cti_op_bitand):
        (JSC::Machine::cti_op_rshift):
        (JSC::Machine::cti_op_bitnot):
        (JSC::Machine::cti_op_resolve_with_base):
        (JSC::Machine::cti_op_new_func_exp):
        (JSC::Machine::cti_op_mod):
        (JSC::Machine::cti_op_less):
        (JSC::Machine::cti_op_neq):
        (JSC::Machine::cti_op_post_dec):
        (JSC::Machine::cti_op_urshift):
        (JSC::Machine::cti_op_bitxor):
        (JSC::Machine::cti_op_new_regexp):
        (JSC::Machine::cti_op_bitor):
        (JSC::Machine::cti_op_call_eval):
        (JSC::Machine::cti_op_throw):
        (JSC::Machine::cti_op_get_pnames):
        (JSC::Machine::cti_op_next_pname):
        (JSC::Machine::cti_op_push_scope):
        (JSC::Machine::cti_op_pop_scope):
        (JSC::Machine::cti_op_typeof):
        (JSC::Machine::cti_op_to_jsnumber):
        (JSC::Machine::cti_op_in):
        (JSC::Machine::cti_op_push_new_scope):
        (JSC::Machine::cti_op_jmp_scopes):
        (JSC::Machine::cti_op_put_by_index):
        (JSC::Machine::cti_op_switch_imm):
        (JSC::Machine::cti_op_switch_char):
        (JSC::Machine::cti_op_switch_string):
        (JSC::Machine::cti_op_del_by_val):
        (JSC::Machine::cti_op_put_getter):
        (JSC::Machine::cti_op_put_setter):
        (JSC::Machine::cti_op_new_error):
        (JSC::Machine::cti_op_debug):
        (JSC::Machine::cti_vm_throw):
        * VM/Machine.h:
        * VM/Register.h:
        * VM/RegisterFile.h:
        * kjs/Arguments.h:
        * kjs/DebuggerCallFrame.cpp:
        (JSC::DebuggerCallFrame::functionName):
        (JSC::DebuggerCallFrame::type):
        (JSC::DebuggerCallFrame::thisObject):
        (JSC::DebuggerCallFrame::evaluate):
        * kjs/DebuggerCallFrame.h:
        * kjs/ExecState.cpp:
        (JSC::CallFrame::thisValue):
        * kjs/ExecState.h:
        * kjs/FunctionConstructor.cpp:
        (JSC::constructFunction):
        * kjs/JSActivation.cpp:
        (JSC::JSActivation::JSActivation):
        (JSC::JSActivation::argumentsGetter):
        * kjs/JSActivation.h:
        * kjs/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::init):
        * kjs/JSGlobalObjectFunctions.cpp:
        (JSC::globalFuncEval):
        * kjs/JSVariableObject.h:
        * kjs/Parser.cpp:
        (JSC::Parser::parse):
        * kjs/RegExpConstructor.cpp:
        (JSC::constructRegExp):
        * kjs/RegExpPrototype.cpp:
        (JSC::regExpProtoFuncCompile):
        * kjs/Shell.cpp:
        (prettyPrintScript):
        * kjs/StringPrototype.cpp:
        (JSC::stringProtoFuncMatch):
        (JSC::stringProtoFuncSearch):
        * kjs/identifier.cpp:
        (JSC::Identifier::checkSameIdentifierTable):
        * kjs/interpreter.cpp:
        (JSC::Interpreter::checkSyntax):
        (JSC::Interpreter::evaluate):
        * kjs/nodes.cpp:
        (JSC::ThrowableExpressionData::emitThrowError):
        (JSC::RegExpNode::emitCode):
        (JSC::ArrayNode::emitCode):
        (JSC::InstanceOfNode::emitCode):
        * kjs/nodes.h:
        * kjs/regexp.cpp:
        (JSC::RegExp::RegExp):
        (JSC::RegExp::create):
        * kjs/regexp.h:
        * profiler/HeavyProfile.h:
        * profiler/Profile.h:
        * wrec/WREC.cpp:
        * wrec/WREC.h:

2008-10-08  Prasanth Ullattil  <pullatti@trolltech.com>

        Reviewed by Oliver Hunt.

        Avoid endless loops when compiling without the computed goto
        optimization.

        NEXT_OPCODE expands to "continue", which will not work inside
        loops.

        * VM/Machine.cpp:
        (JSC::Machine::privateExecute):

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

        Reviewed by Oliver Hunt.

        Re-landing the following fix with the crashing bug in it fixed (r37405):
        
        - optimize away multiplication by constant 1.0
        
        2.3% speedup on v8 RayTrace benchmark

        Apparently it's not uncommon for JavaScript code to multiply by
        constant 1.0 in the mistaken belief that this converts integer to
        floating point and that there is any operational difference.

        * VM/CTI.cpp:
        (JSC::CTI::privateCompileMainPass): Optimize to_jsnumber for
        case where parameter is already number.
        (JSC::CTI::privateCompileSlowCases): ditto
        * VM/Machine.cpp:
        (JSC::Machine::privateExecute): ditto
        * kjs/grammar.y:
        (makeMultNode): Transform as follows:
        +FOO * BAR ==> FOO * BAR
        FOO * +BAR ==> FOO * BAR
        FOO * 1 ==> +FOO
        1 * FOO ==> +FOO
        (makeDivNode): Transform as follows:
        +FOO / BAR ==> FOO / BAR
        FOO / +BAR ==> FOO / BAR
        (makeSubNode): Transform as follows:
        +FOO - BAR ==> FOO - BAR
        FOO - +BAR ==> FOO - BAR
        * kjs/nodes.h:
        (JSC::ExpressionNode::stripUnaryPlus): Helper for above
        grammar.y changes
        (JSC::UnaryPlusNode::stripUnaryPlus): ditto

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

        Reviewed by Oliver Hunt.
        
        - correctly handle appending -0 to a string, it should stringify as just 0

        * kjs/ustring.cpp:
        (JSC::concatenate):

2008-10-08  Prasanth Ullattil  <pullatti@trolltech.com>

        Reviewed by Simon.

        Fix WebKit compilation with VC2008SP1

        Apply the TR1 workaround for JavaScriptCore, too.

        * JavaScriptCore.pro:

2008-10-08  Prasanth Ullattil  <pullatti@trolltech.com>

        Reviewed by Simon.

        Fix compilation errors on VS2008 64Bit

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

2008-10-08  André Pönitz  <apoenitz@trolltech.com>

        Reviewed by Simon.

        Fix compilation with Qt namespaces.

        * wtf/Threading.h:

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

        Roll out r37405.

2008-10-07  Oliver Hunt  <oliver@apple.com>

        Reviewed by Cameron Zwarich.

        Switch CTI runtime calls to the fastcall calling convention

        Basically this means that we get to store the argument for CTI
        calls in the ECX register, which saves a register->memory write
        and subsequent memory->register read.
        
        This is a 1.7% progression in SunSpider and 2.4% on commandline
        v8 tests on Windows

        * VM/CTI.cpp:
        (JSC::):
        (JSC::CTI::privateCompilePutByIdTransition):
        (JSC::CTI::privateCompilePatchGetArrayLength):
        * VM/CTI.h:
        * VM/Machine.h:
        * masm/X86Assembler.h:
        (JSC::X86Assembler::emitRestoreArgumentReference):
        (JSC::X86Assembler::emitRestoreArgumentReferenceForTrampoline):
          We need this to correctly reload ecx from inside certain property access
          trampolines.
        * wtf/Platform.h:

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

        Reviewed by Mark Rowe.
        
        - optimize away multiplication by constant 1.0
        
        2.3% speedup on v8 RayTrace benchmark

        Apparently it's not uncommon for JavaScript code to multiply by
        constant 1.0 in the mistaken belief that this converts integer to
        floating point and that there is any operational difference.
        
        * VM/CTI.cpp:
        (JSC::CTI::privateCompileMainPass): Optimize to_jsnumber for
        case where parameter is already number.
        (JSC::CTI::privateCompileSlowCases): ditto
        * VM/Machine.cpp:
        (JSC::Machine::privateExecute): ditto
        * kjs/grammar.y:
        (makeMultNode): Transform as follows:
        +FOO * BAR ==> FOO * BAR
        FOO * +BAR ==> FOO * BAR
        FOO * 1 ==> +FOO
        1 * FOO ==> +FOO
        (makeDivNode): Transform as follows:
        +FOO / BAR ==> FOO / BAR
        FOO / +BAR ==> FOO / BAR
        (makeSubNode): Transform as follows:
        +FOO - BAR ==> FOO - BAR
        FOO - +BAR ==> FOO - BAR
        * kjs/nodes.h:
        (JSC::ExpressionNode::stripUnaryPlus): Helper for above
        grammar.y changes
        (JSC::UnaryPlusNode::stripUnaryPlus): ditto

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

        Reviewed by Oliver Hunt.
        
        - make constant folding code more consistent
        
        Added a makeSubNode to match add, mult and div; use the makeFooNode functions always,
        instead of allocating nodes directly in other places in the grammar.

        * kjs/grammar.y:

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

        Reviewed by Cameron Zwarich.

        Move hasGetterSetterProperties flag from PropertyMap to StructureID.

        * kjs/JSObject.cpp:
        (JSC::JSObject::put):
        (JSC::JSObject::defineGetter):
        (JSC::JSObject::defineSetter):
        * kjs/JSObject.h:
        (JSC::JSObject::hasGetterSetterProperties):
        (JSC::JSObject::getOwnPropertySlotForWrite):
        (JSC::JSObject::getOwnPropertySlot):
        * kjs/PropertyMap.h:
        * kjs/StructureID.cpp:
        (JSC::StructureID::StructureID):
        (JSC::StructureID::addPropertyTransition):
        (JSC::StructureID::toDictionaryTransition):
        (JSC::StructureID::changePrototypeTransition):
        (JSC::StructureID::getterSetterTransition):
        * kjs/StructureID.h:
        (JSC::StructureID::hasGetterSetterProperties):
        (JSC::StructureID::setHasGetterSetterProperties):

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

        Reviewed by Cameron Zwarich.

        Roll r37370 back in with bug fixes.

        - PropertyMap::storageSize() should reflect the number of keys + deletedOffsets
          and has nothing to do with the internal deletedSentinel count anymore.

2008-10-07  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Oliver Hunt.

        Move callframe initialization into JIT code, again.
        
        As a part of the restructuring the second result from functions is now
        returned in edx, allowing the new value of 'r' to be returned via a
        register, and stored to the stack from JIT code, too.

        4.5% progression on v8-tests. (3% in their harness)

        * VM/CTI.cpp:
        (JSC::):
        (JSC::CTI::emitCall):
        (JSC::CTI::compileOpCall):
        (JSC::CTI::privateCompileMainPass):
        (JSC::CTI::privateCompileSlowCases):
        (JSC::CTI::privateCompile):
        * VM/CTI.h:
        (JSC::CallRecord::CallRecord):
        * VM/Machine.cpp:
        (JSC::Machine::cti_op_call_JSFunction):
        (JSC::Machine::cti_op_construct_JSConstruct):
        (JSC::Machine::cti_op_resolve_func):
        (JSC::Machine::cti_op_post_inc):
        (JSC::Machine::cti_op_resolve_with_base):
        (JSC::Machine::cti_op_post_dec):
        * VM/Machine.h:
        * kjs/JSFunction.h:
        * kjs/ScopeChain.h:

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

        Fix typo in method name.

        * wrec/WREC.cpp:
        * wrec/WREC.h:

2008-10-07  Cameron Zwarich  <zwarich@apple.com>

        Rubber-stamped by Mark Rowe.

        Roll out r37370.

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

        Reviewed by Cameron Zwarich.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=21415
        Improve the division between PropertyStorageArray and PropertyMap

        - Rework ProperyMap to store offsets in the value so that they don't
          change when rehashing.  This allows us not to have to keep the 
          PropertyStorageArray in sync and thus not have to pass it in.
        - Rename PropertyMap::getOffset -> PropertyMap::get since put/remove
          now also return offsets.
        - A Vector of deleted offsets is now needed since the storage is out of
          band.

        1% win on SunSpider.  Wash on V8 suite.

        * JavaScriptCore.exp:
        * VM/CTI.cpp:
        (JSC::transitionWillNeedStorageRealloc):
        * VM/Machine.cpp:
        (JSC::Machine::privateExecute):
        Transition logic can be greatly simplified by the fact that
        the storage capacity is always known, and is correct for the
        inline case.
        * kjs/JSObject.cpp:
        (JSC::JSObject::put): Rename getOffset -> get.
        (JSC::JSObject::deleteProperty): Ditto.
        (JSC::JSObject::getPropertyAttributes): Ditto.
        (JSC::JSObject::removeDirect): Use returned offset to
        clear the value in the PropertyNameArray.
        (JSC::JSObject::allocatePropertyStorage): Add assert.
        * kjs/JSObject.h:
        (JSC::JSObject::getDirect): Rename getOffset -> get
        (JSC::JSObject::getDirectLocation): Rename getOffset -> get
        (JSC::JSObject::putDirect): Use propertyStorageCapacity to determine whether
        or not to resize.  Also, since put now returns an offset (and thus 
        addPropertyTransition does also) setting of the PropertyStorageArray is
        now done here.
        (JSC::JSObject::transitionTo):
        * kjs/PropertyMap.cpp:
        (JSC::PropertyMap::checkConsistency): PropertyStorageArray is no longer 
        passed in.
        (JSC::PropertyMap::operator=): Copy the delete offsets vector.
        (JSC::PropertyMap::put): Instead of setting the PropertyNameArray
        explicitly, return the offset where the value should go.
        (JSC::PropertyMap::remove): Instead of removing from the PropertyNameArray
        explicitly, return the offset where the value should be removed.
        (JSC::PropertyMap::get): Switch to using the stored offset, instead
        of the implicit one.
        (JSC::PropertyMap::insert):
        (JSC::PropertyMap::expand): This is never called when m_table is null,
        so remove that branch and add it as an assertion.
        (JSC::PropertyMap::createTable): Consistency checks no longer take
        a PropertyNameArray.
        (JSC::PropertyMap::rehash): No need to rehash the PropertyNameArray
        now that it is completely out of band.
        * kjs/PropertyMap.h:
        (JSC::PropertyMapEntry::PropertyMapEntry): Store offset into PropertyNameArray.
        (JSC::PropertyMap::get): Switch to using the stored offset, instead
        of the implicit one.
        * kjs/StructureID.cpp:
        (JSC::StructureID::StructureID): Initialize the propertyStorageCapacity to 
        JSObject::inlineStorageCapacity.
        (JSC::StructureID::growPropertyStorageCapacity): Grow the storage capacity as
        described below.
        (JSC::StructureID::addPropertyTransition): Copy the storage capacity.
        (JSC::StructureID::toDictionaryTransition): Ditto.
        (JSC::StructureID::changePrototypeTransition): Ditto.
        (JSC::StructureID::getterSetterTransition): Ditto.
        * kjs/StructureID.h:
        (JSC::StructureID::propertyStorageCapacity): Add propertyStorageCapacity
        which is the current capacity for the JSObjects PropertyStorageArray.
        It starts at the JSObject::inlineStorageCapacity (currently 2), then
        when it first needs to be resized moves to the JSObject::nonInlineBaseStorageCapacity
        (currently 16), and after that doubles each time.

2008-10-06  Cameron Zwarich  <zwarich@apple.com>

        Reviewed by Oliver Hunt.

        Bug 21396: Remove the OptionalCalleeActivation call frame slot
        <https://bugs.webkit.org/show_bug.cgi?id=21396>

        Remove the OptionalCalleeActivation call frame slot. We have to be
        careful to store the activation object in a register, because objects
        in the scope chain do not get marked.

        This is a 0.3% speedup on both SunSpider and the V8 benchmark.

        * VM/CTI.cpp:
        (JSC::CTI::privateCompileMainPass):
        * VM/CodeBlock.cpp:
        (JSC::CodeBlock::dump):
        * VM/CodeGenerator.cpp:
        (JSC::CodeGenerator::CodeGenerator):
        (JSC::CodeGenerator::emitReturn):
        * VM/CodeGenerator.h:
        * VM/Machine.cpp:
        (JSC::Machine::dumpRegisters):
        (JSC::Machine::unwindCallFrame):
        (JSC::Machine::privateExecute):
        (JSC::Machine::cti_op_call_JSFunction):
        (JSC::Machine::cti_op_push_activation):
        (JSC::Machine::cti_op_tear_off_activation):
        (JSC::Machine::cti_op_construct_JSConstruct):
        * VM/Machine.h:
        (JSC::Machine::initializeCallFrame):
        * VM/RegisterFile.h:
        (JSC::RegisterFile::):

2008-10-06  Tony Chang  <tony@chromium.org>

        Reviewed by Alexey Proskuryakov.

        Chromium doesn't use pthreads on windows, so make its use conditional.
        
        Also convert a WORD to a DWORD to avoid a compiler warning.  This
        matches the other methods around it.

        * wtf/ThreadingWin.cpp:
        (WTF::wtfThreadEntryPoint):
        (WTF::ThreadCondition::broadcast):

2008-10-06  Mark Mentovai  <mark@moxienet.com>

        Reviewed by Tim Hatcher.

        Allow ENABLE_DASHBOARD_SUPPORT and ENABLE_MAC_JAVA_BRIDGE to be
        disabled on the Mac.

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

        * wtf/Platform.h:

2008-10-06  Steve Falkenburg  <sfalken@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=21416
        Pass 0 for size to VirtualAlloc, as documented by MSDN.
        Identified by Application Verifier.
        
        Reviewed by Darin Adler.

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

2008-10-06  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Tim Hatcheri and Oliver Hunt.

        https://bugs.webkit.org/show_bug.cgi?id=21412
        Bug 21412: Refactor user initiated profile count to be more stable
        - Export UString::from for use with creating the profile title.

        * JavaScriptCore.exp:

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

        * API/JSValueRef.cpp:
        (JSValueToBoolean):
        * ChangeLog:
        * JavaScriptCore.exp:
        * VM/CodeBlock.cpp:
        (JSC::CodeBlock::dump):
        * VM/Machine.cpp:
        (JSC::Machine::privateExecute):
        (JSC::Machine::cti_op_loop_if_true):
        (JSC::Machine::cti_op_not):
        (JSC::Machine::cti_op_jtrue):
        * kjs/ArrayPrototype.cpp:
        (JSC::arrayProtoFuncFilter):
        (JSC::arrayProtoFuncEvery):
        (JSC::arrayProtoFuncSome):
        * kjs/BooleanConstructor.cpp:
        (JSC::constructBoolean):
        (JSC::callBooleanConstructor):
        * kjs/GetterSetter.h:
        * kjs/JSCell.h:
        (JSC::JSValue::toBoolean):
        * kjs/JSNumberCell.cpp:
        (JSC::JSNumberCell::toBoolean):
        * kjs/JSNumberCell.h:
        * kjs/JSObject.cpp:
        (JSC::JSObject::toBoolean):
        * kjs/JSObject.h:
        * kjs/JSString.cpp:
        (JSC::JSString::toBoolean):
        * kjs/JSString.h:
        * kjs/JSValue.h:
        * kjs/RegExpConstructor.cpp:
        (JSC::setRegExpConstructorMultiline):
        * kjs/RegExpObject.cpp:
        (JSC::RegExpObject::match):
        * kjs/RegExpPrototype.cpp:
        (JSC::regExpProtoFuncToString):

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

        Reviewed by Sam Weinig.
        
        - optimize op_jtrue, op_loop_if_true and op_not in various ways
        https://bugs.webkit.org/show_bug.cgi?id=21404
        
        1) Make JSValue::toBoolean nonvirtual and completely inline by
        making use of the StructureID type field.
        
        2) Make JSValue::toBoolean not take an ExecState; doesn't need it.
        
        3) Make op_not, op_loop_if_true and op_jtrue not read the
        ExecState (toBoolean doesn't need it any more) and not check
        exceptions (toBoolean can't throw).

        * API/JSValueRef.cpp:
        (JSValueToBoolean):
        * JavaScriptCore.exp:
        * VM/CodeBlock.cpp:
        (JSC::CodeBlock::dump):
        * VM/Machine.cpp:
        (JSC::Machine::privateExecute):
        (JSC::Machine::cti_op_loop_if_true):
        (JSC::Machine::cti_op_not):
        (JSC::Machine::cti_op_jtrue):
        * kjs/ArrayPrototype.cpp:
        (JSC::arrayProtoFuncFilter):
        (JSC::arrayProtoFuncEvery):
        (JSC::arrayProtoFuncSome):
        * kjs/BooleanConstructor.cpp:
        (JSC::constructBoolean):
        (JSC::callBooleanConstructor):
        * kjs/GetterSetter.h:
        * kjs/JSCell.h:
        (JSC::JSValue::toBoolean):
        * kjs/JSNumberCell.cpp:
        * kjs/JSNumberCell.h:
        (JSC::JSNumberCell::toBoolean):
        * kjs/JSObject.cpp:
        * kjs/JSObject.h:
        (JSC::JSObject::toBoolean):
        (JSC::JSCell::toBoolean):
        * kjs/JSString.cpp:
        * kjs/JSString.h:
        (JSC::JSString::toBoolean):
        * kjs/JSValue.h:
        * kjs/RegExpConstructor.cpp:
        (JSC::setRegExpConstructorMultiline):
        * kjs/RegExpObject.cpp:
        (JSC::RegExpObject::match):
        * kjs/RegExpPrototype.cpp:
        (JSC::regExpProtoFuncToString):

2008-10-06  Ariya Hidayat  <ariya.hidayat@trolltech.com>

        Reviewed by Simon.

        Build fix for MinGW.

        * JavaScriptCore.pri:
        * kjs/DateMath.cpp:
        (JSC::highResUpTime):

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

        Reviewed by Oliver Hunt.

        Remove ScopeNode::containsClosures() now that it is unused.

        * kjs/nodes.h:
        (JSC::ScopeNode::containsClosures):

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

        Reviewed by Cameron Zwarich.
        
        - fix releas-only test failures caused by the fix to bug 21375

        * VM/Machine.cpp:
        (JSC::Machine::unwindCallFrame): Update ExecState while unwinding call frames;
        it now matters more to have a still-valid ExecState, since dynamicGlobalObject
        will make use of the ExecState's scope chain.
        * VM/Machine.h:

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

        Reviewed by Oliver Hunt.

        Bug 21364: Remove the branch in op_ret for OptionalCalleeActivation and OptionalCalleeArguments
        <https://bugs.webkit.org/show_bug.cgi?id=21364>

        Use information from the parser to detect whether an activation is
        needed or 'arguments' is used, and emit explicit instructions to tear
        them off before op_ret. This allows a branch to be removed from op_ret
        and simplifies some other code. This does cause a small change in the
        behaviour of 'f.arguments'; it is no longer live when 'arguments' is not
        mentioned in the lexical scope of the function.

        It should now be easy to remove the OptionaCalleeActivation slot in the
        call frame, but this will be done in a later patch.

        * VM/CTI.cpp:
        (JSC::CTI::privateCompileMainPass):
        * VM/CodeBlock.cpp:
        (JSC::CodeBlock::dump):
        * VM/CodeGenerator.cpp:
        (JSC::CodeGenerator::emitReturn):
        * VM/CodeGenerator.h:
        * VM/Machine.cpp:
        (JSC::Machine::unwindCallFrame):
        (JSC::Machine::privateExecute):
        (JSC::Machine::retrieveArguments):
        (JSC::Machine::cti_op_create_arguments):
        (JSC::Machine::cti_op_tear_off_activation):
        (JSC::Machine::cti_op_tear_off_arguments):
        * VM/Machine.h:
        * VM/Opcode.h:
        * kjs/Arguments.cpp:
        (JSC::Arguments::mark):
        * kjs/Arguments.h:
        (JSC::Arguments::isTornOff):
        (JSC::Arguments::Arguments):
        (JSC::Arguments::copyRegisters):
        (JSC::JSActivation::copyRegisters):
        * kjs/JSActivation.cpp:
        (JSC::JSActivation::argumentsGetter):
        * kjs/JSActivation.h:

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

        Reviewed by Oliver Hunt.
        
        - fixed "REGRESSION (r37297): fast/js/deep-recursion-test takes too long and times out"
        https://bugs.webkit.org/show_bug.cgi?id=21375
        
        The problem is that dynamicGlobalObject had become O(N) in number
        of call frames, but unwinding the stack for an exception called it
        for every call frame, resulting in O(N^2) behavior for an
        exception thrown from inside deep recursion.

        Instead of doing it that way, stash the dynamic global object in JSGlobalData.
        
        * JavaScriptCore.exp:
        * VM/Machine.cpp:
        (JSC::DynamicGlobalObjectScope::DynamicGlobalObjectScope): Helper class to temporarily
        store and later restore a dynamicGlobalObject in JSGlobalData.
        (JSC::DynamicGlobalObjectScope::~DynamicGlobalObjectScope):
        (JSC::Machine::execute): In each version, establish a DynamicGlobalObjectScope.
        For ProgramNode, always establish set new dynamicGlobalObject, for FunctionBody and Eval,
        only if none is currently set.
        * VM/Machine.h:
        * kjs/ExecState.h:
        * kjs/JSGlobalData.cpp:
        (JSC::JSGlobalData::JSGlobalData): Ininitalize new dynamicGlobalObject field to 0.
        * kjs/JSGlobalData.h:
        * kjs/JSGlobalObject.h:
        (JSC::ExecState::dynamicGlobalObject): Moved here from ExecState for benefit of inlining.
        Return lexical global object if this is a globalExec(), otherwise look in JSGlobalData
        for the one stashed there.

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

        Reviewed by Maciej Stachowiak.

        Avoid an extra lookup when transitioning to an existing StructureID
        by caching the offset of property that caused the transition.

        1% win on V8 suite.  Wash on SunSpider.

        * kjs/PropertyMap.cpp:
        (JSC::PropertyMap::put):
        * kjs/PropertyMap.h:
        * kjs/StructureID.cpp:
        (JSC::StructureID::StructureID):
        (JSC::StructureID::addPropertyTransition):
        * kjs/StructureID.h:
        (JSC::StructureID::setCachedTransistionOffset):
        (JSC::StructureID::cachedTransistionOffset):

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

        Reviewed by Maciej Stachowiak.

        Bug 21364: Remove the branch in op_ret for OptionalCalleeActivation and OptionalCalleeArguments
        <https://bugs.webkit.org/show_bug.cgi?id=21364>

        This patch does not yet remove the branch, but it does a bit of refactoring
        so that a CodeGenerator now knows whether the associated CodeBlock will need
        a full scope before doing any code generation. This makes it possible to emit
        explicit tear-off instructions before every op_ret.

        * VM/CodeBlock.h:
        (JSC::CodeBlock::CodeBlock):
        * VM/CodeGenerator.cpp:
        (JSC::CodeGenerator::generate):
        (JSC::CodeGenerator::CodeGenerator):
        (JSC::CodeGenerator::emitPushScope):
        (JSC::CodeGenerator::emitPushNewScope):
        * kjs/nodes.h:
        (JSC::ScopeNode::needsActivation):

2008-10-05  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Cameron Zwarich.

        Fix for bug #21387 - using SamplingTool with CTI.

        (1) A repatch offset offset changes due to an additional instruction to update SamplingTool state.
        (2) Fix an incusion order problem due to ExecState changes.
        (3) Change to a MACHINE_SAMPLING macro, use of exec should now be accessing global data.

        * VM/CTI.h:
        (JSC::CTI::execute):
        * VM/SamplingTool.h:
        (JSC::SamplingTool::privateExecuteReturned):
        * kjs/Shell.cpp:

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.

        * JavaScriptCore.xcodeproj/project.pbxproj:

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

        Reviewed by Oliver Hunt.

        Fix https://bugs.webkit.org/show_bug.cgi?id=21320
        leaks of PropertyNameArrayData seen on buildbot

        - Fix RefPtr cycle by making PropertyNameArrayData's pointer back
          to the StructureID a weak pointer.

        * kjs/PropertyNameArray.h:
        (JSC::PropertyNameArrayData::setCachedStructureID):
        (JSC::PropertyNameArrayData::cachedStructureID):
        * kjs/StructureID.cpp:
        (JSC::StructureID::getEnumerablePropertyNames):
        (JSC::StructureID::clearEnumerationCache):
        (JSC::StructureID::~StructureID):

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

        Reviewed by Cameron Zwarich.

        - https://bugs.webkit.org/show_bug.cgi?id=21295
          Bug 21295: Replace ExecState with a call frame Register pointer

        10% faster on Richards; other v8 benchmarks faster too.
        A wash on SunSpider.

        This does the minimum necessary to get the speedup. Next step in
        cleaning this up is to replace ExecState with a CallFrame class,
        and be more judicious about when to pass a call frame and when
        to pass a global data pointer, global object pointer, or perhaps
        something else entirely.

        * VM/CTI.cpp: Remove the debug-only check of the exception in
        ctiVMThrowTrampoline -- already checked in the code the trampoline
        jumps to, so not all that useful. Removed the exec argument from
        ctiTrampoline. Removed emitDebugExceptionCheck -- no longer needed.
        (JSC::CTI::emitCall): Removed code to set ExecState::m_callFrame.
        (JSC::CTI::privateCompileMainPass): Removed code in catch to extract
        the exception from ExecState::m_exception; instead, the code that
        jumps into catch will make sure the exception is already in eax.
        * VM/CTI.h: Removed exec from the ctiTrampoline. Also removed the
        non-helpful "volatile". Temporarily left ARG_exec in as a synonym
        for ARG_r; I'll change that on a future cleanup pass when introducing
        more use of the CallFrame type.
        (JSC::CTI::execute): Removed the ExecState* argument.

        * VM/ExceptionHelpers.cpp:
        (JSC::InterruptedExecutionError::InterruptedExecutionError): Take
        JSGlobalData* instead of ExecState*.
        (JSC::createInterruptedExecutionException): Ditto.
        * VM/ExceptionHelpers.h: Ditto. Also removed an unneeded include.

        * VM/Machine.cpp:
        (JSC::slideRegisterWindowForCall): Removed the exec and
        exceptionValue arguments. Changed to return 0 when there's a stack
        overflow rather than using a separate exception argument to cut
        down on memory accesses in the calling convention.
        (JSC::Machine::unwindCallFrame): Removed the exec argument when
        constructing a DebuggerCallFrame. Also removed code to set
        ExecState::m_callFrame.
        (JSC::Machine::throwException): Removed the exec argument when
        construction a DebuggerCallFrame.
        (JSC::Machine::execute): Updated to use the register instead of
        ExecState and also removed various uses of ExecState.
        (JSC::Machine::debug):
        (JSC::Machine::privateExecute): Put globalData into a local
        variable so it can be used throughout the interpreter. Changed
        the VM_CHECK_EXCEPTION to get the exception in globalData instead
        of through ExecState.
        (JSC::Machine::retrieveLastCaller): Turn exec into a registers
        pointer by calling registers() instead of by getting m_callFrame.
        (JSC::Machine::callFrame): Ditto.
        Tweaked exception macros. Made new versions for when you know
        you have an exception. Get at global exception with ARG_globalData.
        Got rid of the need to pass in the return value type.
        (JSC::Machine::cti_op_add): Update to use new version of exception
        macros.
        (JSC::Machine::cti_op_pre_inc): Ditto.
        (JSC::Machine::cti_timeout_check): Ditto.
        (JSC::Machine::cti_op_instanceof): Ditto.
        (JSC::Machine::cti_op_new_func): Ditto.
        (JSC::Machine::cti_op_call_JSFunction): Optimized by using the
        ARG values directly instead of through local variables -- this gets
        rid of code that just shuffles things around in the stack frame.
        Also get rid of ExecState and update for the new way exceptions are
        handled in slideRegisterWindowForCall.
        (JSC::Machine::cti_vm_compile): Update to make exec out of r since
        they are both the same thing now.
        (JSC::Machine::cti_op_call_NotJSFunction): Ditto.
        (JSC::Machine::cti_op_init_arguments): Ditto.
        (JSC::Machine::cti_op_resolve): Ditto.
        (JSC::Machine::cti_op_construct_JSConstruct): Ditto.
        (JSC::Machine::cti_op_construct_NotJSConstruct): Ditto.
        (JSC::Machine::cti_op_resolve_func): Ditto.
        (JSC::Machine::cti_op_put_by_val): Ditto.
        (JSC::Machine::cti_op_put_by_val_array): Ditto.
        (JSC::Machine::cti_op_resolve_skip): Ditto.
        (JSC::Machine::cti_op_resolve_global): Ditto.
        (JSC::Machine::cti_op_post_inc): Ditto.
        (JSC::Machine::cti_op_resolve_with_base): Ditto.
        (JSC::Machine::cti_op_post_dec): Ditto.
        (JSC::Machine::cti_op_call_eval): Ditto.
        (JSC::Machine::cti_op_throw): Ditto. Also rearranged to return
        the exception value as the return value so it can be used by
        op_catch.
        (JSC::Machine::cti_op_push_scope): Ditto.
        (JSC::Machine::cti_op_in): Ditto.
        (JSC::Machine::cti_op_del_by_val): Ditto.
        (JSC::Machine::cti_vm_throw): Ditto. Also rearranged to return
        the exception value as the return value so it can be used by
        op_catch.

        * kjs/DebuggerCallFrame.cpp:
        (JSC::DebuggerCallFrame::functionName): Pass globalData.
        (JSC::DebuggerCallFrame::evaluate): Eliminated code to make a
        new ExecState.
        * kjs/DebuggerCallFrame.h: Removed ExecState argument from
        constructor.

        * kjs/ExecState.h: Eliminated all data members and made ExecState
        inherit privately from Register instead. Also added a typedef to
        the future name for this class, which is CallFrame. It's just a
        Register* that knows it's a pointer at a call frame. The new class
        can't be constructed or copied. Changed all functions to use
        the this pointer instead of m_callFrame. Changed exception-related
        functions to access an exception in JSGlobalData. Removed functions
        used by CTI to pass the return address to the throw machinery --
        this is now done directly with a global in the global data.

        * kjs/FunctionPrototype.cpp:
        (JSC::functionProtoFuncToString): Pass globalData instead of exec.

        * kjs/InternalFunction.cpp:
        (JSC::InternalFunction::name): Take globalData instead of exec.
        * kjs/InternalFunction.h: Ditto.

        * kjs/JSGlobalData.cpp: Initialize the new exception global to 0.
        * kjs/JSGlobalData.h: Declare two new globals. One for the current
        exception and another for the return address used by CTI to
        implement the throw operation.

        * kjs/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::init): Removed code to set up globalExec,
        which is now the same thing as globalCallFrame.
        (JSC::JSGlobalObject::reset): Get globalExec from our globalExec
        function so we don't have to repeat the logic twice.
        (JSC::JSGlobalObject::mark): Removed code to mark the exception;
        the exception is now stored in JSGlobalData and marked there.
        (JSC::JSGlobalObject::globalExec): Return a pointer to the end
        of the global call frame.
        * kjs/JSGlobalObject.h: Removed the globalExec data member.

        * kjs/JSObject.cpp:
        (JSC::JSObject::putDirectFunction): Pass globalData instead of exec.

        * kjs/collector.cpp:
        (JSC::Heap::collect): Mark the global exception.

        * profiler/ProfileGenerator.cpp:
        (JSC::ProfileGenerator::addParentForConsoleStart): Pass globalData
        instead of exec to createCallIdentifier.

        * profiler/Profiler.cpp:
        (JSC::Profiler::willExecute): Pass globalData instead of exec to
        createCallIdentifier.
        (JSC::Profiler::didExecute): Ditto.
        (JSC::Profiler::createCallIdentifier): Take globalData instead of
        exec.
        (JSC::createCallIdentifierFromFunctionImp): Ditto.
        * profiler/Profiler.h: Change interface to take a JSGlobalData
        instead of an ExecState.

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

        Reviewed by Darin Adler.

        Bug 21369: Add opcode documentation for all undocumented opcodes
        <https://bugs.webkit.org/show_bug.cgi?id=21369>

        This patch adds opcode documentation for all undocumented opcodes, and
        it also renames op_init_arguments to op_create_arguments.

        * VM/CTI.cpp:
        (JSC::CTI::privateCompileMainPass):
        * VM/CodeBlock.cpp:
        (JSC::CodeBlock::dump):
        * VM/CodeGenerator.cpp:
        (JSC::CodeGenerator::CodeGenerator):
        * VM/Machine.cpp:
        (JSC::Machine::privateExecute):
        (JSC::Machine::cti_op_create_arguments):
        * VM/Machine.h:
        * VM/Opcode.h:

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

        Reviewed by Cameron Zwarich.
        
        - "this" object in methods called on primitives should be wrapper object
        https://bugs.webkit.org/show_bug.cgi?id=21362

        I changed things so that functions which use "this" do a fast
        version of toThisObject conversion if needed. Currently we miss
        the conversion entirely, at least for primitive types. Using
        TypeInfo and the primitive check, I made the fast case bail out
        pretty fast.
        
        This is inexplicably an 1.007x SunSpider speedup (and a wash on V8 benchmarks).
     
        Also renamed some opcodes for clarity:
        
        init ==> enter
        init_activation ==> enter_with_activation
        
        * VM/CTI.cpp:
        (JSC::CTI::privateCompileMainPass):
        (JSC::CTI::privateCompileSlowCases):
        * VM/CodeBlock.cpp:
        (JSC::CodeBlock::dump):
        * VM/CodeGenerator.cpp:
        (JSC::CodeGenerator::generate):
        (JSC::CodeGenerator::CodeGenerator):
        * VM/Machine.cpp:
        (JSC::Machine::privateExecute):
        (JSC::Machine::cti_op_convert_this):
        * VM/Machine.h:
        * VM/Opcode.h:
        * kjs/JSActivation.cpp:
        (JSC::JSActivation::JSActivation):
        * kjs/JSActivation.h:
        (JSC::JSActivation::createStructureID):
        * kjs/JSCell.h:
        (JSC::JSValue::needsThisConversion):
        * kjs/JSGlobalData.cpp:
        (JSC::JSGlobalData::JSGlobalData):
        * kjs/JSGlobalData.h:
        * kjs/JSNumberCell.h:
        (JSC::JSNumberCell::createStructureID):
        * kjs/JSStaticScopeObject.h:
        (JSC::JSStaticScopeObject::JSStaticScopeObject):
        (JSC::JSStaticScopeObject::createStructureID):
        * kjs/JSString.h:
        (JSC::JSString::createStructureID):
        * kjs/JSValue.h:
        * kjs/TypeInfo.h:
        (JSC::TypeInfo::needsThisConversion):
        * kjs/nodes.h:
        (JSC::ScopeNode::usesThis):

2008-10-03  Cameron Zwarich  <zwarich@apple.com>

        Reviewed by Maciej Stachowiak.

        Bug 21356: The size of the RegisterFile differs depending on 32-bit / 64-bit and Debug / Release
        <https://bugs.webkit.org/show_bug.cgi?id=21356>

        The RegisterFile decreases in size (measured in terms of numbers of
        Registers) as the size of a Register increases. This causes

            js1_5/Regress/regress-159334.js

        to fail in 64-bit debug builds. This fix makes the RegisterFile on all
        platforms the same size that it is in 32-bit Release builds.

        * VM/RegisterFile.h:
        (JSC::RegisterFile::RegisterFile):

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

        Reviewed by Cameron Zwarich.
        
        - Some code cleanup to how we handle code features.
        
        1) Rename FeatureInfo typedef to CodeFeatures.
        2) Rename NodeFeatureInfo template to NodeInfo.
        3) Keep CodeFeature bitmask in ScopeNode instead of trying to break it out into individual bools.
        4) Rename misleadingly named "needsClosure" method to "containsClosures", which better describes the meaning
        of ClosureFeature.
        5) Make setUsersArguments() not take an argument since it only goes one way.

        * JavaScriptCore.exp:
        * VM/CodeBlock.h:
        (JSC::CodeBlock::CodeBlock):
        * kjs/NodeInfo.h:
        * kjs/Parser.cpp:
        (JSC::Parser::didFinishParsing):
        * kjs/Parser.h:
        (JSC::Parser::parse):
        * kjs/grammar.y:
        * kjs/nodes.cpp:
        (JSC::ScopeNode::ScopeNode):
        (JSC::ProgramNode::ProgramNode):
        (JSC::ProgramNode::create):
        (JSC::EvalNode::EvalNode):
        (JSC::EvalNode::create):
        (JSC::FunctionBodyNode::FunctionBodyNode):
        (JSC::FunctionBodyNode::create):
        * kjs/nodes.h:
        (JSC::ScopeNode::usesEval):
        (JSC::ScopeNode::containsClosures):
        (JSC::ScopeNode::usesArguments):
        (JSC::ScopeNode::setUsesArguments):

2008-10-03  Cameron Zwarich  <zwarich@apple.com>

        Reviewed by Maciej Stachowiak.

        Bug 21343: REGRESSSION (r37160): ecma_3/ExecutionContexts/10.1.3-1.js and js1_4/Functions/function-001.js fail on 64-bit
        <https://bugs.webkit.org/show_bug.cgi?id=21343>

        A fix was landed for this issue in r37253, and the ChangeLog assumes
        that it is a compiler bug, but it turns out that it is a subtle issue
        with mixing signed and unsigned 32-bit values in a 64-bit environment.
        In order to properly fix this bug, we should convert our signed offsets
        into the register file to use ptrdiff_t.

        This may not be the only instance of this issue, but I will land this
        fix first and look for more later.

        * VM/Machine.cpp:
        (JSC::Machine::getArgumentsData):
        * VM/Machine.h:
        * kjs/Arguments.cpp:
        (JSC::Arguments::getOwnPropertySlot):
        * kjs/Arguments.h:
        (JSC::Arguments::init):

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

        * VM/CTI.cpp: Another Windows build fix. Change the args of ctiTrampoline.

        * kjs/JSNumberCell.h: A build fix for newer versions of gcc. Added
        declarations of JSGlobalData overloads of jsNumberCell.

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

        - try to fix Windows build

        * kjs/ScopeChain.h: Add forward declaration of JSGlobalData.

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

        Reviewed by Geoff Garen.

        - next step of https://bugs.webkit.org/show_bug.cgi?id=21295
          Turn ExecState into a call frame pointer.

        Remove m_globalObject and m_globalData from ExecState.

        SunSpider says this is a wash (slightly faster but not statistically
        significant); which is good enough since it's a preparation step and
        not supposed to be a spedup.

        * API/JSCallbackFunction.cpp:
        (JSC::JSCallbackFunction::JSCallbackFunction):
        * kjs/ArrayConstructor.cpp:
        (JSC::ArrayConstructor::ArrayConstructor):
        * kjs/BooleanConstructor.cpp:
        (JSC::BooleanConstructor::BooleanConstructor):
        * kjs/DateConstructor.cpp:
        (JSC::DateConstructor::DateConstructor):
        * kjs/ErrorConstructor.cpp:
        (JSC::ErrorConstructor::ErrorConstructor):
        * kjs/FunctionPrototype.cpp:
        (JSC::FunctionPrototype::FunctionPrototype):
        * kjs/JSFunction.cpp:
        (JSC::JSFunction::JSFunction):
        * kjs/NativeErrorConstructor.cpp:
        (JSC::NativeErrorConstructor::NativeErrorConstructor):
        * kjs/NumberConstructor.cpp:
        (JSC::NumberConstructor::NumberConstructor):
        * kjs/ObjectConstructor.cpp:
        (JSC::ObjectConstructor::ObjectConstructor):
        * kjs/PrototypeFunction.cpp:
        (JSC::PrototypeFunction::PrototypeFunction):
        * kjs/RegExpConstructor.cpp:
        (JSC::RegExpConstructor::RegExpConstructor):
        * kjs/StringConstructor.cpp:
        (JSC::StringConstructor::StringConstructor):
        Pass JSGlobalData* instead of ExecState* to the InternalFunction
        constructor.

        * API/OpaqueJSString.cpp: Added now-needed include.

        * JavaScriptCore.exp: Updated.

        * VM/CTI.cpp:
        (JSC::CTI::emitSlowScriptCheck): Changed to use ARGS_globalData
        instead of ARGS_exec.

        * VM/CTI.h: Added a new argument to the CTI, the global data pointer.
        While it's possible to get to the global data pointer using the
        ExecState pointer, it's slow enough that it's better to just keep
        it around in the CTI arguments.

        * VM/CodeBlock.h: Moved the CodeType enum here from ExecState.h.

        * VM/Machine.cpp:
        (JSC::Machine::execute): Pass fewer arguments when constructing
        ExecState, and pass the global data pointer when invoking CTI.
        (JSC::Machine::firstCallFrame): Added. Used to get the dynamic global
        object, which is in the scope chain of the first call frame.
        (JSC::Machine::cti_op_add): Use globalData instead of exec when
        possible, to keep fast cases fast, since it's now more expensive to
        get to it through the exec pointer.
        (JSC::Machine::cti_timeout_check): Ditto.
        (JSC::Machine::cti_op_put_by_id_second): Ditto.
        (JSC::Machine::cti_op_get_by_id_second): Ditto.
        (JSC::Machine::cti_op_mul): Ditto.
        (JSC::Machine::cti_vm_compile): Ditto.
        (JSC::Machine::cti_op_get_by_val): Ditto.
        (JSC::Machine::cti_op_sub): Ditto.
        (JSC::Machine::cti_op_put_by_val): Ditto.
        (JSC::Machine::cti_op_put_by_val_array): Ditto.
        (JSC::Machine::cti_op_negate): Ditto.
        (JSC::Machine::cti_op_div): Ditto.
        (JSC::Machine::cti_op_pre_dec): Ditto.
        (JSC::Machine::cti_op_post_inc): Ditto.
        (JSC::Machine::cti_op_lshift): Ditto.
        (JSC::Machine::cti_op_bitand): Ditto.
        (JSC::Machine::cti_op_rshift): Ditto.
        (JSC::Machine::cti_op_bitnot): Ditto.
        (JSC::Machine::cti_op_mod): Ditto.
        (JSC::Machine::cti_op_post_dec): Ditto.
        (JSC::Machine::cti_op_urshift): Ditto.
        (JSC::Machine::cti_op_bitxor): Ditto.
        (JSC::Machine::cti_op_bitor): Ditto.
        (JSC::Machine::cti_op_call_eval): Ditto.
        (JSC::Machine::cti_op_throw): Ditto.
        (JSC::Machine::cti_op_is_string): Ditto.
        (JSC::Machine::cti_op_debug): Ditto.
        (JSC::Machine::cti_vm_throw): Ditto.

        * VM/Machine.h: Added firstCallFrame.

        * kjs/DebuggerCallFrame.cpp:
        (JSC::DebuggerCallFrame::evaluate): Pass fewer arguments when
        constructing ExecState.

        * kjs/ExecState.cpp: Deleted contents. Later we'll remove the
        file altogether.

        * kjs/ExecState.h: Removed m_globalObject and m_globalData.
        Moved CodeType into another header.
        (JSC::ExecState::ExecState): Take only a single argument, a
        call frame pointer.
        (JSC::ExecState::dynamicGlobalObject): Get the object from
        the first call frame since it's no longer stored.
        (JSC::ExecState::globalData): Get the global data from the
        scope chain, since we no longer store a pointer to it here.
        (JSC::ExecState::identifierTable): Ditto.
        (JSC::ExecState::propertyNames): Ditto.
        (JSC::ExecState::emptyList): Ditto.
        (JSC::ExecState::lexer): Ditto.
        (JSC::ExecState::parser): Ditto.
        (JSC::ExecState::machine): Ditto.
        (JSC::ExecState::arrayTable): Ditto.
        (JSC::ExecState::dateTable): Ditto.
        (JSC::ExecState::mathTable): Ditto.
        (JSC::ExecState::numberTable): Ditto.
        (JSC::ExecState::regExpTable): Ditto.
        (JSC::ExecState::regExpConstructorTable): Ditto.
        (JSC::ExecState::stringTable): Ditto.
        (JSC::ExecState::heap): Ditto.

        * kjs/FunctionConstructor.cpp:
        (JSC::FunctionConstructor::FunctionConstructor): Pass
        JSGlobalData* instead of ExecState* to the InternalFunction
        constructor.
        (JSC::constructFunction): Pass the global data pointer when
        constructing a new scope chain.

        * kjs/InternalFunction.cpp:
        (JSC::InternalFunction::InternalFunction): Take a JSGlobalData*
        instead of an ExecState*. Later we can change more places to
        work this way -- it's more efficient to take the type you need
        since the caller might already have it.
        * kjs/InternalFunction.h: Ditto.

        * kjs/JSCell.h:
        (JSC::JSCell::operator new): Added an overload that takes a
        JSGlobalData* so you can construct without an ExecState*.

        * kjs/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::init): Moved creation of the global scope
        chain in here, since it now requires a pointer to the global data.
        Moved the initialization of the call frame in here since it requires
        the global scope chain node. Removed the extra argument to ExecState
        when creating the global ExecState*.
        * kjs/JSGlobalObject.h: Removed initialization of globalScopeChain
        and the call frame from the JSGlobalObjectData constructor. Added
        a thisValue argument to the init function.

        * kjs/JSNumberCell.cpp: Added versions of jsNumberCell that take
        JSGlobalData* rather than ExecState*.
        * kjs/JSNumberCell.h:
        (JSC::JSNumberCell::operator new): Added a version that takes
        JSGlobalData*.
        (JSC::JSNumberCell::JSNumberCell): Ditto.
        (JSC::jsNumber): Ditto.
        * kjs/JSString.cpp:
        (JSC::jsString): Ditto.
        (JSC::jsSubstring): Ditto.
        (JSC::jsOwnedString): Ditto.
        * kjs/JSString.h:
        (JSC::JSString::JSString): Changed to take JSGlobalData*.
        (JSC::jsEmptyString): Added a version that takes JSGlobalData*.
        (JSC::jsSingleCharacterString): Ditto.
        (JSC::jsSingleCharacterSubstring): Ditto.
        (JSC::jsNontrivialString): Ditto.
        (JSC::JSString::getIndex): Ditto.
        (JSC::jsString): Ditto.
        (JSC::jsSubstring): Ditto.
        (JSC::jsOwnedString): Ditto.

        * kjs/ScopeChain.h: Added a globalData pointer to each node.
        (JSC::ScopeChainNode::ScopeChainNode): Initialize the globalData
        pointer.
        (JSC::ScopeChainNode::push): Set the global data pointer in the
        new node.
        (JSC::ScopeChain::ScopeChain): Take a globalData argument.

        * kjs/SmallStrings.cpp:
        (JSC::SmallStrings::createEmptyString): Take JSGlobalData* instead of
        ExecState*.
        (JSC::SmallStrings::createSingleCharacterString): Ditto.
        * kjs/SmallStrings.h:
        (JSC::SmallStrings::emptyString): Ditto.
        (JSC::SmallStrings::singleCharacterString): Ditto.

2008-10-03  Cameron Zwarich  <zwarich@apple.com>

        Reviewed by Geoff Garen.

        Bug 21343: REGRESSSION (r37160): ecma_3/ExecutionContexts/10.1.3-1.js and js1_4/Functions/function-001.js fail on 64-bit
        <https://bugs.webkit.org/show_bug.cgi?id=21343>

        Add a workaround for a bug in GCC, which affects GCC 4.0, GCC 4.2, and
        llvm-gcc 4.2. I put it in an #ifdef because it was a slight regression
        on SunSpider in 32-bit, although that might be entirely random.

        * kjs/Arguments.cpp:
        (JSC::Arguments::getOwnPropertySlot):

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

        Rubber stamped by Alexey Proskuryakov.

        * kjs/Shell.cpp: (main): Don't delete JSGlobalData. Later, we need to change
        this tool to use public JavaScriptCore API instead.

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

        Suggested by Alexey Proskuryakov.

        * kjs/JSGlobalData.cpp:
        (JSC::JSGlobalData::~JSGlobalData): Remove call to heap.destroy() because
        it's too late to ref the JSGlobalData object once it's already being
        destroyed. In practice this is not a problem because WebCore's JSGlobalData
        is never destroyed and JSGlobalContextRelease takes care of calling
        heap.destroy() in advance.

2008-10-02  Oliver Hunt  <oliver@apple.com>

        Reviewed by Maciej Stachowiak.

        Replace SSE3 check with an SSE2 check, and implement SSE2 check on windows.

        5.6% win on SunSpider on windows.

        * VM/CTI.cpp:
        (JSC::isSSE2Present):
        (JSC::CTI::compileBinaryArithOp):
        (JSC::CTI::compileBinaryArithOpSlowCase):

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

        Rubber stamped by Cameron Zwarich.
        
        - fix mistaken change of | to || which caused a big perf regression on EarleyBoyer

        * kjs/grammar.y:

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

        Reviewed by Geoff Garen.

        - https://bugs.webkit.org/show_bug.cgi?id=21321
          Bug 21321: speed up JavaScriptCore by inlining Heap in JSGlobalData

        1.019x as fast on SunSpider.

        * API/JSBase.cpp:
        (JSEvaluateScript): Use heap. instead of heap-> to work with the heap.
        (JSCheckScriptSyntax): Ditto.
        (JSGarbageCollect): Ditto.
        (JSReportExtraMemoryCost): Ditto.
        * API/JSContextRef.cpp:
        (JSGlobalContextRetain): Ditto.
        (JSGlobalContextRelease): Destroy the heap with the destroy function instead
        of the delete operator.
        (JSContextGetGlobalObject): Use heap. instead of heap-> to work with the heap.
        * API/JSObjectRef.cpp:
        (JSObjectMake): Use heap. instead of heap-> to work with the heap.
        (JSObjectMakeFunctionWithCallback): Ditto.
        (JSObjectMakeConstructor): Ditto.
        (JSObjectMakeFunction): Ditto.
        (JSObjectMakeArray): Ditto.
        (JSObjectMakeDate): Ditto.
        (JSObjectMakeError): Ditto.
        (JSObjectMakeRegExp): Ditto.
        (JSObjectHasProperty): Ditto.
        (JSObjectGetProperty): Ditto.
        (JSObjectSetProperty): Ditto.
        (JSObjectGetPropertyAtIndex): Ditto.
        (JSObjectSetPropertyAtIndex): Ditto.
        (JSObjectDeleteProperty): Ditto.
        (JSObjectCallAsFunction): Ditto.
        (JSObjectCallAsConstructor): Ditto.
        (JSObjectCopyPropertyNames): Ditto.
        (JSPropertyNameAccumulatorAddName): Ditto.
        * API/JSValueRef.cpp:
        (JSValueIsEqual): Ditto.
        (JSValueIsInstanceOfConstructor): Ditto.
        (JSValueMakeNumber): Ditto.
        (JSValueMakeString): Ditto.
        (JSValueToNumber): Ditto.
        (JSValueToStringCopy): Ditto.
        (JSValueToObject): Ditto.
        (JSValueProtect): Ditto.
        (JSValueUnprotect): Ditto.

        * kjs/ExecState.h:
        (JSC::ExecState::heap): Update to use the & operator.

        * kjs/JSGlobalData.cpp:
        (JSC::JSGlobalData::JSGlobalData): Update to initialize a heap member
        instead of calling new to make a heap.
        (JSC::JSGlobalData::~JSGlobalData): Destroy the heap with the destroy
        function instead of the delete operator.
        * kjs/JSGlobalData.h: Change from Heap* to a Heap.
        * kjs/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::mark): Use the & operator here.
        (JSC::JSGlobalObject::operator new): Use heap. instead of heap-> to work
        with the heap.

2008-10-02  Cameron Zwarich  <zwarich@apple.com>

        Reviewed by Geoff Garen.

        Bug 21317: Replace RegisterFile size and capacity information with Register pointers
        <https://bugs.webkit.org/show_bug.cgi?id=21317>

        This is a 2.3% speedup on the V8 DeltaBlue benchmark, a 3.3% speedup on
        the V8 Raytrace benchmark, and a 1.0% speedup on SunSpider.

        * VM/Machine.cpp:
        (JSC::slideRegisterWindowForCall):
        (JSC::Machine::callEval):
        (JSC::Machine::execute):
        (JSC::Machine::privateExecute):
        (JSC::Machine::cti_op_call_JSFunction):
        (JSC::Machine::cti_op_construct_JSConstruct):
        * VM/RegisterFile.cpp:
        (JSC::RegisterFile::~RegisterFile):
        * VM/RegisterFile.h:
        (JSC::RegisterFile::RegisterFile):
        (JSC::RegisterFile::start):
        (JSC::RegisterFile::end):
        (JSC::RegisterFile::size):
        (JSC::RegisterFile::shrink):
        (JSC::RegisterFile::grow):
        (JSC::RegisterFile::lastGlobal):
        (JSC::RegisterFile::markGlobals):
        (JSC::RegisterFile::markCallFrames):
        * kjs/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::copyGlobalsTo):

2008-10-02  Cameron Zwarich  <zwarich@apple.com>

        Rubber-stamped by Darin Adler.

        Change bitwise operations introduced in r37166 to boolean operations. We
        only use bitwise operations over boolean operations for increasing
        performance in extremely hot code, but that does not apply to anything
        in the parser.

        * kjs/grammar.y:

2008-10-02  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Darin Adler.

        Fix for bug #21232 - should reset m_isPendingDash on flush,
        and should allow '\-' as beginning or end of a range (though
        not to specifiy a range itself).

        * ChangeLog:
        * wrec/CharacterClassConstructor.cpp:
        (JSC::CharacterClassConstructor::put):
        (JSC::CharacterClassConstructor::flush):
        * wrec/CharacterClassConstructor.h:
        (JSC::CharacterClassConstructor::flushBeforeEscapedHyphen):
        * wrec/WREC.cpp:
        (JSC::WRECGenerator::generateDisjunction):
        (JSC::WRECParser::parseCharacterClass):
        (JSC::WRECParser::parseDisjunction):
        * wrec/WREC.h:

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

        Reviewed by Sam Weinig.

        - remove the "static" from declarations in a header file, since we
          don't want them to have internal linkage

        * VM/Machine.h: Remove the static keyword from the constant and the
        three inline functions that Geoff just moved here.

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

        Reviewed by Sam Weinig.
        
        Fixed https://bugs.webkit.org/show_bug.cgi?id=21283.
        Profiler Crashes When Started

        * VM/Machine.cpp:
        * VM/Machine.h:
        (JSC::makeHostCallFramePointer):
        (JSC::isHostCallFrame):
        (JSC::stripHostCallFrameBit): Moved some things to the header so
        JSGlobalObject could use them.

        * kjs/JSGlobalObject.h:
        (JSC::JSGlobalObject::JSGlobalObjectData::JSGlobalObjectData): Call the
        new makeHostCallFramePointer API, since 0 no longer indicates a host
        call frame.

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

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=21304
        Stop using a static wrapper map for WebCore JS bindings

        * kjs/JSGlobalData.cpp:
        (JSC::JSGlobalData::JSGlobalData):
        (JSC::JSGlobalData::~JSGlobalData):
        (JSC::JSGlobalData::ClientData::~ClientData):
        * kjs/JSGlobalData.h:
        Added a client data member to JSGlobalData. WebCore will use it to store bindings-related
        global data.

        * JavaScriptCore.exp: Export virtual ClientData destructor.

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

        Not reviewed.
        
        Try to fix Qt build.

        * kjs/Error.h:

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

        Reviewed by Darin Adler and Cameron Zwarich.

        Preliminary step toward dynamic recompilation: Standardized and
        simplified the parsing interface.
        
        The main goal in this patch is to make it easy to ask for a duplicate
        compilation, and get back a duplicate result -- same source URL, same
        debugger / profiler ID, same toString behavior, etc.
        
        The basic unit of compilation and evaluation is now SourceCode, which
        encompasses a SourceProvider, a range in that provider, and a starting
        line number.

        A SourceProvider now encompasses a source URL, and *is* a source ID,
        since a pointer is a unique identifier.

        * API/JSBase.cpp:
        (JSEvaluateScript):
        (JSCheckScriptSyntax): Provide a SourceCode to the Interpreter, since
        other APIs are no longer supported.
        
        * VM/CodeBlock.h:
        (JSC::EvalCodeCache::get): Provide a SourceCode to the Interpreter, since
        other APIs are no longer supported.
        (JSC::CodeBlock::CodeBlock): ASSERT something that used to be ASSERTed
        by our caller -- this is a better bottleneck.

        * VM/CodeGenerator.cpp:
        (JSC::CodeGenerator::CodeGenerator): Updated for the fact that
        FunctionBodyNode's parameters are no longer a WTF::Vector.

        * kjs/Arguments.cpp:
        (JSC::Arguments::Arguments): ditto

        * kjs/DebuggerCallFrame.cpp:
        (JSC::DebuggerCallFrame::evaluate): Provide a SourceCode to the Parser,
        since other APIs are no longer supported.

        * kjs/FunctionConstructor.cpp:
        (JSC::constructFunction): Provide a SourceCode to the Parser, since
        other APIs are no longer supported. Adopt FunctionBodyNode's new
        "finishParsing" API.

        * kjs/JSFunction.cpp:
        (JSC::JSFunction::lengthGetter):
        (JSC::JSFunction::getParameterName): Updated for the fact that
        FunctionBodyNode's parameters are no longer a wtf::Vector.

        * kjs/JSFunction.h: Nixed some cruft.

        * kjs/JSGlobalObjectFunctions.cpp:
        (JSC::globalFuncEval): Provide a SourceCode to the Parser, since
        other APIs are no longer supported. 

        * kjs/Parser.cpp:
        (JSC::Parser::parse): Require a SourceCode argument, instead of a bunch
        of broken out parameters. Stop tracking sourceId as an integer, since we
        use the SourceProvider pointer for this now. Don't clamp the
        startingLineNumber, since SourceCode does that now.

        * kjs/Parser.h:
        (JSC::Parser::parse): Standardized the parsing interface to require a
        SourceCode.

        * kjs/Shell.cpp:
        (functionRun):
        (functionLoad):
        (prettyPrintScript):
        (runWithScripts):
        (runInteractive): Provide a SourceCode to the Interpreter, since
        other APIs are no longer supported.

        * kjs/SourceProvider.h:
        (JSC::SourceProvider::SourceProvider):
        (JSC::SourceProvider::url):
        (JSC::SourceProvider::asId):
        (JSC::UStringSourceProvider::create):
        (JSC::UStringSourceProvider::UStringSourceProvider): Added new
        responsibilities described above.

        * kjs/SourceRange.h:
        (JSC::SourceCode::SourceCode):
        (JSC::SourceCode::toString):
        (JSC::SourceCode::provider):
        (JSC::SourceCode::firstLine):
        (JSC::SourceCode::data):
        (JSC::SourceCode::length): Added new responsibilities described above.
        Renamed SourceRange to SourceCode, based on review feedback. Added
        a makeSource function for convenience.

        * kjs/debugger.h: Provide a SourceCode to the client, since other APIs
        are no longer supported.

        * kjs/grammar.y: Provide startingLineNumber when creating a SourceCode.

        * kjs/debugger.h: Treat sourceId as intptr_t to avoid loss of precision
        on 64bit platforms.

        * kjs/interpreter.cpp:
        (JSC::Interpreter::checkSyntax):
        (JSC::Interpreter::evaluate):
        * kjs/interpreter.h: Require a SourceCode instead of broken out arguments.

        * kjs/lexer.cpp:
        (JSC::Lexer::setCode):
        * kjs/lexer.h:
        (JSC::Lexer::sourceRange): Fold together the SourceProvider and line number
        into a SourceCode. Fixed a bug where the Lexer would accidentally keep
        alive the last SourceProvider forever.

        * kjs/nodes.cpp:
        (JSC::ScopeNode::ScopeNode):
        (JSC::ProgramNode::ProgramNode):
        (JSC::ProgramNode::create):
        (JSC::EvalNode::EvalNode):
        (JSC::EvalNode::generateCode):
        (JSC::EvalNode::create):
        (JSC::FunctionBodyNode::FunctionBodyNode):
        (JSC::FunctionBodyNode::finishParsing):
        (JSC::FunctionBodyNode::create):
        (JSC::FunctionBodyNode::generateCode):
        (JSC::ProgramNode::generateCode):
        (JSC::FunctionBodyNode::paramString):
        * kjs/nodes.h:
        (JSC::ScopeNode::):
        (JSC::ScopeNode::sourceId):
        (JSC::FunctionBodyNode::):
        (JSC::FunctionBodyNode::parameterCount):
        (JSC::FuncExprNode::):
        (JSC::FuncDeclNode::): Store a SourceCode in all ScopeNodes, since
        SourceCode is now responsible for tracking URL, ID, etc. Streamlined
        some ad hoc FunctionBodyNode fixups into a "finishParsing" function, to
        help make clear what you need to do in order to finish parsing a
        FunctionBodyNode.

        * wtf/Vector.h:
        (WTF::::releaseBuffer): Don't ASSERT that releaseBuffer() is only called
        when buffer is not 0, since FunctionBodyNode is more than happy
        to get back a 0 buffer, and other functions like RefPtr::release() allow
        for 0, too.

2008-10-01  Cameron Zwarich  <zwarich@apple.com>

        Reviewed by Maciej Stachowiak.

        Bug 21289: REGRESSION (r37160): Inspector crashes on load
        <https://bugs.webkit.org/show_bug.cgi?id=21289>

        The code in Arguments::mark() in r37160 was wrong. It marks indices in
        d->registers, but that makes no sense (they are local variables, not
        arguments). It should mark those indices in d->registerArray instead.

        This patch also changes Arguments::copyRegisters() to use d->numParameters
        instead of recomputing it.

        * kjs/Arguments.cpp:
        (JSC::Arguments::mark):
        * kjs/Arguments.h:
        (JSC::Arguments::copyRegisters):

2008-09-30  Darin Adler  <darin@apple.com>

        Reviewed by Eric Seidel.

        - https://bugs.webkit.org/show_bug.cgi?id=21214
          work on getting rid of ExecState

        Eliminate some unneeded uses of dynamicGlobalObject.

        * API/JSClassRef.cpp:
        (OpaqueJSClass::contextData): Changed to use a map in the global data instead
        of on the global object. Also fixed to use only a single hash table lookup.

        * API/JSObjectRef.cpp:
        (JSObjectMakeConstructor): Use lexicalGlobalObject rather than dynamicGlobalObject
        to get the object prototype.

        * kjs/ArrayPrototype.cpp:
        (JSC::arrayProtoFuncToString): Use arrayVisitedElements set in global data rather
        than in the global object.
        (JSC::arrayProtoFuncToLocaleString): Ditto.
        (JSC::arrayProtoFuncJoin): Ditto.

        * kjs/JSGlobalData.cpp:
        (JSC::JSGlobalData::JSGlobalData): Don't initialize opaqueJSClassData, since
        it's no longer a pointer.
        (JSC::JSGlobalData::~JSGlobalData): We still need to delete all the values, but
        we don't need to delete the map since it's no longer a pointer.

        * kjs/JSGlobalData.h: Made opaqueJSClassData a map instead of a pointer to a map.
        Also added arrayVisitedElements.

        * kjs/JSGlobalObject.h: Removed arrayVisitedElements.

        * kjs/Shell.cpp:
        (functionRun): Use lexicalGlobalObject instead of dynamicGlobalObject.
        (functionLoad): Ditto.

2008-10-01  Cameron Zwarich  <zwarich@apple.com>

        Not reviewed.

        Speculative Windows build fix.

        * kjs/grammar.y:

2008-10-01  Cameron Zwarich  <zwarich@apple.com>

        Reviewed by Darin Adler.

        Bug 21123: using "arguments" in a function should not force creation of an activation object
        <https://bugs.webkit.org/show_bug.cgi?id=21123>

        Make the 'arguments' object not require a JSActivation. We store the
        'arguments' object in the OptionalCalleeArguments call frame slot. We
        need to be able to get the original 'arguments' object to tear it off
        when returning from a function, but 'arguments' may be assigned to in a
        number of ways.

        Therefore, we use the OptionalCalleeArguments slot when we want to get
        the original activation or we know that 'arguments' was not assigned a
        different value. When 'arguments' may have been assigned a new value,
        we use a new local variable that is initialized with 'arguments'. Since
        a function parameter named 'arguments' may overwrite the value of
        'arguments', we also need to be careful to look up 'arguments' in the
        symbol table, so we get the parameter named 'arguments' instead of the
        local variable that we have added for holding the 'arguments' object.

        This is a 19.1% win on the V8 Raytrace benchmark using the SunSpider
        harness, and a 20.7% win using the V8 harness. This amounts to a 6.5%
        total speedup on the V8 benchmark suite using the V8 harness.

        * VM/CTI.cpp:
        (JSC::CTI::privateCompileMainPass):
        * VM/CodeBlock.h:
        * VM/CodeGenerator.cpp:
        (JSC::CodeGenerator::CodeGenerator):
        * VM/Machine.cpp:
        (JSC::Machine::unwindCallFrame):
        (JSC::Machine::privateExecute):
        (JSC::Machine::retrieveArguments):
        (JSC::Machine::cti_op_init_arguments):
        (JSC::Machine::cti_op_ret_activation_arguments):
        * VM/Machine.h:
        * VM/RegisterFile.h:
        (JSC::RegisterFile::):
        * kjs/Arguments.cpp:
        (JSC::Arguments::mark):
        (JSC::Arguments::fillArgList):
        (JSC::Arguments::getOwnPropertySlot):
        (JSC::Arguments::put):
        * kjs/Arguments.h:
        (JSC::Arguments::setRegisters):
        (JSC::Arguments::init):
        (JSC::Arguments::Arguments):
        (JSC::Arguments::copyRegisters):
        (JSC::JSActivation::copyRegisters):
        * kjs/JSActivation.cpp:
        (JSC::JSActivation::argumentsGetter):
        * kjs/JSActivation.h:
        (JSC::JSActivation::JSActivationData::JSActivationData):
        * kjs/grammar.y:
        * kjs/nodes.h:
        (JSC::ScopeNode::setUsesArguments):
        * masm/X86Assembler.h:
        (JSC::X86Assembler::):
        (JSC::X86Assembler::orl_mr):

2008-10-01  Kevin McCullough  <kmccullough@apple.com>

        Rubberstamped by Geoff Garen.

        Remove BreakpointCheckStatement because it's not used anymore.
        No effect on sunspider or the jsc tests.

        * kjs/nodes.cpp:
        * kjs/nodes.h:

2008-09-30  Oliver Hunt  <oliver@apple.com>

        Reviewed by Geoff Garen.

        Improve performance of CTI on windows.

        Currently on platforms where the compiler doesn't allow us to safely
        index relative to the address of a parameter we need to actually
        provide a pointer to CTI runtime call arguments.  This patch improves
        performance in this case by making the CTI logic for restoring this
        parameter much less conservative by only resetting it before we actually
        make a call, rather than between each and every SF bytecode we generate
        code for.

        This results in a 3.6% progression on the v8 benchmark when compiled with MSVC.

        * VM/CTI.cpp:
        (JSC::CTI::emitCall):
        (JSC::CTI::compileOpCall):
        (JSC::CTI::privateCompileMainPass):
        (JSC::CTI::privateCompileSlowCases):
        (JSC::CTI::privateCompilePutByIdTransition):
        * VM/CTI.h:
        * masm/X86Assembler.h:
        * wtf/Platform.h:

2008-09-30  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Oliver Hunt.

        - track uses of "this", "with" and "catch" in the parser
        
        Knowing this up front will be useful for future optimizations.
        
        Perf and correctness remain the same.
        
        * kjs/NodeInfo.h:
        * kjs/grammar.y:

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

        Reviewed by Mark Rowe.

        Add WebKitAvailability macros for JSObjectMakeArray, JSObjectMakeDate, JSObjectMakeError,
        and JSObjectMakeRegExp

        * API/JSObjectRef.h:

2008-09-30  Darin Adler  <darin@apple.com>

        Reviewed by Geoff Garen.

        - https://bugs.webkit.org/show_bug.cgi?id=21214
          work on getting rid of ExecState

        Replaced the m_prev field of ExecState with a bit in the
        call frame pointer to indicate "host" call frames.

        * VM/Machine.cpp:
        (JSC::makeHostCallFramePointer): Added. Sets low bit.
        (JSC::isHostCallFrame): Added. Checks low bit.
        (JSC::stripHostCallFrameBit): Added. Clears low bit.
        (JSC::Machine::unwindCallFrame): Replaced null check that was
        formerly used to detect host call frames with an isHostCallFrame check.
        (JSC::Machine::execute): Pass in a host call frame pointer rather than
        always passing 0 when starting execution from the host. This allows us
        to follow the entire call frame pointer chain when desired, or to stop
        at the host calls when that's desired.
        (JSC::Machine::privateExecute): Replaced null check that was
        formerly used to detect host call frames with an isHostCallFrame check.
        (JSC::Machine::retrieveCaller): Ditto.
        (JSC::Machine::retrieveLastCaller): Ditto.
        (JSC::Machine::callFrame): Removed the code to walk up m_prev pointers
        and replaced it with code that uses the caller pointer and uses the
        stripHostCallFrameBit function.

        * kjs/ExecState.cpp: Removed m_prev.
        * kjs/ExecState.h: Ditto.

2008-09-30  Cameron Zwarich  <zwarich@apple.com>

        Reviewed by Geoff Garen.

        Move all detection of 'arguments' in a lexical scope to the parser, in
        preparation for fixing

        Bug 21123: using "arguments" in a function should not force creation of an activation object
        <https://bugs.webkit.org/show_bug.cgi?id=21123>

        * VM/CodeGenerator.cpp:
        (JSC::CodeGenerator::CodeGenerator):
        * kjs/NodeInfo.h:
        * kjs/grammar.y:

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

        Not reviewed.

        * kjs/Shell.cpp:
        (runWithScripts): Fixed indentation.

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

        Rubber-stamped by Sam Weinig.

        Build fix.  Move InternalFunction::classInfo implementation into the .cpp
        file to prevent the vtable for InternalFunction being generated as a weak symbol.
        Has no effect on SunSpider.

        * kjs/InternalFunction.cpp:
        (JSC::InternalFunction::classInfo):
        * kjs/InternalFunction.h:

2008-09-29  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin Adler.
        
        - optimize appending a number to a string
        https://bugs.webkit.org/show_bug.cgi?id=21203
        
        It's pretty common in real-world code (and on some of the v8
        benchmarks) to append a number to a string, so I made this one of
        the fast cases, and also added support to UString to do it
        directly without allocating a temporary UString.
        
        ~1% speedup on v8 benchmark.

        * VM/Machine.cpp:
        (JSC::jsAddSlowCase): Make this NEVER_INLINE because somehow otherwise
        the change is a regression.
        (JSC::jsAdd): Handle number + string special case.
        (JSC::Machine::cti_op_add): Integrate much of the logic of jsAdd to
        avoid exception check in the str + str, num + num and str + num cases.
        * kjs/ustring.cpp:
        (JSC::expandedSize): Make this a non-member function, since it needs to be 
        called in non-member functions but not outside this file.
        (JSC::expandCapacity): Ditto.
        (JSC::UString::expandCapacity): Call the non-member version. 
        (JSC::createRep): Helper to make a rep from a char*.
        (JSC::UString::UString): Use above helper.
        (JSC::concatenate): Guts of concatenating constructor for cases where first
        item is a UString::Rep, and second is a UChar* and length, or a char*.
        (JSC::UString::append): Implement for cases where first item is a UString::Rep,
        and second is an int or double. Sadly duplicates logic of UString::from(int)
        and UString::from(double).
        * kjs/ustring.h:

2008-09-29  Darin Adler  <darin@apple.com>

        Reviewed by Sam Weinig.

        - https://bugs.webkit.org/show_bug.cgi?id=21214
          work on getting rid of ExecState

        * JavaScriptCore.exp: Updated since JSGlobalObject::init
        no longer takes a parameter.

        * VM/Machine.cpp:
        (JSC::Machine::execute): Removed m_registerFile argument
        for ExecState constructors.

        * kjs/DebuggerCallFrame.cpp:
        (JSC::DebuggerCallFrame::evaluate): Removed globalThisValue
        argument for ExecState constructor.

        * kjs/ExecState.cpp:
        (JSC::ExecState::ExecState): Removed globalThisValue and
        registerFile arguments to constructors.

        * kjs/ExecState.h: Removed m_globalThisValue and
        m_registerFile data members.

        * kjs/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::init): Removed globalThisValue
        argument for ExecState constructor.

        * kjs/JSGlobalObject.h:
        (JSC::JSGlobalObject::JSGlobalObject): Got rid of parameter
        for the init function.

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

        Rubber-stamped by Cameron Zwarich.
        
        Fixed https://bugs.webkit.org/show_bug.cgi?id=21225
        Machine::retrieveLastCaller should check for a NULL codeBlock
        
        In order to crash, you would need to call retrieveCaller in a situation
        where you had two host call frames in a row in the register file. I
        don't know how to make that happen, or if it's even possible, so I don't
        have a test case -- but better safe than sorry!

        * VM/Machine.cpp:
        (JSC::Machine::retrieveLastCaller):

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

        Reviewed by Cameron Zwarich.
        
        Store the callee ScopeChain, not the caller ScopeChain, in the call frame
        header. Nix the "scopeChain" local variable and ExecState::m_scopeChain, and
        access the callee ScopeChain through the call frame header instead.

        Profit: call + return are simpler, because they don't have to update the
        "scopeChain" local variable, or ExecState::m_scopeChain.
        
        Because CTI keeps "r" in a register, reading the callee ScopeChain relative
        to "r" can be very fast, in any cases we care to optimize.

        0% speedup on empty function call benchmark. (5.5% speedup in bytecode.)
        0% speedup on SunSpider. (7.5% speedup on controlflow-recursive.)
        2% speedup on SunSpider --v8.
        2% speedup on v8 benchmark.

        * VM/CTI.cpp: Changed scope chain access to read the scope chain from
        the call frame header. Sped up op_ret by changing it not to fuss with
        the "scopeChain" local variable or ExecState::m_scopeChain.

        * VM/CTI.h: Updated CTI trampolines not to take a ScopeChainNode*
        argument, since that's stored in the call frame header now.

        * VM/Machine.cpp: Access "scopeChain" and "codeBlock" through new helper
        functions that read from the call frame header. Updated functions operating
        on ExecState::m_callFrame to account for / take advantage of the fact that
        Exec:m_callFrame is now never NULL.
        
        Fixed a bug in op_construct, where it would use the caller's default
        object prototype, rather than the callee's, when constructing a new object.

        * VM/Machine.h: Made some helper functions available. Removed
        ScopeChainNode* arguments to a lot of functions, since the ScopeChainNode*
        is now stored in the call frame header.

        * VM/RegisterFile.h: Renamed "CallerScopeChain" to "ScopeChain", since
        that's what it is now.

        * kjs/DebuggerCallFrame.cpp: Updated for change to ExecState signature.

        * kjs/ExecState.cpp:
        * kjs/ExecState.h: Nixed ExecState::m_callFrame, along with the unused
        isGlobalObject function.

        * kjs/JSGlobalObject.cpp:
        * kjs/JSGlobalObject.h: Gave the global object a fake call frame in
        which to store the global scope chain, since our code now assumes that
        it can always read the scope chain out of the ExecState's call frame.

2008-09-29  Cameron Zwarich  <cwzwarich@uwaterloo.ca>

        Reviewed by Sam Weinig.

        Remove the isActivationObject() virtual method on JSObject and use
        StructureID information instead. This should be slightly faster, but
        isActivationObject() is only used in assertions and unwinding the stack
        for exceptions.

        * VM/Machine.cpp:
        (JSC::depth):
        (JSC::Machine::unwindCallFrame):
        (JSC::Machine::privateExecute):
        (JSC::Machine::cti_op_ret_activation):
        * kjs/JSActivation.cpp:
        * kjs/JSActivation.h:
        * kjs/JSObject.h:

2008-09-29  Peter Gal  <galpeter@inf.u-szeged.hu>

        Reviewed and tweaked by Darin Adler.

        Fix build for non-all-in-one platforms.

        * kjs/StringPrototype.cpp: Added missing ASCIICType.h include.

2008-09-29  Bradley T. Hughes  <bradley.hughes@nokia.com>

        Reviewed by Simon Hausmann.

        Fix compilation with icpc

        * wtf/HashSet.h:
        (WTF::::find):
        (WTF::::contains):

2008-09-29  Thiago Macieira  <thiago.macieira@nokia.com>

        Reviewed by Simon Hausmann.

        Changed copyright from Trolltech ASA to Nokia.
        
        Nokia acquired Trolltech ASA, assets were transferred on September 26th 2008.
        

        * wtf/qt/MainThreadQt.cpp:

2008-09-29  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Lars Knoll.

        Don't accidentially install libJavaScriptCore.a for the build inside
        Qt.

        * JavaScriptCore.pro:

2008-09-28  Cameron Zwarich  <cwzwarich@uwaterloo.ca>

        Reviewed by Maciej Stachowiak.

        Bug 21200: Allow direct access to 'arguments' without using op_resolve
        <https://bugs.webkit.org/show_bug.cgi?id=21200>

        Allow fast access to the 'arguments' object by adding an extra slot to
        the callframe to store it.

        This is a 3.0% speedup on the V8 Raytrace benchmark.

        * JavaScriptCore.exp:
        * VM/CTI.cpp:
        (JSC::CTI::privateCompileMainPass):
        * VM/CodeBlock.cpp:
        (JSC::CodeBlock::dump):
        * VM/CodeGenerator.cpp:
        (JSC::CodeGenerator::CodeGenerator):
        (JSC::CodeGenerator::registerFor):
        * VM/CodeGenerator.h:
        (JSC::CodeGenerator::registerFor):
        * VM/Machine.cpp:
        (JSC::Machine::initializeCallFrame):
        (JSC::Machine::dumpRegisters):
        (JSC::Machine::privateExecute):
        (JSC::Machine::retrieveArguments):
        (JSC::Machine::cti_op_call_JSFunction):
        (JSC::Machine::cti_op_create_arguments):
        (JSC::Machine::cti_op_construct_JSConstruct):
        * VM/Machine.h:
        * VM/Opcode.h:
        * VM/RegisterFile.h:
        (JSC::RegisterFile::):
        * kjs/JSActivation.cpp:
        (JSC::JSActivation::mark):
        (JSC::JSActivation::argumentsGetter):
        * kjs/JSActivation.h:
        (JSC::JSActivation::JSActivationData::JSActivationData):
        * kjs/NodeInfo.h:
        * kjs/Parser.cpp:
        (JSC::Parser::didFinishParsing):
        * kjs/Parser.h:
        (JSC::Parser::parse):
        * kjs/grammar.y:
        * kjs/nodes.cpp:
        (JSC::ScopeNode::ScopeNode):
        (JSC::ProgramNode::ProgramNode):
        (JSC::ProgramNode::create):
        (JSC::EvalNode::EvalNode):
        (JSC::EvalNode::create):
        (JSC::FunctionBodyNode::FunctionBodyNode):
        (JSC::FunctionBodyNode::create):
        * kjs/nodes.h:
        (JSC::ScopeNode::usesArguments):

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

        Reviewed by Sam Weinig.

        Add an ASCII fast-path to toLowerCase and toUpperCase.

        The fast path speeds up the common case of an ASCII-only string by up to 60% while adding a less than 5% penalty
        to the less common non-ASCII case.

        This also removes stringProtoFuncToLocaleLowerCase and stringProtoFuncToLocaleUpperCase, which were identical
        to the non-locale variants of the functions.  toLocaleLowerCase and toLocaleUpperCase now use the non-locale
        variants of the functions directly.

        * kjs/StringPrototype.cpp:
        (JSC::stringProtoFuncToLowerCase):
        (JSC::stringProtoFuncToUpperCase):

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

        Reviewed by Cameron Zwarich.

        Speed up parseInt and parseFloat.

        Repeatedly indexing into a UString is slow, so retrieve a pointer into the underlying buffer once up front
        and use that instead.  This is a 7% win on a parseInt/parseFloat micro-benchmark.

        * kjs/JSGlobalObjectFunctions.cpp:
        (JSC::parseInt):
        (JSC::parseFloat):

2008-09-28  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by David Hyatt.

        In Qt's initializeThreading re-use an existing thread identifier for the main
        thread if it exists.

        currentThread() implicitly creates new identifiers and it could be that
        it is called before initializeThreading().

        * wtf/ThreadingQt.cpp:
        (WTF::initializeThreading):

2008-09-27  Keishi Hattori  <casey.hattori@gmail.com>

        Added Machine::retrieveCaller to the export list.

        Reviewed by Kevin McCullough and Tim Hatcher.

        * JavaScriptCore.exp: Added Machine::retrieveCaller.

2008-09-27  Anders Carlsson  <andersca@apple.com>

        Fix build.

        * VM/CTI.cpp:
        (JSC::):

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

        Reviewed by Cameron Zwarich.
        
        https://bugs.webkit.org/show_bug.cgi?id=21175

        Store the callee CodeBlock, not the caller CodeBlock, in the call frame
        header. Nix the "codeBlock" local variable, and access the callee
        CodeBlock through the call frame header instead.
        
        Profit: call + return are simpler, because they don't have to update the
        "codeBlock" local variable.
        
        Because CTI keeps "r" in a register, reading the callee CodeBlock relative
        to "r" can be very fast, in any cases we care to optimize. Presently,
        no such cases seem important.
        
        Also, stop writing "dst" to the call frame header. CTI doesn't use it.
        
        21.6% speedup on empty function call benchmark.
        3.8% speedup on SunSpider --v8.
        2.1% speedup on v8 benchmark.
        0.7% speedup on SunSpider (6% speedup on controlflow-recursive).
        
        Small regression in bytecode, because currently every op_ret reads the
        callee CodeBlock to check needsFullScopeChain, and bytecode does not
        keep "r" in a register. On-balance, this is probably OK, since CTI is
        our high-performance execution model. Also, this should go away once
        we make needsFullScopeChain statically determinable at parse time.

        * VM/CTI.cpp:
        (JSC::CTI::compileOpCall): The speedup!
        (JSC::CTI::privateCompileSlowCases): ditto

        * VM/CTI.h:
        (JSC::): Fixed up magic trampoline constants to account for the nixed
        "codeBlock" argument.
        (JSC::CTI::execute): Changed trampoline function not to take a "codeBlock"
        argument, since codeBlock is now stored in the call frame header.
        
        * VM/Machine.cpp: Read the callee CodeBlock from the register file. Use
        a NULL CallerRegisters in the call frame header to signal a built-in
        caller, since CodeBlock is now never NULL.

        * VM/Machine.h: Made some stand-alone functions Machine member functions
        so they could call the private codeBlock() accessor in the Register
        class, of which Machine is a friend. Renamed "CallerCodeBlock" to
        "CodeBlock", since it's no longer the caller's CodeBlock.

        * VM/RegisterFile.h: Marked some methods const to accommodate a 
        const RegisterFile* being passed around in Machine.cpp.

2008-09-26  Jan Michael Alonzo  <jmalonzo@webkit.org>

        Gtk build fix. Not reviewed.

        Narrow-down the target of the JavaScriptCore .lut.h generator so
        it won't try to create the WebCore .lut.hs.

        * GNUmakefile.am:

2008-09-26  Matt Lilek  <webkit@mattlilek.com>

        Reviewed by Tim Hatcher.

        Update FEATURE_DEFINES after ENABLE_CROSS_DOCUMENT_MESSAGING was removed.

        * Configurations/JavaScriptCore.xcconfig:

2008-09-26  Cameron Zwarich  <cwzwarich@uwaterloo.ca>

        Rubber-stamped by Anders Carlson.

        Change the name 'sc' to 'scopeChainNode' in a few places.

        * kjs/nodes.cpp:
        (JSC::EvalNode::generateCode):
        (JSC::FunctionBodyNode::generateCode):
        (JSC::ProgramNode::generateCode):

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

        Reviewed by Darin Adler.

        Patch for https://bugs.webkit.org/show_bug.cgi?id=21152
        Speedup static property get/put

        Convert getting/setting static property values to use static functions
        instead of storing an integer and switching in getValueProperty/putValueProperty.

        * kjs/JSObject.cpp:
        (JSC::JSObject::deleteProperty):
        (JSC::JSObject::getPropertyAttributes):
        * kjs/MathObject.cpp:
        (JSC::MathObject::getOwnPropertySlot):
        * kjs/NumberConstructor.cpp:
        (JSC::numberConstructorNaNValue):
        (JSC::numberConstructorNegInfinity):
        (JSC::numberConstructorPosInfinity):
        (JSC::numberConstructorMaxValue):
        (JSC::numberConstructorMinValue):
        * kjs/PropertySlot.h:
        (JSC::PropertySlot::):
        * kjs/RegExpConstructor.cpp:
        (JSC::regExpConstructorDollar1):
        (JSC::regExpConstructorDollar2):
        (JSC::regExpConstructorDollar3):
        (JSC::regExpConstructorDollar4):
        (JSC::regExpConstructorDollar5):
        (JSC::regExpConstructorDollar6):
        (JSC::regExpConstructorDollar7):
        (JSC::regExpConstructorDollar8):
        (JSC::regExpConstructorDollar9):
        (JSC::regExpConstructorInput):
        (JSC::regExpConstructorMultiline):
        (JSC::regExpConstructorLastMatch):
        (JSC::regExpConstructorLastParen):
        (JSC::regExpConstructorLeftContext):
        (JSC::regExpConstructorRightContext):
        (JSC::setRegExpConstructorInput):
        (JSC::setRegExpConstructorMultiline):
        (JSC::RegExpConstructor::setInput):
        (JSC::RegExpConstructor::setMultiline):
        (JSC::RegExpConstructor::multiline):
        * kjs/RegExpConstructor.h:
        * kjs/RegExpObject.cpp:
        (JSC::regExpObjectGlobal):
        (JSC::regExpObjectIgnoreCase):
        (JSC::regExpObjectMultiline):
        (JSC::regExpObjectSource):
        (JSC::regExpObjectLastIndex):
        (JSC::setRegExpObjectLastIndex):
        * kjs/RegExpObject.h:
        (JSC::RegExpObject::setLastIndex):
        (JSC::RegExpObject::lastIndex):
        (JSC::RegExpObject::RegExpObjectData::RegExpObjectData):
        * kjs/StructureID.cpp:
        (JSC::StructureID::getEnumerablePropertyNames):
        * kjs/create_hash_table:
        * kjs/lexer.cpp:
        (JSC::Lexer::lex):
        * kjs/lookup.cpp:
        (JSC::HashTable::createTable):
        (JSC::HashTable::deleteTable):
        (JSC::setUpStaticFunctionSlot):
        * kjs/lookup.h:
        (JSC::HashEntry::initialize):
        (JSC::HashEntry::setKey):
        (JSC::HashEntry::key):
        (JSC::HashEntry::attributes):
        (JSC::HashEntry::function):
        (JSC::HashEntry::functionLength):
        (JSC::HashEntry::propertyGetter):
        (JSC::HashEntry::propertyPutter):
        (JSC::HashEntry::lexerValue):
        (JSC::HashEntry::):
        (JSC::HashTable::entry):
        (JSC::getStaticPropertySlot):
        (JSC::getStaticValueSlot):
        (JSC::lookupPut):

2008-09-26  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Maciej Stachowiak & Oliver Hunt.

        Add support for reusing temporary JSNumberCells.  This change is based on the observation
        that if the result of certain operations is a JSNumberCell and is consumed by a subsequent
        operation that would produce a JSNumberCell, we can reuse the object rather than allocating
        a fresh one.  E.g. given the expression ((a * b) * c), we can statically determine that
        (a * b) will have a numeric result (or else it will have thrown an exception), so the result
        will either be a JSNumberCell or a JSImmediate.

        This patch changes three areas of JSC:
            * The AST now tracks type information about the result of each node.
            * This information is consumed in bytecode compilation, and certain bytecode operations
              now carry the statically determined type information about their operands.
            * CTI uses the information in a number of fashions:
                * Where an operand to certain arithmetic operations is reusable, it will plant code
                  to try to perform the operation in JIT code & reuse the cell, where appropriate.
                * Where it can be statically determined that an operand can only be numeric (typically
                  the result of another arithmetic operation) the code will not redundantly check that
                  the JSCell is a JSNumberCell.
                * Where either of the operands to an add are non-numeric do not plant an optimized
                  arithmetic code path, just call straight out to the C function.

        +6% Sunspider (10% progression on 3D, 16% progression on math, 60% progression on access-nbody),
        +1% v8-tests (improvements in raytrace & crypto)

        * VM/CTI.cpp: Add optimized code generation with reuse of temporary JSNumberCells.
        * VM/CTI.h:
        * kjs/JSNumberCell.h:
        * masm/X86Assembler.h:

        * VM/CodeBlock.cpp: Add type information to specific bytecodes.
        * VM/CodeGenerator.cpp:
        * VM/CodeGenerator.h:
        * VM/Machine.cpp:

        * kjs/nodes.cpp: Track static type information for nodes.
        * kjs/nodes.h:
        * kjs/ResultDescriptor.h: (Added)
        * JavaScriptCore.xcodeproj/project.pbxproj:

2008-09-26  Yichao Yin  <yichao.yin@torchmobile.com.cn>

        Reviewed by George Staikos, Maciej Stachowiak.

        Add utility functions needed for upcoming WML code.

        * wtf/ASCIICType.h:
        (WTF::isASCIIPrintable):

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

        Reviewed by Darin Adler.
        
        Reverted the part of r36614 that used static data because static data
        is not thread-safe.

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

        Reviewed by Maciej Stachowiak.
        
        Removed dynamic check for whether the callee needs an activation object.
        Replaced with callee code to create the activation object.

        0.5% speedup on SunSpider.
        No change on v8 benchmark. (Might be a speedup, but it's in range of the
        variance.)

        0.7% speedup on v8 benchmark in bytecode.
        1.3% speedup on empty call benchmark in bytecode.

        * VM/CTI.cpp:
        (JSC::CTI::privateCompileMainPass): Added support for op_init_activation,
        the new opcode that specifies that the callee's initialization should
        create an activation object.
        (JSC::CTI::privateCompile): Removed previous code that did a similar
        thing in an ad-hoc way.

        * VM/CodeBlock.cpp:
        (JSC::CodeBlock::dump): Added a case for dumping op_init_activation.

        * VM/CodeGenerator.cpp:
        (JSC::CodeGenerator::generate): Added fixup code to change op_init to
        op_init_activation if necessary. (With a better parser, we would know
        which to use from the beginning.)

        * VM/Instruction.h:
        (JSC::Instruction::Instruction):
        (WTF::): Faster traits for the instruction vector. An earlier version
        of this patch relied on inserting at the beginning of the vector, and
        depended on this change for speed.

        * VM/Machine.cpp:
        (JSC::Machine::execute): Removed clients of setScopeChain, the old
        abstraction for dynamically checking for whether an activation object
        needed to be created.
        (JSC::Machine::privateExecute): ditto

        (JSC::Machine::cti_op_push_activation): Renamed this function from
        cti_vm_updateScopeChain, and made it faster by removing the call to 
        setScopeChain.
        * VM/Machine.h:

        * VM/Opcode.h: Declared op_init_activation.

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

        Reviewed by Maciej Stachowiak.
        
        Move most of the return code back into the callee, now that the callee
        doesn't have to calculate anything dynamically.
        
        11.5% speedup on empty function call benchmark.
        
        SunSpider says 0.3% faster. SunSpider --v8 says no change.

        * VM/CTI.cpp:
        (JSC::CTI::compileOpCall):
        (JSC::CTI::privateCompileMainPass):
        (JSC::CTI::privateCompileSlowCases):

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

        Reviewed by Maciej Stachowiak.

        Remove staticFunctionGetter.  There is only one remaining user of
        staticFunctionGetter and it can be converted to use setUpStaticFunctionSlot.

        * JavaScriptCore.exp:
        * kjs/lookup.cpp:
        * kjs/lookup.h:

2008-09-24  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Oliver Hunt.
        
        - inline JIT fast case of op_neq
        - remove extra level of function call indirection from slow cases of eq and neq
        
        1% speedup on Richards

        * VM/CTI.cpp:
        (JSC::CTI::privateCompileMainPass):
        (JSC::CTI::privateCompileSlowCases):
        * VM/Machine.cpp:
        (JSC::Machine::privateExecute):
        (JSC::Machine::cti_op_eq):
        (JSC::Machine::cti_op_neq):
        * kjs/operations.cpp:
        (JSC::equal):
        (JSC::equalSlowCase):
        * kjs/operations.h:
        (JSC::equalSlowCaseInline):

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

        Reviewed by Darin Adler.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=21080
        <rdar://problem/6243534>
        Crash below Function.apply when using a runtime array as the argument list

        Test: plugins/bindings-array-apply-crash.html

        * kjs/FunctionPrototype.cpp:
        (JSC::functionProtoFuncApply): Revert to the slow case if the object inherits from 
        JSArray (via ClassInfo) but is not a JSArray.

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

        Style change.

        * kjs/nodes.cpp:
        (JSC::statementListEmitCode):

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

        Reviewed by Geoff.

        Bug 21031: Breakpoints in the condition of loops only breaks the first
        time
        - Now when setting breakpoints in the condition of a loop (for, while,
        for in, and do while) will successfully break each time throught the
        loop.
        - For 'for' loops we need a little more complicated behavior that cannot
        be accomplished without some more significant changes:
        https://bugs.webkit.org/show_bug.cgi?id=21073

        * kjs/nodes.cpp:
        (JSC::statementListEmitCode): We don't want to blindly emit a debug hook
        at the first line of loops, instead let the loop emit the debug hooks.
        (JSC::DoWhileNode::emitCode):
        (JSC::WhileNode::emitCode):
        (JSC::ForNode::emitCode):
        (JSC::ForInNode::emitCode):
        * kjs/nodes.h:
        (JSC::StatementNode::):
        (JSC::DoWhileNode::):
        (JSC::WhileNode::):
        (JSC::ForInNode::):

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

        Reviewed by Darin Adler.
        
        Fixed <rdar://problem/5605532> Need a SPI for telling JS the size of
        the objects it retains

        * API/tests/testapi.c: Test the new SPI a little.

        * API/JSSPI.cpp: Add the new SPI.
        * API/JSSPI.h: Add the new SPI.
        * JavaScriptCore.exp: Add the new SPI.
        * JavaScriptCore.xcodeproj/project.pbxproj: Add the new SPI.

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

        Reviewed by Darin Adler.

        * API/JSBase.h: Filled in some missing function names.

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

        Reviewed by Cameron Zwarich.
        
        Fixed https://bugs.webkit.org/show_bug.cgi?id=21057
        Crash in RegisterID::deref() running fast/canvas/canvas-putImageData.html

        * VM/CodeGenerator.h: Changed declaration order to ensure the
        m_lastConstant, which is a RefPtr that points into m_calleeRegisters,
        has its destructor called before the destructor for m_calleeRegisters.

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

        Reviewed by Sam Weinig.

        - https://bugs.webkit.org/show_bug.cgi?id=21047
          speed up ret_activation with inlining

        About 1% on v8-raytrace.

        * JavaScriptCore.exp: Removed JSVariableObject::setRegisters.

        * kjs/JSActivation.cpp: Moved copyRegisters to the header to make it inline.
        * kjs/JSActivation.h:
        (JSC::JSActivation::copyRegisters): Moved here. Also removed the registerArraySize
        argument to setRegisters, since the object doesn't need to store the number of
        registers.

        * kjs/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::reset): Removed unnecessary clearing left over from when we
        used this on objects that weren't brand new. These days, this function is really
        just part of the constructor.

        * kjs/JSGlobalObject.h: Added registerArraySize to JSGlobalObjectData, since
        JSVariableObjectData no longer needs it. Added a setRegisters override here
        that handles storing the size.

        * kjs/JSStaticScopeObject.h: Removed code to set registerArraySize, since it
        no longer exists.

        * kjs/JSVariableObject.cpp: Moved copyRegisterArray and setRegisters to the
        header to make them inline.
        * kjs/JSVariableObject.h: Removed registerArraySize from JSVariableObjectData,
        since it was only used for the global object.
        (JSC::JSVariableObject::copyRegisterArray): Moved here ot make it inline.
        (JSC::JSVariableObject::setRegisters): Moved here to make it inline. Also
        removed the code to set registerArraySize and changed an if statement into
        an assert to save an unnnecessary branch.

2008-09-24  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Oliver Hunt.
        
        - inline PropertyMap::getOffset to speed up polymorphic lookups
        
        ~1.5% speedup on v8 benchmark
        no effect on SunSpider

        * JavaScriptCore.exp:
        * kjs/PropertyMap.cpp:
        * kjs/PropertyMap.h:
        (JSC::PropertyMap::getOffset):

2008-09-24  Jan Michael Alonzo  <jmalonzo@webkit.org>

        Reviewed by Alp Toker.

        https://bugs.webkit.org/show_bug.cgi?id=20992
        Build fails on GTK+ Mac OS

        * wtf/ThreadingGtk.cpp: Remove platform ifdef as suggested by
          Richard Hult.
        (WTF::initializeThreading):

2008-09-23  Oliver Hunt  <oliver@apple.com>

        Reviewed by Maciej Stachowiak.

        Bug 19968: Slow Script at www.huffingtonpost.com
        <https://bugs.webkit.org/show_bug.cgi?id=19968>

        Finally found the cause of this accursed issue.  It is triggered
        by synchronous creation of a new global object from JS.  The new
        global object resets the timer state in this execution group's
        Machine, taking timerCheckCount to 0.  Then when JS returns the
        timerCheckCount is decremented making it non-zero.  The next time
        we execute JS we will start the timeout counter, however the non-zero
        timeoutCheckCount means we don't reset the timer information. This
        means that the timeout check is now checking the cumulative time
        since the creation of the global object rather than the time since
        JS was last entered.  At this point the slow script dialog is guaranteed
        to eventually be displayed incorrectly unless a page is loaded
        asynchronously (which will reset everything into a sane state).

        The fix for this is rather trivial -- the JSGlobalObject constructor
        should not be resetting the machine timer state.

        * VM/Machine.cpp:
        (JSC::Machine::Machine):
          Now that we can't rely on the GlobalObject initialising the timeout
          state, we do it in the Machine constructor.

        * VM/Machine.h:
        (JSC::Machine::stopTimeoutCheck):
          Add assertions to guard against this happening.

        * kjs/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::init):
          Don't reset the timeout state.

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

        Reviewed by Oliver Hunt.
        
        Fixed https://bugs.webkit.org/show_bug.cgi?id=21038 | <rdar://problem/6240812>
        Uncaught exceptions in regex replace callbacks crash webkit
        
        This was a combination of two problems:
        
        (1) the replace function would continue execution after an exception
        had been thrown.
        
        (2) In some cases, the Machine would return 0 in the case of an exception,
        despite the fact that a few clients dereference the Machine's return
        value without first checking for an exception.
        
        * VM/Machine.cpp:
        (JSC::Machine::execute):
        
        ^ Return jsNull() instead of 0 in the case of an exception, since some
        clients depend on using our return value.
        
        ^ ASSERT that execution does not continue after an exception has been
        thrown, to help catch problems like this in the future.

        * kjs/StringPrototype.cpp:
        (JSC::stringProtoFuncReplace):
        
        ^ Stop execution if an exception has been thrown.

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

        Try to fix the windows build.

        * VM/CTI.cpp:
        (JSC::CTI::compileOpCall):
        (JSC::CTI::privateCompileMainPass):

2008-09-23  Alp Toker  <alp@nuanti.com>

        Build fix.

        * VM/CTI.h:

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

        Reviewed by Darin Adler.

        * wtf/Platform.h: Removed duplicate #if.

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

        Reviewed by Darin Adler.
        
        Changed the layout of the call frame from
        
        { header, parameters, locals | constants, temporaries }
        
        to
        
        { parameters, header | locals, constants, temporaries }
        
        This simplifies function entry+exit, and enables a number of future
        optimizations.
        
        13.5% speedup on empty call benchmark for bytecode; 23.6% speedup on
        empty call benchmark for CTI.
        
        SunSpider says no change. SunSpider --v8 says 1% faster.

        * VM/CTI.cpp:
        
        Added a bit of abstraction for calculating whether a register is a
        constant, since this patch changes that calculation:
        (JSC::CTI::isConstant):
        (JSC::CTI::getConstant):
        (JSC::CTI::emitGetArg):
        (JSC::CTI::emitGetPutArg):
        (JSC::CTI::getConstantImmediateNumericArg):

        Updated for changes to callframe header location:
        (JSC::CTI::emitPutToCallFrameHeader):
        (JSC::CTI::emitGetFromCallFrameHeader):
        (JSC::CTI::printOpcodeOperandTypes):
        
        Renamed to spite Oliver:
        (JSC::CTI::emitInitRegister):
        
        Added an abstraction for emitting a call through a register, so that
        calls through registers generate exception info, too:
        (JSC::CTI::emitCall):

        Updated to match the new callframe header layout, and to support calls
        through registers, which have no destination address:
        (JSC::CTI::compileOpCall):
        (JSC::CTI::privateCompileMainPass):
        (JSC::CTI::privateCompileSlowCases):
        (JSC::CTI::privateCompile):

        * VM/CTI.h:

        More of the above:
        (JSC::CallRecord::CallRecord):

        * VM/CodeBlock.cpp:

        Updated for new register layout:
        (JSC::registerName):
        (JSC::CodeBlock::dump):

        * VM/CodeBlock.h:
        
        Updated CodeBlock to track slightly different information about the
        register frame, and tweaked the style of an ASSERT_NOT_REACHED.
        (JSC::CodeBlock::CodeBlock):
        (JSC::CodeBlock::getStubInfo):

        * VM/CodeGenerator.cpp:
        
        Added some abstraction around constant register allocation, since this
        patch changes it, changed codegen to account for the new callframe
        layout, and added abstraction around register fetching code
        that used to assume that all local registers lived at negative indices,
        since vars now live at positive indices:
        (JSC::CodeGenerator::generate):
        (JSC::CodeGenerator::addVar):
        (JSC::CodeGenerator::addGlobalVar):
        (JSC::CodeGenerator::allocateConstants):
        (JSC::CodeGenerator::CodeGenerator):
        (JSC::CodeGenerator::addParameter):
        (JSC::CodeGenerator::registerFor):
        (JSC::CodeGenerator::constRegisterFor):
        (JSC::CodeGenerator::newRegister):
        (JSC::CodeGenerator::newTemporary):
        (JSC::CodeGenerator::highestUsedRegister):
        (JSC::CodeGenerator::addConstant):
        
        ASSERT that our caller referenced the registers it passed to us.
        Otherwise, we might overwrite them with parameters:
        (JSC::CodeGenerator::emitCall):
        (JSC::CodeGenerator::emitConstruct):

        * VM/CodeGenerator.h:
        
        Added some abstraction for getting a RegisterID for a given index,
        since the rules are a little weird:
        (JSC::CodeGenerator::registerFor):

        * VM/Machine.cpp:

        Utility function to transform a machine return PC to a virtual machine
        return VPC, for the sake of stack unwinding, since both PCs are stored
        in the same location now:
        (JSC::vPCForPC):

        Tweaked to account for new call frame:
        (JSC::Machine::initializeCallFrame):
        
        Tweaked to account for registerOffset supplied by caller:
        (JSC::slideRegisterWindowForCall):

        Tweaked to account for new register layout:
        (JSC::scopeChainForCall):
        (JSC::Machine::callEval):
        (JSC::Machine::dumpRegisters):
        (JSC::Machine::unwindCallFrame):
        (JSC::Machine::execute):

        Changed op_call and op_construct to implement the new calling convention:
        (JSC::Machine::privateExecute):

        Tweaked to account for the new register layout:
        (JSC::Machine::retrieveArguments):
        (JSC::Machine::retrieveCaller):
        (JSC::Machine::retrieveLastCaller):
        (JSC::Machine::callFrame):
        (JSC::Machine::getArgumentsData):

        Changed CTI call helpers to implement the new calling convention:
        (JSC::Machine::cti_op_call_JSFunction):
        (JSC::Machine::cti_op_call_NotJSFunction):
        (JSC::Machine::cti_op_ret_activation):
        (JSC::Machine::cti_op_ret_profiler):
        (JSC::Machine::cti_op_construct_JSConstruct):
        (JSC::Machine::cti_op_construct_NotJSConstruct):
        (JSC::Machine::cti_op_call_eval):

        * VM/Machine.h:

        * VM/Opcode.h:
        
        Renamed op_initialise_locals to op_init, because this opcode
        doesn't initialize all locals, and it doesn't initialize only locals.
        Also, to spite Oliver.
        
        * VM/RegisterFile.h:
        
        New call frame enumeration values:
        (JSC::RegisterFile::):

        Simplified the calculation of whether a RegisterID is a temporary,
        since we can no longer assume that all positive non-constant registers
        are temporaries:
        * VM/RegisterID.h:
        (JSC::RegisterID::RegisterID):
        (JSC::RegisterID::setTemporary):
        (JSC::RegisterID::isTemporary):

        Renamed firstArgumentIndex to firstParameterIndex because the assumption
        that this variable pertained to the actual arguments supplied by the
        caller caused me to write some buggy code:
        * kjs/Arguments.cpp:
        (JSC::ArgumentsData::ArgumentsData):
        (JSC::Arguments::Arguments):
        (JSC::Arguments::fillArgList):
        (JSC::Arguments::getOwnPropertySlot):
        (JSC::Arguments::put):

        Updated for new call frame layout:
        * kjs/DebuggerCallFrame.cpp:
        (JSC::DebuggerCallFrame::functionName):
        (JSC::DebuggerCallFrame::type):
        * kjs/DebuggerCallFrame.h:

        Changed the activation object to account for the fact that a call frame
        header now sits between parameters and local variables. This change
        requires all variable objects to do their own marking, since they
        now use their register storage differently:
        * kjs/JSActivation.cpp:
        (JSC::JSActivation::mark):
        (JSC::JSActivation::copyRegisters):
        (JSC::JSActivation::createArgumentsObject):
        * kjs/JSActivation.h:

        Updated global object to use the new interfaces required by the change
        to JSActivation above:
        * kjs/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::reset):
        (JSC::JSGlobalObject::mark):
        (JSC::JSGlobalObject::copyGlobalsFrom):
        (JSC::JSGlobalObject::copyGlobalsTo):
        * kjs/JSGlobalObject.h:
        (JSC::JSGlobalObject::addStaticGlobals):

        Updated static scope object to use the new interfaces required by the 
        change to JSActivation above:
        * kjs/JSStaticScopeObject.cpp:
        (JSC::JSStaticScopeObject::mark):
        (JSC::JSStaticScopeObject::~JSStaticScopeObject):
        * kjs/JSStaticScopeObject.h:
        (JSC::JSStaticScopeObject::JSStaticScopeObject):
        (JSC::JSStaticScopeObject::d):

        Updated variable object to use the new interfaces required by the 
        change to JSActivation above:
        * kjs/JSVariableObject.cpp:
        (JSC::JSVariableObject::copyRegisterArray):
        (JSC::JSVariableObject::setRegisters):
        * kjs/JSVariableObject.h:

        Changed the bit twiddling in symbol table not to assume that all indices
        are negative, since they can be positive now:
        * kjs/SymbolTable.h:
        (JSC::SymbolTableEntry::SymbolTableEntry):
        (JSC::SymbolTableEntry::isNull):
        (JSC::SymbolTableEntry::getIndex):
        (JSC::SymbolTableEntry::getAttributes):
        (JSC::SymbolTableEntry::setAttributes):
        (JSC::SymbolTableEntry::isReadOnly):
        (JSC::SymbolTableEntry::pack):
        (JSC::SymbolTableEntry::isValidIndex):

        Changed call and construct nodes to ref their functions and/or bases,
        so that emitCall/emitConstruct doesn't overwrite them with parameters.
        Also, updated for rename to registerFor:
        * kjs/nodes.cpp:
        (JSC::ResolveNode::emitCode):
        (JSC::NewExprNode::emitCode):
        (JSC::EvalFunctionCallNode::emitCode):
        (JSC::FunctionCallValueNode::emitCode):
        (JSC::FunctionCallResolveNode::emitCode):
        (JSC::FunctionCallBracketNode::emitCode):
        (JSC::FunctionCallDotNode::emitCode):
        (JSC::PostfixResolveNode::emitCode):
        (JSC::DeleteResolveNode::emitCode):
        (JSC::TypeOfResolveNode::emitCode):
        (JSC::PrefixResolveNode::emitCode):
        (JSC::ReadModifyResolveNode::emitCode):
        (JSC::AssignResolveNode::emitCode):
        (JSC::ConstDeclNode::emitCodeSingle):
        (JSC::ForInNode::emitCode):

        Added abstraction for getting exception info out of a call through a
        register:
        * masm/X86Assembler.h:
        (JSC::X86Assembler::emitCall):
        
        Removed duplicate #if:
        * wtf/Platform.h:

2008-09-23  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Darin.

        Bug 21030: The JS debugger breaks on the do of a do-while not the while
        (where the conditional statement is)
        https://bugs.webkit.org/show_bug.cgi?id=21030
        Now the statementListEmitCode detects if a do-while node is being
        emited and emits the debug hook on the last line instead of the first.

        This change had no effect on sunspider.

        * kjs/nodes.cpp:
        (JSC::statementListEmitCode):
        * kjs/nodes.h:
        (JSC::StatementNode::isDoWhile):
        (JSC::DoWhileNode::isDoWhile):

2008-09-23  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Cameron Zwarich.

        - inline the fast case of instanceof
        https://bugs.webkit.org/show_bug.cgi?id=20818

        ~2% speedup on EarleyBoyer test.
        
        * VM/CTI.cpp:
        (JSC::CTI::privateCompileMainPass):
        (JSC::CTI::privateCompileSlowCases):
        * VM/Machine.cpp:
        (JSC::Machine::cti_op_instanceof):

2008-09-23  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Cameron Zwarich.
        
        - add forgotten slow case logic for !==

        * VM/CTI.cpp:
        (JSC::CTI::privateCompileSlowCases):

2008-09-23  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Cameron Zwarich.

        - inline the fast cases of !==, same as for ===
        
        2.9% speedup on EarleyBoyer benchmark

        * VM/CTI.cpp:
        (JSC::CTI::compileOpStrictEq): Factored stricteq codegen into this function,
        and parameterized so it can do the reverse version as well.
        (JSC::CTI::privateCompileMainPass): Use the above for stricteq and nstricteq.
        * VM/CTI.h:
        (JSC::CTI::): Declare above stuff.
        * VM/Machine.cpp:
        (JSC::Machine::cti_op_nstricteq): Removed fast cases, now handled inline.

2008-09-23  Cameron Zwarich  <cwzwarich@uwaterloo.ca>

        Reviewed by Oliver Hunt.

        Bug 20989: Aguments constructor should put 'callee' and 'length' properties in a more efficient way
        <https://bugs.webkit.org/show_bug.cgi?id=20989>

        Make special cases for the 'callee' and 'length' properties in the
        Arguments object.

        This is somewhere between a 7.8% speedup and a 10% speedup on the V8
        Raytrace benchmark, depending on whether it is run alone or with the
        other V8 benchmarks.

        * kjs/Arguments.cpp:
        (JSC::ArgumentsData::ArgumentsData):
        (JSC::Arguments::Arguments):
        (JSC::Arguments::mark):
        (JSC::Arguments::getOwnPropertySlot):
        (JSC::Arguments::put):
        (JSC::Arguments::deleteProperty):

2008-09-23  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin.

        - speed up instanceof some more
        https://bugs.webkit.org/show_bug.cgi?id=20818
        
        ~2% speedup on EarleyBoyer

        The idea here is to record in the StructureID whether the class
        needs a special hasInstance or if it can use the normal logic from
        JSObject. 
        
        Based on this I inlined the real work directly into
        cti_op_instanceof and put the fastest checks up front and the
        error handling at the end (so it should be fairly straightforward
        to split off the beginning to be inlined if desired).

        I only did this for CTI, not the bytecode interpreter.
        
        * API/JSCallbackObject.h:
        (JSC::JSCallbackObject::createStructureID):
        * ChangeLog:
        * VM/Machine.cpp:
        (JSC::Machine::cti_op_instanceof):
        * kjs/JSImmediate.h:
        (JSC::JSImmediate::isAnyImmediate):
        * kjs/TypeInfo.h:
        (JSC::TypeInfo::overridesHasInstance):
        (JSC::TypeInfo::flags):

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

        Reviewed by Sam Weinig.

        - https://bugs.webkit.org/show_bug.cgi?id=21019
          make FunctionBodyNode::ref/deref fast

        Speeds up v8-raytrace by 7.2%.

        * kjs/nodes.cpp:
        (JSC::FunctionBodyNode::FunctionBodyNode): Initialize m_refCount to 0.
        * kjs/nodes.h:
        (JSC::FunctionBodyNode::ref): Call base class ref once, and thereafter use
        m_refCount.
        (JSC::FunctionBodyNode::deref): Ditto, but the deref side.

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

        Pointed out by Sam Weinig.

        * kjs/Arguments.cpp:
        (JSC::Arguments::fillArgList): Fix bad copy and paste. Oops!

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

        Reviewed by Cameron Zwarich.

        - https://bugs.webkit.org/show_bug.cgi?id=20983
          ArgumentsData should have some room to allocate some extra arguments inline

        Speeds up v8-raytrace by 5%.

        * kjs/Arguments.cpp:
        (JSC::ArgumentsData::ArgumentsData): Use a fixed buffer if there are 4 or fewer
        extra arguments.
        (JSC::Arguments::Arguments): Use a fixed buffer if there are 4 or fewer
        extra arguments.
        (JSC::Arguments::~Arguments): Delete the buffer if necessary.
        (JSC::Arguments::mark): Update since extraArguments are now Register.
        (JSC::Arguments::fillArgList): Added special case for the only case that's
        actually used in the practice, when there are no parameters. There are some
        other special cases in there too, but that's the only one that matters.
        (JSC::Arguments::getOwnPropertySlot): Updated to use setValueSlot since there's
        no operation to get you at the JSValue* inside a Register as a "slot".

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

        Reviewed by Maciej Stachowiak.

        Patch for https://bugs.webkit.org/show_bug.cgi?id=21014
        Speed up for..in by using StructureID to avoid calls to hasProperty

        Speeds up fasta by 8%.

        * VM/JSPropertyNameIterator.cpp:
        (JSC::JSPropertyNameIterator::invalidate):
        * VM/JSPropertyNameIterator.h:
        (JSC::JSPropertyNameIterator::next):
        * kjs/PropertyNameArray.h:
        (JSC::PropertyNameArrayData::begin):
        (JSC::PropertyNameArrayData::end):
        (JSC::PropertyNameArrayData::setCachedStructureID):
        (JSC::PropertyNameArrayData::cachedStructureID):
        * kjs/StructureID.cpp:
        (JSC::StructureID::getEnumerablePropertyNames):
        (JSC::structureIDChainsAreEqual):
        * kjs/StructureID.h:

2008-09-22  Kelvin Sherlock  <ksherlock@gmail.com>

        Updated and tweaked by Sam Weinig.

        Reviewed by Geoffrey Garen.

        Bug 20020: Proposed enhancement to JavaScriptCore API
        <https://bugs.webkit.org/show_bug.cgi?id=20020>

        Add JSObjectMakeArray, JSObjectMakeDate, JSObjectMakeError, and JSObjectMakeRegExp
        functions to create JavaScript Array, Date, Error, and RegExp objects, respectively.

        * API/JSObjectRef.cpp: The functions
        * API/JSObjectRef.h: Function prototype and documentation
        * JavaScriptCore.exp: Added functions to exported function list
        * API/tests/testapi.c: Added basic functionality tests.

        * kjs/DateConstructor.cpp:
        Replaced static JSObject* constructDate(ExecState* exec, JSObject*, const ArgList& args)
        with JSObject* constructDate(ExecState* exec, const ArgList& args).
        Added static JSObject* constructWithDateConstructor(ExecState* exec, JSObject*, const ArgList& args) function

        * kjs/DateConstructor.h:
        added prototype for JSObject* constructDate(ExecState* exec, const ArgList& args)

        * kjs/ErrorConstructor.cpp:
        removed static qualifier from ErrorInstance* constructError(ExecState* exec, const ArgList& args)

        * kjs/ErrorConstructor.h:
        added prototype for ErrorInstance* constructError(ExecState* exec, const ArgList& args)

        * kjs/RegExpConstructor.cpp:
        removed static qualifier from JSObject* constructRegExp(ExecState* exec, const ArgList& args)

        * kjs/RegExpConstructor.h:
        added prototype for JSObject* constructRegExp(ExecState* exec, const ArgList& args)

2008-09-22  Matt Lilek  <webkit@mattlilek.com>

        Not reviewed, Windows build fix.

        * kjs/Arguments.cpp:
        * kjs/FunctionPrototype.cpp:

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

        Reviewed by Darin Adler.

        Patch for https://bugs.webkit.org/show_bug.cgi?id=20982
        Speed up the apply method of functions by special-casing array and 'arguments' objects

        1% speedup on v8-raytrace.

        Test: fast/js/function-apply.html

        * kjs/Arguments.cpp:
        (JSC::Arguments::fillArgList):
        * kjs/Arguments.h:
        * kjs/FunctionPrototype.cpp:
        (JSC::functionProtoFuncApply):
        * kjs/JSArray.cpp:
        (JSC::JSArray::fillArgList):
        * kjs/JSArray.h:

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

        Reviewed by Sam Weinig.

        - https://bugs.webkit.org/show_bug.cgi?id=20993
          Array.push/pop need optimized cases for JSArray

        3% or so speedup on DeltaBlue benchmark.

        * kjs/ArrayPrototype.cpp:
        (JSC::arrayProtoFuncPop): Call JSArray::pop when appropriate.
        (JSC::arrayProtoFuncPush): Call JSArray::push when appropriate.

        * kjs/JSArray.cpp:
        (JSC::JSArray::putSlowCase): Set m_fastAccessCutoff when appropriate, getting
        us into the fast code path.
        (JSC::JSArray::pop): Added.
        (JSC::JSArray::push): Added.
        * kjs/JSArray.h: Added push and pop.

        * kjs/operations.cpp:
        (JSC::throwOutOfMemoryError): Don't inline this. Helps us avoid PIC branches.

2008-09-22  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Cameron Zwarich.
        
        - speed up instanceof operator by replacing implementsHasInstance method with a TypeInfo flag

        Partial work towards <https://bugs.webkit.org/show_bug.cgi?id=20818>
        
        2.2% speedup on EarleyBoyer benchmark.

        * API/JSCallbackConstructor.cpp:
        * API/JSCallbackConstructor.h:
        (JSC::JSCallbackConstructor::createStructureID):
        * API/JSCallbackFunction.cpp:
        * API/JSCallbackFunction.h:
        (JSC::JSCallbackFunction::createStructureID):
        * API/JSCallbackObject.h:
        (JSC::JSCallbackObject::createStructureID):
        * API/JSCallbackObjectFunctions.h:
        (JSC::::hasInstance):
        * API/JSValueRef.cpp:
        (JSValueIsInstanceOfConstructor):
        * JavaScriptCore.exp:
        * VM/Machine.cpp:
        (JSC::Machine::privateExecute):
        (JSC::Machine::cti_op_instanceof):
        * kjs/InternalFunction.cpp:
        * kjs/InternalFunction.h:
        (JSC::InternalFunction::createStructureID):
        * kjs/JSObject.cpp:
        * kjs/JSObject.h:
        * kjs/TypeInfo.h:
        (JSC::TypeInfo::implementsHasInstance):

2008-09-22  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Dave Hyatt.
        
        Based on initial work by Darin Adler.
        
        - replace masqueradesAsUndefined virtual method with a flag in TypeInfo
        - use this to JIT inline code for eq_null and neq_null
        https://bugs.webkit.org/show_bug.cgi?id=20823

        0.5% speedup on SunSpider
        ~4% speedup on Richards benchmark
        
        * VM/CTI.cpp:
        (JSC::CTI::privateCompileMainPass):
        * VM/Machine.cpp:
        (JSC::jsTypeStringForValue):
        (JSC::jsIsObjectType):
        (JSC::Machine::privateExecute):
        (JSC::Machine::cti_op_is_undefined):
        * VM/Machine.h:
        * kjs/JSCell.h:
        * kjs/JSValue.h:
        * kjs/StringObjectThatMasqueradesAsUndefined.h:
        (JSC::StringObjectThatMasqueradesAsUndefined::create):
        (JSC::StringObjectThatMasqueradesAsUndefined::createStructureID):
        * kjs/StructureID.h:
        (JSC::StructureID::mutableTypeInfo):
        * kjs/TypeInfo.h:
        (JSC::TypeInfo::TypeInfo):
        (JSC::TypeInfo::masqueradesAsUndefined):
        * kjs/operations.cpp:
        (JSC::equal):
        * masm/X86Assembler.h:
        (JSC::X86Assembler::):
        (JSC::X86Assembler::setne_r):
        (JSC::X86Assembler::setnz_r):
        (JSC::X86Assembler::testl_i32m):

2008-09-22  Tor Arne Vestbø  <tavestbo@trolltech.com>

        Reviewed by Simon.

        Initialize QCoreApplication in kjs binary/Shell.cpp
        
        This allows us to use QCoreApplication::instance() to
        get the main thread in ThreadingQt.cpp

        * kjs/Shell.cpp:
        (main):
        * wtf/ThreadingQt.cpp:
        (WTF::initializeThreading):

2008-09-21  Darin Adler  <darin@apple.com>

        - blind attempt to fix non-all-in-one builds

        * kjs/JSGlobalObject.cpp: Added includes of Arguments.h and RegExpObject.h.

2008-09-21  Darin Adler  <darin@apple.com>

        - fix debug build

        * kjs/StructureID.cpp:
        (JSC::StructureID::addPropertyTransition): Use typeInfo().type() instead of m_type.
        (JSC::StructureID::createCachedPrototypeChain): Ditto.

2008-09-21  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin Adler.
        
        - introduce a TypeInfo class, for holding per-type (in the C++ class sense) date in StructureID
        https://bugs.webkit.org/show_bug.cgi?id=20981

        * JavaScriptCore.exp:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * VM/CTI.cpp:
        (JSC::CTI::privateCompileMainPass):
        (JSC::CTI::privateCompilePutByIdTransition):
        * VM/Machine.cpp:
        (JSC::jsIsObjectType):
        (JSC::Machine::Machine):
        * kjs/AllInOneFile.cpp:
        * kjs/JSCell.h:
        (JSC::JSCell::isObject):
        (JSC::JSCell::isString):
        * kjs/JSGlobalData.cpp:
        (JSC::JSGlobalData::JSGlobalData):
        * kjs/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::reset):
        * kjs/JSGlobalObject.h:
        (JSC::StructureID::prototypeForLookup):
        * kjs/JSNumberCell.h:
        (JSC::JSNumberCell::createStructureID):
        * kjs/JSObject.cpp:
        (JSC::JSObject::createInheritorID):
        * kjs/JSObject.h:
        (JSC::JSObject::createStructureID):
        * kjs/JSString.h:
        (JSC::JSString::createStructureID):
        * kjs/NativeErrorConstructor.cpp:
        (JSC::NativeErrorConstructor::NativeErrorConstructor):
        * kjs/RegExpConstructor.cpp:
        * kjs/RegExpMatchesArray.h: Added.
        (JSC::RegExpMatchesArray::getOwnPropertySlot):
        (JSC::RegExpMatchesArray::put):
        (JSC::RegExpMatchesArray::deleteProperty):
        (JSC::RegExpMatchesArray::getPropertyNames):
        * kjs/StructureID.cpp:
        (JSC::StructureID::StructureID):
        (JSC::StructureID::addPropertyTransition):
        (JSC::StructureID::toDictionaryTransition):
        (JSC::StructureID::changePrototypeTransition):
        (JSC::StructureID::getterSetterTransition):
        * kjs/StructureID.h:
        (JSC::StructureID::create):
        (JSC::StructureID::typeInfo):
        * kjs/TypeInfo.h: Added.
        (JSC::TypeInfo::TypeInfo):
        (JSC::TypeInfo::type):

2008-09-21  Darin Adler  <darin@apple.com>

        Reviewed by Cameron Zwarich.

        - fix crash logging into Gmail due to recent Arguments change

        * kjs/Arguments.cpp:
        (JSC::Arguments::Arguments): Fix window where mark() function could
        see d->extraArguments with uninitialized contents.
        (JSC::Arguments::mark): Check d->extraArguments for 0 to handle two
        cases: 1) Inside the constructor before it's initialized.
        2) numArguments <= numParameters.

2008-09-21  Darin Adler  <darin@apple.com>

        - fix loose end from the "duplicate constant values" patch

        * VM/CodeGenerator.cpp:
        (JSC::CodeGenerator::emitLoad): Add a special case for values the
        hash table can't handle.

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

        Fix the non-AllInOneFile build.

        * kjs/Arguments.cpp: Add missing #include.

2008-09-21  Darin Adler  <darin@apple.com>

        Reviewed by Cameron Zwarich and Mark Rowe.

        - fix test failure caused by my recent IndexToNameMap patch

        * kjs/Arguments.cpp:
        (JSC::Arguments::deleteProperty): Added the accidentally-omitted
        check of the boolean result from toArrayIndex.

2008-09-21  Darin Adler  <darin@apple.com>

        Reviewed by Maciej Stachowiak.

        - https://bugs.webkit.org/show_bug.cgi?id=20975
          inline immediate-number case of ==

        * VM/CTI.h: Renamed emitJumpSlowCaseIfNotImm to
        emitJumpSlowCaseIfNotImmNum, since the old name was incorrect.

        * VM/CTI.cpp: Updated for new name.
        (JSC::CTI::privateCompileMainPass): Added op_eq.
        (JSC::CTI::privateCompileSlowCases): Added op_eq.

        * VM/Machine.cpp:
        (JSC::Machine::cti_op_eq): Removed fast case, since it's now
        compiled.

2008-09-21  Peter Gal  <galpter@inf.u-szeged.hu>

        Reviewed by Tim Hatcher and Eric Seidel.

        Fix the QT/Linux JavaScriptCore segmentation fault.
        https://bugs.webkit.org/show_bug.cgi?id=20914

        * wtf/ThreadingQt.cpp:
        (WTF::initializeThreading): Use currentThread() if
        platform is not a MAC (like in pre 36541 revisions)

2008-09-21  Darin Adler  <darin@apple.com>

        Reviewed by Sam Weinig.

        * kjs/debugger.h: Removed some unneeded includes and declarations.

2008-09-21  Darin Adler  <darin@apple.com>

        Reviewed by Sam Weinig.

        - https://bugs.webkit.org/show_bug.cgi?id=20972
          speed up Arguments further by eliminating the IndexToNameMap

        No change on SunSpider. 1.29x as fast on V8 Raytrace.

        * kjs/Arguments.cpp: Moved ArgumentsData in here. Eliminated the
        indexToNameMap and hadDeletes data members. Changed extraArguments into
        an OwnArrayPtr and added deletedArguments, another OwnArrayPtr.
        Replaced numExtraArguments with numParameters, since that's what's
        used more directly in hot code paths.
        (JSC::Arguments::Arguments): Pass in argument count instead of ArgList.
        Initialize ArgumentsData the new way.
        (JSC::Arguments::mark): Updated.
        (JSC::Arguments::getOwnPropertySlot): Overload for the integer form so
        we don't have to convert integers to identifiers just to get an argument.
        Integrated the deleted case with the fast case.
        (JSC::Arguments::put): Ditto.
        (JSC::Arguments::deleteProperty): Ditto.

        * kjs/Arguments.h: Minimized includes. Made everything private. Added
        overloads for the integral property name case. Eliminated mappedIndexSetter.
        Moved ArgumentsData into the .cpp file.

        * kjs/IndexToNameMap.cpp: Emptied out and prepared for deletion.
        * kjs/IndexToNameMap.h: Ditto.

        * kjs/JSActivation.cpp:
        (JSC::JSActivation::createArgumentsObject): Elminated ArgList.

        * GNUmakefile.am:
        * JavaScriptCore.pri:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * JavaScriptCoreSources.bkl:
        * kjs/AllInOneFile.cpp:
        Removed IndexToNameMap.

2008-09-21  Darin Adler  <darin@apple.com>

        * VM/CodeGenerator.cpp:
        (JSC::CodeGenerator::emitLoad): One more tweak: Wrote this in a slightly
        clearer style.

2008-09-21  Judit Jasz  <jasy@inf.u-szeged.hu>

        Reviewed and tweaked by Darin Adler.

        - https://bugs.webkit.org/show_bug.cgi?id=20645
          Elminate duplicate constant values in CodeBlocks.

        Seems to be a wash on SunSpider.

        * VM/CodeGenerator.cpp:
        (JSC::CodeGenerator::emitLoad): Use m_numberMap and m_stringMap to guarantee
        we emit the same JSValue* for identical numbers and strings.
        * VM/CodeGenerator.h: Added overload of emitLoad for const Identifier&.
        Add NumberMap and IdentifierStringMap types and m_numberMap and m_stringMap.
        * kjs/nodes.cpp:
        (JSC::StringNode::emitCode): Call the new emitLoad and let it do the
        JSString creation.

2008-09-21  Paul Pedriana  <webkit@pedriana.com>

        Reviewed and tweaked by Darin Adler.

        - https://bugs.webkit.org/show_bug.cgi?id=16925
          Fixed lack of Vector buffer alignment for both GCC and MSVC.
          Since there's no portable way to do this, for now we don't support
          other compilers.

        * wtf/Vector.h: Added WTF_ALIGH_ON, WTF_ALIGNED, AlignedBufferChar, and AlignedBuffer.
        Use AlignedBuffer insteadof an array of char in VectorBuffer.

2008-09-21  Gabor Loki  <loki@inf.u-szeged.hu>

        Reviewed by Darin Adler.

        - https://bugs.webkit.org/show_bug.cgi?id=19408
          Add lightweight constant folding to the parser for *, /, + (only for numbers), <<, >>, ~ operators.

        1.008x as fast on SunSpider.

        * kjs/grammar.y:
        (makeNegateNode): Fold if expression is a number > 0.
        (makeBitwiseNotNode): Fold if expression is a number.
        (makeMultNode): Fold if expressions are both numbers.
        (makeDivNode): Fold if expressions are both numbers.
        (makeAddNode): Fold if expressions are both numbers.
        (makeLeftShiftNode): Fold if expressions are both numbers.
        (makeRightShiftNode): Fold if expressions are both numbers.

2008-09-21  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Oliver.
        
        - speed up === operator by generating inline machine code for the fast paths
        https://bugs.webkit.org/show_bug.cgi?id=20820

        * VM/CTI.cpp:
        (JSC::CTI::emitJumpSlowCaseIfNotImmediateNumber):
        (JSC::CTI::emitJumpSlowCaseIfNotImmediateNumbers):
        (JSC::CTI::emitJumpSlowCaseIfNotImmediates):
        (JSC::CTI::emitTagAsBoolImmediate):
        (JSC::CTI::privateCompileMainPass):
        (JSC::CTI::privateCompileSlowCases):
        * VM/CTI.h:
        * VM/Machine.cpp:
        (JSC::Machine::cti_op_stricteq):
        * masm/X86Assembler.h:
        (JSC::X86Assembler::):
        (JSC::X86Assembler::sete_r):
        (JSC::X86Assembler::setz_r):
        (JSC::X86Assembler::movzbl_rr):
        (JSC::X86Assembler::emitUnlinkedJnz):

2008-09-21  Cameron Zwarich  <cwzwarich@uwaterloo.ca>

        Reviewed by Maciej Stachowiak.

        Free memory allocated for extra arguments in the destructor of the
        Arguments object.

        * kjs/Arguments.cpp:
        (JSC::Arguments::~Arguments):
        * kjs/Arguments.h:

2008-09-21  Cameron Zwarich  <cwzwarich@uwaterloo.ca>

        Reviewed by Maciej Stachowiak.

        Bug 20815: 'arguments' object creation is non-optimal
        <https://bugs.webkit.org/show_bug.cgi?id=20815>

        Fix our inefficient way of creating the arguments object by only
        creating named properties for each of the arguments after a use of the
        'delete' statement. This patch also speeds up access to the 'arguments'
        object slightly, but it still does not use the array fast path for
        indexed access that exists for many opcodes.

        This is about a 20% improvement on the V8 Raytrace benchmark, and a 1.5%
        improvement on the Earley-Boyer benchmark, which gives a 4% improvement
        overall.

        * kjs/Arguments.cpp:
        (JSC::Arguments::Arguments):
        (JSC::Arguments::mark):
        (JSC::Arguments::getOwnPropertySlot):
        (JSC::Arguments::put):
        (JSC::Arguments::deleteProperty):
        * kjs/Arguments.h:
        (JSC::Arguments::ArgumentsData::ArgumentsData):
        * kjs/IndexToNameMap.h:
        (JSC::IndexToNameMap::size):
        * kjs/JSActivation.cpp:
        (JSC::JSActivation::createArgumentsObject):
        * kjs/JSActivation.h:
        (JSC::JSActivation::uncheckedSymbolTableGet):
        (JSC::JSActivation::uncheckedSymbolTableGetValue):
        (JSC::JSActivation::uncheckedSymbolTablePut):
        * kjs/JSFunction.h:
        (JSC::JSFunction::numParameters):

2008-09-20  Darin Adler  <darin@apple.com>

        Reviewed by Mark Rowe.

        - fix crash seen on buildbot

        * kjs/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::mark): Add back mark of arrayPrototype,
        deleted by accident in my recent check-in.

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

        Not reviewed, build fix.
        
        - speculative fix for non-AllInOne builds

        * kjs/operations.h:

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

        Reviewed by Darin Adler.
        
        - assorted optimizations to === and !== operators
        (work towards <https://bugs.webkit.org/show_bug.cgi?id=20820>)
        
        2.5% speedup on earley-boyer test

        * VM/Machine.cpp:
        (JSC::Machine::cti_op_stricteq): Use inline version of
        strictEqualSlowCase; remove unneeded exception check.
        (JSC::Machine::cti_op_nstricteq): ditto
        * kjs/operations.cpp:
        (JSC::strictEqual): Use strictEqualSlowCaseInline
        (JSC::strictEqualSlowCase): ditto
        * kjs/operations.h:
        (JSC::strictEqualSlowCaseInline): Version of strictEqualSlowCase that can be inlined,
        since the extra function call indirection is a lose for CTI.

2008-09-20  Darin Adler  <darin@apple.com>

        Reviewed by Maciej Stachowiak.

        - finish https://bugs.webkit.org/show_bug.cgi?id=20858
          make each distinct C++ class get a distinct JSC::Structure

        This also includes some optimizations that make the change an overall
        small speedup. Without those it was a bit of a slowdown.

        * API/JSCallbackConstructor.cpp:
        (JSC::JSCallbackConstructor::JSCallbackConstructor): Take a structure.
        * API/JSCallbackConstructor.h: Ditto.
        * API/JSCallbackFunction.cpp:
        (JSC::JSCallbackFunction::JSCallbackFunction): Pass a structure.
        * API/JSCallbackObject.h: Take a structure.
        * API/JSCallbackObjectFunctions.h:
        (JSC::JSCallbackObject::JSCallbackObject): Ditto.

        * API/JSClassRef.cpp:
        (OpaqueJSClass::prototype): Pass in a structure. Call setPrototype
        if there's a custom prototype involved.
        * API/JSObjectRef.cpp:
        (JSObjectMake): Ditto.
        (JSObjectMakeConstructor): Pass in a structure.

        * JavaScriptCore.exp: Updated.

        * VM/Machine.cpp:
        (JSC::jsLess): Added a special case for when both arguments are strings.
        This avoids converting both strings to with UString::toDouble.
        (JSC::jsLessEq): Ditto.
        (JSC::Machine::privateExecute): Pass in a structure.
        (JSC::Machine::cti_op_construct_JSConstruct): Ditto.
        (JSC::Machine::cti_op_new_regexp): Ditto.
        (JSC::Machine::cti_op_is_string): Ditto.
        * VM/Machine.h: Made isJSString public so it can be used in the CTI.

        * kjs/Arguments.cpp:
        (JSC::Arguments::Arguments): Pass in a structure.

        * kjs/JSCell.h: Mark constructor explicit.

        * kjs/JSGlobalObject.cpp:
        (JSC::markIfNeeded): Added an overload for marking structures.
        (JSC::JSGlobalObject::reset): Eliminate code to set data members to
        zero. We now do that in the constructor, and we no longer use this
        anywhere except in the constructor. Added code to create structures.
        Pass structures rather than prototypes when creating objects.
        (JSC::JSGlobalObject::mark): Mark the structures.

        * kjs/JSGlobalObject.h: Removed unneeded class declarations.
        Added initializers for raw pointers in JSGlobalObjectData so
        everything starts with a 0. Added structure data and accessor
        functions.

        * kjs/JSImmediate.cpp:
        (JSC::JSImmediate::nonInlineNaN): Added.
        * kjs/JSImmediate.h:
        (JSC::JSImmediate::toDouble): Rewrote to avoid PIC branches.

        * kjs/JSNumberCell.cpp:
        (JSC::jsNumberCell): Made non-inline to avoid PIC branches
        in functions that call this one.
        (JSC::jsNaN): Ditto.
        * kjs/JSNumberCell.h: Ditto.

        * kjs/JSObject.h: Removed constructor that takes a prototype.
        All callers now pass structures.

        * kjs/ArrayConstructor.cpp:
        (JSC::ArrayConstructor::ArrayConstructor):
        (JSC::constructArrayWithSizeQuirk):
        * kjs/ArrayConstructor.h:
        * kjs/ArrayPrototype.cpp:
        (JSC::ArrayPrototype::ArrayPrototype):
        * kjs/ArrayPrototype.h:
        * kjs/BooleanConstructor.cpp:
        (JSC::BooleanConstructor::BooleanConstructor):
        (JSC::constructBoolean):
        (JSC::constructBooleanFromImmediateBoolean):
        * kjs/BooleanConstructor.h:
        * kjs/BooleanObject.cpp:
        (JSC::BooleanObject::BooleanObject):
        * kjs/BooleanObject.h:
        * kjs/BooleanPrototype.cpp:
        (JSC::BooleanPrototype::BooleanPrototype):
        * kjs/BooleanPrototype.h:
        * kjs/DateConstructor.cpp:
        (JSC::DateConstructor::DateConstructor):
        (JSC::constructDate):
        * kjs/DateConstructor.h:
        * kjs/DateInstance.cpp:
        (JSC::DateInstance::DateInstance):
        * kjs/DateInstance.h:
        * kjs/DatePrototype.cpp:
        (JSC::DatePrototype::DatePrototype):
        * kjs/DatePrototype.h:
        * kjs/ErrorConstructor.cpp:
        (JSC::ErrorConstructor::ErrorConstructor):
        (JSC::constructError):
        * kjs/ErrorConstructor.h:
        * kjs/ErrorInstance.cpp:
        (JSC::ErrorInstance::ErrorInstance):
        * kjs/ErrorInstance.h:
        * kjs/ErrorPrototype.cpp:
        (JSC::ErrorPrototype::ErrorPrototype):
        * kjs/ErrorPrototype.h:
        * kjs/FunctionConstructor.cpp:
        (JSC::FunctionConstructor::FunctionConstructor):
        * kjs/FunctionConstructor.h:
        * kjs/FunctionPrototype.cpp:
        (JSC::FunctionPrototype::FunctionPrototype):
        (JSC::FunctionPrototype::addFunctionProperties):
        * kjs/FunctionPrototype.h:
        * kjs/GlobalEvalFunction.cpp:
        (JSC::GlobalEvalFunction::GlobalEvalFunction):
        * kjs/GlobalEvalFunction.h:
        * kjs/InternalFunction.cpp:
        (JSC::InternalFunction::InternalFunction):
        * kjs/InternalFunction.h:
        (JSC::InternalFunction::InternalFunction):
        * kjs/JSArray.cpp:
        (JSC::JSArray::JSArray):
        (JSC::constructEmptyArray):
        (JSC::constructArray):
        * kjs/JSArray.h:
        * kjs/JSFunction.cpp:
        (JSC::JSFunction::JSFunction):
        (JSC::JSFunction::construct):
        * kjs/JSObject.cpp:
        (JSC::constructEmptyObject):
        * kjs/JSString.cpp:
        (JSC::StringObject::create):
        * kjs/JSWrapperObject.h:
        * kjs/MathObject.cpp:
        (JSC::MathObject::MathObject):
        * kjs/MathObject.h:
        * kjs/NativeErrorConstructor.cpp:
        (JSC::NativeErrorConstructor::NativeErrorConstructor):
        (JSC::NativeErrorConstructor::construct):
        * kjs/NativeErrorConstructor.h:
        * kjs/NativeErrorPrototype.cpp:
        (JSC::NativeErrorPrototype::NativeErrorPrototype):
        * kjs/NativeErrorPrototype.h:
        * kjs/NumberConstructor.cpp:
        (JSC::NumberConstructor::NumberConstructor):
        (JSC::constructWithNumberConstructor):
        * kjs/NumberConstructor.h:
        * kjs/NumberObject.cpp:
        (JSC::NumberObject::NumberObject):
        (JSC::constructNumber):
        (JSC::constructNumberFromImmediateNumber):
        * kjs/NumberObject.h:
        * kjs/NumberPrototype.cpp:
        (JSC::NumberPrototype::NumberPrototype):
        * kjs/NumberPrototype.h:
        * kjs/ObjectConstructor.cpp:
        (JSC::ObjectConstructor::ObjectConstructor):
        (JSC::constructObject):
        * kjs/ObjectConstructor.h:
        * kjs/ObjectPrototype.cpp:
        (JSC::ObjectPrototype::ObjectPrototype):
        * kjs/ObjectPrototype.h:
        * kjs/PrototypeFunction.cpp:
        (JSC::PrototypeFunction::PrototypeFunction):
        * kjs/PrototypeFunction.h:
        * kjs/RegExpConstructor.cpp:
        (JSC::RegExpConstructor::RegExpConstructor):
        (JSC::RegExpMatchesArray::RegExpMatchesArray):
        (JSC::constructRegExp):
        * kjs/RegExpConstructor.h:
        * kjs/RegExpObject.cpp:
        (JSC::RegExpObject::RegExpObject):
        * kjs/RegExpObject.h:
        * kjs/RegExpPrototype.cpp:
        (JSC::RegExpPrototype::RegExpPrototype):
        * kjs/RegExpPrototype.h:
        * kjs/Shell.cpp:
        (GlobalObject::GlobalObject):
        * kjs/StringConstructor.cpp:
        (JSC::StringConstructor::StringConstructor):
        (JSC::constructWithStringConstructor):
        * kjs/StringConstructor.h:
        * kjs/StringObject.cpp:
        (JSC::StringObject::StringObject):
        * kjs/StringObject.h:
        * kjs/StringObjectThatMasqueradesAsUndefined.h:
        (JSC::StringObjectThatMasqueradesAsUndefined::StringObjectThatMasqueradesAsUndefined):
        * kjs/StringPrototype.cpp:
        (JSC::StringPrototype::StringPrototype):
        * kjs/StringPrototype.h:
        Take and pass structures.

2008-09-19  Alp Toker  <alp@nuanti.com>

        Build fix for the 'gold' linker and recent binutils. New behaviour
        requires that we link to used libraries explicitly.

        * GNUmakefile.am:

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

        Roll r36694 back in.  It did not cause the crash.

        * JavaScriptCore.exp:
        * VM/JSPropertyNameIterator.cpp:
        (JSC::JSPropertyNameIterator::~JSPropertyNameIterator):
        (JSC::JSPropertyNameIterator::invalidate):
        * VM/JSPropertyNameIterator.h:
        (JSC::JSPropertyNameIterator::JSPropertyNameIterator):
        (JSC::JSPropertyNameIterator::create):
        * kjs/JSObject.cpp:
        (JSC::JSObject::getPropertyNames):
        * kjs/PropertyMap.cpp:
        (JSC::PropertyMap::getEnumerablePropertyNames):
        * kjs/PropertyMap.h:
        * kjs/PropertyNameArray.cpp:
        (JSC::PropertyNameArray::add):
        * kjs/PropertyNameArray.h:
        (JSC::PropertyNameArrayData::create):
        (JSC::PropertyNameArrayData::propertyNameVector):
        (JSC::PropertyNameArrayData::setCachedPrototypeChain):
        (JSC::PropertyNameArrayData::cachedPrototypeChain):
        (JSC::PropertyNameArrayData::begin):
        (JSC::PropertyNameArrayData::end):
        (JSC::PropertyNameArrayData::PropertyNameArrayData):
        (JSC::PropertyNameArray::PropertyNameArray):
        (JSC::PropertyNameArray::addKnownUnique):
        (JSC::PropertyNameArray::size):
        (JSC::PropertyNameArray::operator[]):
        (JSC::PropertyNameArray::begin):
        (JSC::PropertyNameArray::end):
        (JSC::PropertyNameArray::setData):
        (JSC::PropertyNameArray::data):
        (JSC::PropertyNameArray::releaseData):
        * kjs/StructureID.cpp:
        (JSC::structureIDChainsAreEqual):
        (JSC::StructureID::getEnumerablePropertyNames):
        (JSC::StructureID::clearEnumerationCache):
        (JSC::StructureID::createCachedPrototypeChain):
        * kjs/StructureID.h:

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

        Roll out r36694.

        * JavaScriptCore.exp:
        * VM/JSPropertyNameIterator.cpp:
        (JSC::JSPropertyNameIterator::~JSPropertyNameIterator):
        (JSC::JSPropertyNameIterator::invalidate):
        * VM/JSPropertyNameIterator.h:
        (JSC::JSPropertyNameIterator::JSPropertyNameIterator):
        (JSC::JSPropertyNameIterator::create):
        * kjs/JSObject.cpp:
        (JSC::JSObject::getPropertyNames):
        * kjs/PropertyMap.cpp:
        (JSC::PropertyMap::getEnumerablePropertyNames):
        * kjs/PropertyMap.h:
        * kjs/PropertyNameArray.cpp:
        (JSC::PropertyNameArray::add):
        * kjs/PropertyNameArray.h:
        (JSC::PropertyNameArray::PropertyNameArray):
        (JSC::PropertyNameArray::addKnownUnique):
        (JSC::PropertyNameArray::begin):
        (JSC::PropertyNameArray::end):
        (JSC::PropertyNameArray::size):
        (JSC::PropertyNameArray::operator[]):
        (JSC::PropertyNameArray::releaseIdentifiers):
        * kjs/StructureID.cpp:
        (JSC::StructureID::getEnumerablePropertyNames):
        * kjs/StructureID.h:
        (JSC::StructureID::clearEnumerationCache):

2008-09-19  Oliver Hunt  <oliver@apple.com>

        Reviewed by Maciej Stachowiak.

        Improve peformance of local variable initialisation.

        Pull local and constant initialisation out of slideRegisterWindowForCall
        and into its own opcode.  This allows the JIT to generate the initialisation
        code for a function directly into the instruction stream and so avoids a few
        branches on function entry.

        Results a 1% progression in SunSpider, particularly in a number of the bitop
        tests where the called functions are very fast. 

        * VM/CTI.cpp:
        (JSC::CTI::emitInitialiseRegister):
        (JSC::CTI::privateCompileMainPass):
        * VM/CTI.h:
        * VM/CodeBlock.cpp:
        (JSC::CodeBlock::dump):
        * VM/CodeGenerator.cpp:
        (JSC::CodeGenerator::CodeGenerator):
        * VM/Machine.cpp:
        (JSC::slideRegisterWindowForCall):
        (JSC::Machine::privateExecute):
        * VM/Opcode.h:

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

        Reviewed by Darin Adler.

        Patch for https://bugs.webkit.org/show_bug.cgi?id=20928
        Speed up JS property enumeration by caching entire PropertyNameArray

        1.3% speedup on Sunspider, 30% on string-fasta.

        * JavaScriptCore.exp:
        * VM/JSPropertyNameIterator.cpp:
        (JSC::JSPropertyNameIterator::~JSPropertyNameIterator):
        (JSC::JSPropertyNameIterator::invalidate):
        * VM/JSPropertyNameIterator.h:
        (JSC::JSPropertyNameIterator::JSPropertyNameIterator):
        (JSC::JSPropertyNameIterator::create):
        * kjs/JSObject.cpp:
        (JSC::JSObject::getPropertyNames):
        * kjs/PropertyMap.cpp:
        (JSC::PropertyMap::getEnumerablePropertyNames):
        * kjs/PropertyMap.h:
        * kjs/PropertyNameArray.cpp:
        (JSC::PropertyNameArray::add):
        * kjs/PropertyNameArray.h:
        (JSC::PropertyNameArrayData::create):
        (JSC::PropertyNameArrayData::propertyNameVector):
        (JSC::PropertyNameArrayData::setCachedPrototypeChain):
        (JSC::PropertyNameArrayData::cachedPrototypeChain):
        (JSC::PropertyNameArrayData::begin):
        (JSC::PropertyNameArrayData::end):
        (JSC::PropertyNameArrayData::PropertyNameArrayData):
        (JSC::PropertyNameArray::PropertyNameArray):
        (JSC::PropertyNameArray::addKnownUnique):
        (JSC::PropertyNameArray::size):
        (JSC::PropertyNameArray::operator[]):
        (JSC::PropertyNameArray::begin):
        (JSC::PropertyNameArray::end):
        (JSC::PropertyNameArray::setData):
        (JSC::PropertyNameArray::data):
        (JSC::PropertyNameArray::releaseData):
        * kjs/ScopeChain.cpp:
        (JSC::ScopeChainNode::print):
        * kjs/StructureID.cpp:
        (JSC::structureIDChainsAreEqual):
        (JSC::StructureID::getEnumerablePropertyNames):
        (JSC::StructureID::clearEnumerationCache):
        (JSC::StructureID::createCachedPrototypeChain):
        * kjs/StructureID.h:

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

        Reviewed by Maciej Stachowiak.

        Fix a mismatched new[]/delete in JSObject::allocatePropertyStorage

        * kjs/JSObject.cpp:
        (JSC::JSObject::allocatePropertyStorage): Spotted by valgrind.

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

        Reviewed by Sam Weinig.

        - part 2 of https://bugs.webkit.org/show_bug.cgi?id=20858
          make each distinct C++ class get a distinct JSC::Structure

        * JavaScriptCore.exp: Exported constructEmptyObject for use in WebCore.

        * kjs/JSGlobalObject.h: Changed the protected constructor to take a
        structure instead of a prototype.

        * kjs/JSVariableObject.h: Removed constructor that takes a prototype.

2008-09-19  Julien Chaffraix  <jchaffraix@pleyo.com>

        Reviewed by Alexey Proskuryakov.

        Use the template hoisting technique on the RefCounted class. This reduces the code bloat due to
        non-template methods' code been copied for each instance of the template.
        The patch splits RefCounted between a base class that holds non-template methods and attributes
        and the template RefCounted class that keeps the same functionnality.

        On my Linux with gcc 4.3 for the Gtk port, this is:
        - a ~600KB save on libwebkit.so in release.
        - a ~1.6MB save on libwebkit.so in debug.

        It is a wash on Sunspider and a small win on Dromaeo (not sure it is relevant).
        On the whole, it should be a small win as we reduce the compiled code size and the only
        new function call should be inlined by the compiler.

        * wtf/RefCounted.h:
        (WTF::RefCountedBase::ref): Copied from RefCounted.
        (WTF::RefCountedBase::hasOneRef): Ditto.
        (WTF::RefCountedBase::refCount): Ditto.
        (WTF::RefCountedBase::RefCountedBase): Ditto.
        (WTF::RefCountedBase::~RefCountedBase): Ditto.
        (WTF::RefCountedBase::derefBase): Tweaked from the RefCounted version to remove
        template section.
        (WTF::RefCounted::RefCounted):
        (WTF::RefCounted::deref): Small wrapper around RefCountedBase::derefBase().
        (WTF::RefCounted::~RefCounted): Keep private destructor.

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

        Reviewed by Maciej Stachowiak.

        - part 1 of https://bugs.webkit.org/show_bug.cgi?id=20858
          make each distinct C++ class get a distinct JSC::Structure

        * kjs/lookup.h: Removed things here that were used only in WebCore:
        cacheGlobalObject, JSC_DEFINE_PROTOTYPE, JSC_DEFINE_PROTOTYPE_WITH_PROTOTYPE,
        and JSC_IMPLEMENT_PROTOTYPE.

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

        Reviewed by Maciej Stachowiak.

        - https://bugs.webkit.org/show_bug.cgi?id=20927
          simplify/streamline the code to turn strings into identifiers while parsing

        * kjs/grammar.y: Get rid of string from the union, and use ident for STRING as
        well as for IDENT.

        * kjs/lexer.cpp:
        (JSC::Lexer::lex): Use makeIdentifier instead of makeUString for String.
        * kjs/lexer.h: Remove makeUString.

        * kjs/nodes.h: Changed StringNode to hold an Identifier instead of UString.

        * VM/CodeGenerator.cpp:
        (JSC::keyForCharacterSwitch): Updated since StringNode now holds an Identifier.
        (JSC::prepareJumpTableForStringSwitch): Ditto.
        * kjs/nodes.cpp:
        (JSC::StringNode::emitCode): Ditto. The comment from here is now in the lexer.
        (JSC::processClauseList): Ditto.
        * kjs/nodes2string.cpp:
        (JSC::StringNode::streamTo): Ditto.

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

        Fix style.

        * VM/Instruction.h:
        (JSC::Instruction::Instruction):

2008-09-18  Oliver Hunt  <oliver@apple.com>

        Reviewed by Maciej Stachowiak.

        Bug 20911: REGRESSION(r36480?): Reproducible assertion failure below derefStructureIDs 64-bit JavaScriptCore
        <https://bugs.webkit.org/show_bug.cgi?id=20911>

        The problem was simply caused by the int constructor for Instruction
        failing to initialise the full struct in 64bit builds.

        * VM/Instruction.h:
        (JSC::Instruction::Instruction):

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

        - fix release build

        * wtf/RefCountedLeakCounter.cpp: Removed stray "static".

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

        Reviewed by Sam Weinig.

        * kjs/JSGlobalObject.h: Tiny style guideline tweak.

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

        Reviewed by Sam Weinig.

        - fix https://bugs.webkit.org/show_bug.cgi?id=20925
          LEAK messages appear every time I quit

        * JavaScriptCore.exp: Updated, and also added an export
        needed for future WebCore use of JSC::StructureID.

        * wtf/RefCountedLeakCounter.cpp:
        (WTF::RefCountedLeakCounter::suppressMessages): Added.
        (WTF::RefCountedLeakCounter::cancelMessageSuppression): Added.
        (WTF::RefCountedLeakCounter::RefCountedLeakCounter): Tweaked a bit.
        (WTF::RefCountedLeakCounter::~RefCountedLeakCounter): Added code to
        log the reason there was no leak checking done.
        (WTF::RefCountedLeakCounter::increment): Tweaked a bit.
        (WTF::RefCountedLeakCounter::decrement): Ditto.

        * wtf/RefCountedLeakCounter.h: Replaced setLogLeakMessages with two
        new functions, suppressMessages and cancelMessageSuppression. Also
        added m_ prefixes to the data member names.

2008-09-18  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Mark Rowe.

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

        Add a proper #define to define which XML Parser implementation to use. Client
        code can use #if USE(QXMLSTREAM) to decide if the Qt XML StreamReader
        implementation is going to be used.

        * wtf/Platform.h:

2008-09-18  Cameron Zwarich  <cwzwarich@uwaterloo.ca>

        Reviewed by Maciej Stachowiak.

        Make a Unicode non-breaking space count as a whitespace character in
        PCRE. This change was already made in WREC, and it fixes one of the
        Mozilla JS tests. Since it is now fixed in PCRE as well, we can check
        in a new set of expected test results.

        * pcre/pcre_internal.h:
        (isSpaceChar):
        * tests/mozilla/expected.html:

2008-09-18  Stephanie Lewis  <slewis@apple.com>

        Reviewed by Mark Rowe and Maciej Stachowiak.

        add an option use arch to specify which architecture to run.

        * tests/mozilla/jsDriver.pl:

2008-09-17  Oliver Hunt  <oliver@apple.com>

        Correctly restore argument reference prior to SFX runtime calls.
        
        Reviewed by Steve Falkenburg.

        * VM/CTI.cpp:
        (JSC::CTI::privateCompileSlowCases):
        (JSC::CTI::privateCompile):

2008-09-17  Cameron Zwarich  <cwzwarich@uwaterloo.ca>

        Reviewed by Maciej Stachowiak.

        Bug 20876: REGRESSION (r36417, r36427): fast/js/exception-expression-offset.html fails
        <https://bugs.webkit.org/show_bug.cgi?id=20876>

        r36417 and r36427 caused an get_by_id opcode to be emitted before the
        instanceof and construct opcodes, in order to enable inline caching of
        the prototype property. Unfortunately, this regressed some tests dealing
        with exceptions thrown by 'instanceof' and the 'new' operator. We fix
        these problems by detecting whether an "is not an object" exception is
        thrown before op_instanceof or op_construct, and emit the proper
        exception in those cases.

        * VM/CodeGenerator.cpp:
        (JSC::CodeGenerator::emitConstruct):
        * VM/CodeGenerator.h:
        * VM/ExceptionHelpers.cpp:
        (JSC::createInvalidParamError):
        (JSC::createNotAConstructorError):
        (JSC::createNotAnObjectError):
        * VM/ExceptionHelpers.h:
        * VM/Machine.cpp:
        (JSC::Machine::getOpcode):
        (JSC::Machine::privateExecute):
        * VM/Machine.h:
        * kjs/nodes.cpp:
        (JSC::NewExprNode::emitCode):
        (JSC::InstanceOfNode::emitCode):

2008-09-17  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Oliver Hunt.

        JIT generation cti_op_construct_verify.
        
        Quarter to half percent progression on v8-tests.
        Roughly not change on SunSpider (possible minor progression).

        * VM/CTI.cpp:
        (JSC::CTI::privateCompileMainPass):
        * VM/Machine.cpp:
        * VM/Machine.h:

2008-09-15  Steve Falkenburg  <sfalken@apple.com>

        Improve timer accuracy for JavaScript Date object on Windows.
        
        Use a combination of ftime and QueryPerformanceCounter.
        ftime returns the information we want, but doesn't have sufficient resolution.
        QueryPerformanceCounter has high resolution, but is only usable to measure time intervals.
        To combine them, we call ftime and QueryPerformanceCounter initially. Later calls will use
        QueryPerformanceCounter by itself, adding the delta to the saved ftime.  We re-sync to
        correct for drift if the low-res and high-res elapsed time between calls differs by more
        than twice the low-resolution timer resolution.
        
        QueryPerformanceCounter may be inaccurate due to a problems with:
        - some PCI bridge chipsets (http://support.microsoft.com/kb/274323)
        - BIOS bugs (http://support.microsoft.com/kb/895980/)
        - BIOS/HAL bugs on multiprocessor/multicore systems (http://msdn.microsoft.com/en-us/library/ms644904.aspx)
        
        Reviewed by Darin Adler.

        * kjs/DateMath.cpp:
        (JSC::highResUpTime):
        (JSC::lowResUTCTime):
        (JSC::qpcAvailable):
        (JSC::getCurrentUTCTimeWithMicroseconds):

2008-09-17  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Geoff Garen.

        Implement JIT generation of CallFrame initialization, for op_call.

        1% sunspider 2.5% v8-tests.

        * VM/CTI.cpp:
        (JSC::CTI::compileOpCall):
        * VM/Machine.cpp:
        (JSC::Machine::cti_op_call_JSFunction):
        (JSC::Machine::cti_op_call_NotJSFunction):

2008-09-17  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Geoff Garen.

        Optimizations for op_call in CTI.  Move check for (ctiCode == 0) into JIT code,
        move copying of scopeChain for CodeBlocks that needFullScopeChain into head of
        functions, instead of checking prior to making the call.

        3% on v8-tests (4% on richards, 6% in delta-blue)

        * VM/CTI.cpp:
        (JSC::CTI::compileOpCall):
        (JSC::CTI::privateCompileSlowCases):
        (JSC::CTI::privateCompile):
        * VM/Machine.cpp:
        (JSC::Machine::execute):
        (JSC::Machine::cti_op_call_JSFunction):
        (JSC::Machine::cti_vm_compile):
        (JSC::Machine::cti_vm_updateScopeChain):
        (JSC::Machine::cti_op_construct_JSConstruct):
        * VM/Machine.h:

2008-09-17  Tor Arne Vestbø  <tavestbo@trolltech.com>

        Fix the QtWebKit/Mac build

        * wtf/ThreadingQt.cpp:
        (WTF::initializeThreading): use QCoreApplication to get the main thread

2008-09-16  Cameron Zwarich  <cwzwarich@uwaterloo.ca>

        Reviewed by Maciej Stachowiak.

        Bug 20857: REGRESSION (r36427): ASSERTION FAILED: m_refCount >= 0 in RegisterID::deref()
        <https://bugs.webkit.org/show_bug.cgi?id=20857>

        Fix a problem stemming from the slightly unsafe behaviour of the
        CodeGenerator::finalDestination() method by putting the "func" argument
        of the emitConstruct() method in a RefPtr in its caller. Also, add an
        assertion guaranteeing that this is always the case.

        CodeGenerator::finalDestination() is still incorrect and can cause
        problems with a different allocator; see bug 20340 for more details.

        * VM/CodeGenerator.cpp:
        (JSC::CodeGenerator::emitConstruct):
        * kjs/nodes.cpp:
        (JSC::NewExprNode::emitCode):

2008-09-16  Alice Liu  <alice.liu@apple.com>

        build fix.

        * VM/CTI.cpp:
        (JSC::CTI::privateCompileMainPass):

2008-09-16  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Geoff Garen.

        CTI code generation for op_ret.  The majority of the work
        (updating variables on the stack & on exec) can be performed
        directly in generated code.

        We still need to check, & to call out to C-code to handle
        activation records, profiling, and full scope chains.

        +1.5% Sunspider, +5/6% v8 tests.

        * VM/CTI.cpp:
        (JSC::CTI::emitPutCTIParam):
        (JSC::CTI::compileOpCall):
        (JSC::CTI::privateCompileMainPass):
        * VM/CTI.h:
        * VM/Machine.cpp:
        (JSC::Machine::cti_op_ret_activation):
        (JSC::Machine::cti_op_ret_profiler):
        (JSC::Machine::cti_op_ret_scopeChain):
        * VM/Machine.h:

2008-09-16  Dimitri Glazkov  <dglazkov@chromium.org>

        Fix the Windows build.

        Add some extra parentheses to stop MSVC from complaining so much.

        * VM/Machine.cpp:
        (JSC::Machine::privateExecute):
        (JSC::Machine::cti_op_stricteq):
        (JSC::Machine::cti_op_nstricteq):
        * kjs/operations.cpp:
        (JSC::strictEqual):

2008-09-15  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Cameron Zwarich.
        
        - speed up the === and !== operators by choosing the fast cases better
        
        No effect on SunSpider but speeds up the V8 EarlyBoyer benchmark about 4%.

        * VM/Machine.cpp:
        (JSC::Machine::privateExecute):
        (JSC::Machine::cti_op_stricteq):
        (JSC::Machine::cti_op_nstricteq):
        * kjs/JSImmediate.h:
        (JSC::JSImmediate::areBothImmediate):
        * kjs/operations.cpp:
        (JSC::strictEqual):
        (JSC::strictEqualSlowCase):
        * kjs/operations.h:

2008-09-15  Oliver Hunt  <oliver@apple.com>

        RS=Sam Weinig.

        Coding style cleanup.

        * VM/Machine.cpp:
        (JSC::Machine::privateExecute):

2008-09-15  Oliver Hunt  <oliver@apple.com>

        Reviewed by Cameron Zwarich.

        Bug 20874: op_resolve does not do any form of caching
        <https://bugs.webkit.org/show_bug.cgi?id=20874>

        This patch adds an op_resolve_global opcode to handle (and cache)
        property lookup we can statically determine must occur on the global
        object (if at all).

        3% progression on sunspider, 3.2x improvement to bitops-bitwise-and, and
        10% in math-partial-sums

        * VM/CTI.cpp:
        (JSC::CTI::privateCompileMainPass):
        * VM/CTI.h:
        * VM/CodeBlock.cpp:
        (JSC::CodeBlock::dump):
        * VM/CodeGenerator.cpp:
        (JSC::CodeGenerator::findScopedProperty):
        (JSC::CodeGenerator::emitResolve):
        * VM/Machine.cpp:
        (JSC::resolveGlobal):
        (JSC::Machine::privateExecute):
        (JSC::Machine::cti_op_resolve_global):
        * VM/Machine.h:
        * VM/Opcode.h:

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

        Roll out r36462.  It broke document.all.

        * VM/CTI.cpp:
        (JSC::CTI::privateCompileMainPass):
        (JSC::CTI::privateCompileSlowCases):
        * VM/CTI.h:
        * VM/Machine.cpp:
        (JSC::Machine::Machine):
        (JSC::Machine::cti_op_eq_null):
        (JSC::Machine::cti_op_neq_null):
        * VM/Machine.h:
        (JSC::Machine::isJSString):
        * kjs/JSCell.h:
        * kjs/JSWrapperObject.h:
        * kjs/StringObject.h:
        * kjs/StringObjectThatMasqueradesAsUndefined.h:

2008-09-15  Cameron Zwarich  <cwzwarich@uwaterloo.ca>

        Reviewed by Maciej Stachowiak.

        Bug 20863: ASSERTION FAILED: addressOffset < instructions.size() in CodeBlock::getHandlerForVPC
        <https://bugs.webkit.org/show_bug.cgi?id=20863>

        r36427 changed the number of arguments to op_construct without changing
        the argument index for the vPC in the call to initializeCallFrame() in
        the CTI case. This caused a JSC test failure. Correcting the argument
        index fixes the test failure.

        * VM/Machine.cpp:
        (JSC::Machine::cti_op_construct_JSConstruct):

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

        Fix GCC 4.2 build.

        * VM/CTI.h:

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

        Reviewed by Maciej Stachowiak.
        
        Fixed a typo in op_get_by_id_chain that caused it to miss every time
        in the interpreter.
        
        Also, a little cleanup.

        * VM/Machine.cpp:
        (JSC::Machine::privateExecute): Set up baseObject before entering the
        loop, so we compare against the right values.

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

        Reviewed by Sam Weinig.
        
        Removed the CalledAsConstructor flag from the call frame header. Now,
        we use an explicit opcode at the call site to fix up constructor results.

        SunSpider says 0.4% faster.
        
        cti_op_construct_verify is an out-of-line function call for now, but we
        can fix that once StructureID holds type information like isObject.

        * VM/CTI.cpp:
        (JSC::CTI::privateCompileMainPass): Codegen for the new opcode.

        * VM/CodeBlock.cpp:
        (JSC::CodeBlock::dump):

        * VM/CodeGenerator.cpp: Codegen for the new opcode. Also...
        (JSC::CodeGenerator::emitCall): ... don't test for known non-zero value.
        (JSC::CodeGenerator::emitConstruct): ... ditto.

        * VM/Machine.cpp: No more CalledAsConstructor
        (JSC::Machine::privateExecute): Implementation for the new opcode.
        (JSC::Machine::cti_op_ret): The speedup: no need to check whether we were
        called as a constructor.
        (JSC::Machine::cti_op_construct_verify): Implementation for the new opcode.
        * VM/Machine.h:

        * VM/Opcode.h: Declare new opcode.

        * VM/RegisterFile.h:
        (JSC::RegisterFile::): No more CalledAsConstructor

2008-09-15  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Geoff Garen.

        Inline code generation of eq_null/neq_null for CTI.  Uses vptr checking for
        StringObjectsThatAreMasqueradingAsBeingUndefined.  In the long run, the
        masquerading may be handled differently (through the StructureIDs - see bug
        #20823).

        >1% on v8-tests.

        * VM/CTI.cpp:
        (JSC::CTI::emitJumpSlowCaseIfIsJSCell):
        (JSC::CTI::privateCompileMainPass):
        (JSC::CTI::privateCompileSlowCases):
        * VM/CTI.h:
        * VM/Machine.cpp:
        (JSC::Machine::Machine):
        (JSC::Machine::cti_op_eq_null):
        (JSC::Machine::cti_op_neq_null):
        * VM/Machine.h:
        (JSC::Machine::doesMasqueradesAsUndefined):
        * kjs/JSWrapperObject.h:
        (JSC::JSWrapperObject::):
        (JSC::JSWrapperObject::JSWrapperObject):
        * kjs/StringObject.h:
        (JSC::StringObject::StringObject):
        * kjs/StringObjectThatMasqueradesAsUndefined.h:
        (JSC::StringObjectThatMasqueradesAsUndefined::StringObjectThatMasqueradesAsUndefined):

2008-09-15  Cameron Zwarich  <cwzwarich@uwaterloo.ca>

        Rubber-stamped by Oliver Hunt.

        r36427 broke CodeBlock::dump() by changing the number of arguments to
        op_construct without changing the code that prints it. This patch fixes
        it by printing the additional argument.

        * JavaScriptCore.xcodeproj/project.pbxproj:
        * VM/CodeBlock.cpp:
        (JSC::CodeBlock::dump):

2008-09-15  Adam Roben  <aroben@apple.com>

        Build fix

        * kjs/StructureID.cpp: Removed a stray semicolon.

2008-09-15  Cameron Zwarich  <cwzwarich@uwaterloo.ca>

        Reviewed by Maciej Stachowiak.

        Fix a crash in fast/js/exception-expression-offset.html caused by not
        updating all mentions of the length of op_construct in r36427.

        * VM/Machine.cpp:
        (JSC::Machine::cti_op_construct_NotJSConstruct):

2008-09-15  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Cameron Zwarich.
        
        - fix layout test failure introduced by fix for 20849
        
        (The failing test was fast/js/delete-then-put.html)

        * kjs/JSObject.cpp:
        (JSC::JSObject::removeDirect): Clear enumeration cache
        in the dictionary case.
        * kjs/JSObject.h:
        (JSC::JSObject::putDirect): Ditto.
        * kjs/StructureID.h:
        (JSC::StructureID::clearEnumerationCache): Inline to handle the
        clear.

2008-09-15  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Cameron Zwarich.
        
        - fix JSC test failures introduced by fix for 20849

        * kjs/PropertyMap.cpp:
        (JSC::PropertyMap::getEnumerablePropertyNames): Use the correct count.

2008-09-15  Cameron Zwarich  <cwzwarich@uwaterloo.ca>

        Reviewed by Maciej Stachowiak.

        Bug 20851: REGRESSION (r36410): fast/js/kde/GlobalObject.html fails
        <https://bugs.webkit.org/show_bug.cgi?id=20851>

        r36410 introduced an optimization for parseInt() that is incorrect when
        its argument is larger than the range of a 32-bit integer. If the
        argument is a number that is not an immediate integer, then the correct
        behaviour is to return the floor of its value, unless it is an infinite
        value, in which case the correct behaviour is to return 0.

        * kjs/JSGlobalObjectFunctions.cpp:
        (JSC::globalFuncParseInt):

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

        Reviewed by Maciej Stachowiak.

        Patch for https://bugs.webkit.org/show_bug.cgi?id=20849
        Cache property names for getEnumerablePropertyNames in the StructureID.

        ~0.5% speedup on Sunspider overall (9.7% speedup on string-fasta).  ~1% speedup
        on the v8 test suite.

        * kjs/JSObject.cpp:
        (JSC::JSObject::getPropertyNames):
        * kjs/PropertyMap.cpp:
        (JSC::PropertyMap::getEnumerablePropertyNames):
        * kjs/PropertyMap.h:
        * kjs/StructureID.cpp:
        (JSC::StructureID::StructureID):
        (JSC::StructureID::getEnumerablePropertyNames):
        * kjs/StructureID.h:

2008-09-14  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Cameron Zwarich.
        
        - speed up JS construction by extracting "prototype" lookup so PIC applies.
        
        ~0.5% speedup on SunSpider
        Speeds up some of the V8 tests as well, most notably earley-boyer.

        * VM/CTI.cpp:
        (JSC::CTI::compileOpCall): Account for extra arg for prototype.
        (JSC::CTI::privateCompileMainPass): Account for increased size of op_construct.
        * VM/CodeGenerator.cpp:
        (JSC::CodeGenerator::emitConstruct): Emit separate lookup to get prototype property.
        * VM/Machine.cpp:
        (JSC::Machine::privateExecute): Expect prototype arg in op_construct.
        (JSC::Machine::cti_op_construct_JSConstruct): ditto
        (JSC::Machine::cti_op_construct_NotJSConstruct): ditto

2008-09-10  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Eric Seidel.

        Add a protected destructor for RefCounted.

        It is wrong to call its destructor directly, because (1) this should be taken care of by
        deref(), and (2) many classes that use RefCounted have non-virtual destructors.

        No change in behavior.

        * wtf/RefCounted.h: (WTF::RefCounted::~RefCounted):

2008-09-14  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Sam Weinig.

        Accelerated property accesses.

        Inline more of the array access code into the JIT code for get/put_by_val.
        Accelerate get/put_by_id by speculatively inlining a disable direct access
        into the hot path of the code, and repatch this with the correct StructureID
        and property map offset once these are known.  In the case of accesses to the
        prototype and reading the array-length a trampoline is genertaed, and the
        branch to the slow-case is relinked to jump to this.

        By repatching, we mean rewriting the x86 instruction stream.  Instructions are
        only modified in a simple fasion - altering immediate operands, memory access
        deisplacements, and branch offsets.
        
        For regular get_by_id/put_by_id accesses to an object, a StructureID in an
        instruction's immediate operant is updateded, and a memory access operation's
        displacement is updated to access the correct field on the object.  In the case
        of more complex accesses (array length and get_by_id_prototype) the offset on
        the branch to slow-case is updated, to now jump to a trampoline.

        +2.8% sunspider, +13% v8-tests

        * VM/CTI.cpp:
        (JSC::CTI::emitCall):
        (JSC::CTI::emitJumpSlowCaseIfNotJSCell):
        (JSC::CTI::CTI):
        (JSC::CTI::privateCompileMainPass):
        (JSC::CTI::privateCompileSlowCases):
        (JSC::CTI::privateCompile):
        (JSC::CTI::privateCompileGetByIdSelf):
        (JSC::CTI::privateCompileGetByIdProto):
        (JSC::CTI::privateCompileGetByIdChain):
        (JSC::CTI::privateCompilePutByIdReplace):
        (JSC::CTI::privateCompilePutByIdTransition):
        (JSC::CTI::privateCompileArrayLengthTrampoline):
        (JSC::CTI::privateCompileStringLengthTrampoline):
        (JSC::CTI::patchGetByIdSelf):
        (JSC::CTI::patchPutByIdReplace):
        (JSC::CTI::privateCompilePatchGetArrayLength):
        (JSC::CTI::privateCompilePatchGetStringLength):
        * VM/CTI.h:
        (JSC::CTI::compileGetByIdSelf):
        (JSC::CTI::compileGetByIdProto):
        (JSC::CTI::compileGetByIdChain):
        (JSC::CTI::compilePutByIdReplace):
        (JSC::CTI::compilePutByIdTransition):
        (JSC::CTI::compileArrayLengthTrampoline):
        (JSC::CTI::compileStringLengthTrampoline):
        (JSC::CTI::compilePatchGetArrayLength):
        (JSC::CTI::compilePatchGetStringLength):
        * VM/CodeBlock.cpp:
        (JSC::CodeBlock::dump):
        (JSC::CodeBlock::~CodeBlock):
        * VM/CodeBlock.h:
        (JSC::StructureStubInfo::StructureStubInfo):
        (JSC::CodeBlock::getStubInfo):
        * VM/Machine.cpp:
        (JSC::Machine::tryCTICachePutByID):
        (JSC::Machine::tryCTICacheGetByID):
        (JSC::Machine::cti_op_put_by_val_array):
        * VM/Machine.h:
        * masm/X86Assembler.h:
        (JSC::X86Assembler::):
        (JSC::X86Assembler::cmpl_i8m):
        (JSC::X86Assembler::emitUnlinkedJa):
        (JSC::X86Assembler::getRelocatedAddress):
        (JSC::X86Assembler::getDifferenceBetweenLabels):
        (JSC::X86Assembler::emitModRm_opmsib):

2008-09-14  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Cameron Zwarich.
        
        - split the "prototype" lookup for hasInstance into opcode stream so it can be cached
        
        ~5% speedup on v8 earley-boyer test

        * API/JSCallbackObject.h: Add a parameter for the pre-looked-up prototype.
        * API/JSCallbackObjectFunctions.h:
        (JSC::::hasInstance): Ditto.
        * API/JSValueRef.cpp:
        (JSValueIsInstanceOfConstructor): Look up and pass in prototype.
        * JavaScriptCore.exp:
        * VM/CTI.cpp:
        (JSC::CTI::privateCompileMainPass): Pass along prototype.
        * VM/CodeBlock.cpp:
        (JSC::CodeBlock::dump): Print third arg.
        * VM/CodeGenerator.cpp:
        (JSC::CodeGenerator::emitInstanceOf): Implement this, now that there
        is a third argument.
        * VM/CodeGenerator.h:
        * VM/Machine.cpp:
        (JSC::Machine::privateExecute): Pass along the prototype.
        (JSC::Machine::cti_op_instanceof): ditto
        * kjs/JSObject.cpp:
        (JSC::JSObject::hasInstance): Expect to get a pre-looked-up prototype.
        * kjs/JSObject.h:
        * kjs/nodes.cpp:
        (JSC::InstanceOfNode::emitCode): Emit a get_by_id of the prototype
        property and pass that register to instanceof.
        * kjs/nodes.h:

2008-09-14  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Sam Weinig.

        Remove unnecessary virtual function call from cti_op_call_JSFunction -
        ~5% on richards, ~2.5% on v8-tests, ~0.5% on sunspider.

        * VM/Machine.cpp:
        (JSC::Machine::cti_op_call_JSFunction):

2008-09-14  Cameron Zwarich  <cwzwarich@uwaterloo.ca>

        Reviewed by Maciej Stachowiak.

        Bug 20827: the 'typeof' operator is slow
        <https://bugs.webkit.org/show_bug.cgi?id=20827>

        Optimize the 'typeof' operator when its result is compared to a constant
        string.

        This is a 5.5% speedup on the V8 Earley-Boyer test.

        * VM/CTI.cpp:
        (JSC::CTI::privateCompileMainPass):
        * VM/CodeBlock.cpp:
        (JSC::CodeBlock::dump):
        * VM/CodeGenerator.cpp:
        (JSC::CodeGenerator::emitEqualityOp):
        * VM/CodeGenerator.h:
        * VM/Machine.cpp:
        (JSC::jsIsObjectType):
        (JSC::jsIsFunctionType):
        (JSC::Machine::privateExecute):
        (JSC::Machine::cti_op_is_undefined):
        (JSC::Machine::cti_op_is_boolean):
        (JSC::Machine::cti_op_is_number):
        (JSC::Machine::cti_op_is_string):
        (JSC::Machine::cti_op_is_object):
        (JSC::Machine::cti_op_is_function):
        * VM/Machine.h:
        * VM/Opcode.h:
        * kjs/nodes.cpp:
        (JSC::BinaryOpNode::emitCode):
        (JSC::EqualNode::emitCode):
        (JSC::StrictEqualNode::emitCode):
        * kjs/nodes.h:

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

        Reviewed by Cameron Zwarich.

        Patch for https://bugs.webkit.org/show_bug.cgi?id=20844
        Speed up parseInt for numbers

        Sunspider reports this as 1.029x as fast overall and 1.37x as fast on string-unpack-code.
        No change on the v8 suite.

        * kjs/JSGlobalObjectFunctions.cpp:
        (JSC::globalFuncParseInt): Don't convert numbers to strings just to
        convert them back to numbers.

2008-09-14  Cameron Zwarich  <cwzwarich@uwaterloo.ca>

        Reviewed by Oliver Hunt.

        Bug 20816: op_lesseq should be optimized
        <https://bugs.webkit.org/show_bug.cgi?id=20816>

        Add a loop_if_lesseq opcode that is similar to the loop_if_less opcode.

        This is a 9.4% speedup on the V8 Crypto benchmark.

        * VM/CTI.cpp:
        (JSC::CTI::privateCompileMainPass):
        (JSC::CTI::privateCompileSlowCases):
        * VM/CodeBlock.cpp:
        (JSC::CodeBlock::dump):
        * VM/CodeGenerator.cpp:
        (JSC::CodeGenerator::emitJumpIfTrue):
        * VM/Machine.cpp:
        (JSC::Machine::privateExecute):
        (JSC::Machine::cti_op_loop_if_lesseq):
        * VM/Machine.h:
        * VM/Opcode.h:

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

        Reviewed by Cameron Zwarich.

        Cleanup Sampling code.

        * VM/CTI.cpp:
        (JSC::CTI::emitCall):
        (JSC::CTI::privateCompileMainPass):
        * VM/CTI.h:
        (JSC::CTI::execute):
        * VM/SamplingTool.cpp:
        (JSC::):
        (JSC::SamplingTool::run):
        (JSC::SamplingTool::dump):
        * VM/SamplingTool.h:
        (JSC::SamplingTool::callingHostFunction):

2008-09-13  Oliver Hunt  <oliver@apple.com>

        Reviewed by Cameron Zwarich.

        Bug 20821: Cache property transitions to speed up object initialization
        https://bugs.webkit.org/show_bug.cgi?id=20821

        Implement a transition cache to improve the performance of new properties
        being added to objects.  This is extremely beneficial in constructors and
        shows up as a 34% improvement on access-binary-trees in SunSpider (0.8%
        overall)

        * VM/CTI.cpp:
        (JSC::CTI::privateCompileMainPass):
        (JSC::):
        (JSC::transitionWillNeedStorageRealloc):
        (JSC::CTI::privateCompilePutByIdTransition):
        * VM/CTI.h:
        (JSC::CTI::compilePutByIdTransition):
        * VM/CodeBlock.cpp:
        (JSC::printPutByIdOp):
        (JSC::CodeBlock::printStructureIDs):
        (JSC::CodeBlock::dump):
        (JSC::CodeBlock::derefStructureIDs):
        (JSC::CodeBlock::refStructureIDs):
        * VM/CodeGenerator.cpp:
        (JSC::CodeGenerator::emitPutById):
        * VM/Machine.cpp:
        (JSC::cachePrototypeChain):
        (JSC::Machine::tryCachePutByID):
        (JSC::Machine::tryCacheGetByID):
        (JSC::Machine::privateExecute):
        (JSC::Machine::tryCTICachePutByID):
        (JSC::Machine::tryCTICacheGetByID):
        * VM/Machine.h:
        * VM/Opcode.h:
        * kjs/JSObject.h:
        (JSC::JSObject::putDirect):
        (JSC::JSObject::transitionTo):
        * kjs/PutPropertySlot.h:
        (JSC::PutPropertySlot::PutPropertySlot):
        (JSC::PutPropertySlot::wasTransition):
        (JSC::PutPropertySlot::setWasTransition):
        * kjs/StructureID.cpp:
        (JSC::StructureID::transitionTo):
        (JSC::StructureIDChain::StructureIDChain):
        * kjs/StructureID.h:
        (JSC::StructureID::previousID):
        (JSC::StructureID::setCachedPrototypeChain):
        (JSC::StructureID::cachedPrototypeChain):
        (JSC::StructureID::propertyMap):
        * masm/X86Assembler.h:
        (JSC::X86Assembler::addl_i8m):
        (JSC::X86Assembler::subl_i8m):

2008-09-12  Cameron Zwarich  <cwzwarich@uwaterloo.ca>

        Reviewed by Maciej Stachowiak.

        Bug 20819: JSValue::isObject() is slow
        <https://bugs.webkit.org/show_bug.cgi?id=20819>

        Optimize JSCell::isObject() and JSCell::isString() by making them
        non-virtual calls that rely on the StructureID type information.

        This is a 0.7% speedup on SunSpider and a 1.0% speedup on the V8
        benchmark suite.

        * JavaScriptCore.exp:
        * kjs/JSCell.cpp:
        * kjs/JSCell.h:
        (JSC::JSCell::isObject):
        (JSC::JSCell::isString):
        * kjs/JSObject.cpp:
        * kjs/JSObject.h:
        * kjs/JSString.cpp:
        * kjs/JSString.h:
        (JSC::JSString::JSString):
        * kjs/StructureID.h:
        (JSC::StructureID::type):

2008-09-11  Stephanie Lewis  <slewis@apple.com>

        Reviewed by Oliver Hunt.

        Turn off PGO Optimization on CTI.cpp -> <rdar://problem/6207709>.  Fixes
        crash on CNN and on Dromaeo.
        Fix Missing close tag in vcproj. 

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:

2008-09-11  Cameron Zwarich  <cwzwarich@uwaterloo.ca>

        Not reviewed.

        Correct an SVN problem with the last commit and actually add the new
        files.

        * wrec/CharacterClassConstructor.cpp: Added.
        (JSC::):
        (JSC::getCharacterClassNewline):
        (JSC::getCharacterClassDigits):
        (JSC::getCharacterClassSpaces):
        (JSC::getCharacterClassWordchar):
        (JSC::getCharacterClassNondigits):
        (JSC::getCharacterClassNonspaces):
        (JSC::getCharacterClassNonwordchar):
        (JSC::CharacterClassConstructor::addSorted):
        (JSC::CharacterClassConstructor::addSortedRange):
        (JSC::CharacterClassConstructor::put):
        (JSC::CharacterClassConstructor::flush):
        (JSC::CharacterClassConstructor::append):
        * wrec/CharacterClassConstructor.h: Added.
        (JSC::CharacterClassConstructor::CharacterClassConstructor):
        (JSC::CharacterClassConstructor::isUpsideDown):
        (JSC::CharacterClassConstructor::charClass):

2008-09-11  Cameron Zwarich  <cwzwarich@uwaterloo.ca>

        Reviewed by Maciej Stachowiak.

        Bug 20788: Split CharacterClassConstructor into its own file
        <https://bugs.webkit.org/show_bug.cgi?id=20788>

        Split CharacterClassConstructor into its own file and clean up some
        style issues.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * wrec/CharacterClassConstructor.cpp: Added.
        (JSC::):
        (JSC::getCharacterClassNewline):
        (JSC::getCharacterClassDigits):
        (JSC::getCharacterClassSpaces):
        (JSC::getCharacterClassWordchar):
        (JSC::getCharacterClassNondigits):
        (JSC::getCharacterClassNonspaces):
        (JSC::getCharacterClassNonwordchar):
        (JSC::CharacterClassConstructor::addSorted):
        (JSC::CharacterClassConstructor::addSortedRange):
        (JSC::CharacterClassConstructor::put):
        (JSC::CharacterClassConstructor::flush):
        (JSC::CharacterClassConstructor::append):
        * wrec/CharacterClassConstructor.h: Added.
        (JSC::CharacterClassConstructor::CharacterClassConstructor):
        (JSC::CharacterClassConstructor::isUpsideDown):
        (JSC::CharacterClassConstructor::charClass):
        * wrec/WREC.cpp:
        (JSC::WRECParser::parseCharacterClass):

2008-09-10  Simon Hausmann  <hausmann@webkit.org>

        Not reviewed but trivial one-liner for yet unused macro.

        Changed PLATFORM(WINCE) to PLATFORM(WIN_CE) as requested by Mark.

        (part of https://bugs.webkit.org/show_bug.cgi?id=20746)

        * wtf/Platform.h:

2008-09-10  Cameron Zwarich  <cwzwarich@uwaterloo.ca>

        Rubber-stamped by Oliver Hunt.

        Fix a typo by renaming the overloaded orl_rr that takes an immediate to
        orl_i32r.

        * VM/CTI.cpp:
        (JSC::CTI::emitFastArithPotentiallyReTagImmediate):
        * masm/X86Assembler.h:
        (JSC::X86Assembler::orl_i32r):
        * wrec/WREC.cpp:
        (JSC::WRECGenerator::generatePatternCharacter):
        (JSC::WRECGenerator::generateCharacterClassInverted):

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

        Reviewed by Geoff Garen.

        Add inline property storage for JSObject.

        1.2% progression on Sunspider. .5% progression on the v8 test suite.

        * JavaScriptCore.exp:
        * VM/CTI.cpp:
        (JSC::CTI::privateCompileGetByIdProto):
        (JSC::CTI::privateCompileGetByIdChain):
        * kjs/JSObject.cpp:
        (JSC::JSObject::mark): There is no reason to check storageSize now that
        we start from 0.
        (JSC::JSObject::allocatePropertyStorage): Allocates/reallocates heap storage.
        * kjs/JSObject.h:
        (JSC::JSObject::offsetForLocation): m_propertyStorage is not an OwnArrayPtr
        now so there is no reason to .get()
        (JSC::JSObject::usingInlineStorage):
        (JSC::JSObject::JSObject): Start with m_propertyStorage pointing to the
        inline storage.
        (JSC::JSObject::~JSObject): Free the heap storage if not using the inline
        storage.
        (JSC::JSObject::putDirect): Switch to the heap storage only when we know
        we know that we are about to add a property that will overflow the inline
        storage.
        * kjs/PropertyMap.cpp:
        (JSC::PropertyMap::createTable): Don't allocate the propertyStorage, that is
        now handled by JSObject.
        (JSC::PropertyMap::rehash): PropertyStorage is not a OwnArrayPtr anymore.
        * kjs/PropertyMap.h:
        (JSC::PropertyMap::storageSize): Rename from markingCount.
        * kjs/StructureID.cpp:
        (JSC::StructureID::addPropertyTransition): Don't resize the property storage
        if we are using inline storage.
        * kjs/StructureID.h:

2008-09-10  Oliver Hunt  <oliver@apple.com>

        Reviewed by Geoff Garen.

        Inline immediate number version of op_mul.

        Renamed mull_rr to imull_rr as that's what it's 
        actually doing, and added imull_i32r for the constant
        case immediate multiply.

        1.1% improvement to SunSpider.

        * VM/CTI.cpp:
        (JSC::CTI::privateCompileMainPass):
        (JSC::CTI::privateCompileSlowCases):
        * masm/X86Assembler.h:
        (JSC::X86Assembler::):
        (JSC::X86Assembler::imull_rr):
        (JSC::X86Assembler::imull_i32r):

2008-09-10  Cameron Zwarich  <cwzwarich@uwaterloo.ca>

        Not reviewed.

        Mac build fix.

        * JavaScriptCore.xcodeproj/project.pbxproj:

2008-09-09  Oliver Hunt  <oliver@apple.com>

        Reviewed by Maciej Stachowiak.

        Add optimised access to known properties on the global object.

        Improve cross scope access to the global object by emitting
        code to access it directly rather than by walking the scope chain.

        This is a 0.8% win in SunSpider and a 1.7% win in the v8 benchmarks.

        * VM/CTI.cpp:
        (JSC::CTI::privateCompileMainPass):
        (JSC::CTI::emitGetVariableObjectRegister):
        (JSC::CTI::emitPutVariableObjectRegister):
        * VM/CTI.h:
        * VM/CodeBlock.cpp:
        (JSC::CodeBlock::dump):
        * VM/CodeGenerator.cpp:
        (JSC::CodeGenerator::findScopedProperty):
        (JSC::CodeGenerator::emitResolve):
        (JSC::CodeGenerator::emitGetScopedVar):
        (JSC::CodeGenerator::emitPutScopedVar):
        * VM/CodeGenerator.h:
        * VM/Machine.cpp:
        (JSC::Machine::privateExecute):
        * VM/Opcode.h:
        * kjs/nodes.cpp:
        (JSC::FunctionCallResolveNode::emitCode):
        (JSC::PostfixResolveNode::emitCode):
        (JSC::PrefixResolveNode::emitCode):
        (JSC::ReadModifyResolveNode::emitCode):
        (JSC::AssignResolveNode::emitCode):

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

        Reviewed by Oliver.
        
        - enable polymorphic inline caching of properties of primitives
        
        1.012x speedup on SunSpider.

        We create special structure IDs for JSString and
        JSNumberCell. Unlike normal structure IDs, these cannot hold the
        true prototype. Due to JS autoboxing semantics, the prototype used
        when looking up string or number properties depends on the lexical
        global object of the call site, not the creation site. Thus we
        enable StructureIDs to handle this quirk for primitives.
        
        Everything else should be straightforward.
        
        * VM/CTI.cpp:
        (JSC::CTI::privateCompileGetByIdProto):
        (JSC::CTI::privateCompileGetByIdChain):
        * VM/CTI.h:
        (JSC::CTI::compileGetByIdProto):
        (JSC::CTI::compileGetByIdChain):
        * VM/JSPropertyNameIterator.h:
        (JSC::JSPropertyNameIterator::JSPropertyNameIterator):
        * VM/Machine.cpp:
        (JSC::Machine::Machine):
        (JSC::cachePrototypeChain):
        (JSC::Machine::tryCachePutByID):
        (JSC::Machine::tryCacheGetByID):
        (JSC::Machine::privateExecute):
        (JSC::Machine::tryCTICachePutByID):
        (JSC::Machine::tryCTICacheGetByID):
        * kjs/GetterSetter.h:
        (JSC::GetterSetter::GetterSetter):
        * kjs/JSCell.h:
        * kjs/JSGlobalData.cpp:
        (JSC::JSGlobalData::JSGlobalData):
        * kjs/JSGlobalData.h:
        * kjs/JSGlobalObject.h:
        (JSC::StructureID::prototypeForLookup):
        * kjs/JSNumberCell.h:
        (JSC::JSNumberCell::JSNumberCell):
        (JSC::jsNumberCell):
        * kjs/JSObject.h:
        (JSC::JSObject::prototype):
        * kjs/JSString.cpp:
        (JSC::jsString):
        (JSC::jsSubstring):
        (JSC::jsOwnedString):
        * kjs/JSString.h:
        (JSC::JSString::JSString):
        (JSC::JSString::):
        (JSC::jsSingleCharacterString):
        (JSC::jsSingleCharacterSubstring):
        (JSC::jsNontrivialString):
        * kjs/SmallStrings.cpp:
        (JSC::SmallStrings::createEmptyString):
        (JSC::SmallStrings::createSingleCharacterString):
        * kjs/StructureID.cpp:
        (JSC::StructureID::StructureID):
        (JSC::StructureID::addPropertyTransition):
        (JSC::StructureID::getterSetterTransition):
        (JSC::StructureIDChain::StructureIDChain):
        * kjs/StructureID.h:
        (JSC::StructureID::create):
        (JSC::StructureID::storedPrototype):

2008-09-09  Joerg Bornemann  <joerg.bornemann@trolltech.com>

        Reviewed by Sam Weinig.

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

        Added WINCE platform macro.

        * wtf/Platform.h:

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

        Reviewed by Mark Rowe.

        Remove unnecessary override of getOffset.

        Sunspider reports this as a .6% progression.

        * JavaScriptCore.exp:
        * kjs/JSObject.h:
        (JSC::JSObject::getDirectLocation):
        (JSC::JSObject::getOwnPropertySlotForWrite):
        (JSC::JSObject::putDirect):
        * kjs/PropertyMap.cpp:
        * kjs/PropertyMap.h:

2008-09-09  Cameron Zwarich  <cwzwarich@uwaterloo.ca>

        Reviewed by Maciej Stachowiak.

        Bug 20759: Remove MacroAssembler
        <https://bugs.webkit.org/show_bug.cgi?id=20759>

        Remove MacroAssembler and move its functionality to X86Assembler.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * VM/CTI.cpp:
        (JSC::CTI::emitGetArg):
        (JSC::CTI::emitGetPutArg):
        (JSC::CTI::emitPutArg):
        (JSC::CTI::emitPutCTIParam):
        (JSC::CTI::emitGetCTIParam):
        (JSC::CTI::emitPutToCallFrameHeader):
        (JSC::CTI::emitGetFromCallFrameHeader):
        (JSC::CTI::emitPutResult):
        (JSC::CTI::emitDebugExceptionCheck):
        (JSC::CTI::emitJumpSlowCaseIfNotImm):
        (JSC::CTI::emitJumpSlowCaseIfNotImms):
        (JSC::CTI::emitFastArithDeTagImmediate):
        (JSC::CTI::emitFastArithReTagImmediate):
        (JSC::CTI::emitFastArithPotentiallyReTagImmediate):
        (JSC::CTI::emitFastArithImmToInt):
        (JSC::CTI::emitFastArithIntToImmOrSlowCase):
        (JSC::CTI::emitFastArithIntToImmNoCheck):
        (JSC::CTI::compileOpCall):
        (JSC::CTI::emitSlowScriptCheck):
        (JSC::CTI::privateCompileMainPass):
        (JSC::CTI::privateCompileSlowCases):
        (JSC::CTI::privateCompile):
        (JSC::CTI::privateCompileGetByIdSelf):
        (JSC::CTI::privateCompileGetByIdProto):
        (JSC::CTI::privateCompileGetByIdChain):
        (JSC::CTI::privateCompilePutByIdReplace):
        (JSC::CTI::privateArrayLengthTrampoline):
        (JSC::CTI::privateStringLengthTrampoline):
        (JSC::CTI::compileRegExp):
        * VM/CTI.h:
        (JSC::CallRecord::CallRecord):
        (JSC::JmpTable::JmpTable):
        (JSC::SlowCaseEntry::SlowCaseEntry):
        (JSC::CTI::JSRInfo::JSRInfo):
        * masm/MacroAssembler.h: Removed.
        * masm/MacroAssemblerWin.cpp: Removed.
        * masm/X86Assembler.h:
        (JSC::X86Assembler::emitConvertToFastCall):
        (JSC::X86Assembler::emitRestoreArgumentReference):
        * wrec/WREC.h:
        (JSC::WRECGenerator::WRECGenerator):
        (JSC::WRECParser::WRECParser):

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

        Reviewed by Cameron Zwarich.

        Don't waste the first item in the PropertyStorage.

        - Fix typo (makingCount -> markingCount)
        - Remove undefined method declaration.

        No change on Sunspider.

        * kjs/JSObject.cpp:
        (JSC::JSObject::mark):
        * kjs/PropertyMap.cpp:
        (JSC::PropertyMap::put):
        (JSC::PropertyMap::remove):
        (JSC::PropertyMap::getOffset):
        (JSC::PropertyMap::insert):
        (JSC::PropertyMap::rehash):
        (JSC::PropertyMap::resizePropertyStorage):
        (JSC::PropertyMap::checkConsistency):
        * kjs/PropertyMap.h:
        (JSC::PropertyMap::markingCount): Fix typo.

2008-09-09  Cameron Zwarich  <cwzwarich@uwaterloo.ca>

        Not reviewed.

        Speculative Windows build fix.

        * masm/MacroAssemblerWin.cpp:
        (JSC::MacroAssembler::emitConvertToFastCall):
        (JSC::MacroAssembler::emitRestoreArgumentReference):

2008-09-09  Cameron Zwarich  <cwzwarich@uwaterloo.ca>

        Reviewed by Maciej Stachowiak.

        Bug 20755: Create an X86 namespace for register names and other things
        <https://bugs.webkit.org/show_bug.cgi?id=20755>

        Create an X86 namespace to put X86 register names. Perhaps I will move
        opcode names here later as well.

        * VM/CTI.cpp:
        (JSC::CTI::emitGetArg):
        (JSC::CTI::emitGetPutArg):
        (JSC::CTI::emitPutArg):
        (JSC::CTI::emitPutArgConstant):
        (JSC::CTI::emitPutCTIParam):
        (JSC::CTI::emitGetCTIParam):
        (JSC::CTI::emitPutToCallFrameHeader):
        (JSC::CTI::emitGetFromCallFrameHeader):
        (JSC::CTI::emitPutResult):
        (JSC::CTI::emitDebugExceptionCheck):
        (JSC::CTI::emitJumpSlowCaseIfNotImms):
        (JSC::CTI::compileOpCall):
        (JSC::CTI::emitSlowScriptCheck):
        (JSC::CTI::privateCompileMainPass):
        (JSC::CTI::privateCompileSlowCases):
        (JSC::CTI::privateCompile):
        (JSC::CTI::privateCompileGetByIdSelf):
        (JSC::CTI::privateCompileGetByIdProto):
        (JSC::CTI::privateCompileGetByIdChain):
        (JSC::CTI::privateCompilePutByIdReplace):
        (JSC::CTI::privateArrayLengthTrampoline):
        (JSC::CTI::privateStringLengthTrampoline):
        (JSC::CTI::compileRegExp):
        * VM/CTI.h:
        * masm/X86Assembler.h:
        (JSC::X86::):
        (JSC::X86Assembler::emitModRm_rm):
        (JSC::X86Assembler::emitModRm_rm_Unchecked):
        (JSC::X86Assembler::emitModRm_rmsib):
        * wrec/WREC.cpp:
        (JSC::WRECGenerator::generateNonGreedyQuantifier):
        (JSC::WRECGenerator::generateGreedyQuantifier):
        (JSC::WRECGenerator::generateParentheses):
        (JSC::WRECGenerator::generateBackreference):
        (JSC::WRECGenerator::gernerateDisjunction):
        * wrec/WREC.h:

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

        Reviewed by Geoffrey Garen.

        Remove unnecessary friend declaration.

        * kjs/PropertyMap.h:

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

        Reviewed by Geoffrey Garen.

        Replace uses of PropertyMap::get and PropertyMap::getLocation with
        PropertyMap::getOffset.

        Sunspider reports this as a .6% improvement.

        * JavaScriptCore.exp:
        * kjs/JSObject.cpp:
        (JSC::JSObject::put):
        (JSC::JSObject::deleteProperty):
        (JSC::JSObject::getPropertyAttributes):
        * kjs/JSObject.h:
        (JSC::JSObject::getDirect):
        (JSC::JSObject::getDirectLocation):
        (JSC::JSObject::locationForOffset):
        * kjs/PropertyMap.cpp:
        (JSC::PropertyMap::remove):
        (JSC::PropertyMap::getOffset):
        * kjs/PropertyMap.h:

2008-09-09  Cameron Zwarich  <cwzwarich@uwaterloo.ca>

        Reviewed by Sam Weinig.

        Bug 20754: Remove emit prefix from assembler opcode methods
        <https://bugs.webkit.org/show_bug.cgi?id=20754>

        * VM/CTI.cpp:
        (JSC::CTI::emitGetArg):
        (JSC::CTI::emitGetPutArg):
        (JSC::CTI::emitPutArg):
        (JSC::CTI::emitPutArgConstant):
        (JSC::CTI::emitPutCTIParam):
        (JSC::CTI::emitGetCTIParam):
        (JSC::CTI::emitPutToCallFrameHeader):
        (JSC::CTI::emitGetFromCallFrameHeader):
        (JSC::CTI::emitPutResult):
        (JSC::CTI::emitDebugExceptionCheck):
        (JSC::CTI::emitCall):
        (JSC::CTI::emitJumpSlowCaseIfNotImm):
        (JSC::CTI::emitJumpSlowCaseIfNotImms):
        (JSC::CTI::emitFastArithDeTagImmediate):
        (JSC::CTI::emitFastArithReTagImmediate):
        (JSC::CTI::emitFastArithPotentiallyReTagImmediate):
        (JSC::CTI::emitFastArithImmToInt):
        (JSC::CTI::emitFastArithIntToImmOrSlowCase):
        (JSC::CTI::emitFastArithIntToImmNoCheck):
        (JSC::CTI::compileOpCall):
        (JSC::CTI::emitSlowScriptCheck):
        (JSC::CTI::privateCompileMainPass):
        (JSC::CTI::privateCompileSlowCases):
        (JSC::CTI::privateCompile):
        (JSC::CTI::privateCompileGetByIdSelf):
        (JSC::CTI::privateCompileGetByIdProto):
        (JSC::CTI::privateCompileGetByIdChain):
        (JSC::CTI::privateCompilePutByIdReplace):
        (JSC::CTI::privateArrayLengthTrampoline):
        (JSC::CTI::privateStringLengthTrampoline):
        (JSC::CTI::compileRegExp):
        * masm/MacroAssemblerWin.cpp:
        (JSC::MacroAssembler::emitConvertToFastCall):
        (JSC::MacroAssembler::emitRestoreArgumentReference):
        * masm/X86Assembler.h:
        (JSC::X86Assembler::pushl_r):
        (JSC::X86Assembler::pushl_m):
        (JSC::X86Assembler::popl_r):
        (JSC::X86Assembler::popl_m):
        (JSC::X86Assembler::movl_rr):
        (JSC::X86Assembler::addl_rr):
        (JSC::X86Assembler::addl_i8r):
        (JSC::X86Assembler::addl_i32r):
        (JSC::X86Assembler::addl_mr):
        (JSC::X86Assembler::andl_rr):
        (JSC::X86Assembler::andl_i32r):
        (JSC::X86Assembler::cmpl_i8r):
        (JSC::X86Assembler::cmpl_rr):
        (JSC::X86Assembler::cmpl_rm):
        (JSC::X86Assembler::cmpl_i32r):
        (JSC::X86Assembler::cmpl_i32m):
        (JSC::X86Assembler::cmpw_rm):
        (JSC::X86Assembler::orl_rr):
        (JSC::X86Assembler::subl_rr):
        (JSC::X86Assembler::subl_i8r):
        (JSC::X86Assembler::subl_i32r):
        (JSC::X86Assembler::subl_mr):
        (JSC::X86Assembler::testl_i32r):
        (JSC::X86Assembler::testl_rr):
        (JSC::X86Assembler::xorl_i8r):
        (JSC::X86Assembler::xorl_rr):
        (JSC::X86Assembler::sarl_i8r):
        (JSC::X86Assembler::sarl_CLr):
        (JSC::X86Assembler::shl_i8r):
        (JSC::X86Assembler::shll_CLr):
        (JSC::X86Assembler::mull_rr):
        (JSC::X86Assembler::idivl_r):
        (JSC::X86Assembler::cdq):
        (JSC::X86Assembler::movl_mr):
        (JSC::X86Assembler::movzwl_mr):
        (JSC::X86Assembler::movl_rm):
        (JSC::X86Assembler::movl_i32r):
        (JSC::X86Assembler::movl_i32m):
        (JSC::X86Assembler::leal_mr):
        (JSC::X86Assembler::ret):
        (JSC::X86Assembler::jmp_r):
        (JSC::X86Assembler::jmp_m):
        (JSC::X86Assembler::call_r):
        * wrec/WREC.cpp:
        (JSC::WRECGenerator::generateBacktrack1):
        (JSC::WRECGenerator::generateBacktrackBackreference):
        (JSC::WRECGenerator::generateBackreferenceQuantifier):
        (JSC::WRECGenerator::generateNonGreedyQuantifier):
        (JSC::WRECGenerator::generateGreedyQuantifier):
        (JSC::WRECGenerator::generatePatternCharacter):
        (JSC::WRECGenerator::generateCharacterClassInvertedRange):
        (JSC::WRECGenerator::generateCharacterClassInverted):
        (JSC::WRECGenerator::generateCharacterClass):
        (JSC::WRECGenerator::generateParentheses):
        (JSC::WRECGenerator::gererateParenthesesResetTrampoline):
        (JSC::WRECGenerator::generateAssertionBOL):
        (JSC::WRECGenerator::generateAssertionEOL):
        (JSC::WRECGenerator::generateAssertionWordBoundary):
        (JSC::WRECGenerator::generateBackreference):
        (JSC::WRECGenerator::gernerateDisjunction):

2008-09-09  Cameron Zwarich  <cwzwarich@uwaterloo.ca>

        Reviewed by Maciej Stachowiak.

        Clean up the WREC code some more.

        * VM/CTI.cpp:
        (JSC::CTI::compileRegExp):
        * wrec/WREC.cpp:
        (JSC::getCharacterClassNewline):
        (JSC::getCharacterClassDigits):
        (JSC::getCharacterClassSpaces):
        (JSC::getCharacterClassWordchar):
        (JSC::getCharacterClassNondigits):
        (JSC::getCharacterClassNonspaces):
        (JSC::getCharacterClassNonwordchar):
        (JSC::WRECGenerator::generateBacktrack1):
        (JSC::WRECGenerator::generateBacktrackBackreference):
        (JSC::WRECGenerator::generateBackreferenceQuantifier):
        (JSC::WRECGenerator::generateNonGreedyQuantifier):
        (JSC::WRECGenerator::generateGreedyQuantifier):
        (JSC::WRECGenerator::generatePatternCharacter):
        (JSC::WRECGenerator::generateCharacterClassInvertedRange):
        (JSC::WRECGenerator::generateCharacterClassInverted):
        (JSC::WRECGenerator::generateCharacterClass):
        (JSC::WRECGenerator::generateParentheses):
        (JSC::WRECGenerator::gererateParenthesesResetTrampoline):
        (JSC::WRECGenerator::generateAssertionBOL):
        (JSC::WRECGenerator::generateAssertionEOL):
        (JSC::WRECGenerator::generateAssertionWordBoundary):
        (JSC::WRECGenerator::generateBackreference):
        (JSC::WRECGenerator::gernerateDisjunction):
        (JSC::WRECParser::parseCharacterClass):
        (JSC::WRECParser::parseEscape):
        (JSC::WRECParser::parseTerm):
        * wrec/WREC.h:

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

        Build fix, rubber-stamped by Anders Carlsson.

        Silence spurious build warnings about missing format attributes on functions in Assertions.cpp.

        * JavaScriptCore.xcodeproj/project.pbxproj:

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

        Rubber-stamped by Oliver Hunt.

        Fix builds using the "debug" variant.

        This reverts r36130 and tweaks Identifier to export the same symbols for Debug
        and Release configurations.

        * Configurations/JavaScriptCore.xcconfig:
        * DerivedSources.make:
        * JavaScriptCore.Debug.exp: Removed.
        * JavaScriptCore.base.exp: Removed.
        * JavaScriptCore.exp: Added.
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * kjs/identifier.cpp:
        (JSC::Identifier::addSlowCase): #ifdef the call to checkSameIdentifierTable so that
        there is no overhead in Release builds.
        (JSC::Identifier::checkSameIdentifierTable): Add empty functions for Release builds.
        * kjs/identifier.h:
        (JSC::Identifier::add): #ifdef the calls to checkSameIdentifierTable so that there is
        no overhead in Release builds, and remove the inline definitions of checkSameIdentifierTable.

2008-09-09  Cameron Zwarich  <cwzwarich@uwaterloo.ca>

        Reviewed by Maciej Stachowiak.

        Clean up WREC a bit to bring it closer to our coding style guidelines.

        * wrec/WREC.cpp:
        (JSC::):
        (JSC::getCharacterClass_newline):
        (JSC::getCharacterClass_d):
        (JSC::getCharacterClass_s):
        (JSC::getCharacterClass_w):
        (JSC::getCharacterClass_D):
        (JSC::getCharacterClass_S):
        (JSC::getCharacterClass_W):
        (JSC::CharacterClassConstructor::append):
        (JSC::WRECGenerator::generateNonGreedyQuantifier):
        (JSC::WRECGenerator::generateGreedyQuantifier):
        (JSC::WRECGenerator::generateCharacterClassInverted):
        (JSC::WRECParser::parseQuantifier):
        (JSC::WRECParser::parsePatternCharacterQualifier):
        (JSC::WRECParser::parseCharacterClassQuantifier):
        (JSC::WRECParser::parseBackreferenceQuantifier):
        * wrec/WREC.h:
        (JSC::Quantifier::):
        (JSC::Quantifier::Quantifier):

2008-09-09  Jungshik Shin  <jungshik.shin@gmail.com>

        Reviewed by Alexey Proskuryakov.

        Try MIME charset names before trying IANA names 
        ( https://bugs.webkit.org/show_bug.cgi?id=17537 )

        * wtf/StringExtras.h: (strcasecmp): Added.

2008-09-09  Cameron Zwarich  <cwzwarich@uwaterloo.ca>

        Reviewed by Mark Rowe.

        Bug 20719: REGRESSION (r36135-36244): Hangs, then crashes after several seconds
        <https://bugs.webkit.org/show_bug.cgi?id=20719>
        <rdar://problem/6205787>

        Fix a typo in the case-insensitive matching of character patterns.

        * wrec/WREC.cpp:
        (JSC::WRECGenerator::generatePatternCharacter):

2008-09-09  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Sam Weinig.
        
        - allow polymorphic inline cache to handle Math object functions and possibly other similar things
        
        1.012x speedup on SunSpider.

        * kjs/MathObject.cpp:
        (JSC::MathObject::getOwnPropertySlot):
        * kjs/lookup.cpp:
        (JSC::setUpStaticFunctionSlot):
        * kjs/lookup.h:
        (JSC::getStaticPropertySlot):

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

        Reviewed by Maciej Stachowiak and Oliver Hunt.

        Split storage of properties out of the PropertyMap and into the JSObject
        to allow sharing PropertyMap on the StructureID.  In order to get this
        function correctly, the StructureID's transition mappings were changed to
        transition based on property name and attribute pairs, instead of just
        property name.

        - Removes the single property optimization now that the PropertyMap is shared.
          This will be replaced by in-lining some values on the JSObject.

        This is a wash on Sunspider and a 6.7% win on the v8 test suite.

        * JavaScriptCore.base.exp:
        * VM/CTI.cpp:
        (JSC::CTI::privateCompileGetByIdSelf): Get the storage directly off the JSObject.
        (JSC::CTI::privateCompileGetByIdProto): Ditto.
        (JSC::CTI::privateCompileGetByIdChain): Ditto.
        (JSC::CTI::privateCompilePutByIdReplace): Ditto.
        * kjs/JSObject.cpp:
        (JSC::JSObject::mark): Mark the PropertyStorage.
        (JSC::JSObject::put): Update to get the propertyMap of the StructureID.
        (JSC::JSObject::deleteProperty): Ditto.
        (JSC::JSObject::defineGetter): Return early if the property is already a getter/setter.
        (JSC::JSObject::defineSetter): Ditto.
        (JSC::JSObject::getPropertyAttributes): Update to get the propertyMap of the StructureID
        (JSC::JSObject::getPropertyNames): Ditto.
        (JSC::JSObject::removeDirect): Ditto.
        * kjs/JSObject.h: Remove PropertyMap and add PropertyStorage.
        (JSC::JSObject::propertyStorage): return the PropertyStorage.
        (JSC::JSObject::getDirect): Update to get the propertyMap of the StructureID.
        (JSC::JSObject::getDirectLocation): Ditto.
        (JSC::JSObject::offsetForLocation): Compute location directly.
        (JSC::JSObject::hasCustomProperties): Update to get the propertyMap of the StructureID.
        (JSC::JSObject::hasGetterSetterProperties): Ditto.
        (JSC::JSObject::getDirectOffset): Get by indexing into PropertyStorage.
        (JSC::JSObject::putDirectOffset): Put by indexing into PropertyStorage.
        (JSC::JSObject::getOwnPropertySlotForWrite): Update to get the propertyMap of the StructureID.
        (JSC::JSObject::getOwnPropertySlot): Ditto.
        (JSC::JSObject::putDirect): Move putting into the StructureID unless the property already exists.
        * kjs/PropertyMap.cpp: Use the propertyStorage as the storage for the JSValues.
        (JSC::PropertyMap::checkConsistency): 
        (JSC::PropertyMap::operator=):
        (JSC::PropertyMap::~PropertyMap):
        (JSC::PropertyMap::get):
        (JSC::PropertyMap::getLocation):
        (JSC::PropertyMap::put):
        (JSC::PropertyMap::getOffset):
        (JSC::PropertyMap::insert):
        (JSC::PropertyMap::expand):
        (JSC::PropertyMap::rehash):
        (JSC::PropertyMap::createTable):
        (JSC::PropertyMap::resizePropertyStorage): Resize the storage to match the size of the map
        (JSC::PropertyMap::remove):
        (JSC::PropertyMap::getEnumerablePropertyNames):
        * kjs/PropertyMap.h: 
        (JSC::PropertyMapEntry::PropertyMapEntry):
        (JSC::PropertyMap::isEmpty):
        (JSC::PropertyMap::size):
        (JSC::PropertyMap::makingCount):
        (JSC::PropertyMap::PropertyMap):

        * kjs/StructureID.cpp: 
        (JSC::StructureID::addPropertyTransition): Transitions now are based off the property name
        and attributes. 
        (JSC::StructureID::toDictionaryTransition): Copy the map.
        (JSC::StructureID::changePrototypeTransition): Copy the map.
        (JSC::StructureID::getterSetterTransition): Copy the map.
        (JSC::StructureID::~StructureID): 
        * kjs/StructureID.h:
        (JSC::TransitionTableHash::hash): Custom hash for transition map.
        (JSC::TransitionTableHash::equal): Ditto.
        (JSC::TransitionTableHashTraits::emptyValue): Custom traits for transition map
        (JSC::TransitionTableHashTraits::constructDeletedValue): Ditto.
        (JSC::TransitionTableHashTraits::isDeletedValue): Ditto.
        (JSC::StructureID::propertyMap): Added.

2008-09-08  Oliver Hunt  <oliver@apple.com>

        Reviewed by Mark Rowe.

        Bug 20694: Slow Script error pops up when running Dromaeo tests

        Correct error in timeout logic where execution tick count would
        be reset to incorrect value due to incorrect offset and indirection.
        Codegen for the slow script dialog was factored out into a separate
        method (emitSlowScriptCheck) rather than having multiple copies of
        the same code.  Also added calls to generate slow script checks
        for loop_if_less and loop_if_true opcodes.

        * VM/CTI.cpp:
        (JSC::CTI::emitSlowScriptCheck):
        (JSC::CTI::privateCompileMainPass):
        (JSC::CTI::privateCompileSlowCases):
        * VM/CTI.h:

2008-09-08  Cameron Zwarich  <cwzwarich@uwaterloo.ca>

        Reviewed by Maciej Stachowiak.

        Remove references to the removed WRECompiler class.

        * VM/Machine.h:
        * wrec/WREC.h:

2008-09-08  Cameron Zwarich  <cwzwarich@uwaterloo.ca>

        Rubber-stamped by Mark Rowe.

        Fix the build with CTI enabled but WREC disabled.

        * VM/CTI.cpp:
        * VM/CTI.h:

2008-09-08  Dan Bernstein  <mitz@apple.com>

        - build fix

        * kjs/nodes.h:
        (JSC::StatementNode::):
        (JSC::BlockNode::):

2008-09-08  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Geoff.

       <rdar://problem/6134407> Breakpoints in for loops, while loops or
       conditions without curly braces don't break. (19306)
       -Statement Lists already emit debug hooks but conditionals without
       brackets are not lists.

        * kjs/nodes.cpp:
        (KJS::IfNode::emitCode):
        (KJS::IfElseNode::emitCode):
        (KJS::DoWhileNode::emitCode):
        (KJS::WhileNode::emitCode):
        (KJS::ForNode::emitCode):
        (KJS::ForInNode::emitCode):
        * kjs/nodes.h:
        (KJS::StatementNode::):
        (KJS::BlockNode::):

2008-09-08  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Anders Carlsson.
        
        - Cache the code generated for eval to speed up SunSpider and web sites
        https://bugs.webkit.org/show_bug.cgi?id=20718
        
        1.052x on SunSpider
        2.29x on date-format-tofte
        
        Lots of real sites seem to get many hits on this cache as well,
        including GMail, Google Spreadsheets, Slate and Digg (the last of
        these gets over 100 hits on initial page load).

        * VM/CodeBlock.h:
        (JSC::EvalCodeCache::get):
        * VM/Machine.cpp:
        (JSC::Machine::callEval):
        (JSC::Machine::privateExecute):
        (JSC::Machine::cti_op_call_eval):
        * VM/Machine.h:

2008-09-07  Cameron Zwarich  <cwzwarich@uwaterloo.ca>

        Reviewed by Oliver Hunt.

        Bug 20711: Change KJS prefix on preprocessor macros to JSC
        <https://bugs.webkit.org/show_bug.cgi?id=20711>

        * kjs/CommonIdentifiers.cpp:
        (JSC::CommonIdentifiers::CommonIdentifiers):
        * kjs/CommonIdentifiers.h:
        * kjs/PropertySlot.h:
        (JSC::PropertySlot::getValue):
        (JSC::PropertySlot::putValue):
        (JSC::PropertySlot::setValueSlot):
        (JSC::PropertySlot::setValue):
        (JSC::PropertySlot::setRegisterSlot):
        * kjs/lookup.h:
        * kjs/nodes.cpp:
        * kjs/nodes.h:
        (JSC::Node::):
        (JSC::ExpressionNode::):
        (JSC::StatementNode::):
        (JSC::NullNode::):
        (JSC::BooleanNode::):
        (JSC::NumberNode::):
        (JSC::ImmediateNumberNode::):
        (JSC::StringNode::):
        (JSC::RegExpNode::):
        (JSC::ThisNode::):
        (JSC::ResolveNode::):
        (JSC::ElementNode::):
        (JSC::ArrayNode::):
        (JSC::PropertyNode::):
        (JSC::PropertyListNode::):
        (JSC::ObjectLiteralNode::):
        (JSC::BracketAccessorNode::):
        (JSC::DotAccessorNode::):
        (JSC::ArgumentListNode::):
        (JSC::ArgumentsNode::):
        (JSC::NewExprNode::):
        (JSC::EvalFunctionCallNode::):
        (JSC::FunctionCallValueNode::):
        (JSC::FunctionCallResolveNode::):
        (JSC::FunctionCallBracketNode::):
        (JSC::FunctionCallDotNode::):
        (JSC::PrePostResolveNode::):
        (JSC::PostfixResolveNode::):
        (JSC::PostfixBracketNode::):
        (JSC::PostfixDotNode::):
        (JSC::PostfixErrorNode::):
        (JSC::DeleteResolveNode::):
        (JSC::DeleteBracketNode::):
        (JSC::DeleteDotNode::):
        (JSC::DeleteValueNode::):
        (JSC::VoidNode::):
        (JSC::TypeOfResolveNode::):
        (JSC::TypeOfValueNode::):
        (JSC::PrefixResolveNode::):
        (JSC::PrefixBracketNode::):
        (JSC::PrefixDotNode::):
        (JSC::PrefixErrorNode::):
        (JSC::UnaryPlusNode::):
        (JSC::NegateNode::):
        (JSC::BitwiseNotNode::):
        (JSC::LogicalNotNode::):
        (JSC::MultNode::):
        (JSC::DivNode::):
        (JSC::ModNode::):
        (JSC::AddNode::):
        (JSC::SubNode::):
        (JSC::LeftShiftNode::):
        (JSC::RightShiftNode::):
        (JSC::UnsignedRightShiftNode::):
        (JSC::LessNode::):
        (JSC::GreaterNode::):
        (JSC::LessEqNode::):
        (JSC::GreaterEqNode::):
        (JSC::ThrowableBinaryOpNode::):
        (JSC::InstanceOfNode::):
        (JSC::InNode::):
        (JSC::EqualNode::):
        (JSC::NotEqualNode::):
        (JSC::StrictEqualNode::):
        (JSC::NotStrictEqualNode::):
        (JSC::BitAndNode::):
        (JSC::BitOrNode::):
        (JSC::BitXOrNode::):
        (JSC::LogicalOpNode::):
        (JSC::ConditionalNode::):
        (JSC::ReadModifyResolveNode::):
        (JSC::AssignResolveNode::):
        (JSC::ReadModifyBracketNode::):
        (JSC::AssignBracketNode::):
        (JSC::AssignDotNode::):
        (JSC::ReadModifyDotNode::):
        (JSC::AssignErrorNode::):
        (JSC::CommaNode::):
        (JSC::VarDeclCommaNode::):
        (JSC::ConstDeclNode::):
        (JSC::ConstStatementNode::):
        (JSC::EmptyStatementNode::):
        (JSC::DebuggerStatementNode::):
        (JSC::ExprStatementNode::):
        (JSC::VarStatementNode::):
        (JSC::IfNode::):
        (JSC::IfElseNode::):
        (JSC::DoWhileNode::):
        (JSC::WhileNode::):
        (JSC::ForNode::):
        (JSC::ContinueNode::):
        (JSC::BreakNode::):
        (JSC::ReturnNode::):
        (JSC::WithNode::):
        (JSC::LabelNode::):
        (JSC::ThrowNode::):
        (JSC::TryNode::):
        (JSC::ParameterNode::):
        (JSC::ScopeNode::):
        (JSC::ProgramNode::):
        (JSC::EvalNode::):
        (JSC::FunctionBodyNode::):
        (JSC::FuncExprNode::):
        (JSC::FuncDeclNode::):
        (JSC::CaseClauseNode::):
        (JSC::ClauseListNode::):
        (JSC::CaseBlockNode::):
        (JSC::SwitchNode::):

2008-09-07  Cameron Zwarich  <cwzwarich@uwaterloo.ca>

        Reviewed by Maciej Stachowiak.

        Bug 20704: Replace the KJS namespace
        <https://bugs.webkit.org/show_bug.cgi?id=20704>

        Rename the KJS namespace to JSC. There are still some uses of KJS in
        preprocessor macros and comments, but these will also be changed some
        time in the near future.

        * API/APICast.h:
        (toJS):
        (toRef):
        (toGlobalRef):
        * API/JSBase.cpp:
        * API/JSCallbackConstructor.cpp:
        * API/JSCallbackConstructor.h:
        * API/JSCallbackFunction.cpp:
        * API/JSCallbackFunction.h:
        * API/JSCallbackObject.cpp:
        * API/JSCallbackObject.h:
        * API/JSCallbackObjectFunctions.h:
        * API/JSClassRef.cpp:
        (OpaqueJSClass::staticValues):
        (OpaqueJSClass::staticFunctions):
        * API/JSClassRef.h:
        * API/JSContextRef.cpp:
        * API/JSObjectRef.cpp:
        * API/JSProfilerPrivate.cpp:
        * API/JSStringRef.cpp:
        * API/JSValueRef.cpp:
        (JSValueGetType):
        * API/OpaqueJSString.cpp:
        * API/OpaqueJSString.h:
        * JavaScriptCore.Debug.exp:
        * JavaScriptCore.base.exp:
        * VM/CTI.cpp:
        (JSC::):
        * VM/CTI.h:
        * VM/CodeBlock.cpp:
        * VM/CodeBlock.h:
        * VM/CodeGenerator.cpp:
        * VM/CodeGenerator.h:
        * VM/ExceptionHelpers.cpp:
        * VM/ExceptionHelpers.h:
        * VM/Instruction.h:
        * VM/JSPropertyNameIterator.cpp:
        * VM/JSPropertyNameIterator.h:
        * VM/LabelID.h:
        * VM/Machine.cpp:
        * VM/Machine.h:
        * VM/Opcode.cpp:
        * VM/Opcode.h:
        * VM/Register.h:
        (WTF::):
        * VM/RegisterFile.cpp:
        * VM/RegisterFile.h:
        * VM/RegisterID.h:
        (WTF::):
        * VM/SamplingTool.cpp:
        * VM/SamplingTool.h:
        * VM/SegmentedVector.h:
        * kjs/ArgList.cpp:
        * kjs/ArgList.h:
        * kjs/Arguments.cpp:
        * kjs/Arguments.h:
        * kjs/ArrayConstructor.cpp:
        * kjs/ArrayConstructor.h:
        * kjs/ArrayPrototype.cpp:
        * kjs/ArrayPrototype.h:
        * kjs/BatchedTransitionOptimizer.h:
        * kjs/BooleanConstructor.cpp:
        * kjs/BooleanConstructor.h:
        * kjs/BooleanObject.cpp:
        * kjs/BooleanObject.h:
        * kjs/BooleanPrototype.cpp:
        * kjs/BooleanPrototype.h:
        * kjs/CallData.cpp:
        * kjs/CallData.h:
        * kjs/ClassInfo.h:
        * kjs/CommonIdentifiers.cpp:
        * kjs/CommonIdentifiers.h:
        * kjs/ConstructData.cpp:
        * kjs/ConstructData.h:
        * kjs/DateConstructor.cpp:
        * kjs/DateConstructor.h:
        * kjs/DateInstance.cpp:
        (JSC::DateInstance::msToGregorianDateTime):
        * kjs/DateInstance.h:
        * kjs/DateMath.cpp:
        * kjs/DateMath.h:
        * kjs/DatePrototype.cpp:
        * kjs/DatePrototype.h:
        * kjs/DebuggerCallFrame.cpp:
        * kjs/DebuggerCallFrame.h:
        * kjs/Error.cpp:
        * kjs/Error.h:
        * kjs/ErrorConstructor.cpp:
        * kjs/ErrorConstructor.h:
        * kjs/ErrorInstance.cpp:
        * kjs/ErrorInstance.h:
        * kjs/ErrorPrototype.cpp:
        * kjs/ErrorPrototype.h:
        * kjs/ExecState.cpp:
        * kjs/ExecState.h:
        * kjs/FunctionConstructor.cpp:
        * kjs/FunctionConstructor.h:
        * kjs/FunctionPrototype.cpp:
        * kjs/FunctionPrototype.h:
        * kjs/GetterSetter.cpp:
        * kjs/GetterSetter.h:
        * kjs/GlobalEvalFunction.cpp:
        * kjs/GlobalEvalFunction.h:
        * kjs/IndexToNameMap.cpp:
        * kjs/IndexToNameMap.h:
        * kjs/InitializeThreading.cpp:
        * kjs/InitializeThreading.h:
        * kjs/InternalFunction.cpp:
        * kjs/InternalFunction.h:
        (JSC::InternalFunction::InternalFunction):
        * kjs/JSActivation.cpp:
        * kjs/JSActivation.h:
        * kjs/JSArray.cpp:
        * kjs/JSArray.h:
        * kjs/JSCell.cpp:
        * kjs/JSCell.h:
        * kjs/JSFunction.cpp:
        * kjs/JSFunction.h:
        (JSC::JSFunction::JSFunction):
        * kjs/JSGlobalData.cpp:
        (JSC::JSGlobalData::JSGlobalData):
        * kjs/JSGlobalData.h:
        * kjs/JSGlobalObject.cpp:
        * kjs/JSGlobalObject.h:
        * kjs/JSGlobalObjectFunctions.cpp:
        * kjs/JSGlobalObjectFunctions.h:
        * kjs/JSImmediate.cpp:
        * kjs/JSImmediate.h:
        * kjs/JSLock.cpp:
        * kjs/JSLock.h:
        * kjs/JSNotAnObject.cpp:
        * kjs/JSNotAnObject.h:
        * kjs/JSNumberCell.cpp:
        * kjs/JSNumberCell.h:
        * kjs/JSObject.cpp:
        * kjs/JSObject.h:
        * kjs/JSStaticScopeObject.cpp:
        * kjs/JSStaticScopeObject.h:
        * kjs/JSString.cpp:
        * kjs/JSString.h:
        * kjs/JSType.h:
        * kjs/JSValue.cpp:
        * kjs/JSValue.h:
        * kjs/JSVariableObject.cpp:
        * kjs/JSVariableObject.h:
        * kjs/JSWrapperObject.cpp:
        * kjs/JSWrapperObject.h:
        * kjs/LabelStack.cpp:
        * kjs/LabelStack.h:
        * kjs/MathObject.cpp:
        * kjs/MathObject.h:
        * kjs/NativeErrorConstructor.cpp:
        * kjs/NativeErrorConstructor.h:
        * kjs/NativeErrorPrototype.cpp:
        * kjs/NativeErrorPrototype.h:
        * kjs/NodeInfo.h:
        * kjs/NumberConstructor.cpp:
        * kjs/NumberConstructor.h:
        * kjs/NumberObject.cpp:
        * kjs/NumberObject.h:
        * kjs/NumberPrototype.cpp:
        * kjs/NumberPrototype.h:
        * kjs/ObjectConstructor.cpp:
        * kjs/ObjectConstructor.h:
        * kjs/ObjectPrototype.cpp:
        * kjs/ObjectPrototype.h:
        * kjs/Parser.cpp:
        * kjs/Parser.h:
        * kjs/PropertyMap.cpp:
        (JSC::PropertyMapStatisticsExitLogger::~PropertyMapStatisticsExitLogger):
        * kjs/PropertyMap.h:
        * kjs/PropertyNameArray.cpp:
        * kjs/PropertyNameArray.h:
        * kjs/PropertySlot.cpp:
        * kjs/PropertySlot.h:
        * kjs/PrototypeFunction.cpp:
        * kjs/PrototypeFunction.h:
        * kjs/PutPropertySlot.h:
        * kjs/RegExpConstructor.cpp:
        * kjs/RegExpConstructor.h:
        * kjs/RegExpObject.cpp:
        * kjs/RegExpObject.h:
        * kjs/RegExpPrototype.cpp:
        * kjs/RegExpPrototype.h:
        * kjs/ScopeChain.cpp:
        * kjs/ScopeChain.h:
        * kjs/ScopeChainMark.h:
        * kjs/Shell.cpp:
        (jscmain):
        * kjs/SmallStrings.cpp:
        * kjs/SmallStrings.h:
        * kjs/SourceProvider.h:
        * kjs/SourceRange.h:
        * kjs/StringConstructor.cpp:
        * kjs/StringConstructor.h:
        * kjs/StringObject.cpp:
        * kjs/StringObject.h:
        * kjs/StringObjectThatMasqueradesAsUndefined.h:
        * kjs/StringPrototype.cpp:
        * kjs/StringPrototype.h:
        * kjs/StructureID.cpp:
        * kjs/StructureID.h:
        * kjs/SymbolTable.h:
        * kjs/collector.cpp:
        * kjs/collector.h:
        * kjs/completion.h:
        * kjs/create_hash_table:
        * kjs/debugger.cpp:
        * kjs/debugger.h:
        * kjs/dtoa.cpp:
        * kjs/dtoa.h:
        * kjs/grammar.y:
        * kjs/identifier.cpp:
        * kjs/identifier.h:
        (JSC::Identifier::equal):
        * kjs/interpreter.cpp:
        * kjs/interpreter.h:
        * kjs/lexer.cpp:
        (JSC::Lexer::Lexer):
        (JSC::Lexer::clear):
        (JSC::Lexer::makeIdentifier):
        * kjs/lexer.h:
        * kjs/lookup.cpp:
        * kjs/lookup.h:
        * kjs/nodes.cpp:
        * kjs/nodes.h:
        * kjs/nodes2string.cpp:
        * kjs/operations.cpp:
        * kjs/operations.h:
        * kjs/protect.h:
        * kjs/regexp.cpp:
        * kjs/regexp.h:
        * kjs/ustring.cpp:
        * kjs/ustring.h:
        (JSC::operator!=):
        (JSC::IdentifierRepHash::hash):
        (WTF::):
        * masm/MacroAssembler.h:
        * masm/MacroAssemblerWin.cpp:
        * masm/X86Assembler.h:
        * pcre/pcre_exec.cpp:
        * profiler/CallIdentifier.h:
        (WTF::):
        * profiler/HeavyProfile.cpp:
        * profiler/HeavyProfile.h:
        * profiler/Profile.cpp:
        * profiler/Profile.h:
        * profiler/ProfileGenerator.cpp:
        * profiler/ProfileGenerator.h:
        * profiler/ProfileNode.cpp:
        * profiler/ProfileNode.h:
        * profiler/Profiler.cpp:
        * profiler/Profiler.h:
        * profiler/TreeProfile.cpp:
        * profiler/TreeProfile.h:
        * wrec/WREC.cpp:
        * wrec/WREC.h:
        * wtf/AVLTree.h:

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

        Reviewed by Dan Bernstein.
        
        - rename IA32MacroAssembler class to X86Assembler
        
        We otherwise call the platform X86, and also, I don't see any macros.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * masm/IA32MacroAsm.h: Removed.
        * masm/MacroAssembler.h:
        (KJS::MacroAssembler::MacroAssembler):
        * masm/MacroAssemblerWin.cpp:
        (KJS::MacroAssembler::emitRestoreArgumentReference):
        * masm/X86Assembler.h: Copied from masm/IA32MacroAsm.h.
        (KJS::X86Assembler::X86Assembler):
        * wrec/WREC.cpp:
        (KJS::WRECGenerator::generateNonGreedyQuantifier):
        (KJS::WRECGenerator::generateGreedyQuantifier):
        (KJS::WRECGenerator::generateParentheses):
        (KJS::WRECGenerator::generateBackreference):
        (KJS::WRECGenerator::gernerateDisjunction):
        * wrec/WREC.h:

2008-09-07  Cameron Zwarich  <cwzwarich@webkit.org>

        Not reviewed.

        Visual C++ seems to have some odd casting rules, so just convert the
        offending cast back to a C-style cast for now.

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

2008-09-07  Cameron Zwarich  <cwzwarich@uwaterloo.ca>

        Reviewed by Mark Rowe.

        Attempt to fix the Windows build by using a const_cast to cast regs.Esp
        to a uintptr_t instead of a reinterpret_cast.

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

2008-09-07  Cameron Zwarich  <cwzwarich@uwaterloo.ca>

        Reviewed by Sam Weinig.

        Remove C-style casts from kjs/collector.cpp.

        * kjs/collector.cpp:
        (KJS::Heap::heapAllocate):
        (KJS::currentThreadStackBase):
        (KJS::Heap::markConservatively):
        (KJS::otherThreadStackPointer):
        (KJS::Heap::markOtherThreadConservatively):
        (KJS::Heap::sweep):

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

        Build fix for the debug variant.

        * DerivedSources.make: Also use the .Debug.exp exports file when building the debug variant.

2008-09-07  Cameron Zwarich  <cwzwarich@uwaterloo.ca>

        Reviewed by Timothy Hatcher.

        Remove C-style casts from the CTI code.

        * VM/CTI.cpp:
        (KJS::CTI::emitGetArg):
        (KJS::CTI::emitGetPutArg):
        (KJS::ctiRepatchCallByReturnAddress):
        (KJS::CTI::compileOpCall):
        (KJS::CTI::privateCompileMainPass):
        (KJS::CTI::privateCompileGetByIdSelf):
        (KJS::CTI::privateCompileGetByIdProto):
        (KJS::CTI::privateCompileGetByIdChain):
        (KJS::CTI::privateCompilePutByIdReplace):
        (KJS::CTI::privateArrayLengthTrampoline):
        (KJS::CTI::privateStringLengthTrampoline):

=== End merge of squirrelfish-extreme ===

2008-09-06  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Sam Weinig. Adapted somewhat by Maciej Stachowiak.
        
        - refactor WREC to share more of the JIT infrastructure with CTI

        * VM/CTI.cpp:
        (KJS::CTI::emitGetArg):
        (KJS::CTI::emitGetPutArg):
        (KJS::CTI::emitPutArg):
        (KJS::CTI::emitPutArgConstant):
        (KJS::CTI::emitPutCTIParam):
        (KJS::CTI::emitGetCTIParam):
        (KJS::CTI::emitPutToCallFrameHeader):
        (KJS::CTI::emitGetFromCallFrameHeader):
        (KJS::CTI::emitPutResult):
        (KJS::CTI::emitDebugExceptionCheck):
        (KJS::CTI::emitJumpSlowCaseIfNotImm):
        (KJS::CTI::emitJumpSlowCaseIfNotImms):
        (KJS::CTI::emitFastArithDeTagImmediate):
        (KJS::CTI::emitFastArithReTagImmediate):
        (KJS::CTI::emitFastArithPotentiallyReTagImmediate):
        (KJS::CTI::emitFastArithImmToInt):
        (KJS::CTI::emitFastArithIntToImmOrSlowCase):
        (KJS::CTI::emitFastArithIntToImmNoCheck):
        (KJS::CTI::CTI):
        (KJS::CTI::compileOpCall):
        (KJS::CTI::privateCompileMainPass):
        (KJS::CTI::privateCompileSlowCases):
        (KJS::CTI::privateCompile):
        (KJS::CTI::privateCompileGetByIdSelf):
        (KJS::CTI::privateCompileGetByIdProto):
        (KJS::CTI::privateCompileGetByIdChain):
        (KJS::CTI::privateCompilePutByIdReplace):
        (KJS::CTI::privateArrayLengthTrampoline):
        (KJS::CTI::privateStringLengthTrampoline):
        (KJS::CTI::compileRegExp):
        * VM/CTI.h:
        (KJS::CallRecord::CallRecord):
        (KJS::JmpTable::JmpTable):
        (KJS::SlowCaseEntry::SlowCaseEntry):
        (KJS::CTI::JSRInfo::JSRInfo):
        * kjs/regexp.cpp:
        (KJS::RegExp::RegExp):
        * wrec/WREC.cpp:
        (KJS::GenerateParenthesesNonGreedyFunctor::GenerateParenthesesNonGreedyFunctor):
        (KJS::GeneratePatternCharacterFunctor::generateAtom):
        (KJS::GeneratePatternCharacterFunctor::backtrack):
        (KJS::GenerateCharacterClassFunctor::generateAtom):
        (KJS::GenerateCharacterClassFunctor::backtrack):
        (KJS::GenerateBackreferenceFunctor::generateAtom):
        (KJS::GenerateBackreferenceFunctor::backtrack):
        (KJS::GenerateParenthesesNonGreedyFunctor::generateAtom):
        (KJS::GenerateParenthesesNonGreedyFunctor::backtrack):
        (KJS::WRECGenerate::generateBacktrack1):
        (KJS::WRECGenerate::generateBacktrackBackreference):
        (KJS::WRECGenerate::generateBackreferenceQuantifier):
        (KJS::WRECGenerate::generateNonGreedyQuantifier):
        (KJS::WRECGenerate::generateGreedyQuantifier):
        (KJS::WRECGenerate::generatePatternCharacter):
        (KJS::WRECGenerate::generateCharacterClassInvertedRange):
        (KJS::WRECGenerate::generateCharacterClassInverted):
        (KJS::WRECGenerate::generateCharacterClass):
        (KJS::WRECGenerate::generateParentheses):
        (KJS::WRECGenerate::generateParenthesesNonGreedy):
        (KJS::WRECGenerate::gererateParenthesesResetTrampoline):
        (KJS::WRECGenerate::generateAssertionBOL):
        (KJS::WRECGenerate::generateAssertionEOL):
        (KJS::WRECGenerate::generateAssertionWordBoundary):
        (KJS::WRECGenerate::generateBackreference):
        (KJS::WRECGenerate::gernerateDisjunction):
        (KJS::WRECGenerate::terminateDisjunction):
        (KJS::WRECParser::parseGreedyQuantifier):
        (KJS::WRECParser::parseQuantifier):
        (KJS::WRECParser::parsePatternCharacterQualifier):
        (KJS::WRECParser::parseCharacterClassQuantifier):
        (KJS::WRECParser::parseBackreferenceQuantifier):
        (KJS::WRECParser::parseParentheses):
        (KJS::WRECParser::parseCharacterClass):
        (KJS::WRECParser::parseOctalEscape):
        (KJS::WRECParser::parseEscape):
        (KJS::WRECParser::parseTerm):
        (KJS::WRECParser::parseDisjunction):
        * wrec/WREC.h:
        (KJS::WRECGenerate::WRECGenerate):
        (KJS::WRECParser::):
        (KJS::WRECParser::WRECParser):
        (KJS::WRECParser::parseAlternative):
        (KJS::WRECParser::isEndOfPattern):

2008-09-06  Oliver Hunt  <oliver@apple.com>

        Reviewed by NOBODY (Build fix).

        Fix the sampler build.

        * VM/SamplingTool.h:

2008-09-06  Oliver Hunt  <oliver@apple.com>

        Reviewed by Maciej Stachowiak.

        Jump through the necessary hoops required to make MSVC cooperate with SFX

        We now explicitly declare the calling convention on all cti_op_* cfunctions,
        and return int instead of bool where appropriate (despite the cdecl calling
        convention seems to state MSVC generates code that returns the result value
        through ecx).  SFX behaves slightly differently under MSVC, specifically it
        stores the base argument address for the cti_op_* functions in the first
        argument, and then does the required stack manipulation through that pointer.
        This is necessary as MSVC's optimisations assume they have complete control
        of the stack, and periodically elide our stack manipulations, or move
        values in unexpected ways.  MSVC also frequently produces tail calls which may
        clobber the first argument, so the MSVC path is slightly less efficient due
        to the need to restore it.

        * JavaScriptCore.xcodeproj/project.pbxproj:
        * VM/CTI.cpp:
        (KJS::):
        (KJS::CTI::compileOpCall):
        (KJS::CTI::privateCompileMainPass):
        (KJS::CTI::privateCompileSlowCases):
        * VM/CTI.h:
        * VM/Machine.cpp:
        * VM/Machine.h:
        * masm/MacroAssembler.h:
        (KJS::MacroAssembler::emitConvertToFastCall):
        * masm/MacroAssemblerIA32GCC.cpp: Removed.
           For performance reasons we need these no-op functions to be inlined.

        * masm/MacroAssemblerWin.cpp:
        (KJS::MacroAssembler::emitRestoreArgumentReference):
        * wtf/Platform.h:

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

        Reviewed by Maciej Stachowiak, or maybe the other way around.
        
        Added the ability to coalesce JITCode buffer grow operations by first
        growing the buffer and then executing unchecked puts to it.
        
        About a 2% speedup on date-format-tofte.

        * VM/CTI.cpp:
        (KJS::CTI::compileOpCall):
        * masm/IA32MacroAsm.h:
        (KJS::JITCodeBuffer::ensureSpace):
        (KJS::JITCodeBuffer::putByteUnchecked):
        (KJS::JITCodeBuffer::putByte):
        (KJS::JITCodeBuffer::putShortUnchecked):
        (KJS::JITCodeBuffer::putShort):
        (KJS::JITCodeBuffer::putIntUnchecked):
        (KJS::JITCodeBuffer::putInt):
        (KJS::IA32MacroAssembler::emitTestl_i32r):
        (KJS::IA32MacroAssembler::emitMovl_mr):
        (KJS::IA32MacroAssembler::emitMovl_rm):
        (KJS::IA32MacroAssembler::emitMovl_i32m):
        (KJS::IA32MacroAssembler::emitUnlinkedJe):
        (KJS::IA32MacroAssembler::emitModRm_rr):
        (KJS::IA32MacroAssembler::emitModRm_rr_Unchecked):
        (KJS::IA32MacroAssembler::emitModRm_rm_Unchecked):
        (KJS::IA32MacroAssembler::emitModRm_rm):
        (KJS::IA32MacroAssembler::emitModRm_opr):
        (KJS::IA32MacroAssembler::emitModRm_opr_Unchecked):
        (KJS::IA32MacroAssembler::emitModRm_opm_Unchecked):

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

        Reviewed by Sam Weinig.

        Disable WREC and CTI on platforms that we have not yet had a chance to test with.

        * wtf/Platform.h:

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

        Reviewed by Sam Weinig.
        
        Use jo instead of a mask compare when fetching array.length and
        string.length. 4% speedup on array.length / string.length torture
        test.

        * VM/CTI.cpp:
        (KJS::CTI::privateArrayLengthTrampoline):
        (KJS::CTI::privateStringLengthTrampoline):

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

        Reviewed by Sam Weinig.

        Removed a CTI compilation pass by recording labels during bytecode
        generation. This is more to reduce complexity than it is to improve
        performance.

        SunSpider reports no change.

        CodeBlock now keeps a "labels" set, which holds the offsets of all the
        instructions that can be jumped to.

        * VM/CTI.cpp: Nixed a pass.

        * VM/CodeBlock.h: Added a "labels" set.

        * VM/LabelID.h: No need for a special LableID for holding jump
        destinations, since the CodeBlock now knows all jump destinations.

        * wtf/HashTraits.h: New hash traits to accomodate putting offset 0 in
        the set.

        * kjs/nodes.cpp:
        (KJS::TryNode::emitCode): Emit a dummy label to record sret targets.

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

        Reviewed by Oliver Hunt and Gavin Barraclough.

        Move the JITCodeBuffer onto Machine and remove the static variables.

        * VM/CTI.cpp: Initialize m_jit with the Machine's code buffer.
        * VM/Machine.cpp:
        (KJS::Machine::Machine): Allocate a JITCodeBuffer.
        * VM/Machine.h:
        * kjs/RegExpConstructor.cpp:
        (KJS::constructRegExp): Pass the ExecState through.
        * kjs/RegExpPrototype.cpp:
        (KJS::regExpProtoFuncCompile): Ditto.
        * kjs/StringPrototype.cpp:
        (KJS::stringProtoFuncMatch): Ditto.
        (KJS::stringProtoFuncSearch): Ditto.
        * kjs/nodes.cpp:
        (KJS::RegExpNode::emitCode): Compile the pattern at code generation time
        so that we have access to an ExecState.
        * kjs/nodes.h:
        (KJS::RegExpNode::):
        * kjs/nodes2string.cpp:
        * kjs/regexp.cpp:
        (KJS::RegExp::RegExp): Pass the ExecState through.
        (KJS::RegExp::create): Ditto.
        * kjs/regexp.h:
        * masm/IA32MacroAsm.h:
        (KJS::IA32MacroAssembler::IA32MacroAssembler): Reset the JITCodeBuffer when we are
        constructed.
        * wrec/WREC.cpp:
        (KJS::WRECompiler::compile): Retrieve the JITCodeBuffer from the Machine.
        * wrec/WREC.h:

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

        Reviewed by Oliver Hunt and Gavin Barraclough.

        Fix the build when CTI is disabled.

        * VM/CodeBlock.cpp:
        (KJS::CodeBlock::~CodeBlock):
        * VM/CodeGenerator.cpp:
        (KJS::prepareJumpTableForStringSwitch):
        * VM/Machine.cpp:
        (KJS::Machine::Machine):
        (KJS::Machine::~Machine):

2008-09-05  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Mark Rowe.

        Fix some windows abi issues.

        * VM/CTI.cpp:
        (KJS::CTI::privateCompileMainPass):
        (KJS::CTI::privateCompileSlowCases):
        * VM/CTI.h:
        (KJS::CallRecord::CallRecord):
        (KJS::):
        * VM/Machine.cpp:
        (KJS::Machine::cti_op_resolve_func):
        (KJS::Machine::cti_op_post_inc):
        (KJS::Machine::cti_op_resolve_with_base):
        (KJS::Machine::cti_op_post_dec):
        * VM/Machine.h:

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

        Reviewed by Sam Weinig.

        Fix ecma/FunctionObjects/15.3.5.3.js after I broke it in r93.

        * VM/Machine.cpp:
        (KJS::Machine::cti_op_call_NotJSFunction): Restore m_callFrame to the correct value after making the native call.
        (KJS::Machine::cti_op_construct_NotJSConstruct): Ditto.

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

        Reviewed by Sam Weinig.

        Fix fast/dom/Window/console-functions.html.

        The call frame on the ExecState was not being updated on calls into native functions.  This meant that functions
        such as console.log would use the line number of the last JS function on the call stack.

        * VM/Machine.cpp:
        (KJS::Machine::cti_op_call_NotJSFunction): Update the ExecState's call frame before making a native function call,
        and restore it when the function is done.
        (KJS::Machine::cti_op_construct_NotJSConstruct): Ditto.

2008-09-05  Oliver Hunt  <oliver@apple.com>

        Start bringing up SFX on windows.

        Reviewed by Mark Rowe and Sam Weinig

        Start doing the work to bring up SFX on windows.  Initially
        just working on WREC, as it does not make any calls so reduces
        the amount of code that needs to be corrected.
        
        Start abstracting the CTI JIT codegen engine.

        * ChangeLog:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * VM/CTI.cpp:
        * masm/IA32MacroAsm.h:
        * masm/MacroAssembler.h: Added.
        (KJS::MacroAssembler::MacroAssembler):
        * masm/MacroAssemblerIA32GCC.cpp: Added.
        (KJS::MacroAssembler::emitConvertToFastCall):
        * masm/MacroAssemblerWin.cpp: Added.
        (KJS::MacroAssembler::emitConvertToFastCall):
        * wrec/WREC.cpp:
        (KJS::WRECompiler::parseGreedyQuantifier):
        (KJS::WRECompiler::parseCharacterClass):
        (KJS::WRECompiler::parseEscape):
        (KJS::WRECompiler::compilePattern):
        * wrec/WREC.h:

2008-09-04  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Sam Weinig.

        Support for slow scripts (timeout checking).

        * VM/CTI.cpp:
        (KJS::CTI::privateCompileMainPass):
        (KJS::CTI::privateCompile):
        * VM/Machine.cpp:
        (KJS::slideRegisterWindowForCall):
        (KJS::Machine::cti_timeout_check):
        (KJS::Machine::cti_vm_throw):

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

        Reviewed by Mark Rowe.

        Third round of style cleanup.

        * VM/CTI.cpp:
        * VM/CTI.h:
        * VM/CodeBlock.h:
        * VM/Machine.cpp:
        * VM/Machine.h:
        * kjs/ExecState.h:

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

        Reviewed by Jon Honeycutt.

        Second round of style cleanup.

        * VM/CTI.cpp:
        * VM/CTI.h:
        * wrec/WREC.h:

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

        Reviewed by Mark Rowe.

        First round of style cleanup.

        * VM/CTI.cpp:
        * VM/CTI.h:
        * masm/IA32MacroAsm.h:
        * wrec/WREC.cpp:
        * wrec/WREC.h:

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

        Reviewed by Mark Rowe.
        
        Merged http://trac.webkit.org/changeset/36081 to work with CTI.

        * VM/Machine.cpp:
        (KJS::Machine::tryCtiCacheGetByID):

2008-09-04  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Sam Weinig.

        Enable profiling in CTI.

        * VM/CTI.h:
        (KJS::):
        (KJS::CTI::execute):
        * VM/Machine.cpp:
        (KJS::Machine::cti_op_call_JSFunction):
        (KJS::Machine::cti_op_call_NotJSFunction):
        (KJS::Machine::cti_op_ret):
        (KJS::Machine::cti_op_construct_JSConstruct):
        (KJS::Machine::cti_op_construct_NotJSConstruct):

2008-09-04  Victor Hernandez  <vhernandez@apple.com>

        Reviewed by Geoffrey Garen.
        
        Fixed an #if to support using WREC without CTI.

        * kjs/regexp.cpp:
        (KJS::RegExp::match):

2008-09-04  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Oliver Hunt.

        The array/string length trampolines are owned by the Machine, not the codeblock that compiled them.

        * VM/CTI.cpp:
        (KJS::CTI::privateArrayLengthTrampoline):
        (KJS::CTI::privateStringLengthTrampoline):
        * VM/Machine.cpp:
        (KJS::Machine::~Machine):
        * VM/Machine.h:

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

        Reviewed by Gavin Barraclough and Sam Weinig.

        Fix a crash on launch of jsc when GuardMalloc is enabled.

        * kjs/ScopeChain.h:
        (KJS::ScopeChain::ScopeChain): Initialize m_node to 0 when we have no valid scope chain.
        (KJS::ScopeChain::~ScopeChain): Null-check m_node before calling deref.

2008-09-03  Oliver Hunt  <oliver@apple.com>

        Reviewed by Gavin Barraclough and Geoff Garen.

        Fix inspector and fast array access so that it bounds
        checks correctly.

        * VM/CTI.cpp:
        (KJS::CTI::privateCompile_pass2_Main):
        * masm/IA32MacroAsm.h:
        (KJS::IA32MacroAssembler::):
        (KJS::IA32MacroAssembler::emitUnlinkedJb):
        (KJS::IA32MacroAssembler::emitUnlinkedJbe):

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

        Move the assertion after the InitializeAndReturn block, as
        that is used even when CTI is enabled.

        * VM/Machine.cpp:
        (KJS::Machine::privateExecute):

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

        Reviewed by Sam Weinig.

        Replace calls to exit with ASSERT_WITH_MESSAGE or ASSERT_NOT_REACHED.

        * VM/CTI.cpp:
        (KJS::CTI::privateCompile_pass1_Scan):
        (KJS::CTI::privateCompile_pass2_Main):
        (KJS::CTI::privateCompile_pass4_SlowCases):
        * VM/Machine.cpp:
        (KJS::Machine::privateExecute):
        (KJS::Machine::cti_vm_throw):

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

        Reviewed by Sam Weinig.

        Tweak JavaScriptCore to compile on non-x86 platforms.  This is achieved
        by wrapping more code with ENABLE(CTI), ENABLE(WREC), and PLATFORM(X86)
        #if's.

        * VM/CTI.cpp:
        * VM/CTI.h:
        * VM/CodeBlock.cpp:
        (KJS::CodeBlock::printStructureIDs): Use %td as the format specifier for
        printing a ptrdiff_t.
        * VM/Machine.cpp:
        * VM/Machine.h:
        * kjs/regexp.cpp:
        (KJS::RegExp::RegExp):
        (KJS::RegExp::~RegExp):
        (KJS::RegExp::match):
        * kjs/regexp.h:
        * masm/IA32MacroAsm.h:
        * wrec/WREC.cpp:
        * wrec/WREC.h:
        * wtf/Platform.h: Only enable CTI and WREC on x86.  Add an extra define to
        track whether any MASM-using features are enabled.

2008-09-03  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Oliver Hunt.

        Copy Geoff's array/string length optimization for CTI.

        * VM/CTI.cpp:
        (KJS::CTI::privateArrayLengthTrampoline):
        (KJS::CTI::privateStringLengthTrampoline):
        * VM/CTI.h:
        (KJS::CTI::compileArrayLengthTrampoline):
        (KJS::CTI::compileStringLengthTrampoline):
        * VM/Machine.cpp:
        (KJS::Machine::Machine):
        (KJS::Machine::getCtiArrayLengthTrampoline):
        (KJS::Machine::getCtiStringLengthTrampoline):
        (KJS::Machine::tryCtiCacheGetByID):
        (KJS::Machine::cti_op_get_by_id_second):
        * VM/Machine.h:
        * kjs/JSString.h:
        * kjs/ustring.h:

2008-09-03  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Oliver Hunt.

        Implement fast array accesses in CTI - 2-3% progression on sunspider.

        * VM/CTI.cpp:
        (KJS::CTI::emitFastArithIntToImmNoCheck):
        (KJS::CTI::compileOpCall):
        (KJS::CTI::privateCompile_pass2_Main):
        (KJS::CTI::privateCompile_pass4_SlowCases):
        * VM/CTI.h:
        * kjs/JSArray.h:

2008-09-02  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Oliver Hunt.

        Enable fast property access support in CTI.

        * VM/CTI.cpp:
        (KJS::ctiSetReturnAddress):
        (KJS::ctiRepatchCallByReturnAddress):
        (KJS::CTI::privateCompile_pass2_Main):
        (KJS::CTI::privateCompile):
        (KJS::CTI::privateCompileGetByIdSelf):
        (KJS::CTI::privateCompileGetByIdProto):
        (KJS::CTI::privateCompileGetByIdChain):
        (KJS::CTI::privateCompilePutByIdReplace):
        * VM/CTI.h:
        (KJS::CTI::compileGetByIdSelf):
        (KJS::CTI::compileGetByIdProto):
        (KJS::CTI::compileGetByIdChain):
        (KJS::CTI::compilePutByIdReplace):
        * VM/CodeBlock.cpp:
        (KJS::CodeBlock::~CodeBlock):
        * VM/CodeBlock.h:
        * VM/Machine.cpp:
        (KJS::doSetReturnAddressVmThrowTrampoline):
        (KJS::Machine::tryCtiCachePutByID):
        (KJS::Machine::tryCtiCacheGetByID):
        (KJS::Machine::cti_op_put_by_id):
        (KJS::Machine::cti_op_put_by_id_second):
        (KJS::Machine::cti_op_put_by_id_generic):
        (KJS::Machine::cti_op_put_by_id_fail):
        (KJS::Machine::cti_op_get_by_id):
        (KJS::Machine::cti_op_get_by_id_second):
        (KJS::Machine::cti_op_get_by_id_generic):
        (KJS::Machine::cti_op_get_by_id_fail):
        (KJS::Machine::cti_op_throw):
        (KJS::Machine::cti_vm_throw):
        * VM/Machine.h:
        * kjs/JSCell.h:
        * kjs/JSObject.h:
        * kjs/PropertyMap.h:
        * kjs/StructureID.cpp:
        (KJS::StructureIDChain::StructureIDChain):
        * masm/IA32MacroAsm.h:
        (KJS::IA32MacroAssembler::emitCmpl_i32m):
        (KJS::IA32MacroAssembler::emitMovl_mr):
        (KJS::IA32MacroAssembler::emitMovl_rm):

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

        Reviewed by Gavin Barraclough and Mark Rowe.

        A backslash (\) at the of a RegEx should produce an error.
        Fixes fast/regex/test1.html.

        * wrec/WREC.cpp:
        (KJS::WRECompiler::parseEscape):

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

        Reviewed by Geoff Garen.

        Link jumps for the slow case of op_loop_if_less.  Fixes acid3.

        * VM/CTI.cpp:
        (KJS::CTI::privateCompile_pass4_SlowCases):

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

        Rubber-stamped by Maciej Stachowiak.

        Switch WREC on by default.

        * wtf/Platform.h:

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

        Reviewed by Mark Rowe.

        Fix two failures in fast/regex/test1.html
          - \- in a character class should be treated as a literal -
          - A missing max quantifier needs to be treated differently than
            a null max quantifier.

        * wrec/WREC.cpp:
        (KJS::WRECompiler::generateNonGreedyQuantifier):
        (KJS::WRECompiler::generateGreedyQuantifier):
        (KJS::WRECompiler::parseCharacterClass):
        * wrec/WREC.h:
        (KJS::Quantifier::Quantifier):

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

        Reviewed by Mark Rowe.

        Fix crash in fast/js/kde/evil-n.html

        * kjs/regexp.cpp: Always pass a non-null offset vector to the wrec function.

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

        Reviewed by Gavin Barraclough and Mark Rowe.

        Add pattern length limit fixing one test in fast/js.

        * wrec/WREC.cpp:
        (KJS::WRECompiler::compile):
        * wrec/WREC.h:
        (KJS::WRECompiler::):

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

        Reviewed by Gavin Barraclough and Mark Rowe.

        Make octal escape parsing/back-reference parsing more closely match 
        prior behavior fixing one test in fast/js.

        * wrec/WREC.cpp:
        (KJS::WRECompiler::parseCharacterClass): 8 and 9 should be IdentityEscaped
        (KJS::WRECompiler::parseEscape):
        * wrec/WREC.h:
        (KJS::WRECompiler::peekDigit):

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

        Reviewed by Gavin Barraclough and Mark Rowe.

        Fix one mozilla test.

        * wrec/WREC.cpp:
        (KJS::WRECompiler::generateCharacterClassInverted): Fix incorrect not
        ascii upper check.

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

        Reviewed by Gavin Barraclough and Mark Rowe.

        Parse octal escapes in character classes fixing one mozilla test.

        * wrec/WREC.cpp:
        (KJS::WRECompiler::parseCharacterClass):
        (KJS::WRECompiler::parseOctalEscape):
        * wrec/WREC.h:
        (KJS::WRECompiler::consumeOctal):

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

        Reviewed by Oliver Hunt.

        Fixes two mozilla tests with WREC enabled.

        * wrec/WREC.cpp:
        (KJS::CharacterClassConstructor::append): Keep the character class sorted
        when appending another character class.

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

        Reviewed by Gavin Barraclough and Mark Rowe.

        Fixes two mozilla tests with WREC enabled.

        * wrec/WREC.cpp:
        (KJS::CharacterClassConstructor::addSortedRange): Insert the range at the correct position
        instead of appending it to the end.

2008-09-01  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Oliver Hunt.

        Move cross-compilation unit call into NEVER_INLINE function.

        * VM/Machine.cpp:
        (KJS::doSetReturnAddressVmThrowTrampoline):

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

        Reviewed by Gavin Barraclough and Geoff Garen.

        Fix one test in fast/js.

        * VM/Machine.cpp:
        (KJS::Machine::cti_op_construct_NotJSConstruct): Throw a createNotAConstructorError,
        instead of a createNotAFunctionError.

2008-08-31  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Maciej Stachowiak.
        
        Zero-cost exception handling.  This patch takes the exception checking
        back of the hot path.  When an exception occurs in a Machine::cti*
        method, the return address to JIT code is recorded, and is then
        overwritten with a pointer to a trampoline routine.  When the method
        returns the trampoline will cause the cti_vm_throw method to be invoked.

        cti_vm_throw uses the return address preserved above, to discover the
        vPC of the bytecode that raised the exception (using a map build during
        translation).  From the VPC of the faulting bytecode the vPC of a catch
        routine may be discovered (unwinding the stack where necesary), and then
        a bytecode address for the catch routine is looked up.  Final cti_vm_throw
        overwrites its return address to JIT code again, to trampoline directly
        to the catch routine.
        
        cti_op_throw is handled in a similar fashion.

        * VM/CTI.cpp:
        (KJS::CTI::emitPutCTIParam):
        (KJS::CTI::emitPutToCallFrameHeader):
        (KJS::CTI::emitGetFromCallFrameHeader):
        (KJS::ctiSetReturnAddressForArgs):
        (KJS::CTI::emitDebugExceptionCheck):
        (KJS::CTI::printOpcodeOperandTypes):
        (KJS::CTI::emitCall):
        (KJS::CTI::compileOpCall):
        (KJS::CTI::privateCompile_pass2_Main):
        (KJS::CTI::privateCompile):
        * VM/CTI.h:
        (KJS::CallRecord::CallRecord):
        (KJS::):
        (KJS::CTI::execute):
        * VM/CodeBlock.h:
        * VM/Machine.cpp:
        (KJS::Machine::privateExecute):
        (KJS::Machine::cti_op_instanceof):
        (KJS::Machine::cti_op_call_NotJSFunction):
        (KJS::Machine::cti_op_resolve):
        (KJS::Machine::cti_op_resolve_func):
        (KJS::Machine::cti_op_resolve_skip):
        (KJS::Machine::cti_op_resolve_with_base):
        (KJS::Machine::cti_op_throw):
        (KJS::Machine::cti_op_in):
        (KJS::Machine::cti_vm_throw):
        * VM/RegisterFile.h:
        (KJS::RegisterFile::):
        * kjs/ExecState.h:
        (KJS::ExecState::setCtiReturnAddress):
        (KJS::ExecState::ctiReturnAddress):
        * masm/IA32MacroAsm.h:
        (KJS::IA32MacroAssembler::):
        (KJS::IA32MacroAssembler::emitPushl_m):
        (KJS::IA32MacroAssembler::emitPopl_m):
        (KJS::IA32MacroAssembler::getRelocatedAddress):

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

        Reviewed by Oliver Hunt.

        Fall back to PCRE for any regexp containing parentheses until we correctly backtrack within them.

        * wrec/WREC.cpp:
        (KJS::WRECompiler::parseParentheses):
        * wrec/WREC.h:
        (KJS::WRECompiler::):

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

        Reviewed by Oliver Hunt.

        Fix several issues within ecma_3/RegExp/perlstress-001.js with WREC enabled.

        * wrec/WREC.cpp:
        (KJS::WRECompiler::generateNonGreedyQuantifier): Compare with the maximum quantifier count rather than the minimum.
        (KJS::WRECompiler::generateAssertionEOL): Do a register-to-register comparison rather than immediate-to-register.
        (KJS::WRECompiler::parseCharacterClass): Pass through the correct inversion flag.

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

        Reviewed by Oliver Hunt.

        Re-fix the six remaining failures in the Mozilla JavaScript tests in a manner that does not kill performance.
        This shows up as a 0.6% progression on SunSpider on my machine.

        Grow the JITCodeBuffer's underlying buffer when we run out of space rather than just bailing out.

        * VM/CodeBlock.h:
        (KJS::CodeBlock::~CodeBlock): Switch to using fastFree now that JITCodeBuffer::copy uses fastMalloc.
        * kjs/regexp.cpp: Ditto.
        * masm/IA32MacroAsm.h:
        (KJS::JITCodeBuffer::growBuffer):
        (KJS::JITCodeBuffer::JITCodeBuffer):
        (KJS::JITCodeBuffer::~JITCodeBuffer):
        (KJS::JITCodeBuffer::putByte):
        (KJS::JITCodeBuffer::putShort):
        (KJS::JITCodeBuffer::putInt):
        (KJS::JITCodeBuffer::reset):
        (KJS::JITCodeBuffer::copy):

2008-08-29  Oliver Hunt  <oliver@apple.com>

        RS=Maciej

        Roll out previous patch as it causes a 5% performance regression

        * JavaScriptCore.xcodeproj/project.pbxproj:
        * VM/CTI.cpp:
        (KJS::getJCB):
        (KJS::CTI::privateCompile):
        * VM/CodeBlock.h:
        (KJS::CodeBlock::~CodeBlock):
        * masm/IA32MacroAsm.h:
        (KJS::JITCodeBuffer::JITCodeBuffer):
        (KJS::JITCodeBuffer::putByte):
        (KJS::JITCodeBuffer::putShort):
        (KJS::JITCodeBuffer::putInt):
        (KJS::JITCodeBuffer::getEIP):
        (KJS::JITCodeBuffer::start):
        (KJS::JITCodeBuffer::getOffset):
        (KJS::JITCodeBuffer::reset):
        (KJS::JITCodeBuffer::copy):
        (KJS::IA32MacroAssembler::emitModRm_rr):
        (KJS::IA32MacroAssembler::emitModRm_rm):
        (KJS::IA32MacroAssembler::emitModRm_rmsib):
        (KJS::IA32MacroAssembler::IA32MacroAssembler):
        (KJS::IA32MacroAssembler::emitInt3):
        (KJS::IA32MacroAssembler::emitPushl_r):
        (KJS::IA32MacroAssembler::emitPopl_r):
        (KJS::IA32MacroAssembler::emitMovl_rr):
        (KJS::IA32MacroAssembler::emitAddl_rr):
        (KJS::IA32MacroAssembler::emitAddl_i8r):
        (KJS::IA32MacroAssembler::emitAddl_i32r):
        (KJS::IA32MacroAssembler::emitAddl_mr):
        (KJS::IA32MacroAssembler::emitAndl_rr):
        (KJS::IA32MacroAssembler::emitAndl_i32r):
        (KJS::IA32MacroAssembler::emitCmpl_i8r):
        (KJS::IA32MacroAssembler::emitCmpl_rr):
        (KJS::IA32MacroAssembler::emitCmpl_rm):
        (KJS::IA32MacroAssembler::emitCmpl_i32r):
        (KJS::IA32MacroAssembler::emitCmpl_i32m):
        (KJS::IA32MacroAssembler::emitCmpw_rm):
        (KJS::IA32MacroAssembler::emitOrl_rr):
        (KJS::IA32MacroAssembler::emitOrl_i8r):
        (KJS::IA32MacroAssembler::emitSubl_rr):
        (KJS::IA32MacroAssembler::emitSubl_i8r):
        (KJS::IA32MacroAssembler::emitSubl_i32r):
        (KJS::IA32MacroAssembler::emitSubl_mr):
        (KJS::IA32MacroAssembler::emitTestl_i32r):
        (KJS::IA32MacroAssembler::emitTestl_rr):
        (KJS::IA32MacroAssembler::emitXorl_i8r):
        (KJS::IA32MacroAssembler::emitXorl_rr):
        (KJS::IA32MacroAssembler::emitSarl_i8r):
        (KJS::IA32MacroAssembler::emitSarl_CLr):
        (KJS::IA32MacroAssembler::emitShl_i8r):
        (KJS::IA32MacroAssembler::emitShll_CLr):
        (KJS::IA32MacroAssembler::emitMull_rr):
        (KJS::IA32MacroAssembler::emitIdivl_r):
        (KJS::IA32MacroAssembler::emitCdq):
        (KJS::IA32MacroAssembler::emitMovl_mr):
        (KJS::IA32MacroAssembler::emitMovzwl_mr):
        (KJS::IA32MacroAssembler::emitMovl_rm):
        (KJS::IA32MacroAssembler::emitMovl_i32r):
        (KJS::IA32MacroAssembler::emitMovl_i32m):
        (KJS::IA32MacroAssembler::emitLeal_mr):
        (KJS::IA32MacroAssembler::emitRet):
        (KJS::IA32MacroAssembler::emitJmpN_r):
        (KJS::IA32MacroAssembler::emitJmpN_m):
        (KJS::IA32MacroAssembler::emitCall):
        (KJS::IA32MacroAssembler::label):
        (KJS::IA32MacroAssembler::emitUnlinkedJmp):
        (KJS::IA32MacroAssembler::emitUnlinkedJne):
        (KJS::IA32MacroAssembler::emitUnlinkedJe):
        (KJS::IA32MacroAssembler::emitUnlinkedJl):
        (KJS::IA32MacroAssembler::emitUnlinkedJle):
        (KJS::IA32MacroAssembler::emitUnlinkedJge):
        (KJS::IA32MacroAssembler::emitUnlinkedJae):
        (KJS::IA32MacroAssembler::emitUnlinkedJo):
        (KJS::IA32MacroAssembler::link):
        * wrec/WREC.cpp:
        (KJS::WRECompiler::compilePattern):
        (KJS::WRECompiler::compile):
        * wrec/WREC.h:

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

        Reviewed by Oliver Hunt.

        Have JITCodeBuffer manage a Vector containing the generated code so that it can grow
        as needed when generating code for a large function.  This fixes all six remaining failures
        in Mozilla tests in both debug and release builds.

        * VM/CTI.cpp:
        (KJS::CTI::privateCompile):
        * VM/CodeBlock.h:
        (KJS::CodeBlock::~CodeBlock):
        * masm/IA32MacroAsm.h:
        (KJS::JITCodeBuffer::putByte):
        (KJS::JITCodeBuffer::putShort):
        (KJS::JITCodeBuffer::putInt):
        (KJS::JITCodeBuffer::getEIP):
        (KJS::JITCodeBuffer::start):
        (KJS::JITCodeBuffer::getOffset):
        (KJS::JITCodeBuffer::getCode):
        (KJS::IA32MacroAssembler::emitModRm_rr):
        * wrec/WREC.cpp:
        (KJS::WRECompiler::compilePattern):
        * wrec/WREC.h:

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

        Reviewed by Oliver Hunt.

        Implement parsing of octal escapes in regular expressions.  This fixes three Mozilla tests.

        * wrec/WREC.cpp:
        (KJS::WRECompiler::parseOctalEscape):
        (KJS::WRECompiler::parseEscape): Parse the escape sequence as an octal escape if it has a leading zero.
        Add a FIXME about treating invalid backreferences as octal escapes in the future.
        * wrec/WREC.h:
        (KJS::WRECompiler::consumeNumber): Multiply by 10 rather than 0 so that we handle numbers with more than
        one digit.
        * wtf/ASCIICType.h:
        (WTF::isASCIIOctalDigit):

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

        Reviewed by Mark Rowe.

        Pass vPC to instanceof method.  Fixes 2 mozilla tests in debug.

        * VM/CTI.cpp:
        (KJS::CTI::privateCompile_pass2_Main):
        * VM/Machine.cpp:
        (KJS::Machine::cti_op_instanceof):

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

        Reviewed by Mark Rowe.

        Pass vPCs to resolve methods for correct exception creation.  Fixes
        17 mozilla tests in debug.

        * VM/CTI.cpp:
        (KJS::CTI::privateCompile_pass2_Main):
        * VM/CTI.h:
        * VM/Machine.cpp:
        (KJS::Machine::cti_op_resolve):
        (KJS::Machine::cti_op_resolve_func):
        (KJS::Machine::cti_op_resolve_skip):
        (KJS::Machine::cti_op_resolve_with_base):

2008-08-29  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Oliver Hunt.

        Remembering to actually throw the exception passed to op throw helps.
        Regressions 19 -> 6.

        * VM/Machine.cpp:
        (KJS::Machine::cti_op_throw):
        (KJS::Machine::cti_vm_throw):

2008-08-29  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Sam Weinig.

        Support for exception unwinding the stack.
        
        Once upon a time, Sam asked me for a bettr ChangeLog entry.  The return address
        is now preserved on entry to a JIT code function (if we preserve lazily we need
        restore the native return address during exception stack unwind).  This takes
        the number of regressions down from ~150 to 19.

        * VM/CTI.cpp:
        (KJS::getJCB):
        (KJS::CTI::emitExceptionCheck):
        (KJS::CTI::compileOpCall):
        (KJS::CTI::privateCompile_pass2_Main):
        (KJS::CTI::privateCompile):
        * VM/CTI.h:
        (KJS::):
        * VM/Machine.cpp:
        (KJS::Machine::throwException):
        (KJS::Machine::cti_op_call_JSFunction):
        (KJS::Machine::cti_op_call_NotJSFunction):
        (KJS::Machine::cti_op_construct_JSConstruct):
        (KJS::Machine::cti_op_construct_NotJSConstruct):
        (KJS::Machine::cti_op_throw):
        (KJS::Machine::cti_vm_throw):

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

        Reviewed by Oliver Hunt.

        Fix js1_2/regexp/word_boundary.js and four other Mozilla tests with WREC enabled.

        * wrec/WREC.cpp:
        (KJS::WRECompiler::generateCharacterClassInvertedRange): If none of the exact matches
        succeeded, jump to failure.
        (KJS::WRECompiler::compilePattern): Restore and increment the current position stored
        on the stack to ensure that it will be reset to the correct position after a failed
        match has consumed input.

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

        Reviewed by Oliver Hunt.

        Fix a hang in ecma_3/RegExp/15.10.2-1.js with WREC enabled.
        A backreference with a quantifier would get stuck in an infinite
        loop if the captured range was empty.

        * wrec/WREC.cpp:
        (KJS::WRECompiler::generateBackreferenceQuantifier): If the captured range
        was empty, do not attempt to match the backreference.
        (KJS::WRECompiler::parseBackreferenceQuantifier):
        * wrec/WREC.h:
        (KJS::Quantifier::):

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

        Reviewed by Oliver Hunt.

        Implement op_debug.

        * VM/CTI.cpp:
        (KJS::CTI::privateCompile_pass1_Scan):
        (KJS::CTI::privateCompile_pass2_Main):
        * VM/Machine.cpp:
        (KJS::Machine::debug):
        (KJS::Machine::privateExecute):
        (KJS::Machine::cti_op_debug):
        * VM/Machine.h:

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

        Reviewed by Gavin Barraclough and Geoff Garen.

        Implement op_switch_string fixing 1 mozilla test and one test in fast/js.

        * VM/CTI.cpp:
        (KJS::CTI::privateCompile_pass1_Scan):
        (KJS::CTI::privateCompile_pass2_Main):
        (KJS::CTI::privateCompile):
        * VM/CTI.h:
        (KJS::SwitchRecord::):
        (KJS::SwitchRecord::SwitchRecord):
        * VM/CodeBlock.cpp:
        (KJS::CodeBlock::dump):
        * VM/CodeBlock.h:
        (KJS::ExpressionRangeInfo::):
        (KJS::StringJumpTable::offsetForValue):
        (KJS::StringJumpTable::ctiForValue):
        (KJS::SimpleJumpTable::add):
        (KJS::SimpleJumpTable::ctiForValue):
        * VM/CodeGenerator.cpp:
        (KJS::prepareJumpTableForStringSwitch):
        * VM/Machine.cpp:
        (KJS::Machine::privateExecute):
        (KJS::Machine::cti_op_switch_string):
        * VM/Machine.h:

2008-08-28  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Oliver Hunt.

        Do not recurse on the machine stack when executing op_call.

        * VM/CTI.cpp:
        (KJS::CTI::emitGetPutArg):
        (KJS::CTI::emitPutArg):
        (KJS::CTI::emitPutArgConstant):
        (KJS::CTI::compileOpCall):
        (KJS::CTI::privateCompile_pass2_Main):
        (KJS::CTI::privateCompile):
        * VM/CTI.h:
        (KJS::):
        (KJS::CTI::compile):
        (KJS::CTI::execute):
        (KJS::CTI::):
        * VM/Machine.cpp:
        (KJS::Machine::Machine):
        (KJS::Machine::execute):
        (KJS::Machine::cti_op_call_JSFunction):
        (KJS::Machine::cti_op_call_NotJSFunction):
        (KJS::Machine::cti_op_ret):
        (KJS::Machine::cti_op_construct_JSConstruct):
        (KJS::Machine::cti_op_construct_NotJSConstruct):
        (KJS::Machine::cti_op_call_eval):
        * VM/Machine.h:
        * VM/Register.h:
        (KJS::Register::Register):
        * VM/RegisterFile.h:
        (KJS::RegisterFile::):
        * kjs/InternalFunction.h:
        (KJS::InternalFunction::InternalFunction):
        * kjs/JSFunction.h:
        (KJS::JSFunction::JSFunction):
        * kjs/ScopeChain.h:
        (KJS::ScopeChain::ScopeChain):
        * masm/IA32MacroAsm.h:
        (KJS::IA32MacroAssembler::):
        (KJS::IA32MacroAssembler::emitModRm_opm):
        (KJS::IA32MacroAssembler::emitCmpl_i32m):
        (KJS::IA32MacroAssembler::emitCallN_r):

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

        Reviewed by Mark Rowe.

        Exit instead of crashing in ctiUnsupported and ctiTimedOut.

        * VM/Machine.cpp:
        (KJS::ctiUnsupported):
        (KJS::ctiTimedOut):

2008-08-28  Oliver Hunt  <oliver@apple.com>

        Reviewed by Maciej Stachowiak.

        Implement codegen for op_jsr and op_sret.

        * VM/CTI.cpp:
        (KJS::CTI::privateCompile_pass1_Scan):
        (KJS::CTI::privateCompile_pass2_Main):
        (KJS::CTI::privateCompile):
        * VM/CTI.h:
        (KJS::CTI::JSRInfo::JSRInfo):
        * masm/IA32MacroAsm.h:
        (KJS::IA32MacroAssembler::emitJmpN_m):
        (KJS::IA32MacroAssembler::linkAbsoluteAddress):

2008-08-28  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Oliver Hunt.

        Initial support for exceptions (throw / catch must occur in same CodeBlock).

        * VM/CTI.cpp:
        (KJS::CTI::emitExceptionCheck):
        (KJS::CTI::emitCall):
        (KJS::CTI::privateCompile_pass2_Main):
        (KJS::CTI::privateCompile_pass4_SlowCases):
        (KJS::CTI::privateCompile):
        * VM/CTI.h:
        * VM/CodeBlock.cpp:
        (KJS::CodeBlock::nativeExceptionCodeForHandlerVPC):
        * VM/CodeBlock.h:
        * VM/CodeGenerator.cpp:
        (KJS::CodeGenerator::emitCatch):
        * VM/Machine.cpp:
        (KJS::Machine::throwException):
        (KJS::Machine::privateExecute):
        (KJS::ctiUnsupported):
        (KJS::ctiTimedOut):
        (KJS::Machine::cti_op_add):
        (KJS::Machine::cti_op_pre_inc):
        (KJS::Machine::cti_timeout_check):
        (KJS::Machine::cti_op_loop_if_less):
        (KJS::Machine::cti_op_put_by_id):
        (KJS::Machine::cti_op_get_by_id):
        (KJS::Machine::cti_op_instanceof):
        (KJS::Machine::cti_op_del_by_id):
        (KJS::Machine::cti_op_mul):
        (KJS::Machine::cti_op_call):
        (KJS::Machine::cti_op_resolve):
        (KJS::Machine::cti_op_construct):
        (KJS::Machine::cti_op_get_by_val):
        (KJS::Machine::cti_op_resolve_func):
        (KJS::Machine::cti_op_sub):
        (KJS::Machine::cti_op_put_by_val):
        (KJS::Machine::cti_op_lesseq):
        (KJS::Machine::cti_op_loop_if_true):
        (KJS::Machine::cti_op_negate):
        (KJS::Machine::cti_op_resolve_skip):
        (KJS::Machine::cti_op_div):
        (KJS::Machine::cti_op_pre_dec):
        (KJS::Machine::cti_op_jless):
        (KJS::Machine::cti_op_not):
        (KJS::Machine::cti_op_jtrue):
        (KJS::Machine::cti_op_post_inc):
        (KJS::Machine::cti_op_eq):
        (KJS::Machine::cti_op_lshift):
        (KJS::Machine::cti_op_bitand):
        (KJS::Machine::cti_op_rshift):
        (KJS::Machine::cti_op_bitnot):
        (KJS::Machine::cti_op_resolve_with_base):
        (KJS::Machine::cti_op_mod):
        (KJS::Machine::cti_op_less):
        (KJS::Machine::cti_op_neq):
        (KJS::Machine::cti_op_post_dec):
        (KJS::Machine::cti_op_urshift):
        (KJS::Machine::cti_op_bitxor):
        (KJS::Machine::cti_op_bitor):
        (KJS::Machine::cti_op_call_eval):
        (KJS::Machine::cti_op_throw):
        (KJS::Machine::cti_op_push_scope):
        (KJS::Machine::cti_op_stricteq):
        (KJS::Machine::cti_op_nstricteq):
        (KJS::Machine::cti_op_to_jsnumber):
        (KJS::Machine::cti_op_in):
        (KJS::Machine::cti_op_del_by_val):
        (KJS::Machine::cti_vm_throw):
        * VM/Machine.h:
        * kjs/ExecState.h:
        * masm/IA32MacroAsm.h:
        (KJS::IA32MacroAssembler::emitCmpl_i32m):

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

        Rubber-stamped by Oliver Hunt.

        Print debugging info to stderr so that run-webkit-tests can capture it.
        This makes it easy to check whether test failures are due to unimplemented
        op codes, missing support for exceptions, etc.

        * VM/CTI.cpp:
        (KJS::CTI::privateCompile_pass1_Scan):
        (KJS::CTI::printOpcodeOperandTypes):
        (KJS::CTI::privateCompile_pass2_Main):
        (KJS::CTI::privateCompile_pass4_SlowCases):
        (KJS::CTI::privateCompile):
        * VM/Machine.cpp:
        (KJS::Machine::privateExecute):
        (KJS::ctiException):
        (KJS::ctiUnsupported):
        (KJS::Machine::cti_op_call):
        (KJS::Machine::cti_op_resolve):
        (KJS::Machine::cti_op_construct):
        (KJS::Machine::cti_op_get_by_val):
        (KJS::Machine::cti_op_resolve_func):
        (KJS::Machine::cti_op_resolve_skip):
        (KJS::Machine::cti_op_resolve_with_base):
        (KJS::Machine::cti_op_call_eval):

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

        Reviewed by Gavin Barraclough and Maciej Stachowiak.

        Fix fast/js/bitwise-and-on-undefined.html.

        A temporary value in the slow path of op_bitand was being stored in edx, but was
        being clobbered by emitGetPutArg before we used it.  To fix this, emitGetPutArg
        now takes a third argument that specifies the scratch register to use when loading
        from memory.  This allows us to avoid clobbering the temporary in op_bitand.

        * VM/CTI.cpp:
        (KJS::CTI::emitGetPutArg):
        (KJS::CTI::privateCompile_pass2_Main):
        (KJS::CTI::privateCompile_pass4_SlowCases):
        * VM/CTI.h:

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

        Rubber-stamped by Oliver Hunt.

        Switch CTI on by default.

        * wtf/Platform.h:

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

        Reviewed by Oliver Hunt.

        Fix the build of the full WebKit stack.

        * JavaScriptCore.xcodeproj/project.pbxproj: Mark two new headers as private so they can be pulled in from WebCore.
        * VM/CTI.h: Fix build issues that show up when compiled with GCC 4.2 as part of WebCore.
        * wrec/WREC.h: Ditto.

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

        Reviewed by Sam Weinig.

        Implement op_new_error.  Does not fix any tests as it is always followed by the unimplemented op_throw.

        * VM/CTI.cpp:
        (KJS::CTI::privateCompile_pass1_Scan):
        (KJS::CTI::privateCompile_pass2_Main):
        * VM/Machine.cpp:
        (KJS::Machine::cti_op_new_error):
        * VM/Machine.h:

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

        Reviewed by Gavin Barraclough and Geoff Garen.

        Implement op_put_getter and op_put_setter.

        * VM/CTI.cpp:
        (KJS::CTI::privateCompile_pass1_Scan):
        (KJS::CTI::privateCompile_pass2_Main):
        * VM/Machine.cpp:
        (KJS::Machine::cti_op_put_getter):
        (KJS::Machine::cti_op_put_setter):
        * VM/Machine.h:

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

        Reviewed by Gavin Barraclough and Geoff Garen.

        Implement op_del_by_val fixing 3 mozilla tests.

        * VM/CTI.cpp:
        (KJS::CTI::privateCompile_pass1_Scan):
        (KJS::CTI::privateCompile_pass2_Main):
        * VM/Machine.cpp:
        (KJS::Machine::cti_op_del_by_val):
        * VM/Machine.h:

2008-08-27  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Oliver Hunt.

        Quick & dirty fix to get SamplingTool sampling op_call.

        * VM/SamplingTool.h:
        (KJS::SamplingTool::callingHostFunction):

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

        Reviewed by Gavin Barraclough and Geoff Garen.

        Fix op_put_by_index.

        * VM/CTI.cpp:
        (KJS::CTI::privateCompile_pass2_Main): Use emitPutArgConstant instead of emitGetPutArg
        for the property value.
        * VM/Machine.cpp:
        (KJS::Machine::cti_op_put_by_index): Get the property value from the correct argument.

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

        Reviewed by Gavin Barraclough and Geoff Garen.

        Implement op_switch_imm in the CTI fixing 13 mozilla tests.

        * VM/CTI.cpp:
        (KJS::CTI::privateCompile_pass1_Scan):
        (KJS::CTI::privateCompile_pass2_Main):
        * VM/Machine.cpp:
        (KJS::Machine::cti_op_switch_imm):
        * VM/Machine.h:

2008-08-27  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Oliver Hunt.

        Implement op_switch_char in CTI.

        * VM/CTI.cpp:
        (KJS::CTI::emitCall):
        (KJS::CTI::privateCompile_pass1_Scan):
        (KJS::CTI::privateCompile_pass2_Main):
        (KJS::CTI::privateCompile):
        * VM/CTI.h:
        (KJS::CallRecord::CallRecord):
        (KJS::SwitchRecord::SwitchRecord):
        * VM/CodeBlock.h:
        (KJS::SimpleJumpTable::SimpleJumpTable::ctiForValue):
        * VM/Machine.cpp:
        (KJS::Machine::cti_op_switch_char):
        * VM/Machine.h:
        * masm/IA32MacroAsm.h:
        (KJS::IA32MacroAssembler::):
        (KJS::IA32MacroAssembler::emitJmpN_r):
        (KJS::IA32MacroAssembler::getRelocatedAddress):
        * wtf/Platform.h:

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

        Reviewed by Mark Rowe.

        Implement op_put_by_index to fix 1 mozilla test.

        * VM/CTI.cpp:
        (KJS::CTI::privateCompile_pass1_Scan):
        (KJS::CTI::privateCompile_pass2_Main):
        * VM/Machine.cpp:
        (KJS::Machine::cti_op_put_by_index):
        * VM/Machine.h:

2008-08-26  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Geoff Garen.

        More fixes from Geoff's review.

        * VM/CTI.cpp:
        (KJS::CTI::emitGetArg):
        (KJS::CTI::emitGetPutArg):
        (KJS::CTI::emitPutArg):
        (KJS::CTI::emitPutArgConstant):
        (KJS::CTI::getConstantImmediateNumericArg):
        (KJS::CTI::emitGetCTIParam):
        (KJS::CTI::emitPutResult):
        (KJS::CTI::emitCall):
        (KJS::CTI::emitJumpSlowCaseIfNotImm):
        (KJS::CTI::emitJumpSlowCaseIfNotImms):
        (KJS::CTI::getDeTaggedConstantImmediate):
        (KJS::CTI::emitFastArithDeTagImmediate):
        (KJS::CTI::emitFastArithReTagImmediate):
        (KJS::CTI::emitFastArithPotentiallyReTagImmediate):
        (KJS::CTI::emitFastArithImmToInt):
        (KJS::CTI::emitFastArithIntToImmOrSlowCase):
        (KJS::CTI::privateCompile_pass2_Main):
        (KJS::CTI::privateCompile_pass4_SlowCases):
        (KJS::CTI::privateCompile):
        * VM/CTI.h:

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

        Reviewed by Gavin Barraclough and Geoff Garen.

        Implement op_jmp_scopes to fix 2 Mozilla tests.

        * VM/CTI.cpp:
        (KJS::CTI::privateCompile_pass1_Scan):
        (KJS::CTI::privateCompile_pass2_Main):
        * VM/Machine.cpp:
        (KJS::Machine::cti_op_push_new_scope): Update ExecState::m_scopeChain after calling ARG_setScopeChain.
        (KJS::Machine::cti_op_jmp_scopes):
        * VM/Machine.h:

2008-08-26  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Oliver Hunt.

        WebKit Regular Expression Compiler. (set ENABLE_WREC = 1 in Platform.h).

        * JavaScriptCore.xcodeproj/project.pbxproj:
        * kjs/regexp.cpp:
        * kjs/regexp.h:
        * wrec: Added.
        * wrec/WREC.cpp: Added.
        * wrec/WREC.h: Added.
        * wtf/Platform.h:

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

        Rubber-stamped by Oliver Hunt.

        Remove bogus assertion.

        * VM/Machine.cpp:
        (KJS::Machine::cti_op_del_by_id):

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

        Reviewed by Sam Weinig.

        Implement op_push_new_scope and stub out op_catch.  This fixes 11 Mozilla tests.

        * VM/CTI.cpp:
        (KJS::CTI::privateCompile_pass1_Scan):
        (KJS::CTI::privateCompile_pass2_Main):
        * VM/Machine.cpp:
        (KJS::Machine::cti_op_push_new_scope):
        (KJS::Machine::cti_op_catch):
        * VM/Machine.h:

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

        Reviewed by Sam Weinig.

        Clean up op_resolve_base so that it shares its implementation with the bytecode interpreter.

        * VM/Machine.cpp:
        (KJS::inlineResolveBase):
        (KJS::resolveBase):

2008-08-26  Oliver Hunt  <oliver@apple.com>

        Reviewed by Sam Weinig.

        Add codegen support for op_instanceof, fixing 15 mozilla tests.

        * VM/CTI.cpp:
        (KJS::CTI::privateCompile_pass1_Scan):
        (KJS::CTI::privateCompile_pass2_Main):
        * VM/Machine.cpp:
        (KJS::Machine::cti_op_instanceof):
        (KJS::Machine::cti_op_del_by_id):
        * VM/Machine.h:
        * wtf/Platform.h:

2008-08-26  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Geoff Garen.

        Fixes for initial review comments.

        * VM/CTI.cpp:
        (KJS::CTI::ctiCompileGetArg):
        (KJS::CTI::ctiCompileGetPutArg):
        (KJS::CTI::ctiCompilePutResult):
        (KJS::CTI::ctiCompileCall):
        (KJS::CTI::CTI):
        (KJS::CTI::privateCompile_pass1_Scan):
        (KJS::CTI::printOpcodeOperandTypes):
        (KJS::CTI::privateCompile_pass2_Main):
        (KJS::CTI::privateCompile_pass4_SlowCases):
        (KJS::CTI::privateCompile):
        * VM/CTI.h:
        * VM/Register.h:
        * kjs/JSValue.h:

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

        Reviewed by Gavin Barraclough and Geoff Garen.

        Fix up exception checking code.

        * VM/Machine.cpp:
        (KJS::Machine::cti_op_call):
        (KJS::Machine::cti_op_resolve):
        (KJS::Machine::cti_op_construct):
        (KJS::Machine::cti_op_resolve_func):
        (KJS::Machine::cti_op_resolve_skip):
        (KJS::Machine::cti_op_resolve_with_base):
        (KJS::Machine::cti_op_call_eval):

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

        Reviewed by Oliver Hunt.

        Fix slowcase for op_post_inc and op_post_dec fixing 2 mozilla tests.

        * VM/CTI.cpp:
        (KJS::CTI::privateCompile_pass4_SlowCases):

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

        Reviewed by Sam Weinig.

        Implement op_in, fixing 8 mozilla tests.

        * VM/CTI.cpp:
        (KJS::CTI::privateCompile_pass1_Scan):
        (KJS::CTI::privateCompile_pass2_Main):
        * VM/Machine.cpp:
        (KJS::Machine::cti_op_in):
        * VM/Machine.h:

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

        Rubber-stamped by Oliver Hunt.

        Don't hardcode the size of a Register for op_new_array.  Fixes a crash
        seen during the Mozilla tests.

        * VM/CTI.cpp:
        (KJS::CTI::privateCompile_pass2_Main):

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

        Reviewed by Gavin Barraclough and Geoff Garen.

        Add support for op_push_scope and op_pop_scope, fixing 20 mozilla tests.

        * VM/CTI.cpp:
        (KJS::CTI::privateCompile_pass1_Scan):
        (KJS::CTI::privateCompile_pass2_Main):
        * VM/CTI.h:
        * VM/Machine.cpp:
        (KJS::Machine::cti_op_push_scope):
        (KJS::Machine::cti_op_pop_scope):
        * VM/Machine.h:

2008-08-26  Oliver Hunt  <oliver@apple.com>

        Reviewed by Maciej Stachowiak.

        Add codegen support for op_del_by_id, fixing 49 mozilla tests.

        * VM/CTI.cpp:
        (KJS::CTI::privateCompile_pass1_Scan):
        (KJS::CTI::privateCompile_pass2_Main):
        * VM/Machine.cpp:
        (KJS::Machine::cti_op_del_by_id):
        * VM/Machine.h:

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

        Reviewed by Gavin Barraclough and Geoff Garen.

        Don't hardcode the size of a Register for op_get_scoped_var and op_put_scoped_var 
        fixing 513 mozilla tests in debug build.

        * VM/CTI.cpp:
        (KJS::CTI::privateCompile_pass2_Main):

2008-08-26  Oliver Hunt  <oliver@apple.com>

        Reviewed by Maciej Stachowiak.
        
        Added code generator support for op_loop, fixing around 60 mozilla tests.

        * VM/CTI.cpp:
        (KJS::CTI::privateCompile_pass1_Scan):
        (KJS::CTI::privateCompile_pass2_Main):

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

        Reviewed by Sam Weinig.

        Set -fomit-frame-pointer in the correct location.

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

2008-08-26  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Geoff Garen.
        
        Inital cut of CTI, Geoff's review fixes to follow.

        * JavaScriptCore.xcodeproj/project.pbxproj:
        * VM/CTI.cpp: Added.
        (KJS::getJCB):
        (KJS::CTI::ctiCompileGetArg):
        (KJS::CTI::ctiCompileGetPutArg):
        (KJS::CTI::ctiCompilePutArg):
        (KJS::CTI::ctiCompilePutArgImm):
        (KJS::CTI::ctiImmediateNumericArg):
        (KJS::CTI::ctiCompileGetCTIParam):
        (KJS::CTI::ctiCompilePutResult):
        (KJS::CTI::ctiCompileCall):
        (KJS::CTI::slowCaseIfNotImm):
        (KJS::CTI::slowCaseIfNotImms):
        (KJS::CTI::ctiFastArithDeTagConstImmediate):
        (KJS::CTI::ctiFastArithDeTagImmediate):
        (KJS::CTI::ctiFastArithReTagImmediate):
        (KJS::CTI::ctiFastArithPotentiallyReTagImmediate):
        (KJS::CTI::ctiFastArithImmToInt):
        (KJS::CTI::ctiFastArithIntToImmOrSlowCase):
        (KJS::CTI::CTI):
        (KJS::CTI::privateCompile_pass1_Scan):
        (KJS::CTI::ctiCompileAdd):
        (KJS::CTI::ctiCompileAddImm):
        (KJS::CTI::ctiCompileAddImmNotInt):
        (KJS::CTI::TEMP_HACK_PRINT_TYPES):
        (KJS::CTI::privateCompile_pass2_Main):
        (KJS::CTI::privateCompile_pass3_Link):
        (KJS::CTI::privateCompile_pass4_SlowCases):
        (KJS::CTI::privateCompile):
        * VM/CTI.h: Added.
        (KJS::CTI2Result::CTI2Result):
        (KJS::CallRecord::CallRecord):
        (KJS::JmpTable::JmpTable):
        (KJS::SlowCaseEntry::SlowCaseEntry):
        (KJS::CTI::compile):
        (KJS::CTI::LabelInfo::LabelInfo):
        * VM/CodeBlock.h:
        (KJS::CodeBlock::CodeBlock):
        (KJS::CodeBlock::~CodeBlock):
        * VM/Machine.cpp:
        (KJS::Machine::execute):
        (KJS::Machine::privateExecute):
        (KJS::ctiException):
        (KJS::ctiUnsupported):
        (KJS::ctiTimedOut):
        (KJS::Machine::cti_op_end):
        (KJS::Machine::cti_op_add):
        (KJS::Machine::cti_op_pre_inc):
        (KJS::Machine::cti_timeout_check):
        (KJS::Machine::cti_op_loop_if_less):
        (KJS::Machine::cti_op_new_object):
        (KJS::Machine::cti_op_put_by_id):
        (KJS::Machine::cti_op_get_by_id):
        (KJS::Machine::cti_op_mul):
        (KJS::Machine::cti_op_new_func):
        (KJS::Machine::cti_op_call):
        (KJS::Machine::cti_op_ret):
        (KJS::Machine::cti_op_new_array):
        (KJS::Machine::cti_op_resolve):
        (KJS::Machine::cti_op_construct):
        (KJS::Machine::cti_op_get_by_val):
        (KJS::Machine::cti_op_resolve_func):
        (KJS::Machine::cti_op_sub):
        (KJS::Machine::cti_op_put_by_val):
        (KJS::Machine::cti_op_lesseq):
        (KJS::Machine::cti_op_loop_if_true):
        (KJS::Machine::cti_op_negate):
        (KJS::Machine::cti_op_resolve_base):
        (KJS::Machine::cti_op_resolve_skip):
        (KJS::Machine::cti_op_div):
        (KJS::Machine::cti_op_pre_dec):
        (KJS::Machine::cti_op_jless):
        (KJS::Machine::cti_op_not):
        (KJS::Machine::cti_op_jtrue):
        (KJS::Machine::cti_op_post_inc):
        (KJS::Machine::cti_op_eq):
        (KJS::Machine::cti_op_lshift):
        (KJS::Machine::cti_op_bitand):
        (KJS::Machine::cti_op_rshift):
        (KJS::Machine::cti_op_bitnot):
        (KJS::Machine::cti_op_resolve_with_base):
        (KJS::Machine::cti_op_new_func_exp):
        (KJS::Machine::cti_op_mod):
        (KJS::Machine::cti_op_less):
        (KJS::Machine::cti_op_neq):
        (KJS::Machine::cti_op_post_dec):
        (KJS::Machine::cti_op_urshift):
        (KJS::Machine::cti_op_bitxor):
        (KJS::Machine::cti_op_new_regexp):
        (KJS::Machine::cti_op_bitor):
        (KJS::Machine::cti_op_call_eval):
        (KJS::Machine::cti_op_throw):
        (KJS::Machine::cti_op_get_pnames):
        (KJS::Machine::cti_op_next_pname):
        (KJS::Machine::cti_op_typeof):
        (KJS::Machine::cti_op_stricteq):
        (KJS::Machine::cti_op_nstricteq):
        (KJS::Machine::cti_op_to_jsnumber):
        * VM/Machine.h:
        * VM/Register.h:
        (KJS::Register::jsValue):
        (KJS::Register::getJSValue):
        (KJS::Register::codeBlock):
        (KJS::Register::scopeChain):
        (KJS::Register::i):
        (KJS::Register::r):
        (KJS::Register::vPC):
        (KJS::Register::jsPropertyNameIterator):
        * VM/SamplingTool.cpp:
        (KJS::):
        (KJS::SamplingTool::run):
        (KJS::SamplingTool::dump):
        * VM/SamplingTool.h:
        * kjs/JSImmediate.h:
        (KJS::JSImmediate::zeroImmediate):
        (KJS::JSImmediate::oneImmediate):
        * kjs/JSValue.h:
        * kjs/JSVariableObject.h:
        (KJS::JSVariableObject::JSVariableObjectData::offsetOf_registers):
        (KJS::JSVariableObject::offsetOf_d):
        (KJS::JSVariableObject::offsetOf_Data_registers):
        * masm: Added.
        * masm/IA32MacroAsm.h: Added.
        (KJS::JITCodeBuffer::JITCodeBuffer):
        (KJS::JITCodeBuffer::putByte):
        (KJS::JITCodeBuffer::putShort):
        (KJS::JITCodeBuffer::putInt):
        (KJS::JITCodeBuffer::getEIP):
        (KJS::JITCodeBuffer::start):
        (KJS::JITCodeBuffer::getOffset):
        (KJS::JITCodeBuffer::reset):
        (KJS::JITCodeBuffer::copy):
        (KJS::IA32MacroAssembler::):
        (KJS::IA32MacroAssembler::emitModRm_rr):
        (KJS::IA32MacroAssembler::emitModRm_rm):
        (KJS::IA32MacroAssembler::emitModRm_rmsib):
        (KJS::IA32MacroAssembler::emitModRm_opr):
        (KJS::IA32MacroAssembler::emitModRm_opm):
        (KJS::IA32MacroAssembler::IA32MacroAssembler):
        (KJS::IA32MacroAssembler::emitInt3):
        (KJS::IA32MacroAssembler::emitPushl_r):
        (KJS::IA32MacroAssembler::emitPopl_r):
        (KJS::IA32MacroAssembler::emitMovl_rr):
        (KJS::IA32MacroAssembler::emitAddl_rr):
        (KJS::IA32MacroAssembler::emitAddl_i8r):
        (KJS::IA32MacroAssembler::emitAddl_i32r):
        (KJS::IA32MacroAssembler::emitAddl_mr):
        (KJS::IA32MacroAssembler::emitAndl_rr):
        (KJS::IA32MacroAssembler::emitAndl_i32r):
        (KJS::IA32MacroAssembler::emitCmpl_i8r):
        (KJS::IA32MacroAssembler::emitCmpl_rr):
        (KJS::IA32MacroAssembler::emitCmpl_rm):
        (KJS::IA32MacroAssembler::emitCmpl_i32r):
        (KJS::IA32MacroAssembler::emitCmpw_rm):
        (KJS::IA32MacroAssembler::emitOrl_rr):
        (KJS::IA32MacroAssembler::emitOrl_i8r):
        (KJS::IA32MacroAssembler::emitSubl_rr):
        (KJS::IA32MacroAssembler::emitSubl_i8r):
        (KJS::IA32MacroAssembler::emitSubl_i32r):
        (KJS::IA32MacroAssembler::emitSubl_mr):
        (KJS::IA32MacroAssembler::emitTestl_i32r):
        (KJS::IA32MacroAssembler::emitTestl_rr):
        (KJS::IA32MacroAssembler::emitXorl_i8r):
        (KJS::IA32MacroAssembler::emitXorl_rr):
        (KJS::IA32MacroAssembler::emitSarl_i8r):
        (KJS::IA32MacroAssembler::emitSarl_CLr):
        (KJS::IA32MacroAssembler::emitShl_i8r):
        (KJS::IA32MacroAssembler::emitShll_CLr):
        (KJS::IA32MacroAssembler::emitMull_rr):
        (KJS::IA32MacroAssembler::emitIdivl_r):
        (KJS::IA32MacroAssembler::emitCdq):
        (KJS::IA32MacroAssembler::emitMovl_mr):
        (KJS::IA32MacroAssembler::emitMovzwl_mr):
        (KJS::IA32MacroAssembler::emitMovl_rm):
        (KJS::IA32MacroAssembler::emitMovl_i32r):
        (KJS::IA32MacroAssembler::emitMovl_i32m):
        (KJS::IA32MacroAssembler::emitLeal_mr):
        (KJS::IA32MacroAssembler::emitRet):
        (KJS::IA32MacroAssembler::JmpSrc::JmpSrc):
        (KJS::IA32MacroAssembler::JmpDst::JmpDst):
        (KJS::IA32MacroAssembler::emitCall):
        (KJS::IA32MacroAssembler::label):
        (KJS::IA32MacroAssembler::emitUnlinkedJmp):
        (KJS::IA32MacroAssembler::emitUnlinkedJne):
        (KJS::IA32MacroAssembler::emitUnlinkedJe):
        (KJS::IA32MacroAssembler::emitUnlinkedJl):
        (KJS::IA32MacroAssembler::emitUnlinkedJle):
        (KJS::IA32MacroAssembler::emitUnlinkedJge):
        (KJS::IA32MacroAssembler::emitUnlinkedJae):
        (KJS::IA32MacroAssembler::emitUnlinkedJo):
        (KJS::IA32MacroAssembler::emitPredictionNotTaken):
        (KJS::IA32MacroAssembler::link):
        (KJS::IA32MacroAssembler::copy):
        * wtf/Platform.h:

2008-08-26  Oliver Hunt  <oliver@apple.com>

        RS=Maciej.

        Enabled -fomit-frame-pointer on Release and Production builds, add additional Profiling build config for shark, etc.

        * JavaScriptCore.xcodeproj/project.pbxproj:

=== Start merge of squirrelfish-extreme ===

2008-09-06  Cameron Zwarich  <cwzwarich@uwaterloo.ca>

        Reviewed by Maciej Stachowiak.

        Fix the Mac Debug build by adding symbols that are exported only in a
        Debug configuration.

        * Configurations/JavaScriptCore.xcconfig:
        * DerivedSources.make:
        * JavaScriptCore.Debug.exp: Added.
        * JavaScriptCore.base.exp: Copied from JavaScriptCore.exp.
        * JavaScriptCore.exp: Removed.
        * JavaScriptCore.xcodeproj/project.pbxproj:

2008-09-05  Darin Adler  <darin@apple.com>

        Reviewed by Cameron Zwarich.

        - https://bugs.webkit.org/show_bug.cgi?id=20681
          JSPropertyNameIterator functions need to be inlined

        1.007x as fast on SunSpider overall
        1.081x as fast on SunSpider math-cordic

        * VM/JSPropertyNameIterator.cpp: Moved functions out of here.
        * VM/JSPropertyNameIterator.h:
        (KJS::JSPropertyNameIterator::JSPropertyNameIterator): Moved
        this into the header and marked it inline.
        (KJS::JSPropertyNameIterator::create): Ditto.
        (KJS::JSPropertyNameIterator::next): Ditto.

2008-09-05  Darin Adler  <darin@apple.com>

        Reviewed by Geoffrey Garen.

        - fix https://bugs.webkit.org/show_bug.cgi?id=20673
          single-character strings are churning in the Identifier table

        1.007x as fast on SunSpider overall
        1.167x as fast on SunSpider string-fasta

        * JavaScriptCore.exp: Updated.
        * kjs/SmallStrings.cpp:
        (KJS::SmallStrings::singleCharacterStringRep): Added.
        * kjs/SmallStrings.h: Added singleCharacterStringRep for clients that
        need just a UString, not a JSString.
        * kjs/identifier.cpp:
        (KJS::Identifier::add): Added special cases for single character strings
        so that the UString::Rep that ends up in the identifier table is the one
        from the single-character string optimization; otherwise we end up having
        to look it up in the identifier table over and over again.
        (KJS::Identifier::addSlowCase): Ditto.
        (KJS::Identifier::checkSameIdentifierTable): Made this function an empty
        inline in release builds so that callers don't have to put #ifndef NDEBUG
        at each call site.
        * kjs/identifier.h:
        (KJS::Identifier::add): Removed #ifndef NDEBUG around the calls to
        checkSameIdentifierTable.
        (KJS::Identifier::checkSameIdentifierTable): Added. Empty inline version
        for NDEBUG builds.

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

        Build fix.

        * kjs/JSObject.h: Move the inline virtual destructor after a non-inline
        virtual function so that the symbol for the vtable is not marked as a
        weakly exported symbol.

2008-09-05  Darin Adler  <darin@apple.com>

        Reviewed by Sam Weinig.

        - fix https://bugs.webkit.org/show_bug.cgi?id=20671
          JavaScriptCore string manipulation spends too much time in memcpy

        1.011x as fast on SunSpider overall
        1.028x as fast on SunSpider string tests

        For small strings, use a loop rather than calling memcpy. The loop can
        be faster because there's no function call overhead, and because it can
        assume the pointers are aligned instead of checking that. Currently the
        threshold is set at 20 characters, based on some testing on one particular
        computer. Later we can tune this for various platforms by setting
        USTRING_COPY_CHARS_INLINE_CUTOFF appropriately, but it does no great harm
        if not perfectly tuned.

        * kjs/ustring.cpp:
        (KJS::overflowIndicator): Removed bogus const.
        (KJS::maxUChars): Ditto.
        (KJS::copyChars): Added.
        (KJS::UString::Rep::createCopying): Call copyChars instead of memcpy.
        Also eliminated need for const_cast.
        (KJS::UString::expandPreCapacity): Ditto.
        (KJS::concatenate): Ditto.
        (KJS::UString::spliceSubstringsWithSeparators): Ditto.
        (KJS::UString::append): Ditto.

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

        Reviewed by Sam and Alexey.

        Make the profiler work with a null exec state.  This will allow other
        applications start the profiler to get DTrace probes going without
        needing a WebView.

        * ChangeLog:
        * profiler/ProfileGenerator.cpp:
        (KJS::ProfileGenerator::ProfileGenerator):
        (KJS::ProfileGenerator::willExecute):
        (KJS::ProfileGenerator::didExecute):
        * profiler/Profiler.cpp:
        (KJS::Profiler::startProfiling):
        (KJS::Profiler::stopProfiling):
        (KJS::dispatchFunctionToProfiles):

2008-09-04  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Geoffrey Garen.
        
        Fixed an off-by-one error that would cause the StructureIDChain to
        be one object too short.
        
        Can't construct a test case because other factors make this not crash
        (yet!).

        * kjs/StructureID.cpp:
        (KJS::StructureIDChain::StructureIDChain):

2008-09-04  Kevin Ollivier  <kevino@theolliviers.com>

        wx build fixes.

        * JavaScriptCoreSources.bkl:

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

        Reviewed by Eric Seidel.

        Fix https://bugs.webkit.org/show_bug.cgi?id=20639.
        Bug 20639: ENABLE_DASHBOARD_SUPPORT does not need to be a FEATURE_DEFINE

        * Configurations/JavaScriptCore.xcconfig: Remove ENABLE_DASHBOARD_SUPPORT from FEATURE_DEFINES.
        * wtf/Platform.h: Set ENABLE_DASHBOARD_SUPPORT for PLATFORM(MAC).

2008-09-04  Adele Peterson  <adele@apple.com>

        Build fix.

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

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

        Mac build fix.

        * kjs/config.h: Only check the value of HAVE_CONFIG_H if it is defined.

2008-09-04  Marco Barisione  <marco.barisione@collabora.co.uk>

        Reviewed by Eric Seidel.

        http://bugs.webkit.org/show_bug.cgi?id=20380
        [GTK][AUTOTOOLS] Include autotoolsconfig.h from config.h

        * kjs/config.h: Include the configuration header generated by
        autotools if available.

2008-09-04  Tor Arne Vestbø  <tavestbo@trolltech.com>

        Reviewed by Simon.

        Fix the QtWebKit build to match changes in r36016

        * JavaScriptCore.pri:

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

        Fix the 64-bit build.

        * VM/CodeBlock.cpp:
        (KJS::CodeBlock::printStructureID): Store the instruction offset into an unsigned local
        to avoid a warning related to format specifiers.
        (KJS::CodeBlock::printStructureIDs): Ditto.

2008-09-04  Cameron Zwarich  <cwzwarich@uwaterloo.ca>

        Rubber-stamped by Oliver Hunt.

        Correct the spelling of 'entryIndices'.

        * kjs/PropertyMap.cpp:
        (KJS::PropertyMap::get):
        (KJS::PropertyMap::getLocation):
        (KJS::PropertyMap::put):
        (KJS::PropertyMap::insert):
        (KJS::PropertyMap::remove):
        (KJS::PropertyMap::checkConsistency):
        * kjs/PropertyMap.h:
        (KJS::PropertyMapHashTable::entries):
        (KJS::PropertyMap::getOffset):
        (KJS::PropertyMap::putOffset):
        (KJS::PropertyMap::offsetForTableLocation):

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

        Reviewed by Cameron Zwarich.
        
        Fixed <rdar://problem/6193925> REGRESSION: Crash occurs at
        KJS::Machine::privateExecute() when attempting to load my Mobile Gallery
        (http://www.me.com/gallery/#home)
        
        also
        
        https://bugs.webkit.org/show_bug.cgi?id=20633 Crash in privateExecute
        @ cs.byu.edu
        
        The underlying problem was that we would cache prototype properties
        even if the prototype was a dictionary.
        
        The fix is to transition a prototype back from dictionary to normal
        status when an opcode caches access to it. (This is better than just
        refusing to cache, since a heavily accessed prototype is almost
        certainly not a true dictionary.)

        * VM/Machine.cpp:
        (KJS::Machine::tryCacheGetByID):
        * kjs/JSObject.h:

2008-09-03  Eric Seidel  <eric@webkit.org>

        Reviewed by Sam.

        Clean up Platform.h and add PLATFORM(CHROMIUM), PLATFORM(SKIA) and USE(V8_BINDINGS)

        * Configurations/JavaScriptCore.xcconfig: add missing ENABLE_*
        * wtf/ASCIICType.h: include <wtf/Assertions.h> since it depends on it.
        * wtf/Platform.h:

2008-09-03  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Tim.

        Remove the rest of the "zombie" code from the profiler.
        - There is no longer a need for the ProfilerClient callback mechanism.

        * API/JSProfilerPrivate.cpp:
        (JSStartProfiling):
        * JavaScriptCore.exp:
        * profiler/HeavyProfile.h:
        * profiler/ProfileGenerator.cpp:
        (KJS::ProfileGenerator::create):
        (KJS::ProfileGenerator::ProfileGenerator):
        * profiler/ProfileGenerator.h:
        (KJS::ProfileGenerator::profileGroup):
        * profiler/Profiler.cpp:
        (KJS::Profiler::startProfiling):
        (KJS::Profiler::stopProfiling): Immediately return the profile when
        stopped instead of using a callback.
        * profiler/Profiler.h:
        * profiler/TreeProfile.h:

2008-09-03  Adele Peterson  <adele@apple.com>

        Build fix.

        * wtf/win/MainThreadWin.cpp:

2008-09-02  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Darin and Tim.

        Remove most of the "zombie" mode from the profiler.  Next we will need
        to remove the client callback mechanism in profiles.

        - This simplifies the code, leverages the recent changes I've made in
        getting line numbers from SquirrelFish, and is a slight speed
        improvement on SunSpider.
        - Also the "zombie" mode was a constant source of odd edge cases and
        obscure bugs so it's good to remove since all of its issues may not have
        been found.

        * API/JSProfilerPrivate.cpp: No need to call didFinishAllExecution() any
        more.
        (JSEndProfiling):
        * JavaScriptCore.exp: Export the new signature of retrieveLastCaller()
        * VM/Machine.cpp:
        (KJS::Machine::execute): No need to call didFinishAllExecution() any
        more.
        (KJS::Machine::retrieveCaller): Now operates on InternalFunctions now
        since the RegisterFile is no longer guaranteeded to store only
        JSFunctions
        (KJS::Machine::retrieveLastCaller): Now also retrieve the function's
        name
        (KJS::Machine::callFrame): A result of changing retrieveCaller()
        * VM/Machine.h:
        * VM/Register.h: 
        * kjs/JSGlobalObject.cpp:
        (KJS::JSGlobalObject::~JSGlobalObject):
        * kjs/nodes.h:
        * profiler/ProfileGenerator.cpp:
        (KJS::ProfileGenerator::create): Now pass the original exec and get the
        global exec and client when necessary.  We need the original exec so we
        can have the stack frame where profiling started.
        (KJS::ProfileGenerator::ProfileGenerator): ditto.
        (KJS::ProfileGenerator::addParentForConsoleStart): This is where the 
        parent to star of the profile is added, if there is one.
        (KJS::ProfileGenerator::willExecute): Remove uglyness!
        (KJS::ProfileGenerator::didExecute): Ditto!
        (KJS::ProfileGenerator::stopProfiling):
        (KJS::ProfileGenerator::removeProfileStart): Use a better way to find
        and remove the function we are looking for.
        (KJS::ProfileGenerator::removeProfileEnd): Ditto.
        * profiler/ProfileGenerator.h:
        (KJS::ProfileGenerator::client):
        * profiler/ProfileNode.cpp:
        (KJS::ProfileNode::removeChild): Add a better way to remove a child from
        a ProfileNode.
        (KJS::ProfileNode::stopProfiling):
        (KJS::ProfileNode::debugPrintData): Modified a debug-only diagnostic
        function to be sane.
        * profiler/ProfileNode.h:
        * profiler/Profiler.cpp: Change to pass the original exec state.
        (KJS::Profiler::startProfiling):
        (KJS::Profiler::stopProfiling):
        (KJS::Profiler::willExecute):
        (KJS::Profiler::didExecute):
        (KJS::Profiler::createCallIdentifier):
        * profiler/Profiler.h:

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

        Reviewed by Darin Adler.

        Implement callOnMainThreadAndWait().

        This will be useful when a background thread needs to perform UI calls synchronously
        (e.g. an openDatabase() call cannot return until the user answers to a confirmation dialog).

        * wtf/MainThread.cpp:
        (WTF::FunctionWithContext::FunctionWithContext): Added a ThreadCondition member. When
        non-zero, the condition is signalled after the function is called.
        (WTF::mainThreadFunctionQueueMutex): Renamed from functionQueueMutex, sinc this is no longer
        static. Changed to be initialized from initializeThreading() to avoid lock contention.
        (WTF::initializeMainThread): On non-Windows platforms, just call mainThreadFunctionQueueMutex.
        (WTF::dispatchFunctionsFromMainThread): Signal synchronous calls when done.
        (WTF::callOnMainThread): Updated for functionQueueMutex rename.
        (WTF::callOnMainThreadAndWait):  Added.

        * wtf/MainThread.h: Added callOnMainThreadAndWait(); initializeMainThread() now exists on
        all platforms.

        * wtf/win/MainThreadWin.cpp: (WTF::initializeMainThread): Added a callOnMainThreadAndWait()
        call to initialize function queue mutex.

        * wtf/ThreadingGtk.cpp: (WTF::initializeThreading):
        * wtf/ThreadingPthreads.cpp: (WTF::initializeThreading):
        * wtf/ThreadingQt.cpp: (WTF::initializeThreading):
        Only initialize mainThreadIdentifier on non-Darwin platforms. It was not guaranteed to be
        accurate on Darwin.

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

        Reviewed by Darin Adler.
        
        Use isUndefinedOrNull() instead of separate checks for each in op_eq_null
        and op_neq_null.

        * VM/Machine.cpp:
        (KJS::Machine::privateExecute):

2008-09-02  Csaba Osztrogonac  <oszi@inf.u-szeged.hu>

        Reviewed by Darin Adler.

        Bug 20296: OpcodeStats doesn't build on platforms which don't have mergesort().
        <https://bugs.webkit.org/show_bug.cgi?id=20296>

        * VM/Opcode.cpp:
        (KJS::OpcodeStats::~OpcodeStats): mergesort() replaced with qsort()

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

        Reviewed by Oliver Hunt.
        
        Fast path for array.length and string.length.
        
        SunSpider says 0.5% faster.

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

        Reviewed by Anders Carlsson.
        
        Added optimized paths for comparing to null.
        
        SunSpider says 0.5% faster.

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

        Reviewed by Sam Weinig.

        Changed jsDriver.pl to dump the exact text you would need in order to
        reproduce a test result. This enables a fast workflow where you copy
        and paste a test failure in the terminal.

        * tests/mozilla/jsDriver.pl:

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.
        
        SunSpider says 0.5% faster, but that seems like noise.

        * JavaScriptCore.xcodeproj/project.pbxproj: Put PutPropertySlot into
        its own file, and added BatchedTransitionOptimizer.

        * VM/CodeBlock.cpp:
        (KJS::CodeBlock::~CodeBlock): Use array indexing instead of a pointer
        iterator.

        * VM/CodeGenerator.cpp:
        (KJS::CodeGenerator::CodeGenerator): Used BatchedTransitionOptimizer to
        make batched put and remove for declared variables fast, without forever
        pessimizing the global object. Removed the old getDirect/removeDirect hack
        that tried to do the same in a more limited way.

        * VM/CodeGenerator.h: Moved IdentifierRepHash to the KJS namespace since
        it doesn't specialize anything in WTF.

        * VM/Machine.cpp:
        (KJS::Machine::Machine): Nixed the DummyConstruct tag because it was
        confusingly named.

        (KJS::Machine::execute):  Used BatchedTransitionOptimizer, as above. Fixed
        up some comments.

        (KJS::cachePrototypeChain): Cast to JSObject*, since it's more specific.

        (KJS::Machine::tryCachePutByID): Use isNull() instead of comparing to
        jsNull(), since isNull() leaves more options open for the future.
        (KJS::Machine::tryCacheGetByID): ditto
        (KJS::Machine::privateExecute): ditto

        * VM/SamplingTool.cpp:
        (KJS::SamplingTool::dump): Use C++-style cast, to match our style
        guidelines.

        * kjs/BatchedTransitionOptimizer.h: Added. New class that allows host
        code to add a batch of properties to an object in an efficient way.

        * kjs/JSActivation.cpp: Use isNull(), as above.

        * kjs/JSArray.cpp: Get rid of DummyConstruct tag, as above.
        * kjs/JSArray.h:

        * kjs/JSGlobalData.cpp: Nixed two unused StructureIDs.
        * kjs/JSGlobalData.h:

        * kjs/JSImmediate.cpp: Use isNull(), as above.

        * kjs/JSObject.cpp:
        (KJS::JSObject::mark): Moved mark tracing code elsewhere, to make this
        function more readable.

        (KJS::JSObject::put): Use isNull(), as above.

        (KJS::JSObject::createInheritorID): Return a raw pointer, since the
        object is owned by a data member, not necessarily the caller.
        * kjs/JSObject.h:

        * kjs/JSString.cpp: Use isNull(), as above.

        * kjs/PropertyMap.h: Updated to use PropertySlot::invalidOffset.

        * kjs/PropertySlot.h: Changed KJS_INVALID_OFFSET to WTF::notFound
        because C macros are so 80's.

        * kjs/PutPropertySlot.h: Added. Split out of PropertySlot.h. Also renamed
        PutPropertySlot::SlotType to PutPropertySlot::Type, and slotBase to base,
        since "slot" was redundant.

        * kjs/StructureID.cpp: Added a new transition *away* from dictionary
        status, to support BatchedTransitionOptimizer.

        (KJS::StructureIDChain::StructureIDChain): No need to store m_size as
        a data member, so keep it in a local, which might be faster.
        * kjs/StructureID.h:

        * kjs/SymbolTable.h: Moved IdentifierRepHash to KJS namespace, as above.
        * kjs/ustring.h:

2008-09-02  Adam Roben  <aroben@apple.com>

        Windows build fixes

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Add
        StructureID.{cpp,h} to the project. Also let VS reorder this file.
        * VM/CodeBlock.cpp: Include StringExtras so that snprintf will be
        defined on Windows.

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

        Fix release build.

        * JavaScriptCore.exp:

2008-09-01  Jan Michael Alonzo  <jmalonzo@webkit.org>

        Reviewed by Oliver Hunt.

        Gtk buildfix

        * GNUmakefile.am:
        * kjs/PropertyMap.cpp: rename Identifier.h to identifier.h
        * kjs/StructureID.cpp: include JSObject.h

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

        Reviewed by Darin Adler.

        First cut at inline caching for access to vanilla JavaScript properties.
        
        SunSpider says 4% faster. Tests heavy on dictionary-like access have
        regressed a bit -- we have a lot of room to improve in this area,
        but this patch is over-ripe as-is.
        
        JSCells now have a StructureID that uniquely identifies their layout,
        and holds their prototype.
        
        JSValue::put takes a PropertySlot& argument, so it can fill in details
        about where it put a value, for the sake of caching.

        * VM/CodeGenerator.cpp:
        (KJS::CodeGenerator::CodeGenerator): Avoid calling removeDirect if we
        can, since it disables inline caching in the global object. This can
        probably improve in the future.

        * kjs/JSGlobalObject.cpp: Nixed reset(), since it complicates caching, and
        wasn't really necessary.

        * kjs/JSObject.cpp: Tweaked getter / setter behavior not to rely on the
        IsGetterSetter flag, since the flag was buggy. This is necessary in order
        to avoid accidentally accessing a getter / setter as a normal property.
        
        Also changed getter / setter creation to honor ReadOnly, matching Mozilla.
        
        * kjs/PropertyMap.cpp: Nixed clear(), since it complicates caching and
        isn't necessary.

        * kjs/Shell.cpp: Moved SamplingTool dumping outside the loop. This allows
        you to aggregate sampling of multiple files (or the same file repeatedly),
        which helped me track down regressions.

        * kjs/ustring.h: Moved IdentifierRepHash here to share it.

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

        Reviewed by Sam Weinig.

        Eagerly allocate the Math object's numeric constants. This avoids
        constantly reallocating them in loops, and also ensures that the Math
        object will not use the single property optimization, which makes
        properties ineligible for caching.

        SunSpider reports a small speedup, in combination with inline caching.

        * kjs/MathObject.cpp:
        (KJS::MathObject::MathObject):
        (KJS::MathObject::getOwnPropertySlot):
        * kjs/MathObject.h:

2008-09-01  Jan Michael Alonzo  <jmalonzo@webkit.org>

        Gtk build fix, not reviewed.

        * GNUmakefile.am: Add SmallStrings.cpp in both release and debug builds

2008-08-31  Cameron Zwarich  <cwzwarich@uwaterloo.ca>

        Reviewed by Maciej Stachowiak.

        Bug 20577: REGRESSION (r36006): Gmail is broken
        <https://bugs.webkit.org/show_bug.cgi?id=20577>

        r36006 changed stringProtoFuncSubstr() so that it is uses the more
        efficient jsSubstring(), rather than using UString::substr() and then
        calling jsString(). However, the change did not account for the case
        where the start and the length of the substring extend beyond the length
        of the original string. This patch corrects that.

        * kjs/StringPrototype.cpp:
        (KJS::stringProtoFuncSubstr):

2008-08-31  Simon Hausmann  <hausmann@wekit.org>

        Unreviewed build fix (with gcc 4.3)

        * kjs/ustring.h: Properly forward declare operator== for UString and
        the the concatenate functions inside the KJS namespace.

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

        Reviewed by Maciej.

        - https://bugs.webkit.org/show_bug.cgi?id=20333
          improve JavaScript speed when handling single-character strings

        1.035x as fast on SunSpider overall.
        1.127x as fast on SunSpider string tests.
        1.910x as fast on SunSpider string-base64 test.

        * API/JSObjectRef.cpp:
        (JSObjectMakeFunction): Removed unneeded explicit construction of UString.

        * GNUmakefile.am: Added SmallStrings.h and SmallStrings.cpp.
        * JavaScriptCore.pri: Ditto.
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
        Ditto.
        * JavaScriptCore.xcodeproj/project.pbxproj: Ditto.
        * JavaScriptCoreSources.bkl: Ditto.

        * JavaScriptCore.exp: Updated.

        * VM/Machine.cpp:
        (KJS::jsAddSlowCase): Changed to use a code path that doesn't involve
        a UString constructor. This avoids an extra jump caused by the "in charge"
        vs. "not in charge" constructors.
        (KJS::jsAdd): Ditto.
        (KJS::jsTypeStringForValue): Adopted jsNontrivialString.

        * kjs/ArrayPrototype.cpp:
        (KJS::arrayProtoFuncToString): Adopted jsEmptyString.
        (KJS::arrayProtoFuncToLocaleString): Ditto.
        (KJS::arrayProtoFuncJoin): Ditto.
        * kjs/BooleanPrototype.cpp:
        (KJS::booleanProtoFuncToString): Adopted jsNontrivialString.
        * kjs/DateConstructor.cpp:
        (KJS::callDate): Ditto.
        * kjs/DatePrototype.cpp:
        (KJS::formatLocaleDate): Adopted jsEmptyString and jsNontrivialString.
        (KJS::dateProtoFuncToString): Ditto.
        (KJS::dateProtoFuncToUTCString): Ditto.
        (KJS::dateProtoFuncToDateString): Ditto.
        (KJS::dateProtoFuncToTimeString): Ditto.
        (KJS::dateProtoFuncToLocaleString): Ditto.
        (KJS::dateProtoFuncToLocaleDateString): Ditto.
        (KJS::dateProtoFuncToLocaleTimeString): Ditto.
        (KJS::dateProtoFuncToGMTString): Ditto.

        * kjs/ErrorPrototype.cpp:
        (KJS::ErrorPrototype::ErrorPrototype): Ditto.
        (KJS::errorProtoFuncToString): Ditto.

        * kjs/JSGlobalData.h: Added SmallStrings.

        * kjs/JSString.cpp:
        (KJS::jsString): Eliminated the overload that takes a const char*.
        Added code to use SmallStrings to get strings of small sizes rather
        than creating a new JSString every time.
        (KJS::jsSubstring): Added. Used when creating a string from a substring
        to avoid creating a JSString in cases where the substring will end up
        empty or as one character.
        (KJS::jsOwnedString): Added the same code as in jsString.

        * kjs/JSString.h: Added new functions jsEmptyString, jsSingleCharacterString,
        jsSingleCharacterSubstring, jsSubstring, and jsNontrivialString for various
        cases where we want to create JSString, and want special handling for small
        strings.
        (KJS::JSString::JSString): Added an overload that takes a PassRefPtr of
        a UString::Rep so you don't have to construct a UString; PassRefPtr can be
        more efficient.
        (KJS::jsEmptyString): Added.
        (KJS::jsSingleCharacterString): Added.
        (KJS::jsSingleCharacterSubstring): Added.
        (KJS::jsNontrivialString): Added.
        (KJS::JSString::getIndex): Adopted jsSingleCharacterSubstring.
        (KJS::JSString::getStringPropertySlot): Ditto.

        * kjs/NumberPrototype.cpp:
        (KJS::numberProtoFuncToFixed): Adopted jsNontrivialString.
        (KJS::numberProtoFuncToExponential): Ditto.
        (KJS::numberProtoFuncToPrecision): Ditto.

        * kjs/ObjectPrototype.cpp:
        (KJS::objectProtoFuncToLocaleString): Adopted toThisJSString.
        (KJS::objectProtoFuncToString): Adopted jsNontrivialString.

        * kjs/RegExpConstructor.cpp: Separated the lastInput value that's used
        with the lastOvector to return matches from the input value that can be
        changed via JavaScript. They will be equal in many cases, but not all.
        (KJS::RegExpConstructor::performMatch): Set input.
        (KJS::RegExpMatchesArray::RegExpMatchesArray): Ditto.
        (KJS::RegExpMatchesArray::fillArrayInstance): Adopted jsSubstring. Also,
        use input rather than lastInput in the appropriate place.
        (KJS::RegExpConstructor::getBackref): Adopted jsSubstring and jsEmptyString.
        Added code to handle the case where there is no backref -- before this
        depended on range checking in UString::substr which is not present in
        jsSubstring.
        (KJS::RegExpConstructor::getLastParen): Ditto.
        (KJS::RegExpConstructor::getLeftContext): Ditto.
        (KJS::RegExpConstructor::getRightContext): Ditto.
        (KJS::RegExpConstructor::getValueProperty): Use input rather than lastInput.
        Also adopt jsEmptyString.
        (KJS::RegExpConstructor::putValueProperty): Ditto.
        (KJS::RegExpConstructor::input): Ditto.

        * kjs/RegExpPrototype.cpp:
        (KJS::regExpProtoFuncToString): Adopt jsNonTrivialString. Also changed to
        use UString::append to append single characters rather than using += and
        a C-style string.

        * kjs/SmallStrings.cpp: Added.
        (KJS::SmallStringsStorage::SmallStringsStorage): Construct the
        buffer and UString::Rep for all 256 single-character strings for
        the U+0000 through U+00FF. This covers all the values used in
        the base64 test as well as most values seen elsewhere on the web
        as well. It's possible that later we might fix this to only work
        for U+0000 through U+007F but the others are used quite a bit in
        the current version of the base64 test.
        (KJS::SmallStringsStorage::~SmallStringsStorage): Free memory.
        (KJS::SmallStrings::SmallStrings): Create a set of small strings,
        initially not created; created later when they are used.
        (KJS::SmallStrings::~SmallStrings): Deallocate. Not left compiler
        generated because the SmallStringsStorage class's destructor needs
        to be visible.
        (KJS::SmallStrings::mark): Mark all the strings.
        (KJS::SmallStrings::createEmptyString): Create a cell for the
        empty string. Called only the first time.
        (KJS::SmallStrings::createSingleCharacterString): Create a cell
        for one of the single-character strings. Called only the first time.
        * kjs/SmallStrings.h: Added.

        * kjs/StringConstructor.cpp:
        (KJS::stringFromCharCodeSlowCase): Factored out of strinFromCharCode.
        Only used for cases where the caller does not pass exactly one argument.
        (KJS::stringFromCharCode): Adopted jsSingleCharacterString.
        (KJS::callStringConstructor): Adopted jsEmptyString.

        * kjs/StringObject.cpp:
        (KJS::StringObject::StringObject): Adopted jsEmptyString.

        * kjs/StringPrototype.cpp:
        (KJS::stringProtoFuncReplace): Adopted jsSubstring.
        (KJS::stringProtoFuncCharAt): Adopted jsEmptyString and
        jsSingleCharacterSubstring and also added a special case when the
        index is an immediate number to avoid conversion to and from floating
        point, since that's the common case.
        (KJS::stringProtoFuncCharCodeAt): Ditto.
        (KJS::stringProtoFuncMatch): Adopted jsSubstring and jsEmptyString.
        (KJS::stringProtoFuncSlice): Adopted jsSubstring and
        jsSingleCharacterSubstring. Also got rid of some unneeded locals and
        removed unneeded code to set the length property of the array, since it
        is automatically updated as values are added to the array.
        (KJS::stringProtoFuncSplit): Adopted jsEmptyString.
        (KJS::stringProtoFuncSubstr): Adopted jsSubstring.
        (KJS::stringProtoFuncSubstring): Ditto.

        * kjs/collector.cpp:
        (KJS::Heap::collect): Added a call to mark SmallStrings.

        * kjs/ustring.cpp:
        (KJS::UString::expandedSize): Made this a static member function since
        it doesn't need to look at any data members.
        (KJS::UString::expandCapacity): Use a non-inline function, makeNull, to
        set the rep to null in failure cases. This avoids adding a PIC branch for
        the normal case when there is no failure.
        (KJS::UString::expandPreCapacity): Ditto.
        (KJS::UString::UString): Ditto.
        (KJS::concatenate): Refactored the concatenation constructor into this
        separate function. Calling the concatenation constructor was leading to
        an extra branch because of the in-charge vs. not-in-charge versions not
        both being inlined, and this was showing up as nearly 1% on Shark. Also
        added a special case for when the second string is a single character,
        since it's a common idiom to build up a string that way and we can do
        things much more quickly, without involving memcpy for example. Also
        adopted the non-inline function, nullRep, for the same reason given for
        makeNull above.
        (KJS::UString::append): Adopted makeNull for failure cases.
        (KJS::UString::operator=): Ditto.
        (KJS::UString::toDouble): Added a special case for converting single
        character strings to numbers. We're doing this a ton of times while
        running the base64 test.
        (KJS::operator==): Added special cases so we can compare single-character
        strings without calling memcmp. Later we might want to special case other
        short lengths similarly.
        (KJS::UString::makeNull): Added.
        (KJS::UString::nullRep): Added.
        * kjs/ustring.h: Added declarations for the nullRep and makeNull. Changed
        expandedSize to be a static member function. Added a declaration of the
        concatenate function. Removed the concatenation constructor. Rewrote
        operator+ to use the concatenate function.

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

        Build fix.

        * VM/Machine.cpp:
        (KJS::getCPUTime):

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

        Reviewed by Darin Adler.

        <rdar://problem/6174667> 
        When a machine is under heavy load, the Slow Script dialog often comes up many times and just gets in the way
        
        Instead of using clock time, use the CPU time spent executing the current thread when
        determining if the script has been running for too long.
        
        * VM/Machine.cpp:
        (KJS::getCPUTime):
        (KJS::Machine::checkTimeout):

2008-08-28  Cameron Zwarich  <cwzwarich@uwaterloo.ca>

        Rubber-stamped by Sam Weinig.

        Change 'term' to 'expr' in variable names to standardize terminology.

        * kjs/nodes.cpp:
        (KJS::BinaryOpNode::emitCode):
        (KJS::ReverseBinaryOpNode::emitCode):
        (KJS::ThrowableBinaryOpNode::emitCode):
        * kjs/nodes.h:
        (KJS::BinaryOpNode::BinaryOpNode):
        (KJS::ReverseBinaryOpNode::ReverseBinaryOpNode):
        (KJS::MultNode::):
        (KJS::DivNode::):
        (KJS::ModNode::):
        (KJS::AddNode::):
        (KJS::SubNode::):
        (KJS::LeftShiftNode::):
        (KJS::RightShiftNode::):
        (KJS::UnsignedRightShiftNode::):
        (KJS::LessNode::):
        (KJS::GreaterNode::):
        (KJS::LessEqNode::):
        (KJS::GreaterEqNode::):
        (KJS::ThrowableBinaryOpNode::):
        (KJS::InstanceOfNode::):
        (KJS::InNode::):
        (KJS::EqualNode::):
        (KJS::NotEqualNode::):
        (KJS::StrictEqualNode::):
        (KJS::NotStrictEqualNode::):
        (KJS::BitAndNode::):
        (KJS::BitOrNode::):
        (KJS::BitXOrNode::):
        * kjs/nodes2string.cpp:
        (KJS::MultNode::streamTo):
        (KJS::DivNode::streamTo):
        (KJS::ModNode::streamTo):
        (KJS::AddNode::streamTo):
        (KJS::SubNode::streamTo):
        (KJS::LeftShiftNode::streamTo):
        (KJS::RightShiftNode::streamTo):
        (KJS::UnsignedRightShiftNode::streamTo):
        (KJS::LessNode::streamTo):
        (KJS::GreaterNode::streamTo):
        (KJS::LessEqNode::streamTo):
        (KJS::GreaterEqNode::streamTo):
        (KJS::InstanceOfNode::streamTo):
        (KJS::InNode::streamTo):
        (KJS::EqualNode::streamTo):
        (KJS::NotEqualNode::streamTo):
        (KJS::StrictEqualNode::streamTo):
        (KJS::NotStrictEqualNode::streamTo):
        (KJS::BitAndNode::streamTo):
        (KJS::BitXOrNode::streamTo):
        (KJS::BitOrNode::streamTo):

2008-08-28  Alp Toker  <alp@nuanti.com>

        GTK+ dist/build fix. List newly added header files.

        * GNUmakefile.am:

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

        Reviewed by Oliver Hunt.

        Change to throw a ReferenceError at runtime instead of a ParseError
        at parse time, when the left hand side expression of a for-in statement
        is not an lvalue.

        * kjs/grammar.y:
        * kjs/nodes.cpp:
        (KJS::ForInNode::emitCode):

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

        Not reviewed, build fix (at least for OpenBSD, posssibly more).

        https://bugs.webkit.org/show_bug.cgi?id=20545
        missing #include <unistd.h> in JavaScriptCore/VM/SamplingTool.cpp

        * VM/SamplingTool.cpp: add the missing include.

2008-08-26  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Geoff and Cameron.

        <rdar://problem/6174603> Hitting assertion in Register::codeBlock when
        loading facebook (20516).

        - This was a result of my line numbers change.  After a host function is
        called the stack does not get reset correctly.
        - Oddly this also appears to be a slight speedup on SunSpider.

        * VM/Machine.cpp:
        (KJS::Machine::privateExecute):

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

        Reviewed by Geoff and Tim.

        Export new API methods.

        * JavaScriptCore.exp:

2008-08-25  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Geoff, Tim and Mark.

        <rdar://problem/6150623> JSProfiler: It would be nice if the profiles
        in the console said what file and line number they came from
        - Lay the foundation for getting line numbers and other data from the
        JavaScript engine.  With the cleanup in kjs/ExecState this is actually
        a slight performance improvement.

        * JavaScriptCore.exp: Export retrieveLastCaller() for WebCore.
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * VM/Machine.cpp: Now Host and JS functions set a call frame on the
        exec state, so this and the profiler code were pulled out of the
        branches.
        (KJS::Machine::privateExecute):
        (KJS::Machine::retrieveLastCaller): This get's the lineNumber, sourceID
        and sourceURL for the previously called function.
        * VM/Machine.h:
        * kjs/ExecState.cpp: Remove references to JSFunction since it's not used
        anywhere.
        * kjs/ExecState.h:

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

        Reviewed by Darin Adler.

        Ensure that JSGlobalContextRelease() performs garbage collection, even if there are other
        contexts in the current context's group.

        This is only really necessary when the last reference is released, but there is no way to
        determine that, and no harm in collecting slightly more often.

        * API/JSContextRef.cpp: (JSGlobalContextRelease): Explicitly collect the heap if it is not
        being destroyed.

2008-08-24  Cameron Zwarich  <cwzwarich@uwaterloo.ca>

        Reviewed by Oliver Hunt.

        Bug 20093: JSC shell does not clear exceptions after it executes toString on an expression
        <https://bugs.webkit.org/show_bug.cgi?id=20093>

        Clear exceptions after evaluating any code in the JSC shell. We do not
        report exceptions that are caused by calling toString on the final
        valued, but at least we avoid incorrect behaviour.

        Also, print any exceptions that occurred while evaluating code at the
        interactive prompt, not just while evaluating code from a file.

        * kjs/Shell.cpp:
        (runWithScripts):
        (runInteractive):

2008-08-24  Cameron Zwarich  <cwzwarich@uwaterloo.ca>

        Reviewed by Oliver.

        Remove an unnecessary RefPtr to a RegisterID.

        * kjs/nodes.cpp:
        (KJS::DeleteBracketNode::emitCode):

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

        Reviewed by Oliver Hunt.

        Use the correct version number for when JSGlobalContextCreate was introduced.

        * API/JSContextRef.h:

2008-08-23  Cameron Zwarich  <cwzwarich@uwaterloo.ca>

        Rubber-stamped by Mark Rowe.

        Remove modelines.

        * API/APICast.h:
        * API/JSBase.cpp:
        * API/JSCallbackConstructor.cpp:
        * API/JSCallbackConstructor.h:
        * API/JSCallbackFunction.cpp:
        * API/JSCallbackFunction.h:
        * API/JSCallbackObject.cpp:
        * API/JSCallbackObject.h:
        * API/JSCallbackObjectFunctions.h:
        * API/JSClassRef.cpp:
        * API/JSContextRef.cpp:
        * API/JSObjectRef.cpp:
        * API/JSProfilerPrivate.cpp:
        * API/JSStringRef.cpp:
        * API/JSStringRefBSTR.cpp:
        * API/JSStringRefCF.cpp:
        * API/JSValueRef.cpp:
        * API/tests/JSNode.c:
        * API/tests/JSNode.h:
        * API/tests/JSNodeList.c:
        * API/tests/JSNodeList.h:
        * API/tests/Node.c:
        * API/tests/Node.h:
        * API/tests/NodeList.c:
        * API/tests/NodeList.h:
        * API/tests/minidom.c:
        * API/tests/minidom.js:
        * API/tests/testapi.c:
        * API/tests/testapi.js:
        * JavaScriptCore.pro:
        * kjs/FunctionConstructor.h:
        * kjs/FunctionPrototype.h:
        * kjs/JSArray.h:
        * kjs/JSString.h:
        * kjs/JSWrapperObject.cpp:
        * kjs/NumberConstructor.h:
        * kjs/NumberObject.h:
        * kjs/NumberPrototype.h:
        * kjs/lexer.h:
        * kjs/lookup.h:
        * wtf/Assertions.cpp:
        * wtf/Assertions.h:
        * wtf/HashCountedSet.h:
        * wtf/HashFunctions.h:
        * wtf/HashIterators.h:
        * wtf/HashMap.h:
        * wtf/HashSet.h:
        * wtf/HashTable.h:
        * wtf/HashTraits.h:
        * wtf/ListHashSet.h:
        * wtf/ListRefPtr.h:
        * wtf/Noncopyable.h:
        * wtf/OwnArrayPtr.h:
        * wtf/OwnPtr.h:
        * wtf/PassRefPtr.h:
        * wtf/Platform.h:
        * wtf/RefPtr.h:
        * wtf/RefPtrHashMap.h:
        * wtf/RetainPtr.h:
        * wtf/UnusedParam.h:
        * wtf/Vector.h:
        * wtf/VectorTraits.h:
        * wtf/unicode/Unicode.h:
        * wtf/unicode/icu/UnicodeIcu.h:

2008-08-22  Cameron Zwarich  <cwzwarich@uwaterloo.ca>

        Reviewed by Oliver.

        Some cleanup to match our coding style.

        * VM/CodeGenerator.h:
        * VM/Machine.cpp:
        (KJS::Machine::privateExecute):
        * kjs/ExecState.cpp:
        * kjs/ExecState.h:
        * kjs/completion.h:
        * kjs/identifier.cpp:
        (KJS::Identifier::equal):
        (KJS::CStringTranslator::hash):
        (KJS::CStringTranslator::equal):
        (KJS::CStringTranslator::translate):
        (KJS::UCharBufferTranslator::equal):
        (KJS::UCharBufferTranslator::translate):
        (KJS::Identifier::remove):
        * kjs/operations.h:

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

        Windows build fix.

        * API/WebKitAvailability.h: Define DEPRECATED_ATTRIBUTE.

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.

        * kjs/JSGlobalData.cpp:
        (KJS::JSGlobalData::~JSGlobalData):
        (KJS::JSGlobalData::JSGlobalData): Re-add shared instance.
        (KJS::JSGlobalData::sharedInstanceExists): Ditto.
        (KJS::JSGlobalData::sharedInstance): Ditto.
        (KJS::JSGlobalData::sharedInstanceInternal): Ditto.

        * API/JSContextRef.h: Deprecated JSGlobalContextCreate(). Added a very conservative
        description of its threading model (nothing is allowed).

        * API/JSContextRef.cpp:
        (JSGlobalContextCreate): Use shared JSGlobalData.
        (JSGlobalContextCreateInGroup): Support passing NULL group to request a unique one.
        (JSGlobalContextRetain): Added back locking.
        (JSGlobalContextRelease): Ditto.
        (JSContextGetGlobalObject): Ditto.

        * API/tests/minidom.c: (main):
        * API/tests/testapi.c: (main):
        Switched to JSGlobalContextCreateInGroup() to avoid deprecation warnings.

        * JavaScriptCore.exp: Re-added JSLock methods. Added JSGlobalContextCreateInGroup (d'oh!).

        * API/JSBase.cpp:
        (JSEvaluateScript):
        (JSCheckScriptSyntax):
        (JSGarbageCollect):
        * API/JSCallbackConstructor.cpp:
        (KJS::constructJSCallback):
        * API/JSCallbackFunction.cpp:
        (KJS::JSCallbackFunction::call):
        * API/JSCallbackObjectFunctions.h:
        (KJS::::init):
        (KJS::::getOwnPropertySlot):
        (KJS::::put):
        (KJS::::deleteProperty):
        (KJS::::construct):
        (KJS::::hasInstance):
        (KJS::::call):
        (KJS::::getPropertyNames):
        (KJS::::toNumber):
        (KJS::::toString):
        (KJS::::staticValueGetter):
        (KJS::::callbackGetter):
        * API/JSObjectRef.cpp:
        (JSObjectMake):
        (JSObjectMakeFunctionWithCallback):
        (JSObjectMakeConstructor):
        (JSObjectMakeFunction):
        (JSObjectHasProperty):
        (JSObjectGetProperty):
        (JSObjectSetProperty):
        (JSObjectGetPropertyAtIndex):
        (JSObjectSetPropertyAtIndex):
        (JSObjectDeleteProperty):
        (JSObjectCallAsFunction):
        (JSObjectCallAsConstructor):
        (JSObjectCopyPropertyNames):
        (JSPropertyNameArrayRelease):
        (JSPropertyNameAccumulatorAddName):
        * API/JSValueRef.cpp:
        (JSValueIsEqual):
        (JSValueIsInstanceOfConstructor):
        (JSValueMakeNumber):
        (JSValueMakeString):
        (JSValueToNumber):
        (JSValueToStringCopy):
        (JSValueToObject):
        (JSValueProtect):
        (JSValueUnprotect):
        * ForwardingHeaders/JavaScriptCore/JSLock.h: Added.
        * GNUmakefile.am:
        * JavaScriptCore.pri:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * JavaScriptCoreSources.bkl:
        * kjs/AllInOneFile.cpp:
        * kjs/JSGlobalData.h:
        * kjs/JSGlobalObject.cpp:
        (KJS::JSGlobalObject::~JSGlobalObject):
        (KJS::JSGlobalObject::init):
        * kjs/JSLock.cpp: Added.
        (KJS::createJSLockCount):
        (KJS::JSLock::lockCount):
        (KJS::setLockCount):
        (KJS::JSLock::JSLock):
        (KJS::JSLock::lock):
        (KJS::JSLock::unlock):
        (KJS::JSLock::currentThreadIsHoldingLock):
        (KJS::JSLock::DropAllLocks::DropAllLocks):
        (KJS::JSLock::DropAllLocks::~DropAllLocks):
        * kjs/JSLock.h: Added.
        (KJS::JSLock::JSLock):
        (KJS::JSLock::~JSLock):
        * kjs/Shell.cpp:
        (functionGC):
        (jscmain):
        * kjs/collector.cpp:
        (KJS::Heap::~Heap):
        (KJS::Heap::heapAllocate):
        (KJS::Heap::setGCProtectNeedsLocking):
        (KJS::Heap::protect):
        (KJS::Heap::unprotect):
        (KJS::Heap::collect):
        * kjs/identifier.cpp:
        * kjs/interpreter.cpp:
        (KJS::Interpreter::checkSyntax):
        (KJS::Interpreter::evaluate):
        Re-added implicit locking.

2008-08-19  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Tim and Mark.

        Implement DTrace hooks for dashcode and instruments.

        * API/JSProfilerPrivate.cpp: Added. Expose SPI so that profiling can be
        turned on from a client.  The DTrace probes were added within the
        profiler mechanism for performance reasons so the profiler must be
        started to enable tracing.
        (JSStartProfiling):
        (JSEndProfiling):
        * API/JSProfilerPrivate.h: Added. Ditto.
        * JavaScriptCore.exp: Exposing the start/stop methods to clients.
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * kjs/Tracing.d: Define the DTrace probes.
        * kjs/Tracing.h: Ditto.
        * profiler/ProfileGenerator.cpp: Implement the DTrace probes in the
        profiler.
        (KJS::ProfileGenerator::willExecute):
        (KJS::ProfileGenerator::didExecute):

2008-08-19  Steve Falkenburg  <sfalken@apple.com>

        Build fix.
        
        * kjs/operations.cpp:
        (KJS::equal):

2008-08-18  Timothy Hatcher  <timothy@apple.com>

        Fix an assertion when generating a heavy profile because the
        empty value and deleted value of CallIdentifier where equal.

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

        Reviewed by Dan Bernstein.

        * profiler/CallIdentifier.h: Make the emptyValue for CallIdentifier
        use empty strings for URL and function name.

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

        Reviewed by Geoff.

        - eliminate JSValue::type()

        This will make it slightly easier to change the JSImmediate design without
        having to touch so many call sites.

        SunSpider says this change is a wash (looked like a slight speedup, but not
        statistically significant).

        * API/JSStringRef.cpp: Removed include of JSType.h.
        * API/JSValueRef.cpp: Removed include of JSType.h.
        (JSValueGetType): Replaced use of JSValue::type() with
        JSValue::is functions.

        * JavaScriptCore.exp: Updated.

        * VM/JSPropertyNameIterator.cpp: Removed type() implementation.
        (KJS::JSPropertyNameIterator::toPrimitive): Changed to take
        PreferredPrimitiveType argument instead of JSType.
        * VM/JSPropertyNameIterator.h: Ditto.

        * VM/Machine.cpp:
        (KJS::fastIsNumber): Updated for name change.
        (KJS::fastToInt32): Ditto.
        (KJS::fastToUInt32): Ditto.
        (KJS::jsAddSlowCase): Updated toPrimitive caller for change from
        JSType to PreferredPrimitiveType.
        (KJS::jsAdd): Replaced calls to JSValue::type() with calls to
        JSValue::isString().
        (KJS::jsTypeStringForValue): Replaced calls to JSValue::type()
        with multiple calls to JSValue::is -- we could make this a
        virtual function instead if we want to have faster performance.
        (KJS::Machine::privateExecute): Renamed JSImmediate::toTruncatedUInt32
        to JSImmediate::getTruncatedUInt32 for consistency with other functions.
        Changed two calls of JSValue::type() to JSValue::isString().

        * kjs/GetterSetter.cpp:
        (KJS::GetterSetter::toPrimitive): Changed to take
        PreferredPrimitiveType argument instead of JSType.
        (KJS::GetterSetter::isGetterSetter): Added.
        * kjs/GetterSetter.h:

        * kjs/JSCell.cpp:
        (KJS::JSCell::isString): Added.
        (KJS::JSCell::isGetterSetter): Added.
        (KJS::JSCell::isObject): Added.

        * kjs/JSCell.h: Eliminated type function. Added isGetterSetter.
        Made isString and isObject virtual. Changed toPrimitive to take
        PreferredPrimitiveType argument instead of JSType.
        (KJS::JSCell::isNumber): Use Heap::isNumber for faster performance.
        (KJS::JSValue::isGetterSetter): Added.
        (KJS::JSValue::toPrimitive): Changed to take
        PreferredPrimitiveType argument instead of JSType.

        * kjs/JSImmediate.h: Removed JSValue::type() and replaced
        JSValue::toTruncatedUInt32 with JSValue::getTruncatedUInt32.
        (KJS::JSImmediate::isEitherImmediate): Added.

        * kjs/JSNotAnObject.cpp:
        (KJS::JSNotAnObject::toPrimitive): Changed to take
        PreferredPrimitiveType argument instead of JSType.
        * kjs/JSNotAnObject.h: Ditto.
        * kjs/JSNumberCell.cpp:
        (KJS::JSNumberCell::toPrimitive): Ditto.
        * kjs/JSNumberCell.h:
        (KJS::JSNumberCell::toInt32): Renamed from fastToInt32. There's no
        other "slow" version of this once you have a JSNumberCell, so there's
        no need for "fast" in the name. It's a feature that this hides the
        base class toInt32, which does the same job less efficiently (and has
        an additional ExecState argument).
        (KJS::JSNumberCell::toUInt32): Ditto.

        * kjs/JSObject.cpp:
        (KJS::callDefaultValueFunction): Use isGetterSetter instead of type.
        (KJS::JSObject::getPrimitiveNumber): Use PreferredPrimitiveType.
        (KJS::JSObject::defaultValue): Ditto.
        (KJS::JSObject::defineGetter): Use isGetterSetter.
        (KJS::JSObject::defineSetter): Ditto.
        (KJS::JSObject::lookupGetter): Ditto.
        (KJS::JSObject::lookupSetter): Ditto.
        (KJS::JSObject::toNumber): Use PreferredPrimitiveType.
        (KJS::JSObject::toString): Ditto.
        (KJS::JSObject::isObject): Added.

        * kjs/JSObject.h:
        (KJS::JSObject::inherits): Call the isObject from JSCell; it's now
        hidden by our override of isObject.
        (KJS::JSObject::getOwnPropertySlotForWrite): Use isGetterSetter
        instead of type.
        (KJS::JSObject::getOwnPropertySlot): Ditto.
        (KJS::JSObject::toPrimitive): Use PreferredPrimitiveType.

        * kjs/JSString.cpp:
        (KJS::JSString::toPrimitive): Use PreferredPrimitiveType.
        (KJS::JSString::isString): Added.
        * kjs/JSString.h: Ditto.

        * kjs/JSValue.h: Removed type(), added isGetterSetter(). Added
        PreferredPrimitiveType enum and used it as the argument for the
        toPrimitive function.
        (KJS::JSValue::getBoolean): Simplified a bit an removed a branch.

        * kjs/collector.cpp:
        (KJS::typeName): Changed to use JSCell::is functions instead of
        calling JSCell::type.

        * kjs/collector.h:
        (KJS::Heap::isNumber): Renamed from fastIsNumber.

        * kjs/nodes.h: Added now-needed include of JSType, since the type
        is used here to record types of values in the tree.

        * kjs/operations.cpp:
        (KJS::equal): Rewrote to no longer depend on type().
        (KJS::strictEqual): Ditto.

2008-08-18  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Tim.

        If there are no nodes in a profile all the time should be attributed to
        (idle)

        * profiler/Profile.cpp: If ther are no nodes make sure we still process
        the head.
        (KJS::Profile::forEach):
        * profiler/ProfileGenerator.cpp: Remove some useless code.
        (KJS::ProfileGenerator::stopProfiling):

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

        Reviewed by Maciej.

        Make JSGlobalContextRetain/Release actually work.

        * API/JSContextRef.cpp:
        (JSGlobalContextRetain):
        (JSGlobalContextRelease):
        Ref/deref global data to give checking for globalData.refCount() some sense.

        * API/tests/testapi.c: (main): Added a test for this bug.

        * kjs/JSGlobalData.cpp:
        (KJS::JSGlobalData::~JSGlobalData):
        While checking for memory leaks, found that JSGlobalData::emptyList has changed to
        a pointer, but it was not destructed, causing a huge leak in run-webkit-tests --threaded.

2008-08-17  Cameron Zwarich  <cwzwarich@uwaterloo.ca>

        Reviewed by Maciej.

        Change the counting of constants so that preincrement and predecrement of
        const local variables are considered unexpected loads.

        * kjs/nodes.cpp:
        (KJS::PrefixResolveNode::emitCode):
        * kjs/nodes.h:
        (KJS::ScopeNode::neededConstants):

2008-08-17  Oliver Hunt  <oliver@apple.com>

        Reviewed by Cameron Zwarich.

        <rdar://problem/6150322> In Gmail, a crash occurs at KJS::Machine::privateExecute() when applying list styling to text after a quote had been removed
        <https://bugs.webkit.org/show_bug.cgi?id=20386>

        This crash was caused by "depth()" incorrectly determining the scope depth 
        of a 0 depth function without a full scope chain.  Because such a function
        would not have an activation the depth function would return the scope depth
        of the parent frame, thus triggering an incorrect unwind.  Any subsequent 
        look up that walked the scope chain would result in incorrect behaviour,
        leading to a crash or incorrect variable resolution.  This can only actually
        happen in try...finally statements as that's the only path that can result in
        the need to unwind the scope chain, but not force the function to need a
        full scope chain.

        The fix is simply to check for this case before attempting to walk the scope chain.

        * VM/Machine.cpp:
        (KJS::depth):
        (KJS::Machine::throwException):

2008-08-17  Cameron Zwarich  <cwzwarich@uwaterloo.ca>

        Reviewed by Maciej.

        Bug 20419: Remove op_jless
        <https://bugs.webkit.org/show_bug.cgi?id=20419>

        Remove op_jless, which is rarely used now that we have op_loop_if_less.

        * VM/CodeBlock.cpp:
        (KJS::CodeBlock::dump):
        * VM/CodeGenerator.cpp:
        (KJS::CodeGenerator::emitJumpIfTrue):
        * VM/Machine.cpp:
        (KJS::Machine::privateExecute):
        * VM/Opcode.h:

2008-08-17  Cameron Zwarich  <cwzwarich@uwaterloo.ca>

        Reviewed by Dan Bernstein.

        Fix a typo in r35807 that is also causing build failures for
        non-AllInOne builds.

        * kjs/NumberConstructor.cpp:

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

        Reviewed by Cameron Zwarich.

        Made room for a free word in JSCell.
        
        SunSpider says no change.
        
        I changed JSCallbackObjectData, Arguments, JSArray, and RegExpObject to
        store auxiliary data in a secondary structure.

        I changed InternalFunction to store the function's name in the property
        map.
        
        I changed JSGlobalObjectData to use a virtual destructor, so WebCore's
        JSDOMWindowBaseData could inherit from it safely. (It's a strange design
        for JSDOMWindowBase to allocate an object that JSGlobalObject deletes,
        but that's really our only option, given the size constraint.)
        
        I also added a bunch of compile-time ASSERTs, and removed lots of comments
        in JSObject.h because they were often out of date, and they got in the
        way of reading what was actually going on.
        
        Also renamed JSArray::getLength to JSArray::length, to match our style
        guidelines.

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

        Reviewed by Oliver Hunt.
        
        Sped up property access for array.length and string.length by adding a
        mechanism for returning a temporary value directly instead of returning
        a pointer to a function that retrieves the value.
        
        Also removed some unused cruft from PropertySlot.
        
        SunSpider says 0.5% - 1.2% faster.

        NOTE: This optimization is not a good idea in general, because it's
        actually a pessimization in the case of resolve for assignment,
        and it may get in the way of other optimizations in the future.
        
2008-08-16  Dan Bernstein  <mitz@apple.com>

        Reviewed by Geoffrey Garen.

        Disable dead code stripping in debug builds.

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

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

        Reviewed by Oliver Hunt.

        <rdar://problem/6143072> FastMallocZone's enumeration code makes assumptions about handling of remote memory regions that overlap

        * wtf/FastMalloc.cpp:
        (WTF::TCMalloc_Central_FreeList::enumerateFreeObjects): Don't directly compare pointers mapped into the local process with
        a pointer that has not been mapped.  Instead, calculate a local address for the pointer and compare with that.
        (WTF::TCMallocStats::FreeObjectFinder::findFreeObjects): Pass in the remote address of the central free list so that it can
        be used when calculating local addresses.
        (WTF::TCMallocStats::FastMallocZone::enumerate): Ditto.

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.
        * JavaScriptCore.xcodeproj/project.pbxproj: Enable the debug variant.

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

        Fix the 64-bit build.

        Add extra cast to avoid warnings about loss of precision when casting from
        JSValue* to an integer type.

        * kjs/JSImmediate.h:
        (KJS::JSImmediate::intValue):
        (KJS::JSImmediate::uintValue):

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

        Still fixing Windows build.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGenerated.make: Added OpaqueJSString
        to yet another place.

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

        Trying to fix non-Apple builds.

        * ForwardingHeaders/JavaScriptCore/OpaqueJSString.h: Added.

2008-08-15  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Geoff Garen.

        Allow JSImmediate to hold 31 bit signed integer immediate values.  The low two bits of a
        JSValue* are a tag, with the tag value 00 indicating the JSValue* is a pointer to a
        JSCell.  Non-zero tag values used to indicate that the JSValue* is not a real pointer,
        but instead holds an immediate value encoded within the pointer.  This patch changes the
        encoding so both the tag values 01 and 11 indicate the value is a signed integer, allowing
        a 31 bit value to be stored.  All other immediates are tagged with the value 10, and
        distinguished by a secondary tag.

        Roughly +2% on SunSpider.

        * kjs/JSImmediate.h: Encoding of JSImmediates has changed - see comment at head of file for
                             descption of new layout.

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

        More build fixes.

        * API/OpaqueJSString.h: Add a namespace to friend declaration to appease MSVC.
        * API/JSStringRefCF.h: (JSStringCreateWithCFString) Cast UniChar* to UChar* explicitly.
        * JavaScriptCore.exp: Added OpaqueJSString::create(const KJS::UString&) to fix WebCore build.

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

        Build fix.

        * JavaScriptCore.xcodeproj/project.pbxproj: Marked OpaqueJSString as private

        * kjs/identifier.cpp:
        (KJS::Identifier::checkSameIdentifierTable):
        * kjs/identifier.h:
        (KJS::Identifier::add):
        Since checkSameIdentifierTable is exported for debug build's sake, gcc wants it to be
        non-inline in release builds, too.

        * JavaScriptCore.exp: Don't export inline OpaqueJSString destructor.

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

        Reviewed by Geoff Garen.

        JSStringRef is created context-free, but can get linked to one via an identifier table,
        breaking an implicit API contract.

        Made JSStringRef point to OpaqueJSString, which is a new string object separate from UString.

        * API/APICast.h: Removed toRef/toJS conversions for JSStringRef, as this is no longer a
        simple typecast.

        * kjs/identifier.cpp:
        (KJS::Identifier::checkSameIdentifierTable):
        * kjs/identifier.h:
        (KJS::Identifier::add):
        (KJS::UString::checkSameIdentifierTable):
        Added assertions to verify that an identifier is not being added to a different JSGlobalData.

        * API/JSObjectRef.cpp:
        (OpaqueJSPropertyNameArray::OpaqueJSPropertyNameArray): Changed OpaqueJSPropertyNameArray to
        hold JSStringRefs. This is necessary to avoid having to construct (and leak) a new instance
        in JSPropertyNameArrayGetNameAtIndex(), now that making a JSStringRef is not just a typecast.

        * API/OpaqueJSString.cpp: Added.
        (OpaqueJSString::create):
        (OpaqueJSString::ustring):
        (OpaqueJSString::identifier):
        * API/OpaqueJSString.h: Added.
        (OpaqueJSString::create):
        (OpaqueJSString::characters):
        (OpaqueJSString::length):
        (OpaqueJSString::OpaqueJSString):
        (OpaqueJSString::~OpaqueJSString):

        * API/JSBase.cpp:
        (JSEvaluateScript):
        (JSCheckScriptSyntax):
        * API/JSCallbackObjectFunctions.h:
        (KJS::::getOwnPropertySlot):
        (KJS::::put):
        (KJS::::deleteProperty):
        (KJS::::staticValueGetter):
        (KJS::::callbackGetter):
        * API/JSStringRef.cpp:
        (JSStringCreateWithCharacters):
        (JSStringCreateWithUTF8CString):
        (JSStringRetain):
        (JSStringRelease):
        (JSStringGetLength):
        (JSStringGetCharactersPtr):
        (JSStringGetMaximumUTF8CStringSize):
        (JSStringGetUTF8CString):
        (JSStringIsEqual):
        * API/JSStringRefCF.cpp:
        (JSStringCreateWithCFString):
        (JSStringCopyCFString):
        * API/JSValueRef.cpp:
        (JSValueMakeString):
        (JSValueToStringCopy):
        Updated to use OpaqueJSString.

        * GNUmakefile.am:
        * JavaScriptCore.exp:
        * JavaScriptCore.pri:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * JavaScriptCoreSources.bkl:
        Added OpaqueJSString.

2008-08-14  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Tim.

        <rdar://problem/6115819> Notify of profile in console
        - Profiles now have a unique ID so that they can be linked to the
        console message that announces that a profile completed.

        * profiler/HeavyProfile.cpp: 
        (KJS::HeavyProfile::HeavyProfile):
        * profiler/Profile.cpp:
        (KJS::Profile::create):
        (KJS::Profile::Profile):
        * profiler/Profile.h:
        (KJS::Profile::uid):
        * profiler/ProfileGenerator.cpp:
        (KJS::ProfileGenerator::create):
        (KJS::ProfileGenerator::ProfileGenerator):
        * profiler/ProfileGenerator.h:
        * profiler/Profiler.cpp:
        (KJS::Profiler::startProfiling):
        * profiler/TreeProfile.cpp:
        (KJS::TreeProfile::create):
        (KJS::TreeProfile::TreeProfile):
        * profiler/TreeProfile.h:

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

        Reviewed by Oliver Hunt.
        
        Nixed a PIC branch from JSObject::getOwnPropertySlot, by forcing
        fillGetterProperty, which references a global function pointer,
        out-of-line.
        
        .2% SunSpider speedup, 4.3% access-nbody speedup, 8.7% speedup on a
        custom property access benchmark for objects with one property.

        * kjs/JSObject.cpp:
        (KJS::JSObject::fillGetterPropertySlot):

2008-08-13  Alp Toker  <alp@nuanti.com>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=20349
        WTF::initializeThreading() fails if threading is already initialized

        Fix threading initialization logic to support cases where
        g_thread_init() has already been called elsewhere.

        Resolves database-related crashers reported in several applications.

        * wtf/ThreadingGtk.cpp:
        (WTF::initializeThreading):

2008-08-13  Brad Hughes <bhughes@trolltech.com>

        Reviewed by Simon.

        Fix compiling of QtWebKit in release mode with the Intel C++ Compiler for Linux

        The latest upgrade of the intel compiler allows us to compile all of
        Qt with optimizations enabled (yay!).

        * JavaScriptCore.pro:

2008-08-12  Oliver Hunt  <oliver@apple.com>

        Reviewed by Geoff Garen.

        Add peephole optimisation to 'op_not... jfalse...' (eg. if(!...) )

        This is a very slight win in sunspider, and a fairly substantial win
        in hot code that does if(!...), etc.

        * VM/CodeGenerator.cpp:
        (KJS::CodeGenerator::retrieveLastUnaryOp):
        (KJS::CodeGenerator::rewindBinaryOp):
        (KJS::CodeGenerator::rewindUnaryOp):
        (KJS::CodeGenerator::emitJumpIfFalse):
        * VM/CodeGenerator.h:

2008-08-12  Dan Bernstein  <mitz@apple.com>

        - JavaScriptCore part of <rdar://problem/6121636>
          Make fast*alloc() abort() on failure and add "try" variants that
          return NULL on failure.

        Reviewed by Darin Adler.

        * JavaScriptCore.exp: Exported tryFastCalloc().
        * VM/RegisterFile.h:
        (KJS::RegisterFile::RegisterFile): Removed an ASSERT().
        * kjs/JSArray.cpp:
        (KJS::JSArray::putSlowCase): Changed to use tryFastRealloc().
        (KJS::JSArray::increaseVectorLength): Ditto.
        * kjs/ustring.cpp:
        (KJS::allocChars): Changed to use tryFastMalloc().
        (KJS::reallocChars): Changed to use tryFastRealloc().
        * wtf/FastMalloc.cpp:
        (WTF::fastZeroedMalloc): Removed null checking of fastMalloc()'s result
        and removed extra call to InvokeNewHook().
        (WTF::tryFastZeroedMalloc): Added. Uses tryFastMalloc().
        (WTF::tryFastMalloc): Renamed fastMalloc() to this.
        (WTF::fastMalloc): Added. This version abort()s if allocation fails.
        (WTF::tryFastCalloc): Renamed fastCalloc() to this.
        (WTF::fastCalloc): Added. This version abort()s if allocation fails.
        (WTF::tryFastRealloc): Renamed fastRealloc() to this.
        (WTF::fastRealloc): Added. This version abort()s if allocation fails.
        (WTF::do_malloc): Made this a function template. When the abortOnFailure
        template parameter is set, the function abort()s on failure to allocate.
        Otherwise, it sets errno to ENOMEM and returns zero.
        (WTF::TCMallocStats::fastMalloc): Defined to abort() on failure.
        (WTF::TCMallocStats::tryFastMalloc): Added. Does not abort() on
        failure.
        (WTF::TCMallocStats::fastCalloc): Defined to abort() on failure.
        (WTF::TCMallocStats::tryFastCalloc): Added. Does not abort() on
        failure.
        (WTF::TCMallocStats::fastRealloc): Defined to abort() on failure.
        (WTF::TCMallocStats::tryFastRealloc): Added. Does not abort() on
        failure.
        * wtf/FastMalloc.h: Declared the "try" variants.

2008-08-11  Adam Roben  <aroben@apple.com>

        Move WTF::notFound into its own header so that it can be used
        independently of Vector

        Rubberstamped by Darin Adler.

        * JavaScriptCore.vcproj/WTF/WTF.vcproj:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        Added NotFound.h to the project.
        * wtf/NotFound.h: Added. Moved the notFound constant here...
        * wtf/Vector.h: ...from here.

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

        Reviewed by Mark Rowe.

        <rdar://problem/6130393> REGRESSION: PhotoBooth hangs after launching under TOT Webkit

        * API/JSContextRef.cpp: (JSGlobalContextRelease): Corrected a comment.

        * kjs/collector.cpp: (KJS::Heap::~Heap): Ensure that JSGlobalData is not deleted while
        sweeping the heap.

== Rolled over to ChangeLog-2008-08-10 ==
