Commit 6b519985 authored by animalize's avatar animalize Committed by Raymond Hettinger

replace inline function `is_small_int` with a macro version (GH-15710)

parent 3f43ceff
The ``CHECK_SMALL_INT`` macro used inside :file:`Object/longobject.c` has The ``CHECK_SMALL_INT`` macro used inside :file:`Object/longobject.c` has
been replaced with an explicit ``return`` at each call site, conditioned on been replaced with an explicit ``return`` at each call site.
a ``static inline`` function ``is_small_int``.
...@@ -42,11 +42,7 @@ PyObject *_PyLong_One = NULL; ...@@ -42,11 +42,7 @@ PyObject *_PyLong_One = NULL;
*/ */
static PyLongObject small_ints[NSMALLNEGINTS + NSMALLPOSINTS]; static PyLongObject small_ints[NSMALLNEGINTS + NSMALLPOSINTS];
static inline int #define IS_SMALL_INT(ival) (-NSMALLNEGINTS <= (ival) && (ival) < NSMALLPOSINTS)
is_small_int(long long ival)
{
return -NSMALLNEGINTS <= ival && ival < NSMALLPOSINTS;
}
#ifdef COUNT_ALLOCS #ifdef COUNT_ALLOCS
Py_ssize_t _Py_quick_int_allocs, _Py_quick_neg_int_allocs; Py_ssize_t _Py_quick_int_allocs, _Py_quick_neg_int_allocs;
...@@ -56,7 +52,7 @@ static PyObject * ...@@ -56,7 +52,7 @@ static PyObject *
get_small_int(sdigit ival) get_small_int(sdigit ival)
{ {
PyObject *v; PyObject *v;
assert(is_small_int(ival)); assert(IS_SMALL_INT(ival));
v = (PyObject *)&small_ints[ival + NSMALLNEGINTS]; v = (PyObject *)&small_ints[ival + NSMALLNEGINTS];
Py_INCREF(v); Py_INCREF(v);
#ifdef COUNT_ALLOCS #ifdef COUNT_ALLOCS
...@@ -73,7 +69,7 @@ maybe_small_long(PyLongObject *v) ...@@ -73,7 +69,7 @@ maybe_small_long(PyLongObject *v)
{ {
if (v && Py_ABS(Py_SIZE(v)) <= 1) { if (v && Py_ABS(Py_SIZE(v)) <= 1) {
sdigit ival = MEDIUM_VALUE(v); sdigit ival = MEDIUM_VALUE(v);
if (is_small_int(ival)) { if (IS_SMALL_INT(ival)) {
Py_DECREF(v); Py_DECREF(v);
return (PyLongObject *)get_small_int(ival); return (PyLongObject *)get_small_int(ival);
} }
...@@ -81,8 +77,8 @@ maybe_small_long(PyLongObject *v) ...@@ -81,8 +77,8 @@ maybe_small_long(PyLongObject *v)
return v; return v;
} }
#else #else
#define is_small_int(ival) 0 #define IS_SMALL_INT(ival) 0
#define get_small_int(ival) (assert(0), NULL) #define get_small_int(ival) (Py_UNREACHABLE(), NULL)
#define maybe_small_long(val) (val) #define maybe_small_long(val) (val)
#endif #endif
...@@ -297,7 +293,7 @@ _PyLong_Copy(PyLongObject *src) ...@@ -297,7 +293,7 @@ _PyLong_Copy(PyLongObject *src)
i = -(i); i = -(i);
if (i < 2) { if (i < 2) {
sdigit ival = MEDIUM_VALUE(src); sdigit ival = MEDIUM_VALUE(src);
if (is_small_int(ival)) { if (IS_SMALL_INT(ival)) {
return get_small_int(ival); return get_small_int(ival);
} }
} }
...@@ -321,7 +317,7 @@ PyLong_FromLong(long ival) ...@@ -321,7 +317,7 @@ PyLong_FromLong(long ival)
int ndigits = 0; int ndigits = 0;
int sign; int sign;
if (is_small_int(ival)) { if (IS_SMALL_INT(ival)) {
return get_small_int((sdigit)ival); return get_small_int((sdigit)ival);
} }
...@@ -1154,7 +1150,7 @@ PyLong_FromLongLong(long long ival) ...@@ -1154,7 +1150,7 @@ PyLong_FromLongLong(long long ival)
int ndigits = 0; int ndigits = 0;
int negative = 0; int negative = 0;
if (is_small_int(ival)) { if (IS_SMALL_INT(ival)) {
return get_small_int((sdigit)ival); return get_small_int((sdigit)ival);
} }
...@@ -1229,7 +1225,7 @@ PyLong_FromSsize_t(Py_ssize_t ival) ...@@ -1229,7 +1225,7 @@ PyLong_FromSsize_t(Py_ssize_t ival)
int ndigits = 0; int ndigits = 0;
int negative = 0; int negative = 0;
if (is_small_int(ival)) { if (IS_SMALL_INT(ival)) {
return get_small_int((sdigit)ival); return get_small_int((sdigit)ival);
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment