From: Rico Tzschichholz Date: Sat, 25 Feb 2017 12:09:35 +0000 (+0100) Subject: codegen: Cast vfunc pointer assigns of abstract overrides X-Git-Tag: 0.35.6~4 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=64365c2957ae799285b6f446ee55374a7d4792a3;p=thirdparty%2Fvala.git codegen: Cast vfunc pointer assigns of abstract overrides https://bugzilla.gnome.org/show_bug.cgi?id=777958 --- diff --git a/codegen/valagtypemodule.vala b/codegen/valagtypemodule.vala index 7e5639f60..6b0c4daa8 100644 --- a/codegen/valagtypemodule.vala +++ b/codegen/valagtypemodule.vala @@ -1208,12 +1208,14 @@ public class Vala.GTypeModule : GErrorModule { if (m.base_method == null) { continue; } - var base_type = m.base_method.parent_symbol; + var base_type = (ObjectTypeSymbol) m.base_method.parent_symbol; // there is currently no default handler for abstract async methods if (!m.is_abstract || !m.coroutine) { + CCodeExpression cfunc = new CCodeIdentifier (get_ccode_real_name (m)); + cfunc = cast_method_pointer (m.base_method, cfunc, base_type); var ccast = new CCodeCastExpression (new CCodeIdentifier ("klass"), "%sClass *".printf (get_ccode_name (base_type))); - ccode.add_assignment (new CCodeMemberAccess.pointer (ccast, get_ccode_vfunc_name (m.base_method)), new CCodeIdentifier (get_ccode_real_name (m))); + ccode.add_assignment (new CCodeMemberAccess.pointer (ccast, get_ccode_vfunc_name (m.base_method)), cfunc); if (m.coroutine) { ccode.add_assignment (new CCodeMemberAccess.pointer (ccast, get_ccode_finish_vfunc_name (m.base_method)), new CCodeIdentifier (get_ccode_finish_real_name (m)));