mirror of https://github.com/python/cpython
needforspeed: make new upper/lower work properly for single-character
strings too... (thanks to georg brandl for spotting the exact problem faster than anyone else)
This commit is contained in:
parent
39ccef607e
commit
4b4e33ef14
|
@ -2040,14 +2040,16 @@ string_lower(PyStringObject *self)
|
||||||
Py_ssize_t i, n = PyString_GET_SIZE(self);
|
Py_ssize_t i, n = PyString_GET_SIZE(self);
|
||||||
PyObject *newobj;
|
PyObject *newobj;
|
||||||
|
|
||||||
newobj = PyString_FromStringAndSize(PyString_AS_STRING(self), n);
|
newobj = PyString_FromStringAndSize(NULL, n);
|
||||||
if (!newobj)
|
if (!newobj)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
s = PyString_AS_STRING(newobj);
|
s = PyString_AS_STRING(newobj);
|
||||||
|
|
||||||
|
memcpy(s, PyString_AS_STRING(self), n);
|
||||||
|
|
||||||
for (i = 0; i < n; i++) {
|
for (i = 0; i < n; i++) {
|
||||||
char c = Py_CHARMASK(s[i]);
|
int c = Py_CHARMASK(s[i]);
|
||||||
if (isupper(c))
|
if (isupper(c))
|
||||||
s[i] = _tolower(c);
|
s[i] = _tolower(c);
|
||||||
}
|
}
|
||||||
|
@ -2067,14 +2069,16 @@ string_upper(PyStringObject *self)
|
||||||
Py_ssize_t i, n = PyString_GET_SIZE(self);
|
Py_ssize_t i, n = PyString_GET_SIZE(self);
|
||||||
PyObject *newobj;
|
PyObject *newobj;
|
||||||
|
|
||||||
newobj = PyString_FromStringAndSize(PyString_AS_STRING(self), n);
|
newobj = PyString_FromStringAndSize(NULL, n);
|
||||||
if (!newobj)
|
if (!newobj)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
s = PyString_AS_STRING(newobj);
|
s = PyString_AS_STRING(newobj);
|
||||||
|
|
||||||
|
memcpy(s, PyString_AS_STRING(self), n);
|
||||||
|
|
||||||
for (i = 0; i < n; i++) {
|
for (i = 0; i < n; i++) {
|
||||||
char c = Py_CHARMASK(s[i]);
|
int c = Py_CHARMASK(s[i]);
|
||||||
if (islower(c))
|
if (islower(c))
|
||||||
s[i] = _toupper(c);
|
s[i] = _toupper(c);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue