boolangery / py-lua-parser

A Lua parser and AST builder written in Python.
MIT License
117 stars 36 forks source link

luaparser.utils.visitor.VisitorException: No visitor found for class <class 'dict'> #42

Closed 4rmy closed 1 year ago

4rmy commented 1 year ago

Traceback (most recent call last): File "c:\Users\hjaco\Downloads\lua obf\v2\main.py", line 79, in code = ast.to_lua_source(tree) File "C:\Users\hjaco\AppData\Local\Programs\Python\Python310\lib\site-packages\luaparser\ast.py", line 40, in to_lua_source return printers.LuaOutputVisitor(indent_size=indent).visit(root) File "C:\Users\hjaco\AppData\Local\Programs\Python\Python310\lib\site-packages\luaparser\utils\visitor.py", line 29, in _visitor_impl return method(self, arg) File "C:\Users\hjaco\AppData\Local\Programs\Python\Python310\lib\site-packages\luaparser\printers.py", line 245, in visit return self.visit(node.body) File "C:\Users\hjaco\AppData\Local\Programs\Python\Python310\lib\site-packages\luaparser\utils\visitor.py", line 29, in _visitor_impl return method(self, arg) File "C:\Users\hjaco\AppData\Local\Programs\Python\Python310\lib\site-packages\luaparser\printers.py", line 251, in visit "\n".join([self.visit(n) for n in node.body]), " " (self._indent_size if self._level > 1 else 0) File "C:\Users\hjaco\AppData\Local\Programs\Python\Python310\lib\site-packages\luaparser\printers.py", line 251, in "\n".join([self.visit(n) for n in node.body]), " " (self._indent_size if self._level > 1 else 0) File "C:\Users\hjaco\AppData\Local\Programs\Python\Python310\lib\site-packages\luaparser\utils\visitor.py", line 29, in _visitor_impl return method(self, arg) File "C:\Users\hjaco\AppData\Local\Programs\Python\Python310\lib\site-packages\luaparser\printers.py", line 382, in visit

Input code:

local t1 = {}

function t1:sayHello()
  print("Hello")
end

t1:sayHello()

Python code:

stack = []
for node in ast.walk(tree):
    if isinstance(node, nodeType.Name):
        #node.id
        result = inStack(stack, node.id, False)
        if result[0]:
            node.id = stack[result[1]]
        else:
            if isinstance(prevNode, nodeType.LocalAssign) or isinstance(prevNode, nodeType.LocalFunction) or isinstance(node, nodeType.Function):
                name = genName(stack)
                stack.append({"old": node.id, "new": name})
                node.id = name
                print(node.id)
    prevNode = node

# convert to code
code = ast.to_lua_source(tree)
4rmy commented 1 year ago

sorry, I found the issue after a good night's rest