✨
This commit is contained in:
@ -226,6 +226,10 @@ class Builtin(Command):
|
||||
vtable, ftable, result = self.args[0].eval(vtable,ftable)
|
||||
|
||||
return vtable, ftable, int(result)
|
||||
elif self.builtin == "str":
|
||||
vtable, ftable, result = self.args[0].eval(vtable,ftable)
|
||||
|
||||
return vtable, ftable, str(result)
|
||||
else:
|
||||
raise Exception(f"Unknown builtin {self.builtin}")
|
||||
|
||||
@ -298,9 +302,14 @@ class Scope(Statement):
|
||||
return f"scope([{rep_join(self.statements)}])"
|
||||
|
||||
def eval(self, vtable, ftable):
|
||||
if "#return" in vtable:
|
||||
del vtable["#return"]
|
||||
|
||||
result = None
|
||||
for statement in self.statements:
|
||||
# print(statement)
|
||||
vtable, ftable, _ = statement.eval(vtable, ftable)
|
||||
# print(statement, vtable)
|
||||
if "#return" in vtable:
|
||||
result = vtable["#return"]
|
||||
break
|
||||
@ -330,6 +339,7 @@ class Call(Statement):
|
||||
|
||||
vtable["#ARGS"] += len(args)
|
||||
|
||||
vtable_old, ftable_old = vtable, ftable
|
||||
vtable, ftable, result = ftable[self.function_name][1].eval(vtable, ftable)
|
||||
|
||||
if "#return" in vtable:
|
||||
@ -337,7 +347,8 @@ class Call(Statement):
|
||||
|
||||
vtable["#ARGS"] -= len(args)
|
||||
|
||||
return vtable, ftable, result
|
||||
print(vtable, vtable_old)
|
||||
return vtable_old, ftable_old, result
|
||||
|
||||
class CommandIf(Command):
|
||||
def __init__(self, statement: Statement, condition):
|
||||
@ -395,13 +406,15 @@ class CommandUntil(Command):
|
||||
return f"until({self.statement}, {self.condition})"
|
||||
|
||||
def eval(self, vtable, ftable):
|
||||
if "#return" in vtable:
|
||||
del vtable["#return"]
|
||||
|
||||
while True:
|
||||
vtable, ftable, result = self.condition.eval(vtable, ftable)
|
||||
if not result:
|
||||
vtable, ftable, _ = self.statement.eval(vtable, ftable)
|
||||
if "#return" in vtable:
|
||||
result = vtable["#return"]
|
||||
del vtable["#return"]
|
||||
return vtable, ftable, result
|
||||
else:
|
||||
return vtable, ftable, result
|
||||
|
@ -110,7 +110,6 @@ class Parser():
|
||||
|
||||
@self.pg.production('expression : DATA_BOOL')
|
||||
def exp_bool(tokens):
|
||||
|
||||
return ast_nodes.ExpBool(tokens[0].value == "true")
|
||||
|
||||
@self.pg.production('expression : SYMBOL_LCURL expressions SYMBOL_RCURL')
|
||||
|
Reference in New Issue
Block a user