gh-112075: use per-thread dict version pool (#118676) · python/cpython@ff6cbb2

Original file line numberDiff line numberDiff line change

@@ -1,7 +1,6 @@

11

#include "parts.h"

22

#include "util.h"

33
4-
54

static PyObject *

65

dict_containsstring(PyObject *self, PyObject *args)

76

{

@@ -182,6 +181,18 @@ dict_popstring_null(PyObject *self, PyObject *args)

182181

RETURN_INT(PyDict_PopString(dict, key, NULL));

183182

}

184183
184+

static PyObject *

185+

dict_version(PyObject *self, PyObject *dict)

186+

{

187+

if (!PyDict_Check(dict)) {

188+

PyErr_SetString(PyExc_TypeError, "expected dict");

189+

return NULL;

190+

}

191+

_Py_COMP_DIAG_PUSH

192+

_Py_COMP_DIAG_IGNORE_DEPR_DECLS

193+

return PyLong_FromUnsignedLongLong(((PyDictObject *)dict)->ma_version_tag);

194+

_Py_COMP_DIAG_POP

195+

}

185196
186197

static PyMethodDef test_methods[] = {

187198

{"dict_containsstring", dict_containsstring, METH_VARARGS},

@@ -193,6 +204,7 @@ static PyMethodDef test_methods[] = {

193204

{"dict_pop_null", dict_pop_null, METH_VARARGS},

194205

{"dict_popstring", dict_popstring, METH_VARARGS},

195206

{"dict_popstring_null", dict_popstring_null, METH_VARARGS},

207+

{"dict_version", dict_version, METH_O},

196208

{NULL},

197209

};

198210