From 80e7f27e62353eeaf1f3dcf9f2bfd016b039f4b8 Mon Sep 17 00:00:00 2001 From: Neal Norwitz Date: Sun, 26 Aug 2007 06:45:23 +0000 Subject: [PATCH] Use unicode and remove support for some uses of str8. --- Objects/typeobject.c | 24 ++++++++++-------------- Python/import.c | 39 ++++++++++----------------------------- 2 files changed, 20 insertions(+), 43 deletions(-) diff --git a/Objects/typeobject.c b/Objects/typeobject.c index bdcccf101e7..9bd920203ab 100644 --- a/Objects/typeobject.c +++ b/Objects/typeobject.c @@ -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 */ diff --git a/Python/import.c b/Python/import.c index 24eeada69d9..8195bad2169 100644 --- a/Python/import.c +++ b/Python/import.c @@ -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 instead of . */ PyObject *