MCPcopy Create free account
hub / github.com/Redot-Engine/redot-engine / call_const

Method call_const

core/object/object.cpp:888–934  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

886}
887
888Variant Object::call_const(const StringName &p_method, const Variant **p_args, int p_argcount, Callable::CallError &r_error) {
889 r_error.error = Callable::CallError::CALL_OK;
890
891 if (p_method == CoreStringName(free_)) {
892 // Free is not const, so fail.
893 r_error.error = Callable::CallError::CALL_ERROR_METHOD_NOT_CONST;
894 return Variant();
895 }
896
897 Variant ret;
898 OBJ_DEBUG_LOCK
899
900 if (script_instance) {
901 ret = script_instance->call_const(p_method, p_args, p_argcount, r_error);
902 //force jumptable
903 switch (r_error.error) {
904 case Callable::CallError::CALL_OK:
905 return ret;
906 case Callable::CallError::CALL_ERROR_INVALID_METHOD:
907 break;
908 case Callable::CallError::CALL_ERROR_METHOD_NOT_CONST:
909 break;
910 case Callable::CallError::CALL_ERROR_INVALID_ARGUMENT:
911 case Callable::CallError::CALL_ERROR_TOO_MANY_ARGUMENTS:
912 case Callable::CallError::CALL_ERROR_TOO_FEW_ARGUMENTS:
913 return ret;
914 case Callable::CallError::CALL_ERROR_INSTANCE_IS_NULL: {
915 }
916 }
917 }
918
919 //extension does not need this, because all methods are registered in MethodBind
920
921 MethodBind *method = ClassDB::get_method(get_class_name(), p_method);
922
923 if (method) {
924 if (!method->is_const()) {
925 r_error.error = Callable::CallError::CALL_ERROR_METHOD_NOT_CONST;
926 return ret;
927 }
928 ret = method->call(this, p_args, p_argcount, r_error);
929 } else {
930 r_error.error = Callable::CallError::CALL_ERROR_INVALID_METHOD;
931 }
932
933 return ret;
934}
935
936void Object::_notification_forward(int p_notification) {
937 _notification_forwardv(p_notification);

Callers 2

_executeMethod · 0.45
ifFunction · 0.45

Calls 3

is_constMethod · 0.80
VariantClass · 0.50
callMethod · 0.45

Tested by

no test coverage detected