+import ctypes
import unittest
from ctypes import *
from test.test_ctypes import need_symbol
(9*2, 8*3, 7*4, 6*5, 5*6, 4*7, 3*8, 2*9))
def test_recursive_as_param(self):
- from ctypes import c_int
-
class A:
pass
a = A()
a._as_parameter_ = a
- with self.assertRaises(RecursionError):
- c_int.from_param(a)
+ for c_type in (
+ ctypes.c_wchar_p,
+ ctypes.c_char_p,
+ ctypes.c_void_p,
+ ctypes.c_int, # PyCSimpleType
+ POINT, # CDataType
+ ):
+ with self.subTest(c_type=c_type):
+ with self.assertRaises(RecursionError):
+ c_type.from_param(a)
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
return NULL;
}
if (as_parameter) {
+ if (_Py_EnterRecursiveCall(" while processing _as_parameter_")) {
+ Py_DECREF(as_parameter);
+ return NULL;
+ }
value = CDataType_from_param(type, as_parameter);
Py_DECREF(as_parameter);
+ _Py_LeaveRecursiveCall();
return value;
}
PyErr_Format(PyExc_TypeError,
return NULL;
}
if (as_parameter) {
+ if (_Py_EnterRecursiveCall(" while processing _as_parameter_")) {
+ Py_DECREF(as_parameter);
+ return NULL;
+ }
value = c_wchar_p_from_param(type, as_parameter);
Py_DECREF(as_parameter);
+ _Py_LeaveRecursiveCall();
return value;
}
/* XXX better message */
return NULL;
}
if (as_parameter) {
+ if (_Py_EnterRecursiveCall(" while processing _as_parameter_")) {
+ Py_DECREF(as_parameter);
+ return NULL;
+ }
value = c_char_p_from_param(type, as_parameter);
Py_DECREF(as_parameter);
+ _Py_LeaveRecursiveCall();
return value;
}
/* XXX better message */
return NULL;
}
if (as_parameter) {
+ if (_Py_EnterRecursiveCall(" while processing _as_parameter_")) {
+ Py_DECREF(as_parameter);
+ return NULL;
+ }
value = c_void_p_from_param(type, as_parameter);
Py_DECREF(as_parameter);
+ _Py_LeaveRecursiveCall();
return value;
}
/* XXX better message */
return NULL;
}
value = PyCSimpleType_from_param(type, as_parameter);
- _Py_LeaveRecursiveCall();
Py_DECREF(as_parameter);
Py_XDECREF(exc);
+ _Py_LeaveRecursiveCall();
return value;
}
if (exc) {