1
1
/* valadbusmodule.vala
3
* Copyright (C) 2008-2009 Jürg Billeter
3
* Copyright (C) 2008-2010 Jürg Billeter
5
5
* This library is free software; you can redistribute it and/or
6
6
* modify it under the terms of the GNU Lesser General Public
101
public static string get_type_signature (DataType datatype) {
102
if (is_string_marshalled_enum (datatype.data_type)) {
101
public static string? get_type_signature (DataType datatype) {
102
var array_type = datatype as ArrayType;
104
if (array_type != null) {
105
string element_type_signature = get_type_signature (array_type.element_type);
107
if (element_type_signature == null) {
111
return string.nfill (array_type.rank, 'a') + element_type_signature;
112
} else if (is_string_marshalled_enum (datatype.data_type)) {
114
} else if (datatype.data_type != null) {
117
var ccode = datatype.data_type.get_attribute ("CCode");
119
sig = ccode.get_string ("type_signature");
122
var st = datatype.data_type as Struct;
123
var en = datatype.data_type as Enum;
124
if (sig == null && st != null) {
125
var str = new StringBuilder ();
127
foreach (Field f in st.get_fields ()) {
128
if (f.binding == MemberBinding.INSTANCE) {
129
str.append (get_type_signature (f.field_type));
134
} else if (sig == null && en != null) {
142
var type_args = datatype.get_type_arguments ();
143
if (sig != null && sig.str ("%s") != null && type_args.size > 0) {
144
string element_sig = "";
145
foreach (DataType type_arg in type_args) {
146
var s = get_type_signature (type_arg);
152
sig = sig.printf (element_sig);
105
return datatype.get_type_signature ();
204
256
var error_block = new CCodeBlock ();
205
257
error_block.suppress_newline = true;
207
var set_error_call = new CCodeFunctionCall (new CCodeIdentifier ("g_set_error_literal"));
259
var set_error_call = new CCodeFunctionCall (new CCodeIdentifier ("g_set_error"));
208
260
set_error_call.add_argument (new CCodeIdentifier ("error"));
209
261
set_error_call.add_argument (new CCodeIdentifier ("DBUS_GERROR"));
210
262
set_error_call.add_argument (new CCodeIdentifier ("DBUS_GERROR_INVALID_ARGS"));
263
set_error_call.add_argument (new CCodeConstant ("\"%s\""));
211
264
set_error_call.add_argument (new CCodeConstant ("\"Invalid enumeration value\""));
212
265
error_block.add_statement (new CCodeExpressionStatement (set_error_call));