Fix Callable::bind usage in connections_dialog.h and packed_scene.cpp

* Callable::bind takes an array of pointers to Variant
* Fixes #57057
This commit is contained in:
C.Even 2022-03-29 11:48:49 +08:00
parent c5efda5f4e
commit 619d9d143b
2 changed files with 10 additions and 4 deletions

View File

@ -93,8 +93,11 @@ public:
if (unbinds > 0) {
return Callable(target, method).unbind(unbinds);
} else if (!binds.is_empty()) {
const Variant *args = binds.ptr();
return Callable(target, method).bind(&args, binds.size());
const Variant **argptrs = (const Variant **)alloca(sizeof(Variant *) * binds.size());
for (int i = 0; i < binds.size(); i++) {
argptrs[i] = &binds[i];
}
return Callable(target, method).bind(argptrs, binds.size());
} else {
return Callable(target, method);
}

View File

@ -362,8 +362,11 @@ Node *SceneState::instantiate(GenEditState p_edit_state) const {
}
}
const Variant *args = binds.ptr();
callable = callable.bind(&args, binds.size());
const Variant **argptrs = (const Variant **)alloca(sizeof(Variant *) * binds.size());
for (int j = 0; j < binds.size(); j++) {
argptrs[j] = &binds[j];
}
callable = callable.bind(argptrs, binds.size());
}
cfrom->connect(snames[c.signal], callable, varray(), CONNECT_PERSIST | c.flags);