support signals with ref or out parameters
authorJuerg Billeter <j@bitron.ch>
Wed, 16 Jan 2008 13:53:23 +0000 (13:53 +0000)
committerJürg Billeter <juergbi@src.gnome.org>
Wed, 16 Jan 2008 13:53:23 +0000 (13:53 +0000)
2008-01-16  Juerg Billeter  <j@bitron.ch>

* gobject/valaccodegeneratorinterface.vala,
  gobject/valaccodegeneratorsignal.vala: support signals with
  ref or out parameters

svn path=/trunk/; revision=840

ChangeLog
gobject/valaccodegeneratorinterface.vala
gobject/valaccodegeneratorsignal.vala

index d9157ad..0d94310 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2008-01-16  Jürg Billeter  <j@bitron.ch>
+
+       * gobject/valaccodegeneratorinterface.vala,
+         gobject/valaccodegeneratorsignal.vala: support signals with
+         ref or out parameters
+
 2008-01-15  Jürg Billeter  <j@bitron.ch>
 
        * vapi/glib-2.0.vapi: fix g_pattern_spec_equal binding
index 2bf60ae..bb6c77f 100644 (file)
@@ -177,7 +177,7 @@ public class Vala.CCodeGenerator {
 
                var params = sig.get_parameters ();
                var params_len = params.size;
-               if (sig.return_type.type_parameter != null) {
+               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.data_type == null) {
                        csignew.add_argument (new CCodeConstant ("G_TYPE_NONE"));
@@ -186,7 +186,7 @@ public class Vala.CCodeGenerator {
                }
                csignew.add_argument (new CCodeConstant ("%d".printf (params_len)));
                foreach (FormalParameter param in params) {
-                       if (param.type_reference.type_parameter != null) {
+                       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 {
                                csignew.add_argument (new CCodeConstant (param.type_reference.data_type.get_type_id ()));
index ac0d67f..971319b 100644 (file)
@@ -1,6 +1,6 @@
 /* valaccodegeneratorsignal.vala
  *
- * Copyright (C) 2006-2007  Jürg Billeter, Raffaele Sandrini
+ * Copyright (C) 2006-2008  Jürg Billeter, Raffaele Sandrini
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
@@ -25,9 +25,9 @@ using GLib;
 
 public class Vala.CCodeGenerator {
        private string get_marshaller_type_name (DataType t) {
-               if (t.type_parameter != null) {
+               if (t is PointerType || t.type_parameter != null || t.is_ref || t.is_out) {
                        return ("POINTER");
-               } else if (t.data_type == null) {
+               } else if (t is VoidType) {
                        return ("VOID");
                } else {
                        return t.data_type.get_marshaller_type_name ();
@@ -61,18 +61,14 @@ public class Vala.CCodeGenerator {
        }
        
        private string get_value_type_name_from_type_reference (DataType! t) {
-               if (t.type_parameter != null) {
+               if (t is PointerType || t.type_parameter != null || t.is_ref || t.is_out) {
                        return "gpointer";
                } else if (t.data_type == null) {
                        return "void";
                } else if (t.data_type is Class || t.data_type is Interface) {
-                       return "GObject *";
+                       return "gpointer";
                } else if (t.data_type is Struct) {
-                       if (((Struct) t.data_type).is_reference_type ()) {
-                               return "gpointer";
-                       } else {
-                               return t.data_type.get_cname ();
-                       }
+                       return t.data_type.get_cname ();
                } else if (t.data_type is Enum) {
                        return "gint";
                } else if (t.data_type is Array) {
@@ -203,7 +199,7 @@ public class Vala.CCodeGenerator {
                i = 1;
                foreach (FormalParameter p in params) {
                        string get_value_function;
-                       if (p.type_reference.type_parameter != null) {
+                       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 {
                                get_value_function = p.type_reference.data_type.get_get_value_function ();