-
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: (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 <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
ggaren@apple.com authored2009-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: (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 <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
Loading