def visit(file, datapack_name, imported=[]): with open(file, "r") as f: code = f.readlines() tree = get_tree(file) i_visitor = IncludeVisitor() i_visitor.visit(tree) modules = i_visitor.modules mem = None for module in modules: mod_file = os.path.join(parent(file), module[0] + ".ms") if os.path.isfile(mod_file): if not module[0] in imported: imported.append(module[0]) mem = visit(mod_file, datapack_name, imported) else: line = module[1] text = code[line - 1].strip() print( f"{Fore.RED}Traceback: Line {line}\n{text}\nModuleNotFoundError: No module named {module[0]}{Style.RESET_ALL}" ) raise Exception("Abort") m_visitor = MVisitor(name, code, file) if mem is not None: m_visitor.igmemory = mem[0] m_visitor.igfunctionargs = mem[1] m_visitor.igfunctionreturn = mem[2] m_visitor.igfunctions = mem[3] m_visitor.igloops = mem[4] m_visitor.loops = mem[5] m_visitor.tag = mem[6] m_visitor.visit(tree) visitor = Visitor(name, code, file) visitor.igmemory = m_visitor.igmemory visitor.igfunctionargs = m_visitor.igfunctionargs visitor.igfunctionreturn = m_visitor.igfunctionreturn visitor.igfunctions = m_visitor.igfunctions visitor.igloops = m_visitor.igloops visitor.loops = m_visitor.loops visitor.tag = m_visitor.tag if mem is not None: visitor.warnings = mem[7] visitor.visit(tree) return (visitor.igmemory, visitor.igfunctionargs, visitor.igfunctionreturn, visitor.igfunctions, visitor.igloops, visitor.loops, visitor.tag, visitor.warnings)
def visit(name, file): tree = get_tree(file) mapvisitor = MappingVisitor(name, file) try: mapvisitor.visit(tree) except MappingException: return None visitor = Visitor(name, file) visitor.igfunctions = mapvisitor.igfunctions visitor.igmemory = mapvisitor.igmemory try: visitor.visit(tree) except CompileTimeException: return None print(visitor.tempvars) print(visitor.memory) return visitor