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

Function n_classdef36

uncompyle6/semantics/customize36.py:158–264  ·  view source on GitHub ↗
(node)

Source from the content-addressed store, hash-verified

156 self.n_build_map_unpack_with_call = build_unpack_map_with_call
157
158 def n_classdef36(node):
159 # class definition ('class X(A,B,C):')
160 cclass = self.currentclass
161
162 # Pick out various needed bits of information
163 # * class_name - the name of the class
164 # * subclass_info - the parameters to the class e.g.
165 # class Foo(bar, baz)
166 # ----------
167 # * subclass_code - the code for the subclass body
168 subclass_info = None
169 if node == "classdefdeco2":
170 if isinstance(node[1][1].attr, str):
171 class_name = node[1][1].attr
172 if self.is_pypy and class_name.find("<locals>") > 0:
173 class_name = class_name.split(".")[-1]
174
175 else:
176 class_name = node[1][2].attr
177 build_class = node
178 else:
179 build_class = node[0]
180 if build_class == "build_class_kw":
181 mkfunc = build_class[1]
182 assert mkfunc == "mkfunc"
183 subclass_info = build_class
184 if hasattr(mkfunc[0], "attr") and iscode(mkfunc[0].attr):
185 subclass_code = mkfunc[0].attr
186 else:
187 assert mkfunc[0] == "load_closure"
188 subclass_code = mkfunc[1].attr
189 assert iscode(subclass_code)
190 if build_class[1][0] == "load_closure":
191 code_node = build_class[1][1]
192 else:
193 code_node = build_class[1][0]
194 class_name = get_code_name(code_node.attr)
195
196 assert "mkfunc" == build_class[1]
197 mkfunc = build_class[1]
198 if mkfunc[0] in ("kwargs", "no_kwargs"):
199 for n in mkfunc:
200 if hasattr(n, "attr") and iscode(n.attr):
201 subclass_code = n.attr
202 break
203 pass
204 if node == "classdefdeco2":
205 subclass_info = node
206 else:
207 subclass_info = node[0]
208 elif build_class[1][0] == "load_closure":
209 # Python 3 with closures not functions
210 load_closure = build_class[1]
211 subclass_code = None
212 for i in range(-4, -1):
213 if load_closure[i] == "LOAD_CODE":
214 subclass_code = load_closure[i].attr
215 break

Callers

nothing calls this directly

Calls 7

get_code_nameFunction · 0.90
indent_moreMethod · 0.80
build_classMethod · 0.80
indent_lessMethod · 0.80
writeMethod · 0.45
print_super_classes3Method · 0.45
printlnMethod · 0.45

Tested by

no test coverage detected