aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--tools/js-optimizer.js16
-rw-r--r--tools/test-js-optimizer-output.js22
-rw-r--r--tools/test-js-optimizer.js23
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"]