Skip to content

Commit 127cb30

Browse files
committed
Address Irit's review
1 parent aa416bb commit 127cb30

File tree

2 files changed

+24
-20
lines changed

2 files changed

+24
-20
lines changed

Lib/test/test_opcache.py

Lines changed: 17 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1384,22 +1384,26 @@ def float_lhs(arg):
13841384

13851385
def binary_op_nan():
13861386
def compactlong_lhs(arg):
1387-
42 + arg
1388-
42 - arg
1389-
42 * arg
1390-
42 / arg
1387+
return (
1388+
42 + arg,
1389+
42 - arg,
1390+
42 * arg,
1391+
42 / arg,
1392+
)
13911393
def compactlong_rhs(arg):
1392-
arg + 42
1393-
arg - 42
1394-
arg * 42
1395-
arg / 42
1396-
1397-
compactlong_lhs(1.0)
1394+
return (
1395+
arg + 42,
1396+
arg - 42,
1397+
arg * 2,
1398+
arg / 42,
1399+
)
1400+
nan = float('nan')
1401+
self.assertEqual(compactlong_lhs(1.0), (43.0, 41.0, 42.0, 42.0))
13981402
for _ in range(100):
1399-
compactlong_lhs(float('nan'))
1400-
compactlong_rhs(1.0)
1403+
self.assertTrue(all(filter(lambda x: x is nan, compactlong_lhs(nan))))
1404+
self.assertEqual(compactlong_rhs(42.0), (84.0, 0.0, 84.0, 1.0))
14011405
for _ in range(100):
1402-
compactlong_rhs(float('nan'))
1406+
self.assertTrue(all(filter(lambda x: x is nan, compactlong_rhs(nan))))
14031407

14041408
self.assert_no_opcode(compactlong_lhs, "BINARY_OP_EXTEND")
14051409
self.assert_no_opcode(compactlong_rhs, "BINARY_OP_EXTEND")

Python/specialize.c

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2421,14 +2421,14 @@ float_compactlong_guard(PyObject *lhs, PyObject *rhs)
24212421
{
24222422
return (
24232423
PyFloat_CheckExact(lhs) &&
2424+
!isnan(PyFloat_AsDouble(lhs)) &&
24242425
PyLong_CheckExact(rhs) &&
2425-
_PyLong_IsCompact((PyLongObject *)rhs) &&
2426-
!isnan(PyFloat_AsDouble(lhs))
2426+
_PyLong_IsCompact((PyLongObject *)rhs)
24272427
);
24282428
}
24292429

24302430
static inline int
2431-
float_compactlong_guard_true_div(PyObject *lhs, PyObject *rhs)
2431+
nonzero_float_compactlong_guard(PyObject *lhs, PyObject *rhs)
24322432
{
24332433
return (
24342434
float_compactlong_guard(lhs, rhs) && !PyLong_IsZero(rhs)
@@ -2455,15 +2455,15 @@ static inline int
24552455
compactlong_float_guard(PyObject *lhs, PyObject *rhs)
24562456
{
24572457
return (
2458-
PyFloat_CheckExact(rhs) &&
24592458
PyLong_CheckExact(lhs) &&
24602459
_PyLong_IsCompact((PyLongObject *)lhs) &&
2460+
PyFloat_CheckExact(rhs) &&
24612461
!isnan(PyFloat_AsDouble(rhs))
24622462
);
24632463
}
24642464

24652465
static inline int
2466-
compactlong_float_guard_true_div(PyObject *lhs, PyObject *rhs)
2466+
nonzero_compactlong_float_guard(PyObject *lhs, PyObject *rhs)
24672467
{
24682468
return (
24692469
compactlong_float_guard(lhs, rhs) && PyFloat_AsDouble(rhs) != 0.0
@@ -2487,14 +2487,14 @@ LONG_FLOAT_ACTION(compactlong_float_true_div, /)
24872487
static _PyBinaryOpSpecializationDescr float_compactlong_specs[NB_OPARG_LAST+1] = {
24882488
[NB_ADD] = {float_compactlong_guard, float_compactlong_add},
24892489
[NB_SUBTRACT] = {float_compactlong_guard, float_compactlong_subtract},
2490-
[NB_TRUE_DIVIDE] = {float_compactlong_guard_true_div, float_compactlong_true_div},
2490+
[NB_TRUE_DIVIDE] = {nonzero_float_compactlong_guard, float_compactlong_true_div},
24912491
[NB_MULTIPLY] = {float_compactlong_guard, float_compactlong_multiply},
24922492
};
24932493

24942494
static _PyBinaryOpSpecializationDescr compactlong_float_specs[NB_OPARG_LAST+1] = {
24952495
[NB_ADD] = {compactlong_float_guard, compactlong_float_add},
24962496
[NB_SUBTRACT] = {compactlong_float_guard, compactlong_float_subtract},
2497-
[NB_TRUE_DIVIDE] = {compactlong_float_guard_true_div, compactlong_float_true_div},
2497+
[NB_TRUE_DIVIDE] = {nonzero_compactlong_float_guard, compactlong_float_true_div},
24982498
[NB_MULTIPLY] = {compactlong_float_guard, compactlong_float_multiply},
24992499
};
25002500

0 commit comments

Comments
 (0)