@@ -113,7 +113,7 @@ cdef object _load_class(str name):
113113 cdef StringName gdname_classdb = StringName(" ClassDB" )
114114 cdef gd_object_t classdb = gdptrs.gdptr_global_get_singleton(& gdname_classdb._gd_data)
115115
116- gd_name = GDString (name)
116+ gd_name = StringName (name)
117117 parent = spec[0 ]
118118 items_spec = iter (spec[1 :])
119119 if parent:
@@ -179,7 +179,7 @@ cdef object _load_class(str name):
179179 _prop_setter ,
180180 _prop_index ,
181181 ):
182- gd_prop_name = GDString (prop_name)
182+ gd_prop_name = StringName (prop_name)
183183 # TODO: ptrcall on getter/setter
184184 @property
185185 def _property (self ):
@@ -205,7 +205,7 @@ cdef object _load_class(str name):
205205 signal_name ,
206206 signal_arguments_count ,
207207 ):
208- gd_signal_name = GDString (signal_name)
208+ gd_signal_name = StringName (signal_name)
209209 for _ in range (signal_arguments_count):
210210 _arg_name = next(items_spec)
211211 _arg_type = next(items_spec)
@@ -230,7 +230,7 @@ cdef object _load_class(str name):
230230 _method_return_type ,
231231 method_arguments_count ,
232232 ):
233- gd_method_name = GDString (method_name)
233+ gd_method_name = StringName (method_name)
234234 for _ in range (method_arguments_count):
235235 _arg_name = next(items_spec)
236236 _arg_type = next(items_spec)
@@ -280,21 +280,20 @@ cdef object _object_call(gd_object_t obj, str meth, list args):
280280 cdef gdextension_interface.GDExtensionMethodBindPtr Object_call = gdptrs.gdptr_classdb_get_method_bind(& gdname_object._gd_data, & gdname_call._gd_data, 3400424181 )
281281
282282 cdef gdextension_interface.GDExtensionInt args_with_meth_len = len (args) + 1
283- if args_with_meth_len > 9 :
283+ # Currently the worst method takes 14 arguments, so this hack should be enough...
284+ if args_with_meth_len > 15 :
284285 # TODO: handle this
285- gdptrs.gdptr_print_error(" more than 8 params is not supported ! " , " _object_call" , " " , 0 , False )
286+ gdptrs.gdptr_print_error(" Calling with more than 14 parameters is not supported (wtf are you calling ? :/) " , " _object_call" , " " , 0 , False )
286287 return None
287- cdef gd_variant_t[9 ] variant_args
288- cdef (gd_variant_t* )[9 ] variant_args_ptrs
288+ cdef gd_variant_t[15 ] variant_args
289+ cdef (gd_variant_t* )[15 ] variant_args_ptrs
289290 for i in range (args_with_meth_len):
290291 variant_args_ptrs[i] = & variant_args[i]
291292
292293 # TODO: provide a helper for string name from Python str creation
293294 cdef gd_string_name_t meth_gdstrname = gdapi.gd_string_name_from_unchecked_pystr(meth)
294295 variant_args[0 ] = gdapi.gd_string_name_into_variant(& meth_gdstrname)
295- gdapi.gd_string_name_del(& meth_gdstrname)
296- # TODO: rename !
297- # Into conversion steals the owneship, so no need to delete meth_gdstrname
296+ # Note `gd_string_name_into_variant(&meth_gdstrname)` already calls `meth_gdstrname`'s destructor
298297
299298 for i, arg in enumerate (args, 1 ):
300299 variant_args[i] = ensure_is_gdany_and_borrow_ref(arg)
@@ -309,11 +308,10 @@ cdef object _object_call(gd_object_t obj, str meth, list args):
309308 & ret,
310309 & call_error,
311310 )
312- for i in range (args_with_meth_len):
313- gdapi.gd_variant_del(& variant_args[i])
314- # gdapi.gd_variant_del(&variant_args[0]) # Only param we created without stealing ownership
311+ # In Godot the callee is responsible to destroy the provided parameters.
312+ # Hence we don't have to call `gd_variant_del()` on `variant_args`.
315313 if call_error.error == gdextension_interface.GDEXTENSION_CALL_OK:
316- # No need to destroy ret given the conversion has stolen ownership on data !
314+ # Note `gd_variant_steal_into_pyobj(&ret)` already calls ` ret`'s destructor
317315 return gd_variant_steal_into_pyobj(& ret)
318316
319317 # TODO: improve ret error raised exception type ?
0 commit comments