diff options
-rw-r--r-- | tools/js-optimizer.js | 16 | ||||
-rw-r--r-- | tools/test-js-optimizer-output.js | 22 | ||||
-rw-r--r-- | tools/test-js-optimizer.js | 23 |
3 files changed, 56 insertions, 5 deletions
diff --git a/tools/js-optimizer.js b/tools/js-optimizer.js index ab509f14..c5d3a79f 100644 --- a/tools/js-optimizer.js +++ b/tools/js-optimizer.js @@ -878,14 +878,20 @@ function hoistMultiples(ast) { // this label inside it (or in a later multiple, even) function tryEliminate(node) { if (node[0] == 'if') { - if (tryEliminate(node[2])) node[2] = emptyNode(); - if (node[3] && tryEliminate(node[3])) node[3] = emptyNode(); + var replaced; + if (replaced = tryEliminate(node[2])) node[2] = replaced; + if (node[3] && (replaced = tryEliminate(node[3]))) node[3] = replaced; } else { - if (node[0] == 'block' && node[1] && node[1].length == 1) { - var subNode = node[1][0]; + if (node[0] == 'block' && node[1] && node[1].length > 0) { + var subNode = node[1][node[1].length-1]; if (subNode[0] == 'stat' && subNode[1][0] == 'assign' && subNode[1][2][0] == 'name' && subNode[1][2][1] == '__label__' && subNode[1][3][0] == 'num') { - return true; + if (node[1].length == 1) { + return emptyNode(); + } else { + node[1].splice(node[1].length-1, 1); + return node; + } } } } diff --git a/tools/test-js-optimizer-output.js b/tools/test-js-optimizer-output.js index 778684de..b1bdc0f8 100644 --- a/tools/test-js-optimizer-output.js +++ b/tools/test-js-optimizer-output.js @@ -254,5 +254,27 @@ function moreLabels() { inc(); } } + pause(999); + $while_body$$while_end$31 : do { + if ($cmp3) { + var $6 = $5; + { + while (1) { + var $6; + $iter = $6 + 3; + if (FHEAP[$iter + 1] < $pct_addr) { + var $6 = $iter; + } else { + var $_lcssa = $iter; + break $while_body$$while_end$31; + } + } + } + } else { + var $_lcssa = $5; + } + } while (0); + var $_lcssa; + cheez(); } // EMSCRIPTEN_GENERATED_FUNCTIONS: ["abc", "xyz", "xyz2", "expr", "loopy", "bits", "maths", "hoisting", "demangle", "lua", "moreLabels"] diff --git a/tools/test-js-optimizer.js b/tools/test-js-optimizer.js index 0b7d7702..155aa647 100644 --- a/tools/test-js-optimizer.js +++ b/tools/test-js-optimizer.js @@ -314,5 +314,28 @@ function moreLabels() { } while (0); $if_then$$for_inc$5 : do {} while (0); } + pause(999); + $while_body$$while_end$31 : do { + if ($cmp3) { + var $6 = $5; + { + while (1) { + var $6; + $iter = $6 + 3; + if (FHEAP[$iter + 1] < $pct_addr) { + var $6 = $iter; + } else { + var $_lcssa = $iter; + break $while_body$$while_end$31; + } + } + } + } else { + var $_lcssa = $5; + __label__ = 2; + } + } while (0); + var $_lcssa; + cheez(); } // EMSCRIPTEN_GENERATED_FUNCTIONS: ["abc", "xyz", "xyz2", "expr", "loopy", "bits", "maths", "hoisting", "demangle", "lua", "moreLabels"] |