Mark PyUnicode_CONVERT_BYTES as private
diff --git a/Objects/unicodeobject.c b/Objects/unicodeobject.c
index 7232653..ea88e21 100644
--- a/Objects/unicodeobject.c
+++ b/Objects/unicodeobject.c
@@ -90,6 +90,21 @@
 extern "C" {
 #endif
 
+/* Generic helper macro to convert characters of different types.
+   from_type and to_type have to be valid type names, begin and end
+   are pointers to the source characters which should be of type
+   "from_type *".  to is a pointer of type "to_type *" and points to the
+   buffer where the result characters are written to. */
+#define _PyUnicode_CONVERT_BYTES(from_type, to_type, begin, end, to) \
+    do { \
+        const from_type *iter_; to_type *to_; \
+        for (iter_ = (begin), to_ = (to_type *)(to); \
+             iter_ < (end); \
+             ++iter_, ++to_) { \
+            *to_ = (to_type)*iter_; \
+        } \
+    } while (0)
+
 #define _PyUnicode_WSTR(op) (((PyASCIIObject*)(op))->wstr)
 #define _PyUnicode_WSTR_LENGTH(op) (((PyCompactUnicodeObject*)(op))->wstr_length)
 #define _PyUnicode_LENGTH(op) (((PyASCIIObject *)(op))->length)
@@ -622,7 +637,7 @@
         case PyUnicode_1BYTE_KIND:
             switch (to_kind) {
                 case PyUnicode_2BYTE_KIND:
-                    PyUnicode_CONVERT_BYTES(
+                    _PyUnicode_CONVERT_BYTES(
                         unsigned char, Py_UCS2,
                         PyUnicode_1BYTE_DATA(from) + from_start,
                         PyUnicode_1BYTE_DATA(from) + from_start + how_many,
@@ -630,7 +645,7 @@
                         );
                     break;
                 case PyUnicode_4BYTE_KIND:
-                    PyUnicode_CONVERT_BYTES(
+                    _PyUnicode_CONVERT_BYTES(
                         unsigned char, Py_UCS4,
                         PyUnicode_1BYTE_DATA(from) + from_start,
                         PyUnicode_1BYTE_DATA(from) + from_start + how_many,
@@ -644,7 +659,7 @@
         case PyUnicode_2BYTE_KIND:
             switch (to_kind) {
                 case PyUnicode_1BYTE_KIND:
-                    PyUnicode_CONVERT_BYTES(
+                    _PyUnicode_CONVERT_BYTES(
                         Py_UCS2, unsigned char,
                         PyUnicode_2BYTE_DATA(from) + from_start,
                         PyUnicode_2BYTE_DATA(from) + from_start + how_many,
@@ -652,7 +667,7 @@
                         );
                     break;
                 case PyUnicode_4BYTE_KIND:
-                    PyUnicode_CONVERT_BYTES(
+                    _PyUnicode_CONVERT_BYTES(
                         Py_UCS2, Py_UCS4,
                         PyUnicode_2BYTE_DATA(from) + from_start,
                         PyUnicode_2BYTE_DATA(from) + from_start + how_many,
@@ -666,7 +681,7 @@
         case PyUnicode_4BYTE_KIND:
             switch (to_kind) {
                 case PyUnicode_1BYTE_KIND:
-                    PyUnicode_CONVERT_BYTES(
+                    _PyUnicode_CONVERT_BYTES(
                         Py_UCS4, unsigned char,
                         PyUnicode_4BYTE_DATA(from) + from_start,
                         PyUnicode_4BYTE_DATA(from) + from_start + how_many,
@@ -674,7 +689,7 @@
                         );
                     break;
                 case PyUnicode_2BYTE_KIND:
-                    PyUnicode_CONVERT_BYTES(
+                    _PyUnicode_CONVERT_BYTES(
                         Py_UCS4, Py_UCS2,
                         PyUnicode_4BYTE_DATA(from) + from_start,
                         PyUnicode_4BYTE_DATA(from) + from_start + how_many,
@@ -792,7 +807,7 @@
             PyErr_NoMemory();
             return -1;
         }
-        PyUnicode_CONVERT_BYTES(wchar_t, unsigned char,
+        _PyUnicode_CONVERT_BYTES(wchar_t, unsigned char,
                                 _PyUnicode_WSTR(unicode), end,
                                 PyUnicode_1BYTE_DATA(unicode));
         PyUnicode_1BYTE_DATA(unicode)[_PyUnicode_WSTR_LENGTH(unicode)] = '\0';
@@ -834,7 +849,7 @@
                 PyErr_NoMemory();
                 return -1;
             }
-            PyUnicode_CONVERT_BYTES(wchar_t, Py_UCS2,
+            _PyUnicode_CONVERT_BYTES(wchar_t, Py_UCS2,
                                     _PyUnicode_WSTR(unicode), end,
                                     PyUnicode_2BYTE_DATA(unicode));
             PyUnicode_2BYTE_DATA(unicode)[_PyUnicode_WSTR_LENGTH(unicode)] = '\0';
@@ -1023,14 +1038,14 @@
 
     switch (PyUnicode_KIND(unicode)) {
     case PyUnicode_1BYTE_KIND:
-        PyUnicode_CONVERT_BYTES(Py_UNICODE, unsigned char,
+        _PyUnicode_CONVERT_BYTES(Py_UNICODE, unsigned char,
                                 u, u + size, PyUnicode_1BYTE_DATA(unicode));
         break;
     case PyUnicode_2BYTE_KIND:
 #if Py_UNICODE_SIZE == 2
         Py_MEMCPY(PyUnicode_2BYTE_DATA(unicode), u, size * 2);
 #else
-        PyUnicode_CONVERT_BYTES(Py_UNICODE, Py_UCS2,
+        _PyUnicode_CONVERT_BYTES(Py_UNICODE, Py_UCS2,
                                 u, u + size, PyUnicode_2BYTE_DATA(unicode));
 #endif
         break;