diff options
author | Alon Zakai <alonzakai@gmail.com> | 2011-12-20 18:49:42 -0800 |
---|---|---|
committer | Alon Zakai <alonzakai@gmail.com> | 2011-12-20 18:49:42 -0800 |
commit | 7953c8c6b8911647de68b4f22206650672cbca0a (patch) | |
tree | 4af22fc77553d08912639de4ac3ee5bca0be9146 /tools/js-optimizer.js | |
parent | fadc6186ffca35a64b2cedb761439ae316af2972 (diff) |
refactoring and fixes for running more tests in new o1 and o2 modes
Diffstat (limited to 'tools/js-optimizer.js')
-rw-r--r-- | tools/js-optimizer.js | 97 |
1 files changed, 51 insertions, 46 deletions
diff --git a/tools/js-optimizer.js b/tools/js-optimizer.js index bc5d5d8c..665ba0db 100644 --- a/tools/js-optimizer.js +++ b/tools/js-optimizer.js @@ -433,52 +433,57 @@ function hoistMultiples(ast) { var more = true; while (more) { more = false; - traverse(ast, function(node, type) { - if (type == 'if' && node[2][0] == 'block' && node[2][1].length == 0) { - more = true; - if (node[2][2]) { // if there is an else, return that - return node[2][2]; - } else { - return emptyNode(); - } - } else if (type == 'block' && !node[1]) { - return emptyNode(); - } else if (type == 'block' && (node[1].length == 0 || (node[1].length == 1 && jsonCompare(node[1][0], emptyNode())))) { - more = true; - return emptyNode(); - } else if (type == 'block' && node[1].length == 1 && node[1][0][0] == 'block') { - more = true; - return node[1][0]; - } else if (type == 'stat' && node[1][0] == 'block') { - more = true; - return node[1]; - } else if (type == 'block') { - var pre = node[1].length; - node[1] = node[1].filter(function(blockItem) { return !jsonCompare(blockItem, emptyNode()) }); - if (node[1].length < pre) { - more = true; - return node; - } - } else if (type == 'defun' && node[3].length == 1 && node[3][0][0] == 'block') { - more = true; - node[3] = node[3][0][1]; - return node; - } else if (type == 'defun') { - var pre = node[3].length; - node[3] = node[3].filter(function(blockItem) { return !jsonCompare(blockItem, emptyNode()) }); - if (node[3].length < pre) { - more = true; - return node; - } - } else if (type == 'do' && node[1][0] == 'num' && jsonCompare(node[2], emptyNode())) { - more = true; - return emptyNode(); - } else if (type == 'label' && jsonCompare(node[2], emptyNode())) { - more = true; - return emptyNode(); - } else if (type == 'if' && jsonCompare(node[3], emptyNode())) { // empty else clauses - node[3] = null; - return node; + ast[1].forEach(function(node, i) { + var type = node[0]; + if (type == 'defun') { + traverse(node, function(node, type) { + if (type == 'if' && node[2][0] == 'block' && node[2][1].length == 0) { + more = true; + if (node[2][2]) { // if there is an else, return that + return node[2][2]; + } else { + return emptyNode(); + } + } else if (type == 'block' && !node[1]) { + return emptyNode(); + } else if (type == 'block' && (node[1].length == 0 || (node[1].length == 1 && jsonCompare(node[1][0], emptyNode())))) { + more = true; + return emptyNode(); + } else if (type == 'block' && node[1].length == 1 && node[1][0][0] == 'block') { + more = true; + return node[1][0]; + } else if (type == 'stat' && node[1][0] == 'block') { + more = true; + return node[1]; + } else if (type == 'block') { + var pre = node[1].length; + node[1] = node[1].filter(function(blockItem) { return !jsonCompare(blockItem, emptyNode()) }); + if (node[1].length < pre) { + more = true; + return node; + } + } else if (type == 'defun' && node[3].length == 1 && node[3][0][0] == 'block') { + more = true; + node[3] = node[3][0][1]; + return node; + } else if (type == 'defun') { + var pre = node[3].length; + node[3] = node[3].filter(function(blockItem) { return !jsonCompare(blockItem, emptyNode()) }); + if (node[3].length < pre) { + more = true; + return node; + } + } else if (type == 'do' && node[1][0] == 'num' && jsonCompare(node[2], emptyNode())) { + more = true; + return emptyNode(); + } else if (type == 'label' && jsonCompare(node[2], emptyNode())) { + more = true; + return emptyNode(); + } else if (type == 'if' && jsonCompare(node[3], emptyNode())) { // empty else clauses + node[3] = null; + return node; + } + }); } }); } |