Fix loop statement
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user