diff options
author | Alon Zakai <alonzakai@gmail.com> | 2014-03-15 13:19:38 -0700 |
---|---|---|
committer | Alon Zakai <alonzakai@gmail.com> | 2014-03-15 13:19:38 -0700 |
commit | 7b68d960c36c0b6f7d67aa8082fef684ef355114 (patch) | |
tree | e3bc91238aec63dfeafee4d27259885a9ed40b22 /tools | |
parent | 0daeb7d072ab836ce65e95c91b4133bbba92fda9 (diff) |
remove empty subnodes after eliminate
Diffstat (limited to 'tools')
-rw-r--r-- | tools/js-optimizer.js | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/tools/js-optimizer.js b/tools/js-optimizer.js index 240ee2bd..221b555f 100644 --- a/tools/js-optimizer.js +++ b/tools/js-optimizer.js @@ -279,6 +279,28 @@ function clearEmptyNodes(list) { } } +function filterEmptyNodes(list) { // creates a copy and returns it + return list.filter(function(node) { + return !(isEmptyNode(node) || (node[0] === 'stat' && isEmptyNode(node[1]))); + }); +} + +function removeEmptySubNodes(node) { + if (node[0] === 'defun') { + node[3] = filterEmptyNodes(node[3]); + } else if (node[0] === 'block' && node[1]) { + node[1] = filterEmptyNodes(node[1]); + } +/* + var stats = getStatements(node); + if (stats) clearEmptyNodes(stats); +*/ +} + +function removeAllEmptySubNodes(ast) { + traverse(ast, removeEmptySubNodes); +} + // Passes // Dump the AST. Useful for debugging. For example, @@ -3877,6 +3899,8 @@ function eliminate(ast, memSafe) { } new ExpressionOptimizer(ast).run(); } + + removeAllEmptySubNodes(ast); } function eliminateMemSafe(ast) { @@ -5282,6 +5306,9 @@ if (extraInfoStart > 0) extraInfo = JSON.parse(src.substr(extraInfoStart + 14)); arguments_.slice(1).forEach(function(arg) { passes[arg](ast); + //traverse(ast, function(node) { + // if (isEmptyNode(node)) throw 'empty node after ' + arg; + //}); }); if (asm && last) { asmLastOpts(ast); // TODO: move out of last, to make last faster when done later (as in side modules) |