aboutsummaryrefslogtreecommitdiff
path: root/tools/js-optimizer.js
diff options
context:
space:
mode:
authorAlon Zakai <alonzakai@gmail.com>2011-11-26 18:59:28 -0800
committerAlon Zakai <alonzakai@gmail.com>2011-11-26 18:59:28 -0800
commit17601d89617282c79a1a0e4cd381a9c2401016f5 (patch)
treec6375c120b751e616740ba000d24d9618ac03887 /tools/js-optimizer.js
parentd9af31471571b868b7a7da57e7d9f14d2f52bd5a (diff)
refactor a js optimizer pass
Diffstat (limited to 'tools/js-optimizer.js')
-rw-r--r--tools/js-optimizer.js51
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
};