From: Jürg Billeter Date: Fri, 16 Oct 2009 15:56:19 +0000 (+0200) Subject: GAsync: Fix abstract interface implementations X-Git-Tag: 0.7.8~42 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=e4a3bc64f91a4142389a86c71916ea5a4ae924c7;p=thirdparty%2Fvala.git GAsync: Fix abstract interface implementations Fixes bug 598698. --- diff --git a/codegen/valagtypemodule.vala b/codegen/valagtypemodule.vala index 6f3375682..cd8135e61 100644 --- a/codegen/valagtypemodule.vala +++ b/codegen/valagtypemodule.vala @@ -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))); } } diff --git a/tests/Makefile.am b/tests/Makefile.am index bb6ac8b1c..84b888193 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -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 index 000000000..5b57d465e --- /dev/null +++ b/tests/asynchronous/bug598698.vala @@ -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 () { +}