From: Inada Naoki Date: Tue, 2 Jul 2019 11:32:43 +0000 (+0900) Subject: Stop using Argument Clinic for dict_pop (GH-13935) X-Git-Tag: v3.8.0b2~10 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=d4c664736e43284405100d98d516fa269a647461;p=python Stop using Argument Clinic for dict_pop (GH-13935) --- diff --git a/Objects/clinic/dictobject.c.h b/Objects/clinic/dictobject.c.h index b87244d873..8d54933308 100644 --- a/Objects/clinic/dictobject.c.h +++ b/Objects/clinic/dictobject.c.h @@ -116,42 +116,6 @@ exit: return return_value; } -PyDoc_STRVAR(dict_pop__doc__, -"pop($self, key, default=None, /)\n" -"--\n" -"\n" -"Remove specified key and return the corresponding value.\n" -"\n" -"If key is not found, default is returned if given, otherwise KeyError is raised"); - -#define DICT_POP_METHODDEF \ - {"pop", (PyCFunction)(void(*)(void))dict_pop, METH_FASTCALL, dict_pop__doc__}, - -static PyObject * -dict_pop_impl(PyDictObject *self, PyObject *key, PyObject *default_value); - -static PyObject * -dict_pop(PyDictObject *self, PyObject *const *args, Py_ssize_t nargs) -{ - PyObject *return_value = NULL; - PyObject *key; - PyObject *default_value = NULL; - - if (!_PyArg_CheckPositional("pop", nargs, 1, 2)) { - goto exit; - } - key = args[0]; - if (nargs < 2) { - goto skip_optional; - } - default_value = args[1]; -skip_optional: - return_value = dict_pop_impl(self, key, default_value); - -exit: - return return_value; -} - PyDoc_STRVAR(dict_popitem__doc__, "popitem($self, /)\n" "--\n" @@ -190,4 +154,4 @@ dict___reversed__(PyDictObject *self, PyObject *Py_UNUSED(ignored)) { return dict___reversed___impl(self); } -/*[clinic end generated code: output=0fd5cafc61a51d3c input=a9049054013a1b77]*/ +/*[clinic end generated code: output=676532dcc941d399 input=a9049054013a1b77]*/ diff --git a/Objects/dictobject.c b/Objects/dictobject.c index 0cc1443750..e417cd2119 100644 --- a/Objects/dictobject.c +++ b/Objects/dictobject.c @@ -2987,23 +2987,37 @@ dict_clear(PyDictObject *mp, PyObject *Py_UNUSED(ignored)) Py_RETURN_NONE; } -/*[clinic input] -dict.pop - - key: object - default: object = NULL - / +/* +We don't use Argument Clinic for dict.pop because it doesn't support +custom signature for now. +*/ +PyDoc_STRVAR(dict_pop__doc__, +"D.pop(k[,d]) -> v, remove specified key and return the corresponding value.\n\ +If key is not found, d is returned if given, otherwise KeyError is raised"); -Remove specified key and return the corresponding value. - -If key is not found, default is returned if given, otherwise KeyError is raised -[clinic start generated code]*/ +#define DICT_POP_METHODDEF \ + {"pop", (PyCFunction)(void(*)(void))dict_pop, METH_FASTCALL, dict_pop__doc__}, static PyObject * -dict_pop_impl(PyDictObject *self, PyObject *key, PyObject *default_value) -/*[clinic end generated code: output=3abb47b89f24c21c input=016f6a000e4e633b]*/ +dict_pop(PyDictObject *self, PyObject *const *args, Py_ssize_t nargs) { - return _PyDict_Pop((PyObject*)self, key, default_value); + PyObject *return_value = NULL; + PyObject *key; + PyObject *default_value = NULL; + + if (!_PyArg_CheckPositional("pop", nargs, 1, 2)) { + goto exit; + } + key = args[0]; + if (nargs < 2) { + goto skip_optional; + } + default_value = args[1]; +skip_optional: + return_value = _PyDict_Pop((PyObject*)self, key, default_value); + +exit: + return return_value; } /*[clinic input]