From aa0e25aed22966967399cd41ea8f6c8ce7cb6b2d Mon Sep 17 00:00:00 2001 From: Juerg Billeter Date: Tue, 5 Feb 2008 20:28:44 +0000 Subject: [PATCH] support non-simple struct as signal parameter type 2008-02-05 Juerg Billeter * vala/valastruct.vala, gobject/valaccodegeneratorsignal.vala: support non-simple struct as signal parameter type svn path=/trunk/; revision=979 --- ChangeLog | 5 +++++ gobject/valaccodegeneratorsignal.vala | 7 ++++++- vala/valastruct.vala | 28 ++++++++++++++++++++++------ 3 files changed, 33 insertions(+), 7 deletions(-) diff --git a/ChangeLog b/ChangeLog index ebb86db..c83cb1c 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,10 @@ 2008-02-05 Jürg Billeter + * vala/valastruct.vala, gobject/valaccodegeneratorsignal.vala: + support non-simple struct as signal parameter type + +2008-02-05 Jürg Billeter + * gobject/valaccodegenerator.vala: fix critical when using interface properties diff --git a/gobject/valaccodegeneratorsignal.vala b/gobject/valaccodegeneratorsignal.vala index 6b5e95d..3837d84 100644 --- a/gobject/valaccodegeneratorsignal.vala +++ b/gobject/valaccodegeneratorsignal.vala @@ -70,7 +70,12 @@ public class Vala.CCodeGenerator { } else if (t.data_type is Class || t.data_type is Interface) { return "gpointer"; } else if (t.data_type is Struct) { - return t.data_type.get_cname (); + var st = (Struct) t.data_type; + if (st.is_simple_type ()) { + return t.data_type.get_cname (); + } else { + return "gpointer"; + } } else if (t.data_type is Enum) { return "gint"; } else if (t is ArrayType) { diff --git a/vala/valastruct.vala b/vala/valastruct.vala index 931e42f..ca5dd4e 100644 --- a/vala/valastruct.vala +++ b/vala/valastruct.vala @@ -315,7 +315,11 @@ public class Vala.Struct : Typesymbol { public override string get_type_id () { if (type_id == null) { - Report.error (source_reference, "The type `%s` doesn't declare a type id".printf (get_full_name ())); + if (simple_type) { + Report.error (source_reference, "The type `%s` doesn't declare a type id".printf (get_full_name ())); + } else { + return "G_TYPE_POINTER"; + } } return type_id; } @@ -326,7 +330,11 @@ public class Vala.Struct : Typesymbol { public override string get_marshaller_type_name () { if (marshaller_type_name == null) { - Report.error (source_reference, "The type `%s` doesn't declare a marshaller type name".printf (get_full_name ())); + if (simple_type) { + Report.error (source_reference, "The type `%s` doesn't declare a marshaller type name".printf (get_full_name ())); + } else { + return "POINTER"; + } } return marshaller_type_name; } @@ -337,8 +345,12 @@ public class Vala.Struct : Typesymbol { public override string get_get_value_function () { if (get_value_function == null) { - Report.error (source_reference, "The value type `%s` doesn't declare a GValue get function".printf (get_full_name ())); - return null; + if (simple_type) { + Report.error (source_reference, "The value type `%s` doesn't declare a GValue get function".printf (get_full_name ())); + return null; + } else { + return "g_value_get_pointer"; + } } else { return get_value_function; } @@ -346,8 +358,12 @@ public class Vala.Struct : Typesymbol { public override string get_set_value_function () { if (set_value_function == null) { - Report.error (source_reference, "The value type `%s` doesn't declare a GValue set function".printf (get_full_name ())); - return null; + if (simple_type) { + Report.error (source_reference, "The value type `%s` doesn't declare a GValue set function".printf (get_full_name ())); + return null; + } else { + return "g_value_set_pointer"; + } } else { return set_value_function; } -- 2.7.4