Fix condition evaluator and not operator evaluator
This commit is contained in:
@@ -27,6 +27,6 @@ class ConditionEvaluator : Evaluator() {
|
|||||||
return defaultEvaluator.evaluate(falseBranchNode, environment)
|
return defaultEvaluator.evaluate(falseBranchNode, environment)
|
||||||
}
|
}
|
||||||
|
|
||||||
return EvaluatorOutput.fail()
|
return EvaluatorOutput.ok()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -3,17 +3,23 @@ package io.smnp.evaluation.evaluator
|
|||||||
import io.smnp.dsl.ast.model.node.Node
|
import io.smnp.dsl.ast.model.node.Node
|
||||||
import io.smnp.dsl.ast.model.node.NotOperatorNode
|
import io.smnp.dsl.ast.model.node.NotOperatorNode
|
||||||
import io.smnp.environment.Environment
|
import io.smnp.environment.Environment
|
||||||
|
import io.smnp.error.EvaluationException
|
||||||
import io.smnp.evaluation.model.entity.EvaluatorOutput
|
import io.smnp.evaluation.model.entity.EvaluatorOutput
|
||||||
|
import io.smnp.type.enumeration.DataType
|
||||||
import io.smnp.type.model.Value
|
import io.smnp.type.model.Value
|
||||||
|
|
||||||
class NotOperatorEvaluator : Evaluator() {
|
class NotOperatorEvaluator : Evaluator() {
|
||||||
|
val evaluator = assert(ExpressionEvaluator(), "expression")
|
||||||
override fun supportedNodes() = listOf(NotOperatorNode::class)
|
override fun supportedNodes() = listOf(NotOperatorNode::class)
|
||||||
|
|
||||||
override fun tryToEvaluate(node: Node, environment: Environment): EvaluatorOutput {
|
override fun tryToEvaluate(node: Node, environment: Environment): EvaluatorOutput {
|
||||||
val evaluator = BoolLiteralEvaluator()
|
|
||||||
val (_, operandNode) = (node as NotOperatorNode)
|
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)))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user