Blob Blame History Raw
--- src/_fastmath.c
+++ src/_fastmath.c
@@ -70,11 +70,11 @@ longObjToMPZ (mpz_t m, PyLongObject * p)
 	mpz_init (temp);
 	mpz_init (temp2);
 #ifdef IS_PY3K
-	if (p->ob_base.ob_size > 0) {
-		size = p->ob_base.ob_size;
+	if (Py_SIZE(p) > 0) {
+		size = Py_SIZE(p);
 		negative = 1;
 	} else {
-		size = -p->ob_base.ob_size;
+		size = -Py_SIZE(p);
 		negative = -1;
 	}
 #else
@@ -89,7 +89,11 @@ longObjToMPZ (mpz_t m, PyLongObject * p)
 	mpz_set_ui (m, 0);
 	for (i = 0; i < size; i++)
 	{
+#if PY_VERSION_HEX < 0x030C0000
 		mpz_set_ui (temp, p->ob_digit[i]);
+#else
+		mpz_set_ui (temp, p->long_value.ob_digit[i]);
+#endif
 #ifdef IS_PY3K
 		mpz_mul_2exp (temp2, temp, PyLong_SHIFT * i);
 #else
@@ -123,7 +127,11 @@ mpzToLongObj (mpz_t m)
 	for (i = 0; i < size; i++)
 	{
 #ifdef IS_PY3K
+#if PY_VERSION_HEX < 0x030C0000
 		l->ob_digit[i] = (digit) (mpz_get_ui (temp) & PyLong_MASK);
+#else
+		l->long_value.ob_digit[i] = (digit) (mpz_get_ui (temp) & PyLong_MASK);
+#endif
 		mpz_fdiv_q_2exp (temp, temp, PyLong_SHIFT);
 #else
 		l->ob_digit[i] = (digit) (mpz_get_ui (temp) & MASK);
@@ -131,11 +139,19 @@ mpzToLongObj (mpz_t m)
 #endif
 	}
 	i = size;
+#if PY_VERSION_HEX < 0x030C0000
 	while ((i > 0) && (l->ob_digit[i - 1] == 0))
+#else
+	while ((i > 0) && (l->long_value.ob_digit[i - 1] == 0))
+#endif
 		i--;
 #ifdef IS_PY3K
+#if PY_VERSION_HEX < 0x03090000
 	l->ob_base.ob_size = i * sgn;
 #else
+       Py_SET_SIZE(l, (Py_ssize_t)(i * sgn));
+#endif
+#else
 	l->ob_size = i * sgn;
 #endif
 	mpz_clear (temp);