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.js7
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);