def visit_FunctionDef(self, node): body = "\n".join([self.visit(n) for n in node.body]) if (self.use_catch_test_cases and is_void_function(node) and node.name.startswith("test")): return generate_catch_test_case(node, body) # is_void_function(node) or is_recursive(node): return generate_template_fun(node, body)
def generate_template_fun(node, body): params = [] for idx, arg in enumerate(node.args.args): params.append(("T" + str(idx + 1), get_id(arg))) typenames = ["typename " + arg[0] for arg in params] template = "inline " if len(typenames) > 0: template = "template <{0}>\n".format(", ".join(typenames)) params = ["{0} {1}".format(arg[0], arg[1]) for arg in params] return_type = "auto" if is_void_function(node): return_type = "void" funcdef = "{0}{1} {2}({3})".format(template, return_type, node.name, ", ".join(params)) return funcdef + " {\n" + body + "\n}"
def visit_FunctionDef(self, node): body = "\n".join([self.indent(self.visit(n)) for n in node.body]) typenames, args = self.visit(node.args) args_list = [] if len(args) and hasattr(node, "self_type"): typenames[0] = node.self_type for i in range(len(args)): typename = typenames[i] arg = args[i] args_list.append(f"{arg}: {typename}".format(arg, typename)) return_type = "" if not is_void_function(node): if node.returns: return_type = ": {0}".format(self.visit(node.returns)) else: return_type = ": RT" args = ", ".join(args_list) funcdef = f"proc {node.name}({args}){return_type} =" return f"{funcdef}\n{body}\n"
def visit_FunctionDef(self, node): body = "\n".join([self.visit(n) for n in node.body]) typenames, args = self.visit(node.args) args_list = [] if args and args[0] == "self": del typenames[0] del args[0] args_list.append("&self") typedecls = [] index = 0 for i in range(len(args)): typename = typenames[i] arg = args[i] if typename == "T": typename = "T{0}".format(index) typedecls.append(typename) index += 1 args_list.append("{0}: {1}".format(arg, typename)) return_type = "" if not is_void_function(node): if node.returns: return_type = "-> {0}".format(self.visit(node.returns)) else: return_type = "-> RT" typedecls.append("RT") template = "" if len(typedecls) > 0: template = "<{0}>".format(", ".join(typedecls)) funcdef = "fn {0}{1}({2}) {3}".format(node.name, template, ", ".join(args_list), return_type) return funcdef + " {\n" + body + "\n}\n"
def visit_FunctionDef(self, node): body = "\n".join([self.visit(n) for n in node.body]) typenames, args = self.visit(node.args) args_list = [] if len(args) and hasattr(node, "self_type"): # implicit this del typenames[0] del args[0] typedecls = [] index = 0 for i in range(len(args)): typename = typenames[i] arg = args[i] if typename == "T": typename = "T{0}".format(index) typedecls.append(typename) index += 1 args_list.append(f"{arg}: {typename}") return_type = "" if not is_void_function(node): if node.returns: return_type = ": {0}".format(self.visit(node.returns)) else: return_type = ": RT" typedecls.append("RT") template = "" if len(typedecls) > 0: template = "<{0}>".format(", ".join(typedecls)) args = ", ".join(args_list) funcdef = f"fun {node.name}{template}({args}){return_type} {{" return funcdef + "\n" + body + "}\n\n"
def visit_FunctionDef(self, node): body = "\n".join([self.visit(n) for n in node.body]) typenames, args = self.visit(node.args) args_list = [] typedecls = [] index = 0 if len(typenames) and typenames[0] == None and hasattr( node, "self_type"): typenames[0] = node.self_type for i in range(len(args)): typename = typenames[i] arg = args[i] if typename == "T": typename = "T{0}".format(index) typedecls.append(typename) index += 1 args_list.append("{0}::{1}".format(arg, typename)) return_type = "" if not is_void_function(node): if node.returns: return_type = "::{0}".format(self.visit(node.returns)) else: return_type = "::RT" typedecls.append("RT") template = "" if len(typedecls) > 0: template = "{{{0}}}".format(", ".join(typedecls)) args = ", ".join(args_list) funcdef = f"function {node.name}{template}({args}){return_type}" return funcdef + "\n" + body + "\nend\n"
def test_is_not_void_for_fun_with_return_value(): source = parse("def foo(x):", " return x") foo = source.body[0] assert not is_void_function(foo)
def test_is_void_for_fun_with_no_return(): source = parse("def foo(x):", " bar(x)") foo = source.body[0] assert is_void_function(foo)