diff options
author | Alon Zakai <alonzakai@gmail.com> | 2011-11-26 18:59:28 -0800 |
---|---|---|
committer | Alon Zakai <alonzakai@gmail.com> | 2011-11-26 18:59:28 -0800 |
commit | 17601d89617282c79a1a0e4cd381a9c2401016f5 (patch) | |
tree | c6375c120b751e616740ba000d24d9618ac03887 /tools/js-optimizer.js | |
parent | d9af31471571b868b7a7da57e7d9f14d2f52bd5a (diff) |
refactor a js optimizer pass
Diffstat (limited to 'tools/js-optimizer.js')
-rw-r--r-- | tools/js-optimizer.js | 51 |
1 files changed, 29 insertions, 22 deletions
diff --git a/tools/js-optimizer.js b/tools/js-optimizer.js index 869ca77b..e889c7a3 100644 --- a/tools/js-optimizer.js +++ b/tools/js-optimizer.js @@ -254,28 +254,35 @@ function removeUnneededLabelSettings(ast) { }); } -// We often have branchings that are simplified so one end vanishes, and -// we then get -// if (!(x < 5)) -// or such. Simplifying these saves space and time. -function simplifyNotComps(ast) { - traverse(ast, function(node, type) { - if (type == 'unary-prefix' && node[1] == '!' && node[2][0] == 'binary') { - if (node[2][1] == '<') { - return ['binary', '>=', node[2][2], node[2][3]]; - } else if (node[2][1] == '>') { - return ['binary', '<=', node[2][2], node[2][3]]; - } else if (node[2][1] == '==') { - return ['binary', '!=', node[2][2], node[2][3]]; - } else if (node[2][1] == '!=') { - return ['binary', '==', node[2][2], node[2][3]]; - } else if (node[2][1] == '===') { - return ['binary', '!==', node[2][2], node[2][3]]; - } else if (node[2][1] == '!==') { - return ['binary', '===', node[2][2], node[2][3]]; +// Various expression simplifications +function simplifyExpressions(ast) { + // We often have branchings that are simplified so one end vanishes, and + // we then get + // if (!(x < 5)) + // or such. Simplifying these saves space and time. + function simplifyNotComps(ast) { + traverse(ast, function(node, type) { + if (type == 'unary-prefix' && node[1] == '!' && node[2][0] == 'binary') { + if (node[2][1] == '<') { + return ['binary', '>=', node[2][2], node[2][3]]; + } else if (node[2][1] == '>') { + return ['binary', '<=', node[2][2], node[2][3]]; + } else if (node[2][1] == '==') { + return ['binary', '!=', node[2][2], node[2][3]]; + } else if (node[2][1] == '!=') { + return ['binary', '==', node[2][2], node[2][3]]; + } else if (node[2][1] == '===') { + return ['binary', '!==', node[2][2], node[2][3]]; + } else if (node[2][1] == '!==') { + return ['binary', '===', node[2][2], node[2][3]]; + } } - } - }); + }); + } + + // Go + + simplifyNotComps(ast); } function loopOptimizer(ast) { @@ -361,7 +368,7 @@ var passes = { unGlobalize: unGlobalize, removeAssignsToUndefined: removeAssignsToUndefined, //removeUnneededLabelSettings: removeUnneededLabelSettings, - simplifyNotComps: simplifyNotComps, + simplifyExpressions: simplifyExpressions, loopOptimizer: loopOptimizer }; |