File tree Expand file tree Collapse file tree 2 files changed +12
-5
lines changed
Expand file tree Collapse file tree 2 files changed +12
-5
lines changed Original file line number Diff line number Diff line change @@ -16,6 +16,7 @@ extern "C" {
1616# define Py_floats_MAXFREELIST 100
1717# define Py_ints_MAXFREELIST 100
1818# define Py_slices_MAXFREELIST 1
19+ # define Py_ranges_MAXFREELIST 10
1920# define Py_contexts_MAXFREELIST 255
2021# define Py_async_gens_MAXFREELIST 80
2122# define Py_async_gen_asends_MAXFREELIST 80
@@ -42,6 +43,7 @@ struct _Py_freelists {
4243 struct _Py_freelist dicts ;
4344 struct _Py_freelist dictkeys ;
4445 struct _Py_freelist slices ;
46+ struct _Py_freelist ranges ;
4547 struct _Py_freelist contexts ;
4648 struct _Py_freelist async_gens ;
4749 struct _Py_freelist async_gen_asends ;
Original file line number Diff line number Diff line change 33#include "Python.h"
44#include "pycore_abstract.h" // _PyIndex_Check()
55#include "pycore_ceval.h" // _PyEval_GetBuiltin()
6+ #include "pycore_freelist.h" // _Py_FREELIST_FREE(), _Py_FREELIST_POP()
67#include "pycore_long.h" // _PyLong_GetZero()
78#include "pycore_modsupport.h" // _PyArg_NoKwnames()
89#include "pycore_range.h"
@@ -51,16 +52,20 @@ static rangeobject *
5152make_range_object (PyTypeObject * type , PyObject * start ,
5253 PyObject * stop , PyObject * step )
5354{
54- rangeobject * obj = NULL ;
5555 PyObject * length ;
5656 length = compute_range_length (start , stop , step );
5757 if (length == NULL ) {
5858 return NULL ;
5959 }
60- obj = PyObject_New (rangeobject , type );
60+ rangeobject * obj = _Py_FREELIST_POP (rangeobject , ranges );
6161 if (obj == NULL ) {
62- Py_DECREF (length );
63- return NULL ;
62+ obj = PyObject_New (rangeobject , type );
63+ if (obj == NULL ) {
64+ Py_DECREF (length );
65+ return NULL ;
66+ }
67+ } else {
68+ //printf("rangeobject from freelist!\n");
6469 }
6570 obj -> start = start ;
6671 obj -> stop = stop ;
@@ -170,7 +175,7 @@ range_dealloc(rangeobject *r)
170175 Py_DECREF (r -> stop );
171176 Py_DECREF (r -> step );
172177 Py_DECREF (r -> length );
173- PyObject_Free ( r );
178+ _Py_FREELIST_FREE ( ranges , r , PyObject_Free );
174179}
175180
176181static unsigned long
You can’t perform that action at this time.
0 commit comments