diff options
author | Alon Zakai <alonzakai@gmail.com> | 2012-10-27 09:54:09 -0700 |
---|---|---|
committer | Alon Zakai <alonzakai@gmail.com> | 2012-10-27 09:54:09 -0700 |
commit | cb9b1db479868532192c764739b0578de68b91e4 (patch) | |
tree | 3f6369ea0a180c90315164784d9e31d5d66d3572 | |
parent | cc915c2b9fe03c8b3ae0de053f7444bc7cd12832 (diff) |
handle more nodes in eliminator scanning
-rw-r--r-- | tools/js-optimizer.js | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/tools/js-optimizer.js b/tools/js-optimizer.js index d44170b9..b915a9d8 100644 --- a/tools/js-optimizer.js +++ b/tools/js-optimizer.js @@ -1369,6 +1369,7 @@ function registerize(ast) { var ELIMINATION_SAFE_NODES = set('var', 'assign', 'call', 'if', 'toplevel'); var NODES_WITHOUT_ELIMINATION_SIDE_EFFECTS = set('name', 'num', 'string', 'binary', 'sub', 'unary-prefix'); var IGNORABLE_ELIMINATOR_SCAN_NODES = set('num', 'toplevel', 'string', 'break', 'continue', 'dot', 'return'); // dot can only be STRING_TABLE.* +var ABORTING_ELIMINATOR_SCAN_NODES = set('new', 'object', 'function', 'defun', 'switch', 'for'); // we could handle some of these, TODO function eliminate(ast) { // Find variables that have a single use, and if they can be eliminated, do so @@ -1655,11 +1656,11 @@ function eliminate(ast) { traverseInOrder(node[1]); traverseInOrder(node[2]); traverseInOrder(node[3]); - } else if (type == 'new' || type == 'object') { - tracked = {}; // we could do this, but nevermind + } else if (type in ABORTING_ELIMINATOR_SCAN_NODES) { + tracked = {}; abort = true; } else { - throw 'unfamiliar eliminator scan node: ' + JSON.stringify(node); + printErr('unfamiliar eliminator scan node: ' + JSON.stringify(node)); } } traverseInOrder(node); |