Mercurial > cpython-lru_cache-weakref
diff Objects/codeobject.c @ 42802:01ee6311ba46
Ensure that code object names (co_name) are unicode.
Verify that they print properly too.
| author | Neal Norwitz <nnorwitz@gmail.com> |
|---|---|
| date | Fri, 24 Aug 2007 23:12:06 +0000 |
| parents | e70cdce0e8b2 |
| children | 19319e70fc3e |
line wrap: on
line diff
--- a/Objects/codeobject.c Fri Aug 24 22:53:58 2007 +0000 +++ b/Objects/codeobject.c Fri Aug 24 23:12:06 2007 +0000 @@ -65,6 +65,13 @@ PyErr_BadInternalCall(); return NULL; } + if (PyString_Check(name)) { + name = PyUnicode_FromString(PyString_AS_STRING(name)); + if (name == NULL) + return NULL; + } else { + Py_INCREF(name); + } intern_strings(names); intern_strings(varnames); intern_strings(freevars); @@ -106,6 +113,7 @@ co->co_lnotab = lnotab; co->co_zombieframe = NULL; } + Py_DECREF(name); return co; } @@ -288,17 +296,14 @@ { int lineno = -1; char *filename = "???"; - char *name = "???"; if (co->co_firstlineno != 0) lineno = co->co_firstlineno; if (co->co_filename && PyString_Check(co->co_filename)) filename = PyString_AS_STRING(co->co_filename); - if (co->co_name && PyString_Check(co->co_name)) - name = PyString_AS_STRING(co->co_name); return PyUnicode_FromFormat( - "<code object %.100s at %p, file \"%.300s\", line %d>", - name, co, filename, lineno); + "<code object %.100U at %p, file \"%.300s\", line %d>", + co->co_name, co, filename, lineno); } static PyObject *
