From baea4f8fbf885d4e1e59b367bb8384627cf4d749 Mon Sep 17 00:00:00 2001 From: Dimitri Sokolyuk Date: Sun, 25 Mar 2018 11:00:17 +0200 Subject: extend infix string operators --- evaluator/evaluator.go | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/evaluator/evaluator.go b/evaluator/evaluator.go index 89e6426..e7b7193 100644 --- a/evaluator/evaluator.go +++ b/evaluator/evaluator.go @@ -244,14 +244,20 @@ func evalIntegerInfixExpression(operator string, left, right object.Object) obje } func evalStringInfixExpression(operator string, left, right object.Object) object.Object { - if operator != "+" { + leftVal := left.(*object.String).Value + rightVal := right.(*object.String).Value + + switch operator { + case "+": + return &object.String{Value: leftVal + rightVal} + case "==": + return nativeBoolToBooleanObject(leftVal == rightVal) + case "!=": + return nativeBoolToBooleanObject(leftVal != rightVal) + default: return newError("unknown operator: %s %s %s", left.Type(), operator, right.Type()) } - - leftVal := left.(*object.String).Value - rightVal := right.(*object.String).Value - return &object.String{Value: leftVal + rightVal} } func evalIfExpression(ie *ast.IfExpression, env *object.Environment) object.Object { -- cgit v1.2.3