aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDimitri Sokolyuk <demon@dim13.org>2018-03-25 11:00:17 +0200
committerDimitri Sokolyuk <demon@dim13.org>2018-03-25 11:00:17 +0200
commitbaea4f8fbf885d4e1e59b367bb8384627cf4d749 (patch)
tree77a15012dec3f8550c07f6df04ebfebafad7becf
parentf73ea0821fb378ba260630ba3c7ae02f7d9f8377 (diff)
extend infix string operators
-rw-r--r--evaluator/evaluator.go16
1 files 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 {