]> 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>
Sun, 5 Feb 2023 19:05:32 +0000 (20:05 +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 1f9c4e213cdaef1a1a14367b409bdddf67c7c5d1..294185b865abdeade19ba2d8664dcca8f18bad7f 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 643616b286fc8e5e912e51152e86fb6d3f0ab760..5cc677e734ec474d534d82fcf2588025a8b1d772 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 7824b84363cce1d51c9a95cfab3e1b175b64e14a..038d673bbd339466218a4a4bf7982c746e5e74b4 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 45a70c9de8e9b853d31756e9e4d6ee130c498d25..0a5312a23bf5b6b44cc9e4d636419f1d877dcd85 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 0160928939db77908b2d41fef00386bc5d1804a1..c4d02772e76cc78c33c217f4ad335c7d9490b7c9 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 30eb64ca477095ab8d16508919a38830b1475c44..5b063a55ebcea2dac544498fc5654598940483bc 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 7e9e769c4262a8d743d45be69009a1b64436f46f..d545238ce06c294b9acb3de84fee758d3ca765cf 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 00e0f0a7c13e4e12ec91b701b2ed6a3a0129d2e4..643aa51b375304e89eacc405e28af37b85c1df91 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 2c2898f340d0f31861c3b8f20559ce12a5d44e9a..3dd9eaedaddd7f4e5f2aeb23683e9708d5474085 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 2165bbf3d0c2bc9400b9a202351c81344140daf1..df1c1fa37560d060c28c21b82f7adeac6af3eec1 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 4484071d509b3c5fd52189ecc2bb2767c629f61b..17977f8b5164d557edcbee429deb4ed0f3d112aa 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 624f947467e001e030bba648b04f5a5c59e9e576..52cea4ef251847e143e58b5231a1e33e68e03521 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;