Esempio n. 1
0
    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])
Esempio n. 2
0
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
Esempio n. 3
0
 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)]