Argument Clinic: move converters defined in several files to libclinic

Aperta
#156,261 0 commenti 0 reazioni 0 assegnatari Vedi su GitHub

Nessuno ha ancora preso questa issue.

Valutazione

Difficoltà
4/5
Tempo stimato
3-5 giorni
Idoneità per principianti
25/100
Tipo di issue
Refactoring
Chiarezza
Specificata chiaramente
Stato di attività
Ferma
Stack tecnologico
c, python

Direzione di ricerca

Inizia da Tools/clinic/libclinic/converters.py, quindi esamina le definizioni dei converter e le dichiarazioni condivise in posixmodule.c, _posixsubprocess.c, resource.c, _ssl.c, _io e nei moduli Windows elencati nella issue. Verifica come Argument Clinic elabora i moduli e confronta il codice generato; il lavoro è completato quando i converter sono centralizzati senza modificare i valori accettati o il comportamento generato.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

extension-modules topic-argument-clinic type-refactor

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
Lingua principale
Python
Stelle
77.2k
Fork
36k
Merge medio
1g 9h
PR unite (30g)
558

Guida per i contributori

Apri la guida per i contributori

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di python/cpython

Tutte le issue di python/cpython

Issue simili

Altre issue su Python

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.