aboutsummaryrefslogtreecommitdiff
path: root/tools/js-optimizer.js
diff options
context:
space:
mode:
authorAlon Zakai <alonzakai@gmail.com>2012-01-16 10:06:30 -0800
committerAlon Zakai <alonzakai@gmail.com>2012-01-16 10:06:30 -0800
commit58132ad51111bcb024f7a9f2bdce970324c05e00 (patch)
tree0a509eb56ead2fed56e4f4f2432387ed1b75903e /tools/js-optimizer.js
parent22dc3bb223334137a3b7c77906b8960a9197be7a (diff)
improve side effect detection in js optimizer
Diffstat (limited to 'tools/js-optimizer.js')
-rw-r--r--tools/js-optimizer.js15
1 files changed, 7 insertions, 8 deletions
diff --git a/tools/js-optimizer.js b/tools/js-optimizer.js
index da6fe982..ed936f5f 100644
--- a/tools/js-optimizer.js
+++ b/tools/js-optimizer.js
@@ -783,14 +783,13 @@ function simplifyExpressionsPost(ast) {
simplifyNotComps(ast);
}
-function hasSideEffects(node) { // this is 99% incomplete and wrong! It just works on __label__ == X and number literals
- if (node[0] == 'num') return false;
- if (node[0] == 'binary' && (node[1] == '==' || node[1] == '!=') && node[2][0] == 'name' &&
- node[3][0] == 'num') {
- return false;
- } else {
- return true;
- }
+var NO_SIDE_EFFECTS = set('num', 'name');
+
+function hasSideEffects(node) { // this is 99% incomplete!
+ if (node[0] in NO_SIDE_EFFECTS) return false;
+ if (node[0] == 'unary-prefix' && node[1] == '!') return hasSideEffects(node[2]);
+ if (node[0] == 'binary') return hasSideEffects(node[2]) || hasSideEffects(node[3]);
+ return true;
}
// Clear out empty ifs and blocks, and redundant blocks/stats and so forth