diff options
author | Rico Tzschichholz <ricotz@ubuntu.com> | 2023-03-13 09:13:34 +0100 |
---|---|---|
committer | Rico Tzschichholz <ricotz@ubuntu.com> | 2023-03-13 09:13:34 +0100 |
commit | c2093183099e4da3e00da38a3a6de18c319f4c87 (patch) | |
tree | e36455aed8de011164f4686926bcab3d06c8e323 /tests | |
parent | d5ecd13849a6a9126d3b90d16a3268f860800b41 (diff) | |
download | vala-c2093183099e4da3e00da38a3a6de18c319f4c87.tar.gz |
codegen: Add cast to accessor calls for generic property implementations
Found by -Werror=int-conversion
Diffstat (limited to 'tests')
-rw-r--r-- | tests/Makefile.am | 2 | ||||
-rw-r--r-- | tests/generics/class-property-override.c-expected (renamed from tests/objects/bug667668.c-expected) | 194 | ||||
-rw-r--r-- | tests/generics/class-property-override.vala (renamed from tests/objects/bug667668.vala) | 8 |
3 files changed, 200 insertions, 4 deletions
diff --git a/tests/Makefile.am b/tests/Makefile.am index 1b8d17ce9..b21e414c8 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -662,7 +662,6 @@ TESTS = \ objects/bug654702.vala \ objects/bug663134.vala \ objects/bug664529.vala \ - objects/bug667668.vala \ objects/bug681356.vala \ objects/bug683646.vala \ objects/bug695671.vala \ @@ -791,6 +790,7 @@ TESTS = \ generics/arrays-not-supported.test \ generics/arrays-not-supported-2.test \ generics/arrays-not-supported-3.test \ + generics/class-property-override.vala \ generics/constructor-chain-up.vala \ generics/delegate-return-type-missing.test \ generics/floating-type-cast.vala \ diff --git a/tests/objects/bug667668.c-expected b/tests/generics/class-property-override.c-expected index 5cc677e73..0fa48bc6c 100644 --- a/tests/objects/bug667668.c-expected +++ b/tests/generics/class-property-override.c-expected @@ -1,5 +1,5 @@ -/* objects_bug667668.c generated by valac, the Vala compiler - * generated from objects_bug667668.vala, do not modify */ +/* generics_class_property_override.c generated by valac, the Vala compiler + * generated from generics_class_property_override.vala, do not modify */ #include <glib-object.h> #include <glib.h> @@ -53,6 +53,23 @@ enum { }; static GParamSpec* bar_properties[BAR_NUM_PROPERTIES]; #define _g_free0(var) (var = (g_free (var), NULL)) + +#define TYPE_MANAM (manam_get_type ()) +#define MANAM(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_MANAM, Manam)) +#define MANAM_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_MANAM, ManamClass)) +#define IS_MANAM(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_MANAM)) +#define IS_MANAM_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_MANAM)) +#define MANAM_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_MANAM, ManamClass)) + +typedef struct _Manam Manam; +typedef struct _ManamClass ManamClass; +typedef struct _ManamPrivate ManamPrivate; +enum { + MANAM_0_PROPERTY, + MANAM_FOO_PROPERTY, + MANAM_NUM_PROPERTIES +}; +static GParamSpec* manam_properties[MANAM_NUM_PROPERTIES]; #define _g_object_unref0(var) ((var == NULL) ? NULL : (var = (g_object_unref (var), NULL))) #define _vala_assert(expr, msg) if G_LIKELY (expr) ; else g_assertion_message_expr (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, msg); #define _vala_return_if_fail(expr, msg) if G_LIKELY (expr) ; else { g_return_if_fail_warning (G_LOG_DOMAIN, G_STRFUNC, msg); return; } @@ -89,10 +106,25 @@ struct _BarPrivate { gchar* _foo; }; +struct _Manam { + Foo parent_instance; + ManamPrivate * priv; +}; + +struct _ManamClass { + FooClass parent_class; +}; + +struct _ManamPrivate { + gint _foo; +}; + static gint Foo_private_offset; static gpointer foo_parent_class = NULL; static gint Bar_private_offset; static gpointer bar_parent_class = NULL; +static gint Manam_private_offset; +static gpointer manam_parent_class = NULL; VALA_EXTERN GType foo_get_type (void) G_GNUC_CONST ; G_DEFINE_AUTOPTR_CLEANUP_FUNC (Foo, g_object_unref) @@ -126,6 +158,20 @@ static void _vala_bar_set_property (GObject * object, guint property_id, const GValue * value, GParamSpec * pspec); +VALA_EXTERN GType manam_get_type (void) G_GNUC_CONST ; +G_DEFINE_AUTOPTR_CLEANUP_FUNC (Manam, g_object_unref) +VALA_EXTERN Manam* manam_new (void); +VALA_EXTERN Manam* manam_construct (GType object_type); +static void manam_finalize (GObject * obj); +static GType manam_get_type_once (void); +static void _vala_manam_get_property (GObject * object, + guint property_id, + GValue * value, + GParamSpec * pspec); +static void _vala_manam_set_property (GObject * object, + guint property_id, + const GValue * value, + GParamSpec * pspec); static void _vala_main (void); static inline gpointer @@ -374,7 +420,7 @@ _vala_bar_get_property (GObject * object, self = G_TYPE_CHECK_INSTANCE_CAST (object, TYPE_BAR, Bar); switch (property_id) { case BAR_FOO_PROPERTY: - g_value_set_string (value, foo_get_foo (G_TYPE_CHECK_INSTANCE_CAST (self, TYPE_FOO, Foo))); + g_value_set_string (value, (gchar*) foo_get_foo (G_TYPE_CHECK_INSTANCE_CAST (self, TYPE_FOO, Foo))); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); @@ -400,6 +446,137 @@ _vala_bar_set_property (GObject * object, } } +static inline gpointer +manam_get_instance_private (Manam* self) +{ + return G_STRUCT_MEMBER_P (self, Manam_private_offset); +} + +Manam* +manam_construct (GType object_type) +{ + Manam * self = NULL; + self = (Manam*) foo_construct (object_type, G_TYPE_INT, NULL, NULL); + return self; +} + +Manam* +manam_new (void) +{ + return manam_construct (TYPE_MANAM); +} + +static gint +manam_real_get_foo (Foo* base) +{ + gint result; + Manam* self; + self = G_TYPE_CHECK_INSTANCE_CAST (base, TYPE_MANAM, Manam); + result = self->priv->_foo; + return result; +} + +static void +manam_real_set_foo (Foo* base, + gint value) +{ + Manam* self; + gint old_value; + self = G_TYPE_CHECK_INSTANCE_CAST (base, TYPE_MANAM, Manam); + old_value = manam_real_get_foo (base); + if (old_value != value) { + self->priv->_foo = value; + g_object_notify_by_pspec ((GObject *) self, manam_properties[MANAM_FOO_PROPERTY]); + } +} + +static void +manam_class_init (ManamClass * klass, + gpointer klass_data) +{ + manam_parent_class = g_type_class_peek_parent (klass); + g_type_class_adjust_private_offset (klass, &Manam_private_offset); + FOO_CLASS (klass)->get_foo = (gconstpointer (*) (Foo*)) manam_real_get_foo; + FOO_CLASS (klass)->set_foo = (void (*) (Foo*, gconstpointer)) manam_real_set_foo; + 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; + g_object_class_install_property (G_OBJECT_CLASS (klass), MANAM_FOO_PROPERTY, manam_properties[MANAM_FOO_PROPERTY] = g_param_spec_int ("foo", "foo", "foo", G_MININT, G_MAXINT, 0, G_PARAM_STATIC_STRINGS | G_PARAM_READABLE | G_PARAM_WRITABLE)); +} + +static void +manam_instance_init (Manam * self, + gpointer klass) +{ + self->priv = manam_get_instance_private (self); +} + +static void +manam_finalize (GObject * obj) +{ + Manam * self; + self = G_TYPE_CHECK_INSTANCE_CAST (obj, TYPE_MANAM, Manam); + G_OBJECT_CLASS (manam_parent_class)->finalize (obj); +} + +static GType +manam_get_type_once (void) +{ + static const GTypeInfo g_define_type_info = { sizeof (ManamClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) manam_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (Manam), 0, (GInstanceInitFunc) manam_instance_init, NULL }; + GType manam_type_id; + manam_type_id = g_type_register_static (TYPE_FOO, "Manam", &g_define_type_info, 0); + Manam_private_offset = g_type_add_instance_private (manam_type_id, sizeof (ManamPrivate)); + return manam_type_id; +} + +GType +manam_get_type (void) +{ + static volatile gsize manam_type_id__once = 0; + if (g_once_init_enter (&manam_type_id__once)) { + GType manam_type_id; + manam_type_id = manam_get_type_once (); + g_once_init_leave (&manam_type_id__once, manam_type_id); + } + return manam_type_id__once; +} + +static void +_vala_manam_get_property (GObject * object, + guint property_id, + GValue * value, + GParamSpec * pspec) +{ + Manam * self; + self = G_TYPE_CHECK_INSTANCE_CAST (object, TYPE_MANAM, Manam); + switch (property_id) { + case MANAM_FOO_PROPERTY: + g_value_set_int (value, (gint) ((gintptr) foo_get_foo (G_TYPE_CHECK_INSTANCE_CAST (self, TYPE_FOO, Foo)))); + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); + break; + } +} + +static void +_vala_manam_set_property (GObject * object, + guint property_id, + const GValue * value, + GParamSpec * pspec) +{ + Manam * self; + self = G_TYPE_CHECK_INSTANCE_CAST (object, TYPE_MANAM, Manam); + switch (property_id) { + case MANAM_FOO_PROPERTY: + foo_set_foo (G_TYPE_CHECK_INSTANCE_CAST (self, TYPE_FOO, Foo), (gpointer) ((gintptr) g_value_get_int (value))); + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); + break; + } +} + static void _vala_main (void) { @@ -407,12 +584,23 @@ _vala_main (void) Bar* _tmp0_; gconstpointer _tmp1_; gconstpointer _tmp2_; + Manam* manam = NULL; + Manam* _tmp3_; + gconstpointer _tmp4_; + gconstpointer _tmp5_; _tmp0_ = bar_new (); bar = _tmp0_; foo_set_foo (G_TYPE_CHECK_INSTANCE_CAST (bar, TYPE_FOO, Foo), "foo"); _tmp1_ = foo_get_foo (G_TYPE_CHECK_INSTANCE_CAST (bar, TYPE_FOO, Foo)); _tmp2_ = _tmp1_; _vala_assert (g_strcmp0 ((const gchar*) _tmp2_, "foo") == 0, "bar.foo == \"foo\""); + _tmp3_ = manam_new (); + manam = _tmp3_; + foo_set_foo (G_TYPE_CHECK_INSTANCE_CAST (manam, TYPE_FOO, Foo), (gpointer) ((gintptr) 42)); + _tmp4_ = foo_get_foo (G_TYPE_CHECK_INSTANCE_CAST (manam, TYPE_FOO, Foo)); + _tmp5_ = _tmp4_; + _vala_assert (((gint) ((gintptr) _tmp5_)) == 42, "manam.foo == 42"); + _g_object_unref0 (manam); _g_object_unref0 (bar); } diff --git a/tests/objects/bug667668.vala b/tests/generics/class-property-override.vala index 8f760c7be..e673ab722 100644 --- a/tests/objects/bug667668.vala +++ b/tests/generics/class-property-override.vala @@ -6,8 +6,16 @@ public class Bar : Foo<string> { public override string foo { get; set; } } +public class Manam : Foo<int> { + public override int foo { get; set; } +} + void main () { var bar = new Bar (); bar.foo = "foo"; assert (bar.foo == "foo"); + + var manam = new Manam (); + manam.foo = 42; + assert (manam.foo == 42); } |