Fix #1753395.
authorGeorg Brandl <georg@python.org>
Thu, 30 Aug 2007 18:29:48 +0000 (18:29 +0000)
committerGeorg Brandl <georg@python.org>
Thu, 30 Aug 2007 18:29:48 +0000 (18:29 +0000)
Objects/typeobject.c

index 9bd920203ab32095b48ae4c4e57b60dbab61cae2..0cc63fc2b5c04dd57a8af80dac8f3a6e316e13d9 100644 (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;
 }