[Python-checkins] cpython: remove some usage of Py_UNICODE_TOUPPER/LOWER

benjamin.peterson python-checkins at python.org
Thu Jan 12 03:00:55 CET 2012


http://hg.python.org/cpython/rev/c2153ce1b5dd
changeset:   74341:c2153ce1b5dd
parent:      74339:2db3ca05fbb7
user:        Benjamin Peterson <benjamin at python.org>
date:        Wed Jan 11 21:00:42 2012 -0500
summary:
  remove some usage of Py_UNICODE_TOUPPER/LOWER

files:
  Objects/stringlib/asciilib.h    |   2 -
  Objects/stringlib/stringdefs.h  |   2 -
  Objects/stringlib/ucs1lib.h     |   2 -
  Objects/stringlib/ucs2lib.h     |   2 -
  Objects/stringlib/ucs4lib.h     |   2 -
  Objects/stringlib/unicodedefs.h |   2 -
  Python/_warnings.c              |   9 +++---
  Python/formatter_unicode.c      |  27 ++++++++++++--------
  8 files changed, 21 insertions(+), 27 deletions(-)


diff --git a/Objects/stringlib/asciilib.h b/Objects/stringlib/asciilib.h
--- a/Objects/stringlib/asciilib.h
+++ b/Objects/stringlib/asciilib.h
@@ -15,8 +15,6 @@
 #define STRINGLIB_ISLINEBREAK    BLOOM_LINEBREAK
 #define STRINGLIB_ISDECIMAL      Py_UNICODE_ISDECIMAL
 #define STRINGLIB_TODECIMAL      Py_UNICODE_TODECIMAL
-#define STRINGLIB_TOUPPER        Py_UNICODE_TOUPPER
-#define STRINGLIB_TOLOWER        Py_UNICODE_TOLOWER
 #define STRINGLIB_STR            PyUnicode_1BYTE_DATA
 #define STRINGLIB_LEN            PyUnicode_GET_LENGTH
 #define STRINGLIB_NEW            unicode_fromascii
diff --git a/Objects/stringlib/stringdefs.h b/Objects/stringlib/stringdefs.h
--- a/Objects/stringlib/stringdefs.h
+++ b/Objects/stringlib/stringdefs.h
@@ -18,8 +18,6 @@
 #define STRINGLIB_ISLINEBREAK(x) ((x == '\n') || (x == '\r'))
 #define STRINGLIB_ISDECIMAL(x)   ((x >= '0') && (x <= '9'))
 #define STRINGLIB_TODECIMAL(x)   (STRINGLIB_ISDECIMAL(x) ? (x - '0') : -1)
-#define STRINGLIB_TOUPPER        Py_TOUPPER
-#define STRINGLIB_TOLOWER        Py_TOLOWER
 #define STRINGLIB_STR            PyBytes_AS_STRING
 #define STRINGLIB_LEN            PyBytes_GET_SIZE
 #define STRINGLIB_NEW            PyBytes_FromStringAndSize
diff --git a/Objects/stringlib/ucs1lib.h b/Objects/stringlib/ucs1lib.h
--- a/Objects/stringlib/ucs1lib.h
+++ b/Objects/stringlib/ucs1lib.h
@@ -15,8 +15,6 @@
 #define STRINGLIB_ISLINEBREAK    BLOOM_LINEBREAK
 #define STRINGLIB_ISDECIMAL      Py_UNICODE_ISDECIMAL
 #define STRINGLIB_TODECIMAL      Py_UNICODE_TODECIMAL
-#define STRINGLIB_TOUPPER        Py_UNICODE_TOUPPER
-#define STRINGLIB_TOLOWER        Py_UNICODE_TOLOWER
 #define STRINGLIB_STR            PyUnicode_1BYTE_DATA
 #define STRINGLIB_LEN            PyUnicode_GET_LENGTH
 #define STRINGLIB_NEW            _PyUnicode_FromUCS1
diff --git a/Objects/stringlib/ucs2lib.h b/Objects/stringlib/ucs2lib.h
--- a/Objects/stringlib/ucs2lib.h
+++ b/Objects/stringlib/ucs2lib.h
@@ -15,8 +15,6 @@
 #define STRINGLIB_ISLINEBREAK    BLOOM_LINEBREAK
 #define STRINGLIB_ISDECIMAL      Py_UNICODE_ISDECIMAL
 #define STRINGLIB_TODECIMAL      Py_UNICODE_TODECIMAL
-#define STRINGLIB_TOUPPER        Py_UNICODE_TOUPPER
-#define STRINGLIB_TOLOWER        Py_UNICODE_TOLOWER
 #define STRINGLIB_STR            PyUnicode_2BYTE_DATA
 #define STRINGLIB_LEN            PyUnicode_GET_LENGTH
 #define STRINGLIB_NEW            _PyUnicode_FromUCS2
diff --git a/Objects/stringlib/ucs4lib.h b/Objects/stringlib/ucs4lib.h
--- a/Objects/stringlib/ucs4lib.h
+++ b/Objects/stringlib/ucs4lib.h
@@ -15,8 +15,6 @@
 #define STRINGLIB_ISLINEBREAK    BLOOM_LINEBREAK
 #define STRINGLIB_ISDECIMAL      Py_UNICODE_ISDECIMAL
 #define STRINGLIB_TODECIMAL      Py_UNICODE_TODECIMAL
-#define STRINGLIB_TOUPPER        Py_UNICODE_TOUPPER
-#define STRINGLIB_TOLOWER        Py_UNICODE_TOLOWER
 #define STRINGLIB_STR            PyUnicode_4BYTE_DATA
 #define STRINGLIB_LEN            PyUnicode_GET_LENGTH
 #define STRINGLIB_NEW            _PyUnicode_FromUCS4
diff --git a/Objects/stringlib/unicodedefs.h b/Objects/stringlib/unicodedefs.h
--- a/Objects/stringlib/unicodedefs.h
+++ b/Objects/stringlib/unicodedefs.h
@@ -18,8 +18,6 @@
 #define STRINGLIB_ISLINEBREAK    BLOOM_LINEBREAK
 #define STRINGLIB_ISDECIMAL      Py_UNICODE_ISDECIMAL
 #define STRINGLIB_TODECIMAL      Py_UNICODE_TODECIMAL
-#define STRINGLIB_TOUPPER        Py_UNICODE_TOUPPER
-#define STRINGLIB_TOLOWER        Py_UNICODE_TOLOWER
 #define STRINGLIB_STR            PyUnicode_AS_UNICODE
 #define STRINGLIB_LEN            PyUnicode_GET_SIZE
 #define STRINGLIB_NEW            PyUnicode_FromUnicode
diff --git a/Python/_warnings.c b/Python/_warnings.c
--- a/Python/_warnings.c
+++ b/Python/_warnings.c
@@ -510,13 +510,14 @@
         kind = PyUnicode_KIND(*filename);
         data = PyUnicode_DATA(*filename);
 
+#define ascii_lower(c) ((c <= 127) ? Py_TOLOWER(c) : 0)
         /* if filename.lower().endswith((".pyc", ".pyo")): */
         if (len >= 4 &&
             PyUnicode_READ(kind, data, len-4) == '.' &&
-            Py_UNICODE_TOLOWER(PyUnicode_READ(kind, data, len-3)) == 'p' &&
-            Py_UNICODE_TOLOWER(PyUnicode_READ(kind, data, len-2)) == 'y' &&
-            (Py_UNICODE_TOLOWER(PyUnicode_READ(kind, data, len-1)) == 'c' ||
-                Py_UNICODE_TOLOWER(PyUnicode_READ(kind, data, len-1)) == 'o'))
+            ascii_lower(PyUnicode_READ(kind, data, len-3)) == 'p' &&
+            ascii_lower(PyUnicode_READ(kind, data, len-2)) == 'y' &&
+            (ascii_lower(PyUnicode_READ(kind, data, len-1)) == 'c' ||
+                ascii_lower(PyUnicode_READ(kind, data, len-1)) == 'o'))
         {
             *filename = PyUnicode_Substring(*filename, 0,
                                             PyUnicode_GET_LENGTH(*filename)-1);
diff --git a/Python/formatter_unicode.c b/Python/formatter_unicode.c
--- a/Python/formatter_unicode.c
+++ b/Python/formatter_unicode.c
@@ -561,13 +561,14 @@
             return -1;
         if (toupper) {
             Py_ssize_t t;
-            /* XXX if the upper-case prefix is wider than the target
-               buffer, the caller should have allocated a wider string,
-               but currently doesn't. */
-            for (t = 0; t < spec->n_prefix; ++t)
-                PyUnicode_WRITE(kind, data, pos + t,
-                                Py_UNICODE_TOUPPER(
-                                    PyUnicode_READ(kind, data, pos + t)));
+            for (t = 0; t < spec->n_prefix; t++) {
+                Py_UCS4 c = PyUnicode_READ(kind, data, pos + t);
+                if (c > 127) {
+                    PyErr_SetString(PyExc_SystemError, "prefix not ASCII");
+                    return -1;
+                }
+                PyUnicode_WRITE(kind, data, pos + t, Py_TOUPPER(c));
+            }
         }
         pos += spec->n_prefix;
     }
@@ -607,10 +608,14 @@
     }
     if (toupper) {
         Py_ssize_t t;
-        for (t = 0; t < spec->n_grouped_digits; ++t)
-            PyUnicode_WRITE(kind, data, pos + t,
-                            Py_UNICODE_TOUPPER(
-                                PyUnicode_READ(kind, data, pos + t)));
+        for (t = 0; t < spec->n_grouped_digits; t++) {
+            Py_UCS4 c = PyUnicode_READ(kind, data, pos + t);
+            if (c > 127) {
+                PyErr_SetString(PyExc_SystemError, "non-ascii grouped digit");
+                return -1;
+            }
+            PyUnicode_WRITE(kind, data, pos + t, Py_TOUPPER(c));
+        }
     }
     pos += spec->n_grouped_digits;
 

-- 
Repository URL: http://hg.python.org/cpython


More information about the Python-checkins mailing list