From 56b5cbd33b8d0e85252b7e6ef336af949f7d6f51 Mon Sep 17 00:00:00 2001 From: Stefan Behnel Date: Wed, 9 Jan 2008 23:15:09 +0100 Subject: [PATCH] fix subclassing non-GC types like 'unicode' --- Cython/Compiler/ModuleNode.py | 4 ++++ 1 file changed, 4 insertions(+) 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) -- 2.26.2