Skip to content

Commit 189ec83

Browse files
committed
use method for int check in bytecodes.c
1 parent 1e4448f commit 189ec83

File tree

2 files changed

+13
-9
lines changed

2 files changed

+13
-9
lines changed

Python/bytecodes.c

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,13 @@
3636
void _PyFloat_ExactDealloc(PyObject *);
3737
void _PyUnicode_ExactDealloc(PyObject *);
3838

39+
/// Return 0 for nonnegative, zero-or-one-digit ints, 1 otherwise
40+
static inline int negative_or_multi_digit_int(const PyObject *sub) {
41+
assert(PyLong_CheckExact(sub));
42+
Py_ssize_t signed_magnitude = Py_SIZE(sub)
43+
return ((size_t)signed_magnitude) > 1;
44+
}
45+
3946
/* Stack effect macros
4047
* These will be mostly replaced by stack effect descriptions,
4148
* but the tooling need to recognize them.
@@ -383,8 +390,7 @@ dummy_func(
383390
DEOPT_IF(!PyList_CheckExact(list), BINARY_SUBSCR);
384391

385392
// Deopt unless 0 <= sub < PyList_Size(list)
386-
Py_ssize_t signed_magnitude = Py_SIZE(sub);
387-
DEOPT_IF(invalid_index(signed_magnitude, 2), BINARY_SUBSCR);
393+
DEOPT_IF(negative_or_multi_digit_int(sub), BINARY_SUBSCR);
388394
assert(((PyLongObject *)_PyLong_GetZero())->ob_digit[0] == 0);
389395
Py_ssize_t index = ((PyLongObject*)sub)->ob_digit[0];
390396
DEOPT_IF(index >= PyList_GET_SIZE(list), BINARY_SUBSCR);
@@ -403,7 +409,7 @@ dummy_func(
403409

404410
// Deopt unless 0 <= sub < PyTuple_Size(list)
405411
Py_ssize_t signed_magnitude = Py_SIZE(sub);
406-
DEOPT_IF(invalid_index(signed_magnitude, 2), BINARY_SUBSCR);
412+
DEOPT_IF(negative_or_multi_digit_int(sub), BINARY_SUBSCR);
407413
assert(((PyLongObject *)_PyLong_GetZero())->ob_digit[0] == 0);
408414
Py_ssize_t index = ((PyLongObject*)sub)->ob_digit[0];
409415
DEOPT_IF(index >= PyTuple_GET_SIZE(tuple), BINARY_SUBSCR);
@@ -507,7 +513,7 @@ dummy_func(
507513
DEOPT_IF(!PyList_CheckExact(list), STORE_SUBSCR);
508514

509515
// Ensure nonnegative, zero-or-one-digit ints.
510-
DEOPT_IF(invalid_index(Py_SIZE(sub), 2), STORE_SUBSCR);
516+
DEOPT_IF(negative_or_multi_digit_int(sub), STORE_SUBSCR);
511517
Py_ssize_t index = ((PyLongObject*)sub)->ob_digit[0];
512518
// Ensure index < len(list)
513519
DEOPT_IF(index >= PyList_GET_SIZE(list), STORE_SUBSCR);

Python/generated_cases.c.h

Lines changed: 3 additions & 5 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)