# HG changeset patch
# User Stefan Behnel <scoder@users.berlios.de>
# Date 1199917706 -3600
# Node ID e097bfd9b3b2115f0cec3d53c1062287dab6a816
# Parent  59e4b70626f25058e08467fb708dad7b21b8b8d5
fix subclassing non-GC types like 'unicode'

diff -r 59e4b70626f2 -r e097bfd9b3b2 Compiler/ModuleNode.py
--- a/Compiler/ModuleNode.py	Wed Jan 09 23:26:01 2008 +0100
+++ b/Compiler/ModuleNode.py	Wed Jan 09 23:28:26 2008 +0100
@@ -723,9 +723,11 @@ class ModuleNode(Nodes.Node, Nodes.Block
         if py_attrs:
             self.generate_self_cast(scope, code)
         if base_type:
+            code.putln("if (%s->tp_traverse) {" % 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.Block
         if py_attrs:
             self.generate_self_cast(scope, code)
         if base_type:
+            code.putln("if (%s->tp_clear) {" % 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)

