]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
Ensure that 1-char singletons get used
authorAntoine Pitrou <solipsis@pitrou.net>
Thu, 6 Oct 2011 20:07:51 +0000 (22:07 +0200)
committerAntoine Pitrou <solipsis@pitrou.net>
Thu, 6 Oct 2011 20:07:51 +0000 (22:07 +0200)
Objects/unicodeobject.c

index 75fc23c795b042d5a8ffaf275659e3559ee50728..3cc190ea00710d5cfc16a9933088bb68cf6c2c22 100644 (file)
@@ -1622,6 +1622,8 @@ unicode_fromascii(const unsigned char* s, Py_ssize_t size)
         assert(*p < 128);
     }
 #endif
+    if (size == 1)
+        return get_latin1_char(s[0]);
     res = PyUnicode_New(size, 127);
     if (!res)
         return NULL;
@@ -1653,6 +1655,8 @@ _PyUnicode_FromUCS1(const unsigned char* u, Py_ssize_t size)
     Py_ssize_t i;
 
     assert(size >= 0);
+    if (size == 1)
+        return get_latin1_char(u[0]);
     for (i = 0; i < size; i++) {
         if (u[i] & 0x80) {
             max_char = 255;
@@ -1675,6 +1679,8 @@ _PyUnicode_FromUCS2(const Py_UCS2 *u, Py_ssize_t size)
     Py_ssize_t i;
 
     assert(size >= 0);
+    if (size == 1 && u[0] < 256)
+        return get_latin1_char(u[0]);
     for (i = 0; i < size; i++) {
         if (u[i] > max_char) {
             max_char = u[i];
@@ -1702,6 +1708,8 @@ _PyUnicode_FromUCS4(const Py_UCS4 *u, Py_ssize_t size)
     Py_ssize_t i;
 
     assert(size >= 0);
+    if (size == 1 && u[0] < 256)
+        return get_latin1_char(u[0]);
     for (i = 0; i < size; i++) {
         if (u[i] > max_char) {
             max_char = u[i];