Skip to content

Commit

Permalink
feat: adds maths to the evaluator
Browse files Browse the repository at this point in the history
  • Loading branch information
Tezzish committed Sep 27, 2024
1 parent c0dd033 commit 5472228
Showing 1 changed file with 33 additions and 0 deletions.
33 changes: 33 additions & 0 deletions evaluator/evaluator.go
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,8 @@ func Eval(node ast.Node) object.Object {
return nativeBoolToBoolObject(node.Value)
case *ast.PrefixExpression:
return evalPrefixExpression(node.Operator, Eval(node.Right))
case *ast.InfixExpression:
return evalInfixExpression(node.Operator, Eval(node.Left), Eval(node.Right))
}
return NULL
}
Expand Down Expand Up @@ -75,3 +77,34 @@ func evalNegOperator(right object.Object) object.Object {
value := right.(*object.Integer).Value
return &object.Integer{Value: 0 - value}
}

func evalInfixExpression(operator string, left object.Object, right object.Object) object.Object {
switch {
case left.Type() == object.INTEGER_OBJ && right.Type() == object.INTEGER_OBJ:
return evalMath(operator, left, right)
default:
return NULL
}
}

func evalMath(operator string, left object.Object, right object.Object) object.Object {
if left.Type() != object.INTEGER_OBJ || right.Type() != object.INTEGER_OBJ {
return NULL
}
valueLeft := left.(*object.Integer).Value
valueRight := right.(*object.Integer).Value
switch operator {
case "+":
return &object.Integer{Value: valueLeft + valueRight}
case "-":
return &object.Integer{Value: valueLeft - valueRight}
case "*":
return &object.Integer{Value: valueLeft * valueRight}
case "/":
return &object.Integer{Value: valueLeft / valueRight}
case "%":
return &object.Integer{Value: valueLeft % valueRight}
default:
return NULL
}
}

0 comments on commit 5472228

Please sign in to comment.