`delete` statement leaves its result on the stack
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 2/5
- Tempo stimato
- 1-3 ore
- Idoneità per principianti
- 79/100
Direzione di ricerca
Inizia da Action::stack_delta in crates/rascal/src/internal/as2_pcode/pcode.rs alle righe collegate, poi segui come codegen usa i delta e truncate_stack per le istruzioni di espressione. Verifica il comportamento generato di delete usato come istruzione rispetto alla riproduzione nell’issue; il lavoro è completato quando il ciclo visita a e b una volta ciascuno.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
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.
- Lingua principale
- Rust
- Stelle
- 22
- Fork
- 2
- Metriche di merge delle PR
- Nessuna PR unita negli ultimi 30g
Preparare l'ambiente
Questo progetto non fornisce container di sviluppo, Dockerfile né guida per i contributori, quindi l'ambiente è a tuo carico: parti dal suo README e consulta la nostra guida al primo contributo per i passaggi generali.
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di Dinnerbone/Rascal
-
`swf` upgrade to 0.4.0Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 66/100
Dinnerbone/Rascal#91 · 2 reazioni ·
-
Difficoltà 4/5 3-5 giorni Idoneità per principianti 48/100
Dinnerbone/Rascal#93 ·
-
__bytecode__ support?Aperta
Difficoltà 5/5 Più di una settimana Idoneità per principianti 30/100
Dinnerbone/Rascal#88 ·
-
Difficoltà 3/5 1-2 giorni Idoneità per principianti 55/100
Dinnerbone/Rascal#87 · 1 commento ·
-
Difficoltà 3/5 1-2 giorni Idoneità per principianti 58/100
Dinnerbone/Rascal#76 ·
Tutte le issue di Dinnerbone/Rascal
Issue simili
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 76/100
rubys/roundhouse#1917 ·
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
I maintainer di solito rispondono entro 2 giorni
-
good first issue
Difficoltà 2/5 1-3 ore Idoneità per principianti 88/100
I maintainer di solito rispondono entro 1 giorno
-
[cosmic-applet-battery] Division by zero displays NaN% when UPower reports max_brightness = 0Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 84/100
pop-os/cosmic-applets#1619 ·
I maintainer di solito rispondono entro 3 giorni
-
binding:python bug
Difficoltà 2/5 1-3 ore Idoneità per principianti 82/100
I maintainer di solito rispondono entro 1 giorno