Migrate assignment operator evaluator to Kotlin
This commit is contained in:
@@ -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)
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -27,6 +27,7 @@ class ExpressionEvaluator : Evaluator() {
|
|||||||
AccessOperatorEvaluator(),
|
AccessOperatorEvaluator(),
|
||||||
LogicOperatorEvaluator(),
|
LogicOperatorEvaluator(),
|
||||||
RelationOperatorEvaluator(),
|
RelationOperatorEvaluator(),
|
||||||
|
AssignmentOperatorEvaluator(),
|
||||||
|
|
||||||
FunctionCallEvaluator()
|
FunctionCallEvaluator()
|
||||||
).evaluate(node, environment)
|
).evaluate(node, environment)
|
||||||
|
|||||||
Reference in New Issue
Block a user