Skip to content

Commit

Permalink
pythongh-101152: Implement PEP 699 (pythonGH-101193)
Browse files Browse the repository at this point in the history
Co-authored-by: Kumar Aditya <59607654+kumaraditya303@users.noreply.github.com>
Co-authored-by: Ken Jin <kenjin@python.org>
  • Loading branch information
3 people authored Jan 24, 2023
1 parent e244401 commit 7f95ec3
Show file tree
Hide file tree
Showing 4 changed files with 15 additions and 0 deletions.
5 changes: 5 additions & 0 deletions Doc/whatsnew/3.12.rst
Original file line number Diff line number Diff line change
Expand Up @@ -430,6 +430,11 @@ Deprecated
Before, the Python implementation emitted :exc:`FutureWarning`, and the C
implementation emitted nothing.

* In accordance with :pep:`699`, the ``ma_version_tag`` field in :c:type:`PyDictObject`
is deprecated for extension modules. Accessing this field will generate a compiler
warning at compile time. This field will be removed in Python 3.14.
(Contributed by Ramvikrams and Kumar Aditya in :gh:`101193`. PEP by Ken Jin.)


Pending Removal in Python 3.13
------------------------------
Expand Down
4 changes: 4 additions & 0 deletions Include/cpython/dictobject.h
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,11 @@ typedef struct {

/* Dictionary version: globally unique, value change each time
the dictionary is modified */
#ifdef Py_BUILD_CORE
uint64_t ma_version_tag;
#else
Py_DEPRECATED(3.12) uint64_t ma_version_tag;
#endif

PyDictKeysObject *ma_keys;

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
In accordance with :PEP:`699`, the ``ma_version_tag`` field in :c:type:`PyDictObject`
is deprecated for extension modules. Accessing this field will generate a compiler
warning at compile time. This field will be removed in Python 3.14.
3 changes: 3 additions & 0 deletions Modules/_testcapimodule.c
Original file line number Diff line number Diff line change
Expand Up @@ -2148,7 +2148,10 @@ dict_get_version(PyObject *self, PyObject *args)
if (!PyArg_ParseTuple(args, "O!", &PyDict_Type, &dict))
return NULL;

_Py_COMP_DIAG_PUSH
_Py_COMP_DIAG_IGNORE_DEPR_DECLS
version = dict->ma_version_tag;
_Py_COMP_DIAG_POP

static_assert(sizeof(unsigned long long) >= sizeof(version),
"version is larger than unsigned long long");
Expand Down

0 comments on commit 7f95ec3

Please sign in to comment.