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

JelleZijlstra webhook-mailer at python.org
Tue May 23 05:28:11 EDT 2023


https://github.com/python/cpython/commit/e43fbbd92884ad167cdaea296526c671f593b234
commit: e43fbbd92884ad167cdaea296526c671f593b234
branch: 3.12
author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com>
committer: JelleZijlstra <jelle.zijlstra at gmail.com>
date: 2023-05-23T09:28:04Z
summary:

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

(cherry picked from commit e295d8605699ad3d8ec46c8d55a5e47da05b20c6)

Co-authored-by: Mark Shannon <mark at hotpy.org>

files:
M Include/cpython/longintrepr.h

diff --git a/Include/cpython/longintrepr.h b/Include/cpython/longintrepr.h
index 0f569935fff1..692c69ba76db 100644
--- a/Include/cpython/longintrepr.h
+++ b/Include/cpython/longintrepr.h
@@ -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);
 }
 
@@ -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];



More information about the Python-checkins mailing list