diff options
Diffstat (limited to 'tools/js-optimizer.js')
-rw-r--r-- | tools/js-optimizer.js | 23 |
1 files changed, 13 insertions, 10 deletions
diff --git a/tools/js-optimizer.js b/tools/js-optimizer.js index 57a3b1b3..89f65eda 100644 --- a/tools/js-optimizer.js +++ b/tools/js-optimizer.js @@ -539,16 +539,19 @@ function simplifyExpressionsPre(ast) { } } } - } else if (type == 'binary' && node[1] == '|') { - // canonicalize order of |0 to end - if (node[2][0] == 'num' && node[2][1] == 0) { - var temp = node[2]; - node[2] = node[3]; - node[3] = temp; - } - // if a seq ends in an |0, remove an external |0 - if (node[2][0] == 'seq' && node[2][2][0] == 'binary' && node[2][2][1] in USEFUL_BINARY_OPS) { - return node[2]; + var value = node[3]; + if (value[0] == 'binary' && value[1] == '|') { + // canonicalize order of |0 to end + if (value[2][0] == 'num' && value[2][1] == 0) { + var temp = value[2]; + value[2] = value[3]; + value[3] = temp; + } + // if a seq ends in an |0, remove an external |0 + // note that it is only safe to do this in assigns, like we are doing here (return (x, y|0); is not valid) + if (value[2][0] == 'seq' && value[2][2][0] == 'binary' && value[2][2][1] in USEFUL_BINARY_OPS) { + node[3] = value[2]; + } } } }); |