diff options
-rw-r--r-- | Objects/codeobject.c | 15 | ||||
-rw-r--r-- | Python/compile.c | 2 |
2 files changed, 11 insertions, 6 deletions
diff --git a/Objects/codeobject.c b/Objects/codeobject.c index 0a7c141..7bd292a 100644 --- a/Objects/codeobject.c +++ b/Objects/codeobject.c @@ -65,6 +65,13 @@ PyCode_New(int argcount, int kwonlyargcount, 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 @@ PyCode_New(int argcount, int kwonlyargcount, co->co_lnotab = lnotab; co->co_zombieframe = NULL; } + Py_DECREF(name); return co; } @@ -288,17 +296,14 @@ code_repr(PyCodeObject *co) { 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 * diff --git a/Python/compile.c b/Python/compile.c index 8ae4036..d2bfe86 100644 --- a/Python/compile.c +++ b/Python/compile.c @@ -2991,7 +2991,7 @@ compiler_dictcomp(struct compiler *c, expr_ty e) { static identifier name; if (!name) { - name = PyString_FromString("<dictcomp>"); + name = PyUnicode_FromString("<dictcomp>"); if (!name) return 0; } |