gate `galio` workaround (#4310)
authorAlex Lam S.L <alexlamsl@gmail.com>
Fri, 20 Nov 2020 19:37:33 +0000 (19:37 +0000)
committerGitHub <noreply@github.com>
Fri, 20 Nov 2020 19:37:33 +0000 (03:37 +0800)
README.md
lib/output.js
test/compress.js
test/compress/numbers.js

index c0b1e8b..0bfad01 100644 (file)
--- a/README.md
+++ b/README.md
@@ -868,6 +868,8 @@ can pass additional arguments that control the code output:
   }
   ```
 
+- `galio` (default `false`) -- enable workarounds for ANT Galio bugs
+
 - `indent_level` (default `4`)
 
 - `indent_start` (default `0`) -- prefix all lines by that many spaces
index 12358ff..218372a 100644 (file)
@@ -56,6 +56,7 @@ function OutputStream(options) {
         beautify         : false,
         braces           : false,
         comments         : false,
+        galio            : false,
         ie8              : false,
         indent_level     : 4,
         indent_start     : 0,
@@ -767,9 +768,10 @@ function OutputStream(options) {
         var p = output.parent();
         if (p instanceof AST_PropAccess && p.expression === this) {
             var value = this.value;
-            // https://github.com/mishoo/UglifyJS/issues/115
-            // https://github.com/mishoo/UglifyJS/pull/1009
-            return value < 0 || /^0/.test(make_num(value));
+                // https://github.com/mishoo/UglifyJS/issues/115
+            return value < 0
+                // https://github.com/mishoo/UglifyJS/pull/1009
+                || output.option("galio") && /^0/.test(make_num(value));
         }
     });
 
index eda9b7b..f35159b 100644 (file)
@@ -63,7 +63,6 @@ function make_code(ast, options) {
 
 function parse_test(file) {
     var script = fs.readFileSync(file, "utf8");
-    // TODO try/catch can be removed after fixing https://github.com/mishoo/UglifyJS/issues/348
     try {
         var ast = U.parse(script, {
             filename: file
index c7aab68..7a9a3a7 100644 (file)
-hex_numbers_in_parentheses_for_prototype_functions: {
+parentheses_for_prototype_functions: {
     beautify = {
         beautify: true,
     }
     input: {
-        function f() {
-            (-2);
-            (-2).toFixed(0);
+        (function() {
+            console.log((-2));
+            console.log((-2).toFixed(0));
 
-            (2);
-            (2).toFixed(0);
+            console.log((2));
+            console.log((2).toFixed(0));
 
-            (0.2);
-            (0.2).toFixed(0);
+            console.log((0.2));
+            console.log((0.2).toFixed(0));
 
-            (2.34e20);
-            (2.34e20).toFixed(0);
+            console.log((2.34e20));
+            console.log((2.34e20).toFixed(0));
 
-            (0.00000002);
-            (0.00000002).toFixed(0);
+            console.log((0.00000002));
+            console.log((0.00000002).toFixed(0));
 
-            (1000000000000000128);
-            (1000000000000000128).toFixed(0);
+            console.log((1000000000000000128));
+            console.log((1000000000000000128).toFixed(0));
 
-            (-1000000000000000128);
-            (-1000000000000000128).toFixed(0);
-        }
+            console.log((-1000000000000000128));
+            console.log((-1000000000000000128).toFixed(0));
+        })();
+    }
+    expect_exact: [
+        "(function() {",
+        "    console.log(-2);",
+        "    console.log((-2).toFixed(0));",
+        "    console.log(2);",
+        "    console.log(2..toFixed(0));",
+        "    console.log(.2);",
+        "    console.log(.2.toFixed(0));",
+        "    console.log(234e18);",
+        "    console.log(234e18.toFixed(0));",
+        "    console.log(2e-8);",
+        "    console.log(2e-8.toFixed(0));",
+        "    console.log(0xde0b6b3a7640080);",
+        "    console.log(0xde0b6b3a7640080.toFixed(0));",
+        "    console.log(-0xde0b6b3a7640080);",
+        "    console.log((-0xde0b6b3a7640080).toFixed(0));",
+        "})();",
+    ]
+    expect_stdout: true
+}
+
+parentheses_for_prototype_functions_galio: {
+    beautify = {
+        beautify: true,
+        galio: true,
+    }
+    input: {
+        (function() {
+            console.log((-2));
+            console.log((-2).toFixed(0));
+
+            console.log((2));
+            console.log((2).toFixed(0));
+
+            console.log((0.2));
+            console.log((0.2).toFixed(0));
+
+            console.log((2.34e20));
+            console.log((2.34e20).toFixed(0));
+
+            console.log((0.00000002));
+            console.log((0.00000002).toFixed(0));
+
+            console.log((1000000000000000128));
+            console.log((1000000000000000128).toFixed(0));
+
+            console.log((-1000000000000000128));
+            console.log((-1000000000000000128).toFixed(0));
+        })();
     }
     expect_exact: [
-        "function f() {",
-        "    -2;",
-        "    (-2).toFixed(0);",
-        "    2;",
-        "    2..toFixed(0);",
-        "    .2;",
-        "    .2.toFixed(0);",
-        "    234e18;",
-        "    234e18.toFixed(0);",
-        "    2e-8;",
-        "    2e-8.toFixed(0);",
-        "    0xde0b6b3a7640080;",
-        "    (0xde0b6b3a7640080).toFixed(0);",
-        "    -0xde0b6b3a7640080;",
-        "    (-0xde0b6b3a7640080).toFixed(0);",
-        "}",
+        "(function() {",
+        "    console.log(-2);",
+        "    console.log((-2).toFixed(0));",
+        "    console.log(2);",
+        "    console.log(2..toFixed(0));",
+        "    console.log(.2);",
+        "    console.log(.2.toFixed(0));",
+        "    console.log(234e18);",
+        "    console.log(234e18.toFixed(0));",
+        "    console.log(2e-8);",
+        "    console.log(2e-8.toFixed(0));",
+        "    console.log(0xde0b6b3a7640080);",
+        "    console.log((0xde0b6b3a7640080).toFixed(0));",
+        "    console.log(-0xde0b6b3a7640080);",
+        "    console.log((-0xde0b6b3a7640080).toFixed(0));",
+        "})();",
     ]
+    expect_stdout: true
 }
 
 comparisons: {