]> git.ipfire.org Git - thirdparty/vala.git/commitdiff
support non-simple struct as signal parameter type
authorJuerg Billeter <j@bitron.ch>
Tue, 5 Feb 2008 20:28:44 +0000 (20:28 +0000)
committerJürg Billeter <juergbi@src.gnome.org>
Tue, 5 Feb 2008 20:28:44 +0000 (20:28 +0000)
2008-02-05  Juerg Billeter  <j@bitron.ch>

* vala/valastruct.vala, gobject/valaccodegeneratorsignal.vala:
  support non-simple struct as signal parameter type

svn path=/trunk/; revision=979

ChangeLog
gobject/valaccodegeneratorsignal.vala
vala/valastruct.vala

index ebb86dbd80b8c51e9581e790b9b0de1363dfbcc5..c83cb1c5df0376e94e0825b095ebcca3dd4045c3 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2008-02-05  Jürg Billeter  <j@bitron.ch>
+
+       * vala/valastruct.vala, gobject/valaccodegeneratorsignal.vala:
+         support non-simple struct as signal parameter type
+
 2008-02-05  Jürg Billeter  <j@bitron.ch>
 
        * gobject/valaccodegenerator.vala: fix critical when using interface
index 6b5e95d5f2c5c7fb441174fd8fc232cce3eae164..3837d84be78c60d20479ec83c530553138e70cbb 100644 (file)
@@ -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) {
index 931e42f184d2c0ddbd9a8ff934808883fc8b95e2..ca5dd4e6f4907347bed4310d5031adf9308133d4 100644 (file)
@@ -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;
                }