Enable executing custom functions

This commit is contained in:
Bartłomiej Pluta
2019-07-08 16:01:20 +02:00
parent 606d93c319
commit 8b7e1432b6
4 changed files with 49 additions and 9 deletions

View File

@@ -1,7 +1,8 @@
from smnp.ast.node.none import NoneNode
from smnp.ast.node.ret import ReturnNode
from smnp.ast.node.variable import TypedVariableNode
from smnp.library.signature import signature, listOfMatchers, ofType
from smnp.runtime.evaluator import Evaluator
from smnp.runtime.evaluator import Evaluator, evaluate
from smnp.runtime.evaluators.expression import expressionEvaluator
from smnp.runtime.evaluators.iterable import abstractIterableEvaluator
from smnp.type.model import Type
@@ -52,6 +53,17 @@ def listSpecifier(specifier):
return listOfMatchers(*subSignature)
class BodyEvaluator(Evaluator):
@classmethod
def evaluator(cls, node, environment):
for child in node.children:
if type(child) == ReturnNode:
x = expressionEvaluator(doAssert=True)(child.value, environment).value #TODO check if it isn't necessary to verify 'result' attr of EvaluatioNResult
return x
else:
evaluate(child, environment)
# if node.type.specifier is not NoneNode:
# if Type[node.type.upper()] == Type.LIST:
# return listOf([])