diff --git a/smnp/runtime/evaluator.py b/smnp/runtime/evaluator.py index c2a2fad..59bd1eb 100644 --- a/smnp/runtime/evaluator.py +++ b/smnp/runtime/evaluator.py @@ -1,3 +1,4 @@ +from smnp.ast.node.block import BlockNode from smnp.ast.node.extend import ExtendNode from smnp.ast.node.function import FunctionDefinitionNode from smnp.ast.node.program import Program @@ -70,10 +71,12 @@ def evaluate(node, environment): from smnp.runtime.evaluators.function import FunctionDefinitionEvaluator from smnp.runtime.evaluators.extend import ExtendEvaluator + from smnp.runtime.evaluators.block import BlockEvaluator result = Evaluator.oneOf( Evaluator.forNodes(ProgramEvaluator.evaluate, Program), Evaluator.forNodes(FunctionDefinitionEvaluator.evaluate, FunctionDefinitionNode), Evaluator.forNodes(ExtendEvaluator.evaluate, ExtendNode), + Evaluator.forNodes(BlockEvaluator.evaluate, BlockNode), expressionEvaluator() )(node, environment) diff --git a/smnp/runtime/evaluators/block.py b/smnp/runtime/evaluators/block.py index f8b2b1e..f8ae4c8 100644 --- a/smnp/runtime/evaluators/block.py +++ b/smnp/runtime/evaluators/block.py @@ -1,11 +1,18 @@ -from smnp.runtime.evaluator import evaluate -from smnp.runtime.tools import flatListNode +from smnp.runtime.evaluator import evaluate, Evaluator -def evaluateBlock(block, environment): - environment.scopes.append({}) - for node in flatListNode(block): - evaluate(node, environment) - environment.scopes.pop(-1) +class BlockEvaluator(Evaluator): + @classmethod + def evaluator(cls, node, environment): + for child in node.children: + evaluate(child, environment) + +# +# def evaluateBlock(block, environment): +# environment.scopes.append({}) +# for node in flatListNode(block): +# evaluate(node, environment) +# environment.scopes.pop(-1) +#