Enable executing custom functions
This commit is contained in:
@@ -19,12 +19,12 @@ def expressionEvaluator(doAssert=False):
|
||||
from smnp.runtime.evaluators.function import FunctionCallEvaluator
|
||||
|
||||
result = Evaluator.oneOf(
|
||||
Evaluator.forNodes(FunctionCallEvaluator.evaluate, FunctionCallNode),
|
||||
Evaluator.forNodes(StringEvaluator.evaluate, StringLiteralNode),
|
||||
Evaluator.forNodes(IntegerEvaluator.evaluate, IntegerLiteralNode),
|
||||
Evaluator.forNodes(NoteEvaluator.evaluate, NoteLiteralNode),
|
||||
Evaluator.forNodes(IdentifierEvaluator.evaluate, IdentifierNode),
|
||||
Evaluator.forNodes(ListEvaluator.evaluate, ListNode),
|
||||
Evaluator.forNodes(FunctionCallEvaluator.evaluate, FunctionCallNode)
|
||||
)(node, environment)
|
||||
|
||||
if doAssert and result.result and result.value.type == Type.VOID:
|
||||
|
||||
@@ -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([])
|
||||
|
||||
Reference in New Issue
Block a user