1 /* valagirwriter.c generated by valac, the Vala compiler
2 * generated from valagirwriter.vala, do not modify */
3
4 /* valagirwriter.vala
5 *
6 * Copyright (C) 2008-2012 Jürg Billeter
7 *
8 * This library is free software; you can redistribute it and/or
9 * modify it under the terms of the GNU Lesser General Public
10 * License as published by the Free Software Foundation; either
11 * version 2.1 of the License, or (at your option) any later version.
12
13 * This library is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16 * Lesser General Public License for more details.
17
18 * You should have received a copy of the GNU Lesser General Public
19 * License along with this library; if not, write to the Free Software
20 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
21 *
22 * Author:
23 * Jürg Billeter <j@bitron.ch>
24 */
25
26 #include "valacodegen.h"
27 #include <vala.h>
28 #include <stdlib.h>
29 #include <string.h>
30 #include <glib.h>
31 #include <stdio.h>
32 #include <valagee.h>
33 #include <glib-object.h>
34 #include <glib/gstdio.h>
35
36 #define VALA_GIR_WRITER_TYPE_GIR_NAMESPACE (vala_gir_writer_gir_namespace_get_type ())
37 typedef struct _ValaGIRWriterGIRNamespace ValaGIRWriterGIRNamespace;
38 #define _vala_code_context_unref0(var) ((var == NULL) ? NULL : (var = (vala_code_context_unref (var), NULL)))
39 #define _g_free0(var) (var = (g_free (var), NULL))
40 #define _g_string_free0(var) ((var == NULL) ? NULL : (var = (g_string_free (var, TRUE), NULL)))
41 #define _fclose0(var) ((var == NULL) ? NULL : (var = (fclose (var), NULL)))
42 #define _vala_iterable_unref0(var) ((var == NULL) ? NULL : (var = (vala_iterable_unref (var), NULL)))
43 #define _vala_code_node_unref0(var) ((var == NULL) ? NULL : (var = (vala_code_node_unref (var), NULL)))
44 #define _vala_gir_writer_gir_namespace_free0(var) ((var == NULL) ? NULL : (var = (vala_gir_writer_gir_namespace_free (var), NULL)))
45 #define _vala_source_file_unref0(var) ((var == NULL) ? NULL : (var = (vala_source_file_unref (var), NULL)))
46 #define _g_mapped_file_unref0(var) ((var == NULL) ? NULL : (var = (g_mapped_file_unref (var), NULL)))
47 #define _vala_iterator_unref0(var) ((var == NULL) ? NULL : (var = (vala_iterator_unref (var), NULL)))
48
49 struct _ValaGIRWriterGIRNamespace {
50 gchar* ns;
51 gchar* version;
52 };
53
54 struct _ValaGIRWriterPrivate {
55 ValaCodeContext* context;
56 gchar* directory;
57 gchar* gir_namespace;
58 gchar* gir_version;
59 gchar* gir_shared_library;
60 GString* buffer;
61 FILE* stream;
62 ValaHashSet* unannotated_namespaces;
63 ValaHashSet* our_namespaces;
64 ValaArrayList* hierarchy;
65 ValaArrayList* deferred;
66 gint indent;
67 ValaTypeSymbol* gobject_type;
68 ValaTypeSymbol* ginitiallyunowned_type;
69 ValaTypeSymbol* gtypeinterface_type;
70 ValaTypeSymbol* gtypeinstance_type;
71 ValaTypeSymbol* gtype_type;
72 ValaArrayList* externals;
73 gint enum_value;
74 };
75
76 static gint ValaGIRWriter_private_offset;
77 static gpointer vala_gir_writer_parent_class = NULL;
78
79 static GType vala_gir_writer_gir_namespace_get_type (void) G_GNUC_CONST G_GNUC_UNUSED;
80 static ValaGIRWriterGIRNamespace* vala_gir_writer_gir_namespace_dup (const ValaGIRWriterGIRNamespace* self);
81 static void vala_gir_writer_gir_namespace_free (ValaGIRWriterGIRNamespace* self);
82 static void vala_gir_writer_gir_namespace_copy (const ValaGIRWriterGIRNamespace* self,
83 ValaGIRWriterGIRNamespace* dest);
84 static void vala_gir_writer_gir_namespace_destroy (ValaGIRWriterGIRNamespace* self);
85 static gchar* vala_gir_writer_real_get_interface_comment (ValaGIRWriter* self,
86 ValaInterface* iface);
87 static gchar* vala_gir_writer_real_get_struct_comment (ValaGIRWriter* self,
88 ValaStruct* st);
89 static gchar* vala_gir_writer_real_get_enum_comment (ValaGIRWriter* self,
90 ValaEnum* en);
91 static gchar* vala_gir_writer_real_get_class_comment (ValaGIRWriter* self,
92 ValaClass* c);
93 static gchar* vala_gir_writer_real_get_error_code_comment (ValaGIRWriter* self,
94 ValaErrorCode* ecode);
95 static gchar* vala_gir_writer_real_get_enum_value_comment (ValaGIRWriter* self,
96 ValaEnumValue* ev);
97 static gchar* vala_gir_writer_real_get_constant_comment (ValaGIRWriter* self,
98 ValaConstant* c);
99 static gchar* vala_gir_writer_real_get_error_domain_comment (ValaGIRWriter* self,
100 ValaErrorDomain* edomain);
101 static gchar* vala_gir_writer_real_get_field_comment (ValaGIRWriter* self,
102 ValaField* f);
103 static gchar* vala_gir_writer_real_get_delegate_comment (ValaGIRWriter* self,
104 ValaDelegate* cb);
105 static gchar* vala_gir_writer_real_get_method_comment (ValaGIRWriter* self,
106 ValaMethod* m);
107 static gchar* vala_gir_writer_real_get_property_comment (ValaGIRWriter* self,
108 ValaProperty* prop);
109 static gchar* vala_gir_writer_real_get_delegate_return_comment (ValaGIRWriter* self,
110 ValaDelegate* cb);
111 static gchar* vala_gir_writer_real_get_signal_return_comment (ValaGIRWriter* self,
112 ValaSignal* sig);
113 static gchar* vala_gir_writer_real_get_method_return_comment (ValaGIRWriter* self,
114 ValaMethod* m);
115 static gchar* vala_gir_writer_real_get_signal_comment (ValaGIRWriter* self,
116 ValaSignal* sig);
117 static gchar* vala_gir_writer_real_get_parameter_comment (ValaGIRWriter* self,
118 ValaParameter* param);
119 static gboolean vala_gir_writer_gir_namespace_equal (ValaGIRWriterGIRNamespace *self,
120 ValaGIRWriterGIRNamespace* g);
121 static void vala_gir_writer_write_indent_stream (ValaGIRWriter* self);
122 static void vala_gir_writer_write_package (ValaGIRWriter* self,
123 const gchar* package);
124 static void vala_gir_writer_write_doc (ValaGIRWriter* self,
125 const gchar* comment);
126 static void vala_gir_writer_write_indent (ValaGIRWriter* self);
127 static void vala_gir_writer_write_c_includes (ValaGIRWriter* self,
128 ValaNamespace* ns);
129 static void vala_gir_writer_write_c_include (ValaGIRWriter* self,
130 const gchar* name);
131 static void vala_gir_writer_real_visit_source_file (ValaCodeVisitor* base,
132 ValaSourceFile* source_file);
133 static void vala_gir_writer_real_visit_namespace (ValaCodeVisitor* base,
134 ValaNamespace* ns);
135 static gboolean vala_gir_writer_is_visibility (ValaGIRWriter* self,
136 ValaSymbol* sym);
137 static void vala_gir_writer_visit_deferred (ValaGIRWriter* self);
138 static void vala_gir_writer_write_symbol_attributes (ValaGIRWriter* self,
139 ValaSymbol* symbol);
140 static gboolean vala_gir_writer_is_introspectable (ValaGIRWriter* self,
141 ValaSymbol* sym);
142 static void vala_gir_writer_real_visit_class (ValaCodeVisitor* base,
143 ValaClass* cl);
144 static gboolean vala_gir_writer_check_accessibility (ValaGIRWriter* self,
145 ValaSymbol* sym);
146 static gboolean vala_gir_writer_has_namespace (ValaGIRWriter* self,
147 ValaSymbol* sym);
148 static gchar* vala_gir_writer_get_gir_name (ValaGIRWriter* self,
149 ValaSymbol* symbol);
150 static void vala_gir_writer_write_gtype_attributes (ValaGIRWriter* self,
151 ValaTypeSymbol* symbol,
152 gboolean symbol_prefix);
153 static gchar* vala_gir_writer_gi_type_name (ValaGIRWriter* self,
154 ValaTypeSymbol* type_symbol);
155 static void vala_gir_writer_write_type_parameter (ValaGIRWriter* self,
156 ValaTypeParameter* type_parameter,
157 const gchar* tag_type);
158 static void vala_gir_writer_write_ctype_attributes (ValaGIRWriter* self,
159 ValaTypeSymbol* symbol,
160 const gchar* suffix,
161 gboolean symbol_prefix);
162 static void vala_gir_writer_do_write_signature (ValaGIRWriter* self,
163 ValaMethod* m,
164 const gchar* tag_name,
165 gboolean instance,
166 const gchar* name,
167 const gchar* cname,
168 ValaList* params,
169 ValaDataType* return_type,
170 gboolean can_fail,
171 gboolean write_comment,
172 gboolean write_attributes);
173 static void vala_gir_writer_write_signature (ValaGIRWriter* self,
174 ValaMethod* m,
175 const gchar* tag_name,
176 gboolean write_doc,
177 gboolean instance,
178 gboolean write_attributes);
179 static void vala_gir_writer_real_visit_struct (ValaCodeVisitor* base,
180 ValaStruct* st);
181 static void vala_gir_writer_real_visit_interface (ValaCodeVisitor* base,
182 ValaInterface* iface);
183 static void vala_gir_writer_real_visit_enum (ValaCodeVisitor* base,
184 ValaEnum* en);
185 static void vala_gir_writer_real_visit_enum_value (ValaCodeVisitor* base,
186 ValaEnumValue* ev);
187 static gchar* vala_gir_writer_literal_expression_to_value_string (ValaGIRWriter* self,
188 ValaExpression* literal);
189 static void vala_gir_writer_real_visit_error_domain (ValaCodeVisitor* base,
190 ValaErrorDomain* edomain);
191 static void vala_gir_writer_real_visit_error_code (ValaCodeVisitor* base,
192 ValaErrorCode* ecode);
193 static void vala_gir_writer_real_visit_constant (ValaCodeVisitor* base,
194 ValaConstant* c);
195 static void vala_gir_writer_write_type (ValaGIRWriter* self,
196 ValaDataType* type,
197 gint index,
198 ValaParameterDirection direction);
199 static void vala_gir_writer_real_visit_field (ValaCodeVisitor* base,
200 ValaField* f);
201 static void vala_gir_writer_write_implicit_params (ValaGIRWriter* self,
202 ValaDataType* type,
203 gint* index,
204 gboolean has_array_length,
205 const gchar* name,
206 ValaParameterDirection direction);
207 static void vala_gir_writer_write_param_or_return (ValaGIRWriter* self,
208 ValaDataType* type,
209 const gchar* tag,
210 gint* index,
211 gboolean has_array_length,
212 const gchar* name,
213 const gchar* comment,
214 ValaParameterDirection direction,
215 gboolean constructor,
216 gboolean caller_allocates,
217 gboolean ellipsis);
218 static void vala_gir_writer_skip_implicit_params (ValaGIRWriter* self,
219 ValaDataType* type,
220 gint* index,
221 gboolean has_array_length);
222 static void vala_gir_writer_write_params_and_return (ValaGIRWriter* self,
223 const gchar* tag_name,
224 ValaList* params,
225 ValaList* type_params,
226 ValaDataType* return_type,
227 gboolean return_array_length,
228 const gchar* return_comment,
229 gboolean constructor,
230 ValaParameter* instance_param,
231 gboolean user_data);
232 static void vala_gir_writer_real_visit_delegate (ValaCodeVisitor* base,
233 ValaDelegate* cb);
234 static void vala_gir_writer_real_visit_method (ValaCodeVisitor* base,
235 ValaMethod* m);
236 static gboolean vala_gir_writer_is_type_introspectable (ValaGIRWriter* self,
237 ValaDataType* type);
238 static gboolean vala_gir_writer_is_method_introspectable (ValaGIRWriter* self,
239 ValaMethod* m);
240 static void vala_gir_writer_real_visit_creation_method (ValaCodeVisitor* base,
241 ValaCreationMethod* m);
242 static void vala_gir_writer_real_visit_property (ValaCodeVisitor* base,
243 ValaProperty* prop);
244 static void vala_gir_writer_real_visit_signal (ValaCodeVisitor* base,
245 ValaSignal* sig);
246 static gchar* vala_gir_writer_get_full_gir_name (ValaGIRWriter* self,
247 ValaSymbol* sym);
248 static void vala_gir_writer_gir_namespace_init (ValaGIRWriterGIRNamespace *self,
249 const gchar* ns,
250 const gchar* version);
251 static void vala_gir_writer_finalize (ValaCodeVisitor * obj);
252 static GType vala_gir_writer_get_type_once (void);
253 static void _vala_array_destroy (gpointer array,
254 gint array_length,
255 GDestroyNotify destroy_func);
256 static void _vala_array_free (gpointer array,
257 gint array_length,
258 GDestroyNotify destroy_func);
259 static gint _vala_array_length (gpointer array);
260
261 static inline gpointer
vala_gir_writer_get_instance_private(ValaGIRWriter * self)262 vala_gir_writer_get_instance_private (ValaGIRWriter* self)
263 {
264 return G_STRUCT_MEMBER_P (self, ValaGIRWriter_private_offset);
265 }
266
267 static gchar*
vala_gir_writer_real_get_interface_comment(ValaGIRWriter * self,ValaInterface * iface)268 vala_gir_writer_real_get_interface_comment (ValaGIRWriter* self,
269 ValaInterface* iface)
270 {
271 gchar* result = NULL;
272 g_return_val_if_fail (iface != NULL, NULL);
273 result = NULL;
274 return result;
275 }
276
277 gchar*
vala_gir_writer_get_interface_comment(ValaGIRWriter * self,ValaInterface * iface)278 vala_gir_writer_get_interface_comment (ValaGIRWriter* self,
279 ValaInterface* iface)
280 {
281 g_return_val_if_fail (self != NULL, NULL);
282 return VALA_GIR_WRITER_GET_CLASS (self)->get_interface_comment (self, iface);
283 }
284
285 static gchar*
vala_gir_writer_real_get_struct_comment(ValaGIRWriter * self,ValaStruct * st)286 vala_gir_writer_real_get_struct_comment (ValaGIRWriter* self,
287 ValaStruct* st)
288 {
289 gchar* result = NULL;
290 g_return_val_if_fail (st != NULL, NULL);
291 result = NULL;
292 return result;
293 }
294
295 gchar*
vala_gir_writer_get_struct_comment(ValaGIRWriter * self,ValaStruct * st)296 vala_gir_writer_get_struct_comment (ValaGIRWriter* self,
297 ValaStruct* st)
298 {
299 g_return_val_if_fail (self != NULL, NULL);
300 return VALA_GIR_WRITER_GET_CLASS (self)->get_struct_comment (self, st);
301 }
302
303 static gchar*
vala_gir_writer_real_get_enum_comment(ValaGIRWriter * self,ValaEnum * en)304 vala_gir_writer_real_get_enum_comment (ValaGIRWriter* self,
305 ValaEnum* en)
306 {
307 gchar* result = NULL;
308 g_return_val_if_fail (en != NULL, NULL);
309 result = NULL;
310 return result;
311 }
312
313 gchar*
vala_gir_writer_get_enum_comment(ValaGIRWriter * self,ValaEnum * en)314 vala_gir_writer_get_enum_comment (ValaGIRWriter* self,
315 ValaEnum* en)
316 {
317 g_return_val_if_fail (self != NULL, NULL);
318 return VALA_GIR_WRITER_GET_CLASS (self)->get_enum_comment (self, en);
319 }
320
321 static gchar*
vala_gir_writer_real_get_class_comment(ValaGIRWriter * self,ValaClass * c)322 vala_gir_writer_real_get_class_comment (ValaGIRWriter* self,
323 ValaClass* c)
324 {
325 gchar* result = NULL;
326 g_return_val_if_fail (c != NULL, NULL);
327 result = NULL;
328 return result;
329 }
330
331 gchar*
vala_gir_writer_get_class_comment(ValaGIRWriter * self,ValaClass * c)332 vala_gir_writer_get_class_comment (ValaGIRWriter* self,
333 ValaClass* c)
334 {
335 g_return_val_if_fail (self != NULL, NULL);
336 return VALA_GIR_WRITER_GET_CLASS (self)->get_class_comment (self, c);
337 }
338
339 static gchar*
vala_gir_writer_real_get_error_code_comment(ValaGIRWriter * self,ValaErrorCode * ecode)340 vala_gir_writer_real_get_error_code_comment (ValaGIRWriter* self,
341 ValaErrorCode* ecode)
342 {
343 gchar* result = NULL;
344 g_return_val_if_fail (ecode != NULL, NULL);
345 result = NULL;
346 return result;
347 }
348
349 gchar*
vala_gir_writer_get_error_code_comment(ValaGIRWriter * self,ValaErrorCode * ecode)350 vala_gir_writer_get_error_code_comment (ValaGIRWriter* self,
351 ValaErrorCode* ecode)
352 {
353 g_return_val_if_fail (self != NULL, NULL);
354 return VALA_GIR_WRITER_GET_CLASS (self)->get_error_code_comment (self, ecode);
355 }
356
357 static gchar*
vala_gir_writer_real_get_enum_value_comment(ValaGIRWriter * self,ValaEnumValue * ev)358 vala_gir_writer_real_get_enum_value_comment (ValaGIRWriter* self,
359 ValaEnumValue* ev)
360 {
361 gchar* result = NULL;
362 g_return_val_if_fail (ev != NULL, NULL);
363 result = NULL;
364 return result;
365 }
366
367 gchar*
vala_gir_writer_get_enum_value_comment(ValaGIRWriter * self,ValaEnumValue * ev)368 vala_gir_writer_get_enum_value_comment (ValaGIRWriter* self,
369 ValaEnumValue* ev)
370 {
371 g_return_val_if_fail (self != NULL, NULL);
372 return VALA_GIR_WRITER_GET_CLASS (self)->get_enum_value_comment (self, ev);
373 }
374
375 static gchar*
vala_gir_writer_real_get_constant_comment(ValaGIRWriter * self,ValaConstant * c)376 vala_gir_writer_real_get_constant_comment (ValaGIRWriter* self,
377 ValaConstant* c)
378 {
379 gchar* result = NULL;
380 g_return_val_if_fail (c != NULL, NULL);
381 result = NULL;
382 return result;
383 }
384
385 gchar*
vala_gir_writer_get_constant_comment(ValaGIRWriter * self,ValaConstant * c)386 vala_gir_writer_get_constant_comment (ValaGIRWriter* self,
387 ValaConstant* c)
388 {
389 g_return_val_if_fail (self != NULL, NULL);
390 return VALA_GIR_WRITER_GET_CLASS (self)->get_constant_comment (self, c);
391 }
392
393 static gchar*
vala_gir_writer_real_get_error_domain_comment(ValaGIRWriter * self,ValaErrorDomain * edomain)394 vala_gir_writer_real_get_error_domain_comment (ValaGIRWriter* self,
395 ValaErrorDomain* edomain)
396 {
397 gchar* result = NULL;
398 g_return_val_if_fail (edomain != NULL, NULL);
399 result = NULL;
400 return result;
401 }
402
403 gchar*
vala_gir_writer_get_error_domain_comment(ValaGIRWriter * self,ValaErrorDomain * edomain)404 vala_gir_writer_get_error_domain_comment (ValaGIRWriter* self,
405 ValaErrorDomain* edomain)
406 {
407 g_return_val_if_fail (self != NULL, NULL);
408 return VALA_GIR_WRITER_GET_CLASS (self)->get_error_domain_comment (self, edomain);
409 }
410
411 static gchar*
vala_gir_writer_real_get_field_comment(ValaGIRWriter * self,ValaField * f)412 vala_gir_writer_real_get_field_comment (ValaGIRWriter* self,
413 ValaField* f)
414 {
415 gchar* result = NULL;
416 g_return_val_if_fail (f != NULL, NULL);
417 result = NULL;
418 return result;
419 }
420
421 gchar*
vala_gir_writer_get_field_comment(ValaGIRWriter * self,ValaField * f)422 vala_gir_writer_get_field_comment (ValaGIRWriter* self,
423 ValaField* f)
424 {
425 g_return_val_if_fail (self != NULL, NULL);
426 return VALA_GIR_WRITER_GET_CLASS (self)->get_field_comment (self, f);
427 }
428
429 static gchar*
vala_gir_writer_real_get_delegate_comment(ValaGIRWriter * self,ValaDelegate * cb)430 vala_gir_writer_real_get_delegate_comment (ValaGIRWriter* self,
431 ValaDelegate* cb)
432 {
433 gchar* result = NULL;
434 g_return_val_if_fail (cb != NULL, NULL);
435 result = NULL;
436 return result;
437 }
438
439 gchar*
vala_gir_writer_get_delegate_comment(ValaGIRWriter * self,ValaDelegate * cb)440 vala_gir_writer_get_delegate_comment (ValaGIRWriter* self,
441 ValaDelegate* cb)
442 {
443 g_return_val_if_fail (self != NULL, NULL);
444 return VALA_GIR_WRITER_GET_CLASS (self)->get_delegate_comment (self, cb);
445 }
446
447 static gchar*
vala_gir_writer_real_get_method_comment(ValaGIRWriter * self,ValaMethod * m)448 vala_gir_writer_real_get_method_comment (ValaGIRWriter* self,
449 ValaMethod* m)
450 {
451 gchar* result = NULL;
452 g_return_val_if_fail (m != NULL, NULL);
453 result = NULL;
454 return result;
455 }
456
457 gchar*
vala_gir_writer_get_method_comment(ValaGIRWriter * self,ValaMethod * m)458 vala_gir_writer_get_method_comment (ValaGIRWriter* self,
459 ValaMethod* m)
460 {
461 g_return_val_if_fail (self != NULL, NULL);
462 return VALA_GIR_WRITER_GET_CLASS (self)->get_method_comment (self, m);
463 }
464
465 static gchar*
vala_gir_writer_real_get_property_comment(ValaGIRWriter * self,ValaProperty * prop)466 vala_gir_writer_real_get_property_comment (ValaGIRWriter* self,
467 ValaProperty* prop)
468 {
469 gchar* result = NULL;
470 g_return_val_if_fail (prop != NULL, NULL);
471 result = NULL;
472 return result;
473 }
474
475 gchar*
vala_gir_writer_get_property_comment(ValaGIRWriter * self,ValaProperty * prop)476 vala_gir_writer_get_property_comment (ValaGIRWriter* self,
477 ValaProperty* prop)
478 {
479 g_return_val_if_fail (self != NULL, NULL);
480 return VALA_GIR_WRITER_GET_CLASS (self)->get_property_comment (self, prop);
481 }
482
483 static gchar*
vala_gir_writer_real_get_delegate_return_comment(ValaGIRWriter * self,ValaDelegate * cb)484 vala_gir_writer_real_get_delegate_return_comment (ValaGIRWriter* self,
485 ValaDelegate* cb)
486 {
487 gchar* result = NULL;
488 g_return_val_if_fail (cb != NULL, NULL);
489 result = NULL;
490 return result;
491 }
492
493 gchar*
vala_gir_writer_get_delegate_return_comment(ValaGIRWriter * self,ValaDelegate * cb)494 vala_gir_writer_get_delegate_return_comment (ValaGIRWriter* self,
495 ValaDelegate* cb)
496 {
497 g_return_val_if_fail (self != NULL, NULL);
498 return VALA_GIR_WRITER_GET_CLASS (self)->get_delegate_return_comment (self, cb);
499 }
500
501 static gchar*
vala_gir_writer_real_get_signal_return_comment(ValaGIRWriter * self,ValaSignal * sig)502 vala_gir_writer_real_get_signal_return_comment (ValaGIRWriter* self,
503 ValaSignal* sig)
504 {
505 gchar* result = NULL;
506 g_return_val_if_fail (sig != NULL, NULL);
507 result = NULL;
508 return result;
509 }
510
511 gchar*
vala_gir_writer_get_signal_return_comment(ValaGIRWriter * self,ValaSignal * sig)512 vala_gir_writer_get_signal_return_comment (ValaGIRWriter* self,
513 ValaSignal* sig)
514 {
515 g_return_val_if_fail (self != NULL, NULL);
516 return VALA_GIR_WRITER_GET_CLASS (self)->get_signal_return_comment (self, sig);
517 }
518
519 static gchar*
vala_gir_writer_real_get_method_return_comment(ValaGIRWriter * self,ValaMethod * m)520 vala_gir_writer_real_get_method_return_comment (ValaGIRWriter* self,
521 ValaMethod* m)
522 {
523 gchar* result = NULL;
524 g_return_val_if_fail (m != NULL, NULL);
525 result = NULL;
526 return result;
527 }
528
529 gchar*
vala_gir_writer_get_method_return_comment(ValaGIRWriter * self,ValaMethod * m)530 vala_gir_writer_get_method_return_comment (ValaGIRWriter* self,
531 ValaMethod* m)
532 {
533 g_return_val_if_fail (self != NULL, NULL);
534 return VALA_GIR_WRITER_GET_CLASS (self)->get_method_return_comment (self, m);
535 }
536
537 static gchar*
vala_gir_writer_real_get_signal_comment(ValaGIRWriter * self,ValaSignal * sig)538 vala_gir_writer_real_get_signal_comment (ValaGIRWriter* self,
539 ValaSignal* sig)
540 {
541 gchar* result = NULL;
542 g_return_val_if_fail (sig != NULL, NULL);
543 result = NULL;
544 return result;
545 }
546
547 gchar*
vala_gir_writer_get_signal_comment(ValaGIRWriter * self,ValaSignal * sig)548 vala_gir_writer_get_signal_comment (ValaGIRWriter* self,
549 ValaSignal* sig)
550 {
551 g_return_val_if_fail (self != NULL, NULL);
552 return VALA_GIR_WRITER_GET_CLASS (self)->get_signal_comment (self, sig);
553 }
554
555 static gchar*
vala_gir_writer_real_get_parameter_comment(ValaGIRWriter * self,ValaParameter * param)556 vala_gir_writer_real_get_parameter_comment (ValaGIRWriter* self,
557 ValaParameter* param)
558 {
559 gchar* result = NULL;
560 g_return_val_if_fail (param != NULL, NULL);
561 result = NULL;
562 return result;
563 }
564
565 gchar*
vala_gir_writer_get_parameter_comment(ValaGIRWriter * self,ValaParameter * param)566 vala_gir_writer_get_parameter_comment (ValaGIRWriter* self,
567 ValaParameter* param)
568 {
569 g_return_val_if_fail (self != NULL, NULL);
570 return VALA_GIR_WRITER_GET_CLASS (self)->get_parameter_comment (self, param);
571 }
572
573 static gpointer
_vala_iterable_ref0(gpointer self)574 _vala_iterable_ref0 (gpointer self)
575 {
576 return self ? vala_iterable_ref (self) : NULL;
577 }
578
579 void
vala_gir_writer_write_includes(ValaGIRWriter * self)580 vala_gir_writer_write_includes (ValaGIRWriter* self)
581 {
582 g_return_if_fail (self != NULL);
583 {
584 ValaArrayList* _i_list = NULL;
585 ValaArrayList* _tmp0_;
586 ValaArrayList* _tmp1_;
587 gint _i_size = 0;
588 ValaArrayList* _tmp2_;
589 gint _tmp3_;
590 gint _tmp4_;
591 gint _i_index = 0;
592 _tmp0_ = self->priv->externals;
593 _tmp1_ = _vala_iterable_ref0 (_tmp0_);
594 _i_list = _tmp1_;
595 _tmp2_ = _i_list;
596 _tmp3_ = vala_collection_get_size ((ValaCollection*) _tmp2_);
597 _tmp4_ = _tmp3_;
598 _i_size = _tmp4_;
599 _i_index = -1;
600 while (TRUE) {
601 gint _tmp5_;
602 gint _tmp6_;
603 ValaGIRWriterGIRNamespace* i = NULL;
604 ValaArrayList* _tmp7_;
605 gpointer _tmp8_;
606 ValaGIRWriterGIRNamespace* _tmp9_;
607 const gchar* _tmp10_;
608 const gchar* _tmp11_;
609 _i_index = _i_index + 1;
610 _tmp5_ = _i_index;
611 _tmp6_ = _i_size;
612 if (!(_tmp5_ < _tmp6_)) {
613 break;
614 }
615 _tmp7_ = _i_list;
616 _tmp8_ = vala_list_get ((ValaList*) _tmp7_, _i_index);
617 i = (ValaGIRWriterGIRNamespace*) _tmp8_;
618 _tmp9_ = i;
619 _tmp10_ = (*_tmp9_).ns;
620 _tmp11_ = self->priv->gir_namespace;
621 if (g_strcmp0 (_tmp10_, _tmp11_) != 0) {
622 FILE* _tmp12_;
623 ValaGIRWriterGIRNamespace* _tmp13_;
624 const gchar* _tmp14_;
625 ValaGIRWriterGIRNamespace* _tmp15_;
626 const gchar* _tmp16_;
627 vala_gir_writer_write_indent_stream (self);
628 _tmp12_ = self->priv->stream;
629 _tmp13_ = i;
630 _tmp14_ = (*_tmp13_).ns;
631 _tmp15_ = i;
632 _tmp16_ = (*_tmp15_).version;
633 fprintf (_tmp12_, "<include name=\"%s\" version=\"%s\"/>\n", _tmp14_, _tmp16_);
634 }
635 _vala_gir_writer_gir_namespace_free0 (i);
636 }
637 _vala_iterable_unref0 (_i_list);
638 }
639 }
640
641 /**
642 * Writes the public interface of the specified code context into the
643 * specified file.
644 *
645 * @param context a code context
646 * @param gir_filename a relative or absolute filename
647 */
648 static gpointer
_vala_code_context_ref0(gpointer self)649 _vala_code_context_ref0 (gpointer self)
650 {
651 return self ? vala_code_context_ref (self) : NULL;
652 }
653
654 static gpointer
_vala_code_node_ref0(gpointer self)655 _vala_code_node_ref0 (gpointer self)
656 {
657 return self ? vala_code_node_ref (self) : NULL;
658 }
659
660 void
vala_gir_writer_write_file(ValaGIRWriter * self,ValaCodeContext * context,const gchar * directory,const gchar * gir_filename,const gchar * gir_namespace,const gchar * gir_version,const gchar * package,const gchar * gir_shared_library)661 vala_gir_writer_write_file (ValaGIRWriter* self,
662 ValaCodeContext* context,
663 const gchar* directory,
664 const gchar* gir_filename,
665 const gchar* gir_namespace,
666 const gchar* gir_version,
667 const gchar* package,
668 const gchar* gir_shared_library)
669 {
670 ValaCodeContext* _tmp0_;
671 gchar* _tmp1_;
672 gchar* _tmp2_;
673 gchar* _tmp3_;
674 gchar* _tmp4_;
675 ValaNamespace* root_symbol = NULL;
676 ValaNamespace* _tmp5_;
677 ValaNamespace* _tmp6_;
678 ValaNamespace* _tmp7_;
679 ValaSymbol* glib_ns = NULL;
680 ValaNamespace* _tmp8_;
681 ValaScope* _tmp9_;
682 ValaScope* _tmp10_;
683 ValaSymbol* _tmp11_;
684 ValaSymbol* _tmp12_;
685 ValaScope* _tmp13_;
686 ValaScope* _tmp14_;
687 ValaSymbol* _tmp15_;
688 ValaSymbol* _tmp16_;
689 ValaScope* _tmp17_;
690 ValaScope* _tmp18_;
691 ValaSymbol* _tmp19_;
692 ValaSymbol* _tmp20_;
693 ValaScope* _tmp21_;
694 ValaScope* _tmp22_;
695 ValaSymbol* _tmp23_;
696 ValaSymbol* _tmp24_;
697 ValaScope* _tmp25_;
698 ValaScope* _tmp26_;
699 ValaSymbol* _tmp27_;
700 ValaSymbol* _tmp28_;
701 ValaScope* _tmp29_;
702 ValaScope* _tmp30_;
703 ValaSymbol* _tmp31_;
704 gint _tmp42_;
705 GString* _tmp43_;
706 gchar* filename = NULL;
707 gchar* _tmp44_;
708 gboolean file_exists = FALSE;
709 const gchar* _tmp45_;
710 gchar* temp_filename = NULL;
711 const gchar* _tmp46_;
712 gchar* _tmp47_;
713 FILE* _tmp52_;
714 FILE* _tmp56_;
715 gchar* _tmp57_ = NULL;
716 gboolean _tmp58_;
717 gboolean _tmp59_;
718 gchar* header = NULL;
719 gchar* _tmp70_;
720 FILE* _tmp71_;
721 const gchar* _tmp72_;
722 FILE* _tmp73_;
723 FILE* _tmp74_;
724 FILE* _tmp75_;
725 FILE* _tmp76_;
726 FILE* _tmp77_;
727 gint _tmp78_;
728 gint _tmp79_;
729 FILE* _tmp80_;
730 GString* _tmp81_;
731 const gchar* _tmp82_;
732 ValaHashSet* _tmp126_;
733 gint _tmp127_;
734 gint _tmp128_;
735 GError* _inner_error0_ = NULL;
736 g_return_if_fail (self != NULL);
737 g_return_if_fail (context != NULL);
738 g_return_if_fail (directory != NULL);
739 g_return_if_fail (gir_filename != NULL);
740 g_return_if_fail (gir_namespace != NULL);
741 g_return_if_fail (gir_version != NULL);
742 g_return_if_fail (package != NULL);
743 _tmp0_ = _vala_code_context_ref0 (context);
744 _vala_code_context_unref0 (self->priv->context);
745 self->priv->context = _tmp0_;
746 _tmp1_ = g_strdup (directory);
747 _g_free0 (self->priv->directory);
748 self->priv->directory = _tmp1_;
749 _tmp2_ = g_strdup (gir_namespace);
750 _g_free0 (self->priv->gir_namespace);
751 self->priv->gir_namespace = _tmp2_;
752 _tmp3_ = g_strdup (gir_version);
753 _g_free0 (self->priv->gir_version);
754 self->priv->gir_version = _tmp3_;
755 _tmp4_ = g_strdup (gir_shared_library);
756 _g_free0 (self->priv->gir_shared_library);
757 self->priv->gir_shared_library = _tmp4_;
758 _tmp5_ = vala_code_context_get_root (context);
759 _tmp6_ = _tmp5_;
760 _tmp7_ = _vala_code_node_ref0 (_tmp6_);
761 root_symbol = _tmp7_;
762 _tmp8_ = root_symbol;
763 _tmp9_ = vala_symbol_get_scope ((ValaSymbol*) _tmp8_);
764 _tmp10_ = _tmp9_;
765 _tmp11_ = vala_scope_lookup (_tmp10_, "GLib");
766 glib_ns = _tmp11_;
767 _tmp12_ = glib_ns;
768 _tmp13_ = vala_symbol_get_scope (_tmp12_);
769 _tmp14_ = _tmp13_;
770 _tmp15_ = vala_scope_lookup (_tmp14_, "Object");
771 _vala_code_node_unref0 (self->priv->gobject_type);
772 self->priv->gobject_type = G_TYPE_CHECK_INSTANCE_CAST (_tmp15_, VALA_TYPE_TYPESYMBOL, ValaTypeSymbol);
773 _tmp16_ = glib_ns;
774 _tmp17_ = vala_symbol_get_scope (_tmp16_);
775 _tmp18_ = _tmp17_;
776 _tmp19_ = vala_scope_lookup (_tmp18_, "InitiallyUnowned");
777 _vala_code_node_unref0 (self->priv->ginitiallyunowned_type);
778 self->priv->ginitiallyunowned_type = G_TYPE_CHECK_INSTANCE_CAST (_tmp19_, VALA_TYPE_TYPESYMBOL, ValaTypeSymbol);
779 _tmp20_ = glib_ns;
780 _tmp21_ = vala_symbol_get_scope (_tmp20_);
781 _tmp22_ = _tmp21_;
782 _tmp23_ = vala_scope_lookup (_tmp22_, "TypeInterface");
783 _vala_code_node_unref0 (self->priv->gtypeinterface_type);
784 self->priv->gtypeinterface_type = G_TYPE_CHECK_INSTANCE_CAST (_tmp23_, VALA_TYPE_TYPESYMBOL, ValaTypeSymbol);
785 _tmp24_ = glib_ns;
786 _tmp25_ = vala_symbol_get_scope (_tmp24_);
787 _tmp26_ = _tmp25_;
788 _tmp27_ = vala_scope_lookup (_tmp26_, "TypeInstance");
789 _vala_code_node_unref0 (self->priv->gtypeinstance_type);
790 self->priv->gtypeinstance_type = G_TYPE_CHECK_INSTANCE_CAST (_tmp27_, VALA_TYPE_TYPESYMBOL, ValaTypeSymbol);
791 _tmp28_ = glib_ns;
792 _tmp29_ = vala_symbol_get_scope (_tmp28_);
793 _tmp30_ = _tmp29_;
794 _tmp31_ = vala_scope_lookup (_tmp30_, "Type");
795 _vala_code_node_unref0 (self->priv->gtype_type);
796 self->priv->gtype_type = G_TYPE_CHECK_INSTANCE_CAST (_tmp31_, VALA_TYPE_TYPESYMBOL, ValaTypeSymbol);
797 vala_gir_writer_write_package (self, package);
798 {
799 ValaList* _file_list = NULL;
800 ValaList* _tmp32_;
801 ValaList* _tmp33_;
802 gint _file_size = 0;
803 ValaList* _tmp34_;
804 gint _tmp35_;
805 gint _tmp36_;
806 gint _file_index = 0;
807 _tmp32_ = vala_code_context_get_source_files (context);
808 _tmp33_ = _vala_iterable_ref0 (_tmp32_);
809 _file_list = _tmp33_;
810 _tmp34_ = _file_list;
811 _tmp35_ = vala_collection_get_size ((ValaCollection*) _tmp34_);
812 _tmp36_ = _tmp35_;
813 _file_size = _tmp36_;
814 _file_index = -1;
815 while (TRUE) {
816 gint _tmp37_;
817 gint _tmp38_;
818 ValaSourceFile* file = NULL;
819 ValaList* _tmp39_;
820 gpointer _tmp40_;
821 ValaSourceFile* _tmp41_;
822 _file_index = _file_index + 1;
823 _tmp37_ = _file_index;
824 _tmp38_ = _file_size;
825 if (!(_tmp37_ < _tmp38_)) {
826 break;
827 }
828 _tmp39_ = _file_list;
829 _tmp40_ = vala_list_get (_tmp39_, _file_index);
830 file = (ValaSourceFile*) _tmp40_;
831 _tmp41_ = file;
832 vala_source_file_accept (_tmp41_, (ValaCodeVisitor*) self);
833 _vala_source_file_unref0 (file);
834 }
835 _vala_iterable_unref0 (_file_list);
836 }
837 vala_code_context_accept (context, (ValaCodeVisitor*) self);
838 _tmp42_ = self->priv->indent;
839 self->priv->indent = _tmp42_ - 1;
840 _tmp43_ = self->priv->buffer;
841 g_string_append_printf (_tmp43_, "</repository>\n");
842 _tmp44_ = g_strdup_printf ("%s%c%s", directory, (gint) G_DIR_SEPARATOR, gir_filename);
843 filename = _tmp44_;
844 _tmp45_ = filename;
845 file_exists = g_file_test (_tmp45_, G_FILE_TEST_EXISTS);
846 _tmp46_ = filename;
847 _tmp47_ = g_strdup_printf ("%s.valatmp", _tmp46_);
848 temp_filename = _tmp47_;
849 if (file_exists) {
850 const gchar* _tmp48_;
851 FILE* _tmp49_;
852 _tmp48_ = temp_filename;
853 _tmp49_ = g_fopen (_tmp48_, "w");
854 _fclose0 (self->priv->stream);
855 self->priv->stream = _tmp49_;
856 } else {
857 const gchar* _tmp50_;
858 FILE* _tmp51_;
859 _tmp50_ = filename;
860 _tmp51_ = g_fopen (_tmp50_, "w");
861 _fclose0 (self->priv->stream);
862 self->priv->stream = _tmp51_;
863 }
864 _tmp52_ = self->priv->stream;
865 if (_tmp52_ == NULL) {
866 const gchar* _tmp53_;
867 gchar* _tmp54_;
868 gchar* _tmp55_;
869 _tmp53_ = filename;
870 _tmp54_ = g_strdup_printf ("unable to open `%s' for writing", _tmp53_);
871 _tmp55_ = _tmp54_;
872 vala_report_error (NULL, _tmp55_);
873 _g_free0 (_tmp55_);
874 _vala_code_context_unref0 (self->priv->context);
875 self->priv->context = NULL;
876 _g_free0 (temp_filename);
877 _g_free0 (filename);
878 _vala_code_node_unref0 (glib_ns);
879 _vala_code_node_unref0 (root_symbol);
880 return;
881 }
882 _tmp56_ = self->priv->stream;
883 fprintf (_tmp56_, "<?xml version=\"1.0\"?>\n");
884 _tmp58_ = vala_code_context_get_version_header (context);
885 _tmp59_ = _tmp58_;
886 if (_tmp59_) {
887 const gchar* _tmp60_;
888 gchar* _tmp61_;
889 gchar* _tmp62_;
890 const gchar* _tmp63_;
891 gchar* _tmp64_;
892 _tmp60_ = filename;
893 _tmp61_ = g_path_get_basename (_tmp60_);
894 _tmp62_ = _tmp61_;
895 _tmp63_ = g_get_prgname ();
896 _tmp64_ = g_strdup_printf ("<!-- %s generated by %s %s, do not modify. -->", _tmp62_, _tmp63_, VALA_BUILD_VERSION);
897 _g_free0 (_tmp57_);
898 _tmp57_ = _tmp64_;
899 _g_free0 (_tmp62_);
900 } else {
901 const gchar* _tmp65_;
902 gchar* _tmp66_;
903 gchar* _tmp67_;
904 const gchar* _tmp68_;
905 gchar* _tmp69_;
906 _tmp65_ = filename;
907 _tmp66_ = g_path_get_basename (_tmp65_);
908 _tmp67_ = _tmp66_;
909 _tmp68_ = g_get_prgname ();
910 _tmp69_ = g_strdup_printf ("<!-- %s generated by %s, do not modify. -->", _tmp67_, _tmp68_);
911 _g_free0 (_tmp57_);
912 _tmp57_ = _tmp69_;
913 _g_free0 (_tmp67_);
914 }
915 _tmp70_ = g_strdup (_tmp57_);
916 header = _tmp70_;
917 _tmp71_ = self->priv->stream;
918 _tmp72_ = header;
919 fprintf (_tmp71_, "%s\n", _tmp72_);
920 _tmp73_ = self->priv->stream;
921 fprintf (_tmp73_, "<repository version=\"1.2\"");
922 _tmp74_ = self->priv->stream;
923 fprintf (_tmp74_, " xmlns=\"http://www.gtk.org/introspection/core/1.0\"");
924 _tmp75_ = self->priv->stream;
925 fprintf (_tmp75_, " xmlns:c=\"http://www.gtk.org/introspection/c/1.0\"");
926 _tmp76_ = self->priv->stream;
927 fprintf (_tmp76_, " xmlns:glib=\"http://www.gtk.org/introspection/glib/1.0\"");
928 _tmp77_ = self->priv->stream;
929 fprintf (_tmp77_, ">\n");
930 _tmp78_ = self->priv->indent;
931 self->priv->indent = _tmp78_ + 1;
932 vala_gir_writer_write_includes (self);
933 _tmp79_ = self->priv->indent;
934 self->priv->indent = _tmp79_ - 1;
935 _tmp80_ = self->priv->stream;
936 _tmp81_ = self->priv->buffer;
937 _tmp82_ = _tmp81_->str;
938 fputs (_tmp82_, _tmp80_);
939 _fclose0 (self->priv->stream);
940 self->priv->stream = NULL;
941 if (file_exists) {
942 gboolean changed = FALSE;
943 changed = TRUE;
944 {
945 GMappedFile* old_file = NULL;
946 const gchar* _tmp83_;
947 GMappedFile* _tmp84_;
948 GMappedFile* new_file = NULL;
949 const gchar* _tmp85_;
950 GMappedFile* _tmp86_;
951 gsize len = 0UL;
952 GMappedFile* _tmp87_;
953 GMappedFile* _tmp88_;
954 _tmp83_ = filename;
955 _tmp84_ = g_mapped_file_new (_tmp83_, FALSE, &_inner_error0_);
956 old_file = _tmp84_;
957 if (G_UNLIKELY (_inner_error0_ != NULL)) {
958 if (_inner_error0_->domain == G_FILE_ERROR) {
959 goto __catch0_g_file_error;
960 }
961 _g_free0 (header);
962 _g_free0 (_tmp57_);
963 _g_free0 (temp_filename);
964 _g_free0 (filename);
965 _vala_code_node_unref0 (glib_ns);
966 _vala_code_node_unref0 (root_symbol);
967 g_critical ("file %s: line %d: unexpected error: %s (%s, %d)", __FILE__, __LINE__, _inner_error0_->message, g_quark_to_string (_inner_error0_->domain), _inner_error0_->code);
968 g_clear_error (&_inner_error0_);
969 return;
970 }
971 _tmp85_ = temp_filename;
972 _tmp86_ = g_mapped_file_new (_tmp85_, FALSE, &_inner_error0_);
973 new_file = _tmp86_;
974 if (G_UNLIKELY (_inner_error0_ != NULL)) {
975 _g_mapped_file_unref0 (old_file);
976 if (_inner_error0_->domain == G_FILE_ERROR) {
977 goto __catch0_g_file_error;
978 }
979 _g_free0 (header);
980 _g_free0 (_tmp57_);
981 _g_free0 (temp_filename);
982 _g_free0 (filename);
983 _vala_code_node_unref0 (glib_ns);
984 _vala_code_node_unref0 (root_symbol);
985 g_critical ("file %s: line %d: unexpected error: %s (%s, %d)", __FILE__, __LINE__, _inner_error0_->message, g_quark_to_string (_inner_error0_->domain), _inner_error0_->code);
986 g_clear_error (&_inner_error0_);
987 return;
988 }
989 _tmp87_ = old_file;
990 len = g_mapped_file_get_length (_tmp87_);
991 _tmp88_ = new_file;
992 if (len == g_mapped_file_get_length (_tmp88_)) {
993 GMappedFile* _tmp89_;
994 gchar* _tmp90_;
995 GMappedFile* _tmp91_;
996 gchar* _tmp92_;
997 _tmp89_ = old_file;
998 _tmp90_ = g_mapped_file_get_contents (_tmp89_);
999 _tmp91_ = new_file;
1000 _tmp92_ = g_mapped_file_get_contents (_tmp91_);
1001 if (memcmp (_tmp90_, _tmp92_, len) == 0) {
1002 changed = FALSE;
1003 }
1004 }
1005 _g_mapped_file_unref0 (old_file);
1006 old_file = NULL;
1007 _g_mapped_file_unref0 (new_file);
1008 new_file = NULL;
1009 _g_mapped_file_unref0 (new_file);
1010 _g_mapped_file_unref0 (old_file);
1011 }
1012 goto __finally0;
1013 __catch0_g_file_error:
1014 {
1015 g_clear_error (&_inner_error0_);
1016 }
1017 __finally0:
1018 if (G_UNLIKELY (_inner_error0_ != NULL)) {
1019 _g_free0 (header);
1020 _g_free0 (_tmp57_);
1021 _g_free0 (temp_filename);
1022 _g_free0 (filename);
1023 _vala_code_node_unref0 (glib_ns);
1024 _vala_code_node_unref0 (root_symbol);
1025 g_critical ("file %s: line %d: uncaught error: %s (%s, %d)", __FILE__, __LINE__, _inner_error0_->message, g_quark_to_string (_inner_error0_->domain), _inner_error0_->code);
1026 g_clear_error (&_inner_error0_);
1027 return;
1028 }
1029 if (changed) {
1030 const gchar* _tmp93_;
1031 const gchar* _tmp94_;
1032 _tmp93_ = temp_filename;
1033 _tmp94_ = filename;
1034 g_rename (_tmp93_, _tmp94_);
1035 } else {
1036 const gchar* _tmp95_;
1037 _tmp95_ = temp_filename;
1038 g_unlink (_tmp95_);
1039 }
1040 }
1041 {
1042 ValaIterator* _ns_it = NULL;
1043 ValaHashSet* _tmp96_;
1044 ValaIterator* _tmp97_;
1045 _tmp96_ = self->priv->unannotated_namespaces;
1046 _tmp97_ = vala_iterable_iterator ((ValaIterable*) _tmp96_);
1047 _ns_it = _tmp97_;
1048 while (TRUE) {
1049 ValaIterator* _tmp98_;
1050 ValaNamespace* ns = NULL;
1051 ValaIterator* _tmp99_;
1052 gpointer _tmp100_;
1053 ValaHashSet* _tmp101_;
1054 ValaNamespace* _tmp102_;
1055 _tmp98_ = _ns_it;
1056 if (!vala_iterator_next (_tmp98_)) {
1057 break;
1058 }
1059 _tmp99_ = _ns_it;
1060 _tmp100_ = vala_iterator_get (_tmp99_);
1061 ns = (ValaNamespace*) _tmp100_;
1062 _tmp101_ = self->priv->our_namespaces;
1063 _tmp102_ = ns;
1064 if (!vala_collection_contains ((ValaCollection*) _tmp101_, _tmp102_)) {
1065 ValaNamespace* _tmp103_;
1066 ValaSourceReference* _tmp104_;
1067 ValaSourceReference* _tmp105_;
1068 ValaNamespace* _tmp106_;
1069 const gchar* _tmp107_;
1070 const gchar* _tmp108_;
1071 gchar* _tmp109_;
1072 gchar* _tmp110_;
1073 _tmp103_ = ns;
1074 _tmp104_ = vala_code_node_get_source_reference ((ValaCodeNode*) _tmp103_);
1075 _tmp105_ = _tmp104_;
1076 _tmp106_ = ns;
1077 _tmp107_ = vala_symbol_get_name ((ValaSymbol*) _tmp106_);
1078 _tmp108_ = _tmp107_;
1079 _tmp109_ = g_strdup_printf ("Namespace %s does not have a GIR namespace and version annotation", _tmp108_);
1080 _tmp110_ = _tmp109_;
1081 vala_report_warning (_tmp105_, _tmp110_);
1082 _g_free0 (_tmp110_);
1083 }
1084 _vala_code_node_unref0 (ns);
1085 }
1086 _vala_iterator_unref0 (_ns_it);
1087 }
1088 {
1089 ValaIterator* _ns_it = NULL;
1090 ValaHashSet* _tmp111_;
1091 ValaIterator* _tmp112_;
1092 _tmp111_ = self->priv->our_namespaces;
1093 _tmp112_ = vala_iterable_iterator ((ValaIterable*) _tmp111_);
1094 _ns_it = _tmp112_;
1095 while (TRUE) {
1096 ValaIterator* _tmp113_;
1097 ValaNamespace* ns = NULL;
1098 ValaIterator* _tmp114_;
1099 gpointer _tmp115_;
1100 ValaNamespace* _tmp116_;
1101 ValaSourceReference* _tmp117_;
1102 ValaSourceReference* _tmp118_;
1103 ValaSourceFile* _tmp119_;
1104 ValaSourceFile* _tmp120_;
1105 ValaNamespace* _tmp121_;
1106 ValaSourceReference* _tmp122_;
1107 ValaSourceReference* _tmp123_;
1108 ValaSourceFile* _tmp124_;
1109 ValaSourceFile* _tmp125_;
1110 _tmp113_ = _ns_it;
1111 if (!vala_iterator_next (_tmp113_)) {
1112 break;
1113 }
1114 _tmp114_ = _ns_it;
1115 _tmp115_ = vala_iterator_get (_tmp114_);
1116 ns = (ValaNamespace*) _tmp115_;
1117 _tmp116_ = ns;
1118 _tmp117_ = vala_code_node_get_source_reference ((ValaCodeNode*) _tmp116_);
1119 _tmp118_ = _tmp117_;
1120 _tmp119_ = vala_source_reference_get_file (_tmp118_);
1121 _tmp120_ = _tmp119_;
1122 vala_source_file_set_gir_namespace (_tmp120_, gir_namespace);
1123 _tmp121_ = ns;
1124 _tmp122_ = vala_code_node_get_source_reference ((ValaCodeNode*) _tmp121_);
1125 _tmp123_ = _tmp122_;
1126 _tmp124_ = vala_source_reference_get_file (_tmp123_);
1127 _tmp125_ = _tmp124_;
1128 vala_source_file_set_gir_version (_tmp125_, gir_version);
1129 _vala_code_node_unref0 (ns);
1130 }
1131 _vala_iterator_unref0 (_ns_it);
1132 }
1133 _tmp126_ = self->priv->our_namespaces;
1134 _tmp127_ = vala_collection_get_size ((ValaCollection*) _tmp126_);
1135 _tmp128_ = _tmp127_;
1136 if (_tmp128_ == 0) {
1137 vala_report_error (NULL, "No suitable namespace found to export for GIR");
1138 }
1139 _vala_code_context_unref0 (self->priv->context);
1140 self->priv->context = NULL;
1141 _g_free0 (header);
1142 _g_free0 (_tmp57_);
1143 _g_free0 (temp_filename);
1144 _g_free0 (filename);
1145 _vala_code_node_unref0 (glib_ns);
1146 _vala_code_node_unref0 (root_symbol);
1147 }
1148
1149 static void
vala_gir_writer_write_doc(ValaGIRWriter * self,const gchar * comment)1150 vala_gir_writer_write_doc (ValaGIRWriter* self,
1151 const gchar* comment)
1152 {
1153 g_return_if_fail (self != NULL);
1154 if (comment != NULL) {
1155 GString* _tmp0_;
1156 GString* _tmp1_;
1157 GString* _tmp2_;
1158 vala_gir_writer_write_indent (self);
1159 _tmp0_ = self->priv->buffer;
1160 g_string_append (_tmp0_, "<doc xml:whitespace=\"preserve\">");
1161 _tmp1_ = self->priv->buffer;
1162 g_string_append (_tmp1_, comment);
1163 _tmp2_ = self->priv->buffer;
1164 g_string_append (_tmp2_, "</doc>\n");
1165 }
1166 }
1167
1168 static void
vala_gir_writer_write_package(ValaGIRWriter * self,const gchar * package)1169 vala_gir_writer_write_package (ValaGIRWriter* self,
1170 const gchar* package)
1171 {
1172 GString* _tmp0_;
1173 g_return_if_fail (self != NULL);
1174 g_return_if_fail (package != NULL);
1175 vala_gir_writer_write_indent (self);
1176 _tmp0_ = self->priv->buffer;
1177 g_string_append_printf (_tmp0_, "<package name=\"%s\"/>\n", package);
1178 }
1179
1180 static void
vala_gir_writer_write_c_includes(ValaGIRWriter * self,ValaNamespace * ns)1181 vala_gir_writer_write_c_includes (ValaGIRWriter* self,
1182 ValaNamespace* ns)
1183 {
1184 ValaSet* header_filenames = NULL;
1185 GHashFunc _tmp0_;
1186 GEqualFunc _tmp1_;
1187 ValaHashSet* _tmp2_;
1188 gchar* _tmp3_;
1189 gchar* _tmp4_;
1190 gchar** _tmp5_;
1191 gchar** _tmp6_;
1192 gchar** _tmp7_;
1193 gint _tmp7__length1;
1194 g_return_if_fail (self != NULL);
1195 g_return_if_fail (ns != NULL);
1196 _tmp0_ = g_str_hash;
1197 _tmp1_ = g_str_equal;
1198 _tmp2_ = vala_hash_set_new (G_TYPE_STRING, (GBoxedCopyFunc) g_strdup, (GDestroyNotify) g_free, _tmp0_, _tmp1_);
1199 header_filenames = (ValaSet*) _tmp2_;
1200 _tmp3_ = vala_get_ccode_header_filenames ((ValaSymbol*) ns);
1201 _tmp4_ = _tmp3_;
1202 _tmp6_ = _tmp5_ = g_strsplit (_tmp4_, ",", 0);
1203 _tmp7_ = _tmp6_;
1204 _tmp7__length1 = _vala_array_length (_tmp5_);
1205 _g_free0 (_tmp4_);
1206 {
1207 gchar** c_header_filename_collection = NULL;
1208 gint c_header_filename_collection_length1 = 0;
1209 gint _c_header_filename_collection_size_ = 0;
1210 gint c_header_filename_it = 0;
1211 c_header_filename_collection = _tmp7_;
1212 c_header_filename_collection_length1 = _tmp7__length1;
1213 for (c_header_filename_it = 0; c_header_filename_it < c_header_filename_collection_length1; c_header_filename_it = c_header_filename_it + 1) {
1214 const gchar* c_header_filename = NULL;
1215 c_header_filename = c_header_filename_collection[c_header_filename_it];
1216 {
1217 ValaSet* _tmp8_;
1218 const gchar* _tmp9_;
1219 _tmp8_ = header_filenames;
1220 _tmp9_ = c_header_filename;
1221 vala_collection_add ((ValaCollection*) _tmp8_, _tmp9_);
1222 }
1223 }
1224 c_header_filename_collection = (_vala_array_free (c_header_filename_collection, c_header_filename_collection_length1, (GDestroyNotify) g_free), NULL);
1225 }
1226 {
1227 ValaIterator* _symbol_it = NULL;
1228 ValaScope* _tmp10_;
1229 ValaScope* _tmp11_;
1230 ValaMap* _tmp12_;
1231 ValaCollection* _tmp13_;
1232 ValaCollection* _tmp14_;
1233 ValaIterator* _tmp15_;
1234 ValaIterator* _tmp16_;
1235 _tmp10_ = vala_symbol_get_scope ((ValaSymbol*) ns);
1236 _tmp11_ = _tmp10_;
1237 _tmp12_ = vala_scope_get_symbol_table (_tmp11_);
1238 _tmp13_ = vala_map_get_values (_tmp12_);
1239 _tmp14_ = _tmp13_;
1240 _tmp15_ = vala_iterable_iterator ((ValaIterable*) _tmp14_);
1241 _tmp16_ = _tmp15_;
1242 _vala_iterable_unref0 (_tmp14_);
1243 _symbol_it = _tmp16_;
1244 while (TRUE) {
1245 ValaIterator* _tmp17_;
1246 ValaSymbol* symbol = NULL;
1247 ValaIterator* _tmp18_;
1248 gpointer _tmp19_;
1249 ValaSymbol* _tmp20_;
1250 gboolean _tmp21_;
1251 gboolean _tmp22_;
1252 ValaSymbol* _tmp23_;
1253 gchar* _tmp24_;
1254 gchar* _tmp25_;
1255 gchar** _tmp26_;
1256 gchar** _tmp27_;
1257 gchar** _tmp28_;
1258 gint _tmp28__length1;
1259 _tmp17_ = _symbol_it;
1260 if (!vala_iterator_next (_tmp17_)) {
1261 break;
1262 }
1263 _tmp18_ = _symbol_it;
1264 _tmp19_ = vala_iterator_get (_tmp18_);
1265 symbol = (ValaSymbol*) _tmp19_;
1266 _tmp20_ = symbol;
1267 _tmp21_ = vala_symbol_get_external_package (_tmp20_);
1268 _tmp22_ = _tmp21_;
1269 if (_tmp22_) {
1270 _vala_code_node_unref0 (symbol);
1271 continue;
1272 }
1273 _tmp23_ = symbol;
1274 _tmp24_ = vala_get_ccode_header_filenames (_tmp23_);
1275 _tmp25_ = _tmp24_;
1276 _tmp27_ = _tmp26_ = g_strsplit (_tmp25_, ",", 0);
1277 _tmp28_ = _tmp27_;
1278 _tmp28__length1 = _vala_array_length (_tmp26_);
1279 _g_free0 (_tmp25_);
1280 {
1281 gchar** c_header_filename_collection = NULL;
1282 gint c_header_filename_collection_length1 = 0;
1283 gint _c_header_filename_collection_size_ = 0;
1284 gint c_header_filename_it = 0;
1285 c_header_filename_collection = _tmp28_;
1286 c_header_filename_collection_length1 = _tmp28__length1;
1287 for (c_header_filename_it = 0; c_header_filename_it < c_header_filename_collection_length1; c_header_filename_it = c_header_filename_it + 1) {
1288 const gchar* c_header_filename = NULL;
1289 c_header_filename = c_header_filename_collection[c_header_filename_it];
1290 {
1291 ValaSet* _tmp29_;
1292 const gchar* _tmp30_;
1293 _tmp29_ = header_filenames;
1294 _tmp30_ = c_header_filename;
1295 vala_collection_add ((ValaCollection*) _tmp29_, _tmp30_);
1296 }
1297 }
1298 c_header_filename_collection = (_vala_array_free (c_header_filename_collection, c_header_filename_collection_length1, (GDestroyNotify) g_free), NULL);
1299 }
1300 _vala_code_node_unref0 (symbol);
1301 }
1302 _vala_iterator_unref0 (_symbol_it);
1303 }
1304 {
1305 ValaIterator* _c_header_filename_it = NULL;
1306 ValaSet* _tmp31_;
1307 ValaIterator* _tmp32_;
1308 _tmp31_ = header_filenames;
1309 _tmp32_ = vala_iterable_iterator ((ValaIterable*) _tmp31_);
1310 _c_header_filename_it = _tmp32_;
1311 while (TRUE) {
1312 ValaIterator* _tmp33_;
1313 gchar* c_header_filename = NULL;
1314 ValaIterator* _tmp34_;
1315 gpointer _tmp35_;
1316 const gchar* _tmp36_;
1317 _tmp33_ = _c_header_filename_it;
1318 if (!vala_iterator_next (_tmp33_)) {
1319 break;
1320 }
1321 _tmp34_ = _c_header_filename_it;
1322 _tmp35_ = vala_iterator_get (_tmp34_);
1323 c_header_filename = (gchar*) _tmp35_;
1324 _tmp36_ = c_header_filename;
1325 vala_gir_writer_write_c_include (self, _tmp36_);
1326 _g_free0 (c_header_filename);
1327 }
1328 _vala_iterator_unref0 (_c_header_filename_it);
1329 }
1330 _vala_iterable_unref0 (header_filenames);
1331 }
1332
1333 static void
vala_gir_writer_write_c_include(ValaGIRWriter * self,const gchar * name)1334 vala_gir_writer_write_c_include (ValaGIRWriter* self,
1335 const gchar* name)
1336 {
1337 GString* _tmp0_;
1338 g_return_if_fail (self != NULL);
1339 g_return_if_fail (name != NULL);
1340 vala_gir_writer_write_indent (self);
1341 _tmp0_ = self->priv->buffer;
1342 g_string_append_printf (_tmp0_, "<c:include name=\"%s\"/>\n", name);
1343 }
1344
1345 static void
vala_gir_writer_real_visit_source_file(ValaCodeVisitor * base,ValaSourceFile * source_file)1346 vala_gir_writer_real_visit_source_file (ValaCodeVisitor* base,
1347 ValaSourceFile* source_file)
1348 {
1349 ValaGIRWriter * self;
1350 ValaSourceFileType _tmp0_;
1351 ValaSourceFileType _tmp1_;
1352 self = (ValaGIRWriter*) base;
1353 g_return_if_fail (source_file != NULL);
1354 _tmp0_ = vala_source_file_get_file_type (source_file);
1355 _tmp1_ = _tmp0_;
1356 if (_tmp1_ != VALA_SOURCE_FILE_TYPE_PACKAGE) {
1357 return;
1358 }
1359 {
1360 ValaList* _node_list = NULL;
1361 ValaList* _tmp2_;
1362 ValaList* _tmp3_;
1363 gint _node_size = 0;
1364 ValaList* _tmp4_;
1365 gint _tmp5_;
1366 gint _tmp6_;
1367 gint _node_index = 0;
1368 _tmp2_ = vala_source_file_get_nodes (source_file);
1369 _tmp3_ = _vala_iterable_ref0 (_tmp2_);
1370 _node_list = _tmp3_;
1371 _tmp4_ = _node_list;
1372 _tmp5_ = vala_collection_get_size ((ValaCollection*) _tmp4_);
1373 _tmp6_ = _tmp5_;
1374 _node_size = _tmp6_;
1375 _node_index = -1;
1376 while (TRUE) {
1377 gint _tmp7_;
1378 gint _tmp8_;
1379 ValaCodeNode* node = NULL;
1380 ValaList* _tmp9_;
1381 gpointer _tmp10_;
1382 gboolean _tmp11_ = FALSE;
1383 ValaCodeNode* _tmp12_;
1384 _node_index = _node_index + 1;
1385 _tmp7_ = _node_index;
1386 _tmp8_ = _node_size;
1387 if (!(_tmp7_ < _tmp8_)) {
1388 break;
1389 }
1390 _tmp9_ = _node_list;
1391 _tmp10_ = vala_list_get (_tmp9_, _node_index);
1392 node = (ValaCodeNode*) _tmp10_;
1393 _tmp12_ = node;
1394 if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp12_, VALA_TYPE_NAMESPACE)) {
1395 ValaCodeNode* _tmp13_;
1396 ValaSymbol* _tmp14_;
1397 ValaSymbol* _tmp15_;
1398 ValaCodeContext* _tmp16_;
1399 ValaNamespace* _tmp17_;
1400 ValaNamespace* _tmp18_;
1401 _tmp13_ = node;
1402 _tmp14_ = vala_symbol_get_parent_symbol ((ValaSymbol*) G_TYPE_CHECK_INSTANCE_CAST (_tmp13_, VALA_TYPE_NAMESPACE, ValaNamespace));
1403 _tmp15_ = _tmp14_;
1404 _tmp16_ = self->priv->context;
1405 _tmp17_ = vala_code_context_get_root (_tmp16_);
1406 _tmp18_ = _tmp17_;
1407 _tmp11_ = _tmp15_ == G_TYPE_CHECK_INSTANCE_CAST (_tmp18_, VALA_TYPE_SYMBOL, ValaSymbol);
1408 } else {
1409 _tmp11_ = FALSE;
1410 }
1411 if (_tmp11_) {
1412 ValaAttribute* a = NULL;
1413 ValaCodeNode* _tmp19_;
1414 ValaAttribute* _tmp20_;
1415 ValaAttribute* _tmp21_;
1416 gboolean _tmp22_ = FALSE;
1417 ValaAttribute* _tmp23_;
1418 gboolean _tmp28_ = FALSE;
1419 ValaAttribute* _tmp29_;
1420 _tmp19_ = node;
1421 _tmp20_ = vala_code_node_get_attribute (_tmp19_, "CCode");
1422 _tmp21_ = _vala_code_node_ref0 (_tmp20_);
1423 a = _tmp21_;
1424 _tmp23_ = a;
1425 if (_tmp23_ != NULL) {
1426 ValaAttribute* _tmp24_;
1427 _tmp24_ = a;
1428 _tmp22_ = vala_attribute_has_argument (_tmp24_, "gir_namespace");
1429 } else {
1430 _tmp22_ = FALSE;
1431 }
1432 if (_tmp22_) {
1433 ValaAttribute* _tmp25_;
1434 gchar* _tmp26_;
1435 gchar* _tmp27_;
1436 _tmp25_ = a;
1437 _tmp26_ = vala_attribute_get_string (_tmp25_, "gir_namespace", NULL);
1438 _tmp27_ = _tmp26_;
1439 vala_source_file_set_gir_namespace (source_file, _tmp27_);
1440 _g_free0 (_tmp27_);
1441 }
1442 _tmp29_ = a;
1443 if (_tmp29_ != NULL) {
1444 ValaAttribute* _tmp30_;
1445 _tmp30_ = a;
1446 _tmp28_ = vala_attribute_has_argument (_tmp30_, "gir_version");
1447 } else {
1448 _tmp28_ = FALSE;
1449 }
1450 if (_tmp28_) {
1451 ValaAttribute* _tmp31_;
1452 gchar* _tmp32_;
1453 gchar* _tmp33_;
1454 _tmp31_ = a;
1455 _tmp32_ = vala_attribute_get_string (_tmp31_, "gir_version", NULL);
1456 _tmp33_ = _tmp32_;
1457 vala_source_file_set_gir_version (source_file, _tmp33_);
1458 _g_free0 (_tmp33_);
1459 }
1460 _vala_code_node_unref0 (a);
1461 _vala_code_node_unref0 (node);
1462 break;
1463 }
1464 _vala_code_node_unref0 (node);
1465 }
1466 _vala_iterable_unref0 (_node_list);
1467 }
1468 }
1469
1470 static void
vala_gir_writer_real_visit_namespace(ValaCodeVisitor * base,ValaNamespace * ns)1471 vala_gir_writer_real_visit_namespace (ValaCodeVisitor* base,
1472 ValaNamespace* ns)
1473 {
1474 ValaGIRWriter * self;
1475 gboolean _tmp0_;
1476 gboolean _tmp1_;
1477 const gchar* _tmp2_;
1478 const gchar* _tmp3_;
1479 ValaSymbol* _tmp8_;
1480 ValaSymbol* _tmp9_;
1481 const gchar* _tmp10_;
1482 const gchar* _tmp11_;
1483 ValaHashSet* _tmp12_;
1484 gint _tmp13_;
1485 gint _tmp14_;
1486 GString* _tmp21_;
1487 const gchar* _tmp22_;
1488 const gchar* _tmp23_;
1489 gchar* cprefix = NULL;
1490 gchar* _tmp24_;
1491 const gchar* _tmp25_;
1492 const gchar* _tmp28_;
1493 gchar* csymbol_prefix = NULL;
1494 gchar* _tmp33_;
1495 const gchar* _tmp34_;
1496 GString* _tmp37_;
1497 gint _tmp38_;
1498 ValaArrayList* _tmp39_;
1499 ValaArrayList* _tmp40_;
1500 gpointer _tmp41_;
1501 ValaSymbol* _tmp42_;
1502 gint _tmp43_;
1503 GString* _tmp44_;
1504 ValaHashSet* _tmp45_;
1505 self = (ValaGIRWriter*) base;
1506 g_return_if_fail (ns != NULL);
1507 _tmp0_ = vala_symbol_get_external_package ((ValaSymbol*) ns);
1508 _tmp1_ = _tmp0_;
1509 if (_tmp1_) {
1510 return;
1511 }
1512 if (!vala_gir_writer_is_visibility (self, (ValaSymbol*) ns)) {
1513 return;
1514 }
1515 _tmp2_ = vala_symbol_get_name ((ValaSymbol*) ns);
1516 _tmp3_ = _tmp2_;
1517 if (_tmp3_ == NULL) {
1518 ValaArrayList* _tmp4_;
1519 ValaArrayList* _tmp5_;
1520 gpointer _tmp6_;
1521 ValaSymbol* _tmp7_;
1522 _tmp4_ = self->priv->hierarchy;
1523 vala_list_insert ((ValaList*) _tmp4_, 0, (ValaSymbol*) ns);
1524 vala_code_node_accept_children ((ValaCodeNode*) ns, (ValaCodeVisitor*) self);
1525 _tmp5_ = self->priv->hierarchy;
1526 _tmp6_ = vala_list_remove_at ((ValaList*) _tmp5_, 0);
1527 _tmp7_ = (ValaSymbol*) _tmp6_;
1528 _vala_code_node_unref0 (_tmp7_);
1529 return;
1530 }
1531 _tmp8_ = vala_symbol_get_parent_symbol ((ValaSymbol*) ns);
1532 _tmp9_ = _tmp8_;
1533 _tmp10_ = vala_symbol_get_name (_tmp9_);
1534 _tmp11_ = _tmp10_;
1535 if (_tmp11_ != NULL) {
1536 vala_code_node_accept_children ((ValaCodeNode*) ns, (ValaCodeVisitor*) self);
1537 return;
1538 }
1539 _tmp12_ = self->priv->our_namespaces;
1540 _tmp13_ = vala_collection_get_size ((ValaCollection*) _tmp12_);
1541 _tmp14_ = _tmp13_;
1542 if (_tmp14_ > 0) {
1543 ValaSourceReference* _tmp15_;
1544 ValaSourceReference* _tmp16_;
1545 const gchar* _tmp17_;
1546 const gchar* _tmp18_;
1547 gchar* _tmp19_;
1548 gchar* _tmp20_;
1549 _tmp15_ = vala_code_node_get_source_reference ((ValaCodeNode*) ns);
1550 _tmp16_ = _tmp15_;
1551 _tmp17_ = vala_symbol_get_name ((ValaSymbol*) ns);
1552 _tmp18_ = _tmp17_;
1553 _tmp19_ = g_strdup_printf ("Secondary top-level namespace `%s' is not supported by GIR format", _tmp18_);
1554 _tmp20_ = _tmp19_;
1555 vala_report_error (_tmp16_, _tmp20_);
1556 _g_free0 (_tmp20_);
1557 return;
1558 }
1559 vala_gir_writer_write_c_includes (self, ns);
1560 vala_gir_writer_write_indent (self);
1561 _tmp21_ = self->priv->buffer;
1562 _tmp22_ = self->priv->gir_namespace;
1563 _tmp23_ = self->priv->gir_version;
1564 g_string_append_printf (_tmp21_, "<namespace name=\"%s\" version=\"%s\"", _tmp22_, _tmp23_);
1565 _tmp24_ = vala_get_ccode_prefix ((ValaSymbol*) ns);
1566 cprefix = _tmp24_;
1567 _tmp25_ = self->priv->gir_shared_library;
1568 if (_tmp25_ != NULL) {
1569 GString* _tmp26_;
1570 const gchar* _tmp27_;
1571 _tmp26_ = self->priv->buffer;
1572 _tmp27_ = self->priv->gir_shared_library;
1573 g_string_append_printf (_tmp26_, " shared-library=\"%s\"", _tmp27_);
1574 }
1575 _tmp28_ = cprefix;
1576 if (_tmp28_ != NULL) {
1577 GString* _tmp29_;
1578 const gchar* _tmp30_;
1579 GString* _tmp31_;
1580 const gchar* _tmp32_;
1581 _tmp29_ = self->priv->buffer;
1582 _tmp30_ = cprefix;
1583 g_string_append_printf (_tmp29_, " c:prefix=\"%s\"", _tmp30_);
1584 _tmp31_ = self->priv->buffer;
1585 _tmp32_ = cprefix;
1586 g_string_append_printf (_tmp31_, " c:identifier-prefixes=\"%s\"", _tmp32_);
1587 }
1588 _tmp33_ = vala_get_ccode_lower_case_suffix ((ValaSymbol*) ns);
1589 csymbol_prefix = _tmp33_;
1590 _tmp34_ = csymbol_prefix;
1591 if (_tmp34_ != NULL) {
1592 GString* _tmp35_;
1593 const gchar* _tmp36_;
1594 _tmp35_ = self->priv->buffer;
1595 _tmp36_ = csymbol_prefix;
1596 g_string_append_printf (_tmp35_, " c:symbol-prefixes=\"%s\"", _tmp36_);
1597 }
1598 _tmp37_ = self->priv->buffer;
1599 g_string_append_printf (_tmp37_, ">\n");
1600 _tmp38_ = self->priv->indent;
1601 self->priv->indent = _tmp38_ + 1;
1602 _tmp39_ = self->priv->hierarchy;
1603 vala_list_insert ((ValaList*) _tmp39_, 0, (ValaSymbol*) ns);
1604 vala_code_node_accept_children ((ValaCodeNode*) ns, (ValaCodeVisitor*) self);
1605 _tmp40_ = self->priv->hierarchy;
1606 _tmp41_ = vala_list_remove_at ((ValaList*) _tmp40_, 0);
1607 _tmp42_ = (ValaSymbol*) _tmp41_;
1608 _vala_code_node_unref0 (_tmp42_);
1609 _tmp43_ = self->priv->indent;
1610 self->priv->indent = _tmp43_ - 1;
1611 vala_gir_writer_write_indent (self);
1612 _tmp44_ = self->priv->buffer;
1613 g_string_append_printf (_tmp44_, "</namespace>\n");
1614 _tmp45_ = self->priv->our_namespaces;
1615 vala_collection_add ((ValaCollection*) _tmp45_, ns);
1616 vala_gir_writer_visit_deferred (self);
1617 _g_free0 (csymbol_prefix);
1618 _g_free0 (cprefix);
1619 }
1620
1621 static void
vala_gir_writer_write_symbol_attributes(ValaGIRWriter * self,ValaSymbol * symbol)1622 vala_gir_writer_write_symbol_attributes (ValaGIRWriter* self,
1623 ValaSymbol* symbol)
1624 {
1625 ValaVersionAttribute* _tmp1_;
1626 ValaVersionAttribute* _tmp2_;
1627 gboolean _tmp3_;
1628 gboolean _tmp4_;
1629 ValaVersionAttribute* _tmp18_;
1630 ValaVersionAttribute* _tmp19_;
1631 gchar* _tmp20_;
1632 gchar* _tmp21_;
1633 gchar* _tmp22_;
1634 gboolean _tmp23_;
1635 g_return_if_fail (self != NULL);
1636 g_return_if_fail (symbol != NULL);
1637 if (!vala_gir_writer_is_introspectable (self, symbol)) {
1638 GString* _tmp0_;
1639 _tmp0_ = self->priv->buffer;
1640 g_string_append_printf (_tmp0_, " introspectable=\"0\"");
1641 }
1642 _tmp1_ = vala_symbol_get_version (symbol);
1643 _tmp2_ = _tmp1_;
1644 _tmp3_ = vala_version_attribute_get_deprecated (_tmp2_);
1645 _tmp4_ = _tmp3_;
1646 if (_tmp4_) {
1647 GString* _tmp5_;
1648 ValaVersionAttribute* _tmp6_;
1649 ValaVersionAttribute* _tmp7_;
1650 gchar* _tmp8_;
1651 gchar* _tmp9_;
1652 gchar* _tmp10_;
1653 gboolean _tmp11_;
1654 _tmp5_ = self->priv->buffer;
1655 g_string_append_printf (_tmp5_, " deprecated=\"1\"");
1656 _tmp6_ = vala_symbol_get_version (symbol);
1657 _tmp7_ = _tmp6_;
1658 _tmp8_ = vala_version_attribute_get_deprecated_since (_tmp7_);
1659 _tmp9_ = _tmp8_;
1660 _tmp10_ = _tmp9_;
1661 _tmp11_ = _tmp10_ != NULL;
1662 _g_free0 (_tmp10_);
1663 if (_tmp11_) {
1664 GString* _tmp12_;
1665 ValaVersionAttribute* _tmp13_;
1666 ValaVersionAttribute* _tmp14_;
1667 gchar* _tmp15_;
1668 gchar* _tmp16_;
1669 gchar* _tmp17_;
1670 _tmp12_ = self->priv->buffer;
1671 _tmp13_ = vala_symbol_get_version (symbol);
1672 _tmp14_ = _tmp13_;
1673 _tmp15_ = vala_version_attribute_get_deprecated_since (_tmp14_);
1674 _tmp16_ = _tmp15_;
1675 _tmp17_ = _tmp16_;
1676 g_string_append_printf (_tmp12_, " deprecated-version=\"%s\"", _tmp17_);
1677 _g_free0 (_tmp17_);
1678 }
1679 }
1680 _tmp18_ = vala_symbol_get_version (symbol);
1681 _tmp19_ = _tmp18_;
1682 _tmp20_ = vala_version_attribute_get_since (_tmp19_);
1683 _tmp21_ = _tmp20_;
1684 _tmp22_ = _tmp21_;
1685 _tmp23_ = _tmp22_ != NULL;
1686 _g_free0 (_tmp22_);
1687 if (_tmp23_) {
1688 GString* _tmp24_;
1689 ValaVersionAttribute* _tmp25_;
1690 ValaVersionAttribute* _tmp26_;
1691 gchar* _tmp27_;
1692 gchar* _tmp28_;
1693 gchar* _tmp29_;
1694 _tmp24_ = self->priv->buffer;
1695 _tmp25_ = vala_symbol_get_version (symbol);
1696 _tmp26_ = _tmp25_;
1697 _tmp27_ = vala_version_attribute_get_since (_tmp26_);
1698 _tmp28_ = _tmp27_;
1699 _tmp29_ = _tmp28_;
1700 g_string_append_printf (_tmp24_, " version=\"%s\"", _tmp29_);
1701 _g_free0 (_tmp29_);
1702 }
1703 }
1704
1705 static glong
string_strnlen(gchar * str,glong maxlen)1706 string_strnlen (gchar* str,
1707 glong maxlen)
1708 {
1709 gchar* end = NULL;
1710 gchar* _tmp0_;
1711 gchar* _tmp1_;
1712 glong result = 0L;
1713 _tmp0_ = memchr (str, 0, (gsize) maxlen);
1714 end = _tmp0_;
1715 _tmp1_ = end;
1716 if (_tmp1_ == NULL) {
1717 result = maxlen;
1718 return result;
1719 } else {
1720 gchar* _tmp2_;
1721 _tmp2_ = end;
1722 result = (glong) (_tmp2_ - str);
1723 return result;
1724 }
1725 }
1726
1727 static gchar*
string_substring(const gchar * self,glong offset,glong len)1728 string_substring (const gchar* self,
1729 glong offset,
1730 glong len)
1731 {
1732 glong string_length = 0L;
1733 gboolean _tmp0_ = FALSE;
1734 gchar* _tmp3_;
1735 gchar* result = NULL;
1736 g_return_val_if_fail (self != NULL, NULL);
1737 if (offset >= ((glong) 0)) {
1738 _tmp0_ = len >= ((glong) 0);
1739 } else {
1740 _tmp0_ = FALSE;
1741 }
1742 if (_tmp0_) {
1743 string_length = string_strnlen ((gchar*) self, offset + len);
1744 } else {
1745 gint _tmp1_;
1746 gint _tmp2_;
1747 _tmp1_ = strlen (self);
1748 _tmp2_ = _tmp1_;
1749 string_length = (glong) _tmp2_;
1750 }
1751 if (offset < ((glong) 0)) {
1752 offset = string_length + offset;
1753 g_return_val_if_fail (offset >= ((glong) 0), NULL);
1754 } else {
1755 g_return_val_if_fail (offset <= string_length, NULL);
1756 }
1757 if (len < ((glong) 0)) {
1758 len = string_length - offset;
1759 }
1760 g_return_val_if_fail ((offset + len) <= string_length, NULL);
1761 _tmp3_ = g_strndup (((gchar*) self) + offset, (gsize) len);
1762 result = _tmp3_;
1763 return result;
1764 }
1765
1766 static void
vala_gir_writer_real_visit_class(ValaCodeVisitor * base,ValaClass * cl)1767 vala_gir_writer_real_visit_class (ValaCodeVisitor* base,
1768 ValaClass* cl)
1769 {
1770 ValaGIRWriter * self;
1771 gboolean _tmp0_;
1772 gboolean _tmp1_;
1773 ValaArrayList* _tmp2_;
1774 gpointer _tmp3_;
1775 ValaSymbol* _tmp4_;
1776 gboolean _tmp5_;
1777 gboolean _tmp7_;
1778 gboolean _tmp8_;
1779 self = (ValaGIRWriter*) base;
1780 g_return_if_fail (cl != NULL);
1781 _tmp0_ = vala_symbol_get_external_package ((ValaSymbol*) cl);
1782 _tmp1_ = _tmp0_;
1783 if (_tmp1_) {
1784 return;
1785 }
1786 if (!vala_gir_writer_check_accessibility (self, (ValaSymbol*) cl)) {
1787 return;
1788 }
1789 if (!vala_gir_writer_has_namespace (self, (ValaSymbol*) cl)) {
1790 return;
1791 }
1792 _tmp2_ = self->priv->hierarchy;
1793 _tmp3_ = vala_list_get ((ValaList*) _tmp2_, 0);
1794 _tmp4_ = (ValaSymbol*) _tmp3_;
1795 _tmp5_ = !G_TYPE_CHECK_INSTANCE_TYPE (_tmp4_, VALA_TYPE_NAMESPACE);
1796 _vala_code_node_unref0 (_tmp4_);
1797 if (_tmp5_) {
1798 ValaArrayList* _tmp6_;
1799 _tmp6_ = self->priv->deferred;
1800 vala_collection_add ((ValaCollection*) _tmp6_, (ValaCodeNode*) cl);
1801 return;
1802 }
1803 _tmp7_ = vala_class_get_is_compact (cl);
1804 _tmp8_ = _tmp7_;
1805 if (!_tmp8_) {
1806 gchar* gtype_struct_name = NULL;
1807 gchar* _tmp9_;
1808 gchar* _tmp10_;
1809 gchar* _tmp11_;
1810 gchar* _tmp12_;
1811 GString* _tmp13_;
1812 gchar* _tmp14_;
1813 gchar* _tmp15_;
1814 GString* _tmp16_;
1815 const gchar* _tmp17_;
1816 ValaClass* _tmp18_;
1817 ValaClass* _tmp19_;
1818 gboolean _tmp38_;
1819 gboolean _tmp39_;
1820 GString* _tmp41_;
1821 gint _tmp42_;
1822 gchar* _tmp43_;
1823 gchar* _tmp44_;
1824 GString* _tmp65_;
1825 gint _tmp66_;
1826 ValaClass* _tmp67_;
1827 ValaClass* _tmp68_;
1828 gint _tmp85_;
1829 GString* _tmp86_;
1830 ValaClass* _tmp87_;
1831 ValaClass* _tmp88_;
1832 ValaCodeContext* _tmp94_;
1833 gboolean _tmp95_;
1834 gboolean _tmp96_;
1835 gboolean _tmp106_ = FALSE;
1836 ValaClass* _tmp107_;
1837 ValaClass* _tmp108_;
1838 ValaArrayList* _tmp122_;
1839 ValaArrayList* _tmp123_;
1840 gpointer _tmp124_;
1841 ValaSymbol* _tmp125_;
1842 ValaCodeContext* _tmp126_;
1843 gboolean _tmp127_;
1844 gboolean _tmp128_;
1845 gint _tmp138_;
1846 GString* _tmp139_;
1847 GString* _tmp140_;
1848 const gchar* _tmp141_;
1849 GString* _tmp142_;
1850 gchar* _tmp143_;
1851 gchar* _tmp144_;
1852 GString* _tmp145_;
1853 gint _tmp146_;
1854 GString* _tmp147_;
1855 gint _tmp148_;
1856 ValaClass* _tmp149_;
1857 ValaClass* _tmp150_;
1858 gint _tmp164_;
1859 GString* _tmp165_;
1860 gint _tmp289_;
1861 GString* _tmp290_;
1862 GString* _tmp291_;
1863 gchar* _tmp292_;
1864 gchar* _tmp293_;
1865 gchar* _tmp294_;
1866 gchar* _tmp295_;
1867 _tmp9_ = vala_gir_writer_get_gir_name (self, (ValaSymbol*) cl);
1868 _tmp10_ = _tmp9_;
1869 _tmp11_ = g_strconcat (_tmp10_, "Class", NULL);
1870 _tmp12_ = _tmp11_;
1871 _g_free0 (_tmp10_);
1872 gtype_struct_name = _tmp12_;
1873 vala_gir_writer_write_indent (self);
1874 _tmp13_ = self->priv->buffer;
1875 _tmp14_ = vala_gir_writer_get_gir_name (self, (ValaSymbol*) cl);
1876 _tmp15_ = _tmp14_;
1877 g_string_append_printf (_tmp13_, "<class name=\"%s\"", _tmp15_);
1878 _g_free0 (_tmp15_);
1879 vala_gir_writer_write_gtype_attributes (self, (ValaTypeSymbol*) cl, TRUE);
1880 _tmp16_ = self->priv->buffer;
1881 _tmp17_ = gtype_struct_name;
1882 g_string_append_printf (_tmp16_, " glib:type-struct=\"%s\"", _tmp17_);
1883 _tmp18_ = vala_class_get_base_class (cl);
1884 _tmp19_ = _tmp18_;
1885 if (_tmp19_ == NULL) {
1886 GString* _tmp20_;
1887 GString* _tmp21_;
1888 gchar* _tmp22_;
1889 gchar* _tmp23_;
1890 GString* _tmp24_;
1891 gchar* _tmp25_;
1892 gchar* _tmp26_;
1893 GString* _tmp27_;
1894 gchar* _tmp28_;
1895 gchar* _tmp29_;
1896 GString* _tmp30_;
1897 gchar* _tmp31_;
1898 gchar* _tmp32_;
1899 _tmp20_ = self->priv->buffer;
1900 g_string_append_printf (_tmp20_, " glib:fundamental=\"1\"");
1901 _tmp21_ = self->priv->buffer;
1902 _tmp22_ = vala_get_ccode_ref_function ((ValaTypeSymbol*) cl);
1903 _tmp23_ = _tmp22_;
1904 g_string_append_printf (_tmp21_, " glib:ref-func=\"%s\"", _tmp23_);
1905 _g_free0 (_tmp23_);
1906 _tmp24_ = self->priv->buffer;
1907 _tmp25_ = vala_get_ccode_unref_function ((ValaObjectTypeSymbol*) cl);
1908 _tmp26_ = _tmp25_;
1909 g_string_append_printf (_tmp24_, " glib:unref-func=\"%s\"", _tmp26_);
1910 _g_free0 (_tmp26_);
1911 _tmp27_ = self->priv->buffer;
1912 _tmp28_ = vala_get_ccode_set_value_function ((ValaCodeNode*) cl);
1913 _tmp29_ = _tmp28_;
1914 g_string_append_printf (_tmp27_, " glib:set-value-func=\"%s\"", _tmp29_);
1915 _g_free0 (_tmp29_);
1916 _tmp30_ = self->priv->buffer;
1917 _tmp31_ = vala_get_ccode_get_value_function ((ValaCodeNode*) cl);
1918 _tmp32_ = _tmp31_;
1919 g_string_append_printf (_tmp30_, " glib:get-value-func=\"%s\"", _tmp32_);
1920 _g_free0 (_tmp32_);
1921 } else {
1922 GString* _tmp33_;
1923 ValaClass* _tmp34_;
1924 ValaClass* _tmp35_;
1925 gchar* _tmp36_;
1926 gchar* _tmp37_;
1927 _tmp33_ = self->priv->buffer;
1928 _tmp34_ = vala_class_get_base_class (cl);
1929 _tmp35_ = _tmp34_;
1930 _tmp36_ = vala_gir_writer_gi_type_name (self, (ValaTypeSymbol*) _tmp35_);
1931 _tmp37_ = _tmp36_;
1932 g_string_append_printf (_tmp33_, " parent=\"%s\"", _tmp37_);
1933 _g_free0 (_tmp37_);
1934 }
1935 _tmp38_ = vala_class_get_is_abstract (cl);
1936 _tmp39_ = _tmp38_;
1937 if (_tmp39_) {
1938 GString* _tmp40_;
1939 _tmp40_ = self->priv->buffer;
1940 g_string_append_printf (_tmp40_, " abstract=\"1\"");
1941 }
1942 vala_gir_writer_write_symbol_attributes (self, (ValaSymbol*) cl);
1943 _tmp41_ = self->priv->buffer;
1944 g_string_append_printf (_tmp41_, ">\n");
1945 _tmp42_ = self->priv->indent;
1946 self->priv->indent = _tmp42_ + 1;
1947 _tmp43_ = vala_gir_writer_get_class_comment (self, cl);
1948 _tmp44_ = _tmp43_;
1949 vala_gir_writer_write_doc (self, _tmp44_);
1950 _g_free0 (_tmp44_);
1951 {
1952 ValaList* _base_type_list = NULL;
1953 ValaList* _tmp45_;
1954 ValaList* _tmp46_;
1955 gint _base_type_size = 0;
1956 ValaList* _tmp47_;
1957 gint _tmp48_;
1958 gint _tmp49_;
1959 gint _base_type_index = 0;
1960 _tmp45_ = vala_class_get_base_types (cl);
1961 _tmp46_ = _vala_iterable_ref0 (_tmp45_);
1962 _base_type_list = _tmp46_;
1963 _tmp47_ = _base_type_list;
1964 _tmp48_ = vala_collection_get_size ((ValaCollection*) _tmp47_);
1965 _tmp49_ = _tmp48_;
1966 _base_type_size = _tmp49_;
1967 _base_type_index = -1;
1968 while (TRUE) {
1969 gint _tmp50_;
1970 gint _tmp51_;
1971 ValaDataType* base_type = NULL;
1972 ValaList* _tmp52_;
1973 gpointer _tmp53_;
1974 ValaObjectType* object_type = NULL;
1975 ValaDataType* _tmp54_;
1976 ValaObjectType* _tmp55_;
1977 ValaObjectType* _tmp56_;
1978 ValaTypeSymbol* _tmp57_;
1979 ValaTypeSymbol* _tmp58_;
1980 _base_type_index = _base_type_index + 1;
1981 _tmp50_ = _base_type_index;
1982 _tmp51_ = _base_type_size;
1983 if (!(_tmp50_ < _tmp51_)) {
1984 break;
1985 }
1986 _tmp52_ = _base_type_list;
1987 _tmp53_ = vala_list_get (_tmp52_, _base_type_index);
1988 base_type = (ValaDataType*) _tmp53_;
1989 _tmp54_ = base_type;
1990 _tmp55_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp54_, VALA_TYPE_OBJECT_TYPE, ValaObjectType));
1991 object_type = _tmp55_;
1992 _tmp56_ = object_type;
1993 _tmp57_ = vala_data_type_get_type_symbol ((ValaDataType*) _tmp56_);
1994 _tmp58_ = _tmp57_;
1995 if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp58_, VALA_TYPE_INTERFACE)) {
1996 GString* _tmp59_;
1997 ValaObjectType* _tmp60_;
1998 ValaTypeSymbol* _tmp61_;
1999 ValaTypeSymbol* _tmp62_;
2000 gchar* _tmp63_;
2001 gchar* _tmp64_;
2002 vala_gir_writer_write_indent (self);
2003 _tmp59_ = self->priv->buffer;
2004 _tmp60_ = object_type;
2005 _tmp61_ = vala_data_type_get_type_symbol ((ValaDataType*) _tmp60_);
2006 _tmp62_ = _tmp61_;
2007 _tmp63_ = vala_gir_writer_gi_type_name (self, _tmp62_);
2008 _tmp64_ = _tmp63_;
2009 g_string_append_printf (_tmp59_, "<implements name=\"%s\"/>\n", _tmp64_);
2010 _g_free0 (_tmp64_);
2011 }
2012 _vala_code_node_unref0 (object_type);
2013 _vala_code_node_unref0 (base_type);
2014 }
2015 _vala_iterable_unref0 (_base_type_list);
2016 }
2017 vala_gir_writer_write_indent (self);
2018 _tmp65_ = self->priv->buffer;
2019 g_string_append_printf (_tmp65_, "<field name=\"parent_instance\" readable=\"0\" private=\"1\">\n");
2020 _tmp66_ = self->priv->indent;
2021 self->priv->indent = _tmp66_ + 1;
2022 vala_gir_writer_write_indent (self);
2023 _tmp67_ = vala_class_get_base_class (cl);
2024 _tmp68_ = _tmp67_;
2025 if (_tmp68_ == NULL) {
2026 GString* _tmp69_;
2027 ValaTypeSymbol* _tmp70_;
2028 gchar* _tmp71_;
2029 gchar* _tmp72_;
2030 ValaTypeSymbol* _tmp73_;
2031 gchar* _tmp74_;
2032 gchar* _tmp75_;
2033 _tmp69_ = self->priv->buffer;
2034 _tmp70_ = self->priv->gtypeinstance_type;
2035 _tmp71_ = vala_gir_writer_gi_type_name (self, _tmp70_);
2036 _tmp72_ = _tmp71_;
2037 _tmp73_ = self->priv->gtypeinstance_type;
2038 _tmp74_ = vala_get_ccode_name ((ValaCodeNode*) _tmp73_);
2039 _tmp75_ = _tmp74_;
2040 g_string_append_printf (_tmp69_, "<type name=\"%s\" c:type=\"%s\"/>\n", _tmp72_, _tmp75_);
2041 _g_free0 (_tmp75_);
2042 _g_free0 (_tmp72_);
2043 } else {
2044 GString* _tmp76_;
2045 ValaClass* _tmp77_;
2046 ValaClass* _tmp78_;
2047 gchar* _tmp79_;
2048 gchar* _tmp80_;
2049 ValaClass* _tmp81_;
2050 ValaClass* _tmp82_;
2051 gchar* _tmp83_;
2052 gchar* _tmp84_;
2053 _tmp76_ = self->priv->buffer;
2054 _tmp77_ = vala_class_get_base_class (cl);
2055 _tmp78_ = _tmp77_;
2056 _tmp79_ = vala_gir_writer_gi_type_name (self, (ValaTypeSymbol*) _tmp78_);
2057 _tmp80_ = _tmp79_;
2058 _tmp81_ = vala_class_get_base_class (cl);
2059 _tmp82_ = _tmp81_;
2060 _tmp83_ = vala_get_ccode_name ((ValaCodeNode*) _tmp82_);
2061 _tmp84_ = _tmp83_;
2062 g_string_append_printf (_tmp76_, "<type name=\"%s\" c:type=\"%s\"/>\n", _tmp80_, _tmp84_);
2063 _g_free0 (_tmp84_);
2064 _g_free0 (_tmp80_);
2065 }
2066 _tmp85_ = self->priv->indent;
2067 self->priv->indent = _tmp85_ - 1;
2068 vala_gir_writer_write_indent (self);
2069 _tmp86_ = self->priv->buffer;
2070 g_string_append_printf (_tmp86_, "</field>\n");
2071 _tmp87_ = vala_class_get_base_class (cl);
2072 _tmp88_ = _tmp87_;
2073 if (_tmp88_ == NULL) {
2074 GString* _tmp89_;
2075 gint _tmp90_;
2076 GString* _tmp91_;
2077 gint _tmp92_;
2078 GString* _tmp93_;
2079 vala_gir_writer_write_indent (self);
2080 _tmp89_ = self->priv->buffer;
2081 g_string_append_printf (_tmp89_, "<field name=\"ref_count\">\n");
2082 _tmp90_ = self->priv->indent;
2083 self->priv->indent = _tmp90_ + 1;
2084 vala_gir_writer_write_indent (self);
2085 _tmp91_ = self->priv->buffer;
2086 g_string_append_printf (_tmp91_, "<type name=\"gint\" c:type=\"volatile int\"/>\n");
2087 _tmp92_ = self->priv->indent;
2088 self->priv->indent = _tmp92_ - 1;
2089 vala_gir_writer_write_indent (self);
2090 _tmp93_ = self->priv->buffer;
2091 g_string_append_printf (_tmp93_, "</field>\n");
2092 }
2093 _tmp94_ = self->priv->context;
2094 _tmp95_ = vala_code_context_get_abi_stability (_tmp94_);
2095 _tmp96_ = _tmp95_;
2096 if (!_tmp96_) {
2097 GString* _tmp97_;
2098 gint _tmp98_;
2099 GString* _tmp99_;
2100 gchar* _tmp100_;
2101 gchar* _tmp101_;
2102 gchar* _tmp102_;
2103 gchar* _tmp103_;
2104 gint _tmp104_;
2105 GString* _tmp105_;
2106 vala_gir_writer_write_indent (self);
2107 _tmp97_ = self->priv->buffer;
2108 g_string_append_printf (_tmp97_, "<field name=\"priv\" readable=\"0\" private=\"1\">\n");
2109 _tmp98_ = self->priv->indent;
2110 self->priv->indent = _tmp98_ + 1;
2111 vala_gir_writer_write_indent (self);
2112 _tmp99_ = self->priv->buffer;
2113 _tmp100_ = vala_gir_writer_get_gir_name (self, (ValaSymbol*) cl);
2114 _tmp101_ = _tmp100_;
2115 _tmp102_ = vala_get_ccode_name ((ValaCodeNode*) cl);
2116 _tmp103_ = _tmp102_;
2117 g_string_append_printf (_tmp99_, "<type name=\"%sPrivate\" c:type=\"%sPrivate*\"/>\n", _tmp101_, _tmp103_);
2118 _g_free0 (_tmp103_);
2119 _g_free0 (_tmp101_);
2120 _tmp104_ = self->priv->indent;
2121 self->priv->indent = _tmp104_ - 1;
2122 vala_gir_writer_write_indent (self);
2123 _tmp105_ = self->priv->buffer;
2124 g_string_append_printf (_tmp105_, "</field>\n");
2125 }
2126 _tmp107_ = vala_class_get_base_class (cl);
2127 _tmp108_ = _tmp107_;
2128 if (_tmp108_ != NULL) {
2129 ValaClass* _tmp109_;
2130 ValaClass* _tmp110_;
2131 ValaTypeSymbol* _tmp111_;
2132 _tmp109_ = vala_class_get_base_class (cl);
2133 _tmp110_ = _tmp109_;
2134 _tmp111_ = self->priv->gobject_type;
2135 _tmp106_ = vala_typesymbol_is_subtype_of ((ValaTypeSymbol*) _tmp110_, _tmp111_);
2136 } else {
2137 _tmp106_ = FALSE;
2138 }
2139 if (_tmp106_) {
2140 {
2141 ValaList* _p_list = NULL;
2142 ValaList* _tmp112_;
2143 ValaList* _tmp113_;
2144 gint _p_size = 0;
2145 ValaList* _tmp114_;
2146 gint _tmp115_;
2147 gint _tmp116_;
2148 gint _p_index = 0;
2149 _tmp112_ = vala_object_type_symbol_get_type_parameters ((ValaObjectTypeSymbol*) cl);
2150 _tmp113_ = _vala_iterable_ref0 (_tmp112_);
2151 _p_list = _tmp113_;
2152 _tmp114_ = _p_list;
2153 _tmp115_ = vala_collection_get_size ((ValaCollection*) _tmp114_);
2154 _tmp116_ = _tmp115_;
2155 _p_size = _tmp116_;
2156 _p_index = -1;
2157 while (TRUE) {
2158 gint _tmp117_;
2159 gint _tmp118_;
2160 ValaTypeParameter* p = NULL;
2161 ValaList* _tmp119_;
2162 gpointer _tmp120_;
2163 ValaTypeParameter* _tmp121_;
2164 _p_index = _p_index + 1;
2165 _tmp117_ = _p_index;
2166 _tmp118_ = _p_size;
2167 if (!(_tmp117_ < _tmp118_)) {
2168 break;
2169 }
2170 _tmp119_ = _p_list;
2171 _tmp120_ = vala_list_get (_tmp119_, _p_index);
2172 p = (ValaTypeParameter*) _tmp120_;
2173 _tmp121_ = p;
2174 vala_gir_writer_write_type_parameter (self, _tmp121_, "property");
2175 _vala_code_node_unref0 (p);
2176 }
2177 _vala_iterable_unref0 (_p_list);
2178 }
2179 }
2180 _tmp122_ = self->priv->hierarchy;
2181 vala_list_insert ((ValaList*) _tmp122_, 0, (ValaSymbol*) cl);
2182 vala_code_node_accept_children ((ValaCodeNode*) cl, (ValaCodeVisitor*) self);
2183 _tmp123_ = self->priv->hierarchy;
2184 _tmp124_ = vala_list_remove_at ((ValaList*) _tmp123_, 0);
2185 _tmp125_ = (ValaSymbol*) _tmp124_;
2186 _vala_code_node_unref0 (_tmp125_);
2187 _tmp126_ = self->priv->context;
2188 _tmp127_ = vala_code_context_get_abi_stability (_tmp126_);
2189 _tmp128_ = _tmp127_;
2190 if (_tmp128_) {
2191 GString* _tmp129_;
2192 gint _tmp130_;
2193 GString* _tmp131_;
2194 gchar* _tmp132_;
2195 gchar* _tmp133_;
2196 gchar* _tmp134_;
2197 gchar* _tmp135_;
2198 gint _tmp136_;
2199 GString* _tmp137_;
2200 vala_gir_writer_write_indent (self);
2201 _tmp129_ = self->priv->buffer;
2202 g_string_append_printf (_tmp129_, "<field name=\"priv\" readable=\"0\" private=\"1\">\n");
2203 _tmp130_ = self->priv->indent;
2204 self->priv->indent = _tmp130_ + 1;
2205 vala_gir_writer_write_indent (self);
2206 _tmp131_ = self->priv->buffer;
2207 _tmp132_ = vala_gir_writer_get_gir_name (self, (ValaSymbol*) cl);
2208 _tmp133_ = _tmp132_;
2209 _tmp134_ = vala_get_ccode_name ((ValaCodeNode*) cl);
2210 _tmp135_ = _tmp134_;
2211 g_string_append_printf (_tmp131_, "<type name=\"%sPrivate\" c:type=\"%sPrivate*\"/>\n", _tmp133_, _tmp135_);
2212 _g_free0 (_tmp135_);
2213 _g_free0 (_tmp133_);
2214 _tmp136_ = self->priv->indent;
2215 self->priv->indent = _tmp136_ - 1;
2216 vala_gir_writer_write_indent (self);
2217 _tmp137_ = self->priv->buffer;
2218 g_string_append_printf (_tmp137_, "</field>\n");
2219 }
2220 _tmp138_ = self->priv->indent;
2221 self->priv->indent = _tmp138_ - 1;
2222 vala_gir_writer_write_indent (self);
2223 _tmp139_ = self->priv->buffer;
2224 g_string_append_printf (_tmp139_, "</class>\n");
2225 vala_gir_writer_write_indent (self);
2226 _tmp140_ = self->priv->buffer;
2227 _tmp141_ = gtype_struct_name;
2228 g_string_append_printf (_tmp140_, "<record name=\"%s\"", _tmp141_);
2229 vala_gir_writer_write_ctype_attributes (self, (ValaTypeSymbol*) cl, "Class", FALSE);
2230 _tmp142_ = self->priv->buffer;
2231 _tmp143_ = vala_gir_writer_get_gir_name (self, (ValaSymbol*) cl);
2232 _tmp144_ = _tmp143_;
2233 g_string_append_printf (_tmp142_, " glib:is-gtype-struct-for=\"%s\"", _tmp144_);
2234 _g_free0 (_tmp144_);
2235 _tmp145_ = self->priv->buffer;
2236 g_string_append_printf (_tmp145_, ">\n");
2237 _tmp146_ = self->priv->indent;
2238 self->priv->indent = _tmp146_ + 1;
2239 vala_gir_writer_write_indent (self);
2240 _tmp147_ = self->priv->buffer;
2241 g_string_append_printf (_tmp147_, "<field name=\"parent_class\" readable=\"0\" private=\"1\">\n");
2242 _tmp148_ = self->priv->indent;
2243 self->priv->indent = _tmp148_ + 1;
2244 vala_gir_writer_write_indent (self);
2245 _tmp149_ = vala_class_get_base_class (cl);
2246 _tmp150_ = _tmp149_;
2247 if (_tmp150_ == NULL) {
2248 GString* _tmp151_;
2249 ValaTypeSymbol* _tmp152_;
2250 gchar* _tmp153_;
2251 gchar* _tmp154_;
2252 _tmp151_ = self->priv->buffer;
2253 _tmp152_ = self->priv->gtype_type;
2254 _tmp153_ = vala_get_ccode_name ((ValaCodeNode*) _tmp152_);
2255 _tmp154_ = _tmp153_;
2256 g_string_append_printf (_tmp151_, "<type name=\"%sClass\" c:type=\"%sClass\"/>\n", "GObject.Type", _tmp154_);
2257 _g_free0 (_tmp154_);
2258 } else {
2259 GString* _tmp155_;
2260 ValaClass* _tmp156_;
2261 ValaClass* _tmp157_;
2262 gchar* _tmp158_;
2263 gchar* _tmp159_;
2264 ValaClass* _tmp160_;
2265 ValaClass* _tmp161_;
2266 gchar* _tmp162_;
2267 gchar* _tmp163_;
2268 _tmp155_ = self->priv->buffer;
2269 _tmp156_ = vala_class_get_base_class (cl);
2270 _tmp157_ = _tmp156_;
2271 _tmp158_ = vala_gir_writer_gi_type_name (self, (ValaTypeSymbol*) _tmp157_);
2272 _tmp159_ = _tmp158_;
2273 _tmp160_ = vala_class_get_base_class (cl);
2274 _tmp161_ = _tmp160_;
2275 _tmp162_ = vala_get_ccode_name ((ValaCodeNode*) _tmp161_);
2276 _tmp163_ = _tmp162_;
2277 g_string_append_printf (_tmp155_, "<type name=\"%sClass\" c:type=\"%sClass\"/>\n", _tmp159_, _tmp163_);
2278 _g_free0 (_tmp163_);
2279 _g_free0 (_tmp159_);
2280 }
2281 _tmp164_ = self->priv->indent;
2282 self->priv->indent = _tmp164_ - 1;
2283 vala_gir_writer_write_indent (self);
2284 _tmp165_ = self->priv->buffer;
2285 g_string_append_printf (_tmp165_, "</field>\n");
2286 {
2287 ValaList* _m_list = NULL;
2288 ValaList* _tmp166_;
2289 ValaList* _tmp167_;
2290 gint _m_size = 0;
2291 ValaList* _tmp168_;
2292 gint _tmp169_;
2293 gint _tmp170_;
2294 gint _m_index = 0;
2295 _tmp166_ = vala_object_type_symbol_get_methods ((ValaObjectTypeSymbol*) cl);
2296 _tmp167_ = _vala_iterable_ref0 (_tmp166_);
2297 _m_list = _tmp167_;
2298 _tmp168_ = _m_list;
2299 _tmp169_ = vala_collection_get_size ((ValaCollection*) _tmp168_);
2300 _tmp170_ = _tmp169_;
2301 _m_size = _tmp170_;
2302 _m_index = -1;
2303 while (TRUE) {
2304 gint _tmp171_;
2305 gint _tmp172_;
2306 ValaMethod* m = NULL;
2307 ValaList* _tmp173_;
2308 gpointer _tmp174_;
2309 gboolean _tmp175_ = FALSE;
2310 ValaMethod* _tmp176_;
2311 gboolean _tmp177_;
2312 gboolean _tmp178_;
2313 _m_index = _m_index + 1;
2314 _tmp171_ = _m_index;
2315 _tmp172_ = _m_size;
2316 if (!(_tmp171_ < _tmp172_)) {
2317 break;
2318 }
2319 _tmp173_ = _m_list;
2320 _tmp174_ = vala_list_get (_tmp173_, _m_index);
2321 m = (ValaMethod*) _tmp174_;
2322 _tmp176_ = m;
2323 _tmp177_ = vala_method_get_is_abstract (_tmp176_);
2324 _tmp178_ = _tmp177_;
2325 if (_tmp178_) {
2326 _tmp175_ = TRUE;
2327 } else {
2328 ValaMethod* _tmp179_;
2329 gboolean _tmp180_;
2330 gboolean _tmp181_;
2331 _tmp179_ = m;
2332 _tmp180_ = vala_method_get_is_virtual (_tmp179_);
2333 _tmp181_ = _tmp180_;
2334 _tmp175_ = _tmp181_;
2335 }
2336 if (_tmp175_) {
2337 ValaMethod* _tmp182_;
2338 gboolean _tmp183_;
2339 gboolean _tmp184_;
2340 _tmp182_ = m;
2341 _tmp183_ = vala_method_get_coroutine (_tmp182_);
2342 _tmp184_ = _tmp183_;
2343 if (_tmp184_) {
2344 gchar* finish_name = NULL;
2345 ValaMethod* _tmp185_;
2346 const gchar* _tmp186_;
2347 const gchar* _tmp187_;
2348 gchar* _tmp188_;
2349 const gchar* _tmp189_;
2350 const gchar* _tmp197_;
2351 gchar* _tmp198_;
2352 GString* _tmp199_;
2353 ValaMethod* _tmp200_;
2354 const gchar* _tmp201_;
2355 const gchar* _tmp202_;
2356 ValaMethod* _tmp203_;
2357 GString* _tmp204_;
2358 gint _tmp205_;
2359 ValaMethod* _tmp206_;
2360 ValaMethod* _tmp207_;
2361 const gchar* _tmp208_;
2362 const gchar* _tmp209_;
2363 ValaMethod* _tmp210_;
2364 gchar* _tmp211_;
2365 gchar* _tmp212_;
2366 ValaMethod* _tmp213_;
2367 ValaList* _tmp214_;
2368 ValaList* _tmp215_;
2369 ValaVoidType* _tmp216_;
2370 ValaVoidType* _tmp217_;
2371 gint _tmp218_;
2372 GString* _tmp219_;
2373 GString* _tmp220_;
2374 const gchar* _tmp221_;
2375 ValaMethod* _tmp222_;
2376 GString* _tmp223_;
2377 gint _tmp224_;
2378 ValaMethod* _tmp225_;
2379 const gchar* _tmp226_;
2380 ValaMethod* _tmp227_;
2381 gchar* _tmp228_;
2382 gchar* _tmp229_;
2383 ValaMethod* _tmp230_;
2384 ValaList* _tmp231_;
2385 ValaList* _tmp232_;
2386 ValaMethod* _tmp233_;
2387 ValaDataType* _tmp234_;
2388 ValaDataType* _tmp235_;
2389 ValaMethod* _tmp236_;
2390 gboolean _tmp237_;
2391 gboolean _tmp238_;
2392 gint _tmp239_;
2393 GString* _tmp240_;
2394 _tmp185_ = m;
2395 _tmp186_ = vala_symbol_get_name ((ValaSymbol*) _tmp185_);
2396 _tmp187_ = _tmp186_;
2397 _tmp188_ = g_strdup (_tmp187_);
2398 finish_name = _tmp188_;
2399 _tmp189_ = finish_name;
2400 if (g_str_has_suffix (_tmp189_, "_async")) {
2401 const gchar* _tmp190_;
2402 const gchar* _tmp191_;
2403 gint _tmp192_;
2404 gint _tmp193_;
2405 gint _tmp194_;
2406 gint _tmp195_;
2407 gchar* _tmp196_;
2408 _tmp190_ = finish_name;
2409 _tmp191_ = finish_name;
2410 _tmp192_ = strlen (_tmp191_);
2411 _tmp193_ = _tmp192_;
2412 _tmp194_ = strlen ("_async");
2413 _tmp195_ = _tmp194_;
2414 _tmp196_ = string_substring (_tmp190_, (glong) 0, (glong) (_tmp193_ - _tmp195_));
2415 _g_free0 (finish_name);
2416 finish_name = _tmp196_;
2417 }
2418 _tmp197_ = finish_name;
2419 _tmp198_ = g_strconcat (_tmp197_, "_finish", NULL);
2420 _g_free0 (finish_name);
2421 finish_name = _tmp198_;
2422 vala_gir_writer_write_indent (self);
2423 _tmp199_ = self->priv->buffer;
2424 _tmp200_ = m;
2425 _tmp201_ = vala_symbol_get_name ((ValaSymbol*) _tmp200_);
2426 _tmp202_ = _tmp201_;
2427 g_string_append_printf (_tmp199_, "<field name=\"%s\"", _tmp202_);
2428 _tmp203_ = m;
2429 vala_gir_writer_write_symbol_attributes (self, (ValaSymbol*) _tmp203_);
2430 _tmp204_ = self->priv->buffer;
2431 g_string_append_printf (_tmp204_, ">\n");
2432 _tmp205_ = self->priv->indent;
2433 self->priv->indent = _tmp205_ + 1;
2434 _tmp206_ = m;
2435 _tmp207_ = m;
2436 _tmp208_ = vala_symbol_get_name ((ValaSymbol*) _tmp207_);
2437 _tmp209_ = _tmp208_;
2438 _tmp210_ = m;
2439 _tmp211_ = vala_get_ccode_name ((ValaCodeNode*) _tmp210_);
2440 _tmp212_ = _tmp211_;
2441 _tmp213_ = m;
2442 _tmp214_ = vala_method_get_async_begin_parameters (_tmp213_);
2443 _tmp215_ = _tmp214_;
2444 _tmp216_ = vala_void_type_new (NULL);
2445 _tmp217_ = _tmp216_;
2446 vala_gir_writer_do_write_signature (self, _tmp206_, "callback", TRUE, _tmp209_, _tmp212_, _tmp215_, (ValaDataType*) _tmp217_, FALSE, FALSE, FALSE);
2447 _vala_code_node_unref0 (_tmp217_);
2448 _vala_iterable_unref0 (_tmp215_);
2449 _g_free0 (_tmp212_);
2450 _tmp218_ = self->priv->indent;
2451 self->priv->indent = _tmp218_ - 1;
2452 vala_gir_writer_write_indent (self);
2453 _tmp219_ = self->priv->buffer;
2454 g_string_append_printf (_tmp219_, "</field>\n");
2455 vala_gir_writer_write_indent (self);
2456 _tmp220_ = self->priv->buffer;
2457 _tmp221_ = finish_name;
2458 g_string_append_printf (_tmp220_, "<field name=\"%s\"", _tmp221_);
2459 _tmp222_ = m;
2460 vala_gir_writer_write_symbol_attributes (self, (ValaSymbol*) _tmp222_);
2461 _tmp223_ = self->priv->buffer;
2462 g_string_append_printf (_tmp223_, ">\n");
2463 _tmp224_ = self->priv->indent;
2464 self->priv->indent = _tmp224_ + 1;
2465 _tmp225_ = m;
2466 _tmp226_ = finish_name;
2467 _tmp227_ = m;
2468 _tmp228_ = vala_get_ccode_finish_name (_tmp227_);
2469 _tmp229_ = _tmp228_;
2470 _tmp230_ = m;
2471 _tmp231_ = vala_method_get_async_end_parameters (_tmp230_);
2472 _tmp232_ = _tmp231_;
2473 _tmp233_ = m;
2474 _tmp234_ = vala_callable_get_return_type ((ValaCallable*) _tmp233_);
2475 _tmp235_ = _tmp234_;
2476 _tmp236_ = m;
2477 _tmp237_ = vala_code_node_get_tree_can_fail ((ValaCodeNode*) _tmp236_);
2478 _tmp238_ = _tmp237_;
2479 vala_gir_writer_do_write_signature (self, _tmp225_, "callback", TRUE, _tmp226_, _tmp229_, _tmp232_, _tmp235_, _tmp238_, FALSE, FALSE);
2480 _vala_iterable_unref0 (_tmp232_);
2481 _g_free0 (_tmp229_);
2482 _tmp239_ = self->priv->indent;
2483 self->priv->indent = _tmp239_ - 1;
2484 vala_gir_writer_write_indent (self);
2485 _tmp240_ = self->priv->buffer;
2486 g_string_append_printf (_tmp240_, "</field>\n");
2487 _g_free0 (finish_name);
2488 } else {
2489 GString* _tmp241_;
2490 ValaMethod* _tmp242_;
2491 const gchar* _tmp243_;
2492 const gchar* _tmp244_;
2493 ValaMethod* _tmp245_;
2494 GString* _tmp246_;
2495 gint _tmp247_;
2496 ValaMethod* _tmp248_;
2497 ValaMethod* _tmp249_;
2498 const gchar* _tmp250_;
2499 const gchar* _tmp251_;
2500 ValaMethod* _tmp252_;
2501 gchar* _tmp253_;
2502 gchar* _tmp254_;
2503 ValaMethod* _tmp255_;
2504 ValaList* _tmp256_;
2505 ValaMethod* _tmp257_;
2506 ValaDataType* _tmp258_;
2507 ValaDataType* _tmp259_;
2508 ValaMethod* _tmp260_;
2509 gboolean _tmp261_;
2510 gboolean _tmp262_;
2511 gint _tmp263_;
2512 GString* _tmp264_;
2513 vala_gir_writer_write_indent (self);
2514 _tmp241_ = self->priv->buffer;
2515 _tmp242_ = m;
2516 _tmp243_ = vala_symbol_get_name ((ValaSymbol*) _tmp242_);
2517 _tmp244_ = _tmp243_;
2518 g_string_append_printf (_tmp241_, "<field name=\"%s\"", _tmp244_);
2519 _tmp245_ = m;
2520 vala_gir_writer_write_symbol_attributes (self, (ValaSymbol*) _tmp245_);
2521 _tmp246_ = self->priv->buffer;
2522 g_string_append_printf (_tmp246_, ">\n");
2523 _tmp247_ = self->priv->indent;
2524 self->priv->indent = _tmp247_ + 1;
2525 _tmp248_ = m;
2526 _tmp249_ = m;
2527 _tmp250_ = vala_symbol_get_name ((ValaSymbol*) _tmp249_);
2528 _tmp251_ = _tmp250_;
2529 _tmp252_ = m;
2530 _tmp253_ = vala_get_ccode_name ((ValaCodeNode*) _tmp252_);
2531 _tmp254_ = _tmp253_;
2532 _tmp255_ = m;
2533 _tmp256_ = vala_callable_get_parameters ((ValaCallable*) _tmp255_);
2534 _tmp257_ = m;
2535 _tmp258_ = vala_callable_get_return_type ((ValaCallable*) _tmp257_);
2536 _tmp259_ = _tmp258_;
2537 _tmp260_ = m;
2538 _tmp261_ = vala_code_node_get_tree_can_fail ((ValaCodeNode*) _tmp260_);
2539 _tmp262_ = _tmp261_;
2540 vala_gir_writer_do_write_signature (self, _tmp248_, "callback", TRUE, _tmp251_, _tmp254_, _tmp256_, _tmp259_, _tmp262_, FALSE, FALSE);
2541 _g_free0 (_tmp254_);
2542 _tmp263_ = self->priv->indent;
2543 self->priv->indent = _tmp263_ - 1;
2544 vala_gir_writer_write_indent (self);
2545 _tmp264_ = self->priv->buffer;
2546 g_string_append_printf (_tmp264_, "</field>\n");
2547 }
2548 }
2549 _vala_code_node_unref0 (m);
2550 }
2551 _vala_iterable_unref0 (_m_list);
2552 }
2553 {
2554 ValaList* _sig_list = NULL;
2555 ValaList* _tmp265_;
2556 ValaList* _tmp266_;
2557 gint _sig_size = 0;
2558 ValaList* _tmp267_;
2559 gint _tmp268_;
2560 gint _tmp269_;
2561 gint _sig_index = 0;
2562 _tmp265_ = vala_object_type_symbol_get_signals ((ValaObjectTypeSymbol*) cl);
2563 _tmp266_ = _vala_iterable_ref0 (_tmp265_);
2564 _sig_list = _tmp266_;
2565 _tmp267_ = _sig_list;
2566 _tmp268_ = vala_collection_get_size ((ValaCollection*) _tmp267_);
2567 _tmp269_ = _tmp268_;
2568 _sig_size = _tmp269_;
2569 _sig_index = -1;
2570 while (TRUE) {
2571 gint _tmp270_;
2572 gint _tmp271_;
2573 ValaSignal* sig = NULL;
2574 ValaList* _tmp272_;
2575 gpointer _tmp273_;
2576 ValaSignal* _tmp274_;
2577 ValaMethod* _tmp275_;
2578 ValaMethod* _tmp276_;
2579 _sig_index = _sig_index + 1;
2580 _tmp270_ = _sig_index;
2581 _tmp271_ = _sig_size;
2582 if (!(_tmp270_ < _tmp271_)) {
2583 break;
2584 }
2585 _tmp272_ = _sig_list;
2586 _tmp273_ = vala_list_get (_tmp272_, _sig_index);
2587 sig = (ValaSignal*) _tmp273_;
2588 _tmp274_ = sig;
2589 _tmp275_ = vala_signal_get_default_handler (_tmp274_);
2590 _tmp276_ = _tmp275_;
2591 if (_tmp276_ != NULL) {
2592 GString* _tmp277_;
2593 ValaSignal* _tmp278_;
2594 gchar* _tmp279_;
2595 gchar* _tmp280_;
2596 ValaSignal* _tmp281_;
2597 GString* _tmp282_;
2598 gint _tmp283_;
2599 ValaSignal* _tmp284_;
2600 ValaMethod* _tmp285_;
2601 ValaMethod* _tmp286_;
2602 gint _tmp287_;
2603 GString* _tmp288_;
2604 vala_gir_writer_write_indent (self);
2605 _tmp277_ = self->priv->buffer;
2606 _tmp278_ = sig;
2607 _tmp279_ = vala_get_ccode_lower_case_name ((ValaCodeNode*) _tmp278_, NULL);
2608 _tmp280_ = _tmp279_;
2609 g_string_append_printf (_tmp277_, "<field name=\"%s\"", _tmp280_);
2610 _g_free0 (_tmp280_);
2611 _tmp281_ = sig;
2612 vala_gir_writer_write_symbol_attributes (self, (ValaSymbol*) _tmp281_);
2613 _tmp282_ = self->priv->buffer;
2614 g_string_append_printf (_tmp282_, ">\n");
2615 _tmp283_ = self->priv->indent;
2616 self->priv->indent = _tmp283_ + 1;
2617 _tmp284_ = sig;
2618 _tmp285_ = vala_signal_get_default_handler (_tmp284_);
2619 _tmp286_ = _tmp285_;
2620 vala_gir_writer_write_signature (self, _tmp286_, "callback", FALSE, TRUE, FALSE);
2621 _tmp287_ = self->priv->indent;
2622 self->priv->indent = _tmp287_ - 1;
2623 vala_gir_writer_write_indent (self);
2624 _tmp288_ = self->priv->buffer;
2625 g_string_append_printf (_tmp288_, "</field>\n");
2626 }
2627 _vala_code_node_unref0 (sig);
2628 }
2629 _vala_iterable_unref0 (_sig_list);
2630 }
2631 _tmp289_ = self->priv->indent;
2632 self->priv->indent = _tmp289_ - 1;
2633 vala_gir_writer_write_indent (self);
2634 _tmp290_ = self->priv->buffer;
2635 g_string_append_printf (_tmp290_, "</record>\n");
2636 vala_gir_writer_write_indent (self);
2637 _tmp291_ = self->priv->buffer;
2638 _tmp292_ = vala_gir_writer_get_gir_name (self, (ValaSymbol*) cl);
2639 _tmp293_ = _tmp292_;
2640 _tmp294_ = vala_get_ccode_name ((ValaCodeNode*) cl);
2641 _tmp295_ = _tmp294_;
2642 g_string_append_printf (_tmp291_, "<record name=\"%sPrivate\" c:type=\"%sPrivate\" disguised=\"1\"/>\n", _tmp293_, _tmp295_);
2643 _g_free0 (_tmp295_);
2644 _g_free0 (_tmp293_);
2645 _g_free0 (gtype_struct_name);
2646 } else {
2647 GString* _tmp296_;
2648 gchar* _tmp297_;
2649 gchar* _tmp298_;
2650 GString* _tmp299_;
2651 gint _tmp300_;
2652 gchar* _tmp301_;
2653 gchar* _tmp302_;
2654 ValaArrayList* _tmp303_;
2655 ValaArrayList* _tmp304_;
2656 gpointer _tmp305_;
2657 ValaSymbol* _tmp306_;
2658 gint _tmp307_;
2659 GString* _tmp308_;
2660 vala_gir_writer_write_indent (self);
2661 _tmp296_ = self->priv->buffer;
2662 _tmp297_ = vala_gir_writer_get_gir_name (self, (ValaSymbol*) cl);
2663 _tmp298_ = _tmp297_;
2664 g_string_append_printf (_tmp296_, "<record name=\"%s\"", _tmp298_);
2665 _g_free0 (_tmp298_);
2666 vala_gir_writer_write_symbol_attributes (self, (ValaSymbol*) cl);
2667 _tmp299_ = self->priv->buffer;
2668 g_string_append_printf (_tmp299_, ">\n");
2669 _tmp300_ = self->priv->indent;
2670 self->priv->indent = _tmp300_ + 1;
2671 _tmp301_ = vala_gir_writer_get_class_comment (self, cl);
2672 _tmp302_ = _tmp301_;
2673 vala_gir_writer_write_doc (self, _tmp302_);
2674 _g_free0 (_tmp302_);
2675 _tmp303_ = self->priv->hierarchy;
2676 vala_list_insert ((ValaList*) _tmp303_, 0, (ValaSymbol*) cl);
2677 vala_code_node_accept_children ((ValaCodeNode*) cl, (ValaCodeVisitor*) self);
2678 _tmp304_ = self->priv->hierarchy;
2679 _tmp305_ = vala_list_remove_at ((ValaList*) _tmp304_, 0);
2680 _tmp306_ = (ValaSymbol*) _tmp305_;
2681 _vala_code_node_unref0 (_tmp306_);
2682 _tmp307_ = self->priv->indent;
2683 self->priv->indent = _tmp307_ - 1;
2684 vala_gir_writer_write_indent (self);
2685 _tmp308_ = self->priv->buffer;
2686 g_string_append_printf (_tmp308_, "</record>\n");
2687 }
2688 vala_gir_writer_visit_deferred (self);
2689 }
2690
2691 static void
vala_gir_writer_real_visit_struct(ValaCodeVisitor * base,ValaStruct * st)2692 vala_gir_writer_real_visit_struct (ValaCodeVisitor* base,
2693 ValaStruct* st)
2694 {
2695 ValaGIRWriter * self;
2696 gboolean _tmp0_;
2697 gboolean _tmp1_;
2698 ValaArrayList* _tmp2_;
2699 gpointer _tmp3_;
2700 ValaSymbol* _tmp4_;
2701 gboolean _tmp5_;
2702 GString* _tmp7_;
2703 gchar* _tmp8_;
2704 gchar* _tmp9_;
2705 GString* _tmp10_;
2706 gint _tmp11_;
2707 gchar* _tmp12_;
2708 gchar* _tmp13_;
2709 ValaArrayList* _tmp14_;
2710 ValaArrayList* _tmp15_;
2711 gpointer _tmp16_;
2712 ValaSymbol* _tmp17_;
2713 gint _tmp18_;
2714 GString* _tmp19_;
2715 self = (ValaGIRWriter*) base;
2716 g_return_if_fail (st != NULL);
2717 _tmp0_ = vala_symbol_get_external_package ((ValaSymbol*) st);
2718 _tmp1_ = _tmp0_;
2719 if (_tmp1_) {
2720 return;
2721 }
2722 if (!vala_gir_writer_check_accessibility (self, (ValaSymbol*) st)) {
2723 return;
2724 }
2725 if (!vala_gir_writer_has_namespace (self, (ValaSymbol*) st)) {
2726 return;
2727 }
2728 _tmp2_ = self->priv->hierarchy;
2729 _tmp3_ = vala_list_get ((ValaList*) _tmp2_, 0);
2730 _tmp4_ = (ValaSymbol*) _tmp3_;
2731 _tmp5_ = !G_TYPE_CHECK_INSTANCE_TYPE (_tmp4_, VALA_TYPE_NAMESPACE);
2732 _vala_code_node_unref0 (_tmp4_);
2733 if (_tmp5_) {
2734 ValaArrayList* _tmp6_;
2735 _tmp6_ = self->priv->deferred;
2736 vala_collection_add ((ValaCollection*) _tmp6_, (ValaCodeNode*) st);
2737 return;
2738 }
2739 vala_gir_writer_write_indent (self);
2740 _tmp7_ = self->priv->buffer;
2741 _tmp8_ = vala_gir_writer_get_gir_name (self, (ValaSymbol*) st);
2742 _tmp9_ = _tmp8_;
2743 g_string_append_printf (_tmp7_, "<record name=\"%s\"", _tmp9_);
2744 _g_free0 (_tmp9_);
2745 if (vala_get_ccode_has_type_id ((ValaTypeSymbol*) st)) {
2746 vala_gir_writer_write_gtype_attributes (self, (ValaTypeSymbol*) st, TRUE);
2747 } else {
2748 vala_gir_writer_write_ctype_attributes (self, (ValaTypeSymbol*) st, "", TRUE);
2749 }
2750 vala_gir_writer_write_symbol_attributes (self, (ValaSymbol*) st);
2751 _tmp10_ = self->priv->buffer;
2752 g_string_append_printf (_tmp10_, ">\n");
2753 _tmp11_ = self->priv->indent;
2754 self->priv->indent = _tmp11_ + 1;
2755 _tmp12_ = vala_gir_writer_get_struct_comment (self, st);
2756 _tmp13_ = _tmp12_;
2757 vala_gir_writer_write_doc (self, _tmp13_);
2758 _g_free0 (_tmp13_);
2759 _tmp14_ = self->priv->hierarchy;
2760 vala_list_insert ((ValaList*) _tmp14_, 0, (ValaSymbol*) st);
2761 vala_code_node_accept_children ((ValaCodeNode*) st, (ValaCodeVisitor*) self);
2762 _tmp15_ = self->priv->hierarchy;
2763 _tmp16_ = vala_list_remove_at ((ValaList*) _tmp15_, 0);
2764 _tmp17_ = (ValaSymbol*) _tmp16_;
2765 _vala_code_node_unref0 (_tmp17_);
2766 _tmp18_ = self->priv->indent;
2767 self->priv->indent = _tmp18_ - 1;
2768 vala_gir_writer_write_indent (self);
2769 _tmp19_ = self->priv->buffer;
2770 g_string_append_printf (_tmp19_, "</record>\n");
2771 vala_gir_writer_visit_deferred (self);
2772 }
2773
2774 static void
vala_gir_writer_real_visit_interface(ValaCodeVisitor * base,ValaInterface * iface)2775 vala_gir_writer_real_visit_interface (ValaCodeVisitor* base,
2776 ValaInterface* iface)
2777 {
2778 ValaGIRWriter * self;
2779 gboolean _tmp0_;
2780 gboolean _tmp1_;
2781 ValaArrayList* _tmp2_;
2782 gpointer _tmp3_;
2783 ValaSymbol* _tmp4_;
2784 gboolean _tmp5_;
2785 gchar* gtype_struct_name = NULL;
2786 gchar* _tmp7_;
2787 gchar* _tmp8_;
2788 gchar* _tmp9_;
2789 gchar* _tmp10_;
2790 GString* _tmp11_;
2791 gchar* _tmp12_;
2792 gchar* _tmp13_;
2793 GString* _tmp14_;
2794 const gchar* _tmp15_;
2795 GString* _tmp16_;
2796 gint _tmp17_;
2797 gchar* _tmp18_;
2798 gchar* _tmp19_;
2799 ValaList* _tmp20_;
2800 gint _tmp21_;
2801 gint _tmp22_;
2802 ValaArrayList* _tmp38_;
2803 ValaArrayList* _tmp39_;
2804 gpointer _tmp40_;
2805 ValaSymbol* _tmp41_;
2806 gint _tmp42_;
2807 GString* _tmp43_;
2808 GString* _tmp44_;
2809 const gchar* _tmp45_;
2810 GString* _tmp46_;
2811 gchar* _tmp47_;
2812 gchar* _tmp48_;
2813 GString* _tmp49_;
2814 gint _tmp50_;
2815 GString* _tmp51_;
2816 gint _tmp52_;
2817 GString* _tmp53_;
2818 ValaTypeSymbol* _tmp54_;
2819 gchar* _tmp55_;
2820 gchar* _tmp56_;
2821 ValaTypeSymbol* _tmp57_;
2822 gchar* _tmp58_;
2823 gchar* _tmp59_;
2824 gint _tmp60_;
2825 GString* _tmp61_;
2826 gint _tmp245_;
2827 GString* _tmp246_;
2828 self = (ValaGIRWriter*) base;
2829 g_return_if_fail (iface != NULL);
2830 _tmp0_ = vala_symbol_get_external_package ((ValaSymbol*) iface);
2831 _tmp1_ = _tmp0_;
2832 if (_tmp1_) {
2833 return;
2834 }
2835 if (!vala_gir_writer_check_accessibility (self, (ValaSymbol*) iface)) {
2836 return;
2837 }
2838 if (!vala_gir_writer_has_namespace (self, (ValaSymbol*) iface)) {
2839 return;
2840 }
2841 _tmp2_ = self->priv->hierarchy;
2842 _tmp3_ = vala_list_get ((ValaList*) _tmp2_, 0);
2843 _tmp4_ = (ValaSymbol*) _tmp3_;
2844 _tmp5_ = !G_TYPE_CHECK_INSTANCE_TYPE (_tmp4_, VALA_TYPE_NAMESPACE);
2845 _vala_code_node_unref0 (_tmp4_);
2846 if (_tmp5_) {
2847 ValaArrayList* _tmp6_;
2848 _tmp6_ = self->priv->deferred;
2849 vala_collection_add ((ValaCollection*) _tmp6_, (ValaCodeNode*) iface);
2850 return;
2851 }
2852 _tmp7_ = vala_gir_writer_get_gir_name (self, (ValaSymbol*) iface);
2853 _tmp8_ = _tmp7_;
2854 _tmp9_ = g_strconcat (_tmp8_, "Iface", NULL);
2855 _tmp10_ = _tmp9_;
2856 _g_free0 (_tmp8_);
2857 gtype_struct_name = _tmp10_;
2858 vala_gir_writer_write_indent (self);
2859 _tmp11_ = self->priv->buffer;
2860 _tmp12_ = vala_gir_writer_get_gir_name (self, (ValaSymbol*) iface);
2861 _tmp13_ = _tmp12_;
2862 g_string_append_printf (_tmp11_, "<interface name=\"%s\"", _tmp13_);
2863 _g_free0 (_tmp13_);
2864 vala_gir_writer_write_gtype_attributes (self, (ValaTypeSymbol*) iface, TRUE);
2865 _tmp14_ = self->priv->buffer;
2866 _tmp15_ = gtype_struct_name;
2867 g_string_append_printf (_tmp14_, " glib:type-struct=\"%s\"", _tmp15_);
2868 vala_gir_writer_write_symbol_attributes (self, (ValaSymbol*) iface);
2869 _tmp16_ = self->priv->buffer;
2870 g_string_append_printf (_tmp16_, ">\n");
2871 _tmp17_ = self->priv->indent;
2872 self->priv->indent = _tmp17_ + 1;
2873 _tmp18_ = vala_gir_writer_get_interface_comment (self, iface);
2874 _tmp19_ = _tmp18_;
2875 vala_gir_writer_write_doc (self, _tmp19_);
2876 _g_free0 (_tmp19_);
2877 _tmp20_ = vala_interface_get_prerequisites (iface);
2878 _tmp21_ = vala_collection_get_size ((ValaCollection*) _tmp20_);
2879 _tmp22_ = _tmp21_;
2880 if (_tmp22_ > 0) {
2881 {
2882 ValaList* _base_type_list = NULL;
2883 ValaList* _tmp23_;
2884 ValaList* _tmp24_;
2885 gint _base_type_size = 0;
2886 ValaList* _tmp25_;
2887 gint _tmp26_;
2888 gint _tmp27_;
2889 gint _base_type_index = 0;
2890 _tmp23_ = vala_interface_get_prerequisites (iface);
2891 _tmp24_ = _vala_iterable_ref0 (_tmp23_);
2892 _base_type_list = _tmp24_;
2893 _tmp25_ = _base_type_list;
2894 _tmp26_ = vala_collection_get_size ((ValaCollection*) _tmp25_);
2895 _tmp27_ = _tmp26_;
2896 _base_type_size = _tmp27_;
2897 _base_type_index = -1;
2898 while (TRUE) {
2899 gint _tmp28_;
2900 gint _tmp29_;
2901 ValaDataType* base_type = NULL;
2902 ValaList* _tmp30_;
2903 gpointer _tmp31_;
2904 GString* _tmp32_;
2905 ValaDataType* _tmp33_;
2906 ValaTypeSymbol* _tmp34_;
2907 ValaTypeSymbol* _tmp35_;
2908 gchar* _tmp36_;
2909 gchar* _tmp37_;
2910 _base_type_index = _base_type_index + 1;
2911 _tmp28_ = _base_type_index;
2912 _tmp29_ = _base_type_size;
2913 if (!(_tmp28_ < _tmp29_)) {
2914 break;
2915 }
2916 _tmp30_ = _base_type_list;
2917 _tmp31_ = vala_list_get (_tmp30_, _base_type_index);
2918 base_type = (ValaDataType*) _tmp31_;
2919 vala_gir_writer_write_indent (self);
2920 _tmp32_ = self->priv->buffer;
2921 _tmp33_ = base_type;
2922 _tmp34_ = vala_data_type_get_type_symbol ((ValaDataType*) G_TYPE_CHECK_INSTANCE_CAST (_tmp33_, VALA_TYPE_OBJECT_TYPE, ValaObjectType));
2923 _tmp35_ = _tmp34_;
2924 _tmp36_ = vala_gir_writer_gi_type_name (self, _tmp35_);
2925 _tmp37_ = _tmp36_;
2926 g_string_append_printf (_tmp32_, "<prerequisite name=\"%s\"/>\n", _tmp37_);
2927 _g_free0 (_tmp37_);
2928 _vala_code_node_unref0 (base_type);
2929 }
2930 _vala_iterable_unref0 (_base_type_list);
2931 }
2932 }
2933 _tmp38_ = self->priv->hierarchy;
2934 vala_list_insert ((ValaList*) _tmp38_, 0, (ValaSymbol*) iface);
2935 vala_code_node_accept_children ((ValaCodeNode*) iface, (ValaCodeVisitor*) self);
2936 _tmp39_ = self->priv->hierarchy;
2937 _tmp40_ = vala_list_remove_at ((ValaList*) _tmp39_, 0);
2938 _tmp41_ = (ValaSymbol*) _tmp40_;
2939 _vala_code_node_unref0 (_tmp41_);
2940 _tmp42_ = self->priv->indent;
2941 self->priv->indent = _tmp42_ - 1;
2942 vala_gir_writer_write_indent (self);
2943 _tmp43_ = self->priv->buffer;
2944 g_string_append_printf (_tmp43_, "</interface>\n");
2945 vala_gir_writer_write_indent (self);
2946 _tmp44_ = self->priv->buffer;
2947 _tmp45_ = gtype_struct_name;
2948 g_string_append_printf (_tmp44_, "<record name=\"%s\"", _tmp45_);
2949 vala_gir_writer_write_ctype_attributes (self, (ValaTypeSymbol*) iface, "Iface", FALSE);
2950 _tmp46_ = self->priv->buffer;
2951 _tmp47_ = vala_gir_writer_get_gir_name (self, (ValaSymbol*) iface);
2952 _tmp48_ = _tmp47_;
2953 g_string_append_printf (_tmp46_, " glib:is-gtype-struct-for=\"%s\"", _tmp48_);
2954 _g_free0 (_tmp48_);
2955 _tmp49_ = self->priv->buffer;
2956 g_string_append_printf (_tmp49_, ">\n");
2957 _tmp50_ = self->priv->indent;
2958 self->priv->indent = _tmp50_ + 1;
2959 vala_gir_writer_write_indent (self);
2960 _tmp51_ = self->priv->buffer;
2961 g_string_append_printf (_tmp51_, "<field name=\"parent_iface\" readable=\"0\" private=\"1\">\n");
2962 _tmp52_ = self->priv->indent;
2963 self->priv->indent = _tmp52_ + 1;
2964 vala_gir_writer_write_indent (self);
2965 _tmp53_ = self->priv->buffer;
2966 _tmp54_ = self->priv->gtypeinterface_type;
2967 _tmp55_ = vala_gir_writer_gi_type_name (self, _tmp54_);
2968 _tmp56_ = _tmp55_;
2969 _tmp57_ = self->priv->gtypeinterface_type;
2970 _tmp58_ = vala_get_ccode_name ((ValaCodeNode*) _tmp57_);
2971 _tmp59_ = _tmp58_;
2972 g_string_append_printf (_tmp53_, "<type name=\"%s\" c:type=\"%s\"/>\n", _tmp56_, _tmp59_);
2973 _g_free0 (_tmp59_);
2974 _g_free0 (_tmp56_);
2975 _tmp60_ = self->priv->indent;
2976 self->priv->indent = _tmp60_ - 1;
2977 vala_gir_writer_write_indent (self);
2978 _tmp61_ = self->priv->buffer;
2979 g_string_append_printf (_tmp61_, "</field>\n");
2980 {
2981 ValaList* _m_list = NULL;
2982 ValaList* _tmp62_;
2983 ValaList* _tmp63_;
2984 gint _m_size = 0;
2985 ValaList* _tmp64_;
2986 gint _tmp65_;
2987 gint _tmp66_;
2988 gint _m_index = 0;
2989 _tmp62_ = vala_object_type_symbol_get_methods ((ValaObjectTypeSymbol*) iface);
2990 _tmp63_ = _vala_iterable_ref0 (_tmp62_);
2991 _m_list = _tmp63_;
2992 _tmp64_ = _m_list;
2993 _tmp65_ = vala_collection_get_size ((ValaCollection*) _tmp64_);
2994 _tmp66_ = _tmp65_;
2995 _m_size = _tmp66_;
2996 _m_index = -1;
2997 while (TRUE) {
2998 gint _tmp67_;
2999 gint _tmp68_;
3000 ValaMethod* m = NULL;
3001 ValaList* _tmp69_;
3002 gpointer _tmp70_;
3003 gboolean _tmp71_ = FALSE;
3004 ValaMethod* _tmp72_;
3005 gboolean _tmp73_;
3006 gboolean _tmp74_;
3007 _m_index = _m_index + 1;
3008 _tmp67_ = _m_index;
3009 _tmp68_ = _m_size;
3010 if (!(_tmp67_ < _tmp68_)) {
3011 break;
3012 }
3013 _tmp69_ = _m_list;
3014 _tmp70_ = vala_list_get (_tmp69_, _m_index);
3015 m = (ValaMethod*) _tmp70_;
3016 _tmp72_ = m;
3017 _tmp73_ = vala_method_get_is_abstract (_tmp72_);
3018 _tmp74_ = _tmp73_;
3019 if (_tmp74_) {
3020 _tmp71_ = TRUE;
3021 } else {
3022 ValaMethod* _tmp75_;
3023 gboolean _tmp76_;
3024 gboolean _tmp77_;
3025 _tmp75_ = m;
3026 _tmp76_ = vala_method_get_is_virtual (_tmp75_);
3027 _tmp77_ = _tmp76_;
3028 _tmp71_ = _tmp77_;
3029 }
3030 if (_tmp71_) {
3031 ValaMethod* _tmp78_;
3032 gboolean _tmp79_;
3033 gboolean _tmp80_;
3034 _tmp78_ = m;
3035 _tmp79_ = vala_method_get_coroutine (_tmp78_);
3036 _tmp80_ = _tmp79_;
3037 if (_tmp80_) {
3038 gchar* finish_name = NULL;
3039 ValaMethod* _tmp81_;
3040 const gchar* _tmp82_;
3041 const gchar* _tmp83_;
3042 gchar* _tmp84_;
3043 const gchar* _tmp85_;
3044 const gchar* _tmp93_;
3045 gchar* _tmp94_;
3046 GString* _tmp95_;
3047 ValaMethod* _tmp96_;
3048 const gchar* _tmp97_;
3049 const gchar* _tmp98_;
3050 ValaMethod* _tmp99_;
3051 GString* _tmp100_;
3052 gint _tmp101_;
3053 ValaMethod* _tmp102_;
3054 ValaMethod* _tmp103_;
3055 const gchar* _tmp104_;
3056 const gchar* _tmp105_;
3057 ValaMethod* _tmp106_;
3058 gchar* _tmp107_;
3059 gchar* _tmp108_;
3060 ValaMethod* _tmp109_;
3061 ValaList* _tmp110_;
3062 ValaList* _tmp111_;
3063 ValaVoidType* _tmp112_;
3064 ValaVoidType* _tmp113_;
3065 gint _tmp114_;
3066 GString* _tmp115_;
3067 GString* _tmp116_;
3068 const gchar* _tmp117_;
3069 ValaMethod* _tmp118_;
3070 GString* _tmp119_;
3071 gint _tmp120_;
3072 ValaMethod* _tmp121_;
3073 const gchar* _tmp122_;
3074 ValaMethod* _tmp123_;
3075 gchar* _tmp124_;
3076 gchar* _tmp125_;
3077 ValaMethod* _tmp126_;
3078 ValaList* _tmp127_;
3079 ValaList* _tmp128_;
3080 ValaMethod* _tmp129_;
3081 ValaDataType* _tmp130_;
3082 ValaDataType* _tmp131_;
3083 ValaMethod* _tmp132_;
3084 gboolean _tmp133_;
3085 gboolean _tmp134_;
3086 gint _tmp135_;
3087 GString* _tmp136_;
3088 _tmp81_ = m;
3089 _tmp82_ = vala_symbol_get_name ((ValaSymbol*) _tmp81_);
3090 _tmp83_ = _tmp82_;
3091 _tmp84_ = g_strdup (_tmp83_);
3092 finish_name = _tmp84_;
3093 _tmp85_ = finish_name;
3094 if (g_str_has_suffix (_tmp85_, "_async")) {
3095 const gchar* _tmp86_;
3096 const gchar* _tmp87_;
3097 gint _tmp88_;
3098 gint _tmp89_;
3099 gint _tmp90_;
3100 gint _tmp91_;
3101 gchar* _tmp92_;
3102 _tmp86_ = finish_name;
3103 _tmp87_ = finish_name;
3104 _tmp88_ = strlen (_tmp87_);
3105 _tmp89_ = _tmp88_;
3106 _tmp90_ = strlen ("_async");
3107 _tmp91_ = _tmp90_;
3108 _tmp92_ = string_substring (_tmp86_, (glong) 0, (glong) (_tmp89_ - _tmp91_));
3109 _g_free0 (finish_name);
3110 finish_name = _tmp92_;
3111 }
3112 _tmp93_ = finish_name;
3113 _tmp94_ = g_strconcat (_tmp93_, "_finish", NULL);
3114 _g_free0 (finish_name);
3115 finish_name = _tmp94_;
3116 vala_gir_writer_write_indent (self);
3117 _tmp95_ = self->priv->buffer;
3118 _tmp96_ = m;
3119 _tmp97_ = vala_symbol_get_name ((ValaSymbol*) _tmp96_);
3120 _tmp98_ = _tmp97_;
3121 g_string_append_printf (_tmp95_, "<field name=\"%s\"", _tmp98_);
3122 _tmp99_ = m;
3123 vala_gir_writer_write_symbol_attributes (self, (ValaSymbol*) _tmp99_);
3124 _tmp100_ = self->priv->buffer;
3125 g_string_append_printf (_tmp100_, ">\n");
3126 _tmp101_ = self->priv->indent;
3127 self->priv->indent = _tmp101_ + 1;
3128 _tmp102_ = m;
3129 _tmp103_ = m;
3130 _tmp104_ = vala_symbol_get_name ((ValaSymbol*) _tmp103_);
3131 _tmp105_ = _tmp104_;
3132 _tmp106_ = m;
3133 _tmp107_ = vala_get_ccode_name ((ValaCodeNode*) _tmp106_);
3134 _tmp108_ = _tmp107_;
3135 _tmp109_ = m;
3136 _tmp110_ = vala_method_get_async_begin_parameters (_tmp109_);
3137 _tmp111_ = _tmp110_;
3138 _tmp112_ = vala_void_type_new (NULL);
3139 _tmp113_ = _tmp112_;
3140 vala_gir_writer_do_write_signature (self, _tmp102_, "callback", TRUE, _tmp105_, _tmp108_, _tmp111_, (ValaDataType*) _tmp113_, FALSE, FALSE, FALSE);
3141 _vala_code_node_unref0 (_tmp113_);
3142 _vala_iterable_unref0 (_tmp111_);
3143 _g_free0 (_tmp108_);
3144 _tmp114_ = self->priv->indent;
3145 self->priv->indent = _tmp114_ - 1;
3146 vala_gir_writer_write_indent (self);
3147 _tmp115_ = self->priv->buffer;
3148 g_string_append_printf (_tmp115_, "</field>\n");
3149 vala_gir_writer_write_indent (self);
3150 _tmp116_ = self->priv->buffer;
3151 _tmp117_ = finish_name;
3152 g_string_append_printf (_tmp116_, "<field name=\"%s\"", _tmp117_);
3153 _tmp118_ = m;
3154 vala_gir_writer_write_symbol_attributes (self, (ValaSymbol*) _tmp118_);
3155 _tmp119_ = self->priv->buffer;
3156 g_string_append_printf (_tmp119_, ">\n");
3157 _tmp120_ = self->priv->indent;
3158 self->priv->indent = _tmp120_ + 1;
3159 _tmp121_ = m;
3160 _tmp122_ = finish_name;
3161 _tmp123_ = m;
3162 _tmp124_ = vala_get_ccode_finish_name (_tmp123_);
3163 _tmp125_ = _tmp124_;
3164 _tmp126_ = m;
3165 _tmp127_ = vala_method_get_async_end_parameters (_tmp126_);
3166 _tmp128_ = _tmp127_;
3167 _tmp129_ = m;
3168 _tmp130_ = vala_callable_get_return_type ((ValaCallable*) _tmp129_);
3169 _tmp131_ = _tmp130_;
3170 _tmp132_ = m;
3171 _tmp133_ = vala_code_node_get_tree_can_fail ((ValaCodeNode*) _tmp132_);
3172 _tmp134_ = _tmp133_;
3173 vala_gir_writer_do_write_signature (self, _tmp121_, "callback", TRUE, _tmp122_, _tmp125_, _tmp128_, _tmp131_, _tmp134_, FALSE, FALSE);
3174 _vala_iterable_unref0 (_tmp128_);
3175 _g_free0 (_tmp125_);
3176 _tmp135_ = self->priv->indent;
3177 self->priv->indent = _tmp135_ - 1;
3178 vala_gir_writer_write_indent (self);
3179 _tmp136_ = self->priv->buffer;
3180 g_string_append_printf (_tmp136_, "</field>\n");
3181 _g_free0 (finish_name);
3182 } else {
3183 GString* _tmp137_;
3184 ValaMethod* _tmp138_;
3185 const gchar* _tmp139_;
3186 const gchar* _tmp140_;
3187 ValaMethod* _tmp141_;
3188 GString* _tmp142_;
3189 gint _tmp143_;
3190 ValaMethod* _tmp144_;
3191 ValaMethod* _tmp145_;
3192 const gchar* _tmp146_;
3193 const gchar* _tmp147_;
3194 ValaMethod* _tmp148_;
3195 gchar* _tmp149_;
3196 gchar* _tmp150_;
3197 ValaMethod* _tmp151_;
3198 ValaList* _tmp152_;
3199 ValaMethod* _tmp153_;
3200 ValaDataType* _tmp154_;
3201 ValaDataType* _tmp155_;
3202 ValaMethod* _tmp156_;
3203 gboolean _tmp157_;
3204 gboolean _tmp158_;
3205 gint _tmp159_;
3206 GString* _tmp160_;
3207 vala_gir_writer_write_indent (self);
3208 _tmp137_ = self->priv->buffer;
3209 _tmp138_ = m;
3210 _tmp139_ = vala_symbol_get_name ((ValaSymbol*) _tmp138_);
3211 _tmp140_ = _tmp139_;
3212 g_string_append_printf (_tmp137_, "<field name=\"%s\"", _tmp140_);
3213 _tmp141_ = m;
3214 vala_gir_writer_write_symbol_attributes (self, (ValaSymbol*) _tmp141_);
3215 _tmp142_ = self->priv->buffer;
3216 g_string_append_printf (_tmp142_, ">\n");
3217 _tmp143_ = self->priv->indent;
3218 self->priv->indent = _tmp143_ + 1;
3219 _tmp144_ = m;
3220 _tmp145_ = m;
3221 _tmp146_ = vala_symbol_get_name ((ValaSymbol*) _tmp145_);
3222 _tmp147_ = _tmp146_;
3223 _tmp148_ = m;
3224 _tmp149_ = vala_get_ccode_name ((ValaCodeNode*) _tmp148_);
3225 _tmp150_ = _tmp149_;
3226 _tmp151_ = m;
3227 _tmp152_ = vala_callable_get_parameters ((ValaCallable*) _tmp151_);
3228 _tmp153_ = m;
3229 _tmp154_ = vala_callable_get_return_type ((ValaCallable*) _tmp153_);
3230 _tmp155_ = _tmp154_;
3231 _tmp156_ = m;
3232 _tmp157_ = vala_code_node_get_tree_can_fail ((ValaCodeNode*) _tmp156_);
3233 _tmp158_ = _tmp157_;
3234 vala_gir_writer_do_write_signature (self, _tmp144_, "callback", TRUE, _tmp147_, _tmp150_, _tmp152_, _tmp155_, _tmp158_, FALSE, FALSE);
3235 _g_free0 (_tmp150_);
3236 _tmp159_ = self->priv->indent;
3237 self->priv->indent = _tmp159_ - 1;
3238 vala_gir_writer_write_indent (self);
3239 _tmp160_ = self->priv->buffer;
3240 g_string_append_printf (_tmp160_, "</field>\n");
3241 }
3242 }
3243 _vala_code_node_unref0 (m);
3244 }
3245 _vala_iterable_unref0 (_m_list);
3246 }
3247 {
3248 ValaList* _prop_list = NULL;
3249 ValaList* _tmp161_;
3250 ValaList* _tmp162_;
3251 gint _prop_size = 0;
3252 ValaList* _tmp163_;
3253 gint _tmp164_;
3254 gint _tmp165_;
3255 gint _prop_index = 0;
3256 _tmp161_ = vala_object_type_symbol_get_properties ((ValaObjectTypeSymbol*) iface);
3257 _tmp162_ = _vala_iterable_ref0 (_tmp161_);
3258 _prop_list = _tmp162_;
3259 _tmp163_ = _prop_list;
3260 _tmp164_ = vala_collection_get_size ((ValaCollection*) _tmp163_);
3261 _tmp165_ = _tmp164_;
3262 _prop_size = _tmp165_;
3263 _prop_index = -1;
3264 while (TRUE) {
3265 gint _tmp166_;
3266 gint _tmp167_;
3267 ValaProperty* prop = NULL;
3268 ValaList* _tmp168_;
3269 gpointer _tmp169_;
3270 gboolean _tmp170_ = FALSE;
3271 ValaProperty* _tmp171_;
3272 gboolean _tmp172_;
3273 gboolean _tmp173_;
3274 _prop_index = _prop_index + 1;
3275 _tmp166_ = _prop_index;
3276 _tmp167_ = _prop_size;
3277 if (!(_tmp166_ < _tmp167_)) {
3278 break;
3279 }
3280 _tmp168_ = _prop_list;
3281 _tmp169_ = vala_list_get (_tmp168_, _prop_index);
3282 prop = (ValaProperty*) _tmp169_;
3283 _tmp171_ = prop;
3284 _tmp172_ = vala_property_get_is_abstract (_tmp171_);
3285 _tmp173_ = _tmp172_;
3286 if (_tmp173_) {
3287 _tmp170_ = TRUE;
3288 } else {
3289 ValaProperty* _tmp174_;
3290 gboolean _tmp175_;
3291 gboolean _tmp176_;
3292 _tmp174_ = prop;
3293 _tmp175_ = vala_property_get_is_virtual (_tmp174_);
3294 _tmp176_ = _tmp175_;
3295 _tmp170_ = _tmp176_;
3296 }
3297 if (_tmp170_) {
3298 ValaProperty* _tmp177_;
3299 ValaPropertyAccessor* _tmp178_;
3300 ValaPropertyAccessor* _tmp179_;
3301 gboolean _tmp208_ = FALSE;
3302 ValaProperty* _tmp209_;
3303 ValaPropertyAccessor* _tmp210_;
3304 ValaPropertyAccessor* _tmp211_;
3305 _tmp177_ = prop;
3306 _tmp178_ = vala_property_get_get_accessor (_tmp177_);
3307 _tmp179_ = _tmp178_;
3308 if (_tmp179_ != NULL) {
3309 ValaMethod* m = NULL;
3310 ValaProperty* _tmp180_;
3311 ValaPropertyAccessor* _tmp181_;
3312 ValaPropertyAccessor* _tmp182_;
3313 ValaMethod* _tmp183_;
3314 GString* _tmp184_;
3315 ValaMethod* _tmp185_;
3316 const gchar* _tmp186_;
3317 const gchar* _tmp187_;
3318 ValaMethod* _tmp188_;
3319 GString* _tmp189_;
3320 gint _tmp190_;
3321 ValaMethod* _tmp191_;
3322 ValaMethod* _tmp192_;
3323 const gchar* _tmp193_;
3324 const gchar* _tmp194_;
3325 ValaMethod* _tmp195_;
3326 gchar* _tmp196_;
3327 gchar* _tmp197_;
3328 ValaMethod* _tmp198_;
3329 ValaList* _tmp199_;
3330 ValaMethod* _tmp200_;
3331 ValaDataType* _tmp201_;
3332 ValaDataType* _tmp202_;
3333 ValaMethod* _tmp203_;
3334 gboolean _tmp204_;
3335 gboolean _tmp205_;
3336 gint _tmp206_;
3337 GString* _tmp207_;
3338 _tmp180_ = prop;
3339 _tmp181_ = vala_property_get_get_accessor (_tmp180_);
3340 _tmp182_ = _tmp181_;
3341 _tmp183_ = vala_property_accessor_get_method (_tmp182_);
3342 m = _tmp183_;
3343 vala_gir_writer_write_indent (self);
3344 _tmp184_ = self->priv->buffer;
3345 _tmp185_ = m;
3346 _tmp186_ = vala_symbol_get_name ((ValaSymbol*) _tmp185_);
3347 _tmp187_ = _tmp186_;
3348 g_string_append_printf (_tmp184_, "<field name=\"%s\"", _tmp187_);
3349 _tmp188_ = m;
3350 vala_gir_writer_write_symbol_attributes (self, (ValaSymbol*) _tmp188_);
3351 _tmp189_ = self->priv->buffer;
3352 g_string_append_printf (_tmp189_, ">\n");
3353 _tmp190_ = self->priv->indent;
3354 self->priv->indent = _tmp190_ + 1;
3355 _tmp191_ = m;
3356 _tmp192_ = m;
3357 _tmp193_ = vala_symbol_get_name ((ValaSymbol*) _tmp192_);
3358 _tmp194_ = _tmp193_;
3359 _tmp195_ = m;
3360 _tmp196_ = vala_get_ccode_name ((ValaCodeNode*) _tmp195_);
3361 _tmp197_ = _tmp196_;
3362 _tmp198_ = m;
3363 _tmp199_ = vala_callable_get_parameters ((ValaCallable*) _tmp198_);
3364 _tmp200_ = m;
3365 _tmp201_ = vala_callable_get_return_type ((ValaCallable*) _tmp200_);
3366 _tmp202_ = _tmp201_;
3367 _tmp203_ = m;
3368 _tmp204_ = vala_code_node_get_tree_can_fail ((ValaCodeNode*) _tmp203_);
3369 _tmp205_ = _tmp204_;
3370 vala_gir_writer_do_write_signature (self, _tmp191_, "callback", TRUE, _tmp194_, _tmp197_, _tmp199_, _tmp202_, _tmp205_, FALSE, FALSE);
3371 _g_free0 (_tmp197_);
3372 _tmp206_ = self->priv->indent;
3373 self->priv->indent = _tmp206_ - 1;
3374 vala_gir_writer_write_indent (self);
3375 _tmp207_ = self->priv->buffer;
3376 g_string_append_printf (_tmp207_, "</field>\n");
3377 _vala_code_node_unref0 (m);
3378 }
3379 _tmp209_ = prop;
3380 _tmp210_ = vala_property_get_set_accessor (_tmp209_);
3381 _tmp211_ = _tmp210_;
3382 if (_tmp211_ != NULL) {
3383 ValaProperty* _tmp212_;
3384 ValaPropertyAccessor* _tmp213_;
3385 ValaPropertyAccessor* _tmp214_;
3386 gboolean _tmp215_;
3387 gboolean _tmp216_;
3388 _tmp212_ = prop;
3389 _tmp213_ = vala_property_get_set_accessor (_tmp212_);
3390 _tmp214_ = _tmp213_;
3391 _tmp215_ = vala_property_accessor_get_writable (_tmp214_);
3392 _tmp216_ = _tmp215_;
3393 _tmp208_ = _tmp216_;
3394 } else {
3395 _tmp208_ = FALSE;
3396 }
3397 if (_tmp208_) {
3398 ValaMethod* m = NULL;
3399 ValaProperty* _tmp217_;
3400 ValaPropertyAccessor* _tmp218_;
3401 ValaPropertyAccessor* _tmp219_;
3402 ValaMethod* _tmp220_;
3403 GString* _tmp221_;
3404 ValaMethod* _tmp222_;
3405 const gchar* _tmp223_;
3406 const gchar* _tmp224_;
3407 ValaMethod* _tmp225_;
3408 GString* _tmp226_;
3409 gint _tmp227_;
3410 ValaMethod* _tmp228_;
3411 ValaMethod* _tmp229_;
3412 const gchar* _tmp230_;
3413 const gchar* _tmp231_;
3414 ValaMethod* _tmp232_;
3415 gchar* _tmp233_;
3416 gchar* _tmp234_;
3417 ValaMethod* _tmp235_;
3418 ValaList* _tmp236_;
3419 ValaMethod* _tmp237_;
3420 ValaDataType* _tmp238_;
3421 ValaDataType* _tmp239_;
3422 ValaMethod* _tmp240_;
3423 gboolean _tmp241_;
3424 gboolean _tmp242_;
3425 gint _tmp243_;
3426 GString* _tmp244_;
3427 _tmp217_ = prop;
3428 _tmp218_ = vala_property_get_set_accessor (_tmp217_);
3429 _tmp219_ = _tmp218_;
3430 _tmp220_ = vala_property_accessor_get_method (_tmp219_);
3431 m = _tmp220_;
3432 vala_gir_writer_write_indent (self);
3433 _tmp221_ = self->priv->buffer;
3434 _tmp222_ = m;
3435 _tmp223_ = vala_symbol_get_name ((ValaSymbol*) _tmp222_);
3436 _tmp224_ = _tmp223_;
3437 g_string_append_printf (_tmp221_, "<field name=\"%s\"", _tmp224_);
3438 _tmp225_ = m;
3439 vala_gir_writer_write_symbol_attributes (self, (ValaSymbol*) _tmp225_);
3440 _tmp226_ = self->priv->buffer;
3441 g_string_append_printf (_tmp226_, ">\n");
3442 _tmp227_ = self->priv->indent;
3443 self->priv->indent = _tmp227_ + 1;
3444 _tmp228_ = m;
3445 _tmp229_ = m;
3446 _tmp230_ = vala_symbol_get_name ((ValaSymbol*) _tmp229_);
3447 _tmp231_ = _tmp230_;
3448 _tmp232_ = m;
3449 _tmp233_ = vala_get_ccode_name ((ValaCodeNode*) _tmp232_);
3450 _tmp234_ = _tmp233_;
3451 _tmp235_ = m;
3452 _tmp236_ = vala_callable_get_parameters ((ValaCallable*) _tmp235_);
3453 _tmp237_ = m;
3454 _tmp238_ = vala_callable_get_return_type ((ValaCallable*) _tmp237_);
3455 _tmp239_ = _tmp238_;
3456 _tmp240_ = m;
3457 _tmp241_ = vala_code_node_get_tree_can_fail ((ValaCodeNode*) _tmp240_);
3458 _tmp242_ = _tmp241_;
3459 vala_gir_writer_do_write_signature (self, _tmp228_, "callback", TRUE, _tmp231_, _tmp234_, _tmp236_, _tmp239_, _tmp242_, FALSE, FALSE);
3460 _g_free0 (_tmp234_);
3461 _tmp243_ = self->priv->indent;
3462 self->priv->indent = _tmp243_ - 1;
3463 vala_gir_writer_write_indent (self);
3464 _tmp244_ = self->priv->buffer;
3465 g_string_append_printf (_tmp244_, "</field>\n");
3466 _vala_code_node_unref0 (m);
3467 }
3468 }
3469 _vala_code_node_unref0 (prop);
3470 }
3471 _vala_iterable_unref0 (_prop_list);
3472 }
3473 _tmp245_ = self->priv->indent;
3474 self->priv->indent = _tmp245_ - 1;
3475 vala_gir_writer_write_indent (self);
3476 _tmp246_ = self->priv->buffer;
3477 g_string_append_printf (_tmp246_, "</record>\n");
3478 vala_gir_writer_visit_deferred (self);
3479 _g_free0 (gtype_struct_name);
3480 }
3481
3482 static void
vala_gir_writer_visit_deferred(ValaGIRWriter * self)3483 vala_gir_writer_visit_deferred (ValaGIRWriter* self)
3484 {
3485 ValaArrayList* nodes = NULL;
3486 ValaArrayList* _tmp0_;
3487 ValaArrayList* _tmp1_;
3488 GEqualFunc _tmp2_;
3489 ValaArrayList* _tmp3_;
3490 g_return_if_fail (self != NULL);
3491 _tmp0_ = self->priv->deferred;
3492 _tmp1_ = _vala_iterable_ref0 (_tmp0_);
3493 nodes = _tmp1_;
3494 _tmp2_ = g_direct_equal;
3495 _tmp3_ = vala_array_list_new (VALA_TYPE_CODE_NODE, (GBoxedCopyFunc) vala_code_node_ref, (GDestroyNotify) vala_code_node_unref, _tmp2_);
3496 _vala_iterable_unref0 (self->priv->deferred);
3497 self->priv->deferred = _tmp3_;
3498 {
3499 ValaArrayList* _node_list = NULL;
3500 ValaArrayList* _tmp4_;
3501 ValaArrayList* _tmp5_;
3502 gint _node_size = 0;
3503 ValaArrayList* _tmp6_;
3504 gint _tmp7_;
3505 gint _tmp8_;
3506 gint _node_index = 0;
3507 _tmp4_ = nodes;
3508 _tmp5_ = _vala_iterable_ref0 (_tmp4_);
3509 _node_list = _tmp5_;
3510 _tmp6_ = _node_list;
3511 _tmp7_ = vala_collection_get_size ((ValaCollection*) _tmp6_);
3512 _tmp8_ = _tmp7_;
3513 _node_size = _tmp8_;
3514 _node_index = -1;
3515 while (TRUE) {
3516 gint _tmp9_;
3517 gint _tmp10_;
3518 ValaCodeNode* node = NULL;
3519 ValaArrayList* _tmp11_;
3520 gpointer _tmp12_;
3521 ValaCodeNode* _tmp13_;
3522 _node_index = _node_index + 1;
3523 _tmp9_ = _node_index;
3524 _tmp10_ = _node_size;
3525 if (!(_tmp9_ < _tmp10_)) {
3526 break;
3527 }
3528 _tmp11_ = _node_list;
3529 _tmp12_ = vala_list_get ((ValaList*) _tmp11_, _node_index);
3530 node = (ValaCodeNode*) _tmp12_;
3531 _tmp13_ = node;
3532 vala_code_node_accept (_tmp13_, (ValaCodeVisitor*) self);
3533 _vala_code_node_unref0 (node);
3534 }
3535 _vala_iterable_unref0 (_node_list);
3536 }
3537 _vala_iterable_unref0 (nodes);
3538 }
3539
3540 static gchar*
vala_gir_writer_get_gir_name(ValaGIRWriter * self,ValaSymbol * symbol)3541 vala_gir_writer_get_gir_name (ValaGIRWriter* self,
3542 ValaSymbol* symbol)
3543 {
3544 gchar* gir_name = NULL;
3545 ValaSymbol* h0 = NULL;
3546 ValaArrayList* _tmp0_;
3547 gpointer _tmp1_;
3548 gchar* result = NULL;
3549 g_return_val_if_fail (self != NULL, NULL);
3550 g_return_val_if_fail (symbol != NULL, NULL);
3551 gir_name = NULL;
3552 _tmp0_ = self->priv->hierarchy;
3553 _tmp1_ = vala_list_get ((ValaList*) _tmp0_, 0);
3554 h0 = (ValaSymbol*) _tmp1_;
3555 {
3556 ValaSymbol* cur_sym = NULL;
3557 ValaSymbol* _tmp2_;
3558 _tmp2_ = _vala_code_node_ref0 (symbol);
3559 cur_sym = _tmp2_;
3560 {
3561 gboolean _tmp3_ = FALSE;
3562 _tmp3_ = TRUE;
3563 while (TRUE) {
3564 ValaSymbol* _tmp8_;
3565 ValaSymbol* _tmp9_;
3566 ValaSymbol* _tmp10_;
3567 gchar* cur_name = NULL;
3568 ValaSymbol* _tmp11_;
3569 gchar* _tmp12_;
3570 const gchar* _tmp13_;
3571 const gchar* _tmp18_;
3572 const gchar* _tmp19_;
3573 gchar* _tmp20_;
3574 if (!_tmp3_) {
3575 ValaSymbol* _tmp4_;
3576 ValaSymbol* _tmp5_;
3577 ValaSymbol* _tmp6_;
3578 ValaSymbol* _tmp7_;
3579 _tmp4_ = cur_sym;
3580 _tmp5_ = vala_symbol_get_parent_symbol (_tmp4_);
3581 _tmp6_ = _tmp5_;
3582 _tmp7_ = _vala_code_node_ref0 (_tmp6_);
3583 _vala_code_node_unref0 (cur_sym);
3584 cur_sym = _tmp7_;
3585 }
3586 _tmp3_ = FALSE;
3587 _tmp8_ = cur_sym;
3588 if (!(_tmp8_ != NULL)) {
3589 break;
3590 }
3591 _tmp9_ = cur_sym;
3592 _tmp10_ = h0;
3593 if (_tmp9_ == _tmp10_) {
3594 break;
3595 }
3596 _tmp11_ = cur_sym;
3597 _tmp12_ = vala_code_node_get_attribute_string ((ValaCodeNode*) _tmp11_, "GIR", "name", NULL);
3598 cur_name = _tmp12_;
3599 _tmp13_ = cur_name;
3600 if (_tmp13_ == NULL) {
3601 ValaSymbol* _tmp14_;
3602 const gchar* _tmp15_;
3603 const gchar* _tmp16_;
3604 gchar* _tmp17_;
3605 _tmp14_ = cur_sym;
3606 _tmp15_ = vala_symbol_get_name (_tmp14_);
3607 _tmp16_ = _tmp15_;
3608 _tmp17_ = g_strdup (_tmp16_);
3609 _g_free0 (cur_name);
3610 cur_name = _tmp17_;
3611 }
3612 _tmp18_ = cur_name;
3613 _tmp19_ = gir_name;
3614 _tmp20_ = g_strconcat (_tmp18_, _tmp19_, NULL);
3615 _g_free0 (gir_name);
3616 gir_name = _tmp20_;
3617 _g_free0 (cur_name);
3618 }
3619 }
3620 _vala_code_node_unref0 (cur_sym);
3621 }
3622 result = gir_name;
3623 _vala_code_node_unref0 (h0);
3624 return result;
3625 }
3626
3627 static void
vala_gir_writer_real_visit_enum(ValaCodeVisitor * base,ValaEnum * en)3628 vala_gir_writer_real_visit_enum (ValaCodeVisitor* base,
3629 ValaEnum* en)
3630 {
3631 ValaGIRWriter * self;
3632 gboolean _tmp0_;
3633 gboolean _tmp1_;
3634 ValaArrayList* _tmp2_;
3635 gpointer _tmp3_;
3636 ValaSymbol* _tmp4_;
3637 gboolean _tmp5_;
3638 const gchar* _tmp7_ = NULL;
3639 gboolean _tmp8_;
3640 gboolean _tmp9_;
3641 gchar* element_name = NULL;
3642 gchar* _tmp10_;
3643 GString* _tmp11_;
3644 const gchar* _tmp12_;
3645 gchar* _tmp13_;
3646 gchar* _tmp14_;
3647 GString* _tmp15_;
3648 gint _tmp16_;
3649 gchar* _tmp17_;
3650 gchar* _tmp18_;
3651 ValaArrayList* _tmp19_;
3652 ValaArrayList* _tmp20_;
3653 gpointer _tmp21_;
3654 ValaSymbol* _tmp22_;
3655 gint _tmp23_;
3656 GString* _tmp24_;
3657 const gchar* _tmp25_;
3658 self = (ValaGIRWriter*) base;
3659 g_return_if_fail (en != NULL);
3660 _tmp0_ = vala_symbol_get_external_package ((ValaSymbol*) en);
3661 _tmp1_ = _tmp0_;
3662 if (_tmp1_) {
3663 return;
3664 }
3665 if (!vala_gir_writer_check_accessibility (self, (ValaSymbol*) en)) {
3666 return;
3667 }
3668 if (!vala_gir_writer_has_namespace (self, (ValaSymbol*) en)) {
3669 return;
3670 }
3671 _tmp2_ = self->priv->hierarchy;
3672 _tmp3_ = vala_list_get ((ValaList*) _tmp2_, 0);
3673 _tmp4_ = (ValaSymbol*) _tmp3_;
3674 _tmp5_ = !G_TYPE_CHECK_INSTANCE_TYPE (_tmp4_, VALA_TYPE_NAMESPACE);
3675 _vala_code_node_unref0 (_tmp4_);
3676 if (_tmp5_) {
3677 ValaArrayList* _tmp6_;
3678 _tmp6_ = self->priv->deferred;
3679 vala_collection_add ((ValaCollection*) _tmp6_, (ValaCodeNode*) en);
3680 return;
3681 }
3682 _tmp8_ = vala_enum_get_is_flags (en);
3683 _tmp9_ = _tmp8_;
3684 if (_tmp9_) {
3685 _tmp7_ = "bitfield";
3686 } else {
3687 _tmp7_ = "enumeration";
3688 }
3689 _tmp10_ = g_strdup (_tmp7_);
3690 element_name = _tmp10_;
3691 vala_gir_writer_write_indent (self);
3692 _tmp11_ = self->priv->buffer;
3693 _tmp12_ = element_name;
3694 _tmp13_ = vala_gir_writer_get_gir_name (self, (ValaSymbol*) en);
3695 _tmp14_ = _tmp13_;
3696 g_string_append_printf (_tmp11_, "<%s name=\"%s\"", _tmp12_, _tmp14_);
3697 _g_free0 (_tmp14_);
3698 if (vala_get_ccode_has_type_id ((ValaTypeSymbol*) en)) {
3699 vala_gir_writer_write_gtype_attributes (self, (ValaTypeSymbol*) en, FALSE);
3700 } else {
3701 vala_gir_writer_write_ctype_attributes (self, (ValaTypeSymbol*) en, "", FALSE);
3702 }
3703 vala_gir_writer_write_symbol_attributes (self, (ValaSymbol*) en);
3704 _tmp15_ = self->priv->buffer;
3705 g_string_append_printf (_tmp15_, ">\n");
3706 _tmp16_ = self->priv->indent;
3707 self->priv->indent = _tmp16_ + 1;
3708 _tmp17_ = vala_gir_writer_get_enum_comment (self, en);
3709 _tmp18_ = _tmp17_;
3710 vala_gir_writer_write_doc (self, _tmp18_);
3711 _g_free0 (_tmp18_);
3712 self->priv->enum_value = 0;
3713 _tmp19_ = self->priv->hierarchy;
3714 vala_list_insert ((ValaList*) _tmp19_, 0, (ValaSymbol*) en);
3715 vala_code_node_accept_children ((ValaCodeNode*) en, (ValaCodeVisitor*) self);
3716 _tmp20_ = self->priv->hierarchy;
3717 _tmp21_ = vala_list_remove_at ((ValaList*) _tmp20_, 0);
3718 _tmp22_ = (ValaSymbol*) _tmp21_;
3719 _vala_code_node_unref0 (_tmp22_);
3720 _tmp23_ = self->priv->indent;
3721 self->priv->indent = _tmp23_ - 1;
3722 vala_gir_writer_write_indent (self);
3723 _tmp24_ = self->priv->buffer;
3724 _tmp25_ = element_name;
3725 g_string_append_printf (_tmp24_, "</%s>\n", _tmp25_);
3726 vala_gir_writer_visit_deferred (self);
3727 _g_free0 (element_name);
3728 }
3729
3730 static void
vala_gir_writer_real_visit_enum_value(ValaCodeVisitor * base,ValaEnumValue * ev)3731 vala_gir_writer_real_visit_enum_value (ValaCodeVisitor* base,
3732 ValaEnumValue* ev)
3733 {
3734 ValaGIRWriter * self;
3735 ValaEnum* en = NULL;
3736 ValaArrayList* _tmp0_;
3737 gpointer _tmp1_;
3738 GString* _tmp2_;
3739 const gchar* _tmp3_;
3740 const gchar* _tmp4_;
3741 gchar* _tmp5_;
3742 gchar* _tmp6_;
3743 gchar* _tmp7_;
3744 gchar* _tmp8_;
3745 ValaExpression* _tmp9_;
3746 ValaExpression* _tmp10_;
3747 gchar* comment = NULL;
3748 gchar* _tmp23_;
3749 const gchar* _tmp24_;
3750 self = (ValaGIRWriter*) base;
3751 g_return_if_fail (ev != NULL);
3752 vala_gir_writer_write_indent (self);
3753 _tmp0_ = self->priv->hierarchy;
3754 _tmp1_ = vala_list_get ((ValaList*) _tmp0_, 0);
3755 en = G_TYPE_CHECK_INSTANCE_CAST ((ValaSymbol*) _tmp1_, VALA_TYPE_ENUM, ValaEnum);
3756 _tmp2_ = self->priv->buffer;
3757 _tmp3_ = vala_symbol_get_name ((ValaSymbol*) ev);
3758 _tmp4_ = _tmp3_;
3759 _tmp5_ = g_ascii_strdown (_tmp4_, (gssize) -1);
3760 _tmp6_ = _tmp5_;
3761 _tmp7_ = vala_get_ccode_name ((ValaCodeNode*) ev);
3762 _tmp8_ = _tmp7_;
3763 g_string_append_printf (_tmp2_, "<member name=\"%s\" c:identifier=\"%s\"", _tmp6_, _tmp8_);
3764 _g_free0 (_tmp8_);
3765 _g_free0 (_tmp6_);
3766 _tmp9_ = vala_constant_get_value ((ValaConstant*) ev);
3767 _tmp10_ = _tmp9_;
3768 if (_tmp10_ != NULL) {
3769 gchar* value = NULL;
3770 ValaExpression* _tmp11_;
3771 ValaExpression* _tmp12_;
3772 gchar* _tmp13_;
3773 GString* _tmp14_;
3774 const gchar* _tmp15_;
3775 _tmp11_ = vala_constant_get_value ((ValaConstant*) ev);
3776 _tmp12_ = _tmp11_;
3777 _tmp13_ = vala_gir_writer_literal_expression_to_value_string (self, _tmp12_);
3778 value = _tmp13_;
3779 _tmp14_ = self->priv->buffer;
3780 _tmp15_ = value;
3781 g_string_append_printf (_tmp14_, " value=\"%s\"", _tmp15_);
3782 _g_free0 (value);
3783 } else {
3784 ValaEnum* _tmp16_;
3785 gboolean _tmp17_;
3786 gboolean _tmp18_;
3787 _tmp16_ = en;
3788 _tmp17_ = vala_enum_get_is_flags (_tmp16_);
3789 _tmp18_ = _tmp17_;
3790 if (_tmp18_) {
3791 GString* _tmp19_;
3792 gint _tmp20_;
3793 _tmp19_ = self->priv->buffer;
3794 _tmp20_ = self->priv->enum_value;
3795 self->priv->enum_value = _tmp20_ + 1;
3796 g_string_append_printf (_tmp19_, " value=\"%d\"", 1 << _tmp20_);
3797 } else {
3798 GString* _tmp21_;
3799 gint _tmp22_;
3800 _tmp21_ = self->priv->buffer;
3801 _tmp22_ = self->priv->enum_value;
3802 self->priv->enum_value = _tmp22_ + 1;
3803 g_string_append_printf (_tmp21_, " value=\"%d\"", _tmp22_);
3804 }
3805 }
3806 vala_gir_writer_write_symbol_attributes (self, (ValaSymbol*) ev);
3807 _tmp23_ = vala_gir_writer_get_enum_value_comment (self, ev);
3808 comment = _tmp23_;
3809 _tmp24_ = comment;
3810 if (_tmp24_ == NULL) {
3811 GString* _tmp25_;
3812 _tmp25_ = self->priv->buffer;
3813 g_string_append_printf (_tmp25_, "/>\n");
3814 } else {
3815 GString* _tmp26_;
3816 gint _tmp27_;
3817 const gchar* _tmp28_;
3818 gint _tmp29_;
3819 GString* _tmp30_;
3820 _tmp26_ = self->priv->buffer;
3821 g_string_append_printf (_tmp26_, ">\n");
3822 _tmp27_ = self->priv->indent;
3823 self->priv->indent = _tmp27_ + 1;
3824 _tmp28_ = comment;
3825 vala_gir_writer_write_doc (self, _tmp28_);
3826 _tmp29_ = self->priv->indent;
3827 self->priv->indent = _tmp29_ - 1;
3828 vala_gir_writer_write_indent (self);
3829 _tmp30_ = self->priv->buffer;
3830 g_string_append_printf (_tmp30_, "</member>\n");
3831 }
3832 _g_free0 (comment);
3833 _vala_code_node_unref0 (en);
3834 }
3835
3836 static void
vala_gir_writer_real_visit_error_domain(ValaCodeVisitor * base,ValaErrorDomain * edomain)3837 vala_gir_writer_real_visit_error_domain (ValaCodeVisitor* base,
3838 ValaErrorDomain* edomain)
3839 {
3840 ValaGIRWriter * self;
3841 gboolean _tmp0_;
3842 gboolean _tmp1_;
3843 GString* _tmp2_;
3844 const gchar* _tmp3_;
3845 const gchar* _tmp4_;
3846 GString* _tmp5_;
3847 gchar* _tmp6_;
3848 gchar* _tmp7_;
3849 GString* _tmp8_;
3850 gint _tmp9_;
3851 gchar* _tmp10_;
3852 gchar* _tmp11_;
3853 ValaArrayList* _tmp12_;
3854 ValaArrayList* _tmp13_;
3855 gpointer _tmp14_;
3856 ValaSymbol* _tmp15_;
3857 gint _tmp16_;
3858 GString* _tmp17_;
3859 self = (ValaGIRWriter*) base;
3860 g_return_if_fail (edomain != NULL);
3861 _tmp0_ = vala_symbol_get_external_package ((ValaSymbol*) edomain);
3862 _tmp1_ = _tmp0_;
3863 if (_tmp1_) {
3864 return;
3865 }
3866 if (!vala_gir_writer_check_accessibility (self, (ValaSymbol*) edomain)) {
3867 return;
3868 }
3869 if (!vala_gir_writer_has_namespace (self, (ValaSymbol*) edomain)) {
3870 return;
3871 }
3872 vala_gir_writer_write_indent (self);
3873 _tmp2_ = self->priv->buffer;
3874 _tmp3_ = vala_symbol_get_name ((ValaSymbol*) edomain);
3875 _tmp4_ = _tmp3_;
3876 g_string_append_printf (_tmp2_, "<enumeration name=\"%s\"", _tmp4_);
3877 vala_gir_writer_write_ctype_attributes (self, (ValaTypeSymbol*) edomain, "", FALSE);
3878 _tmp5_ = self->priv->buffer;
3879 _tmp6_ = vala_get_ccode_quark_name (edomain);
3880 _tmp7_ = _tmp6_;
3881 g_string_append_printf (_tmp5_, " glib:error-domain=\"%s\"", _tmp7_);
3882 _g_free0 (_tmp7_);
3883 vala_gir_writer_write_symbol_attributes (self, (ValaSymbol*) edomain);
3884 _tmp8_ = self->priv->buffer;
3885 g_string_append_printf (_tmp8_, ">\n");
3886 _tmp9_ = self->priv->indent;
3887 self->priv->indent = _tmp9_ + 1;
3888 _tmp10_ = vala_gir_writer_get_error_domain_comment (self, edomain);
3889 _tmp11_ = _tmp10_;
3890 vala_gir_writer_write_doc (self, _tmp11_);
3891 _g_free0 (_tmp11_);
3892 self->priv->enum_value = 0;
3893 _tmp12_ = self->priv->hierarchy;
3894 vala_list_insert ((ValaList*) _tmp12_, 0, (ValaSymbol*) edomain);
3895 vala_code_node_accept_children ((ValaCodeNode*) edomain, (ValaCodeVisitor*) self);
3896 _tmp13_ = self->priv->hierarchy;
3897 _tmp14_ = vala_list_remove_at ((ValaList*) _tmp13_, 0);
3898 _tmp15_ = (ValaSymbol*) _tmp14_;
3899 _vala_code_node_unref0 (_tmp15_);
3900 _tmp16_ = self->priv->indent;
3901 self->priv->indent = _tmp16_ - 1;
3902 vala_gir_writer_write_indent (self);
3903 _tmp17_ = self->priv->buffer;
3904 g_string_append_printf (_tmp17_, "</enumeration>\n");
3905 vala_gir_writer_visit_deferred (self);
3906 }
3907
3908 static void
vala_gir_writer_real_visit_error_code(ValaCodeVisitor * base,ValaErrorCode * ecode)3909 vala_gir_writer_real_visit_error_code (ValaCodeVisitor* base,
3910 ValaErrorCode* ecode)
3911 {
3912 ValaGIRWriter * self;
3913 GString* _tmp0_;
3914 const gchar* _tmp1_;
3915 const gchar* _tmp2_;
3916 gchar* _tmp3_;
3917 gchar* _tmp4_;
3918 gchar* _tmp5_;
3919 gchar* _tmp6_;
3920 ValaExpression* _tmp7_;
3921 ValaExpression* _tmp8_;
3922 gchar* comment = NULL;
3923 gchar* _tmp16_;
3924 const gchar* _tmp17_;
3925 self = (ValaGIRWriter*) base;
3926 g_return_if_fail (ecode != NULL);
3927 vala_gir_writer_write_indent (self);
3928 _tmp0_ = self->priv->buffer;
3929 _tmp1_ = vala_symbol_get_name ((ValaSymbol*) ecode);
3930 _tmp2_ = _tmp1_;
3931 _tmp3_ = g_ascii_strdown (_tmp2_, (gssize) -1);
3932 _tmp4_ = _tmp3_;
3933 _tmp5_ = vala_get_ccode_name ((ValaCodeNode*) ecode);
3934 _tmp6_ = _tmp5_;
3935 g_string_append_printf (_tmp0_, "<member name=\"%s\" c:identifier=\"%s\"", _tmp4_, _tmp6_);
3936 _g_free0 (_tmp6_);
3937 _g_free0 (_tmp4_);
3938 _tmp7_ = vala_error_code_get_value (ecode);
3939 _tmp8_ = _tmp7_;
3940 if (_tmp8_ != NULL) {
3941 gchar* value = NULL;
3942 ValaExpression* _tmp9_;
3943 ValaExpression* _tmp10_;
3944 gchar* _tmp11_;
3945 GString* _tmp12_;
3946 const gchar* _tmp13_;
3947 _tmp9_ = vala_error_code_get_value (ecode);
3948 _tmp10_ = _tmp9_;
3949 _tmp11_ = vala_gir_writer_literal_expression_to_value_string (self, _tmp10_);
3950 value = _tmp11_;
3951 _tmp12_ = self->priv->buffer;
3952 _tmp13_ = value;
3953 g_string_append_printf (_tmp12_, " value=\"%s\"", _tmp13_);
3954 _g_free0 (value);
3955 } else {
3956 GString* _tmp14_;
3957 gint _tmp15_;
3958 _tmp14_ = self->priv->buffer;
3959 _tmp15_ = self->priv->enum_value;
3960 self->priv->enum_value = _tmp15_ + 1;
3961 g_string_append_printf (_tmp14_, " value=\"%d\"", _tmp15_);
3962 }
3963 vala_gir_writer_write_symbol_attributes (self, (ValaSymbol*) ecode);
3964 _tmp16_ = vala_gir_writer_get_error_code_comment (self, ecode);
3965 comment = _tmp16_;
3966 _tmp17_ = comment;
3967 if (_tmp17_ == NULL) {
3968 GString* _tmp18_;
3969 _tmp18_ = self->priv->buffer;
3970 g_string_append_printf (_tmp18_, "/>\n");
3971 } else {
3972 GString* _tmp19_;
3973 gint _tmp20_;
3974 const gchar* _tmp21_;
3975 gint _tmp22_;
3976 GString* _tmp23_;
3977 _tmp19_ = self->priv->buffer;
3978 g_string_append_printf (_tmp19_, ">\n");
3979 _tmp20_ = self->priv->indent;
3980 self->priv->indent = _tmp20_ + 1;
3981 _tmp21_ = comment;
3982 vala_gir_writer_write_doc (self, _tmp21_);
3983 _tmp22_ = self->priv->indent;
3984 self->priv->indent = _tmp22_ - 1;
3985 vala_gir_writer_write_indent (self);
3986 _tmp23_ = self->priv->buffer;
3987 g_string_append_printf (_tmp23_, "</member>\n");
3988 }
3989 _g_free0 (comment);
3990 }
3991
3992 static void
vala_gir_writer_real_visit_constant(ValaCodeVisitor * base,ValaConstant * c)3993 vala_gir_writer_real_visit_constant (ValaCodeVisitor* base,
3994 ValaConstant* c)
3995 {
3996 ValaGIRWriter * self;
3997 gboolean _tmp0_;
3998 gboolean _tmp1_;
3999 ValaExpression* initializer = NULL;
4000 ValaExpression* _tmp2_;
4001 ValaExpression* _tmp3_;
4002 ValaExpression* _tmp4_;
4003 gchar* value = NULL;
4004 ValaExpression* _tmp5_;
4005 gchar* _tmp6_;
4006 GString* _tmp7_;
4007 const gchar* _tmp8_;
4008 const gchar* _tmp9_;
4009 gchar* _tmp10_;
4010 gchar* _tmp11_;
4011 GString* _tmp12_;
4012 const gchar* _tmp13_;
4013 GString* _tmp14_;
4014 gint _tmp15_;
4015 gchar* _tmp16_;
4016 gchar* _tmp17_;
4017 ValaExpression* _tmp18_;
4018 ValaDataType* _tmp19_;
4019 ValaDataType* _tmp20_;
4020 gint _tmp21_;
4021 GString* _tmp22_;
4022 self = (ValaGIRWriter*) base;
4023 g_return_if_fail (c != NULL);
4024 _tmp0_ = vala_symbol_get_external_package ((ValaSymbol*) c);
4025 _tmp1_ = _tmp0_;
4026 if (_tmp1_) {
4027 return;
4028 }
4029 if (!vala_gir_writer_check_accessibility (self, (ValaSymbol*) c)) {
4030 return;
4031 }
4032 if (!vala_gir_writer_has_namespace (self, (ValaSymbol*) c)) {
4033 return;
4034 }
4035 _tmp2_ = vala_constant_get_value (c);
4036 _tmp3_ = _tmp2_;
4037 _tmp4_ = _vala_code_node_ref0 (_tmp3_);
4038 initializer = _tmp4_;
4039 _tmp5_ = initializer;
4040 _tmp6_ = vala_gir_writer_literal_expression_to_value_string (self, _tmp5_);
4041 value = _tmp6_;
4042 vala_gir_writer_write_indent (self);
4043 _tmp7_ = self->priv->buffer;
4044 _tmp8_ = vala_symbol_get_name ((ValaSymbol*) c);
4045 _tmp9_ = _tmp8_;
4046 _tmp10_ = vala_get_ccode_name ((ValaCodeNode*) c);
4047 _tmp11_ = _tmp10_;
4048 g_string_append_printf (_tmp7_, "<constant name=\"%s\" c:identifier=\"%s\"", _tmp9_, _tmp11_);
4049 _g_free0 (_tmp11_);
4050 _tmp12_ = self->priv->buffer;
4051 _tmp13_ = value;
4052 g_string_append_printf (_tmp12_, " value=\"%s\"", _tmp13_);
4053 vala_gir_writer_write_symbol_attributes (self, (ValaSymbol*) c);
4054 _tmp14_ = self->priv->buffer;
4055 g_string_append_printf (_tmp14_, ">\n");
4056 _tmp15_ = self->priv->indent;
4057 self->priv->indent = _tmp15_ + 1;
4058 _tmp16_ = vala_gir_writer_get_constant_comment (self, c);
4059 _tmp17_ = _tmp16_;
4060 vala_gir_writer_write_doc (self, _tmp17_);
4061 _g_free0 (_tmp17_);
4062 _tmp18_ = initializer;
4063 _tmp19_ = vala_expression_get_value_type (_tmp18_);
4064 _tmp20_ = _tmp19_;
4065 vala_gir_writer_write_type (self, _tmp20_, -1, VALA_PARAMETER_DIRECTION_IN);
4066 _tmp21_ = self->priv->indent;
4067 self->priv->indent = _tmp21_ - 1;
4068 vala_gir_writer_write_indent (self);
4069 _tmp22_ = self->priv->buffer;
4070 g_string_append_printf (_tmp22_, "</constant>\n");
4071 _g_free0 (value);
4072 _vala_code_node_unref0 (initializer);
4073 }
4074
4075 static void
vala_gir_writer_real_visit_field(ValaCodeVisitor * base,ValaField * f)4076 vala_gir_writer_real_visit_field (ValaCodeVisitor* base,
4077 ValaField* f)
4078 {
4079 ValaGIRWriter * self;
4080 gboolean _tmp0_;
4081 gboolean _tmp1_;
4082 GString* _tmp2_;
4083 gchar* _tmp3_;
4084 gchar* _tmp4_;
4085 ValaDataType* _tmp5_;
4086 ValaDataType* _tmp6_;
4087 gboolean _tmp7_;
4088 gboolean _tmp8_;
4089 GString* _tmp10_;
4090 gint _tmp11_;
4091 gchar* _tmp12_;
4092 gchar* _tmp13_;
4093 ValaDataType* _tmp14_;
4094 ValaDataType* _tmp15_;
4095 gint _tmp16_;
4096 GString* _tmp17_;
4097 gboolean _tmp18_ = FALSE;
4098 ValaDataType* _tmp19_;
4099 ValaDataType* _tmp20_;
4100 self = (ValaGIRWriter*) base;
4101 g_return_if_fail (f != NULL);
4102 _tmp0_ = vala_symbol_get_external_package ((ValaSymbol*) f);
4103 _tmp1_ = _tmp0_;
4104 if (_tmp1_) {
4105 return;
4106 }
4107 if (!vala_gir_writer_check_accessibility (self, (ValaSymbol*) f)) {
4108 return;
4109 }
4110 if (!vala_gir_writer_has_namespace (self, (ValaSymbol*) f)) {
4111 return;
4112 }
4113 vala_gir_writer_write_indent (self);
4114 _tmp2_ = self->priv->buffer;
4115 _tmp3_ = vala_get_ccode_name ((ValaCodeNode*) f);
4116 _tmp4_ = _tmp3_;
4117 g_string_append_printf (_tmp2_, "<field name=\"%s\"", _tmp4_);
4118 _g_free0 (_tmp4_);
4119 _tmp5_ = vala_variable_get_variable_type ((ValaVariable*) f);
4120 _tmp6_ = _tmp5_;
4121 _tmp7_ = vala_data_type_get_nullable (_tmp6_);
4122 _tmp8_ = _tmp7_;
4123 if (_tmp8_) {
4124 GString* _tmp9_;
4125 _tmp9_ = self->priv->buffer;
4126 g_string_append_printf (_tmp9_, " allow-none=\"1\"");
4127 }
4128 vala_gir_writer_write_symbol_attributes (self, (ValaSymbol*) f);
4129 _tmp10_ = self->priv->buffer;
4130 g_string_append_printf (_tmp10_, ">\n");
4131 _tmp11_ = self->priv->indent;
4132 self->priv->indent = _tmp11_ + 1;
4133 _tmp12_ = vala_gir_writer_get_field_comment (self, f);
4134 _tmp13_ = _tmp12_;
4135 vala_gir_writer_write_doc (self, _tmp13_);
4136 _g_free0 (_tmp13_);
4137 _tmp14_ = vala_variable_get_variable_type ((ValaVariable*) f);
4138 _tmp15_ = _tmp14_;
4139 vala_gir_writer_write_type (self, _tmp15_, -1, VALA_PARAMETER_DIRECTION_IN);
4140 _tmp16_ = self->priv->indent;
4141 self->priv->indent = _tmp16_ - 1;
4142 vala_gir_writer_write_indent (self);
4143 _tmp17_ = self->priv->buffer;
4144 g_string_append_printf (_tmp17_, "</field>\n");
4145 _tmp19_ = vala_variable_get_variable_type ((ValaVariable*) f);
4146 _tmp20_ = _tmp19_;
4147 if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp20_, VALA_TYPE_ARRAY_TYPE)) {
4148 _tmp18_ = vala_get_ccode_array_length ((ValaCodeNode*) f);
4149 } else {
4150 _tmp18_ = FALSE;
4151 }
4152 if (_tmp18_) {
4153 ValaArrayType* array_type = NULL;
4154 ValaDataType* _tmp21_;
4155 ValaDataType* _tmp22_;
4156 ValaArrayType* _tmp23_;
4157 ValaArrayType* _tmp24_;
4158 gboolean _tmp25_;
4159 gboolean _tmp26_;
4160 _tmp21_ = vala_variable_get_variable_type ((ValaVariable*) f);
4161 _tmp22_ = _tmp21_;
4162 _tmp23_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp22_, VALA_TYPE_ARRAY_TYPE, ValaArrayType));
4163 array_type = _tmp23_;
4164 _tmp24_ = array_type;
4165 _tmp25_ = vala_array_type_get_fixed_length (_tmp24_);
4166 _tmp26_ = _tmp25_;
4167 if (!_tmp26_) {
4168 {
4169 gint i = 0;
4170 i = 0;
4171 {
4172 gboolean _tmp27_ = FALSE;
4173 _tmp27_ = TRUE;
4174 while (TRUE) {
4175 ValaArrayType* _tmp29_;
4176 gint _tmp30_;
4177 gint _tmp31_;
4178 GString* _tmp32_;
4179 gchar* _tmp33_;
4180 gchar* _tmp34_;
4181 GString* _tmp35_;
4182 gint _tmp36_;
4183 ValaArrayType* _tmp37_;
4184 ValaDataType* _tmp38_;
4185 ValaDataType* _tmp39_;
4186 gint _tmp40_;
4187 GString* _tmp41_;
4188 if (!_tmp27_) {
4189 gint _tmp28_;
4190 _tmp28_ = i;
4191 i = _tmp28_ + 1;
4192 }
4193 _tmp27_ = FALSE;
4194 _tmp29_ = array_type;
4195 _tmp30_ = vala_array_type_get_rank (_tmp29_);
4196 _tmp31_ = _tmp30_;
4197 if (!(i < _tmp31_)) {
4198 break;
4199 }
4200 vala_gir_writer_write_indent (self);
4201 _tmp32_ = self->priv->buffer;
4202 _tmp33_ = vala_get_ccode_name ((ValaCodeNode*) f);
4203 _tmp34_ = _tmp33_;
4204 g_string_append_printf (_tmp32_, "<field name=\"%s_length%i\"", _tmp34_, i + 1);
4205 _g_free0 (_tmp34_);
4206 vala_gir_writer_write_symbol_attributes (self, (ValaSymbol*) f);
4207 _tmp35_ = self->priv->buffer;
4208 g_string_append_printf (_tmp35_, ">\n");
4209 _tmp36_ = self->priv->indent;
4210 self->priv->indent = _tmp36_ + 1;
4211 _tmp37_ = array_type;
4212 _tmp38_ = vala_array_type_get_length_type (_tmp37_);
4213 _tmp39_ = _tmp38_;
4214 vala_gir_writer_write_type (self, _tmp39_, -1, VALA_PARAMETER_DIRECTION_IN);
4215 _tmp40_ = self->priv->indent;
4216 self->priv->indent = _tmp40_ - 1;
4217 vala_gir_writer_write_indent (self);
4218 _tmp41_ = self->priv->buffer;
4219 g_string_append_printf (_tmp41_, "</field>\n");
4220 }
4221 }
4222 }
4223 }
4224 _vala_code_node_unref0 (array_type);
4225 } else {
4226 ValaDataType* _tmp42_;
4227 ValaDataType* _tmp43_;
4228 _tmp42_ = vala_variable_get_variable_type ((ValaVariable*) f);
4229 _tmp43_ = _tmp42_;
4230 if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp43_, VALA_TYPE_DELEGATE_TYPE)) {
4231 ValaDelegateType* deleg_type = NULL;
4232 ValaDataType* _tmp44_;
4233 ValaDataType* _tmp45_;
4234 ValaDelegateType* _tmp46_;
4235 ValaDelegateType* _tmp47_;
4236 ValaDelegate* _tmp48_;
4237 ValaDelegate* _tmp49_;
4238 gboolean _tmp50_;
4239 gboolean _tmp51_;
4240 _tmp44_ = vala_variable_get_variable_type ((ValaVariable*) f);
4241 _tmp45_ = _tmp44_;
4242 _tmp46_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp45_, VALA_TYPE_DELEGATE_TYPE, ValaDelegateType));
4243 deleg_type = _tmp46_;
4244 _tmp47_ = deleg_type;
4245 _tmp48_ = vala_delegate_type_get_delegate_symbol (_tmp47_);
4246 _tmp49_ = _tmp48_;
4247 _tmp50_ = vala_delegate_get_has_target (_tmp49_);
4248 _tmp51_ = _tmp50_;
4249 if (_tmp51_) {
4250 GString* _tmp52_;
4251 gchar* _tmp53_;
4252 gchar* _tmp54_;
4253 GString* _tmp55_;
4254 gint _tmp56_;
4255 GString* _tmp57_;
4256 gint _tmp58_;
4257 GString* _tmp59_;
4258 ValaDelegateType* _tmp60_;
4259 vala_gir_writer_write_indent (self);
4260 _tmp52_ = self->priv->buffer;
4261 _tmp53_ = vala_get_ccode_delegate_target_name ((ValaVariable*) f);
4262 _tmp54_ = _tmp53_;
4263 g_string_append_printf (_tmp52_, "<field name=\"%s\"", _tmp54_);
4264 _g_free0 (_tmp54_);
4265 vala_gir_writer_write_symbol_attributes (self, (ValaSymbol*) f);
4266 _tmp55_ = self->priv->buffer;
4267 g_string_append_printf (_tmp55_, ">\n");
4268 _tmp56_ = self->priv->indent;
4269 self->priv->indent = _tmp56_ + 1;
4270 vala_gir_writer_write_indent (self);
4271 _tmp57_ = self->priv->buffer;
4272 g_string_append_printf (_tmp57_, "<type name=\"gpointer\" c:type=\"gpointer\"/>\n");
4273 _tmp58_ = self->priv->indent;
4274 self->priv->indent = _tmp58_ - 1;
4275 vala_gir_writer_write_indent (self);
4276 _tmp59_ = self->priv->buffer;
4277 g_string_append_printf (_tmp59_, "</field>\n");
4278 _tmp60_ = deleg_type;
4279 if (vala_data_type_is_disposable ((ValaDataType*) _tmp60_)) {
4280 GString* _tmp61_;
4281 gchar* _tmp62_;
4282 gchar* _tmp63_;
4283 GString* _tmp64_;
4284 gint _tmp65_;
4285 GString* _tmp66_;
4286 gint _tmp67_;
4287 GString* _tmp68_;
4288 vala_gir_writer_write_indent (self);
4289 _tmp61_ = self->priv->buffer;
4290 _tmp62_ = vala_get_ccode_delegate_target_destroy_notify_name ((ValaVariable*) f);
4291 _tmp63_ = _tmp62_;
4292 g_string_append_printf (_tmp61_, "<field name=\"%s\"", _tmp63_);
4293 _g_free0 (_tmp63_);
4294 vala_gir_writer_write_symbol_attributes (self, (ValaSymbol*) f);
4295 _tmp64_ = self->priv->buffer;
4296 g_string_append_printf (_tmp64_, ">\n");
4297 _tmp65_ = self->priv->indent;
4298 self->priv->indent = _tmp65_ + 1;
4299 vala_gir_writer_write_indent (self);
4300 _tmp66_ = self->priv->buffer;
4301 g_string_append_printf (_tmp66_, "<type name=\"GLib.DestroyNotify\" c:type=\"GDestroyNotify\"/>\n");
4302 _tmp67_ = self->priv->indent;
4303 self->priv->indent = _tmp67_ - 1;
4304 vala_gir_writer_write_indent (self);
4305 _tmp68_ = self->priv->buffer;
4306 g_string_append_printf (_tmp68_, "</field>\n");
4307 }
4308 }
4309 _vala_code_node_unref0 (deleg_type);
4310 }
4311 }
4312 }
4313
4314 static void
vala_gir_writer_write_implicit_params(ValaGIRWriter * self,ValaDataType * type,gint * index,gboolean has_array_length,const gchar * name,ValaParameterDirection direction)4315 vala_gir_writer_write_implicit_params (ValaGIRWriter* self,
4316 ValaDataType* type,
4317 gint* index,
4318 gboolean has_array_length,
4319 const gchar* name,
4320 ValaParameterDirection direction)
4321 {
4322 gboolean _tmp0_ = FALSE;
4323 g_return_if_fail (self != NULL);
4324 if (G_TYPE_CHECK_INSTANCE_TYPE (type, VALA_TYPE_ARRAY_TYPE)) {
4325 _tmp0_ = has_array_length;
4326 } else {
4327 _tmp0_ = FALSE;
4328 }
4329 if (_tmp0_) {
4330 {
4331 gint i = 0;
4332 i = 0;
4333 {
4334 gboolean _tmp1_ = FALSE;
4335 _tmp1_ = TRUE;
4336 while (TRUE) {
4337 gint _tmp3_;
4338 gint _tmp4_;
4339 ValaDataType* _tmp5_;
4340 ValaDataType* _tmp6_;
4341 gchar* _tmp7_;
4342 gchar* _tmp8_;
4343 if (!_tmp1_) {
4344 gint _tmp2_;
4345 _tmp2_ = i;
4346 i = _tmp2_ + 1;
4347 }
4348 _tmp1_ = FALSE;
4349 _tmp3_ = vala_array_type_get_rank (G_TYPE_CHECK_INSTANCE_CAST (type, VALA_TYPE_ARRAY_TYPE, ValaArrayType));
4350 _tmp4_ = _tmp3_;
4351 if (!(i < _tmp4_)) {
4352 break;
4353 }
4354 _tmp5_ = vala_array_type_get_length_type (G_TYPE_CHECK_INSTANCE_CAST (type, VALA_TYPE_ARRAY_TYPE, ValaArrayType));
4355 _tmp6_ = _tmp5_;
4356 _tmp7_ = g_strdup_printf ("%s_length%i", name, i + 1);
4357 _tmp8_ = _tmp7_;
4358 vala_gir_writer_write_param_or_return (self, _tmp6_, "parameter", index, has_array_length, _tmp8_, NULL, direction, FALSE, FALSE, FALSE);
4359 _g_free0 (_tmp8_);
4360 }
4361 }
4362 }
4363 } else {
4364 if (G_TYPE_CHECK_INSTANCE_TYPE (type, VALA_TYPE_DELEGATE_TYPE)) {
4365 ValaDelegateType* deleg_type = NULL;
4366 ValaDelegateType* _tmp9_;
4367 ValaDelegateType* _tmp10_;
4368 ValaDelegate* _tmp11_;
4369 ValaDelegate* _tmp12_;
4370 gboolean _tmp13_;
4371 gboolean _tmp14_;
4372 _tmp9_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (type, VALA_TYPE_DELEGATE_TYPE, ValaDelegateType));
4373 deleg_type = _tmp9_;
4374 _tmp10_ = deleg_type;
4375 _tmp11_ = vala_delegate_type_get_delegate_symbol (_tmp10_);
4376 _tmp12_ = _tmp11_;
4377 _tmp13_ = vala_delegate_get_has_target (_tmp12_);
4378 _tmp14_ = _tmp13_;
4379 if (_tmp14_) {
4380 ValaPointerType* data_type = NULL;
4381 ValaVoidType* _tmp15_;
4382 ValaVoidType* _tmp16_;
4383 ValaPointerType* _tmp17_;
4384 ValaPointerType* _tmp18_;
4385 ValaPointerType* _tmp19_;
4386 gchar* _tmp20_;
4387 gchar* _tmp21_;
4388 ValaDelegateType* _tmp22_;
4389 _tmp15_ = vala_void_type_new (NULL);
4390 _tmp16_ = _tmp15_;
4391 _tmp17_ = vala_pointer_type_new ((ValaDataType*) _tmp16_, NULL);
4392 _tmp18_ = _tmp17_;
4393 _vala_code_node_unref0 (_tmp16_);
4394 data_type = _tmp18_;
4395 _tmp19_ = data_type;
4396 _tmp20_ = g_strdup_printf ("%s_target", name);
4397 _tmp21_ = _tmp20_;
4398 vala_gir_writer_write_param_or_return (self, (ValaDataType*) _tmp19_, "parameter", index, FALSE, _tmp21_, NULL, direction, FALSE, FALSE, FALSE);
4399 _g_free0 (_tmp21_);
4400 _tmp22_ = deleg_type;
4401 if (vala_data_type_is_disposable ((ValaDataType*) _tmp22_)) {
4402 ValaDelegateType* notify_type = NULL;
4403 ValaCodeContext* _tmp23_;
4404 ValaNamespace* _tmp24_;
4405 ValaNamespace* _tmp25_;
4406 ValaScope* _tmp26_;
4407 ValaScope* _tmp27_;
4408 ValaSymbol* _tmp28_;
4409 ValaSymbol* _tmp29_;
4410 ValaScope* _tmp30_;
4411 ValaScope* _tmp31_;
4412 ValaSymbol* _tmp32_;
4413 ValaDelegate* _tmp33_;
4414 ValaDelegate* _tmp34_;
4415 ValaDelegateType* _tmp35_;
4416 ValaDelegateType* _tmp36_;
4417 ValaDelegateType* _tmp37_;
4418 gchar* _tmp38_;
4419 gchar* _tmp39_;
4420 _tmp23_ = self->priv->context;
4421 _tmp24_ = vala_code_context_get_root (_tmp23_);
4422 _tmp25_ = _tmp24_;
4423 _tmp26_ = vala_symbol_get_scope ((ValaSymbol*) _tmp25_);
4424 _tmp27_ = _tmp26_;
4425 _tmp28_ = vala_scope_lookup (_tmp27_, "GLib");
4426 _tmp29_ = _tmp28_;
4427 _tmp30_ = vala_symbol_get_scope (_tmp29_);
4428 _tmp31_ = _tmp30_;
4429 _tmp32_ = vala_scope_lookup (_tmp31_, "DestroyNotify");
4430 _tmp33_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp32_, VALA_TYPE_DELEGATE) ? ((ValaDelegate*) _tmp32_) : NULL;
4431 if (_tmp33_ == NULL) {
4432 _vala_code_node_unref0 (_tmp32_);
4433 }
4434 _tmp34_ = _tmp33_;
4435 _tmp35_ = vala_delegate_type_new (_tmp34_);
4436 _tmp36_ = _tmp35_;
4437 _vala_code_node_unref0 (_tmp34_);
4438 _vala_code_node_unref0 (_tmp29_);
4439 notify_type = _tmp36_;
4440 _tmp37_ = notify_type;
4441 _tmp38_ = g_strdup_printf ("%s_target_destroy_notify", name);
4442 _tmp39_ = _tmp38_;
4443 vala_gir_writer_write_param_or_return (self, (ValaDataType*) _tmp37_, "parameter", index, FALSE, _tmp39_, NULL, direction, FALSE, FALSE, FALSE);
4444 _g_free0 (_tmp39_);
4445 _vala_code_node_unref0 (notify_type);
4446 }
4447 _vala_code_node_unref0 (data_type);
4448 }
4449 _vala_code_node_unref0 (deleg_type);
4450 }
4451 }
4452 }
4453
4454 static void
vala_gir_writer_skip_implicit_params(ValaGIRWriter * self,ValaDataType * type,gint * index,gboolean has_array_length)4455 vala_gir_writer_skip_implicit_params (ValaGIRWriter* self,
4456 ValaDataType* type,
4457 gint* index,
4458 gboolean has_array_length)
4459 {
4460 gboolean _tmp0_ = FALSE;
4461 g_return_if_fail (self != NULL);
4462 if (G_TYPE_CHECK_INSTANCE_TYPE (type, VALA_TYPE_ARRAY_TYPE)) {
4463 _tmp0_ = has_array_length;
4464 } else {
4465 _tmp0_ = FALSE;
4466 }
4467 if (_tmp0_) {
4468 gint _tmp1_;
4469 gint _tmp2_;
4470 _tmp1_ = vala_array_type_get_rank (G_TYPE_CHECK_INSTANCE_CAST (type, VALA_TYPE_ARRAY_TYPE, ValaArrayType));
4471 _tmp2_ = _tmp1_;
4472 *index = (*index) + _tmp2_;
4473 } else {
4474 if (G_TYPE_CHECK_INSTANCE_TYPE (type, VALA_TYPE_DELEGATE_TYPE)) {
4475 gint _tmp3_;
4476 ValaDelegateType* deleg_type = NULL;
4477 ValaDelegateType* _tmp4_;
4478 ValaDelegateType* _tmp5_;
4479 _tmp3_ = *index;
4480 *index = _tmp3_ + 1;
4481 _tmp4_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (type, VALA_TYPE_DELEGATE_TYPE, ValaDelegateType));
4482 deleg_type = _tmp4_;
4483 _tmp5_ = deleg_type;
4484 if (vala_data_type_is_disposable ((ValaDataType*) _tmp5_)) {
4485 gint _tmp6_;
4486 _tmp6_ = *index;
4487 *index = _tmp6_ + 1;
4488 }
4489 _vala_code_node_unref0 (deleg_type);
4490 }
4491 }
4492 }
4493
4494 static void
vala_gir_writer_write_type_parameter(ValaGIRWriter * self,ValaTypeParameter * type_parameter,const gchar * tag_type)4495 vala_gir_writer_write_type_parameter (ValaGIRWriter* self,
4496 ValaTypeParameter* type_parameter,
4497 const gchar* tag_type)
4498 {
4499 gint _tmp10_;
4500 GString* _tmp11_;
4501 gint _tmp12_;
4502 GString* _tmp13_;
4503 gint _tmp24_;
4504 GString* _tmp25_;
4505 gint _tmp26_;
4506 GString* _tmp27_;
4507 gint _tmp38_;
4508 GString* _tmp39_;
4509 gint _tmp40_;
4510 GString* _tmp41_;
4511 g_return_if_fail (self != NULL);
4512 g_return_if_fail (type_parameter != NULL);
4513 g_return_if_fail (tag_type != NULL);
4514 vala_gir_writer_write_indent (self);
4515 if (g_strcmp0 (tag_type, "property") == 0) {
4516 GString* _tmp0_;
4517 const gchar* _tmp1_;
4518 const gchar* _tmp2_;
4519 gchar* _tmp3_;
4520 gchar* _tmp4_;
4521 _tmp0_ = self->priv->buffer;
4522 _tmp1_ = vala_symbol_get_name ((ValaSymbol*) type_parameter);
4523 _tmp2_ = _tmp1_;
4524 _tmp3_ = g_ascii_strdown (_tmp2_, (gssize) -1);
4525 _tmp4_ = _tmp3_;
4526 g_string_append_printf (_tmp0_, "<%s name=\"%s-type\" writable=\"1\" construct-only=\"1\">\n", tag_type, _tmp4_);
4527 _g_free0 (_tmp4_);
4528 } else {
4529 GString* _tmp5_;
4530 const gchar* _tmp6_;
4531 const gchar* _tmp7_;
4532 gchar* _tmp8_;
4533 gchar* _tmp9_;
4534 _tmp5_ = self->priv->buffer;
4535 _tmp6_ = vala_symbol_get_name ((ValaSymbol*) type_parameter);
4536 _tmp7_ = _tmp6_;
4537 _tmp8_ = g_ascii_strdown (_tmp7_, (gssize) -1);
4538 _tmp9_ = _tmp8_;
4539 g_string_append_printf (_tmp5_, "<%s name=\"%s_type\" transfer-ownership=\"none\">\n", tag_type, _tmp9_);
4540 _g_free0 (_tmp9_);
4541 }
4542 _tmp10_ = self->priv->indent;
4543 self->priv->indent = _tmp10_ + 1;
4544 vala_gir_writer_write_indent (self);
4545 _tmp11_ = self->priv->buffer;
4546 g_string_append_printf (_tmp11_, "<type name=\"GType\" c:type=\"GType\"/>\n");
4547 _tmp12_ = self->priv->indent;
4548 self->priv->indent = _tmp12_ - 1;
4549 vala_gir_writer_write_indent (self);
4550 _tmp13_ = self->priv->buffer;
4551 g_string_append_printf (_tmp13_, "</%s>\n", tag_type);
4552 vala_gir_writer_write_indent (self);
4553 if (g_strcmp0 (tag_type, "property") == 0) {
4554 GString* _tmp14_;
4555 const gchar* _tmp15_;
4556 const gchar* _tmp16_;
4557 gchar* _tmp17_;
4558 gchar* _tmp18_;
4559 _tmp14_ = self->priv->buffer;
4560 _tmp15_ = vala_symbol_get_name ((ValaSymbol*) type_parameter);
4561 _tmp16_ = _tmp15_;
4562 _tmp17_ = g_ascii_strdown (_tmp16_, (gssize) -1);
4563 _tmp18_ = _tmp17_;
4564 g_string_append_printf (_tmp14_, "<%s name=\"%s-dup-func\" writable=\"1\" construct-only=\"1\">\n", tag_type, _tmp18_);
4565 _g_free0 (_tmp18_);
4566 } else {
4567 GString* _tmp19_;
4568 const gchar* _tmp20_;
4569 const gchar* _tmp21_;
4570 gchar* _tmp22_;
4571 gchar* _tmp23_;
4572 _tmp19_ = self->priv->buffer;
4573 _tmp20_ = vala_symbol_get_name ((ValaSymbol*) type_parameter);
4574 _tmp21_ = _tmp20_;
4575 _tmp22_ = g_ascii_strdown (_tmp21_, (gssize) -1);
4576 _tmp23_ = _tmp22_;
4577 g_string_append_printf (_tmp19_, "<%s name=\"%s_dup_func\" transfer-ownership=\"none\">\n", tag_type, _tmp23_);
4578 _g_free0 (_tmp23_);
4579 }
4580 _tmp24_ = self->priv->indent;
4581 self->priv->indent = _tmp24_ + 1;
4582 vala_gir_writer_write_indent (self);
4583 _tmp25_ = self->priv->buffer;
4584 g_string_append_printf (_tmp25_, "<type name=\"GObject.BoxedCopyFunc\" c:type=\"GBoxedCopyFunc\"/>\n");
4585 _tmp26_ = self->priv->indent;
4586 self->priv->indent = _tmp26_ - 1;
4587 vala_gir_writer_write_indent (self);
4588 _tmp27_ = self->priv->buffer;
4589 g_string_append_printf (_tmp27_, "</%s>\n", tag_type);
4590 vala_gir_writer_write_indent (self);
4591 if (g_strcmp0 (tag_type, "property") == 0) {
4592 GString* _tmp28_;
4593 const gchar* _tmp29_;
4594 const gchar* _tmp30_;
4595 gchar* _tmp31_;
4596 gchar* _tmp32_;
4597 _tmp28_ = self->priv->buffer;
4598 _tmp29_ = vala_symbol_get_name ((ValaSymbol*) type_parameter);
4599 _tmp30_ = _tmp29_;
4600 _tmp31_ = g_ascii_strdown (_tmp30_, (gssize) -1);
4601 _tmp32_ = _tmp31_;
4602 g_string_append_printf (_tmp28_, "<%s name=\"%s-destroy-func\" writable=\"1\" construct-only=\"1\">\n", tag_type, _tmp32_);
4603 _g_free0 (_tmp32_);
4604 } else {
4605 GString* _tmp33_;
4606 const gchar* _tmp34_;
4607 const gchar* _tmp35_;
4608 gchar* _tmp36_;
4609 gchar* _tmp37_;
4610 _tmp33_ = self->priv->buffer;
4611 _tmp34_ = vala_symbol_get_name ((ValaSymbol*) type_parameter);
4612 _tmp35_ = _tmp34_;
4613 _tmp36_ = g_ascii_strdown (_tmp35_, (gssize) -1);
4614 _tmp37_ = _tmp36_;
4615 g_string_append_printf (_tmp33_, "<%s name=\"%s_destroy_func\" transfer-ownership=\"none\">\n", tag_type, _tmp37_);
4616 _g_free0 (_tmp37_);
4617 }
4618 _tmp38_ = self->priv->indent;
4619 self->priv->indent = _tmp38_ + 1;
4620 vala_gir_writer_write_indent (self);
4621 _tmp39_ = self->priv->buffer;
4622 g_string_append_printf (_tmp39_, "<type name=\"GLib.DestroyNotify\" c:type=\"GDestroyNotify\"/>\n");
4623 _tmp40_ = self->priv->indent;
4624 self->priv->indent = _tmp40_ - 1;
4625 vala_gir_writer_write_indent (self);
4626 _tmp41_ = self->priv->buffer;
4627 g_string_append_printf (_tmp41_, "</%s>\n", tag_type);
4628 }
4629
4630 static void
vala_gir_writer_write_params_and_return(ValaGIRWriter * self,const gchar * tag_name,ValaList * params,ValaList * type_params,ValaDataType * return_type,gboolean return_array_length,const gchar * return_comment,gboolean constructor,ValaParameter * instance_param,gboolean user_data)4631 vala_gir_writer_write_params_and_return (ValaGIRWriter* self,
4632 const gchar* tag_name,
4633 ValaList* params,
4634 ValaList* type_params,
4635 ValaDataType* return_type,
4636 gboolean return_array_length,
4637 const gchar* return_comment,
4638 gboolean constructor,
4639 ValaParameter* instance_param,
4640 gboolean user_data)
4641 {
4642 gint last_index = 0;
4643 gboolean _tmp0_ = FALSE;
4644 gboolean ret_is_struct = FALSE;
4645 gboolean _tmp1_ = FALSE;
4646 gboolean _tmp2_ = FALSE;
4647 gboolean _tmp3_ = FALSE;
4648 gint _tmp4_;
4649 gint _tmp5_;
4650 gboolean _tmp24_ = FALSE;
4651 gboolean _tmp27_ = FALSE;
4652 gboolean _tmp28_ = FALSE;
4653 gboolean _tmp29_ = FALSE;
4654 gboolean _tmp30_ = FALSE;
4655 gboolean _tmp31_ = FALSE;
4656 gint _tmp32_;
4657 gint _tmp33_;
4658 g_return_if_fail (self != NULL);
4659 g_return_if_fail (tag_name != NULL);
4660 g_return_if_fail (params != NULL);
4661 last_index = 0;
4662 if (return_type != NULL) {
4663 _tmp0_ = vala_data_type_is_real_non_null_struct_type (return_type);
4664 } else {
4665 _tmp0_ = FALSE;
4666 }
4667 ret_is_struct = _tmp0_;
4668 _tmp4_ = vala_collection_get_size ((ValaCollection*) params);
4669 _tmp5_ = _tmp4_;
4670 if (_tmp5_ != 0) {
4671 _tmp3_ = TRUE;
4672 } else {
4673 gboolean _tmp6_ = FALSE;
4674 if (G_TYPE_CHECK_INSTANCE_TYPE (return_type, VALA_TYPE_ARRAY_TYPE)) {
4675 _tmp6_ = return_array_length;
4676 } else {
4677 _tmp6_ = FALSE;
4678 }
4679 _tmp3_ = _tmp6_;
4680 }
4681 if (_tmp3_) {
4682 _tmp2_ = TRUE;
4683 } else {
4684 _tmp2_ = G_TYPE_CHECK_INSTANCE_TYPE (return_type, VALA_TYPE_DELEGATE_TYPE);
4685 }
4686 if (_tmp2_) {
4687 _tmp1_ = TRUE;
4688 } else {
4689 _tmp1_ = ret_is_struct;
4690 }
4691 if (_tmp1_) {
4692 gint index = 0;
4693 index = 0;
4694 {
4695 ValaList* _param_list = NULL;
4696 ValaList* _tmp7_;
4697 gint _param_size = 0;
4698 ValaList* _tmp8_;
4699 gint _tmp9_;
4700 gint _tmp10_;
4701 gint _param_index = 0;
4702 _tmp7_ = _vala_iterable_ref0 (params);
4703 _param_list = _tmp7_;
4704 _tmp8_ = _param_list;
4705 _tmp9_ = vala_collection_get_size ((ValaCollection*) _tmp8_);
4706 _tmp10_ = _tmp9_;
4707 _param_size = _tmp10_;
4708 _param_index = -1;
4709 while (TRUE) {
4710 gint _tmp11_;
4711 gint _tmp12_;
4712 ValaParameter* param = NULL;
4713 ValaList* _tmp13_;
4714 gpointer _tmp14_;
4715 gint _tmp15_;
4716 ValaParameter* _tmp16_;
4717 ValaDataType* _tmp17_;
4718 ValaDataType* _tmp18_;
4719 ValaParameter* _tmp19_;
4720 _param_index = _param_index + 1;
4721 _tmp11_ = _param_index;
4722 _tmp12_ = _param_size;
4723 if (!(_tmp11_ < _tmp12_)) {
4724 break;
4725 }
4726 _tmp13_ = _param_list;
4727 _tmp14_ = vala_list_get (_tmp13_, _param_index);
4728 param = (ValaParameter*) _tmp14_;
4729 _tmp15_ = index;
4730 index = _tmp15_ + 1;
4731 _tmp16_ = param;
4732 _tmp17_ = vala_variable_get_variable_type ((ValaVariable*) _tmp16_);
4733 _tmp18_ = _tmp17_;
4734 _tmp19_ = param;
4735 vala_gir_writer_skip_implicit_params (self, _tmp18_, &index, vala_get_ccode_array_length ((ValaCodeNode*) _tmp19_));
4736 _vala_code_node_unref0 (param);
4737 }
4738 _vala_iterable_unref0 (_param_list);
4739 }
4740 if (ret_is_struct) {
4741 gint _tmp20_;
4742 _tmp20_ = index;
4743 index = _tmp20_ + 1;
4744 } else {
4745 gboolean _tmp21_ = FALSE;
4746 vala_gir_writer_skip_implicit_params (self, return_type, &index, return_array_length);
4747 if (G_TYPE_CHECK_INSTANCE_TYPE (return_type, VALA_TYPE_ARRAY_TYPE)) {
4748 _tmp21_ = return_array_length;
4749 } else {
4750 _tmp21_ = FALSE;
4751 }
4752 if (_tmp21_) {
4753 gint _tmp22_;
4754 gint _tmp23_;
4755 _tmp22_ = vala_array_type_get_rank (G_TYPE_CHECK_INSTANCE_CAST (return_type, VALA_TYPE_ARRAY_TYPE, ValaArrayType));
4756 _tmp23_ = _tmp22_;
4757 index -= _tmp23_ - 1;
4758 }
4759 }
4760 last_index = index - 1;
4761 }
4762 if (return_type != NULL) {
4763 _tmp24_ = !ret_is_struct;
4764 } else {
4765 _tmp24_ = FALSE;
4766 }
4767 if (_tmp24_) {
4768 vala_gir_writer_write_param_or_return (self, return_type, "return-value", &last_index, return_array_length, NULL, return_comment, VALA_PARAMETER_DIRECTION_IN, constructor, FALSE, FALSE);
4769 } else {
4770 if (ret_is_struct) {
4771 ValaVoidType* _tmp25_;
4772 ValaVoidType* _tmp26_;
4773 _tmp25_ = vala_void_type_new (NULL);
4774 _tmp26_ = _tmp25_;
4775 vala_gir_writer_write_param_or_return (self, (ValaDataType*) _tmp26_, "return-value", &last_index, FALSE, NULL, return_comment, VALA_PARAMETER_DIRECTION_IN, FALSE, FALSE, FALSE);
4776 _vala_code_node_unref0 (_tmp26_);
4777 }
4778 }
4779 _tmp32_ = vala_collection_get_size ((ValaCollection*) params);
4780 _tmp33_ = _tmp32_;
4781 if (_tmp33_ != 0) {
4782 _tmp31_ = TRUE;
4783 } else {
4784 gboolean _tmp34_ = FALSE;
4785 if (type_params != NULL) {
4786 gint _tmp35_;
4787 gint _tmp36_;
4788 _tmp35_ = vala_collection_get_size ((ValaCollection*) type_params);
4789 _tmp36_ = _tmp35_;
4790 _tmp34_ = _tmp36_ > 0;
4791 } else {
4792 _tmp34_ = FALSE;
4793 }
4794 _tmp31_ = _tmp34_;
4795 }
4796 if (_tmp31_) {
4797 _tmp30_ = TRUE;
4798 } else {
4799 _tmp30_ = instance_param != NULL;
4800 }
4801 if (_tmp30_) {
4802 _tmp29_ = TRUE;
4803 } else {
4804 gboolean _tmp37_ = FALSE;
4805 if (G_TYPE_CHECK_INSTANCE_TYPE (return_type, VALA_TYPE_ARRAY_TYPE)) {
4806 _tmp37_ = return_array_length;
4807 } else {
4808 _tmp37_ = FALSE;
4809 }
4810 _tmp29_ = _tmp37_;
4811 }
4812 if (_tmp29_) {
4813 _tmp28_ = TRUE;
4814 } else {
4815 _tmp28_ = G_TYPE_CHECK_INSTANCE_TYPE (return_type, VALA_TYPE_DELEGATE_TYPE);
4816 }
4817 if (_tmp28_) {
4818 _tmp27_ = TRUE;
4819 } else {
4820 _tmp27_ = ret_is_struct;
4821 }
4822 if (_tmp27_) {
4823 GString* _tmp38_;
4824 gint _tmp39_;
4825 gint index = 0;
4826 gint _tmp105_;
4827 GString* _tmp106_;
4828 vala_gir_writer_write_indent (self);
4829 _tmp38_ = self->priv->buffer;
4830 g_string_append_printf (_tmp38_, "<parameters>\n");
4831 _tmp39_ = self->priv->indent;
4832 self->priv->indent = _tmp39_ + 1;
4833 index = 0;
4834 if (instance_param != NULL) {
4835 ValaDataType* type = NULL;
4836 ValaDataType* _tmp40_;
4837 ValaDataType* _tmp41_;
4838 ValaDataType* _tmp42_;
4839 ValaStruct* st = NULL;
4840 ValaDataType* _tmp43_;
4841 ValaTypeSymbol* _tmp44_;
4842 ValaTypeSymbol* _tmp45_;
4843 gboolean _tmp46_ = FALSE;
4844 ValaStruct* _tmp47_;
4845 gint skip = 0;
4846 _tmp40_ = vala_variable_get_variable_type ((ValaVariable*) instance_param);
4847 _tmp41_ = _tmp40_;
4848 _tmp42_ = vala_data_type_copy (_tmp41_);
4849 type = _tmp42_;
4850 _tmp43_ = type;
4851 _tmp44_ = vala_data_type_get_type_symbol (_tmp43_);
4852 _tmp45_ = _tmp44_;
4853 st = G_TYPE_CHECK_INSTANCE_TYPE (_tmp45_, VALA_TYPE_STRUCT) ? ((ValaStruct*) _tmp45_) : NULL;
4854 _tmp47_ = st;
4855 if (_tmp47_ != NULL) {
4856 ValaStruct* _tmp48_;
4857 _tmp48_ = st;
4858 _tmp46_ = !vala_struct_is_simple_type (_tmp48_);
4859 } else {
4860 _tmp46_ = FALSE;
4861 }
4862 if (_tmp46_) {
4863 ValaDataType* _tmp49_;
4864 _tmp49_ = type;
4865 vala_data_type_set_nullable (_tmp49_, TRUE);
4866 }
4867 skip = 0;
4868 if (g_strcmp0 (tag_name, "callback") == 0) {
4869 ValaDataType* _tmp50_;
4870 gint _tmp51_;
4871 _tmp50_ = type;
4872 vala_gir_writer_write_param_or_return (self, _tmp50_, "parameter", &skip, FALSE, "self", NULL, VALA_PARAMETER_DIRECTION_IN, FALSE, FALSE, FALSE);
4873 _tmp51_ = index;
4874 index = _tmp51_ + 1;
4875 } else {
4876 ValaDataType* _tmp52_;
4877 _tmp52_ = type;
4878 vala_gir_writer_write_param_or_return (self, _tmp52_, "instance-parameter", &skip, FALSE, "self", NULL, VALA_PARAMETER_DIRECTION_IN, FALSE, FALSE, FALSE);
4879 }
4880 _vala_code_node_unref0 (type);
4881 }
4882 if (type_params != NULL) {
4883 {
4884 ValaList* _p_list = NULL;
4885 ValaList* _tmp53_;
4886 gint _p_size = 0;
4887 ValaList* _tmp54_;
4888 gint _tmp55_;
4889 gint _tmp56_;
4890 gint _p_index = 0;
4891 _tmp53_ = _vala_iterable_ref0 (type_params);
4892 _p_list = _tmp53_;
4893 _tmp54_ = _p_list;
4894 _tmp55_ = vala_collection_get_size ((ValaCollection*) _tmp54_);
4895 _tmp56_ = _tmp55_;
4896 _p_size = _tmp56_;
4897 _p_index = -1;
4898 while (TRUE) {
4899 gint _tmp57_;
4900 gint _tmp58_;
4901 ValaTypeParameter* p = NULL;
4902 ValaList* _tmp59_;
4903 gpointer _tmp60_;
4904 ValaTypeParameter* _tmp61_;
4905 _p_index = _p_index + 1;
4906 _tmp57_ = _p_index;
4907 _tmp58_ = _p_size;
4908 if (!(_tmp57_ < _tmp58_)) {
4909 break;
4910 }
4911 _tmp59_ = _p_list;
4912 _tmp60_ = vala_list_get (_tmp59_, _p_index);
4913 p = (ValaTypeParameter*) _tmp60_;
4914 _tmp61_ = p;
4915 vala_gir_writer_write_type_parameter (self, _tmp61_, "parameter");
4916 index += 3;
4917 _vala_code_node_unref0 (p);
4918 }
4919 _vala_iterable_unref0 (_p_list);
4920 }
4921 }
4922 {
4923 ValaList* _param_list = NULL;
4924 ValaList* _tmp62_;
4925 gint _param_size = 0;
4926 ValaList* _tmp63_;
4927 gint _tmp64_;
4928 gint _tmp65_;
4929 gint _param_index = 0;
4930 _tmp62_ = _vala_iterable_ref0 (params);
4931 _param_list = _tmp62_;
4932 _tmp63_ = _param_list;
4933 _tmp64_ = vala_collection_get_size ((ValaCollection*) _tmp63_);
4934 _tmp65_ = _tmp64_;
4935 _param_size = _tmp65_;
4936 _param_index = -1;
4937 while (TRUE) {
4938 gint _tmp66_;
4939 gint _tmp67_;
4940 ValaParameter* param = NULL;
4941 ValaList* _tmp68_;
4942 gpointer _tmp69_;
4943 gboolean _tmp70_ = FALSE;
4944 ValaParameter* _tmp71_;
4945 gboolean _tmp72_;
4946 gboolean _tmp73_;
4947 ValaParameter* _tmp77_;
4948 ValaDataType* _tmp78_;
4949 ValaDataType* _tmp79_;
4950 ValaParameter* _tmp80_;
4951 ValaParameter* _tmp81_;
4952 gchar* _tmp82_;
4953 gchar* _tmp83_;
4954 ValaParameter* _tmp84_;
4955 gchar* _tmp85_;
4956 gchar* _tmp86_;
4957 ValaParameter* _tmp87_;
4958 ValaParameterDirection _tmp88_;
4959 ValaParameterDirection _tmp89_;
4960 ValaParameter* _tmp90_;
4961 ValaDataType* _tmp91_;
4962 ValaDataType* _tmp92_;
4963 ValaParameter* _tmp93_;
4964 ValaParameter* _tmp94_;
4965 gchar* _tmp95_;
4966 gchar* _tmp96_;
4967 ValaParameter* _tmp97_;
4968 ValaParameterDirection _tmp98_;
4969 ValaParameterDirection _tmp99_;
4970 _param_index = _param_index + 1;
4971 _tmp66_ = _param_index;
4972 _tmp67_ = _param_size;
4973 if (!(_tmp66_ < _tmp67_)) {
4974 break;
4975 }
4976 _tmp68_ = _param_list;
4977 _tmp69_ = vala_list_get (_tmp68_, _param_index);
4978 param = (ValaParameter*) _tmp69_;
4979 _tmp71_ = param;
4980 _tmp72_ = vala_parameter_get_ellipsis (_tmp71_);
4981 _tmp73_ = _tmp72_;
4982 if (_tmp73_) {
4983 _tmp70_ = TRUE;
4984 } else {
4985 ValaParameter* _tmp74_;
4986 gboolean _tmp75_;
4987 gboolean _tmp76_;
4988 _tmp74_ = param;
4989 _tmp75_ = vala_parameter_get_params_array (_tmp74_);
4990 _tmp76_ = _tmp75_;
4991 _tmp70_ = _tmp76_;
4992 }
4993 _tmp77_ = param;
4994 _tmp78_ = vala_variable_get_variable_type ((ValaVariable*) _tmp77_);
4995 _tmp79_ = _tmp78_;
4996 _tmp80_ = param;
4997 _tmp81_ = param;
4998 _tmp82_ = vala_get_ccode_name ((ValaCodeNode*) _tmp81_);
4999 _tmp83_ = _tmp82_;
5000 _tmp84_ = param;
5001 _tmp85_ = vala_gir_writer_get_parameter_comment (self, _tmp84_);
5002 _tmp86_ = _tmp85_;
5003 _tmp87_ = param;
5004 _tmp88_ = vala_parameter_get_direction (_tmp87_);
5005 _tmp89_ = _tmp88_;
5006 vala_gir_writer_write_param_or_return (self, _tmp79_, "parameter", &index, vala_get_ccode_array_length ((ValaCodeNode*) _tmp80_), _tmp83_, _tmp86_, _tmp89_, FALSE, FALSE, _tmp70_);
5007 _g_free0 (_tmp86_);
5008 _g_free0 (_tmp83_);
5009 _tmp90_ = param;
5010 _tmp91_ = vala_variable_get_variable_type ((ValaVariable*) _tmp90_);
5011 _tmp92_ = _tmp91_;
5012 _tmp93_ = param;
5013 _tmp94_ = param;
5014 _tmp95_ = vala_get_ccode_name ((ValaCodeNode*) _tmp94_);
5015 _tmp96_ = _tmp95_;
5016 _tmp97_ = param;
5017 _tmp98_ = vala_parameter_get_direction (_tmp97_);
5018 _tmp99_ = _tmp98_;
5019 vala_gir_writer_write_implicit_params (self, _tmp92_, &index, vala_get_ccode_array_length ((ValaCodeNode*) _tmp93_), _tmp96_, _tmp99_);
5020 _g_free0 (_tmp96_);
5021 _vala_code_node_unref0 (param);
5022 }
5023 _vala_iterable_unref0 (_param_list);
5024 }
5025 if (ret_is_struct) {
5026 vala_gir_writer_write_param_or_return (self, return_type, "parameter", &index, FALSE, "result", return_comment, VALA_PARAMETER_DIRECTION_OUT, constructor, TRUE, FALSE);
5027 } else {
5028 vala_gir_writer_write_implicit_params (self, return_type, &index, return_array_length, "result", VALA_PARAMETER_DIRECTION_OUT);
5029 }
5030 if (user_data) {
5031 GString* _tmp100_;
5032 gint _tmp101_;
5033 GString* _tmp102_;
5034 gint _tmp103_;
5035 GString* _tmp104_;
5036 vala_gir_writer_write_indent (self);
5037 _tmp100_ = self->priv->buffer;
5038 g_string_append_printf (_tmp100_, "<parameter name=\"user_data\" transfer-ownership=\"none\" closure=\"%d" \
5039 "\">\n", index);
5040 _tmp101_ = self->priv->indent;
5041 self->priv->indent = _tmp101_ + 1;
5042 vala_gir_writer_write_indent (self);
5043 _tmp102_ = self->priv->buffer;
5044 g_string_append_printf (_tmp102_, "<type name=\"gpointer\" c:type=\"void*\"/>\n");
5045 _tmp103_ = self->priv->indent;
5046 self->priv->indent = _tmp103_ - 1;
5047 vala_gir_writer_write_indent (self);
5048 _tmp104_ = self->priv->buffer;
5049 g_string_append_printf (_tmp104_, "</parameter>\n");
5050 }
5051 _tmp105_ = self->priv->indent;
5052 self->priv->indent = _tmp105_ - 1;
5053 vala_gir_writer_write_indent (self);
5054 _tmp106_ = self->priv->buffer;
5055 g_string_append_printf (_tmp106_, "</parameters>\n");
5056 }
5057 }
5058
5059 static void
vala_gir_writer_real_visit_delegate(ValaCodeVisitor * base,ValaDelegate * cb)5060 vala_gir_writer_real_visit_delegate (ValaCodeVisitor* base,
5061 ValaDelegate* cb)
5062 {
5063 ValaGIRWriter * self;
5064 gboolean _tmp0_;
5065 gboolean _tmp1_;
5066 GString* _tmp2_;
5067 const gchar* _tmp3_;
5068 const gchar* _tmp4_;
5069 GString* _tmp5_;
5070 gchar* _tmp6_;
5071 gchar* _tmp7_;
5072 gboolean _tmp8_;
5073 gboolean _tmp9_;
5074 GString* _tmp11_;
5075 gint _tmp12_;
5076 gchar* _tmp13_;
5077 gchar* _tmp14_;
5078 ValaList* _tmp15_;
5079 ValaList* _tmp16_;
5080 ValaDataType* _tmp17_;
5081 ValaDataType* _tmp18_;
5082 gchar* _tmp19_;
5083 gchar* _tmp20_;
5084 gboolean _tmp21_;
5085 gboolean _tmp22_;
5086 gint _tmp23_;
5087 GString* _tmp24_;
5088 self = (ValaGIRWriter*) base;
5089 g_return_if_fail (cb != NULL);
5090 _tmp0_ = vala_symbol_get_external_package ((ValaSymbol*) cb);
5091 _tmp1_ = _tmp0_;
5092 if (_tmp1_) {
5093 return;
5094 }
5095 if (!vala_gir_writer_check_accessibility (self, (ValaSymbol*) cb)) {
5096 return;
5097 }
5098 if (!vala_gir_writer_has_namespace (self, (ValaSymbol*) cb)) {
5099 return;
5100 }
5101 vala_gir_writer_write_indent (self);
5102 _tmp2_ = self->priv->buffer;
5103 _tmp3_ = vala_symbol_get_name ((ValaSymbol*) cb);
5104 _tmp4_ = _tmp3_;
5105 g_string_append_printf (_tmp2_, "<callback name=\"%s\"", _tmp4_);
5106 _tmp5_ = self->priv->buffer;
5107 _tmp6_ = vala_get_ccode_name ((ValaCodeNode*) cb);
5108 _tmp7_ = _tmp6_;
5109 g_string_append_printf (_tmp5_, " c:type=\"%s\"", _tmp7_);
5110 _g_free0 (_tmp7_);
5111 _tmp8_ = vala_code_node_get_tree_can_fail ((ValaCodeNode*) cb);
5112 _tmp9_ = _tmp8_;
5113 if (_tmp9_) {
5114 GString* _tmp10_;
5115 _tmp10_ = self->priv->buffer;
5116 g_string_append_printf (_tmp10_, " throws=\"1\"");
5117 }
5118 vala_gir_writer_write_symbol_attributes (self, (ValaSymbol*) cb);
5119 _tmp11_ = self->priv->buffer;
5120 g_string_append_printf (_tmp11_, ">\n");
5121 _tmp12_ = self->priv->indent;
5122 self->priv->indent = _tmp12_ + 1;
5123 _tmp13_ = vala_gir_writer_get_delegate_comment (self, cb);
5124 _tmp14_ = _tmp13_;
5125 vala_gir_writer_write_doc (self, _tmp14_);
5126 _g_free0 (_tmp14_);
5127 _tmp15_ = vala_callable_get_parameters ((ValaCallable*) cb);
5128 _tmp16_ = vala_delegate_get_type_parameters (cb);
5129 _tmp17_ = vala_callable_get_return_type ((ValaCallable*) cb);
5130 _tmp18_ = _tmp17_;
5131 _tmp19_ = vala_gir_writer_get_delegate_return_comment (self, cb);
5132 _tmp20_ = _tmp19_;
5133 _tmp21_ = vala_delegate_get_has_target (cb);
5134 _tmp22_ = _tmp21_;
5135 vala_gir_writer_write_params_and_return (self, "callback", _tmp15_, _tmp16_, _tmp18_, vala_get_ccode_array_length ((ValaCodeNode*) cb), _tmp20_, FALSE, NULL, _tmp22_);
5136 _g_free0 (_tmp20_);
5137 _tmp23_ = self->priv->indent;
5138 self->priv->indent = _tmp23_ - 1;
5139 vala_gir_writer_write_indent (self);
5140 _tmp24_ = self->priv->buffer;
5141 g_string_append_printf (_tmp24_, "</callback>\n");
5142 }
5143
5144 static void
vala_gir_writer_real_visit_method(ValaCodeVisitor * base,ValaMethod * m)5145 vala_gir_writer_real_visit_method (ValaCodeVisitor* base,
5146 ValaMethod* m)
5147 {
5148 ValaGIRWriter * self;
5149 gboolean _tmp0_;
5150 gboolean _tmp1_;
5151 gboolean _tmp2_ = FALSE;
5152 gboolean _tmp3_ = FALSE;
5153 gchar* tag_name = NULL;
5154 gchar* _tmp14_;
5155 ValaSymbol* parent = NULL;
5156 ValaArrayList* _tmp15_;
5157 gpointer _tmp16_;
5158 ValaSymbol* _tmp17_;
5159 gboolean _tmp19_ = FALSE;
5160 gboolean _tmp20_ = FALSE;
5161 ValaSymbol* _tmp21_;
5162 gboolean _tmp28_ = FALSE;
5163 gboolean _tmp32_ = FALSE;
5164 gboolean _tmp33_;
5165 gboolean _tmp34_;
5166 self = (ValaGIRWriter*) base;
5167 g_return_if_fail (m != NULL);
5168 _tmp0_ = vala_symbol_get_external_package ((ValaSymbol*) m);
5169 _tmp1_ = _tmp0_;
5170 if (_tmp1_) {
5171 return;
5172 }
5173 if (!vala_gir_writer_check_accessibility (self, (ValaSymbol*) m)) {
5174 _tmp3_ = TRUE;
5175 } else {
5176 gboolean _tmp4_;
5177 gboolean _tmp5_;
5178 _tmp4_ = vala_method_get_overrides (m);
5179 _tmp5_ = _tmp4_;
5180 _tmp3_ = _tmp5_;
5181 }
5182 if (_tmp3_) {
5183 _tmp2_ = TRUE;
5184 } else {
5185 gboolean _tmp6_ = FALSE;
5186 gboolean _tmp7_ = FALSE;
5187 ValaMethod* _tmp8_;
5188 ValaMethod* _tmp9_;
5189 _tmp8_ = vala_method_get_base_interface_method (m);
5190 _tmp9_ = _tmp8_;
5191 if (_tmp9_ != NULL) {
5192 gboolean _tmp10_;
5193 gboolean _tmp11_;
5194 _tmp10_ = vala_method_get_is_abstract (m);
5195 _tmp11_ = _tmp10_;
5196 _tmp7_ = !_tmp11_;
5197 } else {
5198 _tmp7_ = FALSE;
5199 }
5200 if (_tmp7_) {
5201 gboolean _tmp12_;
5202 gboolean _tmp13_;
5203 _tmp12_ = vala_method_get_is_virtual (m);
5204 _tmp13_ = _tmp12_;
5205 _tmp6_ = !_tmp13_;
5206 } else {
5207 _tmp6_ = FALSE;
5208 }
5209 _tmp2_ = _tmp6_;
5210 }
5211 if (_tmp2_) {
5212 return;
5213 }
5214 if (!vala_gir_writer_has_namespace (self, (ValaSymbol*) m)) {
5215 return;
5216 }
5217 _tmp14_ = g_strdup ("method");
5218 tag_name = _tmp14_;
5219 _tmp15_ = self->priv->hierarchy;
5220 _tmp16_ = vala_list_get ((ValaList*) _tmp15_, 0);
5221 parent = (ValaSymbol*) _tmp16_;
5222 _tmp17_ = parent;
5223 if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp17_, VALA_TYPE_ENUM)) {
5224 ValaArrayList* _tmp18_;
5225 _tmp18_ = self->priv->deferred;
5226 vala_collection_add ((ValaCollection*) _tmp18_, (ValaCodeNode*) m);
5227 _vala_code_node_unref0 (parent);
5228 _g_free0 (tag_name);
5229 return;
5230 }
5231 _tmp21_ = parent;
5232 if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp21_, VALA_TYPE_NAMESPACE)) {
5233 _tmp20_ = TRUE;
5234 } else {
5235 ValaMemberBinding _tmp22_;
5236 ValaMemberBinding _tmp23_;
5237 _tmp22_ = vala_method_get_binding (m);
5238 _tmp23_ = _tmp22_;
5239 _tmp20_ = _tmp23_ == VALA_MEMBER_BINDING_STATIC;
5240 }
5241 if (_tmp20_) {
5242 _tmp19_ = TRUE;
5243 } else {
5244 ValaSymbol* _tmp24_;
5245 ValaSymbol* _tmp25_;
5246 ValaSymbol* _tmp26_;
5247 _tmp24_ = parent;
5248 _tmp25_ = vala_symbol_get_parent_symbol ((ValaSymbol*) m);
5249 _tmp26_ = _tmp25_;
5250 _tmp19_ = _tmp24_ != _tmp26_;
5251 }
5252 if (_tmp19_) {
5253 gchar* _tmp27_;
5254 _tmp27_ = g_strdup ("function");
5255 _g_free0 (tag_name);
5256 tag_name = _tmp27_;
5257 }
5258 if (!vala_get_ccode_no_wrapper (m)) {
5259 ValaSignal* _tmp29_;
5260 ValaSignal* _tmp30_;
5261 _tmp29_ = vala_method_get_signal_reference (m);
5262 _tmp30_ = _tmp29_;
5263 _tmp28_ = _tmp30_ == NULL;
5264 } else {
5265 _tmp28_ = FALSE;
5266 }
5267 if (_tmp28_) {
5268 const gchar* _tmp31_;
5269 _tmp31_ = tag_name;
5270 vala_gir_writer_write_signature (self, m, _tmp31_, TRUE, FALSE, TRUE);
5271 }
5272 _tmp33_ = vala_method_get_is_abstract (m);
5273 _tmp34_ = _tmp33_;
5274 if (_tmp34_) {
5275 _tmp32_ = TRUE;
5276 } else {
5277 gboolean _tmp35_;
5278 gboolean _tmp36_;
5279 _tmp35_ = vala_method_get_is_virtual (m);
5280 _tmp36_ = _tmp35_;
5281 _tmp32_ = _tmp36_;
5282 }
5283 if (_tmp32_) {
5284 vala_gir_writer_write_signature (self, m, "virtual-method", TRUE, FALSE, TRUE);
5285 }
5286 _vala_code_node_unref0 (parent);
5287 _g_free0 (tag_name);
5288 }
5289
5290 static gboolean
vala_gir_writer_is_type_introspectable(ValaGIRWriter * self,ValaDataType * type)5291 vala_gir_writer_is_type_introspectable (ValaGIRWriter* self,
5292 ValaDataType* type)
5293 {
5294 gchar* _tmp0_;
5295 gchar* _tmp1_;
5296 gboolean _tmp2_;
5297 gboolean result = FALSE;
5298 g_return_val_if_fail (self != NULL, FALSE);
5299 g_return_val_if_fail (type != NULL, FALSE);
5300 _tmp0_ = vala_get_ccode_name ((ValaCodeNode*) type);
5301 _tmp1_ = _tmp0_;
5302 _tmp2_ = g_strcmp0 (_tmp1_, "va_list") == 0;
5303 _g_free0 (_tmp1_);
5304 if (_tmp2_) {
5305 result = FALSE;
5306 return result;
5307 }
5308 result = TRUE;
5309 return result;
5310 }
5311
5312 static gboolean
vala_gir_writer_is_method_introspectable(ValaGIRWriter * self,ValaMethod * m)5313 vala_gir_writer_is_method_introspectable (ValaGIRWriter* self,
5314 ValaMethod* m)
5315 {
5316 ValaDataType* _tmp0_;
5317 ValaDataType* _tmp1_;
5318 gboolean result = FALSE;
5319 g_return_val_if_fail (self != NULL, FALSE);
5320 g_return_val_if_fail (m != NULL, FALSE);
5321 _tmp0_ = vala_callable_get_return_type ((ValaCallable*) m);
5322 _tmp1_ = _tmp0_;
5323 if (!vala_gir_writer_is_type_introspectable (self, _tmp1_)) {
5324 result = FALSE;
5325 return result;
5326 }
5327 {
5328 ValaList* _param_list = NULL;
5329 ValaList* _tmp2_;
5330 ValaList* _tmp3_;
5331 gint _param_size = 0;
5332 ValaList* _tmp4_;
5333 gint _tmp5_;
5334 gint _tmp6_;
5335 gint _param_index = 0;
5336 _tmp2_ = vala_callable_get_parameters ((ValaCallable*) m);
5337 _tmp3_ = _vala_iterable_ref0 (_tmp2_);
5338 _param_list = _tmp3_;
5339 _tmp4_ = _param_list;
5340 _tmp5_ = vala_collection_get_size ((ValaCollection*) _tmp4_);
5341 _tmp6_ = _tmp5_;
5342 _param_size = _tmp6_;
5343 _param_index = -1;
5344 while (TRUE) {
5345 gint _tmp7_;
5346 gint _tmp8_;
5347 ValaParameter* param = NULL;
5348 ValaList* _tmp9_;
5349 gpointer _tmp10_;
5350 gboolean _tmp11_ = FALSE;
5351 gboolean _tmp12_ = FALSE;
5352 ValaParameter* _tmp13_;
5353 gboolean _tmp14_;
5354 gboolean _tmp15_;
5355 _param_index = _param_index + 1;
5356 _tmp7_ = _param_index;
5357 _tmp8_ = _param_size;
5358 if (!(_tmp7_ < _tmp8_)) {
5359 break;
5360 }
5361 _tmp9_ = _param_list;
5362 _tmp10_ = vala_list_get (_tmp9_, _param_index);
5363 param = (ValaParameter*) _tmp10_;
5364 _tmp13_ = param;
5365 _tmp14_ = vala_parameter_get_ellipsis (_tmp13_);
5366 _tmp15_ = _tmp14_;
5367 if (_tmp15_) {
5368 _tmp12_ = TRUE;
5369 } else {
5370 ValaParameter* _tmp16_;
5371 gboolean _tmp17_;
5372 gboolean _tmp18_;
5373 _tmp16_ = param;
5374 _tmp17_ = vala_parameter_get_params_array (_tmp16_);
5375 _tmp18_ = _tmp17_;
5376 _tmp12_ = _tmp18_;
5377 }
5378 if (_tmp12_) {
5379 _tmp11_ = TRUE;
5380 } else {
5381 ValaParameter* _tmp19_;
5382 ValaDataType* _tmp20_;
5383 ValaDataType* _tmp21_;
5384 _tmp19_ = param;
5385 _tmp20_ = vala_variable_get_variable_type ((ValaVariable*) _tmp19_);
5386 _tmp21_ = _tmp20_;
5387 _tmp11_ = !vala_gir_writer_is_type_introspectable (self, _tmp21_);
5388 }
5389 if (_tmp11_) {
5390 result = FALSE;
5391 _vala_code_node_unref0 (param);
5392 _vala_iterable_unref0 (_param_list);
5393 return result;
5394 }
5395 _vala_code_node_unref0 (param);
5396 }
5397 _vala_iterable_unref0 (_param_list);
5398 }
5399 result = TRUE;
5400 return result;
5401 }
5402
5403 static gboolean
vala_gir_writer_is_introspectable(ValaGIRWriter * self,ValaSymbol * sym)5404 vala_gir_writer_is_introspectable (ValaGIRWriter* self,
5405 ValaSymbol* sym)
5406 {
5407 gboolean _tmp0_ = FALSE;
5408 gboolean result = FALSE;
5409 g_return_val_if_fail (self != NULL, FALSE);
5410 g_return_val_if_fail (sym != NULL, FALSE);
5411 if (G_TYPE_CHECK_INSTANCE_TYPE (sym, VALA_TYPE_METHOD)) {
5412 _tmp0_ = !vala_gir_writer_is_method_introspectable (self, G_TYPE_CHECK_INSTANCE_CAST (sym, VALA_TYPE_METHOD, ValaMethod));
5413 } else {
5414 _tmp0_ = FALSE;
5415 }
5416 if (_tmp0_) {
5417 result = FALSE;
5418 return result;
5419 }
5420 result = vala_gir_writer_is_visibility (self, sym);
5421 return result;
5422 }
5423
5424 static void
vala_gir_writer_write_signature(ValaGIRWriter * self,ValaMethod * m,const gchar * tag_name,gboolean write_doc,gboolean instance,gboolean write_attributes)5425 vala_gir_writer_write_signature (ValaGIRWriter* self,
5426 ValaMethod* m,
5427 const gchar* tag_name,
5428 gboolean write_doc,
5429 gboolean instance,
5430 gboolean write_attributes)
5431 {
5432 ValaSymbol* parent = NULL;
5433 ValaArrayList* _tmp0_;
5434 gpointer _tmp1_;
5435 gchar* name = NULL;
5436 ValaSymbol* _tmp2_;
5437 ValaSymbol* _tmp3_;
5438 ValaSymbol* _tmp4_;
5439 gboolean _tmp18_;
5440 gboolean _tmp19_;
5441 g_return_if_fail (self != NULL);
5442 g_return_if_fail (m != NULL);
5443 g_return_if_fail (tag_name != NULL);
5444 _tmp0_ = self->priv->hierarchy;
5445 _tmp1_ = vala_list_get ((ValaList*) _tmp0_, 0);
5446 parent = (ValaSymbol*) _tmp1_;
5447 _tmp2_ = vala_symbol_get_parent_symbol ((ValaSymbol*) m);
5448 _tmp3_ = _tmp2_;
5449 _tmp4_ = parent;
5450 if (_tmp3_ != _tmp4_) {
5451 gchar* _tmp5_;
5452 gchar* parent_prefix = NULL;
5453 ValaSymbol* _tmp6_;
5454 gchar* _tmp7_;
5455 const gchar* _tmp8_;
5456 const gchar* _tmp9_;
5457 instance = FALSE;
5458 _tmp5_ = vala_get_ccode_name ((ValaCodeNode*) m);
5459 _g_free0 (name);
5460 name = _tmp5_;
5461 _tmp6_ = parent;
5462 _tmp7_ = vala_get_ccode_lower_case_prefix (_tmp6_);
5463 parent_prefix = _tmp7_;
5464 _tmp8_ = name;
5465 _tmp9_ = parent_prefix;
5466 if (g_str_has_prefix (_tmp8_, _tmp9_)) {
5467 const gchar* _tmp10_;
5468 const gchar* _tmp11_;
5469 gint _tmp12_;
5470 gint _tmp13_;
5471 gchar* _tmp14_;
5472 _tmp10_ = name;
5473 _tmp11_ = parent_prefix;
5474 _tmp12_ = strlen (_tmp11_);
5475 _tmp13_ = _tmp12_;
5476 _tmp14_ = string_substring (_tmp10_, (glong) _tmp13_, (glong) -1);
5477 _g_free0 (name);
5478 name = _tmp14_;
5479 }
5480 _g_free0 (parent_prefix);
5481 } else {
5482 const gchar* _tmp15_;
5483 const gchar* _tmp16_;
5484 gchar* _tmp17_;
5485 _tmp15_ = vala_symbol_get_name ((ValaSymbol*) m);
5486 _tmp16_ = _tmp15_;
5487 _tmp17_ = g_strdup (_tmp16_);
5488 _g_free0 (name);
5489 name = _tmp17_;
5490 }
5491 _tmp18_ = vala_method_get_coroutine (m);
5492 _tmp19_ = _tmp18_;
5493 if (_tmp19_) {
5494 gchar* finish_name = NULL;
5495 const gchar* _tmp20_;
5496 gchar* _tmp21_;
5497 const gchar* _tmp22_;
5498 const gchar* _tmp30_;
5499 gchar* _tmp31_;
5500 const gchar* _tmp32_;
5501 gchar* _tmp33_;
5502 gchar* _tmp34_;
5503 ValaList* _tmp35_;
5504 ValaList* _tmp36_;
5505 ValaVoidType* _tmp37_;
5506 ValaVoidType* _tmp38_;
5507 const gchar* _tmp39_;
5508 gchar* _tmp40_;
5509 gchar* _tmp41_;
5510 ValaList* _tmp42_;
5511 ValaList* _tmp43_;
5512 ValaDataType* _tmp44_;
5513 ValaDataType* _tmp45_;
5514 gboolean _tmp46_;
5515 gboolean _tmp47_;
5516 _tmp20_ = name;
5517 _tmp21_ = g_strdup (_tmp20_);
5518 finish_name = _tmp21_;
5519 _tmp22_ = finish_name;
5520 if (g_str_has_suffix (_tmp22_, "_async")) {
5521 const gchar* _tmp23_;
5522 const gchar* _tmp24_;
5523 gint _tmp25_;
5524 gint _tmp26_;
5525 gint _tmp27_;
5526 gint _tmp28_;
5527 gchar* _tmp29_;
5528 _tmp23_ = finish_name;
5529 _tmp24_ = finish_name;
5530 _tmp25_ = strlen (_tmp24_);
5531 _tmp26_ = _tmp25_;
5532 _tmp27_ = strlen ("_async");
5533 _tmp28_ = _tmp27_;
5534 _tmp29_ = string_substring (_tmp23_, (glong) 0, (glong) (_tmp26_ - _tmp28_));
5535 _g_free0 (finish_name);
5536 finish_name = _tmp29_;
5537 }
5538 _tmp30_ = finish_name;
5539 _tmp31_ = g_strconcat (_tmp30_, "_finish", NULL);
5540 _g_free0 (finish_name);
5541 finish_name = _tmp31_;
5542 _tmp32_ = name;
5543 _tmp33_ = vala_get_ccode_name ((ValaCodeNode*) m);
5544 _tmp34_ = _tmp33_;
5545 _tmp35_ = vala_method_get_async_begin_parameters (m);
5546 _tmp36_ = _tmp35_;
5547 _tmp37_ = vala_void_type_new (NULL);
5548 _tmp38_ = _tmp37_;
5549 vala_gir_writer_do_write_signature (self, m, tag_name, instance, _tmp32_, _tmp34_, _tmp36_, (ValaDataType*) _tmp38_, FALSE, TRUE, write_attributes);
5550 _vala_code_node_unref0 (_tmp38_);
5551 _vala_iterable_unref0 (_tmp36_);
5552 _g_free0 (_tmp34_);
5553 _tmp39_ = finish_name;
5554 _tmp40_ = vala_get_ccode_finish_name (m);
5555 _tmp41_ = _tmp40_;
5556 _tmp42_ = vala_method_get_async_end_parameters (m);
5557 _tmp43_ = _tmp42_;
5558 _tmp44_ = vala_callable_get_return_type ((ValaCallable*) m);
5559 _tmp45_ = _tmp44_;
5560 _tmp46_ = vala_code_node_get_tree_can_fail ((ValaCodeNode*) m);
5561 _tmp47_ = _tmp46_;
5562 vala_gir_writer_do_write_signature (self, m, tag_name, instance, _tmp39_, _tmp41_, _tmp43_, _tmp45_, _tmp47_, FALSE, write_attributes);
5563 _vala_iterable_unref0 (_tmp43_);
5564 _g_free0 (_tmp41_);
5565 _g_free0 (finish_name);
5566 } else {
5567 const gchar* _tmp48_;
5568 gchar* _tmp49_;
5569 gchar* _tmp50_;
5570 ValaList* _tmp51_;
5571 ValaDataType* _tmp52_;
5572 ValaDataType* _tmp53_;
5573 gboolean _tmp54_;
5574 gboolean _tmp55_;
5575 _tmp48_ = name;
5576 _tmp49_ = vala_get_ccode_name ((ValaCodeNode*) m);
5577 _tmp50_ = _tmp49_;
5578 _tmp51_ = vala_callable_get_parameters ((ValaCallable*) m);
5579 _tmp52_ = vala_callable_get_return_type ((ValaCallable*) m);
5580 _tmp53_ = _tmp52_;
5581 _tmp54_ = vala_code_node_get_tree_can_fail ((ValaCodeNode*) m);
5582 _tmp55_ = _tmp54_;
5583 vala_gir_writer_do_write_signature (self, m, tag_name, instance, _tmp48_, _tmp50_, _tmp51_, _tmp53_, _tmp55_, TRUE, write_attributes);
5584 _g_free0 (_tmp50_);
5585 }
5586 _g_free0 (name);
5587 _vala_code_node_unref0 (parent);
5588 }
5589
5590 static void
vala_gir_writer_do_write_signature(ValaGIRWriter * self,ValaMethod * m,const gchar * tag_name,gboolean instance,const gchar * name,const gchar * cname,ValaList * params,ValaDataType * return_type,gboolean can_fail,gboolean write_comment,gboolean write_attributes)5591 vala_gir_writer_do_write_signature (ValaGIRWriter* self,
5592 ValaMethod* m,
5593 const gchar* tag_name,
5594 gboolean instance,
5595 const gchar* name,
5596 const gchar* cname,
5597 ValaList* params,
5598 ValaDataType* return_type,
5599 gboolean can_fail,
5600 gboolean write_comment,
5601 gboolean write_attributes)
5602 {
5603 GString* _tmp0_;
5604 GString* _tmp5_;
5605 gint _tmp6_;
5606 gchar* return_comment = NULL;
5607 ValaList* _tmp10_;
5608 const gchar* _tmp11_;
5609 ValaParameter* _tmp12_;
5610 ValaParameter* _tmp13_;
5611 gint _tmp14_;
5612 GString* _tmp15_;
5613 g_return_if_fail (self != NULL);
5614 g_return_if_fail (m != NULL);
5615 g_return_if_fail (tag_name != NULL);
5616 g_return_if_fail (name != NULL);
5617 g_return_if_fail (cname != NULL);
5618 g_return_if_fail (params != NULL);
5619 g_return_if_fail (return_type != NULL);
5620 vala_gir_writer_write_indent (self);
5621 _tmp0_ = self->priv->buffer;
5622 g_string_append_printf (_tmp0_, "<%s name=\"%s\"", tag_name, name);
5623 if (g_strcmp0 (tag_name, "virtual-method") == 0) {
5624 if (!vala_get_ccode_no_wrapper (m)) {
5625 GString* _tmp1_;
5626 _tmp1_ = self->priv->buffer;
5627 g_string_append_printf (_tmp1_, " invoker=\"%s\"", name);
5628 }
5629 } else {
5630 if (g_strcmp0 (tag_name, "callback") == 0) {
5631 GString* _tmp2_;
5632 _tmp2_ = self->priv->buffer;
5633 g_string_append_printf (_tmp2_, " c:type=\"%s\"", name);
5634 } else {
5635 GString* _tmp3_;
5636 _tmp3_ = self->priv->buffer;
5637 g_string_append_printf (_tmp3_, " c:identifier=\"%s\"", cname);
5638 }
5639 }
5640 if (can_fail) {
5641 GString* _tmp4_;
5642 _tmp4_ = self->priv->buffer;
5643 g_string_append_printf (_tmp4_, " throws=\"1\"");
5644 }
5645 if (write_attributes) {
5646 vala_gir_writer_write_symbol_attributes (self, (ValaSymbol*) m);
5647 }
5648 _tmp5_ = self->priv->buffer;
5649 g_string_append_printf (_tmp5_, ">\n");
5650 _tmp6_ = self->priv->indent;
5651 self->priv->indent = _tmp6_ + 1;
5652 return_comment = NULL;
5653 if (write_comment) {
5654 gchar* _tmp7_;
5655 gchar* _tmp8_;
5656 gchar* _tmp9_;
5657 _tmp7_ = vala_gir_writer_get_method_return_comment (self, m);
5658 _g_free0 (return_comment);
5659 return_comment = _tmp7_;
5660 _tmp8_ = vala_gir_writer_get_method_comment (self, m);
5661 _tmp9_ = _tmp8_;
5662 vala_gir_writer_write_doc (self, _tmp9_);
5663 _g_free0 (_tmp9_);
5664 }
5665 _tmp10_ = vala_method_get_type_parameters (m);
5666 _tmp11_ = return_comment;
5667 _tmp12_ = vala_method_get_this_parameter (m);
5668 _tmp13_ = _tmp12_;
5669 vala_gir_writer_write_params_and_return (self, tag_name, params, _tmp10_, return_type, vala_get_ccode_array_length ((ValaCodeNode*) m), _tmp11_, FALSE, _tmp13_, FALSE);
5670 _tmp14_ = self->priv->indent;
5671 self->priv->indent = _tmp14_ - 1;
5672 vala_gir_writer_write_indent (self);
5673 _tmp15_ = self->priv->buffer;
5674 g_string_append_printf (_tmp15_, "</%s>\n", tag_name);
5675 _g_free0 (return_comment);
5676 }
5677
5678 static void
vala_gir_writer_real_visit_creation_method(ValaCodeVisitor * base,ValaCreationMethod * m)5679 vala_gir_writer_real_visit_creation_method (ValaCodeVisitor* base,
5680 ValaCreationMethod* m)
5681 {
5682 ValaGIRWriter * self;
5683 gboolean _tmp0_;
5684 gboolean _tmp1_;
5685 gboolean _tmp2_ = FALSE;
5686 ValaSymbol* _tmp3_;
5687 ValaSymbol* _tmp4_;
5688 gboolean is_struct = FALSE;
5689 ValaSymbol* _tmp9_;
5690 ValaSymbol* _tmp10_;
5691 const gchar* _tmp11_ = NULL;
5692 gchar* tag_name = NULL;
5693 gchar* _tmp12_;
5694 gboolean _tmp13_ = FALSE;
5695 gboolean _tmp14_ = FALSE;
5696 ValaSymbol* _tmp15_;
5697 ValaSymbol* _tmp16_;
5698 gboolean _tmp41_;
5699 gboolean _tmp42_;
5700 GString* _tmp44_;
5701 gint _tmp45_;
5702 gchar* _tmp46_;
5703 gchar* _tmp47_;
5704 ValaDataType* datatype = NULL;
5705 ValaSymbol* _tmp48_;
5706 ValaSymbol* _tmp49_;
5707 ValaDataType* _tmp50_;
5708 ValaList* type_params = NULL;
5709 ValaSymbol* _tmp51_;
5710 ValaSymbol* _tmp52_;
5711 const gchar* _tmp57_;
5712 ValaList* _tmp58_;
5713 ValaList* _tmp59_;
5714 ValaDataType* _tmp60_;
5715 gchar* _tmp61_;
5716 gchar* _tmp62_;
5717 gint _tmp63_;
5718 GString* _tmp64_;
5719 const gchar* _tmp65_;
5720 self = (ValaGIRWriter*) base;
5721 g_return_if_fail (m != NULL);
5722 _tmp0_ = vala_symbol_get_external_package ((ValaSymbol*) m);
5723 _tmp1_ = _tmp0_;
5724 if (_tmp1_) {
5725 return;
5726 }
5727 if (!vala_gir_writer_check_accessibility (self, (ValaSymbol*) m)) {
5728 return;
5729 }
5730 _tmp3_ = vala_symbol_get_parent_symbol ((ValaSymbol*) m);
5731 _tmp4_ = _tmp3_;
5732 if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp4_, VALA_TYPE_CLASS)) {
5733 ValaSymbol* _tmp5_;
5734 ValaSymbol* _tmp6_;
5735 gboolean _tmp7_;
5736 gboolean _tmp8_;
5737 _tmp5_ = vala_symbol_get_parent_symbol ((ValaSymbol*) m);
5738 _tmp6_ = _tmp5_;
5739 _tmp7_ = vala_class_get_is_abstract (G_TYPE_CHECK_INSTANCE_CAST (_tmp6_, VALA_TYPE_CLASS, ValaClass));
5740 _tmp8_ = _tmp7_;
5741 _tmp2_ = _tmp8_;
5742 } else {
5743 _tmp2_ = FALSE;
5744 }
5745 if (_tmp2_) {
5746 return;
5747 }
5748 vala_gir_writer_write_indent (self);
5749 _tmp9_ = vala_symbol_get_parent_symbol ((ValaSymbol*) m);
5750 _tmp10_ = _tmp9_;
5751 is_struct = G_TYPE_CHECK_INSTANCE_TYPE (_tmp10_, VALA_TYPE_STRUCT);
5752 if (is_struct) {
5753 _tmp11_ = "function";
5754 } else {
5755 _tmp11_ = "constructor";
5756 }
5757 _tmp12_ = g_strdup (_tmp11_);
5758 tag_name = _tmp12_;
5759 _tmp15_ = vala_symbol_get_parent_symbol ((ValaSymbol*) m);
5760 _tmp16_ = _tmp15_;
5761 if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp16_, VALA_TYPE_CLASS)) {
5762 ValaSymbol* _tmp17_;
5763 ValaSymbol* _tmp18_;
5764 ValaCreationMethod* _tmp19_;
5765 ValaCreationMethod* _tmp20_;
5766 _tmp17_ = vala_symbol_get_parent_symbol ((ValaSymbol*) m);
5767 _tmp18_ = _tmp17_;
5768 _tmp19_ = vala_class_get_default_construction_method (G_TYPE_CHECK_INSTANCE_CAST (_tmp18_, VALA_TYPE_CLASS, ValaClass));
5769 _tmp20_ = _tmp19_;
5770 _tmp14_ = m == _tmp20_;
5771 } else {
5772 _tmp14_ = FALSE;
5773 }
5774 if (_tmp14_) {
5775 _tmp13_ = TRUE;
5776 } else {
5777 gboolean _tmp21_ = FALSE;
5778 ValaSymbol* _tmp22_;
5779 ValaSymbol* _tmp23_;
5780 _tmp22_ = vala_symbol_get_parent_symbol ((ValaSymbol*) m);
5781 _tmp23_ = _tmp22_;
5782 if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp23_, VALA_TYPE_STRUCT)) {
5783 ValaSymbol* _tmp24_;
5784 ValaSymbol* _tmp25_;
5785 ValaCreationMethod* _tmp26_;
5786 ValaCreationMethod* _tmp27_;
5787 _tmp24_ = vala_symbol_get_parent_symbol ((ValaSymbol*) m);
5788 _tmp25_ = _tmp24_;
5789 _tmp26_ = vala_struct_get_default_construction_method (G_TYPE_CHECK_INSTANCE_CAST (_tmp25_, VALA_TYPE_STRUCT, ValaStruct));
5790 _tmp27_ = _tmp26_;
5791 _tmp21_ = m == _tmp27_;
5792 } else {
5793 _tmp21_ = FALSE;
5794 }
5795 _tmp13_ = _tmp21_;
5796 }
5797 if (_tmp13_) {
5798 const gchar* _tmp28_ = NULL;
5799 gchar* m_name = NULL;
5800 gchar* _tmp29_;
5801 GString* _tmp30_;
5802 const gchar* _tmp31_;
5803 const gchar* _tmp32_;
5804 gchar* _tmp33_;
5805 gchar* _tmp34_;
5806 if (is_struct) {
5807 _tmp28_ = "init";
5808 } else {
5809 _tmp28_ = "new";
5810 }
5811 _tmp29_ = g_strdup (_tmp28_);
5812 m_name = _tmp29_;
5813 _tmp30_ = self->priv->buffer;
5814 _tmp31_ = tag_name;
5815 _tmp32_ = m_name;
5816 _tmp33_ = vala_get_ccode_name ((ValaCodeNode*) m);
5817 _tmp34_ = _tmp33_;
5818 g_string_append_printf (_tmp30_, "<%s name=\"%s\" c:identifier=\"%s\"", _tmp31_, _tmp32_, _tmp34_);
5819 _g_free0 (_tmp34_);
5820 _g_free0 (m_name);
5821 } else {
5822 GString* _tmp35_;
5823 const gchar* _tmp36_;
5824 const gchar* _tmp37_;
5825 const gchar* _tmp38_;
5826 gchar* _tmp39_;
5827 gchar* _tmp40_;
5828 _tmp35_ = self->priv->buffer;
5829 _tmp36_ = tag_name;
5830 _tmp37_ = vala_symbol_get_name ((ValaSymbol*) m);
5831 _tmp38_ = _tmp37_;
5832 _tmp39_ = vala_get_ccode_name ((ValaCodeNode*) m);
5833 _tmp40_ = _tmp39_;
5834 g_string_append_printf (_tmp35_, "<%s name=\"%s\" c:identifier=\"%s\"", _tmp36_, _tmp38_, _tmp40_);
5835 _g_free0 (_tmp40_);
5836 }
5837 _tmp41_ = vala_code_node_get_tree_can_fail ((ValaCodeNode*) m);
5838 _tmp42_ = _tmp41_;
5839 if (_tmp42_) {
5840 GString* _tmp43_;
5841 _tmp43_ = self->priv->buffer;
5842 g_string_append_printf (_tmp43_, " throws=\"1\"");
5843 }
5844 vala_gir_writer_write_symbol_attributes (self, (ValaSymbol*) m);
5845 _tmp44_ = self->priv->buffer;
5846 g_string_append_printf (_tmp44_, ">\n");
5847 _tmp45_ = self->priv->indent;
5848 self->priv->indent = _tmp45_ + 1;
5849 _tmp46_ = vala_gir_writer_get_method_comment (self, (ValaMethod*) m);
5850 _tmp47_ = _tmp46_;
5851 vala_gir_writer_write_doc (self, _tmp47_);
5852 _g_free0 (_tmp47_);
5853 _tmp48_ = vala_symbol_get_parent_symbol ((ValaSymbol*) m);
5854 _tmp49_ = _tmp48_;
5855 _tmp50_ = vala_semantic_analyzer_get_data_type_for_symbol (_tmp49_);
5856 datatype = _tmp50_;
5857 type_params = NULL;
5858 _tmp51_ = vala_symbol_get_parent_symbol ((ValaSymbol*) m);
5859 _tmp52_ = _tmp51_;
5860 if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp52_, VALA_TYPE_CLASS)) {
5861 ValaSymbol* _tmp53_;
5862 ValaSymbol* _tmp54_;
5863 ValaList* _tmp55_;
5864 ValaList* _tmp56_;
5865 _tmp53_ = vala_symbol_get_parent_symbol ((ValaSymbol*) m);
5866 _tmp54_ = _tmp53_;
5867 _tmp55_ = vala_object_type_symbol_get_type_parameters ((ValaObjectTypeSymbol*) G_TYPE_CHECK_INSTANCE_CAST (_tmp54_, VALA_TYPE_CLASS, ValaClass));
5868 _tmp56_ = _vala_iterable_ref0 (_tmp55_);
5869 _vala_iterable_unref0 (type_params);
5870 type_params = _tmp56_;
5871 }
5872 _tmp57_ = tag_name;
5873 _tmp58_ = vala_callable_get_parameters ((ValaCallable*) m);
5874 _tmp59_ = type_params;
5875 _tmp60_ = datatype;
5876 _tmp61_ = vala_gir_writer_get_method_return_comment (self, (ValaMethod*) m);
5877 _tmp62_ = _tmp61_;
5878 vala_gir_writer_write_params_and_return (self, _tmp57_, _tmp58_, _tmp59_, _tmp60_, FALSE, _tmp62_, TRUE, NULL, FALSE);
5879 _g_free0 (_tmp62_);
5880 _tmp63_ = self->priv->indent;
5881 self->priv->indent = _tmp63_ - 1;
5882 vala_gir_writer_write_indent (self);
5883 _tmp64_ = self->priv->buffer;
5884 _tmp65_ = tag_name;
5885 g_string_append_printf (_tmp64_, "</%s>\n", _tmp65_);
5886 _vala_iterable_unref0 (type_params);
5887 _vala_code_node_unref0 (datatype);
5888 _g_free0 (tag_name);
5889 }
5890
5891 static void
vala_gir_writer_real_visit_property(ValaCodeVisitor * base,ValaProperty * prop)5892 vala_gir_writer_real_visit_property (ValaCodeVisitor* base,
5893 ValaProperty* prop)
5894 {
5895 ValaGIRWriter * self;
5896 gboolean _tmp0_ = FALSE;
5897 gboolean _tmp1_ = FALSE;
5898 ValaCodeContext* _tmp12_;
5899 ValaSemanticAnalyzer* _tmp13_;
5900 ValaSemanticAnalyzer* _tmp14_;
5901 ValaPropertyAccessor* _tmp42_;
5902 ValaPropertyAccessor* _tmp43_;
5903 ValaPropertyAccessor* _tmp49_;
5904 ValaPropertyAccessor* _tmp50_;
5905 self = (ValaGIRWriter*) base;
5906 g_return_if_fail (prop != NULL);
5907 if (!vala_gir_writer_check_accessibility (self, (ValaSymbol*) prop)) {
5908 _tmp1_ = TRUE;
5909 } else {
5910 gboolean _tmp2_;
5911 gboolean _tmp3_;
5912 _tmp2_ = vala_property_get_overrides (prop);
5913 _tmp3_ = _tmp2_;
5914 _tmp1_ = _tmp3_;
5915 }
5916 if (_tmp1_) {
5917 _tmp0_ = TRUE;
5918 } else {
5919 gboolean _tmp4_ = FALSE;
5920 gboolean _tmp5_ = FALSE;
5921 ValaProperty* _tmp6_;
5922 ValaProperty* _tmp7_;
5923 _tmp6_ = vala_property_get_base_interface_property (prop);
5924 _tmp7_ = _tmp6_;
5925 if (_tmp7_ != NULL) {
5926 gboolean _tmp8_;
5927 gboolean _tmp9_;
5928 _tmp8_ = vala_property_get_is_abstract (prop);
5929 _tmp9_ = _tmp8_;
5930 _tmp5_ = !_tmp9_;
5931 } else {
5932 _tmp5_ = FALSE;
5933 }
5934 if (_tmp5_) {
5935 gboolean _tmp10_;
5936 gboolean _tmp11_;
5937 _tmp10_ = vala_property_get_is_virtual (prop);
5938 _tmp11_ = _tmp10_;
5939 _tmp4_ = !_tmp11_;
5940 } else {
5941 _tmp4_ = FALSE;
5942 }
5943 _tmp0_ = _tmp4_;
5944 }
5945 if (_tmp0_) {
5946 return;
5947 }
5948 _tmp12_ = self->priv->context;
5949 _tmp13_ = vala_code_context_get_analyzer (_tmp12_);
5950 _tmp14_ = _tmp13_;
5951 if (vala_semantic_analyzer_is_gobject_property (_tmp14_, prop)) {
5952 GString* _tmp15_;
5953 gchar* _tmp16_;
5954 gchar* _tmp17_;
5955 ValaPropertyAccessor* _tmp18_;
5956 ValaPropertyAccessor* _tmp19_;
5957 ValaPropertyAccessor* _tmp21_;
5958 ValaPropertyAccessor* _tmp22_;
5959 GString* _tmp34_;
5960 gint _tmp35_;
5961 gchar* _tmp36_;
5962 gchar* _tmp37_;
5963 ValaDataType* _tmp38_;
5964 ValaDataType* _tmp39_;
5965 gint _tmp40_;
5966 GString* _tmp41_;
5967 vala_gir_writer_write_indent (self);
5968 _tmp15_ = self->priv->buffer;
5969 _tmp16_ = vala_get_ccode_name ((ValaCodeNode*) prop);
5970 _tmp17_ = _tmp16_;
5971 g_string_append_printf (_tmp15_, "<property name=\"%s\"", _tmp17_);
5972 _g_free0 (_tmp17_);
5973 _tmp18_ = vala_property_get_get_accessor (prop);
5974 _tmp19_ = _tmp18_;
5975 if (_tmp19_ == NULL) {
5976 GString* _tmp20_;
5977 _tmp20_ = self->priv->buffer;
5978 g_string_append_printf (_tmp20_, " readable=\"0\"");
5979 }
5980 _tmp21_ = vala_property_get_set_accessor (prop);
5981 _tmp22_ = _tmp21_;
5982 if (_tmp22_ != NULL) {
5983 GString* _tmp23_;
5984 ValaPropertyAccessor* _tmp24_;
5985 ValaPropertyAccessor* _tmp25_;
5986 gboolean _tmp26_;
5987 gboolean _tmp27_;
5988 _tmp23_ = self->priv->buffer;
5989 g_string_append_printf (_tmp23_, " writable=\"1\"");
5990 _tmp24_ = vala_property_get_set_accessor (prop);
5991 _tmp25_ = _tmp24_;
5992 _tmp26_ = vala_property_accessor_get_construction (_tmp25_);
5993 _tmp27_ = _tmp26_;
5994 if (_tmp27_) {
5995 ValaPropertyAccessor* _tmp28_;
5996 ValaPropertyAccessor* _tmp29_;
5997 gboolean _tmp30_;
5998 gboolean _tmp31_;
5999 _tmp28_ = vala_property_get_set_accessor (prop);
6000 _tmp29_ = _tmp28_;
6001 _tmp30_ = vala_property_accessor_get_writable (_tmp29_);
6002 _tmp31_ = _tmp30_;
6003 if (!_tmp31_) {
6004 GString* _tmp32_;
6005 _tmp32_ = self->priv->buffer;
6006 g_string_append_printf (_tmp32_, " construct-only=\"1\"");
6007 } else {
6008 GString* _tmp33_;
6009 _tmp33_ = self->priv->buffer;
6010 g_string_append_printf (_tmp33_, " construct=\"1\"");
6011 }
6012 }
6013 }
6014 vala_gir_writer_write_symbol_attributes (self, (ValaSymbol*) prop);
6015 _tmp34_ = self->priv->buffer;
6016 g_string_append_printf (_tmp34_, ">\n");
6017 _tmp35_ = self->priv->indent;
6018 self->priv->indent = _tmp35_ + 1;
6019 _tmp36_ = vala_gir_writer_get_property_comment (self, prop);
6020 _tmp37_ = _tmp36_;
6021 vala_gir_writer_write_doc (self, _tmp37_);
6022 _g_free0 (_tmp37_);
6023 _tmp38_ = vala_property_get_property_type (prop);
6024 _tmp39_ = _tmp38_;
6025 vala_gir_writer_write_type (self, _tmp39_, -1, VALA_PARAMETER_DIRECTION_IN);
6026 _tmp40_ = self->priv->indent;
6027 self->priv->indent = _tmp40_ - 1;
6028 vala_gir_writer_write_indent (self);
6029 _tmp41_ = self->priv->buffer;
6030 g_string_append_printf (_tmp41_, "</property>\n");
6031 }
6032 _tmp42_ = vala_property_get_get_accessor (prop);
6033 _tmp43_ = _tmp42_;
6034 if (_tmp43_ != NULL) {
6035 ValaMethod* m = NULL;
6036 ValaPropertyAccessor* _tmp44_;
6037 ValaPropertyAccessor* _tmp45_;
6038 ValaMethod* _tmp46_;
6039 ValaMethod* _tmp47_;
6040 _tmp44_ = vala_property_get_get_accessor (prop);
6041 _tmp45_ = _tmp44_;
6042 _tmp46_ = vala_property_accessor_get_method (_tmp45_);
6043 m = _tmp46_;
6044 _tmp47_ = m;
6045 if (_tmp47_ != NULL) {
6046 ValaMethod* _tmp48_;
6047 _tmp48_ = m;
6048 vala_code_visitor_visit_method ((ValaCodeVisitor*) self, _tmp48_);
6049 }
6050 _vala_code_node_unref0 (m);
6051 }
6052 _tmp49_ = vala_property_get_set_accessor (prop);
6053 _tmp50_ = _tmp49_;
6054 if (_tmp50_ != NULL) {
6055 ValaMethod* m = NULL;
6056 ValaPropertyAccessor* _tmp51_;
6057 ValaPropertyAccessor* _tmp52_;
6058 ValaMethod* _tmp53_;
6059 ValaMethod* _tmp54_;
6060 _tmp51_ = vala_property_get_set_accessor (prop);
6061 _tmp52_ = _tmp51_;
6062 _tmp53_ = vala_property_accessor_get_method (_tmp52_);
6063 m = _tmp53_;
6064 _tmp54_ = m;
6065 if (_tmp54_ != NULL) {
6066 ValaMethod* _tmp55_;
6067 _tmp55_ = m;
6068 vala_code_visitor_visit_method ((ValaCodeVisitor*) self, _tmp55_);
6069 }
6070 _vala_code_node_unref0 (m);
6071 }
6072 }
6073
6074 static void
vala_gir_writer_real_visit_signal(ValaCodeVisitor * base,ValaSignal * sig)6075 vala_gir_writer_real_visit_signal (ValaCodeVisitor* base,
6076 ValaSignal* sig)
6077 {
6078 ValaGIRWriter * self;
6079 ValaMethod* _tmp0_;
6080 ValaMethod* _tmp1_;
6081 ValaMethod* _tmp4_;
6082 ValaMethod* _tmp5_;
6083 GString* _tmp8_;
6084 gchar* _tmp9_;
6085 gchar* _tmp10_;
6086 GString* _tmp11_;
6087 gint _tmp12_;
6088 gchar* _tmp13_;
6089 gchar* _tmp14_;
6090 ValaList* _tmp15_;
6091 ValaDataType* _tmp16_;
6092 ValaDataType* _tmp17_;
6093 gchar* _tmp18_;
6094 gchar* _tmp19_;
6095 gint _tmp20_;
6096 GString* _tmp21_;
6097 self = (ValaGIRWriter*) base;
6098 g_return_if_fail (sig != NULL);
6099 if (!vala_gir_writer_check_accessibility (self, (ValaSymbol*) sig)) {
6100 return;
6101 }
6102 _tmp0_ = vala_signal_get_emitter (sig);
6103 _tmp1_ = _tmp0_;
6104 if (_tmp1_ != NULL) {
6105 ValaMethod* _tmp2_;
6106 ValaMethod* _tmp3_;
6107 _tmp2_ = vala_signal_get_emitter (sig);
6108 _tmp3_ = _tmp2_;
6109 vala_code_node_accept ((ValaCodeNode*) _tmp3_, (ValaCodeVisitor*) self);
6110 }
6111 _tmp4_ = vala_signal_get_default_handler (sig);
6112 _tmp5_ = _tmp4_;
6113 if (_tmp5_ != NULL) {
6114 ValaMethod* _tmp6_;
6115 ValaMethod* _tmp7_;
6116 _tmp6_ = vala_signal_get_default_handler (sig);
6117 _tmp7_ = _tmp6_;
6118 vala_code_node_accept ((ValaCodeNode*) _tmp7_, (ValaCodeVisitor*) self);
6119 }
6120 vala_gir_writer_write_indent (self);
6121 _tmp8_ = self->priv->buffer;
6122 _tmp9_ = vala_get_ccode_name ((ValaCodeNode*) sig);
6123 _tmp10_ = _tmp9_;
6124 g_string_append_printf (_tmp8_, "<glib:signal name=\"%s\"", _tmp10_);
6125 _g_free0 (_tmp10_);
6126 vala_gir_writer_write_symbol_attributes (self, (ValaSymbol*) sig);
6127 _tmp11_ = self->priv->buffer;
6128 g_string_append_printf (_tmp11_, ">\n");
6129 _tmp12_ = self->priv->indent;
6130 self->priv->indent = _tmp12_ + 1;
6131 _tmp13_ = vala_gir_writer_get_signal_comment (self, sig);
6132 _tmp14_ = _tmp13_;
6133 vala_gir_writer_write_doc (self, _tmp14_);
6134 _g_free0 (_tmp14_);
6135 _tmp15_ = vala_callable_get_parameters ((ValaCallable*) sig);
6136 _tmp16_ = vala_callable_get_return_type ((ValaCallable*) sig);
6137 _tmp17_ = _tmp16_;
6138 _tmp18_ = vala_gir_writer_get_signal_return_comment (self, sig);
6139 _tmp19_ = _tmp18_;
6140 vala_gir_writer_write_params_and_return (self, "glib:signal", _tmp15_, NULL, _tmp17_, FALSE, _tmp19_, FALSE, NULL, FALSE);
6141 _g_free0 (_tmp19_);
6142 _tmp20_ = self->priv->indent;
6143 self->priv->indent = _tmp20_ - 1;
6144 vala_gir_writer_write_indent (self);
6145 _tmp21_ = self->priv->buffer;
6146 g_string_append_printf (_tmp21_, "</glib:signal>\n");
6147 }
6148
6149 static void
vala_gir_writer_write_indent(ValaGIRWriter * self)6150 vala_gir_writer_write_indent (ValaGIRWriter* self)
6151 {
6152 gint i = 0;
6153 g_return_if_fail (self != NULL);
6154 {
6155 gboolean _tmp0_ = FALSE;
6156 i = 0;
6157 _tmp0_ = TRUE;
6158 while (TRUE) {
6159 GString* _tmp2_;
6160 if (!_tmp0_) {
6161 gint _tmp1_;
6162 _tmp1_ = i;
6163 i = _tmp1_ + 1;
6164 }
6165 _tmp0_ = FALSE;
6166 if (!(i < self->priv->indent)) {
6167 break;
6168 }
6169 _tmp2_ = self->priv->buffer;
6170 g_string_append_c (_tmp2_, '\t');
6171 }
6172 }
6173 }
6174
6175 static void
vala_gir_writer_write_indent_stream(ValaGIRWriter * self)6176 vala_gir_writer_write_indent_stream (ValaGIRWriter* self)
6177 {
6178 gint i = 0;
6179 g_return_if_fail (self != NULL);
6180 {
6181 gboolean _tmp0_ = FALSE;
6182 i = 0;
6183 _tmp0_ = TRUE;
6184 while (TRUE) {
6185 FILE* _tmp2_;
6186 if (!_tmp0_) {
6187 gint _tmp1_;
6188 _tmp1_ = i;
6189 i = _tmp1_ + 1;
6190 }
6191 _tmp0_ = FALSE;
6192 if (!(i < self->priv->indent)) {
6193 break;
6194 }
6195 _tmp2_ = self->priv->stream;
6196 fputc ('\t', _tmp2_);
6197 }
6198 }
6199 }
6200
6201 static void
vala_gir_writer_write_param_or_return(ValaGIRWriter * self,ValaDataType * type,const gchar * tag,gint * index,gboolean has_array_length,const gchar * name,const gchar * comment,ValaParameterDirection direction,gboolean constructor,gboolean caller_allocates,gboolean ellipsis)6202 vala_gir_writer_write_param_or_return (ValaGIRWriter* self,
6203 ValaDataType* type,
6204 const gchar* tag,
6205 gint* index,
6206 gboolean has_array_length,
6207 const gchar* name,
6208 const gchar* comment,
6209 ValaParameterDirection direction,
6210 gboolean constructor,
6211 gboolean caller_allocates,
6212 gboolean ellipsis)
6213 {
6214 GString* _tmp0_;
6215 ValaDelegateType* delegate_type = NULL;
6216 ValaArrayType* array_type = NULL;
6217 gboolean _tmp4_ = FALSE;
6218 gboolean _tmp39_ = FALSE;
6219 gboolean _tmp43_ = FALSE;
6220 ValaDelegateType* _tmp44_;
6221 GString* _tmp65_;
6222 gint _tmp66_;
6223 gint _tmp69_;
6224 GString* _tmp70_;
6225 gint _tmp71_;
6226 g_return_if_fail (self != NULL);
6227 g_return_if_fail (tag != NULL);
6228 vala_gir_writer_write_indent (self);
6229 _tmp0_ = self->priv->buffer;
6230 g_string_append_printf (_tmp0_, "<%s", tag);
6231 if (ellipsis) {
6232 name = "...";
6233 }
6234 if (name != NULL) {
6235 GString* _tmp1_;
6236 _tmp1_ = self->priv->buffer;
6237 g_string_append_printf (_tmp1_, " name=\"%s\"", name);
6238 }
6239 if (direction == VALA_PARAMETER_DIRECTION_REF) {
6240 GString* _tmp2_;
6241 _tmp2_ = self->priv->buffer;
6242 g_string_append_printf (_tmp2_, " direction=\"inout\"");
6243 } else {
6244 if (direction == VALA_PARAMETER_DIRECTION_OUT) {
6245 GString* _tmp3_;
6246 _tmp3_ = self->priv->buffer;
6247 g_string_append_printf (_tmp3_, " direction=\"out\"");
6248 }
6249 }
6250 delegate_type = G_TYPE_CHECK_INSTANCE_TYPE (type, VALA_TYPE_DELEGATE_TYPE) ? ((ValaDelegateType*) type) : NULL;
6251 array_type = G_TYPE_CHECK_INSTANCE_TYPE (type, VALA_TYPE_ARRAY_TYPE) ? ((ValaArrayType*) type) : NULL;
6252 if (type != NULL) {
6253 gboolean _tmp5_ = FALSE;
6254 gboolean _tmp6_ = FALSE;
6255 gboolean _tmp7_;
6256 gboolean _tmp8_;
6257 _tmp7_ = vala_data_type_get_value_owned (type);
6258 _tmp8_ = _tmp7_;
6259 if (_tmp8_) {
6260 ValaDelegateType* _tmp9_;
6261 _tmp9_ = delegate_type;
6262 _tmp6_ = _tmp9_ == NULL;
6263 } else {
6264 _tmp6_ = FALSE;
6265 }
6266 if (_tmp6_) {
6267 _tmp5_ = TRUE;
6268 } else {
6269 gboolean _tmp10_ = FALSE;
6270 if (constructor) {
6271 ValaTypeSymbol* _tmp11_;
6272 ValaTypeSymbol* _tmp12_;
6273 ValaTypeSymbol* _tmp13_;
6274 _tmp11_ = vala_data_type_get_type_symbol (type);
6275 _tmp12_ = _tmp11_;
6276 _tmp13_ = self->priv->ginitiallyunowned_type;
6277 _tmp10_ = !vala_typesymbol_is_subtype_of (_tmp12_, _tmp13_);
6278 } else {
6279 _tmp10_ = FALSE;
6280 }
6281 _tmp5_ = _tmp10_;
6282 }
6283 _tmp4_ = _tmp5_;
6284 } else {
6285 _tmp4_ = FALSE;
6286 }
6287 if (_tmp4_) {
6288 gboolean any_owned = FALSE;
6289 gboolean _tmp26_ = FALSE;
6290 any_owned = FALSE;
6291 {
6292 ValaList* _generic_arg_list = NULL;
6293 ValaList* _tmp14_;
6294 ValaList* _tmp15_;
6295 gint _generic_arg_size = 0;
6296 ValaList* _tmp16_;
6297 gint _tmp17_;
6298 gint _tmp18_;
6299 gint _generic_arg_index = 0;
6300 _tmp14_ = vala_data_type_get_type_arguments (type);
6301 _tmp15_ = _vala_iterable_ref0 (_tmp14_);
6302 _generic_arg_list = _tmp15_;
6303 _tmp16_ = _generic_arg_list;
6304 _tmp17_ = vala_collection_get_size ((ValaCollection*) _tmp16_);
6305 _tmp18_ = _tmp17_;
6306 _generic_arg_size = _tmp18_;
6307 _generic_arg_index = -1;
6308 while (TRUE) {
6309 gint _tmp19_;
6310 gint _tmp20_;
6311 ValaDataType* generic_arg = NULL;
6312 ValaList* _tmp21_;
6313 gpointer _tmp22_;
6314 ValaDataType* _tmp23_;
6315 gboolean _tmp24_;
6316 gboolean _tmp25_;
6317 _generic_arg_index = _generic_arg_index + 1;
6318 _tmp19_ = _generic_arg_index;
6319 _tmp20_ = _generic_arg_size;
6320 if (!(_tmp19_ < _tmp20_)) {
6321 break;
6322 }
6323 _tmp21_ = _generic_arg_list;
6324 _tmp22_ = vala_list_get (_tmp21_, _generic_arg_index);
6325 generic_arg = (ValaDataType*) _tmp22_;
6326 _tmp23_ = generic_arg;
6327 _tmp24_ = vala_data_type_get_value_owned (_tmp23_);
6328 _tmp25_ = _tmp24_;
6329 any_owned |= _tmp25_;
6330 _vala_code_node_unref0 (generic_arg);
6331 }
6332 _vala_iterable_unref0 (_generic_arg_list);
6333 }
6334 if (vala_data_type_has_type_arguments (type)) {
6335 _tmp26_ = !any_owned;
6336 } else {
6337 _tmp26_ = FALSE;
6338 }
6339 if (_tmp26_) {
6340 GString* _tmp27_;
6341 _tmp27_ = self->priv->buffer;
6342 g_string_append_printf (_tmp27_, " transfer-ownership=\"container\"");
6343 } else {
6344 gboolean _tmp28_ = FALSE;
6345 ValaArrayType* _tmp29_;
6346 _tmp29_ = array_type;
6347 if (_tmp29_ != NULL) {
6348 ValaArrayType* _tmp30_;
6349 ValaDataType* _tmp31_;
6350 ValaDataType* _tmp32_;
6351 gboolean _tmp33_;
6352 gboolean _tmp34_;
6353 _tmp30_ = array_type;
6354 _tmp31_ = vala_array_type_get_element_type (_tmp30_);
6355 _tmp32_ = _tmp31_;
6356 _tmp33_ = vala_data_type_get_value_owned (_tmp32_);
6357 _tmp34_ = _tmp33_;
6358 _tmp28_ = !_tmp34_;
6359 } else {
6360 _tmp28_ = FALSE;
6361 }
6362 if (_tmp28_) {
6363 GString* _tmp35_;
6364 _tmp35_ = self->priv->buffer;
6365 g_string_append_printf (_tmp35_, " transfer-ownership=\"container\"");
6366 } else {
6367 GString* _tmp36_;
6368 _tmp36_ = self->priv->buffer;
6369 g_string_append_printf (_tmp36_, " transfer-ownership=\"full\"");
6370 }
6371 }
6372 } else {
6373 GString* _tmp37_;
6374 _tmp37_ = self->priv->buffer;
6375 g_string_append_printf (_tmp37_, " transfer-ownership=\"none\"");
6376 }
6377 if (caller_allocates) {
6378 GString* _tmp38_;
6379 _tmp38_ = self->priv->buffer;
6380 g_string_append_printf (_tmp38_, " caller-allocates=\"1\"");
6381 }
6382 if (type != NULL) {
6383 gboolean _tmp40_;
6384 gboolean _tmp41_;
6385 _tmp40_ = vala_data_type_get_nullable (type);
6386 _tmp41_ = _tmp40_;
6387 _tmp39_ = _tmp41_;
6388 } else {
6389 _tmp39_ = FALSE;
6390 }
6391 if (_tmp39_) {
6392 GString* _tmp42_;
6393 _tmp42_ = self->priv->buffer;
6394 g_string_append_printf (_tmp42_, " allow-none=\"1\"");
6395 }
6396 _tmp44_ = delegate_type;
6397 if (_tmp44_ != NULL) {
6398 ValaDelegateType* _tmp45_;
6399 ValaDelegate* _tmp46_;
6400 ValaDelegate* _tmp47_;
6401 gboolean _tmp48_;
6402 gboolean _tmp49_;
6403 _tmp45_ = delegate_type;
6404 _tmp46_ = vala_delegate_type_get_delegate_symbol (_tmp45_);
6405 _tmp47_ = _tmp46_;
6406 _tmp48_ = vala_delegate_get_has_target (_tmp47_);
6407 _tmp49_ = _tmp48_;
6408 _tmp43_ = _tmp49_;
6409 } else {
6410 _tmp43_ = FALSE;
6411 }
6412 if (_tmp43_) {
6413 gint _tmp50_ = 0;
6414 gint closure_index = 0;
6415 GString* _tmp54_;
6416 ValaDelegateType* _tmp55_;
6417 gboolean _tmp56_;
6418 gboolean _tmp57_;
6419 if (g_strcmp0 (tag, "parameter") == 0) {
6420 _tmp50_ = (*index) + 1;
6421 } else {
6422 gint _tmp51_ = 0;
6423 gboolean _tmp52_;
6424 gboolean _tmp53_;
6425 _tmp52_ = vala_data_type_get_value_owned (type);
6426 _tmp53_ = _tmp52_;
6427 if (_tmp53_) {
6428 _tmp51_ = (*index) - 1;
6429 } else {
6430 _tmp51_ = *index;
6431 }
6432 _tmp50_ = _tmp51_;
6433 }
6434 closure_index = _tmp50_;
6435 _tmp54_ = self->priv->buffer;
6436 g_string_append_printf (_tmp54_, " closure=\"%i\"", closure_index);
6437 _tmp55_ = delegate_type;
6438 _tmp56_ = vala_delegate_type_get_is_called_once (_tmp55_);
6439 _tmp57_ = _tmp56_;
6440 if (_tmp57_) {
6441 GString* _tmp58_;
6442 _tmp58_ = self->priv->buffer;
6443 g_string_append (_tmp58_, " scope=\"async\"");
6444 } else {
6445 gboolean _tmp59_;
6446 gboolean _tmp60_;
6447 _tmp59_ = vala_data_type_get_value_owned (type);
6448 _tmp60_ = _tmp59_;
6449 if (_tmp60_) {
6450 GString* _tmp61_;
6451 _tmp61_ = self->priv->buffer;
6452 g_string_append_printf (_tmp61_, " scope=\"notified\" destroy=\"%i\"", closure_index + 1);
6453 } else {
6454 GString* _tmp62_;
6455 _tmp62_ = self->priv->buffer;
6456 g_string_append (_tmp62_, " scope=\"call\"");
6457 }
6458 }
6459 } else {
6460 ValaDelegateType* _tmp63_;
6461 _tmp63_ = delegate_type;
6462 if (_tmp63_ != NULL) {
6463 GString* _tmp64_;
6464 _tmp64_ = self->priv->buffer;
6465 g_string_append (_tmp64_, " scope=\"call\"");
6466 }
6467 }
6468 _tmp65_ = self->priv->buffer;
6469 g_string_append_printf (_tmp65_, ">\n");
6470 _tmp66_ = self->priv->indent;
6471 self->priv->indent = _tmp66_ + 1;
6472 vala_gir_writer_write_doc (self, comment);
6473 if (ellipsis) {
6474 GString* _tmp67_;
6475 vala_gir_writer_write_indent (self);
6476 _tmp67_ = self->priv->buffer;
6477 g_string_append (_tmp67_, "<varargs/>\n");
6478 } else {
6479 if (type != NULL) {
6480 gint length_param_index = 0;
6481 length_param_index = -1;
6482 if (has_array_length) {
6483 gint _tmp68_ = 0;
6484 if (g_strcmp0 (tag, "parameter") == 0) {
6485 _tmp68_ = (*index) + 1;
6486 } else {
6487 _tmp68_ = *index;
6488 }
6489 length_param_index = _tmp68_;
6490 }
6491 vala_gir_writer_write_type (self, type, length_param_index, direction);
6492 }
6493 }
6494 _tmp69_ = self->priv->indent;
6495 self->priv->indent = _tmp69_ - 1;
6496 vala_gir_writer_write_indent (self);
6497 _tmp70_ = self->priv->buffer;
6498 g_string_append_printf (_tmp70_, "</%s>\n", tag);
6499 _tmp71_ = *index;
6500 *index = _tmp71_ + 1;
6501 }
6502
6503 static void
vala_gir_writer_write_ctype_attributes(ValaGIRWriter * self,ValaTypeSymbol * symbol,const gchar * suffix,gboolean symbol_prefix)6504 vala_gir_writer_write_ctype_attributes (ValaGIRWriter* self,
6505 ValaTypeSymbol* symbol,
6506 const gchar* suffix,
6507 gboolean symbol_prefix)
6508 {
6509 GString* _tmp0_;
6510 gchar* _tmp1_;
6511 gchar* _tmp2_;
6512 g_return_if_fail (self != NULL);
6513 g_return_if_fail (symbol != NULL);
6514 g_return_if_fail (suffix != NULL);
6515 _tmp0_ = self->priv->buffer;
6516 _tmp1_ = vala_get_ccode_name ((ValaCodeNode*) symbol);
6517 _tmp2_ = _tmp1_;
6518 g_string_append_printf (_tmp0_, " c:type=\"%s%s\"", _tmp2_, suffix);
6519 _g_free0 (_tmp2_);
6520 if (symbol_prefix) {
6521 GString* _tmp3_;
6522 gchar* _tmp4_;
6523 gchar* _tmp5_;
6524 _tmp3_ = self->priv->buffer;
6525 _tmp4_ = vala_get_ccode_lower_case_suffix ((ValaSymbol*) symbol);
6526 _tmp5_ = _tmp4_;
6527 g_string_append_printf (_tmp3_, " c:symbol-prefix=\"%s\"", _tmp5_);
6528 _g_free0 (_tmp5_);
6529 }
6530 }
6531
6532 static void
vala_gir_writer_write_gtype_attributes(ValaGIRWriter * self,ValaTypeSymbol * symbol,gboolean symbol_prefix)6533 vala_gir_writer_write_gtype_attributes (ValaGIRWriter* self,
6534 ValaTypeSymbol* symbol,
6535 gboolean symbol_prefix)
6536 {
6537 GString* _tmp0_;
6538 gchar* _tmp1_;
6539 gchar* _tmp2_;
6540 GString* _tmp3_;
6541 gchar* _tmp4_;
6542 gchar* _tmp5_;
6543 g_return_if_fail (self != NULL);
6544 g_return_if_fail (symbol != NULL);
6545 vala_gir_writer_write_ctype_attributes (self, symbol, "", symbol_prefix);
6546 _tmp0_ = self->priv->buffer;
6547 _tmp1_ = vala_get_ccode_name ((ValaCodeNode*) symbol);
6548 _tmp2_ = _tmp1_;
6549 g_string_append_printf (_tmp0_, " glib:type-name=\"%s\"", _tmp2_);
6550 _g_free0 (_tmp2_);
6551 _tmp3_ = self->priv->buffer;
6552 _tmp4_ = vala_get_ccode_lower_case_prefix ((ValaSymbol*) symbol);
6553 _tmp5_ = _tmp4_;
6554 g_string_append_printf (_tmp3_, " glib:get-type=\"%sget_type\"", _tmp5_);
6555 _g_free0 (_tmp5_);
6556 }
6557
6558 static void
vala_gir_writer_write_type(ValaGIRWriter * self,ValaDataType * type,gint index,ValaParameterDirection direction)6559 vala_gir_writer_write_type (ValaGIRWriter* self,
6560 ValaDataType* type,
6561 gint index,
6562 ValaParameterDirection direction)
6563 {
6564 g_return_if_fail (self != NULL);
6565 g_return_if_fail (type != NULL);
6566 if (G_TYPE_CHECK_INSTANCE_TYPE (type, VALA_TYPE_ARRAY_TYPE)) {
6567 ValaArrayType* array_type = NULL;
6568 ValaArrayType* _tmp0_;
6569 GString* _tmp1_;
6570 gboolean _tmp2_ = FALSE;
6571 ValaArrayType* _tmp3_;
6572 gboolean _tmp4_;
6573 gboolean _tmp5_;
6574 const gchar* _tmp18_ = NULL;
6575 GString* _tmp19_;
6576 ValaArrayType* _tmp20_;
6577 ValaDataType* _tmp21_;
6578 ValaDataType* _tmp22_;
6579 gchar* _tmp23_;
6580 gchar* _tmp24_;
6581 GString* _tmp25_;
6582 gint _tmp26_;
6583 ValaArrayType* _tmp27_;
6584 ValaDataType* _tmp28_;
6585 ValaDataType* _tmp29_;
6586 gint _tmp30_;
6587 GString* _tmp31_;
6588 _tmp0_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (type, VALA_TYPE_ARRAY_TYPE, ValaArrayType));
6589 array_type = _tmp0_;
6590 vala_gir_writer_write_indent (self);
6591 _tmp1_ = self->priv->buffer;
6592 g_string_append_printf (_tmp1_, "<array");
6593 _tmp3_ = array_type;
6594 _tmp4_ = vala_array_type_get_fixed_length (_tmp3_);
6595 _tmp5_ = _tmp4_;
6596 if (_tmp5_) {
6597 ValaArrayType* _tmp6_;
6598 ValaExpression* _tmp7_;
6599 ValaExpression* _tmp8_;
6600 _tmp6_ = array_type;
6601 _tmp7_ = vala_array_type_get_length (_tmp6_);
6602 _tmp8_ = _tmp7_;
6603 _tmp2_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp8_, VALA_TYPE_INTEGER_LITERAL);
6604 } else {
6605 _tmp2_ = FALSE;
6606 }
6607 if (_tmp2_) {
6608 ValaIntegerLiteral* lit = NULL;
6609 ValaArrayType* _tmp9_;
6610 ValaExpression* _tmp10_;
6611 ValaExpression* _tmp11_;
6612 ValaIntegerLiteral* _tmp12_;
6613 GString* _tmp13_;
6614 ValaIntegerLiteral* _tmp14_;
6615 const gchar* _tmp15_;
6616 const gchar* _tmp16_;
6617 _tmp9_ = array_type;
6618 _tmp10_ = vala_array_type_get_length (_tmp9_);
6619 _tmp11_ = _tmp10_;
6620 _tmp12_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp11_, VALA_TYPE_INTEGER_LITERAL, ValaIntegerLiteral));
6621 lit = _tmp12_;
6622 _tmp13_ = self->priv->buffer;
6623 _tmp14_ = lit;
6624 _tmp15_ = vala_integer_literal_get_value (_tmp14_);
6625 _tmp16_ = _tmp15_;
6626 g_string_append_printf (_tmp13_, " fixed-size=\"%i\"", atoi (_tmp16_));
6627 _vala_code_node_unref0 (lit);
6628 } else {
6629 if (index != -1) {
6630 GString* _tmp17_;
6631 _tmp17_ = self->priv->buffer;
6632 g_string_append_printf (_tmp17_, " length=\"%i\"", index);
6633 }
6634 }
6635 if (direction == VALA_PARAMETER_DIRECTION_IN) {
6636 _tmp18_ = "*";
6637 } else {
6638 _tmp18_ = "**";
6639 }
6640 _tmp19_ = self->priv->buffer;
6641 _tmp20_ = array_type;
6642 _tmp21_ = vala_array_type_get_element_type (_tmp20_);
6643 _tmp22_ = _tmp21_;
6644 _tmp23_ = vala_get_ccode_name ((ValaCodeNode*) _tmp22_);
6645 _tmp24_ = _tmp23_;
6646 g_string_append_printf (_tmp19_, " c:type=\"%s%s\"", _tmp24_, _tmp18_);
6647 _g_free0 (_tmp24_);
6648 _tmp25_ = self->priv->buffer;
6649 g_string_append_printf (_tmp25_, ">\n");
6650 _tmp26_ = self->priv->indent;
6651 self->priv->indent = _tmp26_ + 1;
6652 _tmp27_ = array_type;
6653 _tmp28_ = vala_array_type_get_element_type (_tmp27_);
6654 _tmp29_ = _tmp28_;
6655 vala_gir_writer_write_type (self, _tmp29_, -1, VALA_PARAMETER_DIRECTION_IN);
6656 _tmp30_ = self->priv->indent;
6657 self->priv->indent = _tmp30_ - 1;
6658 vala_gir_writer_write_indent (self);
6659 _tmp31_ = self->priv->buffer;
6660 g_string_append_printf (_tmp31_, "</array>\n");
6661 _vala_code_node_unref0 (array_type);
6662 } else {
6663 if (G_TYPE_CHECK_INSTANCE_TYPE (type, VALA_TYPE_VOID_TYPE)) {
6664 GString* _tmp32_;
6665 vala_gir_writer_write_indent (self);
6666 _tmp32_ = self->priv->buffer;
6667 g_string_append_printf (_tmp32_, "<type name=\"none\" c:type=\"void\"/>\n");
6668 } else {
6669 if (G_TYPE_CHECK_INSTANCE_TYPE (type, VALA_TYPE_POINTER_TYPE)) {
6670 const gchar* _tmp33_ = NULL;
6671 GString* _tmp34_;
6672 gchar* _tmp35_;
6673 gchar* _tmp36_;
6674 vala_gir_writer_write_indent (self);
6675 if (direction == VALA_PARAMETER_DIRECTION_IN) {
6676 _tmp33_ = "";
6677 } else {
6678 _tmp33_ = "*";
6679 }
6680 _tmp34_ = self->priv->buffer;
6681 _tmp35_ = vala_get_ccode_name ((ValaCodeNode*) type);
6682 _tmp36_ = _tmp35_;
6683 g_string_append_printf (_tmp34_, "<type name=\"gpointer\" c:type=\"%s%s\"/>\n", _tmp36_, _tmp33_);
6684 _g_free0 (_tmp36_);
6685 } else {
6686 if (G_TYPE_CHECK_INSTANCE_TYPE (type, VALA_TYPE_DELEGATE_TYPE)) {
6687 ValaDelegateType* deleg_type = NULL;
6688 ValaDelegateType* _tmp37_;
6689 const gchar* _tmp38_ = NULL;
6690 GString* _tmp39_;
6691 ValaDelegateType* _tmp40_;
6692 ValaDelegate* _tmp41_;
6693 ValaDelegate* _tmp42_;
6694 gchar* _tmp43_;
6695 gchar* _tmp44_;
6696 gchar* _tmp45_;
6697 gchar* _tmp46_;
6698 _tmp37_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (type, VALA_TYPE_DELEGATE_TYPE, ValaDelegateType));
6699 deleg_type = _tmp37_;
6700 vala_gir_writer_write_indent (self);
6701 if (direction == VALA_PARAMETER_DIRECTION_IN) {
6702 _tmp38_ = "";
6703 } else {
6704 _tmp38_ = "*";
6705 }
6706 _tmp39_ = self->priv->buffer;
6707 _tmp40_ = deleg_type;
6708 _tmp41_ = vala_delegate_type_get_delegate_symbol (_tmp40_);
6709 _tmp42_ = _tmp41_;
6710 _tmp43_ = vala_gir_writer_gi_type_name (self, (ValaTypeSymbol*) _tmp42_);
6711 _tmp44_ = _tmp43_;
6712 _tmp45_ = vala_get_ccode_name ((ValaCodeNode*) type);
6713 _tmp46_ = _tmp45_;
6714 g_string_append_printf (_tmp39_, "<type name=\"%s\" c:type=\"%s%s\"/>\n", _tmp44_, _tmp46_, _tmp38_);
6715 _g_free0 (_tmp46_);
6716 _g_free0 (_tmp44_);
6717 _vala_code_node_unref0 (deleg_type);
6718 } else {
6719 ValaTypeSymbol* _tmp47_;
6720 ValaTypeSymbol* _tmp48_;
6721 _tmp47_ = vala_data_type_get_type_symbol (type);
6722 _tmp48_ = _tmp47_;
6723 if (_tmp48_ != NULL) {
6724 gchar* type_name = NULL;
6725 ValaTypeSymbol* _tmp49_;
6726 ValaTypeSymbol* _tmp50_;
6727 gchar* _tmp51_;
6728 gboolean is_array = FALSE;
6729 gboolean _tmp52_ = FALSE;
6730 const gchar* _tmp53_;
6731 const gchar* _tmp55_ = NULL;
6732 const gchar* _tmp56_ = NULL;
6733 GString* _tmp57_;
6734 ValaTypeSymbol* _tmp58_;
6735 ValaTypeSymbol* _tmp59_;
6736 gchar* _tmp60_;
6737 gchar* _tmp61_;
6738 gchar* _tmp62_;
6739 gchar* _tmp63_;
6740 ValaList* type_arguments = NULL;
6741 ValaList* _tmp64_;
6742 ValaList* _tmp65_;
6743 ValaList* _tmp66_;
6744 gint _tmp67_;
6745 gint _tmp68_;
6746 vala_gir_writer_write_indent (self);
6747 _tmp49_ = vala_data_type_get_type_symbol (type);
6748 _tmp50_ = _tmp49_;
6749 _tmp51_ = vala_gir_writer_gi_type_name (self, _tmp50_);
6750 type_name = _tmp51_;
6751 is_array = FALSE;
6752 _tmp53_ = type_name;
6753 if (g_strcmp0 (_tmp53_, "GLib.Array") == 0) {
6754 _tmp52_ = TRUE;
6755 } else {
6756 const gchar* _tmp54_;
6757 _tmp54_ = type_name;
6758 _tmp52_ = g_strcmp0 (_tmp54_, "GLib.PtrArray") == 0;
6759 }
6760 if (_tmp52_) {
6761 is_array = TRUE;
6762 }
6763 if (is_array) {
6764 _tmp55_ = "array";
6765 } else {
6766 _tmp55_ = "type";
6767 }
6768 if (direction == VALA_PARAMETER_DIRECTION_IN) {
6769 _tmp56_ = "";
6770 } else {
6771 _tmp56_ = "*";
6772 }
6773 _tmp57_ = self->priv->buffer;
6774 _tmp58_ = vala_data_type_get_type_symbol (type);
6775 _tmp59_ = _tmp58_;
6776 _tmp60_ = vala_gir_writer_gi_type_name (self, _tmp59_);
6777 _tmp61_ = _tmp60_;
6778 _tmp62_ = vala_get_ccode_name ((ValaCodeNode*) type);
6779 _tmp63_ = _tmp62_;
6780 g_string_append_printf (_tmp57_, "<%s name=\"%s\" c:type=\"%s%s\"", _tmp55_, _tmp61_, _tmp63_, _tmp56_);
6781 _g_free0 (_tmp63_);
6782 _g_free0 (_tmp61_);
6783 _tmp64_ = vala_data_type_get_type_arguments (type);
6784 _tmp65_ = _vala_iterable_ref0 (_tmp64_);
6785 type_arguments = _tmp65_;
6786 _tmp66_ = type_arguments;
6787 _tmp67_ = vala_collection_get_size ((ValaCollection*) _tmp66_);
6788 _tmp68_ = _tmp67_;
6789 if (_tmp68_ == 0) {
6790 GString* _tmp69_;
6791 _tmp69_ = self->priv->buffer;
6792 g_string_append_printf (_tmp69_, "/>\n");
6793 } else {
6794 GString* _tmp70_;
6795 gint _tmp71_;
6796 gint _tmp82_;
6797 const gchar* _tmp83_ = NULL;
6798 GString* _tmp84_;
6799 _tmp70_ = self->priv->buffer;
6800 g_string_append_printf (_tmp70_, ">\n");
6801 _tmp71_ = self->priv->indent;
6802 self->priv->indent = _tmp71_ + 1;
6803 {
6804 ValaList* _type_argument_list = NULL;
6805 ValaList* _tmp72_;
6806 ValaList* _tmp73_;
6807 gint _type_argument_size = 0;
6808 ValaList* _tmp74_;
6809 gint _tmp75_;
6810 gint _tmp76_;
6811 gint _type_argument_index = 0;
6812 _tmp72_ = type_arguments;
6813 _tmp73_ = _vala_iterable_ref0 (_tmp72_);
6814 _type_argument_list = _tmp73_;
6815 _tmp74_ = _type_argument_list;
6816 _tmp75_ = vala_collection_get_size ((ValaCollection*) _tmp74_);
6817 _tmp76_ = _tmp75_;
6818 _type_argument_size = _tmp76_;
6819 _type_argument_index = -1;
6820 while (TRUE) {
6821 gint _tmp77_;
6822 gint _tmp78_;
6823 ValaDataType* type_argument = NULL;
6824 ValaList* _tmp79_;
6825 gpointer _tmp80_;
6826 ValaDataType* _tmp81_;
6827 _type_argument_index = _type_argument_index + 1;
6828 _tmp77_ = _type_argument_index;
6829 _tmp78_ = _type_argument_size;
6830 if (!(_tmp77_ < _tmp78_)) {
6831 break;
6832 }
6833 _tmp79_ = _type_argument_list;
6834 _tmp80_ = vala_list_get (_tmp79_, _type_argument_index);
6835 type_argument = (ValaDataType*) _tmp80_;
6836 _tmp81_ = type_argument;
6837 vala_gir_writer_write_type (self, _tmp81_, -1, VALA_PARAMETER_DIRECTION_IN);
6838 _vala_code_node_unref0 (type_argument);
6839 }
6840 _vala_iterable_unref0 (_type_argument_list);
6841 }
6842 _tmp82_ = self->priv->indent;
6843 self->priv->indent = _tmp82_ - 1;
6844 vala_gir_writer_write_indent (self);
6845 if (is_array) {
6846 _tmp83_ = "array";
6847 } else {
6848 _tmp83_ = "type";
6849 }
6850 _tmp84_ = self->priv->buffer;
6851 g_string_append_printf (_tmp84_, "</%s>\n", _tmp83_);
6852 }
6853 _vala_iterable_unref0 (type_arguments);
6854 _g_free0 (type_name);
6855 } else {
6856 if (G_TYPE_CHECK_INSTANCE_TYPE (type, VALA_TYPE_GENERIC_TYPE)) {
6857 GString* _tmp85_;
6858 vala_gir_writer_write_indent (self);
6859 _tmp85_ = self->priv->buffer;
6860 g_string_append (_tmp85_, "<type name=\"gpointer\" c:type=\"gpointer\"/>\n");
6861 } else {
6862 GString* _tmp86_;
6863 gchar* _tmp87_;
6864 gchar* _tmp88_;
6865 vala_gir_writer_write_indent (self);
6866 _tmp86_ = self->priv->buffer;
6867 _tmp87_ = vala_code_node_to_string ((ValaCodeNode*) type);
6868 _tmp88_ = _tmp87_;
6869 g_string_append_printf (_tmp86_, "<type name=\"%s\"/>\n", _tmp88_);
6870 _g_free0 (_tmp88_);
6871 }
6872 }
6873 }
6874 }
6875 }
6876 }
6877 }
6878
6879 static gboolean
string_contains(const gchar * self,const gchar * needle)6880 string_contains (const gchar* self,
6881 const gchar* needle)
6882 {
6883 gchar* _tmp0_;
6884 gboolean result = FALSE;
6885 g_return_val_if_fail (self != NULL, FALSE);
6886 g_return_val_if_fail (needle != NULL, FALSE);
6887 _tmp0_ = strstr ((gchar*) self, (gchar*) needle);
6888 result = _tmp0_ != NULL;
6889 return result;
6890 }
6891
6892 static gchar*
vala_gir_writer_get_full_gir_name(ValaGIRWriter * self,ValaSymbol * sym)6893 vala_gir_writer_get_full_gir_name (ValaGIRWriter* self,
6894 ValaSymbol* sym)
6895 {
6896 gchar* gir_fullname = NULL;
6897 gchar* _tmp0_;
6898 const gchar* _tmp1_;
6899 gchar* gir_name = NULL;
6900 gchar* _tmp2_;
6901 gboolean _tmp3_ = FALSE;
6902 const gchar* _tmp4_;
6903 const gchar* _tmp6_;
6904 ValaSymbol* _tmp10_;
6905 ValaSymbol* _tmp11_;
6906 const gchar* _tmp12_;
6907 const gchar* _tmp13_;
6908 gchar* parent_gir_name = NULL;
6909 ValaSymbol* _tmp17_;
6910 ValaSymbol* _tmp18_;
6911 gchar* _tmp19_;
6912 const gchar* _tmp20_;
6913 gchar* _tmp21_ = NULL;
6914 const gchar* _tmp22_;
6915 gchar* self_gir_name = NULL;
6916 gchar* _tmp27_;
6917 const gchar* _tmp28_;
6918 gchar* result = NULL;
6919 g_return_val_if_fail (self != NULL, NULL);
6920 g_return_val_if_fail (sym != NULL, NULL);
6921 _tmp0_ = vala_code_node_get_attribute_string ((ValaCodeNode*) sym, "GIR", "fullname", NULL);
6922 gir_fullname = _tmp0_;
6923 _tmp1_ = gir_fullname;
6924 if (_tmp1_ != NULL) {
6925 result = gir_fullname;
6926 return result;
6927 }
6928 _tmp2_ = vala_code_node_get_attribute_string ((ValaCodeNode*) sym, "GIR", "name", NULL);
6929 gir_name = _tmp2_;
6930 _tmp4_ = gir_name;
6931 if (_tmp4_ == NULL) {
6932 _tmp3_ = G_TYPE_CHECK_INSTANCE_TYPE (sym, VALA_TYPE_NAMESPACE);
6933 } else {
6934 _tmp3_ = FALSE;
6935 }
6936 if (_tmp3_) {
6937 gchar* _tmp5_;
6938 _tmp5_ = vala_code_node_get_attribute_string ((ValaCodeNode*) sym, "CCode", "gir_namespace", NULL);
6939 _g_free0 (gir_name);
6940 gir_name = _tmp5_;
6941 }
6942 _tmp6_ = gir_name;
6943 if (_tmp6_ == NULL) {
6944 const gchar* _tmp7_;
6945 const gchar* _tmp8_;
6946 gchar* _tmp9_;
6947 _tmp7_ = vala_symbol_get_name (sym);
6948 _tmp8_ = _tmp7_;
6949 _tmp9_ = g_strdup (_tmp8_);
6950 _g_free0 (gir_name);
6951 gir_name = _tmp9_;
6952 }
6953 _tmp10_ = vala_symbol_get_parent_symbol (sym);
6954 _tmp11_ = _tmp10_;
6955 if (_tmp11_ == NULL) {
6956 result = gir_name;
6957 _g_free0 (gir_fullname);
6958 return result;
6959 }
6960 _tmp12_ = vala_symbol_get_name (sym);
6961 _tmp13_ = _tmp12_;
6962 if (_tmp13_ == NULL) {
6963 ValaSymbol* _tmp14_;
6964 ValaSymbol* _tmp15_;
6965 gchar* _tmp16_;
6966 _tmp14_ = vala_symbol_get_parent_symbol (sym);
6967 _tmp15_ = _tmp14_;
6968 _tmp16_ = vala_gir_writer_get_full_gir_name (self, _tmp15_);
6969 result = _tmp16_;
6970 _g_free0 (gir_name);
6971 _g_free0 (gir_fullname);
6972 return result;
6973 }
6974 _tmp17_ = vala_symbol_get_parent_symbol (sym);
6975 _tmp18_ = _tmp17_;
6976 _tmp19_ = vala_gir_writer_get_full_gir_name (self, _tmp18_);
6977 parent_gir_name = _tmp19_;
6978 _tmp20_ = parent_gir_name;
6979 if (_tmp20_ == NULL) {
6980 result = gir_name;
6981 _g_free0 (parent_gir_name);
6982 _g_free0 (gir_fullname);
6983 return result;
6984 }
6985 _tmp22_ = gir_name;
6986 if (g_str_has_prefix (_tmp22_, ".")) {
6987 const gchar* _tmp23_;
6988 gchar* _tmp24_;
6989 _tmp23_ = gir_name;
6990 _tmp24_ = string_substring (_tmp23_, (glong) 1, (glong) -1);
6991 _g_free0 (_tmp21_);
6992 _tmp21_ = _tmp24_;
6993 } else {
6994 const gchar* _tmp25_;
6995 gchar* _tmp26_;
6996 _tmp25_ = gir_name;
6997 _tmp26_ = g_strdup (_tmp25_);
6998 _g_free0 (_tmp21_);
6999 _tmp21_ = _tmp26_;
7000 }
7001 _tmp27_ = g_strdup (_tmp21_);
7002 self_gir_name = _tmp27_;
7003 _tmp28_ = parent_gir_name;
7004 if (string_contains (_tmp28_, ".")) {
7005 const gchar* _tmp29_;
7006 const gchar* _tmp30_;
7007 gchar* _tmp31_;
7008 _tmp29_ = parent_gir_name;
7009 _tmp30_ = self_gir_name;
7010 _tmp31_ = g_strdup_printf ("%s%s", _tmp29_, _tmp30_);
7011 result = _tmp31_;
7012 _g_free0 (self_gir_name);
7013 _g_free0 (_tmp21_);
7014 _g_free0 (parent_gir_name);
7015 _g_free0 (gir_name);
7016 _g_free0 (gir_fullname);
7017 return result;
7018 } else {
7019 const gchar* _tmp32_;
7020 const gchar* _tmp33_;
7021 gchar* _tmp34_;
7022 _tmp32_ = parent_gir_name;
7023 _tmp33_ = self_gir_name;
7024 _tmp34_ = g_strdup_printf ("%s.%s", _tmp32_, _tmp33_);
7025 result = _tmp34_;
7026 _g_free0 (self_gir_name);
7027 _g_free0 (_tmp21_);
7028 _g_free0 (parent_gir_name);
7029 _g_free0 (gir_name);
7030 _g_free0 (gir_fullname);
7031 return result;
7032 }
7033 _g_free0 (self_gir_name);
7034 _g_free0 (_tmp21_);
7035 _g_free0 (parent_gir_name);
7036 _g_free0 (gir_name);
7037 _g_free0 (gir_fullname);
7038 }
7039
7040 static gchar*
vala_gir_writer_gi_type_name(ValaGIRWriter * self,ValaTypeSymbol * type_symbol)7041 vala_gir_writer_gi_type_name (ValaGIRWriter* self,
7042 ValaTypeSymbol* type_symbol)
7043 {
7044 ValaSymbol* parent = NULL;
7045 ValaSymbol* _tmp0_;
7046 ValaSymbol* _tmp1_;
7047 ValaSymbol* _tmp2_;
7048 ValaSymbol* _tmp3_;
7049 gchar* _tmp55_;
7050 gchar* result = NULL;
7051 g_return_val_if_fail (self != NULL, NULL);
7052 g_return_val_if_fail (type_symbol != NULL, NULL);
7053 _tmp0_ = vala_symbol_get_parent_symbol ((ValaSymbol*) type_symbol);
7054 _tmp1_ = _tmp0_;
7055 _tmp2_ = _vala_code_node_ref0 (_tmp1_);
7056 parent = _tmp2_;
7057 _tmp3_ = parent;
7058 if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp3_, VALA_TYPE_NAMESPACE)) {
7059 ValaNamespace* ns = NULL;
7060 ValaSymbol* _tmp4_;
7061 ValaNamespace* _tmp5_;
7062 gchar* _tmp6_ = NULL;
7063 ValaNamespace* _tmp7_;
7064 gchar* _tmp8_;
7065 gchar* ns_gir_name = NULL;
7066 gchar* _tmp13_;
7067 const gchar* _tmp14_;
7068 _tmp4_ = parent;
7069 _tmp5_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (_tmp4_, VALA_TYPE_NAMESPACE) ? ((ValaNamespace*) _tmp4_) : NULL);
7070 ns = _tmp5_;
7071 _tmp7_ = ns;
7072 _tmp8_ = vala_code_node_get_attribute_string ((ValaCodeNode*) _tmp7_, "GIR", "name", NULL);
7073 _tmp6_ = _tmp8_;
7074 if (_tmp6_ == NULL) {
7075 ValaNamespace* _tmp9_;
7076 const gchar* _tmp10_;
7077 const gchar* _tmp11_;
7078 gchar* _tmp12_;
7079 _tmp9_ = ns;
7080 _tmp10_ = vala_symbol_get_name ((ValaSymbol*) _tmp9_);
7081 _tmp11_ = _tmp10_;
7082 _tmp12_ = g_strdup (_tmp11_);
7083 _g_free0 (_tmp6_);
7084 _tmp6_ = _tmp12_;
7085 }
7086 _tmp13_ = _tmp6_;
7087 _tmp6_ = NULL;
7088 ns_gir_name = _tmp13_;
7089 _tmp14_ = ns_gir_name;
7090 if (_tmp14_ != NULL) {
7091 ValaSourceReference* _tmp15_;
7092 ValaSourceReference* _tmp16_;
7093 ValaSourceFile* _tmp17_;
7094 ValaSourceFile* _tmp18_;
7095 const gchar* _tmp19_;
7096 const gchar* _tmp20_;
7097 _tmp15_ = vala_code_node_get_source_reference ((ValaCodeNode*) type_symbol);
7098 _tmp16_ = _tmp15_;
7099 _tmp17_ = vala_source_reference_get_file (_tmp16_);
7100 _tmp18_ = _tmp17_;
7101 _tmp19_ = vala_source_file_get_gir_namespace (_tmp18_);
7102 _tmp20_ = _tmp19_;
7103 if (_tmp20_ != NULL) {
7104 ValaGIRWriterGIRNamespace external = {0};
7105 ValaSourceReference* _tmp21_;
7106 ValaSourceReference* _tmp22_;
7107 ValaSourceFile* _tmp23_;
7108 ValaSourceFile* _tmp24_;
7109 const gchar* _tmp25_;
7110 const gchar* _tmp26_;
7111 ValaSourceReference* _tmp27_;
7112 ValaSourceReference* _tmp28_;
7113 ValaSourceFile* _tmp29_;
7114 ValaSourceFile* _tmp30_;
7115 const gchar* _tmp31_;
7116 const gchar* _tmp32_;
7117 ValaArrayList* _tmp33_;
7118 ValaGIRWriterGIRNamespace _tmp34_;
7119 gchar* gir_fullname = NULL;
7120 gchar* _tmp37_;
7121 const gchar* _tmp38_;
7122 gchar* _tmp39_ = NULL;
7123 gchar* _tmp40_;
7124 gchar* type_name = NULL;
7125 gchar* _tmp44_;
7126 ValaSourceReference* _tmp45_;
7127 ValaSourceReference* _tmp46_;
7128 ValaSourceFile* _tmp47_;
7129 ValaSourceFile* _tmp48_;
7130 const gchar* _tmp49_;
7131 const gchar* _tmp50_;
7132 const gchar* _tmp51_;
7133 gchar* _tmp52_;
7134 _tmp21_ = vala_code_node_get_source_reference ((ValaCodeNode*) type_symbol);
7135 _tmp22_ = _tmp21_;
7136 _tmp23_ = vala_source_reference_get_file (_tmp22_);
7137 _tmp24_ = _tmp23_;
7138 _tmp25_ = vala_source_file_get_gir_namespace (_tmp24_);
7139 _tmp26_ = _tmp25_;
7140 _tmp27_ = vala_code_node_get_source_reference ((ValaCodeNode*) type_symbol);
7141 _tmp28_ = _tmp27_;
7142 _tmp29_ = vala_source_reference_get_file (_tmp28_);
7143 _tmp30_ = _tmp29_;
7144 _tmp31_ = vala_source_file_get_gir_version (_tmp30_);
7145 _tmp32_ = _tmp31_;
7146 vala_gir_writer_gir_namespace_init (&external, _tmp26_, _tmp32_);
7147 _tmp33_ = self->priv->externals;
7148 _tmp34_ = external;
7149 if (!vala_collection_contains ((ValaCollection*) _tmp33_, &_tmp34_)) {
7150 ValaArrayList* _tmp35_;
7151 ValaGIRWriterGIRNamespace _tmp36_;
7152 _tmp35_ = self->priv->externals;
7153 _tmp36_ = external;
7154 vala_collection_add ((ValaCollection*) _tmp35_, &_tmp36_);
7155 }
7156 _tmp37_ = vala_code_node_get_attribute_string ((ValaCodeNode*) type_symbol, "GIR", "fullname", NULL);
7157 gir_fullname = _tmp37_;
7158 _tmp38_ = gir_fullname;
7159 if (_tmp38_ != NULL) {
7160 result = gir_fullname;
7161 vala_gir_writer_gir_namespace_destroy (&external);
7162 _g_free0 (ns_gir_name);
7163 _g_free0 (_tmp6_);
7164 _vala_code_node_unref0 (ns);
7165 _vala_code_node_unref0 (parent);
7166 return result;
7167 }
7168 _tmp40_ = vala_code_node_get_attribute_string ((ValaCodeNode*) type_symbol, "GIR", "name", NULL);
7169 _tmp39_ = _tmp40_;
7170 if (_tmp39_ == NULL) {
7171 const gchar* _tmp41_;
7172 const gchar* _tmp42_;
7173 gchar* _tmp43_;
7174 _tmp41_ = vala_symbol_get_name ((ValaSymbol*) type_symbol);
7175 _tmp42_ = _tmp41_;
7176 _tmp43_ = g_strdup (_tmp42_);
7177 _g_free0 (_tmp39_);
7178 _tmp39_ = _tmp43_;
7179 }
7180 _tmp44_ = _tmp39_;
7181 _tmp39_ = NULL;
7182 type_name = _tmp44_;
7183 _tmp45_ = vala_code_node_get_source_reference ((ValaCodeNode*) type_symbol);
7184 _tmp46_ = _tmp45_;
7185 _tmp47_ = vala_source_reference_get_file (_tmp46_);
7186 _tmp48_ = _tmp47_;
7187 _tmp49_ = vala_source_file_get_gir_namespace (_tmp48_);
7188 _tmp50_ = _tmp49_;
7189 _tmp51_ = type_name;
7190 _tmp52_ = g_strdup_printf ("%s.%s", _tmp50_, _tmp51_);
7191 result = _tmp52_;
7192 _g_free0 (type_name);
7193 _g_free0 (_tmp39_);
7194 _g_free0 (gir_fullname);
7195 vala_gir_writer_gir_namespace_destroy (&external);
7196 _g_free0 (ns_gir_name);
7197 _g_free0 (_tmp6_);
7198 _vala_code_node_unref0 (ns);
7199 _vala_code_node_unref0 (parent);
7200 return result;
7201 } else {
7202 ValaHashSet* _tmp53_;
7203 ValaNamespace* _tmp54_;
7204 _tmp53_ = self->priv->unannotated_namespaces;
7205 _tmp54_ = ns;
7206 vala_collection_add ((ValaCollection*) _tmp53_, _tmp54_);
7207 }
7208 }
7209 _g_free0 (ns_gir_name);
7210 _g_free0 (_tmp6_);
7211 _vala_code_node_unref0 (ns);
7212 }
7213 _tmp55_ = vala_gir_writer_get_full_gir_name (self, (ValaSymbol*) type_symbol);
7214 result = _tmp55_;
7215 _vala_code_node_unref0 (parent);
7216 return result;
7217 }
7218
7219 static gchar*
vala_gir_writer_literal_expression_to_value_string(ValaGIRWriter * self,ValaExpression * literal)7220 vala_gir_writer_literal_expression_to_value_string (ValaGIRWriter* self,
7221 ValaExpression* literal)
7222 {
7223 gchar* result = NULL;
7224 g_return_val_if_fail (self != NULL, NULL);
7225 g_return_val_if_fail (literal != NULL, NULL);
7226 if (G_TYPE_CHECK_INSTANCE_TYPE (literal, VALA_TYPE_STRING_LITERAL)) {
7227 ValaStringLiteral* lit = NULL;
7228 ValaStringLiteral* _tmp0_;
7229 ValaStringLiteral* _tmp1_;
7230 _tmp0_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (literal, VALA_TYPE_STRING_LITERAL) ? ((ValaStringLiteral*) literal) : NULL);
7231 lit = _tmp0_;
7232 _tmp1_ = lit;
7233 if (_tmp1_ != NULL) {
7234 ValaStringLiteral* _tmp2_;
7235 gchar* _tmp3_;
7236 gchar* _tmp4_;
7237 gchar* _tmp5_;
7238 gchar* _tmp6_;
7239 _tmp2_ = lit;
7240 _tmp3_ = vala_string_literal_eval (_tmp2_);
7241 _tmp4_ = _tmp3_;
7242 _tmp5_ = g_markup_escape_text (_tmp4_, (gssize) -1);
7243 _tmp6_ = _tmp5_;
7244 _g_free0 (_tmp4_);
7245 result = _tmp6_;
7246 _vala_code_node_unref0 (lit);
7247 return result;
7248 }
7249 _vala_code_node_unref0 (lit);
7250 } else {
7251 if (G_TYPE_CHECK_INSTANCE_TYPE (literal, VALA_TYPE_CHARACTER_LITERAL)) {
7252 gchar* _tmp7_;
7253 _tmp7_ = g_strdup_printf ("%c", (gint) ((gchar) vala_character_literal_get_char (G_TYPE_CHECK_INSTANCE_CAST (literal, VALA_TYPE_CHARACTER_LITERAL, ValaCharacterLiteral))));
7254 result = _tmp7_;
7255 return result;
7256 } else {
7257 if (G_TYPE_CHECK_INSTANCE_TYPE (literal, VALA_TYPE_BOOLEAN_LITERAL)) {
7258 const gchar* _tmp8_ = NULL;
7259 gboolean _tmp9_;
7260 gboolean _tmp10_;
7261 gchar* _tmp11_;
7262 _tmp9_ = vala_boolean_literal_get_value (G_TYPE_CHECK_INSTANCE_CAST (literal, VALA_TYPE_BOOLEAN_LITERAL, ValaBooleanLiteral));
7263 _tmp10_ = _tmp9_;
7264 if (_tmp10_) {
7265 _tmp8_ = "true";
7266 } else {
7267 _tmp8_ = "false";
7268 }
7269 _tmp11_ = g_strdup (_tmp8_);
7270 result = _tmp11_;
7271 return result;
7272 } else {
7273 if (G_TYPE_CHECK_INSTANCE_TYPE (literal, VALA_TYPE_REAL_LITERAL)) {
7274 const gchar* _tmp12_;
7275 const gchar* _tmp13_;
7276 gchar* _tmp14_;
7277 _tmp12_ = vala_real_literal_get_value (G_TYPE_CHECK_INSTANCE_CAST (literal, VALA_TYPE_REAL_LITERAL, ValaRealLiteral));
7278 _tmp13_ = _tmp12_;
7279 _tmp14_ = g_strdup (_tmp13_);
7280 result = _tmp14_;
7281 return result;
7282 } else {
7283 if (G_TYPE_CHECK_INSTANCE_TYPE (literal, VALA_TYPE_INTEGER_LITERAL)) {
7284 const gchar* _tmp15_;
7285 const gchar* _tmp16_;
7286 gchar* _tmp17_;
7287 _tmp15_ = vala_integer_literal_get_value (G_TYPE_CHECK_INSTANCE_CAST (literal, VALA_TYPE_INTEGER_LITERAL, ValaIntegerLiteral));
7288 _tmp16_ = _tmp15_;
7289 _tmp17_ = g_strdup (_tmp16_);
7290 result = _tmp17_;
7291 return result;
7292 } else {
7293 if (G_TYPE_CHECK_INSTANCE_TYPE (literal, VALA_TYPE_UNARY_EXPRESSION)) {
7294 ValaUnaryExpression* unary = NULL;
7295 ValaUnaryExpression* _tmp18_;
7296 ValaUnaryExpression* _tmp19_;
7297 ValaUnaryOperator _tmp20_;
7298 ValaUnaryOperator _tmp21_;
7299 _tmp18_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (literal, VALA_TYPE_UNARY_EXPRESSION, ValaUnaryExpression));
7300 unary = _tmp18_;
7301 _tmp19_ = unary;
7302 _tmp20_ = vala_unary_expression_get_operator (_tmp19_);
7303 _tmp21_ = _tmp20_;
7304 if (_tmp21_ == VALA_UNARY_OPERATOR_MINUS) {
7305 ValaUnaryExpression* _tmp22_;
7306 ValaExpression* _tmp23_;
7307 ValaExpression* _tmp24_;
7308 _tmp22_ = unary;
7309 _tmp23_ = vala_unary_expression_get_inner (_tmp22_);
7310 _tmp24_ = _tmp23_;
7311 if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp24_, VALA_TYPE_REAL_LITERAL)) {
7312 ValaUnaryExpression* _tmp25_;
7313 ValaExpression* _tmp26_;
7314 ValaExpression* _tmp27_;
7315 const gchar* _tmp28_;
7316 const gchar* _tmp29_;
7317 gchar* _tmp30_;
7318 _tmp25_ = unary;
7319 _tmp26_ = vala_unary_expression_get_inner (_tmp25_);
7320 _tmp27_ = _tmp26_;
7321 _tmp28_ = vala_real_literal_get_value (G_TYPE_CHECK_INSTANCE_CAST (_tmp27_, VALA_TYPE_REAL_LITERAL, ValaRealLiteral));
7322 _tmp29_ = _tmp28_;
7323 _tmp30_ = g_strconcat ("-", _tmp29_, NULL);
7324 result = _tmp30_;
7325 _vala_code_node_unref0 (unary);
7326 return result;
7327 } else {
7328 ValaUnaryExpression* _tmp31_;
7329 ValaExpression* _tmp32_;
7330 ValaExpression* _tmp33_;
7331 _tmp31_ = unary;
7332 _tmp32_ = vala_unary_expression_get_inner (_tmp31_);
7333 _tmp33_ = _tmp32_;
7334 if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp33_, VALA_TYPE_INTEGER_LITERAL)) {
7335 ValaUnaryExpression* _tmp34_;
7336 ValaExpression* _tmp35_;
7337 ValaExpression* _tmp36_;
7338 const gchar* _tmp37_;
7339 const gchar* _tmp38_;
7340 gchar* _tmp39_;
7341 _tmp34_ = unary;
7342 _tmp35_ = vala_unary_expression_get_inner (_tmp34_);
7343 _tmp36_ = _tmp35_;
7344 _tmp37_ = vala_integer_literal_get_value (G_TYPE_CHECK_INSTANCE_CAST (_tmp36_, VALA_TYPE_INTEGER_LITERAL, ValaIntegerLiteral));
7345 _tmp38_ = _tmp37_;
7346 _tmp39_ = g_strconcat ("-", _tmp38_, NULL);
7347 result = _tmp39_;
7348 _vala_code_node_unref0 (unary);
7349 return result;
7350 }
7351 }
7352 }
7353 _vala_code_node_unref0 (unary);
7354 }
7355 }
7356 }
7357 }
7358 }
7359 }
7360 result = NULL;
7361 return result;
7362 }
7363
7364 static gboolean
vala_gir_writer_check_accessibility(ValaGIRWriter * self,ValaSymbol * sym)7365 vala_gir_writer_check_accessibility (ValaGIRWriter* self,
7366 ValaSymbol* sym)
7367 {
7368 gboolean _tmp0_ = FALSE;
7369 ValaSymbolAccessibility _tmp1_;
7370 ValaSymbolAccessibility _tmp2_;
7371 gboolean result = FALSE;
7372 g_return_val_if_fail (self != NULL, FALSE);
7373 g_return_val_if_fail (sym != NULL, FALSE);
7374 _tmp1_ = vala_symbol_get_access (sym);
7375 _tmp2_ = _tmp1_;
7376 if (_tmp2_ == VALA_SYMBOL_ACCESSIBILITY_PUBLIC) {
7377 _tmp0_ = TRUE;
7378 } else {
7379 ValaSymbolAccessibility _tmp3_;
7380 ValaSymbolAccessibility _tmp4_;
7381 _tmp3_ = vala_symbol_get_access (sym);
7382 _tmp4_ = _tmp3_;
7383 _tmp0_ = _tmp4_ == VALA_SYMBOL_ACCESSIBILITY_PROTECTED;
7384 }
7385 if (_tmp0_) {
7386 result = TRUE;
7387 return result;
7388 }
7389 result = FALSE;
7390 return result;
7391 }
7392
7393 static gboolean
vala_gir_writer_is_visibility(ValaGIRWriter * self,ValaSymbol * sym)7394 vala_gir_writer_is_visibility (ValaGIRWriter* self,
7395 ValaSymbol* sym)
7396 {
7397 gboolean result = FALSE;
7398 g_return_val_if_fail (self != NULL, FALSE);
7399 g_return_val_if_fail (sym != NULL, FALSE);
7400 result = vala_code_node_get_attribute_bool ((ValaCodeNode*) sym, "GIR", "visible", TRUE);
7401 return result;
7402 }
7403
7404 static gboolean
vala_gir_writer_has_namespace(ValaGIRWriter * self,ValaSymbol * sym)7405 vala_gir_writer_has_namespace (ValaGIRWriter* self,
7406 ValaSymbol* sym)
7407 {
7408 gboolean _tmp0_ = FALSE;
7409 ValaSymbol* _tmp1_;
7410 ValaSymbol* _tmp2_;
7411 ValaSourceReference* _tmp7_;
7412 ValaSourceReference* _tmp8_;
7413 const gchar* _tmp9_;
7414 const gchar* _tmp10_;
7415 gchar* _tmp11_;
7416 gchar* _tmp12_;
7417 gboolean result = FALSE;
7418 g_return_val_if_fail (self != NULL, FALSE);
7419 g_return_val_if_fail (sym != NULL, FALSE);
7420 _tmp1_ = vala_symbol_get_parent_symbol (sym);
7421 _tmp2_ = _tmp1_;
7422 if (!G_TYPE_CHECK_INSTANCE_TYPE (_tmp2_, VALA_TYPE_NAMESPACE)) {
7423 _tmp0_ = TRUE;
7424 } else {
7425 ValaSymbol* _tmp3_;
7426 ValaSymbol* _tmp4_;
7427 const gchar* _tmp5_;
7428 const gchar* _tmp6_;
7429 _tmp3_ = vala_symbol_get_parent_symbol (sym);
7430 _tmp4_ = _tmp3_;
7431 _tmp5_ = vala_symbol_get_name (_tmp4_);
7432 _tmp6_ = _tmp5_;
7433 _tmp0_ = _tmp6_ != NULL;
7434 }
7435 if (_tmp0_) {
7436 result = TRUE;
7437 return result;
7438 }
7439 _tmp7_ = vala_code_node_get_source_reference ((ValaCodeNode*) sym);
7440 _tmp8_ = _tmp7_;
7441 _tmp9_ = vala_symbol_get_name (sym);
7442 _tmp10_ = _tmp9_;
7443 _tmp11_ = g_strdup_printf ("`%s' must be part of namespace to be included in GIR", _tmp10_);
7444 _tmp12_ = _tmp11_;
7445 vala_report_warning (_tmp8_, _tmp12_);
7446 _g_free0 (_tmp12_);
7447 result = FALSE;
7448 return result;
7449 }
7450
7451 ValaGIRWriter*
vala_gir_writer_construct(GType object_type)7452 vala_gir_writer_construct (GType object_type)
7453 {
7454 ValaGIRWriter* self = NULL;
7455 self = (ValaGIRWriter*) vala_code_visitor_construct (object_type);
7456 return self;
7457 }
7458
7459 ValaGIRWriter*
vala_gir_writer_new(void)7460 vala_gir_writer_new (void)
7461 {
7462 return vala_gir_writer_construct (VALA_TYPE_GIR_WRITER);
7463 }
7464
7465 static void
vala_gir_writer_gir_namespace_init(ValaGIRWriterGIRNamespace * self,const gchar * ns,const gchar * version)7466 vala_gir_writer_gir_namespace_init (ValaGIRWriterGIRNamespace *self,
7467 const gchar* ns,
7468 const gchar* version)
7469 {
7470 gchar* _tmp0_;
7471 gchar* _tmp1_;
7472 g_return_if_fail (ns != NULL);
7473 g_return_if_fail (version != NULL);
7474 memset (self, 0, sizeof (ValaGIRWriterGIRNamespace));
7475 _tmp0_ = g_strdup (ns);
7476 _g_free0 ((*self).ns);
7477 (*self).ns = _tmp0_;
7478 _tmp1_ = g_strdup (version);
7479 _g_free0 ((*self).version);
7480 (*self).version = _tmp1_;
7481 }
7482
7483 static gboolean
vala_gir_writer_gir_namespace_equal(ValaGIRWriterGIRNamespace * self,ValaGIRWriterGIRNamespace * g)7484 vala_gir_writer_gir_namespace_equal (ValaGIRWriterGIRNamespace *self,
7485 ValaGIRWriterGIRNamespace* g)
7486 {
7487 gboolean _tmp0_ = FALSE;
7488 const gchar* _tmp1_;
7489 ValaGIRWriterGIRNamespace _tmp2_;
7490 const gchar* _tmp3_;
7491 gboolean result = FALSE;
7492 g_return_val_if_fail (g != NULL, FALSE);
7493 _tmp1_ = (*self).ns;
7494 _tmp2_ = *g;
7495 _tmp3_ = _tmp2_.ns;
7496 if (g_strcmp0 (_tmp1_, _tmp3_) == 0) {
7497 const gchar* _tmp4_;
7498 ValaGIRWriterGIRNamespace _tmp5_;
7499 const gchar* _tmp6_;
7500 _tmp4_ = (*self).version;
7501 _tmp5_ = *g;
7502 _tmp6_ = _tmp5_.version;
7503 _tmp0_ = g_strcmp0 (_tmp4_, _tmp6_) == 0;
7504 } else {
7505 _tmp0_ = FALSE;
7506 }
7507 result = _tmp0_;
7508 return result;
7509 }
7510
7511 static void
vala_gir_writer_gir_namespace_copy(const ValaGIRWriterGIRNamespace * self,ValaGIRWriterGIRNamespace * dest)7512 vala_gir_writer_gir_namespace_copy (const ValaGIRWriterGIRNamespace* self,
7513 ValaGIRWriterGIRNamespace* dest)
7514 {
7515 const gchar* _tmp0_;
7516 gchar* _tmp1_;
7517 const gchar* _tmp2_;
7518 gchar* _tmp3_;
7519 _tmp0_ = (*self).ns;
7520 _tmp1_ = g_strdup (_tmp0_);
7521 _g_free0 ((*dest).ns);
7522 (*dest).ns = _tmp1_;
7523 _tmp2_ = (*self).version;
7524 _tmp3_ = g_strdup (_tmp2_);
7525 _g_free0 ((*dest).version);
7526 (*dest).version = _tmp3_;
7527 }
7528
7529 static void
vala_gir_writer_gir_namespace_destroy(ValaGIRWriterGIRNamespace * self)7530 vala_gir_writer_gir_namespace_destroy (ValaGIRWriterGIRNamespace* self)
7531 {
7532 _g_free0 ((*self).ns);
7533 _g_free0 ((*self).version);
7534 }
7535
7536 static ValaGIRWriterGIRNamespace*
vala_gir_writer_gir_namespace_dup(const ValaGIRWriterGIRNamespace * self)7537 vala_gir_writer_gir_namespace_dup (const ValaGIRWriterGIRNamespace* self)
7538 {
7539 ValaGIRWriterGIRNamespace* dup;
7540 dup = g_new0 (ValaGIRWriterGIRNamespace, 1);
7541 vala_gir_writer_gir_namespace_copy (self, dup);
7542 return dup;
7543 }
7544
7545 static void
vala_gir_writer_gir_namespace_free(ValaGIRWriterGIRNamespace * self)7546 vala_gir_writer_gir_namespace_free (ValaGIRWriterGIRNamespace* self)
7547 {
7548 vala_gir_writer_gir_namespace_destroy (self);
7549 g_free (self);
7550 }
7551
7552 static GType
vala_gir_writer_gir_namespace_get_type_once(void)7553 vala_gir_writer_gir_namespace_get_type_once (void)
7554 {
7555 GType vala_gir_writer_gir_namespace_type_id;
7556 vala_gir_writer_gir_namespace_type_id = g_boxed_type_register_static ("ValaGIRWriterGIRNamespace", (GBoxedCopyFunc) vala_gir_writer_gir_namespace_dup, (GBoxedFreeFunc) vala_gir_writer_gir_namespace_free);
7557 return vala_gir_writer_gir_namespace_type_id;
7558 }
7559
7560 static GType
vala_gir_writer_gir_namespace_get_type(void)7561 vala_gir_writer_gir_namespace_get_type (void)
7562 {
7563 static volatile gsize vala_gir_writer_gir_namespace_type_id__volatile = 0;
7564 if (g_once_init_enter (&vala_gir_writer_gir_namespace_type_id__volatile)) {
7565 GType vala_gir_writer_gir_namespace_type_id;
7566 vala_gir_writer_gir_namespace_type_id = vala_gir_writer_gir_namespace_get_type_once ();
7567 g_once_init_leave (&vala_gir_writer_gir_namespace_type_id__volatile, vala_gir_writer_gir_namespace_type_id);
7568 }
7569 return vala_gir_writer_gir_namespace_type_id__volatile;
7570 }
7571
7572 static void
vala_gir_writer_class_init(ValaGIRWriterClass * klass,gpointer klass_data)7573 vala_gir_writer_class_init (ValaGIRWriterClass * klass,
7574 gpointer klass_data)
7575 {
7576 vala_gir_writer_parent_class = g_type_class_peek_parent (klass);
7577 ((ValaCodeVisitorClass *) klass)->finalize = vala_gir_writer_finalize;
7578 g_type_class_adjust_private_offset (klass, &ValaGIRWriter_private_offset);
7579 ((ValaGIRWriterClass *) klass)->get_interface_comment = (gchar* (*) (ValaGIRWriter*, ValaInterface*)) vala_gir_writer_real_get_interface_comment;
7580 ((ValaGIRWriterClass *) klass)->get_struct_comment = (gchar* (*) (ValaGIRWriter*, ValaStruct*)) vala_gir_writer_real_get_struct_comment;
7581 ((ValaGIRWriterClass *) klass)->get_enum_comment = (gchar* (*) (ValaGIRWriter*, ValaEnum*)) vala_gir_writer_real_get_enum_comment;
7582 ((ValaGIRWriterClass *) klass)->get_class_comment = (gchar* (*) (ValaGIRWriter*, ValaClass*)) vala_gir_writer_real_get_class_comment;
7583 ((ValaGIRWriterClass *) klass)->get_error_code_comment = (gchar* (*) (ValaGIRWriter*, ValaErrorCode*)) vala_gir_writer_real_get_error_code_comment;
7584 ((ValaGIRWriterClass *) klass)->get_enum_value_comment = (gchar* (*) (ValaGIRWriter*, ValaEnumValue*)) vala_gir_writer_real_get_enum_value_comment;
7585 ((ValaGIRWriterClass *) klass)->get_constant_comment = (gchar* (*) (ValaGIRWriter*, ValaConstant*)) vala_gir_writer_real_get_constant_comment;
7586 ((ValaGIRWriterClass *) klass)->get_error_domain_comment = (gchar* (*) (ValaGIRWriter*, ValaErrorDomain*)) vala_gir_writer_real_get_error_domain_comment;
7587 ((ValaGIRWriterClass *) klass)->get_field_comment = (gchar* (*) (ValaGIRWriter*, ValaField*)) vala_gir_writer_real_get_field_comment;
7588 ((ValaGIRWriterClass *) klass)->get_delegate_comment = (gchar* (*) (ValaGIRWriter*, ValaDelegate*)) vala_gir_writer_real_get_delegate_comment;
7589 ((ValaGIRWriterClass *) klass)->get_method_comment = (gchar* (*) (ValaGIRWriter*, ValaMethod*)) vala_gir_writer_real_get_method_comment;
7590 ((ValaGIRWriterClass *) klass)->get_property_comment = (gchar* (*) (ValaGIRWriter*, ValaProperty*)) vala_gir_writer_real_get_property_comment;
7591 ((ValaGIRWriterClass *) klass)->get_delegate_return_comment = (gchar* (*) (ValaGIRWriter*, ValaDelegate*)) vala_gir_writer_real_get_delegate_return_comment;
7592 ((ValaGIRWriterClass *) klass)->get_signal_return_comment = (gchar* (*) (ValaGIRWriter*, ValaSignal*)) vala_gir_writer_real_get_signal_return_comment;
7593 ((ValaGIRWriterClass *) klass)->get_method_return_comment = (gchar* (*) (ValaGIRWriter*, ValaMethod*)) vala_gir_writer_real_get_method_return_comment;
7594 ((ValaGIRWriterClass *) klass)->get_signal_comment = (gchar* (*) (ValaGIRWriter*, ValaSignal*)) vala_gir_writer_real_get_signal_comment;
7595 ((ValaGIRWriterClass *) klass)->get_parameter_comment = (gchar* (*) (ValaGIRWriter*, ValaParameter*)) vala_gir_writer_real_get_parameter_comment;
7596 ((ValaCodeVisitorClass *) klass)->visit_source_file = (void (*) (ValaCodeVisitor*, ValaSourceFile*)) vala_gir_writer_real_visit_source_file;
7597 ((ValaCodeVisitorClass *) klass)->visit_namespace = (void (*) (ValaCodeVisitor*, ValaNamespace*)) vala_gir_writer_real_visit_namespace;
7598 ((ValaCodeVisitorClass *) klass)->visit_class = (void (*) (ValaCodeVisitor*, ValaClass*)) vala_gir_writer_real_visit_class;
7599 ((ValaCodeVisitorClass *) klass)->visit_struct = (void (*) (ValaCodeVisitor*, ValaStruct*)) vala_gir_writer_real_visit_struct;
7600 ((ValaCodeVisitorClass *) klass)->visit_interface = (void (*) (ValaCodeVisitor*, ValaInterface*)) vala_gir_writer_real_visit_interface;
7601 ((ValaCodeVisitorClass *) klass)->visit_enum = (void (*) (ValaCodeVisitor*, ValaEnum*)) vala_gir_writer_real_visit_enum;
7602 ((ValaCodeVisitorClass *) klass)->visit_enum_value = (void (*) (ValaCodeVisitor*, ValaEnumValue*)) vala_gir_writer_real_visit_enum_value;
7603 ((ValaCodeVisitorClass *) klass)->visit_error_domain = (void (*) (ValaCodeVisitor*, ValaErrorDomain*)) vala_gir_writer_real_visit_error_domain;
7604 ((ValaCodeVisitorClass *) klass)->visit_error_code = (void (*) (ValaCodeVisitor*, ValaErrorCode*)) vala_gir_writer_real_visit_error_code;
7605 ((ValaCodeVisitorClass *) klass)->visit_constant = (void (*) (ValaCodeVisitor*, ValaConstant*)) vala_gir_writer_real_visit_constant;
7606 ((ValaCodeVisitorClass *) klass)->visit_field = (void (*) (ValaCodeVisitor*, ValaField*)) vala_gir_writer_real_visit_field;
7607 ((ValaCodeVisitorClass *) klass)->visit_delegate = (void (*) (ValaCodeVisitor*, ValaDelegate*)) vala_gir_writer_real_visit_delegate;
7608 ((ValaCodeVisitorClass *) klass)->visit_method = (void (*) (ValaCodeVisitor*, ValaMethod*)) vala_gir_writer_real_visit_method;
7609 ((ValaCodeVisitorClass *) klass)->visit_creation_method = (void (*) (ValaCodeVisitor*, ValaCreationMethod*)) vala_gir_writer_real_visit_creation_method;
7610 ((ValaCodeVisitorClass *) klass)->visit_property = (void (*) (ValaCodeVisitor*, ValaProperty*)) vala_gir_writer_real_visit_property;
7611 ((ValaCodeVisitorClass *) klass)->visit_signal = (void (*) (ValaCodeVisitor*, ValaSignal*)) vala_gir_writer_real_visit_signal;
7612 }
7613
7614 static void
vala_gir_writer_instance_init(ValaGIRWriter * self,gpointer klass)7615 vala_gir_writer_instance_init (ValaGIRWriter * self,
7616 gpointer klass)
7617 {
7618 GString* _tmp0_;
7619 GHashFunc _tmp1_;
7620 GEqualFunc _tmp2_;
7621 ValaHashSet* _tmp3_;
7622 GHashFunc _tmp4_;
7623 GEqualFunc _tmp5_;
7624 ValaHashSet* _tmp6_;
7625 GEqualFunc _tmp7_;
7626 ValaArrayList* _tmp8_;
7627 GEqualFunc _tmp9_;
7628 ValaArrayList* _tmp10_;
7629 ValaArrayList* _tmp11_;
7630 self->priv = vala_gir_writer_get_instance_private (self);
7631 _tmp0_ = g_string_new ("");
7632 self->priv->buffer = _tmp0_;
7633 _tmp1_ = g_direct_hash;
7634 _tmp2_ = g_direct_equal;
7635 _tmp3_ = vala_hash_set_new (VALA_TYPE_NAMESPACE, (GBoxedCopyFunc) vala_code_node_ref, (GDestroyNotify) vala_code_node_unref, _tmp1_, _tmp2_);
7636 self->priv->unannotated_namespaces = _tmp3_;
7637 _tmp4_ = g_direct_hash;
7638 _tmp5_ = g_direct_equal;
7639 _tmp6_ = vala_hash_set_new (VALA_TYPE_NAMESPACE, (GBoxedCopyFunc) vala_code_node_ref, (GDestroyNotify) vala_code_node_unref, _tmp4_, _tmp5_);
7640 self->priv->our_namespaces = _tmp6_;
7641 _tmp7_ = g_direct_equal;
7642 _tmp8_ = vala_array_list_new (VALA_TYPE_SYMBOL, (GBoxedCopyFunc) vala_code_node_ref, (GDestroyNotify) vala_code_node_unref, _tmp7_);
7643 self->priv->hierarchy = _tmp8_;
7644 _tmp9_ = g_direct_equal;
7645 _tmp10_ = vala_array_list_new (VALA_TYPE_CODE_NODE, (GBoxedCopyFunc) vala_code_node_ref, (GDestroyNotify) vala_code_node_unref, _tmp9_);
7646 self->priv->deferred = _tmp10_;
7647 _tmp11_ = vala_array_list_new (VALA_GIR_WRITER_TYPE_GIR_NAMESPACE, (GBoxedCopyFunc) vala_gir_writer_gir_namespace_dup, (GDestroyNotify) vala_gir_writer_gir_namespace_free, (GEqualFunc) vala_gir_writer_gir_namespace_equal);
7648 self->priv->externals = _tmp11_;
7649 }
7650
7651 static void
vala_gir_writer_finalize(ValaCodeVisitor * obj)7652 vala_gir_writer_finalize (ValaCodeVisitor * obj)
7653 {
7654 ValaGIRWriter * self;
7655 self = G_TYPE_CHECK_INSTANCE_CAST (obj, VALA_TYPE_GIR_WRITER, ValaGIRWriter);
7656 _vala_code_context_unref0 (self->priv->context);
7657 _g_free0 (self->priv->directory);
7658 _g_free0 (self->priv->gir_namespace);
7659 _g_free0 (self->priv->gir_version);
7660 _g_free0 (self->priv->gir_shared_library);
7661 _g_string_free0 (self->priv->buffer);
7662 _fclose0 (self->priv->stream);
7663 _vala_iterable_unref0 (self->priv->unannotated_namespaces);
7664 _vala_iterable_unref0 (self->priv->our_namespaces);
7665 _vala_iterable_unref0 (self->priv->hierarchy);
7666 _vala_iterable_unref0 (self->priv->deferred);
7667 _vala_code_node_unref0 (self->priv->gobject_type);
7668 _vala_code_node_unref0 (self->priv->ginitiallyunowned_type);
7669 _vala_code_node_unref0 (self->priv->gtypeinterface_type);
7670 _vala_code_node_unref0 (self->priv->gtypeinstance_type);
7671 _vala_code_node_unref0 (self->priv->gtype_type);
7672 _vala_iterable_unref0 (self->priv->externals);
7673 VALA_CODE_VISITOR_CLASS (vala_gir_writer_parent_class)->finalize (obj);
7674 }
7675
7676 /**
7677 * Code visitor generating .gir file for the public interface.
7678 */
7679 static GType
vala_gir_writer_get_type_once(void)7680 vala_gir_writer_get_type_once (void)
7681 {
7682 static const GTypeInfo g_define_type_info = { sizeof (ValaGIRWriterClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) vala_gir_writer_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (ValaGIRWriter), 0, (GInstanceInitFunc) vala_gir_writer_instance_init, NULL };
7683 GType vala_gir_writer_type_id;
7684 vala_gir_writer_type_id = g_type_register_static (VALA_TYPE_CODE_VISITOR, "ValaGIRWriter", &g_define_type_info, 0);
7685 ValaGIRWriter_private_offset = g_type_add_instance_private (vala_gir_writer_type_id, sizeof (ValaGIRWriterPrivate));
7686 return vala_gir_writer_type_id;
7687 }
7688
7689 GType
vala_gir_writer_get_type(void)7690 vala_gir_writer_get_type (void)
7691 {
7692 static volatile gsize vala_gir_writer_type_id__volatile = 0;
7693 if (g_once_init_enter (&vala_gir_writer_type_id__volatile)) {
7694 GType vala_gir_writer_type_id;
7695 vala_gir_writer_type_id = vala_gir_writer_get_type_once ();
7696 g_once_init_leave (&vala_gir_writer_type_id__volatile, vala_gir_writer_type_id);
7697 }
7698 return vala_gir_writer_type_id__volatile;
7699 }
7700
7701 static void
_vala_array_destroy(gpointer array,gint array_length,GDestroyNotify destroy_func)7702 _vala_array_destroy (gpointer array,
7703 gint array_length,
7704 GDestroyNotify destroy_func)
7705 {
7706 if ((array != NULL) && (destroy_func != NULL)) {
7707 gint i;
7708 for (i = 0; i < array_length; i = i + 1) {
7709 if (((gpointer*) array)[i] != NULL) {
7710 destroy_func (((gpointer*) array)[i]);
7711 }
7712 }
7713 }
7714 }
7715
7716 static void
_vala_array_free(gpointer array,gint array_length,GDestroyNotify destroy_func)7717 _vala_array_free (gpointer array,
7718 gint array_length,
7719 GDestroyNotify destroy_func)
7720 {
7721 _vala_array_destroy (array, array_length, destroy_func);
7722 g_free (array);
7723 }
7724
7725 static gint
_vala_array_length(gpointer array)7726 _vala_array_length (gpointer array)
7727 {
7728 gint length;
7729 length = 0;
7730 if (array) {
7731 while (((gpointer*) array)[length]) {
7732 length++;
7733 }
7734 }
7735 return length;
7736 }
7737
7738