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" {
16
16
# define Py_floats_MAXFREELIST 100
17
17
# define Py_ints_MAXFREELIST 100
18
18
# define Py_slices_MAXFREELIST 1
19
+ # define Py_ranges_MAXFREELIST 10
19
20
# define Py_contexts_MAXFREELIST 255
20
21
# define Py_async_gens_MAXFREELIST 80
21
22
# define Py_async_gen_asends_MAXFREELIST 80
@@ -42,6 +43,7 @@ struct _Py_freelists {
42
43
struct _Py_freelist dicts ;
43
44
struct _Py_freelist dictkeys ;
44
45
struct _Py_freelist slices ;
46
+ struct _Py_freelist ranges ;
45
47
struct _Py_freelist contexts ;
46
48
struct _Py_freelist async_gens ;
47
49
struct _Py_freelist async_gen_asends ;
Original file line number Diff line number Diff line change 3
3
#include "Python.h"
4
4
#include "pycore_abstract.h" // _PyIndex_Check()
5
5
#include "pycore_ceval.h" // _PyEval_GetBuiltin()
6
+ #include "pycore_freelist.h" // _Py_FREELIST_FREE(), _Py_FREELIST_POP()
6
7
#include "pycore_long.h" // _PyLong_GetZero()
7
8
#include "pycore_modsupport.h" // _PyArg_NoKwnames()
8
9
#include "pycore_range.h"
@@ -51,16 +52,20 @@ static rangeobject *
51
52
make_range_object (PyTypeObject * type , PyObject * start ,
52
53
PyObject * stop , PyObject * step )
53
54
{
54
- rangeobject * obj = NULL ;
55
55
PyObject * length ;
56
56
length = compute_range_length (start , stop , step );
57
57
if (length == NULL ) {
58
58
return NULL ;
59
59
}
60
- obj = PyObject_New (rangeobject , type );
60
+ rangeobject * obj = _Py_FREELIST_POP (rangeobject , ranges );
61
61
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");
64
69
}
65
70
obj -> start = start ;
66
71
obj -> stop = stop ;
@@ -170,7 +175,7 @@ range_dealloc(rangeobject *r)
170
175
Py_DECREF (r -> stop );
171
176
Py_DECREF (r -> step );
172
177
Py_DECREF (r -> length );
173
- PyObject_Free ( r );
178
+ _Py_FREELIST_FREE ( ranges , r , PyObject_Free );
174
179
}
175
180
176
181
static unsigned long
You can’t perform that action at this time.
0 commit comments