support GLib.Error as signal parameter type, fixes bug 519415
authorJuerg Billeter <j@bitron.ch>
Fri, 29 Feb 2008 20:58:14 +0000 (20:58 +0000)
committerJürg Billeter <juergbi@src.gnome.org>
Fri, 29 Feb 2008 20:58:14 +0000 (20:58 +0000)
2008-02-29  Juerg Billeter  <j@bitron.ch>

* gobject/valaccodegeneratorinterface.vala,
  gobject/valaccodegeneratorsignal.vala: support GLib.Error as
  signal parameter type, fixes bug 519415

svn path=/trunk/; revision=1066

ChangeLog
gobject/valaccodegeneratorinterface.vala
gobject/valaccodegeneratorsignal.vala

index 657d6d8..87e4477 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,11 @@
 2008-02-29  Jürg Billeter  <j@bitron.ch>
 
+       * gobject/valaccodegeneratorinterface.vala,
+         gobject/valaccodegeneratorsignal.vala: support GLib.Error as
+         signal parameter type, fixes bug 519415
+
+2008-02-29  Jürg Billeter  <j@bitron.ch>
+
        * gobject/valaccodegenerator.vala: fix try catch statements without
          thrown exceptions, fixes bug 506016
 
index 89d33db..13fcb45 100644 (file)
@@ -214,6 +214,8 @@ public class Vala.CCodeGenerator {
                var params_len = params.size;
                if (sig.return_type is PointerType || sig.return_type.type_parameter != null) {
                        csignew.add_argument (new CCodeConstant ("G_TYPE_POINTER"));
+               } else if (sig.return_type is ErrorType) {
+                       csignew.add_argument (new CCodeConstant ("G_TYPE_POINTER"));
                } else if (sig.return_type.data_type == null) {
                        csignew.add_argument (new CCodeConstant ("G_TYPE_NONE"));
                } else {
@@ -223,6 +225,8 @@ public class Vala.CCodeGenerator {
                foreach (FormalParameter param in params) {
                        if (param.type_reference is PointerType || param.type_reference.type_parameter != null || param.type_reference.is_ref || param.type_reference.is_out) {
                                csignew.add_argument (new CCodeConstant ("G_TYPE_POINTER"));
+                       } else if (param.type_reference is ErrorType) {
+                               csignew.add_argument (new CCodeConstant ("G_TYPE_POINTER"));
                        } else {
                                csignew.add_argument (new CCodeConstant (param.type_reference.data_type.get_type_id ()));
                        }
index a79ca22..9c45ed7 100644 (file)
@@ -27,6 +27,8 @@ public class Vala.CCodeGenerator {
        private string get_marshaller_type_name (DataType t) {
                if (t is PointerType || t.type_parameter != null || t.is_ref || t.is_out) {
                        return ("POINTER");
+               } else if (t is ErrorType) {
+                       return ("POINTER");
                } else if (t is VoidType) {
                        return ("VOID");
                } else {
@@ -80,6 +82,8 @@ public class Vala.CCodeGenerator {
                        return "gint";
                } else if (t is ArrayType) {
                        return "gpointer";
+               } else if (t is ErrorType) {
+                       return "gpointer";
                }
                
                return null;
@@ -208,6 +212,8 @@ public class Vala.CCodeGenerator {
                        string get_value_function;
                        if (p.type_reference is PointerType || p.type_reference.type_parameter != null || p.type_reference.is_ref || p.type_reference.is_out) {
                                get_value_function = "g_value_get_pointer";
+                       } else if (p.type_reference is ErrorType) {
+                               get_value_function = "g_value_get_pointer";
                        } else {
                                get_value_function = p.type_reference.data_type.get_get_value_function ();
                        }
@@ -224,6 +230,8 @@ public class Vala.CCodeGenerator {
                        CCodeFunctionCall set_fc;
                        if (sig.return_type.type_parameter != null) {
                                set_fc = new CCodeFunctionCall (new CCodeIdentifier ("g_value_set_pointer"));
+                       } else if (sig.return_type is ErrorType) {
+                               set_fc = new CCodeFunctionCall (new CCodeIdentifier ("g_value_set_pointer"));
                        } else if (sig.return_type.data_type is Class || sig.return_type.data_type is Interface) {
                                set_fc = new CCodeFunctionCall (new CCodeIdentifier ("g_value_take_object"));
                        } else if (sig.return_type.data_type == string_type.data_type) {