Turn unary minus into a proper AST node

This unifies unary minus with NotExpression, and moves the minus logic from a fake builtin function into the interpreter proper.

RELNOTES: None
PiperOrigin-RevId: 160266266
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/Parser.java b/src/main/java/com/google/devtools/build/lib/syntax/Parser.java
index 46de9a9..1416d8f 100644
--- a/src/main/java/com/google/devtools/build/lib/syntax/Parser.java
+++ b/src/main/java/com/google/devtools/build/lib/syntax/Parser.java
@@ -697,10 +697,9 @@
       case MINUS:
         {
           nextToken();
-          List<Argument.Passed> args = new ArrayList<>();
           Expression expr = parsePrimaryWithSuffix();
-          args.add(setLocation(new Argument.Positional(expr), start, expr));
-          return makeFuncallExpression(null, new Identifier("-"), args, start, token.right);
+          UnaryOperatorExpression minus = new UnaryOperatorExpression(UnaryOperator.MINUS, expr);
+          return setLocation(minus, start, expr);
         }
       default:
         {
@@ -1061,7 +1060,8 @@
     int start = token.left;
     expect(TokenKind.NOT);
     Expression expression = parseNonTupleExpression(prec + 1);
-    NotExpression notExpression = new NotExpression(expression);
+    UnaryOperatorExpression notExpression =
+        new UnaryOperatorExpression(UnaryOperator.NOT, expression);
     return setLocation(notExpression, start, token.right);
   }