[Bug]: `compile()` checks the source before `mode`, raising `TypeError` instead of `ValueError`
Les mainteneurs répondent en général sous 1 jour
Une pull request liée a déjà été fusionnée.
- #1229 par @jseop-lim — fusionnée
Évaluation
- Difficulté
- 3/5
- Temps estimé
- 1-2 jours
- Accessibilité débutants
- 76/100
Piste de recherche
Start in BuiltinFunctions.java at CompileNode.generic, then trace getParserInputType and checkSource in the same file. Reproduce with compile(None, 'f', 'x') and add or update regression tests for invalid mode combined with invalid string, bytes, and AST sources. Done means invalid mode raises ValueError before source conversion errors, matching the reported CPython behavior.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Description
Describe the bug
compile() converts and checks source before it validates mode. When both are invalid, GraalPy reports the source error, while CPython reports the mode with ValueError.
Operating system
Linux
CPU architecture
ARM64
GraalPy version
25.0.2 (Python 3.12.8); also reproduced on 25.2.4
JDK version
No response
Context configuration
No response
Steps to reproduce
compile(None, 'f', 'x')
GraalPy 25.0.2:
TypeError: compile() arg 1 must be a string, bytes or AST object
Expected behavior
CPython 3.12.13:
ValueError: compile() mode must be 'exec', 'eval' or 'single'
Stack trace
Additional context
The same order shows up for string and bytes sources: compile('\x00', 'f', 'x') and compile(b'\xff', 'f', 'x') raise SyntaxError on GraalPy and ValueError on CPython. An AST source already gets the mode checked first.
Root Cause
CompileNode.generic runs checkFlags and checkOptimize, then calls sourceAsString (BuiltinFunctions.java#L1088-L1108), which raises the TypeError (#L1183-L1185). mode is only read later, by getParserInputType inside compile, and that method also runs checkSource first (#L1012-L1018). CPython's builtin_compile_impl dispatches on mode (bltinmodule.c#L776-L798) before it converts the source (#L826).
Fix Suggestion
Call getParserInputType(mode, flags) right after checkOptimize in generic, and move it above checkSource in compile.
- Langage dominant
- Python
- Étoiles
- 1.7k
- Forks
- 163
- Merge moyen
- 14 h 10 min
- PR mergées (30 j)
- 56
Préparer son environnement
Lance le conteneur de développement du projet dans votre navigateur, avec votre propre compte GitHub.
- Aucun Dockerfile ni fichier Docker Compose
- Aucun modèle de pull request
- Lire 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.
Autres issues de oracle/graalpython
-
[Bug]: sys.flags.debug is 1 whenever optimization is offPeut-être pris @hippi345 l’a pris il y a 11 jours. Ouverte
Difficulté 2/5 1-3 heures Accessibilité débutants 75/100
oracle/graalpython#1213 ·
Les mainteneurs répondent en général sous 1 jour
-
bug
Difficulté 2/5 1-3 heures Accessibilité débutants 74/100
oracle/graalpython#1105 ·
Les mainteneurs répondent en général sous 1 jour
-
bug
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
oracle/graalpython#1102 ·
Les mainteneurs répondent en général sous 1 jour
-
enhancement
Difficulté 4/5 3-5 jours Accessibilité débutants 35/100
oracle/graalpython#1217 ·
Les mainteneurs répondent en général sous 1 jour
-
enhancement
Difficulté 4/5 3-5 jours Accessibilité débutants 54/100
oracle/graalpython#1212 ·
Les mainteneurs répondent en général sous 1 jour
Toutes les issues de oracle/graalpython
Issues similaires
-
difficulty:2 enhancement good first issue
Difficulté 2/5 1-3 heures Accessibilité débutants 85/100
MakazhanAlpamys/Soup#2309 ·
Les mainteneurs répondent en général sous 1 jour
-
TAPVid-3D: per_trajectory and local_neighborhood scaling always score 0 in evaluate_model.pyOuverte
Difficulté 2/5 1-3 heures Accessibilité débutants 85/100
google-deepmind/tapnet#173 ·
-
Difficulté 2/5 1-3 heures Accessibilité débutants 70/100
-
change-description-authoring: jdk-33173-audit check 4 grades the hunk translation by its verbOuverte
Difficulté 2/5 1-3 heures Accessibilité débutants 65/100
Netcracker/qubership-ai-packages#203 ·
Les mainteneurs répondent en général sous 1 jour
-
PAC Wording
Difficulté 1/5 Moins d'une heure Accessibilité débutants 72/100
Les mainteneurs répondent en général sous 1 jour