• ggaren@apple.com's avatar
    JavaScriptCore: · 1d4bd449
    ggaren@apple.com authored
    2009-02-13  Geoffrey Garen  <ggaren@apple.com>
            Reviewed by Darin Adler.
            Fixed <rdar://problem/6584057> Optimize sort by JS numeric comparison
            function not to run the comparison function
            * bytecode/CodeBlock.cpp:
            * bytecode/CodeBlock.h:
            (JSC::CodeBlock::isNumericCompareFunction): Added the ability to track
            whether a CodeBlock performs a sort-like numeric comparison.
            * bytecompiler/BytecodeGenerator.cpp:
            (JSC::BytecodeGenerator::generate): Set the isNumericCompareFunction bit
            after compiling.
            * parser/Nodes.cpp:
            (JSC::FunctionBodyNode::emitBytecode): Fixed a bug that caused us to
            codegen an extra return at the end of all functions (eek!), since this
            made it harder / weirder to detect the numeric comparison pattern in
            * runtime/ArrayPrototype.cpp:
            (JSC::arrayProtoFuncSort): Use the isNumericCompareFunction bit to do
            a faster sort if we can.
            * runtime/FunctionConstructor.cpp:
            * runtime/FunctionConstructor.h: Renamed and exported extractFunctionBody for
            use in initializing lazyNumericCompareFunction.
            * runtime/JSArray.cpp:
            * runtime/JSArray.h: Added a fast numeric sort. Renamed ArrayQSortPair
            to be more specific since we do different kinds of qsort now.
            * runtime/JSGlobalData.cpp:
            * runtime/JSGlobalData.h: Added helper data for computing the
            isNumericCompareFunction bit.
    2009-02-13  Geoffrey Garen  <ggaren@apple.com>
            Reviewed by Sam Weinig.
            Added a test for an edge case in <rdar://problem/6584057>.
            * fast/js/resources/sort-non-numbers.js: Added.
            * fast/js/sort-non-numbers.html: Added.
            * fast/js/sort-non-numbers-expected.txt: Added.
    git-svn-id: http://svn.webkit.org/repository/webkit/trunk@40993 268f45cc-cd09-0410-ab3c-d52691b4dbfc
JSArray.cpp 35.5 KB