Hacktoberfest 2026: le issue che i maintainer hanno segnato per ottobre, aperte e adatte ai principianti. Sfoglia le issue Hacktoberfest

/ binop throws DivisionByZeroError on PHP8 target (Dynamic division by zero)

Aperta Adatta ai principianti
#166 0 commenti 0 reazioni 0 assegnatari Vedi su GitHub

Nessuno ha ancora preso questa issue.

Valutazione

Difficoltà
2/5
Tempo stimato
1-3 ore
Idoneità per principianti
78/100
Tipo di issue
Bug
Chiarezza
Specificata chiaramente
Stato di attività
Tranquilla
Ambito
compilers

Direzione di ricerca

Inizia da Interp.hx, in particolare da initOps() e dal binop "/" predefinito, quindi esegui la riproduzione fornita di Parser e Interp con PHP 8 e un'altra target. Confronta il risultato della divisione per zero con il comportamento documentato di Float in Haxe; il lavoro è completato quando l'espressione non genera più un'eccezione su PHP 8 e rimane coerente tra le target.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

I think this should be reported on Haxe github but since I guess that the answer will be to avoid using Dynamic I try to post it here because hscript is by default using Dynamic.

On the PHP target, Interp's default / binop (Interp.hx, initOps()):

binops.set("/", function(e1,e2) return me.expr(e1) / me.expr(e2));
relies on the native / operator on Dynamic operands. Since PHP 8.0, / throws DivisionByZeroError for any division by zero (including Float), whereas other targets (JS, etc.) return Infinity/NaN without throwing — per Haxe's own documented Float/IEEE754 semantics. Since Interp.expr() always operates in Dynamic, this cross-target guarantee silently breaks specifically on PHP8, even when both operands are genuinely Float at runtime.

Repro:

var i = new hscript.Interp();
i.variables.set("x", 1.0);
i.variables.set("y", 0.0);
i.execute(new hscript.Parser().parseString("x / y")); // throws on PHP8, returns Infinity on JS

Suggested fix guard the divisor explicitly instead of relying on the native operator, restoring cross-target consistency:

binops.set("/", function(e1,e2){
    var b = me.expr(e2);
    return b == 0 ? Math.NaN : me.expr(e1) / b;
});
Lingua principale
Haxe
Stelle
309
Fork
154
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

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di HaxeFoundation/hscript

Tutte le issue di HaxeFoundation/hscript

Issue simili

Altre issue su Compilers

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.