Use unicode and remove support for some uses of str8.
This commit is contained in:
parent
da059e3585
commit
80e7f27e62
|
@ -44,6 +44,7 @@ static int
|
||||||
type_set_name(PyTypeObject *type, PyObject *value, void *context)
|
type_set_name(PyTypeObject *type, PyObject *value, void *context)
|
||||||
{
|
{
|
||||||
PyHeapTypeObject* et;
|
PyHeapTypeObject* et;
|
||||||
|
char *tp_name;
|
||||||
|
|
||||||
if (!(type->tp_flags & Py_TPFLAGS_HEAPTYPE)) {
|
if (!(type->tp_flags & Py_TPFLAGS_HEAPTYPE)) {
|
||||||
PyErr_Format(PyExc_TypeError,
|
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);
|
type->tp_name, Py_Type(value)->tp_name);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
value = _PyUnicode_AsDefaultEncodedString(value, NULL);
|
tp_name = PyUnicode_AsString(value);
|
||||||
if (value == NULL)
|
if (tp_name == NULL)
|
||||||
return -1;
|
return -1;
|
||||||
if (strlen(PyString_AS_STRING(value))
|
if (strlen(tp_name) != (size_t)PyUnicode_GET_SIZE(value)) {
|
||||||
!= (size_t)PyString_GET_SIZE(value)) {
|
|
||||||
PyErr_Format(PyExc_ValueError,
|
PyErr_Format(PyExc_ValueError,
|
||||||
"__name__ must not contain null bytes");
|
"__name__ must not contain null bytes");
|
||||||
return -1;
|
return -1;
|
||||||
|
@ -78,7 +78,7 @@ type_set_name(PyTypeObject *type, PyObject *value, void *context)
|
||||||
Py_DECREF(et->ht_name);
|
Py_DECREF(et->ht_name);
|
||||||
et->ht_name = value;
|
et->ht_name = value;
|
||||||
|
|
||||||
type->tp_name = PyString_AS_STRING(value);
|
type->tp_name = tp_name;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -1736,7 +1736,7 @@ type_new(PyTypeObject *metatype, PyObject *args, PyObject *kwds)
|
||||||
/* Have slots */
|
/* Have slots */
|
||||||
|
|
||||||
/* Make it into a tuple */
|
/* Make it into a tuple */
|
||||||
if (PyString_Check(slots) || PyUnicode_Check(slots))
|
if (PyUnicode_Check(slots))
|
||||||
slots = PyTuple_Pack(1, slots);
|
slots = PyTuple_Pack(1, slots);
|
||||||
else
|
else
|
||||||
slots = PySequence_Tuple(slots);
|
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_sequence = &et->as_sequence;
|
||||||
type->tp_as_mapping = &et->as_mapping;
|
type->tp_as_mapping = &et->as_mapping;
|
||||||
type->tp_as_buffer = &et->as_buffer;
|
type->tp_as_buffer = &et->as_buffer;
|
||||||
if (PyString_Check(name))
|
type->tp_name = PyUnicode_AsString(name);
|
||||||
type->tp_name = PyString_AsString(name);
|
if (!type->tp_name) {
|
||||||
else {
|
Py_DECREF(type);
|
||||||
type->tp_name = PyUnicode_AsString(name);
|
return NULL;
|
||||||
if (!type->tp_name) {
|
|
||||||
Py_DECREF(type);
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Set tp_base and tp_bases */
|
/* Set tp_base and tp_bases */
|
||||||
|
|
|
@ -453,8 +453,8 @@ PyImport_Cleanup(void)
|
||||||
while (PyDict_Next(modules, &pos, &key, &value)) {
|
while (PyDict_Next(modules, &pos, &key, &value)) {
|
||||||
if (value->ob_refcnt != 1)
|
if (value->ob_refcnt != 1)
|
||||||
continue;
|
continue;
|
||||||
if (PyString_Check(key) && PyModule_Check(value)) {
|
if (PyUnicode_Check(key) && PyModule_Check(value)) {
|
||||||
name = PyString_AS_STRING(key);
|
name = PyUnicode_AsString(key);
|
||||||
if (strcmp(name, "__builtin__") == 0)
|
if (strcmp(name, "__builtin__") == 0)
|
||||||
continue;
|
continue;
|
||||||
if (strcmp(name, "sys") == 0)
|
if (strcmp(name, "sys") == 0)
|
||||||
|
@ -472,8 +472,8 @@ PyImport_Cleanup(void)
|
||||||
/* Next, delete all modules (still skipping __builtin__ and sys) */
|
/* Next, delete all modules (still skipping __builtin__ and sys) */
|
||||||
pos = 0;
|
pos = 0;
|
||||||
while (PyDict_Next(modules, &pos, &key, &value)) {
|
while (PyDict_Next(modules, &pos, &key, &value)) {
|
||||||
if (PyString_Check(key) && PyModule_Check(value)) {
|
if (PyUnicode_Check(key) && PyModule_Check(value)) {
|
||||||
name = PyString_AS_STRING(key);
|
name = PyUnicode_AsString(key);
|
||||||
if (strcmp(name, "__builtin__") == 0)
|
if (strcmp(name, "__builtin__") == 0)
|
||||||
continue;
|
continue;
|
||||||
if (strcmp(name, "sys") == 0)
|
if (strcmp(name, "sys") == 0)
|
||||||
|
@ -2008,30 +2008,21 @@ get_parent(PyObject *globals, char *buf, Py_ssize_t *p_buflen, int level)
|
||||||
*buf = '\0';
|
*buf = '\0';
|
||||||
*p_buflen = 0;
|
*p_buflen = 0;
|
||||||
modname = PyDict_GetItem(globals, namestr);
|
modname = PyDict_GetItem(globals, namestr);
|
||||||
if (modname == NULL || (!PyString_Check(modname) && !PyUnicode_Check(modname)))
|
if (modname == NULL || !PyUnicode_Check(modname))
|
||||||
return Py_None;
|
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);
|
modpath = PyDict_GetItem(globals, pathstr);
|
||||||
if (modpath != NULL) {
|
if (modpath != NULL) {
|
||||||
Py_ssize_t len = PyString_GET_SIZE(modname);
|
Py_ssize_t len = PyUnicode_GET_SIZE(modname);
|
||||||
if (len > MAXPATHLEN) {
|
if (len > MAXPATHLEN) {
|
||||||
PyErr_SetString(PyExc_ValueError,
|
PyErr_SetString(PyExc_ValueError,
|
||||||
"Module name too long");
|
"Module name too long");
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
strcpy(buf, PyString_AS_STRING(modname));
|
strcpy(buf, PyUnicode_AsString(modname));
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
char *start = PyString_AS_STRING(modname);
|
char *start = PyUnicode_AsString(modname);
|
||||||
char *lastdot = strrchr(start, '.');
|
char *lastdot = strrchr(start, '.');
|
||||||
size_t len;
|
size_t len;
|
||||||
if (lastdot == NULL && level > 0) {
|
if (lastdot == NULL && level > 0) {
|
||||||
|
@ -2174,19 +2165,9 @@ ensure_fromlist(PyObject *mod, PyObject *fromlist, char *buf, Py_ssize_t buflen,
|
||||||
}
|
}
|
||||||
return 0;
|
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)) {
|
if (!PyUnicode_Check(item)) {
|
||||||
PyErr_SetString(PyExc_TypeError,
|
PyErr_SetString(PyExc_TypeError,
|
||||||
"Item in ``from list'' not a unicode string");
|
"Item in ``from list'' not a string");
|
||||||
Py_DECREF(item);
|
Py_DECREF(item);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -2444,7 +2425,7 @@ PyImport_ReloadModule(PyObject *m)
|
||||||
done using whatever import hooks are installed in the current
|
done using whatever import hooks are installed in the current
|
||||||
environment, e.g. by "rexec".
|
environment, e.g. by "rexec".
|
||||||
A dummy list ["__doc__"] is passed as the 4th argument so that
|
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">. */
|
will return <module "gencache"> instead of <module "win32com">. */
|
||||||
|
|
||||||
PyObject *
|
PyObject *
|
||||||
|
|
Loading…
Reference in New Issue