Regression: IntegerNode values are incorrect after syntax errors
Les mainteneurs répondent en général sous 1 jour
Une pull request liée a déjà été fusionnée.
- #4332 par @kddnewton — fusionnée
Évaluation
- Difficulté
- 3/5
- Temps estimé
- 1-2 jours
- Accessibilité débutants
- 57/100
Piste de recherche
Start by reproducing the incorrect IntegerNode values with Prism 2.1.0 using the examples Prism.parse("1 2 3") and Prism.parse("1i 2i 3i"), then compare the relevant parser behavior with Prism 1.9.0. The issue does not name source files or tests, so trace integer literal parsing and its regression coverage from the parser entry point. Done means each IntegerNode retains the value at its own source location, including when syntax errors are present.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Description
Affected version: Prism 2.1.0
Known working version: Prism 1.9.0
In Prism 2.1.0, parsing consecutive integer literals separated by whitespace produces an AST with incorrect values for some IntegerNode instances.
Reproduction
Prism.parse("1 2 3")
Prism.parse("1i 2i 3i")
In Prism 2.1.0, the resulting AST contains:
@ StatementsNode (location: (1,0)-(1,5))
├── flags: ∅
└── body: (length: 3)
├── @ IntegerNode (location: (1,0)-(1,1))
│ ├── flags: newline, static_literal, decimal
│ └── value: 2
├── @ IntegerNode (location: (1,2)-(1,3))
│ ├── flags: newline, static_literal, decimal
│ └── value: 2
└── @ IntegerNode (location: (1,4)-(1,5))
├── flags: newline, static_literal, decimal
└── value: 3,
@ StatementsNode (location: (1,0)-(1,8))
├── flags: ∅
└── body: (length: 3)
├── @ ImaginaryNode (location: (1,0)-(1,2))
│ ├── flags: newline, static_literal
│ └── numeric:
│ @ IntegerNode (location: (1,0)-(1,1))
│ ├── flags: static_literal, decimal
│ └── value: 2
├── @ ImaginaryNode (location: (1,3)-(1,5))
│ ├── flags: newline, static_literal
│ └── numeric:
│ @ IntegerNode (location: (1,3)-(1,4))
│ ├── flags: static_literal, decimal
│ └── value: 3
└── @ ImaginaryNode (location: (1,6)-(1,8))
├── flags: newline, static_literal
└── numeric:
@ IntegerNode (location: (1,6)-(1,7))
├── flags: static_literal, decimal
└── value: 3,
The first node represents the literal 1, but its value is 2.
FloatNode and RationalNode nodes generate correct values in a similar case.
Comparison with Prism 1.9.0
This behavior does not occur in Prism 1.9.0.
@ StatementsNode (location: (1,0)-(1,5))
├── flags: ∅
└── body: (length: 3)
├── @ IntegerNode (location: (1,0)-(1,1))
│ ├── flags: newline, static_literal, decimal
│ └── value: 1
├── @ IntegerNode (location: (1,2)-(1,3))
│ ├── flags: newline, static_literal, decimal
│ └── value: 2
└── @ IntegerNode (location: (1,4)-(1,5))
├── flags: newline, static_literal, decimal
└── value: 3,
@ StatementsNode (location: (1,0)-(1,8))
├── flags: ∅
└── body: (length: 3)
├── @ ImaginaryNode (location: (1,0)-(1,2))
│ ├── flags: newline, static_literal
│ └── numeric:
│ @ IntegerNode (location: (1,0)-(1,1))
│ ├── flags: static_literal, decimal
│ └── value: 1
├── @ ImaginaryNode (location: (1,3)-(1,5))
│ ├── flags: newline, static_literal
│ └── numeric:
│ @ IntegerNode (location: (1,3)-(1,4))
│ ├── flags: static_literal, decimal
│ └── value: 2
└── @ ImaginaryNode (location: (1,6)-(1,8))
├── flags: newline, static_literal
└── numeric:
@ IntegerNode (location: (1,6)-(1,7))
├── flags: static_literal, decimal
└── value: 3,
Expected behavior
Each IntegerNode should retain the value corresponding to its own source location, even when the input contains syntax errors.
Since Prism 1.9.0 handled these cases correctly, this appears to be a regression introduced in a later version.
- Langage dominant
- C
- Étoiles
- 1k
- Forks
- 202
- Merge moyen
- 7 h 52 min
- PR mergées (30 j)
- 76
Préparer son environnement
- 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.
Issues similaires
-
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
-
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
Les mainteneurs répondent en général sous 1 jour
-
contrib/ivorysql_ora/src/builtin_packages/utl_file/utl_file.c:517 - FCOPY destroys a file when source and destination are the samePeut-être pris @Metastarx l’a pris aujourd’hui. Ouverte
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 1/5 Moins d'une heure Accessibilité débutants 75/100
ly05010419/MacNativeGames#1848 ·
Les mainteneurs répondent en général sous 1 jour
-
libc++ test-suite
Difficulté 2/5 1-3 heures Accessibilité débutants 85/100
llvm/llvm-project#239851 ·
Les mainteneurs répondent en général sous 1 jour