Don't calls macros in PyUnicode_WRITE() parameters

PyUnicode_WRITE() expands some parameters twice or more.
This commit is contained in:
Victor Stinner 2013-04-09 22:38:52 +02:00
parent 9c79e41fc5
commit f50a4e9bc9
1 changed files with 10 additions and 2 deletions

View File

@ -1958,13 +1958,17 @@ _PyUnicode_FromUCS2(const Py_UCS2 *u, Py_ssize_t size)
assert(size > 0); assert(size > 0);
if (size == 1) { if (size == 1) {
Py_UCS4 ch = u[0]; Py_UCS4 ch = u[0];
int kind;
void *data;
if (ch < 256) if (ch < 256)
return get_latin1_char((unsigned char)ch); return get_latin1_char((unsigned char)ch);
res = PyUnicode_New(1, ch); res = PyUnicode_New(1, ch);
if (res == NULL) if (res == NULL)
return NULL; return NULL;
PyUnicode_WRITE(PyUnicode_KIND(res), PyUnicode_DATA(res), 0, ch); kind = PyUnicode_KIND(res);
data = PyUnicode_DATA(res);
PyUnicode_WRITE(kind, data, 0, ch);
assert(_PyUnicode_CheckConsistency(res, 1)); assert(_PyUnicode_CheckConsistency(res, 1));
return res; return res;
} }
@ -1994,13 +1998,17 @@ _PyUnicode_FromUCS4(const Py_UCS4 *u, Py_ssize_t size)
assert(size > 0); assert(size > 0);
if (size == 1) { if (size == 1) {
Py_UCS4 ch = u[0]; Py_UCS4 ch = u[0];
int kind;
void *data;
if (ch < 256) if (ch < 256)
return get_latin1_char((unsigned char)ch); return get_latin1_char((unsigned char)ch);
res = PyUnicode_New(1, ch); res = PyUnicode_New(1, ch);
if (res == NULL) if (res == NULL)
return NULL; return NULL;
PyUnicode_WRITE(PyUnicode_KIND(res), PyUnicode_DATA(res), 0, ch); kind = PyUnicode_KIND(res);
data = PyUnicode_DATA(res);
PyUnicode_WRITE(kind, data, 0, ch);
assert(_PyUnicode_CheckConsistency(res, 1)); assert(_PyUnicode_CheckConsistency(res, 1));
return res; return res;
} }