cpython (merge default -> default): Merge.

http://hg.python.org/cpython/rev/f7de67283c94 changeset: 72533:f7de67283c94 parent: 72532:d8dc24c4e83d parent: 72529:2fc483009f6d user: Charles-François Natali <neologix@free.fr> date: Thu Sep 29 19:51:46 2011 +0200 summary: Merge. files: Include/unicodeobject.h | 26 +++++---------- Objects/unicodeobject.c | 48 ++++++++++++++-------------- 2 files changed, 33 insertions(+), 41 deletions(-) diff --git a/Include/unicodeobject.h b/Include/unicodeobject.h --- a/Include/unicodeobject.h +++ b/Include/unicodeobject.h @@ -377,16 +377,6 @@ PyUnicode_IS_COMPACT(op) ? _PyUnicode_COMPACT_DATA(op) : \ _PyUnicode_NONCOMPACT_DATA(op)) -#define _PyUnicode_UTF8(op) \ - (PyUnicode_IS_COMPACT_ASCII(op) ? \ - ((char*)((PyASCIIObject*)(op) + 1)) : \ - ((PyCompactUnicodeObject*)(op))->utf8) - -#define _PyUnicode_UTF8_LENGTH(op) \ - (PyUnicode_IS_COMPACT_ASCII(op) ? \ - ((PyASCIIObject*)(op))->length : \ - ((PyCompactUnicodeObject*)(op))->utf8_length) - /* Compute (index * char_size) where char_size is 2 ** (kind - 1). The index is a character index, the result is a size in bytes. */ @@ -466,7 +456,7 @@ #define PyUnicode_READY(op) \ (assert(PyUnicode_Check(op)), \ (PyUnicode_IS_READY(op) ? \ - 0 : _PyUnicode_Ready((PyUnicodeObject *)(op)))) + 0 : _PyUnicode_Ready((PyObject *)(op)))) /* Return a maximum character value which is suitable for creating another string based on op. This is always an approximation but more efficient @@ -507,14 +497,16 @@ ); #endif -/* Initializes the canonical string representation from a the deprected - wstr/Py_UNICODE representation. This function is used to convert - unicode objects which were created using the old API to the new flexible - format introduced with PEP 393. The PyUnicode_READY() macro can be - more efficient if the string is already ready. */ +/* Initializes the canonical string representation from a the deprecated + wstr/Py_UNICODE representation. This function is used to convert Unicode + objects which were created using the old API to the new flexible format + introduced with PEP 393. + + Don't call this function directly, use the public PyUnicode_READY() macro + instead. */ #ifndef Py_LIMITED_API PyAPI_FUNC(int) _PyUnicode_Ready( - PyUnicodeObject *unicode /* Unicode object */ + PyObject *unicode /* Unicode object */ ); #endif diff --git a/Objects/unicodeobject.c b/Objects/unicodeobject.c --- a/Objects/unicodeobject.c +++ b/Objects/unicodeobject.c @@ -105,6 +105,14 @@ } \ } while (0) +#define _PyUnicode_UTF8(op) \ + (PyUnicode_IS_COMPACT_ASCII(op) ? \ + ((char*)((PyASCIIObject*)(op) + 1)) : \ + ((PyCompactUnicodeObject*)(op))->utf8) +#define _PyUnicode_UTF8_LENGTH(op) \ + (PyUnicode_IS_COMPACT_ASCII(op) ? \ + ((PyASCIIObject*)(op))->length : \ + ((PyCompactUnicodeObject*)(op))->utf8_length) #define _PyUnicode_WSTR(op) (((PyASCIIObject*)(op))->wstr) #define _PyUnicode_WSTR_LENGTH(op) (((PyCompactUnicodeObject*)(op))->wstr_length) #define _PyUnicode_LENGTH(op) (((PyASCIIObject *)(op))->length) @@ -773,8 +781,9 @@ #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; @@ -782,25 +791,19 @@ 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)); + 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 == 0); - assert(unicode->_base.utf8 == NULL); + assert(_PyUnicode_STATE(unicode).interned == SSTATE_NOT_INTERNED); #ifdef Py_DEBUG ++unicode_ready_calls; @@ -808,11 +811,8 @@ 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); @@ -1038,8 +1038,8 @@ /* 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, -- Repository URL: http://hg.python.org/cpython
participants (1)
-
charles-francois.natali