@@ -88,6 +88,11 @@ cdef object _loaded_singletons = {}
8888cdef object _loaded_classes = {}
8989
9090
91+ cdef void _cleanup_loaded_classes_and_singletons():
92+ _loaded_singletons.clear()
93+ _loaded_classes.clear()
94+
95+
9196cdef object _load_singleton(str name):
9297 try:
9398 return _loaded_singletons[name]
@@ -186,6 +191,7 @@ cdef object _load_class(str name):
186191
187192
188193cdef object _object_call(GDExtensionObjectPtr obj, str meth, args):
194+ cdef object pyret
189195 cdef gd_variant_t ret
190196 cdef GDExtensionCallError call_error
191197
@@ -206,6 +212,8 @@ cdef object _object_call(GDExtensionObjectPtr obj, str meth, args):
206212 # TODO: provide a helper for string name from Python str creation
207213 cdef gd_string_name_t meth_gdstrname = gd_string_name_from_unchecked_pystr(meth)
208214 variant_args[0] = gd_string_name_into_variant(&meth_gdstrname)
215+ gd_string_name_del(&meth_gdstrname)
216+ # TODO: rename !
209217 # Into conversion steals the owneship, so no need to delete meth_gdstrname
210218
211219 for i, arg in enumerate(args, 1):
@@ -222,10 +230,12 @@ cdef object _object_call(GDExtensionObjectPtr obj, str meth, args):
222230 &ret,
223231 &call_error,
224232 )
225- gd_variant_del(&variant_args[0]) # Only param we created without stealing ownership
233+ for i in range(args_with_meth_len):
234+ gd_variant_del(&variant_args[i])
235+ # gd_variant_del(&variant_args[0]) # Only param we created without stealing ownership
226236 if call_error.error == GDEXTENSION_CALL_OK:
227- return gd_variant_steal_into_pyobj(&ret)
228237 # No need to destroy ret given the conversion has stolen ownership on data !
238+ return gd_variant_steal_into_pyobj(&ret)
229239
230240 # TODO: improve ret error raised exception type ?
231241 elif call_error.error == GDEXTENSION_CALL_ERROR_INVALID_METHOD:
0 commit comments