Skip to content

Commit

Permalink
[3.12] GH-101291: Avoid using macros with casts in low-level long API. (
Browse files Browse the repository at this point in the history
GH-104742) (#104759)

(cherry picked from commit e295d86)

Co-authored-by: Mark Shannon <mark@hotpy.org>
  • Loading branch information
miss-islington and markshannon authored May 23, 2023
1 parent 905d419 commit e43fbbd
Showing 1 changed file with 3 additions and 2 deletions.
5 changes: 3 additions & 2 deletions Include/cpython/longintrepr.h
Original file line number Diff line number Diff line change
Expand Up @@ -104,9 +104,10 @@ _PyLong_FromDigits(int negative, Py_ssize_t digit_count, digit *digits);
#define _PyLong_SIGN_MASK 3
#define _PyLong_NON_SIZE_BITS 3


static inline int
_PyLong_IsCompact(const PyLongObject* op) {
assert(PyLong_Check(op));
assert(PyType_HasFeature((op)->ob_base.ob_type, Py_TPFLAGS_LONG_SUBCLASS));
return op->long_value.lv_tag < (2 << _PyLong_NON_SIZE_BITS);
}

Expand All @@ -115,7 +116,7 @@ _PyLong_IsCompact(const PyLongObject* op) {
static inline Py_ssize_t
_PyLong_CompactValue(const PyLongObject *op)
{
assert(PyLong_Check(op));
assert(PyType_HasFeature((op)->ob_base.ob_type, Py_TPFLAGS_LONG_SUBCLASS));
assert(PyUnstable_Long_IsCompact(op));
Py_ssize_t sign = 1 - (op->long_value.lv_tag & _PyLong_SIGN_MASK);
return sign * (Py_ssize_t)op->long_value.ob_digit[0];
Expand Down

0 comments on commit e43fbbd

Please sign in to comment.