Skip to content

[ctypes] Do we still need _use_broken_old_ctypes_structure_semantics_? #99284

Closed
@sobolevn

Description

@sobolevn

While working on #99283 I've noticed this piece of code:

/* 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!

if (_PyObject_LookupAttr(type,
&_Py_ID(_use_broken_old_ctypes_structure_semantics_), &tmp) < 0)

I've never seen this before, so I went and searched for this on the internet: https://cs.github.com/?scopeName=All+repos&scope=&q=_use_broken_old_ctypes_structure_semantics_

Looks like not a single GitHub project uses it.

Where is that used inside?

» ag _use_broken_old_ctypes_structure_semantics_
Tools/c-analyzer/cpython/globals-to-fix.tsv
761:Modules/_ctypes/stgdict.c   PyCStructUnionType_update_stgdict       PyId__use_broken_old_ctypes_structure_semantics_      -

Include/internal/pycore_global_strings.h
253:        STRUCT_FOR_ID(_use_broken_old_ctypes_structure_semantics_)

Include/internal/pycore_runtime_init_generated.h
762:                INIT_ID(_use_broken_old_ctypes_structure_semantics_), \
1879:    string = &_Py_ID(_use_broken_old_ctypes_structure_semantics_);
5734:    if (Py_REFCNT((PyObject *)&_Py_ID(_use_broken_old_ctypes_structure_semantics_)) < _PyObject_IMMORTAL_REFCNT) {
5735:        _PyObject_Dump((PyObject *)&_Py_ID(_use_broken_old_ctypes_structure_semantics_));

Modules/_ctypes/stgdict.c
383:                &_Py_ID(_use_broken_old_ctypes_structure_semantics_), &tmp) < 0)

Basically in only one place (and generate code).
No docs, no tests.
No issues: https://github.com/python/cpython/issues?q=is%3Aissue+is%3Aopen+use_broken_old_ctypes_structure_semantics

And it feels like a python2 era thing.
I think it is time to remove it.

PR is on its way, so we can discuss the changes in more details.
CC @pitrou as the original author.

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions