diff options
author | Rico Tzschichholz <ricotz@ubuntu.com> | 2019-10-03 10:43:22 +0200 |
---|---|---|
committer | Rico Tzschichholz <ricotz@ubuntu.com> | 2019-10-03 15:13:32 +0200 |
commit | bab871f3a10c124465db5c47f1815bacd99e728f (patch) | |
tree | 710352b32472a12ef11850bd910c4da143367c3b /tests/methods | |
parent | 1bce8c0287e12783e846ee52b1eca1526a0510bc (diff) | |
download | vala-bab871f3a10c124465db5c47f1815bacd99e728f.tar.gz |
codegen: Allow passing/retrieving any delegate to/from varargs parameter
Initialize target/notify cvalues of delegate-typed arguments/result of
inferred varargs parameters and va_list.arg() calls.
Only the actual function pointer will be passed or retrieved. The target
and destroy values will be null.
Diffstat (limited to 'tests/methods')
-rw-r--r-- | tests/methods/varargs-delegate.vala | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/tests/methods/varargs-delegate.vala b/tests/methods/varargs-delegate.vala new file mode 100644 index 000000000..a797d4c5d --- /dev/null +++ b/tests/methods/varargs-delegate.vala @@ -0,0 +1,30 @@ +delegate string Foo (); + +string foo (void* data) { + return "foo"; +} + +void bar (int first, ...) { + assert (first == 23); + var args = va_list (); + Foo** out_func = args.arg (); + *out_func = (Foo*) foo; +} + +void baz (int first, ...) { + assert (first == 42); + var args = va_list (); + Foo func = args.arg (); + assert (func () == "foo"); +} + +void main () { + { + Foo func; + bar (23, out func); + assert (func () == "foo"); + } + { + baz (42, foo); + } +} |