/ binop throws DivisionByZeroError on PHP8 target (Dynamic division by zero)
还没有人认领这个 Issue。
评估
- 难度
- 2/5
- 预计耗时
- 1-3 小时
- 新手友好度
- 78/100
- Issue 类型
- 缺陷
- 描述清晰度
- 描述清楚
- 活跃度
- 冷清
- 领域
- compilers
调研方向
从 Interp.hx 开始,具体检查 initOps() 和默认的 "/" binop,然后使用 PHP 8 和另一个 target 运行提供的 Parser 和 Interp reproduction。将除以零的结果与 Haxe 文档所述的 Float 行为进行比较;当该表达式在 PHP 8 上不再抛出异常,并且在各个 target 之间保持一致时,即表示完成。
由索引模型根据 Issue 内容生成。
描述
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;
});
- 主要语言
- Haxe
- 星标
- 308
- 派生
- 155
- PR 合并指标
- 30 天内没有已合并 PR
环境准备
这个项目没有提供开发容器、Dockerfile 或贡献指南,环境需要你自己搭建:先看它的 README,通用步骤见我们的新手贡献指南。
从这里开始
- 先读完整个 Issue,再读项目的贡献指南。
- 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
- Fork 仓库,在一个分支上完成修改。
- 提交 Pull Request,并在描述里引用这个 Issue 编号。
HaxeFoundation/hscript 的其他 Issue
-
难度 2/5 1-3 小时 新手友好度 50/100
HaxeFoundation/hscript#161 · 1 条评论 ·
-
Haxe4 try-catch未关闭
难度 4/5 3-5 天 新手友好度 35/100
HaxeFoundation/hscript#144 · 3 条评论 ·
-
难度 5/5 一周以上 新手友好度 20/100
HaxeFoundation/hscript#109 · 1 条评论 ·
-
难度 2/5 1-3 小时 新手友好度 35/100
HaxeFoundation/hscript#98 · 1 个 reaction ·
-
难度 3/5 1-2 天 新手友好度 42/100
HaxeFoundation/hscript#96 · 3 条评论 ·
查看 HaxeFoundation/hscript 的全部 Issue
相似的 Issue
-
bug priority: P2
难度 1/5 1 小时以内 新手友好度 78/100
维护者通常 1 天内回复
-
confirmed generated by fuzzer llvm:optimizations miscompilation
难度 2/5 1-3 小时 新手友好度 78/100
llvm/llvm-project#234325 ·
维护者通常 1 天内回复
-
grammar selfhost sev-3
难度 2/5 1-3 小时 新手友好度 78/100
-
难度 2/5 1-3 小时 新手友好度 62/100
-
难度 2/5 1-3 小时 新手友好度 78/100
gren-lang/compiler-common#41 ·