# HG changeset patch # User Ryan Gonzalez Make failed calls to methods show the fully qualified name --- Python/ceval.c | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/Python/ceval.c b/Python/ceval.c index 2df94cf..cc5ef80 100644 --- a/Python/ceval.c +++ b/Python/ceval.c @@ -3694,7 +3694,8 @@ exit_eval_frame: } static void -format_missing(const char *kind, PyCodeObject *co, PyObject *names) +format_missing(const char *kind, PyCodeObject *co, PyObject *names, + PyObject *qualname) { int err; Py_ssize_t len = PyList_GET_SIZE(names); @@ -3747,7 +3748,7 @@ format_missing(const char *kind, PyCodeObject *co, PyObject *names) return; PyErr_Format(PyExc_TypeError, "%U() missing %i required %s argument%s: %U", - co->co_name, + qualname, len, kind, len == 1 ? "" : "s", @@ -3757,7 +3758,7 @@ format_missing(const char *kind, PyCodeObject *co, PyObject *names) static void missing_arguments(PyCodeObject *co, Py_ssize_t missing, Py_ssize_t defcount, - PyObject **fastlocals) + PyObject **fastlocals, PyObject *qualname) { Py_ssize_t i, j = 0; Py_ssize_t start, end; @@ -3789,13 +3790,13 @@ missing_arguments(PyCodeObject *co, Py_ssize_t missing, Py_ssize_t defcount, } } assert(j == missing); - format_missing(kind, co, missing_names); + format_missing(kind, co, missing_names, qualname); Py_DECREF(missing_names); } static void too_many_positional(PyCodeObject *co, Py_ssize_t given, Py_ssize_t defcount, - PyObject **fastlocals) + PyObject **fastlocals, PyObject *qualname) { int plural; Py_ssize_t kwonly_given = 0; @@ -3839,7 +3840,7 @@ too_many_positional(PyCodeObject *co, Py_ssize_t given, Py_ssize_t defcount, } PyErr_Format(PyExc_TypeError, "%U() takes %U positional argument%s but %zd%U %s given", - co->co_name, + qualname, sig, plural ? "s" : "", given, @@ -3941,7 +3942,7 @@ _PyEval_EvalCodeWithName(PyObject *_co, PyObject *globals, PyObject *locals, if (keyword == NULL || !PyUnicode_Check(keyword)) { PyErr_Format(PyExc_TypeError, "%U() keywords must be strings", - co->co_name); + qualname); goto fail; } @@ -3970,7 +3971,7 @@ _PyEval_EvalCodeWithName(PyObject *_co, PyObject *globals, PyObject *locals, if (j >= total_args && kwdict == NULL) { PyErr_Format(PyExc_TypeError, "%U() got an unexpected keyword argument '%S'", - co->co_name, keyword); + qualname, keyword); goto fail; } @@ -3983,7 +3984,7 @@ _PyEval_EvalCodeWithName(PyObject *_co, PyObject *globals, PyObject *locals, if (GETLOCAL(j) != NULL) { PyErr_Format(PyExc_TypeError, "%U() got multiple values for argument '%S'", - co->co_name, keyword); + qualname, keyword); goto fail; } Py_INCREF(value); @@ -3992,7 +3993,7 @@ _PyEval_EvalCodeWithName(PyObject *_co, PyObject *globals, PyObject *locals, /* Check the number of positional arguments */ if (argcount > co->co_argcount && !(co->co_flags & CO_VARARGS)) { - too_many_positional(co, argcount, defcount, fastlocals); + too_many_positional(co, argcount, defcount, fastlocals, qualname); goto fail; } @@ -4006,7 +4007,7 @@ _PyEval_EvalCodeWithName(PyObject *_co, PyObject *globals, PyObject *locals, } } if (missing) { - missing_arguments(co, missing, defcount, fastlocals); + missing_arguments(co, missing, defcount, fastlocals, qualname); goto fail; } if (n > m) @@ -4041,7 +4042,7 @@ _PyEval_EvalCodeWithName(PyObject *_co, PyObject *globals, PyObject *locals, missing++; } if (missing) { - missing_arguments(co, missing, -1, fastlocals); + missing_arguments(co, missing, -1, fastlocals, qualname); goto fail; } } -- 2.2.0.rc2