Enable evaluating blocks '{' '}'

This commit is contained in:
Bartłomiej Pluta
2019-07-08 19:06:50 +02:00
parent 61a5a3565e
commit 63c020fbb9
2 changed files with 17 additions and 7 deletions

View File

@@ -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)

View File

@@ -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)
#