From c4c6922a084b6dc1e29775a7c06145ff0199d7f0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Felf=C3=B6ldy=20Tibor?= Date: Sat, 25 Jan 2025 18:35:03 +0100 Subject: [PATCH] Add namedict.keys() --- src/public/py_mappingproxy.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/public/py_mappingproxy.c b/src/public/py_mappingproxy.c index 85d9f2c1..6c498f46 100644 --- a/src/public/py_mappingproxy.c +++ b/src/public/py_mappingproxy.c @@ -63,6 +63,19 @@ static bool namedict_items(int argc, py_Ref argv) { return true; } +static bool namedict_keys(int argc, py_Ref argv) { + PY_CHECK_ARGC(1); + py_Ref object = py_getslot(argv, 0); + NameDict* dict = PyObject__dict(object->_obj); + py_newtuple(py_retval(), dict->length); + for (int i = 0; i < dict->length; i++) { + py_Ref key_ref = py_tuple_getitem(py_retval(), i); + NameDict_KV* kv = c11__at(NameDict_KV, dict, i); + py_newstr(key_ref, py_name2str(kv->key)); + } + return true; +} + static bool namedict_clear(int argc, py_Ref argv) { PY_CHECK_ARGC(1); py_Ref object = py_getslot(argv, 0); @@ -81,6 +94,7 @@ py_Type pk_namedict__register() { py_bindmagic(type, __contains__, namedict__contains__); py_newnone(py_tpgetmagic(type, __hash__)); py_bindmethod(type, "items", namedict_items); + py_bindmethod(type, "keys", namedict_keys); py_bindmethod(type, "clear", namedict_clear); return type; }