Commit 9df8c9da authored by Robert Bradshaw's avatar Robert Bradshaw

Fix destructor name computation in the face of namespace template args.

parent af38a31a
...@@ -1132,7 +1132,11 @@ class ModuleNode(Nodes.Node, Nodes.BlockNode): ...@@ -1132,7 +1132,11 @@ class ModuleNode(Nodes.Node, Nodes.BlockNode):
code.putln("if (p->__weakref__) PyObject_ClearWeakRefs(o);") code.putln("if (p->__weakref__) PyObject_ClearWeakRefs(o);")
for entry in cpp_class_attrs: for entry in cpp_class_attrs:
destructor_name = entry.type.cname.split("::")[-1] split_cname = entry.type.cname.split('::')
destructor_name = split_cname.pop()
# Make sure the namespace delimiter was not in a template arg.
while destructor_name.count('<') != destructor_name.count('>'):
destructor_name = split_cname.pop() + '::' + destructor_name
code.putln("p->%s.%s::~%s();" % code.putln("p->%s.%s::~%s();" %
(entry.cname, entry.type.declaration_code(""), destructor_name)) (entry.cname, entry.type.declaration_code(""), destructor_name))
......
# tag: cpp # tag: cpp
from libcpp.vector cimport vector
cdef extern from "shapes.h" namespace "shapes": cdef extern from "shapes.h" namespace "shapes":
cdef cppclass Shape: cdef cppclass Shape:
...@@ -138,3 +140,22 @@ def test_class_member(): ...@@ -138,3 +140,22 @@ def test_class_member():
del e1, e2 del e1, e2
assert destructor_count - start_destructor_count == 2, \ assert destructor_count - start_destructor_count == 2, \
destructor_count - start_destructor_count destructor_count - start_destructor_count
cdef class TemplateClassMember:
cdef vector[int] x
cdef vector[vector[Empty]] vec
def test_template_class_member():
"""
>>> test_template_class_member()
"""
cdef vector[Empty] inner
inner.push_back(Empty())
inner.push_back(Empty())
o = TemplateClassMember()
o.vec.push_back(inner)
start_destructor_count = destructor_count
del o
assert destructor_count - start_destructor_count == 2, \
destructor_count - start_destructor_count
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