Fix: Uglified Number.prototype functions on big numbers
authorphilippsimon <github@philippsimon.de>
Mon, 14 Mar 2016 11:21:25 +0000 (12:21 +0100)
committerRichard van Velzen <rvanvelzen@experty.com>
Mon, 14 Mar 2016 11:41:06 +0000 (12:41 +0100)
lib/output.js
test/compress/numbers.js [new file with mode: 0644]

index dceece3..a8c45a0 100644 (file)
@@ -596,8 +596,12 @@ function OutputStream(options) {
 
     PARENS(AST_Number, function(output){
         var p = output.parent();
-        if (this.getValue() < 0 && p instanceof AST_PropAccess && p.expression === this)
-            return true;
+        if (p instanceof AST_PropAccess && p.expression === this) {
+            var value = this.getValue();
+            if (value < 0 || /^0/.test(make_num(value))) {
+                return true;
+            }
+        }
     });
 
     PARENS([ AST_Assign, AST_Conditional ], function (output){
@@ -1026,7 +1030,7 @@ function OutputStream(options) {
         var expr = self.expression;
         expr.print(output);
         if (expr instanceof AST_Number && expr.getValue() >= 0) {
-            if (!/[xa-f.]/i.test(output.last())) {
+            if (!/[xa-f.)]/i.test(output.last())) {
                 output.print(".");
             }
         }
diff --git a/test/compress/numbers.js b/test/compress/numbers.js
new file mode 100644 (file)
index 0000000..8e32ad0
--- /dev/null
@@ -0,0 +1,19 @@
+hex_numbers_in_parentheses_for_prototype_functions: {
+    input: {
+        (-2);
+        (-2).toFixed(0);
+
+        (2);
+        (2).toFixed(0);
+
+        (0.2);
+        (0.2).toFixed(0);
+
+        (0.00000002);
+        (0.00000002).toFixed(0);
+
+        (1000000000000000128);
+        (1000000000000000128).toFixed(0);
+    }
+    expect_exact: "-2;(-2).toFixed(0);2;2..toFixed(0);.2;.2.toFixed(0);2e-8;2e-8.toFixed(0);0xde0b6b3a7640080;(0xde0b6b3a7640080).toFixed(0);"
+}