fix(compiler)): 修复除以零MSVC编译不通过

pull/2/head
Yurun 3 months ago
parent 30ef9352a2
commit 8e5b9e8076
  1. 18
      src/Php/Parser/BinaryOpTrait.php
  2. 2
      tests/aot/float_edge/edge-cases.phpt

@ -125,6 +125,10 @@ trait BinaryOpTrait
return 'php::fn::mod(' . $leftExpr . ', ' . $rightExpr . ')';
}
if ($op === '/' and $this->isZeroLiteral($right)) {
return self::VALUE_NAN;
}
return '((' . $leftExpr . ') ' . $op . ' (' . $rightExpr . '))';
}
@ -353,6 +357,20 @@ trait BinaryOpTrait
return $this->parseBinaryOp($expr->left, $expr->right, '/');
}
private function isZeroLiteral(NodeAbstract $expr): bool
{
if ($expr instanceof Node\Scalar\Int_) {
return $expr->value == 0;
}
if ($expr instanceof Node\Scalar\Float_) {
return $expr->value == 0.0;
}
if ($expr instanceof Node\Scalar\String_) {
return $expr->value === '0' || $expr->value === '0.0';
}
return false;
}
protected function parseBinaryOpMinus(Expr\BinaryOp\Minus $expr): string
{
return $this->parseBinaryOp($expr->left, $expr->right, '-');

@ -19,6 +19,7 @@ function main(): void {
var_dump(INF + INF);
var_dump(INF / INF);
var_dump(0.0 / 0.0);
var_dump(1.0 / 0.0);
}
?>
--EXPECT--
@ -38,3 +39,4 @@ INF
float(INF)
float(NAN)
float(NAN)
float(NAN)

Loading…
Cancel
Save