[vala/0.34] codegen: Cast vfunc pointer assigns of abstract overrides



commit 438b7656f6a1632f98a2a7b3eef3d9bc90b4777f
Author: Rico Tzschichholz <ricotz ubuntu com>
Date:   Sat Feb 25 13:09:35 2017 +0100

    codegen: Cast vfunc pointer assigns of abstract overrides
    
    https://bugzilla.gnome.org/show_bug.cgi?id=777958

 codegen/valagtypemodule.vala |    8 +++++---
 1 files changed, 5 insertions(+), 3 deletions(-)
---
diff --git a/codegen/valagtypemodule.vala b/codegen/valagtypemodule.vala
index 2e6bb4e..0c8ad1b 100644
--- a/codegen/valagtypemodule.vala
+++ b/codegen/valagtypemodule.vala
@@ -1195,12 +1195,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) {
-                               var ccast = new CCodeCastExpression (new CCodeIdentifier ("klass"), 
get_ccode_name (base_type) + "Class *");
-                               ccode.add_assignment (new CCodeMemberAccess.pointer (ccast, 
get_ccode_vfunc_name (m.base_method)), new CCodeIdentifier (get_ccode_real_name (m)));
+                               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)), 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)));


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]