This commit is contained in:
Georg Brandl 2007-08-30 18:29:48 +00:00
parent 47cc2a00a1
commit f4780d03d5

View file

@ -1561,28 +1561,16 @@ static PyGetSetDef subtype_getsets_weakref_only[] = {
static int
valid_identifier(PyObject *s)
{
Py_UNICODE *p;
Py_ssize_t i, n;
if (!PyUnicode_Check(s)) {
PyErr_Format(PyExc_TypeError,
"__slots__ items must be strings, not '%.200s'",
Py_Type(s)->tp_name);
return 0;
}
p = PyUnicode_AS_UNICODE(s);
n = PyUnicode_GET_SIZE(s);
/* We must reject an empty name. As a hack, we bump the
length to 1 so that the loop will balk on the trailing \0. */
if (n == 0)
n = 1;
for (i = 0; i < n; i++, p++) {
if (*p > 127 ||
(!(i == 0 ? isalpha(*p) : isalnum(*p)) && *p != '_')) {
PyErr_SetString(PyExc_TypeError,
"__slots__ must be identifiers");
return 0;
}
if (!PyUnicode_IsIdentifier(s)) {
PyErr_SetString(PyExc_TypeError,
"__slots__ must be identifiers");
return 0;
}
return 1;
}