From ce5b090bc512f78351f64717424ca0bbc71fe073 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bart=C5=82omiej=20Przemys=C5=82aw=20Pluta?= Date: Fri, 13 Mar 2020 17:28:27 +0100 Subject: [PATCH] Fix condition evaluator and not operator evaluator --- .../smnp/evaluation/evaluator/ConditionEvaluator.kt | 2 +- .../evaluation/evaluator/NotOperatorEvaluator.kt | 12 +++++++++--- 2 files changed, 10 insertions(+), 4 deletions(-) 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