diff options
author | Alon Zakai <alonzakai@gmail.com> | 2014-03-16 10:47:07 -0700 |
---|---|---|
committer | Alon Zakai <alonzakai@gmail.com> | 2014-03-17 17:56:17 -0700 |
commit | dc70532c6a3f624f8b501d64f7e26d140da8827d (patch) | |
tree | 6e7ed156b3c272af95d322acaa7d5432e0ddc319 /tools/js-optimizer.js | |
parent | c4fc4453aacc8c1933e9cd256c04890978095003 (diff) |
don't commaify if it doesn't help
Diffstat (limited to 'tools/js-optimizer.js')
-rw-r--r-- | tools/js-optimizer.js | 46 |
1 files changed, 20 insertions, 26 deletions
diff --git a/tools/js-optimizer.js b/tools/js-optimizer.js index 4b63ab9b..e57bab0f 100644 --- a/tools/js-optimizer.js +++ b/tools/js-optimizer.js @@ -845,36 +845,30 @@ function simplifyIfs(ast) { // recurse to handle chains while (body[0] === 'block') { var stats = body[1]; + if (stats.length === 0) break; + var other = stats[stats.length-1]; + if (other[0] !== 'if') break; + // we can handle elses, but must be fully identical + if (!astCompare(node[3], other[3])) break; if (stats.length > 1) { - var last = stats[stats.length-1]; - if (last[0] === 'if') { - // try to commaify - turn everything between the ifs into a comma operator inside the second if - var ok = true; - for (var i = 0; i < stats.length-1; i++) { - var curr = stats[i]; - if (curr[0] === 'stat') curr = curr[1]; - if (!(curr[0] in COMMABLE)) ok = false; - } - if (ok) { - for (var i = stats.length-2; i >= 0; i--) { - var curr = stats[i]; - if (curr[0] === 'stat') curr = curr[1]; - last[1] = ['seq', curr, last[1]]; - } - stats = body[1] = [last]; - } + // try to commaify - turn everything between the ifs into a comma operator inside the second if + var ok = true; + for (var i = 0; i < stats.length-1; i++) { + var curr = stats[i]; + if (curr[0] === 'stat') curr = curr[1]; + if (!(curr[0] in COMMABLE)) ok = false; } + if (!ok) break; + for (var i = stats.length-2; i >= 0; i--) { + var curr = stats[i]; + if (curr[0] === 'stat') curr = curr[1]; + other[1] = ['seq', curr, other[1]]; + } + stats = body[1] = [other]; } if (stats.length !== 1) break; - var singleton = stats[0]; - // we can handle elses, but must be fully identical - if (!astCompare(node[3], singleton[3])) break; - if (singleton[0] === 'if') { - node[1] = ['conditional', node[1], singleton[1], ['num', 0]]; - body = node[2] = singleton[2]; - } else { - break; - } + node[1] = ['conditional', node[1], other[1], ['num', 0]]; + body = node[2] = other[2]; } } }); |