[Python-checkins] cpython: Simplify PyUnicode_Copy()

victor.stinner python-checkins at python.org
Mon Nov 21 23:02:34 CET 2011


http://hg.python.org/cpython/rev/3bb0dd83ff9f
changeset:   73673:3bb0dd83ff9f
user:        Victor Stinner <victor.stinner at haypocalc.com>
date:        Mon Nov 21 23:03:47 2011 +0100
summary:
  Simplify PyUnicode_Copy()

USe PyUnicode_Copy() in fixup()

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


diff --git a/Objects/unicodeobject.c b/Objects/unicodeobject.c
--- a/Objects/unicodeobject.c
+++ b/Objects/unicodeobject.c
@@ -1921,7 +1921,7 @@
 PyObject*
 PyUnicode_Copy(PyObject *unicode)
 {
-    Py_ssize_t size;
+    Py_ssize_t length;
     PyObject *copy;
     void *data;
 
@@ -1932,28 +1932,15 @@
     if (PyUnicode_READY(unicode))
         return NULL;
 
-    size = PyUnicode_GET_LENGTH(unicode);
-    copy = PyUnicode_New(size, PyUnicode_MAX_CHAR_VALUE(unicode));
+    length = PyUnicode_GET_LENGTH(unicode);
+    copy = PyUnicode_New(length, PyUnicode_MAX_CHAR_VALUE(unicode));
     if (!copy)
         return NULL;
     assert(PyUnicode_KIND(copy) == PyUnicode_KIND(unicode));
 
     data = PyUnicode_DATA(unicode);
-    switch (PyUnicode_KIND(unicode))
-    {
-    case PyUnicode_1BYTE_KIND:
-        memcpy(PyUnicode_1BYTE_DATA(copy), data, size);
-        break;
-    case PyUnicode_2BYTE_KIND:
-        memcpy(PyUnicode_2BYTE_DATA(copy), data, sizeof(Py_UCS2) * size);
-        break;
-    case PyUnicode_4BYTE_KIND:
-        memcpy(PyUnicode_4BYTE_DATA(copy), data, sizeof(Py_UCS4) * size);
-        break;
-    default:
-        assert(0);
-        break;
-    }
+    Py_MEMCPY(PyUnicode_DATA(copy), PyUnicode_DATA(unicode),
+              length * PyUnicode_KIND(unicode));
     assert(_PyUnicode_CheckConsistency(copy, 1));
     return copy;
 }
@@ -9344,16 +9331,10 @@
     PyObject *u;
     Py_UCS4 maxchar_old, maxchar_new = 0;
 
-    if (PyUnicode_READY(self) == -1)
-        return NULL;
-    maxchar_old = PyUnicode_MAX_CHAR_VALUE(self);
-    u = PyUnicode_New(PyUnicode_GET_LENGTH(self),
-                      maxchar_old);
+    u = PyUnicode_Copy(self);
     if (u == NULL)
         return NULL;
-
-    Py_MEMCPY(PyUnicode_1BYTE_DATA(u), PyUnicode_1BYTE_DATA(self),
-              PyUnicode_GET_LENGTH(u) * PyUnicode_KIND(u));
+    maxchar_old = PyUnicode_MAX_CHAR_VALUE(u);
 
     /* fix functions return the new maximum character in a string,
        if the kind of the resulting unicode object does not change,

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


More information about the Python-checkins mailing list