summaryrefslogtreecommitdiffstats
path: root/Objects
diff options
context:
space:
mode:
authorVictor Stinner <victor.stinner@haypocalc.com>2011-09-29 17:43:17 (GMT)
committerVictor Stinner <victor.stinner@haypocalc.com>2011-09-29 17:43:17 (GMT)
commitd8f6510accf000365b8953facc8fbdc5f72d7016 (patch)
treeb1dd0c8d213ae818f92dd883a1b67182a092c6e2 /Objects
parentbc8b81bc4e28f954aa7139bec946808267790080 (diff)
downloadcpython-d8f6510accf000365b8953facc8fbdc5f72d7016.zip
cpython-d8f6510accf000365b8953facc8fbdc5f72d7016.tar.gz
cpython-d8f6510accf000365b8953facc8fbdc5f72d7016.tar.bz2
_PyUnicode_Ready() cannot be used on ready strings anymore
* Change its prototype: PyObject* instead of PyUnicodeoObject*. * Remove an old assertion, the result of PyUnicode_READY (_PyUnicode_Ready) must be checked instead
Diffstat (limited to 'Objects')
-rw-r--r--Objects/unicodeobject.c38
1 files changed, 15 insertions, 23 deletions
diff --git a/Objects/unicodeobject.c b/Objects/unicodeobject.c
index fe0d4a5..065b5e7 100644
--- a/Objects/unicodeobject.c
+++ b/Objects/unicodeobject.c
@@ -781,8 +781,9 @@ int unicode_ready_calls = 0;
#endif
int
-_PyUnicode_Ready(PyUnicodeObject *unicode)
+_PyUnicode_Ready(PyObject *obj)
{
+ PyUnicodeObject *unicode = (PyUnicodeObject *)obj;
wchar_t *end;
Py_UCS4 maxchar = 0;
Py_ssize_t num_surrogates;
@@ -790,25 +791,19 @@ _PyUnicode_Ready(PyUnicodeObject *unicode)
Py_ssize_t length_wo_surrogates;
#endif
- assert(PyUnicode_Check(unicode));
-
- if (unicode->data.any != NULL) {
- assert(PyUnicode_KIND(unicode) != PyUnicode_WCHAR_KIND);
- return 0;
- }
-
/* _PyUnicode_Ready() is only intented for old-style API usage where
- * strings were created using _PyObject_New() and where no canonical
- * representation (the str field) has been set yet aka strings
- * which are not yet ready.
- */
+ strings were created using _PyObject_New() and where no canonical
+ representation (the str field) has been set yet aka strings
+ which are not yet ready. */
+ assert(PyUnicode_Check(obj));
+ assert(!PyUnicode_IS_READY(obj));
+ assert(!PyUnicode_IS_COMPACT(obj));
+ assert(_PyUnicode_KIND(obj) == PyUnicode_WCHAR_KIND);
assert(_PyUnicode_WSTR(unicode) != NULL);
- assert(_PyUnicode_KIND(unicode) == PyUnicode_WCHAR_KIND);
- assert(!PyUnicode_IS_COMPACT(unicode));
- assert(!PyUnicode_IS_READY(unicode));
- /* Actually, it should neither be interned nor be anything else: */
- assert(_PyUnicode_STATE(unicode).interned == 0);
+ assert(unicode->data.any == NULL);
assert(unicode->_base.utf8 == NULL);
+ /* Actually, it should neither be interned nor be anything else: */
+ assert(_PyUnicode_STATE(unicode).interned == SSTATE_NOT_INTERNED);
#ifdef Py_DEBUG
++unicode_ready_calls;
@@ -816,11 +811,8 @@ _PyUnicode_Ready(PyUnicodeObject *unicode)
end = _PyUnicode_WSTR(unicode) + _PyUnicode_WSTR_LENGTH(unicode);
if (find_maxchar_surrogates(_PyUnicode_WSTR(unicode), end,
- &maxchar,
- &num_surrogates) == -1) {
- assert(0 && "PyUnicode_FindMaxCharAndNumSurrogatePairs failed");
+ &maxchar, &num_surrogates) == -1)
return -1;
- }
if (maxchar < 256) {
unicode->data.any = PyObject_MALLOC(_PyUnicode_WSTR_LENGTH(unicode) + 1);
@@ -1046,8 +1038,8 @@ PyUnicode_FromUnicode(const Py_UNICODE *u, Py_ssize_t size)
/* If not empty and not single character, copy the Unicode data
into the new object */
- if (find_maxchar_surrogates(u, u + size, &maxchar,
- &num_surrogates) == -1)
+ if (find_maxchar_surrogates(u, u + size,
+ &maxchar, &num_surrogates) == -1)
return NULL;
unicode = (PyUnicodeObject *) PyUnicode_New(size - num_surrogates,