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 []
|
parameters = [ identifier.value for identifier in node.parameters ] if type(node.parameters) != NoneNode() else []
|
||||||
|
|
||||||
try:
|
try:
|
||||||
|
environment.scopes.append({})
|
||||||
|
|
||||||
output = {
|
output = {
|
||||||
Type.INTEGER: cls.numberEvaluator,
|
Type.INTEGER: cls.numberEvaluator,
|
||||||
Type.BOOL: cls.boolEvaluator,
|
Type.BOOL: cls.boolEvaluator,
|
||||||
Type.LIST: cls.listEvaluator,
|
Type.LIST: cls.listEvaluator,
|
||||||
Type.MAP: cls.mapEvaluator
|
Type.MAP: cls.mapEvaluator
|
||||||
}[iterator.type](node, environment, iterator, parameters)
|
}[iterator.type](node, environment, iterator, parameters)
|
||||||
|
|
||||||
|
environment.scopes.pop(-1)
|
||||||
except KeyError:
|
except KeyError:
|
||||||
raise RuntimeException(f"The {iterator.type.name.lower()} type cannot stand as an iterator for loop statement", node.left.pos)
|
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):
|
def numberEvaluator(cls, node, environment, evaluatedIterator, parameters):
|
||||||
output = []
|
output = []
|
||||||
|
|
||||||
environment.scopes.append({})
|
|
||||||
|
|
||||||
if len(parameters) > 1:
|
if len(parameters) > 1:
|
||||||
raise RuntimeException(f"Loop with numeric iterator can handle only one parameter", node.parameters.pos)
|
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)
|
output.append(evaluate(node.right, environment).value)
|
||||||
|
|
||||||
environment.scopes.pop(-1)
|
|
||||||
|
|
||||||
return output
|
return output
|
||||||
|
|
||||||
@@ -47,8 +50,6 @@ class LoopEvaluator(Evaluator):
|
|||||||
def boolEvaluator(cls, node, environment, evaluatedIterator, parameters):
|
def boolEvaluator(cls, node, environment, evaluatedIterator, parameters):
|
||||||
output = []
|
output = []
|
||||||
|
|
||||||
environment.scopes.append({})
|
|
||||||
|
|
||||||
if len(parameters) > 0:
|
if len(parameters) > 0:
|
||||||
raise RuntimeException(f"Loop with logic iterator can't' handle any parameters", node.parameters.pos)
|
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)
|
output.append(evaluate(node.right, environment).value)
|
||||||
condition = expressionEvaluator(doAssert=True)(node.left, environment).value
|
condition = expressionEvaluator(doAssert=True)(node.left, environment).value
|
||||||
|
|
||||||
environment.scopes.pop(-1)
|
|
||||||
|
|
||||||
return output
|
return output
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
@@ -77,8 +76,6 @@ class LoopEvaluator(Evaluator):
|
|||||||
|
|
||||||
output.append(evaluate(node.right, environment).value)
|
output.append(evaluate(node.right, environment).value)
|
||||||
|
|
||||||
environment.scopes.pop(-1)
|
|
||||||
|
|
||||||
return output
|
return output
|
||||||
|
|
||||||
|
|
||||||
@@ -104,6 +101,4 @@ class LoopEvaluator(Evaluator):
|
|||||||
|
|
||||||
output.append(evaluate(node.right, environment).value)
|
output.append(evaluate(node.right, environment).value)
|
||||||
|
|
||||||
environment.scopes.pop(-1)
|
|
||||||
|
|
||||||
return output
|
return output
|
||||||
|
|||||||
Reference in New Issue
Block a user