Add Python builtin tp_dealloc override test
This commit is contained in:
parent
67ece1d2bf
commit
4c0c802aa0
2 changed files with 61 additions and 0 deletions
|
|
@ -24,3 +24,24 @@ if is_python_builtin():
|
|||
if not passed:
|
||||
raise RuntimeError("did not catch exception in hash()")
|
||||
|
||||
# Test 4 for tp_dealloc (which is handled differently to other slots in the SWIG source)
|
||||
d = Dealloc1()
|
||||
if cvar.Dealloc1CalledCount != 0:
|
||||
raise RuntimeError("count should be 0")
|
||||
del d
|
||||
if cvar.Dealloc1CalledCount != 1:
|
||||
raise RuntimeError("count should be 1")
|
||||
|
||||
d = Dealloc2()
|
||||
if cvar.Dealloc2CalledCount != 0:
|
||||
raise RuntimeError("count should be 0")
|
||||
del d
|
||||
if cvar.Dealloc2CalledCount != 1:
|
||||
raise RuntimeError("count should be 1")
|
||||
|
||||
d = Dealloc3()
|
||||
if cvar.Dealloc3CalledCount != 0:
|
||||
raise RuntimeError("count should be 0")
|
||||
del d
|
||||
if cvar.Dealloc3CalledCount != 1:
|
||||
raise RuntimeError("count should be 1")
|
||||
|
|
|
|||
|
|
@ -72,3 +72,43 @@ struct ExceptionHashFunction {
|
|||
};
|
||||
%}
|
||||
|
||||
// Test 4 for tp_dealloc (which is handled differently to other slots in the SWIG source)
|
||||
#if defined(SWIGPYTHON_BUILTIN)
|
||||
%feature("python:tp_dealloc") Dealloc1 "Dealloc1Destroyer"
|
||||
%feature("python:tp_dealloc") Dealloc2 "Dealloc2Destroyer"
|
||||
%feature("python:slot", "tp_dealloc", functype="destructor") Dealloc3::Destroyer;
|
||||
#endif
|
||||
|
||||
%inline %{
|
||||
static int Dealloc1CalledCount = 0;
|
||||
static int Dealloc2CalledCount = 0;
|
||||
static int Dealloc3CalledCount = 0;
|
||||
|
||||
struct Dealloc1 {
|
||||
};
|
||||
struct Dealloc2 {
|
||||
~Dealloc2() {}
|
||||
};
|
||||
struct Dealloc3 {
|
||||
void Destroyer() {
|
||||
Dealloc3CalledCount++;
|
||||
delete this;
|
||||
}
|
||||
};
|
||||
%}
|
||||
|
||||
%{
|
||||
void Dealloc1Destroyer(PyObject *v) {
|
||||
SwigPyObject *sobj = (SwigPyObject *) v;
|
||||
Dealloc1 *p = (Dealloc1 *)sobj->ptr;
|
||||
delete p;
|
||||
Dealloc1CalledCount++;
|
||||
}
|
||||
void Dealloc2Destroyer(PyObject *v) {
|
||||
SwigPyObject *sobj = (SwigPyObject *) v;
|
||||
Dealloc2 *p = (Dealloc2 *)sobj->ptr;
|
||||
delete p;
|
||||
Dealloc2CalledCount++;
|
||||
}
|
||||
%}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue