Handle "classdef" nonterminal for 3.0 >= version 3.0 < 3.6
(node)
| 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"): |
nothing calls this directly
no test coverage detected