From a256db117ed38cfe3fd8e5875c41b3f11a21b119 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bart=C5=82omiej=20Przemys=C5=82aw=20Pluta?= Date: Wed, 11 Mar 2020 22:24:51 +0100 Subject: [PATCH] Migrate assignment operator evaluator to Kotlin --- .../evaluator/AssignmentOperatorEvaluator.kt | 23 +++++++++++++++++++ .../evaluator/ExpressionEvaluator.kt | 1 + 2 files changed, 24 insertions(+) create mode 100644 app/src/main/kotlin/io/smnp/evaluation/evaluator/AssignmentOperatorEvaluator.kt diff --git a/app/src/main/kotlin/io/smnp/evaluation/evaluator/AssignmentOperatorEvaluator.kt b/app/src/main/kotlin/io/smnp/evaluation/evaluator/AssignmentOperatorEvaluator.kt new file mode 100644 index 0000000..8aee960 --- /dev/null +++ b/app/src/main/kotlin/io/smnp/evaluation/evaluator/AssignmentOperatorEvaluator.kt @@ -0,0 +1,23 @@ +package io.smnp.evaluation.evaluator + +import io.smnp.dsl.ast.model.node.AssignmentOperatorNode +import io.smnp.dsl.ast.model.node.IdentifierNode +import io.smnp.dsl.ast.model.node.Node +import io.smnp.environment.Environment +import io.smnp.evaluation.model.entity.EvaluatorOutput + +class AssignmentOperatorEvaluator : Evaluator() { + private val evaluator = ExpressionEvaluator() + + override fun supportedNodes() = listOf(AssignmentOperatorNode::class) + + override fun tryToEvaluate(node: Node, environment: Environment): EvaluatorOutput { + val (identifierNode, _, valueNode) = node as AssignmentOperatorNode + val identifier = (identifierNode as IdentifierNode).token.rawValue + val value = evaluator.evaluate(valueNode, environment).value!! + + environment.setVariable(identifier, value) + + return EvaluatorOutput.value(value) + } +} \ No newline at end of file diff --git a/app/src/main/kotlin/io/smnp/evaluation/evaluator/ExpressionEvaluator.kt b/app/src/main/kotlin/io/smnp/evaluation/evaluator/ExpressionEvaluator.kt index 2ae70c9..266713e 100644 --- a/app/src/main/kotlin/io/smnp/evaluation/evaluator/ExpressionEvaluator.kt +++ b/app/src/main/kotlin/io/smnp/evaluation/evaluator/ExpressionEvaluator.kt @@ -27,6 +27,7 @@ class ExpressionEvaluator : Evaluator() { AccessOperatorEvaluator(), LogicOperatorEvaluator(), RelationOperatorEvaluator(), + AssignmentOperatorEvaluator(), FunctionCallEvaluator() ).evaluate(node, environment)