MCPcopy Index your code
hub / github.com/rocky/python-uncompyle6 / n_classdef3

Function n_classdef3

uncompyle6/semantics/customize3.py:80–177  ·  view source on GitHub ↗

Handle "classdef" nonterminal for 3.0 >= version 3.0 < 3.6

(node)

Source from the content-addressed store, hash-verified

78 self.n_tryfinallystmt = tryfinallystmt
79
80 def n_classdef3(node):
81 """Handle "classdef" nonterminal for 3.0 >= version 3.0 < 3.6"""
82
83 assert (3, 0) <= self.version < (3, 6)
84
85 # class definition ('class X(A,B,C):')
86 cclass = self.currentclass
87
88 # Pick out various needed bits of information
89 # * class_name - the name of the class
90 # * subclass_info - the parameters to the class e.g.
91 # class Foo(bar, baz)
92 # ----------
93 # * subclass_code - the code for the subclass body
94 subclass_info = None
95 if node == "classdefdeco2":
96 if self.version < (3, 4):
97 class_name = node[2][0].attr
98 else:
99 class_name = node[1][2].attr
100 build_class = node
101 else:
102 build_class = node[0]
103 class_name = node[1][0].attr
104 build_class = node[0]
105
106 assert "mkfunc" == build_class[1]
107 mkfunc = build_class[1]
108 if mkfunc[0] in ("kwargs", "no_kwargs"):
109 if (3, 0) <= self.version < (3, 3):
110 for n in mkfunc:
111 if hasattr(n, "attr") and iscode(n.attr):
112 subclass_code = n.attr
113 break
114 elif n == "expr":
115 subclass_code = n[0].attr
116 pass
117 pass
118 else:
119 for n in mkfunc:
120 if hasattr(n, "attr") and iscode(n.attr):
121 subclass_code = n.attr
122 break
123 pass
124 pass
125 if node == "classdefdeco2":
126 subclass_info = node
127 else:
128 subclass_info = node[0]
129 elif build_class[1][0] == "load_closure":
130 # Python 3 with closures not functions
131 load_closure = build_class[1]
132 if hasattr(load_closure[-3], "attr"):
133 # Python 3.3 classes with closures work like this.
134 # Note have to test before 3.2 case because
135 # index -2 also has an attr.
136 subclass_code = find_code_node(load_closure, -3).attr
137 elif hasattr(load_closure[-2], "attr"):

Callers

nothing calls this directly

Calls 7

find_code_nodeFunction · 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