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
} 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) {
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;
}
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;
}
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;
}
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;
}