Mercurial > cpython-lru_cache-weakref
comparison Python/pythonrun.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 | 15b810e21fe9 |
| children | 825041fc8e2c |
comparison
equal
deleted
inserted
replaced
| 42012:59c6f4cbb326 | 42013:cd125fe83051 |
|---|---|
| 1130 PyErr_Display(PyObject *exception, PyObject *value, PyObject *tb) | 1130 PyErr_Display(PyObject *exception, PyObject *value, PyObject *tb) |
| 1131 { | 1131 { |
| 1132 int err = 0; | 1132 int err = 0; |
| 1133 PyObject *f = PySys_GetObject("stderr"); | 1133 PyObject *f = PySys_GetObject("stderr"); |
| 1134 Py_INCREF(value); | 1134 Py_INCREF(value); |
| 1135 if (f == NULL) | |
| 1136 _PyObject_Dump(value); | |
| 1135 if (f == NULL) | 1137 if (f == NULL) |
| 1136 fprintf(stderr, "lost sys.stderr\n"); | 1138 fprintf(stderr, "lost sys.stderr\n"); |
| 1137 else { | 1139 else { |
| 1138 fflush(stdout); | 1140 fflush(stdout); |
| 1139 if (tb && tb != Py_None) | 1141 if (tb && tb != Py_None) |
