From 5f00b61350b9236c36e81dafd5e8e3a9c93b347e Mon Sep 17 00:00:00 2001 From: Alon Zakai Date: Mon, 23 Dec 2013 17:52:54 -0800 Subject: don't get confused by temporary empty nodes when calculating assigns in the loop variable optimizer --- tools/js-optimizer.js | 11 +++++++++++ 1 file changed, 11 insertions(+) (limited to 'tools/js-optimizer.js') diff --git a/tools/js-optimizer.js b/tools/js-optimizer.js index 6e82451c..587221a6 100644 --- a/tools/js-optimizer.js +++ b/tools/js-optimizer.js @@ -271,6 +271,16 @@ function isEmptyNode(node) { return node.length === 2 && node[0] === 'toplevel' && node[1].length === 0; } +function clearEmptyNodes(list) { + for (var i = 0; i < list.length;) { + if (isEmptyNode(list[i]) || (list[i][0] === 'stat' && isEmptyNode(list[i][1]))) { + list.splice(i, 1); + } else { + i++; + } + } +} + // Passes // Dump the AST. Useful for debugging. For example, @@ -2692,6 +2702,7 @@ function eliminate(ast, memSafe) { } if (ifTrue[1][0] && ifTrue[1][0][0] === 'break') { var assigns = ifFalse[1]; + clearEmptyNodes(assigns); var loopers = [], helpers = []; for (var i = 0; i < assigns.length; i++) { if (assigns[i][0] === 'stat' && assigns[i][1][0] === 'assign') { -- cgit v1.2.3-70-g09d2