Argument Clinic: move converters defined in several files to libclinic
Personne n'a encore pris cette issue.
- Langage dominant
- Python
- Étoiles
- 77.2k
- Forks
- 35.9k
- Métriques de merge des PR
- Métriques de PR en attente
Description
Several custom converters are defined in more than one C file:
pid_t— inposixmodule.c,_posixsubprocess.candresource.c.Py_off_t— inposixmodule.cand_ssl.c; thePy_off_ttype and the converter function are duplicated as well, and_iohas yet another copy of the type.HANDLE— in_multiprocessing/multiprocessing.c,overlapped.c,msvcrtmodule.c,_testconsole.cand_winapi.c.DWORD— inoverlapped.c,winreg.cand_winapi.c.BOOL— inoverlapped.cand_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_tandgid_t—_Py_Uid_Converter()and_Py_Gid_Converter()are declared inposixmodule.hand are called by hand inpwd.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
Guide de contribution
Ouvrir le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Piste de recherche
Commencez dans Tools/clinic/libclinic/converters.py, puis examinez les définitions des converters et les déclarations partagées dans posixmodule.c, _posixsubprocess.c, resource.c, _ssl.c, _io et les modules Windows indiqués dans l’issue. Vérifiez comment Argument Clinic traite les modules et comparez le code généré ; le travail est terminé lorsque les converters sont centralisés sans modifier leurs valeurs acceptées ni leur comportement généré.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Évaluation
- Stack technique
- c, python
- Domaine
- build-system, tooling
- Type d'issue
- Refactorisation
- Difficulté
- 4/5
- Temps estimé
- 3-5 jours
- Activité
- À l'abandon
- Clarté
- Clairement spécifiée
- Accessibilité débutants
- 25/100