35 lines
1.3 KiB
Python
35 lines
1.3 KiB
Python
from smnp.error.runtime import RuntimeException
|
|
from smnp.runtime.evaluator import Evaluator, evaluate
|
|
from smnp.runtime.evaluators.expression import expressionEvaluator
|
|
from smnp.type.model import Type
|
|
|
|
|
|
class IfElseEvaluator(Evaluator):
|
|
|
|
@classmethod
|
|
def evaluator(cls, node, environment):
|
|
condition = expressionEvaluator(doAssert=True)(node.condition, environment).value
|
|
|
|
if condition.type != Type.BOOL:
|
|
raise RuntimeException(f"Only {Type.BOOL.name.lower()} types can be used as conditions in conditional expression", node.condition.pos)
|
|
|
|
if condition.value:
|
|
return expressionEvaluator(doAssert=True)(node.ifNode, environment).value
|
|
else:
|
|
return expressionEvaluator(doAssert=True)(node.elseNode, environment).value
|
|
|
|
|
|
class IfElseStatementEvaluator(Evaluator):
|
|
|
|
@classmethod
|
|
def evaluator(cls, node, environment):
|
|
condition = expressionEvaluator(doAssert=True)(node.condition, environment).value
|
|
|
|
if condition.type != Type.BOOL:
|
|
raise RuntimeException(
|
|
f"Only {Type.BOOL.name.lower()} types can be used as conditions in conditional expression", node.condition.pos)
|
|
|
|
if condition.value:
|
|
evaluate(node.ifNode, environment)
|
|
else:
|
|
evaluate(node.elseNode, environment) |