diff options
author | Serhiy Storchaka <storchaka@gmail.com> | 2023-09-01 18:42:42 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-09-01 18:42:42 (GMT) |
commit | 0e01fac315dfa705ac8a6954485546f28cf4c87d (patch) | |
tree | 7c2553acdbee7e017a5bad3e02649522f971fb6b /Modules | |
parent | 578ebc5d5fab2e5e0b87636361c6aeb8d2b287fa (diff) | |
download | cpython-0e01fac315dfa705ac8a6954485546f28cf4c87d.zip cpython-0e01fac315dfa705ac8a6954485546f28cf4c87d.tar.gz cpython-0e01fac315dfa705ac8a6954485546f28cf4c87d.tar.bz2 |
Add Modules/_testcapi/util.h header (GH-108774)
It contains common macros used in C API tests.
Diffstat (limited to 'Modules')
-rw-r--r-- | Modules/_testcapi/abstract.c | 19 | ||||
-rw-r--r-- | Modules/_testcapi/dict.c | 19 | ||||
-rw-r--r-- | Modules/_testcapi/exceptions.c | 2 | ||||
-rw-r--r-- | Modules/_testcapi/unicode.c | 58 | ||||
-rw-r--r-- | Modules/_testcapi/util.h | 25 | ||||
-rw-r--r-- | Modules/_testcapimodule.c | 18 |
6 files changed, 48 insertions, 93 deletions
diff --git a/Modules/_testcapi/abstract.c b/Modules/_testcapi/abstract.c index 10d7ff8..91a1ee3 100644 --- a/Modules/_testcapi/abstract.c +++ b/Modules/_testcapi/abstract.c @@ -1,24 +1,7 @@ #include <stddef.h> // ptrdiff_t #include "parts.h" - -#define NULLABLE(x) do { if (x == Py_None) x = NULL; } while (0); - -#define RETURN_INT(value) do { \ - int _ret = (value); \ - if (_ret == -1) { \ - return NULL; \ - } \ - return PyLong_FromLong(_ret); \ - } while (0) - -#define RETURN_SIZE(value) do { \ - Py_ssize_t _ret = (value); \ - if (_ret == -1) { \ - return NULL; \ - } \ - return PyLong_FromSsize_t(_ret); \ - } while (0) +#include "util.h" static PyObject * diff --git a/Modules/_testcapi/dict.c b/Modules/_testcapi/dict.c index 6c3f9cd..6720f04 100644 --- a/Modules/_testcapi/dict.c +++ b/Modules/_testcapi/dict.c @@ -1,24 +1,7 @@ #include <stddef.h> // ptrdiff_t #include "parts.h" - -#define NULLABLE(x) do { if (x == Py_None) x = NULL; } while (0); - -#define RETURN_INT(value) do { \ - int _ret = (value); \ - if (_ret == -1) { \ - return NULL; \ - } \ - return PyLong_FromLong(_ret); \ - } while (0) - -#define RETURN_SIZE(value) do { \ - Py_ssize_t _ret = (value); \ - if (_ret == -1) { \ - return NULL; \ - } \ - return PyLong_FromSsize_t(_ret); \ - } while (0) +#include "util.h" static PyObject * diff --git a/Modules/_testcapi/exceptions.c b/Modules/_testcapi/exceptions.c index d7edf8c..025b42d 100644 --- a/Modules/_testcapi/exceptions.c +++ b/Modules/_testcapi/exceptions.c @@ -1,7 +1,7 @@ #include "parts.h" +#include "util.h" #include "clinic/exceptions.c.h" -#define NULLABLE(x) do { if (x == Py_None) x = NULL; } while (0); /*[clinic input] module _testcapi diff --git a/Modules/_testcapi/unicode.c b/Modules/_testcapi/unicode.c index b4c6c4b..f2cf9a7 100644 --- a/Modules/_testcapi/unicode.c +++ b/Modules/_testcapi/unicode.c @@ -1,6 +1,7 @@ #include <stddef.h> // ptrdiff_t #include "parts.h" +#include "util.h" static struct PyModuleDef *_testcapimodule = NULL; // set at initialization @@ -101,7 +102,6 @@ test_widechar(PyObject *self, PyObject *Py_UNUSED(ignored)) Py_RETURN_NONE; } -#define NULLABLE(x) do { if (x == Py_None) x = NULL; } while (0); static PyObject * unicode_copy(PyObject *unicode) @@ -347,13 +347,8 @@ unicode_substring(PyObject *self, PyObject *args) static PyObject * unicode_getlength(PyObject *self, PyObject *arg) { - Py_ssize_t result; - NULLABLE(arg); - result = PyUnicode_GetLength(arg); - if (result == -1) - return NULL; - return PyLong_FromSsize_t(result); + RETURN_SIZE(PyUnicode_GetLength(arg)); } /* Test PyUnicode_ReadChar() */ @@ -482,16 +477,12 @@ static PyObject * unicode_aswidechar_null(PyObject *self, PyObject *args) { PyObject *unicode; - Py_ssize_t buflen, size; + Py_ssize_t buflen; if (!PyArg_ParseTuple(args, "On", &unicode, &buflen)) return NULL; NULLABLE(unicode); - size = PyUnicode_AsWideChar(unicode, NULL, buflen); - if (size == -1) { - return NULL; - } - return PyLong_FromSsize_t(size); + RETURN_SIZE(PyUnicode_AsWideChar(unicode, NULL, buflen)); } /* Test PyUnicode_AsWideCharString() */ @@ -1293,17 +1284,13 @@ unicode_count(PyObject *self, PyObject *args) PyObject *substr; Py_ssize_t start; Py_ssize_t end; - Py_ssize_t result; if (!PyArg_ParseTuple(args, "OOnn", &str, &substr, &start, &end)) return NULL; NULLABLE(str); NULLABLE(substr); - result = PyUnicode_Count(str, substr, start, end); - if (result == -1) - return NULL; - return PyLong_FromSsize_t(result); + RETURN_SIZE(PyUnicode_Count(str, substr, start, end)); } /* Test PyUnicode_Find() */ @@ -1323,8 +1310,11 @@ unicode_find(PyObject *self, PyObject *args) NULLABLE(str); NULLABLE(substr); result = PyUnicode_Find(str, substr, start, end, direction); - if (result == -2) + if (result == -2) { + assert(PyErr_Occurred()); return NULL; + } + assert(!PyErr_Occurred()); return PyLong_FromSsize_t(result); } @@ -1337,17 +1327,13 @@ unicode_tailmatch(PyObject *self, PyObject *args) Py_ssize_t start; Py_ssize_t end; int direction; - Py_ssize_t result; if (!PyArg_ParseTuple(args, "OOnni", &str, &substr, &start, &end, &direction)) return NULL; NULLABLE(str); NULLABLE(substr); - result = PyUnicode_Tailmatch(str, substr, start, end, direction); - if (result == -1) - return NULL; - return PyLong_FromSsize_t(result); + RETURN_SIZE(PyUnicode_Tailmatch(str, substr, start, end, direction)); } /* Test PyUnicode_FindChar() */ @@ -1366,10 +1352,12 @@ unicode_findchar(PyObject *self, PyObject *args) } NULLABLE(str); result = PyUnicode_FindChar(str, (Py_UCS4)ch, start, end, direction); - if (result == -2) + if (result == -2) { + assert(PyErr_Occurred()); return NULL; - else - return PyLong_FromSsize_t(result); + } + assert(!PyErr_Occurred()); + return PyLong_FromSsize_t(result); } /* Test PyUnicode_Replace() */ @@ -1407,6 +1395,7 @@ unicode_compare(PyObject *self, PyObject *args) if (result == -1 && PyErr_Occurred()) { return NULL; } + assert(!PyErr_Occurred()); return PyLong_FromLong(result); } @@ -1467,32 +1456,21 @@ unicode_contains(PyObject *self, PyObject *args) { PyObject *container; PyObject *element; - int result; if (!PyArg_ParseTuple(args, "OO", &container, &element)) return NULL; NULLABLE(container); NULLABLE(element); - result = PyUnicode_Contains(container, element); - if (result == -1 && PyErr_Occurred()) { - return NULL; - } - return PyLong_FromLong(result); + RETURN_INT(PyUnicode_Contains(container, element)); } /* Test PyUnicode_IsIdentifier() */ static PyObject * unicode_isidentifier(PyObject *self, PyObject *arg) { - int result; - NULLABLE(arg); - result = PyUnicode_IsIdentifier(arg); - if (result == -1 && PyErr_Occurred()) { - return NULL; - } - return PyLong_FromLong(result); + RETURN_INT(PyUnicode_IsIdentifier(arg)); } /* Test PyUnicode_CopyCharacters() */ diff --git a/Modules/_testcapi/util.h b/Modules/_testcapi/util.h new file mode 100644 index 0000000..05ccb12 --- /dev/null +++ b/Modules/_testcapi/util.h @@ -0,0 +1,25 @@ +#define NULLABLE(x) do { \ + if (x == Py_None) { \ + x = NULL; \ + } \ + } while (0); + +#define RETURN_INT(value) do { \ + int _ret = (value); \ + if (_ret == -1) { \ + assert(PyErr_Occurred()); \ + return NULL; \ + } \ + assert(!PyErr_Occurred()); \ + return PyLong_FromLong(_ret); \ + } while (0) + +#define RETURN_SIZE(value) do { \ + Py_ssize_t _ret = (value); \ + if (_ret == -1) { \ + assert(PyErr_Occurred()); \ + return NULL; \ + } \ + assert(!PyErr_Occurred()); \ + return PyLong_FromSsize_t(_ret); \ + } while (0) diff --git a/Modules/_testcapimodule.c b/Modules/_testcapimodule.c index f8b36ff..4fc354a 100644 --- a/Modules/_testcapimodule.c +++ b/Modules/_testcapimodule.c @@ -43,16 +43,8 @@ // Several parts of this module are broken out into files in _testcapi/. // Include definitions from there. #include "_testcapi/parts.h" +#include "_testcapi/util.h" -#define NULLABLE(x) do { if (x == Py_None) x = NULL; } while (0); - -#define RETURN_INT(value) do { \ - int _ret = (value); \ - if (_ret == -1) { \ - return NULL; \ - } \ - return PyLong_FromLong(_ret); \ - } while (0) // Forward declarations static struct PyModuleDef _testcapimodule; @@ -1333,19 +1325,13 @@ static PyObject * test_PyBuffer_SizeFromFormat(PyObject *self, PyObject *args) { const char *format; - Py_ssize_t result; if (!PyArg_ParseTuple(args, "s:test_PyBuffer_SizeFromFormat", &format)) { return NULL; } - result = PyBuffer_SizeFromFormat(format); - if (result == -1) { - return NULL; - } - - return PyLong_FromSsize_t(result); + RETURN_SIZE(PyBuffer_SizeFromFormat(format)); } /* Test that the fatal error from not having a current thread doesn't |