def to_python(self): """ Cria um módulo Python correspondente ao módulo atual. Retorna uma AST Python. O módulo criado possui uma estrutura semelhante à forma abaixo:: def _module(): # imports, typedefs, funções, etc return {'export1': export1, ...} globals().update(_module()) """ module_func_body = ( *cremilda_default_imports(self.get_default_imports()), *to_python_imports(self.imports), *to_python_typedefs(self.typedefs), *to_python_operators(self.operators), *to_python_functions(self.functions), *to_python_constants(self.constants), return_({x: var(x) for x in self.exposing}), ) module_func = function._module()[module_func_body] stmt = as_stmt(var.globals().method('update', var._module())) return block([module_func, stmt])
def to_python_functions(functions): """ Converte uma lista de definições de funções para as declarações correspondentes em Python. """ py_funcs = [] for name, func in functions.items(): name, args, body = func.args expr = to_python(body) py_funcs.append(function[name](*args)[return_(expr)]) return py_funcs
def Fundef(name, fargs, expr): # noqa: N802, N805 fargs = map(to_python_expr, fargs) expr = to_python_expr(expr) return function[name](*fargs)[return_(expr)]