From 4c03ca2f86c5f1c16076a497108d2c6132e4a11f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bart=C5=82omiej=20Pluta?= Date: Fri, 12 Jul 2019 22:55:46 +0200 Subject: [PATCH] Fix loop statement --- smnp/runtime/evaluators/loop.py | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-) diff --git a/smnp/runtime/evaluators/loop.py b/smnp/runtime/evaluators/loop.py index d27a4f5..e9392bd 100644 --- a/smnp/runtime/evaluators/loop.py +++ b/smnp/runtime/evaluators/loop.py @@ -13,12 +13,16 @@ class LoopEvaluator(Evaluator): parameters = [ identifier.value for identifier in node.parameters ] if type(node.parameters) != NoneNode() else [] try: + environment.scopes.append({}) + output = { Type.INTEGER: cls.numberEvaluator, Type.BOOL: cls.boolEvaluator, Type.LIST: cls.listEvaluator, Type.MAP: cls.mapEvaluator }[iterator.type](node, environment, iterator, parameters) + + environment.scopes.pop(-1) except KeyError: raise RuntimeException(f"The {iterator.type.name.lower()} type cannot stand as an iterator for loop statement", node.left.pos) @@ -28,7 +32,6 @@ class LoopEvaluator(Evaluator): def numberEvaluator(cls, node, environment, evaluatedIterator, parameters): output = [] - environment.scopes.append({}) if len(parameters) > 1: raise RuntimeException(f"Loop with numeric iterator can handle only one parameter", node.parameters.pos) @@ -39,7 +42,7 @@ class LoopEvaluator(Evaluator): output.append(evaluate(node.right, environment).value) - environment.scopes.pop(-1) + return output @@ -47,8 +50,6 @@ class LoopEvaluator(Evaluator): def boolEvaluator(cls, node, environment, evaluatedIterator, parameters): output = [] - environment.scopes.append({}) - if len(parameters) > 0: raise RuntimeException(f"Loop with logic iterator can't' handle any parameters", node.parameters.pos) @@ -57,8 +58,6 @@ class LoopEvaluator(Evaluator): output.append(evaluate(node.right, environment).value) condition = expressionEvaluator(doAssert=True)(node.left, environment).value - environment.scopes.pop(-1) - return output @classmethod @@ -77,8 +76,6 @@ class LoopEvaluator(Evaluator): output.append(evaluate(node.right, environment).value) - environment.scopes.pop(-1) - return output @@ -104,6 +101,4 @@ class LoopEvaluator(Evaluator): output.append(evaluate(node.right, environment).value) - environment.scopes.pop(-1) - return output