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 ebb86db..c83cb1c 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,10 @@
 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
          properties
 
index 6b5e95d..3837d84 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 931e42f..ca5dd4e 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;
                }