summaryrefslogtreecommitdiffstats
path: root/core/variant/callable_bind.cpp
diff options
context:
space:
mode:
authorJuan Linietsky <reduzio@gmail.com>2023-01-06 15:37:53 +0100
committerJuan Linietsky <reduzio@gmail.com>2023-01-08 23:35:11 +0100
commit0e0ca01bce1adecde1de745d2b31d2ad0c12bf6b (patch)
treeaea57faa3c7e1a1f7cc2816fba45c4a688422623 /core/variant/callable_bind.cpp
parentb14f7aa9f92ff44135c283a9c88dab5ef9136d64 (diff)
downloadredot-engine-0e0ca01bce1adecde1de745d2b31d2ad0c12bf6b.tar.gz
Properly report Callable bound arguments
Fixes #63213 Adds a function: Callable::get_amount_of_arguments_bound() to query this in callables. Exposed to the engine API.
Diffstat (limited to 'core/variant/callable_bind.cpp')
-rw-r--r--core/variant/callable_bind.cpp8
1 files changed, 8 insertions, 0 deletions
diff --git a/core/variant/callable_bind.cpp b/core/variant/callable_bind.cpp
index 4713a49303..83035dc70d 100644
--- a/core/variant/callable_bind.cpp
+++ b/core/variant/callable_bind.cpp
@@ -87,6 +87,10 @@ const Callable *CallableCustomBind::get_base_comparator() const {
return &callable;
}
+int CallableCustomBind::get_bound_arguments_count() const {
+ return callable.get_bound_arguments_count() + binds.size();
+}
+
void CallableCustomBind::call(const Variant **p_arguments, int p_argcount, Variant &r_return_value, Callable::CallError &r_call_error) const {
const Variant **args = (const Variant **)alloca(sizeof(const Variant **) * (binds.size() + p_argcount));
for (int i = 0; i < p_argcount; i++) {
@@ -164,6 +168,10 @@ const Callable *CallableCustomUnbind::get_base_comparator() const {
return &callable;
}
+int CallableCustomUnbind::get_bound_arguments_count() const {
+ return callable.get_bound_arguments_count() - argcount;
+}
+
void CallableCustomUnbind::call(const Variant **p_arguments, int p_argcount, Variant &r_return_value, Callable::CallError &r_call_error) const {
if (argcount > p_argcount) {
r_call_error.error = Callable::CallError::CALL_ERROR_TOO_FEW_ARGUMENTS;