mirror of https://github.com/python/cpython
gh-112075: Adapt more dict methods to Argument Clinic (#114256)
* Move more dict objects to argument clinic * Improve doc strings * More doc string improvements * Update Objects/dictobject.c Co-authored-by: Erlend E. Aasland <erlend.aasland@protonmail.com> * Update Objects/dictobject.c Co-authored-by: Erlend E. Aasland <erlend.aasland@protonmail.com> * Update Objects/dictobject.c Co-authored-by: Erlend E. Aasland <erlend.aasland@protonmail.com> * Update Objects/dictobject.c Co-authored-by: Erlend E. Aasland <erlend.aasland@protonmail.com> * Update Objects/dictobject.c Co-authored-by: Erlend E. Aasland <erlend.aasland@protonmail.com> * Update Objects/dictobject.c Co-authored-by: Erlend E. Aasland <erlend.aasland@protonmail.com> * Update Objects/dictobject.c Co-authored-by: Erlend E. Aasland <erlend.aasland@protonmail.com> --------- Co-authored-by: Erlend E. Aasland <erlend.aasland@protonmail.com>
This commit is contained in:
parent
d22c066b80
commit
afe8f376c0
|
@ -38,6 +38,24 @@ exit:
|
|||
return return_value;
|
||||
}
|
||||
|
||||
PyDoc_STRVAR(dict_copy__doc__,
|
||||
"copy($self, /)\n"
|
||||
"--\n"
|
||||
"\n"
|
||||
"Return a shallow copy of the dict.");
|
||||
|
||||
#define DICT_COPY_METHODDEF \
|
||||
{"copy", (PyCFunction)dict_copy, METH_NOARGS, dict_copy__doc__},
|
||||
|
||||
static PyObject *
|
||||
dict_copy_impl(PyDictObject *self);
|
||||
|
||||
static PyObject *
|
||||
dict_copy(PyDictObject *self, PyObject *Py_UNUSED(ignored))
|
||||
{
|
||||
return dict_copy_impl(self);
|
||||
}
|
||||
|
||||
PyDoc_STRVAR(dict___contains____doc__,
|
||||
"__contains__($self, key, /)\n"
|
||||
"--\n"
|
||||
|
@ -118,6 +136,24 @@ exit:
|
|||
return return_value;
|
||||
}
|
||||
|
||||
PyDoc_STRVAR(dict_clear__doc__,
|
||||
"clear($self, /)\n"
|
||||
"--\n"
|
||||
"\n"
|
||||
"Remove all items from the dict.");
|
||||
|
||||
#define DICT_CLEAR_METHODDEF \
|
||||
{"clear", (PyCFunction)dict_clear, METH_NOARGS, dict_clear__doc__},
|
||||
|
||||
static PyObject *
|
||||
dict_clear_impl(PyDictObject *self);
|
||||
|
||||
static PyObject *
|
||||
dict_clear(PyDictObject *self, PyObject *Py_UNUSED(ignored))
|
||||
{
|
||||
return dict_clear_impl(self);
|
||||
}
|
||||
|
||||
PyDoc_STRVAR(dict_pop__doc__,
|
||||
"pop($self, key, default=<unrepresentable>, /)\n"
|
||||
"--\n"
|
||||
|
@ -176,6 +212,24 @@ dict_popitem(PyDictObject *self, PyObject *Py_UNUSED(ignored))
|
|||
return dict_popitem_impl(self);
|
||||
}
|
||||
|
||||
PyDoc_STRVAR(dict___sizeof____doc__,
|
||||
"__sizeof__($self, /)\n"
|
||||
"--\n"
|
||||
"\n"
|
||||
"Return the size of the dict in memory, in bytes.");
|
||||
|
||||
#define DICT___SIZEOF___METHODDEF \
|
||||
{"__sizeof__", (PyCFunction)dict___sizeof__, METH_NOARGS, dict___sizeof____doc__},
|
||||
|
||||
static PyObject *
|
||||
dict___sizeof___impl(PyDictObject *self);
|
||||
|
||||
static PyObject *
|
||||
dict___sizeof__(PyDictObject *self, PyObject *Py_UNUSED(ignored))
|
||||
{
|
||||
return dict___sizeof___impl(self);
|
||||
}
|
||||
|
||||
PyDoc_STRVAR(dict___reversed____doc__,
|
||||
"__reversed__($self, /)\n"
|
||||
"--\n"
|
||||
|
@ -193,4 +247,58 @@ dict___reversed__(PyDictObject *self, PyObject *Py_UNUSED(ignored))
|
|||
{
|
||||
return dict___reversed___impl(self);
|
||||
}
|
||||
/*[clinic end generated code: output=17c3c4cf9a9b95a7 input=a9049054013a1b77]*/
|
||||
|
||||
PyDoc_STRVAR(dict_keys__doc__,
|
||||
"keys($self, /)\n"
|
||||
"--\n"
|
||||
"\n"
|
||||
"Return a set-like object providing a view on the dict\'s keys.");
|
||||
|
||||
#define DICT_KEYS_METHODDEF \
|
||||
{"keys", (PyCFunction)dict_keys, METH_NOARGS, dict_keys__doc__},
|
||||
|
||||
static PyObject *
|
||||
dict_keys_impl(PyDictObject *self);
|
||||
|
||||
static PyObject *
|
||||
dict_keys(PyDictObject *self, PyObject *Py_UNUSED(ignored))
|
||||
{
|
||||
return dict_keys_impl(self);
|
||||
}
|
||||
|
||||
PyDoc_STRVAR(dict_items__doc__,
|
||||
"items($self, /)\n"
|
||||
"--\n"
|
||||
"\n"
|
||||
"Return a set-like object providing a view on the dict\'s items.");
|
||||
|
||||
#define DICT_ITEMS_METHODDEF \
|
||||
{"items", (PyCFunction)dict_items, METH_NOARGS, dict_items__doc__},
|
||||
|
||||
static PyObject *
|
||||
dict_items_impl(PyDictObject *self);
|
||||
|
||||
static PyObject *
|
||||
dict_items(PyDictObject *self, PyObject *Py_UNUSED(ignored))
|
||||
{
|
||||
return dict_items_impl(self);
|
||||
}
|
||||
|
||||
PyDoc_STRVAR(dict_values__doc__,
|
||||
"values($self, /)\n"
|
||||
"--\n"
|
||||
"\n"
|
||||
"Return an object providing a view on the dict\'s values.");
|
||||
|
||||
#define DICT_VALUES_METHODDEF \
|
||||
{"values", (PyCFunction)dict_values, METH_NOARGS, dict_values__doc__},
|
||||
|
||||
static PyObject *
|
||||
dict_values_impl(PyDictObject *self);
|
||||
|
||||
static PyObject *
|
||||
dict_values(PyDictObject *self, PyObject *Py_UNUSED(ignored))
|
||||
{
|
||||
return dict_values_impl(self);
|
||||
}
|
||||
/*[clinic end generated code: output=f3ac47dfbf341b23 input=a9049054013a1b77]*/
|
||||
|
|
|
@ -2641,9 +2641,14 @@ static PyMappingMethods dict_as_mapping = {
|
|||
dict_ass_sub, /*mp_ass_subscript*/
|
||||
};
|
||||
|
||||
static PyObject *
|
||||
dict_keys(PyDictObject *mp)
|
||||
PyObject *
|
||||
PyDict_Keys(PyObject *dict)
|
||||
{
|
||||
if (dict == NULL || !PyDict_Check(dict)) {
|
||||
PyErr_BadInternalCall();
|
||||
return NULL;
|
||||
}
|
||||
PyDictObject *mp = (PyDictObject *)dict;
|
||||
PyObject *v;
|
||||
Py_ssize_t n;
|
||||
|
||||
|
@ -2672,9 +2677,14 @@ dict_keys(PyDictObject *mp)
|
|||
return v;
|
||||
}
|
||||
|
||||
static PyObject *
|
||||
dict_values(PyDictObject *mp)
|
||||
PyObject *
|
||||
PyDict_Values(PyObject *dict)
|
||||
{
|
||||
if (dict == NULL || !PyDict_Check(dict)) {
|
||||
PyErr_BadInternalCall();
|
||||
return NULL;
|
||||
}
|
||||
PyDictObject *mp = (PyDictObject *)dict;
|
||||
PyObject *v;
|
||||
Py_ssize_t n;
|
||||
|
||||
|
@ -2703,9 +2713,14 @@ dict_values(PyDictObject *mp)
|
|||
return v;
|
||||
}
|
||||
|
||||
static PyObject *
|
||||
dict_items(PyDictObject *mp)
|
||||
PyObject *
|
||||
PyDict_Items(PyObject *dict)
|
||||
{
|
||||
if (dict == NULL || !PyDict_Check(dict)) {
|
||||
PyErr_BadInternalCall();
|
||||
return NULL;
|
||||
}
|
||||
PyDictObject *mp = (PyDictObject *)dict;
|
||||
PyObject *v;
|
||||
Py_ssize_t i, n;
|
||||
PyObject *item;
|
||||
|
@ -3108,10 +3123,17 @@ _PyDict_MergeEx(PyObject *a, PyObject *b, int override)
|
|||
return dict_merge(interp, a, b, override);
|
||||
}
|
||||
|
||||
/*[clinic input]
|
||||
dict.copy
|
||||
|
||||
Return a shallow copy of the dict.
|
||||
[clinic start generated code]*/
|
||||
|
||||
static PyObject *
|
||||
dict_copy(PyObject *mp, PyObject *Py_UNUSED(ignored))
|
||||
dict_copy_impl(PyDictObject *self)
|
||||
/*[clinic end generated code: output=ffb782cf970a5c39 input=73935f042b639de4]*/
|
||||
{
|
||||
return PyDict_Copy(mp);
|
||||
return PyDict_Copy((PyObject *)self);
|
||||
}
|
||||
|
||||
PyObject *
|
||||
|
@ -3217,36 +3239,6 @@ PyDict_Size(PyObject *mp)
|
|||
return ((PyDictObject *)mp)->ma_used;
|
||||
}
|
||||
|
||||
PyObject *
|
||||
PyDict_Keys(PyObject *mp)
|
||||
{
|
||||
if (mp == NULL || !PyDict_Check(mp)) {
|
||||
PyErr_BadInternalCall();
|
||||
return NULL;
|
||||
}
|
||||
return dict_keys((PyDictObject *)mp);
|
||||
}
|
||||
|
||||
PyObject *
|
||||
PyDict_Values(PyObject *mp)
|
||||
{
|
||||
if (mp == NULL || !PyDict_Check(mp)) {
|
||||
PyErr_BadInternalCall();
|
||||
return NULL;
|
||||
}
|
||||
return dict_values((PyDictObject *)mp);
|
||||
}
|
||||
|
||||
PyObject *
|
||||
PyDict_Items(PyObject *mp)
|
||||
{
|
||||
if (mp == NULL || !PyDict_Check(mp)) {
|
||||
PyErr_BadInternalCall();
|
||||
return NULL;
|
||||
}
|
||||
return dict_items((PyDictObject *)mp);
|
||||
}
|
||||
|
||||
/* Return 1 if dicts equal, 0 if not, -1 if error.
|
||||
* Gets out as soon as any difference is detected.
|
||||
* Uses only Py_EQ comparison.
|
||||
|
@ -3512,10 +3504,18 @@ dict_setdefault_impl(PyDictObject *self, PyObject *key,
|
|||
return Py_XNewRef(val);
|
||||
}
|
||||
|
||||
|
||||
/*[clinic input]
|
||||
dict.clear
|
||||
|
||||
Remove all items from the dict.
|
||||
[clinic start generated code]*/
|
||||
|
||||
static PyObject *
|
||||
dict_clear(PyObject *mp, PyObject *Py_UNUSED(ignored))
|
||||
dict_clear_impl(PyDictObject *self)
|
||||
/*[clinic end generated code: output=5139a830df00830a input=0bf729baba97a4c2]*/
|
||||
{
|
||||
PyDict_Clear(mp);
|
||||
PyDict_Clear((PyObject *)self);
|
||||
Py_RETURN_NONE;
|
||||
}
|
||||
|
||||
|
@ -3703,11 +3703,17 @@ _PyDict_KeysSize(PyDictKeysObject *keys)
|
|||
return size;
|
||||
}
|
||||
|
||||
/*[clinic input]
|
||||
dict.__sizeof__
|
||||
|
||||
Return the size of the dict in memory, in bytes.
|
||||
[clinic start generated code]*/
|
||||
|
||||
static PyObject *
|
||||
dict_sizeof(PyObject *self, PyObject *Py_UNUSED(ignored))
|
||||
dict___sizeof___impl(PyDictObject *self)
|
||||
/*[clinic end generated code: output=44279379b3824bda input=4fec4ddfc44a4d1a]*/
|
||||
{
|
||||
PyDictObject *mp = (PyDictObject *)self;
|
||||
return PyLong_FromSsize_t(_PyDict_SizeOf(mp));
|
||||
return PyLong_FromSsize_t(_PyDict_SizeOf(self));
|
||||
}
|
||||
|
||||
static PyObject *
|
||||
|
@ -3739,56 +3745,31 @@ dict_ior(PyObject *self, PyObject *other)
|
|||
PyDoc_STRVAR(getitem__doc__,
|
||||
"__getitem__($self, key, /)\n--\n\nReturn self[key].");
|
||||
|
||||
PyDoc_STRVAR(sizeof__doc__,
|
||||
"D.__sizeof__() -> size of D in memory, in bytes");
|
||||
|
||||
PyDoc_STRVAR(update__doc__,
|
||||
"D.update([E, ]**F) -> None. Update D from dict/iterable E and F.\n\
|
||||
If E is present and has a .keys() method, then does: for k in E: D[k] = E[k]\n\
|
||||
If E is present and lacks a .keys() method, then does: for k, v in E: D[k] = v\n\
|
||||
In either case, this is followed by: for k in F: D[k] = F[k]");
|
||||
|
||||
PyDoc_STRVAR(clear__doc__,
|
||||
"D.clear() -> None. Remove all items from D.");
|
||||
|
||||
PyDoc_STRVAR(copy__doc__,
|
||||
"D.copy() -> a shallow copy of D");
|
||||
|
||||
/* Forward */
|
||||
static PyObject *dictkeys_new(PyObject *, PyObject *);
|
||||
static PyObject *dictitems_new(PyObject *, PyObject *);
|
||||
static PyObject *dictvalues_new(PyObject *, PyObject *);
|
||||
|
||||
PyDoc_STRVAR(keys__doc__,
|
||||
"D.keys() -> a set-like object providing a view on D's keys");
|
||||
PyDoc_STRVAR(items__doc__,
|
||||
"D.items() -> a set-like object providing a view on D's items");
|
||||
PyDoc_STRVAR(values__doc__,
|
||||
"D.values() -> an object providing a view on D's values");
|
||||
|
||||
static PyMethodDef mapp_methods[] = {
|
||||
DICT___CONTAINS___METHODDEF
|
||||
{"__getitem__", dict_subscript, METH_O | METH_COEXIST,
|
||||
getitem__doc__},
|
||||
{"__sizeof__", dict_sizeof, METH_NOARGS,
|
||||
sizeof__doc__},
|
||||
DICT___SIZEOF___METHODDEF
|
||||
DICT_GET_METHODDEF
|
||||
DICT_SETDEFAULT_METHODDEF
|
||||
DICT_POP_METHODDEF
|
||||
DICT_POPITEM_METHODDEF
|
||||
{"keys", dictkeys_new, METH_NOARGS,
|
||||
keys__doc__},
|
||||
{"items", dictitems_new, METH_NOARGS,
|
||||
items__doc__},
|
||||
{"values", dictvalues_new, METH_NOARGS,
|
||||
values__doc__},
|
||||
DICT_KEYS_METHODDEF
|
||||
DICT_ITEMS_METHODDEF
|
||||
DICT_VALUES_METHODDEF
|
||||
{"update", _PyCFunction_CAST(dict_update), METH_VARARGS | METH_KEYWORDS,
|
||||
update__doc__},
|
||||
DICT_FROMKEYS_METHODDEF
|
||||
{"clear", dict_clear, METH_NOARGS,
|
||||
clear__doc__},
|
||||
{"copy", dict_copy, METH_NOARGS,
|
||||
copy__doc__},
|
||||
DICT_CLEAR_METHODDEF
|
||||
DICT_COPY_METHODDEF
|
||||
DICT___REVERSED___METHODDEF
|
||||
{"__class_getitem__", Py_GenericAlias, METH_O|METH_CLASS, PyDoc_STR("See PEP 585")},
|
||||
{NULL, NULL} /* sentinel */
|
||||
|
@ -5263,10 +5244,17 @@ PyTypeObject PyDictKeys_Type = {
|
|||
.tp_getset = dictview_getset,
|
||||
};
|
||||
|
||||
/*[clinic input]
|
||||
dict.keys
|
||||
|
||||
Return a set-like object providing a view on the dict's keys.
|
||||
[clinic start generated code]*/
|
||||
|
||||
static PyObject *
|
||||
dictkeys_new(PyObject *dict, PyObject *Py_UNUSED(ignored))
|
||||
dict_keys_impl(PyDictObject *self)
|
||||
/*[clinic end generated code: output=aac2830c62990358 input=42f48a7a771212a7]*/
|
||||
{
|
||||
return _PyDictView_New(dict, &PyDictKeys_Type);
|
||||
return _PyDictView_New((PyObject *)self, &PyDictKeys_Type);
|
||||
}
|
||||
|
||||
static PyObject *
|
||||
|
@ -5368,10 +5356,17 @@ PyTypeObject PyDictItems_Type = {
|
|||
.tp_getset = dictview_getset,
|
||||
};
|
||||
|
||||
/*[clinic input]
|
||||
dict.items
|
||||
|
||||
Return a set-like object providing a view on the dict's items.
|
||||
[clinic start generated code]*/
|
||||
|
||||
static PyObject *
|
||||
dictitems_new(PyObject *dict, PyObject *Py_UNUSED(ignored))
|
||||
dict_items_impl(PyDictObject *self)
|
||||
/*[clinic end generated code: output=88c7db7150c7909a input=87c822872eb71f5a]*/
|
||||
{
|
||||
return _PyDictView_New(dict, &PyDictItems_Type);
|
||||
return _PyDictView_New((PyObject *)self, &PyDictItems_Type);
|
||||
}
|
||||
|
||||
static PyObject *
|
||||
|
@ -5451,10 +5446,17 @@ PyTypeObject PyDictValues_Type = {
|
|||
.tp_getset = dictview_getset,
|
||||
};
|
||||
|
||||
/*[clinic input]
|
||||
dict.values
|
||||
|
||||
Return an object providing a view on the dict's values.
|
||||
[clinic start generated code]*/
|
||||
|
||||
static PyObject *
|
||||
dictvalues_new(PyObject *dict, PyObject *Py_UNUSED(ignored))
|
||||
dict_values_impl(PyDictObject *self)
|
||||
/*[clinic end generated code: output=ce9f2e9e8a959dd4 input=b46944f85493b230]*/
|
||||
{
|
||||
return _PyDictView_New(dict, &PyDictValues_Type);
|
||||
return _PyDictView_New((PyObject *)self, &PyDictValues_Type);
|
||||
}
|
||||
|
||||
static PyObject *
|
||||
|
|
Loading…
Reference in New Issue