`delete` statement leaves its result on the stack
Personne n'a encore pris cette issue.
Évaluation
- Difficulté
- 2/5
- Temps estimé
- 1-3 heures
- Accessibilité débutants
- 79/100
Piste de recherche
Commencez par Action::stack_delta dans crates/rascal/src/internal/as2_pcode/pcode.rs aux lignes liées, puis suivez la manière dont codegen utilise les deltas et truncate_stack pour les instructions d’expression. Vérifiez le comportement généré lorsque delete est utilisé comme instruction en le comparant à la reproduction dans l’issue ; c’est terminé lorsque la boucle visite a et b une fois chacun.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Description
The result of a delete used as a statement is never popped. Inside a for..in loop, the leftover values get enumerated, so the loop doesn't end.
var o = {a: 1, b: 2};
var n = 0;
for (var k in o) {
delete o.nothing;
trace(k);
if (++n == 5) {
trace("too many iterations");
break;
}
}
Expected: a and b, once each.
Actual, in Flash Player (Rascal 0.3.6, SWF 8):
a
false
false
false
false
too many iterations
Assigning the result (var d = delete o.nothing;) works around it.
The cause seems to be the stack deltas in Action::stack_delta:
Both actions push a boolean result, so these should be -1 (pops an object and a name) and 0 (pops a name). The codegen then believes the stack is already balanced, and truncate_stack emits no Pop for the expression statement.
- Langage dominant
- Rust
- Étoiles
- 22
- Forks
- 2
- Métriques de merge des PR
- Aucune PR mergée en 30 j
Préparer son environnement
Ce projet ne fournit ni conteneur de développement, ni Dockerfile, ni guide de contribution : l'installation est à votre charge. Commencez par son README, et consultez notre guide de la première contribution pour les étapes générales.
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 Dinnerbone/Rascal
-
`swf` upgrade to 0.4.0Ouverte
Difficulté 2/5 1-3 heures Accessibilité débutants 66/100
Dinnerbone/Rascal#91 · 2 réactions ·
-
Difficulté 4/5 3-5 jours Accessibilité débutants 48/100
Dinnerbone/Rascal#93 ·
-
__bytecode__ support?Ouverte
Difficulté 5/5 Plus d'une semaine Accessibilité débutants 30/100
Dinnerbone/Rascal#88 ·
-
Difficulté 3/5 1-2 jours Accessibilité débutants 55/100
Dinnerbone/Rascal#87 · 1 commentaire ·
-
Cannot have comments in `@PCode`Ouverte
Difficulté 3/5 1-2 jours Accessibilité débutants 58/100
Dinnerbone/Rascal#76 ·
Toutes les issues de Dinnerbone/Rascal
Issues similaires
-
Difficulté 2/5 1-3 heures Accessibilité débutants 76/100
rubys/roundhouse#1917 ·
-
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
Les mainteneurs répondent en général sous 2 jours
-
good first issue
Difficulté 2/5 1-3 heures Accessibilité débutants 88/100
Les mainteneurs répondent en général sous 1 jour
-
[cosmic-applet-battery] Division by zero displays NaN% when UPower reports max_brightness = 0Ouverte
Difficulté 2/5 1-3 heures Accessibilité débutants 84/100
pop-os/cosmic-applets#1619 ·
Les mainteneurs répondent en général sous 3 jours
-
binding:python bug
Difficulté 2/5 1-3 heures Accessibilité débutants 82/100
Les mainteneurs répondent en général sous 1 jour