]> git.ipfire.org Git - thirdparty/vala.git/commitdiff
GAsync: Fix abstract interface implementations
authorJürg Billeter <j@bitron.ch>
Fri, 16 Oct 2009 15:56:19 +0000 (17:56 +0200)
committerJürg Billeter <j@bitron.ch>
Fri, 16 Oct 2009 15:56:19 +0000 (17:56 +0200)
Fixes bug 598698.

codegen/valagtypemodule.vala
tests/Makefile.am
tests/asynchronous/bug598698.vala [new file with mode: 0644]

index 6f33756824c3600273c6dca354311444f4709db1..cd8135e61088a3eb51b11d002c5370fe055252da 100644 (file)
@@ -1278,7 +1278,12 @@ internal class Vala.GTypeModule : GErrorModule {
                        init_block.add_statement (new CCodeExpressionStatement (new CCodeAssignment (new CCodeMemberAccess.pointer (ciface, m.base_interface_method.vfunc_name), cfunc)));
 
                        if (m.coroutine) {
-                               init_block.add_statement (new CCodeExpressionStatement (new CCodeAssignment (new CCodeMemberAccess.pointer (ciface, m.base_interface_method.get_finish_vfunc_name ()), new CCodeIdentifier (m.get_finish_real_cname ()))));
+                               if (m.is_abstract || m.is_virtual) {
+                                       cfunc = new CCodeIdentifier (m.get_finish_cname ());
+                               } else {
+                                       cfunc = new CCodeIdentifier (m.get_finish_real_cname ());
+                               }
+                               init_block.add_statement (new CCodeExpressionStatement (new CCodeAssignment (new CCodeMemberAccess.pointer (ciface, m.base_interface_method.get_finish_vfunc_name ()), cfunc)));
                        }
                }
 
index bb6ac8b1c442acd85091e7d5b2167d1681b160ae..84b888193b81228684b1dcbff9f6ce7f056b26dd 100644 (file)
@@ -64,6 +64,7 @@ TESTS = \
        asynchronous/bug596177.vala \
        asynchronous/bug597294.vala \
        asynchronous/bug598677.vala \
+       asynchronous/bug598698.vala \
        dbus/basic-types.test \
        dbus/arrays.test \
        dbus/async.test \
diff --git a/tests/asynchronous/bug598698.vala b/tests/asynchronous/bug598698.vala
new file mode 100644 (file)
index 0000000..5b57d46
--- /dev/null
@@ -0,0 +1,10 @@
+public interface Foo {
+       public abstract async void do_foo ();
+}
+
+public abstract class Bar : Foo {
+       public abstract async void do_foo ();
+}
+
+void main () {
+}