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