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.js16
1 files changed, 11 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;
+ }
}
}
}