mirror of
https://github.com/python/cpython.git
synced 2025-07-22 02:35:22 +00:00
gh-89653: PEP 670: Fix PyUnicode_READ() cast (GH-92872)
_Py_CAST() cannot be used with a constant type: use _Py_STATIC_CAST()
instead.
(cherry picked from commit e6fd7992a9
)
Co-authored-by: Victor Stinner <vstinner@python.org>
This commit is contained in:
parent
38d95b5500
commit
1df455042d
2 changed files with 33 additions and 1 deletions
|
@ -50,9 +50,40 @@ test_api_casts(PyObject *Py_UNUSED(module), PyObject *Py_UNUSED(args))
|
|||
}
|
||||
|
||||
|
||||
static PyObject *
|
||||
test_unicode(PyObject *Py_UNUSED(module), PyObject *Py_UNUSED(args))
|
||||
{
|
||||
PyObject *str = PyUnicode_FromString("abc");
|
||||
if (str == nullptr) {
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
assert(PyUnicode_Check(str));
|
||||
assert(PyUnicode_GET_LENGTH(str) == 3);
|
||||
|
||||
// gh-92800: test PyUnicode_READ()
|
||||
const void* data = PyUnicode_DATA(str);
|
||||
assert(data != nullptr);
|
||||
int kind = PyUnicode_KIND(str);
|
||||
assert(kind == PyUnicode_1BYTE_KIND);
|
||||
assert(PyUnicode_READ(kind, data, 0) == 'a');
|
||||
|
||||
// gh-92800: test PyUnicode_READ() casts
|
||||
const void* const_data = PyUnicode_DATA(str);
|
||||
unsigned int ukind = static_cast<unsigned int>(kind);
|
||||
assert(PyUnicode_READ(ukind, const_data, 2) == 'c');
|
||||
|
||||
assert(PyUnicode_READ_CHAR(str, 1) == 'b');
|
||||
|
||||
Py_DECREF(str);
|
||||
Py_RETURN_NONE;
|
||||
}
|
||||
|
||||
|
||||
static PyMethodDef _testcppext_methods[] = {
|
||||
{"add", _testcppext_add, METH_VARARGS, _testcppext_add_doc},
|
||||
{"test_api_casts", test_api_casts, METH_NOARGS, nullptr},
|
||||
{"test_unicode", test_unicode, METH_NOARGS, nullptr},
|
||||
{nullptr, nullptr, 0, nullptr} /* sentinel */
|
||||
};
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue