From: Stefan Behnel Date: Wed, 9 Jan 2008 22:15:09 +0000 (+0100) Subject: fix subclassing non-GC types like 'unicode' X-Git-Tag: 0.9.6.14~29^2~62^2~18 X-Git-Url: http://git.tremily.us/?a=commitdiff_plain;h=56b5cbd33b8d0e85252b7e6ef336af949f7d6f51;p=cython.git fix subclassing non-GC types like 'unicode' --- diff --git a/Cython/Compiler/ModuleNode.py b/Cython/Compiler/ModuleNode.py index 05befd1b..898a393a 100644 --- a/Cython/Compiler/ModuleNode.py +++ b/Cython/Compiler/ModuleNode.py @@ -723,9 +723,11 @@ class ModuleNode(Nodes.Node, Nodes.BlockNode): if py_attrs: self.generate_self_cast(scope, code) if base_type: + code.putln("if (PyType_IS_GC(%s)) {" % base_type.typeptr_cname) code.putln( "e = %s->tp_traverse(o, v, a); if (e) return e;" % base_type.typeptr_cname) + code.putln("}") for entry in py_attrs: var_code = "p->%s" % entry.cname code.putln( @@ -756,9 +758,11 @@ class ModuleNode(Nodes.Node, Nodes.BlockNode): if py_attrs: self.generate_self_cast(scope, code) if base_type: + code.putln("if (PyType_IS_GC(%s)) {" % base_type.typeptr_cname) code.putln( "%s->tp_clear(o);" % base_type.typeptr_cname) + code.putln("}") for entry in py_attrs: name = "p->%s" % entry.cname code.put_xdecref(name, entry.type)