Skip to content

Commit d85a883

Browse files
committed
add method for int check
1 parent 1e4448f commit d85a883

7 files changed

+19
-10
lines changed

Include/internal/pycore_global_objects_fini_generated.h

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Include/internal/pycore_global_strings.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -704,6 +704,7 @@ struct _Py_global_strings {
704704
STRUCT_FOR_ID(x)
705705
STRUCT_FOR_ID(year)
706706
STRUCT_FOR_ID(zdict)
707+
STRUCT_FOR_ID(zipimporter)
707708
} identifiers;
708709
struct {
709710
PyASCIIObject _ascii;

Include/internal/pycore_long.h

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,14 @@ static inline PyObject* _PyLong_FromUnsignedChar(unsigned char i)
7878
return Py_NewRef((PyObject *)&_PyLong_SMALL_INTS[_PY_NSMALLNEGINTS+i]);
7979
}
8080

81+
/// Return 0 for nonnegative, zero-or-one-digit ints, 1 otherwise
82+
static inline int
83+
_PyLong_Negative_or_multi_digit_int(PyObject* sub) {
84+
assert(PyLong_CheckExact(sub));
85+
Py_ssize_t signed_magnitude = Py_SIZE(sub);
86+
return ((size_t)signed_magnitude) > 1;
87+
}
88+
8189
PyObject *_PyLong_Add(PyLongObject *left, PyLongObject *right);
8290
PyObject *_PyLong_Multiply(PyLongObject *left, PyLongObject *right);
8391
PyObject *_PyLong_Subtract(PyLongObject *left, PyLongObject *right);

Include/internal/pycore_runtime_init_generated.h

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Include/internal/pycore_unicodeobject_generated.h

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

Python/bytecodes.c

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -383,8 +383,7 @@ dummy_func(
383383
DEOPT_IF(!PyList_CheckExact(list), BINARY_SUBSCR);
384384

385385
// 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);
386+
DEOPT_IF(_PyLong_Negative_or_multi_digit_int(sub), BINARY_SUBSCR);
388387
assert(((PyLongObject *)_PyLong_GetZero())->ob_digit[0] == 0);
389388
Py_ssize_t index = ((PyLongObject*)sub)->ob_digit[0];
390389
DEOPT_IF(index >= PyList_GET_SIZE(list), BINARY_SUBSCR);
@@ -402,8 +401,7 @@ dummy_func(
402401
DEOPT_IF(!PyTuple_CheckExact(tuple), BINARY_SUBSCR);
403402

404403
// Deopt unless 0 <= sub < PyTuple_Size(list)
405-
Py_ssize_t signed_magnitude = Py_SIZE(sub);
406-
DEOPT_IF(invalid_index(signed_magnitude, 2), BINARY_SUBSCR);
404+
DEOPT_IF(_PyLong_Negative_or_multi_digit_int(sub), BINARY_SUBSCR);
407405
assert(((PyLongObject *)_PyLong_GetZero())->ob_digit[0] == 0);
408406
Py_ssize_t index = ((PyLongObject*)sub)->ob_digit[0];
409407
DEOPT_IF(index >= PyTuple_GET_SIZE(tuple), BINARY_SUBSCR);
@@ -507,7 +505,7 @@ dummy_func(
507505
DEOPT_IF(!PyList_CheckExact(list), STORE_SUBSCR);
508506

509507
// Ensure nonnegative, zero-or-one-digit ints.
510-
DEOPT_IF(invalid_index(Py_SIZE(sub), 2), STORE_SUBSCR);
508+
DEOPT_IF(_PyLong_Negative_or_multi_digit_int(sub), STORE_SUBSCR);
511509
Py_ssize_t index = ((PyLongObject*)sub)->ob_digit[0];
512510
// Ensure index < len(list)
513511
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)