[Python-checkins] cpython: _copy_characters(): move debug code at the top to avoid noisy #ifdef

victor.stinner python-checkins at python.org
Sat Jun 16 16:40:49 CEST 2012


http://hg.python.org/cpython/rev/f6463dc5ead6
changeset:   77469:f6463dc5ead6
user:        Victor Stinner <victor.stinner at gmail.com>
date:        Sat Jun 16 16:38:26 2012 +0200
summary:
  _copy_characters(): move debug code at the top to avoid noisy #ifdef

And don't use assert() anymore if check_maxchar is set: return -1 on error
instead.

files:
  Objects/unicodeobject.c |  49 +++++++++++++---------------
  1 files changed, 23 insertions(+), 26 deletions(-)


diff --git a/Objects/unicodeobject.c b/Objects/unicodeobject.c
--- a/Objects/unicodeobject.c
+++ b/Objects/unicodeobject.c
@@ -1148,27 +1148,31 @@
     to_kind = PyUnicode_KIND(to);
     to_data = PyUnicode_DATA(to);
 
+#ifdef Py_DEBUG
+    if (!check_maxchar
+        && PyUnicode_MAX_CHAR_VALUE(from) > PyUnicode_MAX_CHAR_VALUE(to))
+    {
+        const Py_UCS4 to_maxchar = PyUnicode_MAX_CHAR_VALUE(to);
+        Py_UCS4 ch;
+        Py_ssize_t i;
+        for (i=0; i < how_many; i++) {
+            ch = PyUnicode_READ(from_kind, from_data, from_start + i);
+            assert(ch <= to_maxchar);
+        }
+    }
+#endif
+
     if (from_kind == to_kind) {
-        if (!PyUnicode_IS_ASCII(from) && PyUnicode_IS_ASCII(to)) {
+        if (check_maxchar
+            && !PyUnicode_IS_ASCII(from) && PyUnicode_IS_ASCII(to))
+        {
             /* Writing Latin-1 characters into an ASCII string requires to
                check that all written characters are pure ASCII */
-#ifndef Py_DEBUG
-            if (check_maxchar) {
-                Py_UCS4 max_char;
-                max_char = ucs1lib_find_max_char(from_data,
-                                                 (Py_UCS1*)from_data + how_many);
-                if (max_char >= 128)
-                    return -1;
-            }
-#else
-            const Py_UCS4 to_maxchar = PyUnicode_MAX_CHAR_VALUE(to);
-            Py_UCS4 ch;
-            Py_ssize_t i;
-            for (i=0; i < how_many; i++) {
-                ch = PyUnicode_READ(from_kind, from_data, from_start + i);
-                assert(ch <= to_maxchar);
-            }
-#endif
+            Py_UCS4 max_char;
+            max_char = ucs1lib_find_max_char(from_data,
+                                             (Py_UCS1*)from_data + how_many);
+            if (max_char >= 128)
+                return -1;
         }
         Py_MEMCPY((char*)to_data + to_kind * to_start,
                   (char*)from_data + from_kind * from_start,
@@ -1207,7 +1211,6 @@
     else {
         assert (PyUnicode_MAX_CHAR_VALUE(from) > PyUnicode_MAX_CHAR_VALUE(to));
 
-#ifndef Py_DEBUG
         if (!check_maxchar) {
             if (from_kind == PyUnicode_2BYTE_KIND
                 && to_kind == PyUnicode_1BYTE_KIND)
@@ -1244,21 +1247,15 @@
                 return -1;
             }
         }
-        else
-#endif
-        {
+        else {
             const Py_UCS4 to_maxchar = PyUnicode_MAX_CHAR_VALUE(to);
             Py_UCS4 ch;
             Py_ssize_t i;
 
             for (i=0; i < how_many; i++) {
                 ch = PyUnicode_READ(from_kind, from_data, from_start + i);
-#ifndef Py_DEBUG
                 if (ch > to_maxchar)
                     return -1;
-#else
-                assert(ch <= to_maxchar);
-#endif
                 PyUnicode_WRITE(to_kind, to_data, to_start + i, ch);
             }
         }

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


More information about the Python-checkins mailing list