From 6b0d4302beb5e79a6569b4afe17d05150cdf42d0 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Fri, 21 Jul 2017 00:45:35 +1000 Subject: PyAPI: use instancing when supported This means when a new data-type is returned it will use the same instance as the previously created one (if it exists). --- source/blender/python/intern/bpy_rna.c | 11 +++++++++++ 1 file changed, 11 insertions(+) (limited to 'source/blender') diff --git a/source/blender/python/intern/bpy_rna.c b/source/blender/python/intern/bpy_rna.c index 51e179fb317..ca1e74ce28e 100644 --- a/source/blender/python/intern/bpy_rna.c +++ b/source/blender/python/intern/bpy_rna.c @@ -6658,6 +6658,17 @@ PyObject *pyrna_struct_CreatePyObject(PointerRNA *ptr) Py_RETURN_NONE; } else { + /* New in 2.8x, since not many types support instancing + * we may want to use a flag to avoid looping over all classes. - campbell */ + { + void **instance = RNA_struct_instance(ptr); + if (instance && *instance) { + pyrna = *instance; + Py_INCREF(pyrna); + return (PyObject *)pyrna; + } + } + PyTypeObject *tp = (PyTypeObject *)pyrna_struct_Subtype(ptr); if (tp) { -- cgit v1.2.3