Fix forced arg format in AC-processed modules with custom converters
Personne n'a encore pris cette issue.
- Langage dominant
- Python
- Étoiles
- 77.2k
- Forks
- 36k
- Métriques de merge des PR
- Métriques de PR en attente
Description
There are custom Argument Clinic converters that define format_unit but omit parse_arg. As a result, generation of positional argument parsers is forced to back up from the fastest possible _PyArg_CheckPositional to slower _PyArg_ParseStack-based format strings.
Here is a list of such classes (and fixing PRs except complex cases):
-
Modules\_multiprocessing\multiprocessing.c (gh-94517)
- HANDLE_converter
-
Modules\_multiprocessing\semaphore.c
- SEM_HANDLE_converter
-
Modules\overlapped.c (gh-94516)
- OVERLAPPED_converter
- HANDLE_converter
- ULONG_PTR_converter
- DWORD_converter
- BOOL_converter
-
Modules\posixmodule.c (gh-122516)
- pid_t_converter
- idtype_t_converter
- id_t_converter
- intptr_t_converter
- Py_off_t_converter
-
Modules\resource.c (gh-94515)
- pid_t_converter
-
PC\msvcrtmodule.c (gh-94514)
- HANDLE_converter
-
PC\winreg.c (gh-94513)
- REGSAM_converter
- DWORD_converter
- HKEY_converter
An example of such a converter:
class BOOL_converter(CConverter):
type = 'BOOL'
format_unit = 'i'
class pid_t_converter(CConverter):
type = 'pid_t'
format_unit = '" _Py_PARSE_PID "'
I'm going to teach all of them about low-level generation by replacing manual format_unit definitions with:
- inheritance from a corresponding builtin converter where possible
- and custom
parse_args in other places.
For the example it gives:
class BOOL_converter(int_converter):
type = 'BOOL'
class pid_t_converter(CConverter):
type = 'pid_t'
# Left as a backup for potential complex cases
format_unit = '" _Py_PARSE_PID "'
def parse_arg(self, argname, displayname):
return """
{paramname} = PyLong_AsPid({argname});
if ({paramname} == -1 && PyErr_Occurred()) {{{{
goto exit;
}}}}
""".format(argname=argname, paramname=self.parser_name)
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 par Modules/_multiprocessing/semaphore.c et son SEM_HANDLE_converter, puis lisez les exemples de convertisseurs indiqués ainsi que les modules correspondants marqués comme terminés pour comparaison. Examinez la manière dont Argument Clinic utilise format_unit et parse_arg lors de la génération du positional parser. Le travail est terminé lorsque le convertisseur n’impose plus le format-string parser plus lent tout en conservant une analyse correcte des arguments.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Évaluation
- Stack technique
- c, python
- Domaine
- performance, tooling
- Type d'issue
- Bug
- Difficulté
- 4/5
- Temps estimé
- 3-5 jours
- Activité
- À l'abandon
- Clarté
- Plutôt claire
- Accessibilité débutants
- 45/100