From 4fc68560ea0d506c152a82c48c162bfe002f34a8 Mon Sep 17 00:00:00 2001 From: Mark Shannon Date: Thu, 28 Oct 2021 17:35:43 +0100 Subject: Store actual ints, not pointers to them in the interpreter state. (GH-29274) --- Objects/longobject.c | 21 ++++++--------------- 1 file changed, 6 insertions(+), 15 deletions(-) (limited to 'Objects/longobject.c') diff --git a/Objects/longobject.c b/Objects/longobject.c index 5325d1852b..b7392e50e7 100644 --- a/Objects/longobject.c +++ b/Objects/longobject.c @@ -5827,24 +5827,17 @@ PyLong_GetInfo(void) return int_info; } -int +void _PyLong_Init(PyInterpreterState *interp) { for (Py_ssize_t i=0; i < NSMALLNEGINTS + NSMALLPOSINTS; i++) { sdigit ival = (sdigit)i - NSMALLNEGINTS; int size = (ival < 0) ? -1 : ((ival == 0) ? 0 : 1); - - PyLongObject *v = _PyLong_New(1); - if (!v) { - return -1; - } - - Py_SET_SIZE(v, size); - v->ob_digit[0] = (digit)abs(ival); - - interp->small_ints[i] = v; + interp->small_ints[i].ob_base.ob_base.ob_refcnt = 1; + interp->small_ints[i].ob_base.ob_base.ob_type = &PyLong_Type; + interp->small_ints[i].ob_base.ob_size = size; + interp->small_ints[i].ob_digit[0] = (digit)abs(ival); } - return 0; } @@ -5863,7 +5856,5 @@ _PyLong_InitTypes(void) void _PyLong_Fini(PyInterpreterState *interp) { - for (Py_ssize_t i = 0; i < NSMALLNEGINTS + NSMALLPOSINTS; i++) { - Py_CLEAR(interp->small_ints[i]); - } + (void)interp; } -- cgit v1.2.1