diff options
author | Ricardo Buring <ricardo.buring@gmail.com> | 2022-09-20 22:32:46 +0200 |
---|---|---|
committer | Ricardo Buring <ricardo.buring@gmail.com> | 2022-09-21 08:25:48 +0200 |
commit | 0c2055d15d000f9e7070d401ff9e03d4bb2b339e (patch) | |
tree | 5f755c3cc43e9ab78c853c8b076139fa3b82faba /core/variant/callable.cpp | |
parent | e5594c26b14e75d8b75d1f697cf2bfbd6254a50c (diff) | |
download | redot-engine-0c2055d15d000f9e7070d401ff9e03d4bb2b339e.tar.gz |
Callable: add callv method
This method can be called from GDExtension.
Diffstat (limited to 'core/variant/callable.cpp')
-rw-r--r-- | core/variant/callable.cpp | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/core/variant/callable.cpp b/core/variant/callable.cpp index 28efb43fc5..b35e2f004b 100644 --- a/core/variant/callable.cpp +++ b/core/variant/callable.cpp @@ -63,6 +63,21 @@ void Callable::callp(const Variant **p_arguments, int p_argcount, Variant &r_ret } } +Variant Callable::callv(const Array &p_arguments) const { + int argcount = p_arguments.size(); + const Variant **argptrs = nullptr; + if (argcount) { + argptrs = (const Variant **)alloca(sizeof(Variant *) * argcount); + for (int i = 0; i < argcount; i++) { + argptrs[i] = &p_arguments[i]; + } + } + CallError ce; + Variant ret; + callp(argptrs, argcount, ret, ce); + return ret; +} + Error Callable::rpcp(int p_id, const Variant **p_arguments, int p_argcount, CallError &r_call_error) const { if (is_null()) { r_call_error.error = CallError::CALL_ERROR_INSTANCE_IS_NULL; |