diff --git a/app/src/main/kotlin/io/smnp/evaluation/evaluator/ConditionEvaluator.kt b/app/src/main/kotlin/io/smnp/evaluation/evaluator/ConditionEvaluator.kt index 7be70a8..1615d8d 100644 --- a/app/src/main/kotlin/io/smnp/evaluation/evaluator/ConditionEvaluator.kt +++ b/app/src/main/kotlin/io/smnp/evaluation/evaluator/ConditionEvaluator.kt @@ -27,6 +27,6 @@ class ConditionEvaluator : Evaluator() { return defaultEvaluator.evaluate(falseBranchNode, environment) } - return EvaluatorOutput.fail() + return EvaluatorOutput.ok() } } \ No newline at end of file diff --git a/app/src/main/kotlin/io/smnp/evaluation/evaluator/NotOperatorEvaluator.kt b/app/src/main/kotlin/io/smnp/evaluation/evaluator/NotOperatorEvaluator.kt index 79ed8bc..e299745 100644 --- a/app/src/main/kotlin/io/smnp/evaluation/evaluator/NotOperatorEvaluator.kt +++ b/app/src/main/kotlin/io/smnp/evaluation/evaluator/NotOperatorEvaluator.kt @@ -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))) } } \ No newline at end of file