[3.12] GH-101291: Avoid using macros with casts in low-level long API. (GH-104742) (#104759)

(cherry picked from commit e295d86056)

Co-authored-by: Mark Shannon <mark@hotpy.org>
This commit is contained in:
Miss Islington (bot) 2023-05-23 02:28:04 -07:00 committed by GitHub
parent 905d419cac
commit e43fbbd928
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -104,9 +104,10 @@ _PyLong_FromDigits(int negative, Py_ssize_t digit_count, digit *digits);
#define _PyLong_SIGN_MASK 3 #define _PyLong_SIGN_MASK 3
#define _PyLong_NON_SIZE_BITS 3 #define _PyLong_NON_SIZE_BITS 3
static inline int static inline int
_PyLong_IsCompact(const PyLongObject* op) { _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); return op->long_value.lv_tag < (2 << _PyLong_NON_SIZE_BITS);
} }
@ -115,7 +116,7 @@ _PyLong_IsCompact(const PyLongObject* op) {
static inline Py_ssize_t static inline Py_ssize_t
_PyLong_CompactValue(const PyLongObject *op) _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)); assert(PyUnstable_Long_IsCompact(op));
Py_ssize_t sign = 1 - (op->long_value.lv_tag & _PyLong_SIGN_MASK); Py_ssize_t sign = 1 - (op->long_value.lv_tag & _PyLong_SIGN_MASK);
return sign * (Py_ssize_t)op->long_value.ob_digit[0]; return sign * (Py_ssize_t)op->long_value.ob_digit[0];