Fix unneeded parens around unary args in new expression.
authorkzc <zaxxon2011@gmail.com>
Sat, 23 Jul 2016 15:50:44 +0000 (11:50 -0400)
committerRichard van Velzen <rvanvelzen1@gmail.com>
Sun, 14 Aug 2016 19:38:38 +0000 (21:38 +0200)
lib/output.js
test/compress/new.js

index 324f96e..801f751 100644 (file)
@@ -533,7 +533,7 @@ function OutputStream(options) {
     PARENS([ AST_Unary, AST_Undefined ], function(output){
         var p = output.parent();
         return p instanceof AST_PropAccess && p.expression === this
-            || p instanceof AST_New;
+            || p instanceof AST_Call && p.expression === this;
     });
 
     PARENS(AST_Seq, function(output){
index 78a1026..bdf22b0 100644 (file)
@@ -50,3 +50,28 @@ new_with_many_parameters: {
     }
     expect_exact: 'new foo.bar("baz");new x(/123/,456);'
 }
+
+new_constructor_with_unary_arguments: {
+    input: {
+        new x();
+        new x(-1);
+        new x(-1, -2);
+        new x(void 1, +2, -3, ~4, !5, --a, ++b, c--, d++, typeof e, delete f);
+        new (-1);     // should parse despite being invalid at runtime.
+        new (-1)();   // should parse despite being invalid at runtime.
+        new (-1)(-2); // should parse despite being invalid at runtime.
+    }
+    expect_exact: "new x;new x(-1);new x(-1,-2);new x(void 1,+2,-3,~4,!5,--a,++b,c--,d++,typeof e,delete f);new(-1);new(-1);new(-1)(-2);"
+}
+
+call_with_unary_arguments: {
+    input: {
+        x();
+        x(-1);
+        x(-1, -2);
+        x(void 1, +2, -3, ~4, !5, --a, ++b, c--, d++, typeof e, delete f);
+        (-1)();   // should parse despite being invalid at runtime.
+        (-1)(-2); // should parse despite being invalid at runtime.
+    }
+    expect_exact: "x();x(-1);x(-1,-2);x(void 1,+2,-3,~4,!5,--a,++b,c--,d++,typeof e,delete f);(-1)();(-1)(-2);"
+}