diff options
author | Alon Zakai <alonzakai@gmail.com> | 2011-12-29 12:41:06 -0800 |
---|---|---|
committer | Alon Zakai <alonzakai@gmail.com> | 2011-12-29 12:41:06 -0800 |
commit | 85436a9cc37153035a069bfe8c2dedc18b262912 (patch) | |
tree | 5636805c9a0f45e27a711635268688e5ffc1b016 /tools/js-optimizer.js | |
parent | ba798003e78b4c36f39586730304c6af8183ee89 (diff) |
work harder to not modify original order of +,+,+ sets in optimizeShifts; improves speed in corrections benchmark
Diffstat (limited to 'tools/js-optimizer.js')
-rw-r--r-- | tools/js-optimizer.js | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/tools/js-optimizer.js b/tools/js-optimizer.js index 0de2c506..738ee7ee 100644 --- a/tools/js-optimizer.js +++ b/tools/js-optimizer.js @@ -569,13 +569,16 @@ function optimizeShifts(ast) { } } flatten(node); + var originalOrder = addedItems.slice(); function key(node) { // a unique value for all relevant shifts for recombining, non-unique for stuff we don't need to bother with + function originalOrderKey(item) { + return -originalOrder.indexOf(item); + } if (node[0] == 'binary' && node[1] in SIMPLE_SHIFTS) { if (node[3][0] == 'num' && node[3][1] >= 0 && node[3][1] <= 3) return 2*node[3][1] + (node[1] == '>>' ? 100 : 0); // 0-106 - return node[1] == '>>' ? 2000 : 1000; + return (node[1] == '>>' ? 20000 : 10000) + originalOrderKey(node); } - if (node[0] == 'num') return -1000; - return -1; + return -10000 + originalOrderKey(node); // Don't modify the original order if we don't modify anything } for (var i = 0; i < addedItems.length; i++) { if (addedItems[i][0] == 'string') return; // this node is not relevant for us |