from smnp.runtime.evaluator import Evaluator from smnp.runtime.evaluators.expression import expressionEvaluator class AssignmentEvaluator(Evaluator): @classmethod def evaluator(cls, node, environment): target = node.left.value value = expressionEvaluator(doAssert=True)(node.right, environment).value #TODO check if it isn't necessary to verify 'result' attr of EvaluatioNResult environment.scopes[-1][target] = value return value # # def evaluateAssignment(assignment, environment): # target = assignment.target.identifier # value = evaluate(assignment.value, environment) # if value.type == Type.VOID: # raise RuntimeException(f"Expected expression, found '{value.type.name}'", assignment.value.pos) # scopeOfExistingVariable = environment.findVariableScope(target) # if scopeOfExistingVariable is not None: # scopeOfExistingVariable[target] = value # else: # environment.scopes[-1][target] = value