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);
}