Commit a2a7267c authored by Stefan Behnel's avatar Stefan Behnel

avoid code duplication in utility function by using macros

parent f93e8de1
...@@ -93,9 +93,13 @@ ...@@ -93,9 +93,13 @@
#define __Pyx_PyUnicode_KIND(u) PyUnicode_KIND(u) #define __Pyx_PyUnicode_KIND(u) PyUnicode_KIND(u)
#define __Pyx_PyUnicode_DATA(u) PyUnicode_DATA(u) #define __Pyx_PyUnicode_DATA(u) PyUnicode_DATA(u)
#define __Pyx_PyUnicode_READ(k, d, i) PyUnicode_READ(k, d, i) #define __Pyx_PyUnicode_READ(k, d, i) PyUnicode_READ(k, d, i)
#define __Pyx_PyUnicode_WRITE(k, d, i, ch) PyUnicode_WRITE(k, d, i, ch)
#define __Pyx_PyUnicode_IS_TRUE(u) (0 != (likely(PyUnicode_IS_READY(u)) ? PyUnicode_GET_LENGTH(u) : PyUnicode_GET_SIZE(u))) #define __Pyx_PyUnicode_IS_TRUE(u) (0 != (likely(PyUnicode_IS_READY(u)) ? PyUnicode_GET_LENGTH(u) : PyUnicode_GET_SIZE(u)))
#else #else
#define CYTHON_PEP393_ENABLED 0 #define CYTHON_PEP393_ENABLED 0
#define PyUnicode_1BYTE_KIND 1
#define PyUnicode_2BYTE_KIND 2
#define PyUnicode_4BYTE_KIND 4
#define __Pyx_PyUnicode_READY(op) (0) #define __Pyx_PyUnicode_READY(op) (0)
#define __Pyx_PyUnicode_GET_LENGTH(u) PyUnicode_GET_SIZE(u) #define __Pyx_PyUnicode_GET_LENGTH(u) PyUnicode_GET_SIZE(u)
#define __Pyx_PyUnicode_READ_CHAR(u, i) ((Py_UCS4)(PyUnicode_AS_UNICODE(u)[i])) #define __Pyx_PyUnicode_READ_CHAR(u, i) ((Py_UCS4)(PyUnicode_AS_UNICODE(u)[i]))
...@@ -103,6 +107,7 @@ ...@@ -103,6 +107,7 @@
#define __Pyx_PyUnicode_DATA(u) ((void*)PyUnicode_AS_UNICODE(u)) #define __Pyx_PyUnicode_DATA(u) ((void*)PyUnicode_AS_UNICODE(u))
/* (void)(k) => avoid unused variable warning due to macro: */ /* (void)(k) => avoid unused variable warning due to macro: */
#define __Pyx_PyUnicode_READ(k, d, i) ((void)(k), (Py_UCS4)(((Py_UNICODE*)d)[i])) #define __Pyx_PyUnicode_READ(k, d, i) ((void)(k), (Py_UCS4)(((Py_UNICODE*)d)[i]))
#define __Pyx_PyUnicode_WRITE(k, d, i, ch) (((void)(k)), ((Py_UNICODE*)d)[i] = ch)
#define __Pyx_PyUnicode_IS_TRUE(u) (0 != PyUnicode_GET_SIZE(u)) #define __Pyx_PyUnicode_IS_TRUE(u) (0 != PyUnicode_GET_SIZE(u))
#endif #endif
......
...@@ -653,45 +653,32 @@ static PyObject* __Pyx_PyUnicode_Build(Py_ssize_t ulength, char* chars, int clen ...@@ -653,45 +653,32 @@ static PyObject* __Pyx_PyUnicode_Build(Py_ssize_t ulength, char* chars, int clen
Py_ssize_t uoffset = ulength - clength; Py_ssize_t uoffset = ulength - clength;
#if CYTHON_COMPILING_IN_CPYTHON #if CYTHON_COMPILING_IN_CPYTHON
Py_ssize_t i; Py_ssize_t i;
#if PY_MAJOR_VERSION > 3 || PY_MAJOR_VERSION == 3 && PY_MINOR_VERSION >= 3 #if CYTHON_PEP393_ENABLED
// Py 3.3+ (post PEP-393) // Py 3.3+ (post PEP-393)
void *udata; void *udata;
uval = PyUnicode_New(ulength, 127); uval = PyUnicode_New(ulength, 127);
if (unlikely(!uval)) return NULL; if (unlikely(!uval)) return NULL;
udata = PyUnicode_DATA(uval); udata = PyUnicode_DATA(uval);
if (uoffset > 0) {
i = 0;
if (prepend_sign) {
PyUnicode_WRITE(PyUnicode_1BYTE_KIND, udata, 0, '-');
i++;
}
for (; i < uoffset; i++) {
PyUnicode_WRITE(PyUnicode_1BYTE_KIND, udata, i, padding_char);
}
}
for (i=0; i < clength; i++) {
PyUnicode_WRITE(PyUnicode_1BYTE_KIND, udata, uoffset+i, chars[i]);
}
#else #else
// Py 2.x/3.2 (pre PEP-393) // Py 2.x/3.2 (pre PEP-393)
Py_UNICODE *udata; Py_UNICODE *udata;
uval = PyUnicode_FromUnicode(NULL, ulength); uval = PyUnicode_FromUnicode(NULL, ulength);
if (unlikely(!uval)) return NULL; if (unlikely(!uval)) return NULL;
udata = PyUnicode_AS_UNICODE(uval); udata = PyUnicode_AS_UNICODE(uval);
#endif
if (uoffset > 0) { if (uoffset > 0) {
i = 0; i = 0;
if (prepend_sign) { if (prepend_sign) {
udata[0] = '-'; __Pyx_PyUnicode_WRITE(PyUnicode_1BYTE_KIND, udata, 0, '-');
i++; i++;
} }
for (; i < uoffset; i++) { for (; i < uoffset; i++) {
udata[i] = padding_char; __Pyx_PyUnicode_WRITE(PyUnicode_1BYTE_KIND, udata, i, padding_char);
} }
} }
for (i=0; i < clength; i++) { for (i=0; i < clength; i++) {
udata[uoffset+i] = chars[i]; __Pyx_PyUnicode_WRITE(PyUnicode_1BYTE_KIND, udata, uoffset+i, chars[i]);
} }
#endif
#else #else
// non-CPython // non-CPython
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment