+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
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"));
}
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 ()));
/* 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
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 ();
}
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) {
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 ();