@@ -2426,6 +2426,18 @@ float_compactlong_guard(PyObject *lhs, PyObject *rhs)
24262426 );
24272427}
24282428
2429+ static int
2430+ float_compactlong_guard_true_div (PyObject * lhs , PyObject * rhs )
2431+ {
2432+ // guards should check if rhs has a non-zero value
2433+ return (
2434+ PyFloat_CheckExact (lhs ) &&
2435+ PyLong_CheckExact (rhs ) &&
2436+ _PyLong_IsCompact ((PyLongObject * )rhs ) &&
2437+ !PyLong_IsZero (rhs )
2438+ );
2439+ }
2440+
24292441#define FLOAT_LONG_ACTION (NAME , OP ) \
24302442 static PyObject * \
24312443 (NAME)(PyObject *lhs, PyObject *rhs) \
@@ -2452,6 +2464,18 @@ compactlong_float_guard(PyObject *lhs, PyObject *rhs)
24522464 );
24532465}
24542466
2467+ static int
2468+ compactlong_float_guard_true_div (PyObject * lhs , PyObject * rhs )
2469+ {
2470+ // guards should check if rhs has a non-zero value
2471+ return (
2472+ PyFloat_CheckExact (rhs ) &&
2473+ PyLong_CheckExact (lhs ) &&
2474+ _PyLong_IsCompact ((PyLongObject * )lhs ) &&
2475+ PyFloat_AsDouble (rhs ) != 0.0
2476+ );
2477+ }
2478+
24552479#define LONG_FLOAT_ACTION (NAME , OP ) \
24562480 static PyObject * \
24572481 (NAME )(PyObject * lhs , PyObject * rhs ) \
@@ -2469,14 +2493,14 @@ LONG_FLOAT_ACTION(compactlong_float_true_div, /)
24692493static _PyBinaryOpSpecializationDescr float_compactlong_specs [NB_OPARG_LAST + 1 ] = {
24702494 [NB_ADD ] = {float_compactlong_guard , float_compactlong_add },
24712495 [NB_SUBTRACT ] = {float_compactlong_guard , float_compactlong_subtract },
2472- [NB_TRUE_DIVIDE ] = {float_compactlong_guard , float_compactlong_true_div },
2496+ [NB_TRUE_DIVIDE ] = {float_compactlong_guard_true_div , float_compactlong_true_div },
24732497 [NB_MULTIPLY ] = {float_compactlong_guard , float_compactlong_multiply },
24742498};
24752499
24762500static _PyBinaryOpSpecializationDescr compactlong_float_specs [NB_OPARG_LAST + 1 ] = {
24772501 [NB_ADD ] = {compactlong_float_guard , compactlong_float_add },
24782502 [NB_SUBTRACT ] = {compactlong_float_guard , compactlong_float_subtract },
2479- [NB_TRUE_DIVIDE ] = {compactlong_float_guard , compactlong_float_true_div },
2503+ [NB_TRUE_DIVIDE ] = {compactlong_float_guard_true_div , compactlong_float_true_div },
24802504 [NB_MULTIPLY ] = {compactlong_float_guard , compactlong_float_multiply },
24812505};
24822506
0 commit comments