python / python/cpython

Argument Clinic: move converters defined in several files to libclinic

Offen
#156,261 0 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Dieses Issue hat noch niemand übernommen.

extension-modules topic-argument-clinic type-refactor
Vorherrschende Sprache
Python
Sterne
77.2k
Forks
35.9k
PR-Merge-Kennzahlen
PR-Kennzahlen ausstehend

Beschreibung

Several custom converters are defined in more than one C file:

  • pid_t — in posixmodule.c, _posixsubprocess.c and resource.c.
  • Py_off_t — in posixmodule.c and _ssl.c; the Py_off_t type and the converter function are duplicated as well, and _io has yet another copy of the type.
  • HANDLE — in _multiprocessing/multiprocessing.c, overlapped.c, msvcrtmodule.c, _testconsole.c and _winapi.c.
  • DWORD — in overlapped.c, winreg.c and _winapi.c.
  • BOOL — in overlapped.c and _winapi.c.

The copies are not always equivalent: two of the pid_t converters compare the result with -1 instead of (pid_t)-1, and DWORD in _winapi.c uses the format unit "k", which accepts negative values, while in other modules it rejects them.

The registry of converters is global, so the definition in the file which is processed first can be used in other files. The generated code therefore depends on the order of processing — removing the definition of HANDLE from one module silently changes the code generated for others.

Other converters are defined only in posixmodule.c, although the corresponding C functions are already shared, so other modules convert the argument in the "impl" function instead of declaring its type:

  • uid_t and gid_t_Py_Uid_Converter() and _Py_Gid_Converter() are declared in posixmodule.h and are called by hand in pwd.getpwuid(), grp.getgrgid() and _posixsubprocess.fork_exec().

There is no converter for time_t at all: time.gmtime(), time.localtime() and time.ctime() parse their argument with a hand-written helper, and _datetime calls _PyTime_ObjectToTime_t() directly.

I am going to move these converters to Tools/clinic/libclinic/converters.py.

Linked PRs
  • gh-156262
  • gh-156294

Beitragsleitfaden

Beitragsleitfaden öffnen

Erste Schritte

  1. Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
  3. Forke das Repository und arbeite in einem Branch.
  4. Öffne einen Pull Request, der die Issue-Nummer nennt.

Rechercherichtung

Beginne in Tools/clinic/libclinic/converters.py und untersuche anschließend die Converter-Definitionen und gemeinsamen Deklarationen in posixmodule.c, _posixsubprocess.c, resource.c, _ssl.c, _io und den in der Issue aufgeführten Windows-Modulen. Prüfe, wie Argument Clinic Module verarbeitet, und vergleiche den generierten Code; abgeschlossen ist die Arbeit, wenn die Converter zentralisiert sind, ohne ihre akzeptierten Werte oder ihr generiertes Verhalten zu ändern.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Bewertung

Tech-Stack
c, python
Bereich
build-system, tooling
Issue-Typ
Refactoring
Schwierigkeit
4/5
Geschätzter Aufwand
3-5 Tage
Aktivitätsstatus
Veraltet
Klarheit
Klar beschrieben
Anfängerfreundlichkeit
25/100

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.