🐐 Continue statement
This commit is contained in:
@@ -494,6 +494,21 @@ class Erumpe(Node):
|
||||
return vtable, ValNul()
|
||||
|
||||
|
||||
class Continva(Node):
|
||||
def __eq__(self, other):
|
||||
return type(self) == type(other)
|
||||
|
||||
def __repr__(self) -> str:
|
||||
return "Continva()"
|
||||
|
||||
def print(self):
|
||||
return "CONTINVA"
|
||||
|
||||
def _eval(self, vtable):
|
||||
vtable["#continue"] = True
|
||||
return vtable, ValNul()
|
||||
|
||||
|
||||
class Nullus(Node):
|
||||
def __eq__(self, other):
|
||||
return type(self) == type(other)
|
||||
@@ -723,12 +738,16 @@ class DumStatement(Node):
|
||||
while not cond:
|
||||
for statement in self.statements:
|
||||
vtable, val = statement.eval(vtable)
|
||||
if vtable["#break"] or vtable["#return"] is not None:
|
||||
if vtable["#break"] or vtable["#continue"] or vtable["#return"] is not None:
|
||||
break
|
||||
last_val = val
|
||||
if vtable["#break"]:
|
||||
vtable["#break"] = False
|
||||
break
|
||||
if vtable["#continue"]:
|
||||
vtable["#continue"] = False
|
||||
vtable, cond = self.test.eval(vtable)
|
||||
continue
|
||||
if vtable["#return"] is not None:
|
||||
break
|
||||
vtable, cond = self.test.eval(vtable)
|
||||
@@ -765,12 +784,15 @@ class PerStatement(Node):
|
||||
vtable[variable_name] = item
|
||||
for statement in self.statements:
|
||||
vtable, val = statement.eval(vtable)
|
||||
if vtable["#break"] or vtable["#return"] is not None:
|
||||
if vtable["#break"] or vtable["#continue"] or vtable["#return"] is not None:
|
||||
break
|
||||
last_val = val
|
||||
if vtable["#break"]:
|
||||
vtable["#break"] = False
|
||||
break
|
||||
if vtable["#continue"]:
|
||||
vtable["#continue"] = False
|
||||
continue
|
||||
if vtable["#return"] is not None:
|
||||
break
|
||||
return vtable, last_val
|
||||
@@ -904,6 +926,7 @@ class Program(BaseBox):
|
||||
def eval(self, *_):
|
||||
vtable = {
|
||||
"#break": False,
|
||||
"#continue": False,
|
||||
"#return": None,
|
||||
"#modules": [m.module_name for m in self.modules],
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user