Merge pull request #1404 from AThousandShips/virt_fix

Fix crash on virtual method calls
pull/1401/merge
David Snopek 2024-03-05 11:50:02 -06:00 committed by GitHub
commit f444616553
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
1 changed files with 2 additions and 5 deletions

View File

@ -78,7 +78,8 @@ def generate_virtual_version(argcount, const=False, returns=False):
if (::godot::internal::gdextension_interface_object_has_script_method(_owner, &_gdvirtual_##m_name##_sn)) { \\ if (::godot::internal::gdextension_interface_object_has_script_method(_owner, &_gdvirtual_##m_name##_sn)) { \\
GDExtensionCallError ce;\\ GDExtensionCallError ce;\\
$CALLSIARGS\\ $CALLSIARGS\\
$CALLSIBEGIN::godot::internal::gdextension_interface_object_call_script_method(_owner, &_gdvirtual_##m_name##_sn, $CALLSIARGPASS, $CALLSIRETPASS, &ce);\\ Variant ret;\\
::godot::internal::gdextension_interface_object_call_script_method(_owner, &_gdvirtual_##m_name##_sn, $CALLSIARGPASS, &ret, &ce);\\
if (ce.error == GDEXTENSION_CALL_OK) {\\ if (ce.error == GDEXTENSION_CALL_OK) {\\
$CALLSIRET\\ $CALLSIRET\\
return true;\\ return true;\\
@ -160,12 +161,8 @@ def generate_virtual_version(argcount, const=False, returns=False):
if argcount > 0: if argcount > 0:
callargtext += ", " callargtext += ", "
callargtext += "m_ret &r_ret" callargtext += "m_ret &r_ret"
s = s.replace("$CALLSIBEGIN", "Variant ret;\\\n\t\t\t")
s = s.replace("$CALLSIRETPASS", "&ret")
s = s.replace("$CALLSIRET", "r_ret = VariantCaster<m_ret>::cast(ret);") s = s.replace("$CALLSIRET", "r_ret = VariantCaster<m_ret>::cast(ret);")
else: else:
s = s.replace("$CALLSIBEGIN", "")
s = s.replace("$CALLSIRETPASS", "nullptr")
s = s.replace("\t\t\t\t$CALLSIRET\\\n", "") s = s.replace("\t\t\t\t$CALLSIRET\\\n", "")
s = s.replace(" $ARG", argtext) s = s.replace(" $ARG", argtext)