From 8415754488747d96d40ffc5ff77631ef3cfec44a Mon Sep 17 00:00:00 2001 From: Bobby Date: Sun, 18 Feb 2024 00:17:54 -0500 Subject: Eval Minus Prefix Operator --- evaluator/evaluator.go | 11 +++++++++++ evaluator/evaluator_test.go | 2 ++ 2 files changed, 13 insertions(+) (limited to 'evaluator') diff --git a/evaluator/evaluator.go b/evaluator/evaluator.go index 0cc003f..b8940a9 100644 --- a/evaluator/evaluator.go +++ b/evaluator/evaluator.go @@ -57,6 +57,8 @@ func evalPrefixExpression(operator string, right object.Object) object.Object { switch operator { case "!": return evalBangOperatorExpression(right) + case "-": + return evalMinusPrefixOperatorExpression(right) default: return NULL } @@ -74,3 +76,12 @@ func evalBangOperatorExpression(right object.Object) object.Object { return FALSE } } + +func evalMinusPrefixOperatorExpression(right object.Object) object.Object { + if right.Type() != object.INTEGER_OBJ { + return NULL + } + + value := right.(*object.Integer).Value + return &object.Integer{Value: -value} +} diff --git a/evaluator/evaluator_test.go b/evaluator/evaluator_test.go index aa1833a..1221de6 100644 --- a/evaluator/evaluator_test.go +++ b/evaluator/evaluator_test.go @@ -15,6 +15,8 @@ func TestEvalIntegerExpression(t *testing.T) { }{ {"5", 5}, {"10", 10}, + {"-5", -5}, + {"-10", -10}, } for _, tt := range tests { -- cgit v1.2.3