You've already forked godot
mirror of
https://github.com/godotengine/godot.git
synced 2025-11-20 14:45:44 +00:00
Merge pull request #98713 from dalexeev/core-fix-callable-get-bound-arguments
Core: Fix `Callable.get_bound_arguments{,_count}()` return incorrect data
This commit is contained in:
@@ -3664,18 +3664,20 @@ String Variant::get_call_error_text(Object *p_base, const StringName &p_method,
|
||||
|
||||
String Variant::get_callable_error_text(const Callable &p_callable, const Variant **p_argptrs, int p_argcount, const Callable::CallError &ce) {
|
||||
Vector<Variant> binds;
|
||||
int args_bound;
|
||||
p_callable.get_bound_arguments_ref(binds, args_bound);
|
||||
if (args_bound <= 0) {
|
||||
return get_call_error_text(p_callable.get_object(), p_callable.get_method(), p_argptrs, MAX(0, p_argcount + args_bound), ce);
|
||||
p_callable.get_bound_arguments_ref(binds);
|
||||
|
||||
int args_unbound = p_callable.get_unbound_arguments_count();
|
||||
|
||||
if (p_argcount - args_unbound < 0) {
|
||||
return "Callable unbinds " + itos(args_unbound) + " arguments, but called with " + itos(p_argcount);
|
||||
} else {
|
||||
Vector<const Variant *> argptrs;
|
||||
argptrs.resize(p_argcount + binds.size());
|
||||
for (int i = 0; i < p_argcount; i++) {
|
||||
argptrs.resize(p_argcount - args_unbound + binds.size());
|
||||
for (int i = 0; i < p_argcount - args_unbound; i++) {
|
||||
argptrs.write[i] = p_argptrs[i];
|
||||
}
|
||||
for (int i = 0; i < binds.size(); i++) {
|
||||
argptrs.write[i + p_argcount] = &binds[i];
|
||||
argptrs.write[i + p_argcount - args_unbound] = &binds[i];
|
||||
}
|
||||
return get_call_error_text(p_callable.get_object(), p_callable.get_method(), (const Variant **)argptrs.ptr(), argptrs.size(), ce);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user