#define NDArray_Check(v) Py_IS_TYPE(v, &NDArray_Type)
#define CHECK_LIST_OR_TUPLE(v) \
- if (!PyList_Check(v) && !PyTuple_Check(v)) { \
- PyErr_SetString(PyExc_TypeError, \
- #v " must be a list or a tuple"); \
- return NULL; \
- } \
+ do { \
+ if (!PyList_Check(v) && !PyTuple_Check(v)) { \
+ PyErr_SetString(PyExc_TypeError, \
+ #v " must be a list or a tuple"); \
+ return NULL; \
+ } \
+ } while (0)
#define PyMem_XFree(v) \
do { if (v) PyMem_Free(v); } while (0)
Py_ssize_t itemsize;
/* ndim = len(shape) */
- CHECK_LIST_OR_TUPLE(shape)
+ CHECK_LIST_OR_TUPLE(shape);
ndim = PySequence_Fast_GET_SIZE(shape);
if (ndim > ND_MAX_NDIM) {
PyErr_Format(PyExc_ValueError,
/* len(strides) = len(shape) */
if (strides) {
- CHECK_LIST_OR_TUPLE(strides)
+ CHECK_LIST_OR_TUPLE(strides);
if (PySequence_Fast_GET_SIZE(strides) == 0)
strides = NULL;
else if (flags & ND_FORTRAN) {
return NULL;
}
else {
- CHECK_LIST_OR_TUPLE(items)
+ CHECK_LIST_OR_TUPLE(items);
Py_INCREF(items);
}
test_config(PyObject *self, PyObject *Py_UNUSED(ignored))
{
#define CHECK_SIZEOF(FATNAME, TYPE) \
- if (FATNAME != sizeof(TYPE)) \
- return sizeof_error(self, #FATNAME, #TYPE, FATNAME, sizeof(TYPE))
+ do { \
+ if (FATNAME != sizeof(TYPE)) { \
+ return sizeof_error(self, #FATNAME, #TYPE, FATNAME, sizeof(TYPE)); \
+ } \
+ } while (0)
CHECK_SIZEOF(SIZEOF_SHORT, short);
CHECK_SIZEOF(SIZEOF_INT, int);
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wtype-limits"
#endif
-#define CHECK_SIZEOF(TYPE, EXPECTED) \
- if (EXPECTED != sizeof(TYPE)) { \
- PyErr_Format(get_testerror(self), \
- "sizeof(%s) = %u instead of %u", \
- #TYPE, sizeof(TYPE), EXPECTED); \
- return (PyObject*)NULL; \
- }
+#define CHECK_SIZEOF(TYPE, EXPECTED) \
+ do { \
+ if (EXPECTED != sizeof(TYPE)) { \
+ PyErr_Format(get_testerror(self), \
+ "sizeof(%s) = %u instead of %u", \
+ #TYPE, sizeof(TYPE), EXPECTED); \
+ return (PyObject*)NULL; \
+ } \
+ } while (0)
#define IS_SIGNED(TYPE) (((TYPE)-1) < (TYPE)0)
-#define CHECK_SIGNNESS(TYPE, SIGNED) \
- if (IS_SIGNED(TYPE) != SIGNED) { \
- PyErr_Format(get_testerror(self), \
- "%s signness is %i, instead of %i", \
- #TYPE, IS_SIGNED(TYPE), SIGNED); \
- return (PyObject*)NULL; \
- }
+#define CHECK_SIGNNESS(TYPE, SIGNED) \
+ do { \
+ if (IS_SIGNED(TYPE) != SIGNED) { \
+ PyErr_Format(get_testerror(self), \
+ "%s signness is %i, instead of %i", \
+ #TYPE, IS_SIGNED(TYPE), SIGNED); \
+ return (PyObject*)NULL; \
+ } \
+ } while (0)
/* integer types */
CHECK_SIZEOF(Py_UCS1, 1);
double result;
const char *msg;
-#define CHECK_STRING(STR, expected) \
- result = PyOS_string_to_double(STR, NULL, NULL); \
- if (result == -1.0 && PyErr_Occurred()) \
- return NULL; \
- if (result != (double)expected) { \
- msg = "conversion of " STR " to float failed"; \
- goto fail; \
- }
+#define CHECK_STRING(STR, expected) \
+ do { \
+ result = PyOS_string_to_double(STR, NULL, NULL); \
+ if (result == -1.0 && PyErr_Occurred()) { \
+ return NULL; \
+ } \
+ if (result != (double)expected) { \
+ msg = "conversion of " STR " to float failed"; \
+ goto fail; \
+ } \
+ } while (0)
-#define CHECK_INVALID(STR) \
- result = PyOS_string_to_double(STR, NULL, NULL); \
- if (result == -1.0 && PyErr_Occurred()) { \
- if (PyErr_ExceptionMatches(PyExc_ValueError)) \
- PyErr_Clear(); \
- else \
- return NULL; \
- } \
- else { \
- msg = "conversion of " STR " didn't raise ValueError"; \
- goto fail; \
- }
+#define CHECK_INVALID(STR) \
+ do { \
+ result = PyOS_string_to_double(STR, NULL, NULL); \
+ if (result == -1.0 && PyErr_Occurred()) { \
+ if (PyErr_ExceptionMatches(PyExc_ValueError)) { \
+ PyErr_Clear(); \
+ } \
+ else { \
+ return NULL; \
+ } \
+ } \
+ else { \
+ msg = "conversion of " STR " didn't raise ValueError"; \
+ goto fail; \
+ } \
+ } while (0)
CHECK_STRING("0.1", 0.1);
CHECK_STRING("1.234", 1.234);
};
known_capsule *known = &known_capsules[0];
-#define FAIL(x) { error = (x); goto exit; }
+#define FAIL(x) \
+ do { \
+ error = (x); \
+ goto exit; \
+ } while (0)
#define CHECK_DESTRUCTOR \
- if (capsule_error) { \
- FAIL(capsule_error); \
- } \
- else if (!capsule_destructor_call_count) { \
- FAIL("destructor not called!"); \
- } \
- capsule_destructor_call_count = 0; \
+ do { \
+ if (capsule_error) { \
+ FAIL(capsule_error); \
+ } \
+ else if (!capsule_destructor_call_count) { \
+ FAIL("destructor not called!"); \
+ } \
+ capsule_destructor_call_count = 0; \
+ } while (0)
object = PyCapsule_New(capsule_pointer, capsule_name, capsule_destructor);
PyCapsule_SetContext(object, capsule_context);
static char buffer[256];
#undef FAIL
#define FAIL(x) \
- { \
- sprintf(buffer, "%s module: \"%s\" attribute: \"%s\"", \
- x, known->module, known->attribute); \
- error = buffer; \
- goto exit; \
- } \
+ do { \
+ sprintf(buffer, "%s module: \"%s\" attribute: \"%s\"", \
+ x, known->module, known->attribute); \
+ error = buffer; \
+ goto exit; \
+ } while (0)
PyObject *module = PyImport_ImportModule(known->module);
if (module) {
"an already initialized key");
}
#define CHECK_TSS_API(expr) \
+ do { \
(void)(expr); \
if (!PyThread_tss_is_created(&tss_key)) { \
return raiseTestError(self, "test_pythread_tss_key_state", \
"TSS key initialization state was not " \
- "preserved after calling " #expr); }
+ "preserved after calling " #expr); \
+ } \
+ } while (0)
+
CHECK_TSS_API(PyThread_tss_set(&tss_key, NULL));
CHECK_TSS_API(PyThread_tss_get(&tss_key));
#undef CHECK_TSS_API
\
Py_DECREF(obj); \
Py_RETURN_NONE; \
- } while (0) \
+ } while (0)
// Test Py_NewRef() and Py_XNewRef() macros