MCPcopy
hub / github.com/rocky/python-uncompyle6 / make_function2

Function make_function2

uncompyle6/semantics/make_function2.py:36–203  ·  view source on GitHub ↗

Dump function definition, doc string, and function body. This code is specialied for Python 2.

(self, node, is_lambda, nested=1, code_node=None)

Source from the content-addressed store, hash-verified

34
35
36def make_function2(self, node, is_lambda, nested=1, code_node=None):
37 """
38 Dump function definition, doc string, and function body.
39 This code is specialied for Python 2.
40 """
41
42 def build_param(ast, name, default):
43 """build parameters:
44 - handle defaults
45 - handle format tuple parameters
46 """
47 # if formal parameter is a tuple, the parameter name
48 # starts with a dot (eg. '.1', '.2')
49 if name.startswith("."):
50 # replace the name with the tuple-string
51 name = self.get_tuple_parameter(ast, name)
52 pass
53
54 if default:
55 value = self.traverse(default, indent="")
56 result = "%s=%s" % (name, value)
57 if result[-2:] == "= ": # default was 'LOAD_CONST None'
58 result += "None"
59 return result
60 else:
61 return name
62
63 # MAKE_FUNCTION_... or MAKE_CLOSURE_...
64 assert node[-1].kind.startswith("MAKE_")
65
66 args_node = node[-1]
67 if isinstance(args_node.attr, tuple):
68 # positional args are after kwargs
69 defparams = node[1 : args_node.attr[0] + 1]
70 pos_args, kw_args, annotate_argc = args_node.attr
71 else:
72 defparams = node[: args_node.attr]
73 kw_args = 0
74 pass
75
76 lambda_index = None
77
78 if lambda_index and is_lambda and iscode(node[lambda_index].attr):
79 assert node[lambda_index].kind == "LOAD_LAMBDA"
80 code = node[lambda_index].attr
81 else:
82 code = code_node.attr
83
84 assert iscode(code)
85 code = Code(code, self.scanner, self.currentclass)
86
87 # add defaults values to parameter names
88 argc = code.co_argcount
89 paramnames = list(code.co_varnames[:argc])
90
91 # defaults are for last n parameters, thus reverse
92 paramnames.reverse()
93 defparams.reverse()

Callers 1

make_functionMethod · 0.90

Calls 14

CodeClass · 0.90
print_docstringFunction · 0.90
find_all_globalsFunction · 0.90
find_noneFunction · 0.90
build_paramFunction · 0.70
build_astMethod · 0.45
writeMethod · 0.45
appendMethod · 0.45
joinMethod · 0.45
traverseMethod · 0.45
preorderMethod · 0.45

Tested by

no test coverage detected