]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
gh-99284: [ctypes] remove `_use_broken_old_ctypes_structure_semantics_` (GH-99285)
authorNikita Sobolev <mail@sobolevn.me>
Sat, 19 Nov 2022 06:25:32 +0000 (09:25 +0300)
committerGitHub <noreply@github.com>
Sat, 19 Nov 2022 06:25:32 +0000 (22:25 -0800)
It was untested and undocumented. No code has been found in the wild that ever used it.

Doc/whatsnew/3.12.rst
Include/internal/pycore_global_objects_fini_generated.h
Include/internal/pycore_global_strings.h
Include/internal/pycore_runtime_init_generated.h
Include/internal/pycore_unicodeobject_generated.h
Misc/NEWS.d/next/Library/2022-11-09-12-36-12.gh-issue-99284.9p4J2l.rst [new file with mode: 0644]
Modules/_ctypes/stgdict.c

index bb08e4455ee1785d1c675d56bcb606a5033c33d5..f8786c15f6f47fd4f72fe6761ea83477a6202c48 100644 (file)
@@ -873,3 +873,7 @@ Removed
 * Remove the ``PyUnicode_InternImmortal()`` function and the
   ``SSTATE_INTERNED_IMMORTAL`` macro.
   (Contributed by Victor Stinner in :gh:`85858`.)
+
+* Remove ``_use_broken_old_ctypes_structure_semantics_`` flag
+  from :mod:`ctypes` module.
+  (Contributed by Nikita Sobolev in :gh:`99285`.)
index 5fd08f281f55d0cc700080f9cbdeb709fce77541..381f166ca5829a8db710dadaa2004a9b9a251542 100644 (file)
@@ -765,7 +765,6 @@ _PyStaticObjects_CheckRefcnt(PyInterpreterState *interp) {
     _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(_swappedbytes_));
     _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(_type_));
     _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(_uninitialized_submodules));
-    _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(_use_broken_old_ctypes_structure_semantics_));
     _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(_warn_unawaited_coroutine));
     _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(_xoptions));
     _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(a));
index 5bfd4be26c4b64176ef35e5d9c431f4adcc60c0e..b2b0dc6c51e9573d9b5e8f27d3359dac190a7289 100644 (file)
@@ -251,7 +251,6 @@ struct _Py_global_strings {
         STRUCT_FOR_ID(_swappedbytes_)
         STRUCT_FOR_ID(_type_)
         STRUCT_FOR_ID(_uninitialized_submodules)
-        STRUCT_FOR_ID(_use_broken_old_ctypes_structure_semantics_)
         STRUCT_FOR_ID(_warn_unawaited_coroutine)
         STRUCT_FOR_ID(_xoptions)
         STRUCT_FOR_ID(a)
index 7228cb550d9d80e71199351b81233740ba59fe67..859e676249089ae7800b784559ed847e3c3fa131 100644 (file)
@@ -757,7 +757,6 @@ extern "C" {
     INIT_ID(_swappedbytes_), \
     INIT_ID(_type_), \
     INIT_ID(_uninitialized_submodules), \
-    INIT_ID(_use_broken_old_ctypes_structure_semantics_), \
     INIT_ID(_warn_unawaited_coroutine), \
     INIT_ID(_xoptions), \
     INIT_ID(a), \
index 208a1e12572b8478015ccef494e74c8896dac913..abff03ffe27bcc2201347d2628fcaa695f90569e 100644 (file)
@@ -408,8 +408,6 @@ _PyUnicode_InitStaticStrings(void) {
     PyUnicode_InternInPlace(&string);
     string = &_Py_ID(_uninitialized_submodules);
     PyUnicode_InternInPlace(&string);
-    string = &_Py_ID(_use_broken_old_ctypes_structure_semantics_);
-    PyUnicode_InternInPlace(&string);
     string = &_Py_ID(_warn_unawaited_coroutine);
     PyUnicode_InternInPlace(&string);
     string = &_Py_ID(_xoptions);
diff --git a/Misc/NEWS.d/next/Library/2022-11-09-12-36-12.gh-issue-99284.9p4J2l.rst b/Misc/NEWS.d/next/Library/2022-11-09-12-36-12.gh-issue-99284.9p4J2l.rst
new file mode 100644 (file)
index 0000000..48576bd
--- /dev/null
@@ -0,0 +1,2 @@
+Remove ``_use_broken_old_ctypes_structure_semantics_``
+old untested and undocumented hack from :mod:`ctypes`.
index 9f031b0f4b0feed845fd17bd8fdd05e0bebb2bd7..099331ca8bdb9c9e84718b6c8529572ca382d43a 100644 (file)
@@ -356,14 +356,6 @@ PyCStructUnionType_update_stgdict(PyObject *type, PyObject *fields, int isStruct
     int big_endian;
     int arrays_seen = 0;
 
-    /* HACK Alert: I cannot be bothered to fix ctypes.com, so there has to
-       be a way to use the old, broken semantics: _fields_ are not extended
-       but replaced in subclasses.
-
-       XXX Remove this in ctypes 1.0!
-    */
-    int use_broken_old_ctypes_semantics;
-
     if (fields == NULL)
         return 0;
 
@@ -378,19 +370,6 @@ PyCStructUnionType_update_stgdict(PyObject *type, PyObject *fields, int isStruct
         big_endian = PY_BIG_ENDIAN;
     }
 
-    if (_PyObject_LookupAttr(type,
-                &_Py_ID(_use_broken_old_ctypes_structure_semantics_), &tmp) < 0)
-    {
-        return -1;
-    }
-    if (tmp) {
-        Py_DECREF(tmp);
-        use_broken_old_ctypes_semantics = 1;
-    }
-    else {
-        use_broken_old_ctypes_semantics = 0;
-    }
-
     if (_PyObject_LookupAttr(type, &_Py_ID(_pack_), &tmp) < 0) {
         return -1;
     }
@@ -454,7 +433,7 @@ PyCStructUnionType_update_stgdict(PyObject *type, PyObject *fields, int isStruct
     if (!isStruct) {
         stgdict->flags |= TYPEFLAG_HASUNION;
     }
-    if (basedict && !use_broken_old_ctypes_semantics) {
+    if (basedict) {
         size = offset = basedict->size;
         align = basedict->align;
         union_size = 0;