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 *);
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
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);
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);