def as_static_function_call(func, mod_name, name=None): assert isinstance(func, FunctionDef) assert isinstance(mod_name, str) # create function alias by prepending 'mod_' to its name func_alias = func.clone('mod_' + str(func.name)) # from module import func as func_alias imports = [Import(target=AsName(func.name, func_alias.name), source=mod_name)] # function arguments args = sanitize_arguments(func.arguments) # function body call = FunctionCall(func_alias, args) results = func.results results = results[0] if len(results) == 1 else results stmt = call if len(func.results) == 0 else Assign(results, call) body = [stmt] # new function declaration new_func = FunctionDef(func.name, list(args), func.results, body, arguments_inout = func.arguments_inout, functions = func.functions, interfaces = func.interfaces, imports = imports, doc_string = func.doc_string, ) # make it compatible with c static_func = as_static_function(new_func, name) return static_func
def _visit_withitem(self, stmt): # stmt.optional_vars context = self._visit(stmt.context_expr) if stmt.optional_vars: return AsName(context, stmt.optional_vars) else: return context
def _visit_alias(self, stmt): if not isinstance(stmt.name, str): raise TypeError('Expecting a string') old = self._visit(stmt.name) if stmt.asname: new = self._visit(stmt.asname) return AsName(old, new) else: return old
def _visit_Import(self, stmt): expr = [] for name in stmt.names: imp = self._visit(name) if isinstance(imp, AsName): source = AsName(self._treat_import_source(imp.name, 0), imp.target) else: source = self._treat_import_source(imp, 0) import_line = Import(source) import_line.set_fst(stmt) self.insert_import(import_line) expr.append(import_line) if len(expr)==1: return expr[0] else: expr = CodeBlock(expr) expr.set_fst(stmt) return expr