Migrate assignment operator evaluator to Kotlin

This commit is contained in:
2020-03-11 22:24:51 +01:00
parent 93763da458
commit a256db117e
2 changed files with 24 additions and 0 deletions

View File

@@ -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)
}
}

View File

@@ -27,6 +27,7 @@ class ExpressionEvaluator : Evaluator() {
AccessOperatorEvaluator(), AccessOperatorEvaluator(),
LogicOperatorEvaluator(), LogicOperatorEvaluator(),
RelationOperatorEvaluator(), RelationOperatorEvaluator(),
AssignmentOperatorEvaluator(),
FunctionCallEvaluator() FunctionCallEvaluator()
).evaluate(node, environment) ).evaluate(node, environment)