summaryrefslogtreecommitdiffstats
path: root/core/object/object.cpp
diff options
context:
space:
mode:
authorRémi Verschelde <rverschelde@gmail.com>2023-10-02 13:15:53 +0200
committerRémi Verschelde <rverschelde@gmail.com>2023-10-02 13:15:53 +0200
commite95b7e84a46fb47a7981b030a07499dba969fb95 (patch)
treebae0893558467a10341d5a7cdc02047328792f37 /core/object/object.cpp
parent7588e3ff0dd7f5e522009f770f99fe593d1ebdb0 (diff)
parentaff767ef0787db47890a4e33d567b25c4b8ec060 (diff)
downloadredot-engine-e95b7e84a46fb47a7981b030a07499dba969fb95.tar.gz
Merge pull request #80844 from dalexeev/fix-callable-expected-argc
Fix expected argument count for `Callable` call errors
Diffstat (limited to 'core/object/object.cpp')
-rw-r--r--core/object/object.cpp18
1 files changed, 10 insertions, 8 deletions
diff --git a/core/object/object.cpp b/core/object/object.cpp
index 0a6cd32f3c..f62b93d0ff 100644
--- a/core/object/object.cpp
+++ b/core/object/object.cpp
@@ -617,7 +617,7 @@ void Object::get_method_list(List<MethodInfo> *p_list) const {
Variant Object::_call_bind(const Variant **p_args, int p_argcount, Callable::CallError &r_error) {
if (p_argcount < 1) {
r_error.error = Callable::CallError::CALL_ERROR_TOO_FEW_ARGUMENTS;
- r_error.argument = 0;
+ r_error.expected = 1;
return Variant();
}
@@ -636,7 +636,7 @@ Variant Object::_call_bind(const Variant **p_args, int p_argcount, Callable::Cal
Variant Object::_call_deferred_bind(const Variant **p_args, int p_argcount, Callable::CallError &r_error) {
if (p_argcount < 1) {
r_error.error = Callable::CallError::CALL_ERROR_TOO_FEW_ARGUMENTS;
- r_error.argument = 0;
+ r_error.expected = 1;
return Variant();
}
@@ -715,12 +715,11 @@ Variant Object::callp(const StringName &p_method, const Variant **p_args, int p_
//free must be here, before anything, always ready
#ifdef DEBUG_ENABLED
if (p_argcount != 0) {
- r_error.argument = 0;
r_error.error = Callable::CallError::CALL_ERROR_TOO_MANY_ARGUMENTS;
+ r_error.expected = 0;
return Variant();
}
if (Object::cast_to<RefCounted>(this)) {
- r_error.argument = 0;
r_error.error = Callable::CallError::CALL_ERROR_INVALID_METHOD;
ERR_FAIL_V_MSG(Variant(), "Can't 'free' a reference.");
}
@@ -1036,14 +1035,17 @@ struct _ObjectSignalDisconnectData {
};
Error Object::_emit_signal(const Variant **p_args, int p_argcount, Callable::CallError &r_error) {
- r_error.error = Callable::CallError::CALL_ERROR_TOO_FEW_ARGUMENTS;
+ if (unlikely(p_argcount < 1)) {
+ r_error.error = Callable::CallError::CALL_ERROR_TOO_FEW_ARGUMENTS;
+ r_error.expected = 1;
+ ERR_FAIL_V(Error::ERR_INVALID_PARAMETER);
+ }
- ERR_FAIL_COND_V(p_argcount < 1, Error::ERR_INVALID_PARAMETER);
- if (p_args[0]->get_type() != Variant::STRING_NAME && p_args[0]->get_type() != Variant::STRING) {
+ if (unlikely(p_args[0]->get_type() != Variant::STRING_NAME && p_args[0]->get_type() != Variant::STRING)) {
r_error.error = Callable::CallError::CALL_ERROR_INVALID_ARGUMENT;
r_error.argument = 0;
r_error.expected = Variant::STRING_NAME;
- ERR_FAIL_COND_V(p_args[0]->get_type() != Variant::STRING_NAME && p_args[0]->get_type() != Variant::STRING, Error::ERR_INVALID_PARAMETER);
+ ERR_FAIL_V(Error::ERR_INVALID_PARAMETER);
}
r_error.error = Callable::CallError::CALL_OK;