}
if (requires_destroy (m.return_type)) {
- /* this is very evil. */
- var v = new LocalVariable (m.return_type, ".result");
- ccode.add_expression (destroy_local (v));
+ if (get_ccode_array_length (m) || !(m.return_type is ArrayType)) {
+ /* this is very evil. */
+ var v = new LocalVariable (m.return_type, ".result");
+ ccode.add_expression (destroy_local (v));
+ } else {
+ var v = new GLibValue (m.return_type, new CCodeIdentifier ("_data_->result"), true);
+ v.array_null_terminated = get_ccode_array_null_terminated (m);
+ ccode.add_expression (destroy_value (v));
+ }
}
if (m.binding == MemberBinding.INSTANCE) {
asynchronous/bug659886.vala \
asynchronous/bug661961.vala \
asynchronous/bug742621.vala \
+ asynchronous/bug762819.vala \
asynchronous/closures.vala \
asynchronous/generator.vala \
asynchronous/yield.vala \
--- /dev/null
+abstract class Bar : GLib.Object {
+ [CCode (array_length = false, array_null_terminated = true)]
+ public abstract async string[] get_string_async ();
+}
+
+class Foo : Bar {
+ public override async string[] get_string_async () {
+ return { "foo", "bar" };
+ }
+}
+
+void main () {
+ var loop = new MainLoop ();
+ var foo = new Foo ();
+ foo.get_string_async.begin ((obj, res) => {
+ var result = foo.get_string_async.end (res);
+ assert (result.length == 2);
+ assert (result[1] == "bar");
+ loop.quit ();
+ });
+ loop.run ();
+}