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

        Merge r34204 to Safari-3-1-branch.

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

        Reviewed by Darin.

        https://bugs.webkit.org/show_bug.cgi?id=19294
        <rdar://problem/5969062> A crash when iterating over a sparse array backwards.

        * kjs/array_instance.cpp: Turned sparseArrayCutoff into a macro, so that using max() on it
        doesn't cause a PIC branch.
        (KJS::ArrayInstance::increaseVectorLength): Added a comment about this function not
        preserving class invariants.
        (KJS::ArrayInstance::put): Update m_storage after reallocation. Move values that fit to
        the vector from the map in all code paths.

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

        Merge r31388 to Safari-3-1-branch.

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

        Reviewed by Mark Rowe.

        <rdar://problem/5826236> Regular expressions with large nested repetition counts can have their
        compiled length calculated incorrectly.

        * pcre/pcre_compile.cpp:
        (multiplyWithOverflowCheck):
        (calculateCompiledPatternLength): Check for overflow when dealing with nested repetition counts
        and bail with an error rather than returning incorrect results.

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

        Merge r30475 to Safari-3-1-branch.

    2008-02-22  Oliver Hunt  <oliver@apple.com>

        Reviewed by Alexey P.

        <rdar://problem/5759327> REGRESSION: while(NaN) acts like while(true)

        Fix yet another case where we incorrectly relied on implicit double
        to bool coercion.

        * kjs/nodes.cpp:
        (KJS::PostDecLocalVarNode::evaluateToBoolean):

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

        Merge r30492 to Safari-3-1-branch.

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

        Reviewed by Sam Weinig.
        
        Partial fix for <rdar://problem/5744037> Gmail out of memory (17455)
        
        I'm removing KJS_MEM_LIMIT for the following reasons:
        
        - We have a few reports of KJS_MEM_LIMIT breaking important web
        applications, like GMail and Google Reader. (For example, if you
        simply open 12 GMail tabs, tab #12 will hit the limit.)

        - Firefox has no discernable JS object count limit, so any limit, even
        a large one, is a potential compatibility problem.
        
        - KJS_MEM_LIMIT does not protect against malicious memory allocation,
        since there are many ways to maliciously allocate memory without
        increasing the JS object count.
        
        - KJS_MEM_LIMIT is already mostly broken, since it only aborts the
        script that breaches the limit, not any subsequent scripts.
        
        - We've never gotten bug reports about websites that would have
        benefited from an unbroken KJS_MEM_LIMIT. The initial check-in of
        KJS_MEM_LIMIT (KJS revision 80061) doesn't mention a website that
        needed it.
        
        - Any website that brings you anywhere close to crashing due to the
        number of live JS objects will almost certainly put up the "slow
        script" dialog at least 20 times beforehand.

        * kjs/collector.cpp:
        (KJS::Collector::collect):
        * kjs/collector.h:
        * kjs/nodes.cpp:
        (KJS::TryNode::execute):

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

        Unreviewed.  Really make JavaScriptCore's FEATURE_DEFINES match WebCore's.

        * Configurations/JavaScriptCore.xcconfig:

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

        Merge r30276 to Safari-3-1-branch.

    2008-02-15  Adam Roben  <aroben@apple.com>

        Make JavaScriptCore's FEATURE_DEFINES match WebCore's

        Reviewed by Mark.

        * Configurations/JavaScriptCore.xcconfig:

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

        Merge r30239 to Safari-3-1-branch.

    2008-02-14  Stephanie Lewis <slewis@apple.com>

        Reviewed by Geoff.

        Update order files.

        * JavaScriptCore.order:

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

        Merge r30235 to Safari-3-1-branch.

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

        Reviewed by Sam Weinig.
        
        Fixed <rdar://problem/5737835> nee http://bugs.webkit.org/show_bug.cgi?id=17329
        Crash in JSGlobalObject::popActivation when inserting hyperlink in Wordpress (17329)
        
        Don't reset the "activations" stack in JSGlobalObject::reset, since we
        might be executing a script during the call to reset, and the script
        needs to safely run to completion.
        
        Instead, initialize the "activations" stack when the global object is
        created, and subsequently rely on pushing and popping during normal
        execution to maintain the stack's state.
        
        * kjs/JSGlobalObject.cpp:
        (KJS::JSGlobalObject::init):
        (KJS::JSGlobalObject::reset):

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

        Merge r30191 to Safari-3-1-branch.

    2008-02-13  Oliver Hunt  <oliver@apple.com>

        Reviewed by Alexey P.

        <rdar://problem/5737003> REGRESSION (r27747): can't browse pictures on fastcupid.com

        When converting numeric values to booleans we need to account for NaN

        * kjs/nodes.cpp:
        (KJS::MultNode::evaluateToBoolean):
        (KJS::ModNode::evaluateToBoolean):

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

        Merge r30177 to Safari-3-1-branch.

    2008-02-08  Samuel Weinig  <sam@webkit.org>

        Reviewed by Brady Eidson.

        <rdar://problem/5659216> REGRESSION: PLT 0.3% slower due to r28868 (caching ClassNodeList and NamedNodeList)

        - Tweak the statements in isASCIISpace to account for the statistical distribution of
          usage in the PLT.

        .4% speedup on my machine.  Stephanie's machine shows this as .3% speedup.

        * wtf/ASCIICType.h:
        (WTF::isASCIISpace): 

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

        Merge r30158 to Safari-3-1-branch.

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

        Reviewed by Anders Carlsson.

        Fixes for:
        <rdar://problem/5735497> Match Firefox's cross-domain model more accurately by return the built-in version of functions even if they have been overridden
        <rdar://problem/5735443> Crash when setting the Window objects prototype to a custom Object and then calling a method on it

        - Expose the native Object.prototype.toString implementation so that it can be used for cross-domain
          toString calling.

        * JavaScriptCore.exp:
        * kjs/object_object.cpp:
        * kjs/object_object.h:

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

        Merge r30105 to Safari-3-1-branch.

    2008-02-08  Oliver Hunt  <oliver@apple.com>

        Reviewed by Maciej.

        <rdar://problem/5731773> REGRESSION (r28973): Extraneous parentheses in function.toString()
        https://bugs.webkit.org/show_bug.cgi?id=17214

        Make a subclass of CommaNode to provide the correct precedence for each expression in
        a variable declaration list.

        * kjs/grammar.y:
        * kjs/nodes.h:
        (KJS::VarDeclCommaNode::):

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

        Reviewed by Oliver Hunt.
        
        Added an ASSERT to catch refCount underflow, since it caused a leak in
        my last check-in.

        * wtf/RefCounted.h:
        (WTF::RefCounted::deref):

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

        Reviewed by Darin Adler.

        PLT speedup related to <rdar://problem/5659272> REGRESSION: PLT .4%
        slower due to r28884 (global variable symbol table optimization)
        
        Tweaked RefCounted::deref() to be a little more efficient.

        1% - 1.5% speedup on my machine. .7% speedup on Stephanie's machine.
        
        * wtf/RefCounted.h:
        (WTF::RefCounted::deref): Don't modify m_refCount if we're just going
        to delete the object anyway. Also, use a simple == test, which might be
        faster than <= on some hardware.

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

        Reviewed by Sam.

        - fix http://bugs.webkit.org/show_bug.cgi?id=17094
          Array.prototype functions create length properties with DontEnum/DontDelete

        Test results match Gecko with very few obscure exceptions that seem to be
        bugs in Gecko.

        Test: fast/js/array-functions-non-arrays.html

        * kjs/array_object.cpp:
        (KJS::arrayProtoFuncConcat):  Removed DontEnum and DontDelete from the call
        to set length.
        (KJS::arrayProtoFuncPop): Ditto. Also added missing call to deleteProperty,
        which is not needed for real arrays, but is needed for non-arrays.
        (KJS::arrayProtoFuncPush): Ditto.
        (KJS::arrayProtoFuncShift): Ditto.
        (KJS::arrayProtoFuncSlice): Ditto.
        (KJS::arrayProtoFuncSort): Removed incorrect call to set length when
        the array has no elements.
        (KJS::arrayProtoFuncSplice): Removed DontEnum and DontDelete from the call
        to set length.
        (KJS::arrayProtoFuncUnShift): Ditto. Also added a check for 0 arguments to
        make behavior match the specification in that case.
        * kjs/nodes.cpp:
        (KJS::ArrayNode::evaluate): Removed DontEnum and DontDelete from the call
        to set length.

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

        Reviewed by Sam.

        - replace calls to put to set up properties with calls to putDirect, to
          prepare for a future change where put won't take attributes any more,
          and for a slight performance boost

        * API/JSObjectRef.cpp:
        (JSObjectMakeConstructor): Use putDirect instead of put.
        * kjs/CommonIdentifiers.h: Removed lastIndex.
        * kjs/JSGlobalObject.cpp:
        (KJS::JSGlobalObject::reset): Use putDirect instead of put.
        * kjs/array_object.cpp:
        (KJS::arrayProtoFuncConcat): Took out extra call to get length (unused).
        (KJS::ArrayObjectImp::ArrayObjectImp): Use putDirect instead of put.
        * kjs/error_object.cpp:
        (KJS::ErrorPrototype::ErrorPrototype): Use putDirect instead of put.
        * kjs/function.cpp:
        (KJS::Arguments::Arguments): Use putDirect instead of put.
        (KJS::PrototypeFunction::PrototypeFunction): Use putDirect instead of put.
        * kjs/function_object.cpp:
        (KJS::FunctionObjectImp::construct): Use putDirect instead of put.
        * kjs/nodes.cpp:
        (KJS::FuncDeclNode::makeFunction): Use putDirect instead of put.
        (KJS::FuncExprNode::evaluate): Use putDirect instead of put.
        * kjs/regexp_object.cpp:
        (KJS::regExpProtoFuncCompile): Use setLastIndex instead of put(lastIndex).
        (KJS::RegExpImp::match): Get and set lastIndex by using m_lastIndex instead of
        calling get and put.
        * kjs/regexp_object.h:
        (KJS::RegExpImp::setLastIndex): Added.
        * kjs/string_object.cpp:
        (KJS::stringProtoFuncMatch): Use setLastIndex instead of put(lastIndex).

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

        Reviewed by Anders Carlsson.

        Fix for http://bugs.webkit.org/show_bug.cgi?id=8080
        NodeList (and other DOM lists) items are not enumeratable using for..in

        * JavaScriptCore.exp:

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

        Reviewed by Oliver Hunt.

        Update versioning to support the mysterious future.

        * Configurations/Version.xcconfig: Add SYSTEM_VERSION_PREFIX_1060.

2008-02-04  Cameron Zwarich  <cwzwarich@uwaterloo.ca>

        Reviewed by Oliver Hunt.

        Fixes Bug 16889: REGRESSION (r29425): Canvas-based graphing calculator fails to run
              Bug 17015: REGRESSION (r29414-29428): www.fox.com "shows" menu fails to render
              Bug 17164: REGRESSION: JavaScript pop-up menu appears at wrong location when hovering image at http://news.chinatimes.com/

        <http://bugs.webkit.org/show_bug.cgi?id=16889>
        <rdar://problem/5696255>

        <http://bugs.webkit.org/show_bug.cgi?id=17015>

        <http://bugs.webkit.org/show_bug.cgi?id=17164>
        <rdar://problem/5720947>

        The ActivationImp tear-off (r29425) introduced a problem with ReadModify
        nodes that first resolve a slot, call valueForReadModifyNode(), and then
        store a value in the previously resolved slot. Since valueForReadModifyNode()
        may cause a tear-off, the slot needs to be resolved again, but this was
        not happening with the existing code.

        * kjs/nodes.cpp:
        (KJS::ReadModifyLocalVarNode::evaluate):
        (KJS::ReadModifyResolveNode::evaluate):

2008-02-04  Cameron McCormack <cam@mcc.id.au>

        Reviewed by Geoff Garen.

        Remove some unneccesary UNUSED_PARAMs.  Clarify ownership rule of return value of JSObjectCopyPropertyNames.

        * API/JSNode.c:
        (JSNode_appendChild):
        (JSNode_removeChild):
        (JSNode_replaceChild):
        (JSNode_getNodeType):
        (JSNode_getFirstChild):
        * API/JSNodeList.c:
        (JSNodeList_length):
        * API/JSObjectRef.h:

2008-02-04  Rodney Dawes  <dobey@wayofthemonkey.com>

        Reviewed by Alp Toker and Mark Rowe.

        Fix http://bugs.webkit.org/show_bug.cgi?id=17175.
        Bug 17175: Use of C++ compiler flags in CFLAGS

        * GNUmakefile.am: Use global_cxxflags as well as global_cflags in CXXFLAGS.

2008-02-04  Alp Toker  <alp@atoker.com>

        Rubber-stamped by Mark Rowe.

        Remove all trailing whitespace in the GTK+ port and related
        components.

        * GNUmakefile.am:

2008-02-02  Darin Adler  <darin@apple.com>

        Reviewed by Geoff Garen.

        PLT speedup related to <rdar://problem/5659272> REGRESSION: PLT .4%
        slower due to r28884 (global variable symbol table optimization)

        Geoff's theory is that the slowdown was due to copying hash tables when
        putting things into the back/forward cache. If that's true, then this
        should fix the problem.

        (According to Geoff's measurements, in a PLT that exaggerates the
        importance of symbol table saving during cached page creation, this
        patch is a ~3X speedup in cached page creation, and a 9% speedup overall.)

        * JavaScriptCore.exp: Updated.

        * kjs/JSVariableObject.cpp:
        (KJS::JSVariableObject::saveLocalStorage): Updated for changes to SavedProperty,
        which has been revised to avoid initializing each SavedProperty twice when building
        the array. Store the property names too, so we don't have to store the symbol table
        separately. Do this by iterating the symbol table instead of the local storage vector.
        (KJS::JSVariableObject::restoreLocalStorage): Ditto. Restore the symbol table as
        well as the local storage vector.

        * kjs/JSVariableObject.h: Removed save/restoreSymbolTable and do that work inside
        save/restoreLocalStorage instead. Made restoreLocalStorage a non-const member function
        that takes a const reference to a SavedProperties object.

        * kjs/LocalStorage.h: Changed attributes to be unsigned instead of int to match
        other declarations of attributes elsewhere.

        * kjs/property_map.cpp:
        (KJS::SavedProperties::SavedProperties): Updated for data member name change.
        (KJS::PropertyMap::save): Updated for data member name change and to use the new
        inline init function instead of setting the fields directly. This allows us to
        skip initializing the SavedProperty objects when first allocating the array, and
        just do it when we're actually setting up the individual elements.
        (KJS::PropertyMap::restore): Updated for SavedProperty changes.

        * kjs/property_map.h: Changed SavedProperty from a struct to a class. Set it up so
        it does not get initialized at construction time to avoid initializing twice when
        creating an array of SavedProperty. Removed the m_ prefixes from the members of
        the SavedProperties struct. Generally we use m_ for class members and not struct.

2008-02-02  Tony Chang  <idealisms@gmail.com>

        Reviewed by darin.  Landed by eseidel.

        Add #define guards for WIN32_LEAN_AND_MEAN and _CRT_RAND_S.

        * kjs/config.h:
        * wtf/FastMalloc.cpp:
        * wtf/TCSpinLock.h:

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

        Rubber-stamped by Darin Adler.

        - Fix whitespace in nodes.h/cpp and nodes2string.cpp.

        (NOTE: Specific changed functions elided for space and clarity)
        * kjs/nodes.cpp:
        * kjs/nodes.h:
        * kjs/nodes2string.cpp:

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

        Reviewed by Oliver Hunt.

        Patch for http://bugs.webkit.org/show_bug.cgi?id=17025
        nodes.h/cpp has been rolling around in the mud - lets hose it down

        - Rename member variables to use the m_ prefix.

        (NOTE: Specific changed functions elided for space and clarity)
        * kjs/grammar.y:
        * kjs/nodes.cpp:
        * kjs/nodes.h:
        * kjs/nodes2string.cpp:

2008-01-27  Darin Adler  <darin@apple.com>

        Reviewed by Oliver.

        - fix <rdar://problem/5657450> REGRESSION: const is broken

        Test: fast/js/const.html

        SunSpider said this was 0.3% slower. And I saw some Shark samples in
        JSGlobalObject::put -- not a lot but a few. We may be able to regain the
        speed, but for now we will take that small hit for correctness sake.

        * kjs/JSGlobalObject.cpp:
        (KJS::JSGlobalObject::put): Pass the checkReadOnly flag in to symbolTablePut
        instead of passing attributes.

        * kjs/JSVariableObject.h:
        (KJS::JSVariableObject::symbolTablePut): Removed the code to set attributes
        here, since we only set attributes when creating a property. Added the code
        to check read-only here, since we need that to implement const!

        * kjs/function.cpp:
        (KJS::ActivationImp::put): Pass the checkReadOnly flag in to symbolTablePut
        instead of passing attributes.

        * kjs/nodes.cpp:
        (KJS::isConstant): Added.
        (KJS::PostIncResolveNode::optimizeVariableAccess): Create a PostIncConstNode
        if optimizing for a local variable and the variable is constant.
        (KJS::PostDecResolveNode::optimizeVariableAccess): Ditto. But PostDecConstNode.
        (KJS::PreIncResolveNode::optimizeVariableAccess): Ditto. But PreIncConstNode.
        (KJS::PreDecResolveNode::optimizeVariableAccess): Ditto. But PreDecConstNode.
        (KJS::PreIncConstNode::evaluate): Return the value + 1.
        (KJS::PreDecConstNode::evaluate): Return the value - 1.
        (KJS::PostIncConstNode::evaluate): Return the value converted to a number.
        (KJS::PostDecConstNode::evaluate): Ditto.
        (KJS::ReadModifyResolveNode::optimizeVariableAccess): Create a ReadModifyConstNode
        if optimizing for a local variable and the variable is constant.
        (KJS::AssignResolveNode::optimizeVariableAccess): Ditto. But AssignConstNode.
        (KJS::ScopeNode::optimizeVariableAccess): Pass the local storage to the
        node optimizeVariableAccess functions, since that's where we need to look to
        figure out if a variable is constant.
        (KJS::FunctionBodyNode::processDeclarations): Moved the call to
        optimizeVariableAccess until after localStorage is set up.
        (KJS::ProgramNode::processDeclarations): Ditto.

        * kjs/nodes.h: Fixed the IsConstant and HasInitializer values. They are used
        as flag masks, so a value of 0 will not work for IsConstant. Changed the
        first parameter to optimizeVariableAccess to be a const reference to a symbol
        table and added a const reference to local storage. Added classes for const
        versions of local variable access: PostIncConstNode, PostDecConstNode,
        PreIncConstNode, PreDecConstNode, ReadModifyConstNode, and AssignConstNode.

        * kjs/object.cpp:
        (KJS::JSObject::put): Tweaked comments a bit, and changed the checkReadOnly
        expression to match the form used at the two other call sites.

2008-01-27  Darin Adler  <darin@apple.com>

        Reviewed by Oliver.

        - fix http://bugs.webkit.org/show_bug.cgi?id=16498
          ''.constructor.toString() gives [function]

        Test: fast/js/function-names.html

        * kjs/array_object.cpp:
        (KJS::ArrayObjectImp::ArrayObjectImp): Use the class name as the constructor's function name.
        * kjs/bool_object.cpp:
        (KJS::BooleanObjectImp::BooleanObjectImp): Ditto.
        * kjs/date_object.cpp:
        (KJS::DateObjectImp::DateObjectImp): Ditto.
        * kjs/error_object.cpp:
        (KJS::ErrorPrototype::ErrorPrototype): Make the error object be an Error.
        (KJS::ErrorObjectImp::ErrorObjectImp): Use the class name as the constructor's function name.
        (KJS::NativeErrorPrototype::NativeErrorPrototype): Take const UString&.
        (KJS::NativeErrorImp::NativeErrorImp): Use the prototype's name as the constructor's function
        name.
        * kjs/error_object.h: Change ErrorPrototype to inherit from ErrorInstance. Change the
        NativeErrorImp constructor to take a NativeErrorPrototype pointer for its prototype.
        * kjs/function.h: Removed unneeded constructor for internal functions without names.
        We want to avoid those!
        * kjs/function_object.cpp:
        (KJS::functionProtoFuncToString): Removed code that writes out just [function] for functions
        that have no names. There's no reason to do that.
        (KJS::FunctionObjectImp::FunctionObjectImp): Use the class name as the constructor's
        function name.
        * kjs/internal.cpp: Removed the unused constructor.
        * kjs/number_object.cpp:
        (KJS::fractionalPartToString): Marked static for internal linkage.
        (KJS::exponentialPartToString): Ditto.
        (KJS::numberProtoFuncToPrecision): Removed an unneeded else.
        (KJS::NumberObjectImp::NumberObjectImp): Use the class name as the constructor's
        function name.
        (KJS::NumberObjectImp::getValueProperty): Tweaked formatting.
        * kjs/object_object.cpp:
        (KJS::ObjectObjectImp::ObjectObjectImp): Use "Object" for the function name.
        * kjs/regexp_object.cpp:
        (KJS::RegExpObjectImp::RegExpObjectImp): Use "RegExp" for the function name.
        * kjs/string_object.cpp:
        (KJS::StringObjectImp::StringObjectImp): Use the class name as the constructor's
        function name.

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

        Reviewed by Oliver.

        - fix http://bugs.webkit.org/show_bug.cgi?id=17027
          Incorrect Function.toString behaviour with read/modify/write operators performed on negative numbers

        Test: fast/js/function-toString-parentheses.html

        The problem here was that a NumberNode with a negative number in it had the wrong
        precedence. It's not a primary expression, it's a unary operator with a primary
        expression after it.

        Once the precedence of NumberNode was fixed, the cases from bug 17020 were also
        fixed without trying to treat bracket nodes like dot nodes. That wasn't needed.
        The reason we handle numbers before dot nodes specially is that the dot is a
        legal character in a number. The same is not true of a bracket. Eventually we
        could get smarter, and only add the parentheses when there is actual ambiguity.
        There is none if the string form of the number already has a dot in it, or if
        it's a number with a alphabetic name like infinity or NAN.

        * kjs/nodes.h: Renamed back from ObjectAccess to DotExpr.
        (KJS::NumberNode::precedence): Return PrecUnary for negative numbers, since
        they serialize as a unary operator, not a primary expression.
        * kjs/nodes2string.cpp:
        (KJS::SourceStream::operator<<): Clear m_numberNeedsParens if this adds
        parens; one set is enough.
        (KJS::bracketNodeStreamTo): Remove unneeded special flag here. Normal
        operator precedence suffices.
        (KJS::NewExprNode::streamTo): Ditto.

2008-01-26  Oliver Hunt  <oliver@apple.com>

        Reviewed by Maciej and Darin.

        Fix for http://bugs.webkit.org/show_bug.cgi?id=17020
        Function.toString does not parenthesise numbers for the bracket accessor

        It turns out that logic was there for all of the dot accessor nodes to make numbers be
        parenthesised properly, so it was a trivial extension to extend that to the bracket nodes.
        I renamed the enum type to reflect the fact that it is now used for both dot and bracket
        accessors.

        * kjs/nodes2string.cpp:
        (KJS::bracketNodeStreamTo):
        (KJS::BracketAccessorNode::streamTo):

2008-01-26  Oliver Hunt  <oliver@apple.com>

        Reviewed by Darin.

        Fix Bug 17018: Incorrect code generated from Function.toString for get/setters in object literals

        Don't quote getter and setter names during output, as that is simply wrong.

        * kjs/nodes2string.cpp:
        (KJS::PropertyNode::streamTo):

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

        Reviewed by Eric Seidel.

        - http://bugs.webkit.org/show_bug.cgi?id=16860
          a bit of cleanup after the Activation optimization

        * JavaScriptCore.exp: Export the GlobalExecState constructor instead of
        the global flavor of the ExecState constructor. It'd probably be cleaner
        to not export either one, but JSGlobalObject inlines the code that
        constructs the ExecState. If we changed that, we could remove this export.

        * JavaScriptCore.xcodeproj/project.pbxproj: Re-sorted a few things and
        put the new source files into the kjs group rather than at the top level.

        * kjs/ExecState.cpp:
        (KJS::ExecState::ExecState): Marked inline and updated for data member
        name changes. This is now only for use for the derived classes. Also removed
        code that sets the unused m_savedExec data member for the global case. That
        data member is only used for the other two types.
        (KJS::ExecState::~ExecState): Marked inline and removed all the code.
        The derived class destructors now inclde the appropriate code.
        (KJS::ExecState::lexicalGlobalObject): Removed unneeded special case for
        an empty scope chain. The bottom function already returns 0 for that case,
        so the general case code handles it fine. Also changed to use data members
        directly rather than calling functions.
        (KJS::GlobalExecState::GlobalExecState): Added. Calls through to the base
        class constructor.
        (KJS::GlobalExecState::~GlobalExecState): Added.
        (KJS::InterpreterExecState::InterpreterExecState): Added. Moved code to
        manipulate activeExecStates here since we don't want to have to check for the
        special case of globalExec.
        (KJS::InterpreterExecState::~InterpreterExecState): Added.
        (KJS::EvalExecState::EvalExecState): Added.
        (KJS::EvalExecState::~EvalExecState): Added.
        (KJS::FunctionExecState::FunctionExecState): Added.
        (KJS::FunctionExecState::~FunctionExecState): Added.

        * kjs/ExecState.h: Tweaked the header, includes, and declarations a bit.
        Made ExecState inherit from Noncopyable. Reformatted some comments and
        made them a bit more brief. Rearranged declarations a little bit and removed
        unused savedExec function. Changed seenLabels function to return a reference
        rather than a pointer. Made constructors and destructor protected, and also
        did the same with all data members. Renamed m_thisVal to m_thisValue and
        ls to m_labelStack. Added three new derived classes for each of the
        types of ExecState. The primary goal here was to remove a branch from the
        code in the destructor, but it's also clearer than overloading the arguments
        to the ExecState constructor.

        * kjs/JSGlobalObject.cpp:
        (KJS::getCurrentTime): Fixed formatting.
        (KJS::JSGlobalObject::pushActivation): Removed parentheses that don't make
        the expression clearer -- other similar sites didn't have these parentheses,
        even the one a couple lines earlier that sets stackEntry.
        (KJS::JSGlobalObject::tearOffActivation): Got rid of unneeded static_cast
        (I think I mentioned this during patch review) and used an early exit so that
        the entire contents of the function aren't nested inside an if statement.
        Also removed the check of codeType, instead checking Activation for 0.
        For now, I kept the codeType check, but inside an assertion.

        * kjs/JSGlobalObject.h: Changed type of globalExec to GlobalExecState.
        * kjs/function.cpp:
        (KJS::FunctionImp::callAsFunction): Changed type to FunctionExecState.
        (KJS::GlobalFuncImp::callAsFunction): Changed type to EvalExecState.
        * kjs/interpreter.cpp:
        (KJS::Interpreter::evaluate): Changed type to GlobalExecState.

        * kjs/nodes.cpp:
        (KJS::ContinueNode::execute): Changed code since seenLabels() returns a
        reference now instead of a pointer.
        (KJS::BreakNode::execute): Ditto.
        (KJS::LabelNode::execute): Ditto.

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

        Reviewed by Mark Rowe.

        Cleanup node2string a little.
        - Remove some unnecessary branching.
        - Factor out bracket and dot streaming into static inline functions.

        * kjs/nodes.h:
        * kjs/nodes2string.cpp:
        (KJS::bracketNodeStreamTo):
        (KJS::dotNodeStreamTo):
        (KJS::FunctionCallBracketNode::streamTo):
        (KJS::FunctionCallDotNode::streamTo):
        (KJS::PostIncBracketNode::streamTo):
        (KJS::PostDecBracketNode::streamTo):
        (KJS::PostIncDotNode::streamTo):
        (KJS::PostDecDotNode::streamTo):
        (KJS::DeleteBracketNode::streamTo):
        (KJS::DeleteDotNode::streamTo):
        (KJS::PreIncBracketNode::streamTo):
        (KJS::PreDecBracketNode::streamTo):
        (KJS::PreIncDotNode::streamTo):
        (KJS::PreDecDotNode::streamTo):
        (KJS::ReadModifyBracketNode::streamTo):
        (KJS::AssignBracketNode::streamTo):
        (KJS::ReadModifyDotNode::streamTo):
        (KJS::AssignDotNode::streamTo):
        (KJS::WhileNode::streamTo):

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

        Reviewed by Darin Adler.

        Fix http://bugs.webkit.org/show_bug.cgi?id=17001
        Bug 17001: Build error with Gtk port on Mac OS X

        If both XP_MACOSX and XP_UNIX are defined then X11.h and Carbon.h will both be included.
        These provide conflicting definitions for a type named 'Cursor'.  As XP_UNIX is set by
        the build system when targeting X11, it doesn't make sense for XP_MACOSX to also be set
        in this instance.

        * bindings/npapi.h: Don't define XP_MACOSX if XP_UNIX is defined.

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

        Reviewed by Oliver.

        - fix http://bugs.webkit.org/show_bug.cgi?id=17013
          JSC can't round trip certain for-loops

        Test: fast/js/toString-for-var-decl.html

        * kjs/nodes.h: Added PlaceholderTrueNode so we can put nodes into
        for loops without injecting the word "true" into them (nice, but not
        the bug fix). Fixed ForNode constructor so expr1WasVarDecl is set
        only when there is an expression, since it's common for the actual
        variable declaration to be moved by the parser.

        * kjs/nodes2string.cpp:
        (KJS::PlaceholderTrueNode::streamTo): Added. Empty.

2008-01-25  Oliver Hunt  <oliver@apple.com>

        Reviewed by Maciej.

        Fix for bug 17012: REGRESSION: JSC can't round trip an object literal

        Add logic to ensure that object literals and function expressions get
        parentheses when necessary.

        * kjs/nodes.h:
        * kjs/nodes2string.cpp:
        (KJS::SourceStream::operator<<):

2008-01-24  Steve Falkenburg  <sfalken@apple.com>

        Build fix.

        * JavaScriptCore.vcproj/JavaScriptCore.sln:

2008-01-24  Steve Falkenburg  <sfalken@apple.com>

        Build fix.

        * JavaScriptCore.vcproj/JavaScriptCoreSubmit.sln:

2008-01-24  Michael Goddard  <michael.goddard@trolltech.com>

        Reviewed by Simon.

        Fix QDateTime to JS Date conversion.
        Several conversion errors (some UTC related, some month
        offset related) and the conversion distance for Date
        to DateTime conversion weights were fixed (it should never
        be better to convert a JS Number into a Date rather than
        an int).
        
        * bindings/qt/qt_runtime.cpp:
        (KJS::Bindings::convertValueToQVariant):
        (KJS::Bindings::convertQVariantToValue):

2008-01-24  Michael Goddard  <michael.goddard@trolltech.com>

        Reviewed by Simon.

        Add support for calling QObjects.
        Add support for invokeDefaultMethod (via a call to
        a specific slot), and also allow using it as a
        constructor, like QtScript.
        

        * bindings/qt/qt_class.cpp:
        (KJS::Bindings::QtClass::fallbackObject):
        * bindings/qt/qt_instance.cpp:
        (KJS::Bindings::QtRuntimeObjectImp::construct):
        (KJS::Bindings::QtInstance::QtInstance):
        (KJS::Bindings::QtInstance::~QtInstance):
        (KJS::Bindings::QtInstance::implementsCall):
        (KJS::Bindings::QtInstance::invokeDefaultMethod):
        * bindings/qt/qt_instance.h:
        * bindings/qt/qt_runtime.cpp:
        (KJS::Bindings::findMethodIndex):
        (KJS::Bindings::QtRuntimeMetaMethod::QtRuntimeMetaMethod):
        (KJS::Bindings::QtRuntimeMetaMethod::callAsFunction):
        * bindings/qt/qt_runtime.h:

2008-01-24  Michael Goddard  <michael.goddard@trolltech.com>

        Reviewed by Simon.

        Code style cleanups.
        Add spaces before/after braces in inline function.

        * bindings/qt/qt_instance.h:

2008-01-24  Michael Goddard  <michael.goddard@trolltech.com>

        Reviewed by Simon.

        Code style cleanups.
        Remove spaces and unneeded declared parameter names.

        * bindings/qt/qt_instance.cpp:
        (KJS::Bindings::QtRuntimeObjectImp::removeFromCache):

2008-01-24  Michael Goddard  <michael.goddard@trolltech.com>

        Reviewed by Simon.

        Clear stale RuntimeObjectImps.
        Since other objects can have refs to the QtInstance,
        we can't rely on the QtInstance being deleted when the
        RuntimeObjectImp is invalidate or deleted.  This
        could result in a stale JSObject being returned for
        a valid Instance.

        * bindings/qt/qt_instance.cpp:
        (KJS::Bindings::QtRuntimeObjectImp::QtRuntimeObjectImp):
        (KJS::Bindings::QtRuntimeObjectImp::~QtRuntimeObjectImp):
        (KJS::Bindings::QtRuntimeObjectImp::invalidate):
        (KJS::Bindings::QtRuntimeObjectImp::removeFromCache):
        (KJS::Bindings::QtInstance::getRuntimeObject):
        * bindings/runtime.cpp:
        (KJS::Bindings::Instance::createRuntimeObject):
        * bindings/runtime.h:

2008-01-23  Alp Toker  <alp@atoker.com>

        Rubber-stamped by Mark Rowe.

        Remove whitespace after -I in automake include lists.

        * GNUmakefile.am:

2008-01-23  Michael Goddard <michael.goddard@trolltech.com>

        Reviewed by Lars Knoll <lars@trolltech.com>.

        Reworked the JavaScriptCore Qt bindings:
        
        * Add initial support for string and variant arrays, as well
        as sub QObjects in the JS bindings.
        
        * Don't expose fields marked as not scriptable by moc.
        
        * Add support for dynamic properties and accessing named
        QObject children of an object (like QtScript and older
        IE DOM style JS).
        * Add support for custom toString methods.
        
        * Fine tune some bindings to be closer to QtScript.
        Make void functions return undefined, and empty/
        null QStrings return a zero length string.
        
        * Create framework for allowing more direct method calls.
        Since RuntimeMethod doesn't allow us to add additional
        methods/properties to a function, add these classes.
        Start prototyping object.signal.connect(...).
        
        * Add signal support to the Qt bindings.
        Allow connecting to signals (object.signal.connect(slot)),
        disconnecting, and emitting signals.  Currently chooses
        the first signal that matches the name, so this will need
        improvement.
        
        * Add property names, and resolve signals closer to use.
        Enumerating properties now returns some of the Qt properties
        and signals.  Slots and methods aren't quite present.  Also,
        resolve signal connections etc. closer to the time of use, so
        we can do more dynamic resolution based on argument type etc.
        Still picks the first one with the same name, at the moment.
        
        * Make signature comparison code consistent.
        Use the same code for checking meta signatures in
        the method and fallback getters, and avoid a
        QByteArray construction when we can.
        
        * Fix minor memory leak, and handle pointers better.
        Delete the private object in the dtors, and use RefPtrs
        for holding Instances etc.
        
        * Handle method lookup better.
        Allow invocation time method lookup based on the arguments,
        which is closer to QtScript behaviour.  Also, cache the
        method lists and delete them in the QtClass dtor (stops
        a memory leak).
        
        * Improve JS to Qt data type conversions.
        Add some support for Date & RegExp JS objects,
        and provide some metrics on the quality of the
        conversion.
        
        * A couple of fixes for autotest failures.
        Better support for converting lists, read/write only
        QMetaProperty support, modified slot search order...)

        * bindings/qt/qt_class.cpp:
        (KJS::Bindings::QtClass::QtClass):
        (KJS::Bindings::QtClass::~QtClass):
        (KJS::Bindings::QtClass::name):
        (KJS::Bindings::QtClass::fallbackObject):
        (KJS::Bindings::QtClass::methodsNamed):
        (KJS::Bindings::QtClass::fieldNamed):
        * bindings/qt/qt_class.h:
        * bindings/qt/qt_instance.cpp:
        (KJS::Bindings::QtInstance::QtInstance):
        (KJS::Bindings::QtInstance::~QtInstance):
        (KJS::Bindings::QtInstance::getRuntimeObject):
        (KJS::Bindings::QtInstance::getClass):
        (KJS::Bindings::QtInstance::implementsCall):
        (KJS::Bindings::QtInstance::getPropertyNames):
        (KJS::Bindings::QtInstance::invokeMethod):
        (KJS::Bindings::QtInstance::invokeDefaultMethod):
        (KJS::Bindings::QtInstance::stringValue):
        (KJS::Bindings::QtInstance::booleanValue):
        (KJS::Bindings::QtInstance::valueOf):
        (KJS::Bindings::QtField::name):
        (KJS::Bindings::QtField::valueFromInstance):
        (KJS::Bindings::QtField::setValueToInstance):
        * bindings/qt/qt_instance.h:
        (KJS::Bindings::QtInstance::getBindingLanguage):
        (KJS::Bindings::QtInstance::getObject):
        * bindings/qt/qt_runtime.cpp:
        (KJS::Bindings::QWKNoDebug::QWKNoDebug):
        (KJS::Bindings::QWKNoDebug::~QWKNoDebug):
        (KJS::Bindings::QWKNoDebug::operator<<):
        (KJS::Bindings::):
        (KJS::Bindings::valueRealType):
        (KJS::Bindings::convertValueToQVariant):
        (KJS::Bindings::convertQVariantToValue):
        (KJS::Bindings::QtRuntimeMethod::QtRuntimeMethod):
        (KJS::Bindings::QtRuntimeMethod::~QtRuntimeMethod):
        (KJS::Bindings::QtRuntimeMethod::codeType):
        (KJS::Bindings::QtRuntimeMethod::execute):
        (KJS::Bindings::QtRuntimeMethodData::~QtRuntimeMethodData):
        (KJS::Bindings::QtRuntimeMetaMethodData::~QtRuntimeMetaMethodData):
        (KJS::Bindings::QtRuntimeConnectionMethodData::~QtRuntimeConnectionMethodData):
        (KJS::Bindings::QtMethodMatchType::):
        (KJS::Bindings::QtMethodMatchType::QtMethodMatchType):
        (KJS::Bindings::QtMethodMatchType::kind):
        (KJS::Bindings::QtMethodMatchType::isValid):
        (KJS::Bindings::QtMethodMatchType::isVariant):
        (KJS::Bindings::QtMethodMatchType::isMetaType):
        (KJS::Bindings::QtMethodMatchType::isUnresolved):
        (KJS::Bindings::QtMethodMatchType::isMetaEnum):
        (KJS::Bindings::QtMethodMatchType::enumeratorIndex):
        (KJS::Bindings::QtMethodMatchType::variant):
        (KJS::Bindings::QtMethodMatchType::metaType):
        (KJS::Bindings::QtMethodMatchType::metaEnum):
        (KJS::Bindings::QtMethodMatchType::unresolved):
        (KJS::Bindings::QtMethodMatchType::typeId):
        (KJS::Bindings::QtMethodMatchType::name):
        (KJS::Bindings::QtMethodMatchData::QtMethodMatchData):
        (KJS::Bindings::QtMethodMatchData::isValid):
        (KJS::Bindings::QtMethodMatchData::firstUnresolvedIndex):
        (KJS::Bindings::indexOfMetaEnum):
        (KJS::Bindings::findMethodIndex):
        (KJS::Bindings::findSignalIndex):
        (KJS::Bindings::QtRuntimeMetaMethod::QtRuntimeMetaMethod):
        (KJS::Bindings::QtRuntimeMetaMethod::mark):
        (KJS::Bindings::QtRuntimeMetaMethod::callAsFunction):
        (KJS::Bindings::QtRuntimeMetaMethod::getOwnPropertySlot):
        (KJS::Bindings::QtRuntimeMetaMethod::lengthGetter):
        (KJS::Bindings::QtRuntimeMetaMethod::connectGetter):
        (KJS::Bindings::QtRuntimeMetaMethod::disconnectGetter):
        (KJS::Bindings::QtRuntimeConnectionMethod::QtRuntimeConnectionMethod):
        (KJS::Bindings::QtRuntimeConnectionMethod::callAsFunction):
        (KJS::Bindings::QtRuntimeConnectionMethod::getOwnPropertySlot):
        (KJS::Bindings::QtRuntimeConnectionMethod::lengthGetter):
        (KJS::Bindings::QtConnectionObject::QtConnectionObject):
        (KJS::Bindings::QtConnectionObject::~QtConnectionObject):
        (KJS::Bindings::QtConnectionObject::metaObject):
        (KJS::Bindings::QtConnectionObject::qt_metacast):
        (KJS::Bindings::QtConnectionObject::qt_metacall):
        (KJS::Bindings::QtConnectionObject::execute):
        (KJS::Bindings::QtConnectionObject::match):
        (KJS::Bindings::::QtArray):
        (KJS::Bindings::::~QtArray):
        (KJS::Bindings::::rootObject):
        (KJS::Bindings::::setValueAt):
        (KJS::Bindings::::valueAt):
        * bindings/qt/qt_runtime.h:
        (KJS::Bindings::QtField::):
        (KJS::Bindings::QtField::QtField):
        (KJS::Bindings::QtField::fieldType):
        (KJS::Bindings::QtMethod::QtMethod):
        (KJS::Bindings::QtMethod::name):
        (KJS::Bindings::QtMethod::numParameters):
        (KJS::Bindings::QtArray::getLength):
        (KJS::Bindings::QtRuntimeMethod::d_func):
        (KJS::Bindings::QtRuntimeMetaMethod::d_func):
        (KJS::Bindings::QtRuntimeConnectionMethod::d_func):
        (KJS::Bindings::):
        * bindings/runtime.cpp:
        (KJS::Bindings::Instance::createBindingForLanguageInstance):
        (KJS::Bindings::Instance::createRuntimeObject):
        (KJS::Bindings::Instance::reallyCreateRuntimeObject):
        * bindings/runtime.h:

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

        Reviewed by Darin and Adam.

        <rdar://problem/5688975>
        div element on microsoft site has wrong left offset.
        
        Return true even if NPN_GetProperty returns null or undefined. This matches Firefox 
        (and is what the Silverlight plug-in expects).
        
        * bindings/NP_jsobject.cpp:
        (_NPN_GetProperty):

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

        Reviewed by Maciej Stachowiak.
        
        Fixed http://bugs.webkit.org/show_bug.cgi?id=16909
        REGRESSION: Amazon.com crash (ActivationImp)
        
        (and a bunch of other crashes)
        
        Plus, a .7% SunSpider speedup to boot.
        
        Replaced the buggy currentExec and savedExec mechanisms with an
        explicit ExecState stack.

        * kjs/collector.cpp:
        (KJS::Collector::collect): Explicitly mark the ExecState stack.

        (KJS::Collector::reportOutOfMemoryToAllExecStates): Slight change in
        behavior: We no longer throw an exception in any global ExecStates,
        since global ExecStates are more like pseudo-ExecStates, and aren't
        used for script execution. (It's unclear what would happen if you left
        an exception waiting around in a global ExecState, but it probably
        wouldn't be good.)

2008-01-21  Jan Michael Alonzo  <jmalonzo@unpluggable.com>

        Reviewed by Alp Toker.

        http://bugs.webkit.org/show_bug.cgi?id=16955
        Get errors when cross-compile webkit-gtk

        * GNUmakefile.am: removed ICU_CFLAGS

2008-01-18  Kevin McCullough  <kmccullough@apple.com>

        - Build fix.

        * kjs/ustring.h:

2008-01-18  Kevin McCullough  <kmccullough@apple.com>

        - Build fix.

        * kjs/ustring.cpp:
        * kjs/ustring.h:
        (KJS::UString::cost):

2008-01-18  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Geoff.

        - Correctly report cost of appended strings to trigger GC.

        * kjs/ustring.cpp:
        (KJS::):
        (KJS::UString::Rep::create):
        (KJS::UString::UString): Don't create unnecssary objects.
        (KJS::UString::cost): Report cost if necessary but also keep track of 
        reported cost.
        * kjs/ustring.h:

2008-01-18  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Holger.

        Fix return type conversions from Qt slots to JS values.
        
        This also fixes fast/dom/open-and-close-by-DOM.html, which called
        layoutTestController.windowCount().
        
        When constructing the QVariant that holds the return type we cannot
        use the QVarian(Type) constuctor as that will create a null variant.
        We have to use the QVariant(Type, void *) constructor instead, just
        like in QMetaObject::read() for example.
        

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

2008-01-18  Prasanth Ullattil  <prasanth.ullattil@trolltech.com>

        Reviewed by Simon Hausmann <hausmann@webkit.org>.

        Fix compilation on Win64(2): Implemented currentThreadStackBase on X86-64 on Windows
        

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

2008-01-18  Prasanth Ullattil  <prasanth.ullattil@trolltech.com>

        Reviewed by Simon Hausmann <hausmann@webkit.org>.

        Fix compilation on Win64(1): Define WTF_PLATFORM_X86_64 correctly on Win64.
        

        * wtf/Platform.h:

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

        Fix Windows build.

        * kjs/regexp_object.cpp:
        (KJS::regExpProtoFuncToString):

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

        Reviewed by Darin.

        Fix for http://bugs.webkit.org/show_bug.cgi?id=16901
        Convert remaining JS function objects to use the new PrototypeFunction class

        - Moves Boolean, Function, RegExp, Number, Object and Global functions to their
          own static function implementations so that they can be used with the
          PrototypeFunction class.  SunSpider says this is 1.003x as fast.

        * kjs/JSGlobalObject.cpp:
        (KJS::JSGlobalObject::reset):
        * kjs/array_object.h:
        * kjs/bool_object.cpp:
        (KJS::BooleanInstance::BooleanInstance):
        (KJS::BooleanPrototype::BooleanPrototype):
        (KJS::booleanProtoFuncToString):
        (KJS::booleanProtoFuncValueOf):
        (KJS::BooleanObjectImp::BooleanObjectImp):
        (KJS::BooleanObjectImp::implementsConstruct):
        (KJS::BooleanObjectImp::construct):
        (KJS::BooleanObjectImp::callAsFunction):
        * kjs/bool_object.h:
        (KJS::BooleanInstance::classInfo):
        * kjs/error_object.cpp:
        (KJS::ErrorPrototype::ErrorPrototype):
        (KJS::errorProtoFuncToString):
        * kjs/error_object.h:
        * kjs/function.cpp:
        (KJS::globalFuncEval):
        (KJS::globalFuncParseInt):
        (KJS::globalFuncParseFloat):
        (KJS::globalFuncIsNaN):
        (KJS::globalFuncIsFinite):
        (KJS::globalFuncDecodeURI):
        (KJS::globalFuncDecodeURIComponent):
        (KJS::globalFuncEncodeURI):
        (KJS::globalFuncEncodeURIComponent):
        (KJS::globalFuncEscape):
        (KJS::globalFuncUnEscape):
        (KJS::globalFuncKJSPrint):
        (KJS::PrototypeFunction::PrototypeFunction):
        * kjs/function.h:
        * kjs/function_object.cpp:
        (KJS::FunctionPrototype::FunctionPrototype):
        (KJS::functionProtoFuncToString):
        (KJS::functionProtoFuncApply):
        (KJS::functionProtoFuncCall):
        * kjs/function_object.h:
        * kjs/number_object.cpp:
        (KJS::NumberPrototype::NumberPrototype):
        (KJS::numberProtoFuncToString):
        (KJS::numberProtoFuncToLocaleString):
        (KJS::numberProtoFuncValueOf):
        (KJS::numberProtoFuncToFixed):
        (KJS::numberProtoFuncToExponential):
        (KJS::numberProtoFuncToPrecision):
        * kjs/number_object.h:
        (KJS::NumberInstance::classInfo):
        (KJS::NumberObjectImp::classInfo):
        (KJS::NumberObjectImp::):
        * kjs/object_object.cpp:
        (KJS::ObjectPrototype::ObjectPrototype):
        (KJS::objectProtoFuncValueOf):
        (KJS::objectProtoFuncHasOwnProperty):
        (KJS::objectProtoFuncIsPrototypeOf):
        (KJS::objectProtoFuncDefineGetter):
        (KJS::objectProtoFuncDefineSetter):
        (KJS::objectProtoFuncLookupGetter):
        (KJS::objectProtoFuncLookupSetter):
        (KJS::objectProtoFuncPropertyIsEnumerable):
        (KJS::objectProtoFuncToLocaleString):
        (KJS::objectProtoFuncToString):
        * kjs/object_object.h:
        * kjs/regexp_object.cpp:
        (KJS::RegExpPrototype::RegExpPrototype):
        (KJS::regExpProtoFuncTest):
        (KJS::regExpProtoFuncExec):
        (KJS::regExpProtoFuncCompile):
        (KJS::regExpProtoFuncToString):
        * kjs/regexp_object.h:

2008-01-16  Cameron Zwarich  <cwzwarich@uwaterloo.ca>

        Reviewed by Maciej & Darin.

        Fixes Bug 16868: Gmail crash
          and Bug 16871: Crash when loading apple.com/startpage

        <http://bugs.webkit.org/show_bug.cgi?id=16868>
        <rdar://problem/5686108>

        <http://bugs.webkit.org/show_bug.cgi?id=16871>
        <rdar://problem/5686670>

        Adds ActivationImp tear-off for cross-window eval() and fixes an
        existing garbage collection issue exposed by the ActivationImp tear-off
        patch (r29425) that can occur when an ExecState's m_callingExec is
        different than its m_savedExec.

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

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

        Reviewed by Oliver.

        Clean up MathObjectImp, it needed a little scrubbing.

        * kjs/math_object.cpp:
        (KJS::MathObjectImp::MathObjectImp):
        (KJS::MathObjectImp::getOwnPropertySlot):
        (KJS::MathObjectImp::getValueProperty):
        (KJS::mathProtoFuncACos):
        (KJS::mathProtoFuncASin):
        (KJS::mathProtoFuncATan):
        (KJS::mathProtoFuncATan2):
        (KJS::mathProtoFuncCos):
        (KJS::mathProtoFuncExp):
        (KJS::mathProtoFuncLog):
        (KJS::mathProtoFuncSin):
        (KJS::mathProtoFuncSqrt):
        (KJS::mathProtoFuncTan):
        * kjs/math_object.h:
        (KJS::MathObjectImp::classInfo):
        (KJS::MathObjectImp::):

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

        Reviewed by Geoffrey Garen.

        Rename Lexer variable bol to atLineStart.

        * kjs/lexer.cpp:
        (KJS::Lexer::Lexer):
        (KJS::Lexer::setCode):
        (KJS::Lexer::nextLine):
        (KJS::Lexer::lex):
        * kjs/lexer.h:

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

        Reviewed by Geoffrey Garen and Anders Carlsson.

        Remove uses of KJS_PURE_ECMA as we don't ever build with it defined,
        and we have many features that are not included in the ECMA spec.

        * kjs/lexer.cpp:
        (KJS::Lexer::Lexer):
        (KJS::Lexer::setCode):
        (KJS::Lexer::nextLine):
        (KJS::Lexer::lex):
        * kjs/lexer.h:
        * kjs/string_object.cpp:
        * kjs/string_object.h:

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

        Reviewed by Geoffrey Garen.

        Fix <rdar://problem/5595552> r27608 introduced a 20% increase in JS binary size, 4% increase in WebCore binary size

        - This changes the way JS functions that use Lookup tables are handled.  Instead of using
          one class per function, which allowed specialization of the virtual callAsFunction
          method, we now use one class, PrototypeFunction, which takes a pointer to a static
          function to use as the implementation.  This significantly decreases the binary size
          of JavaScriptCore (about 145k on an Intel only build) while still keeping some of the
          speedup r27608 garnered (SunSpider says this is 1.005x as slow, which should leave some
          wiggle room from the original 1% speedup) and keeps the functions implementations in separate
          functions to help with optimizations.

        * JavaScriptCore.exp:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * kjs/array_object.cpp:
        (KJS::arrayProtoFuncToString):
        (KJS::arrayProtoFuncToLocaleString):
        (KJS::arrayProtoFuncJoin):
        (KJS::arrayProtoFuncConcat):
        (KJS::arrayProtoFuncPop):
        (KJS::arrayProtoFuncPush):
        (KJS::arrayProtoFuncReverse):
        (KJS::arrayProtoFuncShift):
        (KJS::arrayProtoFuncSlice):
        (KJS::arrayProtoFuncSort):
        (KJS::arrayProtoFuncSplice):
        (KJS::arrayProtoFuncUnShift):
        (KJS::arrayProtoFuncFilter):
        (KJS::arrayProtoFuncMap):
        (KJS::arrayProtoFuncEvery):
        (KJS::arrayProtoFuncForEach):
        (KJS::arrayProtoFuncSome):
        (KJS::arrayProtoFuncIndexOf):
        (KJS::arrayProtoFuncLastIndexOf):
        * kjs/array_object.h:
        * kjs/date_object.cpp:
        (KJS::DatePrototype::getOwnPropertySlot):
        (KJS::dateProtoFuncToString):
        (KJS::dateProtoFuncToUTCString):
        (KJS::dateProtoFuncToDateString):
        (KJS::dateProtoFuncToTimeString):
        (KJS::dateProtoFuncToLocaleString):
        (KJS::dateProtoFuncToLocaleDateString):
        (KJS::dateProtoFuncToLocaleTimeString):
        (KJS::dateProtoFuncValueOf):
        (KJS::dateProtoFuncGetTime):
        (KJS::dateProtoFuncGetFullYear):
        (KJS::dateProtoFuncGetUTCFullYear):
        (KJS::dateProtoFuncToGMTString):
        (KJS::dateProtoFuncGetMonth):
        (KJS::dateProtoFuncGetUTCMonth):
        (KJS::dateProtoFuncGetDate):
        (KJS::dateProtoFuncGetUTCDate):
        (KJS::dateProtoFuncGetDay):
        (KJS::dateProtoFuncGetUTCDay):
        (KJS::dateProtoFuncGetHours):
        (KJS::dateProtoFuncGetUTCHours):
        (KJS::dateProtoFuncGetMinutes):
        (KJS::dateProtoFuncGetUTCMinutes):
        (KJS::dateProtoFuncGetSeconds):
        (KJS::dateProtoFuncGetUTCSeconds):
        (KJS::dateProtoFuncGetMilliSeconds):
        (KJS::dateProtoFuncGetUTCMilliseconds):
        (KJS::dateProtoFuncGetTimezoneOffset):
        (KJS::dateProtoFuncSetTime):
        (KJS::dateProtoFuncSetMilliSeconds):
        (KJS::dateProtoFuncSetUTCMilliseconds):
        (KJS::dateProtoFuncSetSeconds):
        (KJS::dateProtoFuncSetUTCSeconds):
        (KJS::dateProtoFuncSetMinutes):
        (KJS::dateProtoFuncSetUTCMinutes):
        (KJS::dateProtoFuncSetHours):
        (KJS::dateProtoFuncSetUTCHours):
        (KJS::dateProtoFuncSetDate):
        (KJS::dateProtoFuncSetUTCDate):
        (KJS::dateProtoFuncSetMonth):
        (KJS::dateProtoFuncSetUTCMonth):
        (KJS::dateProtoFuncSetFullYear):
        (KJS::dateProtoFuncSetUTCFullYear):
        (KJS::dateProtoFuncSetYear):
        (KJS::dateProtoFuncGetYear):
        * kjs/date_object.h:
        * kjs/function.cpp:
        (KJS::PrototypeFunction::PrototypeFunction):
        (KJS::PrototypeFunction::callAsFunction):
        * kjs/function.h:
        * kjs/lookup.h:
        (KJS::HashEntry::):
        (KJS::staticFunctionGetter):
        * kjs/math_object.cpp:
        (KJS::mathProtoFuncAbs):
        (KJS::mathProtoFuncACos):
        (KJS::mathProtoFuncASin):
        (KJS::mathProtoFuncATan):
        (KJS::mathProtoFuncATan2):
        (KJS::mathProtoFuncCeil):
        (KJS::mathProtoFuncCos):
        (KJS::mathProtoFuncExp):
        (KJS::mathProtoFuncFloor):
        (KJS::mathProtoFuncLog):
        (KJS::mathProtoFuncMax):
        (KJS::mathProtoFuncMin):
        (KJS::mathProtoFuncPow):
        (KJS::mathProtoFuncRandom):
        (KJS::mathProtoFuncRound):
        (KJS::mathProtoFuncSin):
        (KJS::mathProtoFuncSqrt):
        (KJS::mathProtoFuncTan):
        * kjs/math_object.h:
        * kjs/string_object.cpp:
        (KJS::stringProtoFuncToString):
        (KJS::stringProtoFuncValueOf):
        (KJS::stringProtoFuncCharAt):
        (KJS::stringProtoFuncCharCodeAt):
        (KJS::stringProtoFuncConcat):
        (KJS::stringProtoFuncIndexOf):
        (KJS::stringProtoFuncLastIndexOf):
        (KJS::stringProtoFuncMatch):
        (KJS::stringProtoFuncSearch):
        (KJS::stringProtoFuncReplace):
        (KJS::stringProtoFuncSlice):
        (KJS::stringProtoFuncSplit):
        (KJS::stringProtoFuncSubstr):
        (KJS::stringProtoFuncSubstring):
        (KJS::stringProtoFuncToLowerCase):
        (KJS::stringProtoFuncToUpperCase):
        (KJS::stringProtoFuncToLocaleLowerCase):
        (KJS::stringProtoFuncToLocaleUpperCase):
        (KJS::stringProtoFuncLocaleCompare):
        (KJS::stringProtoFuncBig):
        (KJS::stringProtoFuncSmall):
        (KJS::stringProtoFuncBlink):
        (KJS::stringProtoFuncBold):
        (KJS::stringProtoFuncFixed):
        (KJS::stringProtoFuncItalics):
        (KJS::stringProtoFuncStrike):
        (KJS::stringProtoFuncSub):
        (KJS::stringProtoFuncSup):
        (KJS::stringProtoFuncFontcolor):
        (KJS::stringProtoFuncFontsize):
        (KJS::stringProtoFuncAnchor):
        (KJS::stringProtoFuncLink):
        * kjs/string_object.h:

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

        Reviewed by Adam Roben.
        
        Some tweaks to our headerdoc, suggested by David Gatwood on the docs
        team.

        * API/JSBase.h:
        * API/JSObjectRef.h:
        * API/JSStringRef.h:
        * API/JSValueRef.h:

2008-01-15  Alp Toker  <alp@atoker.com>

        Rubber-stamped by Anders.

        Make the HTTP backend configurable in the GTK+ port. curl is currently
        the only option.

        * wtf/Platform.h: Don't hard-code WTF_USE_CURL for GTK

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

        Reviewed by Beth Dakin.

        Remove unneeded variable.

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

2008-01-14  Steve Falkenburg  <sfalken@apple.com>

        Use shared vsprops for most vcproj properties.
        
        Reviewed by Darin.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Add missing Debug_Internal config.
        * JavaScriptCore.vcproj/WTF/WTF.vcproj: Add missing Debug_Internal config.
        * JavaScriptCore.vcproj/testkjs/testkjs.vcproj:

2008-01-14  Adam Roben  <aroben@apple.com>

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Added
        some headers that were missing from the vcproj so their contents will
        be included in Find in Files.

2008-01-14  Adam Roben  <aroben@apple.com>

        Fix Bug 16871: Crash when loading apple.com/startpage

        <http://bugs.webkit.org/show_bug.cgi?id=16871>
        <rdar://problem/5686670>

        Patch written by Darin, reviewed by me.

        * kjs/ExecState.cpp:
        (KJS::ExecState::mark): Call ActivationImp::markChildren if our
        m_activation is on the stack. This is what ScopeChain::mark also does,
        but apparently in some cases it's possible for an ExecState's
        ActivationImp to not be in any ScopeChain.

2008-01-14  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Oliver.

        -<rdar://problem/5622667> REGRESSION (Leopard-ToT): Endless loading loop
        trying to view techreport.com comments
        - We need to set values in the map, because if they are already in the
        map they will not be reset when we use add().

        * kjs/array_instance.cpp:
        (KJS::ArrayInstance::put):

2008-01-14  Darin Adler  <darin@apple.com>

        Reviewed by Adam.

        - re-speed-up the page load test (my StringImpl change slowed it down)

        * wtf/RefCounted.h:
        (WTF::RefCounted::RefCounted): Allow derived classes to start with a reference
        count other than 0. Eventually everyone will want to start with a 1. This is a
        staged change. For now, there's a default of 0, and you can specify 1. Later,
        there will be no default and everyone will have to specify. And then later, there
        will be a default of 1. Eventually, we can take away even the option of starting
        with 0!

        * wtf/Vector.h:
        (WTF::Vector::Vector): Sped up creation of non-empty vectors by removing the
        overhead of first constructing something empty and then calling resize.
        (WTF::Vector::clear): Sped up the common case of calling clear on an empty
        vector by adding a check for that case.
        (WTF::Vector::releaseBuffer): Marked this function inline and removed a branch
        in the case of vectors with no inline capacity (normal vectors) by leaving out
        the code to copy the inline buffer in that case.

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

        Reviewed by David Kilzer.

        http://bugs.webkit.org/show_bug.cgi?id=16787
        array.splice() with 1 element not working

        Test: fast/js/array-splice.html

        * kjs/array_object.cpp:
        (KJS::ArrayProtoFuncSplice::callAsFunction): Implement this Mozilla extension, and fix
        some other edge cases.

2008-01-13  Steve Falkenburg  <sfalken@apple.com>

        Share common files across projects.
        
        Unify vsprops files
        Debug:          common.vsprops, debug.vsprops
        Debug_Internal: common.vsprops, debug.vsprops, debug_internal.vsprops
        Release:        common.vsprops, release.vsprops
        
        Shared properties can go into common.vsprops, shared debug settings can go into debug.vsprops.
        debug_internal.vsprops will be mostly empty except for file path prefix modifiers.

        Reviewed by Adam Roben.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
        * JavaScriptCore.vcproj/WTF/WTF.vcproj:
        * JavaScriptCore.vcproj/debug.vsprops: Removed.
        * JavaScriptCore.vcproj/debug_internal.vsprops: Removed.
        * JavaScriptCore.vcproj/release.vsprops: Removed.
        * JavaScriptCore.vcproj/testkjs/testkjs.vcproj:

2008-01-13  Marius Bugge Monsen  <mbm@trolltech.com>

        Contributions and review by Adriaan de Groot,
        Simon Hausmann, Eric Seidel, and Darin Adler.

        - http://bugs.webkit.org/show_bug.cgi?id=16590
          Compilation fixes for Solaris.

        * kjs/DateMath.h:
        (KJS::GregorianDateTime::GregorianDateTime): Use the WIN_OS code path
        for SOLARIS too, presumably because Solaris also lacks the tm_gtoff and tm_zone
        fields.
        (KJS::GregorianDateTime::operator tm): Ditto.

        * kjs/collector.cpp:
        (KJS::currentThreadStackBase): Use thr_stksegment on Solaris.

        * wtf/MathExtras.h:
        (isfinite): Implement for Solaris.
        (isinf): Ditto.
        (signbit): Ditto. But this one is wrong, so I added a FIXME.

        * wtf/Platform.h: Define PLATFORM(SOLARIS) when "sun" or "__sun" is defined.

2008-01-13  Michael Goddard  <michael.goddard@trolltech.com>

        Reviewed by Anders Carlsson.

        Add binding language type to Instance.
        Allows runtime determination of the type of an
        Instance, to allow safe casting.  Doesn't actually
        add any safe casting yet, though.

        Add a helper function to get an Instance from a JSObject*.
        Given an object and the expected binding language, see if
        the JSObject actually wraps an Instance of the given type
        and return it.  Otherwise return 0.

        Move RuntimeObjectImp creations into Instance.
        Make the ctor protected, and Instance a friend class, so
        that all creation of RuntimeObjectImps goes through
        one place.

        Remove copy ctor/assignment operator for QtInstance.
        Instance itself is Noncopyable, so QtInstance doesn't
        need to have these.

        Add caching for QtInstance and associated RuntimeObjectImps.
        Push any dealings with QtLanguage bindings into QtInstance,
        and cache them there, rather than in the Instance layer.  Add
        a QtRuntimeObjectImp to help with caching.

        * JavaScriptCore.exp:
        * bindings/c/c_instance.h:
        * bindings/jni/jni_instance.h:
        * bindings/objc/objc_instance.h:
        * bindings/qt/qt_instance.cpp:
        (KJS::Bindings::QtRuntimeObjectImp::QtRuntimeObjectImp):
        (KJS::Bindings::QtRuntimeObjectImp::~QtRuntimeObjectImp):
        (KJS::Bindings::QtRuntimeObjectImp::invalidate):
        (KJS::Bindings::QtRuntimeObjectImp::removeFromCache):
        (KJS::Bindings::QtInstance::QtInstance):
        (KJS::Bindings::QtInstance::~QtInstance):
        (KJS::Bindings::QtInstance::getQtInstance):
        (KJS::Bindings::QtInstance::getRuntimeObject):
        * bindings/qt/qt_instance.h:
        (KJS::Bindings::QtInstance::getBindingLanguage):
        * bindings/runtime.cpp:
        (KJS::Bindings::Instance::createBindingForLanguageInstance):
        (KJS::Bindings::Instance::createRuntimeObject):
        (KJS::Bindings::Instance::getInstance):
        * bindings/runtime.h:
        * bindings/runtime_object.h:
        (KJS::RuntimeObjectImp::getInternalInstance):

2008-01-12  Alp Toker  <alp@atoker.com>

        Reviewed by Mark Rowe.

        Hide non-public symbols in GTK+/autotools release builds.

        * GNUmakefile.am:

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

        Reviewed by Mark Rowe.

        Fix http://bugs.webkit.org/show_bug.cgi?id=16852
        Fixes leaking of ActivationStackNode objects.

        * kjs/JSGlobalObject.cpp:
        (KJS::JSGlobalObject::deleteActivationStack):
        (KJS::JSGlobalObject::~JSGlobalObject):
        (KJS::JSGlobalObject::init):
        (KJS::JSGlobalObject::reset):
        * kjs/JSGlobalObject.h:

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

        - try to fix Qt Windows build

        * pcre/dftables: Remove reliance on the list form of Perl pipes.

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

        - try to fix Qt build

        * kjs/function.cpp: Added include of scope_chain_mark.h.
        * kjs/scope_chain_mark.h: Added multiple-include guards.

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

        Another Windows build fix.

        * kjs/Activation.h:

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

        Attempted Windows build fix.  Use struct consistently when forward-declaring
        ActivationStackNode and StackActivation.

        * kjs/Activation.h:
        * kjs/JSGlobalObject.h:

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

        Reviewed by Maciej.

        Fixes a problem with the ActivationImp tear-off patch (r29425) where
        some of the calls to JSGlobalObject::tearOffActivation() were using
        the wrong test to determine whether it should leave a relic behind.

        * kjs/function.cpp:
        (KJS::FunctionImp::argumentsGetter):
        (KJS::ActivationImp::getOwnPropertySlot):

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

        Reviewed by Oliver Hunt.
        
        Fixed <rdar://problem/5665251> REGRESSION (r28880-r28886): Global
        variable access (16644)
        
        This bug was caused by var declarations shadowing built-in properties of
        the global object.
        
        To match Firefox, we've decided that var declarations will never shadow
        built-in properties of the global object or its prototypes. We used to
        behave more like IE, which allows shadowing, but walking that line got
        us into trouble with websites that sent us down the Firefox codepath.

        * kjs/JSVariableObject.h:
        (KJS::JSVariableObject::symbolTableGet): New code to support calling
        hasProperty before the variable object is fully initialized (so you
        can call it during initialization).

        * kjs/nodes.cpp:.
        (KJS::ProgramNode::initializeSymbolTable): Always do a full hasProperty
        check when looking for duplicates, not getDirect, since it only checks
        the property map, and not hasOwnProperty, since it doesn't check
        prototypes.
        (KJS::EvalNode::processDeclarations): ditto

        * kjs/property_slot.h:
        (KJS::PropertySlot::ungettableGetter): Best function name evar.

2008-01-11  Cameron Zwarich  <cwzwarich@uwaterloo.ca>

        Reviewed by Maciej.

        Optimized ActivationImp allocation, so that activation records are now
        first allocated on an explicitly managed stack and only heap allocated
        when necessary. Roughly a 5% improvement on SunSpider, and a larger
        improvement on benchmarks that use more function calls.

        * JavaScriptCore.xcodeproj/project.pbxproj:
        * kjs/Activation.h: Added.
        (KJS::ActivationImp::ActivationData::ActivationData):
        (KJS::ActivationImp::ActivationImp):
        (KJS::ActivationImp::classInfo):
        (KJS::ActivationImp::isActivationObject):
        (KJS::ActivationImp::isOnStack):
        (KJS::ActivationImp::d):
        (KJS::StackActivation::StackActivation):
        * kjs/ExecState.cpp:
        (KJS::ExecState::ExecState):
        (KJS::ExecState::~ExecState):
        * kjs/ExecState.h:
        (KJS::ExecState::replaceScopeChainTop):
        (KJS::ExecState::setActivationObject):
        (KJS::ExecState::setLocalStorage):
        * kjs/JSGlobalObject.cpp:
        (KJS::JSGlobalObject::reset):
        (KJS::JSGlobalObject::pushActivation):
        (KJS::JSGlobalObject::checkActivationCount):
        (KJS::JSGlobalObject::popActivationHelper):
        (KJS::JSGlobalObject::popActivation):
        (KJS::JSGlobalObject::tearOffActivation):
        * kjs/JSGlobalObject.h:
        * kjs/JSVariableObject.h:
        (KJS::JSVariableObject::JSVariableObjectData::JSVariableObjectData):
        (KJS::JSVariableObject::JSVariableObject):
        * kjs/function.cpp:
        (KJS::FunctionImp::argumentsGetter):
        (KJS::ActivationImp::ActivationImp):
        (KJS::ActivationImp::~ActivationImp):
        (KJS::ActivationImp::init):
        (KJS::ActivationImp::getOwnPropertySlot):
        (KJS::ActivationImp::markHelper):
        (KJS::ActivationImp::mark):
        (KJS::ActivationImp::ActivationData::ActivationData):
        (KJS::GlobalFuncImp::callAsFunction):
        * kjs/function.h:
        * kjs/nodes.cpp:
        (KJS::PostIncResolveNode::evaluate):
        (KJS::PostDecResolveNode::evaluate):
        (KJS::PreIncResolveNode::evaluate):
        (KJS::PreDecResolveNode::evaluate):
        (KJS::ReadModifyResolveNode::evaluate):
        (KJS::AssignResolveNode::evaluate):
        (KJS::WithNode::execute):
        (KJS::TryNode::execute):
        (KJS::FunctionBodyNode::processDeclarations):
        (KJS::FuncExprNode::evaluate):
        * kjs/object.h:
        * kjs/scope_chain.h:
        (KJS::ScopeChain::replace):
        * kjs/scope_chain_mark.h: Added.
        (KJS::ScopeChain::mark):

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

        Reviewed by Mark Rowe.

        Fix the (clean) qmake build. For generating chartables.c we don't
        depend on a separate input source file anymore, the dftables perl
        script is enough. So use that instead as value for the .input
        variable, to ensure that qmake also generates a rule to call dftables.

        * pcre/pcre.pri:

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

        Reviewed by John Sullivan.

        Fixed some world leak reports:
        * <rdar://problem/5669436> PLT complains about world leak of 1 JavaScript
        Interpreter after running cvs-base suite

        * <rdar://problem/5669423> PLT complains about world leak if browser
        window is open when PLT starts
        
        * kjs/collector.h: Added the ability to distinguish between global
        objects and GC-protected global objects, since we only consider the
        latter to be world leaks.
        * kjs/collector.cpp:

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

        Silence qmake warning about ctgen lacking input.

        Rubber-stamped by Alp Toker.

        * pcre/pcre.pri:

2008-01-10  David Kilzer  <ddkilzer@apple.com>

        dftables should be rewritten as a script

        <http://bugs.webkit.org/show_bug.cgi?id=16818>
        <rdar://problem/5681463>

        Reviewed by Darin.

        Rewrote the dftables utility in Perl.  Attempted to switch all
        build systems to call the script directly instead of building
        a binary first.  Only the Xcode build was able to be tested.

        * DerivedSources.make: Added pcre directory to VPATH and changed
        to invoke dftables directly.
        * GNUmakefile.am: Removed build information and changed to invoke
        dftables directly.
        * JavaScriptCore.vcproj/JavaScriptCore.sln: Removed reference to
        dftables project.
        * JavaScriptCore.vcproj/JavaScriptCoreSubmit.sln: Ditto.
        * JavaScriptCore.vcproj/dftables: Removed.
        * JavaScriptCore.vcproj/dftables/dftables.vcproj: Removed.
        * JavaScriptCore.xcodeproj/project.pbxproj: Removed dftables target.
        * jscore.bkl: Removed dftables executable definition.
        * pcre/dftables: Copied from JavaScriptCore/pcre/dftables.cpp.
        * pcre/dftables.cpp: Removed.
        * pcre/dftables.pro: Removed.
        * pcre/pcre.pri: Removed references to dftables.cpp and changed to
        invoke dftables directly.

2008-01-10  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        - fix http://bugs.webkit.org/show_bug.cgi?id=16782
          <rdar://problem/5675331> REGRESSION(r29266): Reproducible crash in fast/replaced/image-map.html

        The crash resulted from a native object (DumpRenderTree's
        EventSender) causing its wrapper to be invalidated (by clicking a
        link that replaced the document in the window) and consequently
        deallocated. The fix is to use RefPtrs to protect the native object
        from deletion by self-invalidation.

        * bindings/runtime_method.cpp:
        (RuntimeMethod::callAsFunction):
        * bindings/runtime_object.cpp:
        (RuntimeObjectImp::fallbackObjectGetter):
        (RuntimeObjectImp::fieldGetter):
        (RuntimeObjectImp::methodGetter):
        (RuntimeObjectImp::put):
        (RuntimeObjectImp::defaultValue):
        (RuntimeObjectImp::callAsFunction):

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

        Reviewed by Maciej Stachowiak.

        Turn testIsInteger assertions into compile-time asserts and move them into HashTraits.h
        where possible.

        * kjs/testkjs.cpp:
        * wtf/HashTraits.h:

2008-01-07  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Mark.

        Enable SVG_FONTS by default.

        * Configurations/JavaScriptCore.xcconfig:

2008-01-07  Darin Adler  <darin@apple.com>

        Rubber stamped by David Kilzer.

        - get rid of empty fpconst.cpp

        * GNUmakefile.am: Remove fpconst.cpp.
        * JavaScriptCore.pri: Ditto.
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Ditto.
        * JavaScriptCore.xcodeproj/project.pbxproj: Ditto.
        * JavaScriptCoreSources.bkl: Ditto.

        * kjs/fpconst.cpp: Removed.

2008-01-07  Darin Adler  <darin@apple.com>

        Reviewed by David Kilzer.

        - fix alignment problem with NaN and Inf globals

        * kjs/fpconst.cpp: Move the contents of this file from here back to
        value.cpp. The reason this was in a separate file is that the DARWIN
        version of this used a declaration of the globals with a different
        type to avoid creating "init routines". That's no longer necessary for
        DARWIN and was never necessary for the non-DARWIN code path.
        To make this patch easy to merge, I didn't actually delete this file
        yet. We'll do that in a separate changeset.

        * kjs/value.cpp: If C99's NAN and INFINITY are present, then use them,
        othrewise use the union trick from fpconst.cpp. I think it would be
        better to eliminate KJS::NaN and KJS::Inf and just use NAN and INFINITY
        directly or std::numeric_limits<double>::quiet_nan() and
        std::numeric_limits<double>::infinity(). But when I tried that, it
        slowed down SunSpider. Someone else could do that cleanup if they
        could do it without slowing down the engine.

2008-01-07  Adam Roben  <aroben@apple.com>

        Windows build fix

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Added
        JavaScript.h to the project.
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGenerated.make:
        Copy JavaScript.h to WEBKITOUTPUTDIR.

2008-01-07  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Darin.

        Fix Mac build.

        * API/JSNode.c:
        * API/JSNode.h:
        * API/JSNodeList.c:
        * API/JSNodeList.h:
        * API/JavaScript.h:
        * API/JavaScriptCore.h:
        * API/minidom.c:
        * JavaScriptCore.xcodeproj/project.pbxproj:

2008-01-07  Alp Toker  <alp@atoker.com>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=16029
        JavaScriptCore.h is not suitable for platforms other than Mac OS X

        Introduce a new JavaScriptCore/JavaScript.h public API header. This
        should be used by all new portable code using the JavaScriptCore API.

        JavaScriptCore/JavaScriptCore.h will remain for compatibility with
        existing applications that depend on it including JSStringRefCF.h
        which isn't portable.

        Also add minidom to the GTK+/autotools build since we can now support
        it on all platforms.

        * API/JSNode.h:
        * API/JSNodeList.h:
        * API/JavaScript.h: Added.
        * API/JavaScriptCore.h:
        * ForwardingHeaders/JavaScriptCore/JavaScript.h: Added.
        * GNUmakefile.am:
        * JavaScriptCore.xcodeproj/project.pbxproj:

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

        Reviewed by Sam.

        Abstract all DateObject.set* functions in preparation for fixing:
        http://bugs.webkit.org/show_bug.cgi?id=16753
        
        SunSpider had random changes here and there but was overall a wash.

        * kjs/date_object.cpp:
        (KJS::fillStructuresUsingTimeArgs):
        (KJS::setNewValueFromTimeArgs):
        (KJS::setNewValueFromDateArgs):
        (KJS::DateProtoFuncSetMilliSeconds::callAsFunction):
        (KJS::DateProtoFuncSetUTCMilliseconds::callAsFunction):
        (KJS::DateProtoFuncSetSeconds::callAsFunction):
        (KJS::DateProtoFuncSetUTCSeconds::callAsFunction):
        (KJS::DateProtoFuncSetMinutes::callAsFunction):
        (KJS::DateProtoFuncSetUTCMinutes::callAsFunction):
        (KJS::DateProtoFuncSetHours::callAsFunction):
        (KJS::DateProtoFuncSetUTCHours::callAsFunction):
        (KJS::DateProtoFuncSetDate::callAsFunction):
        (KJS::DateProtoFuncSetUTCDate::callAsFunction):
        (KJS::DateProtoFuncSetMonth::callAsFunction):
        (KJS::DateProtoFuncSetUTCMonth::callAsFunction):
        (KJS::DateProtoFuncSetFullYear::callAsFunction):
        (KJS::DateProtoFuncSetUTCFullYear::callAsFunction):

2008-01-06  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Dan.

        Add new helper function isArabicChar - SVG Fonts support needs it.

        * wtf/unicode/icu/UnicodeIcu.h:
        (WTF::Unicode::isArabicChar):
        * wtf/unicode/qt4/UnicodeQt4.h:
        (WTF::Unicode::isArabicChar):

2008-01-06  Alp Toker  <alp@atoker.com>

        Reviewed by Mark Rowe.

        Use $(EXEEXT) to account for the .exe extension in the GTK+ Windows
        build. (This is already done correctly in DerivedSources.make.) Issue
        noticed by Mikkel when building in Cygwin.

        Add a missing slash. This was a hack from the qmake build system that
        isn't necessary with autotools.

        * GNUmakefile.am:

2008-01-05  Darin Adler  <darin@apple.com>

        * API/JSRetainPtr.h: One more file that needed the change below.

2008-01-05  Darin Adler  <darin@apple.com>

        * wtf/OwnPtr.h: OwnPtr needs the same fix as RefPtr below.

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

        Build fix.

        Reviewed by Maciej.

        * wtf/RetainPtr.h: Use PtrType instead of T* because of the
        RemovePointer magic.

2008-01-05  Darin Adler  <darin@apple.com>

        Rubber stamped by Maciej Stachowiak.

        - cut down own PIC branches by using a pointer-to-member-data instead of a
          pointer-to-member-function in WTF smart pointers

        * wtf/OwnArrayPtr.h:
        * wtf/OwnPtr.h:
        * wtf/PassRefPtr.h:
        * wtf/RefPtr.h:
        * wtf/RetainPtr.h:
        Use a pointer to the m_ptr member instead of the get member.
        The GCC compiler generates better code for this idiom.

2008-01-05  Henry Mason  <hmason@mac.com>

        Reviewed by Maciej Stachowiak.

        http://bugs.webkit.org/show_bug.cgi?id=16738
        Bug 16738: Collector block offset could be stored as an cell offset instead of a byte offset

        Gives a 0.4% SunSpider boost and prettier code.

        * kjs/collector.cpp: Switched to cell offsets from byte offsets
        (KJS::Collector::heapAllocate):
        (KJS::Collector::sweep):

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

        Reviewed by Maciej Stachowiak.

        Have the two malloc zones print useful diagnostics if their free method are unexpectedly invoked.
        Due to <rdar://problem/5671357> this can happen if an application attempts to free a pointer that
        was not allocated by any registered malloc zone on the system.

        * kjs/CollectorHeapIntrospector.h:
        * wtf/FastMalloc.cpp:

2008-01-04  Alp Toker  <alp@atoker.com>

        GTK+ autotools build fix. Terminate empty rules.

        * GNUmakefile.am:

2008-01-03  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Mark Rowe.

        Fix compilation with gcc 4.3: limits.h is needed for INT_MAX.

        * pcre/pcre_exec.cpp:

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

        * tests/mozilla/expected.html: The fix for bug 16696 also fixed a test
        case, ecma_3/RegExp/perlstress-002.js, so updated results to expect
        that test to succeed.

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

        Reviewed by Geoff.

        - fix http://bugs.webkit.org/show_bug.cgi?id=16696
          JSCRE fails fails to match Acid3 regexp

        Test: fast/regex/early-acid3-86.html

        The problem was with the cutoff point between backreferences and octal
        escape sequences. We need to determine the cutoff point by counting the
        total number of capturing brackets, which requires an extra pass through
        the expression when compiling it.

        * pcre/pcre_compile.cpp:
        (CompileData::CompileData): Added numCapturingBrackets. Removed some
        unused fields.
        (compileBranch): Use numCapturingBrackets when calling checkEscape.
        (calculateCompiledPatternLength): Use numCapturingBrackets when calling
        checkEscape, and also store the bracket count at the end of the compile.
        (jsRegExpCompile): Call calculateCompiledPatternLength twice -- once to
        count the number of brackets and then a second time to calculate the length.

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

        Reviewed by Geoff.

        - fix http://bugs.webkit.org/show_bug.cgi?id=16696
          JSCRE fails fails to match Acid3 regexp

        Test: fast/regex/early-acid3-86.html

        The problem was with the cutoff point between backreferences and octal
        escape sequences. We need to determine the cutoff point by counting the
        total number of capturing brackets, which requires an extra pass through
        the expression when compiling it.

        * pcre/pcre_compile.cpp:
        (CompileData::CompileData): Added numCapturingBrackets. Removed some
        unused fields.
        (compileBranch): Use numCapturingBrackets when calling checkEscape.
        (calculateCompiledPatternLength): Use numCapturingBrackets when calling
        checkEscape, and also store the bracket count at the end of the compile.
        (jsRegExpCompile): Call calculateCompiledPatternLength twice -- once to
        count the number of brackets and then a second time to calculate the length.

2008-01-02  David Kilzer <ddkilzer@webkit.org>

        Reviewed and landed by Darin.

        * kjs/nodes.cpp:
        (KJS::DoWhileNode::execute): Added a missing return.

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

        - try to fix Qt build

        * wtf/unicode/qt4/UnicodeQt4.h:
        (WTF::Unicode::foldCase): Add some missing const.

2008-01-02  Alice Liu  <alice.liu@apple.com>

        Reviewed by Sam Weinig.

        need to export ASCIICType.h for use in DRT

        * JavaScriptCore.vcproj/WTF/WTF.vcproj:
        * wtf/ASCIICType.h:
        (WTF::isASCIIUpper):

2008-01-02  Sam Weinig  <sam@webkit.org>

        Reviewed by Beth Dakin.

        Cleanup error_object.h/cpp.

        * kjs/JSGlobalObject.cpp:
        (KJS::JSGlobalObject::reset):
        * kjs/error_object.cpp:
        (KJS::):
        (KJS::ErrorInstance::ErrorInstance):
        (KJS::ErrorPrototype::ErrorPrototype):
        (KJS::ErrorProtoFuncToString::ErrorProtoFuncToString):
        (KJS::ErrorProtoFuncToString::callAsFunction):
        (KJS::ErrorObjectImp::ErrorObjectImp):
        (KJS::ErrorObjectImp::implementsConstruct):
        (KJS::ErrorObjectImp::construct):
        (KJS::ErrorObjectImp::callAsFunction):
        (KJS::NativeErrorPrototype::NativeErrorPrototype):
        (KJS::NativeErrorImp::NativeErrorImp):
        (KJS::NativeErrorImp::implementsConstruct):
        (KJS::NativeErrorImp::construct):
        (KJS::NativeErrorImp::callAsFunction):
        (KJS::NativeErrorImp::mark):
        * kjs/error_object.h:
        (KJS::ErrorInstance::classInfo):
        (KJS::NativeErrorImp::classInfo):

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

        Rubber-stamped by Alp Toker.

        * GNUmakefile.am: Add missing dependency on grammar.y.

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

        Reviewed by Eric.

        - fix for http://bugs.webkit.org/show_bug.cgi?id=16695
          JSC allows non-identifier codepoints in identifiers (affects Acid3)

        Test: fast/js/kde/parse.html

        * kjs/lexer.cpp:
        (KJS::Lexer::lex): Added additional states to distinguish Unicode escapes at the
        start of identifiers from ones inside identifiers. Rejected characters that don't pass
        the isIdentStart and isIdentPart tests.
        (KJS::Lexer::convertUnicode): Removed incorrect FIXME comment.

        * kjs/lexer.h: Added new states to distinguish \u escapes at the start of identifiers
        from \u escapes inside identifiers.

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

        - rolled scope chain optimization out; it was breaking the world

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

        Reviewed by Geoff.

        - http://bugs.webkit.org/show_bug.cgi?id=16685
          eliminate List::empty() to cut down on PIC branches

        Also included one other speed-up -- remove the call to reserveCapacity from
        FunctionBodyNode::processDeclarations in all but the most unusual cases.

        Together these make SunSpider 1.016x as fast.

        * JavaScriptCore.exp: Updated.
        * kjs/ExecState.cpp:
        (KJS::globalEmptyList): Added. Called only when creating global ExecState
        instances.
        (KJS::ExecState::ExecState): Broke constructor up into three separate functions,
        for the three separate node types. Also went through each of the three and
        streamlined as much as possible, removing dead code. This prevents us from having
        to access the global in the function body version of the constructor.

        * kjs/ExecState.h: Added emptyList(). Replaced the constructor with a set of
        three that are specific to the different node types that can create new execution
        state objects.

        * kjs/array_object.cpp:
        (KJS::ArrayProtoFuncToLocaleString::callAsFunction): Use exec->emptyList() instead
        of List::empty().
        (KJS::ArrayProtoFuncConcat::callAsFunction): Ditto.
        (KJS::ArrayProtoFuncSlice::callAsFunction): Ditto.
        (KJS::ArrayProtoFuncSplice::callAsFunction): Ditto.
        (KJS::ArrayProtoFuncFilter::callAsFunction): Ditto.
        * kjs/function.cpp:
        (KJS::FunctionImp::callAsFunction): Updated to call new ExecState constructor.
        (KJS::GlobalFuncImp::callAsFunction): Ditto (for eval).
        * kjs/function_object.cpp:
        (FunctionObjectImp::construct): Use exec->emptyList() instead of List::empty().

        * kjs/list.cpp: Removed List::empty.
        * kjs/list.h: Ditto.

        * kjs/nodes.cpp:
        (KJS::ElementNode::evaluate): Use exec->emptyList() instead of List::empty().
        (KJS::ArrayNode::evaluate): Ditto.
        (KJS::ObjectLiteralNode::evaluate): Ditto.
        (KJS::PropertyListNode::evaluate): Ditto.
        (KJS::FunctionBodyNode::processDeclarations): Another speed-up. Check the capacity
        before calling reserveCapacity, because it doesn't get inlined the local storage
        vector is almost always big enough -- saving the function call overhead is a big
        deal.
        (KJS::FuncDeclNode::makeFunction): Use exec->emptyList() instead of List::empty().
        (KJS::FuncExprNode::evaluate): Ditto.
        * kjs/object.cpp:
        (KJS::tryGetAndCallProperty): Ditto.
        * kjs/property_slot.cpp:
        (KJS::PropertySlot::functionGetter): Ditto.
        * kjs/string_object.cpp:
        (KJS::StringProtoFuncSplit::callAsFunction): Ditto.

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

        Reviewed by Geoff.

        - fix http://bugs.webkit.org/show_bug.cgi?id=16648
          REGRESSION (r28165): Yuku.com navigation prints "jsRegExpExecute failed with result -2"
          <rdar://problem/5646486> REGRESSION (r28165): Layout test fast/regex/test1 fails intermittently

        Fixes 34 failing test cases in the fast/regex/test1.html test.

        Restored the stack which prevents infinite loops for brackets that match the empty
        string; it had been removed as an optimization.

        Unfortunately, restoring this stack causes the regular expression test in SunSpider
        to be 1.095x as slow and the overall test to be 1.004x as slow. Maybe we can find
        a correct optimization to restore the speed!

        It's possible the original change was on the right track but just off by one.

        * pcre/pcre_exec.cpp: Add back eptrblock, but name it BracketChainNode.
        (MatchStack::pushNewFrame): Add back the logic needed here.
        (startNewGroup): Ditto.
        (match): Ditto.

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

        Reviewed by Geoff.

        - http://bugs.webkit.org/show_bug.cgi?id=16683
          speed up function calls by making ScopeChain::push cheaper

        This gives a 1.019x speedup on SunSpider.

        After doing this, I realized this probably will be obsolete when the optimization
        to avoid creating an activation object is done. When we do that one we should check
        if rolling this out will speed things up, since this does add overhead at the time
        you copy the scope chain.

        * kjs/object.h: Removed the ScopeChain::release function. It was
        marked inline, and called in exactly one place, so moved it there.
        No idea why it was in this header file!

        * kjs/scope_chain.cpp: Removed the overload of the ScopeChain::push
        function that takes another ScopeChain. It was unused. I think we used
        it over in WebCore at one point, but not any more.

        * kjs/scope_chain.h: Changed ScopeChainNode into a struct rather than
        a class, got rid of its constructor so we can have one that's uninitialized,
        and moved the refCount into a derived struct, ScopeChainHeapNode. Made _node
        mutable so it can be changed in the moveToHeap function. Changed the copy
        constructor and assignment operator to call moveToHeap, since the top node
        can't be shared when it's embedded in another ScopeChain object. Updated
        functions as needed to handle the case where the first object isn't on the
        heap or to add casts for cases where it's guaranteed to be. Changed the push
        function to always put the new node into the ScopeChain object; it will get
        put onto the heap when needed later.

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

        Reviewed by Darin Adler.
        
        Fixed slight logic error in reserveCapacity, where we would reallocate
        the storage buffer unnecessarily.

        * wtf/Vector.h:
        (WTF::::reserveCapacity): No need to grow the buffer if newCapacity is
        equal to capacity().

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

        Reviewed by Oliver.

        - http://bugs.webkit.org/show_bug.cgi?id=16684
          eliminate debugger overhead from function body execution

        Speeds SunSpider up 1.003x. That's a small amount, but measurable.

        * JavaScriptCore.exp: Updated.
        * kjs/Parser.h:
        (KJS::Parser::parse): Create the node with a static member function named create() instead
        of using new explicitly.

        * kjs/grammar.y: Changed calls to new FunctionBodyNode to use FunctionBodyNode::create().

        * kjs/nodes.cpp:
        (KJS::ProgramNode::create): Added. Calls new.
        (KJS::EvalNode::create): Ditto.
        (KJS::FunctionBodyNode::create): Ditto, but creates FunctionBodyNodeWithDebuggerHooks
        when a debugger is present.
        (KJS::FunctionBodyNode::execute): Removed debugger hooks.
        (KJS::FunctionBodyNodeWithDebuggerHooks::FunctionBodyNodeWithDebuggerHooks): Added.
        (KJS::FunctionBodyNodeWithDebuggerHooks::execute): Calls the debugger, then the code,
        then the debugger again.

        * kjs/nodes.h: Added create functions, made the constructors private and protected.

2007-12-30  Eric Seidel  <eric@webkit.org>

        Reviewed by Sam.

        More small cleanup to array_object.cpp

        * kjs/array_object.cpp:
        (KJS::ArrayProtoFuncToString::callAsFunction):
        (KJS::ArrayProtoFuncToLocaleString::callAsFunction):
        (KJS::ArrayProtoFuncJoin::callAsFunction):
        (KJS::ArrayProtoFuncConcat::callAsFunction):
        (KJS::ArrayProtoFuncReverse::callAsFunction):
        (KJS::ArrayProtoFuncShift::callAsFunction):
        (KJS::ArrayProtoFuncSlice::callAsFunction):
        (KJS::ArrayProtoFuncSort::callAsFunction):
        (KJS::ArrayProtoFuncSplice::callAsFunction):
        (KJS::ArrayProtoFuncUnShift::callAsFunction):
        (KJS::ArrayProtoFuncFilter::callAsFunction):
        (KJS::ArrayProtoFuncMap::callAsFunction):
        (KJS::ArrayProtoFuncEvery::callAsFunction):

2007-12-30  Eric Seidel  <eric@webkit.org>

        Reviewed by Sam.

        Apply wkstyle to array_object.cpp

        * kjs/array_object.cpp:
        (KJS::ArrayPrototype::ArrayPrototype):
        (KJS::ArrayPrototype::getOwnPropertySlot):
        (KJS::ArrayProtoFuncConcat::callAsFunction):
        (KJS::ArrayProtoFuncPop::callAsFunction):
        (KJS::ArrayProtoFuncReverse::callAsFunction):
        (KJS::ArrayProtoFuncShift::callAsFunction):
        (KJS::ArrayProtoFuncSlice::callAsFunction):
        (KJS::ArrayProtoFuncSort::callAsFunction):
        (KJS::ArrayProtoFuncSplice::callAsFunction):
        (KJS::ArrayProtoFuncUnShift::callAsFunction):
        (KJS::ArrayProtoFuncFilter::callAsFunction):
        (KJS::ArrayProtoFuncMap::callAsFunction):
        (KJS::ArrayProtoFuncEvery::callAsFunction):
        (KJS::ArrayProtoFuncLastIndexOf::callAsFunction):
        (KJS::ArrayObjectImp::ArrayObjectImp):
        (KJS::ArrayObjectImp::implementsConstruct):
        (KJS::ArrayObjectImp::construct):
        (KJS::ArrayObjectImp::callAsFunction):

2007-12-30  Eric Seidel  <eric@webkit.org>

        Reviewed by Sam.

        Remove maxInt/minInt, replacing with std:max/min<int>()

        * kjs/array_object.cpp:
        (KJS::ArrayProtoFuncSplice::callAsFunction):
        * kjs/operations.cpp:
        * kjs/operations.h:

2007-12-30  Eric Seidel  <eric@webkit.org>

        Reviewed by Sam.
        
        Update Number.toString to properly throw exceptions.
        Cleanup code in Number.toString implementation.

        * kjs/number_object.cpp:
        (KJS::numberToString):
        * kjs/object.cpp:
        (KJS::Error::create): Remove bogus debug lines.

2007-12-28  Eric Seidel  <eric@webkit.org>

        Reviewed by Oliver.

        ASSERT when debugging via Drosera due to missed var lookup optimization.
        http://bugs.webkit.org/show_bug.cgi?id=16634
        
        No test case possible.

        * kjs/nodes.cpp:
        (KJS::BreakpointCheckStatement::optimizeVariableAccess):
        * kjs/nodes.h:

2007-12-28  Eric Seidel  <eric@webkit.org>

        Reviewed by Oliver.

        Fix (-0).toFixed() and re-factor a little
        Fix (-0).toExponential() and printing of trailing 0s in toExponential
        Fix toPrecision(nan) handling
        http://bugs.webkit.org/show_bug.cgi?id=16640

        * kjs/number_object.cpp:
        (KJS::numberToFixed):
        (KJS::fractionalPartToString):
        (KJS::numberToExponential):
        (KJS::numberToPrecision):

2007-12-28  Eric Seidel  <eric@webkit.org>

        Reviewed by Sam.

        More changes to make number code readable

        * kjs/number_object.cpp:
        (KJS::integer_part_noexp):
        (KJS::numberToFixed):
        (KJS::numberToExponential):

2007-12-28  Eric Seidel  <eric@webkit.org>

        Reviewed by Sam.

        More small cleanups to toPrecision

        * kjs/number_object.cpp:
        (KJS::numberToPrecision):

2007-12-28  Eric Seidel  <eric@webkit.org>

        Reviewed by Sam.

        More small attempts to make number code readable

        * kjs/number_object.cpp:
        (KJS::exponentialPartToString):
        (KJS::numberToExponential):
        (KJS::numberToPrecision):

2007-12-28  Eric Seidel  <eric@webkit.org>

        Reviewed by Sam.

        Break out callAsFunction implementations into static functions

        * kjs/number_object.cpp:
        (KJS::numberToString):
        (KJS::numberToFixed):
        (KJS::numberToExponential):
        (KJS::numberToPrecision):
        (KJS::NumberProtoFunc::callAsFunction):

2007-12-28  Eric Seidel  <eric@webkit.org>

        Reviewed by Sam.

        Apply wkstyle/astyle and fix placement of *

        * kjs/number_object.cpp:
        (KJS::):
        (KJS::NumberInstance::NumberInstance):
        (KJS::NumberPrototype::NumberPrototype):
        (KJS::NumberProtoFunc::NumberProtoFunc):
        (KJS::integer_part_noexp):
        (KJS::intPow10):
        (KJS::NumberProtoFunc::callAsFunction):
        (KJS::NumberObjectImp::NumberObjectImp):
        (KJS::NumberObjectImp::getOwnPropertySlot):
        (KJS::NumberObjectImp::getValueProperty):
        (KJS::NumberObjectImp::implementsConstruct):
        (KJS::NumberObjectImp::construct):
        (KJS::NumberObjectImp::callAsFunction):
        * kjs/object.cpp:
        (KJS::JSObject::put):

2007-12-27  Eric Seidel  <eric@webkit.org>

        Reviewed by Sam.

        ASSERT in JavaScriptCore while viewing WICD test case
        http://bugs.webkit.org/show_bug.cgi?id=16626
        
        * kjs/nodes.cpp:
        (KJS::ForInNode::execute): move KJS_CHECK_EXCEPTION to proper place

2007-12-26  Jan Michael Alonzo  <jmalonzo@unpluggable.com>

        Reviewed by Alp Toker.

        http://bugs.webkit.org/show_bug.cgi?id=16390
        Use autotools or GNU make as the build system for the GTK port

        * GNUmakefile.am: Added.

2007-12-25  Maciej Stachowiak  <mjs@apple.com>
        
        Reviewed by Oliver.
                
        - Remove unnecessary redundant check from property setting
        http://bugs.webkit.org/show_bug.cgi?id=16602
                
        1.3% speedup on SunSpider.
        
        * kjs/object.cpp:
        (KJS::JSObject::put): Don't do canPut check when not needed; let
        the PropertyMap handle it.        
        (KJS::JSObject::canPut): Don't check the static property
        table. lookupPut does that already.
        
2007-12-24  Alp Toker  <alp@atoker.com>

        Fix builds that don't use AllInOneFile.cpp following breakage
        introduced in r28973.

        * kjs/grammar.y:

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

        Reviewed by Eric.

        - Optimize variable declarations
        http://bugs.webkit.org/show_bug.cgi?id=16585
        
        3.5% speedup on SunSpider.

        var statements now result in either assignments or empty statements.
        
        This allows a couple of optimization opportunities:
        - No need to branch at runtime to check if there is an initializer
        - EmptyStatementNodes can be removed entirely (also done in this patch)
        - Assignment expressions get properly optimized for local variables
        
        This patch also includes some code cleanup:
        - Most of the old VarStatement/VarDecl logic is now only used for const declarations, 
          thus it is renamed appropriately
        - AssignExprNode is gone
        
        * JavaScriptCore.exp:
        * kjs/NodeInfo.h:
        * kjs/grammar.y:
        * kjs/nodes.cpp:
        (KJS::SourceElements::append):
        (KJS::ConstDeclNode::ConstDeclNode):
        (KJS::ConstDeclNode::optimizeVariableAccess):
        (KJS::ConstDeclNode::handleSlowCase):
        (KJS::ConstDeclNode::evaluateSingle):
        (KJS::ConstDeclNode::evaluate):
        (KJS::ConstStatementNode::optimizeVariableAccess):
        (KJS::ConstStatementNode::execute):
        (KJS::VarStatementNode::optimizeVariableAccess):
        (KJS::VarStatementNode::execute):
        (KJS::ForInNode::ForInNode):
        (KJS::ForInNode::optimizeVariableAccess):
        (KJS::ForInNode::execute):
        (KJS::FunctionBodyNode::initializeSymbolTable):
        (KJS::ProgramNode::initializeSymbolTable):
        (KJS::FunctionBodyNode::processDeclarations):
        (KJS::ProgramNode::processDeclarations):
        (KJS::EvalNode::processDeclarations):
        * kjs/nodes.h:
        (KJS::DeclarationStacks::):
        (KJS::StatementNode::):
        (KJS::ConstDeclNode::):
        (KJS::ConstStatementNode::):
        (KJS::EmptyStatementNode::):
        (KJS::VarStatementNode::):
        (KJS::ForNode::):
        * kjs/nodes2string.cpp:
        (KJS::ConstDeclNode::streamTo):
        (KJS::ConstStatementNode::streamTo):
        (KJS::ScopeNode::streamTo):
        (KJS::VarStatementNode::streamTo):
        (KJS::ForNode::streamTo):
        (KJS::ForInNode::streamTo):

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

        Reviewed by Oliver Hunt.

        * JavaScriptCore.exp: Remove unused symbol to prevent a weak external symbol
        being generated in JavaScriptCore.framework.

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

        Requested by Maciej.

        * kjs/nodes.h: Use the new NEVER_INLINE here and eliminate the old
        KJS_NO_INLINE. We don't want to have two, and we figured it was better
        to keep the one that's in WTF.

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

        Reviewed by Eric.

        - http://bugs.webkit.org/show_bug.cgi?id=16561
          remove debugger overhead from non-debugged JavaScript execution

        1.022x as fast on SunSpider.

        * JavaScriptCore.exp: Updated.

        * kjs/NodeInfo.h: Renamed SourceElementsStub to SourceElements,
        since that more accurately describes the role of this object, which
        is a reference-counted wrapper for a Vector.

        * kjs/Parser.cpp:
        (KJS::Parser::didFinishParsing): Changed parameter type to SourceElements,
        and use plain assignment instead of set.
        * kjs/Parser.h: Changed parameter type of didFinishParsing to a
        SourceElements. Also changed m_sourceElements; we now use a RefPtr instead
        of an OwnPtr as well.

        * kjs/grammar.y: Got rid of all the calls to release() on SourceElements.
        That's now handed inside the constructors for various node types, since we now
        use vector swapping instead.

        * kjs/nodes.cpp:
        (KJS::Node::rethrowException): Added NEVER_INLINE, because this was getting inlined
        and we want exception handling out of the normal code flow.
        (KJS::SourceElements::append): Moved here from the header. This now handles
        creating a BreakpointCheckStatement for each statement in the debugger case.
        That way we can get breakpoint handling without having it in every execute function.
        (KJS::BreakpointCheckStatement::BreakpointCheckStatement): Added.
        (KJS::BreakpointCheckStatement::execute): Added. Contains the code that was formerly
        in the StatementNode::hitStatement function and the KJS_BREAKPOINT macro.
        (KJS::BreakpointCheckStatement::streamTo): Added.
        (KJS::ArgumentListNode::evaluateList): Use KJS_CHECKEXCEPTIONVOID since the return
        type is void.
        (KJS::VarStatementNode::execute): Removed KJS_BREAKPOINT.
        (KJS::BlockNode::BlockNode): Changed parameter type to SourceElements.
        Changed code to use release since the class now contains a vector rather than
        a vector point.
        (KJS::BlockNode::optimizeVariableAccess): Updated since member is now a vector
        rather than a vector pointer.
        (KJS::BlockNode::execute): Ditto.
        (KJS::ExprStatementNode::execute): Removed KJS_BREAKPOINT.
        (KJS::IfNode::execute): Ditto.
        (KJS::IfElseNode::execute): Ditto.
        (KJS::DoWhileNode::execute): Ditto.
        (KJS::WhileNode::execute): Ditto.
        (KJS::ContinueNode::execute): Ditto.
        (KJS::BreakNode::execute): Ditto.
        (KJS::ReturnNode::execute): Ditto.
        (KJS::WithNode::execute): Ditto.
        (KJS::CaseClauseNode::optimizeVariableAccess): Updated since member is now a vector
        rather than a vector pointer.
        (KJS::CaseClauseNode::executeStatements): Ditto.
        (KJS::SwitchNode::execute): Removed KJS_BREAKPOINT.
        (KJS::ThrowNode::execute): Ditto.
        (KJS::TryNode::execute): Ditto.
        (KJS::ScopeNode::ScopeNode): Changed parameter type to SourceElements.
        (KJS::ProgramNode::ProgramNode): Ditto.
        (KJS::EvalNode::EvalNode): Ditto.
        (KJS::FunctionBodyNode::FunctionBodyNode): Ditto.
        (KJS::ScopeNode::optimizeVariableAccess): Updated since member is now a vector
        rather than a vector pointer.

        * kjs/nodes.h: Removed hitStatement. Renamed SourceElements to StatementVector.
        Renamed SourceElementsStub to SourceElements and made it derive from
        ParserRefCounted rather than from Node, hold a vector rather than a pointer to
        a vector, and changed the release function to swap with another vector rather
        than the pointer idiom. Updated BlockNode and CaseClauseNode to hold actual
        vectors instead of pointers to vectors. Added BreakpointCheckStatement.

        * kjs/nodes2string.cpp:
        (KJS::statementListStreamTo): Changed to work on a vector instead of a pointer
        to a vector.
        (KJS::BlockNode::streamTo): Ditto.
        (KJS::CaseClauseNode::streamTo):  Ditto.

        * wtf/AlwaysInline.h: Added NEVER_INLINE.
        * wtf/PassRefPtr.h: Tweaked formatting. Added clear() function that matches the
        ones in OwnPtr and auto_ptr.
        * wtf/RefPtr.h: Ditto.

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

        - fix broken regression tests

        The broken tests were fast/js/do-while-expression-value.html and
        fast/js/while-expression-value.html.

        * kjs/nodes.cpp: Check in the correct version of this file. I had accidentally landed
        an old version of my patch for bug 16471.
        (KJS::statementListExecute): The logic here was backwards. Have to set the value
        even for non-normal execution results.

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

        Windows build fix

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Copy npruntime_internal.h
        to WebKitBuild.

2007-12-20  Eric Seidel  <eric@webkit.org>

        Reviewed by mjs.
        
        Split IfNode into IfNode and IfElseNode for speedup.
        http://bugs.webkit.org/show_bug.cgi?id=16470
        
        SunSpider claims this is 1.003x as fast as before.
        (This required running with --runs 15 to get consistent enough results to tell!)

        * kjs/grammar.y:
        * kjs/nodes.cpp:
        (KJS::IfNode::optimizeVariableAccess):
        (KJS::IfNode::execute):
        (KJS::IfNode::getDeclarations):
        (KJS::IfElseNode::optimizeVariableAccess):
        (KJS::IfElseNode::execute):
        (KJS::IfElseNode::getDeclarations):
        * kjs/nodes.h:
        (KJS::IfNode::):
        (KJS::IfElseNode::):
        * kjs/nodes2string.cpp:
        (KJS::IfNode::streamTo):
        (KJS::IfElseNode::streamTo):

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

        Reviewed by Sam.

        * wtf/OwnPtr.h:
        (WTF::operator==): Added.
        (WTF::operator!=): Added.

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

        Reviewed by Oliver Hunt.
        
        AST optimization: Avoid NULL-checking ForNode's child nodes.
        
        0.6% speedup on SunSpider.
        
        This is a proof of concept patch that demonstrates how to optimize
        grammar productions with optional components, like
        
            for (optional; optional; optional) {
                ...
            }
            
        The parser emits NULL for an optional component that is not present.

        Instead of checking for a NULL child at execution time, a node that
        expects an optional component to be present more often than not checks
        for a NULL child at construction time, and substitutes a viable
        alternative node in its place.

        (We'd like the parser to start emitting NULL a lot more once we teach
        it to emit NULL for certain no-op productions like EmptyStatement and
        VariableStatement, so, as a foundation, it's important for nodes with
        NULL optional components to be fast.)

        * kjs/Parser.cpp:
        (KJS::Parser::didFinishParsing): Check for NULL SourceElements. Also,
        moved didFinishParsing into the .cpp file because adding a branch while
        it was in the header file caused a substantial and inexplicable
        performance regression. (Did I mention that GCC is crazy?)

        * kjs/grammar.y:

        * kjs/nodes.cpp:
        (KJS::BlockNode::BlockNode): Check for NULL SourceElements.
        (KJS::ForNode::optimizeVariableAccess): No need to check for NULL here.
        (KJS::ForNode::execute): No need to check for NULL here.
        * kjs/nodes.h:
        (KJS::ForNode::): Check for NULL SourceElements. Substitute a TrueNode
        because it's semantically harmless, and it evaluates to boolean in an
        efficient manner.

2007-12-20  Oliver Hunt  <oliver@apple.com>

        Reviewed by Geoff.

        Slight logic reordering in JSImmediate::from(double)

        This gives a 0.6% improvement in SunSpider.

        * kjs/JSImmediate.h:
        (KJS::JSImmediate::from):

2007-12-20  Eric Seidel  <eric@webkit.org>

        Reviewed by mjs.

        Fix major Array regression introduced by 28899.

        SunSpider claims this is at least 1.37x as fast as pre-regression. :)

        * kjs/array_instance.cpp: make Arrays fast again!

2007-12-20  Eric Seidel  <eric@webkit.org>

        Reviewed by Geoff, then re-rubber-stamped by Geoff after final search/replace and testing.

        Small reworking of Date code for 4% speedup on Date tests (0.2% overall)
        http://bugs.webkit.org/show_bug.cgi?id=16537

        Make msToYear human-readable
        Make msToDayInMonth slightly more readable and avoid recalculating msToYear
        Remove use of isInLeapYear to avoid calling msToYear
        Remove dayInYear call by changing msToDayInMonth to dayInMonthFromDayInYear
        Remove more duplicate calls to dayInYear and getUTCOffset for further speedup

        * kjs/DateMath.cpp:
        (KJS::daysFrom1970ToYear):
        (KJS::msToYear):
        (KJS::monthFromDayInYear):
        (KJS::checkMonth):
        (KJS::dayInMonthFromDayInYear):
        (KJS::dateToDayInYear):
        (KJS::getDSTOffsetSimple):
        (KJS::getDSTOffset):
        (KJS::gregorianDateTimeToMS):
        (KJS::msToGregorianDateTime):

2007-12-20  Rodney Dawes  <dobey@wayofthemonkey.com>

        Reviewed by Darin Adler.

        Proxy includes of npruntime.h or npapi.h through npruntime_internal.h
        Include stdio.h in npapi.h for the use of FILE with XP_UNIX defined
        This is for building with X11, as some type and enum names conflict
        with #define names in X11 headers.
        http://bugs.webkit.org/show_bug.cgi?id=15669

        * JavaScriptCore.xcodeproj/project.pbxproj:
        * bindings/NP_jsobject.h:
        * bindings/npapi.h:
        * bindings/npruntime.cpp:
        * bindings/npruntime_impl.h:
        * bindings/npruntime_priv.h:
        * bindings/npruntime_internal.h:
        * bindings/testbindings.cpp:
        * bindings/c/c_class.h:
        * bindings/c/c_runtime.h:
        * bindings/c/c_utility.h:

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

        - re-fix http://bugs.webkit.org/show_bug.cgi?id=16471
          Completions need to be smaller (or not exist at all)

        Same patch as last time with the test failures problem fixed.

        * kjs/function.cpp:
        (KJS::GlobalFuncImp::callAsFunction): Make sure to check the completion
        type from newExec to see if the execute raised an exception.

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

        - roll out that last change -- it was causing test failures;
          I'll check it back in after fixing them

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

        Reviewed by Eric.

        - http://bugs.webkit.org/show_bug.cgi?id=16471
          Completions need to be smaller (or not exist at all)

        SuSpider shows 2.4% speedup.

        Stop using completions in the execution engine.
        Instead, the completion type and label target are both
        stored in the ExecState.

        * API/JSContextRef.cpp: Removed unneeded include of "completion.h".
        * bindings/runtime_method.cpp: Removed unused execute function.
        * bindings/runtime_method.h: Ditto.

        * kjs/ExecState.h: Added completionType, breakOrContinueTarget,
        setCompletionType, setNormalCompletion, setBreakCompletion,
        setContinueCompletion, setReturnValueCompletion, setThrowCompletion,
        setInterruptedCompletion, m_completionType, and m_breakOrContinueTarget.

        * kjs/completion.h: Removed constructor and getter for target
        for break and continue from Completion. This class is now only
        used for the public API to Interpreter and such.

        * kjs/date_object.h: Removed unused execute function.

        * kjs/function.cpp:
        (KJS::FunctionImp::callAsFunction): Removed some unneeded
        exception processing. Updated to call the new execute function
        and to get the completion type from the ExecState. Merged in
        the execute function, which repeated some of the same logic and
        was called only from here.
        (KJS::GlobalFuncImp::callAsFunction): More of the same for eval.
        * kjs/function.h: Removed execute.

        * kjs/interpreter.cpp:
        (KJS::Interpreter::evaluate): Added code to convert the result of
        execut into a Completion.

        * kjs/nodes.cpp:
        (KJS::Node::setErrorCompletion): Renamed from createErrorCompletion.
        Now sets the completion type in the ExecState.
        (KJS::Node::rethrowException): Now sets the completion type in the
        ExecState.
        (KJS::StatementNode::hitStatement): Now sets the completion type in
        the ExecState.
        (KJS::VarStatementNode::execute): Updated to put completion type in
        the ExecState instead of a Completion object.
        (KJS::statementListExecute): Ditto. Also changed the for loop to use
        indices instead of iterators.
        (KJS::BlockNode::execute): Updated return type.
        (KJS::EmptyStatementNode::execute): Updated to put completion type in
        the ExecState instead of a Completion object.
        (KJS::ExprStatementNode::execute): Ditto.
        (KJS::IfNode::execute): Ditto.
        (KJS::DoWhileNode::execute): Ditto. Also streamlined the logic a little
        to make the normal case a little faster and moved the end outside the
        loop so that "break" can do a break.
        (KJS::WhileNode::execute): Ditto.
        (KJS::ForNode::execute): Ditto.
        (KJS::ForInNode::execute): Ditto.
        (KJS::ContinueNode::execute): Updated to put completion type in
        the ExecState instead of a Completion object.
        (KJS::BreakNode::execute): Ditto.
        (KJS::ReturnNode::execute): Ditto.
        (KJS::WithNode::execute): Ditto.
        (KJS::CaseClauseNode::executeStatements): Ditto. Also renamed to have
        execute in its name to reflect the fact that it's a member of the same
        family of functions.
        (KJS::CaseBlockNode::executeBlock): Ditto.
        (KJS::SwitchNode::execute): Ditto.
        (KJS::LabelNode::execute): Ditto.
        (KJS::ThrowNode::execute): Ditto.
        (KJS::TryNode::execute): Ditto.
        (KJS::ProgramNode::execute): Ditto.
        (KJS::EvalNode::execute): Ditto.
        (KJS::FunctionBodyNode::execute): Ditto.
        (KJS::FuncDeclNode::execute): Ditto.

        * kjs/nodes.h: Renamed setErrorCompletion to createErrorCompletion, made
        hitStatement protected, changed return value of execute to a JSValue,
        renamed evalStatements to executeStatements, and evalBlock to executeBlock.

        * kjs/number_object.h: Removed unused execute function.

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

        Added Radar number.

        * kjs/nodes.cpp:
        (KJS::ProgramNode::processDeclarations):

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

        Linux build fix: config.h has to come first.

        * kjs/error_object.cpp:

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

        Reviewed by Oliver Hunt.
        
        Optimized global access to global variables, using a symbol table.
        
        SunSpider reports a 1.5% overall speedup, a 6.2% speedup on 3d-morph,
        and a whopping 33.1% speedup on bitops-bitwise-and.

        * API/JSCallbackObjectFunctions.h: Replaced calls to JSObject:: with
        calls to Base::, since JSObject is not always our base class. This
        was always a bug, but the bug is even more apparent after some of my
        changes.

        (KJS::::staticFunctionGetter): Replaced use of getDirect with call to
        getOwnPropertySlot. Global declarations are no longer stored in the
        property map, so a call to getDirect is insufficient for finding
        override properties.

        * API/testapi.c: 
        * API/testapi.js: Added test for the getDirect change mentioned above.

        * kjs/ExecState.cpp: 
        * kjs/ExecState.h: Dialed back the optimization to store a direct
        pointer to the localStorage buffer. One ExecState can grow the global
        object's localStorage without another ExecState's knowledge, so
        ExecState can't store a direct pointer to the localStorage buffer
        unless/until we invent a way to update all the relevant ExecStates.

        * kjs/JSGlobalObject.cpp: Inserted the symbol table into get and put
        operations.
        (KJS::JSGlobalObject::reset): Reset the symbol table and local storage,
        too. Also, clear the property map here, removing the need for a
        separate call.

        * kjs/JSVariableObject.cpp:
        * kjs/JSVariableObject.h: Added support for saving localStorage and the
        symbol table to the back/forward cache, and restoring them.

        * kjs/function.cpp:
        (KJS::GlobalFuncImp::callAsFunction): Renamed progNode to evalNode
        because it's an EvalNode, not a ProgramNode.

        * kjs/lookup.h:
        (KJS::cacheGlobalObject): Replaced put with faster putDirect, since
        that's how the rest of lookup.h works. putDirect is safe here because
        cacheGlobalObject is only used for objects whose names are not valid
        identifiers.

        * kjs/nodes.cpp: The good stuff!

        (KJS::EvalNode::processDeclarations): Replaced hasProperty with
        the new hasOwnProperty, which is slightly faster.

        * kjs/object.h: Nixed clearProperties because clear() does this job now.

        * kjs/property_map.cpp:
        * kjs/property_map.h: More back/forward cache support.
        
        * wtf/Vector.h:
        (WTF::::grow): Added fast non-branching grow function. I used it in
        an earlier version of this patch, even though it's not used anymore.

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

        Reviewed by Oliver Hunt.

        Build fix for non-Mac platforms.  Move NodeInfo into its own header so that the YYTYPE
        declaration in grammar.h is able to declare members of that type.

        * kjs/NodeInfo.h: Added.
        (KJS::createNodeInfo):
        (KJS::mergeDeclarationLists):
        (KJS::appendToVarDeclarationList):
        * kjs/grammar.y:
        * kjs/lexer.cpp:

2007-12-19  Oliver Hunt  <oliver@apple.com>

        Make appendToVarDeclarationList static

        RS=Weinig.

        * kjs/grammar.y:

2007-12-18  Oliver Hunt  <oliver@apple.com>

        Remove dead code due to removal of post-parse declaration discovery.

        RS=Geoff.

        Due to the removal of the declaration discovery pass after parsing we
        no longer need any of the logic used for that discovery.

        * kjs/nodes.cpp:
        (KJS::Node::Node):
        (KJS::VarDeclNode::VarDeclNode):
        (KJS::BlockNode::BlockNode):
        (KJS::ForInNode::ForInNode):
        (KJS::CaseBlockNode::CaseBlockNode):
        * kjs/nodes.h:
        (KJS::VarStatementNode::):
        (KJS::IfNode::):
        (KJS::DoWhileNode::):
        (KJS::WhileNode::):
        (KJS::WithNode::):
        (KJS::LabelNode::):
        (KJS::TryNode::):
        (KJS::FuncDeclNode::):
        (KJS::CaseClauseNode::):
        (KJS::ClauseListNode::):
        (KJS::SwitchNode::):

2007-12-18  Oliver Hunt  <oliver@apple.com>

        Replace post-parse pass to find declarations with logic in the parser itself

        Reviewed by Geoff.

        Instead of finding declarations in a pass following the initial parsing of
        a program, we incorporate the logic directly into the parser.  This lays
        the groundwork for further optimisations (such as improving performance in
        declaration expressions -- var x = y; -- to match that of standard assignment)
        in addition to providing a 0.4% performance improvement in SunSpider.

        * JavaScriptCore.exp:
        * kjs/Parser.cpp:
        (KJS::Parser::parse):
        * kjs/Parser.h:
        (KJS::Parser::didFinishParsing):
        (KJS::Parser::parse):
        * kjs/grammar.y:
        * kjs/nodes.cpp:
        (KJS::ParserTracked::ParserTracked):
        (KJS::ParserTracked::~ParserTracked):
        (KJS::ParserTracked::ref):
        (KJS::ParserTracked::deref):
        (KJS::ParserTracked::refcount):
        (KJS::ParserTracked::clearNewTrackedObjects):
        (KJS::Node::Node):
        (KJS::ScopeNode::ScopeNode):
        (KJS::ProgramNode::ProgramNode):
        (KJS::EvalNode::EvalNode):
        (KJS::FunctionBodyNode::FunctionBodyNode):
        (KJS::FunctionBodyNode::initializeSymbolTable):
        (KJS::FunctionBodyNode::processDeclarations):
        * kjs/nodes.h:
        (KJS::ParserTracked::):
        (KJS::Node::):
        (KJS::ScopeNode::):

2007-12-18  Xan Lopez  <xan@gnome.org>

        Reviewed by Geoff.

        Fix http://bugs.webkit.org/show_bug.cgi?id=14521
        Bug 14521: JavaScriptCore fails to build on Linux/PPC gcc 4.1.2
        
        * wtf/TCSpinLock.h:
        (TCMalloc_SpinLock::Unlock):

        Use less strict memory operand constraint on inline asm generation.
        PLATFORM(DARWIN) left unpatched due to Apple's GCC bug.

        Patch by David Kilzer <ddkilzer@webkit.org>

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

        Rubber-stamped by Maciej Stachowiak.

        Remove outdated and non-functioning project files for the Apollo port.

        * JavaScriptCore.apolloproj: Removed.

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

        - fix Windows build

        * pcre/pcre_exec.cpp:
        (jsRegExpExecute): Change back from false/true to 0/1 -- I probably should not have
        deleted MATCH_MATCH and MATCH_NOMATCH, but I'm going to leave them out.

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

        Reviewed by Geoff.

        - fix http://bugs.webkit.org/show_bug.cgi?id=16458
          REGRESSION (r28164): regular expressions can now hang due to lack of a match limit
          <rdar://problem/5636067>

        Test: fast/regex/slow.html

        Slows down SunSpider a bit (about 1.01x); filed a bug to follow up on that:
        http://bugs.webkit.org/show_bug.cgi?id=16503

        * pcre/pcre.h: Changed name of error code to not specifically mention "recursion".
        * pcre/pcre_exec.cpp:
        (match): Replaced the depth limit, MATCH_RECURSION_LIMIT, with a total match looping
        limit, matchLimit. Also eliminated the constants for MATCH_MATCH and MATCH_NOMATCH,
        since they are just true and false (1 and 0).
        (jsRegExpExecute): More of the MATCH_MATCH change.

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

        - speculative build fix for non-gcc platforms

        * pcre/pcre_exec.cpp: (match): Remove unused cases from return switch.

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

        Speculative build fix for non-Mac platforms.

        * pcre/pcre_compile.cpp: Include string.h for memset, memmove, etc.

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

        Reviewed by Maciej.

        - http://bugs.webkit.org/show_bug.cgi?id=16438
        - removed some more unused code
        - changed quite a few more names to WebKit-style
        - moved more things out of pcre_internal.h
        - changed some indentation to WebKit-style
        - improved design of the functions for reading and writing
          2-byte values from the opcode stream (in pcre_internal.h)

        * pcre/dftables.cpp:
        (main): Added the kjs prefix a normal way in lieu of using macros.

        * pcre/pcre_compile.cpp: Moved some definitions here from pcre_internal.h.
        (errorText): Name changes, fewer typedefs.
        (checkEscape): Ditto. Changed uppercase conversion to use toASCIIUpper.
        (isCountedRepeat): Name change.
        (readRepeatCounts): Name change.
        (firstSignificantOpcode): Got rid of the use of OP_lengths, which is
        very lightly used here. Hard-coded the length of OP_BRANUMBER.
        (firstSignificantOpcodeSkippingAssertions): Ditto. Also changed to
        use the advanceToEndOfBracket function.
        (getOthercaseRange): Name changes.
        (encodeUTF8): Ditto.
        (compileBranch): Name changes. Removed unused after_manual_callout and
        the code to handle it. Removed code to handle OP_ONCE since we never
        emit this opcode. Changed to use advanceToEndOfBracket in more places.
        (compileBracket): Name changes.
        (branchIsAnchored): Removed code to handle OP_ONCE since we never emit
        this opcode.
        (bracketIsAnchored): Name changes.
        (branchNeedsLineStart): More fo the same.
        (bracketNeedsLineStart): Ditto.
        (branchFindFirstAssertedCharacter): Removed OP_ONCE code.
        (bracketFindFirstAssertedCharacter): More of the same.
        (calculateCompiledPatternLengthAndFlags): Ditto.
        (returnError): Name changes.
        (jsRegExpCompile): Ditto.

        * pcre/pcre_exec.cpp: Moved some definitions here from pcre_internal.h.
        (matchRef): Updated names.
        Improved macros to use the do { } while(0) idiom so they expand to single
        statements rather than to blocks or multiple statements. And refeactored
        the recursive match macros.
        (MatchStack::pushNewFrame): Name changes.
        (getUTF8CharAndIncrementLength): Name changes.
        (match): Name changes. Removed the ONCE opcode.
        (jsRegExpExecute): Name changes.

        * pcre/pcre_internal.h: Removed quite a few unneeded includes. Rewrote
        quite a few comments. Removed the macros that add kjs prefixes to the
        functions with external linkage; instead renamed the functions. Removed
        the unneeded typedefs pcre_uint16, pcre_uint32, and uschar. Removed the
        dead and not-all-working code for LINK_SIZE values other than 2, although
        we aim to keep the abstraction working. Removed the OP_LENGTHS macro.
        (put2ByteValue): Replaces put2ByteOpcodeValueAtOffset.
        (get2ByteValue): Replaces get2ByteOpcodeValueAtOffset.
        (put2ByteValueAndAdvance): Replaces put2ByteOpcodeValueAtOffsetAndAdvance.
        (putLinkValueAllowZero): Replaces putOpcodeValueAtOffset; doesn't do the
        addition, since a comma is really no better than a plus sign. Added an
        assertion to catch out of range values and changed the parameter type to
        int rather than unsigned.
        (getLinkValueAllowZero): Replaces getOpcodeValueAtOffset.
        (putLinkValue): New function that most former callers of the
        putOpcodeValueAtOffset function can use; asserts the value that is
        being stored is non-zero and then calls putLinkValueAllowZero.
        (getLinkValue): Ditto.
        (putLinkValueAndAdvance): Replaces putOpcodeValueAtOffsetAndAdvance. No
        caller was using an offset, which makes sense given the advancing behavior.
        (putLinkValueAllowZeroAndAdvance): Ditto.
        (isBracketOpcode): Added. For use in an assertion.
        (advanceToEndOfBracket): Renamed from moveOpcodePtrPastAnyAlternateBranches,
        and removed comments about how it's not well designed. This function takes
        a pointer to the beginning of a bracket and advances to the end of the
        bracket.

        * pcre/pcre_tables.cpp: Updated names.
        * pcre/pcre_ucp_searchfuncs.cpp:
        (kjs_pcre_ucp_othercase): Ditto.
        * pcre/pcre_xclass.cpp:
        (getUTF8CharAndAdvancePointer): Ditto.
        (kjs_pcre_xclass): Ditto.
        * pcre/ucpinternal.h: Ditto.

        * wtf/ASCIICType.h:
        (WTF::isASCIIAlpha): Added an int overload, like the one we already have for
        isASCIIDigit.
        (WTF::isASCIIAlphanumeric): Ditto.
        (WTF::isASCIIHexDigit): Ditto.
        (WTF::isASCIILower): Ditto.
        (WTF::isASCIISpace): Ditto.
        (WTF::toASCIILower): Ditto.
        (WTF::toASCIIUpper): Ditto.

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

        Reviewed by Maciej.

        - fix http://bugs.webkit.org/show_bug.cgi?id=16459
          REGRESSION: assertion failure with regexp with \B in a case-ignoring character range
          <rdar://problem/5646361>

        The problem was that \B was not handled properly in character classes.

        Test: fast/js/regexp-overflow.html

        * pcre/pcre_compile.cpp:
        (check_escape): Added handling of ESC_b and ESC_B in character classes here.
        Allows us to get rid of the handling of \b in character classes from all the
        call sites that handle it separately and to handle \B properly as well.
        (compileBranch): Remove the ESC_b handling, since it's not needed any more.
        (calculateCompiledPatternLengthAndFlags): Ditto.

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

        Reviewed by Maciej Stachowiak.

        Fix http://bugs.webkit.org/show_bug.cgi?id=16448
        Bug 16448: [GTK] Celtic Kane JavaScript performance on Array test is slow relative to Mac

        * kjs/array_instance.cpp:
        (KJS::compareByStringPairForQSort):
        (KJS::ArrayInstance::sort): Convert JSValue's to strings once up front and then sort the
        results.  This avoids calling toString twice per comparison, but requires a temporary buffer
        so we only use this approach in cases where the array being sorted is not too large.

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

        Reviewed by Darin Adler and Maciej Stachowiak.
        
        More refactoring to support global variable optimization.
        
        Changed SymbolTable to use RefPtr<UString::Rep> as its key instead of
        UString::Rep*. With globals, the symbol table can outlast the
        declaration node for any given symbol, so the symbol table needs to ref
        its symbol names.
        
        In support, specialized HashMaps with RefPtr keys to allow lookup
        via raw pointer, avoiding refcount churn.
        
        SunSpider reports a .6% speedup (prolly just noise).

        * JavaScriptCore.vcproj/WTF/WTF.vcproj: Added new file: wtf/RefPtrHashMap.h
        * JavaScriptCore.xcodeproj/project.pbxproj: ditto

        * kjs/JSVariableObject.cpp:
        (KJS::JSVariableObject::getPropertyNames): Symbol table keys are RefPtrs now.

        * kjs/SymbolTable.h: Modified key traits to match RefPtr. Added a
        static Rep* for null, which helps compute the deletedValue() trait.

        * wtf/HashMap.h: #include the RefPtr specialization so everyone can use it.

        * wtf/RefPtrHashMap.h: Copied from wtf/HashMap.h. Added overloaded versions
        of find(), contains(), get(), set(), add(), remove(), and take() that take
        raw pointers as keys.

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

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=16162
        Problems with float parsing on Linux (locale-dependent parsing was used).

        * kjs/dtoa.cpp: Removed USE_LOCALE to reduce future confusion.
        * kjs/lexer.cpp: (KJS::Lexer::lex): Parse with kjs_strtod, not the system one.

2007-12-14  Alp Toker  <alp@atoker.com>

        Reviewed by Mark Rowe.

        Enable the AllInOneFile.cpp optimization for the GTK+ port.

        * JavaScriptCore.pri:

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

        Unreviewed.  Remove commented out fprintf's that were for debugging purposes only.

        * wtf/FastMalloc.cpp:
        (WTF::TCMalloc_PageHeap::IncrementalScavenge):

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

        Reviewed by Maciej Stachowiak.

        Don't use the MADV_DONTNEED code path for now as it has no effect on Mac OS X and is
        currently untested on other platforms.

        * wtf/TCSystemAlloc.cpp:
        (TCMalloc_SystemRelease): Return after releasing memory rather than potentially falling
        through into another mechanism if multiple are supported.

2007-12-14  Alp Toker  <alp@atoker.com>

        Build fix for GTK+/Qt and ports that don't use AllInOneFile.cpp.

        Include UnusedParam.h.

        * wtf/TCSystemAlloc.cpp:

2007-12-14  Oliver Hunt  <oliver@apple.com>

        Reviewed by Stephanie.

        Fix build on windows

        * wtf/FastMalloc.cpp:
        (WTF::TCMalloc_PageHeap::IncrementalScavenge):

2007-12-14  Dan Bernstein  <mitz@apple.com>

        - try again to fix the Windows build

        * wtf/TCSystemAlloc.cpp:
        (TCMalloc_SystemRelease):

2007-12-14  Dan Bernstein  <mitz@apple.com>

        - try to fix the Windows build

        * wtf/TCSystemAlloc.cpp:
        (TCMalloc_SystemRelease):

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

        Reviewed by Maciej and Oliver.

        Add final changes to make TCMalloc release memory to the system.
        This results in a 0.4% regression against ToT, but this is offset
        against the gains made by the original TCMalloc r38 merge - in fact
        we retain around 0.3-0.4% progression overall.

        * wtf/FastMalloc.cpp:
        (WTF::InitSizeClasses):
        (WTF::TCMalloc_PageHeap::IncrementalScavenge):
        * wtf/TCSystemAlloc.cpp:
        (TCMalloc_SystemRelease):

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

        Reviewed by Sam.

        - removed unnecessary includes of "Vector.h"

        * wtf/HashMap.h:
        (WTF::copyKeysToVector): Make the type of the vector be a template parameter.
        This allows copying keys into a vector of a base class or one with an inline capacity.
        (WTF::copyValuesToVector): Ditto.
        * wtf/HashSet.h:
        (WTF::copyToVector): Ditto.

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

        Reviewed by Darin and Geoff.

        <rdar://problem/5619295> 
        REGRESSION: 303-304: Embedded YouTube video fails to render- JS errors (16150) (Flash 9)
        
        Get rid of unnecessary and incorrect security checks for plug-ins accessing JavaScript objects. 
        
        The way this used to work was that each NPObject that wrapped a JSObject would have a root object
        corresponding to the frame object (used for managing the lifecycle) and an origin root object (used for
        doing security checks). 
        
        This would prevent a plug-in from accessing a frame's window object if it's security origin was different
        (some parts of the window, such as the location object, can be accessed from frames with different security 
        origins, and those checks are being done in WebCore).
        
        Also, if a plug-in were to access a window object of a frame that later went away, it could lead to that
        Window JSObject being garbage collected and the NPObject pointing to freed memory.
        
        How this works now is that there is no origin root object anymore, and all NPObject wrappers that are created
        for a plug-in will have the root object of the containing frame of that plug-in.
        
        * bindings/NP_jsobject.cpp:
        (jsDeallocate):
        Don't free the origin root object.
        
        (_NPN_CreateScriptObject):
        Remove the origin root object parameter.
        
        (_NPN_InvokeDefault):
        (_NPN_Invoke):
        (_NPN_Evaluate):
        (_NPN_GetProperty):
        (_NPN_SetProperty):
        (_NPN_RemoveProperty):
        (_NPN_HasProperty):
        (_NPN_HasMethod):
        (_NPN_Enumerate):
        Get rid of all security checks.
        
        * bindings/NP_jsobject.h:
        Remove originRootObject from the JavaScriptObject struct.
        
        * bindings/c/c_utility.cpp:
        (KJS::Bindings::convertValueToNPVariant):
        Always use the root object from the ExecState.
        
2007-12-13  Steve Falkenburg  <sfalken@apple.com>

        Move source file generation into its own vcproj to fix build dependencies.

        Reviewed by Adam.

        * JavaScriptCore.vcproj/JavaScriptCore.sln:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGenerated.make: Added.
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGenerated.vcproj: Added.
        * JavaScriptCore.vcproj/JavaScriptCoreSubmit.sln:

2007-12-13  Alp Toker  <alp@atoker.com>

        http://bugs.webkit.org/show_bug.cgi?id=16406
        [Gtk] JavaScriptCore needs -lpthread

        Build fix for Debian and any other platforms that don't implicitly
        link to pthread.

        Link to pthread on non-Windows platforms until this dependency is
        removed from JSC.

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

        Reviewed by Sam Weinig.
        
        Build fix: Note some variables that are used only for ASSERTs.

        * API/testapi.c:
        (Base_finalize):
        (globalObject_initialize):
        (testInitializeFinalize):

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

        Reviewed by Darin Adler.
        
        Fixed: All JS tests crash on Windows.

        NDEBUG wasn't defined when compiling testkjs in release builds, so the
        HashTable definition in HashTable.h included an extra data member.

        The solution was to add NDEBUG to the release testkjs configuration on
        Windows and Mac.
        
        For giggles, I also added other missing #defines to testkjs on Windows.

        * Configurations/Base.xcconfig:
        * Configurations/JavaScriptCore.xcconfig:
        * JavaScriptCore.vcproj/testkjs/testkjs.vcproj:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * kjs/testkjs.cpp:
        (main):

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

        Reviewed by Darin Adler.
        
        Removed bogus ASSERT.
        
        ASSERT should only be used when we know that a code path will not be
        taken. This code path is taken often during the jsFunFuzz test.

        * pcre/pcre_exec.cpp:
        (jsRegExpExecute):

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

        * wtf/unicode/qt4/UnicodeQt4.h: Try to fix Qt build by adding U16_IS_SINGLE.

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

        Reviewed by Sam Weinig.

        - fix http://bugs.webkit.org/show_bug.cgi?id=16379
          REGRESSION(r28525): Failures in http/tests/xmlhttprequest/response-encoding.html and
          fast/dom/xmlhttprequest-html-response-encoding.html
          and <rdar://problem/5640230> REGRESSION (306A4-ToT): Access violation in PCRE function
          find_firstassertedchar

        Test: fast/js/regexp-find-first-asserted.html

        * pcre/pcre_compile.cpp:
        (compileBracket): Take out unnecessary initialization of out parameters.
        (branchFindFirstAssertedCharacter): Added. Broke out the half of the function that handles
        a branch.
        (bracketFindFirstAssertedCharacter): Renamed from find_firstassertedchar. Also removed the
        options parameter -- the caller can handle the options.
        (jsRegExpCompile): Changed call site to call the appropriate bracket or branch version of
        the find_firstassertedchar function. Also put the REQ_IGNORE_CASE code here instead of
        passing in the options.

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

        Reviewed by Sam Weinig.

        Split this:
        
                            FunctionBodyNode
                                    ^
                                    |
                                ProgramNode
            
        into this:
            
                                ScopeNode
                ^                   ^                   ^
                |                   |                   |
        FunctionBodyNode        ProgramNode         EvalNode

        in preparation for specializing each class more while optimizing global
        variable access.
        
        Also removed some cruft from the FunctionBodyNode interface to simplify
        things.
        
        SunSpider says this patch is a .8% speedup, which seems reasonable,
        since it eliminates a few branches and adds KJS_FAST_CALL in a few
        places.
        
        Layout tests and JS tests pass. Also, this baby builds on Windows! (Qt
        mileage may vary...)

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

        RS by Mark Rowe.
        
        Mac build fix: added some exported symbols, now that Parser::parse is
        defined in the header.

        * JavaScriptCore.exp:

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

        Build fix.

        Template methods need to be in the header.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
        * kjs/Parser.cpp:
        * kjs/Parser.h:
        (KJS::Parser::parse):

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

        Reviewed by Sam Weinig.
        
        Merged different implementations of Parser::parse into a single,
        templatized implementation, in preparation for adding yet another
        implementation for "eval" code.
        
        JS and layout tests pass.

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

        Reviewed by Mark Rowe

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

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

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

        Tiger build fix.

        * kjs/grammar.y: Use @1 and @0 in place of @$ where Tiger's bison chokes.

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

        Reviewed by Mark Rowe.

        - fix http://bugs.webkit.org/show_bug.cgi?id=16375
          REGRESSION: Safari crashes on quit

        Probably a debug-only issue.

        * kjs/Parser.cpp:
        (KJS::parser): Create the parser and never destroy it by using a pointer instead
        of a global object.

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

        Reviewed by Sam Weinig.

        - fix http://bugs.webkit.org/show_bug.cgi?id=16369
          REGRESSION (r28525): regular expression tests failing due to bad firstByte optimization

        * pcre/pcre_compile.cpp: Changed some names to use interCaps intead of under_scores.
        (branchIsAnchored): Broke is_anchored into two separate functions; this one works on a
        branch and the other on an anchor. The old function would only work on a bracket.
        Also removed unneeded parameters; the anchored check does not require the bracket
        map or the options any more because we have a reduced set of features.
        (bracketIsAnchored): Ditto.
        (branchNeedsLineStart): Broke canApplyFirstCharOptimization into two functions and gave
        both a better name. This is the function that was returning the wrong value. The failure
        was beacuse the old function would only work on a bracket.
        (bracketNeedsLineStart): Ditto.
        (jsRegExpCompile): Changed to call the appropriate branch or bracket flavor of the
        functions based on whether we compiled an outer bracket. Also removed inaccurate comments
        and unneeded parameters.

        - other small changes

        * pcre/pcre.h: Renumbered error codes, in a logical order. First, normal failure, then
        the recursion limit, then running out of memory, and finally an unexpected internal error.

        * pcre/pcre_exec.cpp: Fixed indentation.
        (jsRegExpExecute): Corrected an inaccurate comment.

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

        Reviewed by Maciej.

        - fix http://bugs.webkit.org/show_bug.cgi?id=16370
          REGRESSION (r28540): source URL and line number no longer set for outer function/programs

        Test: fast/js/exception-linenums-in-html-1.html
        Test: fast/js/exception-linenums-in-html-2.html
        Test: fast/js/exception-linenums.html

        By the time the ProgramNode was constructed, the source URL was empty.

        * kjs/Parser.cpp:
        (KJS::Parser::parseProgram): Added code to set and clear m_sourceURL, which is now
        handled here instead of in the lexer; it needs to still be set when we create the
        program node. Call setLoc to set the first and last line number.
        (KJS::Parser::parseFunctionBody): Ditto, but for the body.
        (KJS::Parser::parse): Removed the sourceURL argument.

        * kjs/Parser.h: Added sourceURL(), m_sourceURL, and m_lastLine. Added a lastLine
        parameter to didFinishParsing, since the bison grammar knows the last line number
        and we otherwise do not know it. Removed the sourceURL parameter from parse, since
        that's now handled at a higher level.

        * kjs/grammar.y: Pass the last line number to didFinishParsing.

        * kjs/lexer.cpp:
        (KJS::Lexer::setCode): Removed the sourceURL argument and the code to set m_sourceURL.
        (KJS::Lexer::clear): Ditto.
        * kjs/lexer.h: More of the same.

        * kjs/nodes.cpp:
        (KJS::FunctionBodyNode::FunctionBodyNode): Get the source URL from the parser rather
        than from the lexer. Removed unneeded call to setLoc, since the line numbers already
        both default to -1.

2007-12-08  Oliver Hunt  <oliver@apple.com>

        Reviewed by Sam W.

        Split the ENABLE_SVG_EXPERIMENTAL_FEATURES flag into separate flags.
        
        Fixes <rdar://problem/5620249> Must disable SVG animation
        <rdar://problem/5612772> Disable SVG filters on Mac to match Windows behavior
        
        Minor config changes.

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

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

        Reviewed by Darin.

        - Rename isSafeScript to allowsAccessFrom.

        * bindings/NP_jsobject.cpp:
        (_isSafeScript):
        * kjs/JSGlobalObject.h:
        (KJS::JSGlobalObject::allowsAccessFrom): Reverse caller/argument of allowsAccessFrom to match
        the new call.

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

        Reviewed by Sam Weinig.
        
        Refactored variable access optimization: Removed the assumption that
        the FunctionBodyNode holds the symbol table.
        
2007-12-07  Geoffrey Garen  <ggaren@apple.com>

        Build fix: added #include.

        * kjs/nodes.cpp:

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

        Build fix: added #include.

        * kjs/interpreter.cpp:

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

        Build fix: added #include.

        * kjs/grammar.y:

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

        Build fix: added #include.

        * kjs/function_object.cpp:

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

        Reviewed by Sam Weinig.
        
        Fixed crash seen running layout tests.
        
        Reverted a change I made earlier today. Added a comment to try to
        discourage myself from making this mistake a third time.

        * kjs/function.cpp:
        (KJS::ActivationImp::mark):
        * kjs/function.h:
        (KJS::ActivationImp::ActivationImpData::ActivationImpData):

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

        Reviewed by Sam Weinig.
        
        Refactored parsing of global code: Removed the assumption that 
        ProgramNode inherits from FunctionBodyNode from the parser.

        * kjs/Parser.cpp:
        (KJS::Parser::parseProgram):
        (KJS::Parser::parseFunctionBody):
        (KJS::Parser::parse):
        * kjs/Parser.h:
        (KJS::Parser::didFinishParsing):
        * kjs/function.cpp:
        * kjs/grammar.y:
        * kjs/nodes.h:

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

        Build fix: added JSVariableObject.cpp to the .pri file.

        * JavaScriptCore.pri:

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

        Build fix: added #include.

        * kjs/function.cpp:

2007-12-07  Steve Falkenburg  <sfalken@apple.com>

        Re-named our B&I flag from BUILDBOT to PRODUCTION.

        Reviewed by Sam Weinig.

        * JavaScriptCore.vcproj/JavaScriptCore.make:
        * JavaScriptCore.vcproj/testkjs/testkjs.vcproj:

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

        Build fix: removed stray name qualification.

        * kjs/function.h:
        (KJS::ActivationImp::ActivationImp):

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

        Build fix: moved functions with qualified names outside of class
        declaration.

        * kjs/JSVariableObject.h:
        (KJS::JSVariableObject::symbolTableGet):
        (KJS::JSVariableObject::symbolTablePut):

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

        Reviewed by Sam Weinig.

        Next step in refactoring JSGlobalObject: Added JSVariableObject class,
        and factored symbol-table-related code into it. (JSGlobalObject doesn't
        use the symbol table code yet, though.)
        
        Layout and JS tests, and testapi, pass. SunSpider reports no regression.

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

        Reviewed by Geoff.

        - fix http://bugs.webkit.org/show_bug.cgi?id=16185
          jsRegExpCompile should not add implicit non-capturing bracket

        While this does not make SunSpider faster, it will make many regular
        expressions a bit faster.

        * pcre/pcre_compile.cpp: Moved CompileData struct in here from the
        header since it's private to this file.
        (compile_branch): Updated for function name change.
        (compile_bracket): Renamed from compile_regex, since, for one thing,
        this does not compile an entire regular expression.
        (calculateCompiledPatternLengthAndFlags): Removed unused item_count
        local variable. Renamed CompileData to cd instead of compile_block
        to be consistent with other functions. Added code to set the
        needOuterBracket flag if there's at least one "|" at the outer level.
        (jsRegExpCompile): Renamed CompileData to cd instead of compile_block
        to be consistent with other functions. Removed unneeded "size" field
        from the compiled regular expression. If no outer bracket is needed,
        then use compile_branch to compile the regular expression.

        * pcre/pcre_internal.h: Removed the CompileData struct, which is now
        private to pcre_compile.cpp. Removed the size member from JSRegExp.

2007-12-06  Kevin Ollivier  <kevino@theolliviers.com>

        MSVC7 build fix due to a compiler bug with placement new and/or
        templates and casting.

        Reviewed by Darin Adler.

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

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

        Reviewed by Eric Seidel.

        - fix http://bugs.webkit.org/show_bug.cgi?id=16321
          new RegExp("[\u0097]{4,6}", "gmy") crashes in DEBUG builds
          <rdar://problem/5632992>

        Test: fast/js/regexp-oveflow.html

        * pcre/pcre_compile.cpp:
        (calculateCompiledPatternLengthAndFlags): In the case where a single character
        character class is optimized to not use a character class at all, the preflight
        code was not setting the lastitemlength variable.

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

        Qt Windows build fix.  Include the time-related headers in the correct place.

        * kjs/JSGlobalObject.cpp:
        * kjs/interpreter.cpp:

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

        Not reviewed; just undoing a previous commit.

        - remove earlier incorrect fix for http://bugs.webkit.org/show_bug.cgi?id=16220
          <rdar://problem/5625221> Crash opening www.news.com (CNet)

        The real bug was the backwards ?: in the compile function, which Geoff just
        fixed. Rolling out the incorrect earlier fix.

        * pcre/pcre_compile.cpp: (calculateCompiledPatternLengthAndFlags): Take out
        the unneeded preflight change. The regression test proves this is still working
        fine, so the bug remains fixed.

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

        Build fix.  Include headers before trying to use the things that they declare.

        * kjs/JSImmediate.cpp:
        * kjs/nodes.cpp:
        * kjs/object.cpp:
        * kjs/object_object.cpp:
        * kjs/regexp_object.cpp:
        * kjs/string_object.cpp:

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

        Build fix: added some #includes.

        * kjs/JSImmediate.cpp:

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

        Build fix: added some #includes.

        * kjs/JSGlobalObject.cpp:
        * kjs/JSImmediate.cpp:

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

        Build fix: Fixed #include spelling.

        * kjs/debugger.cpp:

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

        Build fix: added #include.

        * kjs/debugger.cpp:

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

        Build fix: added a forward declaration.

        * kjs/debugger.h:

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

        Build fix: added an #include.

        * kjs/error_object.cpp:

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

        Build fix: added an #include.

        * kjs/bool_object.cpp:

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

        Reviewed by Darin Adler.

        Third step in refactoring JSGlobalObject: Moved data members and 
        functions accessing data members from Interpreter to JSGlobalObject.
        Changed Interpreter member functions to static functions.
        
        This resolves a bug in global object bootstrapping, where the global
        ExecState could be used when uninitialized.
        
        This is a big change, but it's mostly code motion and renaming.
        
        Layout and JS tests, and testjsglue and testapi, pass. SunSpider reports
        a .7% regression, but Shark sees no difference related to this patch,
        and SunSpider reported a .7% speedup from an earlier step in this 
        refactoring, so I think it's fair to call that a wash.

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

        Reviewed by Darin Adler. (Or vice versa.)
        
        Fixed ASSERT during run-javascriptcore-tests. (Darin just added the
        ASSERT, but the bug wasn't new.)

        * pcre/pcre_compile.cpp:
        (compile_branch): The ?: operator here was backwards, causing us to
        execute the loop too many times, adding stray KET opcodes to the
        compiled regular expression.

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

        Reviewed by Geoff.

        - Wait until local variable data is fully constructed before notifying the debugger of entering
        or leaving a call frame.

        * kjs/function.cpp:
        (KJS::FunctionImp::callAsFunction):
        * kjs/nodes.cpp:
        (KJS::FunctionBodyNode::execute):

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

        Reviewed by Oliver.

        Build fix for GCC 4.2. Cast via a union to avoid strict-aliasing issues.

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

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

        Reviewed by Darin.

        Fix testkjs in 64-bit.

        When built for 64-bit the TCMalloc spin lock uses pthread mutexes rather than a custom spin lock
        implemented in assembly.  If we fail to initialize the pthread mutex, attempts to lock or unlock
        it will fail and trigger a call to abort.

        * wtf/FastMalloc.cpp: Initialize the spin lock so that we can later lock and unlock it.
        * wtf/TCSpinLock.h: Add an Init method to the optimised spin lock.

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

        Reviewed by NOBODY (Build fix).

        Fix gtk build.

        * wtf/TCSystemAlloc.cpp:

2007-12-03  Oliver Hunt  <oliver@apple.com>

        Reviewed by Mark Rowe and Geoff Garen.

        Merge TCMalloc r38

        It also result in a performance progression between 0.5% and 
        0.9% depending on the test, however most if not all of this 
        gain will be consumed by the overhead involved in the later
        change to release memory to the system.

        * JavaScriptCore.vcproj/WTF/WTF.vcproj:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * wtf/FastMalloc.cpp:
        (WTF::KernelSupportsTLS):
        (WTF::CheckIfKernelSupportsTLS):
        (WTF::):
        (WTF::ClassIndex):
        (WTF::SLL_Next):
        (WTF::SLL_SetNext):
        (WTF::SLL_Push):
        (WTF::SLL_Pop):
        (WTF::SLL_PopRange):
        (WTF::SLL_PushRange):
        (WTF::SLL_Size):
        (WTF::SizeClass):
        (WTF::ByteSizeForClass):
        (WTF::NumMoveSize):
        (WTF::InitSizeClasses):
        (WTF::AllocationSize):
        (WTF::TCMalloc_PageHeap::GetSizeClassIfCached):
        (WTF::TCMalloc_PageHeap::CacheSizeClass):
        (WTF::TCMalloc_PageHeap::init):
        (WTF::TCMalloc_PageHeap::New):
        (WTF::TCMalloc_PageHeap::AllocLarge):
        (WTF::TCMalloc_PageHeap::Carve):
        (WTF::TCMalloc_PageHeap::Delete):
        (WTF::TCMalloc_PageHeap::IncrementalScavenge):
        (WTF::PagesToMB):
        (WTF::TCMalloc_PageHeap::Dump):
        (WTF::TCMalloc_PageHeap::GrowHeap):
        (WTF::TCMalloc_PageHeap::Check):
        (WTF::ReleaseFreeList):
        (WTF::TCMalloc_PageHeap::ReleaseFreePages):
        (WTF::TCMalloc_ThreadCache_FreeList::Push):
        (WTF::TCMalloc_ThreadCache_FreeList::PushRange):
        (WTF::TCMalloc_ThreadCache_FreeList::PopRange):
        (WTF::TCMalloc_ThreadCache_FreeList::Pop):
        (WTF::TCMalloc_Central_FreeList::length):
        (WTF::TCMalloc_Central_FreeList::tc_length):
        (WTF::TCMalloc_Central_FreeList::Init):
        (WTF::TCMalloc_Central_FreeList::ReleaseListToSpans):
        (WTF::TCMalloc_Central_FreeList::EvictRandomSizeClass):
        (WTF::TCMalloc_Central_FreeList::MakeCacheSpace):
        (WTF::TCMalloc_Central_FreeList::ShrinkCache):
        (WTF::TCMalloc_Central_FreeList::InsertRange):
        (WTF::TCMalloc_Central_FreeList::RemoveRange):
        (WTF::TCMalloc_Central_FreeList::FetchFromSpansSafe):
        (WTF::TCMalloc_Central_FreeList::Populate):
        (WTF::TCMalloc_ThreadCache::Init):
        (WTF::TCMalloc_ThreadCache::Cleanup):
        (WTF::TCMalloc_ThreadCache::Allocate):
        (WTF::TCMalloc_ThreadCache::Deallocate):
        (WTF::TCMalloc_ThreadCache::FetchFromCentralCache):
        (WTF::TCMalloc_ThreadCache::ReleaseToCentralCache):
        (WTF::TCMalloc_ThreadCache::Scavenge):
        (WTF::TCMalloc_ThreadCache::PickNextSample):
        (WTF::TCMalloc_ThreadCache::NewHeap):
        (WTF::TCMalloc_ThreadCache::GetThreadHeap):
        (WTF::TCMalloc_ThreadCache::GetCache):
        (WTF::TCMalloc_ThreadCache::GetCacheIfPresent):
        (WTF::TCMalloc_ThreadCache::InitTSD):
        (WTF::TCMalloc_ThreadCache::CreateCacheIfNecessary):
        (WTF::TCMallocStats::ExtractStats):
        (WTF::TCMallocStats::DumpStats):
        (WTF::TCMallocStats::DumpStackTraces):
        (WTF::TCMallocStats::TCMallocImplementation::MarkThreadIdle):
        (WTF::TCMallocStats::TCMallocImplementation::ReleaseFreeMemory):
        (WTF::TCMallocStats::TCMallocGuard::TCMallocGuard):
        (WTF::TCMallocStats::TCMallocGuard::~TCMallocGuard):
        (WTF::TCMallocStats::DoSampledAllocation):
        (WTF::TCMallocStats::CheckCachedSizeClass):
        (WTF::TCMallocStats::CheckedMallocResult):
        (WTF::TCMallocStats::SpanToMallocResult):
        (WTF::TCMallocStats::do_malloc):
        (WTF::TCMallocStats::do_free):
        (WTF::TCMallocStats::do_memalign):
        (WTF::TCMallocStats::do_malloc_stats):
        (WTF::TCMallocStats::do_mallopt):
        (WTF::TCMallocStats::do_mallinfo):
        (WTF::TCMallocStats::realloc):
        (WTF::TCMallocStats::cpp_alloc):
        (WTF::TCMallocStats::operator new):
        (WTF::TCMallocStats::):
        (WTF::TCMallocStats::operator new[]):
        (WTF::TCMallocStats::malloc_stats):
        (WTF::TCMallocStats::mallopt):
        (WTF::TCMallocStats::mallinfo):
        * wtf/TCPackedCache.h: Added.
        (PackedCache::PackedCache):
        (PackedCache::Put):
        (PackedCache::Has):
        (PackedCache::GetOrDefault):
        (PackedCache::Clear):
        (PackedCache::EntryToValue):
        (PackedCache::EntryToUpper):
        (PackedCache::KeyToUpper):
        (PackedCache::UpperToPartialKey):
        (PackedCache::Hash):
        (PackedCache::KeyMatch):
        * wtf/TCPageMap.h:
        (TCMalloc_PageMap2::PreallocateMoreMemory):
        * wtf/TCSystemAlloc.cpp:
        (TCMalloc_SystemRelease):
        * wtf/TCSystemAlloc.h:

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

        Reviewed by Sam.

        Make isSafeScript const.
        
        * kjs/JSGlobalObject.h:
        (KJS::JSGlobalObject::isSafeScript):

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

        Reviewed by Geoff.

        - fix first part of http://bugs.webkit.org/show_bug.cgi?id=16220
          <rdar://problem/5625221> Crash opening www.news.com (CNet)

        Test: fast/js/regexp-overflow.html

        * pcre/pcre_compile.cpp:
        (calculateCompiledPatternLengthAndFlags): Add room for the additional BRA/KET that
        was generated in the compile code but not taken into account here.

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

        Reviewed by Geoff.

        - fix http://bugs.webkit.org/show_bug.cgi?id=15618
          <rdar://problem/5619353> REGRESSION: Stack overflow/crash in KJS::equal (15618)

        Test: fast/js/recursion-limit-equal.html

        * kjs/operations.cpp: (KJS::equal): Check the exception from toPrimitive.

2007-12-03  Dan Bernstein  <mitz@apple.com>

        - fix a copy-and-paste-o

        * bindings/npruntime.cpp:
        (_NPN_GetIntIdentifier):

2007-12-03  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        - fix an ASSERT when getIntIdentifier is called with 0 or -1

        * bindings/npruntime.cpp:
        (_NPN_GetIntIdentifier): We cannot use the hashmap for 0 and -1 since
        they are the empty value and the deleted value. Instead, keep the
        identifiers for those two integers in a static array.

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

        Reviewed by Mitz.

        - fix http://bugs.webkit.org/show_bug.cgi?id=15848
          <rdar://problem/5619330> REGRESSION: Assertion failure viewing comments page on digg.com

        Test: fast/js/sparse-array.html

        * kjs/array_instance.cpp:
        (KJS::ArrayInstance::inlineGetOwnPropertySlot): Check sparse array cutoff before looking
        in hash map. Can't avoid the branch because we can't look for 0 in the hash.
        (KJS::ArrayInstance::deleteProperty): Ditto.

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

        Build fix: added an #include.

        * kjs/collector.cpp:

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

        Reviewed by Eric Seidel.

        Second step in refactoring JSGlobalObject: moved virtual functions from
        Interpreter to JSGlobalObject.
        
        Layout and JS tests pass. SunSpider reports a .7% speedup -- don't 
        believe his lies.

2007-12-01  Alp Toker  <alp@atoker.com>

        Reviewed by Adam Roben.

        http://bugs.webkit.org/show_bug.cgi?id=16228
        kJSClassDefinitionEmpty is not exported with JS_EXPORT

        Add JS_EXPORT to kJSClassDefinitionEmpty.

        Make the gcc compiler check take precedence over the WIN32||_WIN32
        check to ensure that symbols are exported on Windows when using gcc.

        Add a TODO referencing the bug about JS_EXPORT in the Win build
        (http://bugs.webkit.org/show_bug.cgi?id=16227)

        Don't define JS_EXPORT as 'extern' when the compiler is unknown since
        it would result in the incorrect expansion:

          extern extern const JSClassDefinition kJSClassDefinitionEmpty;

        (This was something we inherited from CFBase.h that doesn't make sense
        for JSBase.h)

        * API/JSBase.h:
        * API/JSObjectRef.h:

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

        Reviewed by Beth Dakin.
        
        Reversed the ownership relationship between Interpreter and JSGlobalObject.
        Now, the JSGlobalObject owns the Interpreter, and top-level objects
        that need the two to persist just protect the JSGlobalObject from GC.
        
        Global object bootstrapping looks a little odd right now, but it will
        make much more sense soon, after further rounds of refactoring.

        * bindings/runtime_root.h: Made this class inherit from RefCounted,
        to avoid code duplication.

        * kjs/collector.cpp:
        (KJS::Collector::collect): No need to give special GC treatment to 
        Interpreters, since we mark their global objects, which mark them.

        * kjs/interpreter.cpp:
        (KJS::Interpreter::mark): No need to mark our global object, since it
        marks us.
        * kjs/interpreter.h: Don't inherit from RefCounted -- JSGlobalObject 
        owns us directly.

        * kjs/testkjs.cpp: Modified to follow the new rules.
        (createGlobalObject):
        (runWithScripts):

2007-11-30  Brent Fulgham  <bfulgham@gmail.com>

        Reviewed by Eric.

        * ChangeLog:
        * pcre/pcre_compile.cpp:
        (compile_branch):

2007-11-30  Eric Seidel  <eric@webkit.org>

        No review, build fix only.
        
        Fix uninitialized var warnings in release build.

        * JavaScriptCore.xcodeproj/project.pbxproj:
        * pcre/pcre_compile.cpp:
        (compile_regex):

2007-11-30  Darin Adler  <darin@apple.com>

        Reviewed by Adam Roben.

        - fix http://bugs.webkit.org/show_bug.cgi?id=16207
          JavaScript regular expressions should match UTF-16 code units rather than characters

        SunSpider says this is 5.5% faster on the regexp test, 0.4% faste overall.

        Test: fast/js/regexp-non-bmp.html

        Renamed ANY_CHAR to NOT_NEWLINE to more-accurately reflect its meaning.

        * pcre/pcre_compile.cpp:
        (compile_branch): Removed calls to the UTF-16 character accessor functions, replacing
        them with simple pointer dereferences in some cases, and no code at all in others.
        (calculateCompiledPatternLengthAndFlags): Ditto.

        * pcre/pcre_exec.cpp:
        (match): Fixed indentation of some case labels (including all the BEGIN_OPCODE).
        Removed calls to the UTF-16 character accessor functions, replacing them with simple
        pointer dereferences in some cases, and no code at all in others. Also removed some
        explicit UTF-16 support code in a few cases. Removed the unneeded "UTF-8" code path
        in the ANY_CHAR repeat code, and in another case, eliminated the code to check against
        end_subject in because it is already done outside the loop.
        (jsRegExpExecute):

        * pcre/pcre_internal.h: Removed all the UTF-16 helper functions.

2007-11-30  Eric Seidel  <eric@webkit.org>

        Reviewed by darin.
        
        PCRE crashes under GuardMalloc
        http://bugs.webkit.org/show_bug.cgi?id=16127
        check against patternEnd to make sure we don't walk off the end of the string

        * pcre/pcre_compile.cpp:
        (compile_branch):
        (calculateCompiledPatternLengthAndFlags):

2007-11-30  Eric Seidel  <eric@webkit.org>

        Reviewed by Maciej.
        
        Fix layout test regressions caused by r28186
        http://bugs.webkit.org/show_bug.cgi?id=16195
        change first_byte and req_byte back to shorts instead of chars
        (I think PCRE stuffs information in the high bits) 

        * pcre/pcre_internal.h:

2007-11-29  Oliver Hunt  <oliver@apple.com>

        Reviewed by Maciej and Darin.

        Make the JS collector work with multiple threads 

        Under heavy contention it was possible the GC to suspend other
        threads inside the pthread spinlock, which could lead to the GC
        thread blocking on the pthread spinlock itself.

        We now determine and store each thread's stack base when it is
        registered, thus removing the need for any calls to pthread_get_stackaddr_np
        that needed the pthread spinlock.

        * kjs/collector.cpp:
        (KJS::Collector::Thread::Thread):
        (KJS::Collector::registerThread):
        (KJS::Collector::markOtherThreadConservatively):

2007-11-29  Adam Roben  <aroben@apple.com>

        Windows build fix

        Removed some unreachable code (ironically, the code was some
        ASSERT_NOT_REACHED()s).

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

2007-11-29  Eric Seidel  <eric@webkit.org>

        Reviewed by Mark Rowe.
        
        Fix for --guard crash of fast/js/regexp-charclass-crash introduced by r28151.

        * pcre/pcre_compile.cpp:
        (is_anchored):

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

        Gtk build fix.  Rubber-stamped by Eric.

        * pcre/pcre_exec.cpp:
        (match): Add braces around the body of the case statement to prevent
        wanings about jumps across the initialization of a variable.

2007-11-29  Eric Seidel  <eric@webkit.org>

        Reviewed by Mark Rowe.
        
        Attempt to fix non-mac builds after PCRE cleanup.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
        * JavaScriptCoreSources.bkl:
        * pcre/pcre.pri:

2007-11-28  Eric Seidel  <eric@webkit.org>

        Reviewed by Maciej.

        Centralize code for subjectPtr adjustments using inlines, only ever check for a single
        trailing surrogate (as UTF16 only allows one), possibly fix PCRE bugs involving char
        classes and garbled UTF16 strings.

        * pcre/pcre_exec.cpp:
        (match):
        (jsRegExpExecute):
        * pcre/pcre_internal.h:
        (getPreviousChar):
        (movePtrToPreviousChar):
        (movePtrToNextChar):
        (movePtrToStartOfCurrentChar):

2007-11-28  Eric Seidel  <eric@webkit.org>

        Reviewed by Maciej.

        change getChar* functions to return result and push 'c' into local scopes for clarity

        * pcre/pcre_compile.cpp:
        (compile_branch):
        (calculateCompiledPatternLengthAndFlags):
        * pcre/pcre_exec.cpp:
        (match):
        * pcre/pcre_internal.h:
        (getChar):
        (getCharAndAdvance):
        (getCharAndLength):
        (getCharAndAdvanceIfSurrogate):

2007-11-28  Eric Seidel  <eric@webkit.org>

        Reviewed by Sam.

        Comment cleanup

        * pcre/pcre_exec.cpp:
        (match):

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

        Reviewed by Sam.

        Further cleanups to calculateCompiledPatternLengthAndFlags

        * pcre/pcre_compile.cpp:
        (calculateCompiledPatternLengthAndFlags):
        * pcre/pcre_internal.h:

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

        Reviewed by Sam.

        Give consistent naming to the RegExp options/compile flags

        * pcre/pcre_compile.cpp:
        (compile_branch):
        (is_anchored):
        (find_firstassertedchar):
        (printCompiledRegExp):
        (jsRegExpCompile):
        * pcre/pcre_exec.cpp:
        (jsRegExpExecute):
        * pcre/pcre_internal.h:

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

        Reviewed by Sam.

        Pull first_byte and req_byte optimizations out into separate static funtions, SunSpider reported this as a win.

        * pcre/pcre_exec.cpp:
        (tryFirstByteOptimization):
        (tryRequiredByteOptimization):
        (jsRegExpExecute):
        * pcre/pcre_internal.h:

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

        Reviewed by Maciej.

        give PCRE_MULTILINE a better name: OptionMatchAcrossMultipleLines

        * pcre/pcre_compile.cpp:
        (compile_branch):
        (is_anchored):
        (printCompiledRegExp):
        (jsRegExpCompile):
        * pcre/pcre_exec.cpp:
        (jsRegExpExecute):
        * pcre/pcre_internal.h:

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

        Reviewed by Oliver.

        Deprecate jsRegExpExecute's offset-vector fallback code

        * pcre/pcre_exec.cpp:
        (jsRegExpExecute):

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

        Reviewed by Maciej.

        Make cur_is_word and prev_is_word locals, and change OP_ANY to OP_ANY_CHAR for clarity

        * pcre/pcre_compile.cpp:
        (find_fixedlength):
        (compile_branch):
        (canApplyFirstCharOptimization):
        * pcre/pcre_exec.cpp:
        (match):
        * pcre/pcre_internal.h:

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

        Reviewed by Mitz & Maciej.

        Change _NC operators to use _IGNORING_CASE for clarity

        * pcre/pcre_compile.cpp:
        (find_fixedlength):
        (compile_branch):
        (find_firstassertedchar):
        * pcre/pcre_exec.cpp:
        (match):
        * pcre/pcre_internal.h:

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

        Reviewed by Mitz.

        Remove branch from return

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

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

        Reviewed by Maciej.

        Add repeatInformationFromInstructionOffset inline

        * pcre/pcre_exec.cpp:
        (repeatInformationFromInstructionOffset):
        (match):

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

        Reviewed by Maciej.

        Remove no longer used error code JSRegExpErrorMatchLimit

        * kjs/regexp.cpp:
        (KJS::RegExp::match):
        * pcre/pcre.h:
        * pcre/pcre_internal.h:

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

        Reviewed by Sam.

        Make i locally scoped for better code clarity

        * pcre/pcre_exec.cpp:
        (match):

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

        Reviewed by Maciej.

        Give subjectPtr and instructionPtr sane names, reduce size of MatchFrame for a 0.2% speedup.

        * pcre/pcre_compile.cpp:
        (compile_branch):
        (calculateCompiledPatternLengthAndFlags):
        * pcre/pcre_exec.cpp:
        (match_ref):
        (MatchStack::pushNewFrame):
        (getUTF8CharAndIncrementLength):
        (match):
        * pcre/pcre_internal.h:
        (getChar):
        (getCharAndAdvance):
        (getCharAndLength):
        (getCharAndAdvanceIfSurrogate):
        * pcre/pcre_xclass.cpp:
        (getUTF8CharAndAdvancePointer):

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

        Reviewed by Sam.

        Small speedup (0.7%) by simplifying canUseStackBufferForNextFrame() check

        * pcre/pcre_exec.cpp:
        (MatchStack::MatchStack):
        (MatchStack::popCurrentFrame):

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

        Reviewed by Sam.

        Lower MATCH_LIMIT_RECURSION to more sane levels to prevent hangs on run-javascriptcore-tests

        * pcre/pcre_internal.h:

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

        Reviewed by Maciej.

        Remove match_is_group variable for another 5% speedup

        * pcre/pcre_compile.cpp:
        * pcre/pcre_exec.cpp:
        (startNewGroup):
        (match):

2007-11-28  Eric Seidel  <eric@webkit.org>

        Reviewed by Sam.

        Abstract frame variables into locals and args

        * pcre/pcre_compile.cpp:
        (compile_branch):
        * pcre/pcre_exec.cpp:
        (match):
        * pcre/pcre_internal.h:

2007-11-28  Eric Seidel  <eric@webkit.org>

        Reviewed by Sam.

        Section off MatchData arguments into args struct

        * pcre/pcre_exec.cpp:
        (MatchStack::pushNewFrame):
        (match):

2007-11-24  Eric Seidel  <eric@webkit.org>

        Reviewed by Sam.

        Remove redundant eptrblock struct

        * pcre/pcre_exec.cpp:
        (MatchStack::pushNewFrame):
        (match):

2007-11-24  Eric Seidel  <eric@webkit.org>

        Reviewed by Maciej.

        Remove redundant match_call_count and move recursion check out of super-hot code path
        SunSpider says this is at least an 8% speedup for regexp.

        * pcre/pcre_exec.cpp:
        (MatchStack::MatchStack):
        (MatchStack::pushNewFrame):
        (MatchStack::popCurrentFrame):
        (MatchStack::popAllFrames):
        (match):
        (jsRegExpExecute):
        * pcre/pcre_internal.h:

2007-11-24  Eric Seidel  <eric@webkit.org>

        Reviewed by Sam.

        Get rid of GETCHAR* macros, replacing them with better named inlines

        * pcre/pcre_compile.cpp:
        (compile_branch):
        (calculateCompiledPatternLengthAndFlags):
        * pcre/pcre_exec.cpp:
        (match):
        * pcre/pcre_internal.h:
        (getCharAndAdvance):
        (getCharAndLength):
        (getCharAndAdvanceIfSurrogate):

2007-11-24  Eric Seidel  <eric@webkit.org>

        Reviewed by Sam.

        Further cleanup GET/PUT inlines

        * pcre/pcre_internal.h:
        (putOpcodeValueAtOffset):
        (getOpcodeValueAtOffset):
        (putOpcodeValueAtOffsetAndAdvance):
        (put2ByteOpcodeValueAtOffset):
        (get2ByteOpcodeValueAtOffset):
        (put2ByteOpcodeValueAtOffsetAndAdvance):

2007-11-24  Eric Seidel  <eric@webkit.org>

        Reviewed by Sam.

        Give GET, PUT better names, and add (poor) moveOpcodePtrPastAnyAlternateBranches

        * pcre/pcre_compile.cpp:
        (firstSignificantOpCodeSkippingAssertions):
        (find_fixedlength):
        (complete_callout):
        (compile_branch):
        (compile_regex):
        (is_anchored):
        (canApplyFirstCharOptimization):
        (find_firstassertedchar):
        * pcre/pcre_exec.cpp:
        (match):
        * pcre/pcre_internal.h:
        (putOpcodeValueAtOffset):
        (getOpcodeValueAtOffset):
        (putOpcodeValueAtOffsetAndAdvance):
        (put2ByteOpcodeValueAtOffset):
        (get2ByteOpcodeValueAtOffset):
        (moveOpcodePtrPastAnyAlternateBranches):
        * pcre/pcre_ucp_searchfuncs.cpp:
        (_pcre_ucp_othercase):

2007-11-24  Eric Seidel  <eric@webkit.org>

        Reviewed by Sam.

        Add inlines for toLowerCase, isWordChar, isSpaceChar for further regexp speedup

        * pcre/pcre_compile.cpp:
        (compile_branch):
        (jsRegExpCompile):
        * pcre/pcre_exec.cpp:
        (match):
        (jsRegExpExecute):
        * pcre/pcre_internal.h:
        (toLowerCase):
        (flipCase):
        (classBitmapForChar):
        (charTypeForChar):
        (isWordChar):
        (isSpaceChar):
        (CompileData::CompileData):
        * pcre/pcre_xclass.cpp:
        (_pcre_xclass):

2007-11-24  Eric Seidel  <eric@webkit.org>

        Reviewed by Sam.

        cleanup _pcre_ucp_othercase

        * pcre/pcre_ucp_searchfuncs.cpp:
        (_pcre_ucp_othercase):

2007-11-24  Eric Seidel  <eric@webkit.org>

        Reviewed by Maciej.

        Use better variable names for case ignoring options

        * pcre/pcre_compile.cpp:
        (compile_branch):
        (find_firstassertedchar):
        (printCompiledRegExp):
        (jsRegExpCompile):
        * pcre/pcre_exec.cpp:
        (match_ref):
        (match):
        (jsRegExpExecute):
        * pcre/pcre_internal.h:

2007-11-24  Eric Seidel  <eric@webkit.org>

        Reviewed by Sam.

        split first_significant_code into two simpler functions

        * pcre/pcre_compile.cpp:
        (firstSignificantOpCode):
        (firstSignificantOpCodeSkippingAssertions):
        (is_anchored):
        (canApplyFirstCharOptimization):
        (find_firstassertedchar):

2007-11-24  Eric Seidel  <eric@webkit.org>

        Reviewed by Sam.

        clean up is_counted_repeat

        * pcre/pcre_compile.cpp:
        (is_counted_repeat):

2007-11-24  Eric Seidel  <eric@webkit.org>

        Reviewed by Sam.

        clean up check_escape

        * pcre/pcre_compile.cpp:
        (check_escape):

2007-11-24  Eric Seidel  <eric@webkit.org>

        Reviewed by Sam.

        Reformat find_fixedlength

        * pcre/pcre_compile.cpp:
        (find_fixedlength):

2007-11-24  Eric Seidel  <eric@webkit.org>

        Reviewed by Sam.

        reformat is_anchored

        * pcre/pcre_compile.cpp:
        (is_anchored):

2007-11-24  Eric Seidel  <eric@webkit.org>

        Reviewed by Maciej.

        Remove unused function could_be_empty_branch

        * pcre/pcre_compile.cpp:
        (first_significant_code):
        (find_fixedlength):
        (compile_branch):
        (canApplyFirstCharOptimization):

2007-11-24  Eric Seidel  <eric@webkit.org>

        Reviewed by Sam.

        Pass around MatchData objects by reference

        * pcre/pcre_exec.cpp:
        (pchars):
        (match_ref):
        (match):
        (jsRegExpExecute):

2007-11-24  Eric Seidel  <eric@webkit.org>

        Reviewed by Sam.

        give PCRE_STARTLINE a better name and rename match_data to MatchData

        * pcre/pcre_compile.cpp:
        (compile_branch):
        (canApplyFirstCharOptimization):
        (find_firstassertedchar):
        (printCompiledRegExp):
        (jsRegExpCompile):
        * pcre/pcre_exec.cpp:
        (pchars):
        (jsRegExpExecute):
        * pcre/pcre_internal.h:

2007-11-24  Eric Seidel  <eric@webkit.org>

        Reviewed by Sam.

        Clean up find_firstassertedchar

        * pcre/pcre_compile.cpp:
        (get_othercase_range):
        (find_firstassertedchar):
        (calculateCompiledPatternLengthAndFlags):

2007-11-24  Eric Seidel  <eric@webkit.org>

        Reviewed by Tim Hatcher.

        Pass around CompileData& instead of CompileData*

        * pcre/pcre_compile.cpp:
        (compile_branch):
        (jsRegExpCompile):

2007-11-24  Eric Seidel  <eric@webkit.org>

        Reviewed by Sam.

        Clean up compile_branch, move _pcre_ord2utf8, and rename CompileData

        * JavaScriptCore.xcodeproj/project.pbxproj:
        * pcre/pcre_compile.cpp:
        (_pcre_ord2utf8):
        (calculateCompiledPatternLengthAndFlags):
        (jsRegExpCompile):
        * pcre/pcre_internal.h:
        * pcre/pcre_ord2utf8.cpp: Removed.

2007-11-24  Eric Seidel  <eric@webkit.org>

        Reviewed by Sam.

        removing more macros

        * pcre/pcre_compile.cpp:
        (could_be_empty_branch):
        (compile_branch):
        (calculateCompiledPatternLengthAndFlags):
        * pcre/pcre_exec.cpp:
        (match):
        (jsRegExpExecute):
        * pcre/pcre_internal.h:
        * pcre/pcre_xclass.cpp:

2007-11-24  Eric Seidel  <eric@webkit.org>

        Reviewed by Maciej.

        clean up formating in compile_branch

        * pcre/pcre_compile.cpp:
        (compile_branch):

2007-11-24  Eric Seidel  <eric@webkit.org>

        Reviewed by Sam.

        Fix spacing for read_repeat_counts

        * pcre/pcre_compile.cpp:
        (read_repeat_counts):

2007-11-24  Eric Seidel  <eric@webkit.org>

        Reviewed by Sam.

        Get rid of PCRE custom char types

        * pcre/pcre_compile.cpp:
        (check_escape):
        (complete_callout):
        (compile_branch):
        (compile_regex):
        (calculateCompiledPatternLengthAndFlags):
        (jsRegExpCompile):
        * pcre/pcre_exec.cpp:
        (match_ref):
        (match):
        (jsRegExpExecute):
        * pcre/pcre_internal.h:

2007-11-24  Eric Seidel  <eric@webkit.org>

        Reviewed by Sam.

        reformat get_othercase_range

        * pcre/pcre_compile.cpp:
        (get_othercase_range):

2007-11-24  Eric Seidel  <eric@webkit.org>

        Reviewed by Maciej.

        Remove register keyword and more cleanup

        * pcre/pcre_compile.cpp:
        (find_fixedlength):
        (compile_branch):
        (is_anchored):
        (is_startline):
        (find_firstassertedchar):
        (calculateCompiledPatternLengthAndFlags):
        (jsRegExpCompile):
        * pcre/pcre_exec.cpp:
        (MatchStack::canUseStackBufferForNextFrame):
        (MatchStack::allocateNextFrame):
        (MatchStack::pushNewFrame):
        (MatchStack::frameIsStackAllocated):
        (MatchStack::popCurrentFrame):
        (MatchStack::unrollAnyHeapAllocatedFrames):
        (getUTF8CharAndIncrementLength):
        (match):
        (jsRegExpExecute):
        * pcre/pcre_internal.h:
        (PUT2INC):
        (isLeadingSurrogate):
        (isTrailingSurrogate):
        (decodeSurrogatePair):
        (getChar):
        * pcre/pcre_ord2utf8.cpp:
        (_pcre_ord2utf8):
        * pcre/pcre_xclass.cpp:
        (getUTF8CharAndAdvancePointer):
        (_pcre_xclass):

2007-11-24  Eric Seidel  <eric@webkit.org>

        Reviewed by Maciej.

        Clean up jsRegExpExecute

        * pcre/pcre_compile.cpp:
        (returnError):
        (jsRegExpCompile):
        * pcre/pcre_exec.cpp:
        (jsRegExpExecute):
        * pcre/pcre_internal.h:

2007-11-29  Oliver Hunt  <oliver@apple.com>

        Reviewed by Geoff.

        Merging updated system alloc and spinlock code from r38 of TCMalloc.

        This is needed as a precursor to the merge of TCMalloc proper.

        * wtf/FastMalloc.cpp:
        (WTF::TCMalloc_PageHeap::GrowHeap):
        * wtf/TCSpinLock.h:
        (TCMalloc_SpinLock::TCMalloc_SpinLock):
        (TCMalloc_SpinLock::):
        (TCMalloc_SpinLock::Lock):
        (TCMalloc_SpinLock::Unlock):
        (TCMalloc_SpinLock::IsHeld):
        * wtf/TCSystemAlloc.cpp:
        (TrySbrk):
        (TryMmap):
        (TryVirtualAlloc):
        (TryDevMem):
        (TCMalloc_SystemAlloc):
        * wtf/TCSystemAlloc.h:

2007-11-28  Brady Eidson <beidson@apple.com>

        Reviewed by Geoff

        Add copyKeysToVector utility, mirroring copyValuesToVector
        Also change the copyValuesToVector implementation to be a little more attractive

        * wtf/HashMap.h:
        (WTF::copyKeysToVector):
        (WTF::copyValuesToVector):

2007-11-27  Alp Toker  <alp@atoker.com>

        Reviewed by Mark Rowe.

        Add a list of public JavaScriptCore headers for installation.

        This follows the convention used for the Qt and GTK+ header lists.

        * headers.pri: Added.

2007-11-27  Alp Toker  <alp@atoker.com>

        Prospective MSVC build fix.

        Roll back dllexport/dllimport support for now.

        * API/JSBase.h:

2007-11-27  Alp Toker  <alp@atoker.com>

        Reviewed by Maciej.

        http://bugs.webkit.org/show_bug.cgi?id=15569
        [gtk] GTK JavaScriptCore needs to export symbols for JSC API and WTF

        Introduce JS_EXPORT to mark symbols to be exported as public API.

        Export all public symbols in the JavaScriptCore C API.

        This matches conventions for exporting symbols set by the CF and CG
        frameworks.

        * API/JSBase.h:
        * API/JSContextRef.h:
        * API/JSObjectRef.h:
        * API/JSStringRef.h:
        * API/JSStringRefBSTR.h:
        * API/JSStringRefCF.h:
        * API/JSValueRef.h:

2007-11-27  Anders Carlsson  <andersca@apple.com>

        Reviewed by Adam.

        Make PropertyNameArray and ScopeChain COMEnumVariant friendly.
        
        * kjs/PropertyNameArray.cpp:
        (KJS::PropertyNameArray::swap):
        Implement PropertyNameArray::swap.
        
        * kjs/PropertyNameArray.h:
        Add ValueType typedef. Replace PropertyNameArrayIterator with 
        PropertyNameArray::const_iterator.
        
        * kjs/nodes.cpp:
        (KJS::ForInNode::execute):
        * kjs/scope_chain.cpp:
        (KJS::ScopeChain::print):
        Update for changes to PropertyNameArray.
        
        * kjs/scope_chain.h:
        Add const_iterator and ValueType typedef.
        
2007-11-27  Anders Carlsson  <andersca@apple.com>

        Reviewed by Darin.

        Add a ValueType typedef.
        
        * wtf/Vector.h:

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

        Reviewed by Mitz.

        - fix http://bugs.webkit.org/show_bug.cgi?id=16096
          REGRESSION (r26653-r26699): Plaxo.com addressbook does not load in webkit nightlies

        Test: fast/js/regexp-overflow.html

        * pcre/pcre_compile.cpp: (calculateCompiledPatternLengthAndFlags):
        Removed a stray "ptr++" that I added by accident when merging the
        changes between PCRE 6.4 and 6.5. 

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

        Reviewed by Kevin McCullough.
        
        Fixed <rdar://problem/5597937> REGRESSION (r27126): Drosera does not 
        show variables (can't enumerate ActivationImp properties)
        
        Implemented a custom ActivationImp::getPropertyNames, since 
        ActivationImp now uses a custom property storage mechanism for local
        variables.

        * kjs/function.cpp:
        (KJS::ActivationImp::getPropertyNames):
        * kjs/function.h:

2007-11-26  Alp Toker  <alp@atoker.com>

        GTK+/Qt/Wx build fix for breakage introduced in r28039.

        * ForwardingHeaders/JavaScriptCore/JSRetainPtr.h: Added.

2007-11-24  Laszlo Gombos  <laszlo.gombos@gmail.com>

        Reviewed by Maciej Stachowiak.

        Fix minor compiler warning (GCC 4.1.3)

        * pcre/pcre_internal.h:
        * pcre/pcre_ucp_searchfuncs.cpp:
        (_pcre_ucp_othercase):

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

        Reviewed by Dan Bernstein.

        Fix http://bugs.webkit.org/show_bug.cgi?id=16129
        Bug 16129: REGRESSION (r27761-r27811): malloc error while visiting http://mysit.es (crashes release build)

        * pcre/pcre_compile.cpp: Change errorcode to be passed by reference so that any error code is propagated
        to our caller like they expect.

2007-11-23  Kevin Ollivier  <kevino@theolliviers.com>

        MSVC7 build fix. (rand_s doesn't exist there)

        Reviewed by Adam Roben.

        * kjs/config.h:
        * wtf/MathExtras.h:

2007-11-23  Kevin Ollivier  <kevino@theolliviers.com>

        wx build fix. Move WX_PYTHON logic into project build settings,
        add WebKitLibraries dirs on Win, and explicitly include JSCore 
        headers in testkjs rather than getting them from a template.
        (Include dir order of JSCore/WTF and ICU headers is important due  
        to wtf/unicode/utf8.h.)

        * jscore.bkl:

2007-11-23  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by George Staikos <staikos@kde.org>.

        Fix make (dist)clean on Windows.
        
        OBJECTS_DIR_WTR does not exist anymore, use GENERATED_SOURCES_DIR.
        

        * JavaScriptCore.pri:
        * pcre/pcre.pri:

2007-11-22  Simon Hausmann  <hausmann@kde.org>

        Reviewed by George.

        Make the directory of where to put the generated sources configurable through the GENERATED_SOURCE_DIR variable

        * JavaScriptCore.pri:
        * pcre/pcre.pri:

2007-11-22  Simon Hausmann  <hausmann@kde.org>

        Reviewed by George.

        Centralize the setup for all the extra compilers in a addExtraCompiler function.
        
        This allows adding a "generated_files" target that builds all generated files using "make generated_files".
        For the build inside Qt we do not generate actual rules for the extra compilers but instead
        do the variable substitution of compiler.output manually and add the generated sources to SOURCES.

        * JavaScriptCore.pri:
        * pcre/pcre.pri:

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

        Reviewed by Tim Hatcher.

        <rdar://problem/5602936> Need to resolve new GCC 4.2 warnings

        Fix all warnings emitted by GCC 4.2 when building JavaScriptCore.  This allows builds with
        -Werror to succeed.  At present they will crash when executed due to code that is not safe
        under strict aliasing (<rdar://problem/5536806>).

        * Configurations/Base.xcconfig: Remove the -Wno-long-double flag.
        * kjs/date_object.cpp:
        (KJS::formatTime): Test whether the stack-allocated string is empty rather than at a non-null address.
        * kjs/dtoa.cpp:
        (Bigint::): Tweak formatting to silence warnings.
        * pcre/pcre_exec.cpp:
        (match): Tweak formatting to silence warnings
        * wtf/Assertions.cpp: Add printf format attribute to functions that warrant it.
        * wtf/Assertions.h: Ditto.

2007-11-19  Kevin Ollivier  <kevino@theolliviers.com>

        wx port build fix (wx headers include ctype functions).

        * kjs/config.h:

2007-11-19  Kevin Ollivier  <kevino@theolliviers.com>

        Remove outdated and unused Windows port files.

        Reviewed by Adam Roben.

        * Makefile.vc: Removed.
        * README-Win32.txt: Removed.

2007-11-18  Eric Seidel  <eric@webkit.org>

        Reviewed by Oliver.

        * tests/mozilla/jsDriver.pl: exit non-0 when user aborts test run

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

        Reviewed by Darin Adler.

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

        Split Interpreter's initialization into two distinct steps:  the creation of the global prototypes
        and constructors, and storing them on the global object.  This allows JSClassRef's passed to
        JSGlobalContextCreate to be instantiated with the correct prototype.

        * API/JSCallbackObject.cpp: Assert at compile-time that the custom global object will fit in a collector cell.
        * API/JSCallbackObject.h:
        * API/JSCallbackObjectFunctions.h:
        (KJS::::JSCallbackObject):
        (KJS::::init):
        * API/JSContextRef.cpp:
        (JSGlobalContextCreate): Construct and set the interpreter's global object separately.  When globalObjectClass
        is passed we need to set the interpreter's global object before doing the JSCallbackObject's initialization to
        prevent any JSObjectInitializeCallback's being invoked before a global object is set.
        * API/testapi.c:
        (globalObject_initialize): Test the object passed in is correct and that it has the expected global properties.
        (globalObject_get):
        (globalObject_set):
        (main):
        * API/testapi.js: Test that any static properties exposed by the global object's custom class are found.
        * JavaScriptCore.exp:
        * bindings/testbindings.cpp:
        (main): Update for changes in Interpreter method signatures.
        * bindings/testbindings.mm:
        (main): Ditto.
        * kjs/ExecState.cpp:
        (KJS::ExecState::ExecState):
        (KJS::ExecState::mark):
        (KJS::ExecState::setGlobalObject):
        * kjs/ExecState.h: Rename scope to m_scopeChain.
        * kjs/interpreter.cpp:
        (KJS::Interpreter::Interpreter):
        (KJS::Interpreter::init):
        (KJS::Interpreter::globalObject):
        (KJS::Interpreter::setGlobalObject):
        (KJS::Interpreter::resetGlobalObjectProperties):
        (KJS::Interpreter::createObjectsForGlobalObjectProperties):
        (KJS::Interpreter::setGlobalObjectProperties): Switch to using putDirect to ensure that the global object's put method
        cannot interfere with setting of the global properties.  This prevents a user-written JSClassRef from attempting to
        call back into JavaScript from the initialization of the global object's members.
        * kjs/interpreter.h:
        * kjs/testkjs.cpp:
        (setupInterpreter): Update for changes in Interpreter method signatures.

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

        Reviewed by Sam Weinig.

        Prevent testapi from reporting false leaks.  Clear out local variables pointing at
        JSObjectRefs to allow their values to be collected.

        * API/testapi.c:
        (main):

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

        Reviewed by Sam Weinig.

        Prevent testapi from crashing if testapi.js can not be found by nil-checking the result of createStringWithContentsOfFile.

        * API/testapi.c:
        (main):

2007-11-17  Alp Toker  <alp@atoker.com>

        Reviewed by Eric.

        http://bugs.webkit.org/show_bug.cgi?id=16032
        JS minidom is not portable

        Use a plain UTF-8 string instead of a CFString.

        Print to stdout, not stderr like CFShow() would have done, since that
        behaviour seems unintentional.

        * API/minidom.c:
        (main):

2007-11-17  Steve Falkenburg  <sfalken@apple.com>

        Windows build fix.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:

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

        Windows build fix.

        * kjs/lexer.cpp:
        (KJS::Lexer::record8):

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

        Reviewed by Eric.

        Replace strings, identifier, buffer8 and buffer16 members of Lexer with vectors.
        SunSpider claims this is a 0.7% speedup.

        * kjs/lexer.cpp:
        (KJS::Lexer::Lexer):
        (KJS::Lexer::lex):
        (KJS::Lexer::record8):
        (KJS::Lexer::record16):
        (KJS::Lexer::scanRegExp):
        (KJS::Lexer::clear):
        (KJS::Lexer::makeIdentifier):
        (KJS::Lexer::makeUString):
        * kjs/lexer.h:
        * kjs/ustring.cpp:
        (KJS::UString::UString): Add a convenience constructor that takes a const Vector<UChar>&.
        * kjs/ustring.h:

2007-11-16  Adam Roben  <aroben@apple.com>

        Windows build fix

        * JavaScriptCore.vcproj/testkjs/testkjs.vcproj: Add a new include path
        and ignore the int -> bool conversion warning.

2007-11-16  Alexey Proskuryakov  <ap@webkit.org>

        Fix Windows debug build.
        Rubber-stamped by Eric

        * pcre/pcre_exec.cpp: (match): Removed ASSERT_NOT_REACHED assertions that were making MSVC
        complain about unreachable code.

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

        Gtk build fix.

        * kjs/Parser.cpp:

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

        Mac build and header search path sanity fix.

        Reviewed by Sam Weinig and Tim Hatcher.

        Move base setting for HEADER_SEARCH_PATHS into Base.xcconfig, and extend
        it in JavaScriptCore.xcconfig.  This removes the need to override it on a
        per-target basis inside the .xcodeproj file.

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

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

        Qt build fix.

        * kjs/Parser.h:

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

        Reviewed by Eric Seidel.

        Another round of grammar / parsing cleanup.
        
        1. Created distinct parser calls for parsing function bodies vs
        programs. This will help later with optimizing global variable access.
        
        2. Turned Parser into a singleton. Cleaned up Lexer's singleton 
        interface.
        
        3. Modified Lexer to free a little more memory when done lexing. (Added
        FIXMEs for similar issues that I didn't fix.)
        
        4. Changed Lexer::makeIdentifier and Lexer::makeUString to start 
        respecting the arguments passed to them. (No behavior change, but this
        problem could have caused serious problems for an unsuspecting user of
        these functions.)
        
        5. Removed KJS_DEBUG_MEM because it was bit-rotted.
        
        6. Removed Parser::prettyPrint because the same work was simpler to do
        at the call site.
        
        7. Some renames:
        
            "Parser::accept" => "Parser::didFinishParsing"
            "Parser::sid" => "Parser::m_sourceID"
            "Lexer::doneParsing" => "Lexer::clear"
            "sid" => "sourceId"
            "lineno" => "lineNo"
        
        * JavaScriptCore.exp:
        * kjs/Parser.cpp:
        (KJS::Parser::Parser):
        (KJS::Parser::parseProgram):
        (KJS::Parser::parseFunctionBody):
        (KJS::Parser::parse):
        (KJS::Parser::didFinishParsing):
        (KJS::parser):
        * kjs/Parser.h:
        (KJS::Parser::sourceId):
        * kjs/function.cpp:
        (KJS::GlobalFuncImp::callAsFunction):
        * kjs/function_object.cpp:
        (FunctionObjectImp::construct):
        * kjs/grammar.y:
        * kjs/interpreter.cpp:
        (KJS::Interpreter::checkSyntax):
        (KJS::Interpreter::evaluate):
        * kjs/interpreter.h:
        * kjs/lexer.cpp:
        (kjsyylex):
        (KJS::lexer):
        (KJS::Lexer::Lexer):
        (KJS::Lexer::~Lexer):
        (KJS::Lexer::scanRegExp):
        (KJS::Lexer::doneParsing):
        (KJS::Lexer::makeIdentifier):
        (KJS::Lexer::makeUString):
        * kjs/lexer.h:
        (KJS::Lexer::pattern):
        (KJS::Lexer::flags):
        (KJS::Lexer::sawError):
        * kjs/nodes.cpp:
        (KJS::Node::Node):
        (KJS::FunctionBodyNode::FunctionBodyNode):
        * kjs/nodes.h:
        * kjs/testkjs.cpp:
        (prettyPrintScript):
        (kjsmain):
        * kjs/ustring.cpp:
        * kjs/ustring.h:

2007-11-15  Oliver Hunt  <oliver@apple.com>

        Reviewed by Darin.

        <rdar://problem/5601548> REGRESSION: All SourceElements and their children leak after a syntax error
        
        Add a stub node to maintain the Vector of SourceElements until assignment.

        * kjs/grammar.y:
        * kjs/nodes.h:
        (KJS::SourceElementsStub::SourceElementsStub):
        (KJS::SourceElementsStub::append):
        (KJS::SourceElementsStub::release):
        (KJS::SourceElementsStub::):
        (KJS::SourceElementsStub::precedence):

2007-11-15  Eric Seidel  <eric@webkit.org>

        Reviewed by Sam.

        Abstract most of RMATCH into MatchStack functions.
        
        SunSpider claims this, combined with the last 2 patches was a 1% speedup, 10% for dna-regexp.

        * pcre/pcre_exec.cpp:
        (MatchStack::canUseStackBufferForNextFrame):
        (MatchStack::allocateNextFrame):
        (MatchStack::pushNewFrame):
        (MatchStack::frameIsStackAllocated):
        (MatchStack::popCurrentFrame):
        (MatchStack::unrollAnyHeapAllocatedFrames):
        (match):

2007-11-15  Eric Seidel  <eric@webkit.org>

        Reviewed by Sam.

        Remove RETURN_ERROR, add MatchStack
        
        * pcre/pcre_exec.cpp:
        (MatchStack::MatchStack):
        (MatchStack::unrollAnyHeapAllocatedFrames):
        (matchError):
        (match):
        
2007-11-15  Eric Seidel  <eric@webkit.org>

        Reviewed by Sam.

        Clean up match function to match WebKit style

        * JavaScriptCore.xcodeproj/project.pbxproj:
        * pcre/pcre_exec.cpp:
        (match):

2007-11-15  Steve Falkenburg  <sfalken@apple.com>

        Windows build fix.

        * JavaScriptCore.vcproj/JavaScriptCore.make:

2007-11-14  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=15982
        Improve JSString UTF-8 decoding

        * API/JSStringRef.cpp:
        (JSStringCreateWithUTF8CString): Use strict decoding, return 0 on error.

        * wtf/unicode/UTF8.cpp:
        (WTF::Unicode::convertUTF16ToUTF8):
        (WTF::Unicode::convertUTF8ToUTF16):
        * wtf/unicode/UTF8.h:
        Made these function names start with a lower case letter.

        * kjs/ustring.cpp: (KJS::UString::UTF8String): Updated for the above renaming.

        * bindings/c/c_utility.cpp:
        (KJS::Bindings::convertUTF8ToUTF16WithLatin1Fallback): Renamed to highlight the difference
        from convertUTF8ToUTF16 in wtf/unicode.
        (KJS::Bindings::convertNPStringToUTF16): Updated for the above renaming.
        (KJS::Bindings::identifierFromNPIdentifier): Ditto.
        * bindings/c/c_utility.h: Made convertUTF8ToUTF16WithLatin1Fallback() a file static.

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

        Rubber-stamped by Anders.

        Fix the Xcode project file after it was messed up in r27402.

        * JavaScriptCore.xcodeproj/project.pbxproj:

2007-11-14  Eric Seidel  <eric@webkit.org>

        Reviewed by Oliver.
        
        More PCRE style cleanup.

        * pcre/pcre_compile.cpp:
        (compile_regex):

2007-11-14  Adam Roben  <aroben@apple.com>

        Clean up the bison conflict checking script

        Reviewed by Geoff.

        * DerivedSources.make:

2007-11-14  Eric Seidel  <eric@webkit.org>

        Reviewed by Geoff.

        Another round of PCRE cleanups: inlines
        
        SunSpider claims that this, combined with my previous PCRE cleanup were a 0.7% speedup, go figure.

        * pcre/pcre_compile.cpp:
        (jsRegExpCompile):
        * pcre/pcre_exec.cpp:
        (match):
        (jsRegExpExecute):
        * pcre/pcre_internal.h:
        (PUT):
        (GET):
        (PUT2):
        (GET2):
        (isNewline):

2007-11-14  Eric Seidel  <eric@webkit.org>

        Reviewed by Sam.
        
        Give PCRE a (small) bath.
        Fix some formating and break things off into separate functions
        http://bugs.webkit.org/show_bug.cgi?id=15993

        * pcre/pcre_compile.cpp:
        (calculateCompiledPatternLengthAndFlags):
        (printCompiledRegExp):
        (returnError):
        (jsRegExpCompile):
        * pcre/pcre_internal.h:
        (compile_data::compile_data):

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

        Reviewed by Eric Seidel.
        
        Cleaned up the JavaScript grammar a bit.
        
        1. Changed BlockNode to always hold a child vector (which may be empty),
        eliminating a few NULL-check branches in the common execution case.
        
        2. Changed the Block production to correctly report its starting and 
        ending line numbers to the debugger. (It used to report its ending line
        as its starting line.) Also, removed duplicate line-reporting code
        inside the BlockNode constructor.
        
        3. Moved curly braces up from FunctionBody production into parent
        productions. (I had to move the line number reporting code, too, since
        it depends on the location of the curly braces.) This matches the ECMA
        spec more closely, and makes some future changes I plan easier.
        
        4. Fixed statementList* convenience functions to deal appropriately with
        empty Vectors.

        SunSpider reports a small and statistically insignificant speedup.

        * kjs/grammar.y:
        * kjs/nodes.cpp:
        (KJS::statementListPushFIFO):
        (KJS::statementListGetDeclarations):
        (KJS::statementListInitializeDeclarationStack):
        (KJS::statementListInitializeVariableAccessStack):
        (KJS::BlockNode::BlockNode):
        (KJS::BlockNode::optimizeVariableAccess):
        (KJS::BlockNode::getDeclarations):
        (KJS::BlockNode::execute):
        (KJS::FunctionBodyNode::initializeDeclarationStacks):
        (KJS::FunctionBodyNode::optimizeVariableAccess):

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

        Add RefCounted.h (And remove Shared.h)
        
        * JavaScriptCore.vcproj/WTF/WTF.vcproj:

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

        Build fix.

        * kjs/regexp.h:

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

        Reviewed by Anders Carlsson.

        Renamed Shared to RefCounted.

        * API/JSClassRef.h:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * kjs/interpreter.h:
        * kjs/regexp.h:
        * wtf/RefCounted.h: Copied from JavaScriptCore/wtf/Shared.h.
        (WTF::RefCounted::RefCounted):
        * wtf/Shared.h: Removed.

2007-11-13  Adam Roben  <aroben@apple.com>

        Build fix

        Reviewed by Geoff.

        * kjs/regexp.h: Added a missing #include.

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

        Reviewed by Sam Weinig.

        Moved Shared.h into wtf so it could be used in more places. Deployed
        Shared in places where JSCore previously had hand-rolled ref-counting
        classes.

        * API/JSClassRef.cpp:
        (OpaqueJSClass::OpaqueJSClass):
        * API/JSClassRef.h:
        * API/JSObjectRef.cpp:
        (JSClassRetain):
        (JSClassRelease):
        * JavaScriptCore.vcproj/WTF/WTF.vcproj:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * kjs/interpreter.cpp:
        (KJS::Interpreter::init):
        * kjs/interpreter.h:
        * kjs/regexp.cpp:
        (KJS::RegExp::RegExp):
        * kjs/regexp.h:
        * wtf/Shared.h: Copied from WebCore/platform/Shared.h.

2007-11-13  Eric Seidel  <eric@webkit.org>

        Reviewed by Maciej.

        Add an ASSERT to getTruncatedInt32 to enforce proper usage.
        Best part about this patch?  It doesn't break the web!

        * kjs/JSImmediate.h:
        (KJS::JSImmediate::getTruncatedInt32):
        (KJS::JSImmediate::toDouble):
        (KJS::JSImmediate::getUInt32):

2007-11-13  Alexey Proskuryakov  <ap@webkit.org>

        Windows build fix.

        * bindings/c/c_utility.cpp:
        (KJS::Bindings::convertUTF8ToUTF16):
        * kjs/ustring.cpp:
        (KJS::UString::UTF8String):
        * wtf/unicode/UTF8.cpp:
        (WTF::Unicode::ConvertUTF8ToUTF16):

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

        Reviewed by Geoff.

        - fix http://bugs.webkit.org/show_bug.cgi?id=11231
          RegExp bug when handling newline characters
          and a number of other differences between PCRE behvior
          and JavaScript regular expressions:

          + single-digit sequences like \4 should be treated as octal
            character constants, unless there is a sufficient number
            of brackets for them to be treated as backreferences

          + \8 turns into the character "8", not a binary zero character
            followed by "8" (same for 9)

          + only the first 3 digits should be considered part of an
            octal character constant (the old behavior was to decode
            an arbitrarily long sequence and then mask with 0xFF)

          + if \x is followed by anything other than two valid hex digits,
            then it should simply be treated a the letter "x"; that includes
            not supporting the \x{41} syntax

          + if \u is followed by anything less than four valid hex digits,
            then it should simply be treated a the letter "u"

          + an extra "+" should be a syntax error, rather than being treated
            as the "possessive quantifier"

          + if a "]" character appears immediately after a "[" character that
            starts a character class, then that's an empty character class,
            rather than being the start of a character class that includes a
            "]" character

          + a "$" should not match a terminating newline; we could have gotten
            PCRE to handle this the way we wanted by passing an appropriate option

        Test: fast/js/regexp-no-extensions.html

        * pcre/pcre_compile.cpp:
        (check_escape): Check backreferences against bracount to catch both
        overflows and things that should be treated as octal. Rewrite octal
        loop to not go on indefinitely. Rewrite both hex loops to match and
        remove \x{} support.
        (compile_branch): Restructure loops so that we don't special-case a "]"
        at the beginning of a character class. Remove code that treated "+" as
        the possessive quantifier.
        (jsRegExpCompile): Change the "]" handling here too.

        * pcre/pcre_exec.cpp: (match): Changed CIRC to match the DOLL implementation.
        Changed DOLL to remove handling of "terminating newline", a Perl concept
        which we don't need.

        * tests/mozilla/expected.html: Two tests are fixed now:
        ecma_3/RegExp/regress-100199.js and ecma_3/RegExp/regress-188206.js.
        One test fails now: ecma_3/RegExp/perlstress-002.js -- our success before
        was due to a bug (we treated all 1-character numeric escapes as backreferences).
        The date tests also now both expect success -- whatever was making them fail
        before was probably due to the time being close to a DST shift; maybe we need
        to get rid of those tests.

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

        * kjs/JSImmediate.h: (KJS::JSImmediate::getTruncatedInt32):
        Remove too-strong assert that was firing constantly and preventing even basic
        web browsing from working in a debug build. This function is used in many
        cases where the immediate value is not a number; the assertion could perhaps
        be added back later with a bit of reorganization.

2007-11-13  Alp Toker  <alp@atoker.com>

        Build fix for breakage to non-Mac builds introduced in r27746.

        * kjs/ustring.cpp:

2007-11-13  Eric Seidel  <eric@webkit.org>

        Reviewed by Maciej.

        Clean up evaluateToBoolean functions to use inlines instead of copy/paste code

        * kjs/JSImmediate.h:
        * kjs/nodes.cpp:
        (KJS::GreaterNode::inlineEvaluateToBoolean):
        (KJS::GreaterNode::evaluate):
        (KJS::LessEqNode::inlineEvaluateToBoolean):
        (KJS::LessEqNode::evaluate):
        (KJS::GreaterEqNode::inlineEvaluateToBoolean):
        (KJS::GreaterEqNode::evaluate):
        (KJS::InNode::evaluateToBoolean):
        (KJS::EqualNode::inlineEvaluateToBoolean):
        (KJS::EqualNode::evaluate):
        (KJS::NotEqualNode::inlineEvaluateToBoolean):
        (KJS::NotEqualNode::evaluate):
        (KJS::StrictEqualNode::inlineEvaluateToBoolean):
        (KJS::StrictEqualNode::evaluate):
        (KJS::NotStrictEqualNode::inlineEvaluateToBoolean):
        (KJS::NotStrictEqualNode::evaluate):
        * kjs/nodes.h:

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

        Reviewed by Sam Weinig.
        
        Fixed http://bugs.webkit.org/show_bug.cgi?id=15958
        base64 spends 1.1% of total time checking for special Infinity case
        
        Use a fast character test instead of calling strncmp.
        
        1.1% speedup on string-base64. SunSpider reports a .4% speedup overall;
        Sharks reports only .1%. Who are you going to believe? Huh?

        * kjs/ustring.cpp:
        (KJS::UString::toDouble):

2007-11-12  Eric Seidel  <eric@webkit.org>

        Reviewed by Oliver.

        Add evaluateToInt32 and evaluateUInt32 methods and deploy them.
        Fix a few missing evaluateToBoolean methods
        Deploy all evaluateTo* functions to more nodes to avoid slowdowns
        http://bugs.webkit.org/show_bug.cgi?id=15950
        
        SunSpider claims this is at least a 1.4% speedup.

        * kjs/JSImmediate.h:
        (KJS::JSImmediate::getTruncatedInt32):
        (KJS::JSImmediate::toDouble):
        (KJS::JSImmediate::getUInt32):
        * kjs/nodes.cpp:
        (KJS::ExpressionNode::evaluateToNumber):
        (KJS::ExpressionNode::evaluateToInt32):
        (KJS::ExpressionNode::evaluateToUInt32):
        (KJS::NumberNode::evaluateToInt32):
        (KJS::NumberNode::evaluateToUInt32):
        (KJS::ImmediateNumberNode::evaluateToInt32):
        (KJS::ImmediateNumberNode::evaluateToUInt32):
        (KJS::ResolveNode::evaluate):
        (KJS::ResolveNode::evaluateToNumber):
        (KJS::ResolveNode::evaluateToBoolean):
        (KJS::ResolveNode::evaluateToInt32):
        (KJS::ResolveNode::evaluateToUInt32):
        (KJS::LocalVarAccessNode::evaluateToInt32):
        (KJS::LocalVarAccessNode::evaluateToUInt32):
        (KJS::BracketAccessorNode::evaluateToNumber):
        (KJS::BracketAccessorNode::evaluateToBoolean):
        (KJS::BracketAccessorNode::evaluateToInt32):
        (KJS::BracketAccessorNode::evaluateToUInt32):
        (KJS::DotAccessorNode::inlineEvaluate):
        (KJS::DotAccessorNode::evaluate):
        (KJS::DotAccessorNode::evaluateToNumber):
        (KJS::DotAccessorNode::evaluateToBoolean):
        (KJS::DotAccessorNode::evaluateToInt32):
        (KJS::DotAccessorNode::evaluateToUInt32):
        (KJS::NewExprNode::inlineEvaluate):
        (KJS::NewExprNode::evaluate):
        (KJS::NewExprNode::evaluateToNumber):
        (KJS::NewExprNode::evaluateToBoolean):
        (KJS::NewExprNode::evaluateToInt32):
        (KJS::NewExprNode::evaluateToUInt32):
        (KJS::FunctionCallResolveNode::inlineEvaluate):
        (KJS::FunctionCallResolveNode::evaluate):
        (KJS::FunctionCallResolveNode::evaluateToNumber):
        (KJS::FunctionCallResolveNode::evaluateToBoolean):
        (KJS::FunctionCallResolveNode::evaluateToInt32):
        (KJS::FunctionCallResolveNode::evaluateToUInt32):
        (KJS::LocalVarFunctionCallNode::evaluate):
        (KJS::LocalVarFunctionCallNode::evaluateToNumber):
        (KJS::LocalVarFunctionCallNode::evaluateToBoolean):
        (KJS::LocalVarFunctionCallNode::evaluateToInt32):
        (KJS::LocalVarFunctionCallNode::evaluateToUInt32):
        (KJS::FunctionCallDotNode::evaluate):
        (KJS::FunctionCallDotNode::evaluateToNumber):
        (KJS::FunctionCallDotNode::evaluateToBoolean):
        (KJS::FunctionCallDotNode::evaluateToInt32):
        (KJS::FunctionCallDotNode::evaluateToUInt32):
        (KJS::PostDecLocalVarNode::inlineEvaluateToNumber):
        (KJS::PostDecLocalVarNode::evaluateToNumber):
        (KJS::PostDecLocalVarNode::evaluateToBoolean):
        (KJS::PostDecLocalVarNode::evaluateToInt32):
        (KJS::PostDecLocalVarNode::evaluateToUInt32):
        (KJS::typeStringForValue):
        (KJS::UnaryPlusNode::evaluate):
        (KJS::UnaryPlusNode::evaluateToBoolean):
        (KJS::UnaryPlusNode::evaluateToNumber):
        (KJS::UnaryPlusNode::evaluateToInt32):
        (KJS::BitwiseNotNode::inlineEvaluateToInt32):
        (KJS::BitwiseNotNode::evaluate):
        (KJS::BitwiseNotNode::evaluateToNumber):
        (KJS::BitwiseNotNode::evaluateToBoolean):
        (KJS::BitwiseNotNode::evaluateToInt32):
        (KJS::MultNode::evaluateToBoolean):
        (KJS::MultNode::evaluateToInt32):
        (KJS::MultNode::evaluateToUInt32):
        (KJS::DivNode::evaluateToInt32):
        (KJS::DivNode::evaluateToUInt32):
        (KJS::ModNode::evaluateToBoolean):
        (KJS::ModNode::evaluateToInt32):
        (KJS::ModNode::evaluateToUInt32):
        (KJS::AddNode::evaluateToNumber):
        (KJS::AddNode::evaluateToInt32):
        (KJS::AddNode::evaluateToUInt32):
        (KJS::AddNumbersNode::evaluateToInt32):
        (KJS::AddNumbersNode::evaluateToUInt32):
        (KJS::SubNode::evaluateToInt32):
        (KJS::SubNode::evaluateToUInt32):
        (KJS::LeftShiftNode::inlineEvaluateToInt32):
        (KJS::LeftShiftNode::evaluate):
        (KJS::LeftShiftNode::evaluateToNumber):
        (KJS::LeftShiftNode::evaluateToInt32):
        (KJS::RightShiftNode::inlineEvaluateToInt32):
        (KJS::RightShiftNode::evaluate):
        (KJS::RightShiftNode::evaluateToNumber):
        (KJS::RightShiftNode::evaluateToInt32):
        (KJS::UnsignedRightShiftNode::inlineEvaluateToUInt32):
        (KJS::UnsignedRightShiftNode::evaluate):
        (KJS::UnsignedRightShiftNode::evaluateToNumber):
        (KJS::UnsignedRightShiftNode::evaluateToInt32):
        (KJS::LessNode::inlineEvaluateToBoolean):
        (KJS::LessNode::evaluate):
        (KJS::LessNode::evaluateToBoolean):
        (KJS::LessNumbersNode::inlineEvaluateToBoolean):
        (KJS::LessNumbersNode::evaluate):
        (KJS::LessNumbersNode::evaluateToBoolean):
        (KJS::LessStringsNode::inlineEvaluateToBoolean):
        (KJS::LessStringsNode::evaluate):
        (KJS::BitAndNode::evaluate):
        (KJS::BitAndNode::inlineEvaluateToInt32):
        (KJS::BitAndNode::evaluateToNumber):
        (KJS::BitAndNode::evaluateToBoolean):
        (KJS::BitAndNode::evaluateToInt32):
        (KJS::BitXOrNode::inlineEvaluateToInt32):
        (KJS::BitXOrNode::evaluate):
        (KJS::BitXOrNode::evaluateToNumber):
        (KJS::BitXOrNode::evaluateToBoolean):
        (KJS::BitXOrNode::evaluateToInt32):
        (KJS::BitOrNode::inlineEvaluateToInt32):
        (KJS::BitOrNode::evaluate):
        (KJS::BitOrNode::evaluateToNumber):
        (KJS::BitOrNode::evaluateToBoolean):
        (KJS::BitOrNode::evaluateToInt32):
        (KJS::ConditionalNode::evaluateToNumber):
        (KJS::ConditionalNode::evaluateToInt32):
        (KJS::ConditionalNode::evaluateToUInt32):
        (KJS::valueForReadModifyAssignment):
        (KJS::AssignExprNode::evaluate):
        (KJS::AssignExprNode::evaluateToBoolean):
        (KJS::AssignExprNode::evaluateToNumber):
        (KJS::AssignExprNode::evaluateToInt32):
        (KJS::VarDeclNode::handleSlowCase):
        * kjs/nodes.h:
        (KJS::FunctionCallResolveNode::precedence):
        (KJS::AddNode::precedence):
        (KJS::AddNode::):
        (KJS::LessNumbersNode::):
        (KJS::LessStringsNode::):
        * kjs/value.cpp:
        (KJS::JSValue::toInt32SlowCase):
        (KJS::JSValue::toUInt32SlowCase):
        * kjs/value.h:
        (KJS::JSValue::asCell):
        (KJS::JSValue::toInt32):
        (KJS::JSValue::toUInt32):

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

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=15953
        Add UTF-8 encoding/decoding to WTF

        * kjs/ustring.h: Moved UTF8SequenceLength() and decodeUTF8Sequence() to wtf/unicode.
        * kjs/ustring.cpp: (KJS::UString::UTF8String): Changed this function to take a strict/lenient
        parameter. Callers are not interested in getting decoding results in strict mode, so 
        this allows for bailing out as soon as an error is seen.

        * kjs/function.cpp:
        (KJS::encode): Updated for new UString::UTF8String() signature.

        * API/JSStringRef.cpp:
        (JSStringCreateWithCharacters): Disambiguate UChar.
        (JSStringCreateWithUTF8CString): Actually use UTF-8 when creating the string!
        * bindings/c/c_utility.cpp: (KJS::Bindings::convertUTF8ToUTF16): Use ConvertUTF8ToUTF16().

        * wtf/unicode/UTF8.cpp: Added.
        (WTF::Unicode::inlineUTF8SequenceLengthNonASCII):
        (WTF::Unicode::inlineUTF8SequenceLength):
        (WTF::Unicode::UTF8SequenceLength):
        (WTF::Unicode::decodeUTF8Sequence):
        (WTF::Unicode::):
        (WTF::Unicode::ConvertUTF16ToUTF8):
        (WTF::Unicode::isLegalUTF8):
        (WTF::Unicode::ConvertUTF8ToUTF16):
        * wtf/unicode/UTF8.h: Added.
        (WTF::Unicode::):
        Some code moved from ustring.h, some adapted from unicode.org sources.

        * JavaScriptCore.exp:
        * JavaScriptCore.pri:
        * JavaScriptCore.vcproj/WTF/WTF.vcproj:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * JavaScriptCoreSources.bkl:
        Added UTF8.{h,cpp}

2007-11-12  Josh Aas  <joshmoz@gmail.com>

        Reviewed by Darin.

        - http://bugs.webkit.org/show_bug.cgi?id=15946
          add NPPValue NPPVpluginDrawingModel (Mozilla bug 403418 compat)

        * bindings/npapi.h:

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

        Reviewed by Sam.

        - http://bugs.webkit.org/show_bug.cgi?id=15951
          REGRESSION: assertion failure in regexp match() when running JS tests

        Test: fast/js/regexp-many-brackets.html

        * pcre/pcre_exec.cpp: (match): Added back accidentally-removed case for
        the BRANUMBER opcode.

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

        Reviewed by Geoff.

        - fix use of prefix and config.h, got rid of a few unneeded things in
          the PCRE code; no behavior changes

        * API/JSBase.cpp: Added include of config.h.
        * API/JSCallbackConstructor.cpp: Ditto.
        * API/JSCallbackFunction.cpp: Ditto.
        * API/JSCallbackObject.cpp: Ditto.
        * API/JSClassRef.cpp: Ditto.
        * API/JSContextRef.cpp: Ditto.
        * API/JSObjectRef.cpp: Ditto.
        * API/JSStringRef.cpp: Ditto.
        * API/JSValueRef.cpp: Ditto.

        * JavaScriptCorePrefix.h: Removed obsolete <ctype.h> workaround.
        Moved new/delete macros after includes, as they are in WebCore's prefix.
        Removed "config.h".

        * pcre/dftables.cpp: (main): Changed back to not use a separate maketables
        function. This is needed for PCRE, but not helpful for our use. Also changed
        the tables to all be 128 entries long instead of 256, since only the first
        128 are ever used.

        * pcre/pcre_compile.cpp: Added include of config.h. Eliminated digitab,
        which was only being used to check hex digits. Changed all uses of TRUE and
        FALSE to use the C++ true and false instead.
        (check_escape): Just the TRUE/FALSE thing.
        (is_counted_repeat): Ditto.
        (could_be_empty_branch): Ditto.
        (get_othercase_range): Ditto.
        (compile_branch): Ditto.
        (compile_regex): Ditto.
        (is_anchored): Ditto.
        (is_startline): Ditto.
        (find_firstassertedchar): Ditto.
        (jsRegExpCompile): Ditto.

        * pcre/pcre_exec.cpp: Added include of config.h. Changed all uses of TRUE and
        FALSE to use the C++ true and false instead.
        (match_ref): Just the TRUE/FALSE thing.
        (match): Ditto. Removed some unneeded braces.
        (jsRegExpExecute): Just the TRUE/FALSE thing.

        * pcre/pcre_internal.h: Moved the constants needed by dftables.cpp to the top
        of the file instead of the bottom, so they can be used. Also changed the table
        sizes to 128 instead of 256. Removed macro definitions of FALSE and TRUE.
        Set array sizes for all the const arrays. Changed _pcre_utf8_table1_size to
        be a macro instead of a extern int.

        * pcre/pcre_maketables.cpp: Removed. It's all in dftables.cpp now.

        * pcre/pcre_tables.cpp: Made table sizes explicit.

        * pcre/pcre_xclass.cpp: Just the TRUE/FALSE thing.

2007-11-12  Adam Roben  <aroben@apple.com>

        Build fix

        * wtf/FastMalloc.h: Add missing using statement.

2007-11-11  Oliver Hunt  <oliver@apple.com>

        Reviewed by Darin.

        Add special fastZeroedMalloc function to replace a 
        number of fastCalloc calls where one argument was 1.
        
        This results in a 0.4% progression in SunSpider, more
        than making up for the earlier regression caused by 
        additional overflow checks.

        * JavaScriptCore.exp:
        * kjs/array_instance.cpp:
        * kjs/property_map.cpp:
        * wtf/FastMalloc.cpp:
        * wtf/FastMalloc.h:
        * wtf/HashTable.h:

2007-11-11  Adam Roben  <aroben@apple.com>

        Fix <rdar://5578982> ASSERT in HashTable::checkTableConsistencyExceptSize beneath WebNotificationCenter

        The bug was due to a mismatch between HashMap::remove and
        HashTable::checkTableConsistency. HashMap::remove can delete the value
        stored in the HashTable (by derefing it), which is not normally
        allowed by HashTable. It's OK in this case because the value is about
        to be removed from the table, but HashTable wasn't aware of this.

        HashMap::remove now performs the consistency check itself before
        derefing the value.

        Darin noticed that the same bug would occur in HashSet, so I've fixed
        it there as well.

        Reviewed by Darin.

        * wtf/HashMap.h:
        (WTF::HashMap::remove): Perform the HashTable consistency check
        manually before calling deref.
        * wtf/HashSet.h:
        (WTF::HashSet::remove): Ditto.
        * wtf/HashTable.h: Made checkTableConsistency public so that HashMap
        and HashSet can call it.
        (WTF::HashTable::removeAndInvalidateWithoutEntryConsistencyCheck):
        Added.
        (WTF::HashTable::removeAndInvalidate): Added.
        (WTF::HashTable::remove):
        (WTF::HashTable::removeWithoutEntryConsistencyCheck): Added.

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

        Build fix.  Use the correct filename case.

        * kjs/nodes.h:

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

        Reviewed by Sam Weinig.
        
        Fixed http://bugs.webkit.org/show_bug.cgi?id=15902
        15% of string-validate-input.js is spent compiling the same regular expression
        
        Store a compiled representation of the regular expression in the AST.
        
        Only a .2% SunSpider speedup overall, but a 10.6% speedup on 
        string-validate-input.js.

        * kjs/nodes.cpp:
        (KJS::RegExpNode::evaluate):
        * kjs/nodes.h:
        (KJS::RegExpNode::):
        * kjs/nodes2string.cpp:
        (KJS::RegExpNode::streamTo):
        * kjs/regexp.cpp:
        (KJS::RegExp::flags):
        * kjs/regexp.h:
        (KJS::RegExp::pattern):
        * kjs/regexp_object.cpp:
        (KJS::RegExpObjectImp::construct):
        (KJS::RegExpObjectImp::createRegExpImp):
        * kjs/regexp_object.h:

2007-11-11  Oliver Hunt  <oliver@apple.com>

        Reviewed by Eric.

        Partial fix for <rdar://problem/5585334> numfuzz: integer overflows opening malformed SVG file in WebCore::ImageBuffer::create

        Unfortunately this is a very slight regression, but is unavoidable.

        * wtf/FastMalloc.cpp:

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

        Reviewed by darin.
        
        Add simple type inferencing to the parser, and create custom
        AddNode and LessNode subclasses based on inferred types.
        http://bugs.webkit.org/show_bug.cgi?id=15884
        
        SunSpider claims this is at least a 0.5% speedup.

        * JavaScriptCore.exp:
        * kjs/grammar.y:
        * kjs/internal.cpp:
        (KJS::NumberImp::getPrimitiveNumber):
        (KJS::GetterSetterImp::getPrimitiveNumber):
        * kjs/internal.h:
        * kjs/lexer.cpp:
        (KJS::Lexer::lex):
        * kjs/nodes.cpp:
        (KJS::Node::Node):
        (KJS::StringNode::evaluate):
        (KJS::StringNode::evaluateToNumber):
        (KJS::StringNode::evaluateToBoolean):
        (KJS::RegExpNode::evaluate):
        (KJS::UnaryPlusNode::optimizeVariableAccess):
        (KJS::AddNode::evaluate):
        (KJS::AddNode::evaluateToNumber):
        (KJS::AddNumbersNode::inlineEvaluateToNumber):
        (KJS::AddNumbersNode::evaluate):
        (KJS::AddNumbersNode::evaluateToNumber):
        (KJS::AddStringsNode::evaluate):
        (KJS::AddStringLeftNode::evaluate):
        (KJS::AddStringRightNode::evaluate):
        (KJS::lessThan):
        (KJS::lessThanEq):
        (KJS::LessNumbersNode::evaluate):
        (KJS::LessStringsNode::evaluate):
        * kjs/nodes.h:
        (KJS::ExpressionNode::):
        (KJS::RegExpNode::):
        (KJS::RegExpNode::precedence):
        (KJS::TypeOfResolveNode::):
        (KJS::LocalVarTypeOfNode::):
        (KJS::UnaryPlusNode::):
        (KJS::UnaryPlusNode::precedence):
        (KJS::AddNode::):
        (KJS::AddNode::precedence):
        (KJS::AddNumbersNode::):
        (KJS::AddStringLeftNode::):
        (KJS::AddStringRightNode::):
        (KJS::AddStringsNode::):
        (KJS::LessNode::):
        (KJS::LessNode::precedence):
        (KJS::LessNumbersNode::):
        (KJS::LessStringsNode::):
        * kjs/nodes2string.cpp:
        (KJS::StringNode::streamTo):
        * kjs/object.cpp:
        * kjs/object.h:
        * kjs/value.h:
        (KJS::JSValue::getPrimitiveNumber):

2007-11-11  Darin Adler  <darin@apple.com>

        - try another way of fixing dftables builds -- refactor pcre_internal.h a bit

        * pcre/pcre_internal.h: Make most of this header do nothing when DFTABLES is set.
        Later we can break it into two files.

        * JavaScriptCore.vcproj/dftables/dftables.vcproj: Take out now-unneeded include paths.
        * pcre/dftables.cpp: Set DFTABLES. Use delete instead of free.
        * pcre/dftables.pro: Take out now-unneeded include paths.
        * pcre/pcre_maketables.cpp: Use new instead of malloc.

2007-11-11  Darin Adler  <darin@apple.com>

        * pcre/dftables.pro: Try fixing Qt builds (I looked at qt-win) by adding
        another include path.

2007-11-11  Darin Adler  <darin@apple.com>

        * JavaScriptCore.xcodeproj/project.pbxproj: Try fixing Mac Tiger builds
        by adding another include path.

2007-11-11  Darin Adler  <darin@apple.com>

        Reviewed by Sam.

        - http://bugs.webkit.org/show_bug.cgi?id=15924
          next round of changes to JSRegExp (formerly PCRE)

        This is a combination of converting to C++, tweaking the API, and adding
        some additional optimizations.

        Future steps will involve getting rid of the use of UTF-8 completely
        (we'll use UTF-16 exclusively instead), eliminating more source files,
        and some more speed-ups.

        SunSpider says the current round is an 0.9% speed-up overall, and a
        5.3% speed-up for regexp.

        * JavaScriptCore.exp: Updated for new entry points.

        * JavaScriptCore.pri:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
        * JavaScriptCore.vcproj/dftables/dftables.vcproj:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * JavaScriptCoreSources.bkl:
        * jscore.bkl:
        Updated for new source file names and ForwardingHeaders.

        * kjs/regexp.cpp:
        (KJS::RegExp::RegExp): Changed to use the error message without calling
        strdup on it and to pass the new types and options.
        (KJS::RegExp::~RegExp): Removed the now-unneeded free of the error message.
        (KJS::RegExp::match): Pass the new types and options.
        * kjs/regexp.h: Update type of m_constructionError.

        * pcre/AUTHORS: Update to reflect the status of the project -- we don't include
        the Google parts, and this isn't the PCRE library, per se.
        * pcre/COPYING: Ditto.

        * pcre/dftables.cpp: Copied from JavaScriptCore/pcre/dftables.c.
        (main): Removed unneeded ctype_digit.

        * pcre/pcre.h: Convert to C++, tweak API a bit. Use UChar instead of JSRegExpChar.

        * pcre/pcre_compile.cpp: Copied from JavaScriptCore/pcre/pcre_compile.c.
        Moved a lot of private stuff used only within this file here from pcre_internal.h.
        Renumbered the error codes.
        (error_text): Use a single string with embedded nulls for the error text (I got
        this idea from newer versions of PCRE).
        (check_escape): Changed return type to be enum instead of int. Replaced ctype_digit
        uses with isASCIIDigit.
        (is_counted_repeat): Ditto.
        (read_repeat_counts): Ditto.
        (first_significant_code): Ditto.
        (find_fixedlength): Ditto.
        (could_be_empty_branch): Ditto.
        (compile_branch): Ditto. Also removed some code that handles changing options.
        JavaScript doesn't have any of the features that allow options to change.
        (compile_regex): Updated for change to options parameter.
        (is_anchored): Ditto.
        (find_firstassertedchar): Ditto.
        (jsRegExpCompile): Changed to take separate flags instead of an options int.
        Also changed to call new/delete instead of pcre_malloc/free.
        (jsRegExpFree): Ditto.

        * pcre/pcre_exec.cpp: Copied from JavaScriptCore/pcre/pcre_exec.c.
        Added a case that uses computed goto for the opcode loop, but did not turn it on.
        Changed the RMATCH macro to handle returns more efficiently by putting the where
        pointer in the new frame instead of the old one, allowing us to branch to the
        return with a single statement. Switched to new/delete from pcre_malloc/free.
        Changed many RRETURN callers to not set the return value since it's already
        set correctly. Replaced the rrc variable with an is_match variable. Values other
        than "match" and "no match" are now handled differently. This allows us to remove
        the code to check for those cases in various rules.
        (match): All the case statements use a macro BEGIN_OPCODE instead. And all the
        continue statements, or break statements that break out of the outer case use
        a macro NEXT_OPCODE instead. Replaced a few if statements with assertions.
        (jsRegExpExecute): Use new/delete instead of pcre_malloc/free. Removed unused
        start_match field from the match block.

        * pcre/pcre_internal.h: Moved the last few configuration macros from pcre-config.h
        in here. Removed various unused types. Converted from JSRegExpChar to UChar.
        Eliminated pcre_malloc/free. Replaced the opcode enum with a macro that can be
        used in multiple places. Unfortunately we lose the comments for each opcode; we
        should find a place to put those back. Removed ctype_digit.

        * pcre/pcre_maketables.cpp: Copied from JavaScriptCore/pcre/pcre_maketables.c.
        (pcre_maketables): Got rid of the conditional code that allows this to be compiled
        in -- it's only used for dftables now (and soon may be obsolete entirely).
        Changed code for cbit_digit to not use isdigit, and took the "_" case out of the
        loop. Removed ctype_digit.

        * pcre/pcre_ord2utf8.cpp: Copied from JavaScriptCore/pcre/pcre_ord2utf8.c.

        * pcre/pcre_tables.cpp: Copied from JavaScriptCore/pcre/pcre_tables.c.
        Moved _pcre_OP_lengths out of here into pcre_exec.cpp.

        * pcre/pcre_ucp_searchfuncs.cpp: Copied from JavaScriptCore/pcre/pcre_ucp_searchfuncs.c.
        Updated for other file name changes.

        * pcre/pcre_xclass.cpp: Copied from JavaScriptCore/pcre/pcre_xclass.c.

        * pcre/ucpinternal.h: Updated header.

        * pcre/ucptable.cpp: Copied from JavaScriptCore/pcre/ucptable.c.

        * wtf/ASCIICType.h: (WTF::isASCIIDigit): Removed a branch by changing from && to
        & for this operation. Also added an overload that takes an int because that's
        useful for PCRE. Later we could optimize for int and overload other functions in
        this file; stuck to this simple one for now.

        * wtf/unicode/icu/UnicodeIcu.h: Removed unused isUpper.
        * wtf/unicode/qt4/UnicodeQt4.h: Ditto.

        * pcre/LICENCE: Removed.
        * pcre/pcre-config.h: Removed.
        * wtf/FastMallocPCRE.cpp: Removed.

        * pcre/dftables.c: Renamed to cpp.
        * pcre/pcre_compile.c: Ditto.
        * pcre/pcre_exec.c: Ditto.
        * pcre/pcre_maketables.c: Ditto.
        * pcre/pcre_ord2utf8.c: Ditto.
        * pcre/pcre_tables.c: Ditto.
        * pcre/pcre_ucp_searchfuncs.c: Ditto.
        * pcre/pcre_xclass.c: Ditto.
        * pcre/ucptable.c: Ditto.

2007-11-11  Eric Seidel  <eric@webkit.org>

        Reviewed by Oliver.

        Add KJS_CHECKEXCEPTIONBOOLEAN to match rest of nodes.cpp

        * kjs/nodes.cpp:
        (KJS::ExpressionNode::evaluateToBoolean):
        (KJS::LessNode::evaluateToBoolean):
        (KJS::GreaterNode::evaluateToBoolean):
        (KJS::LessEqNode::evaluateToBoolean):
        (KJS::GreaterEqNode::evaluateToBoolean):
        (KJS::InstanceOfNode::evaluateToBoolean):
        (KJS::InNode::evaluateToBoolean):
        (KJS::EqualNode::evaluateToBoolean):
        (KJS::NotEqualNode::evaluateToBoolean):
        (KJS::StrictEqualNode::evaluateToBoolean):
        (KJS::NotStrictEqualNode::evaluateToBoolean):
        (KJS::LogicalAndNode::evaluateToBoolean):
        (KJS::LogicalOrNode::evaluateToBoolean):
        (KJS::ConditionalNode::evaluateToBoolean):

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

        Reviewed by Sam.

        - fix http://bugs.webkit.org/show_bug.cgi?id=15927
          REGRESSION(r27487): delete a.c followed by __defineGetter__("c", ...) incorrectly deletes another property
          and <rdar://problem/5586384> REGRESSION (r27487): Can't switch out of Edit HTML Source mode on Leopard Wiki

        Test: fast/js/delete-then-put.html

        * kjs/property_map.cpp:
        (KJS::PropertyMap::put): Added a missing "- 1"; code to find an empty slot was not working.
        (KJS::PropertyMap::checkConsistency): Added a missing range check that would have caught this
        problem before.

        - roll out a last-minute change to my evaluateToBoolean patch that was incorrect.

        * kjs/nodes.h: (KJS::ExprStatementNode::ExprStatementNode): Take out call to
        optimizeForUnnecessaryResult, since the result is used in some cases.

2007-11-10  Adam Roben  <aroben@apple.com>

        Windows build fix

        Roll out some changes that were (seemingly accidentally) checked in
        with r27664.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:

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

        Reviewed by Sam.

        - http://bugs.webkit.org/show_bug.cgi?id=15915
          add an evaluation path for booleans like the one we have for numbers

        Gives 1.1% on SunSpider.

        * kjs/grammar.y: Create TrueNode and FalseNode instead of BooleanNode.

        * kjs/nodes.h: Changed to use Noncopyable. Moved optimizeForUnnecessaryResult
        down from Node to ExpressionNode. Changed some classes to not inherit from
        ExpressionNode where not necessary, and removed unnneeded evaluate functions
        as well as evaluate functions that need not be virtual. Call the
        optimizeForUnnecessaryResult function on the start of a for loop too.
        * kjs/nodes.cpp:
        (KJS::ExpressionNode::evaluateToBoolean): Added.
        (KJS::FalseNode::evaluate): Added.
        (KJS::TrueNode::evaluate): Added.
        (KJS::NumberNode::evaluateToBoolean): Added.
        (KJS::StringNode::evaluateToBoolean): Added.
        (KJS::LocalVarAccessNode::evaluateToBoolean): Added.
        (KJS::BracketAccessorNode::evaluateToBoolean): Added.
        (KJS::LogicalNotNode::evaluate): Changed to call evaluateToBoolean.
        (KJS::LogicalNotNode::evaluateToBoolean): Added.
        (KJS::lessThan): Changed to return bool.
        (KJS::lessThanEq): Ditto.
        (KJS::LessNode::evaluate): Changed since lessThan returns bool.
        (KJS::LessNode::evaluateToBoolean): Added.
        (KJS::GreaterNode::evaluate): Changed since lessThanEq returns bool.
        (KJS::GreaterNode::evaluateToBoolean): Added.
        (KJS::LessEqNode::evaluate): Changed since lessThanEq returns bool.
        (KJS::LessEqNode::evaluateToBoolean): Added.
        (KJS::GreaterEqNode::evaluate): Changed since lessThan returns bool.
        (KJS::GreaterEqNode::evaluateToBoolean): Added.
        (KJS::InstanceOfNode::evaluateToBoolean): Added.
        (KJS::InNode::evaluateToBoolean): Added.
        (KJS::EqualNode::evaluateToBoolean): Added.
        (KJS::NotEqualNode::evaluateToBoolean): Added.
        (KJS::StrictEqualNode::evaluateToBoolean): Added.
        (KJS::NotStrictEqualNode::evaluateToBoolean): Added.
        (KJS::ConditionalNode::evaluate): Changed to call evaluateToBoolean.
        (KJS::IfNode::execute): Ditto.
        (KJS::DoWhileNode::execute): Ditto.
        (KJS::WhileNode::execute): Ditto.
        (KJS::ForNode::execute): Ditto.

        * kjs/nodes2string.cpp:
        (KJS::FalseNode::streamTo): Added.
        (KJS::TrueNode::streamTo): Added.

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

        Windows build fix

        Reviewed by Darin.

        * kjs/value.h:
        (KJS::jsNumber): Add some explicit casts.

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

        - fix build

        * kjs/grammar.y:
        * kjs/nodes.h:
        * kjs/property_map.cpp:

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

        - roll out accidentally-checked in changes

        * kjs/nodes.cpp: Back to previous version.
        * kjs/nodes.h: Ditto.
        * kjs/grammar.y: Ditto.

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

        Reviewed by Maciej.

        - http://bugs.webkit.org/show_bug.cgi?id=15912
          fasta spends a lot of time in qsort

        * kjs/property_map.cpp:
        (KJS::PropertyMap::getEnumerablePropertyNames):
        Use insertion sort instead of qsort for small sets of property names.
        We can probably do some even-better speedups of for/in, but this nets
        0.6% overall and 6.7% on fasta.

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

        Reviewed by Maciej.

        - http://bugs.webkit.org/show_bug.cgi?id=15906
          getting characters by indexing into a string is very slow

        This fixes one source of the slowness -- the conversion to an unused
        Identifier as we call the get function from the slot -- but doesn't
        fix others, such as the fact that we have to allocate a new UString::Rep
        for every single character.

        Speeds up string-base64 30%, and at least 0.5% overall.
        But does slow down access-fannkuch quite a bit. Might be worth
        revisiting in the future to see what we can do about that (although
        I did look at a profile for a while).

        * kjs/property_slot.h: Add a new marker for "numeric" property slots;
        slots where we don't need to pass the identifier to the get function.
        (KJS::PropertySlot::getValue): Added code to call the numeric get function.
        (KJS::PropertySlot::setCustomNumeric): Added.
        * kjs/string_object.cpp:
        (KJS::StringInstance::indexGetter): Changed to use substr() instead
        of constructing a wholly new UString each time.
        (KJS::stringInstanceNumericPropertyGetter): Added. Like indexGetter, but
        takes advantage of setCustomNumeric to avoid creating an Identifier.
        (KJS::StringInstance::getOwnPropertySlot): Changed to use setCustomNumeric.

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

        Reviewed by Oliver.

        - http://bugs.webkit.org/show_bug.cgi?id=15904
          more speed-ups possible by tightening up int version of JSImmediate

        1% improvement of SunSpider

        * kjs/JSImmediate.h: Eliminate the now-unneeded FPBitValues struct template.
        (KJS::JSImmediate::from): Overload for most numeric types; many types can
        do fewer branches and checks.
        (KJS::JSImmediate::getUInt32): Removed unneeded check for undefined.
        (KJS::JSImmediate::getTruncatedInt32): Ditto.
        (KJS::JSImmediate::getTruncatedUInt32): Ditto. There's no difference any more
        between getUInt32 and getTruncatedUInt32, so that's worth a rename and merge later.

        * kjs/grammar.y: Update since fromDouble is now just from.
        * kjs/nodes.h: Ditto.

        * kjs/value.h: (KJS::jsNumber): Overload for most numeric types.

2007-11-08  Kevin Ollivier  <kevino@theolliviers.com>

        Bakefiles for building JavaScriptCore, needed by wx port.

        Reviewed by Mark Rowe.

        * JavaScriptCoreSources.bkl: Added.
        * jscore.bkl: Added.

2007-11-08  Oliver Hunt  <oliver@apple.com>

        Reviewed by Maciej.

        Fix regression caused by earlier bitwise and optimisation.  1 & undefined != 1.

        The implementation of JSImmediate::areBothImmediateNumbers relies on 
        (JSImmediate::getTag(immediate1) & JSImmediate::getTag(immediate2)) having 
        a unique result when both immediate values are numbers.

        The regression was due to UndefinedType & NumberType returning NumberType (3 & 1).
        By swapping the value of NumberType and UndefinedType this ceases to be a problem.

        * kjs/JSType.h:
        (KJS::):

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

        - fix build

        * kjs/nodes.h: Add missing parameter name.

2007-11-08  Eric Seidel  <eric@webkit.org>

        Reviewed by darin.

        Add ExpressionNode subclass of Node, use it.

        * kjs/grammar.y:
        * kjs/nodes.cpp:
        (KJS::ForInNode::ForInNode):
        * kjs/nodes.h:
        (KJS::ExpressionNode::):
        (KJS::NullNode::):
        (KJS::NullNode::precedence):
        (KJS::BooleanNode::):
        (KJS::BooleanNode::precedence):
        (KJS::RegExpNode::):
        (KJS::RegExpNode::precedence):
        (KJS::ThisNode::):
        (KJS::ThisNode::precedence):
        (KJS::ResolveNode::):
        (KJS::ElementNode::):
        (KJS::ArrayNode::):
        (KJS::PropertyNode::):
        (KJS::PropertyNode::precedence):
        (KJS::PropertyNode::name):
        (KJS::PropertyListNode::):
        (KJS::ObjectLiteralNode::):
        (KJS::ObjectLiteralNode::precedence):
        (KJS::BracketAccessorNode::):
        (KJS::DotAccessorNode::):
        (KJS::DotAccessorNode::precedence):
        (KJS::ArgumentListNode::):
        (KJS::ArgumentsNode::):
        (KJS::NewExprNode::):
        (KJS::NewExprNode::precedence):
        (KJS::FunctionCallValueNode::):
        (KJS::FunctionCallValueNode::precedence):
        (KJS::FunctionCallResolveNode::):
        (KJS::FunctionCallBracketNode::):
        (KJS::FunctionCallBracketNode::precedence):
        (KJS::FunctionCallDotNode::):
        (KJS::FunctionCallDotNode::precedence):
        (KJS::PrePostResolveNode::):
        (KJS::PostfixBracketNode::):
        (KJS::PostfixBracketNode::precedence):
        (KJS::PostIncBracketNode::):
        (KJS::PostIncBracketNode::isIncrement):
        (KJS::PostDecBracketNode::):
        (KJS::PostDecBracketNode::isIncrement):
        (KJS::PostfixDotNode::):
        (KJS::PostfixDotNode::precedence):
        (KJS::PostIncDotNode::):
        (KJS::PostIncDotNode::isIncrement):
        (KJS::PostDecDotNode::):
        (KJS::PostDecDotNode::isIncrement):
        (KJS::PostfixErrorNode::):
        (KJS::PostfixErrorNode::precedence):
        (KJS::DeleteResolveNode::):
        (KJS::DeleteBracketNode::):
        (KJS::DeleteBracketNode::precedence):
        (KJS::DeleteDotNode::):
        (KJS::DeleteDotNode::precedence):
        (KJS::DeleteValueNode::):
        (KJS::DeleteValueNode::precedence):
        (KJS::VoidNode::):
        (KJS::VoidNode::precedence):
        (KJS::TypeOfResolveNode::):
        (KJS::TypeOfValueNode::):
        (KJS::PrefixBracketNode::):
        (KJS::PrefixBracketNode::precedence):
        (KJS::PreIncBracketNode::):
        (KJS::PreIncBracketNode::isIncrement):
        (KJS::PreDecBracketNode::):
        (KJS::PreDecBracketNode::isIncrement):
        (KJS::PrefixDotNode::):
        (KJS::PrefixDotNode::precedence):
        (KJS::PreIncDotNode::):
        (KJS::PreIncDotNode::isIncrement):
        (KJS::PreDecDotNode::):
        (KJS::PreDecDotNode::isIncrement):
        (KJS::PrefixErrorNode::):
        (KJS::PrefixErrorNode::precedence):
        (KJS::UnaryPlusNode::):
        (KJS::UnaryPlusNode::precedence):
        (KJS::NegateNode::):
        (KJS::NegateNode::precedence):
        (KJS::BitwiseNotNode::):
        (KJS::BitwiseNotNode::precedence):
        (KJS::LogicalNotNode::):
        (KJS::LogicalNotNode::precedence):
        (KJS::AddNode::):
        (KJS::AddNode::precedence):
        (KJS::LeftShiftNode::):
        (KJS::LeftShiftNode::precedence):
        (KJS::RightShiftNode::):
        (KJS::RightShiftNode::precedence):
        (KJS::UnsignedRightShiftNode::):
        (KJS::UnsignedRightShiftNode::precedence):
        (KJS::LessNode::):
        (KJS::LessNode::precedence):
        (KJS::GreaterNode::):
        (KJS::GreaterNode::precedence):
        (KJS::LessEqNode::):
        (KJS::LessEqNode::precedence):
        (KJS::GreaterEqNode::):
        (KJS::GreaterEqNode::precedence):
        (KJS::InstanceOfNode::):
        (KJS::InstanceOfNode::precedence):
        (KJS::InNode::):
        (KJS::InNode::precedence):
        (KJS::EqualNode::):
        (KJS::EqualNode::precedence):
        (KJS::NotEqualNode::):
        (KJS::NotEqualNode::precedence):
        (KJS::StrictEqualNode::):
        (KJS::StrictEqualNode::precedence):
        (KJS::NotStrictEqualNode::):
        (KJS::NotStrictEqualNode::precedence):
        (KJS::BitAndNode::):
        (KJS::BitAndNode::precedence):
        (KJS::BitOrNode::):
        (KJS::BitOrNode::precedence):
        (KJS::BitXOrNode::):
        (KJS::BitXOrNode::precedence):
        (KJS::LogicalAndNode::):
        (KJS::LogicalAndNode::precedence):
        (KJS::LogicalOrNode::):
        (KJS::LogicalOrNode::precedence):
        (KJS::ConditionalNode::):
        (KJS::ConditionalNode::precedence):
        (KJS::ReadModifyResolveNode::):
        (KJS::ReadModifyResolveNode::precedence):
        (KJS::AssignResolveNode::):
        (KJS::AssignResolveNode::precedence):
        (KJS::ReadModifyBracketNode::):
        (KJS::ReadModifyBracketNode::precedence):
        (KJS::AssignBracketNode::):
        (KJS::AssignBracketNode::precedence):
        (KJS::AssignDotNode::):
        (KJS::AssignDotNode::precedence):
        (KJS::ReadModifyDotNode::):
        (KJS::ReadModifyDotNode::precedence):
        (KJS::AssignErrorNode::):
        (KJS::AssignErrorNode::precedence):
        (KJS::CommaNode::):
        (KJS::CommaNode::precedence):
        (KJS::AssignExprNode::):
        (KJS::AssignExprNode::precedence):
        (KJS::ExprStatementNode::):
        (KJS::IfNode::):
        (KJS::DoWhileNode::):
        (KJS::WhileNode::):
        (KJS::ReturnNode::):
        (KJS::WithNode::):
        (KJS::ThrowNode::):
        (KJS::ParameterNode::):
        (KJS::CaseClauseNode::):
        (KJS::CaseClauseNode::precedence):
        (KJS::ClauseListNode::):
        (KJS::SwitchNode::):

2007-11-08  Oliver Hunt  <oliver@apple.com>

        Reviewed by Sam.

        Add a fast path for bitwise-and of two immediate numbers for a 0.7% improvement in SunSpider (4% bitop improvement).

        This only improves bitwise-and performance, as the additional logic required 
        for similar code paths on or, xor, and shifting requires additional operations
        and branches that negate (and in certain cases, regress) any advantage we might
        otherwise receive.

        This improves performance on all bitop tests, the cryptography tests, as well as 
        the string-base64 and string-unpack-code tests.  No significant degradation on 
        any other tests.

        * kjs/JSImmediate.h:
        (KJS::JSImmediate::areBothImmediateNumbers):
        (KJS::JSImmediate::andImmediateNumbers):
        * kjs/nodes.cpp:
        (KJS::BitAndNode::evaluate):
        * kjs/value.h:
        (KJS::jsNumberFromAnd):

2007-11-08  Adam Roben  <aroben@apple.com>

        Stop using KJS inside of MathExtras.h

        Reviewed by Darin.

        * wtf/MathExtras.h: Removed an unused header, and a now-unused
        forward-declaration.
        (wtf_atan2): Use std::numeric_limits intead of KJS.

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

        Windows build fix.

        * kjs/date_object.cpp:
        (KJS::DateProtoFuncToLocaleString::callAsFunction): Fix unused arg warning.
        (KJS::DateProtoFuncToLocaleDateString::callAsFunction): ditto
        (KJS::DateProtoFuncToLocaleTimeString::callAsFunction): ditto

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

        Gtk build fix.

        * kjs/lookup.h: Add missing include.

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

        Reviewed by Darin.

        Convert JavaScript internal function objects to use one class per
        function.  This avoids a switch statement inside what used to be
        the shared function classes and will allow Shark to better analyze
        the code.

        To make this switch, the value property of the HashEntry was changed
        to a union of an intptr_t (which is used to continue handle valueGetters)
        and function pointer which points to a static constructor for the
        individual new function objects.

        SunSpider claims this is a 1.0% speedup.

        * kjs/array_object.cpp:
        (KJS::ArrayPrototype::getOwnPropertySlot):
        (KJS::getProperty):
        (KJS::ArrayProtoFuncToString::callAsFunction):
        (KJS::ArrayProtoFuncToLocaleString::callAsFunction):
        (KJS::ArrayProtoFuncJoin::callAsFunction):
        (KJS::ArrayProtoFuncConcat::callAsFunction):
        (KJS::ArrayProtoFuncPop::callAsFunction):
        (KJS::ArrayProtoFuncPush::callAsFunction):
        (KJS::ArrayProtoFuncReverse::callAsFunction):
        (KJS::ArrayProtoFuncShift::callAsFunction):
        (KJS::ArrayProtoFuncSlice::callAsFunction):
        (KJS::ArrayProtoFuncSort::callAsFunction):
        (KJS::ArrayProtoFuncSplice::callAsFunction):
        (KJS::ArrayProtoFuncUnShift::callAsFunction):
        (KJS::ArrayProtoFuncFilter::callAsFunction):
        (KJS::ArrayProtoFuncMap::callAsFunction):
        (KJS::ArrayProtoFuncEvery::callAsFunction):
        (KJS::ArrayProtoFuncForEach::callAsFunction):
        (KJS::ArrayProtoFuncSome::callAsFunction):
        (KJS::ArrayProtoFuncIndexOf::callAsFunction):
        (KJS::ArrayProtoFuncLastIndexOf::callAsFunction):
        * kjs/array_object.h:
        (KJS::ArrayPrototype::classInfo):
        * kjs/create_hash_table:
        * kjs/date_object.cpp:
        (KJS::DatePrototype::getOwnPropertySlot):
        (KJS::DateProtoFuncToString::callAsFunction):
        (KJS::DateProtoFuncToUTCString::callAsFunction):
        (KJS::DateProtoFuncToDateString::callAsFunction):
        (KJS::DateProtoFuncToTimeString::callAsFunction):
        (KJS::DateProtoFuncToLocaleString::callAsFunction):
        (KJS::DateProtoFuncToLocaleDateString::callAsFunction):
        (KJS::DateProtoFuncToLocaleTimeString::callAsFunction):
        (KJS::DateProtoFuncValueOf::callAsFunction):
        (KJS::DateProtoFuncGetTime::callAsFunction):
        (KJS::DateProtoFuncGetFullYear::callAsFunction):
        (KJS::DateProtoFuncGetUTCFullYear::callAsFunction):
        (KJS::DateProtoFuncToGMTString::callAsFunction):
        (KJS::DateProtoFuncGetMonth::callAsFunction):
        (KJS::DateProtoFuncGetUTCMonth::callAsFunction):
        (KJS::DateProtoFuncGetDate::callAsFunction):
        (KJS::DateProtoFuncGetUTCDate::callAsFunction):
        (KJS::DateProtoFuncGetDay::callAsFunction):
        (KJS::DateProtoFuncGetUTCDay::callAsFunction):
        (KJS::DateProtoFuncGetHours::callAsFunction):
        (KJS::DateProtoFuncGetUTCHours::callAsFunction):
        (KJS::DateProtoFuncGetMinutes::callAsFunction):
        (KJS::DateProtoFuncGetUTCMinutes::callAsFunction):
        (KJS::DateProtoFuncGetSeconds::callAsFunction):
        (KJS::DateProtoFuncGetUTCSeconds::callAsFunction):
        (KJS::DateProtoFuncGetMilliSeconds::callAsFunction):
        (KJS::DateProtoFuncGetUTCMilliseconds::callAsFunction):
        (KJS::DateProtoFuncGetTimezoneOffset::callAsFunction):
        (KJS::DateProtoFuncSetTime::callAsFunction):
        (KJS::DateProtoFuncSetMilliSeconds::callAsFunction):
        (KJS::DateProtoFuncSetUTCMilliseconds::callAsFunction):
        (KJS::DateProtoFuncSetSeconds::callAsFunction):
        (KJS::DateProtoFuncSetUTCSeconds::callAsFunction):
        (KJS::DateProtoFuncSetMinutes::callAsFunction):
        (KJS::DateProtoFuncSetUTCMinutes::callAsFunction):
        (KJS::DateProtoFuncSetHours::callAsFunction):
        (KJS::DateProtoFuncSetUTCHours::callAsFunction):
        (KJS::DateProtoFuncSetDate::callAsFunction):
        (KJS::DateProtoFuncSetUTCDate::callAsFunction):
        (KJS::DateProtoFuncSetMonth::callAsFunction):
        (KJS::DateProtoFuncSetUTCMonth::callAsFunction):
        (KJS::DateProtoFuncSetFullYear::callAsFunction):
        (KJS::DateProtoFuncSetUTCFullYear::callAsFunction):
        (KJS::DateProtoFuncSetYear::callAsFunction):
        (KJS::DateProtoFuncGetYear::callAsFunction):
        * kjs/date_object.h:
        * kjs/lookup.cpp:
        (KJS::Lookup::find):
        * kjs/lookup.h:
        (KJS::HashEntry::):
        (KJS::staticFunctionGetter):
        (KJS::staticValueGetter):
        (KJS::getStaticPropertySlot):
        (KJS::getStaticFunctionSlot):
        (KJS::lookupPut):
        * kjs/math_object.cpp:
        (KJS::MathObjectImp::getOwnPropertySlot):
        (KJS::MathProtoFuncAbs::callAsFunction):
        (KJS::MathProtoFuncACos::callAsFunction):
        (KJS::MathProtoFuncASin::callAsFunction):
        (KJS::MathProtoFuncATan::callAsFunction):
        (KJS::MathProtoFuncATan2::callAsFunction):
        (KJS::MathProtoFuncCeil::callAsFunction):
        (KJS::MathProtoFuncCos::callAsFunction):
        (KJS::MathProtoFuncExp::callAsFunction):
        (KJS::MathProtoFuncFloor::callAsFunction):
        (KJS::MathProtoFuncLog::callAsFunction):
        (KJS::MathProtoFuncMax::callAsFunction):
        (KJS::MathProtoFuncMin::callAsFunction):
        (KJS::MathProtoFuncPow::callAsFunction):
        (KJS::MathProtoFuncRandom::callAsFunction):
        (KJS::MathProtoFuncRound::callAsFunction):
        (KJS::MathProtoFuncSin::callAsFunction):
        (KJS::MathProtoFuncSqrt::callAsFunction):
        (KJS::MathProtoFuncTan::callAsFunction):
        * kjs/math_object.h:
        (KJS::MathObjectImp::classInfo):
        (KJS::MathObjectImp::):
        * kjs/string_object.cpp:
        (KJS::StringPrototype::getOwnPropertySlot):
        (KJS::StringProtoFuncToString::callAsFunction):
        (KJS::StringProtoFuncValueOf::callAsFunction):
        (KJS::StringProtoFuncCharAt::callAsFunction):
        (KJS::StringProtoFuncCharCodeAt::callAsFunction):
        (KJS::StringProtoFuncConcat::callAsFunction):
        (KJS::StringProtoFuncIndexOf::callAsFunction):
        (KJS::StringProtoFuncLastIndexOf::callAsFunction):
        (KJS::StringProtoFuncMatch::callAsFunction):
        (KJS::StringProtoFuncSearch::callAsFunction):
        (KJS::StringProtoFuncReplace::callAsFunction):
        (KJS::StringProtoFuncSlice::callAsFunction):
        (KJS::StringProtoFuncSplit::callAsFunction):
        (KJS::StringProtoFuncSubstr::callAsFunction):
        (KJS::StringProtoFuncSubstring::callAsFunction):
        (KJS::StringProtoFuncToLowerCase::callAsFunction):
        (KJS::StringProtoFuncToUpperCase::callAsFunction):
        (KJS::StringProtoFuncToLocaleLowerCase::callAsFunction):
        (KJS::StringProtoFuncToLocaleUpperCase::callAsFunction):
        (KJS::StringProtoFuncLocaleCompare::callAsFunction):
        (KJS::StringProtoFuncBig::callAsFunction):
        (KJS::StringProtoFuncSmall::callAsFunction):
        (KJS::StringProtoFuncBlink::callAsFunction):
        (KJS::StringProtoFuncBold::callAsFunction):
        (KJS::StringProtoFuncFixed::callAsFunction):
        (KJS::StringProtoFuncItalics::callAsFunction):
        (KJS::StringProtoFuncStrike::callAsFunction):
        (KJS::StringProtoFuncSub::callAsFunction):
        (KJS::StringProtoFuncSup::callAsFunction):
        (KJS::StringProtoFuncFontcolor::callAsFunction):
        (KJS::StringProtoFuncFontsize::callAsFunction):
        (KJS::StringProtoFuncAnchor::callAsFunction):
        (KJS::StringProtoFuncLink::callAsFunction):
        * kjs/string_object.h:

2007-11-08  Adam Roben  <aroben@apple.com>

        Windows build fix

        Reviewed by Sam and Ada.

        * wtf/MathExtras.h: Get rid of a circular #include dependency to fix
        the build.

2007-11-08  Adam Roben  <aroben@apple.com>

        Fix a precedence warning on Windows

        * kjs/JSImmediate.h:
        (KJS::JSImmediate::toBoolean):

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

        Build fix for JavaScriptGlue.

        * wtf/MathExtras.h: Include stdlib.h for srand and RAND_MAX.

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

        - Windows build fix

        * kjs/JSImmediate.h: Include MathExtras.h rather than math.h since this file uses "signbit".

2007-11-08  Oliver Hunt  <oliver@apple.com>

        Reviewed by Darin.

        Replace the use of floats for immediate values with the use of integers for a 4.5% improvement in SunSpider.

        Unfortunately this change results in NaN, +Inf, -Inf, and -0 being heap allocated now, but
        we should now have faster array access, faster immediate to double conversion, and the 
        potential to further improve bitwise operators in future.

        This also removes the need for unions to avoid strict aliasing problems when extracting 
        a value from immediates.

        * kjs/JSImmediate.h:
        (KJS::):
        (KJS::JSImmediate::trueImmediate):
        (KJS::JSImmediate::falseImmediate):
        (KJS::JSImmediate::undefinedImmediate):
        (KJS::JSImmediate::nullImmediate):
        (KJS::JSImmediate::toBoolean):
        * kjs/value.h:
        (KJS::jsNaN):

2007-11-07  Eric Seidel  <eric@webkit.org>

        Reviewed by Darin and Oliver.
        
        Add evaluateToNumber parallel evaluation tree to speed up number operations.
        Make ImmediateNumberNode a subclass of NumberNode.
        Share evaluate logic between evaluate and evaluateToNumber using inline functions
        There is still a lot of improvement to be made here.
        
        SunSpider claims this is a 1.0% speedup overall (nbody 7.9%), base64 slowing 2.0%
        Given the huge win that this prepares us for with simple type inferencing I see the small
        regression in base64 being worth the substantial overall improvement.

        * kjs/grammar.y:
        * kjs/nodes.cpp:
        (KJS::Node::evaluateToNumber):
        (KJS::NumberNode::evaluate):
        (KJS::NumberNode::evaluateToNumber):
        (KJS::StringNode::evaluateToNumber):
        (KJS::LocalVarAccessNode::inlineEvaluate):
        (KJS::LocalVarAccessNode::evaluate):
        (KJS::LocalVarAccessNode::evaluateToNumber):
        (KJS::BracketAccessorNode::inlineEvaluate):
        (KJS::BracketAccessorNode::evaluate):
        (KJS::BracketAccessorNode::evaluateToNumber):
        (KJS::NegateNode::evaluate):
        (KJS::NegateNode::evaluateToNumber):
        (KJS::MultNode::inlineEvaluateToNumber):
        (KJS::MultNode::evaluate):
        (KJS::MultNode::evaluateToNumber):
        (KJS::DivNode::inlineEvaluateToNumber):
        (KJS::DivNode::evaluate):
        (KJS::DivNode::evaluateToNumber):
        (KJS::ModNode::inlineEvaluateToNumber):
        (KJS::ModNode::evaluate):
        (KJS::ModNode::evaluateToNumber):
        (KJS::throwOutOfMemoryErrorToNumber):
        (KJS::addSlowCaseToNumber):
        (KJS::add):
        (KJS::addToNumber):
        (KJS::AddNode::evaluateToNumber):
        (KJS::SubNode::inlineEvaluateToNumber):
        (KJS::SubNode::evaluate):
        (KJS::SubNode::evaluateToNumber):
        (KJS::valueForReadModifyAssignment):
        (KJS::ReadModifyLocalVarNode::evaluate):
        (KJS::ReadModifyResolveNode::evaluate):
        (KJS::ReadModifyDotNode::evaluate):
        (KJS::ReadModifyBracketNode::evaluate):
        * kjs/nodes.h:
        (KJS::Node::):
        (KJS::NumberNode::):
        (KJS::ImmediateNumberNode::):
        (KJS::AddNode::precedence):
        * kjs/nodes2string.cpp:
        (KJS::NumberNode::streamTo):

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

        Reviewed by Eric.

        Fix up initialization after being mangled in r27572, and remove the
        ternary expression as extraCost will always be zero for the numeric
        heap.

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

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

        Gtk build fix.

        * kjs/regexp_object.cpp:

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

        Reviewed by Beth Dakin.
        
        Eliminated a bogus (though compiled-out) branch in the collector.

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

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

        Reviewed by Darin Adler.
        
        Fixed part of http://bugs.webkit.org/show_bug.cgi?id=15861 
        5.8% of string-validate-input.js is spent creating RegExpImps

        Put RegExpImp properties into a static hashtable to avoid a slew of
        PropertyMap churn when creating a RegExpImp.
        
        Factored important bits of regular expression implementation out of
        RegExpImp (the JS object) and into RegExp (the PCRE wrapper class), 
        making RegExp a ref-counted class. (This will help later.)

        Removed PCRE_POSIX support because I didn't quite know how to test it 
        and keep it working with these changes.
        
        1.1% SunSpider speedup. 5.8% speedup on string-validate-input.js.

        * kjs/regexp.h: A few interface changes:
        1. Renamed "subpatterns()" => "numSubpatterns()"
        2. Made flag enumeration private and replaced it with public getters for
        specific flags.
        3. Made RegExp ref-counted so RegExps can be shared by RegExpImps.
        4. Made RegExp take a string of flags instead of an int, eliminating 
        duplicated flag parsing code elsewhere.

        * kjs/regexp_object.cpp:
        (KJS::RegExpProtoFunc::callAsFunction): For RegExp.compile: 
        - Fixed a bug where compile(undefined) would throw an exception. 
        - Removed some now-redundant code.
        - Used RegExp sharing to eliminate an allocation and a bunch of 
        PropertyMap thrash. (Not a big win since compile is a deprecated 
        function. I mainly did this to test the plubming.)

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

        Reviewed by nobody, Qt/Windows build fix.

        JavaScriptCore.pri expects OBJECTS_DIR to be set, so set it in
        testkjs.pro, too, where it's included from.

        * kjs/testkjs.pro:

2007-11-07  Simon Hausmann  <shausman@trolltech.com>

        Reviewed by Lars.

        Fix "nmake clean" for the Qt/Windows build by replacing tmp/ with a variable that ends with the correct type of slash/backslash depending on the choice of compiler/make tool.

        * JavaScriptCore.pri:
        * pcre/pcre.pri:

2007-11-07  Lars Knoll  <lars@trolltech.com>

        Reviewed by Simon.

        fix umemcasecmp
        
        Pretty embarrassing bug. Has the potential to fix quite a few test failures.

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

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

        Reviewed by Eric.        
        
        - only collect when the heap is full, unless we have lots of extra cost garbage
        
        1.1% SunSpider speedup.
        
        This shouldn't hit memory use much since the extra space in those
        blocks hangs around either way.

        * kjs/collector.cpp:
        (KJS::Collector::heapAllocate):
        (KJS::Collector::collect): Fix logic error that reversed the sense of collect's 
        return value.

2007-11-06  Oliver Hunt  <oliver@apple.com>

        Reviewed by Maciej.

        Avoid unnecessarily boxing the result from post inc/decrement for 0.3% gain in sunspider
        
        We now convert the common 'for (...; ...; <var>++) ...' to the semantically identical
        'for (...; ...; ++<var>) ...'.

        * kjs/nodes.cpp:
        (KJS::PostIncResolveNode::optimizeForUnnecessaryResult):
        (KJS::PostIncLocalVarNode::evaluate):
        (KJS::PostIncLocalVarNode::optimizeForUnnecessaryResult):
        (KJS::PostDecResolveNode::optimizeForUnnecessaryResult):
        (KJS::PostDecLocalVarNode::evaluate):
        (KJS::PostDecLocalVarNode::optimizeForUnnecessaryResult):
        * kjs/nodes.h:
        (KJS::PrePostResolveNode::):
        (KJS::PostIncResolveNode::):
        (KJS::PostIncLocalVarNode::):
        (KJS::PostDecResolveNode::):
        (KJS::PostDecLocalVarNode::):
        (KJS::PreIncResolveNode::):
        (KJS::PreDecResolveNode::):
        (KJS::ForNode::ForNode):

2007-11-06  Eric Seidel  <eric@webkit.org>

        Reviewed by darin.

        This fixes a regressed layout test for string + object
        
        SunSpider claims this was an overall 0.3% speedup, although some individual tests were slower.

        * kjs/nodes.cpp:
        (KJS::add): remove erroneous "fast path" for string + *

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

        Reviewed by Eric Seidel.
        
        Added toJSNumber, a fast path for converting a JSValue to a JS number,
        and deployed it in postfix expressions. In the fast case this 
        eliminates a call to jsNumber.
        
        0.4% speedup on SunSpider.

        * ChangeLog:
        * kjs/nodes.cpp:
        (KJS::PostIncResolveNode::evaluate):
        (KJS::PostIncLocalVarNode::evaluate):
        (KJS::PostDecResolveNode::evaluate):
        (KJS::PostDecLocalVarNode::evaluate):
        (KJS::PostIncBracketNode::evaluate):
        (KJS::PostDecBracketNode::evaluate):
        (KJS::PostIncDotNode::evaluate):
        (KJS::PostDecDotNode::evaluate):
        (KJS::UnaryPlusNode::evaluate):
        * kjs/value.h:
        (KJS::JSValue::toJSNumber):

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

        Reviewed by Maciej.

        - http://bugs.webkit.org/show_bug.cgi?id=15846
          REGRESSION (r27387): Memory corruption when running fast/js/kde/delete.html

        There was a mistake in the algorithm used to find an empty slot in the property
        map entries vector; when we were putting in a new property value and not overwriting
        an existing deleted sentinel, we would enlarge the entries vector, but would not
        overwrite the stale data that's in the new part. It was easy to pin this down by
        turning on property map consistency checks -- I never would have landed with this
        bug if I had run the regression tests once with consistency checks on!

        * kjs/property_map.cpp: (KJS::PropertyMap::put): Changed logic for the case where
        foundDeletedElement is false to always use the item at the end of the entries vector.
        Also allowed me to merge with the logic for the "no deleted sentinels at all" case.

2007-11-06  Oliver Hunt  <oliver@apple.com>

        RS=Darin.

        Fix previous patch to use a 3 bit shift, a 16 bit shift causes a regression in sunspider.

        * kjs/nodes.cpp:
        (KJS::add):

2007-11-06  Oliver Hunt  <oliver@apple.com>

        Reviewed by Darin.

        Replace boolean comparisons in AddNode with mask
        comparisons for a 0.2% improvement in sunspider.

        * JavaScriptCore.xcodeproj/project.pbxproj:
        * kjs/nodes.cpp:
        (KJS::add):

2007-11-06  Eric Seidel  <eric@webkit.org>

        Reviewed by darin.
        
        SunSpider claims this is a 1.1% speedup.

        * kjs/nodes.cpp:
        (KJS::throwOutOfMemoryError): Added, non inline.
        (KJS::addSlowCase): renamed from add(), non inline.
        (KJS::add): add fast path for String + String, Number + Number and String + *

2007-11-06  Eric Seidel  <eric@webkit.org>

        Reviewed by mjs.
        
        Avoid more UString creation.
        
        SunSpider claims this is a 0.4% speedup.

        * kjs/regexp_object.cpp:
        (KJS::RegExpObjectImp::construct): use UString::find(UChar)

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

        Mac build fix.

        * kjs/array_object.cpp:
        (KJS::ArrayProtoFunc::callAsFunction):

2007-11-05  Adam Roben  <aroben@apple.com>

        Windows build fix

        * kjs/list.h:

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

        Build fix.  Add missing #include.

        * kjs/operations.cpp:

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

        Reviewed by mjs.
        
        Remove another call to toString(exec)
        
        SunSpider claims this is a 0.5% speedup.

        * kjs/operations.cpp:
        (KJS::equal): remove another toString

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

        * kjs/operations.cpp:
        (KJS::equal): correct broken change.

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

        Reviewed by mjs.

        Remove one more call to toString(exec).
        
        SunSpider claims this is a 0.7% speedup.

        * kjs/operations.cpp:
        (KJS::equal): remove a call to toString()

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

        Gtk build fix.

        * pcre/pcre.pri:

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

        Gtk build fix.

        * kjs/list.cpp:

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

        Touched a file to test my new HTTP access.

        * kjs/scope_chain.cpp:

2007-11-05  Alp Toker  <alp@atoker.com>

        Unreviewed build fix for qmake-based ports.

        Someone with a better understanding of qmake still needs to sort out
        the INCLUDEPATH/DEPENDPATH mess.

        * JavaScriptCore.pri:

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

        Reviewed by Darin Adler.
        
        http://bugs.webkit.org/show_bug.cgi?id=15835

        Switched List implementation from a custom heap allocator to an inline
        Vector, for a disappointing .5% SunSpider speedup.
        
        Also renamed List::slice to List::getSlice because "get" is the 
        conventional prefix for functions returning a value through an out 
        parameter.

        * kjs/array_object.cpp:
        (KJS::ArrayProtoFunc::callAsFunction): Removed some redundant function
        calls and memory accesses.

        * kjs/bool_object.cpp:
        (BooleanObjectImp::construct): Removed questionable use of iterator.

        * kjs/list.cpp:
        * kjs/list.h: New List class, implemented in terms of Vector. Two 
        interesting differences:
            1. The inline capacity is 8, not 5. Many of the Lists constructed 
            during a SunSpider run are larger than 5; almost none are larger
            than 8.

            2. The growth factor is 4, not 2. Since we can guarantee that Lists
            aren't long-lived, we can grow them more aggressively, to avoid
            excessive copying.

        * kjs/regexp_object.cpp:
        (RegExpObjectImp::construct): Removed redundant function calls.

        * kjs/string_object.cpp:
        (KJS::StringObjectImp::construct): Removed questionable use of iterator.

        * wtf/Vector.h:
        (WTF::::uncheckedAppend): Added a fast, unchecked version of append.

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

        Reviewed by Alp Toker.

        Add DEPENDPATH to JavaScriptCore and pcre to help qmake with dependencies.

        * JavaScriptCore.pri:
        * pcre/pcre.pri:

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

        Reviewed by Maciej.

        - http://bugs.webkit.org/show_bug.cgi?id=15826
          optimize opcode loop and case insensitive ASCII compares for a 30% speedup

        SunSpider says it's 2.6% faster overall, 32.5% in the regular expression tests.

        * pcre/pcre_internal.h: Added OP_ASCII_CHAR and OP_ASCII_LETTER_NC.

        * pcre/pcre_compile.c:
        (find_fixedlength): Added cases for OP_ASCII_CHAR and OP_ASCII_LETTER_NC. Also
        added OP_NOT since there was no reason it should not be in here.
        (could_be_empty_branch): Ditto.
        (compile_branch): Streamlined all the single-character cases; there was a bit of
        duplicate code. Added cases for OP_ASCII_CHAR and OP_ASCII_LETTER_NC as needed.
        But in particular, compile to those opcodes when the single character match is
        ASCII.
        (find_firstassertedchar): Added cases for OP_ASCII_CHAR and OP_ASCII_LETTER_NC.

        * pcre/pcre_exec.c: (match): Removed the "min", "minimize", and "op" fields from
        the matchframe, after I discovered that none of them needed to be saved and restored
        across recursive match calls. Also eliminated the ignored result field from the
        matchframe, since I discovered that rrc ("recursive result code") was already the
        exact same thing. Moved the handling of opcodes higher than OP_BRA into the default
        statement of the switch instead of doing them before the switch. This removes a
        branch from each iteration of the opcode interpreter, just as removal of "op"
        removed at least one store from each iteration. Last, but not least, add the
        OP_ASCII_CHAR and OP_ASCII_LETTER_NC functions. Neither can ever match a
        surrogate pair and the letter case can be handled efficiently.

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

        * pcre/pcre_exec.c: (match): Try to fix the Windows build by removing unreachable code.

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

        - fix non-Mac builds; remove some more unused PCRE stuff

        * pcre/pcre_compile.c:
        (compile_branch): Removed branch chain and some unused ESC values.
        (compile_regex): Ditto.
        (jsRegExpCompile): Ditto.
        * pcre/pcre_exec.c:
        (match): Removed unused branch targets. Don't use macros any more.
        (jsRegExpExecute): More of the same.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Update for removed files.
        * JavaScriptCore.xcodeproj/project.pbxproj: Ditto.
        * pcre/pcre.pri: Ditto.

        * pcre/MERGING: Removed.
        * pcre/pcre_fullinfo.c: Removed.
        * pcre/pcre_get.c: Removed.
        * pcre/pcre_internal.h:
        * pcre/ucp.h: Removed.

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

        Reviewed by Maciej.

        - http://bugs.webkit.org/show_bug.cgi?id=15821
          remove unused PCRE features for speed

        A first step toward removing the PCRE features we don't use.
        This gives a 0.8% speedup on SunSpider, and a 6.5% speedup on
        the SunSpider regular expression test.

        Replaced the public interface with one that doesn't use the
        name PCRE. Removed code we don't need for JavaScript and various
        configurations we don't use. This is in preparation for still
        more changes in the future. We'll probably switch to C++ and
        make some even more significant changes to the regexp engine
        to get some additional speed.

        There's probably additional unused stuff that I haven't
        deleted yet.

        This does mean that our PCRE is now a fork, but I think that's
        not really a big deal.

        * JavaScriptCore.exp: Remove the 5 old entry points and add
        the 3 new entry points for WebCore's direct use of the regular
        expression engine.

        * kjs/config.h: Remove the USE(PCRE16) define. I decided to flip
        its sense and now there's a USE(POSIX_REGEX) instead, which should
        probably not be set by anyone. Maybe later we'll just get rid of it
        altogether.

        * kjs/regexp.h:
        * kjs/regexp.cpp:
        (KJS::RegExp::RegExp): Switch to new jsRegExp function names and
        defines. Cut down on the number of functions used.
        (KJS::RegExp::~RegExp): Ditto.
        (KJS::RegExp::match): Ditto.

        * pcre/dftables.c: (main): Get rid of ctype_letter and ctype_meta,
        which are unused.

        * pcre/pcre-config.h: Get rid of EBCIDIC, PCRE_DATA_SCOPE, const,
        size_t, HAVE_STRERROR, HAVE_MEMMOVE, HAVE_BCOPY, NEWLINE,
        POSIX_MALLOC_THRESHOLD, NO_RECURSE, SUPPORT_UCP, SUPPORT_UTF8,
        and JAVASCRIPT. These are all no longer configurable in our copy
        of the library.

        * pcre/pcre.h: Remove the macro-based kjs prefix hack, the PCRE
        version macros, PCRE_UTF16, the code to set up PCRE_DATA_SCOPE,
        the include of <stdlib.h>, and most of the constants and
        functions defined in this header. Changed the naming scheme to
        use a JSRegExp prefix rather than a pcre prefix. In the future,
        we'll probably change this to be a C++ header.

        * pcre/pcre_compile.c: Removed all unused code branches,
        including many whole functions and various byte codes.
        Kept changes outside of removal to a minimum.
        (check_escape):
        (first_significant_code):
        (find_fixedlength):
        (find_recurse):
        (could_be_empty_branch):
        (compile_branch):
        (compile_regex):
        (is_anchored):
        (is_startline):
        (find_firstassertedchar):
        (jsRegExpCompile): Renamed from pcre_compile2 and changed the
        parameters around a bit.
        (jsRegExpFree): Added.

        * pcre/pcre_exec.c: Removed many unused opcodes and variables.
        Also started tearing down the NO_RECURSE mechanism since it's
        now the default. In some cases there were things in the explicit
        frame that could be turned into plain old local variables and
        other small like optimizations.
        (pchars):
        (match_ref):
        (match): Changed parameters quite a bit since it's now not used
        recursively.
        (jsRegExpExecute): Renamed from pcre_exec.

        * pcre/pcre_internal.h: Get rid of PCRE_DEFINITION, PCRE_SPTR,
        PCRE_IMS, PCRE_ICHANGED, PCRE_NOPARTIAL, PCRE_STUDY_MAPPED,
        PUBLIC_OPTIONS, PUBLIC_EXEC_OPTIONS, PUBLIC_DFA_EXEC_OPTIONS,
        PUBLIC_STUDY_OPTIONS, MAGIC_NUMBER, 16 of the opcodes,
        _pcre_utt, _pcre_utt_size, _pcre_try_flipped, _pcre_ucp_findprop,
        and _pcre_valid_utf8. Also moved pcre_malloc and pcre_free here.

        * pcre/pcre_maketables.c: Changed to only compile in dftables.
        Also got rid of many of the tables that we don't use.

        * pcre/pcre_tables.c: Removed the unused Unicode property tables.

        * pcre/pcre_ucp_searchfuncs.c: Removed everything except for
        _pcre_ucp_othercase.

        * pcre/pcre_xclass.c: (_pcre_xclass): Removed uneeded support
        for classes based on Unicode properties.

        * wtf/FastMallocPCRE.cpp: Removed unused bits. It would be good
        to eliminate this completely, but we need the regular expression
        code to be C++ first.

        * pcre/pcre_fullinfo.c:
        * pcre/pcre_get.c:
        * pcre/ucp.h:
        Files that are no longer needed. I didn't remove them with this
        check-in, because I didn't want to modify all the project files.

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

        Reviewed by Sam.
        
        - remove NaN check from JSImmediate::fromDouble for 0.5% SunSpider speedup

        It turns out that doing this check costs more than it saves.
        
        * kjs/JSImmediate.h:
        (KJS::JSImmediate::fromDouble):

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

        Reviewed by Oliver.

        Remove dummy variable from ClassInfo reducing the size of the struct by 1 word.
        The variable had been kept around for binary compatibility, but since nothing
        else is there is no point in continuing to keep it around.

        * API/JSCallbackConstructor.cpp:
        (KJS::):
        * API/JSCallbackFunction.cpp:
        (KJS::):
        * API/JSCallbackObject.cpp:
        (KJS::):
        * bindings/objc/objc_runtime.mm:
        * bindings/runtime_array.cpp:
        * bindings/runtime_object.cpp:
        * kjs/array_instance.cpp:
        (KJS::):
        * kjs/array_object.cpp:
        (KJS::):
        * kjs/bool_object.cpp:
        * kjs/date_object.cpp:
        (KJS::):
        * kjs/error_object.cpp:
        * kjs/function.cpp:
        (KJS::):
        * kjs/internal.cpp:
        (KJS::):
        * kjs/lookup.h:
        * kjs/math_object.cpp:
        * kjs/number_object.cpp:
        * kjs/object.h:
        * kjs/regexp_object.cpp:
        * kjs/string_object.cpp:
        (KJS::):

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

        - Updated testkjs results to make the build bots green until we
        can fix the tests that are failing.  The new failures are in DST.

        * tests/mozilla/expected.html:

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

        Reviewed by Adam.
        
        - don't print the var twice for ForInNodes with a var declaration

        * kjs/nodes2string.cpp:
        (KJS::ForInNode::streamTo):

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

        * pcre/pcre_compile.c: (check_escape): Windows build fix. Get rid of
        C-incompatible declaration.

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

        Gtk build fix.

        * kjs/nodes.cpp:  Add missing include.

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

        Reviewed by Maciej.

        - fix http://bugs.webkit.org/show_bug.cgi?id=15814
          <rdar://problem/5536644> fast/js/kde/encode_decode_uri.html fails

        These changes cause us to match the JavaScript specification and pass the
        fast/js/kde/encode_decode_uri.html test.

        * kjs/function.cpp: (KJS::encode): Call the UTF-8 string conversion in its
        new strict mode, throwing an exception if there are malformed UTF-16 surrogate
        pairs in the text.

        * kjs/ustring.h: Added a strict version of the UTF-8 string conversion.
        * kjs/ustring.cpp:
        (KJS::decodeUTF8Sequence): Removed code to disallow U+FFFE and U+FFFF; while
        those might be illegal in some sense, they aren't supposed to get any special
        handling in the place where this function is currently used.
        (KJS::UString::UTF8String): Added the strictness.

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

        Reviewed by Maciej.

        - http://bugs.webkit.org/show_bug.cgi?id=15812
          some JavaScript tests (from the Mozilla test suite) are failing

        Two or three fixes get 7 more of the Mozilla tests passing.
        This gets us down from 61 failing tests to 54.

        * kjs/interpreter.h: (KJS::Interpreter::builtinRegExp):
        Made this inline and gave it a more specific type. Some day we should
        probably do that for all of these -- might even get a bit of a speed
        boost from it.
        * kjs/interpreter.cpp: Removed Interpreter::builtinRegExp now that it's
        inline in the header.

        * kjs/regexp_object.h:
        * kjs/regexp_object.cpp:
        (KJS::RegExpProtoFunc::callAsFunction): Moved test and exec out of the
        switch statement into the RegExpImp object, so they can be shared with
        RegExpImp::callAsFunction.
        (KJS::RegExpImp::match): Added. Common code used by both test and exec.
        (KJS::RegExpImp::test): Added.
        (KJS::RegExpImp::exec): Added.
        (KJS::RegExpImp::implementsCall): Added.
        (KJS::RegExpImp::callAsFunction): Added.
        (KJS::RegExpObjectImpPrivate::RegExpObjectImpPrivate): Initialize
        lastInput to null rather than empty string -- we take advantage of the
        difference in RegExpImp::match.
        (KJS::RegExpObjectImp::input): Added. No reason to go through hash tables
        just to get at a field like this.

        * pcre/pcre_compile.c: (check_escape): Changed the \u handling to match
        the JavaScript specification. If there are not 4 hex digits after the \u,
        then it's processed as if it wasn't an escape sequence at all.

        * pcre/pcre_internal.h: Added IS_NEWLINE, with the appropriate definition
        for JavaScript (4 specific Unicode values).
        * pcre/pcre_exec.c:
        (match): Changed all call sites to use IS_NEWLINE.
        (pcre_exec): Ditto.

        * tests/mozilla/expected.html: Updated to expect 7 more successful tests.

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

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

        Rubber-stamped by Darin.

        * JavaScriptCore.xcodeproj/project.pbxproj:

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

        Reviewed by Oliver.
        
        - remove VarDeclListNode and simplify VarDeclNode evaluation for 0.4% SunSpider speedup

        * kjs/grammar.y:
        * kjs/nodes.cpp:
        (KJS::VarDeclNode::optimizeVariableAccess):
        (KJS::VarDeclNode::getDeclarations):
        (KJS::VarDeclNode::handleSlowCase):
        (KJS::VarDeclNode::evaluateSingle):
        (KJS::VarDeclNode::evaluate):
        (KJS::VarStatementNode::execute):
        * kjs/nodes.h:
        (KJS::VarDeclNode::):
        (KJS::VarStatementNode::):
        * kjs/nodes2string.cpp:
        (KJS::VarDeclNode::streamTo):

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

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=15800
        REGRESSION (r27303): RegExp leaks

        * kjs/regexp_object.h:
        (KJS::RegExpImp::setRegExp):
        (KJS::RegExpImp::regExp):
        (KJS::RegExpImp::classInfo):
        * kjs/regexp_object.cpp:
        (RegExpImp::RegExpImp):
        (RegExpImp::~RegExpImp):
        Renamed reg member variable to m_regExp, changed it to use OwnPtr.

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

        Reviewed by Oliver.
        
        - add SourceElements as a typedef for Vector<RefPtr<StatementNode> >.

        * kjs/grammar.y:
        * kjs/nodes.cpp:
        (KJS::statementListPushFIFO):
        (KJS::statementListGetDeclarations):
        (KJS::statementListInitializeDeclarationStacks):
        (KJS::statementListInitializeVariableAccessStack):
        (KJS::statementListExecute):
        (KJS::BlockNode::BlockNode):
        (KJS::FunctionBodyNode::FunctionBodyNode):
        (KJS::ProgramNode::ProgramNode):
        * kjs/nodes.h:
        (KJS::CaseClauseNode::):

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

        Reviewed by Maciej.

        - http://bugs.webkit.org/show_bug.cgi?id=15791
          change property map data structure for less memory use, better speed

        The property map now has an array of indices and a separate array of
        property map entries. This slightly slows down lookup because of a second
        memory acess, but makes property maps smaller and faster to iterate in
        functions like mark().

        SunSpider says this is 1.2% faster, although it makes the bitwise-end test
        more than 10% slower. To fix that we'll need to optimize global variable lookup.

        * kjs/property_map.cpp:
        (KJS::PropertyMapEntry::PropertyMapEntry):
        (KJS::PropertyMapHashTable::entries):
        (KJS::PropertyMapHashTable::allocationSize):
        (KJS::SavedProperties::SavedProperties):
        (KJS::SavedProperties::~SavedProperties):
        (KJS::PropertyMap::checkConsistency):
        (KJS::PropertyMap::~PropertyMap):
        (KJS::PropertyMap::clear):
        (KJS::PropertyMap::get):
        (KJS::PropertyMap::getLocation):
        (KJS::PropertyMap::put):
        (KJS::PropertyMap::insert):
        (KJS::PropertyMap::createTable):
        (KJS::PropertyMap::rehash):
        (KJS::PropertyMap::remove):
        (KJS::PropertyMap::mark):
        (KJS::comparePropertyMapEntryIndices):
        (KJS::PropertyMap::containsGettersOrSetters):
        (KJS::PropertyMap::getEnumerablePropertyNames):
        (KJS::PropertyMap::save):
        (KJS::PropertyMap::restore):
        * kjs/property_map.h:

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

        Reviewed by Maciej.

        - http://bugs.webkit.org/show_bug.cgi?id=15807
          HashMap needs a take() function that combines get and remove

        * wtf/HashMap.h: Added take function. Simplistic implementation for now,
        but still does only one hash table lookup.

        * kjs/array_instance.cpp: (KJS::ArrayInstance::put): Use take rather than
        a find followed by a remove.

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

        Reviewed by Darin.

        Fix compiler warning "warning: suggest parentheses around && within ||"
        http://bugs.webkit.org/show_bug.cgi?id=15764

        * kjs/value.h: (KJS::JSValue::isNumber): Add parentheses.

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

        Reviewed by Maciej Stachowiak.
        
        In preparation for making List a simple stack-allocated Vector:

        Removed all instances of List copying and/or assignment, and made List 
        inherit from Noncopyable.
        
        Functions that used to return a List by copy now take List& out 
        parameters.
        
        Layout tests and JS tests pass.

        * kjs/list.cpp:
        (KJS::List::slice): Replaced copyTail with a more generic slice 
        alternative. (JavaScriptCore only calls slice(1), but WebCore calls 
        slice(2)).

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

        Reviewed by Maciej Stachowiak.

        Fixed http://bugs.webkit.org/show_bug.cgi?id=15785
        REGRESSION(r27344): Crash on load at finance.yahoo.com
        
        Reverted a small portion of my last check-in. (The speedup and the List 
        removal are still there, though.)
        
        ActivationImp needs to hold a pointer to its function, and mark that 
        pointer (rather than accessing its function through its ExecState, and 
        counting on the active scope to mark its function) because a closure 
        can cause an ActivationImp to outlive its ExecState along with any 
        active scope.

        * kjs/ExecState.cpp:
        (KJS::ExecState::ExecState):
        * kjs/function.cpp:
        (KJS::FunctionImp::~FunctionImp):
        (KJS::ActivationImp::ActivationImp):
        * kjs/function.h:
        (KJS::ActivationImp::ActivationImpPrivate::ActivationImpPrivate):

        Also made HashTable a little more crash-happy in debug builds, so 
        problems like this will show up earlier:
        
        * wtf/HashTable.h:
        (WTF::HashTable::~HashTable):

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

        Reviewed by Adam Roben.
        
        Addressed some of Darin's review comments.
        
        Used perl -p, which is the shorthand while(<>) {}.
        
        Made sure not to suppress bison's output.
        
        Added line to removed bison_out.txt, since this script removes other 
        intermediate files, too.

        * DerivedSources.make:

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

        Reviewed by Oliver Hunt.
        
        Removed List from ActivationImp, in preparation for making all lists
        stack-allocated.
        
        Tests pass.
        
        1.0% speedup on SunSpider, presumably due to reduced List refcount thrash.

        * kjs/ExecState.cpp:
        (KJS::ExecState::ExecState):
        (KJS::ExecState::~ExecState):
        * kjs/function.cpp:
        (KJS::ActivationImp::ActivationImp):
        (KJS::ActivationImp::createArgumentsObject):
        * kjs/function.h:
        (KJS::ActivationImp::ActivationImpPrivate::ActivationImpPrivate):

2007-11-01  Adam Roben  <aroben@apple.com>

        Use jsNumberCell instead of jsNumber when converting double constants to JSValues

        This fixes fast/js/math.html, ecma/Date/15.9.5.10-1.js, and
        ecma/Date/15.9.5.12-1.js, which were suffering from a bug in MSVC.

        It also gets rid of an MSVC warning that we previously had to silence.

        Reviewed by Geoff.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Turn
        back on the "overflow in constant arithmetic" warning.
        * kjs/number_object.cpp:
        (NumberObjectImp::getValueProperty): Use jsNumberCell instead of
        jsNumber.

2007-10-31  Adam Roben  <aroben@apple.com>

        Windows build fix

        * kjs/ExecState.h:

2007-10-31  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Oliver.
        
        - shave some cycles off of local storage access for a 1% SunSpider speedup
        
        Keep the LocalStorage pointer in the ExecState, instead of getting
        it from the ActivationImp all the time.

        * kjs/ExecState.cpp:
        (KJS::ExecState::updateLocalStorage):
        * kjs/ExecState.h:
        (KJS::ExecState::localStorage):
        * kjs/nodes.cpp:
        (KJS::LocalVarAccessNode::evaluate):
        (KJS::LocalVarFunctionCallNode::evaluate):
        (KJS::PostIncLocalVarNode::evaluate):
        (KJS::PostDecLocalVarNode::evaluate):
        (KJS::LocalVarTypeOfNode::evaluate):
        (KJS::PreIncLocalVarNode::evaluate):
        (KJS::PreDecLocalVarNode::evaluate):
        (KJS::ReadModifyLocalVarNode::evaluate):
        (KJS::AssignLocalVarNode::evaluate):
        (KJS::FunctionBodyNode::processDeclarationsForFunctionCode):

2007-10-31  Adam Roben  <aroben@apple.com>

        Fix a crash on launch due to a static initializer race

        We now use fast inline assembler spinlocks which can be statically
        initialized at compile time.

        As a side benefit, this speeds up SunSpider by 0.4%.

        Reviewed by Oliver.

        * wtf/FastMalloc.cpp:
        * wtf/TCSpinLock.h:
        (TCMalloc_SpinLock::Lock):
        (TCMalloc_SpinLock::Unlock):
        (TCMalloc_SlowLock):
        * wtf/TCSystemAlloc.cpp:

2007-10-31  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Sam.

        - Corrected spelling.

        * wtf/HashTraits.h:

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

        Further Gtk build fixage.

        * kjs/regexp_object.cpp:

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

        Gtk build fix.

        * kjs/regexp.h:

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

        Reviewed by Maciej.

        - fix http://bugs.webkit.org/show_bug.cgi?id=15749
          RegExp/RegExpObjectImp cause needless UString creation

        Speeds things up 0.4% according to SunSpider.

        * kjs/config.h: Define USE(PCRE16) instead of HAVE(PCREPOSIX),
        because this library doesn't use the real PCRE -- it uses its
        own PCRE that works on UTF-16.

        * kjs/regexp.h: Removed a few unused functions. Changed the ifdef.
        Use Noncopyable. Change the return value of match.
        * kjs/regexp.cpp:
        (KJS::RegExp::RegExp): Call pcre_compile2, for a slight speed boost.
        (KJS::RegExp::~RegExp): PCRE16 rather than PCREPOSIX.
        (KJS::RegExp::match): Change to return the position as an int and the
        ovector as a OwnArrayPtr<int> for efficiency and clearer storage management.

        * kjs/regexp_object.h: Change performMatch and arrayOfMatches to no longer
        require a result string.
        * kjs/regexp_object.cpp:
        (RegExpProtoFunc::callAsFunction): Update for new signature of performMatch.
        (RegExpObjectImp::performMatch): Change so it doesn't return a string.
        (RegExpObjectImp::arrayOfMatches): Simplify by unifying the handling of
        the main result with the backreferences; now it doesn't need to take
        a result parameter.
        (RegExpObjectImp::getBackref): Minor tweaks.
        (RegExpObjectImp::getLastParen): Ditto.
        (RegExpObjectImp::getLeftContext): Ditto.
        (RegExpObjectImp::getRightContext): Ditto.
        (RegExpObjectImp::getValueProperty): Change LastMatch case to call
        getBackref(0) so we don't need a separate getLastMatch function.

        * kjs/string_object.cpp:
        (KJS::replace): Update to use new performMatch, including merging the
        matched string section with the other substrings.
        (KJS::StringProtoFunc::callAsFunction): Update functions to use the
        new performMatch and match. Also change to use OwnArrayPtr.

2007-10-31  Oliver Hunt  <oliver@apple.com>

        * kjs/nodes.h: include OwnPtr.h

2007-10-31  Oliver Hunt  <oliver@apple.com>

        Reviewed by Maciej.

        Remove SourceCodeElement class and replaced with a Vector for a 0.8% gain on sunspider

        * kjs/grammar.y:
        * kjs/nodes.cpp:
        (KJS::statementListPushFIFO):
        (KJS::statementListGetDeclarations):
        (KJS::statementListInitializeDeclarationStacks):
        (KJS::statementListInitializeVariableAccessStack):
        (KJS::statementListExecute):
        (KJS::BlockNode::optimizeVariableAccess):
        (KJS::BlockNode::BlockNode):
        (KJS::BlockNode::getDeclarations):
        (KJS::BlockNode::execute):
        (KJS::CaseClauseNode::optimizeVariableAccess):
        (KJS::CaseClauseNode::getDeclarations):
        (KJS::CaseClauseNode::evalStatements):
        (KJS::FunctionBodyNode::initializeDeclarationStacks):
        (KJS::FunctionBodyNode::optimizeVariableAccess):
        * kjs/nodes.h:
        * kjs/nodes2string.cpp:
        (KJS::statementListStreamTo):
        (KJS::BlockNode::streamTo):
        (KJS::CaseClauseNode::streamTo):

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

        * kjs/property_map.cpp: Added a missing using directive to fix the build
        for non-Mac ports. Mac worked only because it does the AllInOneFile compile.

2007-10-31  Maciej Stachowiak  <mjs@apple.com>

        * kjs/property_map.cpp: Include HashTable.h the right way to fix the build
        for non-Mac ports.

2007-10-31  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=11001
        WebKit doesn't support RegExp.compile method

        Test: fast/js/regexp-compile.html

        * kjs/regexp_object.cpp:
        (RegExpPrototype::RegExpPrototype):
        (RegExpProtoFunc::callAsFunction):
        * kjs/regexp_object.h:
        (KJS::RegExpProtoFunc::):
        Added RegExp.compile.

        * tests/mozilla/expected.html: js1_2/regexp/compile.js now passes.

2007-10-31  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Oliver.
        
        - get rid of integer divide in PropertyMap and HashTable for 1% SunSpider speedup
        
        Integer divide sucks. Fortunately, a bunch of shifts and XORs
        biased towards the high bits is sufficient to provide a good
        double hash. Besides the SunSpider win, I used the dump statistics
        mode for both to verify that collisions did not increase and that
        the longest collision chain is not any longer.

        * kjs/property_map.cpp:
        (KJS::doubleHash):
        (KJS::PropertyMap::get):
        (KJS::PropertyMap::getLocation):
        (KJS::PropertyMap::put):
        (KJS::PropertyMap::insert):
        (KJS::PropertyMap::remove):
        (KJS::PropertyMap::checkConsistency):
        * wtf/HashTable.h:
        (WTF::doubleHash):
        (WTF::::lookup):
        (WTF::::lookupForWriting):
        (WTF::::fullLookupForWriting):
        (WTF::::add):

2007-10-30  Adam Roben  <aroben@apple.com>

        * kjs/collector.h: Make HeapType public so it can be used for non-member
        things like the HeapConstants struct template. Fixes the build on Windows.

2007-10-30  Adam Roben  <aroben@apple.com>

        Change ALWAYS_INLINE and WTF_PRIVATE_INLINE to use __forceinline on Windows

        Speeds up SunSpider by 0.4%.

        Reviewed by Steve and Maciej.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Disable
        a warning during LTCG in release builds about double -> float
        conversion.
        * wtf/AlwaysInline.h:
        * wtf/FastMalloc.h:

2007-10-30  Adam Roben  <aroben@apple.com>

        Use GetCurrentThreadId instead of pthread_self in FastMalloc

        Speeds up SunSpider by 0.3%.

        Reviewed by Steve.

        * wtf/FastMalloc.cpp:
        (WTF::TCMalloc_ThreadCache::InitTSD):
        (WTF::TCMalloc_ThreadCache::CreateCacheIfNecessary):

2007-10-30  Adam Roben  <aroben@apple.com>

        Switch to a Win32 critical section implementation of spinlocks
        
        Speeds up SunSpider by 0.4%.
        
        Reviewed by Steve.
        
        * wtf/FastMalloc.cpp:
        * wtf/TCSpinLock.h:
        (TCMalloc_SpinLock::TCMalloc_SpinLock):
        (TCMalloc_SpinLock::Init):
        (TCMalloc_SpinLock::Finalize):
        (TCMalloc_SpinLock::Lock):
        (TCMalloc_SpinLock::Unlock):
        * wtf/TCSystemAlloc.cpp:

2007-10-30  Adam Roben  <aroben@apple.com>

        Fix Bug 15586: REGRESSION (r26759-r26785): Windows nightly builds crash with Safari 3 Public Beta

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

        Also fixes: <rdar://5565303> Cannot use regsvr32.exe to register WebKit.dll

        Use Win32 TLS functions instead of __declspec(thread), which breaks
        delay-loading.

        Reviewed by Steve.

        * wtf/FastMalloc.cpp:
        (WTF::getThreadHeap):
        (WTF::TCMalloc_ThreadCache::InitModule):

2007-10-30  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Oliver.
        
        - allocate numbers in half-size cells, for an 0.5% SunSpider speedup
        http://bugs.webkit.org/show_bug.cgi?id=15772
        
        We do this by using a single mark bit per two number cells, and
        tweaking marking.
        
        Besides being an 0.5% win overall, this is a 7.1% win on morph.

        * kjs/collector.cpp:
        (KJS::):
        (KJS::Collector::heapAllocate):
        (KJS::Collector::markStackObjectsConservatively):
        (KJS::Collector::sweep):
        * kjs/collector.h:
        (KJS::SmallCollectorCell::):

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

        Reviewed by Adam Roben, Sam Weinig.
        
        Made conflicts in grammar.y a persistent build failure.

        * DerivedSources.make:

2007-10-30  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Adam and Geoff.

        - Added a new cast so all the casts are in the same place.

        * API/APICast.h:
        (toGlobalRef):

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

        Reviewed by Darin Adler.

        Fixed <rdar://problem/5567504> shift/reduce conflict introduced in r24457
        
        JS tests, including 

            ecma_2/Statements/dowhile-001.js
            ecma_2/Statements/dowhile-002.js
            ecma_2/Statements/dowhile-003.js
            ecma_2/Statements/dowhile-004.js
            ecma_2/Statements/dowhile-005.js
            ecma_2/Statements/dowhile-006.js
            ecma_2/Statements/dowhile-007.js
            js1_2/statements/do_while.js

        and layout tests, including

            do-while-expression-value.html
            do-while-semicolon.html
            do-while-without-semicolon.html
        
        pass.
        
        * kjs/grammar.y: Use the explicit "error" production, as we do with other
        automatic semicolon insertions, to disambiguate "do { } while();" from
        "do { } while()" followed by ";" (the empty statement).

2007-10-29  Oliver Hunt  <oliver@apple.com>

        Reviewed by Maciej.

        Debranching remaining assignment nodes, and miscellaneous cleanup
        
        Split read-modify code paths out of AssignBracketNode and AssignDotNode
        Removed now unnecessary check for write-only assignment in ReadModifyLocalVarNode 
        and ReadModifyResolveNode evaluate methods

        Leads to a 1% gain in SunSpider.

        * kjs/grammar.y:
        * kjs/nodes.cpp:
        (KJS::ReadModifyLocalVarNode::evaluate):
        (KJS::ReadModifyResolveNode::evaluate):
        (KJS::AssignDotNode::evaluate):
        (KJS::ReadModifyDotNode::optimizeVariableAccess):
        (KJS::ReadModifyDotNode::evaluate):
        (KJS::AssignBracketNode::evaluate):
        (KJS::ReadModifyBracketNode::optimizeVariableAccess):
        (KJS::ReadModifyBracketNode::evaluate):
        * kjs/nodes.h:
        (KJS::AssignBracketNode::):
        (KJS::AssignBracketNode::precedence):
        (KJS::AssignDotNode::):
        (KJS::AssignDotNode::precedence):
        * kjs/nodes2string.cpp:
        (KJS::ReadModifyBracketNode::streamTo):
        (KJS::AssignBracketNode::streamTo):
        (KJS::ReadModifyDotNode::streamTo):
        (KJS::AssignDotNode::streamTo):

2007-10-29  Oliver Hunt  <oliver@apple.com>

        Debranching various Node::evaluate implementations
        
        Reviewed by Maciej.
        
        Split the read-modify-write assignment cases out of AssignResolveNode and into ReadModifyResolveNode
        Split the increment and decrement cases for Prefix- and Postfix- ResolveNode, BracketNode, and DotNode
        
        Gains 1.6% on SunSpider

        * JavaScriptCore.xcodeproj/project.pbxproj:
        * kjs/grammar.y:
        * kjs/nodes.cpp:
        (KJS::PostIncResolveNode::optimizeVariableAccess):
        (KJS::PostIncResolveNode::evaluate):
        (KJS::PostIncLocalVarNode::evaluate):
        (KJS::PostDecResolveNode::optimizeVariableAccess):
        (KJS::PostDecResolveNode::evaluate):
        (KJS::PostDecLocalVarNode::evaluate):
        (KJS::PostIncBracketNode::evaluate):
        (KJS::PostDecBracketNode::evaluate):
        (KJS::PostIncDotNode::evaluate):
        (KJS::PostDecDotNode::evaluate):
        (KJS::PreIncResolveNode::optimizeVariableAccess):
        (KJS::PreIncLocalVarNode::evaluate):
        (KJS::PreIncResolveNode::evaluate):
        (KJS::PreDecResolveNode::optimizeVariableAccess):
        (KJS::PreDecLocalVarNode::evaluate):
        (KJS::PreDecResolveNode::evaluate):
        (KJS::PreIncBracketNode::evaluate):
        (KJS::PreDecBracketNode::evaluate):
        (KJS::PreIncDotNode::evaluate):
        (KJS::PreDecDotNode::evaluate):
        (KJS::ReadModifyResolveNode::optimizeVariableAccess):
        (KJS::AssignResolveNode::optimizeVariableAccess):
        (KJS::AssignLocalVarNode::evaluate):
        (KJS::AssignResolveNode::evaluate):
        * kjs/nodes.h:
        (KJS::PostDecResolveNode::):
        (KJS::PostDecResolveNode::precedence):
        (KJS::PostDecLocalVarNode::):
        (KJS::PostfixBracketNode::):
        (KJS::PostfixBracketNode::precedence):
        (KJS::PostIncBracketNode::):
        (KJS::PostIncBracketNode::isIncrement):
        (KJS::PostDecBracketNode::):
        (KJS::PostDecBracketNode::isIncrement):
        (KJS::PostfixDotNode::):
        (KJS::PostfixDotNode::precedence):
        (KJS::PostIncDotNode::):
        (KJS::PostIncDotNode::isIncrement):
        (KJS::PostDecDotNode::):
        (KJS::PreIncResolveNode::):
        (KJS::PreDecResolveNode::):
        (KJS::PreDecResolveNode::precedence):
        (KJS::PreDecLocalVarNode::):
        (KJS::PrefixBracketNode::):
        (KJS::PrefixBracketNode::precedence):
        (KJS::PreIncBracketNode::):
        (KJS::PreIncBracketNode::isIncrement):
        (KJS::PreDecBracketNode::):
        (KJS::PreDecBracketNode::isIncrement):
        (KJS::PrefixDotNode::):
        (KJS::PrefixDotNode::precedence):
        (KJS::PreIncDotNode::):
        (KJS::PreIncDotNode::isIncrement):
        (KJS::PreDecDotNode::):
        (KJS::ReadModifyResolveNode::):
        (KJS::ReadModifyLocalVarNode::):
        (KJS::AssignResolveNode::):
        (KJS::AssignResolveNode::precedence):
        * kjs/nodes2string.cpp:
        (KJS::PostIncResolveNode::streamTo):
        (KJS::PostDecResolveNode::streamTo):
        (KJS::PostfixBracketNode::streamTo):
        (KJS::PostfixDotNode::streamTo):
        (KJS::PreIncResolveNode::streamTo):
        (KJS::PreDecResolveNode::streamTo):
        (KJS::ReadModifyResolveNode::streamTo):
        (KJS::AssignResolveNode::streamTo):

2007-10-29  Maciej Stachowiak  <mjs@apple.com>

        Not reviewed, build fix.
        
        - Include Vector.h in a way that actually works.

        * kjs/LocalStorage.h:

2007-10-29  Maciej Stachowiak  <mjs@apple.com>

        Not reviewed, build fix.
        
        - Install LocalStorage.h as a private header.

        * JavaScriptCore.xcodeproj/project.pbxproj:

2007-10-29  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin.
        
        - Define good VectorTraits for LocalStorage entry for 0.5% speed improvement on SunSpider.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * kjs/LocalStorage.h: Added.
        (KJS::LocalStorageEntry::LocalStorageEntry):
        (WTF::):
        * kjs/function.h:
        * kjs/nodes.cpp:
        (KJS::FunctionBodyNode::processDeclarationsForFunctionCode):

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

        Reviewed by Oliver Hunt.
        
        Some small tweaks that I notice while reviewing Oliver's last patch.
        
        Includes removal of an unnecessary KJS_CHECKEXCEPTIONVALUE.
        
        No change in SunSpider because SunSpider doesn't take the code path that
        would execute the unnecessary KJS_CHECKEXCEPTIONVALUE much.

        * kjs/nodes.cpp:
        (KJS::LocalVarPostfixNode::evaluate):
        (KJS::TypeOfResolveNode::optimizeVariableAccess):
        (KJS::LocalVarTypeOfNode::evaluate):
        (KJS::PrefixResolveNode::optimizeVariableAccess):
        (KJS::LocalVarPrefixNode::evaluate):
        (KJS::AssignResolveNode::optimizeVariableAccess):
        (KJS::LocalVarAssignNode::evaluate):
        * kjs/nodes.h:
        (KJS::LocalVarTypeOfNode::):
        (KJS::PrefixResolveNode::):
        (KJS::LocalVarPrefixNode::):
        (KJS::AssignResolveNode::):
        (KJS::LocalVarAssignNode::):

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

        Reviewed by Maciej.
        
        SunSpider claims this was a 0.7% speedup.

        * kjs/string_object.cpp:
        (KJS::StringProtoFunc::callAsFunction): avoid mallocing a jsString in the common case

2007-10-29  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Mark.
        
        - re-enable asserts for access to empty or deleted keys

        * wtf/HashTable.h:
        (WTF::::lookup):
        (WTF::::lookupForWriting):
        (WTF::::fullLookupForWriting):
        (WTF::::add):

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

        Build fix only, no review.

        * JavaScriptCore.exp: Export symbol for new StringInstance::getOwnPropertySlot

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

        Gtk build fix.  Move struct declarations into nodes.h.

        * kjs/grammar.y:
        * kjs/nodes.h:

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

        Reviewed by darin.
        
        Give StringInstance a getOwnPropertySlot(ExecState, unsigned, PropertySlot) fastpath, just like Arrays.
        Make it a compile time error to use toString(ExecState) on a StringInstance
        
        SunSpider claims this was a 6.6% speedup overall (22% on string-base64)

        * kjs/internal.h:
        (KJS::StringImp::getLength):
        * kjs/string_object.cpp:
        (KJS::StringInstance::lengthGetter):
        (KJS::StringInstance::inlineGetOwnPropertySlot):
        (KJS::StringInstance::getOwnPropertySlot):
        * kjs/string_object.h:

2007-10-28  Oliver Hunt  <oliver@apple.com>

        Reviewed by Darin.

        Add nodes to allow Assignment, TypeOf, and prefix operators to 
        make use of the new optimised local variable look up.

        5% gain on sunspider

        * kjs/nodes.cpp:
        (KJS::TypeOfResolveNode::optimizeVariableAccess):
        (KJS::LocalTypeOfAccessNode::evaluate):
        (KJS::PrefixResolveNode::optimizeVariableAccess):
        (KJS::PrefixLocalAccessNode::evaluate):
        (KJS::AssignResolveNode::optimizeVariableAccess):
        (KJS::AssignLocalAccessNode::evaluate):
        * kjs/nodes.h:
        (KJS::TypeOfResolveNode::):
        (KJS::TypeOfResolveNode::precedence):
        (KJS::LocalTypeOfAccessNode::):
        (KJS::PrefixResolveNode::):
        (KJS::PrefixResolveNode::precedence):
        (KJS::PrefixLocalAccessNode::):
        (KJS::AssignResolveNode::):
        (KJS::AssignLocalAccessNode::):

2007-10-28  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin.
        
        - avoid creating and then breaking circular lists in the parser, instead track head and tail pointers at parse time
        http://bugs.webkit.org/show_bug.cgi?id=15748
        
        Not a significant speedup or slowdown on SunSpider.

        * kjs/Parser.cpp:
        (KJS::clearNewNodes):
        * kjs/Parser.h:
        * kjs/grammar.y:
        * kjs/nodes.cpp:
        (KJS::BlockNode::BlockNode):
        (KJS::CaseBlockNode::CaseBlockNode):
        (KJS::FunctionBodyNode::FunctionBodyNode):
        (KJS::SourceElementsNode::SourceElementsNode):
        (KJS::ProgramNode::ProgramNode):
        * kjs/nodes.h:
        (KJS::ElementNode::):
        (KJS::ArrayNode::):
        (KJS::PropertyListNode::):
        (KJS::ObjectLiteralNode::):
        (KJS::ArgumentListNode::):
        (KJS::ArgumentsNode::):
        (KJS::VarDeclListNode::):
        (KJS::VarStatementNode::):
        (KJS::ForNode::):
        (KJS::ParameterNode::):
        (KJS::FuncExprNode::):
        (KJS::FuncDeclNode::):
        (KJS::SourceElementsNode::):
        (KJS::CaseClauseNode::):
        (KJS::ClauseListNode::):

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

        Disable assertions in a manner that doesn't break the Qt Windows build.

        * wtf/HashTable.h:
        (WTF::::lookup):
        (WTF::::lookupForWriting):
        (WTF::::fullLookupForWriting):

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

        Temporarily disabling some ASSERTs I introduced in my last check-in 
        because of http://bugs.webkit.org/show_bug.cgi?id=15747
        Lots of layout tests fail the !HashTranslator::equal(KeyTraits::emptyValue() ASSERT

        * wtf/HashTable.h:
        (WTF::::lookup):
        (WTF::::lookupForWriting):
        (WTF::::fullLookupForWriting):
        (WTF::::add):

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

        Reviewed by Darin Adler.
        
        Fixed http://bugs.webkit.org/show_bug.cgi?id=15746
        #ifndef ASSERT_DISABLED is no good!
        
        Replaced with #if !ASSERT_DISABLED.

        * wtf/HashTable.h:
        (WTF::::lookup):
        (WTF::::lookupForWriting):
        (WTF::::fullLookupForWriting):
        (WTF::::add):

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

        Reviewed by Darin Adler.
        
        Added FunctionCallResolveNode, PostfixResolveNode, and DeleteResolveNode
        to the AST transfom that replaces slow resolve nodes with fast local 
        variable alternatives.
        
        2.5% speedup on SunSpider.
        
        Also added some missing copyright notices.
        
        * kjs/nodes.cpp:
        (KJS::FunctionCallResolveNode::optimizeVariableAccess):
        (KJS::FunctionCallResolveNode::evaluate):
        (KJS::LocalVarFunctionCallNode::evaluate):
        (KJS::PostfixResolveNode::optimizeVariableAccess):
        (KJS::PostfixResolveNode::evaluate):
        (KJS::LocalVarPostfixNode::evaluate):
        (KJS::DeleteResolveNode::optimizeVariableAccess):
        (KJS::DeleteResolveNode::evaluate):
        (KJS::LocalVarDeleteNode::evaluate):
        * kjs/nodes.h:
        (KJS::FunctionCallResolveNode::):
        (KJS::LocalVarFunctionCallNode::LocalVarFunctionCallNode):
        (KJS::PostfixResolveNode::):
        (KJS::LocalVarPostfixNode::LocalVarPostfixNode):
        (KJS::DeleteResolveNode::):
        (KJS::LocalVarDeleteNode::LocalVarDeleteNode):

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

        Reviewed by darin.
        
        Inline UString::Rep::deref() for a 0.8% improvement in SunSpider
        Add virtual keyword to a few virtual functions previously unmarked.

        * kjs/internal.h:
        (KJS::StringImp::type):
        (KJS::NumberImp::type):
        * kjs/ustring.h:
        (KJS::UString::Rep::deref):

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

        - fix "broken everything" from the storage leak fix

        * wtf/RefPtr.h: (WTF::RefPtr::RefPtr): Added a PlacementNewAdopt constructor.
        * kjs/ustring.h: (KJS::UString::UString): Pass PlacementNewAdopt along to RefPtr.

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

        Reviewed by Adam.

        - turn on unused parameter waring on Mac OS X because it's already on elsewhere

        * Configurations/Base.xcconfig: Took out -wno-unused-parameter.

        * API/JSNode.c:
        * API/JSNodeList.c:
        * API/minidom.c:
        * API/testapi.c:
        Fixed unused variables by using them or marked them with UNUSED_PARAM.

        * kjs/CollectorHeapIntrospector.h: (KJS::CollectorHeapIntrospector::zoneCalloc):
        Removed parameter names to indicate they are unused.

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

        Reviewed by Maciej.

        - fix a storage leak where we ref the UString every time we replace
          a ResolveNode with a LocalVarAccessNode

        * kjs/identifier.h: (KJS::Identifier::Identifier): Added a constructor
        that takes PlacementNewAdopt.

        * kjs/nodes.h: (KJS::ResolveNode::ResolveNode): Initialize the ident
        with PlacementNewAdopt instead of the old value of ident.

        * kjs/ustring.h: (KJS::UString::UString): Added a constructor that
        takes PlacementNewAdopt.

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

        - Windows build fix; get rid of unused parameter

        * kjs/nodes.cpp: (KJS::ResolveNode::optimizeVariableAccess): Don't pass it.
        * kjs/nodes.h: (KJS::LocalVarAccessNode::LocalVarAccessNode): Remove it.
        The assertions weren't all that helpful.

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

        Gtk build fix.  Add include of MathExtras.h.

        * kjs/string_object.cpp:

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

        Reviewed by Maciej and Tim.

        Replace uses of isNaN and isInf with isnan and isinf, and
        remove isNaN and isInf.

        * kjs/config.h: Remove unused HAVE_'s.
        * kjs/date_object.cpp:
        (KJS::DateInstance::getTime):
        (KJS::DateInstance::getUTCTime):
        (KJS::DateProtoFunc::callAsFunction):
        (KJS::DateObjectImp::construct):
        (KJS::DateObjectFuncImp::callAsFunction):
        * kjs/function.cpp:
        (KJS::GlobalFuncImp::callAsFunction):
        * kjs/math_object.cpp:
        (MathFuncImp::callAsFunction):
        * kjs/nodes2string.cpp:
        (KJS::isParserRoundTripNumber):
        * kjs/number_object.cpp:
        (NumberProtoFunc::callAsFunction):
        * kjs/operations.cpp:
        * kjs/operations.h:
        * kjs/string_object.cpp:
        (KJS::StringProtoFunc::callAsFunction):
        * kjs/ustring.cpp:
        (KJS::UString::from):
        * kjs/value.cpp:
        (KJS::JSValue::toInteger):
        (KJS::JSValue::toInt32SlowCase):
        (KJS::JSValue::toUInt32SlowCase):

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

        Build fix: use the new-fangled missingSymbolMarker().

        * kjs/nodes.cpp:
        (KJS::ResolveNode::optimizeVariableAccess):
        * kjs/nodes.h:
        (KJS::LocalVarAccessNode::LocalVarAccessNode):

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

        Reviewed by Maciej Stachowiak, Darin Adler.
        
        Much supporting work done by Maciej Stachowiak, Maks Orlovich, and 
        Cameron Zwarich.
        
        AST transfom to replace slow resolve nodes with fast local variable
        alternatives that do direct memory access. Currently, only ResolveNode
        provides a fast local variable alternative. 6 others are soon to come.
        
        16.7% speedup on SunSpider.
        
        Most of this patch is just scaffolding to support iterating all the 
        resolve nodes in the AST through optimizeResolveNodes(). In 
        optimizeResolveNodes(), most classes just push their child nodes onto 
        the processing stack, while ResolveNodes actually replace themselves in 
        the tree with more optimized alternatives, if possible.

        Here are the interesting bits:

        * kjs/nodes.h: Added PlacementNewAdoptTag, along with implementations 
        in Node and ResolveNode. This tag allows you to use placement new to 
        swap out a base class Node in favor of a subclass copy that holds the
        same data. (Without this tag, default initialization would NULL out
        RefPtrs, change line numbers, etc.)

        * kjs/nodes.cpp:
        (KJS::ResolveNode::evaluate): Since we're taking the slow path, ASSERT
        that the fast path is impossible, to make sure we didn't leave anything
        on the table.

        (KJS::FunctionBodyNode::optimizeResolveNodes): Here's where the AST 
        transformation happens.
        
        (KJS::ResolveNode::optimizeResolveNodes): Here's where the ResolveNode
        optimization happens.

        * kjs/function.h: Added symbolTable() accessor for, for the sake of 
        an ASSERT.

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

        Reviewed by Maciej.

        Fix "AllInOneFile.o has a global initializer in it".

        Some versions of gcc generate a global initializer for std::numeric_limits<size_t>::max().
        We can avoid this by moving it inside an inline function.

        * kjs/SymbolTable.h:
        (KJS::missingSymbolMarker):
        * kjs/function.cpp:
        (KJS::ActivationImp::getOwnPropertySlot):
        (KJS::ActivationImp::put):

2007-10-28  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Mark.
        
        - Added assertions to protect against adding empty or deleted keys to a HashTable

        * wtf/HashTable.h:
        (WTF::HashTable::lookup):
        (WTF::HashTable::lookupForWriting):
        (WTF::HashTable::fullLookupForWriting):
        (WTF::HashTable::add):

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

        - fix GTK build

        * kjs/nodes2string.cpp: (KJS::isParserRoundTripNumber):
        Use isNaN and isInf instead of isnan and isinf.

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

        Reviewed by Maciej.

        - http://bugs.webkit.org/show_bug.cgi?id=15735
          remove GroupNode to simplify AST and possibly get a modest speedup

        This patch removes 4 node types: GroupNode, PropertyNameNode,
        FunctionCallParenBracketNode, and FunctionCallParenDotNode.

        To remove GroupNode, we add knowledge of precedence to the tree nodes,
        and use that when serializing to determine where parentheses are needed.
        This means we no longer have to represent parentheses in the tree.

        The precedence values are named after productions in the grammar from the
        JavaScript standard.

        SunSpider says this is an 0.4% speedup.

        * kjs/function.h:
        * kjs/function.cpp: Removed escapeStringForPrettyPrinting -- it's part of
        serialization, so I moved it to the file that takes care of that.

        * kjs/grammar.y: Changed makeGetterOrSetterPropertyNode to use 0 to
        indicate failure instead of a separate boolean. Got rid of PropertyNameNode
        by merging the PropertyName rule into the Property rule (which was easier
        than figuring out how to pass the Identifier from one node to another).
        Got rid of GroupNode, nodeInsideAllParens(), FunctionCallParenBracketNode,
        and FunctionCallParenDotNode.

        * kjs/nodes.h: Removed unused forward declarations and Operator values.
        Added Precedence enum, and precedence function to all nodes. Removed
        nodeInsideAllParens. Added streamBinaryOperator function for serialization.
        Removed GroupNode and PropertyNameNode. Made PropertyNode store an Identifier.
        Removed FunctionCallParenBracketNode and FunctionCallParenDotNode.

        * kjs/nodes.cpp: Removed Node::nodinsideAllParens, GroupNode, and PropertyNameNode.
        (KJS::PropertyListNode::evaluate): Changed code to get name directly instead
        of converting it from an Identifier to a jsString then back to a UString
        then into an Identifier again!

        * kjs/nodes2string.cpp: Changed special-token implementation to use a separate
        function for each of Endl, Indent, Unindent, and DotExpr instead of using a
        single function with a switch. Added a precedence that you can stream in, to
        cause the next node serialized to add parentheses based on that precedence value.
        (KJS::operatorString): Moved to the top of the file.
        (KJS::escapeStringForPrettyPrinting): Moved here from function.cpp. Removed old
        workaround for snprintf, since StringExtras.h takes care of that.
        (KJS::operator<<): Made the char and char* versions faster by using UString's
        character append functions instead of constructing a UString. Added the logic
        to the Node* version to add parentheses if needed.
        (KJS::Node::streamLeftAssociativeBinaryOperator): Added helper function.
        (KJS::ElementNode::streamTo): Use PrecAssignment for the elements.
        (KJS::BracketAccessorNode::streamTo): Use PrecCall for the expression before
        the bracket.
        (KJS::DotAccessorNode::streamTo): Use PrecCall for the expression before the dot.
        (KJS::ArgumentListNode::streamTo): Use PrecAssignment for the arguments.
        (KJS::NewExprNode::streamTo): Use PrecMember for the expression.
        (KJS::FunctionCallValueNode::streamTo): Use PrecCall.
        (KJS::FunctionCallBracketNode::streamTo): Ditto.
        (KJS::FunctionCallDotNode::streamTo): Ditto.
        (KJS::PostfixBracketNode::streamTo): Ditto.
        (KJS::PostfixDotNode::streamTo): Ditto.
        (KJS::PostfixErrorNode::streamTo): Use PrecLeftHandSide.
        (KJS::DeleteBracketNode::streamTo): Use PrecCall.
        (KJS::DeleteDotNode::streamTo): Ditto.
        (KJS::DeleteValueNode::streamTo): Use PrecUnary.
        (KJS::VoidNode::streamTo): Ditto.
        (KJS::TypeOfValueNode::streamTo): Ditto.
        (KJS::PrefixBracketNode::streamTo): Use PrecCall.
        (KJS::PrefixDotNode::streamTo): Ditto.
        (KJS::PrefixErrorNode::streamTo): Use PrecUnary.
        (KJS::UnaryPlusNode::streamTo): Ditto.
        (KJS::NegateNode::streamTo): Ditto.
        (KJS::BitwiseNotNode::streamTo): Ditto.
        (KJS::LogicalNotNode::streamTo): Ditto.
        (KJS::MultNode::streamTo): Use streamLeftAssociativeBinaryOperator.
        (KJS::DivNode::streamTo): Ditto.
        (KJS::ModNode::streamTo): Ditto.
        (KJS::AddNode::streamTo): Ditto.
        (KJS::SubNode::streamTo): Ditto.
        (KJS::LeftShiftNode::streamTo): Ditto.
        (KJS::RightShiftNode::streamTo): Ditto.
        (KJS::UnsignedRightShiftNode::streamTo): Ditto.
        (KJS::LessNode::streamTo): Ditto.
        (KJS::GreaterNode::streamTo): Ditto.
        (KJS::LessEqNode::streamTo): Ditto.
        (KJS::GreaterEqNode::streamTo): Ditto.
        (KJS::InstanceOfNode::streamTo): Ditto.
        (KJS::InNode::streamTo): Ditto.
        (KJS::EqualNode::streamTo): Ditto.
        (KJS::NotEqualNode::streamTo): Ditto.
        (KJS::StrictEqualNode::streamTo): Ditto.
        (KJS::NotStrictEqualNode::streamTo): Ditto.
        (KJS::BitAndNode::streamTo): Ditto.
        (KJS::BitXOrNode::streamTo): Ditto.
        (KJS::BitOrNode::streamTo): Ditto.
        (KJS::LogicalAndNode::streamTo): Ditto.
        (KJS::LogicalOrNode::streamTo): Ditto.
        (KJS::ConditionalNode::streamTo): Ditto.
        (KJS::AssignResolveNode::streamTo): Use PrecAssignment for the right side.
        (KJS::AssignBracketNode::streamTo): Use PrecCall for the expression before
        the bracket and PrecAssignment for the right side.
        (KJS::AssignDotNode::streamTo): Ditto.
        (KJS::AssignErrorNode::streamTo): Use PrecLeftHandSide for the left side
        and PrecAssignment for the right side.
        (KJS::CommaNode::streamTo): Use PrecAssignment for both expressions.
        (KJS::AssignExprNode::streamTo): Use PrecAssignment.

2007-10-28  Kevin Ollivier  <kevino@theolliviers.com>

        Define wx port and set wx port USE options.

        Reviewed by Adam Roben.

        * wtf/Platform.h:

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

        We don't include "config.h" in headers.

        * bindings/jni/jni_instance.h:
        * kjs/regexp.h:
        * wtf/TCPageMap.h:
        * wtf/TCSpinLock.h:

2007-10-28  Maciej Stachowiak  <mjs@apple.com>

        Rubber stamped by Mark.
        
        - avoid using non-portable SIZE_T_MAX in favor of std::numeric_limits

        * kjs/SymbolTable.h:
        (KJS::SymbolTableIndexHashTraits::emptyValue):
        * kjs/function.cpp:
        (KJS::ActivationImp::getOwnPropertySlot):
        (KJS::ActivationImp::put):

2007-10-28  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Eric.
        
        - switch SymbolTable to be a HashMap instead of a PropertyMap for 3% SunSpider speedup

        * kjs/SymbolTable.h:
        (KJS::IdentifierRepHash::hash): Special hash function for identifier reps.
        (KJS::IdentifierRepHash::equal): ditto
        (KJS::SymbolTableIndexHashTraits::emptyValue): Special HashTraits for the index value.
        (KJS::SymbolTable): change to a typedef for a HashMap.
        * kjs/function.cpp:
        (KJS::ActivationImp::getOwnPropertySlot): Adjusted for new SymbolTable API.
        (KJS::ActivationImp::deleteProperty): ditto
        (KJS::ActivationImp::put): ditto

        * kjs/nodes.cpp:
        (KJS::FunctionBodyNode::initializesymbolTable): Adjusted, since
        you now have to store a UString::rep, not an identifier.

2007-10-27  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Oliver.
        
        - numerous HashTable performance improvements
        
        This does not quite add up to a measurable win on SunSpider, but it allows a
        follow-on > 3% improvement and probably helps WebCore too.
        
        I made the following improvements, among others:
        
        - Made HashFunctions note whether it is ok to compare a real value with the equal() function
        to the empty or deleted value, and used this to optimize the comparisons done in hash lookup.
        
        - Specialized lookup so it doesn't have to do so many extra branches and build so many extra
        std::pairs for cases that don't need them. There are now four versions, one for read-only access,
        two for writing, and one folded directly into add() (these all were improvments).
        
        - Made HashMap::get() use lookup() directly instead of find() to avoid having to build iterators.
        
        - Made a special constructor for iterators that knows it points to
        a valid filled cell and so skips updating itself.

        - Reordered memory accesses in the various lookup functions for better code generation
        
        - Made simple translators avoid passing a hash code around
        
        - Other minor tweaks
        
        * wtf/HashTable.h:
        (WTF::):
        (WTF::HashTableConstIterator::HashTableConstIterator):
        (WTF::HashTableIterator::HashTableIterator):
        (WTF::IdentityHashTranslator::translate):
        (WTF::HashTable::end):
        (WTF::HashTable::lookup):
        (WTF::HashTable::lookupForWriting):
        (WTF::HashTable::makeKnownGoodIterator):
        (WTF::HashTable::makeKnownGoodConstIterator):
        (WTF::::lookup):
        (WTF::::lookupForWriting):
        (WTF::::fullLookupForWriting):
        (WTF::::add):
        (WTF::::addPassingHashCode):
        (WTF::::reinsert):
        (WTF::::find):
        (WTF::::contains):
        * kjs/identifier.cpp:
        (WTF::):
        * wtf/HashFunctions.h:
        (WTF::):
        * wtf/HashMap.h:
        (WTF::):
        (WTF::::get):
        * wtf/HashSet.h:
        (WTF::):
        (WTF::::add):
        * wtf/ListHashSet.h:
        (WTF::ListHashSetTranslator::translate):

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

        Reviewed by Eric.

        - fix ASCIICType.h for some Windows compiles

        * wtf/ASCIICType.h: Check the compiler, not the OS, since it's the
        compiler/library that has the wchar_t that is just a typedef.

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

        - BuildFix
        - Forgot to change the build step when I changed the filename.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:

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

        Reviewed by Darin Adler.
        
        Fixed the rest of "ASSERTION FAILED: _hash in KJS::UString::Rep::
        computedHash()"
        http://bugs.webkit.org/show_bug.cgi?id=15718

        * kjs/identifier.cpp: Fixed more cases where an Identifier didn't get a 
        hash value. Also changed O(n) strlen to O(1) check for empty string.
        (KJS::Identifier::add):

        * kjs/ustring.cpp: Changed O(n) strlens to O(1) checks for empty string.
        (KJS::UString::UString):
        (KJS::UString::operator=):

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

        Reviewed by Eric.

        - fix pow on Windows

        * wtf/MathExtras.h: (wtf_pow): Add a special case for MSVC, which has
        a "pow" function that does not properly handle the case where arg1 is
        NaN and arg2 is 0.

        * kjs/math_object.cpp: (MathFuncImp::callAsFunction): Don't explicity
        specify "::pow" -- just "pow" is fine.

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

        Reviewed by Maciej.

        - http://bugs.webkit.org/show_bug.cgi?id=15711
          force JSImmediate to be inlined for roughly 1.2% SunSpider speedup

        * kjs/JSImmediate.h: Put ALWAYS_INLINE on everything.

        * kjs/object.h: Removed redundant includes.
        * kjs/value.h: Ditto.

2007-10-27  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Mark.
        
        - fixed "ASSERTION FAILED: _hash in KJS::UString::Rep::computedHash()"
        http://bugs.webkit.org/show_bug.cgi?id=15718

        * kjs/identifier.cpp:
        (KJS::Identifier::addSlowCase): Ensure that empty Identifiers have a hash computed,
        now that we count on all Identifiers already having one.

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

        Silence a warning.

        * kjs/SymbolTable.h:

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

        Gtk build fix.

        * kjs/function.h:

2007-10-26  Kevin McCullough  <kmccullough@apple.com>

       Rubber stamp by Adam. 

        - Renamed JSStringRefCOM to JSStringRefBSTR since it he only thing the
        files contain are functions that operate on BSTRs.

        * API/JSStringRefBSTR.cpp: Copied from API/JSStringRefCOM.cpp.
        * API/JSStringRefBSTR.h: Copied from API/JSStringRefCOM.h.
        * API/JSStringRefCOM.cpp: Removed.
        * API/JSStringRefCOM.h: Removed.
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:

2007-10-26  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Adam.

        - Made JSStringCreateWithBSTR capable of handling null BSTRs.

        * API/JSStringRefCOM.cpp:
        (JSStringCreateWithBSTR):

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

        Windows build fix.

        * kjs/SymbolTable.h: Add header gaurd.
        * kjs/nodes.h: #include "SymbolTable.h"

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

        Suggested by Anders Carlsson.
        
        Fixed tyop.

        * kjs/function.cpp:
        (KJS::ActivationImp::getOwnPropertySlot):

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

        Suggested by Darin Adler.
        
        Use computedHash(), which is safer than just directly accessing _hash.

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

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

        Build fix: svn add SymbolTable.h

        * kjs/SymbolTable.h: Added.
        (KJS::SymbolTable::set):
        (KJS::SymbolTable::get):

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

        Build fix: export SymbolTable.h to WebCore.

        * JavaScriptCore.xcodeproj/project.pbxproj:

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

        Comment tweak suggested by Maciej.

        * kjs/function.cpp:
        (KJS::ActivationImp::getOwnPropertySlot):

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

        Reviewed by Maciej Stachowiak.
        
        Tweaked property maps to remove 2 branches. 2.5% speedup on SunSpider.

        * kjs/property_map.cpp: Use a special no branch accessor to the UString's
        hash value. Also, return immediately instead of branching to the end
        of the loop if the value is not found.
        (KJS::PropertyMap::get):
        (KJS::PropertyMap::getLocation):
        (KJS::PropertyMap::put):
        (KJS::PropertyMap::insert):
        (KJS::PropertyMap::remove):
        (KJS::PropertyMap::checkConsistency):

        * kjs/ustring.h:
        (KJS::UString::Rep::computedHash): Special no branch accessor to the
        UString's hash value. Used when the caller knows that the hash value
        has already been computed. (For example, if the caller got the UString
        from an Identifier.)

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

        Reviewed by Maciej Stachowiak.
        
        Switched ActivationImp to using a symbol table. For now, though, all
        clients take the slow path.
        
        Net .6% speedup on SunSpider.
        
        Slowdowns:
            - ActivationImp now mallocs in its constructor
            - Local variable hits use an extra level of indirection to retrieve 
            data
            - Local variable misses do two lookups

        Speedups:
            - Fast initialization of local variables upon function entry

        * JavaScriptCore.xcodeproj/project.pbxproj: Added SymbolTable.h
        
        * kjs/function.cpp:
        (KJS::ActivationImp::ActivationImp): Malloc a private structure to hold
        data that won't fit in a JSCell.
        (KJS::ActivationImp::argumentsGetter): Use slow symbol table path for 
        lookup.
        (KJS::ActivationImp::getOwnPropertySlot): ditto
        (KJS::ActivationImp::deleteProperty): ditto
        (KJS::ActivationImp::put): ditto
        (KJS::ActivationImp::createArgumentsObject): ditto

        (KJS::ActivationImp::mark): Call JSObject::mark first so that one of
        our properties doesn't try to recursively mark us. (This caused a crash
        in earlier testing. Not sure why we haven't run into it before.)

        * kjs/nodes.cpp: Functions now build a symbol table the first time 
        they're called.
        (KJS::VarDeclNode::evaluate):
        (KJS::FunctionBodyNode::FunctionBodyNode):
        (KJS::FunctionBodyNode::initializeSymbolTable):
        (KJS::FunctionBodyNode::processDeclarations):
        (KJS::FunctionBodyNode::processDeclarationsForFunctionCode):
        (KJS::FunctionBodyNode::processDeclarationsForProgramCode):

        * kjs/nodes.h:
        (KJS::FunctionBodyNode::symbolTable):

        * wtf/Forward.h: Added Vector.

2007-10-26  Kevin McCullough  <kmccullough@apple.com>

        - Corrected function name mistake in this changelog.

2007-10-26  Kevin McCullough  <kmccullough@apple.com>
        Reviewed by Sam and Steve.

        - Added convenience methods for converting between BSTR and JSStringRefs

        * API/JSStringRefCOM.cpp: Added.
        (JSStringCreateWithBSTR):
        (JSStringCopyBSTR):
        * API/JSStringRefCOM.h: Added.
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:

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

        Windows build fix.

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

2007-10-26  Oliver Hunt  <oliver@apple.com>

        Reviewed by Maciej.

        Make the JSC GC use a separate heap for JSNumbers to get a 0.7-1.4% progression in SunSpider.

        * kjs/CollectorHeapIntrospector.cpp:
        (KJS::CollectorHeapIntrospector::init):
        (KJS::CollectorHeapIntrospector::enumerate):
        * kjs/CollectorHeapIntrospector.h:
        * kjs/collector.cpp:
        (KJS::Collector::recordExtraCost):
        (KJS::Collector::heapAllocate):
        (KJS::Collector::allocate):
        (KJS::Collector::allocateNumber):
        (KJS::Collector::registerThread):
        (KJS::Collector::markStackObjectsConservatively):
        (KJS::Collector::markMainThreadOnlyObjects):
        (KJS::Collector::sweep):
        (KJS::Collector::collect):
        * kjs/collector.h:
        * kjs/internal.h:
        (KJS::NumberImp::operator new):
          Force numbers to be allocated in the secondary heap.

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

        Reviewed by Oliver.
        
        - encourage GCC a little harder to inline a few hot functions for 1.5% improvement on SunSpider.

        * kjs/value.h:
        (KJS::JSValue::getUInt32):
        (KJS::JSValue::getTruncatedInt32):
        (KJS::JSValue::toNumber):
        * wtf/PassRefPtr.h:
        (WTF::PassRefPtr::~PassRefPtr):
        * wtf/RefPtr.h:
        (WTF::RefPtr::operator->):

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

        Gtk build fix.

        * kjs/ExecState.h:

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

        Reviewed by Mark.

        - Merge Context class fully into ExecState, since they are always created and used together.

        No measurable performance impact but this is a useful cleanup.

        * JavaScriptCore.pri:
        * kjs/ExecState.cpp:
        (KJS::ExecState::ExecState):
        (KJS::ExecState::~ExecState):
        (KJS::ExecState::mark):
        (KJS::ExecState::lexicalInterpreter):
        * kjs/ExecState.h:
        (KJS::ExecState::dynamicInterpreter):
        (KJS::ExecState::setException):
        (KJS::ExecState::clearException):
        (KJS::ExecState::exception):
        (KJS::ExecState::exceptionSlot):
        (KJS::ExecState::hadException):
        (KJS::ExecState::scopeChain):
        (KJS::ExecState::callingExecState):
        (KJS::ExecState::propertyNames):
        * kjs/collector.cpp:
        (KJS::Collector::reportOutOfMemoryToAllInterpreters):
        * kjs/function.cpp:
        (KJS::FunctionImp::callAsFunction):
        (KJS::FunctionImp::argumentsGetter):
        (KJS::FunctionImp::callerGetter):
        (KJS::GlobalFuncImp::callAsFunction):
        * kjs/interpreter.cpp:
        (KJS::Interpreter::Interpreter):
        (KJS::Interpreter::init):
        (KJS::Interpreter::evaluate):
        (KJS::Interpreter::mark):
        * kjs/interpreter.h:
        (KJS::Interpreter::setCurrentExec):
        (KJS::Interpreter::currentExec):
        * kjs/nodes.cpp:
        (KJS::currentSourceId):
        (KJS::currentSourceURL):
        (KJS::ThisNode::evaluate):
        (KJS::ResolveNode::evaluate):
        (KJS::FunctionCallResolveNode::evaluate):
        (KJS::PostfixResolveNode::evaluate):
        (KJS::DeleteResolveNode::evaluate):
        (KJS::TypeOfResolveNode::evaluate):
        (KJS::PrefixResolveNode::evaluate):
        (KJS::AssignResolveNode::evaluate):
        (KJS::VarDeclNode::evaluate):
        (KJS::DoWhileNode::execute):
        (KJS::WhileNode::execute):
        (KJS::ForNode::execute):
        (KJS::ForInNode::execute):
        (KJS::ContinueNode::execute):
        (KJS::BreakNode::execute):
        (KJS::ReturnNode::execute):
        (KJS::WithNode::execute):
        (KJS::SwitchNode::execute):
        (KJS::LabelNode::execute):
        (KJS::TryNode::execute):
        (KJS::FunctionBodyNode::processDeclarationsFunctionCode):
        (KJS::FunctionBodyNode::processDeclarationsProgramCode):
        (KJS::FunctionBodyNode::processDeclarations):
        (KJS::FuncDeclNode::makeFunction):
        (KJS::FuncExprNode::evaluate):

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

        Windows build fix.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:

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

        Gtk build fix.

        * JavaScriptCore.pri:
        * kjs/ExecState.cpp:

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

        Reviewed by Oliver.
        
        - moved Context class into ExecState.{h,cpp} in preparation for merging 
        ExecState and Context classes.

        * kjs/ExecState.h: Moved CodeType enum and Context class here in
        preparation for merging ExecState and Context.
        * kjs/ExecState.cpp: Moved Context class here from Context.cpp.
        (KJS::Context::Context):
        (KJS::Context::~Context):
        (KJS::Context::mark):
        * kjs/context.h: Removed.
        * kjs/Context.cpp: Removed.
        * kjs/function.h: Removed CodeType enum.
        * kjs/LabelStack.h: Added. Pulled LabelStack class out of internal.h.
        * kjs/internal.h: Removed LabelStack.
        * JavaScriptCore.xcodeproj/project.pbxproj: Added new file, removed ones that are gone.
        * kjs/collector.cpp: Fixed includes.
        * kjs/function.cpp: ditto
        * kjs/internal.cpp: ditto
        * kjs/interpreter.cpp: ditto
        * kjs/lookup.h: ditto
        * kjs/nodes.cpp: ditto

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

        Windows build fix.

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

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

        Reviewed by Maciej.

        - http://bugs.webkit.org/show_bug.cgi?id=15703
          fix numeric functions -- improve correctness and speed

        Gives about 1% gain on SunSpider.

        * kjs/value.h: Added toIntegerPreserveNan, removed toUInt16.
        (KJS::JSValue::toInt32): Changed to call getTruncatedInt32 in a way that works
        with both immediate and number values.
        (KJS::JSValue::toUInt32): Ditto.
        * kjs/value.cpp:
        (KJS::JSValue::toInteger): Moved the logic from roundValue here, with a couple
        differences. One is that it now correctly returns 0 for NaN, and another is that
        there's no special case for 0 or infinity, since the general case already handles
        those correctly.
        (KJS::JSValue::toIntegerPreserveNaN): Added. Like toInteger, but without the
        check for NaN.
        (KJS::JSValue::toInt32SlowCase): Call toNumber instead of roundValue. The
        truncation done by the typecast already does the necessary truncation that
        roundValue was doing.
        (KJS::JSValue::toUInt32SlowCase): Ditto.
        (KJS::JSValue::toUInt16): Removed.

        * kjs/internal.h: Removed roundValue.
        * kjs/internal.cpp: Ditto.

        * kjs/array_object.cpp: (KJS::ArrayProtoFunc::callAsFunction): Remove unneeded
        code to handle NaN in Array.slice; toInteger now never returns NaN as specified.

        * kjs/date_object.cpp:
        (KJS::fillStructuresUsingTimeArgs): Replaced call to roundValue with a call to
        toNumber as specified.
        (KJS::DateProtoFunc::callAsFunction): In SetTime case, replaced call to roundValue
        with a call to toNumber and timeClip as specified.
        (KJS::DateObjectImp::construct): Removed unnecessary checks of numArgs in cases
        where the default behavior of toInt32 (returning 0) was already correct. Replaced
        call to roundValue with a call to toNumber as specified.
        (KJS::DateObjectFuncImp::callAsFunction): Ditto.

        * kjs/math_object.cpp: (MathFuncImp::callAsFunction): Removed unnecessary special
        cases for the pow function that the library already handles correctly.

        * kjs/number_object.cpp: (NumberProtoFunc::callAsFunction): Changed ToString to
        call toIntegerPreserveNaN, so we can continue to handle the NaN case differently.
        The real toInteger now returns 0 for NaN. Took out unneeded special case in
        ToFixed for undefined; was only needed because our toInteger was wrong. Same
        thing in ToExponential. Changed ToPrecision to call toIntegerPreserveNaN.

        * kjs/string_object.cpp:
        (KJS::StringProtoFunc::callAsFunction): Took out CharAt and CharCodeAt special
        cases for undefined that were only needed because toInteger was wrong. Same in
        IndexOf, and was able to remove some special cases. In LastIndexOf, used
        toIntegerPreserveNaN, but was able to remove some special cases there too.
        Changed Substr implementation to preserve correct behavior with the change
        to toInteger and match the specification. Also made sure we weren't converting
        an out of range double to an int.
        (KJS::StringObjectFuncImp::callAsFunction): Changed constructor to just use
        toUInt32, because truncating toUInt32 to 16 bits is the same thing and there's
        no reason to have toUInt16 as a second, less-optimized function that's only
        called at this one call site.

        * wtf/MathExtras.h: Added trunc function for Windows.

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

        Reviewed by Maciej Stachowiak.
        
        Tweaked the inner hashtable lookup loop to remove a branch in the "not 
        found" case. .5% speedup on SunSpider.

        * JavaScriptCore.xcodeproj/project.pbxproj:
        * wtf/HashTable.h:
        (WTF::::lookup):

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

        Reviewed by Oliver.

        - fold together toPrimitive() and toNumber() conversions for 0.5% gain on SunSpider

        * kjs/nodes.cpp:
        (KJS::SubNode::evaluate): Subtract directly, since toPrimitive() is not
        adding any value over toNumber() here.
        (KJS::valueForReadModifyAssignment): Ditto.
        (KJS::lessThan): Use new getPrimitiveNumber() method to avoid some virtual calls
        and branches.
        (KJS::lessThanEq): Ditto.
        * JavaScriptCore.exp: Export new functions as needed.
        * kjs/value.h:
        (KJS::JSValue::toPrimitive): Fixed formatting.
        (KJS::JSValue::getPrimitiveNumber): New method - this simultaneously converts
        to number and tells you whether a toPrimitive() conversion with a Number hint
        would have given a string.
        * kjs/internal.cpp:
        (KJS::StringImp::getPrimitiveNumber): Implemented. 
        (KJS::NumberImp::getPrimitiveNumber): ditto
        (KJS::GetterSetterImp::getPrimitiveNumber): ditto
        (KJS::StringImp::toPrimitive): Fixed formatting.
        (KJS::NumberImp::toPrimitive): ditto
        (KJS::GetterSetterImp::toPrimitive): ditto
        * kjs/internal.h:
        * kjs/object.cpp:
        (KJS::JSObject::getPrimitiveNumber): Implemented.
        * kjs/object.h:

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

        Reviewed by Adam Roben.

        Remove JSStringRefCFHack from windows as it is no longer needed.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:

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

        Reviewed by Oliver Hunt.
        
        Rolled out my last patch. It turns out that I needed 2 words, not 1,
        so it didn't help.

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

        Reviewed by Oliver Hunt.
        
        Fixed http://bugs.webkit.org/show_bug.cgi?id=15694
        Shrink the size of an activation object by 1 word
        
        This is in preparation for adding a symbol table to the activation 
        object.
        
        The basic strategy here is to rely on the mutual exclusion between
        the arguments object pointer and the function pointer (you only need
        the latter in order to create the former), and store them in the same 
        place. The LazyArgumentsObject class encapsulates this strategy.
        
        Also inlined the ArgumentsImp constructor, for good measure.
        
        SunSpider reports no regression. Regression tests pass.

        * JavaScriptCore.xcodeproj/project.pbxproj:
        * kjs/Context.cpp:
        (KJS::Context::~Context):
        * kjs/function.cpp:
        (KJS::ActivationImp::LazyArgumentsObject::createArgumentsObject):
        (KJS::ActivationImp::LazyArgumentsObject::mark):
        (KJS::):
        (KJS::ActivationImp::argumentsGetter):
        (KJS::ActivationImp::mark):
        * kjs/function.h:
        (KJS::ActivationImp::LazyArgumentsObject::LazyArgumentsObject):
        (KJS::ActivationImp::LazyArgumentsObject::getOrCreate):
        (KJS::ActivationImp::LazyArgumentsObject::resetArguments):
        (KJS::ActivationImp::LazyArgumentsObject::setArgumentsObject):
        (KJS::ActivationImp::LazyArgumentsObject::argumentsObject):
        (KJS::ActivationImp::LazyArgumentsObject::setFunction):
        (KJS::ActivationImp::LazyArgumentsObject::function):
        (KJS::ActivationImp::LazyArgumentsObject::createdArgumentsObject):
        (KJS::ActivationImp::LazyArgumentsObject::):
        (KJS::ActivationImp::ActivationImp::ActivationImp):
        (KJS::ActivationImp::resetArguments):

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

        Change JavaScriptCore.vcproj to use DerivedSources.make

        We were trying to emulate the logic of make in
        build-generated-files.sh, but we got it wrong. We now use a
        build-generated-files very much like the one that WebCore uses to
        invoke make.

        We also now only have a Debug configuration of dftables which we build
        even when doing a Release build of JavaScriptCore. dftables also no
        longer has the "_debug" name suffix.

        Changes mostly made by Darin, reviewed by me.

        * DerivedSources.make: Add a variable to set the extension used for
        the dftables executable.
        * JavaScriptCore.vcproj/JavaScriptCore.sln: Updated to use Debug
        dftables in Release configurations.
        * JavaScriptCore.vcproj/JavaScriptCoreSubmit.sln: Ditto.
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
           - Updated include path to point to the new location of the derived
             sources.
           - Modified pre-build event to pass the right arguments to
             build-generated-files.sh and not call dftables directly.
           - Added the derived source files to the project.
           - Removed grammarWrapper.cpp, which isn't needed now that we're
             compiling grammar.cpp directly.
        * JavaScriptCore.vcproj/JavaScriptCore/build-generated-files.sh:
        Slightly modified from the WebCore version.
        * JavaScriptCore.vcproj/JavaScriptCore/grammarWrapper.cpp: Removed.
        * JavaScriptCore.vcproj/dftables/dftables.vcproj:
            - Changed the output location to match Mac.
            - Removed the Release configuration.
            - Removed the _debug suffix.

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

        Reviewed by Eric Seidel.
        
        Slightly elaborated the differences between declaration procesing in 
        Function Code and Program Code.
        
        .3% speedup on SunSpider.

        * kjs/nodes.cpp:
        (KJS::FunctionBodyNode::processDeclarationsFunctionCode): 
        (KJS::FunctionBodyNode::processDeclarationsProgramCode): Store a 
        minimum set of attributes instead of recomputing all the time. Also,
        ignore m_parameters, since programs don't have arguments.

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

        Reviewed by Maciej.
        
        More preparation work before adding long-running mode to testkjs.

        * kjs/testkjs.cpp:
        (TestFunctionImp::callAsFunction):
        (prettyPrintScript):
        (runWithScripts):
        (parseArguments):
        (kjsmain):
        (fillBufferWithContentsOfFile):

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

        Reviewed by Maciej.
        
        Bring testkjs code out of the dark ages in preparation for more
        radical improvements (like long-running testing support!)

        * kjs/testkjs.cpp:
        (TestFunctionImp::callAsFunction):
        (setupInterpreter):
        (doIt):
        (fillBufferWithContentsOfFile):

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

        Reviewed by Maciej Stachowiak.
        
        Make a fast path for declaration processing inside Function Code.
        
        Lifted declaration processing code up from individual declaration nodes
        and into processDeclarations.
        
        Broke out processDeclarations into two cases, depending on the type of 
        code. This eliminates 2 branches, and facilitates more radical 
        divergeance in the future.
        
        2.5% SunSpider speedup.

        * JavaScriptCore.xcodeproj/project.pbxproj:
        * kjs/nodes.cpp:
        (KJS::FunctionBodyNode::initializeDeclarationStacks):
        (KJS::FunctionBodyNode::processDeclarationsFunctionCode):
        (KJS::FunctionBodyNode::processDeclarationsProgramCode):
        (KJS::FunctionBodyNode::execute):
        (KJS::FuncDeclNode::makeFunction):
        * kjs/nodes.h:
        (KJS::):

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

        Reviewed by Adam.
        
        - add header includes needed on platforms that don't use AllInOneFile.cpp

        * API/JSCallbackObject.cpp:
        * kjs/Context.cpp:
        * kjs/ExecState.cpp:
        * kjs/array_instance.cpp:
        * kjs/function_object.cpp:
        * kjs/interpreter.cpp:
        * kjs/nodes.cpp:

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

        Reviewed by Geoff.

        * JavaScriptCore.xcodeproj/project.pbxproj: re-mark JSGlobalObject.h as private

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

        Reviewed by Maciej Stachowiak.
        
        Fixed http://bugs.webkit.org/show_bug.cgi?id=15683
        Re-order declaration initialization to avoid calling hasProperty inside
        VarDeclNode::processDeclaration
        
        .7% speedup on SunSpider.

        * kjs/function.h:
        * kjs/function.cpp: Merged parameter processing into FunctionBodyNode's
        other processing of declared symbols, so the order of execution could 
        change.

        * kjs/nodes.cpp:
        (KJS::VarDeclNode::getDeclarations): Added special case for the 
        "arguments" property name, explained in the comment.

        (KJS::VarDeclNode::processDeclaration): Removed call to hasProperty
        in the case of function code, since we know the declared symbol
        management will resolve conflicts between symbols. Yay!

        (KJS::VarDeclListNode::getDeclarations): Now that VarDeclNode's 
        implementation of getDeclarations is non-trivial, we can't take a 
        short-cut here any longer -- we need to put the VarDecl node on the 
        stack so it gets processed normally.

        (KJS::FunctionBodyNode::processDeclarations): Changed the order of 
        processing to enforce mutual exclusion rules.

        * kjs/nodes.h:
        (KJS::DeclarationStacks::DeclarationStacks): Structure includes an 
        ExecState now, for fast access to the "arguments" property name.

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

        Reviewed by Maciej.
        
        Add a JSGlobalObject class and remove the InterpreterMap
        http://bugs.webkit.org/show_bug.cgi?id=15681
        
        This required making JSCallbackObject a template class to allow for
        JSGlobalObjects with JSCallbackObject functionality.
        
        SunSpider claims this was a 0.5% speedup.

        * API/JSCallbackObject.cpp:
        (KJS::):
        * API/JSCallbackObject.h:
        * API/JSCallbackObjectFunctions.h: Copied from API/JSCallbackObject.cpp.
        (KJS::::JSCallbackObject):
        (KJS::::init):
        (KJS::::~JSCallbackObject):
        (KJS::::initializeIfNeeded):
        (KJS::::className):
        (KJS::::getOwnPropertySlot):
        (KJS::::put):
        (KJS::::deleteProperty):
        (KJS::::implementsConstruct):
        (KJS::::construct):
        (KJS::::implementsHasInstance):
        (KJS::::hasInstance):
        (KJS::::implementsCall):
        (KJS::::callAsFunction):
        (KJS::::getPropertyNames):
        (KJS::::toNumber):
        (KJS::::toString):
        (KJS::::setPrivate):
        (KJS::::getPrivate):
        (KJS::::inherits):
        (KJS::::cachedValueGetter):
        (KJS::::staticValueGetter):
        (KJS::::staticFunctionGetter):
        (KJS::::callbackGetter):
        * API/JSClassRef.cpp:
        (OpaqueJSClass::prototype):
        * API/JSContextRef.cpp:
        (JSGlobalContextCreate):
        * API/JSObjectRef.cpp:
        (JSObjectMake):
        (JSObjectGetPrivate):
        (JSObjectSetPrivate):
        * API/JSValueRef.cpp:
        (JSValueIsObjectOfClass):
        * JavaScriptCore.exp:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * bindings/c/c_utility.cpp:
        (KJS::Bindings::convertValueToNPVariant):
        * bindings/jni/jni_jsobject.cpp:
        * bindings/objc/objc_utility.mm:
        (KJS::Bindings::convertValueToObjcValue):
        * kjs/Context.cpp:
        (KJS::Context::Context):
        * kjs/ExecState.cpp:
        (KJS::ExecState::lexicalInterpreter):
        * kjs/JSGlobalObject.h: Added.
        (KJS::JSGlobalObject::JSGlobalObject):
        (KJS::JSGlobalObject::isGlobalObject):
        (KJS::JSGlobalObject::interpreter):
        (KJS::JSGlobalObject::setInterpreter):
        * kjs/array_instance.cpp:
        * kjs/context.h:
        * kjs/function.cpp:
        (KJS::FunctionImp::callAsFunction):
        (KJS::GlobalFuncImp::callAsFunction):
        * kjs/interpreter.cpp:
        (KJS::Interpreter::Interpreter):
        (KJS::Interpreter::init):
        (KJS::Interpreter::~Interpreter):
        (KJS::Interpreter::globalObject):
        (KJS::Interpreter::initGlobalObject):
        (KJS::Interpreter::evaluate):
        * kjs/interpreter.h:
        * kjs/lookup.h:
        (KJS::cacheGlobalObject):
        * kjs/object.h:
        (KJS::JSObject::isGlobalObject):
        * kjs/testkjs.cpp:

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

        Build fix for Gtk, no review.

        * kjs/collector.cpp: #include "context.h"

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

        Reviewed by Maciej.
        
        Stop checking isOutOfMemory after every allocation, instead let the collector
        notify all ExecStates if we ever hit this rare condition.
        
        SunSpider claims this was a 2.2% speedup.

        * kjs/collector.cpp:
        (KJS::Collector::collect):
        (KJS::Collector::reportOutOfMemoryToAllInterpreters):
        * kjs/collector.h:
        * kjs/nodes.cpp:
        (KJS::TryNode::execute):

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

        Gtk build fix.

        * kjs/identifier.h:  Remove extra qualification.

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

        Reviewed by Sam Weinig.
        
        Disable ALWAYS_INLINE in debug builds, since it drives the debugger
        crazy.

        * wtf/AlwaysInline.h:

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

        Reviewed by Sam Weinig.
        
        Inlined the fast path for creating an Identifier from an Identifier. 
        
        This is a .4% speedup on SunSpider overall, but as big as a 2.5% 
        speedup on certain individual tests. 65% of the Identifiers creating 
        by SunSpider are already Identifiers.
        
        (The main reason I'm making this change is that it resolves a large
        regression in a patch I haven't checked in yet.)

        * JavaScriptCore.exp:
        * kjs/identifier.cpp:
        (KJS::Identifier::addSlowCase):
        * kjs/identifier.h:
        (KJS::Identifier::Identifier::add):

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

        Reviewed by Simon.

        some changes to the way JS values are converted to Qt values in the script bindings. Added support for converting JS arrays into QStringList's.

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

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

        Reviewed by Darin.

        Remove old relation method, replace with specialised LessThan and lessThenEq functions for a 0.5-0.6% improvement in SunSpider

        * kjs/nodes.cpp:
        (KJS::lessThan):
        (KJS::lessThanEq):
        (KJS::LessNode::evaluate):
        (KJS::GreaterNode::evaluate):
        (KJS::LessEqNode::evaluate):
        (KJS::GreaterEqNode::evaluate):
        * kjs/operations.cpp:
        * kjs/operations.h:

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

        Reviewed by darin.

        * kjs/nodes.h:
        (KJS::ImmediateNumberNode::): Fix ASSERT correctness (and debug build!)

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

        Reviewed by Eric.

        * kjs/object.cpp: (KJS::JSObject::defaultValue): Get rid of a little
        Identifier ref/deref for what SunSpider claims is a 0.4% speedup.

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

        Reviewed by Maciej.

        - separate out the code to create a hash table the first time from the code
          to rehash

        SunSpider claims this was a 0.7% speedup.

        * kjs/property_map.cpp:
        (KJS::PropertyMap::expand): Changed to call either createTable or rehash.
        (KJS::PropertyMap::createTable): Added. For the case where we had no table.
        (KJS::PropertyMap::rehash): Removed code needed only in the case where we
        had no table.
        * kjs/property_map.h: Added createTable.

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

        Reviewed by darin.
        
        Add ImmediateNumberNode to hold a JSValue* instead of a double for numbers
        which can be represented by JSImmediate.
        
        SunSpider claims this was a 0.6% speedup.

        * kjs/grammar.y:
        * kjs/nodes.cpp:
        (KJS::NumberNode::evaluate):
        (KJS::ImmediateNumberNode::evaluate):
        * kjs/nodes.h:
        (KJS::Node::):
        (KJS::ImmediateNumberNode::):
        * kjs/nodes2string.cpp:
        (ImmediateNumberNode::streamTo):

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

        Reviewed by Maciej.

        - http://bugs.webkit.org/show_bug.cgi?id=15657
          change static hash tables to use powers of two for speed

        Seems to give 0.7% SunSpider speedup.

        * kjs/create_hash_table: Updated to generate new format.
        * kjs/lookup.cpp:
        (KJS::keysMatch): Took out unneeded typecast.
        (KJS::findEntry): Updated to expect table type 3 -- changed the printf to a plain old assert.
        Replaced the modulus with a bit mask.
        (KJS::Lookup::findEntry): Get the hash directly, since we know identifiers already have computed
        their hash -- saves a branch.
        (KJS::Lookup::find): Ditto.
        * kjs/lookup.h: Changed attr from 2-byte value to one-byte value. Replaced hashSize with hashSizeMask.

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

        Reviewed by Darin.
        
        - remove KJS_CHECKEXCEPTIONs in places where exceptions can't happen for 0.6% SunSpider speedup

        * kjs/nodes.cpp:
        (KJS::DoWhileNode::execute):
        (KJS::WhileNode::execute):
        (KJS::ForNode::execute):
        (KJS::ForInNode::execute):
        (KJS::SourceElementsNode::execute):

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

        Reviewed by Maciej.

        * kjs/JSImmediate.h: (KJS::JSImmediate::getUInt32):
        Changed an && to an & for a 1% gain in SunSpider.

2007-10-23  Oliver Hunt  <oliver@apple.com>

        Reviewed by Maciej.

        Reduce branching in implementations of some operator implementations, yielding 1.3% boost to SunSpider.

        * kjs/nodes.cpp:
        (KJS::MultNode::evaluate):
        (KJS::DivNode::evaluate):
        (KJS::ModNode::evaluate):
        (KJS::add):
        (KJS::sub):
        (KJS::AddNode::evaluate):
        (KJS::SubNode::evaluate):
        (KJS::valueForReadModifyAssignment):
        * kjs/operations.cpp:
        * kjs/operations.h:

2007-10-23  Oliver Hunt  <oliver@apple.com>

        Reviewed by Maciej.

        Separating all of the simple (eg. non-read-modify-write) binary operators
        into separate classes in preparation for further JS optimisations.
        
        Happily this produces a 0.8% to 1.0% performance increase in SunSpider with
        no further work.

        * JavaScriptCore.xcodeproj/project.pbxproj:
        * kjs/grammar.y:
        * kjs/nodes.cpp:
        (KJS::MultNode::evaluate):
        (KJS::DivNode::evaluate):
        (KJS::ModNode::evaluate):
        (KJS::AddNode::evaluate):
        (KJS::SubNode::evaluate):
        (KJS::LeftShiftNode::evaluate):
        (KJS::RightShiftNode::evaluate):
        (KJS::UnsignedRightShiftNode::evaluate):
        (KJS::LessNode::evaluate):
        (KJS::GreaterNode::evaluate):
        (KJS::LessEqNode::evaluate):
        (KJS::GreaterEqNode::evaluate):
        (KJS::InstanceOfNode::evaluate):
        (KJS::InNode::evaluate):
        (KJS::EqualNode::evaluate):
        (KJS::NotEqualNode::evaluate):
        (KJS::StrictEqualNode::evaluate):
        (KJS::NotStrictEqualNode::evaluate):
        (KJS::BitAndNode::evaluate):
        (KJS::BitXOrNode::evaluate):
        (KJS::BitOrNode::evaluate):
        (KJS::LogicalAndNode::evaluate):
        (KJS::LogicalOrNode::evaluate):
        * kjs/nodes.h:
        (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::InstanceOfNode::):
        (KJS::InNode::):
        (KJS::EqualNode::):
        (KJS::NotEqualNode::):
        (KJS::StrictEqualNode::):
        (KJS::NotStrictEqualNode::):
        (KJS::BitAndNode::):
        (KJS::BitOrNode::):
        (KJS::BitXOrNode::):
        (KJS::LogicalAndNode::):
        (KJS::LogicalOrNode::):
        * kjs/nodes2string.cpp:
        (MultNode::streamTo):
        (DivNode::streamTo):
        (ModNode::streamTo):
        (AddNode::streamTo):
        (SubNode::streamTo):
        (LeftShiftNode::streamTo):
        (RightShiftNode::streamTo):
        (UnsignedRightShiftNode::streamTo):
        (LessNode::streamTo):
        (GreaterNode::streamTo):
        (LessEqNode::streamTo):
        (GreaterEqNode::streamTo):
        (InstanceOfNode::streamTo):
        (InNode::streamTo):
        (EqualNode::streamTo):
        (NotEqualNode::streamTo):
        (StrictEqualNode::streamTo):
        (NotStrictEqualNode::streamTo):
        (BitAndNode::streamTo):
        (BitXOrNode::streamTo):
        (BitOrNode::streamTo):
        (LogicalAndNode::streamTo):

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

        Reviewed by Maciej.

        - fix http://bugs.webkit.org/show_bug.cgi?id=15639
          fix Math.abs(0), Math.ceil(-0), and Math.floor(-0)

        Test: fast/js/math.html

        * kjs/math_object.cpp: (MathFuncImp::callAsFunction):
        Fix abs to look at the sign bit. Add a special case for values in the range
        between -0 and -1 and a special case for ceil and for -0 for floor.

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

        Reviewed by Eric.

        - streamline exception handling code for a >1% speed-up of SunSpider

        * kjs/nodes.cpp: Changed macros to use functions for everything that's not
        part of normal execution. We'll take function call overhead when propagating
        an exception or out of memory.
        (KJS::createOutOfMemoryCompletion): Added.
        (KJS::substitute): Use append instead of the relatively inefficient + operator.
        (KJS::Node::rethrowException): Added.
        * kjs/nodes.h: Added rethrowException.

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

        Reviewed by Maciej.

        - fix http://bugs.webkit.org/show_bug.cgi?id=15636
          some JavaScriptCore regression tests are failing due to numeric conversion

        This should restore correctness and make speed better too, restoring some
        of the optimization we lost in my last check-in.

        * kjs/JSImmediate.h:
        (KJS::JSImmediate::getTruncatedInt32): Added. Uses the range checking idiom
        I used in my patch yesterday.
        (KJS::JSImmediate::getTruncatedUInt32): Ditto.

        * kjs/internal.h: Removed getInt32 and added getTruncatedInt/UInt32.
        * kjs/internal.cpp:
        (KJS::NumberImp::getUInt32): Changed to always use double, since I can't find
        a way to write this more efficiently for float.
        (KJS::NumberImp::getTruncatedInt32): Added.
        (KJS::NumberImp::getTruncatedUInt32): Added.

        * kjs/value.h: Removed getInt32 and added getTruncatedInt/UInt32.
        (KJS::JSValue::getUInt32):
        (KJS::JSValue::getTruncatedInt32): Added.
        (KJS::JSValue::getTruncatedUInt32): Added.
        (KJS::JSValue::toInt32): Changed getInt32 call to getTruncatedInt32.
        (KJS::JSValue::toUInt32): Changed getUInt32 call to getTruncatedUInt32.
        * kjs/value.cpp:
        (KJS::JSCell::getTruncatedInt32): Added.
        (KJS::JSCell::getTruncatedUInt32): Added.
        (KJS::JSValue::toInteger): Changed getUInt32 call to getTruncatedInt32.
        (KJS::JSValue::toInt32SlowCase): Removed extra getInt32 call I accidentally
        had left in here.
        (KJS::JSValue::toUInt32SlowCase): Ditto.
        (KJS::JSValue::toUInt16): Changed getUInt32 call to getTruncatedUInt32.

        * JavaScriptCore.exp: Updated.

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

        Reviewed by Geoff.

        - fix http://bugs.webkit.org/show_bug.cgi?id=15632
          js1_5/Array/array-001.js test failing

        One of the JavaScriptCore tests was failing; it failed because of
        my change to NumberImp::getUInt32. The incorrect code I copied was
        from JSImmediate::getUInt32, and was a pre-existing bug.

        This patch fixes correctness, but will surely slow down SunSpider.
        We may be able to code this tighter and get the speed back.

        * kjs/JSImmediate.h:
        (KJS::JSImmediate::getInt32): Renamed from toInt32 to more accurately
        reflect the fact that this function only returns true if the value is
        accurate (no fractional part, etc.). Changed code so that it returns
        false when the value has a fraction.
        (KJS::JSImmediate::getUInt32): Ditto.

        * kjs/internal.cpp:
        (KJS::NumberImp::getInt32): Changed code so that it returns false when
        the value has a fraction. Restores the old behavior.
        (KJS::NumberImp::getUInt32): Ditto.

        * kjs/value.h:
        (KJS::JSValue::getInt32): Updated for name change.
        (KJS::JSValue::getUInt32): Ditto.
        (KJS::JSValue::toInt32): Ditto.
        (KJS::JSValue::toUInt32): Ditto.

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

        Reviewed by Brady.

        - fix crash seen when running JavaScriptCore tests

        * kjs/array_instance.cpp: (KJS::ArrayInstance::mark):
        Copy and paste error: I accidentally had code here that was
        making a copy of the HashMap -- that's illegal inside a mark
        function and was unnecessary. The other callsite was modifying
        the map as it iterated it, but this function is not.

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

        Reviewed by Oliver.
        
        - Avoid moving floats into integer registers in jsNumber() for 3% speedup on SunSpider
        http://bugs.webkit.org/show_bug.cgi?id=15627

        * kjs/JSImmediate.h:
        (KJS::JSImmediate::fromDouble): Avoid moving floats to integer
        registers since this is very slow.

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

        Reviewed by Eric Seidel.

        - http://bugs.webkit.org/show_bug.cgi?id=15617
          improve speed of integer conversions

        Makes SunSpider 6% faster.

        * kjs/JSImmediate.h: Added toInt32 and toUInt32, with separate versions for
        32-bit and 64-bit.
        * kjs/value.h:
        (KJS::JSValue::getUInt32): Call JSImmediate::toUInt32.

        * kjs/internal.h: Added getInt32.
        * kjs/internal.cpp:
        (KJS::NumberImp::getInt32): Added.
        (KJS::NumberImp::getUInt32): Replaced with more-optimal implementation
        stolen from JSValue.

        * kjs/value.h:
        (KJS::jsNumber): Marked ALWAYS_INLINE, because this wasn't getting
        inlined.
        (KJS::JSValue::getInt32): Added.
        (KJS::JSValue::getUInt32): Changed to call the new JSImmediate::toUInt32
        to avoid converting from float to double.
        (KJS::JSValue::toInt32): Made inline, separated out the slow case.
        (KJS::JSValue::toUInt32): Ditto.
        * kjs/value.cpp:
        (KJS::JSCell::getInt32): Added.
        (KJS::JSValue::toInt32SlowCase): Renamed from toInt32. Changed to use the
        new getInt32. Added a faster case for in-range numbers.
        (KJS::JSValue::toUInt32SlowCase): Ditto.
        (KJS::JSValue::toUInt16): Added a faster case for in-range numbers.

        * JavaScriptCore.exp: Updated for changes.

2007-10-22  Adam Roben  <aroben@apple.com>

        Windows build fix

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Turn off
        warning about implicit conversion to bool.

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

        Gtk build fix.

        * kjs/array_instance.cpp:

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

        Reviewed by Maciej.

        - http://bugs.webkit.org/show_bug.cgi?id=15606
          make cut-off for sparse vs. dense arrays smarter for speed with large arrays

        Makes the morph test in SunSpider 26% faster, and the overall
        benchmark 3% faster.

        This also fixes some small problems we had with the distinction
        between nonexistent and undefined values in arrays.

        * kjs/array_instance.h: Tweaked formatting and naming.
        * kjs/array_instance.cpp: Copied from kjs/array_object.cpp.
        (KJS::storageSize): Added. Computes the size of the storage given a vector length.
        (KJS::increasedVectorLength): Added. Implements the rule for resizing the vector.
        (KJS::isDenseEnoughForVector): Added.
        (KJS::ArrayInstance::ArrayInstance): Initialize the new fields.
        (KJS::ArrayInstance::~ArrayInstance): Since m_storage is now never 0, delete it.
        (KJS::ArrayInstance::getItem): Updated for name changes.
        (KJS::ArrayInstance::lengthGetter): Ditto.
        (KJS::ArrayInstance::inlineGetOwnPropertySlot): Added. Allows both versions of
        getOwnPropertySlot to share more code.
        (KJS::ArrayInstance::getOwnPropertySlot): Just refactored, no code change.
        (KJS::ArrayInstance::put): Added logic for extending the vector as long as the
        array is dense enough. Also keep m_numValuesInVector up to date.
        (KJS::ArrayInstance::deleteProperty): Added code to keep m_numValuesInVector
        up to date.
        (KJS::ArrayInstance::getPropertyNames): Fixed bug where this would omit names
        for array indices with undefined values.
        (KJS::ArrayInstance::increaseVectorLength): Renamed from resizeStorage. Also
        simplified to only handle getting larger.
        (KJS::ArrayInstance::setLength): Added code to update m_numValuesInVector, to
        zero out the unused part of the vector and to delete the map if it's no longer
        needed.
        (KJS::ArrayInstance::mark): Tweaked formatting.
        (KJS::compareByStringForQSort): Ditto.
        (KJS::ArrayInstance::sort): Ditto.
        (KJS::CompareWithCompareFunctionArguments::CompareWithCompareFunctionArguments):
        Ditto.
        (KJS::compareWithCompareFunctionForQSort): Ditto.
        (KJS::ArrayInstance::compactForSorting): Fixed bug where this would turn
        undefined values into nonexistent values in some cases.

        * kjs/array_object.h: Removed MAX_ARRAY_INDEX.
        * kjs/array_object.cpp: Removed ArrayInstance. Moved to a separate file.

        * JavaScriptCore.pri: Added array_instance.cpp.
        * JavaScriptCore.xcodeproj/project.pbxproj: Ditto.
        * kjs/AllInOneFile.cpp: Ditto.

2007-10-22  Andrew Wellington  <proton@wiretapped.net>

        Reviewed by Mark Rowe.
        
        Fix for local database support after r26879
        Ensure that ENABLE_DATABASE and ENABLE_ICONDATABASE are correctly set

        * Configurations/JavaScriptCore.xcconfig:

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

        Reviewed by Alp.

        Build fix for the non-qmake builds.

        * wtf/Platform.h: Default to enabling the database features unless
        otherwise specified. (similar to ENABLE_ICONDATABASE)

2007-10-22  Holger Freyther  <zecke@selfish.org>

        Reviewed by Simon Hausmann <hausmann@kde.org>.

        * Do not build testkjs as an application bundle. This is
        needed for run-javascriptcore-tests on OSX.
        * Also, based on r26633, allow to test the WebKit/Qt port on OSX.
        * Set DYLD_LIBRARY_PATH if it was set in the environment. It must be set
        as we do not have -rpath on OSX.

        * kjs/testkjs.pro:

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

        Reviewed by Alp.

        http://bugs.webkit.org/show_bug.cgi?id=15575
        Bug 15575: [GTK] Implement threading using GThread

        * wtf/Platform.h: Do not enable pthreads for Gtk.

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

        Reviewed by Mitz.

        Fix http://bugs.webkit.org/show_bug.cgi?id=15603
        Bug 15603: Regression(r26847): Crash when sorting an empty array from JavaScript

        * kjs/array_object.cpp:
        (KJS::freeStorage): Reinstate null-check that was removed in r26847.

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

        - fix Windows build

        * kjs/array_instance.h: Removed unused ExecState parameter.
        * kjs/array_object.cpp:
        (KJS::ArrayInstance::put): Ditto.
        (KJS::ArrayInstance::setLength): Ditto.

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

        * kjs/array_object.cpp: (KJS::ArrayInstance::put):
        Add missing assignment that was causing regression test crash.

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

        Reviewed by Maciej.

        - http://bugs.webkit.org/show_bug.cgi?id=15585
          speed up sparse arrays by using a custom map
    
        Speeds up SunSpider by 10%.

        * kjs/array_object.cpp:
        (allocateStorage): Leave room for an additional pointer.
        (reallocateStorage): Ditto.
        (freeStorage): Ditto.
        (ArrayInstance::~ArrayInstance): Delete the overflow map if present.
        (ArrayInstance::getItem): Read values from the overflow map if present.
        Removed the check of length, since it slows down the common case.
        (ArrayInstance::getOwnPropertySlot): Ditto. Also removed the fallback
        to the property map.
        (ArrayInstance::put): Write values into the overflow map as needed.
        Also create overflow map when needed.
        (ArrayInstance::deleteProperty): Remove values from the overflow map
        as appropriate.
        (ArrayInstance::getPropertyNames): Add a name for each identifier in
        the property map. This is extremely inefficient.
        (ArrayInstance::setLength): Remove any values in the overflow map
        that are past the new length, as we formerly did with the property map.
        (ArrayInstance::mark): Mark any values in the overflow map.
        (compareByStringForQSort): Removed unneeded undefined case, since
        compactForSorting guarantees we will have no undefined values.
        (compareWithCompareFunctionForQSort): Ditto.
        (ArrayInstance::compactForSorting): Copy all the values out of the
        overflow map and destroy it.

        * kjs/property_map.h: Removed now-unused getSparseArrayPropertyNames.
        * kjs/property_map.cpp: Ditto.

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

        Reviewed by Maciej.

        - http://bugs.webkit.org/show_bug.cgi?id=15579
          stop churning identifier reference counts copying Completion objects

        * kjs/completion.h: Replace the Identifier with an Identifier*.
        * kjs/nodes.cpp:
        (ForInNode::execute): Update for change to Completion constructor.
        (ContinueNode::execute): Ditto.
        (BreakNode::execute): Ditto.

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

        Reviewed by Alp.

        Gtk changes needed to enable HTML 5 client-side database storage.

        * wtf/Platform.h: Have Gtk use pthreads for now.

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

        Reviewed by Maciej Stachowiak.

        Fixed http://bugs.webkit.org/show_bug.cgi?id=15570
        Store gathered declaration nodes in the function body node.
        
        This means that you only have to gather the declaration nodes the first 
        time the function executes. Performance gain of 2.10% on SunSpider, 
        0.90% on command-line JS iBench.

        * kjs/nodes.cpp: Split declaration stack initialization code off into 
        initializeDeclarationStacks().
        (FunctionBodyNode::FunctionBodyNode):
        (FunctionBodyNode::initializeDeclarationStacks):
        (FunctionBodyNode::processDeclarations):

        * kjs/nodes.h: Changed DeclarationStacks structure to hold references, 
        since the actual Vectors are now stored either on the stack or in the 
        function body node.

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

        Reviewed by Darin Adler.
        
        http://bugs.webkit.org/show_bug.cgi?id=15559
        Moved processDeclarations call into FunctionBodyNode::execute

        To improve encapsulation, moved processDeclarations call into
        FunctionBodyNode::execute. Also marked processDeclarations 
        ALWAYS_INLINE, since it has only 1 caller now. This is a .71% speedup 
        on command-line JS iBench.

        * kjs/function.cpp:
        (KJS::FunctionImp::callAsFunction):
        (KJS::GlobalFuncImp::callAsFunction):
        * kjs/function.h:
        * kjs/interpreter.cpp:
        (KJS::Interpreter::evaluate):
        * kjs/nodes.cpp:
        (FunctionBodyNode::execute):
        * kjs/nodes.h:

2007-10-19  Brady Eidson  <beidson@apple.com>

        Reviewed by Sam

        Queue -> Deque! and small style tweaks

        * JavaScriptCore.vcproj/WTF/WTF.vcproj:
        * JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj
        * wtf/Deque.h: Added.
        (WTF::DequeNode::DequeNode):
        (WTF::Deque::Deque):
        (WTF::Deque::~Deque):
        (WTF::Deque::size):
        (WTF::Deque::isEmpty):
        (WTF::Deque::append):
        (WTF::Deque::prepend):
        (WTF::Deque::first):
        (WTF::Deque::last):
        (WTF::Deque::removeFirst):
        (WTF::Deque::clear):
        * wtf/Queue.h: Removed.


2007-10-19  Brady Eidson <beidson@apple.com>

        Reviewed by Oliver

        Added a simple LinkedList based Queue to wtf
        We can make a better, more sophisticated an efficient one later, but have
        needed one for some time, now!

        * JavaScriptCore.xcodeproj/project.pbxproj:
        * wtf/Queue.h: Added.
        (WTF::QueueNode::QueueNode):
        (WTF::Queue::Queue):
        (WTF::Queue::~Queue):
        (WTF::Queue::size):
        (WTF::Queue::isEmpty):
        (WTF::Queue::append):
        (WTF::Queue::prepend):
        (WTF::Queue::first):
        (WTF::Queue::last):
        (WTF::Queue::removeFirst):
        (WTF::Queue::clear):

2007-10-19  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Anders.

        Try to fix Qt/Win build slave, by including windows.h also on Qt/Win.

        * kjs/testkjs.cpp: Change PLATFORM(WIN) to PLATFORM(WIN_OS)

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

        Reviewed by Lars.

        Fix compilation on Windows when wchar_t is a typedef instead of a native type (triggered by -Zc:wchar_t-).
        Don't provide the wchar_t overloads then as they conflict with the unsigned short ones.

        * wtf/ASCIICType.h:
        (WTF::isASCIIAlpha):
        (WTF::isASCIIAlphanumeric):
        (WTF::isASCIIDigit):
        (WTF::isASCIIHexDigit):
        (WTF::isASCIILower):
        (WTF::isASCIISpace):
        (WTF::toASCIILower):
        (WTF::toASCIIUpper):

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

        Reviewed by Lars.

        Another build fix for the windows/qt build: Apply the same fix as in revision 26686 also to kjs/config.h to disable the disallowctype feature.

        * kjs/config.h:

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

        Reviewed by Adam.
        
        - use __declspec(thread) for fast thread-local storage on Windows
        
        - 2.2% speedup on sunspider (on Windows)
        - 7% speedup on the string section
        - 6% speedup on JS iBench
        
        - fixed <rdar://problem/5473084> PLT on Windows got 2.5% slower between r25406 and r25422
        - fixed at least some of <rdar://5527965? i-Bench JS was 14% slower in 310A11 than 310A10
        
        
        * wtf/FastMalloc.cpp:
        (WTF::getThreadHeap):
        (WTF::setThreadHeap):
        (WTF::TCMalloc_ThreadCache::GetCache):
        (WTF::TCMalloc_ThreadCache::GetCacheIfPresent):
        (WTF::TCMalloc_ThreadCache::CreateCacheIfNecessary):

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

        Reviewed by Mark Rowe.

        - fix http://bugs.webkit.org/show_bug.cgi?id=15543
          <rdar://problem/5545639> REGRESSION (r26697):
          GoogleDocs: Can't create new documents or open existing ones

        Test: fast/js/regexp-non-character.html

        * pcre/pcre_compile.c: (check_escape): Take out the checks for valid characters
        in the \u sequences -- not needed and actively harmful.

2007-10-17  Anders Carlsson  <andersca@apple.com>

        Reviewed by Oliver.

        * wtf/Platform.h:
        #define USE_PTHREADS on Mac.

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

        Reviewed by Darin Adler.
        
        Merged DeclaredFunctionImp into FunctionImp (the base class) because 
        the distinction between the two was unused.
        
        Removed codeType() from FunctionImp because FunctionImp and its 
        subclasses all returned FunctionCode, so it was unused, practically 
        speaking.
        
        Removed a different codeType() from GlobalFuncImp because it was unused.
        (Perhaps it was vestigial from a time when GlobalFuncImp used to 
        inherit from FunctionImp.)

        * bindings/runtime_method.cpp:
        * bindings/runtime_method.h:
        * kjs/function.cpp:
        (KJS::):
        (KJS::FunctionImp::FunctionImp):
        (KJS::FunctionImp::callAsFunction):
        (KJS::FunctionImp::construct):
        (KJS::FunctionImp::execute):
        (KJS::FunctionImp::processVarDecls):
        * kjs/function.h:
        (KJS::FunctionImp::implementsConstruct):
        (KJS::FunctionImp::scope):
        * kjs/function_object.cpp:
        (FunctionProtoFunc::callAsFunction):
        (FunctionObjectImp::construct):
        * kjs/nodes.cpp:
        (FuncDeclNode::processFuncDecl):
        (FuncExprNode::evaluate):

2007-10-17  Adam Roben  <aroben@apple.com>

        Windows build fix part 2.

        Fix was by Darin, reviewed by Anders and Adam.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Add
        FastMallocPCRE.cpp to the project, and let Visual Studio have its way
        with the post-build step.
        * pcre/pcre.h: Don't DLL export the entry points just because this
        is Win32 -- this is an internal copy of PCRE and should be private.
        * pcre/pcre_compile.c: Fix an uninitialized variable warning --
        there's no real problem but it's better to quiet the compiler by
        tweaking the code slightly than turn off the warning entirely.

2007-10-17  Adam Roben  <aroben@apple.com>

        Windows build fix.

        Reviewed by Anders.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Disable
        some mismatched signed/unsigned comparison warnings.
        * pcre/pcre_exec.c:
        (match): #if-out some labels that don't seem to exist.

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

        Gtk build fix.

        * JavaScriptCore.pri: Add FastMallocPCRE.cpp.
        * pcre/pcre_get. #if out two functions that depend on pcre_get_stringnumber, which
        is currently unavailable for UTF-16.

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

        Reviewed by Geoff.

        - merged PCRE changes between 6.4 and 6.5

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        Removed pcre_config.c, pcre_globals.c, pcre_info.c, pcre_maketables.c,
        pcre_printint.src, pcre_refcount.c, pcre_study.c, pcre_try_flipped.c,
        pcre_ucp_findchar.c, pcre_version.c, and ucptable.c. Added pcre_ucp_searchfuncs.c.

        * pcre/AUTHORS:
        * pcre/LICENCE:
        * pcre/MERGING:
        * pcre/dftables.c:
        * pcre/pcre-config.h:
        * pcre/pcre.h:
        * pcre/pcre.pri:
        * pcre/pcre_compile.c:
        * pcre/pcre_exec.c:
        * pcre/pcre_fullinfo.c:
        * pcre/pcre_get.c:
        * pcre/pcre_internal.h:
        * pcre/pcre_maketables.c:
        * pcre/pcre_ord2utf8.c:
        * pcre/pcre_tables.c:
        * pcre/pcre_ucp_searchfuncs.c: Copied from pcre/pcre_ucp_findchar.c.
        * pcre/pcre_xclass.c:
        * pcre/ucp.h:
        * pcre/ucpinternal.h:
        * pcre/ucptable.c:
        Updated with new versions from the PCRE 6.5 release, merged with changes.

        * pcre/pcre_config.c: Removed.
        * pcre/pcre_globals.c: Removed.
        * pcre/pcre_info.c: Removed.
        * pcre/pcre_printint.src: Removed.
        * pcre/pcre_refcount.c: Removed.
        * pcre/pcre_study.c: Removed.
        * pcre/pcre_try_flipped.c: Removed.
        * pcre/pcre_ucp_findchar.c: Removed.
        * pcre/pcre_version.c: Removed.

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

        Reviewed by Darin Adler.

        Removed KJS_VERBOSE because it was getting in the way of readability, 
        and the messages didn't seem very helpful.

        * kjs/function.cpp:
        (KJS::FunctionImp::callAsFunction):
        (KJS::FunctionImp::passInParameters):
        * kjs/lookup.h:
        (KJS::lookupPut):
        * kjs/object.cpp:
        (KJS::JSObject::put):
        * kjs/value.h:

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

        Reviewed by Darin Adler.
        
        Removed the Parameter class because it was a redundant wrapper around 
        Identifier.

        * kjs/function.cpp:
        (KJS::FunctionImp::passInParameters):
        (KJS::FunctionImp::getParameterName):
        * kjs/nodes.cpp:
        (FunctionBodyNode::addParam):
        * kjs/nodes.h:
        (KJS::FunctionBodyNode::):

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

        Reviewed by Darin Adler.
        
        Global replace of assert with ASSERT.

2007-10-16  Adam Roben  <aroben@apple.com>

        Make testkjs not delay-load WebKit

        Soon, delay-loading WebKit will be impossible (because we will be
        using __declspec(thread) for thread-local storage). This change
        prepares testkjs for the future.

        Reviewed by Sam.

        * JavaScriptCore.vcproj/JavaScriptCore.sln: Removed WebKitInitializer,
        added FindSafari.
        * JavaScriptCore.vcproj/testkjs/testkjs.vcproj: Don't link against
        WebKitInitializer, don't delay-load WebKit.
        * kjs/testkjs.cpp: Don't use WebKitInitializer.

2007-10-16  Adam Roben  <aroben@apple.com>

        Updated testkjs for the rename of WebKit_debug.dll to WebKit.dll for the Debug configuration

        Reviewed by Kevin McCullough.

        * JavaScriptCore.vcproj/debug.vsprops: Added WebKitDLLConfigSuffix.
        * JavaScriptCore.vcproj/debug_internal.vsprops: Ditto.
        * JavaScriptCore.vcproj/release.vsprops: Ditto.
        * JavaScriptCore.vcproj/testkjs/testkjs.vcproj: Use
        WebKitDLLConfigSuffix when referring to WebKit.dll, and fixed a typo
        in the name of icuuc36[_debug].dll.

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

        Reviewed by Maciej Stachowiak.
        
        Re-structured variable and function declaration code.
        
        Command-line JS iBench shows no regression.
        
        Here are the changes:

        1. Function declarations are now processed at the same time as var 
        declarations -- namely, immediately upon entry to an execution context. 
        This does not match Firefox, which waits to process a function
        declaration until the declaration's containing block executes, but it 
        does match IE and the ECMA spec. (10.1.3 states that var and function 
        declarations should be processed at the same time -- namely, "On 
        entering an execution context." 12.2 states that "A Block does not 
        define a new execution scope.")

        2. Declaration processing proceeds iteratively now, rather than 
        recursively, storing the nodes is finds in stacks. This will later 
        facilitate an optimization to hold on to the gathered declaration nodes, 
        rather than re-fetching them in every function call. 
        [ http://bugs.webkit.org/show_bug.cgi?id=14868 ]

        Modified these tests because they expected the incorrect Mozilla 
        behavior described above:

        * tests/mozilla/ecma_3/Function/scope-001.js:
        * tests/mozilla/js1_5/Scope/regress-184107.js:

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

        - try to fix the GTK build

        * kjs/ustring.cpp: Include ASCIICType.h, not ASCIICtype.h.

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

        - try to fix the Windows build

        * kjs/date_object.cpp: (KJS::parseDate): A couple instances of isspace were
        in here. Not sure why it wasn't failing elsewhere. Changed to isASCIISpace.

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

        - try to fix the GTK build

        * kjs/ustring.cpp: Include ASCIICType.h.

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

        Reviewed by Maciej and Geoff (and looked over by Eric).

        - http://bugs.webkit.org/show_bug.cgi?id=15519
          eliminate use of <ctype.h> for processing ASCII

        * wtf/ASCIICType.h: Added.
        * wtf/DisallowCType.h: Added.

        * kjs/config.h: Include DisallowCType.h.

        * kjs/date_object.cpp:
        (KJS::skipSpacesAndComments):
        (KJS::findMonth):
        (KJS::parseDate):
        * kjs/function.cpp:
        (KJS::decode):
        * kjs/ustring.cpp:
        (KJS::UString::toDouble):
        Use ASCIICType.h functions instead of ctype.h ones.

2007-10-14  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin.

        - fixes for "New JavaScript benchmark"
        http://bugs.webkit.org/show_bug.cgi?id=15515
        
        * kjs/testkjs.cpp:
        (TestFunctionImp::callAsFunction): Implement "load" for compatibility
        with SpiderMonkey.
        (TestFunctionImp::): ditto
        (doIt): ditto
        (kjsmain): Drop useless --> from output.

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

        Removed unnecessary #include.

        * API/JSObjectRef.cpp:

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

        Double-reverse build fix. My tree was out of date.

        * kjs/nodes.cpp:
        (NumberNode::evaluate):

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

        Build fix.

        * kjs/nodes.cpp:
        (NumberNode::evaluate):

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

        Reviewed by Darin Adler.
        
        Removed surprising self-named "hack" that made nested functions 
        available as named properties of their containing functions, and placed
        containing function objects in the scope chains of nested functions.
        
        There were a few reasons to remove this "hack:"

        1. It contradicted FF, IE, and the ECMA spec.

        2. It incurred a performance penalty, since merely parsing a function 
        required parsing its body for nested functions (and so on).

        3. SVN history contains no explanation for why it was added. It was just
        legacy code in a large merge a long, long time ago.

        [ Patch broken off from http://bugs.webkit.org/show_bug.cgi?id=14868 ]

        * kjs/nodes.cpp:
        (FuncDeclNode::processFuncDecl):

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

        Reviewed by Darin Adler.
        
        Removed the concept of AnonymousCode. It was unused, and it doesn't
        exist in the ECMA spec.
        
        [ Patch broken off from http://bugs.webkit.org/show_bug.cgi?id=14868 ]

        * kjs/Context.cpp:
        (KJS::Context::Context):
        * kjs/function.h:
        (KJS::):
        * kjs/nodes.cpp:
        (ReturnNode::execute):

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

        Reviewed by Darin Adler.
        
        Made function parameters DontDelete. This matches FF and the vague
        description in ECMA 10.1.3. It's also required in order to make
        symbol table based lookup of function parameters valid. (If the 
        parameters aren't DontDelete, you can't guarantee that you'll find
        them later in the symbol table.)

        [ Patch broken off from http://bugs.webkit.org/show_bug.cgi?id=14868 ]

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

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

        Reviewed by Maciej Stachowiak.
        
        Some Vector optimizations. These are especially important when using
        Vector as a stack for implementing recursive algorithms iteratively.
        
        [ Broken off from http://bugs.webkit.org/show_bug.cgi?id=14868 ]

        1. Added shrink(), which is a version of resize() that you can call
        to save a branch / improve code generation and inlining when you know 
        that the vector is not getting bigger.
        
        2. Changed subclassing relationship in VectorBuffer to remove a call to
        fastFree() in the destructor for the inlineCapacity != 0 template
        specialization. This brings inline Vectors one step closer to true
        stack-allocated arrays.
        
        Also changed abort() to CRASH(), since the latter works better.

        * wtf/Vector.h:
        (WTF::VectorBufferBase::allocateBuffer):
        (WTF::VectorBufferBase::deallocateBuffer):
        (WTF::VectorBufferBase::VectorBufferBase):
        (WTF::VectorBufferBase::~VectorBufferBase):
        (WTF::):
        (WTF::VectorBuffer::VectorBuffer):
        (WTF::VectorBuffer::~VectorBuffer):
        (WTF::VectorBuffer::deallocateBuffer):
        (WTF::VectorBuffer::releaseBuffer):
        (WTF::Vector::clear):
        (WTF::Vector::removeLast):
        (WTF::::operator):
        (WTF::::fill):
        (WTF::::shrink):

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

        Reviewed by Maciej Stachowiak.
        
        Fixed http://bugs.webkit.org/show_bug.cgi?id=15490
        Iteration statements sometimes incorrectly evaluate to the empty value 
        (KDE r670547). 
        
        [ Broken off from http://bugs.webkit.org/show_bug.cgi?id=14868 ]
        
        This patch is a merge of KDE r670547, with substantial modification 
        for performance.
        
        It fixes do-while statements to evaluate to a value. (They used
        to evaluate to the empty value in all cases.) 

        It also fixes SourceElementsNode to maintain the value of abnormal 
        completions like "break" and "continue."
        
        It also re-works the main execution loop in SourceElementsNode so that
        it (1) makes a little more sense and (2) avoids unnecessary work. This 
        is a .28% speedup on command-line JS iBench.

        * kjs/nodes.cpp:
        (DoWhileNode::execute):
        (SourceElementsNode::execute):

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

        Reviewed by Lars.

        Fix compilation with gcc 4.3 by including 'limits' due to the use of std::numeric_limits.

        * wtf/HashTraits.h:

2007-10-5  Kevin Ollivier  <kevino@theolliviers.com>
 
        Reviewed by Adam.
        
        Add support for MSVC7, and fix cases where PLATFORM(WIN) should
        be PLATFORM(WIN_OS) for other ports building on Windows.
 
        * kjs/DateMath.cpp:
        (KJS::getDSTOffsetSimple):
        * kjs/JSImmediate.h:
        * wtf/Assertions.cpp:
        * wtf/Assertions.h:
        * wtf/Platform.h:
        * wtf/StringExtras.h:
        (snprintf):
        (vsnprintf):

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

        Reviewed by Darin.

        Adds NegateNode optimization from KJS. The relevant revision in KDE
        is 666736.

        * kjs/grammar.y:
        * kjs/nodes.cpp:
        (NumberNode::evaluate):
        * kjs/nodes.h:
        (KJS::Node::):
        (KJS::NumberNode::):
        * kjs/nodes2string.cpp:
        (NumberNode::streamTo):

2007-10-14  Jason Foreman  <jason@threeve.org>

        Reviewed by Maciej.

        Fix http://bugs.webkit.org/show_bug.cgi?id=15145
        
        Ensure that if adjusting n to minimize the difference of n*intPow10(e-p+1) to x,
        that the property n < intPow10(p) is maintained.

        * kjs/number_object.cpp:
        (NumberProtoFunc::callAsFunction):

== Rolled over to ChangeLog-2007-10-14 ==
