From dba1fe1df8277430600e8193174fb48dfb2deea1 Mon Sep 17 00:00:00 2001 From: Arif812 <119361515+Arif812@users.noreply.github.com> Date: Sun, 28 Apr 2024 14:34:48 -0400 Subject: [PATCH] added safeloop function --- src/libs.py | 2 +- src/nodevisitor.py | 18 +++++++++++++----- 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/src/libs.py b/src/libs.py index a457bd5..c2e88ff 100644 --- a/src/libs.py +++ b/src/libs.py @@ -16,7 +16,7 @@ TYPS = """""" # old errs = ["ValueError", "TypeError", "AttributeError", "IndexError", "KeyError", "ZeroDivisionError", "AssertionError", "NotImplementedError", "RuntimeError", "NameError", "SyntaxError", "IndentationError", "TabError", "ImportError", "ModuleNotFoundError", "OSError", "FileNotFoundError", "PermissionError", "EOFError", "ConnectionError", "TimeoutError", "UnboundLocalError", "RecursionError", "MemoryError", "OverflowError", "FloatingPointError", "ArithmeticError", "ReferenceError", "SystemError", "SystemExit", "GeneratorExit", "KeyboardInterrupt", "StopIteration", "Exception", "BaseException", "Error"] -libs = ["class", "op_is", "dict", "list", "op_in", "safeadd", "__name__", "range", "len", "abs", "str", "int", "sum", "max", "min", "reversed", "split", "round", "all", "any", "ord", "chr", "callable", "float", "super", "format", "hex", "id", "map", "bool", "divmod", "slice", "anext", "ascii", "dir", "getattr", "globals", "hasattr", "isinstance", "issubclass", "iter", "locals", "oct", "pow", "eval", "exec", "filter", "frozenset", "aiter", "bin", "complex", "deltaattr", "enumerate", "bytearray", "bytes", "compile", "help", "memoryview", "repr", "sorted", "vars"] +libs = ["class", "op_is", "dict", "list", "op_in", "safeadd", "safeloop", "__name__", "range", "len", "abs", "str", "int", "sum", "max", "min", "reversed", "split", "round", "all", "any", "ord", "chr", "callable", "float", "super", "format", "hex", "id", "map", "bool", "divmod", "slice", "anext", "ascii", "dir", "getattr", "globals", "hasattr", "isinstance", "issubclass", "iter", "locals", "oct", "pow", "eval", "exec", "filter", "frozenset", "aiter", "bin", "complex", "deltaattr", "enumerate", "bytearray", "bytes", "compile", "help", "memoryview", "repr", "sorted", "vars"] DEPENDENCY = """\n\n--> imports py = _G.rbxpy or require(game.ReplicatedStorage.Packages.pyruntime) diff --git a/src/nodevisitor.py b/src/nodevisitor.py index a0252c0..3ea4c3d 100644 --- a/src/nodevisitor.py +++ b/src/nodevisitor.py @@ -57,8 +57,8 @@ def visit_Assign(self, node): local_keyword = "local " last_ctx["locals"].add_symbol(target) - if target in reserves: - error(f"'{target}'is a reserved Luau keyword.") + if target in reserves or target in libs.libs: + error(f"'{target}' is a reserved Luau keyword.") self.emit("{local}{target} = {value}".format(local=local_keyword, target=target, @@ -564,12 +564,19 @@ def visit_FunctionDef(self, node): def visit_For(self, node): """Visit for loop""" - line = "for {target} in {iter} do" - + values = { "target": self.visit_all(node.target, inline=True), "iter": self.visit_all(node.iter, inline=True), } + + for x in libs.libs: + if x in values["iter"]: + line = "for {target} in {iter} do" + break + else: + line = "for {target} in safeloop({iter}) do" + continue self.emit(line.format(**values)) @@ -1146,4 +1153,5 @@ def depend(self, value): def get_dependencies(self): return dependencies def get_exports(self): - return exports \ No newline at end of file + return exports + \ No newline at end of file