Never produce -0 when evaluating expressions (like -"")
authorRichard van Velzen <rvanvelzen@experty.com>
Tue, 17 May 2016 20:34:38 +0000 (22:34 +0200)
committerRichard van Velzen <rvanvelzen@experty.com>
Tue, 17 May 2016 20:34:38 +0000 (22:34 +0200)
Fix for #1085. The major case was already there, but more expressions can result in -0.

lib/compress.js
test/compress/evaluate.js [new file with mode: 0644]

index 6436796..e8c42c0 100644 (file)
@@ -1029,9 +1029,9 @@ merge(Compressor.prototype, {
               case "void": return void ev(e, compressor);
               case "~": return ~ev(e, compressor);
               case "-":
-                e = ev(e, compressor);
-                if (e === 0) throw def;
-                return -e;
+                e = -ev(e, compressor);
+                if (e === -0) throw def;
+                return e;
               case "+": return +ev(e, compressor);
             }
             throw def;
diff --git a/test/compress/evaluate.js b/test/compress/evaluate.js
new file mode 100644 (file)
index 0000000..9aa6b3d
--- /dev/null
@@ -0,0 +1,9 @@
+negative_zero: {
+    options = { evaluate: true }
+    input: {
+        assert.sameValue(-"", -0, '-""');
+    }
+    expect: {
+        assert.sameValue(-"", -0, '-""');
+    }
+}