diff --git a/src/main/kotlin/io/smnp/error/CustomException.kt b/src/main/kotlin/io/smnp/error/CustomException.kt new file mode 100644 index 0000000..5ae9ca3 --- /dev/null +++ b/src/main/kotlin/io/smnp/error/CustomException.kt @@ -0,0 +1,3 @@ +package io.smnp.error + +class CustomException(message: String?) : Exception(message) \ No newline at end of file diff --git a/src/main/kotlin/io/smnp/evaluation/evaluator/DefaultEvaluator.kt b/src/main/kotlin/io/smnp/evaluation/evaluator/DefaultEvaluator.kt index 2beec91..e5ee530 100644 --- a/src/main/kotlin/io/smnp/evaluation/evaluator/DefaultEvaluator.kt +++ b/src/main/kotlin/io/smnp/evaluation/evaluator/DefaultEvaluator.kt @@ -9,6 +9,7 @@ class DefaultEvaluator : Evaluator() { override fun tryToEvaluate(node: Node, environment: Environment): EvaluatorOutput { return oneOf( + ThrowEvaluator(), ExpressionEvaluator() ).evaluate(node, environment) } diff --git a/src/main/kotlin/io/smnp/evaluation/evaluator/ThrowEvaluator.kt b/src/main/kotlin/io/smnp/evaluation/evaluator/ThrowEvaluator.kt new file mode 100644 index 0000000..2e8577c --- /dev/null +++ b/src/main/kotlin/io/smnp/evaluation/evaluator/ThrowEvaluator.kt @@ -0,0 +1,19 @@ +package io.smnp.evaluation.evaluator + +import io.smnp.dsl.ast.model.node.Node +import io.smnp.dsl.ast.model.node.ThrowNode +import io.smnp.error.CustomException +import io.smnp.evaluation.environment.Environment +import io.smnp.evaluation.model.entity.EvaluatorOutput + +class ThrowEvaluator : Evaluator() { + override fun supportedNodes() = listOf(ThrowNode::class) + + override fun tryToEvaluate(node: Node, environment: Environment): EvaluatorOutput { + val evaluator = ExpressionEvaluator() + val valueNode = (node as ThrowNode).value + val value = evaluator.evaluate(valueNode, environment) + + throw CustomException(value.value!!.value.toString()) + } +} \ No newline at end of file