summaryrefslogtreecommitdiffstats
path: root/Objects/methodobject.c
diff options
context:
space:
mode:
authorVictor Stinner <victor.stinner@gmail.com>2017-01-18 13:01:12 (GMT)
committerVictor Stinner <victor.stinner@gmail.com>2017-01-18 13:01:12 (GMT)
commit250e4b0063fab35770719b64d1e36209c4aa2596 (patch)
tree006880f6d8b2295f0aa7d4520a94ab9036a9baed /Objects/methodobject.c
parent7612f1e36a90029a5abf14b9063dbb800340eff7 (diff)
downloadcpython-250e4b0063fab35770719b64d1e36209c4aa2596.zip
cpython-250e4b0063fab35770719b64d1e36209c4aa2596.tar.gz
cpython-250e4b0063fab35770719b64d1e36209c4aa2596.tar.bz2
Fix _PyMethodDef_RawFastCallDict() argument parsing
Issue #29259: * Move also the !PyErr_Occurred() assertion to the top, similar to other functions. * Fix also comment/error messages: the function was renamed to _PyMethodDef_RawFastCallDict()
Diffstat (limited to 'Objects/methodobject.c')
-rw-r--r--Objects/methodobject.c30
1 files changed, 16 insertions, 14 deletions
diff --git a/Objects/methodobject.c b/Objects/methodobject.c
index 054cf53..19d2971 100644
--- a/Objects/methodobject.c
+++ b/Objects/methodobject.c
@@ -159,30 +159,31 @@ _PyMethodDef_RawFastCallDict(PyMethodDef *method, PyObject *self, PyObject **arg
PyObject *result;
int flags;
+ /* _PyMethodDef_RawFastCallDict() must not be called with an exception set,
+ because it may clear it (directly or indirectly) and so the
+ caller loses its exception */
+ assert(!PyErr_Occurred());
+
assert(method != NULL);
assert(nargs >= 0);
assert(nargs == 0 || args != NULL);
assert(kwargs == NULL || PyDict_Check(kwargs));
- /* _PyCFunction_FastCallDict() must not be called with an exception set,
- because it may clear it (directly or indirectly) and so the
- caller loses its exception */
- assert(!PyErr_Occurred());
-
meth = method->ml_meth;
flags = method->ml_flags & ~(METH_CLASS | METH_STATIC | METH_COEXIST);
switch (flags)
{
case METH_NOARGS:
- if (nargs != 0) {
- goto no_keyword_error;
- }
+ if (nargs != 0) {
+ PyErr_Format(PyExc_TypeError,
+ "%.200s() takes no arguments (%zd given)",
+ method->ml_name, nargs);
+ return NULL;
+ }
if (kwargs != NULL && PyDict_GET_SIZE(kwargs) != 0) {
- PyErr_Format(PyExc_TypeError, "%.200s() takes no keyword arguments",
- method->ml_name);
- return NULL;
+ goto no_keyword_error;
}
result = (*meth) (self, NULL);
@@ -249,7 +250,7 @@ _PyMethodDef_RawFastCallDict(PyMethodDef *method, PyObject *self, PyObject **arg
default:
PyErr_SetString(PyExc_SystemError,
- "Bad call flags in PyCFunction_Call. "
+ "Bad call flags in _PyMethodDef_RawFastCallDict. "
"METH_OLDARGS is no longer supported!");
return NULL;
}
@@ -258,8 +259,9 @@ _PyMethodDef_RawFastCallDict(PyMethodDef *method, PyObject *self, PyObject **arg
no_keyword_error:
PyErr_Format(PyExc_TypeError,
- "%.200s() takes no arguments (%zd given)",
- method->ml_name, nargs);
+ "%.200s() takes no keyword arguments",
+ method->ml_name, nargs);
+
return NULL;
}