https://github.com/python/cpython/commit/afa0badcc587ea7500e2b4dd2ea269f8bbda5fb2
commit: afa0badcc587ea7500e2b4dd2ea269f8bbda5fb2
branch: main
author: da-woods <[email protected]>
committer: vstinner <[email protected]>
date: 2025-11-19T11:38:10Z
summary:

gh-141726: Add PyDict_SetDefaultRef() to the Stable ABI (#141727)

Co-authored-by: Stan Ulbrych <[email protected]>

files:
A Misc/NEWS.d/next/C_API/2025-11-18-18-36-15.gh-issue-141726.ILrhyK.rst
M Doc/data/stable_abi.dat
M Include/cpython/dictobject.h
M Include/dictobject.h
M Lib/test/test_stable_abi_ctypes.py
M Misc/stable_abi.toml
M PC/python3dll.c

diff --git a/Doc/data/stable_abi.dat b/Doc/data/stable_abi.dat
index 5cbf3771950fc0..95e032655cf0cc 100644
--- a/Doc/data/stable_abi.dat
+++ b/Doc/data/stable_abi.dat
@@ -160,6 +160,7 @@ func,PyDict_Merge,3.2,,
 func,PyDict_MergeFromSeq2,3.2,,
 func,PyDict_New,3.2,,
 func,PyDict_Next,3.2,,
+func,PyDict_SetDefaultRef,3.15,,
 func,PyDict_SetItem,3.2,,
 func,PyDict_SetItemString,3.2,,
 func,PyDict_Size,3.2,,
diff --git a/Include/cpython/dictobject.h b/Include/cpython/dictobject.h
index df9ec7050fca1a..5f2f7b6d4f56bd 100644
--- a/Include/cpython/dictobject.h
+++ b/Include/cpython/dictobject.h
@@ -39,16 +39,6 @@ Py_DEPRECATED(3.14) PyAPI_FUNC(PyObject *) 
_PyDict_GetItemStringWithError(PyObje
 PyAPI_FUNC(PyObject *) PyDict_SetDefault(
     PyObject *mp, PyObject *key, PyObject *defaultobj);
 
-// Inserts `key` with a value `default_value`, if `key` is not already present
-// in the dictionary.  If `result` is not NULL, then the value associated
-// with `key` is returned in `*result` (either the existing value, or the now
-// inserted `default_value`).
-// Returns:
-//   -1 on error
-//    0 if `key` was not present and `default_value` was inserted
-//    1 if `key` was present and `default_value` was not inserted
-PyAPI_FUNC(int) PyDict_SetDefaultRef(PyObject *mp, PyObject *key, PyObject 
*default_value, PyObject **result);
-
 /* Get the number of items of a dictionary. */
 static inline Py_ssize_t PyDict_GET_SIZE(PyObject *op) {
     PyDictObject *mp;
diff --git a/Include/dictobject.h b/Include/dictobject.h
index 1bbeec1ab699e7..0384e3131dcdb5 100644
--- a/Include/dictobject.h
+++ b/Include/dictobject.h
@@ -68,6 +68,18 @@ PyAPI_FUNC(int) PyDict_GetItemRef(PyObject *mp, PyObject 
*key, PyObject **result
 PyAPI_FUNC(int) PyDict_GetItemStringRef(PyObject *mp, const char *key, 
PyObject **result);
 #endif
 
+#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x030F0000
+// Inserts `key` with a value `default_value`, if `key` is not already present
+// in the dictionary.  If `result` is not NULL, then the value associated
+// with `key` is returned in `*result` (either the existing value, or the now
+// inserted `default_value`).
+// Returns:
+//   -1 on error
+//    0 if `key` was not present and `default_value` was inserted
+//    1 if `key` was present and `default_value` was not inserted
+PyAPI_FUNC(int) PyDict_SetDefaultRef(PyObject *mp, PyObject *key, PyObject 
*default_value, PyObject **result);
+#endif
+
 #if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x030A0000
 PyAPI_FUNC(PyObject *) PyObject_GenericGetDict(PyObject *, void *);
 #endif
diff --git a/Lib/test/test_stable_abi_ctypes.py 
b/Lib/test/test_stable_abi_ctypes.py
index 7167646ecc6734..bc834f5a6816f3 100644
--- a/Lib/test/test_stable_abi_ctypes.py
+++ b/Lib/test/test_stable_abi_ctypes.py
@@ -165,6 +165,7 @@ def test_windows_feature_macros(self):
     "PyDict_MergeFromSeq2",
     "PyDict_New",
     "PyDict_Next",
+    "PyDict_SetDefaultRef",
     "PyDict_SetItem",
     "PyDict_SetItemString",
     "PyDict_Size",
diff --git 
a/Misc/NEWS.d/next/C_API/2025-11-18-18-36-15.gh-issue-141726.ILrhyK.rst 
b/Misc/NEWS.d/next/C_API/2025-11-18-18-36-15.gh-issue-141726.ILrhyK.rst
new file mode 100644
index 00000000000000..3fdad5c6b3e8f4
--- /dev/null
+++ b/Misc/NEWS.d/next/C_API/2025-11-18-18-36-15.gh-issue-141726.ILrhyK.rst
@@ -0,0 +1 @@
+Add :c:func:`PyDict_SetDefaultRef` to the Stable ABI.
diff --git a/Misc/stable_abi.toml b/Misc/stable_abi.toml
index 7ee6cf1dae5a33..5c503f81d3299a 100644
--- a/Misc/stable_abi.toml
+++ b/Misc/stable_abi.toml
@@ -2639,3 +2639,5 @@
     added = '3.15'
 [const.Py_mod_token]
     added = '3.15'
+[function.PyDict_SetDefaultRef]
+    added = '3.15'
diff --git a/PC/python3dll.c b/PC/python3dll.c
index 99e0f05fe03209..35db1a660a762f 100755
--- a/PC/python3dll.c
+++ b/PC/python3dll.c
@@ -191,6 +191,7 @@ EXPORT_FUNC(PyDict_Merge)
 EXPORT_FUNC(PyDict_MergeFromSeq2)
 EXPORT_FUNC(PyDict_New)
 EXPORT_FUNC(PyDict_Next)
+EXPORT_FUNC(PyDict_SetDefaultRef)
 EXPORT_FUNC(PyDict_SetItem)
 EXPORT_FUNC(PyDict_SetItemString)
 EXPORT_FUNC(PyDict_Size)

_______________________________________________
Python-checkins mailing list -- [email protected]
To unsubscribe send an email to [email protected]
https://mail.python.org/mailman3//lists/python-checkins.python.org
Member address: [email protected]

Reply via email to