mirror of
https://github.com/python/cpython.git
synced 2025-10-09 16:34:44 +00:00
More on SF bug [#460020] bug or feature: unicode() and subclasses.
Repaired str(i) to return a genuine string when i is an instance of a str subclass. New PyString_CheckExact() macro.
This commit is contained in:
parent
8ff70a9606
commit
5a49ade70e
4 changed files with 10 additions and 3 deletions
|
@ -52,6 +52,7 @@ typedef struct {
|
|||
extern DL_IMPORT(PyTypeObject) PyString_Type;
|
||||
|
||||
#define PyString_Check(op) PyObject_TypeCheck(op, &PyString_Type)
|
||||
#define PyString_CheckExact(op) ((op)->ob_type == &PyString_Type)
|
||||
|
||||
extern DL_IMPORT(PyObject *) PyString_FromStringAndSize(const char *, int);
|
||||
extern DL_IMPORT(PyObject *) PyString_FromString(const char *);
|
||||
|
|
|
@ -1440,7 +1440,7 @@ def inherits():
|
|||
verify(u == s)
|
||||
s = madstring("12345")
|
||||
#XXX verify(str(s) == "12345")
|
||||
#XXX verify(str(s).__class__ is str)
|
||||
verify(str(s).__class__ is str)
|
||||
|
||||
class madunicode(unicode):
|
||||
_rev = None
|
||||
|
|
|
@ -250,10 +250,16 @@ PyObject_Str(PyObject *v)
|
|||
|
||||
if (v == NULL)
|
||||
return PyString_FromString("<NULL>");
|
||||
if (PyString_Check(v)) {
|
||||
if (PyString_CheckExact(v)) {
|
||||
Py_INCREF(v);
|
||||
return v;
|
||||
}
|
||||
if (PyString_Check(v)) {
|
||||
/* For a string subtype that's not a string, return a true
|
||||
string with the same string data. */
|
||||
PyStringObject *s = (PyStringObject *)v;
|
||||
return PyString_FromStringAndSize(s->ob_sval, s->ob_size);
|
||||
}
|
||||
if (v->ob_type->tp_str == NULL)
|
||||
return PyObject_Repr(v);
|
||||
|
||||
|
|
|
@ -2711,7 +2711,7 @@ str_subtype_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
|
|||
tmp = string_new(&PyString_Type, args, kwds);
|
||||
if (tmp == NULL)
|
||||
return NULL;
|
||||
assert(PyString_Check(tmp));
|
||||
assert(PyString_CheckExact(tmp));
|
||||
new = type->tp_alloc(type, n = PyString_GET_SIZE(tmp));
|
||||
if (new != NULL)
|
||||
memcpy(PyString_AS_STRING(new), PyString_AS_STRING(tmp), n+1);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue