~ubuntu-branches/ubuntu/maverick/vala/maverick

« back to all changes in this revision

Viewing changes to codegen/valadbusmodule.vala

  • Committer: Bazaar Package Importer
  • Author(s): Didier Roche
  • Date: 2010-04-02 10:10:55 UTC
  • mfrom: (1.4.7 upstream)
  • Revision ID: james.westby@ubuntu.com-20100402101055-qbx3okzv0tnp3wpp
Tags: 0.8.0-0ubuntu1
* New upstream release:
  - Infer type arguments when calling generic methods.
  - Support `in' operator for arrays.
  - Add experimental support for regular expression literals.
  - Add experimental support for chained relational expressions.
  - Add va_list support.
  - Add clutter-gtk-0.10 bindings (Gordon Allott).
  - Add gdl-1.0 bindings (Nicolas Joseph).
  - Add gstreamer-app-0.10 bindings (Sebastian Dröge).
  - Add gstreamer-cdda-0.10 bindings (Sebastian Dröge).
  - Add gudev-1.0 bindings (Jim Nelson).
  - Add libgda-report-4.0 bindings (Shawn Ferris).
  - Add libgvc (graphviz) bindings (Martin Olsson).
  - Add purple bindings (Adrien Bustany).
  - Many bug fixes and binding updates.
* debian/patches/99_ltmain_as-needed.patch: refreshed

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
1
/* valadbusmodule.vala
2
2
 *
3
 
 * Copyright (C) 2008-2009  Jürg Billeter
 
3
 * Copyright (C) 2008-2010  Jürg Billeter
4
4
 *
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
81
81
 
82
82
        public string get_dbus_name_for_member (Symbol symbol) {
83
83
                var dbus = symbol.get_attribute ("DBus");
84
 
                if (dbus != null) {
 
84
                if (dbus != null && dbus.has_argument ("name")) {
85
85
                        return dbus.get_string ("name");
86
86
                }
87
87
 
98
98
                return false;
99
99
        }
100
100
 
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;
 
103
 
 
104
                if (array_type != null) {
 
105
                        string element_type_signature = get_type_signature (array_type.element_type);
 
106
 
 
107
                        if (element_type_signature == null) {
 
108
                                return null;
 
109
                        }
 
110
 
 
111
                        return string.nfill (array_type.rank, 'a') + element_type_signature;
 
112
                } else if (is_string_marshalled_enum (datatype.data_type)) {
103
113
                        return "s";
 
114
                } else if (datatype.data_type != null) {
 
115
                        string sig = null;
 
116
 
 
117
                        var ccode = datatype.data_type.get_attribute ("CCode");
 
118
                        if (ccode != null) {
 
119
                                sig = ccode.get_string ("type_signature");
 
120
                        }
 
121
 
 
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 ();
 
126
                                str.append_c ('(');
 
127
                                foreach (Field f in st.get_fields ()) {
 
128
                                        if (f.binding == MemberBinding.INSTANCE) {
 
129
                                                str.append (get_type_signature (f.field_type));
 
130
                                        }
 
131
                                }
 
132
                                str.append_c (')');
 
133
                                sig = str.str;
 
134
                        } else if (sig == null && en != null) {
 
135
                                if (en.is_flags) {
 
136
                                        return "u";
 
137
                                } else {
 
138
                                        return "i";
 
139
                                }
 
140
                        }
 
141
 
 
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);
 
147
                                        if (s != null) {
 
148
                                                element_sig += s;
 
149
                                        }
 
150
                                }
 
151
 
 
152
                                sig = sig.printf (element_sig);
 
153
                        }
 
154
 
 
155
                        return sig;
104
156
                } else {
105
 
                        return datatype.get_type_signature ();
 
157
                        return null;
106
158
                }
107
159
        }
108
160
 
204
256
                var error_block = new CCodeBlock ();
205
257
                error_block.suppress_newline = true;
206
258
 
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));
213
266