diff options
author | alexlamsl <alexlamsl@gmail.com> | 2017-01-17 17:33:40 +0800 |
---|---|---|
committer | Richard van Velzen <rvanvelzen1@gmail.com> | 2017-01-19 21:06:28 +0100 |
commit | 48284844a461e6113bb9911cdcdad7ab8a3d85de (patch) | |
tree | 05c5d8ff7f2a312a8880c143dbfcdf35abe11dd5 | |
parent | ec2e5fa3a2e5cf421aebd94b93c668b18e540c69 (diff) | |
download | tracifyjs-48284844a461e6113bb9911cdcdad7ab8a3d85de.tar.gz tracifyjs-48284844a461e6113bb9911cdcdad7ab8a3d85de.zip |
add missing LHS cases which global_defs should avoid
-rw-r--r-- | lib/compress.js | 13 | ||||
-rw-r--r-- | lib/scope.js | 2 | ||||
-rw-r--r-- | test/compress/issue-208.js | 30 |
3 files changed, 30 insertions, 15 deletions
diff --git a/lib/compress.js b/lib/compress.js index 5879b93b..bbd3659d 100644 --- a/lib/compress.js +++ b/lib/compress.js @@ -970,6 +970,11 @@ merge(Compressor.prototype, { node.DEFMETHOD("is_string", func); }); + function isLHS(node, parent) { + return parent instanceof AST_Unary && (parent.operator === "++" || parent.operator === "--") + || parent instanceof AST_Assign && parent.left === node; + } + function best_of(ast1, ast2) { return ast1.print_to_string().length > ast2.print_to_string().length @@ -2608,14 +2613,6 @@ merge(Compressor.prototype, { }); OPT(AST_SymbolRef, function(self, compressor){ - function isLHS(symbol, parent) { - return ( - parent instanceof AST_Binary && - parent.operator === '=' && - parent.left === symbol - ); - } - if (self.undeclared() && !isLHS(self, compressor.parent())) { var defines = compressor.option("global_defs"); if (defines && HOP(defines, self.name)) { diff --git a/lib/scope.js b/lib/scope.js index 4943b568..bc5db90d 100644 --- a/lib/scope.js +++ b/lib/scope.js @@ -220,7 +220,7 @@ AST_Toplevel.DEFMETHOD("figure_out_scope", function(options){ sym = g; } node.thedef = sym; - if (parent instanceof AST_Unary && (parent.operator === '++' || parent.operator === '--') + if (parent instanceof AST_Unary && (parent.operator === "++" || parent.operator === "--") || parent instanceof AST_Assign && parent.left === node) { sym.modified = true; } diff --git a/test/compress/issue-208.js b/test/compress/issue-208.js index 14752b8a..2f103786 100644 --- a/test/compress/issue-208.js +++ b/test/compress/issue-208.js @@ -1,11 +1,29 @@ do_not_update_lhs: { - options = { global_defs: { DEBUG: false } }; - input: { DEBUG = false; } - expect: { DEBUG = false; } + options = { + global_defs: { DEBUG: 0 } + } + input: { + DEBUG++; + DEBUG += 1; + DEBUG = 1; + } + expect: { + DEBUG++; + DEBUG += 1; + DEBUG = 1; + } } do_update_rhs: { - options = { global_defs: { DEBUG: false } }; - input: { MY_DEBUG = DEBUG; } - expect: { MY_DEBUG = false; } + options = { + global_defs: { DEBUG: 0 } + } + input: { + MY_DEBUG = DEBUG; + MY_DEBUG += DEBUG; + } + expect: { + MY_DEBUG = 0; + MY_DEBUG += 0; + } } |