Update `GDVIRTUAL*()` macros to match Godot 4.4
parent
375c0d1575
commit
4a9409a30f
|
@ -70,10 +70,9 @@ def generate_wrappers(target):
|
||||||
f.write(txt)
|
f.write(txt)
|
||||||
|
|
||||||
|
|
||||||
def generate_virtual_version(argcount, const=False, returns=False):
|
def generate_virtual_version(argcount, const=False, returns=False, required=False):
|
||||||
s = """#define GDVIRTUAL$VER($RET m_name $ARG)\\
|
s = """#define GDVIRTUAL$VER($RET m_name $ARG)\\
|
||||||
::godot::StringName _gdvirtual_##m_name##_sn = #m_name;\\
|
::godot::StringName _gdvirtual_##m_name##_sn = #m_name;\\
|
||||||
template <bool required>\\
|
|
||||||
_FORCE_INLINE_ bool _gdvirtual_##m_name##_call($CALLARGS) $CONST {\\
|
_FORCE_INLINE_ bool _gdvirtual_##m_name##_call($CALLARGS) $CONST {\\
|
||||||
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;\\
|
||||||
|
@ -85,10 +84,8 @@ def generate_virtual_version(argcount, const=False, returns=False):
|
||||||
return true;\\
|
return true;\\
|
||||||
}\\
|
}\\
|
||||||
}\\
|
}\\
|
||||||
if (required) {\\
|
$REQCHECK\\
|
||||||
ERR_PRINT_ONCE("Required virtual method " + get_class() + "::" + #m_name + " must be overridden before calling.");\\
|
|
||||||
$RVOID\\
|
$RVOID\\
|
||||||
}\\
|
|
||||||
return false;\\
|
return false;\\
|
||||||
}\\
|
}\\
|
||||||
_FORCE_INLINE_ bool _gdvirtual_##m_name##_overridden() const {\\
|
_FORCE_INLINE_ bool _gdvirtual_##m_name##_overridden() const {\\
|
||||||
|
@ -106,6 +103,7 @@ def generate_virtual_version(argcount, const=False, returns=False):
|
||||||
|
|
||||||
sproto = str(argcount)
|
sproto = str(argcount)
|
||||||
method_info = ""
|
method_info = ""
|
||||||
|
method_flags = "METHOD_FLAG_VIRTUAL"
|
||||||
if returns:
|
if returns:
|
||||||
sproto += "R"
|
sproto += "R"
|
||||||
s = s.replace("$RET", "m_ret,")
|
s = s.replace("$RET", "m_ret,")
|
||||||
|
@ -114,16 +112,26 @@ def generate_virtual_version(argcount, const=False, returns=False):
|
||||||
method_info += "\t\tmethod_info.return_val_metadata = ::godot::GetTypeInfo<m_ret>::METADATA;"
|
method_info += "\t\tmethod_info.return_val_metadata = ::godot::GetTypeInfo<m_ret>::METADATA;"
|
||||||
else:
|
else:
|
||||||
s = s.replace("$RET ", "")
|
s = s.replace("$RET ", "")
|
||||||
s = s.replace("\t\t\t$RVOID\\\n", "")
|
s = s.replace("\t\t$RVOID\\\n", "")
|
||||||
|
|
||||||
if const:
|
if const:
|
||||||
sproto += "C"
|
sproto += "C"
|
||||||
|
method_flags += " | METHOD_FLAG_CONST"
|
||||||
s = s.replace("$CONST", "const")
|
s = s.replace("$CONST", "const")
|
||||||
s = s.replace("$METHOD_FLAGS", "::godot::METHOD_FLAG_VIRTUAL | ::godot::METHOD_FLAG_CONST")
|
|
||||||
else:
|
else:
|
||||||
s = s.replace("$CONST ", "")
|
s = s.replace("$CONST ", "")
|
||||||
s = s.replace("$METHOD_FLAGS", "::godot::METHOD_FLAG_VIRTUAL")
|
|
||||||
|
|
||||||
|
if required:
|
||||||
|
sproto += "_REQUIRED"
|
||||||
|
method_flags += " | METHOD_FLAG_VIRTUAL_REQUIRED"
|
||||||
|
s = s.replace(
|
||||||
|
"$REQCHECK",
|
||||||
|
'ERR_PRINT_ONCE("Required virtual method " + get_class() + "::" + #m_name + " must be overridden before calling.");',
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
s = s.replace("\t\t$REQCHECK\\\n", "")
|
||||||
|
|
||||||
|
s = s.replace("$METHOD_FLAGS", method_flags)
|
||||||
s = s.replace("$VER", sproto)
|
s = s.replace("$VER", sproto)
|
||||||
argtext = ""
|
argtext = ""
|
||||||
callargtext = ""
|
callargtext = ""
|
||||||
|
@ -190,6 +198,10 @@ def generate_virtuals(target):
|
||||||
txt += generate_virtual_version(i, False, True)
|
txt += generate_virtual_version(i, False, True)
|
||||||
txt += generate_virtual_version(i, True, False)
|
txt += generate_virtual_version(i, True, False)
|
||||||
txt += generate_virtual_version(i, True, True)
|
txt += generate_virtual_version(i, True, True)
|
||||||
|
txt += generate_virtual_version(i, False, False, True)
|
||||||
|
txt += generate_virtual_version(i, False, True, True)
|
||||||
|
txt += generate_virtual_version(i, True, False, True)
|
||||||
|
txt += generate_virtual_version(i, True, True, True)
|
||||||
|
|
||||||
txt += "#endif // GDEXTENSION_GDVIRTUAL_GEN_H\n"
|
txt += "#endif // GDEXTENSION_GDVIRTUAL_GEN_H\n"
|
||||||
|
|
||||||
|
|
|
@ -505,11 +505,8 @@ private:
|
||||||
// Don't use this for your classes, use GDCLASS() instead.
|
// Don't use this for your classes, use GDCLASS() instead.
|
||||||
#define GDEXTENSION_CLASS(m_class, m_inherits) GDEXTENSION_CLASS_ALIAS(m_class, m_class, m_inherits)
|
#define GDEXTENSION_CLASS(m_class, m_inherits) GDEXTENSION_CLASS_ALIAS(m_class, m_class, m_inherits)
|
||||||
|
|
||||||
#define GDVIRTUAL_CALL(m_name, ...) _gdvirtual_##m_name##_call<false>(__VA_ARGS__)
|
#define GDVIRTUAL_CALL(m_name, ...) _gdvirtual_##m_name##_call(__VA_ARGS__)
|
||||||
#define GDVIRTUAL_CALL_PTR(m_obj, m_name, ...) m_obj->_gdvirtual_##m_name##_call<false>(__VA_ARGS__)
|
#define GDVIRTUAL_CALL_PTR(m_obj, m_name, ...) m_obj->_gdvirtual_##m_name##_call(__VA_ARGS__)
|
||||||
|
|
||||||
#define GDVIRTUAL_REQUIRED_CALL(m_name, ...) _gdvirtual_##m_name##_call<true>(__VA_ARGS__)
|
|
||||||
#define GDVIRTUAL_REQUIRED_CALL_PTR(m_obj, m_name, ...) m_obj->_gdvirtual_##m_name##_call<true>(__VA_ARGS__)
|
|
||||||
|
|
||||||
#define GDVIRTUAL_BIND(m_name, ...) ::godot::ClassDB::add_virtual_method(get_class_static(), _gdvirtual_##m_name##_get_method_info(), ::godot::snarray(__VA_ARGS__));
|
#define GDVIRTUAL_BIND(m_name, ...) ::godot::ClassDB::add_virtual_method(get_class_static(), _gdvirtual_##m_name##_get_method_info(), ::godot::snarray(__VA_ARGS__));
|
||||||
#define GDVIRTUAL_IS_OVERRIDDEN(m_name) _gdvirtual_##m_name##_overridden()
|
#define GDVIRTUAL_IS_OVERRIDDEN(m_name) _gdvirtual_##m_name##_overridden()
|
||||||
|
|
Loading…
Reference in New Issue