If the wrong return type in the hash function was used, an error: SystemError: error return without exception set was raised Add some tests for testing builtin slots
74 lines
1.5 KiB
OpenEdge ABL
74 lines
1.5 KiB
OpenEdge ABL
// Test customizing slots when using the -builtin option
|
|
|
|
%module python_builtin
|
|
|
|
%inline %{
|
|
#ifdef SWIGPYTHON_BUILTIN
|
|
bool is_python_builtin() { return true; }
|
|
#else
|
|
bool is_python_builtin() { return false; }
|
|
#endif
|
|
%}
|
|
|
|
// Test 1 for tp_hash
|
|
#if defined(SWIGPYTHON_BUILTIN)
|
|
%feature("python:tp_hash") SimpleValue "SimpleValueHashFunction"
|
|
#endif
|
|
|
|
%inline %{
|
|
struct SimpleValue {
|
|
int value;
|
|
SimpleValue(int value) : value(value) {}
|
|
static SimpleValue *inout(SimpleValue *sv) {
|
|
return sv;
|
|
}
|
|
};
|
|
%}
|
|
|
|
%{
|
|
#if PY_VERSION_HEX >= 0x03020000
|
|
Py_hash_t SimpleValueHashFunction(PyObject *v)
|
|
#else
|
|
long SimpleValueHashFunction(PyObject *v)
|
|
#endif
|
|
{
|
|
SwigPyObject *sobj = (SwigPyObject *) v;
|
|
SimpleValue *p = (SimpleValue *)sobj->ptr;
|
|
return p->value;
|
|
}
|
|
hashfunc test_hashfunc_cast() {
|
|
return SimpleValueHashFunction;
|
|
}
|
|
%}
|
|
|
|
// Test 2 for tp_hash
|
|
#if defined(SWIGPYTHON_BUILTIN)
|
|
%feature("python:slot", "tp_hash", functype="hashfunc") BadHashFunctionReturnType::bad_hash_function;
|
|
#endif
|
|
|
|
%inline %{
|
|
struct BadHashFunctionReturnType {
|
|
static const char * bad_hash_function() {
|
|
return "bad hash function";
|
|
}
|
|
};
|
|
%}
|
|
|
|
// Test 3 for tp_hash
|
|
#if defined(SWIGPYTHON_BUILTIN)
|
|
%feature("python:slot", "tp_hash", functype="hashfunc") ExceptionHashFunction::exception_hash_function;
|
|
#endif
|
|
|
|
%catches(const char *) exception_hash_function;
|
|
|
|
%inline %{
|
|
#if PY_VERSION_HEX < 0x03020000
|
|
#define Py_hash_t long
|
|
#endif
|
|
struct ExceptionHashFunction {
|
|
static Py_hash_t exception_hash_function() {
|
|
throw "oops";
|
|
}
|
|
};
|
|
%}
|
|
|