Mercurial > cpython-lru_cache-weakref
comparison Python/sysmodule.c @ 42013:cd125fe83051
Make identifiers str (not str8) objects throughout.
This affects the parser, various object implementations,
and all places that put identifiers into C string literals.
In testing, a number of crashes occurred as code would
fail when the recursion limit was reached (such as the
Unicode interning dictionary having key/value pairs where
key is not value). To solve these, I added an overflowed
flag, which allows for 50 more recursions after the
limit was reached and the exception was raised, and
a recursion_critical flag, which indicates that recursion
absolutely must be allowed, i.e. that a certain call
must not cause a stack overflow exception.
There are still some places where both str and str8 are
accepted as identifiers; these should eventually be
removed.
| author | Martin v. Löwis <martin@v.loewis.de> |
|---|---|
| date | Sun, 10 Jun 2007 09:51:05 +0000 |
| parents | c6a0b75dbec2 |
| children | 825041fc8e2c |
comparison
equal
deleted
inserted
replaced
| 42012:59c6f4cbb326 | 42013:cd125fe83051 |
|---|---|
| 278 "c_call", "c_exception", "c_return"}; | 278 "c_call", "c_exception", "c_return"}; |
| 279 PyObject *name; | 279 PyObject *name; |
| 280 int i; | 280 int i; |
| 281 for (i = 0; i < 7; ++i) { | 281 for (i = 0; i < 7; ++i) { |
| 282 if (whatstrings[i] == NULL) { | 282 if (whatstrings[i] == NULL) { |
| 283 name = PyString_InternFromString(whatnames[i]); | 283 name = PyUnicode_InternFromString(whatnames[i]); |
| 284 if (name == NULL) | 284 if (name == NULL) |
| 285 return -1; | 285 return -1; |
| 286 whatstrings[i] = name; | 286 whatstrings[i] = name; |
| 287 } | 287 } |
| 288 } | 288 } |
| 799 PyObject *list = PyList_New(0); | 799 PyObject *list = PyList_New(0); |
| 800 int i; | 800 int i; |
| 801 if (list == NULL) | 801 if (list == NULL) |
| 802 return NULL; | 802 return NULL; |
| 803 for (i = 0; PyImport_Inittab[i].name != NULL; i++) { | 803 for (i = 0; PyImport_Inittab[i].name != NULL; i++) { |
| 804 PyObject *name = PyString_FromString( | 804 PyObject *name = PyUnicode_FromString( |
| 805 PyImport_Inittab[i].name); | 805 PyImport_Inittab[i].name); |
| 806 if (name == NULL) | 806 if (name == NULL) |
| 807 break; | 807 break; |
| 808 PyList_Append(list, name); | 808 PyList_Append(list, name); |
| 809 Py_DECREF(name); | 809 Py_DECREF(name); |
