Fix condition evaluator and not operator evaluator

This commit is contained in:
2020-03-13 17:28:27 +01:00
parent 5680ed4e42
commit ce5b090bc5
2 changed files with 10 additions and 4 deletions

View File

@@ -27,6 +27,6 @@ class ConditionEvaluator : Evaluator() {
return defaultEvaluator.evaluate(falseBranchNode, environment)
}
return EvaluatorOutput.fail()
return EvaluatorOutput.ok()
}
}

View File

@@ -3,17 +3,23 @@ package io.smnp.evaluation.evaluator
import io.smnp.dsl.ast.model.node.Node
import io.smnp.dsl.ast.model.node.NotOperatorNode
import io.smnp.environment.Environment
import io.smnp.error.EvaluationException
import io.smnp.evaluation.model.entity.EvaluatorOutput
import io.smnp.type.enumeration.DataType
import io.smnp.type.model.Value
class NotOperatorEvaluator : Evaluator() {
val evaluator = assert(ExpressionEvaluator(), "expression")
override fun supportedNodes() = listOf(NotOperatorNode::class)
override fun tryToEvaluate(node: Node, environment: Environment): EvaluatorOutput {
val evaluator = BoolLiteralEvaluator()
val (_, operandNode) = (node as NotOperatorNode)
val operand = assert(evaluator, "bool").evaluate(operandNode, environment)
val operand = evaluator.evaluate(operandNode, environment).value!!
return EvaluatorOutput.value(Value.bool(!(operand.value!!.value as Boolean)))
if(operand.type != DataType.BOOL) {
throw EvaluationException("Only bool types can be negated", operandNode.position)
}
return EvaluatorOutput.value(Value.bool(!(operand.value as Boolean)))
}
}