summaryrefslogtreecommitdiffstats
path: root/Python
diff options
context:
space:
mode:
authorPieter Eendebak <pieter.eendebak@gmail.com>2022-12-22 11:30:18 (GMT)
committerGitHub <noreply@github.com>2022-12-22 11:30:18 (GMT)
commit2b82c36f17ada471e734c3ad93e6eff8b36a5ad9 (patch)
treeffefd7367edb798c63d2bcc80ca154eb6bc70e6d /Python
parent68981578eceee763da4163e93cf653cc6b1b6d35 (diff)
downloadcpython-2b82c36f17ada471e734c3ad93e6eff8b36a5ad9.zip
cpython-2b82c36f17ada471e734c3ad93e6eff8b36a5ad9.tar.gz
cpython-2b82c36f17ada471e734c3ad93e6eff8b36a5ad9.tar.bz2
gh-99761: Add `_PyLong_IsPositiveSingleDigit` function to check for single digit integers (#100064)
Diffstat (limited to 'Python')
-rw-r--r--Python/bytecodes.c8
-rw-r--r--Python/generated_cases.c.h8
2 files changed, 6 insertions, 10 deletions
diff --git a/Python/bytecodes.c b/Python/bytecodes.c
index b29e16e..c0b625b 100644
--- a/Python/bytecodes.c
+++ b/Python/bytecodes.c
@@ -391,8 +391,7 @@ dummy_func(
DEOPT_IF(!PyList_CheckExact(list), BINARY_SUBSCR);
// Deopt unless 0 <= sub < PyList_Size(list)
- Py_ssize_t signed_magnitude = Py_SIZE(sub);
- DEOPT_IF(((size_t)signed_magnitude) > 1, BINARY_SUBSCR);
+ DEOPT_IF(!_PyLong_IsPositiveSingleDigit(sub), BINARY_SUBSCR);
assert(((PyLongObject *)_PyLong_GetZero())->ob_digit[0] == 0);
Py_ssize_t index = ((PyLongObject*)sub)->ob_digit[0];
DEOPT_IF(index >= PyList_GET_SIZE(list), BINARY_SUBSCR);
@@ -410,8 +409,7 @@ dummy_func(
DEOPT_IF(!PyTuple_CheckExact(tuple), BINARY_SUBSCR);
// Deopt unless 0 <= sub < PyTuple_Size(list)
- Py_ssize_t signed_magnitude = Py_SIZE(sub);
- DEOPT_IF(((size_t)signed_magnitude) > 1, BINARY_SUBSCR);
+ DEOPT_IF(!_PyLong_IsPositiveSingleDigit(sub), BINARY_SUBSCR);
assert(((PyLongObject *)_PyLong_GetZero())->ob_digit[0] == 0);
Py_ssize_t index = ((PyLongObject*)sub)->ob_digit[0];
DEOPT_IF(index >= PyTuple_GET_SIZE(tuple), BINARY_SUBSCR);
@@ -508,7 +506,7 @@ dummy_func(
DEOPT_IF(!PyList_CheckExact(list), STORE_SUBSCR);
// Ensure nonnegative, zero-or-one-digit ints.
- DEOPT_IF(((size_t)Py_SIZE(sub)) > 1, STORE_SUBSCR);
+ DEOPT_IF(!_PyLong_IsPositiveSingleDigit(sub), STORE_SUBSCR);
Py_ssize_t index = ((PyLongObject*)sub)->ob_digit[0];
// Ensure index < len(list)
DEOPT_IF(index >= PyList_GET_SIZE(list), STORE_SUBSCR);
diff --git a/Python/generated_cases.c.h b/Python/generated_cases.c.h
index 6d84a64..42b7ca0 100644
--- a/Python/generated_cases.c.h
+++ b/Python/generated_cases.c.h
@@ -491,8 +491,7 @@
DEOPT_IF(!PyList_CheckExact(list), BINARY_SUBSCR);
// Deopt unless 0 <= sub < PyList_Size(list)
- Py_ssize_t signed_magnitude = Py_SIZE(sub);
- DEOPT_IF(((size_t)signed_magnitude) > 1, BINARY_SUBSCR);
+ DEOPT_IF(!_PyLong_IsPositiveSingleDigit(sub), BINARY_SUBSCR);
assert(((PyLongObject *)_PyLong_GetZero())->ob_digit[0] == 0);
Py_ssize_t index = ((PyLongObject*)sub)->ob_digit[0];
DEOPT_IF(index >= PyList_GET_SIZE(list), BINARY_SUBSCR);
@@ -517,8 +516,7 @@
DEOPT_IF(!PyTuple_CheckExact(tuple), BINARY_SUBSCR);
// Deopt unless 0 <= sub < PyTuple_Size(list)
- Py_ssize_t signed_magnitude = Py_SIZE(sub);
- DEOPT_IF(((size_t)signed_magnitude) > 1, BINARY_SUBSCR);
+ DEOPT_IF(!_PyLong_IsPositiveSingleDigit(sub), BINARY_SUBSCR);
assert(((PyLongObject *)_PyLong_GetZero())->ob_digit[0] == 0);
Py_ssize_t index = ((PyLongObject*)sub)->ob_digit[0];
DEOPT_IF(index >= PyTuple_GET_SIZE(tuple), BINARY_SUBSCR);
@@ -642,7 +640,7 @@
DEOPT_IF(!PyList_CheckExact(list), STORE_SUBSCR);
// Ensure nonnegative, zero-or-one-digit ints.
- DEOPT_IF(((size_t)Py_SIZE(sub)) > 1, STORE_SUBSCR);
+ DEOPT_IF(!_PyLong_IsPositiveSingleDigit(sub), STORE_SUBSCR);
Py_ssize_t index = ((PyLongObject*)sub)->ob_digit[0];
// Ensure index < len(list)
DEOPT_IF(index >= PyList_GET_SIZE(list), STORE_SUBSCR);