Subclasses of string can no longer be interned. The semantics of

interning were not clear here -- a subclass could be mutable, for
example -- and had bugs.  Explicitly interning a subclass of string
via intern() will raise a TypeError.  Internal operations that attempt
to intern a string subclass will have no effect.

Added a few tests to test_builtin that includes the old buggy code and
verifies that calls like PyObject_SetAttr() don't fail.  Perhaps these
tests should have gone in test_string.
This commit is contained in:
Jeremy Hylton 2004-08-07 19:20:05 +00:00
parent cbd81556bb
commit 4c989ddc9c
4 changed files with 40 additions and 22 deletions

View file

@ -1035,6 +1035,11 @@ builtin_intern(PyObject *self, PyObject *args)
PyObject *s;
if (!PyArg_ParseTuple(args, "S:intern", &s))
return NULL;
if (!PyString_CheckExact(s)) {
PyErr_SetString(PyExc_TypeError,
"can't intern subclass of string");
return NULL;
}
Py_INCREF(s);
PyString_InternInPlace(&s);
return s;