[vala/staging] codegen: Cast vfunc pointer for property-accessor override



commit 82951ca5406bf67b79a7ed9a3963c28ab65498bb
Author: Rico Tzschichholz <ricotz ubuntu com>
Date:   Thu Mar 2 08:58:44 2017 +0100

    codegen: Cast vfunc pointer for property-accessor override

 codegen/valagtypemodule.vala |   10 +++++++---
 1 files changed, 7 insertions(+), 3 deletions(-)
---
diff --git a/codegen/valagtypemodule.vala b/codegen/valagtypemodule.vala
index 11d2f6d..8196971 100644
--- a/codegen/valagtypemodule.vala
+++ b/codegen/valagtypemodule.vala
@@ -1239,7 +1239,7 @@ public class Vala.GTypeModule : GErrorModule {
                        if (prop.base_property == null) {
                                continue;
                        }
-                       var base_type = prop.base_property.parent_symbol;
+                       var base_type = (ObjectTypeSymbol) prop.base_property.parent_symbol;
                        
                        var ccast = new CCodeFunctionCall (new CCodeIdentifier ("%s_CLASS".printf 
(get_ccode_upper_case_name (base_type))));
                        ccast.add_argument (new CCodeIdentifier ("klass"));
@@ -1247,11 +1247,15 @@ public class Vala.GTypeModule : GErrorModule {
                        if (!get_ccode_no_accessor_method (prop.base_property) && 
!get_ccode_concrete_accessor (prop.base_property)) {
                                if (prop.get_accessor != null) {
                                        string cname = CCodeBaseModule.get_ccode_real_name 
(prop.get_accessor);
-                                       ccode.add_assignment (new CCodeMemberAccess.pointer (ccast, 
"get_%s".printf (prop.name)), new CCodeIdentifier (cname));
+                                       CCodeExpression cfunc = new CCodeIdentifier (cname);
+                                       cfunc = cast_property_accessor_pointer (prop.get_accessor, cfunc, 
base_type);
+                                       ccode.add_assignment (new CCodeMemberAccess.pointer (ccast, 
"get_%s".printf (prop.name)), cfunc);
                                }
                                if (prop.set_accessor != null) {
                                        string cname = CCodeBaseModule.get_ccode_real_name 
(prop.set_accessor);
-                                       ccode.add_assignment (new CCodeMemberAccess.pointer (ccast, 
"set_%s".printf (prop.name)), new CCodeIdentifier (cname));
+                                       CCodeExpression cfunc = new CCodeIdentifier (cname);
+                                       cfunc = cast_property_accessor_pointer (prop.set_accessor, cfunc, 
base_type);
+                                       ccode.add_assignment (new CCodeMemberAccess.pointer (ccast, 
"set_%s".printf (prop.name)), cfunc);
                                }
                        }
                }


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