add missing LHS cases which global_defs should avoid
authoralexlamsl <alexlamsl@gmail.com>
Tue, 17 Jan 2017 09:33:40 +0000 (17:33 +0800)
committerRichard van Velzen <rvanvelzen1@gmail.com>
Thu, 19 Jan 2017 20:06:28 +0000 (21:06 +0100)
lib/compress.js
lib/scope.js
test/compress/issue-208.js

index 5879b93..bbd3659 100644 (file)
@@ -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)) {
index 4943b56..bc5db90 100644 (file)
@@ -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;
             }
index 14752b8..2f10378 100644 (file)
@@ -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;
+    }
 }