diff options
Diffstat (limited to 'numpy/core/src')
-rw-r--r-- | numpy/core/src/scalartypes.inc.src | 6 | ||||
-rw-r--r-- | numpy/core/src/ucsnarrow.c | 7 |
2 files changed, 9 insertions, 4 deletions
diff --git a/numpy/core/src/scalartypes.inc.src b/numpy/core/src/scalartypes.inc.src index 1ef8372f2..bdf5402db 100644 --- a/numpy/core/src/scalartypes.inc.src +++ b/numpy/core/src/scalartypes.inc.src @@ -2390,8 +2390,12 @@ PyArray_DescrFromScalar(PyObject *sc) type_num = descr->type_num; if (type_num == PyArray_STRING) descr->elsize = PyString_GET_SIZE(sc); - else if (type_num == PyArray_UNICODE) + else if (type_num == PyArray_UNICODE) { descr->elsize = PyUnicode_GET_DATA_SIZE(sc); +#ifndef Py_UNICODE_WIDE + descr->elsize <<= 1; +#endif + } else { descr->elsize = \ ((PyVoidScalarObject *)sc)->ob_size; diff --git a/numpy/core/src/ucsnarrow.c b/numpy/core/src/ucsnarrow.c index a105ebe27..9eb668b77 100644 --- a/numpy/core/src/ucsnarrow.c +++ b/numpy/core/src/ucsnarrow.c @@ -15,12 +15,12 @@ static int PyUCS2Buffer_FromUCS4(Py_UNICODE *ucs2, PyArray_UCS4 *ucs4, int ucs4length) { register int i; - int surrpairs = 0; + int numucs2 = 0; PyArray_UCS4 chr; for (i=0; i<ucs4length; i++) { chr = *ucs4++; if (chr > 0xffff) { - surrpairs++; + numucs2++; chr -= 0x10000L; *ucs2++ = 0xD800 + (Py_UNICODE) (chr >> 10); *ucs2++ = 0xDC00 + (Py_UNICODE) (chr & 0x03FF); @@ -28,8 +28,9 @@ PyUCS2Buffer_FromUCS4(Py_UNICODE *ucs2, PyArray_UCS4 *ucs4, int ucs4length) else { *ucs2++ = (Py_UNICODE) chr; } + numucs2++; } - return ucs4length + surrpairs; + return numucs2; } |