Commit 3b8a1a8c authored by Stefan Behnel's avatar Stefan Behnel

fix subclassing non-GC types like 'unicode'

parent ef7778b6
...@@ -723,9 +723,11 @@ class ModuleNode(Nodes.Node, Nodes.BlockNode): ...@@ -723,9 +723,11 @@ class ModuleNode(Nodes.Node, Nodes.BlockNode):
if py_attrs: if py_attrs:
self.generate_self_cast(scope, code) self.generate_self_cast(scope, code)
if base_type: if base_type:
code.putln("if (%s->tp_traverse) {" % base_type.typeptr_cname)
code.putln( code.putln(
"e = %s->tp_traverse(o, v, a); if (e) return e;" % "e = %s->tp_traverse(o, v, a); if (e) return e;" %
base_type.typeptr_cname) base_type.typeptr_cname)
code.putln("}")
for entry in py_attrs: for entry in py_attrs:
var_code = "p->%s" % entry.cname var_code = "p->%s" % entry.cname
code.putln( code.putln(
...@@ -756,9 +758,11 @@ class ModuleNode(Nodes.Node, Nodes.BlockNode): ...@@ -756,9 +758,11 @@ class ModuleNode(Nodes.Node, Nodes.BlockNode):
if py_attrs: if py_attrs:
self.generate_self_cast(scope, code) self.generate_self_cast(scope, code)
if base_type: if base_type:
code.putln("if (%s->tp_clear) {" % base_type.typeptr_cname)
code.putln( code.putln(
"%s->tp_clear(o);" % "%s->tp_clear(o);" %
base_type.typeptr_cname) base_type.typeptr_cname)
code.putln("}")
for entry in py_attrs: for entry in py_attrs:
name = "p->%s" % entry.cname name = "p->%s" % entry.cname
code.put_xdecref(name, entry.type) code.put_xdecref(name, entry.type)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment