summaryrefslogtreecommitdiff
path: root/tests/methods
diff options
context:
space:
mode:
authorRico Tzschichholz <ricotz@ubuntu.com>2019-10-03 10:43:22 +0200
committerRico Tzschichholz <ricotz@ubuntu.com>2019-10-03 15:13:32 +0200
commitbab871f3a10c124465db5c47f1815bacd99e728f (patch)
tree710352b32472a12ef11850bd910c4da143367c3b /tests/methods
parent1bce8c0287e12783e846ee52b1eca1526a0510bc (diff)
downloadvala-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.vala30
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);
+ }
+}