Fix loop statement

This commit is contained in:
Bartłomiej Pluta
2019-07-12 22:55:46 +02:00
parent 033d864b0f
commit 4c03ca2f86

View File

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