Ignore:
Timestamp:
Feb 13, 2009, 3:28:04 PM (16 years ago)
Author:
[email protected]
Message:

JavaScriptCore:

2009-02-13 Geoffrey Garen <[email protected]>

Reviewed by Darin Adler.


Fixed <rdar://problem/6584057> Optimize sort by JS numeric comparison
function not to run the comparison function


  • bytecode/CodeBlock.cpp: (JSC::CodeBlock::CodeBlock):
  • bytecode/CodeBlock.h: (JSC::CodeBlock::setIsNumericCompareFunction): (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 bytecode.
  • runtime/ArrayPrototype.cpp: (JSC::arrayProtoFuncSort): Use the isNumericCompareFunction bit to do a faster sort if we can.
  • runtime/FunctionConstructor.cpp: (JSC::extractFunctionBody): (JSC::constructFunction):
  • runtime/FunctionConstructor.h: Renamed and exported extractFunctionBody for use in initializing lazyNumericCompareFunction.
  • runtime/JSArray.cpp: (JSC::compareNumbersForQSort): (JSC::compareByStringPairForQSort): (JSC::JSArray::sortNumeric): (JSC::JSArray::sort):
  • 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: (JSC::JSGlobalData::JSGlobalData): (JSC::JSGlobalData::numericCompareFunction): (JSC::JSGlobalData::ClientData::~ClientData):
  • runtime/JSGlobalData.h: Added helper data for computing the isNumericCompareFunction bit.

LayoutTests:

2009-02-13 Geoffrey Garen <[email protected]>

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.
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/JavaScriptCore/runtime/JSGlobalData.h

    r39958 r40993  
    4747    class Heap;
    4848    class IdentifierTable;
     49    class Instruction;
    4950    class Interpreter;
    5051    class JSGlobalObject;
     
    7172        void makeUsableFromMultipleThreads() { heap.makeUsableFromMultipleThreads(); }
    7273#endif
     74
     75        const Vector<Instruction>& numericCompareFunction(ExecState*);
     76        Vector<Instruction> lazyNumericCompareFunction;
     77        bool initializingLazyNumericCompareFunction;
    7378
    7479        Interpreter* interpreter;
Note: See TracChangeset for help on using the changeset viewer.