Replace PyUnicodeObject* by PyObject* where it was irrevelant

A Unicode string can now be a PyASCIIObject, PyCompactUnicodeObject or
PyUnicodeObject. Aliasing a PyASCIIObject* or PyCompactUnicodeObject* to
PyUnicodeObject* is wrong
This commit is contained in:
Victor Stinner 2011-10-23 20:04:37 +02:00
parent 0d60e87ad6
commit 9db1a8b69f
3 changed files with 131 additions and 144 deletions

View File

@ -1828,7 +1828,7 @@ PyAPI_FUNC(int) PyUnicode_IsIdentifier(PyObject *s);
#ifndef Py_LIMITED_API #ifndef Py_LIMITED_API
/* Externally visible for str.strip(unicode) */ /* Externally visible for str.strip(unicode) */
PyAPI_FUNC(PyObject *) _PyUnicode_XStrip( PyAPI_FUNC(PyObject *) _PyUnicode_XStrip(
PyUnicodeObject *self, PyObject *self,
int striptype, int striptype,
PyObject *sepobj PyObject *sepobj
); );

View File

@ -95,7 +95,7 @@ This function is a helper for the "find" family (find, rfind, index,
rindex) and for count, startswith and endswith, because they all have rindex) and for count, startswith and endswith, because they all have
the same behaviour for the arguments. the same behaviour for the arguments.
It does not touch the variables received until it knows everything It does not touch the variables received until it knows everything
is ok. is ok.
*/ */
@ -145,13 +145,13 @@ first argument is a unicode object.
Note that we receive a pointer to the pointer of the substring object, Note that we receive a pointer to the pointer of the substring object,
so when we create that object in this function we don't DECREF it, so when we create that object in this function we don't DECREF it,
because it continues living in the caller functions (those functions, because it continues living in the caller functions (those functions,
after finishing using the substring, must DECREF it). after finishing using the substring, must DECREF it).
*/ */
Py_LOCAL_INLINE(int) Py_LOCAL_INLINE(int)
STRINGLIB(parse_args_finds_unicode)(const char * function_name, PyObject *args, STRINGLIB(parse_args_finds_unicode)(const char * function_name, PyObject *args,
PyUnicodeObject **substring, PyObject **substring,
Py_ssize_t *start, Py_ssize_t *end) Py_ssize_t *start, Py_ssize_t *end)
{ {
PyObject *tmp_substring; PyObject *tmp_substring;
@ -161,7 +161,7 @@ STRINGLIB(parse_args_finds_unicode)(const char * function_name, PyObject *args,
tmp_substring = PyUnicode_FromObject(tmp_substring); tmp_substring = PyUnicode_FromObject(tmp_substring);
if (!tmp_substring) if (!tmp_substring)
return 0; return 0;
*substring = (PyUnicodeObject *)tmp_substring; *substring = tmp_substring;
return 1; return 1;
} }
return 0; return 0;

View File

@ -585,7 +585,7 @@ resize_compact(PyObject *unicode, Py_ssize_t length)
} }
static int static int
resize_inplace(PyUnicodeObject *unicode, Py_ssize_t length) resize_inplace(PyObject *unicode, Py_ssize_t length)
{ {
wchar_t *wstr; wchar_t *wstr;
assert(!PyUnicode_IS_COMPACT(unicode)); assert(!PyUnicode_IS_COMPACT(unicode));
@ -675,17 +675,17 @@ resize_copy(PyObject *unicode, Py_ssize_t length)
return copy; return copy;
} }
else { else {
PyUnicodeObject *w; PyObject *w;
assert(_PyUnicode_WSTR(unicode) != NULL); assert(_PyUnicode_WSTR(unicode) != NULL);
assert(_PyUnicode_DATA_ANY(unicode) == NULL); assert(_PyUnicode_DATA_ANY(unicode) == NULL);
w = _PyUnicode_New(length); w = (PyObject*)_PyUnicode_New(length);
if (w == NULL) if (w == NULL)
return NULL; return NULL;
copy_length = _PyUnicode_WSTR_LENGTH(unicode); copy_length = _PyUnicode_WSTR_LENGTH(unicode);
copy_length = Py_MIN(copy_length, length); copy_length = Py_MIN(copy_length, length);
Py_UNICODE_COPY(_PyUnicode_WSTR(w), _PyUnicode_WSTR(unicode), Py_UNICODE_COPY(_PyUnicode_WSTR(w), _PyUnicode_WSTR(unicode),
copy_length); copy_length);
return (PyObject*)w; return w;
} }
} }
@ -983,7 +983,7 @@ PyUnicode_New(Py_ssize_t size, Py_UCS4 maxchar)
characters for a terminating null character. */ characters for a terminating null character. */
static void static void
unicode_convert_wchar_to_ucs4(const wchar_t *begin, const wchar_t *end, unicode_convert_wchar_to_ucs4(const wchar_t *begin, const wchar_t *end,
PyUnicodeObject *unicode) PyObject *unicode)
{ {
const wchar_t *iter; const wchar_t *iter;
Py_UCS4 *ucs4_out; Py_UCS4 *ucs4_out;
@ -1254,7 +1254,7 @@ static int unicode_ready_calls = 0;
static int static int
unicode_ready(PyObject **p_obj, int replace) unicode_ready(PyObject **p_obj, int replace)
{ {
PyUnicodeObject *unicode; PyObject *unicode;
wchar_t *end; wchar_t *end;
Py_UCS4 maxchar = 0; Py_UCS4 maxchar = 0;
Py_ssize_t num_surrogates; Py_ssize_t num_surrogates;
@ -1263,7 +1263,7 @@ unicode_ready(PyObject **p_obj, int replace)
#endif #endif
assert(p_obj != NULL); assert(p_obj != NULL);
unicode = (PyUnicodeObject *)*p_obj; unicode = *p_obj;
/* _PyUnicode_Ready() is only intended for old-style API usage where /* _PyUnicode_Ready() is only intended for old-style API usage where
strings were created using _PyObject_New() and where no canonical strings were created using _PyObject_New() and where no canonical
@ -1423,7 +1423,7 @@ _PyUnicode_Ready(PyObject *op)
} }
static void static void
unicode_dealloc(register PyUnicodeObject *unicode) unicode_dealloc(register PyObject *unicode)
{ {
switch (PyUnicode_CHECK_INTERNED(unicode)) { switch (PyUnicode_CHECK_INTERNED(unicode)) {
case SSTATE_NOT_INTERNED: case SSTATE_NOT_INTERNED:
@ -1526,7 +1526,7 @@ unicode_resize(PyObject **p_unicode, Py_ssize_t length)
assert(_PyUnicode_CheckConsistency(*p_unicode, 0)); assert(_PyUnicode_CheckConsistency(*p_unicode, 0));
return 0; return 0;
} }
return resize_inplace((PyUnicodeObject*)unicode, length); return resize_inplace(unicode, length);
} }
int int
@ -1566,7 +1566,7 @@ get_latin1_char(unsigned char ch)
PyObject * PyObject *
PyUnicode_FromUnicode(const Py_UNICODE *u, Py_ssize_t size) PyUnicode_FromUnicode(const Py_UNICODE *u, Py_ssize_t size)
{ {
PyUnicodeObject *unicode; PyObject *unicode;
Py_UCS4 maxchar = 0; Py_UCS4 maxchar = 0;
Py_ssize_t num_surrogates; Py_ssize_t num_surrogates;
@ -1593,7 +1593,7 @@ PyUnicode_FromUnicode(const Py_UNICODE *u, Py_ssize_t size)
&maxchar, &num_surrogates) == -1) &maxchar, &num_surrogates) == -1)
return NULL; return NULL;
unicode = (PyUnicodeObject *) PyUnicode_New(size - num_surrogates, unicode = PyUnicode_New(size - num_surrogates,
maxchar); maxchar);
if (!unicode) if (!unicode)
return NULL; return NULL;
@ -1626,14 +1626,12 @@ PyUnicode_FromUnicode(const Py_UNICODE *u, Py_ssize_t size)
} }
assert(_PyUnicode_CheckConsistency(unicode, 1)); assert(_PyUnicode_CheckConsistency(unicode, 1));
return (PyObject *)unicode; return unicode;
} }
PyObject * PyObject *
PyUnicode_FromStringAndSize(const char *u, Py_ssize_t size) PyUnicode_FromStringAndSize(const char *u, Py_ssize_t size)
{ {
PyUnicodeObject *unicode;
if (size < 0) { if (size < 0) {
PyErr_SetString(PyExc_SystemError, PyErr_SetString(PyExc_SystemError,
"Negative size passed to PyUnicode_FromStringAndSize"); "Negative size passed to PyUnicode_FromStringAndSize");
@ -1660,11 +1658,7 @@ PyUnicode_FromStringAndSize(const char *u, Py_ssize_t size)
return PyUnicode_DecodeUTF8(u, size, NULL); return PyUnicode_DecodeUTF8(u, size, NULL);
} }
unicode = _PyUnicode_New(size); return (PyObject *)_PyUnicode_New(size);
if (!unicode)
return NULL;
return (PyObject *)unicode;
} }
PyObject * PyObject *
@ -2650,14 +2644,14 @@ PyUnicode_FromFormat(const char *format, ...)
character) written into w. Write at most size wide characters (including character) written into w. Write at most size wide characters (including
the null character). */ the null character). */
static Py_ssize_t static Py_ssize_t
unicode_aswidechar(PyUnicodeObject *unicode, unicode_aswidechar(PyObject *unicode,
wchar_t *w, wchar_t *w,
Py_ssize_t size) Py_ssize_t size)
{ {
Py_ssize_t res; Py_ssize_t res;
const wchar_t *wstr; const wchar_t *wstr;
wstr = PyUnicode_AsUnicodeAndSize((PyObject *)unicode, &res); wstr = PyUnicode_AsUnicodeAndSize(unicode, &res);
if (wstr == NULL) if (wstr == NULL)
return -1; return -1;
@ -2682,7 +2676,7 @@ PyUnicode_AsWideChar(PyObject *unicode,
PyErr_BadInternalCall(); PyErr_BadInternalCall();
return -1; return -1;
} }
return unicode_aswidechar((PyUnicodeObject*)unicode, w, size); return unicode_aswidechar(unicode, w, size);
} }
wchar_t* wchar_t*
@ -2697,7 +2691,7 @@ PyUnicode_AsWideCharString(PyObject *unicode,
return NULL; return NULL;
} }
buflen = unicode_aswidechar((PyUnicodeObject *)unicode, NULL, 0); buflen = unicode_aswidechar(unicode, NULL, 0);
if (buflen == -1) if (buflen == -1)
return NULL; return NULL;
if (PY_SSIZE_T_MAX / sizeof(wchar_t) < buflen) { if (PY_SSIZE_T_MAX / sizeof(wchar_t) < buflen) {
@ -2710,7 +2704,7 @@ PyUnicode_AsWideCharString(PyObject *unicode,
PyErr_NoMemory(); PyErr_NoMemory();
return NULL; return NULL;
} }
buflen = unicode_aswidechar((PyUnicodeObject *)unicode, buffer, buflen); buflen = unicode_aswidechar(unicode, buffer, buflen);
if (buflen == -1) if (buflen == -1)
return NULL; return NULL;
if (size != NULL) if (size != NULL)
@ -3322,13 +3316,12 @@ char*
PyUnicode_AsUTF8AndSize(PyObject *unicode, Py_ssize_t *psize) PyUnicode_AsUTF8AndSize(PyObject *unicode, Py_ssize_t *psize)
{ {
PyObject *bytes; PyObject *bytes;
PyUnicodeObject *u = (PyUnicodeObject *)unicode;
if (!PyUnicode_Check(unicode)) { if (!PyUnicode_Check(unicode)) {
PyErr_BadArgument(); PyErr_BadArgument();
return NULL; return NULL;
} }
if (PyUnicode_READY(u) == -1) if (PyUnicode_READY(unicode) == -1)
return NULL; return NULL;
if (PyUnicode_UTF8(unicode) == NULL) { if (PyUnicode_UTF8(unicode) == NULL) {
@ -3336,13 +3329,15 @@ PyUnicode_AsUTF8AndSize(PyObject *unicode, Py_ssize_t *psize)
bytes = _PyUnicode_AsUTF8String(unicode, "strict"); bytes = _PyUnicode_AsUTF8String(unicode, "strict");
if (bytes == NULL) if (bytes == NULL)
return NULL; return NULL;
_PyUnicode_UTF8(u) = PyObject_MALLOC(PyBytes_GET_SIZE(bytes) + 1); _PyUnicode_UTF8(unicode) = PyObject_MALLOC(PyBytes_GET_SIZE(bytes) + 1);
if (_PyUnicode_UTF8(u) == NULL) { if (_PyUnicode_UTF8(unicode) == NULL) {
Py_DECREF(bytes); Py_DECREF(bytes);
return NULL; return NULL;
} }
_PyUnicode_UTF8_LENGTH(u) = PyBytes_GET_SIZE(bytes); _PyUnicode_UTF8_LENGTH(unicode) = PyBytes_GET_SIZE(bytes);
Py_MEMCPY(_PyUnicode_UTF8(u), PyBytes_AS_STRING(bytes), _PyUnicode_UTF8_LENGTH(u) + 1); Py_MEMCPY(_PyUnicode_UTF8(unicode),
PyBytes_AS_STRING(bytes),
_PyUnicode_UTF8_LENGTH(unicode) + 1);
Py_DECREF(bytes); Py_DECREF(bytes);
} }
@ -3365,7 +3360,6 @@ static int unicode_as_unicode_calls = 0;
Py_UNICODE * Py_UNICODE *
PyUnicode_AsUnicodeAndSize(PyObject *unicode, Py_ssize_t *size) PyUnicode_AsUnicodeAndSize(PyObject *unicode, Py_ssize_t *size)
{ {
PyUnicodeObject *u;
const unsigned char *one_byte; const unsigned char *one_byte;
#if SIZEOF_WCHAR_T == 4 #if SIZEOF_WCHAR_T == 4
const Py_UCS2 *two_bytes; const Py_UCS2 *two_bytes;
@ -3381,20 +3375,19 @@ PyUnicode_AsUnicodeAndSize(PyObject *unicode, Py_ssize_t *size)
PyErr_BadArgument(); PyErr_BadArgument();
return NULL; return NULL;
} }
u = (PyUnicodeObject*)unicode; if (_PyUnicode_WSTR(unicode) == NULL) {
if (_PyUnicode_WSTR(u) == NULL) {
/* Non-ASCII compact unicode object */ /* Non-ASCII compact unicode object */
assert(_PyUnicode_KIND(u) != 0); assert(_PyUnicode_KIND(unicode) != 0);
assert(PyUnicode_IS_READY(u)); assert(PyUnicode_IS_READY(unicode));
#ifdef Py_DEBUG #ifdef Py_DEBUG
++unicode_as_unicode_calls; ++unicode_as_unicode_calls;
#endif #endif
if (PyUnicode_KIND(u) == PyUnicode_4BYTE_KIND) { if (PyUnicode_KIND(unicode) == PyUnicode_4BYTE_KIND) {
#if SIZEOF_WCHAR_T == 2 #if SIZEOF_WCHAR_T == 2
four_bytes = PyUnicode_4BYTE_DATA(u); four_bytes = PyUnicode_4BYTE_DATA(unicode);
ucs4_end = four_bytes + _PyUnicode_LENGTH(u); ucs4_end = four_bytes + _PyUnicode_LENGTH(unicode);
num_surrogates = 0; num_surrogates = 0;
for (; four_bytes < ucs4_end; ++four_bytes) { for (; four_bytes < ucs4_end; ++four_bytes) {
@ -3402,17 +3395,17 @@ PyUnicode_AsUnicodeAndSize(PyObject *unicode, Py_ssize_t *size)
++num_surrogates; ++num_surrogates;
} }
_PyUnicode_WSTR(u) = (wchar_t *) PyObject_MALLOC( _PyUnicode_WSTR(unicode) = (wchar_t *) PyObject_MALLOC(
sizeof(wchar_t) * (_PyUnicode_LENGTH(u) + 1 + num_surrogates)); sizeof(wchar_t) * (_PyUnicode_LENGTH(unicode) + 1 + num_surrogates));
if (!_PyUnicode_WSTR(u)) { if (!_PyUnicode_WSTR(unicode)) {
PyErr_NoMemory(); PyErr_NoMemory();
return NULL; return NULL;
} }
_PyUnicode_WSTR_LENGTH(u) = _PyUnicode_LENGTH(u) + num_surrogates; _PyUnicode_WSTR_LENGTH(unicode) = _PyUnicode_LENGTH(unicode) + num_surrogates;
w = _PyUnicode_WSTR(u); w = _PyUnicode_WSTR(unicode);
wchar_end = w + _PyUnicode_WSTR_LENGTH(u); wchar_end = w + _PyUnicode_WSTR_LENGTH(unicode);
four_bytes = PyUnicode_4BYTE_DATA(u); four_bytes = PyUnicode_4BYTE_DATA(unicode);
for (; four_bytes < ucs4_end; ++four_bytes, ++w) { for (; four_bytes < ucs4_end; ++four_bytes, ++w) {
if (*four_bytes > 0xFFFF) { if (*four_bytes > 0xFFFF) {
/* encode surrogate pair in this case */ /* encode surrogate pair in this case */
@ -3435,35 +3428,35 @@ PyUnicode_AsUnicodeAndSize(PyObject *unicode, Py_ssize_t *size)
#endif #endif
} }
else { else {
_PyUnicode_WSTR(u) = (wchar_t *) PyObject_MALLOC(sizeof(wchar_t) * _PyUnicode_WSTR(unicode) = (wchar_t *) PyObject_MALLOC(sizeof(wchar_t) *
(_PyUnicode_LENGTH(u) + 1)); (_PyUnicode_LENGTH(unicode) + 1));
if (!_PyUnicode_WSTR(u)) { if (!_PyUnicode_WSTR(unicode)) {
PyErr_NoMemory(); PyErr_NoMemory();
return NULL; return NULL;
} }
if (!PyUnicode_IS_COMPACT_ASCII(u)) if (!PyUnicode_IS_COMPACT_ASCII(unicode))
_PyUnicode_WSTR_LENGTH(u) = _PyUnicode_LENGTH(u); _PyUnicode_WSTR_LENGTH(unicode) = _PyUnicode_LENGTH(unicode);
w = _PyUnicode_WSTR(u); w = _PyUnicode_WSTR(unicode);
wchar_end = w + _PyUnicode_LENGTH(u); wchar_end = w + _PyUnicode_LENGTH(unicode);
if (PyUnicode_KIND(u) == PyUnicode_1BYTE_KIND) { if (PyUnicode_KIND(unicode) == PyUnicode_1BYTE_KIND) {
one_byte = PyUnicode_1BYTE_DATA(u); one_byte = PyUnicode_1BYTE_DATA(unicode);
for (; w < wchar_end; ++one_byte, ++w) for (; w < wchar_end; ++one_byte, ++w)
*w = *one_byte; *w = *one_byte;
/* null-terminate the wstr */ /* null-terminate the wstr */
*w = 0; *w = 0;
} }
else if (PyUnicode_KIND(u) == PyUnicode_2BYTE_KIND) { else if (PyUnicode_KIND(unicode) == PyUnicode_2BYTE_KIND) {
#if SIZEOF_WCHAR_T == 4 #if SIZEOF_WCHAR_T == 4
two_bytes = PyUnicode_2BYTE_DATA(u); two_bytes = PyUnicode_2BYTE_DATA(unicode);
for (; w < wchar_end; ++two_bytes, ++w) for (; w < wchar_end; ++two_bytes, ++w)
*w = *two_bytes; *w = *two_bytes;
/* null-terminate the wstr */ /* null-terminate the wstr */
*w = 0; *w = 0;
#else #else
/* sizeof(wchar_t) == 2 */ /* sizeof(wchar_t) == 2 */
PyObject_FREE(_PyUnicode_WSTR(u)); PyObject_FREE(_PyUnicode_WSTR(unicode));
_PyUnicode_WSTR(u) = NULL; _PyUnicode_WSTR(unicode) = NULL;
Py_FatalError("Impossible unicode object state, wstr " Py_FatalError("Impossible unicode object state, wstr "
"and str should share memory already."); "and str should share memory already.");
return NULL; return NULL;
@ -3475,8 +3468,8 @@ PyUnicode_AsUnicodeAndSize(PyObject *unicode, Py_ssize_t *size)
} }
} }
if (size != NULL) if (size != NULL)
*size = PyUnicode_WSTR_LENGTH(u); *size = PyUnicode_WSTR_LENGTH(unicode);
return _PyUnicode_WSTR(u); return _PyUnicode_WSTR(unicode);
} }
Py_UNICODE * Py_UNICODE *
@ -9109,16 +9102,16 @@ PyUnicode_Count(PyObject *str,
Py_ssize_t end) Py_ssize_t end)
{ {
Py_ssize_t result; Py_ssize_t result;
PyUnicodeObject* str_obj; PyObject* str_obj;
PyUnicodeObject* sub_obj; PyObject* sub_obj;
int kind1, kind2, kind; int kind1, kind2, kind;
void *buf1 = NULL, *buf2 = NULL; void *buf1 = NULL, *buf2 = NULL;
Py_ssize_t len1, len2; Py_ssize_t len1, len2;
str_obj = (PyUnicodeObject*) PyUnicode_FromObject(str); str_obj = PyUnicode_FromObject(str);
if (!str_obj || PyUnicode_READY(str_obj) == -1) if (!str_obj || PyUnicode_READY(str_obj) == -1)
return -1; return -1;
sub_obj = (PyUnicodeObject*) PyUnicode_FromObject(substr); sub_obj = PyUnicode_FromObject(substr);
if (!sub_obj || PyUnicode_READY(sub_obj) == -1) { if (!sub_obj || PyUnicode_READY(sub_obj) == -1) {
Py_DECREF(str_obj); Py_DECREF(str_obj);
return -1; return -1;
@ -9242,8 +9235,8 @@ PyUnicode_FindChar(PyObject *str, Py_UCS4 ch,
} }
static int static int
tailmatch(PyUnicodeObject *self, tailmatch(PyObject *self,
PyUnicodeObject *substring, PyObject *substring,
Py_ssize_t start, Py_ssize_t start,
Py_ssize_t end, Py_ssize_t end,
int direction) int direction)
@ -9327,8 +9320,7 @@ PyUnicode_Tailmatch(PyObject *str,
return -1; return -1;
} }
result = tailmatch((PyUnicodeObject *)str, result = tailmatch(str, substr,
(PyUnicodeObject *)substr,
start, end, direction); start, end, direction);
Py_DECREF(str); Py_DECREF(str);
Py_DECREF(substr); Py_DECREF(substr);
@ -10402,7 +10394,7 @@ Apply .capitalize() to all words in S and return the result with\n\
normalized whitespace (all whitespace strings are replaced by ' ')."); normalized whitespace (all whitespace strings are replaced by ' ').");
static PyObject* static PyObject*
unicode_capwords(PyUnicodeObject *self) unicode_capwords(PyObject *self)
{ {
PyObject *list; PyObject *list;
PyObject *item; PyObject *item;
@ -10415,7 +10407,7 @@ unicode_capwords(PyUnicodeObject *self)
/* Capitalize each word */ /* Capitalize each word */
for (i = 0; i < PyList_GET_SIZE(list); i++) { for (i = 0; i < PyList_GET_SIZE(list); i++) {
item = fixup((PyUnicodeObject *)PyList_GET_ITEM(list, i), item = fixup(PyList_GET_ITEM(list, i),
fixcapitalize); fixcapitalize);
if (item == NULL) if (item == NULL)
goto onError; goto onError;
@ -10490,7 +10482,7 @@ unicode_center(PyObject *self, PyObject *args)
/* This function assumes that str1 and str2 are readied by the caller. */ /* This function assumes that str1 and str2 are readied by the caller. */
static int static int
unicode_compare(PyUnicodeObject *str1, PyUnicodeObject *str2) unicode_compare(PyObject *str1, PyObject *str2)
{ {
int kind1, kind2; int kind1, kind2;
void *data1, *data2; void *data1, *data2;
@ -10522,8 +10514,7 @@ PyUnicode_Compare(PyObject *left, PyObject *right)
if (PyUnicode_READY(left) == -1 || if (PyUnicode_READY(left) == -1 ||
PyUnicode_READY(right) == -1) PyUnicode_READY(right) == -1)
return -1; return -1;
return unicode_compare((PyUnicodeObject *)left, return unicode_compare(left, right);
(PyUnicodeObject *)right);
} }
PyErr_Format(PyExc_TypeError, PyErr_Format(PyExc_TypeError,
"Can't compare %.100s and %.100s", "Can't compare %.100s and %.100s",
@ -10586,8 +10577,7 @@ PyUnicode_RichCompare(PyObject *left, PyObject *right, int op)
if (left == right) if (left == right)
result = 0; result = 0;
else else
result = unicode_compare((PyUnicodeObject *)left, result = unicode_compare(left, right);
(PyUnicodeObject *)right);
/* Convert the return value to a Boolean */ /* Convert the return value to a Boolean */
switch (op) { switch (op) {
@ -10849,9 +10839,9 @@ string S[start:end]. Optional arguments start and end are\n\
interpreted as in slice notation."); interpreted as in slice notation.");
static PyObject * static PyObject *
unicode_count(PyUnicodeObject *self, PyObject *args) unicode_count(PyObject *self, PyObject *args)
{ {
PyUnicodeObject *substring; PyObject *substring;
Py_ssize_t start = 0; Py_ssize_t start = 0;
Py_ssize_t end = PY_SSIZE_T_MAX; Py_ssize_t end = PY_SSIZE_T_MAX;
PyObject *result; PyObject *result;
@ -10931,7 +10921,7 @@ a UnicodeEncodeError. Other possible values are 'ignore', 'replace' and\n\
codecs.register_error that can handle UnicodeEncodeErrors."); codecs.register_error that can handle UnicodeEncodeErrors.");
static PyObject * static PyObject *
unicode_encode(PyUnicodeObject *self, PyObject *args, PyObject *kwargs) unicode_encode(PyObject *self, PyObject *args, PyObject *kwargs)
{ {
static char *kwlist[] = {"encoding", "errors", 0}; static char *kwlist[] = {"encoding", "errors", 0};
char *encoding = NULL; char *encoding = NULL;
@ -10940,7 +10930,7 @@ unicode_encode(PyUnicodeObject *self, PyObject *args, PyObject *kwargs)
if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|ss:encode", if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|ss:encode",
kwlist, &encoding, &errors)) kwlist, &encoding, &errors))
return NULL; return NULL;
return PyUnicode_AsEncodedString((PyObject *)self, encoding, errors); return PyUnicode_AsEncodedString(self, encoding, errors);
} }
PyDoc_STRVAR(expandtabs__doc__, PyDoc_STRVAR(expandtabs__doc__,
@ -10950,7 +10940,7 @@ Return a copy of S where all tab characters are expanded using spaces.\n\
If tabsize is not given, a tab size of 8 characters is assumed."); If tabsize is not given, a tab size of 8 characters is assumed.");
static PyObject* static PyObject*
unicode_expandtabs(PyUnicodeObject *self, PyObject *args) unicode_expandtabs(PyObject *self, PyObject *args)
{ {
Py_ssize_t i, j, line_pos, src_len, incr; Py_ssize_t i, j, line_pos, src_len, incr;
Py_UCS4 ch; Py_UCS4 ch;
@ -11053,7 +11043,7 @@ Return -1 on failure.");
static PyObject * static PyObject *
unicode_find(PyObject *self, PyObject *args) unicode_find(PyObject *self, PyObject *args)
{ {
PyUnicodeObject *substring; PyObject *substring;
Py_ssize_t start; Py_ssize_t start;
Py_ssize_t end; Py_ssize_t end;
Py_ssize_t result; Py_ssize_t result;
@ -11091,7 +11081,7 @@ unicode_getitem(PyObject *self, Py_ssize_t index)
/* Believe it or not, this produces the same value for ASCII strings /* Believe it or not, this produces the same value for ASCII strings
as bytes_hash(). */ as bytes_hash(). */
static Py_hash_t static Py_hash_t
unicode_hash(PyUnicodeObject *self) unicode_hash(PyObject *self)
{ {
Py_ssize_t len; Py_ssize_t len;
Py_uhash_t x; Py_uhash_t x;
@ -11146,7 +11136,7 @@ static PyObject *
unicode_index(PyObject *self, PyObject *args) unicode_index(PyObject *self, PyObject *args)
{ {
Py_ssize_t result; Py_ssize_t result;
PyUnicodeObject *substring; PyObject *substring;
Py_ssize_t start; Py_ssize_t start;
Py_ssize_t end; Py_ssize_t end;
@ -11183,7 +11173,7 @@ Return True if all cased characters in S are lowercase and there is\n\
at least one cased character in S, False otherwise."); at least one cased character in S, False otherwise.");
static PyObject* static PyObject*
unicode_islower(PyUnicodeObject *self) unicode_islower(PyObject *self)
{ {
Py_ssize_t i, length; Py_ssize_t i, length;
int kind; int kind;
@ -11224,7 +11214,7 @@ Return True if all cased characters in S are uppercase and there is\n\
at least one cased character in S, False otherwise."); at least one cased character in S, False otherwise.");
static PyObject* static PyObject*
unicode_isupper(PyUnicodeObject *self) unicode_isupper(PyObject *self)
{ {
Py_ssize_t i, length; Py_ssize_t i, length;
int kind; int kind;
@ -11267,7 +11257,7 @@ follow uncased characters and lowercase characters only cased ones.\n\
Return False otherwise."); Return False otherwise.");
static PyObject* static PyObject*
unicode_istitle(PyUnicodeObject *self) unicode_istitle(PyObject *self)
{ {
Py_ssize_t i, length; Py_ssize_t i, length;
int kind; int kind;
@ -11321,7 +11311,7 @@ Return True if all characters in S are whitespace\n\
and there is at least one character in S, False otherwise."); and there is at least one character in S, False otherwise.");
static PyObject* static PyObject*
unicode_isspace(PyUnicodeObject *self) unicode_isspace(PyObject *self)
{ {
Py_ssize_t i, length; Py_ssize_t i, length;
int kind; int kind;
@ -11357,7 +11347,7 @@ Return True if all characters in S are alphabetic\n\
and there is at least one character in S, False otherwise."); and there is at least one character in S, False otherwise.");
static PyObject* static PyObject*
unicode_isalpha(PyUnicodeObject *self) unicode_isalpha(PyObject *self)
{ {
Py_ssize_t i, length; Py_ssize_t i, length;
int kind; int kind;
@ -11392,7 +11382,7 @@ Return True if all characters in S are alphanumeric\n\
and there is at least one character in S, False otherwise."); and there is at least one character in S, False otherwise.");
static PyObject* static PyObject*
unicode_isalnum(PyUnicodeObject *self) unicode_isalnum(PyObject *self)
{ {
int kind; int kind;
void *data; void *data;
@ -11430,7 +11420,7 @@ Return True if there are only decimal characters in S,\n\
False otherwise."); False otherwise.");
static PyObject* static PyObject*
unicode_isdecimal(PyUnicodeObject *self) unicode_isdecimal(PyObject *self)
{ {
Py_ssize_t i, length; Py_ssize_t i, length;
int kind; int kind;
@ -11465,7 +11455,7 @@ Return True if all characters in S are digits\n\
and there is at least one character in S, False otherwise."); and there is at least one character in S, False otherwise.");
static PyObject* static PyObject*
unicode_isdigit(PyUnicodeObject *self) unicode_isdigit(PyObject *self)
{ {
Py_ssize_t i, length; Py_ssize_t i, length;
int kind; int kind;
@ -11501,7 +11491,7 @@ Return True if there are only numeric characters in S,\n\
False otherwise."); False otherwise.");
static PyObject* static PyObject*
unicode_isnumeric(PyUnicodeObject *self) unicode_isnumeric(PyObject *self)
{ {
Py_ssize_t i, length; Py_ssize_t i, length;
int kind; int kind;
@ -11623,7 +11613,7 @@ unicode_join(PyObject *self, PyObject *data)
} }
static Py_ssize_t static Py_ssize_t
unicode_length(PyUnicodeObject *self) unicode_length(PyObject *self)
{ {
if (PyUnicode_READY(self) == -1) if (PyUnicode_READY(self) == -1)
return -1; return -1;
@ -11678,7 +11668,7 @@ static const char *stripformat[] = {"|O:lstrip", "|O:rstrip", "|O:strip"};
/* externally visible for str.strip(unicode) */ /* externally visible for str.strip(unicode) */
PyObject * PyObject *
_PyUnicode_XStrip(PyUnicodeObject *self, int striptype, PyObject *sepobj) _PyUnicode_XStrip(PyObject *self, int striptype, PyObject *sepobj)
{ {
void *data; void *data;
int kind; int kind;
@ -11761,7 +11751,7 @@ PyUnicode_Substring(PyObject *self, Py_ssize_t start, Py_ssize_t end)
} }
static PyObject * static PyObject *
do_strip(PyUnicodeObject *self, int striptype) do_strip(PyObject *self, int striptype)
{ {
int kind; int kind;
void *data; void *data;
@ -11794,7 +11784,7 @@ do_strip(PyUnicodeObject *self, int striptype)
static PyObject * static PyObject *
do_argstrip(PyUnicodeObject *self, int striptype, PyObject *args) do_argstrip(PyObject *self, int striptype, PyObject *args)
{ {
PyObject *sep = NULL; PyObject *sep = NULL;
@ -11824,7 +11814,7 @@ whitespace removed.\n\
If chars is given and not None, remove characters in chars instead."); If chars is given and not None, remove characters in chars instead.");
static PyObject * static PyObject *
unicode_strip(PyUnicodeObject *self, PyObject *args) unicode_strip(PyObject *self, PyObject *args)
{ {
if (PyTuple_GET_SIZE(args) == 0) if (PyTuple_GET_SIZE(args) == 0)
return do_strip(self, BOTHSTRIP); /* Common case */ return do_strip(self, BOTHSTRIP); /* Common case */
@ -11840,7 +11830,7 @@ Return a copy of the string S with leading whitespace removed.\n\
If chars is given and not None, remove characters in chars instead."); If chars is given and not None, remove characters in chars instead.");
static PyObject * static PyObject *
unicode_lstrip(PyUnicodeObject *self, PyObject *args) unicode_lstrip(PyObject *self, PyObject *args)
{ {
if (PyTuple_GET_SIZE(args) == 0) if (PyTuple_GET_SIZE(args) == 0)
return do_strip(self, LEFTSTRIP); /* Common case */ return do_strip(self, LEFTSTRIP); /* Common case */
@ -11856,7 +11846,7 @@ Return a copy of the string S with trailing whitespace removed.\n\
If chars is given and not None, remove characters in chars instead."); If chars is given and not None, remove characters in chars instead.");
static PyObject * static PyObject *
unicode_rstrip(PyUnicodeObject *self, PyObject *args) unicode_rstrip(PyObject *self, PyObject *args)
{ {
if (PyTuple_GET_SIZE(args) == 0) if (PyTuple_GET_SIZE(args) == 0)
return do_strip(self, RIGHTSTRIP); /* Common case */ return do_strip(self, RIGHTSTRIP); /* Common case */
@ -11866,9 +11856,9 @@ unicode_rstrip(PyUnicodeObject *self, PyObject *args)
static PyObject* static PyObject*
unicode_repeat(PyUnicodeObject *str, Py_ssize_t len) unicode_repeat(PyObject *str, Py_ssize_t len)
{ {
PyUnicodeObject *u; PyObject *u;
Py_ssize_t nchars, n; Py_ssize_t nchars, n;
if (len < 1) { if (len < 1) {
@ -11892,7 +11882,7 @@ unicode_repeat(PyUnicodeObject *str, Py_ssize_t len)
} }
nchars = len * PyUnicode_GET_LENGTH(str); nchars = len * PyUnicode_GET_LENGTH(str);
u = (PyUnicodeObject *)PyUnicode_New(nchars, PyUnicode_MAX_CHAR_VALUE(str)); u = PyUnicode_New(nchars, PyUnicode_MAX_CHAR_VALUE(str));
if (!u) if (!u)
return NULL; return NULL;
assert(PyUnicode_KIND(u) == PyUnicode_KIND(str)); assert(PyUnicode_KIND(u) == PyUnicode_KIND(str));
@ -11923,7 +11913,7 @@ unicode_repeat(PyUnicodeObject *str, Py_ssize_t len)
} }
assert(_PyUnicode_CheckConsistency(u, 1)); assert(_PyUnicode_CheckConsistency(u, 1));
return (PyObject*) u; return u;
} }
PyObject * PyObject *
@ -12156,7 +12146,7 @@ Return -1 on failure.");
static PyObject * static PyObject *
unicode_rfind(PyObject *self, PyObject *args) unicode_rfind(PyObject *self, PyObject *args)
{ {
PyUnicodeObject *substring; PyObject *substring;
Py_ssize_t start; Py_ssize_t start;
Py_ssize_t end; Py_ssize_t end;
Py_ssize_t result; Py_ssize_t result;
@ -12190,7 +12180,7 @@ Like S.rfind() but raise ValueError when the substring is not found.");
static PyObject * static PyObject *
unicode_rindex(PyObject *self, PyObject *args) unicode_rindex(PyObject *self, PyObject *args)
{ {
PyUnicodeObject *substring; PyObject *substring;
Py_ssize_t start; Py_ssize_t start;
Py_ssize_t end; Py_ssize_t end;
Py_ssize_t result; Py_ssize_t result;
@ -12522,7 +12512,7 @@ Line breaks are not included in the resulting list unless keepends\n\
is given and true."); is given and true.");
static PyObject* static PyObject*
unicode_splitlines(PyUnicodeObject *self, PyObject *args, PyObject *kwds) unicode_splitlines(PyObject *self, PyObject *args, PyObject *kwds)
{ {
static char *kwlist[] = {"keepends", 0}; static char *kwlist[] = {"keepends", 0};
int keepends = 0; int keepends = 0;
@ -12531,7 +12521,7 @@ unicode_splitlines(PyUnicodeObject *self, PyObject *args, PyObject *kwds)
kwlist, &keepends)) kwlist, &keepends))
return NULL; return NULL;
return PyUnicode_Splitlines((PyObject *)self, keepends); return PyUnicode_Splitlines(self, keepends);
} }
static static
@ -12570,7 +12560,7 @@ character at the same position in y. If there is a third argument, it\n\
must be a string, whose characters will be mapped to None in the result."); must be a string, whose characters will be mapped to None in the result.");
static PyObject* static PyObject*
unicode_maketrans(PyUnicodeObject *null, PyObject *args) unicode_maketrans(PyObject *null, PyObject *args)
{ {
PyObject *x, *y = NULL, *z = NULL; PyObject *x, *y = NULL, *z = NULL;
PyObject *new = NULL, *key, *value; PyObject *new = NULL, *key, *value;
@ -12768,11 +12758,11 @@ With optional end, stop comparing S at that position.\n\
prefix can also be a tuple of strings to try."); prefix can also be a tuple of strings to try.");
static PyObject * static PyObject *
unicode_startswith(PyUnicodeObject *self, unicode_startswith(PyObject *self,
PyObject *args) PyObject *args)
{ {
PyObject *subobj; PyObject *subobj;
PyUnicodeObject *substring; PyObject *substring;
Py_ssize_t start = 0; Py_ssize_t start = 0;
Py_ssize_t end = PY_SSIZE_T_MAX; Py_ssize_t end = PY_SSIZE_T_MAX;
int result; int result;
@ -12782,8 +12772,7 @@ unicode_startswith(PyUnicodeObject *self,
if (PyTuple_Check(subobj)) { if (PyTuple_Check(subobj)) {
Py_ssize_t i; Py_ssize_t i;
for (i = 0; i < PyTuple_GET_SIZE(subobj); i++) { for (i = 0; i < PyTuple_GET_SIZE(subobj); i++) {
substring = (PyUnicodeObject *)PyUnicode_FromObject( substring = PyUnicode_FromObject(PyTuple_GET_ITEM(subobj, i));
PyTuple_GET_ITEM(subobj, i));
if (substring == NULL) if (substring == NULL)
return NULL; return NULL;
result = tailmatch(self, substring, start, end, -1); result = tailmatch(self, substring, start, end, -1);
@ -12795,7 +12784,7 @@ unicode_startswith(PyUnicodeObject *self,
/* nothing matched */ /* nothing matched */
Py_RETURN_FALSE; Py_RETURN_FALSE;
} }
substring = (PyUnicodeObject *)PyUnicode_FromObject(subobj); substring = PyUnicode_FromObject(subobj);
if (substring == NULL) { if (substring == NULL) {
if (PyErr_ExceptionMatches(PyExc_TypeError)) if (PyErr_ExceptionMatches(PyExc_TypeError))
PyErr_Format(PyExc_TypeError, "startswith first arg must be str or " PyErr_Format(PyExc_TypeError, "startswith first arg must be str or "
@ -12817,11 +12806,11 @@ With optional end, stop comparing S at that position.\n\
suffix can also be a tuple of strings to try."); suffix can also be a tuple of strings to try.");
static PyObject * static PyObject *
unicode_endswith(PyUnicodeObject *self, unicode_endswith(PyObject *self,
PyObject *args) PyObject *args)
{ {
PyObject *subobj; PyObject *subobj;
PyUnicodeObject *substring; PyObject *substring;
Py_ssize_t start = 0; Py_ssize_t start = 0;
Py_ssize_t end = PY_SSIZE_T_MAX; Py_ssize_t end = PY_SSIZE_T_MAX;
int result; int result;
@ -12831,7 +12820,7 @@ unicode_endswith(PyUnicodeObject *self,
if (PyTuple_Check(subobj)) { if (PyTuple_Check(subobj)) {
Py_ssize_t i; Py_ssize_t i;
for (i = 0; i < PyTuple_GET_SIZE(subobj); i++) { for (i = 0; i < PyTuple_GET_SIZE(subobj); i++) {
substring = (PyUnicodeObject *)PyUnicode_FromObject( substring = PyUnicode_FromObject(
PyTuple_GET_ITEM(subobj, i)); PyTuple_GET_ITEM(subobj, i));
if (substring == NULL) if (substring == NULL)
return NULL; return NULL;
@ -12843,7 +12832,7 @@ unicode_endswith(PyUnicodeObject *self,
} }
Py_RETURN_FALSE; Py_RETURN_FALSE;
} }
substring = (PyUnicodeObject *)PyUnicode_FromObject(subobj); substring = PyUnicode_FromObject(subobj);
if (substring == NULL) { if (substring == NULL) {
if (PyErr_ExceptionMatches(PyExc_TypeError)) if (PyErr_ExceptionMatches(PyExc_TypeError))
PyErr_Format(PyExc_TypeError, "endswith first arg must be str or " PyErr_Format(PyExc_TypeError, "endswith first arg must be str or "
@ -12888,7 +12877,7 @@ PyDoc_STRVAR(p_format__doc__,
Return a formatted version of S as described by format_spec."); Return a formatted version of S as described by format_spec.");
static PyObject * static PyObject *
unicode__sizeof__(PyUnicodeObject *v) unicode__sizeof__(PyObject *v)
{ {
Py_ssize_t size; Py_ssize_t size;
@ -13020,7 +13009,7 @@ static PySequenceMethods unicode_as_sequence = {
}; };
static PyObject* static PyObject*
unicode_subscript(PyUnicodeObject* self, PyObject* item) unicode_subscript(PyObject* self, PyObject* item)
{ {
if (PyUnicode_READY(self) == -1) if (PyUnicode_READY(self) == -1)
return NULL; return NULL;
@ -13031,7 +13020,7 @@ unicode_subscript(PyUnicodeObject* self, PyObject* item)
return NULL; return NULL;
if (i < 0) if (i < 0)
i += PyUnicode_GET_LENGTH(self); i += PyUnicode_GET_LENGTH(self);
return unicode_getitem((PyObject*)self, i); return unicode_getitem(self, i);
} else if (PySlice_Check(item)) { } else if (PySlice_Check(item)) {
Py_ssize_t start, stop, step, slicelength, cur, i; Py_ssize_t start, stop, step, slicelength, cur, i;
PyObject *result; PyObject *result;
@ -13050,9 +13039,9 @@ unicode_subscript(PyUnicodeObject* self, PyObject* item)
slicelength == PyUnicode_GET_LENGTH(self) && slicelength == PyUnicode_GET_LENGTH(self) &&
PyUnicode_CheckExact(self)) { PyUnicode_CheckExact(self)) {
Py_INCREF(self); Py_INCREF(self);
return (PyObject *)self; return self;
} else if (step == 1) { } else if (step == 1) {
return PyUnicode_Substring((PyObject*)self, return PyUnicode_Substring(self,
start, start + slicelength); start, start + slicelength);
} }
/* General case */ /* General case */
@ -13195,7 +13184,7 @@ repeat_accumulate(_PyAccu *acc, PyObject *obj, Py_ssize_t count)
assert(count > 0); assert(count > 0);
assert(PyUnicode_Check(obj)); assert(PyUnicode_Check(obj));
if (count > 5) { if (count > 5) {
PyObject *repeated = unicode_repeat((PyUnicodeObject *) obj, count); PyObject *repeated = unicode_repeat(obj, count);
if (repeated == NULL) if (repeated == NULL)
return -1; return -1;
r = _PyAccu_Accumulate(acc, repeated); r = _PyAccu_Accumulate(acc, repeated);
@ -13224,7 +13213,7 @@ PyUnicode_Format(PyObject *format, PyObject *args)
PyObject *dict = NULL; PyObject *dict = NULL;
PyObject *temp = NULL; PyObject *temp = NULL;
PyObject *second = NULL; PyObject *second = NULL;
PyUnicodeObject *uformat; PyObject *uformat;
_PyAccu acc; _PyAccu acc;
static PyObject *plus, *minus, *blank, *zero, *percent; static PyObject *plus, *minus, *blank, *zero, *percent;
@ -13243,7 +13232,7 @@ PyUnicode_Format(PyObject *format, PyObject *args)
PyErr_BadInternalCall(); PyErr_BadInternalCall();
return NULL; return NULL;
} }
uformat = (PyUnicodeObject*)PyUnicode_FromObject(format); uformat = PyUnicode_FromObject(format);
if (uformat == NULL || PyUnicode_READY(uformat) == -1) if (uformat == NULL || PyUnicode_READY(uformat) == -1)
return NULL; return NULL;
if (_PyAccu_Init(&acc)) if (_PyAccu_Init(&acc))
@ -13732,7 +13721,7 @@ unicode_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
static PyObject * static PyObject *
unicode_subtype_new(PyTypeObject *type, PyObject *args, PyObject *kwds) unicode_subtype_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
{ {
PyUnicodeObject *unicode, *self; PyObject *unicode, *self;
Py_ssize_t length, char_size; Py_ssize_t length, char_size;
int share_wstr, share_utf8; int share_wstr, share_utf8;
unsigned int kind; unsigned int kind;
@ -13740,14 +13729,14 @@ unicode_subtype_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
assert(PyType_IsSubtype(type, &PyUnicode_Type)); assert(PyType_IsSubtype(type, &PyUnicode_Type));
unicode = (PyUnicodeObject *)unicode_new(&PyUnicode_Type, args, kwds); unicode = unicode_new(&PyUnicode_Type, args, kwds);
if (unicode == NULL) if (unicode == NULL)
return NULL; return NULL;
assert(_PyUnicode_CHECK(unicode)); assert(_PyUnicode_CHECK(unicode));
if (PyUnicode_READY(unicode)) if (PyUnicode_READY(unicode))
return NULL; return NULL;
self = (PyUnicodeObject *) type->tp_alloc(type, 0); self = type->tp_alloc(type, 0);
if (self == NULL) { if (self == NULL) {
Py_DECREF(unicode); Py_DECREF(unicode);
return NULL; return NULL;
@ -13955,7 +13944,7 @@ _PyUnicode_Fini(void)
void void
PyUnicode_InternInPlace(PyObject **p) PyUnicode_InternInPlace(PyObject **p)
{ {
register PyUnicodeObject *s = (PyUnicodeObject *)(*p); register PyObject *s = *p;
PyObject *t; PyObject *t;
#ifdef Py_DEBUG #ifdef Py_DEBUG
assert(s != NULL); assert(s != NULL);
@ -13974,7 +13963,7 @@ PyUnicode_InternInPlace(PyObject **p)
assert(0 && "_PyUnicode_READY_REPLACE fail in PyUnicode_InternInPlace"); assert(0 && "_PyUnicode_READY_REPLACE fail in PyUnicode_InternInPlace");
return; return;
} }
s = (PyUnicodeObject *)(*p); s = *p;
if (interned == NULL) { if (interned == NULL) {
interned = PyDict_New(); interned = PyDict_New();
if (interned == NULL) { if (interned == NULL) {
@ -14035,7 +14024,7 @@ void
_Py_ReleaseInternedUnicodeStrings(void) _Py_ReleaseInternedUnicodeStrings(void)
{ {
PyObject *keys; PyObject *keys;
PyUnicodeObject *s; PyObject *s;
Py_ssize_t i, n; Py_ssize_t i, n;
Py_ssize_t immortal_size = 0, mortal_size = 0; Py_ssize_t immortal_size = 0, mortal_size = 0;
@ -14056,7 +14045,7 @@ _Py_ReleaseInternedUnicodeStrings(void)
fprintf(stderr, "releasing %" PY_FORMAT_SIZE_T "d interned strings\n", fprintf(stderr, "releasing %" PY_FORMAT_SIZE_T "d interned strings\n",
n); n);
for (i = 0; i < n; i++) { for (i = 0; i < n; i++) {
s = (PyUnicodeObject *) PyList_GET_ITEM(keys, i); s = PyList_GET_ITEM(keys, i);
if (PyUnicode_READY(s) == -1) { if (PyUnicode_READY(s) == -1) {
assert(0 && "could not ready string"); assert(0 && "could not ready string");
fprintf(stderr, "could not ready string\n"); fprintf(stderr, "could not ready string\n");
@ -14093,7 +14082,7 @@ _Py_ReleaseInternedUnicodeStrings(void)
typedef struct { typedef struct {
PyObject_HEAD PyObject_HEAD
Py_ssize_t it_index; Py_ssize_t it_index;
PyUnicodeObject *it_seq; /* Set to NULL when iterator is exhausted */ PyObject *it_seq; /* Set to NULL when iterator is exhausted */
} unicodeiterobject; } unicodeiterobject;
static void static void
@ -14114,8 +14103,7 @@ unicodeiter_traverse(unicodeiterobject *it, visitproc visit, void *arg)
static PyObject * static PyObject *
unicodeiter_next(unicodeiterobject *it) unicodeiter_next(unicodeiterobject *it)
{ {
PyUnicodeObject *seq; PyObject *seq, *item;
PyObject *item;
assert(it != NULL); assert(it != NULL);
seq = it->it_seq; seq = it->it_seq;
@ -14204,7 +14192,7 @@ unicode_iter(PyObject *seq)
return NULL; return NULL;
it->it_index = 0; it->it_index = 0;
Py_INCREF(seq); Py_INCREF(seq);
it->it_seq = (PyUnicodeObject *)seq; it->it_seq = seq;
_PyObject_GC_TRACK(it); _PyObject_GC_TRACK(it);
return (PyObject *)it; return (PyObject *)it;
} }
@ -14221,9 +14209,8 @@ unicode_iter(PyObject *seq)
#undef UNIOP_t #undef UNIOP_t
Py_UNICODE* Py_UNICODE*
PyUnicode_AsUnicodeCopy(PyObject *object) PyUnicode_AsUnicodeCopy(PyObject *unicode)
{ {
PyUnicodeObject *unicode = (PyUnicodeObject *)object;
Py_UNICODE *u, *copy; Py_UNICODE *u, *copy;
Py_ssize_t size; Py_ssize_t size;
@ -14231,7 +14218,7 @@ PyUnicode_AsUnicodeCopy(PyObject *object)
PyErr_BadArgument(); PyErr_BadArgument();
return NULL; return NULL;
} }
u = PyUnicode_AsUnicode(object); u = PyUnicode_AsUnicode(unicode);
if (u == NULL) if (u == NULL)
return NULL; return NULL;
/* Ensure we won't overflow the size. */ /* Ensure we won't overflow the size. */