Skip to content

Commit 6bbb1cf

Browse files
committed
Refactor code a bit to avoid duplication.
1 parent 4e6865a commit 6bbb1cf

1 file changed

Lines changed: 6 additions & 11 deletions

File tree

Objects/typeobject.c

Lines changed: 6 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -233,14 +233,12 @@ get_type_cache(void)
233233

234234

235235
static void
236-
type_cache_clear(struct type_cache *cache)
236+
type_cache_clear(struct type_cache *cache, PyObject *value)
237237
{
238238
for (Py_ssize_t i = 0; i < (1 << MCACHE_SIZE_EXP); i++) {
239239
struct type_cache_entry *entry = &cache->hashtable[i];
240240
entry->version = 0;
241-
// Set to None, rather than NULL, so _PyType_Lookup() can
242-
// use Py_SETREF() rather than using slower Py_XSETREF().
243-
Py_XSETREF(entry->name, Py_NewRef(Py_None));
241+
Py_XSETREF(entry->name, _Py_XNewRef(value));
244242
entry->value = NULL;
245243
}
246244
}
@@ -279,7 +277,9 @@ _PyType_ClearCache(PyInterpreterState *interp)
279277
sizeof(cache->hashtable) / 1024);
280278
#endif
281279

282-
type_cache_clear(cache);
280+
// Set to None, rather than NULL, so _PyType_Lookup() can
281+
// use Py_SETREF() rather than using slower Py_XSETREF().
282+
type_cache_clear(cache, Py_None);
283283

284284
return next_version_tag - 1;
285285
}
@@ -297,12 +297,7 @@ void
297297
_PyType_Fini(PyInterpreterState *interp)
298298
{
299299
struct type_cache *cache = &interp->type_cache;
300-
for (Py_ssize_t i = 0; i < (1 << MCACHE_SIZE_EXP); i++) {
301-
struct type_cache_entry *entry = &cache->hashtable[i];
302-
entry->version = 0;
303-
Py_CLEAR(entry->name);
304-
entry->value = NULL;
305-
}
300+
type_cache_clear(cache, NULL);
306301
if (_Py_IsMainInterpreter(interp)) {
307302
clear_slotdefs();
308303
}

0 commit comments

Comments
 (0)