]> git.ipfire.org Git - thirdparty/vala.git/commitdiff
codegen: Cast vfunc of property accessors by using cast_method_pointer()
authorRico Tzschichholz <ricotz@ubuntu.com>
Sun, 5 Feb 2023 18:33:15 +0000 (19:33 +0100)
committerRico Tzschichholz <ricotz@ubuntu.com>
Thu, 9 Feb 2023 14:44:20 +0000 (15:44 +0100)
Found by -Wincompatible-function-pointer-types

See https://gitlab.gnome.org/GNOME/vala/issues/1408

13 files changed:
codegen/valagtypemodule.vala
tests/methods/array-length-type.c-expected
tests/objects/bug667668.c-expected
tests/objects/bug702736.c-expected
tests/objects/bug741465.c-expected
tests/objects/bug764481.c-expected
tests/objects/bug779219.c-expected
tests/objects/member-initializer-base-properties.c-expected
tests/objects/properties.c-expected
tests/objects/property-array.c-expected
tests/objects/property-delegate-owned.c-expected
tests/objects/property-delegate.c-expected
tests/objects/property-real-struct-assignment.c-expected

index 0d9fae48269da53f51d49c8b76a74449b0505977..34c0773d4d3cdac35e8c5536c35b4f9eab164215 100644 (file)
@@ -1365,14 +1365,16 @@ public class Vala.GTypeModule : GErrorModule {
                                if (prop.get_accessor != null) {
                                        generate_property_accessor_declaration (prop.base_property.get_accessor, cfile);
 
-                                       string cname = 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 (get_ccode_real_name (prop.get_accessor));
+                                       cfunc = cast_method_pointer (prop.base_property.get_accessor.get_method (), cfunc, base_type);
+                                       ccode.add_assignment (new CCodeMemberAccess.pointer (ccast, "get_%s".printf (prop.name)), cfunc);
                                }
                                if (prop.set_accessor != null) {
                                        generate_property_accessor_declaration (prop.base_property.set_accessor, cfile);
 
-                                       string cname = 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 (get_ccode_real_name (prop.set_accessor));
+                                       cfunc = cast_method_pointer (prop.base_property.set_accessor.get_method (), cfunc, base_type);
+                                       ccode.add_assignment (new CCodeMemberAccess.pointer (ccast, "set_%s".printf (prop.name)), cfunc);
                                }
                        }
                }
@@ -1533,7 +1535,7 @@ public class Vala.GTypeModule : GErrorModule {
 
                                        CCodeExpression cfunc = new CCodeIdentifier (cname);
                                        if (prop.is_abstract || prop.is_virtual) {
-                                               cfunc = cast_property_accessor_pointer (prop.get_accessor, cfunc, base_type);
+                                               cfunc = cast_method_pointer (prop.base_interface_property.get_accessor.get_method (), cfunc, base_type);
                                        }
                                        ccode.add_assignment (new CCodeMemberAccess.pointer (ciface, "get_%s".printf (prop.name)), cfunc);
                                }
@@ -1547,7 +1549,7 @@ public class Vala.GTypeModule : GErrorModule {
 
                                        CCodeExpression cfunc = new CCodeIdentifier (cname);
                                        if (prop.is_abstract || prop.is_virtual) {
-                                               cfunc = cast_property_accessor_pointer (prop.set_accessor, cfunc, base_type);
+                                               cfunc = cast_method_pointer (prop.base_interface_property.set_accessor.get_method (), cfunc, base_type);
                                        }
                                        ccode.add_assignment (new CCodeMemberAccess.pointer (ciface, "set_%s".printf (prop.name)), cfunc);
                                }
@@ -1587,7 +1589,7 @@ public class Vala.GTypeModule : GErrorModule {
 
                                        string cname = get_ccode_name (base_property.get_accessor);
                                        CCodeExpression cfunc = new CCodeIdentifier (cname);
-                                       cfunc = cast_property_accessor_pointer (prop.get_accessor, cfunc, iface);
+                                       cfunc = cast_method_pointer (base_property.get_accessor.get_method (), cfunc, iface);
                                        ccode.add_assignment (new CCodeMemberAccess.pointer (ciface, "get_%s".printf (prop.name)), cfunc);
                                }
                                if (base_property.set_accessor != null && prop.set_accessor != null) {
@@ -1595,7 +1597,7 @@ public class Vala.GTypeModule : GErrorModule {
 
                                        string cname = get_ccode_name (base_property.set_accessor);
                                        CCodeExpression cfunc = new CCodeIdentifier (cname);
-                                       cfunc = cast_property_accessor_pointer (prop.set_accessor, cfunc, iface);
+                                       cfunc = cast_method_pointer (base_property.set_accessor.get_method (), cfunc, iface);
                                        ccode.add_assignment (new CCodeMemberAccess.pointer (ciface, "set_%s".printf (prop.name)), cfunc);
                                }
                        }
@@ -1605,20 +1607,6 @@ public class Vala.GTypeModule : GErrorModule {
                cfile.add_function (iface_init);
        }
 
-       CCodeExpression cast_property_accessor_pointer (PropertyAccessor acc, CCodeExpression cfunc, ObjectTypeSymbol base_type) {
-               string cast;
-               if (acc.readable && acc.value_type.is_real_non_null_struct_type ()) {
-                       cast = "void (*) (%s *, %s *)".printf (get_ccode_name (base_type), get_ccode_name (acc.value_type));
-               } else if (acc.readable) {
-                       cast = "%s (*) (%s *)".printf (get_ccode_name (acc.value_type), get_ccode_name (base_type));
-               } else if (acc.value_type.is_real_non_null_struct_type ()) {
-                       cast = "void (*) (%s *, %s *)".printf (get_ccode_name (base_type), get_ccode_name (acc.value_type));
-               } else {
-                       cast = "void (*) (%s *, %s)".printf (get_ccode_name (base_type), get_ccode_name (acc.value_type));
-               }
-               return new CCodeCastExpression (cfunc, cast);
-       }
-
        CCodeExpression cast_method_pointer (Method m, CCodeExpression cfunc, ObjectTypeSymbol base_type, int direction = 3) {
                // Cast the function pointer to match the interface
                string cast;
@@ -1710,7 +1698,7 @@ public class Vala.GTypeModule : GErrorModule {
                                if (prop.base_property == null || is_gsource) {
                                        continue;
                                }
-                               var base_type = prop.base_property.parent_symbol;
+                               var base_type = (ObjectTypeSymbol) prop.base_property.parent_symbol;
 
                                var ccast = new CCodeCastExpression (new CCodeIdentifier ("self"), "%s *".printf (get_ccode_name (base_type)));
 
@@ -1718,14 +1706,16 @@ public class Vala.GTypeModule : GErrorModule {
                                        if (prop.get_accessor != null) {
                                                generate_property_accessor_declaration (prop.base_property.get_accessor, cfile);
 
-                                               string cname = 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 (get_ccode_real_name (prop.get_accessor));
+                                               cfunc = cast_method_pointer (prop.base_property.get_accessor.get_method (), cfunc, base_type);
+                                               ccode.add_assignment (new CCodeMemberAccess.pointer (ccast, "get_%s".printf (prop.name)), cfunc);
                                        }
                                        if (prop.set_accessor != null) {
                                                generate_property_accessor_declaration (prop.base_property.set_accessor, cfile);
 
-                                               string cname = 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 (get_ccode_real_name (prop.set_accessor));
+                                               cfunc = cast_method_pointer (prop.base_property.set_accessor.get_method (), cfunc, base_type);
+                                               ccode.add_assignment (new CCodeMemberAccess.pointer (ccast, "set_%s".printf (prop.name)), cfunc);
                                        }
                                }
                        }
index 85f9ab80b3637f50ebaa6da4e181b4182306107f..89d97931b262757632b01fe65fb22052681e740f 100644 (file)
@@ -734,8 +734,8 @@ foo_class_init (FooClass * klass,
        g_type_class_adjust_private_offset (klass, &Foo_private_offset);
        ((FooClass *) klass)->get_bar = (gint* (*) (Foo*, guint8*)) foo_real_get_bar;
        ((FooClass *) klass)->set_bar = (void (*) (Foo*, gint**, guint8*)) foo_real_set_bar;
-       FOO_CLASS (klass)->get_manar = foo_real_get_manar;
-       FOO_CLASS (klass)->set_manar = foo_real_set_manar;
+       FOO_CLASS (klass)->get_manar = (gint* (*) (Foo*, guint8*)) foo_real_get_manar;
+       FOO_CLASS (klass)->set_manar = (void (*) (Foo*, gint*, guint8)) foo_real_set_manar;
 }
 
 static void
@@ -1031,8 +1031,8 @@ bar_class_init (BarClass * klass,
        g_type_class_adjust_private_offset (klass, &Bar_private_offset);
        ((FooClass *) klass)->get_bar = (gint* (*) (Foo*, guint8*)) bar_real_get_bar;
        ((FooClass *) klass)->set_bar = (void (*) (Foo*, gint**, guint8*)) bar_real_set_bar;
-       FOO_CLASS (klass)->get_manar = bar_real_get_manar;
-       FOO_CLASS (klass)->set_manar = bar_real_set_manar;
+       FOO_CLASS (klass)->get_manar = (gint* (*) (Foo*, guint8*)) bar_real_get_manar;
+       FOO_CLASS (klass)->set_manar = (void (*) (Foo*, gint*, guint8)) bar_real_set_manar;
 }
 
 static void
index dc7a7e538c638566a0eb2a42de6576ea7b977ceb..6274e7ba6dea92e4956742694f0e6173030e33f1 100644 (file)
@@ -318,8 +318,8 @@ bar_class_init (BarClass * klass,
 {
        bar_parent_class = g_type_class_peek_parent (klass);
        g_type_class_adjust_private_offset (klass, &Bar_private_offset);
-       FOO_CLASS (klass)->get_foo = bar_real_get_foo;
-       FOO_CLASS (klass)->set_foo = bar_real_set_foo;
+       FOO_CLASS (klass)->get_foo = (gconstpointer (*) (Foo*)) bar_real_get_foo;
+       FOO_CLASS (klass)->set_foo = (void (*) (Foo*, gconstpointer)) bar_real_set_foo;
        G_OBJECT_CLASS (klass)->get_property = _vala_bar_get_property;
        G_OBJECT_CLASS (klass)->set_property = _vala_bar_set_property;
        G_OBJECT_CLASS (klass)->finalize = bar_finalize;
index 320686b7af9a08c0f559d27e555c5e415f815816..49621ee3c38891122d96f9d36e6ccfc7c9f8b169 100644 (file)
@@ -263,7 +263,7 @@ class_b_class_init (ClassBClass * klass,
                     gpointer klass_data)
 {
        class_b_parent_class = g_type_class_peek_parent (klass);
-       CLASS_A_CLASS (klass)->get_flags = class_b_real_get_flags;
+       CLASS_A_CLASS (klass)->get_flags = (gint (*) (ClassA*)) class_b_real_get_flags;
        G_OBJECT_CLASS (klass)->get_property = _vala_class_b_get_property;
        g_object_class_install_property (G_OBJECT_CLASS (klass), CLASS_B_FLAGS_PROPERTY, class_b_properties[CLASS_B_FLAGS_PROPERTY] = g_param_spec_int ("flags", "flags", "flags", G_MININT, G_MAXINT, 0, G_PARAM_STATIC_STRINGS | G_PARAM_READABLE));
 }
@@ -400,7 +400,7 @@ class_d_class_init (ClassDClass * klass,
                     gpointer klass_data)
 {
        class_d_parent_class = g_type_class_peek_parent (klass);
-       CLASS_A_CLASS (klass)->get_flags = class_d_real_get_flags;
+       CLASS_A_CLASS (klass)->get_flags = (gint (*) (ClassA*)) class_d_real_get_flags;
        G_OBJECT_CLASS (klass)->get_property = _vala_class_d_get_property;
        g_object_class_install_property (G_OBJECT_CLASS (klass), CLASS_D_FLAGS_PROPERTY, class_d_properties[CLASS_D_FLAGS_PROPERTY] = g_param_spec_int ("flags", "flags", "flags", G_MININT, G_MAXINT, 0, G_PARAM_STATIC_STRINGS | G_PARAM_READABLE));
 }
index 65e83ec69a7c33a98f360614889d2f8fbba075e4..d52a7a5604d2212886ed32989290cacb3e813937 100644 (file)
@@ -184,8 +184,8 @@ static void
 foo_instance_init (Foo * self)
 {
        ((AbstractFoo *) self)->foo = (const gchar* (*) (AbstractFoo*)) foo_real_foo;
-       ((AbstractFoo *) self)->get_prop = foo_real_get_prop;
-       ((AbstractFoo *) self)->set_prop = foo_real_set_prop;
+       ((AbstractFoo *) self)->get_prop = (gint (*) (AbstractFoo*)) foo_real_get_prop;
+       ((AbstractFoo *) self)->set_prop = (void (*) (AbstractFoo*, gint)) foo_real_set_prop;
 }
 
 Bar*
@@ -237,8 +237,8 @@ static void
 bar_instance_init (Bar * self)
 {
        ((AbstractFoo *) self)->foo = (const gchar* (*) (AbstractFoo*)) bar_real_foo;
-       ((AbstractFoo *) self)->get_prop = bar_real_get_prop;
-       ((AbstractFoo *) self)->set_prop = bar_real_set_prop;
+       ((AbstractFoo *) self)->get_prop = (gint (*) (AbstractFoo*)) bar_real_get_prop;
+       ((AbstractFoo *) self)->set_prop = (void (*) (AbstractFoo*, gint)) bar_real_set_prop;
 }
 
 static const gchar*
@@ -320,8 +320,8 @@ manam_instance_init (Manam * self)
 {
        ((Manam *) self)->foo = (const gchar* (*) (Manam*)) manam_real_foo;
        ((Manam *) self)->foo_plain = (gint (*) (Manam*)) manam_real_foo_plain;
-       ((Manam *) self)->get_prop = manam_real_get_prop;
-       ((Manam *) self)->set_prop = manam_real_set_prop;
+       ((Manam *) self)->get_prop = (gint (*) (Manam*)) manam_real_get_prop;
+       ((Manam *) self)->set_prop = (void (*) (Manam*, gint)) manam_real_set_prop;
        self->field = 23;
 }
 
index ea66bcc77b89c99e21e7cb5f74b0b405ff0ffb3f..b9404cec098ec7d0ce5e2fccd9694c71624f932d 100644 (file)
@@ -352,8 +352,8 @@ base_foo_class_init (BaseFooClass * klass,
 {
        base_foo_parent_class = g_type_class_peek_parent (klass);
        g_type_class_adjust_private_offset (klass, &BaseFoo_private_offset);
-       BASE_FOO_CLASS (klass)->get_st = base_foo_real_get_st;
-       BASE_FOO_CLASS (klass)->set_st = base_foo_real_set_st;
+       BASE_FOO_CLASS (klass)->get_st = (void (*) (BaseFoo*, Manam*)) base_foo_real_get_st;
+       BASE_FOO_CLASS (klass)->set_st = (void (*) (BaseFoo*, Manam*)) base_foo_real_set_st;
        G_OBJECT_CLASS (klass)->get_property = _vala_base_foo_get_property;
        G_OBJECT_CLASS (klass)->set_property = _vala_base_foo_set_property;
        G_OBJECT_CLASS (klass)->finalize = base_foo_finalize;
@@ -516,8 +516,8 @@ foo_class_init (FooClass * klass,
 {
        foo_parent_class = g_type_class_peek_parent (klass);
        g_type_class_adjust_private_offset (klass, &Foo_private_offset);
-       FOO_CLASS (klass)->get_st = foo_real_get_st;
-       FOO_CLASS (klass)->set_st = foo_real_set_st;
+       FOO_CLASS (klass)->get_st = (void (*) (Foo*, Manam*)) foo_real_get_st;
+       FOO_CLASS (klass)->set_st = (void (*) (Foo*, Manam*)) foo_real_set_st;
        G_OBJECT_CLASS (klass)->get_property = _vala_foo_get_property;
        G_OBJECT_CLASS (klass)->set_property = _vala_foo_set_property;
        G_OBJECT_CLASS (klass)->finalize = foo_finalize;
@@ -646,8 +646,8 @@ bar_class_init (BarClass * klass,
                 gpointer klass_data)
 {
        bar_parent_class = g_type_class_peek_parent (klass);
-       FOO_CLASS (klass)->get_st = bar_real_get_st;
-       FOO_CLASS (klass)->set_st = bar_real_set_st;
+       FOO_CLASS (klass)->get_st = (void (*) (Foo*, Manam*)) bar_real_get_st;
+       FOO_CLASS (klass)->set_st = (void (*) (Foo*, Manam*)) bar_real_set_st;
        G_OBJECT_CLASS (klass)->get_property = _vala_bar_get_property;
        G_OBJECT_CLASS (klass)->set_property = _vala_bar_set_property;
        g_object_class_install_property (G_OBJECT_CLASS (klass), BAR_ST_PROPERTY, bar_properties[BAR_ST_PROPERTY] = g_param_spec_boxed ("st", "st", "st", TYPE_MANAM, G_PARAM_STATIC_STRINGS | G_PARAM_READABLE | G_PARAM_WRITABLE));
@@ -765,8 +765,8 @@ baz_class_init (BazClass * klass,
                 gpointer klass_data)
 {
        baz_parent_class = g_type_class_peek_parent (klass);
-       BASE_FOO_CLASS (klass)->get_st = baz_real_get_st;
-       BASE_FOO_CLASS (klass)->set_st = baz_real_set_st;
+       BASE_FOO_CLASS (klass)->get_st = (void (*) (BaseFoo*, Manam*)) baz_real_get_st;
+       BASE_FOO_CLASS (klass)->set_st = (void (*) (BaseFoo*, Manam*)) baz_real_set_st;
        G_OBJECT_CLASS (klass)->get_property = _vala_baz_get_property;
        G_OBJECT_CLASS (klass)->set_property = _vala_baz_set_property;
        g_object_class_install_property (G_OBJECT_CLASS (klass), BAZ_ST_PROPERTY, baz_properties[BAZ_ST_PROPERTY] = g_param_spec_boxed ("st", "st", "st", TYPE_MANAM, G_PARAM_STATIC_STRINGS | G_PARAM_READABLE | G_PARAM_WRITABLE));
index 53fcd2158891b1361dd30a4371d1756190dcca84..d2eb9960943abc623454b0ba5c4a12a846c4b64d 100644 (file)
@@ -188,7 +188,7 @@ foo_ifoo_interface_init (IFooIface * iface,
                          gpointer iface_data)
 {
        foo_ifoo_parent_iface = g_type_interface_peek_parent (iface);
-       iface->get_foo = (gint (*) (IFoo *)) foo_get_foo;
+       iface->get_foo = (gint (*) (IFoo*)) foo_get_foo;
 }
 
 static void
@@ -264,7 +264,7 @@ bar_class_init (BarClass * klass,
                 gpointer klass_data)
 {
        bar_parent_class = g_type_class_peek_parent (klass);
-       FOO_CLASS (klass)->get_foo = bar_real_get_foo;
+       FOO_CLASS (klass)->get_foo = (gint (*) (Foo*)) bar_real_get_foo;
        G_OBJECT_CLASS (klass)->get_property = _vala_bar_get_property;
        g_object_class_install_property (G_OBJECT_CLASS (klass), BAR_FOO_PROPERTY, bar_properties[BAR_FOO_PROPERTY] = g_param_spec_int ("foo", "foo", "foo", G_MININT, G_MAXINT, 0, G_PARAM_STATIC_STRINGS | G_PARAM_READABLE));
 }
index 859afae4aca24bc99efd1676880426cea7245bbf..f5b763e4c06813adea362d75c44d15077366afca 100644 (file)
@@ -390,8 +390,8 @@ bar_class_init (BarClass * klass,
        bar_parent_class = g_type_class_peek_parent (klass);
        ((BarClass *) klass)->finalize = bar_finalize;
        g_type_class_adjust_private_offset (klass, &Bar_private_offset);
-       BAR_CLASS (klass)->get_prop_v = bar_real_get_prop_v;
-       BAR_CLASS (klass)->set_prop_v = bar_real_set_prop_v;
+       BAR_CLASS (klass)->get_prop_v = (const gchar* (*) (Bar*)) bar_real_get_prop_v;
+       BAR_CLASS (klass)->set_prop_v = (void (*) (Bar*, const gchar*)) bar_real_set_prop_v;
 }
 
 static void
@@ -530,8 +530,8 @@ foo_class_init (FooClass * klass,
        foo_parent_class = g_type_class_peek_parent (klass);
        ((BarClass *) klass)->finalize = foo_finalize;
        g_type_class_adjust_private_offset (klass, &Foo_private_offset);
-       BAR_CLASS (klass)->get_prop_v = foo_real_get_prop_v;
-       BAR_CLASS (klass)->set_prop_v = foo_real_set_prop_v;
+       BAR_CLASS (klass)->get_prop_v = (const gchar* (*) (Bar*)) foo_real_get_prop_v;
+       BAR_CLASS (klass)->set_prop_v = (void (*) (Bar*, const gchar*)) foo_real_set_prop_v;
 }
 
 static void
index 107e1bb3bffbcd157c1955de4e61cbe71f878394..22ed9869b4500cd2cb98668a873fe7260c49263b 100644 (file)
@@ -1637,8 +1637,8 @@ maman_bar_class_init (MamanBarClass * klass,
 {
        maman_bar_parent_class = g_type_class_peek_parent (klass);
        g_type_class_adjust_private_offset (klass, &MamanBar_private_offset);
-       MAMAN_FOO_CLASS (klass)->get_abstract_base_property = maman_bar_real_get_abstract_base_property;
-       MAMAN_FOO_CLASS (klass)->set_abstract_base_property = maman_bar_real_set_abstract_base_property;
+       MAMAN_FOO_CLASS (klass)->get_abstract_base_property = (gint (*) (MamanFoo*)) maman_bar_real_get_abstract_base_property;
+       MAMAN_FOO_CLASS (klass)->set_abstract_base_property = (void (*) (MamanFoo*, gint)) maman_bar_real_set_abstract_base_property;
        G_OBJECT_CLASS (klass)->get_property = _vala_maman_bar_get_property;
        G_OBJECT_CLASS (klass)->set_property = _vala_maman_bar_set_property;
        G_OBJECT_CLASS (klass)->finalize = maman_bar_finalize;
@@ -2131,8 +2131,8 @@ maman_biz_class_init (MamanBizClass * klass,
 {
        maman_biz_parent_class = g_type_class_peek_parent (klass);
        g_type_class_adjust_private_offset (klass, &MamanBiz_private_offset);
-       MAMAN_ABIZ_CLASS (klass)->get_number2 = maman_biz_real_get_number2;
-       MAMAN_ABIZ_CLASS (klass)->set_number2 = maman_biz_real_set_number2;
+       MAMAN_ABIZ_CLASS (klass)->get_number2 = (gint (*) (MamanABiz*)) maman_biz_real_get_number2;
+       MAMAN_ABIZ_CLASS (klass)->set_number2 = (void (*) (MamanABiz*, gint)) maman_biz_real_set_number2;
        G_OBJECT_CLASS (klass)->get_property = _vala_maman_biz_get_property;
        G_OBJECT_CLASS (klass)->set_property = _vala_maman_biz_set_property;
        G_OBJECT_CLASS (klass)->finalize = maman_biz_finalize;
index 63f9a1810168bb075715b46a08822bb6e63c77d6..8f9a7bf85b00d4964092717d636d85e372f69d29 100644 (file)
@@ -810,12 +810,12 @@ foo_class_init (FooClass * klass,
        foo_parent_class = g_type_class_peek_parent (klass);
        ((FooClass *) klass)->finalize = foo_finalize;
        g_type_class_adjust_private_offset (klass, &Foo_private_offset);
-       FOO_CLASS (klass)->get_array_v = foo_real_get_array_v;
-       FOO_CLASS (klass)->set_array_v = foo_real_set_array_v;
-       FOO_CLASS (klass)->get_array_no_length_v = foo_real_get_array_no_length_v;
-       FOO_CLASS (klass)->set_array_no_length_v = foo_real_set_array_no_length_v;
-       FOO_CLASS (klass)->get_strv_v = foo_real_get_strv_v;
-       FOO_CLASS (klass)->set_strv_v = foo_real_set_strv_v;
+       FOO_CLASS (klass)->get_array_v = (Manam** (*) (Foo*, gint*)) foo_real_get_array_v;
+       FOO_CLASS (klass)->set_array_v = (void (*) (Foo*, Manam**, gint)) foo_real_set_array_v;
+       FOO_CLASS (klass)->get_array_no_length_v = (Manam** (*) (Foo*)) foo_real_get_array_no_length_v;
+       FOO_CLASS (klass)->set_array_no_length_v = (void (*) (Foo*, Manam**)) foo_real_set_array_no_length_v;
+       FOO_CLASS (klass)->get_strv_v = (gchar** (*) (Foo*)) foo_real_get_strv_v;
+       FOO_CLASS (klass)->set_strv_v = (void (*) (Foo*, gchar**)) foo_real_set_strv_v;
 }
 
 static void
@@ -1166,10 +1166,10 @@ bar_class_init (BarClass * klass,
 {
        bar_parent_class = g_type_class_peek_parent (klass);
        g_type_class_adjust_private_offset (klass, &Bar_private_offset);
-       BAR_CLASS (klass)->get_array_v = bar_real_get_array_v;
-       BAR_CLASS (klass)->set_array_v = bar_real_set_array_v;
-       BAR_CLASS (klass)->get_strv_v = bar_real_get_strv_v;
-       BAR_CLASS (klass)->set_strv_v = bar_real_set_strv_v;
+       BAR_CLASS (klass)->get_array_v = (Manam** (*) (Bar*)) bar_real_get_array_v;
+       BAR_CLASS (klass)->set_array_v = (void (*) (Bar*, Manam**)) bar_real_set_array_v;
+       BAR_CLASS (klass)->get_strv_v = (gchar** (*) (Bar*)) bar_real_get_strv_v;
+       BAR_CLASS (klass)->set_strv_v = (void (*) (Bar*, gchar**)) bar_real_set_strv_v;
        G_OBJECT_CLASS (klass)->get_property = _vala_bar_get_property;
        G_OBJECT_CLASS (klass)->set_property = _vala_bar_set_property;
        G_OBJECT_CLASS (klass)->finalize = bar_finalize;
index cd84a11b7c711356f4b55d40809531d44ba532ed..7334eb6969eb08a294b2209d1e0cc5970744c489 100644 (file)
@@ -588,10 +588,10 @@ foo_class_init (FooClass * klass,
        foo_parent_class = g_type_class_peek_parent (klass);
        ((FooClass *) klass)->finalize = foo_finalize;
        g_type_class_adjust_private_offset (klass, &Foo_private_offset);
-       FOO_CLASS (klass)->get_foo = foo_real_get_foo;
-       FOO_CLASS (klass)->set_foo = foo_real_set_foo;
-       FOO_CLASS (klass)->get_bar = foo_real_get_bar;
-       FOO_CLASS (klass)->set_bar = foo_real_set_bar;
+       FOO_CLASS (klass)->get_foo = (FooFunc (*) (Foo*, gpointer*)) foo_real_get_foo;
+       FOO_CLASS (klass)->set_foo = (void (*) (Foo*, FooFunc, gpointer, GDestroyNotify)) foo_real_set_foo;
+       FOO_CLASS (klass)->get_bar = (FooFunc (*) (Foo*, gpointer*)) foo_real_get_bar;
+       FOO_CLASS (klass)->set_bar = (void (*) (Foo*, FooFunc, gpointer, GDestroyNotify)) foo_real_set_bar;
 }
 
 static void
@@ -599,10 +599,10 @@ foo_ifoo_interface_init (IFooIface * iface,
                          gpointer iface_data)
 {
        foo_ifoo_parent_iface = g_type_interface_peek_parent (iface);
-       iface->get_foo = (FooFunc (*) (IFoo *)) foo_get_foo;
-       iface->set_foo = (void (*) (IFoo *, FooFunc)) foo_set_foo;
-       iface->get_bar = (FooFunc (*) (IFoo *)) foo_get_bar;
-       iface->set_bar = (void (*) (IFoo *, FooFunc)) foo_set_bar;
+       iface->get_foo = (FooFunc (*) (IFoo*, gpointer*)) foo_get_foo;
+       iface->set_foo = (void (*) (IFoo*, FooFunc, gpointer, GDestroyNotify)) foo_set_foo;
+       iface->get_bar = (FooFunc (*) (IFoo*, gpointer*)) foo_get_bar;
+       iface->set_bar = (void (*) (IFoo*, FooFunc, gpointer, GDestroyNotify)) foo_set_bar;
 }
 
 static void
@@ -826,10 +826,10 @@ bar_class_init (BarClass * klass,
        bar_parent_class = g_type_class_peek_parent (klass);
        ((FooClass *) klass)->finalize = bar_finalize;
        g_type_class_adjust_private_offset (klass, &Bar_private_offset);
-       FOO_CLASS (klass)->get_foo = bar_real_get_foo;
-       FOO_CLASS (klass)->set_foo = bar_real_set_foo;
-       FOO_CLASS (klass)->get_bar = bar_real_get_bar;
-       FOO_CLASS (klass)->set_bar = bar_real_set_bar;
+       FOO_CLASS (klass)->get_foo = (FooFunc (*) (Foo*, gpointer*)) bar_real_get_foo;
+       FOO_CLASS (klass)->set_foo = (void (*) (Foo*, FooFunc, gpointer, GDestroyNotify)) bar_real_set_foo;
+       FOO_CLASS (klass)->get_bar = (FooFunc (*) (Foo*, gpointer*)) bar_real_get_bar;
+       FOO_CLASS (klass)->set_bar = (void (*) (Foo*, FooFunc, gpointer, GDestroyNotify)) bar_real_set_bar;
 }
 
 static void
index a4e09b2515d13e7109a5bc5924468158c9487c52..c8be81390b4f9d632c1461beb0a0834e21d5ae8b 100644 (file)
@@ -507,10 +507,10 @@ foo_class_init (FooClass * klass,
        foo_parent_class = g_type_class_peek_parent (klass);
        ((FooClass *) klass)->finalize = foo_finalize;
        g_type_class_adjust_private_offset (klass, &Foo_private_offset);
-       FOO_CLASS (klass)->get_deleg_v = foo_real_get_deleg_v;
-       FOO_CLASS (klass)->set_deleg_v = foo_real_set_deleg_v;
-       FOO_CLASS (klass)->get_deleg_no_target_v = foo_real_get_deleg_no_target_v;
-       FOO_CLASS (klass)->set_deleg_no_target_v = foo_real_set_deleg_no_target_v;
+       FOO_CLASS (klass)->get_deleg_v = (Manam (*) (Foo*, gpointer*)) foo_real_get_deleg_v;
+       FOO_CLASS (klass)->set_deleg_v = (void (*) (Foo*, Manam, gpointer)) foo_real_set_deleg_v;
+       FOO_CLASS (klass)->get_deleg_no_target_v = (Manam (*) (Foo*)) foo_real_get_deleg_no_target_v;
+       FOO_CLASS (klass)->set_deleg_no_target_v = (void (*) (Foo*, Manam)) foo_real_set_deleg_no_target_v;
 }
 
 static void
@@ -705,8 +705,8 @@ bar_class_init (BarClass * klass,
 {
        bar_parent_class = g_type_class_peek_parent (klass);
        g_type_class_adjust_private_offset (klass, &Bar_private_offset);
-       BAR_CLASS (klass)->get_deleg_v = bar_real_get_deleg_v;
-       BAR_CLASS (klass)->set_deleg_v = bar_real_set_deleg_v;
+       BAR_CLASS (klass)->get_deleg_v = (Manam (*) (Bar*)) bar_real_get_deleg_v;
+       BAR_CLASS (klass)->set_deleg_v = (void (*) (Bar*, Manam)) bar_real_set_deleg_v;
        G_OBJECT_CLASS (klass)->get_property = _vala_bar_get_property;
        G_OBJECT_CLASS (klass)->set_property = _vala_bar_set_property;
        G_OBJECT_CLASS (klass)->finalize = bar_finalize;
index 532fbe7f8e5458b021bdba7c888a7eea88c84041..7f4b4e7889ad10943dba55e26ab3e4a545d84ef7 100644 (file)
@@ -324,8 +324,8 @@ manam_class_init (ManamClass * klass,
 {
        manam_parent_class = g_type_class_peek_parent (klass);
        g_type_class_adjust_private_offset (klass, &Manam_private_offset);
-       MANAM_CLASS (klass)->get_faz = manam_real_get_faz;
-       MANAM_CLASS (klass)->set_faz = manam_real_set_faz;
+       MANAM_CLASS (klass)->get_faz = (void (*) (Manam*, Foo*)) manam_real_get_faz;
+       MANAM_CLASS (klass)->set_faz = (void (*) (Manam*, Foo*)) manam_real_set_faz;
        G_OBJECT_CLASS (klass)->get_property = _vala_manam_get_property;
        G_OBJECT_CLASS (klass)->set_property = _vala_manam_set_property;
        G_OBJECT_CLASS (klass)->finalize = manam_finalize;