diff --git a/pkl-core/src/main/java/org/pkl/core/ast/builder/AstBuilder.java b/pkl-core/src/main/java/org/pkl/core/ast/builder/AstBuilder.java index 0cf088c9..ac13402a 100644 --- a/pkl-core/src/main/java/org/pkl/core/ast/builder/AstBuilder.java +++ b/pkl-core/src/main/java/org/pkl/core/ast/builder/AstBuilder.java @@ -1869,12 +1869,12 @@ public final class AstBuilder extends AbstractAstBuilder { @Override public ExpressionNode visitUnaryMinusExpr(UnaryMinusExprContext ctx) { - var childExpr = visitExpr(ctx.expr()); - if (childExpr instanceof IntLiteralNode || childExpr instanceof FloatLiteralNode) { - // negation already handled in child expr (see corresponding code) + var childCtx = ctx.expr(); + var childExpr = visitExpr(childCtx); + if (childCtx instanceof IntLiteralContext || childCtx instanceof FloatLiteralContext) { + // negation already handled (see visitIntLiteral/visitFloatLiteral) return childExpr; } - return UnaryMinusNodeGen.create(createSourceSection(ctx), childExpr); } diff --git a/pkl-core/src/test/files/LanguageSnippetTests/input/basic/float.pkl b/pkl-core/src/test/files/LanguageSnippetTests/input/basic/float.pkl index 32abd034..8fb7b26c 100644 --- a/pkl-core/src/test/files/LanguageSnippetTests/input/basic/float.pkl +++ b/pkl-core/src/test/files/LanguageSnippetTests/input/basic/float.pkl @@ -141,6 +141,10 @@ examples { -1.2.abs -x.abs + + // https://github.com/apple/pkl/issues/650 + --1.0 + -(-1.0) } ["power"] { diff --git a/pkl-core/src/test/files/LanguageSnippetTests/input/basic/int.pkl b/pkl-core/src/test/files/LanguageSnippetTests/input/basic/int.pkl index a26e975e..3c4f8714 100644 --- a/pkl-core/src/test/files/LanguageSnippetTests/input/basic/int.pkl +++ b/pkl-core/src/test/files/LanguageSnippetTests/input/basic/int.pkl @@ -163,6 +163,10 @@ examples { -0b11.abs local x = 4 -x.abs + + // https://github.com/apple/pkl/issues/650 + --1 + -(-1) } ["power"] { diff --git a/pkl-core/src/test/files/LanguageSnippetTests/output/basic/float.pcf b/pkl-core/src/test/files/LanguageSnippetTests/output/basic/float.pcf index 4dedadc4..a2341a2f 100644 --- a/pkl-core/src/test/files/LanguageSnippetTests/output/basic/float.pcf +++ b/pkl-core/src/test/files/LanguageSnippetTests/output/basic/float.pcf @@ -98,6 +98,8 @@ examples { ["negation"] { -1.2 -1.2 + 1.0 + 1.0 } ["power"] { 27.98409999999999 diff --git a/pkl-core/src/test/files/LanguageSnippetTests/output/basic/int.pcf b/pkl-core/src/test/files/LanguageSnippetTests/output/basic/int.pcf index 8e1b5133..85b4b672 100644 --- a/pkl-core/src/test/files/LanguageSnippetTests/output/basic/int.pcf +++ b/pkl-core/src/test/files/LanguageSnippetTests/output/basic/int.pcf @@ -121,6 +121,8 @@ examples { -2 -3 -4 + 1 + 1 } ["power"] { 16