aboutsummaryrefslogtreecommitdiff
path: root/tools/js-optimizer.js
diff options
context:
space:
mode:
Diffstat (limited to 'tools/js-optimizer.js')
-rw-r--r--tools/js-optimizer.js9
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