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

        Reviewed by Geoff Garen.

        <rdar://problem/6516853> (r39682-r39736) JSFunFuzz: crash on "(function(){({ x2: x }), })()"
        <https://bugs.webkit.org/show_bug.cgi?id=23479>

        Automatic semicolon insertion was resulting in this being accepted in the initial
        nodeless parsing, but subsequent reparsing for code generation would fail, leading
        to a crash.  The solution is to ensure that reparsing a function performs parsing
        in the same state as the initial parse.  We do this by modifying the saved source
        ranges to include rather than exclude the opening and closing braces.

        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::reparseForExceptionInfoIfNecessary): add an assertion for successful recompile
        * parser/Lexer.h:
        (JSC::Lexer::sourceCode): include rather than exclude braces.
        * parser/Nodes.h:
        (JSC::FunctionBodyNode::toSourceString):  No need to append braces anymore.

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

        Reviewed by Alexey Proskuryakov.

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

        Implement ThreadCondition::timedWait().
        Since we borrow the code for condition variables from other sources,
        I did the same for timedWait(). See comments in ThreadingWin.cpp for
        rationale and more info.

        * wtf/CONTRIBUTORS.pthreads-win32: 
        Added. A list of Pthreads-win32 contributors mentioned in their license. The license itself
        is included into wtf/ThreadingWin32.cpp.

        * wtf/Threading.h:
        * wtf/ThreadingWin.cpp:
        Additional info and Pthreads-win32 license at the beginning.
        (WTF::PlatformCondition::timedWait): new method, derived from Pthreads-win32.
        (WTF::PlatformCondition::signal): same
        (WTF::ThreadCondition::ThreadCondition):
        (WTF::ThreadCondition::~ThreadCondition):
        (WTF::ThreadCondition::wait): this now calls PlatformCondition::timedWait.
        (WTF::ThreadCondition::timedWait): same
        (WTF::ThreadCondition::signal): this now calls PlatformCondition::signal.
        (WTF::ThreadCondition::broadcast): same

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

        Reviewed by Oliver Hunt.

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

        We need to check all numbers in integer switches, not just those
        represented as integer JSImmediates.

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

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

        Reviewed by Geoff Garen.

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

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

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

        Suggested by Oliver Hunt. Reviewed by Oliver Hunt.

        https://bugs.webkit.org/show_bug.cgi?id=23456
        Function argument names leak

        * parser/Nodes.cpp: (JSC::FunctionBodyNode::~FunctionBodyNode): Destruct parameter names.

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

        Reviewed by NOBODY (Build fix).

        Windows build fix

        * JavaScriptCore.vcproj/WTF/WTF.vcproj:

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

        Reviewed by Mark Rowe.

        Structure property table deleted offset maps are being leaked.
        Probably shouldn't be doing that.

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

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

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

        Reviewed by NOBODY (build fix).

        Attempt to fix gtk build

        * GNUmakefile.am:

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

        * runtime/StringPrototype.cpp:
        (JSC::substituteBackreferences): Add back the initialization to fix the build.

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

        Reviewed by Mark Rowe.

        Bug 23352: Turn on more compiler warnings in the Mac build
        https://bugs.webkit.org/show_bug.cgi?id=23352

        First patch: Fix some simple cases of various warnings.

        * pcre/pcre_compile.cpp:
        (jsRegExpCompile): Use const_cast to change const-ness.

        * runtime/StringPrototype.cpp:
        (JSC::substituteBackreferences): Remove unneeded initialization and
        use UChar instead of unsigned short for UTF-16 values.

        * wtf/dtoa.cpp:
        (WTF::strtod): Use const_cast to change const-ness.

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

        Reviewed by NOBODY (build fix).

        Whoops, remove runtime/ByteArray references from .pri and .scons builds, update .bkl

        * JavaScriptCore.pri:
        * JavaScriptCore.scons:
        * JavaScriptCoreSources.bkl:

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

        RS=Dan Bernstein.

        Move runtime/ByteArray to wtf/ByteArray

        * GNUmakefile.am:
        * JavaScriptCore.exp:
        * JavaScriptCore.pri:
        * JavaScriptCore.scons:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
        * JavaScriptCore.vcproj/WTF/WTF.vcproj:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * runtime/JSByteArray.cpp:
        * runtime/JSByteArray.h:
        * wtf/ByteArray.cpp: Renamed from JavaScriptCore/runtime/ByteArray.cpp.
        (WTF::ByteArray::create):
        * wtf/ByteArray.h: Renamed from JavaScriptCore/runtime/ByteArray.h.
        (WTF::ByteArray::length):
        (WTF::ByteArray::set):
        (WTF::ByteArray::get):
        (WTF::ByteArray::data):
        (WTF::ByteArray::deref):
        (WTF::ByteArray::ByteArray):

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

        Rubber-stamped by Gavin Barraclough.

        Remove temporary operator-> from JSValuePtr.

        * API/JSCallbackFunction.cpp:
        (JSC::JSCallbackFunction::call):
        * API/JSCallbackObjectFunctions.h:
        (JSC::::call):
        (JSC::::toNumber):
        (JSC::::toString):
        * API/JSObjectRef.cpp:
        (JSObjectSetPrototype):
        * API/JSValueRef.cpp:
        (JSValueGetType):
        (JSValueIsUndefined):
        (JSValueIsNull):
        (JSValueIsBoolean):
        (JSValueIsNumber):
        (JSValueIsString):
        (JSValueIsObject):
        (JSValueIsObjectOfClass):
        (JSValueToBoolean):
        (JSValueToNumber):
        (JSValueToStringCopy):
        (JSValueToObject):
        * bytecode/CodeBlock.cpp:
        (JSC::valueToSourceString):
        (JSC::CodeBlock::mark):
        * bytecode/CodeBlock.h:
        (JSC::CodeBlock::isKnownNotImmediate):
        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::emitEqualityOp):
        (JSC::keyForImmediateSwitch):
        * interpreter/Interpreter.cpp:
        (JSC::jsLess):
        (JSC::jsLessEq):
        (JSC::jsAddSlowCase):
        (JSC::jsAdd):
        (JSC::jsTypeStringForValue):
        (JSC::jsIsObjectType):
        (JSC::jsIsFunctionType):
        (JSC::isNotObject):
        (JSC::Interpreter::callEval):
        (JSC::Interpreter::throwException):
        (JSC::cachePrototypeChain):
        (JSC::Interpreter::tryCachePutByID):
        (JSC::countPrototypeChainEntriesAndCheckForProxies):
        (JSC::Interpreter::tryCacheGetByID):
        (JSC::Interpreter::privateExecute):
        (JSC::Interpreter::tryCTICachePutByID):
        (JSC::Interpreter::tryCTICacheGetByID):
        (JSC::Interpreter::cti_op_convert_this):
        (JSC::Interpreter::cti_op_add):
        (JSC::Interpreter::cti_op_pre_inc):
        (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_call_JSFunction):
        (JSC::Interpreter::cti_op_call_NotJSFunction):
        (JSC::Interpreter::cti_op_construct_JSConstruct):
        (JSC::Interpreter::cti_op_construct_NotJSConstruct):
        (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_loop_if_true):
        (JSC::Interpreter::cti_op_negate):
        (JSC::Interpreter::cti_op_div):
        (JSC::Interpreter::cti_op_pre_dec):
        (JSC::Interpreter::cti_op_not):
        (JSC::Interpreter::cti_op_jtrue):
        (JSC::Interpreter::cti_op_post_inc):
        (JSC::Interpreter::cti_op_lshift):
        (JSC::Interpreter::cti_op_bitand):
        (JSC::Interpreter::cti_op_rshift):
        (JSC::Interpreter::cti_op_bitnot):
        (JSC::Interpreter::cti_op_mod):
        (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_is_undefined):
        (JSC::Interpreter::cti_op_is_boolean):
        (JSC::Interpreter::cti_op_is_number):
        (JSC::Interpreter::cti_op_to_jsnumber):
        (JSC::Interpreter::cti_op_in):
        (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):
        * interpreter/Interpreter.h:
        (JSC::Interpreter::isJSArray):
        (JSC::Interpreter::isJSString):
        (JSC::Interpreter::isJSByteArray):
        * interpreter/Register.h:
        (JSC::Register::marked):
        (JSC::Register::mark):
        * jit/JITInlineMethods.h:
        (JSC::JIT::getConstantOperandImmediateInt):
        (JSC::JIT::isOperandConstantImmediateInt):
        * jsc.cpp:
        (functionPrint):
        (functionDebug):
        (functionRun):
        (functionLoad):
        (runWithScripts):
        (runInteractive):
        * parser/Nodes.cpp:
        (JSC::processClauseList):
        * profiler/ProfileGenerator.cpp:
        (JSC::ProfileGenerator::addParentForConsoleStart):
        * profiler/Profiler.cpp:
        (JSC::Profiler::createCallIdentifier):
        * runtime/ArrayConstructor.cpp:
        (JSC::constructArrayWithSizeQuirk):
        * runtime/ArrayPrototype.cpp:
        (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::constructBoolean):
        (JSC::callBooleanConstructor):
        * runtime/BooleanPrototype.cpp:
        (JSC::booleanProtoFuncToString):
        (JSC::booleanProtoFuncValueOf):
        * runtime/Collector.cpp:
        (JSC::Heap::protect):
        (JSC::Heap::unprotect):
        (JSC::Heap::heap):
        (JSC::Heap::collect):
        (JSC::typeName):
        * runtime/Completion.cpp:
        (JSC::evaluate):
        * runtime/DateConstructor.cpp:
        (JSC::constructDate):
        (JSC::dateParse):
        (JSC::dateUTC):
        * runtime/DateInstance.h:
        (JSC::DateInstance::internalNumber):
        * runtime/DatePrototype.cpp:
        (JSC::formatLocaleDate):
        (JSC::fillStructuresUsingTimeArgs):
        (JSC::fillStructuresUsingDateArgs):
        (JSC::dateProtoFuncToString):
        (JSC::dateProtoFuncToUTCString):
        (JSC::dateProtoFuncToDateString):
        (JSC::dateProtoFuncToTimeString):
        (JSC::dateProtoFuncToLocaleString):
        (JSC::dateProtoFuncToLocaleDateString):
        (JSC::dateProtoFuncToLocaleTimeString):
        (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::dateProtoFuncSetYear):
        (JSC::dateProtoFuncGetYear):
        * runtime/ErrorConstructor.cpp:
        (JSC::constructError):
        * runtime/ErrorPrototype.cpp:
        (JSC::errorProtoFuncToString):
        * runtime/ExceptionHelpers.cpp:
        (JSC::createError):
        (JSC::createErrorMessage):
        * runtime/FunctionConstructor.cpp:
        (JSC::constructFunction):
        * runtime/FunctionPrototype.cpp:
        (JSC::functionProtoFuncToString):
        (JSC::functionProtoFuncApply):
        (JSC::functionProtoFuncCall):
        * runtime/GetterSetter.cpp:
        (JSC::GetterSetter::toObject):
        * runtime/JSActivation.cpp:
        (JSC::JSActivation::getOwnPropertySlot):
        * runtime/JSArray.cpp:
        (JSC::JSArray::put):
        (JSC::JSArray::mark):
        (JSC::JSArray::sort):
        (JSC::AVLTreeAbstractorForArrayCompare::compare_key_key):
        (JSC::JSArray::compactForSorting):
        * runtime/JSByteArray.h:
        (JSC::JSByteArray::setIndex):
        * runtime/JSCell.h:
        (JSC::asCell):
        * runtime/JSFunction.cpp:
        (JSC::JSFunction::call):
        (JSC::JSFunction::construct):
        * runtime/JSGlobalObject.cpp:
        (JSC::markIfNeeded):
        (JSC::lastInPrototypeChain):
        * runtime/JSGlobalObjectFunctions.cpp:
        (JSC::encode):
        (JSC::decode):
        (JSC::globalFuncEval):
        (JSC::globalFuncParseInt):
        (JSC::globalFuncParseFloat):
        (JSC::globalFuncIsNaN):
        (JSC::globalFuncIsFinite):
        (JSC::globalFuncEscape):
        (JSC::globalFuncUnescape):
        (JSC::globalFuncJSCPrint):
        * runtime/JSImmediate.cpp:
        (JSC::JSImmediate::toThisObject):
        (JSC::JSImmediate::toObject):
        (JSC::JSImmediate::prototype):
        (JSC::JSImmediate::toString):
        * runtime/JSImmediate.h:
        * runtime/JSObject.cpp:
        (JSC::JSObject::mark):
        (JSC::JSObject::put):
        (JSC::callDefaultValueFunction):
        (JSC::JSObject::getPrimitiveNumber):
        (JSC::JSObject::defineGetter):
        (JSC::JSObject::defineSetter):
        (JSC::JSObject::lookupGetter):
        (JSC::JSObject::lookupSetter):
        (JSC::JSObject::hasInstance):
        (JSC::JSObject::toNumber):
        (JSC::JSObject::toString):
        * runtime/JSObject.h:
        (JSC::JSObject::JSObject):
        (JSC::JSObject::inlineGetOwnPropertySlot):
        (JSC::JSObject::getOwnPropertySlotForWrite):
        (JSC::JSObject::getPropertySlot):
        (JSC::JSValuePtr::get):
        * runtime/JSPropertyNameIterator.h:
        (JSC::JSPropertyNameIterator::create):
        * runtime/JSString.cpp:
        (JSC::JSString::getOwnPropertySlot):
        * runtime/JSValue.h:
        * runtime/JSWrapperObject.cpp:
        (JSC::JSWrapperObject::mark):
        * runtime/JSWrapperObject.h:
        (JSC::JSWrapperObject::setInternalValue):
        * 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::mathProtoFuncRound):
        (JSC::mathProtoFuncSin):
        (JSC::mathProtoFuncSqrt):
        (JSC::mathProtoFuncTan):
        * runtime/NativeErrorConstructor.cpp:
        (JSC::NativeErrorConstructor::NativeErrorConstructor):
        (JSC::NativeErrorConstructor::construct):
        * runtime/NumberConstructor.cpp:
        (JSC::constructWithNumberConstructor):
        (JSC::callNumberConstructor):
        * runtime/NumberPrototype.cpp:
        (JSC::numberProtoFuncToString):
        (JSC::numberProtoFuncToLocaleString):
        (JSC::numberProtoFuncValueOf):
        (JSC::numberProtoFuncToFixed):
        (JSC::numberProtoFuncToExponential):
        (JSC::numberProtoFuncToPrecision):
        * runtime/ObjectConstructor.cpp:
        (JSC::constructObject):
        * runtime/ObjectPrototype.cpp:
        (JSC::objectProtoFuncValueOf):
        (JSC::objectProtoFuncHasOwnProperty):
        (JSC::objectProtoFuncIsPrototypeOf):
        (JSC::objectProtoFuncDefineGetter):
        (JSC::objectProtoFuncDefineSetter):
        (JSC::objectProtoFuncLookupGetter):
        (JSC::objectProtoFuncLookupSetter):
        (JSC::objectProtoFuncPropertyIsEnumerable):
        (JSC::objectProtoFuncToLocaleString):
        (JSC::objectProtoFuncToString):
        * runtime/Operations.h:
        (JSC::JSValuePtr::equalSlowCaseInline):
        (JSC::JSValuePtr::strictEqual):
        (JSC::JSValuePtr::strictEqualSlowCaseInline):
        * runtime/Protect.h:
        (JSC::gcProtect):
        (JSC::gcUnprotect):
        * runtime/RegExpConstructor.cpp:
        (JSC::setRegExpConstructorInput):
        (JSC::setRegExpConstructorMultiline):
        (JSC::constructRegExp):
        * runtime/RegExpObject.cpp:
        (JSC::setRegExpObjectLastIndex):
        (JSC::RegExpObject::match):
        * runtime/RegExpPrototype.cpp:
        (JSC::regExpProtoFuncTest):
        (JSC::regExpProtoFuncExec):
        (JSC::regExpProtoFuncCompile):
        (JSC::regExpProtoFuncToString):
        * runtime/StringConstructor.cpp:
        (JSC::stringFromCharCodeSlowCase):
        (JSC::stringFromCharCode):
        (JSC::constructWithStringConstructor):
        (JSC::callStringConstructor):
        * 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::getEnumerablePropertyNames):
        (JSC::Structure::createCachedPrototypeChain):
        * runtime/Structure.h:
        (JSC::Structure::mark):
        * runtime/StructureChain.cpp:
        (JSC::StructureChain::StructureChain):

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

        Reviewed by Sam Weinig.

        Bug 23409: REGRESSION: RegExp 'replace()' function improperly processes '$$'
        <https://bugs.webkit.org/show_bug.cgi?id=23409>
        <rdar://problem/6505723>

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

        * runtime/StringPrototype.cpp:
        (JSC::substituteBackreferences): Remove code that adds an extra $ -- not sure
        how this ever worked.

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

        Reviewed by Oliver Hunt.

        On x86-64 jit, cache JSImmedate::TagMask & JSImmedate::TagTypeNumber in
        registers, save reloading them every time they're used.

        Draws x86-64 jit performance close to that of i386 jit.

        * assembler/MacroAssembler.h:
        (JSC::MacroAssembler::subPtr):
        (JSC::MacroAssembler::jnzPtr):
        (JSC::MacroAssembler::jzPtr):
        * jit/JIT.cpp:
        (JSC::JIT::privateCompileMainPass):
        * jit/JIT.h:
        * jit/JITArithmetic.cpp:
        (JSC::JIT::compileBinaryArithOpSlowCase):
        * jit/JITInlineMethods.h:
        (JSC::JIT::emitJumpIfJSCell):
        (JSC::JIT::emitJumpIfNotJSCell):
        (JSC::JIT::emitJumpIfImmediateNumber):
        (JSC::JIT::emitJumpIfNotImmediateNumber):
        (JSC::JIT::emitJumpIfImmediateInteger):
        (JSC::JIT::emitJumpIfNotImmediateInteger):
        (JSC::JIT::emitFastArithIntToImmNoCheck):

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

        Reviewed by Oliver Hunt.

        Add support to x86-64 JIT for inline double precision arithmetic ops.
        +5/6% on x86-64, JIT enabled, sunspider.

        * assembler/MacroAssembler.h:
        (JSC::MacroAssembler::addPtr):
        * assembler/X86Assembler.h:
        (JSC::X86Assembler::movq_rr):
        * jit/JIT.h:
        * jit/JITArithmetic.cpp:
        (JSC::JIT::compileFastArith_op_pre_inc):
        (JSC::JIT::compileBinaryArithOp):
        (JSC::JIT::compileBinaryArithOpSlowCase):
        (JSC::JIT::compileFastArith_op_add):
        (JSC::JIT::compileFastArithSlow_op_add):
        (JSC::JIT::compileFastArith_op_mul):
        (JSC::JIT::compileFastArithSlow_op_mul):
        (JSC::JIT::compileFastArith_op_sub):
        (JSC::JIT::compileFastArithSlow_op_sub):
        * parser/ResultType.h:
        (JSC::ResultType::isReusable):
        (JSC::ResultType::isInt32):
        (JSC::ResultType::definitelyIsNumber):
        (JSC::ResultType::mightBeNumber):
        (JSC::ResultType::isNotNumber):
        (JSC::ResultType::unknownType):

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

        Reviewed by Geoff Garen.

        Fixes for SamplingTool.

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

        * assembler/MacroAssembler.h:
        (JSC::MacroAssembler::storePtr):
        * bytecode/SamplingTool.cpp:
        (JSC::SamplingTool::run):
        (JSC::SamplingTool::dump):
        * bytecode/SamplingTool.h:
        (JSC::SamplingTool::encodeSample):
        * jit/JIT.cpp:
        (JSC::JIT::privateCompileMainPass):
        (JSC::JIT::privateCompile):
        * jit/JIT.h:
        (JSC::JIT::samplingToolTrackCodeBlock):
        * jit/JITCall.cpp:
        (JSC::JIT::compileOpCall):
        (JSC::JIT::compileOpCallSlowCase):
        * jit/JITInlineMethods.h:
        (JSC::JIT::emitCTICall_internal):

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

        Reviewed by Darin Adler.
        
        Fixed <rdar://problem/6452301> REGRESSION: Latest WebKit nightlies
        turn "c" into "" when stripping \\c_ character

        * wrec/WRECParser.cpp:
        (JSC::WREC::Parser::consumeEscape): Mimic a Firefox quirk when parsing
        control escapes inside character classes.

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

        Windows build fix

        * wrec/WRECParser.cpp:
        (JSC::WREC::Parser::parseParentheses): Removed unreachable code.

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

        Reviewed by Cameron Zwarich.
        
        Fixed <rdar://problem/6471394> REGRESSION (r39164): Discarding quantifier
        on assertion gives incorrect result (23075)
        
        https://bugs.webkit.org/show_bug.cgi?id=23075

        * pcre/pcre_compile.cpp:
        (compileBranch): Throw away an assertion if it's followed by a quantifier
        with a 0 minimum, to match SpiderMonkey, v8, and the ECMA spec.

        * wrec/WRECParser.cpp:
        (JSC::WREC::Parser::parseParentheses): Fall back on PCRE for the rare
        case of an assertion with a quantifier with a 0 minimum, since we
        don't handle quantified subexpressions yet, and in this special case,
        we can't just throw away the quantifier.

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

        Reviewed by Oliver Hunt.

        Add support in ResultType to track that the results of bitops
        are always of type int32_t.

        * parser/Nodes.cpp:
        (JSC::ReadModifyResolveNode::emitBytecode):
        (JSC::ReadModifyDotNode::emitBytecode):
        (JSC::ReadModifyBracketNode::emitBytecode):
        * parser/Nodes.h:
        (JSC::ExpressionNode::):
        (JSC::BooleanNode::):
        (JSC::NumberNode::):
        (JSC::StringNode::):
        (JSC::PrePostResolveNode::):
        (JSC::TypeOfResolveNode::):
        (JSC::TypeOfValueNode::):
        (JSC::UnaryPlusNode::):
        (JSC::NegateNode::):
        (JSC::BitwiseNotNode::):
        (JSC::LogicalNotNode::):
        (JSC::MultNode::):
        (JSC::DivNode::):
        (JSC::ModNode::):
        (JSC::SubNode::):
        (JSC::LeftShiftNode::):
        (JSC::RightShiftNode::):
        (JSC::UnsignedRightShiftNode::):
        (JSC::LessNode::):
        (JSC::GreaterNode::):
        (JSC::LessEqNode::):
        (JSC::GreaterEqNode::):
        (JSC::InstanceOfNode::):
        (JSC::EqualNode::):
        (JSC::NotEqualNode::):
        (JSC::StrictEqualNode::):
        (JSC::NotStrictEqualNode::):
        (JSC::BitAndNode::):
        (JSC::BitOrNode::):
        (JSC::BitXOrNode::):
        (JSC::LogicalOpNode::):
        * parser/ResultType.h:
        (JSC::ResultType::isInt32):
        (JSC::ResultType::isNotNumber):
        (JSC::ResultType::booleanType):
        (JSC::ResultType::numberType):
        (JSC::ResultType::numberTypeCanReuse):
        (JSC::ResultType::numberTypeCanReuseIsInt32):
        (JSC::ResultType::stringOrNumberTypeCanReuse):
        (JSC::ResultType::stringType):
        (JSC::ResultType::unknownType):
        (JSC::ResultType::forAdd):
        (JSC::ResultType::forBitOp):
        (JSC::OperandTypes::OperandTypes):

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

        Reviewed by Oliver Hunt.

        Add support for integer addition, subtraction and multiplication
        in JIT code on x86-64.

        * assembler/MacroAssembler.h:
        (JSC::MacroAssembler::mul32):
        (JSC::MacroAssembler::sub32):
        (JSC::MacroAssembler::joMul32):
        (JSC::MacroAssembler::joSub32):
        * jit/JIT.cpp:
        (JSC::JIT::privateCompileMainPass):
        (JSC::JIT::privateCompileSlowCases):
        * jit/JIT.h:
        * jit/JITArithmetic.cpp:
        (JSC::JIT::compileFastArith_op_add):
        (JSC::JIT::compileFastArithSlow_op_add):
        (JSC::JIT::compileFastArith_op_mul):
        (JSC::JIT::compileFastArithSlow_op_mul):
        (JSC::JIT::compileFastArith_op_sub):
        (JSC::JIT::compileFastArithSlow_op_sub):

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

        Reviewed by Geoff Garen.

        On x86-64 allow JSImmediate to encode 64-bit double precision values.
        This patch only affects builds that set USE(ALTERNATE_JSIMMEDIATE).
        Updates the implementation of JSValuePtr:: and JSImmediate:: methods
        that operate on neumeric values to be be aware of the new representation.
        When this representation is in use, the class JSNumberCell is redundant
        and is compiled out.

        The format of the new immediate representation is documented in JSImmediate.h.

        * JavaScriptCore.exp:
        * assembler/MacroAssembler.h:
        (JSC::MacroAssembler::subPtr):
        * assembler/X86Assembler.h:
        (JSC::X86Assembler::):
        (JSC::X86Assembler::subq_rr):
        (JSC::X86Assembler::movq_rr):
        (JSC::X86Assembler::ucomisd_rr):
        (JSC::X86Assembler::X86InstructionFormatter::twoByteOp64):
        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::cti_op_stricteq):
        (JSC::Interpreter::cti_op_nstricteq):
        * jit/JIT.cpp:
        (JSC::JIT::compileOpStrictEq):
        (JSC::JIT::privateCompileMainPass):
        (JSC::JIT::privateCompileSlowCases):
        * jit/JIT.h:
        * jit/JITArithmetic.cpp:
        (JSC::JIT::compileFastArith_op_lshift):
        (JSC::JIT::compileFastArith_op_rshift):
        (JSC::JIT::compileFastArith_op_bitand):
        (JSC::JIT::compileFastArith_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/JITInlineMethods.h:
        (JSC::JIT::emitJumpIfBothJSCells):
        (JSC::JIT::emitJumpIfEitherNumber):
        (JSC::JIT::emitJumpIfNotEitherNumber):
        (JSC::JIT::emitJumpIfImmediateIntegerNumber):
        (JSC::JIT::emitJumpIfNotImmediateIntegerNumber):
        (JSC::JIT::emitJumpIfNotImmediateIntegerNumbers):
        (JSC::JIT::emitJumpSlowCaseIfNotImmediateIntegerNumber):
        (JSC::JIT::emitJumpSlowCaseIfNotImmediateIntegerNumbers):
        (JSC::JIT::emitFastArithDeTagImmediate):
        (JSC::JIT::emitFastArithDeTagImmediateJumpIfZero):
        (JSC::JIT::emitFastArithReTagImmediate):
        (JSC::JIT::emitFastArithIntToImmNoCheck):
        * runtime/JSCell.h:
        * runtime/JSGlobalData.cpp:
        (JSC::JSGlobalData::JSGlobalData):
        * runtime/JSImmediate.cpp:
        (JSC::JSImmediate::toThisObject):
        (JSC::JSImmediate::toObject):
        (JSC::JSImmediate::toString):
        * runtime/JSImmediate.h:
        (JSC::wtf_reinterpret_cast):
        (JSC::JSImmediate::isNumber):
        (JSC::JSImmediate::isIntegerNumber):
        (JSC::JSImmediate::isDoubleNumber):
        (JSC::JSImmediate::isPositiveIntegerNumber):
        (JSC::JSImmediate::areBothImmediateIntegerNumbers):
        (JSC::JSImmediate::makeInt):
        (JSC::JSImmediate::makeDouble):
        (JSC::JSImmediate::doubleValue):
        (JSC::doubleToBoolean):
        (JSC::JSImmediate::toBoolean):
        (JSC::JSImmediate::getTruncatedUInt32):
        (JSC::JSImmediate::makeOutOfIntegerRange):
        (JSC::JSImmediate::from):
        (JSC::JSImmediate::getTruncatedInt32):
        (JSC::JSImmediate::toDouble):
        (JSC::JSImmediate::getUInt32):
        (JSC::JSValuePtr::isInt32Fast):
        (JSC::JSValuePtr::isUInt32Fast):
        (JSC::JSValuePtr::areBothInt32Fast):
        (JSC::JSFastMath::canDoFastBitwiseOperations):
        (JSC::JSFastMath::xorImmediateNumbers):
        (JSC::JSFastMath::canDoFastRshift):
        (JSC::JSFastMath::canDoFastUrshift):
        (JSC::JSFastMath::rightShiftImmediateNumbers):
        (JSC::JSFastMath::canDoFastAdditiveOperations):
        (JSC::JSFastMath::addImmediateNumbers):
        (JSC::JSFastMath::subImmediateNumbers):
        * runtime/JSNumberCell.cpp:
        (JSC::jsNumberCell):
        * runtime/JSNumberCell.h:
        (JSC::createNumberStructure):
        (JSC::isNumberCell):
        (JSC::asNumberCell):
        (JSC::jsNumber):
        (JSC::JSValuePtr::isDoubleNumber):
        (JSC::JSValuePtr::getDoubleNumber):
        (JSC::JSValuePtr::isNumber):
        (JSC::JSValuePtr::uncheckedGetNumber):
        (JSC::jsNaN):
        (JSC::JSValuePtr::getNumber):
        (JSC::JSValuePtr::numberToInt32):
        (JSC::JSValuePtr::numberToUInt32):
        * runtime/JSValue.h:
        * runtime/NumberConstructor.cpp:
        (JSC::numberConstructorNegInfinity):
        (JSC::numberConstructorPosInfinity):
        (JSC::numberConstructorMaxValue):
        (JSC::numberConstructorMinValue):
        * runtime/NumberObject.cpp:
        (JSC::constructNumber):
        * runtime/NumberObject.h:
        * runtime/Operations.h:
        (JSC::JSValuePtr::equal):
        (JSC::JSValuePtr::equalSlowCaseInline):
        (JSC::JSValuePtr::strictEqual):
        (JSC::JSValuePtr::strictEqualSlowCaseInline):
        * wtf/Platform.h:

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

        Reviewed by Geoffrey Garen.

        <rdar://problem/6045018>
        REGRESSION (r34838): JavaScript objects appear to be leaked after loading google.com

        Subtract the number of JSStrings cached in SmallStrings when calculating the
        number of live JSObjects.

        * runtime/Collector.cpp:
        (JSC::Heap::objectCount):
        * runtime/SmallStrings.cpp:
        (JSC::SmallStrings::count):
        * runtime/SmallStrings.h:

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

        Fix Qt build.

        * runtime/Collector.cpp:

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

        Reviewed by Gavin Barraclough.

        Fix crash seen running fast/canvas.

        Make sure to mark the ScopeNode and CodeBlock being created
        in the re-parse for exception information.

        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::reparseForExceptionInfoIfNecessary):
        * parser/Nodes.h:
        (JSC::ScopeNode::mark):
        * runtime/Collector.cpp:
        (JSC::Heap::collect):
        * runtime/JSGlobalData.cpp:
        (JSC::JSGlobalData::JSGlobalData):
        * runtime/JSGlobalData.h:

2009-01-15  Craig Schlenter  <craig.schlenter@gmail.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=23347
        Compilation of JavaScriptCore/wtf/ThreadingPthreads.cpp fails on Linux

        * wtf/ThreadingPthreads.cpp: included limits.h as INT_MAX is defined there.

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

        Reviewed by Geoff Garen.

        Bug 23225: REGRESSION: Assertion failure in reparseInPlace() (m_sourceElements) at sfgate.com
        <https://bugs.webkit.org/show_bug.cgi?id=23225> <rdar://problem/6487432>

        Character position for open and closing brace was incorrectly referencing m_position to
        record their position in a source document, however this is unsafe as BOMs may lead to
        m_position being an arbitrary position from the real position of the current character.

        * parser/Lexer.cpp:
        (JSC::Lexer::matchPunctuator):

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

        Bug 23153: JSC build always touches JavaScriptCore/docs/bytecode.html

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

        Reviewed by Darin Adler.

        Instead of building bytecode.html into ${SRCROOT}/docs/bytecode.html, build it
        into ${BUILT_PRODUCTS_DIR}/DerivedSources/JavaScriptCore/docs/bytecode.html.

        Also fixes make-bytecode-docs.pl to actually generate documentation.

        * DerivedSources.make: Changed bytecode.html to be built into local docs
        directory in ${BUILT_PRODUCTS_DIR}/DerivedSources/JavaScriptCore.
        * JavaScriptCore.xcodeproj/project.pbxproj: Added "/docs" to the end of the
        "mkdir -p" command so that the docs subdirectory is automatically created.
        * docs/make-bytecode-docs.pl: Changed BEGIN_OPCODE to DEFINE_OPCODE so that
        documentation is actually generated.

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