Use unicode and remove support for some uses of str8.
authorNeal Norwitz <nnorwitz@gmail.com>
Sun, 26 Aug 2007 06:45:23 +0000 (06:45 +0000)
committerNeal Norwitz <nnorwitz@gmail.com>
Sun, 26 Aug 2007 06:45:23 +0000 (06:45 +0000)
Objects/typeobject.c
Python/import.c

index bdcccf101e773692ac2d4fe3df02f8893582c1af..9bd920203ab32095b48ae4c4e57b60dbab61cae2 100644 (file)
@@ -44,6 +44,7 @@ static int
 type_set_name(PyTypeObject *type, PyObject *value, void *context)
 {
        PyHeapTypeObject* et;
+       char *tp_name;
 
        if (!(type->tp_flags & Py_TPFLAGS_HEAPTYPE)) {
                PyErr_Format(PyExc_TypeError,
@@ -61,11 +62,10 @@ type_set_name(PyTypeObject *type, PyObject *value, void *context)
                             type->tp_name, Py_Type(value)->tp_name);
                return -1;
        }
-       value = _PyUnicode_AsDefaultEncodedString(value, NULL);
-       if (value == NULL)
+       tp_name = PyUnicode_AsString(value);
+       if (tp_name == NULL)
                return -1;
-       if (strlen(PyString_AS_STRING(value))
-           != (size_t)PyString_GET_SIZE(value)) {
+       if (strlen(tp_name) != (size_t)PyUnicode_GET_SIZE(value)) {
                PyErr_Format(PyExc_ValueError,
                             "__name__ must not contain null bytes");
                return -1;
@@ -78,7 +78,7 @@ type_set_name(PyTypeObject *type, PyObject *value, void *context)
        Py_DECREF(et->ht_name);
        et->ht_name = value;
 
-       type->tp_name = PyString_AS_STRING(value);
+       type->tp_name = tp_name;
 
        return 0;
 }
@@ -1736,7 +1736,7 @@ type_new(PyTypeObject *metatype, PyObject *args, PyObject *kwds)
                /* Have slots */
 
                /* Make it into a tuple */
-               if (PyString_Check(slots) || PyUnicode_Check(slots))
+               if (PyUnicode_Check(slots))
                        slots = PyTuple_Pack(1, slots);
                else
                        slots = PySequence_Tuple(slots);
@@ -1875,14 +1875,10 @@ type_new(PyTypeObject *metatype, PyObject *args, PyObject *kwds)
        type->tp_as_sequence = &et->as_sequence;
        type->tp_as_mapping = &et->as_mapping;
        type->tp_as_buffer = &et->as_buffer;
-       if (PyString_Check(name))
-               type->tp_name = PyString_AsString(name);
-       else {
-               type->tp_name = PyUnicode_AsString(name);
-               if (!type->tp_name) {
-                       Py_DECREF(type);
-                       return NULL;
-               }
+       type->tp_name = PyUnicode_AsString(name);
+       if (!type->tp_name) {
+               Py_DECREF(type);
+               return NULL;
        }
 
        /* Set tp_base and tp_bases */
index 24eeada69d94c688f817def3ec8e35cac0487240..8195bad2169a33774edaade97e33f58768de0f4c 100644 (file)
@@ -453,8 +453,8 @@ PyImport_Cleanup(void)
                while (PyDict_Next(modules, &pos, &key, &value)) {
                        if (value->ob_refcnt != 1)
                                continue;
-                       if (PyString_Check(key) && PyModule_Check(value)) {
-                               name = PyString_AS_STRING(key);
+                       if (PyUnicode_Check(key) && PyModule_Check(value)) {
+                               name = PyUnicode_AsString(key);
                                if (strcmp(name, "__builtin__") == 0)
                                        continue;
                                if (strcmp(name, "sys") == 0)
@@ -472,8 +472,8 @@ PyImport_Cleanup(void)
        /* Next, delete all modules (still skipping __builtin__ and sys) */
        pos = 0;
        while (PyDict_Next(modules, &pos, &key, &value)) {
-               if (PyString_Check(key) && PyModule_Check(value)) {
-                       name = PyString_AS_STRING(key);
+               if (PyUnicode_Check(key) && PyModule_Check(value)) {
+                       name = PyUnicode_AsString(key);
                        if (strcmp(name, "__builtin__") == 0)
                                continue;
                        if (strcmp(name, "sys") == 0)
@@ -2008,30 +2008,21 @@ get_parent(PyObject *globals, char *buf, Py_ssize_t *p_buflen, int level)
        *buf = '\0';
        *p_buflen = 0;
        modname = PyDict_GetItem(globals, namestr);
-       if (modname == NULL || (!PyString_Check(modname) && !PyUnicode_Check(modname)))
+       if (modname == NULL || !PyUnicode_Check(modname))
                return Py_None;
 
-       if (PyUnicode_Check(modname)) {
-               /* XXX need to support Unicode better */
-               modname = _PyUnicode_AsDefaultEncodedString(modname, NULL);
-               if (!modname) {
-                       PyErr_Clear();
-                       return NULL;
-               }
-       }
-
        modpath = PyDict_GetItem(globals, pathstr);
        if (modpath != NULL) {
-               Py_ssize_t len = PyString_GET_SIZE(modname);
+               Py_ssize_t len = PyUnicode_GET_SIZE(modname);
                if (len > MAXPATHLEN) {
                        PyErr_SetString(PyExc_ValueError,
                                        "Module name too long");
                        return NULL;
                }
-               strcpy(buf, PyString_AS_STRING(modname));
+               strcpy(buf, PyUnicode_AsString(modname));
        }
        else {
-               char *start = PyString_AS_STRING(modname);
+               char *start = PyUnicode_AsString(modname);
                char *lastdot = strrchr(start, '.');
                size_t len;
                if (lastdot == NULL && level > 0) {
@@ -2174,19 +2165,9 @@ ensure_fromlist(PyObject *mod, PyObject *fromlist, char *buf, Py_ssize_t buflen,
                        }
                        return 0;
                }
-               if (PyString_Check(item)) {
-                       /* XXX there shouldn't be any str8 objects here */
-                       PyObject *uni = PyUnicode_DecodeASCII(PyString_AsString(item),
-                                                             PyString_Size(item),
-                                                             "strict");
-                       Py_DECREF(item);
-                       if (!uni)
-                               return 0;
-                       item = uni;
-               }
                if (!PyUnicode_Check(item)) {
                        PyErr_SetString(PyExc_TypeError,
-                                       "Item in ``from list'' not a unicode string");
+                                       "Item in ``from list'' not a string");
                        Py_DECREF(item);
                        return 0;
                }
@@ -2444,7 +2425,7 @@ PyImport_ReloadModule(PyObject *m)
    done using whatever import hooks are installed in the current
    environment, e.g. by "rexec".
    A dummy list ["__doc__"] is passed as the 4th argument so that
-   e.g. PyImport_Import(PyString_FromString("win32com.client.gencache"))
+   e.g. PyImport_Import(PyUnicode_FromString("win32com.client.gencache"))
    will return <module "gencache"> instead of <module "win32com">. */
 
 PyObject *