diff options
author | Victor Stinner <victor.stinner@haypocalc.com> | 2011-09-28 20:34:18 (GMT) |
---|---|---|
committer | Victor Stinner <victor.stinner@haypocalc.com> | 2011-09-28 20:34:18 (GMT) |
commit | 506f5927691e0088adc7ac6e6d7b43ad78f1576b (patch) | |
tree | 14f6a366b49bce78fb9b39a4637a61a40e9c03f9 | |
parent | 73f01c65c82b532ba0f9ce8540b84493c2f25e63 (diff) | |
download | cpython-506f5927691e0088adc7ac6e6d7b43ad78f1576b.zip cpython-506f5927691e0088adc7ac6e6d7b43ad78f1576b.tar.gz cpython-506f5927691e0088adc7ac6e6d7b43ad78f1576b.tar.bz2 |
Check size of wchar_t using the preprocessor
-rw-r--r-- | Objects/unicodeobject.c | 56 |
1 files changed, 27 insertions, 29 deletions
diff --git a/Objects/unicodeobject.c b/Objects/unicodeobject.c index 74fb7ce..b61f058 100644 --- a/Objects/unicodeobject.c +++ b/Objects/unicodeobject.c @@ -830,36 +830,34 @@ _PyUnicode_Ready(PyUnicodeObject *unicode) assert(num_surrogates == 0 && "FindMaxCharAndNumSurrogatePairs() messed up"); - if (sizeof(wchar_t) == 2) { - /* We can share representations and are done. */ - unicode->data.any = _PyUnicode_WSTR(unicode); - PyUnicode_2BYTE_DATA(unicode)[_PyUnicode_WSTR_LENGTH(unicode)] = '\0'; - _PyUnicode_LENGTH(unicode) = _PyUnicode_WSTR_LENGTH(unicode); - _PyUnicode_STATE(unicode).kind = PyUnicode_2BYTE_KIND; - unicode->_base.utf8 = NULL; - unicode->_base.utf8_length = 0; - } - else { - assert(sizeof(wchar_t) == 4); - - unicode->data.any = PyObject_MALLOC( - 2 * (_PyUnicode_WSTR_LENGTH(unicode) + 1)); - if (!unicode->data.any) { - PyErr_NoMemory(); - return -1; - } - _PyUnicode_CONVERT_BYTES(wchar_t, Py_UCS2, - _PyUnicode_WSTR(unicode), end, - PyUnicode_2BYTE_DATA(unicode)); - PyUnicode_2BYTE_DATA(unicode)[_PyUnicode_WSTR_LENGTH(unicode)] = '\0'; - _PyUnicode_LENGTH(unicode) = _PyUnicode_WSTR_LENGTH(unicode); - _PyUnicode_STATE(unicode).kind = PyUnicode_2BYTE_KIND; - unicode->_base.utf8 = NULL; - unicode->_base.utf8_length = 0; - PyObject_FREE(_PyUnicode_WSTR(unicode)); - _PyUnicode_WSTR(unicode) = NULL; - _PyUnicode_WSTR_LENGTH(unicode) = 0; +#if SIZEOF_WCHAR_T == 2 + /* We can share representations and are done. */ + unicode->data.any = _PyUnicode_WSTR(unicode); + PyUnicode_2BYTE_DATA(unicode)[_PyUnicode_WSTR_LENGTH(unicode)] = '\0'; + _PyUnicode_LENGTH(unicode) = _PyUnicode_WSTR_LENGTH(unicode); + _PyUnicode_STATE(unicode).kind = PyUnicode_2BYTE_KIND; + unicode->_base.utf8 = NULL; + unicode->_base.utf8_length = 0; +#else + /* sizeof(wchar_t) == 4 */ + unicode->data.any = PyObject_MALLOC( + 2 * (_PyUnicode_WSTR_LENGTH(unicode) + 1)); + if (!unicode->data.any) { + PyErr_NoMemory(); + return -1; } + _PyUnicode_CONVERT_BYTES(wchar_t, Py_UCS2, + _PyUnicode_WSTR(unicode), end, + PyUnicode_2BYTE_DATA(unicode)); + PyUnicode_2BYTE_DATA(unicode)[_PyUnicode_WSTR_LENGTH(unicode)] = '\0'; + _PyUnicode_LENGTH(unicode) = _PyUnicode_WSTR_LENGTH(unicode); + _PyUnicode_STATE(unicode).kind = PyUnicode_2BYTE_KIND; + unicode->_base.utf8 = NULL; + unicode->_base.utf8_length = 0; + PyObject_FREE(_PyUnicode_WSTR(unicode)); + _PyUnicode_WSTR(unicode) = NULL; + _PyUnicode_WSTR_LENGTH(unicode) = 0; +#endif } /* maxchar exeeds 16 bit, wee need 4 bytes for unicode characters */ else { |