1 /* valaccodebasemodule.c generated by valac, the Vala compiler
2  * generated from valaccodebasemodule.vala, do not modify */
3 
4 /* valaccodebasemodule.vala
5  *
6  * Copyright (C) 2006-2012  Jürg Billeter
7  * Copyright (C) 2006-2008  Raffaele Sandrini
8  *
9  * This library is free software; you can redistribute it and/or
10  * modify it under the terms of the GNU Lesser General Public
11  * License as published by the Free Software Foundation; either
12  * version 2.1 of the License, or (at your option) any later version.
13 
14  * This library is distributed in the hope that it will be useful,
15  * but WITHOUT ANY WARRANTY; without even the implied warranty of
16  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
17  * Lesser General Public License for more details.
18 
19  * You should have received a copy of the GNU Lesser General Public
20  * License along with this library; if not, write to the Free Software
21  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301  USA
22  *
23  * Author:
24  * 	Jürg Billeter <j@bitron.ch>
25  * 	Raffaele Sandrini <raffaele@sandrini.ch>
26  */
27 
28 #include "valacodegen.h"
29 #include <vala.h>
30 #include <valagee.h>
31 #include <glib-object.h>
32 #include <valaccode.h>
33 #include <glib.h>
34 #include <stdlib.h>
35 #include <string.h>
36 #include <stdio.h>
37 #include <glib/gstdio.h>
38 #include <float.h>
39 #include <math.h>
40 #include <gobject/gvaluecollector.h>
41 
42 #define _vala_code_context_unref0(var) ((var == NULL) ? NULL : (var = (vala_code_context_unref (var), NULL)))
43 #define _vala_code_node_unref0(var) ((var == NULL) ? NULL : (var = (vala_code_node_unref (var), NULL)))
44 #define _vala_ccode_base_module_emit_context_unref0(var) ((var == NULL) ? NULL : (var = (vala_ccode_base_module_emit_context_unref (var), NULL)))
45 #define _vala_iterable_unref0(var) ((var == NULL) ? NULL : (var = (vala_iterable_unref (var), NULL)))
46 #define _vala_ccode_node_unref0(var) ((var == NULL) ? NULL : (var = (vala_ccode_node_unref (var), NULL)))
47 #define _vala_ccode_file_unref0(var) ((var == NULL) ? NULL : (var = (vala_ccode_file_unref (var), NULL)))
48 #define _vala_map_unref0(var) ((var == NULL) ? NULL : (var = (vala_map_unref (var), NULL)))
49 #define _g_free0(var) (var = (g_free (var), NULL))
50 #define _vala_source_file_unref0(var) ((var == NULL) ? NULL : (var = (vala_source_file_unref (var), NULL)))
51 #define _fclose0(var) ((var == NULL) ? NULL : (var = (fclose (var), NULL)))
52 #define _vala_comment_unref0(var) ((var == NULL) ? NULL : (var = (vala_comment_unref (var), NULL)))
53 #define _vala_ccode_declarator_suffix_unref0(var) ((var == NULL) ? NULL : (var = (vala_ccode_declarator_suffix_unref (var), NULL)))
54 #define _vala_target_value_unref0(var) ((var == NULL) ? NULL : (var = (vala_target_value_unref (var), NULL)))
55 #define _vala_iterator_unref0(var) ((var == NULL) ? NULL : (var = (vala_iterator_unref (var), NULL)))
56 #define _g_regex_unref0(var) ((var == NULL) ? NULL : (var = (g_regex_unref (var), NULL)))
57 typedef struct _ValaCCodeBaseModuleParamSpecEmitContext ValaCCodeBaseModuleParamSpecEmitContext;
58 #define _vala_assert(expr, msg) if G_LIKELY (expr) ; else g_assertion_message_expr (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, msg);
59 #define _vala_return_if_fail(expr, msg) if G_LIKELY (expr) ; else { g_return_if_fail_warning (G_LOG_DOMAIN, G_STRFUNC, msg); return; }
60 #define _vala_return_val_if_fail(expr, msg, val) if G_LIKELY (expr) ; else { g_return_if_fail_warning (G_LOG_DOMAIN, G_STRFUNC, msg); return val; }
61 #define _vala_warn_if_fail(expr, msg) if G_LIKELY (expr) ; else g_warn_message (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, msg);
62 
63 struct _ValaCCodeBaseModulePrivate {
64 	ValaCodeContext* _context;
65 	ValaList* emit_context_stack;
66 	ValaList* line_directive_stack;
67 	gint next_block_id;
68 	ValaMap* block_map;
69 	ValaMap* method_inner_error_var_count;
70 	ValaDelegate* destroy_notify;
71 	ValaClass* gerror;
72 	ValaSet* generated_external_symbols;
73 	gint next_variant_function_id;
74 };
75 
76 struct _ValaCCodeBaseModuleParamSpecEmitContext {
77 	GParamSpec parent_instance;
78 };
79 
80 static gint ValaCCodeBaseModule_private_offset;
81 static gpointer vala_ccode_base_module_parent_class = NULL;
82 ValaSet* vala_ccode_base_module_reserved_identifiers = NULL;
83 gint vala_ccode_base_module_ccode_attribute_cache_index = 0;
84 static gpointer vala_ccode_base_module_emit_context_parent_class = NULL;
85 
86 static void vala_ccode_base_module_real_emit (ValaCodeGenerator* base,
87                                        ValaCodeContext* context);
88 static void vala_ccode_base_module_real_append_vala_array_free (ValaCCodeBaseModule* self);
89 static void vala_ccode_base_module_real_append_vala_array_move (ValaCCodeBaseModule* self);
90 static void vala_ccode_base_module_real_append_vala_array_length (ValaCCodeBaseModule* self);
91 static void vala_ccode_base_module_real_append_params_array (ValaCCodeBaseModule* self,
92                                                       ValaMethod* m);
93 static void vala_ccode_base_module_real_visit_source_file (ValaCodeVisitor* base,
94                                                     ValaSourceFile* source_file);
95 static gboolean vala_ccode_base_module_real_generate_enum_declaration (ValaCCodeBaseModule* self,
96                                                                 ValaEnum* en,
97                                                                 ValaCCodeFile* decl_space);
98 static void vala_ccode_base_module_real_visit_enum (ValaCodeVisitor* base,
99                                              ValaEnum* en);
100 static void vala_ccode_base_module_constant_array_ranks_sizes (ValaInitializerList* initializer_list,
101                                                         gint* sizes,
102                                                         gint sizes_length1,
103                                                         gint rank);
104 static ValaCCodeDeclaratorSuffix* vala_ccode_base_module_get_constant_declarator_suffix (ValaCCodeBaseModule* self,
105                                                                                   ValaConstant* c);
106 static void vala_ccode_base_module_real_visit_constant (ValaCodeVisitor* base,
107                                                  ValaConstant* c);
108 static void vala_ccode_base_module_real_visit_field (ValaCodeVisitor* base,
109                                               ValaField* f);
110 static void vala_ccode_base_module_real_visit_property (ValaCodeVisitor* base,
111                                                  ValaProperty* prop);
112 static void vala_ccode_base_module_real_generate_class_struct_declaration (ValaCCodeBaseModule* self,
113                                                                     ValaClass* cl,
114                                                                     ValaCCodeFile* decl_space);
115 static void vala_ccode_base_module_real_generate_struct_declaration (ValaCCodeBaseModule* self,
116                                                               ValaStruct* st,
117                                                               ValaCCodeFile* decl_space);
118 static void vala_ccode_base_module_real_generate_delegate_declaration (ValaCCodeBaseModule* self,
119                                                                 ValaDelegate* d,
120                                                                 ValaCCodeFile* decl_space);
121 static void vala_ccode_base_module_real_generate_cparameters (ValaCCodeBaseModule* self,
122                                                        ValaMethod* m,
123                                                        ValaCCodeFile* decl_space,
124                                                        ValaMap* cparam_map,
125                                                        ValaCCodeFunction* func,
126                                                        ValaCCodeFunctionDeclarator* vdeclarator,
127                                                        ValaMap* carg_map,
128                                                        ValaCCodeFunctionCall* vcall,
129                                                        gint direction);
130 static void vala_ccode_base_module_real_visit_property_accessor (ValaCodeVisitor* base,
131                                                           ValaPropertyAccessor* acc);
132 static void vala_ccode_base_module_create_property_type_check_statement (ValaCCodeBaseModule* self,
133                                                                   ValaProperty* prop,
134                                                                   gboolean check_return_type,
135                                                                   ValaTypeSymbol* t,
136                                                                   gboolean non_null,
137                                                                   const gchar* var_name);
138 static gchar* vala_ccode_base_module_generate_cmp_wrapper (ValaCCodeBaseModule* self,
139                                                     ValaCCodeIdentifier* cmpid);
140 static gchar* vala_ccode_base_module_generate_struct_equal_function (ValaCCodeBaseModule* self,
141                                                               ValaStruct* st);
142 static void vala_ccode_base_module_real_visit_destructor (ValaCodeVisitor* base,
143                                                    ValaDestructor* d);
144 static void vala_ccode_base_module_capture_parameter (ValaCCodeBaseModule* self,
145                                                ValaParameter* param,
146                                                ValaCCodeStruct* data,
147                                                gint block_id);
148 static void vala_ccode_base_module_real_visit_block (ValaCodeVisitor* base,
149                                               ValaBlock* b);
150 static void vala_ccode_base_module_real_visit_declaration_statement (ValaCodeVisitor* base,
151                                                               ValaDeclarationStatement* stmt);
152 static gboolean vala_ccode_base_module_is_foreach_element_variable (ValaLocalVariable* local);
153 static void vala_ccode_base_module_real_visit_local_variable (ValaCodeVisitor* base,
154                                                        ValaLocalVariable* local);
155 static void vala_ccode_base_module_real_visit_initializer_list (ValaCodeVisitor* base,
156                                                          ValaInitializerList* list);
157 static gboolean vala_ccode_base_module_is_in_generic_type (ValaCCodeBaseModule* self,
158                                                     ValaGenericType* type);
159 static void vala_ccode_base_module_require_generic_accessors (ValaCCodeBaseModule* self,
160                                                        ValaInterface* iface);
161 static ValaCCodeExpression* vala_ccode_base_module_real_get_dup_func_expression (ValaCCodeBaseModule* self,
162                                                                           ValaDataType* type,
163                                                                           ValaSourceReference* source_reference,
164                                                                           gboolean is_chainup);
165 static gchar* vala_ccode_base_module_generate_struct_dup_wrapper (ValaCCodeBaseModule* self,
166                                                            ValaValueType* value_type);
167 static void vala_ccode_base_module_make_comparable_cexpression (ValaCCodeBaseModule* self,
168                                                          ValaDataType* * left_type,
169                                                          ValaCCodeExpression* * cleft,
170                                                          ValaDataType* * right_type,
171                                                          ValaCCodeExpression* * cright);
172 static gchar* vala_ccode_base_module_generate_numeric_equal_function (ValaCCodeBaseModule* self,
173                                                                ValaTypeSymbol* sym);
174 static void vala_ccode_base_module_generate_struct_copy_function (ValaCCodeBaseModule* self,
175                                                            ValaStruct* st);
176 static void vala_ccode_base_module_generate_struct_destroy_function (ValaCCodeBaseModule* self,
177                                                               ValaStruct* st);
178 static gchar* vala_ccode_base_module_generate_collection_free_wrapper (ValaCCodeBaseModule* self,
179                                                                 ValaDataType* collection_type,
180                                                                 ValaCCodeIdentifier* element_destroy_func_expression);
181 static gchar* vala_ccode_base_module_real_append_struct_array_destroy (ValaCCodeBaseModule* self,
182                                                                 ValaStruct* st);
183 static gchar* vala_ccode_base_module_real_append_struct_array_free (ValaCCodeBaseModule* self,
184                                                              ValaStruct* st);
185 static ValaCCodeExpression* vala_ccode_base_module_real_destroy_value (ValaCCodeBaseModule* self,
186                                                                 ValaTargetValue* value,
187                                                                 gboolean is_macro_definition);
188 static void vala_ccode_base_module_real_visit_end_full_expression (ValaCodeVisitor* base,
189                                                             ValaExpression* expr);
190 static void vala_ccode_base_module_real_visit_expression_statement (ValaCodeVisitor* base,
191                                                              ValaExpressionStatement* stmt);
192 static void vala_ccode_base_module_real_append_scope_free (ValaCCodeBaseModule* self,
193                                                     ValaSymbol* sym,
194                                                     ValaCodeNode* stop_at);
195 static void vala_ccode_base_module_append_param_free (ValaCCodeBaseModule* self,
196                                                ValaMethod* m);
197 static void vala_ccode_base_module_real_visit_return_statement (ValaCodeVisitor* base,
198                                                          ValaReturnStatement* stmt);
199 static ValaCCodeExpression* vala_ccode_base_module_get_lock_expression (ValaCCodeBaseModule* self,
200                                                                  ValaStatement* stmt,
201                                                                  ValaExpression* resource);
202 static void vala_ccode_base_module_real_visit_lock_statement (ValaCodeVisitor* base,
203                                                        ValaLockStatement* stmt);
204 static void vala_ccode_base_module_real_visit_unlock_statement (ValaCodeVisitor* base,
205                                                          ValaUnlockStatement* stmt);
206 static void vala_ccode_base_module_real_visit_delete_statement (ValaCodeVisitor* base,
207                                                          ValaDeleteStatement* stmt);
208 static gboolean vala_ccode_base_module_is_compact_class_destructor_call (ValaExpression* expr);
209 static void vala_ccode_base_module_real_visit_expression (ValaCodeVisitor* base,
210                                                    ValaExpression* expr);
211 static void vala_ccode_base_module_real_visit_boolean_literal (ValaCodeVisitor* base,
212                                                         ValaBooleanLiteral* expr);
213 static void vala_ccode_base_module_real_visit_character_literal (ValaCodeVisitor* base,
214                                                           ValaCharacterLiteral* expr);
215 static void vala_ccode_base_module_real_visit_integer_literal (ValaCodeVisitor* base,
216                                                         ValaIntegerLiteral* expr);
217 static void vala_ccode_base_module_real_visit_real_literal (ValaCodeVisitor* base,
218                                                      ValaRealLiteral* expr);
219 static void vala_ccode_base_module_real_visit_string_literal (ValaCodeVisitor* base,
220                                                        ValaStringLiteral* expr);
221 static void vala_ccode_base_module_real_visit_regex_literal (ValaCodeVisitor* base,
222                                                       ValaRegexLiteral* expr);
223 static void vala_ccode_base_module_real_visit_null_literal (ValaCodeVisitor* base,
224                                                      ValaNullLiteral* expr);
225 static ValaTargetValue* vala_ccode_base_module_real_get_local_cvalue (ValaCCodeBaseModule* self,
226                                                                ValaLocalVariable* local);
227 static ValaTargetValue* vala_ccode_base_module_real_get_parameter_cvalue (ValaCCodeBaseModule* self,
228                                                                    ValaParameter* param);
229 static ValaTargetValue* vala_ccode_base_module_real_get_field_cvalue (ValaCCodeBaseModule* self,
230                                                                ValaField* field,
231                                                                ValaTargetValue* instance);
232 static ValaTargetValue* vala_ccode_base_module_real_load_variable (ValaCCodeBaseModule* self,
233                                                             ValaVariable* variable,
234                                                             ValaTargetValue* value,
235                                                             ValaExpression* expr);
236 static ValaTargetValue* vala_ccode_base_module_real_load_this_parameter (ValaCCodeBaseModule* self,
237                                                                   ValaTypeSymbol* sym);
238 static void vala_ccode_base_module_real_store_value (ValaCCodeBaseModule* self,
239                                               ValaTargetValue* lvalue,
240                                               ValaTargetValue* value,
241                                               ValaSourceReference* source_reference);
242 static gchar* vala_ccode_base_module_real_get_delegate_target_cname (ValaCCodeBaseModule* self,
243                                                               const gchar* delegate_cname);
244 static ValaCCodeExpression* vala_ccode_base_module_real_get_delegate_target_cexpression (ValaCCodeBaseModule* self,
245                                                                                   ValaExpression* delegate_expr,
246                                                                                   ValaCCodeExpression* * delegate_target_destroy_notify);
247 static ValaCCodeExpression* vala_ccode_base_module_real_get_delegate_target_cvalue (ValaCCodeBaseModule* self,
248                                                                              ValaTargetValue* value);
249 static ValaCCodeExpression* vala_ccode_base_module_real_get_delegate_target_destroy_notify_cvalue (ValaCCodeBaseModule* self,
250                                                                                             ValaTargetValue* value);
251 static gchar* vala_ccode_base_module_real_get_delegate_target_destroy_notify_cname (ValaCCodeBaseModule* self,
252                                                                              const gchar* delegate_cname);
253 static void vala_ccode_base_module_real_visit_base_access (ValaCodeVisitor* base,
254                                                     ValaBaseAccess* expr);
255 static void vala_ccode_base_module_real_visit_postfix_expression (ValaCodeVisitor* base,
256                                                            ValaPostfixExpression* expr);
257 static ValaMemberAccess* vala_ccode_base_module_find_property_access (ValaCCodeBaseModule* self,
258                                                                ValaExpression* expr);
259 static gboolean vala_ccode_base_module_is_limited_generic_type (ValaGenericType* type);
260 static ValaTargetValue* vala_ccode_base_module_real_copy_value (ValaCCodeBaseModule* self,
261                                                          ValaTargetValue* value,
262                                                          ValaCodeNode* node);
263 static void vala_ccode_base_module_real_generate_class_declaration (ValaCCodeBaseModule* self,
264                                                              ValaClass* cl,
265                                                              ValaCCodeFile* decl_space);
266 static void vala_ccode_base_module_real_generate_interface_declaration (ValaCCodeBaseModule* self,
267                                                                  ValaInterface* iface,
268                                                                  ValaCCodeFile* decl_space);
269 static gboolean vala_ccode_base_module_real_generate_method_declaration (ValaCCodeBaseModule* self,
270                                                                   ValaMethod* m,
271                                                                   ValaCCodeFile* decl_space);
272 static void vala_ccode_base_module_real_generate_error_domain_declaration (ValaCCodeBaseModule* self,
273                                                                     ValaErrorDomain* edomain,
274                                                                     ValaCCodeFile* decl_space);
275 static void vala_ccode_base_module_real_visit_object_creation_expression (ValaCodeVisitor* base,
276                                                                    ValaObjectCreationExpression* expr);
277 static void vala_ccode_base_module_real_visit_sizeof_expression (ValaCodeVisitor* base,
278                                                           ValaSizeofExpression* expr);
279 static void vala_ccode_base_module_real_visit_typeof_expression (ValaCodeVisitor* base,
280                                                           ValaTypeofExpression* expr);
281 static void vala_ccode_base_module_real_visit_unary_expression (ValaCodeVisitor* base,
282                                                          ValaUnaryExpression* expr);
283 static ValaCCodeExpression* vala_ccode_base_module_real_deserialize_expression (ValaCCodeBaseModule* self,
284                                                                          ValaDataType* type,
285                                                                          ValaCCodeExpression* variant_expr,
286                                                                          ValaCCodeExpression* expr,
287                                                                          ValaCCodeExpression* error_expr,
288                                                                          gboolean* may_fail);
289 static ValaCCodeExpression* vala_ccode_base_module_real_serialize_expression (ValaCCodeBaseModule* self,
290                                                                        ValaDataType* type,
291                                                                        ValaCCodeExpression* expr);
292 static void vala_ccode_base_module_real_visit_cast_expression (ValaCodeVisitor* base,
293                                                         ValaCastExpression* expr);
294 static void vala_ccode_base_module_real_visit_named_argument (ValaCodeVisitor* base,
295                                                        ValaNamedArgument* expr);
296 static void vala_ccode_base_module_real_visit_pointer_indirection (ValaCodeVisitor* base,
297                                                             ValaPointerIndirection* expr);
298 static void vala_ccode_base_module_real_visit_addressof_expression (ValaCodeVisitor* base,
299                                                              ValaAddressofExpression* expr);
300 static void vala_ccode_base_module_real_visit_reference_transfer_expression (ValaCodeVisitor* base,
301                                                                       ValaReferenceTransferExpression* expr);
302 static void vala_ccode_base_module_real_visit_binary_expression (ValaCodeVisitor* base,
303                                                           ValaBinaryExpression* expr);
304 static gchar* vala_ccode_base_module_generate_array_contains_wrapper (ValaCCodeBaseModule* self,
305                                                                ValaArrayType* array_type);
306 static void vala_ccode_base_module_real_visit_type_check (ValaCodeVisitor* base,
307                                                    ValaTypeCheck* expr);
308 static void vala_ccode_base_module_real_visit_lambda_expression (ValaCodeVisitor* base,
309                                                           ValaLambdaExpression* lambda);
310 static ValaCCodeExpression* vala_ccode_base_module_real_get_implicit_cast_expression (ValaCCodeBaseModule* self,
311                                                                                ValaCCodeExpression* source_cexpr,
312                                                                                ValaDataType* expression_type,
313                                                                                ValaDataType* target_type,
314                                                                                ValaCodeNode* node);
315 static void vala_ccode_base_module_real_create_type_check_statement (ValaCCodeBaseModule* self,
316                                                               ValaCodeNode* method_node,
317                                                               ValaDataType* ret_type,
318                                                               ValaTypeSymbol* t,
319                                                               gboolean non_null,
320                                                               const gchar* var_name);
321 static void vala_ccode_base_module_real_visit_class (ValaCodeVisitor* base,
322                                               ValaClass* cl);
323 static void vala_ccode_base_module_real_generate_dynamic_method_wrapper (ValaCCodeBaseModule* self,
324                                                                   ValaDynamicMethod* method);
325 static gboolean vala_ccode_base_module_real_method_has_wrapper (ValaCCodeBaseModule* self,
326                                                          ValaMethod* method);
327 static ValaCCodeExpression* vala_ccode_base_module_real_get_param_spec_cexpression (ValaCCodeBaseModule* self,
328                                                                              ValaProperty* prop);
329 static ValaCCodeExpression* vala_ccode_base_module_real_get_param_spec (ValaCCodeBaseModule* self,
330                                                                  ValaProperty* prop);
331 static ValaCCodeExpression* vala_ccode_base_module_real_get_signal_creation (ValaCCodeBaseModule* self,
332                                                                       ValaSignal* sig,
333                                                                       ValaObjectTypeSymbol* type);
334 static ValaCCodeExpression* vala_ccode_base_module_real_get_value_getter_function (ValaCCodeBaseModule* self,
335                                                                             ValaDataType* type_reference);
336 static ValaCCodeExpression* vala_ccode_base_module_real_get_value_setter_function (ValaCCodeBaseModule* self,
337                                                                             ValaDataType* type_reference);
338 static ValaCCodeExpression* vala_ccode_base_module_real_get_value_taker_function (ValaCCodeBaseModule* self,
339                                                                            ValaDataType* type_reference);
340 static void vala_ccode_base_module_real_register_dbus_info (ValaCCodeBaseModule* self,
341                                                      ValaCCodeBlock* block,
342                                                      ValaObjectTypeSymbol* bindable);
343 static gchar* vala_ccode_base_module_real_get_dynamic_property_getter_cname (ValaCCodeBaseModule* self,
344                                                                       ValaDynamicProperty* node);
345 static gchar* vala_ccode_base_module_real_get_dynamic_property_setter_cname (ValaCCodeBaseModule* self,
346                                                                       ValaDynamicProperty* node);
347 static gchar* vala_ccode_base_module_real_get_dynamic_signal_cname (ValaCCodeBaseModule* self,
348                                                              ValaDynamicSignal* node);
349 static gchar* vala_ccode_base_module_real_get_dynamic_signal_connect_wrapper_name (ValaCCodeBaseModule* self,
350                                                                             ValaDynamicSignal* node);
351 static gchar* vala_ccode_base_module_real_get_dynamic_signal_connect_after_wrapper_name (ValaCCodeBaseModule* self,
352                                                                                   ValaDynamicSignal* node);
353 static gchar* vala_ccode_base_module_real_get_dynamic_signal_disconnect_wrapper_name (ValaCCodeBaseModule* self,
354                                                                                ValaDynamicSignal* node);
355 static gchar* vala_ccode_base_module_real_get_array_length_cname (ValaCCodeBaseModule* self,
356                                                            const gchar* array_cname,
357                                                            gint dim);
358 static gchar* vala_ccode_base_module_real_get_variable_array_length_cname (ValaCCodeBaseModule* self,
359                                                                     ValaVariable* variable,
360                                                                     gint dim);
361 static ValaCCodeExpression* vala_ccode_base_module_real_get_array_length_cexpression (ValaCCodeBaseModule* self,
362                                                                                ValaExpression* array_expr,
363                                                                                gint dim);
364 static ValaCCodeExpression* vala_ccode_base_module_real_get_array_length_cvalue (ValaCCodeBaseModule* self,
365                                                                           ValaTargetValue* value,
366                                                                           gint dim);
367 static gchar* vala_ccode_base_module_real_get_array_size_cname (ValaCCodeBaseModule* self,
368                                                          const gchar* array_cname);
369 static void vala_ccode_base_module_real_add_simple_check (ValaCCodeBaseModule* self,
370                                                    ValaCodeNode* node,
371                                                    gboolean always_fails);
372 static gchar* vala_ccode_base_module_real_generate_ready_function (ValaCCodeBaseModule* self,
373                                                             ValaMethod* m);
374 static void vala_ccode_base_module_emit_context_finalize (ValaCCodeBaseModuleEmitContext * obj);
375 static GType vala_ccode_base_module_emit_context_get_type_once (void);
376 static void vala_ccode_base_module_finalize (ValaCodeVisitor * obj);
377 static GType vala_ccode_base_module_get_type_once (void);
378 static void _vala_array_destroy (gpointer array,
379                           gint array_length,
380                           GDestroyNotify destroy_func);
381 static void _vala_array_free (gpointer array,
382                        gint array_length,
383                        GDestroyNotify destroy_func);
384 static gint _vala_array_length (gpointer array);
385 
386 static inline gpointer
vala_ccode_base_module_get_instance_private(ValaCCodeBaseModule * self)387 vala_ccode_base_module_get_instance_private (ValaCCodeBaseModule* self)
388 {
389 	return G_STRUCT_MEMBER_P (self, ValaCCodeBaseModule_private_offset);
390 }
391 
392 ValaCodeContext*
vala_ccode_base_module_get_context(ValaCCodeBaseModule * self)393 vala_ccode_base_module_get_context (ValaCCodeBaseModule* self)
394 {
395 	ValaCodeContext* result;
396 	ValaCodeContext* _tmp0_;
397 	g_return_val_if_fail (self != NULL, NULL);
398 	_tmp0_ = self->priv->_context;
399 	result = _tmp0_;
400 	return result;
401 }
402 
403 static gpointer
_vala_code_context_ref0(gpointer self)404 _vala_code_context_ref0 (gpointer self)
405 {
406 	return self ? vala_code_context_ref (self) : NULL;
407 }
408 
409 void
vala_ccode_base_module_set_context(ValaCCodeBaseModule * self,ValaCodeContext * value)410 vala_ccode_base_module_set_context (ValaCCodeBaseModule* self,
411                                     ValaCodeContext* value)
412 {
413 	ValaCodeContext* _tmp0_;
414 	g_return_if_fail (self != NULL);
415 	_tmp0_ = _vala_code_context_ref0 (value);
416 	_vala_code_context_unref0 (self->priv->_context);
417 	self->priv->_context = _tmp0_;
418 }
419 
420 ValaSymbol*
vala_ccode_base_module_get_current_symbol(ValaCCodeBaseModule * self)421 vala_ccode_base_module_get_current_symbol (ValaCCodeBaseModule* self)
422 {
423 	ValaSymbol* result;
424 	ValaCCodeBaseModuleEmitContext* _tmp0_;
425 	ValaSymbol* _tmp1_;
426 	g_return_val_if_fail (self != NULL, NULL);
427 	_tmp0_ = self->emit_context;
428 	_tmp1_ = _tmp0_->current_symbol;
429 	result = _tmp1_;
430 	return result;
431 }
432 
433 ValaTryStatement*
vala_ccode_base_module_get_current_try(ValaCCodeBaseModule * self)434 vala_ccode_base_module_get_current_try (ValaCCodeBaseModule* self)
435 {
436 	ValaTryStatement* result;
437 	ValaCCodeBaseModuleEmitContext* _tmp0_;
438 	ValaTryStatement* _tmp1_;
439 	g_return_val_if_fail (self != NULL, NULL);
440 	_tmp0_ = self->emit_context;
441 	_tmp1_ = _tmp0_->current_try;
442 	result = _tmp1_;
443 	return result;
444 }
445 
446 static gpointer
_vala_code_node_ref0(gpointer self)447 _vala_code_node_ref0 (gpointer self)
448 {
449 	return self ? vala_code_node_ref (self) : NULL;
450 }
451 
452 void
vala_ccode_base_module_set_current_try(ValaCCodeBaseModule * self,ValaTryStatement * value)453 vala_ccode_base_module_set_current_try (ValaCCodeBaseModule* self,
454                                         ValaTryStatement* value)
455 {
456 	ValaCCodeBaseModuleEmitContext* _tmp0_;
457 	ValaTryStatement* _tmp1_;
458 	g_return_if_fail (self != NULL);
459 	_tmp0_ = self->emit_context;
460 	_tmp1_ = _vala_code_node_ref0 (value);
461 	_vala_code_node_unref0 (_tmp0_->current_try);
462 	_tmp0_->current_try = _tmp1_;
463 }
464 
465 gint
vala_ccode_base_module_get_current_try_id(ValaCCodeBaseModule * self)466 vala_ccode_base_module_get_current_try_id (ValaCCodeBaseModule* self)
467 {
468 	gint result;
469 	ValaCCodeBaseModuleEmitContext* _tmp0_;
470 	g_return_val_if_fail (self != NULL, 0);
471 	_tmp0_ = self->emit_context;
472 	result = _tmp0_->current_try_id;
473 	return result;
474 }
475 
476 void
vala_ccode_base_module_set_current_try_id(ValaCCodeBaseModule * self,gint value)477 vala_ccode_base_module_set_current_try_id (ValaCCodeBaseModule* self,
478                                            gint value)
479 {
480 	ValaCCodeBaseModuleEmitContext* _tmp0_;
481 	g_return_if_fail (self != NULL);
482 	_tmp0_ = self->emit_context;
483 	_tmp0_->current_try_id = value;
484 }
485 
486 gint
vala_ccode_base_module_get_next_try_id(ValaCCodeBaseModule * self)487 vala_ccode_base_module_get_next_try_id (ValaCCodeBaseModule* self)
488 {
489 	gint result;
490 	ValaCCodeBaseModuleEmitContext* _tmp0_;
491 	g_return_val_if_fail (self != NULL, 0);
492 	_tmp0_ = self->emit_context;
493 	result = _tmp0_->next_try_id;
494 	return result;
495 }
496 
497 void
vala_ccode_base_module_set_next_try_id(ValaCCodeBaseModule * self,gint value)498 vala_ccode_base_module_set_next_try_id (ValaCCodeBaseModule* self,
499                                         gint value)
500 {
501 	ValaCCodeBaseModuleEmitContext* _tmp0_;
502 	g_return_if_fail (self != NULL);
503 	_tmp0_ = self->emit_context;
504 	_tmp0_->next_try_id = value;
505 }
506 
507 ValaCatchClause*
vala_ccode_base_module_get_current_catch(ValaCCodeBaseModule * self)508 vala_ccode_base_module_get_current_catch (ValaCCodeBaseModule* self)
509 {
510 	ValaCatchClause* result;
511 	ValaCCodeBaseModuleEmitContext* _tmp0_;
512 	ValaCatchClause* _tmp1_;
513 	g_return_val_if_fail (self != NULL, NULL);
514 	_tmp0_ = self->emit_context;
515 	_tmp1_ = _tmp0_->current_catch;
516 	result = _tmp1_;
517 	return result;
518 }
519 
520 void
vala_ccode_base_module_set_current_catch(ValaCCodeBaseModule * self,ValaCatchClause * value)521 vala_ccode_base_module_set_current_catch (ValaCCodeBaseModule* self,
522                                           ValaCatchClause* value)
523 {
524 	ValaCCodeBaseModuleEmitContext* _tmp0_;
525 	ValaCatchClause* _tmp1_;
526 	g_return_if_fail (self != NULL);
527 	_tmp0_ = self->emit_context;
528 	_tmp1_ = _vala_code_node_ref0 (value);
529 	_vala_code_node_unref0 (_tmp0_->current_catch);
530 	_tmp0_->current_catch = _tmp1_;
531 }
532 
533 gint
vala_ccode_base_module_get_current_inner_error_id(ValaCCodeBaseModule * self)534 vala_ccode_base_module_get_current_inner_error_id (ValaCCodeBaseModule* self)
535 {
536 	gint result;
537 	ValaCCodeBaseModuleEmitContext* _tmp0_;
538 	g_return_val_if_fail (self != NULL, 0);
539 	_tmp0_ = self->emit_context;
540 	result = _tmp0_->current_inner_error_id;
541 	return result;
542 }
543 
544 void
vala_ccode_base_module_set_current_inner_error_id(ValaCCodeBaseModule * self,gint value)545 vala_ccode_base_module_set_current_inner_error_id (ValaCCodeBaseModule* self,
546                                                    gint value)
547 {
548 	ValaCCodeBaseModuleEmitContext* _tmp0_;
549 	g_return_if_fail (self != NULL);
550 	_tmp0_ = self->emit_context;
551 	_tmp0_->current_inner_error_id = value;
552 }
553 
554 gboolean
vala_ccode_base_module_get_is_in_method_precondition(ValaCCodeBaseModule * self)555 vala_ccode_base_module_get_is_in_method_precondition (ValaCCodeBaseModule* self)
556 {
557 	gboolean result;
558 	ValaCCodeBaseModuleEmitContext* _tmp0_;
559 	g_return_val_if_fail (self != NULL, FALSE);
560 	_tmp0_ = self->emit_context;
561 	result = _tmp0_->is_in_method_precondition;
562 	return result;
563 }
564 
565 void
vala_ccode_base_module_set_is_in_method_precondition(ValaCCodeBaseModule * self,gboolean value)566 vala_ccode_base_module_set_is_in_method_precondition (ValaCCodeBaseModule* self,
567                                                       gboolean value)
568 {
569 	ValaCCodeBaseModuleEmitContext* _tmp0_;
570 	g_return_if_fail (self != NULL);
571 	_tmp0_ = self->emit_context;
572 	_tmp0_->is_in_method_precondition = value;
573 }
574 
575 ValaTypeSymbol*
vala_ccode_base_module_get_current_type_symbol(ValaCCodeBaseModule * self)576 vala_ccode_base_module_get_current_type_symbol (ValaCCodeBaseModule* self)
577 {
578 	ValaTypeSymbol* result;
579 	ValaSymbol* sym = NULL;
580 	ValaSymbol* _tmp0_;
581 	ValaSymbol* _tmp1_;
582 	ValaSymbol* _tmp2_;
583 	g_return_val_if_fail (self != NULL, NULL);
584 	_tmp0_ = vala_ccode_base_module_get_current_symbol (self);
585 	_tmp1_ = _tmp0_;
586 	_tmp2_ = _vala_code_node_ref0 (_tmp1_);
587 	sym = _tmp2_;
588 	while (TRUE) {
589 		ValaSymbol* _tmp3_;
590 		ValaSymbol* _tmp4_;
591 		ValaSymbol* _tmp6_;
592 		ValaSymbol* _tmp7_;
593 		ValaSymbol* _tmp8_;
594 		ValaSymbol* _tmp9_;
595 		_tmp3_ = sym;
596 		if (!(_tmp3_ != NULL)) {
597 			break;
598 		}
599 		_tmp4_ = sym;
600 		if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp4_, VALA_TYPE_TYPESYMBOL)) {
601 			ValaSymbol* _tmp5_;
602 			_tmp5_ = sym;
603 			result = G_TYPE_CHECK_INSTANCE_CAST (_tmp5_, VALA_TYPE_TYPESYMBOL, ValaTypeSymbol);
604 			_vala_code_node_unref0 (sym);
605 			return result;
606 		}
607 		_tmp6_ = sym;
608 		_tmp7_ = vala_symbol_get_parent_symbol (_tmp6_);
609 		_tmp8_ = _tmp7_;
610 		_tmp9_ = _vala_code_node_ref0 (_tmp8_);
611 		_vala_code_node_unref0 (sym);
612 		sym = _tmp9_;
613 	}
614 	result = NULL;
615 	_vala_code_node_unref0 (sym);
616 	return result;
617 }
618 
619 ValaClass*
vala_ccode_base_module_get_current_class(ValaCCodeBaseModule * self)620 vala_ccode_base_module_get_current_class (ValaCCodeBaseModule* self)
621 {
622 	ValaClass* result;
623 	ValaTypeSymbol* _tmp0_;
624 	ValaTypeSymbol* _tmp1_;
625 	g_return_val_if_fail (self != NULL, NULL);
626 	_tmp0_ = vala_ccode_base_module_get_current_type_symbol (self);
627 	_tmp1_ = _tmp0_;
628 	result = G_TYPE_CHECK_INSTANCE_TYPE (_tmp1_, VALA_TYPE_CLASS) ? ((ValaClass*) _tmp1_) : NULL;
629 	return result;
630 }
631 
632 ValaMethod*
vala_ccode_base_module_get_current_method(ValaCCodeBaseModule * self)633 vala_ccode_base_module_get_current_method (ValaCCodeBaseModule* self)
634 {
635 	ValaMethod* result;
636 	ValaSymbol* sym = NULL;
637 	ValaSymbol* _tmp0_;
638 	ValaSymbol* _tmp1_;
639 	ValaSymbol* _tmp2_;
640 	ValaSymbol* _tmp8_;
641 	g_return_val_if_fail (self != NULL, NULL);
642 	_tmp0_ = vala_ccode_base_module_get_current_symbol (self);
643 	_tmp1_ = _tmp0_;
644 	_tmp2_ = _vala_code_node_ref0 (_tmp1_);
645 	sym = _tmp2_;
646 	while (TRUE) {
647 		ValaSymbol* _tmp3_;
648 		ValaSymbol* _tmp4_;
649 		ValaSymbol* _tmp5_;
650 		ValaSymbol* _tmp6_;
651 		ValaSymbol* _tmp7_;
652 		_tmp3_ = sym;
653 		if (!G_TYPE_CHECK_INSTANCE_TYPE (_tmp3_, VALA_TYPE_BLOCK)) {
654 			break;
655 		}
656 		_tmp4_ = sym;
657 		_tmp5_ = vala_symbol_get_parent_symbol (_tmp4_);
658 		_tmp6_ = _tmp5_;
659 		_tmp7_ = _vala_code_node_ref0 (_tmp6_);
660 		_vala_code_node_unref0 (sym);
661 		sym = _tmp7_;
662 	}
663 	_tmp8_ = sym;
664 	result = G_TYPE_CHECK_INSTANCE_TYPE (_tmp8_, VALA_TYPE_METHOD) ? ((ValaMethod*) _tmp8_) : NULL;
665 	_vala_code_node_unref0 (sym);
666 	return result;
667 }
668 
669 ValaPropertyAccessor*
vala_ccode_base_module_get_current_property_accessor(ValaCCodeBaseModule * self)670 vala_ccode_base_module_get_current_property_accessor (ValaCCodeBaseModule* self)
671 {
672 	ValaPropertyAccessor* result;
673 	ValaSymbol* sym = NULL;
674 	ValaSymbol* _tmp0_;
675 	ValaSymbol* _tmp1_;
676 	ValaSymbol* _tmp2_;
677 	ValaSymbol* _tmp8_;
678 	g_return_val_if_fail (self != NULL, NULL);
679 	_tmp0_ = vala_ccode_base_module_get_current_symbol (self);
680 	_tmp1_ = _tmp0_;
681 	_tmp2_ = _vala_code_node_ref0 (_tmp1_);
682 	sym = _tmp2_;
683 	while (TRUE) {
684 		ValaSymbol* _tmp3_;
685 		ValaSymbol* _tmp4_;
686 		ValaSymbol* _tmp5_;
687 		ValaSymbol* _tmp6_;
688 		ValaSymbol* _tmp7_;
689 		_tmp3_ = sym;
690 		if (!G_TYPE_CHECK_INSTANCE_TYPE (_tmp3_, VALA_TYPE_BLOCK)) {
691 			break;
692 		}
693 		_tmp4_ = sym;
694 		_tmp5_ = vala_symbol_get_parent_symbol (_tmp4_);
695 		_tmp6_ = _tmp5_;
696 		_tmp7_ = _vala_code_node_ref0 (_tmp6_);
697 		_vala_code_node_unref0 (sym);
698 		sym = _tmp7_;
699 	}
700 	_tmp8_ = sym;
701 	result = G_TYPE_CHECK_INSTANCE_TYPE (_tmp8_, VALA_TYPE_PROPERTY_ACCESSOR) ? ((ValaPropertyAccessor*) _tmp8_) : NULL;
702 	_vala_code_node_unref0 (sym);
703 	return result;
704 }
705 
706 ValaConstructor*
vala_ccode_base_module_get_current_constructor(ValaCCodeBaseModule * self)707 vala_ccode_base_module_get_current_constructor (ValaCCodeBaseModule* self)
708 {
709 	ValaConstructor* result;
710 	ValaSymbol* sym = NULL;
711 	ValaSymbol* _tmp0_;
712 	ValaSymbol* _tmp1_;
713 	ValaSymbol* _tmp2_;
714 	ValaSymbol* _tmp8_;
715 	g_return_val_if_fail (self != NULL, NULL);
716 	_tmp0_ = vala_ccode_base_module_get_current_symbol (self);
717 	_tmp1_ = _tmp0_;
718 	_tmp2_ = _vala_code_node_ref0 (_tmp1_);
719 	sym = _tmp2_;
720 	while (TRUE) {
721 		ValaSymbol* _tmp3_;
722 		ValaSymbol* _tmp4_;
723 		ValaSymbol* _tmp5_;
724 		ValaSymbol* _tmp6_;
725 		ValaSymbol* _tmp7_;
726 		_tmp3_ = sym;
727 		if (!G_TYPE_CHECK_INSTANCE_TYPE (_tmp3_, VALA_TYPE_BLOCK)) {
728 			break;
729 		}
730 		_tmp4_ = sym;
731 		_tmp5_ = vala_symbol_get_parent_symbol (_tmp4_);
732 		_tmp6_ = _tmp5_;
733 		_tmp7_ = _vala_code_node_ref0 (_tmp6_);
734 		_vala_code_node_unref0 (sym);
735 		sym = _tmp7_;
736 	}
737 	_tmp8_ = sym;
738 	result = G_TYPE_CHECK_INSTANCE_TYPE (_tmp8_, VALA_TYPE_CONSTRUCTOR) ? ((ValaConstructor*) _tmp8_) : NULL;
739 	_vala_code_node_unref0 (sym);
740 	return result;
741 }
742 
743 ValaDestructor*
vala_ccode_base_module_get_current_destructor(ValaCCodeBaseModule * self)744 vala_ccode_base_module_get_current_destructor (ValaCCodeBaseModule* self)
745 {
746 	ValaDestructor* result;
747 	ValaSymbol* sym = NULL;
748 	ValaSymbol* _tmp0_;
749 	ValaSymbol* _tmp1_;
750 	ValaSymbol* _tmp2_;
751 	ValaSymbol* _tmp8_;
752 	g_return_val_if_fail (self != NULL, NULL);
753 	_tmp0_ = vala_ccode_base_module_get_current_symbol (self);
754 	_tmp1_ = _tmp0_;
755 	_tmp2_ = _vala_code_node_ref0 (_tmp1_);
756 	sym = _tmp2_;
757 	while (TRUE) {
758 		ValaSymbol* _tmp3_;
759 		ValaSymbol* _tmp4_;
760 		ValaSymbol* _tmp5_;
761 		ValaSymbol* _tmp6_;
762 		ValaSymbol* _tmp7_;
763 		_tmp3_ = sym;
764 		if (!G_TYPE_CHECK_INSTANCE_TYPE (_tmp3_, VALA_TYPE_BLOCK)) {
765 			break;
766 		}
767 		_tmp4_ = sym;
768 		_tmp5_ = vala_symbol_get_parent_symbol (_tmp4_);
769 		_tmp6_ = _tmp5_;
770 		_tmp7_ = _vala_code_node_ref0 (_tmp6_);
771 		_vala_code_node_unref0 (sym);
772 		sym = _tmp7_;
773 	}
774 	_tmp8_ = sym;
775 	result = G_TYPE_CHECK_INSTANCE_TYPE (_tmp8_, VALA_TYPE_DESTRUCTOR) ? ((ValaDestructor*) _tmp8_) : NULL;
776 	_vala_code_node_unref0 (sym);
777 	return result;
778 }
779 
780 ValaDataType*
vala_ccode_base_module_get_current_return_type(ValaCCodeBaseModule * self)781 vala_ccode_base_module_get_current_return_type (ValaCCodeBaseModule* self)
782 {
783 	ValaDataType* result;
784 	ValaMethod* m = NULL;
785 	ValaMethod* _tmp0_;
786 	ValaMethod* _tmp1_;
787 	ValaMethod* _tmp2_;
788 	ValaMethod* _tmp3_;
789 	ValaPropertyAccessor* acc = NULL;
790 	ValaPropertyAccessor* _tmp7_;
791 	ValaPropertyAccessor* _tmp8_;
792 	ValaPropertyAccessor* _tmp9_;
793 	ValaPropertyAccessor* _tmp10_;
794 	gboolean _tmp18_ = FALSE;
795 	g_return_val_if_fail (self != NULL, NULL);
796 	_tmp0_ = vala_ccode_base_module_get_current_method (self);
797 	_tmp1_ = _tmp0_;
798 	_tmp2_ = _vala_code_node_ref0 (_tmp1_);
799 	m = _tmp2_;
800 	_tmp3_ = m;
801 	if (_tmp3_ != NULL) {
802 		ValaMethod* _tmp4_;
803 		ValaDataType* _tmp5_;
804 		ValaDataType* _tmp6_;
805 		_tmp4_ = m;
806 		_tmp5_ = vala_callable_get_return_type ((ValaCallable*) _tmp4_);
807 		_tmp6_ = _tmp5_;
808 		result = _tmp6_;
809 		_vala_code_node_unref0 (m);
810 		return result;
811 	}
812 	_tmp7_ = vala_ccode_base_module_get_current_property_accessor (self);
813 	_tmp8_ = _tmp7_;
814 	_tmp9_ = _vala_code_node_ref0 (_tmp8_);
815 	acc = _tmp9_;
816 	_tmp10_ = acc;
817 	if (_tmp10_ != NULL) {
818 		ValaPropertyAccessor* _tmp11_;
819 		gboolean _tmp12_;
820 		gboolean _tmp13_;
821 		_tmp11_ = acc;
822 		_tmp12_ = vala_property_accessor_get_readable (_tmp11_);
823 		_tmp13_ = _tmp12_;
824 		if (_tmp13_) {
825 			ValaPropertyAccessor* _tmp14_;
826 			ValaDataType* _tmp15_;
827 			ValaDataType* _tmp16_;
828 			_tmp14_ = acc;
829 			_tmp15_ = vala_property_accessor_get_value_type (_tmp14_);
830 			_tmp16_ = _tmp15_;
831 			result = _tmp16_;
832 			_vala_code_node_unref0 (acc);
833 			_vala_code_node_unref0 (m);
834 			return result;
835 		} else {
836 			ValaDataType* _tmp17_;
837 			_tmp17_ = self->void_type;
838 			result = _tmp17_;
839 			_vala_code_node_unref0 (acc);
840 			_vala_code_node_unref0 (m);
841 			return result;
842 		}
843 	}
844 	if (vala_ccode_base_module_is_in_constructor (self)) {
845 		_tmp18_ = TRUE;
846 	} else {
847 		_tmp18_ = vala_ccode_base_module_is_in_destructor (self);
848 	}
849 	if (_tmp18_) {
850 		ValaDataType* _tmp19_;
851 		_tmp19_ = self->void_type;
852 		result = _tmp19_;
853 		_vala_code_node_unref0 (acc);
854 		_vala_code_node_unref0 (m);
855 		return result;
856 	}
857 	result = NULL;
858 	_vala_code_node_unref0 (acc);
859 	_vala_code_node_unref0 (m);
860 	return result;
861 }
862 
863 gboolean
vala_ccode_base_module_is_in_coroutine(ValaCCodeBaseModule * self)864 vala_ccode_base_module_is_in_coroutine (ValaCCodeBaseModule* self)
865 {
866 	gboolean _tmp0_ = FALSE;
867 	ValaMethod* _tmp1_;
868 	ValaMethod* _tmp2_;
869 	gboolean result = FALSE;
870 	g_return_val_if_fail (self != NULL, FALSE);
871 	_tmp1_ = vala_ccode_base_module_get_current_method (self);
872 	_tmp2_ = _tmp1_;
873 	if (_tmp2_ != NULL) {
874 		ValaMethod* _tmp3_;
875 		ValaMethod* _tmp4_;
876 		gboolean _tmp5_;
877 		gboolean _tmp6_;
878 		_tmp3_ = vala_ccode_base_module_get_current_method (self);
879 		_tmp4_ = _tmp3_;
880 		_tmp5_ = vala_method_get_coroutine (_tmp4_);
881 		_tmp6_ = _tmp5_;
882 		_tmp0_ = _tmp6_;
883 	} else {
884 		_tmp0_ = FALSE;
885 	}
886 	result = _tmp0_;
887 	return result;
888 }
889 
890 gboolean
vala_ccode_base_module_is_in_constructor(ValaCCodeBaseModule * self)891 vala_ccode_base_module_is_in_constructor (ValaCCodeBaseModule* self)
892 {
893 	ValaMethod* _tmp0_;
894 	ValaMethod* _tmp1_;
895 	ValaSymbol* sym = NULL;
896 	ValaSymbol* _tmp2_;
897 	ValaSymbol* _tmp3_;
898 	ValaSymbol* _tmp4_;
899 	gboolean result = FALSE;
900 	g_return_val_if_fail (self != NULL, FALSE);
901 	_tmp0_ = vala_ccode_base_module_get_current_method (self);
902 	_tmp1_ = _tmp0_;
903 	if (_tmp1_ != NULL) {
904 		result = FALSE;
905 		return result;
906 	}
907 	_tmp2_ = vala_ccode_base_module_get_current_symbol (self);
908 	_tmp3_ = _tmp2_;
909 	_tmp4_ = _vala_code_node_ref0 (_tmp3_);
910 	sym = _tmp4_;
911 	while (TRUE) {
912 		ValaSymbol* _tmp5_;
913 		ValaSymbol* _tmp6_;
914 		ValaSymbol* _tmp7_;
915 		ValaSymbol* _tmp8_;
916 		ValaSymbol* _tmp9_;
917 		ValaSymbol* _tmp10_;
918 		_tmp5_ = sym;
919 		if (!(_tmp5_ != NULL)) {
920 			break;
921 		}
922 		_tmp6_ = sym;
923 		if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp6_, VALA_TYPE_CONSTRUCTOR)) {
924 			result = TRUE;
925 			_vala_code_node_unref0 (sym);
926 			return result;
927 		}
928 		_tmp7_ = sym;
929 		_tmp8_ = vala_symbol_get_parent_symbol (_tmp7_);
930 		_tmp9_ = _tmp8_;
931 		_tmp10_ = _vala_code_node_ref0 (_tmp9_);
932 		_vala_code_node_unref0 (sym);
933 		sym = _tmp10_;
934 	}
935 	result = FALSE;
936 	_vala_code_node_unref0 (sym);
937 	return result;
938 }
939 
940 gboolean
vala_ccode_base_module_is_in_destructor(ValaCCodeBaseModule * self)941 vala_ccode_base_module_is_in_destructor (ValaCCodeBaseModule* self)
942 {
943 	ValaMethod* _tmp0_;
944 	ValaMethod* _tmp1_;
945 	ValaSymbol* sym = NULL;
946 	ValaSymbol* _tmp2_;
947 	ValaSymbol* _tmp3_;
948 	ValaSymbol* _tmp4_;
949 	gboolean result = FALSE;
950 	g_return_val_if_fail (self != NULL, FALSE);
951 	_tmp0_ = vala_ccode_base_module_get_current_method (self);
952 	_tmp1_ = _tmp0_;
953 	if (_tmp1_ != NULL) {
954 		result = FALSE;
955 		return result;
956 	}
957 	_tmp2_ = vala_ccode_base_module_get_current_symbol (self);
958 	_tmp3_ = _tmp2_;
959 	_tmp4_ = _vala_code_node_ref0 (_tmp3_);
960 	sym = _tmp4_;
961 	while (TRUE) {
962 		ValaSymbol* _tmp5_;
963 		ValaSymbol* _tmp6_;
964 		ValaSymbol* _tmp7_;
965 		ValaSymbol* _tmp8_;
966 		ValaSymbol* _tmp9_;
967 		ValaSymbol* _tmp10_;
968 		_tmp5_ = sym;
969 		if (!(_tmp5_ != NULL)) {
970 			break;
971 		}
972 		_tmp6_ = sym;
973 		if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp6_, VALA_TYPE_DESTRUCTOR)) {
974 			result = TRUE;
975 			_vala_code_node_unref0 (sym);
976 			return result;
977 		}
978 		_tmp7_ = sym;
979 		_tmp8_ = vala_symbol_get_parent_symbol (_tmp7_);
980 		_tmp9_ = _tmp8_;
981 		_tmp10_ = _vala_code_node_ref0 (_tmp9_);
982 		_vala_code_node_unref0 (sym);
983 		sym = _tmp10_;
984 	}
985 	result = FALSE;
986 	_vala_code_node_unref0 (sym);
987 	return result;
988 }
989 
990 ValaBlock*
vala_ccode_base_module_get_current_closure_block(ValaCCodeBaseModule * self)991 vala_ccode_base_module_get_current_closure_block (ValaCCodeBaseModule* self)
992 {
993 	ValaBlock* result;
994 	ValaSymbol* _tmp0_;
995 	ValaSymbol* _tmp1_;
996 	ValaBlock* _tmp2_;
997 	g_return_val_if_fail (self != NULL, NULL);
998 	_tmp0_ = vala_ccode_base_module_get_current_symbol (self);
999 	_tmp1_ = _tmp0_;
1000 	_tmp2_ = vala_ccode_base_module_next_closure_block (self, _tmp1_);
1001 	result = _tmp2_;
1002 	return result;
1003 }
1004 
1005 ValaBlock*
vala_ccode_base_module_next_closure_block(ValaCCodeBaseModule * self,ValaSymbol * sym)1006 vala_ccode_base_module_next_closure_block (ValaCCodeBaseModule* self,
1007                                            ValaSymbol* sym)
1008 {
1009 	ValaBlock* result = NULL;
1010 	g_return_val_if_fail (self != NULL, NULL);
1011 	g_return_val_if_fail (sym != NULL, NULL);
1012 	while (TRUE) {
1013 		ValaMethod* method = NULL;
1014 		gboolean _tmp0_ = FALSE;
1015 		ValaMethod* _tmp1_;
1016 		ValaBlock* block = NULL;
1017 		gboolean _tmp5_ = FALSE;
1018 		ValaMethod* _tmp6_;
1019 		gboolean _tmp8_ = FALSE;
1020 		ValaBlock* _tmp9_;
1021 		ValaSymbol* _tmp14_;
1022 		ValaSymbol* _tmp15_;
1023 		method = G_TYPE_CHECK_INSTANCE_TYPE (sym, VALA_TYPE_METHOD) ? ((ValaMethod*) sym) : NULL;
1024 		_tmp1_ = method;
1025 		if (_tmp1_ != NULL) {
1026 			ValaMethod* _tmp2_;
1027 			gboolean _tmp3_;
1028 			gboolean _tmp4_;
1029 			_tmp2_ = method;
1030 			_tmp3_ = vala_method_get_closure (_tmp2_);
1031 			_tmp4_ = _tmp3_;
1032 			_tmp0_ = !_tmp4_;
1033 		} else {
1034 			_tmp0_ = FALSE;
1035 		}
1036 		if (_tmp0_) {
1037 			break;
1038 		}
1039 		block = G_TYPE_CHECK_INSTANCE_TYPE (sym, VALA_TYPE_BLOCK) ? ((ValaBlock*) sym) : NULL;
1040 		_tmp6_ = method;
1041 		if (_tmp6_ == NULL) {
1042 			ValaBlock* _tmp7_;
1043 			_tmp7_ = block;
1044 			_tmp5_ = _tmp7_ == NULL;
1045 		} else {
1046 			_tmp5_ = FALSE;
1047 		}
1048 		if (_tmp5_) {
1049 			break;
1050 		}
1051 		_tmp9_ = block;
1052 		if (_tmp9_ != NULL) {
1053 			ValaBlock* _tmp10_;
1054 			gboolean _tmp11_;
1055 			gboolean _tmp12_;
1056 			_tmp10_ = block;
1057 			_tmp11_ = vala_block_get_captured (_tmp10_);
1058 			_tmp12_ = _tmp11_;
1059 			_tmp8_ = _tmp12_;
1060 		} else {
1061 			_tmp8_ = FALSE;
1062 		}
1063 		if (_tmp8_) {
1064 			ValaBlock* _tmp13_;
1065 			_tmp13_ = block;
1066 			result = _tmp13_;
1067 			return result;
1068 		}
1069 		_tmp14_ = vala_symbol_get_parent_symbol (sym);
1070 		_tmp15_ = _tmp14_;
1071 		sym = _tmp15_;
1072 	}
1073 	result = NULL;
1074 	return result;
1075 }
1076 
1077 ValaCCodeFunction*
vala_ccode_base_module_get_ccode(ValaCCodeBaseModule * self)1078 vala_ccode_base_module_get_ccode (ValaCCodeBaseModule* self)
1079 {
1080 	ValaCCodeFunction* result;
1081 	ValaCCodeBaseModuleEmitContext* _tmp0_;
1082 	ValaCCodeFunction* _tmp1_;
1083 	g_return_val_if_fail (self != NULL, NULL);
1084 	_tmp0_ = self->emit_context;
1085 	_tmp1_ = _tmp0_->ccode;
1086 	result = _tmp1_;
1087 	return result;
1088 }
1089 
1090 ValaArrayList*
vala_ccode_base_module_get_temp_ref_values(ValaCCodeBaseModule * self)1091 vala_ccode_base_module_get_temp_ref_values (ValaCCodeBaseModule* self)
1092 {
1093 	ValaArrayList* result;
1094 	ValaCCodeBaseModuleEmitContext* _tmp0_;
1095 	ValaArrayList* _tmp1_;
1096 	g_return_val_if_fail (self != NULL, NULL);
1097 	_tmp0_ = self->emit_context;
1098 	_tmp1_ = _tmp0_->temp_ref_values;
1099 	result = _tmp1_;
1100 	return result;
1101 }
1102 
1103 gint
vala_ccode_base_module_get_next_temp_var_id(ValaCCodeBaseModule * self)1104 vala_ccode_base_module_get_next_temp_var_id (ValaCCodeBaseModule* self)
1105 {
1106 	gint result;
1107 	ValaCCodeBaseModuleEmitContext* _tmp0_;
1108 	g_return_val_if_fail (self != NULL, 0);
1109 	_tmp0_ = self->emit_context;
1110 	result = _tmp0_->next_temp_var_id;
1111 	return result;
1112 }
1113 
1114 void
vala_ccode_base_module_set_next_temp_var_id(ValaCCodeBaseModule * self,gint value)1115 vala_ccode_base_module_set_next_temp_var_id (ValaCCodeBaseModule* self,
1116                                              gint value)
1117 {
1118 	ValaCCodeBaseModuleEmitContext* _tmp0_;
1119 	g_return_if_fail (self != NULL);
1120 	_tmp0_ = self->emit_context;
1121 	_tmp0_->next_temp_var_id = value;
1122 }
1123 
1124 gboolean
vala_ccode_base_module_get_in_creation_method(ValaCCodeBaseModule * self)1125 vala_ccode_base_module_get_in_creation_method (ValaCCodeBaseModule* self)
1126 {
1127 	gboolean result;
1128 	ValaMethod* _tmp0_;
1129 	ValaMethod* _tmp1_;
1130 	g_return_val_if_fail (self != NULL, FALSE);
1131 	_tmp0_ = vala_ccode_base_module_get_current_method (self);
1132 	_tmp1_ = _tmp0_;
1133 	result = G_TYPE_CHECK_INSTANCE_TYPE (_tmp1_, VALA_TYPE_CREATION_METHOD);
1134 	return result;
1135 }
1136 
1137 gboolean
vala_ccode_base_module_get_current_method_inner_error(ValaCCodeBaseModule * self)1138 vala_ccode_base_module_get_current_method_inner_error (ValaCCodeBaseModule* self)
1139 {
1140 	gboolean result;
1141 	ValaCCodeBaseModuleEmitContext* _tmp0_;
1142 	g_return_val_if_fail (self != NULL, FALSE);
1143 	_tmp0_ = self->emit_context;
1144 	result = _tmp0_->current_method_inner_error;
1145 	return result;
1146 }
1147 
1148 void
vala_ccode_base_module_set_current_method_inner_error(ValaCCodeBaseModule * self,gboolean value)1149 vala_ccode_base_module_set_current_method_inner_error (ValaCCodeBaseModule* self,
1150                                                        gboolean value)
1151 {
1152 	ValaCCodeBaseModuleEmitContext* _tmp0_;
1153 	g_return_if_fail (self != NULL);
1154 	_tmp0_ = self->emit_context;
1155 	_tmp0_->current_method_inner_error = value;
1156 }
1157 
1158 gboolean
vala_ccode_base_module_get_current_method_return(ValaCCodeBaseModule * self)1159 vala_ccode_base_module_get_current_method_return (ValaCCodeBaseModule* self)
1160 {
1161 	gboolean result;
1162 	ValaCCodeBaseModuleEmitContext* _tmp0_;
1163 	g_return_val_if_fail (self != NULL, FALSE);
1164 	_tmp0_ = self->emit_context;
1165 	result = _tmp0_->current_method_return;
1166 	return result;
1167 }
1168 
1169 void
vala_ccode_base_module_set_current_method_return(ValaCCodeBaseModule * self,gboolean value)1170 vala_ccode_base_module_set_current_method_return (ValaCCodeBaseModule* self,
1171                                                   gboolean value)
1172 {
1173 	ValaCCodeBaseModuleEmitContext* _tmp0_;
1174 	g_return_if_fail (self != NULL);
1175 	_tmp0_ = self->emit_context;
1176 	_tmp0_->current_method_return = value;
1177 }
1178 
1179 ValaMap*
vala_ccode_base_module_get_variable_name_map(ValaCCodeBaseModule * self)1180 vala_ccode_base_module_get_variable_name_map (ValaCCodeBaseModule* self)
1181 {
1182 	ValaMap* result;
1183 	ValaCCodeBaseModuleEmitContext* _tmp0_;
1184 	ValaMap* _tmp1_;
1185 	g_return_val_if_fail (self != NULL, NULL);
1186 	_tmp0_ = self->emit_context;
1187 	_tmp1_ = _tmp0_->variable_name_map;
1188 	result = _tmp1_;
1189 	return result;
1190 }
1191 
1192 ValaCCodeBaseModule*
vala_ccode_base_module_construct(GType object_type)1193 vala_ccode_base_module_construct (GType object_type)
1194 {
1195 	ValaCCodeBaseModule* self = NULL;
1196 	GHashFunc _tmp0_;
1197 	GEqualFunc _tmp1_;
1198 	ValaHashSet* _tmp2_;
1199 	ValaSet* _tmp3_;
1200 	ValaSet* _tmp4_;
1201 	ValaSet* _tmp5_;
1202 	ValaSet* _tmp6_;
1203 	ValaSet* _tmp7_;
1204 	ValaSet* _tmp8_;
1205 	ValaSet* _tmp9_;
1206 	ValaSet* _tmp10_;
1207 	ValaSet* _tmp11_;
1208 	ValaSet* _tmp12_;
1209 	ValaSet* _tmp13_;
1210 	ValaSet* _tmp14_;
1211 	ValaSet* _tmp15_;
1212 	ValaSet* _tmp16_;
1213 	ValaSet* _tmp17_;
1214 	ValaSet* _tmp18_;
1215 	ValaSet* _tmp19_;
1216 	ValaSet* _tmp20_;
1217 	ValaSet* _tmp21_;
1218 	ValaSet* _tmp22_;
1219 	ValaSet* _tmp23_;
1220 	GHashFunc _tmp24_;
1221 	GEqualFunc _tmp25_;
1222 	ValaHashSet* _tmp26_;
1223 	ValaSet* _tmp27_;
1224 	ValaSet* _tmp28_;
1225 	ValaSet* _tmp29_;
1226 	ValaSet* _tmp30_;
1227 	ValaSet* _tmp31_;
1228 	ValaSet* _tmp32_;
1229 	ValaSet* _tmp33_;
1230 	ValaSet* _tmp34_;
1231 	ValaSet* _tmp35_;
1232 	ValaSet* _tmp36_;
1233 	ValaSet* _tmp37_;
1234 	ValaSet* _tmp38_;
1235 	ValaSet* _tmp39_;
1236 	ValaSet* _tmp40_;
1237 	ValaSet* _tmp41_;
1238 	ValaSet* _tmp42_;
1239 	ValaSet* _tmp43_;
1240 	ValaSet* _tmp44_;
1241 	ValaSet* _tmp45_;
1242 	ValaSet* _tmp46_;
1243 	ValaSet* _tmp47_;
1244 	ValaSet* _tmp48_;
1245 	ValaSet* _tmp49_;
1246 	ValaSet* _tmp50_;
1247 	ValaSet* _tmp51_;
1248 	ValaSet* _tmp52_;
1249 	ValaSet* _tmp53_;
1250 	ValaSet* _tmp54_;
1251 	ValaSet* _tmp55_;
1252 	ValaSet* _tmp56_;
1253 	ValaSet* _tmp57_;
1254 	ValaSet* _tmp58_;
1255 	ValaSet* _tmp59_;
1256 	ValaSet* _tmp60_;
1257 	ValaSet* _tmp61_;
1258 	ValaSet* _tmp62_;
1259 	ValaSet* _tmp63_;
1260 	ValaSet* _tmp64_;
1261 	ValaSet* _tmp65_;
1262 	ValaSet* _tmp66_;
1263 	ValaSet* _tmp67_;
1264 	ValaSet* _tmp68_;
1265 	ValaSet* _tmp69_;
1266 	ValaSet* _tmp70_;
1267 	ValaSet* _tmp71_;
1268 	ValaSet* _tmp72_;
1269 	ValaSet* _tmp73_;
1270 	ValaSet* _tmp74_;
1271 	ValaSet* _tmp75_;
1272 	self = (ValaCCodeBaseModule*) vala_code_generator_construct (object_type);
1273 	_tmp0_ = g_str_hash;
1274 	_tmp1_ = g_str_equal;
1275 	_tmp2_ = vala_hash_set_new (G_TYPE_STRING, (GBoxedCopyFunc) g_strdup, (GDestroyNotify) g_free, _tmp0_, _tmp1_);
1276 	_vala_iterable_unref0 (self->predefined_marshal_set);
1277 	self->predefined_marshal_set = (ValaSet*) _tmp2_;
1278 	_tmp3_ = self->predefined_marshal_set;
1279 	vala_collection_add ((ValaCollection*) _tmp3_, "VOID:VOID");
1280 	_tmp4_ = self->predefined_marshal_set;
1281 	vala_collection_add ((ValaCollection*) _tmp4_, "VOID:BOOLEAN");
1282 	_tmp5_ = self->predefined_marshal_set;
1283 	vala_collection_add ((ValaCollection*) _tmp5_, "VOID:CHAR");
1284 	_tmp6_ = self->predefined_marshal_set;
1285 	vala_collection_add ((ValaCollection*) _tmp6_, "VOID:UCHAR");
1286 	_tmp7_ = self->predefined_marshal_set;
1287 	vala_collection_add ((ValaCollection*) _tmp7_, "VOID:INT");
1288 	_tmp8_ = self->predefined_marshal_set;
1289 	vala_collection_add ((ValaCollection*) _tmp8_, "VOID:UINT");
1290 	_tmp9_ = self->predefined_marshal_set;
1291 	vala_collection_add ((ValaCollection*) _tmp9_, "VOID:LONG");
1292 	_tmp10_ = self->predefined_marshal_set;
1293 	vala_collection_add ((ValaCollection*) _tmp10_, "VOID:ULONG");
1294 	_tmp11_ = self->predefined_marshal_set;
1295 	vala_collection_add ((ValaCollection*) _tmp11_, "VOID:ENUM");
1296 	_tmp12_ = self->predefined_marshal_set;
1297 	vala_collection_add ((ValaCollection*) _tmp12_, "VOID:FLAGS");
1298 	_tmp13_ = self->predefined_marshal_set;
1299 	vala_collection_add ((ValaCollection*) _tmp13_, "VOID:FLOAT");
1300 	_tmp14_ = self->predefined_marshal_set;
1301 	vala_collection_add ((ValaCollection*) _tmp14_, "VOID:DOUBLE");
1302 	_tmp15_ = self->predefined_marshal_set;
1303 	vala_collection_add ((ValaCollection*) _tmp15_, "VOID:STRING");
1304 	_tmp16_ = self->predefined_marshal_set;
1305 	vala_collection_add ((ValaCollection*) _tmp16_, "VOID:POINTER");
1306 	_tmp17_ = self->predefined_marshal_set;
1307 	vala_collection_add ((ValaCollection*) _tmp17_, "VOID:OBJECT");
1308 	_tmp18_ = self->predefined_marshal_set;
1309 	vala_collection_add ((ValaCollection*) _tmp18_, "STRING:OBJECT,POINTER");
1310 	_tmp19_ = self->predefined_marshal_set;
1311 	vala_collection_add ((ValaCollection*) _tmp19_, "VOID:UINT,POINTER");
1312 	_tmp20_ = self->predefined_marshal_set;
1313 	vala_collection_add ((ValaCollection*) _tmp20_, "BOOLEAN:FLAGS");
1314 	_tmp21_ = self->predefined_marshal_set;
1315 	vala_collection_add ((ValaCollection*) _tmp21_, "VOID:BOXED");
1316 	_tmp22_ = self->predefined_marshal_set;
1317 	vala_collection_add ((ValaCollection*) _tmp22_, "VOID:VARIANT");
1318 	_tmp23_ = self->predefined_marshal_set;
1319 	vala_collection_add ((ValaCollection*) _tmp23_, "BOOLEAN:BOXED,BOXED");
1320 	_tmp24_ = g_str_hash;
1321 	_tmp25_ = g_str_equal;
1322 	_tmp26_ = vala_hash_set_new (G_TYPE_STRING, (GBoxedCopyFunc) g_strdup, (GDestroyNotify) g_free, _tmp24_, _tmp25_);
1323 	_vala_iterable_unref0 (vala_ccode_base_module_reserved_identifiers);
1324 	vala_ccode_base_module_reserved_identifiers = (ValaSet*) _tmp26_;
1325 	_tmp27_ = vala_ccode_base_module_reserved_identifiers;
1326 	vala_collection_add ((ValaCollection*) _tmp27_, "_Bool");
1327 	_tmp28_ = vala_ccode_base_module_reserved_identifiers;
1328 	vala_collection_add ((ValaCollection*) _tmp28_, "_Complex");
1329 	_tmp29_ = vala_ccode_base_module_reserved_identifiers;
1330 	vala_collection_add ((ValaCollection*) _tmp29_, "_Imaginary");
1331 	_tmp30_ = vala_ccode_base_module_reserved_identifiers;
1332 	vala_collection_add ((ValaCollection*) _tmp30_, "asm");
1333 	_tmp31_ = vala_ccode_base_module_reserved_identifiers;
1334 	vala_collection_add ((ValaCollection*) _tmp31_, "auto");
1335 	_tmp32_ = vala_ccode_base_module_reserved_identifiers;
1336 	vala_collection_add ((ValaCollection*) _tmp32_, "break");
1337 	_tmp33_ = vala_ccode_base_module_reserved_identifiers;
1338 	vala_collection_add ((ValaCollection*) _tmp33_, "case");
1339 	_tmp34_ = vala_ccode_base_module_reserved_identifiers;
1340 	vala_collection_add ((ValaCollection*) _tmp34_, "char");
1341 	_tmp35_ = vala_ccode_base_module_reserved_identifiers;
1342 	vala_collection_add ((ValaCollection*) _tmp35_, "const");
1343 	_tmp36_ = vala_ccode_base_module_reserved_identifiers;
1344 	vala_collection_add ((ValaCollection*) _tmp36_, "continue");
1345 	_tmp37_ = vala_ccode_base_module_reserved_identifiers;
1346 	vala_collection_add ((ValaCollection*) _tmp37_, "default");
1347 	_tmp38_ = vala_ccode_base_module_reserved_identifiers;
1348 	vala_collection_add ((ValaCollection*) _tmp38_, "do");
1349 	_tmp39_ = vala_ccode_base_module_reserved_identifiers;
1350 	vala_collection_add ((ValaCollection*) _tmp39_, "double");
1351 	_tmp40_ = vala_ccode_base_module_reserved_identifiers;
1352 	vala_collection_add ((ValaCollection*) _tmp40_, "else");
1353 	_tmp41_ = vala_ccode_base_module_reserved_identifiers;
1354 	vala_collection_add ((ValaCollection*) _tmp41_, "enum");
1355 	_tmp42_ = vala_ccode_base_module_reserved_identifiers;
1356 	vala_collection_add ((ValaCollection*) _tmp42_, "extern");
1357 	_tmp43_ = vala_ccode_base_module_reserved_identifiers;
1358 	vala_collection_add ((ValaCollection*) _tmp43_, "float");
1359 	_tmp44_ = vala_ccode_base_module_reserved_identifiers;
1360 	vala_collection_add ((ValaCollection*) _tmp44_, "for");
1361 	_tmp45_ = vala_ccode_base_module_reserved_identifiers;
1362 	vala_collection_add ((ValaCollection*) _tmp45_, "goto");
1363 	_tmp46_ = vala_ccode_base_module_reserved_identifiers;
1364 	vala_collection_add ((ValaCollection*) _tmp46_, "if");
1365 	_tmp47_ = vala_ccode_base_module_reserved_identifiers;
1366 	vala_collection_add ((ValaCollection*) _tmp47_, "inline");
1367 	_tmp48_ = vala_ccode_base_module_reserved_identifiers;
1368 	vala_collection_add ((ValaCollection*) _tmp48_, "int");
1369 	_tmp49_ = vala_ccode_base_module_reserved_identifiers;
1370 	vala_collection_add ((ValaCollection*) _tmp49_, "long");
1371 	_tmp50_ = vala_ccode_base_module_reserved_identifiers;
1372 	vala_collection_add ((ValaCollection*) _tmp50_, "register");
1373 	_tmp51_ = vala_ccode_base_module_reserved_identifiers;
1374 	vala_collection_add ((ValaCollection*) _tmp51_, "restrict");
1375 	_tmp52_ = vala_ccode_base_module_reserved_identifiers;
1376 	vala_collection_add ((ValaCollection*) _tmp52_, "return");
1377 	_tmp53_ = vala_ccode_base_module_reserved_identifiers;
1378 	vala_collection_add ((ValaCollection*) _tmp53_, "short");
1379 	_tmp54_ = vala_ccode_base_module_reserved_identifiers;
1380 	vala_collection_add ((ValaCollection*) _tmp54_, "signed");
1381 	_tmp55_ = vala_ccode_base_module_reserved_identifiers;
1382 	vala_collection_add ((ValaCollection*) _tmp55_, "sizeof");
1383 	_tmp56_ = vala_ccode_base_module_reserved_identifiers;
1384 	vala_collection_add ((ValaCollection*) _tmp56_, "static");
1385 	_tmp57_ = vala_ccode_base_module_reserved_identifiers;
1386 	vala_collection_add ((ValaCollection*) _tmp57_, "struct");
1387 	_tmp58_ = vala_ccode_base_module_reserved_identifiers;
1388 	vala_collection_add ((ValaCollection*) _tmp58_, "switch");
1389 	_tmp59_ = vala_ccode_base_module_reserved_identifiers;
1390 	vala_collection_add ((ValaCollection*) _tmp59_, "typedef");
1391 	_tmp60_ = vala_ccode_base_module_reserved_identifiers;
1392 	vala_collection_add ((ValaCollection*) _tmp60_, "union");
1393 	_tmp61_ = vala_ccode_base_module_reserved_identifiers;
1394 	vala_collection_add ((ValaCollection*) _tmp61_, "unsigned");
1395 	_tmp62_ = vala_ccode_base_module_reserved_identifiers;
1396 	vala_collection_add ((ValaCollection*) _tmp62_, "void");
1397 	_tmp63_ = vala_ccode_base_module_reserved_identifiers;
1398 	vala_collection_add ((ValaCollection*) _tmp63_, "volatile");
1399 	_tmp64_ = vala_ccode_base_module_reserved_identifiers;
1400 	vala_collection_add ((ValaCollection*) _tmp64_, "while");
1401 	_tmp65_ = vala_ccode_base_module_reserved_identifiers;
1402 	vala_collection_add ((ValaCollection*) _tmp65_, "_Alignas");
1403 	_tmp66_ = vala_ccode_base_module_reserved_identifiers;
1404 	vala_collection_add ((ValaCollection*) _tmp66_, "_Alignof");
1405 	_tmp67_ = vala_ccode_base_module_reserved_identifiers;
1406 	vala_collection_add ((ValaCollection*) _tmp67_, "_Atomic");
1407 	_tmp68_ = vala_ccode_base_module_reserved_identifiers;
1408 	vala_collection_add ((ValaCollection*) _tmp68_, "_Generic");
1409 	_tmp69_ = vala_ccode_base_module_reserved_identifiers;
1410 	vala_collection_add ((ValaCollection*) _tmp69_, "_Noreturn");
1411 	_tmp70_ = vala_ccode_base_module_reserved_identifiers;
1412 	vala_collection_add ((ValaCollection*) _tmp70_, "_Static_assert");
1413 	_tmp71_ = vala_ccode_base_module_reserved_identifiers;
1414 	vala_collection_add ((ValaCollection*) _tmp71_, "_Thread_local");
1415 	_tmp72_ = vala_ccode_base_module_reserved_identifiers;
1416 	vala_collection_add ((ValaCollection*) _tmp72_, "cdecl");
1417 	_tmp73_ = vala_ccode_base_module_reserved_identifiers;
1418 	vala_collection_add ((ValaCollection*) _tmp73_, "error");
1419 	_tmp74_ = vala_ccode_base_module_reserved_identifiers;
1420 	vala_collection_add ((ValaCollection*) _tmp74_, "result");
1421 	_tmp75_ = vala_ccode_base_module_reserved_identifiers;
1422 	vala_collection_add ((ValaCollection*) _tmp75_, "self");
1423 	return self;
1424 }
1425 
1426 static gpointer
_vala_iterable_ref0(gpointer self)1427 _vala_iterable_ref0 (gpointer self)
1428 {
1429 	return self ? vala_iterable_ref (self) : NULL;
1430 }
1431 
1432 static void
vala_ccode_base_module_real_emit(ValaCodeGenerator * base,ValaCodeContext * context)1433 vala_ccode_base_module_real_emit (ValaCodeGenerator* base,
1434                                   ValaCodeContext* context)
1435 {
1436 	ValaCCodeBaseModule * self;
1437 	ValaNamespace* _tmp0_;
1438 	ValaNamespace* _tmp1_;
1439 	ValaSymbol* _tmp2_;
1440 	ValaSymbol* _tmp3_;
1441 	ValaScope* _tmp4_;
1442 	ValaScope* _tmp5_;
1443 	ValaSymbol* _tmp6_;
1444 	ValaStruct* _tmp7_;
1445 	ValaBooleanType* _tmp8_;
1446 	ValaSymbol* _tmp9_;
1447 	ValaScope* _tmp10_;
1448 	ValaScope* _tmp11_;
1449 	ValaSymbol* _tmp12_;
1450 	ValaStruct* _tmp13_;
1451 	ValaIntegerType* _tmp14_;
1452 	ValaSymbol* _tmp15_;
1453 	ValaScope* _tmp16_;
1454 	ValaScope* _tmp17_;
1455 	ValaSymbol* _tmp18_;
1456 	ValaStruct* _tmp19_;
1457 	ValaIntegerType* _tmp20_;
1458 	ValaSymbol* _tmp21_;
1459 	ValaScope* _tmp22_;
1460 	ValaScope* _tmp23_;
1461 	ValaSymbol* _tmp24_;
1462 	ValaStruct* _tmp25_;
1463 	ValaIntegerType* _tmp26_;
1464 	ValaSymbol* _tmp27_;
1465 	ValaScope* _tmp28_;
1466 	ValaScope* _tmp29_;
1467 	ValaSymbol* _tmp30_;
1468 	ValaStruct* _tmp31_;
1469 	ValaIntegerType* _tmp32_;
1470 	ValaSymbol* _tmp33_;
1471 	ValaScope* _tmp34_;
1472 	ValaScope* _tmp35_;
1473 	ValaSymbol* _tmp36_;
1474 	ValaStruct* _tmp37_;
1475 	ValaIntegerType* _tmp38_;
1476 	ValaSymbol* _tmp39_;
1477 	ValaScope* _tmp40_;
1478 	ValaScope* _tmp41_;
1479 	ValaSymbol* _tmp42_;
1480 	ValaStruct* _tmp43_;
1481 	ValaIntegerType* _tmp44_;
1482 	ValaSymbol* _tmp45_;
1483 	ValaScope* _tmp46_;
1484 	ValaScope* _tmp47_;
1485 	ValaSymbol* _tmp48_;
1486 	ValaStruct* _tmp49_;
1487 	ValaIntegerType* _tmp50_;
1488 	ValaSymbol* _tmp51_;
1489 	ValaScope* _tmp52_;
1490 	ValaScope* _tmp53_;
1491 	ValaSymbol* _tmp54_;
1492 	ValaStruct* _tmp55_;
1493 	ValaIntegerType* _tmp56_;
1494 	ValaSymbol* _tmp57_;
1495 	ValaScope* _tmp58_;
1496 	ValaScope* _tmp59_;
1497 	ValaSymbol* _tmp60_;
1498 	ValaStruct* _tmp61_;
1499 	ValaIntegerType* _tmp62_;
1500 	ValaSymbol* _tmp63_;
1501 	ValaScope* _tmp64_;
1502 	ValaScope* _tmp65_;
1503 	ValaSymbol* _tmp66_;
1504 	ValaStruct* _tmp67_;
1505 	ValaIntegerType* _tmp68_;
1506 	ValaSymbol* _tmp69_;
1507 	ValaScope* _tmp70_;
1508 	ValaScope* _tmp71_;
1509 	ValaSymbol* _tmp72_;
1510 	ValaStruct* _tmp73_;
1511 	ValaIntegerType* _tmp74_;
1512 	ValaSymbol* _tmp75_;
1513 	ValaScope* _tmp76_;
1514 	ValaScope* _tmp77_;
1515 	ValaSymbol* _tmp78_;
1516 	ValaStruct* _tmp79_;
1517 	ValaIntegerType* _tmp80_;
1518 	ValaSymbol* _tmp81_;
1519 	ValaScope* _tmp82_;
1520 	ValaScope* _tmp83_;
1521 	ValaSymbol* _tmp84_;
1522 	ValaStruct* _tmp85_;
1523 	ValaIntegerType* _tmp86_;
1524 	ValaSymbol* _tmp87_;
1525 	ValaScope* _tmp88_;
1526 	ValaScope* _tmp89_;
1527 	ValaSymbol* _tmp90_;
1528 	ValaStruct* _tmp91_;
1529 	ValaIntegerType* _tmp92_;
1530 	ValaSymbol* _tmp93_;
1531 	ValaScope* _tmp94_;
1532 	ValaScope* _tmp95_;
1533 	ValaSymbol* _tmp96_;
1534 	ValaStruct* _tmp97_;
1535 	ValaIntegerType* _tmp98_;
1536 	ValaSymbol* _tmp99_;
1537 	ValaScope* _tmp100_;
1538 	ValaScope* _tmp101_;
1539 	ValaSymbol* _tmp102_;
1540 	ValaStruct* _tmp103_;
1541 	ValaIntegerType* _tmp104_;
1542 	ValaSymbol* _tmp105_;
1543 	ValaScope* _tmp106_;
1544 	ValaScope* _tmp107_;
1545 	ValaSymbol* _tmp108_;
1546 	ValaStruct* _tmp109_;
1547 	ValaIntegerType* _tmp110_;
1548 	ValaSymbol* _tmp111_;
1549 	ValaScope* _tmp112_;
1550 	ValaScope* _tmp113_;
1551 	ValaSymbol* _tmp114_;
1552 	ValaStruct* _tmp115_;
1553 	ValaFloatingType* _tmp116_;
1554 	ValaSymbol* _tmp117_;
1555 	ValaScope* _tmp118_;
1556 	ValaScope* _tmp119_;
1557 	ValaSymbol* _tmp120_;
1558 	ValaStruct* _tmp121_;
1559 	ValaFloatingType* _tmp122_;
1560 	ValaSymbol* _tmp123_;
1561 	ValaScope* _tmp124_;
1562 	ValaScope* _tmp125_;
1563 	ValaSymbol* _tmp126_;
1564 	ValaClass* _tmp127_;
1565 	ValaObjectType* _tmp128_;
1566 	ValaStruct* unichar_struct = NULL;
1567 	ValaSymbol* _tmp129_;
1568 	ValaScope* _tmp130_;
1569 	ValaScope* _tmp131_;
1570 	ValaSymbol* _tmp132_;
1571 	ValaStruct* _tmp133_;
1572 	ValaProfile _tmp136_;
1573 	ValaProfile _tmp137_;
1574 	ValaSymbol* gtk_ns = NULL;
1575 	ValaSymbol* _tmp312_;
1576 	ValaScope* _tmp313_;
1577 	ValaScope* _tmp314_;
1578 	ValaSymbol* _tmp315_;
1579 	ValaSymbol* _tmp316_;
1580 	ValaCCodeFile* _tmp321_;
1581 	ValaCCodeFile* _tmp322_;
1582 	ValaCCodeFile* _tmp323_;
1583 	ValaCCodeFile* _tmp324_;
1584 	ValaList* source_files = NULL;
1585 	ValaList* _tmp325_;
1586 	ValaList* _tmp326_;
1587 	const gchar* _tmp347_;
1588 	const gchar* _tmp348_;
1589 	const gchar* _tmp369_;
1590 	const gchar* _tmp370_;
1591 	const gchar* _tmp388_;
1592 	const gchar* _tmp389_;
1593 	self = (ValaCCodeBaseModule*) base;
1594 	g_return_if_fail (context != NULL);
1595 	vala_ccode_base_module_set_context (self, context);
1596 	_tmp0_ = vala_code_context_get_root (context);
1597 	_tmp1_ = _tmp0_;
1598 	_tmp2_ = _vala_code_node_ref0 ((ValaSymbol*) _tmp1_);
1599 	_vala_code_node_unref0 (self->root_symbol);
1600 	self->root_symbol = _tmp2_;
1601 	_tmp3_ = self->root_symbol;
1602 	_tmp4_ = vala_symbol_get_scope (_tmp3_);
1603 	_tmp5_ = _tmp4_;
1604 	_tmp6_ = vala_scope_lookup (_tmp5_, "bool");
1605 	_tmp7_ = G_TYPE_CHECK_INSTANCE_CAST (_tmp6_, VALA_TYPE_STRUCT, ValaStruct);
1606 	_tmp8_ = vala_boolean_type_new (_tmp7_);
1607 	_vala_code_node_unref0 (self->bool_type);
1608 	self->bool_type = (ValaDataType*) _tmp8_;
1609 	_vala_code_node_unref0 (_tmp7_);
1610 	_tmp9_ = self->root_symbol;
1611 	_tmp10_ = vala_symbol_get_scope (_tmp9_);
1612 	_tmp11_ = _tmp10_;
1613 	_tmp12_ = vala_scope_lookup (_tmp11_, "char");
1614 	_tmp13_ = G_TYPE_CHECK_INSTANCE_CAST (_tmp12_, VALA_TYPE_STRUCT, ValaStruct);
1615 	_tmp14_ = vala_integer_type_new (_tmp13_, NULL, NULL);
1616 	_vala_code_node_unref0 (self->char_type);
1617 	self->char_type = (ValaDataType*) _tmp14_;
1618 	_vala_code_node_unref0 (_tmp13_);
1619 	_tmp15_ = self->root_symbol;
1620 	_tmp16_ = vala_symbol_get_scope (_tmp15_);
1621 	_tmp17_ = _tmp16_;
1622 	_tmp18_ = vala_scope_lookup (_tmp17_, "uchar");
1623 	_tmp19_ = G_TYPE_CHECK_INSTANCE_CAST (_tmp18_, VALA_TYPE_STRUCT, ValaStruct);
1624 	_tmp20_ = vala_integer_type_new (_tmp19_, NULL, NULL);
1625 	_vala_code_node_unref0 (self->uchar_type);
1626 	self->uchar_type = (ValaDataType*) _tmp20_;
1627 	_vala_code_node_unref0 (_tmp19_);
1628 	_tmp21_ = self->root_symbol;
1629 	_tmp22_ = vala_symbol_get_scope (_tmp21_);
1630 	_tmp23_ = _tmp22_;
1631 	_tmp24_ = vala_scope_lookup (_tmp23_, "short");
1632 	_tmp25_ = G_TYPE_CHECK_INSTANCE_CAST (_tmp24_, VALA_TYPE_STRUCT, ValaStruct);
1633 	_tmp26_ = vala_integer_type_new (_tmp25_, NULL, NULL);
1634 	_vala_code_node_unref0 (self->short_type);
1635 	self->short_type = (ValaDataType*) _tmp26_;
1636 	_vala_code_node_unref0 (_tmp25_);
1637 	_tmp27_ = self->root_symbol;
1638 	_tmp28_ = vala_symbol_get_scope (_tmp27_);
1639 	_tmp29_ = _tmp28_;
1640 	_tmp30_ = vala_scope_lookup (_tmp29_, "ushort");
1641 	_tmp31_ = G_TYPE_CHECK_INSTANCE_CAST (_tmp30_, VALA_TYPE_STRUCT, ValaStruct);
1642 	_tmp32_ = vala_integer_type_new (_tmp31_, NULL, NULL);
1643 	_vala_code_node_unref0 (self->ushort_type);
1644 	self->ushort_type = (ValaDataType*) _tmp32_;
1645 	_vala_code_node_unref0 (_tmp31_);
1646 	_tmp33_ = self->root_symbol;
1647 	_tmp34_ = vala_symbol_get_scope (_tmp33_);
1648 	_tmp35_ = _tmp34_;
1649 	_tmp36_ = vala_scope_lookup (_tmp35_, "int");
1650 	_tmp37_ = G_TYPE_CHECK_INSTANCE_CAST (_tmp36_, VALA_TYPE_STRUCT, ValaStruct);
1651 	_tmp38_ = vala_integer_type_new (_tmp37_, NULL, NULL);
1652 	_vala_code_node_unref0 (self->int_type);
1653 	self->int_type = (ValaDataType*) _tmp38_;
1654 	_vala_code_node_unref0 (_tmp37_);
1655 	_tmp39_ = self->root_symbol;
1656 	_tmp40_ = vala_symbol_get_scope (_tmp39_);
1657 	_tmp41_ = _tmp40_;
1658 	_tmp42_ = vala_scope_lookup (_tmp41_, "uint");
1659 	_tmp43_ = G_TYPE_CHECK_INSTANCE_CAST (_tmp42_, VALA_TYPE_STRUCT, ValaStruct);
1660 	_tmp44_ = vala_integer_type_new (_tmp43_, NULL, NULL);
1661 	_vala_code_node_unref0 (self->uint_type);
1662 	self->uint_type = (ValaDataType*) _tmp44_;
1663 	_vala_code_node_unref0 (_tmp43_);
1664 	_tmp45_ = self->root_symbol;
1665 	_tmp46_ = vala_symbol_get_scope (_tmp45_);
1666 	_tmp47_ = _tmp46_;
1667 	_tmp48_ = vala_scope_lookup (_tmp47_, "long");
1668 	_tmp49_ = G_TYPE_CHECK_INSTANCE_CAST (_tmp48_, VALA_TYPE_STRUCT, ValaStruct);
1669 	_tmp50_ = vala_integer_type_new (_tmp49_, NULL, NULL);
1670 	_vala_code_node_unref0 (self->long_type);
1671 	self->long_type = (ValaDataType*) _tmp50_;
1672 	_vala_code_node_unref0 (_tmp49_);
1673 	_tmp51_ = self->root_symbol;
1674 	_tmp52_ = vala_symbol_get_scope (_tmp51_);
1675 	_tmp53_ = _tmp52_;
1676 	_tmp54_ = vala_scope_lookup (_tmp53_, "ulong");
1677 	_tmp55_ = G_TYPE_CHECK_INSTANCE_CAST (_tmp54_, VALA_TYPE_STRUCT, ValaStruct);
1678 	_tmp56_ = vala_integer_type_new (_tmp55_, NULL, NULL);
1679 	_vala_code_node_unref0 (self->ulong_type);
1680 	self->ulong_type = (ValaDataType*) _tmp56_;
1681 	_vala_code_node_unref0 (_tmp55_);
1682 	_tmp57_ = self->root_symbol;
1683 	_tmp58_ = vala_symbol_get_scope (_tmp57_);
1684 	_tmp59_ = _tmp58_;
1685 	_tmp60_ = vala_scope_lookup (_tmp59_, "int8");
1686 	_tmp61_ = G_TYPE_CHECK_INSTANCE_CAST (_tmp60_, VALA_TYPE_STRUCT, ValaStruct);
1687 	_tmp62_ = vala_integer_type_new (_tmp61_, NULL, NULL);
1688 	_vala_code_node_unref0 (self->int8_type);
1689 	self->int8_type = (ValaDataType*) _tmp62_;
1690 	_vala_code_node_unref0 (_tmp61_);
1691 	_tmp63_ = self->root_symbol;
1692 	_tmp64_ = vala_symbol_get_scope (_tmp63_);
1693 	_tmp65_ = _tmp64_;
1694 	_tmp66_ = vala_scope_lookup (_tmp65_, "uint8");
1695 	_tmp67_ = G_TYPE_CHECK_INSTANCE_CAST (_tmp66_, VALA_TYPE_STRUCT, ValaStruct);
1696 	_tmp68_ = vala_integer_type_new (_tmp67_, NULL, NULL);
1697 	_vala_code_node_unref0 (self->uint8_type);
1698 	self->uint8_type = (ValaDataType*) _tmp68_;
1699 	_vala_code_node_unref0 (_tmp67_);
1700 	_tmp69_ = self->root_symbol;
1701 	_tmp70_ = vala_symbol_get_scope (_tmp69_);
1702 	_tmp71_ = _tmp70_;
1703 	_tmp72_ = vala_scope_lookup (_tmp71_, "int16");
1704 	_tmp73_ = G_TYPE_CHECK_INSTANCE_CAST (_tmp72_, VALA_TYPE_STRUCT, ValaStruct);
1705 	_tmp74_ = vala_integer_type_new (_tmp73_, NULL, NULL);
1706 	_vala_code_node_unref0 (self->int16_type);
1707 	self->int16_type = (ValaDataType*) _tmp74_;
1708 	_vala_code_node_unref0 (_tmp73_);
1709 	_tmp75_ = self->root_symbol;
1710 	_tmp76_ = vala_symbol_get_scope (_tmp75_);
1711 	_tmp77_ = _tmp76_;
1712 	_tmp78_ = vala_scope_lookup (_tmp77_, "uint16");
1713 	_tmp79_ = G_TYPE_CHECK_INSTANCE_CAST (_tmp78_, VALA_TYPE_STRUCT, ValaStruct);
1714 	_tmp80_ = vala_integer_type_new (_tmp79_, NULL, NULL);
1715 	_vala_code_node_unref0 (self->uint16_type);
1716 	self->uint16_type = (ValaDataType*) _tmp80_;
1717 	_vala_code_node_unref0 (_tmp79_);
1718 	_tmp81_ = self->root_symbol;
1719 	_tmp82_ = vala_symbol_get_scope (_tmp81_);
1720 	_tmp83_ = _tmp82_;
1721 	_tmp84_ = vala_scope_lookup (_tmp83_, "int32");
1722 	_tmp85_ = G_TYPE_CHECK_INSTANCE_CAST (_tmp84_, VALA_TYPE_STRUCT, ValaStruct);
1723 	_tmp86_ = vala_integer_type_new (_tmp85_, NULL, NULL);
1724 	_vala_code_node_unref0 (self->int32_type);
1725 	self->int32_type = (ValaDataType*) _tmp86_;
1726 	_vala_code_node_unref0 (_tmp85_);
1727 	_tmp87_ = self->root_symbol;
1728 	_tmp88_ = vala_symbol_get_scope (_tmp87_);
1729 	_tmp89_ = _tmp88_;
1730 	_tmp90_ = vala_scope_lookup (_tmp89_, "uint32");
1731 	_tmp91_ = G_TYPE_CHECK_INSTANCE_CAST (_tmp90_, VALA_TYPE_STRUCT, ValaStruct);
1732 	_tmp92_ = vala_integer_type_new (_tmp91_, NULL, NULL);
1733 	_vala_code_node_unref0 (self->uint32_type);
1734 	self->uint32_type = (ValaDataType*) _tmp92_;
1735 	_vala_code_node_unref0 (_tmp91_);
1736 	_tmp93_ = self->root_symbol;
1737 	_tmp94_ = vala_symbol_get_scope (_tmp93_);
1738 	_tmp95_ = _tmp94_;
1739 	_tmp96_ = vala_scope_lookup (_tmp95_, "int64");
1740 	_tmp97_ = G_TYPE_CHECK_INSTANCE_CAST (_tmp96_, VALA_TYPE_STRUCT, ValaStruct);
1741 	_tmp98_ = vala_integer_type_new (_tmp97_, NULL, NULL);
1742 	_vala_code_node_unref0 (self->int64_type);
1743 	self->int64_type = (ValaDataType*) _tmp98_;
1744 	_vala_code_node_unref0 (_tmp97_);
1745 	_tmp99_ = self->root_symbol;
1746 	_tmp100_ = vala_symbol_get_scope (_tmp99_);
1747 	_tmp101_ = _tmp100_;
1748 	_tmp102_ = vala_scope_lookup (_tmp101_, "uint64");
1749 	_tmp103_ = G_TYPE_CHECK_INSTANCE_CAST (_tmp102_, VALA_TYPE_STRUCT, ValaStruct);
1750 	_tmp104_ = vala_integer_type_new (_tmp103_, NULL, NULL);
1751 	_vala_code_node_unref0 (self->uint64_type);
1752 	self->uint64_type = (ValaDataType*) _tmp104_;
1753 	_vala_code_node_unref0 (_tmp103_);
1754 	_tmp105_ = self->root_symbol;
1755 	_tmp106_ = vala_symbol_get_scope (_tmp105_);
1756 	_tmp107_ = _tmp106_;
1757 	_tmp108_ = vala_scope_lookup (_tmp107_, "size_t");
1758 	_tmp109_ = G_TYPE_CHECK_INSTANCE_CAST (_tmp108_, VALA_TYPE_STRUCT, ValaStruct);
1759 	_tmp110_ = vala_integer_type_new (_tmp109_, NULL, NULL);
1760 	_vala_code_node_unref0 (self->size_t_type);
1761 	self->size_t_type = (ValaDataType*) _tmp110_;
1762 	_vala_code_node_unref0 (_tmp109_);
1763 	_tmp111_ = self->root_symbol;
1764 	_tmp112_ = vala_symbol_get_scope (_tmp111_);
1765 	_tmp113_ = _tmp112_;
1766 	_tmp114_ = vala_scope_lookup (_tmp113_, "float");
1767 	_tmp115_ = G_TYPE_CHECK_INSTANCE_CAST (_tmp114_, VALA_TYPE_STRUCT, ValaStruct);
1768 	_tmp116_ = vala_floating_type_new (_tmp115_);
1769 	_vala_code_node_unref0 (self->float_type);
1770 	self->float_type = (ValaDataType*) _tmp116_;
1771 	_vala_code_node_unref0 (_tmp115_);
1772 	_tmp117_ = self->root_symbol;
1773 	_tmp118_ = vala_symbol_get_scope (_tmp117_);
1774 	_tmp119_ = _tmp118_;
1775 	_tmp120_ = vala_scope_lookup (_tmp119_, "double");
1776 	_tmp121_ = G_TYPE_CHECK_INSTANCE_CAST (_tmp120_, VALA_TYPE_STRUCT, ValaStruct);
1777 	_tmp122_ = vala_floating_type_new (_tmp121_);
1778 	_vala_code_node_unref0 (self->double_type);
1779 	self->double_type = (ValaDataType*) _tmp122_;
1780 	_vala_code_node_unref0 (_tmp121_);
1781 	_tmp123_ = self->root_symbol;
1782 	_tmp124_ = vala_symbol_get_scope (_tmp123_);
1783 	_tmp125_ = _tmp124_;
1784 	_tmp126_ = vala_scope_lookup (_tmp125_, "string");
1785 	_tmp127_ = G_TYPE_CHECK_INSTANCE_CAST (_tmp126_, VALA_TYPE_CLASS, ValaClass);
1786 	_tmp128_ = vala_object_type_new ((ValaObjectTypeSymbol*) _tmp127_);
1787 	_vala_code_node_unref0 (self->string_type);
1788 	self->string_type = (ValaDataType*) _tmp128_;
1789 	_vala_code_node_unref0 (_tmp127_);
1790 	_tmp129_ = self->root_symbol;
1791 	_tmp130_ = vala_symbol_get_scope (_tmp129_);
1792 	_tmp131_ = _tmp130_;
1793 	_tmp132_ = vala_scope_lookup (_tmp131_, "unichar");
1794 	unichar_struct = G_TYPE_CHECK_INSTANCE_CAST (_tmp132_, VALA_TYPE_STRUCT, ValaStruct);
1795 	_tmp133_ = unichar_struct;
1796 	if (_tmp133_ != NULL) {
1797 		ValaStruct* _tmp134_;
1798 		ValaIntegerType* _tmp135_;
1799 		_tmp134_ = unichar_struct;
1800 		_tmp135_ = vala_integer_type_new (_tmp134_, NULL, NULL);
1801 		_vala_code_node_unref0 (self->unichar_type);
1802 		self->unichar_type = (ValaDataType*) _tmp135_;
1803 	}
1804 	_tmp136_ = vala_code_context_get_profile (context);
1805 	_tmp137_ = _tmp136_;
1806 	if (_tmp137_ == VALA_PROFILE_GOBJECT) {
1807 		ValaSymbol* glib_ns = NULL;
1808 		ValaSymbol* _tmp138_;
1809 		ValaScope* _tmp139_;
1810 		ValaScope* _tmp140_;
1811 		ValaSymbol* _tmp141_;
1812 		ValaSymbol* _tmp142_;
1813 		ValaScope* _tmp143_;
1814 		ValaScope* _tmp144_;
1815 		ValaSymbol* _tmp145_;
1816 		ValaSymbol* _tmp146_;
1817 		ValaScope* _tmp147_;
1818 		ValaScope* _tmp148_;
1819 		ValaSymbol* _tmp149_;
1820 		ValaErrorType* _tmp150_;
1821 		ValaSymbol* _tmp151_;
1822 		ValaScope* _tmp152_;
1823 		ValaScope* _tmp153_;
1824 		ValaSymbol* _tmp154_;
1825 		ValaSymbol* _tmp155_;
1826 		ValaScope* _tmp156_;
1827 		ValaScope* _tmp157_;
1828 		ValaSymbol* _tmp158_;
1829 		ValaSymbol* _tmp159_;
1830 		ValaScope* _tmp160_;
1831 		ValaScope* _tmp161_;
1832 		ValaSymbol* _tmp162_;
1833 		ValaSymbol* _tmp163_;
1834 		ValaScope* _tmp164_;
1835 		ValaScope* _tmp165_;
1836 		ValaSymbol* _tmp166_;
1837 		ValaSymbol* _tmp167_;
1838 		ValaScope* _tmp168_;
1839 		ValaScope* _tmp169_;
1840 		ValaSymbol* _tmp170_;
1841 		ValaSymbol* _tmp171_;
1842 		ValaScope* _tmp172_;
1843 		ValaScope* _tmp173_;
1844 		ValaSymbol* _tmp174_;
1845 		ValaSymbol* _tmp175_;
1846 		ValaScope* _tmp176_;
1847 		ValaScope* _tmp177_;
1848 		ValaSymbol* _tmp178_;
1849 		ValaSymbol* _tmp179_;
1850 		ValaScope* _tmp180_;
1851 		ValaScope* _tmp181_;
1852 		ValaSymbol* _tmp182_;
1853 		ValaSymbol* _tmp183_;
1854 		ValaScope* _tmp184_;
1855 		ValaScope* _tmp185_;
1856 		ValaSymbol* _tmp186_;
1857 		ValaSymbol* _tmp187_;
1858 		ValaScope* _tmp188_;
1859 		ValaScope* _tmp189_;
1860 		ValaSymbol* _tmp190_;
1861 		ValaSymbol* _tmp191_;
1862 		ValaScope* _tmp192_;
1863 		ValaScope* _tmp193_;
1864 		ValaSymbol* _tmp194_;
1865 		ValaSymbol* _tmp195_;
1866 		ValaScope* _tmp196_;
1867 		ValaScope* _tmp197_;
1868 		ValaSymbol* _tmp198_;
1869 		ValaSymbol* _tmp199_;
1870 		ValaScope* _tmp200_;
1871 		ValaScope* _tmp201_;
1872 		ValaSymbol* _tmp202_;
1873 		ValaStruct* _tmp203_;
1874 		ValaIntegerType* _tmp204_;
1875 		ValaSymbol* _tmp205_;
1876 		ValaScope* _tmp206_;
1877 		ValaScope* _tmp207_;
1878 		ValaSymbol* _tmp208_;
1879 		ValaSymbol* _tmp209_;
1880 		ValaScope* _tmp210_;
1881 		ValaScope* _tmp211_;
1882 		ValaSymbol* _tmp212_;
1883 		ValaSymbol* _tmp213_;
1884 		ValaScope* _tmp214_;
1885 		ValaScope* _tmp215_;
1886 		ValaSymbol* _tmp216_;
1887 		ValaSymbol* _tmp217_;
1888 		ValaScope* _tmp218_;
1889 		ValaScope* _tmp219_;
1890 		ValaSymbol* _tmp220_;
1891 		ValaSymbol* _tmp221_;
1892 		ValaScope* _tmp222_;
1893 		ValaScope* _tmp223_;
1894 		ValaSymbol* _tmp224_;
1895 		ValaSymbol* _tmp225_;
1896 		ValaScope* _tmp226_;
1897 		ValaScope* _tmp227_;
1898 		ValaSymbol* _tmp228_;
1899 		ValaSymbol* _tmp229_;
1900 		ValaScope* _tmp230_;
1901 		ValaScope* _tmp231_;
1902 		ValaSymbol* _tmp232_;
1903 		ValaStruct* _tmp233_;
1904 		ValaStruct* _tmp234_;
1905 		ValaSymbol* _tmp235_;
1906 		ValaScope* _tmp236_;
1907 		ValaScope* _tmp237_;
1908 		ValaSymbol* _tmp238_;
1909 		ValaSymbol* _tmp239_;
1910 		ValaScope* _tmp240_;
1911 		ValaScope* _tmp241_;
1912 		ValaSymbol* _tmp242_;
1913 		ValaSymbol* _tmp243_;
1914 		ValaScope* _tmp244_;
1915 		ValaScope* _tmp245_;
1916 		ValaSymbol* _tmp246_;
1917 		ValaClass* _tmp247_;
1918 		ValaObjectType* _tmp248_;
1919 		ValaMethod* _tmp249_;
1920 		ValaMethod* _tmp250_;
1921 		ValaSymbol* _tmp272_;
1922 		ValaScope* _tmp273_;
1923 		ValaScope* _tmp274_;
1924 		ValaSymbol* _tmp275_;
1925 		ValaSymbol* _tmp276_;
1926 		ValaScope* _tmp277_;
1927 		ValaScope* _tmp278_;
1928 		ValaSymbol* _tmp279_;
1929 		ValaStruct* _tmp280_;
1930 		ValaStructValueType* _tmp281_;
1931 		ValaDataType* _tmp282_;
1932 		ValaDataType* _tmp283_;
1933 		ValaSymbol* _tmp284_;
1934 		ValaScope* _tmp285_;
1935 		ValaScope* _tmp286_;
1936 		ValaSymbol* _tmp287_;
1937 		ValaDelegate* _tmp288_;
1938 		ValaDelegateType* _tmp289_;
1939 		_tmp138_ = self->root_symbol;
1940 		_tmp139_ = vala_symbol_get_scope (_tmp138_);
1941 		_tmp140_ = _tmp139_;
1942 		_tmp141_ = vala_scope_lookup (_tmp140_, "GLib");
1943 		glib_ns = _tmp141_;
1944 		_tmp142_ = glib_ns;
1945 		_tmp143_ = vala_symbol_get_scope (_tmp142_);
1946 		_tmp144_ = _tmp143_;
1947 		_tmp145_ = vala_scope_lookup (_tmp144_, "Type");
1948 		_vala_code_node_unref0 (self->gtype_type);
1949 		self->gtype_type = G_TYPE_CHECK_INSTANCE_CAST (_tmp145_, VALA_TYPE_TYPESYMBOL, ValaTypeSymbol);
1950 		_tmp146_ = glib_ns;
1951 		_tmp147_ = vala_symbol_get_scope (_tmp146_);
1952 		_tmp148_ = _tmp147_;
1953 		_tmp149_ = vala_scope_lookup (_tmp148_, "Object");
1954 		_vala_code_node_unref0 (self->gobject_type);
1955 		self->gobject_type = G_TYPE_CHECK_INSTANCE_CAST (_tmp149_, VALA_TYPE_TYPESYMBOL, ValaTypeSymbol);
1956 		_tmp150_ = vala_error_type_new (NULL, NULL, NULL);
1957 		_vala_code_node_unref0 (self->gerror_type);
1958 		self->gerror_type = _tmp150_;
1959 		_tmp151_ = glib_ns;
1960 		_tmp152_ = vala_symbol_get_scope (_tmp151_);
1961 		_tmp153_ = _tmp152_;
1962 		_tmp154_ = vala_scope_lookup (_tmp153_, "List");
1963 		_vala_code_node_unref0 (self->glist_type);
1964 		self->glist_type = G_TYPE_CHECK_INSTANCE_CAST (_tmp154_, VALA_TYPE_CLASS, ValaClass);
1965 		_tmp155_ = glib_ns;
1966 		_tmp156_ = vala_symbol_get_scope (_tmp155_);
1967 		_tmp157_ = _tmp156_;
1968 		_tmp158_ = vala_scope_lookup (_tmp157_, "SList");
1969 		_vala_code_node_unref0 (self->gslist_type);
1970 		self->gslist_type = G_TYPE_CHECK_INSTANCE_CAST (_tmp158_, VALA_TYPE_CLASS, ValaClass);
1971 		_tmp159_ = glib_ns;
1972 		_tmp160_ = vala_symbol_get_scope (_tmp159_);
1973 		_tmp161_ = _tmp160_;
1974 		_tmp162_ = vala_scope_lookup (_tmp161_, "Node");
1975 		_vala_code_node_unref0 (self->gnode_type);
1976 		self->gnode_type = G_TYPE_CHECK_INSTANCE_CAST (_tmp162_, VALA_TYPE_CLASS, ValaClass);
1977 		_tmp163_ = glib_ns;
1978 		_tmp164_ = vala_symbol_get_scope (_tmp163_);
1979 		_tmp165_ = _tmp164_;
1980 		_tmp166_ = vala_scope_lookup (_tmp165_, "Queue");
1981 		_vala_code_node_unref0 (self->gqueue_type);
1982 		self->gqueue_type = G_TYPE_CHECK_INSTANCE_CAST (_tmp166_, VALA_TYPE_CLASS, ValaClass);
1983 		_tmp167_ = glib_ns;
1984 		_tmp168_ = vala_symbol_get_scope (_tmp167_);
1985 		_tmp169_ = _tmp168_;
1986 		_tmp170_ = vala_scope_lookup (_tmp169_, "ValueArray");
1987 		_vala_code_node_unref0 (self->gvaluearray_type);
1988 		self->gvaluearray_type = G_TYPE_CHECK_INSTANCE_CAST (_tmp170_, VALA_TYPE_CLASS, ValaClass);
1989 		_tmp171_ = glib_ns;
1990 		_tmp172_ = vala_symbol_get_scope (_tmp171_);
1991 		_tmp173_ = _tmp172_;
1992 		_tmp174_ = vala_scope_lookup (_tmp173_, "StringBuilder");
1993 		_vala_code_node_unref0 (self->gstringbuilder_type);
1994 		self->gstringbuilder_type = G_TYPE_CHECK_INSTANCE_CAST (_tmp174_, VALA_TYPE_TYPESYMBOL, ValaTypeSymbol);
1995 		_tmp175_ = glib_ns;
1996 		_tmp176_ = vala_symbol_get_scope (_tmp175_);
1997 		_tmp177_ = _tmp176_;
1998 		_tmp178_ = vala_scope_lookup (_tmp177_, "Array");
1999 		_vala_code_node_unref0 (self->garray_type);
2000 		self->garray_type = G_TYPE_CHECK_INSTANCE_CAST (_tmp178_, VALA_TYPE_TYPESYMBOL, ValaTypeSymbol);
2001 		_tmp179_ = glib_ns;
2002 		_tmp180_ = vala_symbol_get_scope (_tmp179_);
2003 		_tmp181_ = _tmp180_;
2004 		_tmp182_ = vala_scope_lookup (_tmp181_, "ByteArray");
2005 		_vala_code_node_unref0 (self->gbytearray_type);
2006 		self->gbytearray_type = G_TYPE_CHECK_INSTANCE_CAST (_tmp182_, VALA_TYPE_TYPESYMBOL, ValaTypeSymbol);
2007 		_tmp183_ = glib_ns;
2008 		_tmp184_ = vala_symbol_get_scope (_tmp183_);
2009 		_tmp185_ = _tmp184_;
2010 		_tmp186_ = vala_scope_lookup (_tmp185_, "PtrArray");
2011 		_vala_code_node_unref0 (self->gptrarray_type);
2012 		self->gptrarray_type = G_TYPE_CHECK_INSTANCE_CAST (_tmp186_, VALA_TYPE_TYPESYMBOL, ValaTypeSymbol);
2013 		_tmp187_ = glib_ns;
2014 		_tmp188_ = vala_symbol_get_scope (_tmp187_);
2015 		_tmp189_ = _tmp188_;
2016 		_tmp190_ = vala_scope_lookup (_tmp189_, "ThreadPool");
2017 		_vala_code_node_unref0 (self->gthreadpool_type);
2018 		self->gthreadpool_type = G_TYPE_CHECK_INSTANCE_CAST (_tmp190_, VALA_TYPE_TYPESYMBOL, ValaTypeSymbol);
2019 		_tmp191_ = self->root_symbol;
2020 		_tmp192_ = vala_symbol_get_scope (_tmp191_);
2021 		_tmp193_ = _tmp192_;
2022 		_tmp194_ = vala_scope_lookup (_tmp193_, "GLib");
2023 		_tmp195_ = _tmp194_;
2024 		_tmp196_ = vala_symbol_get_scope (_tmp195_);
2025 		_tmp197_ = _tmp196_;
2026 		_tmp198_ = vala_scope_lookup (_tmp197_, "Error");
2027 		_vala_code_node_unref0 (self->priv->gerror);
2028 		self->priv->gerror = G_TYPE_CHECK_INSTANCE_CAST (_tmp198_, VALA_TYPE_CLASS, ValaClass);
2029 		_vala_code_node_unref0 (_tmp195_);
2030 		_tmp199_ = glib_ns;
2031 		_tmp200_ = vala_symbol_get_scope (_tmp199_);
2032 		_tmp201_ = _tmp200_;
2033 		_tmp202_ = vala_scope_lookup (_tmp201_, "Quark");
2034 		_tmp203_ = G_TYPE_CHECK_INSTANCE_CAST (_tmp202_, VALA_TYPE_STRUCT, ValaStruct);
2035 		_tmp204_ = vala_integer_type_new (_tmp203_, NULL, NULL);
2036 		_vala_code_node_unref0 (self->gquark_type);
2037 		self->gquark_type = (ValaDataType*) _tmp204_;
2038 		_vala_code_node_unref0 (_tmp203_);
2039 		_tmp205_ = glib_ns;
2040 		_tmp206_ = vala_symbol_get_scope (_tmp205_);
2041 		_tmp207_ = _tmp206_;
2042 		_tmp208_ = vala_scope_lookup (_tmp207_, "Value");
2043 		_vala_code_node_unref0 (self->gvalue_type);
2044 		self->gvalue_type = G_TYPE_CHECK_INSTANCE_CAST (_tmp208_, VALA_TYPE_STRUCT, ValaStruct);
2045 		_tmp209_ = glib_ns;
2046 		_tmp210_ = vala_symbol_get_scope (_tmp209_);
2047 		_tmp211_ = _tmp210_;
2048 		_tmp212_ = vala_scope_lookup (_tmp211_, "Variant");
2049 		_vala_code_node_unref0 (self->gvariant_type);
2050 		self->gvariant_type = G_TYPE_CHECK_INSTANCE_CAST (_tmp212_, VALA_TYPE_CLASS, ValaClass);
2051 		_tmp213_ = glib_ns;
2052 		_tmp214_ = vala_symbol_get_scope (_tmp213_);
2053 		_tmp215_ = _tmp214_;
2054 		_tmp216_ = vala_scope_lookup (_tmp215_, "Source");
2055 		_vala_code_node_unref0 (self->gsource_type);
2056 		self->gsource_type = G_TYPE_CHECK_INSTANCE_CAST (_tmp216_, VALA_TYPE_CLASS, ValaClass);
2057 		_tmp217_ = glib_ns;
2058 		_tmp218_ = vala_symbol_get_scope (_tmp217_);
2059 		_tmp219_ = _tmp218_;
2060 		_tmp220_ = vala_scope_lookup (_tmp219_, "Mutex");
2061 		_vala_code_node_unref0 (self->gmutex_type);
2062 		self->gmutex_type = G_TYPE_CHECK_INSTANCE_CAST (_tmp220_, VALA_TYPE_STRUCT, ValaStruct);
2063 		_tmp221_ = glib_ns;
2064 		_tmp222_ = vala_symbol_get_scope (_tmp221_);
2065 		_tmp223_ = _tmp222_;
2066 		_tmp224_ = vala_scope_lookup (_tmp223_, "RecMutex");
2067 		_vala_code_node_unref0 (self->grecmutex_type);
2068 		self->grecmutex_type = G_TYPE_CHECK_INSTANCE_CAST (_tmp224_, VALA_TYPE_STRUCT, ValaStruct);
2069 		_tmp225_ = glib_ns;
2070 		_tmp226_ = vala_symbol_get_scope (_tmp225_);
2071 		_tmp227_ = _tmp226_;
2072 		_tmp228_ = vala_scope_lookup (_tmp227_, "RWLock");
2073 		_vala_code_node_unref0 (self->grwlock_type);
2074 		self->grwlock_type = G_TYPE_CHECK_INSTANCE_CAST (_tmp228_, VALA_TYPE_STRUCT, ValaStruct);
2075 		_tmp229_ = glib_ns;
2076 		_tmp230_ = vala_symbol_get_scope (_tmp229_);
2077 		_tmp231_ = _tmp230_;
2078 		_tmp232_ = vala_scope_lookup (_tmp231_, "Cond");
2079 		_vala_code_node_unref0 (self->gcond_type);
2080 		self->gcond_type = G_TYPE_CHECK_INSTANCE_CAST (_tmp232_, VALA_TYPE_STRUCT, ValaStruct);
2081 		_tmp233_ = self->grecmutex_type;
2082 		_tmp234_ = _vala_code_node_ref0 (_tmp233_);
2083 		_vala_code_node_unref0 (self->mutex_type);
2084 		self->mutex_type = _tmp234_;
2085 		_tmp235_ = glib_ns;
2086 		_tmp236_ = vala_symbol_get_scope (_tmp235_);
2087 		_tmp237_ = _tmp236_;
2088 		_tmp238_ = vala_scope_lookup (_tmp237_, "TypeModule");
2089 		_vala_code_node_unref0 (self->type_module_type);
2090 		self->type_module_type = G_TYPE_CHECK_INSTANCE_CAST (_tmp238_, VALA_TYPE_TYPESYMBOL, ValaTypeSymbol);
2091 		_tmp239_ = self->root_symbol;
2092 		_tmp240_ = vala_symbol_get_scope (_tmp239_);
2093 		_tmp241_ = _tmp240_;
2094 		_tmp242_ = vala_scope_lookup (_tmp241_, "GLib");
2095 		_tmp243_ = _tmp242_;
2096 		_tmp244_ = vala_symbol_get_scope (_tmp243_);
2097 		_tmp245_ = _tmp244_;
2098 		_tmp246_ = vala_scope_lookup (_tmp245_, "Regex");
2099 		_tmp247_ = G_TYPE_CHECK_INSTANCE_CAST (_tmp246_, VALA_TYPE_CLASS, ValaClass);
2100 		_tmp248_ = vala_object_type_new ((ValaObjectTypeSymbol*) _tmp247_);
2101 		_vala_code_node_unref0 (self->regex_type);
2102 		self->regex_type = (ValaDataType*) _tmp248_;
2103 		_vala_code_node_unref0 (_tmp247_);
2104 		_vala_code_node_unref0 (_tmp243_);
2105 		_tmp249_ = vala_code_context_get_module_init_method (context);
2106 		_tmp250_ = _tmp249_;
2107 		if (_tmp250_ != NULL) {
2108 			{
2109 				ValaList* _parameter_list = NULL;
2110 				ValaMethod* _tmp251_;
2111 				ValaMethod* _tmp252_;
2112 				ValaList* _tmp253_;
2113 				ValaList* _tmp254_;
2114 				gint _parameter_size = 0;
2115 				ValaList* _tmp255_;
2116 				gint _tmp256_;
2117 				gint _tmp257_;
2118 				gint _parameter_index = 0;
2119 				_tmp251_ = vala_code_context_get_module_init_method (context);
2120 				_tmp252_ = _tmp251_;
2121 				_tmp253_ = vala_callable_get_parameters ((ValaCallable*) _tmp252_);
2122 				_tmp254_ = _vala_iterable_ref0 (_tmp253_);
2123 				_parameter_list = _tmp254_;
2124 				_tmp255_ = _parameter_list;
2125 				_tmp256_ = vala_collection_get_size ((ValaCollection*) _tmp255_);
2126 				_tmp257_ = _tmp256_;
2127 				_parameter_size = _tmp257_;
2128 				_parameter_index = -1;
2129 				while (TRUE) {
2130 					gint _tmp258_;
2131 					gint _tmp259_;
2132 					ValaParameter* parameter = NULL;
2133 					ValaList* _tmp260_;
2134 					gpointer _tmp261_;
2135 					ValaParameter* _tmp262_;
2136 					ValaDataType* _tmp263_;
2137 					ValaDataType* _tmp264_;
2138 					ValaTypeSymbol* _tmp265_;
2139 					ValaTypeSymbol* _tmp266_;
2140 					ValaTypeSymbol* _tmp267_;
2141 					_parameter_index = _parameter_index + 1;
2142 					_tmp258_ = _parameter_index;
2143 					_tmp259_ = _parameter_size;
2144 					if (!(_tmp258_ < _tmp259_)) {
2145 						break;
2146 					}
2147 					_tmp260_ = _parameter_list;
2148 					_tmp261_ = vala_list_get (_tmp260_, _parameter_index);
2149 					parameter = (ValaParameter*) _tmp261_;
2150 					_tmp262_ = parameter;
2151 					_tmp263_ = vala_variable_get_variable_type ((ValaVariable*) _tmp262_);
2152 					_tmp264_ = _tmp263_;
2153 					_tmp265_ = vala_data_type_get_type_symbol (_tmp264_);
2154 					_tmp266_ = _tmp265_;
2155 					_tmp267_ = self->type_module_type;
2156 					if (vala_typesymbol_is_subtype_of (_tmp266_, _tmp267_)) {
2157 						ValaParameter* _tmp268_;
2158 						const gchar* _tmp269_;
2159 						const gchar* _tmp270_;
2160 						gchar* _tmp271_;
2161 						self->in_plugin = TRUE;
2162 						_tmp268_ = parameter;
2163 						_tmp269_ = vala_symbol_get_name ((ValaSymbol*) _tmp268_);
2164 						_tmp270_ = _tmp269_;
2165 						_tmp271_ = g_strdup (_tmp270_);
2166 						_g_free0 (self->module_init_param_name);
2167 						self->module_init_param_name = _tmp271_;
2168 						_vala_code_node_unref0 (parameter);
2169 						break;
2170 					}
2171 					_vala_code_node_unref0 (parameter);
2172 				}
2173 				_vala_iterable_unref0 (_parameter_list);
2174 			}
2175 		}
2176 		_tmp272_ = glib_ns;
2177 		_tmp273_ = vala_symbol_get_scope (_tmp272_);
2178 		_tmp274_ = _tmp273_;
2179 		_tmp275_ = vala_scope_lookup (_tmp274_, "DBusProxy");
2180 		_vala_code_node_unref0 (self->dbus_proxy_type);
2181 		self->dbus_proxy_type = G_TYPE_CHECK_INSTANCE_CAST (_tmp275_, VALA_TYPE_TYPESYMBOL, ValaTypeSymbol);
2182 		_tmp276_ = glib_ns;
2183 		_tmp277_ = vala_symbol_get_scope (_tmp276_);
2184 		_tmp278_ = _tmp277_;
2185 		_tmp279_ = vala_scope_lookup (_tmp278_, "pointer");
2186 		_tmp280_ = G_TYPE_CHECK_INSTANCE_CAST (_tmp279_, VALA_TYPE_STRUCT, ValaStruct);
2187 		_tmp281_ = vala_struct_value_type_new (_tmp280_);
2188 		_vala_code_node_unref0 (self->pointer_type);
2189 		self->pointer_type = (ValaDataType*) _tmp281_;
2190 		_vala_code_node_unref0 (_tmp280_);
2191 		_tmp282_ = self->pointer_type;
2192 		_tmp283_ = _vala_code_node_ref0 (_tmp282_);
2193 		_vala_code_node_unref0 (self->delegate_target_type);
2194 		self->delegate_target_type = _tmp283_;
2195 		_tmp284_ = glib_ns;
2196 		_tmp285_ = vala_symbol_get_scope (_tmp284_);
2197 		_tmp286_ = _tmp285_;
2198 		_tmp287_ = vala_scope_lookup (_tmp286_, "DestroyNotify");
2199 		_vala_code_node_unref0 (self->priv->destroy_notify);
2200 		self->priv->destroy_notify = G_TYPE_CHECK_INSTANCE_CAST (_tmp287_, VALA_TYPE_DELEGATE, ValaDelegate);
2201 		_tmp288_ = self->priv->destroy_notify;
2202 		_tmp289_ = vala_delegate_type_new (_tmp288_);
2203 		_vala_code_node_unref0 (self->delegate_target_destroy_type);
2204 		self->delegate_target_destroy_type = _tmp289_;
2205 		_vala_code_node_unref0 (glib_ns);
2206 	} else {
2207 		ValaVoidType* _tmp290_;
2208 		ValaVoidType* _tmp291_;
2209 		ValaPointerType* _tmp292_;
2210 		ValaDataType* _tmp293_;
2211 		ValaDataType* _tmp294_;
2212 		ValaVoidType* _tmp295_;
2213 		ValaVoidType* _tmp296_;
2214 		ValaDelegate* _tmp297_;
2215 		ValaDelegate* _tmp298_;
2216 		ValaVoidType* _tmp299_;
2217 		ValaVoidType* _tmp300_;
2218 		ValaPointerType* _tmp301_;
2219 		ValaPointerType* _tmp302_;
2220 		ValaParameter* _tmp303_;
2221 		ValaParameter* _tmp304_;
2222 		ValaDelegate* _tmp305_;
2223 		ValaDelegate* _tmp306_;
2224 		ValaSymbol* _tmp307_;
2225 		ValaScope* _tmp308_;
2226 		ValaScope* _tmp309_;
2227 		ValaDelegate* _tmp310_;
2228 		ValaDelegateType* _tmp311_;
2229 		_tmp290_ = vala_void_type_new (NULL);
2230 		_tmp291_ = _tmp290_;
2231 		_tmp292_ = vala_pointer_type_new ((ValaDataType*) _tmp291_, NULL);
2232 		_vala_code_node_unref0 (self->pointer_type);
2233 		self->pointer_type = (ValaDataType*) _tmp292_;
2234 		_vala_code_node_unref0 (_tmp291_);
2235 		_tmp293_ = self->pointer_type;
2236 		_tmp294_ = _vala_code_node_ref0 (_tmp293_);
2237 		_vala_code_node_unref0 (self->delegate_target_type);
2238 		self->delegate_target_type = _tmp294_;
2239 		_tmp295_ = vala_void_type_new (NULL);
2240 		_tmp296_ = _tmp295_;
2241 		_tmp297_ = vala_delegate_new ("ValaDestroyNotify", (ValaDataType*) _tmp296_, NULL, NULL);
2242 		_vala_code_node_unref0 (self->priv->destroy_notify);
2243 		self->priv->destroy_notify = _tmp297_;
2244 		_vala_code_node_unref0 (_tmp296_);
2245 		_tmp298_ = self->priv->destroy_notify;
2246 		_tmp299_ = vala_void_type_new (NULL);
2247 		_tmp300_ = _tmp299_;
2248 		_tmp301_ = vala_pointer_type_new ((ValaDataType*) _tmp300_, NULL);
2249 		_tmp302_ = _tmp301_;
2250 		_tmp303_ = vala_parameter_new ("data", (ValaDataType*) _tmp302_, NULL);
2251 		_tmp304_ = _tmp303_;
2252 		vala_callable_add_parameter ((ValaCallable*) _tmp298_, _tmp304_);
2253 		_vala_code_node_unref0 (_tmp304_);
2254 		_vala_code_node_unref0 (_tmp302_);
2255 		_vala_code_node_unref0 (_tmp300_);
2256 		_tmp305_ = self->priv->destroy_notify;
2257 		vala_delegate_set_has_target (_tmp305_, FALSE);
2258 		_tmp306_ = self->priv->destroy_notify;
2259 		_tmp307_ = self->root_symbol;
2260 		_tmp308_ = vala_symbol_get_scope (_tmp307_);
2261 		_tmp309_ = _tmp308_;
2262 		vala_symbol_set_owner ((ValaSymbol*) _tmp306_, _tmp309_);
2263 		_tmp310_ = self->priv->destroy_notify;
2264 		_tmp311_ = vala_delegate_type_new (_tmp310_);
2265 		_vala_code_node_unref0 (self->delegate_target_destroy_type);
2266 		self->delegate_target_destroy_type = _tmp311_;
2267 	}
2268 	_tmp312_ = self->root_symbol;
2269 	_tmp313_ = vala_symbol_get_scope (_tmp312_);
2270 	_tmp314_ = _tmp313_;
2271 	_tmp315_ = vala_scope_lookup (_tmp314_, "Gtk");
2272 	gtk_ns = _tmp315_;
2273 	_tmp316_ = gtk_ns;
2274 	if (_tmp316_ != NULL) {
2275 		ValaSymbol* _tmp317_;
2276 		ValaScope* _tmp318_;
2277 		ValaScope* _tmp319_;
2278 		ValaSymbol* _tmp320_;
2279 		_tmp317_ = gtk_ns;
2280 		_tmp318_ = vala_symbol_get_scope (_tmp317_);
2281 		_tmp319_ = _tmp318_;
2282 		_tmp320_ = vala_scope_lookup (_tmp319_, "Widget");
2283 		_vala_code_node_unref0 (self->gtk_widget_type);
2284 		self->gtk_widget_type = G_TYPE_CHECK_INSTANCE_CAST (_tmp320_, VALA_TYPE_CLASS, ValaClass);
2285 	}
2286 	_tmp321_ = vala_ccode_file_new (NULL);
2287 	_vala_ccode_file_unref0 (self->header_file);
2288 	self->header_file = _tmp321_;
2289 	_tmp322_ = self->header_file;
2290 	vala_ccode_file_set_is_header (_tmp322_, TRUE);
2291 	_tmp323_ = vala_ccode_file_new (NULL);
2292 	_vala_ccode_file_unref0 (self->internal_header_file);
2293 	self->internal_header_file = _tmp323_;
2294 	_tmp324_ = self->internal_header_file;
2295 	vala_ccode_file_set_is_header (_tmp324_, TRUE);
2296 	_tmp325_ = vala_code_context_get_source_files (context);
2297 	_tmp326_ = _vala_iterable_ref0 (_tmp325_);
2298 	source_files = _tmp326_;
2299 	{
2300 		ValaList* _file_list = NULL;
2301 		ValaList* _tmp327_;
2302 		ValaList* _tmp328_;
2303 		gint _file_size = 0;
2304 		ValaList* _tmp329_;
2305 		gint _tmp330_;
2306 		gint _tmp331_;
2307 		gint _file_index = 0;
2308 		_tmp327_ = source_files;
2309 		_tmp328_ = _vala_iterable_ref0 (_tmp327_);
2310 		_file_list = _tmp328_;
2311 		_tmp329_ = _file_list;
2312 		_tmp330_ = vala_collection_get_size ((ValaCollection*) _tmp329_);
2313 		_tmp331_ = _tmp330_;
2314 		_file_size = _tmp331_;
2315 		_file_index = -1;
2316 		while (TRUE) {
2317 			gint _tmp332_;
2318 			gint _tmp333_;
2319 			ValaSourceFile* file = NULL;
2320 			ValaList* _tmp334_;
2321 			gpointer _tmp335_;
2322 			gboolean _tmp336_ = FALSE;
2323 			ValaSourceFile* _tmp337_;
2324 			ValaSourceFileType _tmp338_;
2325 			ValaSourceFileType _tmp339_;
2326 			_file_index = _file_index + 1;
2327 			_tmp332_ = _file_index;
2328 			_tmp333_ = _file_size;
2329 			if (!(_tmp332_ < _tmp333_)) {
2330 				break;
2331 			}
2332 			_tmp334_ = _file_list;
2333 			_tmp335_ = vala_list_get (_tmp334_, _file_index);
2334 			file = (ValaSourceFile*) _tmp335_;
2335 			_tmp337_ = file;
2336 			_tmp338_ = vala_source_file_get_file_type (_tmp337_);
2337 			_tmp339_ = _tmp338_;
2338 			if (_tmp339_ == VALA_SOURCE_FILE_TYPE_SOURCE) {
2339 				_tmp336_ = TRUE;
2340 			} else {
2341 				gboolean _tmp340_ = FALSE;
2342 				const gchar* _tmp341_;
2343 				const gchar* _tmp342_;
2344 				_tmp341_ = vala_code_context_get_header_filename (context);
2345 				_tmp342_ = _tmp341_;
2346 				if (_tmp342_ != NULL) {
2347 					ValaSourceFile* _tmp343_;
2348 					ValaSourceFileType _tmp344_;
2349 					ValaSourceFileType _tmp345_;
2350 					_tmp343_ = file;
2351 					_tmp344_ = vala_source_file_get_file_type (_tmp343_);
2352 					_tmp345_ = _tmp344_;
2353 					_tmp340_ = _tmp345_ == VALA_SOURCE_FILE_TYPE_FAST;
2354 				} else {
2355 					_tmp340_ = FALSE;
2356 				}
2357 				_tmp336_ = _tmp340_;
2358 			}
2359 			if (_tmp336_) {
2360 				ValaSourceFile* _tmp346_;
2361 				_tmp346_ = file;
2362 				vala_source_file_accept (_tmp346_, (ValaCodeVisitor*) self);
2363 			}
2364 			_vala_source_file_unref0 (file);
2365 		}
2366 		_vala_iterable_unref0 (_file_list);
2367 	}
2368 	_tmp347_ = vala_code_context_get_symbols_filename (context);
2369 	_tmp348_ = _tmp347_;
2370 	if (_tmp348_ != NULL) {
2371 		FILE* stream = NULL;
2372 		const gchar* _tmp349_;
2373 		const gchar* _tmp350_;
2374 		FILE* _tmp351_;
2375 		FILE* _tmp352_;
2376 		_tmp349_ = vala_code_context_get_symbols_filename (context);
2377 		_tmp350_ = _tmp349_;
2378 		_tmp351_ = g_fopen (_tmp350_, "w");
2379 		stream = _tmp351_;
2380 		_tmp352_ = stream;
2381 		if (_tmp352_ == NULL) {
2382 			const gchar* _tmp353_;
2383 			const gchar* _tmp354_;
2384 			gchar* _tmp355_;
2385 			gchar* _tmp356_;
2386 			_tmp353_ = vala_code_context_get_symbols_filename (context);
2387 			_tmp354_ = _tmp353_;
2388 			_tmp355_ = g_strdup_printf ("unable to open `%s' for writing", _tmp354_);
2389 			_tmp356_ = _tmp355_;
2390 			vala_report_error (NULL, _tmp356_);
2391 			_g_free0 (_tmp356_);
2392 			vala_ccode_base_module_set_context (self, NULL);
2393 			_fclose0 (stream);
2394 			_vala_iterable_unref0 (source_files);
2395 			_vala_code_node_unref0 (gtk_ns);
2396 			_vala_code_node_unref0 (unichar_struct);
2397 			return;
2398 		}
2399 		{
2400 			ValaList* _symbol_list = NULL;
2401 			ValaCCodeFile* _tmp357_;
2402 			ValaList* _tmp358_;
2403 			gint _symbol_size = 0;
2404 			ValaList* _tmp359_;
2405 			gint _tmp360_;
2406 			gint _tmp361_;
2407 			gint _symbol_index = 0;
2408 			_tmp357_ = self->header_file;
2409 			_tmp358_ = vala_ccode_file_get_symbols (_tmp357_);
2410 			_symbol_list = _tmp358_;
2411 			_tmp359_ = _symbol_list;
2412 			_tmp360_ = vala_collection_get_size ((ValaCollection*) _tmp359_);
2413 			_tmp361_ = _tmp360_;
2414 			_symbol_size = _tmp361_;
2415 			_symbol_index = -1;
2416 			while (TRUE) {
2417 				gint _tmp362_;
2418 				gint _tmp363_;
2419 				gchar* symbol = NULL;
2420 				ValaList* _tmp364_;
2421 				gpointer _tmp365_;
2422 				FILE* _tmp366_;
2423 				const gchar* _tmp367_;
2424 				FILE* _tmp368_;
2425 				_symbol_index = _symbol_index + 1;
2426 				_tmp362_ = _symbol_index;
2427 				_tmp363_ = _symbol_size;
2428 				if (!(_tmp362_ < _tmp363_)) {
2429 					break;
2430 				}
2431 				_tmp364_ = _symbol_list;
2432 				_tmp365_ = vala_list_get (_tmp364_, _symbol_index);
2433 				symbol = (gchar*) _tmp365_;
2434 				_tmp366_ = stream;
2435 				_tmp367_ = symbol;
2436 				fputs (_tmp367_, _tmp366_);
2437 				_tmp368_ = stream;
2438 				fputc ('\n', _tmp368_);
2439 				_g_free0 (symbol);
2440 			}
2441 			_vala_iterable_unref0 (_symbol_list);
2442 		}
2443 		_fclose0 (stream);
2444 		stream = NULL;
2445 		_fclose0 (stream);
2446 	}
2447 	_tmp369_ = vala_code_context_get_header_filename (context);
2448 	_tmp370_ = _tmp369_;
2449 	if (_tmp370_ != NULL) {
2450 		gboolean ret = FALSE;
2451 		ValaProfile _tmp371_;
2452 		ValaProfile _tmp372_;
2453 		_tmp371_ = vala_code_context_get_profile (context);
2454 		_tmp372_ = _tmp371_;
2455 		if (_tmp372_ == VALA_PROFILE_GOBJECT) {
2456 			ValaCCodeFile* _tmp373_;
2457 			ValaCCodeFile* _tmp374_;
2458 			const gchar* _tmp375_;
2459 			const gchar* _tmp376_;
2460 			gboolean _tmp377_;
2461 			gboolean _tmp378_;
2462 			_tmp373_ = self->header_file;
2463 			vala_ccode_file_add_include (_tmp373_, "glib.h", FALSE);
2464 			_tmp374_ = self->header_file;
2465 			_tmp375_ = vala_code_context_get_header_filename (context);
2466 			_tmp376_ = _tmp375_;
2467 			_tmp377_ = vala_code_context_get_version_header (context);
2468 			_tmp378_ = _tmp377_;
2469 			ret = vala_ccode_file_store (_tmp374_, _tmp376_, NULL, _tmp378_, FALSE, "G_BEGIN_DECLS", "G_END_DECLS");
2470 		} else {
2471 			ValaCCodeFile* _tmp379_;
2472 			const gchar* _tmp380_;
2473 			const gchar* _tmp381_;
2474 			gboolean _tmp382_;
2475 			gboolean _tmp383_;
2476 			_tmp379_ = self->header_file;
2477 			_tmp380_ = vala_code_context_get_header_filename (context);
2478 			_tmp381_ = _tmp380_;
2479 			_tmp382_ = vala_code_context_get_version_header (context);
2480 			_tmp383_ = _tmp382_;
2481 			ret = vala_ccode_file_store (_tmp379_, _tmp381_, NULL, _tmp383_, FALSE, "#ifdef  __cplusplus\nextern \"C\" {\n#endif", "#ifdef  __cplusplus\n}\n#endif");
2482 		}
2483 		if (!ret) {
2484 			const gchar* _tmp384_;
2485 			const gchar* _tmp385_;
2486 			gchar* _tmp386_;
2487 			gchar* _tmp387_;
2488 			_tmp384_ = vala_code_context_get_header_filename (context);
2489 			_tmp385_ = _tmp384_;
2490 			_tmp386_ = g_strdup_printf ("unable to open `%s' for writing", _tmp385_);
2491 			_tmp387_ = _tmp386_;
2492 			vala_report_error (NULL, _tmp387_);
2493 			_g_free0 (_tmp387_);
2494 		}
2495 	}
2496 	_tmp388_ = vala_code_context_get_internal_header_filename (context);
2497 	_tmp389_ = _tmp388_;
2498 	if (_tmp389_ != NULL) {
2499 		gboolean ret = FALSE;
2500 		ValaProfile _tmp390_;
2501 		ValaProfile _tmp391_;
2502 		_tmp390_ = vala_code_context_get_profile (context);
2503 		_tmp391_ = _tmp390_;
2504 		if (_tmp391_ == VALA_PROFILE_GOBJECT) {
2505 			ValaCCodeFile* _tmp392_;
2506 			ValaCCodeFile* _tmp393_;
2507 			const gchar* _tmp394_;
2508 			const gchar* _tmp395_;
2509 			gboolean _tmp396_;
2510 			gboolean _tmp397_;
2511 			_tmp392_ = self->internal_header_file;
2512 			vala_ccode_file_add_include (_tmp392_, "glib.h", FALSE);
2513 			_tmp393_ = self->internal_header_file;
2514 			_tmp394_ = vala_code_context_get_internal_header_filename (context);
2515 			_tmp395_ = _tmp394_;
2516 			_tmp396_ = vala_code_context_get_version_header (context);
2517 			_tmp397_ = _tmp396_;
2518 			ret = vala_ccode_file_store (_tmp393_, _tmp395_, NULL, _tmp397_, FALSE, "G_BEGIN_DECLS", "G_END_DECLS");
2519 		} else {
2520 			ValaCCodeFile* _tmp398_;
2521 			const gchar* _tmp399_;
2522 			const gchar* _tmp400_;
2523 			gboolean _tmp401_;
2524 			gboolean _tmp402_;
2525 			_tmp398_ = self->internal_header_file;
2526 			_tmp399_ = vala_code_context_get_internal_header_filename (context);
2527 			_tmp400_ = _tmp399_;
2528 			_tmp401_ = vala_code_context_get_version_header (context);
2529 			_tmp402_ = _tmp401_;
2530 			ret = vala_ccode_file_store (_tmp398_, _tmp400_, NULL, _tmp402_, FALSE, "#ifdef  __cplusplus\nextern \"C\" {\n#endif", "#ifdef  __cplusplus\n}\n#endif");
2531 		}
2532 		if (!ret) {
2533 			const gchar* _tmp403_;
2534 			const gchar* _tmp404_;
2535 			gchar* _tmp405_;
2536 			gchar* _tmp406_;
2537 			_tmp403_ = vala_code_context_get_internal_header_filename (context);
2538 			_tmp404_ = _tmp403_;
2539 			_tmp405_ = g_strdup_printf ("unable to open `%s' for writing", _tmp404_);
2540 			_tmp406_ = _tmp405_;
2541 			vala_report_error (NULL, _tmp406_);
2542 			_g_free0 (_tmp406_);
2543 		}
2544 	}
2545 	vala_ccode_base_module_set_context (self, NULL);
2546 	_vala_iterable_unref0 (source_files);
2547 	_vala_code_node_unref0 (gtk_ns);
2548 	_vala_code_node_unref0 (unichar_struct);
2549 }
2550 
2551 static gpointer
_vala_ccode_base_module_emit_context_ref0(gpointer self)2552 _vala_ccode_base_module_emit_context_ref0 (gpointer self)
2553 {
2554 	return self ? vala_ccode_base_module_emit_context_ref (self) : NULL;
2555 }
2556 
2557 void
vala_ccode_base_module_push_context(ValaCCodeBaseModule * self,ValaCCodeBaseModuleEmitContext * emit_context)2558 vala_ccode_base_module_push_context (ValaCCodeBaseModule* self,
2559                                      ValaCCodeBaseModuleEmitContext* emit_context)
2560 {
2561 	ValaCCodeBaseModuleEmitContext* _tmp0_;
2562 	ValaCCodeBaseModuleEmitContext* _tmp3_;
2563 	ValaCCodeFunction* _tmp4_;
2564 	ValaCCodeFunction* _tmp5_;
2565 	g_return_if_fail (self != NULL);
2566 	g_return_if_fail (emit_context != NULL);
2567 	_tmp0_ = self->emit_context;
2568 	if (_tmp0_ != NULL) {
2569 		ValaList* _tmp1_;
2570 		ValaCCodeBaseModuleEmitContext* _tmp2_;
2571 		_tmp1_ = self->priv->emit_context_stack;
2572 		_tmp2_ = self->emit_context;
2573 		vala_collection_add ((ValaCollection*) _tmp1_, _tmp2_);
2574 	}
2575 	_tmp3_ = _vala_ccode_base_module_emit_context_ref0 (emit_context);
2576 	_vala_ccode_base_module_emit_context_unref0 (self->emit_context);
2577 	self->emit_context = _tmp3_;
2578 	_tmp4_ = vala_ccode_base_module_get_ccode (self);
2579 	_tmp5_ = _tmp4_;
2580 	if (_tmp5_ != NULL) {
2581 		ValaCCodeFunction* _tmp6_;
2582 		ValaCCodeFunction* _tmp7_;
2583 		ValaCCodeLineDirective* _tmp8_;
2584 		_tmp6_ = vala_ccode_base_module_get_ccode (self);
2585 		_tmp7_ = _tmp6_;
2586 		_tmp8_ = self->current_line;
2587 		vala_ccode_function_set_current_line (_tmp7_, _tmp8_);
2588 	}
2589 }
2590 
2591 void
vala_ccode_base_module_pop_context(ValaCCodeBaseModule * self)2592 vala_ccode_base_module_pop_context (ValaCCodeBaseModule* self)
2593 {
2594 	ValaList* _tmp0_;
2595 	gint _tmp1_;
2596 	gint _tmp2_;
2597 	g_return_if_fail (self != NULL);
2598 	_tmp0_ = self->priv->emit_context_stack;
2599 	_tmp1_ = vala_collection_get_size ((ValaCollection*) _tmp0_);
2600 	_tmp2_ = _tmp1_;
2601 	if (_tmp2_ > 0) {
2602 		ValaList* _tmp3_;
2603 		ValaList* _tmp4_;
2604 		gint _tmp5_;
2605 		gint _tmp6_;
2606 		gpointer _tmp7_;
2607 		ValaCCodeFunction* _tmp8_;
2608 		ValaCCodeFunction* _tmp9_;
2609 		_tmp3_ = self->priv->emit_context_stack;
2610 		_tmp4_ = self->priv->emit_context_stack;
2611 		_tmp5_ = vala_collection_get_size ((ValaCollection*) _tmp4_);
2612 		_tmp6_ = _tmp5_;
2613 		_tmp7_ = vala_list_remove_at (_tmp3_, _tmp6_ - 1);
2614 		_vala_ccode_base_module_emit_context_unref0 (self->emit_context);
2615 		self->emit_context = (ValaCCodeBaseModuleEmitContext*) _tmp7_;
2616 		_tmp8_ = vala_ccode_base_module_get_ccode (self);
2617 		_tmp9_ = _tmp8_;
2618 		if (_tmp9_ != NULL) {
2619 			ValaCCodeFunction* _tmp10_;
2620 			ValaCCodeFunction* _tmp11_;
2621 			ValaCCodeLineDirective* _tmp12_;
2622 			_tmp10_ = vala_ccode_base_module_get_ccode (self);
2623 			_tmp11_ = _tmp10_;
2624 			_tmp12_ = self->current_line;
2625 			vala_ccode_function_set_current_line (_tmp11_, _tmp12_);
2626 		}
2627 	} else {
2628 		_vala_ccode_base_module_emit_context_unref0 (self->emit_context);
2629 		self->emit_context = NULL;
2630 	}
2631 }
2632 
2633 void
vala_ccode_base_module_push_line(ValaCCodeBaseModule * self,ValaSourceReference * source_reference)2634 vala_ccode_base_module_push_line (ValaCCodeBaseModule* self,
2635                                   ValaSourceReference* source_reference)
2636 {
2637 	ValaList* _tmp0_;
2638 	ValaCCodeLineDirective* _tmp1_;
2639 	g_return_if_fail (self != NULL);
2640 	_tmp0_ = self->priv->line_directive_stack;
2641 	_tmp1_ = self->current_line;
2642 	vala_collection_add ((ValaCollection*) _tmp0_, _tmp1_);
2643 	if (source_reference != NULL) {
2644 		ValaSourceFile* _tmp2_;
2645 		ValaSourceFile* _tmp3_;
2646 		gchar* _tmp4_;
2647 		gchar* _tmp5_;
2648 		ValaSourceLocation _tmp6_ = {0};
2649 		ValaSourceLocation _tmp7_;
2650 		ValaCCodeLineDirective* _tmp8_;
2651 		ValaCCodeFunction* _tmp9_;
2652 		ValaCCodeFunction* _tmp10_;
2653 		_tmp2_ = vala_source_reference_get_file (source_reference);
2654 		_tmp3_ = _tmp2_;
2655 		_tmp4_ = vala_source_file_get_relative_filename (_tmp3_);
2656 		_tmp5_ = _tmp4_;
2657 		vala_source_reference_get_begin (source_reference, &_tmp6_);
2658 		_tmp7_ = _tmp6_;
2659 		_tmp8_ = vala_ccode_line_directive_new (_tmp5_, _tmp7_.line);
2660 		_vala_ccode_node_unref0 (self->current_line);
2661 		self->current_line = _tmp8_;
2662 		_g_free0 (_tmp5_);
2663 		_tmp9_ = vala_ccode_base_module_get_ccode (self);
2664 		_tmp10_ = _tmp9_;
2665 		if (_tmp10_ != NULL) {
2666 			ValaCCodeFunction* _tmp11_;
2667 			ValaCCodeFunction* _tmp12_;
2668 			ValaCCodeLineDirective* _tmp13_;
2669 			_tmp11_ = vala_ccode_base_module_get_ccode (self);
2670 			_tmp12_ = _tmp11_;
2671 			_tmp13_ = self->current_line;
2672 			vala_ccode_function_set_current_line (_tmp12_, _tmp13_);
2673 		}
2674 	}
2675 }
2676 
2677 void
vala_ccode_base_module_pop_line(ValaCCodeBaseModule * self)2678 vala_ccode_base_module_pop_line (ValaCCodeBaseModule* self)
2679 {
2680 	ValaList* _tmp0_;
2681 	ValaList* _tmp1_;
2682 	gint _tmp2_;
2683 	gint _tmp3_;
2684 	gpointer _tmp4_;
2685 	ValaCCodeFunction* _tmp5_;
2686 	ValaCCodeFunction* _tmp6_;
2687 	g_return_if_fail (self != NULL);
2688 	_tmp0_ = self->priv->line_directive_stack;
2689 	_tmp1_ = self->priv->line_directive_stack;
2690 	_tmp2_ = vala_collection_get_size ((ValaCollection*) _tmp1_);
2691 	_tmp3_ = _tmp2_;
2692 	_tmp4_ = vala_list_remove_at (_tmp0_, _tmp3_ - 1);
2693 	_vala_ccode_node_unref0 (self->current_line);
2694 	self->current_line = (ValaCCodeLineDirective*) _tmp4_;
2695 	_tmp5_ = vala_ccode_base_module_get_ccode (self);
2696 	_tmp6_ = _tmp5_;
2697 	if (_tmp6_ != NULL) {
2698 		ValaCCodeFunction* _tmp7_;
2699 		ValaCCodeFunction* _tmp8_;
2700 		ValaCCodeLineDirective* _tmp9_;
2701 		_tmp7_ = vala_ccode_base_module_get_ccode (self);
2702 		_tmp8_ = _tmp7_;
2703 		_tmp9_ = self->current_line;
2704 		vala_ccode_function_set_current_line (_tmp8_, _tmp9_);
2705 	}
2706 }
2707 
2708 static gpointer
_vala_ccode_node_ref0(gpointer self)2709 _vala_ccode_node_ref0 (gpointer self)
2710 {
2711 	return self ? vala_ccode_node_ref (self) : NULL;
2712 }
2713 
2714 void
vala_ccode_base_module_push_function(ValaCCodeBaseModule * self,ValaCCodeFunction * func)2715 vala_ccode_base_module_push_function (ValaCCodeBaseModule* self,
2716                                       ValaCCodeFunction* func)
2717 {
2718 	ValaCCodeBaseModuleEmitContext* _tmp0_;
2719 	ValaArrayList* _tmp1_;
2720 	ValaCCodeFunction* _tmp2_;
2721 	ValaCCodeFunction* _tmp3_;
2722 	ValaCCodeBaseModuleEmitContext* _tmp4_;
2723 	ValaCCodeFunction* _tmp5_;
2724 	ValaCCodeFunction* _tmp6_;
2725 	ValaCCodeFunction* _tmp7_;
2726 	ValaCCodeLineDirective* _tmp8_;
2727 	g_return_if_fail (self != NULL);
2728 	g_return_if_fail (func != NULL);
2729 	_tmp0_ = self->emit_context;
2730 	_tmp1_ = _tmp0_->ccode_stack;
2731 	_tmp2_ = vala_ccode_base_module_get_ccode (self);
2732 	_tmp3_ = _tmp2_;
2733 	vala_collection_add ((ValaCollection*) _tmp1_, _tmp3_);
2734 	_tmp4_ = self->emit_context;
2735 	_tmp5_ = _vala_ccode_node_ref0 (func);
2736 	_vala_ccode_node_unref0 (_tmp4_->ccode);
2737 	_tmp4_->ccode = _tmp5_;
2738 	_tmp6_ = vala_ccode_base_module_get_ccode (self);
2739 	_tmp7_ = _tmp6_;
2740 	_tmp8_ = self->current_line;
2741 	vala_ccode_function_set_current_line (_tmp7_, _tmp8_);
2742 }
2743 
2744 void
vala_ccode_base_module_pop_function(ValaCCodeBaseModule * self)2745 vala_ccode_base_module_pop_function (ValaCCodeBaseModule* self)
2746 {
2747 	ValaCCodeBaseModuleEmitContext* _tmp0_;
2748 	ValaCCodeBaseModuleEmitContext* _tmp1_;
2749 	ValaArrayList* _tmp2_;
2750 	ValaCCodeBaseModuleEmitContext* _tmp3_;
2751 	ValaArrayList* _tmp4_;
2752 	gint _tmp5_;
2753 	gint _tmp6_;
2754 	gpointer _tmp7_;
2755 	ValaCCodeFunction* _tmp8_;
2756 	ValaCCodeFunction* _tmp9_;
2757 	g_return_if_fail (self != NULL);
2758 	_tmp0_ = self->emit_context;
2759 	_tmp1_ = self->emit_context;
2760 	_tmp2_ = _tmp1_->ccode_stack;
2761 	_tmp3_ = self->emit_context;
2762 	_tmp4_ = _tmp3_->ccode_stack;
2763 	_tmp5_ = vala_collection_get_size ((ValaCollection*) _tmp4_);
2764 	_tmp6_ = _tmp5_;
2765 	_tmp7_ = vala_list_remove_at ((ValaList*) _tmp2_, _tmp6_ - 1);
2766 	_vala_ccode_node_unref0 (_tmp0_->ccode);
2767 	_tmp0_->ccode = (ValaCCodeFunction*) _tmp7_;
2768 	_tmp8_ = vala_ccode_base_module_get_ccode (self);
2769 	_tmp9_ = _tmp8_;
2770 	if (_tmp9_ != NULL) {
2771 		ValaCCodeFunction* _tmp10_;
2772 		ValaCCodeFunction* _tmp11_;
2773 		ValaCCodeLineDirective* _tmp12_;
2774 		_tmp10_ = vala_ccode_base_module_get_ccode (self);
2775 		_tmp11_ = _tmp10_;
2776 		_tmp12_ = self->current_line;
2777 		vala_ccode_function_set_current_line (_tmp11_, _tmp12_);
2778 	}
2779 }
2780 
2781 gboolean
vala_ccode_base_module_add_symbol_declaration(ValaCCodeBaseModule * self,ValaCCodeFile * decl_space,ValaSymbol * sym,const gchar * name)2782 vala_ccode_base_module_add_symbol_declaration (ValaCCodeBaseModule* self,
2783                                                ValaCCodeFile* decl_space,
2784                                                ValaSymbol* sym,
2785                                                const gchar* name)
2786 {
2787 	ValaSourceReference* _tmp0_;
2788 	ValaSourceReference* _tmp1_;
2789 	gboolean _tmp6_;
2790 	gboolean _tmp7_;
2791 	gboolean _tmp15_ = FALSE;
2792 	gboolean _tmp18_ = FALSE;
2793 	gboolean _tmp19_ = FALSE;
2794 	gboolean _tmp20_;
2795 	gboolean _tmp21_;
2796 	gboolean result = FALSE;
2797 	g_return_val_if_fail (self != NULL, FALSE);
2798 	g_return_val_if_fail (decl_space != NULL, FALSE);
2799 	g_return_val_if_fail (sym != NULL, FALSE);
2800 	g_return_val_if_fail (name != NULL, FALSE);
2801 	if (vala_ccode_file_add_declaration (decl_space, name)) {
2802 		result = TRUE;
2803 		return result;
2804 	}
2805 	_tmp0_ = vala_code_node_get_source_reference ((ValaCodeNode*) sym);
2806 	_tmp1_ = _tmp0_;
2807 	if (_tmp1_ != NULL) {
2808 		ValaSourceReference* _tmp2_;
2809 		ValaSourceReference* _tmp3_;
2810 		ValaSourceFile* _tmp4_;
2811 		ValaSourceFile* _tmp5_;
2812 		_tmp2_ = vala_code_node_get_source_reference ((ValaCodeNode*) sym);
2813 		_tmp3_ = _tmp2_;
2814 		_tmp4_ = vala_source_reference_get_file (_tmp3_);
2815 		_tmp5_ = _tmp4_;
2816 		vala_source_file_set_used (_tmp5_, TRUE);
2817 	}
2818 	_tmp6_ = vala_symbol_get_anonymous (sym);
2819 	_tmp7_ = _tmp6_;
2820 	if (_tmp7_) {
2821 		gboolean _tmp8_ = FALSE;
2822 		gboolean _tmp9_;
2823 		gboolean _tmp10_;
2824 		_tmp9_ = vala_ccode_file_get_is_header (decl_space);
2825 		_tmp10_ = _tmp9_;
2826 		if (!_tmp10_) {
2827 			ValaCodeContext* _tmp11_;
2828 			ValaCodeContext* _tmp12_;
2829 			gboolean _tmp13_;
2830 			gboolean _tmp14_;
2831 			_tmp11_ = vala_code_context_get ();
2832 			_tmp12_ = _tmp11_;
2833 			_tmp13_ = vala_code_context_get_use_header (_tmp12_);
2834 			_tmp14_ = _tmp13_;
2835 			_tmp8_ = _tmp14_;
2836 			_vala_code_context_unref0 (_tmp12_);
2837 		} else {
2838 			_tmp8_ = FALSE;
2839 		}
2840 		result = _tmp8_;
2841 		return result;
2842 	}
2843 	if (G_TYPE_CHECK_INSTANCE_TYPE (sym, VALA_TYPE_CONSTANT)) {
2844 		ValaExpression* _tmp16_;
2845 		ValaExpression* _tmp17_;
2846 		_tmp16_ = vala_constant_get_value (G_TYPE_CHECK_INSTANCE_CAST (sym, VALA_TYPE_CONSTANT, ValaConstant));
2847 		_tmp17_ = _tmp16_;
2848 		_tmp15_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp17_, VALA_TYPE_INITIALIZER_LIST);
2849 	} else {
2850 		_tmp15_ = FALSE;
2851 	}
2852 	if (_tmp15_) {
2853 		result = FALSE;
2854 		return result;
2855 	}
2856 	_tmp20_ = vala_symbol_get_external_package (sym);
2857 	_tmp21_ = _tmp20_;
2858 	if (_tmp21_) {
2859 		_tmp19_ = TRUE;
2860 	} else {
2861 		gboolean _tmp22_ = FALSE;
2862 		gboolean _tmp23_ = FALSE;
2863 		gboolean _tmp24_;
2864 		gboolean _tmp25_;
2865 		_tmp24_ = vala_ccode_file_get_is_header (decl_space);
2866 		_tmp25_ = _tmp24_;
2867 		if (!_tmp25_) {
2868 			ValaCodeContext* _tmp26_;
2869 			ValaCodeContext* _tmp27_;
2870 			gboolean _tmp28_;
2871 			gboolean _tmp29_;
2872 			_tmp26_ = vala_code_context_get ();
2873 			_tmp27_ = _tmp26_;
2874 			_tmp28_ = vala_code_context_get_use_header (_tmp27_);
2875 			_tmp29_ = _tmp28_;
2876 			_tmp23_ = _tmp29_;
2877 			_vala_code_context_unref0 (_tmp27_);
2878 		} else {
2879 			_tmp23_ = FALSE;
2880 		}
2881 		if (_tmp23_) {
2882 			_tmp22_ = !vala_symbol_is_internal_symbol (sym);
2883 		} else {
2884 			_tmp22_ = FALSE;
2885 		}
2886 		_tmp19_ = _tmp22_;
2887 	}
2888 	if (_tmp19_) {
2889 		_tmp18_ = TRUE;
2890 	} else {
2891 		gboolean _tmp30_ = FALSE;
2892 		gboolean _tmp31_;
2893 		gboolean _tmp32_;
2894 		_tmp31_ = vala_symbol_get_is_extern (sym);
2895 		_tmp32_ = _tmp31_;
2896 		if (_tmp32_) {
2897 			gchar* _tmp33_;
2898 			gchar* _tmp34_;
2899 			gint _tmp35_;
2900 			gint _tmp36_;
2901 			_tmp33_ = vala_get_ccode_header_filenames (sym);
2902 			_tmp34_ = _tmp33_;
2903 			_tmp35_ = strlen (_tmp34_);
2904 			_tmp36_ = _tmp35_;
2905 			_tmp30_ = _tmp36_ > 0;
2906 			_g_free0 (_tmp34_);
2907 		} else {
2908 			_tmp30_ = FALSE;
2909 		}
2910 		_tmp18_ = _tmp30_;
2911 	}
2912 	if (_tmp18_) {
2913 		gchar* _tmp37_;
2914 		gchar* _tmp38_;
2915 		gchar** _tmp39_;
2916 		gchar** _tmp40_;
2917 		gchar** _tmp41_;
2918 		gint _tmp41__length1;
2919 		gchar* _tmp43_;
2920 		gchar* _tmp44_;
2921 		gchar** _tmp45_;
2922 		gchar** _tmp46_;
2923 		gchar** _tmp47_;
2924 		gint _tmp47__length1;
2925 		_tmp37_ = vala_get_ccode_feature_test_macros (sym);
2926 		_tmp38_ = _tmp37_;
2927 		_tmp40_ = _tmp39_ = g_strsplit (_tmp38_, ",", 0);
2928 		_tmp41_ = _tmp40_;
2929 		_tmp41__length1 = _vala_array_length (_tmp39_);
2930 		_g_free0 (_tmp38_);
2931 		{
2932 			gchar** feature_test_macro_collection = NULL;
2933 			gint feature_test_macro_collection_length1 = 0;
2934 			gint _feature_test_macro_collection_size_ = 0;
2935 			gint feature_test_macro_it = 0;
2936 			feature_test_macro_collection = _tmp41_;
2937 			feature_test_macro_collection_length1 = _tmp41__length1;
2938 			for (feature_test_macro_it = 0; feature_test_macro_it < feature_test_macro_collection_length1; feature_test_macro_it = feature_test_macro_it + 1) {
2939 				const gchar* feature_test_macro = NULL;
2940 				feature_test_macro = feature_test_macro_collection[feature_test_macro_it];
2941 				{
2942 					const gchar* _tmp42_;
2943 					_tmp42_ = feature_test_macro;
2944 					vala_ccode_file_add_feature_test_macro (decl_space, _tmp42_);
2945 				}
2946 			}
2947 			feature_test_macro_collection = (_vala_array_free (feature_test_macro_collection, feature_test_macro_collection_length1, (GDestroyNotify) g_free), NULL);
2948 		}
2949 		_tmp43_ = vala_get_ccode_header_filenames (sym);
2950 		_tmp44_ = _tmp43_;
2951 		_tmp46_ = _tmp45_ = g_strsplit (_tmp44_, ",", 0);
2952 		_tmp47_ = _tmp46_;
2953 		_tmp47__length1 = _vala_array_length (_tmp45_);
2954 		_g_free0 (_tmp44_);
2955 		{
2956 			gchar** header_filename_collection = NULL;
2957 			gint header_filename_collection_length1 = 0;
2958 			gint _header_filename_collection_size_ = 0;
2959 			gint header_filename_it = 0;
2960 			header_filename_collection = _tmp47_;
2961 			header_filename_collection_length1 = _tmp47__length1;
2962 			for (header_filename_it = 0; header_filename_it < header_filename_collection_length1; header_filename_it = header_filename_it + 1) {
2963 				const gchar* header_filename = NULL;
2964 				header_filename = header_filename_collection[header_filename_it];
2965 				{
2966 					gboolean _tmp48_ = FALSE;
2967 					gboolean _tmp49_;
2968 					gboolean _tmp50_;
2969 					const gchar* _tmp59_;
2970 					_tmp49_ = vala_symbol_get_is_extern (sym);
2971 					_tmp50_ = _tmp49_;
2972 					if (!_tmp50_) {
2973 						gboolean _tmp51_ = FALSE;
2974 						gboolean _tmp52_;
2975 						gboolean _tmp53_;
2976 						_tmp52_ = vala_symbol_get_external_package (sym);
2977 						_tmp53_ = _tmp52_;
2978 						if (!_tmp53_) {
2979 							_tmp51_ = TRUE;
2980 						} else {
2981 							gboolean _tmp54_ = FALSE;
2982 							gboolean _tmp55_;
2983 							gboolean _tmp56_;
2984 							_tmp55_ = vala_symbol_get_external_package (sym);
2985 							_tmp56_ = _tmp55_;
2986 							if (_tmp56_) {
2987 								gboolean _tmp57_;
2988 								gboolean _tmp58_;
2989 								_tmp57_ = vala_symbol_get_from_commandline (sym);
2990 								_tmp58_ = _tmp57_;
2991 								_tmp54_ = _tmp58_;
2992 							} else {
2993 								_tmp54_ = FALSE;
2994 							}
2995 							_tmp51_ = _tmp54_;
2996 						}
2997 						_tmp48_ = _tmp51_;
2998 					} else {
2999 						_tmp48_ = FALSE;
3000 					}
3001 					_tmp59_ = header_filename;
3002 					vala_ccode_file_add_include (decl_space, _tmp59_, _tmp48_);
3003 				}
3004 			}
3005 			header_filename_collection = (_vala_array_free (header_filename_collection, header_filename_collection_length1, (GDestroyNotify) g_free), NULL);
3006 		}
3007 		result = TRUE;
3008 		return result;
3009 	} else {
3010 		result = FALSE;
3011 		return result;
3012 	}
3013 }
3014 
3015 static void
vala_ccode_base_module_real_append_vala_array_free(ValaCCodeBaseModule * self)3016 vala_ccode_base_module_real_append_vala_array_free (ValaCCodeBaseModule* self)
3017 {
3018 }
3019 
3020 void
vala_ccode_base_module_append_vala_array_free(ValaCCodeBaseModule * self)3021 vala_ccode_base_module_append_vala_array_free (ValaCCodeBaseModule* self)
3022 {
3023 	g_return_if_fail (self != NULL);
3024 	VALA_CCODE_BASE_MODULE_GET_CLASS (self)->append_vala_array_free (self);
3025 }
3026 
3027 static void
vala_ccode_base_module_real_append_vala_array_move(ValaCCodeBaseModule * self)3028 vala_ccode_base_module_real_append_vala_array_move (ValaCCodeBaseModule* self)
3029 {
3030 }
3031 
3032 void
vala_ccode_base_module_append_vala_array_move(ValaCCodeBaseModule * self)3033 vala_ccode_base_module_append_vala_array_move (ValaCCodeBaseModule* self)
3034 {
3035 	g_return_if_fail (self != NULL);
3036 	VALA_CCODE_BASE_MODULE_GET_CLASS (self)->append_vala_array_move (self);
3037 }
3038 
3039 static void
vala_ccode_base_module_real_append_vala_array_length(ValaCCodeBaseModule * self)3040 vala_ccode_base_module_real_append_vala_array_length (ValaCCodeBaseModule* self)
3041 {
3042 }
3043 
3044 void
vala_ccode_base_module_append_vala_array_length(ValaCCodeBaseModule * self)3045 vala_ccode_base_module_append_vala_array_length (ValaCCodeBaseModule* self)
3046 {
3047 	g_return_if_fail (self != NULL);
3048 	VALA_CCODE_BASE_MODULE_GET_CLASS (self)->append_vala_array_length (self);
3049 }
3050 
3051 static void
vala_ccode_base_module_real_append_params_array(ValaCCodeBaseModule * self,ValaMethod * m)3052 vala_ccode_base_module_real_append_params_array (ValaCCodeBaseModule* self,
3053                                                  ValaMethod* m)
3054 {
3055 	g_return_if_fail (m != NULL);
3056 }
3057 
3058 void
vala_ccode_base_module_append_params_array(ValaCCodeBaseModule * self,ValaMethod * m)3059 vala_ccode_base_module_append_params_array (ValaCCodeBaseModule* self,
3060                                             ValaMethod* m)
3061 {
3062 	g_return_if_fail (self != NULL);
3063 	VALA_CCODE_BASE_MODULE_GET_CLASS (self)->append_params_array (self, m);
3064 }
3065 
3066 void
vala_ccode_base_module_append_vala_clear_mutex(ValaCCodeBaseModule * self,const gchar * typename,const gchar * funcprefix)3067 vala_ccode_base_module_append_vala_clear_mutex (ValaCCodeBaseModule* self,
3068                                                 const gchar* typename,
3069                                                 const gchar* funcprefix)
3070 {
3071 	ValaCCodeFile* _tmp0_;
3072 	ValaCCodeFunction* fun = NULL;
3073 	gchar* _tmp1_;
3074 	gchar* _tmp2_;
3075 	ValaCCodeFunction* _tmp3_;
3076 	ValaCCodeFunction* _tmp4_;
3077 	gchar* _tmp5_;
3078 	gchar* _tmp6_;
3079 	ValaCCodeParameter* _tmp7_;
3080 	ValaCCodeParameter* _tmp8_;
3081 	ValaCCodeFunction* _tmp9_;
3082 	ValaCCodeFunction* _tmp10_;
3083 	ValaCCodeConstant* _tmp11_;
3084 	ValaCCodeConstant* _tmp12_;
3085 	ValaCCodeVariableDeclarator* _tmp13_;
3086 	ValaCCodeVariableDeclarator* _tmp14_;
3087 	ValaCCodeFunctionCall* cmp = NULL;
3088 	ValaCCodeIdentifier* _tmp15_;
3089 	ValaCCodeIdentifier* _tmp16_;
3090 	ValaCCodeFunctionCall* _tmp17_;
3091 	ValaCCodeFunctionCall* _tmp18_;
3092 	ValaCCodeIdentifier* _tmp19_;
3093 	ValaCCodeIdentifier* _tmp20_;
3094 	ValaCCodeIdentifier* _tmp21_;
3095 	ValaCCodeIdentifier* _tmp22_;
3096 	ValaCCodeUnaryExpression* _tmp23_;
3097 	ValaCCodeUnaryExpression* _tmp24_;
3098 	gchar* _tmp25_;
3099 	gchar* _tmp26_;
3100 	gchar* _tmp27_;
3101 	gchar* _tmp28_;
3102 	ValaCCodeIdentifier* _tmp29_;
3103 	ValaCCodeIdentifier* _tmp30_;
3104 	ValaCCodeFunction* _tmp31_;
3105 	ValaCCodeFunction* _tmp32_;
3106 	ValaCCodeFunctionCall* mutex_clear = NULL;
3107 	gchar* _tmp33_;
3108 	gchar* _tmp34_;
3109 	ValaCCodeIdentifier* _tmp35_;
3110 	ValaCCodeIdentifier* _tmp36_;
3111 	ValaCCodeFunctionCall* _tmp37_;
3112 	ValaCCodeFunctionCall* _tmp38_;
3113 	ValaCCodeIdentifier* _tmp39_;
3114 	ValaCCodeIdentifier* _tmp40_;
3115 	ValaCCodeFunction* _tmp41_;
3116 	ValaCCodeFunction* _tmp42_;
3117 	ValaCCodeFunctionCall* mset = NULL;
3118 	ValaCCodeIdentifier* _tmp43_;
3119 	ValaCCodeIdentifier* _tmp44_;
3120 	ValaCCodeFunctionCall* _tmp45_;
3121 	ValaCCodeFunctionCall* _tmp46_;
3122 	ValaCCodeIdentifier* _tmp47_;
3123 	ValaCCodeIdentifier* _tmp48_;
3124 	ValaCCodeConstant* _tmp49_;
3125 	ValaCCodeConstant* _tmp50_;
3126 	gchar* _tmp51_;
3127 	gchar* _tmp52_;
3128 	gchar* _tmp53_;
3129 	gchar* _tmp54_;
3130 	ValaCCodeIdentifier* _tmp55_;
3131 	ValaCCodeIdentifier* _tmp56_;
3132 	ValaCCodeFunction* _tmp57_;
3133 	ValaCCodeFunction* _tmp58_;
3134 	ValaCCodeFunction* _tmp59_;
3135 	ValaCCodeFunction* _tmp60_;
3136 	ValaCCodeFile* _tmp61_;
3137 	ValaCCodeFile* _tmp62_;
3138 	g_return_if_fail (self != NULL);
3139 	g_return_if_fail (typename != NULL);
3140 	g_return_if_fail (funcprefix != NULL);
3141 	_tmp0_ = self->cfile;
3142 	vala_ccode_file_add_include (_tmp0_, "string.h", FALSE);
3143 	_tmp1_ = g_strconcat ("_vala_clear_", typename, NULL);
3144 	_tmp2_ = _tmp1_;
3145 	_tmp3_ = vala_ccode_function_new (_tmp2_, "void");
3146 	_tmp4_ = _tmp3_;
3147 	_g_free0 (_tmp2_);
3148 	fun = _tmp4_;
3149 	vala_ccode_node_set_modifiers ((ValaCCodeNode*) fun, VALA_CCODE_MODIFIERS_STATIC);
3150 	_tmp5_ = g_strconcat (typename, " *", NULL);
3151 	_tmp6_ = _tmp5_;
3152 	_tmp7_ = vala_ccode_parameter_new ("mutex", _tmp6_);
3153 	_tmp8_ = _tmp7_;
3154 	vala_ccode_function_add_parameter (fun, _tmp8_);
3155 	_vala_ccode_node_unref0 (_tmp8_);
3156 	_g_free0 (_tmp6_);
3157 	vala_ccode_base_module_push_function (self, fun);
3158 	_tmp9_ = vala_ccode_base_module_get_ccode (self);
3159 	_tmp10_ = _tmp9_;
3160 	_tmp11_ = vala_ccode_constant_new ("{ 0 }");
3161 	_tmp12_ = _tmp11_;
3162 	_tmp13_ = vala_ccode_variable_declarator_new_zero ("zero_mutex", (ValaCCodeExpression*) _tmp12_, NULL);
3163 	_tmp14_ = _tmp13_;
3164 	vala_ccode_function_add_declaration (_tmp10_, typename, (ValaCCodeDeclarator*) _tmp14_, 0);
3165 	_vala_ccode_node_unref0 (_tmp14_);
3166 	_vala_ccode_node_unref0 (_tmp12_);
3167 	_tmp15_ = vala_ccode_identifier_new ("memcmp");
3168 	_tmp16_ = _tmp15_;
3169 	_tmp17_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp16_);
3170 	_tmp18_ = _tmp17_;
3171 	_vala_ccode_node_unref0 (_tmp16_);
3172 	cmp = _tmp18_;
3173 	_tmp19_ = vala_ccode_identifier_new ("mutex");
3174 	_tmp20_ = _tmp19_;
3175 	vala_ccode_function_call_add_argument (cmp, (ValaCCodeExpression*) _tmp20_);
3176 	_vala_ccode_node_unref0 (_tmp20_);
3177 	_tmp21_ = vala_ccode_identifier_new ("zero_mutex");
3178 	_tmp22_ = _tmp21_;
3179 	_tmp23_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, (ValaCCodeExpression*) _tmp22_);
3180 	_tmp24_ = _tmp23_;
3181 	vala_ccode_function_call_add_argument (cmp, (ValaCCodeExpression*) _tmp24_);
3182 	_vala_ccode_node_unref0 (_tmp24_);
3183 	_vala_ccode_node_unref0 (_tmp22_);
3184 	_tmp25_ = g_strconcat ("sizeof (", typename, NULL);
3185 	_tmp26_ = _tmp25_;
3186 	_tmp27_ = g_strconcat (_tmp26_, ")", NULL);
3187 	_tmp28_ = _tmp27_;
3188 	_tmp29_ = vala_ccode_identifier_new (_tmp28_);
3189 	_tmp30_ = _tmp29_;
3190 	vala_ccode_function_call_add_argument (cmp, (ValaCCodeExpression*) _tmp30_);
3191 	_vala_ccode_node_unref0 (_tmp30_);
3192 	_g_free0 (_tmp28_);
3193 	_g_free0 (_tmp26_);
3194 	_tmp31_ = vala_ccode_base_module_get_ccode (self);
3195 	_tmp32_ = _tmp31_;
3196 	vala_ccode_function_open_if (_tmp32_, (ValaCCodeExpression*) cmp);
3197 	_tmp33_ = g_strconcat (funcprefix, "_clear", NULL);
3198 	_tmp34_ = _tmp33_;
3199 	_tmp35_ = vala_ccode_identifier_new (_tmp34_);
3200 	_tmp36_ = _tmp35_;
3201 	_tmp37_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp36_);
3202 	_tmp38_ = _tmp37_;
3203 	_vala_ccode_node_unref0 (_tmp36_);
3204 	_g_free0 (_tmp34_);
3205 	mutex_clear = _tmp38_;
3206 	_tmp39_ = vala_ccode_identifier_new ("mutex");
3207 	_tmp40_ = _tmp39_;
3208 	vala_ccode_function_call_add_argument (mutex_clear, (ValaCCodeExpression*) _tmp40_);
3209 	_vala_ccode_node_unref0 (_tmp40_);
3210 	_tmp41_ = vala_ccode_base_module_get_ccode (self);
3211 	_tmp42_ = _tmp41_;
3212 	vala_ccode_function_add_expression (_tmp42_, (ValaCCodeExpression*) mutex_clear);
3213 	_tmp43_ = vala_ccode_identifier_new ("memset");
3214 	_tmp44_ = _tmp43_;
3215 	_tmp45_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp44_);
3216 	_tmp46_ = _tmp45_;
3217 	_vala_ccode_node_unref0 (_tmp44_);
3218 	mset = _tmp46_;
3219 	_tmp47_ = vala_ccode_identifier_new ("mutex");
3220 	_tmp48_ = _tmp47_;
3221 	vala_ccode_function_call_add_argument (mset, (ValaCCodeExpression*) _tmp48_);
3222 	_vala_ccode_node_unref0 (_tmp48_);
3223 	_tmp49_ = vala_ccode_constant_new ("0");
3224 	_tmp50_ = _tmp49_;
3225 	vala_ccode_function_call_add_argument (mset, (ValaCCodeExpression*) _tmp50_);
3226 	_vala_ccode_node_unref0 (_tmp50_);
3227 	_tmp51_ = g_strconcat ("sizeof (", typename, NULL);
3228 	_tmp52_ = _tmp51_;
3229 	_tmp53_ = g_strconcat (_tmp52_, ")", NULL);
3230 	_tmp54_ = _tmp53_;
3231 	_tmp55_ = vala_ccode_identifier_new (_tmp54_);
3232 	_tmp56_ = _tmp55_;
3233 	vala_ccode_function_call_add_argument (mset, (ValaCCodeExpression*) _tmp56_);
3234 	_vala_ccode_node_unref0 (_tmp56_);
3235 	_g_free0 (_tmp54_);
3236 	_g_free0 (_tmp52_);
3237 	_tmp57_ = vala_ccode_base_module_get_ccode (self);
3238 	_tmp58_ = _tmp57_;
3239 	vala_ccode_function_add_expression (_tmp58_, (ValaCCodeExpression*) mset);
3240 	_tmp59_ = vala_ccode_base_module_get_ccode (self);
3241 	_tmp60_ = _tmp59_;
3242 	vala_ccode_function_close (_tmp60_);
3243 	vala_ccode_base_module_pop_function (self);
3244 	_tmp61_ = self->cfile;
3245 	vala_ccode_file_add_function_declaration (_tmp61_, fun);
3246 	_tmp62_ = self->cfile;
3247 	vala_ccode_file_add_function (_tmp62_, fun);
3248 	_vala_ccode_node_unref0 (mset);
3249 	_vala_ccode_node_unref0 (mutex_clear);
3250 	_vala_ccode_node_unref0 (cmp);
3251 	_vala_ccode_node_unref0 (fun);
3252 }
3253 
3254 static void
vala_ccode_base_module_real_visit_source_file(ValaCodeVisitor * base,ValaSourceFile * source_file)3255 vala_ccode_base_module_real_visit_source_file (ValaCodeVisitor* base,
3256                                                ValaSourceFile* source_file)
3257 {
3258 	ValaCCodeBaseModule * self;
3259 	ValaCCodeFile* _tmp0_;
3260 	GHashFunc _tmp1_;
3261 	GEqualFunc _tmp2_;
3262 	ValaHashSet* _tmp3_;
3263 	GHashFunc _tmp4_;
3264 	GEqualFunc _tmp5_;
3265 	ValaHashSet* _tmp6_;
3266 	GHashFunc _tmp7_;
3267 	GEqualFunc _tmp8_;
3268 	ValaHashSet* _tmp9_;
3269 	ValaCodeContext* _tmp10_;
3270 	ValaReport* _tmp11_;
3271 	ValaReport* _tmp12_;
3272 	ValaSourceFileType _tmp13_;
3273 	ValaSourceFileType _tmp14_;
3274 	ValaList* comments = NULL;
3275 	ValaList* _tmp40_;
3276 	ValaList* _tmp41_;
3277 	ValaList* _tmp42_;
3278 	ValaCCodeFile* _tmp58_;
3279 	gchar* _tmp59_;
3280 	gchar* _tmp60_;
3281 	const gchar* _tmp61_;
3282 	const gchar* _tmp62_;
3283 	ValaCodeContext* _tmp63_;
3284 	gboolean _tmp64_;
3285 	gboolean _tmp65_;
3286 	ValaCodeContext* _tmp66_;
3287 	gboolean _tmp67_;
3288 	gboolean _tmp68_;
3289 	gboolean _tmp69_;
3290 	self = (ValaCCodeBaseModule*) base;
3291 	g_return_if_fail (source_file != NULL);
3292 	_tmp0_ = vala_ccode_file_new (source_file);
3293 	_vala_ccode_file_unref0 (self->cfile);
3294 	self->cfile = _tmp0_;
3295 	_tmp1_ = g_str_hash;
3296 	_tmp2_ = g_str_equal;
3297 	_tmp3_ = vala_hash_set_new (G_TYPE_STRING, (GBoxedCopyFunc) g_strdup, (GDestroyNotify) g_free, _tmp1_, _tmp2_);
3298 	_vala_iterable_unref0 (self->user_marshal_set);
3299 	self->user_marshal_set = (ValaSet*) _tmp3_;
3300 	self->next_regex_id = 0;
3301 	self->requires_assert = FALSE;
3302 	self->requires_array_free = FALSE;
3303 	self->requires_array_move = FALSE;
3304 	self->requires_array_length = FALSE;
3305 	self->requires_array_n_elements = FALSE;
3306 	self->requires_clear_mutex = FALSE;
3307 	_tmp4_ = g_str_hash;
3308 	_tmp5_ = g_str_equal;
3309 	_tmp6_ = vala_hash_set_new (G_TYPE_STRING, (GBoxedCopyFunc) g_strdup, (GDestroyNotify) g_free, _tmp4_, _tmp5_);
3310 	_vala_iterable_unref0 (self->wrappers);
3311 	self->wrappers = (ValaSet*) _tmp6_;
3312 	_tmp7_ = g_direct_hash;
3313 	_tmp8_ = g_direct_equal;
3314 	_tmp9_ = vala_hash_set_new (VALA_TYPE_SYMBOL, (GBoxedCopyFunc) vala_code_node_ref, (GDestroyNotify) vala_code_node_unref, _tmp7_, _tmp8_);
3315 	_vala_iterable_unref0 (self->priv->generated_external_symbols);
3316 	self->priv->generated_external_symbols = (ValaSet*) _tmp9_;
3317 	vala_source_file_accept_children (source_file, (ValaCodeVisitor*) self);
3318 	_tmp10_ = self->priv->_context;
3319 	_tmp11_ = vala_code_context_get_report (_tmp10_);
3320 	_tmp12_ = _tmp11_;
3321 	if (vala_report_get_errors (_tmp12_) > 0) {
3322 		return;
3323 	}
3324 	_tmp13_ = vala_source_file_get_file_type (source_file);
3325 	_tmp14_ = _tmp13_;
3326 	if (_tmp14_ == VALA_SOURCE_FILE_TYPE_FAST) {
3327 		return;
3328 	}
3329 	if (self->requires_assert) {
3330 		ValaCCodeFile* _tmp15_;
3331 		ValaCCodeConstant* _tmp16_;
3332 		ValaCCodeConstant* _tmp17_;
3333 		ValaCCodeMacroReplacement* _tmp18_;
3334 		ValaCCodeMacroReplacement* _tmp19_;
3335 		ValaCCodeFile* _tmp20_;
3336 		ValaCCodeConstant* _tmp21_;
3337 		ValaCCodeConstant* _tmp22_;
3338 		ValaCCodeMacroReplacement* _tmp23_;
3339 		ValaCCodeMacroReplacement* _tmp24_;
3340 		ValaCCodeFile* _tmp25_;
3341 		ValaCCodeConstant* _tmp26_;
3342 		ValaCCodeConstant* _tmp27_;
3343 		ValaCCodeMacroReplacement* _tmp28_;
3344 		ValaCCodeMacroReplacement* _tmp29_;
3345 		ValaCCodeFile* _tmp30_;
3346 		ValaCCodeConstant* _tmp31_;
3347 		ValaCCodeConstant* _tmp32_;
3348 		ValaCCodeMacroReplacement* _tmp33_;
3349 		ValaCCodeMacroReplacement* _tmp34_;
3350 		_tmp15_ = self->cfile;
3351 		_tmp16_ = vala_ccode_constant_new ("if G_LIKELY (expr) ; else g_assertion_message_expr (G_LOG_DOMAIN, __FI" \
3352 "LE__, __LINE__, G_STRFUNC, msg);");
3353 		_tmp17_ = _tmp16_;
3354 		_tmp18_ = vala_ccode_macro_replacement_new_with_expression ("_vala_assert(expr, msg)", (ValaCCodeExpression*) _tmp17_);
3355 		_tmp19_ = _tmp18_;
3356 		vala_ccode_file_add_type_declaration (_tmp15_, (ValaCCodeNode*) _tmp19_);
3357 		_vala_ccode_node_unref0 (_tmp19_);
3358 		_vala_ccode_node_unref0 (_tmp17_);
3359 		_tmp20_ = self->cfile;
3360 		_tmp21_ = vala_ccode_constant_new ("if G_LIKELY (expr) ; else { g_return_if_fail_warning (G_LOG_DOMAIN, G_" \
3361 "STRFUNC, msg); return; }");
3362 		_tmp22_ = _tmp21_;
3363 		_tmp23_ = vala_ccode_macro_replacement_new_with_expression ("_vala_return_if_fail(expr, msg)", (ValaCCodeExpression*) _tmp22_);
3364 		_tmp24_ = _tmp23_;
3365 		vala_ccode_file_add_type_declaration (_tmp20_, (ValaCCodeNode*) _tmp24_);
3366 		_vala_ccode_node_unref0 (_tmp24_);
3367 		_vala_ccode_node_unref0 (_tmp22_);
3368 		_tmp25_ = self->cfile;
3369 		_tmp26_ = vala_ccode_constant_new ("if G_LIKELY (expr) ; else { g_return_if_fail_warning (G_LOG_DOMAIN, G_" \
3370 "STRFUNC, msg); return val; }");
3371 		_tmp27_ = _tmp26_;
3372 		_tmp28_ = vala_ccode_macro_replacement_new_with_expression ("_vala_return_val_if_fail(expr, msg, val)", (ValaCCodeExpression*) _tmp27_);
3373 		_tmp29_ = _tmp28_;
3374 		vala_ccode_file_add_type_declaration (_tmp25_, (ValaCCodeNode*) _tmp29_);
3375 		_vala_ccode_node_unref0 (_tmp29_);
3376 		_vala_ccode_node_unref0 (_tmp27_);
3377 		_tmp30_ = self->cfile;
3378 		_tmp31_ = vala_ccode_constant_new ("if G_LIKELY (expr) ; else g_warn_message (G_LOG_DOMAIN, __FILE__, __LI" \
3379 "NE__, G_STRFUNC, msg);");
3380 		_tmp32_ = _tmp31_;
3381 		_tmp33_ = vala_ccode_macro_replacement_new_with_expression ("_vala_warn_if_fail(expr, msg)", (ValaCCodeExpression*) _tmp32_);
3382 		_tmp34_ = _tmp33_;
3383 		vala_ccode_file_add_type_declaration (_tmp30_, (ValaCCodeNode*) _tmp34_);
3384 		_vala_ccode_node_unref0 (_tmp34_);
3385 		_vala_ccode_node_unref0 (_tmp32_);
3386 	}
3387 	if (self->requires_array_free) {
3388 		vala_ccode_base_module_append_vala_array_free (self);
3389 	}
3390 	if (self->requires_array_move) {
3391 		vala_ccode_base_module_append_vala_array_move (self);
3392 	}
3393 	if (self->requires_array_length) {
3394 		vala_ccode_base_module_append_vala_array_length (self);
3395 	}
3396 	if (self->requires_array_n_elements) {
3397 		ValaCCodeFile* _tmp35_;
3398 		ValaCCodeConstant* _tmp36_;
3399 		ValaCCodeConstant* _tmp37_;
3400 		ValaCCodeMacroReplacement* _tmp38_;
3401 		ValaCCodeMacroReplacement* _tmp39_;
3402 		_tmp35_ = self->cfile;
3403 		_tmp36_ = vala_ccode_constant_new ("(sizeof (arr) / sizeof ((arr)[0]))");
3404 		_tmp37_ = _tmp36_;
3405 		_tmp38_ = vala_ccode_macro_replacement_new_with_expression ("VALA_N_ELEMENTS(arr)", (ValaCCodeExpression*) _tmp37_);
3406 		_tmp39_ = _tmp38_;
3407 		vala_ccode_file_add_type_declaration (_tmp35_, (ValaCCodeNode*) _tmp39_);
3408 		_vala_ccode_node_unref0 (_tmp39_);
3409 		_vala_ccode_node_unref0 (_tmp37_);
3410 	}
3411 	if (self->requires_clear_mutex) {
3412 		vala_ccode_base_module_append_vala_clear_mutex (self, "GMutex", "g_mutex");
3413 		vala_ccode_base_module_append_vala_clear_mutex (self, "GRecMutex", "g_rec_mutex");
3414 		vala_ccode_base_module_append_vala_clear_mutex (self, "GRWLock", "g_rw_lock");
3415 		vala_ccode_base_module_append_vala_clear_mutex (self, "GCond", "g_cond");
3416 	}
3417 	_tmp40_ = vala_source_file_get_comments (source_file);
3418 	_tmp41_ = _vala_iterable_ref0 (_tmp40_);
3419 	comments = _tmp41_;
3420 	_tmp42_ = comments;
3421 	if (_tmp42_ != NULL) {
3422 		{
3423 			ValaList* _comment_list = NULL;
3424 			ValaList* _tmp43_;
3425 			ValaList* _tmp44_;
3426 			gint _comment_size = 0;
3427 			ValaList* _tmp45_;
3428 			gint _tmp46_;
3429 			gint _tmp47_;
3430 			gint _comment_index = 0;
3431 			_tmp43_ = comments;
3432 			_tmp44_ = _vala_iterable_ref0 (_tmp43_);
3433 			_comment_list = _tmp44_;
3434 			_tmp45_ = _comment_list;
3435 			_tmp46_ = vala_collection_get_size ((ValaCollection*) _tmp45_);
3436 			_tmp47_ = _tmp46_;
3437 			_comment_size = _tmp47_;
3438 			_comment_index = -1;
3439 			while (TRUE) {
3440 				gint _tmp48_;
3441 				gint _tmp49_;
3442 				ValaComment* comment = NULL;
3443 				ValaList* _tmp50_;
3444 				gpointer _tmp51_;
3445 				ValaCCodeComment* ccomment = NULL;
3446 				ValaComment* _tmp52_;
3447 				const gchar* _tmp53_;
3448 				const gchar* _tmp54_;
3449 				ValaCCodeComment* _tmp55_;
3450 				ValaCCodeFile* _tmp56_;
3451 				ValaCCodeComment* _tmp57_;
3452 				_comment_index = _comment_index + 1;
3453 				_tmp48_ = _comment_index;
3454 				_tmp49_ = _comment_size;
3455 				if (!(_tmp48_ < _tmp49_)) {
3456 					break;
3457 				}
3458 				_tmp50_ = _comment_list;
3459 				_tmp51_ = vala_list_get (_tmp50_, _comment_index);
3460 				comment = (ValaComment*) _tmp51_;
3461 				_tmp52_ = comment;
3462 				_tmp53_ = vala_comment_get_content (_tmp52_);
3463 				_tmp54_ = _tmp53_;
3464 				_tmp55_ = vala_ccode_comment_new (_tmp54_);
3465 				ccomment = _tmp55_;
3466 				_tmp56_ = self->cfile;
3467 				_tmp57_ = ccomment;
3468 				vala_ccode_file_add_comment (_tmp56_, _tmp57_);
3469 				_vala_ccode_node_unref0 (ccomment);
3470 				_vala_comment_unref0 (comment);
3471 			}
3472 			_vala_iterable_unref0 (_comment_list);
3473 		}
3474 	}
3475 	_tmp58_ = self->cfile;
3476 	_tmp59_ = vala_source_file_get_csource_filename (source_file);
3477 	_tmp60_ = _tmp59_;
3478 	_tmp61_ = vala_source_file_get_filename (source_file);
3479 	_tmp62_ = _tmp61_;
3480 	_tmp63_ = self->priv->_context;
3481 	_tmp64_ = vala_code_context_get_version_header (_tmp63_);
3482 	_tmp65_ = _tmp64_;
3483 	_tmp66_ = self->priv->_context;
3484 	_tmp67_ = vala_code_context_get_debug (_tmp66_);
3485 	_tmp68_ = _tmp67_;
3486 	_tmp69_ = !vala_ccode_file_store (_tmp58_, _tmp60_, _tmp62_, _tmp65_, _tmp68_, NULL, NULL);
3487 	_g_free0 (_tmp60_);
3488 	if (_tmp69_) {
3489 		gchar* _tmp70_;
3490 		gchar* _tmp71_;
3491 		gchar* _tmp72_;
3492 		gchar* _tmp73_;
3493 		_tmp70_ = vala_source_file_get_csource_filename (source_file);
3494 		_tmp71_ = _tmp70_;
3495 		_tmp72_ = g_strdup_printf ("unable to open `%s' for writing", _tmp71_);
3496 		_tmp73_ = _tmp72_;
3497 		vala_report_error (NULL, _tmp73_);
3498 		_g_free0 (_tmp73_);
3499 		_g_free0 (_tmp71_);
3500 	}
3501 	_vala_ccode_file_unref0 (self->cfile);
3502 	self->cfile = NULL;
3503 	_vala_iterable_unref0 (comments);
3504 }
3505 
3506 static gpointer
_vala_ccode_file_ref0(gpointer self)3507 _vala_ccode_file_ref0 (gpointer self)
3508 {
3509 	return self ? vala_ccode_file_ref (self) : NULL;
3510 }
3511 
3512 static gboolean
vala_ccode_base_module_real_generate_enum_declaration(ValaCCodeBaseModule * self,ValaEnum * en,ValaCCodeFile * decl_space)3513 vala_ccode_base_module_real_generate_enum_declaration (ValaCCodeBaseModule* self,
3514                                                        ValaEnum* en,
3515                                                        ValaCCodeFile* decl_space)
3516 {
3517 	gchar* _tmp0_;
3518 	gchar* _tmp1_;
3519 	gboolean _tmp2_;
3520 	ValaCCodeEnum* cenum = NULL;
3521 	gchar* _tmp3_;
3522 	gchar* _tmp4_;
3523 	ValaCCodeEnum* _tmp5_;
3524 	ValaCCodeEnum* _tmp6_;
3525 	ValaVersionAttribute* _tmp7_;
3526 	ValaVersionAttribute* _tmp8_;
3527 	gboolean _tmp9_;
3528 	gboolean _tmp10_;
3529 	ValaCCodeFile* current_cfile = NULL;
3530 	ValaCCodeFile* _tmp18_;
3531 	ValaCCodeFile* _tmp19_;
3532 	ValaCCodeFile* _tmp20_;
3533 	gint flag_shift = 0;
3534 	ValaCCodeFile* _tmp67_;
3535 	ValaCCodeFile* _tmp68_;
3536 	ValaCCodeEnum* _tmp69_;
3537 	ValaCCodeNewline* _tmp70_;
3538 	ValaCCodeNewline* _tmp71_;
3539 	gboolean _tmp72_ = FALSE;
3540 	ValaCodeContext* _tmp73_;
3541 	ValaProfile _tmp74_;
3542 	ValaProfile _tmp75_;
3543 	ValaCCodeNewline* _tmp76_;
3544 	ValaCCodeNewline* _tmp77_;
3545 	gchar* fun_name = NULL;
3546 	gchar* _tmp78_;
3547 	gchar* macro = NULL;
3548 	const gchar* _tmp79_;
3549 	gchar* _tmp80_;
3550 	gchar* _tmp81_;
3551 	gchar* _tmp82_;
3552 	const gchar* _tmp83_;
3553 	ValaCCodeMacroReplacement* _tmp84_;
3554 	ValaCCodeMacroReplacement* _tmp85_;
3555 	ValaCCodeFunction* regfun = NULL;
3556 	const gchar* _tmp86_;
3557 	ValaCCodeFunction* _tmp87_;
3558 	ValaCCodeFunction* _tmp88_;
3559 	ValaCCodeFunction* _tmp101_;
3560 	gboolean result = FALSE;
3561 	g_return_val_if_fail (en != NULL, FALSE);
3562 	g_return_val_if_fail (decl_space != NULL, FALSE);
3563 	_tmp0_ = vala_get_ccode_name ((ValaCodeNode*) en);
3564 	_tmp1_ = _tmp0_;
3565 	_tmp2_ = vala_ccode_base_module_add_symbol_declaration (self, decl_space, (ValaSymbol*) en, _tmp1_);
3566 	_g_free0 (_tmp1_);
3567 	if (_tmp2_) {
3568 		result = FALSE;
3569 		return result;
3570 	}
3571 	_tmp3_ = vala_get_ccode_name ((ValaCodeNode*) en);
3572 	_tmp4_ = _tmp3_;
3573 	_tmp5_ = vala_ccode_enum_new (_tmp4_);
3574 	_tmp6_ = _tmp5_;
3575 	_g_free0 (_tmp4_);
3576 	cenum = _tmp6_;
3577 	_tmp7_ = vala_symbol_get_version ((ValaSymbol*) en);
3578 	_tmp8_ = _tmp7_;
3579 	_tmp9_ = vala_version_attribute_get_deprecated (_tmp8_);
3580 	_tmp10_ = _tmp9_;
3581 	if (_tmp10_) {
3582 		ValaCodeContext* _tmp11_;
3583 		ValaProfile _tmp12_;
3584 		ValaProfile _tmp13_;
3585 		ValaCCodeEnum* _tmp14_;
3586 		ValaCCodeEnum* _tmp15_;
3587 		ValaCCodeModifiers _tmp16_;
3588 		ValaCCodeModifiers _tmp17_;
3589 		_tmp11_ = self->priv->_context;
3590 		_tmp12_ = vala_code_context_get_profile (_tmp11_);
3591 		_tmp13_ = _tmp12_;
3592 		if (_tmp13_ == VALA_PROFILE_GOBJECT) {
3593 			vala_ccode_file_add_include (decl_space, "glib.h", FALSE);
3594 		}
3595 		_tmp14_ = cenum;
3596 		_tmp15_ = cenum;
3597 		_tmp16_ = vala_ccode_node_get_modifiers ((ValaCCodeNode*) _tmp15_);
3598 		_tmp17_ = _tmp16_;
3599 		vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp15_, _tmp17_ | VALA_CCODE_MODIFIERS_DEPRECATED);
3600 	}
3601 	_tmp18_ = self->cfile;
3602 	_tmp19_ = _vala_ccode_file_ref0 (_tmp18_);
3603 	current_cfile = _tmp19_;
3604 	_tmp20_ = _vala_ccode_file_ref0 (decl_space);
3605 	_vala_ccode_file_unref0 (self->cfile);
3606 	self->cfile = _tmp20_;
3607 	flag_shift = 0;
3608 	{
3609 		ValaList* _ev_list = NULL;
3610 		ValaList* _tmp21_;
3611 		ValaList* _tmp22_;
3612 		gint _ev_size = 0;
3613 		ValaList* _tmp23_;
3614 		gint _tmp24_;
3615 		gint _tmp25_;
3616 		gint _ev_index = 0;
3617 		_tmp21_ = vala_enum_get_values (en);
3618 		_tmp22_ = _vala_iterable_ref0 (_tmp21_);
3619 		_ev_list = _tmp22_;
3620 		_tmp23_ = _ev_list;
3621 		_tmp24_ = vala_collection_get_size ((ValaCollection*) _tmp23_);
3622 		_tmp25_ = _tmp24_;
3623 		_ev_size = _tmp25_;
3624 		_ev_index = -1;
3625 		while (TRUE) {
3626 			gint _tmp26_;
3627 			gint _tmp27_;
3628 			ValaEnumValue* ev = NULL;
3629 			ValaList* _tmp28_;
3630 			gpointer _tmp29_;
3631 			ValaCCodeEnumValue* c_ev = NULL;
3632 			ValaEnumValue* _tmp30_;
3633 			ValaExpression* _tmp31_;
3634 			ValaExpression* _tmp32_;
3635 			ValaCCodeModifiers _tmp55_ = 0U;
3636 			ValaEnumValue* _tmp56_;
3637 			ValaVersionAttribute* _tmp57_;
3638 			ValaVersionAttribute* _tmp58_;
3639 			gboolean _tmp59_;
3640 			gboolean _tmp60_;
3641 			ValaCCodeEnumValue* _tmp61_;
3642 			ValaCCodeEnumValue* _tmp62_;
3643 			ValaCCodeModifiers _tmp63_;
3644 			ValaCCodeModifiers _tmp64_;
3645 			ValaCCodeEnum* _tmp65_;
3646 			ValaCCodeEnumValue* _tmp66_;
3647 			_ev_index = _ev_index + 1;
3648 			_tmp26_ = _ev_index;
3649 			_tmp27_ = _ev_size;
3650 			if (!(_tmp26_ < _tmp27_)) {
3651 				break;
3652 			}
3653 			_tmp28_ = _ev_list;
3654 			_tmp29_ = vala_list_get (_tmp28_, _ev_index);
3655 			ev = (ValaEnumValue*) _tmp29_;
3656 			_tmp30_ = ev;
3657 			_tmp31_ = vala_constant_get_value ((ValaConstant*) _tmp30_);
3658 			_tmp32_ = _tmp31_;
3659 			if (_tmp32_ == NULL) {
3660 				ValaEnumValue* _tmp33_;
3661 				gchar* _tmp34_;
3662 				gchar* _tmp35_;
3663 				ValaCCodeEnumValue* _tmp36_;
3664 				gboolean _tmp37_;
3665 				gboolean _tmp38_;
3666 				_tmp33_ = ev;
3667 				_tmp34_ = vala_get_ccode_name ((ValaCodeNode*) _tmp33_);
3668 				_tmp35_ = _tmp34_;
3669 				_tmp36_ = vala_ccode_enum_value_new (_tmp35_, NULL);
3670 				_vala_ccode_node_unref0 (c_ev);
3671 				c_ev = _tmp36_;
3672 				_g_free0 (_tmp35_);
3673 				_tmp37_ = vala_enum_get_is_flags (en);
3674 				_tmp38_ = _tmp37_;
3675 				if (_tmp38_) {
3676 					ValaCCodeEnumValue* _tmp39_;
3677 					gchar* _tmp40_;
3678 					gchar* _tmp41_;
3679 					ValaCCodeConstant* _tmp42_;
3680 					ValaCCodeConstant* _tmp43_;
3681 					_tmp39_ = c_ev;
3682 					_tmp40_ = g_strdup_printf ("1 << %d", flag_shift);
3683 					_tmp41_ = _tmp40_;
3684 					_tmp42_ = vala_ccode_constant_new (_tmp41_);
3685 					_tmp43_ = _tmp42_;
3686 					vala_ccode_enum_value_set_value (_tmp39_, (ValaCCodeExpression*) _tmp43_);
3687 					_vala_ccode_node_unref0 (_tmp43_);
3688 					_g_free0 (_tmp41_);
3689 					flag_shift += 1;
3690 				}
3691 			} else {
3692 				ValaEnumValue* _tmp44_;
3693 				ValaExpression* _tmp45_;
3694 				ValaExpression* _tmp46_;
3695 				ValaEnumValue* _tmp47_;
3696 				gchar* _tmp48_;
3697 				gchar* _tmp49_;
3698 				ValaEnumValue* _tmp50_;
3699 				ValaExpression* _tmp51_;
3700 				ValaExpression* _tmp52_;
3701 				ValaCCodeExpression* _tmp53_;
3702 				ValaCCodeEnumValue* _tmp54_;
3703 				_tmp44_ = ev;
3704 				_tmp45_ = vala_constant_get_value ((ValaConstant*) _tmp44_);
3705 				_tmp46_ = _tmp45_;
3706 				vala_code_node_emit ((ValaCodeNode*) _tmp46_, (ValaCodeGenerator*) self);
3707 				_tmp47_ = ev;
3708 				_tmp48_ = vala_get_ccode_name ((ValaCodeNode*) _tmp47_);
3709 				_tmp49_ = _tmp48_;
3710 				_tmp50_ = ev;
3711 				_tmp51_ = vala_constant_get_value ((ValaConstant*) _tmp50_);
3712 				_tmp52_ = _tmp51_;
3713 				_tmp53_ = vala_get_cvalue (_tmp52_);
3714 				_tmp54_ = vala_ccode_enum_value_new (_tmp49_, _tmp53_);
3715 				_vala_ccode_node_unref0 (c_ev);
3716 				c_ev = _tmp54_;
3717 				_g_free0 (_tmp49_);
3718 			}
3719 			_tmp56_ = ev;
3720 			_tmp57_ = vala_symbol_get_version ((ValaSymbol*) _tmp56_);
3721 			_tmp58_ = _tmp57_;
3722 			_tmp59_ = vala_version_attribute_get_deprecated (_tmp58_);
3723 			_tmp60_ = _tmp59_;
3724 			if (_tmp60_) {
3725 				_tmp55_ = VALA_CCODE_MODIFIERS_DEPRECATED;
3726 			} else {
3727 				_tmp55_ = 0;
3728 			}
3729 			_tmp61_ = c_ev;
3730 			_tmp62_ = c_ev;
3731 			_tmp63_ = vala_ccode_node_get_modifiers ((ValaCCodeNode*) _tmp62_);
3732 			_tmp64_ = _tmp63_;
3733 			vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp62_, _tmp64_ | _tmp55_);
3734 			_tmp65_ = cenum;
3735 			_tmp66_ = c_ev;
3736 			vala_ccode_enum_add_value (_tmp65_, _tmp66_);
3737 			_vala_ccode_node_unref0 (c_ev);
3738 			_vala_code_node_unref0 (ev);
3739 		}
3740 		_vala_iterable_unref0 (_ev_list);
3741 	}
3742 	_tmp67_ = current_cfile;
3743 	_tmp68_ = _vala_ccode_file_ref0 (_tmp67_);
3744 	_vala_ccode_file_unref0 (self->cfile);
3745 	self->cfile = _tmp68_;
3746 	_tmp69_ = cenum;
3747 	vala_ccode_file_add_type_declaration (decl_space, (ValaCCodeNode*) _tmp69_);
3748 	_tmp70_ = vala_ccode_newline_new ();
3749 	_tmp71_ = _tmp70_;
3750 	vala_ccode_file_add_type_declaration (decl_space, (ValaCCodeNode*) _tmp71_);
3751 	_vala_ccode_node_unref0 (_tmp71_);
3752 	_tmp73_ = self->priv->_context;
3753 	_tmp74_ = vala_code_context_get_profile (_tmp73_);
3754 	_tmp75_ = _tmp74_;
3755 	if (_tmp75_ != VALA_PROFILE_GOBJECT) {
3756 		_tmp72_ = TRUE;
3757 	} else {
3758 		_tmp72_ = !vala_get_ccode_has_type_id ((ValaTypeSymbol*) en);
3759 	}
3760 	if (_tmp72_) {
3761 		result = TRUE;
3762 		_vala_ccode_file_unref0 (current_cfile);
3763 		_vala_ccode_node_unref0 (cenum);
3764 		return result;
3765 	}
3766 	vala_ccode_file_add_include (decl_space, "glib-object.h", FALSE);
3767 	_tmp76_ = vala_ccode_newline_new ();
3768 	_tmp77_ = _tmp76_;
3769 	vala_ccode_file_add_type_declaration (decl_space, (ValaCCodeNode*) _tmp77_);
3770 	_vala_ccode_node_unref0 (_tmp77_);
3771 	_tmp78_ = vala_get_ccode_type_function ((ValaTypeSymbol*) en);
3772 	fun_name = _tmp78_;
3773 	_tmp79_ = fun_name;
3774 	_tmp80_ = g_strdup_printf ("(%s ())", _tmp79_);
3775 	macro = _tmp80_;
3776 	_tmp81_ = vala_get_ccode_type_id ((ValaCodeNode*) en);
3777 	_tmp82_ = _tmp81_;
3778 	_tmp83_ = macro;
3779 	_tmp84_ = vala_ccode_macro_replacement_new (_tmp82_, _tmp83_);
3780 	_tmp85_ = _tmp84_;
3781 	vala_ccode_file_add_type_declaration (decl_space, (ValaCCodeNode*) _tmp85_);
3782 	_vala_ccode_node_unref0 (_tmp85_);
3783 	_g_free0 (_tmp82_);
3784 	_tmp86_ = fun_name;
3785 	_tmp87_ = vala_ccode_function_new (_tmp86_, "GType");
3786 	regfun = _tmp87_;
3787 	_tmp88_ = regfun;
3788 	vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp88_, VALA_CCODE_MODIFIERS_CONST);
3789 	if (vala_symbol_is_private_symbol ((ValaSymbol*) en)) {
3790 		ValaCCodeFunction* _tmp89_;
3791 		ValaCCodeFunction* _tmp90_;
3792 		ValaCCodeModifiers _tmp91_;
3793 		ValaCCodeModifiers _tmp92_;
3794 		_tmp89_ = regfun;
3795 		_tmp90_ = regfun;
3796 		_tmp91_ = vala_ccode_node_get_modifiers ((ValaCCodeNode*) _tmp90_);
3797 		_tmp92_ = _tmp91_;
3798 		vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp90_, _tmp92_ | (VALA_CCODE_MODIFIERS_STATIC | VALA_CCODE_MODIFIERS_UNUSED));
3799 	} else {
3800 		gboolean _tmp93_ = FALSE;
3801 		ValaCodeContext* _tmp94_;
3802 		gboolean _tmp95_;
3803 		gboolean _tmp96_;
3804 		_tmp94_ = self->priv->_context;
3805 		_tmp95_ = vala_code_context_get_hide_internal (_tmp94_);
3806 		_tmp96_ = _tmp95_;
3807 		if (_tmp96_) {
3808 			_tmp93_ = vala_symbol_is_internal_symbol ((ValaSymbol*) en);
3809 		} else {
3810 			_tmp93_ = FALSE;
3811 		}
3812 		if (_tmp93_) {
3813 			ValaCCodeFunction* _tmp97_;
3814 			ValaCCodeFunction* _tmp98_;
3815 			ValaCCodeModifiers _tmp99_;
3816 			ValaCCodeModifiers _tmp100_;
3817 			_tmp97_ = regfun;
3818 			_tmp98_ = regfun;
3819 			_tmp99_ = vala_ccode_node_get_modifiers ((ValaCCodeNode*) _tmp98_);
3820 			_tmp100_ = _tmp99_;
3821 			vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp98_, _tmp100_ | VALA_CCODE_MODIFIERS_INTERNAL);
3822 		}
3823 	}
3824 	_tmp101_ = regfun;
3825 	vala_ccode_file_add_function_declaration (decl_space, _tmp101_);
3826 	result = TRUE;
3827 	_vala_ccode_node_unref0 (regfun);
3828 	_g_free0 (macro);
3829 	_g_free0 (fun_name);
3830 	_vala_ccode_file_unref0 (current_cfile);
3831 	_vala_ccode_node_unref0 (cenum);
3832 	return result;
3833 }
3834 
3835 gboolean
vala_ccode_base_module_generate_enum_declaration(ValaCCodeBaseModule * self,ValaEnum * en,ValaCCodeFile * decl_space)3836 vala_ccode_base_module_generate_enum_declaration (ValaCCodeBaseModule* self,
3837                                                   ValaEnum* en,
3838                                                   ValaCCodeFile* decl_space)
3839 {
3840 	g_return_val_if_fail (self != NULL, FALSE);
3841 	return VALA_CCODE_BASE_MODULE_GET_CLASS (self)->generate_enum_declaration (self, en, decl_space);
3842 }
3843 
3844 static void
vala_ccode_base_module_real_visit_enum(ValaCodeVisitor * base,ValaEnum * en)3845 vala_ccode_base_module_real_visit_enum (ValaCodeVisitor* base,
3846                                         ValaEnum* en)
3847 {
3848 	ValaCCodeBaseModule * self;
3849 	ValaSourceReference* _tmp0_;
3850 	ValaSourceReference* _tmp1_;
3851 	ValaComment* _tmp2_;
3852 	ValaComment* _tmp3_;
3853 	ValaCCodeFile* _tmp11_;
3854 	self = (ValaCCodeBaseModule*) base;
3855 	g_return_if_fail (en != NULL);
3856 	_tmp0_ = vala_code_node_get_source_reference ((ValaCodeNode*) en);
3857 	_tmp1_ = _tmp0_;
3858 	vala_ccode_base_module_push_line (self, _tmp1_);
3859 	_tmp2_ = vala_symbol_get_comment ((ValaSymbol*) en);
3860 	_tmp3_ = _tmp2_;
3861 	if (_tmp3_ != NULL) {
3862 		ValaCCodeFile* _tmp4_;
3863 		ValaComment* _tmp5_;
3864 		ValaComment* _tmp6_;
3865 		const gchar* _tmp7_;
3866 		const gchar* _tmp8_;
3867 		ValaCCodeComment* _tmp9_;
3868 		ValaCCodeComment* _tmp10_;
3869 		_tmp4_ = self->cfile;
3870 		_tmp5_ = vala_symbol_get_comment ((ValaSymbol*) en);
3871 		_tmp6_ = _tmp5_;
3872 		_tmp7_ = vala_comment_get_content (_tmp6_);
3873 		_tmp8_ = _tmp7_;
3874 		_tmp9_ = vala_ccode_comment_new (_tmp8_);
3875 		_tmp10_ = _tmp9_;
3876 		vala_ccode_file_add_type_member_definition (_tmp4_, (ValaCCodeNode*) _tmp10_);
3877 		_vala_ccode_node_unref0 (_tmp10_);
3878 	}
3879 	_tmp11_ = self->cfile;
3880 	vala_ccode_base_module_generate_enum_declaration (self, en, _tmp11_);
3881 	if (!vala_symbol_is_internal_symbol ((ValaSymbol*) en)) {
3882 		ValaCCodeFile* _tmp12_;
3883 		_tmp12_ = self->header_file;
3884 		vala_ccode_base_module_generate_enum_declaration (self, en, _tmp12_);
3885 	}
3886 	if (!vala_symbol_is_private_symbol ((ValaSymbol*) en)) {
3887 		ValaCCodeFile* _tmp13_;
3888 		_tmp13_ = self->internal_header_file;
3889 		vala_ccode_base_module_generate_enum_declaration (self, en, _tmp13_);
3890 	}
3891 	vala_code_node_accept_children ((ValaCodeNode*) en, (ValaCodeVisitor*) self);
3892 	vala_ccode_base_module_pop_line (self);
3893 }
3894 
3895 void
vala_ccode_base_module_visit_member(ValaCCodeBaseModule * self,ValaSymbol * m)3896 vala_ccode_base_module_visit_member (ValaCCodeBaseModule* self,
3897                                      ValaSymbol* m)
3898 {
3899 	gboolean _tmp0_ = FALSE;
3900 	g_return_if_fail (self != NULL);
3901 	g_return_if_fail (m != NULL);
3902 	if (G_TYPE_CHECK_INSTANCE_TYPE (m, VALA_TYPE_LOCKABLE)) {
3903 		gboolean _tmp1_;
3904 		gboolean _tmp2_;
3905 		_tmp1_ = vala_lockable_get_lock_used (G_TYPE_CHECK_INSTANCE_CAST (m, VALA_TYPE_LOCKABLE, ValaLockable));
3906 		_tmp2_ = _tmp1_;
3907 		_tmp0_ = _tmp2_;
3908 	} else {
3909 		_tmp0_ = FALSE;
3910 	}
3911 	if (_tmp0_) {
3912 		ValaCCodeExpression* l = NULL;
3913 		ValaCCodeIdentifier* _tmp3_;
3914 		ValaCCodeBaseModuleEmitContext* init_context = NULL;
3915 		ValaCCodeBaseModuleEmitContext* _tmp4_;
3916 		ValaCCodeBaseModuleEmitContext* _tmp5_;
3917 		ValaCCodeBaseModuleEmitContext* finalize_context = NULL;
3918 		ValaCCodeBaseModuleEmitContext* _tmp6_;
3919 		ValaCCodeBaseModuleEmitContext* _tmp7_;
3920 		ValaCCodeBaseModuleEmitContext* _tmp48_;
3921 		ValaCCodeFunctionCall* initf = NULL;
3922 		ValaStruct* _tmp49_;
3923 		ValaCreationMethod* _tmp50_;
3924 		ValaCreationMethod* _tmp51_;
3925 		gchar* _tmp52_;
3926 		gchar* _tmp53_;
3927 		ValaCCodeIdentifier* _tmp54_;
3928 		ValaCCodeIdentifier* _tmp55_;
3929 		ValaCCodeFunctionCall* _tmp56_;
3930 		ValaCCodeFunctionCall* _tmp57_;
3931 		ValaCCodeFunctionCall* _tmp58_;
3932 		ValaCCodeExpression* _tmp59_;
3933 		ValaCCodeUnaryExpression* _tmp60_;
3934 		ValaCCodeUnaryExpression* _tmp61_;
3935 		ValaCCodeFunction* _tmp62_;
3936 		ValaCCodeFunction* _tmp63_;
3937 		ValaCCodeFunctionCall* _tmp64_;
3938 		ValaCCodeBaseModuleEmitContext* _tmp65_;
3939 		_tmp3_ = vala_ccode_identifier_new ("self");
3940 		l = (ValaCCodeExpression*) _tmp3_;
3941 		_tmp4_ = self->class_init_context;
3942 		_tmp5_ = _vala_ccode_base_module_emit_context_ref0 (_tmp4_);
3943 		init_context = _tmp5_;
3944 		_tmp6_ = self->class_finalize_context;
3945 		_tmp7_ = _vala_ccode_base_module_emit_context_ref0 (_tmp6_);
3946 		finalize_context = _tmp7_;
3947 		if (vala_symbol_is_instance_member (m)) {
3948 			ValaCCodeExpression* _tmp8_;
3949 			ValaCCodeMemberAccess* _tmp9_;
3950 			ValaCCodeMemberAccess* _tmp10_;
3951 			gchar* _tmp11_;
3952 			gchar* _tmp12_;
3953 			gchar* _tmp13_;
3954 			gchar* _tmp14_;
3955 			ValaCCodeMemberAccess* _tmp15_;
3956 			ValaCCodeBaseModuleEmitContext* _tmp16_;
3957 			ValaCCodeBaseModuleEmitContext* _tmp17_;
3958 			ValaCCodeBaseModuleEmitContext* _tmp18_;
3959 			ValaCCodeBaseModuleEmitContext* _tmp19_;
3960 			_tmp8_ = l;
3961 			_tmp9_ = vala_ccode_member_access_new_pointer (_tmp8_, "priv");
3962 			_tmp10_ = _tmp9_;
3963 			_tmp11_ = vala_get_ccode_name ((ValaCodeNode*) m);
3964 			_tmp12_ = _tmp11_;
3965 			_tmp13_ = vala_ccode_base_module_get_symbol_lock_name (self, _tmp12_);
3966 			_tmp14_ = _tmp13_;
3967 			_tmp15_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) _tmp10_, _tmp14_);
3968 			_vala_ccode_node_unref0 (l);
3969 			l = (ValaCCodeExpression*) _tmp15_;
3970 			_g_free0 (_tmp14_);
3971 			_g_free0 (_tmp12_);
3972 			_vala_ccode_node_unref0 (_tmp10_);
3973 			_tmp16_ = self->instance_init_context;
3974 			_tmp17_ = _vala_ccode_base_module_emit_context_ref0 (_tmp16_);
3975 			_vala_ccode_base_module_emit_context_unref0 (init_context);
3976 			init_context = _tmp17_;
3977 			_tmp18_ = self->instance_finalize_context;
3978 			_tmp19_ = _vala_ccode_base_module_emit_context_ref0 (_tmp18_);
3979 			_vala_ccode_base_module_emit_context_unref0 (finalize_context);
3980 			finalize_context = _tmp19_;
3981 		} else {
3982 			if (vala_symbol_is_class_member (m)) {
3983 				ValaCCodeFunctionCall* get_class_private_call = NULL;
3984 				ValaSymbol* _tmp20_;
3985 				ValaSymbol* _tmp21_;
3986 				gchar* _tmp22_;
3987 				gchar* _tmp23_;
3988 				ValaCCodeIdentifier* _tmp24_;
3989 				ValaCCodeIdentifier* _tmp25_;
3990 				ValaCCodeFunctionCall* _tmp26_;
3991 				ValaCCodeFunctionCall* _tmp27_;
3992 				ValaCCodeFunctionCall* _tmp28_;
3993 				ValaCCodeIdentifier* _tmp29_;
3994 				ValaCCodeIdentifier* _tmp30_;
3995 				ValaCCodeFunctionCall* _tmp31_;
3996 				gchar* _tmp32_;
3997 				gchar* _tmp33_;
3998 				gchar* _tmp34_;
3999 				gchar* _tmp35_;
4000 				ValaCCodeMemberAccess* _tmp36_;
4001 				_tmp20_ = vala_symbol_get_parent_symbol (m);
4002 				_tmp21_ = _tmp20_;
4003 				_tmp22_ = vala_get_ccode_class_get_private_function (G_TYPE_CHECK_INSTANCE_CAST (_tmp21_, VALA_TYPE_CLASS, ValaClass));
4004 				_tmp23_ = _tmp22_;
4005 				_tmp24_ = vala_ccode_identifier_new (_tmp23_);
4006 				_tmp25_ = _tmp24_;
4007 				_tmp26_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp25_);
4008 				_tmp27_ = _tmp26_;
4009 				_vala_ccode_node_unref0 (_tmp25_);
4010 				_g_free0 (_tmp23_);
4011 				get_class_private_call = _tmp27_;
4012 				_tmp28_ = get_class_private_call;
4013 				_tmp29_ = vala_ccode_identifier_new ("klass");
4014 				_tmp30_ = _tmp29_;
4015 				vala_ccode_function_call_add_argument (_tmp28_, (ValaCCodeExpression*) _tmp30_);
4016 				_vala_ccode_node_unref0 (_tmp30_);
4017 				_tmp31_ = get_class_private_call;
4018 				_tmp32_ = vala_get_ccode_name ((ValaCodeNode*) m);
4019 				_tmp33_ = _tmp32_;
4020 				_tmp34_ = vala_ccode_base_module_get_symbol_lock_name (self, _tmp33_);
4021 				_tmp35_ = _tmp34_;
4022 				_tmp36_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) _tmp31_, _tmp35_);
4023 				_vala_ccode_node_unref0 (l);
4024 				l = (ValaCCodeExpression*) _tmp36_;
4025 				_g_free0 (_tmp35_);
4026 				_g_free0 (_tmp33_);
4027 				_vala_ccode_node_unref0 (get_class_private_call);
4028 			} else {
4029 				ValaSymbol* _tmp37_;
4030 				ValaSymbol* _tmp38_;
4031 				gchar* _tmp39_;
4032 				gchar* _tmp40_;
4033 				gchar* _tmp41_;
4034 				gchar* _tmp42_;
4035 				gchar* _tmp43_;
4036 				gchar* _tmp44_;
4037 				gchar* _tmp45_;
4038 				gchar* _tmp46_;
4039 				ValaCCodeIdentifier* _tmp47_;
4040 				_tmp37_ = vala_symbol_get_parent_symbol (m);
4041 				_tmp38_ = _tmp37_;
4042 				_tmp39_ = vala_get_ccode_lower_case_name ((ValaCodeNode*) _tmp38_, NULL);
4043 				_tmp40_ = _tmp39_;
4044 				_tmp41_ = vala_get_ccode_name ((ValaCodeNode*) m);
4045 				_tmp42_ = _tmp41_;
4046 				_tmp43_ = g_strdup_printf ("%s_%s", _tmp40_, _tmp42_);
4047 				_tmp44_ = _tmp43_;
4048 				_tmp45_ = vala_ccode_base_module_get_symbol_lock_name (self, _tmp44_);
4049 				_tmp46_ = _tmp45_;
4050 				_tmp47_ = vala_ccode_identifier_new (_tmp46_);
4051 				_vala_ccode_node_unref0 (l);
4052 				l = (ValaCCodeExpression*) _tmp47_;
4053 				_g_free0 (_tmp46_);
4054 				_g_free0 (_tmp44_);
4055 				_g_free0 (_tmp42_);
4056 				_g_free0 (_tmp40_);
4057 			}
4058 		}
4059 		_tmp48_ = init_context;
4060 		vala_ccode_base_module_push_context (self, _tmp48_);
4061 		_tmp49_ = self->mutex_type;
4062 		_tmp50_ = vala_struct_get_default_construction_method (_tmp49_);
4063 		_tmp51_ = _tmp50_;
4064 		_tmp52_ = vala_get_ccode_name ((ValaCodeNode*) _tmp51_);
4065 		_tmp53_ = _tmp52_;
4066 		_tmp54_ = vala_ccode_identifier_new (_tmp53_);
4067 		_tmp55_ = _tmp54_;
4068 		_tmp56_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp55_);
4069 		_tmp57_ = _tmp56_;
4070 		_vala_ccode_node_unref0 (_tmp55_);
4071 		_g_free0 (_tmp53_);
4072 		initf = _tmp57_;
4073 		_tmp58_ = initf;
4074 		_tmp59_ = l;
4075 		_tmp60_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, _tmp59_);
4076 		_tmp61_ = _tmp60_;
4077 		vala_ccode_function_call_add_argument (_tmp58_, (ValaCCodeExpression*) _tmp61_);
4078 		_vala_ccode_node_unref0 (_tmp61_);
4079 		_tmp62_ = vala_ccode_base_module_get_ccode (self);
4080 		_tmp63_ = _tmp62_;
4081 		_tmp64_ = initf;
4082 		vala_ccode_function_add_expression (_tmp63_, (ValaCCodeExpression*) _tmp64_);
4083 		vala_ccode_base_module_pop_context (self);
4084 		_tmp65_ = finalize_context;
4085 		if (_tmp65_ != NULL) {
4086 			ValaCCodeBaseModuleEmitContext* _tmp66_;
4087 			ValaCCodeFunctionCall* fc = NULL;
4088 			ValaCCodeIdentifier* _tmp67_;
4089 			ValaCCodeIdentifier* _tmp68_;
4090 			ValaCCodeFunctionCall* _tmp69_;
4091 			ValaCCodeFunctionCall* _tmp70_;
4092 			ValaCCodeFunctionCall* _tmp71_;
4093 			ValaCCodeExpression* _tmp72_;
4094 			ValaCCodeUnaryExpression* _tmp73_;
4095 			ValaCCodeUnaryExpression* _tmp74_;
4096 			ValaCCodeFunction* _tmp75_;
4097 			ValaCCodeFunction* _tmp76_;
4098 			ValaCCodeFunctionCall* _tmp77_;
4099 			_tmp66_ = finalize_context;
4100 			vala_ccode_base_module_push_context (self, _tmp66_);
4101 			_tmp67_ = vala_ccode_identifier_new ("g_rec_mutex_clear");
4102 			_tmp68_ = _tmp67_;
4103 			_tmp69_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp68_);
4104 			_tmp70_ = _tmp69_;
4105 			_vala_ccode_node_unref0 (_tmp68_);
4106 			fc = _tmp70_;
4107 			_tmp71_ = fc;
4108 			_tmp72_ = l;
4109 			_tmp73_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, _tmp72_);
4110 			_tmp74_ = _tmp73_;
4111 			vala_ccode_function_call_add_argument (_tmp71_, (ValaCCodeExpression*) _tmp74_);
4112 			_vala_ccode_node_unref0 (_tmp74_);
4113 			_tmp75_ = vala_ccode_base_module_get_ccode (self);
4114 			_tmp76_ = _tmp75_;
4115 			_tmp77_ = fc;
4116 			vala_ccode_function_add_expression (_tmp76_, (ValaCCodeExpression*) _tmp77_);
4117 			vala_ccode_base_module_pop_context (self);
4118 			_vala_ccode_node_unref0 (fc);
4119 		}
4120 		_vala_ccode_node_unref0 (initf);
4121 		_vala_ccode_base_module_emit_context_unref0 (finalize_context);
4122 		_vala_ccode_base_module_emit_context_unref0 (init_context);
4123 		_vala_ccode_node_unref0 (l);
4124 	}
4125 }
4126 
4127 static void
vala_ccode_base_module_constant_array_ranks_sizes(ValaInitializerList * initializer_list,gint * sizes,gint sizes_length1,gint rank)4128 vala_ccode_base_module_constant_array_ranks_sizes (ValaInitializerList* initializer_list,
4129                                                    gint* sizes,
4130                                                    gint sizes_length1,
4131                                                    gint rank)
4132 {
4133 	gint _tmp0_;
4134 	gint _tmp1_;
4135 	gint _tmp2_;
4136 	gint _tmp3_;
4137 	g_return_if_fail (initializer_list != NULL);
4138 	_tmp0_ = sizes[rank];
4139 	_tmp1_ = vala_initializer_list_get_size (initializer_list);
4140 	_tmp2_ = _tmp1_;
4141 	sizes[rank] = MAX (_tmp0_, _tmp2_);
4142 	_tmp3_ = rank;
4143 	rank = _tmp3_ + 1;
4144 	{
4145 		ValaList* _expr_list = NULL;
4146 		ValaList* _tmp4_;
4147 		ValaList* _tmp5_;
4148 		gint _expr_size = 0;
4149 		ValaList* _tmp6_;
4150 		gint _tmp7_;
4151 		gint _tmp8_;
4152 		gint _expr_index = 0;
4153 		_tmp4_ = vala_initializer_list_get_initializers (initializer_list);
4154 		_tmp5_ = _vala_iterable_ref0 (_tmp4_);
4155 		_expr_list = _tmp5_;
4156 		_tmp6_ = _expr_list;
4157 		_tmp7_ = vala_collection_get_size ((ValaCollection*) _tmp6_);
4158 		_tmp8_ = _tmp7_;
4159 		_expr_size = _tmp8_;
4160 		_expr_index = -1;
4161 		while (TRUE) {
4162 			gint _tmp9_;
4163 			gint _tmp10_;
4164 			ValaExpression* expr = NULL;
4165 			ValaList* _tmp11_;
4166 			gpointer _tmp12_;
4167 			gboolean _tmp13_ = FALSE;
4168 			ValaExpression* _tmp14_;
4169 			_expr_index = _expr_index + 1;
4170 			_tmp9_ = _expr_index;
4171 			_tmp10_ = _expr_size;
4172 			if (!(_tmp9_ < _tmp10_)) {
4173 				break;
4174 			}
4175 			_tmp11_ = _expr_list;
4176 			_tmp12_ = vala_list_get (_tmp11_, _expr_index);
4177 			expr = (ValaExpression*) _tmp12_;
4178 			_tmp14_ = expr;
4179 			if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp14_, VALA_TYPE_INITIALIZER_LIST)) {
4180 				ValaExpression* _tmp15_;
4181 				ValaDataType* _tmp16_;
4182 				ValaDataType* _tmp17_;
4183 				_tmp15_ = expr;
4184 				_tmp16_ = vala_expression_get_target_type ((ValaExpression*) G_TYPE_CHECK_INSTANCE_CAST (_tmp15_, VALA_TYPE_INITIALIZER_LIST, ValaInitializerList));
4185 				_tmp17_ = _tmp16_;
4186 				_tmp13_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp17_, VALA_TYPE_ARRAY_TYPE);
4187 			} else {
4188 				_tmp13_ = FALSE;
4189 			}
4190 			if (_tmp13_) {
4191 				ValaExpression* _tmp18_;
4192 				_tmp18_ = expr;
4193 				vala_ccode_base_module_constant_array_ranks_sizes (G_TYPE_CHECK_INSTANCE_CAST (_tmp18_, VALA_TYPE_INITIALIZER_LIST, ValaInitializerList), sizes, (gint) sizes_length1, rank);
4194 			}
4195 			_vala_code_node_unref0 (expr);
4196 		}
4197 		_vala_iterable_unref0 (_expr_list);
4198 	}
4199 }
4200 
4201 static ValaCCodeDeclaratorSuffix*
vala_ccode_base_module_get_constant_declarator_suffix(ValaCCodeBaseModule * self,ValaConstant * c)4202 vala_ccode_base_module_get_constant_declarator_suffix (ValaCCodeBaseModule* self,
4203                                                        ValaConstant* c)
4204 {
4205 	ValaArrayType* array = NULL;
4206 	ValaDataType* _tmp0_;
4207 	ValaDataType* _tmp1_;
4208 	ValaInitializerList* initializer_list = NULL;
4209 	ValaExpression* _tmp2_;
4210 	ValaExpression* _tmp3_;
4211 	gboolean _tmp4_ = FALSE;
4212 	ValaArrayType* _tmp5_;
4213 	ValaArrayList* lengths = NULL;
4214 	GEqualFunc _tmp11_;
4215 	ValaArrayList* _tmp12_;
4216 	gint* sizes = NULL;
4217 	ValaArrayType* _tmp13_;
4218 	gint _tmp14_;
4219 	gint _tmp15_;
4220 	gint* _tmp16_;
4221 	gint sizes_length1;
4222 	gint _sizes_size_;
4223 	ValaInitializerList* _tmp17_;
4224 	gint* _tmp18_;
4225 	gint _tmp18__length1;
4226 	ValaArrayList* _tmp31_;
4227 	ValaCCodeDeclaratorSuffix* _tmp32_;
4228 	ValaCCodeDeclaratorSuffix* result = NULL;
4229 	g_return_val_if_fail (self != NULL, NULL);
4230 	g_return_val_if_fail (c != NULL, NULL);
4231 	_tmp0_ = vala_constant_get_type_reference (c);
4232 	_tmp1_ = _tmp0_;
4233 	array = G_TYPE_CHECK_INSTANCE_TYPE (_tmp1_, VALA_TYPE_ARRAY_TYPE) ? ((ValaArrayType*) _tmp1_) : NULL;
4234 	_tmp2_ = vala_constant_get_value (c);
4235 	_tmp3_ = _tmp2_;
4236 	initializer_list = G_TYPE_CHECK_INSTANCE_TYPE (_tmp3_, VALA_TYPE_INITIALIZER_LIST) ? ((ValaInitializerList*) _tmp3_) : NULL;
4237 	_tmp5_ = array;
4238 	if (_tmp5_ == NULL) {
4239 		_tmp4_ = TRUE;
4240 	} else {
4241 		ValaInitializerList* _tmp6_;
4242 		_tmp6_ = initializer_list;
4243 		_tmp4_ = _tmp6_ == NULL;
4244 	}
4245 	if (_tmp4_) {
4246 		ValaDataType* _tmp7_;
4247 		ValaDataType* _tmp8_;
4248 		ValaDataType* _tmp9_;
4249 		_tmp7_ = vala_constant_get_type_reference (c);
4250 		_tmp8_ = _tmp7_;
4251 		_tmp9_ = self->string_type;
4252 		if (vala_data_type_compatible (_tmp8_, _tmp9_)) {
4253 			ValaCCodeDeclaratorSuffix* _tmp10_;
4254 			_tmp10_ = vala_ccode_declarator_suffix_new_with_array (NULL);
4255 			result = _tmp10_;
4256 			return result;
4257 		}
4258 		result = NULL;
4259 		return result;
4260 	}
4261 	_tmp11_ = g_direct_equal;
4262 	_tmp12_ = vala_array_list_new (VALA_TYPE_CCODE_EXPRESSION, (GBoxedCopyFunc) vala_ccode_node_ref, (GDestroyNotify) vala_ccode_node_unref, _tmp11_);
4263 	lengths = _tmp12_;
4264 	_tmp13_ = array;
4265 	_tmp14_ = vala_array_type_get_rank (_tmp13_);
4266 	_tmp15_ = _tmp14_;
4267 	_tmp16_ = g_new0 (gint, _tmp15_);
4268 	sizes = _tmp16_;
4269 	sizes_length1 = _tmp15_;
4270 	_sizes_size_ = sizes_length1;
4271 	_tmp17_ = initializer_list;
4272 	_tmp18_ = sizes;
4273 	_tmp18__length1 = sizes_length1;
4274 	vala_ccode_base_module_constant_array_ranks_sizes (_tmp17_, _tmp18_, (gint) _tmp18__length1, 0);
4275 	{
4276 		gint i = 0;
4277 		i = 0;
4278 		{
4279 			gboolean _tmp19_ = FALSE;
4280 			_tmp19_ = TRUE;
4281 			while (TRUE) {
4282 				ValaArrayType* _tmp21_;
4283 				gint _tmp22_;
4284 				gint _tmp23_;
4285 				ValaArrayList* _tmp24_;
4286 				gint* _tmp25_;
4287 				gint _tmp25__length1;
4288 				gint _tmp26_;
4289 				gchar* _tmp27_;
4290 				gchar* _tmp28_;
4291 				ValaCCodeConstant* _tmp29_;
4292 				ValaCCodeConstant* _tmp30_;
4293 				if (!_tmp19_) {
4294 					gint _tmp20_;
4295 					_tmp20_ = i;
4296 					i = _tmp20_ + 1;
4297 				}
4298 				_tmp19_ = FALSE;
4299 				_tmp21_ = array;
4300 				_tmp22_ = vala_array_type_get_rank (_tmp21_);
4301 				_tmp23_ = _tmp22_;
4302 				if (!(i < _tmp23_)) {
4303 					break;
4304 				}
4305 				_tmp24_ = lengths;
4306 				_tmp25_ = sizes;
4307 				_tmp25__length1 = sizes_length1;
4308 				_tmp26_ = _tmp25_[i];
4309 				_tmp27_ = g_strdup_printf ("%d", _tmp26_);
4310 				_tmp28_ = _tmp27_;
4311 				_tmp29_ = vala_ccode_constant_new (_tmp28_);
4312 				_tmp30_ = _tmp29_;
4313 				vala_collection_add ((ValaCollection*) _tmp24_, (ValaCCodeExpression*) _tmp30_);
4314 				_vala_ccode_node_unref0 (_tmp30_);
4315 				_g_free0 (_tmp28_);
4316 			}
4317 		}
4318 	}
4319 	_tmp31_ = lengths;
4320 	_tmp32_ = vala_ccode_declarator_suffix_new_with_multi_array ((ValaList*) _tmp31_);
4321 	result = _tmp32_;
4322 	sizes = (g_free (sizes), NULL);
4323 	_vala_iterable_unref0 (lengths);
4324 	return result;
4325 }
4326 
4327 void
vala_ccode_base_module_generate_constant_declaration(ValaCCodeBaseModule * self,ValaConstant * c,ValaCCodeFile * decl_space,gboolean definition)4328 vala_ccode_base_module_generate_constant_declaration (ValaCCodeBaseModule* self,
4329                                                       ValaConstant* c,
4330                                                       ValaCCodeFile* decl_space,
4331                                                       gboolean definition)
4332 {
4333 	ValaSymbol* _tmp0_;
4334 	ValaSymbol* _tmp1_;
4335 	gchar* _tmp2_;
4336 	gchar* _tmp3_;
4337 	gboolean _tmp4_;
4338 	gboolean _tmp5_ = FALSE;
4339 	gboolean _tmp6_;
4340 	gboolean _tmp7_;
4341 	g_return_if_fail (self != NULL);
4342 	g_return_if_fail (c != NULL);
4343 	g_return_if_fail (decl_space != NULL);
4344 	_tmp0_ = vala_symbol_get_parent_symbol ((ValaSymbol*) c);
4345 	_tmp1_ = _tmp0_;
4346 	if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp1_, VALA_TYPE_BLOCK)) {
4347 		return;
4348 	}
4349 	_tmp2_ = vala_get_ccode_name ((ValaCodeNode*) c);
4350 	_tmp3_ = _tmp2_;
4351 	_tmp4_ = vala_ccode_base_module_add_symbol_declaration (self, decl_space, (ValaSymbol*) c, _tmp3_);
4352 	_g_free0 (_tmp3_);
4353 	if (_tmp4_) {
4354 		return;
4355 	}
4356 	_tmp6_ = vala_symbol_get_external ((ValaSymbol*) c);
4357 	_tmp7_ = _tmp6_;
4358 	if (!_tmp7_) {
4359 		ValaExpression* _tmp8_;
4360 		ValaExpression* _tmp9_;
4361 		_tmp8_ = vala_constant_get_value (c);
4362 		_tmp9_ = _tmp8_;
4363 		_tmp5_ = _tmp9_ != NULL;
4364 	} else {
4365 		_tmp5_ = FALSE;
4366 	}
4367 	if (_tmp5_) {
4368 		ValaDataType* _tmp10_;
4369 		ValaDataType* _tmp11_;
4370 		ValaExpression* _tmp12_;
4371 		ValaExpression* _tmp13_;
4372 		ValaInitializerList* initializer_list = NULL;
4373 		ValaExpression* _tmp14_;
4374 		ValaExpression* _tmp15_;
4375 		ValaInitializerList* _tmp16_;
4376 		ValaInitializerList* _tmp17_;
4377 		_tmp10_ = vala_constant_get_type_reference (c);
4378 		_tmp11_ = _tmp10_;
4379 		vala_ccode_base_module_generate_type_declaration (self, _tmp11_, decl_space);
4380 		_tmp12_ = vala_constant_get_value (c);
4381 		_tmp13_ = _tmp12_;
4382 		vala_code_node_emit ((ValaCodeNode*) _tmp13_, (ValaCodeGenerator*) self);
4383 		_tmp14_ = vala_constant_get_value (c);
4384 		_tmp15_ = _tmp14_;
4385 		_tmp16_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (_tmp15_, VALA_TYPE_INITIALIZER_LIST) ? ((ValaInitializerList*) _tmp15_) : NULL);
4386 		initializer_list = _tmp16_;
4387 		_tmp17_ = initializer_list;
4388 		if (_tmp17_ != NULL) {
4389 			ValaCCodeDeclaration* _cdecl_ = NULL;
4390 			ValaDataType* _tmp18_;
4391 			ValaDataType* _tmp19_;
4392 			gchar* _tmp20_;
4393 			gchar* _tmp21_;
4394 			ValaCCodeDeclaration* _tmp22_;
4395 			ValaCCodeDeclaration* _tmp23_;
4396 			ValaCCodeExpression* cinitializer = NULL;
4397 			ValaExpression* _tmp24_;
4398 			ValaExpression* _tmp25_;
4399 			ValaCCodeExpression* _tmp26_;
4400 			ValaCCodeExpression* _tmp27_;
4401 			ValaCCodeDeclaration* _tmp28_;
4402 			gchar* _tmp29_;
4403 			gchar* _tmp30_;
4404 			ValaCCodeExpression* _tmp31_;
4405 			ValaCCodeDeclaratorSuffix* _tmp32_;
4406 			ValaCCodeDeclaratorSuffix* _tmp33_;
4407 			ValaCCodeVariableDeclarator* _tmp34_;
4408 			ValaCCodeVariableDeclarator* _tmp35_;
4409 			ValaCCodeDeclaration* _tmp38_;
4410 			_tmp18_ = vala_constant_get_type_reference (c);
4411 			_tmp19_ = _tmp18_;
4412 			_tmp20_ = vala_get_ccode_const_name ((ValaCodeNode*) _tmp19_);
4413 			_tmp21_ = _tmp20_;
4414 			_tmp22_ = vala_ccode_declaration_new (_tmp21_);
4415 			_tmp23_ = _tmp22_;
4416 			_g_free0 (_tmp21_);
4417 			_cdecl_ = _tmp23_;
4418 			_tmp24_ = vala_constant_get_value (c);
4419 			_tmp25_ = _tmp24_;
4420 			_tmp26_ = vala_get_cvalue (_tmp25_);
4421 			_tmp27_ = _vala_ccode_node_ref0 (_tmp26_);
4422 			cinitializer = _tmp27_;
4423 			if (!definition) {
4424 				_vala_ccode_node_unref0 (cinitializer);
4425 				cinitializer = NULL;
4426 			}
4427 			_tmp28_ = _cdecl_;
4428 			_tmp29_ = vala_get_ccode_name ((ValaCodeNode*) c);
4429 			_tmp30_ = _tmp29_;
4430 			_tmp31_ = cinitializer;
4431 			_tmp32_ = vala_ccode_base_module_get_constant_declarator_suffix (self, c);
4432 			_tmp33_ = _tmp32_;
4433 			_tmp34_ = vala_ccode_variable_declarator_new (_tmp30_, _tmp31_, _tmp33_);
4434 			_tmp35_ = _tmp34_;
4435 			vala_ccode_declaration_add_declarator (_tmp28_, (ValaCCodeDeclarator*) _tmp35_);
4436 			_vala_ccode_node_unref0 (_tmp35_);
4437 			_vala_ccode_declarator_suffix_unref0 (_tmp33_);
4438 			_g_free0 (_tmp30_);
4439 			if (vala_symbol_is_private_symbol ((ValaSymbol*) c)) {
4440 				ValaCCodeDeclaration* _tmp36_;
4441 				_tmp36_ = _cdecl_;
4442 				vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp36_, VALA_CCODE_MODIFIERS_STATIC);
4443 			} else {
4444 				ValaCCodeDeclaration* _tmp37_;
4445 				_tmp37_ = _cdecl_;
4446 				vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp37_, VALA_CCODE_MODIFIERS_EXTERN);
4447 			}
4448 			_tmp38_ = _cdecl_;
4449 			vala_ccode_file_add_constant_declaration (decl_space, (ValaCCodeNode*) _tmp38_);
4450 			_vala_ccode_node_unref0 (cinitializer);
4451 			_vala_ccode_node_unref0 (_cdecl_);
4452 		} else {
4453 			gboolean _tmp39_ = FALSE;
4454 			ValaExpression* _tmp40_;
4455 			ValaExpression* _tmp41_;
4456 			ValaCCodeMacroReplacement* cdefine = NULL;
4457 			gchar* _tmp59_;
4458 			gchar* _tmp60_;
4459 			ValaExpression* _tmp61_;
4460 			ValaExpression* _tmp62_;
4461 			ValaCCodeExpression* _tmp63_;
4462 			ValaCCodeMacroReplacement* _tmp64_;
4463 			ValaCCodeMacroReplacement* _tmp65_;
4464 			ValaCCodeMacroReplacement* _tmp66_;
4465 			_tmp40_ = vala_constant_get_value (c);
4466 			_tmp41_ = _tmp40_;
4467 			if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp41_, VALA_TYPE_STRING_LITERAL)) {
4468 				ValaExpression* _tmp42_;
4469 				ValaExpression* _tmp43_;
4470 				gboolean _tmp44_;
4471 				gboolean _tmp45_;
4472 				_tmp42_ = vala_constant_get_value (c);
4473 				_tmp43_ = _tmp42_;
4474 				_tmp44_ = vala_string_literal_get_translate (G_TYPE_CHECK_INSTANCE_CAST (_tmp43_, VALA_TYPE_STRING_LITERAL, ValaStringLiteral));
4475 				_tmp45_ = _tmp44_;
4476 				_tmp39_ = _tmp45_;
4477 			} else {
4478 				_tmp39_ = FALSE;
4479 			}
4480 			if (_tmp39_) {
4481 				ValaMethod* m = NULL;
4482 				ValaSymbol* _tmp46_;
4483 				ValaScope* _tmp47_;
4484 				ValaScope* _tmp48_;
4485 				ValaSymbol* _tmp49_;
4486 				ValaSymbol* _tmp50_;
4487 				ValaScope* _tmp51_;
4488 				ValaScope* _tmp52_;
4489 				ValaSymbol* _tmp53_;
4490 				ValaMethod* _tmp54_;
4491 				ValaMethod* _tmp55_;
4492 				ValaMethod* _tmp56_;
4493 				gchar* _tmp57_;
4494 				gchar* _tmp58_;
4495 				_tmp46_ = self->root_symbol;
4496 				_tmp47_ = vala_symbol_get_scope (_tmp46_);
4497 				_tmp48_ = _tmp47_;
4498 				_tmp49_ = vala_scope_lookup (_tmp48_, "GLib");
4499 				_tmp50_ = _tmp49_;
4500 				_tmp51_ = vala_symbol_get_scope (_tmp50_);
4501 				_tmp52_ = _tmp51_;
4502 				_tmp53_ = vala_scope_lookup (_tmp52_, "_");
4503 				_tmp54_ = G_TYPE_CHECK_INSTANCE_CAST (_tmp53_, VALA_TYPE_METHOD, ValaMethod);
4504 				_vala_code_node_unref0 (_tmp50_);
4505 				m = _tmp54_;
4506 				_tmp55_ = m;
4507 				_tmp56_ = m;
4508 				_tmp57_ = vala_get_ccode_name ((ValaCodeNode*) _tmp56_);
4509 				_tmp58_ = _tmp57_;
4510 				vala_ccode_base_module_add_symbol_declaration (self, decl_space, (ValaSymbol*) _tmp55_, _tmp58_);
4511 				_g_free0 (_tmp58_);
4512 				_vala_code_node_unref0 (m);
4513 			}
4514 			_tmp59_ = vala_get_ccode_name ((ValaCodeNode*) c);
4515 			_tmp60_ = _tmp59_;
4516 			_tmp61_ = vala_constant_get_value (c);
4517 			_tmp62_ = _tmp61_;
4518 			_tmp63_ = vala_get_cvalue (_tmp62_);
4519 			_tmp64_ = vala_ccode_macro_replacement_new_with_expression (_tmp60_, _tmp63_);
4520 			_tmp65_ = _tmp64_;
4521 			_g_free0 (_tmp60_);
4522 			cdefine = _tmp65_;
4523 			_tmp66_ = cdefine;
4524 			vala_ccode_file_add_type_member_declaration (decl_space, (ValaCCodeNode*) _tmp66_);
4525 			_vala_ccode_node_unref0 (cdefine);
4526 		}
4527 		_vala_code_node_unref0 (initializer_list);
4528 	}
4529 }
4530 
4531 static void
vala_ccode_base_module_real_visit_constant(ValaCodeVisitor * base,ValaConstant * c)4532 vala_ccode_base_module_real_visit_constant (ValaCodeVisitor* base,
4533                                             ValaConstant* c)
4534 {
4535 	ValaCCodeBaseModule * self;
4536 	ValaSourceReference* _tmp0_;
4537 	ValaSourceReference* _tmp1_;
4538 	ValaSymbol* _tmp2_;
4539 	ValaSymbol* _tmp3_;
4540 	self = (ValaCCodeBaseModule*) base;
4541 	g_return_if_fail (c != NULL);
4542 	_tmp0_ = vala_code_node_get_source_reference ((ValaCodeNode*) c);
4543 	_tmp1_ = _tmp0_;
4544 	vala_ccode_base_module_push_line (self, _tmp1_);
4545 	_tmp2_ = vala_symbol_get_parent_symbol ((ValaSymbol*) c);
4546 	_tmp3_ = _tmp2_;
4547 	if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp3_, VALA_TYPE_BLOCK)) {
4548 		ValaDataType* _tmp4_;
4549 		ValaDataType* _tmp5_;
4550 		ValaCCodeFile* _tmp6_;
4551 		ValaExpression* _tmp7_;
4552 		ValaExpression* _tmp8_;
4553 		gchar* type_name = NULL;
4554 		ValaDataType* _tmp9_;
4555 		ValaDataType* _tmp10_;
4556 		ValaDataType* _tmp11_;
4557 		ValaCCodeExpression* cinitializer = NULL;
4558 		ValaExpression* _tmp16_;
4559 		ValaExpression* _tmp17_;
4560 		ValaCCodeExpression* _tmp18_;
4561 		ValaCCodeExpression* _tmp19_;
4562 		ValaCCodeFunction* _tmp20_;
4563 		ValaCCodeFunction* _tmp21_;
4564 		const gchar* _tmp22_;
4565 		gchar* _tmp23_;
4566 		gchar* _tmp24_;
4567 		ValaCCodeExpression* _tmp25_;
4568 		ValaCCodeDeclaratorSuffix* _tmp26_;
4569 		ValaCCodeDeclaratorSuffix* _tmp27_;
4570 		ValaCCodeVariableDeclarator* _tmp28_;
4571 		ValaCCodeVariableDeclarator* _tmp29_;
4572 		_tmp4_ = vala_constant_get_type_reference (c);
4573 		_tmp5_ = _tmp4_;
4574 		_tmp6_ = self->cfile;
4575 		vala_ccode_base_module_generate_type_declaration (self, _tmp5_, _tmp6_);
4576 		_tmp7_ = vala_constant_get_value (c);
4577 		_tmp8_ = _tmp7_;
4578 		vala_code_node_emit ((ValaCodeNode*) _tmp8_, (ValaCodeGenerator*) self);
4579 		_tmp9_ = vala_constant_get_type_reference (c);
4580 		_tmp10_ = _tmp9_;
4581 		_tmp11_ = self->string_type;
4582 		if (vala_data_type_compatible (_tmp10_, _tmp11_)) {
4583 			gchar* _tmp12_;
4584 			_tmp12_ = g_strdup ("const char");
4585 			_g_free0 (type_name);
4586 			type_name = _tmp12_;
4587 		} else {
4588 			ValaDataType* _tmp13_;
4589 			ValaDataType* _tmp14_;
4590 			gchar* _tmp15_;
4591 			_tmp13_ = vala_constant_get_type_reference (c);
4592 			_tmp14_ = _tmp13_;
4593 			_tmp15_ = vala_get_ccode_const_name ((ValaCodeNode*) _tmp14_);
4594 			_g_free0 (type_name);
4595 			type_name = _tmp15_;
4596 		}
4597 		_tmp16_ = vala_constant_get_value (c);
4598 		_tmp17_ = _tmp16_;
4599 		_tmp18_ = vala_get_cvalue (_tmp17_);
4600 		_tmp19_ = _vala_ccode_node_ref0 (_tmp18_);
4601 		cinitializer = _tmp19_;
4602 		_tmp20_ = vala_ccode_base_module_get_ccode (self);
4603 		_tmp21_ = _tmp20_;
4604 		_tmp22_ = type_name;
4605 		_tmp23_ = vala_get_ccode_name ((ValaCodeNode*) c);
4606 		_tmp24_ = _tmp23_;
4607 		_tmp25_ = cinitializer;
4608 		_tmp26_ = vala_ccode_base_module_get_constant_declarator_suffix (self, c);
4609 		_tmp27_ = _tmp26_;
4610 		_tmp28_ = vala_ccode_variable_declarator_new (_tmp24_, _tmp25_, _tmp27_);
4611 		_tmp29_ = _tmp28_;
4612 		vala_ccode_function_add_declaration (_tmp21_, _tmp22_, (ValaCCodeDeclarator*) _tmp29_, VALA_CCODE_MODIFIERS_STATIC);
4613 		_vala_ccode_node_unref0 (_tmp29_);
4614 		_vala_ccode_declarator_suffix_unref0 (_tmp27_);
4615 		_g_free0 (_tmp24_);
4616 		_vala_ccode_node_unref0 (cinitializer);
4617 		_g_free0 (type_name);
4618 	} else {
4619 		ValaCCodeFile* _tmp30_;
4620 		_tmp30_ = self->cfile;
4621 		vala_ccode_base_module_generate_constant_declaration (self, c, _tmp30_, TRUE);
4622 		if (!vala_symbol_is_internal_symbol ((ValaSymbol*) c)) {
4623 			ValaCCodeFile* _tmp31_;
4624 			_tmp31_ = self->header_file;
4625 			vala_ccode_base_module_generate_constant_declaration (self, c, _tmp31_, FALSE);
4626 		}
4627 		if (!vala_symbol_is_private_symbol ((ValaSymbol*) c)) {
4628 			ValaCCodeFile* _tmp32_;
4629 			_tmp32_ = self->internal_header_file;
4630 			vala_ccode_base_module_generate_constant_declaration (self, c, _tmp32_, FALSE);
4631 		}
4632 	}
4633 	vala_ccode_base_module_pop_line (self);
4634 }
4635 
4636 void
vala_ccode_base_module_append_field(ValaCCodeBaseModule * self,ValaCCodeStruct * ccode_struct,ValaField * f,ValaCCodeFile * decl_space)4637 vala_ccode_base_module_append_field (ValaCCodeBaseModule* self,
4638                                      ValaCCodeStruct* ccode_struct,
4639                                      ValaField* f,
4640                                      ValaCCodeFile* decl_space)
4641 {
4642 	ValaDataType* _tmp0_;
4643 	ValaDataType* _tmp1_;
4644 	ValaCCodeModifiers _tmp2_ = 0U;
4645 	gboolean _tmp3_;
4646 	gboolean _tmp4_;
4647 	ValaCCodeModifiers _tmp5_ = 0U;
4648 	ValaVersionAttribute* _tmp6_;
4649 	ValaVersionAttribute* _tmp7_;
4650 	gboolean _tmp8_;
4651 	gboolean _tmp9_;
4652 	ValaCCodeModifiers modifiers = 0U;
4653 	ValaDataType* _tmp10_;
4654 	ValaDataType* _tmp11_;
4655 	gchar* _tmp12_;
4656 	gchar* _tmp13_;
4657 	gchar* _tmp14_;
4658 	gchar* _tmp15_;
4659 	ValaCCodeModifiers _tmp16_;
4660 	ValaDataType* _tmp17_;
4661 	ValaDataType* _tmp18_;
4662 	ValaCCodeDeclaratorSuffix* _tmp19_;
4663 	ValaCCodeDeclaratorSuffix* _tmp20_;
4664 	gboolean _tmp21_ = FALSE;
4665 	ValaDataType* _tmp22_;
4666 	ValaDataType* _tmp23_;
4667 	g_return_if_fail (self != NULL);
4668 	g_return_if_fail (ccode_struct != NULL);
4669 	g_return_if_fail (f != NULL);
4670 	g_return_if_fail (decl_space != NULL);
4671 	_tmp0_ = vala_variable_get_variable_type ((ValaVariable*) f);
4672 	_tmp1_ = _tmp0_;
4673 	vala_ccode_base_module_generate_type_declaration (self, _tmp1_, decl_space);
4674 	_tmp3_ = vala_field_get_is_volatile (f);
4675 	_tmp4_ = _tmp3_;
4676 	if (_tmp4_) {
4677 		_tmp2_ = VALA_CCODE_MODIFIERS_VOLATILE;
4678 	} else {
4679 		_tmp2_ = 0;
4680 	}
4681 	_tmp6_ = vala_symbol_get_version ((ValaSymbol*) f);
4682 	_tmp7_ = _tmp6_;
4683 	_tmp8_ = vala_version_attribute_get_deprecated (_tmp7_);
4684 	_tmp9_ = _tmp8_;
4685 	if (_tmp9_) {
4686 		_tmp5_ = VALA_CCODE_MODIFIERS_DEPRECATED;
4687 	} else {
4688 		_tmp5_ = 0;
4689 	}
4690 	modifiers = _tmp2_ | _tmp5_;
4691 	_tmp10_ = vala_variable_get_variable_type ((ValaVariable*) f);
4692 	_tmp11_ = _tmp10_;
4693 	_tmp12_ = vala_get_ccode_name ((ValaCodeNode*) _tmp11_);
4694 	_tmp13_ = _tmp12_;
4695 	_tmp14_ = vala_get_ccode_name ((ValaCodeNode*) f);
4696 	_tmp15_ = _tmp14_;
4697 	_tmp16_ = modifiers;
4698 	_tmp17_ = vala_variable_get_variable_type ((ValaVariable*) f);
4699 	_tmp18_ = _tmp17_;
4700 	_tmp19_ = vala_ccode_base_module_get_ccode_declarator_suffix (self, _tmp18_);
4701 	_tmp20_ = _tmp19_;
4702 	vala_ccode_struct_add_field (ccode_struct, _tmp13_, _tmp15_, _tmp16_, _tmp20_);
4703 	_vala_ccode_declarator_suffix_unref0 (_tmp20_);
4704 	_g_free0 (_tmp15_);
4705 	_g_free0 (_tmp13_);
4706 	_tmp22_ = vala_variable_get_variable_type ((ValaVariable*) f);
4707 	_tmp23_ = _tmp22_;
4708 	if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp23_, VALA_TYPE_ARRAY_TYPE)) {
4709 		_tmp21_ = vala_get_ccode_array_length ((ValaCodeNode*) f);
4710 	} else {
4711 		_tmp21_ = FALSE;
4712 	}
4713 	if (_tmp21_) {
4714 		ValaArrayType* array_type = NULL;
4715 		ValaDataType* _tmp24_;
4716 		ValaDataType* _tmp25_;
4717 		ValaArrayType* _tmp26_;
4718 		ValaArrayType* _tmp27_;
4719 		gboolean _tmp28_;
4720 		gboolean _tmp29_;
4721 		_tmp24_ = vala_variable_get_variable_type ((ValaVariable*) f);
4722 		_tmp25_ = _tmp24_;
4723 		_tmp26_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp25_, VALA_TYPE_ARRAY_TYPE, ValaArrayType));
4724 		array_type = _tmp26_;
4725 		_tmp27_ = array_type;
4726 		_tmp28_ = vala_array_type_get_fixed_length (_tmp27_);
4727 		_tmp29_ = _tmp28_;
4728 		if (!_tmp29_) {
4729 			gchar* length_ctype = NULL;
4730 			gchar* _tmp30_;
4731 			gboolean _tmp39_ = FALSE;
4732 			ValaArrayType* _tmp40_;
4733 			gint _tmp41_;
4734 			gint _tmp42_;
4735 			_tmp30_ = vala_get_ccode_array_length_type ((ValaCodeNode*) f);
4736 			length_ctype = _tmp30_;
4737 			{
4738 				gint dim = 0;
4739 				dim = 1;
4740 				{
4741 					gboolean _tmp31_ = FALSE;
4742 					_tmp31_ = TRUE;
4743 					while (TRUE) {
4744 						ValaArrayType* _tmp33_;
4745 						gint _tmp34_;
4746 						gint _tmp35_;
4747 						gchar* length_cname = NULL;
4748 						gchar* _tmp36_;
4749 						const gchar* _tmp37_;
4750 						const gchar* _tmp38_;
4751 						if (!_tmp31_) {
4752 							gint _tmp32_;
4753 							_tmp32_ = dim;
4754 							dim = _tmp32_ + 1;
4755 						}
4756 						_tmp31_ = FALSE;
4757 						_tmp33_ = array_type;
4758 						_tmp34_ = vala_array_type_get_rank (_tmp33_);
4759 						_tmp35_ = _tmp34_;
4760 						if (!(dim <= _tmp35_)) {
4761 							break;
4762 						}
4763 						_tmp36_ = vala_ccode_base_module_get_variable_array_length_cname (self, (ValaVariable*) f, dim);
4764 						length_cname = _tmp36_;
4765 						_tmp37_ = length_ctype;
4766 						_tmp38_ = length_cname;
4767 						vala_ccode_struct_add_field (ccode_struct, _tmp37_, _tmp38_, 0, NULL);
4768 						_g_free0 (length_cname);
4769 					}
4770 				}
4771 			}
4772 			_tmp40_ = array_type;
4773 			_tmp41_ = vala_array_type_get_rank (_tmp40_);
4774 			_tmp42_ = _tmp41_;
4775 			if (_tmp42_ == 1) {
4776 				_tmp39_ = vala_symbol_is_internal_symbol ((ValaSymbol*) f);
4777 			} else {
4778 				_tmp39_ = FALSE;
4779 			}
4780 			if (_tmp39_) {
4781 				const gchar* _tmp43_;
4782 				gchar* _tmp44_;
4783 				gchar* _tmp45_;
4784 				gchar* _tmp46_;
4785 				gchar* _tmp47_;
4786 				_tmp43_ = length_ctype;
4787 				_tmp44_ = vala_get_ccode_name ((ValaCodeNode*) f);
4788 				_tmp45_ = _tmp44_;
4789 				_tmp46_ = vala_ccode_base_module_get_array_size_cname (self, _tmp45_);
4790 				_tmp47_ = _tmp46_;
4791 				vala_ccode_struct_add_field (ccode_struct, _tmp43_, _tmp47_, 0, NULL);
4792 				_g_free0 (_tmp47_);
4793 				_g_free0 (_tmp45_);
4794 			}
4795 			_g_free0 (length_ctype);
4796 		}
4797 		_vala_code_node_unref0 (array_type);
4798 	} else {
4799 		if (vala_get_ccode_delegate_target ((ValaCodeNode*) f)) {
4800 			ValaDelegateType* delegate_type = NULL;
4801 			ValaDataType* _tmp48_;
4802 			ValaDataType* _tmp49_;
4803 			ValaDelegateType* _tmp50_;
4804 			ValaDelegateType* _tmp51_;
4805 			ValaDelegate* _tmp52_;
4806 			ValaDelegate* _tmp53_;
4807 			gboolean _tmp54_;
4808 			gboolean _tmp55_;
4809 			_tmp48_ = vala_variable_get_variable_type ((ValaVariable*) f);
4810 			_tmp49_ = _tmp48_;
4811 			_tmp50_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp49_, VALA_TYPE_DELEGATE_TYPE, ValaDelegateType));
4812 			delegate_type = _tmp50_;
4813 			_tmp51_ = delegate_type;
4814 			_tmp52_ = vala_delegate_type_get_delegate_symbol (_tmp51_);
4815 			_tmp53_ = _tmp52_;
4816 			_tmp54_ = vala_delegate_get_has_target (_tmp53_);
4817 			_tmp55_ = _tmp54_;
4818 			if (_tmp55_) {
4819 				ValaDataType* _tmp56_;
4820 				gchar* _tmp57_;
4821 				gchar* _tmp58_;
4822 				gchar* _tmp59_;
4823 				gchar* _tmp60_;
4824 				ValaDelegateType* _tmp61_;
4825 				_tmp56_ = self->delegate_target_type;
4826 				_tmp57_ = vala_get_ccode_name ((ValaCodeNode*) _tmp56_);
4827 				_tmp58_ = _tmp57_;
4828 				_tmp59_ = vala_get_ccode_delegate_target_name ((ValaVariable*) f);
4829 				_tmp60_ = _tmp59_;
4830 				vala_ccode_struct_add_field (ccode_struct, _tmp58_, _tmp60_, 0, NULL);
4831 				_g_free0 (_tmp60_);
4832 				_g_free0 (_tmp58_);
4833 				_tmp61_ = delegate_type;
4834 				if (vala_data_type_is_disposable ((ValaDataType*) _tmp61_)) {
4835 					ValaDelegateType* _tmp62_;
4836 					gchar* _tmp63_;
4837 					gchar* _tmp64_;
4838 					gchar* _tmp65_;
4839 					gchar* _tmp66_;
4840 					_tmp62_ = self->delegate_target_destroy_type;
4841 					_tmp63_ = vala_get_ccode_name ((ValaCodeNode*) _tmp62_);
4842 					_tmp64_ = _tmp63_;
4843 					_tmp65_ = vala_get_ccode_delegate_target_destroy_notify_name ((ValaVariable*) f);
4844 					_tmp66_ = _tmp65_;
4845 					vala_ccode_struct_add_field (ccode_struct, _tmp64_, _tmp66_, 0, NULL);
4846 					_g_free0 (_tmp66_);
4847 					_g_free0 (_tmp64_);
4848 				}
4849 			}
4850 			_vala_code_node_unref0 (delegate_type);
4851 		}
4852 	}
4853 }
4854 
4855 void
vala_ccode_base_module_generate_field_declaration(ValaCCodeBaseModule * self,ValaField * f,ValaCCodeFile * decl_space)4856 vala_ccode_base_module_generate_field_declaration (ValaCCodeBaseModule* self,
4857                                                    ValaField* f,
4858                                                    ValaCCodeFile* decl_space)
4859 {
4860 	gchar* _tmp0_;
4861 	gchar* _tmp1_;
4862 	gboolean _tmp2_;
4863 	ValaDataType* _tmp3_;
4864 	ValaDataType* _tmp4_;
4865 	ValaCCodeDeclaration* _cdecl_ = NULL;
4866 	ValaDataType* _tmp5_;
4867 	ValaDataType* _tmp6_;
4868 	gchar* _tmp7_;
4869 	gchar* _tmp8_;
4870 	ValaCCodeDeclaration* _tmp9_;
4871 	ValaCCodeDeclaration* _tmp10_;
4872 	ValaCCodeDeclaration* _tmp11_;
4873 	gchar* _tmp12_;
4874 	gchar* _tmp13_;
4875 	ValaDataType* _tmp14_;
4876 	ValaDataType* _tmp15_;
4877 	ValaCCodeDeclaratorSuffix* _tmp16_;
4878 	ValaCCodeDeclaratorSuffix* _tmp17_;
4879 	ValaCCodeVariableDeclarator* _tmp18_;
4880 	ValaCCodeVariableDeclarator* _tmp19_;
4881 	ValaVersionAttribute* _tmp22_;
4882 	ValaVersionAttribute* _tmp23_;
4883 	gboolean _tmp24_;
4884 	gboolean _tmp25_;
4885 	gboolean _tmp30_;
4886 	gboolean _tmp31_;
4887 	ValaCCodeDeclaration* _tmp36_;
4888 	gboolean _tmp37_;
4889 	gboolean _tmp38_;
4890 	gboolean _tmp63_ = FALSE;
4891 	ValaDataType* _tmp64_;
4892 	ValaDataType* _tmp65_;
4893 	g_return_if_fail (self != NULL);
4894 	g_return_if_fail (f != NULL);
4895 	g_return_if_fail (decl_space != NULL);
4896 	_tmp0_ = vala_get_ccode_name ((ValaCodeNode*) f);
4897 	_tmp1_ = _tmp0_;
4898 	_tmp2_ = vala_ccode_base_module_add_symbol_declaration (self, decl_space, (ValaSymbol*) f, _tmp1_);
4899 	_g_free0 (_tmp1_);
4900 	if (_tmp2_) {
4901 		return;
4902 	}
4903 	_tmp3_ = vala_variable_get_variable_type ((ValaVariable*) f);
4904 	_tmp4_ = _tmp3_;
4905 	vala_ccode_base_module_generate_type_declaration (self, _tmp4_, decl_space);
4906 	_tmp5_ = vala_variable_get_variable_type ((ValaVariable*) f);
4907 	_tmp6_ = _tmp5_;
4908 	_tmp7_ = vala_get_ccode_name ((ValaCodeNode*) _tmp6_);
4909 	_tmp8_ = _tmp7_;
4910 	_tmp9_ = vala_ccode_declaration_new (_tmp8_);
4911 	_tmp10_ = _tmp9_;
4912 	_g_free0 (_tmp8_);
4913 	_cdecl_ = _tmp10_;
4914 	_tmp11_ = _cdecl_;
4915 	_tmp12_ = vala_get_ccode_name ((ValaCodeNode*) f);
4916 	_tmp13_ = _tmp12_;
4917 	_tmp14_ = vala_variable_get_variable_type ((ValaVariable*) f);
4918 	_tmp15_ = _tmp14_;
4919 	_tmp16_ = vala_ccode_base_module_get_ccode_declarator_suffix (self, _tmp15_);
4920 	_tmp17_ = _tmp16_;
4921 	_tmp18_ = vala_ccode_variable_declarator_new (_tmp13_, NULL, _tmp17_);
4922 	_tmp19_ = _tmp18_;
4923 	vala_ccode_declaration_add_declarator (_tmp11_, (ValaCCodeDeclarator*) _tmp19_);
4924 	_vala_ccode_node_unref0 (_tmp19_);
4925 	_vala_ccode_declarator_suffix_unref0 (_tmp17_);
4926 	_g_free0 (_tmp13_);
4927 	if (vala_symbol_is_private_symbol ((ValaSymbol*) f)) {
4928 		ValaCCodeDeclaration* _tmp20_;
4929 		_tmp20_ = _cdecl_;
4930 		vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp20_, VALA_CCODE_MODIFIERS_STATIC);
4931 	} else {
4932 		ValaCCodeDeclaration* _tmp21_;
4933 		_tmp21_ = _cdecl_;
4934 		vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp21_, VALA_CCODE_MODIFIERS_EXTERN);
4935 	}
4936 	_tmp22_ = vala_symbol_get_version ((ValaSymbol*) f);
4937 	_tmp23_ = _tmp22_;
4938 	_tmp24_ = vala_version_attribute_get_deprecated (_tmp23_);
4939 	_tmp25_ = _tmp24_;
4940 	if (_tmp25_) {
4941 		ValaCCodeDeclaration* _tmp26_;
4942 		ValaCCodeDeclaration* _tmp27_;
4943 		ValaCCodeModifiers _tmp28_;
4944 		ValaCCodeModifiers _tmp29_;
4945 		_tmp26_ = _cdecl_;
4946 		_tmp27_ = _cdecl_;
4947 		_tmp28_ = vala_ccode_node_get_modifiers ((ValaCCodeNode*) _tmp27_);
4948 		_tmp29_ = _tmp28_;
4949 		vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp27_, _tmp29_ | VALA_CCODE_MODIFIERS_DEPRECATED);
4950 	}
4951 	_tmp30_ = vala_field_get_is_volatile (f);
4952 	_tmp31_ = _tmp30_;
4953 	if (_tmp31_) {
4954 		ValaCCodeDeclaration* _tmp32_;
4955 		ValaCCodeDeclaration* _tmp33_;
4956 		ValaCCodeModifiers _tmp34_;
4957 		ValaCCodeModifiers _tmp35_;
4958 		_tmp32_ = _cdecl_;
4959 		_tmp33_ = _cdecl_;
4960 		_tmp34_ = vala_ccode_node_get_modifiers ((ValaCCodeNode*) _tmp33_);
4961 		_tmp35_ = _tmp34_;
4962 		vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp33_, _tmp35_ | VALA_CCODE_MODIFIERS_VOLATILE);
4963 	}
4964 	_tmp36_ = _cdecl_;
4965 	vala_ccode_file_add_type_member_declaration (decl_space, (ValaCCodeNode*) _tmp36_);
4966 	_tmp37_ = vala_lockable_get_lock_used ((ValaLockable*) f);
4967 	_tmp38_ = _tmp37_;
4968 	if (_tmp38_) {
4969 		ValaCCodeDeclaration* flock = NULL;
4970 		ValaStruct* _tmp39_;
4971 		gchar* _tmp40_;
4972 		gchar* _tmp41_;
4973 		ValaCCodeDeclaration* _tmp42_;
4974 		ValaCCodeDeclaration* _tmp43_;
4975 		ValaCCodeVariableDeclarator* flock_decl = NULL;
4976 		ValaSymbol* _tmp44_;
4977 		ValaSymbol* _tmp45_;
4978 		gchar* _tmp46_;
4979 		gchar* _tmp47_;
4980 		gchar* _tmp48_;
4981 		gchar* _tmp49_;
4982 		gchar* _tmp50_;
4983 		gchar* _tmp51_;
4984 		gchar* _tmp52_;
4985 		gchar* _tmp53_;
4986 		ValaCCodeConstant* _tmp54_;
4987 		ValaCCodeConstant* _tmp55_;
4988 		ValaCCodeVariableDeclarator* _tmp56_;
4989 		ValaCCodeVariableDeclarator* _tmp57_;
4990 		ValaCCodeDeclaration* _tmp58_;
4991 		ValaCCodeVariableDeclarator* _tmp59_;
4992 		ValaCCodeDeclaration* _tmp62_;
4993 		_tmp39_ = self->mutex_type;
4994 		_tmp40_ = vala_get_ccode_name ((ValaCodeNode*) _tmp39_);
4995 		_tmp41_ = _tmp40_;
4996 		_tmp42_ = vala_ccode_declaration_new (_tmp41_);
4997 		_tmp43_ = _tmp42_;
4998 		_g_free0 (_tmp41_);
4999 		flock = _tmp43_;
5000 		_tmp44_ = vala_symbol_get_parent_symbol ((ValaSymbol*) f);
5001 		_tmp45_ = _tmp44_;
5002 		_tmp46_ = vala_get_ccode_lower_case_name ((ValaCodeNode*) _tmp45_, NULL);
5003 		_tmp47_ = _tmp46_;
5004 		_tmp48_ = vala_get_ccode_name ((ValaCodeNode*) f);
5005 		_tmp49_ = _tmp48_;
5006 		_tmp50_ = g_strdup_printf ("%s_%s", _tmp47_, _tmp49_);
5007 		_tmp51_ = _tmp50_;
5008 		_tmp52_ = vala_ccode_base_module_get_symbol_lock_name (self, _tmp51_);
5009 		_tmp53_ = _tmp52_;
5010 		_tmp54_ = vala_ccode_constant_new ("{0}");
5011 		_tmp55_ = _tmp54_;
5012 		_tmp56_ = vala_ccode_variable_declarator_new (_tmp53_, (ValaCCodeExpression*) _tmp55_, NULL);
5013 		_tmp57_ = _tmp56_;
5014 		_vala_ccode_node_unref0 (_tmp55_);
5015 		_g_free0 (_tmp53_);
5016 		_g_free0 (_tmp51_);
5017 		_g_free0 (_tmp49_);
5018 		_g_free0 (_tmp47_);
5019 		flock_decl = _tmp57_;
5020 		_tmp58_ = flock;
5021 		_tmp59_ = flock_decl;
5022 		vala_ccode_declaration_add_declarator (_tmp58_, (ValaCCodeDeclarator*) _tmp59_);
5023 		if (vala_symbol_is_private_symbol ((ValaSymbol*) f)) {
5024 			ValaCCodeDeclaration* _tmp60_;
5025 			_tmp60_ = flock;
5026 			vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp60_, VALA_CCODE_MODIFIERS_STATIC);
5027 		} else {
5028 			ValaCCodeDeclaration* _tmp61_;
5029 			_tmp61_ = flock;
5030 			vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp61_, VALA_CCODE_MODIFIERS_EXTERN);
5031 		}
5032 		_tmp62_ = flock;
5033 		vala_ccode_file_add_type_member_declaration (decl_space, (ValaCCodeNode*) _tmp62_);
5034 		_vala_ccode_node_unref0 (flock_decl);
5035 		_vala_ccode_node_unref0 (flock);
5036 	}
5037 	_tmp64_ = vala_variable_get_variable_type ((ValaVariable*) f);
5038 	_tmp65_ = _tmp64_;
5039 	if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp65_, VALA_TYPE_ARRAY_TYPE)) {
5040 		_tmp63_ = vala_get_ccode_array_length ((ValaCodeNode*) f);
5041 	} else {
5042 		_tmp63_ = FALSE;
5043 	}
5044 	if (_tmp63_) {
5045 		ValaArrayType* array_type = NULL;
5046 		ValaDataType* _tmp66_;
5047 		ValaDataType* _tmp67_;
5048 		ValaArrayType* _tmp68_;
5049 		ValaArrayType* _tmp69_;
5050 		gboolean _tmp70_;
5051 		gboolean _tmp71_;
5052 		_tmp66_ = vala_variable_get_variable_type ((ValaVariable*) f);
5053 		_tmp67_ = _tmp66_;
5054 		_tmp68_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp67_, VALA_TYPE_ARRAY_TYPE, ValaArrayType));
5055 		array_type = _tmp68_;
5056 		_tmp69_ = array_type;
5057 		_tmp70_ = vala_array_type_get_fixed_length (_tmp69_);
5058 		_tmp71_ = _tmp70_;
5059 		if (!_tmp71_) {
5060 			gchar* length_ctype = NULL;
5061 			gchar* _tmp72_;
5062 			_tmp72_ = vala_get_ccode_array_length_type ((ValaCodeNode*) f);
5063 			length_ctype = _tmp72_;
5064 			{
5065 				gint dim = 0;
5066 				dim = 1;
5067 				{
5068 					gboolean _tmp73_ = FALSE;
5069 					_tmp73_ = TRUE;
5070 					while (TRUE) {
5071 						ValaArrayType* _tmp75_;
5072 						gint _tmp76_;
5073 						gint _tmp77_;
5074 						const gchar* _tmp78_;
5075 						ValaCCodeDeclaration* _tmp79_;
5076 						ValaCCodeDeclaration* _tmp80_;
5077 						gchar* _tmp81_;
5078 						gchar* _tmp82_;
5079 						ValaCCodeVariableDeclarator* _tmp83_;
5080 						ValaCCodeVariableDeclarator* _tmp84_;
5081 						ValaCCodeDeclaration* _tmp87_;
5082 						if (!_tmp73_) {
5083 							gint _tmp74_;
5084 							_tmp74_ = dim;
5085 							dim = _tmp74_ + 1;
5086 						}
5087 						_tmp73_ = FALSE;
5088 						_tmp75_ = array_type;
5089 						_tmp76_ = vala_array_type_get_rank (_tmp75_);
5090 						_tmp77_ = _tmp76_;
5091 						if (!(dim <= _tmp77_)) {
5092 							break;
5093 						}
5094 						_tmp78_ = length_ctype;
5095 						_tmp79_ = vala_ccode_declaration_new (_tmp78_);
5096 						_vala_ccode_node_unref0 (_cdecl_);
5097 						_cdecl_ = _tmp79_;
5098 						_tmp80_ = _cdecl_;
5099 						_tmp81_ = vala_ccode_base_module_get_variable_array_length_cname (self, (ValaVariable*) f, dim);
5100 						_tmp82_ = _tmp81_;
5101 						_tmp83_ = vala_ccode_variable_declarator_new (_tmp82_, NULL, NULL);
5102 						_tmp84_ = _tmp83_;
5103 						vala_ccode_declaration_add_declarator (_tmp80_, (ValaCCodeDeclarator*) _tmp84_);
5104 						_vala_ccode_node_unref0 (_tmp84_);
5105 						_g_free0 (_tmp82_);
5106 						if (vala_symbol_is_private_symbol ((ValaSymbol*) f)) {
5107 							ValaCCodeDeclaration* _tmp85_;
5108 							_tmp85_ = _cdecl_;
5109 							vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp85_, VALA_CCODE_MODIFIERS_STATIC);
5110 						} else {
5111 							ValaCCodeDeclaration* _tmp86_;
5112 							_tmp86_ = _cdecl_;
5113 							vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp86_, VALA_CCODE_MODIFIERS_EXTERN);
5114 						}
5115 						_tmp87_ = _cdecl_;
5116 						vala_ccode_file_add_type_member_declaration (decl_space, (ValaCCodeNode*) _tmp87_);
5117 					}
5118 				}
5119 			}
5120 			_g_free0 (length_ctype);
5121 		}
5122 		_vala_code_node_unref0 (array_type);
5123 	} else {
5124 		if (vala_get_ccode_delegate_target ((ValaCodeNode*) f)) {
5125 			ValaDelegateType* delegate_type = NULL;
5126 			ValaDataType* _tmp88_;
5127 			ValaDataType* _tmp89_;
5128 			ValaDelegateType* _tmp90_;
5129 			ValaDelegateType* _tmp91_;
5130 			ValaDelegate* _tmp92_;
5131 			ValaDelegate* _tmp93_;
5132 			gboolean _tmp94_;
5133 			gboolean _tmp95_;
5134 			_tmp88_ = vala_variable_get_variable_type ((ValaVariable*) f);
5135 			_tmp89_ = _tmp88_;
5136 			_tmp90_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp89_, VALA_TYPE_DELEGATE_TYPE, ValaDelegateType));
5137 			delegate_type = _tmp90_;
5138 			_tmp91_ = delegate_type;
5139 			_tmp92_ = vala_delegate_type_get_delegate_symbol (_tmp91_);
5140 			_tmp93_ = _tmp92_;
5141 			_tmp94_ = vala_delegate_get_has_target (_tmp93_);
5142 			_tmp95_ = _tmp94_;
5143 			if (_tmp95_) {
5144 				ValaDataType* _tmp96_;
5145 				gchar* _tmp97_;
5146 				gchar* _tmp98_;
5147 				ValaCCodeDeclaration* _tmp99_;
5148 				ValaCCodeDeclaration* _tmp100_;
5149 				gchar* _tmp101_;
5150 				gchar* _tmp102_;
5151 				ValaCCodeVariableDeclarator* _tmp103_;
5152 				ValaCCodeVariableDeclarator* _tmp104_;
5153 				ValaCCodeDeclaration* _tmp107_;
5154 				ValaDelegateType* _tmp108_;
5155 				_tmp96_ = self->delegate_target_type;
5156 				_tmp97_ = vala_get_ccode_name ((ValaCodeNode*) _tmp96_);
5157 				_tmp98_ = _tmp97_;
5158 				_tmp99_ = vala_ccode_declaration_new (_tmp98_);
5159 				_vala_ccode_node_unref0 (_cdecl_);
5160 				_cdecl_ = _tmp99_;
5161 				_g_free0 (_tmp98_);
5162 				_tmp100_ = _cdecl_;
5163 				_tmp101_ = vala_get_ccode_delegate_target_name ((ValaVariable*) f);
5164 				_tmp102_ = _tmp101_;
5165 				_tmp103_ = vala_ccode_variable_declarator_new (_tmp102_, NULL, NULL);
5166 				_tmp104_ = _tmp103_;
5167 				vala_ccode_declaration_add_declarator (_tmp100_, (ValaCCodeDeclarator*) _tmp104_);
5168 				_vala_ccode_node_unref0 (_tmp104_);
5169 				_g_free0 (_tmp102_);
5170 				if (vala_symbol_is_private_symbol ((ValaSymbol*) f)) {
5171 					ValaCCodeDeclaration* _tmp105_;
5172 					_tmp105_ = _cdecl_;
5173 					vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp105_, VALA_CCODE_MODIFIERS_STATIC);
5174 				} else {
5175 					ValaCCodeDeclaration* _tmp106_;
5176 					_tmp106_ = _cdecl_;
5177 					vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp106_, VALA_CCODE_MODIFIERS_EXTERN);
5178 				}
5179 				_tmp107_ = _cdecl_;
5180 				vala_ccode_file_add_type_member_declaration (decl_space, (ValaCCodeNode*) _tmp107_);
5181 				_tmp108_ = delegate_type;
5182 				if (vala_data_type_is_disposable ((ValaDataType*) _tmp108_)) {
5183 					ValaDelegateType* _tmp109_;
5184 					gchar* _tmp110_;
5185 					gchar* _tmp111_;
5186 					ValaCCodeDeclaration* _tmp112_;
5187 					ValaCCodeDeclaration* _tmp113_;
5188 					gchar* _tmp114_;
5189 					gchar* _tmp115_;
5190 					ValaCCodeVariableDeclarator* _tmp116_;
5191 					ValaCCodeVariableDeclarator* _tmp117_;
5192 					ValaCCodeDeclaration* _tmp120_;
5193 					_tmp109_ = self->delegate_target_destroy_type;
5194 					_tmp110_ = vala_get_ccode_name ((ValaCodeNode*) _tmp109_);
5195 					_tmp111_ = _tmp110_;
5196 					_tmp112_ = vala_ccode_declaration_new (_tmp111_);
5197 					_vala_ccode_node_unref0 (_cdecl_);
5198 					_cdecl_ = _tmp112_;
5199 					_g_free0 (_tmp111_);
5200 					_tmp113_ = _cdecl_;
5201 					_tmp114_ = vala_get_ccode_delegate_target_destroy_notify_name ((ValaVariable*) f);
5202 					_tmp115_ = _tmp114_;
5203 					_tmp116_ = vala_ccode_variable_declarator_new (_tmp115_, NULL, NULL);
5204 					_tmp117_ = _tmp116_;
5205 					vala_ccode_declaration_add_declarator (_tmp113_, (ValaCCodeDeclarator*) _tmp117_);
5206 					_vala_ccode_node_unref0 (_tmp117_);
5207 					_g_free0 (_tmp115_);
5208 					if (vala_symbol_is_private_symbol ((ValaSymbol*) f)) {
5209 						ValaCCodeDeclaration* _tmp118_;
5210 						_tmp118_ = _cdecl_;
5211 						vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp118_, VALA_CCODE_MODIFIERS_STATIC);
5212 					} else {
5213 						ValaCCodeDeclaration* _tmp119_;
5214 						_tmp119_ = _cdecl_;
5215 						vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp119_, VALA_CCODE_MODIFIERS_EXTERN);
5216 					}
5217 					_tmp120_ = _cdecl_;
5218 					vala_ccode_file_add_type_member_declaration (decl_space, (ValaCCodeNode*) _tmp120_);
5219 				}
5220 			}
5221 			_vala_code_node_unref0 (delegate_type);
5222 		}
5223 	}
5224 	_vala_ccode_node_unref0 (_cdecl_);
5225 }
5226 
5227 static gpointer
_vala_target_value_ref0(gpointer self)5228 _vala_target_value_ref0 (gpointer self)
5229 {
5230 	return self ? vala_target_value_ref (self) : NULL;
5231 }
5232 
5233 static void
vala_ccode_base_module_real_visit_field(ValaCodeVisitor * base,ValaField * f)5234 vala_ccode_base_module_real_visit_field (ValaCodeVisitor* base,
5235                                          ValaField* f)
5236 {
5237 	ValaCCodeBaseModule * self;
5238 	ValaSourceReference* _tmp0_;
5239 	ValaSourceReference* _tmp1_;
5240 	ValaClass* cl = NULL;
5241 	ValaSymbol* _tmp2_;
5242 	ValaSymbol* _tmp3_;
5243 	ValaClass* _tmp4_;
5244 	gboolean _tmp5_ = FALSE;
5245 	ValaClass* _tmp6_;
5246 	gboolean is_gtypeinstance = FALSE;
5247 	ValaCCodeExpression* lhs = NULL;
5248 	ValaMemberBinding _tmp10_;
5249 	ValaMemberBinding _tmp11_;
5250 	self = (ValaCCodeBaseModule*) base;
5251 	g_return_if_fail (f != NULL);
5252 	_tmp0_ = vala_code_node_get_source_reference ((ValaCodeNode*) f);
5253 	_tmp1_ = _tmp0_;
5254 	vala_ccode_base_module_push_line (self, _tmp1_);
5255 	vala_ccode_base_module_visit_member (self, (ValaSymbol*) f);
5256 	_tmp2_ = vala_symbol_get_parent_symbol ((ValaSymbol*) f);
5257 	_tmp3_ = _tmp2_;
5258 	_tmp4_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (_tmp3_, VALA_TYPE_CLASS) ? ((ValaClass*) _tmp3_) : NULL);
5259 	cl = _tmp4_;
5260 	_tmp6_ = cl;
5261 	if (_tmp6_ != NULL) {
5262 		ValaClass* _tmp7_;
5263 		gboolean _tmp8_;
5264 		gboolean _tmp9_;
5265 		_tmp7_ = cl;
5266 		_tmp8_ = vala_class_get_is_compact (_tmp7_);
5267 		_tmp9_ = _tmp8_;
5268 		_tmp5_ = !_tmp9_;
5269 	} else {
5270 		_tmp5_ = FALSE;
5271 	}
5272 	is_gtypeinstance = _tmp5_;
5273 	lhs = NULL;
5274 	_tmp10_ = vala_field_get_binding (f);
5275 	_tmp11_ = _tmp10_;
5276 	if (_tmp11_ == VALA_MEMBER_BINDING_INSTANCE) {
5277 		gboolean _tmp12_ = FALSE;
5278 		ValaExpression* _tmp27_;
5279 		ValaExpression* _tmp28_;
5280 		gboolean _tmp159_ = FALSE;
5281 		gboolean _tmp160_ = FALSE;
5282 		gboolean _tmp161_ = FALSE;
5283 		ValaDataType* _tmp162_;
5284 		ValaDataType* _tmp163_;
5285 		if (is_gtypeinstance) {
5286 			ValaSymbolAccessibility _tmp13_;
5287 			ValaSymbolAccessibility _tmp14_;
5288 			_tmp13_ = vala_symbol_get_access ((ValaSymbol*) f);
5289 			_tmp14_ = _tmp13_;
5290 			_tmp12_ = _tmp14_ == VALA_SYMBOL_ACCESSIBILITY_PRIVATE;
5291 		} else {
5292 			_tmp12_ = FALSE;
5293 		}
5294 		if (_tmp12_) {
5295 			ValaCCodeIdentifier* _tmp15_;
5296 			ValaCCodeIdentifier* _tmp16_;
5297 			ValaCCodeMemberAccess* _tmp17_;
5298 			ValaCCodeMemberAccess* _tmp18_;
5299 			gchar* _tmp19_;
5300 			gchar* _tmp20_;
5301 			ValaCCodeMemberAccess* _tmp21_;
5302 			_tmp15_ = vala_ccode_identifier_new ("self");
5303 			_tmp16_ = _tmp15_;
5304 			_tmp17_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) _tmp16_, "priv");
5305 			_tmp18_ = _tmp17_;
5306 			_tmp19_ = vala_get_ccode_name ((ValaCodeNode*) f);
5307 			_tmp20_ = _tmp19_;
5308 			_tmp21_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) _tmp18_, _tmp20_);
5309 			_vala_ccode_node_unref0 (lhs);
5310 			lhs = (ValaCCodeExpression*) _tmp21_;
5311 			_g_free0 (_tmp20_);
5312 			_vala_ccode_node_unref0 (_tmp18_);
5313 			_vala_ccode_node_unref0 (_tmp16_);
5314 		} else {
5315 			ValaCCodeIdentifier* _tmp22_;
5316 			ValaCCodeIdentifier* _tmp23_;
5317 			gchar* _tmp24_;
5318 			gchar* _tmp25_;
5319 			ValaCCodeMemberAccess* _tmp26_;
5320 			_tmp22_ = vala_ccode_identifier_new ("self");
5321 			_tmp23_ = _tmp22_;
5322 			_tmp24_ = vala_get_ccode_name ((ValaCodeNode*) f);
5323 			_tmp25_ = _tmp24_;
5324 			_tmp26_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) _tmp23_, _tmp25_);
5325 			_vala_ccode_node_unref0 (lhs);
5326 			lhs = (ValaCCodeExpression*) _tmp26_;
5327 			_g_free0 (_tmp25_);
5328 			_vala_ccode_node_unref0 (_tmp23_);
5329 		}
5330 		_tmp27_ = vala_variable_get_initializer ((ValaVariable*) f);
5331 		_tmp28_ = _tmp27_;
5332 		if (_tmp28_ != NULL) {
5333 			ValaCCodeBaseModuleEmitContext* _tmp29_;
5334 			ValaExpression* _tmp30_;
5335 			ValaExpression* _tmp31_;
5336 			ValaCCodeExpression* rhs = NULL;
5337 			ValaExpression* _tmp32_;
5338 			ValaExpression* _tmp33_;
5339 			ValaCCodeExpression* _tmp34_;
5340 			ValaCCodeExpression* _tmp35_;
5341 			ValaExpression* _tmp36_;
5342 			ValaExpression* _tmp37_;
5343 			ValaArrayList* _tmp157_;
5344 			ValaArrayList* _tmp158_;
5345 			_tmp29_ = self->instance_init_context;
5346 			vala_ccode_base_module_push_context (self, _tmp29_);
5347 			_tmp30_ = vala_variable_get_initializer ((ValaVariable*) f);
5348 			_tmp31_ = _tmp30_;
5349 			vala_code_node_emit ((ValaCodeNode*) _tmp31_, (ValaCodeGenerator*) self);
5350 			_tmp32_ = vala_variable_get_initializer ((ValaVariable*) f);
5351 			_tmp33_ = _tmp32_;
5352 			_tmp34_ = vala_get_cvalue (_tmp33_);
5353 			_tmp35_ = _vala_ccode_node_ref0 (_tmp34_);
5354 			rhs = _tmp35_;
5355 			_tmp36_ = vala_variable_get_initializer ((ValaVariable*) f);
5356 			_tmp37_ = _tmp36_;
5357 			if (!vala_ccode_base_module_is_simple_struct_creation (self, (ValaVariable*) f, _tmp37_)) {
5358 				ValaCCodeFunction* _tmp38_;
5359 				ValaCCodeFunction* _tmp39_;
5360 				ValaCCodeExpression* _tmp40_;
5361 				ValaCCodeExpression* _tmp41_;
5362 				gboolean _tmp42_ = FALSE;
5363 				ValaDataType* _tmp43_;
5364 				ValaDataType* _tmp44_;
5365 				_tmp38_ = vala_ccode_base_module_get_ccode (self);
5366 				_tmp39_ = _tmp38_;
5367 				_tmp40_ = lhs;
5368 				_tmp41_ = rhs;
5369 				vala_ccode_function_add_assignment (_tmp39_, _tmp40_, _tmp41_);
5370 				_tmp43_ = vala_variable_get_variable_type ((ValaVariable*) f);
5371 				_tmp44_ = _tmp43_;
5372 				if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp44_, VALA_TYPE_ARRAY_TYPE)) {
5373 					_tmp42_ = vala_get_ccode_array_length ((ValaCodeNode*) f);
5374 				} else {
5375 					_tmp42_ = FALSE;
5376 				}
5377 				if (_tmp42_) {
5378 					ValaArrayType* array_type = NULL;
5379 					ValaDataType* _tmp45_;
5380 					ValaDataType* _tmp46_;
5381 					ValaArrayType* _tmp47_;
5382 					ValaTargetValue* field_value = NULL;
5383 					ValaSymbol* _tmp48_;
5384 					ValaSymbol* _tmp49_;
5385 					ValaTargetValue* _tmp50_;
5386 					ValaTargetValue* _tmp51_;
5387 					ValaTargetValue* _tmp52_;
5388 					ValaTargetValue* _tmp53_;
5389 					ValaGLibValue* glib_value = NULL;
5390 					ValaExpression* _tmp54_;
5391 					ValaExpression* _tmp55_;
5392 					ValaTargetValue* _tmp56_;
5393 					ValaTargetValue* _tmp57_;
5394 					ValaGLibValue* _tmp58_;
5395 					ValaGLibValue* _tmp59_;
5396 					ValaList* _tmp60_;
5397 					gboolean _tmp100_ = FALSE;
5398 					ValaArrayType* _tmp101_;
5399 					gint _tmp102_;
5400 					gint _tmp103_;
5401 					_tmp45_ = vala_variable_get_variable_type ((ValaVariable*) f);
5402 					_tmp46_ = _tmp45_;
5403 					_tmp47_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp46_, VALA_TYPE_ARRAY_TYPE, ValaArrayType));
5404 					array_type = _tmp47_;
5405 					_tmp48_ = vala_symbol_get_parent_symbol ((ValaSymbol*) f);
5406 					_tmp49_ = _tmp48_;
5407 					_tmp50_ = vala_ccode_base_module_load_this_parameter (self, G_TYPE_CHECK_INSTANCE_CAST (_tmp49_, VALA_TYPE_TYPESYMBOL, ValaTypeSymbol));
5408 					_tmp51_ = _tmp50_;
5409 					_tmp52_ = vala_ccode_base_module_get_field_cvalue (self, f, _tmp51_);
5410 					_tmp53_ = _tmp52_;
5411 					_vala_target_value_unref0 (_tmp51_);
5412 					field_value = _tmp53_;
5413 					_tmp54_ = vala_variable_get_initializer ((ValaVariable*) f);
5414 					_tmp55_ = _tmp54_;
5415 					_tmp56_ = vala_expression_get_target_value (_tmp55_);
5416 					_tmp57_ = _tmp56_;
5417 					_tmp58_ = _vala_target_value_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp57_, VALA_TYPE_GLIB_VALUE, ValaGLibValue));
5418 					glib_value = _tmp58_;
5419 					_tmp59_ = glib_value;
5420 					_tmp60_ = _tmp59_->array_length_cvalues;
5421 					if (_tmp60_ != NULL) {
5422 						{
5423 							gint dim = 0;
5424 							dim = 1;
5425 							{
5426 								gboolean _tmp61_ = FALSE;
5427 								_tmp61_ = TRUE;
5428 								while (TRUE) {
5429 									ValaArrayType* _tmp63_;
5430 									gint _tmp64_;
5431 									gint _tmp65_;
5432 									ValaCCodeExpression* array_len_lhs = NULL;
5433 									ValaTargetValue* _tmp66_;
5434 									ValaCCodeExpression* _tmp67_;
5435 									ValaCCodeFunction* _tmp68_;
5436 									ValaCCodeFunction* _tmp69_;
5437 									ValaCCodeExpression* _tmp70_;
5438 									ValaGLibValue* _tmp71_;
5439 									ValaCCodeExpression* _tmp72_;
5440 									ValaCCodeExpression* _tmp73_;
5441 									if (!_tmp61_) {
5442 										gint _tmp62_;
5443 										_tmp62_ = dim;
5444 										dim = _tmp62_ + 1;
5445 									}
5446 									_tmp61_ = FALSE;
5447 									_tmp63_ = array_type;
5448 									_tmp64_ = vala_array_type_get_rank (_tmp63_);
5449 									_tmp65_ = _tmp64_;
5450 									if (!(dim <= _tmp65_)) {
5451 										break;
5452 									}
5453 									_tmp66_ = field_value;
5454 									_tmp67_ = vala_ccode_base_module_get_array_length_cvalue (self, _tmp66_, dim);
5455 									array_len_lhs = _tmp67_;
5456 									_tmp68_ = vala_ccode_base_module_get_ccode (self);
5457 									_tmp69_ = _tmp68_;
5458 									_tmp70_ = array_len_lhs;
5459 									_tmp71_ = glib_value;
5460 									_tmp72_ = vala_ccode_base_module_get_array_length_cvalue (self, (ValaTargetValue*) _tmp71_, dim);
5461 									_tmp73_ = _tmp72_;
5462 									vala_ccode_function_add_assignment (_tmp69_, _tmp70_, _tmp73_);
5463 									_vala_ccode_node_unref0 (_tmp73_);
5464 									_vala_ccode_node_unref0 (array_len_lhs);
5465 								}
5466 							}
5467 						}
5468 					} else {
5469 						ValaGLibValue* _tmp74_;
5470 						_tmp74_ = glib_value;
5471 						if (_tmp74_->array_null_terminated) {
5472 							ValaCCodeFunctionCall* len_call = NULL;
5473 							ValaCCodeIdentifier* _tmp75_;
5474 							ValaCCodeIdentifier* _tmp76_;
5475 							ValaCCodeFunctionCall* _tmp77_;
5476 							ValaCCodeFunctionCall* _tmp78_;
5477 							ValaCCodeFunctionCall* _tmp79_;
5478 							ValaGLibValue* _tmp80_;
5479 							ValaCCodeExpression* _tmp81_;
5480 							ValaCCodeFunction* _tmp82_;
5481 							ValaCCodeFunction* _tmp83_;
5482 							ValaTargetValue* _tmp84_;
5483 							ValaCCodeExpression* _tmp85_;
5484 							ValaCCodeExpression* _tmp86_;
5485 							ValaCCodeFunctionCall* _tmp87_;
5486 							self->requires_array_length = TRUE;
5487 							_tmp75_ = vala_ccode_identifier_new ("_vala_array_length");
5488 							_tmp76_ = _tmp75_;
5489 							_tmp77_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp76_);
5490 							_tmp78_ = _tmp77_;
5491 							_vala_ccode_node_unref0 (_tmp76_);
5492 							len_call = _tmp78_;
5493 							_tmp79_ = len_call;
5494 							_tmp80_ = glib_value;
5495 							_tmp81_ = vala_get_cvalue_ ((ValaTargetValue*) _tmp80_);
5496 							vala_ccode_function_call_add_argument (_tmp79_, _tmp81_);
5497 							_tmp82_ = vala_ccode_base_module_get_ccode (self);
5498 							_tmp83_ = _tmp82_;
5499 							_tmp84_ = field_value;
5500 							_tmp85_ = vala_ccode_base_module_get_array_length_cvalue (self, _tmp84_, 1);
5501 							_tmp86_ = _tmp85_;
5502 							_tmp87_ = len_call;
5503 							vala_ccode_function_add_assignment (_tmp83_, _tmp86_, (ValaCCodeExpression*) _tmp87_);
5504 							_vala_ccode_node_unref0 (_tmp86_);
5505 							_vala_ccode_node_unref0 (len_call);
5506 						} else {
5507 							{
5508 								gint dim = 0;
5509 								dim = 1;
5510 								{
5511 									gboolean _tmp88_ = FALSE;
5512 									_tmp88_ = TRUE;
5513 									while (TRUE) {
5514 										ValaArrayType* _tmp90_;
5515 										gint _tmp91_;
5516 										gint _tmp92_;
5517 										ValaCCodeFunction* _tmp93_;
5518 										ValaCCodeFunction* _tmp94_;
5519 										ValaTargetValue* _tmp95_;
5520 										ValaCCodeExpression* _tmp96_;
5521 										ValaCCodeExpression* _tmp97_;
5522 										ValaCCodeConstant* _tmp98_;
5523 										ValaCCodeConstant* _tmp99_;
5524 										if (!_tmp88_) {
5525 											gint _tmp89_;
5526 											_tmp89_ = dim;
5527 											dim = _tmp89_ + 1;
5528 										}
5529 										_tmp88_ = FALSE;
5530 										_tmp90_ = array_type;
5531 										_tmp91_ = vala_array_type_get_rank (_tmp90_);
5532 										_tmp92_ = _tmp91_;
5533 										if (!(dim <= _tmp92_)) {
5534 											break;
5535 										}
5536 										_tmp93_ = vala_ccode_base_module_get_ccode (self);
5537 										_tmp94_ = _tmp93_;
5538 										_tmp95_ = field_value;
5539 										_tmp96_ = vala_ccode_base_module_get_array_length_cvalue (self, _tmp95_, dim);
5540 										_tmp97_ = _tmp96_;
5541 										_tmp98_ = vala_ccode_constant_new ("-1");
5542 										_tmp99_ = _tmp98_;
5543 										vala_ccode_function_add_assignment (_tmp94_, _tmp97_, (ValaCCodeExpression*) _tmp99_);
5544 										_vala_ccode_node_unref0 (_tmp99_);
5545 										_vala_ccode_node_unref0 (_tmp97_);
5546 									}
5547 								}
5548 							}
5549 						}
5550 					}
5551 					_tmp101_ = array_type;
5552 					_tmp102_ = vala_array_type_get_rank (_tmp101_);
5553 					_tmp103_ = _tmp102_;
5554 					if (_tmp103_ == 1) {
5555 						_tmp100_ = vala_symbol_is_internal_symbol ((ValaSymbol*) f);
5556 					} else {
5557 						_tmp100_ = FALSE;
5558 					}
5559 					if (_tmp100_) {
5560 						ValaCCodeExpression* lhs_array_size = NULL;
5561 						ValaTargetValue* _tmp104_;
5562 						ValaCCodeExpression* _tmp105_;
5563 						ValaCCodeExpression* _tmp106_;
5564 						ValaCCodeExpression* rhs_array_len = NULL;
5565 						ValaTargetValue* _tmp107_;
5566 						ValaCCodeExpression* _tmp108_;
5567 						ValaCCodeFunction* _tmp109_;
5568 						ValaCCodeFunction* _tmp110_;
5569 						ValaCCodeExpression* _tmp111_;
5570 						ValaCCodeExpression* _tmp112_;
5571 						_tmp104_ = field_value;
5572 						_tmp105_ = vala_get_array_size_cvalue (_tmp104_);
5573 						_tmp106_ = _vala_ccode_node_ref0 (_tmp105_);
5574 						lhs_array_size = _tmp106_;
5575 						_tmp107_ = field_value;
5576 						_tmp108_ = vala_ccode_base_module_get_array_length_cvalue (self, _tmp107_, 1);
5577 						rhs_array_len = _tmp108_;
5578 						_tmp109_ = vala_ccode_base_module_get_ccode (self);
5579 						_tmp110_ = _tmp109_;
5580 						_tmp111_ = lhs_array_size;
5581 						_tmp112_ = rhs_array_len;
5582 						vala_ccode_function_add_assignment (_tmp110_, _tmp111_, _tmp112_);
5583 						_vala_ccode_node_unref0 (rhs_array_len);
5584 						_vala_ccode_node_unref0 (lhs_array_size);
5585 					}
5586 					_vala_target_value_unref0 (glib_value);
5587 					_vala_target_value_unref0 (field_value);
5588 					_vala_code_node_unref0 (array_type);
5589 				} else {
5590 					if (vala_get_ccode_delegate_target ((ValaCodeNode*) f)) {
5591 						ValaDelegateType* delegate_type = NULL;
5592 						ValaDataType* _tmp113_;
5593 						ValaDataType* _tmp114_;
5594 						ValaDelegateType* _tmp115_;
5595 						ValaDelegateType* _tmp116_;
5596 						ValaDelegate* _tmp117_;
5597 						ValaDelegate* _tmp118_;
5598 						gboolean _tmp119_;
5599 						gboolean _tmp120_;
5600 						_tmp113_ = vala_variable_get_variable_type ((ValaVariable*) f);
5601 						_tmp114_ = _tmp113_;
5602 						_tmp115_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp114_, VALA_TYPE_DELEGATE_TYPE, ValaDelegateType));
5603 						delegate_type = _tmp115_;
5604 						_tmp116_ = delegate_type;
5605 						_tmp117_ = vala_delegate_type_get_delegate_symbol (_tmp116_);
5606 						_tmp118_ = _tmp117_;
5607 						_tmp119_ = vala_delegate_get_has_target (_tmp118_);
5608 						_tmp120_ = _tmp119_;
5609 						if (_tmp120_) {
5610 							ValaTargetValue* field_value = NULL;
5611 							ValaSymbol* _tmp121_;
5612 							ValaSymbol* _tmp122_;
5613 							ValaTargetValue* _tmp123_;
5614 							ValaTargetValue* _tmp124_;
5615 							ValaTargetValue* _tmp125_;
5616 							ValaTargetValue* _tmp126_;
5617 							ValaCCodeFunction* _tmp127_;
5618 							ValaCCodeFunction* _tmp128_;
5619 							ValaTargetValue* _tmp129_;
5620 							ValaCCodeExpression* _tmp130_;
5621 							ValaCCodeExpression* _tmp131_;
5622 							ValaCCodeIdentifier* _tmp132_;
5623 							ValaCCodeIdentifier* _tmp133_;
5624 							ValaDelegateType* _tmp134_;
5625 							_tmp121_ = vala_symbol_get_parent_symbol ((ValaSymbol*) f);
5626 							_tmp122_ = _tmp121_;
5627 							_tmp123_ = vala_ccode_base_module_load_this_parameter (self, G_TYPE_CHECK_INSTANCE_CAST (_tmp122_, VALA_TYPE_TYPESYMBOL, ValaTypeSymbol));
5628 							_tmp124_ = _tmp123_;
5629 							_tmp125_ = vala_ccode_base_module_get_field_cvalue (self, f, _tmp124_);
5630 							_tmp126_ = _tmp125_;
5631 							_vala_target_value_unref0 (_tmp124_);
5632 							field_value = _tmp126_;
5633 							_tmp127_ = vala_ccode_base_module_get_ccode (self);
5634 							_tmp128_ = _tmp127_;
5635 							_tmp129_ = field_value;
5636 							_tmp130_ = vala_ccode_base_module_get_delegate_target_cvalue (self, _tmp129_);
5637 							_tmp131_ = _tmp130_;
5638 							_tmp132_ = vala_ccode_identifier_new ("self");
5639 							_tmp133_ = _tmp132_;
5640 							vala_ccode_function_add_assignment (_tmp128_, _tmp131_, (ValaCCodeExpression*) _tmp133_);
5641 							_vala_ccode_node_unref0 (_tmp133_);
5642 							_vala_ccode_node_unref0 (_tmp131_);
5643 							_tmp134_ = delegate_type;
5644 							if (vala_data_type_is_disposable ((ValaDataType*) _tmp134_)) {
5645 								ValaCCodeFunction* _tmp135_;
5646 								ValaCCodeFunction* _tmp136_;
5647 								ValaTargetValue* _tmp137_;
5648 								ValaCCodeExpression* _tmp138_;
5649 								ValaCCodeExpression* _tmp139_;
5650 								ValaCCodeConstant* _tmp140_;
5651 								ValaCCodeConstant* _tmp141_;
5652 								_tmp135_ = vala_ccode_base_module_get_ccode (self);
5653 								_tmp136_ = _tmp135_;
5654 								_tmp137_ = field_value;
5655 								_tmp138_ = vala_ccode_base_module_get_delegate_target_destroy_notify_cvalue (self, _tmp137_);
5656 								_tmp139_ = _tmp138_;
5657 								_tmp140_ = vala_ccode_constant_new ("NULL");
5658 								_tmp141_ = _tmp140_;
5659 								vala_ccode_function_add_assignment (_tmp136_, _tmp139_, (ValaCCodeExpression*) _tmp141_);
5660 								_vala_ccode_node_unref0 (_tmp141_);
5661 								_vala_ccode_node_unref0 (_tmp139_);
5662 							}
5663 							_vala_target_value_unref0 (field_value);
5664 						}
5665 						_vala_code_node_unref0 (delegate_type);
5666 					}
5667 				}
5668 			}
5669 			{
5670 				ValaArrayList* _value_list = NULL;
5671 				ValaArrayList* _tmp142_;
5672 				ValaArrayList* _tmp143_;
5673 				ValaArrayList* _tmp144_;
5674 				gint _value_size = 0;
5675 				ValaArrayList* _tmp145_;
5676 				gint _tmp146_;
5677 				gint _tmp147_;
5678 				gint _value_index = 0;
5679 				_tmp142_ = vala_ccode_base_module_get_temp_ref_values (self);
5680 				_tmp143_ = _tmp142_;
5681 				_tmp144_ = _vala_iterable_ref0 (_tmp143_);
5682 				_value_list = _tmp144_;
5683 				_tmp145_ = _value_list;
5684 				_tmp146_ = vala_collection_get_size ((ValaCollection*) _tmp145_);
5685 				_tmp147_ = _tmp146_;
5686 				_value_size = _tmp147_;
5687 				_value_index = -1;
5688 				while (TRUE) {
5689 					gint _tmp148_;
5690 					gint _tmp149_;
5691 					ValaTargetValue* value = NULL;
5692 					ValaArrayList* _tmp150_;
5693 					gpointer _tmp151_;
5694 					ValaCCodeFunction* _tmp152_;
5695 					ValaCCodeFunction* _tmp153_;
5696 					ValaTargetValue* _tmp154_;
5697 					ValaCCodeExpression* _tmp155_;
5698 					ValaCCodeExpression* _tmp156_;
5699 					_value_index = _value_index + 1;
5700 					_tmp148_ = _value_index;
5701 					_tmp149_ = _value_size;
5702 					if (!(_tmp148_ < _tmp149_)) {
5703 						break;
5704 					}
5705 					_tmp150_ = _value_list;
5706 					_tmp151_ = vala_list_get ((ValaList*) _tmp150_, _value_index);
5707 					value = (ValaTargetValue*) _tmp151_;
5708 					_tmp152_ = vala_ccode_base_module_get_ccode (self);
5709 					_tmp153_ = _tmp152_;
5710 					_tmp154_ = value;
5711 					_tmp155_ = vala_ccode_base_module_destroy_value (self, _tmp154_, FALSE);
5712 					_tmp156_ = _tmp155_;
5713 					vala_ccode_function_add_expression (_tmp153_, _tmp156_);
5714 					_vala_ccode_node_unref0 (_tmp156_);
5715 					_vala_target_value_unref0 (value);
5716 				}
5717 				_vala_iterable_unref0 (_value_list);
5718 			}
5719 			_tmp157_ = vala_ccode_base_module_get_temp_ref_values (self);
5720 			_tmp158_ = _tmp157_;
5721 			vala_collection_clear ((ValaCollection*) _tmp158_);
5722 			vala_ccode_base_module_pop_context (self);
5723 			_vala_ccode_node_unref0 (rhs);
5724 		}
5725 		_tmp162_ = vala_variable_get_variable_type ((ValaVariable*) f);
5726 		_tmp163_ = _tmp162_;
5727 		if (!G_TYPE_CHECK_INSTANCE_TYPE (_tmp163_, VALA_TYPE_DELEGATE_TYPE)) {
5728 			_tmp161_ = TRUE;
5729 		} else {
5730 			_tmp161_ = vala_get_ccode_delegate_target ((ValaCodeNode*) f);
5731 		}
5732 		if (_tmp161_) {
5733 			ValaDataType* _tmp164_;
5734 			ValaDataType* _tmp165_;
5735 			_tmp164_ = vala_variable_get_variable_type ((ValaVariable*) f);
5736 			_tmp165_ = _tmp164_;
5737 			_tmp160_ = vala_ccode_base_module_requires_destroy (_tmp165_);
5738 		} else {
5739 			_tmp160_ = FALSE;
5740 		}
5741 		if (_tmp160_) {
5742 			ValaCCodeBaseModuleEmitContext* _tmp166_;
5743 			_tmp166_ = self->instance_finalize_context;
5744 			_tmp159_ = _tmp166_ != NULL;
5745 		} else {
5746 			_tmp159_ = FALSE;
5747 		}
5748 		if (_tmp159_) {
5749 			ValaCCodeBaseModuleEmitContext* _tmp167_;
5750 			ValaCCodeFunction* _tmp168_;
5751 			ValaCCodeFunction* _tmp169_;
5752 			ValaSymbol* _tmp170_;
5753 			ValaSymbol* _tmp171_;
5754 			ValaTargetValue* _tmp172_;
5755 			ValaTargetValue* _tmp173_;
5756 			ValaCCodeExpression* _tmp174_;
5757 			ValaCCodeExpression* _tmp175_;
5758 			_tmp167_ = self->instance_finalize_context;
5759 			vala_ccode_base_module_push_context (self, _tmp167_);
5760 			_tmp168_ = vala_ccode_base_module_get_ccode (self);
5761 			_tmp169_ = _tmp168_;
5762 			_tmp170_ = vala_symbol_get_parent_symbol ((ValaSymbol*) f);
5763 			_tmp171_ = _tmp170_;
5764 			_tmp172_ = vala_ccode_base_module_load_this_parameter (self, G_TYPE_CHECK_INSTANCE_CAST (_tmp171_, VALA_TYPE_TYPESYMBOL, ValaTypeSymbol));
5765 			_tmp173_ = _tmp172_;
5766 			_tmp174_ = vala_ccode_base_module_destroy_field (self, f, _tmp173_);
5767 			_tmp175_ = _tmp174_;
5768 			vala_ccode_function_add_expression (_tmp169_, _tmp175_);
5769 			_vala_ccode_node_unref0 (_tmp175_);
5770 			_vala_target_value_unref0 (_tmp173_);
5771 			vala_ccode_base_module_pop_context (self);
5772 		}
5773 	} else {
5774 		ValaMemberBinding _tmp176_;
5775 		ValaMemberBinding _tmp177_;
5776 		_tmp176_ = vala_field_get_binding (f);
5777 		_tmp177_ = _tmp176_;
5778 		if (_tmp177_ == VALA_MEMBER_BINDING_CLASS) {
5779 			ValaSymbolAccessibility _tmp178_;
5780 			ValaSymbolAccessibility _tmp179_;
5781 			ValaExpression* _tmp199_;
5782 			ValaExpression* _tmp200_;
5783 			_tmp178_ = vala_symbol_get_access ((ValaSymbol*) f);
5784 			_tmp179_ = _tmp178_;
5785 			if (_tmp179_ == VALA_SYMBOL_ACCESSIBILITY_PRIVATE) {
5786 				ValaCCodeFunctionCall* ccall = NULL;
5787 				ValaClass* _tmp180_;
5788 				gchar* _tmp181_;
5789 				gchar* _tmp182_;
5790 				ValaCCodeIdentifier* _tmp183_;
5791 				ValaCCodeIdentifier* _tmp184_;
5792 				ValaCCodeFunctionCall* _tmp185_;
5793 				ValaCCodeFunctionCall* _tmp186_;
5794 				ValaCCodeFunctionCall* _tmp187_;
5795 				ValaCCodeIdentifier* _tmp188_;
5796 				ValaCCodeIdentifier* _tmp189_;
5797 				ValaCCodeFunctionCall* _tmp190_;
5798 				gchar* _tmp191_;
5799 				gchar* _tmp192_;
5800 				ValaCCodeMemberAccess* _tmp193_;
5801 				_tmp180_ = cl;
5802 				_tmp181_ = vala_get_ccode_class_get_private_function (_tmp180_);
5803 				_tmp182_ = _tmp181_;
5804 				_tmp183_ = vala_ccode_identifier_new (_tmp182_);
5805 				_tmp184_ = _tmp183_;
5806 				_tmp185_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp184_);
5807 				_tmp186_ = _tmp185_;
5808 				_vala_ccode_node_unref0 (_tmp184_);
5809 				_g_free0 (_tmp182_);
5810 				ccall = _tmp186_;
5811 				_tmp187_ = ccall;
5812 				_tmp188_ = vala_ccode_identifier_new ("klass");
5813 				_tmp189_ = _tmp188_;
5814 				vala_ccode_function_call_add_argument (_tmp187_, (ValaCCodeExpression*) _tmp189_);
5815 				_vala_ccode_node_unref0 (_tmp189_);
5816 				_tmp190_ = ccall;
5817 				_tmp191_ = vala_get_ccode_name ((ValaCodeNode*) f);
5818 				_tmp192_ = _tmp191_;
5819 				_tmp193_ = vala_ccode_member_access_new ((ValaCCodeExpression*) _tmp190_, _tmp192_, TRUE);
5820 				_vala_ccode_node_unref0 (lhs);
5821 				lhs = (ValaCCodeExpression*) _tmp193_;
5822 				_g_free0 (_tmp192_);
5823 				_vala_ccode_node_unref0 (ccall);
5824 			} else {
5825 				ValaCCodeIdentifier* _tmp194_;
5826 				ValaCCodeIdentifier* _tmp195_;
5827 				gchar* _tmp196_;
5828 				gchar* _tmp197_;
5829 				ValaCCodeMemberAccess* _tmp198_;
5830 				_tmp194_ = vala_ccode_identifier_new ("klass");
5831 				_tmp195_ = _tmp194_;
5832 				_tmp196_ = vala_get_ccode_name ((ValaCodeNode*) f);
5833 				_tmp197_ = _tmp196_;
5834 				_tmp198_ = vala_ccode_member_access_new ((ValaCCodeExpression*) _tmp195_, _tmp197_, TRUE);
5835 				_vala_ccode_node_unref0 (lhs);
5836 				lhs = (ValaCCodeExpression*) _tmp198_;
5837 				_g_free0 (_tmp197_);
5838 				_vala_ccode_node_unref0 (_tmp195_);
5839 			}
5840 			_tmp199_ = vala_variable_get_initializer ((ValaVariable*) f);
5841 			_tmp200_ = _tmp199_;
5842 			if (_tmp200_ != NULL) {
5843 				ValaCCodeBaseModuleEmitContext* _tmp201_;
5844 				ValaExpression* _tmp202_;
5845 				ValaExpression* _tmp203_;
5846 				ValaCCodeExpression* rhs = NULL;
5847 				ValaExpression* _tmp204_;
5848 				ValaExpression* _tmp205_;
5849 				ValaCCodeExpression* _tmp206_;
5850 				ValaCCodeExpression* _tmp207_;
5851 				ValaCCodeFunction* _tmp208_;
5852 				ValaCCodeFunction* _tmp209_;
5853 				ValaCCodeExpression* _tmp210_;
5854 				ValaCCodeExpression* _tmp211_;
5855 				ValaArrayList* _tmp227_;
5856 				ValaArrayList* _tmp228_;
5857 				_tmp201_ = self->class_init_context;
5858 				vala_ccode_base_module_push_context (self, _tmp201_);
5859 				_tmp202_ = vala_variable_get_initializer ((ValaVariable*) f);
5860 				_tmp203_ = _tmp202_;
5861 				vala_code_node_emit ((ValaCodeNode*) _tmp203_, (ValaCodeGenerator*) self);
5862 				_tmp204_ = vala_variable_get_initializer ((ValaVariable*) f);
5863 				_tmp205_ = _tmp204_;
5864 				_tmp206_ = vala_get_cvalue (_tmp205_);
5865 				_tmp207_ = _vala_ccode_node_ref0 (_tmp206_);
5866 				rhs = _tmp207_;
5867 				_tmp208_ = vala_ccode_base_module_get_ccode (self);
5868 				_tmp209_ = _tmp208_;
5869 				_tmp210_ = lhs;
5870 				_tmp211_ = rhs;
5871 				vala_ccode_function_add_assignment (_tmp209_, _tmp210_, _tmp211_);
5872 				{
5873 					ValaArrayList* _value_list = NULL;
5874 					ValaArrayList* _tmp212_;
5875 					ValaArrayList* _tmp213_;
5876 					ValaArrayList* _tmp214_;
5877 					gint _value_size = 0;
5878 					ValaArrayList* _tmp215_;
5879 					gint _tmp216_;
5880 					gint _tmp217_;
5881 					gint _value_index = 0;
5882 					_tmp212_ = vala_ccode_base_module_get_temp_ref_values (self);
5883 					_tmp213_ = _tmp212_;
5884 					_tmp214_ = _vala_iterable_ref0 (_tmp213_);
5885 					_value_list = _tmp214_;
5886 					_tmp215_ = _value_list;
5887 					_tmp216_ = vala_collection_get_size ((ValaCollection*) _tmp215_);
5888 					_tmp217_ = _tmp216_;
5889 					_value_size = _tmp217_;
5890 					_value_index = -1;
5891 					while (TRUE) {
5892 						gint _tmp218_;
5893 						gint _tmp219_;
5894 						ValaTargetValue* value = NULL;
5895 						ValaArrayList* _tmp220_;
5896 						gpointer _tmp221_;
5897 						ValaCCodeFunction* _tmp222_;
5898 						ValaCCodeFunction* _tmp223_;
5899 						ValaTargetValue* _tmp224_;
5900 						ValaCCodeExpression* _tmp225_;
5901 						ValaCCodeExpression* _tmp226_;
5902 						_value_index = _value_index + 1;
5903 						_tmp218_ = _value_index;
5904 						_tmp219_ = _value_size;
5905 						if (!(_tmp218_ < _tmp219_)) {
5906 							break;
5907 						}
5908 						_tmp220_ = _value_list;
5909 						_tmp221_ = vala_list_get ((ValaList*) _tmp220_, _value_index);
5910 						value = (ValaTargetValue*) _tmp221_;
5911 						_tmp222_ = vala_ccode_base_module_get_ccode (self);
5912 						_tmp223_ = _tmp222_;
5913 						_tmp224_ = value;
5914 						_tmp225_ = vala_ccode_base_module_destroy_value (self, _tmp224_, FALSE);
5915 						_tmp226_ = _tmp225_;
5916 						vala_ccode_function_add_expression (_tmp223_, _tmp226_);
5917 						_vala_ccode_node_unref0 (_tmp226_);
5918 						_vala_target_value_unref0 (value);
5919 					}
5920 					_vala_iterable_unref0 (_value_list);
5921 				}
5922 				_tmp227_ = vala_ccode_base_module_get_temp_ref_values (self);
5923 				_tmp228_ = _tmp227_;
5924 				vala_collection_clear ((ValaCollection*) _tmp228_);
5925 				vala_ccode_base_module_pop_context (self);
5926 				_vala_ccode_node_unref0 (rhs);
5927 			}
5928 		} else {
5929 			ValaCCodeFile* _tmp229_;
5930 			gboolean _tmp232_;
5931 			gboolean _tmp233_;
5932 			_tmp229_ = self->cfile;
5933 			vala_ccode_base_module_generate_field_declaration (self, f, _tmp229_);
5934 			if (!vala_symbol_is_internal_symbol ((ValaSymbol*) f)) {
5935 				ValaCCodeFile* _tmp230_;
5936 				_tmp230_ = self->header_file;
5937 				vala_ccode_base_module_generate_field_declaration (self, f, _tmp230_);
5938 			}
5939 			if (!vala_symbol_is_private_symbol ((ValaSymbol*) f)) {
5940 				ValaCCodeFile* _tmp231_;
5941 				_tmp231_ = self->internal_header_file;
5942 				vala_ccode_base_module_generate_field_declaration (self, f, _tmp231_);
5943 			}
5944 			_tmp232_ = vala_symbol_get_external ((ValaSymbol*) f);
5945 			_tmp233_ = _tmp232_;
5946 			if (!_tmp233_) {
5947 				gchar* _tmp234_;
5948 				gchar* _tmp235_;
5949 				ValaCCodeIdentifier* _tmp236_;
5950 				ValaCCodeVariableDeclarator* var_decl = NULL;
5951 				gchar* _tmp237_;
5952 				gchar* _tmp238_;
5953 				ValaDataType* _tmp239_;
5954 				ValaDataType* _tmp240_;
5955 				ValaCCodeDeclaratorSuffix* _tmp241_;
5956 				ValaCCodeDeclaratorSuffix* _tmp242_;
5957 				ValaCCodeVariableDeclarator* _tmp243_;
5958 				ValaCCodeVariableDeclarator* _tmp244_;
5959 				ValaCCodeVariableDeclarator* _tmp245_;
5960 				ValaDataType* _tmp246_;
5961 				ValaDataType* _tmp247_;
5962 				ValaCCodeExpression* _tmp248_;
5963 				ValaCCodeExpression* _tmp249_;
5964 				ValaCCodeBaseModuleEmitContext* _tmp250_;
5965 				ValaExpression* _tmp254_;
5966 				ValaExpression* _tmp255_;
5967 				ValaCCodeDeclaration* var_def = NULL;
5968 				ValaDataType* _tmp265_;
5969 				ValaDataType* _tmp266_;
5970 				gchar* _tmp267_;
5971 				gchar* _tmp268_;
5972 				ValaCCodeDeclaration* _tmp269_;
5973 				ValaCCodeDeclaration* _tmp270_;
5974 				ValaCCodeDeclaration* _tmp271_;
5975 				ValaCCodeVariableDeclarator* _tmp272_;
5976 				ValaVersionAttribute* _tmp275_;
5977 				ValaVersionAttribute* _tmp276_;
5978 				gboolean _tmp277_;
5979 				gboolean _tmp278_;
5980 				gboolean _tmp283_;
5981 				gboolean _tmp284_;
5982 				ValaCCodeFile* _tmp289_;
5983 				ValaCCodeDeclaration* _tmp290_;
5984 				gboolean _tmp291_ = FALSE;
5985 				ValaDataType* _tmp292_;
5986 				ValaDataType* _tmp293_;
5987 				ValaExpression* _tmp378_;
5988 				ValaExpression* _tmp379_;
5989 				_tmp234_ = vala_get_ccode_name ((ValaCodeNode*) f);
5990 				_tmp235_ = _tmp234_;
5991 				_tmp236_ = vala_ccode_identifier_new (_tmp235_);
5992 				_vala_ccode_node_unref0 (lhs);
5993 				lhs = (ValaCCodeExpression*) _tmp236_;
5994 				_g_free0 (_tmp235_);
5995 				_tmp237_ = vala_get_ccode_name ((ValaCodeNode*) f);
5996 				_tmp238_ = _tmp237_;
5997 				_tmp239_ = vala_variable_get_variable_type ((ValaVariable*) f);
5998 				_tmp240_ = _tmp239_;
5999 				_tmp241_ = vala_ccode_base_module_get_ccode_declarator_suffix (self, _tmp240_);
6000 				_tmp242_ = _tmp241_;
6001 				_tmp243_ = vala_ccode_variable_declarator_new (_tmp238_, NULL, _tmp242_);
6002 				_tmp244_ = _tmp243_;
6003 				_vala_ccode_declarator_suffix_unref0 (_tmp242_);
6004 				_g_free0 (_tmp238_);
6005 				var_decl = _tmp244_;
6006 				_tmp245_ = var_decl;
6007 				_tmp246_ = vala_variable_get_variable_type ((ValaVariable*) f);
6008 				_tmp247_ = _tmp246_;
6009 				_tmp248_ = vala_ccode_base_module_default_value_for_type (self, _tmp247_, TRUE, FALSE);
6010 				_tmp249_ = _tmp248_;
6011 				vala_ccode_variable_declarator_set_initializer (_tmp245_, _tmp249_);
6012 				_vala_ccode_node_unref0 (_tmp249_);
6013 				_tmp250_ = self->class_init_context;
6014 				if (_tmp250_ != NULL) {
6015 					ValaCCodeBaseModuleEmitContext* _tmp251_;
6016 					_tmp251_ = self->class_init_context;
6017 					vala_ccode_base_module_push_context (self, _tmp251_);
6018 				} else {
6019 					ValaCCodeBaseModuleEmitContext* _tmp252_;
6020 					ValaCCodeBaseModuleEmitContext* _tmp253_;
6021 					_tmp252_ = vala_ccode_base_module_emit_context_new (NULL);
6022 					_tmp253_ = _tmp252_;
6023 					vala_ccode_base_module_push_context (self, _tmp253_);
6024 					_vala_ccode_base_module_emit_context_unref0 (_tmp253_);
6025 				}
6026 				_tmp254_ = vala_variable_get_initializer ((ValaVariable*) f);
6027 				_tmp255_ = _tmp254_;
6028 				if (_tmp255_ != NULL) {
6029 					ValaExpression* _tmp256_;
6030 					ValaExpression* _tmp257_;
6031 					ValaCCodeExpression* init = NULL;
6032 					ValaExpression* _tmp258_;
6033 					ValaExpression* _tmp259_;
6034 					ValaCCodeExpression* _tmp260_;
6035 					ValaCCodeExpression* _tmp261_;
6036 					ValaCCodeExpression* _tmp262_;
6037 					_tmp256_ = vala_variable_get_initializer ((ValaVariable*) f);
6038 					_tmp257_ = _tmp256_;
6039 					vala_code_node_emit ((ValaCodeNode*) _tmp257_, (ValaCodeGenerator*) self);
6040 					_tmp258_ = vala_variable_get_initializer ((ValaVariable*) f);
6041 					_tmp259_ = _tmp258_;
6042 					_tmp260_ = vala_get_cvalue (_tmp259_);
6043 					_tmp261_ = _vala_ccode_node_ref0 (_tmp260_);
6044 					init = _tmp261_;
6045 					_tmp262_ = init;
6046 					if (vala_ccode_base_module_is_constant_ccode_expression (_tmp262_)) {
6047 						ValaCCodeVariableDeclarator* _tmp263_;
6048 						ValaCCodeExpression* _tmp264_;
6049 						_tmp263_ = var_decl;
6050 						_tmp264_ = init;
6051 						vala_ccode_variable_declarator_set_initializer (_tmp263_, _tmp264_);
6052 					}
6053 					_vala_ccode_node_unref0 (init);
6054 				}
6055 				_tmp265_ = vala_variable_get_variable_type ((ValaVariable*) f);
6056 				_tmp266_ = _tmp265_;
6057 				_tmp267_ = vala_get_ccode_name ((ValaCodeNode*) _tmp266_);
6058 				_tmp268_ = _tmp267_;
6059 				_tmp269_ = vala_ccode_declaration_new (_tmp268_);
6060 				_tmp270_ = _tmp269_;
6061 				_g_free0 (_tmp268_);
6062 				var_def = _tmp270_;
6063 				_tmp271_ = var_def;
6064 				_tmp272_ = var_decl;
6065 				vala_ccode_declaration_add_declarator (_tmp271_, (ValaCCodeDeclarator*) _tmp272_);
6066 				if (!vala_symbol_is_private_symbol ((ValaSymbol*) f)) {
6067 					ValaCCodeDeclaration* _tmp273_;
6068 					_tmp273_ = var_def;
6069 					vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp273_, VALA_CCODE_MODIFIERS_EXTERN);
6070 				} else {
6071 					ValaCCodeDeclaration* _tmp274_;
6072 					_tmp274_ = var_def;
6073 					vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp274_, VALA_CCODE_MODIFIERS_STATIC);
6074 				}
6075 				_tmp275_ = vala_symbol_get_version ((ValaSymbol*) f);
6076 				_tmp276_ = _tmp275_;
6077 				_tmp277_ = vala_version_attribute_get_deprecated (_tmp276_);
6078 				_tmp278_ = _tmp277_;
6079 				if (_tmp278_) {
6080 					ValaCCodeDeclaration* _tmp279_;
6081 					ValaCCodeDeclaration* _tmp280_;
6082 					ValaCCodeModifiers _tmp281_;
6083 					ValaCCodeModifiers _tmp282_;
6084 					_tmp279_ = var_def;
6085 					_tmp280_ = var_def;
6086 					_tmp281_ = vala_ccode_node_get_modifiers ((ValaCCodeNode*) _tmp280_);
6087 					_tmp282_ = _tmp281_;
6088 					vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp280_, _tmp282_ | VALA_CCODE_MODIFIERS_DEPRECATED);
6089 				}
6090 				_tmp283_ = vala_field_get_is_volatile (f);
6091 				_tmp284_ = _tmp283_;
6092 				if (_tmp284_) {
6093 					ValaCCodeDeclaration* _tmp285_;
6094 					ValaCCodeDeclaration* _tmp286_;
6095 					ValaCCodeModifiers _tmp287_;
6096 					ValaCCodeModifiers _tmp288_;
6097 					_tmp285_ = var_def;
6098 					_tmp286_ = var_def;
6099 					_tmp287_ = vala_ccode_node_get_modifiers ((ValaCCodeNode*) _tmp286_);
6100 					_tmp288_ = _tmp287_;
6101 					vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp286_, _tmp288_ | VALA_CCODE_MODIFIERS_VOLATILE);
6102 				}
6103 				_tmp289_ = self->cfile;
6104 				_tmp290_ = var_def;
6105 				vala_ccode_file_add_type_member_declaration (_tmp289_, (ValaCCodeNode*) _tmp290_);
6106 				_tmp292_ = vala_variable_get_variable_type ((ValaVariable*) f);
6107 				_tmp293_ = _tmp292_;
6108 				if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp293_, VALA_TYPE_ARRAY_TYPE)) {
6109 					_tmp291_ = vala_get_ccode_array_length ((ValaCodeNode*) f);
6110 				} else {
6111 					_tmp291_ = FALSE;
6112 				}
6113 				if (_tmp291_) {
6114 					ValaArrayType* array_type = NULL;
6115 					ValaDataType* _tmp294_;
6116 					ValaDataType* _tmp295_;
6117 					ValaArrayType* _tmp296_;
6118 					ValaArrayType* _tmp297_;
6119 					gboolean _tmp298_;
6120 					gboolean _tmp299_;
6121 					_tmp294_ = vala_variable_get_variable_type ((ValaVariable*) f);
6122 					_tmp295_ = _tmp294_;
6123 					_tmp296_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp295_, VALA_TYPE_ARRAY_TYPE, ValaArrayType));
6124 					array_type = _tmp296_;
6125 					_tmp297_ = array_type;
6126 					_tmp298_ = vala_array_type_get_fixed_length (_tmp297_);
6127 					_tmp299_ = _tmp298_;
6128 					if (!_tmp299_) {
6129 						gchar* length_ctype = NULL;
6130 						gchar* _tmp300_;
6131 						gboolean _tmp319_ = FALSE;
6132 						ValaArrayType* _tmp320_;
6133 						gint _tmp321_;
6134 						gint _tmp322_;
6135 						_tmp300_ = vala_get_ccode_array_length_type ((ValaCodeNode*) f);
6136 						length_ctype = _tmp300_;
6137 						{
6138 							gint dim = 0;
6139 							dim = 1;
6140 							{
6141 								gboolean _tmp301_ = FALSE;
6142 								_tmp301_ = TRUE;
6143 								while (TRUE) {
6144 									ValaArrayType* _tmp303_;
6145 									gint _tmp304_;
6146 									gint _tmp305_;
6147 									ValaCCodeDeclaration* len_def = NULL;
6148 									const gchar* _tmp306_;
6149 									ValaCCodeDeclaration* _tmp307_;
6150 									ValaCCodeDeclaration* _tmp308_;
6151 									gchar* _tmp309_;
6152 									gchar* _tmp310_;
6153 									ValaCCodeConstant* _tmp311_;
6154 									ValaCCodeConstant* _tmp312_;
6155 									ValaCCodeVariableDeclarator* _tmp313_;
6156 									ValaCCodeVariableDeclarator* _tmp314_;
6157 									ValaCCodeFile* _tmp317_;
6158 									ValaCCodeDeclaration* _tmp318_;
6159 									if (!_tmp301_) {
6160 										gint _tmp302_;
6161 										_tmp302_ = dim;
6162 										dim = _tmp302_ + 1;
6163 									}
6164 									_tmp301_ = FALSE;
6165 									_tmp303_ = array_type;
6166 									_tmp304_ = vala_array_type_get_rank (_tmp303_);
6167 									_tmp305_ = _tmp304_;
6168 									if (!(dim <= _tmp305_)) {
6169 										break;
6170 									}
6171 									_tmp306_ = length_ctype;
6172 									_tmp307_ = vala_ccode_declaration_new (_tmp306_);
6173 									len_def = _tmp307_;
6174 									_tmp308_ = len_def;
6175 									_tmp309_ = vala_ccode_base_module_get_variable_array_length_cname (self, (ValaVariable*) f, dim);
6176 									_tmp310_ = _tmp309_;
6177 									_tmp311_ = vala_ccode_constant_new ("0");
6178 									_tmp312_ = _tmp311_;
6179 									_tmp313_ = vala_ccode_variable_declarator_new (_tmp310_, (ValaCCodeExpression*) _tmp312_, NULL);
6180 									_tmp314_ = _tmp313_;
6181 									vala_ccode_declaration_add_declarator (_tmp308_, (ValaCCodeDeclarator*) _tmp314_);
6182 									_vala_ccode_node_unref0 (_tmp314_);
6183 									_vala_ccode_node_unref0 (_tmp312_);
6184 									_g_free0 (_tmp310_);
6185 									if (!vala_symbol_is_private_symbol ((ValaSymbol*) f)) {
6186 										ValaCCodeDeclaration* _tmp315_;
6187 										_tmp315_ = len_def;
6188 										vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp315_, VALA_CCODE_MODIFIERS_EXTERN);
6189 									} else {
6190 										ValaCCodeDeclaration* _tmp316_;
6191 										_tmp316_ = len_def;
6192 										vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp316_, VALA_CCODE_MODIFIERS_STATIC);
6193 									}
6194 									_tmp317_ = self->cfile;
6195 									_tmp318_ = len_def;
6196 									vala_ccode_file_add_type_member_declaration (_tmp317_, (ValaCCodeNode*) _tmp318_);
6197 									_vala_ccode_node_unref0 (len_def);
6198 								}
6199 							}
6200 						}
6201 						_tmp320_ = array_type;
6202 						_tmp321_ = vala_array_type_get_rank (_tmp320_);
6203 						_tmp322_ = _tmp321_;
6204 						if (_tmp322_ == 1) {
6205 							_tmp319_ = vala_symbol_is_internal_symbol ((ValaSymbol*) f);
6206 						} else {
6207 							_tmp319_ = FALSE;
6208 						}
6209 						if (_tmp319_) {
6210 							ValaCCodeDeclaration* _cdecl_ = NULL;
6211 							const gchar* _tmp323_;
6212 							ValaCCodeDeclaration* _tmp324_;
6213 							ValaCCodeDeclaration* _tmp325_;
6214 							gchar* _tmp326_;
6215 							gchar* _tmp327_;
6216 							gchar* _tmp328_;
6217 							gchar* _tmp329_;
6218 							ValaCCodeConstant* _tmp330_;
6219 							ValaCCodeConstant* _tmp331_;
6220 							ValaCCodeVariableDeclarator* _tmp332_;
6221 							ValaCCodeVariableDeclarator* _tmp333_;
6222 							ValaCCodeDeclaration* _tmp334_;
6223 							ValaCCodeFile* _tmp335_;
6224 							ValaCCodeDeclaration* _tmp336_;
6225 							_tmp323_ = length_ctype;
6226 							_tmp324_ = vala_ccode_declaration_new (_tmp323_);
6227 							_cdecl_ = _tmp324_;
6228 							_tmp325_ = _cdecl_;
6229 							_tmp326_ = vala_get_ccode_name ((ValaCodeNode*) f);
6230 							_tmp327_ = _tmp326_;
6231 							_tmp328_ = vala_ccode_base_module_get_array_size_cname (self, _tmp327_);
6232 							_tmp329_ = _tmp328_;
6233 							_tmp330_ = vala_ccode_constant_new ("0");
6234 							_tmp331_ = _tmp330_;
6235 							_tmp332_ = vala_ccode_variable_declarator_new (_tmp329_, (ValaCCodeExpression*) _tmp331_, NULL);
6236 							_tmp333_ = _tmp332_;
6237 							vala_ccode_declaration_add_declarator (_tmp325_, (ValaCCodeDeclarator*) _tmp333_);
6238 							_vala_ccode_node_unref0 (_tmp333_);
6239 							_vala_ccode_node_unref0 (_tmp331_);
6240 							_g_free0 (_tmp329_);
6241 							_g_free0 (_tmp327_);
6242 							_tmp334_ = _cdecl_;
6243 							vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp334_, VALA_CCODE_MODIFIERS_STATIC);
6244 							_tmp335_ = self->cfile;
6245 							_tmp336_ = _cdecl_;
6246 							vala_ccode_file_add_type_member_declaration (_tmp335_, (ValaCCodeNode*) _tmp336_);
6247 							_vala_ccode_node_unref0 (_cdecl_);
6248 						}
6249 						_g_free0 (length_ctype);
6250 					}
6251 					_vala_code_node_unref0 (array_type);
6252 				} else {
6253 					if (vala_get_ccode_delegate_target ((ValaCodeNode*) f)) {
6254 						ValaDelegateType* delegate_type = NULL;
6255 						ValaDataType* _tmp337_;
6256 						ValaDataType* _tmp338_;
6257 						ValaDelegateType* _tmp339_;
6258 						ValaDelegateType* _tmp340_;
6259 						ValaDelegate* _tmp341_;
6260 						ValaDelegate* _tmp342_;
6261 						gboolean _tmp343_;
6262 						gboolean _tmp344_;
6263 						_tmp337_ = vala_variable_get_variable_type ((ValaVariable*) f);
6264 						_tmp338_ = _tmp337_;
6265 						_tmp339_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp338_, VALA_TYPE_DELEGATE_TYPE, ValaDelegateType));
6266 						delegate_type = _tmp339_;
6267 						_tmp340_ = delegate_type;
6268 						_tmp341_ = vala_delegate_type_get_delegate_symbol (_tmp340_);
6269 						_tmp342_ = _tmp341_;
6270 						_tmp343_ = vala_delegate_get_has_target (_tmp342_);
6271 						_tmp344_ = _tmp343_;
6272 						if (_tmp344_) {
6273 							ValaCCodeDeclaration* target_def = NULL;
6274 							ValaDataType* _tmp345_;
6275 							gchar* _tmp346_;
6276 							gchar* _tmp347_;
6277 							ValaCCodeDeclaration* _tmp348_;
6278 							ValaCCodeDeclaration* _tmp349_;
6279 							ValaCCodeDeclaration* _tmp350_;
6280 							gchar* _tmp351_;
6281 							gchar* _tmp352_;
6282 							ValaCCodeConstant* _tmp353_;
6283 							ValaCCodeConstant* _tmp354_;
6284 							ValaCCodeVariableDeclarator* _tmp355_;
6285 							ValaCCodeVariableDeclarator* _tmp356_;
6286 							ValaCCodeFile* _tmp359_;
6287 							ValaCCodeDeclaration* _tmp360_;
6288 							ValaDelegateType* _tmp361_;
6289 							_tmp345_ = self->delegate_target_type;
6290 							_tmp346_ = vala_get_ccode_name ((ValaCodeNode*) _tmp345_);
6291 							_tmp347_ = _tmp346_;
6292 							_tmp348_ = vala_ccode_declaration_new (_tmp347_);
6293 							_tmp349_ = _tmp348_;
6294 							_g_free0 (_tmp347_);
6295 							target_def = _tmp349_;
6296 							_tmp350_ = target_def;
6297 							_tmp351_ = vala_get_ccode_delegate_target_name ((ValaVariable*) f);
6298 							_tmp352_ = _tmp351_;
6299 							_tmp353_ = vala_ccode_constant_new ("NULL");
6300 							_tmp354_ = _tmp353_;
6301 							_tmp355_ = vala_ccode_variable_declarator_new (_tmp352_, (ValaCCodeExpression*) _tmp354_, NULL);
6302 							_tmp356_ = _tmp355_;
6303 							vala_ccode_declaration_add_declarator (_tmp350_, (ValaCCodeDeclarator*) _tmp356_);
6304 							_vala_ccode_node_unref0 (_tmp356_);
6305 							_vala_ccode_node_unref0 (_tmp354_);
6306 							_g_free0 (_tmp352_);
6307 							if (!vala_symbol_is_private_symbol ((ValaSymbol*) f)) {
6308 								ValaCCodeDeclaration* _tmp357_;
6309 								_tmp357_ = target_def;
6310 								vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp357_, VALA_CCODE_MODIFIERS_EXTERN);
6311 							} else {
6312 								ValaCCodeDeclaration* _tmp358_;
6313 								_tmp358_ = target_def;
6314 								vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp358_, VALA_CCODE_MODIFIERS_STATIC);
6315 							}
6316 							_tmp359_ = self->cfile;
6317 							_tmp360_ = target_def;
6318 							vala_ccode_file_add_type_member_declaration (_tmp359_, (ValaCCodeNode*) _tmp360_);
6319 							_tmp361_ = delegate_type;
6320 							if (vala_data_type_is_disposable ((ValaDataType*) _tmp361_)) {
6321 								ValaCCodeDeclaration* target_destroy_notify_def = NULL;
6322 								ValaDelegateType* _tmp362_;
6323 								gchar* _tmp363_;
6324 								gchar* _tmp364_;
6325 								ValaCCodeDeclaration* _tmp365_;
6326 								ValaCCodeDeclaration* _tmp366_;
6327 								ValaCCodeDeclaration* _tmp367_;
6328 								gchar* _tmp368_;
6329 								gchar* _tmp369_;
6330 								ValaCCodeConstant* _tmp370_;
6331 								ValaCCodeConstant* _tmp371_;
6332 								ValaCCodeVariableDeclarator* _tmp372_;
6333 								ValaCCodeVariableDeclarator* _tmp373_;
6334 								ValaCCodeFile* _tmp376_;
6335 								ValaCCodeDeclaration* _tmp377_;
6336 								_tmp362_ = self->delegate_target_destroy_type;
6337 								_tmp363_ = vala_get_ccode_name ((ValaCodeNode*) _tmp362_);
6338 								_tmp364_ = _tmp363_;
6339 								_tmp365_ = vala_ccode_declaration_new (_tmp364_);
6340 								_tmp366_ = _tmp365_;
6341 								_g_free0 (_tmp364_);
6342 								target_destroy_notify_def = _tmp366_;
6343 								_tmp367_ = target_destroy_notify_def;
6344 								_tmp368_ = vala_get_ccode_delegate_target_destroy_notify_name ((ValaVariable*) f);
6345 								_tmp369_ = _tmp368_;
6346 								_tmp370_ = vala_ccode_constant_new ("NULL");
6347 								_tmp371_ = _tmp370_;
6348 								_tmp372_ = vala_ccode_variable_declarator_new (_tmp369_, (ValaCCodeExpression*) _tmp371_, NULL);
6349 								_tmp373_ = _tmp372_;
6350 								vala_ccode_declaration_add_declarator (_tmp367_, (ValaCCodeDeclarator*) _tmp373_);
6351 								_vala_ccode_node_unref0 (_tmp373_);
6352 								_vala_ccode_node_unref0 (_tmp371_);
6353 								_g_free0 (_tmp369_);
6354 								if (!vala_symbol_is_private_symbol ((ValaSymbol*) f)) {
6355 									ValaCCodeDeclaration* _tmp374_;
6356 									_tmp374_ = target_destroy_notify_def;
6357 									vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp374_, VALA_CCODE_MODIFIERS_EXTERN);
6358 								} else {
6359 									ValaCCodeDeclaration* _tmp375_;
6360 									_tmp375_ = target_destroy_notify_def;
6361 									vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp375_, VALA_CCODE_MODIFIERS_STATIC);
6362 								}
6363 								_tmp376_ = self->cfile;
6364 								_tmp377_ = target_destroy_notify_def;
6365 								vala_ccode_file_add_type_member_declaration (_tmp376_, (ValaCCodeNode*) _tmp377_);
6366 								_vala_ccode_node_unref0 (target_destroy_notify_def);
6367 							}
6368 							_vala_ccode_node_unref0 (target_def);
6369 						}
6370 						_vala_code_node_unref0 (delegate_type);
6371 					}
6372 				}
6373 				_tmp378_ = vala_variable_get_initializer ((ValaVariable*) f);
6374 				_tmp379_ = _tmp378_;
6375 				if (_tmp379_ != NULL) {
6376 					ValaCCodeExpression* rhs = NULL;
6377 					ValaExpression* _tmp380_;
6378 					ValaExpression* _tmp381_;
6379 					ValaCCodeExpression* _tmp382_;
6380 					ValaCCodeExpression* _tmp383_;
6381 					ValaCCodeExpression* _tmp384_;
6382 					_tmp380_ = vala_variable_get_initializer ((ValaVariable*) f);
6383 					_tmp381_ = _tmp380_;
6384 					_tmp382_ = vala_get_cvalue (_tmp381_);
6385 					_tmp383_ = _vala_ccode_node_ref0 (_tmp382_);
6386 					rhs = _tmp383_;
6387 					_tmp384_ = rhs;
6388 					if (!vala_ccode_base_module_is_constant_ccode_expression (_tmp384_)) {
6389 						if (is_gtypeinstance) {
6390 							ValaExpression* _tmp385_;
6391 							ValaExpression* _tmp386_;
6392 							gboolean _tmp422_ = FALSE;
6393 							ValaDataType* _tmp423_;
6394 							ValaDataType* _tmp424_;
6395 							_tmp385_ = vala_variable_get_initializer ((ValaVariable*) f);
6396 							_tmp386_ = _tmp385_;
6397 							if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp386_, VALA_TYPE_INITIALIZER_LIST)) {
6398 								ValaCCodeFunction* _tmp387_;
6399 								ValaCCodeFunction* _tmp388_;
6400 								ValaLocalVariable* temp_decl = NULL;
6401 								ValaDataType* _tmp389_;
6402 								ValaDataType* _tmp390_;
6403 								ValaLocalVariable* _tmp391_;
6404 								ValaCCodeVariableDeclarator* vardecl = NULL;
6405 								ValaLocalVariable* _tmp392_;
6406 								const gchar* _tmp393_;
6407 								const gchar* _tmp394_;
6408 								ValaCCodeExpression* _tmp395_;
6409 								ValaCCodeVariableDeclarator* _tmp396_;
6410 								ValaCCodeFunction* _tmp397_;
6411 								ValaCCodeFunction* _tmp398_;
6412 								ValaLocalVariable* _tmp399_;
6413 								ValaDataType* _tmp400_;
6414 								ValaDataType* _tmp401_;
6415 								gchar* _tmp402_;
6416 								gchar* _tmp403_;
6417 								ValaCCodeVariableDeclarator* _tmp404_;
6418 								ValaCCodeExpression* tmp = NULL;
6419 								ValaLocalVariable* _tmp405_;
6420 								const gchar* _tmp406_;
6421 								const gchar* _tmp407_;
6422 								gchar* _tmp408_;
6423 								gchar* _tmp409_;
6424 								ValaCCodeExpression* _tmp410_;
6425 								ValaCCodeExpression* _tmp411_;
6426 								ValaCCodeFunction* _tmp412_;
6427 								ValaCCodeFunction* _tmp413_;
6428 								ValaCCodeExpression* _tmp414_;
6429 								ValaCCodeExpression* _tmp415_;
6430 								ValaCCodeFunction* _tmp416_;
6431 								ValaCCodeFunction* _tmp417_;
6432 								_tmp387_ = vala_ccode_base_module_get_ccode (self);
6433 								_tmp388_ = _tmp387_;
6434 								vala_ccode_function_open_block (_tmp388_);
6435 								_tmp389_ = vala_variable_get_variable_type ((ValaVariable*) f);
6436 								_tmp390_ = _tmp389_;
6437 								_tmp391_ = vala_ccode_base_module_get_temp_variable (self, _tmp390_, TRUE, NULL, FALSE);
6438 								temp_decl = _tmp391_;
6439 								_tmp392_ = temp_decl;
6440 								_tmp393_ = vala_symbol_get_name ((ValaSymbol*) _tmp392_);
6441 								_tmp394_ = _tmp393_;
6442 								_tmp395_ = rhs;
6443 								_tmp396_ = vala_ccode_variable_declarator_new_zero (_tmp394_, _tmp395_, NULL);
6444 								vardecl = _tmp396_;
6445 								_tmp397_ = vala_ccode_base_module_get_ccode (self);
6446 								_tmp398_ = _tmp397_;
6447 								_tmp399_ = temp_decl;
6448 								_tmp400_ = vala_variable_get_variable_type ((ValaVariable*) _tmp399_);
6449 								_tmp401_ = _tmp400_;
6450 								_tmp402_ = vala_get_ccode_name ((ValaCodeNode*) _tmp401_);
6451 								_tmp403_ = _tmp402_;
6452 								_tmp404_ = vardecl;
6453 								vala_ccode_function_add_declaration (_tmp398_, _tmp403_, (ValaCCodeDeclarator*) _tmp404_, 0);
6454 								_g_free0 (_tmp403_);
6455 								_tmp405_ = temp_decl;
6456 								_tmp406_ = vala_symbol_get_name ((ValaSymbol*) _tmp405_);
6457 								_tmp407_ = _tmp406_;
6458 								_tmp408_ = vala_ccode_base_module_get_variable_cname (self, _tmp407_);
6459 								_tmp409_ = _tmp408_;
6460 								_tmp410_ = vala_ccode_base_module_get_variable_cexpression (self, _tmp409_);
6461 								_tmp411_ = _tmp410_;
6462 								_g_free0 (_tmp409_);
6463 								tmp = _tmp411_;
6464 								_tmp412_ = vala_ccode_base_module_get_ccode (self);
6465 								_tmp413_ = _tmp412_;
6466 								_tmp414_ = lhs;
6467 								_tmp415_ = tmp;
6468 								vala_ccode_function_add_assignment (_tmp413_, _tmp414_, _tmp415_);
6469 								_tmp416_ = vala_ccode_base_module_get_ccode (self);
6470 								_tmp417_ = _tmp416_;
6471 								vala_ccode_function_close (_tmp417_);
6472 								_vala_ccode_node_unref0 (tmp);
6473 								_vala_ccode_node_unref0 (vardecl);
6474 								_vala_code_node_unref0 (temp_decl);
6475 							} else {
6476 								ValaCCodeFunction* _tmp418_;
6477 								ValaCCodeFunction* _tmp419_;
6478 								ValaCCodeExpression* _tmp420_;
6479 								ValaCCodeExpression* _tmp421_;
6480 								_tmp418_ = vala_ccode_base_module_get_ccode (self);
6481 								_tmp419_ = _tmp418_;
6482 								_tmp420_ = lhs;
6483 								_tmp421_ = rhs;
6484 								vala_ccode_function_add_assignment (_tmp419_, _tmp420_, _tmp421_);
6485 							}
6486 							_tmp423_ = vala_variable_get_variable_type ((ValaVariable*) f);
6487 							_tmp424_ = _tmp423_;
6488 							if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp424_, VALA_TYPE_ARRAY_TYPE)) {
6489 								_tmp422_ = vala_get_ccode_array_length ((ValaCodeNode*) f);
6490 							} else {
6491 								_tmp422_ = FALSE;
6492 							}
6493 							if (_tmp422_) {
6494 								ValaArrayType* array_type = NULL;
6495 								ValaDataType* _tmp425_;
6496 								ValaDataType* _tmp426_;
6497 								ValaArrayType* _tmp427_;
6498 								ValaTargetValue* field_value = NULL;
6499 								ValaTargetValue* _tmp428_;
6500 								ValaGLibValue* glib_value = NULL;
6501 								ValaExpression* _tmp429_;
6502 								ValaExpression* _tmp430_;
6503 								ValaTargetValue* _tmp431_;
6504 								ValaTargetValue* _tmp432_;
6505 								ValaGLibValue* _tmp433_;
6506 								ValaGLibValue* _tmp434_;
6507 								ValaList* _tmp435_;
6508 								_tmp425_ = vala_variable_get_variable_type ((ValaVariable*) f);
6509 								_tmp426_ = _tmp425_;
6510 								_tmp427_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp426_, VALA_TYPE_ARRAY_TYPE, ValaArrayType));
6511 								array_type = _tmp427_;
6512 								_tmp428_ = vala_ccode_base_module_get_field_cvalue (self, f, NULL);
6513 								field_value = _tmp428_;
6514 								_tmp429_ = vala_variable_get_initializer ((ValaVariable*) f);
6515 								_tmp430_ = _tmp429_;
6516 								_tmp431_ = vala_expression_get_target_value (_tmp430_);
6517 								_tmp432_ = _tmp431_;
6518 								_tmp433_ = _vala_target_value_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp432_, VALA_TYPE_GLIB_VALUE, ValaGLibValue));
6519 								glib_value = _tmp433_;
6520 								_tmp434_ = glib_value;
6521 								_tmp435_ = _tmp434_->array_length_cvalues;
6522 								if (_tmp435_ != NULL) {
6523 									{
6524 										gint dim = 0;
6525 										dim = 1;
6526 										{
6527 											gboolean _tmp436_ = FALSE;
6528 											_tmp436_ = TRUE;
6529 											while (TRUE) {
6530 												ValaArrayType* _tmp438_;
6531 												gint _tmp439_;
6532 												gint _tmp440_;
6533 												ValaCCodeExpression* array_len_lhs = NULL;
6534 												ValaTargetValue* _tmp441_;
6535 												ValaCCodeExpression* _tmp442_;
6536 												ValaCCodeFunction* _tmp443_;
6537 												ValaCCodeFunction* _tmp444_;
6538 												ValaCCodeExpression* _tmp445_;
6539 												ValaGLibValue* _tmp446_;
6540 												ValaCCodeExpression* _tmp447_;
6541 												ValaCCodeExpression* _tmp448_;
6542 												if (!_tmp436_) {
6543 													gint _tmp437_;
6544 													_tmp437_ = dim;
6545 													dim = _tmp437_ + 1;
6546 												}
6547 												_tmp436_ = FALSE;
6548 												_tmp438_ = array_type;
6549 												_tmp439_ = vala_array_type_get_rank (_tmp438_);
6550 												_tmp440_ = _tmp439_;
6551 												if (!(dim <= _tmp440_)) {
6552 													break;
6553 												}
6554 												_tmp441_ = field_value;
6555 												_tmp442_ = vala_ccode_base_module_get_array_length_cvalue (self, _tmp441_, dim);
6556 												array_len_lhs = _tmp442_;
6557 												_tmp443_ = vala_ccode_base_module_get_ccode (self);
6558 												_tmp444_ = _tmp443_;
6559 												_tmp445_ = array_len_lhs;
6560 												_tmp446_ = glib_value;
6561 												_tmp447_ = vala_ccode_base_module_get_array_length_cvalue (self, (ValaTargetValue*) _tmp446_, dim);
6562 												_tmp448_ = _tmp447_;
6563 												vala_ccode_function_add_assignment (_tmp444_, _tmp445_, _tmp448_);
6564 												_vala_ccode_node_unref0 (_tmp448_);
6565 												_vala_ccode_node_unref0 (array_len_lhs);
6566 											}
6567 										}
6568 									}
6569 								} else {
6570 									ValaGLibValue* _tmp449_;
6571 									_tmp449_ = glib_value;
6572 									if (_tmp449_->array_null_terminated) {
6573 										ValaCCodeFunctionCall* len_call = NULL;
6574 										ValaCCodeIdentifier* _tmp450_;
6575 										ValaCCodeIdentifier* _tmp451_;
6576 										ValaCCodeFunctionCall* _tmp452_;
6577 										ValaCCodeFunctionCall* _tmp453_;
6578 										ValaCCodeFunctionCall* _tmp454_;
6579 										ValaGLibValue* _tmp455_;
6580 										ValaCCodeExpression* _tmp456_;
6581 										ValaCCodeFunction* _tmp457_;
6582 										ValaCCodeFunction* _tmp458_;
6583 										ValaTargetValue* _tmp459_;
6584 										ValaCCodeExpression* _tmp460_;
6585 										ValaCCodeExpression* _tmp461_;
6586 										ValaCCodeFunctionCall* _tmp462_;
6587 										self->requires_array_length = TRUE;
6588 										_tmp450_ = vala_ccode_identifier_new ("_vala_array_length");
6589 										_tmp451_ = _tmp450_;
6590 										_tmp452_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp451_);
6591 										_tmp453_ = _tmp452_;
6592 										_vala_ccode_node_unref0 (_tmp451_);
6593 										len_call = _tmp453_;
6594 										_tmp454_ = len_call;
6595 										_tmp455_ = glib_value;
6596 										_tmp456_ = vala_get_cvalue_ ((ValaTargetValue*) _tmp455_);
6597 										vala_ccode_function_call_add_argument (_tmp454_, _tmp456_);
6598 										_tmp457_ = vala_ccode_base_module_get_ccode (self);
6599 										_tmp458_ = _tmp457_;
6600 										_tmp459_ = field_value;
6601 										_tmp460_ = vala_ccode_base_module_get_array_length_cvalue (self, _tmp459_, 1);
6602 										_tmp461_ = _tmp460_;
6603 										_tmp462_ = len_call;
6604 										vala_ccode_function_add_assignment (_tmp458_, _tmp461_, (ValaCCodeExpression*) _tmp462_);
6605 										_vala_ccode_node_unref0 (_tmp461_);
6606 										_vala_ccode_node_unref0 (len_call);
6607 									} else {
6608 										{
6609 											gint dim = 0;
6610 											dim = 1;
6611 											{
6612 												gboolean _tmp463_ = FALSE;
6613 												_tmp463_ = TRUE;
6614 												while (TRUE) {
6615 													ValaArrayType* _tmp465_;
6616 													gint _tmp466_;
6617 													gint _tmp467_;
6618 													ValaCCodeFunction* _tmp468_;
6619 													ValaCCodeFunction* _tmp469_;
6620 													ValaTargetValue* _tmp470_;
6621 													ValaCCodeExpression* _tmp471_;
6622 													ValaCCodeExpression* _tmp472_;
6623 													ValaCCodeConstant* _tmp473_;
6624 													ValaCCodeConstant* _tmp474_;
6625 													if (!_tmp463_) {
6626 														gint _tmp464_;
6627 														_tmp464_ = dim;
6628 														dim = _tmp464_ + 1;
6629 													}
6630 													_tmp463_ = FALSE;
6631 													_tmp465_ = array_type;
6632 													_tmp466_ = vala_array_type_get_rank (_tmp465_);
6633 													_tmp467_ = _tmp466_;
6634 													if (!(dim <= _tmp467_)) {
6635 														break;
6636 													}
6637 													_tmp468_ = vala_ccode_base_module_get_ccode (self);
6638 													_tmp469_ = _tmp468_;
6639 													_tmp470_ = field_value;
6640 													_tmp471_ = vala_ccode_base_module_get_array_length_cvalue (self, _tmp470_, dim);
6641 													_tmp472_ = _tmp471_;
6642 													_tmp473_ = vala_ccode_constant_new ("-1");
6643 													_tmp474_ = _tmp473_;
6644 													vala_ccode_function_add_assignment (_tmp469_, _tmp472_, (ValaCCodeExpression*) _tmp474_);
6645 													_vala_ccode_node_unref0 (_tmp474_);
6646 													_vala_ccode_node_unref0 (_tmp472_);
6647 												}
6648 											}
6649 										}
6650 									}
6651 								}
6652 								_vala_target_value_unref0 (glib_value);
6653 								_vala_target_value_unref0 (field_value);
6654 								_vala_code_node_unref0 (array_type);
6655 							}
6656 						} else {
6657 							ValaSourceReference* _tmp475_;
6658 							ValaSourceReference* _tmp476_;
6659 							vala_code_node_set_error ((ValaCodeNode*) f, TRUE);
6660 							_tmp475_ = vala_code_node_get_source_reference ((ValaCodeNode*) f);
6661 							_tmp476_ = _tmp475_;
6662 							vala_report_error (_tmp476_, "Non-constant field initializers not supported in this context");
6663 							_vala_ccode_node_unref0 (rhs);
6664 							_vala_ccode_node_unref0 (var_def);
6665 							_vala_ccode_node_unref0 (var_decl);
6666 							_vala_ccode_node_unref0 (lhs);
6667 							_vala_code_node_unref0 (cl);
6668 							return;
6669 						}
6670 					}
6671 					_vala_ccode_node_unref0 (rhs);
6672 				}
6673 				vala_ccode_base_module_pop_context (self);
6674 				_vala_ccode_node_unref0 (var_def);
6675 				_vala_ccode_node_unref0 (var_decl);
6676 			}
6677 		}
6678 	}
6679 	vala_ccode_base_module_pop_line (self);
6680 	_vala_ccode_node_unref0 (lhs);
6681 	_vala_code_node_unref0 (cl);
6682 }
6683 
6684 gboolean
vala_ccode_base_module_is_constant_ccode_expression(ValaCCodeExpression * cexpr)6685 vala_ccode_base_module_is_constant_ccode_expression (ValaCCodeExpression* cexpr)
6686 {
6687 	ValaCCodeParenthesizedExpression* cparenthesized = NULL;
6688 	ValaCCodeParenthesizedExpression* _tmp19_;
6689 	gboolean _tmp20_ = FALSE;
6690 	ValaCCodeParenthesizedExpression* _tmp21_;
6691 	gboolean result = FALSE;
6692 	g_return_val_if_fail (cexpr != NULL, FALSE);
6693 	if (G_TYPE_CHECK_INSTANCE_TYPE (cexpr, VALA_TYPE_CCODE_CONSTANT)) {
6694 		result = TRUE;
6695 		return result;
6696 	} else {
6697 		if (G_TYPE_CHECK_INSTANCE_TYPE (cexpr, VALA_TYPE_CCODE_CAST_EXPRESSION)) {
6698 			ValaCCodeCastExpression* ccast = NULL;
6699 			ValaCCodeCastExpression* _tmp0_;
6700 			ValaCCodeCastExpression* _tmp1_;
6701 			ValaCCodeExpression* _tmp2_;
6702 			ValaCCodeExpression* _tmp3_;
6703 			_tmp0_ = _vala_ccode_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (cexpr, VALA_TYPE_CCODE_CAST_EXPRESSION, ValaCCodeCastExpression));
6704 			ccast = _tmp0_;
6705 			_tmp1_ = ccast;
6706 			_tmp2_ = vala_ccode_cast_expression_get_inner (_tmp1_);
6707 			_tmp3_ = _tmp2_;
6708 			result = vala_ccode_base_module_is_constant_ccode_expression (_tmp3_);
6709 			_vala_ccode_node_unref0 (ccast);
6710 			return result;
6711 		} else {
6712 			if (G_TYPE_CHECK_INSTANCE_TYPE (cexpr, VALA_TYPE_CCODE_UNARY_EXPRESSION)) {
6713 				ValaCCodeUnaryExpression* cunary = NULL;
6714 				ValaCCodeUnaryExpression* _tmp4_;
6715 				ValaCCodeUnaryExpression* _tmp5_;
6716 				ValaCCodeUnaryOperator _tmp6_;
6717 				ValaCCodeUnaryOperator _tmp7_;
6718 				ValaCCodeUnaryExpression* _tmp8_;
6719 				ValaCCodeExpression* _tmp9_;
6720 				ValaCCodeExpression* _tmp10_;
6721 				_tmp4_ = _vala_ccode_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (cexpr, VALA_TYPE_CCODE_UNARY_EXPRESSION, ValaCCodeUnaryExpression));
6722 				cunary = _tmp4_;
6723 				_tmp5_ = cunary;
6724 				_tmp6_ = vala_ccode_unary_expression_get_operator (_tmp5_);
6725 				_tmp7_ = _tmp6_;
6726 				switch (_tmp7_) {
6727 					case VALA_CCODE_UNARY_OPERATOR_PREFIX_INCREMENT:
6728 					case VALA_CCODE_UNARY_OPERATOR_PREFIX_DECREMENT:
6729 					case VALA_CCODE_UNARY_OPERATOR_POSTFIX_INCREMENT:
6730 					case VALA_CCODE_UNARY_OPERATOR_POSTFIX_DECREMENT:
6731 					{
6732 						result = FALSE;
6733 						_vala_ccode_node_unref0 (cunary);
6734 						return result;
6735 					}
6736 					default:
6737 					{
6738 						break;
6739 					}
6740 				}
6741 				_tmp8_ = cunary;
6742 				_tmp9_ = vala_ccode_unary_expression_get_inner (_tmp8_);
6743 				_tmp10_ = _tmp9_;
6744 				result = vala_ccode_base_module_is_constant_ccode_expression (_tmp10_);
6745 				_vala_ccode_node_unref0 (cunary);
6746 				return result;
6747 			} else {
6748 				if (G_TYPE_CHECK_INSTANCE_TYPE (cexpr, VALA_TYPE_CCODE_BINARY_EXPRESSION)) {
6749 					ValaCCodeBinaryExpression* cbinary = NULL;
6750 					ValaCCodeBinaryExpression* _tmp11_;
6751 					gboolean _tmp12_ = FALSE;
6752 					ValaCCodeBinaryExpression* _tmp13_;
6753 					ValaCCodeExpression* _tmp14_;
6754 					ValaCCodeExpression* _tmp15_;
6755 					_tmp11_ = _vala_ccode_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (cexpr, VALA_TYPE_CCODE_BINARY_EXPRESSION, ValaCCodeBinaryExpression));
6756 					cbinary = _tmp11_;
6757 					_tmp13_ = cbinary;
6758 					_tmp14_ = vala_ccode_binary_expression_get_left (_tmp13_);
6759 					_tmp15_ = _tmp14_;
6760 					if (vala_ccode_base_module_is_constant_ccode_expression (_tmp15_)) {
6761 						ValaCCodeBinaryExpression* _tmp16_;
6762 						ValaCCodeExpression* _tmp17_;
6763 						ValaCCodeExpression* _tmp18_;
6764 						_tmp16_ = cbinary;
6765 						_tmp17_ = vala_ccode_binary_expression_get_right (_tmp16_);
6766 						_tmp18_ = _tmp17_;
6767 						_tmp12_ = vala_ccode_base_module_is_constant_ccode_expression (_tmp18_);
6768 					} else {
6769 						_tmp12_ = FALSE;
6770 					}
6771 					result = _tmp12_;
6772 					_vala_ccode_node_unref0 (cbinary);
6773 					return result;
6774 				}
6775 			}
6776 		}
6777 	}
6778 	_tmp19_ = _vala_ccode_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (cexpr, VALA_TYPE_CCODE_PARENTHESIZED_EXPRESSION) ? ((ValaCCodeParenthesizedExpression*) cexpr) : NULL);
6779 	cparenthesized = _tmp19_;
6780 	_tmp21_ = cparenthesized;
6781 	if (NULL != _tmp21_) {
6782 		ValaCCodeParenthesizedExpression* _tmp22_;
6783 		ValaCCodeExpression* _tmp23_;
6784 		ValaCCodeExpression* _tmp24_;
6785 		_tmp22_ = cparenthesized;
6786 		_tmp23_ = vala_ccode_parenthesized_expression_get_inner (_tmp22_);
6787 		_tmp24_ = _tmp23_;
6788 		_tmp20_ = vala_ccode_base_module_is_constant_ccode_expression (_tmp24_);
6789 	} else {
6790 		_tmp20_ = FALSE;
6791 	}
6792 	result = _tmp20_;
6793 	_vala_ccode_node_unref0 (cparenthesized);
6794 	return result;
6795 }
6796 
6797 gboolean
vala_ccode_base_module_is_constant_ccode(ValaCodeNode * expr)6798 vala_ccode_base_module_is_constant_ccode (ValaCodeNode* expr)
6799 {
6800 	gboolean result = FALSE;
6801 	g_return_val_if_fail (expr != NULL, FALSE);
6802 	if (G_TYPE_CHECK_INSTANCE_TYPE (expr, VALA_TYPE_CONSTANT)) {
6803 		ValaSymbol* _tmp0_;
6804 		ValaSymbol* _tmp1_;
6805 		_tmp0_ = vala_symbol_get_parent_symbol ((ValaSymbol*) G_TYPE_CHECK_INSTANCE_CAST (expr, VALA_TYPE_CONSTANT, ValaConstant));
6806 		_tmp1_ = _tmp0_;
6807 		result = !G_TYPE_CHECK_INSTANCE_TYPE (_tmp1_, VALA_TYPE_BLOCK);
6808 		return result;
6809 	} else {
6810 		if (G_TYPE_CHECK_INSTANCE_TYPE (expr, VALA_TYPE_INTEGER_LITERAL)) {
6811 			result = vala_expression_is_constant ((ValaExpression*) G_TYPE_CHECK_INSTANCE_CAST (expr, VALA_TYPE_INTEGER_LITERAL, ValaIntegerLiteral));
6812 			return result;
6813 		} else {
6814 			if (G_TYPE_CHECK_INSTANCE_TYPE (expr, VALA_TYPE_MEMBER_ACCESS)) {
6815 				ValaSymbol* _tmp2_;
6816 				ValaSymbol* _tmp3_;
6817 				_tmp2_ = vala_expression_get_symbol_reference ((ValaExpression*) G_TYPE_CHECK_INSTANCE_CAST (expr, VALA_TYPE_MEMBER_ACCESS, ValaMemberAccess));
6818 				_tmp3_ = _tmp2_;
6819 				result = vala_ccode_base_module_is_constant_ccode ((ValaCodeNode*) _tmp3_);
6820 				return result;
6821 			} else {
6822 				if (G_TYPE_CHECK_INSTANCE_TYPE (expr, VALA_TYPE_CAST_EXPRESSION)) {
6823 					ValaExpression* _tmp4_;
6824 					ValaExpression* _tmp5_;
6825 					_tmp4_ = vala_cast_expression_get_inner (G_TYPE_CHECK_INSTANCE_CAST (expr, VALA_TYPE_CAST_EXPRESSION, ValaCastExpression));
6826 					_tmp5_ = _tmp4_;
6827 					result = vala_ccode_base_module_is_constant_ccode ((ValaCodeNode*) _tmp5_);
6828 					return result;
6829 				}
6830 			}
6831 		}
6832 	}
6833 	result = FALSE;
6834 	return result;
6835 }
6836 
6837 /**
6838  * Returns whether the passed cexpr is a pure expression, i.e. an
6839  * expression without side-effects.
6840  */
6841 gboolean
vala_ccode_base_module_is_pure_ccode_expression(ValaCCodeExpression * cexpr)6842 vala_ccode_base_module_is_pure_ccode_expression (ValaCCodeExpression* cexpr)
6843 {
6844 	gboolean _tmp0_ = FALSE;
6845 	gboolean result = FALSE;
6846 	g_return_val_if_fail (cexpr != NULL, FALSE);
6847 	if (G_TYPE_CHECK_INSTANCE_TYPE (cexpr, VALA_TYPE_CCODE_CONSTANT)) {
6848 		_tmp0_ = TRUE;
6849 	} else {
6850 		_tmp0_ = G_TYPE_CHECK_INSTANCE_TYPE (cexpr, VALA_TYPE_CCODE_IDENTIFIER);
6851 	}
6852 	if (_tmp0_) {
6853 		result = TRUE;
6854 		return result;
6855 	} else {
6856 		if (G_TYPE_CHECK_INSTANCE_TYPE (cexpr, VALA_TYPE_CCODE_BINARY_EXPRESSION)) {
6857 			ValaCCodeBinaryExpression* cbinary = NULL;
6858 			ValaCCodeBinaryExpression* _tmp1_;
6859 			gboolean _tmp2_ = FALSE;
6860 			ValaCCodeBinaryExpression* _tmp3_;
6861 			ValaCCodeExpression* _tmp4_;
6862 			ValaCCodeExpression* _tmp5_;
6863 			_tmp1_ = _vala_ccode_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (cexpr, VALA_TYPE_CCODE_BINARY_EXPRESSION, ValaCCodeBinaryExpression));
6864 			cbinary = _tmp1_;
6865 			_tmp3_ = cbinary;
6866 			_tmp4_ = vala_ccode_binary_expression_get_left (_tmp3_);
6867 			_tmp5_ = _tmp4_;
6868 			if (vala_ccode_base_module_is_pure_ccode_expression (_tmp5_)) {
6869 				ValaCCodeBinaryExpression* _tmp6_;
6870 				ValaCCodeExpression* _tmp7_;
6871 				ValaCCodeExpression* _tmp8_;
6872 				_tmp6_ = cbinary;
6873 				_tmp7_ = vala_ccode_binary_expression_get_right (_tmp6_);
6874 				_tmp8_ = _tmp7_;
6875 				_tmp2_ = vala_ccode_base_module_is_pure_ccode_expression (_tmp8_);
6876 			} else {
6877 				_tmp2_ = FALSE;
6878 			}
6879 			result = _tmp2_;
6880 			_vala_ccode_node_unref0 (cbinary);
6881 			return result;
6882 		} else {
6883 			if (G_TYPE_CHECK_INSTANCE_TYPE (cexpr, VALA_TYPE_CCODE_UNARY_EXPRESSION)) {
6884 				ValaCCodeUnaryExpression* cunary = NULL;
6885 				ValaCCodeUnaryExpression* _tmp9_;
6886 				ValaCCodeUnaryExpression* _tmp10_;
6887 				ValaCCodeUnaryOperator _tmp11_;
6888 				ValaCCodeUnaryOperator _tmp12_;
6889 				_tmp9_ = _vala_ccode_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (cexpr, VALA_TYPE_CCODE_UNARY_EXPRESSION, ValaCCodeUnaryExpression));
6890 				cunary = _tmp9_;
6891 				_tmp10_ = cunary;
6892 				_tmp11_ = vala_ccode_unary_expression_get_operator (_tmp10_);
6893 				_tmp12_ = _tmp11_;
6894 				switch (_tmp12_) {
6895 					case VALA_CCODE_UNARY_OPERATOR_PREFIX_INCREMENT:
6896 					case VALA_CCODE_UNARY_OPERATOR_PREFIX_DECREMENT:
6897 					case VALA_CCODE_UNARY_OPERATOR_POSTFIX_INCREMENT:
6898 					case VALA_CCODE_UNARY_OPERATOR_POSTFIX_DECREMENT:
6899 					{
6900 						result = FALSE;
6901 						_vala_ccode_node_unref0 (cunary);
6902 						return result;
6903 					}
6904 					default:
6905 					{
6906 						ValaCCodeUnaryExpression* _tmp13_;
6907 						ValaCCodeExpression* _tmp14_;
6908 						ValaCCodeExpression* _tmp15_;
6909 						_tmp13_ = cunary;
6910 						_tmp14_ = vala_ccode_unary_expression_get_inner (_tmp13_);
6911 						_tmp15_ = _tmp14_;
6912 						result = vala_ccode_base_module_is_pure_ccode_expression (_tmp15_);
6913 						_vala_ccode_node_unref0 (cunary);
6914 						return result;
6915 					}
6916 				}
6917 				_vala_ccode_node_unref0 (cunary);
6918 			} else {
6919 				if (G_TYPE_CHECK_INSTANCE_TYPE (cexpr, VALA_TYPE_CCODE_MEMBER_ACCESS)) {
6920 					ValaCCodeMemberAccess* cma = NULL;
6921 					ValaCCodeMemberAccess* _tmp16_;
6922 					ValaCCodeMemberAccess* _tmp17_;
6923 					ValaCCodeExpression* _tmp18_;
6924 					ValaCCodeExpression* _tmp19_;
6925 					_tmp16_ = _vala_ccode_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (cexpr, VALA_TYPE_CCODE_MEMBER_ACCESS, ValaCCodeMemberAccess));
6926 					cma = _tmp16_;
6927 					_tmp17_ = cma;
6928 					_tmp18_ = vala_ccode_member_access_get_inner (_tmp17_);
6929 					_tmp19_ = _tmp18_;
6930 					result = vala_ccode_base_module_is_pure_ccode_expression (_tmp19_);
6931 					_vala_ccode_node_unref0 (cma);
6932 					return result;
6933 				} else {
6934 					if (G_TYPE_CHECK_INSTANCE_TYPE (cexpr, VALA_TYPE_CCODE_ELEMENT_ACCESS)) {
6935 						ValaCCodeElementAccess* cea = NULL;
6936 						ValaCCodeElementAccess* _tmp20_;
6937 						gboolean _tmp21_ = FALSE;
6938 						ValaCCodeElementAccess* _tmp22_;
6939 						ValaCCodeExpression* _tmp23_;
6940 						ValaCCodeExpression* _tmp24_;
6941 						_tmp20_ = _vala_ccode_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (cexpr, VALA_TYPE_CCODE_ELEMENT_ACCESS, ValaCCodeElementAccess));
6942 						cea = _tmp20_;
6943 						_tmp22_ = cea;
6944 						_tmp23_ = vala_ccode_element_access_get_container (_tmp22_);
6945 						_tmp24_ = _tmp23_;
6946 						if (vala_ccode_base_module_is_pure_ccode_expression (_tmp24_)) {
6947 							ValaCCodeElementAccess* _tmp25_;
6948 							ValaList* _tmp26_;
6949 							ValaList* _tmp27_;
6950 							gpointer _tmp28_;
6951 							ValaCCodeExpression* _tmp29_;
6952 							_tmp25_ = cea;
6953 							_tmp26_ = vala_ccode_element_access_get_indices (_tmp25_);
6954 							_tmp27_ = _tmp26_;
6955 							_tmp28_ = vala_list_get (_tmp27_, 0);
6956 							_tmp29_ = (ValaCCodeExpression*) _tmp28_;
6957 							_tmp21_ = vala_ccode_base_module_is_pure_ccode_expression (_tmp29_);
6958 							_vala_ccode_node_unref0 (_tmp29_);
6959 						} else {
6960 							_tmp21_ = FALSE;
6961 						}
6962 						result = _tmp21_;
6963 						_vala_ccode_node_unref0 (cea);
6964 						return result;
6965 					} else {
6966 						if (G_TYPE_CHECK_INSTANCE_TYPE (cexpr, VALA_TYPE_CCODE_CAST_EXPRESSION)) {
6967 							ValaCCodeCastExpression* ccast = NULL;
6968 							ValaCCodeCastExpression* _tmp30_;
6969 							ValaCCodeCastExpression* _tmp31_;
6970 							ValaCCodeExpression* _tmp32_;
6971 							ValaCCodeExpression* _tmp33_;
6972 							_tmp30_ = _vala_ccode_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (cexpr, VALA_TYPE_CCODE_CAST_EXPRESSION, ValaCCodeCastExpression));
6973 							ccast = _tmp30_;
6974 							_tmp31_ = ccast;
6975 							_tmp32_ = vala_ccode_cast_expression_get_inner (_tmp31_);
6976 							_tmp33_ = _tmp32_;
6977 							result = vala_ccode_base_module_is_pure_ccode_expression (_tmp33_);
6978 							_vala_ccode_node_unref0 (ccast);
6979 							return result;
6980 						} else {
6981 							if (G_TYPE_CHECK_INSTANCE_TYPE (cexpr, VALA_TYPE_CCODE_PARENTHESIZED_EXPRESSION)) {
6982 								ValaCCodeParenthesizedExpression* cparenthesized = NULL;
6983 								ValaCCodeParenthesizedExpression* _tmp34_;
6984 								ValaCCodeParenthesizedExpression* _tmp35_;
6985 								ValaCCodeExpression* _tmp36_;
6986 								ValaCCodeExpression* _tmp37_;
6987 								_tmp34_ = _vala_ccode_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (cexpr, VALA_TYPE_CCODE_PARENTHESIZED_EXPRESSION, ValaCCodeParenthesizedExpression));
6988 								cparenthesized = _tmp34_;
6989 								_tmp35_ = cparenthesized;
6990 								_tmp36_ = vala_ccode_parenthesized_expression_get_inner (_tmp35_);
6991 								_tmp37_ = _tmp36_;
6992 								result = vala_ccode_base_module_is_pure_ccode_expression (_tmp37_);
6993 								_vala_ccode_node_unref0 (cparenthesized);
6994 								return result;
6995 							}
6996 						}
6997 					}
6998 				}
6999 			}
7000 		}
7001 	}
7002 	result = FALSE;
7003 	return result;
7004 }
7005 
7006 static void
vala_ccode_base_module_real_visit_property(ValaCodeVisitor * base,ValaProperty * prop)7007 vala_ccode_base_module_real_visit_property (ValaCodeVisitor* base,
7008                                             ValaProperty* prop)
7009 {
7010 	ValaCCodeBaseModule * self;
7011 	ValaPropertyAccessor* _tmp0_;
7012 	ValaPropertyAccessor* _tmp1_;
7013 	ValaPropertyAccessor* _tmp4_;
7014 	ValaPropertyAccessor* _tmp5_;
7015 	self = (ValaCCodeBaseModule*) base;
7016 	g_return_if_fail (prop != NULL);
7017 	vala_ccode_base_module_visit_member (self, (ValaSymbol*) prop);
7018 	_tmp0_ = vala_property_get_get_accessor (prop);
7019 	_tmp1_ = _tmp0_;
7020 	if (_tmp1_ != NULL) {
7021 		ValaPropertyAccessor* _tmp2_;
7022 		ValaPropertyAccessor* _tmp3_;
7023 		_tmp2_ = vala_property_get_get_accessor (prop);
7024 		_tmp3_ = _tmp2_;
7025 		vala_code_node_accept ((ValaCodeNode*) _tmp3_, (ValaCodeVisitor*) self);
7026 	}
7027 	_tmp4_ = vala_property_get_set_accessor (prop);
7028 	_tmp5_ = _tmp4_;
7029 	if (_tmp5_ != NULL) {
7030 		ValaPropertyAccessor* _tmp6_;
7031 		ValaPropertyAccessor* _tmp7_;
7032 		_tmp6_ = vala_property_get_set_accessor (prop);
7033 		_tmp7_ = _tmp6_;
7034 		vala_code_node_accept ((ValaCodeNode*) _tmp7_, (ValaCodeVisitor*) self);
7035 	}
7036 }
7037 
7038 void
vala_ccode_base_module_generate_type_declaration(ValaCCodeBaseModule * self,ValaDataType * type,ValaCCodeFile * decl_space)7039 vala_ccode_base_module_generate_type_declaration (ValaCCodeBaseModule* self,
7040                                                   ValaDataType* type,
7041                                                   ValaCCodeFile* decl_space)
7042 {
7043 	g_return_if_fail (self != NULL);
7044 	g_return_if_fail (type != NULL);
7045 	g_return_if_fail (decl_space != NULL);
7046 	if (G_TYPE_CHECK_INSTANCE_TYPE (type, VALA_TYPE_OBJECT_TYPE)) {
7047 		ValaObjectType* object_type = NULL;
7048 		ValaObjectType* _tmp0_;
7049 		ValaObjectType* _tmp1_;
7050 		ValaTypeSymbol* _tmp2_;
7051 		ValaTypeSymbol* _tmp3_;
7052 		_tmp0_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (type, VALA_TYPE_OBJECT_TYPE, ValaObjectType));
7053 		object_type = _tmp0_;
7054 		_tmp1_ = object_type;
7055 		_tmp2_ = vala_data_type_get_type_symbol ((ValaDataType*) _tmp1_);
7056 		_tmp3_ = _tmp2_;
7057 		if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp3_, VALA_TYPE_CLASS)) {
7058 			ValaClass* cl = NULL;
7059 			ValaObjectType* _tmp4_;
7060 			ValaTypeSymbol* _tmp5_;
7061 			ValaTypeSymbol* _tmp6_;
7062 			ValaClass* _tmp7_;
7063 			ValaClass* _tmp8_;
7064 			gboolean _tmp9_ = FALSE;
7065 			ValaClass* _tmp10_;
7066 			gboolean _tmp11_;
7067 			gboolean _tmp12_;
7068 			_tmp4_ = object_type;
7069 			_tmp5_ = vala_data_type_get_type_symbol ((ValaDataType*) _tmp4_);
7070 			_tmp6_ = _tmp5_;
7071 			_tmp7_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp6_, VALA_TYPE_CLASS, ValaClass));
7072 			cl = _tmp7_;
7073 			_tmp8_ = cl;
7074 			vala_ccode_base_module_generate_class_declaration (self, _tmp8_, decl_space);
7075 			_tmp10_ = cl;
7076 			_tmp11_ = vala_class_get_is_compact (_tmp10_);
7077 			_tmp12_ = _tmp11_;
7078 			if (!_tmp12_) {
7079 				ValaClass* _tmp13_;
7080 				_tmp13_ = cl;
7081 				_tmp9_ = vala_object_type_symbol_has_type_parameters ((ValaObjectTypeSymbol*) _tmp13_);
7082 			} else {
7083 				_tmp9_ = FALSE;
7084 			}
7085 			if (_tmp9_) {
7086 				ValaTypeSymbol* _tmp14_;
7087 				_tmp14_ = self->gtype_type;
7088 				vala_ccode_base_module_generate_struct_declaration (self, G_TYPE_CHECK_INSTANCE_CAST (_tmp14_, VALA_TYPE_STRUCT, ValaStruct), decl_space);
7089 			}
7090 			_vala_code_node_unref0 (cl);
7091 		} else {
7092 			ValaObjectType* _tmp15_;
7093 			ValaTypeSymbol* _tmp16_;
7094 			ValaTypeSymbol* _tmp17_;
7095 			_tmp15_ = object_type;
7096 			_tmp16_ = vala_data_type_get_type_symbol ((ValaDataType*) _tmp15_);
7097 			_tmp17_ = _tmp16_;
7098 			if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp17_, VALA_TYPE_INTERFACE)) {
7099 				ValaInterface* iface = NULL;
7100 				ValaObjectType* _tmp18_;
7101 				ValaTypeSymbol* _tmp19_;
7102 				ValaTypeSymbol* _tmp20_;
7103 				ValaInterface* _tmp21_;
7104 				ValaInterface* _tmp22_;
7105 				ValaInterface* _tmp23_;
7106 				_tmp18_ = object_type;
7107 				_tmp19_ = vala_data_type_get_type_symbol ((ValaDataType*) _tmp18_);
7108 				_tmp20_ = _tmp19_;
7109 				_tmp21_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp20_, VALA_TYPE_INTERFACE, ValaInterface));
7110 				iface = _tmp21_;
7111 				_tmp22_ = iface;
7112 				vala_ccode_base_module_generate_interface_declaration (self, _tmp22_, decl_space);
7113 				_tmp23_ = iface;
7114 				if (vala_object_type_symbol_has_type_parameters ((ValaObjectTypeSymbol*) _tmp23_)) {
7115 					ValaTypeSymbol* _tmp24_;
7116 					_tmp24_ = self->gtype_type;
7117 					vala_ccode_base_module_generate_struct_declaration (self, G_TYPE_CHECK_INSTANCE_CAST (_tmp24_, VALA_TYPE_STRUCT, ValaStruct), decl_space);
7118 				}
7119 				_vala_code_node_unref0 (iface);
7120 			}
7121 		}
7122 		_vala_code_node_unref0 (object_type);
7123 	} else {
7124 		if (G_TYPE_CHECK_INSTANCE_TYPE (type, VALA_TYPE_DELEGATE_TYPE)) {
7125 			ValaDelegateType* deleg_type = NULL;
7126 			ValaDelegateType* _tmp25_;
7127 			ValaDelegate* d = NULL;
7128 			ValaDelegateType* _tmp26_;
7129 			ValaDelegate* _tmp27_;
7130 			ValaDelegate* _tmp28_;
7131 			ValaDelegate* _tmp29_;
7132 			ValaDelegate* _tmp30_;
7133 			ValaDelegate* _tmp31_;
7134 			gboolean _tmp32_;
7135 			gboolean _tmp33_;
7136 			_tmp25_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (type, VALA_TYPE_DELEGATE_TYPE, ValaDelegateType));
7137 			deleg_type = _tmp25_;
7138 			_tmp26_ = deleg_type;
7139 			_tmp27_ = vala_delegate_type_get_delegate_symbol (_tmp26_);
7140 			_tmp28_ = _tmp27_;
7141 			_tmp29_ = _vala_code_node_ref0 (_tmp28_);
7142 			d = _tmp29_;
7143 			_tmp30_ = d;
7144 			vala_ccode_base_module_generate_delegate_declaration (self, _tmp30_, decl_space);
7145 			_tmp31_ = d;
7146 			_tmp32_ = vala_delegate_get_has_target (_tmp31_);
7147 			_tmp33_ = _tmp32_;
7148 			if (_tmp33_) {
7149 				ValaDataType* _tmp34_;
7150 				ValaDelegateType* _tmp35_;
7151 				_tmp34_ = self->delegate_target_type;
7152 				vala_ccode_base_module_generate_type_declaration (self, _tmp34_, decl_space);
7153 				_tmp35_ = deleg_type;
7154 				if (vala_data_type_is_disposable ((ValaDataType*) _tmp35_)) {
7155 					ValaDelegateType* _tmp36_;
7156 					_tmp36_ = self->delegate_target_destroy_type;
7157 					vala_ccode_base_module_generate_type_declaration (self, (ValaDataType*) _tmp36_, decl_space);
7158 				}
7159 			}
7160 			_vala_code_node_unref0 (d);
7161 			_vala_code_node_unref0 (deleg_type);
7162 		} else {
7163 			ValaTypeSymbol* _tmp37_;
7164 			ValaTypeSymbol* _tmp38_;
7165 			_tmp37_ = vala_data_type_get_type_symbol (type);
7166 			_tmp38_ = _tmp37_;
7167 			if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp38_, VALA_TYPE_ENUM)) {
7168 				ValaEnum* en = NULL;
7169 				ValaTypeSymbol* _tmp39_;
7170 				ValaTypeSymbol* _tmp40_;
7171 				ValaEnum* _tmp41_;
7172 				ValaEnum* _tmp42_;
7173 				_tmp39_ = vala_data_type_get_type_symbol (type);
7174 				_tmp40_ = _tmp39_;
7175 				_tmp41_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp40_, VALA_TYPE_ENUM, ValaEnum));
7176 				en = _tmp41_;
7177 				_tmp42_ = en;
7178 				vala_ccode_base_module_generate_enum_declaration (self, _tmp42_, decl_space);
7179 				_vala_code_node_unref0 (en);
7180 			} else {
7181 				if (G_TYPE_CHECK_INSTANCE_TYPE (type, VALA_TYPE_VALUE_TYPE)) {
7182 					ValaValueType* value_type = NULL;
7183 					ValaValueType* _tmp43_;
7184 					ValaValueType* _tmp44_;
7185 					ValaTypeSymbol* _tmp45_;
7186 					ValaTypeSymbol* _tmp46_;
7187 					_tmp43_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (type, VALA_TYPE_VALUE_TYPE, ValaValueType));
7188 					value_type = _tmp43_;
7189 					_tmp44_ = value_type;
7190 					_tmp45_ = vala_data_type_get_type_symbol ((ValaDataType*) _tmp44_);
7191 					_tmp46_ = _tmp45_;
7192 					vala_ccode_base_module_generate_struct_declaration (self, G_TYPE_CHECK_INSTANCE_CAST (_tmp46_, VALA_TYPE_STRUCT, ValaStruct), decl_space);
7193 					_vala_code_node_unref0 (value_type);
7194 				} else {
7195 					if (G_TYPE_CHECK_INSTANCE_TYPE (type, VALA_TYPE_ARRAY_TYPE)) {
7196 						ValaArrayType* array_type = NULL;
7197 						ValaArrayType* _tmp47_;
7198 						ValaArrayType* _tmp48_;
7199 						ValaDataType* _tmp49_;
7200 						ValaDataType* _tmp50_;
7201 						ValaArrayType* _tmp51_;
7202 						ValaDataType* _tmp52_;
7203 						ValaDataType* _tmp53_;
7204 						_tmp47_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (type, VALA_TYPE_ARRAY_TYPE, ValaArrayType));
7205 						array_type = _tmp47_;
7206 						_tmp48_ = array_type;
7207 						_tmp49_ = vala_array_type_get_element_type (_tmp48_);
7208 						_tmp50_ = _tmp49_;
7209 						vala_ccode_base_module_generate_type_declaration (self, _tmp50_, decl_space);
7210 						_tmp51_ = array_type;
7211 						_tmp52_ = vala_array_type_get_length_type (_tmp51_);
7212 						_tmp53_ = _tmp52_;
7213 						if (_tmp53_ != NULL) {
7214 							ValaArrayType* _tmp54_;
7215 							ValaDataType* _tmp55_;
7216 							ValaDataType* _tmp56_;
7217 							_tmp54_ = array_type;
7218 							_tmp55_ = vala_array_type_get_length_type (_tmp54_);
7219 							_tmp56_ = _tmp55_;
7220 							vala_ccode_base_module_generate_type_declaration (self, _tmp56_, decl_space);
7221 						}
7222 						_vala_code_node_unref0 (array_type);
7223 					} else {
7224 						if (G_TYPE_CHECK_INSTANCE_TYPE (type, VALA_TYPE_ERROR_TYPE)) {
7225 							ValaErrorType* error_type = NULL;
7226 							ValaErrorType* _tmp57_;
7227 							ValaErrorType* _tmp58_;
7228 							ValaErrorDomain* _tmp59_;
7229 							ValaErrorDomain* _tmp60_;
7230 							_tmp57_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (type, VALA_TYPE_ERROR_TYPE, ValaErrorType));
7231 							error_type = _tmp57_;
7232 							_tmp58_ = error_type;
7233 							_tmp59_ = vala_error_type_get_error_domain (_tmp58_);
7234 							_tmp60_ = _tmp59_;
7235 							if (_tmp60_ != NULL) {
7236 								ValaErrorType* _tmp61_;
7237 								ValaErrorDomain* _tmp62_;
7238 								ValaErrorDomain* _tmp63_;
7239 								_tmp61_ = error_type;
7240 								_tmp62_ = vala_error_type_get_error_domain (_tmp61_);
7241 								_tmp63_ = _tmp62_;
7242 								vala_ccode_base_module_generate_error_domain_declaration (self, _tmp63_, decl_space);
7243 							} else {
7244 								ValaClass* _tmp64_;
7245 								_tmp64_ = self->priv->gerror;
7246 								vala_ccode_base_module_generate_class_declaration (self, _tmp64_, decl_space);
7247 							}
7248 							_vala_code_node_unref0 (error_type);
7249 						} else {
7250 							if (G_TYPE_CHECK_INSTANCE_TYPE (type, VALA_TYPE_POINTER_TYPE)) {
7251 								ValaPointerType* pointer_type = NULL;
7252 								ValaPointerType* _tmp65_;
7253 								ValaPointerType* _tmp66_;
7254 								ValaDataType* _tmp67_;
7255 								ValaDataType* _tmp68_;
7256 								_tmp65_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (type, VALA_TYPE_POINTER_TYPE, ValaPointerType));
7257 								pointer_type = _tmp65_;
7258 								_tmp66_ = pointer_type;
7259 								_tmp67_ = vala_pointer_type_get_base_type (_tmp66_);
7260 								_tmp68_ = _tmp67_;
7261 								vala_ccode_base_module_generate_type_declaration (self, _tmp68_, decl_space);
7262 								_vala_code_node_unref0 (pointer_type);
7263 							} else {
7264 								if (G_TYPE_CHECK_INSTANCE_TYPE (type, VALA_TYPE_METHOD_TYPE)) {
7265 									ValaMethod* method = NULL;
7266 									ValaMethod* _tmp69_;
7267 									ValaMethod* _tmp70_;
7268 									ValaMethod* _tmp71_;
7269 									gboolean _tmp72_ = FALSE;
7270 									ValaMethod* _tmp73_;
7271 									_tmp69_ = vala_method_type_get_method_symbol (G_TYPE_CHECK_INSTANCE_CAST (type, VALA_TYPE_METHOD_TYPE, ValaMethodType));
7272 									_tmp70_ = _tmp69_;
7273 									_tmp71_ = _vala_code_node_ref0 (_tmp70_);
7274 									method = _tmp71_;
7275 									_tmp73_ = method;
7276 									if (vala_method_has_type_parameters (_tmp73_)) {
7277 										ValaMethod* _tmp74_;
7278 										_tmp74_ = method;
7279 										_tmp72_ = !vala_get_ccode_simple_generics (_tmp74_);
7280 									} else {
7281 										_tmp72_ = FALSE;
7282 									}
7283 									if (_tmp72_) {
7284 										ValaTypeSymbol* _tmp75_;
7285 										_tmp75_ = self->gtype_type;
7286 										vala_ccode_base_module_generate_struct_declaration (self, G_TYPE_CHECK_INSTANCE_CAST (_tmp75_, VALA_TYPE_STRUCT, ValaStruct), decl_space);
7287 									}
7288 									_vala_code_node_unref0 (method);
7289 								}
7290 							}
7291 						}
7292 					}
7293 				}
7294 			}
7295 		}
7296 	}
7297 	{
7298 		ValaList* _type_arg_list = NULL;
7299 		ValaList* _tmp76_;
7300 		ValaList* _tmp77_;
7301 		gint _type_arg_size = 0;
7302 		ValaList* _tmp78_;
7303 		gint _tmp79_;
7304 		gint _tmp80_;
7305 		gint _type_arg_index = 0;
7306 		_tmp76_ = vala_data_type_get_type_arguments (type);
7307 		_tmp77_ = _vala_iterable_ref0 (_tmp76_);
7308 		_type_arg_list = _tmp77_;
7309 		_tmp78_ = _type_arg_list;
7310 		_tmp79_ = vala_collection_get_size ((ValaCollection*) _tmp78_);
7311 		_tmp80_ = _tmp79_;
7312 		_type_arg_size = _tmp80_;
7313 		_type_arg_index = -1;
7314 		while (TRUE) {
7315 			gint _tmp81_;
7316 			gint _tmp82_;
7317 			ValaDataType* type_arg = NULL;
7318 			ValaList* _tmp83_;
7319 			gpointer _tmp84_;
7320 			ValaDataType* _tmp85_;
7321 			_type_arg_index = _type_arg_index + 1;
7322 			_tmp81_ = _type_arg_index;
7323 			_tmp82_ = _type_arg_size;
7324 			if (!(_tmp81_ < _tmp82_)) {
7325 				break;
7326 			}
7327 			_tmp83_ = _type_arg_list;
7328 			_tmp84_ = vala_list_get (_tmp83_, _type_arg_index);
7329 			type_arg = (ValaDataType*) _tmp84_;
7330 			_tmp85_ = type_arg;
7331 			vala_ccode_base_module_generate_type_declaration (self, _tmp85_, decl_space);
7332 			_vala_code_node_unref0 (type_arg);
7333 		}
7334 		_vala_iterable_unref0 (_type_arg_list);
7335 	}
7336 }
7337 
7338 static void
vala_ccode_base_module_real_generate_class_struct_declaration(ValaCCodeBaseModule * self,ValaClass * cl,ValaCCodeFile * decl_space)7339 vala_ccode_base_module_real_generate_class_struct_declaration (ValaCCodeBaseModule* self,
7340                                                                ValaClass* cl,
7341                                                                ValaCCodeFile* decl_space)
7342 {
7343 	g_return_if_fail (cl != NULL);
7344 	g_return_if_fail (decl_space != NULL);
7345 }
7346 
7347 void
vala_ccode_base_module_generate_class_struct_declaration(ValaCCodeBaseModule * self,ValaClass * cl,ValaCCodeFile * decl_space)7348 vala_ccode_base_module_generate_class_struct_declaration (ValaCCodeBaseModule* self,
7349                                                           ValaClass* cl,
7350                                                           ValaCCodeFile* decl_space)
7351 {
7352 	g_return_if_fail (self != NULL);
7353 	VALA_CCODE_BASE_MODULE_GET_CLASS (self)->generate_class_struct_declaration (self, cl, decl_space);
7354 }
7355 
7356 static void
vala_ccode_base_module_real_generate_struct_declaration(ValaCCodeBaseModule * self,ValaStruct * st,ValaCCodeFile * decl_space)7357 vala_ccode_base_module_real_generate_struct_declaration (ValaCCodeBaseModule* self,
7358                                                          ValaStruct* st,
7359                                                          ValaCCodeFile* decl_space)
7360 {
7361 	g_return_if_fail (st != NULL);
7362 	g_return_if_fail (decl_space != NULL);
7363 }
7364 
7365 void
vala_ccode_base_module_generate_struct_declaration(ValaCCodeBaseModule * self,ValaStruct * st,ValaCCodeFile * decl_space)7366 vala_ccode_base_module_generate_struct_declaration (ValaCCodeBaseModule* self,
7367                                                     ValaStruct* st,
7368                                                     ValaCCodeFile* decl_space)
7369 {
7370 	g_return_if_fail (self != NULL);
7371 	VALA_CCODE_BASE_MODULE_GET_CLASS (self)->generate_struct_declaration (self, st, decl_space);
7372 }
7373 
7374 static void
vala_ccode_base_module_real_generate_delegate_declaration(ValaCCodeBaseModule * self,ValaDelegate * d,ValaCCodeFile * decl_space)7375 vala_ccode_base_module_real_generate_delegate_declaration (ValaCCodeBaseModule* self,
7376                                                            ValaDelegate* d,
7377                                                            ValaCCodeFile* decl_space)
7378 {
7379 	g_return_if_fail (d != NULL);
7380 	g_return_if_fail (decl_space != NULL);
7381 }
7382 
7383 void
vala_ccode_base_module_generate_delegate_declaration(ValaCCodeBaseModule * self,ValaDelegate * d,ValaCCodeFile * decl_space)7384 vala_ccode_base_module_generate_delegate_declaration (ValaCCodeBaseModule* self,
7385                                                       ValaDelegate* d,
7386                                                       ValaCCodeFile* decl_space)
7387 {
7388 	g_return_if_fail (self != NULL);
7389 	VALA_CCODE_BASE_MODULE_GET_CLASS (self)->generate_delegate_declaration (self, d, decl_space);
7390 }
7391 
7392 static void
vala_ccode_base_module_real_generate_cparameters(ValaCCodeBaseModule * self,ValaMethod * m,ValaCCodeFile * decl_space,ValaMap * cparam_map,ValaCCodeFunction * func,ValaCCodeFunctionDeclarator * vdeclarator,ValaMap * carg_map,ValaCCodeFunctionCall * vcall,gint direction)7393 vala_ccode_base_module_real_generate_cparameters (ValaCCodeBaseModule* self,
7394                                                   ValaMethod* m,
7395                                                   ValaCCodeFile* decl_space,
7396                                                   ValaMap* cparam_map,
7397                                                   ValaCCodeFunction* func,
7398                                                   ValaCCodeFunctionDeclarator* vdeclarator,
7399                                                   ValaMap* carg_map,
7400                                                   ValaCCodeFunctionCall* vcall,
7401                                                   gint direction)
7402 {
7403 	g_return_if_fail (m != NULL);
7404 	g_return_if_fail (decl_space != NULL);
7405 	g_return_if_fail (cparam_map != NULL);
7406 	g_return_if_fail (func != NULL);
7407 }
7408 
7409 void
vala_ccode_base_module_generate_cparameters(ValaCCodeBaseModule * self,ValaMethod * m,ValaCCodeFile * decl_space,ValaMap * cparam_map,ValaCCodeFunction * func,ValaCCodeFunctionDeclarator * vdeclarator,ValaMap * carg_map,ValaCCodeFunctionCall * vcall,gint direction)7410 vala_ccode_base_module_generate_cparameters (ValaCCodeBaseModule* self,
7411                                              ValaMethod* m,
7412                                              ValaCCodeFile* decl_space,
7413                                              ValaMap* cparam_map,
7414                                              ValaCCodeFunction* func,
7415                                              ValaCCodeFunctionDeclarator* vdeclarator,
7416                                              ValaMap* carg_map,
7417                                              ValaCCodeFunctionCall* vcall,
7418                                              gint direction)
7419 {
7420 	g_return_if_fail (self != NULL);
7421 	VALA_CCODE_BASE_MODULE_GET_CLASS (self)->generate_cparameters (self, m, decl_space, cparam_map, func, vdeclarator, carg_map, vcall, direction);
7422 }
7423 
7424 void
vala_ccode_base_module_generate_property_accessor_declaration(ValaCCodeBaseModule * self,ValaPropertyAccessor * acc,ValaCCodeFile * decl_space)7425 vala_ccode_base_module_generate_property_accessor_declaration (ValaCCodeBaseModule* self,
7426                                                                ValaPropertyAccessor* acc,
7427                                                                ValaCCodeFile* decl_space)
7428 {
7429 	gchar* _tmp0_;
7430 	gchar* _tmp1_;
7431 	gboolean _tmp2_;
7432 	ValaProperty* prop = NULL;
7433 	ValaProperty* _tmp3_;
7434 	ValaProperty* _tmp4_;
7435 	ValaProperty* _tmp5_;
7436 	gboolean _tmp6_ = FALSE;
7437 	gboolean _tmp7_;
7438 	gboolean _tmp8_;
7439 	gboolean returns_real_struct = FALSE;
7440 	ValaCCodeParameter* cvalueparam = NULL;
7441 	ValaDataType* _tmp37_;
7442 	ValaDataType* _tmp38_;
7443 	ValaCCodeFunction* function = NULL;
7444 	gboolean _tmp39_ = FALSE;
7445 	gboolean _tmp40_;
7446 	gboolean _tmp41_;
7447 	ValaProperty* _tmp52_;
7448 	ValaMemberBinding _tmp53_;
7449 	ValaMemberBinding _tmp54_;
7450 	gboolean _tmp78_ = FALSE;
7451 	gboolean _tmp79_ = FALSE;
7452 	gboolean _tmp80_;
7453 	gboolean _tmp81_;
7454 	gboolean _tmp86_ = FALSE;
7455 	ValaDataType* _tmp87_;
7456 	ValaDataType* _tmp88_;
7457 	ValaProperty* _tmp158_;
7458 	ValaVersionAttribute* _tmp159_;
7459 	ValaVersionAttribute* _tmp160_;
7460 	gboolean _tmp161_;
7461 	gboolean _tmp162_;
7462 	gboolean _tmp170_ = FALSE;
7463 	ValaProperty* _tmp171_;
7464 	gboolean _tmp172_;
7465 	gboolean _tmp173_;
7466 	ValaCCodeFunction* _tmp200_;
7467 	g_return_if_fail (self != NULL);
7468 	g_return_if_fail (acc != NULL);
7469 	g_return_if_fail (decl_space != NULL);
7470 	_tmp0_ = vala_get_ccode_name ((ValaCodeNode*) acc);
7471 	_tmp1_ = _tmp0_;
7472 	_tmp2_ = vala_ccode_base_module_add_symbol_declaration (self, decl_space, (ValaSymbol*) acc, _tmp1_);
7473 	_g_free0 (_tmp1_);
7474 	if (_tmp2_) {
7475 		return;
7476 	}
7477 	_tmp3_ = vala_property_accessor_get_prop (acc);
7478 	_tmp4_ = _tmp3_;
7479 	_tmp5_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp4_, VALA_TYPE_PROPERTY, ValaProperty));
7480 	prop = _tmp5_;
7481 	_tmp7_ = vala_property_accessor_get_readable (acc);
7482 	_tmp8_ = _tmp7_;
7483 	if (_tmp8_) {
7484 		ValaProperty* _tmp9_;
7485 		ValaDataType* _tmp10_;
7486 		ValaDataType* _tmp11_;
7487 		_tmp9_ = prop;
7488 		_tmp10_ = vala_property_get_property_type (_tmp9_);
7489 		_tmp11_ = _tmp10_;
7490 		_tmp6_ = vala_data_type_is_real_non_null_struct_type (_tmp11_);
7491 	} else {
7492 		_tmp6_ = FALSE;
7493 	}
7494 	returns_real_struct = _tmp6_;
7495 	if (returns_real_struct) {
7496 		ValaDataType* _tmp12_;
7497 		ValaDataType* _tmp13_;
7498 		gchar* _tmp14_;
7499 		gchar* _tmp15_;
7500 		gchar* _tmp16_;
7501 		gchar* _tmp17_;
7502 		ValaCCodeParameter* _tmp18_;
7503 		_tmp12_ = vala_property_accessor_get_value_type (acc);
7504 		_tmp13_ = _tmp12_;
7505 		_tmp14_ = vala_get_ccode_name ((ValaCodeNode*) _tmp13_);
7506 		_tmp15_ = _tmp14_;
7507 		_tmp16_ = g_strdup_printf ("%s *", _tmp15_);
7508 		_tmp17_ = _tmp16_;
7509 		_tmp18_ = vala_ccode_parameter_new ("result", _tmp17_);
7510 		_vala_ccode_node_unref0 (cvalueparam);
7511 		cvalueparam = _tmp18_;
7512 		_g_free0 (_tmp17_);
7513 		_g_free0 (_tmp15_);
7514 	} else {
7515 		gboolean _tmp19_ = FALSE;
7516 		gboolean _tmp20_;
7517 		gboolean _tmp21_;
7518 		_tmp20_ = vala_property_accessor_get_readable (acc);
7519 		_tmp21_ = _tmp20_;
7520 		if (!_tmp21_) {
7521 			ValaProperty* _tmp22_;
7522 			ValaDataType* _tmp23_;
7523 			ValaDataType* _tmp24_;
7524 			_tmp22_ = prop;
7525 			_tmp23_ = vala_property_get_property_type (_tmp22_);
7526 			_tmp24_ = _tmp23_;
7527 			_tmp19_ = vala_data_type_is_real_non_null_struct_type (_tmp24_);
7528 		} else {
7529 			_tmp19_ = FALSE;
7530 		}
7531 		if (_tmp19_) {
7532 			ValaDataType* _tmp25_;
7533 			ValaDataType* _tmp26_;
7534 			gchar* _tmp27_;
7535 			gchar* _tmp28_;
7536 			gchar* _tmp29_;
7537 			gchar* _tmp30_;
7538 			ValaCCodeParameter* _tmp31_;
7539 			_tmp25_ = vala_property_accessor_get_value_type (acc);
7540 			_tmp26_ = _tmp25_;
7541 			_tmp27_ = vala_get_ccode_name ((ValaCodeNode*) _tmp26_);
7542 			_tmp28_ = _tmp27_;
7543 			_tmp29_ = g_strdup_printf ("%s *", _tmp28_);
7544 			_tmp30_ = _tmp29_;
7545 			_tmp31_ = vala_ccode_parameter_new ("value", _tmp30_);
7546 			_vala_ccode_node_unref0 (cvalueparam);
7547 			cvalueparam = _tmp31_;
7548 			_g_free0 (_tmp30_);
7549 			_g_free0 (_tmp28_);
7550 		} else {
7551 			ValaDataType* _tmp32_;
7552 			ValaDataType* _tmp33_;
7553 			gchar* _tmp34_;
7554 			gchar* _tmp35_;
7555 			ValaCCodeParameter* _tmp36_;
7556 			_tmp32_ = vala_property_accessor_get_value_type (acc);
7557 			_tmp33_ = _tmp32_;
7558 			_tmp34_ = vala_get_ccode_name ((ValaCodeNode*) _tmp33_);
7559 			_tmp35_ = _tmp34_;
7560 			_tmp36_ = vala_ccode_parameter_new ("value", _tmp35_);
7561 			_vala_ccode_node_unref0 (cvalueparam);
7562 			cvalueparam = _tmp36_;
7563 			_g_free0 (_tmp35_);
7564 		}
7565 	}
7566 	_tmp37_ = vala_property_accessor_get_value_type (acc);
7567 	_tmp38_ = _tmp37_;
7568 	vala_ccode_base_module_generate_type_declaration (self, _tmp38_, decl_space);
7569 	_tmp40_ = vala_property_accessor_get_readable (acc);
7570 	_tmp41_ = _tmp40_;
7571 	if (_tmp41_) {
7572 		_tmp39_ = !returns_real_struct;
7573 	} else {
7574 		_tmp39_ = FALSE;
7575 	}
7576 	if (_tmp39_) {
7577 		gchar* _tmp42_;
7578 		gchar* _tmp43_;
7579 		ValaDataType* _tmp44_;
7580 		ValaDataType* _tmp45_;
7581 		gchar* _tmp46_;
7582 		gchar* _tmp47_;
7583 		ValaCCodeFunction* _tmp48_;
7584 		_tmp42_ = vala_get_ccode_name ((ValaCodeNode*) acc);
7585 		_tmp43_ = _tmp42_;
7586 		_tmp44_ = vala_property_accessor_get_value_type (acc);
7587 		_tmp45_ = _tmp44_;
7588 		_tmp46_ = vala_get_ccode_name ((ValaCodeNode*) _tmp45_);
7589 		_tmp47_ = _tmp46_;
7590 		_tmp48_ = vala_ccode_function_new (_tmp43_, _tmp47_);
7591 		_vala_ccode_node_unref0 (function);
7592 		function = _tmp48_;
7593 		_g_free0 (_tmp47_);
7594 		_g_free0 (_tmp43_);
7595 	} else {
7596 		gchar* _tmp49_;
7597 		gchar* _tmp50_;
7598 		ValaCCodeFunction* _tmp51_;
7599 		_tmp49_ = vala_get_ccode_name ((ValaCodeNode*) acc);
7600 		_tmp50_ = _tmp49_;
7601 		_tmp51_ = vala_ccode_function_new (_tmp50_, "void");
7602 		_vala_ccode_node_unref0 (function);
7603 		function = _tmp51_;
7604 		_g_free0 (_tmp50_);
7605 	}
7606 	_tmp52_ = prop;
7607 	_tmp53_ = vala_property_get_binding (_tmp52_);
7608 	_tmp54_ = _tmp53_;
7609 	if (_tmp54_ == VALA_MEMBER_BINDING_INSTANCE) {
7610 		ValaTypeSymbol* t = NULL;
7611 		ValaProperty* _tmp55_;
7612 		ValaSymbol* _tmp56_;
7613 		ValaSymbol* _tmp57_;
7614 		ValaTypeSymbol* _tmp58_;
7615 		ValaDataType* this_type = NULL;
7616 		ValaTypeSymbol* _tmp59_;
7617 		ValaDataType* _tmp60_;
7618 		ValaDataType* _tmp61_;
7619 		ValaCCodeParameter* cselfparam = NULL;
7620 		ValaDataType* _tmp62_;
7621 		gchar* _tmp63_;
7622 		gchar* _tmp64_;
7623 		ValaCCodeParameter* _tmp65_;
7624 		ValaCCodeParameter* _tmp66_;
7625 		gboolean _tmp67_ = FALSE;
7626 		ValaTypeSymbol* _tmp68_;
7627 		ValaCCodeFunction* _tmp76_;
7628 		ValaCCodeParameter* _tmp77_;
7629 		_tmp55_ = prop;
7630 		_tmp56_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp55_);
7631 		_tmp57_ = _tmp56_;
7632 		_tmp58_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp57_, VALA_TYPE_TYPESYMBOL, ValaTypeSymbol));
7633 		t = _tmp58_;
7634 		_tmp59_ = t;
7635 		_tmp60_ = vala_semantic_analyzer_get_data_type_for_symbol ((ValaSymbol*) _tmp59_);
7636 		this_type = _tmp60_;
7637 		_tmp61_ = this_type;
7638 		vala_ccode_base_module_generate_type_declaration (self, _tmp61_, decl_space);
7639 		_tmp62_ = this_type;
7640 		_tmp63_ = vala_get_ccode_name ((ValaCodeNode*) _tmp62_);
7641 		_tmp64_ = _tmp63_;
7642 		_tmp65_ = vala_ccode_parameter_new ("self", _tmp64_);
7643 		_tmp66_ = _tmp65_;
7644 		_g_free0 (_tmp64_);
7645 		cselfparam = _tmp66_;
7646 		_tmp68_ = t;
7647 		if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp68_, VALA_TYPE_STRUCT)) {
7648 			ValaTypeSymbol* _tmp69_;
7649 			_tmp69_ = t;
7650 			_tmp67_ = !vala_struct_is_simple_type (G_TYPE_CHECK_INSTANCE_CAST (_tmp69_, VALA_TYPE_STRUCT, ValaStruct));
7651 		} else {
7652 			_tmp67_ = FALSE;
7653 		}
7654 		if (_tmp67_) {
7655 			ValaCCodeParameter* _tmp70_;
7656 			ValaCCodeParameter* _tmp71_;
7657 			const gchar* _tmp72_;
7658 			const gchar* _tmp73_;
7659 			gchar* _tmp74_;
7660 			gchar* _tmp75_;
7661 			_tmp70_ = cselfparam;
7662 			_tmp71_ = cselfparam;
7663 			_tmp72_ = vala_ccode_parameter_get_type_name (_tmp71_);
7664 			_tmp73_ = _tmp72_;
7665 			_tmp74_ = g_strconcat (_tmp73_, "*", NULL);
7666 			_tmp75_ = _tmp74_;
7667 			vala_ccode_parameter_set_type_name (_tmp71_, _tmp75_);
7668 			_g_free0 (_tmp75_);
7669 		}
7670 		_tmp76_ = function;
7671 		_tmp77_ = cselfparam;
7672 		vala_ccode_function_add_parameter (_tmp76_, _tmp77_);
7673 		_vala_ccode_node_unref0 (cselfparam);
7674 		_vala_code_node_unref0 (this_type);
7675 		_vala_code_node_unref0 (t);
7676 	}
7677 	_tmp80_ = vala_property_accessor_get_writable (acc);
7678 	_tmp81_ = _tmp80_;
7679 	if (_tmp81_) {
7680 		_tmp79_ = TRUE;
7681 	} else {
7682 		gboolean _tmp82_;
7683 		gboolean _tmp83_;
7684 		_tmp82_ = vala_property_accessor_get_construction (acc);
7685 		_tmp83_ = _tmp82_;
7686 		_tmp79_ = _tmp83_;
7687 	}
7688 	if (_tmp79_) {
7689 		_tmp78_ = TRUE;
7690 	} else {
7691 		_tmp78_ = returns_real_struct;
7692 	}
7693 	if (_tmp78_) {
7694 		ValaCCodeFunction* _tmp84_;
7695 		ValaCCodeParameter* _tmp85_;
7696 		_tmp84_ = function;
7697 		_tmp85_ = cvalueparam;
7698 		vala_ccode_function_add_parameter (_tmp84_, _tmp85_);
7699 	}
7700 	_tmp87_ = vala_property_accessor_get_value_type (acc);
7701 	_tmp88_ = _tmp87_;
7702 	if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp88_, VALA_TYPE_ARRAY_TYPE)) {
7703 		ValaProperty* _tmp89_;
7704 		_tmp89_ = prop;
7705 		_tmp86_ = vala_get_ccode_array_length ((ValaCodeNode*) _tmp89_);
7706 	} else {
7707 		_tmp86_ = FALSE;
7708 	}
7709 	if (_tmp86_) {
7710 		ValaArrayType* array_type = NULL;
7711 		ValaDataType* _tmp90_;
7712 		ValaDataType* _tmp91_;
7713 		ValaArrayType* _tmp92_;
7714 		gchar* length_ctype = NULL;
7715 		ValaProperty* _tmp93_;
7716 		gchar* _tmp94_;
7717 		_tmp90_ = vala_property_accessor_get_value_type (acc);
7718 		_tmp91_ = _tmp90_;
7719 		_tmp92_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp91_, VALA_TYPE_ARRAY_TYPE, ValaArrayType));
7720 		array_type = _tmp92_;
7721 		_tmp93_ = prop;
7722 		_tmp94_ = vala_get_ccode_array_length_type ((ValaCodeNode*) _tmp93_);
7723 		length_ctype = _tmp94_;
7724 		{
7725 			gint dim = 0;
7726 			dim = 1;
7727 			{
7728 				gboolean _tmp95_ = FALSE;
7729 				_tmp95_ = TRUE;
7730 				while (TRUE) {
7731 					ValaArrayType* _tmp97_;
7732 					gint _tmp98_;
7733 					gint _tmp99_;
7734 					const gchar* _tmp100_ = NULL;
7735 					gboolean _tmp101_;
7736 					gboolean _tmp102_;
7737 					gchar* _tmp103_ = NULL;
7738 					gboolean _tmp104_;
7739 					gboolean _tmp105_;
7740 					ValaCCodeFunction* _tmp110_;
7741 					gchar* _tmp111_;
7742 					gchar* _tmp112_;
7743 					ValaCCodeParameter* _tmp113_;
7744 					ValaCCodeParameter* _tmp114_;
7745 					if (!_tmp95_) {
7746 						gint _tmp96_;
7747 						_tmp96_ = dim;
7748 						dim = _tmp96_ + 1;
7749 					}
7750 					_tmp95_ = FALSE;
7751 					_tmp97_ = array_type;
7752 					_tmp98_ = vala_array_type_get_rank (_tmp97_);
7753 					_tmp99_ = _tmp98_;
7754 					if (!(dim <= _tmp99_)) {
7755 						break;
7756 					}
7757 					_tmp101_ = vala_property_accessor_get_readable (acc);
7758 					_tmp102_ = _tmp101_;
7759 					if (_tmp102_) {
7760 						_tmp100_ = "result";
7761 					} else {
7762 						_tmp100_ = "value";
7763 					}
7764 					_tmp104_ = vala_property_accessor_get_readable (acc);
7765 					_tmp105_ = _tmp104_;
7766 					if (_tmp105_) {
7767 						const gchar* _tmp106_;
7768 						gchar* _tmp107_;
7769 						_tmp106_ = length_ctype;
7770 						_tmp107_ = g_strconcat (_tmp106_, "*", NULL);
7771 						_g_free0 (_tmp103_);
7772 						_tmp103_ = _tmp107_;
7773 					} else {
7774 						const gchar* _tmp108_;
7775 						gchar* _tmp109_;
7776 						_tmp108_ = length_ctype;
7777 						_tmp109_ = g_strdup (_tmp108_);
7778 						_g_free0 (_tmp103_);
7779 						_tmp103_ = _tmp109_;
7780 					}
7781 					_tmp110_ = function;
7782 					_tmp111_ = vala_ccode_base_module_get_array_length_cname (self, _tmp100_, dim);
7783 					_tmp112_ = _tmp111_;
7784 					_tmp113_ = vala_ccode_parameter_new (_tmp112_, _tmp103_);
7785 					_tmp114_ = _tmp113_;
7786 					vala_ccode_function_add_parameter (_tmp110_, _tmp114_);
7787 					_vala_ccode_node_unref0 (_tmp114_);
7788 					_g_free0 (_tmp112_);
7789 					_g_free0 (_tmp103_);
7790 				}
7791 			}
7792 		}
7793 		_g_free0 (length_ctype);
7794 		_vala_code_node_unref0 (array_type);
7795 	} else {
7796 		gboolean _tmp115_ = FALSE;
7797 		gboolean _tmp116_ = FALSE;
7798 		ValaDataType* _tmp117_;
7799 		ValaDataType* _tmp118_;
7800 		_tmp117_ = vala_property_accessor_get_value_type (acc);
7801 		_tmp118_ = _tmp117_;
7802 		if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp118_, VALA_TYPE_DELEGATE_TYPE)) {
7803 			ValaProperty* _tmp119_;
7804 			_tmp119_ = prop;
7805 			_tmp116_ = vala_get_ccode_delegate_target ((ValaCodeNode*) _tmp119_);
7806 		} else {
7807 			_tmp116_ = FALSE;
7808 		}
7809 		if (_tmp116_) {
7810 			ValaDataType* _tmp120_;
7811 			ValaDataType* _tmp121_;
7812 			ValaDelegate* _tmp122_;
7813 			ValaDelegate* _tmp123_;
7814 			gboolean _tmp124_;
7815 			gboolean _tmp125_;
7816 			_tmp120_ = vala_property_accessor_get_value_type (acc);
7817 			_tmp121_ = _tmp120_;
7818 			_tmp122_ = vala_delegate_type_get_delegate_symbol (G_TYPE_CHECK_INSTANCE_CAST (_tmp121_, VALA_TYPE_DELEGATE_TYPE, ValaDelegateType));
7819 			_tmp123_ = _tmp122_;
7820 			_tmp124_ = vala_delegate_get_has_target (_tmp123_);
7821 			_tmp125_ = _tmp124_;
7822 			_tmp115_ = _tmp125_;
7823 		} else {
7824 			_tmp115_ = FALSE;
7825 		}
7826 		if (_tmp115_) {
7827 			const gchar* _tmp126_ = NULL;
7828 			gboolean _tmp127_;
7829 			gboolean _tmp128_;
7830 			gchar* _tmp129_ = NULL;
7831 			gboolean _tmp130_;
7832 			gboolean _tmp131_;
7833 			ValaCCodeFunction* _tmp138_;
7834 			gchar* _tmp139_;
7835 			gchar* _tmp140_;
7836 			ValaCCodeParameter* _tmp141_;
7837 			ValaCCodeParameter* _tmp142_;
7838 			gboolean _tmp143_ = FALSE;
7839 			gboolean _tmp144_;
7840 			gboolean _tmp145_;
7841 			_tmp127_ = vala_property_accessor_get_readable (acc);
7842 			_tmp128_ = _tmp127_;
7843 			if (_tmp128_) {
7844 				_tmp126_ = "result";
7845 			} else {
7846 				_tmp126_ = "value";
7847 			}
7848 			_tmp130_ = vala_property_accessor_get_readable (acc);
7849 			_tmp131_ = _tmp130_;
7850 			if (_tmp131_) {
7851 				ValaDataType* _tmp132_;
7852 				gchar* _tmp133_;
7853 				gchar* _tmp134_;
7854 				gchar* _tmp135_;
7855 				_tmp132_ = self->delegate_target_type;
7856 				_tmp133_ = vala_get_ccode_name ((ValaCodeNode*) _tmp132_);
7857 				_tmp134_ = _tmp133_;
7858 				_tmp135_ = g_strconcat (_tmp134_, "*", NULL);
7859 				_g_free0 (_tmp129_);
7860 				_tmp129_ = _tmp135_;
7861 				_g_free0 (_tmp134_);
7862 			} else {
7863 				ValaDataType* _tmp136_;
7864 				gchar* _tmp137_;
7865 				_tmp136_ = self->delegate_target_type;
7866 				_tmp137_ = vala_get_ccode_name ((ValaCodeNode*) _tmp136_);
7867 				_g_free0 (_tmp129_);
7868 				_tmp129_ = _tmp137_;
7869 			}
7870 			_tmp138_ = function;
7871 			_tmp139_ = vala_ccode_base_module_get_delegate_target_cname (self, _tmp126_);
7872 			_tmp140_ = _tmp139_;
7873 			_tmp141_ = vala_ccode_parameter_new (_tmp140_, _tmp129_);
7874 			_tmp142_ = _tmp141_;
7875 			vala_ccode_function_add_parameter (_tmp138_, _tmp142_);
7876 			_vala_ccode_node_unref0 (_tmp142_);
7877 			_g_free0 (_tmp140_);
7878 			_tmp144_ = vala_property_accessor_get_readable (acc);
7879 			_tmp145_ = _tmp144_;
7880 			if (!_tmp145_) {
7881 				ValaDataType* _tmp146_;
7882 				ValaDataType* _tmp147_;
7883 				gboolean _tmp148_;
7884 				gboolean _tmp149_;
7885 				_tmp146_ = vala_property_accessor_get_value_type (acc);
7886 				_tmp147_ = _tmp146_;
7887 				_tmp148_ = vala_data_type_get_value_owned (_tmp147_);
7888 				_tmp149_ = _tmp148_;
7889 				_tmp143_ = _tmp149_;
7890 			} else {
7891 				_tmp143_ = FALSE;
7892 			}
7893 			if (_tmp143_) {
7894 				ValaCCodeFunction* _tmp150_;
7895 				gchar* _tmp151_;
7896 				gchar* _tmp152_;
7897 				ValaDelegateType* _tmp153_;
7898 				gchar* _tmp154_;
7899 				gchar* _tmp155_;
7900 				ValaCCodeParameter* _tmp156_;
7901 				ValaCCodeParameter* _tmp157_;
7902 				_tmp150_ = function;
7903 				_tmp151_ = vala_ccode_base_module_get_delegate_target_destroy_notify_cname (self, "value");
7904 				_tmp152_ = _tmp151_;
7905 				_tmp153_ = self->delegate_target_destroy_type;
7906 				_tmp154_ = vala_get_ccode_name ((ValaCodeNode*) _tmp153_);
7907 				_tmp155_ = _tmp154_;
7908 				_tmp156_ = vala_ccode_parameter_new (_tmp152_, _tmp155_);
7909 				_tmp157_ = _tmp156_;
7910 				vala_ccode_function_add_parameter (_tmp150_, _tmp157_);
7911 				_vala_ccode_node_unref0 (_tmp157_);
7912 				_g_free0 (_tmp155_);
7913 				_g_free0 (_tmp152_);
7914 			}
7915 			_g_free0 (_tmp129_);
7916 		}
7917 	}
7918 	_tmp158_ = prop;
7919 	_tmp159_ = vala_symbol_get_version ((ValaSymbol*) _tmp158_);
7920 	_tmp160_ = _tmp159_;
7921 	_tmp161_ = vala_version_attribute_get_deprecated (_tmp160_);
7922 	_tmp162_ = _tmp161_;
7923 	if (_tmp162_) {
7924 		ValaCodeContext* _tmp163_;
7925 		ValaProfile _tmp164_;
7926 		ValaProfile _tmp165_;
7927 		ValaCCodeFunction* _tmp166_;
7928 		ValaCCodeFunction* _tmp167_;
7929 		ValaCCodeModifiers _tmp168_;
7930 		ValaCCodeModifiers _tmp169_;
7931 		_tmp163_ = self->priv->_context;
7932 		_tmp164_ = vala_code_context_get_profile (_tmp163_);
7933 		_tmp165_ = _tmp164_;
7934 		if (_tmp165_ == VALA_PROFILE_GOBJECT) {
7935 			vala_ccode_file_add_include (decl_space, "glib.h", FALSE);
7936 		}
7937 		_tmp166_ = function;
7938 		_tmp167_ = function;
7939 		_tmp168_ = vala_ccode_node_get_modifiers ((ValaCCodeNode*) _tmp167_);
7940 		_tmp169_ = _tmp168_;
7941 		vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp167_, _tmp169_ | VALA_CCODE_MODIFIERS_DEPRECATED);
7942 	}
7943 	_tmp171_ = prop;
7944 	_tmp172_ = vala_property_get_is_abstract (_tmp171_);
7945 	_tmp173_ = _tmp172_;
7946 	if (!_tmp173_) {
7947 		gboolean _tmp174_ = FALSE;
7948 		gboolean _tmp175_ = FALSE;
7949 		ValaProperty* _tmp176_;
7950 		_tmp176_ = prop;
7951 		if (vala_symbol_is_private_symbol ((ValaSymbol*) _tmp176_)) {
7952 			_tmp175_ = TRUE;
7953 		} else {
7954 			gboolean _tmp177_ = FALSE;
7955 			gboolean _tmp178_;
7956 			gboolean _tmp179_;
7957 			_tmp178_ = vala_property_accessor_get_readable (acc);
7958 			_tmp179_ = _tmp178_;
7959 			if (!_tmp179_) {
7960 				gboolean _tmp180_;
7961 				gboolean _tmp181_;
7962 				_tmp180_ = vala_property_accessor_get_writable (acc);
7963 				_tmp181_ = _tmp180_;
7964 				_tmp177_ = !_tmp181_;
7965 			} else {
7966 				_tmp177_ = FALSE;
7967 			}
7968 			_tmp175_ = _tmp177_;
7969 		}
7970 		if (_tmp175_) {
7971 			_tmp174_ = TRUE;
7972 		} else {
7973 			ValaSymbolAccessibility _tmp182_;
7974 			ValaSymbolAccessibility _tmp183_;
7975 			_tmp182_ = vala_symbol_get_access ((ValaSymbol*) acc);
7976 			_tmp183_ = _tmp182_;
7977 			_tmp174_ = _tmp183_ == VALA_SYMBOL_ACCESSIBILITY_PRIVATE;
7978 		}
7979 		_tmp170_ = _tmp174_;
7980 	} else {
7981 		_tmp170_ = FALSE;
7982 	}
7983 	if (_tmp170_) {
7984 		ValaCCodeFunction* _tmp184_;
7985 		ValaCCodeFunction* _tmp185_;
7986 		ValaCCodeModifiers _tmp186_;
7987 		ValaCCodeModifiers _tmp187_;
7988 		_tmp184_ = function;
7989 		_tmp185_ = function;
7990 		_tmp186_ = vala_ccode_node_get_modifiers ((ValaCCodeNode*) _tmp185_);
7991 		_tmp187_ = _tmp186_;
7992 		vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp185_, _tmp187_ | VALA_CCODE_MODIFIERS_STATIC);
7993 	} else {
7994 		gboolean _tmp188_ = FALSE;
7995 		ValaCodeContext* _tmp189_;
7996 		gboolean _tmp190_;
7997 		gboolean _tmp191_;
7998 		_tmp189_ = self->priv->_context;
7999 		_tmp190_ = vala_code_context_get_hide_internal (_tmp189_);
8000 		_tmp191_ = _tmp190_;
8001 		if (_tmp191_) {
8002 			gboolean _tmp192_ = FALSE;
8003 			ValaProperty* _tmp193_;
8004 			_tmp193_ = prop;
8005 			if (vala_symbol_is_internal_symbol ((ValaSymbol*) _tmp193_)) {
8006 				_tmp192_ = TRUE;
8007 			} else {
8008 				ValaSymbolAccessibility _tmp194_;
8009 				ValaSymbolAccessibility _tmp195_;
8010 				_tmp194_ = vala_symbol_get_access ((ValaSymbol*) acc);
8011 				_tmp195_ = _tmp194_;
8012 				_tmp192_ = _tmp195_ == VALA_SYMBOL_ACCESSIBILITY_INTERNAL;
8013 			}
8014 			_tmp188_ = _tmp192_;
8015 		} else {
8016 			_tmp188_ = FALSE;
8017 		}
8018 		if (_tmp188_) {
8019 			ValaCCodeFunction* _tmp196_;
8020 			ValaCCodeFunction* _tmp197_;
8021 			ValaCCodeModifiers _tmp198_;
8022 			ValaCCodeModifiers _tmp199_;
8023 			_tmp196_ = function;
8024 			_tmp197_ = function;
8025 			_tmp198_ = vala_ccode_node_get_modifiers ((ValaCCodeNode*) _tmp197_);
8026 			_tmp199_ = _tmp198_;
8027 			vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp197_, _tmp199_ | VALA_CCODE_MODIFIERS_INTERNAL);
8028 		}
8029 	}
8030 	_tmp200_ = function;
8031 	vala_ccode_file_add_function_declaration (decl_space, _tmp200_);
8032 	_vala_ccode_node_unref0 (function);
8033 	_vala_ccode_node_unref0 (cvalueparam);
8034 	_vala_code_node_unref0 (prop);
8035 }
8036 
8037 static void
vala_ccode_base_module_real_visit_property_accessor(ValaCodeVisitor * base,ValaPropertyAccessor * acc)8038 vala_ccode_base_module_real_visit_property_accessor (ValaCodeVisitor* base,
8039                                                      ValaPropertyAccessor* acc)
8040 {
8041 	ValaCCodeBaseModule * self;
8042 	ValaCCodeBaseModuleEmitContext* _tmp0_;
8043 	ValaCCodeBaseModuleEmitContext* _tmp1_;
8044 	ValaSourceReference* _tmp2_;
8045 	ValaSourceReference* _tmp3_;
8046 	ValaProperty* prop = NULL;
8047 	ValaProperty* _tmp4_;
8048 	ValaProperty* _tmp5_;
8049 	ValaProperty* _tmp6_;
8050 	ValaComment* _tmp7_;
8051 	ValaComment* _tmp8_;
8052 	gboolean _tmp16_ = FALSE;
8053 	gboolean _tmp17_;
8054 	gboolean _tmp18_;
8055 	gboolean returns_real_struct = FALSE;
8056 	ValaLocalVariable* _tmp22_;
8057 	ValaLocalVariable* _tmp23_;
8058 	ValaTypeSymbol* t = NULL;
8059 	ValaProperty* _tmp26_;
8060 	ValaSymbol* _tmp27_;
8061 	ValaSymbol* _tmp28_;
8062 	ValaTypeSymbol* _tmp29_;
8063 	gboolean _tmp30_ = FALSE;
8064 	gboolean _tmp31_ = FALSE;
8065 	ValaProperty* _tmp32_;
8066 	gboolean _tmp33_;
8067 	gboolean _tmp34_;
8068 	ValaSourceFileType _tmp64_;
8069 	ValaSourceFileType _tmp65_;
8070 	ValaDataType* this_type = NULL;
8071 	ValaTypeSymbol* _tmp66_;
8072 	ValaDataType* _tmp67_;
8073 	ValaCCodeParameter* cselfparam = NULL;
8074 	ValaDataType* _tmp68_;
8075 	gchar* _tmp69_;
8076 	gchar* _tmp70_;
8077 	ValaCCodeParameter* _tmp71_;
8078 	ValaCCodeParameter* _tmp72_;
8079 	gboolean _tmp73_ = FALSE;
8080 	ValaTypeSymbol* _tmp74_;
8081 	ValaCCodeParameter* cvalueparam = NULL;
8082 	gboolean _tmp107_ = FALSE;
8083 	ValaProperty* _tmp108_;
8084 	gboolean _tmp109_;
8085 	gboolean _tmp110_;
8086 	gboolean _tmp408_ = FALSE;
8087 	ValaProperty* _tmp409_;
8088 	gboolean _tmp410_;
8089 	gboolean _tmp411_;
8090 	self = (ValaCCodeBaseModule*) base;
8091 	g_return_if_fail (acc != NULL);
8092 	_tmp0_ = vala_ccode_base_module_emit_context_new ((ValaSymbol*) acc);
8093 	_tmp1_ = _tmp0_;
8094 	vala_ccode_base_module_push_context (self, _tmp1_);
8095 	_vala_ccode_base_module_emit_context_unref0 (_tmp1_);
8096 	_tmp2_ = vala_code_node_get_source_reference ((ValaCodeNode*) acc);
8097 	_tmp3_ = _tmp2_;
8098 	vala_ccode_base_module_push_line (self, _tmp3_);
8099 	_tmp4_ = vala_property_accessor_get_prop (acc);
8100 	_tmp5_ = _tmp4_;
8101 	_tmp6_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp5_, VALA_TYPE_PROPERTY, ValaProperty));
8102 	prop = _tmp6_;
8103 	_tmp7_ = vala_symbol_get_comment ((ValaSymbol*) acc);
8104 	_tmp8_ = _tmp7_;
8105 	if (_tmp8_ != NULL) {
8106 		ValaCCodeFile* _tmp9_;
8107 		ValaComment* _tmp10_;
8108 		ValaComment* _tmp11_;
8109 		const gchar* _tmp12_;
8110 		const gchar* _tmp13_;
8111 		ValaCCodeComment* _tmp14_;
8112 		ValaCCodeComment* _tmp15_;
8113 		_tmp9_ = self->cfile;
8114 		_tmp10_ = vala_symbol_get_comment ((ValaSymbol*) acc);
8115 		_tmp11_ = _tmp10_;
8116 		_tmp12_ = vala_comment_get_content (_tmp11_);
8117 		_tmp13_ = _tmp12_;
8118 		_tmp14_ = vala_ccode_comment_new (_tmp13_);
8119 		_tmp15_ = _tmp14_;
8120 		vala_ccode_file_add_type_member_definition (_tmp9_, (ValaCCodeNode*) _tmp15_);
8121 		_vala_ccode_node_unref0 (_tmp15_);
8122 	}
8123 	_tmp17_ = vala_property_accessor_get_readable (acc);
8124 	_tmp18_ = _tmp17_;
8125 	if (_tmp18_) {
8126 		ValaProperty* _tmp19_;
8127 		ValaDataType* _tmp20_;
8128 		ValaDataType* _tmp21_;
8129 		_tmp19_ = prop;
8130 		_tmp20_ = vala_property_get_property_type (_tmp19_);
8131 		_tmp21_ = _tmp20_;
8132 		_tmp16_ = vala_data_type_is_real_non_null_struct_type (_tmp21_);
8133 	} else {
8134 		_tmp16_ = FALSE;
8135 	}
8136 	returns_real_struct = _tmp16_;
8137 	_tmp22_ = vala_subroutine_get_result_var ((ValaSubroutine*) acc);
8138 	_tmp23_ = _tmp22_;
8139 	if (_tmp23_ != NULL) {
8140 		ValaLocalVariable* _tmp24_;
8141 		ValaLocalVariable* _tmp25_;
8142 		_tmp24_ = vala_subroutine_get_result_var ((ValaSubroutine*) acc);
8143 		_tmp25_ = _tmp24_;
8144 		vala_code_node_accept ((ValaCodeNode*) _tmp25_, (ValaCodeVisitor*) self);
8145 	}
8146 	_tmp26_ = prop;
8147 	_tmp27_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp26_);
8148 	_tmp28_ = _tmp27_;
8149 	_tmp29_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp28_, VALA_TYPE_TYPESYMBOL, ValaTypeSymbol));
8150 	t = _tmp29_;
8151 	_tmp32_ = prop;
8152 	_tmp33_ = vala_property_get_is_abstract (_tmp32_);
8153 	_tmp34_ = _tmp33_;
8154 	if (_tmp34_) {
8155 		_tmp31_ = TRUE;
8156 	} else {
8157 		ValaProperty* _tmp35_;
8158 		gboolean _tmp36_;
8159 		gboolean _tmp37_;
8160 		_tmp35_ = prop;
8161 		_tmp36_ = vala_property_get_is_virtual (_tmp35_);
8162 		_tmp37_ = _tmp36_;
8163 		_tmp31_ = _tmp37_;
8164 	}
8165 	if (_tmp31_) {
8166 		_tmp30_ = TRUE;
8167 	} else {
8168 		gboolean _tmp38_ = FALSE;
8169 		ValaProperty* _tmp39_;
8170 		ValaProperty* _tmp40_;
8171 		ValaProperty* _tmp41_;
8172 		_tmp39_ = prop;
8173 		_tmp40_ = vala_property_get_base_property (_tmp39_);
8174 		_tmp41_ = _tmp40_;
8175 		if (_tmp41_ == NULL) {
8176 			ValaProperty* _tmp42_;
8177 			ValaProperty* _tmp43_;
8178 			ValaProperty* _tmp44_;
8179 			_tmp42_ = prop;
8180 			_tmp43_ = vala_property_get_base_interface_property (_tmp42_);
8181 			_tmp44_ = _tmp43_;
8182 			_tmp38_ = _tmp44_ == NULL;
8183 		} else {
8184 			_tmp38_ = FALSE;
8185 		}
8186 		_tmp30_ = _tmp38_;
8187 	}
8188 	if (_tmp30_) {
8189 		ValaCCodeFile* _tmp45_;
8190 		gboolean _tmp46_ = FALSE;
8191 		gboolean _tmp47_;
8192 		gboolean _tmp48_;
8193 		_tmp45_ = self->cfile;
8194 		vala_ccode_base_module_generate_property_accessor_declaration (self, acc, _tmp45_);
8195 		_tmp47_ = vala_property_accessor_get_readable (acc);
8196 		_tmp48_ = _tmp47_;
8197 		if (_tmp48_) {
8198 			_tmp46_ = TRUE;
8199 		} else {
8200 			gboolean _tmp49_;
8201 			gboolean _tmp50_;
8202 			_tmp49_ = vala_property_accessor_get_writable (acc);
8203 			_tmp50_ = _tmp49_;
8204 			_tmp46_ = _tmp50_;
8205 		}
8206 		if (_tmp46_) {
8207 			gboolean _tmp51_ = FALSE;
8208 			ValaProperty* _tmp52_;
8209 			gboolean _tmp59_ = FALSE;
8210 			ValaProperty* _tmp60_;
8211 			_tmp52_ = prop;
8212 			if (!vala_symbol_is_internal_symbol ((ValaSymbol*) _tmp52_)) {
8213 				gboolean _tmp53_ = FALSE;
8214 				ValaSymbolAccessibility _tmp54_;
8215 				ValaSymbolAccessibility _tmp55_;
8216 				_tmp54_ = vala_symbol_get_access ((ValaSymbol*) acc);
8217 				_tmp55_ = _tmp54_;
8218 				if (_tmp55_ == VALA_SYMBOL_ACCESSIBILITY_PUBLIC) {
8219 					_tmp53_ = TRUE;
8220 				} else {
8221 					ValaSymbolAccessibility _tmp56_;
8222 					ValaSymbolAccessibility _tmp57_;
8223 					_tmp56_ = vala_symbol_get_access ((ValaSymbol*) acc);
8224 					_tmp57_ = _tmp56_;
8225 					_tmp53_ = _tmp57_ == VALA_SYMBOL_ACCESSIBILITY_PROTECTED;
8226 				}
8227 				_tmp51_ = _tmp53_;
8228 			} else {
8229 				_tmp51_ = FALSE;
8230 			}
8231 			if (_tmp51_) {
8232 				ValaCCodeFile* _tmp58_;
8233 				_tmp58_ = self->header_file;
8234 				vala_ccode_base_module_generate_property_accessor_declaration (self, acc, _tmp58_);
8235 			}
8236 			_tmp60_ = prop;
8237 			if (!vala_symbol_is_private_symbol ((ValaSymbol*) _tmp60_)) {
8238 				ValaSymbolAccessibility _tmp61_;
8239 				ValaSymbolAccessibility _tmp62_;
8240 				_tmp61_ = vala_symbol_get_access ((ValaSymbol*) acc);
8241 				_tmp62_ = _tmp61_;
8242 				_tmp59_ = _tmp62_ != VALA_SYMBOL_ACCESSIBILITY_PRIVATE;
8243 			} else {
8244 				_tmp59_ = FALSE;
8245 			}
8246 			if (_tmp59_) {
8247 				ValaCCodeFile* _tmp63_;
8248 				_tmp63_ = self->internal_header_file;
8249 				vala_ccode_base_module_generate_property_accessor_declaration (self, acc, _tmp63_);
8250 			}
8251 		}
8252 	}
8253 	_tmp64_ = vala_symbol_get_source_type ((ValaSymbol*) acc);
8254 	_tmp65_ = _tmp64_;
8255 	if (_tmp65_ == VALA_SOURCE_FILE_TYPE_FAST) {
8256 		vala_ccode_base_module_pop_line (self);
8257 		vala_ccode_base_module_pop_context (self);
8258 		_vala_code_node_unref0 (t);
8259 		_vala_code_node_unref0 (prop);
8260 		return;
8261 	}
8262 	_tmp66_ = t;
8263 	_tmp67_ = vala_semantic_analyzer_get_data_type_for_symbol ((ValaSymbol*) _tmp66_);
8264 	this_type = _tmp67_;
8265 	_tmp68_ = this_type;
8266 	_tmp69_ = vala_get_ccode_name ((ValaCodeNode*) _tmp68_);
8267 	_tmp70_ = _tmp69_;
8268 	_tmp71_ = vala_ccode_parameter_new ("self", _tmp70_);
8269 	_tmp72_ = _tmp71_;
8270 	_g_free0 (_tmp70_);
8271 	cselfparam = _tmp72_;
8272 	_tmp74_ = t;
8273 	if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp74_, VALA_TYPE_STRUCT)) {
8274 		ValaTypeSymbol* _tmp75_;
8275 		_tmp75_ = t;
8276 		_tmp73_ = !vala_struct_is_simple_type (G_TYPE_CHECK_INSTANCE_CAST (_tmp75_, VALA_TYPE_STRUCT, ValaStruct));
8277 	} else {
8278 		_tmp73_ = FALSE;
8279 	}
8280 	if (_tmp73_) {
8281 		ValaCCodeParameter* _tmp76_;
8282 		ValaCCodeParameter* _tmp77_;
8283 		const gchar* _tmp78_;
8284 		const gchar* _tmp79_;
8285 		gchar* _tmp80_;
8286 		gchar* _tmp81_;
8287 		_tmp76_ = cselfparam;
8288 		_tmp77_ = cselfparam;
8289 		_tmp78_ = vala_ccode_parameter_get_type_name (_tmp77_);
8290 		_tmp79_ = _tmp78_;
8291 		_tmp80_ = g_strconcat (_tmp79_, "*", NULL);
8292 		_tmp81_ = _tmp80_;
8293 		vala_ccode_parameter_set_type_name (_tmp77_, _tmp81_);
8294 		_g_free0 (_tmp81_);
8295 	}
8296 	if (returns_real_struct) {
8297 		ValaDataType* _tmp82_;
8298 		ValaDataType* _tmp83_;
8299 		gchar* _tmp84_;
8300 		gchar* _tmp85_;
8301 		gchar* _tmp86_;
8302 		gchar* _tmp87_;
8303 		ValaCCodeParameter* _tmp88_;
8304 		_tmp82_ = vala_property_accessor_get_value_type (acc);
8305 		_tmp83_ = _tmp82_;
8306 		_tmp84_ = vala_get_ccode_name ((ValaCodeNode*) _tmp83_);
8307 		_tmp85_ = _tmp84_;
8308 		_tmp86_ = g_strdup_printf ("%s *", _tmp85_);
8309 		_tmp87_ = _tmp86_;
8310 		_tmp88_ = vala_ccode_parameter_new ("result", _tmp87_);
8311 		_vala_ccode_node_unref0 (cvalueparam);
8312 		cvalueparam = _tmp88_;
8313 		_g_free0 (_tmp87_);
8314 		_g_free0 (_tmp85_);
8315 	} else {
8316 		gboolean _tmp89_ = FALSE;
8317 		gboolean _tmp90_;
8318 		gboolean _tmp91_;
8319 		_tmp90_ = vala_property_accessor_get_readable (acc);
8320 		_tmp91_ = _tmp90_;
8321 		if (!_tmp91_) {
8322 			ValaProperty* _tmp92_;
8323 			ValaDataType* _tmp93_;
8324 			ValaDataType* _tmp94_;
8325 			_tmp92_ = prop;
8326 			_tmp93_ = vala_property_get_property_type (_tmp92_);
8327 			_tmp94_ = _tmp93_;
8328 			_tmp89_ = vala_data_type_is_real_non_null_struct_type (_tmp94_);
8329 		} else {
8330 			_tmp89_ = FALSE;
8331 		}
8332 		if (_tmp89_) {
8333 			ValaDataType* _tmp95_;
8334 			ValaDataType* _tmp96_;
8335 			gchar* _tmp97_;
8336 			gchar* _tmp98_;
8337 			gchar* _tmp99_;
8338 			gchar* _tmp100_;
8339 			ValaCCodeParameter* _tmp101_;
8340 			_tmp95_ = vala_property_accessor_get_value_type (acc);
8341 			_tmp96_ = _tmp95_;
8342 			_tmp97_ = vala_get_ccode_name ((ValaCodeNode*) _tmp96_);
8343 			_tmp98_ = _tmp97_;
8344 			_tmp99_ = g_strdup_printf ("%s *", _tmp98_);
8345 			_tmp100_ = _tmp99_;
8346 			_tmp101_ = vala_ccode_parameter_new ("value", _tmp100_);
8347 			_vala_ccode_node_unref0 (cvalueparam);
8348 			cvalueparam = _tmp101_;
8349 			_g_free0 (_tmp100_);
8350 			_g_free0 (_tmp98_);
8351 		} else {
8352 			ValaDataType* _tmp102_;
8353 			ValaDataType* _tmp103_;
8354 			gchar* _tmp104_;
8355 			gchar* _tmp105_;
8356 			ValaCCodeParameter* _tmp106_;
8357 			_tmp102_ = vala_property_accessor_get_value_type (acc);
8358 			_tmp103_ = _tmp102_;
8359 			_tmp104_ = vala_get_ccode_name ((ValaCodeNode*) _tmp103_);
8360 			_tmp105_ = _tmp104_;
8361 			_tmp106_ = vala_ccode_parameter_new ("value", _tmp105_);
8362 			_vala_ccode_node_unref0 (cvalueparam);
8363 			cvalueparam = _tmp106_;
8364 			_g_free0 (_tmp105_);
8365 		}
8366 	}
8367 	_tmp108_ = prop;
8368 	_tmp109_ = vala_property_get_is_abstract (_tmp108_);
8369 	_tmp110_ = _tmp109_;
8370 	if (_tmp110_) {
8371 		_tmp107_ = TRUE;
8372 	} else {
8373 		ValaProperty* _tmp111_;
8374 		gboolean _tmp112_;
8375 		gboolean _tmp113_;
8376 		_tmp111_ = prop;
8377 		_tmp112_ = vala_property_get_is_virtual (_tmp111_);
8378 		_tmp113_ = _tmp112_;
8379 		_tmp107_ = _tmp113_;
8380 	}
8381 	if (_tmp107_) {
8382 		ValaCCodeFunction* function = NULL;
8383 		gboolean _tmp114_ = FALSE;
8384 		gboolean _tmp115_;
8385 		gboolean _tmp116_;
8386 		ValaCCodeFunction* _tmp127_;
8387 		ValaCCodeParameter* _tmp128_;
8388 		gboolean _tmp129_ = FALSE;
8389 		gboolean _tmp130_ = FALSE;
8390 		gboolean _tmp131_;
8391 		gboolean _tmp132_;
8392 		gboolean _tmp137_ = FALSE;
8393 		ValaDataType* _tmp138_;
8394 		ValaDataType* _tmp139_;
8395 		gboolean _tmp209_ = FALSE;
8396 		ValaProperty* _tmp210_;
8397 		gboolean _tmp211_;
8398 		gboolean _tmp212_;
8399 		ValaCCodeFunction* _tmp239_;
8400 		ValaProperty* _tmp240_;
8401 		ValaMemberBinding _tmp241_;
8402 		ValaMemberBinding _tmp242_;
8403 		ValaCCodeExpression* vcast = NULL;
8404 		ValaProperty* _tmp250_;
8405 		ValaSymbol* _tmp251_;
8406 		ValaSymbol* _tmp252_;
8407 		gboolean _tmp283_;
8408 		gboolean _tmp284_;
8409 		ValaCCodeFile* _tmp406_;
8410 		ValaCCodeFunction* _tmp407_;
8411 		_tmp115_ = vala_property_accessor_get_readable (acc);
8412 		_tmp116_ = _tmp115_;
8413 		if (_tmp116_) {
8414 			_tmp114_ = !returns_real_struct;
8415 		} else {
8416 			_tmp114_ = FALSE;
8417 		}
8418 		if (_tmp114_) {
8419 			gchar* _tmp117_;
8420 			gchar* _tmp118_;
8421 			ValaDataType* _tmp119_;
8422 			ValaDataType* _tmp120_;
8423 			gchar* _tmp121_;
8424 			gchar* _tmp122_;
8425 			ValaCCodeFunction* _tmp123_;
8426 			_tmp117_ = vala_get_ccode_name ((ValaCodeNode*) acc);
8427 			_tmp118_ = _tmp117_;
8428 			_tmp119_ = vala_ccode_base_module_get_current_return_type (self);
8429 			_tmp120_ = _tmp119_;
8430 			_tmp121_ = vala_get_ccode_name ((ValaCodeNode*) _tmp120_);
8431 			_tmp122_ = _tmp121_;
8432 			_tmp123_ = vala_ccode_function_new (_tmp118_, _tmp122_);
8433 			_vala_ccode_node_unref0 (function);
8434 			function = _tmp123_;
8435 			_g_free0 (_tmp122_);
8436 			_g_free0 (_tmp118_);
8437 		} else {
8438 			gchar* _tmp124_;
8439 			gchar* _tmp125_;
8440 			ValaCCodeFunction* _tmp126_;
8441 			_tmp124_ = vala_get_ccode_name ((ValaCodeNode*) acc);
8442 			_tmp125_ = _tmp124_;
8443 			_tmp126_ = vala_ccode_function_new (_tmp125_, "void");
8444 			_vala_ccode_node_unref0 (function);
8445 			function = _tmp126_;
8446 			_g_free0 (_tmp125_);
8447 		}
8448 		_tmp127_ = function;
8449 		_tmp128_ = cselfparam;
8450 		vala_ccode_function_add_parameter (_tmp127_, _tmp128_);
8451 		_tmp131_ = vala_property_accessor_get_writable (acc);
8452 		_tmp132_ = _tmp131_;
8453 		if (_tmp132_) {
8454 			_tmp130_ = TRUE;
8455 		} else {
8456 			gboolean _tmp133_;
8457 			gboolean _tmp134_;
8458 			_tmp133_ = vala_property_accessor_get_construction (acc);
8459 			_tmp134_ = _tmp133_;
8460 			_tmp130_ = _tmp134_;
8461 		}
8462 		if (_tmp130_) {
8463 			_tmp129_ = TRUE;
8464 		} else {
8465 			_tmp129_ = returns_real_struct;
8466 		}
8467 		if (_tmp129_) {
8468 			ValaCCodeFunction* _tmp135_;
8469 			ValaCCodeParameter* _tmp136_;
8470 			_tmp135_ = function;
8471 			_tmp136_ = cvalueparam;
8472 			vala_ccode_function_add_parameter (_tmp135_, _tmp136_);
8473 		}
8474 		_tmp138_ = vala_property_accessor_get_value_type (acc);
8475 		_tmp139_ = _tmp138_;
8476 		if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp139_, VALA_TYPE_ARRAY_TYPE)) {
8477 			ValaProperty* _tmp140_;
8478 			_tmp140_ = prop;
8479 			_tmp137_ = vala_get_ccode_array_length ((ValaCodeNode*) _tmp140_);
8480 		} else {
8481 			_tmp137_ = FALSE;
8482 		}
8483 		if (_tmp137_) {
8484 			ValaArrayType* array_type = NULL;
8485 			ValaDataType* _tmp141_;
8486 			ValaDataType* _tmp142_;
8487 			ValaArrayType* _tmp143_;
8488 			gchar* length_ctype = NULL;
8489 			ValaProperty* _tmp144_;
8490 			gchar* _tmp145_;
8491 			_tmp141_ = vala_property_accessor_get_value_type (acc);
8492 			_tmp142_ = _tmp141_;
8493 			_tmp143_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp142_, VALA_TYPE_ARRAY_TYPE, ValaArrayType));
8494 			array_type = _tmp143_;
8495 			_tmp144_ = prop;
8496 			_tmp145_ = vala_get_ccode_array_length_type ((ValaCodeNode*) _tmp144_);
8497 			length_ctype = _tmp145_;
8498 			{
8499 				gint dim = 0;
8500 				dim = 1;
8501 				{
8502 					gboolean _tmp146_ = FALSE;
8503 					_tmp146_ = TRUE;
8504 					while (TRUE) {
8505 						ValaArrayType* _tmp148_;
8506 						gint _tmp149_;
8507 						gint _tmp150_;
8508 						const gchar* _tmp151_ = NULL;
8509 						gboolean _tmp152_;
8510 						gboolean _tmp153_;
8511 						gchar* _tmp154_ = NULL;
8512 						gboolean _tmp155_;
8513 						gboolean _tmp156_;
8514 						ValaCCodeFunction* _tmp161_;
8515 						gchar* _tmp162_;
8516 						gchar* _tmp163_;
8517 						ValaCCodeParameter* _tmp164_;
8518 						ValaCCodeParameter* _tmp165_;
8519 						if (!_tmp146_) {
8520 							gint _tmp147_;
8521 							_tmp147_ = dim;
8522 							dim = _tmp147_ + 1;
8523 						}
8524 						_tmp146_ = FALSE;
8525 						_tmp148_ = array_type;
8526 						_tmp149_ = vala_array_type_get_rank (_tmp148_);
8527 						_tmp150_ = _tmp149_;
8528 						if (!(dim <= _tmp150_)) {
8529 							break;
8530 						}
8531 						_tmp152_ = vala_property_accessor_get_readable (acc);
8532 						_tmp153_ = _tmp152_;
8533 						if (_tmp153_) {
8534 							_tmp151_ = "result";
8535 						} else {
8536 							_tmp151_ = "value";
8537 						}
8538 						_tmp155_ = vala_property_accessor_get_readable (acc);
8539 						_tmp156_ = _tmp155_;
8540 						if (_tmp156_) {
8541 							const gchar* _tmp157_;
8542 							gchar* _tmp158_;
8543 							_tmp157_ = length_ctype;
8544 							_tmp158_ = g_strconcat (_tmp157_, "*", NULL);
8545 							_g_free0 (_tmp154_);
8546 							_tmp154_ = _tmp158_;
8547 						} else {
8548 							const gchar* _tmp159_;
8549 							gchar* _tmp160_;
8550 							_tmp159_ = length_ctype;
8551 							_tmp160_ = g_strdup (_tmp159_);
8552 							_g_free0 (_tmp154_);
8553 							_tmp154_ = _tmp160_;
8554 						}
8555 						_tmp161_ = function;
8556 						_tmp162_ = vala_ccode_base_module_get_array_length_cname (self, _tmp151_, dim);
8557 						_tmp163_ = _tmp162_;
8558 						_tmp164_ = vala_ccode_parameter_new (_tmp163_, _tmp154_);
8559 						_tmp165_ = _tmp164_;
8560 						vala_ccode_function_add_parameter (_tmp161_, _tmp165_);
8561 						_vala_ccode_node_unref0 (_tmp165_);
8562 						_g_free0 (_tmp163_);
8563 						_g_free0 (_tmp154_);
8564 					}
8565 				}
8566 			}
8567 			_g_free0 (length_ctype);
8568 			_vala_code_node_unref0 (array_type);
8569 		} else {
8570 			gboolean _tmp166_ = FALSE;
8571 			gboolean _tmp167_ = FALSE;
8572 			ValaDataType* _tmp168_;
8573 			ValaDataType* _tmp169_;
8574 			_tmp168_ = vala_property_accessor_get_value_type (acc);
8575 			_tmp169_ = _tmp168_;
8576 			if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp169_, VALA_TYPE_DELEGATE_TYPE)) {
8577 				ValaProperty* _tmp170_;
8578 				_tmp170_ = prop;
8579 				_tmp167_ = vala_get_ccode_delegate_target ((ValaCodeNode*) _tmp170_);
8580 			} else {
8581 				_tmp167_ = FALSE;
8582 			}
8583 			if (_tmp167_) {
8584 				ValaDataType* _tmp171_;
8585 				ValaDataType* _tmp172_;
8586 				ValaDelegate* _tmp173_;
8587 				ValaDelegate* _tmp174_;
8588 				gboolean _tmp175_;
8589 				gboolean _tmp176_;
8590 				_tmp171_ = vala_property_accessor_get_value_type (acc);
8591 				_tmp172_ = _tmp171_;
8592 				_tmp173_ = vala_delegate_type_get_delegate_symbol (G_TYPE_CHECK_INSTANCE_CAST (_tmp172_, VALA_TYPE_DELEGATE_TYPE, ValaDelegateType));
8593 				_tmp174_ = _tmp173_;
8594 				_tmp175_ = vala_delegate_get_has_target (_tmp174_);
8595 				_tmp176_ = _tmp175_;
8596 				_tmp166_ = _tmp176_;
8597 			} else {
8598 				_tmp166_ = FALSE;
8599 			}
8600 			if (_tmp166_) {
8601 				const gchar* _tmp177_ = NULL;
8602 				gboolean _tmp178_;
8603 				gboolean _tmp179_;
8604 				gchar* _tmp180_ = NULL;
8605 				gboolean _tmp181_;
8606 				gboolean _tmp182_;
8607 				ValaCCodeFunction* _tmp189_;
8608 				gchar* _tmp190_;
8609 				gchar* _tmp191_;
8610 				ValaCCodeParameter* _tmp192_;
8611 				ValaCCodeParameter* _tmp193_;
8612 				gboolean _tmp194_ = FALSE;
8613 				gboolean _tmp195_;
8614 				gboolean _tmp196_;
8615 				_tmp178_ = vala_property_accessor_get_readable (acc);
8616 				_tmp179_ = _tmp178_;
8617 				if (_tmp179_) {
8618 					_tmp177_ = "result";
8619 				} else {
8620 					_tmp177_ = "value";
8621 				}
8622 				_tmp181_ = vala_property_accessor_get_readable (acc);
8623 				_tmp182_ = _tmp181_;
8624 				if (_tmp182_) {
8625 					ValaDataType* _tmp183_;
8626 					gchar* _tmp184_;
8627 					gchar* _tmp185_;
8628 					gchar* _tmp186_;
8629 					_tmp183_ = self->delegate_target_type;
8630 					_tmp184_ = vala_get_ccode_name ((ValaCodeNode*) _tmp183_);
8631 					_tmp185_ = _tmp184_;
8632 					_tmp186_ = g_strconcat (_tmp185_, "*", NULL);
8633 					_g_free0 (_tmp180_);
8634 					_tmp180_ = _tmp186_;
8635 					_g_free0 (_tmp185_);
8636 				} else {
8637 					ValaDataType* _tmp187_;
8638 					gchar* _tmp188_;
8639 					_tmp187_ = self->delegate_target_type;
8640 					_tmp188_ = vala_get_ccode_name ((ValaCodeNode*) _tmp187_);
8641 					_g_free0 (_tmp180_);
8642 					_tmp180_ = _tmp188_;
8643 				}
8644 				_tmp189_ = function;
8645 				_tmp190_ = vala_ccode_base_module_get_delegate_target_cname (self, _tmp177_);
8646 				_tmp191_ = _tmp190_;
8647 				_tmp192_ = vala_ccode_parameter_new (_tmp191_, _tmp180_);
8648 				_tmp193_ = _tmp192_;
8649 				vala_ccode_function_add_parameter (_tmp189_, _tmp193_);
8650 				_vala_ccode_node_unref0 (_tmp193_);
8651 				_g_free0 (_tmp191_);
8652 				_tmp195_ = vala_property_accessor_get_readable (acc);
8653 				_tmp196_ = _tmp195_;
8654 				if (!_tmp196_) {
8655 					ValaDataType* _tmp197_;
8656 					ValaDataType* _tmp198_;
8657 					gboolean _tmp199_;
8658 					gboolean _tmp200_;
8659 					_tmp197_ = vala_property_accessor_get_value_type (acc);
8660 					_tmp198_ = _tmp197_;
8661 					_tmp199_ = vala_data_type_get_value_owned (_tmp198_);
8662 					_tmp200_ = _tmp199_;
8663 					_tmp194_ = _tmp200_;
8664 				} else {
8665 					_tmp194_ = FALSE;
8666 				}
8667 				if (_tmp194_) {
8668 					ValaCCodeFunction* _tmp201_;
8669 					gchar* _tmp202_;
8670 					gchar* _tmp203_;
8671 					ValaDelegateType* _tmp204_;
8672 					gchar* _tmp205_;
8673 					gchar* _tmp206_;
8674 					ValaCCodeParameter* _tmp207_;
8675 					ValaCCodeParameter* _tmp208_;
8676 					_tmp201_ = function;
8677 					_tmp202_ = vala_ccode_base_module_get_delegate_target_destroy_notify_cname (self, "value");
8678 					_tmp203_ = _tmp202_;
8679 					_tmp204_ = self->delegate_target_destroy_type;
8680 					_tmp205_ = vala_get_ccode_name ((ValaCodeNode*) _tmp204_);
8681 					_tmp206_ = _tmp205_;
8682 					_tmp207_ = vala_ccode_parameter_new (_tmp203_, _tmp206_);
8683 					_tmp208_ = _tmp207_;
8684 					vala_ccode_function_add_parameter (_tmp201_, _tmp208_);
8685 					_vala_ccode_node_unref0 (_tmp208_);
8686 					_g_free0 (_tmp206_);
8687 					_g_free0 (_tmp203_);
8688 				}
8689 				_g_free0 (_tmp180_);
8690 			}
8691 		}
8692 		_tmp210_ = prop;
8693 		_tmp211_ = vala_property_get_is_abstract (_tmp210_);
8694 		_tmp212_ = _tmp211_;
8695 		if (!_tmp212_) {
8696 			gboolean _tmp213_ = FALSE;
8697 			gboolean _tmp214_ = FALSE;
8698 			ValaProperty* _tmp215_;
8699 			_tmp215_ = prop;
8700 			if (vala_symbol_is_private_symbol ((ValaSymbol*) _tmp215_)) {
8701 				_tmp214_ = TRUE;
8702 			} else {
8703 				gboolean _tmp216_ = FALSE;
8704 				gboolean _tmp217_;
8705 				gboolean _tmp218_;
8706 				_tmp217_ = vala_property_accessor_get_readable (acc);
8707 				_tmp218_ = _tmp217_;
8708 				if (_tmp218_) {
8709 					_tmp216_ = TRUE;
8710 				} else {
8711 					gboolean _tmp219_;
8712 					gboolean _tmp220_;
8713 					_tmp219_ = vala_property_accessor_get_writable (acc);
8714 					_tmp220_ = _tmp219_;
8715 					_tmp216_ = _tmp220_;
8716 				}
8717 				_tmp214_ = !_tmp216_;
8718 			}
8719 			if (_tmp214_) {
8720 				_tmp213_ = TRUE;
8721 			} else {
8722 				ValaSymbolAccessibility _tmp221_;
8723 				ValaSymbolAccessibility _tmp222_;
8724 				_tmp221_ = vala_symbol_get_access ((ValaSymbol*) acc);
8725 				_tmp222_ = _tmp221_;
8726 				_tmp213_ = _tmp222_ == VALA_SYMBOL_ACCESSIBILITY_PRIVATE;
8727 			}
8728 			_tmp209_ = _tmp213_;
8729 		} else {
8730 			_tmp209_ = FALSE;
8731 		}
8732 		if (_tmp209_) {
8733 			ValaCCodeFunction* _tmp223_;
8734 			ValaCCodeFunction* _tmp224_;
8735 			ValaCCodeModifiers _tmp225_;
8736 			ValaCCodeModifiers _tmp226_;
8737 			_tmp223_ = function;
8738 			_tmp224_ = function;
8739 			_tmp225_ = vala_ccode_node_get_modifiers ((ValaCCodeNode*) _tmp224_);
8740 			_tmp226_ = _tmp225_;
8741 			vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp224_, _tmp226_ | VALA_CCODE_MODIFIERS_STATIC);
8742 		} else {
8743 			gboolean _tmp227_ = FALSE;
8744 			ValaCodeContext* _tmp228_;
8745 			gboolean _tmp229_;
8746 			gboolean _tmp230_;
8747 			_tmp228_ = self->priv->_context;
8748 			_tmp229_ = vala_code_context_get_hide_internal (_tmp228_);
8749 			_tmp230_ = _tmp229_;
8750 			if (_tmp230_) {
8751 				gboolean _tmp231_ = FALSE;
8752 				ValaProperty* _tmp232_;
8753 				_tmp232_ = prop;
8754 				if (vala_symbol_is_internal_symbol ((ValaSymbol*) _tmp232_)) {
8755 					_tmp231_ = TRUE;
8756 				} else {
8757 					ValaSymbolAccessibility _tmp233_;
8758 					ValaSymbolAccessibility _tmp234_;
8759 					_tmp233_ = vala_symbol_get_access ((ValaSymbol*) acc);
8760 					_tmp234_ = _tmp233_;
8761 					_tmp231_ = _tmp234_ == VALA_SYMBOL_ACCESSIBILITY_INTERNAL;
8762 				}
8763 				_tmp227_ = _tmp231_;
8764 			} else {
8765 				_tmp227_ = FALSE;
8766 			}
8767 			if (_tmp227_) {
8768 				ValaCCodeFunction* _tmp235_;
8769 				ValaCCodeFunction* _tmp236_;
8770 				ValaCCodeModifiers _tmp237_;
8771 				ValaCCodeModifiers _tmp238_;
8772 				_tmp235_ = function;
8773 				_tmp236_ = function;
8774 				_tmp237_ = vala_ccode_node_get_modifiers ((ValaCCodeNode*) _tmp236_);
8775 				_tmp238_ = _tmp237_;
8776 				vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp236_, _tmp238_ | VALA_CCODE_MODIFIERS_INTERNAL);
8777 			}
8778 		}
8779 		_tmp239_ = function;
8780 		vala_ccode_base_module_push_function (self, _tmp239_);
8781 		_tmp240_ = prop;
8782 		_tmp241_ = vala_property_get_binding (_tmp240_);
8783 		_tmp242_ = _tmp241_;
8784 		if (_tmp242_ == VALA_MEMBER_BINDING_INSTANCE) {
8785 			gboolean _tmp243_ = FALSE;
8786 			gboolean _tmp244_;
8787 			gboolean _tmp245_;
8788 			_tmp244_ = vala_property_accessor_get_readable (acc);
8789 			_tmp245_ = _tmp244_;
8790 			if (!_tmp245_) {
8791 				_tmp243_ = TRUE;
8792 			} else {
8793 				_tmp243_ = returns_real_struct;
8794 			}
8795 			if (_tmp243_) {
8796 				ValaProperty* _tmp246_;
8797 				ValaTypeSymbol* _tmp247_;
8798 				_tmp246_ = prop;
8799 				_tmp247_ = t;
8800 				vala_ccode_base_module_create_property_type_check_statement (self, _tmp246_, FALSE, _tmp247_, TRUE, "self");
8801 			} else {
8802 				ValaProperty* _tmp248_;
8803 				ValaTypeSymbol* _tmp249_;
8804 				_tmp248_ = prop;
8805 				_tmp249_ = t;
8806 				vala_ccode_base_module_create_property_type_check_statement (self, _tmp248_, TRUE, _tmp249_, TRUE, "self");
8807 			}
8808 		}
8809 		_tmp250_ = prop;
8810 		_tmp251_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp250_);
8811 		_tmp252_ = _tmp251_;
8812 		if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp252_, VALA_TYPE_INTERFACE)) {
8813 			ValaInterface* iface = NULL;
8814 			ValaProperty* _tmp253_;
8815 			ValaSymbol* _tmp254_;
8816 			ValaSymbol* _tmp255_;
8817 			ValaInterface* _tmp256_;
8818 			ValaInterface* _tmp257_;
8819 			gchar* _tmp258_;
8820 			gchar* _tmp259_;
8821 			ValaCCodeIdentifier* _tmp260_;
8822 			ValaCCodeIdentifier* _tmp261_;
8823 			ValaCCodeFunctionCall* _tmp262_;
8824 			ValaCCodeExpression* _tmp263_;
8825 			ValaCCodeIdentifier* _tmp264_;
8826 			ValaCCodeIdentifier* _tmp265_;
8827 			_tmp253_ = prop;
8828 			_tmp254_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp253_);
8829 			_tmp255_ = _tmp254_;
8830 			_tmp256_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp255_, VALA_TYPE_INTERFACE, ValaInterface));
8831 			iface = _tmp256_;
8832 			_tmp257_ = iface;
8833 			_tmp258_ = vala_get_ccode_type_get_function ((ValaObjectTypeSymbol*) _tmp257_);
8834 			_tmp259_ = _tmp258_;
8835 			_tmp260_ = vala_ccode_identifier_new (_tmp259_);
8836 			_tmp261_ = _tmp260_;
8837 			_tmp262_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp261_);
8838 			_vala_ccode_node_unref0 (vcast);
8839 			vcast = (ValaCCodeExpression*) _tmp262_;
8840 			_vala_ccode_node_unref0 (_tmp261_);
8841 			_g_free0 (_tmp259_);
8842 			_tmp263_ = vcast;
8843 			_tmp264_ = vala_ccode_identifier_new ("self");
8844 			_tmp265_ = _tmp264_;
8845 			vala_ccode_function_call_add_argument (G_TYPE_CHECK_INSTANCE_CAST (_tmp263_, VALA_TYPE_CCODE_FUNCTION_CALL, ValaCCodeFunctionCall), (ValaCCodeExpression*) _tmp265_);
8846 			_vala_ccode_node_unref0 (_tmp265_);
8847 			_vala_code_node_unref0 (iface);
8848 		} else {
8849 			ValaClass* cl = NULL;
8850 			ValaProperty* _tmp266_;
8851 			ValaSymbol* _tmp267_;
8852 			ValaSymbol* _tmp268_;
8853 			ValaClass* _tmp269_;
8854 			ValaClass* _tmp270_;
8855 			gboolean _tmp271_;
8856 			gboolean _tmp272_;
8857 			_tmp266_ = prop;
8858 			_tmp267_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp266_);
8859 			_tmp268_ = _tmp267_;
8860 			_tmp269_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp268_, VALA_TYPE_CLASS, ValaClass));
8861 			cl = _tmp269_;
8862 			_tmp270_ = cl;
8863 			_tmp271_ = vala_class_get_is_compact (_tmp270_);
8864 			_tmp272_ = _tmp271_;
8865 			if (!_tmp272_) {
8866 				ValaClass* _tmp273_;
8867 				gchar* _tmp274_;
8868 				gchar* _tmp275_;
8869 				ValaCCodeIdentifier* _tmp276_;
8870 				ValaCCodeIdentifier* _tmp277_;
8871 				ValaCCodeFunctionCall* _tmp278_;
8872 				ValaCCodeExpression* _tmp279_;
8873 				ValaCCodeIdentifier* _tmp280_;
8874 				ValaCCodeIdentifier* _tmp281_;
8875 				_tmp273_ = cl;
8876 				_tmp274_ = vala_get_ccode_type_get_function ((ValaObjectTypeSymbol*) _tmp273_);
8877 				_tmp275_ = _tmp274_;
8878 				_tmp276_ = vala_ccode_identifier_new (_tmp275_);
8879 				_tmp277_ = _tmp276_;
8880 				_tmp278_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp277_);
8881 				_vala_ccode_node_unref0 (vcast);
8882 				vcast = (ValaCCodeExpression*) _tmp278_;
8883 				_vala_ccode_node_unref0 (_tmp277_);
8884 				_g_free0 (_tmp275_);
8885 				_tmp279_ = vcast;
8886 				_tmp280_ = vala_ccode_identifier_new ("self");
8887 				_tmp281_ = _tmp280_;
8888 				vala_ccode_function_call_add_argument (G_TYPE_CHECK_INSTANCE_CAST (_tmp279_, VALA_TYPE_CCODE_FUNCTION_CALL, ValaCCodeFunctionCall), (ValaCCodeExpression*) _tmp281_);
8889 				_vala_ccode_node_unref0 (_tmp281_);
8890 			} else {
8891 				ValaCCodeIdentifier* _tmp282_;
8892 				_tmp282_ = vala_ccode_identifier_new ("self");
8893 				_vala_ccode_node_unref0 (vcast);
8894 				vcast = (ValaCCodeExpression*) _tmp282_;
8895 			}
8896 			_vala_code_node_unref0 (cl);
8897 		}
8898 		_tmp283_ = vala_property_accessor_get_readable (acc);
8899 		_tmp284_ = _tmp283_;
8900 		if (_tmp284_) {
8901 			ValaCCodeFunctionCall* vcall = NULL;
8902 			ValaCCodeExpression* _tmp285_;
8903 			ValaProperty* _tmp286_;
8904 			const gchar* _tmp287_;
8905 			const gchar* _tmp288_;
8906 			gchar* _tmp289_;
8907 			gchar* _tmp290_;
8908 			ValaCCodeMemberAccess* _tmp291_;
8909 			ValaCCodeMemberAccess* _tmp292_;
8910 			ValaCCodeFunctionCall* _tmp293_;
8911 			ValaCCodeFunctionCall* _tmp294_;
8912 			ValaCCodeFunctionCall* _tmp295_;
8913 			ValaCCodeIdentifier* _tmp296_;
8914 			ValaCCodeIdentifier* _tmp297_;
8915 			_tmp285_ = vcast;
8916 			_tmp286_ = prop;
8917 			_tmp287_ = vala_symbol_get_name ((ValaSymbol*) _tmp286_);
8918 			_tmp288_ = _tmp287_;
8919 			_tmp289_ = g_strdup_printf ("get_%s", _tmp288_);
8920 			_tmp290_ = _tmp289_;
8921 			_tmp291_ = vala_ccode_member_access_new_pointer (_tmp285_, _tmp290_);
8922 			_tmp292_ = _tmp291_;
8923 			_tmp293_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp292_);
8924 			_tmp294_ = _tmp293_;
8925 			_vala_ccode_node_unref0 (_tmp292_);
8926 			_g_free0 (_tmp290_);
8927 			vcall = _tmp294_;
8928 			_tmp295_ = vcall;
8929 			_tmp296_ = vala_ccode_identifier_new ("self");
8930 			_tmp297_ = _tmp296_;
8931 			vala_ccode_function_call_add_argument (_tmp295_, (ValaCCodeExpression*) _tmp297_);
8932 			_vala_ccode_node_unref0 (_tmp297_);
8933 			if (returns_real_struct) {
8934 				ValaCCodeFunctionCall* _tmp298_;
8935 				ValaCCodeIdentifier* _tmp299_;
8936 				ValaCCodeIdentifier* _tmp300_;
8937 				ValaCCodeFunction* _tmp301_;
8938 				ValaCCodeFunction* _tmp302_;
8939 				ValaCCodeFunctionCall* _tmp303_;
8940 				_tmp298_ = vcall;
8941 				_tmp299_ = vala_ccode_identifier_new ("result");
8942 				_tmp300_ = _tmp299_;
8943 				vala_ccode_function_call_add_argument (_tmp298_, (ValaCCodeExpression*) _tmp300_);
8944 				_vala_ccode_node_unref0 (_tmp300_);
8945 				_tmp301_ = vala_ccode_base_module_get_ccode (self);
8946 				_tmp302_ = _tmp301_;
8947 				_tmp303_ = vcall;
8948 				vala_ccode_function_add_expression (_tmp302_, (ValaCCodeExpression*) _tmp303_);
8949 			} else {
8950 				gboolean _tmp304_ = FALSE;
8951 				ValaDataType* _tmp305_;
8952 				ValaDataType* _tmp306_;
8953 				ValaCCodeFunction* _tmp338_;
8954 				ValaCCodeFunction* _tmp339_;
8955 				ValaCCodeFunctionCall* _tmp340_;
8956 				_tmp305_ = vala_property_accessor_get_value_type (acc);
8957 				_tmp306_ = _tmp305_;
8958 				if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp306_, VALA_TYPE_ARRAY_TYPE)) {
8959 					ValaProperty* _tmp307_;
8960 					_tmp307_ = prop;
8961 					_tmp304_ = vala_get_ccode_array_length ((ValaCodeNode*) _tmp307_);
8962 				} else {
8963 					_tmp304_ = FALSE;
8964 				}
8965 				if (_tmp304_) {
8966 					ValaArrayType* array_type = NULL;
8967 					ValaDataType* _tmp308_;
8968 					ValaDataType* _tmp309_;
8969 					ValaArrayType* _tmp310_;
8970 					_tmp308_ = vala_property_accessor_get_value_type (acc);
8971 					_tmp309_ = _tmp308_;
8972 					_tmp310_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp309_, VALA_TYPE_ARRAY_TYPE, ValaArrayType));
8973 					array_type = _tmp310_;
8974 					{
8975 						gint dim = 0;
8976 						dim = 1;
8977 						{
8978 							gboolean _tmp311_ = FALSE;
8979 							_tmp311_ = TRUE;
8980 							while (TRUE) {
8981 								ValaArrayType* _tmp313_;
8982 								gint _tmp314_;
8983 								gint _tmp315_;
8984 								ValaCCodeIdentifier* len_expr = NULL;
8985 								gchar* _tmp316_;
8986 								gchar* _tmp317_;
8987 								ValaCCodeIdentifier* _tmp318_;
8988 								ValaCCodeIdentifier* _tmp319_;
8989 								ValaCCodeFunctionCall* _tmp320_;
8990 								ValaCCodeIdentifier* _tmp321_;
8991 								if (!_tmp311_) {
8992 									gint _tmp312_;
8993 									_tmp312_ = dim;
8994 									dim = _tmp312_ + 1;
8995 								}
8996 								_tmp311_ = FALSE;
8997 								_tmp313_ = array_type;
8998 								_tmp314_ = vala_array_type_get_rank (_tmp313_);
8999 								_tmp315_ = _tmp314_;
9000 								if (!(dim <= _tmp315_)) {
9001 									break;
9002 								}
9003 								_tmp316_ = vala_ccode_base_module_get_array_length_cname (self, "result", dim);
9004 								_tmp317_ = _tmp316_;
9005 								_tmp318_ = vala_ccode_identifier_new (_tmp317_);
9006 								_tmp319_ = _tmp318_;
9007 								_g_free0 (_tmp317_);
9008 								len_expr = _tmp319_;
9009 								_tmp320_ = vcall;
9010 								_tmp321_ = len_expr;
9011 								vala_ccode_function_call_add_argument (_tmp320_, (ValaCCodeExpression*) _tmp321_);
9012 								_vala_ccode_node_unref0 (len_expr);
9013 							}
9014 						}
9015 					}
9016 					_vala_code_node_unref0 (array_type);
9017 				} else {
9018 					gboolean _tmp322_ = FALSE;
9019 					gboolean _tmp323_ = FALSE;
9020 					ValaDataType* _tmp324_;
9021 					ValaDataType* _tmp325_;
9022 					_tmp324_ = vala_property_accessor_get_value_type (acc);
9023 					_tmp325_ = _tmp324_;
9024 					if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp325_, VALA_TYPE_DELEGATE_TYPE)) {
9025 						ValaProperty* _tmp326_;
9026 						_tmp326_ = prop;
9027 						_tmp323_ = vala_get_ccode_delegate_target ((ValaCodeNode*) _tmp326_);
9028 					} else {
9029 						_tmp323_ = FALSE;
9030 					}
9031 					if (_tmp323_) {
9032 						ValaDataType* _tmp327_;
9033 						ValaDataType* _tmp328_;
9034 						ValaDelegate* _tmp329_;
9035 						ValaDelegate* _tmp330_;
9036 						gboolean _tmp331_;
9037 						gboolean _tmp332_;
9038 						_tmp327_ = vala_property_accessor_get_value_type (acc);
9039 						_tmp328_ = _tmp327_;
9040 						_tmp329_ = vala_delegate_type_get_delegate_symbol (G_TYPE_CHECK_INSTANCE_CAST (_tmp328_, VALA_TYPE_DELEGATE_TYPE, ValaDelegateType));
9041 						_tmp330_ = _tmp329_;
9042 						_tmp331_ = vala_delegate_get_has_target (_tmp330_);
9043 						_tmp332_ = _tmp331_;
9044 						_tmp322_ = _tmp332_;
9045 					} else {
9046 						_tmp322_ = FALSE;
9047 					}
9048 					if (_tmp322_) {
9049 						ValaCCodeFunctionCall* _tmp333_;
9050 						gchar* _tmp334_;
9051 						gchar* _tmp335_;
9052 						ValaCCodeIdentifier* _tmp336_;
9053 						ValaCCodeIdentifier* _tmp337_;
9054 						_tmp333_ = vcall;
9055 						_tmp334_ = vala_ccode_base_module_get_delegate_target_cname (self, "result");
9056 						_tmp335_ = _tmp334_;
9057 						_tmp336_ = vala_ccode_identifier_new (_tmp335_);
9058 						_tmp337_ = _tmp336_;
9059 						vala_ccode_function_call_add_argument (_tmp333_, (ValaCCodeExpression*) _tmp337_);
9060 						_vala_ccode_node_unref0 (_tmp337_);
9061 						_g_free0 (_tmp335_);
9062 					}
9063 				}
9064 				_tmp338_ = vala_ccode_base_module_get_ccode (self);
9065 				_tmp339_ = _tmp338_;
9066 				_tmp340_ = vcall;
9067 				vala_ccode_function_add_return (_tmp339_, (ValaCCodeExpression*) _tmp340_);
9068 			}
9069 			_vala_ccode_node_unref0 (vcall);
9070 		} else {
9071 			ValaCCodeFunctionCall* vcall = NULL;
9072 			ValaCCodeExpression* _tmp341_;
9073 			ValaProperty* _tmp342_;
9074 			const gchar* _tmp343_;
9075 			const gchar* _tmp344_;
9076 			gchar* _tmp345_;
9077 			gchar* _tmp346_;
9078 			ValaCCodeMemberAccess* _tmp347_;
9079 			ValaCCodeMemberAccess* _tmp348_;
9080 			ValaCCodeFunctionCall* _tmp349_;
9081 			ValaCCodeFunctionCall* _tmp350_;
9082 			ValaCCodeFunctionCall* _tmp351_;
9083 			ValaCCodeIdentifier* _tmp352_;
9084 			ValaCCodeIdentifier* _tmp353_;
9085 			ValaCCodeFunctionCall* _tmp354_;
9086 			ValaCCodeIdentifier* _tmp355_;
9087 			ValaCCodeIdentifier* _tmp356_;
9088 			gboolean _tmp357_ = FALSE;
9089 			ValaDataType* _tmp358_;
9090 			ValaDataType* _tmp359_;
9091 			ValaCCodeFunction* _tmp403_;
9092 			ValaCCodeFunction* _tmp404_;
9093 			ValaCCodeFunctionCall* _tmp405_;
9094 			_tmp341_ = vcast;
9095 			_tmp342_ = prop;
9096 			_tmp343_ = vala_symbol_get_name ((ValaSymbol*) _tmp342_);
9097 			_tmp344_ = _tmp343_;
9098 			_tmp345_ = g_strdup_printf ("set_%s", _tmp344_);
9099 			_tmp346_ = _tmp345_;
9100 			_tmp347_ = vala_ccode_member_access_new_pointer (_tmp341_, _tmp346_);
9101 			_tmp348_ = _tmp347_;
9102 			_tmp349_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp348_);
9103 			_tmp350_ = _tmp349_;
9104 			_vala_ccode_node_unref0 (_tmp348_);
9105 			_g_free0 (_tmp346_);
9106 			vcall = _tmp350_;
9107 			_tmp351_ = vcall;
9108 			_tmp352_ = vala_ccode_identifier_new ("self");
9109 			_tmp353_ = _tmp352_;
9110 			vala_ccode_function_call_add_argument (_tmp351_, (ValaCCodeExpression*) _tmp353_);
9111 			_vala_ccode_node_unref0 (_tmp353_);
9112 			_tmp354_ = vcall;
9113 			_tmp355_ = vala_ccode_identifier_new ("value");
9114 			_tmp356_ = _tmp355_;
9115 			vala_ccode_function_call_add_argument (_tmp354_, (ValaCCodeExpression*) _tmp356_);
9116 			_vala_ccode_node_unref0 (_tmp356_);
9117 			_tmp358_ = vala_property_accessor_get_value_type (acc);
9118 			_tmp359_ = _tmp358_;
9119 			if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp359_, VALA_TYPE_ARRAY_TYPE)) {
9120 				ValaProperty* _tmp360_;
9121 				_tmp360_ = prop;
9122 				_tmp357_ = vala_get_ccode_array_length ((ValaCodeNode*) _tmp360_);
9123 			} else {
9124 				_tmp357_ = FALSE;
9125 			}
9126 			if (_tmp357_) {
9127 				ValaArrayType* array_type = NULL;
9128 				ValaDataType* _tmp361_;
9129 				ValaDataType* _tmp362_;
9130 				ValaArrayType* _tmp363_;
9131 				_tmp361_ = vala_property_accessor_get_value_type (acc);
9132 				_tmp362_ = _tmp361_;
9133 				_tmp363_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp362_, VALA_TYPE_ARRAY_TYPE, ValaArrayType));
9134 				array_type = _tmp363_;
9135 				{
9136 					gint dim = 0;
9137 					dim = 1;
9138 					{
9139 						gboolean _tmp364_ = FALSE;
9140 						_tmp364_ = TRUE;
9141 						while (TRUE) {
9142 							ValaArrayType* _tmp366_;
9143 							gint _tmp367_;
9144 							gint _tmp368_;
9145 							ValaCCodeIdentifier* len_expr = NULL;
9146 							gchar* _tmp369_;
9147 							gchar* _tmp370_;
9148 							ValaCCodeIdentifier* _tmp371_;
9149 							ValaCCodeIdentifier* _tmp372_;
9150 							ValaCCodeFunctionCall* _tmp373_;
9151 							ValaCCodeIdentifier* _tmp374_;
9152 							if (!_tmp364_) {
9153 								gint _tmp365_;
9154 								_tmp365_ = dim;
9155 								dim = _tmp365_ + 1;
9156 							}
9157 							_tmp364_ = FALSE;
9158 							_tmp366_ = array_type;
9159 							_tmp367_ = vala_array_type_get_rank (_tmp366_);
9160 							_tmp368_ = _tmp367_;
9161 							if (!(dim <= _tmp368_)) {
9162 								break;
9163 							}
9164 							_tmp369_ = vala_ccode_base_module_get_array_length_cname (self, "value", dim);
9165 							_tmp370_ = _tmp369_;
9166 							_tmp371_ = vala_ccode_identifier_new (_tmp370_);
9167 							_tmp372_ = _tmp371_;
9168 							_g_free0 (_tmp370_);
9169 							len_expr = _tmp372_;
9170 							_tmp373_ = vcall;
9171 							_tmp374_ = len_expr;
9172 							vala_ccode_function_call_add_argument (_tmp373_, (ValaCCodeExpression*) _tmp374_);
9173 							_vala_ccode_node_unref0 (len_expr);
9174 						}
9175 					}
9176 				}
9177 				_vala_code_node_unref0 (array_type);
9178 			} else {
9179 				gboolean _tmp375_ = FALSE;
9180 				gboolean _tmp376_ = FALSE;
9181 				ValaDataType* _tmp377_;
9182 				ValaDataType* _tmp378_;
9183 				_tmp377_ = vala_property_accessor_get_value_type (acc);
9184 				_tmp378_ = _tmp377_;
9185 				if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp378_, VALA_TYPE_DELEGATE_TYPE)) {
9186 					ValaProperty* _tmp379_;
9187 					_tmp379_ = prop;
9188 					_tmp376_ = vala_get_ccode_delegate_target ((ValaCodeNode*) _tmp379_);
9189 				} else {
9190 					_tmp376_ = FALSE;
9191 				}
9192 				if (_tmp376_) {
9193 					ValaDataType* _tmp380_;
9194 					ValaDataType* _tmp381_;
9195 					ValaDelegate* _tmp382_;
9196 					ValaDelegate* _tmp383_;
9197 					gboolean _tmp384_;
9198 					gboolean _tmp385_;
9199 					_tmp380_ = vala_property_accessor_get_value_type (acc);
9200 					_tmp381_ = _tmp380_;
9201 					_tmp382_ = vala_delegate_type_get_delegate_symbol (G_TYPE_CHECK_INSTANCE_CAST (_tmp381_, VALA_TYPE_DELEGATE_TYPE, ValaDelegateType));
9202 					_tmp383_ = _tmp382_;
9203 					_tmp384_ = vala_delegate_get_has_target (_tmp383_);
9204 					_tmp385_ = _tmp384_;
9205 					_tmp375_ = _tmp385_;
9206 				} else {
9207 					_tmp375_ = FALSE;
9208 				}
9209 				if (_tmp375_) {
9210 					ValaCCodeFunctionCall* _tmp386_;
9211 					gchar* _tmp387_;
9212 					gchar* _tmp388_;
9213 					ValaCCodeIdentifier* _tmp389_;
9214 					ValaCCodeIdentifier* _tmp390_;
9215 					gboolean _tmp391_ = FALSE;
9216 					gboolean _tmp392_;
9217 					gboolean _tmp393_;
9218 					_tmp386_ = vcall;
9219 					_tmp387_ = vala_ccode_base_module_get_delegate_target_cname (self, "value");
9220 					_tmp388_ = _tmp387_;
9221 					_tmp389_ = vala_ccode_identifier_new (_tmp388_);
9222 					_tmp390_ = _tmp389_;
9223 					vala_ccode_function_call_add_argument (_tmp386_, (ValaCCodeExpression*) _tmp390_);
9224 					_vala_ccode_node_unref0 (_tmp390_);
9225 					_g_free0 (_tmp388_);
9226 					_tmp392_ = vala_property_accessor_get_readable (acc);
9227 					_tmp393_ = _tmp392_;
9228 					if (!_tmp393_) {
9229 						ValaDataType* _tmp394_;
9230 						ValaDataType* _tmp395_;
9231 						gboolean _tmp396_;
9232 						gboolean _tmp397_;
9233 						_tmp394_ = vala_property_accessor_get_value_type (acc);
9234 						_tmp395_ = _tmp394_;
9235 						_tmp396_ = vala_data_type_get_value_owned (_tmp395_);
9236 						_tmp397_ = _tmp396_;
9237 						_tmp391_ = _tmp397_;
9238 					} else {
9239 						_tmp391_ = FALSE;
9240 					}
9241 					if (_tmp391_) {
9242 						ValaCCodeFunctionCall* _tmp398_;
9243 						gchar* _tmp399_;
9244 						gchar* _tmp400_;
9245 						ValaCCodeIdentifier* _tmp401_;
9246 						ValaCCodeIdentifier* _tmp402_;
9247 						_tmp398_ = vcall;
9248 						_tmp399_ = vala_ccode_base_module_get_delegate_target_destroy_notify_cname (self, "value");
9249 						_tmp400_ = _tmp399_;
9250 						_tmp401_ = vala_ccode_identifier_new (_tmp400_);
9251 						_tmp402_ = _tmp401_;
9252 						vala_ccode_function_call_add_argument (_tmp398_, (ValaCCodeExpression*) _tmp402_);
9253 						_vala_ccode_node_unref0 (_tmp402_);
9254 						_g_free0 (_tmp400_);
9255 					}
9256 				}
9257 			}
9258 			_tmp403_ = vala_ccode_base_module_get_ccode (self);
9259 			_tmp404_ = _tmp403_;
9260 			_tmp405_ = vcall;
9261 			vala_ccode_function_add_expression (_tmp404_, (ValaCCodeExpression*) _tmp405_);
9262 			_vala_ccode_node_unref0 (vcall);
9263 		}
9264 		vala_ccode_base_module_pop_function (self);
9265 		_tmp406_ = self->cfile;
9266 		_tmp407_ = function;
9267 		vala_ccode_file_add_function (_tmp406_, _tmp407_);
9268 		_vala_ccode_node_unref0 (vcast);
9269 		_vala_ccode_node_unref0 (function);
9270 	}
9271 	_tmp409_ = prop;
9272 	_tmp410_ = vala_property_get_is_abstract (_tmp409_);
9273 	_tmp411_ = _tmp410_;
9274 	if (!_tmp411_) {
9275 		ValaBlock* _tmp412_;
9276 		ValaBlock* _tmp413_;
9277 		_tmp412_ = vala_subroutine_get_body ((ValaSubroutine*) acc);
9278 		_tmp413_ = _tmp412_;
9279 		_tmp408_ = _tmp413_ != NULL;
9280 	} else {
9281 		_tmp408_ = FALSE;
9282 	}
9283 	if (_tmp408_) {
9284 		gboolean _tmp414_ = FALSE;
9285 		ValaProperty* _tmp415_;
9286 		ValaProperty* _tmp416_;
9287 		ValaProperty* _tmp417_;
9288 		gboolean is_virtual = FALSE;
9289 		gchar* cname = NULL;
9290 		gchar* _tmp421_;
9291 		ValaCCodeFunction* function = NULL;
9292 		gboolean _tmp422_ = FALSE;
9293 		gboolean _tmp423_ = FALSE;
9294 		gboolean _tmp424_;
9295 		gboolean _tmp425_;
9296 		ValaObjectType* base_type = NULL;
9297 		ValaProperty* _tmp436_;
9298 		ValaMemberBinding _tmp437_;
9299 		ValaMemberBinding _tmp438_;
9300 		gboolean _tmp469_ = FALSE;
9301 		gboolean _tmp470_ = FALSE;
9302 		gboolean _tmp471_;
9303 		gboolean _tmp472_;
9304 		gboolean _tmp477_ = FALSE;
9305 		ValaDataType* _tmp478_;
9306 		ValaDataType* _tmp479_;
9307 		ValaCCodeFunction* _tmp575_;
9308 		gboolean _tmp576_ = FALSE;
9309 		ValaProperty* _tmp577_;
9310 		ValaMemberBinding _tmp578_;
9311 		ValaMemberBinding _tmp579_;
9312 		gboolean _tmp587_ = FALSE;
9313 		gboolean _tmp588_;
9314 		gboolean _tmp589_;
9315 		gboolean _tmp626_ = FALSE;
9316 		gboolean _tmp627_ = FALSE;
9317 		ValaCodeContext* _tmp628_;
9318 		ValaSemanticAnalyzer* _tmp629_;
9319 		ValaSemanticAnalyzer* _tmp630_;
9320 		ValaProperty* _tmp631_;
9321 		gboolean _tmp866_;
9322 		gboolean _tmp867_;
9323 		ValaCCodeFile* _tmp878_;
9324 		ValaCCodeFunction* _tmp879_;
9325 		_tmp415_ = prop;
9326 		_tmp416_ = vala_property_get_base_property (_tmp415_);
9327 		_tmp417_ = _tmp416_;
9328 		if (_tmp417_ != NULL) {
9329 			_tmp414_ = TRUE;
9330 		} else {
9331 			ValaProperty* _tmp418_;
9332 			ValaProperty* _tmp419_;
9333 			ValaProperty* _tmp420_;
9334 			_tmp418_ = prop;
9335 			_tmp419_ = vala_property_get_base_interface_property (_tmp418_);
9336 			_tmp420_ = _tmp419_;
9337 			_tmp414_ = _tmp420_ != NULL;
9338 		}
9339 		is_virtual = _tmp414_;
9340 		_tmp421_ = vala_get_ccode_real_name ((ValaSymbol*) acc);
9341 		cname = _tmp421_;
9342 		_tmp424_ = vala_property_accessor_get_writable (acc);
9343 		_tmp425_ = _tmp424_;
9344 		if (_tmp425_) {
9345 			_tmp423_ = TRUE;
9346 		} else {
9347 			gboolean _tmp426_;
9348 			gboolean _tmp427_;
9349 			_tmp426_ = vala_property_accessor_get_construction (acc);
9350 			_tmp427_ = _tmp426_;
9351 			_tmp423_ = _tmp427_;
9352 		}
9353 		if (_tmp423_) {
9354 			_tmp422_ = TRUE;
9355 		} else {
9356 			_tmp422_ = returns_real_struct;
9357 		}
9358 		if (_tmp422_) {
9359 			const gchar* _tmp428_;
9360 			ValaCCodeFunction* _tmp429_;
9361 			_tmp428_ = cname;
9362 			_tmp429_ = vala_ccode_function_new (_tmp428_, "void");
9363 			_vala_ccode_node_unref0 (function);
9364 			function = _tmp429_;
9365 		} else {
9366 			const gchar* _tmp430_;
9367 			ValaDataType* _tmp431_;
9368 			ValaDataType* _tmp432_;
9369 			gchar* _tmp433_;
9370 			gchar* _tmp434_;
9371 			ValaCCodeFunction* _tmp435_;
9372 			_tmp430_ = cname;
9373 			_tmp431_ = vala_property_accessor_get_value_type (acc);
9374 			_tmp432_ = _tmp431_;
9375 			_tmp433_ = vala_get_ccode_name ((ValaCodeNode*) _tmp432_);
9376 			_tmp434_ = _tmp433_;
9377 			_tmp435_ = vala_ccode_function_new (_tmp430_, _tmp434_);
9378 			_vala_ccode_node_unref0 (function);
9379 			function = _tmp435_;
9380 			_g_free0 (_tmp434_);
9381 		}
9382 		base_type = NULL;
9383 		_tmp436_ = prop;
9384 		_tmp437_ = vala_property_get_binding (_tmp436_);
9385 		_tmp438_ = _tmp437_;
9386 		if (_tmp438_ == VALA_MEMBER_BINDING_INSTANCE) {
9387 			if (is_virtual) {
9388 				ValaProperty* _tmp439_;
9389 				ValaProperty* _tmp440_;
9390 				ValaProperty* _tmp441_;
9391 				ValaCCodeFunction* _tmp457_;
9392 				ValaCCodeFunction* _tmp458_;
9393 				ValaCCodeModifiers _tmp459_;
9394 				ValaCCodeModifiers _tmp460_;
9395 				ValaCCodeFunction* _tmp461_;
9396 				ValaObjectType* _tmp462_;
9397 				gchar* _tmp463_;
9398 				gchar* _tmp464_;
9399 				ValaCCodeParameter* _tmp465_;
9400 				ValaCCodeParameter* _tmp466_;
9401 				_tmp439_ = prop;
9402 				_tmp440_ = vala_property_get_base_property (_tmp439_);
9403 				_tmp441_ = _tmp440_;
9404 				if (_tmp441_ != NULL) {
9405 					ValaProperty* _tmp442_;
9406 					ValaProperty* _tmp443_;
9407 					ValaProperty* _tmp444_;
9408 					ValaSymbol* _tmp445_;
9409 					ValaSymbol* _tmp446_;
9410 					ValaObjectType* _tmp447_;
9411 					_tmp442_ = prop;
9412 					_tmp443_ = vala_property_get_base_property (_tmp442_);
9413 					_tmp444_ = _tmp443_;
9414 					_tmp445_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp444_);
9415 					_tmp446_ = _tmp445_;
9416 					_tmp447_ = vala_object_type_new (G_TYPE_CHECK_INSTANCE_CAST (_tmp446_, VALA_TYPE_OBJECT_TYPE_SYMBOL, ValaObjectTypeSymbol));
9417 					_vala_code_node_unref0 (base_type);
9418 					base_type = _tmp447_;
9419 				} else {
9420 					ValaProperty* _tmp448_;
9421 					ValaProperty* _tmp449_;
9422 					ValaProperty* _tmp450_;
9423 					_tmp448_ = prop;
9424 					_tmp449_ = vala_property_get_base_interface_property (_tmp448_);
9425 					_tmp450_ = _tmp449_;
9426 					if (_tmp450_ != NULL) {
9427 						ValaProperty* _tmp451_;
9428 						ValaProperty* _tmp452_;
9429 						ValaProperty* _tmp453_;
9430 						ValaSymbol* _tmp454_;
9431 						ValaSymbol* _tmp455_;
9432 						ValaObjectType* _tmp456_;
9433 						_tmp451_ = prop;
9434 						_tmp452_ = vala_property_get_base_interface_property (_tmp451_);
9435 						_tmp453_ = _tmp452_;
9436 						_tmp454_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp453_);
9437 						_tmp455_ = _tmp454_;
9438 						_tmp456_ = vala_object_type_new (G_TYPE_CHECK_INSTANCE_CAST (_tmp455_, VALA_TYPE_OBJECT_TYPE_SYMBOL, ValaObjectTypeSymbol));
9439 						_vala_code_node_unref0 (base_type);
9440 						base_type = _tmp456_;
9441 					}
9442 				}
9443 				_tmp457_ = function;
9444 				_tmp458_ = function;
9445 				_tmp459_ = vala_ccode_node_get_modifiers ((ValaCCodeNode*) _tmp458_);
9446 				_tmp460_ = _tmp459_;
9447 				vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp458_, _tmp460_ | VALA_CCODE_MODIFIERS_STATIC);
9448 				_tmp461_ = function;
9449 				_tmp462_ = base_type;
9450 				_tmp463_ = vala_get_ccode_name ((ValaCodeNode*) _tmp462_);
9451 				_tmp464_ = _tmp463_;
9452 				_tmp465_ = vala_ccode_parameter_new ("base", _tmp464_);
9453 				_tmp466_ = _tmp465_;
9454 				vala_ccode_function_add_parameter (_tmp461_, _tmp466_);
9455 				_vala_ccode_node_unref0 (_tmp466_);
9456 				_g_free0 (_tmp464_);
9457 			} else {
9458 				ValaCCodeFunction* _tmp467_;
9459 				ValaCCodeParameter* _tmp468_;
9460 				_tmp467_ = function;
9461 				_tmp468_ = cselfparam;
9462 				vala_ccode_function_add_parameter (_tmp467_, _tmp468_);
9463 			}
9464 		}
9465 		_tmp471_ = vala_property_accessor_get_writable (acc);
9466 		_tmp472_ = _tmp471_;
9467 		if (_tmp472_) {
9468 			_tmp470_ = TRUE;
9469 		} else {
9470 			gboolean _tmp473_;
9471 			gboolean _tmp474_;
9472 			_tmp473_ = vala_property_accessor_get_construction (acc);
9473 			_tmp474_ = _tmp473_;
9474 			_tmp470_ = _tmp474_;
9475 		}
9476 		if (_tmp470_) {
9477 			_tmp469_ = TRUE;
9478 		} else {
9479 			_tmp469_ = returns_real_struct;
9480 		}
9481 		if (_tmp469_) {
9482 			ValaCCodeFunction* _tmp475_;
9483 			ValaCCodeParameter* _tmp476_;
9484 			_tmp475_ = function;
9485 			_tmp476_ = cvalueparam;
9486 			vala_ccode_function_add_parameter (_tmp475_, _tmp476_);
9487 		}
9488 		_tmp478_ = vala_property_accessor_get_value_type (acc);
9489 		_tmp479_ = _tmp478_;
9490 		if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp479_, VALA_TYPE_ARRAY_TYPE)) {
9491 			ValaProperty* _tmp480_;
9492 			_tmp480_ = prop;
9493 			_tmp477_ = vala_get_ccode_array_length ((ValaCodeNode*) _tmp480_);
9494 		} else {
9495 			_tmp477_ = FALSE;
9496 		}
9497 		if (_tmp477_) {
9498 			ValaArrayType* array_type = NULL;
9499 			ValaDataType* _tmp481_;
9500 			ValaDataType* _tmp482_;
9501 			ValaArrayType* _tmp483_;
9502 			gchar* length_ctype = NULL;
9503 			ValaProperty* _tmp484_;
9504 			gchar* _tmp485_;
9505 			_tmp481_ = vala_property_accessor_get_value_type (acc);
9506 			_tmp482_ = _tmp481_;
9507 			_tmp483_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp482_, VALA_TYPE_ARRAY_TYPE, ValaArrayType));
9508 			array_type = _tmp483_;
9509 			_tmp484_ = prop;
9510 			_tmp485_ = vala_get_ccode_array_length_type ((ValaCodeNode*) _tmp484_);
9511 			length_ctype = _tmp485_;
9512 			{
9513 				gint dim = 0;
9514 				dim = 1;
9515 				{
9516 					gboolean _tmp486_ = FALSE;
9517 					_tmp486_ = TRUE;
9518 					while (TRUE) {
9519 						ValaArrayType* _tmp488_;
9520 						gint _tmp489_;
9521 						gint _tmp490_;
9522 						const gchar* _tmp491_ = NULL;
9523 						gboolean _tmp492_;
9524 						gboolean _tmp493_;
9525 						gchar* _tmp494_ = NULL;
9526 						gboolean _tmp495_;
9527 						gboolean _tmp496_;
9528 						ValaCCodeFunction* _tmp501_;
9529 						gchar* _tmp502_;
9530 						gchar* _tmp503_;
9531 						ValaCCodeParameter* _tmp504_;
9532 						ValaCCodeParameter* _tmp505_;
9533 						if (!_tmp486_) {
9534 							gint _tmp487_;
9535 							_tmp487_ = dim;
9536 							dim = _tmp487_ + 1;
9537 						}
9538 						_tmp486_ = FALSE;
9539 						_tmp488_ = array_type;
9540 						_tmp489_ = vala_array_type_get_rank (_tmp488_);
9541 						_tmp490_ = _tmp489_;
9542 						if (!(dim <= _tmp490_)) {
9543 							break;
9544 						}
9545 						_tmp492_ = vala_property_accessor_get_readable (acc);
9546 						_tmp493_ = _tmp492_;
9547 						if (_tmp493_) {
9548 							_tmp491_ = "result";
9549 						} else {
9550 							_tmp491_ = "value";
9551 						}
9552 						_tmp495_ = vala_property_accessor_get_readable (acc);
9553 						_tmp496_ = _tmp495_;
9554 						if (_tmp496_) {
9555 							const gchar* _tmp497_;
9556 							gchar* _tmp498_;
9557 							_tmp497_ = length_ctype;
9558 							_tmp498_ = g_strconcat (_tmp497_, "*", NULL);
9559 							_g_free0 (_tmp494_);
9560 							_tmp494_ = _tmp498_;
9561 						} else {
9562 							const gchar* _tmp499_;
9563 							gchar* _tmp500_;
9564 							_tmp499_ = length_ctype;
9565 							_tmp500_ = g_strdup (_tmp499_);
9566 							_g_free0 (_tmp494_);
9567 							_tmp494_ = _tmp500_;
9568 						}
9569 						_tmp501_ = function;
9570 						_tmp502_ = vala_ccode_base_module_get_array_length_cname (self, _tmp491_, dim);
9571 						_tmp503_ = _tmp502_;
9572 						_tmp504_ = vala_ccode_parameter_new (_tmp503_, _tmp494_);
9573 						_tmp505_ = _tmp504_;
9574 						vala_ccode_function_add_parameter (_tmp501_, _tmp505_);
9575 						_vala_ccode_node_unref0 (_tmp505_);
9576 						_g_free0 (_tmp503_);
9577 						_g_free0 (_tmp494_);
9578 					}
9579 				}
9580 			}
9581 			_g_free0 (length_ctype);
9582 			_vala_code_node_unref0 (array_type);
9583 		} else {
9584 			gboolean _tmp506_ = FALSE;
9585 			gboolean _tmp507_ = FALSE;
9586 			ValaDataType* _tmp508_;
9587 			ValaDataType* _tmp509_;
9588 			_tmp508_ = vala_property_accessor_get_value_type (acc);
9589 			_tmp509_ = _tmp508_;
9590 			if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp509_, VALA_TYPE_DELEGATE_TYPE)) {
9591 				ValaProperty* _tmp510_;
9592 				_tmp510_ = prop;
9593 				_tmp507_ = vala_get_ccode_delegate_target ((ValaCodeNode*) _tmp510_);
9594 			} else {
9595 				_tmp507_ = FALSE;
9596 			}
9597 			if (_tmp507_) {
9598 				ValaDataType* _tmp511_;
9599 				ValaDataType* _tmp512_;
9600 				ValaDelegate* _tmp513_;
9601 				ValaDelegate* _tmp514_;
9602 				gboolean _tmp515_;
9603 				gboolean _tmp516_;
9604 				_tmp511_ = vala_property_accessor_get_value_type (acc);
9605 				_tmp512_ = _tmp511_;
9606 				_tmp513_ = vala_delegate_type_get_delegate_symbol (G_TYPE_CHECK_INSTANCE_CAST (_tmp512_, VALA_TYPE_DELEGATE_TYPE, ValaDelegateType));
9607 				_tmp514_ = _tmp513_;
9608 				_tmp515_ = vala_delegate_get_has_target (_tmp514_);
9609 				_tmp516_ = _tmp515_;
9610 				_tmp506_ = _tmp516_;
9611 			} else {
9612 				_tmp506_ = FALSE;
9613 			}
9614 			if (_tmp506_) {
9615 				const gchar* _tmp517_ = NULL;
9616 				gboolean _tmp518_;
9617 				gboolean _tmp519_;
9618 				gchar* _tmp520_ = NULL;
9619 				gboolean _tmp521_;
9620 				gboolean _tmp522_;
9621 				ValaCCodeFunction* _tmp529_;
9622 				gchar* _tmp530_;
9623 				gchar* _tmp531_;
9624 				ValaCCodeParameter* _tmp532_;
9625 				ValaCCodeParameter* _tmp533_;
9626 				gboolean _tmp534_ = FALSE;
9627 				gboolean _tmp535_;
9628 				gboolean _tmp536_;
9629 				_tmp518_ = vala_property_accessor_get_readable (acc);
9630 				_tmp519_ = _tmp518_;
9631 				if (_tmp519_) {
9632 					_tmp517_ = "result";
9633 				} else {
9634 					_tmp517_ = "value";
9635 				}
9636 				_tmp521_ = vala_property_accessor_get_readable (acc);
9637 				_tmp522_ = _tmp521_;
9638 				if (_tmp522_) {
9639 					ValaDataType* _tmp523_;
9640 					gchar* _tmp524_;
9641 					gchar* _tmp525_;
9642 					gchar* _tmp526_;
9643 					_tmp523_ = self->delegate_target_type;
9644 					_tmp524_ = vala_get_ccode_name ((ValaCodeNode*) _tmp523_);
9645 					_tmp525_ = _tmp524_;
9646 					_tmp526_ = g_strconcat (_tmp525_, "*", NULL);
9647 					_g_free0 (_tmp520_);
9648 					_tmp520_ = _tmp526_;
9649 					_g_free0 (_tmp525_);
9650 				} else {
9651 					ValaDataType* _tmp527_;
9652 					gchar* _tmp528_;
9653 					_tmp527_ = self->delegate_target_type;
9654 					_tmp528_ = vala_get_ccode_name ((ValaCodeNode*) _tmp527_);
9655 					_g_free0 (_tmp520_);
9656 					_tmp520_ = _tmp528_;
9657 				}
9658 				_tmp529_ = function;
9659 				_tmp530_ = vala_ccode_base_module_get_delegate_target_cname (self, _tmp517_);
9660 				_tmp531_ = _tmp530_;
9661 				_tmp532_ = vala_ccode_parameter_new (_tmp531_, _tmp520_);
9662 				_tmp533_ = _tmp532_;
9663 				vala_ccode_function_add_parameter (_tmp529_, _tmp533_);
9664 				_vala_ccode_node_unref0 (_tmp533_);
9665 				_g_free0 (_tmp531_);
9666 				_tmp535_ = vala_property_accessor_get_readable (acc);
9667 				_tmp536_ = _tmp535_;
9668 				if (!_tmp536_) {
9669 					ValaDataType* _tmp537_;
9670 					ValaDataType* _tmp538_;
9671 					gboolean _tmp539_;
9672 					gboolean _tmp540_;
9673 					_tmp537_ = vala_property_accessor_get_value_type (acc);
9674 					_tmp538_ = _tmp537_;
9675 					_tmp539_ = vala_data_type_get_value_owned (_tmp538_);
9676 					_tmp540_ = _tmp539_;
9677 					_tmp534_ = _tmp540_;
9678 				} else {
9679 					_tmp534_ = FALSE;
9680 				}
9681 				if (_tmp534_) {
9682 					ValaCCodeFunction* _tmp541_;
9683 					gchar* _tmp542_;
9684 					gchar* _tmp543_;
9685 					ValaDelegateType* _tmp544_;
9686 					gchar* _tmp545_;
9687 					gchar* _tmp546_;
9688 					ValaCCodeParameter* _tmp547_;
9689 					ValaCCodeParameter* _tmp548_;
9690 					_tmp541_ = function;
9691 					_tmp542_ = vala_ccode_base_module_get_delegate_target_destroy_notify_cname (self, "value");
9692 					_tmp543_ = _tmp542_;
9693 					_tmp544_ = self->delegate_target_destroy_type;
9694 					_tmp545_ = vala_get_ccode_name ((ValaCodeNode*) _tmp544_);
9695 					_tmp546_ = _tmp545_;
9696 					_tmp547_ = vala_ccode_parameter_new (_tmp543_, _tmp546_);
9697 					_tmp548_ = _tmp547_;
9698 					vala_ccode_function_add_parameter (_tmp541_, _tmp548_);
9699 					_vala_ccode_node_unref0 (_tmp548_);
9700 					_g_free0 (_tmp546_);
9701 					_g_free0 (_tmp543_);
9702 				}
9703 				_g_free0 (_tmp520_);
9704 			}
9705 		}
9706 		if (!is_virtual) {
9707 			gboolean _tmp549_ = FALSE;
9708 			gboolean _tmp550_ = FALSE;
9709 			ValaProperty* _tmp551_;
9710 			_tmp551_ = prop;
9711 			if (vala_symbol_is_private_symbol ((ValaSymbol*) _tmp551_)) {
9712 				_tmp550_ = TRUE;
9713 			} else {
9714 				gboolean _tmp552_ = FALSE;
9715 				gboolean _tmp553_;
9716 				gboolean _tmp554_;
9717 				_tmp553_ = vala_property_accessor_get_readable (acc);
9718 				_tmp554_ = _tmp553_;
9719 				if (_tmp554_) {
9720 					_tmp552_ = TRUE;
9721 				} else {
9722 					gboolean _tmp555_;
9723 					gboolean _tmp556_;
9724 					_tmp555_ = vala_property_accessor_get_writable (acc);
9725 					_tmp556_ = _tmp555_;
9726 					_tmp552_ = _tmp556_;
9727 				}
9728 				_tmp550_ = !_tmp552_;
9729 			}
9730 			if (_tmp550_) {
9731 				_tmp549_ = TRUE;
9732 			} else {
9733 				ValaSymbolAccessibility _tmp557_;
9734 				ValaSymbolAccessibility _tmp558_;
9735 				_tmp557_ = vala_symbol_get_access ((ValaSymbol*) acc);
9736 				_tmp558_ = _tmp557_;
9737 				_tmp549_ = _tmp558_ == VALA_SYMBOL_ACCESSIBILITY_PRIVATE;
9738 			}
9739 			if (_tmp549_) {
9740 				ValaCCodeFunction* _tmp559_;
9741 				ValaCCodeFunction* _tmp560_;
9742 				ValaCCodeModifiers _tmp561_;
9743 				ValaCCodeModifiers _tmp562_;
9744 				_tmp559_ = function;
9745 				_tmp560_ = function;
9746 				_tmp561_ = vala_ccode_node_get_modifiers ((ValaCCodeNode*) _tmp560_);
9747 				_tmp562_ = _tmp561_;
9748 				vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp560_, _tmp562_ | VALA_CCODE_MODIFIERS_STATIC);
9749 			} else {
9750 				gboolean _tmp563_ = FALSE;
9751 				ValaCodeContext* _tmp564_;
9752 				gboolean _tmp565_;
9753 				gboolean _tmp566_;
9754 				_tmp564_ = self->priv->_context;
9755 				_tmp565_ = vala_code_context_get_hide_internal (_tmp564_);
9756 				_tmp566_ = _tmp565_;
9757 				if (_tmp566_) {
9758 					gboolean _tmp567_ = FALSE;
9759 					ValaProperty* _tmp568_;
9760 					_tmp568_ = prop;
9761 					if (vala_symbol_is_internal_symbol ((ValaSymbol*) _tmp568_)) {
9762 						_tmp567_ = TRUE;
9763 					} else {
9764 						ValaSymbolAccessibility _tmp569_;
9765 						ValaSymbolAccessibility _tmp570_;
9766 						_tmp569_ = vala_symbol_get_access ((ValaSymbol*) acc);
9767 						_tmp570_ = _tmp569_;
9768 						_tmp567_ = _tmp570_ == VALA_SYMBOL_ACCESSIBILITY_INTERNAL;
9769 					}
9770 					_tmp563_ = _tmp567_;
9771 				} else {
9772 					_tmp563_ = FALSE;
9773 				}
9774 				if (_tmp563_) {
9775 					ValaCCodeFunction* _tmp571_;
9776 					ValaCCodeFunction* _tmp572_;
9777 					ValaCCodeModifiers _tmp573_;
9778 					ValaCCodeModifiers _tmp574_;
9779 					_tmp571_ = function;
9780 					_tmp572_ = function;
9781 					_tmp573_ = vala_ccode_node_get_modifiers ((ValaCCodeNode*) _tmp572_);
9782 					_tmp574_ = _tmp573_;
9783 					vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp572_, _tmp574_ | VALA_CCODE_MODIFIERS_INTERNAL);
9784 				}
9785 			}
9786 		}
9787 		_tmp575_ = function;
9788 		vala_ccode_base_module_push_function (self, _tmp575_);
9789 		_tmp577_ = prop;
9790 		_tmp578_ = vala_property_get_binding (_tmp577_);
9791 		_tmp579_ = _tmp578_;
9792 		if (_tmp579_ == VALA_MEMBER_BINDING_INSTANCE) {
9793 			_tmp576_ = !is_virtual;
9794 		} else {
9795 			_tmp576_ = FALSE;
9796 		}
9797 		if (_tmp576_) {
9798 			gboolean _tmp580_ = FALSE;
9799 			gboolean _tmp581_;
9800 			gboolean _tmp582_;
9801 			_tmp581_ = vala_property_accessor_get_readable (acc);
9802 			_tmp582_ = _tmp581_;
9803 			if (!_tmp582_) {
9804 				_tmp580_ = TRUE;
9805 			} else {
9806 				_tmp580_ = returns_real_struct;
9807 			}
9808 			if (_tmp580_) {
9809 				ValaProperty* _tmp583_;
9810 				ValaTypeSymbol* _tmp584_;
9811 				_tmp583_ = prop;
9812 				_tmp584_ = t;
9813 				vala_ccode_base_module_create_property_type_check_statement (self, _tmp583_, FALSE, _tmp584_, TRUE, "self");
9814 			} else {
9815 				ValaProperty* _tmp585_;
9816 				ValaTypeSymbol* _tmp586_;
9817 				_tmp585_ = prop;
9818 				_tmp586_ = t;
9819 				vala_ccode_base_module_create_property_type_check_statement (self, _tmp585_, TRUE, _tmp586_, TRUE, "self");
9820 			}
9821 		}
9822 		_tmp588_ = vala_property_accessor_get_readable (acc);
9823 		_tmp589_ = _tmp588_;
9824 		if (_tmp589_) {
9825 			_tmp587_ = !returns_real_struct;
9826 		} else {
9827 			_tmp587_ = FALSE;
9828 		}
9829 		if (_tmp587_) {
9830 			gboolean _tmp590_ = FALSE;
9831 			ValaBasicBlock* _tmp591_;
9832 			ValaBasicBlock* _tmp592_;
9833 			_tmp591_ = vala_subroutine_get_return_block ((ValaSubroutine*) acc);
9834 			_tmp592_ = _tmp591_;
9835 			if (_tmp592_ == NULL) {
9836 				_tmp590_ = TRUE;
9837 			} else {
9838 				ValaBasicBlock* _tmp593_;
9839 				ValaBasicBlock* _tmp594_;
9840 				ValaList* _tmp595_;
9841 				gint _tmp596_;
9842 				gint _tmp597_;
9843 				_tmp593_ = vala_subroutine_get_return_block ((ValaSubroutine*) acc);
9844 				_tmp594_ = _tmp593_;
9845 				_tmp595_ = vala_basic_block_get_predecessors (_tmp594_);
9846 				_tmp596_ = vala_collection_get_size ((ValaCollection*) _tmp595_);
9847 				_tmp597_ = _tmp596_;
9848 				_tmp590_ = _tmp597_ > 0;
9849 			}
9850 			if (_tmp590_) {
9851 				ValaCCodeFunction* _tmp598_;
9852 				ValaCCodeFunction* _tmp599_;
9853 				ValaDataType* _tmp600_;
9854 				ValaDataType* _tmp601_;
9855 				gchar* _tmp602_;
9856 				gchar* _tmp603_;
9857 				ValaCCodeVariableDeclarator* _tmp604_;
9858 				ValaCCodeVariableDeclarator* _tmp605_;
9859 				_tmp598_ = vala_ccode_base_module_get_ccode (self);
9860 				_tmp599_ = _tmp598_;
9861 				_tmp600_ = vala_property_accessor_get_value_type (acc);
9862 				_tmp601_ = _tmp600_;
9863 				_tmp602_ = vala_get_ccode_name ((ValaCodeNode*) _tmp601_);
9864 				_tmp603_ = _tmp602_;
9865 				_tmp604_ = vala_ccode_variable_declarator_new ("result", NULL, NULL);
9866 				_tmp605_ = _tmp604_;
9867 				vala_ccode_function_add_declaration (_tmp599_, _tmp603_, (ValaCCodeDeclarator*) _tmp605_, 0);
9868 				_vala_ccode_node_unref0 (_tmp605_);
9869 				_g_free0 (_tmp603_);
9870 			}
9871 		}
9872 		if (is_virtual) {
9873 			ValaCCodeFunction* _tmp606_;
9874 			ValaCCodeFunction* _tmp607_;
9875 			ValaDataType* _tmp608_;
9876 			gchar* _tmp609_;
9877 			gchar* _tmp610_;
9878 			ValaCCodeVariableDeclarator* _tmp611_;
9879 			ValaCCodeVariableDeclarator* _tmp612_;
9880 			ValaCCodeFunction* _tmp613_;
9881 			ValaCCodeFunction* _tmp614_;
9882 			ValaCCodeIdentifier* _tmp615_;
9883 			ValaCCodeIdentifier* _tmp616_;
9884 			ValaObjectType* _tmp617_;
9885 			ValaCCodeIdentifier* _tmp618_;
9886 			ValaCCodeIdentifier* _tmp619_;
9887 			ValaGLibValue* _tmp620_;
9888 			ValaGLibValue* _tmp621_;
9889 			ValaDataType* _tmp622_;
9890 			ValaTargetValue* _tmp623_;
9891 			ValaTargetValue* _tmp624_;
9892 			ValaCCodeExpression* _tmp625_;
9893 			_tmp606_ = vala_ccode_base_module_get_ccode (self);
9894 			_tmp607_ = _tmp606_;
9895 			_tmp608_ = this_type;
9896 			_tmp609_ = vala_get_ccode_name ((ValaCodeNode*) _tmp608_);
9897 			_tmp610_ = _tmp609_;
9898 			_tmp611_ = vala_ccode_variable_declarator_new ("self", NULL, NULL);
9899 			_tmp612_ = _tmp611_;
9900 			vala_ccode_function_add_declaration (_tmp607_, _tmp610_, (ValaCCodeDeclarator*) _tmp612_, 0);
9901 			_vala_ccode_node_unref0 (_tmp612_);
9902 			_g_free0 (_tmp610_);
9903 			_tmp613_ = vala_ccode_base_module_get_ccode (self);
9904 			_tmp614_ = _tmp613_;
9905 			_tmp615_ = vala_ccode_identifier_new ("self");
9906 			_tmp616_ = _tmp615_;
9907 			_tmp617_ = base_type;
9908 			_tmp618_ = vala_ccode_identifier_new ("base");
9909 			_tmp619_ = _tmp618_;
9910 			_tmp620_ = vala_glib_value_new ((ValaDataType*) _tmp617_, (ValaCCodeExpression*) _tmp619_, TRUE);
9911 			_tmp621_ = _tmp620_;
9912 			_tmp622_ = this_type;
9913 			_tmp623_ = vala_ccode_base_module_transform_value (self, (ValaTargetValue*) _tmp621_, _tmp622_, (ValaCodeNode*) acc);
9914 			_tmp624_ = _tmp623_;
9915 			_tmp625_ = vala_get_cvalue_ (_tmp624_);
9916 			vala_ccode_function_add_assignment (_tmp614_, (ValaCCodeExpression*) _tmp616_, _tmp625_);
9917 			_vala_target_value_unref0 (_tmp624_);
9918 			_vala_target_value_unref0 (_tmp621_);
9919 			_vala_ccode_node_unref0 (_tmp619_);
9920 			_vala_ccode_node_unref0 (_tmp616_);
9921 		}
9922 		_tmp628_ = self->priv->_context;
9923 		_tmp629_ = vala_code_context_get_analyzer (_tmp628_);
9924 		_tmp630_ = _tmp629_;
9925 		_tmp631_ = prop;
9926 		if (vala_semantic_analyzer_is_gobject_property (_tmp630_, _tmp631_)) {
9927 			ValaProperty* _tmp632_;
9928 			gboolean _tmp633_;
9929 			gboolean _tmp634_;
9930 			_tmp632_ = prop;
9931 			_tmp633_ = vala_property_get_notify (_tmp632_);
9932 			_tmp634_ = _tmp633_;
9933 			_tmp627_ = _tmp634_;
9934 		} else {
9935 			_tmp627_ = FALSE;
9936 		}
9937 		if (_tmp627_) {
9938 			gboolean _tmp635_ = FALSE;
9939 			gboolean _tmp636_;
9940 			gboolean _tmp637_;
9941 			_tmp636_ = vala_property_accessor_get_writable (acc);
9942 			_tmp637_ = _tmp636_;
9943 			if (_tmp637_) {
9944 				_tmp635_ = TRUE;
9945 			} else {
9946 				gboolean _tmp638_;
9947 				gboolean _tmp639_;
9948 				_tmp638_ = vala_property_accessor_get_construction (acc);
9949 				_tmp639_ = _tmp638_;
9950 				_tmp635_ = _tmp639_;
9951 			}
9952 			_tmp626_ = _tmp635_;
9953 		} else {
9954 			_tmp626_ = FALSE;
9955 		}
9956 		if (_tmp626_) {
9957 			ValaCCodeFunctionCall* notify_call = NULL;
9958 			ValaCCodeIdentifier* _tmp640_;
9959 			ValaCCodeIdentifier* _tmp641_;
9960 			ValaCCodeFunctionCall* _tmp642_;
9961 			ValaCCodeFunctionCall* _tmp643_;
9962 			ValaCCodeFunctionCall* _tmp644_;
9963 			ValaCCodeIdentifier* _tmp645_;
9964 			ValaCCodeIdentifier* _tmp646_;
9965 			ValaCCodeCastExpression* _tmp647_;
9966 			ValaCCodeCastExpression* _tmp648_;
9967 			ValaCCodeFunctionCall* _tmp649_;
9968 			ValaProperty* _tmp650_;
9969 			ValaCCodeExpression* _tmp651_;
9970 			ValaCCodeExpression* _tmp652_;
9971 			ValaPropertyAccessor* get_accessor = NULL;
9972 			ValaProperty* _tmp653_;
9973 			ValaPropertyAccessor* _tmp654_;
9974 			ValaPropertyAccessor* _tmp655_;
9975 			ValaPropertyAccessor* _tmp656_;
9976 			gboolean _tmp657_ = FALSE;
9977 			ValaPropertyAccessor* _tmp658_;
9978 			_tmp640_ = vala_ccode_identifier_new ("g_object_notify_by_pspec");
9979 			_tmp641_ = _tmp640_;
9980 			_tmp642_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp641_);
9981 			_tmp643_ = _tmp642_;
9982 			_vala_ccode_node_unref0 (_tmp641_);
9983 			notify_call = _tmp643_;
9984 			_tmp644_ = notify_call;
9985 			_tmp645_ = vala_ccode_identifier_new ("self");
9986 			_tmp646_ = _tmp645_;
9987 			_tmp647_ = vala_ccode_cast_expression_new ((ValaCCodeExpression*) _tmp646_, "GObject *");
9988 			_tmp648_ = _tmp647_;
9989 			vala_ccode_function_call_add_argument (_tmp644_, (ValaCCodeExpression*) _tmp648_);
9990 			_vala_ccode_node_unref0 (_tmp648_);
9991 			_vala_ccode_node_unref0 (_tmp646_);
9992 			_tmp649_ = notify_call;
9993 			_tmp650_ = prop;
9994 			_tmp651_ = vala_ccode_base_module_get_param_spec_cexpression (self, _tmp650_);
9995 			_tmp652_ = _tmp651_;
9996 			vala_ccode_function_call_add_argument (_tmp649_, _tmp652_);
9997 			_vala_ccode_node_unref0 (_tmp652_);
9998 			_tmp653_ = prop;
9999 			_tmp654_ = vala_property_get_get_accessor (_tmp653_);
10000 			_tmp655_ = _tmp654_;
10001 			_tmp656_ = _vala_code_node_ref0 (_tmp655_);
10002 			get_accessor = _tmp656_;
10003 			_tmp658_ = get_accessor;
10004 			if (_tmp658_ != NULL) {
10005 				ValaPropertyAccessor* _tmp659_;
10006 				gboolean _tmp660_;
10007 				gboolean _tmp661_;
10008 				_tmp659_ = get_accessor;
10009 				_tmp660_ = vala_property_accessor_get_automatic_body (_tmp659_);
10010 				_tmp661_ = _tmp660_;
10011 				_tmp657_ = _tmp661_;
10012 			} else {
10013 				_tmp657_ = FALSE;
10014 			}
10015 			if (_tmp657_) {
10016 				ValaDataType* property_type = NULL;
10017 				ValaProperty* _tmp662_;
10018 				ValaDataType* _tmp663_;
10019 				ValaDataType* _tmp664_;
10020 				ValaDataType* _tmp665_;
10021 				ValaCCodeFunctionCall* get_call = NULL;
10022 				ValaPropertyAccessor* _tmp666_;
10023 				gchar* _tmp667_;
10024 				gchar* _tmp668_;
10025 				ValaCCodeIdentifier* _tmp669_;
10026 				ValaCCodeIdentifier* _tmp670_;
10027 				ValaCCodeFunctionCall* _tmp671_;
10028 				ValaCCodeFunctionCall* _tmp672_;
10029 				const gchar* _tmp673_ = NULL;
10030 				ValaCCodeFunctionCall* _tmp674_;
10031 				ValaCCodeIdentifier* _tmp675_;
10032 				ValaCCodeIdentifier* _tmp676_;
10033 				gboolean _tmp677_ = FALSE;
10034 				ValaDataType* _tmp678_;
10035 				ValaBlock* _tmp827_;
10036 				ValaBlock* _tmp828_;
10037 				ValaCCodeFunction* _tmp829_;
10038 				ValaCCodeFunction* _tmp830_;
10039 				ValaCCodeFunctionCall* _tmp831_;
10040 				ValaCCodeFunction* _tmp832_;
10041 				ValaCCodeFunction* _tmp833_;
10042 				ValaProperty* _tmp834_;
10043 				ValaPropertyAccessor* _tmp835_;
10044 				ValaPropertyAccessor* _tmp836_;
10045 				ValaDataType* _tmp837_;
10046 				ValaDataType* _tmp838_;
10047 				_tmp662_ = prop;
10048 				_tmp663_ = vala_property_get_property_type (_tmp662_);
10049 				_tmp664_ = _tmp663_;
10050 				_tmp665_ = _vala_code_node_ref0 (_tmp664_);
10051 				property_type = _tmp665_;
10052 				_tmp666_ = get_accessor;
10053 				_tmp667_ = vala_get_ccode_real_name ((ValaSymbol*) _tmp666_);
10054 				_tmp668_ = _tmp667_;
10055 				_tmp669_ = vala_ccode_identifier_new (_tmp668_);
10056 				_tmp670_ = _tmp669_;
10057 				_tmp671_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp670_);
10058 				_tmp672_ = _tmp671_;
10059 				_vala_ccode_node_unref0 (_tmp670_);
10060 				_g_free0 (_tmp668_);
10061 				get_call = _tmp672_;
10062 				if (is_virtual) {
10063 					_tmp673_ = "base";
10064 				} else {
10065 					_tmp673_ = "self";
10066 				}
10067 				_tmp674_ = get_call;
10068 				_tmp675_ = vala_ccode_identifier_new (_tmp673_);
10069 				_tmp676_ = _tmp675_;
10070 				vala_ccode_function_call_add_argument (_tmp674_, (ValaCCodeExpression*) _tmp676_);
10071 				_vala_ccode_node_unref0 (_tmp676_);
10072 				_tmp678_ = property_type;
10073 				if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp678_, VALA_TYPE_ARRAY_TYPE)) {
10074 					ValaProperty* _tmp679_;
10075 					_tmp679_ = prop;
10076 					_tmp677_ = vala_get_ccode_array_length ((ValaCodeNode*) _tmp679_);
10077 				} else {
10078 					_tmp677_ = FALSE;
10079 				}
10080 				if (_tmp677_) {
10081 					ValaCCodeFunction* _tmp680_;
10082 					ValaCCodeFunction* _tmp681_;
10083 					ValaDataType* _tmp682_;
10084 					gchar* _tmp683_;
10085 					gchar* _tmp684_;
10086 					ValaCCodeVariableDeclarator* _tmp685_;
10087 					ValaCCodeVariableDeclarator* _tmp686_;
10088 					ValaCCodeFunction* _tmp687_;
10089 					ValaCCodeFunction* _tmp688_;
10090 					ValaProperty* _tmp689_;
10091 					gchar* _tmp690_;
10092 					gchar* _tmp691_;
10093 					ValaCCodeVariableDeclarator* _tmp692_;
10094 					ValaCCodeVariableDeclarator* _tmp693_;
10095 					ValaCCodeFunctionCall* _tmp694_;
10096 					ValaCCodeIdentifier* _tmp695_;
10097 					ValaCCodeIdentifier* _tmp696_;
10098 					ValaCCodeUnaryExpression* _tmp697_;
10099 					ValaCCodeUnaryExpression* _tmp698_;
10100 					ValaCCodeFunction* _tmp699_;
10101 					ValaCCodeFunction* _tmp700_;
10102 					ValaCCodeIdentifier* _tmp701_;
10103 					ValaCCodeIdentifier* _tmp702_;
10104 					ValaCCodeFunctionCall* _tmp703_;
10105 					ValaCCodeFunction* _tmp704_;
10106 					ValaCCodeFunction* _tmp705_;
10107 					ValaCCodeIdentifier* _tmp706_;
10108 					ValaCCodeIdentifier* _tmp707_;
10109 					ValaCCodeIdentifier* _tmp708_;
10110 					ValaCCodeIdentifier* _tmp709_;
10111 					ValaCCodeBinaryExpression* _tmp710_;
10112 					ValaCCodeBinaryExpression* _tmp711_;
10113 					_tmp680_ = vala_ccode_base_module_get_ccode (self);
10114 					_tmp681_ = _tmp680_;
10115 					_tmp682_ = property_type;
10116 					_tmp683_ = vala_get_ccode_name ((ValaCodeNode*) _tmp682_);
10117 					_tmp684_ = _tmp683_;
10118 					_tmp685_ = vala_ccode_variable_declarator_new ("old_value", NULL, NULL);
10119 					_tmp686_ = _tmp685_;
10120 					vala_ccode_function_add_declaration (_tmp681_, _tmp684_, (ValaCCodeDeclarator*) _tmp686_, 0);
10121 					_vala_ccode_node_unref0 (_tmp686_);
10122 					_g_free0 (_tmp684_);
10123 					_tmp687_ = vala_ccode_base_module_get_ccode (self);
10124 					_tmp688_ = _tmp687_;
10125 					_tmp689_ = prop;
10126 					_tmp690_ = vala_get_ccode_array_length_type ((ValaCodeNode*) _tmp689_);
10127 					_tmp691_ = _tmp690_;
10128 					_tmp692_ = vala_ccode_variable_declarator_new ("old_value_length", NULL, NULL);
10129 					_tmp693_ = _tmp692_;
10130 					vala_ccode_function_add_declaration (_tmp688_, _tmp691_, (ValaCCodeDeclarator*) _tmp693_, 0);
10131 					_vala_ccode_node_unref0 (_tmp693_);
10132 					_g_free0 (_tmp691_);
10133 					_tmp694_ = get_call;
10134 					_tmp695_ = vala_ccode_identifier_new ("old_value_length");
10135 					_tmp696_ = _tmp695_;
10136 					_tmp697_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, (ValaCCodeExpression*) _tmp696_);
10137 					_tmp698_ = _tmp697_;
10138 					vala_ccode_function_call_add_argument (_tmp694_, (ValaCCodeExpression*) _tmp698_);
10139 					_vala_ccode_node_unref0 (_tmp698_);
10140 					_vala_ccode_node_unref0 (_tmp696_);
10141 					_tmp699_ = vala_ccode_base_module_get_ccode (self);
10142 					_tmp700_ = _tmp699_;
10143 					_tmp701_ = vala_ccode_identifier_new ("old_value");
10144 					_tmp702_ = _tmp701_;
10145 					_tmp703_ = get_call;
10146 					vala_ccode_function_add_assignment (_tmp700_, (ValaCCodeExpression*) _tmp702_, (ValaCCodeExpression*) _tmp703_);
10147 					_vala_ccode_node_unref0 (_tmp702_);
10148 					_tmp704_ = vala_ccode_base_module_get_ccode (self);
10149 					_tmp705_ = _tmp704_;
10150 					_tmp706_ = vala_ccode_identifier_new ("old_value");
10151 					_tmp707_ = _tmp706_;
10152 					_tmp708_ = vala_ccode_identifier_new ("value");
10153 					_tmp709_ = _tmp708_;
10154 					_tmp710_ = vala_ccode_binary_expression_new (VALA_CCODE_BINARY_OPERATOR_INEQUALITY, (ValaCCodeExpression*) _tmp707_, (ValaCCodeExpression*) _tmp709_);
10155 					_tmp711_ = _tmp710_;
10156 					vala_ccode_function_open_if (_tmp705_, (ValaCCodeExpression*) _tmp711_);
10157 					_vala_ccode_node_unref0 (_tmp711_);
10158 					_vala_ccode_node_unref0 (_tmp709_);
10159 					_vala_ccode_node_unref0 (_tmp707_);
10160 				} else {
10161 					ValaDataType* _tmp712_;
10162 					ValaDataType* _tmp713_;
10163 					_tmp712_ = property_type;
10164 					_tmp713_ = self->string_type;
10165 					if (vala_data_type_compatible (_tmp712_, _tmp713_)) {
10166 						ValaCCodeFunction* _tmp714_;
10167 						ValaCCodeFunction* _tmp715_;
10168 						ValaDataType* _tmp716_;
10169 						gchar* _tmp717_;
10170 						gchar* _tmp718_;
10171 						ValaCCodeVariableDeclarator* _tmp719_;
10172 						ValaCCodeVariableDeclarator* _tmp720_;
10173 						ValaCCodeFunction* _tmp721_;
10174 						ValaCCodeFunction* _tmp722_;
10175 						ValaCCodeIdentifier* _tmp723_;
10176 						ValaCCodeIdentifier* _tmp724_;
10177 						ValaCCodeFunctionCall* _tmp725_;
10178 						ValaCCodeFunctionCall* ccall = NULL;
10179 						ValaCodeContext* _tmp726_;
10180 						ValaProfile _tmp727_;
10181 						ValaProfile _tmp728_;
10182 						ValaCCodeFunctionCall* _tmp740_;
10183 						ValaCCodeIdentifier* _tmp741_;
10184 						ValaCCodeIdentifier* _tmp742_;
10185 						ValaCCodeFunctionCall* _tmp743_;
10186 						ValaCCodeIdentifier* _tmp744_;
10187 						ValaCCodeIdentifier* _tmp745_;
10188 						ValaCCodeFunction* _tmp746_;
10189 						ValaCCodeFunction* _tmp747_;
10190 						ValaCCodeFunctionCall* _tmp748_;
10191 						ValaCCodeConstant* _tmp749_;
10192 						ValaCCodeConstant* _tmp750_;
10193 						ValaCCodeBinaryExpression* _tmp751_;
10194 						ValaCCodeBinaryExpression* _tmp752_;
10195 						_tmp714_ = vala_ccode_base_module_get_ccode (self);
10196 						_tmp715_ = _tmp714_;
10197 						_tmp716_ = property_type;
10198 						_tmp717_ = vala_get_ccode_name ((ValaCodeNode*) _tmp716_);
10199 						_tmp718_ = _tmp717_;
10200 						_tmp719_ = vala_ccode_variable_declarator_new ("old_value", NULL, NULL);
10201 						_tmp720_ = _tmp719_;
10202 						vala_ccode_function_add_declaration (_tmp715_, _tmp718_, (ValaCCodeDeclarator*) _tmp720_, 0);
10203 						_vala_ccode_node_unref0 (_tmp720_);
10204 						_g_free0 (_tmp718_);
10205 						_tmp721_ = vala_ccode_base_module_get_ccode (self);
10206 						_tmp722_ = _tmp721_;
10207 						_tmp723_ = vala_ccode_identifier_new ("old_value");
10208 						_tmp724_ = _tmp723_;
10209 						_tmp725_ = get_call;
10210 						vala_ccode_function_add_assignment (_tmp722_, (ValaCCodeExpression*) _tmp724_, (ValaCCodeExpression*) _tmp725_);
10211 						_vala_ccode_node_unref0 (_tmp724_);
10212 						_tmp726_ = self->priv->_context;
10213 						_tmp727_ = vala_code_context_get_profile (_tmp726_);
10214 						_tmp728_ = _tmp727_;
10215 						if (_tmp728_ == VALA_PROFILE_POSIX) {
10216 							ValaCCodeFile* _tmp729_;
10217 							ValaCCodeIdentifier* _tmp730_;
10218 							ValaCCodeIdentifier* _tmp731_;
10219 							gchar* _tmp732_;
10220 							gchar* _tmp733_;
10221 							ValaCCodeIdentifier* _tmp734_;
10222 							ValaCCodeIdentifier* _tmp735_;
10223 							ValaCCodeFunctionCall* _tmp736_;
10224 							_tmp729_ = self->cfile;
10225 							vala_ccode_file_add_include (_tmp729_, "string.h", FALSE);
10226 							_tmp730_ = vala_ccode_identifier_new ("strcmp");
10227 							_tmp731_ = _tmp730_;
10228 							_tmp732_ = vala_ccode_base_module_generate_cmp_wrapper (self, _tmp731_);
10229 							_tmp733_ = _tmp732_;
10230 							_tmp734_ = vala_ccode_identifier_new (_tmp733_);
10231 							_tmp735_ = _tmp734_;
10232 							_tmp736_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp735_);
10233 							_vala_ccode_node_unref0 (ccall);
10234 							ccall = _tmp736_;
10235 							_vala_ccode_node_unref0 (_tmp735_);
10236 							_g_free0 (_tmp733_);
10237 							_vala_ccode_node_unref0 (_tmp731_);
10238 						} else {
10239 							ValaCCodeIdentifier* _tmp737_;
10240 							ValaCCodeIdentifier* _tmp738_;
10241 							ValaCCodeFunctionCall* _tmp739_;
10242 							_tmp737_ = vala_ccode_identifier_new ("g_strcmp0");
10243 							_tmp738_ = _tmp737_;
10244 							_tmp739_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp738_);
10245 							_vala_ccode_node_unref0 (ccall);
10246 							ccall = _tmp739_;
10247 							_vala_ccode_node_unref0 (_tmp738_);
10248 						}
10249 						_tmp740_ = ccall;
10250 						_tmp741_ = vala_ccode_identifier_new ("value");
10251 						_tmp742_ = _tmp741_;
10252 						vala_ccode_function_call_add_argument (_tmp740_, (ValaCCodeExpression*) _tmp742_);
10253 						_vala_ccode_node_unref0 (_tmp742_);
10254 						_tmp743_ = ccall;
10255 						_tmp744_ = vala_ccode_identifier_new ("old_value");
10256 						_tmp745_ = _tmp744_;
10257 						vala_ccode_function_call_add_argument (_tmp743_, (ValaCCodeExpression*) _tmp745_);
10258 						_vala_ccode_node_unref0 (_tmp745_);
10259 						_tmp746_ = vala_ccode_base_module_get_ccode (self);
10260 						_tmp747_ = _tmp746_;
10261 						_tmp748_ = ccall;
10262 						_tmp749_ = vala_ccode_constant_new ("0");
10263 						_tmp750_ = _tmp749_;
10264 						_tmp751_ = vala_ccode_binary_expression_new (VALA_CCODE_BINARY_OPERATOR_INEQUALITY, (ValaCCodeExpression*) _tmp748_, (ValaCCodeExpression*) _tmp750_);
10265 						_tmp752_ = _tmp751_;
10266 						vala_ccode_function_open_if (_tmp747_, (ValaCCodeExpression*) _tmp752_);
10267 						_vala_ccode_node_unref0 (_tmp752_);
10268 						_vala_ccode_node_unref0 (_tmp750_);
10269 						_vala_ccode_node_unref0 (ccall);
10270 					} else {
10271 						ValaDataType* _tmp753_;
10272 						_tmp753_ = property_type;
10273 						if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp753_, VALA_TYPE_STRUCT_VALUE_TYPE)) {
10274 							ValaCCodeFunction* _tmp754_;
10275 							ValaCCodeFunction* _tmp755_;
10276 							ValaDataType* _tmp756_;
10277 							gchar* _tmp757_;
10278 							gchar* _tmp758_;
10279 							ValaCCodeVariableDeclarator* _tmp759_;
10280 							ValaCCodeVariableDeclarator* _tmp760_;
10281 							ValaDataType* _tmp761_;
10282 							gboolean _tmp762_;
10283 							gboolean _tmp763_;
10284 							gchar* equalfunc = NULL;
10285 							ValaDataType* _tmp777_;
10286 							ValaTypeSymbol* _tmp778_;
10287 							ValaTypeSymbol* _tmp779_;
10288 							gchar* _tmp780_;
10289 							ValaCCodeFunctionCall* ccall = NULL;
10290 							const gchar* _tmp781_;
10291 							ValaCCodeIdentifier* _tmp782_;
10292 							ValaCCodeIdentifier* _tmp783_;
10293 							ValaCCodeFunctionCall* _tmp784_;
10294 							ValaCCodeFunctionCall* _tmp785_;
10295 							ValaCCodeFunctionCall* _tmp786_;
10296 							ValaCCodeIdentifier* _tmp787_;
10297 							ValaCCodeIdentifier* _tmp788_;
10298 							ValaDataType* _tmp789_;
10299 							gboolean _tmp790_;
10300 							gboolean _tmp791_;
10301 							ValaCCodeFunction* _tmp800_;
10302 							ValaCCodeFunction* _tmp801_;
10303 							ValaCCodeFunctionCall* _tmp802_;
10304 							ValaCCodeConstant* _tmp803_;
10305 							ValaCCodeConstant* _tmp804_;
10306 							ValaCCodeBinaryExpression* _tmp805_;
10307 							ValaCCodeBinaryExpression* _tmp806_;
10308 							_tmp754_ = vala_ccode_base_module_get_ccode (self);
10309 							_tmp755_ = _tmp754_;
10310 							_tmp756_ = property_type;
10311 							_tmp757_ = vala_get_ccode_name ((ValaCodeNode*) _tmp756_);
10312 							_tmp758_ = _tmp757_;
10313 							_tmp759_ = vala_ccode_variable_declarator_new ("old_value", NULL, NULL);
10314 							_tmp760_ = _tmp759_;
10315 							vala_ccode_function_add_declaration (_tmp755_, _tmp758_, (ValaCCodeDeclarator*) _tmp760_, 0);
10316 							_vala_ccode_node_unref0 (_tmp760_);
10317 							_g_free0 (_tmp758_);
10318 							_tmp761_ = property_type;
10319 							_tmp762_ = vala_data_type_get_nullable (_tmp761_);
10320 							_tmp763_ = _tmp762_;
10321 							if (_tmp763_) {
10322 								ValaCCodeFunction* _tmp764_;
10323 								ValaCCodeFunction* _tmp765_;
10324 								ValaCCodeIdentifier* _tmp766_;
10325 								ValaCCodeIdentifier* _tmp767_;
10326 								ValaCCodeFunctionCall* _tmp768_;
10327 								_tmp764_ = vala_ccode_base_module_get_ccode (self);
10328 								_tmp765_ = _tmp764_;
10329 								_tmp766_ = vala_ccode_identifier_new ("old_value");
10330 								_tmp767_ = _tmp766_;
10331 								_tmp768_ = get_call;
10332 								vala_ccode_function_add_assignment (_tmp765_, (ValaCCodeExpression*) _tmp767_, (ValaCCodeExpression*) _tmp768_);
10333 								_vala_ccode_node_unref0 (_tmp767_);
10334 							} else {
10335 								ValaCCodeFunctionCall* _tmp769_;
10336 								ValaCCodeIdentifier* _tmp770_;
10337 								ValaCCodeIdentifier* _tmp771_;
10338 								ValaCCodeUnaryExpression* _tmp772_;
10339 								ValaCCodeUnaryExpression* _tmp773_;
10340 								ValaCCodeFunction* _tmp774_;
10341 								ValaCCodeFunction* _tmp775_;
10342 								ValaCCodeFunctionCall* _tmp776_;
10343 								_tmp769_ = get_call;
10344 								_tmp770_ = vala_ccode_identifier_new ("old_value");
10345 								_tmp771_ = _tmp770_;
10346 								_tmp772_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, (ValaCCodeExpression*) _tmp771_);
10347 								_tmp773_ = _tmp772_;
10348 								vala_ccode_function_call_add_argument (_tmp769_, (ValaCCodeExpression*) _tmp773_);
10349 								_vala_ccode_node_unref0 (_tmp773_);
10350 								_vala_ccode_node_unref0 (_tmp771_);
10351 								_tmp774_ = vala_ccode_base_module_get_ccode (self);
10352 								_tmp775_ = _tmp774_;
10353 								_tmp776_ = get_call;
10354 								vala_ccode_function_add_expression (_tmp775_, (ValaCCodeExpression*) _tmp776_);
10355 							}
10356 							_tmp777_ = property_type;
10357 							_tmp778_ = vala_data_type_get_type_symbol (_tmp777_);
10358 							_tmp779_ = _tmp778_;
10359 							_tmp780_ = vala_ccode_base_module_generate_struct_equal_function (self, G_TYPE_CHECK_INSTANCE_CAST (_tmp779_, VALA_TYPE_STRUCT, ValaStruct));
10360 							equalfunc = _tmp780_;
10361 							_tmp781_ = equalfunc;
10362 							_tmp782_ = vala_ccode_identifier_new (_tmp781_);
10363 							_tmp783_ = _tmp782_;
10364 							_tmp784_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp783_);
10365 							_tmp785_ = _tmp784_;
10366 							_vala_ccode_node_unref0 (_tmp783_);
10367 							ccall = _tmp785_;
10368 							_tmp786_ = ccall;
10369 							_tmp787_ = vala_ccode_identifier_new ("value");
10370 							_tmp788_ = _tmp787_;
10371 							vala_ccode_function_call_add_argument (_tmp786_, (ValaCCodeExpression*) _tmp788_);
10372 							_vala_ccode_node_unref0 (_tmp788_);
10373 							_tmp789_ = property_type;
10374 							_tmp790_ = vala_data_type_get_nullable (_tmp789_);
10375 							_tmp791_ = _tmp790_;
10376 							if (_tmp791_) {
10377 								ValaCCodeFunctionCall* _tmp792_;
10378 								ValaCCodeIdentifier* _tmp793_;
10379 								ValaCCodeIdentifier* _tmp794_;
10380 								_tmp792_ = ccall;
10381 								_tmp793_ = vala_ccode_identifier_new ("old_value");
10382 								_tmp794_ = _tmp793_;
10383 								vala_ccode_function_call_add_argument (_tmp792_, (ValaCCodeExpression*) _tmp794_);
10384 								_vala_ccode_node_unref0 (_tmp794_);
10385 							} else {
10386 								ValaCCodeFunctionCall* _tmp795_;
10387 								ValaCCodeIdentifier* _tmp796_;
10388 								ValaCCodeIdentifier* _tmp797_;
10389 								ValaCCodeUnaryExpression* _tmp798_;
10390 								ValaCCodeUnaryExpression* _tmp799_;
10391 								_tmp795_ = ccall;
10392 								_tmp796_ = vala_ccode_identifier_new ("old_value");
10393 								_tmp797_ = _tmp796_;
10394 								_tmp798_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, (ValaCCodeExpression*) _tmp797_);
10395 								_tmp799_ = _tmp798_;
10396 								vala_ccode_function_call_add_argument (_tmp795_, (ValaCCodeExpression*) _tmp799_);
10397 								_vala_ccode_node_unref0 (_tmp799_);
10398 								_vala_ccode_node_unref0 (_tmp797_);
10399 							}
10400 							_tmp800_ = vala_ccode_base_module_get_ccode (self);
10401 							_tmp801_ = _tmp800_;
10402 							_tmp802_ = ccall;
10403 							_tmp803_ = vala_ccode_constant_new ("TRUE");
10404 							_tmp804_ = _tmp803_;
10405 							_tmp805_ = vala_ccode_binary_expression_new (VALA_CCODE_BINARY_OPERATOR_INEQUALITY, (ValaCCodeExpression*) _tmp802_, (ValaCCodeExpression*) _tmp804_);
10406 							_tmp806_ = _tmp805_;
10407 							vala_ccode_function_open_if (_tmp801_, (ValaCCodeExpression*) _tmp806_);
10408 							_vala_ccode_node_unref0 (_tmp806_);
10409 							_vala_ccode_node_unref0 (_tmp804_);
10410 							_vala_ccode_node_unref0 (ccall);
10411 							_g_free0 (equalfunc);
10412 						} else {
10413 							ValaCCodeFunction* _tmp807_;
10414 							ValaCCodeFunction* _tmp808_;
10415 							ValaDataType* _tmp809_;
10416 							gchar* _tmp810_;
10417 							gchar* _tmp811_;
10418 							ValaCCodeVariableDeclarator* _tmp812_;
10419 							ValaCCodeVariableDeclarator* _tmp813_;
10420 							ValaCCodeFunction* _tmp814_;
10421 							ValaCCodeFunction* _tmp815_;
10422 							ValaCCodeIdentifier* _tmp816_;
10423 							ValaCCodeIdentifier* _tmp817_;
10424 							ValaCCodeFunctionCall* _tmp818_;
10425 							ValaCCodeFunction* _tmp819_;
10426 							ValaCCodeFunction* _tmp820_;
10427 							ValaCCodeIdentifier* _tmp821_;
10428 							ValaCCodeIdentifier* _tmp822_;
10429 							ValaCCodeIdentifier* _tmp823_;
10430 							ValaCCodeIdentifier* _tmp824_;
10431 							ValaCCodeBinaryExpression* _tmp825_;
10432 							ValaCCodeBinaryExpression* _tmp826_;
10433 							_tmp807_ = vala_ccode_base_module_get_ccode (self);
10434 							_tmp808_ = _tmp807_;
10435 							_tmp809_ = property_type;
10436 							_tmp810_ = vala_get_ccode_name ((ValaCodeNode*) _tmp809_);
10437 							_tmp811_ = _tmp810_;
10438 							_tmp812_ = vala_ccode_variable_declarator_new ("old_value", NULL, NULL);
10439 							_tmp813_ = _tmp812_;
10440 							vala_ccode_function_add_declaration (_tmp808_, _tmp811_, (ValaCCodeDeclarator*) _tmp813_, 0);
10441 							_vala_ccode_node_unref0 (_tmp813_);
10442 							_g_free0 (_tmp811_);
10443 							_tmp814_ = vala_ccode_base_module_get_ccode (self);
10444 							_tmp815_ = _tmp814_;
10445 							_tmp816_ = vala_ccode_identifier_new ("old_value");
10446 							_tmp817_ = _tmp816_;
10447 							_tmp818_ = get_call;
10448 							vala_ccode_function_add_assignment (_tmp815_, (ValaCCodeExpression*) _tmp817_, (ValaCCodeExpression*) _tmp818_);
10449 							_vala_ccode_node_unref0 (_tmp817_);
10450 							_tmp819_ = vala_ccode_base_module_get_ccode (self);
10451 							_tmp820_ = _tmp819_;
10452 							_tmp821_ = vala_ccode_identifier_new ("old_value");
10453 							_tmp822_ = _tmp821_;
10454 							_tmp823_ = vala_ccode_identifier_new ("value");
10455 							_tmp824_ = _tmp823_;
10456 							_tmp825_ = vala_ccode_binary_expression_new (VALA_CCODE_BINARY_OPERATOR_INEQUALITY, (ValaCCodeExpression*) _tmp822_, (ValaCCodeExpression*) _tmp824_);
10457 							_tmp826_ = _tmp825_;
10458 							vala_ccode_function_open_if (_tmp820_, (ValaCCodeExpression*) _tmp826_);
10459 							_vala_ccode_node_unref0 (_tmp826_);
10460 							_vala_ccode_node_unref0 (_tmp824_);
10461 							_vala_ccode_node_unref0 (_tmp822_);
10462 						}
10463 					}
10464 				}
10465 				_tmp827_ = vala_subroutine_get_body ((ValaSubroutine*) acc);
10466 				_tmp828_ = _tmp827_;
10467 				vala_code_node_emit ((ValaCodeNode*) _tmp828_, (ValaCodeGenerator*) self);
10468 				_tmp829_ = vala_ccode_base_module_get_ccode (self);
10469 				_tmp830_ = _tmp829_;
10470 				_tmp831_ = notify_call;
10471 				vala_ccode_function_add_expression (_tmp830_, (ValaCCodeExpression*) _tmp831_);
10472 				_tmp832_ = vala_ccode_base_module_get_ccode (self);
10473 				_tmp833_ = _tmp832_;
10474 				vala_ccode_function_close (_tmp833_);
10475 				_tmp834_ = prop;
10476 				_tmp835_ = vala_property_get_get_accessor (_tmp834_);
10477 				_tmp836_ = _tmp835_;
10478 				_tmp837_ = vala_property_accessor_get_value_type (_tmp836_);
10479 				_tmp838_ = _tmp837_;
10480 				if (vala_data_type_is_disposable (_tmp838_)) {
10481 					ValaGLibValue* old_value = NULL;
10482 					ValaProperty* _tmp839_;
10483 					ValaPropertyAccessor* _tmp840_;
10484 					ValaPropertyAccessor* _tmp841_;
10485 					ValaDataType* _tmp842_;
10486 					ValaDataType* _tmp843_;
10487 					ValaCCodeIdentifier* _tmp844_;
10488 					ValaCCodeIdentifier* _tmp845_;
10489 					ValaGLibValue* _tmp846_;
10490 					ValaGLibValue* _tmp847_;
10491 					gboolean _tmp848_ = FALSE;
10492 					ValaDataType* _tmp849_;
10493 					ValaCCodeFunction* _tmp854_;
10494 					ValaCCodeFunction* _tmp855_;
10495 					ValaGLibValue* _tmp856_;
10496 					ValaCCodeExpression* _tmp857_;
10497 					ValaCCodeExpression* _tmp858_;
10498 					_tmp839_ = prop;
10499 					_tmp840_ = vala_property_get_get_accessor (_tmp839_);
10500 					_tmp841_ = _tmp840_;
10501 					_tmp842_ = vala_property_accessor_get_value_type (_tmp841_);
10502 					_tmp843_ = _tmp842_;
10503 					_tmp844_ = vala_ccode_identifier_new ("old_value");
10504 					_tmp845_ = _tmp844_;
10505 					_tmp846_ = vala_glib_value_new (_tmp843_, (ValaCCodeExpression*) _tmp845_, TRUE);
10506 					_tmp847_ = _tmp846_;
10507 					_vala_ccode_node_unref0 (_tmp845_);
10508 					old_value = _tmp847_;
10509 					_tmp849_ = property_type;
10510 					if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp849_, VALA_TYPE_ARRAY_TYPE)) {
10511 						ValaProperty* _tmp850_;
10512 						_tmp850_ = prop;
10513 						_tmp848_ = vala_get_ccode_array_length ((ValaCodeNode*) _tmp850_);
10514 					} else {
10515 						_tmp848_ = FALSE;
10516 					}
10517 					if (_tmp848_) {
10518 						ValaGLibValue* _tmp851_;
10519 						ValaCCodeIdentifier* _tmp852_;
10520 						ValaCCodeIdentifier* _tmp853_;
10521 						_tmp851_ = old_value;
10522 						_tmp852_ = vala_ccode_identifier_new ("old_value_length");
10523 						_tmp853_ = _tmp852_;
10524 						vala_glib_value_append_array_length_cvalue (_tmp851_, (ValaCCodeExpression*) _tmp853_);
10525 						_vala_ccode_node_unref0 (_tmp853_);
10526 					}
10527 					_tmp854_ = vala_ccode_base_module_get_ccode (self);
10528 					_tmp855_ = _tmp854_;
10529 					_tmp856_ = old_value;
10530 					_tmp857_ = vala_ccode_base_module_destroy_value (self, (ValaTargetValue*) _tmp856_, FALSE);
10531 					_tmp858_ = _tmp857_;
10532 					vala_ccode_function_add_expression (_tmp855_, _tmp858_);
10533 					_vala_ccode_node_unref0 (_tmp858_);
10534 					_vala_target_value_unref0 (old_value);
10535 				}
10536 				_vala_ccode_node_unref0 (get_call);
10537 				_vala_code_node_unref0 (property_type);
10538 			} else {
10539 				ValaBlock* _tmp859_;
10540 				ValaBlock* _tmp860_;
10541 				ValaCCodeFunction* _tmp861_;
10542 				ValaCCodeFunction* _tmp862_;
10543 				ValaCCodeFunctionCall* _tmp863_;
10544 				_tmp859_ = vala_subroutine_get_body ((ValaSubroutine*) acc);
10545 				_tmp860_ = _tmp859_;
10546 				vala_code_node_emit ((ValaCodeNode*) _tmp860_, (ValaCodeGenerator*) self);
10547 				_tmp861_ = vala_ccode_base_module_get_ccode (self);
10548 				_tmp862_ = _tmp861_;
10549 				_tmp863_ = notify_call;
10550 				vala_ccode_function_add_expression (_tmp862_, (ValaCCodeExpression*) _tmp863_);
10551 			}
10552 			_vala_code_node_unref0 (get_accessor);
10553 			_vala_ccode_node_unref0 (notify_call);
10554 		} else {
10555 			ValaBlock* _tmp864_;
10556 			ValaBlock* _tmp865_;
10557 			_tmp864_ = vala_subroutine_get_body ((ValaSubroutine*) acc);
10558 			_tmp865_ = _tmp864_;
10559 			vala_code_node_emit ((ValaCodeNode*) _tmp865_, (ValaCodeGenerator*) self);
10560 		}
10561 		_tmp866_ = vala_ccode_base_module_get_current_method_inner_error (self);
10562 		_tmp867_ = _tmp866_;
10563 		if (_tmp867_) {
10564 			ValaCCodeFunction* _tmp868_;
10565 			ValaCCodeFunction* _tmp869_;
10566 			gint _tmp870_;
10567 			gint _tmp871_;
10568 			gchar* _tmp872_;
10569 			gchar* _tmp873_;
10570 			ValaCCodeConstant* _tmp874_;
10571 			ValaCCodeConstant* _tmp875_;
10572 			ValaCCodeVariableDeclarator* _tmp876_;
10573 			ValaCCodeVariableDeclarator* _tmp877_;
10574 			_tmp868_ = vala_ccode_base_module_get_ccode (self);
10575 			_tmp869_ = _tmp868_;
10576 			_tmp870_ = vala_ccode_base_module_get_current_inner_error_id (self);
10577 			_tmp871_ = _tmp870_;
10578 			_tmp872_ = g_strdup_printf ("_inner_error%d_", _tmp871_);
10579 			_tmp873_ = _tmp872_;
10580 			_tmp874_ = vala_ccode_constant_new ("NULL");
10581 			_tmp875_ = _tmp874_;
10582 			_tmp876_ = vala_ccode_variable_declarator_new_zero (_tmp873_, (ValaCCodeExpression*) _tmp875_, NULL);
10583 			_tmp877_ = _tmp876_;
10584 			vala_ccode_function_add_declaration (_tmp869_, "GError*", (ValaCCodeDeclarator*) _tmp877_, 0);
10585 			_vala_ccode_node_unref0 (_tmp877_);
10586 			_vala_ccode_node_unref0 (_tmp875_);
10587 			_g_free0 (_tmp873_);
10588 		}
10589 		vala_ccode_base_module_pop_function (self);
10590 		_tmp878_ = self->cfile;
10591 		_tmp879_ = function;
10592 		vala_ccode_file_add_function (_tmp878_, _tmp879_);
10593 		_vala_code_node_unref0 (base_type);
10594 		_vala_ccode_node_unref0 (function);
10595 		_g_free0 (cname);
10596 	}
10597 	vala_ccode_base_module_pop_line (self);
10598 	vala_ccode_base_module_pop_context (self);
10599 	_vala_ccode_node_unref0 (cvalueparam);
10600 	_vala_ccode_node_unref0 (cselfparam);
10601 	_vala_code_node_unref0 (this_type);
10602 	_vala_code_node_unref0 (t);
10603 	_vala_code_node_unref0 (prop);
10604 }
10605 
10606 static void
vala_ccode_base_module_real_visit_destructor(ValaCodeVisitor * base,ValaDestructor * d)10607 vala_ccode_base_module_real_visit_destructor (ValaCodeVisitor* base,
10608                                               ValaDestructor* d)
10609 {
10610 	ValaCCodeBaseModule * self;
10611 	gboolean _tmp0_ = FALSE;
10612 	ValaMemberBinding _tmp1_;
10613 	ValaMemberBinding _tmp2_;
10614 	self = (ValaCCodeBaseModule*) base;
10615 	g_return_if_fail (d != NULL);
10616 	_tmp1_ = vala_destructor_get_binding (d);
10617 	_tmp2_ = _tmp1_;
10618 	if (_tmp2_ == VALA_MEMBER_BINDING_STATIC) {
10619 		_tmp0_ = !self->in_plugin;
10620 	} else {
10621 		_tmp0_ = FALSE;
10622 	}
10623 	if (_tmp0_) {
10624 		ValaSourceReference* _tmp3_;
10625 		ValaSourceReference* _tmp4_;
10626 		_tmp3_ = vala_code_node_get_source_reference ((ValaCodeNode*) d);
10627 		_tmp4_ = _tmp3_;
10628 		vala_report_error (_tmp4_, "static destructors are only supported for dynamic types");
10629 		vala_code_node_set_error ((ValaCodeNode*) d, TRUE);
10630 		return;
10631 	}
10632 }
10633 
10634 gint
vala_ccode_base_module_get_block_id(ValaCCodeBaseModule * self,ValaBlock * b)10635 vala_ccode_base_module_get_block_id (ValaCCodeBaseModule* self,
10636                                      ValaBlock* b)
10637 {
10638 	gint _result_ = 0;
10639 	ValaMap* _tmp0_;
10640 	gpointer _tmp1_;
10641 	gint result = 0;
10642 	g_return_val_if_fail (self != NULL, 0);
10643 	g_return_val_if_fail (b != NULL, 0);
10644 	_tmp0_ = self->priv->block_map;
10645 	_tmp1_ = vala_map_get (_tmp0_, b);
10646 	_result_ = (gint) ((gintptr) _tmp1_);
10647 	if (_result_ == 0) {
10648 		gint _tmp2_;
10649 		ValaMap* _tmp3_;
10650 		self->priv->next_block_id = self->priv->next_block_id + 1;
10651 		_tmp2_ = self->priv->next_block_id;
10652 		_result_ = _tmp2_;
10653 		_tmp3_ = self->priv->block_map;
10654 		vala_map_set (_tmp3_, b, (gpointer) ((gintptr) _result_));
10655 	}
10656 	result = _result_;
10657 	return result;
10658 }
10659 
10660 gboolean
vala_ccode_base_module_no_implicit_copy(ValaCCodeBaseModule * self,ValaDataType * type)10661 vala_ccode_base_module_no_implicit_copy (ValaCCodeBaseModule* self,
10662                                          ValaDataType* type)
10663 {
10664 	ValaClass* cl = NULL;
10665 	ValaTypeSymbol* _tmp0_;
10666 	ValaTypeSymbol* _tmp1_;
10667 	gboolean _tmp2_ = FALSE;
10668 	gboolean _tmp3_ = FALSE;
10669 	gboolean result = FALSE;
10670 	g_return_val_if_fail (self != NULL, FALSE);
10671 	g_return_val_if_fail (type != NULL, FALSE);
10672 	_tmp0_ = vala_data_type_get_type_symbol (type);
10673 	_tmp1_ = _tmp0_;
10674 	cl = G_TYPE_CHECK_INSTANCE_TYPE (_tmp1_, VALA_TYPE_CLASS) ? ((ValaClass*) _tmp1_) : NULL;
10675 	if (G_TYPE_CHECK_INSTANCE_TYPE (type, VALA_TYPE_DELEGATE_TYPE)) {
10676 		_tmp3_ = TRUE;
10677 	} else {
10678 		_tmp3_ = G_TYPE_CHECK_INSTANCE_TYPE (type, VALA_TYPE_ARRAY_TYPE);
10679 	}
10680 	if (_tmp3_) {
10681 		_tmp2_ = TRUE;
10682 	} else {
10683 		gboolean _tmp4_ = FALSE;
10684 		gboolean _tmp5_ = FALSE;
10685 		gboolean _tmp6_ = FALSE;
10686 		ValaClass* _tmp7_;
10687 		_tmp7_ = cl;
10688 		if (_tmp7_ != NULL) {
10689 			ValaClass* _tmp8_;
10690 			gboolean _tmp9_;
10691 			gboolean _tmp10_;
10692 			_tmp8_ = cl;
10693 			_tmp9_ = vala_class_get_is_immutable (_tmp8_);
10694 			_tmp10_ = _tmp9_;
10695 			_tmp6_ = !_tmp10_;
10696 		} else {
10697 			_tmp6_ = FALSE;
10698 		}
10699 		if (_tmp6_) {
10700 			ValaClass* _tmp11_;
10701 			_tmp11_ = cl;
10702 			_tmp5_ = !vala_is_reference_counting ((ValaTypeSymbol*) _tmp11_);
10703 		} else {
10704 			_tmp5_ = FALSE;
10705 		}
10706 		if (_tmp5_) {
10707 			ValaClass* _tmp12_;
10708 			_tmp12_ = cl;
10709 			_tmp4_ = !vala_get_ccode_is_gboxed ((ValaTypeSymbol*) _tmp12_);
10710 		} else {
10711 			_tmp4_ = FALSE;
10712 		}
10713 		_tmp2_ = _tmp4_;
10714 	}
10715 	result = _tmp2_;
10716 	return result;
10717 }
10718 
10719 static void
vala_ccode_base_module_capture_parameter(ValaCCodeBaseModule * self,ValaParameter * param,ValaCCodeStruct * data,gint block_id)10720 vala_ccode_base_module_capture_parameter (ValaCCodeBaseModule* self,
10721                                           ValaParameter* param,
10722                                           ValaCCodeStruct* data,
10723                                           gint block_id)
10724 {
10725 	ValaDataType* _tmp0_;
10726 	ValaDataType* _tmp1_;
10727 	ValaCCodeFile* _tmp2_;
10728 	ValaDataType* param_type = NULL;
10729 	ValaDataType* _tmp3_;
10730 	ValaDataType* _tmp4_;
10731 	ValaDataType* _tmp5_;
10732 	ValaDataType* _tmp6_;
10733 	ValaDataType* _tmp7_;
10734 	gboolean _tmp8_;
10735 	gboolean _tmp9_;
10736 	ValaDataType* _tmp13_;
10737 	gchar* _tmp14_;
10738 	gchar* _tmp15_;
10739 	gchar* _tmp16_;
10740 	gchar* _tmp17_;
10741 	ValaDataType* _tmp18_;
10742 	ValaCCodeDeclaratorSuffix* _tmp19_;
10743 	ValaCCodeDeclaratorSuffix* _tmp20_;
10744 	ValaTargetValue* value = NULL;
10745 	ValaTargetValue* _tmp21_;
10746 	ValaArrayType* array_type = NULL;
10747 	ValaDataType* _tmp22_;
10748 	ValaDataType* _tmp23_;
10749 	ValaArrayType* _tmp24_;
10750 	ValaDelegateType* deleg_type = NULL;
10751 	ValaDataType* _tmp25_;
10752 	ValaDataType* _tmp26_;
10753 	ValaDelegateType* _tmp27_;
10754 	gboolean _tmp28_ = FALSE;
10755 	gboolean _tmp29_ = FALSE;
10756 	ValaArrayType* _tmp30_;
10757 	ValaTargetValue* _tmp66_;
10758 	g_return_if_fail (self != NULL);
10759 	g_return_if_fail (param != NULL);
10760 	g_return_if_fail (data != NULL);
10761 	_tmp0_ = vala_variable_get_variable_type ((ValaVariable*) param);
10762 	_tmp1_ = _tmp0_;
10763 	_tmp2_ = self->cfile;
10764 	vala_ccode_base_module_generate_type_declaration (self, _tmp1_, _tmp2_);
10765 	_tmp3_ = vala_variable_get_variable_type ((ValaVariable*) param);
10766 	_tmp4_ = _tmp3_;
10767 	_tmp5_ = vala_data_type_copy (_tmp4_);
10768 	param_type = _tmp5_;
10769 	_tmp6_ = vala_variable_get_variable_type ((ValaVariable*) param);
10770 	_tmp7_ = _tmp6_;
10771 	_tmp8_ = vala_data_type_get_value_owned (_tmp7_);
10772 	_tmp9_ = _tmp8_;
10773 	if (!_tmp9_) {
10774 		ValaDataType* _tmp10_;
10775 		ValaDataType* _tmp11_;
10776 		ValaDataType* _tmp12_;
10777 		_tmp10_ = param_type;
10778 		_tmp11_ = vala_variable_get_variable_type ((ValaVariable*) param);
10779 		_tmp12_ = _tmp11_;
10780 		vala_data_type_set_value_owned (_tmp10_, !vala_ccode_base_module_no_implicit_copy (self, _tmp12_));
10781 	}
10782 	_tmp13_ = param_type;
10783 	_tmp14_ = vala_get_ccode_name ((ValaCodeNode*) _tmp13_);
10784 	_tmp15_ = _tmp14_;
10785 	_tmp16_ = vala_get_ccode_name ((ValaCodeNode*) param);
10786 	_tmp17_ = _tmp16_;
10787 	_tmp18_ = param_type;
10788 	_tmp19_ = vala_ccode_base_module_get_ccode_declarator_suffix (self, _tmp18_);
10789 	_tmp20_ = _tmp19_;
10790 	vala_ccode_struct_add_field (data, _tmp15_, _tmp17_, 0, _tmp20_);
10791 	_vala_ccode_declarator_suffix_unref0 (_tmp20_);
10792 	_g_free0 (_tmp17_);
10793 	_g_free0 (_tmp15_);
10794 	vala_parameter_set_captured (param, FALSE);
10795 	_tmp21_ = vala_code_generator_load_parameter ((ValaCodeGenerator*) self, param, NULL);
10796 	value = _tmp21_;
10797 	_tmp22_ = vala_variable_get_variable_type ((ValaVariable*) param);
10798 	_tmp23_ = _tmp22_;
10799 	_tmp24_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (_tmp23_, VALA_TYPE_ARRAY_TYPE) ? ((ValaArrayType*) _tmp23_) : NULL);
10800 	array_type = _tmp24_;
10801 	_tmp25_ = vala_variable_get_variable_type ((ValaVariable*) param);
10802 	_tmp26_ = _tmp25_;
10803 	_tmp27_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (_tmp26_, VALA_TYPE_DELEGATE_TYPE) ? ((ValaDelegateType*) _tmp26_) : NULL);
10804 	deleg_type = _tmp27_;
10805 	_tmp30_ = array_type;
10806 	if (_tmp30_ != NULL) {
10807 		_tmp29_ = vala_get_ccode_array_length ((ValaCodeNode*) param);
10808 	} else {
10809 		_tmp29_ = FALSE;
10810 	}
10811 	if (_tmp29_) {
10812 		ValaArrayType* _tmp31_;
10813 		gboolean _tmp32_;
10814 		gboolean _tmp33_;
10815 		_tmp31_ = array_type;
10816 		_tmp32_ = vala_array_type_get_fixed_length (G_TYPE_CHECK_INSTANCE_CAST (_tmp31_, VALA_TYPE_ARRAY_TYPE, ValaArrayType));
10817 		_tmp33_ = _tmp32_;
10818 		_tmp28_ = !_tmp33_;
10819 	} else {
10820 		_tmp28_ = FALSE;
10821 	}
10822 	if (_tmp28_) {
10823 		gchar* length_ctype = NULL;
10824 		gchar* _tmp34_;
10825 		_tmp34_ = vala_get_ccode_array_length_type ((ValaCodeNode*) param);
10826 		length_ctype = _tmp34_;
10827 		{
10828 			gint dim = 0;
10829 			dim = 1;
10830 			{
10831 				gboolean _tmp35_ = FALSE;
10832 				_tmp35_ = TRUE;
10833 				while (TRUE) {
10834 					ValaArrayType* _tmp37_;
10835 					gint _tmp38_;
10836 					gint _tmp39_;
10837 					const gchar* _tmp40_;
10838 					gchar* _tmp41_;
10839 					gchar* _tmp42_;
10840 					if (!_tmp35_) {
10841 						gint _tmp36_;
10842 						_tmp36_ = dim;
10843 						dim = _tmp36_ + 1;
10844 					}
10845 					_tmp35_ = FALSE;
10846 					_tmp37_ = array_type;
10847 					_tmp38_ = vala_array_type_get_rank (_tmp37_);
10848 					_tmp39_ = _tmp38_;
10849 					if (!(dim <= _tmp39_)) {
10850 						break;
10851 					}
10852 					_tmp40_ = length_ctype;
10853 					_tmp41_ = vala_ccode_base_module_get_variable_array_length_cname (self, (ValaVariable*) param, dim);
10854 					_tmp42_ = _tmp41_;
10855 					vala_ccode_struct_add_field (data, _tmp40_, _tmp42_, 0, NULL);
10856 					_g_free0 (_tmp42_);
10857 				}
10858 			}
10859 		}
10860 		_g_free0 (length_ctype);
10861 	} else {
10862 		gboolean _tmp43_ = FALSE;
10863 		ValaDelegateType* _tmp44_;
10864 		_tmp44_ = deleg_type;
10865 		if (_tmp44_ != NULL) {
10866 			ValaDelegateType* _tmp45_;
10867 			ValaDelegate* _tmp46_;
10868 			ValaDelegate* _tmp47_;
10869 			gboolean _tmp48_;
10870 			gboolean _tmp49_;
10871 			_tmp45_ = deleg_type;
10872 			_tmp46_ = vala_delegate_type_get_delegate_symbol (_tmp45_);
10873 			_tmp47_ = _tmp46_;
10874 			_tmp48_ = vala_delegate_get_has_target (_tmp47_);
10875 			_tmp49_ = _tmp48_;
10876 			_tmp43_ = _tmp49_;
10877 		} else {
10878 			_tmp43_ = FALSE;
10879 		}
10880 		if (_tmp43_) {
10881 			ValaDataType* _tmp50_;
10882 			gchar* _tmp51_;
10883 			gchar* _tmp52_;
10884 			gchar* _tmp53_;
10885 			gchar* _tmp54_;
10886 			ValaDataType* _tmp55_;
10887 			ValaDataType* _tmp56_;
10888 			_tmp50_ = self->delegate_target_type;
10889 			_tmp51_ = vala_get_ccode_name ((ValaCodeNode*) _tmp50_);
10890 			_tmp52_ = _tmp51_;
10891 			_tmp53_ = vala_get_ccode_delegate_target_name ((ValaVariable*) param);
10892 			_tmp54_ = _tmp53_;
10893 			vala_ccode_struct_add_field (data, _tmp52_, _tmp54_, 0, NULL);
10894 			_g_free0 (_tmp54_);
10895 			_g_free0 (_tmp52_);
10896 			_tmp55_ = vala_variable_get_variable_type ((ValaVariable*) param);
10897 			_tmp56_ = _tmp55_;
10898 			if (vala_data_type_is_disposable (_tmp56_)) {
10899 				ValaDelegateType* _tmp57_;
10900 				gchar* _tmp58_;
10901 				gchar* _tmp59_;
10902 				gchar* _tmp60_;
10903 				gchar* _tmp61_;
10904 				ValaTargetValue* lvalue = NULL;
10905 				ValaTargetValue* _tmp62_;
10906 				ValaTargetValue* _tmp63_;
10907 				ValaTargetValue* _tmp64_;
10908 				ValaCCodeExpression* _tmp65_;
10909 				_tmp57_ = self->delegate_target_destroy_type;
10910 				_tmp58_ = vala_get_ccode_name ((ValaCodeNode*) _tmp57_);
10911 				_tmp59_ = _tmp58_;
10912 				_tmp60_ = vala_get_ccode_delegate_target_destroy_notify_name ((ValaVariable*) param);
10913 				_tmp61_ = _tmp60_;
10914 				vala_ccode_struct_add_field (data, _tmp59_, _tmp61_, 0, NULL);
10915 				_g_free0 (_tmp61_);
10916 				_g_free0 (_tmp59_);
10917 				_tmp62_ = vala_ccode_base_module_get_parameter_cvalue (self, param);
10918 				lvalue = _tmp62_;
10919 				_tmp63_ = value;
10920 				_tmp64_ = lvalue;
10921 				_tmp65_ = vala_ccode_base_module_get_delegate_target_destroy_notify_cvalue (self, _tmp64_);
10922 				_vala_ccode_node_unref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp63_, VALA_TYPE_GLIB_VALUE, ValaGLibValue)->delegate_target_destroy_notify_cvalue);
10923 				G_TYPE_CHECK_INSTANCE_CAST (_tmp63_, VALA_TYPE_GLIB_VALUE, ValaGLibValue)->delegate_target_destroy_notify_cvalue = _tmp65_;
10924 				_vala_target_value_unref0 (lvalue);
10925 			}
10926 		}
10927 	}
10928 	vala_parameter_set_captured (param, TRUE);
10929 	_tmp66_ = value;
10930 	vala_code_generator_store_parameter ((ValaCodeGenerator*) self, param, _tmp66_, TRUE, NULL);
10931 	_vala_code_node_unref0 (deleg_type);
10932 	_vala_code_node_unref0 (array_type);
10933 	_vala_target_value_unref0 (value);
10934 	_vala_code_node_unref0 (param_type);
10935 }
10936 
10937 static void
vala_ccode_base_module_real_visit_block(ValaCodeVisitor * base,ValaBlock * b)10938 vala_ccode_base_module_real_visit_block (ValaCodeVisitor* base,
10939                                          ValaBlock* b)
10940 {
10941 	ValaCCodeBaseModule * self;
10942 	ValaCCodeBaseModuleEmitContext* _tmp0_;
10943 	ValaList* local_vars = NULL;
10944 	ValaList* _tmp1_;
10945 	ValaList* _tmp2_;
10946 	gboolean _tmp3_ = FALSE;
10947 	gboolean _tmp4_ = FALSE;
10948 	ValaCodeNode* _tmp5_;
10949 	ValaCodeNode* _tmp6_;
10950 	gboolean _tmp13_ = FALSE;
10951 	ValaCodeNode* _tmp14_;
10952 	ValaCodeNode* _tmp15_;
10953 	gboolean _tmp59_;
10954 	gboolean _tmp60_;
10955 	gboolean reachable_exit_block = FALSE;
10956 	gboolean _tmp1009_ = FALSE;
10957 	gboolean _tmp1010_ = FALSE;
10958 	ValaCodeNode* _tmp1011_;
10959 	ValaCodeNode* _tmp1012_;
10960 	ValaCCodeBaseModuleEmitContext* _tmp1019_;
10961 	self = (ValaCCodeBaseModule*) base;
10962 	g_return_if_fail (b != NULL);
10963 	_tmp0_ = self->emit_context;
10964 	vala_ccode_base_module_emit_context_push_symbol (_tmp0_, (ValaSymbol*) b);
10965 	_tmp1_ = vala_block_get_local_variables (b);
10966 	_tmp2_ = _vala_iterable_ref0 (_tmp1_);
10967 	local_vars = _tmp2_;
10968 	_tmp5_ = vala_code_node_get_parent_node ((ValaCodeNode*) b);
10969 	_tmp6_ = _tmp5_;
10970 	if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp6_, VALA_TYPE_BLOCK)) {
10971 		_tmp4_ = TRUE;
10972 	} else {
10973 		ValaCodeNode* _tmp7_;
10974 		ValaCodeNode* _tmp8_;
10975 		_tmp7_ = vala_code_node_get_parent_node ((ValaCodeNode*) b);
10976 		_tmp8_ = _tmp7_;
10977 		_tmp4_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp8_, VALA_TYPE_SWITCH_STATEMENT);
10978 	}
10979 	if (_tmp4_) {
10980 		_tmp3_ = TRUE;
10981 	} else {
10982 		ValaCodeNode* _tmp9_;
10983 		ValaCodeNode* _tmp10_;
10984 		_tmp9_ = vala_code_node_get_parent_node ((ValaCodeNode*) b);
10985 		_tmp10_ = _tmp9_;
10986 		_tmp3_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp10_, VALA_TYPE_TRY_STATEMENT);
10987 	}
10988 	if (_tmp3_) {
10989 		ValaCCodeFunction* _tmp11_;
10990 		ValaCCodeFunction* _tmp12_;
10991 		_tmp11_ = vala_ccode_base_module_get_ccode (self);
10992 		_tmp12_ = _tmp11_;
10993 		vala_ccode_function_open_block (_tmp12_);
10994 	}
10995 	_tmp14_ = vala_code_node_get_parent_node ((ValaCodeNode*) b);
10996 	_tmp15_ = _tmp14_;
10997 	if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp15_, VALA_TYPE_TRY_STATEMENT)) {
10998 		ValaCodeNode* _tmp16_;
10999 		ValaCodeNode* _tmp17_;
11000 		ValaBlock* _tmp18_;
11001 		ValaBlock* _tmp19_;
11002 		_tmp16_ = vala_code_node_get_parent_node ((ValaCodeNode*) b);
11003 		_tmp17_ = _tmp16_;
11004 		_tmp18_ = vala_try_statement_get_finally_body (G_TYPE_CHECK_INSTANCE_CAST (_tmp17_, VALA_TYPE_TRY_STATEMENT, ValaTryStatement));
11005 		_tmp19_ = _tmp18_;
11006 		_tmp13_ = b == _tmp19_;
11007 	} else {
11008 		_tmp13_ = FALSE;
11009 	}
11010 	if (_tmp13_) {
11011 		ValaCodeNode* _tmp20_;
11012 		ValaCodeNode* _tmp21_;
11013 		ValaBlock* _tmp22_;
11014 		ValaBlock* _tmp23_;
11015 		gboolean _tmp24_;
11016 		gboolean _tmp25_;
11017 		_tmp20_ = vala_code_node_get_parent_node ((ValaCodeNode*) b);
11018 		_tmp21_ = _tmp20_;
11019 		_tmp22_ = vala_try_statement_get_body (G_TYPE_CHECK_INSTANCE_CAST (_tmp21_, VALA_TYPE_TRY_STATEMENT, ValaTryStatement));
11020 		_tmp23_ = _tmp22_;
11021 		_tmp24_ = vala_code_node_get_tree_can_fail ((ValaCodeNode*) _tmp23_);
11022 		_tmp25_ = _tmp24_;
11023 		if (_tmp25_) {
11024 			if (vala_ccode_base_module_is_in_coroutine (self)) {
11025 				gboolean _tmp26_ = FALSE;
11026 				gint _tmp27_;
11027 				gint _tmp28_;
11028 				_tmp27_ = vala_ccode_base_module_get_current_inner_error_id (self);
11029 				_tmp28_ = _tmp27_;
11030 				if (_tmp28_ > 0) {
11031 					gboolean _tmp29_ = FALSE;
11032 					ValaMap* _tmp30_;
11033 					ValaMethod* _tmp31_;
11034 					ValaMethod* _tmp32_;
11035 					_tmp30_ = self->priv->method_inner_error_var_count;
11036 					_tmp31_ = vala_ccode_base_module_get_current_method (self);
11037 					_tmp32_ = _tmp31_;
11038 					if (!vala_map_contains (_tmp30_, _tmp32_)) {
11039 						_tmp29_ = TRUE;
11040 					} else {
11041 						ValaMap* _tmp33_;
11042 						ValaMethod* _tmp34_;
11043 						ValaMethod* _tmp35_;
11044 						gpointer _tmp36_;
11045 						gint _tmp37_;
11046 						gint _tmp38_;
11047 						_tmp33_ = self->priv->method_inner_error_var_count;
11048 						_tmp34_ = vala_ccode_base_module_get_current_method (self);
11049 						_tmp35_ = _tmp34_;
11050 						_tmp36_ = vala_map_get (_tmp33_, _tmp35_);
11051 						_tmp37_ = vala_ccode_base_module_get_current_inner_error_id (self);
11052 						_tmp38_ = _tmp37_;
11053 						_tmp29_ = ((gint) ((gintptr) _tmp36_)) < _tmp38_;
11054 					}
11055 					_tmp26_ = _tmp29_;
11056 				} else {
11057 					_tmp26_ = FALSE;
11058 				}
11059 				if (_tmp26_) {
11060 					ValaCCodeStruct* _tmp39_;
11061 					gint _tmp40_;
11062 					gint _tmp41_;
11063 					gchar* _tmp42_;
11064 					gchar* _tmp43_;
11065 					ValaMap* _tmp44_;
11066 					ValaMethod* _tmp45_;
11067 					ValaMethod* _tmp46_;
11068 					gint _tmp47_;
11069 					gint _tmp48_;
11070 					_tmp39_ = self->closure_struct;
11071 					_tmp40_ = vala_ccode_base_module_get_current_inner_error_id (self);
11072 					_tmp41_ = _tmp40_;
11073 					_tmp42_ = g_strdup_printf ("_inner_error%d_", _tmp41_);
11074 					_tmp43_ = _tmp42_;
11075 					vala_ccode_struct_add_field (_tmp39_, "GError*", _tmp43_, 0, NULL);
11076 					_g_free0 (_tmp43_);
11077 					_tmp44_ = self->priv->method_inner_error_var_count;
11078 					_tmp45_ = vala_ccode_base_module_get_current_method (self);
11079 					_tmp46_ = _tmp45_;
11080 					_tmp47_ = vala_ccode_base_module_get_current_inner_error_id (self);
11081 					_tmp48_ = _tmp47_;
11082 					vala_map_set (_tmp44_, _tmp46_, (gpointer) ((gintptr) _tmp48_));
11083 				}
11084 			} else {
11085 				ValaCCodeFunction* _tmp49_;
11086 				ValaCCodeFunction* _tmp50_;
11087 				gint _tmp51_;
11088 				gint _tmp52_;
11089 				gchar* _tmp53_;
11090 				gchar* _tmp54_;
11091 				ValaCCodeConstant* _tmp55_;
11092 				ValaCCodeConstant* _tmp56_;
11093 				ValaCCodeVariableDeclarator* _tmp57_;
11094 				ValaCCodeVariableDeclarator* _tmp58_;
11095 				_tmp49_ = vala_ccode_base_module_get_ccode (self);
11096 				_tmp50_ = _tmp49_;
11097 				_tmp51_ = vala_ccode_base_module_get_current_inner_error_id (self);
11098 				_tmp52_ = _tmp51_;
11099 				_tmp53_ = g_strdup_printf ("_inner_error%d_", _tmp52_);
11100 				_tmp54_ = _tmp53_;
11101 				_tmp55_ = vala_ccode_constant_new ("NULL");
11102 				_tmp56_ = _tmp55_;
11103 				_tmp57_ = vala_ccode_variable_declarator_new_zero (_tmp54_, (ValaCCodeExpression*) _tmp56_, NULL);
11104 				_tmp58_ = _tmp57_;
11105 				vala_ccode_function_add_declaration (_tmp50_, "GError*", (ValaCCodeDeclarator*) _tmp58_, 0);
11106 				_vala_ccode_node_unref0 (_tmp58_);
11107 				_vala_ccode_node_unref0 (_tmp56_);
11108 				_g_free0 (_tmp54_);
11109 			}
11110 		}
11111 	}
11112 	_tmp59_ = vala_block_get_captured (b);
11113 	_tmp60_ = _tmp59_;
11114 	if (_tmp60_) {
11115 		ValaBlock* parent_block = NULL;
11116 		ValaSymbol* _tmp61_;
11117 		ValaSymbol* _tmp62_;
11118 		ValaBlock* _tmp63_;
11119 		ValaBlock* _tmp64_;
11120 		gint block_id = 0;
11121 		gchar* struct_name = NULL;
11122 		gchar* _tmp65_;
11123 		ValaCCodeStruct* data = NULL;
11124 		const gchar* _tmp66_;
11125 		gchar* _tmp67_;
11126 		gchar* _tmp68_;
11127 		ValaCCodeStruct* _tmp69_;
11128 		ValaCCodeStruct* _tmp70_;
11129 		ValaCCodeStruct* _tmp71_;
11130 		ValaBlock* _tmp72_;
11131 		ValaCCodeFunctionCall* data_alloc = NULL;
11132 		ValaCCodeIdentifier* _tmp237_;
11133 		ValaCCodeIdentifier* _tmp238_;
11134 		ValaCCodeFunctionCall* _tmp239_;
11135 		ValaCCodeFunctionCall* _tmp240_;
11136 		ValaCCodeFunctionCall* _tmp241_;
11137 		const gchar* _tmp242_;
11138 		ValaCCodeIdentifier* _tmp243_;
11139 		ValaCCodeIdentifier* _tmp244_;
11140 		ValaCCodeFunction* _tmp260_;
11141 		ValaCCodeFunction* _tmp261_;
11142 		gchar* _tmp262_;
11143 		gchar* _tmp263_;
11144 		ValaCCodeExpression* _tmp264_;
11145 		ValaCCodeExpression* _tmp265_;
11146 		ValaCCodeFunctionCall* _tmp266_;
11147 		ValaCCodeFunction* _tmp267_;
11148 		ValaCCodeFunction* _tmp268_;
11149 		gchar* _tmp269_;
11150 		gchar* _tmp270_;
11151 		ValaCCodeExpression* _tmp271_;
11152 		ValaCCodeExpression* _tmp272_;
11153 		ValaCCodeMemberAccess* _tmp273_;
11154 		ValaCCodeMemberAccess* _tmp274_;
11155 		ValaCCodeIdentifier* _tmp275_;
11156 		ValaCCodeIdentifier* _tmp276_;
11157 		ValaBlock* _tmp277_;
11158 		ValaSymbol* _tmp380_;
11159 		ValaSymbol* _tmp381_;
11160 		ValaCCodeTypeDefinition* _typedef_ = NULL;
11161 		const gchar* _tmp488_;
11162 		gchar* _tmp489_;
11163 		gchar* _tmp490_;
11164 		const gchar* _tmp491_;
11165 		ValaCCodeVariableDeclarator* _tmp492_;
11166 		ValaCCodeVariableDeclarator* _tmp493_;
11167 		ValaCCodeTypeDefinition* _tmp494_;
11168 		ValaCCodeTypeDefinition* _tmp495_;
11169 		ValaCCodeFile* _tmp496_;
11170 		ValaCCodeTypeDefinition* _tmp497_;
11171 		ValaCCodeFile* _tmp498_;
11172 		ValaCCodeStruct* _tmp499_;
11173 		ValaCCodeFunction* ref_fun = NULL;
11174 		gchar* _tmp500_;
11175 		gchar* _tmp501_;
11176 		const gchar* _tmp502_;
11177 		gchar* _tmp503_;
11178 		gchar* _tmp504_;
11179 		ValaCCodeFunction* _tmp505_;
11180 		ValaCCodeFunction* _tmp506_;
11181 		ValaCCodeFunction* _tmp507_;
11182 		gchar* _tmp508_;
11183 		gchar* _tmp509_;
11184 		const gchar* _tmp510_;
11185 		gchar* _tmp511_;
11186 		gchar* _tmp512_;
11187 		ValaCCodeParameter* _tmp513_;
11188 		ValaCCodeParameter* _tmp514_;
11189 		ValaCCodeFunction* _tmp515_;
11190 		ValaCCodeFunction* _tmp516_;
11191 		ValaCCodeFunctionCall* ccall = NULL;
11192 		ValaCCodeIdentifier* _tmp517_;
11193 		ValaCCodeIdentifier* _tmp518_;
11194 		ValaCCodeFunctionCall* _tmp519_;
11195 		ValaCCodeFunctionCall* _tmp520_;
11196 		ValaCCodeFunctionCall* _tmp521_;
11197 		gchar* _tmp522_;
11198 		gchar* _tmp523_;
11199 		ValaCCodeIdentifier* _tmp524_;
11200 		ValaCCodeIdentifier* _tmp525_;
11201 		ValaCCodeMemberAccess* _tmp526_;
11202 		ValaCCodeMemberAccess* _tmp527_;
11203 		ValaCCodeUnaryExpression* _tmp528_;
11204 		ValaCCodeUnaryExpression* _tmp529_;
11205 		ValaCCodeFunction* _tmp530_;
11206 		ValaCCodeFunction* _tmp531_;
11207 		ValaCCodeFunctionCall* _tmp532_;
11208 		ValaCCodeFunction* _tmp533_;
11209 		ValaCCodeFunction* _tmp534_;
11210 		gchar* _tmp535_;
11211 		gchar* _tmp536_;
11212 		ValaCCodeIdentifier* _tmp537_;
11213 		ValaCCodeIdentifier* _tmp538_;
11214 		ValaCCodeFile* _tmp539_;
11215 		ValaCCodeFunction* _tmp540_;
11216 		ValaCCodeFile* _tmp541_;
11217 		ValaCCodeFunction* _tmp542_;
11218 		ValaCCodeFunction* unref_fun = NULL;
11219 		gchar* _tmp543_;
11220 		gchar* _tmp544_;
11221 		ValaCCodeFunction* _tmp545_;
11222 		ValaCCodeFunction* _tmp546_;
11223 		ValaCCodeFunction* _tmp547_;
11224 		ValaCCodeParameter* _tmp548_;
11225 		ValaCCodeParameter* _tmp549_;
11226 		ValaCCodeFunction* _tmp550_;
11227 		ValaCCodeFunction* _tmp551_;
11228 		ValaCCodeFunction* _tmp552_;
11229 		ValaCCodeFunction* _tmp553_;
11230 		const gchar* _tmp554_;
11231 		gchar* _tmp555_;
11232 		gchar* _tmp556_;
11233 		gchar* _tmp557_;
11234 		gchar* _tmp558_;
11235 		ValaCCodeIdentifier* _tmp559_;
11236 		ValaCCodeIdentifier* _tmp560_;
11237 		const gchar* _tmp561_;
11238 		gchar* _tmp562_;
11239 		gchar* _tmp563_;
11240 		ValaCCodeCastExpression* _tmp564_;
11241 		ValaCCodeCastExpression* _tmp565_;
11242 		ValaCCodeVariableDeclarator* _tmp566_;
11243 		ValaCCodeVariableDeclarator* _tmp567_;
11244 		ValaCCodeIdentifier* _tmp568_;
11245 		ValaCCodeIdentifier* _tmp569_;
11246 		ValaCCodeFunctionCall* _tmp570_;
11247 		ValaCCodeFunctionCall* _tmp571_;
11248 		gchar* _tmp572_;
11249 		gchar* _tmp573_;
11250 		ValaCCodeIdentifier* _tmp574_;
11251 		ValaCCodeIdentifier* _tmp575_;
11252 		ValaCCodeMemberAccess* _tmp576_;
11253 		ValaCCodeMemberAccess* _tmp577_;
11254 		ValaCCodeUnaryExpression* _tmp578_;
11255 		ValaCCodeUnaryExpression* _tmp579_;
11256 		ValaCCodeFunction* _tmp580_;
11257 		ValaCCodeFunction* _tmp581_;
11258 		ValaCCodeFunctionCall* _tmp582_;
11259 		ValaCCodeExpression* outer_block = NULL;
11260 		gchar* _tmp583_;
11261 		gchar* _tmp584_;
11262 		ValaCCodeIdentifier* _tmp585_;
11263 		ValaCCodeExpression* _tmp586_;
11264 		ValaBlock* parent_closure_block = NULL;
11265 		ValaDataType* this_type = NULL;
11266 		ValaDataType* _tmp597_;
11267 		ValaDataType* _tmp598_;
11268 		ValaDataType* _tmp599_;
11269 		ValaMethod* _tmp614_;
11270 		ValaMethod* _tmp615_;
11271 		ValaSymbol* _tmp715_;
11272 		ValaSymbol* _tmp716_;
11273 		ValaBlock* _tmp787_;
11274 		ValaCCodeFunctionCall* data_free = NULL;
11275 		ValaCCodeIdentifier* _tmp837_;
11276 		ValaCCodeIdentifier* _tmp838_;
11277 		ValaCCodeFunctionCall* _tmp839_;
11278 		ValaCCodeFunctionCall* _tmp840_;
11279 		ValaCCodeFunctionCall* _tmp841_;
11280 		const gchar* _tmp842_;
11281 		ValaCCodeIdentifier* _tmp843_;
11282 		ValaCCodeIdentifier* _tmp844_;
11283 		ValaCCodeFunctionCall* _tmp845_;
11284 		gchar* _tmp846_;
11285 		gchar* _tmp847_;
11286 		ValaCCodeIdentifier* _tmp848_;
11287 		ValaCCodeIdentifier* _tmp849_;
11288 		ValaCCodeFunction* _tmp850_;
11289 		ValaCCodeFunction* _tmp851_;
11290 		ValaCCodeFunctionCall* _tmp852_;
11291 		ValaCCodeFunction* _tmp853_;
11292 		ValaCCodeFunction* _tmp854_;
11293 		ValaCCodeFile* _tmp855_;
11294 		ValaCCodeFunction* _tmp856_;
11295 		ValaCCodeFile* _tmp857_;
11296 		ValaCCodeFunction* _tmp858_;
11297 		_tmp61_ = vala_symbol_get_parent_symbol ((ValaSymbol*) b);
11298 		_tmp62_ = _tmp61_;
11299 		_tmp63_ = vala_ccode_base_module_next_closure_block (self, _tmp62_);
11300 		_tmp64_ = _vala_code_node_ref0 (_tmp63_);
11301 		parent_block = _tmp64_;
11302 		block_id = vala_ccode_base_module_get_block_id (self, b);
11303 		_tmp65_ = g_strdup_printf ("Block%dData", block_id);
11304 		struct_name = _tmp65_;
11305 		_tmp66_ = struct_name;
11306 		_tmp67_ = g_strconcat ("_", _tmp66_, NULL);
11307 		_tmp68_ = _tmp67_;
11308 		_tmp69_ = vala_ccode_struct_new (_tmp68_);
11309 		_tmp70_ = _tmp69_;
11310 		_g_free0 (_tmp68_);
11311 		data = _tmp70_;
11312 		_tmp71_ = data;
11313 		vala_ccode_struct_add_field (_tmp71_, "int", "_ref_count_", 0, NULL);
11314 		_tmp72_ = parent_block;
11315 		if (_tmp72_ != NULL) {
11316 			gint parent_block_id = 0;
11317 			ValaBlock* _tmp73_;
11318 			ValaCCodeStruct* _tmp74_;
11319 			gchar* _tmp75_;
11320 			gchar* _tmp76_;
11321 			gchar* _tmp77_;
11322 			gchar* _tmp78_;
11323 			_tmp73_ = parent_block;
11324 			parent_block_id = vala_ccode_base_module_get_block_id (self, _tmp73_);
11325 			_tmp74_ = data;
11326 			_tmp75_ = g_strdup_printf ("Block%dData *", parent_block_id);
11327 			_tmp76_ = _tmp75_;
11328 			_tmp77_ = g_strdup_printf ("_data%d_", parent_block_id);
11329 			_tmp78_ = _tmp77_;
11330 			vala_ccode_struct_add_field (_tmp74_, _tmp76_, _tmp78_, 0, NULL);
11331 			_g_free0 (_tmp78_);
11332 			_g_free0 (_tmp76_);
11333 		} else {
11334 			ValaDataType* this_type = NULL;
11335 			ValaDataType* _tmp79_;
11336 			ValaDataType* _tmp80_;
11337 			ValaMethod* _tmp85_;
11338 			ValaMethod* _tmp86_;
11339 			_tmp79_ = vala_ccode_base_module_get_this_type (self);
11340 			this_type = _tmp79_;
11341 			_tmp80_ = this_type;
11342 			if (_tmp80_ != NULL) {
11343 				ValaCCodeStruct* _tmp81_;
11344 				ValaDataType* _tmp82_;
11345 				gchar* _tmp83_;
11346 				gchar* _tmp84_;
11347 				_tmp81_ = data;
11348 				_tmp82_ = this_type;
11349 				_tmp83_ = vala_get_ccode_name ((ValaCodeNode*) _tmp82_);
11350 				_tmp84_ = _tmp83_;
11351 				vala_ccode_struct_add_field (_tmp81_, _tmp84_, "self", 0, NULL);
11352 				_g_free0 (_tmp84_);
11353 			}
11354 			_tmp85_ = vala_ccode_base_module_get_current_method (self);
11355 			_tmp86_ = _tmp85_;
11356 			if (_tmp86_ != NULL) {
11357 				{
11358 					ValaList* _type_param_list = NULL;
11359 					ValaMethod* _tmp87_;
11360 					ValaMethod* _tmp88_;
11361 					ValaList* _tmp89_;
11362 					ValaList* _tmp90_;
11363 					gint _type_param_size = 0;
11364 					ValaList* _tmp91_;
11365 					gint _tmp92_;
11366 					gint _tmp93_;
11367 					gint _type_param_index = 0;
11368 					_tmp87_ = vala_ccode_base_module_get_current_method (self);
11369 					_tmp88_ = _tmp87_;
11370 					_tmp89_ = vala_method_get_type_parameters (_tmp88_);
11371 					_tmp90_ = _vala_iterable_ref0 (_tmp89_);
11372 					_type_param_list = _tmp90_;
11373 					_tmp91_ = _type_param_list;
11374 					_tmp92_ = vala_collection_get_size ((ValaCollection*) _tmp91_);
11375 					_tmp93_ = _tmp92_;
11376 					_type_param_size = _tmp93_;
11377 					_type_param_index = -1;
11378 					while (TRUE) {
11379 						gint _tmp94_;
11380 						gint _tmp95_;
11381 						ValaTypeParameter* type_param = NULL;
11382 						ValaList* _tmp96_;
11383 						gpointer _tmp97_;
11384 						gchar* func_name = NULL;
11385 						ValaTypeParameter* _tmp98_;
11386 						const gchar* _tmp99_;
11387 						const gchar* _tmp100_;
11388 						gchar* _tmp101_;
11389 						gchar* _tmp102_;
11390 						gchar* _tmp103_;
11391 						ValaCCodeStruct* _tmp104_;
11392 						const gchar* _tmp105_;
11393 						ValaTypeParameter* _tmp106_;
11394 						const gchar* _tmp107_;
11395 						const gchar* _tmp108_;
11396 						gchar* _tmp109_;
11397 						gchar* _tmp110_;
11398 						gchar* _tmp111_;
11399 						ValaCCodeStruct* _tmp112_;
11400 						const gchar* _tmp113_;
11401 						ValaTypeParameter* _tmp114_;
11402 						const gchar* _tmp115_;
11403 						const gchar* _tmp116_;
11404 						gchar* _tmp117_;
11405 						gchar* _tmp118_;
11406 						gchar* _tmp119_;
11407 						ValaCCodeStruct* _tmp120_;
11408 						const gchar* _tmp121_;
11409 						_type_param_index = _type_param_index + 1;
11410 						_tmp94_ = _type_param_index;
11411 						_tmp95_ = _type_param_size;
11412 						if (!(_tmp94_ < _tmp95_)) {
11413 							break;
11414 						}
11415 						_tmp96_ = _type_param_list;
11416 						_tmp97_ = vala_list_get (_tmp96_, _type_param_index);
11417 						type_param = (ValaTypeParameter*) _tmp97_;
11418 						_tmp98_ = type_param;
11419 						_tmp99_ = vala_symbol_get_name ((ValaSymbol*) _tmp98_);
11420 						_tmp100_ = _tmp99_;
11421 						_tmp101_ = g_ascii_strdown (_tmp100_, (gssize) -1);
11422 						_tmp102_ = _tmp101_;
11423 						_tmp103_ = g_strdup_printf ("%s_type", _tmp102_);
11424 						_g_free0 (func_name);
11425 						func_name = _tmp103_;
11426 						_g_free0 (_tmp102_);
11427 						_tmp104_ = data;
11428 						_tmp105_ = func_name;
11429 						vala_ccode_struct_add_field (_tmp104_, "GType", _tmp105_, 0, NULL);
11430 						_tmp106_ = type_param;
11431 						_tmp107_ = vala_symbol_get_name ((ValaSymbol*) _tmp106_);
11432 						_tmp108_ = _tmp107_;
11433 						_tmp109_ = g_ascii_strdown (_tmp108_, (gssize) -1);
11434 						_tmp110_ = _tmp109_;
11435 						_tmp111_ = g_strdup_printf ("%s_dup_func", _tmp110_);
11436 						_g_free0 (func_name);
11437 						func_name = _tmp111_;
11438 						_g_free0 (_tmp110_);
11439 						_tmp112_ = data;
11440 						_tmp113_ = func_name;
11441 						vala_ccode_struct_add_field (_tmp112_, "GBoxedCopyFunc", _tmp113_, 0, NULL);
11442 						_tmp114_ = type_param;
11443 						_tmp115_ = vala_symbol_get_name ((ValaSymbol*) _tmp114_);
11444 						_tmp116_ = _tmp115_;
11445 						_tmp117_ = g_ascii_strdown (_tmp116_, (gssize) -1);
11446 						_tmp118_ = _tmp117_;
11447 						_tmp119_ = g_strdup_printf ("%s_destroy_func", _tmp118_);
11448 						_g_free0 (func_name);
11449 						func_name = _tmp119_;
11450 						_g_free0 (_tmp118_);
11451 						_tmp120_ = data;
11452 						_tmp121_ = func_name;
11453 						vala_ccode_struct_add_field (_tmp120_, "GDestroyNotify", _tmp121_, 0, NULL);
11454 						_g_free0 (func_name);
11455 						_vala_code_node_unref0 (type_param);
11456 					}
11457 					_vala_iterable_unref0 (_type_param_list);
11458 				}
11459 			}
11460 		}
11461 		{
11462 			ValaList* _local_list = NULL;
11463 			ValaList* _tmp122_;
11464 			ValaList* _tmp123_;
11465 			gint _local_size = 0;
11466 			ValaList* _tmp124_;
11467 			gint _tmp125_;
11468 			gint _tmp126_;
11469 			gint _local_index = 0;
11470 			_tmp122_ = local_vars;
11471 			_tmp123_ = _vala_iterable_ref0 (_tmp122_);
11472 			_local_list = _tmp123_;
11473 			_tmp124_ = _local_list;
11474 			_tmp125_ = vala_collection_get_size ((ValaCollection*) _tmp124_);
11475 			_tmp126_ = _tmp125_;
11476 			_local_size = _tmp126_;
11477 			_local_index = -1;
11478 			while (TRUE) {
11479 				gint _tmp127_;
11480 				gint _tmp128_;
11481 				ValaLocalVariable* local = NULL;
11482 				ValaList* _tmp129_;
11483 				gpointer _tmp130_;
11484 				ValaLocalVariable* _tmp131_;
11485 				gboolean _tmp132_;
11486 				gboolean _tmp133_;
11487 				_local_index = _local_index + 1;
11488 				_tmp127_ = _local_index;
11489 				_tmp128_ = _local_size;
11490 				if (!(_tmp127_ < _tmp128_)) {
11491 					break;
11492 				}
11493 				_tmp129_ = _local_list;
11494 				_tmp130_ = vala_list_get (_tmp129_, _local_index);
11495 				local = (ValaLocalVariable*) _tmp130_;
11496 				_tmp131_ = local;
11497 				_tmp132_ = vala_local_variable_get_captured (_tmp131_);
11498 				_tmp133_ = _tmp132_;
11499 				if (_tmp133_) {
11500 					ValaLocalVariable* _tmp134_;
11501 					ValaDataType* _tmp135_;
11502 					ValaDataType* _tmp136_;
11503 					ValaCCodeFile* _tmp137_;
11504 					ValaCCodeStruct* _tmp138_;
11505 					ValaLocalVariable* _tmp139_;
11506 					ValaDataType* _tmp140_;
11507 					ValaDataType* _tmp141_;
11508 					gchar* _tmp142_;
11509 					gchar* _tmp143_;
11510 					ValaLocalVariable* _tmp144_;
11511 					gchar* _tmp145_;
11512 					gchar* _tmp146_;
11513 					ValaLocalVariable* _tmp147_;
11514 					ValaDataType* _tmp148_;
11515 					ValaDataType* _tmp149_;
11516 					ValaCCodeDeclaratorSuffix* _tmp150_;
11517 					ValaCCodeDeclaratorSuffix* _tmp151_;
11518 					gboolean _tmp152_ = FALSE;
11519 					ValaLocalVariable* _tmp153_;
11520 					ValaDataType* _tmp154_;
11521 					ValaDataType* _tmp155_;
11522 					_tmp134_ = local;
11523 					_tmp135_ = vala_variable_get_variable_type ((ValaVariable*) _tmp134_);
11524 					_tmp136_ = _tmp135_;
11525 					_tmp137_ = self->cfile;
11526 					vala_ccode_base_module_generate_type_declaration (self, _tmp136_, _tmp137_);
11527 					_tmp138_ = data;
11528 					_tmp139_ = local;
11529 					_tmp140_ = vala_variable_get_variable_type ((ValaVariable*) _tmp139_);
11530 					_tmp141_ = _tmp140_;
11531 					_tmp142_ = vala_get_ccode_name ((ValaCodeNode*) _tmp141_);
11532 					_tmp143_ = _tmp142_;
11533 					_tmp144_ = local;
11534 					_tmp145_ = vala_ccode_base_module_get_local_cname (self, _tmp144_);
11535 					_tmp146_ = _tmp145_;
11536 					_tmp147_ = local;
11537 					_tmp148_ = vala_variable_get_variable_type ((ValaVariable*) _tmp147_);
11538 					_tmp149_ = _tmp148_;
11539 					_tmp150_ = vala_ccode_base_module_get_ccode_declarator_suffix (self, _tmp149_);
11540 					_tmp151_ = _tmp150_;
11541 					vala_ccode_struct_add_field (_tmp138_, _tmp143_, _tmp146_, 0, _tmp151_);
11542 					_vala_ccode_declarator_suffix_unref0 (_tmp151_);
11543 					_g_free0 (_tmp146_);
11544 					_g_free0 (_tmp143_);
11545 					_tmp153_ = local;
11546 					_tmp154_ = vala_variable_get_variable_type ((ValaVariable*) _tmp153_);
11547 					_tmp155_ = _tmp154_;
11548 					if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp155_, VALA_TYPE_ARRAY_TYPE)) {
11549 						ValaLocalVariable* _tmp156_;
11550 						ValaDataType* _tmp157_;
11551 						ValaDataType* _tmp158_;
11552 						gboolean _tmp159_;
11553 						gboolean _tmp160_;
11554 						_tmp156_ = local;
11555 						_tmp157_ = vala_variable_get_variable_type ((ValaVariable*) _tmp156_);
11556 						_tmp158_ = _tmp157_;
11557 						_tmp159_ = vala_array_type_get_fixed_length (G_TYPE_CHECK_INSTANCE_CAST (_tmp158_, VALA_TYPE_ARRAY_TYPE, ValaArrayType));
11558 						_tmp160_ = _tmp159_;
11559 						_tmp152_ = !_tmp160_;
11560 					} else {
11561 						_tmp152_ = FALSE;
11562 					}
11563 					if (_tmp152_) {
11564 						ValaArrayType* array_type = NULL;
11565 						ValaLocalVariable* _tmp161_;
11566 						ValaDataType* _tmp162_;
11567 						ValaDataType* _tmp163_;
11568 						ValaArrayType* _tmp164_;
11569 						gchar* length_ctype = NULL;
11570 						ValaArrayType* _tmp165_;
11571 						gchar* _tmp166_;
11572 						ValaCCodeStruct* _tmp179_;
11573 						const gchar* _tmp180_;
11574 						ValaLocalVariable* _tmp181_;
11575 						gchar* _tmp182_;
11576 						gchar* _tmp183_;
11577 						gchar* _tmp184_;
11578 						gchar* _tmp185_;
11579 						_tmp161_ = local;
11580 						_tmp162_ = vala_variable_get_variable_type ((ValaVariable*) _tmp161_);
11581 						_tmp163_ = _tmp162_;
11582 						_tmp164_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp163_, VALA_TYPE_ARRAY_TYPE, ValaArrayType));
11583 						array_type = _tmp164_;
11584 						_tmp165_ = array_type;
11585 						_tmp166_ = vala_get_ccode_array_length_type ((ValaCodeNode*) _tmp165_);
11586 						length_ctype = _tmp166_;
11587 						{
11588 							gint dim = 0;
11589 							dim = 1;
11590 							{
11591 								gboolean _tmp167_ = FALSE;
11592 								_tmp167_ = TRUE;
11593 								while (TRUE) {
11594 									ValaArrayType* _tmp169_;
11595 									gint _tmp170_;
11596 									gint _tmp171_;
11597 									ValaCCodeStruct* _tmp172_;
11598 									const gchar* _tmp173_;
11599 									ValaLocalVariable* _tmp174_;
11600 									gchar* _tmp175_;
11601 									gchar* _tmp176_;
11602 									gchar* _tmp177_;
11603 									gchar* _tmp178_;
11604 									if (!_tmp167_) {
11605 										gint _tmp168_;
11606 										_tmp168_ = dim;
11607 										dim = _tmp168_ + 1;
11608 									}
11609 									_tmp167_ = FALSE;
11610 									_tmp169_ = array_type;
11611 									_tmp170_ = vala_array_type_get_rank (_tmp169_);
11612 									_tmp171_ = _tmp170_;
11613 									if (!(dim <= _tmp171_)) {
11614 										break;
11615 									}
11616 									_tmp172_ = data;
11617 									_tmp173_ = length_ctype;
11618 									_tmp174_ = local;
11619 									_tmp175_ = vala_ccode_base_module_get_local_cname (self, _tmp174_);
11620 									_tmp176_ = _tmp175_;
11621 									_tmp177_ = vala_ccode_base_module_get_array_length_cname (self, _tmp176_, dim);
11622 									_tmp178_ = _tmp177_;
11623 									vala_ccode_struct_add_field (_tmp172_, _tmp173_, _tmp178_, 0, NULL);
11624 									_g_free0 (_tmp178_);
11625 									_g_free0 (_tmp176_);
11626 								}
11627 							}
11628 						}
11629 						_tmp179_ = data;
11630 						_tmp180_ = length_ctype;
11631 						_tmp181_ = local;
11632 						_tmp182_ = vala_ccode_base_module_get_local_cname (self, _tmp181_);
11633 						_tmp183_ = _tmp182_;
11634 						_tmp184_ = vala_ccode_base_module_get_array_size_cname (self, _tmp183_);
11635 						_tmp185_ = _tmp184_;
11636 						vala_ccode_struct_add_field (_tmp179_, _tmp180_, _tmp185_, 0, NULL);
11637 						_g_free0 (_tmp185_);
11638 						_g_free0 (_tmp183_);
11639 						_g_free0 (length_ctype);
11640 						_vala_code_node_unref0 (array_type);
11641 					} else {
11642 						gboolean _tmp186_ = FALSE;
11643 						ValaLocalVariable* _tmp187_;
11644 						ValaDataType* _tmp188_;
11645 						ValaDataType* _tmp189_;
11646 						_tmp187_ = local;
11647 						_tmp188_ = vala_variable_get_variable_type ((ValaVariable*) _tmp187_);
11648 						_tmp189_ = _tmp188_;
11649 						if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp189_, VALA_TYPE_DELEGATE_TYPE)) {
11650 							ValaLocalVariable* _tmp190_;
11651 							ValaDataType* _tmp191_;
11652 							ValaDataType* _tmp192_;
11653 							ValaDelegate* _tmp193_;
11654 							ValaDelegate* _tmp194_;
11655 							gboolean _tmp195_;
11656 							gboolean _tmp196_;
11657 							_tmp190_ = local;
11658 							_tmp191_ = vala_variable_get_variable_type ((ValaVariable*) _tmp190_);
11659 							_tmp192_ = _tmp191_;
11660 							_tmp193_ = vala_delegate_type_get_delegate_symbol (G_TYPE_CHECK_INSTANCE_CAST (_tmp192_, VALA_TYPE_DELEGATE_TYPE, ValaDelegateType));
11661 							_tmp194_ = _tmp193_;
11662 							_tmp195_ = vala_delegate_get_has_target (_tmp194_);
11663 							_tmp196_ = _tmp195_;
11664 							_tmp186_ = _tmp196_;
11665 						} else {
11666 							_tmp186_ = FALSE;
11667 						}
11668 						if (_tmp186_) {
11669 							ValaCCodeStruct* _tmp197_;
11670 							ValaDataType* _tmp198_;
11671 							gchar* _tmp199_;
11672 							gchar* _tmp200_;
11673 							ValaLocalVariable* _tmp201_;
11674 							gchar* _tmp202_;
11675 							gchar* _tmp203_;
11676 							gchar* _tmp204_;
11677 							gchar* _tmp205_;
11678 							ValaLocalVariable* _tmp206_;
11679 							ValaDataType* _tmp207_;
11680 							ValaDataType* _tmp208_;
11681 							_tmp197_ = data;
11682 							_tmp198_ = self->delegate_target_type;
11683 							_tmp199_ = vala_get_ccode_name ((ValaCodeNode*) _tmp198_);
11684 							_tmp200_ = _tmp199_;
11685 							_tmp201_ = local;
11686 							_tmp202_ = vala_ccode_base_module_get_local_cname (self, _tmp201_);
11687 							_tmp203_ = _tmp202_;
11688 							_tmp204_ = vala_ccode_base_module_get_delegate_target_cname (self, _tmp203_);
11689 							_tmp205_ = _tmp204_;
11690 							vala_ccode_struct_add_field (_tmp197_, _tmp200_, _tmp205_, 0, NULL);
11691 							_g_free0 (_tmp205_);
11692 							_g_free0 (_tmp203_);
11693 							_g_free0 (_tmp200_);
11694 							_tmp206_ = local;
11695 							_tmp207_ = vala_variable_get_variable_type ((ValaVariable*) _tmp206_);
11696 							_tmp208_ = _tmp207_;
11697 							if (vala_data_type_is_disposable (_tmp208_)) {
11698 								ValaCCodeStruct* _tmp209_;
11699 								ValaDelegateType* _tmp210_;
11700 								gchar* _tmp211_;
11701 								gchar* _tmp212_;
11702 								ValaLocalVariable* _tmp213_;
11703 								gchar* _tmp214_;
11704 								gchar* _tmp215_;
11705 								gchar* _tmp216_;
11706 								gchar* _tmp217_;
11707 								_tmp209_ = data;
11708 								_tmp210_ = self->delegate_target_destroy_type;
11709 								_tmp211_ = vala_get_ccode_name ((ValaCodeNode*) _tmp210_);
11710 								_tmp212_ = _tmp211_;
11711 								_tmp213_ = local;
11712 								_tmp214_ = vala_ccode_base_module_get_local_cname (self, _tmp213_);
11713 								_tmp215_ = _tmp214_;
11714 								_tmp216_ = vala_ccode_base_module_get_delegate_target_destroy_notify_cname (self, _tmp215_);
11715 								_tmp217_ = _tmp216_;
11716 								vala_ccode_struct_add_field (_tmp209_, _tmp212_, _tmp217_, 0, NULL);
11717 								_g_free0 (_tmp217_);
11718 								_g_free0 (_tmp215_);
11719 								_g_free0 (_tmp212_);
11720 							}
11721 						} else {
11722 							ValaLocalVariable* _tmp218_;
11723 							ValaDataType* _tmp219_;
11724 							ValaDataType* _tmp220_;
11725 							ValaTypeSymbol* _tmp221_;
11726 							ValaTypeSymbol* _tmp222_;
11727 							ValaCodeContext* _tmp223_;
11728 							ValaSemanticAnalyzer* _tmp224_;
11729 							ValaSemanticAnalyzer* _tmp225_;
11730 							ValaDataType* _tmp226_;
11731 							ValaTypeSymbol* _tmp227_;
11732 							ValaTypeSymbol* _tmp228_;
11733 							_tmp218_ = local;
11734 							_tmp219_ = vala_variable_get_variable_type ((ValaVariable*) _tmp218_);
11735 							_tmp220_ = _tmp219_;
11736 							_tmp221_ = vala_data_type_get_type_symbol (_tmp220_);
11737 							_tmp222_ = _tmp221_;
11738 							_tmp223_ = self->priv->_context;
11739 							_tmp224_ = vala_code_context_get_analyzer (_tmp223_);
11740 							_tmp225_ = _tmp224_;
11741 							_tmp226_ = _tmp225_->va_list_type;
11742 							_tmp227_ = vala_data_type_get_type_symbol (_tmp226_);
11743 							_tmp228_ = _tmp227_;
11744 							if (_tmp222_ == _tmp228_) {
11745 								ValaLocalVariable* _tmp229_;
11746 								ValaSourceReference* _tmp230_;
11747 								ValaSourceReference* _tmp231_;
11748 								ValaLocalVariable* _tmp232_;
11749 								gchar* _tmp233_;
11750 								gchar* _tmp234_;
11751 								gchar* _tmp235_;
11752 								gchar* _tmp236_;
11753 								_tmp229_ = local;
11754 								_tmp230_ = vala_code_node_get_source_reference ((ValaCodeNode*) _tmp229_);
11755 								_tmp231_ = _tmp230_;
11756 								_tmp232_ = local;
11757 								_tmp233_ = vala_symbol_get_full_name ((ValaSymbol*) _tmp232_);
11758 								_tmp234_ = _tmp233_;
11759 								_tmp235_ = g_strdup_printf ("internal: Capturing `va_list' variable `%s' is not allowed", _tmp234_);
11760 								_tmp236_ = _tmp235_;
11761 								vala_report_error (_tmp231_, _tmp236_);
11762 								_g_free0 (_tmp236_);
11763 								_g_free0 (_tmp234_);
11764 								vala_code_node_set_error ((ValaCodeNode*) b, TRUE);
11765 							}
11766 						}
11767 					}
11768 				}
11769 				_vala_code_node_unref0 (local);
11770 			}
11771 			_vala_iterable_unref0 (_local_list);
11772 		}
11773 		_tmp237_ = vala_ccode_identifier_new ("g_slice_new0");
11774 		_tmp238_ = _tmp237_;
11775 		_tmp239_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp238_);
11776 		_tmp240_ = _tmp239_;
11777 		_vala_ccode_node_unref0 (_tmp238_);
11778 		data_alloc = _tmp240_;
11779 		_tmp241_ = data_alloc;
11780 		_tmp242_ = struct_name;
11781 		_tmp243_ = vala_ccode_identifier_new (_tmp242_);
11782 		_tmp244_ = _tmp243_;
11783 		vala_ccode_function_call_add_argument (_tmp241_, (ValaCCodeExpression*) _tmp244_);
11784 		_vala_ccode_node_unref0 (_tmp244_);
11785 		if (vala_ccode_base_module_is_in_coroutine (self)) {
11786 			ValaCCodeStruct* _tmp245_;
11787 			const gchar* _tmp246_;
11788 			gchar* _tmp247_;
11789 			gchar* _tmp248_;
11790 			gchar* _tmp249_;
11791 			gchar* _tmp250_;
11792 			_tmp245_ = self->closure_struct;
11793 			_tmp246_ = struct_name;
11794 			_tmp247_ = g_strconcat (_tmp246_, "*", NULL);
11795 			_tmp248_ = _tmp247_;
11796 			_tmp249_ = g_strdup_printf ("_data%d_", block_id);
11797 			_tmp250_ = _tmp249_;
11798 			vala_ccode_struct_add_field (_tmp245_, _tmp248_, _tmp250_, 0, NULL);
11799 			_g_free0 (_tmp250_);
11800 			_g_free0 (_tmp248_);
11801 		} else {
11802 			ValaCCodeFunction* _tmp251_;
11803 			ValaCCodeFunction* _tmp252_;
11804 			const gchar* _tmp253_;
11805 			gchar* _tmp254_;
11806 			gchar* _tmp255_;
11807 			gchar* _tmp256_;
11808 			gchar* _tmp257_;
11809 			ValaCCodeVariableDeclarator* _tmp258_;
11810 			ValaCCodeVariableDeclarator* _tmp259_;
11811 			_tmp251_ = vala_ccode_base_module_get_ccode (self);
11812 			_tmp252_ = _tmp251_;
11813 			_tmp253_ = struct_name;
11814 			_tmp254_ = g_strconcat (_tmp253_, "*", NULL);
11815 			_tmp255_ = _tmp254_;
11816 			_tmp256_ = g_strdup_printf ("_data%d_", block_id);
11817 			_tmp257_ = _tmp256_;
11818 			_tmp258_ = vala_ccode_variable_declarator_new (_tmp257_, NULL, NULL);
11819 			_tmp259_ = _tmp258_;
11820 			vala_ccode_function_add_declaration (_tmp252_, _tmp255_, (ValaCCodeDeclarator*) _tmp259_, 0);
11821 			_vala_ccode_node_unref0 (_tmp259_);
11822 			_g_free0 (_tmp257_);
11823 			_g_free0 (_tmp255_);
11824 		}
11825 		_tmp260_ = vala_ccode_base_module_get_ccode (self);
11826 		_tmp261_ = _tmp260_;
11827 		_tmp262_ = g_strdup_printf ("_data%d_", block_id);
11828 		_tmp263_ = _tmp262_;
11829 		_tmp264_ = vala_ccode_base_module_get_variable_cexpression (self, _tmp263_);
11830 		_tmp265_ = _tmp264_;
11831 		_tmp266_ = data_alloc;
11832 		vala_ccode_function_add_assignment (_tmp261_, _tmp265_, (ValaCCodeExpression*) _tmp266_);
11833 		_vala_ccode_node_unref0 (_tmp265_);
11834 		_g_free0 (_tmp263_);
11835 		_tmp267_ = vala_ccode_base_module_get_ccode (self);
11836 		_tmp268_ = _tmp267_;
11837 		_tmp269_ = g_strdup_printf ("_data%d_", block_id);
11838 		_tmp270_ = _tmp269_;
11839 		_tmp271_ = vala_ccode_base_module_get_variable_cexpression (self, _tmp270_);
11840 		_tmp272_ = _tmp271_;
11841 		_tmp273_ = vala_ccode_member_access_new_pointer (_tmp272_, "_ref_count_");
11842 		_tmp274_ = _tmp273_;
11843 		_tmp275_ = vala_ccode_identifier_new ("1");
11844 		_tmp276_ = _tmp275_;
11845 		vala_ccode_function_add_assignment (_tmp268_, (ValaCCodeExpression*) _tmp274_, (ValaCCodeExpression*) _tmp276_);
11846 		_vala_ccode_node_unref0 (_tmp276_);
11847 		_vala_ccode_node_unref0 (_tmp274_);
11848 		_vala_ccode_node_unref0 (_tmp272_);
11849 		_g_free0 (_tmp270_);
11850 		_tmp277_ = parent_block;
11851 		if (_tmp277_ != NULL) {
11852 			gint parent_block_id = 0;
11853 			ValaBlock* _tmp278_;
11854 			ValaCCodeFunctionCall* ref_call = NULL;
11855 			gchar* _tmp279_;
11856 			gchar* _tmp280_;
11857 			ValaCCodeIdentifier* _tmp281_;
11858 			ValaCCodeIdentifier* _tmp282_;
11859 			ValaCCodeFunctionCall* _tmp283_;
11860 			ValaCCodeFunctionCall* _tmp284_;
11861 			ValaCCodeFunctionCall* _tmp285_;
11862 			gchar* _tmp286_;
11863 			gchar* _tmp287_;
11864 			ValaCCodeExpression* _tmp288_;
11865 			ValaCCodeExpression* _tmp289_;
11866 			ValaCCodeFunction* _tmp290_;
11867 			ValaCCodeFunction* _tmp291_;
11868 			gchar* _tmp292_;
11869 			gchar* _tmp293_;
11870 			ValaCCodeExpression* _tmp294_;
11871 			ValaCCodeExpression* _tmp295_;
11872 			gchar* _tmp296_;
11873 			gchar* _tmp297_;
11874 			ValaCCodeMemberAccess* _tmp298_;
11875 			ValaCCodeMemberAccess* _tmp299_;
11876 			ValaCCodeFunctionCall* _tmp300_;
11877 			_tmp278_ = parent_block;
11878 			parent_block_id = vala_ccode_base_module_get_block_id (self, _tmp278_);
11879 			_tmp279_ = g_strdup_printf ("block%d_data_ref", parent_block_id);
11880 			_tmp280_ = _tmp279_;
11881 			_tmp281_ = vala_ccode_identifier_new (_tmp280_);
11882 			_tmp282_ = _tmp281_;
11883 			_tmp283_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp282_);
11884 			_tmp284_ = _tmp283_;
11885 			_vala_ccode_node_unref0 (_tmp282_);
11886 			_g_free0 (_tmp280_);
11887 			ref_call = _tmp284_;
11888 			_tmp285_ = ref_call;
11889 			_tmp286_ = g_strdup_printf ("_data%d_", parent_block_id);
11890 			_tmp287_ = _tmp286_;
11891 			_tmp288_ = vala_ccode_base_module_get_variable_cexpression (self, _tmp287_);
11892 			_tmp289_ = _tmp288_;
11893 			vala_ccode_function_call_add_argument (_tmp285_, _tmp289_);
11894 			_vala_ccode_node_unref0 (_tmp289_);
11895 			_g_free0 (_tmp287_);
11896 			_tmp290_ = vala_ccode_base_module_get_ccode (self);
11897 			_tmp291_ = _tmp290_;
11898 			_tmp292_ = g_strdup_printf ("_data%d_", block_id);
11899 			_tmp293_ = _tmp292_;
11900 			_tmp294_ = vala_ccode_base_module_get_variable_cexpression (self, _tmp293_);
11901 			_tmp295_ = _tmp294_;
11902 			_tmp296_ = g_strdup_printf ("_data%d_", parent_block_id);
11903 			_tmp297_ = _tmp296_;
11904 			_tmp298_ = vala_ccode_member_access_new_pointer (_tmp295_, _tmp297_);
11905 			_tmp299_ = _tmp298_;
11906 			_tmp300_ = ref_call;
11907 			vala_ccode_function_add_assignment (_tmp291_, (ValaCCodeExpression*) _tmp299_, (ValaCCodeExpression*) _tmp300_);
11908 			_vala_ccode_node_unref0 (_tmp299_);
11909 			_g_free0 (_tmp297_);
11910 			_vala_ccode_node_unref0 (_tmp295_);
11911 			_g_free0 (_tmp293_);
11912 			_vala_ccode_node_unref0 (ref_call);
11913 		} else {
11914 			gboolean _tmp301_ = FALSE;
11915 			gboolean _tmp302_ = FALSE;
11916 			ValaMethod* _tmp303_;
11917 			ValaMethod* _tmp304_;
11918 			gboolean in_creation_method_with_chainup = FALSE;
11919 			ValaDataType* this_type = NULL;
11920 			ValaDataType* _tmp311_;
11921 			gboolean _tmp312_ = FALSE;
11922 			ValaDataType* _tmp313_;
11923 			ValaMethod* _tmp341_;
11924 			ValaMethod* _tmp342_;
11925 			_tmp303_ = vala_ccode_base_module_get_current_method (self);
11926 			_tmp304_ = _tmp303_;
11927 			if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp304_, VALA_TYPE_CREATION_METHOD)) {
11928 				ValaClass* _tmp305_;
11929 				ValaClass* _tmp306_;
11930 				_tmp305_ = vala_ccode_base_module_get_current_class (self);
11931 				_tmp306_ = _tmp305_;
11932 				_tmp302_ = _tmp306_ != NULL;
11933 			} else {
11934 				_tmp302_ = FALSE;
11935 			}
11936 			if (_tmp302_) {
11937 				ValaClass* _tmp307_;
11938 				ValaClass* _tmp308_;
11939 				ValaClass* _tmp309_;
11940 				ValaClass* _tmp310_;
11941 				_tmp307_ = vala_ccode_base_module_get_current_class (self);
11942 				_tmp308_ = _tmp307_;
11943 				_tmp309_ = vala_class_get_base_class (_tmp308_);
11944 				_tmp310_ = _tmp309_;
11945 				_tmp301_ = _tmp310_ != NULL;
11946 			} else {
11947 				_tmp301_ = FALSE;
11948 			}
11949 			in_creation_method_with_chainup = _tmp301_;
11950 			_tmp311_ = vala_ccode_base_module_get_this_type (self);
11951 			this_type = _tmp311_;
11952 			_tmp313_ = this_type;
11953 			if (_tmp313_ != NULL) {
11954 				gboolean _tmp314_ = FALSE;
11955 				if (!in_creation_method_with_chainup) {
11956 					_tmp314_ = TRUE;
11957 				} else {
11958 					ValaMethod* _tmp315_;
11959 					ValaMethod* _tmp316_;
11960 					ValaBlock* _tmp317_;
11961 					ValaBlock* _tmp318_;
11962 					_tmp315_ = vala_ccode_base_module_get_current_method (self);
11963 					_tmp316_ = _tmp315_;
11964 					_tmp317_ = vala_subroutine_get_body ((ValaSubroutine*) _tmp316_);
11965 					_tmp318_ = _tmp317_;
11966 					_tmp314_ = _tmp318_ != b;
11967 				}
11968 				_tmp312_ = _tmp314_;
11969 			} else {
11970 				_tmp312_ = FALSE;
11971 			}
11972 			if (_tmp312_) {
11973 				ValaCCodeExpression* instance = NULL;
11974 				ValaCCodeFunction* _tmp332_;
11975 				ValaCCodeFunction* _tmp333_;
11976 				gchar* _tmp334_;
11977 				gchar* _tmp335_;
11978 				ValaCCodeExpression* _tmp336_;
11979 				ValaCCodeExpression* _tmp337_;
11980 				ValaCCodeMemberAccess* _tmp338_;
11981 				ValaCCodeMemberAccess* _tmp339_;
11982 				ValaCCodeExpression* _tmp340_;
11983 				if (vala_ccode_base_module_is_in_destructor (self)) {
11984 					ValaCCodeIdentifier* _tmp319_;
11985 					_tmp319_ = vala_ccode_identifier_new ("self");
11986 					_vala_ccode_node_unref0 (instance);
11987 					instance = (ValaCCodeExpression*) _tmp319_;
11988 				} else {
11989 					ValaCCodeFunctionCall* ref_call = NULL;
11990 					ValaDataType* _tmp320_;
11991 					ValaSourceReference* _tmp321_;
11992 					ValaSourceReference* _tmp322_;
11993 					ValaCCodeExpression* _tmp323_;
11994 					ValaCCodeExpression* _tmp324_;
11995 					ValaCCodeFunctionCall* _tmp325_;
11996 					ValaCCodeFunctionCall* _tmp326_;
11997 					ValaCCodeFunctionCall* _tmp327_;
11998 					ValaCCodeExpression* _tmp328_;
11999 					ValaCCodeExpression* _tmp329_;
12000 					ValaCCodeFunctionCall* _tmp330_;
12001 					ValaCCodeExpression* _tmp331_;
12002 					_tmp320_ = this_type;
12003 					_tmp321_ = vala_code_node_get_source_reference ((ValaCodeNode*) b);
12004 					_tmp322_ = _tmp321_;
12005 					_tmp323_ = vala_ccode_base_module_get_dup_func_expression (self, _tmp320_, _tmp322_, FALSE);
12006 					_tmp324_ = _tmp323_;
12007 					_tmp325_ = vala_ccode_function_call_new (_tmp324_);
12008 					_tmp326_ = _tmp325_;
12009 					_vala_ccode_node_unref0 (_tmp324_);
12010 					ref_call = _tmp326_;
12011 					_tmp327_ = ref_call;
12012 					_tmp328_ = vala_ccode_base_module_get_this_cexpression (self);
12013 					_tmp329_ = _tmp328_;
12014 					vala_ccode_function_call_add_argument (_tmp327_, _tmp329_);
12015 					_vala_ccode_node_unref0 (_tmp329_);
12016 					_tmp330_ = ref_call;
12017 					_tmp331_ = _vala_ccode_node_ref0 ((ValaCCodeExpression*) _tmp330_);
12018 					_vala_ccode_node_unref0 (instance);
12019 					instance = _tmp331_;
12020 					_vala_ccode_node_unref0 (ref_call);
12021 				}
12022 				_tmp332_ = vala_ccode_base_module_get_ccode (self);
12023 				_tmp333_ = _tmp332_;
12024 				_tmp334_ = g_strdup_printf ("_data%d_", block_id);
12025 				_tmp335_ = _tmp334_;
12026 				_tmp336_ = vala_ccode_base_module_get_variable_cexpression (self, _tmp335_);
12027 				_tmp337_ = _tmp336_;
12028 				_tmp338_ = vala_ccode_member_access_new_pointer (_tmp337_, "self");
12029 				_tmp339_ = _tmp338_;
12030 				_tmp340_ = instance;
12031 				vala_ccode_function_add_assignment (_tmp333_, (ValaCCodeExpression*) _tmp339_, _tmp340_);
12032 				_vala_ccode_node_unref0 (_tmp339_);
12033 				_vala_ccode_node_unref0 (_tmp337_);
12034 				_g_free0 (_tmp335_);
12035 				_vala_ccode_node_unref0 (instance);
12036 			}
12037 			_tmp341_ = vala_ccode_base_module_get_current_method (self);
12038 			_tmp342_ = _tmp341_;
12039 			if (_tmp342_ != NULL) {
12040 				gchar** suffices = NULL;
12041 				gchar* _tmp343_;
12042 				gchar* _tmp344_;
12043 				gchar* _tmp345_;
12044 				gchar** _tmp346_;
12045 				gint suffices_length1;
12046 				gint _suffices_size_;
12047 				_tmp343_ = g_strdup ("type");
12048 				_tmp344_ = g_strdup ("dup_func");
12049 				_tmp345_ = g_strdup ("destroy_func");
12050 				_tmp346_ = g_new0 (gchar*, 3 + 1);
12051 				_tmp346_[0] = _tmp343_;
12052 				_tmp346_[1] = _tmp344_;
12053 				_tmp346_[2] = _tmp345_;
12054 				suffices = _tmp346_;
12055 				suffices_length1 = 3;
12056 				_suffices_size_ = suffices_length1;
12057 				{
12058 					ValaList* _type_param_list = NULL;
12059 					ValaMethod* _tmp347_;
12060 					ValaMethod* _tmp348_;
12061 					ValaList* _tmp349_;
12062 					ValaList* _tmp350_;
12063 					gint _type_param_size = 0;
12064 					ValaList* _tmp351_;
12065 					gint _tmp352_;
12066 					gint _tmp353_;
12067 					gint _type_param_index = 0;
12068 					_tmp347_ = vala_ccode_base_module_get_current_method (self);
12069 					_tmp348_ = _tmp347_;
12070 					_tmp349_ = vala_method_get_type_parameters (_tmp348_);
12071 					_tmp350_ = _vala_iterable_ref0 (_tmp349_);
12072 					_type_param_list = _tmp350_;
12073 					_tmp351_ = _type_param_list;
12074 					_tmp352_ = vala_collection_get_size ((ValaCollection*) _tmp351_);
12075 					_tmp353_ = _tmp352_;
12076 					_type_param_size = _tmp353_;
12077 					_type_param_index = -1;
12078 					while (TRUE) {
12079 						gint _tmp354_;
12080 						gint _tmp355_;
12081 						ValaTypeParameter* type_param = NULL;
12082 						ValaList* _tmp356_;
12083 						gpointer _tmp357_;
12084 						gchar** _tmp358_;
12085 						gint _tmp358__length1;
12086 						_type_param_index = _type_param_index + 1;
12087 						_tmp354_ = _type_param_index;
12088 						_tmp355_ = _type_param_size;
12089 						if (!(_tmp354_ < _tmp355_)) {
12090 							break;
12091 						}
12092 						_tmp356_ = _type_param_list;
12093 						_tmp357_ = vala_list_get (_tmp356_, _type_param_index);
12094 						type_param = (ValaTypeParameter*) _tmp357_;
12095 						_tmp358_ = suffices;
12096 						_tmp358__length1 = suffices_length1;
12097 						{
12098 							gchar** suffix_collection = NULL;
12099 							gint suffix_collection_length1 = 0;
12100 							gint _suffix_collection_size_ = 0;
12101 							gint suffix_it = 0;
12102 							suffix_collection = _tmp358_;
12103 							suffix_collection_length1 = _tmp358__length1;
12104 							for (suffix_it = 0; suffix_it < suffix_collection_length1; suffix_it = suffix_it + 1) {
12105 								gchar* _tmp359_;
12106 								gchar* suffix = NULL;
12107 								_tmp359_ = g_strdup (suffix_collection[suffix_it]);
12108 								suffix = _tmp359_;
12109 								{
12110 									gchar* func_name = NULL;
12111 									ValaTypeParameter* _tmp360_;
12112 									const gchar* _tmp361_;
12113 									const gchar* _tmp362_;
12114 									gchar* _tmp363_;
12115 									gchar* _tmp364_;
12116 									const gchar* _tmp365_;
12117 									gchar* _tmp366_;
12118 									gchar* _tmp367_;
12119 									ValaCCodeFunction* _tmp368_;
12120 									ValaCCodeFunction* _tmp369_;
12121 									gchar* _tmp370_;
12122 									gchar* _tmp371_;
12123 									ValaCCodeExpression* _tmp372_;
12124 									ValaCCodeExpression* _tmp373_;
12125 									const gchar* _tmp374_;
12126 									ValaCCodeMemberAccess* _tmp375_;
12127 									ValaCCodeMemberAccess* _tmp376_;
12128 									const gchar* _tmp377_;
12129 									ValaCCodeExpression* _tmp378_;
12130 									ValaCCodeExpression* _tmp379_;
12131 									_tmp360_ = type_param;
12132 									_tmp361_ = vala_symbol_get_name ((ValaSymbol*) _tmp360_);
12133 									_tmp362_ = _tmp361_;
12134 									_tmp363_ = g_ascii_strdown (_tmp362_, (gssize) -1);
12135 									_tmp364_ = _tmp363_;
12136 									_tmp365_ = suffix;
12137 									_tmp366_ = g_strdup_printf ("%s_%s", _tmp364_, _tmp365_);
12138 									_tmp367_ = _tmp366_;
12139 									_g_free0 (_tmp364_);
12140 									func_name = _tmp367_;
12141 									_tmp368_ = vala_ccode_base_module_get_ccode (self);
12142 									_tmp369_ = _tmp368_;
12143 									_tmp370_ = g_strdup_printf ("_data%d_", block_id);
12144 									_tmp371_ = _tmp370_;
12145 									_tmp372_ = vala_ccode_base_module_get_variable_cexpression (self, _tmp371_);
12146 									_tmp373_ = _tmp372_;
12147 									_tmp374_ = func_name;
12148 									_tmp375_ = vala_ccode_member_access_new_pointer (_tmp373_, _tmp374_);
12149 									_tmp376_ = _tmp375_;
12150 									_tmp377_ = func_name;
12151 									_tmp378_ = vala_ccode_base_module_get_variable_cexpression (self, _tmp377_);
12152 									_tmp379_ = _tmp378_;
12153 									vala_ccode_function_add_assignment (_tmp369_, (ValaCCodeExpression*) _tmp376_, _tmp379_);
12154 									_vala_ccode_node_unref0 (_tmp379_);
12155 									_vala_ccode_node_unref0 (_tmp376_);
12156 									_vala_ccode_node_unref0 (_tmp373_);
12157 									_g_free0 (_tmp371_);
12158 									_g_free0 (func_name);
12159 									_g_free0 (suffix);
12160 								}
12161 							}
12162 						}
12163 						_vala_code_node_unref0 (type_param);
12164 					}
12165 					_vala_iterable_unref0 (_type_param_list);
12166 				}
12167 				suffices = (_vala_array_free (suffices, suffices_length1, (GDestroyNotify) g_free), NULL);
12168 			}
12169 		}
12170 		_tmp380_ = vala_symbol_get_parent_symbol ((ValaSymbol*) b);
12171 		_tmp381_ = _tmp380_;
12172 		if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp381_, VALA_TYPE_METHOD)) {
12173 			ValaMethod* m = NULL;
12174 			ValaSymbol* _tmp382_;
12175 			ValaSymbol* _tmp383_;
12176 			ValaMethod* _tmp384_;
12177 			ValaMethod* _tmp419_;
12178 			gboolean _tmp420_;
12179 			gboolean _tmp421_;
12180 			_tmp382_ = vala_symbol_get_parent_symbol ((ValaSymbol*) b);
12181 			_tmp383_ = _tmp382_;
12182 			_tmp384_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp383_, VALA_TYPE_METHOD, ValaMethod));
12183 			m = _tmp384_;
12184 			{
12185 				ValaList* _param_list = NULL;
12186 				ValaMethod* _tmp385_;
12187 				ValaList* _tmp386_;
12188 				ValaList* _tmp387_;
12189 				gint _param_size = 0;
12190 				ValaList* _tmp388_;
12191 				gint _tmp389_;
12192 				gint _tmp390_;
12193 				gint _param_index = 0;
12194 				_tmp385_ = m;
12195 				_tmp386_ = vala_callable_get_parameters ((ValaCallable*) _tmp385_);
12196 				_tmp387_ = _vala_iterable_ref0 (_tmp386_);
12197 				_param_list = _tmp387_;
12198 				_tmp388_ = _param_list;
12199 				_tmp389_ = vala_collection_get_size ((ValaCollection*) _tmp388_);
12200 				_tmp390_ = _tmp389_;
12201 				_param_size = _tmp390_;
12202 				_param_index = -1;
12203 				while (TRUE) {
12204 					gint _tmp391_;
12205 					gint _tmp392_;
12206 					ValaParameter* param = NULL;
12207 					ValaList* _tmp393_;
12208 					gpointer _tmp394_;
12209 					ValaParameter* _tmp395_;
12210 					gboolean _tmp396_;
12211 					gboolean _tmp397_;
12212 					_param_index = _param_index + 1;
12213 					_tmp391_ = _param_index;
12214 					_tmp392_ = _param_size;
12215 					if (!(_tmp391_ < _tmp392_)) {
12216 						break;
12217 					}
12218 					_tmp393_ = _param_list;
12219 					_tmp394_ = vala_list_get (_tmp393_, _param_index);
12220 					param = (ValaParameter*) _tmp394_;
12221 					_tmp395_ = param;
12222 					_tmp396_ = vala_parameter_get_captured (_tmp395_);
12223 					_tmp397_ = _tmp396_;
12224 					if (_tmp397_) {
12225 						ValaParameter* _tmp398_;
12226 						ValaCCodeStruct* _tmp399_;
12227 						ValaParameter* _tmp400_;
12228 						ValaDataType* _tmp401_;
12229 						ValaDataType* _tmp402_;
12230 						ValaTypeSymbol* _tmp403_;
12231 						ValaTypeSymbol* _tmp404_;
12232 						ValaCodeContext* _tmp405_;
12233 						ValaSemanticAnalyzer* _tmp406_;
12234 						ValaSemanticAnalyzer* _tmp407_;
12235 						ValaDataType* _tmp408_;
12236 						ValaTypeSymbol* _tmp409_;
12237 						ValaTypeSymbol* _tmp410_;
12238 						_tmp398_ = param;
12239 						_tmp399_ = data;
12240 						vala_ccode_base_module_capture_parameter (self, _tmp398_, _tmp399_, block_id);
12241 						_tmp400_ = param;
12242 						_tmp401_ = vala_variable_get_variable_type ((ValaVariable*) _tmp400_);
12243 						_tmp402_ = _tmp401_;
12244 						_tmp403_ = vala_data_type_get_type_symbol (_tmp402_);
12245 						_tmp404_ = _tmp403_;
12246 						_tmp405_ = self->priv->_context;
12247 						_tmp406_ = vala_code_context_get_analyzer (_tmp405_);
12248 						_tmp407_ = _tmp406_;
12249 						_tmp408_ = _tmp407_->va_list_type;
12250 						_tmp409_ = vala_data_type_get_type_symbol (_tmp408_);
12251 						_tmp410_ = _tmp409_;
12252 						if (_tmp404_ == _tmp410_) {
12253 							ValaParameter* _tmp411_;
12254 							ValaSourceReference* _tmp412_;
12255 							ValaSourceReference* _tmp413_;
12256 							ValaParameter* _tmp414_;
12257 							gchar* _tmp415_;
12258 							gchar* _tmp416_;
12259 							gchar* _tmp417_;
12260 							gchar* _tmp418_;
12261 							_tmp411_ = param;
12262 							_tmp412_ = vala_code_node_get_source_reference ((ValaCodeNode*) _tmp411_);
12263 							_tmp413_ = _tmp412_;
12264 							_tmp414_ = param;
12265 							_tmp415_ = vala_symbol_get_full_name ((ValaSymbol*) _tmp414_);
12266 							_tmp416_ = _tmp415_;
12267 							_tmp417_ = g_strdup_printf ("internal: Capturing `va_list' parameter `%s' is not allowed", _tmp416_);
12268 							_tmp418_ = _tmp417_;
12269 							vala_report_error (_tmp413_, _tmp418_);
12270 							_g_free0 (_tmp418_);
12271 							_g_free0 (_tmp416_);
12272 							vala_code_node_set_error ((ValaCodeNode*) b, TRUE);
12273 						}
12274 					}
12275 					_vala_code_node_unref0 (param);
12276 				}
12277 				_vala_iterable_unref0 (_param_list);
12278 			}
12279 			_tmp419_ = m;
12280 			_tmp420_ = vala_method_get_coroutine (_tmp419_);
12281 			_tmp421_ = _tmp420_;
12282 			if (_tmp421_) {
12283 				ValaCCodeStruct* _tmp422_;
12284 				ValaDataType* _tmp423_;
12285 				gchar* _tmp424_;
12286 				gchar* _tmp425_;
12287 				ValaCCodeFunction* _tmp426_;
12288 				ValaCCodeFunction* _tmp427_;
12289 				gchar* _tmp428_;
12290 				gchar* _tmp429_;
12291 				ValaCCodeExpression* _tmp430_;
12292 				ValaCCodeExpression* _tmp431_;
12293 				ValaCCodeMemberAccess* _tmp432_;
12294 				ValaCCodeMemberAccess* _tmp433_;
12295 				ValaCCodeIdentifier* _tmp434_;
12296 				ValaCCodeIdentifier* _tmp435_;
12297 				_tmp422_ = data;
12298 				_tmp423_ = self->pointer_type;
12299 				_tmp424_ = vala_get_ccode_name ((ValaCodeNode*) _tmp423_);
12300 				_tmp425_ = _tmp424_;
12301 				vala_ccode_struct_add_field (_tmp422_, _tmp425_, "_async_data_", 0, NULL);
12302 				_g_free0 (_tmp425_);
12303 				_tmp426_ = vala_ccode_base_module_get_ccode (self);
12304 				_tmp427_ = _tmp426_;
12305 				_tmp428_ = g_strdup_printf ("_data%d_", block_id);
12306 				_tmp429_ = _tmp428_;
12307 				_tmp430_ = vala_ccode_base_module_get_variable_cexpression (self, _tmp429_);
12308 				_tmp431_ = _tmp430_;
12309 				_tmp432_ = vala_ccode_member_access_new_pointer (_tmp431_, "_async_data_");
12310 				_tmp433_ = _tmp432_;
12311 				_tmp434_ = vala_ccode_identifier_new ("_data_");
12312 				_tmp435_ = _tmp434_;
12313 				vala_ccode_function_add_assignment (_tmp427_, (ValaCCodeExpression*) _tmp433_, (ValaCCodeExpression*) _tmp435_);
12314 				_vala_ccode_node_unref0 (_tmp435_);
12315 				_vala_ccode_node_unref0 (_tmp433_);
12316 				_vala_ccode_node_unref0 (_tmp431_);
12317 				_g_free0 (_tmp429_);
12318 			}
12319 			_vala_code_node_unref0 (m);
12320 		} else {
12321 			ValaSymbol* _tmp436_;
12322 			ValaSymbol* _tmp437_;
12323 			_tmp436_ = vala_symbol_get_parent_symbol ((ValaSymbol*) b);
12324 			_tmp437_ = _tmp436_;
12325 			if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp437_, VALA_TYPE_PROPERTY_ACCESSOR)) {
12326 				ValaPropertyAccessor* acc = NULL;
12327 				ValaSymbol* _tmp438_;
12328 				ValaSymbol* _tmp439_;
12329 				ValaPropertyAccessor* _tmp440_;
12330 				gboolean _tmp441_ = FALSE;
12331 				ValaPropertyAccessor* _tmp442_;
12332 				gboolean _tmp443_;
12333 				gboolean _tmp444_;
12334 				_tmp438_ = vala_symbol_get_parent_symbol ((ValaSymbol*) b);
12335 				_tmp439_ = _tmp438_;
12336 				_tmp440_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp439_, VALA_TYPE_PROPERTY_ACCESSOR, ValaPropertyAccessor));
12337 				acc = _tmp440_;
12338 				_tmp442_ = acc;
12339 				_tmp443_ = vala_property_accessor_get_readable (_tmp442_);
12340 				_tmp444_ = _tmp443_;
12341 				if (!_tmp444_) {
12342 					ValaPropertyAccessor* _tmp445_;
12343 					ValaParameter* _tmp446_;
12344 					ValaParameter* _tmp447_;
12345 					gboolean _tmp448_;
12346 					gboolean _tmp449_;
12347 					_tmp445_ = acc;
12348 					_tmp446_ = vala_property_accessor_get_value_parameter (_tmp445_);
12349 					_tmp447_ = _tmp446_;
12350 					_tmp448_ = vala_parameter_get_captured (_tmp447_);
12351 					_tmp449_ = _tmp448_;
12352 					_tmp441_ = _tmp449_;
12353 				} else {
12354 					_tmp441_ = FALSE;
12355 				}
12356 				if (_tmp441_) {
12357 					ValaPropertyAccessor* _tmp450_;
12358 					ValaParameter* _tmp451_;
12359 					ValaParameter* _tmp452_;
12360 					ValaCCodeStruct* _tmp453_;
12361 					_tmp450_ = acc;
12362 					_tmp451_ = vala_property_accessor_get_value_parameter (_tmp450_);
12363 					_tmp452_ = _tmp451_;
12364 					_tmp453_ = data;
12365 					vala_ccode_base_module_capture_parameter (self, _tmp452_, _tmp453_, block_id);
12366 				}
12367 				_vala_code_node_unref0 (acc);
12368 			} else {
12369 				ValaSymbol* _tmp454_;
12370 				ValaSymbol* _tmp455_;
12371 				_tmp454_ = vala_symbol_get_parent_symbol ((ValaSymbol*) b);
12372 				_tmp455_ = _tmp454_;
12373 				if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp455_, VALA_TYPE_FOREACH_STATEMENT)) {
12374 					ValaForeachStatement* stmt = NULL;
12375 					ValaSymbol* _tmp456_;
12376 					ValaSymbol* _tmp457_;
12377 					ValaForeachStatement* _tmp458_;
12378 					gboolean _tmp459_ = FALSE;
12379 					ValaForeachStatement* _tmp460_;
12380 					gboolean _tmp461_;
12381 					gboolean _tmp462_;
12382 					_tmp456_ = vala_symbol_get_parent_symbol ((ValaSymbol*) b);
12383 					_tmp457_ = _tmp456_;
12384 					_tmp458_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp457_, VALA_TYPE_FOREACH_STATEMENT, ValaForeachStatement));
12385 					stmt = _tmp458_;
12386 					_tmp460_ = stmt;
12387 					_tmp461_ = vala_foreach_statement_get_use_iterator (_tmp460_);
12388 					_tmp462_ = _tmp461_;
12389 					if (!_tmp462_) {
12390 						ValaForeachStatement* _tmp463_;
12391 						ValaLocalVariable* _tmp464_;
12392 						ValaLocalVariable* _tmp465_;
12393 						gboolean _tmp466_;
12394 						gboolean _tmp467_;
12395 						_tmp463_ = stmt;
12396 						_tmp464_ = vala_foreach_statement_get_element_variable (_tmp463_);
12397 						_tmp465_ = _tmp464_;
12398 						_tmp466_ = vala_local_variable_get_captured (_tmp465_);
12399 						_tmp467_ = _tmp466_;
12400 						_tmp459_ = _tmp467_;
12401 					} else {
12402 						_tmp459_ = FALSE;
12403 					}
12404 					if (_tmp459_) {
12405 						ValaCCodeFunction* _tmp468_;
12406 						ValaCCodeFunction* _tmp469_;
12407 						gchar* _tmp470_;
12408 						gchar* _tmp471_;
12409 						ValaCCodeExpression* _tmp472_;
12410 						ValaCCodeExpression* _tmp473_;
12411 						ValaForeachStatement* _tmp474_;
12412 						ValaLocalVariable* _tmp475_;
12413 						ValaLocalVariable* _tmp476_;
12414 						gchar* _tmp477_;
12415 						gchar* _tmp478_;
12416 						ValaCCodeMemberAccess* _tmp479_;
12417 						ValaCCodeMemberAccess* _tmp480_;
12418 						ValaForeachStatement* _tmp481_;
12419 						ValaLocalVariable* _tmp482_;
12420 						ValaLocalVariable* _tmp483_;
12421 						gchar* _tmp484_;
12422 						gchar* _tmp485_;
12423 						ValaCCodeExpression* _tmp486_;
12424 						ValaCCodeExpression* _tmp487_;
12425 						_tmp468_ = vala_ccode_base_module_get_ccode (self);
12426 						_tmp469_ = _tmp468_;
12427 						_tmp470_ = g_strdup_printf ("_data%d_", block_id);
12428 						_tmp471_ = _tmp470_;
12429 						_tmp472_ = vala_ccode_base_module_get_variable_cexpression (self, _tmp471_);
12430 						_tmp473_ = _tmp472_;
12431 						_tmp474_ = stmt;
12432 						_tmp475_ = vala_foreach_statement_get_element_variable (_tmp474_);
12433 						_tmp476_ = _tmp475_;
12434 						_tmp477_ = vala_ccode_base_module_get_local_cname (self, _tmp476_);
12435 						_tmp478_ = _tmp477_;
12436 						_tmp479_ = vala_ccode_member_access_new_pointer (_tmp473_, _tmp478_);
12437 						_tmp480_ = _tmp479_;
12438 						_tmp481_ = stmt;
12439 						_tmp482_ = vala_foreach_statement_get_element_variable (_tmp481_);
12440 						_tmp483_ = _tmp482_;
12441 						_tmp484_ = vala_ccode_base_module_get_local_cname (self, _tmp483_);
12442 						_tmp485_ = _tmp484_;
12443 						_tmp486_ = vala_ccode_base_module_get_variable_cexpression (self, _tmp485_);
12444 						_tmp487_ = _tmp486_;
12445 						vala_ccode_function_add_assignment (_tmp469_, (ValaCCodeExpression*) _tmp480_, _tmp487_);
12446 						_vala_ccode_node_unref0 (_tmp487_);
12447 						_g_free0 (_tmp485_);
12448 						_vala_ccode_node_unref0 (_tmp480_);
12449 						_g_free0 (_tmp478_);
12450 						_vala_ccode_node_unref0 (_tmp473_);
12451 						_g_free0 (_tmp471_);
12452 					}
12453 					_vala_code_node_unref0 (stmt);
12454 				}
12455 			}
12456 		}
12457 		_tmp488_ = struct_name;
12458 		_tmp489_ = g_strconcat ("struct _", _tmp488_, NULL);
12459 		_tmp490_ = _tmp489_;
12460 		_tmp491_ = struct_name;
12461 		_tmp492_ = vala_ccode_variable_declarator_new (_tmp491_, NULL, NULL);
12462 		_tmp493_ = _tmp492_;
12463 		_tmp494_ = vala_ccode_type_definition_new (_tmp490_, (ValaCCodeDeclarator*) _tmp493_);
12464 		_tmp495_ = _tmp494_;
12465 		_vala_ccode_node_unref0 (_tmp493_);
12466 		_g_free0 (_tmp490_);
12467 		_typedef_ = _tmp495_;
12468 		_tmp496_ = self->cfile;
12469 		_tmp497_ = _typedef_;
12470 		vala_ccode_file_add_type_declaration (_tmp496_, (ValaCCodeNode*) _tmp497_);
12471 		_tmp498_ = self->cfile;
12472 		_tmp499_ = data;
12473 		vala_ccode_file_add_type_definition (_tmp498_, (ValaCCodeNode*) _tmp499_);
12474 		_tmp500_ = g_strdup_printf ("block%d_data_ref", block_id);
12475 		_tmp501_ = _tmp500_;
12476 		_tmp502_ = struct_name;
12477 		_tmp503_ = g_strconcat (_tmp502_, "*", NULL);
12478 		_tmp504_ = _tmp503_;
12479 		_tmp505_ = vala_ccode_function_new (_tmp501_, _tmp504_);
12480 		_tmp506_ = _tmp505_;
12481 		_g_free0 (_tmp504_);
12482 		_g_free0 (_tmp501_);
12483 		ref_fun = _tmp506_;
12484 		_tmp507_ = ref_fun;
12485 		_tmp508_ = g_strdup_printf ("_data%d_", block_id);
12486 		_tmp509_ = _tmp508_;
12487 		_tmp510_ = struct_name;
12488 		_tmp511_ = g_strconcat (_tmp510_, "*", NULL);
12489 		_tmp512_ = _tmp511_;
12490 		_tmp513_ = vala_ccode_parameter_new (_tmp509_, _tmp512_);
12491 		_tmp514_ = _tmp513_;
12492 		vala_ccode_function_add_parameter (_tmp507_, _tmp514_);
12493 		_vala_ccode_node_unref0 (_tmp514_);
12494 		_g_free0 (_tmp512_);
12495 		_g_free0 (_tmp509_);
12496 		_tmp515_ = ref_fun;
12497 		vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp515_, VALA_CCODE_MODIFIERS_STATIC);
12498 		_tmp516_ = ref_fun;
12499 		vala_ccode_base_module_push_function (self, _tmp516_);
12500 		_tmp517_ = vala_ccode_identifier_new ("g_atomic_int_inc");
12501 		_tmp518_ = _tmp517_;
12502 		_tmp519_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp518_);
12503 		_tmp520_ = _tmp519_;
12504 		_vala_ccode_node_unref0 (_tmp518_);
12505 		ccall = _tmp520_;
12506 		_tmp521_ = ccall;
12507 		_tmp522_ = g_strdup_printf ("_data%d_", block_id);
12508 		_tmp523_ = _tmp522_;
12509 		_tmp524_ = vala_ccode_identifier_new (_tmp523_);
12510 		_tmp525_ = _tmp524_;
12511 		_tmp526_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) _tmp525_, "_ref_count_");
12512 		_tmp527_ = _tmp526_;
12513 		_tmp528_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, (ValaCCodeExpression*) _tmp527_);
12514 		_tmp529_ = _tmp528_;
12515 		vala_ccode_function_call_add_argument (_tmp521_, (ValaCCodeExpression*) _tmp529_);
12516 		_vala_ccode_node_unref0 (_tmp529_);
12517 		_vala_ccode_node_unref0 (_tmp527_);
12518 		_vala_ccode_node_unref0 (_tmp525_);
12519 		_g_free0 (_tmp523_);
12520 		_tmp530_ = vala_ccode_base_module_get_ccode (self);
12521 		_tmp531_ = _tmp530_;
12522 		_tmp532_ = ccall;
12523 		vala_ccode_function_add_expression (_tmp531_, (ValaCCodeExpression*) _tmp532_);
12524 		_tmp533_ = vala_ccode_base_module_get_ccode (self);
12525 		_tmp534_ = _tmp533_;
12526 		_tmp535_ = g_strdup_printf ("_data%d_", block_id);
12527 		_tmp536_ = _tmp535_;
12528 		_tmp537_ = vala_ccode_identifier_new (_tmp536_);
12529 		_tmp538_ = _tmp537_;
12530 		vala_ccode_function_add_return (_tmp534_, (ValaCCodeExpression*) _tmp538_);
12531 		_vala_ccode_node_unref0 (_tmp538_);
12532 		_g_free0 (_tmp536_);
12533 		vala_ccode_base_module_pop_function (self);
12534 		_tmp539_ = self->cfile;
12535 		_tmp540_ = ref_fun;
12536 		vala_ccode_file_add_function_declaration (_tmp539_, _tmp540_);
12537 		_tmp541_ = self->cfile;
12538 		_tmp542_ = ref_fun;
12539 		vala_ccode_file_add_function (_tmp541_, _tmp542_);
12540 		_tmp543_ = g_strdup_printf ("block%d_data_unref", block_id);
12541 		_tmp544_ = _tmp543_;
12542 		_tmp545_ = vala_ccode_function_new (_tmp544_, "void");
12543 		_tmp546_ = _tmp545_;
12544 		_g_free0 (_tmp544_);
12545 		unref_fun = _tmp546_;
12546 		_tmp547_ = unref_fun;
12547 		_tmp548_ = vala_ccode_parameter_new ("_userdata_", "void *");
12548 		_tmp549_ = _tmp548_;
12549 		vala_ccode_function_add_parameter (_tmp547_, _tmp549_);
12550 		_vala_ccode_node_unref0 (_tmp549_);
12551 		_tmp550_ = unref_fun;
12552 		vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp550_, VALA_CCODE_MODIFIERS_STATIC);
12553 		_tmp551_ = unref_fun;
12554 		vala_ccode_base_module_push_function (self, _tmp551_);
12555 		_tmp552_ = vala_ccode_base_module_get_ccode (self);
12556 		_tmp553_ = _tmp552_;
12557 		_tmp554_ = struct_name;
12558 		_tmp555_ = g_strconcat (_tmp554_, "*", NULL);
12559 		_tmp556_ = _tmp555_;
12560 		_tmp557_ = g_strdup_printf ("_data%d_", block_id);
12561 		_tmp558_ = _tmp557_;
12562 		_tmp559_ = vala_ccode_identifier_new ("_userdata_");
12563 		_tmp560_ = _tmp559_;
12564 		_tmp561_ = struct_name;
12565 		_tmp562_ = g_strconcat (_tmp561_, "*", NULL);
12566 		_tmp563_ = _tmp562_;
12567 		_tmp564_ = vala_ccode_cast_expression_new ((ValaCCodeExpression*) _tmp560_, _tmp563_);
12568 		_tmp565_ = _tmp564_;
12569 		_tmp566_ = vala_ccode_variable_declarator_new (_tmp558_, (ValaCCodeExpression*) _tmp565_, NULL);
12570 		_tmp567_ = _tmp566_;
12571 		vala_ccode_function_add_declaration (_tmp553_, _tmp556_, (ValaCCodeDeclarator*) _tmp567_, 0);
12572 		_vala_ccode_node_unref0 (_tmp567_);
12573 		_vala_ccode_node_unref0 (_tmp565_);
12574 		_g_free0 (_tmp563_);
12575 		_vala_ccode_node_unref0 (_tmp560_);
12576 		_g_free0 (_tmp558_);
12577 		_g_free0 (_tmp556_);
12578 		_tmp568_ = vala_ccode_identifier_new ("g_atomic_int_dec_and_test");
12579 		_tmp569_ = _tmp568_;
12580 		_tmp570_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp569_);
12581 		_vala_ccode_node_unref0 (ccall);
12582 		ccall = _tmp570_;
12583 		_vala_ccode_node_unref0 (_tmp569_);
12584 		_tmp571_ = ccall;
12585 		_tmp572_ = g_strdup_printf ("_data%d_", block_id);
12586 		_tmp573_ = _tmp572_;
12587 		_tmp574_ = vala_ccode_identifier_new (_tmp573_);
12588 		_tmp575_ = _tmp574_;
12589 		_tmp576_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) _tmp575_, "_ref_count_");
12590 		_tmp577_ = _tmp576_;
12591 		_tmp578_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, (ValaCCodeExpression*) _tmp577_);
12592 		_tmp579_ = _tmp578_;
12593 		vala_ccode_function_call_add_argument (_tmp571_, (ValaCCodeExpression*) _tmp579_);
12594 		_vala_ccode_node_unref0 (_tmp579_);
12595 		_vala_ccode_node_unref0 (_tmp577_);
12596 		_vala_ccode_node_unref0 (_tmp575_);
12597 		_g_free0 (_tmp573_);
12598 		_tmp580_ = vala_ccode_base_module_get_ccode (self);
12599 		_tmp581_ = _tmp580_;
12600 		_tmp582_ = ccall;
12601 		vala_ccode_function_open_if (_tmp581_, (ValaCCodeExpression*) _tmp582_);
12602 		_tmp583_ = g_strdup_printf ("_data%d_", block_id);
12603 		_tmp584_ = _tmp583_;
12604 		_tmp585_ = vala_ccode_identifier_new (_tmp584_);
12605 		_tmp586_ = (ValaCCodeExpression*) _tmp585_;
12606 		_g_free0 (_tmp584_);
12607 		outer_block = _tmp586_;
12608 		parent_closure_block = b;
12609 		while (TRUE) {
12610 			ValaBlock* _tmp587_;
12611 			ValaSymbol* _tmp588_;
12612 			ValaSymbol* _tmp589_;
12613 			ValaBlock* _tmp590_;
12614 			ValaBlock* _tmp591_;
12615 			gint parent_block_id = 0;
12616 			ValaBlock* _tmp592_;
12617 			ValaCCodeExpression* _tmp593_;
12618 			gchar* _tmp594_;
12619 			gchar* _tmp595_;
12620 			ValaCCodeMemberAccess* _tmp596_;
12621 			_tmp587_ = parent_closure_block;
12622 			_tmp588_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp587_);
12623 			_tmp589_ = _tmp588_;
12624 			_tmp590_ = vala_ccode_base_module_next_closure_block (self, _tmp589_);
12625 			parent_closure_block = _tmp590_;
12626 			_tmp591_ = parent_closure_block;
12627 			if (_tmp591_ == NULL) {
12628 				break;
12629 			}
12630 			_tmp592_ = parent_closure_block;
12631 			parent_block_id = vala_ccode_base_module_get_block_id (self, _tmp592_);
12632 			_tmp593_ = outer_block;
12633 			_tmp594_ = g_strdup_printf ("_data%d_", parent_block_id);
12634 			_tmp595_ = _tmp594_;
12635 			_tmp596_ = vala_ccode_member_access_new_pointer (_tmp593_, _tmp595_);
12636 			_vala_ccode_node_unref0 (outer_block);
12637 			outer_block = (ValaCCodeExpression*) _tmp596_;
12638 			_g_free0 (_tmp595_);
12639 		}
12640 		_tmp597_ = vala_ccode_base_module_get_this_type (self);
12641 		_tmp598_ = _vala_code_node_ref0 (_tmp597_);
12642 		this_type = _tmp598_;
12643 		_tmp599_ = this_type;
12644 		if (_tmp599_ != NULL) {
12645 			ValaCCodeFunction* _tmp600_;
12646 			ValaCCodeFunction* _tmp601_;
12647 			ValaDataType* _tmp602_;
12648 			gchar* _tmp603_;
12649 			gchar* _tmp604_;
12650 			ValaCCodeVariableDeclarator* _tmp605_;
12651 			ValaCCodeVariableDeclarator* _tmp606_;
12652 			ValaCCodeFunction* _tmp607_;
12653 			ValaCCodeFunction* _tmp608_;
12654 			ValaCCodeIdentifier* _tmp609_;
12655 			ValaCCodeIdentifier* _tmp610_;
12656 			ValaCCodeExpression* _tmp611_;
12657 			ValaCCodeMemberAccess* _tmp612_;
12658 			ValaCCodeMemberAccess* _tmp613_;
12659 			_tmp600_ = vala_ccode_base_module_get_ccode (self);
12660 			_tmp601_ = _tmp600_;
12661 			_tmp602_ = this_type;
12662 			_tmp603_ = vala_get_ccode_name ((ValaCodeNode*) _tmp602_);
12663 			_tmp604_ = _tmp603_;
12664 			_tmp605_ = vala_ccode_variable_declarator_new ("self", NULL, NULL);
12665 			_tmp606_ = _tmp605_;
12666 			vala_ccode_function_add_declaration (_tmp601_, _tmp604_, (ValaCCodeDeclarator*) _tmp606_, 0);
12667 			_vala_ccode_node_unref0 (_tmp606_);
12668 			_g_free0 (_tmp604_);
12669 			_tmp607_ = vala_ccode_base_module_get_ccode (self);
12670 			_tmp608_ = _tmp607_;
12671 			_tmp609_ = vala_ccode_identifier_new ("self");
12672 			_tmp610_ = _tmp609_;
12673 			_tmp611_ = outer_block;
12674 			_tmp612_ = vala_ccode_member_access_new_pointer (_tmp611_, "self");
12675 			_tmp613_ = _tmp612_;
12676 			vala_ccode_function_add_assignment (_tmp608_, (ValaCCodeExpression*) _tmp610_, (ValaCCodeExpression*) _tmp613_);
12677 			_vala_ccode_node_unref0 (_tmp613_);
12678 			_vala_ccode_node_unref0 (_tmp610_);
12679 		}
12680 		_tmp614_ = vala_ccode_base_module_get_current_method (self);
12681 		_tmp615_ = _tmp614_;
12682 		if (_tmp615_ != NULL) {
12683 			{
12684 				ValaList* _type_param_list = NULL;
12685 				ValaMethod* _tmp616_;
12686 				ValaMethod* _tmp617_;
12687 				ValaList* _tmp618_;
12688 				ValaList* _tmp619_;
12689 				gint _type_param_size = 0;
12690 				ValaList* _tmp620_;
12691 				gint _tmp621_;
12692 				gint _tmp622_;
12693 				gint _type_param_index = 0;
12694 				_tmp616_ = vala_ccode_base_module_get_current_method (self);
12695 				_tmp617_ = _tmp616_;
12696 				_tmp618_ = vala_method_get_type_parameters (_tmp617_);
12697 				_tmp619_ = _vala_iterable_ref0 (_tmp618_);
12698 				_type_param_list = _tmp619_;
12699 				_tmp620_ = _type_param_list;
12700 				_tmp621_ = vala_collection_get_size ((ValaCollection*) _tmp620_);
12701 				_tmp622_ = _tmp621_;
12702 				_type_param_size = _tmp622_;
12703 				_type_param_index = -1;
12704 				while (TRUE) {
12705 					gint _tmp623_;
12706 					gint _tmp624_;
12707 					ValaTypeParameter* type_param = NULL;
12708 					ValaList* _tmp625_;
12709 					gpointer _tmp626_;
12710 					gchar* func_name = NULL;
12711 					ValaTypeParameter* _tmp627_;
12712 					const gchar* _tmp628_;
12713 					const gchar* _tmp629_;
12714 					gchar* _tmp630_;
12715 					gchar* _tmp631_;
12716 					gchar* _tmp632_;
12717 					ValaCCodeFunction* _tmp633_;
12718 					ValaCCodeFunction* _tmp634_;
12719 					const gchar* _tmp635_;
12720 					ValaCCodeVariableDeclarator* _tmp636_;
12721 					ValaCCodeVariableDeclarator* _tmp637_;
12722 					ValaCCodeFunction* _tmp638_;
12723 					ValaCCodeFunction* _tmp639_;
12724 					const gchar* _tmp640_;
12725 					ValaCCodeIdentifier* _tmp641_;
12726 					ValaCCodeIdentifier* _tmp642_;
12727 					ValaCCodeExpression* _tmp643_;
12728 					const gchar* _tmp644_;
12729 					ValaCCodeMemberAccess* _tmp645_;
12730 					ValaCCodeMemberAccess* _tmp646_;
12731 					ValaTypeParameter* _tmp647_;
12732 					const gchar* _tmp648_;
12733 					const gchar* _tmp649_;
12734 					gchar* _tmp650_;
12735 					gchar* _tmp651_;
12736 					gchar* _tmp652_;
12737 					ValaCCodeFunction* _tmp653_;
12738 					ValaCCodeFunction* _tmp654_;
12739 					const gchar* _tmp655_;
12740 					ValaCCodeVariableDeclarator* _tmp656_;
12741 					ValaCCodeVariableDeclarator* _tmp657_;
12742 					ValaCCodeFunction* _tmp658_;
12743 					ValaCCodeFunction* _tmp659_;
12744 					const gchar* _tmp660_;
12745 					ValaCCodeIdentifier* _tmp661_;
12746 					ValaCCodeIdentifier* _tmp662_;
12747 					ValaCCodeExpression* _tmp663_;
12748 					const gchar* _tmp664_;
12749 					ValaCCodeMemberAccess* _tmp665_;
12750 					ValaCCodeMemberAccess* _tmp666_;
12751 					ValaTypeParameter* _tmp667_;
12752 					const gchar* _tmp668_;
12753 					const gchar* _tmp669_;
12754 					gchar* _tmp670_;
12755 					gchar* _tmp671_;
12756 					gchar* _tmp672_;
12757 					ValaCCodeFunction* _tmp673_;
12758 					ValaCCodeFunction* _tmp674_;
12759 					const gchar* _tmp675_;
12760 					ValaCCodeVariableDeclarator* _tmp676_;
12761 					ValaCCodeVariableDeclarator* _tmp677_;
12762 					ValaCCodeFunction* _tmp678_;
12763 					ValaCCodeFunction* _tmp679_;
12764 					const gchar* _tmp680_;
12765 					ValaCCodeIdentifier* _tmp681_;
12766 					ValaCCodeIdentifier* _tmp682_;
12767 					ValaCCodeExpression* _tmp683_;
12768 					const gchar* _tmp684_;
12769 					ValaCCodeMemberAccess* _tmp685_;
12770 					ValaCCodeMemberAccess* _tmp686_;
12771 					_type_param_index = _type_param_index + 1;
12772 					_tmp623_ = _type_param_index;
12773 					_tmp624_ = _type_param_size;
12774 					if (!(_tmp623_ < _tmp624_)) {
12775 						break;
12776 					}
12777 					_tmp625_ = _type_param_list;
12778 					_tmp626_ = vala_list_get (_tmp625_, _type_param_index);
12779 					type_param = (ValaTypeParameter*) _tmp626_;
12780 					_tmp627_ = type_param;
12781 					_tmp628_ = vala_symbol_get_name ((ValaSymbol*) _tmp627_);
12782 					_tmp629_ = _tmp628_;
12783 					_tmp630_ = g_ascii_strdown (_tmp629_, (gssize) -1);
12784 					_tmp631_ = _tmp630_;
12785 					_tmp632_ = g_strdup_printf ("%s_type", _tmp631_);
12786 					_g_free0 (func_name);
12787 					func_name = _tmp632_;
12788 					_g_free0 (_tmp631_);
12789 					_tmp633_ = vala_ccode_base_module_get_ccode (self);
12790 					_tmp634_ = _tmp633_;
12791 					_tmp635_ = func_name;
12792 					_tmp636_ = vala_ccode_variable_declarator_new (_tmp635_, NULL, NULL);
12793 					_tmp637_ = _tmp636_;
12794 					vala_ccode_function_add_declaration (_tmp634_, "GType", (ValaCCodeDeclarator*) _tmp637_, 0);
12795 					_vala_ccode_node_unref0 (_tmp637_);
12796 					_tmp638_ = vala_ccode_base_module_get_ccode (self);
12797 					_tmp639_ = _tmp638_;
12798 					_tmp640_ = func_name;
12799 					_tmp641_ = vala_ccode_identifier_new (_tmp640_);
12800 					_tmp642_ = _tmp641_;
12801 					_tmp643_ = outer_block;
12802 					_tmp644_ = func_name;
12803 					_tmp645_ = vala_ccode_member_access_new_pointer (_tmp643_, _tmp644_);
12804 					_tmp646_ = _tmp645_;
12805 					vala_ccode_function_add_assignment (_tmp639_, (ValaCCodeExpression*) _tmp642_, (ValaCCodeExpression*) _tmp646_);
12806 					_vala_ccode_node_unref0 (_tmp646_);
12807 					_vala_ccode_node_unref0 (_tmp642_);
12808 					_tmp647_ = type_param;
12809 					_tmp648_ = vala_symbol_get_name ((ValaSymbol*) _tmp647_);
12810 					_tmp649_ = _tmp648_;
12811 					_tmp650_ = g_ascii_strdown (_tmp649_, (gssize) -1);
12812 					_tmp651_ = _tmp650_;
12813 					_tmp652_ = g_strdup_printf ("%s_dup_func", _tmp651_);
12814 					_g_free0 (func_name);
12815 					func_name = _tmp652_;
12816 					_g_free0 (_tmp651_);
12817 					_tmp653_ = vala_ccode_base_module_get_ccode (self);
12818 					_tmp654_ = _tmp653_;
12819 					_tmp655_ = func_name;
12820 					_tmp656_ = vala_ccode_variable_declarator_new (_tmp655_, NULL, NULL);
12821 					_tmp657_ = _tmp656_;
12822 					vala_ccode_function_add_declaration (_tmp654_, "GBoxedCopyFunc", (ValaCCodeDeclarator*) _tmp657_, 0);
12823 					_vala_ccode_node_unref0 (_tmp657_);
12824 					_tmp658_ = vala_ccode_base_module_get_ccode (self);
12825 					_tmp659_ = _tmp658_;
12826 					_tmp660_ = func_name;
12827 					_tmp661_ = vala_ccode_identifier_new (_tmp660_);
12828 					_tmp662_ = _tmp661_;
12829 					_tmp663_ = outer_block;
12830 					_tmp664_ = func_name;
12831 					_tmp665_ = vala_ccode_member_access_new_pointer (_tmp663_, _tmp664_);
12832 					_tmp666_ = _tmp665_;
12833 					vala_ccode_function_add_assignment (_tmp659_, (ValaCCodeExpression*) _tmp662_, (ValaCCodeExpression*) _tmp666_);
12834 					_vala_ccode_node_unref0 (_tmp666_);
12835 					_vala_ccode_node_unref0 (_tmp662_);
12836 					_tmp667_ = type_param;
12837 					_tmp668_ = vala_symbol_get_name ((ValaSymbol*) _tmp667_);
12838 					_tmp669_ = _tmp668_;
12839 					_tmp670_ = g_ascii_strdown (_tmp669_, (gssize) -1);
12840 					_tmp671_ = _tmp670_;
12841 					_tmp672_ = g_strdup_printf ("%s_destroy_func", _tmp671_);
12842 					_g_free0 (func_name);
12843 					func_name = _tmp672_;
12844 					_g_free0 (_tmp671_);
12845 					_tmp673_ = vala_ccode_base_module_get_ccode (self);
12846 					_tmp674_ = _tmp673_;
12847 					_tmp675_ = func_name;
12848 					_tmp676_ = vala_ccode_variable_declarator_new (_tmp675_, NULL, NULL);
12849 					_tmp677_ = _tmp676_;
12850 					vala_ccode_function_add_declaration (_tmp674_, "GDestroyNotify", (ValaCCodeDeclarator*) _tmp677_, 0);
12851 					_vala_ccode_node_unref0 (_tmp677_);
12852 					_tmp678_ = vala_ccode_base_module_get_ccode (self);
12853 					_tmp679_ = _tmp678_;
12854 					_tmp680_ = func_name;
12855 					_tmp681_ = vala_ccode_identifier_new (_tmp680_);
12856 					_tmp682_ = _tmp681_;
12857 					_tmp683_ = outer_block;
12858 					_tmp684_ = func_name;
12859 					_tmp685_ = vala_ccode_member_access_new_pointer (_tmp683_, _tmp684_);
12860 					_tmp686_ = _tmp685_;
12861 					vala_ccode_function_add_assignment (_tmp679_, (ValaCCodeExpression*) _tmp682_, (ValaCCodeExpression*) _tmp686_);
12862 					_vala_ccode_node_unref0 (_tmp686_);
12863 					_vala_ccode_node_unref0 (_tmp682_);
12864 					_g_free0 (func_name);
12865 					_vala_code_node_unref0 (type_param);
12866 				}
12867 				_vala_iterable_unref0 (_type_param_list);
12868 			}
12869 		}
12870 		{
12871 			gint i = 0;
12872 			ValaList* _tmp687_;
12873 			gint _tmp688_;
12874 			gint _tmp689_;
12875 			_tmp687_ = local_vars;
12876 			_tmp688_ = vala_collection_get_size ((ValaCollection*) _tmp687_);
12877 			_tmp689_ = _tmp688_;
12878 			i = _tmp689_ - 1;
12879 			{
12880 				gboolean _tmp690_ = FALSE;
12881 				_tmp690_ = TRUE;
12882 				while (TRUE) {
12883 					ValaLocalVariable* local = NULL;
12884 					ValaList* _tmp692_;
12885 					gpointer _tmp693_;
12886 					ValaLocalVariable* _tmp694_;
12887 					gboolean _tmp695_;
12888 					gboolean _tmp696_;
12889 					if (!_tmp690_) {
12890 						gint _tmp691_;
12891 						_tmp691_ = i;
12892 						i = _tmp691_ - 1;
12893 					}
12894 					_tmp690_ = FALSE;
12895 					if (!(i >= 0)) {
12896 						break;
12897 					}
12898 					_tmp692_ = local_vars;
12899 					_tmp693_ = vala_list_get (_tmp692_, i);
12900 					local = (ValaLocalVariable*) _tmp693_;
12901 					_tmp694_ = local;
12902 					_tmp695_ = vala_local_variable_get_captured (_tmp694_);
12903 					_tmp696_ = _tmp695_;
12904 					if (_tmp696_) {
12905 						ValaLocalVariable* _tmp697_;
12906 						ValaDataType* _tmp698_;
12907 						ValaDataType* _tmp699_;
12908 						_tmp697_ = local;
12909 						_tmp698_ = vala_variable_get_variable_type ((ValaVariable*) _tmp697_);
12910 						_tmp699_ = _tmp698_;
12911 						if (vala_ccode_base_module_requires_destroy (_tmp699_)) {
12912 							gboolean old_coroutine = FALSE;
12913 							ValaMethod* _tmp700_;
12914 							ValaMethod* _tmp701_;
12915 							ValaCCodeFunction* _tmp708_;
12916 							ValaCCodeFunction* _tmp709_;
12917 							ValaLocalVariable* _tmp710_;
12918 							ValaCCodeExpression* _tmp711_;
12919 							ValaCCodeExpression* _tmp712_;
12920 							old_coroutine = FALSE;
12921 							_tmp700_ = vala_ccode_base_module_get_current_method (self);
12922 							_tmp701_ = _tmp700_;
12923 							if (_tmp701_ != NULL) {
12924 								ValaMethod* _tmp702_;
12925 								ValaMethod* _tmp703_;
12926 								gboolean _tmp704_;
12927 								gboolean _tmp705_;
12928 								ValaMethod* _tmp706_;
12929 								ValaMethod* _tmp707_;
12930 								_tmp702_ = vala_ccode_base_module_get_current_method (self);
12931 								_tmp703_ = _tmp702_;
12932 								_tmp704_ = vala_method_get_coroutine (_tmp703_);
12933 								_tmp705_ = _tmp704_;
12934 								old_coroutine = _tmp705_;
12935 								_tmp706_ = vala_ccode_base_module_get_current_method (self);
12936 								_tmp707_ = _tmp706_;
12937 								vala_method_set_coroutine (_tmp707_, FALSE);
12938 							}
12939 							_tmp708_ = vala_ccode_base_module_get_ccode (self);
12940 							_tmp709_ = _tmp708_;
12941 							_tmp710_ = local;
12942 							_tmp711_ = vala_ccode_base_module_destroy_local (self, _tmp710_);
12943 							_tmp712_ = _tmp711_;
12944 							vala_ccode_function_add_expression (_tmp709_, _tmp712_);
12945 							_vala_ccode_node_unref0 (_tmp712_);
12946 							if (old_coroutine) {
12947 								ValaMethod* _tmp713_;
12948 								ValaMethod* _tmp714_;
12949 								_tmp713_ = vala_ccode_base_module_get_current_method (self);
12950 								_tmp714_ = _tmp713_;
12951 								vala_method_set_coroutine (_tmp714_, TRUE);
12952 							}
12953 						}
12954 					}
12955 					_vala_code_node_unref0 (local);
12956 				}
12957 			}
12958 		}
12959 		_tmp715_ = vala_symbol_get_parent_symbol ((ValaSymbol*) b);
12960 		_tmp716_ = _tmp715_;
12961 		if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp716_, VALA_TYPE_METHOD)) {
12962 			ValaMethod* m = NULL;
12963 			ValaSymbol* _tmp717_;
12964 			ValaSymbol* _tmp718_;
12965 			ValaMethod* _tmp719_;
12966 			_tmp717_ = vala_symbol_get_parent_symbol ((ValaSymbol*) b);
12967 			_tmp718_ = _tmp717_;
12968 			_tmp719_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp718_, VALA_TYPE_METHOD, ValaMethod));
12969 			m = _tmp719_;
12970 			{
12971 				ValaList* _param_list = NULL;
12972 				ValaMethod* _tmp720_;
12973 				ValaList* _tmp721_;
12974 				ValaList* _tmp722_;
12975 				gint _param_size = 0;
12976 				ValaList* _tmp723_;
12977 				gint _tmp724_;
12978 				gint _tmp725_;
12979 				gint _param_index = 0;
12980 				_tmp720_ = m;
12981 				_tmp721_ = vala_callable_get_parameters ((ValaCallable*) _tmp720_);
12982 				_tmp722_ = _vala_iterable_ref0 (_tmp721_);
12983 				_param_list = _tmp722_;
12984 				_tmp723_ = _param_list;
12985 				_tmp724_ = vala_collection_get_size ((ValaCollection*) _tmp723_);
12986 				_tmp725_ = _tmp724_;
12987 				_param_size = _tmp725_;
12988 				_param_index = -1;
12989 				while (TRUE) {
12990 					gint _tmp726_;
12991 					gint _tmp727_;
12992 					ValaParameter* param = NULL;
12993 					ValaList* _tmp728_;
12994 					gpointer _tmp729_;
12995 					ValaParameter* _tmp730_;
12996 					gboolean _tmp731_;
12997 					gboolean _tmp732_;
12998 					_param_index = _param_index + 1;
12999 					_tmp726_ = _param_index;
13000 					_tmp727_ = _param_size;
13001 					if (!(_tmp726_ < _tmp727_)) {
13002 						break;
13003 					}
13004 					_tmp728_ = _param_list;
13005 					_tmp729_ = vala_list_get (_tmp728_, _param_index);
13006 					param = (ValaParameter*) _tmp729_;
13007 					_tmp730_ = param;
13008 					_tmp731_ = vala_parameter_get_captured (_tmp730_);
13009 					_tmp732_ = _tmp731_;
13010 					if (_tmp732_) {
13011 						ValaDataType* param_type = NULL;
13012 						ValaParameter* _tmp733_;
13013 						ValaDataType* _tmp734_;
13014 						ValaDataType* _tmp735_;
13015 						ValaDataType* _tmp736_;
13016 						ValaDataType* _tmp737_;
13017 						gboolean _tmp738_;
13018 						gboolean _tmp739_;
13019 						ValaDataType* _tmp742_;
13020 						_tmp733_ = param;
13021 						_tmp734_ = vala_variable_get_variable_type ((ValaVariable*) _tmp733_);
13022 						_tmp735_ = _tmp734_;
13023 						_tmp736_ = vala_data_type_copy (_tmp735_);
13024 						param_type = _tmp736_;
13025 						_tmp737_ = param_type;
13026 						_tmp738_ = vala_data_type_get_value_owned (_tmp737_);
13027 						_tmp739_ = _tmp738_;
13028 						if (!_tmp739_) {
13029 							ValaDataType* _tmp740_;
13030 							ValaDataType* _tmp741_;
13031 							_tmp740_ = param_type;
13032 							_tmp741_ = param_type;
13033 							vala_data_type_set_value_owned (_tmp740_, !vala_ccode_base_module_no_implicit_copy (self, _tmp741_));
13034 						}
13035 						_tmp742_ = param_type;
13036 						if (vala_ccode_base_module_requires_destroy (_tmp742_)) {
13037 							gboolean old_coroutine = FALSE;
13038 							ValaMethod* _tmp743_;
13039 							ValaCCodeFunction* _tmp748_;
13040 							ValaCCodeFunction* _tmp749_;
13041 							ValaParameter* _tmp750_;
13042 							ValaCCodeExpression* _tmp751_;
13043 							ValaCCodeExpression* _tmp752_;
13044 							old_coroutine = FALSE;
13045 							_tmp743_ = m;
13046 							if (_tmp743_ != NULL) {
13047 								ValaMethod* _tmp744_;
13048 								gboolean _tmp745_;
13049 								gboolean _tmp746_;
13050 								ValaMethod* _tmp747_;
13051 								_tmp744_ = m;
13052 								_tmp745_ = vala_method_get_coroutine (_tmp744_);
13053 								_tmp746_ = _tmp745_;
13054 								old_coroutine = _tmp746_;
13055 								_tmp747_ = m;
13056 								vala_method_set_coroutine (_tmp747_, FALSE);
13057 							}
13058 							_tmp748_ = vala_ccode_base_module_get_ccode (self);
13059 							_tmp749_ = _tmp748_;
13060 							_tmp750_ = param;
13061 							_tmp751_ = vala_ccode_base_module_destroy_parameter (self, _tmp750_);
13062 							_tmp752_ = _tmp751_;
13063 							vala_ccode_function_add_expression (_tmp749_, _tmp752_);
13064 							_vala_ccode_node_unref0 (_tmp752_);
13065 							if (old_coroutine) {
13066 								ValaMethod* _tmp753_;
13067 								_tmp753_ = m;
13068 								vala_method_set_coroutine (_tmp753_, TRUE);
13069 							}
13070 						}
13071 						_vala_code_node_unref0 (param_type);
13072 					}
13073 					_vala_code_node_unref0 (param);
13074 				}
13075 				_vala_iterable_unref0 (_param_list);
13076 			}
13077 			_vala_code_node_unref0 (m);
13078 		} else {
13079 			ValaSymbol* _tmp754_;
13080 			ValaSymbol* _tmp755_;
13081 			_tmp754_ = vala_symbol_get_parent_symbol ((ValaSymbol*) b);
13082 			_tmp755_ = _tmp754_;
13083 			if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp755_, VALA_TYPE_PROPERTY_ACCESSOR)) {
13084 				ValaPropertyAccessor* acc = NULL;
13085 				ValaSymbol* _tmp756_;
13086 				ValaSymbol* _tmp757_;
13087 				ValaPropertyAccessor* _tmp758_;
13088 				gboolean _tmp759_ = FALSE;
13089 				ValaPropertyAccessor* _tmp760_;
13090 				gboolean _tmp761_;
13091 				gboolean _tmp762_;
13092 				_tmp756_ = vala_symbol_get_parent_symbol ((ValaSymbol*) b);
13093 				_tmp757_ = _tmp756_;
13094 				_tmp758_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp757_, VALA_TYPE_PROPERTY_ACCESSOR, ValaPropertyAccessor));
13095 				acc = _tmp758_;
13096 				_tmp760_ = acc;
13097 				_tmp761_ = vala_property_accessor_get_readable (_tmp760_);
13098 				_tmp762_ = _tmp761_;
13099 				if (!_tmp762_) {
13100 					ValaPropertyAccessor* _tmp763_;
13101 					ValaParameter* _tmp764_;
13102 					ValaParameter* _tmp765_;
13103 					gboolean _tmp766_;
13104 					gboolean _tmp767_;
13105 					_tmp763_ = acc;
13106 					_tmp764_ = vala_property_accessor_get_value_parameter (_tmp763_);
13107 					_tmp765_ = _tmp764_;
13108 					_tmp766_ = vala_parameter_get_captured (_tmp765_);
13109 					_tmp767_ = _tmp766_;
13110 					_tmp759_ = _tmp767_;
13111 				} else {
13112 					_tmp759_ = FALSE;
13113 				}
13114 				if (_tmp759_) {
13115 					ValaDataType* param_type = NULL;
13116 					ValaPropertyAccessor* _tmp768_;
13117 					ValaParameter* _tmp769_;
13118 					ValaParameter* _tmp770_;
13119 					ValaDataType* _tmp771_;
13120 					ValaDataType* _tmp772_;
13121 					ValaDataType* _tmp773_;
13122 					ValaDataType* _tmp774_;
13123 					gboolean _tmp775_;
13124 					gboolean _tmp776_;
13125 					ValaDataType* _tmp779_;
13126 					_tmp768_ = acc;
13127 					_tmp769_ = vala_property_accessor_get_value_parameter (_tmp768_);
13128 					_tmp770_ = _tmp769_;
13129 					_tmp771_ = vala_variable_get_variable_type ((ValaVariable*) _tmp770_);
13130 					_tmp772_ = _tmp771_;
13131 					_tmp773_ = vala_data_type_copy (_tmp772_);
13132 					param_type = _tmp773_;
13133 					_tmp774_ = param_type;
13134 					_tmp775_ = vala_data_type_get_value_owned (_tmp774_);
13135 					_tmp776_ = _tmp775_;
13136 					if (!_tmp776_) {
13137 						ValaDataType* _tmp777_;
13138 						ValaDataType* _tmp778_;
13139 						_tmp777_ = param_type;
13140 						_tmp778_ = param_type;
13141 						vala_data_type_set_value_owned (_tmp777_, !vala_ccode_base_module_no_implicit_copy (self, _tmp778_));
13142 					}
13143 					_tmp779_ = param_type;
13144 					if (vala_ccode_base_module_requires_destroy (_tmp779_)) {
13145 						ValaCCodeFunction* _tmp780_;
13146 						ValaCCodeFunction* _tmp781_;
13147 						ValaPropertyAccessor* _tmp782_;
13148 						ValaParameter* _tmp783_;
13149 						ValaParameter* _tmp784_;
13150 						ValaCCodeExpression* _tmp785_;
13151 						ValaCCodeExpression* _tmp786_;
13152 						_tmp780_ = vala_ccode_base_module_get_ccode (self);
13153 						_tmp781_ = _tmp780_;
13154 						_tmp782_ = acc;
13155 						_tmp783_ = vala_property_accessor_get_value_parameter (_tmp782_);
13156 						_tmp784_ = _tmp783_;
13157 						_tmp785_ = vala_ccode_base_module_destroy_parameter (self, _tmp784_);
13158 						_tmp786_ = _tmp785_;
13159 						vala_ccode_function_add_expression (_tmp781_, _tmp786_);
13160 						_vala_ccode_node_unref0 (_tmp786_);
13161 					}
13162 					_vala_code_node_unref0 (param_type);
13163 				}
13164 				_vala_code_node_unref0 (acc);
13165 			}
13166 		}
13167 		_tmp787_ = parent_block;
13168 		if (_tmp787_ != NULL) {
13169 			gint parent_block_id = 0;
13170 			ValaBlock* _tmp788_;
13171 			ValaCCodeFunctionCall* unref_call = NULL;
13172 			gchar* _tmp789_;
13173 			gchar* _tmp790_;
13174 			ValaCCodeIdentifier* _tmp791_;
13175 			ValaCCodeIdentifier* _tmp792_;
13176 			ValaCCodeFunctionCall* _tmp793_;
13177 			ValaCCodeFunctionCall* _tmp794_;
13178 			ValaCCodeFunctionCall* _tmp795_;
13179 			gchar* _tmp796_;
13180 			gchar* _tmp797_;
13181 			ValaCCodeIdentifier* _tmp798_;
13182 			ValaCCodeIdentifier* _tmp799_;
13183 			gchar* _tmp800_;
13184 			gchar* _tmp801_;
13185 			ValaCCodeMemberAccess* _tmp802_;
13186 			ValaCCodeMemberAccess* _tmp803_;
13187 			ValaCCodeFunction* _tmp804_;
13188 			ValaCCodeFunction* _tmp805_;
13189 			ValaCCodeFunctionCall* _tmp806_;
13190 			ValaCCodeFunction* _tmp807_;
13191 			ValaCCodeFunction* _tmp808_;
13192 			gchar* _tmp809_;
13193 			gchar* _tmp810_;
13194 			ValaCCodeIdentifier* _tmp811_;
13195 			ValaCCodeIdentifier* _tmp812_;
13196 			gchar* _tmp813_;
13197 			gchar* _tmp814_;
13198 			ValaCCodeMemberAccess* _tmp815_;
13199 			ValaCCodeMemberAccess* _tmp816_;
13200 			ValaCCodeConstant* _tmp817_;
13201 			ValaCCodeConstant* _tmp818_;
13202 			_tmp788_ = parent_block;
13203 			parent_block_id = vala_ccode_base_module_get_block_id (self, _tmp788_);
13204 			_tmp789_ = g_strdup_printf ("block%d_data_unref", parent_block_id);
13205 			_tmp790_ = _tmp789_;
13206 			_tmp791_ = vala_ccode_identifier_new (_tmp790_);
13207 			_tmp792_ = _tmp791_;
13208 			_tmp793_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp792_);
13209 			_tmp794_ = _tmp793_;
13210 			_vala_ccode_node_unref0 (_tmp792_);
13211 			_g_free0 (_tmp790_);
13212 			unref_call = _tmp794_;
13213 			_tmp795_ = unref_call;
13214 			_tmp796_ = g_strdup_printf ("_data%d_", block_id);
13215 			_tmp797_ = _tmp796_;
13216 			_tmp798_ = vala_ccode_identifier_new (_tmp797_);
13217 			_tmp799_ = _tmp798_;
13218 			_tmp800_ = g_strdup_printf ("_data%d_", parent_block_id);
13219 			_tmp801_ = _tmp800_;
13220 			_tmp802_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) _tmp799_, _tmp801_);
13221 			_tmp803_ = _tmp802_;
13222 			vala_ccode_function_call_add_argument (_tmp795_, (ValaCCodeExpression*) _tmp803_);
13223 			_vala_ccode_node_unref0 (_tmp803_);
13224 			_g_free0 (_tmp801_);
13225 			_vala_ccode_node_unref0 (_tmp799_);
13226 			_g_free0 (_tmp797_);
13227 			_tmp804_ = vala_ccode_base_module_get_ccode (self);
13228 			_tmp805_ = _tmp804_;
13229 			_tmp806_ = unref_call;
13230 			vala_ccode_function_add_expression (_tmp805_, (ValaCCodeExpression*) _tmp806_);
13231 			_tmp807_ = vala_ccode_base_module_get_ccode (self);
13232 			_tmp808_ = _tmp807_;
13233 			_tmp809_ = g_strdup_printf ("_data%d_", block_id);
13234 			_tmp810_ = _tmp809_;
13235 			_tmp811_ = vala_ccode_identifier_new (_tmp810_);
13236 			_tmp812_ = _tmp811_;
13237 			_tmp813_ = g_strdup_printf ("_data%d_", parent_block_id);
13238 			_tmp814_ = _tmp813_;
13239 			_tmp815_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) _tmp812_, _tmp814_);
13240 			_tmp816_ = _tmp815_;
13241 			_tmp817_ = vala_ccode_constant_new ("NULL");
13242 			_tmp818_ = _tmp817_;
13243 			vala_ccode_function_add_assignment (_tmp808_, (ValaCCodeExpression*) _tmp816_, (ValaCCodeExpression*) _tmp818_);
13244 			_vala_ccode_node_unref0 (_tmp818_);
13245 			_vala_ccode_node_unref0 (_tmp816_);
13246 			_g_free0 (_tmp814_);
13247 			_vala_ccode_node_unref0 (_tmp812_);
13248 			_g_free0 (_tmp810_);
13249 			_vala_ccode_node_unref0 (unref_call);
13250 		} else {
13251 			ValaDataType* _tmp819_;
13252 			ValaDataType* _tmp820_;
13253 			ValaDataType* _tmp821_;
13254 			_tmp819_ = vala_ccode_base_module_get_this_type (self);
13255 			_tmp820_ = _vala_code_node_ref0 (_tmp819_);
13256 			_vala_code_node_unref0 (this_type);
13257 			this_type = _tmp820_;
13258 			_tmp821_ = this_type;
13259 			if (_tmp821_ != NULL) {
13260 				ValaDataType* _tmp822_;
13261 				ValaDataType* _tmp823_;
13262 				ValaDataType* _tmp824_;
13263 				gboolean _tmp825_ = FALSE;
13264 				ValaDataType* _tmp826_;
13265 				_tmp822_ = this_type;
13266 				_tmp823_ = vala_data_type_copy (_tmp822_);
13267 				_vala_code_node_unref0 (this_type);
13268 				this_type = _tmp823_;
13269 				_tmp824_ = this_type;
13270 				vala_data_type_set_value_owned (_tmp824_, TRUE);
13271 				_tmp826_ = this_type;
13272 				if (vala_data_type_is_disposable (_tmp826_)) {
13273 					_tmp825_ = !vala_ccode_base_module_is_in_destructor (self);
13274 				} else {
13275 					_tmp825_ = FALSE;
13276 				}
13277 				if (_tmp825_) {
13278 					ValaGLibValue* this_value = NULL;
13279 					ValaDataType* _tmp827_;
13280 					ValaCCodeIdentifier* _tmp828_;
13281 					ValaCCodeIdentifier* _tmp829_;
13282 					ValaGLibValue* _tmp830_;
13283 					ValaGLibValue* _tmp831_;
13284 					ValaCCodeFunction* _tmp832_;
13285 					ValaCCodeFunction* _tmp833_;
13286 					ValaGLibValue* _tmp834_;
13287 					ValaCCodeExpression* _tmp835_;
13288 					ValaCCodeExpression* _tmp836_;
13289 					_tmp827_ = this_type;
13290 					_tmp828_ = vala_ccode_identifier_new ("self");
13291 					_tmp829_ = _tmp828_;
13292 					_tmp830_ = vala_glib_value_new (_tmp827_, (ValaCCodeExpression*) _tmp829_, TRUE);
13293 					_tmp831_ = _tmp830_;
13294 					_vala_ccode_node_unref0 (_tmp829_);
13295 					this_value = _tmp831_;
13296 					_tmp832_ = vala_ccode_base_module_get_ccode (self);
13297 					_tmp833_ = _tmp832_;
13298 					_tmp834_ = this_value;
13299 					_tmp835_ = vala_ccode_base_module_destroy_value (self, (ValaTargetValue*) _tmp834_, FALSE);
13300 					_tmp836_ = _tmp835_;
13301 					vala_ccode_function_add_expression (_tmp833_, _tmp836_);
13302 					_vala_ccode_node_unref0 (_tmp836_);
13303 					_vala_target_value_unref0 (this_value);
13304 				}
13305 			}
13306 		}
13307 		_tmp837_ = vala_ccode_identifier_new ("g_slice_free");
13308 		_tmp838_ = _tmp837_;
13309 		_tmp839_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp838_);
13310 		_tmp840_ = _tmp839_;
13311 		_vala_ccode_node_unref0 (_tmp838_);
13312 		data_free = _tmp840_;
13313 		_tmp841_ = data_free;
13314 		_tmp842_ = struct_name;
13315 		_tmp843_ = vala_ccode_identifier_new (_tmp842_);
13316 		_tmp844_ = _tmp843_;
13317 		vala_ccode_function_call_add_argument (_tmp841_, (ValaCCodeExpression*) _tmp844_);
13318 		_vala_ccode_node_unref0 (_tmp844_);
13319 		_tmp845_ = data_free;
13320 		_tmp846_ = g_strdup_printf ("_data%d_", block_id);
13321 		_tmp847_ = _tmp846_;
13322 		_tmp848_ = vala_ccode_identifier_new (_tmp847_);
13323 		_tmp849_ = _tmp848_;
13324 		vala_ccode_function_call_add_argument (_tmp845_, (ValaCCodeExpression*) _tmp849_);
13325 		_vala_ccode_node_unref0 (_tmp849_);
13326 		_g_free0 (_tmp847_);
13327 		_tmp850_ = vala_ccode_base_module_get_ccode (self);
13328 		_tmp851_ = _tmp850_;
13329 		_tmp852_ = data_free;
13330 		vala_ccode_function_add_expression (_tmp851_, (ValaCCodeExpression*) _tmp852_);
13331 		_tmp853_ = vala_ccode_base_module_get_ccode (self);
13332 		_tmp854_ = _tmp853_;
13333 		vala_ccode_function_close (_tmp854_);
13334 		vala_ccode_base_module_pop_function (self);
13335 		_tmp855_ = self->cfile;
13336 		_tmp856_ = unref_fun;
13337 		vala_ccode_file_add_function_declaration (_tmp855_, _tmp856_);
13338 		_tmp857_ = self->cfile;
13339 		_tmp858_ = unref_fun;
13340 		vala_ccode_file_add_function (_tmp857_, _tmp858_);
13341 		_vala_ccode_node_unref0 (data_free);
13342 		_vala_code_node_unref0 (this_type);
13343 		_vala_ccode_node_unref0 (outer_block);
13344 		_vala_ccode_node_unref0 (unref_fun);
13345 		_vala_ccode_node_unref0 (ccall);
13346 		_vala_ccode_node_unref0 (ref_fun);
13347 		_vala_ccode_node_unref0 (_typedef_);
13348 		_vala_ccode_node_unref0 (data_alloc);
13349 		_vala_ccode_node_unref0 (data);
13350 		_g_free0 (struct_name);
13351 		_vala_code_node_unref0 (parent_block);
13352 	}
13353 	reachable_exit_block = TRUE;
13354 	{
13355 		ValaList* _stmt_list = NULL;
13356 		ValaList* _tmp859_;
13357 		gint _stmt_size = 0;
13358 		ValaList* _tmp860_;
13359 		gint _tmp861_;
13360 		gint _tmp862_;
13361 		gint _stmt_index = 0;
13362 		_tmp859_ = vala_block_get_statements (b);
13363 		_stmt_list = _tmp859_;
13364 		_tmp860_ = _stmt_list;
13365 		_tmp861_ = vala_collection_get_size ((ValaCollection*) _tmp860_);
13366 		_tmp862_ = _tmp861_;
13367 		_stmt_size = _tmp862_;
13368 		_stmt_index = -1;
13369 		while (TRUE) {
13370 			gint _tmp863_;
13371 			gint _tmp864_;
13372 			ValaStatement* stmt = NULL;
13373 			ValaList* _tmp865_;
13374 			gpointer _tmp866_;
13375 			ValaStatement* _tmp867_;
13376 			ValaStatement* _tmp868_;
13377 			ValaSourceReference* _tmp869_;
13378 			ValaSourceReference* _tmp870_;
13379 			ValaStatement* _tmp871_;
13380 			_stmt_index = _stmt_index + 1;
13381 			_tmp863_ = _stmt_index;
13382 			_tmp864_ = _stmt_size;
13383 			if (!(_tmp863_ < _tmp864_)) {
13384 				break;
13385 			}
13386 			_tmp865_ = _stmt_list;
13387 			_tmp866_ = vala_list_get (_tmp865_, _stmt_index);
13388 			stmt = (ValaStatement*) _tmp866_;
13389 			_tmp867_ = stmt;
13390 			if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp867_, VALA_TYPE_RETURN_STATEMENT)) {
13391 				reachable_exit_block = FALSE;
13392 			}
13393 			_tmp868_ = stmt;
13394 			_tmp869_ = vala_code_node_get_source_reference ((ValaCodeNode*) _tmp868_);
13395 			_tmp870_ = _tmp869_;
13396 			vala_ccode_base_module_push_line (self, _tmp870_);
13397 			_tmp871_ = stmt;
13398 			vala_code_node_emit ((ValaCodeNode*) _tmp871_, (ValaCodeGenerator*) self);
13399 			vala_ccode_base_module_pop_line (self);
13400 			_vala_code_node_unref0 (stmt);
13401 		}
13402 		_vala_iterable_unref0 (_stmt_list);
13403 	}
13404 	if (reachable_exit_block) {
13405 		ValaSymbol* _tmp872_;
13406 		ValaSymbol* _tmp873_;
13407 		ValaSymbol* _tmp911_;
13408 		ValaSymbol* _tmp912_;
13409 		gboolean _tmp985_;
13410 		gboolean _tmp986_;
13411 		_tmp872_ = vala_symbol_get_parent_symbol ((ValaSymbol*) b);
13412 		_tmp873_ = _tmp872_;
13413 		if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp873_, VALA_TYPE_METHOD)) {
13414 			ValaMethod* m = NULL;
13415 			ValaSymbol* _tmp874_;
13416 			ValaSymbol* _tmp875_;
13417 			_tmp874_ = vala_symbol_get_parent_symbol ((ValaSymbol*) b);
13418 			_tmp875_ = _tmp874_;
13419 			m = G_TYPE_CHECK_INSTANCE_CAST (_tmp875_, VALA_TYPE_METHOD, ValaMethod);
13420 			{
13421 				ValaList* _postcondition_list = NULL;
13422 				ValaMethod* _tmp876_;
13423 				ValaList* _tmp877_;
13424 				ValaList* _tmp878_;
13425 				gint _postcondition_size = 0;
13426 				ValaList* _tmp879_;
13427 				gint _tmp880_;
13428 				gint _tmp881_;
13429 				gint _postcondition_index = 0;
13430 				_tmp876_ = m;
13431 				_tmp877_ = vala_method_get_postconditions (_tmp876_);
13432 				_tmp878_ = _vala_iterable_ref0 (_tmp877_);
13433 				_postcondition_list = _tmp878_;
13434 				_tmp879_ = _postcondition_list;
13435 				_tmp880_ = vala_collection_get_size ((ValaCollection*) _tmp879_);
13436 				_tmp881_ = _tmp880_;
13437 				_postcondition_size = _tmp881_;
13438 				_postcondition_index = -1;
13439 				while (TRUE) {
13440 					gint _tmp882_;
13441 					gint _tmp883_;
13442 					ValaExpression* postcondition = NULL;
13443 					ValaList* _tmp884_;
13444 					gpointer _tmp885_;
13445 					ValaExpression* _tmp886_;
13446 					_postcondition_index = _postcondition_index + 1;
13447 					_tmp882_ = _postcondition_index;
13448 					_tmp883_ = _postcondition_size;
13449 					if (!(_tmp882_ < _tmp883_)) {
13450 						break;
13451 					}
13452 					_tmp884_ = _postcondition_list;
13453 					_tmp885_ = vala_list_get (_tmp884_, _postcondition_index);
13454 					postcondition = (ValaExpression*) _tmp885_;
13455 					_tmp886_ = postcondition;
13456 					vala_ccode_base_module_create_postcondition_statement (self, _tmp886_);
13457 					_vala_code_node_unref0 (postcondition);
13458 				}
13459 				_vala_iterable_unref0 (_postcondition_list);
13460 			}
13461 		}
13462 		{
13463 			gint i = 0;
13464 			ValaList* _tmp887_;
13465 			gint _tmp888_;
13466 			gint _tmp889_;
13467 			_tmp887_ = local_vars;
13468 			_tmp888_ = vala_collection_get_size ((ValaCollection*) _tmp887_);
13469 			_tmp889_ = _tmp888_;
13470 			i = _tmp889_ - 1;
13471 			{
13472 				gboolean _tmp890_ = FALSE;
13473 				_tmp890_ = TRUE;
13474 				while (TRUE) {
13475 					ValaLocalVariable* local = NULL;
13476 					ValaList* _tmp892_;
13477 					gpointer _tmp893_;
13478 					ValaLocalVariable* _tmp894_;
13479 					gboolean _tmp895_ = FALSE;
13480 					gboolean _tmp896_ = FALSE;
13481 					ValaLocalVariable* _tmp897_;
13482 					gboolean _tmp898_;
13483 					gboolean _tmp899_;
13484 					if (!_tmp890_) {
13485 						gint _tmp891_;
13486 						_tmp891_ = i;
13487 						i = _tmp891_ - 1;
13488 					}
13489 					_tmp890_ = FALSE;
13490 					if (!(i >= 0)) {
13491 						break;
13492 					}
13493 					_tmp892_ = local_vars;
13494 					_tmp893_ = vala_list_get (_tmp892_, i);
13495 					local = (ValaLocalVariable*) _tmp893_;
13496 					_tmp894_ = local;
13497 					vala_symbol_set_active ((ValaSymbol*) _tmp894_, FALSE);
13498 					_tmp897_ = local;
13499 					_tmp898_ = vala_code_node_get_unreachable ((ValaCodeNode*) _tmp897_);
13500 					_tmp899_ = _tmp898_;
13501 					if (!_tmp899_) {
13502 						ValaLocalVariable* _tmp900_;
13503 						gboolean _tmp901_;
13504 						gboolean _tmp902_;
13505 						_tmp900_ = local;
13506 						_tmp901_ = vala_local_variable_get_captured (_tmp900_);
13507 						_tmp902_ = _tmp901_;
13508 						_tmp896_ = !_tmp902_;
13509 					} else {
13510 						_tmp896_ = FALSE;
13511 					}
13512 					if (_tmp896_) {
13513 						ValaLocalVariable* _tmp903_;
13514 						ValaDataType* _tmp904_;
13515 						ValaDataType* _tmp905_;
13516 						_tmp903_ = local;
13517 						_tmp904_ = vala_variable_get_variable_type ((ValaVariable*) _tmp903_);
13518 						_tmp905_ = _tmp904_;
13519 						_tmp895_ = vala_ccode_base_module_requires_destroy (_tmp905_);
13520 					} else {
13521 						_tmp895_ = FALSE;
13522 					}
13523 					if (_tmp895_) {
13524 						ValaCCodeFunction* _tmp906_;
13525 						ValaCCodeFunction* _tmp907_;
13526 						ValaLocalVariable* _tmp908_;
13527 						ValaCCodeExpression* _tmp909_;
13528 						ValaCCodeExpression* _tmp910_;
13529 						_tmp906_ = vala_ccode_base_module_get_ccode (self);
13530 						_tmp907_ = _tmp906_;
13531 						_tmp908_ = local;
13532 						_tmp909_ = vala_ccode_base_module_destroy_local (self, _tmp908_);
13533 						_tmp910_ = _tmp909_;
13534 						vala_ccode_function_add_expression (_tmp907_, _tmp910_);
13535 						_vala_ccode_node_unref0 (_tmp910_);
13536 					}
13537 					_vala_code_node_unref0 (local);
13538 				}
13539 			}
13540 		}
13541 		_tmp911_ = vala_symbol_get_parent_symbol ((ValaSymbol*) b);
13542 		_tmp912_ = _tmp911_;
13543 		if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp912_, VALA_TYPE_METHOD)) {
13544 			ValaMethod* m = NULL;
13545 			ValaSymbol* _tmp913_;
13546 			ValaSymbol* _tmp914_;
13547 			ValaMethod* _tmp915_;
13548 			_tmp913_ = vala_symbol_get_parent_symbol ((ValaSymbol*) b);
13549 			_tmp914_ = _tmp913_;
13550 			_tmp915_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp914_, VALA_TYPE_METHOD, ValaMethod));
13551 			m = _tmp915_;
13552 			{
13553 				ValaList* _param_list = NULL;
13554 				ValaMethod* _tmp916_;
13555 				ValaList* _tmp917_;
13556 				ValaList* _tmp918_;
13557 				gint _param_size = 0;
13558 				ValaList* _tmp919_;
13559 				gint _tmp920_;
13560 				gint _tmp921_;
13561 				gint _param_index = 0;
13562 				_tmp916_ = m;
13563 				_tmp917_ = vala_callable_get_parameters ((ValaCallable*) _tmp916_);
13564 				_tmp918_ = _vala_iterable_ref0 (_tmp917_);
13565 				_param_list = _tmp918_;
13566 				_tmp919_ = _param_list;
13567 				_tmp920_ = vala_collection_get_size ((ValaCollection*) _tmp919_);
13568 				_tmp921_ = _tmp920_;
13569 				_param_size = _tmp921_;
13570 				_param_index = -1;
13571 				while (TRUE) {
13572 					gint _tmp922_;
13573 					gint _tmp923_;
13574 					ValaParameter* param = NULL;
13575 					ValaList* _tmp924_;
13576 					gpointer _tmp925_;
13577 					gboolean _tmp926_ = FALSE;
13578 					gboolean _tmp927_ = FALSE;
13579 					gboolean _tmp928_ = FALSE;
13580 					gboolean _tmp929_ = FALSE;
13581 					ValaParameter* _tmp930_;
13582 					gboolean _tmp931_;
13583 					gboolean _tmp932_;
13584 					_param_index = _param_index + 1;
13585 					_tmp922_ = _param_index;
13586 					_tmp923_ = _param_size;
13587 					if (!(_tmp922_ < _tmp923_)) {
13588 						break;
13589 					}
13590 					_tmp924_ = _param_list;
13591 					_tmp925_ = vala_list_get (_tmp924_, _param_index);
13592 					param = (ValaParameter*) _tmp925_;
13593 					_tmp930_ = param;
13594 					_tmp931_ = vala_parameter_get_captured (_tmp930_);
13595 					_tmp932_ = _tmp931_;
13596 					if (!_tmp932_) {
13597 						ValaParameter* _tmp933_;
13598 						gboolean _tmp934_;
13599 						gboolean _tmp935_;
13600 						_tmp933_ = param;
13601 						_tmp934_ = vala_parameter_get_ellipsis (_tmp933_);
13602 						_tmp935_ = _tmp934_;
13603 						_tmp929_ = !_tmp935_;
13604 					} else {
13605 						_tmp929_ = FALSE;
13606 					}
13607 					if (_tmp929_) {
13608 						ValaParameter* _tmp936_;
13609 						gboolean _tmp937_;
13610 						gboolean _tmp938_;
13611 						_tmp936_ = param;
13612 						_tmp937_ = vala_parameter_get_params_array (_tmp936_);
13613 						_tmp938_ = _tmp937_;
13614 						_tmp928_ = !_tmp938_;
13615 					} else {
13616 						_tmp928_ = FALSE;
13617 					}
13618 					if (_tmp928_) {
13619 						ValaParameter* _tmp939_;
13620 						ValaDataType* _tmp940_;
13621 						ValaDataType* _tmp941_;
13622 						_tmp939_ = param;
13623 						_tmp940_ = vala_variable_get_variable_type ((ValaVariable*) _tmp939_);
13624 						_tmp941_ = _tmp940_;
13625 						_tmp927_ = vala_ccode_base_module_requires_destroy (_tmp941_);
13626 					} else {
13627 						_tmp927_ = FALSE;
13628 					}
13629 					if (_tmp927_) {
13630 						ValaParameter* _tmp942_;
13631 						ValaParameterDirection _tmp943_;
13632 						ValaParameterDirection _tmp944_;
13633 						_tmp942_ = param;
13634 						_tmp943_ = vala_parameter_get_direction (_tmp942_);
13635 						_tmp944_ = _tmp943_;
13636 						_tmp926_ = _tmp944_ == VALA_PARAMETER_DIRECTION_IN;
13637 					} else {
13638 						_tmp926_ = FALSE;
13639 					}
13640 					if (_tmp926_) {
13641 						ValaCCodeFunction* _tmp945_;
13642 						ValaCCodeFunction* _tmp946_;
13643 						ValaParameter* _tmp947_;
13644 						ValaCCodeExpression* _tmp948_;
13645 						ValaCCodeExpression* _tmp949_;
13646 						_tmp945_ = vala_ccode_base_module_get_ccode (self);
13647 						_tmp946_ = _tmp945_;
13648 						_tmp947_ = param;
13649 						_tmp948_ = vala_ccode_base_module_destroy_parameter (self, _tmp947_);
13650 						_tmp949_ = _tmp948_;
13651 						vala_ccode_function_add_expression (_tmp946_, _tmp949_);
13652 						_vala_ccode_node_unref0 (_tmp949_);
13653 					} else {
13654 						gboolean _tmp950_ = FALSE;
13655 						ValaParameter* _tmp951_;
13656 						ValaParameterDirection _tmp952_;
13657 						ValaParameterDirection _tmp953_;
13658 						_tmp951_ = param;
13659 						_tmp952_ = vala_parameter_get_direction (_tmp951_);
13660 						_tmp953_ = _tmp952_;
13661 						if (_tmp953_ == VALA_PARAMETER_DIRECTION_OUT) {
13662 							ValaMethod* _tmp954_;
13663 							gboolean _tmp955_;
13664 							gboolean _tmp956_;
13665 							_tmp954_ = m;
13666 							_tmp955_ = vala_method_get_coroutine (_tmp954_);
13667 							_tmp956_ = _tmp955_;
13668 							_tmp950_ = !_tmp956_;
13669 						} else {
13670 							_tmp950_ = FALSE;
13671 						}
13672 						if (_tmp950_) {
13673 							ValaParameter* _tmp957_;
13674 							_tmp957_ = param;
13675 							vala_ccode_base_module_return_out_parameter (self, _tmp957_);
13676 						}
13677 					}
13678 					_vala_code_node_unref0 (param);
13679 				}
13680 				_vala_iterable_unref0 (_param_list);
13681 			}
13682 			_vala_code_node_unref0 (m);
13683 		} else {
13684 			ValaSymbol* _tmp958_;
13685 			ValaSymbol* _tmp959_;
13686 			_tmp958_ = vala_symbol_get_parent_symbol ((ValaSymbol*) b);
13687 			_tmp959_ = _tmp958_;
13688 			if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp959_, VALA_TYPE_PROPERTY_ACCESSOR)) {
13689 				ValaPropertyAccessor* acc = NULL;
13690 				ValaSymbol* _tmp960_;
13691 				ValaSymbol* _tmp961_;
13692 				ValaPropertyAccessor* _tmp962_;
13693 				gboolean _tmp963_ = FALSE;
13694 				gboolean _tmp964_ = FALSE;
13695 				ValaPropertyAccessor* _tmp965_;
13696 				ValaParameter* _tmp966_;
13697 				ValaParameter* _tmp967_;
13698 				_tmp960_ = vala_symbol_get_parent_symbol ((ValaSymbol*) b);
13699 				_tmp961_ = _tmp960_;
13700 				_tmp962_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp961_, VALA_TYPE_PROPERTY_ACCESSOR, ValaPropertyAccessor));
13701 				acc = _tmp962_;
13702 				_tmp965_ = acc;
13703 				_tmp966_ = vala_property_accessor_get_value_parameter (_tmp965_);
13704 				_tmp967_ = _tmp966_;
13705 				if (_tmp967_ != NULL) {
13706 					ValaPropertyAccessor* _tmp968_;
13707 					ValaParameter* _tmp969_;
13708 					ValaParameter* _tmp970_;
13709 					gboolean _tmp971_;
13710 					gboolean _tmp972_;
13711 					_tmp968_ = acc;
13712 					_tmp969_ = vala_property_accessor_get_value_parameter (_tmp968_);
13713 					_tmp970_ = _tmp969_;
13714 					_tmp971_ = vala_parameter_get_captured (_tmp970_);
13715 					_tmp972_ = _tmp971_;
13716 					_tmp964_ = !_tmp972_;
13717 				} else {
13718 					_tmp964_ = FALSE;
13719 				}
13720 				if (_tmp964_) {
13721 					ValaPropertyAccessor* _tmp973_;
13722 					ValaParameter* _tmp974_;
13723 					ValaParameter* _tmp975_;
13724 					ValaDataType* _tmp976_;
13725 					ValaDataType* _tmp977_;
13726 					_tmp973_ = acc;
13727 					_tmp974_ = vala_property_accessor_get_value_parameter (_tmp973_);
13728 					_tmp975_ = _tmp974_;
13729 					_tmp976_ = vala_variable_get_variable_type ((ValaVariable*) _tmp975_);
13730 					_tmp977_ = _tmp976_;
13731 					_tmp963_ = vala_ccode_base_module_requires_destroy (_tmp977_);
13732 				} else {
13733 					_tmp963_ = FALSE;
13734 				}
13735 				if (_tmp963_) {
13736 					ValaCCodeFunction* _tmp978_;
13737 					ValaCCodeFunction* _tmp979_;
13738 					ValaPropertyAccessor* _tmp980_;
13739 					ValaParameter* _tmp981_;
13740 					ValaParameter* _tmp982_;
13741 					ValaCCodeExpression* _tmp983_;
13742 					ValaCCodeExpression* _tmp984_;
13743 					_tmp978_ = vala_ccode_base_module_get_ccode (self);
13744 					_tmp979_ = _tmp978_;
13745 					_tmp980_ = acc;
13746 					_tmp981_ = vala_property_accessor_get_value_parameter (_tmp980_);
13747 					_tmp982_ = _tmp981_;
13748 					_tmp983_ = vala_ccode_base_module_destroy_parameter (self, _tmp982_);
13749 					_tmp984_ = _tmp983_;
13750 					vala_ccode_function_add_expression (_tmp979_, _tmp984_);
13751 					_vala_ccode_node_unref0 (_tmp984_);
13752 				}
13753 				_vala_code_node_unref0 (acc);
13754 			}
13755 		}
13756 		_tmp985_ = vala_block_get_captured (b);
13757 		_tmp986_ = _tmp985_;
13758 		if (_tmp986_) {
13759 			gint block_id = 0;
13760 			ValaCCodeFunctionCall* data_unref = NULL;
13761 			gchar* _tmp987_;
13762 			gchar* _tmp988_;
13763 			ValaCCodeIdentifier* _tmp989_;
13764 			ValaCCodeIdentifier* _tmp990_;
13765 			ValaCCodeFunctionCall* _tmp991_;
13766 			ValaCCodeFunctionCall* _tmp992_;
13767 			ValaCCodeFunctionCall* _tmp993_;
13768 			gchar* _tmp994_;
13769 			gchar* _tmp995_;
13770 			ValaCCodeExpression* _tmp996_;
13771 			ValaCCodeExpression* _tmp997_;
13772 			ValaCCodeFunction* _tmp998_;
13773 			ValaCCodeFunction* _tmp999_;
13774 			ValaCCodeFunctionCall* _tmp1000_;
13775 			ValaCCodeFunction* _tmp1001_;
13776 			ValaCCodeFunction* _tmp1002_;
13777 			gchar* _tmp1003_;
13778 			gchar* _tmp1004_;
13779 			ValaCCodeExpression* _tmp1005_;
13780 			ValaCCodeExpression* _tmp1006_;
13781 			ValaCCodeConstant* _tmp1007_;
13782 			ValaCCodeConstant* _tmp1008_;
13783 			block_id = vala_ccode_base_module_get_block_id (self, b);
13784 			_tmp987_ = g_strdup_printf ("block%d_data_unref", block_id);
13785 			_tmp988_ = _tmp987_;
13786 			_tmp989_ = vala_ccode_identifier_new (_tmp988_);
13787 			_tmp990_ = _tmp989_;
13788 			_tmp991_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp990_);
13789 			_tmp992_ = _tmp991_;
13790 			_vala_ccode_node_unref0 (_tmp990_);
13791 			_g_free0 (_tmp988_);
13792 			data_unref = _tmp992_;
13793 			_tmp993_ = data_unref;
13794 			_tmp994_ = g_strdup_printf ("_data%d_", block_id);
13795 			_tmp995_ = _tmp994_;
13796 			_tmp996_ = vala_ccode_base_module_get_variable_cexpression (self, _tmp995_);
13797 			_tmp997_ = _tmp996_;
13798 			vala_ccode_function_call_add_argument (_tmp993_, _tmp997_);
13799 			_vala_ccode_node_unref0 (_tmp997_);
13800 			_g_free0 (_tmp995_);
13801 			_tmp998_ = vala_ccode_base_module_get_ccode (self);
13802 			_tmp999_ = _tmp998_;
13803 			_tmp1000_ = data_unref;
13804 			vala_ccode_function_add_expression (_tmp999_, (ValaCCodeExpression*) _tmp1000_);
13805 			_tmp1001_ = vala_ccode_base_module_get_ccode (self);
13806 			_tmp1002_ = _tmp1001_;
13807 			_tmp1003_ = g_strdup_printf ("_data%d_", block_id);
13808 			_tmp1004_ = _tmp1003_;
13809 			_tmp1005_ = vala_ccode_base_module_get_variable_cexpression (self, _tmp1004_);
13810 			_tmp1006_ = _tmp1005_;
13811 			_tmp1007_ = vala_ccode_constant_new ("NULL");
13812 			_tmp1008_ = _tmp1007_;
13813 			vala_ccode_function_add_assignment (_tmp1002_, _tmp1006_, (ValaCCodeExpression*) _tmp1008_);
13814 			_vala_ccode_node_unref0 (_tmp1008_);
13815 			_vala_ccode_node_unref0 (_tmp1006_);
13816 			_g_free0 (_tmp1004_);
13817 			_vala_ccode_node_unref0 (data_unref);
13818 		}
13819 	}
13820 	_tmp1011_ = vala_code_node_get_parent_node ((ValaCodeNode*) b);
13821 	_tmp1012_ = _tmp1011_;
13822 	if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp1012_, VALA_TYPE_BLOCK)) {
13823 		_tmp1010_ = TRUE;
13824 	} else {
13825 		ValaCodeNode* _tmp1013_;
13826 		ValaCodeNode* _tmp1014_;
13827 		_tmp1013_ = vala_code_node_get_parent_node ((ValaCodeNode*) b);
13828 		_tmp1014_ = _tmp1013_;
13829 		_tmp1010_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp1014_, VALA_TYPE_SWITCH_STATEMENT);
13830 	}
13831 	if (_tmp1010_) {
13832 		_tmp1009_ = TRUE;
13833 	} else {
13834 		ValaCodeNode* _tmp1015_;
13835 		ValaCodeNode* _tmp1016_;
13836 		_tmp1015_ = vala_code_node_get_parent_node ((ValaCodeNode*) b);
13837 		_tmp1016_ = _tmp1015_;
13838 		_tmp1009_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp1016_, VALA_TYPE_TRY_STATEMENT);
13839 	}
13840 	if (_tmp1009_) {
13841 		ValaCCodeFunction* _tmp1017_;
13842 		ValaCCodeFunction* _tmp1018_;
13843 		_tmp1017_ = vala_ccode_base_module_get_ccode (self);
13844 		_tmp1018_ = _tmp1017_;
13845 		vala_ccode_function_close (_tmp1018_);
13846 	}
13847 	_tmp1019_ = self->emit_context;
13848 	vala_ccode_base_module_emit_context_pop_symbol (_tmp1019_);
13849 	_vala_iterable_unref0 (local_vars);
13850 }
13851 
13852 static void
vala_ccode_base_module_real_visit_declaration_statement(ValaCodeVisitor * base,ValaDeclarationStatement * stmt)13853 vala_ccode_base_module_real_visit_declaration_statement (ValaCodeVisitor* base,
13854                                                          ValaDeclarationStatement* stmt)
13855 {
13856 	ValaCCodeBaseModule * self;
13857 	ValaSymbol* _tmp0_;
13858 	ValaSymbol* _tmp1_;
13859 	self = (ValaCCodeBaseModule*) base;
13860 	g_return_if_fail (stmt != NULL);
13861 	_tmp0_ = vala_declaration_statement_get_declaration (stmt);
13862 	_tmp1_ = _tmp0_;
13863 	vala_code_node_accept ((ValaCodeNode*) _tmp1_, (ValaCodeVisitor*) self);
13864 }
13865 
13866 ValaCCodeExpression*
vala_ccode_base_module_get_cexpression(ValaCCodeBaseModule * self,const gchar * name)13867 vala_ccode_base_module_get_cexpression (ValaCCodeBaseModule* self,
13868                                         const gchar* name)
13869 {
13870 	ValaCCodeExpression* result = NULL;
13871 	g_return_val_if_fail (self != NULL, NULL);
13872 	g_return_val_if_fail (name != NULL, NULL);
13873 	if (vala_ccode_base_module_is_in_coroutine (self)) {
13874 		ValaCCodeIdentifier* _tmp0_;
13875 		ValaCCodeIdentifier* _tmp1_;
13876 		ValaCCodeMemberAccess* _tmp2_;
13877 		ValaCCodeExpression* _tmp3_;
13878 		_tmp0_ = vala_ccode_identifier_new ("_data_");
13879 		_tmp1_ = _tmp0_;
13880 		_tmp2_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) _tmp1_, name);
13881 		_tmp3_ = (ValaCCodeExpression*) _tmp2_;
13882 		_vala_ccode_node_unref0 (_tmp1_);
13883 		result = _tmp3_;
13884 		return result;
13885 	} else {
13886 		ValaCCodeIdentifier* _tmp4_;
13887 		_tmp4_ = vala_ccode_identifier_new (name);
13888 		result = (ValaCCodeExpression*) _tmp4_;
13889 		return result;
13890 	}
13891 }
13892 
13893 ValaCCodeExpression*
vala_ccode_base_module_get_local_cexpression(ValaCCodeBaseModule * self,ValaLocalVariable * local)13894 vala_ccode_base_module_get_local_cexpression (ValaCCodeBaseModule* self,
13895                                               ValaLocalVariable* local)
13896 {
13897 	gchar* _tmp0_;
13898 	gchar* _tmp1_;
13899 	ValaCCodeExpression* _tmp2_;
13900 	ValaCCodeExpression* _tmp3_;
13901 	ValaCCodeExpression* result = NULL;
13902 	g_return_val_if_fail (self != NULL, NULL);
13903 	g_return_val_if_fail (local != NULL, NULL);
13904 	_tmp0_ = vala_ccode_base_module_get_local_cname (self, local);
13905 	_tmp1_ = _tmp0_;
13906 	_tmp2_ = vala_ccode_base_module_get_cexpression (self, _tmp1_);
13907 	_tmp3_ = _tmp2_;
13908 	_g_free0 (_tmp1_);
13909 	result = _tmp3_;
13910 	return result;
13911 }
13912 
13913 ValaCCodeExpression*
vala_ccode_base_module_get_parameter_cexpression(ValaCCodeBaseModule * self,ValaParameter * param)13914 vala_ccode_base_module_get_parameter_cexpression (ValaCCodeBaseModule* self,
13915                                                   ValaParameter* param)
13916 {
13917 	gchar* _tmp0_;
13918 	gchar* _tmp1_;
13919 	ValaCCodeExpression* _tmp2_;
13920 	ValaCCodeExpression* _tmp3_;
13921 	ValaCCodeExpression* result = NULL;
13922 	g_return_val_if_fail (self != NULL, NULL);
13923 	g_return_val_if_fail (param != NULL, NULL);
13924 	_tmp0_ = vala_get_ccode_name ((ValaCodeNode*) param);
13925 	_tmp1_ = _tmp0_;
13926 	_tmp2_ = vala_ccode_base_module_get_cexpression (self, _tmp1_);
13927 	_tmp3_ = _tmp2_;
13928 	_g_free0 (_tmp1_);
13929 	result = _tmp3_;
13930 	return result;
13931 }
13932 
13933 ValaCCodeExpression*
vala_ccode_base_module_get_variable_cexpression(ValaCCodeBaseModule * self,const gchar * name)13934 vala_ccode_base_module_get_variable_cexpression (ValaCCodeBaseModule* self,
13935                                                  const gchar* name)
13936 {
13937 	gchar* _tmp0_;
13938 	gchar* _tmp1_;
13939 	ValaCCodeExpression* _tmp2_;
13940 	ValaCCodeExpression* _tmp3_;
13941 	ValaCCodeExpression* result = NULL;
13942 	g_return_val_if_fail (self != NULL, NULL);
13943 	g_return_val_if_fail (name != NULL, NULL);
13944 	_tmp0_ = vala_ccode_base_module_get_variable_cname (self, name);
13945 	_tmp1_ = _tmp0_;
13946 	_tmp2_ = vala_ccode_base_module_get_cexpression (self, _tmp1_);
13947 	_tmp3_ = _tmp2_;
13948 	_g_free0 (_tmp1_);
13949 	result = _tmp3_;
13950 	return result;
13951 }
13952 
13953 ValaCCodeExpression*
vala_ccode_base_module_get_this_cexpression(ValaCCodeBaseModule * self)13954 vala_ccode_base_module_get_this_cexpression (ValaCCodeBaseModule* self)
13955 {
13956 	ValaCCodeExpression* _tmp0_;
13957 	ValaCCodeExpression* result = NULL;
13958 	g_return_val_if_fail (self != NULL, NULL);
13959 	_tmp0_ = vala_ccode_base_module_get_cexpression (self, "self");
13960 	result = _tmp0_;
13961 	return result;
13962 }
13963 
13964 ValaCCodeExpression*
vala_ccode_base_module_get_this_interface_cexpression(ValaCCodeBaseModule * self,ValaInterface * iface)13965 vala_ccode_base_module_get_this_interface_cexpression (ValaCCodeBaseModule* self,
13966                                                        ValaInterface* iface)
13967 {
13968 	ValaClass* _tmp0_;
13969 	ValaClass* _tmp1_;
13970 	ValaClass* _tmp12_;
13971 	ValaClass* _tmp13_;
13972 	ValaCCodeFunctionCall* vcast = NULL;
13973 	ValaCCodeIdentifier* _tmp26_;
13974 	ValaCCodeIdentifier* _tmp27_;
13975 	ValaCCodeFunctionCall* _tmp28_;
13976 	ValaCCodeFunctionCall* _tmp29_;
13977 	ValaCCodeFunctionCall* _tmp30_;
13978 	ValaCCodeExpression* _tmp31_;
13979 	ValaCCodeExpression* _tmp32_;
13980 	ValaCCodeFunctionCall* _tmp33_;
13981 	gchar* _tmp34_;
13982 	gchar* _tmp35_;
13983 	ValaCCodeIdentifier* _tmp36_;
13984 	ValaCCodeIdentifier* _tmp37_;
13985 	ValaCCodeFunctionCall* _tmp38_;
13986 	gchar* _tmp39_;
13987 	gchar* _tmp40_;
13988 	ValaCCodeIdentifier* _tmp41_;
13989 	ValaCCodeIdentifier* _tmp42_;
13990 	ValaCCodeExpression* result = NULL;
13991 	g_return_val_if_fail (self != NULL, NULL);
13992 	g_return_val_if_fail (iface != NULL, NULL);
13993 	_tmp0_ = vala_ccode_base_module_get_current_class (self);
13994 	_tmp1_ = _tmp0_;
13995 	if (vala_class_implements (_tmp1_, iface)) {
13996 		ValaClass* _tmp2_;
13997 		ValaClass* _tmp3_;
13998 		gchar* _tmp4_;
13999 		gchar* _tmp5_;
14000 		gchar* _tmp6_;
14001 		gchar* _tmp7_;
14002 		gchar* _tmp8_;
14003 		gchar* _tmp9_;
14004 		ValaCCodeIdentifier* _tmp10_;
14005 		ValaCCodeExpression* _tmp11_;
14006 		_tmp2_ = vala_ccode_base_module_get_current_class (self);
14007 		_tmp3_ = _tmp2_;
14008 		_tmp4_ = vala_get_ccode_lower_case_name ((ValaCodeNode*) _tmp3_, NULL);
14009 		_tmp5_ = _tmp4_;
14010 		_tmp6_ = vala_get_ccode_lower_case_name ((ValaCodeNode*) iface, NULL);
14011 		_tmp7_ = _tmp6_;
14012 		_tmp8_ = g_strdup_printf ("%s_%s_parent_iface", _tmp5_, _tmp7_);
14013 		_tmp9_ = _tmp8_;
14014 		_tmp10_ = vala_ccode_identifier_new (_tmp9_);
14015 		_tmp11_ = (ValaCCodeExpression*) _tmp10_;
14016 		_g_free0 (_tmp9_);
14017 		_g_free0 (_tmp7_);
14018 		_g_free0 (_tmp5_);
14019 		result = _tmp11_;
14020 		return result;
14021 	}
14022 	_tmp12_ = vala_ccode_base_module_get_current_class (self);
14023 	_tmp13_ = _tmp12_;
14024 	if (!vala_class_is_a (_tmp13_, (ValaObjectTypeSymbol*) iface)) {
14025 		ValaClass* _tmp14_;
14026 		ValaClass* _tmp15_;
14027 		ValaSourceReference* _tmp16_;
14028 		ValaSourceReference* _tmp17_;
14029 		ValaClass* _tmp18_;
14030 		ValaClass* _tmp19_;
14031 		gchar* _tmp20_;
14032 		gchar* _tmp21_;
14033 		gchar* _tmp22_;
14034 		gchar* _tmp23_;
14035 		gchar* _tmp24_;
14036 		gchar* _tmp25_;
14037 		_tmp14_ = vala_ccode_base_module_get_current_class (self);
14038 		_tmp15_ = _tmp14_;
14039 		_tmp16_ = vala_code_node_get_source_reference ((ValaCodeNode*) _tmp15_);
14040 		_tmp17_ = _tmp16_;
14041 		_tmp18_ = vala_ccode_base_module_get_current_class (self);
14042 		_tmp19_ = _tmp18_;
14043 		_tmp20_ = vala_symbol_get_full_name ((ValaSymbol*) _tmp19_);
14044 		_tmp21_ = _tmp20_;
14045 		_tmp22_ = vala_symbol_get_full_name ((ValaSymbol*) iface);
14046 		_tmp23_ = _tmp22_;
14047 		_tmp24_ = g_strdup_printf ("internal: `%s' is not a `%s'", _tmp21_, _tmp23_);
14048 		_tmp25_ = _tmp24_;
14049 		vala_report_warning (_tmp17_, _tmp25_);
14050 		_g_free0 (_tmp25_);
14051 		_g_free0 (_tmp23_);
14052 		_g_free0 (_tmp21_);
14053 	}
14054 	_tmp26_ = vala_ccode_identifier_new ("G_TYPE_INSTANCE_GET_INTERFACE");
14055 	_tmp27_ = _tmp26_;
14056 	_tmp28_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp27_);
14057 	_tmp29_ = _tmp28_;
14058 	_vala_ccode_node_unref0 (_tmp27_);
14059 	vcast = _tmp29_;
14060 	_tmp30_ = vcast;
14061 	_tmp31_ = vala_ccode_base_module_get_this_cexpression (self);
14062 	_tmp32_ = _tmp31_;
14063 	vala_ccode_function_call_add_argument (_tmp30_, _tmp32_);
14064 	_vala_ccode_node_unref0 (_tmp32_);
14065 	_tmp33_ = vcast;
14066 	_tmp34_ = vala_get_ccode_type_id ((ValaCodeNode*) iface);
14067 	_tmp35_ = _tmp34_;
14068 	_tmp36_ = vala_ccode_identifier_new (_tmp35_);
14069 	_tmp37_ = _tmp36_;
14070 	vala_ccode_function_call_add_argument (_tmp33_, (ValaCCodeExpression*) _tmp37_);
14071 	_vala_ccode_node_unref0 (_tmp37_);
14072 	_g_free0 (_tmp35_);
14073 	_tmp38_ = vcast;
14074 	_tmp39_ = vala_get_ccode_type_name ((ValaObjectTypeSymbol*) iface);
14075 	_tmp40_ = _tmp39_;
14076 	_tmp41_ = vala_ccode_identifier_new (_tmp40_);
14077 	_tmp42_ = _tmp41_;
14078 	vala_ccode_function_call_add_argument (_tmp38_, (ValaCCodeExpression*) _tmp42_);
14079 	_vala_ccode_node_unref0 (_tmp42_);
14080 	_g_free0 (_tmp40_);
14081 	result = (ValaCCodeExpression*) vcast;
14082 	return result;
14083 }
14084 
14085 ValaCCodeExpression*
vala_ccode_base_module_get_inner_error_cexpression(ValaCCodeBaseModule * self)14086 vala_ccode_base_module_get_inner_error_cexpression (ValaCCodeBaseModule* self)
14087 {
14088 	gint _tmp0_;
14089 	gint _tmp1_;
14090 	gchar* _tmp2_;
14091 	gchar* _tmp3_;
14092 	ValaCCodeExpression* _tmp4_;
14093 	ValaCCodeExpression* _tmp5_;
14094 	ValaCCodeExpression* result = NULL;
14095 	g_return_val_if_fail (self != NULL, NULL);
14096 	_tmp0_ = vala_ccode_base_module_get_current_inner_error_id (self);
14097 	_tmp1_ = _tmp0_;
14098 	_tmp2_ = g_strdup_printf ("_inner_error%d_", _tmp1_);
14099 	_tmp3_ = _tmp2_;
14100 	_tmp4_ = vala_ccode_base_module_get_cexpression (self, _tmp3_);
14101 	_tmp5_ = _tmp4_;
14102 	_g_free0 (_tmp3_);
14103 	result = _tmp5_;
14104 	return result;
14105 }
14106 
14107 static gchar
string_get(const gchar * self,glong index)14108 string_get (const gchar* self,
14109             glong index)
14110 {
14111 	gchar _tmp0_;
14112 	gchar result = '\0';
14113 	g_return_val_if_fail (self != NULL, '\0');
14114 	_tmp0_ = ((gchar*) self)[index];
14115 	result = _tmp0_;
14116 	return result;
14117 }
14118 
14119 gchar*
vala_ccode_base_module_get_local_cname(ValaCCodeBaseModule * self,ValaLocalVariable * local)14120 vala_ccode_base_module_get_local_cname (ValaCCodeBaseModule* self,
14121                                         ValaLocalVariable* local)
14122 {
14123 	gchar* cname = NULL;
14124 	const gchar* _tmp0_;
14125 	const gchar* _tmp1_;
14126 	gchar* _tmp2_;
14127 	const gchar* _tmp3_;
14128 	gchar* result = NULL;
14129 	g_return_val_if_fail (self != NULL, NULL);
14130 	g_return_val_if_fail (local != NULL, NULL);
14131 	_tmp0_ = vala_symbol_get_name ((ValaSymbol*) local);
14132 	_tmp1_ = _tmp0_;
14133 	_tmp2_ = vala_ccode_base_module_get_variable_cname (self, _tmp1_);
14134 	cname = _tmp2_;
14135 	_tmp3_ = cname;
14136 	if (g_ascii_isdigit (string_get (_tmp3_, (glong) 0))) {
14137 		const gchar* _tmp4_;
14138 		gchar* _tmp5_;
14139 		_tmp4_ = cname;
14140 		_tmp5_ = g_strdup_printf ("_%s_", _tmp4_);
14141 		_g_free0 (cname);
14142 		cname = _tmp5_;
14143 	}
14144 	if (vala_ccode_base_module_is_in_coroutine (self)) {
14145 		gint clash_index = 0;
14146 		ValaCCodeBaseModuleEmitContext* _tmp6_;
14147 		ValaMap* _tmp7_;
14148 		gpointer _tmp8_;
14149 		_tmp6_ = self->emit_context;
14150 		_tmp7_ = _tmp6_->closure_variable_clash_map;
14151 		_tmp8_ = vala_map_get (_tmp7_, local);
14152 		clash_index = (gint) ((gintptr) _tmp8_);
14153 		if (clash_index > 0) {
14154 			const gchar* _tmp9_;
14155 			gchar* _tmp10_;
14156 			_tmp9_ = cname;
14157 			_tmp10_ = g_strdup_printf ("_vala%d_%s", clash_index, _tmp9_);
14158 			_g_free0 (cname);
14159 			cname = _tmp10_;
14160 		}
14161 	}
14162 	result = cname;
14163 	return result;
14164 }
14165 
14166 gchar*
vala_ccode_base_module_get_variable_cname(ValaCCodeBaseModule * self,const gchar * name)14167 vala_ccode_base_module_get_variable_cname (ValaCCodeBaseModule* self,
14168                                            const gchar* name)
14169 {
14170 	gchar* result = NULL;
14171 	g_return_val_if_fail (self != NULL, NULL);
14172 	g_return_val_if_fail (name != NULL, NULL);
14173 	if (string_get (name, (glong) 0) == '.') {
14174 		ValaMap* _tmp1_;
14175 		ValaMap* _tmp2_;
14176 		ValaMap* _tmp11_;
14177 		ValaMap* _tmp12_;
14178 		gpointer _tmp13_;
14179 		if (g_strcmp0 (name, ".result") == 0) {
14180 			gchar* _tmp0_;
14181 			_tmp0_ = g_strdup ("result");
14182 			result = _tmp0_;
14183 			return result;
14184 		}
14185 		_tmp1_ = vala_ccode_base_module_get_variable_name_map (self);
14186 		_tmp2_ = _tmp1_;
14187 		if (!vala_map_contains (_tmp2_, name)) {
14188 			ValaMap* _tmp3_;
14189 			ValaMap* _tmp4_;
14190 			gint _tmp5_;
14191 			gint _tmp6_;
14192 			gchar* _tmp7_;
14193 			gchar* _tmp8_;
14194 			gint _tmp9_;
14195 			gint _tmp10_;
14196 			_tmp3_ = vala_ccode_base_module_get_variable_name_map (self);
14197 			_tmp4_ = _tmp3_;
14198 			_tmp5_ = vala_ccode_base_module_get_next_temp_var_id (self);
14199 			_tmp6_ = _tmp5_;
14200 			_tmp7_ = g_strdup_printf ("_tmp%d_", _tmp6_);
14201 			_tmp8_ = _tmp7_;
14202 			vala_map_set (_tmp4_, name, _tmp8_);
14203 			_g_free0 (_tmp8_);
14204 			_tmp9_ = vala_ccode_base_module_get_next_temp_var_id (self);
14205 			_tmp10_ = _tmp9_;
14206 			vala_ccode_base_module_set_next_temp_var_id (self, _tmp10_ + 1);
14207 		}
14208 		_tmp11_ = vala_ccode_base_module_get_variable_name_map (self);
14209 		_tmp12_ = _tmp11_;
14210 		_tmp13_ = vala_map_get (_tmp12_, name);
14211 		result = (gchar*) _tmp13_;
14212 		return result;
14213 	} else {
14214 		ValaSet* _tmp14_;
14215 		_tmp14_ = vala_ccode_base_module_reserved_identifiers;
14216 		if (vala_collection_contains ((ValaCollection*) _tmp14_, name)) {
14217 			gchar* _tmp15_;
14218 			_tmp15_ = g_strdup_printf ("_%s_", name);
14219 			result = _tmp15_;
14220 			return result;
14221 		} else {
14222 			gchar* _tmp16_;
14223 			_tmp16_ = g_strdup (name);
14224 			result = _tmp16_;
14225 			return result;
14226 		}
14227 	}
14228 }
14229 
14230 gboolean
vala_ccode_base_module_is_simple_struct_creation(ValaCCodeBaseModule * self,ValaVariable * variable,ValaExpression * expr)14231 vala_ccode_base_module_is_simple_struct_creation (ValaCCodeBaseModule* self,
14232                                                   ValaVariable* variable,
14233                                                   ValaExpression* expr)
14234 {
14235 	ValaStruct* st = NULL;
14236 	ValaDataType* _tmp0_;
14237 	ValaDataType* _tmp1_;
14238 	ValaTypeSymbol* _tmp2_;
14239 	ValaTypeSymbol* _tmp3_;
14240 	ValaObjectCreationExpression* creation = NULL;
14241 	ValaObjectCreationExpression* _tmp4_;
14242 	gboolean _tmp5_ = FALSE;
14243 	gboolean _tmp6_ = FALSE;
14244 	gboolean _tmp7_ = FALSE;
14245 	gboolean _tmp8_ = FALSE;
14246 	gboolean _tmp9_ = FALSE;
14247 	ValaObjectCreationExpression* _tmp10_;
14248 	gboolean result = FALSE;
14249 	g_return_val_if_fail (self != NULL, FALSE);
14250 	g_return_val_if_fail (variable != NULL, FALSE);
14251 	g_return_val_if_fail (expr != NULL, FALSE);
14252 	_tmp0_ = vala_variable_get_variable_type (variable);
14253 	_tmp1_ = _tmp0_;
14254 	_tmp2_ = vala_data_type_get_type_symbol (_tmp1_);
14255 	_tmp3_ = _tmp2_;
14256 	st = G_TYPE_CHECK_INSTANCE_TYPE (_tmp3_, VALA_TYPE_STRUCT) ? ((ValaStruct*) _tmp3_) : NULL;
14257 	_tmp4_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (expr, VALA_TYPE_OBJECT_CREATION_EXPRESSION) ? ((ValaObjectCreationExpression*) expr) : NULL);
14258 	creation = _tmp4_;
14259 	_tmp10_ = creation;
14260 	if (_tmp10_ != NULL) {
14261 		ValaStruct* _tmp11_;
14262 		_tmp11_ = st;
14263 		_tmp9_ = _tmp11_ != NULL;
14264 	} else {
14265 		_tmp9_ = FALSE;
14266 	}
14267 	if (_tmp9_) {
14268 		gboolean _tmp12_ = FALSE;
14269 		ValaStruct* _tmp13_;
14270 		_tmp13_ = st;
14271 		if (!vala_struct_is_simple_type (_tmp13_)) {
14272 			_tmp12_ = TRUE;
14273 		} else {
14274 			ValaStruct* _tmp14_;
14275 			gchar* _tmp15_;
14276 			gchar* _tmp16_;
14277 			_tmp14_ = st;
14278 			_tmp15_ = vala_get_ccode_name ((ValaCodeNode*) _tmp14_);
14279 			_tmp16_ = _tmp15_;
14280 			_tmp12_ = g_strcmp0 (_tmp16_, "va_list") == 0;
14281 			_g_free0 (_tmp16_);
14282 		}
14283 		_tmp8_ = _tmp12_;
14284 	} else {
14285 		_tmp8_ = FALSE;
14286 	}
14287 	if (_tmp8_) {
14288 		ValaDataType* _tmp17_;
14289 		ValaDataType* _tmp18_;
14290 		gboolean _tmp19_;
14291 		gboolean _tmp20_;
14292 		_tmp17_ = vala_variable_get_variable_type (variable);
14293 		_tmp18_ = _tmp17_;
14294 		_tmp19_ = vala_data_type_get_nullable (_tmp18_);
14295 		_tmp20_ = _tmp19_;
14296 		_tmp7_ = !_tmp20_;
14297 	} else {
14298 		_tmp7_ = FALSE;
14299 	}
14300 	if (_tmp7_) {
14301 		ValaDataType* _tmp21_;
14302 		ValaDataType* _tmp22_;
14303 		ValaTypeSymbol* _tmp23_;
14304 		ValaTypeSymbol* _tmp24_;
14305 		ValaStruct* _tmp25_;
14306 		_tmp21_ = vala_variable_get_variable_type (variable);
14307 		_tmp22_ = _tmp21_;
14308 		_tmp23_ = vala_data_type_get_type_symbol (_tmp22_);
14309 		_tmp24_ = _tmp23_;
14310 		_tmp25_ = self->gvalue_type;
14311 		_tmp6_ = _tmp24_ != G_TYPE_CHECK_INSTANCE_CAST (_tmp25_, VALA_TYPE_TYPESYMBOL, ValaTypeSymbol);
14312 	} else {
14313 		_tmp6_ = FALSE;
14314 	}
14315 	if (_tmp6_) {
14316 		ValaObjectCreationExpression* _tmp26_;
14317 		ValaList* _tmp27_;
14318 		gint _tmp28_;
14319 		gint _tmp29_;
14320 		_tmp26_ = creation;
14321 		_tmp27_ = vala_object_creation_expression_get_object_initializer (_tmp26_);
14322 		_tmp28_ = vala_collection_get_size ((ValaCollection*) _tmp27_);
14323 		_tmp29_ = _tmp28_;
14324 		_tmp5_ = _tmp29_ == 0;
14325 	} else {
14326 		_tmp5_ = FALSE;
14327 	}
14328 	if (_tmp5_) {
14329 		result = TRUE;
14330 		_vala_code_node_unref0 (creation);
14331 		return result;
14332 	} else {
14333 		result = FALSE;
14334 		_vala_code_node_unref0 (creation);
14335 		return result;
14336 	}
14337 	_vala_code_node_unref0 (creation);
14338 }
14339 
14340 static gboolean
vala_ccode_base_module_is_foreach_element_variable(ValaLocalVariable * local)14341 vala_ccode_base_module_is_foreach_element_variable (ValaLocalVariable* local)
14342 {
14343 	ValaSymbol* block = NULL;
14344 	ValaSymbol* _tmp0_;
14345 	ValaSymbol* _tmp1_;
14346 	ValaSymbol* _tmp2_;
14347 	ValaSymbol* _tmp3_;
14348 	gboolean result = FALSE;
14349 	g_return_val_if_fail (local != NULL, FALSE);
14350 	_tmp0_ = vala_symbol_get_parent_symbol ((ValaSymbol*) local);
14351 	_tmp1_ = _tmp0_;
14352 	_tmp2_ = _vala_code_node_ref0 (_tmp1_);
14353 	block = _tmp2_;
14354 	_tmp3_ = block;
14355 	if (_tmp3_ != NULL) {
14356 		ValaForeachStatement* stmt = NULL;
14357 		ValaSymbol* _tmp4_;
14358 		ValaSymbol* _tmp5_;
14359 		ValaSymbol* _tmp6_;
14360 		ValaForeachStatement* _tmp7_;
14361 		gboolean _tmp8_ = FALSE;
14362 		gboolean _tmp9_ = FALSE;
14363 		ValaForeachStatement* _tmp10_;
14364 		_tmp4_ = block;
14365 		_tmp5_ = vala_symbol_get_parent_symbol (_tmp4_);
14366 		_tmp6_ = _tmp5_;
14367 		_tmp7_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (_tmp6_, VALA_TYPE_FOREACH_STATEMENT) ? ((ValaForeachStatement*) _tmp6_) : NULL);
14368 		stmt = _tmp7_;
14369 		_tmp10_ = stmt;
14370 		if (_tmp10_ != NULL) {
14371 			ValaForeachStatement* _tmp11_;
14372 			gboolean _tmp12_;
14373 			gboolean _tmp13_;
14374 			_tmp11_ = stmt;
14375 			_tmp12_ = vala_foreach_statement_get_use_iterator (_tmp11_);
14376 			_tmp13_ = _tmp12_;
14377 			_tmp9_ = !_tmp13_;
14378 		} else {
14379 			_tmp9_ = FALSE;
14380 		}
14381 		if (_tmp9_) {
14382 			ValaForeachStatement* _tmp14_;
14383 			ValaLocalVariable* _tmp15_;
14384 			ValaLocalVariable* _tmp16_;
14385 			_tmp14_ = stmt;
14386 			_tmp15_ = vala_foreach_statement_get_element_variable (_tmp14_);
14387 			_tmp16_ = _tmp15_;
14388 			_tmp8_ = _tmp16_ == local;
14389 		} else {
14390 			_tmp8_ = FALSE;
14391 		}
14392 		if (_tmp8_) {
14393 			result = TRUE;
14394 			_vala_code_node_unref0 (stmt);
14395 			_vala_code_node_unref0 (block);
14396 			return result;
14397 		}
14398 		_vala_code_node_unref0 (stmt);
14399 	}
14400 	result = FALSE;
14401 	_vala_code_node_unref0 (block);
14402 	return result;
14403 }
14404 
14405 static void
vala_ccode_base_module_real_visit_local_variable(ValaCodeVisitor * base,ValaLocalVariable * local)14406 vala_ccode_base_module_real_visit_local_variable (ValaCodeVisitor* base,
14407                                                   ValaLocalVariable* local)
14408 {
14409 	ValaCCodeBaseModule * self;
14410 	ValaDataType* _tmp0_;
14411 	ValaDataType* _tmp1_;
14412 	ValaCCodeFile* _tmp2_;
14413 	gboolean _tmp3_ = FALSE;
14414 	gboolean _tmp4_;
14415 	gboolean _tmp5_;
14416 	gboolean declared = FALSE;
14417 	ValaExpression* _tmp73_;
14418 	ValaExpression* _tmp74_;
14419 	ValaCCodeExpression* rhs = NULL;
14420 	gboolean _tmp79_ = FALSE;
14421 	ValaExpression* _tmp80_;
14422 	ValaExpression* _tmp81_;
14423 	ValaCCodeExpression* _tmp172_;
14424 	gboolean _tmp181_ = FALSE;
14425 	ValaExpression* _tmp182_;
14426 	ValaExpression* _tmp183_;
14427 	self = (ValaCCodeBaseModule*) base;
14428 	g_return_if_fail (local != NULL);
14429 	_tmp0_ = vala_variable_get_variable_type ((ValaVariable*) local);
14430 	_tmp1_ = _tmp0_;
14431 	_tmp2_ = self->cfile;
14432 	vala_ccode_base_module_generate_type_declaration (self, _tmp1_, _tmp2_);
14433 	_tmp4_ = vala_local_variable_get_captured (local);
14434 	_tmp5_ = _tmp4_;
14435 	if (!_tmp5_) {
14436 		_tmp3_ = TRUE;
14437 	} else {
14438 		_tmp3_ = vala_ccode_base_module_is_foreach_element_variable (local);
14439 	}
14440 	declared = _tmp3_;
14441 	if (declared) {
14442 		if (vala_ccode_base_module_is_in_coroutine (self)) {
14443 			gint count = 0;
14444 			ValaCCodeBaseModuleEmitContext* _tmp6_;
14445 			ValaMap* _tmp7_;
14446 			const gchar* _tmp8_;
14447 			const gchar* _tmp9_;
14448 			gpointer _tmp10_;
14449 			ValaCCodeBaseModuleEmitContext* _tmp13_;
14450 			ValaMap* _tmp14_;
14451 			const gchar* _tmp15_;
14452 			const gchar* _tmp16_;
14453 			ValaCCodeStruct* _tmp17_;
14454 			ValaDataType* _tmp18_;
14455 			ValaDataType* _tmp19_;
14456 			gchar* _tmp20_;
14457 			gchar* _tmp21_;
14458 			gchar* _tmp22_;
14459 			gchar* _tmp23_;
14460 			ValaDataType* _tmp24_;
14461 			ValaDataType* _tmp25_;
14462 			ValaCCodeDeclaratorSuffix* _tmp26_;
14463 			ValaCCodeDeclaratorSuffix* _tmp27_;
14464 			_tmp6_ = self->emit_context;
14465 			_tmp7_ = _tmp6_->closure_variable_count_map;
14466 			_tmp8_ = vala_symbol_get_name ((ValaSymbol*) local);
14467 			_tmp9_ = _tmp8_;
14468 			_tmp10_ = vala_map_get (_tmp7_, _tmp9_);
14469 			count = (gint) ((gintptr) _tmp10_);
14470 			if (count > 0) {
14471 				ValaCCodeBaseModuleEmitContext* _tmp11_;
14472 				ValaMap* _tmp12_;
14473 				_tmp11_ = self->emit_context;
14474 				_tmp12_ = _tmp11_->closure_variable_clash_map;
14475 				vala_map_set (_tmp12_, local, (gpointer) ((gintptr) count));
14476 			}
14477 			_tmp13_ = self->emit_context;
14478 			_tmp14_ = _tmp13_->closure_variable_count_map;
14479 			_tmp15_ = vala_symbol_get_name ((ValaSymbol*) local);
14480 			_tmp16_ = _tmp15_;
14481 			vala_map_set (_tmp14_, _tmp16_, (gpointer) ((gintptr) (count + 1)));
14482 			_tmp17_ = self->closure_struct;
14483 			_tmp18_ = vala_variable_get_variable_type ((ValaVariable*) local);
14484 			_tmp19_ = _tmp18_;
14485 			_tmp20_ = vala_get_ccode_name ((ValaCodeNode*) _tmp19_);
14486 			_tmp21_ = _tmp20_;
14487 			_tmp22_ = vala_ccode_base_module_get_local_cname (self, local);
14488 			_tmp23_ = _tmp22_;
14489 			_tmp24_ = vala_variable_get_variable_type ((ValaVariable*) local);
14490 			_tmp25_ = _tmp24_;
14491 			_tmp26_ = vala_ccode_base_module_get_ccode_declarator_suffix (self, _tmp25_);
14492 			_tmp27_ = _tmp26_;
14493 			vala_ccode_struct_add_field (_tmp17_, _tmp21_, _tmp23_, 0, _tmp27_);
14494 			_vala_ccode_declarator_suffix_unref0 (_tmp27_);
14495 			_g_free0 (_tmp23_);
14496 			_g_free0 (_tmp21_);
14497 		} else {
14498 			ValaCCodeVariableDeclarator* cvar = NULL;
14499 			gchar* _tmp28_;
14500 			gchar* _tmp29_;
14501 			ValaDataType* _tmp30_;
14502 			ValaDataType* _tmp31_;
14503 			ValaCCodeDeclaratorSuffix* _tmp32_;
14504 			ValaCCodeDeclaratorSuffix* _tmp33_;
14505 			ValaCCodeVariableDeclarator* _tmp34_;
14506 			ValaCCodeVariableDeclarator* _tmp35_;
14507 			ValaCCodeExpression* size = NULL;
14508 			ValaCCodeExpression* _tmp36_ = NULL;
14509 			gboolean _tmp37_;
14510 			ValaCCodeFunction* _tmp66_;
14511 			ValaCCodeFunction* _tmp67_;
14512 			ValaDataType* _tmp68_;
14513 			ValaDataType* _tmp69_;
14514 			gchar* _tmp70_;
14515 			gchar* _tmp71_;
14516 			ValaCCodeVariableDeclarator* _tmp72_;
14517 			_tmp28_ = vala_ccode_base_module_get_local_cname (self, local);
14518 			_tmp29_ = _tmp28_;
14519 			_tmp30_ = vala_variable_get_variable_type ((ValaVariable*) local);
14520 			_tmp31_ = _tmp30_;
14521 			_tmp32_ = vala_ccode_base_module_get_ccode_declarator_suffix (self, _tmp31_);
14522 			_tmp33_ = _tmp32_;
14523 			_tmp34_ = vala_ccode_variable_declarator_new (_tmp29_, NULL, _tmp33_);
14524 			_tmp35_ = _tmp34_;
14525 			_vala_ccode_declarator_suffix_unref0 (_tmp33_);
14526 			_g_free0 (_tmp29_);
14527 			cvar = _tmp35_;
14528 			size = NULL;
14529 			_tmp37_ = vala_ccode_base_module_requires_memset_init (self, (ValaVariable*) local, &_tmp36_);
14530 			_vala_ccode_node_unref0 (size);
14531 			size = _tmp36_;
14532 			if (!_tmp37_) {
14533 				ValaCCodeVariableDeclarator* _tmp38_;
14534 				ValaDataType* _tmp39_;
14535 				ValaDataType* _tmp40_;
14536 				ValaCCodeExpression* _tmp41_;
14537 				ValaCCodeExpression* _tmp42_;
14538 				ValaCCodeVariableDeclarator* _tmp43_;
14539 				_tmp38_ = cvar;
14540 				_tmp39_ = vala_variable_get_variable_type ((ValaVariable*) local);
14541 				_tmp40_ = _tmp39_;
14542 				_tmp41_ = vala_ccode_base_module_default_value_for_type (self, _tmp40_, TRUE, FALSE);
14543 				_tmp42_ = _tmp41_;
14544 				vala_ccode_variable_declarator_set_initializer (_tmp38_, _tmp42_);
14545 				_vala_ccode_node_unref0 (_tmp42_);
14546 				_tmp43_ = cvar;
14547 				vala_ccode_variable_declarator_set_init0 (_tmp43_, TRUE);
14548 			} else {
14549 				gboolean _tmp44_ = FALSE;
14550 				ValaCCodeExpression* _tmp45_;
14551 				_tmp45_ = size;
14552 				if (_tmp45_ != NULL) {
14553 					ValaExpression* _tmp46_;
14554 					ValaExpression* _tmp47_;
14555 					_tmp46_ = vala_variable_get_initializer ((ValaVariable*) local);
14556 					_tmp47_ = _tmp46_;
14557 					_tmp44_ = _tmp47_ == NULL;
14558 				} else {
14559 					_tmp44_ = FALSE;
14560 				}
14561 				if (_tmp44_) {
14562 					ValaCCodeFile* _tmp48_;
14563 					ValaCCodeFunctionCall* memset_call = NULL;
14564 					ValaCCodeIdentifier* _tmp49_;
14565 					ValaCCodeIdentifier* _tmp50_;
14566 					ValaCCodeFunctionCall* _tmp51_;
14567 					ValaCCodeFunctionCall* _tmp52_;
14568 					ValaCCodeFunctionCall* _tmp53_;
14569 					const gchar* _tmp54_;
14570 					const gchar* _tmp55_;
14571 					ValaCCodeExpression* _tmp56_;
14572 					ValaCCodeExpression* _tmp57_;
14573 					ValaCCodeFunctionCall* _tmp58_;
14574 					ValaCCodeConstant* _tmp59_;
14575 					ValaCCodeConstant* _tmp60_;
14576 					ValaCCodeFunctionCall* _tmp61_;
14577 					ValaCCodeExpression* _tmp62_;
14578 					ValaCCodeFunction* _tmp63_;
14579 					ValaCCodeFunction* _tmp64_;
14580 					ValaCCodeFunctionCall* _tmp65_;
14581 					_tmp48_ = self->cfile;
14582 					vala_ccode_file_add_include (_tmp48_, "string.h", FALSE);
14583 					_tmp49_ = vala_ccode_identifier_new ("memset");
14584 					_tmp50_ = _tmp49_;
14585 					_tmp51_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp50_);
14586 					_tmp52_ = _tmp51_;
14587 					_vala_ccode_node_unref0 (_tmp50_);
14588 					memset_call = _tmp52_;
14589 					_tmp53_ = memset_call;
14590 					_tmp54_ = vala_symbol_get_name ((ValaSymbol*) local);
14591 					_tmp55_ = _tmp54_;
14592 					_tmp56_ = vala_ccode_base_module_get_variable_cexpression (self, _tmp55_);
14593 					_tmp57_ = _tmp56_;
14594 					vala_ccode_function_call_add_argument (_tmp53_, _tmp57_);
14595 					_vala_ccode_node_unref0 (_tmp57_);
14596 					_tmp58_ = memset_call;
14597 					_tmp59_ = vala_ccode_constant_new ("0");
14598 					_tmp60_ = _tmp59_;
14599 					vala_ccode_function_call_add_argument (_tmp58_, (ValaCCodeExpression*) _tmp60_);
14600 					_vala_ccode_node_unref0 (_tmp60_);
14601 					_tmp61_ = memset_call;
14602 					_tmp62_ = size;
14603 					vala_ccode_function_call_add_argument (_tmp61_, _tmp62_);
14604 					_tmp63_ = vala_ccode_base_module_get_ccode (self);
14605 					_tmp64_ = _tmp63_;
14606 					_tmp65_ = memset_call;
14607 					vala_ccode_function_add_expression (_tmp64_, (ValaCCodeExpression*) _tmp65_);
14608 					_vala_ccode_node_unref0 (memset_call);
14609 				}
14610 			}
14611 			_tmp66_ = vala_ccode_base_module_get_ccode (self);
14612 			_tmp67_ = _tmp66_;
14613 			_tmp68_ = vala_variable_get_variable_type ((ValaVariable*) local);
14614 			_tmp69_ = _tmp68_;
14615 			_tmp70_ = vala_get_ccode_name ((ValaCodeNode*) _tmp69_);
14616 			_tmp71_ = _tmp70_;
14617 			_tmp72_ = cvar;
14618 			vala_ccode_function_add_declaration (_tmp67_, _tmp71_, (ValaCCodeDeclarator*) _tmp72_, 0);
14619 			_g_free0 (_tmp71_);
14620 			_vala_ccode_node_unref0 (size);
14621 			_vala_ccode_node_unref0 (cvar);
14622 		}
14623 	}
14624 	_tmp73_ = vala_variable_get_initializer ((ValaVariable*) local);
14625 	_tmp74_ = _tmp73_;
14626 	if (_tmp74_ != NULL) {
14627 		ValaExpression* _tmp75_;
14628 		ValaExpression* _tmp76_;
14629 		ValaExpression* _tmp77_;
14630 		ValaExpression* _tmp78_;
14631 		_tmp75_ = vala_variable_get_initializer ((ValaVariable*) local);
14632 		_tmp76_ = _tmp75_;
14633 		vala_code_node_emit ((ValaCodeNode*) _tmp76_, (ValaCodeGenerator*) self);
14634 		_tmp77_ = vala_variable_get_initializer ((ValaVariable*) local);
14635 		_tmp78_ = _tmp77_;
14636 		vala_code_visitor_visit_end_full_expression ((ValaCodeVisitor*) self, _tmp78_);
14637 	}
14638 	rhs = NULL;
14639 	_tmp80_ = vala_variable_get_initializer ((ValaVariable*) local);
14640 	_tmp81_ = _tmp80_;
14641 	if (_tmp81_ != NULL) {
14642 		ValaExpression* _tmp82_;
14643 		ValaExpression* _tmp83_;
14644 		ValaCCodeExpression* _tmp84_;
14645 		_tmp82_ = vala_variable_get_initializer ((ValaVariable*) local);
14646 		_tmp83_ = _tmp82_;
14647 		_tmp84_ = vala_get_cvalue (_tmp83_);
14648 		_tmp79_ = _tmp84_ != NULL;
14649 	} else {
14650 		_tmp79_ = FALSE;
14651 	}
14652 	if (_tmp79_) {
14653 		ValaExpression* _tmp85_;
14654 		ValaExpression* _tmp86_;
14655 		ValaCCodeExpression* _tmp87_;
14656 		ValaCCodeExpression* _tmp88_;
14657 		_tmp85_ = vala_variable_get_initializer ((ValaVariable*) local);
14658 		_tmp86_ = _tmp85_;
14659 		_tmp87_ = vala_get_cvalue (_tmp86_);
14660 		_tmp88_ = _vala_ccode_node_ref0 (_tmp87_);
14661 		_vala_ccode_node_unref0 (rhs);
14662 		rhs = _tmp88_;
14663 	}
14664 	if (declared) {
14665 		ValaDataType* _tmp89_;
14666 		ValaDataType* _tmp90_;
14667 		_tmp89_ = vala_variable_get_variable_type ((ValaVariable*) local);
14668 		_tmp90_ = _tmp89_;
14669 		if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp90_, VALA_TYPE_ARRAY_TYPE)) {
14670 			ValaArrayType* array_type = NULL;
14671 			ValaDataType* _tmp91_;
14672 			ValaDataType* _tmp92_;
14673 			ValaArrayType* _tmp93_;
14674 			ValaArrayType* _tmp94_;
14675 			gboolean _tmp95_;
14676 			gboolean _tmp96_;
14677 			_tmp91_ = vala_variable_get_variable_type ((ValaVariable*) local);
14678 			_tmp92_ = _tmp91_;
14679 			_tmp93_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp92_, VALA_TYPE_ARRAY_TYPE, ValaArrayType));
14680 			array_type = _tmp93_;
14681 			_tmp94_ = array_type;
14682 			_tmp95_ = vala_array_type_get_fixed_length (_tmp94_);
14683 			_tmp96_ = _tmp95_;
14684 			if (!_tmp96_) {
14685 				ValaArrayType* _tmp117_;
14686 				gint _tmp118_;
14687 				gint _tmp119_;
14688 				{
14689 					gint dim = 0;
14690 					dim = 1;
14691 					{
14692 						gboolean _tmp97_ = FALSE;
14693 						_tmp97_ = TRUE;
14694 						while (TRUE) {
14695 							ValaArrayType* _tmp99_;
14696 							gint _tmp100_;
14697 							gint _tmp101_;
14698 							ValaLocalVariable* len_var = NULL;
14699 							ValaArrayType* _tmp102_;
14700 							ValaDataType* _tmp103_;
14701 							ValaDataType* _tmp104_;
14702 							ValaDataType* _tmp105_;
14703 							ValaDataType* _tmp106_;
14704 							gchar* _tmp107_;
14705 							gchar* _tmp108_;
14706 							gchar* _tmp109_;
14707 							gchar* _tmp110_;
14708 							ValaLocalVariable* _tmp111_;
14709 							ValaLocalVariable* _tmp112_;
14710 							ValaLocalVariable* _tmp113_;
14711 							ValaExpression* _tmp114_;
14712 							ValaExpression* _tmp115_;
14713 							ValaLocalVariable* _tmp116_;
14714 							if (!_tmp97_) {
14715 								gint _tmp98_;
14716 								_tmp98_ = dim;
14717 								dim = _tmp98_ + 1;
14718 							}
14719 							_tmp97_ = FALSE;
14720 							_tmp99_ = array_type;
14721 							_tmp100_ = vala_array_type_get_rank (_tmp99_);
14722 							_tmp101_ = _tmp100_;
14723 							if (!(dim <= _tmp101_)) {
14724 								break;
14725 							}
14726 							_tmp102_ = array_type;
14727 							_tmp103_ = vala_array_type_get_length_type (_tmp102_);
14728 							_tmp104_ = _tmp103_;
14729 							_tmp105_ = vala_data_type_copy (_tmp104_);
14730 							_tmp106_ = _tmp105_;
14731 							_tmp107_ = vala_ccode_base_module_get_local_cname (self, local);
14732 							_tmp108_ = _tmp107_;
14733 							_tmp109_ = vala_ccode_base_module_get_array_length_cname (self, _tmp108_, dim);
14734 							_tmp110_ = _tmp109_;
14735 							_tmp111_ = vala_local_variable_new (_tmp106_, _tmp110_, NULL, NULL);
14736 							_tmp112_ = _tmp111_;
14737 							_g_free0 (_tmp110_);
14738 							_g_free0 (_tmp108_);
14739 							_vala_code_node_unref0 (_tmp106_);
14740 							len_var = _tmp112_;
14741 							_tmp113_ = len_var;
14742 							_tmp114_ = vala_variable_get_initializer ((ValaVariable*) local);
14743 							_tmp115_ = _tmp114_;
14744 							vala_local_variable_set_init (_tmp113_, _tmp115_ == NULL);
14745 							_tmp116_ = len_var;
14746 							vala_ccode_base_module_emit_temp_var (self, _tmp116_, FALSE);
14747 							_vala_code_node_unref0 (len_var);
14748 						}
14749 					}
14750 				}
14751 				_tmp117_ = array_type;
14752 				_tmp118_ = vala_array_type_get_rank (_tmp117_);
14753 				_tmp119_ = _tmp118_;
14754 				if (_tmp119_ == 1) {
14755 					ValaLocalVariable* size_var = NULL;
14756 					ValaArrayType* _tmp120_;
14757 					ValaDataType* _tmp121_;
14758 					ValaDataType* _tmp122_;
14759 					ValaDataType* _tmp123_;
14760 					ValaDataType* _tmp124_;
14761 					gchar* _tmp125_;
14762 					gchar* _tmp126_;
14763 					gchar* _tmp127_;
14764 					gchar* _tmp128_;
14765 					ValaLocalVariable* _tmp129_;
14766 					ValaLocalVariable* _tmp130_;
14767 					ValaLocalVariable* _tmp131_;
14768 					ValaExpression* _tmp132_;
14769 					ValaExpression* _tmp133_;
14770 					ValaLocalVariable* _tmp134_;
14771 					_tmp120_ = array_type;
14772 					_tmp121_ = vala_array_type_get_length_type (_tmp120_);
14773 					_tmp122_ = _tmp121_;
14774 					_tmp123_ = vala_data_type_copy (_tmp122_);
14775 					_tmp124_ = _tmp123_;
14776 					_tmp125_ = vala_ccode_base_module_get_local_cname (self, local);
14777 					_tmp126_ = _tmp125_;
14778 					_tmp127_ = vala_ccode_base_module_get_array_size_cname (self, _tmp126_);
14779 					_tmp128_ = _tmp127_;
14780 					_tmp129_ = vala_local_variable_new (_tmp124_, _tmp128_, NULL, NULL);
14781 					_tmp130_ = _tmp129_;
14782 					_g_free0 (_tmp128_);
14783 					_g_free0 (_tmp126_);
14784 					_vala_code_node_unref0 (_tmp124_);
14785 					size_var = _tmp130_;
14786 					_tmp131_ = size_var;
14787 					_tmp132_ = vala_variable_get_initializer ((ValaVariable*) local);
14788 					_tmp133_ = _tmp132_;
14789 					vala_local_variable_set_init (_tmp131_, _tmp133_ == NULL);
14790 					_tmp134_ = size_var;
14791 					vala_ccode_base_module_emit_temp_var (self, _tmp134_, FALSE);
14792 					_vala_code_node_unref0 (size_var);
14793 				}
14794 			}
14795 			_vala_code_node_unref0 (array_type);
14796 		} else {
14797 			ValaDataType* _tmp135_;
14798 			ValaDataType* _tmp136_;
14799 			_tmp135_ = vala_variable_get_variable_type ((ValaVariable*) local);
14800 			_tmp136_ = _tmp135_;
14801 			if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp136_, VALA_TYPE_DELEGATE_TYPE)) {
14802 				ValaDelegateType* deleg_type = NULL;
14803 				ValaDataType* _tmp137_;
14804 				ValaDataType* _tmp138_;
14805 				ValaDelegateType* _tmp139_;
14806 				ValaDelegateType* _tmp140_;
14807 				ValaDelegate* _tmp141_;
14808 				ValaDelegate* _tmp142_;
14809 				gboolean _tmp143_;
14810 				gboolean _tmp144_;
14811 				_tmp137_ = vala_variable_get_variable_type ((ValaVariable*) local);
14812 				_tmp138_ = _tmp137_;
14813 				_tmp139_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp138_, VALA_TYPE_DELEGATE_TYPE, ValaDelegateType));
14814 				deleg_type = _tmp139_;
14815 				_tmp140_ = deleg_type;
14816 				_tmp141_ = vala_delegate_type_get_delegate_symbol (_tmp140_);
14817 				_tmp142_ = _tmp141_;
14818 				_tmp143_ = vala_delegate_get_has_target (_tmp142_);
14819 				_tmp144_ = _tmp143_;
14820 				if (_tmp144_) {
14821 					ValaLocalVariable* target_var = NULL;
14822 					ValaDataType* _tmp145_;
14823 					ValaDataType* _tmp146_;
14824 					ValaDataType* _tmp147_;
14825 					gchar* _tmp148_;
14826 					gchar* _tmp149_;
14827 					gchar* _tmp150_;
14828 					gchar* _tmp151_;
14829 					ValaLocalVariable* _tmp152_;
14830 					ValaLocalVariable* _tmp153_;
14831 					ValaLocalVariable* _tmp154_;
14832 					ValaExpression* _tmp155_;
14833 					ValaExpression* _tmp156_;
14834 					ValaLocalVariable* _tmp157_;
14835 					ValaDelegateType* _tmp158_;
14836 					_tmp145_ = self->delegate_target_type;
14837 					_tmp146_ = vala_data_type_copy (_tmp145_);
14838 					_tmp147_ = _tmp146_;
14839 					_tmp148_ = vala_ccode_base_module_get_local_cname (self, local);
14840 					_tmp149_ = _tmp148_;
14841 					_tmp150_ = vala_ccode_base_module_get_delegate_target_cname (self, _tmp149_);
14842 					_tmp151_ = _tmp150_;
14843 					_tmp152_ = vala_local_variable_new (_tmp147_, _tmp151_, NULL, NULL);
14844 					_tmp153_ = _tmp152_;
14845 					_g_free0 (_tmp151_);
14846 					_g_free0 (_tmp149_);
14847 					_vala_code_node_unref0 (_tmp147_);
14848 					target_var = _tmp153_;
14849 					_tmp154_ = target_var;
14850 					_tmp155_ = vala_variable_get_initializer ((ValaVariable*) local);
14851 					_tmp156_ = _tmp155_;
14852 					vala_local_variable_set_init (_tmp154_, _tmp156_ == NULL);
14853 					_tmp157_ = target_var;
14854 					vala_ccode_base_module_emit_temp_var (self, _tmp157_, FALSE);
14855 					_tmp158_ = deleg_type;
14856 					if (vala_data_type_is_disposable ((ValaDataType*) _tmp158_)) {
14857 						ValaLocalVariable* target_destroy_notify_var = NULL;
14858 						ValaDelegateType* _tmp159_;
14859 						ValaDataType* _tmp160_;
14860 						ValaDataType* _tmp161_;
14861 						gchar* _tmp162_;
14862 						gchar* _tmp163_;
14863 						gchar* _tmp164_;
14864 						gchar* _tmp165_;
14865 						ValaLocalVariable* _tmp166_;
14866 						ValaLocalVariable* _tmp167_;
14867 						ValaLocalVariable* _tmp168_;
14868 						ValaExpression* _tmp169_;
14869 						ValaExpression* _tmp170_;
14870 						ValaLocalVariable* _tmp171_;
14871 						_tmp159_ = self->delegate_target_destroy_type;
14872 						_tmp160_ = vala_data_type_copy ((ValaDataType*) _tmp159_);
14873 						_tmp161_ = _tmp160_;
14874 						_tmp162_ = vala_ccode_base_module_get_local_cname (self, local);
14875 						_tmp163_ = _tmp162_;
14876 						_tmp164_ = vala_ccode_base_module_get_delegate_target_destroy_notify_cname (self, _tmp163_);
14877 						_tmp165_ = _tmp164_;
14878 						_tmp166_ = vala_local_variable_new (_tmp161_, _tmp165_, NULL, NULL);
14879 						_tmp167_ = _tmp166_;
14880 						_g_free0 (_tmp165_);
14881 						_g_free0 (_tmp163_);
14882 						_vala_code_node_unref0 (_tmp161_);
14883 						target_destroy_notify_var = _tmp167_;
14884 						_tmp168_ = target_destroy_notify_var;
14885 						_tmp169_ = vala_variable_get_initializer ((ValaVariable*) local);
14886 						_tmp170_ = _tmp169_;
14887 						vala_local_variable_set_init (_tmp168_, _tmp170_ == NULL);
14888 						_tmp171_ = target_destroy_notify_var;
14889 						vala_ccode_base_module_emit_temp_var (self, _tmp171_, FALSE);
14890 						_vala_code_node_unref0 (target_destroy_notify_var);
14891 					}
14892 					_vala_code_node_unref0 (target_var);
14893 				}
14894 				_vala_code_node_unref0 (deleg_type);
14895 			}
14896 		}
14897 	}
14898 	_tmp172_ = rhs;
14899 	if (_tmp172_ != NULL) {
14900 		ValaExpression* _tmp173_;
14901 		ValaExpression* _tmp174_;
14902 		_tmp173_ = vala_variable_get_initializer ((ValaVariable*) local);
14903 		_tmp174_ = _tmp173_;
14904 		if (!vala_ccode_base_module_is_simple_struct_creation (self, (ValaVariable*) local, _tmp174_)) {
14905 			ValaExpression* _tmp175_;
14906 			ValaExpression* _tmp176_;
14907 			ValaTargetValue* _tmp177_;
14908 			ValaTargetValue* _tmp178_;
14909 			ValaSourceReference* _tmp179_;
14910 			ValaSourceReference* _tmp180_;
14911 			_tmp175_ = vala_variable_get_initializer ((ValaVariable*) local);
14912 			_tmp176_ = _tmp175_;
14913 			_tmp177_ = vala_expression_get_target_value (_tmp176_);
14914 			_tmp178_ = _tmp177_;
14915 			_tmp179_ = vala_code_node_get_source_reference ((ValaCodeNode*) local);
14916 			_tmp180_ = _tmp179_;
14917 			vala_code_generator_store_local ((ValaCodeGenerator*) self, local, _tmp178_, TRUE, _tmp180_);
14918 		}
14919 	}
14920 	_tmp182_ = vala_variable_get_initializer ((ValaVariable*) local);
14921 	_tmp183_ = _tmp182_;
14922 	if (_tmp183_ != NULL) {
14923 		ValaExpression* _tmp184_;
14924 		ValaExpression* _tmp185_;
14925 		gboolean _tmp186_;
14926 		gboolean _tmp187_;
14927 		_tmp184_ = vala_variable_get_initializer ((ValaVariable*) local);
14928 		_tmp185_ = _tmp184_;
14929 		_tmp186_ = vala_code_node_get_tree_can_fail ((ValaCodeNode*) _tmp185_);
14930 		_tmp187_ = _tmp186_;
14931 		_tmp181_ = _tmp187_;
14932 	} else {
14933 		_tmp181_ = FALSE;
14934 	}
14935 	if (_tmp181_) {
14936 		ValaExpression* _tmp188_;
14937 		ValaExpression* _tmp189_;
14938 		_tmp188_ = vala_variable_get_initializer ((ValaVariable*) local);
14939 		_tmp189_ = _tmp188_;
14940 		vala_ccode_base_module_add_simple_check (self, (ValaCodeNode*) _tmp189_, FALSE);
14941 	}
14942 	vala_symbol_set_active ((ValaSymbol*) local, TRUE);
14943 	_vala_ccode_node_unref0 (rhs);
14944 }
14945 
14946 /**
14947  * Create a temporary variable and return lvalue access to it
14948  */
14949 ValaTargetValue*
vala_ccode_base_module_create_temp_value(ValaCCodeBaseModule * self,ValaDataType * type,gboolean init,ValaCodeNode * node_reference,gboolean * value_owned)14950 vala_ccode_base_module_create_temp_value (ValaCCodeBaseModule* self,
14951                                           ValaDataType* type,
14952                                           gboolean init,
14953                                           ValaCodeNode* node_reference,
14954                                           gboolean* value_owned)
14955 {
14956 	ValaLocalVariable* local = NULL;
14957 	ValaDataType* _tmp2_;
14958 	ValaDataType* _tmp3_;
14959 	gint _tmp4_;
14960 	gint _tmp5_;
14961 	gchar* _tmp6_;
14962 	gchar* _tmp7_;
14963 	ValaSourceReference* _tmp8_;
14964 	ValaSourceReference* _tmp9_;
14965 	ValaLocalVariable* _tmp10_;
14966 	ValaLocalVariable* _tmp11_;
14967 	ValaLocalVariable* _tmp12_;
14968 	ValaArrayType* array_type = NULL;
14969 	ValaLocalVariable* _tmp16_;
14970 	ValaDataType* _tmp17_;
14971 	ValaDataType* _tmp18_;
14972 	ValaArrayType* _tmp19_;
14973 	ValaDelegateType* deleg_type = NULL;
14974 	ValaLocalVariable* _tmp20_;
14975 	ValaDataType* _tmp21_;
14976 	ValaDataType* _tmp22_;
14977 	ValaDelegateType* _tmp23_;
14978 	ValaLocalVariable* _tmp24_;
14979 	ValaArrayType* _tmp25_;
14980 	ValaTargetValue* value = NULL;
14981 	ValaLocalVariable* _tmp83_;
14982 	ValaTargetValue* _tmp84_;
14983 	ValaTargetValue* result = NULL;
14984 	g_return_val_if_fail (self != NULL, NULL);
14985 	g_return_val_if_fail (type != NULL, NULL);
14986 	g_return_val_if_fail (node_reference != NULL, NULL);
14987 	if (G_TYPE_CHECK_INSTANCE_TYPE (type, VALA_TYPE_VOID_TYPE)) {
14988 		ValaSourceReference* _tmp0_;
14989 		ValaSourceReference* _tmp1_;
14990 		_tmp0_ = vala_code_node_get_source_reference (node_reference);
14991 		_tmp1_ = _tmp0_;
14992 		vala_report_error (_tmp1_, "internal: 'void' not supported as variable type");
14993 	}
14994 	_tmp2_ = vala_data_type_copy (type);
14995 	_tmp3_ = _tmp2_;
14996 	_tmp4_ = vala_ccode_base_module_get_next_temp_var_id (self);
14997 	_tmp5_ = _tmp4_;
14998 	vala_ccode_base_module_set_next_temp_var_id (self, _tmp5_ + 1);
14999 	_tmp6_ = g_strdup_printf ("_tmp%d_", _tmp5_);
15000 	_tmp7_ = _tmp6_;
15001 	_tmp8_ = vala_code_node_get_source_reference (node_reference);
15002 	_tmp9_ = _tmp8_;
15003 	_tmp10_ = vala_local_variable_new (_tmp3_, _tmp7_, NULL, _tmp9_);
15004 	_tmp11_ = _tmp10_;
15005 	_g_free0 (_tmp7_);
15006 	_vala_code_node_unref0 (_tmp3_);
15007 	local = _tmp11_;
15008 	_tmp12_ = local;
15009 	vala_local_variable_set_init (_tmp12_, init);
15010 	if (value_owned != NULL) {
15011 		ValaLocalVariable* _tmp13_;
15012 		ValaDataType* _tmp14_;
15013 		ValaDataType* _tmp15_;
15014 		_tmp13_ = local;
15015 		_tmp14_ = vala_variable_get_variable_type ((ValaVariable*) _tmp13_);
15016 		_tmp15_ = _tmp14_;
15017 		vala_data_type_set_value_owned (_tmp15_, *value_owned);
15018 	}
15019 	_tmp16_ = local;
15020 	_tmp17_ = vala_variable_get_variable_type ((ValaVariable*) _tmp16_);
15021 	_tmp18_ = _tmp17_;
15022 	_tmp19_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (_tmp18_, VALA_TYPE_ARRAY_TYPE) ? ((ValaArrayType*) _tmp18_) : NULL);
15023 	array_type = _tmp19_;
15024 	_tmp20_ = local;
15025 	_tmp21_ = vala_variable_get_variable_type ((ValaVariable*) _tmp20_);
15026 	_tmp22_ = _tmp21_;
15027 	_tmp23_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (_tmp22_, VALA_TYPE_DELEGATE_TYPE) ? ((ValaDelegateType*) _tmp22_) : NULL);
15028 	deleg_type = _tmp23_;
15029 	_tmp24_ = local;
15030 	vala_ccode_base_module_emit_temp_var (self, _tmp24_, FALSE);
15031 	_tmp25_ = array_type;
15032 	if (_tmp25_ != NULL) {
15033 		{
15034 			gint dim = 0;
15035 			dim = 1;
15036 			{
15037 				gboolean _tmp26_ = FALSE;
15038 				_tmp26_ = TRUE;
15039 				while (TRUE) {
15040 					ValaArrayType* _tmp28_;
15041 					gint _tmp29_;
15042 					gint _tmp30_;
15043 					ValaLocalVariable* len_var = NULL;
15044 					ValaArrayType* _tmp31_;
15045 					ValaDataType* _tmp32_;
15046 					ValaDataType* _tmp33_;
15047 					ValaDataType* _tmp34_;
15048 					ValaDataType* _tmp35_;
15049 					ValaLocalVariable* _tmp36_;
15050 					const gchar* _tmp37_;
15051 					const gchar* _tmp38_;
15052 					gchar* _tmp39_;
15053 					gchar* _tmp40_;
15054 					ValaSourceReference* _tmp41_;
15055 					ValaSourceReference* _tmp42_;
15056 					ValaLocalVariable* _tmp43_;
15057 					ValaLocalVariable* _tmp44_;
15058 					ValaLocalVariable* _tmp45_;
15059 					ValaLocalVariable* _tmp46_;
15060 					if (!_tmp26_) {
15061 						gint _tmp27_;
15062 						_tmp27_ = dim;
15063 						dim = _tmp27_ + 1;
15064 					}
15065 					_tmp26_ = FALSE;
15066 					_tmp28_ = array_type;
15067 					_tmp29_ = vala_array_type_get_rank (_tmp28_);
15068 					_tmp30_ = _tmp29_;
15069 					if (!(dim <= _tmp30_)) {
15070 						break;
15071 					}
15072 					_tmp31_ = array_type;
15073 					_tmp32_ = vala_array_type_get_length_type (_tmp31_);
15074 					_tmp33_ = _tmp32_;
15075 					_tmp34_ = vala_data_type_copy (_tmp33_);
15076 					_tmp35_ = _tmp34_;
15077 					_tmp36_ = local;
15078 					_tmp37_ = vala_symbol_get_name ((ValaSymbol*) _tmp36_);
15079 					_tmp38_ = _tmp37_;
15080 					_tmp39_ = vala_ccode_base_module_get_array_length_cname (self, _tmp38_, dim);
15081 					_tmp40_ = _tmp39_;
15082 					_tmp41_ = vala_code_node_get_source_reference (node_reference);
15083 					_tmp42_ = _tmp41_;
15084 					_tmp43_ = vala_local_variable_new (_tmp35_, _tmp40_, NULL, _tmp42_);
15085 					_tmp44_ = _tmp43_;
15086 					_g_free0 (_tmp40_);
15087 					_vala_code_node_unref0 (_tmp35_);
15088 					len_var = _tmp44_;
15089 					_tmp45_ = len_var;
15090 					vala_local_variable_set_init (_tmp45_, init);
15091 					_tmp46_ = len_var;
15092 					vala_ccode_base_module_emit_temp_var (self, _tmp46_, FALSE);
15093 					_vala_code_node_unref0 (len_var);
15094 				}
15095 			}
15096 		}
15097 	} else {
15098 		gboolean _tmp47_ = FALSE;
15099 		ValaDelegateType* _tmp48_;
15100 		_tmp48_ = deleg_type;
15101 		if (_tmp48_ != NULL) {
15102 			ValaDelegateType* _tmp49_;
15103 			ValaDelegate* _tmp50_;
15104 			ValaDelegate* _tmp51_;
15105 			gboolean _tmp52_;
15106 			gboolean _tmp53_;
15107 			_tmp49_ = deleg_type;
15108 			_tmp50_ = vala_delegate_type_get_delegate_symbol (_tmp49_);
15109 			_tmp51_ = _tmp50_;
15110 			_tmp52_ = vala_delegate_get_has_target (_tmp51_);
15111 			_tmp53_ = _tmp52_;
15112 			_tmp47_ = _tmp53_;
15113 		} else {
15114 			_tmp47_ = FALSE;
15115 		}
15116 		if (_tmp47_) {
15117 			ValaLocalVariable* target_var = NULL;
15118 			ValaDataType* _tmp54_;
15119 			ValaDataType* _tmp55_;
15120 			ValaDataType* _tmp56_;
15121 			ValaLocalVariable* _tmp57_;
15122 			const gchar* _tmp58_;
15123 			const gchar* _tmp59_;
15124 			gchar* _tmp60_;
15125 			gchar* _tmp61_;
15126 			ValaSourceReference* _tmp62_;
15127 			ValaSourceReference* _tmp63_;
15128 			ValaLocalVariable* _tmp64_;
15129 			ValaLocalVariable* _tmp65_;
15130 			ValaLocalVariable* _tmp66_;
15131 			ValaLocalVariable* _tmp67_;
15132 			ValaDelegateType* _tmp68_;
15133 			_tmp54_ = self->delegate_target_type;
15134 			_tmp55_ = vala_data_type_copy (_tmp54_);
15135 			_tmp56_ = _tmp55_;
15136 			_tmp57_ = local;
15137 			_tmp58_ = vala_symbol_get_name ((ValaSymbol*) _tmp57_);
15138 			_tmp59_ = _tmp58_;
15139 			_tmp60_ = vala_ccode_base_module_get_delegate_target_cname (self, _tmp59_);
15140 			_tmp61_ = _tmp60_;
15141 			_tmp62_ = vala_code_node_get_source_reference (node_reference);
15142 			_tmp63_ = _tmp62_;
15143 			_tmp64_ = vala_local_variable_new (_tmp56_, _tmp61_, NULL, _tmp63_);
15144 			_tmp65_ = _tmp64_;
15145 			_g_free0 (_tmp61_);
15146 			_vala_code_node_unref0 (_tmp56_);
15147 			target_var = _tmp65_;
15148 			_tmp66_ = target_var;
15149 			vala_local_variable_set_init (_tmp66_, init);
15150 			_tmp67_ = target_var;
15151 			vala_ccode_base_module_emit_temp_var (self, _tmp67_, FALSE);
15152 			_tmp68_ = deleg_type;
15153 			if (vala_data_type_is_disposable ((ValaDataType*) _tmp68_)) {
15154 				ValaLocalVariable* target_destroy_notify_var = NULL;
15155 				ValaDelegateType* _tmp69_;
15156 				ValaDataType* _tmp70_;
15157 				ValaDataType* _tmp71_;
15158 				ValaLocalVariable* _tmp72_;
15159 				const gchar* _tmp73_;
15160 				const gchar* _tmp74_;
15161 				gchar* _tmp75_;
15162 				gchar* _tmp76_;
15163 				ValaSourceReference* _tmp77_;
15164 				ValaSourceReference* _tmp78_;
15165 				ValaLocalVariable* _tmp79_;
15166 				ValaLocalVariable* _tmp80_;
15167 				ValaLocalVariable* _tmp81_;
15168 				ValaLocalVariable* _tmp82_;
15169 				_tmp69_ = self->delegate_target_destroy_type;
15170 				_tmp70_ = vala_data_type_copy ((ValaDataType*) _tmp69_);
15171 				_tmp71_ = _tmp70_;
15172 				_tmp72_ = local;
15173 				_tmp73_ = vala_symbol_get_name ((ValaSymbol*) _tmp72_);
15174 				_tmp74_ = _tmp73_;
15175 				_tmp75_ = vala_ccode_base_module_get_delegate_target_destroy_notify_cname (self, _tmp74_);
15176 				_tmp76_ = _tmp75_;
15177 				_tmp77_ = vala_code_node_get_source_reference (node_reference);
15178 				_tmp78_ = _tmp77_;
15179 				_tmp79_ = vala_local_variable_new (_tmp71_, _tmp76_, NULL, _tmp78_);
15180 				_tmp80_ = _tmp79_;
15181 				_g_free0 (_tmp76_);
15182 				_vala_code_node_unref0 (_tmp71_);
15183 				target_destroy_notify_var = _tmp80_;
15184 				_tmp81_ = target_destroy_notify_var;
15185 				vala_local_variable_set_init (_tmp81_, init);
15186 				_tmp82_ = target_destroy_notify_var;
15187 				vala_ccode_base_module_emit_temp_var (self, _tmp82_, FALSE);
15188 				_vala_code_node_unref0 (target_destroy_notify_var);
15189 			}
15190 			_vala_code_node_unref0 (target_var);
15191 		}
15192 	}
15193 	_tmp83_ = local;
15194 	_tmp84_ = vala_ccode_base_module_get_local_cvalue (self, _tmp83_);
15195 	value = _tmp84_;
15196 	vala_set_array_size_cvalue (value, NULL);
15197 	result = value;
15198 	_vala_code_node_unref0 (deleg_type);
15199 	_vala_code_node_unref0 (array_type);
15200 	_vala_code_node_unref0 (local);
15201 	return result;
15202 }
15203 
15204 /**
15205  * Load a temporary variable returning unowned or owned rvalue access to it, depending on the ownership of the value type.
15206  */
15207 ValaTargetValue*
vala_ccode_base_module_load_temp_value(ValaCCodeBaseModule * self,ValaTargetValue * lvalue)15208 vala_ccode_base_module_load_temp_value (ValaCCodeBaseModule* self,
15209                                         ValaTargetValue* lvalue)
15210 {
15211 	ValaGLibValue* value = NULL;
15212 	ValaGLibValue* _tmp0_;
15213 	ValaDelegateType* deleg_type = NULL;
15214 	ValaGLibValue* _tmp1_;
15215 	ValaDataType* _tmp2_;
15216 	ValaDataType* _tmp3_;
15217 	ValaDelegateType* _tmp4_;
15218 	ValaDelegateType* _tmp5_;
15219 	ValaTargetValue* result = NULL;
15220 	g_return_val_if_fail (self != NULL, NULL);
15221 	g_return_val_if_fail (lvalue != NULL, NULL);
15222 	_tmp0_ = vala_glib_value_copy (G_TYPE_CHECK_INSTANCE_CAST (lvalue, VALA_TYPE_GLIB_VALUE, ValaGLibValue));
15223 	value = _tmp0_;
15224 	_tmp1_ = value;
15225 	_tmp2_ = vala_target_value_get_value_type ((ValaTargetValue*) _tmp1_);
15226 	_tmp3_ = _tmp2_;
15227 	_tmp4_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (_tmp3_, VALA_TYPE_DELEGATE_TYPE) ? ((ValaDelegateType*) _tmp3_) : NULL);
15228 	deleg_type = _tmp4_;
15229 	_tmp5_ = deleg_type;
15230 	if (_tmp5_ != NULL) {
15231 		ValaDelegateType* _tmp6_;
15232 		ValaDelegate* _tmp7_;
15233 		ValaDelegate* _tmp8_;
15234 		gboolean _tmp9_;
15235 		gboolean _tmp10_;
15236 		_tmp6_ = deleg_type;
15237 		_tmp7_ = vala_delegate_type_get_delegate_symbol (_tmp6_);
15238 		_tmp8_ = _tmp7_;
15239 		_tmp9_ = vala_delegate_get_has_target (_tmp8_);
15240 		_tmp10_ = _tmp9_;
15241 		if (!_tmp10_) {
15242 			ValaGLibValue* _tmp11_;
15243 			ValaCCodeConstant* _tmp12_;
15244 			ValaGLibValue* _tmp13_;
15245 			_tmp11_ = value;
15246 			_tmp12_ = vala_ccode_constant_new ("NULL");
15247 			_vala_ccode_node_unref0 (_tmp11_->delegate_target_cvalue);
15248 			_tmp11_->delegate_target_cvalue = (ValaCCodeExpression*) _tmp12_;
15249 			_tmp13_ = value;
15250 			G_TYPE_CHECK_INSTANCE_CAST (_tmp13_, VALA_TYPE_GLIB_VALUE, ValaGLibValue)->lvalue = FALSE;
15251 		} else {
15252 			ValaDelegateType* _tmp14_;
15253 			_tmp14_ = deleg_type;
15254 			if (!vala_data_type_is_disposable ((ValaDataType*) _tmp14_)) {
15255 				ValaGLibValue* _tmp15_;
15256 				ValaCCodeConstant* _tmp16_;
15257 				ValaGLibValue* _tmp17_;
15258 				_tmp15_ = value;
15259 				_tmp16_ = vala_ccode_constant_new ("NULL");
15260 				_vala_ccode_node_unref0 (_tmp15_->delegate_target_destroy_notify_cvalue);
15261 				_tmp15_->delegate_target_destroy_notify_cvalue = (ValaCCodeExpression*) _tmp16_;
15262 				_tmp17_ = value;
15263 				G_TYPE_CHECK_INSTANCE_CAST (_tmp17_, VALA_TYPE_GLIB_VALUE, ValaGLibValue)->lvalue = FALSE;
15264 			}
15265 		}
15266 	}
15267 	result = (ValaTargetValue*) value;
15268 	_vala_code_node_unref0 (deleg_type);
15269 	return result;
15270 }
15271 
15272 /**
15273  * Store a value in a temporary variable and return unowned or owned rvalue access to it, depending on the ownership of the given type.
15274  */
15275 ValaTargetValue*
vala_ccode_base_module_store_temp_value(ValaCCodeBaseModule * self,ValaTargetValue * initializer,ValaCodeNode * node_reference,gboolean * value_owned)15276 vala_ccode_base_module_store_temp_value (ValaCCodeBaseModule* self,
15277                                          ValaTargetValue* initializer,
15278                                          ValaCodeNode* node_reference,
15279                                          gboolean* value_owned)
15280 {
15281 	ValaTargetValue* lvalue = NULL;
15282 	ValaDataType* _tmp0_;
15283 	ValaDataType* _tmp1_;
15284 	ValaTargetValue* _tmp2_;
15285 	ValaSourceReference* _tmp3_;
15286 	ValaSourceReference* _tmp4_;
15287 	ValaTargetValue* _tmp5_;
15288 	ValaTargetValue* result = NULL;
15289 	g_return_val_if_fail (self != NULL, NULL);
15290 	g_return_val_if_fail (initializer != NULL, NULL);
15291 	g_return_val_if_fail (node_reference != NULL, NULL);
15292 	_tmp0_ = vala_target_value_get_value_type (initializer);
15293 	_tmp1_ = _tmp0_;
15294 	_tmp2_ = vala_ccode_base_module_create_temp_value (self, _tmp1_, FALSE, node_reference, value_owned);
15295 	lvalue = _tmp2_;
15296 	_tmp3_ = vala_code_node_get_source_reference (node_reference);
15297 	_tmp4_ = _tmp3_;
15298 	vala_ccode_base_module_store_value (self, lvalue, initializer, _tmp4_);
15299 	_tmp5_ = vala_ccode_base_module_load_temp_value (self, lvalue);
15300 	result = _tmp5_;
15301 	_vala_target_value_unref0 (lvalue);
15302 	return result;
15303 }
15304 
15305 static void
vala_ccode_base_module_real_visit_initializer_list(ValaCodeVisitor * base,ValaInitializerList * list)15306 vala_ccode_base_module_real_visit_initializer_list (ValaCodeVisitor* base,
15307                                                     ValaInitializerList* list)
15308 {
15309 	ValaCCodeBaseModule * self;
15310 	ValaDataType* _tmp0_;
15311 	ValaDataType* _tmp1_;
15312 	ValaTypeSymbol* _tmp2_;
15313 	ValaTypeSymbol* _tmp3_;
15314 	self = (ValaCCodeBaseModule*) base;
15315 	g_return_if_fail (list != NULL);
15316 	_tmp0_ = vala_expression_get_target_type ((ValaExpression*) list);
15317 	_tmp1_ = _tmp0_;
15318 	_tmp2_ = vala_data_type_get_type_symbol (_tmp1_);
15319 	_tmp3_ = _tmp2_;
15320 	if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp3_, VALA_TYPE_STRUCT)) {
15321 		ValaStruct* st = NULL;
15322 		ValaDataType* _tmp4_;
15323 		ValaDataType* _tmp5_;
15324 		ValaTypeSymbol* _tmp6_;
15325 		ValaTypeSymbol* _tmp7_;
15326 		gboolean _tmp14_ = FALSE;
15327 		gboolean _tmp15_ = FALSE;
15328 		ValaCodeNode* _tmp16_;
15329 		ValaCodeNode* _tmp17_;
15330 		_tmp4_ = vala_expression_get_target_type ((ValaExpression*) list);
15331 		_tmp5_ = _tmp4_;
15332 		_tmp6_ = vala_data_type_get_type_symbol (_tmp5_);
15333 		_tmp7_ = _tmp6_;
15334 		st = G_TYPE_CHECK_INSTANCE_CAST (_tmp7_, VALA_TYPE_STRUCT, ValaStruct);
15335 		while (TRUE) {
15336 			ValaStruct* _tmp8_;
15337 			ValaStruct* _tmp9_;
15338 			ValaStruct* _tmp10_;
15339 			ValaStruct* _tmp11_;
15340 			ValaStruct* _tmp12_;
15341 			ValaStruct* _tmp13_;
15342 			_tmp8_ = st;
15343 			_tmp9_ = vala_struct_get_base_struct (_tmp8_);
15344 			_tmp10_ = _tmp9_;
15345 			if (!(_tmp10_ != NULL)) {
15346 				break;
15347 			}
15348 			_tmp11_ = st;
15349 			_tmp12_ = vala_struct_get_base_struct (_tmp11_);
15350 			_tmp13_ = _tmp12_;
15351 			st = _tmp13_;
15352 		}
15353 		_tmp16_ = vala_code_node_get_parent_node ((ValaCodeNode*) list);
15354 		_tmp17_ = _tmp16_;
15355 		if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp17_, VALA_TYPE_CONSTANT)) {
15356 			_tmp15_ = TRUE;
15357 		} else {
15358 			ValaCodeNode* _tmp18_;
15359 			ValaCodeNode* _tmp19_;
15360 			_tmp18_ = vala_code_node_get_parent_node ((ValaCodeNode*) list);
15361 			_tmp19_ = _tmp18_;
15362 			_tmp15_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp19_, VALA_TYPE_FIELD);
15363 		}
15364 		if (_tmp15_) {
15365 			_tmp14_ = TRUE;
15366 		} else {
15367 			ValaCodeNode* _tmp20_;
15368 			ValaCodeNode* _tmp21_;
15369 			_tmp20_ = vala_code_node_get_parent_node ((ValaCodeNode*) list);
15370 			_tmp21_ = _tmp20_;
15371 			_tmp14_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp21_, VALA_TYPE_INITIALIZER_LIST);
15372 		}
15373 		if (_tmp14_) {
15374 			ValaCCodeInitializerList* clist = NULL;
15375 			ValaCCodeInitializerList* _tmp22_;
15376 			ValaIterator* field_it = NULL;
15377 			ValaStruct* _tmp23_;
15378 			ValaList* _tmp24_;
15379 			ValaIterator* _tmp25_;
15380 			gboolean _tmp88_ = FALSE;
15381 			ValaCodeNode* _tmp89_;
15382 			ValaCodeNode* _tmp90_;
15383 			_tmp22_ = vala_ccode_initializer_list_new ();
15384 			clist = _tmp22_;
15385 			_tmp23_ = st;
15386 			_tmp24_ = vala_struct_get_fields (_tmp23_);
15387 			_tmp25_ = vala_iterable_iterator ((ValaIterable*) _tmp24_);
15388 			field_it = _tmp25_;
15389 			{
15390 				ValaList* _expr_list = NULL;
15391 				ValaList* _tmp26_;
15392 				ValaList* _tmp27_;
15393 				gint _expr_size = 0;
15394 				ValaList* _tmp28_;
15395 				gint _tmp29_;
15396 				gint _tmp30_;
15397 				gint _expr_index = 0;
15398 				_tmp26_ = vala_initializer_list_get_initializers (list);
15399 				_tmp27_ = _vala_iterable_ref0 (_tmp26_);
15400 				_expr_list = _tmp27_;
15401 				_tmp28_ = _expr_list;
15402 				_tmp29_ = vala_collection_get_size ((ValaCollection*) _tmp28_);
15403 				_tmp30_ = _tmp29_;
15404 				_expr_size = _tmp30_;
15405 				_expr_index = -1;
15406 				while (TRUE) {
15407 					gint _tmp31_;
15408 					gint _tmp32_;
15409 					ValaExpression* expr = NULL;
15410 					ValaList* _tmp33_;
15411 					gpointer _tmp34_;
15412 					ValaField* field = NULL;
15413 					ValaCCodeExpression* cexpr = NULL;
15414 					ValaExpression* _tmp42_;
15415 					ValaCCodeExpression* _tmp43_;
15416 					ValaCCodeExpression* _tmp44_;
15417 					gchar* ctype = NULL;
15418 					ValaField* _tmp45_;
15419 					gchar* _tmp46_;
15420 					const gchar* _tmp47_;
15421 					ValaCCodeInitializerList* _tmp51_;
15422 					ValaCCodeExpression* _tmp52_;
15423 					ValaArrayType* array_type = NULL;
15424 					ValaField* _tmp53_;
15425 					ValaDataType* _tmp54_;
15426 					ValaDataType* _tmp55_;
15427 					ValaArrayType* _tmp56_;
15428 					gboolean _tmp57_ = FALSE;
15429 					gboolean _tmp58_ = FALSE;
15430 					gboolean _tmp59_ = FALSE;
15431 					ValaArrayType* _tmp60_;
15432 					_expr_index = _expr_index + 1;
15433 					_tmp31_ = _expr_index;
15434 					_tmp32_ = _expr_size;
15435 					if (!(_tmp31_ < _tmp32_)) {
15436 						break;
15437 					}
15438 					_tmp33_ = _expr_list;
15439 					_tmp34_ = vala_list_get (_tmp33_, _expr_index);
15440 					expr = (ValaExpression*) _tmp34_;
15441 					field = NULL;
15442 					while (TRUE) {
15443 						ValaField* _tmp35_;
15444 						ValaIterator* _tmp36_;
15445 						ValaIterator* _tmp37_;
15446 						gpointer _tmp38_;
15447 						ValaField* _tmp39_;
15448 						ValaMemberBinding _tmp40_;
15449 						ValaMemberBinding _tmp41_;
15450 						_tmp35_ = field;
15451 						if (!(_tmp35_ == NULL)) {
15452 							break;
15453 						}
15454 						_tmp36_ = field_it;
15455 						vala_iterator_next (_tmp36_);
15456 						_tmp37_ = field_it;
15457 						_tmp38_ = vala_iterator_get (_tmp37_);
15458 						_vala_code_node_unref0 (field);
15459 						field = (ValaField*) _tmp38_;
15460 						_tmp39_ = field;
15461 						_tmp40_ = vala_field_get_binding (_tmp39_);
15462 						_tmp41_ = _tmp40_;
15463 						if (_tmp41_ != VALA_MEMBER_BINDING_INSTANCE) {
15464 							_vala_code_node_unref0 (field);
15465 							field = NULL;
15466 						}
15467 					}
15468 					_tmp42_ = expr;
15469 					_tmp43_ = vala_get_cvalue (_tmp42_);
15470 					_tmp44_ = _vala_ccode_node_ref0 (_tmp43_);
15471 					cexpr = _tmp44_;
15472 					_tmp45_ = field;
15473 					_tmp46_ = vala_get_ccode_type ((ValaCodeNode*) _tmp45_);
15474 					ctype = _tmp46_;
15475 					_tmp47_ = ctype;
15476 					if (_tmp47_ != NULL) {
15477 						ValaCCodeExpression* _tmp48_;
15478 						const gchar* _tmp49_;
15479 						ValaCCodeCastExpression* _tmp50_;
15480 						_tmp48_ = cexpr;
15481 						_tmp49_ = ctype;
15482 						_tmp50_ = vala_ccode_cast_expression_new (_tmp48_, _tmp49_);
15483 						_vala_ccode_node_unref0 (cexpr);
15484 						cexpr = (ValaCCodeExpression*) _tmp50_;
15485 					}
15486 					_tmp51_ = clist;
15487 					_tmp52_ = cexpr;
15488 					vala_ccode_initializer_list_append (_tmp51_, _tmp52_);
15489 					_tmp53_ = field;
15490 					_tmp54_ = vala_variable_get_variable_type ((ValaVariable*) _tmp53_);
15491 					_tmp55_ = _tmp54_;
15492 					_tmp56_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (_tmp55_, VALA_TYPE_ARRAY_TYPE) ? ((ValaArrayType*) _tmp55_) : NULL);
15493 					array_type = _tmp56_;
15494 					_tmp60_ = array_type;
15495 					if (_tmp60_ != NULL) {
15496 						ValaArrayType* _tmp61_;
15497 						gboolean _tmp62_;
15498 						gboolean _tmp63_;
15499 						_tmp61_ = array_type;
15500 						_tmp62_ = vala_array_type_get_fixed_length (_tmp61_);
15501 						_tmp63_ = _tmp62_;
15502 						_tmp59_ = !_tmp63_;
15503 					} else {
15504 						_tmp59_ = FALSE;
15505 					}
15506 					if (_tmp59_) {
15507 						ValaField* _tmp64_;
15508 						_tmp64_ = field;
15509 						_tmp58_ = vala_get_ccode_array_length ((ValaCodeNode*) _tmp64_);
15510 					} else {
15511 						_tmp58_ = FALSE;
15512 					}
15513 					if (_tmp58_) {
15514 						ValaField* _tmp65_;
15515 						_tmp65_ = field;
15516 						_tmp57_ = !vala_get_ccode_array_null_terminated ((ValaCodeNode*) _tmp65_);
15517 					} else {
15518 						_tmp57_ = FALSE;
15519 					}
15520 					if (_tmp57_) {
15521 						gboolean _tmp77_ = FALSE;
15522 						ValaArrayType* _tmp78_;
15523 						gint _tmp79_;
15524 						gint _tmp80_;
15525 						{
15526 							gint dim = 0;
15527 							dim = 1;
15528 							{
15529 								gboolean _tmp66_ = FALSE;
15530 								_tmp66_ = TRUE;
15531 								while (TRUE) {
15532 									ValaArrayType* _tmp68_;
15533 									gint _tmp69_;
15534 									gint _tmp70_;
15535 									ValaCCodeInitializerList* _tmp71_;
15536 									ValaExpression* _tmp72_;
15537 									ValaTargetValue* _tmp73_;
15538 									ValaTargetValue* _tmp74_;
15539 									ValaCCodeExpression* _tmp75_;
15540 									ValaCCodeExpression* _tmp76_;
15541 									if (!_tmp66_) {
15542 										gint _tmp67_;
15543 										_tmp67_ = dim;
15544 										dim = _tmp67_ + 1;
15545 									}
15546 									_tmp66_ = FALSE;
15547 									_tmp68_ = array_type;
15548 									_tmp69_ = vala_array_type_get_rank (_tmp68_);
15549 									_tmp70_ = _tmp69_;
15550 									if (!(dim <= _tmp70_)) {
15551 										break;
15552 									}
15553 									_tmp71_ = clist;
15554 									_tmp72_ = expr;
15555 									_tmp73_ = vala_expression_get_target_value (_tmp72_);
15556 									_tmp74_ = _tmp73_;
15557 									_tmp75_ = vala_ccode_base_module_get_array_length_cvalue (self, _tmp74_, dim);
15558 									_tmp76_ = _tmp75_;
15559 									vala_ccode_initializer_list_append (_tmp71_, _tmp76_);
15560 									_vala_ccode_node_unref0 (_tmp76_);
15561 								}
15562 							}
15563 						}
15564 						_tmp78_ = array_type;
15565 						_tmp79_ = vala_array_type_get_rank (_tmp78_);
15566 						_tmp80_ = _tmp79_;
15567 						if (_tmp80_ == 1) {
15568 							ValaField* _tmp81_;
15569 							_tmp81_ = field;
15570 							_tmp77_ = vala_symbol_is_internal_symbol ((ValaSymbol*) _tmp81_);
15571 						} else {
15572 							_tmp77_ = FALSE;
15573 						}
15574 						if (_tmp77_) {
15575 							ValaCCodeInitializerList* _tmp82_;
15576 							ValaExpression* _tmp83_;
15577 							ValaTargetValue* _tmp84_;
15578 							ValaTargetValue* _tmp85_;
15579 							ValaCCodeExpression* _tmp86_;
15580 							ValaCCodeExpression* _tmp87_;
15581 							_tmp82_ = clist;
15582 							_tmp83_ = expr;
15583 							_tmp84_ = vala_expression_get_target_value (_tmp83_);
15584 							_tmp85_ = _tmp84_;
15585 							_tmp86_ = vala_ccode_base_module_get_array_length_cvalue (self, _tmp85_, 1);
15586 							_tmp87_ = _tmp86_;
15587 							vala_ccode_initializer_list_append (_tmp82_, _tmp87_);
15588 							_vala_ccode_node_unref0 (_tmp87_);
15589 						}
15590 					}
15591 					_vala_code_node_unref0 (array_type);
15592 					_g_free0 (ctype);
15593 					_vala_ccode_node_unref0 (cexpr);
15594 					_vala_code_node_unref0 (field);
15595 					_vala_code_node_unref0 (expr);
15596 				}
15597 				_vala_iterable_unref0 (_expr_list);
15598 			}
15599 			_tmp89_ = vala_code_node_get_parent_node ((ValaCodeNode*) list);
15600 			_tmp90_ = _tmp89_;
15601 			if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp90_, VALA_TYPE_CONSTANT)) {
15602 				_tmp88_ = TRUE;
15603 			} else {
15604 				gboolean _tmp91_ = FALSE;
15605 				ValaCodeNode* _tmp92_;
15606 				ValaCodeNode* _tmp93_;
15607 				_tmp92_ = vala_code_node_get_parent_node ((ValaCodeNode*) list);
15608 				_tmp93_ = _tmp92_;
15609 				if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp93_, VALA_TYPE_EXPRESSION)) {
15610 					ValaCodeNode* _tmp94_;
15611 					ValaCodeNode* _tmp95_;
15612 					ValaDataType* _tmp96_;
15613 					ValaDataType* _tmp97_;
15614 					_tmp94_ = vala_code_node_get_parent_node ((ValaCodeNode*) list);
15615 					_tmp95_ = _tmp94_;
15616 					_tmp96_ = vala_expression_get_value_type (G_TYPE_CHECK_INSTANCE_CAST (_tmp95_, VALA_TYPE_EXPRESSION, ValaExpression));
15617 					_tmp97_ = _tmp96_;
15618 					_tmp91_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp97_, VALA_TYPE_ARRAY_TYPE);
15619 				} else {
15620 					_tmp91_ = FALSE;
15621 				}
15622 				_tmp88_ = _tmp91_;
15623 			}
15624 			if (_tmp88_) {
15625 				ValaCCodeInitializerList* _tmp98_;
15626 				_tmp98_ = clist;
15627 				vala_set_cvalue ((ValaExpression*) list, (ValaCCodeExpression*) _tmp98_);
15628 			} else {
15629 				ValaCCodeInitializerList* _tmp99_;
15630 				ValaDataType* _tmp100_;
15631 				ValaDataType* _tmp101_;
15632 				ValaTypeSymbol* _tmp102_;
15633 				ValaTypeSymbol* _tmp103_;
15634 				gchar* _tmp104_;
15635 				gchar* _tmp105_;
15636 				ValaCCodeCastExpression* _tmp106_;
15637 				ValaCCodeCastExpression* _tmp107_;
15638 				_tmp99_ = clist;
15639 				_tmp100_ = vala_expression_get_target_type ((ValaExpression*) list);
15640 				_tmp101_ = _tmp100_;
15641 				_tmp102_ = vala_data_type_get_type_symbol (_tmp101_);
15642 				_tmp103_ = _tmp102_;
15643 				_tmp104_ = vala_get_ccode_name ((ValaCodeNode*) _tmp103_);
15644 				_tmp105_ = _tmp104_;
15645 				_tmp106_ = vala_ccode_cast_expression_new ((ValaCCodeExpression*) _tmp99_, _tmp105_);
15646 				_tmp107_ = _tmp106_;
15647 				vala_set_cvalue ((ValaExpression*) list, (ValaCCodeExpression*) _tmp107_);
15648 				_vala_ccode_node_unref0 (_tmp107_);
15649 				_g_free0 (_tmp105_);
15650 			}
15651 			_vala_iterator_unref0 (field_it);
15652 			_vala_ccode_node_unref0 (clist);
15653 		} else {
15654 			ValaTargetValue* instance = NULL;
15655 			ValaDataType* _tmp108_;
15656 			ValaDataType* _tmp109_;
15657 			ValaTargetValue* _tmp110_;
15658 			ValaIterator* field_it = NULL;
15659 			ValaStruct* _tmp111_;
15660 			ValaList* _tmp112_;
15661 			ValaIterator* _tmp113_;
15662 			ValaTargetValue* _tmp138_;
15663 			_tmp108_ = vala_expression_get_value_type ((ValaExpression*) list);
15664 			_tmp109_ = _tmp108_;
15665 			_tmp110_ = vala_ccode_base_module_create_temp_value (self, _tmp109_, TRUE, (ValaCodeNode*) list, NULL);
15666 			instance = _tmp110_;
15667 			_tmp111_ = st;
15668 			_tmp112_ = vala_struct_get_fields (_tmp111_);
15669 			_tmp113_ = vala_iterable_iterator ((ValaIterable*) _tmp112_);
15670 			field_it = _tmp113_;
15671 			{
15672 				ValaList* _expr_list = NULL;
15673 				ValaList* _tmp114_;
15674 				ValaList* _tmp115_;
15675 				gint _expr_size = 0;
15676 				ValaList* _tmp116_;
15677 				gint _tmp117_;
15678 				gint _tmp118_;
15679 				gint _expr_index = 0;
15680 				_tmp114_ = vala_initializer_list_get_initializers (list);
15681 				_tmp115_ = _vala_iterable_ref0 (_tmp114_);
15682 				_expr_list = _tmp115_;
15683 				_tmp116_ = _expr_list;
15684 				_tmp117_ = vala_collection_get_size ((ValaCollection*) _tmp116_);
15685 				_tmp118_ = _tmp117_;
15686 				_expr_size = _tmp118_;
15687 				_expr_index = -1;
15688 				while (TRUE) {
15689 					gint _tmp119_;
15690 					gint _tmp120_;
15691 					ValaExpression* expr = NULL;
15692 					ValaList* _tmp121_;
15693 					gpointer _tmp122_;
15694 					ValaField* field = NULL;
15695 					ValaField* _tmp130_;
15696 					ValaTargetValue* _tmp131_;
15697 					ValaExpression* _tmp132_;
15698 					ValaTargetValue* _tmp133_;
15699 					ValaTargetValue* _tmp134_;
15700 					ValaExpression* _tmp135_;
15701 					ValaSourceReference* _tmp136_;
15702 					ValaSourceReference* _tmp137_;
15703 					_expr_index = _expr_index + 1;
15704 					_tmp119_ = _expr_index;
15705 					_tmp120_ = _expr_size;
15706 					if (!(_tmp119_ < _tmp120_)) {
15707 						break;
15708 					}
15709 					_tmp121_ = _expr_list;
15710 					_tmp122_ = vala_list_get (_tmp121_, _expr_index);
15711 					expr = (ValaExpression*) _tmp122_;
15712 					field = NULL;
15713 					while (TRUE) {
15714 						ValaField* _tmp123_;
15715 						ValaIterator* _tmp124_;
15716 						ValaIterator* _tmp125_;
15717 						gpointer _tmp126_;
15718 						ValaField* _tmp127_;
15719 						ValaMemberBinding _tmp128_;
15720 						ValaMemberBinding _tmp129_;
15721 						_tmp123_ = field;
15722 						if (!(_tmp123_ == NULL)) {
15723 							break;
15724 						}
15725 						_tmp124_ = field_it;
15726 						vala_iterator_next (_tmp124_);
15727 						_tmp125_ = field_it;
15728 						_tmp126_ = vala_iterator_get (_tmp125_);
15729 						_vala_code_node_unref0 (field);
15730 						field = (ValaField*) _tmp126_;
15731 						_tmp127_ = field;
15732 						_tmp128_ = vala_field_get_binding (_tmp127_);
15733 						_tmp129_ = _tmp128_;
15734 						if (_tmp129_ != VALA_MEMBER_BINDING_INSTANCE) {
15735 							_vala_code_node_unref0 (field);
15736 							field = NULL;
15737 						}
15738 					}
15739 					_tmp130_ = field;
15740 					_tmp131_ = instance;
15741 					_tmp132_ = expr;
15742 					_tmp133_ = vala_expression_get_target_value (_tmp132_);
15743 					_tmp134_ = _tmp133_;
15744 					_tmp135_ = expr;
15745 					_tmp136_ = vala_code_node_get_source_reference ((ValaCodeNode*) _tmp135_);
15746 					_tmp137_ = _tmp136_;
15747 					vala_code_generator_store_field ((ValaCodeGenerator*) self, _tmp130_, _tmp131_, _tmp134_, _tmp137_);
15748 					_vala_code_node_unref0 (field);
15749 					_vala_code_node_unref0 (expr);
15750 				}
15751 				_vala_iterable_unref0 (_expr_list);
15752 			}
15753 			_tmp138_ = instance;
15754 			vala_expression_set_target_value ((ValaExpression*) list, _tmp138_);
15755 			_vala_iterator_unref0 (field_it);
15756 			_vala_target_value_unref0 (instance);
15757 		}
15758 	} else {
15759 		ValaCCodeInitializerList* clist = NULL;
15760 		ValaCCodeInitializerList* _tmp139_;
15761 		ValaCCodeInitializerList* _tmp152_;
15762 		_tmp139_ = vala_ccode_initializer_list_new ();
15763 		clist = _tmp139_;
15764 		{
15765 			ValaList* _expr_list = NULL;
15766 			ValaList* _tmp140_;
15767 			ValaList* _tmp141_;
15768 			gint _expr_size = 0;
15769 			ValaList* _tmp142_;
15770 			gint _tmp143_;
15771 			gint _tmp144_;
15772 			gint _expr_index = 0;
15773 			_tmp140_ = vala_initializer_list_get_initializers (list);
15774 			_tmp141_ = _vala_iterable_ref0 (_tmp140_);
15775 			_expr_list = _tmp141_;
15776 			_tmp142_ = _expr_list;
15777 			_tmp143_ = vala_collection_get_size ((ValaCollection*) _tmp142_);
15778 			_tmp144_ = _tmp143_;
15779 			_expr_size = _tmp144_;
15780 			_expr_index = -1;
15781 			while (TRUE) {
15782 				gint _tmp145_;
15783 				gint _tmp146_;
15784 				ValaExpression* expr = NULL;
15785 				ValaList* _tmp147_;
15786 				gpointer _tmp148_;
15787 				ValaCCodeInitializerList* _tmp149_;
15788 				ValaExpression* _tmp150_;
15789 				ValaCCodeExpression* _tmp151_;
15790 				_expr_index = _expr_index + 1;
15791 				_tmp145_ = _expr_index;
15792 				_tmp146_ = _expr_size;
15793 				if (!(_tmp145_ < _tmp146_)) {
15794 					break;
15795 				}
15796 				_tmp147_ = _expr_list;
15797 				_tmp148_ = vala_list_get (_tmp147_, _expr_index);
15798 				expr = (ValaExpression*) _tmp148_;
15799 				_tmp149_ = clist;
15800 				_tmp150_ = expr;
15801 				_tmp151_ = vala_get_cvalue (_tmp150_);
15802 				vala_ccode_initializer_list_append (_tmp149_, _tmp151_);
15803 				_vala_code_node_unref0 (expr);
15804 			}
15805 			_vala_iterable_unref0 (_expr_list);
15806 		}
15807 		_tmp152_ = clist;
15808 		vala_set_cvalue ((ValaExpression*) list, (ValaCCodeExpression*) _tmp152_);
15809 		_vala_ccode_node_unref0 (clist);
15810 	}
15811 }
15812 
15813 ValaLocalVariable*
vala_ccode_base_module_get_temp_variable(ValaCCodeBaseModule * self,ValaDataType * type,gboolean value_owned,ValaCodeNode * node_reference,gboolean init)15814 vala_ccode_base_module_get_temp_variable (ValaCCodeBaseModule* self,
15815                                           ValaDataType* type,
15816                                           gboolean value_owned,
15817                                           ValaCodeNode* node_reference,
15818                                           gboolean init)
15819 {
15820 	ValaDataType* var_type = NULL;
15821 	ValaDataType* _tmp0_;
15822 	ValaDataType* _tmp1_;
15823 	ValaLocalVariable* local = NULL;
15824 	ValaDataType* _tmp2_;
15825 	gint _tmp3_;
15826 	gint _tmp4_;
15827 	gchar* _tmp5_;
15828 	gchar* _tmp6_;
15829 	ValaLocalVariable* _tmp7_;
15830 	ValaLocalVariable* _tmp8_;
15831 	ValaLocalVariable* _tmp9_;
15832 	gint _tmp13_;
15833 	gint _tmp14_;
15834 	ValaLocalVariable* result = NULL;
15835 	g_return_val_if_fail (self != NULL, NULL);
15836 	g_return_val_if_fail (type != NULL, NULL);
15837 	_tmp0_ = vala_data_type_copy (type);
15838 	var_type = _tmp0_;
15839 	_tmp1_ = var_type;
15840 	vala_data_type_set_value_owned (_tmp1_, value_owned);
15841 	_tmp2_ = var_type;
15842 	_tmp3_ = vala_ccode_base_module_get_next_temp_var_id (self);
15843 	_tmp4_ = _tmp3_;
15844 	_tmp5_ = g_strdup_printf ("_tmp%d_", _tmp4_);
15845 	_tmp6_ = _tmp5_;
15846 	_tmp7_ = vala_local_variable_new (_tmp2_, _tmp6_, NULL, NULL);
15847 	_tmp8_ = _tmp7_;
15848 	_g_free0 (_tmp6_);
15849 	local = _tmp8_;
15850 	_tmp9_ = local;
15851 	vala_local_variable_set_init (_tmp9_, init);
15852 	if (node_reference != NULL) {
15853 		ValaLocalVariable* _tmp10_;
15854 		ValaSourceReference* _tmp11_;
15855 		ValaSourceReference* _tmp12_;
15856 		_tmp10_ = local;
15857 		_tmp11_ = vala_code_node_get_source_reference (node_reference);
15858 		_tmp12_ = _tmp11_;
15859 		vala_code_node_set_source_reference ((ValaCodeNode*) _tmp10_, _tmp12_);
15860 	}
15861 	_tmp13_ = vala_ccode_base_module_get_next_temp_var_id (self);
15862 	_tmp14_ = _tmp13_;
15863 	vala_ccode_base_module_set_next_temp_var_id (self, _tmp14_ + 1);
15864 	result = local;
15865 	_vala_code_node_unref0 (var_type);
15866 	return result;
15867 }
15868 
15869 static gboolean
vala_ccode_base_module_is_in_generic_type(ValaCCodeBaseModule * self,ValaGenericType * type)15870 vala_ccode_base_module_is_in_generic_type (ValaCCodeBaseModule* self,
15871                                            ValaGenericType* type)
15872 {
15873 	gboolean _tmp0_ = FALSE;
15874 	gboolean _tmp1_ = FALSE;
15875 	ValaSymbol* _tmp2_;
15876 	ValaSymbol* _tmp3_;
15877 	gboolean result = FALSE;
15878 	g_return_val_if_fail (self != NULL, FALSE);
15879 	g_return_val_if_fail (type != NULL, FALSE);
15880 	_tmp2_ = vala_ccode_base_module_get_current_symbol (self);
15881 	_tmp3_ = _tmp2_;
15882 	if (_tmp3_ != NULL) {
15883 		ValaTypeParameter* _tmp4_;
15884 		ValaTypeParameter* _tmp5_;
15885 		ValaSymbol* _tmp6_;
15886 		ValaSymbol* _tmp7_;
15887 		_tmp4_ = vala_generic_type_get_type_parameter (type);
15888 		_tmp5_ = _tmp4_;
15889 		_tmp6_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp5_);
15890 		_tmp7_ = _tmp6_;
15891 		_tmp1_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp7_, VALA_TYPE_TYPESYMBOL);
15892 	} else {
15893 		_tmp1_ = FALSE;
15894 	}
15895 	if (_tmp1_) {
15896 		gboolean _tmp8_ = FALSE;
15897 		ValaMethod* _tmp9_;
15898 		ValaMethod* _tmp10_;
15899 		_tmp9_ = vala_ccode_base_module_get_current_method (self);
15900 		_tmp10_ = _tmp9_;
15901 		if (_tmp10_ == NULL) {
15902 			_tmp8_ = TRUE;
15903 		} else {
15904 			ValaMethod* _tmp11_;
15905 			ValaMethod* _tmp12_;
15906 			ValaMemberBinding _tmp13_;
15907 			ValaMemberBinding _tmp14_;
15908 			_tmp11_ = vala_ccode_base_module_get_current_method (self);
15909 			_tmp12_ = _tmp11_;
15910 			_tmp13_ = vala_method_get_binding (_tmp12_);
15911 			_tmp14_ = _tmp13_;
15912 			_tmp8_ = _tmp14_ == VALA_MEMBER_BINDING_INSTANCE;
15913 		}
15914 		_tmp0_ = _tmp8_;
15915 	} else {
15916 		_tmp0_ = FALSE;
15917 	}
15918 	if (_tmp0_) {
15919 		result = TRUE;
15920 		return result;
15921 	} else {
15922 		result = FALSE;
15923 		return result;
15924 	}
15925 }
15926 
15927 static void
vala_ccode_base_module_require_generic_accessors(ValaCCodeBaseModule * self,ValaInterface * iface)15928 vala_ccode_base_module_require_generic_accessors (ValaCCodeBaseModule* self,
15929                                                   ValaInterface* iface)
15930 {
15931 	ValaAttribute* _tmp0_;
15932 	g_return_if_fail (self != NULL);
15933 	g_return_if_fail (iface != NULL);
15934 	_tmp0_ = vala_code_node_get_attribute ((ValaCodeNode*) iface, "GenericAccessors");
15935 	if (_tmp0_ == NULL) {
15936 		ValaSourceReference* _tmp1_;
15937 		ValaSourceReference* _tmp2_;
15938 		gchar* _tmp3_;
15939 		gchar* _tmp4_;
15940 		gchar* _tmp5_;
15941 		gchar* _tmp6_;
15942 		_tmp1_ = vala_code_node_get_source_reference ((ValaCodeNode*) iface);
15943 		_tmp2_ = _tmp1_;
15944 		_tmp3_ = vala_symbol_get_full_name ((ValaSymbol*) iface);
15945 		_tmp4_ = _tmp3_;
15946 		_tmp5_ = g_strdup_printf ("missing generic type for interface `%s', add GenericAccessors attribut" \
15947 "e to interface declaration", _tmp4_);
15948 		_tmp6_ = _tmp5_;
15949 		vala_report_error (_tmp2_, _tmp6_);
15950 		_g_free0 (_tmp6_);
15951 		_g_free0 (_tmp4_);
15952 	}
15953 }
15954 
15955 ValaCCodeExpression*
vala_ccode_base_module_get_type_id_expression(ValaCCodeBaseModule * self,ValaDataType * type,gboolean is_chainup)15956 vala_ccode_base_module_get_type_id_expression (ValaCCodeBaseModule* self,
15957                                                ValaDataType* type,
15958                                                gboolean is_chainup)
15959 {
15960 	ValaCCodeExpression* result = NULL;
15961 	g_return_val_if_fail (self != NULL, NULL);
15962 	g_return_val_if_fail (type != NULL, NULL);
15963 	if (G_TYPE_CHECK_INSTANCE_TYPE (type, VALA_TYPE_GENERIC_TYPE)) {
15964 		ValaTypeParameter* type_parameter = NULL;
15965 		ValaTypeParameter* _tmp0_;
15966 		ValaTypeParameter* _tmp1_;
15967 		ValaTypeParameter* _tmp2_;
15968 		gchar* var_name = NULL;
15969 		ValaTypeParameter* _tmp3_;
15970 		const gchar* _tmp4_;
15971 		const gchar* _tmp5_;
15972 		gchar* _tmp6_;
15973 		gchar* _tmp7_;
15974 		gchar* _tmp8_;
15975 		gchar* _tmp9_;
15976 		ValaTypeParameter* _tmp10_;
15977 		ValaSymbol* _tmp11_;
15978 		ValaSymbol* _tmp12_;
15979 		gboolean _tmp44_ = FALSE;
15980 		gboolean _tmp45_ = FALSE;
15981 		_tmp0_ = vala_generic_type_get_type_parameter (G_TYPE_CHECK_INSTANCE_CAST (type, VALA_TYPE_GENERIC_TYPE, ValaGenericType));
15982 		_tmp1_ = _tmp0_;
15983 		_tmp2_ = _vala_code_node_ref0 (_tmp1_);
15984 		type_parameter = _tmp2_;
15985 		_tmp3_ = type_parameter;
15986 		_tmp4_ = vala_symbol_get_name ((ValaSymbol*) _tmp3_);
15987 		_tmp5_ = _tmp4_;
15988 		_tmp6_ = g_ascii_strdown (_tmp5_, (gssize) -1);
15989 		_tmp7_ = _tmp6_;
15990 		_tmp8_ = g_strdup_printf ("%s_type", _tmp7_);
15991 		_tmp9_ = _tmp8_;
15992 		_g_free0 (_tmp7_);
15993 		var_name = _tmp9_;
15994 		_tmp10_ = type_parameter;
15995 		_tmp11_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp10_);
15996 		_tmp12_ = _tmp11_;
15997 		if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp12_, VALA_TYPE_INTERFACE)) {
15998 			ValaInterface* iface = NULL;
15999 			ValaTypeParameter* _tmp13_;
16000 			ValaSymbol* _tmp14_;
16001 			ValaSymbol* _tmp15_;
16002 			ValaInterface* _tmp16_;
16003 			ValaInterface* _tmp17_;
16004 			gchar* method_name = NULL;
16005 			ValaTypeParameter* _tmp18_;
16006 			const gchar* _tmp19_;
16007 			const gchar* _tmp20_;
16008 			gchar* _tmp21_;
16009 			gchar* _tmp22_;
16010 			gchar* _tmp23_;
16011 			gchar* _tmp24_;
16012 			ValaCCodeFunctionCall* cast_self = NULL;
16013 			ValaInterface* _tmp25_;
16014 			gchar* _tmp26_;
16015 			gchar* _tmp27_;
16016 			ValaCCodeIdentifier* _tmp28_;
16017 			ValaCCodeIdentifier* _tmp29_;
16018 			ValaCCodeFunctionCall* _tmp30_;
16019 			ValaCCodeFunctionCall* _tmp31_;
16020 			ValaCCodeFunctionCall* _tmp32_;
16021 			ValaCCodeExpression* _tmp33_;
16022 			ValaCCodeExpression* _tmp34_;
16023 			ValaCCodeFunctionCall* function_call = NULL;
16024 			ValaCCodeFunctionCall* _tmp35_;
16025 			const gchar* _tmp36_;
16026 			ValaCCodeMemberAccess* _tmp37_;
16027 			ValaCCodeMemberAccess* _tmp38_;
16028 			ValaCCodeFunctionCall* _tmp39_;
16029 			ValaCCodeFunctionCall* _tmp40_;
16030 			ValaCCodeFunctionCall* _tmp41_;
16031 			ValaCCodeExpression* _tmp42_;
16032 			ValaCCodeExpression* _tmp43_;
16033 			_tmp13_ = type_parameter;
16034 			_tmp14_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp13_);
16035 			_tmp15_ = _tmp14_;
16036 			_tmp16_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp15_, VALA_TYPE_INTERFACE, ValaInterface));
16037 			iface = _tmp16_;
16038 			_tmp17_ = iface;
16039 			vala_ccode_base_module_require_generic_accessors (self, _tmp17_);
16040 			_tmp18_ = type_parameter;
16041 			_tmp19_ = vala_symbol_get_name ((ValaSymbol*) _tmp18_);
16042 			_tmp20_ = _tmp19_;
16043 			_tmp21_ = g_ascii_strdown (_tmp20_, (gssize) -1);
16044 			_tmp22_ = _tmp21_;
16045 			_tmp23_ = g_strdup_printf ("get_%s_type", _tmp22_);
16046 			_tmp24_ = _tmp23_;
16047 			_g_free0 (_tmp22_);
16048 			method_name = _tmp24_;
16049 			_tmp25_ = iface;
16050 			_tmp26_ = vala_get_ccode_type_get_function ((ValaObjectTypeSymbol*) _tmp25_);
16051 			_tmp27_ = _tmp26_;
16052 			_tmp28_ = vala_ccode_identifier_new (_tmp27_);
16053 			_tmp29_ = _tmp28_;
16054 			_tmp30_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp29_);
16055 			_tmp31_ = _tmp30_;
16056 			_vala_ccode_node_unref0 (_tmp29_);
16057 			_g_free0 (_tmp27_);
16058 			cast_self = _tmp31_;
16059 			_tmp32_ = cast_self;
16060 			_tmp33_ = vala_ccode_base_module_get_this_cexpression (self);
16061 			_tmp34_ = _tmp33_;
16062 			vala_ccode_function_call_add_argument (_tmp32_, _tmp34_);
16063 			_vala_ccode_node_unref0 (_tmp34_);
16064 			_tmp35_ = cast_self;
16065 			_tmp36_ = method_name;
16066 			_tmp37_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) _tmp35_, _tmp36_);
16067 			_tmp38_ = _tmp37_;
16068 			_tmp39_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp38_);
16069 			_tmp40_ = _tmp39_;
16070 			_vala_ccode_node_unref0 (_tmp38_);
16071 			function_call = _tmp40_;
16072 			_tmp41_ = function_call;
16073 			_tmp42_ = vala_ccode_base_module_get_this_cexpression (self);
16074 			_tmp43_ = _tmp42_;
16075 			vala_ccode_function_call_add_argument (_tmp41_, _tmp43_);
16076 			_vala_ccode_node_unref0 (_tmp43_);
16077 			result = (ValaCCodeExpression*) function_call;
16078 			_vala_ccode_node_unref0 (cast_self);
16079 			_g_free0 (method_name);
16080 			_vala_code_node_unref0 (iface);
16081 			_g_free0 (var_name);
16082 			_vala_code_node_unref0 (type_parameter);
16083 			return result;
16084 		}
16085 		if (vala_ccode_base_module_is_in_generic_type (self, G_TYPE_CHECK_INSTANCE_CAST (type, VALA_TYPE_GENERIC_TYPE, ValaGenericType))) {
16086 			_tmp45_ = !is_chainup;
16087 		} else {
16088 			_tmp45_ = FALSE;
16089 		}
16090 		if (_tmp45_) {
16091 			gboolean _tmp46_;
16092 			gboolean _tmp47_;
16093 			_tmp46_ = vala_ccode_base_module_get_in_creation_method (self);
16094 			_tmp47_ = _tmp46_;
16095 			_tmp44_ = !_tmp47_;
16096 		} else {
16097 			_tmp44_ = FALSE;
16098 		}
16099 		if (_tmp44_) {
16100 			ValaCCodeExpression* _tmp48_;
16101 			ValaCCodeExpression* _tmp49_;
16102 			ValaCCodeMemberAccess* _tmp50_;
16103 			ValaCCodeMemberAccess* _tmp51_;
16104 			const gchar* _tmp52_;
16105 			ValaCCodeMemberAccess* _tmp53_;
16106 			ValaCCodeExpression* _tmp54_;
16107 			_tmp48_ = vala_ccode_base_module_get_this_cexpression (self);
16108 			_tmp49_ = _tmp48_;
16109 			_tmp50_ = vala_ccode_member_access_new_pointer (_tmp49_, "priv");
16110 			_tmp51_ = _tmp50_;
16111 			_tmp52_ = var_name;
16112 			_tmp53_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) _tmp51_, _tmp52_);
16113 			_tmp54_ = (ValaCCodeExpression*) _tmp53_;
16114 			_vala_ccode_node_unref0 (_tmp51_);
16115 			_vala_ccode_node_unref0 (_tmp49_);
16116 			result = _tmp54_;
16117 			_g_free0 (var_name);
16118 			_vala_code_node_unref0 (type_parameter);
16119 			return result;
16120 		} else {
16121 			const gchar* _tmp55_;
16122 			ValaCCodeExpression* _tmp56_;
16123 			_tmp55_ = var_name;
16124 			_tmp56_ = vala_ccode_base_module_get_variable_cexpression (self, _tmp55_);
16125 			result = _tmp56_;
16126 			_g_free0 (var_name);
16127 			_vala_code_node_unref0 (type_parameter);
16128 			return result;
16129 		}
16130 		_g_free0 (var_name);
16131 		_vala_code_node_unref0 (type_parameter);
16132 	} else {
16133 		gchar* type_id = NULL;
16134 		gchar* _tmp57_;
16135 		const gchar* _tmp58_;
16136 		const gchar* _tmp61_;
16137 		ValaCCodeIdentifier* _tmp62_;
16138 		_tmp57_ = vala_get_ccode_type_id ((ValaCodeNode*) type);
16139 		type_id = _tmp57_;
16140 		_tmp58_ = type_id;
16141 		if (g_strcmp0 (_tmp58_, "") == 0) {
16142 			gchar* _tmp59_;
16143 			_tmp59_ = g_strdup ("G_TYPE_INVALID");
16144 			_g_free0 (type_id);
16145 			type_id = _tmp59_;
16146 		} else {
16147 			ValaCCodeFile* _tmp60_;
16148 			_tmp60_ = self->cfile;
16149 			vala_ccode_base_module_generate_type_declaration (self, type, _tmp60_);
16150 		}
16151 		_tmp61_ = type_id;
16152 		_tmp62_ = vala_ccode_identifier_new (_tmp61_);
16153 		result = (ValaCCodeExpression*) _tmp62_;
16154 		_g_free0 (type_id);
16155 		return result;
16156 	}
16157 }
16158 
16159 static ValaCCodeExpression*
vala_ccode_base_module_real_get_dup_func_expression(ValaCCodeBaseModule * self,ValaDataType * type,ValaSourceReference * source_reference,gboolean is_chainup)16160 vala_ccode_base_module_real_get_dup_func_expression (ValaCCodeBaseModule* self,
16161                                                      ValaDataType* type,
16162                                                      ValaSourceReference* source_reference,
16163                                                      gboolean is_chainup)
16164 {
16165 	ValaCCodeExpression* result = NULL;
16166 	g_return_val_if_fail (type != NULL, NULL);
16167 	if (G_TYPE_CHECK_INSTANCE_TYPE (type, VALA_TYPE_ERROR_TYPE)) {
16168 		ValaCCodeIdentifier* _tmp0_;
16169 		_tmp0_ = vala_ccode_identifier_new ("g_error_copy");
16170 		result = (ValaCCodeExpression*) _tmp0_;
16171 		return result;
16172 	} else {
16173 		ValaTypeSymbol* _tmp1_;
16174 		ValaTypeSymbol* _tmp2_;
16175 		_tmp1_ = vala_data_type_get_type_symbol (type);
16176 		_tmp2_ = _tmp1_;
16177 		if (_tmp2_ != NULL) {
16178 			gchar* dup_function = NULL;
16179 			ValaClass* cl = NULL;
16180 			ValaTypeSymbol* _tmp3_;
16181 			ValaTypeSymbol* _tmp4_;
16182 			ValaTypeSymbol* _tmp5_;
16183 			ValaTypeSymbol* _tmp6_;
16184 			const gchar* _tmp53_;
16185 			ValaCCodeIdentifier* _tmp54_;
16186 			_tmp3_ = vala_data_type_get_type_symbol (type);
16187 			_tmp4_ = _tmp3_;
16188 			cl = G_TYPE_CHECK_INSTANCE_TYPE (_tmp4_, VALA_TYPE_CLASS) ? ((ValaClass*) _tmp4_) : NULL;
16189 			_tmp5_ = vala_data_type_get_type_symbol (type);
16190 			_tmp6_ = _tmp5_;
16191 			if (vala_is_reference_counting (_tmp6_)) {
16192 				ValaTypeSymbol* _tmp7_;
16193 				ValaTypeSymbol* _tmp8_;
16194 				gchar* _tmp9_;
16195 				gboolean _tmp10_ = FALSE;
16196 				ValaTypeSymbol* _tmp11_;
16197 				ValaTypeSymbol* _tmp12_;
16198 				_tmp7_ = vala_data_type_get_type_symbol (type);
16199 				_tmp8_ = _tmp7_;
16200 				_tmp9_ = vala_get_ccode_ref_function ((ValaTypeSymbol*) G_TYPE_CHECK_INSTANCE_CAST (_tmp8_, VALA_TYPE_OBJECT_TYPE_SYMBOL, ValaObjectTypeSymbol));
16201 				_g_free0 (dup_function);
16202 				dup_function = _tmp9_;
16203 				_tmp11_ = vala_data_type_get_type_symbol (type);
16204 				_tmp12_ = _tmp11_;
16205 				if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp12_, VALA_TYPE_INTERFACE)) {
16206 					const gchar* _tmp13_;
16207 					_tmp13_ = dup_function;
16208 					_tmp10_ = _tmp13_ == NULL;
16209 				} else {
16210 					_tmp10_ = FALSE;
16211 				}
16212 				if (_tmp10_) {
16213 					ValaTypeSymbol* _tmp14_;
16214 					ValaTypeSymbol* _tmp15_;
16215 					gchar* _tmp16_;
16216 					gchar* _tmp17_;
16217 					gchar* _tmp18_;
16218 					gchar* _tmp19_;
16219 					ValaCCodeInvalidExpression* _tmp20_;
16220 					_tmp14_ = vala_data_type_get_type_symbol (type);
16221 					_tmp15_ = _tmp14_;
16222 					_tmp16_ = vala_symbol_get_full_name ((ValaSymbol*) _tmp15_);
16223 					_tmp17_ = _tmp16_;
16224 					_tmp18_ = g_strdup_printf ("missing class prerequisite for interface `%s', add GLib.Object to inte" \
16225 "rface declaration if unsure", _tmp17_);
16226 					_tmp19_ = _tmp18_;
16227 					vala_report_error (source_reference, _tmp19_);
16228 					_g_free0 (_tmp19_);
16229 					_g_free0 (_tmp17_);
16230 					_tmp20_ = vala_ccode_invalid_expression_new ();
16231 					result = (ValaCCodeExpression*) _tmp20_;
16232 					_g_free0 (dup_function);
16233 					return result;
16234 				}
16235 			} else {
16236 				gboolean _tmp21_ = FALSE;
16237 				ValaClass* _tmp22_;
16238 				_tmp22_ = cl;
16239 				if (_tmp22_ != NULL) {
16240 					ValaClass* _tmp23_;
16241 					gboolean _tmp24_;
16242 					gboolean _tmp25_;
16243 					_tmp23_ = cl;
16244 					_tmp24_ = vala_class_get_is_immutable (_tmp23_);
16245 					_tmp25_ = _tmp24_;
16246 					_tmp21_ = _tmp25_;
16247 				} else {
16248 					_tmp21_ = FALSE;
16249 				}
16250 				if (_tmp21_) {
16251 					ValaTypeSymbol* _tmp26_;
16252 					ValaTypeSymbol* _tmp27_;
16253 					gchar* _tmp28_;
16254 					const gchar* _tmp29_;
16255 					_tmp26_ = vala_data_type_get_type_symbol (type);
16256 					_tmp27_ = _tmp26_;
16257 					_tmp28_ = vala_get_ccode_dup_function (_tmp27_);
16258 					_g_free0 (dup_function);
16259 					dup_function = _tmp28_;
16260 					_tmp29_ = dup_function;
16261 					if (_tmp29_ == NULL) {
16262 						gchar* _tmp30_;
16263 						_tmp30_ = g_strdup ("");
16264 						_g_free0 (dup_function);
16265 						dup_function = _tmp30_;
16266 					}
16267 				} else {
16268 					ValaTypeSymbol* _tmp31_;
16269 					ValaTypeSymbol* _tmp32_;
16270 					_tmp31_ = vala_data_type_get_type_symbol (type);
16271 					_tmp32_ = _tmp31_;
16272 					if (vala_get_ccode_is_gboxed (_tmp32_)) {
16273 						gchar* _tmp33_;
16274 						const gchar* _tmp34_;
16275 						_tmp33_ = vala_ccode_base_module_generate_dup_func_wrapper (self, type);
16276 						_g_free0 (dup_function);
16277 						dup_function = _tmp33_;
16278 						_tmp34_ = dup_function;
16279 						if (_tmp34_ == NULL) {
16280 							gchar* _tmp35_;
16281 							_tmp35_ = g_strdup ("");
16282 							_g_free0 (dup_function);
16283 							dup_function = _tmp35_;
16284 						}
16285 					} else {
16286 						if (G_TYPE_CHECK_INSTANCE_TYPE (type, VALA_TYPE_VALUE_TYPE)) {
16287 							ValaTypeSymbol* _tmp36_;
16288 							ValaTypeSymbol* _tmp37_;
16289 							gchar* _tmp38_;
16290 							gboolean _tmp39_ = FALSE;
16291 							const gchar* _tmp40_;
16292 							_tmp36_ = vala_data_type_get_type_symbol (type);
16293 							_tmp37_ = _tmp36_;
16294 							_tmp38_ = vala_get_ccode_dup_function (_tmp37_);
16295 							_g_free0 (dup_function);
16296 							dup_function = _tmp38_;
16297 							_tmp40_ = dup_function;
16298 							if (_tmp40_ == NULL) {
16299 								gboolean _tmp41_;
16300 								gboolean _tmp42_;
16301 								_tmp41_ = vala_data_type_get_nullable (type);
16302 								_tmp42_ = _tmp41_;
16303 								_tmp39_ = _tmp42_;
16304 							} else {
16305 								_tmp39_ = FALSE;
16306 							}
16307 							if (_tmp39_) {
16308 								gchar* _tmp43_;
16309 								_tmp43_ = vala_ccode_base_module_generate_struct_dup_wrapper (self, G_TYPE_CHECK_INSTANCE_CAST (type, VALA_TYPE_VALUE_TYPE, ValaValueType));
16310 								_g_free0 (dup_function);
16311 								dup_function = _tmp43_;
16312 							} else {
16313 								const gchar* _tmp44_;
16314 								_tmp44_ = dup_function;
16315 								if (_tmp44_ == NULL) {
16316 									gchar* _tmp45_;
16317 									_tmp45_ = g_strdup ("");
16318 									_g_free0 (dup_function);
16319 									dup_function = _tmp45_;
16320 								}
16321 							}
16322 						} else {
16323 							ValaTypeSymbol* _tmp46_;
16324 							ValaTypeSymbol* _tmp47_;
16325 							const gchar* _tmp48_;
16326 							const gchar* _tmp49_;
16327 							gchar* _tmp50_;
16328 							gchar* _tmp51_;
16329 							ValaCCodeInvalidExpression* _tmp52_;
16330 							_tmp46_ = vala_data_type_get_type_symbol (type);
16331 							_tmp47_ = _tmp46_;
16332 							_tmp48_ = vala_symbol_get_name ((ValaSymbol*) _tmp47_);
16333 							_tmp49_ = _tmp48_;
16334 							_tmp50_ = g_strdup_printf ("duplicating %s instance, use unowned variable or explicitly invoke cop" \
16335 "y method", _tmp49_);
16336 							_tmp51_ = _tmp50_;
16337 							vala_report_error (source_reference, _tmp51_);
16338 							_g_free0 (_tmp51_);
16339 							_tmp52_ = vala_ccode_invalid_expression_new ();
16340 							result = (ValaCCodeExpression*) _tmp52_;
16341 							_g_free0 (dup_function);
16342 							return result;
16343 						}
16344 					}
16345 				}
16346 			}
16347 			_tmp53_ = dup_function;
16348 			_tmp54_ = vala_ccode_identifier_new (_tmp53_);
16349 			result = (ValaCCodeExpression*) _tmp54_;
16350 			_g_free0 (dup_function);
16351 			return result;
16352 		} else {
16353 			if (G_TYPE_CHECK_INSTANCE_TYPE (type, VALA_TYPE_GENERIC_TYPE)) {
16354 				ValaTypeParameter* type_parameter = NULL;
16355 				ValaTypeParameter* _tmp55_;
16356 				ValaTypeParameter* _tmp56_;
16357 				ValaTypeParameter* _tmp57_;
16358 				gchar* func_name = NULL;
16359 				ValaTypeParameter* _tmp58_;
16360 				const gchar* _tmp59_;
16361 				const gchar* _tmp60_;
16362 				gchar* _tmp61_;
16363 				gchar* _tmp62_;
16364 				gchar* _tmp63_;
16365 				gchar* _tmp64_;
16366 				ValaTypeParameter* _tmp65_;
16367 				ValaSymbol* _tmp66_;
16368 				ValaSymbol* _tmp67_;
16369 				gboolean _tmp99_ = FALSE;
16370 				gboolean _tmp100_ = FALSE;
16371 				_tmp55_ = vala_generic_type_get_type_parameter (G_TYPE_CHECK_INSTANCE_CAST (type, VALA_TYPE_GENERIC_TYPE, ValaGenericType));
16372 				_tmp56_ = _tmp55_;
16373 				_tmp57_ = _vala_code_node_ref0 (_tmp56_);
16374 				type_parameter = _tmp57_;
16375 				_tmp58_ = type_parameter;
16376 				_tmp59_ = vala_symbol_get_name ((ValaSymbol*) _tmp58_);
16377 				_tmp60_ = _tmp59_;
16378 				_tmp61_ = g_ascii_strdown (_tmp60_, (gssize) -1);
16379 				_tmp62_ = _tmp61_;
16380 				_tmp63_ = g_strdup_printf ("%s_dup_func", _tmp62_);
16381 				_tmp64_ = _tmp63_;
16382 				_g_free0 (_tmp62_);
16383 				func_name = _tmp64_;
16384 				_tmp65_ = type_parameter;
16385 				_tmp66_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp65_);
16386 				_tmp67_ = _tmp66_;
16387 				if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp67_, VALA_TYPE_INTERFACE)) {
16388 					ValaInterface* iface = NULL;
16389 					ValaTypeParameter* _tmp68_;
16390 					ValaSymbol* _tmp69_;
16391 					ValaSymbol* _tmp70_;
16392 					ValaInterface* _tmp71_;
16393 					ValaInterface* _tmp72_;
16394 					gchar* method_name = NULL;
16395 					ValaTypeParameter* _tmp73_;
16396 					const gchar* _tmp74_;
16397 					const gchar* _tmp75_;
16398 					gchar* _tmp76_;
16399 					gchar* _tmp77_;
16400 					gchar* _tmp78_;
16401 					gchar* _tmp79_;
16402 					ValaCCodeFunctionCall* cast_self = NULL;
16403 					ValaInterface* _tmp80_;
16404 					gchar* _tmp81_;
16405 					gchar* _tmp82_;
16406 					ValaCCodeIdentifier* _tmp83_;
16407 					ValaCCodeIdentifier* _tmp84_;
16408 					ValaCCodeFunctionCall* _tmp85_;
16409 					ValaCCodeFunctionCall* _tmp86_;
16410 					ValaCCodeFunctionCall* _tmp87_;
16411 					ValaCCodeExpression* _tmp88_;
16412 					ValaCCodeExpression* _tmp89_;
16413 					ValaCCodeFunctionCall* function_call = NULL;
16414 					ValaCCodeFunctionCall* _tmp90_;
16415 					const gchar* _tmp91_;
16416 					ValaCCodeMemberAccess* _tmp92_;
16417 					ValaCCodeMemberAccess* _tmp93_;
16418 					ValaCCodeFunctionCall* _tmp94_;
16419 					ValaCCodeFunctionCall* _tmp95_;
16420 					ValaCCodeFunctionCall* _tmp96_;
16421 					ValaCCodeExpression* _tmp97_;
16422 					ValaCCodeExpression* _tmp98_;
16423 					_tmp68_ = type_parameter;
16424 					_tmp69_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp68_);
16425 					_tmp70_ = _tmp69_;
16426 					_tmp71_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp70_, VALA_TYPE_INTERFACE, ValaInterface));
16427 					iface = _tmp71_;
16428 					_tmp72_ = iface;
16429 					vala_ccode_base_module_require_generic_accessors (self, _tmp72_);
16430 					_tmp73_ = type_parameter;
16431 					_tmp74_ = vala_symbol_get_name ((ValaSymbol*) _tmp73_);
16432 					_tmp75_ = _tmp74_;
16433 					_tmp76_ = g_ascii_strdown (_tmp75_, (gssize) -1);
16434 					_tmp77_ = _tmp76_;
16435 					_tmp78_ = g_strdup_printf ("get_%s_dup_func", _tmp77_);
16436 					_tmp79_ = _tmp78_;
16437 					_g_free0 (_tmp77_);
16438 					method_name = _tmp79_;
16439 					_tmp80_ = iface;
16440 					_tmp81_ = vala_get_ccode_type_get_function ((ValaObjectTypeSymbol*) _tmp80_);
16441 					_tmp82_ = _tmp81_;
16442 					_tmp83_ = vala_ccode_identifier_new (_tmp82_);
16443 					_tmp84_ = _tmp83_;
16444 					_tmp85_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp84_);
16445 					_tmp86_ = _tmp85_;
16446 					_vala_ccode_node_unref0 (_tmp84_);
16447 					_g_free0 (_tmp82_);
16448 					cast_self = _tmp86_;
16449 					_tmp87_ = cast_self;
16450 					_tmp88_ = vala_ccode_base_module_get_this_cexpression (self);
16451 					_tmp89_ = _tmp88_;
16452 					vala_ccode_function_call_add_argument (_tmp87_, _tmp89_);
16453 					_vala_ccode_node_unref0 (_tmp89_);
16454 					_tmp90_ = cast_self;
16455 					_tmp91_ = method_name;
16456 					_tmp92_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) _tmp90_, _tmp91_);
16457 					_tmp93_ = _tmp92_;
16458 					_tmp94_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp93_);
16459 					_tmp95_ = _tmp94_;
16460 					_vala_ccode_node_unref0 (_tmp93_);
16461 					function_call = _tmp95_;
16462 					_tmp96_ = function_call;
16463 					_tmp97_ = vala_ccode_base_module_get_this_cexpression (self);
16464 					_tmp98_ = _tmp97_;
16465 					vala_ccode_function_call_add_argument (_tmp96_, _tmp98_);
16466 					_vala_ccode_node_unref0 (_tmp98_);
16467 					result = (ValaCCodeExpression*) function_call;
16468 					_vala_ccode_node_unref0 (cast_self);
16469 					_g_free0 (method_name);
16470 					_vala_code_node_unref0 (iface);
16471 					_g_free0 (func_name);
16472 					_vala_code_node_unref0 (type_parameter);
16473 					return result;
16474 				}
16475 				if (vala_ccode_base_module_is_in_generic_type (self, G_TYPE_CHECK_INSTANCE_CAST (type, VALA_TYPE_GENERIC_TYPE, ValaGenericType))) {
16476 					_tmp100_ = !is_chainup;
16477 				} else {
16478 					_tmp100_ = FALSE;
16479 				}
16480 				if (_tmp100_) {
16481 					gboolean _tmp101_;
16482 					gboolean _tmp102_;
16483 					_tmp101_ = vala_ccode_base_module_get_in_creation_method (self);
16484 					_tmp102_ = _tmp101_;
16485 					_tmp99_ = !_tmp102_;
16486 				} else {
16487 					_tmp99_ = FALSE;
16488 				}
16489 				if (_tmp99_) {
16490 					ValaCCodeExpression* _tmp103_;
16491 					ValaCCodeExpression* _tmp104_;
16492 					ValaCCodeMemberAccess* _tmp105_;
16493 					ValaCCodeMemberAccess* _tmp106_;
16494 					const gchar* _tmp107_;
16495 					ValaCCodeMemberAccess* _tmp108_;
16496 					ValaCCodeExpression* _tmp109_;
16497 					_tmp103_ = vala_ccode_base_module_get_this_cexpression (self);
16498 					_tmp104_ = _tmp103_;
16499 					_tmp105_ = vala_ccode_member_access_new_pointer (_tmp104_, "priv");
16500 					_tmp106_ = _tmp105_;
16501 					_tmp107_ = func_name;
16502 					_tmp108_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) _tmp106_, _tmp107_);
16503 					_tmp109_ = (ValaCCodeExpression*) _tmp108_;
16504 					_vala_ccode_node_unref0 (_tmp106_);
16505 					_vala_ccode_node_unref0 (_tmp104_);
16506 					result = _tmp109_;
16507 					_g_free0 (func_name);
16508 					_vala_code_node_unref0 (type_parameter);
16509 					return result;
16510 				} else {
16511 					const gchar* _tmp110_;
16512 					ValaCCodeExpression* _tmp111_;
16513 					_tmp110_ = func_name;
16514 					_tmp111_ = vala_ccode_base_module_get_variable_cexpression (self, _tmp110_);
16515 					result = _tmp111_;
16516 					_g_free0 (func_name);
16517 					_vala_code_node_unref0 (type_parameter);
16518 					return result;
16519 				}
16520 				_g_free0 (func_name);
16521 				_vala_code_node_unref0 (type_parameter);
16522 			} else {
16523 				if (G_TYPE_CHECK_INSTANCE_TYPE (type, VALA_TYPE_POINTER_TYPE)) {
16524 					ValaPointerType* pointer_type = NULL;
16525 					ValaPointerType* _tmp112_;
16526 					ValaPointerType* _tmp113_;
16527 					ValaDataType* _tmp114_;
16528 					ValaDataType* _tmp115_;
16529 					ValaCCodeExpression* _tmp116_;
16530 					_tmp112_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (type, VALA_TYPE_POINTER_TYPE, ValaPointerType));
16531 					pointer_type = _tmp112_;
16532 					_tmp113_ = pointer_type;
16533 					_tmp114_ = vala_pointer_type_get_base_type (_tmp113_);
16534 					_tmp115_ = _tmp114_;
16535 					_tmp116_ = vala_ccode_base_module_get_dup_func_expression (self, _tmp115_, source_reference, FALSE);
16536 					result = _tmp116_;
16537 					_vala_code_node_unref0 (pointer_type);
16538 					return result;
16539 				} else {
16540 					ValaCCodeConstant* _tmp117_;
16541 					_tmp117_ = vala_ccode_constant_new ("NULL");
16542 					result = (ValaCCodeExpression*) _tmp117_;
16543 					return result;
16544 				}
16545 			}
16546 		}
16547 	}
16548 }
16549 
16550 ValaCCodeExpression*
vala_ccode_base_module_get_dup_func_expression(ValaCCodeBaseModule * self,ValaDataType * type,ValaSourceReference * source_reference,gboolean is_chainup)16551 vala_ccode_base_module_get_dup_func_expression (ValaCCodeBaseModule* self,
16552                                                 ValaDataType* type,
16553                                                 ValaSourceReference* source_reference,
16554                                                 gboolean is_chainup)
16555 {
16556 	g_return_val_if_fail (self != NULL, NULL);
16557 	return VALA_CCODE_BASE_MODULE_GET_CLASS (self)->get_dup_func_expression (self, type, source_reference, is_chainup);
16558 }
16559 
16560 static void
vala_ccode_base_module_make_comparable_cexpression(ValaCCodeBaseModule * self,ValaDataType ** left_type,ValaCCodeExpression ** cleft,ValaDataType ** right_type,ValaCCodeExpression ** cright)16561 vala_ccode_base_module_make_comparable_cexpression (ValaCCodeBaseModule* self,
16562                                                     ValaDataType* * left_type,
16563                                                     ValaCCodeExpression* * cleft,
16564                                                     ValaDataType* * right_type,
16565                                                     ValaCCodeExpression* * cright)
16566 {
16567 	ValaStruct* left_type_as_struct = NULL;
16568 	ValaTypeSymbol* _tmp0_;
16569 	ValaTypeSymbol* _tmp1_;
16570 	ValaStruct* right_type_as_struct = NULL;
16571 	ValaTypeSymbol* _tmp2_;
16572 	ValaTypeSymbol* _tmp3_;
16573 	ValaObjectTypeSymbol* left_type_as_object_type = NULL;
16574 	ValaTypeSymbol* _tmp4_;
16575 	ValaTypeSymbol* _tmp5_;
16576 	ValaObjectTypeSymbol* right_type_as_object_type = NULL;
16577 	ValaTypeSymbol* _tmp6_;
16578 	ValaTypeSymbol* _tmp7_;
16579 	gboolean _tmp8_ = FALSE;
16580 	gboolean _tmp9_ = FALSE;
16581 	gboolean _tmp10_ = FALSE;
16582 	ValaObjectTypeSymbol* _tmp11_;
16583 	g_return_if_fail (self != NULL);
16584 	g_return_if_fail (*left_type != NULL);
16585 	g_return_if_fail (*cleft != NULL);
16586 	g_return_if_fail (*right_type != NULL);
16587 	g_return_if_fail (*cright != NULL);
16588 	_tmp0_ = vala_data_type_get_type_symbol (*left_type);
16589 	_tmp1_ = _tmp0_;
16590 	left_type_as_struct = G_TYPE_CHECK_INSTANCE_TYPE (_tmp1_, VALA_TYPE_STRUCT) ? ((ValaStruct*) _tmp1_) : NULL;
16591 	_tmp2_ = vala_data_type_get_type_symbol (*right_type);
16592 	_tmp3_ = _tmp2_;
16593 	right_type_as_struct = G_TYPE_CHECK_INSTANCE_TYPE (_tmp3_, VALA_TYPE_STRUCT) ? ((ValaStruct*) _tmp3_) : NULL;
16594 	_tmp4_ = vala_data_type_get_type_symbol (*left_type);
16595 	_tmp5_ = _tmp4_;
16596 	left_type_as_object_type = G_TYPE_CHECK_INSTANCE_TYPE (_tmp5_, VALA_TYPE_OBJECT_TYPE_SYMBOL) ? ((ValaObjectTypeSymbol*) _tmp5_) : NULL;
16597 	_tmp6_ = vala_data_type_get_type_symbol (*right_type);
16598 	_tmp7_ = _tmp6_;
16599 	right_type_as_object_type = G_TYPE_CHECK_INSTANCE_TYPE (_tmp7_, VALA_TYPE_OBJECT_TYPE_SYMBOL) ? ((ValaObjectTypeSymbol*) _tmp7_) : NULL;
16600 	_tmp11_ = left_type_as_object_type;
16601 	if (_tmp11_ != NULL) {
16602 		gboolean _tmp12_ = FALSE;
16603 		ValaObjectTypeSymbol* _tmp13_;
16604 		_tmp13_ = left_type_as_object_type;
16605 		if (!G_TYPE_CHECK_INSTANCE_TYPE (_tmp13_, VALA_TYPE_CLASS)) {
16606 			_tmp12_ = TRUE;
16607 		} else {
16608 			ValaObjectTypeSymbol* _tmp14_;
16609 			gboolean _tmp15_;
16610 			gboolean _tmp16_;
16611 			_tmp14_ = left_type_as_object_type;
16612 			_tmp15_ = vala_class_get_is_compact (G_TYPE_CHECK_INSTANCE_CAST (_tmp14_, VALA_TYPE_CLASS, ValaClass));
16613 			_tmp16_ = _tmp15_;
16614 			_tmp12_ = !_tmp16_;
16615 		}
16616 		_tmp10_ = _tmp12_;
16617 	} else {
16618 		_tmp10_ = FALSE;
16619 	}
16620 	if (_tmp10_) {
16621 		ValaObjectTypeSymbol* _tmp17_;
16622 		_tmp17_ = right_type_as_object_type;
16623 		_tmp9_ = _tmp17_ != NULL;
16624 	} else {
16625 		_tmp9_ = FALSE;
16626 	}
16627 	if (_tmp9_) {
16628 		gboolean _tmp18_ = FALSE;
16629 		ValaObjectTypeSymbol* _tmp19_;
16630 		_tmp19_ = right_type_as_object_type;
16631 		if (!G_TYPE_CHECK_INSTANCE_TYPE (_tmp19_, VALA_TYPE_CLASS)) {
16632 			_tmp18_ = TRUE;
16633 		} else {
16634 			ValaObjectTypeSymbol* _tmp20_;
16635 			gboolean _tmp21_;
16636 			gboolean _tmp22_;
16637 			_tmp20_ = right_type_as_object_type;
16638 			_tmp21_ = vala_class_get_is_compact (G_TYPE_CHECK_INSTANCE_CAST (_tmp20_, VALA_TYPE_CLASS, ValaClass));
16639 			_tmp22_ = _tmp21_;
16640 			_tmp18_ = !_tmp22_;
16641 		}
16642 		_tmp8_ = _tmp18_;
16643 	} else {
16644 		_tmp8_ = FALSE;
16645 	}
16646 	if (_tmp8_) {
16647 		ValaObjectTypeSymbol* _tmp23_;
16648 		ValaObjectTypeSymbol* _tmp24_;
16649 		_tmp23_ = left_type_as_object_type;
16650 		_tmp24_ = right_type_as_object_type;
16651 		if (_tmp23_ != _tmp24_) {
16652 			ValaObjectTypeSymbol* _tmp25_;
16653 			ValaObjectTypeSymbol* _tmp26_;
16654 			_tmp25_ = left_type_as_object_type;
16655 			_tmp26_ = right_type_as_object_type;
16656 			if (vala_typesymbol_is_subtype_of ((ValaTypeSymbol*) _tmp25_, (ValaTypeSymbol*) _tmp26_)) {
16657 				ValaObjectTypeSymbol* _tmp27_;
16658 				ValaCCodeFunctionCall* _tmp28_;
16659 				_tmp27_ = right_type_as_object_type;
16660 				_tmp28_ = vala_ccode_base_module_generate_instance_cast (self, *cleft, (ValaTypeSymbol*) _tmp27_);
16661 				_vala_ccode_node_unref0 (*cleft);
16662 				*cleft = (ValaCCodeExpression*) _tmp28_;
16663 			} else {
16664 				ValaObjectTypeSymbol* _tmp29_;
16665 				ValaObjectTypeSymbol* _tmp30_;
16666 				_tmp29_ = right_type_as_object_type;
16667 				_tmp30_ = left_type_as_object_type;
16668 				if (vala_typesymbol_is_subtype_of ((ValaTypeSymbol*) _tmp29_, (ValaTypeSymbol*) _tmp30_)) {
16669 					ValaObjectTypeSymbol* _tmp31_;
16670 					ValaCCodeFunctionCall* _tmp32_;
16671 					_tmp31_ = left_type_as_object_type;
16672 					_tmp32_ = vala_ccode_base_module_generate_instance_cast (self, *cright, (ValaTypeSymbol*) _tmp31_);
16673 					_vala_ccode_node_unref0 (*cright);
16674 					*cright = (ValaCCodeExpression*) _tmp32_;
16675 				}
16676 			}
16677 		}
16678 	} else {
16679 		gboolean _tmp33_ = FALSE;
16680 		ValaStruct* _tmp34_;
16681 		_tmp34_ = left_type_as_struct;
16682 		if (_tmp34_ != NULL) {
16683 			ValaStruct* _tmp35_;
16684 			_tmp35_ = right_type_as_struct;
16685 			_tmp33_ = _tmp35_ != NULL;
16686 		} else {
16687 			_tmp33_ = FALSE;
16688 		}
16689 		if (_tmp33_) {
16690 			if (G_TYPE_CHECK_INSTANCE_TYPE (*left_type, VALA_TYPE_STRUCT_VALUE_TYPE)) {
16691 				gboolean _tmp36_;
16692 				gboolean _tmp37_;
16693 				gboolean _tmp39_;
16694 				gboolean _tmp40_;
16695 				_tmp36_ = vala_data_type_get_nullable (*left_type);
16696 				_tmp37_ = _tmp36_;
16697 				if (!_tmp37_) {
16698 					ValaCCodeUnaryExpression* _tmp38_;
16699 					_tmp38_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, *cleft);
16700 					_vala_ccode_node_unref0 (*cleft);
16701 					*cleft = (ValaCCodeExpression*) _tmp38_;
16702 				}
16703 				_tmp39_ = vala_data_type_get_nullable (*right_type);
16704 				_tmp40_ = _tmp39_;
16705 				if (!_tmp40_) {
16706 					ValaCCodeUnaryExpression* _tmp41_;
16707 					_tmp41_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, *cright);
16708 					_vala_ccode_node_unref0 (*cright);
16709 					*cright = (ValaCCodeExpression*) _tmp41_;
16710 				}
16711 			} else {
16712 				gboolean _tmp42_ = FALSE;
16713 				gboolean _tmp43_;
16714 				gboolean _tmp44_;
16715 				_tmp43_ = vala_data_type_get_nullable (*left_type);
16716 				_tmp44_ = _tmp43_;
16717 				if (_tmp44_) {
16718 					gboolean _tmp45_;
16719 					gboolean _tmp46_;
16720 					_tmp45_ = vala_data_type_get_nullable (*right_type);
16721 					_tmp46_ = _tmp45_;
16722 					_tmp42_ = _tmp46_;
16723 				} else {
16724 					_tmp42_ = FALSE;
16725 				}
16726 				if (_tmp42_) {
16727 				} else {
16728 					gboolean _tmp47_;
16729 					gboolean _tmp48_;
16730 					_tmp47_ = vala_data_type_get_nullable (*left_type);
16731 					_tmp48_ = _tmp47_;
16732 					if (_tmp48_) {
16733 						ValaCCodeUnaryExpression* _tmp49_;
16734 						_tmp49_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_POINTER_INDIRECTION, *cleft);
16735 						_vala_ccode_node_unref0 (*cleft);
16736 						*cleft = (ValaCCodeExpression*) _tmp49_;
16737 					} else {
16738 						gboolean _tmp50_;
16739 						gboolean _tmp51_;
16740 						_tmp50_ = vala_data_type_get_nullable (*right_type);
16741 						_tmp51_ = _tmp50_;
16742 						if (_tmp51_) {
16743 							ValaCCodeUnaryExpression* _tmp52_;
16744 							_tmp52_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_POINTER_INDIRECTION, *cright);
16745 							_vala_ccode_node_unref0 (*cright);
16746 							*cright = (ValaCCodeExpression*) _tmp52_;
16747 						}
16748 					}
16749 				}
16750 			}
16751 		}
16752 	}
16753 }
16754 
16755 static gchar*
vala_ccode_base_module_generate_struct_equal_function(ValaCCodeBaseModule * self,ValaStruct * st)16756 vala_ccode_base_module_generate_struct_equal_function (ValaCCodeBaseModule* self,
16757                                                        ValaStruct* st)
16758 {
16759 	ValaStruct* _tmp0_;
16760 	ValaStruct* _tmp1_;
16761 	gchar* equal_func = NULL;
16762 	gchar* _tmp5_;
16763 	gchar* _tmp6_;
16764 	gchar* _tmp7_;
16765 	gchar* _tmp8_;
16766 	const gchar* _tmp9_;
16767 	ValaCCodeFunction* function = NULL;
16768 	const gchar* _tmp10_;
16769 	ValaDataType* _tmp11_;
16770 	gchar* _tmp12_;
16771 	gchar* _tmp13_;
16772 	ValaCCodeFunction* _tmp14_;
16773 	ValaCCodeFunction* _tmp15_;
16774 	ValaCCodeFunction* _tmp16_;
16775 	ValaCCodeFunction* _tmp17_;
16776 	gchar* _tmp18_;
16777 	gchar* _tmp19_;
16778 	gchar* _tmp20_;
16779 	gchar* _tmp21_;
16780 	ValaCCodeParameter* _tmp22_;
16781 	ValaCCodeParameter* _tmp23_;
16782 	ValaCCodeFunction* _tmp24_;
16783 	gchar* _tmp25_;
16784 	gchar* _tmp26_;
16785 	gchar* _tmp27_;
16786 	gchar* _tmp28_;
16787 	ValaCCodeParameter* _tmp29_;
16788 	ValaCCodeParameter* _tmp30_;
16789 	ValaCCodeFunction* _tmp31_;
16790 	gboolean has_instance_fields = FALSE;
16791 	ValaCCodeFile* _tmp187_;
16792 	ValaCCodeFunction* _tmp188_;
16793 	ValaCCodeFile* _tmp189_;
16794 	ValaCCodeFunction* _tmp190_;
16795 	gchar* result = NULL;
16796 	g_return_val_if_fail (self != NULL, NULL);
16797 	g_return_val_if_fail (st != NULL, NULL);
16798 	_tmp0_ = vala_struct_get_base_struct (st);
16799 	_tmp1_ = _tmp0_;
16800 	if (_tmp1_ != NULL) {
16801 		ValaStruct* _tmp2_;
16802 		ValaStruct* _tmp3_;
16803 		gchar* _tmp4_;
16804 		_tmp2_ = vala_struct_get_base_struct (st);
16805 		_tmp3_ = _tmp2_;
16806 		_tmp4_ = vala_ccode_base_module_generate_struct_equal_function (self, _tmp3_);
16807 		result = _tmp4_;
16808 		return result;
16809 	}
16810 	_tmp5_ = vala_get_ccode_lower_case_prefix ((ValaSymbol*) st);
16811 	_tmp6_ = _tmp5_;
16812 	_tmp7_ = g_strdup_printf ("_%sequal", _tmp6_);
16813 	_tmp8_ = _tmp7_;
16814 	_g_free0 (_tmp6_);
16815 	equal_func = _tmp8_;
16816 	_tmp9_ = equal_func;
16817 	if (!vala_ccode_base_module_add_wrapper (self, _tmp9_)) {
16818 		result = equal_func;
16819 		return result;
16820 	}
16821 	_tmp10_ = equal_func;
16822 	_tmp11_ = self->bool_type;
16823 	_tmp12_ = vala_get_ccode_name ((ValaCodeNode*) _tmp11_);
16824 	_tmp13_ = _tmp12_;
16825 	_tmp14_ = vala_ccode_function_new (_tmp10_, _tmp13_);
16826 	_tmp15_ = _tmp14_;
16827 	_g_free0 (_tmp13_);
16828 	function = _tmp15_;
16829 	_tmp16_ = function;
16830 	vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp16_, VALA_CCODE_MODIFIERS_STATIC);
16831 	_tmp17_ = function;
16832 	_tmp18_ = vala_get_ccode_name ((ValaCodeNode*) st);
16833 	_tmp19_ = _tmp18_;
16834 	_tmp20_ = g_strdup_printf ("const %s *", _tmp19_);
16835 	_tmp21_ = _tmp20_;
16836 	_tmp22_ = vala_ccode_parameter_new ("s1", _tmp21_);
16837 	_tmp23_ = _tmp22_;
16838 	vala_ccode_function_add_parameter (_tmp17_, _tmp23_);
16839 	_vala_ccode_node_unref0 (_tmp23_);
16840 	_g_free0 (_tmp21_);
16841 	_g_free0 (_tmp19_);
16842 	_tmp24_ = function;
16843 	_tmp25_ = vala_get_ccode_name ((ValaCodeNode*) st);
16844 	_tmp26_ = _tmp25_;
16845 	_tmp27_ = g_strdup_printf ("const %s *", _tmp26_);
16846 	_tmp28_ = _tmp27_;
16847 	_tmp29_ = vala_ccode_parameter_new ("s2", _tmp28_);
16848 	_tmp30_ = _tmp29_;
16849 	vala_ccode_function_add_parameter (_tmp24_, _tmp30_);
16850 	_vala_ccode_node_unref0 (_tmp30_);
16851 	_g_free0 (_tmp28_);
16852 	_g_free0 (_tmp26_);
16853 	_tmp31_ = function;
16854 	vala_ccode_base_module_push_function (self, _tmp31_);
16855 	{
16856 		ValaCCodeBinaryExpression* cexp = NULL;
16857 		ValaCCodeIdentifier* _tmp32_;
16858 		ValaCCodeIdentifier* _tmp33_;
16859 		ValaCCodeIdentifier* _tmp34_;
16860 		ValaCCodeIdentifier* _tmp35_;
16861 		ValaCCodeBinaryExpression* _tmp36_;
16862 		ValaCCodeBinaryExpression* _tmp37_;
16863 		ValaCCodeFunction* _tmp38_;
16864 		ValaCCodeFunction* _tmp39_;
16865 		ValaCCodeBinaryExpression* _tmp40_;
16866 		ValaCCodeFunction* _tmp41_;
16867 		ValaCCodeFunction* _tmp42_;
16868 		ValaCCodeExpression* _tmp43_;
16869 		ValaCCodeExpression* _tmp44_;
16870 		ValaCCodeFunction* _tmp45_;
16871 		ValaCCodeFunction* _tmp46_;
16872 		_tmp32_ = vala_ccode_identifier_new ("s1");
16873 		_tmp33_ = _tmp32_;
16874 		_tmp34_ = vala_ccode_identifier_new ("s2");
16875 		_tmp35_ = _tmp34_;
16876 		_tmp36_ = vala_ccode_binary_expression_new (VALA_CCODE_BINARY_OPERATOR_EQUALITY, (ValaCCodeExpression*) _tmp33_, (ValaCCodeExpression*) _tmp35_);
16877 		_tmp37_ = _tmp36_;
16878 		_vala_ccode_node_unref0 (_tmp35_);
16879 		_vala_ccode_node_unref0 (_tmp33_);
16880 		cexp = _tmp37_;
16881 		_tmp38_ = vala_ccode_base_module_get_ccode (self);
16882 		_tmp39_ = _tmp38_;
16883 		_tmp40_ = cexp;
16884 		vala_ccode_function_open_if (_tmp39_, (ValaCCodeExpression*) _tmp40_);
16885 		_tmp41_ = vala_ccode_base_module_get_ccode (self);
16886 		_tmp42_ = _tmp41_;
16887 		_tmp43_ = vala_ccode_base_module_get_boolean_cconstant (self, TRUE);
16888 		_tmp44_ = _tmp43_;
16889 		vala_ccode_function_add_return (_tmp42_, _tmp44_);
16890 		_vala_ccode_node_unref0 (_tmp44_);
16891 		_tmp45_ = vala_ccode_base_module_get_ccode (self);
16892 		_tmp46_ = _tmp45_;
16893 		vala_ccode_function_close (_tmp46_);
16894 		_vala_ccode_node_unref0 (cexp);
16895 	}
16896 	{
16897 		ValaCCodeBinaryExpression* cexp = NULL;
16898 		ValaCCodeIdentifier* _tmp47_;
16899 		ValaCCodeIdentifier* _tmp48_;
16900 		ValaCCodeConstant* _tmp49_;
16901 		ValaCCodeConstant* _tmp50_;
16902 		ValaCCodeBinaryExpression* _tmp51_;
16903 		ValaCCodeBinaryExpression* _tmp52_;
16904 		ValaCCodeFunction* _tmp53_;
16905 		ValaCCodeFunction* _tmp54_;
16906 		ValaCCodeBinaryExpression* _tmp55_;
16907 		ValaCCodeFunction* _tmp56_;
16908 		ValaCCodeFunction* _tmp57_;
16909 		ValaCCodeExpression* _tmp58_;
16910 		ValaCCodeExpression* _tmp59_;
16911 		ValaCCodeFunction* _tmp60_;
16912 		ValaCCodeFunction* _tmp61_;
16913 		ValaCCodeIdentifier* _tmp62_;
16914 		ValaCCodeIdentifier* _tmp63_;
16915 		ValaCCodeConstant* _tmp64_;
16916 		ValaCCodeConstant* _tmp65_;
16917 		ValaCCodeBinaryExpression* _tmp66_;
16918 		ValaCCodeFunction* _tmp67_;
16919 		ValaCCodeFunction* _tmp68_;
16920 		ValaCCodeBinaryExpression* _tmp69_;
16921 		ValaCCodeFunction* _tmp70_;
16922 		ValaCCodeFunction* _tmp71_;
16923 		ValaCCodeExpression* _tmp72_;
16924 		ValaCCodeExpression* _tmp73_;
16925 		ValaCCodeFunction* _tmp74_;
16926 		ValaCCodeFunction* _tmp75_;
16927 		_tmp47_ = vala_ccode_identifier_new ("s1");
16928 		_tmp48_ = _tmp47_;
16929 		_tmp49_ = vala_ccode_constant_new ("NULL");
16930 		_tmp50_ = _tmp49_;
16931 		_tmp51_ = vala_ccode_binary_expression_new (VALA_CCODE_BINARY_OPERATOR_EQUALITY, (ValaCCodeExpression*) _tmp48_, (ValaCCodeExpression*) _tmp50_);
16932 		_tmp52_ = _tmp51_;
16933 		_vala_ccode_node_unref0 (_tmp50_);
16934 		_vala_ccode_node_unref0 (_tmp48_);
16935 		cexp = _tmp52_;
16936 		_tmp53_ = vala_ccode_base_module_get_ccode (self);
16937 		_tmp54_ = _tmp53_;
16938 		_tmp55_ = cexp;
16939 		vala_ccode_function_open_if (_tmp54_, (ValaCCodeExpression*) _tmp55_);
16940 		_tmp56_ = vala_ccode_base_module_get_ccode (self);
16941 		_tmp57_ = _tmp56_;
16942 		_tmp58_ = vala_ccode_base_module_get_boolean_cconstant (self, FALSE);
16943 		_tmp59_ = _tmp58_;
16944 		vala_ccode_function_add_return (_tmp57_, _tmp59_);
16945 		_vala_ccode_node_unref0 (_tmp59_);
16946 		_tmp60_ = vala_ccode_base_module_get_ccode (self);
16947 		_tmp61_ = _tmp60_;
16948 		vala_ccode_function_close (_tmp61_);
16949 		_tmp62_ = vala_ccode_identifier_new ("s2");
16950 		_tmp63_ = _tmp62_;
16951 		_tmp64_ = vala_ccode_constant_new ("NULL");
16952 		_tmp65_ = _tmp64_;
16953 		_tmp66_ = vala_ccode_binary_expression_new (VALA_CCODE_BINARY_OPERATOR_EQUALITY, (ValaCCodeExpression*) _tmp63_, (ValaCCodeExpression*) _tmp65_);
16954 		_vala_ccode_node_unref0 (cexp);
16955 		cexp = _tmp66_;
16956 		_vala_ccode_node_unref0 (_tmp65_);
16957 		_vala_ccode_node_unref0 (_tmp63_);
16958 		_tmp67_ = vala_ccode_base_module_get_ccode (self);
16959 		_tmp68_ = _tmp67_;
16960 		_tmp69_ = cexp;
16961 		vala_ccode_function_open_if (_tmp68_, (ValaCCodeExpression*) _tmp69_);
16962 		_tmp70_ = vala_ccode_base_module_get_ccode (self);
16963 		_tmp71_ = _tmp70_;
16964 		_tmp72_ = vala_ccode_base_module_get_boolean_cconstant (self, FALSE);
16965 		_tmp73_ = _tmp72_;
16966 		vala_ccode_function_add_return (_tmp71_, _tmp73_);
16967 		_vala_ccode_node_unref0 (_tmp73_);
16968 		_tmp74_ = vala_ccode_base_module_get_ccode (self);
16969 		_tmp75_ = _tmp74_;
16970 		vala_ccode_function_close (_tmp75_);
16971 		_vala_ccode_node_unref0 (cexp);
16972 	}
16973 	has_instance_fields = FALSE;
16974 	{
16975 		ValaList* _f_list = NULL;
16976 		ValaList* _tmp76_;
16977 		ValaList* _tmp77_;
16978 		gint _f_size = 0;
16979 		ValaList* _tmp78_;
16980 		gint _tmp79_;
16981 		gint _tmp80_;
16982 		gint _f_index = 0;
16983 		_tmp76_ = vala_struct_get_fields (st);
16984 		_tmp77_ = _vala_iterable_ref0 (_tmp76_);
16985 		_f_list = _tmp77_;
16986 		_tmp78_ = _f_list;
16987 		_tmp79_ = vala_collection_get_size ((ValaCollection*) _tmp78_);
16988 		_tmp80_ = _tmp79_;
16989 		_f_size = _tmp80_;
16990 		_f_index = -1;
16991 		while (TRUE) {
16992 			gint _tmp81_;
16993 			gint _tmp82_;
16994 			ValaField* f = NULL;
16995 			ValaList* _tmp83_;
16996 			gpointer _tmp84_;
16997 			ValaField* _tmp85_;
16998 			ValaMemberBinding _tmp86_;
16999 			ValaMemberBinding _tmp87_;
17000 			ValaCCodeExpression* cexp = NULL;
17001 			ValaCCodeExpression* s1 = NULL;
17002 			ValaCCodeIdentifier* _tmp88_;
17003 			ValaCCodeIdentifier* _tmp89_;
17004 			ValaField* _tmp90_;
17005 			gchar* _tmp91_;
17006 			gchar* _tmp92_;
17007 			ValaCCodeMemberAccess* _tmp93_;
17008 			ValaCCodeExpression* _tmp94_;
17009 			ValaCCodeExpression* s2 = NULL;
17010 			ValaCCodeIdentifier* _tmp95_;
17011 			ValaCCodeIdentifier* _tmp96_;
17012 			ValaField* _tmp97_;
17013 			gchar* _tmp98_;
17014 			gchar* _tmp99_;
17015 			ValaCCodeMemberAccess* _tmp100_;
17016 			ValaCCodeExpression* _tmp101_;
17017 			ValaDataType* variable_type = NULL;
17018 			ValaField* _tmp102_;
17019 			ValaDataType* _tmp103_;
17020 			ValaDataType* _tmp104_;
17021 			ValaDataType* _tmp105_;
17022 			gboolean _tmp106_ = FALSE;
17023 			ValaField* _tmp107_;
17024 			ValaDataType* _tmp108_;
17025 			ValaDataType* _tmp109_;
17026 			ValaCCodeFunction* _tmp157_;
17027 			ValaCCodeFunction* _tmp158_;
17028 			ValaCCodeExpression* _tmp159_;
17029 			ValaCCodeFunction* _tmp160_;
17030 			ValaCCodeFunction* _tmp161_;
17031 			ValaCCodeExpression* _tmp162_;
17032 			ValaCCodeExpression* _tmp163_;
17033 			ValaCCodeFunction* _tmp164_;
17034 			ValaCCodeFunction* _tmp165_;
17035 			_f_index = _f_index + 1;
17036 			_tmp81_ = _f_index;
17037 			_tmp82_ = _f_size;
17038 			if (!(_tmp81_ < _tmp82_)) {
17039 				break;
17040 			}
17041 			_tmp83_ = _f_list;
17042 			_tmp84_ = vala_list_get (_tmp83_, _f_index);
17043 			f = (ValaField*) _tmp84_;
17044 			_tmp85_ = f;
17045 			_tmp86_ = vala_field_get_binding (_tmp85_);
17046 			_tmp87_ = _tmp86_;
17047 			if (_tmp87_ != VALA_MEMBER_BINDING_INSTANCE) {
17048 				_vala_code_node_unref0 (f);
17049 				continue;
17050 			}
17051 			has_instance_fields = TRUE;
17052 			_tmp88_ = vala_ccode_identifier_new ("s1");
17053 			_tmp89_ = _tmp88_;
17054 			_tmp90_ = f;
17055 			_tmp91_ = vala_get_ccode_name ((ValaCodeNode*) _tmp90_);
17056 			_tmp92_ = _tmp91_;
17057 			_tmp93_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) _tmp89_, _tmp92_);
17058 			_tmp94_ = G_TYPE_CHECK_INSTANCE_CAST (_tmp93_, VALA_TYPE_CCODE_EXPRESSION, ValaCCodeExpression);
17059 			_g_free0 (_tmp92_);
17060 			_vala_ccode_node_unref0 (_tmp89_);
17061 			s1 = _tmp94_;
17062 			_tmp95_ = vala_ccode_identifier_new ("s2");
17063 			_tmp96_ = _tmp95_;
17064 			_tmp97_ = f;
17065 			_tmp98_ = vala_get_ccode_name ((ValaCodeNode*) _tmp97_);
17066 			_tmp99_ = _tmp98_;
17067 			_tmp100_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) _tmp96_, _tmp99_);
17068 			_tmp101_ = G_TYPE_CHECK_INSTANCE_CAST (_tmp100_, VALA_TYPE_CCODE_EXPRESSION, ValaCCodeExpression);
17069 			_g_free0 (_tmp99_);
17070 			_vala_ccode_node_unref0 (_tmp96_);
17071 			s2 = _tmp101_;
17072 			_tmp102_ = f;
17073 			_tmp103_ = vala_variable_get_variable_type ((ValaVariable*) _tmp102_);
17074 			_tmp104_ = _tmp103_;
17075 			_tmp105_ = vala_data_type_copy (_tmp104_);
17076 			variable_type = _tmp105_;
17077 			vala_ccode_base_module_make_comparable_cexpression (self, &variable_type, &s1, &variable_type, &s2);
17078 			_tmp107_ = f;
17079 			_tmp108_ = vala_variable_get_variable_type ((ValaVariable*) _tmp107_);
17080 			_tmp109_ = _tmp108_;
17081 			if (!G_TYPE_CHECK_INSTANCE_TYPE (_tmp109_, VALA_TYPE_NULL_TYPE)) {
17082 				ValaField* _tmp110_;
17083 				ValaDataType* _tmp111_;
17084 				ValaDataType* _tmp112_;
17085 				ValaDataType* _tmp113_;
17086 				_tmp110_ = f;
17087 				_tmp111_ = vala_variable_get_variable_type ((ValaVariable*) _tmp110_);
17088 				_tmp112_ = _tmp111_;
17089 				_tmp113_ = self->string_type;
17090 				_tmp106_ = vala_data_type_compatible (_tmp112_, _tmp113_);
17091 			} else {
17092 				_tmp106_ = FALSE;
17093 			}
17094 			if (_tmp106_) {
17095 				ValaCCodeFunctionCall* ccall = NULL;
17096 				ValaCodeContext* _tmp114_;
17097 				ValaProfile _tmp115_;
17098 				ValaProfile _tmp116_;
17099 				ValaCCodeFunctionCall* _tmp128_;
17100 				ValaCCodeExpression* _tmp129_;
17101 				ValaCCodeFunctionCall* _tmp130_;
17102 				ValaCCodeExpression* _tmp131_;
17103 				ValaCCodeFunctionCall* _tmp132_;
17104 				ValaCCodeExpression* _tmp133_;
17105 				_tmp114_ = self->priv->_context;
17106 				_tmp115_ = vala_code_context_get_profile (_tmp114_);
17107 				_tmp116_ = _tmp115_;
17108 				if (_tmp116_ == VALA_PROFILE_POSIX) {
17109 					ValaCCodeFile* _tmp117_;
17110 					ValaCCodeIdentifier* _tmp118_;
17111 					ValaCCodeIdentifier* _tmp119_;
17112 					gchar* _tmp120_;
17113 					gchar* _tmp121_;
17114 					ValaCCodeIdentifier* _tmp122_;
17115 					ValaCCodeIdentifier* _tmp123_;
17116 					ValaCCodeFunctionCall* _tmp124_;
17117 					_tmp117_ = self->cfile;
17118 					vala_ccode_file_add_include (_tmp117_, "string.h", FALSE);
17119 					_tmp118_ = vala_ccode_identifier_new ("strcmp");
17120 					_tmp119_ = _tmp118_;
17121 					_tmp120_ = vala_ccode_base_module_generate_cmp_wrapper (self, _tmp119_);
17122 					_tmp121_ = _tmp120_;
17123 					_tmp122_ = vala_ccode_identifier_new (_tmp121_);
17124 					_tmp123_ = _tmp122_;
17125 					_tmp124_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp123_);
17126 					_vala_ccode_node_unref0 (ccall);
17127 					ccall = _tmp124_;
17128 					_vala_ccode_node_unref0 (_tmp123_);
17129 					_g_free0 (_tmp121_);
17130 					_vala_ccode_node_unref0 (_tmp119_);
17131 				} else {
17132 					ValaCCodeIdentifier* _tmp125_;
17133 					ValaCCodeIdentifier* _tmp126_;
17134 					ValaCCodeFunctionCall* _tmp127_;
17135 					_tmp125_ = vala_ccode_identifier_new ("g_strcmp0");
17136 					_tmp126_ = _tmp125_;
17137 					_tmp127_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp126_);
17138 					_vala_ccode_node_unref0 (ccall);
17139 					ccall = _tmp127_;
17140 					_vala_ccode_node_unref0 (_tmp126_);
17141 				}
17142 				_tmp128_ = ccall;
17143 				_tmp129_ = s1;
17144 				vala_ccode_function_call_add_argument (_tmp128_, _tmp129_);
17145 				_tmp130_ = ccall;
17146 				_tmp131_ = s2;
17147 				vala_ccode_function_call_add_argument (_tmp130_, _tmp131_);
17148 				_tmp132_ = ccall;
17149 				_tmp133_ = _vala_ccode_node_ref0 ((ValaCCodeExpression*) _tmp132_);
17150 				_vala_ccode_node_unref0 (cexp);
17151 				cexp = _tmp133_;
17152 				_vala_ccode_node_unref0 (ccall);
17153 			} else {
17154 				ValaField* _tmp134_;
17155 				ValaDataType* _tmp135_;
17156 				ValaDataType* _tmp136_;
17157 				_tmp134_ = f;
17158 				_tmp135_ = vala_variable_get_variable_type ((ValaVariable*) _tmp134_);
17159 				_tmp136_ = _tmp135_;
17160 				if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp136_, VALA_TYPE_STRUCT_VALUE_TYPE)) {
17161 					gchar* equalfunc = NULL;
17162 					ValaField* _tmp137_;
17163 					ValaDataType* _tmp138_;
17164 					ValaDataType* _tmp139_;
17165 					ValaTypeSymbol* _tmp140_;
17166 					ValaTypeSymbol* _tmp141_;
17167 					gchar* _tmp142_;
17168 					ValaCCodeFunctionCall* ccall = NULL;
17169 					const gchar* _tmp143_;
17170 					ValaCCodeIdentifier* _tmp144_;
17171 					ValaCCodeIdentifier* _tmp145_;
17172 					ValaCCodeFunctionCall* _tmp146_;
17173 					ValaCCodeFunctionCall* _tmp147_;
17174 					ValaCCodeFunctionCall* _tmp148_;
17175 					ValaCCodeExpression* _tmp149_;
17176 					ValaCCodeFunctionCall* _tmp150_;
17177 					ValaCCodeExpression* _tmp151_;
17178 					ValaCCodeFunctionCall* _tmp152_;
17179 					ValaCCodeUnaryExpression* _tmp153_;
17180 					_tmp137_ = f;
17181 					_tmp138_ = vala_variable_get_variable_type ((ValaVariable*) _tmp137_);
17182 					_tmp139_ = _tmp138_;
17183 					_tmp140_ = vala_data_type_get_type_symbol (_tmp139_);
17184 					_tmp141_ = _tmp140_;
17185 					_tmp142_ = vala_ccode_base_module_generate_struct_equal_function (self, G_TYPE_CHECK_INSTANCE_TYPE (_tmp141_, VALA_TYPE_STRUCT) ? ((ValaStruct*) _tmp141_) : NULL);
17186 					equalfunc = _tmp142_;
17187 					_tmp143_ = equalfunc;
17188 					_tmp144_ = vala_ccode_identifier_new (_tmp143_);
17189 					_tmp145_ = _tmp144_;
17190 					_tmp146_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp145_);
17191 					_tmp147_ = _tmp146_;
17192 					_vala_ccode_node_unref0 (_tmp145_);
17193 					ccall = _tmp147_;
17194 					_tmp148_ = ccall;
17195 					_tmp149_ = s1;
17196 					vala_ccode_function_call_add_argument (_tmp148_, _tmp149_);
17197 					_tmp150_ = ccall;
17198 					_tmp151_ = s2;
17199 					vala_ccode_function_call_add_argument (_tmp150_, _tmp151_);
17200 					_tmp152_ = ccall;
17201 					_tmp153_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_LOGICAL_NEGATION, (ValaCCodeExpression*) _tmp152_);
17202 					_vala_ccode_node_unref0 (cexp);
17203 					cexp = (ValaCCodeExpression*) _tmp153_;
17204 					_vala_ccode_node_unref0 (ccall);
17205 					_g_free0 (equalfunc);
17206 				} else {
17207 					ValaCCodeExpression* _tmp154_;
17208 					ValaCCodeExpression* _tmp155_;
17209 					ValaCCodeBinaryExpression* _tmp156_;
17210 					_tmp154_ = s1;
17211 					_tmp155_ = s2;
17212 					_tmp156_ = vala_ccode_binary_expression_new (VALA_CCODE_BINARY_OPERATOR_INEQUALITY, _tmp154_, _tmp155_);
17213 					_vala_ccode_node_unref0 (cexp);
17214 					cexp = (ValaCCodeExpression*) _tmp156_;
17215 				}
17216 			}
17217 			_tmp157_ = vala_ccode_base_module_get_ccode (self);
17218 			_tmp158_ = _tmp157_;
17219 			_tmp159_ = cexp;
17220 			vala_ccode_function_open_if (_tmp158_, _tmp159_);
17221 			_tmp160_ = vala_ccode_base_module_get_ccode (self);
17222 			_tmp161_ = _tmp160_;
17223 			_tmp162_ = vala_ccode_base_module_get_boolean_cconstant (self, FALSE);
17224 			_tmp163_ = _tmp162_;
17225 			vala_ccode_function_add_return (_tmp161_, _tmp163_);
17226 			_vala_ccode_node_unref0 (_tmp163_);
17227 			_tmp164_ = vala_ccode_base_module_get_ccode (self);
17228 			_tmp165_ = _tmp164_;
17229 			vala_ccode_function_close (_tmp165_);
17230 			_vala_code_node_unref0 (variable_type);
17231 			_vala_ccode_node_unref0 (s2);
17232 			_vala_ccode_node_unref0 (s1);
17233 			_vala_ccode_node_unref0 (cexp);
17234 			_vala_code_node_unref0 (f);
17235 		}
17236 		_vala_iterable_unref0 (_f_list);
17237 	}
17238 	if (!has_instance_fields) {
17239 		if (vala_struct_is_simple_type (st)) {
17240 			ValaCCodeBinaryExpression* cexp = NULL;
17241 			ValaCCodeIdentifier* _tmp166_;
17242 			ValaCCodeIdentifier* _tmp167_;
17243 			ValaCCodeUnaryExpression* _tmp168_;
17244 			ValaCCodeUnaryExpression* _tmp169_;
17245 			ValaCCodeIdentifier* _tmp170_;
17246 			ValaCCodeIdentifier* _tmp171_;
17247 			ValaCCodeUnaryExpression* _tmp172_;
17248 			ValaCCodeUnaryExpression* _tmp173_;
17249 			ValaCCodeBinaryExpression* _tmp174_;
17250 			ValaCCodeBinaryExpression* _tmp175_;
17251 			ValaCCodeFunction* _tmp176_;
17252 			ValaCCodeFunction* _tmp177_;
17253 			ValaCCodeBinaryExpression* _tmp178_;
17254 			_tmp166_ = vala_ccode_identifier_new ("s1");
17255 			_tmp167_ = _tmp166_;
17256 			_tmp168_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_POINTER_INDIRECTION, (ValaCCodeExpression*) _tmp167_);
17257 			_tmp169_ = _tmp168_;
17258 			_tmp170_ = vala_ccode_identifier_new ("s2");
17259 			_tmp171_ = _tmp170_;
17260 			_tmp172_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_POINTER_INDIRECTION, (ValaCCodeExpression*) _tmp171_);
17261 			_tmp173_ = _tmp172_;
17262 			_tmp174_ = vala_ccode_binary_expression_new (VALA_CCODE_BINARY_OPERATOR_EQUALITY, (ValaCCodeExpression*) _tmp169_, (ValaCCodeExpression*) _tmp173_);
17263 			_tmp175_ = _tmp174_;
17264 			_vala_ccode_node_unref0 (_tmp173_);
17265 			_vala_ccode_node_unref0 (_tmp171_);
17266 			_vala_ccode_node_unref0 (_tmp169_);
17267 			_vala_ccode_node_unref0 (_tmp167_);
17268 			cexp = _tmp175_;
17269 			_tmp176_ = vala_ccode_base_module_get_ccode (self);
17270 			_tmp177_ = _tmp176_;
17271 			_tmp178_ = cexp;
17272 			vala_ccode_function_add_return (_tmp177_, (ValaCCodeExpression*) _tmp178_);
17273 			_vala_ccode_node_unref0 (cexp);
17274 		} else {
17275 			ValaCCodeFunction* _tmp179_;
17276 			ValaCCodeFunction* _tmp180_;
17277 			ValaCCodeExpression* _tmp181_;
17278 			ValaCCodeExpression* _tmp182_;
17279 			_tmp179_ = vala_ccode_base_module_get_ccode (self);
17280 			_tmp180_ = _tmp179_;
17281 			_tmp181_ = vala_ccode_base_module_get_boolean_cconstant (self, FALSE);
17282 			_tmp182_ = _tmp181_;
17283 			vala_ccode_function_add_return (_tmp180_, _tmp182_);
17284 			_vala_ccode_node_unref0 (_tmp182_);
17285 		}
17286 	} else {
17287 		ValaCCodeFunction* _tmp183_;
17288 		ValaCCodeFunction* _tmp184_;
17289 		ValaCCodeExpression* _tmp185_;
17290 		ValaCCodeExpression* _tmp186_;
17291 		_tmp183_ = vala_ccode_base_module_get_ccode (self);
17292 		_tmp184_ = _tmp183_;
17293 		_tmp185_ = vala_ccode_base_module_get_boolean_cconstant (self, TRUE);
17294 		_tmp186_ = _tmp185_;
17295 		vala_ccode_function_add_return (_tmp184_, _tmp186_);
17296 		_vala_ccode_node_unref0 (_tmp186_);
17297 	}
17298 	vala_ccode_base_module_pop_function (self);
17299 	_tmp187_ = self->cfile;
17300 	_tmp188_ = function;
17301 	vala_ccode_file_add_function_declaration (_tmp187_, _tmp188_);
17302 	_tmp189_ = self->cfile;
17303 	_tmp190_ = function;
17304 	vala_ccode_file_add_function (_tmp189_, _tmp190_);
17305 	result = equal_func;
17306 	_vala_ccode_node_unref0 (function);
17307 	return result;
17308 }
17309 
17310 static gchar*
vala_ccode_base_module_generate_numeric_equal_function(ValaCCodeBaseModule * self,ValaTypeSymbol * sym)17311 vala_ccode_base_module_generate_numeric_equal_function (ValaCCodeBaseModule* self,
17312                                                         ValaTypeSymbol* sym)
17313 {
17314 	gchar* equal_func = NULL;
17315 	gchar* _tmp0_;
17316 	gchar* _tmp1_;
17317 	gchar* _tmp2_;
17318 	gchar* _tmp3_;
17319 	const gchar* _tmp4_;
17320 	ValaCCodeFunction* function = NULL;
17321 	const gchar* _tmp5_;
17322 	ValaDataType* _tmp6_;
17323 	gchar* _tmp7_;
17324 	gchar* _tmp8_;
17325 	ValaCCodeFunction* _tmp9_;
17326 	ValaCCodeFunction* _tmp10_;
17327 	ValaCCodeFunction* _tmp11_;
17328 	ValaCCodeFunction* _tmp12_;
17329 	gchar* _tmp13_;
17330 	gchar* _tmp14_;
17331 	gchar* _tmp15_;
17332 	gchar* _tmp16_;
17333 	ValaCCodeParameter* _tmp17_;
17334 	ValaCCodeParameter* _tmp18_;
17335 	ValaCCodeFunction* _tmp19_;
17336 	gchar* _tmp20_;
17337 	gchar* _tmp21_;
17338 	gchar* _tmp22_;
17339 	gchar* _tmp23_;
17340 	ValaCCodeParameter* _tmp24_;
17341 	ValaCCodeParameter* _tmp25_;
17342 	ValaCCodeFunction* _tmp26_;
17343 	ValaCCodeFile* _tmp84_;
17344 	ValaCCodeFunction* _tmp85_;
17345 	ValaCCodeFile* _tmp86_;
17346 	ValaCCodeFunction* _tmp87_;
17347 	gchar* result = NULL;
17348 	g_return_val_if_fail (self != NULL, NULL);
17349 	g_return_val_if_fail (sym != NULL, NULL);
17350 	_tmp0_ = vala_get_ccode_lower_case_prefix ((ValaSymbol*) sym);
17351 	_tmp1_ = _tmp0_;
17352 	_tmp2_ = g_strdup_printf ("_%sequal", _tmp1_);
17353 	_tmp3_ = _tmp2_;
17354 	_g_free0 (_tmp1_);
17355 	equal_func = _tmp3_;
17356 	_tmp4_ = equal_func;
17357 	if (!vala_ccode_base_module_add_wrapper (self, _tmp4_)) {
17358 		result = equal_func;
17359 		return result;
17360 	}
17361 	_tmp5_ = equal_func;
17362 	_tmp6_ = self->bool_type;
17363 	_tmp7_ = vala_get_ccode_name ((ValaCodeNode*) _tmp6_);
17364 	_tmp8_ = _tmp7_;
17365 	_tmp9_ = vala_ccode_function_new (_tmp5_, _tmp8_);
17366 	_tmp10_ = _tmp9_;
17367 	_g_free0 (_tmp8_);
17368 	function = _tmp10_;
17369 	_tmp11_ = function;
17370 	vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp11_, VALA_CCODE_MODIFIERS_STATIC);
17371 	_tmp12_ = function;
17372 	_tmp13_ = vala_get_ccode_name ((ValaCodeNode*) sym);
17373 	_tmp14_ = _tmp13_;
17374 	_tmp15_ = g_strdup_printf ("const %s *", _tmp14_);
17375 	_tmp16_ = _tmp15_;
17376 	_tmp17_ = vala_ccode_parameter_new ("s1", _tmp16_);
17377 	_tmp18_ = _tmp17_;
17378 	vala_ccode_function_add_parameter (_tmp12_, _tmp18_);
17379 	_vala_ccode_node_unref0 (_tmp18_);
17380 	_g_free0 (_tmp16_);
17381 	_g_free0 (_tmp14_);
17382 	_tmp19_ = function;
17383 	_tmp20_ = vala_get_ccode_name ((ValaCodeNode*) sym);
17384 	_tmp21_ = _tmp20_;
17385 	_tmp22_ = g_strdup_printf ("const %s *", _tmp21_);
17386 	_tmp23_ = _tmp22_;
17387 	_tmp24_ = vala_ccode_parameter_new ("s2", _tmp23_);
17388 	_tmp25_ = _tmp24_;
17389 	vala_ccode_function_add_parameter (_tmp19_, _tmp25_);
17390 	_vala_ccode_node_unref0 (_tmp25_);
17391 	_g_free0 (_tmp23_);
17392 	_g_free0 (_tmp21_);
17393 	_tmp26_ = function;
17394 	vala_ccode_base_module_push_function (self, _tmp26_);
17395 	{
17396 		ValaCCodeBinaryExpression* cexp = NULL;
17397 		ValaCCodeIdentifier* _tmp27_;
17398 		ValaCCodeIdentifier* _tmp28_;
17399 		ValaCCodeIdentifier* _tmp29_;
17400 		ValaCCodeIdentifier* _tmp30_;
17401 		ValaCCodeBinaryExpression* _tmp31_;
17402 		ValaCCodeBinaryExpression* _tmp32_;
17403 		ValaCCodeFunction* _tmp33_;
17404 		ValaCCodeFunction* _tmp34_;
17405 		ValaCCodeBinaryExpression* _tmp35_;
17406 		ValaCCodeFunction* _tmp36_;
17407 		ValaCCodeFunction* _tmp37_;
17408 		ValaCCodeExpression* _tmp38_;
17409 		ValaCCodeExpression* _tmp39_;
17410 		ValaCCodeFunction* _tmp40_;
17411 		ValaCCodeFunction* _tmp41_;
17412 		_tmp27_ = vala_ccode_identifier_new ("s1");
17413 		_tmp28_ = _tmp27_;
17414 		_tmp29_ = vala_ccode_identifier_new ("s2");
17415 		_tmp30_ = _tmp29_;
17416 		_tmp31_ = vala_ccode_binary_expression_new (VALA_CCODE_BINARY_OPERATOR_EQUALITY, (ValaCCodeExpression*) _tmp28_, (ValaCCodeExpression*) _tmp30_);
17417 		_tmp32_ = _tmp31_;
17418 		_vala_ccode_node_unref0 (_tmp30_);
17419 		_vala_ccode_node_unref0 (_tmp28_);
17420 		cexp = _tmp32_;
17421 		_tmp33_ = vala_ccode_base_module_get_ccode (self);
17422 		_tmp34_ = _tmp33_;
17423 		_tmp35_ = cexp;
17424 		vala_ccode_function_open_if (_tmp34_, (ValaCCodeExpression*) _tmp35_);
17425 		_tmp36_ = vala_ccode_base_module_get_ccode (self);
17426 		_tmp37_ = _tmp36_;
17427 		_tmp38_ = vala_ccode_base_module_get_boolean_cconstant (self, TRUE);
17428 		_tmp39_ = _tmp38_;
17429 		vala_ccode_function_add_return (_tmp37_, _tmp39_);
17430 		_vala_ccode_node_unref0 (_tmp39_);
17431 		_tmp40_ = vala_ccode_base_module_get_ccode (self);
17432 		_tmp41_ = _tmp40_;
17433 		vala_ccode_function_close (_tmp41_);
17434 		_vala_ccode_node_unref0 (cexp);
17435 	}
17436 	{
17437 		ValaCCodeBinaryExpression* cexp = NULL;
17438 		ValaCCodeIdentifier* _tmp42_;
17439 		ValaCCodeIdentifier* _tmp43_;
17440 		ValaCCodeConstant* _tmp44_;
17441 		ValaCCodeConstant* _tmp45_;
17442 		ValaCCodeBinaryExpression* _tmp46_;
17443 		ValaCCodeBinaryExpression* _tmp47_;
17444 		ValaCCodeFunction* _tmp48_;
17445 		ValaCCodeFunction* _tmp49_;
17446 		ValaCCodeBinaryExpression* _tmp50_;
17447 		ValaCCodeFunction* _tmp51_;
17448 		ValaCCodeFunction* _tmp52_;
17449 		ValaCCodeExpression* _tmp53_;
17450 		ValaCCodeExpression* _tmp54_;
17451 		ValaCCodeFunction* _tmp55_;
17452 		ValaCCodeFunction* _tmp56_;
17453 		ValaCCodeIdentifier* _tmp57_;
17454 		ValaCCodeIdentifier* _tmp58_;
17455 		ValaCCodeConstant* _tmp59_;
17456 		ValaCCodeConstant* _tmp60_;
17457 		ValaCCodeBinaryExpression* _tmp61_;
17458 		ValaCCodeFunction* _tmp62_;
17459 		ValaCCodeFunction* _tmp63_;
17460 		ValaCCodeBinaryExpression* _tmp64_;
17461 		ValaCCodeFunction* _tmp65_;
17462 		ValaCCodeFunction* _tmp66_;
17463 		ValaCCodeExpression* _tmp67_;
17464 		ValaCCodeExpression* _tmp68_;
17465 		ValaCCodeFunction* _tmp69_;
17466 		ValaCCodeFunction* _tmp70_;
17467 		_tmp42_ = vala_ccode_identifier_new ("s1");
17468 		_tmp43_ = _tmp42_;
17469 		_tmp44_ = vala_ccode_constant_new ("NULL");
17470 		_tmp45_ = _tmp44_;
17471 		_tmp46_ = vala_ccode_binary_expression_new (VALA_CCODE_BINARY_OPERATOR_EQUALITY, (ValaCCodeExpression*) _tmp43_, (ValaCCodeExpression*) _tmp45_);
17472 		_tmp47_ = _tmp46_;
17473 		_vala_ccode_node_unref0 (_tmp45_);
17474 		_vala_ccode_node_unref0 (_tmp43_);
17475 		cexp = _tmp47_;
17476 		_tmp48_ = vala_ccode_base_module_get_ccode (self);
17477 		_tmp49_ = _tmp48_;
17478 		_tmp50_ = cexp;
17479 		vala_ccode_function_open_if (_tmp49_, (ValaCCodeExpression*) _tmp50_);
17480 		_tmp51_ = vala_ccode_base_module_get_ccode (self);
17481 		_tmp52_ = _tmp51_;
17482 		_tmp53_ = vala_ccode_base_module_get_boolean_cconstant (self, FALSE);
17483 		_tmp54_ = _tmp53_;
17484 		vala_ccode_function_add_return (_tmp52_, _tmp54_);
17485 		_vala_ccode_node_unref0 (_tmp54_);
17486 		_tmp55_ = vala_ccode_base_module_get_ccode (self);
17487 		_tmp56_ = _tmp55_;
17488 		vala_ccode_function_close (_tmp56_);
17489 		_tmp57_ = vala_ccode_identifier_new ("s2");
17490 		_tmp58_ = _tmp57_;
17491 		_tmp59_ = vala_ccode_constant_new ("NULL");
17492 		_tmp60_ = _tmp59_;
17493 		_tmp61_ = vala_ccode_binary_expression_new (VALA_CCODE_BINARY_OPERATOR_EQUALITY, (ValaCCodeExpression*) _tmp58_, (ValaCCodeExpression*) _tmp60_);
17494 		_vala_ccode_node_unref0 (cexp);
17495 		cexp = _tmp61_;
17496 		_vala_ccode_node_unref0 (_tmp60_);
17497 		_vala_ccode_node_unref0 (_tmp58_);
17498 		_tmp62_ = vala_ccode_base_module_get_ccode (self);
17499 		_tmp63_ = _tmp62_;
17500 		_tmp64_ = cexp;
17501 		vala_ccode_function_open_if (_tmp63_, (ValaCCodeExpression*) _tmp64_);
17502 		_tmp65_ = vala_ccode_base_module_get_ccode (self);
17503 		_tmp66_ = _tmp65_;
17504 		_tmp67_ = vala_ccode_base_module_get_boolean_cconstant (self, FALSE);
17505 		_tmp68_ = _tmp67_;
17506 		vala_ccode_function_add_return (_tmp66_, _tmp68_);
17507 		_vala_ccode_node_unref0 (_tmp68_);
17508 		_tmp69_ = vala_ccode_base_module_get_ccode (self);
17509 		_tmp70_ = _tmp69_;
17510 		vala_ccode_function_close (_tmp70_);
17511 		_vala_ccode_node_unref0 (cexp);
17512 	}
17513 	{
17514 		ValaCCodeBinaryExpression* cexp = NULL;
17515 		ValaCCodeIdentifier* _tmp71_;
17516 		ValaCCodeIdentifier* _tmp72_;
17517 		ValaCCodeUnaryExpression* _tmp73_;
17518 		ValaCCodeUnaryExpression* _tmp74_;
17519 		ValaCCodeIdentifier* _tmp75_;
17520 		ValaCCodeIdentifier* _tmp76_;
17521 		ValaCCodeUnaryExpression* _tmp77_;
17522 		ValaCCodeUnaryExpression* _tmp78_;
17523 		ValaCCodeBinaryExpression* _tmp79_;
17524 		ValaCCodeBinaryExpression* _tmp80_;
17525 		ValaCCodeFunction* _tmp81_;
17526 		ValaCCodeFunction* _tmp82_;
17527 		ValaCCodeBinaryExpression* _tmp83_;
17528 		_tmp71_ = vala_ccode_identifier_new ("s1");
17529 		_tmp72_ = _tmp71_;
17530 		_tmp73_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_POINTER_INDIRECTION, (ValaCCodeExpression*) _tmp72_);
17531 		_tmp74_ = _tmp73_;
17532 		_tmp75_ = vala_ccode_identifier_new ("s2");
17533 		_tmp76_ = _tmp75_;
17534 		_tmp77_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_POINTER_INDIRECTION, (ValaCCodeExpression*) _tmp76_);
17535 		_tmp78_ = _tmp77_;
17536 		_tmp79_ = vala_ccode_binary_expression_new (VALA_CCODE_BINARY_OPERATOR_EQUALITY, (ValaCCodeExpression*) _tmp74_, (ValaCCodeExpression*) _tmp78_);
17537 		_tmp80_ = _tmp79_;
17538 		_vala_ccode_node_unref0 (_tmp78_);
17539 		_vala_ccode_node_unref0 (_tmp76_);
17540 		_vala_ccode_node_unref0 (_tmp74_);
17541 		_vala_ccode_node_unref0 (_tmp72_);
17542 		cexp = _tmp80_;
17543 		_tmp81_ = vala_ccode_base_module_get_ccode (self);
17544 		_tmp82_ = _tmp81_;
17545 		_tmp83_ = cexp;
17546 		vala_ccode_function_add_return (_tmp82_, (ValaCCodeExpression*) _tmp83_);
17547 		_vala_ccode_node_unref0 (cexp);
17548 	}
17549 	vala_ccode_base_module_pop_function (self);
17550 	_tmp84_ = self->cfile;
17551 	_tmp85_ = function;
17552 	vala_ccode_file_add_function_declaration (_tmp84_, _tmp85_);
17553 	_tmp86_ = self->cfile;
17554 	_tmp87_ = function;
17555 	vala_ccode_file_add_function (_tmp86_, _tmp87_);
17556 	result = equal_func;
17557 	_vala_ccode_node_unref0 (function);
17558 	return result;
17559 }
17560 
17561 static gchar*
vala_ccode_base_module_generate_struct_dup_wrapper(ValaCCodeBaseModule * self,ValaValueType * value_type)17562 vala_ccode_base_module_generate_struct_dup_wrapper (ValaCCodeBaseModule* self,
17563                                                     ValaValueType* value_type)
17564 {
17565 	gchar* dup_func = NULL;
17566 	ValaTypeSymbol* _tmp0_;
17567 	ValaTypeSymbol* _tmp1_;
17568 	gchar* _tmp2_;
17569 	gchar* _tmp3_;
17570 	gchar* _tmp4_;
17571 	gchar* _tmp5_;
17572 	const gchar* _tmp6_;
17573 	ValaCCodeFunction* function = NULL;
17574 	const gchar* _tmp7_;
17575 	gchar* _tmp8_;
17576 	gchar* _tmp9_;
17577 	ValaCCodeFunction* _tmp10_;
17578 	ValaCCodeFunction* _tmp11_;
17579 	ValaCCodeFunction* _tmp12_;
17580 	ValaCCodeFunction* _tmp13_;
17581 	gchar* _tmp14_;
17582 	gchar* _tmp15_;
17583 	ValaCCodeParameter* _tmp16_;
17584 	ValaCCodeParameter* _tmp17_;
17585 	ValaCCodeFunction* _tmp18_;
17586 	ValaTypeSymbol* _tmp19_;
17587 	ValaTypeSymbol* _tmp20_;
17588 	ValaStruct* _tmp21_;
17589 	ValaCCodeFile* _tmp138_;
17590 	ValaCCodeFunction* _tmp139_;
17591 	ValaCCodeFile* _tmp140_;
17592 	ValaCCodeFunction* _tmp141_;
17593 	gchar* result = NULL;
17594 	g_return_val_if_fail (self != NULL, NULL);
17595 	g_return_val_if_fail (value_type != NULL, NULL);
17596 	_tmp0_ = vala_data_type_get_type_symbol ((ValaDataType*) value_type);
17597 	_tmp1_ = _tmp0_;
17598 	_tmp2_ = vala_get_ccode_lower_case_prefix ((ValaSymbol*) _tmp1_);
17599 	_tmp3_ = _tmp2_;
17600 	_tmp4_ = g_strdup_printf ("_%sdup", _tmp3_);
17601 	_tmp5_ = _tmp4_;
17602 	_g_free0 (_tmp3_);
17603 	dup_func = _tmp5_;
17604 	_tmp6_ = dup_func;
17605 	if (!vala_ccode_base_module_add_wrapper (self, _tmp6_)) {
17606 		result = dup_func;
17607 		return result;
17608 	}
17609 	_tmp7_ = dup_func;
17610 	_tmp8_ = vala_get_ccode_name ((ValaCodeNode*) value_type);
17611 	_tmp9_ = _tmp8_;
17612 	_tmp10_ = vala_ccode_function_new (_tmp7_, _tmp9_);
17613 	_tmp11_ = _tmp10_;
17614 	_g_free0 (_tmp9_);
17615 	function = _tmp11_;
17616 	_tmp12_ = function;
17617 	vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp12_, VALA_CCODE_MODIFIERS_STATIC);
17618 	_tmp13_ = function;
17619 	_tmp14_ = vala_get_ccode_name ((ValaCodeNode*) value_type);
17620 	_tmp15_ = _tmp14_;
17621 	_tmp16_ = vala_ccode_parameter_new ("self", _tmp15_);
17622 	_tmp17_ = _tmp16_;
17623 	vala_ccode_function_add_parameter (_tmp13_, _tmp17_);
17624 	_vala_ccode_node_unref0 (_tmp17_);
17625 	_g_free0 (_tmp15_);
17626 	_tmp18_ = function;
17627 	vala_ccode_base_module_push_function (self, _tmp18_);
17628 	_tmp19_ = vala_data_type_get_type_symbol ((ValaDataType*) value_type);
17629 	_tmp20_ = _tmp19_;
17630 	_tmp21_ = self->gvalue_type;
17631 	if (_tmp20_ == G_TYPE_CHECK_INSTANCE_CAST (_tmp21_, VALA_TYPE_TYPESYMBOL, ValaTypeSymbol)) {
17632 		ValaCCodeFunctionCall* dup_call = NULL;
17633 		ValaCCodeIdentifier* _tmp22_;
17634 		ValaCCodeIdentifier* _tmp23_;
17635 		ValaCCodeFunctionCall* _tmp24_;
17636 		ValaCCodeFunctionCall* _tmp25_;
17637 		ValaCCodeFunctionCall* _tmp26_;
17638 		ValaCCodeIdentifier* _tmp27_;
17639 		ValaCCodeIdentifier* _tmp28_;
17640 		ValaCCodeFunctionCall* _tmp29_;
17641 		ValaCCodeIdentifier* _tmp30_;
17642 		ValaCCodeIdentifier* _tmp31_;
17643 		ValaCCodeFunction* _tmp32_;
17644 		ValaCCodeFunction* _tmp33_;
17645 		ValaCCodeFunctionCall* _tmp34_;
17646 		_tmp22_ = vala_ccode_identifier_new ("g_boxed_copy");
17647 		_tmp23_ = _tmp22_;
17648 		_tmp24_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp23_);
17649 		_tmp25_ = _tmp24_;
17650 		_vala_ccode_node_unref0 (_tmp23_);
17651 		dup_call = _tmp25_;
17652 		_tmp26_ = dup_call;
17653 		_tmp27_ = vala_ccode_identifier_new ("G_TYPE_VALUE");
17654 		_tmp28_ = _tmp27_;
17655 		vala_ccode_function_call_add_argument (_tmp26_, (ValaCCodeExpression*) _tmp28_);
17656 		_vala_ccode_node_unref0 (_tmp28_);
17657 		_tmp29_ = dup_call;
17658 		_tmp30_ = vala_ccode_identifier_new ("self");
17659 		_tmp31_ = _tmp30_;
17660 		vala_ccode_function_call_add_argument (_tmp29_, (ValaCCodeExpression*) _tmp31_);
17661 		_vala_ccode_node_unref0 (_tmp31_);
17662 		_tmp32_ = vala_ccode_base_module_get_ccode (self);
17663 		_tmp33_ = _tmp32_;
17664 		_tmp34_ = dup_call;
17665 		vala_ccode_function_add_return (_tmp33_, (ValaCCodeExpression*) _tmp34_);
17666 		_vala_ccode_node_unref0 (dup_call);
17667 	} else {
17668 		ValaCCodeFunction* _tmp35_;
17669 		ValaCCodeFunction* _tmp36_;
17670 		gchar* _tmp37_;
17671 		gchar* _tmp38_;
17672 		ValaCCodeVariableDeclarator* _tmp39_;
17673 		ValaCCodeVariableDeclarator* _tmp40_;
17674 		ValaCCodeFunctionCall* creation_call = NULL;
17675 		ValaCodeContext* _tmp41_;
17676 		ValaProfile _tmp42_;
17677 		ValaProfile _tmp43_;
17678 		ValaCCodeFunction* _tmp78_;
17679 		ValaCCodeFunction* _tmp79_;
17680 		ValaCCodeIdentifier* _tmp80_;
17681 		ValaCCodeIdentifier* _tmp81_;
17682 		ValaCCodeFunctionCall* _tmp82_;
17683 		ValaStruct* st = NULL;
17684 		ValaTypeSymbol* _tmp83_;
17685 		ValaTypeSymbol* _tmp84_;
17686 		ValaStruct* _tmp85_;
17687 		gboolean _tmp86_ = FALSE;
17688 		ValaStruct* _tmp87_;
17689 		ValaCCodeFunction* _tmp134_;
17690 		ValaCCodeFunction* _tmp135_;
17691 		ValaCCodeIdentifier* _tmp136_;
17692 		ValaCCodeIdentifier* _tmp137_;
17693 		_tmp35_ = vala_ccode_base_module_get_ccode (self);
17694 		_tmp36_ = _tmp35_;
17695 		_tmp37_ = vala_get_ccode_name ((ValaCodeNode*) value_type);
17696 		_tmp38_ = _tmp37_;
17697 		_tmp39_ = vala_ccode_variable_declarator_new ("dup", NULL, NULL);
17698 		_tmp40_ = _tmp39_;
17699 		vala_ccode_function_add_declaration (_tmp36_, _tmp38_, (ValaCCodeDeclarator*) _tmp40_, 0);
17700 		_vala_ccode_node_unref0 (_tmp40_);
17701 		_g_free0 (_tmp38_);
17702 		_tmp41_ = self->priv->_context;
17703 		_tmp42_ = vala_code_context_get_profile (_tmp41_);
17704 		_tmp43_ = _tmp42_;
17705 		if (_tmp43_ == VALA_PROFILE_POSIX) {
17706 			ValaCCodeFile* _tmp44_;
17707 			ValaCCodeIdentifier* _tmp45_;
17708 			ValaCCodeIdentifier* _tmp46_;
17709 			ValaCCodeFunctionCall* _tmp47_;
17710 			ValaCCodeFunctionCall* _tmp48_;
17711 			ValaCCodeConstant* _tmp49_;
17712 			ValaCCodeConstant* _tmp50_;
17713 			ValaCCodeFunctionCall* csizeof = NULL;
17714 			ValaCCodeIdentifier* _tmp51_;
17715 			ValaCCodeIdentifier* _tmp52_;
17716 			ValaCCodeFunctionCall* _tmp53_;
17717 			ValaCCodeFunctionCall* _tmp54_;
17718 			ValaCCodeFunctionCall* _tmp55_;
17719 			ValaTypeSymbol* _tmp56_;
17720 			ValaTypeSymbol* _tmp57_;
17721 			gchar* _tmp58_;
17722 			gchar* _tmp59_;
17723 			ValaCCodeIdentifier* _tmp60_;
17724 			ValaCCodeIdentifier* _tmp61_;
17725 			ValaCCodeFunctionCall* _tmp62_;
17726 			ValaCCodeFunctionCall* _tmp63_;
17727 			_tmp44_ = self->cfile;
17728 			vala_ccode_file_add_include (_tmp44_, "stdlib.h", FALSE);
17729 			_tmp45_ = vala_ccode_identifier_new ("calloc");
17730 			_tmp46_ = _tmp45_;
17731 			_tmp47_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp46_);
17732 			_vala_ccode_node_unref0 (creation_call);
17733 			creation_call = _tmp47_;
17734 			_vala_ccode_node_unref0 (_tmp46_);
17735 			_tmp48_ = creation_call;
17736 			_tmp49_ = vala_ccode_constant_new ("1");
17737 			_tmp50_ = _tmp49_;
17738 			vala_ccode_function_call_add_argument (_tmp48_, (ValaCCodeExpression*) _tmp50_);
17739 			_vala_ccode_node_unref0 (_tmp50_);
17740 			_tmp51_ = vala_ccode_identifier_new ("sizeof");
17741 			_tmp52_ = _tmp51_;
17742 			_tmp53_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp52_);
17743 			_tmp54_ = _tmp53_;
17744 			_vala_ccode_node_unref0 (_tmp52_);
17745 			csizeof = _tmp54_;
17746 			_tmp55_ = csizeof;
17747 			_tmp56_ = vala_data_type_get_type_symbol ((ValaDataType*) value_type);
17748 			_tmp57_ = _tmp56_;
17749 			_tmp58_ = vala_get_ccode_name ((ValaCodeNode*) _tmp57_);
17750 			_tmp59_ = _tmp58_;
17751 			_tmp60_ = vala_ccode_identifier_new (_tmp59_);
17752 			_tmp61_ = _tmp60_;
17753 			vala_ccode_function_call_add_argument (_tmp55_, (ValaCCodeExpression*) _tmp61_);
17754 			_vala_ccode_node_unref0 (_tmp61_);
17755 			_g_free0 (_tmp59_);
17756 			_tmp62_ = creation_call;
17757 			_tmp63_ = csizeof;
17758 			vala_ccode_function_call_add_argument (_tmp62_, (ValaCCodeExpression*) _tmp63_);
17759 			_vala_ccode_node_unref0 (csizeof);
17760 		} else {
17761 			ValaCCodeFile* _tmp64_;
17762 			ValaCCodeIdentifier* _tmp65_;
17763 			ValaCCodeIdentifier* _tmp66_;
17764 			ValaCCodeFunctionCall* _tmp67_;
17765 			ValaCCodeFunctionCall* _tmp68_;
17766 			ValaTypeSymbol* _tmp69_;
17767 			ValaTypeSymbol* _tmp70_;
17768 			gchar* _tmp71_;
17769 			gchar* _tmp72_;
17770 			ValaCCodeIdentifier* _tmp73_;
17771 			ValaCCodeIdentifier* _tmp74_;
17772 			ValaCCodeFunctionCall* _tmp75_;
17773 			ValaCCodeConstant* _tmp76_;
17774 			ValaCCodeConstant* _tmp77_;
17775 			_tmp64_ = self->cfile;
17776 			vala_ccode_file_add_include (_tmp64_, "glib.h", FALSE);
17777 			_tmp65_ = vala_ccode_identifier_new ("g_new0");
17778 			_tmp66_ = _tmp65_;
17779 			_tmp67_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp66_);
17780 			_vala_ccode_node_unref0 (creation_call);
17781 			creation_call = _tmp67_;
17782 			_vala_ccode_node_unref0 (_tmp66_);
17783 			_tmp68_ = creation_call;
17784 			_tmp69_ = vala_data_type_get_type_symbol ((ValaDataType*) value_type);
17785 			_tmp70_ = _tmp69_;
17786 			_tmp71_ = vala_get_ccode_name ((ValaCodeNode*) _tmp70_);
17787 			_tmp72_ = _tmp71_;
17788 			_tmp73_ = vala_ccode_identifier_new (_tmp72_);
17789 			_tmp74_ = _tmp73_;
17790 			vala_ccode_function_call_add_argument (_tmp68_, (ValaCCodeExpression*) _tmp74_);
17791 			_vala_ccode_node_unref0 (_tmp74_);
17792 			_g_free0 (_tmp72_);
17793 			_tmp75_ = creation_call;
17794 			_tmp76_ = vala_ccode_constant_new ("1");
17795 			_tmp77_ = _tmp76_;
17796 			vala_ccode_function_call_add_argument (_tmp75_, (ValaCCodeExpression*) _tmp77_);
17797 			_vala_ccode_node_unref0 (_tmp77_);
17798 		}
17799 		_tmp78_ = vala_ccode_base_module_get_ccode (self);
17800 		_tmp79_ = _tmp78_;
17801 		_tmp80_ = vala_ccode_identifier_new ("dup");
17802 		_tmp81_ = _tmp80_;
17803 		_tmp82_ = creation_call;
17804 		vala_ccode_function_add_assignment (_tmp79_, (ValaCCodeExpression*) _tmp81_, (ValaCCodeExpression*) _tmp82_);
17805 		_vala_ccode_node_unref0 (_tmp81_);
17806 		_tmp83_ = vala_data_type_get_type_symbol ((ValaDataType*) value_type);
17807 		_tmp84_ = _tmp83_;
17808 		_tmp85_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (_tmp84_, VALA_TYPE_STRUCT) ? ((ValaStruct*) _tmp84_) : NULL);
17809 		st = _tmp85_;
17810 		_tmp87_ = st;
17811 		if (_tmp87_ != NULL) {
17812 			ValaStruct* _tmp88_;
17813 			_tmp88_ = st;
17814 			_tmp86_ = vala_struct_is_disposable (_tmp88_);
17815 		} else {
17816 			_tmp86_ = FALSE;
17817 		}
17818 		if (_tmp86_) {
17819 			ValaStruct* _tmp89_;
17820 			ValaCCodeFunctionCall* copy_call = NULL;
17821 			ValaStruct* _tmp91_;
17822 			gchar* _tmp92_;
17823 			gchar* _tmp93_;
17824 			ValaCCodeIdentifier* _tmp94_;
17825 			ValaCCodeIdentifier* _tmp95_;
17826 			ValaCCodeFunctionCall* _tmp96_;
17827 			ValaCCodeFunctionCall* _tmp97_;
17828 			ValaCCodeFunctionCall* _tmp98_;
17829 			ValaCCodeIdentifier* _tmp99_;
17830 			ValaCCodeIdentifier* _tmp100_;
17831 			ValaCCodeFunctionCall* _tmp101_;
17832 			ValaCCodeIdentifier* _tmp102_;
17833 			ValaCCodeIdentifier* _tmp103_;
17834 			ValaCCodeFunction* _tmp104_;
17835 			ValaCCodeFunction* _tmp105_;
17836 			ValaCCodeFunctionCall* _tmp106_;
17837 			_tmp89_ = st;
17838 			if (!vala_get_ccode_has_copy_function (_tmp89_)) {
17839 				ValaStruct* _tmp90_;
17840 				_tmp90_ = st;
17841 				vala_ccode_base_module_generate_struct_copy_function (self, _tmp90_);
17842 			}
17843 			_tmp91_ = st;
17844 			_tmp92_ = vala_get_ccode_copy_function ((ValaTypeSymbol*) _tmp91_);
17845 			_tmp93_ = _tmp92_;
17846 			_tmp94_ = vala_ccode_identifier_new (_tmp93_);
17847 			_tmp95_ = _tmp94_;
17848 			_tmp96_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp95_);
17849 			_tmp97_ = _tmp96_;
17850 			_vala_ccode_node_unref0 (_tmp95_);
17851 			_g_free0 (_tmp93_);
17852 			copy_call = _tmp97_;
17853 			_tmp98_ = copy_call;
17854 			_tmp99_ = vala_ccode_identifier_new ("self");
17855 			_tmp100_ = _tmp99_;
17856 			vala_ccode_function_call_add_argument (_tmp98_, (ValaCCodeExpression*) _tmp100_);
17857 			_vala_ccode_node_unref0 (_tmp100_);
17858 			_tmp101_ = copy_call;
17859 			_tmp102_ = vala_ccode_identifier_new ("dup");
17860 			_tmp103_ = _tmp102_;
17861 			vala_ccode_function_call_add_argument (_tmp101_, (ValaCCodeExpression*) _tmp103_);
17862 			_vala_ccode_node_unref0 (_tmp103_);
17863 			_tmp104_ = vala_ccode_base_module_get_ccode (self);
17864 			_tmp105_ = _tmp104_;
17865 			_tmp106_ = copy_call;
17866 			vala_ccode_function_add_expression (_tmp105_, (ValaCCodeExpression*) _tmp106_);
17867 			_vala_ccode_node_unref0 (copy_call);
17868 		} else {
17869 			ValaCCodeFile* _tmp107_;
17870 			ValaCCodeFunctionCall* sizeof_call = NULL;
17871 			ValaCCodeIdentifier* _tmp108_;
17872 			ValaCCodeIdentifier* _tmp109_;
17873 			ValaCCodeFunctionCall* _tmp110_;
17874 			ValaCCodeFunctionCall* _tmp111_;
17875 			ValaCCodeFunctionCall* _tmp112_;
17876 			ValaTypeSymbol* _tmp113_;
17877 			ValaTypeSymbol* _tmp114_;
17878 			gchar* _tmp115_;
17879 			gchar* _tmp116_;
17880 			ValaCCodeConstant* _tmp117_;
17881 			ValaCCodeConstant* _tmp118_;
17882 			ValaCCodeFunctionCall* copy_call = NULL;
17883 			ValaCCodeIdentifier* _tmp119_;
17884 			ValaCCodeIdentifier* _tmp120_;
17885 			ValaCCodeFunctionCall* _tmp121_;
17886 			ValaCCodeFunctionCall* _tmp122_;
17887 			ValaCCodeFunctionCall* _tmp123_;
17888 			ValaCCodeIdentifier* _tmp124_;
17889 			ValaCCodeIdentifier* _tmp125_;
17890 			ValaCCodeFunctionCall* _tmp126_;
17891 			ValaCCodeIdentifier* _tmp127_;
17892 			ValaCCodeIdentifier* _tmp128_;
17893 			ValaCCodeFunctionCall* _tmp129_;
17894 			ValaCCodeFunctionCall* _tmp130_;
17895 			ValaCCodeFunction* _tmp131_;
17896 			ValaCCodeFunction* _tmp132_;
17897 			ValaCCodeFunctionCall* _tmp133_;
17898 			_tmp107_ = self->cfile;
17899 			vala_ccode_file_add_include (_tmp107_, "string.h", FALSE);
17900 			_tmp108_ = vala_ccode_identifier_new ("sizeof");
17901 			_tmp109_ = _tmp108_;
17902 			_tmp110_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp109_);
17903 			_tmp111_ = _tmp110_;
17904 			_vala_ccode_node_unref0 (_tmp109_);
17905 			sizeof_call = _tmp111_;
17906 			_tmp112_ = sizeof_call;
17907 			_tmp113_ = vala_data_type_get_type_symbol ((ValaDataType*) value_type);
17908 			_tmp114_ = _tmp113_;
17909 			_tmp115_ = vala_get_ccode_name ((ValaCodeNode*) _tmp114_);
17910 			_tmp116_ = _tmp115_;
17911 			_tmp117_ = vala_ccode_constant_new (_tmp116_);
17912 			_tmp118_ = _tmp117_;
17913 			vala_ccode_function_call_add_argument (_tmp112_, (ValaCCodeExpression*) _tmp118_);
17914 			_vala_ccode_node_unref0 (_tmp118_);
17915 			_g_free0 (_tmp116_);
17916 			_tmp119_ = vala_ccode_identifier_new ("memcpy");
17917 			_tmp120_ = _tmp119_;
17918 			_tmp121_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp120_);
17919 			_tmp122_ = _tmp121_;
17920 			_vala_ccode_node_unref0 (_tmp120_);
17921 			copy_call = _tmp122_;
17922 			_tmp123_ = copy_call;
17923 			_tmp124_ = vala_ccode_identifier_new ("dup");
17924 			_tmp125_ = _tmp124_;
17925 			vala_ccode_function_call_add_argument (_tmp123_, (ValaCCodeExpression*) _tmp125_);
17926 			_vala_ccode_node_unref0 (_tmp125_);
17927 			_tmp126_ = copy_call;
17928 			_tmp127_ = vala_ccode_identifier_new ("self");
17929 			_tmp128_ = _tmp127_;
17930 			vala_ccode_function_call_add_argument (_tmp126_, (ValaCCodeExpression*) _tmp128_);
17931 			_vala_ccode_node_unref0 (_tmp128_);
17932 			_tmp129_ = copy_call;
17933 			_tmp130_ = sizeof_call;
17934 			vala_ccode_function_call_add_argument (_tmp129_, (ValaCCodeExpression*) _tmp130_);
17935 			_tmp131_ = vala_ccode_base_module_get_ccode (self);
17936 			_tmp132_ = _tmp131_;
17937 			_tmp133_ = copy_call;
17938 			vala_ccode_function_add_expression (_tmp132_, (ValaCCodeExpression*) _tmp133_);
17939 			_vala_ccode_node_unref0 (copy_call);
17940 			_vala_ccode_node_unref0 (sizeof_call);
17941 		}
17942 		_tmp134_ = vala_ccode_base_module_get_ccode (self);
17943 		_tmp135_ = _tmp134_;
17944 		_tmp136_ = vala_ccode_identifier_new ("dup");
17945 		_tmp137_ = _tmp136_;
17946 		vala_ccode_function_add_return (_tmp135_, (ValaCCodeExpression*) _tmp137_);
17947 		_vala_ccode_node_unref0 (_tmp137_);
17948 		_vala_code_node_unref0 (st);
17949 		_vala_ccode_node_unref0 (creation_call);
17950 	}
17951 	vala_ccode_base_module_pop_function (self);
17952 	_tmp138_ = self->cfile;
17953 	_tmp139_ = function;
17954 	vala_ccode_file_add_function_declaration (_tmp138_, _tmp139_);
17955 	_tmp140_ = self->cfile;
17956 	_tmp141_ = function;
17957 	vala_ccode_file_add_function (_tmp140_, _tmp141_);
17958 	result = dup_func;
17959 	_vala_ccode_node_unref0 (function);
17960 	return result;
17961 }
17962 
17963 gchar*
vala_ccode_base_module_generate_dup_func_wrapper(ValaCCodeBaseModule * self,ValaDataType * type)17964 vala_ccode_base_module_generate_dup_func_wrapper (ValaCCodeBaseModule* self,
17965                                                   ValaDataType* type)
17966 {
17967 	gchar* destroy_func = NULL;
17968 	ValaTypeSymbol* _tmp0_;
17969 	ValaTypeSymbol* _tmp1_;
17970 	gchar* _tmp2_;
17971 	gchar* _tmp3_;
17972 	gchar* _tmp4_;
17973 	gchar* _tmp5_;
17974 	const gchar* _tmp6_;
17975 	ValaCCodeFunction* function = NULL;
17976 	const gchar* _tmp7_;
17977 	gchar* _tmp8_;
17978 	gchar* _tmp9_;
17979 	ValaCCodeFunction* _tmp10_;
17980 	ValaCCodeFunction* _tmp11_;
17981 	ValaCCodeFunction* _tmp12_;
17982 	ValaCCodeFunction* _tmp13_;
17983 	gchar* _tmp14_;
17984 	gchar* _tmp15_;
17985 	ValaCCodeParameter* _tmp16_;
17986 	ValaCCodeParameter* _tmp17_;
17987 	ValaCCodeFunction* _tmp18_;
17988 	ValaCCodeFunctionCall* free_call = NULL;
17989 	ValaCCodeIdentifier* _tmp19_;
17990 	ValaCCodeIdentifier* _tmp20_;
17991 	ValaCCodeFunctionCall* _tmp21_;
17992 	ValaCCodeFunctionCall* _tmp22_;
17993 	ValaCCodeFunctionCall* _tmp23_;
17994 	ValaTypeSymbol* _tmp24_;
17995 	ValaTypeSymbol* _tmp25_;
17996 	gchar* _tmp26_;
17997 	gchar* _tmp27_;
17998 	ValaCCodeIdentifier* _tmp28_;
17999 	ValaCCodeIdentifier* _tmp29_;
18000 	ValaCCodeFunctionCall* _tmp30_;
18001 	ValaCCodeIdentifier* _tmp31_;
18002 	ValaCCodeIdentifier* _tmp32_;
18003 	ValaCCodeFunction* _tmp33_;
18004 	ValaCCodeFunction* _tmp34_;
18005 	ValaCCodeFunctionCall* _tmp35_;
18006 	ValaCCodeFile* _tmp36_;
18007 	ValaCCodeFunction* _tmp37_;
18008 	ValaCCodeFile* _tmp38_;
18009 	ValaCCodeFunction* _tmp39_;
18010 	gchar* result = NULL;
18011 	g_return_val_if_fail (self != NULL, NULL);
18012 	g_return_val_if_fail (type != NULL, NULL);
18013 	_tmp0_ = vala_data_type_get_type_symbol (type);
18014 	_tmp1_ = _tmp0_;
18015 	_tmp2_ = vala_get_ccode_name ((ValaCodeNode*) _tmp1_);
18016 	_tmp3_ = _tmp2_;
18017 	_tmp4_ = g_strdup_printf ("_vala_%s_copy", _tmp3_);
18018 	_tmp5_ = _tmp4_;
18019 	_g_free0 (_tmp3_);
18020 	destroy_func = _tmp5_;
18021 	_tmp6_ = destroy_func;
18022 	if (!vala_ccode_base_module_add_wrapper (self, _tmp6_)) {
18023 		result = destroy_func;
18024 		return result;
18025 	}
18026 	_tmp7_ = destroy_func;
18027 	_tmp8_ = vala_get_ccode_name ((ValaCodeNode*) type);
18028 	_tmp9_ = _tmp8_;
18029 	_tmp10_ = vala_ccode_function_new (_tmp7_, _tmp9_);
18030 	_tmp11_ = _tmp10_;
18031 	_g_free0 (_tmp9_);
18032 	function = _tmp11_;
18033 	_tmp12_ = function;
18034 	vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp12_, VALA_CCODE_MODIFIERS_STATIC);
18035 	_tmp13_ = function;
18036 	_tmp14_ = vala_get_ccode_name ((ValaCodeNode*) type);
18037 	_tmp15_ = _tmp14_;
18038 	_tmp16_ = vala_ccode_parameter_new ("self", _tmp15_);
18039 	_tmp17_ = _tmp16_;
18040 	vala_ccode_function_add_parameter (_tmp13_, _tmp17_);
18041 	_vala_ccode_node_unref0 (_tmp17_);
18042 	_g_free0 (_tmp15_);
18043 	_tmp18_ = function;
18044 	vala_ccode_base_module_push_function (self, _tmp18_);
18045 	_tmp19_ = vala_ccode_identifier_new ("g_boxed_copy");
18046 	_tmp20_ = _tmp19_;
18047 	_tmp21_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp20_);
18048 	_tmp22_ = _tmp21_;
18049 	_vala_ccode_node_unref0 (_tmp20_);
18050 	free_call = _tmp22_;
18051 	_tmp23_ = free_call;
18052 	_tmp24_ = vala_data_type_get_type_symbol (type);
18053 	_tmp25_ = _tmp24_;
18054 	_tmp26_ = vala_get_ccode_type_id ((ValaCodeNode*) _tmp25_);
18055 	_tmp27_ = _tmp26_;
18056 	_tmp28_ = vala_ccode_identifier_new (_tmp27_);
18057 	_tmp29_ = _tmp28_;
18058 	vala_ccode_function_call_add_argument (_tmp23_, (ValaCCodeExpression*) _tmp29_);
18059 	_vala_ccode_node_unref0 (_tmp29_);
18060 	_g_free0 (_tmp27_);
18061 	_tmp30_ = free_call;
18062 	_tmp31_ = vala_ccode_identifier_new ("self");
18063 	_tmp32_ = _tmp31_;
18064 	vala_ccode_function_call_add_argument (_tmp30_, (ValaCCodeExpression*) _tmp32_);
18065 	_vala_ccode_node_unref0 (_tmp32_);
18066 	_tmp33_ = vala_ccode_base_module_get_ccode (self);
18067 	_tmp34_ = _tmp33_;
18068 	_tmp35_ = free_call;
18069 	vala_ccode_function_add_return (_tmp34_, (ValaCCodeExpression*) _tmp35_);
18070 	vala_ccode_base_module_pop_function (self);
18071 	_tmp36_ = self->cfile;
18072 	_tmp37_ = function;
18073 	vala_ccode_file_add_function_declaration (_tmp36_, _tmp37_);
18074 	_tmp38_ = self->cfile;
18075 	_tmp39_ = function;
18076 	vala_ccode_file_add_function (_tmp38_, _tmp39_);
18077 	result = destroy_func;
18078 	_vala_ccode_node_unref0 (free_call);
18079 	_vala_ccode_node_unref0 (function);
18080 	return result;
18081 }
18082 
18083 gchar*
vala_ccode_base_module_generate_free_function_address_of_wrapper(ValaCCodeBaseModule * self,ValaDataType * type)18084 vala_ccode_base_module_generate_free_function_address_of_wrapper (ValaCCodeBaseModule* self,
18085                                                                   ValaDataType* type)
18086 {
18087 	gchar* destroy_func = NULL;
18088 	ValaTypeSymbol* _tmp0_;
18089 	ValaTypeSymbol* _tmp1_;
18090 	gchar* _tmp2_;
18091 	gchar* _tmp3_;
18092 	gchar* _tmp4_;
18093 	gchar* _tmp5_;
18094 	const gchar* _tmp6_;
18095 	ValaCCodeFunction* function = NULL;
18096 	const gchar* _tmp7_;
18097 	ValaCCodeFunction* _tmp8_;
18098 	ValaCCodeFunction* _tmp9_;
18099 	ValaCCodeFunction* _tmp10_;
18100 	gchar* _tmp11_;
18101 	gchar* _tmp12_;
18102 	ValaCCodeParameter* _tmp13_;
18103 	ValaCCodeParameter* _tmp14_;
18104 	ValaCCodeFunction* _tmp15_;
18105 	ValaClass* cl = NULL;
18106 	ValaTypeSymbol* _tmp16_;
18107 	ValaTypeSymbol* _tmp17_;
18108 	ValaClass* _tmp18_;
18109 	ValaCCodeFunctionCall* free_call = NULL;
18110 	ValaClass* _tmp19_;
18111 	gchar* _tmp20_;
18112 	gchar* _tmp21_;
18113 	ValaCCodeIdentifier* _tmp22_;
18114 	ValaCCodeIdentifier* _tmp23_;
18115 	ValaCCodeFunctionCall* _tmp24_;
18116 	ValaCCodeFunctionCall* _tmp25_;
18117 	ValaCCodeFunctionCall* _tmp26_;
18118 	ValaCCodeIdentifier* _tmp27_;
18119 	ValaCCodeIdentifier* _tmp28_;
18120 	ValaCCodeUnaryExpression* _tmp29_;
18121 	ValaCCodeUnaryExpression* _tmp30_;
18122 	ValaCCodeFunction* _tmp31_;
18123 	ValaCCodeFunction* _tmp32_;
18124 	ValaCCodeFunctionCall* _tmp33_;
18125 	ValaCCodeFile* _tmp34_;
18126 	ValaCCodeFunction* _tmp35_;
18127 	ValaCCodeFile* _tmp36_;
18128 	ValaCCodeFunction* _tmp37_;
18129 	gchar* result = NULL;
18130 	g_return_val_if_fail (self != NULL, NULL);
18131 	g_return_val_if_fail (type != NULL, NULL);
18132 	_tmp0_ = vala_data_type_get_type_symbol (type);
18133 	_tmp1_ = _tmp0_;
18134 	_tmp2_ = vala_get_ccode_name ((ValaCodeNode*) _tmp1_);
18135 	_tmp3_ = _tmp2_;
18136 	_tmp4_ = g_strdup_printf ("_vala_%s_free_function_address_of", _tmp3_);
18137 	_tmp5_ = _tmp4_;
18138 	_g_free0 (_tmp3_);
18139 	destroy_func = _tmp5_;
18140 	_tmp6_ = destroy_func;
18141 	if (!vala_ccode_base_module_add_wrapper (self, _tmp6_)) {
18142 		result = destroy_func;
18143 		return result;
18144 	}
18145 	_tmp7_ = destroy_func;
18146 	_tmp8_ = vala_ccode_function_new (_tmp7_, "void");
18147 	function = _tmp8_;
18148 	_tmp9_ = function;
18149 	vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp9_, VALA_CCODE_MODIFIERS_STATIC);
18150 	_tmp10_ = function;
18151 	_tmp11_ = vala_get_ccode_name ((ValaCodeNode*) type);
18152 	_tmp12_ = _tmp11_;
18153 	_tmp13_ = vala_ccode_parameter_new ("self", _tmp12_);
18154 	_tmp14_ = _tmp13_;
18155 	vala_ccode_function_add_parameter (_tmp10_, _tmp14_);
18156 	_vala_ccode_node_unref0 (_tmp14_);
18157 	_g_free0 (_tmp12_);
18158 	_tmp15_ = function;
18159 	vala_ccode_base_module_push_function (self, _tmp15_);
18160 	_tmp16_ = vala_data_type_get_type_symbol (type);
18161 	_tmp17_ = _tmp16_;
18162 	cl = G_TYPE_CHECK_INSTANCE_TYPE (_tmp17_, VALA_TYPE_CLASS) ? ((ValaClass*) _tmp17_) : NULL;
18163 	_tmp18_ = cl;
18164 	_vala_assert (_tmp18_ != NULL, "cl != null");
18165 	_tmp19_ = cl;
18166 	_tmp20_ = vala_get_ccode_free_function ((ValaTypeSymbol*) _tmp19_);
18167 	_tmp21_ = _tmp20_;
18168 	_tmp22_ = vala_ccode_identifier_new (_tmp21_);
18169 	_tmp23_ = _tmp22_;
18170 	_tmp24_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp23_);
18171 	_tmp25_ = _tmp24_;
18172 	_vala_ccode_node_unref0 (_tmp23_);
18173 	_g_free0 (_tmp21_);
18174 	free_call = _tmp25_;
18175 	_tmp26_ = free_call;
18176 	_tmp27_ = vala_ccode_identifier_new ("self");
18177 	_tmp28_ = _tmp27_;
18178 	_tmp29_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, (ValaCCodeExpression*) _tmp28_);
18179 	_tmp30_ = _tmp29_;
18180 	vala_ccode_function_call_add_argument (_tmp26_, (ValaCCodeExpression*) _tmp30_);
18181 	_vala_ccode_node_unref0 (_tmp30_);
18182 	_vala_ccode_node_unref0 (_tmp28_);
18183 	_tmp31_ = vala_ccode_base_module_get_ccode (self);
18184 	_tmp32_ = _tmp31_;
18185 	_tmp33_ = free_call;
18186 	vala_ccode_function_add_expression (_tmp32_, (ValaCCodeExpression*) _tmp33_);
18187 	vala_ccode_base_module_pop_function (self);
18188 	_tmp34_ = self->cfile;
18189 	_tmp35_ = function;
18190 	vala_ccode_file_add_function_declaration (_tmp34_, _tmp35_);
18191 	_tmp36_ = self->cfile;
18192 	_tmp37_ = function;
18193 	vala_ccode_file_add_function (_tmp36_, _tmp37_);
18194 	result = destroy_func;
18195 	_vala_ccode_node_unref0 (free_call);
18196 	_vala_ccode_node_unref0 (function);
18197 	return result;
18198 }
18199 
18200 gchar*
vala_ccode_base_module_generate_destroy_function_content_of_wrapper(ValaCCodeBaseModule * self,ValaDataType * type)18201 vala_ccode_base_module_generate_destroy_function_content_of_wrapper (ValaCCodeBaseModule* self,
18202                                                                      ValaDataType* type)
18203 {
18204 	gchar* destroy_func = NULL;
18205 	ValaTypeSymbol* _tmp0_;
18206 	ValaTypeSymbol* _tmp1_;
18207 	gchar* _tmp2_;
18208 	gchar* _tmp3_;
18209 	gchar* _tmp4_;
18210 	gchar* _tmp5_;
18211 	const gchar* _tmp6_;
18212 	ValaCCodeFunction* function = NULL;
18213 	const gchar* _tmp7_;
18214 	ValaCCodeFunction* _tmp8_;
18215 	ValaCCodeFunction* _tmp9_;
18216 	ValaCCodeFunction* _tmp10_;
18217 	ValaDataType* _tmp11_;
18218 	gchar* _tmp12_;
18219 	gchar* _tmp13_;
18220 	ValaCCodeParameter* _tmp14_;
18221 	ValaCCodeParameter* _tmp15_;
18222 	ValaCCodeFunction* _tmp16_;
18223 	ValaCCodeFunction* _tmp17_;
18224 	ValaCCodeFunction* _tmp18_;
18225 	gchar* _tmp19_;
18226 	gchar* _tmp20_;
18227 	ValaCCodeVariableDeclarator* _tmp21_;
18228 	ValaCCodeVariableDeclarator* _tmp22_;
18229 	ValaCCodeUnaryExpression* cast = NULL;
18230 	ValaCCodeIdentifier* _tmp23_;
18231 	ValaCCodeIdentifier* _tmp24_;
18232 	gchar* _tmp25_;
18233 	gchar* _tmp26_;
18234 	gchar* _tmp27_;
18235 	gchar* _tmp28_;
18236 	ValaCCodeCastExpression* _tmp29_;
18237 	ValaCCodeCastExpression* _tmp30_;
18238 	ValaCCodeUnaryExpression* _tmp31_;
18239 	ValaCCodeUnaryExpression* _tmp32_;
18240 	ValaCCodeFunction* _tmp33_;
18241 	ValaCCodeFunction* _tmp34_;
18242 	ValaCCodeIdentifier* _tmp35_;
18243 	ValaCCodeIdentifier* _tmp36_;
18244 	ValaCCodeUnaryExpression* _tmp37_;
18245 	ValaCCodeFunctionCall* free_call = NULL;
18246 	ValaCCodeExpression* _tmp38_;
18247 	ValaCCodeExpression* _tmp39_;
18248 	ValaCCodeFunctionCall* _tmp40_;
18249 	ValaCCodeFunctionCall* _tmp41_;
18250 	ValaCCodeFunctionCall* _tmp42_;
18251 	ValaCCodeIdentifier* _tmp43_;
18252 	ValaCCodeIdentifier* _tmp44_;
18253 	ValaCCodeFunction* _tmp45_;
18254 	ValaCCodeFunction* _tmp46_;
18255 	ValaCCodeFunctionCall* _tmp47_;
18256 	ValaCCodeFile* _tmp48_;
18257 	ValaCCodeFunction* _tmp49_;
18258 	ValaCCodeFile* _tmp50_;
18259 	ValaCCodeFunction* _tmp51_;
18260 	gchar* result = NULL;
18261 	g_return_val_if_fail (self != NULL, NULL);
18262 	g_return_val_if_fail (type != NULL, NULL);
18263 	_tmp0_ = vala_data_type_get_type_symbol (type);
18264 	_tmp1_ = _tmp0_;
18265 	_tmp2_ = vala_get_ccode_name ((ValaCodeNode*) _tmp1_);
18266 	_tmp3_ = _tmp2_;
18267 	_tmp4_ = g_strdup_printf ("_vala_%s_free_function_content_of", _tmp3_);
18268 	_tmp5_ = _tmp4_;
18269 	_g_free0 (_tmp3_);
18270 	destroy_func = _tmp5_;
18271 	_tmp6_ = destroy_func;
18272 	if (!vala_ccode_base_module_add_wrapper (self, _tmp6_)) {
18273 		result = destroy_func;
18274 		return result;
18275 	}
18276 	_tmp7_ = destroy_func;
18277 	_tmp8_ = vala_ccode_function_new (_tmp7_, "void");
18278 	function = _tmp8_;
18279 	_tmp9_ = function;
18280 	vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp9_, VALA_CCODE_MODIFIERS_STATIC);
18281 	_tmp10_ = function;
18282 	_tmp11_ = self->pointer_type;
18283 	_tmp12_ = vala_get_ccode_name ((ValaCodeNode*) _tmp11_);
18284 	_tmp13_ = _tmp12_;
18285 	_tmp14_ = vala_ccode_parameter_new ("data", _tmp13_);
18286 	_tmp15_ = _tmp14_;
18287 	vala_ccode_function_add_parameter (_tmp10_, _tmp15_);
18288 	_vala_ccode_node_unref0 (_tmp15_);
18289 	_g_free0 (_tmp13_);
18290 	_tmp16_ = function;
18291 	vala_ccode_base_module_push_function (self, _tmp16_);
18292 	_tmp17_ = vala_ccode_base_module_get_ccode (self);
18293 	_tmp18_ = _tmp17_;
18294 	_tmp19_ = vala_get_ccode_name ((ValaCodeNode*) type);
18295 	_tmp20_ = _tmp19_;
18296 	_tmp21_ = vala_ccode_variable_declarator_new ("self", NULL, NULL);
18297 	_tmp22_ = _tmp21_;
18298 	vala_ccode_function_add_declaration (_tmp18_, _tmp20_, (ValaCCodeDeclarator*) _tmp22_, 0);
18299 	_vala_ccode_node_unref0 (_tmp22_);
18300 	_g_free0 (_tmp20_);
18301 	_tmp23_ = vala_ccode_identifier_new ("data");
18302 	_tmp24_ = _tmp23_;
18303 	_tmp25_ = vala_get_ccode_name ((ValaCodeNode*) type);
18304 	_tmp26_ = _tmp25_;
18305 	_tmp27_ = g_strconcat (_tmp26_, "*", NULL);
18306 	_tmp28_ = _tmp27_;
18307 	_tmp29_ = vala_ccode_cast_expression_new ((ValaCCodeExpression*) _tmp24_, _tmp28_);
18308 	_tmp30_ = _tmp29_;
18309 	_tmp31_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_POINTER_INDIRECTION, (ValaCCodeExpression*) _tmp30_);
18310 	_tmp32_ = _tmp31_;
18311 	_vala_ccode_node_unref0 (_tmp30_);
18312 	_g_free0 (_tmp28_);
18313 	_g_free0 (_tmp26_);
18314 	_vala_ccode_node_unref0 (_tmp24_);
18315 	cast = _tmp32_;
18316 	_tmp33_ = vala_ccode_base_module_get_ccode (self);
18317 	_tmp34_ = _tmp33_;
18318 	_tmp35_ = vala_ccode_identifier_new ("self");
18319 	_tmp36_ = _tmp35_;
18320 	_tmp37_ = cast;
18321 	vala_ccode_function_add_assignment (_tmp34_, (ValaCCodeExpression*) _tmp36_, (ValaCCodeExpression*) _tmp37_);
18322 	_vala_ccode_node_unref0 (_tmp36_);
18323 	_tmp38_ = vala_ccode_base_module_get_destroy0_func_expression (self, type, FALSE);
18324 	_tmp39_ = _tmp38_;
18325 	_tmp40_ = vala_ccode_function_call_new (_tmp39_);
18326 	_tmp41_ = _tmp40_;
18327 	_vala_ccode_node_unref0 (_tmp39_);
18328 	free_call = _tmp41_;
18329 	_tmp42_ = free_call;
18330 	_tmp43_ = vala_ccode_identifier_new ("self");
18331 	_tmp44_ = _tmp43_;
18332 	vala_ccode_function_call_add_argument (_tmp42_, (ValaCCodeExpression*) _tmp44_);
18333 	_vala_ccode_node_unref0 (_tmp44_);
18334 	_tmp45_ = vala_ccode_base_module_get_ccode (self);
18335 	_tmp46_ = _tmp45_;
18336 	_tmp47_ = free_call;
18337 	vala_ccode_function_add_expression (_tmp46_, (ValaCCodeExpression*) _tmp47_);
18338 	vala_ccode_base_module_pop_function (self);
18339 	_tmp48_ = self->cfile;
18340 	_tmp49_ = function;
18341 	vala_ccode_file_add_function_declaration (_tmp48_, _tmp49_);
18342 	_tmp50_ = self->cfile;
18343 	_tmp51_ = function;
18344 	vala_ccode_file_add_function (_tmp50_, _tmp51_);
18345 	result = destroy_func;
18346 	_vala_ccode_node_unref0 (free_call);
18347 	_vala_ccode_node_unref0 (cast);
18348 	_vala_ccode_node_unref0 (function);
18349 	return result;
18350 }
18351 
18352 gchar*
vala_ccode_base_module_generate_free_func_wrapper(ValaCCodeBaseModule * self,ValaDataType * type)18353 vala_ccode_base_module_generate_free_func_wrapper (ValaCCodeBaseModule* self,
18354                                                    ValaDataType* type)
18355 {
18356 	gchar* destroy_func = NULL;
18357 	ValaTypeSymbol* _tmp0_;
18358 	ValaTypeSymbol* _tmp1_;
18359 	gchar* _tmp2_;
18360 	gchar* _tmp3_;
18361 	gchar* _tmp4_;
18362 	gchar* _tmp5_;
18363 	const gchar* _tmp6_;
18364 	ValaCCodeFunction* function = NULL;
18365 	const gchar* _tmp7_;
18366 	ValaCCodeFunction* _tmp8_;
18367 	ValaCCodeFunction* _tmp9_;
18368 	ValaCCodeFunction* _tmp10_;
18369 	gchar* _tmp11_;
18370 	gchar* _tmp12_;
18371 	ValaCCodeParameter* _tmp13_;
18372 	ValaCCodeParameter* _tmp14_;
18373 	ValaCCodeFunction* _tmp15_;
18374 	gboolean _tmp16_ = FALSE;
18375 	ValaTypeSymbol* _tmp17_;
18376 	ValaTypeSymbol* _tmp18_;
18377 	ValaCCodeFile* _tmp78_;
18378 	ValaCCodeFunction* _tmp79_;
18379 	ValaCCodeFile* _tmp80_;
18380 	ValaCCodeFunction* _tmp81_;
18381 	gchar* result = NULL;
18382 	g_return_val_if_fail (self != NULL, NULL);
18383 	g_return_val_if_fail (type != NULL, NULL);
18384 	_tmp0_ = vala_data_type_get_type_symbol (type);
18385 	_tmp1_ = _tmp0_;
18386 	_tmp2_ = vala_get_ccode_name ((ValaCodeNode*) _tmp1_);
18387 	_tmp3_ = _tmp2_;
18388 	_tmp4_ = g_strdup_printf ("_vala_%s_free", _tmp3_);
18389 	_tmp5_ = _tmp4_;
18390 	_g_free0 (_tmp3_);
18391 	destroy_func = _tmp5_;
18392 	_tmp6_ = destroy_func;
18393 	if (!vala_ccode_base_module_add_wrapper (self, _tmp6_)) {
18394 		result = destroy_func;
18395 		return result;
18396 	}
18397 	_tmp7_ = destroy_func;
18398 	_tmp8_ = vala_ccode_function_new (_tmp7_, "void");
18399 	function = _tmp8_;
18400 	_tmp9_ = function;
18401 	vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp9_, VALA_CCODE_MODIFIERS_STATIC);
18402 	_tmp10_ = function;
18403 	_tmp11_ = vala_get_ccode_name ((ValaCodeNode*) type);
18404 	_tmp12_ = _tmp11_;
18405 	_tmp13_ = vala_ccode_parameter_new ("self", _tmp12_);
18406 	_tmp14_ = _tmp13_;
18407 	vala_ccode_function_add_parameter (_tmp10_, _tmp14_);
18408 	_vala_ccode_node_unref0 (_tmp14_);
18409 	_g_free0 (_tmp12_);
18410 	_tmp15_ = function;
18411 	vala_ccode_base_module_push_function (self, _tmp15_);
18412 	_tmp17_ = vala_data_type_get_type_symbol (type);
18413 	_tmp18_ = _tmp17_;
18414 	if (vala_get_ccode_is_gboxed (_tmp18_)) {
18415 		_tmp16_ = TRUE;
18416 	} else {
18417 		gboolean _tmp19_ = FALSE;
18418 		ValaStruct* _tmp20_;
18419 		_tmp20_ = self->gvalue_type;
18420 		if (_tmp20_ != NULL) {
18421 			ValaTypeSymbol* _tmp21_;
18422 			ValaTypeSymbol* _tmp22_;
18423 			ValaStruct* _tmp23_;
18424 			_tmp21_ = vala_data_type_get_type_symbol (type);
18425 			_tmp22_ = _tmp21_;
18426 			_tmp23_ = self->gvalue_type;
18427 			_tmp19_ = _tmp22_ == G_TYPE_CHECK_INSTANCE_CAST (_tmp23_, VALA_TYPE_TYPESYMBOL, ValaTypeSymbol);
18428 		} else {
18429 			_tmp19_ = FALSE;
18430 		}
18431 		_tmp16_ = _tmp19_;
18432 	}
18433 	if (_tmp16_) {
18434 		ValaCCodeFunctionCall* free_call = NULL;
18435 		ValaCCodeIdentifier* _tmp24_;
18436 		ValaCCodeIdentifier* _tmp25_;
18437 		ValaCCodeFunctionCall* _tmp26_;
18438 		ValaCCodeFunctionCall* _tmp27_;
18439 		ValaCCodeFunctionCall* _tmp28_;
18440 		ValaTypeSymbol* _tmp29_;
18441 		ValaTypeSymbol* _tmp30_;
18442 		gchar* _tmp31_;
18443 		gchar* _tmp32_;
18444 		ValaCCodeIdentifier* _tmp33_;
18445 		ValaCCodeIdentifier* _tmp34_;
18446 		ValaCCodeFunctionCall* _tmp35_;
18447 		ValaCCodeIdentifier* _tmp36_;
18448 		ValaCCodeIdentifier* _tmp37_;
18449 		ValaCCodeFunction* _tmp38_;
18450 		ValaCCodeFunction* _tmp39_;
18451 		ValaCCodeFunctionCall* _tmp40_;
18452 		_tmp24_ = vala_ccode_identifier_new ("g_boxed_free");
18453 		_tmp25_ = _tmp24_;
18454 		_tmp26_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp25_);
18455 		_tmp27_ = _tmp26_;
18456 		_vala_ccode_node_unref0 (_tmp25_);
18457 		free_call = _tmp27_;
18458 		_tmp28_ = free_call;
18459 		_tmp29_ = vala_data_type_get_type_symbol (type);
18460 		_tmp30_ = _tmp29_;
18461 		_tmp31_ = vala_get_ccode_type_id ((ValaCodeNode*) _tmp30_);
18462 		_tmp32_ = _tmp31_;
18463 		_tmp33_ = vala_ccode_identifier_new (_tmp32_);
18464 		_tmp34_ = _tmp33_;
18465 		vala_ccode_function_call_add_argument (_tmp28_, (ValaCCodeExpression*) _tmp34_);
18466 		_vala_ccode_node_unref0 (_tmp34_);
18467 		_g_free0 (_tmp32_);
18468 		_tmp35_ = free_call;
18469 		_tmp36_ = vala_ccode_identifier_new ("self");
18470 		_tmp37_ = _tmp36_;
18471 		vala_ccode_function_call_add_argument (_tmp35_, (ValaCCodeExpression*) _tmp37_);
18472 		_vala_ccode_node_unref0 (_tmp37_);
18473 		_tmp38_ = vala_ccode_base_module_get_ccode (self);
18474 		_tmp39_ = _tmp38_;
18475 		_tmp40_ = free_call;
18476 		vala_ccode_function_add_expression (_tmp39_, (ValaCCodeExpression*) _tmp40_);
18477 		_vala_ccode_node_unref0 (free_call);
18478 	} else {
18479 		ValaStruct* st = NULL;
18480 		ValaTypeSymbol* _tmp41_;
18481 		ValaTypeSymbol* _tmp42_;
18482 		gboolean _tmp43_ = FALSE;
18483 		ValaStruct* _tmp44_;
18484 		ValaCCodeFunctionCall* free_call = NULL;
18485 		ValaCodeContext* _tmp61_;
18486 		ValaProfile _tmp62_;
18487 		ValaProfile _tmp63_;
18488 		ValaCCodeFunctionCall* _tmp72_;
18489 		ValaCCodeIdentifier* _tmp73_;
18490 		ValaCCodeIdentifier* _tmp74_;
18491 		ValaCCodeFunction* _tmp75_;
18492 		ValaCCodeFunction* _tmp76_;
18493 		ValaCCodeFunctionCall* _tmp77_;
18494 		_tmp41_ = vala_data_type_get_type_symbol (type);
18495 		_tmp42_ = _tmp41_;
18496 		st = G_TYPE_CHECK_INSTANCE_TYPE (_tmp42_, VALA_TYPE_STRUCT) ? ((ValaStruct*) _tmp42_) : NULL;
18497 		_tmp44_ = st;
18498 		if (_tmp44_ != NULL) {
18499 			ValaStruct* _tmp45_;
18500 			_tmp45_ = st;
18501 			_tmp43_ = vala_struct_is_disposable (_tmp45_);
18502 		} else {
18503 			_tmp43_ = FALSE;
18504 		}
18505 		if (_tmp43_) {
18506 			ValaStruct* _tmp46_;
18507 			ValaCCodeFunctionCall* destroy_call = NULL;
18508 			ValaStruct* _tmp48_;
18509 			gchar* _tmp49_;
18510 			gchar* _tmp50_;
18511 			ValaCCodeIdentifier* _tmp51_;
18512 			ValaCCodeIdentifier* _tmp52_;
18513 			ValaCCodeFunctionCall* _tmp53_;
18514 			ValaCCodeFunctionCall* _tmp54_;
18515 			ValaCCodeFunctionCall* _tmp55_;
18516 			ValaCCodeIdentifier* _tmp56_;
18517 			ValaCCodeIdentifier* _tmp57_;
18518 			ValaCCodeFunction* _tmp58_;
18519 			ValaCCodeFunction* _tmp59_;
18520 			ValaCCodeFunctionCall* _tmp60_;
18521 			_tmp46_ = st;
18522 			if (!vala_get_ccode_has_destroy_function (_tmp46_)) {
18523 				ValaStruct* _tmp47_;
18524 				_tmp47_ = st;
18525 				vala_ccode_base_module_generate_struct_destroy_function (self, _tmp47_);
18526 			}
18527 			_tmp48_ = st;
18528 			_tmp49_ = vala_get_ccode_destroy_function ((ValaTypeSymbol*) _tmp48_);
18529 			_tmp50_ = _tmp49_;
18530 			_tmp51_ = vala_ccode_identifier_new (_tmp50_);
18531 			_tmp52_ = _tmp51_;
18532 			_tmp53_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp52_);
18533 			_tmp54_ = _tmp53_;
18534 			_vala_ccode_node_unref0 (_tmp52_);
18535 			_g_free0 (_tmp50_);
18536 			destroy_call = _tmp54_;
18537 			_tmp55_ = destroy_call;
18538 			_tmp56_ = vala_ccode_identifier_new ("self");
18539 			_tmp57_ = _tmp56_;
18540 			vala_ccode_function_call_add_argument (_tmp55_, (ValaCCodeExpression*) _tmp57_);
18541 			_vala_ccode_node_unref0 (_tmp57_);
18542 			_tmp58_ = vala_ccode_base_module_get_ccode (self);
18543 			_tmp59_ = _tmp58_;
18544 			_tmp60_ = destroy_call;
18545 			vala_ccode_function_add_expression (_tmp59_, (ValaCCodeExpression*) _tmp60_);
18546 			_vala_ccode_node_unref0 (destroy_call);
18547 		}
18548 		_tmp61_ = self->priv->_context;
18549 		_tmp62_ = vala_code_context_get_profile (_tmp61_);
18550 		_tmp63_ = _tmp62_;
18551 		if (_tmp63_ == VALA_PROFILE_POSIX) {
18552 			ValaCCodeFile* _tmp64_;
18553 			ValaCCodeIdentifier* _tmp65_;
18554 			ValaCCodeIdentifier* _tmp66_;
18555 			ValaCCodeFunctionCall* _tmp67_;
18556 			_tmp64_ = self->cfile;
18557 			vala_ccode_file_add_include (_tmp64_, "stdlib.h", FALSE);
18558 			_tmp65_ = vala_ccode_identifier_new ("free");
18559 			_tmp66_ = _tmp65_;
18560 			_tmp67_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp66_);
18561 			_vala_ccode_node_unref0 (free_call);
18562 			free_call = _tmp67_;
18563 			_vala_ccode_node_unref0 (_tmp66_);
18564 		} else {
18565 			ValaCCodeFile* _tmp68_;
18566 			ValaCCodeIdentifier* _tmp69_;
18567 			ValaCCodeIdentifier* _tmp70_;
18568 			ValaCCodeFunctionCall* _tmp71_;
18569 			_tmp68_ = self->cfile;
18570 			vala_ccode_file_add_include (_tmp68_, "glib.h", FALSE);
18571 			_tmp69_ = vala_ccode_identifier_new ("g_free");
18572 			_tmp70_ = _tmp69_;
18573 			_tmp71_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp70_);
18574 			_vala_ccode_node_unref0 (free_call);
18575 			free_call = _tmp71_;
18576 			_vala_ccode_node_unref0 (_tmp70_);
18577 		}
18578 		_tmp72_ = free_call;
18579 		_tmp73_ = vala_ccode_identifier_new ("self");
18580 		_tmp74_ = _tmp73_;
18581 		vala_ccode_function_call_add_argument (_tmp72_, (ValaCCodeExpression*) _tmp74_);
18582 		_vala_ccode_node_unref0 (_tmp74_);
18583 		_tmp75_ = vala_ccode_base_module_get_ccode (self);
18584 		_tmp76_ = _tmp75_;
18585 		_tmp77_ = free_call;
18586 		vala_ccode_function_add_expression (_tmp76_, (ValaCCodeExpression*) _tmp77_);
18587 		_vala_ccode_node_unref0 (free_call);
18588 	}
18589 	vala_ccode_base_module_pop_function (self);
18590 	_tmp78_ = self->cfile;
18591 	_tmp79_ = function;
18592 	vala_ccode_file_add_function_declaration (_tmp78_, _tmp79_);
18593 	_tmp80_ = self->cfile;
18594 	_tmp81_ = function;
18595 	vala_ccode_file_add_function (_tmp80_, _tmp81_);
18596 	result = destroy_func;
18597 	_vala_ccode_node_unref0 (function);
18598 	return result;
18599 }
18600 
18601 ValaCCodeExpression*
vala_ccode_base_module_get_destroy0_func_expression(ValaCCodeBaseModule * self,ValaDataType * type,gboolean is_chainup)18602 vala_ccode_base_module_get_destroy0_func_expression (ValaCCodeBaseModule* self,
18603                                                      ValaDataType* type,
18604                                                      gboolean is_chainup)
18605 {
18606 	ValaCCodeExpression* element_destroy_func_expression = NULL;
18607 	ValaCCodeExpression* _tmp0_;
18608 	gboolean _tmp1_ = FALSE;
18609 	ValaCCodeExpression* result = NULL;
18610 	g_return_val_if_fail (self != NULL, NULL);
18611 	g_return_val_if_fail (type != NULL, NULL);
18612 	_tmp0_ = vala_ccode_base_module_get_destroy_func_expression (self, type, is_chainup);
18613 	element_destroy_func_expression = _tmp0_;
18614 	if (!G_TYPE_CHECK_INSTANCE_TYPE (type, VALA_TYPE_GENERIC_TYPE)) {
18615 		ValaCCodeExpression* _tmp2_;
18616 		_tmp2_ = element_destroy_func_expression;
18617 		_tmp1_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp2_, VALA_TYPE_CCODE_IDENTIFIER);
18618 	} else {
18619 		_tmp1_ = FALSE;
18620 	}
18621 	if (_tmp1_) {
18622 		ValaCCodeIdentifier* freeid = NULL;
18623 		ValaCCodeExpression* _tmp3_;
18624 		ValaCCodeIdentifier* _tmp4_;
18625 		gchar* free0_func = NULL;
18626 		ValaCCodeIdentifier* _tmp5_;
18627 		const gchar* _tmp6_;
18628 		const gchar* _tmp7_;
18629 		gchar* _tmp8_;
18630 		const gchar* _tmp9_;
18631 		const gchar* _tmp32_;
18632 		ValaCCodeIdentifier* _tmp33_;
18633 		_tmp3_ = element_destroy_func_expression;
18634 		_tmp4_ = _vala_ccode_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp3_, VALA_TYPE_CCODE_IDENTIFIER, ValaCCodeIdentifier));
18635 		freeid = _tmp4_;
18636 		_tmp5_ = freeid;
18637 		_tmp6_ = vala_ccode_identifier_get_name (_tmp5_);
18638 		_tmp7_ = _tmp6_;
18639 		_tmp8_ = g_strdup_printf ("_%s0_", _tmp7_);
18640 		free0_func = _tmp8_;
18641 		_tmp9_ = free0_func;
18642 		if (vala_ccode_base_module_add_wrapper (self, _tmp9_)) {
18643 			ValaCCodeFunction* function = NULL;
18644 			const gchar* _tmp10_;
18645 			ValaCCodeFunction* _tmp11_;
18646 			ValaCCodeFunction* _tmp12_;
18647 			ValaCCodeFunction* _tmp13_;
18648 			ValaDataType* _tmp14_;
18649 			gchar* _tmp15_;
18650 			gchar* _tmp16_;
18651 			ValaCCodeParameter* _tmp17_;
18652 			ValaCCodeParameter* _tmp18_;
18653 			ValaCCodeFunction* _tmp19_;
18654 			ValaCCodeFunction* _tmp20_;
18655 			ValaCCodeFunction* _tmp21_;
18656 			ValaCCodeIdentifier* _tmp22_;
18657 			ValaCCodeIdentifier* _tmp23_;
18658 			ValaGLibValue* _tmp24_;
18659 			ValaGLibValue* _tmp25_;
18660 			ValaCCodeExpression* _tmp26_;
18661 			ValaCCodeExpression* _tmp27_;
18662 			ValaCCodeFile* _tmp28_;
18663 			ValaCCodeFunction* _tmp29_;
18664 			ValaCCodeFile* _tmp30_;
18665 			ValaCCodeFunction* _tmp31_;
18666 			_tmp10_ = free0_func;
18667 			_tmp11_ = vala_ccode_function_new (_tmp10_, "void");
18668 			function = _tmp11_;
18669 			_tmp12_ = function;
18670 			vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp12_, VALA_CCODE_MODIFIERS_STATIC);
18671 			_tmp13_ = function;
18672 			_tmp14_ = self->pointer_type;
18673 			_tmp15_ = vala_get_ccode_name ((ValaCodeNode*) _tmp14_);
18674 			_tmp16_ = _tmp15_;
18675 			_tmp17_ = vala_ccode_parameter_new ("var", _tmp16_);
18676 			_tmp18_ = _tmp17_;
18677 			vala_ccode_function_add_parameter (_tmp13_, _tmp18_);
18678 			_vala_ccode_node_unref0 (_tmp18_);
18679 			_g_free0 (_tmp16_);
18680 			_tmp19_ = function;
18681 			vala_ccode_base_module_push_function (self, _tmp19_);
18682 			_tmp20_ = vala_ccode_base_module_get_ccode (self);
18683 			_tmp21_ = _tmp20_;
18684 			_tmp22_ = vala_ccode_identifier_new ("var");
18685 			_tmp23_ = _tmp22_;
18686 			_tmp24_ = vala_glib_value_new (type, (ValaCCodeExpression*) _tmp23_, TRUE);
18687 			_tmp25_ = _tmp24_;
18688 			_tmp26_ = vala_ccode_base_module_destroy_value (self, (ValaTargetValue*) _tmp25_, TRUE);
18689 			_tmp27_ = _tmp26_;
18690 			vala_ccode_function_add_expression (_tmp21_, _tmp27_);
18691 			_vala_ccode_node_unref0 (_tmp27_);
18692 			_vala_target_value_unref0 (_tmp25_);
18693 			_vala_ccode_node_unref0 (_tmp23_);
18694 			vala_ccode_base_module_pop_function (self);
18695 			_tmp28_ = self->cfile;
18696 			_tmp29_ = function;
18697 			vala_ccode_file_add_function_declaration (_tmp28_, _tmp29_);
18698 			_tmp30_ = self->cfile;
18699 			_tmp31_ = function;
18700 			vala_ccode_file_add_function (_tmp30_, _tmp31_);
18701 			_vala_ccode_node_unref0 (function);
18702 		}
18703 		_tmp32_ = free0_func;
18704 		_tmp33_ = vala_ccode_identifier_new (_tmp32_);
18705 		_vala_ccode_node_unref0 (element_destroy_func_expression);
18706 		element_destroy_func_expression = (ValaCCodeExpression*) _tmp33_;
18707 		_g_free0 (free0_func);
18708 		_vala_ccode_node_unref0 (freeid);
18709 	}
18710 	result = element_destroy_func_expression;
18711 	return result;
18712 }
18713 
18714 ValaCCodeExpression*
vala_ccode_base_module_get_destroy_func_expression(ValaCCodeBaseModule * self,ValaDataType * type,gboolean is_chainup)18715 vala_ccode_base_module_get_destroy_func_expression (ValaCCodeBaseModule* self,
18716                                                     ValaDataType* type,
18717                                                     gboolean is_chainup)
18718 {
18719 	gboolean _tmp0_ = FALSE;
18720 	ValaCodeContext* _tmp1_;
18721 	ValaProfile _tmp2_;
18722 	ValaProfile _tmp3_;
18723 	ValaCCodeExpression* result = NULL;
18724 	g_return_val_if_fail (self != NULL, NULL);
18725 	g_return_val_if_fail (type != NULL, NULL);
18726 	_tmp1_ = self->priv->_context;
18727 	_tmp2_ = vala_code_context_get_profile (_tmp1_);
18728 	_tmp3_ = _tmp2_;
18729 	if (_tmp3_ == VALA_PROFILE_GOBJECT) {
18730 		gboolean _tmp4_ = FALSE;
18731 		gboolean _tmp5_ = FALSE;
18732 		gboolean _tmp6_ = FALSE;
18733 		ValaTypeSymbol* _tmp7_;
18734 		ValaTypeSymbol* _tmp8_;
18735 		ValaClass* _tmp9_;
18736 		_tmp7_ = vala_data_type_get_type_symbol (type);
18737 		_tmp8_ = _tmp7_;
18738 		_tmp9_ = self->glist_type;
18739 		if (_tmp8_ == G_TYPE_CHECK_INSTANCE_CAST (_tmp9_, VALA_TYPE_TYPESYMBOL, ValaTypeSymbol)) {
18740 			_tmp6_ = TRUE;
18741 		} else {
18742 			ValaTypeSymbol* _tmp10_;
18743 			ValaTypeSymbol* _tmp11_;
18744 			ValaClass* _tmp12_;
18745 			_tmp10_ = vala_data_type_get_type_symbol (type);
18746 			_tmp11_ = _tmp10_;
18747 			_tmp12_ = self->gslist_type;
18748 			_tmp6_ = _tmp11_ == G_TYPE_CHECK_INSTANCE_CAST (_tmp12_, VALA_TYPE_TYPESYMBOL, ValaTypeSymbol);
18749 		}
18750 		if (_tmp6_) {
18751 			_tmp5_ = TRUE;
18752 		} else {
18753 			ValaTypeSymbol* _tmp13_;
18754 			ValaTypeSymbol* _tmp14_;
18755 			ValaClass* _tmp15_;
18756 			_tmp13_ = vala_data_type_get_type_symbol (type);
18757 			_tmp14_ = _tmp13_;
18758 			_tmp15_ = self->gnode_type;
18759 			_tmp5_ = _tmp14_ == G_TYPE_CHECK_INSTANCE_CAST (_tmp15_, VALA_TYPE_TYPESYMBOL, ValaTypeSymbol);
18760 		}
18761 		if (_tmp5_) {
18762 			_tmp4_ = TRUE;
18763 		} else {
18764 			ValaTypeSymbol* _tmp16_;
18765 			ValaTypeSymbol* _tmp17_;
18766 			ValaClass* _tmp18_;
18767 			_tmp16_ = vala_data_type_get_type_symbol (type);
18768 			_tmp17_ = _tmp16_;
18769 			_tmp18_ = self->gqueue_type;
18770 			_tmp4_ = _tmp17_ == G_TYPE_CHECK_INSTANCE_CAST (_tmp18_, VALA_TYPE_TYPESYMBOL, ValaTypeSymbol);
18771 		}
18772 		_tmp0_ = _tmp4_;
18773 	} else {
18774 		_tmp0_ = FALSE;
18775 	}
18776 	if (_tmp0_) {
18777 		gboolean elements_require_free = FALSE;
18778 		gboolean generic_elements = FALSE;
18779 		ValaCCodeExpression* element_destroy_func_expression = NULL;
18780 		elements_require_free = FALSE;
18781 		generic_elements = FALSE;
18782 		element_destroy_func_expression = NULL;
18783 		{
18784 			ValaList* _type_arg_list = NULL;
18785 			ValaList* _tmp19_;
18786 			ValaList* _tmp20_;
18787 			gint _type_arg_size = 0;
18788 			ValaList* _tmp21_;
18789 			gint _tmp22_;
18790 			gint _tmp23_;
18791 			gint _type_arg_index = 0;
18792 			_tmp19_ = vala_data_type_get_type_arguments (type);
18793 			_tmp20_ = _vala_iterable_ref0 (_tmp19_);
18794 			_type_arg_list = _tmp20_;
18795 			_tmp21_ = _type_arg_list;
18796 			_tmp22_ = vala_collection_get_size ((ValaCollection*) _tmp21_);
18797 			_tmp23_ = _tmp22_;
18798 			_type_arg_size = _tmp23_;
18799 			_type_arg_index = -1;
18800 			while (TRUE) {
18801 				gint _tmp24_;
18802 				gint _tmp25_;
18803 				ValaDataType* type_arg = NULL;
18804 				ValaList* _tmp26_;
18805 				gpointer _tmp27_;
18806 				ValaDataType* _tmp28_;
18807 				_type_arg_index = _type_arg_index + 1;
18808 				_tmp24_ = _type_arg_index;
18809 				_tmp25_ = _type_arg_size;
18810 				if (!(_tmp24_ < _tmp25_)) {
18811 					break;
18812 				}
18813 				_tmp26_ = _type_arg_list;
18814 				_tmp27_ = vala_list_get (_tmp26_, _type_arg_index);
18815 				type_arg = (ValaDataType*) _tmp27_;
18816 				_tmp28_ = type_arg;
18817 				elements_require_free = vala_ccode_base_module_requires_destroy (_tmp28_);
18818 				if (elements_require_free) {
18819 					ValaDataType* _tmp29_;
18820 					ValaCCodeExpression* _tmp30_;
18821 					ValaDataType* _tmp31_;
18822 					_tmp29_ = type_arg;
18823 					_tmp30_ = vala_ccode_base_module_get_destroy0_func_expression (self, _tmp29_, FALSE);
18824 					_vala_ccode_node_unref0 (element_destroy_func_expression);
18825 					element_destroy_func_expression = _tmp30_;
18826 					_tmp31_ = type_arg;
18827 					generic_elements = G_TYPE_CHECK_INSTANCE_TYPE (_tmp31_, VALA_TYPE_GENERIC_TYPE);
18828 				}
18829 				_vala_code_node_unref0 (type_arg);
18830 			}
18831 			_vala_iterable_unref0 (_type_arg_list);
18832 		}
18833 		if (elements_require_free) {
18834 			ValaCCodeExpression* cexpr = NULL;
18835 			gboolean _tmp32_ = FALSE;
18836 			ValaCCodeExpression* _tmp33_;
18837 			cexpr = NULL;
18838 			_tmp33_ = element_destroy_func_expression;
18839 			if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp33_, VALA_TYPE_CCODE_IDENTIFIER)) {
18840 				_tmp32_ = TRUE;
18841 			} else {
18842 				ValaCCodeExpression* _tmp34_;
18843 				_tmp34_ = element_destroy_func_expression;
18844 				_tmp32_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp34_, VALA_TYPE_CCODE_MEMBER_ACCESS);
18845 			}
18846 			if (_tmp32_) {
18847 				ValaCCodeIdentifier* _tmp35_ = NULL;
18848 				gchar* _tmp37_;
18849 				gchar* _tmp38_;
18850 				ValaCCodeIdentifier* _tmp39_;
18851 				if (generic_elements) {
18852 					_tmp35_ = NULL;
18853 				} else {
18854 					ValaCCodeExpression* _tmp36_;
18855 					_tmp36_ = element_destroy_func_expression;
18856 					_tmp35_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp36_, VALA_TYPE_CCODE_IDENTIFIER) ? ((ValaCCodeIdentifier*) _tmp36_) : NULL;
18857 				}
18858 				_tmp37_ = vala_ccode_base_module_generate_collection_free_wrapper (self, type, _tmp35_);
18859 				_tmp38_ = _tmp37_;
18860 				_tmp39_ = vala_ccode_identifier_new (_tmp38_);
18861 				_vala_ccode_node_unref0 (cexpr);
18862 				cexpr = (ValaCCodeExpression*) _tmp39_;
18863 				_g_free0 (_tmp38_);
18864 				if (generic_elements) {
18865 					ValaCCodeExpression* _tmp40_;
18866 					ValaCCodeFunctionCall* _tmp41_;
18867 					ValaCCodeExpression* _tmp42_;
18868 					ValaCCodeExpression* _tmp43_;
18869 					_tmp40_ = cexpr;
18870 					_tmp41_ = vala_ccode_function_call_new (_tmp40_);
18871 					_vala_ccode_node_unref0 (cexpr);
18872 					cexpr = (ValaCCodeExpression*) _tmp41_;
18873 					_tmp42_ = cexpr;
18874 					_tmp43_ = element_destroy_func_expression;
18875 					vala_ccode_function_call_add_argument (G_TYPE_CHECK_INSTANCE_CAST (_tmp42_, VALA_TYPE_CCODE_FUNCTION_CALL, ValaCCodeFunctionCall), _tmp43_);
18876 				}
18877 			} else {
18878 				vala_report_error (NULL, "internal error: No useable element_destroy_function found");
18879 			}
18880 			result = cexpr;
18881 			_vala_ccode_node_unref0 (element_destroy_func_expression);
18882 			return result;
18883 		} else {
18884 			ValaTypeSymbol* _tmp44_;
18885 			ValaTypeSymbol* _tmp45_;
18886 			gchar* _tmp46_;
18887 			gchar* _tmp47_;
18888 			ValaCCodeIdentifier* _tmp48_;
18889 			ValaCCodeExpression* _tmp49_;
18890 			_tmp44_ = vala_data_type_get_type_symbol (type);
18891 			_tmp45_ = _tmp44_;
18892 			_tmp46_ = vala_get_ccode_free_function (_tmp45_);
18893 			_tmp47_ = _tmp46_;
18894 			_tmp48_ = vala_ccode_identifier_new (_tmp47_);
18895 			_tmp49_ = (ValaCCodeExpression*) _tmp48_;
18896 			_g_free0 (_tmp47_);
18897 			result = _tmp49_;
18898 			_vala_ccode_node_unref0 (element_destroy_func_expression);
18899 			return result;
18900 		}
18901 		_vala_ccode_node_unref0 (element_destroy_func_expression);
18902 	} else {
18903 		if (G_TYPE_CHECK_INSTANCE_TYPE (type, VALA_TYPE_ERROR_TYPE)) {
18904 			ValaCCodeFile* _tmp50_;
18905 			ValaCCodeIdentifier* _tmp51_;
18906 			_tmp50_ = self->cfile;
18907 			vala_ccode_file_add_include (_tmp50_, "glib.h", FALSE);
18908 			_tmp51_ = vala_ccode_identifier_new ("g_error_free");
18909 			result = (ValaCCodeExpression*) _tmp51_;
18910 			return result;
18911 		} else {
18912 			ValaTypeSymbol* _tmp52_;
18913 			ValaTypeSymbol* _tmp53_;
18914 			_tmp52_ = vala_data_type_get_type_symbol (type);
18915 			_tmp53_ = _tmp52_;
18916 			if (_tmp53_ != NULL) {
18917 				gchar* unref_function = NULL;
18918 				const gchar* _tmp109_;
18919 				const gchar* _tmp111_;
18920 				ValaCCodeIdentifier* _tmp112_;
18921 				if (G_TYPE_CHECK_INSTANCE_TYPE (type, VALA_TYPE_REFERENCE_TYPE)) {
18922 					ValaTypeSymbol* _tmp54_;
18923 					ValaTypeSymbol* _tmp55_;
18924 					_tmp54_ = vala_data_type_get_type_symbol (type);
18925 					_tmp55_ = _tmp54_;
18926 					if (vala_is_reference_counting (_tmp55_)) {
18927 						ValaTypeSymbol* _tmp56_;
18928 						ValaTypeSymbol* _tmp57_;
18929 						gchar* _tmp58_;
18930 						gboolean _tmp59_ = FALSE;
18931 						ValaTypeSymbol* _tmp60_;
18932 						ValaTypeSymbol* _tmp61_;
18933 						_tmp56_ = vala_data_type_get_type_symbol (type);
18934 						_tmp57_ = _tmp56_;
18935 						_tmp58_ = vala_get_ccode_unref_function (G_TYPE_CHECK_INSTANCE_CAST (_tmp57_, VALA_TYPE_OBJECT_TYPE_SYMBOL, ValaObjectTypeSymbol));
18936 						_g_free0 (unref_function);
18937 						unref_function = _tmp58_;
18938 						_tmp60_ = vala_data_type_get_type_symbol (type);
18939 						_tmp61_ = _tmp60_;
18940 						if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp61_, VALA_TYPE_INTERFACE)) {
18941 							const gchar* _tmp62_;
18942 							_tmp62_ = unref_function;
18943 							_tmp59_ = _tmp62_ == NULL;
18944 						} else {
18945 							_tmp59_ = FALSE;
18946 						}
18947 						if (_tmp59_) {
18948 							ValaSourceReference* _tmp63_;
18949 							ValaSourceReference* _tmp64_;
18950 							ValaTypeSymbol* _tmp65_;
18951 							ValaTypeSymbol* _tmp66_;
18952 							gchar* _tmp67_;
18953 							gchar* _tmp68_;
18954 							gchar* _tmp69_;
18955 							gchar* _tmp70_;
18956 							_tmp63_ = vala_code_node_get_source_reference ((ValaCodeNode*) type);
18957 							_tmp64_ = _tmp63_;
18958 							_tmp65_ = vala_data_type_get_type_symbol (type);
18959 							_tmp66_ = _tmp65_;
18960 							_tmp67_ = vala_symbol_get_full_name ((ValaSymbol*) _tmp66_);
18961 							_tmp68_ = _tmp67_;
18962 							_tmp69_ = g_strdup_printf ("missing class prerequisite for interface `%s', add GLib.Object to inte" \
18963 "rface declaration if unsure", _tmp68_);
18964 							_tmp70_ = _tmp69_;
18965 							vala_report_error (_tmp64_, _tmp70_);
18966 							_g_free0 (_tmp70_);
18967 							_g_free0 (_tmp68_);
18968 							result = NULL;
18969 							_g_free0 (unref_function);
18970 							return result;
18971 						}
18972 					} else {
18973 						ValaTypeSymbol* _tmp71_;
18974 						ValaTypeSymbol* _tmp72_;
18975 						_tmp71_ = vala_data_type_get_type_symbol (type);
18976 						_tmp72_ = _tmp71_;
18977 						if (vala_get_ccode_is_gboxed (_tmp72_)) {
18978 							gchar* _tmp73_;
18979 							_tmp73_ = vala_ccode_base_module_generate_free_func_wrapper (self, type);
18980 							_g_free0 (unref_function);
18981 							unref_function = _tmp73_;
18982 						} else {
18983 							if (vala_is_free_function_address_of (type)) {
18984 								gchar* _tmp74_;
18985 								_tmp74_ = vala_ccode_base_module_generate_free_function_address_of_wrapper (self, type);
18986 								_g_free0 (unref_function);
18987 								unref_function = _tmp74_;
18988 							} else {
18989 								ValaTypeSymbol* _tmp75_;
18990 								ValaTypeSymbol* _tmp76_;
18991 								gchar* _tmp77_;
18992 								_tmp75_ = vala_data_type_get_type_symbol (type);
18993 								_tmp76_ = _tmp75_;
18994 								_tmp77_ = vala_get_ccode_free_function (_tmp76_);
18995 								_g_free0 (unref_function);
18996 								unref_function = _tmp77_;
18997 							}
18998 						}
18999 					}
19000 				} else {
19001 					gboolean _tmp78_;
19002 					gboolean _tmp79_;
19003 					_tmp78_ = vala_data_type_get_nullable (type);
19004 					_tmp79_ = _tmp78_;
19005 					if (_tmp79_) {
19006 						ValaTypeSymbol* _tmp80_;
19007 						ValaTypeSymbol* _tmp81_;
19008 						const gchar* _tmp86_;
19009 						_tmp80_ = vala_data_type_get_type_symbol (type);
19010 						_tmp81_ = _tmp80_;
19011 						if (vala_get_ccode_is_gboxed (_tmp81_)) {
19012 							gchar* _tmp82_;
19013 							_tmp82_ = vala_ccode_base_module_generate_free_func_wrapper (self, type);
19014 							_g_free0 (unref_function);
19015 							unref_function = _tmp82_;
19016 						} else {
19017 							ValaTypeSymbol* _tmp83_;
19018 							ValaTypeSymbol* _tmp84_;
19019 							gchar* _tmp85_;
19020 							_tmp83_ = vala_data_type_get_type_symbol (type);
19021 							_tmp84_ = _tmp83_;
19022 							_tmp85_ = vala_get_ccode_free_function (_tmp84_);
19023 							_g_free0 (unref_function);
19024 							unref_function = _tmp85_;
19025 						}
19026 						_tmp86_ = unref_function;
19027 						if (_tmp86_ == NULL) {
19028 							gboolean _tmp87_ = FALSE;
19029 							ValaTypeSymbol* _tmp88_;
19030 							ValaTypeSymbol* _tmp89_;
19031 							_tmp88_ = vala_data_type_get_type_symbol (type);
19032 							_tmp89_ = _tmp88_;
19033 							if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp89_, VALA_TYPE_STRUCT)) {
19034 								ValaTypeSymbol* _tmp90_;
19035 								ValaTypeSymbol* _tmp91_;
19036 								_tmp90_ = vala_data_type_get_type_symbol (type);
19037 								_tmp91_ = _tmp90_;
19038 								_tmp87_ = vala_struct_is_disposable (G_TYPE_CHECK_INSTANCE_CAST (_tmp91_, VALA_TYPE_STRUCT, ValaStruct));
19039 							} else {
19040 								_tmp87_ = FALSE;
19041 							}
19042 							if (_tmp87_) {
19043 								gchar* _tmp92_;
19044 								_tmp92_ = vala_ccode_base_module_generate_free_func_wrapper (self, type);
19045 								_g_free0 (unref_function);
19046 								unref_function = _tmp92_;
19047 							} else {
19048 								ValaCodeContext* _tmp93_;
19049 								ValaProfile _tmp94_;
19050 								ValaProfile _tmp95_;
19051 								_tmp93_ = self->priv->_context;
19052 								_tmp94_ = vala_code_context_get_profile (_tmp93_);
19053 								_tmp95_ = _tmp94_;
19054 								if (_tmp95_ == VALA_PROFILE_POSIX) {
19055 									ValaCCodeFile* _tmp96_;
19056 									gchar* _tmp97_;
19057 									_tmp96_ = self->cfile;
19058 									vala_ccode_file_add_include (_tmp96_, "stdlib.h", FALSE);
19059 									_tmp97_ = g_strdup ("free");
19060 									_g_free0 (unref_function);
19061 									unref_function = _tmp97_;
19062 								} else {
19063 									ValaCCodeFile* _tmp98_;
19064 									gchar* _tmp99_;
19065 									_tmp98_ = self->cfile;
19066 									vala_ccode_file_add_include (_tmp98_, "glib.h", FALSE);
19067 									_tmp99_ = g_strdup ("g_free");
19068 									_g_free0 (unref_function);
19069 									unref_function = _tmp99_;
19070 								}
19071 							}
19072 						}
19073 					} else {
19074 						if (G_TYPE_CHECK_INSTANCE_TYPE (type, VALA_TYPE_ENUM_VALUE_TYPE)) {
19075 							_g_free0 (unref_function);
19076 							unref_function = NULL;
19077 						} else {
19078 							ValaStruct* st = NULL;
19079 							ValaTypeSymbol* _tmp100_;
19080 							ValaTypeSymbol* _tmp101_;
19081 							gboolean _tmp102_ = FALSE;
19082 							ValaStruct* _tmp103_;
19083 							_tmp100_ = vala_data_type_get_type_symbol (type);
19084 							_tmp101_ = _tmp100_;
19085 							st = G_TYPE_CHECK_INSTANCE_TYPE (_tmp101_, VALA_TYPE_STRUCT) ? ((ValaStruct*) _tmp101_) : NULL;
19086 							_tmp103_ = st;
19087 							if (_tmp103_ != NULL) {
19088 								ValaStruct* _tmp104_;
19089 								_tmp104_ = st;
19090 								_tmp102_ = vala_struct_is_disposable (_tmp104_);
19091 							} else {
19092 								_tmp102_ = FALSE;
19093 							}
19094 							if (_tmp102_) {
19095 								ValaStruct* _tmp105_;
19096 								ValaStruct* _tmp107_;
19097 								gchar* _tmp108_;
19098 								_tmp105_ = st;
19099 								if (!vala_get_ccode_has_destroy_function (_tmp105_)) {
19100 									ValaStruct* _tmp106_;
19101 									_tmp106_ = st;
19102 									vala_ccode_base_module_generate_struct_destroy_function (self, _tmp106_);
19103 								}
19104 								_tmp107_ = st;
19105 								_tmp108_ = vala_get_ccode_destroy_function ((ValaTypeSymbol*) _tmp107_);
19106 								_g_free0 (unref_function);
19107 								unref_function = _tmp108_;
19108 							} else {
19109 								_g_free0 (unref_function);
19110 								unref_function = NULL;
19111 							}
19112 						}
19113 					}
19114 				}
19115 				_tmp109_ = unref_function;
19116 				if (_tmp109_ == NULL) {
19117 					ValaCCodeConstant* _tmp110_;
19118 					_tmp110_ = vala_ccode_constant_new ("NULL");
19119 					result = (ValaCCodeExpression*) _tmp110_;
19120 					_g_free0 (unref_function);
19121 					return result;
19122 				}
19123 				_tmp111_ = unref_function;
19124 				_tmp112_ = vala_ccode_identifier_new (_tmp111_);
19125 				result = (ValaCCodeExpression*) _tmp112_;
19126 				_g_free0 (unref_function);
19127 				return result;
19128 			} else {
19129 				if (G_TYPE_CHECK_INSTANCE_TYPE (type, VALA_TYPE_GENERIC_TYPE)) {
19130 					ValaTypeParameter* type_parameter = NULL;
19131 					ValaTypeParameter* _tmp113_;
19132 					ValaTypeParameter* _tmp114_;
19133 					ValaTypeParameter* _tmp115_;
19134 					gchar* func_name = NULL;
19135 					ValaTypeParameter* _tmp116_;
19136 					const gchar* _tmp117_;
19137 					const gchar* _tmp118_;
19138 					gchar* _tmp119_;
19139 					gchar* _tmp120_;
19140 					gchar* _tmp121_;
19141 					gchar* _tmp122_;
19142 					ValaTypeParameter* _tmp123_;
19143 					ValaSymbol* _tmp124_;
19144 					ValaSymbol* _tmp125_;
19145 					gboolean _tmp157_ = FALSE;
19146 					gboolean _tmp158_ = FALSE;
19147 					_tmp113_ = vala_generic_type_get_type_parameter (G_TYPE_CHECK_INSTANCE_CAST (type, VALA_TYPE_GENERIC_TYPE, ValaGenericType));
19148 					_tmp114_ = _tmp113_;
19149 					_tmp115_ = _vala_code_node_ref0 (_tmp114_);
19150 					type_parameter = _tmp115_;
19151 					_tmp116_ = type_parameter;
19152 					_tmp117_ = vala_symbol_get_name ((ValaSymbol*) _tmp116_);
19153 					_tmp118_ = _tmp117_;
19154 					_tmp119_ = g_ascii_strdown (_tmp118_, (gssize) -1);
19155 					_tmp120_ = _tmp119_;
19156 					_tmp121_ = g_strdup_printf ("%s_destroy_func", _tmp120_);
19157 					_tmp122_ = _tmp121_;
19158 					_g_free0 (_tmp120_);
19159 					func_name = _tmp122_;
19160 					_tmp123_ = type_parameter;
19161 					_tmp124_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp123_);
19162 					_tmp125_ = _tmp124_;
19163 					if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp125_, VALA_TYPE_INTERFACE)) {
19164 						ValaInterface* iface = NULL;
19165 						ValaTypeParameter* _tmp126_;
19166 						ValaSymbol* _tmp127_;
19167 						ValaSymbol* _tmp128_;
19168 						ValaInterface* _tmp129_;
19169 						ValaInterface* _tmp130_;
19170 						gchar* method_name = NULL;
19171 						ValaTypeParameter* _tmp131_;
19172 						const gchar* _tmp132_;
19173 						const gchar* _tmp133_;
19174 						gchar* _tmp134_;
19175 						gchar* _tmp135_;
19176 						gchar* _tmp136_;
19177 						gchar* _tmp137_;
19178 						ValaCCodeFunctionCall* cast_self = NULL;
19179 						ValaInterface* _tmp138_;
19180 						gchar* _tmp139_;
19181 						gchar* _tmp140_;
19182 						ValaCCodeIdentifier* _tmp141_;
19183 						ValaCCodeIdentifier* _tmp142_;
19184 						ValaCCodeFunctionCall* _tmp143_;
19185 						ValaCCodeFunctionCall* _tmp144_;
19186 						ValaCCodeFunctionCall* _tmp145_;
19187 						ValaCCodeExpression* _tmp146_;
19188 						ValaCCodeExpression* _tmp147_;
19189 						ValaCCodeFunctionCall* function_call = NULL;
19190 						ValaCCodeFunctionCall* _tmp148_;
19191 						const gchar* _tmp149_;
19192 						ValaCCodeMemberAccess* _tmp150_;
19193 						ValaCCodeMemberAccess* _tmp151_;
19194 						ValaCCodeFunctionCall* _tmp152_;
19195 						ValaCCodeFunctionCall* _tmp153_;
19196 						ValaCCodeFunctionCall* _tmp154_;
19197 						ValaCCodeExpression* _tmp155_;
19198 						ValaCCodeExpression* _tmp156_;
19199 						_tmp126_ = type_parameter;
19200 						_tmp127_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp126_);
19201 						_tmp128_ = _tmp127_;
19202 						_tmp129_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp128_, VALA_TYPE_INTERFACE, ValaInterface));
19203 						iface = _tmp129_;
19204 						_tmp130_ = iface;
19205 						vala_ccode_base_module_require_generic_accessors (self, _tmp130_);
19206 						_tmp131_ = type_parameter;
19207 						_tmp132_ = vala_symbol_get_name ((ValaSymbol*) _tmp131_);
19208 						_tmp133_ = _tmp132_;
19209 						_tmp134_ = g_ascii_strdown (_tmp133_, (gssize) -1);
19210 						_tmp135_ = _tmp134_;
19211 						_tmp136_ = g_strdup_printf ("get_%s_destroy_func", _tmp135_);
19212 						_tmp137_ = _tmp136_;
19213 						_g_free0 (_tmp135_);
19214 						method_name = _tmp137_;
19215 						_tmp138_ = iface;
19216 						_tmp139_ = vala_get_ccode_type_get_function ((ValaObjectTypeSymbol*) _tmp138_);
19217 						_tmp140_ = _tmp139_;
19218 						_tmp141_ = vala_ccode_identifier_new (_tmp140_);
19219 						_tmp142_ = _tmp141_;
19220 						_tmp143_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp142_);
19221 						_tmp144_ = _tmp143_;
19222 						_vala_ccode_node_unref0 (_tmp142_);
19223 						_g_free0 (_tmp140_);
19224 						cast_self = _tmp144_;
19225 						_tmp145_ = cast_self;
19226 						_tmp146_ = vala_ccode_base_module_get_this_cexpression (self);
19227 						_tmp147_ = _tmp146_;
19228 						vala_ccode_function_call_add_argument (_tmp145_, _tmp147_);
19229 						_vala_ccode_node_unref0 (_tmp147_);
19230 						_tmp148_ = cast_self;
19231 						_tmp149_ = method_name;
19232 						_tmp150_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) _tmp148_, _tmp149_);
19233 						_tmp151_ = _tmp150_;
19234 						_tmp152_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp151_);
19235 						_tmp153_ = _tmp152_;
19236 						_vala_ccode_node_unref0 (_tmp151_);
19237 						function_call = _tmp153_;
19238 						_tmp154_ = function_call;
19239 						_tmp155_ = vala_ccode_base_module_get_this_cexpression (self);
19240 						_tmp156_ = _tmp155_;
19241 						vala_ccode_function_call_add_argument (_tmp154_, _tmp156_);
19242 						_vala_ccode_node_unref0 (_tmp156_);
19243 						result = (ValaCCodeExpression*) function_call;
19244 						_vala_ccode_node_unref0 (cast_self);
19245 						_g_free0 (method_name);
19246 						_vala_code_node_unref0 (iface);
19247 						_g_free0 (func_name);
19248 						_vala_code_node_unref0 (type_parameter);
19249 						return result;
19250 					}
19251 					if (vala_ccode_base_module_is_in_generic_type (self, G_TYPE_CHECK_INSTANCE_CAST (type, VALA_TYPE_GENERIC_TYPE, ValaGenericType))) {
19252 						_tmp158_ = !is_chainup;
19253 					} else {
19254 						_tmp158_ = FALSE;
19255 					}
19256 					if (_tmp158_) {
19257 						gboolean _tmp159_;
19258 						gboolean _tmp160_;
19259 						_tmp159_ = vala_ccode_base_module_get_in_creation_method (self);
19260 						_tmp160_ = _tmp159_;
19261 						_tmp157_ = !_tmp160_;
19262 					} else {
19263 						_tmp157_ = FALSE;
19264 					}
19265 					if (_tmp157_) {
19266 						ValaCCodeExpression* _tmp161_;
19267 						ValaCCodeExpression* _tmp162_;
19268 						ValaCCodeMemberAccess* _tmp163_;
19269 						ValaCCodeMemberAccess* _tmp164_;
19270 						const gchar* _tmp165_;
19271 						ValaCCodeMemberAccess* _tmp166_;
19272 						ValaCCodeExpression* _tmp167_;
19273 						_tmp161_ = vala_ccode_base_module_get_this_cexpression (self);
19274 						_tmp162_ = _tmp161_;
19275 						_tmp163_ = vala_ccode_member_access_new_pointer (_tmp162_, "priv");
19276 						_tmp164_ = _tmp163_;
19277 						_tmp165_ = func_name;
19278 						_tmp166_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) _tmp164_, _tmp165_);
19279 						_tmp167_ = (ValaCCodeExpression*) _tmp166_;
19280 						_vala_ccode_node_unref0 (_tmp164_);
19281 						_vala_ccode_node_unref0 (_tmp162_);
19282 						result = _tmp167_;
19283 						_g_free0 (func_name);
19284 						_vala_code_node_unref0 (type_parameter);
19285 						return result;
19286 					} else {
19287 						const gchar* _tmp168_;
19288 						ValaCCodeExpression* _tmp169_;
19289 						_tmp168_ = func_name;
19290 						_tmp169_ = vala_ccode_base_module_get_variable_cexpression (self, _tmp168_);
19291 						result = _tmp169_;
19292 						_g_free0 (func_name);
19293 						_vala_code_node_unref0 (type_parameter);
19294 						return result;
19295 					}
19296 					_g_free0 (func_name);
19297 					_vala_code_node_unref0 (type_parameter);
19298 				} else {
19299 					if (G_TYPE_CHECK_INSTANCE_TYPE (type, VALA_TYPE_ARRAY_TYPE)) {
19300 						ValaCodeContext* _tmp170_;
19301 						ValaProfile _tmp171_;
19302 						ValaProfile _tmp172_;
19303 						_tmp170_ = self->priv->_context;
19304 						_tmp171_ = vala_code_context_get_profile (_tmp170_);
19305 						_tmp172_ = _tmp171_;
19306 						if (_tmp172_ == VALA_PROFILE_POSIX) {
19307 							ValaCCodeFile* _tmp173_;
19308 							ValaCCodeIdentifier* _tmp174_;
19309 							_tmp173_ = self->cfile;
19310 							vala_ccode_file_add_include (_tmp173_, "stdlib.h", FALSE);
19311 							_tmp174_ = vala_ccode_identifier_new ("free");
19312 							result = (ValaCCodeExpression*) _tmp174_;
19313 							return result;
19314 						} else {
19315 							ValaCCodeFile* _tmp175_;
19316 							ValaCCodeIdentifier* _tmp176_;
19317 							_tmp175_ = self->cfile;
19318 							vala_ccode_file_add_include (_tmp175_, "glib.h", FALSE);
19319 							_tmp176_ = vala_ccode_identifier_new ("g_free");
19320 							result = (ValaCCodeExpression*) _tmp176_;
19321 							return result;
19322 						}
19323 					} else {
19324 						if (G_TYPE_CHECK_INSTANCE_TYPE (type, VALA_TYPE_POINTER_TYPE)) {
19325 							ValaCodeContext* _tmp177_;
19326 							ValaProfile _tmp178_;
19327 							ValaProfile _tmp179_;
19328 							_tmp177_ = self->priv->_context;
19329 							_tmp178_ = vala_code_context_get_profile (_tmp177_);
19330 							_tmp179_ = _tmp178_;
19331 							if (_tmp179_ == VALA_PROFILE_POSIX) {
19332 								ValaCCodeFile* _tmp180_;
19333 								ValaCCodeIdentifier* _tmp181_;
19334 								_tmp180_ = self->cfile;
19335 								vala_ccode_file_add_include (_tmp180_, "stdlib.h", FALSE);
19336 								_tmp181_ = vala_ccode_identifier_new ("free");
19337 								result = (ValaCCodeExpression*) _tmp181_;
19338 								return result;
19339 							} else {
19340 								ValaCCodeFile* _tmp182_;
19341 								ValaCCodeIdentifier* _tmp183_;
19342 								_tmp182_ = self->cfile;
19343 								vala_ccode_file_add_include (_tmp182_, "glib.h", FALSE);
19344 								_tmp183_ = vala_ccode_identifier_new ("g_free");
19345 								result = (ValaCCodeExpression*) _tmp183_;
19346 								return result;
19347 							}
19348 						} else {
19349 							ValaCCodeConstant* _tmp184_;
19350 							_tmp184_ = vala_ccode_constant_new ("NULL");
19351 							result = (ValaCCodeExpression*) _tmp184_;
19352 							return result;
19353 						}
19354 					}
19355 				}
19356 			}
19357 		}
19358 	}
19359 }
19360 
19361 static gchar*
vala_ccode_base_module_generate_collection_free_wrapper(ValaCCodeBaseModule * self,ValaDataType * collection_type,ValaCCodeIdentifier * element_destroy_func_expression)19362 vala_ccode_base_module_generate_collection_free_wrapper (ValaCCodeBaseModule* self,
19363                                                          ValaDataType* collection_type,
19364                                                          ValaCCodeIdentifier* element_destroy_func_expression)
19365 {
19366 	gchar* destroy_func = NULL;
19367 	gchar* destroy_func_wrapper = NULL;
19368 	ValaTypeSymbol* _tmp8_;
19369 	ValaTypeSymbol* _tmp9_;
19370 	ValaClass* _tmp10_;
19371 	gchar* result = NULL;
19372 	g_return_val_if_fail (self != NULL, NULL);
19373 	g_return_val_if_fail (collection_type != NULL, NULL);
19374 	destroy_func_wrapper = NULL;
19375 	if (element_destroy_func_expression != NULL) {
19376 		ValaTypeSymbol* _tmp0_;
19377 		ValaTypeSymbol* _tmp1_;
19378 		gchar* _tmp2_;
19379 		gchar* _tmp3_;
19380 		const gchar* _tmp4_;
19381 		const gchar* _tmp5_;
19382 		gchar* _tmp6_;
19383 		const gchar* _tmp7_;
19384 		_tmp0_ = vala_data_type_get_type_symbol (collection_type);
19385 		_tmp1_ = _tmp0_;
19386 		_tmp2_ = vala_get_ccode_free_function (_tmp1_);
19387 		_tmp3_ = _tmp2_;
19388 		_tmp4_ = vala_ccode_identifier_get_name (element_destroy_func_expression);
19389 		_tmp5_ = _tmp4_;
19390 		_tmp6_ = g_strdup_printf ("_%s_%s", _tmp3_, _tmp5_);
19391 		_g_free0 (destroy_func_wrapper);
19392 		destroy_func_wrapper = _tmp6_;
19393 		_g_free0 (_tmp3_);
19394 		_tmp7_ = destroy_func_wrapper;
19395 		if (!vala_ccode_base_module_add_wrapper (self, _tmp7_)) {
19396 			result = destroy_func_wrapper;
19397 			_g_free0 (destroy_func);
19398 			return result;
19399 		}
19400 	}
19401 	_tmp8_ = vala_data_type_get_type_symbol (collection_type);
19402 	_tmp9_ = _tmp8_;
19403 	_tmp10_ = self->gnode_type;
19404 	if (_tmp9_ == G_TYPE_CHECK_INSTANCE_CAST (_tmp10_, VALA_TYPE_TYPESYMBOL, ValaTypeSymbol)) {
19405 		gchar* _tmp11_;
19406 		const gchar* _tmp12_;
19407 		ValaCCodeFunction* function = NULL;
19408 		const gchar* _tmp13_;
19409 		ValaCCodeFunction* _tmp14_;
19410 		ValaCCodeFunction* _tmp15_;
19411 		gchar* _tmp16_;
19412 		gchar* _tmp17_;
19413 		ValaCCodeParameter* _tmp18_;
19414 		ValaCCodeParameter* _tmp19_;
19415 		ValaCCodeFunction* _tmp20_;
19416 		ValaCCodeParameter* _tmp21_;
19417 		ValaCCodeParameter* _tmp22_;
19418 		ValaCCodeFunction* _tmp23_;
19419 		ValaCCodeFunctionCall* element_free_call = NULL;
19420 		gchar* destroy_node_func = NULL;
19421 		const gchar* _tmp24_;
19422 		gchar* _tmp25_;
19423 		ValaCCodeFunction* wrapper = NULL;
19424 		const gchar* _tmp26_;
19425 		ValaDataType* _tmp27_;
19426 		gchar* _tmp28_;
19427 		gchar* _tmp29_;
19428 		ValaCCodeFunction* _tmp30_;
19429 		ValaCCodeFunction* _tmp31_;
19430 		ValaCCodeFunction* _tmp32_;
19431 		ValaCCodeFunction* _tmp33_;
19432 		gchar* _tmp34_;
19433 		gchar* _tmp35_;
19434 		ValaCCodeParameter* _tmp36_;
19435 		ValaCCodeParameter* _tmp37_;
19436 		ValaCCodeFunction* _tmp38_;
19437 		ValaCCodeParameter* _tmp39_;
19438 		ValaCCodeParameter* _tmp40_;
19439 		ValaCCodeFunction* _tmp41_;
19440 		ValaCCodeFunctionCall* free_call = NULL;
19441 		ValaCCodeIdentifier* _tmp42_;
19442 		ValaCCodeIdentifier* _tmp43_;
19443 		ValaCCodeFunctionCall* _tmp44_;
19444 		ValaCCodeFunctionCall* _tmp45_;
19445 		ValaCCodeFunctionCall* _tmp46_;
19446 		ValaCCodeIdentifier* _tmp47_;
19447 		ValaCCodeIdentifier* _tmp48_;
19448 		ValaCCodeMemberAccess* _tmp49_;
19449 		ValaCCodeMemberAccess* _tmp50_;
19450 		ValaCCodeBinaryExpression* data_isnull = NULL;
19451 		ValaCCodeIdentifier* _tmp51_;
19452 		ValaCCodeIdentifier* _tmp52_;
19453 		ValaCCodeMemberAccess* _tmp53_;
19454 		ValaCCodeMemberAccess* _tmp54_;
19455 		ValaCCodeConstant* _tmp55_;
19456 		ValaCCodeConstant* _tmp56_;
19457 		ValaCCodeBinaryExpression* _tmp57_;
19458 		ValaCCodeBinaryExpression* _tmp58_;
19459 		ValaCCodeCommaExpression* ccomma_data = NULL;
19460 		ValaCCodeCommaExpression* _tmp59_;
19461 		ValaCCodeCommaExpression* _tmp60_;
19462 		ValaCCodeBinaryExpression* _tmp61_;
19463 		ValaCCodeConstant* _tmp62_;
19464 		ValaCCodeConstant* _tmp63_;
19465 		ValaCCodeFunctionCall* _tmp64_;
19466 		ValaCCodeConditionalExpression* _tmp65_;
19467 		ValaCCodeConditionalExpression* _tmp66_;
19468 		ValaCCodeFunction* _tmp67_;
19469 		ValaCCodeFunction* _tmp68_;
19470 		ValaCCodeCommaExpression* _tmp69_;
19471 		ValaCCodeFunction* _tmp70_;
19472 		ValaCCodeFunction* _tmp71_;
19473 		ValaCCodeConstant* _tmp72_;
19474 		ValaCCodeConstant* _tmp73_;
19475 		ValaCCodeFile* _tmp74_;
19476 		ValaCCodeFunction* _tmp75_;
19477 		ValaCCodeFile* _tmp76_;
19478 		ValaCCodeFunction* _tmp77_;
19479 		ValaCCodeIdentifier* _tmp78_;
19480 		ValaCCodeIdentifier* _tmp79_;
19481 		ValaCCodeFunctionCall* _tmp80_;
19482 		ValaCCodeFunctionCall* _tmp81_;
19483 		ValaCCodeIdentifier* _tmp82_;
19484 		ValaCCodeIdentifier* _tmp83_;
19485 		ValaCCodeFunctionCall* _tmp84_;
19486 		ValaCCodeConstant* _tmp85_;
19487 		ValaCCodeConstant* _tmp86_;
19488 		ValaCCodeFunctionCall* _tmp87_;
19489 		ValaCCodeConstant* _tmp88_;
19490 		ValaCCodeConstant* _tmp89_;
19491 		ValaCCodeFunctionCall* _tmp90_;
19492 		ValaCCodeConstant* _tmp91_;
19493 		ValaCCodeConstant* _tmp92_;
19494 		ValaCCodeFunctionCall* _tmp93_;
19495 		const gchar* _tmp94_;
19496 		ValaCCodeIdentifier* _tmp95_;
19497 		ValaCCodeIdentifier* _tmp96_;
19498 		ValaCCodeCastExpression* _tmp97_;
19499 		ValaCCodeCastExpression* _tmp98_;
19500 		ValaCCodeFunctionCall* _tmp99_;
19501 		ValaCCodeIdentifier* _tmp100_;
19502 		ValaCCodeIdentifier* _tmp101_;
19503 		ValaCCodeBinaryExpression* free_func_isnull = NULL;
19504 		ValaCCodeIdentifier* _tmp102_;
19505 		ValaCCodeIdentifier* _tmp103_;
19506 		ValaCCodeConstant* _tmp104_;
19507 		ValaCCodeConstant* _tmp105_;
19508 		ValaCCodeBinaryExpression* _tmp106_;
19509 		ValaCCodeBinaryExpression* _tmp107_;
19510 		ValaCCodeCommaExpression* ccomma = NULL;
19511 		ValaCCodeCommaExpression* _tmp108_;
19512 		ValaCCodeCommaExpression* _tmp109_;
19513 		ValaCCodeBinaryExpression* _tmp110_;
19514 		ValaCCodeConstant* _tmp111_;
19515 		ValaCCodeConstant* _tmp112_;
19516 		ValaCCodeFunctionCall* _tmp113_;
19517 		ValaCCodeConditionalExpression* _tmp114_;
19518 		ValaCCodeConditionalExpression* _tmp115_;
19519 		ValaCCodeFunction* _tmp116_;
19520 		ValaCCodeFunction* _tmp117_;
19521 		ValaCCodeCommaExpression* _tmp118_;
19522 		ValaCCodeFunctionCall* cfreecall = NULL;
19523 		ValaClass* _tmp119_;
19524 		gchar* _tmp120_;
19525 		gchar* _tmp121_;
19526 		ValaCCodeIdentifier* _tmp122_;
19527 		ValaCCodeIdentifier* _tmp123_;
19528 		ValaCCodeFunctionCall* _tmp124_;
19529 		ValaCCodeFunctionCall* _tmp125_;
19530 		ValaCCodeFunctionCall* _tmp126_;
19531 		ValaCCodeIdentifier* _tmp127_;
19532 		ValaCCodeIdentifier* _tmp128_;
19533 		ValaCCodeFunction* _tmp129_;
19534 		ValaCCodeFunction* _tmp130_;
19535 		ValaCCodeFunctionCall* _tmp131_;
19536 		ValaCCodeFunction* _tmp132_;
19537 		ValaCCodeFile* _tmp133_;
19538 		ValaCCodeFunction* _tmp134_;
19539 		ValaCCodeFile* _tmp135_;
19540 		ValaCCodeFunction* _tmp136_;
19541 		_tmp11_ = g_strdup ("_g_node_free_all");
19542 		_g_free0 (destroy_func);
19543 		destroy_func = _tmp11_;
19544 		_tmp12_ = destroy_func;
19545 		if (!vala_ccode_base_module_add_wrapper (self, _tmp12_)) {
19546 			result = destroy_func;
19547 			_g_free0 (destroy_func_wrapper);
19548 			return result;
19549 		}
19550 		_tmp13_ = destroy_func;
19551 		_tmp14_ = vala_ccode_function_new (_tmp13_, "void");
19552 		function = _tmp14_;
19553 		_tmp15_ = function;
19554 		_tmp16_ = vala_get_ccode_name ((ValaCodeNode*) collection_type);
19555 		_tmp17_ = _tmp16_;
19556 		_tmp18_ = vala_ccode_parameter_new ("self", _tmp17_);
19557 		_tmp19_ = _tmp18_;
19558 		vala_ccode_function_add_parameter (_tmp15_, _tmp19_);
19559 		_vala_ccode_node_unref0 (_tmp19_);
19560 		_g_free0 (_tmp17_);
19561 		_tmp20_ = function;
19562 		_tmp21_ = vala_ccode_parameter_new ("free_func", "GDestroyNotify");
19563 		_tmp22_ = _tmp21_;
19564 		vala_ccode_function_add_parameter (_tmp20_, _tmp22_);
19565 		_vala_ccode_node_unref0 (_tmp22_);
19566 		_tmp23_ = function;
19567 		vala_ccode_base_module_push_function (self, _tmp23_);
19568 		_tmp24_ = destroy_func;
19569 		_tmp25_ = g_strdup_printf ("%s_node", _tmp24_);
19570 		destroy_node_func = _tmp25_;
19571 		_tmp26_ = destroy_node_func;
19572 		_tmp27_ = self->bool_type;
19573 		_tmp28_ = vala_get_ccode_name ((ValaCodeNode*) _tmp27_);
19574 		_tmp29_ = _tmp28_;
19575 		_tmp30_ = vala_ccode_function_new (_tmp26_, _tmp29_);
19576 		_tmp31_ = _tmp30_;
19577 		_g_free0 (_tmp29_);
19578 		wrapper = _tmp31_;
19579 		_tmp32_ = wrapper;
19580 		vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp32_, VALA_CCODE_MODIFIERS_STATIC);
19581 		_tmp33_ = wrapper;
19582 		_tmp34_ = vala_get_ccode_name ((ValaCodeNode*) collection_type);
19583 		_tmp35_ = _tmp34_;
19584 		_tmp36_ = vala_ccode_parameter_new ("node", _tmp35_);
19585 		_tmp37_ = _tmp36_;
19586 		vala_ccode_function_add_parameter (_tmp33_, _tmp37_);
19587 		_vala_ccode_node_unref0 (_tmp37_);
19588 		_g_free0 (_tmp35_);
19589 		_tmp38_ = wrapper;
19590 		_tmp39_ = vala_ccode_parameter_new ("free_func", "GDestroyNotify");
19591 		_tmp40_ = _tmp39_;
19592 		vala_ccode_function_add_parameter (_tmp38_, _tmp40_);
19593 		_vala_ccode_node_unref0 (_tmp40_);
19594 		_tmp41_ = wrapper;
19595 		vala_ccode_base_module_push_function (self, _tmp41_);
19596 		_tmp42_ = vala_ccode_identifier_new ("free_func");
19597 		_tmp43_ = _tmp42_;
19598 		_tmp44_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp43_);
19599 		_tmp45_ = _tmp44_;
19600 		_vala_ccode_node_unref0 (_tmp43_);
19601 		free_call = _tmp45_;
19602 		_tmp46_ = free_call;
19603 		_tmp47_ = vala_ccode_identifier_new ("node");
19604 		_tmp48_ = _tmp47_;
19605 		_tmp49_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) _tmp48_, "data");
19606 		_tmp50_ = _tmp49_;
19607 		vala_ccode_function_call_add_argument (_tmp46_, (ValaCCodeExpression*) _tmp50_);
19608 		_vala_ccode_node_unref0 (_tmp50_);
19609 		_vala_ccode_node_unref0 (_tmp48_);
19610 		_tmp51_ = vala_ccode_identifier_new ("node");
19611 		_tmp52_ = _tmp51_;
19612 		_tmp53_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) _tmp52_, "data");
19613 		_tmp54_ = _tmp53_;
19614 		_tmp55_ = vala_ccode_constant_new ("NULL");
19615 		_tmp56_ = _tmp55_;
19616 		_tmp57_ = vala_ccode_binary_expression_new (VALA_CCODE_BINARY_OPERATOR_EQUALITY, (ValaCCodeExpression*) _tmp54_, (ValaCCodeExpression*) _tmp56_);
19617 		_tmp58_ = _tmp57_;
19618 		_vala_ccode_node_unref0 (_tmp56_);
19619 		_vala_ccode_node_unref0 (_tmp54_);
19620 		_vala_ccode_node_unref0 (_tmp52_);
19621 		data_isnull = _tmp58_;
19622 		_tmp59_ = vala_ccode_comma_expression_new ();
19623 		ccomma_data = _tmp59_;
19624 		_tmp60_ = ccomma_data;
19625 		_tmp61_ = data_isnull;
19626 		_tmp62_ = vala_ccode_constant_new ("NULL");
19627 		_tmp63_ = _tmp62_;
19628 		_tmp64_ = free_call;
19629 		_tmp65_ = vala_ccode_conditional_expression_new ((ValaCCodeExpression*) _tmp61_, (ValaCCodeExpression*) _tmp63_, (ValaCCodeExpression*) _tmp64_);
19630 		_tmp66_ = _tmp65_;
19631 		vala_ccode_comma_expression_append_expression (_tmp60_, (ValaCCodeExpression*) _tmp66_);
19632 		_vala_ccode_node_unref0 (_tmp66_);
19633 		_vala_ccode_node_unref0 (_tmp63_);
19634 		_tmp67_ = vala_ccode_base_module_get_ccode (self);
19635 		_tmp68_ = _tmp67_;
19636 		_tmp69_ = ccomma_data;
19637 		vala_ccode_function_add_expression (_tmp68_, (ValaCCodeExpression*) _tmp69_);
19638 		_tmp70_ = vala_ccode_base_module_get_ccode (self);
19639 		_tmp71_ = _tmp70_;
19640 		_tmp72_ = vala_ccode_constant_new ("FALSE");
19641 		_tmp73_ = _tmp72_;
19642 		vala_ccode_function_add_return (_tmp71_, (ValaCCodeExpression*) _tmp73_);
19643 		_vala_ccode_node_unref0 (_tmp73_);
19644 		vala_ccode_base_module_pop_function (self);
19645 		_tmp74_ = self->cfile;
19646 		_tmp75_ = wrapper;
19647 		vala_ccode_file_add_function_declaration (_tmp74_, _tmp75_);
19648 		_tmp76_ = self->cfile;
19649 		_tmp77_ = wrapper;
19650 		vala_ccode_file_add_function (_tmp76_, _tmp77_);
19651 		_tmp78_ = vala_ccode_identifier_new ("g_node_traverse");
19652 		_tmp79_ = _tmp78_;
19653 		_tmp80_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp79_);
19654 		_vala_ccode_node_unref0 (element_free_call);
19655 		element_free_call = _tmp80_;
19656 		_vala_ccode_node_unref0 (_tmp79_);
19657 		_tmp81_ = element_free_call;
19658 		_tmp82_ = vala_ccode_identifier_new ("self");
19659 		_tmp83_ = _tmp82_;
19660 		vala_ccode_function_call_add_argument (_tmp81_, (ValaCCodeExpression*) _tmp83_);
19661 		_vala_ccode_node_unref0 (_tmp83_);
19662 		_tmp84_ = element_free_call;
19663 		_tmp85_ = vala_ccode_constant_new ("G_POST_ORDER");
19664 		_tmp86_ = _tmp85_;
19665 		vala_ccode_function_call_add_argument (_tmp84_, (ValaCCodeExpression*) _tmp86_);
19666 		_vala_ccode_node_unref0 (_tmp86_);
19667 		_tmp87_ = element_free_call;
19668 		_tmp88_ = vala_ccode_constant_new ("G_TRAVERSE_ALL");
19669 		_tmp89_ = _tmp88_;
19670 		vala_ccode_function_call_add_argument (_tmp87_, (ValaCCodeExpression*) _tmp89_);
19671 		_vala_ccode_node_unref0 (_tmp89_);
19672 		_tmp90_ = element_free_call;
19673 		_tmp91_ = vala_ccode_constant_new ("-1");
19674 		_tmp92_ = _tmp91_;
19675 		vala_ccode_function_call_add_argument (_tmp90_, (ValaCCodeExpression*) _tmp92_);
19676 		_vala_ccode_node_unref0 (_tmp92_);
19677 		_tmp93_ = element_free_call;
19678 		_tmp94_ = destroy_node_func;
19679 		_tmp95_ = vala_ccode_identifier_new (_tmp94_);
19680 		_tmp96_ = _tmp95_;
19681 		_tmp97_ = vala_ccode_cast_expression_new ((ValaCCodeExpression*) _tmp96_, "GNodeTraverseFunc");
19682 		_tmp98_ = _tmp97_;
19683 		vala_ccode_function_call_add_argument (_tmp93_, (ValaCCodeExpression*) _tmp98_);
19684 		_vala_ccode_node_unref0 (_tmp98_);
19685 		_vala_ccode_node_unref0 (_tmp96_);
19686 		_tmp99_ = element_free_call;
19687 		_tmp100_ = vala_ccode_identifier_new ("free_func");
19688 		_tmp101_ = _tmp100_;
19689 		vala_ccode_function_call_add_argument (_tmp99_, (ValaCCodeExpression*) _tmp101_);
19690 		_vala_ccode_node_unref0 (_tmp101_);
19691 		_tmp102_ = vala_ccode_identifier_new ("free_func");
19692 		_tmp103_ = _tmp102_;
19693 		_tmp104_ = vala_ccode_constant_new ("NULL");
19694 		_tmp105_ = _tmp104_;
19695 		_tmp106_ = vala_ccode_binary_expression_new (VALA_CCODE_BINARY_OPERATOR_EQUALITY, (ValaCCodeExpression*) _tmp103_, (ValaCCodeExpression*) _tmp105_);
19696 		_tmp107_ = _tmp106_;
19697 		_vala_ccode_node_unref0 (_tmp105_);
19698 		_vala_ccode_node_unref0 (_tmp103_);
19699 		free_func_isnull = _tmp107_;
19700 		_tmp108_ = vala_ccode_comma_expression_new ();
19701 		ccomma = _tmp108_;
19702 		_tmp109_ = ccomma;
19703 		_tmp110_ = free_func_isnull;
19704 		_tmp111_ = vala_ccode_constant_new ("NULL");
19705 		_tmp112_ = _tmp111_;
19706 		_tmp113_ = element_free_call;
19707 		_tmp114_ = vala_ccode_conditional_expression_new ((ValaCCodeExpression*) _tmp110_, (ValaCCodeExpression*) _tmp112_, (ValaCCodeExpression*) _tmp113_);
19708 		_tmp115_ = _tmp114_;
19709 		vala_ccode_comma_expression_append_expression (_tmp109_, (ValaCCodeExpression*) _tmp115_);
19710 		_vala_ccode_node_unref0 (_tmp115_);
19711 		_vala_ccode_node_unref0 (_tmp112_);
19712 		_tmp116_ = vala_ccode_base_module_get_ccode (self);
19713 		_tmp117_ = _tmp116_;
19714 		_tmp118_ = ccomma;
19715 		vala_ccode_function_add_expression (_tmp117_, (ValaCCodeExpression*) _tmp118_);
19716 		_tmp119_ = self->gnode_type;
19717 		_tmp120_ = vala_get_ccode_free_function ((ValaTypeSymbol*) _tmp119_);
19718 		_tmp121_ = _tmp120_;
19719 		_tmp122_ = vala_ccode_identifier_new (_tmp121_);
19720 		_tmp123_ = _tmp122_;
19721 		_tmp124_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp123_);
19722 		_tmp125_ = _tmp124_;
19723 		_vala_ccode_node_unref0 (_tmp123_);
19724 		_g_free0 (_tmp121_);
19725 		cfreecall = _tmp125_;
19726 		_tmp126_ = cfreecall;
19727 		_tmp127_ = vala_ccode_identifier_new ("self");
19728 		_tmp128_ = _tmp127_;
19729 		vala_ccode_function_call_add_argument (_tmp126_, (ValaCCodeExpression*) _tmp128_);
19730 		_vala_ccode_node_unref0 (_tmp128_);
19731 		_tmp129_ = vala_ccode_base_module_get_ccode (self);
19732 		_tmp130_ = _tmp129_;
19733 		_tmp131_ = cfreecall;
19734 		vala_ccode_function_add_expression (_tmp130_, (ValaCCodeExpression*) _tmp131_);
19735 		_tmp132_ = function;
19736 		vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp132_, VALA_CCODE_MODIFIERS_STATIC);
19737 		vala_ccode_base_module_pop_function (self);
19738 		_tmp133_ = self->cfile;
19739 		_tmp134_ = function;
19740 		vala_ccode_file_add_function_declaration (_tmp133_, _tmp134_);
19741 		_tmp135_ = self->cfile;
19742 		_tmp136_ = function;
19743 		vala_ccode_file_add_function (_tmp135_, _tmp136_);
19744 		_vala_ccode_node_unref0 (cfreecall);
19745 		_vala_ccode_node_unref0 (ccomma);
19746 		_vala_ccode_node_unref0 (free_func_isnull);
19747 		_vala_ccode_node_unref0 (ccomma_data);
19748 		_vala_ccode_node_unref0 (data_isnull);
19749 		_vala_ccode_node_unref0 (free_call);
19750 		_vala_ccode_node_unref0 (wrapper);
19751 		_g_free0 (destroy_node_func);
19752 		_vala_ccode_node_unref0 (element_free_call);
19753 		_vala_ccode_node_unref0 (function);
19754 	} else {
19755 		ValaTypeSymbol* _tmp137_;
19756 		ValaTypeSymbol* _tmp138_;
19757 		ValaClass* _tmp139_;
19758 		_tmp137_ = vala_data_type_get_type_symbol (collection_type);
19759 		_tmp138_ = _tmp137_;
19760 		_tmp139_ = self->glist_type;
19761 		if (_tmp138_ == G_TYPE_CHECK_INSTANCE_CAST (_tmp139_, VALA_TYPE_TYPESYMBOL, ValaTypeSymbol)) {
19762 			gchar* _tmp140_;
19763 			_tmp140_ = g_strdup ("g_list_free_full");
19764 			_g_free0 (destroy_func);
19765 			destroy_func = _tmp140_;
19766 		} else {
19767 			ValaTypeSymbol* _tmp141_;
19768 			ValaTypeSymbol* _tmp142_;
19769 			ValaClass* _tmp143_;
19770 			_tmp141_ = vala_data_type_get_type_symbol (collection_type);
19771 			_tmp142_ = _tmp141_;
19772 			_tmp143_ = self->gslist_type;
19773 			if (_tmp142_ == G_TYPE_CHECK_INSTANCE_CAST (_tmp143_, VALA_TYPE_TYPESYMBOL, ValaTypeSymbol)) {
19774 				gchar* _tmp144_;
19775 				_tmp144_ = g_strdup ("g_slist_free_full");
19776 				_g_free0 (destroy_func);
19777 				destroy_func = _tmp144_;
19778 			} else {
19779 				ValaTypeSymbol* _tmp145_;
19780 				ValaTypeSymbol* _tmp146_;
19781 				ValaClass* _tmp147_;
19782 				_tmp145_ = vala_data_type_get_type_symbol (collection_type);
19783 				_tmp146_ = _tmp145_;
19784 				_tmp147_ = self->gqueue_type;
19785 				if (_tmp146_ == G_TYPE_CHECK_INSTANCE_CAST (_tmp147_, VALA_TYPE_TYPESYMBOL, ValaTypeSymbol)) {
19786 					gchar* _tmp148_;
19787 					_tmp148_ = g_strdup ("g_queue_free_full");
19788 					_g_free0 (destroy_func);
19789 					destroy_func = _tmp148_;
19790 				} else {
19791 					gchar* _tmp149_;
19792 					vala_report_error (NULL, "internal error: type of collection not supported");
19793 					_tmp149_ = g_strdup ("");
19794 					result = _tmp149_;
19795 					_g_free0 (destroy_func_wrapper);
19796 					_g_free0 (destroy_func);
19797 					return result;
19798 				}
19799 			}
19800 		}
19801 	}
19802 	if (element_destroy_func_expression != NULL) {
19803 		ValaCCodeFunction* function = NULL;
19804 		const gchar* _tmp150_;
19805 		ValaCCodeFunction* _tmp151_;
19806 		ValaCCodeFunction* _tmp152_;
19807 		gchar* _tmp153_;
19808 		gchar* _tmp154_;
19809 		ValaCCodeParameter* _tmp155_;
19810 		ValaCCodeParameter* _tmp156_;
19811 		ValaCCodeFunction* _tmp157_;
19812 		ValaCCodeFunctionCall* collection_free_call = NULL;
19813 		const gchar* _tmp158_;
19814 		ValaCCodeIdentifier* _tmp159_;
19815 		ValaCCodeIdentifier* _tmp160_;
19816 		ValaCCodeFunctionCall* _tmp161_;
19817 		ValaCCodeFunctionCall* _tmp162_;
19818 		ValaCCodeFunctionCall* _tmp163_;
19819 		ValaCCodeIdentifier* _tmp164_;
19820 		ValaCCodeIdentifier* _tmp165_;
19821 		ValaCCodeFunctionCall* _tmp166_;
19822 		ValaCCodeCastExpression* _tmp167_;
19823 		ValaCCodeCastExpression* _tmp168_;
19824 		ValaCCodeFunction* _tmp169_;
19825 		ValaCCodeFunction* _tmp170_;
19826 		ValaCCodeFunctionCall* _tmp171_;
19827 		ValaCCodeFunction* _tmp172_;
19828 		ValaCCodeFile* _tmp173_;
19829 		ValaCCodeFunction* _tmp174_;
19830 		ValaCCodeFile* _tmp175_;
19831 		ValaCCodeFunction* _tmp176_;
19832 		_tmp150_ = destroy_func_wrapper;
19833 		_tmp151_ = vala_ccode_function_new (_tmp150_, "void");
19834 		function = _tmp151_;
19835 		_tmp152_ = function;
19836 		_tmp153_ = vala_get_ccode_name ((ValaCodeNode*) collection_type);
19837 		_tmp154_ = _tmp153_;
19838 		_tmp155_ = vala_ccode_parameter_new ("self", _tmp154_);
19839 		_tmp156_ = _tmp155_;
19840 		vala_ccode_function_add_parameter (_tmp152_, _tmp156_);
19841 		_vala_ccode_node_unref0 (_tmp156_);
19842 		_g_free0 (_tmp154_);
19843 		_tmp157_ = function;
19844 		vala_ccode_base_module_push_function (self, _tmp157_);
19845 		_tmp158_ = destroy_func;
19846 		_tmp159_ = vala_ccode_identifier_new (_tmp158_);
19847 		_tmp160_ = _tmp159_;
19848 		_tmp161_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp160_);
19849 		_tmp162_ = _tmp161_;
19850 		_vala_ccode_node_unref0 (_tmp160_);
19851 		collection_free_call = _tmp162_;
19852 		_tmp163_ = collection_free_call;
19853 		_tmp164_ = vala_ccode_identifier_new ("self");
19854 		_tmp165_ = _tmp164_;
19855 		vala_ccode_function_call_add_argument (_tmp163_, (ValaCCodeExpression*) _tmp165_);
19856 		_vala_ccode_node_unref0 (_tmp165_);
19857 		_tmp166_ = collection_free_call;
19858 		_tmp167_ = vala_ccode_cast_expression_new ((ValaCCodeExpression*) element_destroy_func_expression, "GDestroyNotify");
19859 		_tmp168_ = _tmp167_;
19860 		vala_ccode_function_call_add_argument (_tmp166_, (ValaCCodeExpression*) _tmp168_);
19861 		_vala_ccode_node_unref0 (_tmp168_);
19862 		_tmp169_ = vala_ccode_base_module_get_ccode (self);
19863 		_tmp170_ = _tmp169_;
19864 		_tmp171_ = collection_free_call;
19865 		vala_ccode_function_add_expression (_tmp170_, (ValaCCodeExpression*) _tmp171_);
19866 		_tmp172_ = function;
19867 		vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp172_, VALA_CCODE_MODIFIERS_STATIC | VALA_CCODE_MODIFIERS_INLINE);
19868 		vala_ccode_base_module_pop_function (self);
19869 		_tmp173_ = self->cfile;
19870 		_tmp174_ = function;
19871 		vala_ccode_file_add_function_declaration (_tmp173_, _tmp174_);
19872 		_tmp175_ = self->cfile;
19873 		_tmp176_ = function;
19874 		vala_ccode_file_add_function (_tmp175_, _tmp176_);
19875 		result = destroy_func_wrapper;
19876 		_vala_ccode_node_unref0 (collection_free_call);
19877 		_vala_ccode_node_unref0 (function);
19878 		_g_free0 (destroy_func);
19879 		return result;
19880 	}
19881 	result = destroy_func;
19882 	_g_free0 (destroy_func_wrapper);
19883 	return result;
19884 }
19885 
19886 static gchar*
vala_ccode_base_module_real_append_struct_array_destroy(ValaCCodeBaseModule * self,ValaStruct * st)19887 vala_ccode_base_module_real_append_struct_array_destroy (ValaCCodeBaseModule* self,
19888                                                          ValaStruct* st)
19889 {
19890 	gchar* result = NULL;
19891 	g_return_val_if_fail (st != NULL, NULL);
19892 	result = NULL;
19893 	return result;
19894 }
19895 
19896 gchar*
vala_ccode_base_module_append_struct_array_destroy(ValaCCodeBaseModule * self,ValaStruct * st)19897 vala_ccode_base_module_append_struct_array_destroy (ValaCCodeBaseModule* self,
19898                                                     ValaStruct* st)
19899 {
19900 	g_return_val_if_fail (self != NULL, NULL);
19901 	return VALA_CCODE_BASE_MODULE_GET_CLASS (self)->append_struct_array_destroy (self, st);
19902 }
19903 
19904 static gchar*
vala_ccode_base_module_real_append_struct_array_free(ValaCCodeBaseModule * self,ValaStruct * st)19905 vala_ccode_base_module_real_append_struct_array_free (ValaCCodeBaseModule* self,
19906                                                       ValaStruct* st)
19907 {
19908 	gchar* result = NULL;
19909 	g_return_val_if_fail (st != NULL, NULL);
19910 	result = NULL;
19911 	return result;
19912 }
19913 
19914 gchar*
vala_ccode_base_module_append_struct_array_free(ValaCCodeBaseModule * self,ValaStruct * st)19915 vala_ccode_base_module_append_struct_array_free (ValaCCodeBaseModule* self,
19916                                                  ValaStruct* st)
19917 {
19918 	g_return_val_if_fail (self != NULL, NULL);
19919 	return VALA_CCODE_BASE_MODULE_GET_CLASS (self)->append_struct_array_free (self, st);
19920 }
19921 
19922 ValaCCodeExpression*
vala_ccode_base_module_destroy_local(ValaCCodeBaseModule * self,ValaLocalVariable * local)19923 vala_ccode_base_module_destroy_local (ValaCCodeBaseModule* self,
19924                                       ValaLocalVariable* local)
19925 {
19926 	ValaTargetValue* _tmp0_;
19927 	ValaTargetValue* _tmp1_;
19928 	ValaCCodeExpression* _tmp2_;
19929 	ValaCCodeExpression* _tmp3_;
19930 	ValaCCodeExpression* result = NULL;
19931 	g_return_val_if_fail (self != NULL, NULL);
19932 	g_return_val_if_fail (local != NULL, NULL);
19933 	_tmp0_ = vala_ccode_base_module_get_local_cvalue (self, local);
19934 	_tmp1_ = _tmp0_;
19935 	_tmp2_ = vala_ccode_base_module_destroy_value (self, _tmp1_, FALSE);
19936 	_tmp3_ = _tmp2_;
19937 	_vala_target_value_unref0 (_tmp1_);
19938 	result = _tmp3_;
19939 	return result;
19940 }
19941 
19942 ValaCCodeExpression*
vala_ccode_base_module_destroy_parameter(ValaCCodeBaseModule * self,ValaParameter * param)19943 vala_ccode_base_module_destroy_parameter (ValaCCodeBaseModule* self,
19944                                           ValaParameter* param)
19945 {
19946 	ValaTargetValue* _tmp0_;
19947 	ValaTargetValue* _tmp1_;
19948 	ValaCCodeExpression* _tmp2_;
19949 	ValaCCodeExpression* _tmp3_;
19950 	ValaCCodeExpression* result = NULL;
19951 	g_return_val_if_fail (self != NULL, NULL);
19952 	g_return_val_if_fail (param != NULL, NULL);
19953 	_tmp0_ = vala_ccode_base_module_get_parameter_cvalue (self, param);
19954 	_tmp1_ = _tmp0_;
19955 	_tmp2_ = vala_ccode_base_module_destroy_value (self, _tmp1_, FALSE);
19956 	_tmp3_ = _tmp2_;
19957 	_vala_target_value_unref0 (_tmp1_);
19958 	result = _tmp3_;
19959 	return result;
19960 }
19961 
19962 ValaCCodeExpression*
vala_ccode_base_module_destroy_field(ValaCCodeBaseModule * self,ValaField * field,ValaTargetValue * instance)19963 vala_ccode_base_module_destroy_field (ValaCCodeBaseModule* self,
19964                                       ValaField* field,
19965                                       ValaTargetValue* instance)
19966 {
19967 	ValaTargetValue* _tmp0_;
19968 	ValaTargetValue* _tmp1_;
19969 	ValaCCodeExpression* _tmp2_;
19970 	ValaCCodeExpression* _tmp3_;
19971 	ValaCCodeExpression* result = NULL;
19972 	g_return_val_if_fail (self != NULL, NULL);
19973 	g_return_val_if_fail (field != NULL, NULL);
19974 	_tmp0_ = vala_ccode_base_module_get_field_cvalue (self, field, instance);
19975 	_tmp1_ = _tmp0_;
19976 	_tmp2_ = vala_ccode_base_module_destroy_value (self, _tmp1_, FALSE);
19977 	_tmp3_ = _tmp2_;
19978 	_vala_target_value_unref0 (_tmp1_);
19979 	result = _tmp3_;
19980 	return result;
19981 }
19982 
19983 static ValaCCodeExpression*
vala_ccode_base_module_real_destroy_value(ValaCCodeBaseModule * self,ValaTargetValue * value,gboolean is_macro_definition)19984 vala_ccode_base_module_real_destroy_value (ValaCCodeBaseModule* self,
19985                                            ValaTargetValue* value,
19986                                            gboolean is_macro_definition)
19987 {
19988 	ValaDataType* type = NULL;
19989 	ValaDataType* _tmp0_;
19990 	ValaDataType* _tmp1_;
19991 	ValaDataType* _tmp2_;
19992 	ValaDataType* _tmp3_;
19993 	ValaDataType* _tmp4_;
19994 	ValaCCodeExpression* cvar = NULL;
19995 	ValaCCodeExpression* _tmp8_;
19996 	ValaCCodeExpression* _tmp9_;
19997 	ValaDataType* _tmp10_;
19998 	gboolean _tmp58_ = FALSE;
19999 	gboolean _tmp59_ = FALSE;
20000 	gboolean _tmp60_ = FALSE;
20001 	ValaDataType* _tmp61_;
20002 	ValaTypeSymbol* _tmp62_;
20003 	ValaTypeSymbol* _tmp63_;
20004 	ValaClass* _tmp64_;
20005 	gboolean is_gcollection = FALSE;
20006 	ValaCCodeFunctionCall* ccall = NULL;
20007 	ValaCCodeExpression* cexpr = NULL;
20008 	ValaDataType* _tmp77_;
20009 	ValaCCodeExpression* _tmp78_;
20010 	gboolean _tmp79_ = FALSE;
20011 	gboolean _tmp85_ = FALSE;
20012 	ValaDataType* _tmp86_;
20013 	gboolean _tmp157_ = FALSE;
20014 	gboolean _tmp158_ = FALSE;
20015 	gboolean _tmp159_ = FALSE;
20016 	gboolean _tmp160_ = FALSE;
20017 	ValaCodeContext* _tmp205_;
20018 	ValaProfile _tmp206_;
20019 	ValaProfile _tmp207_;
20020 	ValaCCodeBinaryExpression* cisnull = NULL;
20021 	ValaCCodeExpression* _tmp209_;
20022 	ValaCCodeConstant* _tmp210_;
20023 	ValaCCodeConstant* _tmp211_;
20024 	ValaCCodeBinaryExpression* _tmp212_;
20025 	ValaCCodeBinaryExpression* _tmp213_;
20026 	ValaDataType* _tmp214_;
20027 	ValaCCodeFunctionCall* _tmp243_;
20028 	ValaCCodeExpression* _tmp244_;
20029 	ValaCCodeCommaExpression* ccomma = NULL;
20030 	ValaCCodeCommaExpression* _tmp245_;
20031 	gboolean _tmp246_ = FALSE;
20032 	gboolean _tmp247_ = FALSE;
20033 	gboolean _tmp248_ = FALSE;
20034 	ValaCodeContext* _tmp249_;
20035 	ValaProfile _tmp250_;
20036 	ValaProfile _tmp251_;
20037 	ValaCCodeCommaExpression* _tmp336_;
20038 	ValaCCodeFunctionCall* _tmp337_;
20039 	ValaCCodeCommaExpression* _tmp338_;
20040 	ValaCCodeConstant* _tmp339_;
20041 	ValaCCodeConstant* _tmp340_;
20042 	ValaCCodeAssignment* cassign = NULL;
20043 	ValaCCodeExpression* _tmp341_;
20044 	ValaCCodeCommaExpression* _tmp342_;
20045 	ValaCCodeAssignment* _tmp343_;
20046 	gboolean _tmp344_ = FALSE;
20047 	gboolean _tmp345_ = FALSE;
20048 	ValaDataType* _tmp346_;
20049 	ValaTypeSymbol* _tmp347_;
20050 	ValaTypeSymbol* _tmp348_;
20051 	gboolean uses_gfree = FALSE;
20052 	gboolean _tmp357_ = FALSE;
20053 	ValaCCodeBinaryExpression* _tmp359_;
20054 	ValaCCodeConstant* _tmp360_;
20055 	ValaCCodeConstant* _tmp361_;
20056 	ValaCCodeAssignment* _tmp362_;
20057 	ValaCCodeConditionalExpression* _tmp363_;
20058 	ValaCCodeExpression* _tmp364_;
20059 	ValaCCodeExpression* result = NULL;
20060 	g_return_val_if_fail (value != NULL, NULL);
20061 	_tmp0_ = vala_target_value_get_value_type (value);
20062 	_tmp1_ = _tmp0_;
20063 	_tmp2_ = _vala_code_node_ref0 (_tmp1_);
20064 	type = _tmp2_;
20065 	_tmp3_ = vala_target_value_get_actual_value_type (value);
20066 	_tmp4_ = _tmp3_;
20067 	if (_tmp4_ != NULL) {
20068 		ValaDataType* _tmp5_;
20069 		ValaDataType* _tmp6_;
20070 		ValaDataType* _tmp7_;
20071 		_tmp5_ = vala_target_value_get_actual_value_type (value);
20072 		_tmp6_ = _tmp5_;
20073 		_tmp7_ = _vala_code_node_ref0 (_tmp6_);
20074 		_vala_code_node_unref0 (type);
20075 		type = _tmp7_;
20076 	}
20077 	_tmp8_ = vala_get_cvalue_ (value);
20078 	_tmp9_ = _vala_ccode_node_ref0 (_tmp8_);
20079 	cvar = _tmp9_;
20080 	_tmp10_ = type;
20081 	if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp10_, VALA_TYPE_DELEGATE_TYPE)) {
20082 		ValaCodeContext* _tmp11_;
20083 		ValaProfile _tmp12_;
20084 		ValaProfile _tmp13_;
20085 		ValaCCodeExpression* delegate_target = NULL;
20086 		ValaCCodeExpression* _tmp15_;
20087 		ValaCCodeExpression* delegate_target_destroy_notify = NULL;
20088 		ValaCCodeExpression* _tmp16_;
20089 		ValaCCodeFunctionCall* ccall = NULL;
20090 		ValaCCodeExpression* _tmp17_;
20091 		ValaCCodeFunctionCall* _tmp18_;
20092 		ValaCCodeFunctionCall* _tmp19_;
20093 		ValaCCodeExpression* _tmp20_;
20094 		ValaCCodeCommaExpression* destroy_call = NULL;
20095 		ValaCCodeCommaExpression* _tmp21_;
20096 		ValaCCodeCommaExpression* _tmp22_;
20097 		ValaCCodeFunctionCall* _tmp23_;
20098 		ValaCCodeCommaExpression* _tmp24_;
20099 		ValaCCodeConstant* _tmp25_;
20100 		ValaCCodeConstant* _tmp26_;
20101 		ValaCCodeBinaryExpression* cisnull = NULL;
20102 		ValaCCodeExpression* _tmp27_;
20103 		ValaCCodeConstant* _tmp28_;
20104 		ValaCCodeConstant* _tmp29_;
20105 		ValaCCodeBinaryExpression* _tmp30_;
20106 		ValaCCodeBinaryExpression* _tmp31_;
20107 		ValaCCodeCommaExpression* ccomma = NULL;
20108 		ValaCCodeCommaExpression* _tmp32_;
20109 		ValaCCodeCommaExpression* _tmp33_;
20110 		ValaCCodeBinaryExpression* _tmp34_;
20111 		ValaCCodeConstant* _tmp35_;
20112 		ValaCCodeConstant* _tmp36_;
20113 		ValaCCodeCommaExpression* _tmp37_;
20114 		ValaCCodeConditionalExpression* _tmp38_;
20115 		ValaCCodeConditionalExpression* _tmp39_;
20116 		ValaCCodeCommaExpression* _tmp40_;
20117 		ValaCCodeExpression* _tmp41_;
20118 		ValaCCodeConstant* _tmp42_;
20119 		ValaCCodeConstant* _tmp43_;
20120 		ValaCCodeAssignment* _tmp44_;
20121 		ValaCCodeAssignment* _tmp45_;
20122 		ValaCCodeCommaExpression* _tmp46_;
20123 		ValaCCodeExpression* _tmp47_;
20124 		ValaCCodeConstant* _tmp48_;
20125 		ValaCCodeConstant* _tmp49_;
20126 		ValaCCodeAssignment* _tmp50_;
20127 		ValaCCodeAssignment* _tmp51_;
20128 		ValaCCodeCommaExpression* _tmp52_;
20129 		ValaCCodeExpression* _tmp53_;
20130 		ValaCCodeConstant* _tmp54_;
20131 		ValaCCodeConstant* _tmp55_;
20132 		ValaCCodeAssignment* _tmp56_;
20133 		ValaCCodeAssignment* _tmp57_;
20134 		_tmp11_ = self->priv->_context;
20135 		_tmp12_ = vala_code_context_get_profile (_tmp11_);
20136 		_tmp13_ = _tmp12_;
20137 		if (_tmp13_ != VALA_PROFILE_GOBJECT) {
20138 			ValaCCodeFile* _tmp14_;
20139 			_tmp14_ = self->cfile;
20140 			vala_ccode_file_add_include (_tmp14_, "stddef.h", FALSE);
20141 		}
20142 		_tmp15_ = vala_ccode_base_module_get_delegate_target_cvalue (self, value);
20143 		delegate_target = _tmp15_;
20144 		_tmp16_ = vala_ccode_base_module_get_delegate_target_destroy_notify_cvalue (self, value);
20145 		delegate_target_destroy_notify = _tmp16_;
20146 		_tmp17_ = delegate_target_destroy_notify;
20147 		_tmp18_ = vala_ccode_function_call_new (_tmp17_);
20148 		ccall = _tmp18_;
20149 		_tmp19_ = ccall;
20150 		_tmp20_ = delegate_target;
20151 		vala_ccode_function_call_add_argument (_tmp19_, _tmp20_);
20152 		_tmp21_ = vala_ccode_comma_expression_new ();
20153 		destroy_call = _tmp21_;
20154 		_tmp22_ = destroy_call;
20155 		_tmp23_ = ccall;
20156 		vala_ccode_comma_expression_append_expression (_tmp22_, (ValaCCodeExpression*) _tmp23_);
20157 		_tmp24_ = destroy_call;
20158 		_tmp25_ = vala_ccode_constant_new ("NULL");
20159 		_tmp26_ = _tmp25_;
20160 		vala_ccode_comma_expression_append_expression (_tmp24_, (ValaCCodeExpression*) _tmp26_);
20161 		_vala_ccode_node_unref0 (_tmp26_);
20162 		_tmp27_ = delegate_target_destroy_notify;
20163 		_tmp28_ = vala_ccode_constant_new ("NULL");
20164 		_tmp29_ = _tmp28_;
20165 		_tmp30_ = vala_ccode_binary_expression_new (VALA_CCODE_BINARY_OPERATOR_EQUALITY, _tmp27_, (ValaCCodeExpression*) _tmp29_);
20166 		_tmp31_ = _tmp30_;
20167 		_vala_ccode_node_unref0 (_tmp29_);
20168 		cisnull = _tmp31_;
20169 		_tmp32_ = vala_ccode_comma_expression_new ();
20170 		ccomma = _tmp32_;
20171 		_tmp33_ = ccomma;
20172 		_tmp34_ = cisnull;
20173 		_tmp35_ = vala_ccode_constant_new ("NULL");
20174 		_tmp36_ = _tmp35_;
20175 		_tmp37_ = destroy_call;
20176 		_tmp38_ = vala_ccode_conditional_expression_new ((ValaCCodeExpression*) _tmp34_, (ValaCCodeExpression*) _tmp36_, (ValaCCodeExpression*) _tmp37_);
20177 		_tmp39_ = _tmp38_;
20178 		vala_ccode_comma_expression_append_expression (_tmp33_, (ValaCCodeExpression*) _tmp39_);
20179 		_vala_ccode_node_unref0 (_tmp39_);
20180 		_vala_ccode_node_unref0 (_tmp36_);
20181 		_tmp40_ = ccomma;
20182 		_tmp41_ = cvar;
20183 		_tmp42_ = vala_ccode_constant_new ("NULL");
20184 		_tmp43_ = _tmp42_;
20185 		_tmp44_ = vala_ccode_assignment_new (_tmp41_, (ValaCCodeExpression*) _tmp43_, VALA_CCODE_ASSIGNMENT_OPERATOR_SIMPLE);
20186 		_tmp45_ = _tmp44_;
20187 		vala_ccode_comma_expression_append_expression (_tmp40_, (ValaCCodeExpression*) _tmp45_);
20188 		_vala_ccode_node_unref0 (_tmp45_);
20189 		_vala_ccode_node_unref0 (_tmp43_);
20190 		_tmp46_ = ccomma;
20191 		_tmp47_ = delegate_target;
20192 		_tmp48_ = vala_ccode_constant_new ("NULL");
20193 		_tmp49_ = _tmp48_;
20194 		_tmp50_ = vala_ccode_assignment_new (_tmp47_, (ValaCCodeExpression*) _tmp49_, VALA_CCODE_ASSIGNMENT_OPERATOR_SIMPLE);
20195 		_tmp51_ = _tmp50_;
20196 		vala_ccode_comma_expression_append_expression (_tmp46_, (ValaCCodeExpression*) _tmp51_);
20197 		_vala_ccode_node_unref0 (_tmp51_);
20198 		_vala_ccode_node_unref0 (_tmp49_);
20199 		_tmp52_ = ccomma;
20200 		_tmp53_ = delegate_target_destroy_notify;
20201 		_tmp54_ = vala_ccode_constant_new ("NULL");
20202 		_tmp55_ = _tmp54_;
20203 		_tmp56_ = vala_ccode_assignment_new (_tmp53_, (ValaCCodeExpression*) _tmp55_, VALA_CCODE_ASSIGNMENT_OPERATOR_SIMPLE);
20204 		_tmp57_ = _tmp56_;
20205 		vala_ccode_comma_expression_append_expression (_tmp52_, (ValaCCodeExpression*) _tmp57_);
20206 		_vala_ccode_node_unref0 (_tmp57_);
20207 		_vala_ccode_node_unref0 (_tmp55_);
20208 		result = (ValaCCodeExpression*) ccomma;
20209 		_vala_ccode_node_unref0 (cisnull);
20210 		_vala_ccode_node_unref0 (destroy_call);
20211 		_vala_ccode_node_unref0 (ccall);
20212 		_vala_ccode_node_unref0 (delegate_target_destroy_notify);
20213 		_vala_ccode_node_unref0 (delegate_target);
20214 		_vala_ccode_node_unref0 (cvar);
20215 		_vala_code_node_unref0 (type);
20216 		return result;
20217 	}
20218 	_tmp61_ = type;
20219 	_tmp62_ = vala_data_type_get_type_symbol (_tmp61_);
20220 	_tmp63_ = _tmp62_;
20221 	_tmp64_ = self->glist_type;
20222 	if (_tmp63_ == G_TYPE_CHECK_INSTANCE_CAST (_tmp64_, VALA_TYPE_TYPESYMBOL, ValaTypeSymbol)) {
20223 		_tmp60_ = TRUE;
20224 	} else {
20225 		ValaDataType* _tmp65_;
20226 		ValaTypeSymbol* _tmp66_;
20227 		ValaTypeSymbol* _tmp67_;
20228 		ValaClass* _tmp68_;
20229 		_tmp65_ = type;
20230 		_tmp66_ = vala_data_type_get_type_symbol (_tmp65_);
20231 		_tmp67_ = _tmp66_;
20232 		_tmp68_ = self->gslist_type;
20233 		_tmp60_ = _tmp67_ == G_TYPE_CHECK_INSTANCE_CAST (_tmp68_, VALA_TYPE_TYPESYMBOL, ValaTypeSymbol);
20234 	}
20235 	if (_tmp60_) {
20236 		_tmp59_ = TRUE;
20237 	} else {
20238 		ValaDataType* _tmp69_;
20239 		ValaTypeSymbol* _tmp70_;
20240 		ValaTypeSymbol* _tmp71_;
20241 		ValaClass* _tmp72_;
20242 		_tmp69_ = type;
20243 		_tmp70_ = vala_data_type_get_type_symbol (_tmp69_);
20244 		_tmp71_ = _tmp70_;
20245 		_tmp72_ = self->gnode_type;
20246 		_tmp59_ = _tmp71_ == G_TYPE_CHECK_INSTANCE_CAST (_tmp72_, VALA_TYPE_TYPESYMBOL, ValaTypeSymbol);
20247 	}
20248 	if (_tmp59_) {
20249 		_tmp58_ = TRUE;
20250 	} else {
20251 		ValaDataType* _tmp73_;
20252 		ValaTypeSymbol* _tmp74_;
20253 		ValaTypeSymbol* _tmp75_;
20254 		ValaClass* _tmp76_;
20255 		_tmp73_ = type;
20256 		_tmp74_ = vala_data_type_get_type_symbol (_tmp73_);
20257 		_tmp75_ = _tmp74_;
20258 		_tmp76_ = self->gqueue_type;
20259 		_tmp58_ = _tmp75_ == G_TYPE_CHECK_INSTANCE_CAST (_tmp76_, VALA_TYPE_TYPESYMBOL, ValaTypeSymbol);
20260 	}
20261 	is_gcollection = _tmp58_;
20262 	_tmp77_ = type;
20263 	_tmp78_ = vala_ccode_base_module_get_destroy_func_expression (self, _tmp77_, FALSE);
20264 	cexpr = _tmp78_;
20265 	if (is_gcollection) {
20266 		ValaCCodeExpression* _tmp80_;
20267 		_tmp80_ = cexpr;
20268 		_tmp79_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp80_, VALA_TYPE_CCODE_FUNCTION_CALL);
20269 	} else {
20270 		_tmp79_ = FALSE;
20271 	}
20272 	if (_tmp79_) {
20273 		ValaCCodeExpression* _tmp81_;
20274 		ValaCCodeFunctionCall* _tmp82_;
20275 		_tmp81_ = cexpr;
20276 		_tmp82_ = _vala_ccode_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp81_, VALA_TYPE_CCODE_FUNCTION_CALL, ValaCCodeFunctionCall));
20277 		_vala_ccode_node_unref0 (ccall);
20278 		ccall = _tmp82_;
20279 	} else {
20280 		ValaCCodeExpression* _tmp83_;
20281 		ValaCCodeFunctionCall* _tmp84_;
20282 		_tmp83_ = cexpr;
20283 		_tmp84_ = vala_ccode_function_call_new (_tmp83_);
20284 		_vala_ccode_node_unref0 (ccall);
20285 		ccall = _tmp84_;
20286 	}
20287 	_tmp86_ = type;
20288 	if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp86_, VALA_TYPE_VALUE_TYPE)) {
20289 		ValaDataType* _tmp87_;
20290 		gboolean _tmp88_;
20291 		gboolean _tmp89_;
20292 		_tmp87_ = type;
20293 		_tmp88_ = vala_data_type_get_nullable (_tmp87_);
20294 		_tmp89_ = _tmp88_;
20295 		_tmp85_ = !_tmp89_;
20296 	} else {
20297 		_tmp85_ = FALSE;
20298 	}
20299 	if (_tmp85_) {
20300 		ValaStruct* st = NULL;
20301 		ValaDataType* _tmp90_;
20302 		ValaTypeSymbol* _tmp91_;
20303 		ValaTypeSymbol* _tmp92_;
20304 		gboolean _tmp93_ = FALSE;
20305 		ValaStruct* _tmp94_;
20306 		gboolean _tmp102_ = FALSE;
20307 		ValaStruct* _tmp103_;
20308 		_tmp90_ = type;
20309 		_tmp91_ = vala_data_type_get_type_symbol (_tmp90_);
20310 		_tmp92_ = _tmp91_;
20311 		st = G_TYPE_CHECK_INSTANCE_TYPE (_tmp92_, VALA_TYPE_STRUCT) ? ((ValaStruct*) _tmp92_) : NULL;
20312 		_tmp94_ = st;
20313 		if (_tmp94_ != NULL) {
20314 			ValaStruct* _tmp95_;
20315 			_tmp95_ = st;
20316 			_tmp93_ = vala_struct_is_simple_type (_tmp95_);
20317 		} else {
20318 			_tmp93_ = FALSE;
20319 		}
20320 		if (_tmp93_) {
20321 			ValaCCodeFunctionCall* _tmp96_;
20322 			ValaCCodeExpression* _tmp97_;
20323 			_tmp96_ = ccall;
20324 			_tmp97_ = cvar;
20325 			vala_ccode_function_call_add_argument (_tmp96_, _tmp97_);
20326 		} else {
20327 			ValaCCodeFunctionCall* _tmp98_;
20328 			ValaCCodeExpression* _tmp99_;
20329 			ValaCCodeUnaryExpression* _tmp100_;
20330 			ValaCCodeUnaryExpression* _tmp101_;
20331 			_tmp98_ = ccall;
20332 			_tmp99_ = cvar;
20333 			_tmp100_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, _tmp99_);
20334 			_tmp101_ = _tmp100_;
20335 			vala_ccode_function_call_add_argument (_tmp98_, (ValaCCodeExpression*) _tmp101_);
20336 			_vala_ccode_node_unref0 (_tmp101_);
20337 		}
20338 		_tmp103_ = self->gvalue_type;
20339 		if (_tmp103_ != NULL) {
20340 			ValaDataType* _tmp104_;
20341 			ValaTypeSymbol* _tmp105_;
20342 			ValaTypeSymbol* _tmp106_;
20343 			ValaStruct* _tmp107_;
20344 			_tmp104_ = type;
20345 			_tmp105_ = vala_data_type_get_type_symbol (_tmp104_);
20346 			_tmp106_ = _tmp105_;
20347 			_tmp107_ = self->gvalue_type;
20348 			_tmp102_ = _tmp106_ == G_TYPE_CHECK_INSTANCE_CAST (_tmp107_, VALA_TYPE_TYPESYMBOL, ValaTypeSymbol);
20349 		} else {
20350 			_tmp102_ = FALSE;
20351 		}
20352 		if (_tmp102_) {
20353 			ValaCCodeFunctionCall* cisvalid = NULL;
20354 			ValaCCodeIdentifier* _tmp108_;
20355 			ValaCCodeIdentifier* _tmp109_;
20356 			ValaCCodeFunctionCall* _tmp110_;
20357 			ValaCCodeFunctionCall* _tmp111_;
20358 			ValaCCodeFunctionCall* _tmp112_;
20359 			ValaCCodeExpression* _tmp113_;
20360 			ValaCCodeUnaryExpression* _tmp114_;
20361 			ValaCCodeUnaryExpression* _tmp115_;
20362 			ValaCCodeCommaExpression* ccomma = NULL;
20363 			ValaCCodeCommaExpression* _tmp116_;
20364 			ValaCCodeCommaExpression* _tmp117_;
20365 			ValaCCodeFunctionCall* _tmp118_;
20366 			ValaCCodeCommaExpression* _tmp119_;
20367 			ValaCCodeConstant* _tmp120_;
20368 			ValaCCodeConstant* _tmp121_;
20369 			ValaCCodeFunctionCall* _tmp122_;
20370 			ValaCCodeCommaExpression* _tmp123_;
20371 			ValaCCodeConstant* _tmp124_;
20372 			ValaCCodeConstant* _tmp125_;
20373 			ValaCCodeConditionalExpression* _tmp126_;
20374 			ValaCCodeExpression* _tmp127_;
20375 			_tmp108_ = vala_ccode_identifier_new ("G_IS_VALUE");
20376 			_tmp109_ = _tmp108_;
20377 			_tmp110_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp109_);
20378 			_tmp111_ = _tmp110_;
20379 			_vala_ccode_node_unref0 (_tmp109_);
20380 			cisvalid = _tmp111_;
20381 			_tmp112_ = cisvalid;
20382 			_tmp113_ = cvar;
20383 			_tmp114_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, _tmp113_);
20384 			_tmp115_ = _tmp114_;
20385 			vala_ccode_function_call_add_argument (_tmp112_, (ValaCCodeExpression*) _tmp115_);
20386 			_vala_ccode_node_unref0 (_tmp115_);
20387 			_tmp116_ = vala_ccode_comma_expression_new ();
20388 			ccomma = _tmp116_;
20389 			_tmp117_ = ccomma;
20390 			_tmp118_ = ccall;
20391 			vala_ccode_comma_expression_append_expression (_tmp117_, (ValaCCodeExpression*) _tmp118_);
20392 			_tmp119_ = ccomma;
20393 			_tmp120_ = vala_ccode_constant_new ("NULL");
20394 			_tmp121_ = _tmp120_;
20395 			vala_ccode_comma_expression_append_expression (_tmp119_, (ValaCCodeExpression*) _tmp121_);
20396 			_vala_ccode_node_unref0 (_tmp121_);
20397 			_tmp122_ = cisvalid;
20398 			_tmp123_ = ccomma;
20399 			_tmp124_ = vala_ccode_constant_new ("NULL");
20400 			_tmp125_ = _tmp124_;
20401 			_tmp126_ = vala_ccode_conditional_expression_new ((ValaCCodeExpression*) _tmp122_, (ValaCCodeExpression*) _tmp123_, (ValaCCodeExpression*) _tmp125_);
20402 			_tmp127_ = (ValaCCodeExpression*) _tmp126_;
20403 			_vala_ccode_node_unref0 (_tmp125_);
20404 			result = _tmp127_;
20405 			_vala_ccode_node_unref0 (ccomma);
20406 			_vala_ccode_node_unref0 (cisvalid);
20407 			_vala_ccode_node_unref0 (cexpr);
20408 			_vala_ccode_node_unref0 (ccall);
20409 			_vala_ccode_node_unref0 (cvar);
20410 			_vala_code_node_unref0 (type);
20411 			return result;
20412 		} else {
20413 			gboolean _tmp128_ = FALSE;
20414 			gboolean _tmp129_ = FALSE;
20415 			gboolean _tmp130_ = FALSE;
20416 			ValaDataType* _tmp131_;
20417 			ValaTypeSymbol* _tmp132_;
20418 			ValaTypeSymbol* _tmp133_;
20419 			ValaStruct* _tmp134_;
20420 			_tmp131_ = type;
20421 			_tmp132_ = vala_data_type_get_type_symbol (_tmp131_);
20422 			_tmp133_ = _tmp132_;
20423 			_tmp134_ = self->gmutex_type;
20424 			if (_tmp133_ == G_TYPE_CHECK_INSTANCE_CAST (_tmp134_, VALA_TYPE_TYPESYMBOL, ValaTypeSymbol)) {
20425 				_tmp130_ = TRUE;
20426 			} else {
20427 				ValaDataType* _tmp135_;
20428 				ValaTypeSymbol* _tmp136_;
20429 				ValaTypeSymbol* _tmp137_;
20430 				ValaStruct* _tmp138_;
20431 				_tmp135_ = type;
20432 				_tmp136_ = vala_data_type_get_type_symbol (_tmp135_);
20433 				_tmp137_ = _tmp136_;
20434 				_tmp138_ = self->grecmutex_type;
20435 				_tmp130_ = _tmp137_ == G_TYPE_CHECK_INSTANCE_CAST (_tmp138_, VALA_TYPE_TYPESYMBOL, ValaTypeSymbol);
20436 			}
20437 			if (_tmp130_) {
20438 				_tmp129_ = TRUE;
20439 			} else {
20440 				ValaDataType* _tmp139_;
20441 				ValaTypeSymbol* _tmp140_;
20442 				ValaTypeSymbol* _tmp141_;
20443 				ValaStruct* _tmp142_;
20444 				_tmp139_ = type;
20445 				_tmp140_ = vala_data_type_get_type_symbol (_tmp139_);
20446 				_tmp141_ = _tmp140_;
20447 				_tmp142_ = self->grwlock_type;
20448 				_tmp129_ = _tmp141_ == G_TYPE_CHECK_INSTANCE_CAST (_tmp142_, VALA_TYPE_TYPESYMBOL, ValaTypeSymbol);
20449 			}
20450 			if (_tmp129_) {
20451 				_tmp128_ = TRUE;
20452 			} else {
20453 				ValaDataType* _tmp143_;
20454 				ValaTypeSymbol* _tmp144_;
20455 				ValaTypeSymbol* _tmp145_;
20456 				ValaStruct* _tmp146_;
20457 				_tmp143_ = type;
20458 				_tmp144_ = vala_data_type_get_type_symbol (_tmp143_);
20459 				_tmp145_ = _tmp144_;
20460 				_tmp146_ = self->gcond_type;
20461 				_tmp128_ = _tmp145_ == G_TYPE_CHECK_INSTANCE_CAST (_tmp146_, VALA_TYPE_TYPESYMBOL, ValaTypeSymbol);
20462 			}
20463 			if (_tmp128_) {
20464 				ValaCCodeFunctionCall* _tmp147_;
20465 				ValaDataType* _tmp148_;
20466 				ValaTypeSymbol* _tmp149_;
20467 				ValaTypeSymbol* _tmp150_;
20468 				gchar* _tmp151_;
20469 				gchar* _tmp152_;
20470 				gchar* _tmp153_;
20471 				gchar* _tmp154_;
20472 				ValaCCodeIdentifier* _tmp155_;
20473 				ValaCCodeIdentifier* _tmp156_;
20474 				self->requires_clear_mutex = TRUE;
20475 				_tmp147_ = ccall;
20476 				_tmp148_ = type;
20477 				_tmp149_ = vala_data_type_get_type_symbol (_tmp148_);
20478 				_tmp150_ = _tmp149_;
20479 				_tmp151_ = vala_get_ccode_name ((ValaCodeNode*) _tmp150_);
20480 				_tmp152_ = _tmp151_;
20481 				_tmp153_ = g_strconcat ("_vala_clear_", _tmp152_, NULL);
20482 				_tmp154_ = _tmp153_;
20483 				_tmp155_ = vala_ccode_identifier_new (_tmp154_);
20484 				_tmp156_ = _tmp155_;
20485 				vala_ccode_function_call_set_call (_tmp147_, (ValaCCodeExpression*) _tmp156_);
20486 				_vala_ccode_node_unref0 (_tmp156_);
20487 				_g_free0 (_tmp154_);
20488 				_g_free0 (_tmp152_);
20489 				result = (ValaCCodeExpression*) ccall;
20490 				_vala_ccode_node_unref0 (cexpr);
20491 				_vala_ccode_node_unref0 (cvar);
20492 				_vala_code_node_unref0 (type);
20493 				return result;
20494 			} else {
20495 				result = (ValaCCodeExpression*) ccall;
20496 				_vala_ccode_node_unref0 (cexpr);
20497 				_vala_ccode_node_unref0 (cvar);
20498 				_vala_code_node_unref0 (type);
20499 				return result;
20500 			}
20501 		}
20502 	}
20503 	if (!is_gcollection) {
20504 		ValaCCodeFunctionCall* _tmp161_;
20505 		ValaCCodeExpression* _tmp162_;
20506 		ValaCCodeExpression* _tmp163_;
20507 		_tmp161_ = ccall;
20508 		_tmp162_ = vala_ccode_function_call_get_call (_tmp161_);
20509 		_tmp163_ = _tmp162_;
20510 		_tmp160_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp163_, VALA_TYPE_CCODE_IDENTIFIER);
20511 	} else {
20512 		_tmp160_ = FALSE;
20513 	}
20514 	if (_tmp160_) {
20515 		ValaDataType* _tmp164_;
20516 		_tmp164_ = type;
20517 		_tmp159_ = !G_TYPE_CHECK_INSTANCE_TYPE (_tmp164_, VALA_TYPE_ARRAY_TYPE);
20518 	} else {
20519 		_tmp159_ = FALSE;
20520 	}
20521 	if (_tmp159_) {
20522 		ValaDataType* _tmp165_;
20523 		_tmp165_ = type;
20524 		_tmp158_ = !G_TYPE_CHECK_INSTANCE_TYPE (_tmp165_, VALA_TYPE_GENERIC_TYPE);
20525 	} else {
20526 		_tmp158_ = FALSE;
20527 	}
20528 	if (_tmp158_) {
20529 		_tmp157_ = !is_macro_definition;
20530 	} else {
20531 		_tmp157_ = FALSE;
20532 	}
20533 	if (_tmp157_) {
20534 		ValaCCodeIdentifier* freeid = NULL;
20535 		ValaCCodeFunctionCall* _tmp166_;
20536 		ValaCCodeExpression* _tmp167_;
20537 		ValaCCodeExpression* _tmp168_;
20538 		ValaCCodeIdentifier* _tmp169_;
20539 		gchar* free0_func = NULL;
20540 		ValaCCodeIdentifier* _tmp170_;
20541 		const gchar* _tmp171_;
20542 		const gchar* _tmp172_;
20543 		gchar* _tmp173_;
20544 		const gchar* _tmp174_;
20545 		ValaCCodeExpression* _tmp194_;
20546 		const gchar* _tmp199_;
20547 		ValaCCodeIdentifier* _tmp200_;
20548 		ValaCCodeIdentifier* _tmp201_;
20549 		ValaCCodeFunctionCall* _tmp202_;
20550 		ValaCCodeFunctionCall* _tmp203_;
20551 		ValaCCodeExpression* _tmp204_;
20552 		_tmp166_ = ccall;
20553 		_tmp167_ = vala_ccode_function_call_get_call (_tmp166_);
20554 		_tmp168_ = _tmp167_;
20555 		_tmp169_ = _vala_ccode_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp168_, VALA_TYPE_CCODE_IDENTIFIER, ValaCCodeIdentifier));
20556 		freeid = _tmp169_;
20557 		_tmp170_ = freeid;
20558 		_tmp171_ = vala_ccode_identifier_get_name (_tmp170_);
20559 		_tmp172_ = _tmp171_;
20560 		_tmp173_ = g_strdup_printf ("_%s0", _tmp172_);
20561 		free0_func = _tmp173_;
20562 		_tmp174_ = free0_func;
20563 		if (vala_ccode_base_module_add_wrapper (self, _tmp174_)) {
20564 			ValaCCodeExpression* macro = NULL;
20565 			ValaDataType* _tmp175_;
20566 			ValaCCodeIdentifier* _tmp176_;
20567 			ValaCCodeIdentifier* _tmp177_;
20568 			ValaGLibValue* _tmp178_;
20569 			ValaGLibValue* _tmp179_;
20570 			ValaCCodeExpression* _tmp180_;
20571 			ValaCCodeExpression* _tmp181_;
20572 			ValaCCodeFile* _tmp182_;
20573 			const gchar* _tmp183_;
20574 			gchar* _tmp184_;
20575 			gchar* _tmp185_;
20576 			ValaCCodeExpression* _tmp186_;
20577 			ValaCCodeMacroReplacement* _tmp187_;
20578 			ValaCCodeMacroReplacement* _tmp188_;
20579 			_tmp175_ = type;
20580 			_tmp176_ = vala_ccode_identifier_new ("var");
20581 			_tmp177_ = _tmp176_;
20582 			_tmp178_ = vala_glib_value_new (_tmp175_, (ValaCCodeExpression*) _tmp177_, TRUE);
20583 			_tmp179_ = _tmp178_;
20584 			_tmp180_ = vala_ccode_base_module_destroy_value (self, (ValaTargetValue*) _tmp179_, TRUE);
20585 			_tmp181_ = _tmp180_;
20586 			_vala_target_value_unref0 (_tmp179_);
20587 			_vala_ccode_node_unref0 (_tmp177_);
20588 			macro = _tmp181_;
20589 			_tmp182_ = self->cfile;
20590 			_tmp183_ = free0_func;
20591 			_tmp184_ = g_strdup_printf ("%s(var)", _tmp183_);
20592 			_tmp185_ = _tmp184_;
20593 			_tmp186_ = macro;
20594 			_tmp187_ = vala_ccode_macro_replacement_new_with_expression (_tmp185_, _tmp186_);
20595 			_tmp188_ = _tmp187_;
20596 			vala_ccode_file_add_type_declaration (_tmp182_, (ValaCCodeNode*) _tmp188_);
20597 			_vala_ccode_node_unref0 (_tmp188_);
20598 			_g_free0 (_tmp185_);
20599 			_vala_ccode_node_unref0 (macro);
20600 		}
20601 		while (TRUE) {
20602 			ValaCCodeExpression* _tmp189_;
20603 			ValaCCodeExpression* _tmp190_;
20604 			ValaCCodeExpression* _tmp191_;
20605 			ValaCCodeExpression* _tmp192_;
20606 			ValaCCodeExpression* _tmp193_;
20607 			_tmp189_ = cvar;
20608 			if (!G_TYPE_CHECK_INSTANCE_TYPE (_tmp189_, VALA_TYPE_CCODE_CAST_EXPRESSION)) {
20609 				break;
20610 			}
20611 			_tmp190_ = cvar;
20612 			_tmp191_ = vala_ccode_cast_expression_get_inner (G_TYPE_CHECK_INSTANCE_CAST (_tmp190_, VALA_TYPE_CCODE_CAST_EXPRESSION, ValaCCodeCastExpression));
20613 			_tmp192_ = _tmp191_;
20614 			_tmp193_ = _vala_ccode_node_ref0 (_tmp192_);
20615 			_vala_ccode_node_unref0 (cvar);
20616 			cvar = _tmp193_;
20617 		}
20618 		_tmp194_ = cvar;
20619 		if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp194_, VALA_TYPE_CCODE_FUNCTION_CALL)) {
20620 			ValaCCodeExpression* _tmp195_;
20621 			ValaList* _tmp196_;
20622 			ValaList* _tmp197_;
20623 			gpointer _tmp198_;
20624 			_tmp195_ = cvar;
20625 			_tmp196_ = vala_ccode_function_call_get_arguments (G_TYPE_CHECK_INSTANCE_CAST (_tmp195_, VALA_TYPE_CCODE_FUNCTION_CALL, ValaCCodeFunctionCall));
20626 			_tmp197_ = _tmp196_;
20627 			_tmp198_ = vala_list_get (_tmp197_, 0);
20628 			_vala_ccode_node_unref0 (cvar);
20629 			cvar = (ValaCCodeExpression*) _tmp198_;
20630 			_vala_iterable_unref0 (_tmp197_);
20631 		}
20632 		_tmp199_ = free0_func;
20633 		_tmp200_ = vala_ccode_identifier_new (_tmp199_);
20634 		_tmp201_ = _tmp200_;
20635 		_tmp202_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp201_);
20636 		_vala_ccode_node_unref0 (ccall);
20637 		ccall = _tmp202_;
20638 		_vala_ccode_node_unref0 (_tmp201_);
20639 		_tmp203_ = ccall;
20640 		_tmp204_ = cvar;
20641 		vala_ccode_function_call_add_argument (_tmp203_, _tmp204_);
20642 		result = (ValaCCodeExpression*) ccall;
20643 		_g_free0 (free0_func);
20644 		_vala_ccode_node_unref0 (freeid);
20645 		_vala_ccode_node_unref0 (cexpr);
20646 		_vala_ccode_node_unref0 (cvar);
20647 		_vala_code_node_unref0 (type);
20648 		return result;
20649 	}
20650 	_tmp205_ = self->priv->_context;
20651 	_tmp206_ = vala_code_context_get_profile (_tmp205_);
20652 	_tmp207_ = _tmp206_;
20653 	if (_tmp207_ != VALA_PROFILE_GOBJECT) {
20654 		ValaCCodeFile* _tmp208_;
20655 		_tmp208_ = self->cfile;
20656 		vala_ccode_file_add_include (_tmp208_, "stddef.h", FALSE);
20657 	}
20658 	_tmp209_ = cvar;
20659 	_tmp210_ = vala_ccode_constant_new ("NULL");
20660 	_tmp211_ = _tmp210_;
20661 	_tmp212_ = vala_ccode_binary_expression_new (VALA_CCODE_BINARY_OPERATOR_EQUALITY, _tmp209_, (ValaCCodeExpression*) _tmp211_);
20662 	_tmp213_ = _tmp212_;
20663 	_vala_ccode_node_unref0 (_tmp211_);
20664 	cisnull = _tmp213_;
20665 	_tmp214_ = type;
20666 	if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp214_, VALA_TYPE_GENERIC_TYPE)) {
20667 		ValaSymbol* parent = NULL;
20668 		ValaDataType* _tmp215_;
20669 		ValaTypeParameter* _tmp216_;
20670 		ValaTypeParameter* _tmp217_;
20671 		ValaSymbol* _tmp218_;
20672 		ValaSymbol* _tmp219_;
20673 		ValaSymbol* _tmp220_;
20674 		ValaClass* cl = NULL;
20675 		ValaSymbol* _tmp221_;
20676 		ValaClass* _tmp222_;
20677 		gboolean _tmp223_ = FALSE;
20678 		gboolean _tmp224_ = FALSE;
20679 		ValaSymbol* _tmp225_;
20680 		ValaCCodeBinaryExpression* cunrefisnull = NULL;
20681 		ValaDataType* _tmp233_;
20682 		ValaCCodeExpression* _tmp234_;
20683 		ValaCCodeExpression* _tmp235_;
20684 		ValaCCodeConstant* _tmp236_;
20685 		ValaCCodeConstant* _tmp237_;
20686 		ValaCCodeBinaryExpression* _tmp238_;
20687 		ValaCCodeBinaryExpression* _tmp239_;
20688 		ValaCCodeBinaryExpression* _tmp240_;
20689 		ValaCCodeBinaryExpression* _tmp241_;
20690 		ValaCCodeBinaryExpression* _tmp242_;
20691 		_tmp215_ = type;
20692 		_tmp216_ = vala_generic_type_get_type_parameter (G_TYPE_CHECK_INSTANCE_CAST (_tmp215_, VALA_TYPE_GENERIC_TYPE, ValaGenericType));
20693 		_tmp217_ = _tmp216_;
20694 		_tmp218_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp217_);
20695 		_tmp219_ = _tmp218_;
20696 		_tmp220_ = _vala_code_node_ref0 (_tmp219_);
20697 		parent = _tmp220_;
20698 		_tmp221_ = parent;
20699 		_tmp222_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (_tmp221_, VALA_TYPE_CLASS) ? ((ValaClass*) _tmp221_) : NULL);
20700 		cl = _tmp222_;
20701 		_tmp225_ = parent;
20702 		if (!G_TYPE_CHECK_INSTANCE_TYPE (_tmp225_, VALA_TYPE_METHOD)) {
20703 			ValaSymbol* _tmp226_;
20704 			_tmp226_ = parent;
20705 			_tmp224_ = !G_TYPE_CHECK_INSTANCE_TYPE (_tmp226_, VALA_TYPE_OBJECT_TYPE_SYMBOL);
20706 		} else {
20707 			_tmp224_ = FALSE;
20708 		}
20709 		if (_tmp224_) {
20710 			_tmp223_ = TRUE;
20711 		} else {
20712 			gboolean _tmp227_ = FALSE;
20713 			ValaClass* _tmp228_;
20714 			_tmp228_ = cl;
20715 			if (_tmp228_ != NULL) {
20716 				ValaClass* _tmp229_;
20717 				gboolean _tmp230_;
20718 				gboolean _tmp231_;
20719 				_tmp229_ = cl;
20720 				_tmp230_ = vala_class_get_is_compact (_tmp229_);
20721 				_tmp231_ = _tmp230_;
20722 				_tmp227_ = _tmp231_;
20723 			} else {
20724 				_tmp227_ = FALSE;
20725 			}
20726 			_tmp223_ = _tmp227_;
20727 		}
20728 		if (_tmp223_) {
20729 			ValaCCodeConstant* _tmp232_;
20730 			_tmp232_ = vala_ccode_constant_new ("NULL");
20731 			result = (ValaCCodeExpression*) _tmp232_;
20732 			_vala_code_node_unref0 (cl);
20733 			_vala_code_node_unref0 (parent);
20734 			_vala_ccode_node_unref0 (cisnull);
20735 			_vala_ccode_node_unref0 (cexpr);
20736 			_vala_ccode_node_unref0 (ccall);
20737 			_vala_ccode_node_unref0 (cvar);
20738 			_vala_code_node_unref0 (type);
20739 			return result;
20740 		}
20741 		_tmp233_ = type;
20742 		_tmp234_ = vala_ccode_base_module_get_destroy_func_expression (self, _tmp233_, FALSE);
20743 		_tmp235_ = _tmp234_;
20744 		_tmp236_ = vala_ccode_constant_new ("NULL");
20745 		_tmp237_ = _tmp236_;
20746 		_tmp238_ = vala_ccode_binary_expression_new (VALA_CCODE_BINARY_OPERATOR_EQUALITY, _tmp235_, (ValaCCodeExpression*) _tmp237_);
20747 		_tmp239_ = _tmp238_;
20748 		_vala_ccode_node_unref0 (_tmp237_);
20749 		_vala_ccode_node_unref0 (_tmp235_);
20750 		cunrefisnull = _tmp239_;
20751 		_tmp240_ = cisnull;
20752 		_tmp241_ = cunrefisnull;
20753 		_tmp242_ = vala_ccode_binary_expression_new (VALA_CCODE_BINARY_OPERATOR_OR, (ValaCCodeExpression*) _tmp240_, (ValaCCodeExpression*) _tmp241_);
20754 		_vala_ccode_node_unref0 (cisnull);
20755 		cisnull = _tmp242_;
20756 		_vala_ccode_node_unref0 (cunrefisnull);
20757 		_vala_code_node_unref0 (cl);
20758 		_vala_code_node_unref0 (parent);
20759 	}
20760 	_tmp243_ = ccall;
20761 	_tmp244_ = cvar;
20762 	vala_ccode_function_call_insert_argument (_tmp243_, 0, _tmp244_);
20763 	_tmp245_ = vala_ccode_comma_expression_new ();
20764 	ccomma = _tmp245_;
20765 	_tmp249_ = self->priv->_context;
20766 	_tmp250_ = vala_code_context_get_profile (_tmp249_);
20767 	_tmp251_ = _tmp250_;
20768 	if (_tmp251_ == VALA_PROFILE_GOBJECT) {
20769 		ValaDataType* _tmp252_;
20770 		ValaTypeSymbol* _tmp253_;
20771 		ValaTypeSymbol* _tmp254_;
20772 		_tmp252_ = type;
20773 		_tmp253_ = vala_data_type_get_type_symbol (_tmp252_);
20774 		_tmp254_ = _tmp253_;
20775 		_tmp248_ = _tmp254_ != NULL;
20776 	} else {
20777 		_tmp248_ = FALSE;
20778 	}
20779 	if (_tmp248_) {
20780 		ValaDataType* _tmp255_;
20781 		ValaTypeSymbol* _tmp256_;
20782 		ValaTypeSymbol* _tmp257_;
20783 		_tmp255_ = type;
20784 		_tmp256_ = vala_data_type_get_type_symbol (_tmp255_);
20785 		_tmp257_ = _tmp256_;
20786 		_tmp247_ = !vala_is_reference_counting (_tmp257_);
20787 	} else {
20788 		_tmp247_ = FALSE;
20789 	}
20790 	if (_tmp247_) {
20791 		ValaDataType* _tmp258_;
20792 		ValaTypeSymbol* _tmp259_;
20793 		ValaTypeSymbol* _tmp260_;
20794 		ValaTypeSymbol* _tmp261_;
20795 		_tmp258_ = type;
20796 		_tmp259_ = vala_data_type_get_type_symbol (_tmp258_);
20797 		_tmp260_ = _tmp259_;
20798 		_tmp261_ = self->gstringbuilder_type;
20799 		_tmp246_ = vala_typesymbol_is_subtype_of (_tmp260_, _tmp261_);
20800 	} else {
20801 		_tmp246_ = FALSE;
20802 	}
20803 	if (_tmp246_) {
20804 		ValaCCodeFunctionCall* _tmp262_;
20805 		ValaCCodeConstant* _tmp263_;
20806 		ValaCCodeConstant* _tmp264_;
20807 		_tmp262_ = ccall;
20808 		_tmp263_ = vala_ccode_constant_new ("TRUE");
20809 		_tmp264_ = _tmp263_;
20810 		vala_ccode_function_call_add_argument (_tmp262_, (ValaCCodeExpression*) _tmp264_);
20811 		_vala_ccode_node_unref0 (_tmp264_);
20812 	} else {
20813 		gboolean _tmp265_ = FALSE;
20814 		ValaCodeContext* _tmp266_;
20815 		ValaProfile _tmp267_;
20816 		ValaProfile _tmp268_;
20817 		_tmp266_ = self->priv->_context;
20818 		_tmp267_ = vala_code_context_get_profile (_tmp266_);
20819 		_tmp268_ = _tmp267_;
20820 		if (_tmp268_ == VALA_PROFILE_GOBJECT) {
20821 			ValaDataType* _tmp269_;
20822 			ValaTypeSymbol* _tmp270_;
20823 			ValaTypeSymbol* _tmp271_;
20824 			ValaTypeSymbol* _tmp272_;
20825 			_tmp269_ = type;
20826 			_tmp270_ = vala_data_type_get_type_symbol (_tmp269_);
20827 			_tmp271_ = _tmp270_;
20828 			_tmp272_ = self->gthreadpool_type;
20829 			_tmp265_ = _tmp271_ == _tmp272_;
20830 		} else {
20831 			_tmp265_ = FALSE;
20832 		}
20833 		if (_tmp265_) {
20834 			ValaCCodeFunctionCall* _tmp273_;
20835 			ValaCCodeConstant* _tmp274_;
20836 			ValaCCodeConstant* _tmp275_;
20837 			ValaCCodeFunctionCall* _tmp276_;
20838 			ValaCCodeConstant* _tmp277_;
20839 			ValaCCodeConstant* _tmp278_;
20840 			_tmp273_ = ccall;
20841 			_tmp274_ = vala_ccode_constant_new ("FALSE");
20842 			_tmp275_ = _tmp274_;
20843 			vala_ccode_function_call_add_argument (_tmp273_, (ValaCCodeExpression*) _tmp275_);
20844 			_vala_ccode_node_unref0 (_tmp275_);
20845 			_tmp276_ = ccall;
20846 			_tmp277_ = vala_ccode_constant_new ("TRUE");
20847 			_tmp278_ = _tmp277_;
20848 			vala_ccode_function_call_add_argument (_tmp276_, (ValaCCodeExpression*) _tmp278_);
20849 			_vala_ccode_node_unref0 (_tmp278_);
20850 		} else {
20851 			ValaDataType* _tmp279_;
20852 			_tmp279_ = type;
20853 			if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp279_, VALA_TYPE_ARRAY_TYPE)) {
20854 				ValaArrayType* array_type = NULL;
20855 				ValaDataType* _tmp280_;
20856 				ValaArrayType* _tmp281_;
20857 				ValaArrayType* _tmp282_;
20858 				ValaDataType* _tmp283_;
20859 				ValaDataType* _tmp284_;
20860 				_tmp280_ = type;
20861 				_tmp281_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp280_, VALA_TYPE_ARRAY_TYPE, ValaArrayType));
20862 				array_type = _tmp281_;
20863 				_tmp282_ = array_type;
20864 				_tmp283_ = vala_array_type_get_element_type (_tmp282_);
20865 				_tmp284_ = _tmp283_;
20866 				if (vala_ccode_base_module_requires_destroy (_tmp284_)) {
20867 					ValaCCodeExpression* csizeexpr = NULL;
20868 					ValaList* _tmp285_;
20869 					ValaCCodeExpression* _tmp297_;
20870 					csizeexpr = NULL;
20871 					_tmp285_ = G_TYPE_CHECK_INSTANCE_CAST (value, VALA_TYPE_GLIB_VALUE, ValaGLibValue)->array_length_cvalues;
20872 					if (_tmp285_ != NULL) {
20873 						ValaCCodeExpression* _tmp286_;
20874 						_tmp286_ = vala_ccode_base_module_get_array_length_cvalue (self, value, -1);
20875 						_vala_ccode_node_unref0 (csizeexpr);
20876 						csizeexpr = _tmp286_;
20877 					} else {
20878 						if (vala_get_array_null_terminated (value)) {
20879 							ValaCCodeFunctionCall* len_call = NULL;
20880 							ValaCCodeIdentifier* _tmp287_;
20881 							ValaCCodeIdentifier* _tmp288_;
20882 							ValaCCodeFunctionCall* _tmp289_;
20883 							ValaCCodeFunctionCall* _tmp290_;
20884 							ValaCCodeFunctionCall* _tmp291_;
20885 							ValaCCodeExpression* _tmp292_;
20886 							ValaCCodeFunctionCall* _tmp293_;
20887 							ValaCCodeExpression* _tmp294_;
20888 							self->requires_array_length = TRUE;
20889 							_tmp287_ = vala_ccode_identifier_new ("_vala_array_length");
20890 							_tmp288_ = _tmp287_;
20891 							_tmp289_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp288_);
20892 							_tmp290_ = _tmp289_;
20893 							_vala_ccode_node_unref0 (_tmp288_);
20894 							len_call = _tmp290_;
20895 							_tmp291_ = len_call;
20896 							_tmp292_ = cvar;
20897 							vala_ccode_function_call_add_argument (_tmp291_, _tmp292_);
20898 							_tmp293_ = len_call;
20899 							_tmp294_ = _vala_ccode_node_ref0 ((ValaCCodeExpression*) _tmp293_);
20900 							_vala_ccode_node_unref0 (csizeexpr);
20901 							csizeexpr = _tmp294_;
20902 							_vala_ccode_node_unref0 (len_call);
20903 						} else {
20904 							ValaCCodeExpression* _tmp295_;
20905 							ValaCCodeExpression* _tmp296_;
20906 							_tmp295_ = vala_get_array_length_cexpr (value);
20907 							_tmp296_ = _vala_ccode_node_ref0 (_tmp295_);
20908 							_vala_ccode_node_unref0 (csizeexpr);
20909 							csizeexpr = _tmp296_;
20910 						}
20911 					}
20912 					_tmp297_ = csizeexpr;
20913 					if (_tmp297_ != NULL) {
20914 						ValaStruct* st = NULL;
20915 						ValaArrayType* _tmp298_;
20916 						ValaDataType* _tmp299_;
20917 						ValaDataType* _tmp300_;
20918 						ValaTypeSymbol* _tmp301_;
20919 						ValaTypeSymbol* _tmp302_;
20920 						gboolean _tmp303_ = FALSE;
20921 						ValaStruct* _tmp304_;
20922 						_tmp298_ = array_type;
20923 						_tmp299_ = vala_array_type_get_element_type (_tmp298_);
20924 						_tmp300_ = _tmp299_;
20925 						_tmp301_ = vala_data_type_get_type_symbol (_tmp300_);
20926 						_tmp302_ = _tmp301_;
20927 						st = G_TYPE_CHECK_INSTANCE_TYPE (_tmp302_, VALA_TYPE_STRUCT) ? ((ValaStruct*) _tmp302_) : NULL;
20928 						_tmp304_ = st;
20929 						if (_tmp304_ != NULL) {
20930 							ValaArrayType* _tmp305_;
20931 							ValaDataType* _tmp306_;
20932 							ValaDataType* _tmp307_;
20933 							gboolean _tmp308_;
20934 							gboolean _tmp309_;
20935 							_tmp305_ = array_type;
20936 							_tmp306_ = vala_array_type_get_element_type (_tmp305_);
20937 							_tmp307_ = _tmp306_;
20938 							_tmp308_ = vala_data_type_get_nullable (_tmp307_);
20939 							_tmp309_ = _tmp308_;
20940 							_tmp303_ = !_tmp309_;
20941 						} else {
20942 							_tmp303_ = FALSE;
20943 						}
20944 						if (_tmp303_) {
20945 							ValaCCodeFunctionCall* _tmp310_;
20946 							ValaStruct* _tmp311_;
20947 							gchar* _tmp312_;
20948 							gchar* _tmp313_;
20949 							ValaCCodeIdentifier* _tmp314_;
20950 							ValaCCodeIdentifier* _tmp315_;
20951 							ValaCCodeFunctionCall* _tmp316_;
20952 							ValaCCodeExpression* _tmp317_;
20953 							_tmp310_ = ccall;
20954 							_tmp311_ = st;
20955 							_tmp312_ = vala_ccode_base_module_append_struct_array_free (self, _tmp311_);
20956 							_tmp313_ = _tmp312_;
20957 							_tmp314_ = vala_ccode_identifier_new (_tmp313_);
20958 							_tmp315_ = _tmp314_;
20959 							vala_ccode_function_call_set_call (_tmp310_, (ValaCCodeExpression*) _tmp315_);
20960 							_vala_ccode_node_unref0 (_tmp315_);
20961 							_g_free0 (_tmp313_);
20962 							_tmp316_ = ccall;
20963 							_tmp317_ = csizeexpr;
20964 							vala_ccode_function_call_add_argument (_tmp316_, _tmp317_);
20965 						} else {
20966 							ValaDelegateType* _tmp318_;
20967 							ValaCCodeFile* _tmp319_;
20968 							ValaCCodeFunctionCall* _tmp320_;
20969 							ValaCCodeIdentifier* _tmp321_;
20970 							ValaCCodeIdentifier* _tmp322_;
20971 							ValaCCodeFunctionCall* _tmp323_;
20972 							ValaCCodeExpression* _tmp324_;
20973 							ValaCCodeFunctionCall* _tmp325_;
20974 							ValaArrayType* _tmp326_;
20975 							ValaDataType* _tmp327_;
20976 							ValaDataType* _tmp328_;
20977 							ValaCCodeExpression* _tmp329_;
20978 							ValaCCodeExpression* _tmp330_;
20979 							ValaDelegateType* _tmp331_;
20980 							gchar* _tmp332_;
20981 							gchar* _tmp333_;
20982 							ValaCCodeCastExpression* _tmp334_;
20983 							ValaCCodeCastExpression* _tmp335_;
20984 							self->requires_array_free = TRUE;
20985 							_tmp318_ = self->delegate_target_destroy_type;
20986 							_tmp319_ = self->cfile;
20987 							vala_ccode_base_module_generate_type_declaration (self, (ValaDataType*) _tmp318_, _tmp319_);
20988 							_tmp320_ = ccall;
20989 							_tmp321_ = vala_ccode_identifier_new ("_vala_array_free");
20990 							_tmp322_ = _tmp321_;
20991 							vala_ccode_function_call_set_call (_tmp320_, (ValaCCodeExpression*) _tmp322_);
20992 							_vala_ccode_node_unref0 (_tmp322_);
20993 							_tmp323_ = ccall;
20994 							_tmp324_ = csizeexpr;
20995 							vala_ccode_function_call_add_argument (_tmp323_, _tmp324_);
20996 							_tmp325_ = ccall;
20997 							_tmp326_ = array_type;
20998 							_tmp327_ = vala_array_type_get_element_type (_tmp326_);
20999 							_tmp328_ = _tmp327_;
21000 							_tmp329_ = vala_ccode_base_module_get_destroy_func_expression (self, _tmp328_, FALSE);
21001 							_tmp330_ = _tmp329_;
21002 							_tmp331_ = self->delegate_target_destroy_type;
21003 							_tmp332_ = vala_get_ccode_name ((ValaCodeNode*) _tmp331_);
21004 							_tmp333_ = _tmp332_;
21005 							_tmp334_ = vala_ccode_cast_expression_new (_tmp330_, _tmp333_);
21006 							_tmp335_ = _tmp334_;
21007 							vala_ccode_function_call_add_argument (_tmp325_, (ValaCCodeExpression*) _tmp335_);
21008 							_vala_ccode_node_unref0 (_tmp335_);
21009 							_g_free0 (_tmp333_);
21010 							_vala_ccode_node_unref0 (_tmp330_);
21011 						}
21012 					}
21013 					_vala_ccode_node_unref0 (csizeexpr);
21014 				}
21015 				_vala_code_node_unref0 (array_type);
21016 			}
21017 		}
21018 	}
21019 	_tmp336_ = ccomma;
21020 	_tmp337_ = ccall;
21021 	vala_ccode_comma_expression_append_expression (_tmp336_, (ValaCCodeExpression*) _tmp337_);
21022 	_tmp338_ = ccomma;
21023 	_tmp339_ = vala_ccode_constant_new ("NULL");
21024 	_tmp340_ = _tmp339_;
21025 	vala_ccode_comma_expression_append_expression (_tmp338_, (ValaCCodeExpression*) _tmp340_);
21026 	_vala_ccode_node_unref0 (_tmp340_);
21027 	_tmp341_ = cvar;
21028 	_tmp342_ = ccomma;
21029 	_tmp343_ = vala_ccode_assignment_new (_tmp341_, (ValaCCodeExpression*) _tmp342_, VALA_CCODE_ASSIGNMENT_OPERATOR_SIMPLE);
21030 	cassign = _tmp343_;
21031 	_tmp346_ = type;
21032 	_tmp347_ = vala_data_type_get_type_symbol (_tmp346_);
21033 	_tmp348_ = _tmp347_;
21034 	if (_tmp348_ != NULL) {
21035 		ValaDataType* _tmp349_;
21036 		ValaTypeSymbol* _tmp350_;
21037 		ValaTypeSymbol* _tmp351_;
21038 		_tmp349_ = type;
21039 		_tmp350_ = vala_data_type_get_type_symbol (_tmp349_);
21040 		_tmp351_ = _tmp350_;
21041 		_tmp345_ = !vala_is_reference_counting (_tmp351_);
21042 	} else {
21043 		_tmp345_ = FALSE;
21044 	}
21045 	if (_tmp345_) {
21046 		ValaDataType* _tmp352_;
21047 		ValaTypeSymbol* _tmp353_;
21048 		ValaTypeSymbol* _tmp354_;
21049 		gchar* _tmp355_;
21050 		gchar* _tmp356_;
21051 		_tmp352_ = type;
21052 		_tmp353_ = vala_data_type_get_type_symbol (_tmp352_);
21053 		_tmp354_ = _tmp353_;
21054 		_tmp355_ = vala_get_ccode_free_function (_tmp354_);
21055 		_tmp356_ = _tmp355_;
21056 		_tmp344_ = g_strcmp0 (_tmp356_, "g_free") == 0;
21057 		_g_free0 (_tmp356_);
21058 	} else {
21059 		_tmp344_ = FALSE;
21060 	}
21061 	uses_gfree = _tmp344_;
21062 	if (uses_gfree) {
21063 		_tmp357_ = TRUE;
21064 	} else {
21065 		ValaDataType* _tmp358_;
21066 		_tmp358_ = type;
21067 		_tmp357_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp358_, VALA_TYPE_ARRAY_TYPE);
21068 	}
21069 	uses_gfree = _tmp357_;
21070 	if (uses_gfree) {
21071 		result = (ValaCCodeExpression*) cassign;
21072 		_vala_ccode_node_unref0 (ccomma);
21073 		_vala_ccode_node_unref0 (cisnull);
21074 		_vala_ccode_node_unref0 (cexpr);
21075 		_vala_ccode_node_unref0 (ccall);
21076 		_vala_ccode_node_unref0 (cvar);
21077 		_vala_code_node_unref0 (type);
21078 		return result;
21079 	}
21080 	_tmp359_ = cisnull;
21081 	_tmp360_ = vala_ccode_constant_new ("NULL");
21082 	_tmp361_ = _tmp360_;
21083 	_tmp362_ = cassign;
21084 	_tmp363_ = vala_ccode_conditional_expression_new ((ValaCCodeExpression*) _tmp359_, (ValaCCodeExpression*) _tmp361_, (ValaCCodeExpression*) _tmp362_);
21085 	_tmp364_ = (ValaCCodeExpression*) _tmp363_;
21086 	_vala_ccode_node_unref0 (_tmp361_);
21087 	result = _tmp364_;
21088 	_vala_ccode_node_unref0 (cassign);
21089 	_vala_ccode_node_unref0 (ccomma);
21090 	_vala_ccode_node_unref0 (cisnull);
21091 	_vala_ccode_node_unref0 (cexpr);
21092 	_vala_ccode_node_unref0 (ccall);
21093 	_vala_ccode_node_unref0 (cvar);
21094 	_vala_code_node_unref0 (type);
21095 	return result;
21096 }
21097 
21098 ValaCCodeExpression*
vala_ccode_base_module_destroy_value(ValaCCodeBaseModule * self,ValaTargetValue * value,gboolean is_macro_definition)21099 vala_ccode_base_module_destroy_value (ValaCCodeBaseModule* self,
21100                                       ValaTargetValue* value,
21101                                       gboolean is_macro_definition)
21102 {
21103 	g_return_val_if_fail (self != NULL, NULL);
21104 	return VALA_CCODE_BASE_MODULE_GET_CLASS (self)->destroy_value (self, value, is_macro_definition);
21105 }
21106 
21107 static void
vala_ccode_base_module_real_visit_end_full_expression(ValaCodeVisitor * base,ValaExpression * expr)21108 vala_ccode_base_module_real_visit_end_full_expression (ValaCodeVisitor* base,
21109                                                        ValaExpression* expr)
21110 {
21111 	ValaCCodeBaseModule * self;
21112 	ValaArrayList* _tmp0_;
21113 	ValaArrayList* _tmp1_;
21114 	gint _tmp2_;
21115 	gint _tmp3_;
21116 	ValaLocalVariable* local_decl = NULL;
21117 	ValaCodeNode* _tmp4_;
21118 	ValaCodeNode* _tmp5_;
21119 	ValaLocalVariable* _tmp6_;
21120 	gboolean _tmp7_ = FALSE;
21121 	ValaLocalVariable* _tmp8_;
21122 	ValaArrayList* _tmp32_;
21123 	ValaArrayList* _tmp33_;
21124 	self = (ValaCCodeBaseModule*) base;
21125 	g_return_if_fail (expr != NULL);
21126 	_tmp0_ = vala_ccode_base_module_get_temp_ref_values (self);
21127 	_tmp1_ = _tmp0_;
21128 	_tmp2_ = vala_collection_get_size ((ValaCollection*) _tmp1_);
21129 	_tmp3_ = _tmp2_;
21130 	if (_tmp3_ == 0) {
21131 		return;
21132 	}
21133 	_tmp4_ = vala_code_node_get_parent_node ((ValaCodeNode*) expr);
21134 	_tmp5_ = _tmp4_;
21135 	_tmp6_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (_tmp5_, VALA_TYPE_LOCAL_VARIABLE) ? ((ValaLocalVariable*) _tmp5_) : NULL);
21136 	local_decl = _tmp6_;
21137 	_tmp8_ = local_decl;
21138 	if (_tmp8_ != NULL) {
21139 		ValaLocalVariable* _tmp9_;
21140 		ValaLocalVariable* _tmp10_;
21141 		ValaExpression* _tmp11_;
21142 		ValaExpression* _tmp12_;
21143 		_tmp9_ = local_decl;
21144 		_tmp10_ = local_decl;
21145 		_tmp11_ = vala_variable_get_initializer ((ValaVariable*) _tmp10_);
21146 		_tmp12_ = _tmp11_;
21147 		_tmp7_ = vala_ccode_base_module_is_simple_struct_creation (self, (ValaVariable*) _tmp9_, _tmp12_);
21148 	} else {
21149 		_tmp7_ = FALSE;
21150 	}
21151 	if (!_tmp7_) {
21152 		ValaTargetValue* _tmp13_;
21153 		ValaTargetValue* _tmp14_;
21154 		ValaTargetValue* _tmp15_;
21155 		ValaTargetValue* _tmp16_;
21156 		_tmp13_ = vala_expression_get_target_value (expr);
21157 		_tmp14_ = _tmp13_;
21158 		_tmp15_ = vala_ccode_base_module_store_temp_value (self, _tmp14_, (ValaCodeNode*) expr, NULL);
21159 		_tmp16_ = _tmp15_;
21160 		vala_expression_set_target_value (expr, _tmp16_);
21161 		_vala_target_value_unref0 (_tmp16_);
21162 	}
21163 	{
21164 		ValaArrayList* _value_list = NULL;
21165 		ValaArrayList* _tmp17_;
21166 		ValaArrayList* _tmp18_;
21167 		ValaArrayList* _tmp19_;
21168 		gint _value_size = 0;
21169 		ValaArrayList* _tmp20_;
21170 		gint _tmp21_;
21171 		gint _tmp22_;
21172 		gint _value_index = 0;
21173 		_tmp17_ = vala_ccode_base_module_get_temp_ref_values (self);
21174 		_tmp18_ = _tmp17_;
21175 		_tmp19_ = _vala_iterable_ref0 (_tmp18_);
21176 		_value_list = _tmp19_;
21177 		_tmp20_ = _value_list;
21178 		_tmp21_ = vala_collection_get_size ((ValaCollection*) _tmp20_);
21179 		_tmp22_ = _tmp21_;
21180 		_value_size = _tmp22_;
21181 		_value_index = -1;
21182 		while (TRUE) {
21183 			gint _tmp23_;
21184 			gint _tmp24_;
21185 			ValaTargetValue* value = NULL;
21186 			ValaArrayList* _tmp25_;
21187 			gpointer _tmp26_;
21188 			ValaCCodeFunction* _tmp27_;
21189 			ValaCCodeFunction* _tmp28_;
21190 			ValaTargetValue* _tmp29_;
21191 			ValaCCodeExpression* _tmp30_;
21192 			ValaCCodeExpression* _tmp31_;
21193 			_value_index = _value_index + 1;
21194 			_tmp23_ = _value_index;
21195 			_tmp24_ = _value_size;
21196 			if (!(_tmp23_ < _tmp24_)) {
21197 				break;
21198 			}
21199 			_tmp25_ = _value_list;
21200 			_tmp26_ = vala_list_get ((ValaList*) _tmp25_, _value_index);
21201 			value = (ValaTargetValue*) _tmp26_;
21202 			_tmp27_ = vala_ccode_base_module_get_ccode (self);
21203 			_tmp28_ = _tmp27_;
21204 			_tmp29_ = value;
21205 			_tmp30_ = vala_ccode_base_module_destroy_value (self, _tmp29_, FALSE);
21206 			_tmp31_ = _tmp30_;
21207 			vala_ccode_function_add_expression (_tmp28_, _tmp31_);
21208 			_vala_ccode_node_unref0 (_tmp31_);
21209 			_vala_target_value_unref0 (value);
21210 		}
21211 		_vala_iterable_unref0 (_value_list);
21212 	}
21213 	_tmp32_ = vala_ccode_base_module_get_temp_ref_values (self);
21214 	_tmp33_ = _tmp32_;
21215 	vala_collection_clear ((ValaCollection*) _tmp33_);
21216 	_vala_code_node_unref0 (local_decl);
21217 }
21218 
21219 void
vala_ccode_base_module_emit_temp_var(ValaCCodeBaseModule * self,ValaLocalVariable * local,gboolean on_error)21220 vala_ccode_base_module_emit_temp_var (ValaCCodeBaseModule* self,
21221                                       ValaLocalVariable* local,
21222                                       gboolean on_error)
21223 {
21224 	gboolean _tmp0_ = FALSE;
21225 	const gchar* _tmp1_;
21226 	const gchar* _tmp2_;
21227 	gboolean init = FALSE;
21228 	g_return_if_fail (self != NULL);
21229 	g_return_if_fail (local != NULL);
21230 	_tmp1_ = vala_symbol_get_name ((ValaSymbol*) local);
21231 	_tmp2_ = _tmp1_;
21232 	if (!g_str_has_prefix (_tmp2_, "*")) {
21233 		gboolean _tmp3_;
21234 		gboolean _tmp4_;
21235 		_tmp3_ = vala_local_variable_get_init (local);
21236 		_tmp4_ = _tmp3_;
21237 		_tmp0_ = _tmp4_;
21238 	} else {
21239 		_tmp0_ = FALSE;
21240 	}
21241 	init = _tmp0_;
21242 	if (vala_ccode_base_module_is_in_coroutine (self)) {
21243 		ValaCCodeStruct* _tmp5_;
21244 		ValaDataType* _tmp6_;
21245 		ValaDataType* _tmp7_;
21246 		gchar* _tmp8_;
21247 		gchar* _tmp9_;
21248 		const gchar* _tmp10_;
21249 		const gchar* _tmp11_;
21250 		ValaDataType* _tmp12_;
21251 		ValaDataType* _tmp13_;
21252 		ValaCCodeDeclaratorSuffix* _tmp14_;
21253 		ValaCCodeDeclaratorSuffix* _tmp15_;
21254 		_tmp5_ = self->closure_struct;
21255 		_tmp6_ = vala_variable_get_variable_type ((ValaVariable*) local);
21256 		_tmp7_ = _tmp6_;
21257 		_tmp8_ = vala_get_ccode_name ((ValaCodeNode*) _tmp7_);
21258 		_tmp9_ = _tmp8_;
21259 		_tmp10_ = vala_symbol_get_name ((ValaSymbol*) local);
21260 		_tmp11_ = _tmp10_;
21261 		_tmp12_ = vala_variable_get_variable_type ((ValaVariable*) local);
21262 		_tmp13_ = _tmp12_;
21263 		_tmp14_ = vala_ccode_base_module_get_ccode_declarator_suffix (self, _tmp13_);
21264 		_tmp15_ = _tmp14_;
21265 		vala_ccode_struct_add_field (_tmp5_, _tmp9_, _tmp11_, 0, _tmp15_);
21266 		_vala_ccode_declarator_suffix_unref0 (_tmp15_);
21267 		_g_free0 (_tmp9_);
21268 		if (init) {
21269 			ValaCCodeExpression* initializer = NULL;
21270 			ValaDataType* _tmp16_;
21271 			ValaDataType* _tmp17_;
21272 			ValaCCodeExpression* _tmp18_;
21273 			ValaCCodeExpression* _tmp19_;
21274 			_tmp16_ = vala_variable_get_variable_type ((ValaVariable*) local);
21275 			_tmp17_ = _tmp16_;
21276 			_tmp18_ = vala_ccode_base_module_default_value_for_type (self, _tmp17_, FALSE, on_error);
21277 			initializer = _tmp18_;
21278 			_tmp19_ = initializer;
21279 			if (_tmp19_ == NULL) {
21280 				ValaCCodeFile* _tmp20_;
21281 				ValaCCodeFunctionCall* memset_call = NULL;
21282 				ValaCCodeIdentifier* _tmp21_;
21283 				ValaCCodeIdentifier* _tmp22_;
21284 				ValaCCodeFunctionCall* _tmp23_;
21285 				ValaCCodeFunctionCall* _tmp24_;
21286 				ValaCCodeFunctionCall* _tmp25_;
21287 				const gchar* _tmp26_;
21288 				const gchar* _tmp27_;
21289 				ValaCCodeExpression* _tmp28_;
21290 				ValaCCodeExpression* _tmp29_;
21291 				ValaCCodeUnaryExpression* _tmp30_;
21292 				ValaCCodeUnaryExpression* _tmp31_;
21293 				ValaCCodeFunctionCall* _tmp32_;
21294 				ValaCCodeConstant* _tmp33_;
21295 				ValaCCodeConstant* _tmp34_;
21296 				ValaCCodeExpression* size = NULL;
21297 				ValaCCodeExpression* _tmp35_ = NULL;
21298 				ValaCCodeExpression* _tmp36_;
21299 				ValaCCodeFunctionCall* _tmp44_;
21300 				ValaCCodeExpression* _tmp45_;
21301 				ValaCCodeFunction* _tmp46_;
21302 				ValaCCodeFunction* _tmp47_;
21303 				ValaCCodeFunctionCall* _tmp48_;
21304 				_tmp20_ = self->cfile;
21305 				vala_ccode_file_add_include (_tmp20_, "string.h", FALSE);
21306 				_tmp21_ = vala_ccode_identifier_new ("memset");
21307 				_tmp22_ = _tmp21_;
21308 				_tmp23_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp22_);
21309 				_tmp24_ = _tmp23_;
21310 				_vala_ccode_node_unref0 (_tmp22_);
21311 				memset_call = _tmp24_;
21312 				_tmp25_ = memset_call;
21313 				_tmp26_ = vala_symbol_get_name ((ValaSymbol*) local);
21314 				_tmp27_ = _tmp26_;
21315 				_tmp28_ = vala_ccode_base_module_get_variable_cexpression (self, _tmp27_);
21316 				_tmp29_ = _tmp28_;
21317 				_tmp30_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, _tmp29_);
21318 				_tmp31_ = _tmp30_;
21319 				vala_ccode_function_call_add_argument (_tmp25_, (ValaCCodeExpression*) _tmp31_);
21320 				_vala_ccode_node_unref0 (_tmp31_);
21321 				_vala_ccode_node_unref0 (_tmp29_);
21322 				_tmp32_ = memset_call;
21323 				_tmp33_ = vala_ccode_constant_new ("0");
21324 				_tmp34_ = _tmp33_;
21325 				vala_ccode_function_call_add_argument (_tmp32_, (ValaCCodeExpression*) _tmp34_);
21326 				_vala_ccode_node_unref0 (_tmp34_);
21327 				size = NULL;
21328 				vala_ccode_base_module_requires_memset_init (self, (ValaVariable*) local, &_tmp35_);
21329 				_vala_ccode_node_unref0 (size);
21330 				size = _tmp35_;
21331 				_tmp36_ = size;
21332 				if (_tmp36_ == NULL) {
21333 					ValaDataType* _tmp37_;
21334 					ValaDataType* _tmp38_;
21335 					gchar* _tmp39_;
21336 					gchar* _tmp40_;
21337 					gchar* _tmp41_;
21338 					gchar* _tmp42_;
21339 					ValaCCodeIdentifier* _tmp43_;
21340 					_tmp37_ = vala_variable_get_variable_type ((ValaVariable*) local);
21341 					_tmp38_ = _tmp37_;
21342 					_tmp39_ = vala_get_ccode_name ((ValaCodeNode*) _tmp38_);
21343 					_tmp40_ = _tmp39_;
21344 					_tmp41_ = g_strdup_printf ("sizeof (%s)", _tmp40_);
21345 					_tmp42_ = _tmp41_;
21346 					_tmp43_ = vala_ccode_identifier_new (_tmp42_);
21347 					_vala_ccode_node_unref0 (size);
21348 					size = (ValaCCodeExpression*) _tmp43_;
21349 					_g_free0 (_tmp42_);
21350 					_g_free0 (_tmp40_);
21351 				}
21352 				_tmp44_ = memset_call;
21353 				_tmp45_ = size;
21354 				vala_ccode_function_call_add_argument (_tmp44_, _tmp45_);
21355 				_tmp46_ = vala_ccode_base_module_get_ccode (self);
21356 				_tmp47_ = _tmp46_;
21357 				_tmp48_ = memset_call;
21358 				vala_ccode_function_add_expression (_tmp47_, (ValaCCodeExpression*) _tmp48_);
21359 				_vala_ccode_node_unref0 (size);
21360 				_vala_ccode_node_unref0 (memset_call);
21361 			} else {
21362 				ValaCCodeFunction* _tmp49_;
21363 				ValaCCodeFunction* _tmp50_;
21364 				const gchar* _tmp51_;
21365 				const gchar* _tmp52_;
21366 				ValaCCodeExpression* _tmp53_;
21367 				ValaCCodeExpression* _tmp54_;
21368 				ValaCCodeExpression* _tmp55_;
21369 				_tmp49_ = vala_ccode_base_module_get_ccode (self);
21370 				_tmp50_ = _tmp49_;
21371 				_tmp51_ = vala_symbol_get_name ((ValaSymbol*) local);
21372 				_tmp52_ = _tmp51_;
21373 				_tmp53_ = vala_ccode_base_module_get_variable_cexpression (self, _tmp52_);
21374 				_tmp54_ = _tmp53_;
21375 				_tmp55_ = initializer;
21376 				vala_ccode_function_add_assignment (_tmp50_, _tmp54_, _tmp55_);
21377 				_vala_ccode_node_unref0 (_tmp54_);
21378 			}
21379 			_vala_ccode_node_unref0 (initializer);
21380 		}
21381 	} else {
21382 		ValaCCodeVariableDeclarator* cvar = NULL;
21383 		const gchar* _tmp56_;
21384 		const gchar* _tmp57_;
21385 		ValaDataType* _tmp58_;
21386 		ValaDataType* _tmp59_;
21387 		ValaCCodeDeclaratorSuffix* _tmp60_;
21388 		ValaCCodeDeclaratorSuffix* _tmp61_;
21389 		ValaCCodeVariableDeclarator* _tmp62_;
21390 		ValaCCodeVariableDeclarator* _tmp63_;
21391 		ValaCCodeExpression* size = NULL;
21392 		gboolean _tmp64_ = FALSE;
21393 		ValaCCodeFunction* _tmp96_;
21394 		ValaCCodeFunction* _tmp97_;
21395 		ValaDataType* _tmp98_;
21396 		ValaDataType* _tmp99_;
21397 		gchar* _tmp100_;
21398 		gchar* _tmp101_;
21399 		ValaCCodeVariableDeclarator* _tmp102_;
21400 		_tmp56_ = vala_symbol_get_name ((ValaSymbol*) local);
21401 		_tmp57_ = _tmp56_;
21402 		_tmp58_ = vala_variable_get_variable_type ((ValaVariable*) local);
21403 		_tmp59_ = _tmp58_;
21404 		_tmp60_ = vala_ccode_base_module_get_ccode_declarator_suffix (self, _tmp59_);
21405 		_tmp61_ = _tmp60_;
21406 		_tmp62_ = vala_ccode_variable_declarator_new (_tmp57_, NULL, _tmp61_);
21407 		_tmp63_ = _tmp62_;
21408 		_vala_ccode_declarator_suffix_unref0 (_tmp61_);
21409 		cvar = _tmp63_;
21410 		size = NULL;
21411 		if (init) {
21412 			ValaCCodeExpression* _tmp65_ = NULL;
21413 			gboolean _tmp66_;
21414 			_tmp66_ = vala_ccode_base_module_requires_memset_init (self, (ValaVariable*) local, &_tmp65_);
21415 			_vala_ccode_node_unref0 (size);
21416 			size = _tmp65_;
21417 			_tmp64_ = !_tmp66_;
21418 		} else {
21419 			_tmp64_ = FALSE;
21420 		}
21421 		if (_tmp64_) {
21422 			ValaCCodeVariableDeclarator* _tmp67_;
21423 			ValaDataType* _tmp68_;
21424 			ValaDataType* _tmp69_;
21425 			ValaCCodeExpression* _tmp70_;
21426 			ValaCCodeExpression* _tmp71_;
21427 			ValaCCodeVariableDeclarator* _tmp72_;
21428 			_tmp67_ = cvar;
21429 			_tmp68_ = vala_variable_get_variable_type ((ValaVariable*) local);
21430 			_tmp69_ = _tmp68_;
21431 			_tmp70_ = vala_ccode_base_module_default_value_for_type (self, _tmp69_, TRUE, on_error);
21432 			_tmp71_ = _tmp70_;
21433 			vala_ccode_variable_declarator_set_initializer (_tmp67_, _tmp71_);
21434 			_vala_ccode_node_unref0 (_tmp71_);
21435 			_tmp72_ = cvar;
21436 			vala_ccode_variable_declarator_set_init0 (_tmp72_, TRUE);
21437 		} else {
21438 			gboolean _tmp73_ = FALSE;
21439 			gboolean _tmp74_ = FALSE;
21440 			if (init) {
21441 				ValaCCodeExpression* _tmp75_;
21442 				_tmp75_ = size;
21443 				_tmp74_ = _tmp75_ != NULL;
21444 			} else {
21445 				_tmp74_ = FALSE;
21446 			}
21447 			if (_tmp74_) {
21448 				ValaExpression* _tmp76_;
21449 				ValaExpression* _tmp77_;
21450 				_tmp76_ = vala_variable_get_initializer ((ValaVariable*) local);
21451 				_tmp77_ = _tmp76_;
21452 				_tmp73_ = _tmp77_ == NULL;
21453 			} else {
21454 				_tmp73_ = FALSE;
21455 			}
21456 			if (_tmp73_) {
21457 				ValaCCodeFile* _tmp78_;
21458 				ValaCCodeFunctionCall* memset_call = NULL;
21459 				ValaCCodeIdentifier* _tmp79_;
21460 				ValaCCodeIdentifier* _tmp80_;
21461 				ValaCCodeFunctionCall* _tmp81_;
21462 				ValaCCodeFunctionCall* _tmp82_;
21463 				ValaCCodeFunctionCall* _tmp83_;
21464 				const gchar* _tmp84_;
21465 				const gchar* _tmp85_;
21466 				ValaCCodeExpression* _tmp86_;
21467 				ValaCCodeExpression* _tmp87_;
21468 				ValaCCodeFunctionCall* _tmp88_;
21469 				ValaCCodeConstant* _tmp89_;
21470 				ValaCCodeConstant* _tmp90_;
21471 				ValaCCodeFunctionCall* _tmp91_;
21472 				ValaCCodeExpression* _tmp92_;
21473 				ValaCCodeFunction* _tmp93_;
21474 				ValaCCodeFunction* _tmp94_;
21475 				ValaCCodeFunctionCall* _tmp95_;
21476 				_tmp78_ = self->cfile;
21477 				vala_ccode_file_add_include (_tmp78_, "string.h", FALSE);
21478 				_tmp79_ = vala_ccode_identifier_new ("memset");
21479 				_tmp80_ = _tmp79_;
21480 				_tmp81_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp80_);
21481 				_tmp82_ = _tmp81_;
21482 				_vala_ccode_node_unref0 (_tmp80_);
21483 				memset_call = _tmp82_;
21484 				_tmp83_ = memset_call;
21485 				_tmp84_ = vala_symbol_get_name ((ValaSymbol*) local);
21486 				_tmp85_ = _tmp84_;
21487 				_tmp86_ = vala_ccode_base_module_get_variable_cexpression (self, _tmp85_);
21488 				_tmp87_ = _tmp86_;
21489 				vala_ccode_function_call_add_argument (_tmp83_, _tmp87_);
21490 				_vala_ccode_node_unref0 (_tmp87_);
21491 				_tmp88_ = memset_call;
21492 				_tmp89_ = vala_ccode_constant_new ("0");
21493 				_tmp90_ = _tmp89_;
21494 				vala_ccode_function_call_add_argument (_tmp88_, (ValaCCodeExpression*) _tmp90_);
21495 				_vala_ccode_node_unref0 (_tmp90_);
21496 				_tmp91_ = memset_call;
21497 				_tmp92_ = size;
21498 				vala_ccode_function_call_add_argument (_tmp91_, _tmp92_);
21499 				_tmp93_ = vala_ccode_base_module_get_ccode (self);
21500 				_tmp94_ = _tmp93_;
21501 				_tmp95_ = memset_call;
21502 				vala_ccode_function_add_expression (_tmp94_, (ValaCCodeExpression*) _tmp95_);
21503 				_vala_ccode_node_unref0 (memset_call);
21504 			}
21505 		}
21506 		_tmp96_ = vala_ccode_base_module_get_ccode (self);
21507 		_tmp97_ = _tmp96_;
21508 		_tmp98_ = vala_variable_get_variable_type ((ValaVariable*) local);
21509 		_tmp99_ = _tmp98_;
21510 		_tmp100_ = vala_get_ccode_name ((ValaCodeNode*) _tmp99_);
21511 		_tmp101_ = _tmp100_;
21512 		_tmp102_ = cvar;
21513 		vala_ccode_function_add_declaration (_tmp97_, _tmp101_, (ValaCCodeDeclarator*) _tmp102_, 0);
21514 		_g_free0 (_tmp101_);
21515 		_vala_ccode_node_unref0 (size);
21516 		_vala_ccode_node_unref0 (cvar);
21517 	}
21518 }
21519 
21520 static void
vala_ccode_base_module_real_visit_expression_statement(ValaCodeVisitor * base,ValaExpressionStatement * stmt)21521 vala_ccode_base_module_real_visit_expression_statement (ValaCodeVisitor* base,
21522                                                         ValaExpressionStatement* stmt)
21523 {
21524 	ValaCCodeBaseModule * self;
21525 	ValaExpression* _tmp0_;
21526 	ValaExpression* _tmp1_;
21527 	gboolean _tmp2_;
21528 	gboolean _tmp3_;
21529 	gboolean _tmp19_ = FALSE;
21530 	gboolean _tmp20_;
21531 	gboolean _tmp21_;
21532 	ValaArrayList* _tmp28_;
21533 	ValaArrayList* _tmp29_;
21534 	self = (ValaCCodeBaseModule*) base;
21535 	g_return_if_fail (stmt != NULL);
21536 	_tmp0_ = vala_expression_statement_get_expression (stmt);
21537 	_tmp1_ = _tmp0_;
21538 	_tmp2_ = vala_code_node_get_error ((ValaCodeNode*) _tmp1_);
21539 	_tmp3_ = _tmp2_;
21540 	if (_tmp3_) {
21541 		vala_code_node_set_error ((ValaCodeNode*) stmt, TRUE);
21542 		return;
21543 	}
21544 	{
21545 		ValaArrayList* _value_list = NULL;
21546 		ValaArrayList* _tmp4_;
21547 		ValaArrayList* _tmp5_;
21548 		ValaArrayList* _tmp6_;
21549 		gint _value_size = 0;
21550 		ValaArrayList* _tmp7_;
21551 		gint _tmp8_;
21552 		gint _tmp9_;
21553 		gint _value_index = 0;
21554 		_tmp4_ = vala_ccode_base_module_get_temp_ref_values (self);
21555 		_tmp5_ = _tmp4_;
21556 		_tmp6_ = _vala_iterable_ref0 (_tmp5_);
21557 		_value_list = _tmp6_;
21558 		_tmp7_ = _value_list;
21559 		_tmp8_ = vala_collection_get_size ((ValaCollection*) _tmp7_);
21560 		_tmp9_ = _tmp8_;
21561 		_value_size = _tmp9_;
21562 		_value_index = -1;
21563 		while (TRUE) {
21564 			gint _tmp10_;
21565 			gint _tmp11_;
21566 			ValaTargetValue* value = NULL;
21567 			ValaArrayList* _tmp12_;
21568 			gpointer _tmp13_;
21569 			ValaCCodeFunction* _tmp14_;
21570 			ValaCCodeFunction* _tmp15_;
21571 			ValaTargetValue* _tmp16_;
21572 			ValaCCodeExpression* _tmp17_;
21573 			ValaCCodeExpression* _tmp18_;
21574 			_value_index = _value_index + 1;
21575 			_tmp10_ = _value_index;
21576 			_tmp11_ = _value_size;
21577 			if (!(_tmp10_ < _tmp11_)) {
21578 				break;
21579 			}
21580 			_tmp12_ = _value_list;
21581 			_tmp13_ = vala_list_get ((ValaList*) _tmp12_, _value_index);
21582 			value = (ValaTargetValue*) _tmp13_;
21583 			_tmp14_ = vala_ccode_base_module_get_ccode (self);
21584 			_tmp15_ = _tmp14_;
21585 			_tmp16_ = value;
21586 			_tmp17_ = vala_ccode_base_module_destroy_value (self, _tmp16_, FALSE);
21587 			_tmp18_ = _tmp17_;
21588 			vala_ccode_function_add_expression (_tmp15_, _tmp18_);
21589 			_vala_ccode_node_unref0 (_tmp18_);
21590 			_vala_target_value_unref0 (value);
21591 		}
21592 		_vala_iterable_unref0 (_value_list);
21593 	}
21594 	_tmp20_ = vala_code_node_get_tree_can_fail ((ValaCodeNode*) stmt);
21595 	_tmp21_ = _tmp20_;
21596 	if (_tmp21_) {
21597 		ValaExpression* _tmp22_;
21598 		ValaExpression* _tmp23_;
21599 		gboolean _tmp24_;
21600 		gboolean _tmp25_;
21601 		_tmp22_ = vala_expression_statement_get_expression (stmt);
21602 		_tmp23_ = _tmp22_;
21603 		_tmp24_ = vala_code_node_get_tree_can_fail ((ValaCodeNode*) _tmp23_);
21604 		_tmp25_ = _tmp24_;
21605 		_tmp19_ = _tmp25_;
21606 	} else {
21607 		_tmp19_ = FALSE;
21608 	}
21609 	if (_tmp19_) {
21610 		ValaExpression* _tmp26_;
21611 		ValaExpression* _tmp27_;
21612 		_tmp26_ = vala_expression_statement_get_expression (stmt);
21613 		_tmp27_ = _tmp26_;
21614 		vala_ccode_base_module_add_simple_check (self, (ValaCodeNode*) _tmp27_, FALSE);
21615 	}
21616 	_tmp28_ = vala_ccode_base_module_get_temp_ref_values (self);
21617 	_tmp29_ = _tmp28_;
21618 	vala_collection_clear ((ValaCollection*) _tmp29_);
21619 }
21620 
21621 static void
vala_ccode_base_module_real_append_scope_free(ValaCCodeBaseModule * self,ValaSymbol * sym,ValaCodeNode * stop_at)21622 vala_ccode_base_module_real_append_scope_free (ValaCCodeBaseModule* self,
21623                                                ValaSymbol* sym,
21624                                                ValaCodeNode* stop_at)
21625 {
21626 	ValaBlock* b = NULL;
21627 	ValaBlock* _tmp0_;
21628 	ValaList* local_vars = NULL;
21629 	ValaBlock* _tmp1_;
21630 	ValaList* _tmp2_;
21631 	ValaList* _tmp3_;
21632 	ValaBlock* _tmp31_;
21633 	gboolean _tmp32_;
21634 	gboolean _tmp33_;
21635 	g_return_if_fail (sym != NULL);
21636 	_tmp0_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (sym, VALA_TYPE_BLOCK, ValaBlock));
21637 	b = _tmp0_;
21638 	_tmp1_ = b;
21639 	_tmp2_ = vala_block_get_local_variables (_tmp1_);
21640 	_tmp3_ = _vala_iterable_ref0 (_tmp2_);
21641 	local_vars = _tmp3_;
21642 	{
21643 		gint i = 0;
21644 		ValaList* _tmp4_;
21645 		gint _tmp5_;
21646 		gint _tmp6_;
21647 		_tmp4_ = local_vars;
21648 		_tmp5_ = vala_collection_get_size ((ValaCollection*) _tmp4_);
21649 		_tmp6_ = _tmp5_;
21650 		i = _tmp6_ - 1;
21651 		{
21652 			gboolean _tmp7_ = FALSE;
21653 			_tmp7_ = TRUE;
21654 			while (TRUE) {
21655 				ValaLocalVariable* local = NULL;
21656 				ValaList* _tmp9_;
21657 				gpointer _tmp10_;
21658 				gboolean _tmp11_ = FALSE;
21659 				gboolean _tmp12_ = FALSE;
21660 				gboolean _tmp13_ = FALSE;
21661 				ValaLocalVariable* _tmp14_;
21662 				gboolean _tmp15_;
21663 				gboolean _tmp16_;
21664 				if (!_tmp7_) {
21665 					gint _tmp8_;
21666 					_tmp8_ = i;
21667 					i = _tmp8_ - 1;
21668 				}
21669 				_tmp7_ = FALSE;
21670 				if (!(i >= 0)) {
21671 					break;
21672 				}
21673 				_tmp9_ = local_vars;
21674 				_tmp10_ = vala_list_get (_tmp9_, i);
21675 				local = (ValaLocalVariable*) _tmp10_;
21676 				_tmp14_ = local;
21677 				_tmp15_ = vala_code_node_get_unreachable ((ValaCodeNode*) _tmp14_);
21678 				_tmp16_ = _tmp15_;
21679 				if (!_tmp16_) {
21680 					ValaLocalVariable* _tmp17_;
21681 					gboolean _tmp18_;
21682 					gboolean _tmp19_;
21683 					_tmp17_ = local;
21684 					_tmp18_ = vala_symbol_get_active ((ValaSymbol*) _tmp17_);
21685 					_tmp19_ = _tmp18_;
21686 					_tmp13_ = _tmp19_;
21687 				} else {
21688 					_tmp13_ = FALSE;
21689 				}
21690 				if (_tmp13_) {
21691 					ValaLocalVariable* _tmp20_;
21692 					gboolean _tmp21_;
21693 					gboolean _tmp22_;
21694 					_tmp20_ = local;
21695 					_tmp21_ = vala_local_variable_get_captured (_tmp20_);
21696 					_tmp22_ = _tmp21_;
21697 					_tmp12_ = !_tmp22_;
21698 				} else {
21699 					_tmp12_ = FALSE;
21700 				}
21701 				if (_tmp12_) {
21702 					ValaLocalVariable* _tmp23_;
21703 					ValaDataType* _tmp24_;
21704 					ValaDataType* _tmp25_;
21705 					_tmp23_ = local;
21706 					_tmp24_ = vala_variable_get_variable_type ((ValaVariable*) _tmp23_);
21707 					_tmp25_ = _tmp24_;
21708 					_tmp11_ = vala_ccode_base_module_requires_destroy (_tmp25_);
21709 				} else {
21710 					_tmp11_ = FALSE;
21711 				}
21712 				if (_tmp11_) {
21713 					ValaCCodeFunction* _tmp26_;
21714 					ValaCCodeFunction* _tmp27_;
21715 					ValaLocalVariable* _tmp28_;
21716 					ValaCCodeExpression* _tmp29_;
21717 					ValaCCodeExpression* _tmp30_;
21718 					_tmp26_ = vala_ccode_base_module_get_ccode (self);
21719 					_tmp27_ = _tmp26_;
21720 					_tmp28_ = local;
21721 					_tmp29_ = vala_ccode_base_module_destroy_local (self, _tmp28_);
21722 					_tmp30_ = _tmp29_;
21723 					vala_ccode_function_add_expression (_tmp27_, _tmp30_);
21724 					_vala_ccode_node_unref0 (_tmp30_);
21725 				}
21726 				_vala_code_node_unref0 (local);
21727 			}
21728 		}
21729 	}
21730 	_tmp31_ = b;
21731 	_tmp32_ = vala_block_get_captured (_tmp31_);
21732 	_tmp33_ = _tmp32_;
21733 	if (_tmp33_) {
21734 		gint block_id = 0;
21735 		ValaBlock* _tmp34_;
21736 		ValaCCodeFunctionCall* data_unref = NULL;
21737 		gchar* _tmp35_;
21738 		gchar* _tmp36_;
21739 		ValaCCodeIdentifier* _tmp37_;
21740 		ValaCCodeIdentifier* _tmp38_;
21741 		ValaCCodeFunctionCall* _tmp39_;
21742 		ValaCCodeFunctionCall* _tmp40_;
21743 		ValaCCodeFunctionCall* _tmp41_;
21744 		gchar* _tmp42_;
21745 		gchar* _tmp43_;
21746 		ValaCCodeExpression* _tmp44_;
21747 		ValaCCodeExpression* _tmp45_;
21748 		ValaCCodeFunction* _tmp46_;
21749 		ValaCCodeFunction* _tmp47_;
21750 		ValaCCodeFunctionCall* _tmp48_;
21751 		ValaCCodeFunction* _tmp49_;
21752 		ValaCCodeFunction* _tmp50_;
21753 		gchar* _tmp51_;
21754 		gchar* _tmp52_;
21755 		ValaCCodeExpression* _tmp53_;
21756 		ValaCCodeExpression* _tmp54_;
21757 		ValaCCodeConstant* _tmp55_;
21758 		ValaCCodeConstant* _tmp56_;
21759 		_tmp34_ = b;
21760 		block_id = vala_ccode_base_module_get_block_id (self, _tmp34_);
21761 		_tmp35_ = g_strdup_printf ("block%d_data_unref", block_id);
21762 		_tmp36_ = _tmp35_;
21763 		_tmp37_ = vala_ccode_identifier_new (_tmp36_);
21764 		_tmp38_ = _tmp37_;
21765 		_tmp39_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp38_);
21766 		_tmp40_ = _tmp39_;
21767 		_vala_ccode_node_unref0 (_tmp38_);
21768 		_g_free0 (_tmp36_);
21769 		data_unref = _tmp40_;
21770 		_tmp41_ = data_unref;
21771 		_tmp42_ = g_strdup_printf ("_data%d_", block_id);
21772 		_tmp43_ = _tmp42_;
21773 		_tmp44_ = vala_ccode_base_module_get_variable_cexpression (self, _tmp43_);
21774 		_tmp45_ = _tmp44_;
21775 		vala_ccode_function_call_add_argument (_tmp41_, _tmp45_);
21776 		_vala_ccode_node_unref0 (_tmp45_);
21777 		_g_free0 (_tmp43_);
21778 		_tmp46_ = vala_ccode_base_module_get_ccode (self);
21779 		_tmp47_ = _tmp46_;
21780 		_tmp48_ = data_unref;
21781 		vala_ccode_function_add_expression (_tmp47_, (ValaCCodeExpression*) _tmp48_);
21782 		_tmp49_ = vala_ccode_base_module_get_ccode (self);
21783 		_tmp50_ = _tmp49_;
21784 		_tmp51_ = g_strdup_printf ("_data%d_", block_id);
21785 		_tmp52_ = _tmp51_;
21786 		_tmp53_ = vala_ccode_base_module_get_variable_cexpression (self, _tmp52_);
21787 		_tmp54_ = _tmp53_;
21788 		_tmp55_ = vala_ccode_constant_new ("NULL");
21789 		_tmp56_ = _tmp55_;
21790 		vala_ccode_function_add_assignment (_tmp50_, _tmp54_, (ValaCCodeExpression*) _tmp56_);
21791 		_vala_ccode_node_unref0 (_tmp56_);
21792 		_vala_ccode_node_unref0 (_tmp54_);
21793 		_g_free0 (_tmp52_);
21794 		_vala_ccode_node_unref0 (data_unref);
21795 	}
21796 	_vala_iterable_unref0 (local_vars);
21797 	_vala_code_node_unref0 (b);
21798 }
21799 
21800 void
vala_ccode_base_module_append_scope_free(ValaCCodeBaseModule * self,ValaSymbol * sym,ValaCodeNode * stop_at)21801 vala_ccode_base_module_append_scope_free (ValaCCodeBaseModule* self,
21802                                           ValaSymbol* sym,
21803                                           ValaCodeNode* stop_at)
21804 {
21805 	g_return_if_fail (self != NULL);
21806 	VALA_CCODE_BASE_MODULE_GET_CLASS (self)->append_scope_free (self, sym, stop_at);
21807 }
21808 
21809 void
vala_ccode_base_module_append_local_free(ValaCCodeBaseModule * self,ValaSymbol * sym,ValaStatement * jump_stmt,ValaCodeNode * stop_at)21810 vala_ccode_base_module_append_local_free (ValaCCodeBaseModule* self,
21811                                           ValaSymbol* sym,
21812                                           ValaStatement* jump_stmt,
21813                                           ValaCodeNode* stop_at)
21814 {
21815 	ValaBlock* b = NULL;
21816 	ValaBlock* _tmp0_;
21817 	gboolean _tmp19_ = FALSE;
21818 	ValaSymbol* _tmp23_;
21819 	ValaSymbol* _tmp24_;
21820 	g_return_if_fail (self != NULL);
21821 	g_return_if_fail (sym != NULL);
21822 	_tmp0_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (sym, VALA_TYPE_BLOCK, ValaBlock));
21823 	b = _tmp0_;
21824 	vala_ccode_base_module_append_scope_free (self, sym, stop_at);
21825 	if (G_TYPE_CHECK_INSTANCE_TYPE (jump_stmt, VALA_TYPE_BREAK_STATEMENT)) {
21826 		gboolean _tmp1_ = FALSE;
21827 		gboolean _tmp2_ = FALSE;
21828 		ValaBlock* _tmp3_;
21829 		ValaCodeNode* _tmp4_;
21830 		ValaCodeNode* _tmp5_;
21831 		_tmp3_ = b;
21832 		_tmp4_ = vala_code_node_get_parent_node ((ValaCodeNode*) _tmp3_);
21833 		_tmp5_ = _tmp4_;
21834 		if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp5_, VALA_TYPE_LOOP)) {
21835 			_tmp2_ = TRUE;
21836 		} else {
21837 			ValaBlock* _tmp6_;
21838 			ValaCodeNode* _tmp7_;
21839 			ValaCodeNode* _tmp8_;
21840 			_tmp6_ = b;
21841 			_tmp7_ = vala_code_node_get_parent_node ((ValaCodeNode*) _tmp6_);
21842 			_tmp8_ = _tmp7_;
21843 			_tmp2_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp8_, VALA_TYPE_FOREACH_STATEMENT);
21844 		}
21845 		if (_tmp2_) {
21846 			_tmp1_ = TRUE;
21847 		} else {
21848 			ValaBlock* _tmp9_;
21849 			ValaCodeNode* _tmp10_;
21850 			ValaCodeNode* _tmp11_;
21851 			_tmp9_ = b;
21852 			_tmp10_ = vala_code_node_get_parent_node ((ValaCodeNode*) _tmp9_);
21853 			_tmp11_ = _tmp10_;
21854 			_tmp1_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp11_, VALA_TYPE_SWITCH_STATEMENT);
21855 		}
21856 		if (_tmp1_) {
21857 			_vala_code_node_unref0 (b);
21858 			return;
21859 		}
21860 	} else {
21861 		if (G_TYPE_CHECK_INSTANCE_TYPE (jump_stmt, VALA_TYPE_CONTINUE_STATEMENT)) {
21862 			gboolean _tmp12_ = FALSE;
21863 			ValaBlock* _tmp13_;
21864 			ValaCodeNode* _tmp14_;
21865 			ValaCodeNode* _tmp15_;
21866 			_tmp13_ = b;
21867 			_tmp14_ = vala_code_node_get_parent_node ((ValaCodeNode*) _tmp13_);
21868 			_tmp15_ = _tmp14_;
21869 			if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp15_, VALA_TYPE_LOOP)) {
21870 				_tmp12_ = TRUE;
21871 			} else {
21872 				ValaBlock* _tmp16_;
21873 				ValaCodeNode* _tmp17_;
21874 				ValaCodeNode* _tmp18_;
21875 				_tmp16_ = b;
21876 				_tmp17_ = vala_code_node_get_parent_node ((ValaCodeNode*) _tmp16_);
21877 				_tmp18_ = _tmp17_;
21878 				_tmp12_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp18_, VALA_TYPE_FOREACH_STATEMENT);
21879 			}
21880 			if (_tmp12_) {
21881 				_vala_code_node_unref0 (b);
21882 				return;
21883 			}
21884 		}
21885 	}
21886 	if (stop_at != NULL) {
21887 		ValaBlock* _tmp20_;
21888 		ValaCodeNode* _tmp21_;
21889 		ValaCodeNode* _tmp22_;
21890 		_tmp20_ = b;
21891 		_tmp21_ = vala_code_node_get_parent_node ((ValaCodeNode*) _tmp20_);
21892 		_tmp22_ = _tmp21_;
21893 		_tmp19_ = _tmp22_ == stop_at;
21894 	} else {
21895 		_tmp19_ = FALSE;
21896 	}
21897 	if (_tmp19_) {
21898 		_vala_code_node_unref0 (b);
21899 		return;
21900 	}
21901 	_tmp23_ = vala_symbol_get_parent_symbol (sym);
21902 	_tmp24_ = _tmp23_;
21903 	if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp24_, VALA_TYPE_BLOCK)) {
21904 		ValaSymbol* _tmp25_;
21905 		ValaSymbol* _tmp26_;
21906 		_tmp25_ = vala_symbol_get_parent_symbol (sym);
21907 		_tmp26_ = _tmp25_;
21908 		vala_ccode_base_module_append_local_free (self, _tmp26_, jump_stmt, stop_at);
21909 	} else {
21910 		ValaSymbol* _tmp27_;
21911 		ValaSymbol* _tmp28_;
21912 		_tmp27_ = vala_symbol_get_parent_symbol (sym);
21913 		_tmp28_ = _tmp27_;
21914 		if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp28_, VALA_TYPE_METHOD)) {
21915 			ValaSymbol* _tmp29_;
21916 			ValaSymbol* _tmp30_;
21917 			_tmp29_ = vala_symbol_get_parent_symbol (sym);
21918 			_tmp30_ = _tmp29_;
21919 			vala_ccode_base_module_append_param_free (self, G_TYPE_CHECK_INSTANCE_CAST (_tmp30_, VALA_TYPE_METHOD, ValaMethod));
21920 		} else {
21921 			ValaSymbol* _tmp31_;
21922 			ValaSymbol* _tmp32_;
21923 			_tmp31_ = vala_symbol_get_parent_symbol (sym);
21924 			_tmp32_ = _tmp31_;
21925 			if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp32_, VALA_TYPE_PROPERTY_ACCESSOR)) {
21926 				ValaPropertyAccessor* acc = NULL;
21927 				ValaSymbol* _tmp33_;
21928 				ValaSymbol* _tmp34_;
21929 				ValaPropertyAccessor* _tmp35_;
21930 				gboolean _tmp36_ = FALSE;
21931 				ValaPropertyAccessor* _tmp37_;
21932 				ValaParameter* _tmp38_;
21933 				ValaParameter* _tmp39_;
21934 				_tmp33_ = vala_symbol_get_parent_symbol (sym);
21935 				_tmp34_ = _tmp33_;
21936 				_tmp35_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp34_, VALA_TYPE_PROPERTY_ACCESSOR, ValaPropertyAccessor));
21937 				acc = _tmp35_;
21938 				_tmp37_ = acc;
21939 				_tmp38_ = vala_property_accessor_get_value_parameter (_tmp37_);
21940 				_tmp39_ = _tmp38_;
21941 				if (_tmp39_ != NULL) {
21942 					ValaPropertyAccessor* _tmp40_;
21943 					ValaParameter* _tmp41_;
21944 					ValaParameter* _tmp42_;
21945 					ValaDataType* _tmp43_;
21946 					ValaDataType* _tmp44_;
21947 					_tmp40_ = acc;
21948 					_tmp41_ = vala_property_accessor_get_value_parameter (_tmp40_);
21949 					_tmp42_ = _tmp41_;
21950 					_tmp43_ = vala_variable_get_variable_type ((ValaVariable*) _tmp42_);
21951 					_tmp44_ = _tmp43_;
21952 					_tmp36_ = vala_ccode_base_module_requires_destroy (_tmp44_);
21953 				} else {
21954 					_tmp36_ = FALSE;
21955 				}
21956 				if (_tmp36_) {
21957 					ValaCCodeFunction* _tmp45_;
21958 					ValaCCodeFunction* _tmp46_;
21959 					ValaPropertyAccessor* _tmp47_;
21960 					ValaParameter* _tmp48_;
21961 					ValaParameter* _tmp49_;
21962 					ValaCCodeExpression* _tmp50_;
21963 					ValaCCodeExpression* _tmp51_;
21964 					_tmp45_ = vala_ccode_base_module_get_ccode (self);
21965 					_tmp46_ = _tmp45_;
21966 					_tmp47_ = acc;
21967 					_tmp48_ = vala_property_accessor_get_value_parameter (_tmp47_);
21968 					_tmp49_ = _tmp48_;
21969 					_tmp50_ = vala_ccode_base_module_destroy_parameter (self, _tmp49_);
21970 					_tmp51_ = _tmp50_;
21971 					vala_ccode_function_add_expression (_tmp46_, _tmp51_);
21972 					_vala_ccode_node_unref0 (_tmp51_);
21973 				}
21974 				_vala_code_node_unref0 (acc);
21975 			}
21976 		}
21977 	}
21978 	_vala_code_node_unref0 (b);
21979 }
21980 
21981 static void
vala_ccode_base_module_append_param_free(ValaCCodeBaseModule * self,ValaMethod * m)21982 vala_ccode_base_module_append_param_free (ValaCCodeBaseModule* self,
21983                                           ValaMethod* m)
21984 {
21985 	g_return_if_fail (self != NULL);
21986 	g_return_if_fail (m != NULL);
21987 	{
21988 		ValaList* _param_list = NULL;
21989 		ValaList* _tmp0_;
21990 		ValaList* _tmp1_;
21991 		gint _param_size = 0;
21992 		ValaList* _tmp2_;
21993 		gint _tmp3_;
21994 		gint _tmp4_;
21995 		gint _param_index = 0;
21996 		_tmp0_ = vala_callable_get_parameters ((ValaCallable*) m);
21997 		_tmp1_ = _vala_iterable_ref0 (_tmp0_);
21998 		_param_list = _tmp1_;
21999 		_tmp2_ = _param_list;
22000 		_tmp3_ = vala_collection_get_size ((ValaCollection*) _tmp2_);
22001 		_tmp4_ = _tmp3_;
22002 		_param_size = _tmp4_;
22003 		_param_index = -1;
22004 		while (TRUE) {
22005 			gint _tmp5_;
22006 			gint _tmp6_;
22007 			ValaParameter* param = NULL;
22008 			ValaList* _tmp7_;
22009 			gpointer _tmp8_;
22010 			gboolean _tmp9_ = FALSE;
22011 			gboolean _tmp10_ = FALSE;
22012 			gboolean _tmp11_ = FALSE;
22013 			gboolean _tmp12_ = FALSE;
22014 			ValaParameter* _tmp13_;
22015 			gboolean _tmp14_;
22016 			gboolean _tmp15_;
22017 			_param_index = _param_index + 1;
22018 			_tmp5_ = _param_index;
22019 			_tmp6_ = _param_size;
22020 			if (!(_tmp5_ < _tmp6_)) {
22021 				break;
22022 			}
22023 			_tmp7_ = _param_list;
22024 			_tmp8_ = vala_list_get (_tmp7_, _param_index);
22025 			param = (ValaParameter*) _tmp8_;
22026 			_tmp13_ = param;
22027 			_tmp14_ = vala_parameter_get_captured (_tmp13_);
22028 			_tmp15_ = _tmp14_;
22029 			if (!_tmp15_) {
22030 				ValaParameter* _tmp16_;
22031 				gboolean _tmp17_;
22032 				gboolean _tmp18_;
22033 				_tmp16_ = param;
22034 				_tmp17_ = vala_parameter_get_ellipsis (_tmp16_);
22035 				_tmp18_ = _tmp17_;
22036 				_tmp12_ = !_tmp18_;
22037 			} else {
22038 				_tmp12_ = FALSE;
22039 			}
22040 			if (_tmp12_) {
22041 				ValaParameter* _tmp19_;
22042 				gboolean _tmp20_;
22043 				gboolean _tmp21_;
22044 				_tmp19_ = param;
22045 				_tmp20_ = vala_parameter_get_params_array (_tmp19_);
22046 				_tmp21_ = _tmp20_;
22047 				_tmp11_ = !_tmp21_;
22048 			} else {
22049 				_tmp11_ = FALSE;
22050 			}
22051 			if (_tmp11_) {
22052 				ValaParameter* _tmp22_;
22053 				ValaDataType* _tmp23_;
22054 				ValaDataType* _tmp24_;
22055 				_tmp22_ = param;
22056 				_tmp23_ = vala_variable_get_variable_type ((ValaVariable*) _tmp22_);
22057 				_tmp24_ = _tmp23_;
22058 				_tmp10_ = vala_ccode_base_module_requires_destroy (_tmp24_);
22059 			} else {
22060 				_tmp10_ = FALSE;
22061 			}
22062 			if (_tmp10_) {
22063 				ValaParameter* _tmp25_;
22064 				ValaParameterDirection _tmp26_;
22065 				ValaParameterDirection _tmp27_;
22066 				_tmp25_ = param;
22067 				_tmp26_ = vala_parameter_get_direction (_tmp25_);
22068 				_tmp27_ = _tmp26_;
22069 				_tmp9_ = _tmp27_ == VALA_PARAMETER_DIRECTION_IN;
22070 			} else {
22071 				_tmp9_ = FALSE;
22072 			}
22073 			if (_tmp9_) {
22074 				ValaCCodeFunction* _tmp28_;
22075 				ValaCCodeFunction* _tmp29_;
22076 				ValaParameter* _tmp30_;
22077 				ValaCCodeExpression* _tmp31_;
22078 				ValaCCodeExpression* _tmp32_;
22079 				_tmp28_ = vala_ccode_base_module_get_ccode (self);
22080 				_tmp29_ = _tmp28_;
22081 				_tmp30_ = param;
22082 				_tmp31_ = vala_ccode_base_module_destroy_parameter (self, _tmp30_);
22083 				_tmp32_ = _tmp31_;
22084 				vala_ccode_function_add_expression (_tmp29_, _tmp32_);
22085 				_vala_ccode_node_unref0 (_tmp32_);
22086 			}
22087 			_vala_code_node_unref0 (param);
22088 		}
22089 		_vala_iterable_unref0 (_param_list);
22090 	}
22091 }
22092 
22093 void
vala_ccode_base_module_append_out_param_free(ValaCCodeBaseModule * self,ValaMethod * m)22094 vala_ccode_base_module_append_out_param_free (ValaCCodeBaseModule* self,
22095                                               ValaMethod* m)
22096 {
22097 	g_return_if_fail (self != NULL);
22098 	if (m == NULL) {
22099 		return;
22100 	}
22101 	{
22102 		ValaList* _param_list = NULL;
22103 		ValaList* _tmp0_;
22104 		ValaList* _tmp1_;
22105 		gint _param_size = 0;
22106 		ValaList* _tmp2_;
22107 		gint _tmp3_;
22108 		gint _tmp4_;
22109 		gint _param_index = 0;
22110 		_tmp0_ = vala_callable_get_parameters ((ValaCallable*) m);
22111 		_tmp1_ = _vala_iterable_ref0 (_tmp0_);
22112 		_param_list = _tmp1_;
22113 		_tmp2_ = _param_list;
22114 		_tmp3_ = vala_collection_get_size ((ValaCollection*) _tmp2_);
22115 		_tmp4_ = _tmp3_;
22116 		_param_size = _tmp4_;
22117 		_param_index = -1;
22118 		while (TRUE) {
22119 			gint _tmp5_;
22120 			gint _tmp6_;
22121 			ValaParameter* param = NULL;
22122 			ValaList* _tmp7_;
22123 			gpointer _tmp8_;
22124 			gboolean _tmp9_ = FALSE;
22125 			ValaParameter* _tmp10_;
22126 			ValaParameterDirection _tmp11_;
22127 			ValaParameterDirection _tmp12_;
22128 			_param_index = _param_index + 1;
22129 			_tmp5_ = _param_index;
22130 			_tmp6_ = _param_size;
22131 			if (!(_tmp5_ < _tmp6_)) {
22132 				break;
22133 			}
22134 			_tmp7_ = _param_list;
22135 			_tmp8_ = vala_list_get (_tmp7_, _param_index);
22136 			param = (ValaParameter*) _tmp8_;
22137 			_tmp10_ = param;
22138 			_tmp11_ = vala_parameter_get_direction (_tmp10_);
22139 			_tmp12_ = _tmp11_;
22140 			if (_tmp12_ == VALA_PARAMETER_DIRECTION_OUT) {
22141 				ValaParameter* _tmp13_;
22142 				ValaDataType* _tmp14_;
22143 				ValaDataType* _tmp15_;
22144 				_tmp13_ = param;
22145 				_tmp14_ = vala_variable_get_variable_type ((ValaVariable*) _tmp13_);
22146 				_tmp15_ = _tmp14_;
22147 				_tmp9_ = vala_data_type_is_disposable (_tmp15_);
22148 			} else {
22149 				_tmp9_ = FALSE;
22150 			}
22151 			if (_tmp9_) {
22152 				ValaCCodeFunction* _tmp16_;
22153 				ValaCCodeFunction* _tmp17_;
22154 				ValaParameter* _tmp18_;
22155 				ValaCCodeExpression* _tmp19_;
22156 				ValaCCodeExpression* _tmp20_;
22157 				_tmp16_ = vala_ccode_base_module_get_ccode (self);
22158 				_tmp17_ = _tmp16_;
22159 				_tmp18_ = param;
22160 				_tmp19_ = vala_ccode_base_module_destroy_parameter (self, _tmp18_);
22161 				_tmp20_ = _tmp19_;
22162 				vala_ccode_function_add_expression (_tmp17_, _tmp20_);
22163 				_vala_ccode_node_unref0 (_tmp20_);
22164 			}
22165 			_vala_code_node_unref0 (param);
22166 		}
22167 		_vala_iterable_unref0 (_param_list);
22168 	}
22169 }
22170 
22171 gboolean
vala_ccode_base_module_variable_accessible_in_finally(ValaCCodeBaseModule * self,ValaLocalVariable * local)22172 vala_ccode_base_module_variable_accessible_in_finally (ValaCCodeBaseModule* self,
22173                                                        ValaLocalVariable* local)
22174 {
22175 	ValaTryStatement* _tmp0_;
22176 	ValaTryStatement* _tmp1_;
22177 	ValaSymbol* sym = NULL;
22178 	ValaSymbol* _tmp2_;
22179 	ValaSymbol* _tmp3_;
22180 	ValaSymbol* _tmp4_;
22181 	gboolean result = FALSE;
22182 	g_return_val_if_fail (self != NULL, FALSE);
22183 	g_return_val_if_fail (local != NULL, FALSE);
22184 	_tmp0_ = vala_ccode_base_module_get_current_try (self);
22185 	_tmp1_ = _tmp0_;
22186 	if (_tmp1_ == NULL) {
22187 		result = FALSE;
22188 		return result;
22189 	}
22190 	_tmp2_ = vala_ccode_base_module_get_current_symbol (self);
22191 	_tmp3_ = _tmp2_;
22192 	_tmp4_ = _vala_code_node_ref0 (_tmp3_);
22193 	sym = _tmp4_;
22194 	while (TRUE) {
22195 		gboolean _tmp5_ = FALSE;
22196 		gboolean _tmp6_ = FALSE;
22197 		ValaSymbol* _tmp7_;
22198 		gboolean _tmp16_ = FALSE;
22199 		gboolean _tmp17_ = FALSE;
22200 		ValaSymbol* _tmp18_;
22201 		ValaCodeNode* _tmp19_;
22202 		ValaCodeNode* _tmp20_;
22203 		ValaSymbol* _tmp37_;
22204 		ValaSymbol* _tmp38_;
22205 		ValaSymbol* _tmp39_;
22206 		ValaSymbol* _tmp40_;
22207 		_tmp7_ = sym;
22208 		if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp7_, VALA_TYPE_METHOD)) {
22209 			_tmp6_ = TRUE;
22210 		} else {
22211 			ValaSymbol* _tmp8_;
22212 			_tmp8_ = sym;
22213 			_tmp6_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp8_, VALA_TYPE_PROPERTY_ACCESSOR);
22214 		}
22215 		if (!_tmp6_) {
22216 			ValaSymbol* _tmp9_;
22217 			ValaScope* _tmp10_;
22218 			ValaScope* _tmp11_;
22219 			const gchar* _tmp12_;
22220 			const gchar* _tmp13_;
22221 			ValaSymbol* _tmp14_;
22222 			ValaSymbol* _tmp15_;
22223 			_tmp9_ = sym;
22224 			_tmp10_ = vala_symbol_get_scope (_tmp9_);
22225 			_tmp11_ = _tmp10_;
22226 			_tmp12_ = vala_symbol_get_name ((ValaSymbol*) local);
22227 			_tmp13_ = _tmp12_;
22228 			_tmp14_ = vala_scope_lookup (_tmp11_, _tmp13_);
22229 			_tmp15_ = _tmp14_;
22230 			_tmp5_ = _tmp15_ == NULL;
22231 			_vala_code_node_unref0 (_tmp15_);
22232 		} else {
22233 			_tmp5_ = FALSE;
22234 		}
22235 		if (!_tmp5_) {
22236 			break;
22237 		}
22238 		_tmp18_ = sym;
22239 		_tmp19_ = vala_code_node_get_parent_node ((ValaCodeNode*) _tmp18_);
22240 		_tmp20_ = _tmp19_;
22241 		if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp20_, VALA_TYPE_TRY_STATEMENT)) {
22242 			ValaSymbol* _tmp21_;
22243 			ValaCodeNode* _tmp22_;
22244 			ValaCodeNode* _tmp23_;
22245 			ValaBlock* _tmp24_;
22246 			ValaBlock* _tmp25_;
22247 			_tmp21_ = sym;
22248 			_tmp22_ = vala_code_node_get_parent_node ((ValaCodeNode*) _tmp21_);
22249 			_tmp23_ = _tmp22_;
22250 			_tmp24_ = vala_try_statement_get_finally_body (G_TYPE_CHECK_INSTANCE_CAST (_tmp23_, VALA_TYPE_TRY_STATEMENT, ValaTryStatement));
22251 			_tmp25_ = _tmp24_;
22252 			_tmp17_ = _tmp25_ != NULL;
22253 		} else {
22254 			_tmp17_ = FALSE;
22255 		}
22256 		if (_tmp17_) {
22257 			_tmp16_ = TRUE;
22258 		} else {
22259 			gboolean _tmp26_ = FALSE;
22260 			ValaSymbol* _tmp27_;
22261 			ValaCodeNode* _tmp28_;
22262 			ValaCodeNode* _tmp29_;
22263 			_tmp27_ = sym;
22264 			_tmp28_ = vala_code_node_get_parent_node ((ValaCodeNode*) _tmp27_);
22265 			_tmp29_ = _tmp28_;
22266 			if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp29_, VALA_TYPE_CATCH_CLAUSE)) {
22267 				ValaSymbol* _tmp30_;
22268 				ValaCodeNode* _tmp31_;
22269 				ValaCodeNode* _tmp32_;
22270 				ValaCodeNode* _tmp33_;
22271 				ValaCodeNode* _tmp34_;
22272 				ValaBlock* _tmp35_;
22273 				ValaBlock* _tmp36_;
22274 				_tmp30_ = sym;
22275 				_tmp31_ = vala_code_node_get_parent_node ((ValaCodeNode*) _tmp30_);
22276 				_tmp32_ = _tmp31_;
22277 				_tmp33_ = vala_code_node_get_parent_node (_tmp32_);
22278 				_tmp34_ = _tmp33_;
22279 				_tmp35_ = vala_try_statement_get_finally_body (G_TYPE_CHECK_INSTANCE_CAST (_tmp34_, VALA_TYPE_TRY_STATEMENT, ValaTryStatement));
22280 				_tmp36_ = _tmp35_;
22281 				_tmp26_ = _tmp36_ != NULL;
22282 			} else {
22283 				_tmp26_ = FALSE;
22284 			}
22285 			_tmp16_ = _tmp26_;
22286 		}
22287 		if (_tmp16_) {
22288 			result = TRUE;
22289 			_vala_code_node_unref0 (sym);
22290 			return result;
22291 		}
22292 		_tmp37_ = sym;
22293 		_tmp38_ = vala_symbol_get_parent_symbol (_tmp37_);
22294 		_tmp39_ = _tmp38_;
22295 		_tmp40_ = _vala_code_node_ref0 (_tmp39_);
22296 		_vala_code_node_unref0 (sym);
22297 		sym = _tmp40_;
22298 	}
22299 	result = FALSE;
22300 	_vala_code_node_unref0 (sym);
22301 	return result;
22302 }
22303 
22304 void
vala_ccode_base_module_return_out_parameter(ValaCCodeBaseModule * self,ValaParameter * param)22305 vala_ccode_base_module_return_out_parameter (ValaCCodeBaseModule* self,
22306                                              ValaParameter* param)
22307 {
22308 	ValaDelegateType* delegate_type = NULL;
22309 	ValaDataType* _tmp0_;
22310 	ValaDataType* _tmp1_;
22311 	ValaDelegateType* _tmp2_;
22312 	ValaTargetValue* value = NULL;
22313 	ValaTargetValue* _tmp3_;
22314 	gboolean old_coroutine = FALSE;
22315 	ValaMethod* _tmp4_;
22316 	ValaMethod* _tmp5_;
22317 	ValaCCodeFunction* _tmp6_;
22318 	ValaCCodeFunction* _tmp7_;
22319 	ValaCCodeExpression* _tmp8_;
22320 	ValaCCodeExpression* _tmp9_;
22321 	ValaCCodeFunction* _tmp10_;
22322 	ValaCCodeFunction* _tmp11_;
22323 	ValaCCodeExpression* _tmp12_;
22324 	ValaCCodeExpression* _tmp13_;
22325 	ValaCCodeUnaryExpression* _tmp14_;
22326 	ValaCCodeUnaryExpression* _tmp15_;
22327 	ValaTargetValue* _tmp16_;
22328 	ValaCCodeExpression* _tmp17_;
22329 	gboolean _tmp18_ = FALSE;
22330 	gboolean _tmp19_ = FALSE;
22331 	ValaDataType* _tmp50_;
22332 	ValaDataType* _tmp51_;
22333 	ValaCCodeFunction* _tmp62_;
22334 	ValaCCodeFunction* _tmp63_;
22335 	ValaArrayType* array_type = NULL;
22336 	ValaDataType* _tmp64_;
22337 	ValaDataType* _tmp65_;
22338 	ValaArrayType* _tmp66_;
22339 	gboolean _tmp67_ = FALSE;
22340 	gboolean _tmp68_ = FALSE;
22341 	ValaArrayType* _tmp69_;
22342 	ValaMethod* _tmp96_;
22343 	ValaMethod* _tmp97_;
22344 	g_return_if_fail (self != NULL);
22345 	g_return_if_fail (param != NULL);
22346 	_tmp0_ = vala_variable_get_variable_type ((ValaVariable*) param);
22347 	_tmp1_ = _tmp0_;
22348 	_tmp2_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (_tmp1_, VALA_TYPE_DELEGATE_TYPE) ? ((ValaDelegateType*) _tmp1_) : NULL);
22349 	delegate_type = _tmp2_;
22350 	_tmp3_ = vala_ccode_base_module_get_parameter_cvalue (self, param);
22351 	value = _tmp3_;
22352 	old_coroutine = vala_ccode_base_module_is_in_coroutine (self);
22353 	_tmp4_ = vala_ccode_base_module_get_current_method (self);
22354 	_tmp5_ = _tmp4_;
22355 	vala_method_set_coroutine (_tmp5_, FALSE);
22356 	_tmp6_ = vala_ccode_base_module_get_ccode (self);
22357 	_tmp7_ = _tmp6_;
22358 	_tmp8_ = vala_ccode_base_module_get_parameter_cexpression (self, param);
22359 	_tmp9_ = _tmp8_;
22360 	vala_ccode_function_open_if (_tmp7_, _tmp9_);
22361 	_vala_ccode_node_unref0 (_tmp9_);
22362 	_tmp10_ = vala_ccode_base_module_get_ccode (self);
22363 	_tmp11_ = _tmp10_;
22364 	_tmp12_ = vala_ccode_base_module_get_parameter_cexpression (self, param);
22365 	_tmp13_ = _tmp12_;
22366 	_tmp14_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_POINTER_INDIRECTION, _tmp13_);
22367 	_tmp15_ = _tmp14_;
22368 	_tmp16_ = value;
22369 	_tmp17_ = vala_get_cvalue_ (_tmp16_);
22370 	vala_ccode_function_add_assignment (_tmp11_, (ValaCCodeExpression*) _tmp15_, _tmp17_);
22371 	_vala_ccode_node_unref0 (_tmp15_);
22372 	_vala_ccode_node_unref0 (_tmp13_);
22373 	if (vala_get_ccode_delegate_target ((ValaCodeNode*) param)) {
22374 		ValaDelegateType* _tmp20_;
22375 		_tmp20_ = delegate_type;
22376 		_tmp19_ = _tmp20_ != NULL;
22377 	} else {
22378 		_tmp19_ = FALSE;
22379 	}
22380 	if (_tmp19_) {
22381 		ValaDelegateType* _tmp21_;
22382 		ValaDelegate* _tmp22_;
22383 		ValaDelegate* _tmp23_;
22384 		gboolean _tmp24_;
22385 		gboolean _tmp25_;
22386 		_tmp21_ = delegate_type;
22387 		_tmp22_ = vala_delegate_type_get_delegate_symbol (_tmp21_);
22388 		_tmp23_ = _tmp22_;
22389 		_tmp24_ = vala_delegate_get_has_target (_tmp23_);
22390 		_tmp25_ = _tmp24_;
22391 		_tmp18_ = _tmp25_;
22392 	} else {
22393 		_tmp18_ = FALSE;
22394 	}
22395 	if (_tmp18_) {
22396 		ValaCCodeFunction* _tmp26_;
22397 		ValaCCodeFunction* _tmp27_;
22398 		gchar* _tmp28_;
22399 		gchar* _tmp29_;
22400 		ValaCCodeExpression* _tmp30_;
22401 		ValaCCodeExpression* _tmp31_;
22402 		ValaCCodeUnaryExpression* _tmp32_;
22403 		ValaCCodeUnaryExpression* _tmp33_;
22404 		ValaTargetValue* _tmp34_;
22405 		ValaCCodeExpression* _tmp35_;
22406 		ValaCCodeExpression* _tmp36_;
22407 		ValaDelegateType* _tmp37_;
22408 		_tmp26_ = vala_ccode_base_module_get_ccode (self);
22409 		_tmp27_ = _tmp26_;
22410 		_tmp28_ = vala_get_ccode_delegate_target_name ((ValaVariable*) param);
22411 		_tmp29_ = _tmp28_;
22412 		_tmp30_ = vala_ccode_base_module_get_cexpression (self, _tmp29_);
22413 		_tmp31_ = _tmp30_;
22414 		_tmp32_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_POINTER_INDIRECTION, _tmp31_);
22415 		_tmp33_ = _tmp32_;
22416 		_tmp34_ = value;
22417 		_tmp35_ = vala_ccode_base_module_get_delegate_target_cvalue (self, _tmp34_);
22418 		_tmp36_ = _tmp35_;
22419 		vala_ccode_function_add_assignment (_tmp27_, (ValaCCodeExpression*) _tmp33_, _tmp36_);
22420 		_vala_ccode_node_unref0 (_tmp36_);
22421 		_vala_ccode_node_unref0 (_tmp33_);
22422 		_vala_ccode_node_unref0 (_tmp31_);
22423 		_g_free0 (_tmp29_);
22424 		_tmp37_ = delegate_type;
22425 		if (vala_data_type_is_disposable ((ValaDataType*) _tmp37_)) {
22426 			ValaCCodeFunction* _tmp38_;
22427 			ValaCCodeFunction* _tmp39_;
22428 			gchar* _tmp40_;
22429 			gchar* _tmp41_;
22430 			ValaCCodeExpression* _tmp42_;
22431 			ValaCCodeExpression* _tmp43_;
22432 			ValaCCodeUnaryExpression* _tmp44_;
22433 			ValaCCodeUnaryExpression* _tmp45_;
22434 			ValaTargetValue* _tmp46_;
22435 			ValaTargetValue* _tmp47_;
22436 			ValaCCodeExpression* _tmp48_;
22437 			ValaCCodeExpression* _tmp49_;
22438 			_tmp38_ = vala_ccode_base_module_get_ccode (self);
22439 			_tmp39_ = _tmp38_;
22440 			_tmp40_ = vala_get_ccode_delegate_target_destroy_notify_name ((ValaVariable*) param);
22441 			_tmp41_ = _tmp40_;
22442 			_tmp42_ = vala_ccode_base_module_get_cexpression (self, _tmp41_);
22443 			_tmp43_ = _tmp42_;
22444 			_tmp44_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_POINTER_INDIRECTION, _tmp43_);
22445 			_tmp45_ = _tmp44_;
22446 			_tmp46_ = vala_ccode_base_module_get_parameter_cvalue (self, param);
22447 			_tmp47_ = _tmp46_;
22448 			_tmp48_ = vala_ccode_base_module_get_delegate_target_destroy_notify_cvalue (self, _tmp47_);
22449 			_tmp49_ = _tmp48_;
22450 			vala_ccode_function_add_assignment (_tmp39_, (ValaCCodeExpression*) _tmp45_, _tmp49_);
22451 			_vala_ccode_node_unref0 (_tmp49_);
22452 			_vala_target_value_unref0 (_tmp47_);
22453 			_vala_ccode_node_unref0 (_tmp45_);
22454 			_vala_ccode_node_unref0 (_tmp43_);
22455 			_g_free0 (_tmp41_);
22456 		}
22457 	}
22458 	_tmp50_ = vala_variable_get_variable_type ((ValaVariable*) param);
22459 	_tmp51_ = _tmp50_;
22460 	if (vala_data_type_is_disposable (_tmp51_)) {
22461 		ValaCCodeFunction* _tmp52_;
22462 		ValaCCodeFunction* _tmp53_;
22463 		ValaMethod* _tmp54_;
22464 		ValaMethod* _tmp55_;
22465 		ValaCCodeFunction* _tmp56_;
22466 		ValaCCodeFunction* _tmp57_;
22467 		ValaCCodeExpression* _tmp58_;
22468 		ValaCCodeExpression* _tmp59_;
22469 		ValaMethod* _tmp60_;
22470 		ValaMethod* _tmp61_;
22471 		_tmp52_ = vala_ccode_base_module_get_ccode (self);
22472 		_tmp53_ = _tmp52_;
22473 		vala_ccode_function_add_else (_tmp53_);
22474 		_tmp54_ = vala_ccode_base_module_get_current_method (self);
22475 		_tmp55_ = _tmp54_;
22476 		vala_method_set_coroutine (_tmp55_, old_coroutine);
22477 		_tmp56_ = vala_ccode_base_module_get_ccode (self);
22478 		_tmp57_ = _tmp56_;
22479 		_tmp58_ = vala_ccode_base_module_destroy_parameter (self, param);
22480 		_tmp59_ = _tmp58_;
22481 		vala_ccode_function_add_expression (_tmp57_, _tmp59_);
22482 		_vala_ccode_node_unref0 (_tmp59_);
22483 		_tmp60_ = vala_ccode_base_module_get_current_method (self);
22484 		_tmp61_ = _tmp60_;
22485 		vala_method_set_coroutine (_tmp61_, FALSE);
22486 	}
22487 	_tmp62_ = vala_ccode_base_module_get_ccode (self);
22488 	_tmp63_ = _tmp62_;
22489 	vala_ccode_function_close (_tmp63_);
22490 	_tmp64_ = vala_variable_get_variable_type ((ValaVariable*) param);
22491 	_tmp65_ = _tmp64_;
22492 	_tmp66_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (_tmp65_, VALA_TYPE_ARRAY_TYPE) ? ((ValaArrayType*) _tmp65_) : NULL);
22493 	array_type = _tmp66_;
22494 	_tmp69_ = array_type;
22495 	if (_tmp69_ != NULL) {
22496 		ValaArrayType* _tmp70_;
22497 		gboolean _tmp71_;
22498 		gboolean _tmp72_;
22499 		_tmp70_ = array_type;
22500 		_tmp71_ = vala_array_type_get_fixed_length (_tmp70_);
22501 		_tmp72_ = _tmp71_;
22502 		_tmp68_ = !_tmp72_;
22503 	} else {
22504 		_tmp68_ = FALSE;
22505 	}
22506 	if (_tmp68_) {
22507 		_tmp67_ = vala_get_ccode_array_length ((ValaCodeNode*) param);
22508 	} else {
22509 		_tmp67_ = FALSE;
22510 	}
22511 	if (_tmp67_) {
22512 		{
22513 			gint dim = 0;
22514 			dim = 1;
22515 			{
22516 				gboolean _tmp73_ = FALSE;
22517 				_tmp73_ = TRUE;
22518 				while (TRUE) {
22519 					ValaArrayType* _tmp75_;
22520 					gint _tmp76_;
22521 					gint _tmp77_;
22522 					gchar* length_cname = NULL;
22523 					gchar* _tmp78_;
22524 					ValaCCodeFunction* _tmp79_;
22525 					ValaCCodeFunction* _tmp80_;
22526 					const gchar* _tmp81_;
22527 					ValaCCodeExpression* _tmp82_;
22528 					ValaCCodeExpression* _tmp83_;
22529 					ValaCCodeFunction* _tmp84_;
22530 					ValaCCodeFunction* _tmp85_;
22531 					const gchar* _tmp86_;
22532 					ValaCCodeExpression* _tmp87_;
22533 					ValaCCodeExpression* _tmp88_;
22534 					ValaCCodeUnaryExpression* _tmp89_;
22535 					ValaCCodeUnaryExpression* _tmp90_;
22536 					ValaTargetValue* _tmp91_;
22537 					ValaCCodeExpression* _tmp92_;
22538 					ValaCCodeExpression* _tmp93_;
22539 					ValaCCodeFunction* _tmp94_;
22540 					ValaCCodeFunction* _tmp95_;
22541 					if (!_tmp73_) {
22542 						gint _tmp74_;
22543 						_tmp74_ = dim;
22544 						dim = _tmp74_ + 1;
22545 					}
22546 					_tmp73_ = FALSE;
22547 					_tmp75_ = array_type;
22548 					_tmp76_ = vala_array_type_get_rank (_tmp75_);
22549 					_tmp77_ = _tmp76_;
22550 					if (!(dim <= _tmp77_)) {
22551 						break;
22552 					}
22553 					_tmp78_ = vala_ccode_base_module_get_variable_array_length_cname (self, (ValaVariable*) param, dim);
22554 					length_cname = _tmp78_;
22555 					_tmp79_ = vala_ccode_base_module_get_ccode (self);
22556 					_tmp80_ = _tmp79_;
22557 					_tmp81_ = length_cname;
22558 					_tmp82_ = vala_ccode_base_module_get_cexpression (self, _tmp81_);
22559 					_tmp83_ = _tmp82_;
22560 					vala_ccode_function_open_if (_tmp80_, _tmp83_);
22561 					_vala_ccode_node_unref0 (_tmp83_);
22562 					_tmp84_ = vala_ccode_base_module_get_ccode (self);
22563 					_tmp85_ = _tmp84_;
22564 					_tmp86_ = length_cname;
22565 					_tmp87_ = vala_ccode_base_module_get_cexpression (self, _tmp86_);
22566 					_tmp88_ = _tmp87_;
22567 					_tmp89_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_POINTER_INDIRECTION, _tmp88_);
22568 					_tmp90_ = _tmp89_;
22569 					_tmp91_ = value;
22570 					_tmp92_ = vala_ccode_base_module_get_array_length_cvalue (self, _tmp91_, dim);
22571 					_tmp93_ = _tmp92_;
22572 					vala_ccode_function_add_assignment (_tmp85_, (ValaCCodeExpression*) _tmp90_, _tmp93_);
22573 					_vala_ccode_node_unref0 (_tmp93_);
22574 					_vala_ccode_node_unref0 (_tmp90_);
22575 					_vala_ccode_node_unref0 (_tmp88_);
22576 					_tmp94_ = vala_ccode_base_module_get_ccode (self);
22577 					_tmp95_ = _tmp94_;
22578 					vala_ccode_function_close (_tmp95_);
22579 					_g_free0 (length_cname);
22580 				}
22581 			}
22582 		}
22583 	}
22584 	_tmp96_ = vala_ccode_base_module_get_current_method (self);
22585 	_tmp97_ = _tmp96_;
22586 	vala_method_set_coroutine (_tmp97_, old_coroutine);
22587 	_vala_code_node_unref0 (array_type);
22588 	_vala_target_value_unref0 (value);
22589 	_vala_code_node_unref0 (delegate_type);
22590 }
22591 
22592 static void
vala_ccode_base_module_real_visit_return_statement(ValaCodeVisitor * base,ValaReturnStatement * stmt)22593 vala_ccode_base_module_real_visit_return_statement (ValaCodeVisitor* base,
22594                                                     ValaReturnStatement* stmt)
22595 {
22596 	ValaCCodeBaseModule * self;
22597 	ValaSymbol* return_expression_symbol = NULL;
22598 	ValaExpression* _tmp0_;
22599 	ValaExpression* _tmp1_;
22600 	gboolean _tmp14_ = FALSE;
22601 	gboolean _tmp15_ = FALSE;
22602 	gboolean _tmp16_ = FALSE;
22603 	ValaMethod* _tmp17_;
22604 	ValaMethod* _tmp18_;
22605 	ValaExpression* _tmp120_;
22606 	ValaExpression* _tmp121_;
22607 	ValaMethod* _tmp134_;
22608 	ValaMethod* _tmp135_;
22609 	ValaSymbol* _tmp148_;
22610 	ValaSymbol* _tmp149_;
22611 	gboolean _tmp150_ = FALSE;
22612 	ValaMethod* _tmp151_;
22613 	ValaMethod* _tmp152_;
22614 	gboolean _tmp172_ = FALSE;
22615 	ValaMethod* _tmp173_;
22616 	ValaMethod* _tmp174_;
22617 	ValaSymbol* _tmp235_;
22618 	self = (ValaCCodeBaseModule*) base;
22619 	g_return_if_fail (stmt != NULL);
22620 	return_expression_symbol = NULL;
22621 	_tmp0_ = vala_return_statement_get_return_expression (stmt);
22622 	_tmp1_ = _tmp0_;
22623 	if (_tmp1_ != NULL) {
22624 		ValaLocalVariable* local = NULL;
22625 		ValaExpression* _tmp2_;
22626 		ValaExpression* _tmp3_;
22627 		ValaSymbol* _tmp4_;
22628 		ValaSymbol* _tmp5_;
22629 		ValaLocalVariable* _tmp6_;
22630 		gboolean _tmp7_ = FALSE;
22631 		ValaLocalVariable* _tmp8_;
22632 		_tmp2_ = vala_return_statement_get_return_expression (stmt);
22633 		_tmp3_ = _tmp2_;
22634 		_tmp4_ = vala_expression_get_symbol_reference (_tmp3_);
22635 		_tmp5_ = _tmp4_;
22636 		_tmp6_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (_tmp5_, VALA_TYPE_LOCAL_VARIABLE) ? ((ValaLocalVariable*) _tmp5_) : NULL);
22637 		local = _tmp6_;
22638 		_tmp8_ = local;
22639 		if (_tmp8_ != NULL) {
22640 			ValaLocalVariable* _tmp9_;
22641 			gboolean _tmp10_;
22642 			gboolean _tmp11_;
22643 			_tmp9_ = local;
22644 			_tmp10_ = vala_symbol_get_active ((ValaSymbol*) _tmp9_);
22645 			_tmp11_ = _tmp10_;
22646 			_tmp7_ = !_tmp11_;
22647 		} else {
22648 			_tmp7_ = FALSE;
22649 		}
22650 		if (_tmp7_) {
22651 			ValaLocalVariable* _tmp12_;
22652 			ValaSymbol* _tmp13_;
22653 			_tmp12_ = local;
22654 			_tmp13_ = _vala_code_node_ref0 ((ValaSymbol*) _tmp12_);
22655 			_vala_code_node_unref0 (return_expression_symbol);
22656 			return_expression_symbol = _tmp13_;
22657 		}
22658 		_vala_code_node_unref0 (local);
22659 	}
22660 	_tmp17_ = vala_ccode_base_module_get_current_method (self);
22661 	_tmp18_ = _tmp17_;
22662 	if (_tmp18_ != NULL) {
22663 		ValaMethod* _tmp19_;
22664 		ValaMethod* _tmp20_;
22665 		_tmp19_ = vala_ccode_base_module_get_current_method (self);
22666 		_tmp20_ = _tmp19_;
22667 		_tmp16_ = vala_get_ccode_array_length ((ValaCodeNode*) _tmp20_);
22668 	} else {
22669 		_tmp16_ = FALSE;
22670 	}
22671 	if (_tmp16_) {
22672 		_tmp15_ = TRUE;
22673 	} else {
22674 		gboolean _tmp21_ = FALSE;
22675 		ValaPropertyAccessor* _tmp22_;
22676 		ValaPropertyAccessor* _tmp23_;
22677 		_tmp22_ = vala_ccode_base_module_get_current_property_accessor (self);
22678 		_tmp23_ = _tmp22_;
22679 		if (_tmp23_ != NULL) {
22680 			ValaPropertyAccessor* _tmp24_;
22681 			ValaPropertyAccessor* _tmp25_;
22682 			_tmp24_ = vala_ccode_base_module_get_current_property_accessor (self);
22683 			_tmp25_ = _tmp24_;
22684 			_tmp21_ = vala_get_ccode_array_length ((ValaCodeNode*) _tmp25_);
22685 		} else {
22686 			_tmp21_ = FALSE;
22687 		}
22688 		_tmp15_ = _tmp21_;
22689 	}
22690 	if (_tmp15_) {
22691 		ValaDataType* _tmp26_;
22692 		ValaDataType* _tmp27_;
22693 		_tmp26_ = vala_ccode_base_module_get_current_return_type (self);
22694 		_tmp27_ = _tmp26_;
22695 		_tmp14_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp27_, VALA_TYPE_ARRAY_TYPE);
22696 	} else {
22697 		_tmp14_ = FALSE;
22698 	}
22699 	if (_tmp14_) {
22700 		ValaTargetValue* temp_value = NULL;
22701 		ValaExpression* _tmp28_;
22702 		ValaExpression* _tmp29_;
22703 		ValaTargetValue* _tmp30_;
22704 		ValaTargetValue* _tmp31_;
22705 		ValaTargetValue* _tmp32_;
22706 		ValaArrayType* array_type = NULL;
22707 		ValaDataType* _tmp33_;
22708 		ValaDataType* _tmp34_;
22709 		ValaArrayType* _tmp35_;
22710 		ValaExpression* _tmp62_;
22711 		ValaExpression* _tmp63_;
22712 		ValaTargetValue* _tmp64_;
22713 		_tmp28_ = vala_return_statement_get_return_expression (stmt);
22714 		_tmp29_ = _tmp28_;
22715 		_tmp30_ = vala_expression_get_target_value (_tmp29_);
22716 		_tmp31_ = _tmp30_;
22717 		_tmp32_ = vala_ccode_base_module_store_temp_value (self, _tmp31_, (ValaCodeNode*) stmt, NULL);
22718 		temp_value = _tmp32_;
22719 		_tmp33_ = vala_ccode_base_module_get_current_return_type (self);
22720 		_tmp34_ = _tmp33_;
22721 		_tmp35_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp34_, VALA_TYPE_ARRAY_TYPE, ValaArrayType));
22722 		array_type = _tmp35_;
22723 		{
22724 			gint dim = 0;
22725 			dim = 1;
22726 			{
22727 				gboolean _tmp36_ = FALSE;
22728 				_tmp36_ = TRUE;
22729 				while (TRUE) {
22730 					ValaArrayType* _tmp38_;
22731 					gint _tmp39_;
22732 					gint _tmp40_;
22733 					ValaCCodeExpression* len_l = NULL;
22734 					gchar* _tmp41_;
22735 					gchar* _tmp42_;
22736 					ValaCCodeExpression* _tmp43_;
22737 					ValaCCodeExpression* _tmp44_;
22738 					ValaCCodeExpression* len_r = NULL;
22739 					ValaTargetValue* _tmp45_;
22740 					ValaCCodeExpression* _tmp46_;
22741 					if (!_tmp36_) {
22742 						gint _tmp37_;
22743 						_tmp37_ = dim;
22744 						dim = _tmp37_ + 1;
22745 					}
22746 					_tmp36_ = FALSE;
22747 					_tmp38_ = array_type;
22748 					_tmp39_ = vala_array_type_get_rank (_tmp38_);
22749 					_tmp40_ = _tmp39_;
22750 					if (!(dim <= _tmp40_)) {
22751 						break;
22752 					}
22753 					_tmp41_ = vala_ccode_base_module_get_array_length_cname (self, "result", dim);
22754 					_tmp42_ = _tmp41_;
22755 					_tmp43_ = vala_ccode_base_module_get_cexpression (self, _tmp42_);
22756 					_tmp44_ = _tmp43_;
22757 					_g_free0 (_tmp42_);
22758 					len_l = _tmp44_;
22759 					_tmp45_ = temp_value;
22760 					_tmp46_ = vala_ccode_base_module_get_array_length_cvalue (self, _tmp45_, dim);
22761 					len_r = _tmp46_;
22762 					if (!vala_ccode_base_module_is_in_coroutine (self)) {
22763 						ValaCCodeFunction* _tmp47_;
22764 						ValaCCodeFunction* _tmp48_;
22765 						ValaCCodeExpression* _tmp49_;
22766 						ValaCCodeExpression* _tmp50_;
22767 						ValaCCodeUnaryExpression* _tmp51_;
22768 						ValaCCodeFunction* _tmp52_;
22769 						ValaCCodeFunction* _tmp53_;
22770 						ValaCCodeExpression* _tmp54_;
22771 						ValaCCodeExpression* _tmp55_;
22772 						ValaCCodeFunction* _tmp56_;
22773 						ValaCCodeFunction* _tmp57_;
22774 						_tmp47_ = vala_ccode_base_module_get_ccode (self);
22775 						_tmp48_ = _tmp47_;
22776 						_tmp49_ = len_l;
22777 						vala_ccode_function_open_if (_tmp48_, _tmp49_);
22778 						_tmp50_ = len_l;
22779 						_tmp51_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_POINTER_INDIRECTION, _tmp50_);
22780 						_vala_ccode_node_unref0 (len_l);
22781 						len_l = (ValaCCodeExpression*) _tmp51_;
22782 						_tmp52_ = vala_ccode_base_module_get_ccode (self);
22783 						_tmp53_ = _tmp52_;
22784 						_tmp54_ = len_l;
22785 						_tmp55_ = len_r;
22786 						vala_ccode_function_add_assignment (_tmp53_, _tmp54_, _tmp55_);
22787 						_tmp56_ = vala_ccode_base_module_get_ccode (self);
22788 						_tmp57_ = _tmp56_;
22789 						vala_ccode_function_close (_tmp57_);
22790 					} else {
22791 						ValaCCodeFunction* _tmp58_;
22792 						ValaCCodeFunction* _tmp59_;
22793 						ValaCCodeExpression* _tmp60_;
22794 						ValaCCodeExpression* _tmp61_;
22795 						_tmp58_ = vala_ccode_base_module_get_ccode (self);
22796 						_tmp59_ = _tmp58_;
22797 						_tmp60_ = len_l;
22798 						_tmp61_ = len_r;
22799 						vala_ccode_function_add_assignment (_tmp59_, _tmp60_, _tmp61_);
22800 					}
22801 					_vala_ccode_node_unref0 (len_r);
22802 					_vala_ccode_node_unref0 (len_l);
22803 				}
22804 			}
22805 		}
22806 		_tmp62_ = vala_return_statement_get_return_expression (stmt);
22807 		_tmp63_ = _tmp62_;
22808 		_tmp64_ = temp_value;
22809 		vala_expression_set_target_value (_tmp63_, _tmp64_);
22810 		_vala_code_node_unref0 (array_type);
22811 		_vala_target_value_unref0 (temp_value);
22812 	} else {
22813 		gboolean _tmp65_ = FALSE;
22814 		gboolean _tmp66_ = FALSE;
22815 		gboolean _tmp67_ = FALSE;
22816 		ValaMethod* _tmp68_;
22817 		ValaMethod* _tmp69_;
22818 		_tmp68_ = vala_ccode_base_module_get_current_method (self);
22819 		_tmp69_ = _tmp68_;
22820 		if (_tmp69_ != NULL) {
22821 			ValaMethod* _tmp70_;
22822 			ValaMethod* _tmp71_;
22823 			_tmp70_ = vala_ccode_base_module_get_current_method (self);
22824 			_tmp71_ = _tmp70_;
22825 			_tmp67_ = vala_get_ccode_delegate_target ((ValaCodeNode*) _tmp71_);
22826 		} else {
22827 			_tmp67_ = FALSE;
22828 		}
22829 		if (_tmp67_) {
22830 			_tmp66_ = TRUE;
22831 		} else {
22832 			gboolean _tmp72_ = FALSE;
22833 			ValaPropertyAccessor* _tmp73_;
22834 			ValaPropertyAccessor* _tmp74_;
22835 			_tmp73_ = vala_ccode_base_module_get_current_property_accessor (self);
22836 			_tmp74_ = _tmp73_;
22837 			if (_tmp74_ != NULL) {
22838 				ValaPropertyAccessor* _tmp75_;
22839 				ValaPropertyAccessor* _tmp76_;
22840 				_tmp75_ = vala_ccode_base_module_get_current_property_accessor (self);
22841 				_tmp76_ = _tmp75_;
22842 				_tmp72_ = vala_get_ccode_delegate_target ((ValaCodeNode*) _tmp76_);
22843 			} else {
22844 				_tmp72_ = FALSE;
22845 			}
22846 			_tmp66_ = _tmp72_;
22847 		}
22848 		if (_tmp66_) {
22849 			ValaDataType* _tmp77_;
22850 			ValaDataType* _tmp78_;
22851 			_tmp77_ = vala_ccode_base_module_get_current_return_type (self);
22852 			_tmp78_ = _tmp77_;
22853 			_tmp65_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp78_, VALA_TYPE_DELEGATE_TYPE);
22854 		} else {
22855 			_tmp65_ = FALSE;
22856 		}
22857 		if (_tmp65_) {
22858 			ValaDelegateType* delegate_type = NULL;
22859 			ValaDataType* _tmp79_;
22860 			ValaDataType* _tmp80_;
22861 			ValaDelegateType* _tmp81_;
22862 			ValaDelegateType* _tmp82_;
22863 			ValaDelegate* _tmp83_;
22864 			ValaDelegate* _tmp84_;
22865 			gboolean _tmp85_;
22866 			gboolean _tmp86_;
22867 			_tmp79_ = vala_ccode_base_module_get_current_return_type (self);
22868 			_tmp80_ = _tmp79_;
22869 			_tmp81_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp80_, VALA_TYPE_DELEGATE_TYPE, ValaDelegateType));
22870 			delegate_type = _tmp81_;
22871 			_tmp82_ = delegate_type;
22872 			_tmp83_ = vala_delegate_type_get_delegate_symbol (_tmp82_);
22873 			_tmp84_ = _tmp83_;
22874 			_tmp85_ = vala_delegate_get_has_target (_tmp84_);
22875 			_tmp86_ = _tmp85_;
22876 			if (_tmp86_) {
22877 				ValaTargetValue* temp_value = NULL;
22878 				ValaExpression* _tmp87_;
22879 				ValaExpression* _tmp88_;
22880 				ValaTargetValue* _tmp89_;
22881 				ValaTargetValue* _tmp90_;
22882 				ValaTargetValue* _tmp91_;
22883 				ValaCCodeExpression* target_l = NULL;
22884 				gchar* _tmp92_;
22885 				gchar* _tmp93_;
22886 				ValaCCodeExpression* _tmp94_;
22887 				ValaCCodeExpression* _tmp95_;
22888 				ValaCCodeExpression* target_r = NULL;
22889 				ValaTargetValue* _tmp98_;
22890 				ValaCCodeExpression* _tmp99_;
22891 				ValaCCodeFunction* _tmp100_;
22892 				ValaCCodeFunction* _tmp101_;
22893 				ValaCCodeExpression* _tmp102_;
22894 				ValaCCodeExpression* _tmp103_;
22895 				ValaDelegateType* _tmp104_;
22896 				ValaExpression* _tmp117_;
22897 				ValaExpression* _tmp118_;
22898 				ValaTargetValue* _tmp119_;
22899 				_tmp87_ = vala_return_statement_get_return_expression (stmt);
22900 				_tmp88_ = _tmp87_;
22901 				_tmp89_ = vala_expression_get_target_value (_tmp88_);
22902 				_tmp90_ = _tmp89_;
22903 				_tmp91_ = vala_ccode_base_module_store_temp_value (self, _tmp90_, (ValaCodeNode*) stmt, NULL);
22904 				temp_value = _tmp91_;
22905 				_tmp92_ = vala_ccode_base_module_get_delegate_target_cname (self, "result");
22906 				_tmp93_ = _tmp92_;
22907 				_tmp94_ = vala_ccode_base_module_get_cexpression (self, _tmp93_);
22908 				_tmp95_ = _tmp94_;
22909 				_g_free0 (_tmp93_);
22910 				target_l = _tmp95_;
22911 				if (!vala_ccode_base_module_is_in_coroutine (self)) {
22912 					ValaCCodeExpression* _tmp96_;
22913 					ValaCCodeUnaryExpression* _tmp97_;
22914 					_tmp96_ = target_l;
22915 					_tmp97_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_POINTER_INDIRECTION, _tmp96_);
22916 					_vala_ccode_node_unref0 (target_l);
22917 					target_l = (ValaCCodeExpression*) _tmp97_;
22918 				}
22919 				_tmp98_ = temp_value;
22920 				_tmp99_ = vala_ccode_base_module_get_delegate_target_cvalue (self, _tmp98_);
22921 				target_r = _tmp99_;
22922 				_tmp100_ = vala_ccode_base_module_get_ccode (self);
22923 				_tmp101_ = _tmp100_;
22924 				_tmp102_ = target_l;
22925 				_tmp103_ = target_r;
22926 				vala_ccode_function_add_assignment (_tmp101_, _tmp102_, _tmp103_);
22927 				_tmp104_ = delegate_type;
22928 				if (vala_data_type_is_disposable ((ValaDataType*) _tmp104_)) {
22929 					ValaCCodeExpression* target_l_destroy_notify = NULL;
22930 					gchar* _tmp105_;
22931 					gchar* _tmp106_;
22932 					ValaCCodeExpression* _tmp107_;
22933 					ValaCCodeExpression* _tmp108_;
22934 					ValaCCodeExpression* target_r_destroy_notify = NULL;
22935 					ValaTargetValue* _tmp111_;
22936 					ValaCCodeExpression* _tmp112_;
22937 					ValaCCodeFunction* _tmp113_;
22938 					ValaCCodeFunction* _tmp114_;
22939 					ValaCCodeExpression* _tmp115_;
22940 					ValaCCodeExpression* _tmp116_;
22941 					_tmp105_ = vala_ccode_base_module_get_delegate_target_destroy_notify_cname (self, "result");
22942 					_tmp106_ = _tmp105_;
22943 					_tmp107_ = vala_ccode_base_module_get_cexpression (self, _tmp106_);
22944 					_tmp108_ = _tmp107_;
22945 					_g_free0 (_tmp106_);
22946 					target_l_destroy_notify = _tmp108_;
22947 					if (!vala_ccode_base_module_is_in_coroutine (self)) {
22948 						ValaCCodeExpression* _tmp109_;
22949 						ValaCCodeUnaryExpression* _tmp110_;
22950 						_tmp109_ = target_l_destroy_notify;
22951 						_tmp110_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_POINTER_INDIRECTION, _tmp109_);
22952 						_vala_ccode_node_unref0 (target_l_destroy_notify);
22953 						target_l_destroy_notify = (ValaCCodeExpression*) _tmp110_;
22954 					}
22955 					_tmp111_ = temp_value;
22956 					_tmp112_ = vala_ccode_base_module_get_delegate_target_destroy_notify_cvalue (self, _tmp111_);
22957 					target_r_destroy_notify = _tmp112_;
22958 					_tmp113_ = vala_ccode_base_module_get_ccode (self);
22959 					_tmp114_ = _tmp113_;
22960 					_tmp115_ = target_l_destroy_notify;
22961 					_tmp116_ = target_r_destroy_notify;
22962 					vala_ccode_function_add_assignment (_tmp114_, _tmp115_, _tmp116_);
22963 					_vala_ccode_node_unref0 (target_r_destroy_notify);
22964 					_vala_ccode_node_unref0 (target_l_destroy_notify);
22965 				}
22966 				_tmp117_ = vala_return_statement_get_return_expression (stmt);
22967 				_tmp118_ = _tmp117_;
22968 				_tmp119_ = temp_value;
22969 				vala_expression_set_target_value (_tmp118_, _tmp119_);
22970 				_vala_ccode_node_unref0 (target_r);
22971 				_vala_ccode_node_unref0 (target_l);
22972 				_vala_target_value_unref0 (temp_value);
22973 			}
22974 			_vala_code_node_unref0 (delegate_type);
22975 		}
22976 	}
22977 	_tmp120_ = vala_return_statement_get_return_expression (stmt);
22978 	_tmp121_ = _tmp120_;
22979 	if (_tmp121_ != NULL) {
22980 		ValaCCodeExpression* result_lhs = NULL;
22981 		ValaCCodeExpression* _tmp122_;
22982 		gboolean _tmp123_ = FALSE;
22983 		ValaDataType* _tmp124_;
22984 		ValaDataType* _tmp125_;
22985 		ValaCCodeFunction* _tmp128_;
22986 		ValaCCodeFunction* _tmp129_;
22987 		ValaCCodeExpression* _tmp130_;
22988 		ValaExpression* _tmp131_;
22989 		ValaExpression* _tmp132_;
22990 		ValaCCodeExpression* _tmp133_;
22991 		_tmp122_ = vala_ccode_base_module_get_cexpression (self, "result");
22992 		result_lhs = _tmp122_;
22993 		_tmp124_ = vala_ccode_base_module_get_current_return_type (self);
22994 		_tmp125_ = _tmp124_;
22995 		if (vala_data_type_is_real_non_null_struct_type (_tmp125_)) {
22996 			_tmp123_ = !vala_ccode_base_module_is_in_coroutine (self);
22997 		} else {
22998 			_tmp123_ = FALSE;
22999 		}
23000 		if (_tmp123_) {
23001 			ValaCCodeExpression* _tmp126_;
23002 			ValaCCodeUnaryExpression* _tmp127_;
23003 			_tmp126_ = result_lhs;
23004 			_tmp127_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_POINTER_INDIRECTION, _tmp126_);
23005 			_vala_ccode_node_unref0 (result_lhs);
23006 			result_lhs = (ValaCCodeExpression*) _tmp127_;
23007 		}
23008 		_tmp128_ = vala_ccode_base_module_get_ccode (self);
23009 		_tmp129_ = _tmp128_;
23010 		_tmp130_ = result_lhs;
23011 		_tmp131_ = vala_return_statement_get_return_expression (stmt);
23012 		_tmp132_ = _tmp131_;
23013 		_tmp133_ = vala_get_cvalue (_tmp132_);
23014 		vala_ccode_function_add_assignment (_tmp129_, _tmp130_, _tmp133_);
23015 		_vala_ccode_node_unref0 (result_lhs);
23016 	}
23017 	_tmp134_ = vala_ccode_base_module_get_current_method (self);
23018 	_tmp135_ = _tmp134_;
23019 	if (_tmp135_ != NULL) {
23020 		{
23021 			ValaList* _postcondition_list = NULL;
23022 			ValaMethod* _tmp136_;
23023 			ValaMethod* _tmp137_;
23024 			ValaList* _tmp138_;
23025 			ValaList* _tmp139_;
23026 			gint _postcondition_size = 0;
23027 			ValaList* _tmp140_;
23028 			gint _tmp141_;
23029 			gint _tmp142_;
23030 			gint _postcondition_index = 0;
23031 			_tmp136_ = vala_ccode_base_module_get_current_method (self);
23032 			_tmp137_ = _tmp136_;
23033 			_tmp138_ = vala_method_get_postconditions (_tmp137_);
23034 			_tmp139_ = _vala_iterable_ref0 (_tmp138_);
23035 			_postcondition_list = _tmp139_;
23036 			_tmp140_ = _postcondition_list;
23037 			_tmp141_ = vala_collection_get_size ((ValaCollection*) _tmp140_);
23038 			_tmp142_ = _tmp141_;
23039 			_postcondition_size = _tmp142_;
23040 			_postcondition_index = -1;
23041 			while (TRUE) {
23042 				gint _tmp143_;
23043 				gint _tmp144_;
23044 				ValaExpression* postcondition = NULL;
23045 				ValaList* _tmp145_;
23046 				gpointer _tmp146_;
23047 				ValaExpression* _tmp147_;
23048 				_postcondition_index = _postcondition_index + 1;
23049 				_tmp143_ = _postcondition_index;
23050 				_tmp144_ = _postcondition_size;
23051 				if (!(_tmp143_ < _tmp144_)) {
23052 					break;
23053 				}
23054 				_tmp145_ = _postcondition_list;
23055 				_tmp146_ = vala_list_get (_tmp145_, _postcondition_index);
23056 				postcondition = (ValaExpression*) _tmp146_;
23057 				_tmp147_ = postcondition;
23058 				vala_ccode_base_module_create_postcondition_statement (self, _tmp147_);
23059 				_vala_code_node_unref0 (postcondition);
23060 			}
23061 			_vala_iterable_unref0 (_postcondition_list);
23062 		}
23063 	}
23064 	_tmp148_ = vala_ccode_base_module_get_current_symbol (self);
23065 	_tmp149_ = _tmp148_;
23066 	vala_ccode_base_module_append_local_free (self, _tmp149_, NULL, NULL);
23067 	_tmp151_ = vala_ccode_base_module_get_current_method (self);
23068 	_tmp152_ = _tmp151_;
23069 	if (_tmp152_ != NULL) {
23070 		ValaMethod* _tmp153_;
23071 		ValaMethod* _tmp154_;
23072 		gboolean _tmp155_;
23073 		gboolean _tmp156_;
23074 		_tmp153_ = vala_ccode_base_module_get_current_method (self);
23075 		_tmp154_ = _tmp153_;
23076 		_tmp155_ = vala_method_get_coroutine (_tmp154_);
23077 		_tmp156_ = _tmp155_;
23078 		_tmp150_ = !_tmp156_;
23079 	} else {
23080 		_tmp150_ = FALSE;
23081 	}
23082 	if (_tmp150_) {
23083 		{
23084 			ValaList* _param_list = NULL;
23085 			ValaMethod* _tmp157_;
23086 			ValaMethod* _tmp158_;
23087 			ValaList* _tmp159_;
23088 			ValaList* _tmp160_;
23089 			gint _param_size = 0;
23090 			ValaList* _tmp161_;
23091 			gint _tmp162_;
23092 			gint _tmp163_;
23093 			gint _param_index = 0;
23094 			_tmp157_ = vala_ccode_base_module_get_current_method (self);
23095 			_tmp158_ = _tmp157_;
23096 			_tmp159_ = vala_callable_get_parameters ((ValaCallable*) _tmp158_);
23097 			_tmp160_ = _vala_iterable_ref0 (_tmp159_);
23098 			_param_list = _tmp160_;
23099 			_tmp161_ = _param_list;
23100 			_tmp162_ = vala_collection_get_size ((ValaCollection*) _tmp161_);
23101 			_tmp163_ = _tmp162_;
23102 			_param_size = _tmp163_;
23103 			_param_index = -1;
23104 			while (TRUE) {
23105 				gint _tmp164_;
23106 				gint _tmp165_;
23107 				ValaParameter* param = NULL;
23108 				ValaList* _tmp166_;
23109 				gpointer _tmp167_;
23110 				ValaParameter* _tmp168_;
23111 				ValaParameterDirection _tmp169_;
23112 				ValaParameterDirection _tmp170_;
23113 				ValaParameter* _tmp171_;
23114 				_param_index = _param_index + 1;
23115 				_tmp164_ = _param_index;
23116 				_tmp165_ = _param_size;
23117 				if (!(_tmp164_ < _tmp165_)) {
23118 					break;
23119 				}
23120 				_tmp166_ = _param_list;
23121 				_tmp167_ = vala_list_get (_tmp166_, _param_index);
23122 				param = (ValaParameter*) _tmp167_;
23123 				_tmp168_ = param;
23124 				_tmp169_ = vala_parameter_get_direction (_tmp168_);
23125 				_tmp170_ = _tmp169_;
23126 				if (_tmp170_ != VALA_PARAMETER_DIRECTION_OUT) {
23127 					_vala_code_node_unref0 (param);
23128 					continue;
23129 				}
23130 				_tmp171_ = param;
23131 				vala_ccode_base_module_return_out_parameter (self, _tmp171_);
23132 				_vala_code_node_unref0 (param);
23133 			}
23134 			_vala_iterable_unref0 (_param_list);
23135 		}
23136 	}
23137 	_tmp173_ = vala_ccode_base_module_get_current_method (self);
23138 	_tmp174_ = _tmp173_;
23139 	if (_tmp174_ != NULL) {
23140 		ValaMethod* _tmp175_;
23141 		ValaMethod* _tmp176_;
23142 		ValaAttribute* _tmp177_;
23143 		_tmp175_ = vala_ccode_base_module_get_current_method (self);
23144 		_tmp176_ = _tmp175_;
23145 		_tmp177_ = vala_code_node_get_attribute ((ValaCodeNode*) _tmp176_, "Profile");
23146 		_tmp172_ = _tmp177_ != NULL;
23147 	} else {
23148 		_tmp172_ = FALSE;
23149 	}
23150 	if (_tmp172_) {
23151 		gchar* prefix = NULL;
23152 		ValaMethod* _tmp178_;
23153 		ValaMethod* _tmp179_;
23154 		gchar* _tmp180_;
23155 		gchar* _tmp181_;
23156 		gchar* _tmp182_;
23157 		gchar* _tmp183_;
23158 		ValaCCodeIdentifier* level = NULL;
23159 		const gchar* _tmp184_;
23160 		gchar* _tmp185_;
23161 		gchar* _tmp186_;
23162 		ValaCCodeIdentifier* _tmp187_;
23163 		ValaCCodeIdentifier* _tmp188_;
23164 		ValaCCodeFunction* _tmp189_;
23165 		ValaCCodeFunction* _tmp190_;
23166 		ValaCCodeIdentifier* _tmp191_;
23167 		ValaCCodeUnaryExpression* _tmp192_;
23168 		ValaCCodeUnaryExpression* _tmp193_;
23169 		ValaCCodeUnaryExpression* _tmp194_;
23170 		ValaCCodeUnaryExpression* _tmp195_;
23171 		ValaCCodeIdentifier* timer = NULL;
23172 		const gchar* _tmp196_;
23173 		gchar* _tmp197_;
23174 		gchar* _tmp198_;
23175 		ValaCCodeIdentifier* _tmp199_;
23176 		ValaCCodeIdentifier* _tmp200_;
23177 		ValaCCodeFunctionCall* stop_call = NULL;
23178 		ValaCCodeIdentifier* _tmp201_;
23179 		ValaCCodeIdentifier* _tmp202_;
23180 		ValaCCodeFunctionCall* _tmp203_;
23181 		ValaCCodeFunctionCall* _tmp204_;
23182 		ValaCCodeFunctionCall* _tmp205_;
23183 		ValaCCodeIdentifier* _tmp206_;
23184 		ValaCCodeFunction* _tmp207_;
23185 		ValaCCodeFunction* _tmp208_;
23186 		ValaCCodeFunctionCall* _tmp209_;
23187 		ValaCCodeFunction* _tmp210_;
23188 		ValaCCodeFunction* _tmp211_;
23189 		_tmp178_ = vala_ccode_base_module_get_current_method (self);
23190 		_tmp179_ = _tmp178_;
23191 		_tmp180_ = vala_get_ccode_real_name ((ValaSymbol*) _tmp179_);
23192 		_tmp181_ = _tmp180_;
23193 		_tmp182_ = g_strdup_printf ("_vala_prof_%s", _tmp181_);
23194 		_tmp183_ = _tmp182_;
23195 		_g_free0 (_tmp181_);
23196 		prefix = _tmp183_;
23197 		_tmp184_ = prefix;
23198 		_tmp185_ = g_strconcat (_tmp184_, "_level", NULL);
23199 		_tmp186_ = _tmp185_;
23200 		_tmp187_ = vala_ccode_identifier_new (_tmp186_);
23201 		_tmp188_ = _tmp187_;
23202 		_g_free0 (_tmp186_);
23203 		level = _tmp188_;
23204 		_tmp189_ = vala_ccode_base_module_get_ccode (self);
23205 		_tmp190_ = _tmp189_;
23206 		_tmp191_ = level;
23207 		_tmp192_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_PREFIX_DECREMENT, (ValaCCodeExpression*) _tmp191_);
23208 		_tmp193_ = _tmp192_;
23209 		_tmp194_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_LOGICAL_NEGATION, (ValaCCodeExpression*) _tmp193_);
23210 		_tmp195_ = _tmp194_;
23211 		vala_ccode_function_open_if (_tmp190_, (ValaCCodeExpression*) _tmp195_);
23212 		_vala_ccode_node_unref0 (_tmp195_);
23213 		_vala_ccode_node_unref0 (_tmp193_);
23214 		_tmp196_ = prefix;
23215 		_tmp197_ = g_strconcat (_tmp196_, "_timer", NULL);
23216 		_tmp198_ = _tmp197_;
23217 		_tmp199_ = vala_ccode_identifier_new (_tmp198_);
23218 		_tmp200_ = _tmp199_;
23219 		_g_free0 (_tmp198_);
23220 		timer = _tmp200_;
23221 		_tmp201_ = vala_ccode_identifier_new ("g_timer_stop");
23222 		_tmp202_ = _tmp201_;
23223 		_tmp203_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp202_);
23224 		_tmp204_ = _tmp203_;
23225 		_vala_ccode_node_unref0 (_tmp202_);
23226 		stop_call = _tmp204_;
23227 		_tmp205_ = stop_call;
23228 		_tmp206_ = timer;
23229 		vala_ccode_function_call_add_argument (_tmp205_, (ValaCCodeExpression*) _tmp206_);
23230 		_tmp207_ = vala_ccode_base_module_get_ccode (self);
23231 		_tmp208_ = _tmp207_;
23232 		_tmp209_ = stop_call;
23233 		vala_ccode_function_add_expression (_tmp208_, (ValaCCodeExpression*) _tmp209_);
23234 		_tmp210_ = vala_ccode_base_module_get_ccode (self);
23235 		_tmp211_ = _tmp210_;
23236 		vala_ccode_function_close (_tmp211_);
23237 		_vala_ccode_node_unref0 (stop_call);
23238 		_vala_ccode_node_unref0 (timer);
23239 		_vala_ccode_node_unref0 (level);
23240 		_g_free0 (prefix);
23241 	}
23242 	if (vala_ccode_base_module_is_in_constructor (self)) {
23243 		ValaCCodeFunction* _tmp212_;
23244 		ValaCCodeFunction* _tmp213_;
23245 		ValaCCodeIdentifier* _tmp214_;
23246 		ValaCCodeIdentifier* _tmp215_;
23247 		_tmp212_ = vala_ccode_base_module_get_ccode (self);
23248 		_tmp213_ = _tmp212_;
23249 		_tmp214_ = vala_ccode_identifier_new ("obj");
23250 		_tmp215_ = _tmp214_;
23251 		vala_ccode_function_add_return (_tmp213_, (ValaCCodeExpression*) _tmp215_);
23252 		_vala_ccode_node_unref0 (_tmp215_);
23253 	} else {
23254 		if (vala_ccode_base_module_is_in_destructor (self)) {
23255 			ValaCCodeFunction* _tmp216_;
23256 			ValaCCodeFunction* _tmp217_;
23257 			_tmp216_ = vala_ccode_base_module_get_ccode (self);
23258 			_tmp217_ = _tmp216_;
23259 			vala_ccode_function_add_goto (_tmp217_, "_return");
23260 		} else {
23261 			if (vala_ccode_base_module_is_in_coroutine (self)) {
23262 			} else {
23263 				ValaMethod* _tmp218_;
23264 				ValaMethod* _tmp219_;
23265 				_tmp218_ = vala_ccode_base_module_get_current_method (self);
23266 				_tmp219_ = _tmp218_;
23267 				if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp219_, VALA_TYPE_CREATION_METHOD)) {
23268 					ValaCCodeFunction* _tmp220_;
23269 					ValaCCodeFunction* _tmp221_;
23270 					ValaCCodeIdentifier* _tmp222_;
23271 					ValaCCodeIdentifier* _tmp223_;
23272 					_tmp220_ = vala_ccode_base_module_get_ccode (self);
23273 					_tmp221_ = _tmp220_;
23274 					_tmp222_ = vala_ccode_identifier_new ("self");
23275 					_tmp223_ = _tmp222_;
23276 					vala_ccode_function_add_return (_tmp221_, (ValaCCodeExpression*) _tmp223_);
23277 					_vala_ccode_node_unref0 (_tmp223_);
23278 				} else {
23279 					gboolean _tmp224_ = FALSE;
23280 					ValaDataType* _tmp225_;
23281 					ValaDataType* _tmp226_;
23282 					_tmp225_ = vala_ccode_base_module_get_current_return_type (self);
23283 					_tmp226_ = _tmp225_;
23284 					if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp226_, VALA_TYPE_VOID_TYPE)) {
23285 						_tmp224_ = TRUE;
23286 					} else {
23287 						ValaDataType* _tmp227_;
23288 						ValaDataType* _tmp228_;
23289 						_tmp227_ = vala_ccode_base_module_get_current_return_type (self);
23290 						_tmp228_ = _tmp227_;
23291 						_tmp224_ = vala_data_type_is_real_non_null_struct_type (_tmp228_);
23292 					}
23293 					if (_tmp224_) {
23294 						ValaCCodeFunction* _tmp229_;
23295 						ValaCCodeFunction* _tmp230_;
23296 						_tmp229_ = vala_ccode_base_module_get_ccode (self);
23297 						_tmp230_ = _tmp229_;
23298 						vala_ccode_function_add_return (_tmp230_, NULL);
23299 					} else {
23300 						ValaCCodeFunction* _tmp231_;
23301 						ValaCCodeFunction* _tmp232_;
23302 						ValaCCodeIdentifier* _tmp233_;
23303 						ValaCCodeIdentifier* _tmp234_;
23304 						_tmp231_ = vala_ccode_base_module_get_ccode (self);
23305 						_tmp232_ = _tmp231_;
23306 						_tmp233_ = vala_ccode_identifier_new ("result");
23307 						_tmp234_ = _tmp233_;
23308 						vala_ccode_function_add_return (_tmp232_, (ValaCCodeExpression*) _tmp234_);
23309 						_vala_ccode_node_unref0 (_tmp234_);
23310 					}
23311 				}
23312 			}
23313 		}
23314 	}
23315 	_tmp235_ = return_expression_symbol;
23316 	if (_tmp235_ != NULL) {
23317 		ValaSymbol* _tmp236_;
23318 		_tmp236_ = return_expression_symbol;
23319 		vala_symbol_set_active (_tmp236_, TRUE);
23320 	}
23321 	vala_ccode_base_module_set_current_method_return (self, TRUE);
23322 	_vala_code_node_unref0 (return_expression_symbol);
23323 }
23324 
23325 static gchar*
string_replace(const gchar * self,const gchar * old,const gchar * replacement)23326 string_replace (const gchar* self,
23327                 const gchar* old,
23328                 const gchar* replacement)
23329 {
23330 	gboolean _tmp0_ = FALSE;
23331 	gboolean _tmp1_ = FALSE;
23332 	GError* _inner_error0_ = NULL;
23333 	gchar* result = NULL;
23334 	g_return_val_if_fail (self != NULL, NULL);
23335 	g_return_val_if_fail (old != NULL, NULL);
23336 	g_return_val_if_fail (replacement != NULL, NULL);
23337 	if ((*((gchar*) self)) == '\0') {
23338 		_tmp1_ = TRUE;
23339 	} else {
23340 		_tmp1_ = (*((gchar*) old)) == '\0';
23341 	}
23342 	if (_tmp1_) {
23343 		_tmp0_ = TRUE;
23344 	} else {
23345 		_tmp0_ = g_strcmp0 (old, replacement) == 0;
23346 	}
23347 	if (_tmp0_) {
23348 		gchar* _tmp2_;
23349 		_tmp2_ = g_strdup (self);
23350 		result = _tmp2_;
23351 		return result;
23352 	}
23353 	{
23354 		GRegex* regex = NULL;
23355 		gchar* _tmp3_;
23356 		gchar* _tmp4_;
23357 		GRegex* _tmp5_;
23358 		GRegex* _tmp6_;
23359 		gchar* _tmp7_ = NULL;
23360 		GRegex* _tmp8_;
23361 		gchar* _tmp9_;
23362 		gchar* _tmp10_;
23363 		_tmp3_ = g_regex_escape_string (old, -1);
23364 		_tmp4_ = _tmp3_;
23365 		_tmp5_ = g_regex_new (_tmp4_, 0, 0, &_inner_error0_);
23366 		_tmp6_ = _tmp5_;
23367 		_g_free0 (_tmp4_);
23368 		regex = _tmp6_;
23369 		if (G_UNLIKELY (_inner_error0_ != NULL)) {
23370 			_g_free0 (_tmp7_);
23371 			_g_regex_unref0 (regex);
23372 			if (_inner_error0_->domain == G_REGEX_ERROR) {
23373 				goto __catch0_g_regex_error;
23374 			}
23375 			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);
23376 			g_clear_error (&_inner_error0_);
23377 			return NULL;
23378 		}
23379 		_tmp8_ = regex;
23380 		_tmp9_ = g_regex_replace_literal (_tmp8_, self, (gssize) -1, 0, replacement, 0, &_inner_error0_);
23381 		_tmp7_ = _tmp9_;
23382 		if (G_UNLIKELY (_inner_error0_ != NULL)) {
23383 			_g_free0 (_tmp7_);
23384 			_g_regex_unref0 (regex);
23385 			if (_inner_error0_->domain == G_REGEX_ERROR) {
23386 				goto __catch0_g_regex_error;
23387 			}
23388 			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);
23389 			g_clear_error (&_inner_error0_);
23390 			return NULL;
23391 		}
23392 		_tmp10_ = _tmp7_;
23393 		_tmp7_ = NULL;
23394 		result = _tmp10_;
23395 		_g_free0 (_tmp7_);
23396 		_g_regex_unref0 (regex);
23397 		return result;
23398 	}
23399 	goto __finally0;
23400 	__catch0_g_regex_error:
23401 	{
23402 		g_clear_error (&_inner_error0_);
23403 		g_assert_not_reached ();
23404 	}
23405 	__finally0:
23406 	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);
23407 	g_clear_error (&_inner_error0_);
23408 	return NULL;
23409 }
23410 
23411 gchar*
vala_ccode_base_module_get_symbol_lock_name(ValaCCodeBaseModule * self,const gchar * symname)23412 vala_ccode_base_module_get_symbol_lock_name (ValaCCodeBaseModule* self,
23413                                              const gchar* symname)
23414 {
23415 	gchar* _tmp0_;
23416 	gchar* _tmp1_;
23417 	gchar* _tmp2_;
23418 	gchar* _tmp3_;
23419 	gchar* result = NULL;
23420 	g_return_val_if_fail (self != NULL, NULL);
23421 	g_return_val_if_fail (symname != NULL, NULL);
23422 	_tmp0_ = string_replace (symname, "-", "_");
23423 	_tmp1_ = _tmp0_;
23424 	_tmp2_ = g_strdup_printf ("__lock_%s", _tmp1_);
23425 	_tmp3_ = _tmp2_;
23426 	_g_free0 (_tmp1_);
23427 	result = _tmp3_;
23428 	return result;
23429 }
23430 
23431 static ValaCCodeExpression*
vala_ccode_base_module_get_lock_expression(ValaCCodeBaseModule * self,ValaStatement * stmt,ValaExpression * resource)23432 vala_ccode_base_module_get_lock_expression (ValaCCodeBaseModule* self,
23433                                             ValaStatement* stmt,
23434                                             ValaExpression* resource)
23435 {
23436 	ValaCCodeExpression* l = NULL;
23437 	ValaExpression* inner_node = NULL;
23438 	ValaExpression* _tmp0_;
23439 	ValaExpression* _tmp1_;
23440 	ValaExpression* _tmp2_;
23441 	ValaSymbol* member = NULL;
23442 	ValaSymbol* _tmp3_;
23443 	ValaSymbol* _tmp4_;
23444 	ValaSymbol* _tmp5_;
23445 	ValaTypeSymbol* parent = NULL;
23446 	ValaSymbol* _tmp6_;
23447 	ValaSymbol* _tmp7_;
23448 	ValaSymbol* _tmp8_;
23449 	ValaSymbol* _tmp9_;
23450 	ValaTypeSymbol* _tmp10_;
23451 	ValaSymbol* _tmp11_;
23452 	ValaCCodeExpression* result = NULL;
23453 	g_return_val_if_fail (self != NULL, NULL);
23454 	g_return_val_if_fail (stmt != NULL, NULL);
23455 	g_return_val_if_fail (resource != NULL, NULL);
23456 	l = NULL;
23457 	_tmp0_ = vala_member_access_get_inner (G_TYPE_CHECK_INSTANCE_CAST (resource, VALA_TYPE_MEMBER_ACCESS, ValaMemberAccess));
23458 	_tmp1_ = _tmp0_;
23459 	_tmp2_ = _vala_code_node_ref0 (_tmp1_);
23460 	inner_node = _tmp2_;
23461 	_tmp3_ = vala_expression_get_symbol_reference (resource);
23462 	_tmp4_ = _tmp3_;
23463 	_tmp5_ = _vala_code_node_ref0 (_tmp4_);
23464 	member = _tmp5_;
23465 	_tmp6_ = vala_expression_get_symbol_reference (resource);
23466 	_tmp7_ = _tmp6_;
23467 	_tmp8_ = vala_symbol_get_parent_symbol (_tmp7_);
23468 	_tmp9_ = _tmp8_;
23469 	_tmp10_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp9_, VALA_TYPE_TYPESYMBOL, ValaTypeSymbol));
23470 	parent = _tmp10_;
23471 	_tmp11_ = member;
23472 	if (vala_symbol_is_instance_member (_tmp11_)) {
23473 		ValaExpression* _tmp12_;
23474 		ValaCCodeExpression* _tmp24_;
23475 		ValaCCodeMemberAccess* _tmp25_;
23476 		ValaCCodeMemberAccess* _tmp26_;
23477 		ValaSymbol* _tmp27_;
23478 		gchar* _tmp28_;
23479 		gchar* _tmp29_;
23480 		gchar* _tmp30_;
23481 		gchar* _tmp31_;
23482 		ValaCCodeMemberAccess* _tmp32_;
23483 		_tmp12_ = inner_node;
23484 		if (_tmp12_ == NULL) {
23485 			ValaCCodeIdentifier* _tmp13_;
23486 			_tmp13_ = vala_ccode_identifier_new ("self");
23487 			_vala_ccode_node_unref0 (l);
23488 			l = (ValaCCodeExpression*) _tmp13_;
23489 		} else {
23490 			ValaTypeSymbol* _tmp14_;
23491 			ValaTypeSymbol* _tmp15_;
23492 			ValaTypeSymbol* _tmp16_;
23493 			_tmp14_ = parent;
23494 			_tmp15_ = vala_ccode_base_module_get_current_type_symbol (self);
23495 			_tmp16_ = _tmp15_;
23496 			if (_tmp14_ != _tmp16_) {
23497 				ValaExpression* _tmp17_;
23498 				ValaCCodeExpression* _tmp18_;
23499 				ValaTypeSymbol* _tmp19_;
23500 				ValaCCodeFunctionCall* _tmp20_;
23501 				_tmp17_ = inner_node;
23502 				_tmp18_ = vala_get_cvalue (_tmp17_);
23503 				_tmp19_ = parent;
23504 				_tmp20_ = vala_ccode_base_module_generate_instance_cast (self, _tmp18_, _tmp19_);
23505 				_vala_ccode_node_unref0 (l);
23506 				l = (ValaCCodeExpression*) _tmp20_;
23507 			} else {
23508 				ValaExpression* _tmp21_;
23509 				ValaCCodeExpression* _tmp22_;
23510 				ValaCCodeExpression* _tmp23_;
23511 				_tmp21_ = inner_node;
23512 				_tmp22_ = vala_get_cvalue (_tmp21_);
23513 				_tmp23_ = _vala_ccode_node_ref0 (_tmp22_);
23514 				_vala_ccode_node_unref0 (l);
23515 				l = _tmp23_;
23516 			}
23517 		}
23518 		_tmp24_ = l;
23519 		_tmp25_ = vala_ccode_member_access_new_pointer (_tmp24_, "priv");
23520 		_tmp26_ = _tmp25_;
23521 		_tmp27_ = member;
23522 		_tmp28_ = vala_get_ccode_name ((ValaCodeNode*) _tmp27_);
23523 		_tmp29_ = _tmp28_;
23524 		_tmp30_ = vala_ccode_base_module_get_symbol_lock_name (self, _tmp29_);
23525 		_tmp31_ = _tmp30_;
23526 		_tmp32_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) _tmp26_, _tmp31_);
23527 		_vala_ccode_node_unref0 (l);
23528 		l = (ValaCCodeExpression*) _tmp32_;
23529 		_g_free0 (_tmp31_);
23530 		_g_free0 (_tmp29_);
23531 		_vala_ccode_node_unref0 (_tmp26_);
23532 	} else {
23533 		ValaSymbol* _tmp33_;
23534 		_tmp33_ = member;
23535 		if (vala_symbol_is_class_member (_tmp33_)) {
23536 			ValaCCodeExpression* klass = NULL;
23537 			ValaDataType* _tmp34_;
23538 			ValaCCodeFunctionCall* get_class_private_call = NULL;
23539 			ValaTypeSymbol* _tmp48_;
23540 			gchar* _tmp49_;
23541 			gchar* _tmp50_;
23542 			ValaCCodeIdentifier* _tmp51_;
23543 			ValaCCodeIdentifier* _tmp52_;
23544 			ValaCCodeFunctionCall* _tmp53_;
23545 			ValaCCodeFunctionCall* _tmp54_;
23546 			ValaCCodeFunctionCall* _tmp55_;
23547 			ValaCCodeExpression* _tmp56_;
23548 			ValaCCodeFunctionCall* _tmp57_;
23549 			ValaSymbol* _tmp58_;
23550 			gchar* _tmp59_;
23551 			gchar* _tmp60_;
23552 			gchar* _tmp61_;
23553 			gchar* _tmp62_;
23554 			ValaCCodeMemberAccess* _tmp63_;
23555 			_tmp34_ = vala_ccode_base_module_get_this_type (self);
23556 			if (_tmp34_ != NULL) {
23557 				ValaCCodeFunctionCall* k = NULL;
23558 				ValaTypeSymbol* _tmp35_;
23559 				gchar* _tmp36_;
23560 				gchar* _tmp37_;
23561 				ValaCCodeIdentifier* _tmp38_;
23562 				ValaCCodeIdentifier* _tmp39_;
23563 				ValaCCodeFunctionCall* _tmp40_;
23564 				ValaCCodeFunctionCall* _tmp41_;
23565 				ValaCCodeFunctionCall* _tmp42_;
23566 				ValaCCodeIdentifier* _tmp43_;
23567 				ValaCCodeIdentifier* _tmp44_;
23568 				ValaCCodeFunctionCall* _tmp45_;
23569 				ValaCCodeExpression* _tmp46_;
23570 				_tmp35_ = parent;
23571 				_tmp36_ = vala_get_ccode_type_get_function ((ValaObjectTypeSymbol*) G_TYPE_CHECK_INSTANCE_CAST (_tmp35_, VALA_TYPE_CLASS, ValaClass));
23572 				_tmp37_ = _tmp36_;
23573 				_tmp38_ = vala_ccode_identifier_new (_tmp37_);
23574 				_tmp39_ = _tmp38_;
23575 				_tmp40_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp39_);
23576 				_tmp41_ = _tmp40_;
23577 				_vala_ccode_node_unref0 (_tmp39_);
23578 				_g_free0 (_tmp37_);
23579 				k = _tmp41_;
23580 				_tmp42_ = k;
23581 				_tmp43_ = vala_ccode_identifier_new ("self");
23582 				_tmp44_ = _tmp43_;
23583 				vala_ccode_function_call_add_argument (_tmp42_, (ValaCCodeExpression*) _tmp44_);
23584 				_vala_ccode_node_unref0 (_tmp44_);
23585 				_tmp45_ = k;
23586 				_tmp46_ = _vala_ccode_node_ref0 ((ValaCCodeExpression*) _tmp45_);
23587 				_vala_ccode_node_unref0 (klass);
23588 				klass = _tmp46_;
23589 				_vala_ccode_node_unref0 (k);
23590 			} else {
23591 				ValaCCodeIdentifier* _tmp47_;
23592 				_tmp47_ = vala_ccode_identifier_new ("klass");
23593 				_vala_ccode_node_unref0 (klass);
23594 				klass = (ValaCCodeExpression*) _tmp47_;
23595 			}
23596 			_tmp48_ = parent;
23597 			_tmp49_ = vala_get_ccode_class_get_private_function (G_TYPE_CHECK_INSTANCE_CAST (_tmp48_, VALA_TYPE_CLASS, ValaClass));
23598 			_tmp50_ = _tmp49_;
23599 			_tmp51_ = vala_ccode_identifier_new (_tmp50_);
23600 			_tmp52_ = _tmp51_;
23601 			_tmp53_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp52_);
23602 			_tmp54_ = _tmp53_;
23603 			_vala_ccode_node_unref0 (_tmp52_);
23604 			_g_free0 (_tmp50_);
23605 			get_class_private_call = _tmp54_;
23606 			_tmp55_ = get_class_private_call;
23607 			_tmp56_ = klass;
23608 			vala_ccode_function_call_add_argument (_tmp55_, _tmp56_);
23609 			_tmp57_ = get_class_private_call;
23610 			_tmp58_ = member;
23611 			_tmp59_ = vala_get_ccode_name ((ValaCodeNode*) _tmp58_);
23612 			_tmp60_ = _tmp59_;
23613 			_tmp61_ = vala_ccode_base_module_get_symbol_lock_name (self, _tmp60_);
23614 			_tmp62_ = _tmp61_;
23615 			_tmp63_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) _tmp57_, _tmp62_);
23616 			_vala_ccode_node_unref0 (l);
23617 			l = (ValaCCodeExpression*) _tmp63_;
23618 			_g_free0 (_tmp62_);
23619 			_g_free0 (_tmp60_);
23620 			_vala_ccode_node_unref0 (get_class_private_call);
23621 			_vala_ccode_node_unref0 (klass);
23622 		} else {
23623 			gchar* lock_name = NULL;
23624 			ValaTypeSymbol* _tmp64_;
23625 			gchar* _tmp65_;
23626 			gchar* _tmp66_;
23627 			ValaSymbol* _tmp67_;
23628 			gchar* _tmp68_;
23629 			gchar* _tmp69_;
23630 			gchar* _tmp70_;
23631 			gchar* _tmp71_;
23632 			const gchar* _tmp72_;
23633 			gchar* _tmp73_;
23634 			gchar* _tmp74_;
23635 			ValaCCodeIdentifier* _tmp75_;
23636 			_tmp64_ = parent;
23637 			_tmp65_ = vala_get_ccode_lower_case_name ((ValaCodeNode*) _tmp64_, NULL);
23638 			_tmp66_ = _tmp65_;
23639 			_tmp67_ = member;
23640 			_tmp68_ = vala_get_ccode_name ((ValaCodeNode*) _tmp67_);
23641 			_tmp69_ = _tmp68_;
23642 			_tmp70_ = g_strdup_printf ("%s_%s", _tmp66_, _tmp69_);
23643 			_tmp71_ = _tmp70_;
23644 			_g_free0 (_tmp69_);
23645 			_g_free0 (_tmp66_);
23646 			lock_name = _tmp71_;
23647 			_tmp72_ = lock_name;
23648 			_tmp73_ = vala_ccode_base_module_get_symbol_lock_name (self, _tmp72_);
23649 			_tmp74_ = _tmp73_;
23650 			_tmp75_ = vala_ccode_identifier_new (_tmp74_);
23651 			_vala_ccode_node_unref0 (l);
23652 			l = (ValaCCodeExpression*) _tmp75_;
23653 			_g_free0 (_tmp74_);
23654 			_g_free0 (lock_name);
23655 		}
23656 	}
23657 	result = l;
23658 	_vala_code_node_unref0 (parent);
23659 	_vala_code_node_unref0 (member);
23660 	_vala_code_node_unref0 (inner_node);
23661 	return result;
23662 }
23663 
23664 static void
vala_ccode_base_module_real_visit_lock_statement(ValaCodeVisitor * base,ValaLockStatement * stmt)23665 vala_ccode_base_module_real_visit_lock_statement (ValaCodeVisitor* base,
23666                                                   ValaLockStatement* stmt)
23667 {
23668 	ValaCCodeBaseModule * self;
23669 	ValaCCodeExpression* l = NULL;
23670 	ValaExpression* _tmp0_;
23671 	ValaExpression* _tmp1_;
23672 	ValaCCodeExpression* _tmp2_;
23673 	ValaCCodeFunctionCall* fc = NULL;
23674 	ValaStruct* _tmp3_;
23675 	ValaScope* _tmp4_;
23676 	ValaScope* _tmp5_;
23677 	ValaSymbol* _tmp6_;
23678 	ValaSymbol* _tmp7_;
23679 	gchar* _tmp8_;
23680 	gchar* _tmp9_;
23681 	ValaCCodeIdentifier* _tmp10_;
23682 	ValaCCodeIdentifier* _tmp11_;
23683 	ValaCCodeFunctionCall* _tmp12_;
23684 	ValaCCodeFunctionCall* _tmp13_;
23685 	ValaCCodeUnaryExpression* _tmp14_;
23686 	ValaCCodeUnaryExpression* _tmp15_;
23687 	ValaCCodeFunction* _tmp16_;
23688 	ValaCCodeFunction* _tmp17_;
23689 	self = (ValaCCodeBaseModule*) base;
23690 	g_return_if_fail (stmt != NULL);
23691 	_tmp0_ = vala_lock_statement_get_resource (stmt);
23692 	_tmp1_ = _tmp0_;
23693 	_tmp2_ = vala_ccode_base_module_get_lock_expression (self, (ValaStatement*) stmt, _tmp1_);
23694 	l = _tmp2_;
23695 	_tmp3_ = self->mutex_type;
23696 	_tmp4_ = vala_symbol_get_scope ((ValaSymbol*) _tmp3_);
23697 	_tmp5_ = _tmp4_;
23698 	_tmp6_ = vala_scope_lookup (_tmp5_, "lock");
23699 	_tmp7_ = _tmp6_;
23700 	_tmp8_ = vala_get_ccode_name ((ValaCodeNode*) _tmp7_);
23701 	_tmp9_ = _tmp8_;
23702 	_tmp10_ = vala_ccode_identifier_new (_tmp9_);
23703 	_tmp11_ = _tmp10_;
23704 	_tmp12_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp11_);
23705 	_tmp13_ = _tmp12_;
23706 	_vala_ccode_node_unref0 (_tmp11_);
23707 	_g_free0 (_tmp9_);
23708 	_vala_code_node_unref0 (_tmp7_);
23709 	fc = _tmp13_;
23710 	_tmp14_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, l);
23711 	_tmp15_ = _tmp14_;
23712 	vala_ccode_function_call_add_argument (fc, (ValaCCodeExpression*) _tmp15_);
23713 	_vala_ccode_node_unref0 (_tmp15_);
23714 	_tmp16_ = vala_ccode_base_module_get_ccode (self);
23715 	_tmp17_ = _tmp16_;
23716 	vala_ccode_function_add_expression (_tmp17_, (ValaCCodeExpression*) fc);
23717 	_vala_ccode_node_unref0 (fc);
23718 	_vala_ccode_node_unref0 (l);
23719 }
23720 
23721 static void
vala_ccode_base_module_real_visit_unlock_statement(ValaCodeVisitor * base,ValaUnlockStatement * stmt)23722 vala_ccode_base_module_real_visit_unlock_statement (ValaCodeVisitor* base,
23723                                                     ValaUnlockStatement* stmt)
23724 {
23725 	ValaCCodeBaseModule * self;
23726 	ValaCCodeExpression* l = NULL;
23727 	ValaExpression* _tmp0_;
23728 	ValaExpression* _tmp1_;
23729 	ValaCCodeExpression* _tmp2_;
23730 	ValaCCodeFunctionCall* fc = NULL;
23731 	ValaStruct* _tmp3_;
23732 	ValaScope* _tmp4_;
23733 	ValaScope* _tmp5_;
23734 	ValaSymbol* _tmp6_;
23735 	ValaSymbol* _tmp7_;
23736 	gchar* _tmp8_;
23737 	gchar* _tmp9_;
23738 	ValaCCodeIdentifier* _tmp10_;
23739 	ValaCCodeIdentifier* _tmp11_;
23740 	ValaCCodeFunctionCall* _tmp12_;
23741 	ValaCCodeFunctionCall* _tmp13_;
23742 	ValaCCodeUnaryExpression* _tmp14_;
23743 	ValaCCodeUnaryExpression* _tmp15_;
23744 	ValaCCodeFunction* _tmp16_;
23745 	ValaCCodeFunction* _tmp17_;
23746 	self = (ValaCCodeBaseModule*) base;
23747 	g_return_if_fail (stmt != NULL);
23748 	_tmp0_ = vala_unlock_statement_get_resource (stmt);
23749 	_tmp1_ = _tmp0_;
23750 	_tmp2_ = vala_ccode_base_module_get_lock_expression (self, (ValaStatement*) stmt, _tmp1_);
23751 	l = _tmp2_;
23752 	_tmp3_ = self->mutex_type;
23753 	_tmp4_ = vala_symbol_get_scope ((ValaSymbol*) _tmp3_);
23754 	_tmp5_ = _tmp4_;
23755 	_tmp6_ = vala_scope_lookup (_tmp5_, "unlock");
23756 	_tmp7_ = _tmp6_;
23757 	_tmp8_ = vala_get_ccode_name ((ValaCodeNode*) _tmp7_);
23758 	_tmp9_ = _tmp8_;
23759 	_tmp10_ = vala_ccode_identifier_new (_tmp9_);
23760 	_tmp11_ = _tmp10_;
23761 	_tmp12_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp11_);
23762 	_tmp13_ = _tmp12_;
23763 	_vala_ccode_node_unref0 (_tmp11_);
23764 	_g_free0 (_tmp9_);
23765 	_vala_code_node_unref0 (_tmp7_);
23766 	fc = _tmp13_;
23767 	_tmp14_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, l);
23768 	_tmp15_ = _tmp14_;
23769 	vala_ccode_function_call_add_argument (fc, (ValaCCodeExpression*) _tmp15_);
23770 	_vala_ccode_node_unref0 (_tmp15_);
23771 	_tmp16_ = vala_ccode_base_module_get_ccode (self);
23772 	_tmp17_ = _tmp16_;
23773 	vala_ccode_function_add_expression (_tmp17_, (ValaCCodeExpression*) fc);
23774 	_vala_ccode_node_unref0 (fc);
23775 	_vala_ccode_node_unref0 (l);
23776 }
23777 
23778 static void
vala_ccode_base_module_real_visit_delete_statement(ValaCodeVisitor * base,ValaDeleteStatement * stmt)23779 vala_ccode_base_module_real_visit_delete_statement (ValaCodeVisitor* base,
23780                                                     ValaDeleteStatement* stmt)
23781 {
23782 	ValaCCodeBaseModule * self;
23783 	ValaDataType* type = NULL;
23784 	ValaExpression* _tmp0_;
23785 	ValaExpression* _tmp1_;
23786 	ValaDataType* _tmp2_;
23787 	ValaDataType* _tmp3_;
23788 	ValaPointerType* pointer_type = NULL;
23789 	ValaDataType* _tmp4_;
23790 	gboolean _tmp5_ = FALSE;
23791 	gboolean _tmp6_ = FALSE;
23792 	ValaPointerType* _tmp7_;
23793 	ValaCCodeFunctionCall* ccall = NULL;
23794 	ValaDataType* _tmp21_;
23795 	ValaCCodeExpression* _tmp22_;
23796 	ValaCCodeExpression* _tmp23_;
23797 	ValaCCodeFunctionCall* _tmp24_;
23798 	ValaCCodeFunctionCall* _tmp25_;
23799 	ValaExpression* _tmp26_;
23800 	ValaExpression* _tmp27_;
23801 	ValaCCodeExpression* _tmp28_;
23802 	ValaCCodeFunction* _tmp29_;
23803 	ValaCCodeFunction* _tmp30_;
23804 	self = (ValaCCodeBaseModule*) base;
23805 	g_return_if_fail (stmt != NULL);
23806 	_tmp0_ = vala_delete_statement_get_expression (stmt);
23807 	_tmp1_ = _tmp0_;
23808 	_tmp2_ = vala_expression_get_value_type (_tmp1_);
23809 	_tmp3_ = _tmp2_;
23810 	type = _tmp3_;
23811 	_tmp4_ = type;
23812 	pointer_type = G_TYPE_CHECK_INSTANCE_TYPE (_tmp4_, VALA_TYPE_POINTER_TYPE) ? ((ValaPointerType*) _tmp4_) : NULL;
23813 	_tmp7_ = pointer_type;
23814 	if (_tmp7_ != NULL) {
23815 		ValaPointerType* _tmp8_;
23816 		ValaDataType* _tmp9_;
23817 		ValaDataType* _tmp10_;
23818 		ValaTypeSymbol* _tmp11_;
23819 		ValaTypeSymbol* _tmp12_;
23820 		_tmp8_ = pointer_type;
23821 		_tmp9_ = vala_pointer_type_get_base_type (_tmp8_);
23822 		_tmp10_ = _tmp9_;
23823 		_tmp11_ = vala_data_type_get_type_symbol (_tmp10_);
23824 		_tmp12_ = _tmp11_;
23825 		_tmp6_ = _tmp12_ != NULL;
23826 	} else {
23827 		_tmp6_ = FALSE;
23828 	}
23829 	if (_tmp6_) {
23830 		ValaPointerType* _tmp13_;
23831 		ValaDataType* _tmp14_;
23832 		ValaDataType* _tmp15_;
23833 		ValaTypeSymbol* _tmp16_;
23834 		ValaTypeSymbol* _tmp17_;
23835 		_tmp13_ = pointer_type;
23836 		_tmp14_ = vala_pointer_type_get_base_type (_tmp13_);
23837 		_tmp15_ = _tmp14_;
23838 		_tmp16_ = vala_data_type_get_type_symbol (_tmp15_);
23839 		_tmp17_ = _tmp16_;
23840 		_tmp5_ = vala_typesymbol_is_reference_type (_tmp17_);
23841 	} else {
23842 		_tmp5_ = FALSE;
23843 	}
23844 	if (_tmp5_) {
23845 		ValaPointerType* _tmp18_;
23846 		ValaDataType* _tmp19_;
23847 		ValaDataType* _tmp20_;
23848 		_tmp18_ = pointer_type;
23849 		_tmp19_ = vala_pointer_type_get_base_type (_tmp18_);
23850 		_tmp20_ = _tmp19_;
23851 		type = _tmp20_;
23852 	}
23853 	_tmp21_ = type;
23854 	_tmp22_ = vala_ccode_base_module_get_destroy_func_expression (self, _tmp21_, FALSE);
23855 	_tmp23_ = _tmp22_;
23856 	_tmp24_ = vala_ccode_function_call_new (_tmp23_);
23857 	_tmp25_ = _tmp24_;
23858 	_vala_ccode_node_unref0 (_tmp23_);
23859 	ccall = _tmp25_;
23860 	_tmp26_ = vala_delete_statement_get_expression (stmt);
23861 	_tmp27_ = _tmp26_;
23862 	_tmp28_ = vala_get_cvalue (_tmp27_);
23863 	vala_ccode_function_call_add_argument (ccall, _tmp28_);
23864 	_tmp29_ = vala_ccode_base_module_get_ccode (self);
23865 	_tmp30_ = _tmp29_;
23866 	vala_ccode_function_add_expression (_tmp30_, (ValaCCodeExpression*) ccall);
23867 	_vala_ccode_node_unref0 (ccall);
23868 }
23869 
23870 static gboolean
vala_ccode_base_module_is_compact_class_destructor_call(ValaExpression * expr)23871 vala_ccode_base_module_is_compact_class_destructor_call (ValaExpression* expr)
23872 {
23873 	ValaClass* cl = NULL;
23874 	ValaDataType* _tmp0_;
23875 	ValaDataType* _tmp1_;
23876 	ValaTypeSymbol* _tmp2_;
23877 	ValaTypeSymbol* _tmp3_;
23878 	gboolean _tmp4_ = FALSE;
23879 	gboolean _tmp5_ = FALSE;
23880 	ValaClass* _tmp6_;
23881 	gboolean result = FALSE;
23882 	g_return_val_if_fail (expr != NULL, FALSE);
23883 	_tmp0_ = vala_expression_get_value_type (expr);
23884 	_tmp1_ = _tmp0_;
23885 	_tmp2_ = vala_data_type_get_type_symbol (_tmp1_);
23886 	_tmp3_ = _tmp2_;
23887 	cl = G_TYPE_CHECK_INSTANCE_TYPE (_tmp3_, VALA_TYPE_CLASS) ? ((ValaClass*) _tmp3_) : NULL;
23888 	_tmp6_ = cl;
23889 	if (_tmp6_ != NULL) {
23890 		ValaClass* _tmp7_;
23891 		gboolean _tmp8_;
23892 		gboolean _tmp9_;
23893 		_tmp7_ = cl;
23894 		_tmp8_ = vala_class_get_is_compact (_tmp7_);
23895 		_tmp9_ = _tmp8_;
23896 		_tmp5_ = _tmp9_;
23897 	} else {
23898 		_tmp5_ = FALSE;
23899 	}
23900 	if (_tmp5_) {
23901 		ValaCodeNode* _tmp10_;
23902 		ValaCodeNode* _tmp11_;
23903 		_tmp10_ = vala_code_node_get_parent_node ((ValaCodeNode*) expr);
23904 		_tmp11_ = _tmp10_;
23905 		_tmp4_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp11_, VALA_TYPE_MEMBER_ACCESS);
23906 	} else {
23907 		_tmp4_ = FALSE;
23908 	}
23909 	if (_tmp4_) {
23910 		ValaMethodType* mt = NULL;
23911 		ValaCodeNode* _tmp12_;
23912 		ValaCodeNode* _tmp13_;
23913 		ValaDataType* _tmp14_;
23914 		ValaDataType* _tmp15_;
23915 		gboolean _tmp16_ = FALSE;
23916 		gboolean _tmp17_ = FALSE;
23917 		ValaMethodType* _tmp18_;
23918 		_tmp12_ = vala_code_node_get_parent_node ((ValaCodeNode*) expr);
23919 		_tmp13_ = _tmp12_;
23920 		_tmp14_ = vala_expression_get_value_type ((ValaExpression*) G_TYPE_CHECK_INSTANCE_CAST (_tmp13_, VALA_TYPE_MEMBER_ACCESS, ValaMemberAccess));
23921 		_tmp15_ = _tmp14_;
23922 		mt = G_TYPE_CHECK_INSTANCE_TYPE (_tmp15_, VALA_TYPE_METHOD_TYPE) ? ((ValaMethodType*) _tmp15_) : NULL;
23923 		_tmp18_ = mt;
23924 		if (_tmp18_ != NULL) {
23925 			ValaMethodType* _tmp19_;
23926 			ValaMethod* _tmp20_;
23927 			ValaMethod* _tmp21_;
23928 			_tmp19_ = mt;
23929 			_tmp20_ = vala_method_type_get_method_symbol (_tmp19_);
23930 			_tmp21_ = _tmp20_;
23931 			_tmp17_ = _tmp21_ != NULL;
23932 		} else {
23933 			_tmp17_ = FALSE;
23934 		}
23935 		if (_tmp17_) {
23936 			ValaMethodType* _tmp22_;
23937 			ValaMethod* _tmp23_;
23938 			ValaMethod* _tmp24_;
23939 			ValaAttribute* _tmp25_;
23940 			_tmp22_ = mt;
23941 			_tmp23_ = vala_method_type_get_method_symbol (_tmp22_);
23942 			_tmp24_ = _tmp23_;
23943 			_tmp25_ = vala_code_node_get_attribute ((ValaCodeNode*) _tmp24_, "DestroysInstance");
23944 			_tmp16_ = _tmp25_ != NULL;
23945 		} else {
23946 			_tmp16_ = FALSE;
23947 		}
23948 		if (_tmp16_) {
23949 			result = TRUE;
23950 			return result;
23951 		}
23952 	}
23953 	result = FALSE;
23954 	return result;
23955 }
23956 
23957 static void
vala_ccode_base_module_real_visit_expression(ValaCodeVisitor * base,ValaExpression * expr)23958 vala_ccode_base_module_real_visit_expression (ValaCodeVisitor* base,
23959                                               ValaExpression* expr)
23960 {
23961 	ValaCCodeBaseModule * self;
23962 	gboolean _tmp0_ = FALSE;
23963 	ValaCCodeExpression* _tmp1_;
23964 	self = (ValaCCodeBaseModule*) base;
23965 	g_return_if_fail (expr != NULL);
23966 	_tmp1_ = vala_get_cvalue (expr);
23967 	if (_tmp1_ != NULL) {
23968 		gboolean _tmp2_;
23969 		gboolean _tmp3_;
23970 		_tmp2_ = vala_expression_get_lvalue (expr);
23971 		_tmp3_ = _tmp2_;
23972 		_tmp0_ = !_tmp3_;
23973 	} else {
23974 		_tmp0_ = FALSE;
23975 	}
23976 	if (_tmp0_) {
23977 		gboolean _tmp4_ = FALSE;
23978 		ValaDataType* _tmp5_;
23979 		ValaDataType* _tmp6_;
23980 		ValaDataType* _tmp37_;
23981 		ValaDataType* _tmp38_;
23982 		ValaTargetValue* _tmp49_;
23983 		ValaTargetValue* _tmp50_;
23984 		gboolean _tmp51_ = FALSE;
23985 		ValaDataType* _tmp52_;
23986 		ValaDataType* _tmp53_;
23987 		gboolean _tmp70_ = FALSE;
23988 		ValaDataType* _tmp71_;
23989 		ValaDataType* _tmp72_;
23990 		_tmp5_ = vala_expression_get_formal_value_type (expr);
23991 		_tmp6_ = _tmp5_;
23992 		if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp6_, VALA_TYPE_GENERIC_TYPE)) {
23993 			ValaDataType* _tmp7_;
23994 			ValaDataType* _tmp8_;
23995 			_tmp7_ = vala_expression_get_value_type (expr);
23996 			_tmp8_ = _tmp7_;
23997 			_tmp4_ = !G_TYPE_CHECK_INSTANCE_TYPE (_tmp8_, VALA_TYPE_GENERIC_TYPE);
23998 		} else {
23999 			_tmp4_ = FALSE;
24000 		}
24001 		if (_tmp4_) {
24002 			ValaTypeParameter* type_parameter = NULL;
24003 			ValaDataType* _tmp9_;
24004 			ValaDataType* _tmp10_;
24005 			ValaTypeParameter* _tmp11_;
24006 			ValaTypeParameter* _tmp12_;
24007 			ValaTypeParameter* _tmp13_;
24008 			ValaStruct* st = NULL;
24009 			ValaTypeParameter* _tmp14_;
24010 			ValaSymbol* _tmp15_;
24011 			ValaSymbol* _tmp16_;
24012 			ValaSymbol* _tmp17_;
24013 			ValaSymbol* _tmp18_;
24014 			ValaStruct* _tmp19_;
24015 			gboolean _tmp20_ = FALSE;
24016 			ValaTypeParameter* _tmp21_;
24017 			ValaSymbol* _tmp22_;
24018 			ValaSymbol* _tmp23_;
24019 			ValaTypeSymbol* _tmp24_;
24020 			_tmp9_ = vala_expression_get_formal_value_type (expr);
24021 			_tmp10_ = _tmp9_;
24022 			_tmp11_ = vala_generic_type_get_type_parameter (G_TYPE_CHECK_INSTANCE_CAST (_tmp10_, VALA_TYPE_GENERIC_TYPE, ValaGenericType));
24023 			_tmp12_ = _tmp11_;
24024 			_tmp13_ = _vala_code_node_ref0 (_tmp12_);
24025 			type_parameter = _tmp13_;
24026 			_tmp14_ = type_parameter;
24027 			_tmp15_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp14_);
24028 			_tmp16_ = _tmp15_;
24029 			_tmp17_ = vala_symbol_get_parent_symbol (_tmp16_);
24030 			_tmp18_ = _tmp17_;
24031 			_tmp19_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (_tmp18_, VALA_TYPE_STRUCT) ? ((ValaStruct*) _tmp18_) : NULL);
24032 			st = _tmp19_;
24033 			_tmp21_ = type_parameter;
24034 			_tmp22_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp21_);
24035 			_tmp23_ = _tmp22_;
24036 			_tmp24_ = self->garray_type;
24037 			if (_tmp23_ != G_TYPE_CHECK_INSTANCE_CAST (_tmp24_, VALA_TYPE_SYMBOL, ValaSymbol)) {
24038 				gboolean _tmp25_ = FALSE;
24039 				ValaStruct* _tmp26_;
24040 				_tmp26_ = st;
24041 				if (_tmp26_ == NULL) {
24042 					_tmp25_ = TRUE;
24043 				} else {
24044 					ValaStruct* _tmp27_;
24045 					gchar* _tmp28_;
24046 					gchar* _tmp29_;
24047 					_tmp27_ = st;
24048 					_tmp28_ = vala_get_ccode_name ((ValaCodeNode*) _tmp27_);
24049 					_tmp29_ = _tmp28_;
24050 					_tmp25_ = g_strcmp0 (_tmp29_, "va_list") != 0;
24051 					_g_free0 (_tmp29_);
24052 				}
24053 				_tmp20_ = _tmp25_;
24054 			} else {
24055 				_tmp20_ = FALSE;
24056 			}
24057 			if (_tmp20_) {
24058 				ValaCCodeExpression* _tmp30_;
24059 				ValaDataType* _tmp31_;
24060 				ValaDataType* _tmp32_;
24061 				ValaCCodeExpression* _tmp33_;
24062 				ValaCCodeExpression* _tmp34_;
24063 				ValaTargetValue* _tmp35_;
24064 				ValaTargetValue* _tmp36_;
24065 				_tmp30_ = vala_get_cvalue (expr);
24066 				_tmp31_ = vala_expression_get_value_type (expr);
24067 				_tmp32_ = _tmp31_;
24068 				_tmp33_ = vala_ccode_base_module_convert_from_generic_pointer (self, _tmp30_, _tmp32_);
24069 				_tmp34_ = _tmp33_;
24070 				vala_set_cvalue (expr, _tmp34_);
24071 				_vala_ccode_node_unref0 (_tmp34_);
24072 				_tmp35_ = vala_expression_get_target_value (expr);
24073 				_tmp36_ = _tmp35_;
24074 				G_TYPE_CHECK_INSTANCE_CAST (_tmp36_, VALA_TYPE_GLIB_VALUE, ValaGLibValue)->lvalue = FALSE;
24075 			}
24076 			_vala_code_node_unref0 (st);
24077 			_vala_code_node_unref0 (type_parameter);
24078 		}
24079 		_tmp37_ = vala_expression_get_value_type (expr);
24080 		_tmp38_ = _tmp37_;
24081 		if (_tmp38_ != NULL) {
24082 			ValaTargetValue* _tmp39_;
24083 			ValaTargetValue* _tmp40_;
24084 			ValaDataType* _tmp41_;
24085 			ValaDataType* _tmp42_;
24086 			ValaTargetValue* _tmp43_;
24087 			ValaTargetValue* _tmp44_;
24088 			ValaDataType* _tmp45_;
24089 			ValaDataType* _tmp46_;
24090 			ValaTargetValue* _tmp47_;
24091 			ValaTargetValue* _tmp48_;
24092 			_tmp39_ = vala_expression_get_target_value (expr);
24093 			_tmp40_ = _tmp39_;
24094 			_tmp41_ = vala_expression_get_value_type (expr);
24095 			_tmp42_ = _tmp41_;
24096 			vala_target_value_set_value_type (_tmp40_, _tmp42_);
24097 			_tmp43_ = vala_expression_get_target_value (expr);
24098 			_tmp44_ = _tmp43_;
24099 			_tmp45_ = vala_expression_get_target_type (expr);
24100 			_tmp46_ = _tmp45_;
24101 			_tmp47_ = vala_ccode_base_module_transform_value (self, _tmp44_, _tmp46_, (ValaCodeNode*) expr);
24102 			_tmp48_ = _tmp47_;
24103 			vala_expression_set_target_value (expr, _tmp48_);
24104 			_vala_target_value_unref0 (_tmp48_);
24105 		}
24106 		_tmp49_ = vala_expression_get_target_value (expr);
24107 		_tmp50_ = _tmp49_;
24108 		if (_tmp50_ == NULL) {
24109 			return;
24110 		}
24111 		_tmp52_ = vala_expression_get_formal_target_type (expr);
24112 		_tmp53_ = _tmp52_;
24113 		if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp53_, VALA_TYPE_GENERIC_TYPE)) {
24114 			ValaDataType* _tmp54_;
24115 			ValaDataType* _tmp55_;
24116 			_tmp54_ = vala_expression_get_target_type (expr);
24117 			_tmp55_ = _tmp54_;
24118 			_tmp51_ = !G_TYPE_CHECK_INSTANCE_TYPE (_tmp55_, VALA_TYPE_GENERIC_TYPE);
24119 		} else {
24120 			_tmp51_ = FALSE;
24121 		}
24122 		if (_tmp51_) {
24123 			ValaDataType* _tmp56_;
24124 			ValaDataType* _tmp57_;
24125 			ValaTypeParameter* _tmp58_;
24126 			ValaTypeParameter* _tmp59_;
24127 			ValaSymbol* _tmp60_;
24128 			ValaSymbol* _tmp61_;
24129 			ValaTypeSymbol* _tmp62_;
24130 			_tmp56_ = vala_expression_get_formal_target_type (expr);
24131 			_tmp57_ = _tmp56_;
24132 			_tmp58_ = vala_generic_type_get_type_parameter (G_TYPE_CHECK_INSTANCE_CAST (_tmp57_, VALA_TYPE_GENERIC_TYPE, ValaGenericType));
24133 			_tmp59_ = _tmp58_;
24134 			_tmp60_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp59_);
24135 			_tmp61_ = _tmp60_;
24136 			_tmp62_ = self->garray_type;
24137 			if (_tmp61_ != G_TYPE_CHECK_INSTANCE_CAST (_tmp62_, VALA_TYPE_SYMBOL, ValaSymbol)) {
24138 				ValaCCodeExpression* _tmp63_;
24139 				ValaDataType* _tmp64_;
24140 				ValaDataType* _tmp65_;
24141 				ValaCCodeExpression* _tmp66_;
24142 				ValaCCodeExpression* _tmp67_;
24143 				ValaTargetValue* _tmp68_;
24144 				ValaTargetValue* _tmp69_;
24145 				_tmp63_ = vala_get_cvalue (expr);
24146 				_tmp64_ = vala_expression_get_target_type (expr);
24147 				_tmp65_ = _tmp64_;
24148 				_tmp66_ = vala_ccode_base_module_convert_to_generic_pointer (self, _tmp63_, _tmp65_);
24149 				_tmp67_ = _tmp66_;
24150 				vala_set_cvalue (expr, _tmp67_);
24151 				_vala_ccode_node_unref0 (_tmp67_);
24152 				_tmp68_ = vala_expression_get_target_value (expr);
24153 				_tmp69_ = _tmp68_;
24154 				G_TYPE_CHECK_INSTANCE_CAST (_tmp69_, VALA_TYPE_GLIB_VALUE, ValaGLibValue)->lvalue = FALSE;
24155 			}
24156 		}
24157 		_tmp71_ = vala_expression_get_value_type (expr);
24158 		_tmp72_ = _tmp71_;
24159 		if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp72_, VALA_TYPE_VALUE_TYPE)) {
24160 			ValaDataType* _tmp73_;
24161 			ValaDataType* _tmp74_;
24162 			gboolean _tmp75_;
24163 			gboolean _tmp76_;
24164 			_tmp73_ = vala_expression_get_value_type (expr);
24165 			_tmp74_ = _tmp73_;
24166 			_tmp75_ = vala_data_type_get_nullable (_tmp74_);
24167 			_tmp76_ = _tmp75_;
24168 			_tmp70_ = !_tmp76_;
24169 		} else {
24170 			_tmp70_ = FALSE;
24171 		}
24172 		if (!_tmp70_) {
24173 			ValaTargetValue* _tmp77_;
24174 			ValaTargetValue* _tmp78_;
24175 			_tmp77_ = vala_expression_get_target_value (expr);
24176 			_tmp78_ = _tmp77_;
24177 			G_TYPE_CHECK_INSTANCE_CAST (_tmp78_, VALA_TYPE_GLIB_VALUE, ValaGLibValue)->non_null = vala_expression_is_non_null (expr);
24178 		}
24179 	} else {
24180 		gboolean _tmp79_ = FALSE;
24181 		ValaDataType* _tmp80_;
24182 		ValaDataType* _tmp81_;
24183 		_tmp80_ = vala_expression_get_value_type (expr);
24184 		_tmp81_ = _tmp80_;
24185 		if (_tmp81_ != NULL) {
24186 			_tmp79_ = vala_ccode_base_module_is_compact_class_destructor_call (expr);
24187 		} else {
24188 			_tmp79_ = FALSE;
24189 		}
24190 		if (_tmp79_) {
24191 			ValaTargetValue* temp_value = NULL;
24192 			ValaTargetValue* _tmp82_;
24193 			ValaTargetValue* _tmp83_;
24194 			ValaTargetValue* _tmp84_;
24195 			ValaCCodeFunction* _tmp85_;
24196 			ValaCCodeFunction* _tmp86_;
24197 			ValaCCodeExpression* _tmp87_;
24198 			ValaCCodeConstant* _tmp88_;
24199 			ValaCCodeConstant* _tmp89_;
24200 			ValaTargetValue* _tmp90_;
24201 			_tmp82_ = vala_expression_get_target_value (expr);
24202 			_tmp83_ = _tmp82_;
24203 			_tmp84_ = vala_ccode_base_module_store_temp_value (self, _tmp83_, (ValaCodeNode*) expr, NULL);
24204 			temp_value = _tmp84_;
24205 			_tmp85_ = vala_ccode_base_module_get_ccode (self);
24206 			_tmp86_ = _tmp85_;
24207 			_tmp87_ = vala_get_cvalue (expr);
24208 			_tmp88_ = vala_ccode_constant_new ("NULL");
24209 			_tmp89_ = _tmp88_;
24210 			vala_ccode_function_add_assignment (_tmp86_, _tmp87_, (ValaCCodeExpression*) _tmp89_);
24211 			_vala_ccode_node_unref0 (_tmp89_);
24212 			_tmp90_ = temp_value;
24213 			vala_expression_set_target_value (expr, _tmp90_);
24214 			_vala_target_value_unref0 (temp_value);
24215 		}
24216 	}
24217 }
24218 
24219 static void
vala_ccode_base_module_real_visit_boolean_literal(ValaCodeVisitor * base,ValaBooleanLiteral * expr)24220 vala_ccode_base_module_real_visit_boolean_literal (ValaCodeVisitor* base,
24221                                                    ValaBooleanLiteral* expr)
24222 {
24223 	ValaCCodeBaseModule * self;
24224 	gboolean _tmp0_;
24225 	gboolean _tmp1_;
24226 	ValaCCodeExpression* _tmp2_;
24227 	ValaCCodeExpression* _tmp3_;
24228 	self = (ValaCCodeBaseModule*) base;
24229 	g_return_if_fail (expr != NULL);
24230 	_tmp0_ = vala_boolean_literal_get_value (expr);
24231 	_tmp1_ = _tmp0_;
24232 	_tmp2_ = vala_ccode_base_module_get_boolean_cconstant (self, _tmp1_);
24233 	_tmp3_ = _tmp2_;
24234 	vala_set_cvalue ((ValaExpression*) expr, _tmp3_);
24235 	_vala_ccode_node_unref0 (_tmp3_);
24236 }
24237 
24238 static void
vala_ccode_base_module_real_visit_character_literal(ValaCodeVisitor * base,ValaCharacterLiteral * expr)24239 vala_ccode_base_module_real_visit_character_literal (ValaCodeVisitor* base,
24240                                                      ValaCharacterLiteral* expr)
24241 {
24242 	ValaCCodeBaseModule * self;
24243 	gboolean _tmp0_ = FALSE;
24244 	self = (ValaCCodeBaseModule*) base;
24245 	g_return_if_fail (expr != NULL);
24246 	if (vala_character_literal_get_char (expr) >= ((gunichar) 0x20)) {
24247 		_tmp0_ = vala_character_literal_get_char (expr) < ((gunichar) 0x80);
24248 	} else {
24249 		_tmp0_ = FALSE;
24250 	}
24251 	if (_tmp0_) {
24252 		const gchar* _tmp1_;
24253 		const gchar* _tmp2_;
24254 		ValaCCodeConstant* _tmp3_;
24255 		ValaCCodeConstant* _tmp4_;
24256 		_tmp1_ = vala_character_literal_get_value (expr);
24257 		_tmp2_ = _tmp1_;
24258 		_tmp3_ = vala_ccode_constant_new (_tmp2_);
24259 		_tmp4_ = _tmp3_;
24260 		vala_set_cvalue ((ValaExpression*) expr, (ValaCCodeExpression*) _tmp4_);
24261 		_vala_ccode_node_unref0 (_tmp4_);
24262 	} else {
24263 		gchar* _tmp5_;
24264 		gchar* _tmp6_;
24265 		ValaCCodeConstant* _tmp7_;
24266 		ValaCCodeConstant* _tmp8_;
24267 		_tmp5_ = g_strdup_printf ("%uU", (guint) vala_character_literal_get_char (expr));
24268 		_tmp6_ = _tmp5_;
24269 		_tmp7_ = vala_ccode_constant_new (_tmp6_);
24270 		_tmp8_ = _tmp7_;
24271 		vala_set_cvalue ((ValaExpression*) expr, (ValaCCodeExpression*) _tmp8_);
24272 		_vala_ccode_node_unref0 (_tmp8_);
24273 		_g_free0 (_tmp6_);
24274 	}
24275 }
24276 
24277 static void
vala_ccode_base_module_real_visit_integer_literal(ValaCodeVisitor * base,ValaIntegerLiteral * expr)24278 vala_ccode_base_module_real_visit_integer_literal (ValaCodeVisitor* base,
24279                                                    ValaIntegerLiteral* expr)
24280 {
24281 	ValaCCodeBaseModule * self;
24282 	const gchar* _tmp0_;
24283 	const gchar* _tmp1_;
24284 	const gchar* _tmp2_;
24285 	const gchar* _tmp3_;
24286 	gchar* _tmp4_;
24287 	gchar* _tmp5_;
24288 	ValaCCodeConstant* _tmp6_;
24289 	ValaCCodeConstant* _tmp7_;
24290 	self = (ValaCCodeBaseModule*) base;
24291 	g_return_if_fail (expr != NULL);
24292 	_tmp0_ = vala_integer_literal_get_value (expr);
24293 	_tmp1_ = _tmp0_;
24294 	_tmp2_ = vala_integer_literal_get_type_suffix (expr);
24295 	_tmp3_ = _tmp2_;
24296 	_tmp4_ = g_strconcat (_tmp1_, _tmp3_, NULL);
24297 	_tmp5_ = _tmp4_;
24298 	_tmp6_ = vala_ccode_constant_new (_tmp5_);
24299 	_tmp7_ = _tmp6_;
24300 	vala_set_cvalue ((ValaExpression*) expr, (ValaCCodeExpression*) _tmp7_);
24301 	_vala_ccode_node_unref0 (_tmp7_);
24302 	_g_free0 (_tmp5_);
24303 }
24304 
24305 static glong
string_strnlen(gchar * str,glong maxlen)24306 string_strnlen (gchar* str,
24307                 glong maxlen)
24308 {
24309 	gchar* end = NULL;
24310 	gchar* _tmp0_;
24311 	gchar* _tmp1_;
24312 	glong result = 0L;
24313 	_tmp0_ = memchr (str, 0, (gsize) maxlen);
24314 	end = _tmp0_;
24315 	_tmp1_ = end;
24316 	if (_tmp1_ == NULL) {
24317 		result = maxlen;
24318 		return result;
24319 	} else {
24320 		gchar* _tmp2_;
24321 		_tmp2_ = end;
24322 		result = (glong) (_tmp2_ - str);
24323 		return result;
24324 	}
24325 }
24326 
24327 static gchar*
string_substring(const gchar * self,glong offset,glong len)24328 string_substring (const gchar* self,
24329                   glong offset,
24330                   glong len)
24331 {
24332 	glong string_length = 0L;
24333 	gboolean _tmp0_ = FALSE;
24334 	gchar* _tmp3_;
24335 	gchar* result = NULL;
24336 	g_return_val_if_fail (self != NULL, NULL);
24337 	if (offset >= ((glong) 0)) {
24338 		_tmp0_ = len >= ((glong) 0);
24339 	} else {
24340 		_tmp0_ = FALSE;
24341 	}
24342 	if (_tmp0_) {
24343 		string_length = string_strnlen ((gchar*) self, offset + len);
24344 	} else {
24345 		gint _tmp1_;
24346 		gint _tmp2_;
24347 		_tmp1_ = strlen (self);
24348 		_tmp2_ = _tmp1_;
24349 		string_length = (glong) _tmp2_;
24350 	}
24351 	if (offset < ((glong) 0)) {
24352 		offset = string_length + offset;
24353 		g_return_val_if_fail (offset >= ((glong) 0), NULL);
24354 	} else {
24355 		g_return_val_if_fail (offset <= string_length, NULL);
24356 	}
24357 	if (len < ((glong) 0)) {
24358 		len = string_length - offset;
24359 	}
24360 	g_return_val_if_fail ((offset + len) <= string_length, NULL);
24361 	_tmp3_ = g_strndup (((gchar*) self) + offset, (gsize) len);
24362 	result = _tmp3_;
24363 	return result;
24364 }
24365 
24366 static gboolean
string_contains(const gchar * self,const gchar * needle)24367 string_contains (const gchar* self,
24368                  const gchar* needle)
24369 {
24370 	gchar* _tmp0_;
24371 	gboolean result = FALSE;
24372 	g_return_val_if_fail (self != NULL, FALSE);
24373 	g_return_val_if_fail (needle != NULL, FALSE);
24374 	_tmp0_ = strstr ((gchar*) self, (gchar*) needle);
24375 	result = _tmp0_ != NULL;
24376 	return result;
24377 }
24378 
24379 static void
vala_ccode_base_module_real_visit_real_literal(ValaCodeVisitor * base,ValaRealLiteral * expr)24380 vala_ccode_base_module_real_visit_real_literal (ValaCodeVisitor* base,
24381                                                 ValaRealLiteral* expr)
24382 {
24383 	ValaCCodeBaseModule * self;
24384 	gchar* c_literal = NULL;
24385 	const gchar* _tmp0_;
24386 	const gchar* _tmp1_;
24387 	gchar* _tmp2_;
24388 	gboolean _tmp3_ = FALSE;
24389 	const gchar* _tmp4_;
24390 	gboolean _tmp11_ = FALSE;
24391 	gboolean _tmp12_ = FALSE;
24392 	const gchar* _tmp13_;
24393 	const gchar* _tmp28_;
24394 	ValaCCodeConstant* _tmp29_;
24395 	ValaCCodeConstant* _tmp30_;
24396 	self = (ValaCCodeBaseModule*) base;
24397 	g_return_if_fail (expr != NULL);
24398 	_tmp0_ = vala_real_literal_get_value (expr);
24399 	_tmp1_ = _tmp0_;
24400 	_tmp2_ = g_strdup (_tmp1_);
24401 	c_literal = _tmp2_;
24402 	_tmp4_ = c_literal;
24403 	if (g_str_has_suffix (_tmp4_, "d")) {
24404 		_tmp3_ = TRUE;
24405 	} else {
24406 		const gchar* _tmp5_;
24407 		_tmp5_ = c_literal;
24408 		_tmp3_ = g_str_has_suffix (_tmp5_, "D");
24409 	}
24410 	if (_tmp3_) {
24411 		const gchar* _tmp6_;
24412 		const gchar* _tmp7_;
24413 		gint _tmp8_;
24414 		gint _tmp9_;
24415 		gchar* _tmp10_;
24416 		_tmp6_ = c_literal;
24417 		_tmp7_ = c_literal;
24418 		_tmp8_ = strlen (_tmp7_);
24419 		_tmp9_ = _tmp8_;
24420 		_tmp10_ = string_substring (_tmp6_, (glong) 0, (glong) (_tmp9_ - 1));
24421 		_g_free0 (c_literal);
24422 		c_literal = _tmp10_;
24423 	}
24424 	_tmp13_ = c_literal;
24425 	if (string_contains (_tmp13_, ".")) {
24426 		_tmp12_ = TRUE;
24427 	} else {
24428 		const gchar* _tmp14_;
24429 		_tmp14_ = c_literal;
24430 		_tmp12_ = string_contains (_tmp14_, "e");
24431 	}
24432 	if (_tmp12_) {
24433 		_tmp11_ = TRUE;
24434 	} else {
24435 		const gchar* _tmp15_;
24436 		_tmp15_ = c_literal;
24437 		_tmp11_ = string_contains (_tmp15_, "E");
24438 	}
24439 	if (!_tmp11_) {
24440 		gboolean _tmp16_ = FALSE;
24441 		const gchar* _tmp17_;
24442 		_tmp17_ = c_literal;
24443 		if (string_contains (_tmp17_, "f")) {
24444 			_tmp16_ = TRUE;
24445 		} else {
24446 			const gchar* _tmp18_;
24447 			_tmp18_ = c_literal;
24448 			_tmp16_ = string_contains (_tmp18_, "F");
24449 		}
24450 		if (_tmp16_) {
24451 			const gchar* _tmp19_;
24452 			const gchar* _tmp20_;
24453 			gint _tmp21_;
24454 			gint _tmp22_;
24455 			gchar* _tmp23_;
24456 			gchar* _tmp24_;
24457 			gchar* _tmp25_;
24458 			_tmp19_ = c_literal;
24459 			_tmp20_ = c_literal;
24460 			_tmp21_ = strlen (_tmp20_);
24461 			_tmp22_ = _tmp21_;
24462 			_tmp23_ = string_substring (_tmp19_, (glong) 0, (glong) (_tmp22_ - 1));
24463 			_tmp24_ = _tmp23_;
24464 			_tmp25_ = g_strconcat (_tmp24_, ".f", NULL);
24465 			_g_free0 (c_literal);
24466 			c_literal = _tmp25_;
24467 			_g_free0 (_tmp24_);
24468 		} else {
24469 			const gchar* _tmp26_;
24470 			gchar* _tmp27_;
24471 			_tmp26_ = c_literal;
24472 			_tmp27_ = g_strconcat (_tmp26_, ".", NULL);
24473 			_g_free0 (c_literal);
24474 			c_literal = _tmp27_;
24475 		}
24476 	}
24477 	_tmp28_ = c_literal;
24478 	_tmp29_ = vala_ccode_constant_new (_tmp28_);
24479 	_tmp30_ = _tmp29_;
24480 	vala_set_cvalue ((ValaExpression*) expr, (ValaCCodeExpression*) _tmp30_);
24481 	_vala_ccode_node_unref0 (_tmp30_);
24482 	_g_free0 (c_literal);
24483 }
24484 
24485 static void
vala_ccode_base_module_real_visit_string_literal(ValaCodeVisitor * base,ValaStringLiteral * expr)24486 vala_ccode_base_module_real_visit_string_literal (ValaCodeVisitor* base,
24487                                                   ValaStringLiteral* expr)
24488 {
24489 	ValaCCodeBaseModule * self;
24490 	const gchar* _tmp0_;
24491 	const gchar* _tmp1_;
24492 	gchar* _tmp2_;
24493 	gchar* _tmp3_;
24494 	ValaCCodeConstant* _tmp4_;
24495 	ValaCCodeConstant* _tmp5_;
24496 	gboolean _tmp6_;
24497 	gboolean _tmp7_;
24498 	self = (ValaCCodeBaseModule*) base;
24499 	g_return_if_fail (expr != NULL);
24500 	_tmp0_ = vala_string_literal_get_value (expr);
24501 	_tmp1_ = _tmp0_;
24502 	_tmp2_ = string_replace (_tmp1_, "\n", "\\n");
24503 	_tmp3_ = _tmp2_;
24504 	_tmp4_ = vala_ccode_constant_new_string (_tmp3_);
24505 	_tmp5_ = _tmp4_;
24506 	vala_set_cvalue ((ValaExpression*) expr, (ValaCCodeExpression*) _tmp5_);
24507 	_vala_ccode_node_unref0 (_tmp5_);
24508 	_g_free0 (_tmp3_);
24509 	_tmp6_ = vala_string_literal_get_translate (expr);
24510 	_tmp7_ = _tmp6_;
24511 	if (_tmp7_) {
24512 		ValaCCodeFunctionCall* translate = NULL;
24513 		ValaCCodeIdentifier* _tmp8_;
24514 		ValaCCodeIdentifier* _tmp9_;
24515 		ValaCCodeFunctionCall* _tmp10_;
24516 		ValaCCodeFunctionCall* _tmp11_;
24517 		ValaCCodeFunctionCall* _tmp12_;
24518 		ValaCCodeExpression* _tmp13_;
24519 		ValaCCodeFunctionCall* _tmp14_;
24520 		_tmp8_ = vala_ccode_identifier_new ("_");
24521 		_tmp9_ = _tmp8_;
24522 		_tmp10_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp9_);
24523 		_tmp11_ = _tmp10_;
24524 		_vala_ccode_node_unref0 (_tmp9_);
24525 		translate = _tmp11_;
24526 		_tmp12_ = translate;
24527 		_tmp13_ = vala_get_cvalue ((ValaExpression*) expr);
24528 		vala_ccode_function_call_add_argument (_tmp12_, _tmp13_);
24529 		_tmp14_ = translate;
24530 		vala_set_cvalue ((ValaExpression*) expr, (ValaCCodeExpression*) _tmp14_);
24531 		_vala_ccode_node_unref0 (translate);
24532 	}
24533 }
24534 
24535 static void
vala_ccode_base_module_real_visit_regex_literal(ValaCodeVisitor * base,ValaRegexLiteral * expr)24536 vala_ccode_base_module_real_visit_regex_literal (ValaCodeVisitor* base,
24537                                                  ValaRegexLiteral* expr)
24538 {
24539 	ValaCCodeBaseModule * self;
24540 	gchar** parts = NULL;
24541 	const gchar* _tmp0_;
24542 	const gchar* _tmp1_;
24543 	gchar** _tmp2_;
24544 	gchar** _tmp3_;
24545 	gint parts_length1;
24546 	gint _parts_size_;
24547 	gchar* re = NULL;
24548 	gchar** _tmp4_;
24549 	gint _tmp4__length1;
24550 	const gchar* _tmp5_;
24551 	gchar* _tmp6_;
24552 	gchar* flags = NULL;
24553 	gchar* _tmp7_;
24554 	gchar** _tmp8_;
24555 	gint _tmp8__length1;
24556 	const gchar* _tmp9_;
24557 	gchar** _tmp12_;
24558 	gint _tmp12__length1;
24559 	const gchar* _tmp13_;
24560 	gchar** _tmp16_;
24561 	gint _tmp16__length1;
24562 	const gchar* _tmp17_;
24563 	gchar** _tmp20_;
24564 	gint _tmp20__length1;
24565 	const gchar* _tmp21_;
24566 	ValaCCodeDeclaration* _cdecl_ = NULL;
24567 	ValaCCodeDeclaration* _tmp24_;
24568 	gchar* cname = NULL;
24569 	gchar* _tmp25_;
24570 	gint _tmp90_;
24571 	ValaCCodeDeclaration* _tmp91_;
24572 	const gchar* _tmp92_;
24573 	gchar* _tmp93_;
24574 	gchar* _tmp94_;
24575 	ValaCCodeVariableDeclarator* _tmp95_;
24576 	ValaCCodeVariableDeclarator* _tmp96_;
24577 	ValaCCodeDeclaration* _tmp97_;
24578 	ValaCCodeConstant* regex_const = NULL;
24579 	const gchar* _tmp98_;
24580 	const gchar* _tmp99_;
24581 	const gchar* _tmp100_;
24582 	gchar* _tmp101_;
24583 	gchar* _tmp102_;
24584 	ValaCCodeConstant* _tmp103_;
24585 	ValaCCodeConstant* _tmp104_;
24586 	ValaCCodeFile* _tmp105_;
24587 	ValaCCodeDeclaration* _tmp106_;
24588 	self = (ValaCCodeBaseModule*) base;
24589 	g_return_if_fail (expr != NULL);
24590 	_tmp0_ = vala_regex_literal_get_value (expr);
24591 	_tmp1_ = _tmp0_;
24592 	_tmp3_ = _tmp2_ = g_strsplit (_tmp1_, "/", 3);
24593 	parts = _tmp3_;
24594 	parts_length1 = _vala_array_length (_tmp2_);
24595 	_parts_size_ = parts_length1;
24596 	_tmp4_ = parts;
24597 	_tmp4__length1 = parts_length1;
24598 	_tmp5_ = _tmp4_[2];
24599 	_tmp6_ = g_strescape (_tmp5_, "");
24600 	re = _tmp6_;
24601 	_tmp7_ = g_strdup ("0");
24602 	flags = _tmp7_;
24603 	_tmp8_ = parts;
24604 	_tmp8__length1 = parts_length1;
24605 	_tmp9_ = _tmp8_[1];
24606 	if (string_contains (_tmp9_, "i")) {
24607 		const gchar* _tmp10_;
24608 		gchar* _tmp11_;
24609 		_tmp10_ = flags;
24610 		_tmp11_ = g_strconcat (_tmp10_, " | G_REGEX_CASELESS", NULL);
24611 		_g_free0 (flags);
24612 		flags = _tmp11_;
24613 	}
24614 	_tmp12_ = parts;
24615 	_tmp12__length1 = parts_length1;
24616 	_tmp13_ = _tmp12_[1];
24617 	if (string_contains (_tmp13_, "m")) {
24618 		const gchar* _tmp14_;
24619 		gchar* _tmp15_;
24620 		_tmp14_ = flags;
24621 		_tmp15_ = g_strconcat (_tmp14_, " | G_REGEX_MULTILINE", NULL);
24622 		_g_free0 (flags);
24623 		flags = _tmp15_;
24624 	}
24625 	_tmp16_ = parts;
24626 	_tmp16__length1 = parts_length1;
24627 	_tmp17_ = _tmp16_[1];
24628 	if (string_contains (_tmp17_, "s")) {
24629 		const gchar* _tmp18_;
24630 		gchar* _tmp19_;
24631 		_tmp18_ = flags;
24632 		_tmp19_ = g_strconcat (_tmp18_, " | G_REGEX_DOTALL", NULL);
24633 		_g_free0 (flags);
24634 		flags = _tmp19_;
24635 	}
24636 	_tmp20_ = parts;
24637 	_tmp20__length1 = parts_length1;
24638 	_tmp21_ = _tmp20_[1];
24639 	if (string_contains (_tmp21_, "x")) {
24640 		const gchar* _tmp22_;
24641 		gchar* _tmp23_;
24642 		_tmp22_ = flags;
24643 		_tmp23_ = g_strconcat (_tmp22_, " | G_REGEX_EXTENDED", NULL);
24644 		_g_free0 (flags);
24645 		flags = _tmp23_;
24646 	}
24647 	_tmp24_ = vala_ccode_declaration_new ("GRegex*");
24648 	_cdecl_ = _tmp24_;
24649 	_tmp25_ = g_strdup_printf ("_tmp_regex_%d", self->next_regex_id);
24650 	cname = _tmp25_;
24651 	if (self->next_regex_id == 0) {
24652 		ValaCCodeFunction* fun = NULL;
24653 		ValaCCodeFunction* _tmp26_;
24654 		ValaCCodeFunction* _tmp27_;
24655 		ValaCCodeFunction* _tmp28_;
24656 		ValaCCodeParameter* _tmp29_;
24657 		ValaCCodeParameter* _tmp30_;
24658 		ValaCCodeFunction* _tmp31_;
24659 		ValaCCodeParameter* _tmp32_;
24660 		ValaCCodeParameter* _tmp33_;
24661 		ValaCCodeFunction* _tmp34_;
24662 		ValaCCodeParameter* _tmp35_;
24663 		ValaCCodeParameter* _tmp36_;
24664 		ValaCCodeFunction* _tmp37_;
24665 		ValaCCodeFunctionCall* once_enter_call = NULL;
24666 		ValaCCodeIdentifier* _tmp38_;
24667 		ValaCCodeIdentifier* _tmp39_;
24668 		ValaCCodeFunctionCall* _tmp40_;
24669 		ValaCCodeFunctionCall* _tmp41_;
24670 		ValaCCodeFunctionCall* _tmp42_;
24671 		ValaCCodeConstant* _tmp43_;
24672 		ValaCCodeConstant* _tmp44_;
24673 		ValaCCodeFunction* _tmp45_;
24674 		ValaCCodeFunction* _tmp46_;
24675 		ValaCCodeFunctionCall* _tmp47_;
24676 		ValaCCodeFunctionCall* regex_new_call = NULL;
24677 		ValaCCodeIdentifier* _tmp48_;
24678 		ValaCCodeIdentifier* _tmp49_;
24679 		ValaCCodeFunctionCall* _tmp50_;
24680 		ValaCCodeFunctionCall* _tmp51_;
24681 		ValaCCodeFunctionCall* _tmp52_;
24682 		ValaCCodeConstant* _tmp53_;
24683 		ValaCCodeConstant* _tmp54_;
24684 		ValaCCodeFunctionCall* _tmp55_;
24685 		ValaCCodeConstant* _tmp56_;
24686 		ValaCCodeConstant* _tmp57_;
24687 		ValaCCodeFunctionCall* _tmp58_;
24688 		ValaCCodeConstant* _tmp59_;
24689 		ValaCCodeConstant* _tmp60_;
24690 		ValaCCodeFunctionCall* _tmp61_;
24691 		ValaCCodeConstant* _tmp62_;
24692 		ValaCCodeConstant* _tmp63_;
24693 		ValaCCodeFunction* _tmp64_;
24694 		ValaCCodeFunction* _tmp65_;
24695 		ValaCCodeIdentifier* _tmp66_;
24696 		ValaCCodeIdentifier* _tmp67_;
24697 		ValaCCodeFunctionCall* _tmp68_;
24698 		ValaCCodeFunctionCall* once_leave_call = NULL;
24699 		ValaCCodeIdentifier* _tmp69_;
24700 		ValaCCodeIdentifier* _tmp70_;
24701 		ValaCCodeFunctionCall* _tmp71_;
24702 		ValaCCodeFunctionCall* _tmp72_;
24703 		ValaCCodeFunctionCall* _tmp73_;
24704 		ValaCCodeConstant* _tmp74_;
24705 		ValaCCodeConstant* _tmp75_;
24706 		ValaCCodeFunctionCall* _tmp76_;
24707 		ValaCCodeConstant* _tmp77_;
24708 		ValaCCodeConstant* _tmp78_;
24709 		ValaCCodeFunction* _tmp79_;
24710 		ValaCCodeFunction* _tmp80_;
24711 		ValaCCodeFunctionCall* _tmp81_;
24712 		ValaCCodeFunction* _tmp82_;
24713 		ValaCCodeFunction* _tmp83_;
24714 		ValaCCodeFunction* _tmp84_;
24715 		ValaCCodeFunction* _tmp85_;
24716 		ValaCCodeIdentifier* _tmp86_;
24717 		ValaCCodeIdentifier* _tmp87_;
24718 		ValaCCodeFile* _tmp88_;
24719 		ValaCCodeFunction* _tmp89_;
24720 		_tmp26_ = vala_ccode_function_new ("_thread_safe_regex_init", "GRegex*");
24721 		fun = _tmp26_;
24722 		_tmp27_ = fun;
24723 		vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp27_, VALA_CCODE_MODIFIERS_STATIC | VALA_CCODE_MODIFIERS_INLINE);
24724 		_tmp28_ = fun;
24725 		_tmp29_ = vala_ccode_parameter_new ("re", "GRegex**");
24726 		_tmp30_ = _tmp29_;
24727 		vala_ccode_function_add_parameter (_tmp28_, _tmp30_);
24728 		_vala_ccode_node_unref0 (_tmp30_);
24729 		_tmp31_ = fun;
24730 		_tmp32_ = vala_ccode_parameter_new ("pattern", "const gchar *");
24731 		_tmp33_ = _tmp32_;
24732 		vala_ccode_function_add_parameter (_tmp31_, _tmp33_);
24733 		_vala_ccode_node_unref0 (_tmp33_);
24734 		_tmp34_ = fun;
24735 		_tmp35_ = vala_ccode_parameter_new ("compile_flags", "GRegexCompileFlags");
24736 		_tmp36_ = _tmp35_;
24737 		vala_ccode_function_add_parameter (_tmp34_, _tmp36_);
24738 		_vala_ccode_node_unref0 (_tmp36_);
24739 		_tmp37_ = fun;
24740 		vala_ccode_base_module_push_function (self, _tmp37_);
24741 		_tmp38_ = vala_ccode_identifier_new ("g_once_init_enter");
24742 		_tmp39_ = _tmp38_;
24743 		_tmp40_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp39_);
24744 		_tmp41_ = _tmp40_;
24745 		_vala_ccode_node_unref0 (_tmp39_);
24746 		once_enter_call = _tmp41_;
24747 		_tmp42_ = once_enter_call;
24748 		_tmp43_ = vala_ccode_constant_new ("(volatile gsize*) re");
24749 		_tmp44_ = _tmp43_;
24750 		vala_ccode_function_call_add_argument (_tmp42_, (ValaCCodeExpression*) _tmp44_);
24751 		_vala_ccode_node_unref0 (_tmp44_);
24752 		_tmp45_ = vala_ccode_base_module_get_ccode (self);
24753 		_tmp46_ = _tmp45_;
24754 		_tmp47_ = once_enter_call;
24755 		vala_ccode_function_open_if (_tmp46_, (ValaCCodeExpression*) _tmp47_);
24756 		_tmp48_ = vala_ccode_identifier_new ("g_regex_new");
24757 		_tmp49_ = _tmp48_;
24758 		_tmp50_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp49_);
24759 		_tmp51_ = _tmp50_;
24760 		_vala_ccode_node_unref0 (_tmp49_);
24761 		regex_new_call = _tmp51_;
24762 		_tmp52_ = regex_new_call;
24763 		_tmp53_ = vala_ccode_constant_new ("pattern");
24764 		_tmp54_ = _tmp53_;
24765 		vala_ccode_function_call_add_argument (_tmp52_, (ValaCCodeExpression*) _tmp54_);
24766 		_vala_ccode_node_unref0 (_tmp54_);
24767 		_tmp55_ = regex_new_call;
24768 		_tmp56_ = vala_ccode_constant_new ("compile_flags");
24769 		_tmp57_ = _tmp56_;
24770 		vala_ccode_function_call_add_argument (_tmp55_, (ValaCCodeExpression*) _tmp57_);
24771 		_vala_ccode_node_unref0 (_tmp57_);
24772 		_tmp58_ = regex_new_call;
24773 		_tmp59_ = vala_ccode_constant_new ("0");
24774 		_tmp60_ = _tmp59_;
24775 		vala_ccode_function_call_add_argument (_tmp58_, (ValaCCodeExpression*) _tmp60_);
24776 		_vala_ccode_node_unref0 (_tmp60_);
24777 		_tmp61_ = regex_new_call;
24778 		_tmp62_ = vala_ccode_constant_new ("NULL");
24779 		_tmp63_ = _tmp62_;
24780 		vala_ccode_function_call_add_argument (_tmp61_, (ValaCCodeExpression*) _tmp63_);
24781 		_vala_ccode_node_unref0 (_tmp63_);
24782 		_tmp64_ = vala_ccode_base_module_get_ccode (self);
24783 		_tmp65_ = _tmp64_;
24784 		_tmp66_ = vala_ccode_identifier_new ("GRegex* val");
24785 		_tmp67_ = _tmp66_;
24786 		_tmp68_ = regex_new_call;
24787 		vala_ccode_function_add_assignment (_tmp65_, (ValaCCodeExpression*) _tmp67_, (ValaCCodeExpression*) _tmp68_);
24788 		_vala_ccode_node_unref0 (_tmp67_);
24789 		_tmp69_ = vala_ccode_identifier_new ("g_once_init_leave");
24790 		_tmp70_ = _tmp69_;
24791 		_tmp71_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp70_);
24792 		_tmp72_ = _tmp71_;
24793 		_vala_ccode_node_unref0 (_tmp70_);
24794 		once_leave_call = _tmp72_;
24795 		_tmp73_ = once_leave_call;
24796 		_tmp74_ = vala_ccode_constant_new ("(volatile gsize*) re");
24797 		_tmp75_ = _tmp74_;
24798 		vala_ccode_function_call_add_argument (_tmp73_, (ValaCCodeExpression*) _tmp75_);
24799 		_vala_ccode_node_unref0 (_tmp75_);
24800 		_tmp76_ = once_leave_call;
24801 		_tmp77_ = vala_ccode_constant_new ("(gsize) val");
24802 		_tmp78_ = _tmp77_;
24803 		vala_ccode_function_call_add_argument (_tmp76_, (ValaCCodeExpression*) _tmp78_);
24804 		_vala_ccode_node_unref0 (_tmp78_);
24805 		_tmp79_ = vala_ccode_base_module_get_ccode (self);
24806 		_tmp80_ = _tmp79_;
24807 		_tmp81_ = once_leave_call;
24808 		vala_ccode_function_add_expression (_tmp80_, (ValaCCodeExpression*) _tmp81_);
24809 		_tmp82_ = vala_ccode_base_module_get_ccode (self);
24810 		_tmp83_ = _tmp82_;
24811 		vala_ccode_function_close (_tmp83_);
24812 		_tmp84_ = vala_ccode_base_module_get_ccode (self);
24813 		_tmp85_ = _tmp84_;
24814 		_tmp86_ = vala_ccode_identifier_new ("*re");
24815 		_tmp87_ = _tmp86_;
24816 		vala_ccode_function_add_return (_tmp85_, (ValaCCodeExpression*) _tmp87_);
24817 		_vala_ccode_node_unref0 (_tmp87_);
24818 		vala_ccode_base_module_pop_function (self);
24819 		_tmp88_ = self->cfile;
24820 		_tmp89_ = fun;
24821 		vala_ccode_file_add_function (_tmp88_, _tmp89_);
24822 		_vala_ccode_node_unref0 (once_leave_call);
24823 		_vala_ccode_node_unref0 (regex_new_call);
24824 		_vala_ccode_node_unref0 (once_enter_call);
24825 		_vala_ccode_node_unref0 (fun);
24826 	}
24827 	_tmp90_ = self->next_regex_id;
24828 	self->next_regex_id = _tmp90_ + 1;
24829 	_tmp91_ = _cdecl_;
24830 	_tmp92_ = cname;
24831 	_tmp93_ = g_strconcat (_tmp92_, " = NULL", NULL);
24832 	_tmp94_ = _tmp93_;
24833 	_tmp95_ = vala_ccode_variable_declarator_new (_tmp94_, NULL, NULL);
24834 	_tmp96_ = _tmp95_;
24835 	vala_ccode_declaration_add_declarator (_tmp91_, (ValaCCodeDeclarator*) _tmp96_);
24836 	_vala_ccode_node_unref0 (_tmp96_);
24837 	_g_free0 (_tmp94_);
24838 	_tmp97_ = _cdecl_;
24839 	vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp97_, VALA_CCODE_MODIFIERS_STATIC);
24840 	_tmp98_ = cname;
24841 	_tmp99_ = re;
24842 	_tmp100_ = flags;
24843 	_tmp101_ = g_strdup_printf ("_thread_safe_regex_init (&%s, \"%s\", %s)", _tmp98_, _tmp99_, _tmp100_);
24844 	_tmp102_ = _tmp101_;
24845 	_tmp103_ = vala_ccode_constant_new (_tmp102_);
24846 	_tmp104_ = _tmp103_;
24847 	_g_free0 (_tmp102_);
24848 	regex_const = _tmp104_;
24849 	_tmp105_ = self->cfile;
24850 	_tmp106_ = _cdecl_;
24851 	vala_ccode_file_add_constant_declaration (_tmp105_, (ValaCCodeNode*) _tmp106_);
24852 	vala_set_cvalue ((ValaExpression*) expr, (ValaCCodeExpression*) regex_const);
24853 	_vala_ccode_node_unref0 (regex_const);
24854 	_g_free0 (cname);
24855 	_vala_ccode_node_unref0 (_cdecl_);
24856 	_g_free0 (flags);
24857 	_g_free0 (re);
24858 	parts = (_vala_array_free (parts, parts_length1, (GDestroyNotify) g_free), NULL);
24859 }
24860 
24861 static void
vala_ccode_base_module_real_visit_null_literal(ValaCodeVisitor * base,ValaNullLiteral * expr)24862 vala_ccode_base_module_real_visit_null_literal (ValaCodeVisitor* base,
24863                                                 ValaNullLiteral* expr)
24864 {
24865 	ValaCCodeBaseModule * self;
24866 	ValaCodeContext* _tmp0_;
24867 	ValaProfile _tmp1_;
24868 	ValaProfile _tmp2_;
24869 	ValaCCodeConstant* _tmp5_;
24870 	ValaCCodeConstant* _tmp6_;
24871 	ValaArrayType* array_type = NULL;
24872 	ValaDataType* _tmp7_;
24873 	ValaDataType* _tmp8_;
24874 	ValaArrayType* _tmp9_;
24875 	ValaDelegateType* delegate_type = NULL;
24876 	ValaDataType* _tmp10_;
24877 	ValaDataType* _tmp11_;
24878 	ValaDelegateType* _tmp12_;
24879 	ValaArrayType* _tmp13_;
24880 	self = (ValaCCodeBaseModule*) base;
24881 	g_return_if_fail (expr != NULL);
24882 	_tmp0_ = self->priv->_context;
24883 	_tmp1_ = vala_code_context_get_profile (_tmp0_);
24884 	_tmp2_ = _tmp1_;
24885 	if (_tmp2_ == VALA_PROFILE_GOBJECT) {
24886 		ValaCCodeFile* _tmp3_;
24887 		_tmp3_ = self->cfile;
24888 		vala_ccode_file_add_include (_tmp3_, "glib.h", FALSE);
24889 	} else {
24890 		ValaCCodeFile* _tmp4_;
24891 		_tmp4_ = self->cfile;
24892 		vala_ccode_file_add_include (_tmp4_, "stddef.h", FALSE);
24893 	}
24894 	_tmp5_ = vala_ccode_constant_new ("NULL");
24895 	_tmp6_ = _tmp5_;
24896 	vala_set_cvalue ((ValaExpression*) expr, (ValaCCodeExpression*) _tmp6_);
24897 	_vala_ccode_node_unref0 (_tmp6_);
24898 	_tmp7_ = vala_expression_get_target_type ((ValaExpression*) expr);
24899 	_tmp8_ = _tmp7_;
24900 	_tmp9_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (_tmp8_, VALA_TYPE_ARRAY_TYPE) ? ((ValaArrayType*) _tmp8_) : NULL);
24901 	array_type = _tmp9_;
24902 	_tmp10_ = vala_expression_get_target_type ((ValaExpression*) expr);
24903 	_tmp11_ = _tmp10_;
24904 	_tmp12_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (_tmp11_, VALA_TYPE_DELEGATE_TYPE) ? ((ValaDelegateType*) _tmp11_) : NULL);
24905 	delegate_type = _tmp12_;
24906 	_tmp13_ = array_type;
24907 	if (_tmp13_ != NULL) {
24908 		{
24909 			gint dim = 0;
24910 			dim = 1;
24911 			{
24912 				gboolean _tmp14_ = FALSE;
24913 				_tmp14_ = TRUE;
24914 				while (TRUE) {
24915 					ValaArrayType* _tmp16_;
24916 					gint _tmp17_;
24917 					gint _tmp18_;
24918 					ValaCCodeConstant* _tmp19_;
24919 					ValaCCodeConstant* _tmp20_;
24920 					if (!_tmp14_) {
24921 						gint _tmp15_;
24922 						_tmp15_ = dim;
24923 						dim = _tmp15_ + 1;
24924 					}
24925 					_tmp14_ = FALSE;
24926 					_tmp16_ = array_type;
24927 					_tmp17_ = vala_array_type_get_rank (_tmp16_);
24928 					_tmp18_ = _tmp17_;
24929 					if (!(dim <= _tmp18_)) {
24930 						break;
24931 					}
24932 					_tmp19_ = vala_ccode_constant_new ("0");
24933 					_tmp20_ = _tmp19_;
24934 					vala_append_array_length ((ValaExpression*) expr, (ValaCCodeExpression*) _tmp20_);
24935 					_vala_ccode_node_unref0 (_tmp20_);
24936 				}
24937 			}
24938 		}
24939 	} else {
24940 		gboolean _tmp21_ = FALSE;
24941 		ValaDelegateType* _tmp22_;
24942 		_tmp22_ = delegate_type;
24943 		if (_tmp22_ != NULL) {
24944 			ValaDelegateType* _tmp23_;
24945 			ValaDelegate* _tmp24_;
24946 			ValaDelegate* _tmp25_;
24947 			gboolean _tmp26_;
24948 			gboolean _tmp27_;
24949 			_tmp23_ = delegate_type;
24950 			_tmp24_ = vala_delegate_type_get_delegate_symbol (_tmp23_);
24951 			_tmp25_ = _tmp24_;
24952 			_tmp26_ = vala_delegate_get_has_target (_tmp25_);
24953 			_tmp27_ = _tmp26_;
24954 			_tmp21_ = _tmp27_;
24955 		} else {
24956 			_tmp21_ = FALSE;
24957 		}
24958 		if (_tmp21_) {
24959 			ValaCCodeConstant* _tmp28_;
24960 			ValaCCodeConstant* _tmp29_;
24961 			ValaCCodeConstant* _tmp30_;
24962 			ValaCCodeConstant* _tmp31_;
24963 			_tmp28_ = vala_ccode_constant_new ("NULL");
24964 			_tmp29_ = _tmp28_;
24965 			vala_set_delegate_target ((ValaExpression*) expr, (ValaCCodeExpression*) _tmp29_);
24966 			_vala_ccode_node_unref0 (_tmp29_);
24967 			_tmp30_ = vala_ccode_constant_new ("NULL");
24968 			_tmp31_ = _tmp30_;
24969 			vala_set_delegate_target_destroy_notify ((ValaExpression*) expr, (ValaCCodeExpression*) _tmp31_);
24970 			_vala_ccode_node_unref0 (_tmp31_);
24971 		}
24972 	}
24973 	_vala_code_node_unref0 (delegate_type);
24974 	_vala_code_node_unref0 (array_type);
24975 }
24976 
24977 static ValaTargetValue*
vala_ccode_base_module_real_get_local_cvalue(ValaCCodeBaseModule * self,ValaLocalVariable * local)24978 vala_ccode_base_module_real_get_local_cvalue (ValaCCodeBaseModule* self,
24979                                               ValaLocalVariable* local)
24980 {
24981 	g_critical ("Type `%s' does not implement abstract method `vala_ccode_base_module_get_local_cvalue'", g_type_name (G_TYPE_FROM_INSTANCE (self)));
24982 	return NULL;
24983 }
24984 
24985 ValaTargetValue*
vala_ccode_base_module_get_local_cvalue(ValaCCodeBaseModule * self,ValaLocalVariable * local)24986 vala_ccode_base_module_get_local_cvalue (ValaCCodeBaseModule* self,
24987                                          ValaLocalVariable* local)
24988 {
24989 	g_return_val_if_fail (self != NULL, NULL);
24990 	return VALA_CCODE_BASE_MODULE_GET_CLASS (self)->get_local_cvalue (self, local);
24991 }
24992 
24993 static ValaTargetValue*
vala_ccode_base_module_real_get_parameter_cvalue(ValaCCodeBaseModule * self,ValaParameter * param)24994 vala_ccode_base_module_real_get_parameter_cvalue (ValaCCodeBaseModule* self,
24995                                                   ValaParameter* param)
24996 {
24997 	g_critical ("Type `%s' does not implement abstract method `vala_ccode_base_module_get_parameter_cvalue'", g_type_name (G_TYPE_FROM_INSTANCE (self)));
24998 	return NULL;
24999 }
25000 
25001 ValaTargetValue*
vala_ccode_base_module_get_parameter_cvalue(ValaCCodeBaseModule * self,ValaParameter * param)25002 vala_ccode_base_module_get_parameter_cvalue (ValaCCodeBaseModule* self,
25003                                              ValaParameter* param)
25004 {
25005 	g_return_val_if_fail (self != NULL, NULL);
25006 	return VALA_CCODE_BASE_MODULE_GET_CLASS (self)->get_parameter_cvalue (self, param);
25007 }
25008 
25009 static ValaTargetValue*
vala_ccode_base_module_real_get_field_cvalue(ValaCCodeBaseModule * self,ValaField * field,ValaTargetValue * instance)25010 vala_ccode_base_module_real_get_field_cvalue (ValaCCodeBaseModule* self,
25011                                               ValaField* field,
25012                                               ValaTargetValue* instance)
25013 {
25014 	g_critical ("Type `%s' does not implement abstract method `vala_ccode_base_module_get_field_cvalue'", g_type_name (G_TYPE_FROM_INSTANCE (self)));
25015 	return NULL;
25016 }
25017 
25018 ValaTargetValue*
vala_ccode_base_module_get_field_cvalue(ValaCCodeBaseModule * self,ValaField * field,ValaTargetValue * instance)25019 vala_ccode_base_module_get_field_cvalue (ValaCCodeBaseModule* self,
25020                                          ValaField* field,
25021                                          ValaTargetValue* instance)
25022 {
25023 	g_return_val_if_fail (self != NULL, NULL);
25024 	return VALA_CCODE_BASE_MODULE_GET_CLASS (self)->get_field_cvalue (self, field, instance);
25025 }
25026 
25027 static ValaTargetValue*
vala_ccode_base_module_real_load_variable(ValaCCodeBaseModule * self,ValaVariable * variable,ValaTargetValue * value,ValaExpression * expr)25028 vala_ccode_base_module_real_load_variable (ValaCCodeBaseModule* self,
25029                                            ValaVariable* variable,
25030                                            ValaTargetValue* value,
25031                                            ValaExpression* expr)
25032 {
25033 	g_critical ("Type `%s' does not implement abstract method `vala_ccode_base_module_load_variable'", g_type_name (G_TYPE_FROM_INSTANCE (self)));
25034 	return NULL;
25035 }
25036 
25037 ValaTargetValue*
vala_ccode_base_module_load_variable(ValaCCodeBaseModule * self,ValaVariable * variable,ValaTargetValue * value,ValaExpression * expr)25038 vala_ccode_base_module_load_variable (ValaCCodeBaseModule* self,
25039                                       ValaVariable* variable,
25040                                       ValaTargetValue* value,
25041                                       ValaExpression* expr)
25042 {
25043 	g_return_val_if_fail (self != NULL, NULL);
25044 	return VALA_CCODE_BASE_MODULE_GET_CLASS (self)->load_variable (self, variable, value, expr);
25045 }
25046 
25047 static ValaTargetValue*
vala_ccode_base_module_real_load_this_parameter(ValaCCodeBaseModule * self,ValaTypeSymbol * sym)25048 vala_ccode_base_module_real_load_this_parameter (ValaCCodeBaseModule* self,
25049                                                  ValaTypeSymbol* sym)
25050 {
25051 	g_critical ("Type `%s' does not implement abstract method `vala_ccode_base_module_load_this_parameter'", g_type_name (G_TYPE_FROM_INSTANCE (self)));
25052 	return NULL;
25053 }
25054 
25055 ValaTargetValue*
vala_ccode_base_module_load_this_parameter(ValaCCodeBaseModule * self,ValaTypeSymbol * sym)25056 vala_ccode_base_module_load_this_parameter (ValaCCodeBaseModule* self,
25057                                             ValaTypeSymbol* sym)
25058 {
25059 	g_return_val_if_fail (self != NULL, NULL);
25060 	return VALA_CCODE_BASE_MODULE_GET_CLASS (self)->load_this_parameter (self, sym);
25061 }
25062 
25063 static void
vala_ccode_base_module_real_store_value(ValaCCodeBaseModule * self,ValaTargetValue * lvalue,ValaTargetValue * value,ValaSourceReference * source_reference)25064 vala_ccode_base_module_real_store_value (ValaCCodeBaseModule* self,
25065                                          ValaTargetValue* lvalue,
25066                                          ValaTargetValue* value,
25067                                          ValaSourceReference* source_reference)
25068 {
25069 	g_critical ("Type `%s' does not implement abstract method `vala_ccode_base_module_store_value'", g_type_name (G_TYPE_FROM_INSTANCE (self)));
25070 	return;
25071 }
25072 
25073 void
vala_ccode_base_module_store_value(ValaCCodeBaseModule * self,ValaTargetValue * lvalue,ValaTargetValue * value,ValaSourceReference * source_reference)25074 vala_ccode_base_module_store_value (ValaCCodeBaseModule* self,
25075                                     ValaTargetValue* lvalue,
25076                                     ValaTargetValue* value,
25077                                     ValaSourceReference* source_reference)
25078 {
25079 	g_return_if_fail (self != NULL);
25080 	VALA_CCODE_BASE_MODULE_GET_CLASS (self)->store_value (self, lvalue, value, source_reference);
25081 }
25082 
25083 static gchar*
vala_ccode_base_module_real_get_delegate_target_cname(ValaCCodeBaseModule * self,const gchar * delegate_cname)25084 vala_ccode_base_module_real_get_delegate_target_cname (ValaCCodeBaseModule* self,
25085                                                        const gchar* delegate_cname)
25086 {
25087 	g_return_val_if_fail (delegate_cname != NULL, NULL);
25088 	g_assert_not_reached ();
25089 }
25090 
25091 gchar*
vala_ccode_base_module_get_delegate_target_cname(ValaCCodeBaseModule * self,const gchar * delegate_cname)25092 vala_ccode_base_module_get_delegate_target_cname (ValaCCodeBaseModule* self,
25093                                                   const gchar* delegate_cname)
25094 {
25095 	g_return_val_if_fail (self != NULL, NULL);
25096 	return VALA_CCODE_BASE_MODULE_GET_CLASS (self)->get_delegate_target_cname (self, delegate_cname);
25097 }
25098 
25099 static ValaCCodeExpression*
vala_ccode_base_module_real_get_delegate_target_cexpression(ValaCCodeBaseModule * self,ValaExpression * delegate_expr,ValaCCodeExpression ** delegate_target_destroy_notify)25100 vala_ccode_base_module_real_get_delegate_target_cexpression (ValaCCodeBaseModule* self,
25101                                                              ValaExpression* delegate_expr,
25102                                                              ValaCCodeExpression* * delegate_target_destroy_notify)
25103 {
25104 	ValaCCodeExpression* _vala_delegate_target_destroy_notify = NULL;
25105 	g_return_val_if_fail (delegate_expr != NULL, NULL);
25106 	g_assert_not_reached ();
25107 	if (delegate_target_destroy_notify) {
25108 		*delegate_target_destroy_notify = _vala_delegate_target_destroy_notify;
25109 	} else {
25110 		_vala_ccode_node_unref0 (_vala_delegate_target_destroy_notify);
25111 	}
25112 }
25113 
25114 ValaCCodeExpression*
vala_ccode_base_module_get_delegate_target_cexpression(ValaCCodeBaseModule * self,ValaExpression * delegate_expr,ValaCCodeExpression ** delegate_target_destroy_notify)25115 vala_ccode_base_module_get_delegate_target_cexpression (ValaCCodeBaseModule* self,
25116                                                         ValaExpression* delegate_expr,
25117                                                         ValaCCodeExpression* * delegate_target_destroy_notify)
25118 {
25119 	g_return_val_if_fail (self != NULL, NULL);
25120 	return VALA_CCODE_BASE_MODULE_GET_CLASS (self)->get_delegate_target_cexpression (self, delegate_expr, delegate_target_destroy_notify);
25121 }
25122 
25123 static ValaCCodeExpression*
vala_ccode_base_module_real_get_delegate_target_cvalue(ValaCCodeBaseModule * self,ValaTargetValue * value)25124 vala_ccode_base_module_real_get_delegate_target_cvalue (ValaCCodeBaseModule* self,
25125                                                         ValaTargetValue* value)
25126 {
25127 	ValaCCodeInvalidExpression* _tmp0_;
25128 	ValaCCodeExpression* result = NULL;
25129 	g_return_val_if_fail (value != NULL, NULL);
25130 	_tmp0_ = vala_ccode_invalid_expression_new ();
25131 	result = (ValaCCodeExpression*) _tmp0_;
25132 	return result;
25133 }
25134 
25135 ValaCCodeExpression*
vala_ccode_base_module_get_delegate_target_cvalue(ValaCCodeBaseModule * self,ValaTargetValue * value)25136 vala_ccode_base_module_get_delegate_target_cvalue (ValaCCodeBaseModule* self,
25137                                                    ValaTargetValue* value)
25138 {
25139 	g_return_val_if_fail (self != NULL, NULL);
25140 	return VALA_CCODE_BASE_MODULE_GET_CLASS (self)->get_delegate_target_cvalue (self, value);
25141 }
25142 
25143 static ValaCCodeExpression*
vala_ccode_base_module_real_get_delegate_target_destroy_notify_cvalue(ValaCCodeBaseModule * self,ValaTargetValue * value)25144 vala_ccode_base_module_real_get_delegate_target_destroy_notify_cvalue (ValaCCodeBaseModule* self,
25145                                                                        ValaTargetValue* value)
25146 {
25147 	ValaCCodeInvalidExpression* _tmp0_;
25148 	ValaCCodeExpression* result = NULL;
25149 	g_return_val_if_fail (value != NULL, NULL);
25150 	_tmp0_ = vala_ccode_invalid_expression_new ();
25151 	result = (ValaCCodeExpression*) _tmp0_;
25152 	return result;
25153 }
25154 
25155 ValaCCodeExpression*
vala_ccode_base_module_get_delegate_target_destroy_notify_cvalue(ValaCCodeBaseModule * self,ValaTargetValue * value)25156 vala_ccode_base_module_get_delegate_target_destroy_notify_cvalue (ValaCCodeBaseModule* self,
25157                                                                   ValaTargetValue* value)
25158 {
25159 	g_return_val_if_fail (self != NULL, NULL);
25160 	return VALA_CCODE_BASE_MODULE_GET_CLASS (self)->get_delegate_target_destroy_notify_cvalue (self, value);
25161 }
25162 
25163 static gchar*
vala_ccode_base_module_real_get_delegate_target_destroy_notify_cname(ValaCCodeBaseModule * self,const gchar * delegate_cname)25164 vala_ccode_base_module_real_get_delegate_target_destroy_notify_cname (ValaCCodeBaseModule* self,
25165                                                                       const gchar* delegate_cname)
25166 {
25167 	g_return_val_if_fail (delegate_cname != NULL, NULL);
25168 	g_assert_not_reached ();
25169 }
25170 
25171 gchar*
vala_ccode_base_module_get_delegate_target_destroy_notify_cname(ValaCCodeBaseModule * self,const gchar * delegate_cname)25172 vala_ccode_base_module_get_delegate_target_destroy_notify_cname (ValaCCodeBaseModule* self,
25173                                                                  const gchar* delegate_cname)
25174 {
25175 	g_return_val_if_fail (self != NULL, NULL);
25176 	return VALA_CCODE_BASE_MODULE_GET_CLASS (self)->get_delegate_target_destroy_notify_cname (self, delegate_cname);
25177 }
25178 
25179 static void
vala_ccode_base_module_real_visit_base_access(ValaCodeVisitor * base,ValaBaseAccess * expr)25180 vala_ccode_base_module_real_visit_base_access (ValaCodeVisitor* base,
25181                                                ValaBaseAccess* expr)
25182 {
25183 	ValaCCodeBaseModule * self;
25184 	ValaClass* cl = NULL;
25185 	ValaDataType* _tmp0_;
25186 	ValaDataType* _tmp1_;
25187 	ValaTypeSymbol* _tmp2_;
25188 	ValaTypeSymbol* _tmp3_;
25189 	gboolean _tmp4_ = FALSE;
25190 	ValaClass* _tmp5_;
25191 	self = (ValaCCodeBaseModule*) base;
25192 	g_return_if_fail (expr != NULL);
25193 	_tmp0_ = vala_expression_get_value_type ((ValaExpression*) expr);
25194 	_tmp1_ = _tmp0_;
25195 	_tmp2_ = vala_data_type_get_type_symbol (_tmp1_);
25196 	_tmp3_ = _tmp2_;
25197 	cl = G_TYPE_CHECK_INSTANCE_TYPE (_tmp3_, VALA_TYPE_CLASS) ? ((ValaClass*) _tmp3_) : NULL;
25198 	_tmp5_ = cl;
25199 	if (_tmp5_ != NULL) {
25200 		ValaClass* _tmp6_;
25201 		gboolean _tmp7_;
25202 		gboolean _tmp8_;
25203 		_tmp6_ = cl;
25204 		_tmp7_ = vala_class_get_is_compact (_tmp6_);
25205 		_tmp8_ = _tmp7_;
25206 		_tmp4_ = !_tmp8_;
25207 	} else {
25208 		_tmp4_ = FALSE;
25209 	}
25210 	if (_tmp4_) {
25211 		ValaCCodeExpression* _tmp9_;
25212 		ValaCCodeExpression* _tmp10_;
25213 		ValaClass* _tmp11_;
25214 		ValaCCodeFunctionCall* _tmp12_;
25215 		ValaCCodeFunctionCall* _tmp13_;
25216 		_tmp9_ = vala_ccode_base_module_get_this_cexpression (self);
25217 		_tmp10_ = _tmp9_;
25218 		_tmp11_ = cl;
25219 		_tmp12_ = vala_ccode_base_module_generate_instance_cast (self, _tmp10_, (ValaTypeSymbol*) _tmp11_);
25220 		_tmp13_ = _tmp12_;
25221 		vala_set_cvalue ((ValaExpression*) expr, (ValaCCodeExpression*) _tmp13_);
25222 		_vala_ccode_node_unref0 (_tmp13_);
25223 		_vala_ccode_node_unref0 (_tmp10_);
25224 	} else {
25225 		ValaDataType* _tmp14_;
25226 		ValaDataType* _tmp15_;
25227 		ValaTypeSymbol* _tmp16_;
25228 		ValaTypeSymbol* _tmp17_;
25229 		ValaTargetValue* _tmp18_;
25230 		ValaTargetValue* _tmp19_;
25231 		_tmp14_ = vala_expression_get_value_type ((ValaExpression*) expr);
25232 		_tmp15_ = _tmp14_;
25233 		_tmp16_ = vala_data_type_get_type_symbol (_tmp15_);
25234 		_tmp17_ = _tmp16_;
25235 		_tmp18_ = vala_ccode_base_module_load_this_parameter (self, _tmp17_);
25236 		_tmp19_ = _tmp18_;
25237 		vala_expression_set_target_value ((ValaExpression*) expr, _tmp19_);
25238 		_vala_target_value_unref0 (_tmp19_);
25239 	}
25240 }
25241 
25242 static void
vala_ccode_base_module_real_visit_postfix_expression(ValaCodeVisitor * base,ValaPostfixExpression * expr)25243 vala_ccode_base_module_real_visit_postfix_expression (ValaCodeVisitor* base,
25244                                                       ValaPostfixExpression* expr)
25245 {
25246 	ValaCCodeBaseModule * self;
25247 	ValaMemberAccess* ma = NULL;
25248 	ValaExpression* _tmp0_;
25249 	ValaExpression* _tmp1_;
25250 	ValaMemberAccess* _tmp2_;
25251 	ValaMemberAccess* _tmp3_;
25252 	ValaTargetValue* temp_value = NULL;
25253 	ValaExpression* _tmp32_;
25254 	ValaExpression* _tmp33_;
25255 	ValaTargetValue* _tmp34_;
25256 	ValaTargetValue* _tmp35_;
25257 	ValaTargetValue* _tmp36_;
25258 	ValaCCodeBinaryOperator _tmp37_ = 0;
25259 	gboolean _tmp38_;
25260 	gboolean _tmp39_;
25261 	ValaCCodeBinaryOperator op = 0;
25262 	ValaCCodeBinaryExpression* cexpr = NULL;
25263 	ValaCCodeBinaryOperator _tmp40_;
25264 	ValaTargetValue* _tmp41_;
25265 	ValaCCodeExpression* _tmp42_;
25266 	ValaCCodeConstant* _tmp43_;
25267 	ValaCCodeConstant* _tmp44_;
25268 	ValaCCodeBinaryExpression* _tmp45_;
25269 	ValaCCodeBinaryExpression* _tmp46_;
25270 	ValaCCodeFunction* _tmp47_;
25271 	ValaCCodeFunction* _tmp48_;
25272 	ValaExpression* _tmp49_;
25273 	ValaExpression* _tmp50_;
25274 	ValaCCodeExpression* _tmp51_;
25275 	ValaCCodeBinaryExpression* _tmp52_;
25276 	ValaTargetValue* _tmp53_;
25277 	self = (ValaCCodeBaseModule*) base;
25278 	g_return_if_fail (expr != NULL);
25279 	_tmp0_ = vala_postfix_expression_get_inner (expr);
25280 	_tmp1_ = _tmp0_;
25281 	_tmp2_ = vala_ccode_base_module_find_property_access (self, _tmp1_);
25282 	ma = _tmp2_;
25283 	_tmp3_ = ma;
25284 	if (_tmp3_ != NULL) {
25285 		ValaProperty* prop = NULL;
25286 		ValaMemberAccess* _tmp4_;
25287 		ValaSymbol* _tmp5_;
25288 		ValaSymbol* _tmp6_;
25289 		ValaProperty* _tmp7_;
25290 		ValaCCodeBinaryOperator _tmp8_ = 0;
25291 		gboolean _tmp9_;
25292 		gboolean _tmp10_;
25293 		ValaCCodeBinaryOperator op = 0;
25294 		ValaCCodeBinaryExpression* cexpr = NULL;
25295 		ValaCCodeBinaryOperator _tmp11_;
25296 		ValaExpression* _tmp12_;
25297 		ValaExpression* _tmp13_;
25298 		ValaCCodeExpression* _tmp14_;
25299 		ValaCCodeConstant* _tmp15_;
25300 		ValaCCodeConstant* _tmp16_;
25301 		ValaCCodeBinaryExpression* _tmp17_;
25302 		ValaCCodeBinaryExpression* _tmp18_;
25303 		ValaProperty* _tmp19_;
25304 		ValaMemberAccess* _tmp20_;
25305 		ValaExpression* _tmp21_;
25306 		ValaExpression* _tmp22_;
25307 		ValaDataType* _tmp23_;
25308 		ValaDataType* _tmp24_;
25309 		ValaCCodeBinaryExpression* _tmp25_;
25310 		ValaGLibValue* _tmp26_;
25311 		ValaGLibValue* _tmp27_;
25312 		ValaExpression* _tmp28_;
25313 		ValaExpression* _tmp29_;
25314 		ValaTargetValue* _tmp30_;
25315 		ValaTargetValue* _tmp31_;
25316 		_tmp4_ = ma;
25317 		_tmp5_ = vala_expression_get_symbol_reference ((ValaExpression*) _tmp4_);
25318 		_tmp6_ = _tmp5_;
25319 		_tmp7_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp6_, VALA_TYPE_PROPERTY, ValaProperty));
25320 		prop = _tmp7_;
25321 		_tmp9_ = vala_postfix_expression_get_increment (expr);
25322 		_tmp10_ = _tmp9_;
25323 		if (_tmp10_) {
25324 			_tmp8_ = VALA_CCODE_BINARY_OPERATOR_PLUS;
25325 		} else {
25326 			_tmp8_ = VALA_CCODE_BINARY_OPERATOR_MINUS;
25327 		}
25328 		op = _tmp8_;
25329 		_tmp11_ = op;
25330 		_tmp12_ = vala_postfix_expression_get_inner (expr);
25331 		_tmp13_ = _tmp12_;
25332 		_tmp14_ = vala_get_cvalue (_tmp13_);
25333 		_tmp15_ = vala_ccode_constant_new ("1");
25334 		_tmp16_ = _tmp15_;
25335 		_tmp17_ = vala_ccode_binary_expression_new (_tmp11_, _tmp14_, (ValaCCodeExpression*) _tmp16_);
25336 		_tmp18_ = _tmp17_;
25337 		_vala_ccode_node_unref0 (_tmp16_);
25338 		cexpr = _tmp18_;
25339 		_tmp19_ = prop;
25340 		_tmp20_ = ma;
25341 		_tmp21_ = vala_member_access_get_inner (_tmp20_);
25342 		_tmp22_ = _tmp21_;
25343 		_tmp23_ = vala_expression_get_value_type ((ValaExpression*) expr);
25344 		_tmp24_ = _tmp23_;
25345 		_tmp25_ = cexpr;
25346 		_tmp26_ = vala_glib_value_new (_tmp24_, (ValaCCodeExpression*) _tmp25_, FALSE);
25347 		_tmp27_ = _tmp26_;
25348 		vala_ccode_base_module_store_property (self, _tmp19_, _tmp22_, (ValaTargetValue*) _tmp27_);
25349 		_vala_target_value_unref0 (_tmp27_);
25350 		_tmp28_ = vala_postfix_expression_get_inner (expr);
25351 		_tmp29_ = _tmp28_;
25352 		_tmp30_ = vala_expression_get_target_value (_tmp29_);
25353 		_tmp31_ = _tmp30_;
25354 		vala_expression_set_target_value ((ValaExpression*) expr, _tmp31_);
25355 		_vala_ccode_node_unref0 (cexpr);
25356 		_vala_code_node_unref0 (prop);
25357 		_vala_code_node_unref0 (ma);
25358 		return;
25359 	}
25360 	_tmp32_ = vala_postfix_expression_get_inner (expr);
25361 	_tmp33_ = _tmp32_;
25362 	_tmp34_ = vala_expression_get_target_value (_tmp33_);
25363 	_tmp35_ = _tmp34_;
25364 	_tmp36_ = vala_ccode_base_module_store_temp_value (self, _tmp35_, (ValaCodeNode*) expr, NULL);
25365 	temp_value = _tmp36_;
25366 	_tmp38_ = vala_postfix_expression_get_increment (expr);
25367 	_tmp39_ = _tmp38_;
25368 	if (_tmp39_) {
25369 		_tmp37_ = VALA_CCODE_BINARY_OPERATOR_PLUS;
25370 	} else {
25371 		_tmp37_ = VALA_CCODE_BINARY_OPERATOR_MINUS;
25372 	}
25373 	op = _tmp37_;
25374 	_tmp40_ = op;
25375 	_tmp41_ = temp_value;
25376 	_tmp42_ = vala_get_cvalue_ (_tmp41_);
25377 	_tmp43_ = vala_ccode_constant_new ("1");
25378 	_tmp44_ = _tmp43_;
25379 	_tmp45_ = vala_ccode_binary_expression_new (_tmp40_, _tmp42_, (ValaCCodeExpression*) _tmp44_);
25380 	_tmp46_ = _tmp45_;
25381 	_vala_ccode_node_unref0 (_tmp44_);
25382 	cexpr = _tmp46_;
25383 	_tmp47_ = vala_ccode_base_module_get_ccode (self);
25384 	_tmp48_ = _tmp47_;
25385 	_tmp49_ = vala_postfix_expression_get_inner (expr);
25386 	_tmp50_ = _tmp49_;
25387 	_tmp51_ = vala_get_cvalue (_tmp50_);
25388 	_tmp52_ = cexpr;
25389 	vala_ccode_function_add_assignment (_tmp48_, _tmp51_, (ValaCCodeExpression*) _tmp52_);
25390 	_tmp53_ = temp_value;
25391 	vala_expression_set_target_value ((ValaExpression*) expr, _tmp53_);
25392 	_vala_ccode_node_unref0 (cexpr);
25393 	_vala_target_value_unref0 (temp_value);
25394 	_vala_code_node_unref0 (ma);
25395 }
25396 
25397 static ValaMemberAccess*
vala_ccode_base_module_find_property_access(ValaCCodeBaseModule * self,ValaExpression * expr)25398 vala_ccode_base_module_find_property_access (ValaCCodeBaseModule* self,
25399                                              ValaExpression* expr)
25400 {
25401 	ValaMemberAccess* ma = NULL;
25402 	ValaMemberAccess* _tmp0_;
25403 	ValaMemberAccess* _tmp1_;
25404 	ValaSymbol* _tmp2_;
25405 	ValaSymbol* _tmp3_;
25406 	ValaMemberAccess* result = NULL;
25407 	g_return_val_if_fail (self != NULL, NULL);
25408 	g_return_val_if_fail (expr != NULL, NULL);
25409 	if (!G_TYPE_CHECK_INSTANCE_TYPE (expr, VALA_TYPE_MEMBER_ACCESS)) {
25410 		result = NULL;
25411 		return result;
25412 	}
25413 	_tmp0_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (expr, VALA_TYPE_MEMBER_ACCESS, ValaMemberAccess));
25414 	ma = _tmp0_;
25415 	_tmp1_ = ma;
25416 	_tmp2_ = vala_expression_get_symbol_reference ((ValaExpression*) _tmp1_);
25417 	_tmp3_ = _tmp2_;
25418 	if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp3_, VALA_TYPE_PROPERTY)) {
25419 		result = ma;
25420 		return result;
25421 	}
25422 	result = NULL;
25423 	_vala_code_node_unref0 (ma);
25424 	return result;
25425 }
25426 
25427 static gboolean
vala_ccode_base_module_is_limited_generic_type(ValaGenericType * type)25428 vala_ccode_base_module_is_limited_generic_type (ValaGenericType* type)
25429 {
25430 	ValaClass* cl = NULL;
25431 	ValaTypeParameter* _tmp0_;
25432 	ValaTypeParameter* _tmp1_;
25433 	ValaSymbol* _tmp2_;
25434 	ValaSymbol* _tmp3_;
25435 	ValaStruct* st = NULL;
25436 	ValaTypeParameter* _tmp4_;
25437 	ValaTypeParameter* _tmp5_;
25438 	ValaSymbol* _tmp6_;
25439 	ValaSymbol* _tmp7_;
25440 	gboolean _tmp8_ = FALSE;
25441 	gboolean _tmp9_ = FALSE;
25442 	ValaClass* _tmp10_;
25443 	gboolean result = FALSE;
25444 	g_return_val_if_fail (type != NULL, FALSE);
25445 	_tmp0_ = vala_generic_type_get_type_parameter (type);
25446 	_tmp1_ = _tmp0_;
25447 	_tmp2_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp1_);
25448 	_tmp3_ = _tmp2_;
25449 	cl = G_TYPE_CHECK_INSTANCE_TYPE (_tmp3_, VALA_TYPE_CLASS) ? ((ValaClass*) _tmp3_) : NULL;
25450 	_tmp4_ = vala_generic_type_get_type_parameter (type);
25451 	_tmp5_ = _tmp4_;
25452 	_tmp6_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp5_);
25453 	_tmp7_ = _tmp6_;
25454 	st = G_TYPE_CHECK_INSTANCE_TYPE (_tmp7_, VALA_TYPE_STRUCT) ? ((ValaStruct*) _tmp7_) : NULL;
25455 	_tmp10_ = cl;
25456 	if (_tmp10_ != NULL) {
25457 		ValaClass* _tmp11_;
25458 		gboolean _tmp12_;
25459 		gboolean _tmp13_;
25460 		_tmp11_ = cl;
25461 		_tmp12_ = vala_class_get_is_compact (_tmp11_);
25462 		_tmp13_ = _tmp12_;
25463 		_tmp9_ = _tmp13_;
25464 	} else {
25465 		_tmp9_ = FALSE;
25466 	}
25467 	if (_tmp9_) {
25468 		_tmp8_ = TRUE;
25469 	} else {
25470 		ValaStruct* _tmp14_;
25471 		_tmp14_ = st;
25472 		_tmp8_ = _tmp14_ != NULL;
25473 	}
25474 	if (_tmp8_) {
25475 		result = TRUE;
25476 		return result;
25477 	}
25478 	result = FALSE;
25479 	return result;
25480 }
25481 
25482 gboolean
vala_ccode_base_module_requires_copy(ValaDataType * type)25483 vala_ccode_base_module_requires_copy (ValaDataType* type)
25484 {
25485 	ValaClass* cl = NULL;
25486 	ValaTypeSymbol* _tmp0_;
25487 	ValaTypeSymbol* _tmp1_;
25488 	gboolean _tmp2_ = FALSE;
25489 	gboolean _tmp3_ = FALSE;
25490 	ValaClass* _tmp4_;
25491 	gboolean result = FALSE;
25492 	g_return_val_if_fail (type != NULL, FALSE);
25493 	if (!vala_data_type_is_disposable (type)) {
25494 		result = FALSE;
25495 		return result;
25496 	}
25497 	_tmp0_ = vala_data_type_get_type_symbol (type);
25498 	_tmp1_ = _tmp0_;
25499 	cl = G_TYPE_CHECK_INSTANCE_TYPE (_tmp1_, VALA_TYPE_CLASS) ? ((ValaClass*) _tmp1_) : NULL;
25500 	_tmp4_ = cl;
25501 	if (_tmp4_ != NULL) {
25502 		ValaClass* _tmp5_;
25503 		_tmp5_ = cl;
25504 		_tmp3_ = vala_is_reference_counting ((ValaTypeSymbol*) _tmp5_);
25505 	} else {
25506 		_tmp3_ = FALSE;
25507 	}
25508 	if (_tmp3_) {
25509 		ValaClass* _tmp6_;
25510 		gchar* _tmp7_;
25511 		gchar* _tmp8_;
25512 		_tmp6_ = cl;
25513 		_tmp7_ = vala_get_ccode_ref_function ((ValaTypeSymbol*) _tmp6_);
25514 		_tmp8_ = _tmp7_;
25515 		_tmp2_ = g_strcmp0 (_tmp8_, "") == 0;
25516 		_g_free0 (_tmp8_);
25517 	} else {
25518 		_tmp2_ = FALSE;
25519 	}
25520 	if (_tmp2_) {
25521 		result = FALSE;
25522 		return result;
25523 	}
25524 	if (G_TYPE_CHECK_INSTANCE_TYPE (type, VALA_TYPE_GENERIC_TYPE)) {
25525 		if (vala_ccode_base_module_is_limited_generic_type (G_TYPE_CHECK_INSTANCE_CAST (type, VALA_TYPE_GENERIC_TYPE, ValaGenericType))) {
25526 			result = FALSE;
25527 			return result;
25528 		}
25529 	}
25530 	result = TRUE;
25531 	return result;
25532 }
25533 
25534 gboolean
vala_ccode_base_module_requires_destroy(ValaDataType * type)25535 vala_ccode_base_module_requires_destroy (ValaDataType* type)
25536 {
25537 	ValaArrayType* array_type = NULL;
25538 	ValaArrayType* _tmp0_;
25539 	gboolean _tmp1_ = FALSE;
25540 	ValaArrayType* _tmp2_;
25541 	ValaClass* cl = NULL;
25542 	ValaTypeSymbol* _tmp9_;
25543 	ValaTypeSymbol* _tmp10_;
25544 	gboolean _tmp11_ = FALSE;
25545 	gboolean _tmp12_ = FALSE;
25546 	ValaClass* _tmp13_;
25547 	gboolean result = FALSE;
25548 	g_return_val_if_fail (type != NULL, FALSE);
25549 	if (!vala_data_type_is_disposable (type)) {
25550 		result = FALSE;
25551 		return result;
25552 	}
25553 	_tmp0_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (type, VALA_TYPE_ARRAY_TYPE) ? ((ValaArrayType*) type) : NULL);
25554 	array_type = _tmp0_;
25555 	_tmp2_ = array_type;
25556 	if (_tmp2_ != NULL) {
25557 		ValaArrayType* _tmp3_;
25558 		gboolean _tmp4_;
25559 		gboolean _tmp5_;
25560 		_tmp3_ = array_type;
25561 		_tmp4_ = vala_array_type_get_fixed_length (_tmp3_);
25562 		_tmp5_ = _tmp4_;
25563 		_tmp1_ = _tmp5_;
25564 	} else {
25565 		_tmp1_ = FALSE;
25566 	}
25567 	if (_tmp1_) {
25568 		ValaArrayType* _tmp6_;
25569 		ValaDataType* _tmp7_;
25570 		ValaDataType* _tmp8_;
25571 		_tmp6_ = array_type;
25572 		_tmp7_ = vala_array_type_get_element_type (_tmp6_);
25573 		_tmp8_ = _tmp7_;
25574 		result = vala_ccode_base_module_requires_destroy (_tmp8_);
25575 		_vala_code_node_unref0 (array_type);
25576 		return result;
25577 	}
25578 	_tmp9_ = vala_data_type_get_type_symbol (type);
25579 	_tmp10_ = _tmp9_;
25580 	cl = G_TYPE_CHECK_INSTANCE_TYPE (_tmp10_, VALA_TYPE_CLASS) ? ((ValaClass*) _tmp10_) : NULL;
25581 	_tmp13_ = cl;
25582 	if (_tmp13_ != NULL) {
25583 		ValaClass* _tmp14_;
25584 		_tmp14_ = cl;
25585 		_tmp12_ = vala_is_reference_counting ((ValaTypeSymbol*) _tmp14_);
25586 	} else {
25587 		_tmp12_ = FALSE;
25588 	}
25589 	if (_tmp12_) {
25590 		ValaClass* _tmp15_;
25591 		gchar* _tmp16_;
25592 		gchar* _tmp17_;
25593 		_tmp15_ = cl;
25594 		_tmp16_ = vala_get_ccode_unref_function ((ValaObjectTypeSymbol*) _tmp15_);
25595 		_tmp17_ = _tmp16_;
25596 		_tmp11_ = g_strcmp0 (_tmp17_, "") == 0;
25597 		_g_free0 (_tmp17_);
25598 	} else {
25599 		_tmp11_ = FALSE;
25600 	}
25601 	if (_tmp11_) {
25602 		result = FALSE;
25603 		_vala_code_node_unref0 (array_type);
25604 		return result;
25605 	}
25606 	if (G_TYPE_CHECK_INSTANCE_TYPE (type, VALA_TYPE_GENERIC_TYPE)) {
25607 		if (vala_ccode_base_module_is_limited_generic_type (G_TYPE_CHECK_INSTANCE_CAST (type, VALA_TYPE_GENERIC_TYPE, ValaGenericType))) {
25608 			result = FALSE;
25609 			_vala_code_node_unref0 (array_type);
25610 			return result;
25611 		}
25612 	}
25613 	result = TRUE;
25614 	_vala_code_node_unref0 (array_type);
25615 	return result;
25616 }
25617 
25618 static ValaTargetValue*
vala_ccode_base_module_real_copy_value(ValaCCodeBaseModule * self,ValaTargetValue * value,ValaCodeNode * node)25619 vala_ccode_base_module_real_copy_value (ValaCCodeBaseModule* self,
25620                                         ValaTargetValue* value,
25621                                         ValaCodeNode* node)
25622 {
25623 	ValaDataType* type = NULL;
25624 	ValaDataType* _tmp0_;
25625 	ValaDataType* _tmp1_;
25626 	ValaDataType* _tmp2_;
25627 	ValaCCodeExpression* cexpr = NULL;
25628 	ValaCCodeExpression* _tmp3_;
25629 	ValaCCodeExpression* _tmp4_;
25630 	ValaGLibValue* _result_ = NULL;
25631 	ValaGLibValue* _tmp5_;
25632 	ValaDataType* _tmp6_;
25633 	gboolean _tmp23_ = FALSE;
25634 	ValaDataType* _tmp24_;
25635 	ValaCCodeExpression* dupexpr = NULL;
25636 	ValaDataType* _tmp117_;
25637 	ValaSourceReference* _tmp118_;
25638 	ValaSourceReference* _tmp119_;
25639 	ValaCCodeExpression* _tmp120_;
25640 	ValaCCodeExpression* _tmp121_;
25641 	gboolean _tmp122_ = FALSE;
25642 	gboolean _tmp123_ = FALSE;
25643 	gboolean _tmp124_ = FALSE;
25644 	ValaCCodeExpression* _tmp125_;
25645 	ValaCCodeFunctionCall* ccall = NULL;
25646 	ValaCCodeExpression* _tmp188_;
25647 	ValaCCodeFunctionCall* _tmp189_;
25648 	gboolean _tmp190_ = FALSE;
25649 	gboolean _tmp191_ = FALSE;
25650 	ValaDataType* _tmp192_;
25651 	ValaTargetValue* result = NULL;
25652 	g_return_val_if_fail (value != NULL, NULL);
25653 	g_return_val_if_fail (node != NULL, NULL);
25654 	_tmp0_ = vala_target_value_get_value_type (value);
25655 	_tmp1_ = _tmp0_;
25656 	_tmp2_ = _vala_code_node_ref0 (_tmp1_);
25657 	type = _tmp2_;
25658 	_tmp3_ = vala_get_cvalue_ (value);
25659 	_tmp4_ = _vala_ccode_node_ref0 (_tmp3_);
25660 	cexpr = _tmp4_;
25661 	_tmp5_ = vala_glib_value_copy (G_TYPE_CHECK_INSTANCE_CAST (value, VALA_TYPE_GLIB_VALUE, ValaGLibValue));
25662 	_result_ = _tmp5_;
25663 	_tmp6_ = type;
25664 	if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp6_, VALA_TYPE_DELEGATE_TYPE)) {
25665 		ValaDelegateType* delegate_type = NULL;
25666 		ValaDataType* _tmp7_;
25667 		ValaDelegateType* _tmp8_;
25668 		gboolean _tmp9_ = FALSE;
25669 		gboolean _tmp10_ = FALSE;
25670 		ValaGLibValue* _tmp21_;
25671 		ValaCCodeConstant* _tmp22_;
25672 		_tmp7_ = type;
25673 		_tmp8_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp7_, VALA_TYPE_DELEGATE_TYPE, ValaDelegateType));
25674 		delegate_type = _tmp8_;
25675 		if (vala_get_ccode_delegate_target (node)) {
25676 			ValaDelegateType* _tmp11_;
25677 			ValaDelegate* _tmp12_;
25678 			ValaDelegate* _tmp13_;
25679 			gboolean _tmp14_;
25680 			gboolean _tmp15_;
25681 			_tmp11_ = delegate_type;
25682 			_tmp12_ = vala_delegate_type_get_delegate_symbol (_tmp11_);
25683 			_tmp13_ = _tmp12_;
25684 			_tmp14_ = vala_delegate_get_has_target (_tmp13_);
25685 			_tmp15_ = _tmp14_;
25686 			_tmp10_ = _tmp15_;
25687 		} else {
25688 			_tmp10_ = FALSE;
25689 		}
25690 		if (_tmp10_) {
25691 			ValaCodeContext* _tmp16_;
25692 			gboolean _tmp17_;
25693 			gboolean _tmp18_;
25694 			_tmp16_ = self->priv->_context;
25695 			_tmp17_ = vala_code_context_get_deprecated (_tmp16_);
25696 			_tmp18_ = _tmp17_;
25697 			_tmp9_ = !_tmp18_;
25698 		} else {
25699 			_tmp9_ = FALSE;
25700 		}
25701 		if (_tmp9_) {
25702 			ValaSourceReference* _tmp19_;
25703 			ValaSourceReference* _tmp20_;
25704 			_tmp19_ = vala_code_node_get_source_reference (node);
25705 			_tmp20_ = _tmp19_;
25706 			vala_report_deprecated (_tmp20_, "copying delegates is not supported");
25707 		}
25708 		_tmp21_ = _result_;
25709 		_tmp22_ = vala_ccode_constant_new ("NULL");
25710 		_vala_ccode_node_unref0 (_tmp21_->delegate_target_destroy_notify_cvalue);
25711 		_tmp21_->delegate_target_destroy_notify_cvalue = (ValaCCodeExpression*) _tmp22_;
25712 		result = (ValaTargetValue*) _result_;
25713 		_vala_code_node_unref0 (delegate_type);
25714 		_vala_ccode_node_unref0 (cexpr);
25715 		_vala_code_node_unref0 (type);
25716 		return result;
25717 	}
25718 	_tmp24_ = type;
25719 	if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp24_, VALA_TYPE_VALUE_TYPE)) {
25720 		ValaDataType* _tmp25_;
25721 		gboolean _tmp26_;
25722 		gboolean _tmp27_;
25723 		_tmp25_ = type;
25724 		_tmp26_ = vala_data_type_get_nullable (_tmp25_);
25725 		_tmp27_ = _tmp26_;
25726 		_tmp23_ = !_tmp27_;
25727 	} else {
25728 		_tmp23_ = FALSE;
25729 	}
25730 	if (_tmp23_) {
25731 		ValaTargetValue* temp_cvalue = NULL;
25732 		ValaDataType* _tmp28_;
25733 		ValaTargetValue* _tmp29_;
25734 		ValaTargetValue* _tmp30_;
25735 		ValaSourceReference* _tmp31_;
25736 		ValaSourceReference* _tmp32_;
25737 		ValaTargetValue* _tmp33_;
25738 		ValaCCodeExpression* _tmp34_;
25739 		ValaCCodeExpression* _tmp35_;
25740 		ValaTargetValue* temp_value = NULL;
25741 		ValaDataType* _tmp36_;
25742 		gboolean _tmp37_;
25743 		ValaTargetValue* _tmp38_;
25744 		ValaCCodeExpression* ctemp = NULL;
25745 		ValaTargetValue* _tmp39_;
25746 		ValaCCodeExpression* _tmp40_;
25747 		ValaCCodeExpression* _tmp41_;
25748 		ValaValueType* vt = NULL;
25749 		ValaDataType* _tmp42_;
25750 		ValaValueType* _tmp43_;
25751 		ValaStruct* st = NULL;
25752 		ValaValueType* _tmp44_;
25753 		ValaTypeSymbol* _tmp45_;
25754 		ValaTypeSymbol* _tmp46_;
25755 		ValaStruct* _tmp47_;
25756 		ValaCCodeFunctionCall* copy_call = NULL;
25757 		ValaStruct* _tmp48_;
25758 		gchar* _tmp49_;
25759 		gchar* _tmp50_;
25760 		ValaCCodeIdentifier* _tmp51_;
25761 		ValaCCodeIdentifier* _tmp52_;
25762 		ValaCCodeFunctionCall* _tmp53_;
25763 		ValaCCodeFunctionCall* _tmp54_;
25764 		ValaCCodeFunctionCall* _tmp55_;
25765 		ValaCCodeExpression* _tmp56_;
25766 		ValaCCodeUnaryExpression* _tmp57_;
25767 		ValaCCodeUnaryExpression* _tmp58_;
25768 		ValaCCodeFunctionCall* _tmp59_;
25769 		ValaCCodeExpression* _tmp60_;
25770 		ValaCCodeUnaryExpression* _tmp61_;
25771 		ValaCCodeUnaryExpression* _tmp62_;
25772 		ValaStruct* _tmp63_;
25773 		gboolean _tmp65_ = FALSE;
25774 		ValaStruct* _tmp66_;
25775 		_tmp28_ = type;
25776 		_tmp29_ = vala_ccode_base_module_create_temp_value (self, _tmp28_, FALSE, node, NULL);
25777 		temp_cvalue = _tmp29_;
25778 		_tmp30_ = temp_cvalue;
25779 		_tmp31_ = vala_code_node_get_source_reference (node);
25780 		_tmp32_ = _tmp31_;
25781 		vala_ccode_base_module_store_value (self, _tmp30_, value, _tmp32_);
25782 		_tmp33_ = temp_cvalue;
25783 		_tmp34_ = vala_get_cvalue_ (_tmp33_);
25784 		_tmp35_ = _vala_ccode_node_ref0 (_tmp34_);
25785 		_vala_ccode_node_unref0 (cexpr);
25786 		cexpr = _tmp35_;
25787 		_tmp36_ = type;
25788 		_tmp37_ = TRUE;
25789 		_tmp38_ = vala_ccode_base_module_create_temp_value (self, _tmp36_, TRUE, node, &_tmp37_);
25790 		temp_value = _tmp38_;
25791 		_tmp39_ = temp_value;
25792 		_tmp40_ = vala_get_cvalue_ (_tmp39_);
25793 		_tmp41_ = _vala_ccode_node_ref0 (_tmp40_);
25794 		ctemp = _tmp41_;
25795 		_tmp42_ = type;
25796 		_tmp43_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp42_, VALA_TYPE_VALUE_TYPE, ValaValueType));
25797 		vt = _tmp43_;
25798 		_tmp44_ = vt;
25799 		_tmp45_ = vala_data_type_get_type_symbol ((ValaDataType*) _tmp44_);
25800 		_tmp46_ = _tmp45_;
25801 		_tmp47_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp46_, VALA_TYPE_STRUCT, ValaStruct));
25802 		st = _tmp47_;
25803 		_tmp48_ = st;
25804 		_tmp49_ = vala_get_ccode_copy_function ((ValaTypeSymbol*) _tmp48_);
25805 		_tmp50_ = _tmp49_;
25806 		_tmp51_ = vala_ccode_identifier_new (_tmp50_);
25807 		_tmp52_ = _tmp51_;
25808 		_tmp53_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp52_);
25809 		_tmp54_ = _tmp53_;
25810 		_vala_ccode_node_unref0 (_tmp52_);
25811 		_g_free0 (_tmp50_);
25812 		copy_call = _tmp54_;
25813 		_tmp55_ = copy_call;
25814 		_tmp56_ = cexpr;
25815 		_tmp57_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, _tmp56_);
25816 		_tmp58_ = _tmp57_;
25817 		vala_ccode_function_call_add_argument (_tmp55_, (ValaCCodeExpression*) _tmp58_);
25818 		_vala_ccode_node_unref0 (_tmp58_);
25819 		_tmp59_ = copy_call;
25820 		_tmp60_ = ctemp;
25821 		_tmp61_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, _tmp60_);
25822 		_tmp62_ = _tmp61_;
25823 		vala_ccode_function_call_add_argument (_tmp59_, (ValaCCodeExpression*) _tmp62_);
25824 		_vala_ccode_node_unref0 (_tmp62_);
25825 		_tmp63_ = st;
25826 		if (!vala_get_ccode_has_copy_function (_tmp63_)) {
25827 			ValaStruct* _tmp64_;
25828 			_tmp64_ = st;
25829 			vala_ccode_base_module_generate_struct_copy_function (self, _tmp64_);
25830 		}
25831 		_tmp66_ = self->gvalue_type;
25832 		if (_tmp66_ != NULL) {
25833 			ValaDataType* _tmp67_;
25834 			ValaTypeSymbol* _tmp68_;
25835 			ValaTypeSymbol* _tmp69_;
25836 			ValaStruct* _tmp70_;
25837 			_tmp67_ = type;
25838 			_tmp68_ = vala_data_type_get_type_symbol (_tmp67_);
25839 			_tmp69_ = _tmp68_;
25840 			_tmp70_ = self->gvalue_type;
25841 			_tmp65_ = _tmp69_ == G_TYPE_CHECK_INSTANCE_CAST (_tmp70_, VALA_TYPE_TYPESYMBOL, ValaTypeSymbol);
25842 		} else {
25843 			_tmp65_ = FALSE;
25844 		}
25845 		if (_tmp65_) {
25846 			ValaCCodeFunctionCall* cisvalid = NULL;
25847 			ValaCCodeIdentifier* _tmp71_;
25848 			ValaCCodeIdentifier* _tmp72_;
25849 			ValaCCodeFunctionCall* _tmp73_;
25850 			ValaCCodeFunctionCall* _tmp74_;
25851 			ValaCCodeFunctionCall* _tmp75_;
25852 			ValaCCodeExpression* _tmp76_;
25853 			ValaCCodeUnaryExpression* _tmp77_;
25854 			ValaCCodeUnaryExpression* _tmp78_;
25855 			ValaCCodeFunction* _tmp79_;
25856 			ValaCCodeFunction* _tmp80_;
25857 			ValaCCodeFunctionCall* _tmp81_;
25858 			ValaCCodeFunctionCall* value_type_call = NULL;
25859 			ValaCCodeIdentifier* _tmp82_;
25860 			ValaCCodeIdentifier* _tmp83_;
25861 			ValaCCodeFunctionCall* _tmp84_;
25862 			ValaCCodeFunctionCall* _tmp85_;
25863 			ValaCCodeFunctionCall* _tmp86_;
25864 			ValaCCodeExpression* _tmp87_;
25865 			ValaCCodeUnaryExpression* _tmp88_;
25866 			ValaCCodeUnaryExpression* _tmp89_;
25867 			ValaCCodeFunctionCall* init_call = NULL;
25868 			ValaCCodeIdentifier* _tmp90_;
25869 			ValaCCodeIdentifier* _tmp91_;
25870 			ValaCCodeFunctionCall* _tmp92_;
25871 			ValaCCodeFunctionCall* _tmp93_;
25872 			ValaCCodeFunctionCall* _tmp94_;
25873 			ValaCCodeExpression* _tmp95_;
25874 			ValaCCodeUnaryExpression* _tmp96_;
25875 			ValaCCodeUnaryExpression* _tmp97_;
25876 			ValaCCodeFunctionCall* _tmp98_;
25877 			ValaCCodeFunctionCall* _tmp99_;
25878 			ValaCCodeFunction* _tmp100_;
25879 			ValaCCodeFunction* _tmp101_;
25880 			ValaCCodeFunctionCall* _tmp102_;
25881 			ValaCCodeFunction* _tmp103_;
25882 			ValaCCodeFunction* _tmp104_;
25883 			ValaCCodeFunctionCall* _tmp105_;
25884 			ValaCCodeFunction* _tmp106_;
25885 			ValaCCodeFunction* _tmp107_;
25886 			ValaTargetValue* _tmp108_;
25887 			ValaTargetValue* _tmp109_;
25888 			ValaSourceReference* _tmp110_;
25889 			ValaSourceReference* _tmp111_;
25890 			ValaCCodeFunction* _tmp112_;
25891 			ValaCCodeFunction* _tmp113_;
25892 			_tmp71_ = vala_ccode_identifier_new ("G_IS_VALUE");
25893 			_tmp72_ = _tmp71_;
25894 			_tmp73_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp72_);
25895 			_tmp74_ = _tmp73_;
25896 			_vala_ccode_node_unref0 (_tmp72_);
25897 			cisvalid = _tmp74_;
25898 			_tmp75_ = cisvalid;
25899 			_tmp76_ = cexpr;
25900 			_tmp77_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, _tmp76_);
25901 			_tmp78_ = _tmp77_;
25902 			vala_ccode_function_call_add_argument (_tmp75_, (ValaCCodeExpression*) _tmp78_);
25903 			_vala_ccode_node_unref0 (_tmp78_);
25904 			_tmp79_ = vala_ccode_base_module_get_ccode (self);
25905 			_tmp80_ = _tmp79_;
25906 			_tmp81_ = cisvalid;
25907 			vala_ccode_function_open_if (_tmp80_, (ValaCCodeExpression*) _tmp81_);
25908 			_tmp82_ = vala_ccode_identifier_new ("G_VALUE_TYPE");
25909 			_tmp83_ = _tmp82_;
25910 			_tmp84_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp83_);
25911 			_tmp85_ = _tmp84_;
25912 			_vala_ccode_node_unref0 (_tmp83_);
25913 			value_type_call = _tmp85_;
25914 			_tmp86_ = value_type_call;
25915 			_tmp87_ = cexpr;
25916 			_tmp88_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, _tmp87_);
25917 			_tmp89_ = _tmp88_;
25918 			vala_ccode_function_call_add_argument (_tmp86_, (ValaCCodeExpression*) _tmp89_);
25919 			_vala_ccode_node_unref0 (_tmp89_);
25920 			_tmp90_ = vala_ccode_identifier_new ("g_value_init");
25921 			_tmp91_ = _tmp90_;
25922 			_tmp92_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp91_);
25923 			_tmp93_ = _tmp92_;
25924 			_vala_ccode_node_unref0 (_tmp91_);
25925 			init_call = _tmp93_;
25926 			_tmp94_ = init_call;
25927 			_tmp95_ = ctemp;
25928 			_tmp96_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, _tmp95_);
25929 			_tmp97_ = _tmp96_;
25930 			vala_ccode_function_call_add_argument (_tmp94_, (ValaCCodeExpression*) _tmp97_);
25931 			_vala_ccode_node_unref0 (_tmp97_);
25932 			_tmp98_ = init_call;
25933 			_tmp99_ = value_type_call;
25934 			vala_ccode_function_call_add_argument (_tmp98_, (ValaCCodeExpression*) _tmp99_);
25935 			_tmp100_ = vala_ccode_base_module_get_ccode (self);
25936 			_tmp101_ = _tmp100_;
25937 			_tmp102_ = init_call;
25938 			vala_ccode_function_add_expression (_tmp101_, (ValaCCodeExpression*) _tmp102_);
25939 			_tmp103_ = vala_ccode_base_module_get_ccode (self);
25940 			_tmp104_ = _tmp103_;
25941 			_tmp105_ = copy_call;
25942 			vala_ccode_function_add_expression (_tmp104_, (ValaCCodeExpression*) _tmp105_);
25943 			_tmp106_ = vala_ccode_base_module_get_ccode (self);
25944 			_tmp107_ = _tmp106_;
25945 			vala_ccode_function_add_else (_tmp107_);
25946 			_tmp108_ = temp_value;
25947 			_tmp109_ = temp_cvalue;
25948 			_tmp110_ = vala_code_node_get_source_reference (node);
25949 			_tmp111_ = _tmp110_;
25950 			vala_ccode_base_module_store_value (self, _tmp108_, _tmp109_, _tmp111_);
25951 			_tmp112_ = vala_ccode_base_module_get_ccode (self);
25952 			_tmp113_ = _tmp112_;
25953 			vala_ccode_function_close (_tmp113_);
25954 			_vala_ccode_node_unref0 (init_call);
25955 			_vala_ccode_node_unref0 (value_type_call);
25956 			_vala_ccode_node_unref0 (cisvalid);
25957 		} else {
25958 			ValaCCodeFunction* _tmp114_;
25959 			ValaCCodeFunction* _tmp115_;
25960 			ValaCCodeFunctionCall* _tmp116_;
25961 			_tmp114_ = vala_ccode_base_module_get_ccode (self);
25962 			_tmp115_ = _tmp114_;
25963 			_tmp116_ = copy_call;
25964 			vala_ccode_function_add_expression (_tmp115_, (ValaCCodeExpression*) _tmp116_);
25965 		}
25966 		result = temp_value;
25967 		_vala_ccode_node_unref0 (copy_call);
25968 		_vala_code_node_unref0 (st);
25969 		_vala_code_node_unref0 (vt);
25970 		_vala_ccode_node_unref0 (ctemp);
25971 		_vala_target_value_unref0 (temp_cvalue);
25972 		_vala_target_value_unref0 (_result_);
25973 		_vala_ccode_node_unref0 (cexpr);
25974 		_vala_code_node_unref0 (type);
25975 		return result;
25976 	}
25977 	_tmp117_ = type;
25978 	_tmp118_ = vala_code_node_get_source_reference (node);
25979 	_tmp119_ = _tmp118_;
25980 	_tmp120_ = vala_ccode_base_module_get_dup_func_expression (self, _tmp117_, _tmp119_, FALSE);
25981 	dupexpr = _tmp120_;
25982 	_tmp121_ = dupexpr;
25983 	if (_tmp121_ == NULL) {
25984 		vala_code_node_set_error (node, TRUE);
25985 		result = NULL;
25986 		_vala_ccode_node_unref0 (dupexpr);
25987 		_vala_target_value_unref0 (_result_);
25988 		_vala_ccode_node_unref0 (cexpr);
25989 		_vala_code_node_unref0 (type);
25990 		return result;
25991 	}
25992 	_tmp125_ = dupexpr;
25993 	if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp125_, VALA_TYPE_CCODE_IDENTIFIER)) {
25994 		ValaDataType* _tmp126_;
25995 		_tmp126_ = type;
25996 		_tmp124_ = !G_TYPE_CHECK_INSTANCE_TYPE (_tmp126_, VALA_TYPE_ARRAY_TYPE);
25997 	} else {
25998 		_tmp124_ = FALSE;
25999 	}
26000 	if (_tmp124_) {
26001 		ValaDataType* _tmp127_;
26002 		_tmp127_ = type;
26003 		_tmp123_ = !G_TYPE_CHECK_INSTANCE_TYPE (_tmp127_, VALA_TYPE_GENERIC_TYPE);
26004 	} else {
26005 		_tmp123_ = FALSE;
26006 	}
26007 	if (_tmp123_) {
26008 		ValaDataType* _tmp128_;
26009 		_tmp128_ = type;
26010 		_tmp122_ = !vala_is_ref_function_void (_tmp128_);
26011 	} else {
26012 		_tmp122_ = FALSE;
26013 	}
26014 	if (_tmp122_) {
26015 		ValaCCodeIdentifier* dupid = NULL;
26016 		ValaCCodeExpression* _tmp129_;
26017 		ValaCCodeIdentifier* _tmp130_;
26018 		gchar* dup0_func = NULL;
26019 		ValaCCodeIdentifier* _tmp131_;
26020 		const gchar* _tmp132_;
26021 		const gchar* _tmp133_;
26022 		gchar* _tmp134_;
26023 		ValaCCodeIdentifier* _tmp135_;
26024 		const gchar* _tmp136_;
26025 		const gchar* _tmp137_;
26026 		ValaCCodeFunctionCall* ccall = NULL;
26027 		const gchar* _tmp173_;
26028 		ValaCCodeIdentifier* _tmp174_;
26029 		ValaCCodeIdentifier* _tmp175_;
26030 		ValaCCodeFunctionCall* _tmp176_;
26031 		ValaCCodeFunctionCall* _tmp177_;
26032 		ValaCCodeFunctionCall* _tmp178_;
26033 		ValaCCodeExpression* _tmp179_;
26034 		ValaGLibValue* _tmp180_;
26035 		ValaCCodeFunctionCall* _tmp181_;
26036 		ValaCCodeExpression* _tmp182_;
26037 		ValaGLibValue* _tmp183_;
26038 		ValaDataType* _tmp184_;
26039 		ValaDataType* _tmp185_;
26040 		ValaGLibValue* _tmp186_;
26041 		ValaTargetValue* _tmp187_;
26042 		_tmp129_ = dupexpr;
26043 		_tmp130_ = _vala_ccode_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp129_, VALA_TYPE_CCODE_IDENTIFIER, ValaCCodeIdentifier));
26044 		dupid = _tmp130_;
26045 		_tmp131_ = dupid;
26046 		_tmp132_ = vala_ccode_identifier_get_name (_tmp131_);
26047 		_tmp133_ = _tmp132_;
26048 		_tmp134_ = g_strdup_printf ("_%s0", _tmp133_);
26049 		dup0_func = _tmp134_;
26050 		_tmp135_ = dupid;
26051 		_tmp136_ = vala_ccode_identifier_get_name (_tmp135_);
26052 		_tmp137_ = _tmp136_;
26053 		if (g_strcmp0 (_tmp137_, "g_strdup") == 0) {
26054 			ValaCCodeIdentifier* _tmp138_;
26055 			const gchar* _tmp139_;
26056 			const gchar* _tmp140_;
26057 			gchar* _tmp141_;
26058 			_tmp138_ = dupid;
26059 			_tmp139_ = vala_ccode_identifier_get_name (_tmp138_);
26060 			_tmp140_ = _tmp139_;
26061 			_tmp141_ = g_strdup (_tmp140_);
26062 			_g_free0 (dup0_func);
26063 			dup0_func = _tmp141_;
26064 		} else {
26065 			const gchar* _tmp142_;
26066 			_tmp142_ = dup0_func;
26067 			if (vala_ccode_base_module_add_wrapper (self, _tmp142_)) {
26068 				ValaCCodeFunction* dup0_fun = NULL;
26069 				const gchar* _tmp143_;
26070 				ValaDataType* _tmp144_;
26071 				gchar* _tmp145_;
26072 				gchar* _tmp146_;
26073 				ValaCCodeFunction* _tmp147_;
26074 				ValaCCodeFunction* _tmp148_;
26075 				ValaCCodeFunction* _tmp149_;
26076 				ValaDataType* _tmp150_;
26077 				gchar* _tmp151_;
26078 				gchar* _tmp152_;
26079 				ValaCCodeParameter* _tmp153_;
26080 				ValaCCodeParameter* _tmp154_;
26081 				ValaCCodeFunction* _tmp155_;
26082 				ValaCCodeFunction* _tmp156_;
26083 				ValaCCodeFunctionCall* dup_call = NULL;
26084 				ValaCCodeExpression* _tmp157_;
26085 				ValaCCodeFunctionCall* _tmp158_;
26086 				ValaCCodeFunctionCall* _tmp159_;
26087 				ValaCCodeIdentifier* _tmp160_;
26088 				ValaCCodeIdentifier* _tmp161_;
26089 				ValaCCodeFunction* _tmp162_;
26090 				ValaCCodeFunction* _tmp163_;
26091 				ValaCCodeIdentifier* _tmp164_;
26092 				ValaCCodeIdentifier* _tmp165_;
26093 				ValaCCodeFunctionCall* _tmp166_;
26094 				ValaCCodeConstant* _tmp167_;
26095 				ValaCCodeConstant* _tmp168_;
26096 				ValaCCodeConditionalExpression* _tmp169_;
26097 				ValaCCodeConditionalExpression* _tmp170_;
26098 				ValaCCodeFile* _tmp171_;
26099 				ValaCCodeFunction* _tmp172_;
26100 				_tmp143_ = dup0_func;
26101 				_tmp144_ = self->pointer_type;
26102 				_tmp145_ = vala_get_ccode_name ((ValaCodeNode*) _tmp144_);
26103 				_tmp146_ = _tmp145_;
26104 				_tmp147_ = vala_ccode_function_new (_tmp143_, _tmp146_);
26105 				_tmp148_ = _tmp147_;
26106 				_g_free0 (_tmp146_);
26107 				dup0_fun = _tmp148_;
26108 				_tmp149_ = dup0_fun;
26109 				_tmp150_ = self->pointer_type;
26110 				_tmp151_ = vala_get_ccode_name ((ValaCodeNode*) _tmp150_);
26111 				_tmp152_ = _tmp151_;
26112 				_tmp153_ = vala_ccode_parameter_new ("self", _tmp152_);
26113 				_tmp154_ = _tmp153_;
26114 				vala_ccode_function_add_parameter (_tmp149_, _tmp154_);
26115 				_vala_ccode_node_unref0 (_tmp154_);
26116 				_g_free0 (_tmp152_);
26117 				_tmp155_ = dup0_fun;
26118 				vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp155_, VALA_CCODE_MODIFIERS_STATIC);
26119 				_tmp156_ = dup0_fun;
26120 				vala_ccode_base_module_push_function (self, _tmp156_);
26121 				_tmp157_ = dupexpr;
26122 				_tmp158_ = vala_ccode_function_call_new (_tmp157_);
26123 				dup_call = _tmp158_;
26124 				_tmp159_ = dup_call;
26125 				_tmp160_ = vala_ccode_identifier_new ("self");
26126 				_tmp161_ = _tmp160_;
26127 				vala_ccode_function_call_add_argument (_tmp159_, (ValaCCodeExpression*) _tmp161_);
26128 				_vala_ccode_node_unref0 (_tmp161_);
26129 				_tmp162_ = vala_ccode_base_module_get_ccode (self);
26130 				_tmp163_ = _tmp162_;
26131 				_tmp164_ = vala_ccode_identifier_new ("self");
26132 				_tmp165_ = _tmp164_;
26133 				_tmp166_ = dup_call;
26134 				_tmp167_ = vala_ccode_constant_new ("NULL");
26135 				_tmp168_ = _tmp167_;
26136 				_tmp169_ = vala_ccode_conditional_expression_new ((ValaCCodeExpression*) _tmp165_, (ValaCCodeExpression*) _tmp166_, (ValaCCodeExpression*) _tmp168_);
26137 				_tmp170_ = _tmp169_;
26138 				vala_ccode_function_add_return (_tmp163_, (ValaCCodeExpression*) _tmp170_);
26139 				_vala_ccode_node_unref0 (_tmp170_);
26140 				_vala_ccode_node_unref0 (_tmp168_);
26141 				_vala_ccode_node_unref0 (_tmp165_);
26142 				vala_ccode_base_module_pop_function (self);
26143 				_tmp171_ = self->cfile;
26144 				_tmp172_ = dup0_fun;
26145 				vala_ccode_file_add_function (_tmp171_, _tmp172_);
26146 				_vala_ccode_node_unref0 (dup_call);
26147 				_vala_ccode_node_unref0 (dup0_fun);
26148 			}
26149 		}
26150 		_tmp173_ = dup0_func;
26151 		_tmp174_ = vala_ccode_identifier_new (_tmp173_);
26152 		_tmp175_ = _tmp174_;
26153 		_tmp176_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp175_);
26154 		_tmp177_ = _tmp176_;
26155 		_vala_ccode_node_unref0 (_tmp175_);
26156 		ccall = _tmp177_;
26157 		_tmp178_ = ccall;
26158 		_tmp179_ = cexpr;
26159 		vala_ccode_function_call_add_argument (_tmp178_, _tmp179_);
26160 		_tmp180_ = _result_;
26161 		_tmp181_ = ccall;
26162 		_tmp182_ = _vala_ccode_node_ref0 ((ValaCCodeExpression*) _tmp181_);
26163 		_vala_ccode_node_unref0 (_tmp180_->cvalue);
26164 		_tmp180_->cvalue = _tmp182_;
26165 		_tmp183_ = _result_;
26166 		_tmp184_ = vala_target_value_get_value_type ((ValaTargetValue*) _tmp183_);
26167 		_tmp185_ = _tmp184_;
26168 		vala_data_type_set_value_owned (_tmp185_, TRUE);
26169 		_tmp186_ = _result_;
26170 		_tmp187_ = vala_ccode_base_module_store_temp_value (self, (ValaTargetValue*) _tmp186_, node, NULL);
26171 		result = _tmp187_;
26172 		_vala_ccode_node_unref0 (ccall);
26173 		_g_free0 (dup0_func);
26174 		_vala_ccode_node_unref0 (dupid);
26175 		_vala_ccode_node_unref0 (dupexpr);
26176 		_vala_target_value_unref0 (_result_);
26177 		_vala_ccode_node_unref0 (cexpr);
26178 		_vala_code_node_unref0 (type);
26179 		return result;
26180 	}
26181 	_tmp188_ = dupexpr;
26182 	_tmp189_ = vala_ccode_function_call_new (_tmp188_);
26183 	ccall = _tmp189_;
26184 	_tmp192_ = type;
26185 	if (!G_TYPE_CHECK_INSTANCE_TYPE (_tmp192_, VALA_TYPE_ARRAY_TYPE)) {
26186 		_tmp191_ = vala_get_non_null (value);
26187 	} else {
26188 		_tmp191_ = FALSE;
26189 	}
26190 	if (_tmp191_) {
26191 		ValaDataType* _tmp193_;
26192 		_tmp193_ = type;
26193 		_tmp190_ = !vala_is_ref_function_void (_tmp193_);
26194 	} else {
26195 		_tmp190_ = FALSE;
26196 	}
26197 	if (_tmp190_) {
26198 		ValaCCodeFunctionCall* _tmp194_;
26199 		ValaCCodeExpression* _tmp195_;
26200 		ValaDataType* _tmp196_;
26201 		ValaCCodeFunctionCall* _tmp197_;
26202 		ValaGLibValue* _tmp198_;
26203 		ValaGLibValue* _tmp199_;
26204 		ValaTargetValue* _tmp200_;
26205 		ValaTargetValue* _tmp201_;
26206 		_tmp194_ = ccall;
26207 		_tmp195_ = cexpr;
26208 		vala_ccode_function_call_add_argument (_tmp194_, _tmp195_);
26209 		_tmp196_ = type;
26210 		_tmp197_ = ccall;
26211 		_tmp198_ = vala_glib_value_new (_tmp196_, (ValaCCodeExpression*) _tmp197_, FALSE);
26212 		_tmp199_ = _tmp198_;
26213 		_tmp200_ = vala_ccode_base_module_store_temp_value (self, (ValaTargetValue*) _tmp199_, node, NULL);
26214 		_tmp201_ = _tmp200_;
26215 		_vala_target_value_unref0 (_tmp199_);
26216 		result = _tmp201_;
26217 		_vala_ccode_node_unref0 (ccall);
26218 		_vala_ccode_node_unref0 (dupexpr);
26219 		_vala_target_value_unref0 (_result_);
26220 		_vala_ccode_node_unref0 (cexpr);
26221 		_vala_code_node_unref0 (type);
26222 		return result;
26223 	} else {
26224 		ValaCCodeBinaryExpression* cnotnull = NULL;
26225 		ValaCCodeExpression* _tmp202_;
26226 		ValaCCodeConstant* _tmp203_;
26227 		ValaCCodeConstant* _tmp204_;
26228 		ValaCCodeBinaryExpression* _tmp205_;
26229 		ValaCCodeBinaryExpression* _tmp206_;
26230 		ValaDataType* _tmp207_;
26231 		ValaDataType* _tmp220_;
26232 		ValaDataType* _tmp230_;
26233 		ValaCCodeExpression* cifnull = NULL;
26234 		ValaDataType* _tmp249_;
26235 		ValaDataType* _tmp261_;
26236 		_tmp202_ = cexpr;
26237 		_tmp203_ = vala_ccode_constant_new ("NULL");
26238 		_tmp204_ = _tmp203_;
26239 		_tmp205_ = vala_ccode_binary_expression_new (VALA_CCODE_BINARY_OPERATOR_INEQUALITY, _tmp202_, (ValaCCodeExpression*) _tmp204_);
26240 		_tmp206_ = _tmp205_;
26241 		_vala_ccode_node_unref0 (_tmp204_);
26242 		cnotnull = _tmp206_;
26243 		_tmp207_ = type;
26244 		if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp207_, VALA_TYPE_GENERIC_TYPE)) {
26245 			ValaCCodeBinaryExpression* cdupnotnull = NULL;
26246 			ValaDataType* _tmp208_;
26247 			ValaSourceReference* _tmp209_;
26248 			ValaSourceReference* _tmp210_;
26249 			ValaCCodeExpression* _tmp211_;
26250 			ValaCCodeExpression* _tmp212_;
26251 			ValaCCodeConstant* _tmp213_;
26252 			ValaCCodeConstant* _tmp214_;
26253 			ValaCCodeBinaryExpression* _tmp215_;
26254 			ValaCCodeBinaryExpression* _tmp216_;
26255 			ValaCCodeBinaryExpression* _tmp217_;
26256 			ValaCCodeBinaryExpression* _tmp218_;
26257 			ValaCCodeBinaryExpression* _tmp219_;
26258 			_tmp208_ = type;
26259 			_tmp209_ = vala_code_node_get_source_reference (node);
26260 			_tmp210_ = _tmp209_;
26261 			_tmp211_ = vala_ccode_base_module_get_dup_func_expression (self, _tmp208_, _tmp210_, FALSE);
26262 			_tmp212_ = _tmp211_;
26263 			_tmp213_ = vala_ccode_constant_new ("NULL");
26264 			_tmp214_ = _tmp213_;
26265 			_tmp215_ = vala_ccode_binary_expression_new (VALA_CCODE_BINARY_OPERATOR_INEQUALITY, _tmp212_, (ValaCCodeExpression*) _tmp214_);
26266 			_tmp216_ = _tmp215_;
26267 			_vala_ccode_node_unref0 (_tmp214_);
26268 			_vala_ccode_node_unref0 (_tmp212_);
26269 			cdupnotnull = _tmp216_;
26270 			_tmp217_ = cnotnull;
26271 			_tmp218_ = cdupnotnull;
26272 			_tmp219_ = vala_ccode_binary_expression_new (VALA_CCODE_BINARY_OPERATOR_AND, (ValaCCodeExpression*) _tmp217_, (ValaCCodeExpression*) _tmp218_);
26273 			_vala_ccode_node_unref0 (cnotnull);
26274 			cnotnull = _tmp219_;
26275 			_vala_ccode_node_unref0 (cdupnotnull);
26276 		}
26277 		_tmp220_ = type;
26278 		if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp220_, VALA_TYPE_GENERIC_TYPE)) {
26279 			ValaCCodeFunctionCall* _tmp221_;
26280 			ValaCCodeExpression* _tmp222_;
26281 			ValaDataType* _tmp223_;
26282 			gchar* _tmp224_;
26283 			gchar* _tmp225_;
26284 			ValaCCodeCastExpression* _tmp226_;
26285 			ValaCCodeCastExpression* _tmp227_;
26286 			_tmp221_ = ccall;
26287 			_tmp222_ = cexpr;
26288 			_tmp223_ = self->pointer_type;
26289 			_tmp224_ = vala_get_ccode_name ((ValaCodeNode*) _tmp223_);
26290 			_tmp225_ = _tmp224_;
26291 			_tmp226_ = vala_ccode_cast_expression_new (_tmp222_, _tmp225_);
26292 			_tmp227_ = _tmp226_;
26293 			vala_ccode_function_call_add_argument (_tmp221_, (ValaCCodeExpression*) _tmp227_);
26294 			_vala_ccode_node_unref0 (_tmp227_);
26295 			_g_free0 (_tmp225_);
26296 		} else {
26297 			ValaCCodeFunctionCall* _tmp228_;
26298 			ValaCCodeExpression* _tmp229_;
26299 			_tmp228_ = ccall;
26300 			_tmp229_ = cexpr;
26301 			vala_ccode_function_call_add_argument (_tmp228_, _tmp229_);
26302 		}
26303 		_tmp230_ = type;
26304 		if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp230_, VALA_TYPE_ARRAY_TYPE)) {
26305 			ValaArrayType* array_type = NULL;
26306 			ValaDataType* _tmp231_;
26307 			ValaArrayType* _tmp232_;
26308 			ValaCCodeFunctionCall* _tmp233_;
26309 			ValaCCodeExpression* _tmp234_;
26310 			ValaCCodeExpression* _tmp235_;
26311 			ValaArrayType* _tmp236_;
26312 			ValaDataType* _tmp237_;
26313 			ValaDataType* _tmp238_;
26314 			_tmp231_ = type;
26315 			_tmp232_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp231_, VALA_TYPE_ARRAY_TYPE, ValaArrayType));
26316 			array_type = _tmp232_;
26317 			_tmp233_ = ccall;
26318 			_tmp234_ = vala_ccode_base_module_get_array_length_cvalue (self, value, -1);
26319 			_tmp235_ = _tmp234_;
26320 			vala_ccode_function_call_add_argument (_tmp233_, _tmp235_);
26321 			_vala_ccode_node_unref0 (_tmp235_);
26322 			_tmp236_ = array_type;
26323 			_tmp237_ = vala_array_type_get_element_type (_tmp236_);
26324 			_tmp238_ = _tmp237_;
26325 			if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp238_, VALA_TYPE_GENERIC_TYPE)) {
26326 				ValaCCodeExpression* elem_dupexpr = NULL;
26327 				ValaArrayType* _tmp239_;
26328 				ValaDataType* _tmp240_;
26329 				ValaDataType* _tmp241_;
26330 				ValaSourceReference* _tmp242_;
26331 				ValaSourceReference* _tmp243_;
26332 				ValaCCodeExpression* _tmp244_;
26333 				ValaCCodeExpression* _tmp245_;
26334 				ValaCCodeFunctionCall* _tmp247_;
26335 				ValaCCodeExpression* _tmp248_;
26336 				_tmp239_ = array_type;
26337 				_tmp240_ = vala_array_type_get_element_type (_tmp239_);
26338 				_tmp241_ = _tmp240_;
26339 				_tmp242_ = vala_code_node_get_source_reference (node);
26340 				_tmp243_ = _tmp242_;
26341 				_tmp244_ = vala_ccode_base_module_get_dup_func_expression (self, _tmp241_, _tmp243_, FALSE);
26342 				elem_dupexpr = _tmp244_;
26343 				_tmp245_ = elem_dupexpr;
26344 				if (_tmp245_ == NULL) {
26345 					ValaCCodeConstant* _tmp246_;
26346 					_tmp246_ = vala_ccode_constant_new ("NULL");
26347 					_vala_ccode_node_unref0 (elem_dupexpr);
26348 					elem_dupexpr = (ValaCCodeExpression*) _tmp246_;
26349 				}
26350 				_tmp247_ = ccall;
26351 				_tmp248_ = elem_dupexpr;
26352 				vala_ccode_function_call_add_argument (_tmp247_, _tmp248_);
26353 				_vala_ccode_node_unref0 (elem_dupexpr);
26354 			}
26355 			_vala_code_node_unref0 (array_type);
26356 		}
26357 		_tmp249_ = type;
26358 		if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp249_, VALA_TYPE_GENERIC_TYPE)) {
26359 			ValaCCodeExpression* _tmp250_;
26360 			ValaDataType* _tmp251_;
26361 			gchar* _tmp252_;
26362 			gchar* _tmp253_;
26363 			ValaCCodeCastExpression* _tmp254_;
26364 			_tmp250_ = cexpr;
26365 			_tmp251_ = self->pointer_type;
26366 			_tmp252_ = vala_get_ccode_name ((ValaCodeNode*) _tmp251_);
26367 			_tmp253_ = _tmp252_;
26368 			_tmp254_ = vala_ccode_cast_expression_new (_tmp250_, _tmp253_);
26369 			_vala_ccode_node_unref0 (cifnull);
26370 			cifnull = (ValaCCodeExpression*) _tmp254_;
26371 			_g_free0 (_tmp253_);
26372 		} else {
26373 			ValaDataType* _tmp255_;
26374 			ValaTypeSymbol* _tmp256_;
26375 			ValaTypeSymbol* _tmp257_;
26376 			_tmp255_ = type;
26377 			_tmp256_ = vala_data_type_get_type_symbol (_tmp255_);
26378 			_tmp257_ = _tmp256_;
26379 			if (_tmp257_ != NULL) {
26380 				ValaCCodeConstant* _tmp258_;
26381 				_tmp258_ = vala_ccode_constant_new ("NULL");
26382 				_vala_ccode_node_unref0 (cifnull);
26383 				cifnull = (ValaCCodeExpression*) _tmp258_;
26384 			} else {
26385 				ValaCCodeExpression* _tmp259_;
26386 				ValaCCodeExpression* _tmp260_;
26387 				_tmp259_ = cexpr;
26388 				_tmp260_ = _vala_ccode_node_ref0 (_tmp259_);
26389 				_vala_ccode_node_unref0 (cifnull);
26390 				cifnull = _tmp260_;
26391 			}
26392 		}
26393 		_tmp261_ = type;
26394 		if (vala_is_ref_function_void (_tmp261_)) {
26395 			ValaCCodeFunction* _tmp262_;
26396 			ValaCCodeFunction* _tmp263_;
26397 			ValaCCodeBinaryExpression* _tmp264_;
26398 			ValaCCodeFunction* _tmp265_;
26399 			ValaCCodeFunction* _tmp266_;
26400 			ValaCCodeFunctionCall* _tmp267_;
26401 			ValaCCodeFunction* _tmp268_;
26402 			ValaCCodeFunction* _tmp269_;
26403 			_tmp262_ = vala_ccode_base_module_get_ccode (self);
26404 			_tmp263_ = _tmp262_;
26405 			_tmp264_ = cnotnull;
26406 			vala_ccode_function_open_if (_tmp263_, (ValaCCodeExpression*) _tmp264_);
26407 			_tmp265_ = vala_ccode_base_module_get_ccode (self);
26408 			_tmp266_ = _tmp265_;
26409 			_tmp267_ = ccall;
26410 			vala_ccode_function_add_expression (_tmp266_, (ValaCCodeExpression*) _tmp267_);
26411 			_tmp268_ = vala_ccode_base_module_get_ccode (self);
26412 			_tmp269_ = _tmp268_;
26413 			vala_ccode_function_close (_tmp269_);
26414 		} else {
26415 			ValaGLibValue* _tmp280_;
26416 			gboolean _tmp281_;
26417 			ValaTargetValue* _tmp282_;
26418 			if (vala_get_non_null (value)) {
26419 				ValaGLibValue* _tmp270_;
26420 				ValaCCodeFunctionCall* _tmp271_;
26421 				ValaCCodeExpression* _tmp272_;
26422 				_tmp270_ = _result_;
26423 				_tmp271_ = ccall;
26424 				_tmp272_ = _vala_ccode_node_ref0 ((ValaCCodeExpression*) _tmp271_);
26425 				_vala_ccode_node_unref0 (_tmp270_->cvalue);
26426 				_tmp270_->cvalue = _tmp272_;
26427 			} else {
26428 				ValaCCodeConditionalExpression* ccond = NULL;
26429 				ValaCCodeBinaryExpression* _tmp273_;
26430 				ValaCCodeFunctionCall* _tmp274_;
26431 				ValaCCodeExpression* _tmp275_;
26432 				ValaCCodeConditionalExpression* _tmp276_;
26433 				ValaGLibValue* _tmp277_;
26434 				ValaCCodeConditionalExpression* _tmp278_;
26435 				ValaCCodeExpression* _tmp279_;
26436 				_tmp273_ = cnotnull;
26437 				_tmp274_ = ccall;
26438 				_tmp275_ = cifnull;
26439 				_tmp276_ = vala_ccode_conditional_expression_new ((ValaCCodeExpression*) _tmp273_, (ValaCCodeExpression*) _tmp274_, _tmp275_);
26440 				ccond = _tmp276_;
26441 				_tmp277_ = _result_;
26442 				_tmp278_ = ccond;
26443 				_tmp279_ = _vala_ccode_node_ref0 ((ValaCCodeExpression*) _tmp278_);
26444 				_vala_ccode_node_unref0 (_tmp277_->cvalue);
26445 				_tmp277_->cvalue = _tmp279_;
26446 				_vala_ccode_node_unref0 (ccond);
26447 			}
26448 			_tmp280_ = _result_;
26449 			_tmp281_ = TRUE;
26450 			_tmp282_ = vala_ccode_base_module_store_temp_value (self, (ValaTargetValue*) _tmp280_, node, &_tmp281_);
26451 			_vala_target_value_unref0 (_result_);
26452 			_result_ = G_TYPE_CHECK_INSTANCE_CAST (_tmp282_, VALA_TYPE_GLIB_VALUE, ValaGLibValue);
26453 		}
26454 		result = (ValaTargetValue*) _result_;
26455 		_vala_ccode_node_unref0 (cifnull);
26456 		_vala_ccode_node_unref0 (cnotnull);
26457 		_vala_ccode_node_unref0 (ccall);
26458 		_vala_ccode_node_unref0 (dupexpr);
26459 		_vala_ccode_node_unref0 (cexpr);
26460 		_vala_code_node_unref0 (type);
26461 		return result;
26462 	}
26463 	_vala_ccode_node_unref0 (ccall);
26464 	_vala_ccode_node_unref0 (dupexpr);
26465 	_vala_target_value_unref0 (_result_);
26466 	_vala_ccode_node_unref0 (cexpr);
26467 	_vala_code_node_unref0 (type);
26468 }
26469 
26470 ValaTargetValue*
vala_ccode_base_module_copy_value(ValaCCodeBaseModule * self,ValaTargetValue * value,ValaCodeNode * node)26471 vala_ccode_base_module_copy_value (ValaCCodeBaseModule* self,
26472                                    ValaTargetValue* value,
26473                                    ValaCodeNode* node)
26474 {
26475 	g_return_val_if_fail (self != NULL, NULL);
26476 	return VALA_CCODE_BASE_MODULE_GET_CLASS (self)->copy_value (self, value, node);
26477 }
26478 
26479 static void
vala_ccode_base_module_real_generate_class_declaration(ValaCCodeBaseModule * self,ValaClass * cl,ValaCCodeFile * decl_space)26480 vala_ccode_base_module_real_generate_class_declaration (ValaCCodeBaseModule* self,
26481                                                         ValaClass* cl,
26482                                                         ValaCCodeFile* decl_space)
26483 {
26484 	gchar* _tmp0_;
26485 	gchar* _tmp1_;
26486 	gboolean _tmp2_;
26487 	g_return_if_fail (cl != NULL);
26488 	g_return_if_fail (decl_space != NULL);
26489 	_tmp0_ = vala_get_ccode_name ((ValaCodeNode*) cl);
26490 	_tmp1_ = _tmp0_;
26491 	_tmp2_ = vala_ccode_base_module_add_symbol_declaration (self, decl_space, (ValaSymbol*) cl, _tmp1_);
26492 	_g_free0 (_tmp1_);
26493 	if (_tmp2_) {
26494 		return;
26495 	}
26496 }
26497 
26498 void
vala_ccode_base_module_generate_class_declaration(ValaCCodeBaseModule * self,ValaClass * cl,ValaCCodeFile * decl_space)26499 vala_ccode_base_module_generate_class_declaration (ValaCCodeBaseModule* self,
26500                                                    ValaClass* cl,
26501                                                    ValaCCodeFile* decl_space)
26502 {
26503 	g_return_if_fail (self != NULL);
26504 	VALA_CCODE_BASE_MODULE_GET_CLASS (self)->generate_class_declaration (self, cl, decl_space);
26505 }
26506 
26507 static void
vala_ccode_base_module_real_generate_interface_declaration(ValaCCodeBaseModule * self,ValaInterface * iface,ValaCCodeFile * decl_space)26508 vala_ccode_base_module_real_generate_interface_declaration (ValaCCodeBaseModule* self,
26509                                                             ValaInterface* iface,
26510                                                             ValaCCodeFile* decl_space)
26511 {
26512 	g_return_if_fail (iface != NULL);
26513 	g_return_if_fail (decl_space != NULL);
26514 }
26515 
26516 void
vala_ccode_base_module_generate_interface_declaration(ValaCCodeBaseModule * self,ValaInterface * iface,ValaCCodeFile * decl_space)26517 vala_ccode_base_module_generate_interface_declaration (ValaCCodeBaseModule* self,
26518                                                        ValaInterface* iface,
26519                                                        ValaCCodeFile* decl_space)
26520 {
26521 	g_return_if_fail (self != NULL);
26522 	VALA_CCODE_BASE_MODULE_GET_CLASS (self)->generate_interface_declaration (self, iface, decl_space);
26523 }
26524 
26525 static gboolean
vala_ccode_base_module_real_generate_method_declaration(ValaCCodeBaseModule * self,ValaMethod * m,ValaCCodeFile * decl_space)26526 vala_ccode_base_module_real_generate_method_declaration (ValaCCodeBaseModule* self,
26527                                                          ValaMethod* m,
26528                                                          ValaCCodeFile* decl_space)
26529 {
26530 	gboolean result = FALSE;
26531 	g_return_val_if_fail (m != NULL, FALSE);
26532 	g_return_val_if_fail (decl_space != NULL, FALSE);
26533 	result = FALSE;
26534 	return result;
26535 }
26536 
26537 gboolean
vala_ccode_base_module_generate_method_declaration(ValaCCodeBaseModule * self,ValaMethod * m,ValaCCodeFile * decl_space)26538 vala_ccode_base_module_generate_method_declaration (ValaCCodeBaseModule* self,
26539                                                     ValaMethod* m,
26540                                                     ValaCCodeFile* decl_space)
26541 {
26542 	g_return_val_if_fail (self != NULL, FALSE);
26543 	return VALA_CCODE_BASE_MODULE_GET_CLASS (self)->generate_method_declaration (self, m, decl_space);
26544 }
26545 
26546 static void
vala_ccode_base_module_real_generate_error_domain_declaration(ValaCCodeBaseModule * self,ValaErrorDomain * edomain,ValaCCodeFile * decl_space)26547 vala_ccode_base_module_real_generate_error_domain_declaration (ValaCCodeBaseModule* self,
26548                                                                ValaErrorDomain* edomain,
26549                                                                ValaCCodeFile* decl_space)
26550 {
26551 	g_return_if_fail (edomain != NULL);
26552 	g_return_if_fail (decl_space != NULL);
26553 }
26554 
26555 void
vala_ccode_base_module_generate_error_domain_declaration(ValaCCodeBaseModule * self,ValaErrorDomain * edomain,ValaCCodeFile * decl_space)26556 vala_ccode_base_module_generate_error_domain_declaration (ValaCCodeBaseModule* self,
26557                                                           ValaErrorDomain* edomain,
26558                                                           ValaCCodeFile* decl_space)
26559 {
26560 	g_return_if_fail (self != NULL);
26561 	VALA_CCODE_BASE_MODULE_GET_CLASS (self)->generate_error_domain_declaration (self, edomain, decl_space);
26562 }
26563 
26564 void
vala_ccode_base_module_add_generic_type_arguments(ValaCCodeBaseModule * self,ValaMap * arg_map,ValaList * type_args,ValaCodeNode * expr,gboolean is_chainup,ValaList * type_parameters)26565 vala_ccode_base_module_add_generic_type_arguments (ValaCCodeBaseModule* self,
26566                                                    ValaMap* arg_map,
26567                                                    ValaList* type_args,
26568                                                    ValaCodeNode* expr,
26569                                                    gboolean is_chainup,
26570                                                    ValaList* type_parameters)
26571 {
26572 	gint type_param_index = 0;
26573 	g_return_if_fail (self != NULL);
26574 	g_return_if_fail (arg_map != NULL);
26575 	g_return_if_fail (type_args != NULL);
26576 	g_return_if_fail (expr != NULL);
26577 	type_param_index = 0;
26578 	{
26579 		ValaList* _type_arg_list = NULL;
26580 		ValaList* _tmp0_;
26581 		gint _type_arg_size = 0;
26582 		ValaList* _tmp1_;
26583 		gint _tmp2_;
26584 		gint _tmp3_;
26585 		gint _type_arg_index = 0;
26586 		_tmp0_ = _vala_iterable_ref0 (type_args);
26587 		_type_arg_list = _tmp0_;
26588 		_tmp1_ = _type_arg_list;
26589 		_tmp2_ = vala_collection_get_size ((ValaCollection*) _tmp1_);
26590 		_tmp3_ = _tmp2_;
26591 		_type_arg_size = _tmp3_;
26592 		_type_arg_index = -1;
26593 		while (TRUE) {
26594 			gint _tmp4_;
26595 			gint _tmp5_;
26596 			ValaDataType* type_arg = NULL;
26597 			ValaList* _tmp6_;
26598 			gpointer _tmp7_;
26599 			ValaDataType* _tmp31_;
26600 			ValaCCodeExpression* _tmp32_;
26601 			ValaCCodeExpression* _tmp33_;
26602 			ValaDataType* _tmp34_;
26603 			gint _tmp53_;
26604 			_type_arg_index = _type_arg_index + 1;
26605 			_tmp4_ = _type_arg_index;
26606 			_tmp5_ = _type_arg_size;
26607 			if (!(_tmp4_ < _tmp5_)) {
26608 				break;
26609 			}
26610 			_tmp6_ = _type_arg_list;
26611 			_tmp7_ = vala_list_get (_tmp6_, _type_arg_index);
26612 			type_arg = (ValaDataType*) _tmp7_;
26613 			if (type_parameters != NULL) {
26614 				gchar* type_param_name = NULL;
26615 				gpointer _tmp8_;
26616 				ValaTypeParameter* _tmp9_;
26617 				const gchar* _tmp10_;
26618 				const gchar* _tmp11_;
26619 				gchar* _tmp12_;
26620 				gchar* _tmp13_;
26621 				gchar* _tmp14_;
26622 				gchar* _tmp15_;
26623 				const gchar* _tmp16_;
26624 				gchar* _tmp17_;
26625 				gchar* _tmp18_;
26626 				ValaCCodeConstant* _tmp19_;
26627 				ValaCCodeConstant* _tmp20_;
26628 				const gchar* _tmp21_;
26629 				gchar* _tmp22_;
26630 				gchar* _tmp23_;
26631 				ValaCCodeConstant* _tmp24_;
26632 				ValaCCodeConstant* _tmp25_;
26633 				const gchar* _tmp26_;
26634 				gchar* _tmp27_;
26635 				gchar* _tmp28_;
26636 				ValaCCodeConstant* _tmp29_;
26637 				ValaCCodeConstant* _tmp30_;
26638 				_tmp8_ = vala_list_get (type_parameters, type_param_index);
26639 				_tmp9_ = (ValaTypeParameter*) _tmp8_;
26640 				_tmp10_ = vala_symbol_get_name ((ValaSymbol*) _tmp9_);
26641 				_tmp11_ = _tmp10_;
26642 				_tmp12_ = g_ascii_strdown (_tmp11_, (gssize) -1);
26643 				_tmp13_ = _tmp12_;
26644 				_tmp14_ = string_replace (_tmp13_, "_", "-");
26645 				_tmp15_ = _tmp14_;
26646 				_g_free0 (_tmp13_);
26647 				_vala_code_node_unref0 (_tmp9_);
26648 				type_param_name = _tmp15_;
26649 				_tmp16_ = type_param_name;
26650 				_tmp17_ = g_strdup_printf ("\"%s-type\"", _tmp16_);
26651 				_tmp18_ = _tmp17_;
26652 				_tmp19_ = vala_ccode_constant_new (_tmp18_);
26653 				_tmp20_ = _tmp19_;
26654 				vala_map_set (arg_map, (gpointer) ((gintptr) vala_ccode_base_module_get_param_pos (self, (0.1 * type_param_index) + 0.01, FALSE)), (ValaCCodeExpression*) _tmp20_);
26655 				_vala_ccode_node_unref0 (_tmp20_);
26656 				_g_free0 (_tmp18_);
26657 				_tmp21_ = type_param_name;
26658 				_tmp22_ = g_strdup_printf ("\"%s-dup-func\"", _tmp21_);
26659 				_tmp23_ = _tmp22_;
26660 				_tmp24_ = vala_ccode_constant_new (_tmp23_);
26661 				_tmp25_ = _tmp24_;
26662 				vala_map_set (arg_map, (gpointer) ((gintptr) vala_ccode_base_module_get_param_pos (self, (0.1 * type_param_index) + 0.03, FALSE)), (ValaCCodeExpression*) _tmp25_);
26663 				_vala_ccode_node_unref0 (_tmp25_);
26664 				_g_free0 (_tmp23_);
26665 				_tmp26_ = type_param_name;
26666 				_tmp27_ = g_strdup_printf ("\"%s-destroy-func\"", _tmp26_);
26667 				_tmp28_ = _tmp27_;
26668 				_tmp29_ = vala_ccode_constant_new (_tmp28_);
26669 				_tmp30_ = _tmp29_;
26670 				vala_map_set (arg_map, (gpointer) ((gintptr) vala_ccode_base_module_get_param_pos (self, (0.1 * type_param_index) + 0.05, FALSE)), (ValaCCodeExpression*) _tmp30_);
26671 				_vala_ccode_node_unref0 (_tmp30_);
26672 				_g_free0 (_tmp28_);
26673 				_g_free0 (type_param_name);
26674 			}
26675 			_tmp31_ = type_arg;
26676 			_tmp32_ = vala_ccode_base_module_get_type_id_expression (self, _tmp31_, is_chainup);
26677 			_tmp33_ = _tmp32_;
26678 			vala_map_set (arg_map, (gpointer) ((gintptr) vala_ccode_base_module_get_param_pos (self, (0.1 * type_param_index) + 0.02, FALSE)), _tmp33_);
26679 			_vala_ccode_node_unref0 (_tmp33_);
26680 			_tmp34_ = type_arg;
26681 			if (vala_ccode_base_module_requires_copy (_tmp34_)) {
26682 				ValaCCodeExpression* dup_func = NULL;
26683 				ValaDataType* _tmp35_;
26684 				ValaDataType* _tmp36_;
26685 				ValaSourceReference* _tmp37_;
26686 				ValaSourceReference* _tmp38_;
26687 				ValaCCodeExpression* _tmp39_;
26688 				ValaCCodeExpression* _tmp40_;
26689 				ValaCCodeExpression* _tmp41_;
26690 				ValaCCodeCastExpression* _tmp42_;
26691 				ValaCCodeCastExpression* _tmp43_;
26692 				ValaDataType* _tmp44_;
26693 				ValaCCodeExpression* _tmp45_;
26694 				ValaCCodeExpression* _tmp46_;
26695 				ValaCCodeCastExpression* _tmp47_;
26696 				ValaCCodeCastExpression* _tmp48_;
26697 				_tmp35_ = type_arg;
26698 				_tmp36_ = type_arg;
26699 				_tmp37_ = vala_code_node_get_source_reference ((ValaCodeNode*) _tmp36_);
26700 				_tmp38_ = _tmp37_;
26701 				_tmp39_ = vala_ccode_base_module_get_dup_func_expression (self, _tmp35_, _tmp38_, is_chainup);
26702 				dup_func = _tmp39_;
26703 				_tmp40_ = dup_func;
26704 				if (_tmp40_ == NULL) {
26705 					vala_code_node_set_error (expr, TRUE);
26706 					_vala_ccode_node_unref0 (dup_func);
26707 					_vala_code_node_unref0 (type_arg);
26708 					_vala_iterable_unref0 (_type_arg_list);
26709 					return;
26710 				}
26711 				_tmp41_ = dup_func;
26712 				_tmp42_ = vala_ccode_cast_expression_new (_tmp41_, "GBoxedCopyFunc");
26713 				_tmp43_ = _tmp42_;
26714 				vala_map_set (arg_map, (gpointer) ((gintptr) vala_ccode_base_module_get_param_pos (self, (0.1 * type_param_index) + 0.04, FALSE)), (ValaCCodeExpression*) _tmp43_);
26715 				_vala_ccode_node_unref0 (_tmp43_);
26716 				_tmp44_ = type_arg;
26717 				_tmp45_ = vala_ccode_base_module_get_destroy_func_expression (self, _tmp44_, is_chainup);
26718 				_tmp46_ = _tmp45_;
26719 				_tmp47_ = vala_ccode_cast_expression_new (_tmp46_, "GDestroyNotify");
26720 				_tmp48_ = _tmp47_;
26721 				vala_map_set (arg_map, (gpointer) ((gintptr) vala_ccode_base_module_get_param_pos (self, (0.1 * type_param_index) + 0.06, FALSE)), (ValaCCodeExpression*) _tmp48_);
26722 				_vala_ccode_node_unref0 (_tmp48_);
26723 				_vala_ccode_node_unref0 (_tmp46_);
26724 				_vala_ccode_node_unref0 (dup_func);
26725 			} else {
26726 				ValaCCodeConstant* _tmp49_;
26727 				ValaCCodeConstant* _tmp50_;
26728 				ValaCCodeConstant* _tmp51_;
26729 				ValaCCodeConstant* _tmp52_;
26730 				_tmp49_ = vala_ccode_constant_new ("NULL");
26731 				_tmp50_ = _tmp49_;
26732 				vala_map_set (arg_map, (gpointer) ((gintptr) vala_ccode_base_module_get_param_pos (self, (0.1 * type_param_index) + 0.04, FALSE)), (ValaCCodeExpression*) _tmp50_);
26733 				_vala_ccode_node_unref0 (_tmp50_);
26734 				_tmp51_ = vala_ccode_constant_new ("NULL");
26735 				_tmp52_ = _tmp51_;
26736 				vala_map_set (arg_map, (gpointer) ((gintptr) vala_ccode_base_module_get_param_pos (self, (0.1 * type_param_index) + 0.06, FALSE)), (ValaCCodeExpression*) _tmp52_);
26737 				_vala_ccode_node_unref0 (_tmp52_);
26738 			}
26739 			_tmp53_ = type_param_index;
26740 			type_param_index = _tmp53_ + 1;
26741 			_vala_code_node_unref0 (type_arg);
26742 		}
26743 		_vala_iterable_unref0 (_type_arg_list);
26744 	}
26745 }
26746 
26747 static gpointer
_vala_map_ref0(gpointer self)26748 _vala_map_ref0 (gpointer self)
26749 {
26750 	return self ? vala_map_ref (self) : NULL;
26751 }
26752 
26753 static void
vala_ccode_base_module_real_visit_object_creation_expression(ValaCodeVisitor * base,ValaObjectCreationExpression * expr)26754 vala_ccode_base_module_real_visit_object_creation_expression (ValaCodeVisitor* base,
26755                                                               ValaObjectCreationExpression* expr)
26756 {
26757 	ValaCCodeBaseModule * self;
26758 	ValaCCodeExpression* instance = NULL;
26759 	ValaCCodeExpression* creation_expr = NULL;
26760 	ValaStruct* st = NULL;
26761 	ValaDataType* _tmp0_;
26762 	ValaDataType* _tmp1_;
26763 	ValaTypeSymbol* _tmp2_;
26764 	ValaTypeSymbol* _tmp3_;
26765 	gboolean _tmp4_ = FALSE;
26766 	gboolean _tmp5_ = FALSE;
26767 	ValaStruct* _tmp6_;
26768 	ValaSymbol* _tmp134_;
26769 	ValaSymbol* _tmp135_;
26770 	ValaLocalVariable* local = NULL;
26771 	ValaCodeNode* _tmp645_;
26772 	ValaCodeNode* _tmp646_;
26773 	ValaLocalVariable* _tmp647_;
26774 	gboolean _tmp648_ = FALSE;
26775 	ValaLocalVariable* _tmp649_;
26776 	ValaTargetValue* _tmp884_;
26777 	ValaTargetValue* _tmp885_;
26778 	self = (ValaCCodeBaseModule*) base;
26779 	g_return_if_fail (expr != NULL);
26780 	instance = NULL;
26781 	creation_expr = NULL;
26782 	_tmp0_ = vala_object_creation_expression_get_type_reference (expr);
26783 	_tmp1_ = _tmp0_;
26784 	_tmp2_ = vala_data_type_get_type_symbol (_tmp1_);
26785 	_tmp3_ = _tmp2_;
26786 	st = G_TYPE_CHECK_INSTANCE_TYPE (_tmp3_, VALA_TYPE_STRUCT) ? ((ValaStruct*) _tmp3_) : NULL;
26787 	_tmp6_ = st;
26788 	if (_tmp6_ != NULL) {
26789 		gboolean _tmp7_ = FALSE;
26790 		ValaStruct* _tmp8_;
26791 		_tmp8_ = st;
26792 		if (!vala_struct_is_simple_type (_tmp8_)) {
26793 			_tmp7_ = TRUE;
26794 		} else {
26795 			ValaStruct* _tmp9_;
26796 			gchar* _tmp10_;
26797 			gchar* _tmp11_;
26798 			_tmp9_ = st;
26799 			_tmp10_ = vala_get_ccode_name ((ValaCodeNode*) _tmp9_);
26800 			_tmp11_ = _tmp10_;
26801 			_tmp7_ = g_strcmp0 (_tmp11_, "va_list") == 0;
26802 			_g_free0 (_tmp11_);
26803 		}
26804 		_tmp5_ = _tmp7_;
26805 	} else {
26806 		_tmp5_ = FALSE;
26807 	}
26808 	if (_tmp5_) {
26809 		_tmp4_ = TRUE;
26810 	} else {
26811 		ValaList* _tmp12_;
26812 		gint _tmp13_;
26813 		gint _tmp14_;
26814 		_tmp12_ = vala_object_creation_expression_get_object_initializer (expr);
26815 		_tmp13_ = vala_collection_get_size ((ValaCollection*) _tmp12_);
26816 		_tmp14_ = _tmp13_;
26817 		_tmp4_ = _tmp14_ > 0;
26818 	}
26819 	if (_tmp4_) {
26820 		ValaLocalVariable* local = NULL;
26821 		ValaCodeNode* _tmp15_;
26822 		ValaCodeNode* _tmp16_;
26823 		ValaLocalVariable* _tmp17_;
26824 		ValaField* field = NULL;
26825 		ValaCodeNode* _tmp18_;
26826 		ValaCodeNode* _tmp19_;
26827 		ValaField* _tmp20_;
26828 		ValaAssignment* a = NULL;
26829 		ValaCodeNode* _tmp21_;
26830 		ValaCodeNode* _tmp22_;
26831 		ValaAssignment* _tmp23_;
26832 		gboolean _tmp24_ = FALSE;
26833 		ValaLocalVariable* _tmp25_;
26834 		_tmp15_ = vala_code_node_get_parent_node ((ValaCodeNode*) expr);
26835 		_tmp16_ = _tmp15_;
26836 		_tmp17_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (_tmp16_, VALA_TYPE_LOCAL_VARIABLE) ? ((ValaLocalVariable*) _tmp16_) : NULL);
26837 		local = _tmp17_;
26838 		_tmp18_ = vala_code_node_get_parent_node ((ValaCodeNode*) expr);
26839 		_tmp19_ = _tmp18_;
26840 		_tmp20_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (_tmp19_, VALA_TYPE_FIELD) ? ((ValaField*) _tmp19_) : NULL);
26841 		field = _tmp20_;
26842 		_tmp21_ = vala_code_node_get_parent_node ((ValaCodeNode*) expr);
26843 		_tmp22_ = _tmp21_;
26844 		_tmp23_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (_tmp22_, VALA_TYPE_ASSIGNMENT) ? ((ValaAssignment*) _tmp22_) : NULL);
26845 		a = _tmp23_;
26846 		_tmp25_ = local;
26847 		if (_tmp25_ != NULL) {
26848 			ValaLocalVariable* _tmp26_;
26849 			ValaLocalVariable* _tmp27_;
26850 			ValaExpression* _tmp28_;
26851 			ValaExpression* _tmp29_;
26852 			_tmp26_ = local;
26853 			_tmp27_ = local;
26854 			_tmp28_ = vala_variable_get_initializer ((ValaVariable*) _tmp27_);
26855 			_tmp29_ = _tmp28_;
26856 			_tmp24_ = vala_ccode_base_module_is_simple_struct_creation (self, (ValaVariable*) _tmp26_, _tmp29_);
26857 		} else {
26858 			_tmp24_ = FALSE;
26859 		}
26860 		if (_tmp24_) {
26861 			ValaLocalVariable* _tmp30_;
26862 			ValaTargetValue* _tmp31_;
26863 			ValaTargetValue* _tmp32_;
26864 			ValaCCodeExpression* _tmp33_;
26865 			ValaCCodeExpression* _tmp34_;
26866 			_tmp30_ = local;
26867 			_tmp31_ = vala_ccode_base_module_get_local_cvalue (self, _tmp30_);
26868 			_tmp32_ = _tmp31_;
26869 			_tmp33_ = vala_get_cvalue_ (_tmp32_);
26870 			_tmp34_ = _vala_ccode_node_ref0 (_tmp33_);
26871 			_vala_ccode_node_unref0 (instance);
26872 			instance = _tmp34_;
26873 			_vala_target_value_unref0 (_tmp32_);
26874 		} else {
26875 			gboolean _tmp35_ = FALSE;
26876 			ValaField* _tmp36_;
26877 			_tmp36_ = field;
26878 			if (_tmp36_ != NULL) {
26879 				ValaField* _tmp37_;
26880 				ValaField* _tmp38_;
26881 				ValaExpression* _tmp39_;
26882 				ValaExpression* _tmp40_;
26883 				_tmp37_ = field;
26884 				_tmp38_ = field;
26885 				_tmp39_ = vala_variable_get_initializer ((ValaVariable*) _tmp38_);
26886 				_tmp40_ = _tmp39_;
26887 				_tmp35_ = vala_ccode_base_module_is_simple_struct_creation (self, (ValaVariable*) _tmp37_, _tmp40_);
26888 			} else {
26889 				_tmp35_ = FALSE;
26890 			}
26891 			if (_tmp35_) {
26892 				ValaTargetValue* thisparam = NULL;
26893 				ValaField* _tmp41_;
26894 				ValaSymbol* _tmp42_;
26895 				ValaSymbol* _tmp43_;
26896 				ValaTargetValue* _tmp44_;
26897 				ValaField* _tmp45_;
26898 				ValaTargetValue* _tmp46_;
26899 				ValaTargetValue* _tmp47_;
26900 				ValaTargetValue* _tmp48_;
26901 				ValaCCodeExpression* _tmp49_;
26902 				ValaCCodeExpression* _tmp50_;
26903 				_tmp41_ = field;
26904 				_tmp42_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp41_);
26905 				_tmp43_ = _tmp42_;
26906 				_tmp44_ = vala_ccode_base_module_load_this_parameter (self, G_TYPE_CHECK_INSTANCE_CAST (_tmp43_, VALA_TYPE_TYPESYMBOL, ValaTypeSymbol));
26907 				thisparam = _tmp44_;
26908 				_tmp45_ = field;
26909 				_tmp46_ = thisparam;
26910 				_tmp47_ = vala_ccode_base_module_get_field_cvalue (self, _tmp45_, _tmp46_);
26911 				_tmp48_ = _tmp47_;
26912 				_tmp49_ = vala_get_cvalue_ (_tmp48_);
26913 				_tmp50_ = _vala_ccode_node_ref0 (_tmp49_);
26914 				_vala_ccode_node_unref0 (instance);
26915 				instance = _tmp50_;
26916 				_vala_target_value_unref0 (_tmp48_);
26917 				_vala_target_value_unref0 (thisparam);
26918 			} else {
26919 				gboolean _tmp51_ = FALSE;
26920 				gboolean _tmp52_ = FALSE;
26921 				ValaAssignment* _tmp53_;
26922 				_tmp53_ = a;
26923 				if (_tmp53_ != NULL) {
26924 					ValaAssignment* _tmp54_;
26925 					ValaExpression* _tmp55_;
26926 					ValaExpression* _tmp56_;
26927 					ValaSymbol* _tmp57_;
26928 					ValaSymbol* _tmp58_;
26929 					_tmp54_ = a;
26930 					_tmp55_ = vala_assignment_get_left (_tmp54_);
26931 					_tmp56_ = _tmp55_;
26932 					_tmp57_ = vala_expression_get_symbol_reference (_tmp56_);
26933 					_tmp58_ = _tmp57_;
26934 					_tmp52_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp58_, VALA_TYPE_VARIABLE);
26935 				} else {
26936 					_tmp52_ = FALSE;
26937 				}
26938 				if (_tmp52_) {
26939 					ValaAssignment* _tmp59_;
26940 					ValaExpression* _tmp60_;
26941 					ValaExpression* _tmp61_;
26942 					ValaSymbol* _tmp62_;
26943 					ValaSymbol* _tmp63_;
26944 					ValaAssignment* _tmp64_;
26945 					ValaExpression* _tmp65_;
26946 					ValaExpression* _tmp66_;
26947 					_tmp59_ = a;
26948 					_tmp60_ = vala_assignment_get_left (_tmp59_);
26949 					_tmp61_ = _tmp60_;
26950 					_tmp62_ = vala_expression_get_symbol_reference (_tmp61_);
26951 					_tmp63_ = _tmp62_;
26952 					_tmp64_ = a;
26953 					_tmp65_ = vala_assignment_get_right (_tmp64_);
26954 					_tmp66_ = _tmp65_;
26955 					_tmp51_ = vala_ccode_base_module_is_simple_struct_creation (self, G_TYPE_CHECK_INSTANCE_CAST (_tmp63_, VALA_TYPE_VARIABLE, ValaVariable), _tmp66_);
26956 				} else {
26957 					_tmp51_ = FALSE;
26958 				}
26959 				if (_tmp51_) {
26960 					ValaAssignment* _tmp67_;
26961 					ValaExpression* _tmp68_;
26962 					ValaExpression* _tmp69_;
26963 					ValaDataType* _tmp70_;
26964 					ValaDataType* _tmp71_;
26965 					ValaAssignment* _tmp81_;
26966 					ValaExpression* _tmp82_;
26967 					ValaExpression* _tmp83_;
26968 					ValaSymbol* _tmp84_;
26969 					ValaSymbol* _tmp85_;
26970 					ValaLocalVariable* _tmp86_;
26971 					ValaAssignment* _tmp87_;
26972 					ValaExpression* _tmp88_;
26973 					ValaExpression* _tmp89_;
26974 					ValaSymbol* _tmp90_;
26975 					ValaSymbol* _tmp91_;
26976 					ValaField* _tmp92_;
26977 					ValaParameter* param = NULL;
26978 					ValaAssignment* _tmp93_;
26979 					ValaExpression* _tmp94_;
26980 					ValaExpression* _tmp95_;
26981 					ValaSymbol* _tmp96_;
26982 					ValaSymbol* _tmp97_;
26983 					ValaParameter* _tmp98_;
26984 					ValaLocalVariable* _tmp99_;
26985 					_tmp67_ = a;
26986 					_tmp68_ = vala_assignment_get_left (_tmp67_);
26987 					_tmp69_ = _tmp68_;
26988 					_tmp70_ = vala_expression_get_value_type (_tmp69_);
26989 					_tmp71_ = _tmp70_;
26990 					if (vala_ccode_base_module_requires_destroy (_tmp71_)) {
26991 						ValaCCodeFunction* _tmp72_;
26992 						ValaCCodeFunction* _tmp73_;
26993 						ValaAssignment* _tmp74_;
26994 						ValaExpression* _tmp75_;
26995 						ValaExpression* _tmp76_;
26996 						ValaTargetValue* _tmp77_;
26997 						ValaTargetValue* _tmp78_;
26998 						ValaCCodeExpression* _tmp79_;
26999 						ValaCCodeExpression* _tmp80_;
27000 						_tmp72_ = vala_ccode_base_module_get_ccode (self);
27001 						_tmp73_ = _tmp72_;
27002 						_tmp74_ = a;
27003 						_tmp75_ = vala_assignment_get_left (_tmp74_);
27004 						_tmp76_ = _tmp75_;
27005 						_tmp77_ = vala_expression_get_target_value (_tmp76_);
27006 						_tmp78_ = _tmp77_;
27007 						_tmp79_ = vala_ccode_base_module_destroy_value (self, _tmp78_, FALSE);
27008 						_tmp80_ = _tmp79_;
27009 						vala_ccode_function_add_expression (_tmp73_, _tmp80_);
27010 						_vala_ccode_node_unref0 (_tmp80_);
27011 					}
27012 					_tmp81_ = a;
27013 					_tmp82_ = vala_assignment_get_left (_tmp81_);
27014 					_tmp83_ = _tmp82_;
27015 					_tmp84_ = vala_expression_get_symbol_reference (_tmp83_);
27016 					_tmp85_ = _tmp84_;
27017 					_tmp86_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (_tmp85_, VALA_TYPE_LOCAL_VARIABLE) ? ((ValaLocalVariable*) _tmp85_) : NULL);
27018 					_vala_code_node_unref0 (local);
27019 					local = _tmp86_;
27020 					_tmp87_ = a;
27021 					_tmp88_ = vala_assignment_get_left (_tmp87_);
27022 					_tmp89_ = _tmp88_;
27023 					_tmp90_ = vala_expression_get_symbol_reference (_tmp89_);
27024 					_tmp91_ = _tmp90_;
27025 					_tmp92_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (_tmp91_, VALA_TYPE_FIELD) ? ((ValaField*) _tmp91_) : NULL);
27026 					_vala_code_node_unref0 (field);
27027 					field = _tmp92_;
27028 					_tmp93_ = a;
27029 					_tmp94_ = vala_assignment_get_left (_tmp93_);
27030 					_tmp95_ = _tmp94_;
27031 					_tmp96_ = vala_expression_get_symbol_reference (_tmp95_);
27032 					_tmp97_ = _tmp96_;
27033 					_tmp98_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (_tmp97_, VALA_TYPE_PARAMETER) ? ((ValaParameter*) _tmp97_) : NULL);
27034 					param = _tmp98_;
27035 					_tmp99_ = local;
27036 					if (_tmp99_ != NULL) {
27037 						ValaLocalVariable* _tmp100_;
27038 						ValaTargetValue* _tmp101_;
27039 						ValaTargetValue* _tmp102_;
27040 						ValaCCodeExpression* _tmp103_;
27041 						ValaCCodeExpression* _tmp104_;
27042 						_tmp100_ = local;
27043 						_tmp101_ = vala_ccode_base_module_get_local_cvalue (self, _tmp100_);
27044 						_tmp102_ = _tmp101_;
27045 						_tmp103_ = vala_get_cvalue_ (_tmp102_);
27046 						_tmp104_ = _vala_ccode_node_ref0 (_tmp103_);
27047 						_vala_ccode_node_unref0 (instance);
27048 						instance = _tmp104_;
27049 						_vala_target_value_unref0 (_tmp102_);
27050 					} else {
27051 						ValaField* _tmp105_;
27052 						_tmp105_ = field;
27053 						if (_tmp105_ != NULL) {
27054 							ValaExpression* inner = NULL;
27055 							ValaAssignment* _tmp106_;
27056 							ValaExpression* _tmp107_;
27057 							ValaExpression* _tmp108_;
27058 							ValaExpression* _tmp109_;
27059 							ValaExpression* _tmp110_;
27060 							ValaExpression* _tmp111_;
27061 							ValaTargetValue* _tmp112_ = NULL;
27062 							ValaExpression* _tmp113_;
27063 							ValaField* _tmp117_;
27064 							ValaTargetValue* _tmp118_;
27065 							ValaTargetValue* _tmp119_;
27066 							ValaCCodeExpression* _tmp120_;
27067 							ValaCCodeExpression* _tmp121_;
27068 							_tmp106_ = a;
27069 							_tmp107_ = vala_assignment_get_left (_tmp106_);
27070 							_tmp108_ = _tmp107_;
27071 							_tmp109_ = vala_member_access_get_inner (G_TYPE_CHECK_INSTANCE_CAST (_tmp108_, VALA_TYPE_MEMBER_ACCESS, ValaMemberAccess));
27072 							_tmp110_ = _tmp109_;
27073 							_tmp111_ = _vala_code_node_ref0 (_tmp110_);
27074 							inner = _tmp111_;
27075 							_tmp113_ = inner;
27076 							if (_tmp113_ != NULL) {
27077 								ValaExpression* _tmp114_;
27078 								ValaTargetValue* _tmp115_;
27079 								ValaTargetValue* _tmp116_;
27080 								_tmp114_ = inner;
27081 								_tmp115_ = vala_expression_get_target_value (_tmp114_);
27082 								_tmp116_ = _tmp115_;
27083 								_tmp112_ = _tmp116_;
27084 							} else {
27085 								_tmp112_ = NULL;
27086 							}
27087 							_tmp117_ = field;
27088 							_tmp118_ = vala_ccode_base_module_get_field_cvalue (self, _tmp117_, _tmp112_);
27089 							_tmp119_ = _tmp118_;
27090 							_tmp120_ = vala_get_cvalue_ (_tmp119_);
27091 							_tmp121_ = _vala_ccode_node_ref0 (_tmp120_);
27092 							_vala_ccode_node_unref0 (instance);
27093 							instance = _tmp121_;
27094 							_vala_target_value_unref0 (_tmp119_);
27095 							_vala_code_node_unref0 (inner);
27096 						} else {
27097 							ValaParameter* _tmp122_;
27098 							_tmp122_ = param;
27099 							if (_tmp122_ != NULL) {
27100 								ValaParameter* _tmp123_;
27101 								ValaTargetValue* _tmp124_;
27102 								ValaTargetValue* _tmp125_;
27103 								ValaCCodeExpression* _tmp126_;
27104 								ValaCCodeExpression* _tmp127_;
27105 								_tmp123_ = param;
27106 								_tmp124_ = vala_ccode_base_module_get_parameter_cvalue (self, _tmp123_);
27107 								_tmp125_ = _tmp124_;
27108 								_tmp126_ = vala_get_cvalue_ (_tmp125_);
27109 								_tmp127_ = _vala_ccode_node_ref0 (_tmp126_);
27110 								_vala_ccode_node_unref0 (instance);
27111 								instance = _tmp127_;
27112 								_vala_target_value_unref0 (_tmp125_);
27113 							}
27114 						}
27115 					}
27116 					_vala_code_node_unref0 (param);
27117 				} else {
27118 					ValaTargetValue* temp_value = NULL;
27119 					ValaDataType* _tmp128_;
27120 					ValaDataType* _tmp129_;
27121 					ValaTargetValue* _tmp130_;
27122 					ValaTargetValue* _tmp131_;
27123 					ValaCCodeExpression* _tmp132_;
27124 					ValaCCodeExpression* _tmp133_;
27125 					_tmp128_ = vala_object_creation_expression_get_type_reference (expr);
27126 					_tmp129_ = _tmp128_;
27127 					_tmp130_ = vala_ccode_base_module_create_temp_value (self, _tmp129_, TRUE, (ValaCodeNode*) expr, NULL);
27128 					temp_value = _tmp130_;
27129 					_tmp131_ = temp_value;
27130 					_tmp132_ = vala_get_cvalue_ (_tmp131_);
27131 					_tmp133_ = _vala_ccode_node_ref0 (_tmp132_);
27132 					_vala_ccode_node_unref0 (instance);
27133 					instance = _tmp133_;
27134 					_vala_target_value_unref0 (temp_value);
27135 				}
27136 			}
27137 		}
27138 		_vala_code_node_unref0 (a);
27139 		_vala_code_node_unref0 (field);
27140 		_vala_code_node_unref0 (local);
27141 	}
27142 	_tmp134_ = vala_expression_get_symbol_reference ((ValaExpression*) expr);
27143 	_tmp135_ = _tmp134_;
27144 	if (_tmp135_ == NULL) {
27145 		ValaDataType* _tmp136_;
27146 		ValaDataType* _tmp137_;
27147 		ValaTypeSymbol* _tmp138_;
27148 		ValaTypeSymbol* _tmp139_;
27149 		_tmp136_ = vala_object_creation_expression_get_type_reference (expr);
27150 		_tmp137_ = _tmp136_;
27151 		_tmp138_ = vala_data_type_get_type_symbol (_tmp137_);
27152 		_tmp139_ = _tmp138_;
27153 		if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp139_, VALA_TYPE_STRUCT)) {
27154 			ValaCCodeFile* _tmp140_;
27155 			ValaCCodeFunctionCall* creation_call = NULL;
27156 			ValaCCodeIdentifier* _tmp141_;
27157 			ValaCCodeIdentifier* _tmp142_;
27158 			ValaCCodeFunctionCall* _tmp143_;
27159 			ValaCCodeFunctionCall* _tmp144_;
27160 			ValaCCodeFunctionCall* _tmp145_;
27161 			ValaCCodeExpression* _tmp146_;
27162 			ValaCCodeUnaryExpression* _tmp147_;
27163 			ValaCCodeUnaryExpression* _tmp148_;
27164 			ValaCCodeFunctionCall* _tmp149_;
27165 			ValaCCodeConstant* _tmp150_;
27166 			ValaCCodeConstant* _tmp151_;
27167 			ValaCCodeFunctionCall* _tmp152_;
27168 			ValaDataType* _tmp153_;
27169 			ValaDataType* _tmp154_;
27170 			gchar* _tmp155_;
27171 			gchar* _tmp156_;
27172 			gchar* _tmp157_;
27173 			gchar* _tmp158_;
27174 			ValaCCodeIdentifier* _tmp159_;
27175 			ValaCCodeIdentifier* _tmp160_;
27176 			ValaCCodeFunctionCall* _tmp161_;
27177 			ValaCCodeExpression* _tmp162_;
27178 			_tmp140_ = self->cfile;
27179 			vala_ccode_file_add_include (_tmp140_, "string.h", FALSE);
27180 			_tmp141_ = vala_ccode_identifier_new ("memset");
27181 			_tmp142_ = _tmp141_;
27182 			_tmp143_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp142_);
27183 			_tmp144_ = _tmp143_;
27184 			_vala_ccode_node_unref0 (_tmp142_);
27185 			creation_call = _tmp144_;
27186 			_tmp145_ = creation_call;
27187 			_tmp146_ = instance;
27188 			_tmp147_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, _tmp146_);
27189 			_tmp148_ = _tmp147_;
27190 			vala_ccode_function_call_add_argument (_tmp145_, (ValaCCodeExpression*) _tmp148_);
27191 			_vala_ccode_node_unref0 (_tmp148_);
27192 			_tmp149_ = creation_call;
27193 			_tmp150_ = vala_ccode_constant_new ("0");
27194 			_tmp151_ = _tmp150_;
27195 			vala_ccode_function_call_add_argument (_tmp149_, (ValaCCodeExpression*) _tmp151_);
27196 			_vala_ccode_node_unref0 (_tmp151_);
27197 			_tmp152_ = creation_call;
27198 			_tmp153_ = vala_object_creation_expression_get_type_reference (expr);
27199 			_tmp154_ = _tmp153_;
27200 			_tmp155_ = vala_get_ccode_name ((ValaCodeNode*) _tmp154_);
27201 			_tmp156_ = _tmp155_;
27202 			_tmp157_ = g_strdup_printf ("sizeof (%s)", _tmp156_);
27203 			_tmp158_ = _tmp157_;
27204 			_tmp159_ = vala_ccode_identifier_new (_tmp158_);
27205 			_tmp160_ = _tmp159_;
27206 			vala_ccode_function_call_add_argument (_tmp152_, (ValaCCodeExpression*) _tmp160_);
27207 			_vala_ccode_node_unref0 (_tmp160_);
27208 			_g_free0 (_tmp158_);
27209 			_g_free0 (_tmp156_);
27210 			_tmp161_ = creation_call;
27211 			_tmp162_ = _vala_ccode_node_ref0 ((ValaCCodeExpression*) _tmp161_);
27212 			_vala_ccode_node_unref0 (creation_expr);
27213 			creation_expr = _tmp162_;
27214 			_vala_ccode_node_unref0 (creation_call);
27215 		}
27216 	} else {
27217 		gboolean _tmp163_ = FALSE;
27218 		ValaDataType* _tmp164_;
27219 		ValaDataType* _tmp165_;
27220 		ValaTypeSymbol* _tmp166_;
27221 		ValaTypeSymbol* _tmp167_;
27222 		ValaClass* _tmp168_;
27223 		_tmp164_ = vala_object_creation_expression_get_type_reference (expr);
27224 		_tmp165_ = _tmp164_;
27225 		_tmp166_ = vala_data_type_get_type_symbol (_tmp165_);
27226 		_tmp167_ = _tmp166_;
27227 		_tmp168_ = self->glist_type;
27228 		if (_tmp167_ == G_TYPE_CHECK_INSTANCE_CAST (_tmp168_, VALA_TYPE_TYPESYMBOL, ValaTypeSymbol)) {
27229 			_tmp163_ = TRUE;
27230 		} else {
27231 			ValaDataType* _tmp169_;
27232 			ValaDataType* _tmp170_;
27233 			ValaTypeSymbol* _tmp171_;
27234 			ValaTypeSymbol* _tmp172_;
27235 			ValaClass* _tmp173_;
27236 			_tmp169_ = vala_object_creation_expression_get_type_reference (expr);
27237 			_tmp170_ = _tmp169_;
27238 			_tmp171_ = vala_data_type_get_type_symbol (_tmp170_);
27239 			_tmp172_ = _tmp171_;
27240 			_tmp173_ = self->gslist_type;
27241 			_tmp163_ = _tmp172_ == G_TYPE_CHECK_INSTANCE_CAST (_tmp173_, VALA_TYPE_TYPESYMBOL, ValaTypeSymbol);
27242 		}
27243 		if (_tmp163_) {
27244 			ValaCCodeConstant* _tmp174_;
27245 			ValaCCodeConstant* _tmp175_;
27246 			_tmp174_ = vala_ccode_constant_new ("NULL");
27247 			_tmp175_ = _tmp174_;
27248 			vala_set_cvalue ((ValaExpression*) expr, (ValaCCodeExpression*) _tmp175_);
27249 			_vala_ccode_node_unref0 (_tmp175_);
27250 		} else {
27251 			ValaSymbol* _tmp176_;
27252 			ValaSymbol* _tmp177_;
27253 			_tmp176_ = vala_expression_get_symbol_reference ((ValaExpression*) expr);
27254 			_tmp177_ = _tmp176_;
27255 			if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp177_, VALA_TYPE_METHOD)) {
27256 				ValaMethod* m = NULL;
27257 				ValaSymbol* _tmp178_;
27258 				ValaSymbol* _tmp179_;
27259 				ValaMethod* _tmp180_;
27260 				ValaList* params = NULL;
27261 				ValaMethod* _tmp181_;
27262 				ValaList* _tmp182_;
27263 				ValaList* _tmp183_;
27264 				ValaCCodeFunctionCall* creation_call = NULL;
27265 				ValaCCodeFunctionCall* async_call = NULL;
27266 				ValaCCodeFunctionCall* finish_call = NULL;
27267 				ValaMethod* _tmp184_;
27268 				ValaCCodeFile* _tmp185_;
27269 				ValaClass* cl = NULL;
27270 				ValaDataType* _tmp186_;
27271 				ValaDataType* _tmp187_;
27272 				ValaTypeSymbol* _tmp188_;
27273 				ValaTypeSymbol* _tmp189_;
27274 				ValaMethod* _tmp190_;
27275 				gboolean _tmp209_ = FALSE;
27276 				gboolean _tmp210_ = FALSE;
27277 				ValaStruct* _tmp211_;
27278 				ValaDataType* _tmp281_;
27279 				ValaDataType* _tmp282_;
27280 				ValaCCodeFile* _tmp283_;
27281 				ValaHashMap* in_arg_map = NULL;
27282 				GHashFunc _tmp284_;
27283 				GEqualFunc _tmp285_;
27284 				GEqualFunc _tmp286_;
27285 				ValaHashMap* _tmp287_;
27286 				ValaHashMap* out_arg_map = NULL;
27287 				ValaHashMap* _tmp288_;
27288 				ValaHashMap* _tmp289_;
27289 				gboolean _tmp290_ = FALSE;
27290 				ValaMethod* _tmp291_;
27291 				gboolean _tmp319_ = FALSE;
27292 				ValaClass* _tmp320_;
27293 				gboolean ellipsis = FALSE;
27294 				gint i = 0;
27295 				gint arg_pos = 0;
27296 				ValaIterator* params_it = NULL;
27297 				ValaList* _tmp351_;
27298 				ValaIterator* _tmp352_;
27299 				ValaIterator* _tmp450_;
27300 				gboolean _tmp460_;
27301 				gboolean _tmp461_;
27302 				gboolean _tmp488_ = FALSE;
27303 				gboolean _tmp489_ = FALSE;
27304 				ValaStruct* _tmp490_;
27305 				gboolean _tmp497_ = FALSE;
27306 				ValaMethod* _tmp498_;
27307 				gboolean _tmp514_ = FALSE;
27308 				gboolean _tmp515_ = FALSE;
27309 				ValaMethod* _tmp516_;
27310 				gint last_pos = 0;
27311 				gint min_pos = 0;
27312 				ValaCCodeFunctionCall* _tmp531_;
27313 				ValaCCodeFunctionCall* _tmp532_;
27314 				ValaCCodeFunctionCall* _tmp547_;
27315 				gboolean _tmp562_;
27316 				gboolean _tmp563_;
27317 				ValaCCodeFunctionCall* _tmp587_;
27318 				ValaCCodeExpression* _tmp588_;
27319 				ValaMethod* _tmp589_;
27320 				gchar* _tmp590_;
27321 				gchar* _tmp591_;
27322 				gboolean _tmp592_;
27323 				_tmp178_ = vala_expression_get_symbol_reference ((ValaExpression*) expr);
27324 				_tmp179_ = _tmp178_;
27325 				_tmp180_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp179_, VALA_TYPE_METHOD, ValaMethod));
27326 				m = _tmp180_;
27327 				_tmp181_ = m;
27328 				_tmp182_ = vala_callable_get_parameters ((ValaCallable*) _tmp181_);
27329 				_tmp183_ = _vala_iterable_ref0 (_tmp182_);
27330 				params = _tmp183_;
27331 				async_call = NULL;
27332 				finish_call = NULL;
27333 				_tmp184_ = m;
27334 				_tmp185_ = self->cfile;
27335 				vala_ccode_base_module_generate_method_declaration (self, _tmp184_, _tmp185_);
27336 				_tmp186_ = vala_object_creation_expression_get_type_reference (expr);
27337 				_tmp187_ = _tmp186_;
27338 				_tmp188_ = vala_data_type_get_type_symbol (_tmp187_);
27339 				_tmp189_ = _tmp188_;
27340 				cl = G_TYPE_CHECK_INSTANCE_TYPE (_tmp189_, VALA_TYPE_CLASS) ? ((ValaClass*) _tmp189_) : NULL;
27341 				_tmp190_ = m;
27342 				if (!vala_get_ccode_has_new_function (_tmp190_)) {
27343 					ValaMethod* _tmp191_;
27344 					gchar* _tmp192_;
27345 					gchar* _tmp193_;
27346 					ValaCCodeIdentifier* _tmp194_;
27347 					ValaCCodeIdentifier* _tmp195_;
27348 					ValaCCodeFunctionCall* _tmp196_;
27349 					ValaCCodeFunctionCall* _tmp197_;
27350 					ValaClass* _tmp198_;
27351 					gchar* _tmp199_;
27352 					gchar* _tmp200_;
27353 					ValaCCodeIdentifier* _tmp201_;
27354 					ValaCCodeIdentifier* _tmp202_;
27355 					_tmp191_ = m;
27356 					_tmp192_ = vala_get_ccode_real_name ((ValaSymbol*) _tmp191_);
27357 					_tmp193_ = _tmp192_;
27358 					_tmp194_ = vala_ccode_identifier_new (_tmp193_);
27359 					_tmp195_ = _tmp194_;
27360 					_tmp196_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp195_);
27361 					_vala_ccode_node_unref0 (creation_call);
27362 					creation_call = _tmp196_;
27363 					_vala_ccode_node_unref0 (_tmp195_);
27364 					_g_free0 (_tmp193_);
27365 					_tmp197_ = creation_call;
27366 					_tmp198_ = cl;
27367 					_tmp199_ = vala_get_ccode_type_id ((ValaCodeNode*) _tmp198_);
27368 					_tmp200_ = _tmp199_;
27369 					_tmp201_ = vala_ccode_identifier_new (_tmp200_);
27370 					_tmp202_ = _tmp201_;
27371 					vala_ccode_function_call_add_argument (_tmp197_, (ValaCCodeExpression*) _tmp202_);
27372 					_vala_ccode_node_unref0 (_tmp202_);
27373 					_g_free0 (_tmp200_);
27374 				} else {
27375 					ValaMethod* _tmp203_;
27376 					gchar* _tmp204_;
27377 					gchar* _tmp205_;
27378 					ValaCCodeIdentifier* _tmp206_;
27379 					ValaCCodeIdentifier* _tmp207_;
27380 					ValaCCodeFunctionCall* _tmp208_;
27381 					_tmp203_ = m;
27382 					_tmp204_ = vala_get_ccode_name ((ValaCodeNode*) _tmp203_);
27383 					_tmp205_ = _tmp204_;
27384 					_tmp206_ = vala_ccode_identifier_new (_tmp205_);
27385 					_tmp207_ = _tmp206_;
27386 					_tmp208_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp207_);
27387 					_vala_ccode_node_unref0 (creation_call);
27388 					creation_call = _tmp208_;
27389 					_vala_ccode_node_unref0 (_tmp207_);
27390 					_g_free0 (_tmp205_);
27391 				}
27392 				_tmp211_ = st;
27393 				if (_tmp211_ != NULL) {
27394 					ValaStruct* _tmp212_;
27395 					_tmp212_ = st;
27396 					_tmp210_ = !vala_struct_is_simple_type (_tmp212_);
27397 				} else {
27398 					_tmp210_ = FALSE;
27399 				}
27400 				if (_tmp210_) {
27401 					ValaMethod* _tmp213_;
27402 					_tmp213_ = m;
27403 					_tmp209_ = !(vala_get_ccode_instance_pos ((ValaCodeNode*) _tmp213_) < ((gdouble) 0));
27404 				} else {
27405 					_tmp209_ = FALSE;
27406 				}
27407 				if (_tmp209_) {
27408 					ValaCCodeFunctionCall* _tmp214_;
27409 					ValaCCodeExpression* _tmp215_;
27410 					ValaCCodeUnaryExpression* _tmp216_;
27411 					ValaCCodeUnaryExpression* _tmp217_;
27412 					_tmp214_ = creation_call;
27413 					_tmp215_ = instance;
27414 					_tmp216_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, _tmp215_);
27415 					_tmp217_ = _tmp216_;
27416 					vala_ccode_function_call_add_argument (_tmp214_, (ValaCCodeExpression*) _tmp217_);
27417 					_vala_ccode_node_unref0 (_tmp217_);
27418 				} else {
27419 					gboolean _tmp218_ = FALSE;
27420 					ValaStruct* _tmp219_;
27421 					_tmp219_ = st;
27422 					if (_tmp219_ != NULL) {
27423 						ValaStruct* _tmp220_;
27424 						gchar* _tmp221_;
27425 						gchar* _tmp222_;
27426 						_tmp220_ = st;
27427 						_tmp221_ = vala_get_ccode_name ((ValaCodeNode*) _tmp220_);
27428 						_tmp222_ = _tmp221_;
27429 						_tmp218_ = g_strcmp0 (_tmp222_, "va_list") == 0;
27430 						_g_free0 (_tmp222_);
27431 					} else {
27432 						_tmp218_ = FALSE;
27433 					}
27434 					if (_tmp218_) {
27435 						ValaCCodeFunctionCall* _tmp223_;
27436 						ValaCCodeExpression* _tmp224_;
27437 						ValaMethod* _tmp225_;
27438 						gchar* _tmp226_;
27439 						gchar* _tmp227_;
27440 						gboolean _tmp228_;
27441 						_tmp223_ = creation_call;
27442 						_tmp224_ = instance;
27443 						vala_ccode_function_call_add_argument (_tmp223_, _tmp224_);
27444 						_tmp225_ = m;
27445 						_tmp226_ = vala_get_ccode_name ((ValaCodeNode*) _tmp225_);
27446 						_tmp227_ = _tmp226_;
27447 						_tmp228_ = g_strcmp0 (_tmp227_, "va_start") == 0;
27448 						_g_free0 (_tmp227_);
27449 						if (_tmp228_) {
27450 							gboolean _tmp229_;
27451 							gboolean _tmp230_;
27452 							_tmp229_ = vala_ccode_base_module_get_in_creation_method (self);
27453 							_tmp230_ = _tmp229_;
27454 							if (_tmp230_) {
27455 								ValaCCodeIdentifier* _tmp231_;
27456 								ValaCCodeIdentifier* _tmp232_;
27457 								ValaCCodeFunctionCall* _tmp233_;
27458 								ValaCCodeFunctionCall* _tmp234_;
27459 								ValaCCodeExpression* _tmp235_;
27460 								ValaCCodeFunctionCall* _tmp236_;
27461 								ValaCCodeIdentifier* _tmp237_;
27462 								ValaCCodeIdentifier* _tmp238_;
27463 								_tmp231_ = vala_ccode_identifier_new ("va_copy");
27464 								_tmp232_ = _tmp231_;
27465 								_tmp233_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp232_);
27466 								_vala_ccode_node_unref0 (creation_call);
27467 								creation_call = _tmp233_;
27468 								_vala_ccode_node_unref0 (_tmp232_);
27469 								_tmp234_ = creation_call;
27470 								_tmp235_ = instance;
27471 								vala_ccode_function_call_add_argument (_tmp234_, _tmp235_);
27472 								_tmp236_ = creation_call;
27473 								_tmp237_ = vala_ccode_identifier_new ("_vala_va_list");
27474 								_tmp238_ = _tmp237_;
27475 								vala_ccode_function_call_add_argument (_tmp236_, (ValaCCodeExpression*) _tmp238_);
27476 								_vala_ccode_node_unref0 (_tmp238_);
27477 							} else {
27478 								ValaParameter* last_param = NULL;
27479 								gint nParams = 0;
27480 								ValaCCodeFunction* _tmp259_;
27481 								ValaCCodeFunction* _tmp260_;
27482 								gboolean _tmp261_ = FALSE;
27483 								last_param = NULL;
27484 								{
27485 									ValaList* _param_list = NULL;
27486 									ValaMethod* _tmp239_;
27487 									ValaMethod* _tmp240_;
27488 									ValaList* _tmp241_;
27489 									ValaList* _tmp242_;
27490 									gint _param_size = 0;
27491 									ValaList* _tmp243_;
27492 									gint _tmp244_;
27493 									gint _tmp245_;
27494 									gint _param_index = 0;
27495 									_tmp239_ = vala_ccode_base_module_get_current_method (self);
27496 									_tmp240_ = _tmp239_;
27497 									_tmp241_ = vala_callable_get_parameters ((ValaCallable*) _tmp240_);
27498 									_tmp242_ = _vala_iterable_ref0 (_tmp241_);
27499 									_param_list = _tmp242_;
27500 									_tmp243_ = _param_list;
27501 									_tmp244_ = vala_collection_get_size ((ValaCollection*) _tmp243_);
27502 									_tmp245_ = _tmp244_;
27503 									_param_size = _tmp245_;
27504 									_param_index = -1;
27505 									while (TRUE) {
27506 										gint _tmp246_;
27507 										gint _tmp247_;
27508 										ValaParameter* param = NULL;
27509 										ValaList* _tmp248_;
27510 										gpointer _tmp249_;
27511 										gboolean _tmp250_ = FALSE;
27512 										ValaParameter* _tmp251_;
27513 										gboolean _tmp252_;
27514 										gboolean _tmp253_;
27515 										ValaParameter* _tmp257_;
27516 										ValaParameter* _tmp258_;
27517 										_param_index = _param_index + 1;
27518 										_tmp246_ = _param_index;
27519 										_tmp247_ = _param_size;
27520 										if (!(_tmp246_ < _tmp247_)) {
27521 											break;
27522 										}
27523 										_tmp248_ = _param_list;
27524 										_tmp249_ = vala_list_get (_tmp248_, _param_index);
27525 										param = (ValaParameter*) _tmp249_;
27526 										_tmp251_ = param;
27527 										_tmp252_ = vala_parameter_get_ellipsis (_tmp251_);
27528 										_tmp253_ = _tmp252_;
27529 										if (_tmp253_) {
27530 											_tmp250_ = TRUE;
27531 										} else {
27532 											ValaParameter* _tmp254_;
27533 											gboolean _tmp255_;
27534 											gboolean _tmp256_;
27535 											_tmp254_ = param;
27536 											_tmp255_ = vala_parameter_get_params_array (_tmp254_);
27537 											_tmp256_ = _tmp255_;
27538 											_tmp250_ = _tmp256_;
27539 										}
27540 										if (_tmp250_) {
27541 											_vala_code_node_unref0 (param);
27542 											break;
27543 										}
27544 										_tmp257_ = param;
27545 										_tmp258_ = _vala_code_node_ref0 (_tmp257_);
27546 										_vala_code_node_unref0 (last_param);
27547 										last_param = _tmp258_;
27548 										_vala_code_node_unref0 (param);
27549 									}
27550 									_vala_iterable_unref0 (_param_list);
27551 								}
27552 								_tmp259_ = vala_ccode_base_module_get_ccode (self);
27553 								_tmp260_ = _tmp259_;
27554 								nParams = vala_ccode_function_get_parameter_count (_tmp260_);
27555 								if (nParams == 0) {
27556 									_tmp261_ = TRUE;
27557 								} else {
27558 									ValaCCodeFunction* _tmp262_;
27559 									ValaCCodeFunction* _tmp263_;
27560 									ValaCCodeParameter* _tmp264_;
27561 									ValaCCodeParameter* _tmp265_;
27562 									gboolean _tmp266_;
27563 									gboolean _tmp267_;
27564 									_tmp262_ = vala_ccode_base_module_get_ccode (self);
27565 									_tmp263_ = _tmp262_;
27566 									_tmp264_ = vala_ccode_function_get_parameter (_tmp263_, nParams - 1);
27567 									_tmp265_ = _tmp264_;
27568 									_tmp266_ = vala_ccode_parameter_get_ellipsis (_tmp265_);
27569 									_tmp267_ = _tmp266_;
27570 									_tmp261_ = !_tmp267_;
27571 									_vala_ccode_node_unref0 (_tmp265_);
27572 								}
27573 								if (_tmp261_) {
27574 									ValaSourceReference* _tmp268_;
27575 									ValaSourceReference* _tmp269_;
27576 									_tmp268_ = vala_code_node_get_source_reference ((ValaCodeNode*) expr);
27577 									_tmp269_ = _tmp268_;
27578 									vala_report_error (_tmp269_, "`va_list' used in method with fixed args");
27579 								} else {
27580 									if (nParams == 1) {
27581 										ValaSourceReference* _tmp270_;
27582 										ValaSourceReference* _tmp271_;
27583 										_tmp270_ = vala_code_node_get_source_reference ((ValaCodeNode*) expr);
27584 										_tmp271_ = _tmp270_;
27585 										vala_report_error (_tmp271_, "`va_list' used in method without parameter");
27586 									} else {
27587 										ValaCCodeFunctionCall* _tmp272_;
27588 										ValaCCodeFunction* _tmp273_;
27589 										ValaCCodeFunction* _tmp274_;
27590 										ValaCCodeParameter* _tmp275_;
27591 										ValaCCodeParameter* _tmp276_;
27592 										const gchar* _tmp277_;
27593 										const gchar* _tmp278_;
27594 										ValaCCodeIdentifier* _tmp279_;
27595 										ValaCCodeIdentifier* _tmp280_;
27596 										_tmp272_ = creation_call;
27597 										_tmp273_ = vala_ccode_base_module_get_ccode (self);
27598 										_tmp274_ = _tmp273_;
27599 										_tmp275_ = vala_ccode_function_get_parameter (_tmp274_, nParams - 2);
27600 										_tmp276_ = _tmp275_;
27601 										_tmp277_ = vala_ccode_parameter_get_name (_tmp276_);
27602 										_tmp278_ = _tmp277_;
27603 										_tmp279_ = vala_ccode_identifier_new (_tmp278_);
27604 										_tmp280_ = _tmp279_;
27605 										vala_ccode_function_call_add_argument (_tmp272_, (ValaCCodeExpression*) _tmp280_);
27606 										_vala_ccode_node_unref0 (_tmp280_);
27607 										_vala_ccode_node_unref0 (_tmp276_);
27608 									}
27609 								}
27610 								_vala_code_node_unref0 (last_param);
27611 							}
27612 						}
27613 					}
27614 				}
27615 				_tmp281_ = vala_object_creation_expression_get_type_reference (expr);
27616 				_tmp282_ = _tmp281_;
27617 				_tmp283_ = self->cfile;
27618 				vala_ccode_base_module_generate_type_declaration (self, _tmp282_, _tmp283_);
27619 				_tmp284_ = g_direct_hash;
27620 				_tmp285_ = g_direct_equal;
27621 				_tmp286_ = g_direct_equal;
27622 				_tmp287_ = vala_hash_map_new (G_TYPE_INT, NULL, NULL, VALA_TYPE_CCODE_EXPRESSION, (GBoxedCopyFunc) vala_ccode_node_ref, (GDestroyNotify) vala_ccode_node_unref, _tmp284_, _tmp285_, _tmp286_);
27623 				in_arg_map = _tmp287_;
27624 				_tmp288_ = in_arg_map;
27625 				_tmp289_ = _vala_map_ref0 (_tmp288_);
27626 				out_arg_map = _tmp289_;
27627 				_tmp291_ = m;
27628 				if (_tmp291_ != NULL) {
27629 					ValaMethod* _tmp292_;
27630 					gboolean _tmp293_;
27631 					gboolean _tmp294_;
27632 					_tmp292_ = m;
27633 					_tmp293_ = vala_method_get_coroutine (_tmp292_);
27634 					_tmp294_ = _tmp293_;
27635 					_tmp290_ = _tmp294_;
27636 				} else {
27637 					_tmp290_ = FALSE;
27638 				}
27639 				if (_tmp290_) {
27640 					ValaMethod* _tmp295_;
27641 					gchar* _tmp296_;
27642 					gchar* _tmp297_;
27643 					ValaCCodeIdentifier* _tmp298_;
27644 					ValaCCodeIdentifier* _tmp299_;
27645 					ValaCCodeFunctionCall* _tmp300_;
27646 					ValaMethod* _tmp301_;
27647 					gchar* _tmp302_;
27648 					gchar* _tmp303_;
27649 					ValaCCodeIdentifier* _tmp304_;
27650 					ValaCCodeIdentifier* _tmp305_;
27651 					ValaCCodeFunctionCall* _tmp306_;
27652 					ValaCCodeFunctionCall* _tmp307_;
27653 					ValaCCodeFunctionCall* _tmp308_;
27654 					GHashFunc _tmp309_;
27655 					GEqualFunc _tmp310_;
27656 					GEqualFunc _tmp311_;
27657 					ValaHashMap* _tmp312_;
27658 					ValaHashMap* _tmp313_;
27659 					ValaMethod* _tmp314_;
27660 					ValaCCodeIdentifier* _tmp315_;
27661 					ValaCCodeIdentifier* _tmp316_;
27662 					ValaCCodeMemberAccess* _tmp317_;
27663 					ValaCCodeMemberAccess* _tmp318_;
27664 					_tmp295_ = m;
27665 					_tmp296_ = vala_get_ccode_name ((ValaCodeNode*) _tmp295_);
27666 					_tmp297_ = _tmp296_;
27667 					_tmp298_ = vala_ccode_identifier_new (_tmp297_);
27668 					_tmp299_ = _tmp298_;
27669 					_tmp300_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp299_);
27670 					_vala_ccode_node_unref0 (async_call);
27671 					async_call = _tmp300_;
27672 					_vala_ccode_node_unref0 (_tmp299_);
27673 					_g_free0 (_tmp297_);
27674 					_tmp301_ = m;
27675 					_tmp302_ = vala_get_ccode_finish_name (_tmp301_);
27676 					_tmp303_ = _tmp302_;
27677 					_tmp304_ = vala_ccode_identifier_new (_tmp303_);
27678 					_tmp305_ = _tmp304_;
27679 					_tmp306_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp305_);
27680 					_vala_ccode_node_unref0 (finish_call);
27681 					finish_call = _tmp306_;
27682 					_vala_ccode_node_unref0 (_tmp305_);
27683 					_g_free0 (_tmp303_);
27684 					_tmp307_ = finish_call;
27685 					_tmp308_ = _vala_ccode_node_ref0 (_tmp307_);
27686 					_vala_ccode_node_unref0 (creation_call);
27687 					creation_call = _tmp308_;
27688 					_tmp309_ = g_direct_hash;
27689 					_tmp310_ = g_direct_equal;
27690 					_tmp311_ = g_direct_equal;
27691 					_tmp312_ = vala_hash_map_new (G_TYPE_INT, NULL, NULL, VALA_TYPE_CCODE_EXPRESSION, (GBoxedCopyFunc) vala_ccode_node_ref, (GDestroyNotify) vala_ccode_node_unref, _tmp309_, _tmp310_, _tmp311_);
27692 					_vala_map_unref0 (out_arg_map);
27693 					out_arg_map = _tmp312_;
27694 					_tmp313_ = out_arg_map;
27695 					_tmp314_ = m;
27696 					_tmp315_ = vala_ccode_identifier_new ("_data_");
27697 					_tmp316_ = _tmp315_;
27698 					_tmp317_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) _tmp316_, "_res_");
27699 					_tmp318_ = _tmp317_;
27700 					vala_map_set ((ValaMap*) _tmp313_, (gpointer) ((gintptr) vala_ccode_base_module_get_param_pos (self, vala_get_ccode_async_result_pos (_tmp314_), FALSE)), (ValaCCodeExpression*) _tmp318_);
27701 					_vala_ccode_node_unref0 (_tmp318_);
27702 					_vala_ccode_node_unref0 (_tmp316_);
27703 				}
27704 				_tmp320_ = cl;
27705 				if (_tmp320_ != NULL) {
27706 					ValaClass* _tmp321_;
27707 					gboolean _tmp322_;
27708 					gboolean _tmp323_;
27709 					_tmp321_ = cl;
27710 					_tmp322_ = vala_class_get_is_compact (_tmp321_);
27711 					_tmp323_ = _tmp322_;
27712 					_tmp319_ = !_tmp323_;
27713 				} else {
27714 					_tmp319_ = FALSE;
27715 				}
27716 				if (_tmp319_) {
27717 					ValaHashMap* _tmp324_;
27718 					ValaDataType* _tmp325_;
27719 					ValaDataType* _tmp326_;
27720 					ValaList* _tmp327_;
27721 					_tmp324_ = in_arg_map;
27722 					_tmp325_ = vala_object_creation_expression_get_type_reference (expr);
27723 					_tmp326_ = _tmp325_;
27724 					_tmp327_ = vala_data_type_get_type_arguments (_tmp326_);
27725 					vala_ccode_base_module_add_generic_type_arguments (self, (ValaMap*) _tmp324_, _tmp327_, (ValaCodeNode*) expr, FALSE, NULL);
27726 				} else {
27727 					gboolean _tmp328_ = FALSE;
27728 					ValaClass* _tmp329_;
27729 					_tmp329_ = cl;
27730 					if (_tmp329_ != NULL) {
27731 						ValaMethod* _tmp330_;
27732 						_tmp330_ = m;
27733 						_tmp328_ = vala_get_ccode_simple_generics (_tmp330_);
27734 					} else {
27735 						_tmp328_ = FALSE;
27736 					}
27737 					if (_tmp328_) {
27738 						gint type_param_index = 0;
27739 						type_param_index = 0;
27740 						{
27741 							ValaList* _type_arg_list = NULL;
27742 							ValaDataType* _tmp331_;
27743 							ValaDataType* _tmp332_;
27744 							ValaList* _tmp333_;
27745 							ValaList* _tmp334_;
27746 							gint _type_arg_size = 0;
27747 							ValaList* _tmp335_;
27748 							gint _tmp336_;
27749 							gint _tmp337_;
27750 							gint _type_arg_index = 0;
27751 							_tmp331_ = vala_object_creation_expression_get_type_reference (expr);
27752 							_tmp332_ = _tmp331_;
27753 							_tmp333_ = vala_data_type_get_type_arguments (_tmp332_);
27754 							_tmp334_ = _vala_iterable_ref0 (_tmp333_);
27755 							_type_arg_list = _tmp334_;
27756 							_tmp335_ = _type_arg_list;
27757 							_tmp336_ = vala_collection_get_size ((ValaCollection*) _tmp335_);
27758 							_tmp337_ = _tmp336_;
27759 							_type_arg_size = _tmp337_;
27760 							_type_arg_index = -1;
27761 							while (TRUE) {
27762 								gint _tmp338_;
27763 								gint _tmp339_;
27764 								ValaDataType* type_arg = NULL;
27765 								ValaList* _tmp340_;
27766 								gpointer _tmp341_;
27767 								ValaDataType* _tmp342_;
27768 								gint _tmp350_;
27769 								_type_arg_index = _type_arg_index + 1;
27770 								_tmp338_ = _type_arg_index;
27771 								_tmp339_ = _type_arg_size;
27772 								if (!(_tmp338_ < _tmp339_)) {
27773 									break;
27774 								}
27775 								_tmp340_ = _type_arg_list;
27776 								_tmp341_ = vala_list_get (_tmp340_, _type_arg_index);
27777 								type_arg = (ValaDataType*) _tmp341_;
27778 								_tmp342_ = type_arg;
27779 								if (vala_ccode_base_module_requires_copy (_tmp342_)) {
27780 									ValaHashMap* _tmp343_;
27781 									ValaDataType* _tmp344_;
27782 									ValaCCodeExpression* _tmp345_;
27783 									ValaCCodeExpression* _tmp346_;
27784 									_tmp343_ = in_arg_map;
27785 									_tmp344_ = type_arg;
27786 									_tmp345_ = vala_ccode_base_module_get_destroy0_func_expression (self, _tmp344_, FALSE);
27787 									_tmp346_ = _tmp345_;
27788 									vala_map_set ((ValaMap*) _tmp343_, (gpointer) ((gintptr) vala_ccode_base_module_get_param_pos (self, (-1 + (0.1 * type_param_index)) + 0.03, FALSE)), _tmp346_);
27789 									_vala_ccode_node_unref0 (_tmp346_);
27790 								} else {
27791 									ValaHashMap* _tmp347_;
27792 									ValaCCodeConstant* _tmp348_;
27793 									ValaCCodeConstant* _tmp349_;
27794 									_tmp347_ = in_arg_map;
27795 									_tmp348_ = vala_ccode_constant_new ("NULL");
27796 									_tmp349_ = _tmp348_;
27797 									vala_map_set ((ValaMap*) _tmp347_, (gpointer) ((gintptr) vala_ccode_base_module_get_param_pos (self, (-1 + (0.1 * type_param_index)) + 0.03, FALSE)), (ValaCCodeExpression*) _tmp349_);
27798 									_vala_ccode_node_unref0 (_tmp349_);
27799 								}
27800 								_tmp350_ = type_param_index;
27801 								type_param_index = _tmp350_ + 1;
27802 								_vala_code_node_unref0 (type_arg);
27803 							}
27804 							_vala_iterable_unref0 (_type_arg_list);
27805 						}
27806 					}
27807 				}
27808 				ellipsis = FALSE;
27809 				i = 1;
27810 				_tmp351_ = params;
27811 				_tmp352_ = vala_iterable_iterator ((ValaIterable*) _tmp351_);
27812 				params_it = _tmp352_;
27813 				{
27814 					ValaList* _arg_list = NULL;
27815 					ValaList* _tmp353_;
27816 					ValaList* _tmp354_;
27817 					gint _arg_size = 0;
27818 					ValaList* _tmp355_;
27819 					gint _tmp356_;
27820 					gint _tmp357_;
27821 					gint _arg_index = 0;
27822 					_tmp353_ = vala_object_creation_expression_get_argument_list (expr);
27823 					_tmp354_ = _vala_iterable_ref0 (_tmp353_);
27824 					_arg_list = _tmp354_;
27825 					_tmp355_ = _arg_list;
27826 					_tmp356_ = vala_collection_get_size ((ValaCollection*) _tmp355_);
27827 					_tmp357_ = _tmp356_;
27828 					_arg_size = _tmp357_;
27829 					_arg_index = -1;
27830 					while (TRUE) {
27831 						gint _tmp358_;
27832 						gint _tmp359_;
27833 						ValaExpression* arg = NULL;
27834 						ValaList* _tmp360_;
27835 						gpointer _tmp361_;
27836 						ValaCCodeExpression* cexpr = NULL;
27837 						ValaExpression* _tmp362_;
27838 						ValaCCodeExpression* _tmp363_;
27839 						ValaCCodeExpression* _tmp364_;
27840 						ValaHashMap* carg_map = NULL;
27841 						ValaHashMap* _tmp365_;
27842 						ValaHashMap* _tmp366_;
27843 						ValaParameter* param = NULL;
27844 						ValaIterator* _tmp367_;
27845 						ValaHashMap* _tmp447_;
27846 						ValaCCodeExpression* _tmp448_;
27847 						gint _tmp449_;
27848 						_arg_index = _arg_index + 1;
27849 						_tmp358_ = _arg_index;
27850 						_tmp359_ = _arg_size;
27851 						if (!(_tmp358_ < _tmp359_)) {
27852 							break;
27853 						}
27854 						_tmp360_ = _arg_list;
27855 						_tmp361_ = vala_list_get (_tmp360_, _arg_index);
27856 						arg = (ValaExpression*) _tmp361_;
27857 						_tmp362_ = arg;
27858 						_tmp363_ = vala_get_cvalue (_tmp362_);
27859 						_tmp364_ = _vala_ccode_node_ref0 (_tmp363_);
27860 						cexpr = _tmp364_;
27861 						_tmp365_ = in_arg_map;
27862 						_tmp366_ = _vala_map_ref0 (_tmp365_);
27863 						carg_map = _tmp366_;
27864 						param = NULL;
27865 						_tmp367_ = params_it;
27866 						if (vala_iterator_next (_tmp367_)) {
27867 							ValaIterator* _tmp368_;
27868 							gpointer _tmp369_;
27869 							gboolean _tmp370_ = FALSE;
27870 							ValaParameter* _tmp371_;
27871 							gboolean _tmp372_;
27872 							gboolean _tmp373_;
27873 							ValaParameter* _tmp443_;
27874 							_tmp368_ = params_it;
27875 							_tmp369_ = vala_iterator_get (_tmp368_);
27876 							_vala_code_node_unref0 (param);
27877 							param = (ValaParameter*) _tmp369_;
27878 							_tmp371_ = param;
27879 							_tmp372_ = vala_parameter_get_ellipsis (_tmp371_);
27880 							_tmp373_ = _tmp372_;
27881 							if (_tmp373_) {
27882 								_tmp370_ = TRUE;
27883 							} else {
27884 								ValaParameter* _tmp374_;
27885 								gboolean _tmp375_;
27886 								gboolean _tmp376_;
27887 								_tmp374_ = param;
27888 								_tmp375_ = vala_parameter_get_params_array (_tmp374_);
27889 								_tmp376_ = _tmp375_;
27890 								_tmp370_ = _tmp376_;
27891 							}
27892 							ellipsis = _tmp370_;
27893 							if (!ellipsis) {
27894 								ValaParameter* _tmp377_;
27895 								ValaParameterDirection _tmp378_;
27896 								ValaParameterDirection _tmp379_;
27897 								gboolean _tmp382_ = FALSE;
27898 								ValaParameter* _tmp383_;
27899 								ValaParameter* _tmp427_;
27900 								ValaExpression* _tmp428_;
27901 								ValaCCodeExpression* _tmp429_;
27902 								ValaCCodeExpression* _tmp430_;
27903 								ValaParameter* _tmp431_;
27904 								gchar* _tmp432_;
27905 								gchar* _tmp433_;
27906 								gboolean _tmp434_;
27907 								_tmp377_ = param;
27908 								_tmp378_ = vala_parameter_get_direction (_tmp377_);
27909 								_tmp379_ = _tmp378_;
27910 								if (_tmp379_ == VALA_PARAMETER_DIRECTION_OUT) {
27911 									ValaHashMap* _tmp380_;
27912 									ValaHashMap* _tmp381_;
27913 									_tmp380_ = out_arg_map;
27914 									_tmp381_ = _vala_map_ref0 (_tmp380_);
27915 									_vala_map_unref0 (carg_map);
27916 									carg_map = _tmp381_;
27917 								}
27918 								_tmp383_ = param;
27919 								if (vala_get_ccode_array_length ((ValaCodeNode*) _tmp383_)) {
27920 									ValaParameter* _tmp384_;
27921 									ValaDataType* _tmp385_;
27922 									ValaDataType* _tmp386_;
27923 									_tmp384_ = param;
27924 									_tmp385_ = vala_variable_get_variable_type ((ValaVariable*) _tmp384_);
27925 									_tmp386_ = _tmp385_;
27926 									_tmp382_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp386_, VALA_TYPE_ARRAY_TYPE);
27927 								} else {
27928 									_tmp382_ = FALSE;
27929 								}
27930 								if (_tmp382_) {
27931 									ValaArrayType* array_type = NULL;
27932 									ValaParameter* _tmp387_;
27933 									ValaDataType* _tmp388_;
27934 									ValaDataType* _tmp389_;
27935 									ValaArrayType* _tmp390_;
27936 									_tmp387_ = param;
27937 									_tmp388_ = vala_variable_get_variable_type ((ValaVariable*) _tmp387_);
27938 									_tmp389_ = _tmp388_;
27939 									_tmp390_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp389_, VALA_TYPE_ARRAY_TYPE, ValaArrayType));
27940 									array_type = _tmp390_;
27941 									{
27942 										gint dim = 0;
27943 										dim = 1;
27944 										{
27945 											gboolean _tmp391_ = FALSE;
27946 											_tmp391_ = TRUE;
27947 											while (TRUE) {
27948 												ValaArrayType* _tmp393_;
27949 												gint _tmp394_;
27950 												gint _tmp395_;
27951 												ValaHashMap* _tmp396_;
27952 												ValaParameter* _tmp397_;
27953 												ValaExpression* _tmp398_;
27954 												ValaCCodeExpression* _tmp399_;
27955 												ValaCCodeExpression* _tmp400_;
27956 												if (!_tmp391_) {
27957 													gint _tmp392_;
27958 													_tmp392_ = dim;
27959 													dim = _tmp392_ + 1;
27960 												}
27961 												_tmp391_ = FALSE;
27962 												_tmp393_ = array_type;
27963 												_tmp394_ = vala_array_type_get_rank (_tmp393_);
27964 												_tmp395_ = _tmp394_;
27965 												if (!(dim <= _tmp395_)) {
27966 													break;
27967 												}
27968 												_tmp396_ = carg_map;
27969 												_tmp397_ = param;
27970 												_tmp398_ = arg;
27971 												_tmp399_ = vala_ccode_base_module_get_array_length_cexpression (self, _tmp398_, dim);
27972 												_tmp400_ = _tmp399_;
27973 												vala_map_set ((ValaMap*) _tmp396_, (gpointer) ((gintptr) vala_ccode_base_module_get_param_pos (self, vala_get_ccode_array_length_pos ((ValaCodeNode*) _tmp397_) + (0.01 * dim), FALSE)), _tmp400_);
27974 												_vala_ccode_node_unref0 (_tmp400_);
27975 											}
27976 										}
27977 									}
27978 									_vala_code_node_unref0 (array_type);
27979 								} else {
27980 									gboolean _tmp401_ = FALSE;
27981 									ValaParameter* _tmp402_;
27982 									_tmp402_ = param;
27983 									if (vala_get_ccode_delegate_target ((ValaCodeNode*) _tmp402_)) {
27984 										ValaParameter* _tmp403_;
27985 										ValaDataType* _tmp404_;
27986 										ValaDataType* _tmp405_;
27987 										_tmp403_ = param;
27988 										_tmp404_ = vala_variable_get_variable_type ((ValaVariable*) _tmp403_);
27989 										_tmp405_ = _tmp404_;
27990 										_tmp401_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp405_, VALA_TYPE_DELEGATE_TYPE);
27991 									} else {
27992 										_tmp401_ = FALSE;
27993 									}
27994 									if (_tmp401_) {
27995 										ValaDelegateType* deleg_type = NULL;
27996 										ValaParameter* _tmp406_;
27997 										ValaDataType* _tmp407_;
27998 										ValaDataType* _tmp408_;
27999 										ValaDelegateType* _tmp409_;
28000 										ValaDelegate* d = NULL;
28001 										ValaDelegateType* _tmp410_;
28002 										ValaDelegate* _tmp411_;
28003 										ValaDelegate* _tmp412_;
28004 										ValaDelegate* _tmp413_;
28005 										ValaDelegate* _tmp414_;
28006 										gboolean _tmp415_;
28007 										gboolean _tmp416_;
28008 										_tmp406_ = param;
28009 										_tmp407_ = vala_variable_get_variable_type ((ValaVariable*) _tmp406_);
28010 										_tmp408_ = _tmp407_;
28011 										_tmp409_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp408_, VALA_TYPE_DELEGATE_TYPE, ValaDelegateType));
28012 										deleg_type = _tmp409_;
28013 										_tmp410_ = deleg_type;
28014 										_tmp411_ = vala_delegate_type_get_delegate_symbol (_tmp410_);
28015 										_tmp412_ = _tmp411_;
28016 										_tmp413_ = _vala_code_node_ref0 (_tmp412_);
28017 										d = _tmp413_;
28018 										_tmp414_ = d;
28019 										_tmp415_ = vala_delegate_get_has_target (_tmp414_);
28020 										_tmp416_ = _tmp415_;
28021 										if (_tmp416_) {
28022 											ValaCCodeExpression* delegate_target_destroy_notify = NULL;
28023 											ValaCCodeExpression* delegate_target = NULL;
28024 											ValaExpression* _tmp417_;
28025 											ValaCCodeExpression* _tmp418_ = NULL;
28026 											ValaCCodeExpression* _tmp419_;
28027 											ValaHashMap* _tmp420_;
28028 											ValaParameter* _tmp421_;
28029 											ValaCCodeExpression* _tmp422_;
28030 											ValaDelegateType* _tmp423_;
28031 											_tmp417_ = arg;
28032 											_tmp419_ = vala_ccode_base_module_get_delegate_target_cexpression (self, _tmp417_, &_tmp418_);
28033 											_vala_ccode_node_unref0 (delegate_target_destroy_notify);
28034 											delegate_target_destroy_notify = _tmp418_;
28035 											delegate_target = _tmp419_;
28036 											_tmp420_ = carg_map;
28037 											_tmp421_ = param;
28038 											_tmp422_ = delegate_target;
28039 											vala_map_set ((ValaMap*) _tmp420_, (gpointer) ((gintptr) vala_ccode_base_module_get_param_pos (self, vala_get_ccode_delegate_target_pos ((ValaCodeNode*) _tmp421_), FALSE)), _tmp422_);
28040 											_tmp423_ = deleg_type;
28041 											if (vala_data_type_is_disposable ((ValaDataType*) _tmp423_)) {
28042 												ValaHashMap* _tmp424_;
28043 												ValaParameter* _tmp425_;
28044 												ValaCCodeExpression* _tmp426_;
28045 												_tmp424_ = carg_map;
28046 												_tmp425_ = param;
28047 												_tmp426_ = delegate_target_destroy_notify;
28048 												vala_map_set ((ValaMap*) _tmp424_, (gpointer) ((gintptr) vala_ccode_base_module_get_param_pos (self, vala_get_ccode_destroy_notify_pos ((ValaCodeNode*) _tmp425_), FALSE)), _tmp426_);
28049 											}
28050 											_vala_ccode_node_unref0 (delegate_target);
28051 											_vala_ccode_node_unref0 (delegate_target_destroy_notify);
28052 										}
28053 										_vala_code_node_unref0 (d);
28054 										_vala_code_node_unref0 (deleg_type);
28055 									}
28056 								}
28057 								_tmp427_ = param;
28058 								_tmp428_ = arg;
28059 								_tmp429_ = cexpr;
28060 								_tmp430_ = vala_ccode_base_module_handle_struct_argument (self, _tmp427_, _tmp428_, _tmp429_);
28061 								_vala_ccode_node_unref0 (cexpr);
28062 								cexpr = _tmp430_;
28063 								_tmp431_ = param;
28064 								_tmp432_ = vala_get_ccode_type ((ValaCodeNode*) _tmp431_);
28065 								_tmp433_ = _tmp432_;
28066 								_tmp434_ = _tmp433_ != NULL;
28067 								_g_free0 (_tmp433_);
28068 								if (_tmp434_) {
28069 									ValaCCodeExpression* _tmp435_;
28070 									ValaParameter* _tmp436_;
28071 									gchar* _tmp437_;
28072 									gchar* _tmp438_;
28073 									ValaCCodeCastExpression* _tmp439_;
28074 									_tmp435_ = cexpr;
28075 									_tmp436_ = param;
28076 									_tmp437_ = vala_get_ccode_type ((ValaCodeNode*) _tmp436_);
28077 									_tmp438_ = _tmp437_;
28078 									_tmp439_ = vala_ccode_cast_expression_new (_tmp435_, _tmp438_);
28079 									_vala_ccode_node_unref0 (cexpr);
28080 									cexpr = (ValaCCodeExpression*) _tmp439_;
28081 									_g_free0 (_tmp438_);
28082 								}
28083 							} else {
28084 								ValaExpression* _tmp440_;
28085 								ValaCCodeExpression* _tmp441_;
28086 								ValaCCodeExpression* _tmp442_;
28087 								_tmp440_ = arg;
28088 								_tmp441_ = cexpr;
28089 								_tmp442_ = vala_ccode_base_module_handle_struct_argument (self, NULL, _tmp440_, _tmp441_);
28090 								_vala_ccode_node_unref0 (cexpr);
28091 								cexpr = _tmp442_;
28092 							}
28093 							_tmp443_ = param;
28094 							arg_pos = vala_ccode_base_module_get_param_pos (self, vala_get_ccode_pos (_tmp443_), ellipsis);
28095 						} else {
28096 							ValaExpression* _tmp444_;
28097 							ValaCCodeExpression* _tmp445_;
28098 							ValaCCodeExpression* _tmp446_;
28099 							_tmp444_ = arg;
28100 							_tmp445_ = cexpr;
28101 							_tmp446_ = vala_ccode_base_module_handle_struct_argument (self, NULL, _tmp444_, _tmp445_);
28102 							_vala_ccode_node_unref0 (cexpr);
28103 							cexpr = _tmp446_;
28104 							arg_pos = vala_ccode_base_module_get_param_pos (self, (gdouble) i, ellipsis);
28105 						}
28106 						_tmp447_ = carg_map;
28107 						_tmp448_ = cexpr;
28108 						vala_map_set ((ValaMap*) _tmp447_, (gpointer) ((gintptr) arg_pos), _tmp448_);
28109 						_tmp449_ = i;
28110 						i = _tmp449_ + 1;
28111 						_vala_code_node_unref0 (param);
28112 						_vala_map_unref0 (carg_map);
28113 						_vala_ccode_node_unref0 (cexpr);
28114 						_vala_code_node_unref0 (arg);
28115 					}
28116 					_vala_iterable_unref0 (_arg_list);
28117 				}
28118 				_tmp450_ = params_it;
28119 				if (vala_iterator_next (_tmp450_)) {
28120 					ValaParameter* param = NULL;
28121 					ValaIterator* _tmp451_;
28122 					gpointer _tmp452_;
28123 					gboolean _tmp453_ = FALSE;
28124 					ValaParameter* _tmp454_;
28125 					gboolean _tmp455_;
28126 					gboolean _tmp456_;
28127 					_tmp451_ = params_it;
28128 					_tmp452_ = vala_iterator_get (_tmp451_);
28129 					param = (ValaParameter*) _tmp452_;
28130 					_tmp454_ = param;
28131 					_tmp455_ = vala_parameter_get_params_array (_tmp454_);
28132 					_tmp456_ = _tmp455_;
28133 					if (_tmp456_) {
28134 						_tmp453_ = TRUE;
28135 					} else {
28136 						ValaParameter* _tmp457_;
28137 						gboolean _tmp458_;
28138 						gboolean _tmp459_;
28139 						_tmp457_ = param;
28140 						_tmp458_ = vala_parameter_get_ellipsis (_tmp457_);
28141 						_tmp459_ = _tmp458_;
28142 						_tmp453_ = _tmp459_;
28143 					}
28144 					_vala_assert (_tmp453_, "param.params_array || param.ellipsis");
28145 					ellipsis = TRUE;
28146 					_vala_code_node_unref0 (param);
28147 				}
28148 				_tmp460_ = vala_code_node_get_tree_can_fail ((ValaCodeNode*) expr);
28149 				_tmp461_ = _tmp460_;
28150 				if (_tmp461_) {
28151 					ValaHashMap* _tmp462_;
28152 					ValaCCodeExpression* _tmp463_;
28153 					ValaCCodeExpression* _tmp464_;
28154 					ValaCCodeUnaryExpression* _tmp465_;
28155 					ValaCCodeUnaryExpression* _tmp466_;
28156 					vala_ccode_base_module_set_current_method_inner_error (self, TRUE);
28157 					_tmp462_ = out_arg_map;
28158 					_tmp463_ = vala_ccode_base_module_get_inner_error_cexpression (self);
28159 					_tmp464_ = _tmp463_;
28160 					_tmp465_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, _tmp464_);
28161 					_tmp466_ = _tmp465_;
28162 					vala_map_set ((ValaMap*) _tmp462_, (gpointer) ((gintptr) vala_ccode_base_module_get_param_pos (self, (gdouble) -1, FALSE)), (ValaCCodeExpression*) _tmp466_);
28163 					_vala_ccode_node_unref0 (_tmp466_);
28164 					_vala_ccode_node_unref0 (_tmp464_);
28165 				}
28166 				if (ellipsis) {
28167 					ValaMethod* _tmp467_;
28168 					_tmp467_ = m;
28169 					if (_tmp467_ == NULL) {
28170 						ValaHashMap* _tmp468_;
28171 						ValaCCodeConstant* _tmp469_;
28172 						ValaCCodeConstant* _tmp470_;
28173 						_tmp468_ = in_arg_map;
28174 						_tmp469_ = vala_ccode_constant_new ("NULL");
28175 						_tmp470_ = _tmp469_;
28176 						vala_map_set ((ValaMap*) _tmp468_, (gpointer) ((gintptr) vala_ccode_base_module_get_param_pos (self, (gdouble) -1, TRUE)), (ValaCCodeExpression*) _tmp470_);
28177 						_vala_ccode_node_unref0 (_tmp470_);
28178 					} else {
28179 						gboolean _tmp471_ = FALSE;
28180 						gboolean _tmp472_ = FALSE;
28181 						ValaMethod* _tmp473_;
28182 						gboolean _tmp474_;
28183 						gboolean _tmp475_;
28184 						_tmp473_ = m;
28185 						_tmp474_ = vala_method_get_printf_format (_tmp473_);
28186 						_tmp475_ = _tmp474_;
28187 						if (!_tmp475_) {
28188 							ValaMethod* _tmp476_;
28189 							gboolean _tmp477_;
28190 							gboolean _tmp478_;
28191 							_tmp476_ = m;
28192 							_tmp477_ = vala_method_get_scanf_format (_tmp476_);
28193 							_tmp478_ = _tmp477_;
28194 							_tmp472_ = !_tmp478_;
28195 						} else {
28196 							_tmp472_ = FALSE;
28197 						}
28198 						if (_tmp472_) {
28199 							ValaMethod* _tmp479_;
28200 							gchar* _tmp480_;
28201 							gchar* _tmp481_;
28202 							_tmp479_ = m;
28203 							_tmp480_ = vala_get_ccode_sentinel (_tmp479_);
28204 							_tmp481_ = _tmp480_;
28205 							_tmp471_ = g_strcmp0 (_tmp481_, "") != 0;
28206 							_g_free0 (_tmp481_);
28207 						} else {
28208 							_tmp471_ = FALSE;
28209 						}
28210 						if (_tmp471_) {
28211 							ValaHashMap* _tmp482_;
28212 							ValaMethod* _tmp483_;
28213 							gchar* _tmp484_;
28214 							gchar* _tmp485_;
28215 							ValaCCodeConstant* _tmp486_;
28216 							ValaCCodeConstant* _tmp487_;
28217 							_tmp482_ = in_arg_map;
28218 							_tmp483_ = m;
28219 							_tmp484_ = vala_get_ccode_sentinel (_tmp483_);
28220 							_tmp485_ = _tmp484_;
28221 							_tmp486_ = vala_ccode_constant_new (_tmp485_);
28222 							_tmp487_ = _tmp486_;
28223 							vala_map_set ((ValaMap*) _tmp482_, (gpointer) ((gintptr) vala_ccode_base_module_get_param_pos (self, (gdouble) -1, TRUE)), (ValaCCodeExpression*) _tmp487_);
28224 							_vala_ccode_node_unref0 (_tmp487_);
28225 							_g_free0 (_tmp485_);
28226 						}
28227 					}
28228 				}
28229 				_tmp490_ = st;
28230 				if (_tmp490_ != NULL) {
28231 					ValaStruct* _tmp491_;
28232 					_tmp491_ = st;
28233 					_tmp489_ = !vala_struct_is_simple_type (_tmp491_);
28234 				} else {
28235 					_tmp489_ = FALSE;
28236 				}
28237 				if (_tmp489_) {
28238 					ValaMethod* _tmp492_;
28239 					_tmp492_ = m;
28240 					_tmp488_ = vala_get_ccode_instance_pos ((ValaCodeNode*) _tmp492_) < ((gdouble) 0);
28241 				} else {
28242 					_tmp488_ = FALSE;
28243 				}
28244 				if (_tmp488_) {
28245 					ValaHashMap* _tmp493_;
28246 					ValaCCodeExpression* _tmp494_;
28247 					ValaCCodeUnaryExpression* _tmp495_;
28248 					ValaCCodeUnaryExpression* _tmp496_;
28249 					_tmp493_ = out_arg_map;
28250 					_tmp494_ = instance;
28251 					_tmp495_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, _tmp494_);
28252 					_tmp496_ = _tmp495_;
28253 					vala_map_set ((ValaMap*) _tmp493_, (gpointer) ((gintptr) vala_ccode_base_module_get_param_pos (self, (gdouble) -3, FALSE)), (ValaCCodeExpression*) _tmp496_);
28254 					_vala_ccode_node_unref0 (_tmp496_);
28255 				}
28256 				_tmp498_ = m;
28257 				if (_tmp498_ != NULL) {
28258 					ValaMethod* _tmp499_;
28259 					gboolean _tmp500_;
28260 					gboolean _tmp501_;
28261 					_tmp499_ = m;
28262 					_tmp500_ = vala_method_get_coroutine (_tmp499_);
28263 					_tmp501_ = _tmp500_;
28264 					_tmp497_ = _tmp501_;
28265 				} else {
28266 					_tmp497_ = FALSE;
28267 				}
28268 				if (_tmp497_) {
28269 					gboolean _tmp502_;
28270 					gboolean _tmp503_;
28271 					_tmp502_ = vala_object_creation_expression_get_is_yield_expression (expr);
28272 					_tmp503_ = _tmp502_;
28273 					if (_tmp503_) {
28274 						ValaHashMap* _tmp504_;
28275 						ValaMethod* _tmp505_;
28276 						ValaMethod* _tmp506_;
28277 						gchar* _tmp507_;
28278 						gchar* _tmp508_;
28279 						ValaCCodeIdentifier* _tmp509_;
28280 						ValaCCodeIdentifier* _tmp510_;
28281 						ValaHashMap* _tmp511_;
28282 						ValaCCodeIdentifier* _tmp512_;
28283 						ValaCCodeIdentifier* _tmp513_;
28284 						_tmp504_ = in_arg_map;
28285 						_tmp505_ = vala_ccode_base_module_get_current_method (self);
28286 						_tmp506_ = _tmp505_;
28287 						_tmp507_ = vala_ccode_base_module_generate_ready_function (self, _tmp506_);
28288 						_tmp508_ = _tmp507_;
28289 						_tmp509_ = vala_ccode_identifier_new (_tmp508_);
28290 						_tmp510_ = _tmp509_;
28291 						vala_map_set ((ValaMap*) _tmp504_, (gpointer) ((gintptr) vala_ccode_base_module_get_param_pos (self, (gdouble) -1, FALSE)), (ValaCCodeExpression*) _tmp510_);
28292 						_vala_ccode_node_unref0 (_tmp510_);
28293 						_g_free0 (_tmp508_);
28294 						_tmp511_ = in_arg_map;
28295 						_tmp512_ = vala_ccode_identifier_new ("_data_");
28296 						_tmp513_ = _tmp512_;
28297 						vala_map_set ((ValaMap*) _tmp511_, (gpointer) ((gintptr) vala_ccode_base_module_get_param_pos (self, -0.9, FALSE)), (ValaCCodeExpression*) _tmp513_);
28298 						_vala_ccode_node_unref0 (_tmp513_);
28299 					}
28300 				}
28301 				_tmp516_ = m;
28302 				if (_tmp516_ != NULL) {
28303 					ValaMethod* _tmp517_;
28304 					gboolean _tmp518_;
28305 					gboolean _tmp519_;
28306 					_tmp517_ = m;
28307 					_tmp518_ = vala_method_get_coroutine (_tmp517_);
28308 					_tmp519_ = _tmp518_;
28309 					_tmp515_ = _tmp519_;
28310 				} else {
28311 					_tmp515_ = FALSE;
28312 				}
28313 				if (_tmp515_) {
28314 					ValaMethod* _tmp520_;
28315 					ValaSymbol* _tmp521_;
28316 					ValaSymbol* _tmp522_;
28317 					_tmp520_ = m;
28318 					_tmp521_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp520_);
28319 					_tmp522_ = _tmp521_;
28320 					_tmp514_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp522_, VALA_TYPE_CLASS);
28321 				} else {
28322 					_tmp514_ = FALSE;
28323 				}
28324 				if (_tmp514_) {
28325 					ValaMethod* _tmp523_;
28326 					_tmp523_ = m;
28327 					if (vala_get_ccode_finish_instance (_tmp523_)) {
28328 						ValaCCodeMemberAccess* tmp = NULL;
28329 						ValaCCodeIdentifier* _tmp524_;
28330 						ValaCCodeIdentifier* _tmp525_;
28331 						ValaCCodeMemberAccess* _tmp526_;
28332 						ValaCCodeMemberAccess* _tmp527_;
28333 						ValaHashMap* _tmp528_;
28334 						ValaMethod* _tmp529_;
28335 						ValaCCodeMemberAccess* _tmp530_;
28336 						_tmp524_ = vala_ccode_identifier_new ("_data_");
28337 						_tmp525_ = _tmp524_;
28338 						_tmp526_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) _tmp525_, "_source_object_");
28339 						_tmp527_ = _tmp526_;
28340 						_vala_ccode_node_unref0 (_tmp525_);
28341 						tmp = _tmp527_;
28342 						_tmp528_ = out_arg_map;
28343 						_tmp529_ = m;
28344 						_tmp530_ = tmp;
28345 						vala_map_set ((ValaMap*) _tmp528_, (gpointer) ((gintptr) vala_ccode_base_module_get_param_pos (self, vala_get_ccode_instance_pos ((ValaCodeNode*) _tmp529_), FALSE)), (ValaCCodeExpression*) _tmp530_);
28346 						_vala_ccode_node_unref0 (tmp);
28347 					}
28348 				}
28349 				_tmp531_ = async_call;
28350 				_tmp532_ = creation_call;
28351 				if (_tmp531_ != _tmp532_) {
28352 					last_pos = -1;
28353 					while (TRUE) {
28354 						ValaCCodeFunctionCall* _tmp543_;
28355 						ValaHashMap* _tmp544_;
28356 						gpointer _tmp545_;
28357 						ValaCCodeExpression* _tmp546_;
28358 						min_pos = -1;
28359 						{
28360 							ValaIterator* _pos_it = NULL;
28361 							ValaHashMap* _tmp533_;
28362 							ValaSet* _tmp534_;
28363 							ValaSet* _tmp535_;
28364 							ValaIterator* _tmp536_;
28365 							ValaIterator* _tmp537_;
28366 							_tmp533_ = out_arg_map;
28367 							_tmp534_ = vala_map_get_keys ((ValaMap*) _tmp533_);
28368 							_tmp535_ = _tmp534_;
28369 							_tmp536_ = vala_iterable_iterator ((ValaIterable*) _tmp535_);
28370 							_tmp537_ = _tmp536_;
28371 							_vala_iterable_unref0 (_tmp535_);
28372 							_pos_it = _tmp537_;
28373 							while (TRUE) {
28374 								ValaIterator* _tmp538_;
28375 								gint pos = 0;
28376 								ValaIterator* _tmp539_;
28377 								gpointer _tmp540_;
28378 								gboolean _tmp541_ = FALSE;
28379 								_tmp538_ = _pos_it;
28380 								if (!vala_iterator_next (_tmp538_)) {
28381 									break;
28382 								}
28383 								_tmp539_ = _pos_it;
28384 								_tmp540_ = vala_iterator_get (_tmp539_);
28385 								pos = (gint) ((gintptr) _tmp540_);
28386 								if (pos > last_pos) {
28387 									gboolean _tmp542_ = FALSE;
28388 									if (min_pos == -1) {
28389 										_tmp542_ = TRUE;
28390 									} else {
28391 										_tmp542_ = pos < min_pos;
28392 									}
28393 									_tmp541_ = _tmp542_;
28394 								} else {
28395 									_tmp541_ = FALSE;
28396 								}
28397 								if (_tmp541_) {
28398 									min_pos = pos;
28399 								}
28400 							}
28401 							_vala_iterator_unref0 (_pos_it);
28402 						}
28403 						if (min_pos == -1) {
28404 							break;
28405 						}
28406 						_tmp543_ = creation_call;
28407 						_tmp544_ = out_arg_map;
28408 						_tmp545_ = vala_map_get ((ValaMap*) _tmp544_, (gpointer) ((gintptr) min_pos));
28409 						_tmp546_ = (ValaCCodeExpression*) _tmp545_;
28410 						vala_ccode_function_call_add_argument (_tmp543_, _tmp546_);
28411 						_vala_ccode_node_unref0 (_tmp546_);
28412 						last_pos = min_pos;
28413 					}
28414 				}
28415 				_tmp547_ = async_call;
28416 				if (_tmp547_ != NULL) {
28417 					last_pos = -1;
28418 					while (TRUE) {
28419 						ValaCCodeFunctionCall* _tmp558_;
28420 						ValaHashMap* _tmp559_;
28421 						gpointer _tmp560_;
28422 						ValaCCodeExpression* _tmp561_;
28423 						min_pos = -1;
28424 						{
28425 							ValaIterator* _pos_it = NULL;
28426 							ValaHashMap* _tmp548_;
28427 							ValaSet* _tmp549_;
28428 							ValaSet* _tmp550_;
28429 							ValaIterator* _tmp551_;
28430 							ValaIterator* _tmp552_;
28431 							_tmp548_ = in_arg_map;
28432 							_tmp549_ = vala_map_get_keys ((ValaMap*) _tmp548_);
28433 							_tmp550_ = _tmp549_;
28434 							_tmp551_ = vala_iterable_iterator ((ValaIterable*) _tmp550_);
28435 							_tmp552_ = _tmp551_;
28436 							_vala_iterable_unref0 (_tmp550_);
28437 							_pos_it = _tmp552_;
28438 							while (TRUE) {
28439 								ValaIterator* _tmp553_;
28440 								gint pos = 0;
28441 								ValaIterator* _tmp554_;
28442 								gpointer _tmp555_;
28443 								gboolean _tmp556_ = FALSE;
28444 								_tmp553_ = _pos_it;
28445 								if (!vala_iterator_next (_tmp553_)) {
28446 									break;
28447 								}
28448 								_tmp554_ = _pos_it;
28449 								_tmp555_ = vala_iterator_get (_tmp554_);
28450 								pos = (gint) ((gintptr) _tmp555_);
28451 								if (pos > last_pos) {
28452 									gboolean _tmp557_ = FALSE;
28453 									if (min_pos == -1) {
28454 										_tmp557_ = TRUE;
28455 									} else {
28456 										_tmp557_ = pos < min_pos;
28457 									}
28458 									_tmp556_ = _tmp557_;
28459 								} else {
28460 									_tmp556_ = FALSE;
28461 								}
28462 								if (_tmp556_) {
28463 									min_pos = pos;
28464 								}
28465 							}
28466 							_vala_iterator_unref0 (_pos_it);
28467 						}
28468 						if (min_pos == -1) {
28469 							break;
28470 						}
28471 						_tmp558_ = async_call;
28472 						_tmp559_ = in_arg_map;
28473 						_tmp560_ = vala_map_get ((ValaMap*) _tmp559_, (gpointer) ((gintptr) min_pos));
28474 						_tmp561_ = (ValaCCodeExpression*) _tmp560_;
28475 						vala_ccode_function_call_add_argument (_tmp558_, _tmp561_);
28476 						_vala_ccode_node_unref0 (_tmp561_);
28477 						last_pos = min_pos;
28478 					}
28479 				}
28480 				_tmp562_ = vala_object_creation_expression_get_is_yield_expression (expr);
28481 				_tmp563_ = _tmp562_;
28482 				if (_tmp563_) {
28483 					gint state = 0;
28484 					ValaCCodeBaseModuleEmitContext* _tmp564_;
28485 					gint _tmp565_;
28486 					ValaCCodeFunction* _tmp566_;
28487 					ValaCCodeFunction* _tmp567_;
28488 					ValaCCodeIdentifier* _tmp568_;
28489 					ValaCCodeIdentifier* _tmp569_;
28490 					ValaCCodeMemberAccess* _tmp570_;
28491 					ValaCCodeMemberAccess* _tmp571_;
28492 					gchar* _tmp572_;
28493 					gchar* _tmp573_;
28494 					ValaCCodeConstant* _tmp574_;
28495 					ValaCCodeConstant* _tmp575_;
28496 					ValaCCodeFunction* _tmp576_;
28497 					ValaCCodeFunction* _tmp577_;
28498 					ValaCCodeFunctionCall* _tmp578_;
28499 					ValaCCodeFunction* _tmp579_;
28500 					ValaCCodeFunction* _tmp580_;
28501 					ValaCCodeConstant* _tmp581_;
28502 					ValaCCodeConstant* _tmp582_;
28503 					ValaCCodeFunction* _tmp583_;
28504 					ValaCCodeFunction* _tmp584_;
28505 					gchar* _tmp585_;
28506 					gchar* _tmp586_;
28507 					_tmp564_ = self->emit_context;
28508 					_tmp565_ = _tmp564_->next_coroutine_state;
28509 					_tmp564_->next_coroutine_state = _tmp565_ + 1;
28510 					state = _tmp565_;
28511 					_tmp566_ = vala_ccode_base_module_get_ccode (self);
28512 					_tmp567_ = _tmp566_;
28513 					_tmp568_ = vala_ccode_identifier_new ("_data_");
28514 					_tmp569_ = _tmp568_;
28515 					_tmp570_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) _tmp569_, "_state_");
28516 					_tmp571_ = _tmp570_;
28517 					_tmp572_ = g_strdup_printf ("%i", state);
28518 					_tmp573_ = _tmp572_;
28519 					_tmp574_ = vala_ccode_constant_new (_tmp573_);
28520 					_tmp575_ = _tmp574_;
28521 					vala_ccode_function_add_assignment (_tmp567_, (ValaCCodeExpression*) _tmp571_, (ValaCCodeExpression*) _tmp575_);
28522 					_vala_ccode_node_unref0 (_tmp575_);
28523 					_g_free0 (_tmp573_);
28524 					_vala_ccode_node_unref0 (_tmp571_);
28525 					_vala_ccode_node_unref0 (_tmp569_);
28526 					_tmp576_ = vala_ccode_base_module_get_ccode (self);
28527 					_tmp577_ = _tmp576_;
28528 					_tmp578_ = async_call;
28529 					vala_ccode_function_add_expression (_tmp577_, (ValaCCodeExpression*) _tmp578_);
28530 					_tmp579_ = vala_ccode_base_module_get_ccode (self);
28531 					_tmp580_ = _tmp579_;
28532 					_tmp581_ = vala_ccode_constant_new ("FALSE");
28533 					_tmp582_ = _tmp581_;
28534 					vala_ccode_function_add_return (_tmp580_, (ValaCCodeExpression*) _tmp582_);
28535 					_vala_ccode_node_unref0 (_tmp582_);
28536 					_tmp583_ = vala_ccode_base_module_get_ccode (self);
28537 					_tmp584_ = _tmp583_;
28538 					_tmp585_ = g_strdup_printf ("_state_%d", state);
28539 					_tmp586_ = _tmp585_;
28540 					vala_ccode_function_add_label (_tmp584_, _tmp586_);
28541 					_g_free0 (_tmp586_);
28542 				}
28543 				_tmp587_ = creation_call;
28544 				_tmp588_ = _vala_ccode_node_ref0 ((ValaCCodeExpression*) _tmp587_);
28545 				_vala_ccode_node_unref0 (creation_expr);
28546 				creation_expr = _tmp588_;
28547 				_tmp589_ = m;
28548 				_tmp590_ = vala_get_ccode_type ((ValaCodeNode*) _tmp589_);
28549 				_tmp591_ = _tmp590_;
28550 				_tmp592_ = _tmp591_ != NULL;
28551 				_g_free0 (_tmp591_);
28552 				if (_tmp592_) {
28553 					ValaCCodeExpression* _tmp593_;
28554 					ValaDataType* _tmp594_;
28555 					ValaDataType* _tmp595_;
28556 					gchar* _tmp596_;
28557 					gchar* _tmp597_;
28558 					ValaCCodeCastExpression* _tmp598_;
28559 					_tmp593_ = creation_expr;
28560 					_tmp594_ = vala_object_creation_expression_get_type_reference (expr);
28561 					_tmp595_ = _tmp594_;
28562 					_tmp596_ = vala_get_ccode_name ((ValaCodeNode*) _tmp595_);
28563 					_tmp597_ = _tmp596_;
28564 					_tmp598_ = vala_ccode_cast_expression_new (_tmp593_, _tmp597_);
28565 					_vala_ccode_node_unref0 (creation_expr);
28566 					creation_expr = (ValaCCodeExpression*) _tmp598_;
28567 					_g_free0 (_tmp597_);
28568 				}
28569 				_vala_iterator_unref0 (params_it);
28570 				_vala_map_unref0 (out_arg_map);
28571 				_vala_map_unref0 (in_arg_map);
28572 				_vala_ccode_node_unref0 (finish_call);
28573 				_vala_ccode_node_unref0 (async_call);
28574 				_vala_ccode_node_unref0 (creation_call);
28575 				_vala_iterable_unref0 (params);
28576 				_vala_code_node_unref0 (m);
28577 			} else {
28578 				ValaSymbol* _tmp599_;
28579 				ValaSymbol* _tmp600_;
28580 				_tmp599_ = vala_expression_get_symbol_reference ((ValaExpression*) expr);
28581 				_tmp600_ = _tmp599_;
28582 				if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp600_, VALA_TYPE_ERROR_CODE)) {
28583 					ValaErrorCode* ecode = NULL;
28584 					ValaSymbol* _tmp601_;
28585 					ValaSymbol* _tmp602_;
28586 					ValaErrorCode* _tmp603_;
28587 					ValaErrorDomain* edomain = NULL;
28588 					ValaErrorCode* _tmp604_;
28589 					ValaSymbol* _tmp605_;
28590 					ValaSymbol* _tmp606_;
28591 					ValaErrorDomain* _tmp607_;
28592 					ValaCCodeFunctionCall* creation_call = NULL;
28593 					ValaErrorDomain* _tmp608_;
28594 					ValaCCodeFile* _tmp609_;
28595 					ValaList* _tmp610_;
28596 					gint _tmp611_;
28597 					gint _tmp612_;
28598 					ValaCCodeFunctionCall* _tmp619_;
28599 					ValaErrorDomain* _tmp620_;
28600 					gchar* _tmp621_;
28601 					gchar* _tmp622_;
28602 					ValaCCodeIdentifier* _tmp623_;
28603 					ValaCCodeIdentifier* _tmp624_;
28604 					ValaCCodeFunctionCall* _tmp625_;
28605 					ValaErrorCode* _tmp626_;
28606 					gchar* _tmp627_;
28607 					gchar* _tmp628_;
28608 					ValaCCodeIdentifier* _tmp629_;
28609 					ValaCCodeIdentifier* _tmp630_;
28610 					ValaCCodeFunctionCall* _tmp643_;
28611 					ValaCCodeExpression* _tmp644_;
28612 					_tmp601_ = vala_expression_get_symbol_reference ((ValaExpression*) expr);
28613 					_tmp602_ = _tmp601_;
28614 					_tmp603_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp602_, VALA_TYPE_ERROR_CODE, ValaErrorCode));
28615 					ecode = _tmp603_;
28616 					_tmp604_ = ecode;
28617 					_tmp605_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp604_);
28618 					_tmp606_ = _tmp605_;
28619 					_tmp607_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp606_, VALA_TYPE_ERROR_DOMAIN, ValaErrorDomain));
28620 					edomain = _tmp607_;
28621 					_tmp608_ = edomain;
28622 					_tmp609_ = self->cfile;
28623 					vala_ccode_base_module_generate_error_domain_declaration (self, _tmp608_, _tmp609_);
28624 					_tmp610_ = vala_object_creation_expression_get_argument_list (expr);
28625 					_tmp611_ = vala_collection_get_size ((ValaCollection*) _tmp610_);
28626 					_tmp612_ = _tmp611_;
28627 					if (_tmp612_ == 1) {
28628 						ValaCCodeIdentifier* _tmp613_;
28629 						ValaCCodeIdentifier* _tmp614_;
28630 						ValaCCodeFunctionCall* _tmp615_;
28631 						_tmp613_ = vala_ccode_identifier_new ("g_error_new_literal");
28632 						_tmp614_ = _tmp613_;
28633 						_tmp615_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp614_);
28634 						_vala_ccode_node_unref0 (creation_call);
28635 						creation_call = _tmp615_;
28636 						_vala_ccode_node_unref0 (_tmp614_);
28637 					} else {
28638 						ValaCCodeIdentifier* _tmp616_;
28639 						ValaCCodeIdentifier* _tmp617_;
28640 						ValaCCodeFunctionCall* _tmp618_;
28641 						_tmp616_ = vala_ccode_identifier_new ("g_error_new");
28642 						_tmp617_ = _tmp616_;
28643 						_tmp618_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp617_);
28644 						_vala_ccode_node_unref0 (creation_call);
28645 						creation_call = _tmp618_;
28646 						_vala_ccode_node_unref0 (_tmp617_);
28647 					}
28648 					_tmp619_ = creation_call;
28649 					_tmp620_ = edomain;
28650 					_tmp621_ = vala_get_ccode_upper_case_name ((ValaSymbol*) _tmp620_, NULL);
28651 					_tmp622_ = _tmp621_;
28652 					_tmp623_ = vala_ccode_identifier_new (_tmp622_);
28653 					_tmp624_ = _tmp623_;
28654 					vala_ccode_function_call_add_argument (_tmp619_, (ValaCCodeExpression*) _tmp624_);
28655 					_vala_ccode_node_unref0 (_tmp624_);
28656 					_g_free0 (_tmp622_);
28657 					_tmp625_ = creation_call;
28658 					_tmp626_ = ecode;
28659 					_tmp627_ = vala_get_ccode_name ((ValaCodeNode*) _tmp626_);
28660 					_tmp628_ = _tmp627_;
28661 					_tmp629_ = vala_ccode_identifier_new (_tmp628_);
28662 					_tmp630_ = _tmp629_;
28663 					vala_ccode_function_call_add_argument (_tmp625_, (ValaCCodeExpression*) _tmp630_);
28664 					_vala_ccode_node_unref0 (_tmp630_);
28665 					_g_free0 (_tmp628_);
28666 					{
28667 						ValaList* _arg_list = NULL;
28668 						ValaList* _tmp631_;
28669 						ValaList* _tmp632_;
28670 						gint _arg_size = 0;
28671 						ValaList* _tmp633_;
28672 						gint _tmp634_;
28673 						gint _tmp635_;
28674 						gint _arg_index = 0;
28675 						_tmp631_ = vala_object_creation_expression_get_argument_list (expr);
28676 						_tmp632_ = _vala_iterable_ref0 (_tmp631_);
28677 						_arg_list = _tmp632_;
28678 						_tmp633_ = _arg_list;
28679 						_tmp634_ = vala_collection_get_size ((ValaCollection*) _tmp633_);
28680 						_tmp635_ = _tmp634_;
28681 						_arg_size = _tmp635_;
28682 						_arg_index = -1;
28683 						while (TRUE) {
28684 							gint _tmp636_;
28685 							gint _tmp637_;
28686 							ValaExpression* arg = NULL;
28687 							ValaList* _tmp638_;
28688 							gpointer _tmp639_;
28689 							ValaCCodeFunctionCall* _tmp640_;
28690 							ValaExpression* _tmp641_;
28691 							ValaCCodeExpression* _tmp642_;
28692 							_arg_index = _arg_index + 1;
28693 							_tmp636_ = _arg_index;
28694 							_tmp637_ = _arg_size;
28695 							if (!(_tmp636_ < _tmp637_)) {
28696 								break;
28697 							}
28698 							_tmp638_ = _arg_list;
28699 							_tmp639_ = vala_list_get (_tmp638_, _arg_index);
28700 							arg = (ValaExpression*) _tmp639_;
28701 							_tmp640_ = creation_call;
28702 							_tmp641_ = arg;
28703 							_tmp642_ = vala_get_cvalue (_tmp641_);
28704 							vala_ccode_function_call_add_argument (_tmp640_, _tmp642_);
28705 							_vala_code_node_unref0 (arg);
28706 						}
28707 						_vala_iterable_unref0 (_arg_list);
28708 					}
28709 					_tmp643_ = creation_call;
28710 					_tmp644_ = _vala_ccode_node_ref0 ((ValaCCodeExpression*) _tmp643_);
28711 					_vala_ccode_node_unref0 (creation_expr);
28712 					creation_expr = _tmp644_;
28713 					_vala_ccode_node_unref0 (creation_call);
28714 					_vala_code_node_unref0 (edomain);
28715 					_vala_code_node_unref0 (ecode);
28716 				} else {
28717 					_vala_assert (FALSE, "false");
28718 				}
28719 			}
28720 		}
28721 	}
28722 	_tmp645_ = vala_code_node_get_parent_node ((ValaCodeNode*) expr);
28723 	_tmp646_ = _tmp645_;
28724 	_tmp647_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (_tmp646_, VALA_TYPE_LOCAL_VARIABLE) ? ((ValaLocalVariable*) _tmp646_) : NULL);
28725 	local = _tmp647_;
28726 	_tmp649_ = local;
28727 	if (_tmp649_ != NULL) {
28728 		ValaLocalVariable* _tmp650_;
28729 		ValaLocalVariable* _tmp651_;
28730 		ValaExpression* _tmp652_;
28731 		ValaExpression* _tmp653_;
28732 		_tmp650_ = local;
28733 		_tmp651_ = local;
28734 		_tmp652_ = vala_variable_get_initializer ((ValaVariable*) _tmp651_);
28735 		_tmp653_ = _tmp652_;
28736 		_tmp648_ = vala_ccode_base_module_is_simple_struct_creation (self, (ValaVariable*) _tmp650_, _tmp653_);
28737 	} else {
28738 		_tmp648_ = FALSE;
28739 	}
28740 	if (_tmp648_) {
28741 		ValaCCodeFunction* _tmp654_;
28742 		ValaCCodeFunction* _tmp655_;
28743 		ValaCCodeExpression* _tmp656_;
28744 		ValaCCodeExpression* _tmp657_;
28745 		_tmp654_ = vala_ccode_base_module_get_ccode (self);
28746 		_tmp655_ = _tmp654_;
28747 		_tmp656_ = creation_expr;
28748 		vala_ccode_function_add_expression (_tmp655_, _tmp656_);
28749 		_tmp657_ = instance;
28750 		vala_set_cvalue ((ValaExpression*) expr, _tmp657_);
28751 	} else {
28752 		ValaCCodeExpression* _tmp658_;
28753 		_tmp658_ = instance;
28754 		if (_tmp658_ != NULL) {
28755 			ValaDataType* _tmp659_;
28756 			ValaDataType* _tmp660_;
28757 			ValaTypeSymbol* _tmp661_;
28758 			ValaTypeSymbol* _tmp662_;
28759 			ValaCCodeExpression* _tmp787_;
28760 			_tmp659_ = vala_object_creation_expression_get_type_reference (expr);
28761 			_tmp660_ = _tmp659_;
28762 			_tmp661_ = vala_data_type_get_type_symbol (_tmp660_);
28763 			_tmp662_ = _tmp661_;
28764 			if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp662_, VALA_TYPE_STRUCT)) {
28765 				ValaCCodeFunction* _tmp663_;
28766 				ValaCCodeFunction* _tmp664_;
28767 				ValaCCodeExpression* _tmp665_;
28768 				_tmp663_ = vala_ccode_base_module_get_ccode (self);
28769 				_tmp664_ = _tmp663_;
28770 				_tmp665_ = creation_expr;
28771 				vala_ccode_function_add_expression (_tmp664_, _tmp665_);
28772 			} else {
28773 				ValaCCodeFunction* _tmp666_;
28774 				ValaCCodeFunction* _tmp667_;
28775 				ValaCCodeExpression* _tmp668_;
28776 				ValaCCodeExpression* _tmp669_;
28777 				_tmp666_ = vala_ccode_base_module_get_ccode (self);
28778 				_tmp667_ = _tmp666_;
28779 				_tmp668_ = instance;
28780 				_tmp669_ = creation_expr;
28781 				vala_ccode_function_add_assignment (_tmp667_, _tmp668_, _tmp669_);
28782 			}
28783 			{
28784 				ValaList* _init_list = NULL;
28785 				ValaList* _tmp670_;
28786 				ValaList* _tmp671_;
28787 				gint _init_size = 0;
28788 				ValaList* _tmp672_;
28789 				gint _tmp673_;
28790 				gint _tmp674_;
28791 				gint _init_index = 0;
28792 				_tmp670_ = vala_object_creation_expression_get_object_initializer (expr);
28793 				_tmp671_ = _vala_iterable_ref0 (_tmp670_);
28794 				_init_list = _tmp671_;
28795 				_tmp672_ = _init_list;
28796 				_tmp673_ = vala_collection_get_size ((ValaCollection*) _tmp672_);
28797 				_tmp674_ = _tmp673_;
28798 				_init_size = _tmp674_;
28799 				_init_index = -1;
28800 				while (TRUE) {
28801 					gint _tmp675_;
28802 					gint _tmp676_;
28803 					ValaMemberInitializer* init = NULL;
28804 					ValaList* _tmp677_;
28805 					gpointer _tmp678_;
28806 					ValaMemberInitializer* _tmp679_;
28807 					ValaSymbol* _tmp680_;
28808 					ValaSymbol* _tmp681_;
28809 					_init_index = _init_index + 1;
28810 					_tmp675_ = _init_index;
28811 					_tmp676_ = _init_size;
28812 					if (!(_tmp675_ < _tmp676_)) {
28813 						break;
28814 					}
28815 					_tmp677_ = _init_list;
28816 					_tmp678_ = vala_list_get (_tmp677_, _init_index);
28817 					init = (ValaMemberInitializer*) _tmp678_;
28818 					_tmp679_ = init;
28819 					_tmp680_ = vala_member_initializer_get_symbol_reference (_tmp679_);
28820 					_tmp681_ = _tmp680_;
28821 					if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp681_, VALA_TYPE_FIELD)) {
28822 						ValaField* f = NULL;
28823 						ValaMemberInitializer* _tmp682_;
28824 						ValaSymbol* _tmp683_;
28825 						ValaSymbol* _tmp684_;
28826 						ValaField* _tmp685_;
28827 						ValaDataType* instance_target_type = NULL;
28828 						ValaField* _tmp686_;
28829 						ValaSymbol* _tmp687_;
28830 						ValaSymbol* _tmp688_;
28831 						ValaDataType* _tmp689_;
28832 						ValaTargetValue* typed_inst = NULL;
28833 						ValaDataType* _tmp690_;
28834 						ValaDataType* _tmp691_;
28835 						ValaCCodeExpression* _tmp692_;
28836 						ValaGLibValue* _tmp693_;
28837 						ValaGLibValue* _tmp694_;
28838 						ValaDataType* _tmp695_;
28839 						ValaMemberInitializer* _tmp696_;
28840 						ValaTargetValue* _tmp697_;
28841 						ValaTargetValue* _tmp698_;
28842 						ValaField* _tmp699_;
28843 						ValaTargetValue* _tmp700_;
28844 						ValaMemberInitializer* _tmp701_;
28845 						ValaExpression* _tmp702_;
28846 						ValaExpression* _tmp703_;
28847 						ValaTargetValue* _tmp704_;
28848 						ValaTargetValue* _tmp705_;
28849 						ValaMemberInitializer* _tmp706_;
28850 						ValaSourceReference* _tmp707_;
28851 						ValaSourceReference* _tmp708_;
28852 						ValaClass* cl = NULL;
28853 						ValaField* _tmp709_;
28854 						ValaSymbol* _tmp710_;
28855 						ValaSymbol* _tmp711_;
28856 						ValaClass* _tmp712_;
28857 						ValaClass* _tmp713_;
28858 						_tmp682_ = init;
28859 						_tmp683_ = vala_member_initializer_get_symbol_reference (_tmp682_);
28860 						_tmp684_ = _tmp683_;
28861 						_tmp685_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp684_, VALA_TYPE_FIELD, ValaField));
28862 						f = _tmp685_;
28863 						_tmp686_ = f;
28864 						_tmp687_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp686_);
28865 						_tmp688_ = _tmp687_;
28866 						_tmp689_ = vala_semantic_analyzer_get_data_type_for_symbol ((ValaSymbol*) G_TYPE_CHECK_INSTANCE_CAST (_tmp688_, VALA_TYPE_TYPESYMBOL, ValaTypeSymbol));
28867 						instance_target_type = _tmp689_;
28868 						_tmp690_ = vala_object_creation_expression_get_type_reference (expr);
28869 						_tmp691_ = _tmp690_;
28870 						_tmp692_ = instance;
28871 						_tmp693_ = vala_glib_value_new (_tmp691_, _tmp692_, TRUE);
28872 						_tmp694_ = _tmp693_;
28873 						_tmp695_ = instance_target_type;
28874 						_tmp696_ = init;
28875 						_tmp697_ = vala_ccode_base_module_transform_value (self, (ValaTargetValue*) _tmp694_, _tmp695_, (ValaCodeNode*) _tmp696_);
28876 						_tmp698_ = _tmp697_;
28877 						_vala_target_value_unref0 (_tmp694_);
28878 						typed_inst = _tmp698_;
28879 						_tmp699_ = f;
28880 						_tmp700_ = typed_inst;
28881 						_tmp701_ = init;
28882 						_tmp702_ = vala_member_initializer_get_initializer (_tmp701_);
28883 						_tmp703_ = _tmp702_;
28884 						_tmp704_ = vala_expression_get_target_value (_tmp703_);
28885 						_tmp705_ = _tmp704_;
28886 						_tmp706_ = init;
28887 						_tmp707_ = vala_code_node_get_source_reference ((ValaCodeNode*) _tmp706_);
28888 						_tmp708_ = _tmp707_;
28889 						vala_code_generator_store_field ((ValaCodeGenerator*) self, _tmp699_, _tmp700_, _tmp705_, _tmp708_);
28890 						_tmp709_ = f;
28891 						_tmp710_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp709_);
28892 						_tmp711_ = _tmp710_;
28893 						_tmp712_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (_tmp711_, VALA_TYPE_CLASS) ? ((ValaClass*) _tmp711_) : NULL);
28894 						cl = _tmp712_;
28895 						_tmp713_ = cl;
28896 						if (_tmp713_ != NULL) {
28897 							ValaClass* _tmp714_;
28898 							ValaCCodeFile* _tmp715_;
28899 							_tmp714_ = cl;
28900 							_tmp715_ = self->cfile;
28901 							vala_ccode_base_module_generate_class_struct_declaration (self, _tmp714_, _tmp715_);
28902 						}
28903 						_vala_code_node_unref0 (cl);
28904 						_vala_target_value_unref0 (typed_inst);
28905 						_vala_code_node_unref0 (instance_target_type);
28906 						_vala_code_node_unref0 (f);
28907 					} else {
28908 						ValaMemberInitializer* _tmp716_;
28909 						ValaSymbol* _tmp717_;
28910 						ValaSymbol* _tmp718_;
28911 						_tmp716_ = init;
28912 						_tmp717_ = vala_member_initializer_get_symbol_reference (_tmp716_);
28913 						_tmp718_ = _tmp717_;
28914 						if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp718_, VALA_TYPE_PROPERTY)) {
28915 							ValaProperty* p = NULL;
28916 							ValaMemberInitializer* _tmp719_;
28917 							ValaSymbol* _tmp720_;
28918 							ValaSymbol* _tmp721_;
28919 							ValaProperty* _tmp722_;
28920 							ValaProperty* _tmp723_;
28921 							ValaProperty* _tmp724_;
28922 							ValaProperty* _tmp725_;
28923 							ValaDataType* instance_target_type = NULL;
28924 							ValaProperty* _tmp737_;
28925 							ValaSymbol* _tmp738_;
28926 							ValaSymbol* _tmp739_;
28927 							ValaDataType* _tmp740_;
28928 							ValaTargetValue* typed_inst = NULL;
28929 							ValaDataType* _tmp741_;
28930 							ValaDataType* _tmp742_;
28931 							ValaCCodeExpression* _tmp743_;
28932 							ValaGLibValue* _tmp744_;
28933 							ValaGLibValue* _tmp745_;
28934 							ValaDataType* _tmp746_;
28935 							ValaMemberInitializer* _tmp747_;
28936 							ValaTargetValue* _tmp748_;
28937 							ValaTargetValue* _tmp749_;
28938 							ValaMemberAccess* inst_ma = NULL;
28939 							ValaMemberAccess* _tmp750_;
28940 							ValaMemberAccess* _tmp751_;
28941 							ValaTargetValue* _tmp752_;
28942 							ValaProperty* _tmp753_;
28943 							ValaMemberAccess* _tmp754_;
28944 							ValaMemberInitializer* _tmp755_;
28945 							ValaExpression* _tmp756_;
28946 							ValaExpression* _tmp757_;
28947 							ValaTargetValue* _tmp758_;
28948 							ValaTargetValue* _tmp759_;
28949 							gboolean _tmp760_ = FALSE;
28950 							ValaProperty* _tmp761_;
28951 							ValaPropertyAccessor* _tmp762_;
28952 							ValaPropertyAccessor* _tmp763_;
28953 							ValaDataType* _tmp764_;
28954 							ValaDataType* _tmp765_;
28955 							gboolean _tmp766_;
28956 							gboolean _tmp767_;
28957 							_tmp719_ = init;
28958 							_tmp720_ = vala_member_initializer_get_symbol_reference (_tmp719_);
28959 							_tmp721_ = _tmp720_;
28960 							_tmp722_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp721_, VALA_TYPE_PROPERTY, ValaProperty));
28961 							p = _tmp722_;
28962 							_tmp723_ = p;
28963 							_tmp724_ = vala_property_get_base_property (_tmp723_);
28964 							_tmp725_ = _tmp724_;
28965 							if (_tmp725_ != NULL) {
28966 								ValaProperty* _tmp726_;
28967 								ValaProperty* _tmp727_;
28968 								ValaProperty* _tmp728_;
28969 								ValaProperty* _tmp729_;
28970 								_tmp726_ = p;
28971 								_tmp727_ = vala_property_get_base_property (_tmp726_);
28972 								_tmp728_ = _tmp727_;
28973 								_tmp729_ = _vala_code_node_ref0 (_tmp728_);
28974 								_vala_code_node_unref0 (p);
28975 								p = _tmp729_;
28976 							} else {
28977 								ValaProperty* _tmp730_;
28978 								ValaProperty* _tmp731_;
28979 								ValaProperty* _tmp732_;
28980 								_tmp730_ = p;
28981 								_tmp731_ = vala_property_get_base_interface_property (_tmp730_);
28982 								_tmp732_ = _tmp731_;
28983 								if (_tmp732_ != NULL) {
28984 									ValaProperty* _tmp733_;
28985 									ValaProperty* _tmp734_;
28986 									ValaProperty* _tmp735_;
28987 									ValaProperty* _tmp736_;
28988 									_tmp733_ = p;
28989 									_tmp734_ = vala_property_get_base_interface_property (_tmp733_);
28990 									_tmp735_ = _tmp734_;
28991 									_tmp736_ = _vala_code_node_ref0 (_tmp735_);
28992 									_vala_code_node_unref0 (p);
28993 									p = _tmp736_;
28994 								}
28995 							}
28996 							_tmp737_ = p;
28997 							_tmp738_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp737_);
28998 							_tmp739_ = _tmp738_;
28999 							_tmp740_ = vala_semantic_analyzer_get_data_type_for_symbol ((ValaSymbol*) G_TYPE_CHECK_INSTANCE_CAST (_tmp739_, VALA_TYPE_TYPESYMBOL, ValaTypeSymbol));
29000 							instance_target_type = _tmp740_;
29001 							_tmp741_ = vala_object_creation_expression_get_type_reference (expr);
29002 							_tmp742_ = _tmp741_;
29003 							_tmp743_ = instance;
29004 							_tmp744_ = vala_glib_value_new (_tmp742_, _tmp743_, FALSE);
29005 							_tmp745_ = _tmp744_;
29006 							_tmp746_ = instance_target_type;
29007 							_tmp747_ = init;
29008 							_tmp748_ = vala_ccode_base_module_transform_value (self, (ValaTargetValue*) _tmp745_, _tmp746_, (ValaCodeNode*) _tmp747_);
29009 							_tmp749_ = _tmp748_;
29010 							_vala_target_value_unref0 (_tmp745_);
29011 							typed_inst = _tmp749_;
29012 							_tmp750_ = vala_member_access_new_simple ("fake", NULL);
29013 							inst_ma = _tmp750_;
29014 							_tmp751_ = inst_ma;
29015 							_tmp752_ = typed_inst;
29016 							vala_expression_set_target_value ((ValaExpression*) _tmp751_, _tmp752_);
29017 							_tmp753_ = p;
29018 							_tmp754_ = inst_ma;
29019 							_tmp755_ = init;
29020 							_tmp756_ = vala_member_initializer_get_initializer (_tmp755_);
29021 							_tmp757_ = _tmp756_;
29022 							_tmp758_ = vala_expression_get_target_value (_tmp757_);
29023 							_tmp759_ = _tmp758_;
29024 							vala_ccode_base_module_store_property (self, _tmp753_, (ValaExpression*) _tmp754_, _tmp759_);
29025 							_tmp761_ = p;
29026 							_tmp762_ = vala_property_get_set_accessor (_tmp761_);
29027 							_tmp763_ = _tmp762_;
29028 							_tmp764_ = vala_property_accessor_get_value_type (_tmp763_);
29029 							_tmp765_ = _tmp764_;
29030 							_tmp766_ = vala_data_type_get_value_owned (_tmp765_);
29031 							_tmp767_ = _tmp766_;
29032 							if (!_tmp767_) {
29033 								ValaMemberInitializer* _tmp768_;
29034 								ValaExpression* _tmp769_;
29035 								ValaExpression* _tmp770_;
29036 								ValaTargetValue* _tmp771_;
29037 								ValaTargetValue* _tmp772_;
29038 								ValaDataType* _tmp773_;
29039 								ValaDataType* _tmp774_;
29040 								_tmp768_ = init;
29041 								_tmp769_ = vala_member_initializer_get_initializer (_tmp768_);
29042 								_tmp770_ = _tmp769_;
29043 								_tmp771_ = vala_expression_get_target_value (_tmp770_);
29044 								_tmp772_ = _tmp771_;
29045 								_tmp773_ = vala_target_value_get_value_type (_tmp772_);
29046 								_tmp774_ = _tmp773_;
29047 								_tmp760_ = vala_ccode_base_module_requires_destroy (_tmp774_);
29048 							} else {
29049 								_tmp760_ = FALSE;
29050 							}
29051 							if (_tmp760_) {
29052 								ValaCCodeFunction* _tmp775_;
29053 								ValaCCodeFunction* _tmp776_;
29054 								ValaMemberInitializer* _tmp777_;
29055 								ValaExpression* _tmp778_;
29056 								ValaExpression* _tmp779_;
29057 								ValaTargetValue* _tmp780_;
29058 								ValaTargetValue* _tmp781_;
29059 								ValaCCodeExpression* _tmp782_;
29060 								ValaCCodeExpression* _tmp783_;
29061 								_tmp775_ = vala_ccode_base_module_get_ccode (self);
29062 								_tmp776_ = _tmp775_;
29063 								_tmp777_ = init;
29064 								_tmp778_ = vala_member_initializer_get_initializer (_tmp777_);
29065 								_tmp779_ = _tmp778_;
29066 								_tmp780_ = vala_expression_get_target_value (_tmp779_);
29067 								_tmp781_ = _tmp780_;
29068 								_tmp782_ = vala_ccode_base_module_destroy_value (self, _tmp781_, FALSE);
29069 								_tmp783_ = _tmp782_;
29070 								vala_ccode_function_add_expression (_tmp776_, _tmp783_);
29071 								_vala_ccode_node_unref0 (_tmp783_);
29072 							}
29073 							_vala_code_node_unref0 (inst_ma);
29074 							_vala_target_value_unref0 (typed_inst);
29075 							_vala_code_node_unref0 (instance_target_type);
29076 							_vala_code_node_unref0 (p);
29077 						} else {
29078 							ValaMemberInitializer* _tmp784_;
29079 							ValaSourceReference* _tmp785_;
29080 							ValaSourceReference* _tmp786_;
29081 							_tmp784_ = init;
29082 							_tmp785_ = vala_code_node_get_source_reference ((ValaCodeNode*) _tmp784_);
29083 							_tmp786_ = _tmp785_;
29084 							vala_report_error (_tmp786_, "internal: Unsupported symbol");
29085 						}
29086 					}
29087 					_vala_code_node_unref0 (init);
29088 				}
29089 				_vala_iterable_unref0 (_init_list);
29090 			}
29091 			_tmp787_ = instance;
29092 			vala_set_cvalue ((ValaExpression*) expr, _tmp787_);
29093 		} else {
29094 			ValaCCodeExpression* _tmp788_;
29095 			_tmp788_ = creation_expr;
29096 			if (_tmp788_ != NULL) {
29097 				ValaTargetValue* temp_value = NULL;
29098 				ValaDataType* _tmp789_;
29099 				ValaDataType* _tmp790_;
29100 				ValaTargetValue* _tmp791_;
29101 				ValaCCodeFunction* _tmp792_;
29102 				ValaCCodeFunction* _tmp793_;
29103 				ValaTargetValue* _tmp794_;
29104 				ValaCCodeExpression* _tmp795_;
29105 				ValaCCodeExpression* _tmp796_;
29106 				ValaTargetValue* _tmp797_;
29107 				ValaClass* cl = NULL;
29108 				ValaDataType* _tmp798_;
29109 				ValaDataType* _tmp799_;
29110 				ValaTypeSymbol* _tmp800_;
29111 				ValaTypeSymbol* _tmp801_;
29112 				ValaCodeContext* _tmp802_;
29113 				gboolean _tmp803_;
29114 				gboolean _tmp804_;
29115 				gboolean _tmp849_ = FALSE;
29116 				ValaClass* _tmp850_;
29117 				_tmp789_ = vala_expression_get_value_type ((ValaExpression*) expr);
29118 				_tmp790_ = _tmp789_;
29119 				_tmp791_ = vala_ccode_base_module_create_temp_value (self, _tmp790_, FALSE, (ValaCodeNode*) expr, NULL);
29120 				temp_value = _tmp791_;
29121 				_tmp792_ = vala_ccode_base_module_get_ccode (self);
29122 				_tmp793_ = _tmp792_;
29123 				_tmp794_ = temp_value;
29124 				_tmp795_ = vala_get_cvalue_ (_tmp794_);
29125 				_tmp796_ = creation_expr;
29126 				vala_ccode_function_add_assignment (_tmp793_, _tmp795_, _tmp796_);
29127 				_tmp797_ = temp_value;
29128 				vala_expression_set_target_value ((ValaExpression*) expr, _tmp797_);
29129 				_tmp798_ = vala_object_creation_expression_get_type_reference (expr);
29130 				_tmp799_ = _tmp798_;
29131 				_tmp800_ = vala_data_type_get_type_symbol (_tmp799_);
29132 				_tmp801_ = _tmp800_;
29133 				cl = G_TYPE_CHECK_INSTANCE_TYPE (_tmp801_, VALA_TYPE_CLASS) ? ((ValaClass*) _tmp801_) : NULL;
29134 				_tmp802_ = self->priv->_context;
29135 				_tmp803_ = vala_code_context_get_gobject_tracing (_tmp802_);
29136 				_tmp804_ = _tmp803_;
29137 				if (_tmp804_) {
29138 					gboolean _tmp805_ = FALSE;
29139 					ValaClass* _tmp806_;
29140 					_tmp806_ = cl;
29141 					if (_tmp806_ != NULL) {
29142 						ValaClass* _tmp807_;
29143 						ValaTypeSymbol* _tmp808_;
29144 						_tmp807_ = cl;
29145 						_tmp808_ = self->gobject_type;
29146 						_tmp805_ = vala_typesymbol_is_subtype_of ((ValaTypeSymbol*) _tmp807_, _tmp808_);
29147 					} else {
29148 						_tmp805_ = FALSE;
29149 					}
29150 					if (_tmp805_) {
29151 						ValaCCodeFunction* _tmp809_;
29152 						ValaCCodeFunction* _tmp810_;
29153 						ValaTargetValue* _tmp811_;
29154 						ValaTargetValue* _tmp812_;
29155 						ValaCCodeExpression* _tmp813_;
29156 						ValaCCodeFunctionCall* set_data_call = NULL;
29157 						ValaCCodeIdentifier* _tmp814_;
29158 						ValaCCodeIdentifier* _tmp815_;
29159 						ValaCCodeFunctionCall* _tmp816_;
29160 						ValaCCodeFunctionCall* _tmp817_;
29161 						ValaCCodeFunctionCall* _tmp818_;
29162 						ValaTargetValue* _tmp819_;
29163 						ValaTargetValue* _tmp820_;
29164 						ValaCCodeExpression* _tmp821_;
29165 						ValaCCodeCastExpression* _tmp822_;
29166 						ValaCCodeCastExpression* _tmp823_;
29167 						ValaCCodeFunctionCall* _tmp824_;
29168 						ValaCCodeConstant* _tmp825_;
29169 						ValaCCodeConstant* _tmp826_;
29170 						gchar* func_name = NULL;
29171 						gchar* _tmp827_;
29172 						ValaMethod* _tmp828_;
29173 						ValaMethod* _tmp829_;
29174 						ValaCCodeFunctionCall* _tmp838_;
29175 						const gchar* _tmp839_;
29176 						gchar* _tmp840_;
29177 						gchar* _tmp841_;
29178 						ValaCCodeConstant* _tmp842_;
29179 						ValaCCodeConstant* _tmp843_;
29180 						ValaCCodeFunction* _tmp844_;
29181 						ValaCCodeFunction* _tmp845_;
29182 						ValaCCodeFunctionCall* _tmp846_;
29183 						ValaCCodeFunction* _tmp847_;
29184 						ValaCCodeFunction* _tmp848_;
29185 						_tmp809_ = vala_ccode_base_module_get_ccode (self);
29186 						_tmp810_ = _tmp809_;
29187 						_tmp811_ = vala_expression_get_target_value ((ValaExpression*) expr);
29188 						_tmp812_ = _tmp811_;
29189 						_tmp813_ = vala_get_cvalue_ (_tmp812_);
29190 						vala_ccode_function_open_if (_tmp810_, _tmp813_);
29191 						_tmp814_ = vala_ccode_identifier_new ("g_object_set_data");
29192 						_tmp815_ = _tmp814_;
29193 						_tmp816_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp815_);
29194 						_tmp817_ = _tmp816_;
29195 						_vala_ccode_node_unref0 (_tmp815_);
29196 						set_data_call = _tmp817_;
29197 						_tmp818_ = set_data_call;
29198 						_tmp819_ = vala_expression_get_target_value ((ValaExpression*) expr);
29199 						_tmp820_ = _tmp819_;
29200 						_tmp821_ = vala_get_cvalue_ (_tmp820_);
29201 						_tmp822_ = vala_ccode_cast_expression_new (_tmp821_, "GObject *");
29202 						_tmp823_ = _tmp822_;
29203 						vala_ccode_function_call_add_argument (_tmp818_, (ValaCCodeExpression*) _tmp823_);
29204 						_vala_ccode_node_unref0 (_tmp823_);
29205 						_tmp824_ = set_data_call;
29206 						_tmp825_ = vala_ccode_constant_new ("\"vala-creation-function\"");
29207 						_tmp826_ = _tmp825_;
29208 						vala_ccode_function_call_add_argument (_tmp824_, (ValaCCodeExpression*) _tmp826_);
29209 						_vala_ccode_node_unref0 (_tmp826_);
29210 						_tmp827_ = g_strdup ("");
29211 						func_name = _tmp827_;
29212 						_tmp828_ = vala_ccode_base_module_get_current_method (self);
29213 						_tmp829_ = _tmp828_;
29214 						if (_tmp829_ != NULL) {
29215 							ValaMethod* _tmp830_;
29216 							ValaMethod* _tmp831_;
29217 							gchar* _tmp832_;
29218 							_tmp830_ = vala_ccode_base_module_get_current_method (self);
29219 							_tmp831_ = _tmp830_;
29220 							_tmp832_ = vala_symbol_get_full_name ((ValaSymbol*) _tmp831_);
29221 							_g_free0 (func_name);
29222 							func_name = _tmp832_;
29223 						} else {
29224 							ValaPropertyAccessor* _tmp833_;
29225 							ValaPropertyAccessor* _tmp834_;
29226 							_tmp833_ = vala_ccode_base_module_get_current_property_accessor (self);
29227 							_tmp834_ = _tmp833_;
29228 							if (_tmp834_ != NULL) {
29229 								ValaPropertyAccessor* _tmp835_;
29230 								ValaPropertyAccessor* _tmp836_;
29231 								gchar* _tmp837_;
29232 								_tmp835_ = vala_ccode_base_module_get_current_property_accessor (self);
29233 								_tmp836_ = _tmp835_;
29234 								_tmp837_ = vala_symbol_get_full_name ((ValaSymbol*) _tmp836_);
29235 								_g_free0 (func_name);
29236 								func_name = _tmp837_;
29237 							}
29238 						}
29239 						_tmp838_ = set_data_call;
29240 						_tmp839_ = func_name;
29241 						_tmp840_ = g_strdup_printf ("\"%s\"", _tmp839_);
29242 						_tmp841_ = _tmp840_;
29243 						_tmp842_ = vala_ccode_constant_new (_tmp841_);
29244 						_tmp843_ = _tmp842_;
29245 						vala_ccode_function_call_add_argument (_tmp838_, (ValaCCodeExpression*) _tmp843_);
29246 						_vala_ccode_node_unref0 (_tmp843_);
29247 						_g_free0 (_tmp841_);
29248 						_tmp844_ = vala_ccode_base_module_get_ccode (self);
29249 						_tmp845_ = _tmp844_;
29250 						_tmp846_ = set_data_call;
29251 						vala_ccode_function_add_expression (_tmp845_, (ValaCCodeExpression*) _tmp846_);
29252 						_tmp847_ = vala_ccode_base_module_get_ccode (self);
29253 						_tmp848_ = _tmp847_;
29254 						vala_ccode_function_close (_tmp848_);
29255 						_g_free0 (func_name);
29256 						_vala_ccode_node_unref0 (set_data_call);
29257 					}
29258 				}
29259 				_tmp850_ = cl;
29260 				if (_tmp850_ != NULL) {
29261 					ValaClass* _tmp851_;
29262 					ValaTypeSymbol* _tmp852_;
29263 					_tmp851_ = cl;
29264 					_tmp852_ = self->garray_type;
29265 					_tmp849_ = G_TYPE_CHECK_INSTANCE_CAST (_tmp851_, VALA_TYPE_TYPESYMBOL, ValaTypeSymbol) == _tmp852_;
29266 				} else {
29267 					_tmp849_ = FALSE;
29268 				}
29269 				if (_tmp849_) {
29270 					ValaDataType* type_arg = NULL;
29271 					ValaDataType* _tmp853_;
29272 					ValaDataType* _tmp854_;
29273 					ValaList* _tmp855_;
29274 					gpointer _tmp856_;
29275 					ValaDataType* _tmp857_;
29276 					_tmp853_ = vala_object_creation_expression_get_type_reference (expr);
29277 					_tmp854_ = _tmp853_;
29278 					_tmp855_ = vala_data_type_get_type_arguments (_tmp854_);
29279 					_tmp856_ = vala_list_get (_tmp855_, 0);
29280 					type_arg = (ValaDataType*) _tmp856_;
29281 					_tmp857_ = type_arg;
29282 					if (vala_ccode_base_module_requires_destroy (_tmp857_)) {
29283 						ValaCCodeFunctionCall* clear_func = NULL;
29284 						ValaCCodeIdentifier* _tmp858_;
29285 						ValaCCodeIdentifier* _tmp859_;
29286 						ValaCCodeFunctionCall* _tmp860_;
29287 						ValaCCodeFunctionCall* _tmp861_;
29288 						ValaCCodeFunctionCall* _tmp862_;
29289 						ValaTargetValue* _tmp863_;
29290 						ValaTargetValue* _tmp864_;
29291 						ValaCCodeExpression* _tmp865_;
29292 						gchar* destroy_func = NULL;
29293 						gboolean _tmp866_ = FALSE;
29294 						ValaDataType* _tmp867_;
29295 						ValaCCodeFunctionCall* _tmp875_;
29296 						const gchar* _tmp876_;
29297 						ValaCCodeIdentifier* _tmp877_;
29298 						ValaCCodeIdentifier* _tmp878_;
29299 						ValaCCodeCastExpression* _tmp879_;
29300 						ValaCCodeCastExpression* _tmp880_;
29301 						ValaCCodeFunction* _tmp881_;
29302 						ValaCCodeFunction* _tmp882_;
29303 						ValaCCodeFunctionCall* _tmp883_;
29304 						_tmp858_ = vala_ccode_identifier_new ("g_array_set_clear_func");
29305 						_tmp859_ = _tmp858_;
29306 						_tmp860_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp859_);
29307 						_tmp861_ = _tmp860_;
29308 						_vala_ccode_node_unref0 (_tmp859_);
29309 						clear_func = _tmp861_;
29310 						_tmp862_ = clear_func;
29311 						_tmp863_ = vala_expression_get_target_value ((ValaExpression*) expr);
29312 						_tmp864_ = _tmp863_;
29313 						_tmp865_ = vala_get_cvalue_ (_tmp864_);
29314 						vala_ccode_function_call_add_argument (_tmp862_, _tmp865_);
29315 						_tmp867_ = type_arg;
29316 						if (vala_data_type_is_non_null_simple_type (_tmp867_)) {
29317 							_tmp866_ = TRUE;
29318 						} else {
29319 							ValaDataType* _tmp868_;
29320 							_tmp868_ = type_arg;
29321 							_tmp866_ = vala_data_type_is_real_non_null_struct_type (_tmp868_);
29322 						}
29323 						if (_tmp866_) {
29324 							ValaDataType* _tmp869_;
29325 							ValaTypeSymbol* _tmp870_;
29326 							ValaTypeSymbol* _tmp871_;
29327 							gchar* _tmp872_;
29328 							_tmp869_ = type_arg;
29329 							_tmp870_ = vala_data_type_get_type_symbol (_tmp869_);
29330 							_tmp871_ = _tmp870_;
29331 							_tmp872_ = vala_get_ccode_destroy_function (_tmp871_);
29332 							_g_free0 (destroy_func);
29333 							destroy_func = _tmp872_;
29334 						} else {
29335 							ValaDataType* _tmp873_;
29336 							gchar* _tmp874_;
29337 							_tmp873_ = type_arg;
29338 							_tmp874_ = vala_ccode_base_module_generate_destroy_function_content_of_wrapper (self, _tmp873_);
29339 							_g_free0 (destroy_func);
29340 							destroy_func = _tmp874_;
29341 						}
29342 						_tmp875_ = clear_func;
29343 						_tmp876_ = destroy_func;
29344 						_tmp877_ = vala_ccode_identifier_new (_tmp876_);
29345 						_tmp878_ = _tmp877_;
29346 						_tmp879_ = vala_ccode_cast_expression_new ((ValaCCodeExpression*) _tmp878_, "GDestroyNotify");
29347 						_tmp880_ = _tmp879_;
29348 						vala_ccode_function_call_add_argument (_tmp875_, (ValaCCodeExpression*) _tmp880_);
29349 						_vala_ccode_node_unref0 (_tmp880_);
29350 						_vala_ccode_node_unref0 (_tmp878_);
29351 						_tmp881_ = vala_ccode_base_module_get_ccode (self);
29352 						_tmp882_ = _tmp881_;
29353 						_tmp883_ = clear_func;
29354 						vala_ccode_function_add_expression (_tmp882_, (ValaCCodeExpression*) _tmp883_);
29355 						_g_free0 (destroy_func);
29356 						_vala_ccode_node_unref0 (clear_func);
29357 					}
29358 					_vala_code_node_unref0 (type_arg);
29359 				}
29360 				_vala_target_value_unref0 (temp_value);
29361 			}
29362 		}
29363 	}
29364 	_tmp884_ = vala_expression_get_target_value ((ValaExpression*) expr);
29365 	_tmp885_ = _tmp884_;
29366 	G_TYPE_CHECK_INSTANCE_CAST (_tmp885_, VALA_TYPE_GLIB_VALUE, ValaGLibValue)->lvalue = TRUE;
29367 	_vala_code_node_unref0 (local);
29368 	_vala_ccode_node_unref0 (creation_expr);
29369 	_vala_ccode_node_unref0 (instance);
29370 }
29371 
29372 ValaCCodeExpression*
vala_ccode_base_module_handle_struct_argument(ValaCCodeBaseModule * self,ValaParameter * param,ValaExpression * arg,ValaCCodeExpression * cexpr)29373 vala_ccode_base_module_handle_struct_argument (ValaCCodeBaseModule* self,
29374                                                ValaParameter* param,
29375                                                ValaExpression* arg,
29376                                                ValaCCodeExpression* cexpr)
29377 {
29378 	ValaDataType* type = NULL;
29379 	ValaUnaryExpression* unary = NULL;
29380 	ValaUnaryExpression* _tmp6_;
29381 	gboolean _tmp7_ = FALSE;
29382 	ValaDataType* _tmp8_;
29383 	ValaDataType* _tmp9_;
29384 	ValaCCodeExpression* _tmp35_;
29385 	ValaCCodeExpression* result = NULL;
29386 	g_return_val_if_fail (self != NULL, NULL);
29387 	g_return_val_if_fail (arg != NULL, NULL);
29388 	if (param != NULL) {
29389 		ValaDataType* _tmp0_;
29390 		ValaDataType* _tmp1_;
29391 		ValaDataType* _tmp2_;
29392 		_tmp0_ = vala_variable_get_variable_type ((ValaVariable*) param);
29393 		_tmp1_ = _tmp0_;
29394 		_tmp2_ = _vala_code_node_ref0 (_tmp1_);
29395 		_vala_code_node_unref0 (type);
29396 		type = _tmp2_;
29397 	} else {
29398 		ValaDataType* _tmp3_;
29399 		ValaDataType* _tmp4_;
29400 		ValaDataType* _tmp5_;
29401 		_tmp3_ = vala_expression_get_value_type (arg);
29402 		_tmp4_ = _tmp3_;
29403 		_tmp5_ = _vala_code_node_ref0 (_tmp4_);
29404 		_vala_code_node_unref0 (type);
29405 		type = _tmp5_;
29406 	}
29407 	_tmp6_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (arg, VALA_TYPE_UNARY_EXPRESSION) ? ((ValaUnaryExpression*) arg) : NULL);
29408 	unary = _tmp6_;
29409 	_tmp8_ = vala_expression_get_value_type (arg);
29410 	_tmp9_ = _tmp8_;
29411 	if (!G_TYPE_CHECK_INSTANCE_TYPE (_tmp9_, VALA_TYPE_NULL_TYPE)) {
29412 		ValaDataType* _tmp10_;
29413 		_tmp10_ = type;
29414 		_tmp7_ = vala_data_type_is_real_struct_type (_tmp10_);
29415 	} else {
29416 		_tmp7_ = FALSE;
29417 	}
29418 	if (_tmp7_) {
29419 		gboolean _tmp11_ = FALSE;
29420 		gboolean _tmp12_ = FALSE;
29421 		ValaUnaryExpression* _tmp13_;
29422 		_tmp13_ = unary;
29423 		if (_tmp13_ != NULL) {
29424 			gboolean _tmp14_ = FALSE;
29425 			ValaUnaryExpression* _tmp15_;
29426 			ValaUnaryOperator _tmp16_;
29427 			ValaUnaryOperator _tmp17_;
29428 			_tmp15_ = unary;
29429 			_tmp16_ = vala_unary_expression_get_operator (_tmp15_);
29430 			_tmp17_ = _tmp16_;
29431 			if (_tmp17_ == VALA_UNARY_OPERATOR_OUT) {
29432 				_tmp14_ = TRUE;
29433 			} else {
29434 				ValaUnaryExpression* _tmp18_;
29435 				ValaUnaryOperator _tmp19_;
29436 				ValaUnaryOperator _tmp20_;
29437 				_tmp18_ = unary;
29438 				_tmp19_ = vala_unary_expression_get_operator (_tmp18_);
29439 				_tmp20_ = _tmp19_;
29440 				_tmp14_ = _tmp20_ == VALA_UNARY_OPERATOR_REF;
29441 			}
29442 			_tmp12_ = _tmp14_;
29443 		} else {
29444 			_tmp12_ = FALSE;
29445 		}
29446 		if (!_tmp12_) {
29447 			ValaDataType* _tmp21_;
29448 			gboolean _tmp22_;
29449 			gboolean _tmp23_;
29450 			_tmp21_ = type;
29451 			_tmp22_ = vala_data_type_get_nullable (_tmp21_);
29452 			_tmp23_ = _tmp22_;
29453 			_tmp11_ = !_tmp23_;
29454 		} else {
29455 			_tmp11_ = FALSE;
29456 		}
29457 		if (_tmp11_) {
29458 			gboolean _tmp24_ = FALSE;
29459 			if (G_TYPE_CHECK_INSTANCE_TYPE (cexpr, VALA_TYPE_CCODE_IDENTIFIER)) {
29460 				_tmp24_ = TRUE;
29461 			} else {
29462 				_tmp24_ = G_TYPE_CHECK_INSTANCE_TYPE (cexpr, VALA_TYPE_CCODE_MEMBER_ACCESS);
29463 			}
29464 			if (_tmp24_) {
29465 				ValaCCodeUnaryExpression* _tmp25_;
29466 				_tmp25_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, cexpr);
29467 				result = (ValaCCodeExpression*) _tmp25_;
29468 				_vala_code_node_unref0 (unary);
29469 				_vala_code_node_unref0 (type);
29470 				return result;
29471 			} else {
29472 				ValaTargetValue* temp_value = NULL;
29473 				ValaDataType* _tmp26_;
29474 				ValaTargetValue* _tmp27_;
29475 				ValaCCodeFunction* _tmp28_;
29476 				ValaCCodeFunction* _tmp29_;
29477 				ValaTargetValue* _tmp30_;
29478 				ValaCCodeExpression* _tmp31_;
29479 				ValaTargetValue* _tmp32_;
29480 				ValaCCodeExpression* _tmp33_;
29481 				ValaCCodeUnaryExpression* _tmp34_;
29482 				_tmp26_ = type;
29483 				_tmp27_ = vala_ccode_base_module_create_temp_value (self, _tmp26_, FALSE, (ValaCodeNode*) arg, NULL);
29484 				temp_value = _tmp27_;
29485 				_tmp28_ = vala_ccode_base_module_get_ccode (self);
29486 				_tmp29_ = _tmp28_;
29487 				_tmp30_ = temp_value;
29488 				_tmp31_ = vala_get_cvalue_ (_tmp30_);
29489 				vala_ccode_function_add_assignment (_tmp29_, _tmp31_, cexpr);
29490 				_tmp32_ = temp_value;
29491 				_tmp33_ = vala_get_cvalue_ (_tmp32_);
29492 				_tmp34_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, _tmp33_);
29493 				result = (ValaCCodeExpression*) _tmp34_;
29494 				_vala_target_value_unref0 (temp_value);
29495 				_vala_code_node_unref0 (unary);
29496 				_vala_code_node_unref0 (type);
29497 				return result;
29498 			}
29499 		}
29500 	}
29501 	_tmp35_ = _vala_ccode_node_ref0 (cexpr);
29502 	result = _tmp35_;
29503 	_vala_code_node_unref0 (unary);
29504 	_vala_code_node_unref0 (type);
29505 	return result;
29506 }
29507 
29508 static void
vala_ccode_base_module_real_visit_sizeof_expression(ValaCodeVisitor * base,ValaSizeofExpression * expr)29509 vala_ccode_base_module_real_visit_sizeof_expression (ValaCodeVisitor* base,
29510                                                      ValaSizeofExpression* expr)
29511 {
29512 	ValaCCodeBaseModule * self;
29513 	ValaDataType* _tmp0_;
29514 	ValaDataType* _tmp1_;
29515 	ValaCCodeFile* _tmp2_;
29516 	ValaCCodeFunctionCall* csizeof = NULL;
29517 	ValaCCodeIdentifier* _tmp3_;
29518 	ValaCCodeIdentifier* _tmp4_;
29519 	ValaCCodeFunctionCall* _tmp5_;
29520 	ValaCCodeFunctionCall* _tmp6_;
29521 	ValaDataType* _tmp7_;
29522 	ValaDataType* _tmp8_;
29523 	gchar* _tmp9_;
29524 	gchar* _tmp10_;
29525 	ValaCCodeIdentifier* _tmp11_;
29526 	ValaCCodeIdentifier* _tmp12_;
29527 	self = (ValaCCodeBaseModule*) base;
29528 	g_return_if_fail (expr != NULL);
29529 	_tmp0_ = vala_sizeof_expression_get_type_reference (expr);
29530 	_tmp1_ = _tmp0_;
29531 	_tmp2_ = self->cfile;
29532 	vala_ccode_base_module_generate_type_declaration (self, _tmp1_, _tmp2_);
29533 	_tmp3_ = vala_ccode_identifier_new ("sizeof");
29534 	_tmp4_ = _tmp3_;
29535 	_tmp5_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp4_);
29536 	_tmp6_ = _tmp5_;
29537 	_vala_ccode_node_unref0 (_tmp4_);
29538 	csizeof = _tmp6_;
29539 	_tmp7_ = vala_sizeof_expression_get_type_reference (expr);
29540 	_tmp8_ = _tmp7_;
29541 	_tmp9_ = vala_get_ccode_name ((ValaCodeNode*) _tmp8_);
29542 	_tmp10_ = _tmp9_;
29543 	_tmp11_ = vala_ccode_identifier_new (_tmp10_);
29544 	_tmp12_ = _tmp11_;
29545 	vala_ccode_function_call_add_argument (csizeof, (ValaCCodeExpression*) _tmp12_);
29546 	_vala_ccode_node_unref0 (_tmp12_);
29547 	_g_free0 (_tmp10_);
29548 	vala_set_cvalue ((ValaExpression*) expr, (ValaCCodeExpression*) csizeof);
29549 	_vala_ccode_node_unref0 (csizeof);
29550 }
29551 
29552 static void
vala_ccode_base_module_real_visit_typeof_expression(ValaCodeVisitor * base,ValaTypeofExpression * expr)29553 vala_ccode_base_module_real_visit_typeof_expression (ValaCodeVisitor* base,
29554                                                      ValaTypeofExpression* expr)
29555 {
29556 	ValaCCodeBaseModule * self;
29557 	ValaCCodeFile* _tmp0_;
29558 	ValaDataType* _tmp1_;
29559 	ValaDataType* _tmp2_;
29560 	ValaCCodeExpression* _tmp3_;
29561 	ValaCCodeExpression* _tmp4_;
29562 	self = (ValaCCodeBaseModule*) base;
29563 	g_return_if_fail (expr != NULL);
29564 	_tmp0_ = self->cfile;
29565 	vala_ccode_file_add_include (_tmp0_, "glib-object.h", FALSE);
29566 	_tmp1_ = vala_typeof_expression_get_type_reference (expr);
29567 	_tmp2_ = _tmp1_;
29568 	_tmp3_ = vala_ccode_base_module_get_type_id_expression (self, _tmp2_, FALSE);
29569 	_tmp4_ = _tmp3_;
29570 	vala_set_cvalue ((ValaExpression*) expr, _tmp4_);
29571 	_vala_ccode_node_unref0 (_tmp4_);
29572 }
29573 
29574 static void
vala_ccode_base_module_real_visit_unary_expression(ValaCodeVisitor * base,ValaUnaryExpression * expr)29575 vala_ccode_base_module_real_visit_unary_expression (ValaCodeVisitor* base,
29576                                                     ValaUnaryExpression* expr)
29577 {
29578 	ValaCCodeBaseModule * self;
29579 	gboolean _tmp0_ = FALSE;
29580 	ValaUnaryOperator _tmp1_;
29581 	ValaUnaryOperator _tmp2_;
29582 	gboolean _tmp66_ = FALSE;
29583 	ValaUnaryOperator _tmp67_;
29584 	ValaUnaryOperator _tmp68_;
29585 	ValaCCodeUnaryOperator op = 0;
29586 	ValaUnaryOperator _tmp109_;
29587 	ValaUnaryOperator _tmp110_;
29588 	ValaCCodeUnaryOperator _tmp111_;
29589 	ValaExpression* _tmp112_;
29590 	ValaExpression* _tmp113_;
29591 	ValaCCodeExpression* _tmp114_;
29592 	ValaCCodeUnaryExpression* _tmp115_;
29593 	ValaCCodeUnaryExpression* _tmp116_;
29594 	self = (ValaCCodeBaseModule*) base;
29595 	g_return_if_fail (expr != NULL);
29596 	_tmp1_ = vala_unary_expression_get_operator (expr);
29597 	_tmp2_ = _tmp1_;
29598 	if (_tmp2_ == VALA_UNARY_OPERATOR_REF) {
29599 		_tmp0_ = TRUE;
29600 	} else {
29601 		ValaUnaryOperator _tmp3_;
29602 		ValaUnaryOperator _tmp4_;
29603 		_tmp3_ = vala_unary_expression_get_operator (expr);
29604 		_tmp4_ = _tmp3_;
29605 		_tmp0_ = _tmp4_ == VALA_UNARY_OPERATOR_OUT;
29606 	}
29607 	if (_tmp0_) {
29608 		ValaGLibValue* glib_value = NULL;
29609 		ValaExpression* _tmp5_;
29610 		ValaExpression* _tmp6_;
29611 		ValaTargetValue* _tmp7_;
29612 		ValaTargetValue* _tmp8_;
29613 		ValaGLibValue* _tmp9_;
29614 		ValaGLibValue* ref_value = NULL;
29615 		ValaGLibValue* _tmp10_;
29616 		ValaDataType* _tmp11_;
29617 		ValaDataType* _tmp12_;
29618 		ValaGLibValue* _tmp13_;
29619 		gboolean _tmp14_ = FALSE;
29620 		gboolean _tmp15_ = FALSE;
29621 		ValaDataType* _tmp16_;
29622 		ValaDataType* _tmp17_;
29623 		ValaGLibValue* _tmp38_;
29624 		ValaList* _tmp39_;
29625 		ValaGLibValue* _tmp53_;
29626 		ValaCCodeExpression* _tmp54_;
29627 		ValaGLibValue* _tmp59_;
29628 		ValaCCodeExpression* _tmp60_;
29629 		ValaGLibValue* _tmp65_;
29630 		_tmp5_ = vala_unary_expression_get_inner (expr);
29631 		_tmp6_ = _tmp5_;
29632 		_tmp7_ = vala_expression_get_target_value (_tmp6_);
29633 		_tmp8_ = _tmp7_;
29634 		_tmp9_ = _vala_target_value_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp8_, VALA_TYPE_GLIB_VALUE, ValaGLibValue));
29635 		glib_value = _tmp9_;
29636 		_tmp10_ = glib_value;
29637 		_tmp11_ = vala_target_value_get_value_type ((ValaTargetValue*) _tmp10_);
29638 		_tmp12_ = _tmp11_;
29639 		_tmp13_ = vala_glib_value_new (_tmp12_, NULL, FALSE);
29640 		ref_value = _tmp13_;
29641 		_tmp16_ = vala_expression_get_target_type ((ValaExpression*) expr);
29642 		_tmp17_ = _tmp16_;
29643 		if (_tmp17_ != NULL) {
29644 			ValaGLibValue* _tmp18_;
29645 			ValaDataType* _tmp19_;
29646 			ValaDataType* _tmp20_;
29647 			_tmp18_ = glib_value;
29648 			_tmp19_ = vala_target_value_get_value_type ((ValaTargetValue*) _tmp18_);
29649 			_tmp20_ = _tmp19_;
29650 			_tmp15_ = vala_data_type_is_real_struct_type (_tmp20_);
29651 		} else {
29652 			_tmp15_ = FALSE;
29653 		}
29654 		if (_tmp15_) {
29655 			ValaGLibValue* _tmp21_;
29656 			ValaDataType* _tmp22_;
29657 			ValaDataType* _tmp23_;
29658 			gboolean _tmp24_;
29659 			gboolean _tmp25_;
29660 			ValaDataType* _tmp26_;
29661 			ValaDataType* _tmp27_;
29662 			gboolean _tmp28_;
29663 			gboolean _tmp29_;
29664 			_tmp21_ = glib_value;
29665 			_tmp22_ = vala_target_value_get_value_type ((ValaTargetValue*) _tmp21_);
29666 			_tmp23_ = _tmp22_;
29667 			_tmp24_ = vala_data_type_get_nullable (_tmp23_);
29668 			_tmp25_ = _tmp24_;
29669 			_tmp26_ = vala_expression_get_target_type ((ValaExpression*) expr);
29670 			_tmp27_ = _tmp26_;
29671 			_tmp28_ = vala_data_type_get_nullable (_tmp27_);
29672 			_tmp29_ = _tmp28_;
29673 			_tmp14_ = _tmp25_ != _tmp29_;
29674 		} else {
29675 			_tmp14_ = FALSE;
29676 		}
29677 		if (_tmp14_) {
29678 			ValaGLibValue* _tmp30_;
29679 			ValaGLibValue* _tmp31_;
29680 			ValaCCodeExpression* _tmp32_;
29681 			ValaCCodeExpression* _tmp33_;
29682 			_tmp30_ = ref_value;
29683 			_tmp31_ = glib_value;
29684 			_tmp32_ = _tmp31_->cvalue;
29685 			_tmp33_ = _vala_ccode_node_ref0 (_tmp32_);
29686 			_vala_ccode_node_unref0 (_tmp30_->cvalue);
29687 			_tmp30_->cvalue = _tmp33_;
29688 		} else {
29689 			ValaGLibValue* _tmp34_;
29690 			ValaGLibValue* _tmp35_;
29691 			ValaCCodeExpression* _tmp36_;
29692 			ValaCCodeUnaryExpression* _tmp37_;
29693 			_tmp34_ = ref_value;
29694 			_tmp35_ = glib_value;
29695 			_tmp36_ = _tmp35_->cvalue;
29696 			_tmp37_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, _tmp36_);
29697 			_vala_ccode_node_unref0 (_tmp34_->cvalue);
29698 			_tmp34_->cvalue = (ValaCCodeExpression*) _tmp37_;
29699 		}
29700 		_tmp38_ = glib_value;
29701 		_tmp39_ = _tmp38_->array_length_cvalues;
29702 		if (_tmp39_ != NULL) {
29703 			{
29704 				gint i = 0;
29705 				i = 0;
29706 				{
29707 					gboolean _tmp40_ = FALSE;
29708 					_tmp40_ = TRUE;
29709 					while (TRUE) {
29710 						ValaGLibValue* _tmp42_;
29711 						ValaList* _tmp43_;
29712 						gint _tmp44_;
29713 						gint _tmp45_;
29714 						ValaGLibValue* _tmp46_;
29715 						ValaGLibValue* _tmp47_;
29716 						ValaList* _tmp48_;
29717 						gpointer _tmp49_;
29718 						ValaCCodeExpression* _tmp50_;
29719 						ValaCCodeUnaryExpression* _tmp51_;
29720 						ValaCCodeUnaryExpression* _tmp52_;
29721 						if (!_tmp40_) {
29722 							gint _tmp41_;
29723 							_tmp41_ = i;
29724 							i = _tmp41_ + 1;
29725 						}
29726 						_tmp40_ = FALSE;
29727 						_tmp42_ = glib_value;
29728 						_tmp43_ = _tmp42_->array_length_cvalues;
29729 						_tmp44_ = vala_collection_get_size ((ValaCollection*) _tmp43_);
29730 						_tmp45_ = _tmp44_;
29731 						if (!(i < _tmp45_)) {
29732 							break;
29733 						}
29734 						_tmp46_ = ref_value;
29735 						_tmp47_ = glib_value;
29736 						_tmp48_ = _tmp47_->array_length_cvalues;
29737 						_tmp49_ = vala_list_get (_tmp48_, i);
29738 						_tmp50_ = (ValaCCodeExpression*) _tmp49_;
29739 						_tmp51_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, _tmp50_);
29740 						_tmp52_ = _tmp51_;
29741 						vala_glib_value_append_array_length_cvalue (_tmp46_, (ValaCCodeExpression*) _tmp52_);
29742 						_vala_ccode_node_unref0 (_tmp52_);
29743 						_vala_ccode_node_unref0 (_tmp50_);
29744 					}
29745 				}
29746 			}
29747 		}
29748 		_tmp53_ = glib_value;
29749 		_tmp54_ = _tmp53_->delegate_target_cvalue;
29750 		if (_tmp54_ != NULL) {
29751 			ValaGLibValue* _tmp55_;
29752 			ValaGLibValue* _tmp56_;
29753 			ValaCCodeExpression* _tmp57_;
29754 			ValaCCodeUnaryExpression* _tmp58_;
29755 			_tmp55_ = ref_value;
29756 			_tmp56_ = glib_value;
29757 			_tmp57_ = _tmp56_->delegate_target_cvalue;
29758 			_tmp58_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, _tmp57_);
29759 			_vala_ccode_node_unref0 (_tmp55_->delegate_target_cvalue);
29760 			_tmp55_->delegate_target_cvalue = (ValaCCodeExpression*) _tmp58_;
29761 		}
29762 		_tmp59_ = glib_value;
29763 		_tmp60_ = _tmp59_->delegate_target_destroy_notify_cvalue;
29764 		if (_tmp60_ != NULL) {
29765 			ValaGLibValue* _tmp61_;
29766 			ValaGLibValue* _tmp62_;
29767 			ValaCCodeExpression* _tmp63_;
29768 			ValaCCodeUnaryExpression* _tmp64_;
29769 			_tmp61_ = ref_value;
29770 			_tmp62_ = glib_value;
29771 			_tmp63_ = _tmp62_->delegate_target_destroy_notify_cvalue;
29772 			_tmp64_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, _tmp63_);
29773 			_vala_ccode_node_unref0 (_tmp61_->delegate_target_destroy_notify_cvalue);
29774 			_tmp61_->delegate_target_destroy_notify_cvalue = (ValaCCodeExpression*) _tmp64_;
29775 		}
29776 		_tmp65_ = ref_value;
29777 		vala_expression_set_target_value ((ValaExpression*) expr, (ValaTargetValue*) _tmp65_);
29778 		_vala_target_value_unref0 (ref_value);
29779 		_vala_target_value_unref0 (glib_value);
29780 		return;
29781 	}
29782 	_tmp67_ = vala_unary_expression_get_operator (expr);
29783 	_tmp68_ = _tmp67_;
29784 	if (_tmp68_ == VALA_UNARY_OPERATOR_INCREMENT) {
29785 		_tmp66_ = TRUE;
29786 	} else {
29787 		ValaUnaryOperator _tmp69_;
29788 		ValaUnaryOperator _tmp70_;
29789 		_tmp69_ = vala_unary_expression_get_operator (expr);
29790 		_tmp70_ = _tmp69_;
29791 		_tmp66_ = _tmp70_ == VALA_UNARY_OPERATOR_DECREMENT;
29792 	}
29793 	if (_tmp66_) {
29794 		ValaCCodeBinaryOperator _tmp71_ = 0;
29795 		ValaUnaryOperator _tmp72_;
29796 		ValaUnaryOperator _tmp73_;
29797 		ValaCCodeBinaryOperator op = 0;
29798 		ValaCCodeBinaryExpression* cexpr = NULL;
29799 		ValaCCodeBinaryOperator _tmp74_;
29800 		ValaExpression* _tmp75_;
29801 		ValaExpression* _tmp76_;
29802 		ValaTargetValue* _tmp77_;
29803 		ValaTargetValue* _tmp78_;
29804 		ValaCCodeExpression* _tmp79_;
29805 		ValaCCodeConstant* _tmp80_;
29806 		ValaCCodeConstant* _tmp81_;
29807 		ValaCCodeBinaryExpression* _tmp82_;
29808 		ValaCCodeBinaryExpression* _tmp83_;
29809 		ValaCCodeFunction* _tmp84_;
29810 		ValaCCodeFunction* _tmp85_;
29811 		ValaExpression* _tmp86_;
29812 		ValaExpression* _tmp87_;
29813 		ValaCCodeExpression* _tmp88_;
29814 		ValaCCodeBinaryExpression* _tmp89_;
29815 		ValaTargetValue* temp_value = NULL;
29816 		ValaExpression* _tmp90_;
29817 		ValaExpression* _tmp91_;
29818 		ValaTargetValue* _tmp92_;
29819 		ValaTargetValue* _tmp93_;
29820 		ValaTargetValue* _tmp94_;
29821 		ValaMemberAccess* ma = NULL;
29822 		ValaExpression* _tmp95_;
29823 		ValaExpression* _tmp96_;
29824 		ValaMemberAccess* _tmp97_;
29825 		ValaMemberAccess* _tmp98_;
29826 		ValaTargetValue* _tmp108_;
29827 		_tmp72_ = vala_unary_expression_get_operator (expr);
29828 		_tmp73_ = _tmp72_;
29829 		if (_tmp73_ == VALA_UNARY_OPERATOR_INCREMENT) {
29830 			_tmp71_ = VALA_CCODE_BINARY_OPERATOR_PLUS;
29831 		} else {
29832 			_tmp71_ = VALA_CCODE_BINARY_OPERATOR_MINUS;
29833 		}
29834 		op = _tmp71_;
29835 		_tmp74_ = op;
29836 		_tmp75_ = vala_unary_expression_get_inner (expr);
29837 		_tmp76_ = _tmp75_;
29838 		_tmp77_ = vala_expression_get_target_value (_tmp76_);
29839 		_tmp78_ = _tmp77_;
29840 		_tmp79_ = vala_get_cvalue_ (_tmp78_);
29841 		_tmp80_ = vala_ccode_constant_new ("1");
29842 		_tmp81_ = _tmp80_;
29843 		_tmp82_ = vala_ccode_binary_expression_new (_tmp74_, _tmp79_, (ValaCCodeExpression*) _tmp81_);
29844 		_tmp83_ = _tmp82_;
29845 		_vala_ccode_node_unref0 (_tmp81_);
29846 		cexpr = _tmp83_;
29847 		_tmp84_ = vala_ccode_base_module_get_ccode (self);
29848 		_tmp85_ = _tmp84_;
29849 		_tmp86_ = vala_unary_expression_get_inner (expr);
29850 		_tmp87_ = _tmp86_;
29851 		_tmp88_ = vala_get_cvalue (_tmp87_);
29852 		_tmp89_ = cexpr;
29853 		vala_ccode_function_add_assignment (_tmp85_, _tmp88_, (ValaCCodeExpression*) _tmp89_);
29854 		_tmp90_ = vala_unary_expression_get_inner (expr);
29855 		_tmp91_ = _tmp90_;
29856 		_tmp92_ = vala_expression_get_target_value (_tmp91_);
29857 		_tmp93_ = _tmp92_;
29858 		_tmp94_ = vala_ccode_base_module_store_temp_value (self, _tmp93_, (ValaCodeNode*) expr, NULL);
29859 		temp_value = _tmp94_;
29860 		_tmp95_ = vala_unary_expression_get_inner (expr);
29861 		_tmp96_ = _tmp95_;
29862 		_tmp97_ = vala_ccode_base_module_find_property_access (self, _tmp96_);
29863 		ma = _tmp97_;
29864 		_tmp98_ = ma;
29865 		if (_tmp98_ != NULL) {
29866 			ValaProperty* prop = NULL;
29867 			ValaMemberAccess* _tmp99_;
29868 			ValaSymbol* _tmp100_;
29869 			ValaSymbol* _tmp101_;
29870 			ValaProperty* _tmp102_;
29871 			ValaProperty* _tmp103_;
29872 			ValaMemberAccess* _tmp104_;
29873 			ValaExpression* _tmp105_;
29874 			ValaExpression* _tmp106_;
29875 			ValaTargetValue* _tmp107_;
29876 			_tmp99_ = ma;
29877 			_tmp100_ = vala_expression_get_symbol_reference ((ValaExpression*) _tmp99_);
29878 			_tmp101_ = _tmp100_;
29879 			_tmp102_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp101_, VALA_TYPE_PROPERTY, ValaProperty));
29880 			prop = _tmp102_;
29881 			_tmp103_ = prop;
29882 			_tmp104_ = ma;
29883 			_tmp105_ = vala_member_access_get_inner (_tmp104_);
29884 			_tmp106_ = _tmp105_;
29885 			_tmp107_ = temp_value;
29886 			vala_ccode_base_module_store_property (self, _tmp103_, _tmp106_, _tmp107_);
29887 			_vala_code_node_unref0 (prop);
29888 		}
29889 		_tmp108_ = temp_value;
29890 		vala_expression_set_target_value ((ValaExpression*) expr, _tmp108_);
29891 		_vala_code_node_unref0 (ma);
29892 		_vala_target_value_unref0 (temp_value);
29893 		_vala_ccode_node_unref0 (cexpr);
29894 		return;
29895 	}
29896 	_tmp109_ = vala_unary_expression_get_operator (expr);
29897 	_tmp110_ = _tmp109_;
29898 	switch (_tmp110_) {
29899 		case VALA_UNARY_OPERATOR_PLUS:
29900 		{
29901 			op = VALA_CCODE_UNARY_OPERATOR_PLUS;
29902 			break;
29903 		}
29904 		case VALA_UNARY_OPERATOR_MINUS:
29905 		{
29906 			op = VALA_CCODE_UNARY_OPERATOR_MINUS;
29907 			break;
29908 		}
29909 		case VALA_UNARY_OPERATOR_LOGICAL_NEGATION:
29910 		{
29911 			op = VALA_CCODE_UNARY_OPERATOR_LOGICAL_NEGATION;
29912 			break;
29913 		}
29914 		case VALA_UNARY_OPERATOR_BITWISE_COMPLEMENT:
29915 		{
29916 			op = VALA_CCODE_UNARY_OPERATOR_BITWISE_COMPLEMENT;
29917 			break;
29918 		}
29919 		case VALA_UNARY_OPERATOR_INCREMENT:
29920 		{
29921 			op = VALA_CCODE_UNARY_OPERATOR_PREFIX_INCREMENT;
29922 			break;
29923 		}
29924 		case VALA_UNARY_OPERATOR_DECREMENT:
29925 		{
29926 			op = VALA_CCODE_UNARY_OPERATOR_PREFIX_DECREMENT;
29927 			break;
29928 		}
29929 		default:
29930 		{
29931 			g_assert_not_reached ();
29932 		}
29933 	}
29934 	_tmp111_ = op;
29935 	_tmp112_ = vala_unary_expression_get_inner (expr);
29936 	_tmp113_ = _tmp112_;
29937 	_tmp114_ = vala_get_cvalue (_tmp113_);
29938 	_tmp115_ = vala_ccode_unary_expression_new (_tmp111_, _tmp114_);
29939 	_tmp116_ = _tmp115_;
29940 	vala_set_cvalue ((ValaExpression*) expr, (ValaCCodeExpression*) _tmp116_);
29941 	_vala_ccode_node_unref0 (_tmp116_);
29942 }
29943 
29944 static ValaCCodeExpression*
vala_ccode_base_module_real_deserialize_expression(ValaCCodeBaseModule * self,ValaDataType * type,ValaCCodeExpression * variant_expr,ValaCCodeExpression * expr,ValaCCodeExpression * error_expr,gboolean * may_fail)29945 vala_ccode_base_module_real_deserialize_expression (ValaCCodeBaseModule* self,
29946                                                     ValaDataType* type,
29947                                                     ValaCCodeExpression* variant_expr,
29948                                                     ValaCCodeExpression* expr,
29949                                                     ValaCCodeExpression* error_expr,
29950                                                     gboolean* may_fail)
29951 {
29952 	gboolean _vala_may_fail = FALSE;
29953 	g_return_val_if_fail (type != NULL, NULL);
29954 	g_return_val_if_fail (variant_expr != NULL, NULL);
29955 	g_assert_not_reached ();
29956 	if (may_fail) {
29957 		*may_fail = _vala_may_fail;
29958 	}
29959 }
29960 
29961 ValaCCodeExpression*
vala_ccode_base_module_deserialize_expression(ValaCCodeBaseModule * self,ValaDataType * type,ValaCCodeExpression * variant_expr,ValaCCodeExpression * expr,ValaCCodeExpression * error_expr,gboolean * may_fail)29962 vala_ccode_base_module_deserialize_expression (ValaCCodeBaseModule* self,
29963                                                ValaDataType* type,
29964                                                ValaCCodeExpression* variant_expr,
29965                                                ValaCCodeExpression* expr,
29966                                                ValaCCodeExpression* error_expr,
29967                                                gboolean* may_fail)
29968 {
29969 	g_return_val_if_fail (self != NULL, NULL);
29970 	return VALA_CCODE_BASE_MODULE_GET_CLASS (self)->deserialize_expression (self, type, variant_expr, expr, error_expr, may_fail);
29971 }
29972 
29973 static ValaCCodeExpression*
vala_ccode_base_module_real_serialize_expression(ValaCCodeBaseModule * self,ValaDataType * type,ValaCCodeExpression * expr)29974 vala_ccode_base_module_real_serialize_expression (ValaCCodeBaseModule* self,
29975                                                   ValaDataType* type,
29976                                                   ValaCCodeExpression* expr)
29977 {
29978 	g_return_val_if_fail (type != NULL, NULL);
29979 	g_return_val_if_fail (expr != NULL, NULL);
29980 	g_assert_not_reached ();
29981 }
29982 
29983 ValaCCodeExpression*
vala_ccode_base_module_serialize_expression(ValaCCodeBaseModule * self,ValaDataType * type,ValaCCodeExpression * expr)29984 vala_ccode_base_module_serialize_expression (ValaCCodeBaseModule* self,
29985                                              ValaDataType* type,
29986                                              ValaCCodeExpression* expr)
29987 {
29988 	g_return_val_if_fail (self != NULL, NULL);
29989 	return VALA_CCODE_BASE_MODULE_GET_CLASS (self)->serialize_expression (self, type, expr);
29990 }
29991 
29992 static void
vala_ccode_base_module_real_visit_cast_expression(ValaCodeVisitor * base,ValaCastExpression * expr)29993 vala_ccode_base_module_real_visit_cast_expression (ValaCodeVisitor* base,
29994                                                    ValaCastExpression* expr)
29995 {
29996 	ValaCCodeBaseModule * self;
29997 	gboolean _tmp0_;
29998 	gboolean _tmp1_;
29999 	ValaDataType* _tmp6_;
30000 	ValaDataType* _tmp7_;
30001 	ValaCCodeFile* _tmp8_;
30002 	ValaArrayType* array_type = NULL;
30003 	ValaDataType* _tmp9_;
30004 	ValaDataType* _tmp10_;
30005 	ValaArrayType* _tmp11_;
30006 	gboolean _tmp12_ = FALSE;
30007 	ValaArrayType* _tmp13_;
30008 	ValaCCodeExpression* innercexpr = NULL;
30009 	ValaExpression* _tmp138_;
30010 	ValaExpression* _tmp139_;
30011 	ValaCCodeExpression* _tmp140_;
30012 	ValaCCodeExpression* _tmp141_;
30013 	gboolean _tmp142_ = FALSE;
30014 	gboolean _tmp143_ = FALSE;
30015 	gboolean _tmp144_ = FALSE;
30016 	ValaDataType* _tmp145_;
30017 	ValaDataType* _tmp146_;
30018 	ValaCCodeExpression* _tmp223_;
30019 	ValaDataType* _tmp224_;
30020 	ValaDataType* _tmp225_;
30021 	gchar* _tmp226_;
30022 	gchar* _tmp227_;
30023 	ValaCCodeCastExpression* _tmp228_;
30024 	ValaCCodeCastExpression* _tmp229_;
30025 	ValaDataType* _tmp230_;
30026 	ValaDataType* _tmp231_;
30027 	self = (ValaCCodeBaseModule*) base;
30028 	g_return_if_fail (expr != NULL);
30029 	_tmp0_ = vala_cast_expression_get_is_silent_cast (expr);
30030 	_tmp1_ = _tmp0_;
30031 	if (_tmp1_) {
30032 		ValaCCodeInvalidExpression* _tmp2_;
30033 		ValaCCodeInvalidExpression* _tmp3_;
30034 		ValaSourceReference* _tmp4_;
30035 		ValaSourceReference* _tmp5_;
30036 		_tmp2_ = vala_ccode_invalid_expression_new ();
30037 		_tmp3_ = _tmp2_;
30038 		vala_set_cvalue ((ValaExpression*) expr, (ValaCCodeExpression*) _tmp3_);
30039 		_vala_ccode_node_unref0 (_tmp3_);
30040 		vala_code_node_set_error ((ValaCodeNode*) expr, TRUE);
30041 		_tmp4_ = vala_code_node_get_source_reference ((ValaCodeNode*) expr);
30042 		_tmp5_ = _tmp4_;
30043 		vala_report_error (_tmp5_, "Operation not supported for this type");
30044 		return;
30045 	}
30046 	_tmp6_ = vala_cast_expression_get_type_reference (expr);
30047 	_tmp7_ = _tmp6_;
30048 	_tmp8_ = self->cfile;
30049 	vala_ccode_base_module_generate_type_declaration (self, _tmp7_, _tmp8_);
30050 	_tmp9_ = vala_cast_expression_get_type_reference (expr);
30051 	_tmp10_ = _tmp9_;
30052 	_tmp11_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (_tmp10_, VALA_TYPE_ARRAY_TYPE) ? ((ValaArrayType*) _tmp10_) : NULL);
30053 	array_type = _tmp11_;
30054 	_tmp13_ = array_type;
30055 	if (_tmp13_ != NULL) {
30056 		ValaExpression* _tmp14_;
30057 		ValaExpression* _tmp15_;
30058 		ValaDataType* _tmp16_;
30059 		ValaDataType* _tmp17_;
30060 		_tmp14_ = vala_cast_expression_get_inner (expr);
30061 		_tmp15_ = _tmp14_;
30062 		_tmp16_ = vala_expression_get_value_type (_tmp15_);
30063 		_tmp17_ = _tmp16_;
30064 		_tmp12_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp17_, VALA_TYPE_ARRAY_TYPE);
30065 	} else {
30066 		_tmp12_ = FALSE;
30067 	}
30068 	if (_tmp12_) {
30069 		gboolean _tmp18_ = FALSE;
30070 		ValaArrayType* _tmp19_;
30071 		ValaDataType* _tmp20_;
30072 		ValaDataType* _tmp21_;
30073 		_tmp19_ = array_type;
30074 		_tmp20_ = vala_array_type_get_element_type (_tmp19_);
30075 		_tmp21_ = _tmp20_;
30076 		if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp21_, VALA_TYPE_GENERIC_TYPE)) {
30077 			_tmp18_ = TRUE;
30078 		} else {
30079 			ValaExpression* _tmp22_;
30080 			ValaExpression* _tmp23_;
30081 			ValaDataType* _tmp24_;
30082 			ValaDataType* _tmp25_;
30083 			ValaDataType* _tmp26_;
30084 			ValaDataType* _tmp27_;
30085 			_tmp22_ = vala_cast_expression_get_inner (expr);
30086 			_tmp23_ = _tmp22_;
30087 			_tmp24_ = vala_expression_get_value_type (_tmp23_);
30088 			_tmp25_ = _tmp24_;
30089 			_tmp26_ = vala_array_type_get_element_type (G_TYPE_CHECK_INSTANCE_CAST (_tmp25_, VALA_TYPE_ARRAY_TYPE, ValaArrayType));
30090 			_tmp27_ = _tmp26_;
30091 			_tmp18_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp27_, VALA_TYPE_GENERIC_TYPE);
30092 		}
30093 		if (_tmp18_) {
30094 			{
30095 				gint dim = 0;
30096 				dim = 1;
30097 				{
30098 					gboolean _tmp28_ = FALSE;
30099 					_tmp28_ = TRUE;
30100 					while (TRUE) {
30101 						ValaArrayType* _tmp30_;
30102 						gint _tmp31_;
30103 						gint _tmp32_;
30104 						ValaExpression* _tmp33_;
30105 						ValaExpression* _tmp34_;
30106 						ValaCCodeExpression* _tmp35_;
30107 						ValaCCodeExpression* _tmp36_;
30108 						if (!_tmp28_) {
30109 							gint _tmp29_;
30110 							_tmp29_ = dim;
30111 							dim = _tmp29_ + 1;
30112 						}
30113 						_tmp28_ = FALSE;
30114 						_tmp30_ = array_type;
30115 						_tmp31_ = vala_array_type_get_rank (_tmp30_);
30116 						_tmp32_ = _tmp31_;
30117 						if (!(dim <= _tmp32_)) {
30118 							break;
30119 						}
30120 						_tmp33_ = vala_cast_expression_get_inner (expr);
30121 						_tmp34_ = _tmp33_;
30122 						_tmp35_ = vala_ccode_base_module_get_array_length_cexpression (self, _tmp34_, dim);
30123 						_tmp36_ = _tmp35_;
30124 						vala_append_array_length ((ValaExpression*) expr, _tmp36_);
30125 						_vala_ccode_node_unref0 (_tmp36_);
30126 					}
30127 				}
30128 			}
30129 		} else {
30130 			ValaCCodeFunctionCall* sizeof_to = NULL;
30131 			ValaCCodeIdentifier* _tmp37_;
30132 			ValaCCodeIdentifier* _tmp38_;
30133 			ValaCCodeFunctionCall* _tmp39_;
30134 			ValaCCodeFunctionCall* _tmp40_;
30135 			ValaCCodeFunctionCall* _tmp41_;
30136 			ValaArrayType* _tmp42_;
30137 			ValaDataType* _tmp43_;
30138 			ValaDataType* _tmp44_;
30139 			gchar* _tmp45_;
30140 			gchar* _tmp46_;
30141 			ValaCCodeConstant* _tmp47_;
30142 			ValaCCodeConstant* _tmp48_;
30143 			ValaCCodeFunctionCall* sizeof_from = NULL;
30144 			ValaCCodeIdentifier* _tmp49_;
30145 			ValaCCodeIdentifier* _tmp50_;
30146 			ValaCCodeFunctionCall* _tmp51_;
30147 			ValaCCodeFunctionCall* _tmp52_;
30148 			ValaCCodeFunctionCall* _tmp53_;
30149 			ValaExpression* _tmp54_;
30150 			ValaExpression* _tmp55_;
30151 			ValaDataType* _tmp56_;
30152 			ValaDataType* _tmp57_;
30153 			ValaDataType* _tmp58_;
30154 			ValaDataType* _tmp59_;
30155 			gchar* _tmp60_;
30156 			gchar* _tmp61_;
30157 			ValaCCodeConstant* _tmp62_;
30158 			ValaCCodeConstant* _tmp63_;
30159 			_tmp37_ = vala_ccode_identifier_new ("sizeof");
30160 			_tmp38_ = _tmp37_;
30161 			_tmp39_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp38_);
30162 			_tmp40_ = _tmp39_;
30163 			_vala_ccode_node_unref0 (_tmp38_);
30164 			sizeof_to = _tmp40_;
30165 			_tmp41_ = sizeof_to;
30166 			_tmp42_ = array_type;
30167 			_tmp43_ = vala_array_type_get_element_type (_tmp42_);
30168 			_tmp44_ = _tmp43_;
30169 			_tmp45_ = vala_get_ccode_name ((ValaCodeNode*) _tmp44_);
30170 			_tmp46_ = _tmp45_;
30171 			_tmp47_ = vala_ccode_constant_new (_tmp46_);
30172 			_tmp48_ = _tmp47_;
30173 			vala_ccode_function_call_add_argument (_tmp41_, (ValaCCodeExpression*) _tmp48_);
30174 			_vala_ccode_node_unref0 (_tmp48_);
30175 			_g_free0 (_tmp46_);
30176 			_tmp49_ = vala_ccode_identifier_new ("sizeof");
30177 			_tmp50_ = _tmp49_;
30178 			_tmp51_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp50_);
30179 			_tmp52_ = _tmp51_;
30180 			_vala_ccode_node_unref0 (_tmp50_);
30181 			sizeof_from = _tmp52_;
30182 			_tmp53_ = sizeof_from;
30183 			_tmp54_ = vala_cast_expression_get_inner (expr);
30184 			_tmp55_ = _tmp54_;
30185 			_tmp56_ = vala_expression_get_value_type (_tmp55_);
30186 			_tmp57_ = _tmp56_;
30187 			_tmp58_ = vala_array_type_get_element_type (G_TYPE_CHECK_INSTANCE_CAST (_tmp57_, VALA_TYPE_ARRAY_TYPE, ValaArrayType));
30188 			_tmp59_ = _tmp58_;
30189 			_tmp60_ = vala_get_ccode_name ((ValaCodeNode*) _tmp59_);
30190 			_tmp61_ = _tmp60_;
30191 			_tmp62_ = vala_ccode_constant_new (_tmp61_);
30192 			_tmp63_ = _tmp62_;
30193 			vala_ccode_function_call_add_argument (_tmp53_, (ValaCCodeExpression*) _tmp63_);
30194 			_vala_ccode_node_unref0 (_tmp63_);
30195 			_g_free0 (_tmp61_);
30196 			{
30197 				gint dim = 0;
30198 				dim = 1;
30199 				{
30200 					gboolean _tmp64_ = FALSE;
30201 					_tmp64_ = TRUE;
30202 					while (TRUE) {
30203 						ValaArrayType* _tmp66_;
30204 						gint _tmp67_;
30205 						gint _tmp68_;
30206 						ValaExpression* _tmp69_;
30207 						ValaExpression* _tmp70_;
30208 						ValaCCodeExpression* _tmp71_;
30209 						ValaCCodeExpression* _tmp72_;
30210 						ValaCCodeFunctionCall* _tmp73_;
30211 						ValaCCodeBinaryExpression* _tmp74_;
30212 						ValaCCodeBinaryExpression* _tmp75_;
30213 						ValaCCodeFunctionCall* _tmp76_;
30214 						ValaCCodeBinaryExpression* _tmp77_;
30215 						ValaCCodeBinaryExpression* _tmp78_;
30216 						if (!_tmp64_) {
30217 							gint _tmp65_;
30218 							_tmp65_ = dim;
30219 							dim = _tmp65_ + 1;
30220 						}
30221 						_tmp64_ = FALSE;
30222 						_tmp66_ = array_type;
30223 						_tmp67_ = vala_array_type_get_rank (_tmp66_);
30224 						_tmp68_ = _tmp67_;
30225 						if (!(dim <= _tmp68_)) {
30226 							break;
30227 						}
30228 						_tmp69_ = vala_cast_expression_get_inner (expr);
30229 						_tmp70_ = _tmp69_;
30230 						_tmp71_ = vala_ccode_base_module_get_array_length_cexpression (self, _tmp70_, dim);
30231 						_tmp72_ = _tmp71_;
30232 						_tmp73_ = sizeof_from;
30233 						_tmp74_ = vala_ccode_binary_expression_new (VALA_CCODE_BINARY_OPERATOR_MUL, _tmp72_, (ValaCCodeExpression*) _tmp73_);
30234 						_tmp75_ = _tmp74_;
30235 						_tmp76_ = sizeof_to;
30236 						_tmp77_ = vala_ccode_binary_expression_new (VALA_CCODE_BINARY_OPERATOR_DIV, (ValaCCodeExpression*) _tmp75_, (ValaCCodeExpression*) _tmp76_);
30237 						_tmp78_ = _tmp77_;
30238 						vala_append_array_length ((ValaExpression*) expr, (ValaCCodeExpression*) _tmp78_);
30239 						_vala_ccode_node_unref0 (_tmp78_);
30240 						_vala_ccode_node_unref0 (_tmp75_);
30241 						_vala_ccode_node_unref0 (_tmp72_);
30242 					}
30243 				}
30244 			}
30245 			_vala_ccode_node_unref0 (sizeof_from);
30246 			_vala_ccode_node_unref0 (sizeof_to);
30247 		}
30248 	} else {
30249 		ValaArrayType* _tmp79_;
30250 		_tmp79_ = array_type;
30251 		if (_tmp79_ != NULL) {
30252 			ValaCCodeExpression* array_length_expr = NULL;
30253 			ValaCCodeFunctionCall* sizeof_to = NULL;
30254 			ValaCCodeIdentifier* _tmp80_;
30255 			ValaCCodeIdentifier* _tmp81_;
30256 			ValaCCodeFunctionCall* _tmp82_;
30257 			ValaCCodeFunctionCall* _tmp83_;
30258 			ValaCCodeFunctionCall* _tmp84_;
30259 			ValaArrayType* _tmp85_;
30260 			ValaDataType* _tmp86_;
30261 			ValaDataType* _tmp87_;
30262 			gchar* _tmp88_;
30263 			gchar* _tmp89_;
30264 			ValaCCodeConstant* _tmp90_;
30265 			ValaCCodeConstant* _tmp91_;
30266 			ValaCCodeFunctionCall* sizeof_from = NULL;
30267 			ValaCCodeIdentifier* _tmp92_;
30268 			ValaCCodeIdentifier* _tmp93_;
30269 			ValaCCodeFunctionCall* _tmp94_;
30270 			ValaCCodeFunctionCall* _tmp95_;
30271 			ValaDataType* value_type = NULL;
30272 			ValaExpression* _tmp96_;
30273 			ValaExpression* _tmp97_;
30274 			ValaDataType* _tmp98_;
30275 			ValaDataType* _tmp99_;
30276 			ValaDataType* _tmp100_;
30277 			ValaDataType* _tmp101_;
30278 			_tmp80_ = vala_ccode_identifier_new ("sizeof");
30279 			_tmp81_ = _tmp80_;
30280 			_tmp82_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp81_);
30281 			_tmp83_ = _tmp82_;
30282 			_vala_ccode_node_unref0 (_tmp81_);
30283 			sizeof_to = _tmp83_;
30284 			_tmp84_ = sizeof_to;
30285 			_tmp85_ = array_type;
30286 			_tmp86_ = vala_array_type_get_element_type (_tmp85_);
30287 			_tmp87_ = _tmp86_;
30288 			_tmp88_ = vala_get_ccode_name ((ValaCodeNode*) _tmp87_);
30289 			_tmp89_ = _tmp88_;
30290 			_tmp90_ = vala_ccode_constant_new (_tmp89_);
30291 			_tmp91_ = _tmp90_;
30292 			vala_ccode_function_call_add_argument (_tmp84_, (ValaCCodeExpression*) _tmp91_);
30293 			_vala_ccode_node_unref0 (_tmp91_);
30294 			_g_free0 (_tmp89_);
30295 			_tmp92_ = vala_ccode_identifier_new ("sizeof");
30296 			_tmp93_ = _tmp92_;
30297 			_tmp94_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp93_);
30298 			_tmp95_ = _tmp94_;
30299 			_vala_ccode_node_unref0 (_tmp93_);
30300 			sizeof_from = _tmp95_;
30301 			_tmp96_ = vala_cast_expression_get_inner (expr);
30302 			_tmp97_ = _tmp96_;
30303 			_tmp98_ = vala_expression_get_value_type (_tmp97_);
30304 			_tmp99_ = _tmp98_;
30305 			_tmp100_ = _vala_code_node_ref0 (_tmp99_);
30306 			value_type = _tmp100_;
30307 			_tmp101_ = value_type;
30308 			if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp101_, VALA_TYPE_VALUE_TYPE)) {
30309 				ValaCCodeFunctionCall* _tmp102_;
30310 				ValaDataType* _tmp103_;
30311 				ValaTypeSymbol* _tmp104_;
30312 				ValaTypeSymbol* _tmp105_;
30313 				gchar* _tmp106_;
30314 				gchar* _tmp107_;
30315 				ValaCCodeConstant* _tmp108_;
30316 				ValaCCodeConstant* _tmp109_;
30317 				ValaCCodeFunctionCall* _tmp110_;
30318 				ValaCCodeFunctionCall* _tmp111_;
30319 				ValaCCodeBinaryExpression* _tmp112_;
30320 				_tmp102_ = sizeof_from;
30321 				_tmp103_ = value_type;
30322 				_tmp104_ = vala_data_type_get_type_symbol (_tmp103_);
30323 				_tmp105_ = _tmp104_;
30324 				_tmp106_ = vala_get_ccode_name ((ValaCodeNode*) _tmp105_);
30325 				_tmp107_ = _tmp106_;
30326 				_tmp108_ = vala_ccode_constant_new (_tmp107_);
30327 				_tmp109_ = _tmp108_;
30328 				vala_ccode_function_call_add_argument (_tmp102_, (ValaCCodeExpression*) _tmp109_);
30329 				_vala_ccode_node_unref0 (_tmp109_);
30330 				_g_free0 (_tmp107_);
30331 				_tmp110_ = sizeof_from;
30332 				_tmp111_ = sizeof_to;
30333 				_tmp112_ = vala_ccode_binary_expression_new (VALA_CCODE_BINARY_OPERATOR_DIV, (ValaCCodeExpression*) _tmp110_, (ValaCCodeExpression*) _tmp111_);
30334 				_vala_ccode_node_unref0 (array_length_expr);
30335 				array_length_expr = (ValaCCodeExpression*) _tmp112_;
30336 			} else {
30337 				gboolean _tmp113_ = FALSE;
30338 				ValaDataType* _tmp114_;
30339 				_tmp114_ = value_type;
30340 				if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp114_, VALA_TYPE_POINTER_TYPE)) {
30341 					ValaDataType* _tmp115_;
30342 					ValaDataType* _tmp116_;
30343 					ValaDataType* _tmp117_;
30344 					_tmp115_ = value_type;
30345 					_tmp116_ = vala_pointer_type_get_base_type (G_TYPE_CHECK_INSTANCE_CAST (_tmp115_, VALA_TYPE_POINTER_TYPE, ValaPointerType));
30346 					_tmp117_ = _tmp116_;
30347 					_tmp113_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp117_, VALA_TYPE_VALUE_TYPE);
30348 				} else {
30349 					_tmp113_ = FALSE;
30350 				}
30351 				if (_tmp113_) {
30352 					ValaCCodeFunctionCall* _tmp118_;
30353 					ValaDataType* _tmp119_;
30354 					ValaDataType* _tmp120_;
30355 					ValaDataType* _tmp121_;
30356 					ValaTypeSymbol* _tmp122_;
30357 					ValaTypeSymbol* _tmp123_;
30358 					gchar* _tmp124_;
30359 					gchar* _tmp125_;
30360 					ValaCCodeConstant* _tmp126_;
30361 					ValaCCodeConstant* _tmp127_;
30362 					ValaCCodeFunctionCall* _tmp128_;
30363 					ValaCCodeFunctionCall* _tmp129_;
30364 					ValaCCodeBinaryExpression* _tmp130_;
30365 					_tmp118_ = sizeof_from;
30366 					_tmp119_ = value_type;
30367 					_tmp120_ = vala_pointer_type_get_base_type (G_TYPE_CHECK_INSTANCE_CAST (_tmp119_, VALA_TYPE_POINTER_TYPE, ValaPointerType));
30368 					_tmp121_ = _tmp120_;
30369 					_tmp122_ = vala_data_type_get_type_symbol (_tmp121_);
30370 					_tmp123_ = _tmp122_;
30371 					_tmp124_ = vala_get_ccode_name ((ValaCodeNode*) _tmp123_);
30372 					_tmp125_ = _tmp124_;
30373 					_tmp126_ = vala_ccode_constant_new (_tmp125_);
30374 					_tmp127_ = _tmp126_;
30375 					vala_ccode_function_call_add_argument (_tmp118_, (ValaCCodeExpression*) _tmp127_);
30376 					_vala_ccode_node_unref0 (_tmp127_);
30377 					_g_free0 (_tmp125_);
30378 					_tmp128_ = sizeof_from;
30379 					_tmp129_ = sizeof_to;
30380 					_tmp130_ = vala_ccode_binary_expression_new (VALA_CCODE_BINARY_OPERATOR_DIV, (ValaCCodeExpression*) _tmp128_, (ValaCCodeExpression*) _tmp129_);
30381 					_vala_ccode_node_unref0 (array_length_expr);
30382 					array_length_expr = (ValaCCodeExpression*) _tmp130_;
30383 				} else {
30384 					ValaCCodeConstant* _tmp131_;
30385 					_tmp131_ = vala_ccode_constant_new ("-1");
30386 					_vala_ccode_node_unref0 (array_length_expr);
30387 					array_length_expr = (ValaCCodeExpression*) _tmp131_;
30388 				}
30389 			}
30390 			{
30391 				gint dim = 0;
30392 				dim = 1;
30393 				{
30394 					gboolean _tmp132_ = FALSE;
30395 					_tmp132_ = TRUE;
30396 					while (TRUE) {
30397 						ValaArrayType* _tmp134_;
30398 						gint _tmp135_;
30399 						gint _tmp136_;
30400 						ValaCCodeExpression* _tmp137_;
30401 						if (!_tmp132_) {
30402 							gint _tmp133_;
30403 							_tmp133_ = dim;
30404 							dim = _tmp133_ + 1;
30405 						}
30406 						_tmp132_ = FALSE;
30407 						_tmp134_ = array_type;
30408 						_tmp135_ = vala_array_type_get_rank (_tmp134_);
30409 						_tmp136_ = _tmp135_;
30410 						if (!(dim <= _tmp136_)) {
30411 							break;
30412 						}
30413 						_tmp137_ = array_length_expr;
30414 						vala_append_array_length ((ValaExpression*) expr, _tmp137_);
30415 					}
30416 				}
30417 			}
30418 			_vala_code_node_unref0 (value_type);
30419 			_vala_ccode_node_unref0 (sizeof_from);
30420 			_vala_ccode_node_unref0 (sizeof_to);
30421 			_vala_ccode_node_unref0 (array_length_expr);
30422 		}
30423 	}
30424 	_tmp138_ = vala_cast_expression_get_inner (expr);
30425 	_tmp139_ = _tmp138_;
30426 	_tmp140_ = vala_get_cvalue (_tmp139_);
30427 	_tmp141_ = _vala_ccode_node_ref0 (_tmp140_);
30428 	innercexpr = _tmp141_;
30429 	_tmp145_ = vala_cast_expression_get_type_reference (expr);
30430 	_tmp146_ = _tmp145_;
30431 	if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp146_, VALA_TYPE_VALUE_TYPE)) {
30432 		ValaDataType* _tmp147_;
30433 		ValaDataType* _tmp148_;
30434 		gboolean _tmp149_;
30435 		gboolean _tmp150_;
30436 		_tmp147_ = vala_cast_expression_get_type_reference (expr);
30437 		_tmp148_ = _tmp147_;
30438 		_tmp149_ = vala_data_type_get_nullable (_tmp148_);
30439 		_tmp150_ = _tmp149_;
30440 		_tmp144_ = !_tmp150_;
30441 	} else {
30442 		_tmp144_ = FALSE;
30443 	}
30444 	if (_tmp144_) {
30445 		ValaExpression* _tmp151_;
30446 		ValaExpression* _tmp152_;
30447 		ValaDataType* _tmp153_;
30448 		ValaDataType* _tmp154_;
30449 		_tmp151_ = vala_cast_expression_get_inner (expr);
30450 		_tmp152_ = _tmp151_;
30451 		_tmp153_ = vala_expression_get_value_type (_tmp152_);
30452 		_tmp154_ = _tmp153_;
30453 		_tmp143_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp154_, VALA_TYPE_VALUE_TYPE);
30454 	} else {
30455 		_tmp143_ = FALSE;
30456 	}
30457 	if (_tmp143_) {
30458 		ValaExpression* _tmp155_;
30459 		ValaExpression* _tmp156_;
30460 		ValaDataType* _tmp157_;
30461 		ValaDataType* _tmp158_;
30462 		gboolean _tmp159_;
30463 		gboolean _tmp160_;
30464 		_tmp155_ = vala_cast_expression_get_inner (expr);
30465 		_tmp156_ = _tmp155_;
30466 		_tmp157_ = vala_expression_get_value_type (_tmp156_);
30467 		_tmp158_ = _tmp157_;
30468 		_tmp159_ = vala_data_type_get_nullable (_tmp158_);
30469 		_tmp160_ = _tmp159_;
30470 		_tmp142_ = _tmp160_;
30471 	} else {
30472 		_tmp142_ = FALSE;
30473 	}
30474 	if (_tmp142_) {
30475 		ValaExpression* inner_expr = NULL;
30476 		ValaExpression* _tmp161_;
30477 		ValaExpression* _tmp162_;
30478 		gboolean _tmp167_ = FALSE;
30479 		ValaExpression* _tmp168_;
30480 		ValaDataType* _tmp169_;
30481 		ValaDataType* _tmp170_;
30482 		gboolean _tmp171_;
30483 		gboolean _tmp172_;
30484 		ValaCCodeExpression* _tmp188_;
30485 		ValaCCodeUnaryExpression* _tmp189_;
30486 		_tmp161_ = vala_cast_expression_get_inner (expr);
30487 		_tmp162_ = _tmp161_;
30488 		inner_expr = _tmp162_;
30489 		while (TRUE) {
30490 			ValaExpression* _tmp163_;
30491 			ValaExpression* _tmp164_;
30492 			ValaExpression* _tmp165_;
30493 			ValaExpression* _tmp166_;
30494 			_tmp163_ = inner_expr;
30495 			if (!G_TYPE_CHECK_INSTANCE_TYPE (_tmp163_, VALA_TYPE_CAST_EXPRESSION)) {
30496 				break;
30497 			}
30498 			_tmp164_ = inner_expr;
30499 			_tmp165_ = vala_cast_expression_get_inner (G_TYPE_CHECK_INSTANCE_CAST (_tmp164_, VALA_TYPE_CAST_EXPRESSION, ValaCastExpression));
30500 			_tmp166_ = _tmp165_;
30501 			inner_expr = _tmp166_;
30502 		}
30503 		_tmp168_ = inner_expr;
30504 		_tmp169_ = vala_expression_get_value_type (_tmp168_);
30505 		_tmp170_ = _tmp169_;
30506 		_tmp171_ = vala_data_type_get_value_owned (_tmp170_);
30507 		_tmp172_ = _tmp171_;
30508 		if (_tmp172_) {
30509 			gboolean _tmp173_ = FALSE;
30510 			ValaExpression* _tmp174_;
30511 			ValaSymbol* _tmp175_;
30512 			ValaSymbol* _tmp176_;
30513 			_tmp174_ = inner_expr;
30514 			_tmp175_ = vala_expression_get_symbol_reference (_tmp174_);
30515 			_tmp176_ = _tmp175_;
30516 			if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp176_, VALA_TYPE_VARIABLE)) {
30517 				_tmp173_ = TRUE;
30518 			} else {
30519 				ValaExpression* _tmp177_;
30520 				_tmp177_ = inner_expr;
30521 				_tmp173_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp177_, VALA_TYPE_ELEMENT_ACCESS);
30522 			}
30523 			_tmp167_ = !_tmp173_;
30524 		} else {
30525 			_tmp167_ = FALSE;
30526 		}
30527 		if (_tmp167_) {
30528 			ValaGLibValue* value = NULL;
30529 			ValaVoidType* _tmp178_;
30530 			ValaVoidType* _tmp179_;
30531 			ValaPointerType* _tmp180_;
30532 			ValaPointerType* _tmp181_;
30533 			ValaCCodeExpression* _tmp182_;
30534 			ValaGLibValue* _tmp183_;
30535 			ValaGLibValue* _tmp184_;
30536 			ValaArrayList* _tmp185_;
30537 			ValaArrayList* _tmp186_;
30538 			ValaGLibValue* _tmp187_;
30539 			_tmp178_ = vala_void_type_new (NULL);
30540 			_tmp179_ = _tmp178_;
30541 			_tmp180_ = vala_pointer_type_new ((ValaDataType*) _tmp179_, NULL);
30542 			_tmp181_ = _tmp180_;
30543 			_tmp182_ = innercexpr;
30544 			_tmp183_ = vala_glib_value_new ((ValaDataType*) _tmp181_, _tmp182_, FALSE);
30545 			_tmp184_ = _tmp183_;
30546 			_vala_code_node_unref0 (_tmp181_);
30547 			_vala_code_node_unref0 (_tmp179_);
30548 			value = _tmp184_;
30549 			_tmp185_ = vala_ccode_base_module_get_temp_ref_values (self);
30550 			_tmp186_ = _tmp185_;
30551 			_tmp187_ = value;
30552 			vala_list_insert ((ValaList*) _tmp186_, 0, (ValaTargetValue*) _tmp187_);
30553 			_vala_target_value_unref0 (value);
30554 		}
30555 		_tmp188_ = innercexpr;
30556 		_tmp189_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_POINTER_INDIRECTION, _tmp188_);
30557 		_vala_ccode_node_unref0 (innercexpr);
30558 		innercexpr = (ValaCCodeExpression*) _tmp189_;
30559 	} else {
30560 		gboolean _tmp190_ = FALSE;
30561 		gboolean _tmp191_ = FALSE;
30562 		ValaDataType* _tmp192_;
30563 		ValaDataType* _tmp193_;
30564 		_tmp192_ = vala_cast_expression_get_type_reference (expr);
30565 		_tmp193_ = _tmp192_;
30566 		if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp193_, VALA_TYPE_VALUE_TYPE)) {
30567 			ValaDataType* _tmp194_;
30568 			ValaDataType* _tmp195_;
30569 			gboolean _tmp196_;
30570 			gboolean _tmp197_;
30571 			_tmp194_ = vala_cast_expression_get_type_reference (expr);
30572 			_tmp195_ = _tmp194_;
30573 			_tmp196_ = vala_data_type_get_nullable (_tmp195_);
30574 			_tmp197_ = _tmp196_;
30575 			_tmp191_ = _tmp197_;
30576 		} else {
30577 			_tmp191_ = FALSE;
30578 		}
30579 		if (_tmp191_) {
30580 			ValaExpression* _tmp198_;
30581 			ValaExpression* _tmp199_;
30582 			ValaDataType* _tmp200_;
30583 			ValaDataType* _tmp201_;
30584 			_tmp198_ = vala_cast_expression_get_inner (expr);
30585 			_tmp199_ = _tmp198_;
30586 			_tmp200_ = vala_expression_get_value_type (_tmp199_);
30587 			_tmp201_ = _tmp200_;
30588 			_tmp190_ = vala_data_type_is_real_non_null_struct_type (_tmp201_);
30589 		} else {
30590 			_tmp190_ = FALSE;
30591 		}
30592 		if (_tmp190_) {
30593 			ValaCCodeExpression* _tmp202_;
30594 			ValaCCodeUnaryExpression* _tmp203_;
30595 			_tmp202_ = innercexpr;
30596 			_tmp203_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, _tmp202_);
30597 			_vala_ccode_node_unref0 (innercexpr);
30598 			innercexpr = (ValaCCodeExpression*) _tmp203_;
30599 		} else {
30600 			gboolean _tmp204_ = FALSE;
30601 			gboolean _tmp205_ = FALSE;
30602 			gboolean _tmp206_ = FALSE;
30603 			ValaDataType* _tmp207_;
30604 			ValaDataType* _tmp208_;
30605 			_tmp207_ = vala_cast_expression_get_type_reference (expr);
30606 			_tmp208_ = _tmp207_;
30607 			if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp208_, VALA_TYPE_ARRAY_TYPE)) {
30608 				ValaExpression* _tmp209_;
30609 				ValaExpression* _tmp210_;
30610 				_tmp209_ = vala_cast_expression_get_inner (expr);
30611 				_tmp210_ = _tmp209_;
30612 				_tmp206_ = !G_TYPE_CHECK_INSTANCE_TYPE (_tmp210_, VALA_TYPE_LITERAL);
30613 			} else {
30614 				_tmp206_ = FALSE;
30615 			}
30616 			if (_tmp206_) {
30617 				ValaExpression* _tmp211_;
30618 				ValaExpression* _tmp212_;
30619 				ValaDataType* _tmp213_;
30620 				ValaDataType* _tmp214_;
30621 				_tmp211_ = vala_cast_expression_get_inner (expr);
30622 				_tmp212_ = _tmp211_;
30623 				_tmp213_ = vala_expression_get_value_type (_tmp212_);
30624 				_tmp214_ = _tmp213_;
30625 				_tmp205_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp214_, VALA_TYPE_VALUE_TYPE);
30626 			} else {
30627 				_tmp205_ = FALSE;
30628 			}
30629 			if (_tmp205_) {
30630 				ValaExpression* _tmp215_;
30631 				ValaExpression* _tmp216_;
30632 				ValaDataType* _tmp217_;
30633 				ValaDataType* _tmp218_;
30634 				gboolean _tmp219_;
30635 				gboolean _tmp220_;
30636 				_tmp215_ = vala_cast_expression_get_inner (expr);
30637 				_tmp216_ = _tmp215_;
30638 				_tmp217_ = vala_expression_get_value_type (_tmp216_);
30639 				_tmp218_ = _tmp217_;
30640 				_tmp219_ = vala_data_type_get_nullable (_tmp218_);
30641 				_tmp220_ = _tmp219_;
30642 				_tmp204_ = !_tmp220_;
30643 			} else {
30644 				_tmp204_ = FALSE;
30645 			}
30646 			if (_tmp204_) {
30647 				ValaCCodeExpression* _tmp221_;
30648 				ValaCCodeUnaryExpression* _tmp222_;
30649 				_tmp221_ = innercexpr;
30650 				_tmp222_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, _tmp221_);
30651 				_vala_ccode_node_unref0 (innercexpr);
30652 				innercexpr = (ValaCCodeExpression*) _tmp222_;
30653 			}
30654 		}
30655 	}
30656 	_tmp223_ = innercexpr;
30657 	_tmp224_ = vala_cast_expression_get_type_reference (expr);
30658 	_tmp225_ = _tmp224_;
30659 	_tmp226_ = vala_get_ccode_name ((ValaCodeNode*) _tmp225_);
30660 	_tmp227_ = _tmp226_;
30661 	_tmp228_ = vala_ccode_cast_expression_new (_tmp223_, _tmp227_);
30662 	_tmp229_ = _tmp228_;
30663 	vala_set_cvalue ((ValaExpression*) expr, (ValaCCodeExpression*) _tmp229_);
30664 	_vala_ccode_node_unref0 (_tmp229_);
30665 	_g_free0 (_tmp227_);
30666 	_tmp230_ = vala_cast_expression_get_type_reference (expr);
30667 	_tmp231_ = _tmp230_;
30668 	if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp231_, VALA_TYPE_DELEGATE_TYPE)) {
30669 		ValaCCodeExpression* target = NULL;
30670 		ValaExpression* _tmp232_;
30671 		ValaExpression* _tmp233_;
30672 		ValaCCodeExpression* _tmp234_;
30673 		ValaCCodeExpression* _tmp235_;
30674 		ValaCCodeExpression* _tmp236_;
30675 		ValaCCodeExpression* target_destroy_notify = NULL;
30676 		ValaExpression* _tmp240_;
30677 		ValaExpression* _tmp241_;
30678 		ValaCCodeExpression* _tmp242_;
30679 		ValaCCodeExpression* _tmp243_;
30680 		ValaCCodeExpression* _tmp244_;
30681 		_tmp232_ = vala_cast_expression_get_inner (expr);
30682 		_tmp233_ = _tmp232_;
30683 		_tmp234_ = vala_get_delegate_target (_tmp233_);
30684 		_tmp235_ = _vala_ccode_node_ref0 (_tmp234_);
30685 		target = _tmp235_;
30686 		_tmp236_ = target;
30687 		if (_tmp236_ != NULL) {
30688 			ValaCCodeExpression* _tmp237_;
30689 			_tmp237_ = target;
30690 			vala_set_delegate_target ((ValaExpression*) expr, _tmp237_);
30691 		} else {
30692 			ValaCCodeConstant* _tmp238_;
30693 			ValaCCodeConstant* _tmp239_;
30694 			_tmp238_ = vala_ccode_constant_new ("NULL");
30695 			_tmp239_ = _tmp238_;
30696 			vala_set_delegate_target ((ValaExpression*) expr, (ValaCCodeExpression*) _tmp239_);
30697 			_vala_ccode_node_unref0 (_tmp239_);
30698 		}
30699 		_tmp240_ = vala_cast_expression_get_inner (expr);
30700 		_tmp241_ = _tmp240_;
30701 		_tmp242_ = vala_get_delegate_target_destroy_notify (_tmp241_);
30702 		_tmp243_ = _vala_ccode_node_ref0 (_tmp242_);
30703 		target_destroy_notify = _tmp243_;
30704 		_tmp244_ = target_destroy_notify;
30705 		if (_tmp244_ != NULL) {
30706 			ValaCCodeExpression* _tmp245_;
30707 			_tmp245_ = target_destroy_notify;
30708 			vala_set_delegate_target_destroy_notify ((ValaExpression*) expr, _tmp245_);
30709 		} else {
30710 			ValaCCodeConstant* _tmp246_;
30711 			ValaCCodeConstant* _tmp247_;
30712 			_tmp246_ = vala_ccode_constant_new ("NULL");
30713 			_tmp247_ = _tmp246_;
30714 			vala_set_delegate_target_destroy_notify ((ValaExpression*) expr, (ValaCCodeExpression*) _tmp247_);
30715 			_vala_ccode_node_unref0 (_tmp247_);
30716 		}
30717 		_vala_ccode_node_unref0 (target_destroy_notify);
30718 		_vala_ccode_node_unref0 (target);
30719 	}
30720 	_vala_ccode_node_unref0 (innercexpr);
30721 	_vala_code_node_unref0 (array_type);
30722 }
30723 
30724 static void
vala_ccode_base_module_real_visit_named_argument(ValaCodeVisitor * base,ValaNamedArgument * expr)30725 vala_ccode_base_module_real_visit_named_argument (ValaCodeVisitor* base,
30726                                                   ValaNamedArgument* expr)
30727 {
30728 	ValaCCodeBaseModule * self;
30729 	ValaExpression* _tmp0_;
30730 	ValaExpression* _tmp1_;
30731 	ValaCCodeExpression* _tmp2_;
30732 	self = (ValaCCodeBaseModule*) base;
30733 	g_return_if_fail (expr != NULL);
30734 	_tmp0_ = vala_named_argument_get_inner (expr);
30735 	_tmp1_ = _tmp0_;
30736 	_tmp2_ = vala_get_cvalue (_tmp1_);
30737 	vala_set_cvalue ((ValaExpression*) expr, _tmp2_);
30738 }
30739 
30740 static void
vala_ccode_base_module_real_visit_pointer_indirection(ValaCodeVisitor * base,ValaPointerIndirection * expr)30741 vala_ccode_base_module_real_visit_pointer_indirection (ValaCodeVisitor* base,
30742                                                        ValaPointerIndirection* expr)
30743 {
30744 	ValaCCodeBaseModule * self;
30745 	ValaExpression* _tmp0_;
30746 	ValaExpression* _tmp1_;
30747 	ValaCCodeExpression* _tmp2_;
30748 	ValaCCodeUnaryExpression* _tmp3_;
30749 	ValaCCodeUnaryExpression* _tmp4_;
30750 	ValaTargetValue* _tmp5_;
30751 	ValaTargetValue* _tmp6_;
30752 	ValaExpression* _tmp7_;
30753 	ValaExpression* _tmp8_;
30754 	ValaTargetValue* _tmp9_;
30755 	ValaTargetValue* _tmp10_;
30756 	self = (ValaCCodeBaseModule*) base;
30757 	g_return_if_fail (expr != NULL);
30758 	_tmp0_ = vala_pointer_indirection_get_inner (expr);
30759 	_tmp1_ = _tmp0_;
30760 	_tmp2_ = vala_get_cvalue (_tmp1_);
30761 	_tmp3_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_POINTER_INDIRECTION, _tmp2_);
30762 	_tmp4_ = _tmp3_;
30763 	vala_set_cvalue ((ValaExpression*) expr, (ValaCCodeExpression*) _tmp4_);
30764 	_vala_ccode_node_unref0 (_tmp4_);
30765 	_tmp5_ = vala_expression_get_target_value ((ValaExpression*) expr);
30766 	_tmp6_ = _tmp5_;
30767 	_tmp7_ = vala_pointer_indirection_get_inner (expr);
30768 	_tmp8_ = _tmp7_;
30769 	_tmp9_ = vala_expression_get_target_value (_tmp8_);
30770 	_tmp10_ = _tmp9_;
30771 	G_TYPE_CHECK_INSTANCE_CAST (_tmp6_, VALA_TYPE_GLIB_VALUE, ValaGLibValue)->lvalue = vala_get_lvalue (_tmp10_);
30772 }
30773 
30774 static void
vala_ccode_base_module_real_visit_addressof_expression(ValaCodeVisitor * base,ValaAddressofExpression * expr)30775 vala_ccode_base_module_real_visit_addressof_expression (ValaCodeVisitor* base,
30776                                                         ValaAddressofExpression* expr)
30777 {
30778 	ValaCCodeBaseModule * self;
30779 	ValaExpression* _tmp0_;
30780 	ValaExpression* _tmp1_;
30781 	ValaCCodeExpression* _tmp2_;
30782 	ValaCCodeUnaryExpression* _tmp3_;
30783 	ValaCCodeUnaryExpression* _tmp4_;
30784 	self = (ValaCCodeBaseModule*) base;
30785 	g_return_if_fail (expr != NULL);
30786 	_tmp0_ = vala_addressof_expression_get_inner (expr);
30787 	_tmp1_ = _tmp0_;
30788 	_tmp2_ = vala_get_cvalue (_tmp1_);
30789 	_tmp3_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, _tmp2_);
30790 	_tmp4_ = _tmp3_;
30791 	vala_set_cvalue ((ValaExpression*) expr, (ValaCCodeExpression*) _tmp4_);
30792 	_vala_ccode_node_unref0 (_tmp4_);
30793 }
30794 
30795 static void
vala_ccode_base_module_real_visit_reference_transfer_expression(ValaCodeVisitor * base,ValaReferenceTransferExpression * expr)30796 vala_ccode_base_module_real_visit_reference_transfer_expression (ValaCodeVisitor* base,
30797                                                                  ValaReferenceTransferExpression* expr)
30798 {
30799 	ValaCCodeBaseModule * self;
30800 	ValaExpression* _tmp0_;
30801 	ValaExpression* _tmp1_;
30802 	ValaTargetValue* _tmp2_;
30803 	ValaTargetValue* _tmp3_;
30804 	ValaTargetValue* _tmp4_;
30805 	ValaTargetValue* _tmp5_;
30806 	gboolean _tmp6_ = FALSE;
30807 	ValaExpression* _tmp7_;
30808 	ValaExpression* _tmp8_;
30809 	ValaDataType* _tmp9_;
30810 	ValaDataType* _tmp10_;
30811 	self = (ValaCCodeBaseModule*) base;
30812 	g_return_if_fail (expr != NULL);
30813 	_tmp0_ = vala_reference_transfer_expression_get_inner (expr);
30814 	_tmp1_ = _tmp0_;
30815 	_tmp2_ = vala_expression_get_target_value (_tmp1_);
30816 	_tmp3_ = _tmp2_;
30817 	_tmp4_ = vala_ccode_base_module_store_temp_value (self, _tmp3_, (ValaCodeNode*) expr, NULL);
30818 	_tmp5_ = _tmp4_;
30819 	vala_expression_set_target_value ((ValaExpression*) expr, _tmp5_);
30820 	_vala_target_value_unref0 (_tmp5_);
30821 	_tmp7_ = vala_reference_transfer_expression_get_inner (expr);
30822 	_tmp8_ = _tmp7_;
30823 	_tmp9_ = vala_expression_get_value_type (_tmp8_);
30824 	_tmp10_ = _tmp9_;
30825 	if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp10_, VALA_TYPE_STRUCT_VALUE_TYPE)) {
30826 		ValaExpression* _tmp11_;
30827 		ValaExpression* _tmp12_;
30828 		ValaDataType* _tmp13_;
30829 		ValaDataType* _tmp14_;
30830 		gboolean _tmp15_;
30831 		gboolean _tmp16_;
30832 		_tmp11_ = vala_reference_transfer_expression_get_inner (expr);
30833 		_tmp12_ = _tmp11_;
30834 		_tmp13_ = vala_expression_get_value_type (_tmp12_);
30835 		_tmp14_ = _tmp13_;
30836 		_tmp15_ = vala_data_type_get_nullable (_tmp14_);
30837 		_tmp16_ = _tmp15_;
30838 		_tmp6_ = !_tmp16_;
30839 	} else {
30840 		_tmp6_ = FALSE;
30841 	}
30842 	if (_tmp6_) {
30843 		ValaCCodeFile* _tmp17_;
30844 		ValaCCodeFunctionCall* creation_call = NULL;
30845 		ValaCCodeIdentifier* _tmp18_;
30846 		ValaCCodeIdentifier* _tmp19_;
30847 		ValaCCodeFunctionCall* _tmp20_;
30848 		ValaCCodeFunctionCall* _tmp21_;
30849 		ValaCCodeFunctionCall* _tmp22_;
30850 		ValaExpression* _tmp23_;
30851 		ValaExpression* _tmp24_;
30852 		ValaCCodeExpression* _tmp25_;
30853 		ValaCCodeUnaryExpression* _tmp26_;
30854 		ValaCCodeUnaryExpression* _tmp27_;
30855 		ValaCCodeFunctionCall* _tmp28_;
30856 		ValaCCodeConstant* _tmp29_;
30857 		ValaCCodeConstant* _tmp30_;
30858 		ValaCCodeFunctionCall* _tmp31_;
30859 		ValaExpression* _tmp32_;
30860 		ValaExpression* _tmp33_;
30861 		ValaDataType* _tmp34_;
30862 		ValaDataType* _tmp35_;
30863 		gchar* _tmp36_;
30864 		gchar* _tmp37_;
30865 		gchar* _tmp38_;
30866 		gchar* _tmp39_;
30867 		ValaCCodeIdentifier* _tmp40_;
30868 		ValaCCodeIdentifier* _tmp41_;
30869 		ValaCCodeFunction* _tmp42_;
30870 		ValaCCodeFunction* _tmp43_;
30871 		ValaCCodeFunctionCall* _tmp44_;
30872 		_tmp17_ = self->cfile;
30873 		vala_ccode_file_add_include (_tmp17_, "string.h", FALSE);
30874 		_tmp18_ = vala_ccode_identifier_new ("memset");
30875 		_tmp19_ = _tmp18_;
30876 		_tmp20_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp19_);
30877 		_tmp21_ = _tmp20_;
30878 		_vala_ccode_node_unref0 (_tmp19_);
30879 		creation_call = _tmp21_;
30880 		_tmp22_ = creation_call;
30881 		_tmp23_ = vala_reference_transfer_expression_get_inner (expr);
30882 		_tmp24_ = _tmp23_;
30883 		_tmp25_ = vala_get_cvalue (_tmp24_);
30884 		_tmp26_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, _tmp25_);
30885 		_tmp27_ = _tmp26_;
30886 		vala_ccode_function_call_add_argument (_tmp22_, (ValaCCodeExpression*) _tmp27_);
30887 		_vala_ccode_node_unref0 (_tmp27_);
30888 		_tmp28_ = creation_call;
30889 		_tmp29_ = vala_ccode_constant_new ("0");
30890 		_tmp30_ = _tmp29_;
30891 		vala_ccode_function_call_add_argument (_tmp28_, (ValaCCodeExpression*) _tmp30_);
30892 		_vala_ccode_node_unref0 (_tmp30_);
30893 		_tmp31_ = creation_call;
30894 		_tmp32_ = vala_reference_transfer_expression_get_inner (expr);
30895 		_tmp33_ = _tmp32_;
30896 		_tmp34_ = vala_expression_get_value_type (_tmp33_);
30897 		_tmp35_ = _tmp34_;
30898 		_tmp36_ = vala_get_ccode_name ((ValaCodeNode*) _tmp35_);
30899 		_tmp37_ = _tmp36_;
30900 		_tmp38_ = g_strdup_printf ("sizeof (%s)", _tmp37_);
30901 		_tmp39_ = _tmp38_;
30902 		_tmp40_ = vala_ccode_identifier_new (_tmp39_);
30903 		_tmp41_ = _tmp40_;
30904 		vala_ccode_function_call_add_argument (_tmp31_, (ValaCCodeExpression*) _tmp41_);
30905 		_vala_ccode_node_unref0 (_tmp41_);
30906 		_g_free0 (_tmp39_);
30907 		_g_free0 (_tmp37_);
30908 		_tmp42_ = vala_ccode_base_module_get_ccode (self);
30909 		_tmp43_ = _tmp42_;
30910 		_tmp44_ = creation_call;
30911 		vala_ccode_function_add_expression (_tmp43_, (ValaCCodeExpression*) _tmp44_);
30912 		_vala_ccode_node_unref0 (creation_call);
30913 	} else {
30914 		ValaDataType* _tmp45_;
30915 		ValaDataType* _tmp46_;
30916 		_tmp45_ = vala_expression_get_value_type ((ValaExpression*) expr);
30917 		_tmp46_ = _tmp45_;
30918 		if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp46_, VALA_TYPE_DELEGATE_TYPE)) {
30919 			ValaCCodeFunction* _tmp47_;
30920 			ValaCCodeFunction* _tmp48_;
30921 			ValaExpression* _tmp49_;
30922 			ValaExpression* _tmp50_;
30923 			ValaCCodeExpression* _tmp51_;
30924 			ValaCCodeConstant* _tmp52_;
30925 			ValaCCodeConstant* _tmp53_;
30926 			ValaCCodeExpression* target = NULL;
30927 			ValaExpression* _tmp54_;
30928 			ValaExpression* _tmp55_;
30929 			ValaTargetValue* _tmp56_;
30930 			ValaTargetValue* _tmp57_;
30931 			ValaCCodeExpression* _tmp58_;
30932 			ValaCCodeExpression* _tmp59_;
30933 			ValaCCodeExpression* target_destroy_notify = NULL;
30934 			ValaExpression* _tmp65_;
30935 			ValaExpression* _tmp66_;
30936 			ValaTargetValue* _tmp67_;
30937 			ValaTargetValue* _tmp68_;
30938 			ValaCCodeExpression* _tmp69_;
30939 			ValaCCodeExpression* _tmp70_;
30940 			_tmp47_ = vala_ccode_base_module_get_ccode (self);
30941 			_tmp48_ = _tmp47_;
30942 			_tmp49_ = vala_reference_transfer_expression_get_inner (expr);
30943 			_tmp50_ = _tmp49_;
30944 			_tmp51_ = vala_get_cvalue (_tmp50_);
30945 			_tmp52_ = vala_ccode_constant_new ("NULL");
30946 			_tmp53_ = _tmp52_;
30947 			vala_ccode_function_add_assignment (_tmp48_, _tmp51_, (ValaCCodeExpression*) _tmp53_);
30948 			_vala_ccode_node_unref0 (_tmp53_);
30949 			_tmp54_ = vala_reference_transfer_expression_get_inner (expr);
30950 			_tmp55_ = _tmp54_;
30951 			_tmp56_ = vala_expression_get_target_value (_tmp55_);
30952 			_tmp57_ = _tmp56_;
30953 			_tmp58_ = vala_ccode_base_module_get_delegate_target_cvalue (self, _tmp57_);
30954 			target = _tmp58_;
30955 			_tmp59_ = target;
30956 			if (_tmp59_ != NULL) {
30957 				ValaCCodeFunction* _tmp60_;
30958 				ValaCCodeFunction* _tmp61_;
30959 				ValaCCodeExpression* _tmp62_;
30960 				ValaCCodeConstant* _tmp63_;
30961 				ValaCCodeConstant* _tmp64_;
30962 				_tmp60_ = vala_ccode_base_module_get_ccode (self);
30963 				_tmp61_ = _tmp60_;
30964 				_tmp62_ = target;
30965 				_tmp63_ = vala_ccode_constant_new ("NULL");
30966 				_tmp64_ = _tmp63_;
30967 				vala_ccode_function_add_assignment (_tmp61_, _tmp62_, (ValaCCodeExpression*) _tmp64_);
30968 				_vala_ccode_node_unref0 (_tmp64_);
30969 			}
30970 			_tmp65_ = vala_reference_transfer_expression_get_inner (expr);
30971 			_tmp66_ = _tmp65_;
30972 			_tmp67_ = vala_expression_get_target_value (_tmp66_);
30973 			_tmp68_ = _tmp67_;
30974 			_tmp69_ = vala_ccode_base_module_get_delegate_target_destroy_notify_cvalue (self, _tmp68_);
30975 			target_destroy_notify = _tmp69_;
30976 			_tmp70_ = target_destroy_notify;
30977 			if (_tmp70_ != NULL) {
30978 				ValaCCodeFunction* _tmp71_;
30979 				ValaCCodeFunction* _tmp72_;
30980 				ValaCCodeExpression* _tmp73_;
30981 				ValaCCodeConstant* _tmp74_;
30982 				ValaCCodeConstant* _tmp75_;
30983 				_tmp71_ = vala_ccode_base_module_get_ccode (self);
30984 				_tmp72_ = _tmp71_;
30985 				_tmp73_ = target_destroy_notify;
30986 				_tmp74_ = vala_ccode_constant_new ("NULL");
30987 				_tmp75_ = _tmp74_;
30988 				vala_ccode_function_add_assignment (_tmp72_, _tmp73_, (ValaCCodeExpression*) _tmp75_);
30989 				_vala_ccode_node_unref0 (_tmp75_);
30990 			}
30991 			_vala_ccode_node_unref0 (target_destroy_notify);
30992 			_vala_ccode_node_unref0 (target);
30993 		} else {
30994 			ValaExpression* _tmp76_;
30995 			ValaExpression* _tmp77_;
30996 			ValaDataType* _tmp78_;
30997 			ValaDataType* _tmp79_;
30998 			_tmp76_ = vala_reference_transfer_expression_get_inner (expr);
30999 			_tmp77_ = _tmp76_;
31000 			_tmp78_ = vala_expression_get_value_type (_tmp77_);
31001 			_tmp79_ = _tmp78_;
31002 			if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp79_, VALA_TYPE_ARRAY_TYPE)) {
31003 				ValaArrayType* array_type = NULL;
31004 				ValaExpression* _tmp80_;
31005 				ValaExpression* _tmp81_;
31006 				ValaDataType* _tmp82_;
31007 				ValaDataType* _tmp83_;
31008 				ValaArrayType* _tmp84_;
31009 				ValaGLibValue* glib_value = NULL;
31010 				ValaExpression* _tmp85_;
31011 				ValaExpression* _tmp86_;
31012 				ValaTargetValue* _tmp87_;
31013 				ValaTargetValue* _tmp88_;
31014 				ValaGLibValue* _tmp89_;
31015 				ValaCCodeFunction* _tmp90_;
31016 				ValaCCodeFunction* _tmp91_;
31017 				ValaExpression* _tmp92_;
31018 				ValaExpression* _tmp93_;
31019 				ValaCCodeExpression* _tmp94_;
31020 				ValaCCodeConstant* _tmp95_;
31021 				ValaCCodeConstant* _tmp96_;
31022 				ValaGLibValue* _tmp97_;
31023 				ValaList* _tmp98_;
31024 				_tmp80_ = vala_reference_transfer_expression_get_inner (expr);
31025 				_tmp81_ = _tmp80_;
31026 				_tmp82_ = vala_expression_get_value_type (_tmp81_);
31027 				_tmp83_ = _tmp82_;
31028 				_tmp84_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp83_, VALA_TYPE_ARRAY_TYPE, ValaArrayType));
31029 				array_type = _tmp84_;
31030 				_tmp85_ = vala_reference_transfer_expression_get_inner (expr);
31031 				_tmp86_ = _tmp85_;
31032 				_tmp87_ = vala_expression_get_target_value (_tmp86_);
31033 				_tmp88_ = _tmp87_;
31034 				_tmp89_ = _vala_target_value_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp88_, VALA_TYPE_GLIB_VALUE, ValaGLibValue));
31035 				glib_value = _tmp89_;
31036 				_tmp90_ = vala_ccode_base_module_get_ccode (self);
31037 				_tmp91_ = _tmp90_;
31038 				_tmp92_ = vala_reference_transfer_expression_get_inner (expr);
31039 				_tmp93_ = _tmp92_;
31040 				_tmp94_ = vala_get_cvalue (_tmp93_);
31041 				_tmp95_ = vala_ccode_constant_new ("NULL");
31042 				_tmp96_ = _tmp95_;
31043 				vala_ccode_function_add_assignment (_tmp91_, _tmp94_, (ValaCCodeExpression*) _tmp96_);
31044 				_vala_ccode_node_unref0 (_tmp96_);
31045 				_tmp97_ = glib_value;
31046 				_tmp98_ = _tmp97_->array_length_cvalues;
31047 				if (_tmp98_ != NULL) {
31048 					{
31049 						gint dim = 0;
31050 						dim = 1;
31051 						{
31052 							gboolean _tmp99_ = FALSE;
31053 							_tmp99_ = TRUE;
31054 							while (TRUE) {
31055 								ValaArrayType* _tmp101_;
31056 								gint _tmp102_;
31057 								gint _tmp103_;
31058 								ValaCCodeFunction* _tmp104_;
31059 								ValaCCodeFunction* _tmp105_;
31060 								ValaGLibValue* _tmp106_;
31061 								ValaCCodeExpression* _tmp107_;
31062 								ValaCCodeExpression* _tmp108_;
31063 								ValaCCodeConstant* _tmp109_;
31064 								ValaCCodeConstant* _tmp110_;
31065 								if (!_tmp99_) {
31066 									gint _tmp100_;
31067 									_tmp100_ = dim;
31068 									dim = _tmp100_ + 1;
31069 								}
31070 								_tmp99_ = FALSE;
31071 								_tmp101_ = array_type;
31072 								_tmp102_ = vala_array_type_get_rank (_tmp101_);
31073 								_tmp103_ = _tmp102_;
31074 								if (!(dim <= _tmp103_)) {
31075 									break;
31076 								}
31077 								_tmp104_ = vala_ccode_base_module_get_ccode (self);
31078 								_tmp105_ = _tmp104_;
31079 								_tmp106_ = glib_value;
31080 								_tmp107_ = vala_ccode_base_module_get_array_length_cvalue (self, (ValaTargetValue*) _tmp106_, dim);
31081 								_tmp108_ = _tmp107_;
31082 								_tmp109_ = vala_ccode_constant_new ("0");
31083 								_tmp110_ = _tmp109_;
31084 								vala_ccode_function_add_assignment (_tmp105_, _tmp108_, (ValaCCodeExpression*) _tmp110_);
31085 								_vala_ccode_node_unref0 (_tmp110_);
31086 								_vala_ccode_node_unref0 (_tmp108_);
31087 							}
31088 						}
31089 					}
31090 				}
31091 				_vala_target_value_unref0 (glib_value);
31092 				_vala_code_node_unref0 (array_type);
31093 			} else {
31094 				ValaCCodeFunction* _tmp111_;
31095 				ValaCCodeFunction* _tmp112_;
31096 				ValaExpression* _tmp113_;
31097 				ValaExpression* _tmp114_;
31098 				ValaCCodeExpression* _tmp115_;
31099 				ValaCCodeConstant* _tmp116_;
31100 				ValaCCodeConstant* _tmp117_;
31101 				_tmp111_ = vala_ccode_base_module_get_ccode (self);
31102 				_tmp112_ = _tmp111_;
31103 				_tmp113_ = vala_reference_transfer_expression_get_inner (expr);
31104 				_tmp114_ = _tmp113_;
31105 				_tmp115_ = vala_get_cvalue (_tmp114_);
31106 				_tmp116_ = vala_ccode_constant_new ("NULL");
31107 				_tmp117_ = _tmp116_;
31108 				vala_ccode_function_add_assignment (_tmp112_, _tmp115_, (ValaCCodeExpression*) _tmp117_);
31109 				_vala_ccode_node_unref0 (_tmp117_);
31110 			}
31111 		}
31112 	}
31113 }
31114 
31115 static void
vala_ccode_base_module_real_visit_binary_expression(ValaCodeVisitor * base,ValaBinaryExpression * expr)31116 vala_ccode_base_module_real_visit_binary_expression (ValaCodeVisitor* base,
31117                                                      ValaBinaryExpression* expr)
31118 {
31119 	ValaCCodeBaseModule * self;
31120 	ValaCCodeExpression* cleft = NULL;
31121 	ValaExpression* _tmp0_;
31122 	ValaExpression* _tmp1_;
31123 	ValaCCodeExpression* _tmp2_;
31124 	ValaCCodeExpression* _tmp3_;
31125 	ValaCCodeExpression* cright = NULL;
31126 	ValaExpression* _tmp4_;
31127 	ValaExpression* _tmp5_;
31128 	ValaCCodeExpression* _tmp6_;
31129 	ValaCCodeExpression* _tmp7_;
31130 	ValaCCodeExpression* left_chain = NULL;
31131 	gboolean _tmp8_;
31132 	gboolean _tmp9_;
31133 	ValaCCodeBinaryOperator op = 0;
31134 	ValaBinaryOperator _tmp51_;
31135 	ValaBinaryOperator _tmp52_;
31136 	gboolean _tmp154_ = FALSE;
31137 	ValaBinaryOperator _tmp155_;
31138 	ValaBinaryOperator _tmp156_;
31139 	gboolean _tmp227_ = FALSE;
31140 	gboolean _tmp228_ = FALSE;
31141 	gboolean _tmp229_ = FALSE;
31142 	ValaExpression* _tmp230_;
31143 	ValaExpression* _tmp231_;
31144 	ValaDataType* _tmp232_;
31145 	ValaDataType* _tmp233_;
31146 	gboolean is_string_comparison = FALSE;
31147 	gboolean _tmp248_ = FALSE;
31148 	ValaExpression* _tmp249_;
31149 	ValaExpression* _tmp250_;
31150 	gboolean has_string_literal = FALSE;
31151 	gboolean _tmp253_ = FALSE;
31152 	ValaCCodeBinaryOperator _tmp380_;
31153 	ValaCCodeExpression* _tmp381_;
31154 	ValaCCodeExpression* _tmp382_;
31155 	ValaCCodeBinaryExpression* _tmp383_;
31156 	ValaCCodeBinaryExpression* _tmp384_;
31157 	ValaCCodeExpression* _tmp385_;
31158 	self = (ValaCCodeBaseModule*) base;
31159 	g_return_if_fail (expr != NULL);
31160 	_tmp0_ = vala_binary_expression_get_left (expr);
31161 	_tmp1_ = _tmp0_;
31162 	_tmp2_ = vala_get_cvalue (_tmp1_);
31163 	_tmp3_ = _vala_ccode_node_ref0 (_tmp2_);
31164 	cleft = _tmp3_;
31165 	_tmp4_ = vala_binary_expression_get_right (expr);
31166 	_tmp5_ = _tmp4_;
31167 	_tmp6_ = vala_get_cvalue (_tmp5_);
31168 	_tmp7_ = _vala_ccode_node_ref0 (_tmp6_);
31169 	cright = _tmp7_;
31170 	left_chain = NULL;
31171 	_tmp8_ = vala_binary_expression_get_is_chained (expr);
31172 	_tmp9_ = _tmp8_;
31173 	if (_tmp9_) {
31174 		ValaBinaryExpression* lbe = NULL;
31175 		ValaExpression* _tmp10_;
31176 		ValaExpression* _tmp11_;
31177 		ValaBinaryExpression* _tmp12_;
31178 		ValaLocalVariable* temp_decl = NULL;
31179 		ValaBinaryExpression* _tmp13_;
31180 		ValaExpression* _tmp14_;
31181 		ValaExpression* _tmp15_;
31182 		ValaDataType* _tmp16_;
31183 		ValaDataType* _tmp17_;
31184 		ValaLocalVariable* _tmp18_;
31185 		ValaLocalVariable* _tmp19_;
31186 		ValaCCodeExpression* cvar = NULL;
31187 		ValaLocalVariable* _tmp20_;
31188 		const gchar* _tmp21_;
31189 		const gchar* _tmp22_;
31190 		ValaCCodeExpression* _tmp23_;
31191 		ValaCCodeBinaryExpression* clbe = NULL;
31192 		ValaBinaryExpression* _tmp24_;
31193 		ValaCCodeExpression* _tmp25_;
31194 		ValaCCodeBinaryExpression* _tmp26_;
31195 		ValaBinaryExpression* _tmp27_;
31196 		gboolean _tmp28_;
31197 		gboolean _tmp29_;
31198 		ValaCCodeFunction* _tmp34_;
31199 		ValaCCodeFunction* _tmp35_;
31200 		ValaCCodeExpression* _tmp36_;
31201 		ValaBinaryExpression* _tmp37_;
31202 		ValaExpression* _tmp38_;
31203 		ValaExpression* _tmp39_;
31204 		ValaCCodeExpression* _tmp40_;
31205 		ValaCCodeBinaryExpression* _tmp41_;
31206 		ValaLocalVariable* _tmp42_;
31207 		const gchar* _tmp43_;
31208 		const gchar* _tmp44_;
31209 		ValaCCodeExpression* _tmp45_;
31210 		ValaCCodeExpression* _tmp46_;
31211 		ValaCCodeExpression* _tmp47_;
31212 		ValaCCodeExpression* _tmp48_;
31213 		ValaCCodeExpression* _tmp49_;
31214 		ValaCCodeExpression* _tmp50_;
31215 		_tmp10_ = vala_binary_expression_get_left (expr);
31216 		_tmp11_ = _tmp10_;
31217 		_tmp12_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp11_, VALA_TYPE_BINARY_EXPRESSION, ValaBinaryExpression));
31218 		lbe = _tmp12_;
31219 		_tmp13_ = lbe;
31220 		_tmp14_ = vala_binary_expression_get_right (_tmp13_);
31221 		_tmp15_ = _tmp14_;
31222 		_tmp16_ = vala_expression_get_target_type (_tmp15_);
31223 		_tmp17_ = _tmp16_;
31224 		_tmp18_ = vala_ccode_base_module_get_temp_variable (self, _tmp17_, TRUE, NULL, FALSE);
31225 		temp_decl = _tmp18_;
31226 		_tmp19_ = temp_decl;
31227 		vala_ccode_base_module_emit_temp_var (self, _tmp19_, FALSE);
31228 		_tmp20_ = temp_decl;
31229 		_tmp21_ = vala_symbol_get_name ((ValaSymbol*) _tmp20_);
31230 		_tmp22_ = _tmp21_;
31231 		_tmp23_ = vala_ccode_base_module_get_variable_cexpression (self, _tmp22_);
31232 		cvar = _tmp23_;
31233 		_tmp24_ = lbe;
31234 		_tmp25_ = vala_get_cvalue ((ValaExpression*) _tmp24_);
31235 		_tmp26_ = _vala_ccode_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp25_, VALA_TYPE_CCODE_BINARY_EXPRESSION, ValaCCodeBinaryExpression));
31236 		clbe = _tmp26_;
31237 		_tmp27_ = lbe;
31238 		_tmp28_ = vala_binary_expression_get_is_chained (_tmp27_);
31239 		_tmp29_ = _tmp28_;
31240 		if (_tmp29_) {
31241 			ValaCCodeBinaryExpression* _tmp30_;
31242 			ValaCCodeExpression* _tmp31_;
31243 			ValaCCodeExpression* _tmp32_;
31244 			ValaCCodeBinaryExpression* _tmp33_;
31245 			_tmp30_ = clbe;
31246 			_tmp31_ = vala_ccode_binary_expression_get_right (_tmp30_);
31247 			_tmp32_ = _tmp31_;
31248 			_tmp33_ = _vala_ccode_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp32_, VALA_TYPE_CCODE_BINARY_EXPRESSION, ValaCCodeBinaryExpression));
31249 			_vala_ccode_node_unref0 (clbe);
31250 			clbe = _tmp33_;
31251 		}
31252 		_tmp34_ = vala_ccode_base_module_get_ccode (self);
31253 		_tmp35_ = _tmp34_;
31254 		_tmp36_ = cvar;
31255 		_tmp37_ = lbe;
31256 		_tmp38_ = vala_binary_expression_get_right (_tmp37_);
31257 		_tmp39_ = _tmp38_;
31258 		_tmp40_ = vala_get_cvalue (_tmp39_);
31259 		vala_ccode_function_add_assignment (_tmp35_, _tmp36_, _tmp40_);
31260 		_tmp41_ = clbe;
31261 		_tmp42_ = temp_decl;
31262 		_tmp43_ = vala_symbol_get_name ((ValaSymbol*) _tmp42_);
31263 		_tmp44_ = _tmp43_;
31264 		_tmp45_ = vala_ccode_base_module_get_variable_cexpression (self, _tmp44_);
31265 		_tmp46_ = _tmp45_;
31266 		vala_ccode_binary_expression_set_right (_tmp41_, _tmp46_);
31267 		_vala_ccode_node_unref0 (_tmp46_);
31268 		_tmp47_ = cleft;
31269 		_tmp48_ = _vala_ccode_node_ref0 (_tmp47_);
31270 		_vala_ccode_node_unref0 (left_chain);
31271 		left_chain = _tmp48_;
31272 		_tmp49_ = cvar;
31273 		_tmp50_ = _vala_ccode_node_ref0 (_tmp49_);
31274 		_vala_ccode_node_unref0 (cleft);
31275 		cleft = _tmp50_;
31276 		_vala_ccode_node_unref0 (clbe);
31277 		_vala_ccode_node_unref0 (cvar);
31278 		_vala_code_node_unref0 (temp_decl);
31279 		_vala_code_node_unref0 (lbe);
31280 	}
31281 	_tmp51_ = vala_binary_expression_get_operator (expr);
31282 	_tmp52_ = _tmp51_;
31283 	switch (_tmp52_) {
31284 		case VALA_BINARY_OPERATOR_PLUS:
31285 		{
31286 			op = VALA_CCODE_BINARY_OPERATOR_PLUS;
31287 			break;
31288 		}
31289 		case VALA_BINARY_OPERATOR_MINUS:
31290 		{
31291 			op = VALA_CCODE_BINARY_OPERATOR_MINUS;
31292 			break;
31293 		}
31294 		case VALA_BINARY_OPERATOR_MUL:
31295 		{
31296 			op = VALA_CCODE_BINARY_OPERATOR_MUL;
31297 			break;
31298 		}
31299 		case VALA_BINARY_OPERATOR_DIV:
31300 		{
31301 			op = VALA_CCODE_BINARY_OPERATOR_DIV;
31302 			break;
31303 		}
31304 		case VALA_BINARY_OPERATOR_MOD:
31305 		{
31306 			ValaDataType* _tmp53_;
31307 			ValaDataType* _tmp54_;
31308 			ValaDataType* _tmp55_;
31309 			_tmp53_ = vala_expression_get_value_type ((ValaExpression*) expr);
31310 			_tmp54_ = _tmp53_;
31311 			_tmp55_ = self->double_type;
31312 			if (vala_data_type_equals (_tmp54_, _tmp55_)) {
31313 				ValaCCodeFile* _tmp56_;
31314 				ValaCCodeFunctionCall* ccall = NULL;
31315 				ValaCCodeIdentifier* _tmp57_;
31316 				ValaCCodeIdentifier* _tmp58_;
31317 				ValaCCodeFunctionCall* _tmp59_;
31318 				ValaCCodeFunctionCall* _tmp60_;
31319 				ValaCCodeFunctionCall* _tmp61_;
31320 				ValaCCodeExpression* _tmp62_;
31321 				ValaCCodeFunctionCall* _tmp63_;
31322 				ValaCCodeExpression* _tmp64_;
31323 				ValaCCodeFunctionCall* _tmp65_;
31324 				_tmp56_ = self->cfile;
31325 				vala_ccode_file_add_include (_tmp56_, "math.h", FALSE);
31326 				_tmp57_ = vala_ccode_identifier_new ("fmod");
31327 				_tmp58_ = _tmp57_;
31328 				_tmp59_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp58_);
31329 				_tmp60_ = _tmp59_;
31330 				_vala_ccode_node_unref0 (_tmp58_);
31331 				ccall = _tmp60_;
31332 				_tmp61_ = ccall;
31333 				_tmp62_ = cleft;
31334 				vala_ccode_function_call_add_argument (_tmp61_, _tmp62_);
31335 				_tmp63_ = ccall;
31336 				_tmp64_ = cright;
31337 				vala_ccode_function_call_add_argument (_tmp63_, _tmp64_);
31338 				_tmp65_ = ccall;
31339 				vala_set_cvalue ((ValaExpression*) expr, (ValaCCodeExpression*) _tmp65_);
31340 				_vala_ccode_node_unref0 (ccall);
31341 				_vala_ccode_node_unref0 (left_chain);
31342 				_vala_ccode_node_unref0 (cright);
31343 				_vala_ccode_node_unref0 (cleft);
31344 				return;
31345 			} else {
31346 				ValaDataType* _tmp66_;
31347 				ValaDataType* _tmp67_;
31348 				ValaDataType* _tmp68_;
31349 				_tmp66_ = vala_expression_get_value_type ((ValaExpression*) expr);
31350 				_tmp67_ = _tmp66_;
31351 				_tmp68_ = self->float_type;
31352 				if (vala_data_type_equals (_tmp67_, _tmp68_)) {
31353 					ValaCCodeFile* _tmp69_;
31354 					ValaCCodeFunctionCall* ccall = NULL;
31355 					ValaCCodeIdentifier* _tmp70_;
31356 					ValaCCodeIdentifier* _tmp71_;
31357 					ValaCCodeFunctionCall* _tmp72_;
31358 					ValaCCodeFunctionCall* _tmp73_;
31359 					ValaCCodeFunctionCall* _tmp74_;
31360 					ValaCCodeExpression* _tmp75_;
31361 					ValaCCodeFunctionCall* _tmp76_;
31362 					ValaCCodeExpression* _tmp77_;
31363 					ValaCCodeFunctionCall* _tmp78_;
31364 					_tmp69_ = self->cfile;
31365 					vala_ccode_file_add_include (_tmp69_, "math.h", FALSE);
31366 					_tmp70_ = vala_ccode_identifier_new ("fmodf");
31367 					_tmp71_ = _tmp70_;
31368 					_tmp72_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp71_);
31369 					_tmp73_ = _tmp72_;
31370 					_vala_ccode_node_unref0 (_tmp71_);
31371 					ccall = _tmp73_;
31372 					_tmp74_ = ccall;
31373 					_tmp75_ = cleft;
31374 					vala_ccode_function_call_add_argument (_tmp74_, _tmp75_);
31375 					_tmp76_ = ccall;
31376 					_tmp77_ = cright;
31377 					vala_ccode_function_call_add_argument (_tmp76_, _tmp77_);
31378 					_tmp78_ = ccall;
31379 					vala_set_cvalue ((ValaExpression*) expr, (ValaCCodeExpression*) _tmp78_);
31380 					_vala_ccode_node_unref0 (ccall);
31381 					_vala_ccode_node_unref0 (left_chain);
31382 					_vala_ccode_node_unref0 (cright);
31383 					_vala_ccode_node_unref0 (cleft);
31384 					return;
31385 				} else {
31386 					op = VALA_CCODE_BINARY_OPERATOR_MOD;
31387 				}
31388 			}
31389 			break;
31390 		}
31391 		case VALA_BINARY_OPERATOR_SHIFT_LEFT:
31392 		{
31393 			op = VALA_CCODE_BINARY_OPERATOR_SHIFT_LEFT;
31394 			break;
31395 		}
31396 		case VALA_BINARY_OPERATOR_SHIFT_RIGHT:
31397 		{
31398 			op = VALA_CCODE_BINARY_OPERATOR_SHIFT_RIGHT;
31399 			break;
31400 		}
31401 		case VALA_BINARY_OPERATOR_LESS_THAN:
31402 		{
31403 			op = VALA_CCODE_BINARY_OPERATOR_LESS_THAN;
31404 			break;
31405 		}
31406 		case VALA_BINARY_OPERATOR_GREATER_THAN:
31407 		{
31408 			op = VALA_CCODE_BINARY_OPERATOR_GREATER_THAN;
31409 			break;
31410 		}
31411 		case VALA_BINARY_OPERATOR_LESS_THAN_OR_EQUAL:
31412 		{
31413 			op = VALA_CCODE_BINARY_OPERATOR_LESS_THAN_OR_EQUAL;
31414 			break;
31415 		}
31416 		case VALA_BINARY_OPERATOR_GREATER_THAN_OR_EQUAL:
31417 		{
31418 			op = VALA_CCODE_BINARY_OPERATOR_GREATER_THAN_OR_EQUAL;
31419 			break;
31420 		}
31421 		case VALA_BINARY_OPERATOR_EQUALITY:
31422 		{
31423 			op = VALA_CCODE_BINARY_OPERATOR_EQUALITY;
31424 			break;
31425 		}
31426 		case VALA_BINARY_OPERATOR_INEQUALITY:
31427 		{
31428 			op = VALA_CCODE_BINARY_OPERATOR_INEQUALITY;
31429 			break;
31430 		}
31431 		case VALA_BINARY_OPERATOR_BITWISE_AND:
31432 		{
31433 			op = VALA_CCODE_BINARY_OPERATOR_BITWISE_AND;
31434 			break;
31435 		}
31436 		case VALA_BINARY_OPERATOR_BITWISE_OR:
31437 		{
31438 			op = VALA_CCODE_BINARY_OPERATOR_BITWISE_OR;
31439 			break;
31440 		}
31441 		case VALA_BINARY_OPERATOR_BITWISE_XOR:
31442 		{
31443 			op = VALA_CCODE_BINARY_OPERATOR_BITWISE_XOR;
31444 			break;
31445 		}
31446 		case VALA_BINARY_OPERATOR_AND:
31447 		{
31448 			op = VALA_CCODE_BINARY_OPERATOR_AND;
31449 			break;
31450 		}
31451 		case VALA_BINARY_OPERATOR_OR:
31452 		{
31453 			op = VALA_CCODE_BINARY_OPERATOR_OR;
31454 			break;
31455 		}
31456 		case VALA_BINARY_OPERATOR_IN:
31457 		{
31458 			ValaExpression* _tmp79_;
31459 			ValaExpression* _tmp80_;
31460 			ValaDataType* _tmp81_;
31461 			ValaDataType* _tmp82_;
31462 			_tmp79_ = vala_binary_expression_get_right (expr);
31463 			_tmp80_ = _tmp79_;
31464 			_tmp81_ = vala_expression_get_value_type (_tmp80_);
31465 			_tmp82_ = _tmp81_;
31466 			if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp82_, VALA_TYPE_ARRAY_TYPE)) {
31467 				ValaArrayType* array_type = NULL;
31468 				ValaExpression* _tmp83_;
31469 				ValaExpression* _tmp84_;
31470 				ValaDataType* _tmp85_;
31471 				ValaDataType* _tmp86_;
31472 				ValaDataType* element_type = NULL;
31473 				ValaArrayType* _tmp87_;
31474 				ValaDataType* _tmp88_;
31475 				ValaDataType* _tmp89_;
31476 				ValaCCodeFunctionCall* ccall = NULL;
31477 				ValaArrayType* _tmp90_;
31478 				gchar* _tmp91_;
31479 				gchar* _tmp92_;
31480 				ValaCCodeIdentifier* _tmp93_;
31481 				ValaCCodeIdentifier* _tmp94_;
31482 				ValaCCodeFunctionCall* _tmp95_;
31483 				ValaCCodeFunctionCall* _tmp96_;
31484 				ValaCCodeExpression* node = NULL;
31485 				ValaCCodeFunctionCall* _tmp97_;
31486 				ValaCCodeExpression* _tmp98_;
31487 				ValaCCodeFunctionCall* _tmp99_;
31488 				ValaCCodeExpression* _tmp100_;
31489 				ValaCCodeFunctionCall* _tmp101_;
31490 				ValaExpression* _tmp102_;
31491 				ValaExpression* _tmp103_;
31492 				ValaCCodeExpression* _tmp104_;
31493 				ValaCCodeExpression* _tmp105_;
31494 				ValaDataType* _tmp106_;
31495 				ValaCCodeExpression* _tmp146_;
31496 				_tmp83_ = vala_binary_expression_get_right (expr);
31497 				_tmp84_ = _tmp83_;
31498 				_tmp85_ = vala_expression_get_value_type (_tmp84_);
31499 				_tmp86_ = _tmp85_;
31500 				array_type = G_TYPE_CHECK_INSTANCE_CAST (_tmp86_, VALA_TYPE_ARRAY_TYPE, ValaArrayType);
31501 				_tmp87_ = array_type;
31502 				_tmp88_ = vala_array_type_get_element_type (_tmp87_);
31503 				_tmp89_ = _tmp88_;
31504 				element_type = _tmp89_;
31505 				_tmp90_ = array_type;
31506 				_tmp91_ = vala_ccode_base_module_generate_array_contains_wrapper (self, _tmp90_);
31507 				_tmp92_ = _tmp91_;
31508 				_tmp93_ = vala_ccode_identifier_new (_tmp92_);
31509 				_tmp94_ = _tmp93_;
31510 				_tmp95_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp94_);
31511 				_tmp96_ = _tmp95_;
31512 				_vala_ccode_node_unref0 (_tmp94_);
31513 				_g_free0 (_tmp92_);
31514 				ccall = _tmp96_;
31515 				_tmp97_ = ccall;
31516 				_tmp98_ = _vala_ccode_node_ref0 ((ValaCCodeExpression*) _tmp97_);
31517 				node = _tmp98_;
31518 				_tmp99_ = ccall;
31519 				_tmp100_ = cright;
31520 				vala_ccode_function_call_add_argument (_tmp99_, _tmp100_);
31521 				_tmp101_ = ccall;
31522 				_tmp102_ = vala_binary_expression_get_right (expr);
31523 				_tmp103_ = _tmp102_;
31524 				_tmp104_ = vala_ccode_base_module_get_array_length_cexpression (self, _tmp103_, -1);
31525 				_tmp105_ = _tmp104_;
31526 				vala_ccode_function_call_add_argument (_tmp101_, _tmp105_);
31527 				_vala_ccode_node_unref0 (_tmp105_);
31528 				_tmp106_ = element_type;
31529 				if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp106_, VALA_TYPE_STRUCT_VALUE_TYPE)) {
31530 					ValaCCodeFunctionCall* _tmp107_;
31531 					ValaCCodeExpression* _tmp108_;
31532 					ValaCCodeUnaryExpression* _tmp109_;
31533 					ValaCCodeUnaryExpression* _tmp110_;
31534 					_tmp107_ = ccall;
31535 					_tmp108_ = cleft;
31536 					_tmp109_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, _tmp108_);
31537 					_tmp110_ = _tmp109_;
31538 					vala_ccode_function_call_add_argument (_tmp107_, (ValaCCodeExpression*) _tmp110_);
31539 					_vala_ccode_node_unref0 (_tmp110_);
31540 				} else {
31541 					gboolean _tmp111_ = FALSE;
31542 					gboolean _tmp112_ = FALSE;
31543 					gboolean _tmp113_ = FALSE;
31544 					ValaDataType* _tmp114_;
31545 					_tmp114_ = element_type;
31546 					if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp114_, VALA_TYPE_VALUE_TYPE)) {
31547 						ValaDataType* _tmp115_;
31548 						gboolean _tmp116_;
31549 						gboolean _tmp117_;
31550 						_tmp115_ = element_type;
31551 						_tmp116_ = vala_data_type_get_nullable (_tmp115_);
31552 						_tmp117_ = _tmp116_;
31553 						_tmp113_ = !_tmp117_;
31554 					} else {
31555 						_tmp113_ = FALSE;
31556 					}
31557 					if (_tmp113_) {
31558 						ValaExpression* _tmp118_;
31559 						ValaExpression* _tmp119_;
31560 						ValaDataType* _tmp120_;
31561 						ValaDataType* _tmp121_;
31562 						_tmp118_ = vala_binary_expression_get_left (expr);
31563 						_tmp119_ = _tmp118_;
31564 						_tmp120_ = vala_expression_get_value_type (_tmp119_);
31565 						_tmp121_ = _tmp120_;
31566 						_tmp112_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp121_, VALA_TYPE_VALUE_TYPE);
31567 					} else {
31568 						_tmp112_ = FALSE;
31569 					}
31570 					if (_tmp112_) {
31571 						ValaExpression* _tmp122_;
31572 						ValaExpression* _tmp123_;
31573 						ValaDataType* _tmp124_;
31574 						ValaDataType* _tmp125_;
31575 						gboolean _tmp126_;
31576 						gboolean _tmp127_;
31577 						_tmp122_ = vala_binary_expression_get_left (expr);
31578 						_tmp123_ = _tmp122_;
31579 						_tmp124_ = vala_expression_get_value_type (_tmp123_);
31580 						_tmp125_ = _tmp124_;
31581 						_tmp126_ = vala_data_type_get_nullable (_tmp125_);
31582 						_tmp127_ = _tmp126_;
31583 						_tmp111_ = _tmp127_;
31584 					} else {
31585 						_tmp111_ = FALSE;
31586 					}
31587 					if (_tmp111_) {
31588 						ValaCCodeBinaryExpression* cnull = NULL;
31589 						ValaCCodeExpression* _tmp128_;
31590 						ValaCCodeConstant* _tmp129_;
31591 						ValaCCodeConstant* _tmp130_;
31592 						ValaCCodeBinaryExpression* _tmp131_;
31593 						ValaCCodeBinaryExpression* _tmp132_;
31594 						ValaCCodeFunctionCall* _tmp133_;
31595 						ValaCCodeExpression* _tmp134_;
31596 						ValaCCodeUnaryExpression* _tmp135_;
31597 						ValaCCodeUnaryExpression* _tmp136_;
31598 						ValaCCodeBinaryExpression* _tmp137_;
31599 						ValaCCodeConstant* _tmp138_;
31600 						ValaCCodeConstant* _tmp139_;
31601 						ValaCCodeFunctionCall* _tmp140_;
31602 						ValaCCodeConditionalExpression* _tmp141_;
31603 						ValaCCodeConditionalExpression* _tmp142_;
31604 						ValaCCodeParenthesizedExpression* _tmp143_;
31605 						_tmp128_ = cleft;
31606 						_tmp129_ = vala_ccode_constant_new ("NULL");
31607 						_tmp130_ = _tmp129_;
31608 						_tmp131_ = vala_ccode_binary_expression_new (VALA_CCODE_BINARY_OPERATOR_EQUALITY, _tmp128_, (ValaCCodeExpression*) _tmp130_);
31609 						_tmp132_ = _tmp131_;
31610 						_vala_ccode_node_unref0 (_tmp130_);
31611 						cnull = _tmp132_;
31612 						_tmp133_ = ccall;
31613 						_tmp134_ = cleft;
31614 						_tmp135_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_POINTER_INDIRECTION, _tmp134_);
31615 						_tmp136_ = _tmp135_;
31616 						vala_ccode_function_call_add_argument (_tmp133_, (ValaCCodeExpression*) _tmp136_);
31617 						_vala_ccode_node_unref0 (_tmp136_);
31618 						_tmp137_ = cnull;
31619 						_tmp138_ = vala_ccode_constant_new ("FALSE");
31620 						_tmp139_ = _tmp138_;
31621 						_tmp140_ = ccall;
31622 						_tmp141_ = vala_ccode_conditional_expression_new ((ValaCCodeExpression*) _tmp137_, (ValaCCodeExpression*) _tmp139_, (ValaCCodeExpression*) _tmp140_);
31623 						_tmp142_ = _tmp141_;
31624 						_tmp143_ = vala_ccode_parenthesized_expression_new ((ValaCCodeExpression*) _tmp142_);
31625 						_vala_ccode_node_unref0 (node);
31626 						node = (ValaCCodeExpression*) _tmp143_;
31627 						_vala_ccode_node_unref0 (_tmp142_);
31628 						_vala_ccode_node_unref0 (_tmp139_);
31629 						_vala_ccode_node_unref0 (cnull);
31630 					} else {
31631 						ValaCCodeFunctionCall* _tmp144_;
31632 						ValaCCodeExpression* _tmp145_;
31633 						_tmp144_ = ccall;
31634 						_tmp145_ = cleft;
31635 						vala_ccode_function_call_add_argument (_tmp144_, _tmp145_);
31636 					}
31637 				}
31638 				_tmp146_ = node;
31639 				vala_set_cvalue ((ValaExpression*) expr, _tmp146_);
31640 				_vala_ccode_node_unref0 (node);
31641 				_vala_ccode_node_unref0 (ccall);
31642 			} else {
31643 				ValaCCodeExpression* _tmp147_;
31644 				ValaCCodeExpression* _tmp148_;
31645 				ValaCCodeBinaryExpression* _tmp149_;
31646 				ValaCCodeBinaryExpression* _tmp150_;
31647 				ValaCCodeExpression* _tmp151_;
31648 				ValaCCodeBinaryExpression* _tmp152_;
31649 				ValaCCodeBinaryExpression* _tmp153_;
31650 				_tmp147_ = cright;
31651 				_tmp148_ = cleft;
31652 				_tmp149_ = vala_ccode_binary_expression_new (VALA_CCODE_BINARY_OPERATOR_BITWISE_AND, _tmp147_, _tmp148_);
31653 				_tmp150_ = _tmp149_;
31654 				_tmp151_ = cleft;
31655 				_tmp152_ = vala_ccode_binary_expression_new (VALA_CCODE_BINARY_OPERATOR_EQUALITY, (ValaCCodeExpression*) _tmp150_, _tmp151_);
31656 				_tmp153_ = _tmp152_;
31657 				vala_set_cvalue ((ValaExpression*) expr, (ValaCCodeExpression*) _tmp153_);
31658 				_vala_ccode_node_unref0 (_tmp153_);
31659 				_vala_ccode_node_unref0 (_tmp150_);
31660 			}
31661 			_vala_ccode_node_unref0 (left_chain);
31662 			_vala_ccode_node_unref0 (cright);
31663 			_vala_ccode_node_unref0 (cleft);
31664 			return;
31665 		}
31666 		default:
31667 		{
31668 			g_assert_not_reached ();
31669 		}
31670 	}
31671 	_tmp155_ = vala_binary_expression_get_operator (expr);
31672 	_tmp156_ = _tmp155_;
31673 	if (_tmp156_ == VALA_BINARY_OPERATOR_EQUALITY) {
31674 		_tmp154_ = TRUE;
31675 	} else {
31676 		ValaBinaryOperator _tmp157_;
31677 		ValaBinaryOperator _tmp158_;
31678 		_tmp157_ = vala_binary_expression_get_operator (expr);
31679 		_tmp158_ = _tmp157_;
31680 		_tmp154_ = _tmp158_ == VALA_BINARY_OPERATOR_INEQUALITY;
31681 	}
31682 	if (_tmp154_) {
31683 		ValaDataType* left_type = NULL;
31684 		ValaExpression* _tmp159_;
31685 		ValaExpression* _tmp160_;
31686 		ValaDataType* _tmp161_;
31687 		ValaDataType* _tmp162_;
31688 		ValaDataType* _tmp163_;
31689 		ValaDataType* right_type = NULL;
31690 		ValaExpression* _tmp164_;
31691 		ValaExpression* _tmp165_;
31692 		ValaDataType* _tmp166_;
31693 		ValaDataType* _tmp167_;
31694 		ValaDataType* _tmp168_;
31695 		gboolean _tmp169_ = FALSE;
31696 		ValaDataType* _tmp170_;
31697 		_tmp159_ = vala_binary_expression_get_left (expr);
31698 		_tmp160_ = _tmp159_;
31699 		_tmp161_ = vala_expression_get_target_type (_tmp160_);
31700 		_tmp162_ = _tmp161_;
31701 		_tmp163_ = _vala_code_node_ref0 (_tmp162_);
31702 		left_type = _tmp163_;
31703 		_tmp164_ = vala_binary_expression_get_right (expr);
31704 		_tmp165_ = _tmp164_;
31705 		_tmp166_ = vala_expression_get_target_type (_tmp165_);
31706 		_tmp167_ = _tmp166_;
31707 		_tmp168_ = _vala_code_node_ref0 (_tmp167_);
31708 		right_type = _tmp168_;
31709 		vala_ccode_base_module_make_comparable_cexpression (self, &left_type, &cleft, &right_type, &cright);
31710 		_tmp170_ = left_type;
31711 		if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp170_, VALA_TYPE_STRUCT_VALUE_TYPE)) {
31712 			ValaDataType* _tmp171_;
31713 			_tmp171_ = right_type;
31714 			_tmp169_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp171_, VALA_TYPE_STRUCT_VALUE_TYPE);
31715 		} else {
31716 			_tmp169_ = FALSE;
31717 		}
31718 		if (_tmp169_) {
31719 			gchar* equalfunc = NULL;
31720 			ValaDataType* _tmp172_;
31721 			ValaTypeSymbol* _tmp173_;
31722 			ValaTypeSymbol* _tmp174_;
31723 			gchar* _tmp175_;
31724 			ValaCCodeFunctionCall* ccall = NULL;
31725 			const gchar* _tmp176_;
31726 			ValaCCodeIdentifier* _tmp177_;
31727 			ValaCCodeIdentifier* _tmp178_;
31728 			ValaCCodeFunctionCall* _tmp179_;
31729 			ValaCCodeFunctionCall* _tmp180_;
31730 			ValaCCodeFunctionCall* _tmp181_;
31731 			ValaCCodeExpression* _tmp182_;
31732 			ValaCCodeFunctionCall* _tmp183_;
31733 			ValaCCodeExpression* _tmp184_;
31734 			ValaCCodeFunctionCall* _tmp185_;
31735 			ValaCCodeExpression* _tmp186_;
31736 			ValaCCodeExpression* _tmp187_;
31737 			_tmp172_ = left_type;
31738 			_tmp173_ = vala_data_type_get_type_symbol (_tmp172_);
31739 			_tmp174_ = _tmp173_;
31740 			_tmp175_ = vala_ccode_base_module_generate_struct_equal_function (self, G_TYPE_CHECK_INSTANCE_CAST (_tmp174_, VALA_TYPE_STRUCT, ValaStruct));
31741 			equalfunc = _tmp175_;
31742 			_tmp176_ = equalfunc;
31743 			_tmp177_ = vala_ccode_identifier_new (_tmp176_);
31744 			_tmp178_ = _tmp177_;
31745 			_tmp179_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp178_);
31746 			_tmp180_ = _tmp179_;
31747 			_vala_ccode_node_unref0 (_tmp178_);
31748 			ccall = _tmp180_;
31749 			_tmp181_ = ccall;
31750 			_tmp182_ = cleft;
31751 			vala_ccode_function_call_add_argument (_tmp181_, _tmp182_);
31752 			_tmp183_ = ccall;
31753 			_tmp184_ = cright;
31754 			vala_ccode_function_call_add_argument (_tmp183_, _tmp184_);
31755 			_tmp185_ = ccall;
31756 			_tmp186_ = _vala_ccode_node_ref0 ((ValaCCodeExpression*) _tmp185_);
31757 			_vala_ccode_node_unref0 (cleft);
31758 			cleft = _tmp186_;
31759 			_tmp187_ = vala_ccode_base_module_get_boolean_cconstant (self, TRUE);
31760 			_vala_ccode_node_unref0 (cright);
31761 			cright = _tmp187_;
31762 			_vala_ccode_node_unref0 (ccall);
31763 			_g_free0 (equalfunc);
31764 		} else {
31765 			gboolean _tmp188_ = FALSE;
31766 			gboolean _tmp189_ = FALSE;
31767 			gboolean _tmp190_ = FALSE;
31768 			gboolean _tmp191_ = FALSE;
31769 			gboolean _tmp192_ = FALSE;
31770 			gboolean _tmp193_ = FALSE;
31771 			ValaDataType* _tmp194_;
31772 			_tmp194_ = left_type;
31773 			if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp194_, VALA_TYPE_INTEGER_TYPE)) {
31774 				_tmp193_ = TRUE;
31775 			} else {
31776 				ValaDataType* _tmp195_;
31777 				_tmp195_ = left_type;
31778 				_tmp193_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp195_, VALA_TYPE_FLOATING_TYPE);
31779 			}
31780 			if (_tmp193_) {
31781 				_tmp192_ = TRUE;
31782 			} else {
31783 				ValaDataType* _tmp196_;
31784 				_tmp196_ = left_type;
31785 				_tmp192_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp196_, VALA_TYPE_BOOLEAN_TYPE);
31786 			}
31787 			if (_tmp192_) {
31788 				_tmp191_ = TRUE;
31789 			} else {
31790 				ValaDataType* _tmp197_;
31791 				_tmp197_ = left_type;
31792 				_tmp191_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp197_, VALA_TYPE_ENUM_VALUE_TYPE);
31793 			}
31794 			if (_tmp191_) {
31795 				ValaDataType* _tmp198_;
31796 				gboolean _tmp199_;
31797 				gboolean _tmp200_;
31798 				_tmp198_ = left_type;
31799 				_tmp199_ = vala_data_type_get_nullable (_tmp198_);
31800 				_tmp200_ = _tmp199_;
31801 				_tmp190_ = _tmp200_;
31802 			} else {
31803 				_tmp190_ = FALSE;
31804 			}
31805 			if (_tmp190_) {
31806 				gboolean _tmp201_ = FALSE;
31807 				gboolean _tmp202_ = FALSE;
31808 				gboolean _tmp203_ = FALSE;
31809 				ValaDataType* _tmp204_;
31810 				_tmp204_ = right_type;
31811 				if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp204_, VALA_TYPE_INTEGER_TYPE)) {
31812 					_tmp203_ = TRUE;
31813 				} else {
31814 					ValaDataType* _tmp205_;
31815 					_tmp205_ = right_type;
31816 					_tmp203_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp205_, VALA_TYPE_FLOATING_TYPE);
31817 				}
31818 				if (_tmp203_) {
31819 					_tmp202_ = TRUE;
31820 				} else {
31821 					ValaDataType* _tmp206_;
31822 					_tmp206_ = right_type;
31823 					_tmp202_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp206_, VALA_TYPE_BOOLEAN_TYPE);
31824 				}
31825 				if (_tmp202_) {
31826 					_tmp201_ = TRUE;
31827 				} else {
31828 					ValaDataType* _tmp207_;
31829 					_tmp207_ = right_type;
31830 					_tmp201_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp207_, VALA_TYPE_ENUM_VALUE_TYPE);
31831 				}
31832 				_tmp189_ = _tmp201_;
31833 			} else {
31834 				_tmp189_ = FALSE;
31835 			}
31836 			if (_tmp189_) {
31837 				ValaDataType* _tmp208_;
31838 				gboolean _tmp209_;
31839 				gboolean _tmp210_;
31840 				_tmp208_ = right_type;
31841 				_tmp209_ = vala_data_type_get_nullable (_tmp208_);
31842 				_tmp210_ = _tmp209_;
31843 				_tmp188_ = _tmp210_;
31844 			} else {
31845 				_tmp188_ = FALSE;
31846 			}
31847 			if (_tmp188_) {
31848 				gchar* equalfunc = NULL;
31849 				ValaDataType* _tmp211_;
31850 				ValaTypeSymbol* _tmp212_;
31851 				ValaTypeSymbol* _tmp213_;
31852 				gchar* _tmp214_;
31853 				ValaCCodeFunctionCall* ccall = NULL;
31854 				const gchar* _tmp215_;
31855 				ValaCCodeIdentifier* _tmp216_;
31856 				ValaCCodeIdentifier* _tmp217_;
31857 				ValaCCodeFunctionCall* _tmp218_;
31858 				ValaCCodeFunctionCall* _tmp219_;
31859 				ValaCCodeFunctionCall* _tmp220_;
31860 				ValaCCodeExpression* _tmp221_;
31861 				ValaCCodeFunctionCall* _tmp222_;
31862 				ValaCCodeExpression* _tmp223_;
31863 				ValaCCodeFunctionCall* _tmp224_;
31864 				ValaCCodeExpression* _tmp225_;
31865 				ValaCCodeExpression* _tmp226_;
31866 				_tmp211_ = left_type;
31867 				_tmp212_ = vala_data_type_get_type_symbol (_tmp211_);
31868 				_tmp213_ = _tmp212_;
31869 				_tmp214_ = vala_ccode_base_module_generate_numeric_equal_function (self, G_TYPE_CHECK_INSTANCE_CAST (_tmp213_, VALA_TYPE_TYPESYMBOL, ValaTypeSymbol));
31870 				equalfunc = _tmp214_;
31871 				_tmp215_ = equalfunc;
31872 				_tmp216_ = vala_ccode_identifier_new (_tmp215_);
31873 				_tmp217_ = _tmp216_;
31874 				_tmp218_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp217_);
31875 				_tmp219_ = _tmp218_;
31876 				_vala_ccode_node_unref0 (_tmp217_);
31877 				ccall = _tmp219_;
31878 				_tmp220_ = ccall;
31879 				_tmp221_ = cleft;
31880 				vala_ccode_function_call_add_argument (_tmp220_, _tmp221_);
31881 				_tmp222_ = ccall;
31882 				_tmp223_ = cright;
31883 				vala_ccode_function_call_add_argument (_tmp222_, _tmp223_);
31884 				_tmp224_ = ccall;
31885 				_tmp225_ = _vala_ccode_node_ref0 ((ValaCCodeExpression*) _tmp224_);
31886 				_vala_ccode_node_unref0 (cleft);
31887 				cleft = _tmp225_;
31888 				_tmp226_ = vala_ccode_base_module_get_boolean_cconstant (self, TRUE);
31889 				_vala_ccode_node_unref0 (cright);
31890 				cright = _tmp226_;
31891 				_vala_ccode_node_unref0 (ccall);
31892 				_g_free0 (equalfunc);
31893 			}
31894 		}
31895 		_vala_code_node_unref0 (right_type);
31896 		_vala_code_node_unref0 (left_type);
31897 	}
31898 	_tmp230_ = vala_binary_expression_get_left (expr);
31899 	_tmp231_ = _tmp230_;
31900 	_tmp232_ = vala_expression_get_value_type (_tmp231_);
31901 	_tmp233_ = _tmp232_;
31902 	if (!G_TYPE_CHECK_INSTANCE_TYPE (_tmp233_, VALA_TYPE_NULL_TYPE)) {
31903 		ValaExpression* _tmp234_;
31904 		ValaExpression* _tmp235_;
31905 		ValaDataType* _tmp236_;
31906 		ValaDataType* _tmp237_;
31907 		ValaDataType* _tmp238_;
31908 		_tmp234_ = vala_binary_expression_get_left (expr);
31909 		_tmp235_ = _tmp234_;
31910 		_tmp236_ = vala_expression_get_value_type (_tmp235_);
31911 		_tmp237_ = _tmp236_;
31912 		_tmp238_ = self->string_type;
31913 		_tmp229_ = vala_data_type_compatible (_tmp237_, _tmp238_);
31914 	} else {
31915 		_tmp229_ = FALSE;
31916 	}
31917 	if (_tmp229_) {
31918 		ValaExpression* _tmp239_;
31919 		ValaExpression* _tmp240_;
31920 		ValaDataType* _tmp241_;
31921 		ValaDataType* _tmp242_;
31922 		_tmp239_ = vala_binary_expression_get_right (expr);
31923 		_tmp240_ = _tmp239_;
31924 		_tmp241_ = vala_expression_get_value_type (_tmp240_);
31925 		_tmp242_ = _tmp241_;
31926 		_tmp228_ = !G_TYPE_CHECK_INSTANCE_TYPE (_tmp242_, VALA_TYPE_NULL_TYPE);
31927 	} else {
31928 		_tmp228_ = FALSE;
31929 	}
31930 	if (_tmp228_) {
31931 		ValaExpression* _tmp243_;
31932 		ValaExpression* _tmp244_;
31933 		ValaDataType* _tmp245_;
31934 		ValaDataType* _tmp246_;
31935 		ValaDataType* _tmp247_;
31936 		_tmp243_ = vala_binary_expression_get_right (expr);
31937 		_tmp244_ = _tmp243_;
31938 		_tmp245_ = vala_expression_get_value_type (_tmp244_);
31939 		_tmp246_ = _tmp245_;
31940 		_tmp247_ = self->string_type;
31941 		_tmp227_ = vala_data_type_compatible (_tmp246_, _tmp247_);
31942 	} else {
31943 		_tmp227_ = FALSE;
31944 	}
31945 	is_string_comparison = _tmp227_;
31946 	_tmp249_ = vala_binary_expression_get_left (expr);
31947 	_tmp250_ = _tmp249_;
31948 	if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp250_, VALA_TYPE_STRING_LITERAL)) {
31949 		_tmp248_ = TRUE;
31950 	} else {
31951 		ValaExpression* _tmp251_;
31952 		ValaExpression* _tmp252_;
31953 		_tmp251_ = vala_binary_expression_get_right (expr);
31954 		_tmp252_ = _tmp251_;
31955 		_tmp248_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp252_, VALA_TYPE_STRING_LITERAL);
31956 	}
31957 	has_string_literal = _tmp248_;
31958 	if (is_string_comparison) {
31959 		_tmp253_ = TRUE;
31960 	} else {
31961 		gboolean _tmp254_ = FALSE;
31962 		if (has_string_literal) {
31963 			ValaBinaryOperator _tmp255_;
31964 			ValaBinaryOperator _tmp256_;
31965 			_tmp255_ = vala_binary_expression_get_operator (expr);
31966 			_tmp256_ = _tmp255_;
31967 			_tmp254_ = _tmp256_ != VALA_BINARY_OPERATOR_PLUS;
31968 		} else {
31969 			_tmp254_ = FALSE;
31970 		}
31971 		_tmp253_ = _tmp254_;
31972 	}
31973 	if (_tmp253_) {
31974 		ValaBinaryOperator _tmp257_;
31975 		ValaBinaryOperator _tmp258_;
31976 		_tmp257_ = vala_binary_expression_get_operator (expr);
31977 		_tmp258_ = _tmp257_;
31978 		switch (_tmp258_) {
31979 			case VALA_BINARY_OPERATOR_PLUS:
31980 			{
31981 				gboolean _tmp259_ = FALSE;
31982 				ValaExpression* _tmp260_;
31983 				ValaExpression* _tmp261_;
31984 				_tmp260_ = vala_binary_expression_get_left (expr);
31985 				_tmp261_ = _tmp260_;
31986 				if (vala_expression_is_constant (_tmp261_)) {
31987 					ValaExpression* _tmp262_;
31988 					ValaExpression* _tmp263_;
31989 					_tmp262_ = vala_binary_expression_get_right (expr);
31990 					_tmp263_ = _tmp262_;
31991 					_tmp259_ = vala_expression_is_constant (_tmp263_);
31992 				} else {
31993 					_tmp259_ = FALSE;
31994 				}
31995 				if (_tmp259_) {
31996 					gchar* left = NULL;
31997 					gchar* right = NULL;
31998 					ValaCCodeExpression* _tmp264_;
31999 					ValaCCodeExpression* _tmp277_;
32000 					const gchar* _tmp290_;
32001 					const gchar* _tmp291_;
32002 					gchar* _tmp292_;
32003 					gchar* _tmp293_;
32004 					ValaCCodeConstant* _tmp294_;
32005 					ValaCCodeConstant* _tmp295_;
32006 					_tmp264_ = cleft;
32007 					if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp264_, VALA_TYPE_CCODE_IDENTIFIER)) {
32008 						ValaCCodeExpression* _tmp265_;
32009 						const gchar* _tmp266_;
32010 						const gchar* _tmp267_;
32011 						gchar* _tmp268_;
32012 						_tmp265_ = cleft;
32013 						_tmp266_ = vala_ccode_identifier_get_name (G_TYPE_CHECK_INSTANCE_CAST (_tmp265_, VALA_TYPE_CCODE_IDENTIFIER, ValaCCodeIdentifier));
32014 						_tmp267_ = _tmp266_;
32015 						_tmp268_ = g_strdup (_tmp267_);
32016 						_g_free0 (left);
32017 						left = _tmp268_;
32018 					} else {
32019 						ValaCCodeExpression* _tmp269_;
32020 						_tmp269_ = cleft;
32021 						if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp269_, VALA_TYPE_CCODE_CONSTANT)) {
32022 							ValaCCodeExpression* _tmp270_;
32023 							const gchar* _tmp271_;
32024 							const gchar* _tmp272_;
32025 							gchar* _tmp273_;
32026 							_tmp270_ = cleft;
32027 							_tmp271_ = vala_ccode_constant_get_name (G_TYPE_CHECK_INSTANCE_CAST (_tmp270_, VALA_TYPE_CCODE_CONSTANT, ValaCCodeConstant));
32028 							_tmp272_ = _tmp271_;
32029 							_tmp273_ = g_strdup (_tmp272_);
32030 							_g_free0 (left);
32031 							left = _tmp273_;
32032 						} else {
32033 							ValaSourceReference* _tmp274_;
32034 							ValaSourceReference* _tmp275_;
32035 							gchar* _tmp276_;
32036 							_tmp274_ = vala_code_node_get_source_reference ((ValaCodeNode*) expr);
32037 							_tmp275_ = _tmp274_;
32038 							vala_report_error (_tmp275_, "internal: Unsupported expression");
32039 							_tmp276_ = g_strdup ("NULL");
32040 							_g_free0 (left);
32041 							left = _tmp276_;
32042 						}
32043 					}
32044 					_tmp277_ = cright;
32045 					if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp277_, VALA_TYPE_CCODE_IDENTIFIER)) {
32046 						ValaCCodeExpression* _tmp278_;
32047 						const gchar* _tmp279_;
32048 						const gchar* _tmp280_;
32049 						gchar* _tmp281_;
32050 						_tmp278_ = cright;
32051 						_tmp279_ = vala_ccode_identifier_get_name (G_TYPE_CHECK_INSTANCE_CAST (_tmp278_, VALA_TYPE_CCODE_IDENTIFIER, ValaCCodeIdentifier));
32052 						_tmp280_ = _tmp279_;
32053 						_tmp281_ = g_strdup (_tmp280_);
32054 						_g_free0 (right);
32055 						right = _tmp281_;
32056 					} else {
32057 						ValaCCodeExpression* _tmp282_;
32058 						_tmp282_ = cright;
32059 						if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp282_, VALA_TYPE_CCODE_CONSTANT)) {
32060 							ValaCCodeExpression* _tmp283_;
32061 							const gchar* _tmp284_;
32062 							const gchar* _tmp285_;
32063 							gchar* _tmp286_;
32064 							_tmp283_ = cright;
32065 							_tmp284_ = vala_ccode_constant_get_name (G_TYPE_CHECK_INSTANCE_CAST (_tmp283_, VALA_TYPE_CCODE_CONSTANT, ValaCCodeConstant));
32066 							_tmp285_ = _tmp284_;
32067 							_tmp286_ = g_strdup (_tmp285_);
32068 							_g_free0 (right);
32069 							right = _tmp286_;
32070 						} else {
32071 							ValaSourceReference* _tmp287_;
32072 							ValaSourceReference* _tmp288_;
32073 							gchar* _tmp289_;
32074 							_tmp287_ = vala_code_node_get_source_reference ((ValaCodeNode*) expr);
32075 							_tmp288_ = _tmp287_;
32076 							vala_report_error (_tmp288_, "internal: Unsupported expression");
32077 							_tmp289_ = g_strdup ("NULL");
32078 							_g_free0 (right);
32079 							right = _tmp289_;
32080 						}
32081 					}
32082 					_tmp290_ = left;
32083 					_tmp291_ = right;
32084 					_tmp292_ = g_strdup_printf ("%s %s", _tmp290_, _tmp291_);
32085 					_tmp293_ = _tmp292_;
32086 					_tmp294_ = vala_ccode_constant_new (_tmp293_);
32087 					_tmp295_ = _tmp294_;
32088 					vala_set_cvalue ((ValaExpression*) expr, (ValaCCodeExpression*) _tmp295_);
32089 					_vala_ccode_node_unref0 (_tmp295_);
32090 					_g_free0 (_tmp293_);
32091 					_g_free0 (right);
32092 					_g_free0 (left);
32093 				} else {
32094 					ValaTargetValue* temp_value = NULL;
32095 					ValaDataType* _tmp296_;
32096 					ValaDataType* _tmp297_;
32097 					ValaTargetValue* _tmp298_;
32098 					ValaCCodeFunctionCall* ccall = NULL;
32099 					ValaCodeContext* _tmp299_;
32100 					ValaProfile _tmp300_;
32101 					ValaProfile _tmp301_;
32102 					ValaCCodeFunction* _tmp353_;
32103 					ValaCCodeFunction* _tmp354_;
32104 					ValaTargetValue* _tmp355_;
32105 					ValaCCodeExpression* _tmp356_;
32106 					ValaCCodeFunctionCall* _tmp357_;
32107 					ValaTargetValue* _tmp358_;
32108 					_tmp296_ = vala_expression_get_value_type ((ValaExpression*) expr);
32109 					_tmp297_ = _tmp296_;
32110 					_tmp298_ = vala_ccode_base_module_create_temp_value (self, _tmp297_, FALSE, (ValaCodeNode*) expr, NULL);
32111 					temp_value = _tmp298_;
32112 					_tmp299_ = self->priv->_context;
32113 					_tmp300_ = vala_code_context_get_profile (_tmp299_);
32114 					_tmp301_ = _tmp300_;
32115 					if (_tmp301_ == VALA_PROFILE_POSIX) {
32116 						ValaCCodeIdentifier* _tmp302_;
32117 						ValaCCodeIdentifier* _tmp303_;
32118 						ValaCCodeFunctionCall* _tmp304_;
32119 						ValaCCodeFunctionCall* strcpy = NULL;
32120 						ValaCCodeIdentifier* _tmp305_;
32121 						ValaCCodeIdentifier* _tmp306_;
32122 						ValaCCodeFunctionCall* _tmp307_;
32123 						ValaCCodeFunctionCall* _tmp308_;
32124 						ValaCCodeFunctionCall* malloc = NULL;
32125 						ValaCCodeIdentifier* _tmp309_;
32126 						ValaCCodeIdentifier* _tmp310_;
32127 						ValaCCodeFunctionCall* _tmp311_;
32128 						ValaCCodeFunctionCall* _tmp312_;
32129 						ValaCCodeFunctionCall* strlen_a = NULL;
32130 						ValaCCodeIdentifier* _tmp313_;
32131 						ValaCCodeIdentifier* _tmp314_;
32132 						ValaCCodeFunctionCall* _tmp315_;
32133 						ValaCCodeFunctionCall* _tmp316_;
32134 						ValaCCodeFunctionCall* _tmp317_;
32135 						ValaCCodeExpression* _tmp318_;
32136 						ValaCCodeFunctionCall* strlen_b = NULL;
32137 						ValaCCodeIdentifier* _tmp319_;
32138 						ValaCCodeIdentifier* _tmp320_;
32139 						ValaCCodeFunctionCall* _tmp321_;
32140 						ValaCCodeFunctionCall* _tmp322_;
32141 						ValaCCodeFunctionCall* _tmp323_;
32142 						ValaCCodeExpression* _tmp324_;
32143 						ValaCCodeBinaryExpression* newlength = NULL;
32144 						ValaCCodeIdentifier* _tmp325_;
32145 						ValaCCodeIdentifier* _tmp326_;
32146 						ValaCCodeFunctionCall* _tmp327_;
32147 						ValaCCodeFunctionCall* _tmp328_;
32148 						ValaCCodeBinaryExpression* _tmp329_;
32149 						ValaCCodeBinaryExpression* _tmp330_;
32150 						ValaCCodeBinaryExpression* _tmp331_;
32151 						ValaCCodeBinaryExpression* _tmp332_;
32152 						ValaCCodeFunctionCall* _tmp333_;
32153 						ValaCCodeBinaryExpression* _tmp334_;
32154 						ValaCCodeFunctionCall* _tmp335_;
32155 						ValaCCodeFunctionCall* _tmp336_;
32156 						ValaCCodeFunctionCall* _tmp337_;
32157 						ValaCCodeExpression* _tmp338_;
32158 						ValaCCodeFunctionCall* _tmp339_;
32159 						ValaCCodeFunctionCall* _tmp340_;
32160 						ValaCCodeFunctionCall* _tmp341_;
32161 						ValaCCodeExpression* _tmp342_;
32162 						_tmp302_ = vala_ccode_identifier_new ("strcat");
32163 						_tmp303_ = _tmp302_;
32164 						_tmp304_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp303_);
32165 						_vala_ccode_node_unref0 (ccall);
32166 						ccall = _tmp304_;
32167 						_vala_ccode_node_unref0 (_tmp303_);
32168 						_tmp305_ = vala_ccode_identifier_new ("strcpy");
32169 						_tmp306_ = _tmp305_;
32170 						_tmp307_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp306_);
32171 						_tmp308_ = _tmp307_;
32172 						_vala_ccode_node_unref0 (_tmp306_);
32173 						strcpy = _tmp308_;
32174 						_tmp309_ = vala_ccode_identifier_new ("malloc");
32175 						_tmp310_ = _tmp309_;
32176 						_tmp311_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp310_);
32177 						_tmp312_ = _tmp311_;
32178 						_vala_ccode_node_unref0 (_tmp310_);
32179 						malloc = _tmp312_;
32180 						_tmp313_ = vala_ccode_identifier_new ("strlen");
32181 						_tmp314_ = _tmp313_;
32182 						_tmp315_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp314_);
32183 						_tmp316_ = _tmp315_;
32184 						_vala_ccode_node_unref0 (_tmp314_);
32185 						strlen_a = _tmp316_;
32186 						_tmp317_ = strlen_a;
32187 						_tmp318_ = cleft;
32188 						vala_ccode_function_call_add_argument (_tmp317_, _tmp318_);
32189 						_tmp319_ = vala_ccode_identifier_new ("strlen");
32190 						_tmp320_ = _tmp319_;
32191 						_tmp321_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp320_);
32192 						_tmp322_ = _tmp321_;
32193 						_vala_ccode_node_unref0 (_tmp320_);
32194 						strlen_b = _tmp322_;
32195 						_tmp323_ = strlen_b;
32196 						_tmp324_ = cright;
32197 						vala_ccode_function_call_add_argument (_tmp323_, _tmp324_);
32198 						_tmp325_ = vala_ccode_identifier_new ("1");
32199 						_tmp326_ = _tmp325_;
32200 						_tmp327_ = strlen_a;
32201 						_tmp328_ = strlen_b;
32202 						_tmp329_ = vala_ccode_binary_expression_new (VALA_CCODE_BINARY_OPERATOR_PLUS, (ValaCCodeExpression*) _tmp327_, (ValaCCodeExpression*) _tmp328_);
32203 						_tmp330_ = _tmp329_;
32204 						_tmp331_ = vala_ccode_binary_expression_new (VALA_CCODE_BINARY_OPERATOR_PLUS, (ValaCCodeExpression*) _tmp326_, (ValaCCodeExpression*) _tmp330_);
32205 						_tmp332_ = _tmp331_;
32206 						_vala_ccode_node_unref0 (_tmp330_);
32207 						_vala_ccode_node_unref0 (_tmp326_);
32208 						newlength = _tmp332_;
32209 						_tmp333_ = malloc;
32210 						_tmp334_ = newlength;
32211 						vala_ccode_function_call_add_argument (_tmp333_, (ValaCCodeExpression*) _tmp334_);
32212 						_tmp335_ = strcpy;
32213 						_tmp336_ = malloc;
32214 						vala_ccode_function_call_add_argument (_tmp335_, (ValaCCodeExpression*) _tmp336_);
32215 						_tmp337_ = strcpy;
32216 						_tmp338_ = cleft;
32217 						vala_ccode_function_call_add_argument (_tmp337_, _tmp338_);
32218 						_tmp339_ = ccall;
32219 						_tmp340_ = strcpy;
32220 						vala_ccode_function_call_add_argument (_tmp339_, (ValaCCodeExpression*) _tmp340_);
32221 						_tmp341_ = ccall;
32222 						_tmp342_ = cright;
32223 						vala_ccode_function_call_add_argument (_tmp341_, _tmp342_);
32224 						_vala_ccode_node_unref0 (newlength);
32225 						_vala_ccode_node_unref0 (strlen_b);
32226 						_vala_ccode_node_unref0 (strlen_a);
32227 						_vala_ccode_node_unref0 (malloc);
32228 						_vala_ccode_node_unref0 (strcpy);
32229 					} else {
32230 						ValaCCodeIdentifier* _tmp343_;
32231 						ValaCCodeIdentifier* _tmp344_;
32232 						ValaCCodeFunctionCall* _tmp345_;
32233 						ValaCCodeFunctionCall* _tmp346_;
32234 						ValaCCodeExpression* _tmp347_;
32235 						ValaCCodeFunctionCall* _tmp348_;
32236 						ValaCCodeExpression* _tmp349_;
32237 						ValaCCodeFunctionCall* _tmp350_;
32238 						ValaCCodeConstant* _tmp351_;
32239 						ValaCCodeConstant* _tmp352_;
32240 						_tmp343_ = vala_ccode_identifier_new ("g_strconcat");
32241 						_tmp344_ = _tmp343_;
32242 						_tmp345_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp344_);
32243 						_vala_ccode_node_unref0 (ccall);
32244 						ccall = _tmp345_;
32245 						_vala_ccode_node_unref0 (_tmp344_);
32246 						_tmp346_ = ccall;
32247 						_tmp347_ = cleft;
32248 						vala_ccode_function_call_add_argument (_tmp346_, _tmp347_);
32249 						_tmp348_ = ccall;
32250 						_tmp349_ = cright;
32251 						vala_ccode_function_call_add_argument (_tmp348_, _tmp349_);
32252 						_tmp350_ = ccall;
32253 						_tmp351_ = vala_ccode_constant_new ("NULL");
32254 						_tmp352_ = _tmp351_;
32255 						vala_ccode_function_call_add_argument (_tmp350_, (ValaCCodeExpression*) _tmp352_);
32256 						_vala_ccode_node_unref0 (_tmp352_);
32257 					}
32258 					_tmp353_ = vala_ccode_base_module_get_ccode (self);
32259 					_tmp354_ = _tmp353_;
32260 					_tmp355_ = temp_value;
32261 					_tmp356_ = vala_get_cvalue_ (_tmp355_);
32262 					_tmp357_ = ccall;
32263 					vala_ccode_function_add_assignment (_tmp354_, _tmp356_, (ValaCCodeExpression*) _tmp357_);
32264 					_tmp358_ = temp_value;
32265 					vala_expression_set_target_value ((ValaExpression*) expr, _tmp358_);
32266 					_vala_ccode_node_unref0 (ccall);
32267 					_vala_target_value_unref0 (temp_value);
32268 				}
32269 				_vala_ccode_node_unref0 (left_chain);
32270 				_vala_ccode_node_unref0 (cright);
32271 				_vala_ccode_node_unref0 (cleft);
32272 				return;
32273 			}
32274 			case VALA_BINARY_OPERATOR_EQUALITY:
32275 			case VALA_BINARY_OPERATOR_INEQUALITY:
32276 			case VALA_BINARY_OPERATOR_LESS_THAN:
32277 			case VALA_BINARY_OPERATOR_GREATER_THAN:
32278 			case VALA_BINARY_OPERATOR_LESS_THAN_OR_EQUAL:
32279 			case VALA_BINARY_OPERATOR_GREATER_THAN_OR_EQUAL:
32280 			{
32281 				ValaCCodeFunctionCall* ccall = NULL;
32282 				ValaCodeContext* _tmp359_;
32283 				ValaProfile _tmp360_;
32284 				ValaProfile _tmp361_;
32285 				ValaCCodeFunctionCall* _tmp373_;
32286 				ValaCCodeExpression* _tmp374_;
32287 				ValaCCodeFunctionCall* _tmp375_;
32288 				ValaCCodeExpression* _tmp376_;
32289 				ValaCCodeFunctionCall* _tmp377_;
32290 				ValaCCodeExpression* _tmp378_;
32291 				ValaCCodeConstant* _tmp379_;
32292 				_tmp359_ = self->priv->_context;
32293 				_tmp360_ = vala_code_context_get_profile (_tmp359_);
32294 				_tmp361_ = _tmp360_;
32295 				if (_tmp361_ == VALA_PROFILE_POSIX) {
32296 					ValaCCodeFile* _tmp362_;
32297 					ValaCCodeIdentifier* _tmp363_;
32298 					ValaCCodeIdentifier* _tmp364_;
32299 					gchar* _tmp365_;
32300 					gchar* _tmp366_;
32301 					ValaCCodeIdentifier* _tmp367_;
32302 					ValaCCodeIdentifier* _tmp368_;
32303 					ValaCCodeFunctionCall* _tmp369_;
32304 					_tmp362_ = self->cfile;
32305 					vala_ccode_file_add_include (_tmp362_, "string.h", FALSE);
32306 					_tmp363_ = vala_ccode_identifier_new ("strcmp");
32307 					_tmp364_ = _tmp363_;
32308 					_tmp365_ = vala_ccode_base_module_generate_cmp_wrapper (self, _tmp364_);
32309 					_tmp366_ = _tmp365_;
32310 					_tmp367_ = vala_ccode_identifier_new (_tmp366_);
32311 					_tmp368_ = _tmp367_;
32312 					_tmp369_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp368_);
32313 					_vala_ccode_node_unref0 (ccall);
32314 					ccall = _tmp369_;
32315 					_vala_ccode_node_unref0 (_tmp368_);
32316 					_g_free0 (_tmp366_);
32317 					_vala_ccode_node_unref0 (_tmp364_);
32318 				} else {
32319 					ValaCCodeIdentifier* _tmp370_;
32320 					ValaCCodeIdentifier* _tmp371_;
32321 					ValaCCodeFunctionCall* _tmp372_;
32322 					_tmp370_ = vala_ccode_identifier_new ("g_strcmp0");
32323 					_tmp371_ = _tmp370_;
32324 					_tmp372_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp371_);
32325 					_vala_ccode_node_unref0 (ccall);
32326 					ccall = _tmp372_;
32327 					_vala_ccode_node_unref0 (_tmp371_);
32328 				}
32329 				_tmp373_ = ccall;
32330 				_tmp374_ = cleft;
32331 				vala_ccode_function_call_add_argument (_tmp373_, _tmp374_);
32332 				_tmp375_ = ccall;
32333 				_tmp376_ = cright;
32334 				vala_ccode_function_call_add_argument (_tmp375_, _tmp376_);
32335 				_tmp377_ = ccall;
32336 				_tmp378_ = _vala_ccode_node_ref0 ((ValaCCodeExpression*) _tmp377_);
32337 				_vala_ccode_node_unref0 (cleft);
32338 				cleft = _tmp378_;
32339 				_tmp379_ = vala_ccode_constant_new ("0");
32340 				_vala_ccode_node_unref0 (cright);
32341 				cright = (ValaCCodeExpression*) _tmp379_;
32342 				_vala_ccode_node_unref0 (ccall);
32343 				break;
32344 			}
32345 			default:
32346 			{
32347 				break;
32348 			}
32349 		}
32350 	}
32351 	_tmp380_ = op;
32352 	_tmp381_ = cleft;
32353 	_tmp382_ = cright;
32354 	_tmp383_ = vala_ccode_binary_expression_new (_tmp380_, _tmp381_, _tmp382_);
32355 	_tmp384_ = _tmp383_;
32356 	vala_set_cvalue ((ValaExpression*) expr, (ValaCCodeExpression*) _tmp384_);
32357 	_vala_ccode_node_unref0 (_tmp384_);
32358 	_tmp385_ = left_chain;
32359 	if (_tmp385_ != NULL) {
32360 		ValaCCodeExpression* _tmp386_;
32361 		ValaCCodeExpression* _tmp387_;
32362 		ValaCCodeBinaryExpression* _tmp388_;
32363 		ValaCCodeBinaryExpression* _tmp389_;
32364 		_tmp386_ = left_chain;
32365 		_tmp387_ = vala_get_cvalue ((ValaExpression*) expr);
32366 		_tmp388_ = vala_ccode_binary_expression_new (VALA_CCODE_BINARY_OPERATOR_AND, _tmp386_, _tmp387_);
32367 		_tmp389_ = _tmp388_;
32368 		vala_set_cvalue ((ValaExpression*) expr, (ValaCCodeExpression*) _tmp389_);
32369 		_vala_ccode_node_unref0 (_tmp389_);
32370 	}
32371 	_vala_ccode_node_unref0 (left_chain);
32372 	_vala_ccode_node_unref0 (cright);
32373 	_vala_ccode_node_unref0 (cleft);
32374 }
32375 
32376 ValaCCodeExpression*
vala_ccode_base_module_create_type_check(ValaCCodeBaseModule * self,ValaCCodeNode * ccodenode,ValaDataType * type)32377 vala_ccode_base_module_create_type_check (ValaCCodeBaseModule* self,
32378                                           ValaCCodeNode* ccodenode,
32379                                           ValaDataType* type)
32380 {
32381 	ValaErrorType* et = NULL;
32382 	ValaErrorType* _tmp0_;
32383 	gboolean _tmp1_ = FALSE;
32384 	ValaErrorType* _tmp2_;
32385 	ValaCCodeExpression* result = NULL;
32386 	g_return_val_if_fail (self != NULL, NULL);
32387 	g_return_val_if_fail (ccodenode != NULL, NULL);
32388 	g_return_val_if_fail (type != NULL, NULL);
32389 	_tmp0_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (type, VALA_TYPE_ERROR_TYPE) ? ((ValaErrorType*) type) : NULL);
32390 	et = _tmp0_;
32391 	_tmp2_ = et;
32392 	if (_tmp2_ != NULL) {
32393 		ValaErrorType* _tmp3_;
32394 		ValaErrorCode* _tmp4_;
32395 		ValaErrorCode* _tmp5_;
32396 		_tmp3_ = et;
32397 		_tmp4_ = vala_error_type_get_error_code (_tmp3_);
32398 		_tmp5_ = _tmp4_;
32399 		_tmp1_ = _tmp5_ != NULL;
32400 	} else {
32401 		_tmp1_ = FALSE;
32402 	}
32403 	if (_tmp1_) {
32404 		ValaCCodeFunctionCall* matches_call = NULL;
32405 		ValaCCodeIdentifier* _tmp6_;
32406 		ValaCCodeIdentifier* _tmp7_;
32407 		ValaCCodeFunctionCall* _tmp8_;
32408 		ValaCCodeFunctionCall* _tmp9_;
32409 		ValaCCodeFunctionCall* _tmp10_;
32410 		ValaCCodeFunctionCall* _tmp11_;
32411 		ValaErrorType* _tmp12_;
32412 		ValaErrorDomain* _tmp13_;
32413 		ValaErrorDomain* _tmp14_;
32414 		gchar* _tmp15_;
32415 		gchar* _tmp16_;
32416 		ValaCCodeIdentifier* _tmp17_;
32417 		ValaCCodeIdentifier* _tmp18_;
32418 		ValaCCodeFunctionCall* _tmp19_;
32419 		ValaErrorType* _tmp20_;
32420 		ValaErrorCode* _tmp21_;
32421 		ValaErrorCode* _tmp22_;
32422 		gchar* _tmp23_;
32423 		gchar* _tmp24_;
32424 		ValaCCodeIdentifier* _tmp25_;
32425 		ValaCCodeIdentifier* _tmp26_;
32426 		_tmp6_ = vala_ccode_identifier_new ("g_error_matches");
32427 		_tmp7_ = _tmp6_;
32428 		_tmp8_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp7_);
32429 		_tmp9_ = _tmp8_;
32430 		_vala_ccode_node_unref0 (_tmp7_);
32431 		matches_call = _tmp9_;
32432 		_tmp10_ = matches_call;
32433 		vala_ccode_function_call_add_argument (_tmp10_, G_TYPE_CHECK_INSTANCE_CAST (ccodenode, VALA_TYPE_CCODE_EXPRESSION, ValaCCodeExpression));
32434 		_tmp11_ = matches_call;
32435 		_tmp12_ = et;
32436 		_tmp13_ = vala_error_type_get_error_domain (_tmp12_);
32437 		_tmp14_ = _tmp13_;
32438 		_tmp15_ = vala_get_ccode_upper_case_name ((ValaSymbol*) _tmp14_, NULL);
32439 		_tmp16_ = _tmp15_;
32440 		_tmp17_ = vala_ccode_identifier_new (_tmp16_);
32441 		_tmp18_ = _tmp17_;
32442 		vala_ccode_function_call_add_argument (_tmp11_, (ValaCCodeExpression*) _tmp18_);
32443 		_vala_ccode_node_unref0 (_tmp18_);
32444 		_g_free0 (_tmp16_);
32445 		_tmp19_ = matches_call;
32446 		_tmp20_ = et;
32447 		_tmp21_ = vala_error_type_get_error_code (_tmp20_);
32448 		_tmp22_ = _tmp21_;
32449 		_tmp23_ = vala_get_ccode_name ((ValaCodeNode*) _tmp22_);
32450 		_tmp24_ = _tmp23_;
32451 		_tmp25_ = vala_ccode_identifier_new (_tmp24_);
32452 		_tmp26_ = _tmp25_;
32453 		vala_ccode_function_call_add_argument (_tmp19_, (ValaCCodeExpression*) _tmp26_);
32454 		_vala_ccode_node_unref0 (_tmp26_);
32455 		_g_free0 (_tmp24_);
32456 		result = (ValaCCodeExpression*) matches_call;
32457 		_vala_code_node_unref0 (et);
32458 		return result;
32459 	} else {
32460 		gboolean _tmp27_ = FALSE;
32461 		ValaErrorType* _tmp28_;
32462 		_tmp28_ = et;
32463 		if (_tmp28_ != NULL) {
32464 			ValaErrorType* _tmp29_;
32465 			ValaErrorDomain* _tmp30_;
32466 			ValaErrorDomain* _tmp31_;
32467 			_tmp29_ = et;
32468 			_tmp30_ = vala_error_type_get_error_domain (_tmp29_);
32469 			_tmp31_ = _tmp30_;
32470 			_tmp27_ = _tmp31_ != NULL;
32471 		} else {
32472 			_tmp27_ = FALSE;
32473 		}
32474 		if (_tmp27_) {
32475 			ValaCCodeMemberAccess* instance_domain = NULL;
32476 			ValaCCodeMemberAccess* _tmp32_;
32477 			ValaCCodeIdentifier* type_domain = NULL;
32478 			ValaErrorType* _tmp33_;
32479 			ValaErrorDomain* _tmp34_;
32480 			ValaErrorDomain* _tmp35_;
32481 			gchar* _tmp36_;
32482 			gchar* _tmp37_;
32483 			ValaCCodeIdentifier* _tmp38_;
32484 			ValaCCodeIdentifier* _tmp39_;
32485 			ValaCCodeMemberAccess* _tmp40_;
32486 			ValaCCodeIdentifier* _tmp41_;
32487 			ValaCCodeBinaryExpression* _tmp42_;
32488 			_tmp32_ = vala_ccode_member_access_new_pointer (G_TYPE_CHECK_INSTANCE_CAST (ccodenode, VALA_TYPE_CCODE_EXPRESSION, ValaCCodeExpression), "domain");
32489 			instance_domain = _tmp32_;
32490 			_tmp33_ = et;
32491 			_tmp34_ = vala_error_type_get_error_domain (_tmp33_);
32492 			_tmp35_ = _tmp34_;
32493 			_tmp36_ = vala_get_ccode_upper_case_name ((ValaSymbol*) _tmp35_, NULL);
32494 			_tmp37_ = _tmp36_;
32495 			_tmp38_ = vala_ccode_identifier_new (_tmp37_);
32496 			_tmp39_ = _tmp38_;
32497 			_g_free0 (_tmp37_);
32498 			type_domain = _tmp39_;
32499 			_tmp40_ = instance_domain;
32500 			_tmp41_ = type_domain;
32501 			_tmp42_ = vala_ccode_binary_expression_new (VALA_CCODE_BINARY_OPERATOR_EQUALITY, (ValaCCodeExpression*) _tmp40_, (ValaCCodeExpression*) _tmp41_);
32502 			result = (ValaCCodeExpression*) _tmp42_;
32503 			_vala_ccode_node_unref0 (type_domain);
32504 			_vala_ccode_node_unref0 (instance_domain);
32505 			_vala_code_node_unref0 (et);
32506 			return result;
32507 		} else {
32508 			ValaCCodeFunctionCall* ccheck = NULL;
32509 			gboolean _tmp43_ = FALSE;
32510 			ValaTypeSymbol* _tmp44_;
32511 			ValaTypeSymbol* _tmp45_;
32512 			_tmp44_ = vala_data_type_get_type_symbol (type);
32513 			_tmp45_ = _tmp44_;
32514 			if (_tmp45_ == NULL) {
32515 				_tmp43_ = TRUE;
32516 			} else {
32517 				ValaTypeSymbol* _tmp46_;
32518 				ValaTypeSymbol* _tmp47_;
32519 				gboolean _tmp48_;
32520 				gboolean _tmp49_;
32521 				_tmp46_ = vala_data_type_get_type_symbol (type);
32522 				_tmp47_ = _tmp46_;
32523 				_tmp48_ = vala_symbol_get_external_package ((ValaSymbol*) _tmp47_);
32524 				_tmp49_ = _tmp48_;
32525 				_tmp43_ = _tmp49_;
32526 			}
32527 			if (_tmp43_) {
32528 				ValaCCodeExpression* type_id = NULL;
32529 				ValaCCodeExpression* _tmp50_;
32530 				ValaCCodeExpression* _tmp51_;
32531 				ValaCCodeIdentifier* _tmp53_;
32532 				ValaCCodeIdentifier* _tmp54_;
32533 				ValaCCodeFunctionCall* _tmp55_;
32534 				ValaCCodeFunctionCall* _tmp56_;
32535 				ValaCCodeFunctionCall* _tmp57_;
32536 				ValaCCodeExpression* _tmp58_;
32537 				_tmp50_ = vala_ccode_base_module_get_type_id_expression (self, type, FALSE);
32538 				type_id = _tmp50_;
32539 				_tmp51_ = type_id;
32540 				if (_tmp51_ == NULL) {
32541 					ValaCCodeInvalidExpression* _tmp52_;
32542 					_tmp52_ = vala_ccode_invalid_expression_new ();
32543 					result = (ValaCCodeExpression*) _tmp52_;
32544 					_vala_ccode_node_unref0 (type_id);
32545 					_vala_ccode_node_unref0 (ccheck);
32546 					_vala_code_node_unref0 (et);
32547 					return result;
32548 				}
32549 				_tmp53_ = vala_ccode_identifier_new ("G_TYPE_CHECK_INSTANCE_TYPE");
32550 				_tmp54_ = _tmp53_;
32551 				_tmp55_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp54_);
32552 				_vala_ccode_node_unref0 (ccheck);
32553 				ccheck = _tmp55_;
32554 				_vala_ccode_node_unref0 (_tmp54_);
32555 				_tmp56_ = ccheck;
32556 				vala_ccode_function_call_add_argument (_tmp56_, G_TYPE_CHECK_INSTANCE_CAST (ccodenode, VALA_TYPE_CCODE_EXPRESSION, ValaCCodeExpression));
32557 				_tmp57_ = ccheck;
32558 				_tmp58_ = type_id;
32559 				vala_ccode_function_call_add_argument (_tmp57_, _tmp58_);
32560 				_vala_ccode_node_unref0 (type_id);
32561 			} else {
32562 				ValaTypeSymbol* _tmp59_;
32563 				ValaTypeSymbol* _tmp60_;
32564 				gchar* _tmp61_;
32565 				gchar* _tmp62_;
32566 				ValaCCodeIdentifier* _tmp63_;
32567 				ValaCCodeIdentifier* _tmp64_;
32568 				ValaCCodeFunctionCall* _tmp65_;
32569 				ValaCCodeFunctionCall* _tmp66_;
32570 				_tmp59_ = vala_data_type_get_type_symbol (type);
32571 				_tmp60_ = _tmp59_;
32572 				_tmp61_ = vala_get_ccode_type_check_function (_tmp60_);
32573 				_tmp62_ = _tmp61_;
32574 				_tmp63_ = vala_ccode_identifier_new (_tmp62_);
32575 				_tmp64_ = _tmp63_;
32576 				_tmp65_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp64_);
32577 				_vala_ccode_node_unref0 (ccheck);
32578 				ccheck = _tmp65_;
32579 				_vala_ccode_node_unref0 (_tmp64_);
32580 				_g_free0 (_tmp62_);
32581 				_tmp66_ = ccheck;
32582 				vala_ccode_function_call_add_argument (_tmp66_, G_TYPE_CHECK_INSTANCE_CAST (ccodenode, VALA_TYPE_CCODE_EXPRESSION, ValaCCodeExpression));
32583 			}
32584 			result = (ValaCCodeExpression*) ccheck;
32585 			_vala_code_node_unref0 (et);
32586 			return result;
32587 		}
32588 	}
32589 	_vala_code_node_unref0 (et);
32590 }
32591 
32592 static gchar*
vala_ccode_base_module_generate_array_contains_wrapper(ValaCCodeBaseModule * self,ValaArrayType * array_type)32593 vala_ccode_base_module_generate_array_contains_wrapper (ValaCCodeBaseModule* self,
32594                                                         ValaArrayType* array_type)
32595 {
32596 	gchar* array_contains_func = NULL;
32597 	ValaDataType* _tmp0_;
32598 	ValaDataType* _tmp1_;
32599 	gchar* _tmp2_;
32600 	gchar* _tmp3_;
32601 	gchar* _tmp4_;
32602 	gchar* _tmp5_;
32603 	const gchar* _tmp6_;
32604 	ValaCCodeFunction* function = NULL;
32605 	const gchar* _tmp7_;
32606 	ValaDataType* _tmp8_;
32607 	gchar* _tmp9_;
32608 	gchar* _tmp10_;
32609 	ValaCCodeFunction* _tmp11_;
32610 	ValaCCodeFunction* _tmp12_;
32611 	ValaCCodeFunction* _tmp13_;
32612 	ValaCCodeFunction* _tmp14_;
32613 	ValaDataType* _tmp15_;
32614 	ValaDataType* _tmp16_;
32615 	gchar* _tmp17_;
32616 	gchar* _tmp18_;
32617 	gchar* _tmp19_;
32618 	gchar* _tmp20_;
32619 	ValaCCodeParameter* _tmp21_;
32620 	ValaCCodeParameter* _tmp22_;
32621 	ValaCCodeFunction* _tmp23_;
32622 	ValaDataType* _tmp24_;
32623 	gchar* _tmp25_;
32624 	gchar* _tmp26_;
32625 	ValaCCodeParameter* _tmp27_;
32626 	ValaCCodeParameter* _tmp28_;
32627 	ValaDataType* _tmp29_;
32628 	ValaDataType* _tmp30_;
32629 	ValaCCodeFunction* _tmp49_;
32630 	ValaCCodeFunction* _tmp50_;
32631 	ValaCCodeFunction* _tmp51_;
32632 	ValaDataType* _tmp52_;
32633 	gchar* _tmp53_;
32634 	gchar* _tmp54_;
32635 	ValaCCodeVariableDeclarator* _tmp55_;
32636 	ValaCCodeVariableDeclarator* _tmp56_;
32637 	ValaCCodeAssignment* cloop_initializer = NULL;
32638 	ValaCCodeIdentifier* _tmp57_;
32639 	ValaCCodeIdentifier* _tmp58_;
32640 	ValaCCodeConstant* _tmp59_;
32641 	ValaCCodeConstant* _tmp60_;
32642 	ValaCCodeAssignment* _tmp61_;
32643 	ValaCCodeAssignment* _tmp62_;
32644 	ValaCCodeBinaryExpression* cloop_condition = NULL;
32645 	ValaCCodeIdentifier* _tmp63_;
32646 	ValaCCodeIdentifier* _tmp64_;
32647 	ValaCCodeIdentifier* _tmp65_;
32648 	ValaCCodeIdentifier* _tmp66_;
32649 	ValaCCodeBinaryExpression* _tmp67_;
32650 	ValaCCodeBinaryExpression* _tmp68_;
32651 	ValaCCodeUnaryExpression* cloop_iterator = NULL;
32652 	ValaCCodeIdentifier* _tmp69_;
32653 	ValaCCodeIdentifier* _tmp70_;
32654 	ValaCCodeUnaryExpression* _tmp71_;
32655 	ValaCCodeUnaryExpression* _tmp72_;
32656 	ValaCCodeFunction* _tmp73_;
32657 	ValaCCodeFunction* _tmp74_;
32658 	ValaCCodeAssignment* _tmp75_;
32659 	ValaCCodeBinaryExpression* _tmp76_;
32660 	ValaCCodeUnaryExpression* _tmp77_;
32661 	ValaCCodeElementAccess* celement = NULL;
32662 	ValaCCodeIdentifier* _tmp78_;
32663 	ValaCCodeIdentifier* _tmp79_;
32664 	ValaCCodeIdentifier* _tmp80_;
32665 	ValaCCodeIdentifier* _tmp81_;
32666 	ValaCCodeElementAccess* _tmp82_;
32667 	ValaCCodeElementAccess* _tmp83_;
32668 	ValaCCodeIdentifier* cneedle = NULL;
32669 	ValaCCodeIdentifier* _tmp84_;
32670 	ValaCCodeBinaryExpression* cif_condition = NULL;
32671 	ValaDataType* _tmp85_;
32672 	ValaDataType* _tmp86_;
32673 	ValaDataType* _tmp87_;
32674 	ValaCCodeFunction* _tmp135_;
32675 	ValaCCodeFunction* _tmp136_;
32676 	ValaCCodeBinaryExpression* _tmp137_;
32677 	ValaCCodeFunction* _tmp138_;
32678 	ValaCCodeFunction* _tmp139_;
32679 	ValaCCodeExpression* _tmp140_;
32680 	ValaCCodeExpression* _tmp141_;
32681 	ValaCCodeFunction* _tmp142_;
32682 	ValaCCodeFunction* _tmp143_;
32683 	ValaCCodeFunction* _tmp144_;
32684 	ValaCCodeFunction* _tmp145_;
32685 	ValaCCodeFunction* _tmp146_;
32686 	ValaCCodeFunction* _tmp147_;
32687 	ValaCCodeExpression* _tmp148_;
32688 	ValaCCodeExpression* _tmp149_;
32689 	ValaCCodeFile* _tmp150_;
32690 	ValaCCodeFunction* _tmp151_;
32691 	ValaCCodeFile* _tmp152_;
32692 	ValaCCodeFunction* _tmp153_;
32693 	gchar* result = NULL;
32694 	g_return_val_if_fail (self != NULL, NULL);
32695 	g_return_val_if_fail (array_type != NULL, NULL);
32696 	_tmp0_ = vala_array_type_get_element_type (array_type);
32697 	_tmp1_ = _tmp0_;
32698 	_tmp2_ = vala_get_ccode_lower_case_name ((ValaCodeNode*) _tmp1_, NULL);
32699 	_tmp3_ = _tmp2_;
32700 	_tmp4_ = g_strdup_printf ("_vala_%s_array_contains", _tmp3_);
32701 	_tmp5_ = _tmp4_;
32702 	_g_free0 (_tmp3_);
32703 	array_contains_func = _tmp5_;
32704 	_tmp6_ = array_contains_func;
32705 	if (!vala_ccode_base_module_add_wrapper (self, _tmp6_)) {
32706 		result = array_contains_func;
32707 		return result;
32708 	}
32709 	_tmp7_ = array_contains_func;
32710 	_tmp8_ = self->bool_type;
32711 	_tmp9_ = vala_get_ccode_name ((ValaCodeNode*) _tmp8_);
32712 	_tmp10_ = _tmp9_;
32713 	_tmp11_ = vala_ccode_function_new (_tmp7_, _tmp10_);
32714 	_tmp12_ = _tmp11_;
32715 	_g_free0 (_tmp10_);
32716 	function = _tmp12_;
32717 	_tmp13_ = function;
32718 	vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp13_, VALA_CCODE_MODIFIERS_STATIC);
32719 	_tmp14_ = function;
32720 	_tmp15_ = vala_array_type_get_element_type (array_type);
32721 	_tmp16_ = _tmp15_;
32722 	_tmp17_ = vala_get_ccode_name ((ValaCodeNode*) _tmp16_);
32723 	_tmp18_ = _tmp17_;
32724 	_tmp19_ = g_strdup_printf ("%s *", _tmp18_);
32725 	_tmp20_ = _tmp19_;
32726 	_tmp21_ = vala_ccode_parameter_new ("stack", _tmp20_);
32727 	_tmp22_ = _tmp21_;
32728 	vala_ccode_function_add_parameter (_tmp14_, _tmp22_);
32729 	_vala_ccode_node_unref0 (_tmp22_);
32730 	_g_free0 (_tmp20_);
32731 	_g_free0 (_tmp18_);
32732 	_tmp23_ = function;
32733 	_tmp24_ = self->int_type;
32734 	_tmp25_ = vala_get_ccode_name ((ValaCodeNode*) _tmp24_);
32735 	_tmp26_ = _tmp25_;
32736 	_tmp27_ = vala_ccode_parameter_new ("stack_length", _tmp26_);
32737 	_tmp28_ = _tmp27_;
32738 	vala_ccode_function_add_parameter (_tmp23_, _tmp28_);
32739 	_vala_ccode_node_unref0 (_tmp28_);
32740 	_g_free0 (_tmp26_);
32741 	_tmp29_ = vala_array_type_get_element_type (array_type);
32742 	_tmp30_ = _tmp29_;
32743 	if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp30_, VALA_TYPE_STRUCT_VALUE_TYPE)) {
32744 		ValaCCodeFunction* _tmp31_;
32745 		ValaDataType* _tmp32_;
32746 		ValaDataType* _tmp33_;
32747 		gchar* _tmp34_;
32748 		gchar* _tmp35_;
32749 		gchar* _tmp36_;
32750 		gchar* _tmp37_;
32751 		ValaCCodeParameter* _tmp38_;
32752 		ValaCCodeParameter* _tmp39_;
32753 		_tmp31_ = function;
32754 		_tmp32_ = vala_array_type_get_element_type (array_type);
32755 		_tmp33_ = _tmp32_;
32756 		_tmp34_ = vala_get_ccode_name ((ValaCodeNode*) _tmp33_);
32757 		_tmp35_ = _tmp34_;
32758 		_tmp36_ = g_strdup_printf ("const %s *", _tmp35_);
32759 		_tmp37_ = _tmp36_;
32760 		_tmp38_ = vala_ccode_parameter_new ("needle", _tmp37_);
32761 		_tmp39_ = _tmp38_;
32762 		vala_ccode_function_add_parameter (_tmp31_, _tmp39_);
32763 		_vala_ccode_node_unref0 (_tmp39_);
32764 		_g_free0 (_tmp37_);
32765 		_g_free0 (_tmp35_);
32766 	} else {
32767 		ValaCCodeFunction* _tmp40_;
32768 		ValaDataType* _tmp41_;
32769 		ValaDataType* _tmp42_;
32770 		gchar* _tmp43_;
32771 		gchar* _tmp44_;
32772 		gchar* _tmp45_;
32773 		gchar* _tmp46_;
32774 		ValaCCodeParameter* _tmp47_;
32775 		ValaCCodeParameter* _tmp48_;
32776 		_tmp40_ = function;
32777 		_tmp41_ = vala_array_type_get_element_type (array_type);
32778 		_tmp42_ = _tmp41_;
32779 		_tmp43_ = vala_get_ccode_name ((ValaCodeNode*) _tmp42_);
32780 		_tmp44_ = _tmp43_;
32781 		_tmp45_ = g_strdup_printf ("const %s", _tmp44_);
32782 		_tmp46_ = _tmp45_;
32783 		_tmp47_ = vala_ccode_parameter_new ("needle", _tmp46_);
32784 		_tmp48_ = _tmp47_;
32785 		vala_ccode_function_add_parameter (_tmp40_, _tmp48_);
32786 		_vala_ccode_node_unref0 (_tmp48_);
32787 		_g_free0 (_tmp46_);
32788 		_g_free0 (_tmp44_);
32789 	}
32790 	_tmp49_ = function;
32791 	vala_ccode_base_module_push_function (self, _tmp49_);
32792 	_tmp50_ = vala_ccode_base_module_get_ccode (self);
32793 	_tmp51_ = _tmp50_;
32794 	_tmp52_ = self->int_type;
32795 	_tmp53_ = vala_get_ccode_name ((ValaCodeNode*) _tmp52_);
32796 	_tmp54_ = _tmp53_;
32797 	_tmp55_ = vala_ccode_variable_declarator_new ("i", NULL, NULL);
32798 	_tmp56_ = _tmp55_;
32799 	vala_ccode_function_add_declaration (_tmp51_, _tmp54_, (ValaCCodeDeclarator*) _tmp56_, 0);
32800 	_vala_ccode_node_unref0 (_tmp56_);
32801 	_g_free0 (_tmp54_);
32802 	_tmp57_ = vala_ccode_identifier_new ("i");
32803 	_tmp58_ = _tmp57_;
32804 	_tmp59_ = vala_ccode_constant_new ("0");
32805 	_tmp60_ = _tmp59_;
32806 	_tmp61_ = vala_ccode_assignment_new ((ValaCCodeExpression*) _tmp58_, (ValaCCodeExpression*) _tmp60_, VALA_CCODE_ASSIGNMENT_OPERATOR_SIMPLE);
32807 	_tmp62_ = _tmp61_;
32808 	_vala_ccode_node_unref0 (_tmp60_);
32809 	_vala_ccode_node_unref0 (_tmp58_);
32810 	cloop_initializer = _tmp62_;
32811 	_tmp63_ = vala_ccode_identifier_new ("i");
32812 	_tmp64_ = _tmp63_;
32813 	_tmp65_ = vala_ccode_identifier_new ("stack_length");
32814 	_tmp66_ = _tmp65_;
32815 	_tmp67_ = vala_ccode_binary_expression_new (VALA_CCODE_BINARY_OPERATOR_LESS_THAN, (ValaCCodeExpression*) _tmp64_, (ValaCCodeExpression*) _tmp66_);
32816 	_tmp68_ = _tmp67_;
32817 	_vala_ccode_node_unref0 (_tmp66_);
32818 	_vala_ccode_node_unref0 (_tmp64_);
32819 	cloop_condition = _tmp68_;
32820 	_tmp69_ = vala_ccode_identifier_new ("i");
32821 	_tmp70_ = _tmp69_;
32822 	_tmp71_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_POSTFIX_INCREMENT, (ValaCCodeExpression*) _tmp70_);
32823 	_tmp72_ = _tmp71_;
32824 	_vala_ccode_node_unref0 (_tmp70_);
32825 	cloop_iterator = _tmp72_;
32826 	_tmp73_ = vala_ccode_base_module_get_ccode (self);
32827 	_tmp74_ = _tmp73_;
32828 	_tmp75_ = cloop_initializer;
32829 	_tmp76_ = cloop_condition;
32830 	_tmp77_ = cloop_iterator;
32831 	vala_ccode_function_open_for (_tmp74_, (ValaCCodeExpression*) _tmp75_, (ValaCCodeExpression*) _tmp76_, (ValaCCodeExpression*) _tmp77_);
32832 	_tmp78_ = vala_ccode_identifier_new ("stack");
32833 	_tmp79_ = _tmp78_;
32834 	_tmp80_ = vala_ccode_identifier_new ("i");
32835 	_tmp81_ = _tmp80_;
32836 	_tmp82_ = vala_ccode_element_access_new ((ValaCCodeExpression*) _tmp79_, (ValaCCodeExpression*) _tmp81_);
32837 	_tmp83_ = _tmp82_;
32838 	_vala_ccode_node_unref0 (_tmp81_);
32839 	_vala_ccode_node_unref0 (_tmp79_);
32840 	celement = _tmp83_;
32841 	_tmp84_ = vala_ccode_identifier_new ("needle");
32842 	cneedle = _tmp84_;
32843 	_tmp85_ = vala_array_type_get_element_type (array_type);
32844 	_tmp86_ = _tmp85_;
32845 	_tmp87_ = self->string_type;
32846 	if (vala_data_type_compatible (_tmp86_, _tmp87_)) {
32847 		ValaCCodeFunctionCall* ccall = NULL;
32848 		ValaCodeContext* _tmp88_;
32849 		ValaProfile _tmp89_;
32850 		ValaProfile _tmp90_;
32851 		ValaCCodeFunctionCall* _tmp102_;
32852 		ValaCCodeElementAccess* _tmp103_;
32853 		ValaCCodeFunctionCall* _tmp104_;
32854 		ValaCCodeIdentifier* _tmp105_;
32855 		ValaCCodeFunctionCall* _tmp106_;
32856 		ValaCCodeConstant* _tmp107_;
32857 		ValaCCodeConstant* _tmp108_;
32858 		ValaCCodeBinaryExpression* _tmp109_;
32859 		_tmp88_ = self->priv->_context;
32860 		_tmp89_ = vala_code_context_get_profile (_tmp88_);
32861 		_tmp90_ = _tmp89_;
32862 		if (_tmp90_ == VALA_PROFILE_POSIX) {
32863 			ValaCCodeFile* _tmp91_;
32864 			ValaCCodeIdentifier* _tmp92_;
32865 			ValaCCodeIdentifier* _tmp93_;
32866 			gchar* _tmp94_;
32867 			gchar* _tmp95_;
32868 			ValaCCodeIdentifier* _tmp96_;
32869 			ValaCCodeIdentifier* _tmp97_;
32870 			ValaCCodeFunctionCall* _tmp98_;
32871 			_tmp91_ = self->cfile;
32872 			vala_ccode_file_add_include (_tmp91_, "string.h", FALSE);
32873 			_tmp92_ = vala_ccode_identifier_new ("strcmp");
32874 			_tmp93_ = _tmp92_;
32875 			_tmp94_ = vala_ccode_base_module_generate_cmp_wrapper (self, _tmp93_);
32876 			_tmp95_ = _tmp94_;
32877 			_tmp96_ = vala_ccode_identifier_new (_tmp95_);
32878 			_tmp97_ = _tmp96_;
32879 			_tmp98_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp97_);
32880 			_vala_ccode_node_unref0 (ccall);
32881 			ccall = _tmp98_;
32882 			_vala_ccode_node_unref0 (_tmp97_);
32883 			_g_free0 (_tmp95_);
32884 			_vala_ccode_node_unref0 (_tmp93_);
32885 		} else {
32886 			ValaCCodeIdentifier* _tmp99_;
32887 			ValaCCodeIdentifier* _tmp100_;
32888 			ValaCCodeFunctionCall* _tmp101_;
32889 			_tmp99_ = vala_ccode_identifier_new ("g_strcmp0");
32890 			_tmp100_ = _tmp99_;
32891 			_tmp101_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp100_);
32892 			_vala_ccode_node_unref0 (ccall);
32893 			ccall = _tmp101_;
32894 			_vala_ccode_node_unref0 (_tmp100_);
32895 		}
32896 		_tmp102_ = ccall;
32897 		_tmp103_ = celement;
32898 		vala_ccode_function_call_add_argument (_tmp102_, (ValaCCodeExpression*) _tmp103_);
32899 		_tmp104_ = ccall;
32900 		_tmp105_ = cneedle;
32901 		vala_ccode_function_call_add_argument (_tmp104_, (ValaCCodeExpression*) _tmp105_);
32902 		_tmp106_ = ccall;
32903 		_tmp107_ = vala_ccode_constant_new ("0");
32904 		_tmp108_ = _tmp107_;
32905 		_tmp109_ = vala_ccode_binary_expression_new (VALA_CCODE_BINARY_OPERATOR_EQUALITY, (ValaCCodeExpression*) _tmp106_, (ValaCCodeExpression*) _tmp108_);
32906 		_vala_ccode_node_unref0 (cif_condition);
32907 		cif_condition = _tmp109_;
32908 		_vala_ccode_node_unref0 (_tmp108_);
32909 		_vala_ccode_node_unref0 (ccall);
32910 	} else {
32911 		ValaDataType* _tmp110_;
32912 		ValaDataType* _tmp111_;
32913 		_tmp110_ = vala_array_type_get_element_type (array_type);
32914 		_tmp111_ = _tmp110_;
32915 		if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp111_, VALA_TYPE_STRUCT_VALUE_TYPE)) {
32916 			gchar* equalfunc = NULL;
32917 			ValaDataType* _tmp112_;
32918 			ValaDataType* _tmp113_;
32919 			ValaTypeSymbol* _tmp114_;
32920 			ValaTypeSymbol* _tmp115_;
32921 			gchar* _tmp116_;
32922 			ValaCCodeFunctionCall* ccall = NULL;
32923 			const gchar* _tmp117_;
32924 			ValaCCodeIdentifier* _tmp118_;
32925 			ValaCCodeIdentifier* _tmp119_;
32926 			ValaCCodeFunctionCall* _tmp120_;
32927 			ValaCCodeFunctionCall* _tmp121_;
32928 			ValaCCodeFunctionCall* _tmp122_;
32929 			ValaCCodeElementAccess* _tmp123_;
32930 			ValaCCodeUnaryExpression* _tmp124_;
32931 			ValaCCodeUnaryExpression* _tmp125_;
32932 			ValaCCodeFunctionCall* _tmp126_;
32933 			ValaCCodeIdentifier* _tmp127_;
32934 			ValaCCodeFunctionCall* _tmp128_;
32935 			ValaCCodeExpression* _tmp129_;
32936 			ValaCCodeExpression* _tmp130_;
32937 			ValaCCodeBinaryExpression* _tmp131_;
32938 			_tmp112_ = vala_array_type_get_element_type (array_type);
32939 			_tmp113_ = _tmp112_;
32940 			_tmp114_ = vala_data_type_get_type_symbol (_tmp113_);
32941 			_tmp115_ = _tmp114_;
32942 			_tmp116_ = vala_ccode_base_module_generate_struct_equal_function (self, G_TYPE_CHECK_INSTANCE_CAST (_tmp115_, VALA_TYPE_STRUCT, ValaStruct));
32943 			equalfunc = _tmp116_;
32944 			_tmp117_ = equalfunc;
32945 			_tmp118_ = vala_ccode_identifier_new (_tmp117_);
32946 			_tmp119_ = _tmp118_;
32947 			_tmp120_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp119_);
32948 			_tmp121_ = _tmp120_;
32949 			_vala_ccode_node_unref0 (_tmp119_);
32950 			ccall = _tmp121_;
32951 			_tmp122_ = ccall;
32952 			_tmp123_ = celement;
32953 			_tmp124_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, (ValaCCodeExpression*) _tmp123_);
32954 			_tmp125_ = _tmp124_;
32955 			vala_ccode_function_call_add_argument (_tmp122_, (ValaCCodeExpression*) _tmp125_);
32956 			_vala_ccode_node_unref0 (_tmp125_);
32957 			_tmp126_ = ccall;
32958 			_tmp127_ = cneedle;
32959 			vala_ccode_function_call_add_argument (_tmp126_, (ValaCCodeExpression*) _tmp127_);
32960 			_tmp128_ = ccall;
32961 			_tmp129_ = vala_ccode_base_module_get_boolean_cconstant (self, TRUE);
32962 			_tmp130_ = _tmp129_;
32963 			_tmp131_ = vala_ccode_binary_expression_new (VALA_CCODE_BINARY_OPERATOR_EQUALITY, (ValaCCodeExpression*) _tmp128_, _tmp130_);
32964 			_vala_ccode_node_unref0 (cif_condition);
32965 			cif_condition = _tmp131_;
32966 			_vala_ccode_node_unref0 (_tmp130_);
32967 			_vala_ccode_node_unref0 (ccall);
32968 			_g_free0 (equalfunc);
32969 		} else {
32970 			ValaCCodeIdentifier* _tmp132_;
32971 			ValaCCodeElementAccess* _tmp133_;
32972 			ValaCCodeBinaryExpression* _tmp134_;
32973 			_tmp132_ = cneedle;
32974 			_tmp133_ = celement;
32975 			_tmp134_ = vala_ccode_binary_expression_new (VALA_CCODE_BINARY_OPERATOR_EQUALITY, (ValaCCodeExpression*) _tmp132_, (ValaCCodeExpression*) _tmp133_);
32976 			_vala_ccode_node_unref0 (cif_condition);
32977 			cif_condition = _tmp134_;
32978 		}
32979 	}
32980 	_tmp135_ = vala_ccode_base_module_get_ccode (self);
32981 	_tmp136_ = _tmp135_;
32982 	_tmp137_ = cif_condition;
32983 	vala_ccode_function_open_if (_tmp136_, (ValaCCodeExpression*) _tmp137_);
32984 	_tmp138_ = vala_ccode_base_module_get_ccode (self);
32985 	_tmp139_ = _tmp138_;
32986 	_tmp140_ = vala_ccode_base_module_get_boolean_cconstant (self, TRUE);
32987 	_tmp141_ = _tmp140_;
32988 	vala_ccode_function_add_return (_tmp139_, _tmp141_);
32989 	_vala_ccode_node_unref0 (_tmp141_);
32990 	_tmp142_ = vala_ccode_base_module_get_ccode (self);
32991 	_tmp143_ = _tmp142_;
32992 	vala_ccode_function_close (_tmp143_);
32993 	_tmp144_ = vala_ccode_base_module_get_ccode (self);
32994 	_tmp145_ = _tmp144_;
32995 	vala_ccode_function_close (_tmp145_);
32996 	_tmp146_ = vala_ccode_base_module_get_ccode (self);
32997 	_tmp147_ = _tmp146_;
32998 	_tmp148_ = vala_ccode_base_module_get_boolean_cconstant (self, FALSE);
32999 	_tmp149_ = _tmp148_;
33000 	vala_ccode_function_add_return (_tmp147_, _tmp149_);
33001 	_vala_ccode_node_unref0 (_tmp149_);
33002 	vala_ccode_base_module_pop_function (self);
33003 	_tmp150_ = self->cfile;
33004 	_tmp151_ = function;
33005 	vala_ccode_file_add_function_declaration (_tmp150_, _tmp151_);
33006 	_tmp152_ = self->cfile;
33007 	_tmp153_ = function;
33008 	vala_ccode_file_add_function (_tmp152_, _tmp153_);
33009 	result = array_contains_func;
33010 	_vala_ccode_node_unref0 (cif_condition);
33011 	_vala_ccode_node_unref0 (cneedle);
33012 	_vala_ccode_node_unref0 (celement);
33013 	_vala_ccode_node_unref0 (cloop_iterator);
33014 	_vala_ccode_node_unref0 (cloop_condition);
33015 	_vala_ccode_node_unref0 (cloop_initializer);
33016 	_vala_ccode_node_unref0 (function);
33017 	return result;
33018 }
33019 
33020 static gchar*
vala_ccode_base_module_generate_cmp_wrapper(ValaCCodeBaseModule * self,ValaCCodeIdentifier * cmpid)33021 vala_ccode_base_module_generate_cmp_wrapper (ValaCCodeBaseModule* self,
33022                                              ValaCCodeIdentifier* cmpid)
33023 {
33024 	gchar* cmp0_func = NULL;
33025 	const gchar* _tmp0_;
33026 	const gchar* _tmp1_;
33027 	gchar* _tmp2_;
33028 	const gchar* _tmp3_;
33029 	const gchar* _tmp4_;
33030 	gchar* result = NULL;
33031 	g_return_val_if_fail (self != NULL, NULL);
33032 	g_return_val_if_fail (cmpid != NULL, NULL);
33033 	_tmp0_ = vala_ccode_identifier_get_name (cmpid);
33034 	_tmp1_ = _tmp0_;
33035 	_tmp2_ = g_strdup_printf ("_%s0", _tmp1_);
33036 	cmp0_func = _tmp2_;
33037 	_tmp3_ = vala_ccode_identifier_get_name (cmpid);
33038 	_tmp4_ = _tmp3_;
33039 	if (g_strcmp0 (_tmp4_, "g_strcmp0") == 0) {
33040 		const gchar* _tmp5_;
33041 		const gchar* _tmp6_;
33042 		gchar* _tmp7_;
33043 		_tmp5_ = vala_ccode_identifier_get_name (cmpid);
33044 		_tmp6_ = _tmp5_;
33045 		_tmp7_ = g_strdup (_tmp6_);
33046 		_g_free0 (cmp0_func);
33047 		cmp0_func = _tmp7_;
33048 	} else {
33049 		const gchar* _tmp8_;
33050 		_tmp8_ = cmp0_func;
33051 		if (vala_ccode_base_module_add_wrapper (self, _tmp8_)) {
33052 			ValaCCodeFunction* cmp0_fun = NULL;
33053 			const gchar* _tmp9_;
33054 			ValaDataType* _tmp10_;
33055 			gchar* _tmp11_;
33056 			gchar* _tmp12_;
33057 			ValaCCodeFunction* _tmp13_;
33058 			ValaCCodeFunction* _tmp14_;
33059 			ValaCCodeFunction* _tmp15_;
33060 			ValaCCodeParameter* _tmp16_;
33061 			ValaCCodeParameter* _tmp17_;
33062 			ValaCCodeFunction* _tmp18_;
33063 			ValaCCodeParameter* _tmp19_;
33064 			ValaCCodeParameter* _tmp20_;
33065 			ValaCCodeFunction* _tmp21_;
33066 			ValaCCodeFunction* _tmp22_;
33067 			ValaCCodeBinaryExpression* noteq = NULL;
33068 			ValaCCodeIdentifier* _tmp23_;
33069 			ValaCCodeIdentifier* _tmp24_;
33070 			ValaCCodeIdentifier* _tmp25_;
33071 			ValaCCodeIdentifier* _tmp26_;
33072 			ValaCCodeBinaryExpression* _tmp27_;
33073 			ValaCCodeBinaryExpression* _tmp28_;
33074 			ValaCCodeFunctionCall* cmp_call = NULL;
33075 			ValaCCodeFunctionCall* _tmp55_;
33076 			ValaCCodeFunctionCall* _tmp56_;
33077 			ValaCCodeIdentifier* _tmp57_;
33078 			ValaCCodeIdentifier* _tmp58_;
33079 			ValaCCodeFunctionCall* _tmp59_;
33080 			ValaCCodeIdentifier* _tmp60_;
33081 			ValaCCodeIdentifier* _tmp61_;
33082 			ValaCCodeFunction* _tmp62_;
33083 			ValaCCodeFunction* _tmp63_;
33084 			ValaCCodeFunctionCall* _tmp64_;
33085 			ValaCCodeFile* _tmp65_;
33086 			ValaCCodeFunction* _tmp66_;
33087 			_tmp9_ = cmp0_func;
33088 			_tmp10_ = self->int_type;
33089 			_tmp11_ = vala_get_ccode_name ((ValaCodeNode*) _tmp10_);
33090 			_tmp12_ = _tmp11_;
33091 			_tmp13_ = vala_ccode_function_new (_tmp9_, _tmp12_);
33092 			_tmp14_ = _tmp13_;
33093 			_g_free0 (_tmp12_);
33094 			cmp0_fun = _tmp14_;
33095 			_tmp15_ = cmp0_fun;
33096 			_tmp16_ = vala_ccode_parameter_new ("s1", "const void *");
33097 			_tmp17_ = _tmp16_;
33098 			vala_ccode_function_add_parameter (_tmp15_, _tmp17_);
33099 			_vala_ccode_node_unref0 (_tmp17_);
33100 			_tmp18_ = cmp0_fun;
33101 			_tmp19_ = vala_ccode_parameter_new ("s2", "const void *");
33102 			_tmp20_ = _tmp19_;
33103 			vala_ccode_function_add_parameter (_tmp18_, _tmp20_);
33104 			_vala_ccode_node_unref0 (_tmp20_);
33105 			_tmp21_ = cmp0_fun;
33106 			vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp21_, VALA_CCODE_MODIFIERS_STATIC);
33107 			_tmp22_ = cmp0_fun;
33108 			vala_ccode_base_module_push_function (self, _tmp22_);
33109 			_tmp23_ = vala_ccode_identifier_new ("s1");
33110 			_tmp24_ = _tmp23_;
33111 			_tmp25_ = vala_ccode_identifier_new ("s2");
33112 			_tmp26_ = _tmp25_;
33113 			_tmp27_ = vala_ccode_binary_expression_new (VALA_CCODE_BINARY_OPERATOR_INEQUALITY, (ValaCCodeExpression*) _tmp24_, (ValaCCodeExpression*) _tmp26_);
33114 			_tmp28_ = _tmp27_;
33115 			_vala_ccode_node_unref0 (_tmp26_);
33116 			_vala_ccode_node_unref0 (_tmp24_);
33117 			noteq = _tmp28_;
33118 			{
33119 				ValaCCodeUnaryExpression* cexp = NULL;
33120 				ValaCCodeIdentifier* _tmp29_;
33121 				ValaCCodeIdentifier* _tmp30_;
33122 				ValaCCodeUnaryExpression* _tmp31_;
33123 				ValaCCodeUnaryExpression* _tmp32_;
33124 				ValaCCodeFunction* _tmp33_;
33125 				ValaCCodeFunction* _tmp34_;
33126 				ValaCCodeUnaryExpression* _tmp35_;
33127 				ValaCCodeFunction* _tmp36_;
33128 				ValaCCodeFunction* _tmp37_;
33129 				ValaCCodeBinaryExpression* _tmp38_;
33130 				ValaCCodeUnaryExpression* _tmp39_;
33131 				ValaCCodeUnaryExpression* _tmp40_;
33132 				ValaCCodeFunction* _tmp41_;
33133 				ValaCCodeFunction* _tmp42_;
33134 				_tmp29_ = vala_ccode_identifier_new ("s1");
33135 				_tmp30_ = _tmp29_;
33136 				_tmp31_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_LOGICAL_NEGATION, (ValaCCodeExpression*) _tmp30_);
33137 				_tmp32_ = _tmp31_;
33138 				_vala_ccode_node_unref0 (_tmp30_);
33139 				cexp = _tmp32_;
33140 				_tmp33_ = vala_ccode_base_module_get_ccode (self);
33141 				_tmp34_ = _tmp33_;
33142 				_tmp35_ = cexp;
33143 				vala_ccode_function_open_if (_tmp34_, (ValaCCodeExpression*) _tmp35_);
33144 				_tmp36_ = vala_ccode_base_module_get_ccode (self);
33145 				_tmp37_ = _tmp36_;
33146 				_tmp38_ = noteq;
33147 				_tmp39_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_MINUS, (ValaCCodeExpression*) _tmp38_);
33148 				_tmp40_ = _tmp39_;
33149 				vala_ccode_function_add_return (_tmp37_, (ValaCCodeExpression*) _tmp40_);
33150 				_vala_ccode_node_unref0 (_tmp40_);
33151 				_tmp41_ = vala_ccode_base_module_get_ccode (self);
33152 				_tmp42_ = _tmp41_;
33153 				vala_ccode_function_close (_tmp42_);
33154 				_vala_ccode_node_unref0 (cexp);
33155 			}
33156 			{
33157 				ValaCCodeUnaryExpression* cexp = NULL;
33158 				ValaCCodeIdentifier* _tmp43_;
33159 				ValaCCodeIdentifier* _tmp44_;
33160 				ValaCCodeUnaryExpression* _tmp45_;
33161 				ValaCCodeUnaryExpression* _tmp46_;
33162 				ValaCCodeFunction* _tmp47_;
33163 				ValaCCodeFunction* _tmp48_;
33164 				ValaCCodeUnaryExpression* _tmp49_;
33165 				ValaCCodeFunction* _tmp50_;
33166 				ValaCCodeFunction* _tmp51_;
33167 				ValaCCodeBinaryExpression* _tmp52_;
33168 				ValaCCodeFunction* _tmp53_;
33169 				ValaCCodeFunction* _tmp54_;
33170 				_tmp43_ = vala_ccode_identifier_new ("s2");
33171 				_tmp44_ = _tmp43_;
33172 				_tmp45_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_LOGICAL_NEGATION, (ValaCCodeExpression*) _tmp44_);
33173 				_tmp46_ = _tmp45_;
33174 				_vala_ccode_node_unref0 (_tmp44_);
33175 				cexp = _tmp46_;
33176 				_tmp47_ = vala_ccode_base_module_get_ccode (self);
33177 				_tmp48_ = _tmp47_;
33178 				_tmp49_ = cexp;
33179 				vala_ccode_function_open_if (_tmp48_, (ValaCCodeExpression*) _tmp49_);
33180 				_tmp50_ = vala_ccode_base_module_get_ccode (self);
33181 				_tmp51_ = _tmp50_;
33182 				_tmp52_ = noteq;
33183 				vala_ccode_function_add_return (_tmp51_, (ValaCCodeExpression*) _tmp52_);
33184 				_tmp53_ = vala_ccode_base_module_get_ccode (self);
33185 				_tmp54_ = _tmp53_;
33186 				vala_ccode_function_close (_tmp54_);
33187 				_vala_ccode_node_unref0 (cexp);
33188 			}
33189 			_tmp55_ = vala_ccode_function_call_new ((ValaCCodeExpression*) cmpid);
33190 			cmp_call = _tmp55_;
33191 			_tmp56_ = cmp_call;
33192 			_tmp57_ = vala_ccode_identifier_new ("s1");
33193 			_tmp58_ = _tmp57_;
33194 			vala_ccode_function_call_add_argument (_tmp56_, (ValaCCodeExpression*) _tmp58_);
33195 			_vala_ccode_node_unref0 (_tmp58_);
33196 			_tmp59_ = cmp_call;
33197 			_tmp60_ = vala_ccode_identifier_new ("s2");
33198 			_tmp61_ = _tmp60_;
33199 			vala_ccode_function_call_add_argument (_tmp59_, (ValaCCodeExpression*) _tmp61_);
33200 			_vala_ccode_node_unref0 (_tmp61_);
33201 			_tmp62_ = vala_ccode_base_module_get_ccode (self);
33202 			_tmp63_ = _tmp62_;
33203 			_tmp64_ = cmp_call;
33204 			vala_ccode_function_add_return (_tmp63_, (ValaCCodeExpression*) _tmp64_);
33205 			vala_ccode_base_module_pop_function (self);
33206 			_tmp65_ = self->cfile;
33207 			_tmp66_ = cmp0_fun;
33208 			vala_ccode_file_add_function (_tmp65_, _tmp66_);
33209 			_vala_ccode_node_unref0 (cmp_call);
33210 			_vala_ccode_node_unref0 (noteq);
33211 			_vala_ccode_node_unref0 (cmp0_fun);
33212 		}
33213 	}
33214 	result = cmp0_func;
33215 	return result;
33216 }
33217 
33218 static void
vala_ccode_base_module_real_visit_type_check(ValaCodeVisitor * base,ValaTypeCheck * expr)33219 vala_ccode_base_module_real_visit_type_check (ValaCodeVisitor* base,
33220                                               ValaTypeCheck* expr)
33221 {
33222 	ValaCCodeBaseModule * self;
33223 	ValaDataType* _tmp0_;
33224 	ValaDataType* _tmp1_;
33225 	ValaCCodeFile* _tmp2_;
33226 	ValaDataType* type = NULL;
33227 	ValaExpression* _tmp3_;
33228 	ValaExpression* _tmp4_;
33229 	ValaDataType* _tmp5_;
33230 	ValaDataType* _tmp6_;
33231 	ValaDataType* _tmp7_;
33232 	ValaPointerType* pointer_type = NULL;
33233 	ValaDataType* _tmp8_;
33234 	ValaPointerType* _tmp9_;
33235 	ValaPointerType* _tmp10_;
33236 	ValaClass* cl = NULL;
33237 	ValaDataType* _tmp15_;
33238 	ValaTypeSymbol* _tmp16_;
33239 	ValaTypeSymbol* _tmp17_;
33240 	ValaInterface* iface = NULL;
33241 	ValaDataType* _tmp18_;
33242 	ValaTypeSymbol* _tmp19_;
33243 	ValaTypeSymbol* _tmp20_;
33244 	gboolean _tmp21_ = FALSE;
33245 	gboolean _tmp22_ = FALSE;
33246 	gboolean _tmp23_ = FALSE;
33247 	gboolean _tmp24_ = FALSE;
33248 	ValaClass* _tmp25_;
33249 	ValaCCodeExpression* _tmp41_;
33250 	self = (ValaCCodeBaseModule*) base;
33251 	g_return_if_fail (expr != NULL);
33252 	_tmp0_ = vala_typecheck_get_type_reference (expr);
33253 	_tmp1_ = _tmp0_;
33254 	_tmp2_ = self->cfile;
33255 	vala_ccode_base_module_generate_type_declaration (self, _tmp1_, _tmp2_);
33256 	_tmp3_ = vala_typecheck_get_expression (expr);
33257 	_tmp4_ = _tmp3_;
33258 	_tmp5_ = vala_expression_get_value_type (_tmp4_);
33259 	_tmp6_ = _tmp5_;
33260 	_tmp7_ = _vala_code_node_ref0 (_tmp6_);
33261 	type = _tmp7_;
33262 	_tmp8_ = type;
33263 	_tmp9_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (_tmp8_, VALA_TYPE_POINTER_TYPE) ? ((ValaPointerType*) _tmp8_) : NULL);
33264 	pointer_type = _tmp9_;
33265 	_tmp10_ = pointer_type;
33266 	if (_tmp10_ != NULL) {
33267 		ValaPointerType* _tmp11_;
33268 		ValaDataType* _tmp12_;
33269 		ValaDataType* _tmp13_;
33270 		ValaDataType* _tmp14_;
33271 		_tmp11_ = pointer_type;
33272 		_tmp12_ = vala_pointer_type_get_base_type (_tmp11_);
33273 		_tmp13_ = _tmp12_;
33274 		_tmp14_ = _vala_code_node_ref0 (_tmp13_);
33275 		_vala_code_node_unref0 (type);
33276 		type = _tmp14_;
33277 	}
33278 	_tmp15_ = type;
33279 	_tmp16_ = vala_data_type_get_type_symbol (_tmp15_);
33280 	_tmp17_ = _tmp16_;
33281 	cl = G_TYPE_CHECK_INSTANCE_TYPE (_tmp17_, VALA_TYPE_CLASS) ? ((ValaClass*) _tmp17_) : NULL;
33282 	_tmp18_ = type;
33283 	_tmp19_ = vala_data_type_get_type_symbol (_tmp18_);
33284 	_tmp20_ = _tmp19_;
33285 	iface = G_TYPE_CHECK_INSTANCE_TYPE (_tmp20_, VALA_TYPE_INTERFACE) ? ((ValaInterface*) _tmp20_) : NULL;
33286 	_tmp25_ = cl;
33287 	if (_tmp25_ != NULL) {
33288 		ValaClass* _tmp26_;
33289 		gboolean _tmp27_;
33290 		gboolean _tmp28_;
33291 		_tmp26_ = cl;
33292 		_tmp27_ = vala_class_get_is_compact (_tmp26_);
33293 		_tmp28_ = _tmp27_;
33294 		_tmp24_ = !_tmp28_;
33295 	} else {
33296 		_tmp24_ = FALSE;
33297 	}
33298 	if (_tmp24_) {
33299 		_tmp23_ = TRUE;
33300 	} else {
33301 		ValaInterface* _tmp29_;
33302 		_tmp29_ = iface;
33303 		_tmp23_ = _tmp29_ != NULL;
33304 	}
33305 	if (_tmp23_) {
33306 		_tmp22_ = TRUE;
33307 	} else {
33308 		ValaDataType* _tmp30_;
33309 		_tmp30_ = type;
33310 		_tmp22_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp30_, VALA_TYPE_GENERIC_TYPE);
33311 	}
33312 	if (_tmp22_) {
33313 		_tmp21_ = TRUE;
33314 	} else {
33315 		ValaDataType* _tmp31_;
33316 		_tmp31_ = type;
33317 		_tmp21_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp31_, VALA_TYPE_ERROR_TYPE);
33318 	}
33319 	if (_tmp21_) {
33320 		ValaExpression* _tmp32_;
33321 		ValaExpression* _tmp33_;
33322 		ValaCCodeExpression* _tmp34_;
33323 		ValaDataType* _tmp35_;
33324 		ValaDataType* _tmp36_;
33325 		ValaCCodeExpression* _tmp37_;
33326 		ValaCCodeExpression* _tmp38_;
33327 		_tmp32_ = vala_typecheck_get_expression (expr);
33328 		_tmp33_ = _tmp32_;
33329 		_tmp34_ = vala_get_cvalue (_tmp33_);
33330 		_tmp35_ = vala_typecheck_get_type_reference (expr);
33331 		_tmp36_ = _tmp35_;
33332 		_tmp37_ = vala_ccode_base_module_create_type_check (self, (ValaCCodeNode*) _tmp34_, _tmp36_);
33333 		_tmp38_ = _tmp37_;
33334 		vala_set_cvalue ((ValaExpression*) expr, _tmp38_);
33335 		_vala_ccode_node_unref0 (_tmp38_);
33336 	} else {
33337 		ValaCCodeInvalidExpression* _tmp39_;
33338 		ValaCCodeInvalidExpression* _tmp40_;
33339 		_tmp39_ = vala_ccode_invalid_expression_new ();
33340 		_tmp40_ = _tmp39_;
33341 		vala_set_cvalue ((ValaExpression*) expr, (ValaCCodeExpression*) _tmp40_);
33342 		_vala_ccode_node_unref0 (_tmp40_);
33343 	}
33344 	_tmp41_ = vala_get_cvalue ((ValaExpression*) expr);
33345 	if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp41_, VALA_TYPE_CCODE_INVALID_EXPRESSION)) {
33346 		ValaSourceReference* _tmp42_;
33347 		ValaSourceReference* _tmp43_;
33348 		_tmp42_ = vala_code_node_get_source_reference ((ValaCodeNode*) expr);
33349 		_tmp43_ = _tmp42_;
33350 		vala_report_error (_tmp43_, "type check expressions not supported for compact classes, structs, and" \
33351 " enums");
33352 	}
33353 	_vala_code_node_unref0 (pointer_type);
33354 	_vala_code_node_unref0 (type);
33355 }
33356 
33357 static void
vala_ccode_base_module_real_visit_lambda_expression(ValaCodeVisitor * base,ValaLambdaExpression * lambda)33358 vala_ccode_base_module_real_visit_lambda_expression (ValaCodeVisitor* base,
33359                                                      ValaLambdaExpression* lambda)
33360 {
33361 	ValaCCodeBaseModule * self;
33362 	ValaDelegateType* delegate_type = NULL;
33363 	ValaDataType* _tmp0_;
33364 	ValaDataType* _tmp1_;
33365 	ValaDelegateType* _tmp2_;
33366 	gboolean expr_owned = FALSE;
33367 	ValaDataType* _tmp3_;
33368 	ValaDataType* _tmp4_;
33369 	gboolean _tmp5_;
33370 	gboolean _tmp6_;
33371 	ValaMethod* _tmp7_;
33372 	ValaMethod* _tmp8_;
33373 	gchar* _tmp9_;
33374 	gchar* _tmp10_;
33375 	ValaCCodeIdentifier* _tmp11_;
33376 	ValaCCodeIdentifier* _tmp12_;
33377 	ValaDataType* this_type = NULL;
33378 	ValaMethod* _tmp13_;
33379 	ValaMethod* _tmp14_;
33380 	gboolean _tmp15_;
33381 	gboolean _tmp16_;
33382 	self = (ValaCCodeBaseModule*) base;
33383 	g_return_if_fail (lambda != NULL);
33384 	_tmp0_ = vala_expression_get_target_type ((ValaExpression*) lambda);
33385 	_tmp1_ = _tmp0_;
33386 	_tmp2_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp1_, VALA_TYPE_DELEGATE_TYPE, ValaDelegateType));
33387 	delegate_type = _tmp2_;
33388 	vala_code_node_accept_children ((ValaCodeNode*) lambda, (ValaCodeVisitor*) self);
33389 	_tmp3_ = vala_expression_get_value_type ((ValaExpression*) lambda);
33390 	_tmp4_ = _tmp3_;
33391 	_tmp5_ = vala_data_type_get_value_owned (_tmp4_);
33392 	_tmp6_ = _tmp5_;
33393 	expr_owned = _tmp6_;
33394 	_tmp7_ = vala_lambda_expression_get_method (lambda);
33395 	_tmp8_ = _tmp7_;
33396 	_tmp9_ = vala_get_ccode_name ((ValaCodeNode*) _tmp8_);
33397 	_tmp10_ = _tmp9_;
33398 	_tmp11_ = vala_ccode_identifier_new (_tmp10_);
33399 	_tmp12_ = _tmp11_;
33400 	vala_set_cvalue ((ValaExpression*) lambda, (ValaCCodeExpression*) _tmp12_);
33401 	_vala_ccode_node_unref0 (_tmp12_);
33402 	_g_free0 (_tmp10_);
33403 	_tmp13_ = vala_lambda_expression_get_method (lambda);
33404 	_tmp14_ = _tmp13_;
33405 	_tmp15_ = vala_method_get_closure (_tmp14_);
33406 	_tmp16_ = _tmp15_;
33407 	if (_tmp16_) {
33408 		gint block_id = 0;
33409 		ValaBlock* _tmp17_;
33410 		ValaBlock* _tmp18_;
33411 		ValaCCodeExpression* delegate_target = NULL;
33412 		gchar* _tmp19_;
33413 		gchar* _tmp20_;
33414 		ValaCCodeExpression* _tmp21_;
33415 		ValaCCodeExpression* _tmp22_;
33416 		gboolean _tmp23_ = FALSE;
33417 		ValaCCodeExpression* _tmp43_;
33418 		_tmp17_ = vala_ccode_base_module_get_current_closure_block (self);
33419 		_tmp18_ = _tmp17_;
33420 		block_id = vala_ccode_base_module_get_block_id (self, _tmp18_);
33421 		_tmp19_ = g_strdup_printf ("_data%d_", block_id);
33422 		_tmp20_ = _tmp19_;
33423 		_tmp21_ = vala_ccode_base_module_get_variable_cexpression (self, _tmp20_);
33424 		_tmp22_ = _tmp21_;
33425 		_g_free0 (_tmp20_);
33426 		delegate_target = _tmp22_;
33427 		if (expr_owned) {
33428 			_tmp23_ = TRUE;
33429 		} else {
33430 			ValaDelegateType* _tmp24_;
33431 			gboolean _tmp25_;
33432 			gboolean _tmp26_;
33433 			_tmp24_ = delegate_type;
33434 			_tmp25_ = vala_delegate_type_get_is_called_once (_tmp24_);
33435 			_tmp26_ = _tmp25_;
33436 			_tmp23_ = _tmp26_;
33437 		}
33438 		if (_tmp23_) {
33439 			ValaCCodeFunctionCall* ref_call = NULL;
33440 			gchar* _tmp27_;
33441 			gchar* _tmp28_;
33442 			ValaCCodeIdentifier* _tmp29_;
33443 			ValaCCodeIdentifier* _tmp30_;
33444 			ValaCCodeFunctionCall* _tmp31_;
33445 			ValaCCodeFunctionCall* _tmp32_;
33446 			ValaCCodeFunctionCall* _tmp33_;
33447 			ValaCCodeExpression* _tmp34_;
33448 			ValaCCodeFunctionCall* _tmp35_;
33449 			ValaCCodeExpression* _tmp36_;
33450 			gchar* _tmp37_;
33451 			gchar* _tmp38_;
33452 			ValaCCodeIdentifier* _tmp39_;
33453 			ValaCCodeIdentifier* _tmp40_;
33454 			_tmp27_ = g_strdup_printf ("block%d_data_ref", block_id);
33455 			_tmp28_ = _tmp27_;
33456 			_tmp29_ = vala_ccode_identifier_new (_tmp28_);
33457 			_tmp30_ = _tmp29_;
33458 			_tmp31_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp30_);
33459 			_tmp32_ = _tmp31_;
33460 			_vala_ccode_node_unref0 (_tmp30_);
33461 			_g_free0 (_tmp28_);
33462 			ref_call = _tmp32_;
33463 			_tmp33_ = ref_call;
33464 			_tmp34_ = delegate_target;
33465 			vala_ccode_function_call_add_argument (_tmp33_, _tmp34_);
33466 			_tmp35_ = ref_call;
33467 			_tmp36_ = _vala_ccode_node_ref0 ((ValaCCodeExpression*) _tmp35_);
33468 			_vala_ccode_node_unref0 (delegate_target);
33469 			delegate_target = _tmp36_;
33470 			_tmp37_ = g_strdup_printf ("block%d_data_unref", block_id);
33471 			_tmp38_ = _tmp37_;
33472 			_tmp39_ = vala_ccode_identifier_new (_tmp38_);
33473 			_tmp40_ = _tmp39_;
33474 			vala_set_delegate_target_destroy_notify ((ValaExpression*) lambda, (ValaCCodeExpression*) _tmp40_);
33475 			_vala_ccode_node_unref0 (_tmp40_);
33476 			_g_free0 (_tmp38_);
33477 			_vala_ccode_node_unref0 (ref_call);
33478 		} else {
33479 			ValaCCodeConstant* _tmp41_;
33480 			ValaCCodeConstant* _tmp42_;
33481 			_tmp41_ = vala_ccode_constant_new ("NULL");
33482 			_tmp42_ = _tmp41_;
33483 			vala_set_delegate_target_destroy_notify ((ValaExpression*) lambda, (ValaCCodeExpression*) _tmp42_);
33484 			_vala_ccode_node_unref0 (_tmp42_);
33485 		}
33486 		_tmp43_ = delegate_target;
33487 		vala_set_delegate_target ((ValaExpression*) lambda, _tmp43_);
33488 		_vala_ccode_node_unref0 (delegate_target);
33489 	} else {
33490 		ValaDataType* _tmp44_;
33491 		ValaDataType* _tmp45_;
33492 		_tmp44_ = vala_ccode_base_module_get_this_type (self);
33493 		this_type = _tmp44_;
33494 		_tmp45_ = this_type;
33495 		if (_tmp45_ != NULL) {
33496 			ValaCCodeExpression* delegate_target = NULL;
33497 			ValaCCodeExpression* _tmp46_;
33498 			ValaCCodeExpression* _tmp47_;
33499 			ValaDataType* _tmp48_;
33500 			ValaCCodeExpression* _tmp49_;
33501 			gboolean _tmp50_ = FALSE;
33502 			ValaCCodeExpression* _tmp70_;
33503 			_tmp46_ = vala_ccode_base_module_get_this_cexpression (self);
33504 			delegate_target = _tmp46_;
33505 			_tmp47_ = delegate_target;
33506 			_tmp48_ = this_type;
33507 			_tmp49_ = vala_ccode_base_module_convert_to_generic_pointer (self, _tmp47_, _tmp48_);
33508 			_vala_ccode_node_unref0 (delegate_target);
33509 			delegate_target = _tmp49_;
33510 			if (expr_owned) {
33511 				_tmp50_ = TRUE;
33512 			} else {
33513 				ValaDelegateType* _tmp51_;
33514 				gboolean _tmp52_;
33515 				gboolean _tmp53_;
33516 				_tmp51_ = delegate_type;
33517 				_tmp52_ = vala_delegate_type_get_is_called_once (_tmp51_);
33518 				_tmp53_ = _tmp52_;
33519 				_tmp50_ = _tmp53_;
33520 			}
33521 			if (_tmp50_) {
33522 				ValaCCodeFunctionCall* ref_call = NULL;
33523 				ValaDataType* _tmp54_;
33524 				ValaSourceReference* _tmp55_;
33525 				ValaSourceReference* _tmp56_;
33526 				ValaCCodeExpression* _tmp57_;
33527 				ValaCCodeExpression* _tmp58_;
33528 				ValaCCodeFunctionCall* _tmp59_;
33529 				ValaCCodeFunctionCall* _tmp60_;
33530 				ValaCCodeFunctionCall* _tmp61_;
33531 				ValaCCodeExpression* _tmp62_;
33532 				ValaCCodeFunctionCall* _tmp63_;
33533 				ValaCCodeExpression* _tmp64_;
33534 				ValaDataType* _tmp65_;
33535 				ValaCCodeExpression* _tmp66_;
33536 				ValaCCodeExpression* _tmp67_;
33537 				_tmp54_ = this_type;
33538 				_tmp55_ = vala_code_node_get_source_reference ((ValaCodeNode*) lambda);
33539 				_tmp56_ = _tmp55_;
33540 				_tmp57_ = vala_ccode_base_module_get_dup_func_expression (self, _tmp54_, _tmp56_, FALSE);
33541 				_tmp58_ = _tmp57_;
33542 				_tmp59_ = vala_ccode_function_call_new (_tmp58_);
33543 				_tmp60_ = _tmp59_;
33544 				_vala_ccode_node_unref0 (_tmp58_);
33545 				ref_call = _tmp60_;
33546 				_tmp61_ = ref_call;
33547 				_tmp62_ = delegate_target;
33548 				vala_ccode_function_call_add_argument (_tmp61_, _tmp62_);
33549 				_tmp63_ = ref_call;
33550 				_tmp64_ = _vala_ccode_node_ref0 ((ValaCCodeExpression*) _tmp63_);
33551 				_vala_ccode_node_unref0 (delegate_target);
33552 				delegate_target = _tmp64_;
33553 				_tmp65_ = this_type;
33554 				_tmp66_ = vala_ccode_base_module_get_destroy_func_expression (self, _tmp65_, FALSE);
33555 				_tmp67_ = _tmp66_;
33556 				vala_set_delegate_target_destroy_notify ((ValaExpression*) lambda, _tmp67_);
33557 				_vala_ccode_node_unref0 (_tmp67_);
33558 				_vala_ccode_node_unref0 (ref_call);
33559 			} else {
33560 				ValaCCodeConstant* _tmp68_;
33561 				ValaCCodeConstant* _tmp69_;
33562 				_tmp68_ = vala_ccode_constant_new ("NULL");
33563 				_tmp69_ = _tmp68_;
33564 				vala_set_delegate_target_destroy_notify ((ValaExpression*) lambda, (ValaCCodeExpression*) _tmp69_);
33565 				_vala_ccode_node_unref0 (_tmp69_);
33566 			}
33567 			_tmp70_ = delegate_target;
33568 			vala_set_delegate_target ((ValaExpression*) lambda, _tmp70_);
33569 			_vala_ccode_node_unref0 (delegate_target);
33570 		} else {
33571 			ValaCCodeConstant* _tmp71_;
33572 			ValaCCodeConstant* _tmp72_;
33573 			ValaCCodeConstant* _tmp73_;
33574 			ValaCCodeConstant* _tmp74_;
33575 			_tmp71_ = vala_ccode_constant_new ("NULL");
33576 			_tmp72_ = _tmp71_;
33577 			vala_set_delegate_target ((ValaExpression*) lambda, (ValaCCodeExpression*) _tmp72_);
33578 			_vala_ccode_node_unref0 (_tmp72_);
33579 			_tmp73_ = vala_ccode_constant_new ("NULL");
33580 			_tmp74_ = _tmp73_;
33581 			vala_set_delegate_target_destroy_notify ((ValaExpression*) lambda, (ValaCCodeExpression*) _tmp74_);
33582 			_vala_ccode_node_unref0 (_tmp74_);
33583 		}
33584 	}
33585 	_vala_code_node_unref0 (delegate_type);
33586 }
33587 
33588 ValaCCodeExpression*
vala_ccode_base_module_convert_from_generic_pointer(ValaCCodeBaseModule * self,ValaCCodeExpression * cexpr,ValaDataType * actual_type)33589 vala_ccode_base_module_convert_from_generic_pointer (ValaCCodeBaseModule* self,
33590                                                      ValaCCodeExpression* cexpr,
33591                                                      ValaDataType* actual_type)
33592 {
33593 	ValaSemanticAnalyzer* analyzer = NULL;
33594 	ValaCodeContext* _tmp0_;
33595 	ValaSemanticAnalyzer* _tmp1_;
33596 	ValaSemanticAnalyzer* _tmp2_;
33597 	ValaCCodeExpression* _result_ = NULL;
33598 	ValaCCodeExpression* _tmp3_;
33599 	gboolean _tmp4_ = FALSE;
33600 	ValaSemanticAnalyzer* _tmp5_;
33601 	ValaCCodeExpression* result = NULL;
33602 	g_return_val_if_fail (self != NULL, NULL);
33603 	g_return_val_if_fail (cexpr != NULL, NULL);
33604 	g_return_val_if_fail (actual_type != NULL, NULL);
33605 	_tmp0_ = self->priv->_context;
33606 	_tmp1_ = vala_code_context_get_analyzer (_tmp0_);
33607 	_tmp2_ = _tmp1_;
33608 	analyzer = _tmp2_;
33609 	_tmp3_ = _vala_ccode_node_ref0 (cexpr);
33610 	_result_ = _tmp3_;
33611 	_tmp5_ = analyzer;
33612 	if (vala_semantic_analyzer_is_reference_type_argument (_tmp5_, actual_type)) {
33613 		_tmp4_ = TRUE;
33614 	} else {
33615 		ValaSemanticAnalyzer* _tmp6_;
33616 		_tmp6_ = analyzer;
33617 		_tmp4_ = vala_semantic_analyzer_is_nullable_value_type_argument (_tmp6_, actual_type);
33618 	}
33619 	if (_tmp4_) {
33620 		ValaCCodeFile* _tmp7_;
33621 		gchar* _tmp8_;
33622 		gchar* _tmp9_;
33623 		ValaCCodeCastExpression* _tmp10_;
33624 		_tmp7_ = self->cfile;
33625 		vala_ccode_base_module_generate_type_declaration (self, actual_type, _tmp7_);
33626 		_tmp8_ = vala_get_ccode_name ((ValaCodeNode*) actual_type);
33627 		_tmp9_ = _tmp8_;
33628 		_tmp10_ = vala_ccode_cast_expression_new (cexpr, _tmp9_);
33629 		_vala_ccode_node_unref0 (_result_);
33630 		_result_ = (ValaCCodeExpression*) _tmp10_;
33631 		_g_free0 (_tmp9_);
33632 	} else {
33633 		ValaSemanticAnalyzer* _tmp11_;
33634 		_tmp11_ = analyzer;
33635 		if (vala_semantic_analyzer_is_signed_integer_type_argument (_tmp11_, actual_type)) {
33636 			ValaCCodeCastExpression* _tmp14_;
33637 			ValaCCodeCastExpression* _tmp15_;
33638 			gchar* _tmp16_;
33639 			gchar* _tmp17_;
33640 			ValaCCodeCastExpression* _tmp18_;
33641 			while (TRUE) {
33642 				ValaCCodeExpression* _tmp12_;
33643 				ValaCCodeExpression* _tmp13_;
33644 				if (!G_TYPE_CHECK_INSTANCE_TYPE (cexpr, VALA_TYPE_CCODE_CAST_EXPRESSION)) {
33645 					break;
33646 				}
33647 				_tmp12_ = vala_ccode_cast_expression_get_inner (G_TYPE_CHECK_INSTANCE_CAST (cexpr, VALA_TYPE_CCODE_CAST_EXPRESSION, ValaCCodeCastExpression));
33648 				_tmp13_ = _tmp12_;
33649 				cexpr = _tmp13_;
33650 			}
33651 			_tmp14_ = vala_ccode_cast_expression_new (cexpr, "gintptr");
33652 			_tmp15_ = _tmp14_;
33653 			_tmp16_ = vala_get_ccode_name ((ValaCodeNode*) actual_type);
33654 			_tmp17_ = _tmp16_;
33655 			_tmp18_ = vala_ccode_cast_expression_new ((ValaCCodeExpression*) _tmp15_, _tmp17_);
33656 			_vala_ccode_node_unref0 (_result_);
33657 			_result_ = (ValaCCodeExpression*) _tmp18_;
33658 			_g_free0 (_tmp17_);
33659 			_vala_ccode_node_unref0 (_tmp15_);
33660 		} else {
33661 			ValaSemanticAnalyzer* _tmp19_;
33662 			_tmp19_ = analyzer;
33663 			if (vala_semantic_analyzer_is_unsigned_integer_type_argument (_tmp19_, actual_type)) {
33664 				ValaCCodeCastExpression* _tmp22_;
33665 				ValaCCodeCastExpression* _tmp23_;
33666 				gchar* _tmp24_;
33667 				gchar* _tmp25_;
33668 				ValaCCodeCastExpression* _tmp26_;
33669 				while (TRUE) {
33670 					ValaCCodeExpression* _tmp20_;
33671 					ValaCCodeExpression* _tmp21_;
33672 					if (!G_TYPE_CHECK_INSTANCE_TYPE (cexpr, VALA_TYPE_CCODE_CAST_EXPRESSION)) {
33673 						break;
33674 					}
33675 					_tmp20_ = vala_ccode_cast_expression_get_inner (G_TYPE_CHECK_INSTANCE_CAST (cexpr, VALA_TYPE_CCODE_CAST_EXPRESSION, ValaCCodeCastExpression));
33676 					_tmp21_ = _tmp20_;
33677 					cexpr = _tmp21_;
33678 				}
33679 				_tmp22_ = vala_ccode_cast_expression_new (cexpr, "guintptr");
33680 				_tmp23_ = _tmp22_;
33681 				_tmp24_ = vala_get_ccode_name ((ValaCodeNode*) actual_type);
33682 				_tmp25_ = _tmp24_;
33683 				_tmp26_ = vala_ccode_cast_expression_new ((ValaCCodeExpression*) _tmp23_, _tmp25_);
33684 				_vala_ccode_node_unref0 (_result_);
33685 				_result_ = (ValaCCodeExpression*) _tmp26_;
33686 				_g_free0 (_tmp25_);
33687 				_vala_ccode_node_unref0 (_tmp23_);
33688 			}
33689 		}
33690 	}
33691 	result = _result_;
33692 	return result;
33693 }
33694 
33695 ValaCCodeExpression*
vala_ccode_base_module_convert_to_generic_pointer(ValaCCodeBaseModule * self,ValaCCodeExpression * cexpr,ValaDataType * actual_type)33696 vala_ccode_base_module_convert_to_generic_pointer (ValaCCodeBaseModule* self,
33697                                                    ValaCCodeExpression* cexpr,
33698                                                    ValaDataType* actual_type)
33699 {
33700 	ValaSemanticAnalyzer* analyzer = NULL;
33701 	ValaCodeContext* _tmp0_;
33702 	ValaSemanticAnalyzer* _tmp1_;
33703 	ValaSemanticAnalyzer* _tmp2_;
33704 	ValaCCodeExpression* _result_ = NULL;
33705 	ValaCCodeExpression* _tmp3_;
33706 	ValaSemanticAnalyzer* _tmp4_;
33707 	ValaCCodeExpression* result = NULL;
33708 	g_return_val_if_fail (self != NULL, NULL);
33709 	g_return_val_if_fail (cexpr != NULL, NULL);
33710 	g_return_val_if_fail (actual_type != NULL, NULL);
33711 	_tmp0_ = self->priv->_context;
33712 	_tmp1_ = vala_code_context_get_analyzer (_tmp0_);
33713 	_tmp2_ = _tmp1_;
33714 	analyzer = _tmp2_;
33715 	_tmp3_ = _vala_ccode_node_ref0 (cexpr);
33716 	_result_ = _tmp3_;
33717 	_tmp4_ = analyzer;
33718 	if (vala_semantic_analyzer_is_signed_integer_type_argument (_tmp4_, actual_type)) {
33719 		ValaCCodeCastExpression* _tmp7_;
33720 		ValaCCodeCastExpression* _tmp8_;
33721 		ValaDataType* _tmp9_;
33722 		gchar* _tmp10_;
33723 		gchar* _tmp11_;
33724 		ValaCCodeCastExpression* _tmp12_;
33725 		while (TRUE) {
33726 			ValaCCodeExpression* _tmp5_;
33727 			ValaCCodeExpression* _tmp6_;
33728 			if (!G_TYPE_CHECK_INSTANCE_TYPE (cexpr, VALA_TYPE_CCODE_CAST_EXPRESSION)) {
33729 				break;
33730 			}
33731 			_tmp5_ = vala_ccode_cast_expression_get_inner (G_TYPE_CHECK_INSTANCE_CAST (cexpr, VALA_TYPE_CCODE_CAST_EXPRESSION, ValaCCodeCastExpression));
33732 			_tmp6_ = _tmp5_;
33733 			cexpr = _tmp6_;
33734 		}
33735 		_tmp7_ = vala_ccode_cast_expression_new (cexpr, "gintptr");
33736 		_tmp8_ = _tmp7_;
33737 		_tmp9_ = self->pointer_type;
33738 		_tmp10_ = vala_get_ccode_name ((ValaCodeNode*) _tmp9_);
33739 		_tmp11_ = _tmp10_;
33740 		_tmp12_ = vala_ccode_cast_expression_new ((ValaCCodeExpression*) _tmp8_, _tmp11_);
33741 		_vala_ccode_node_unref0 (_result_);
33742 		_result_ = (ValaCCodeExpression*) _tmp12_;
33743 		_g_free0 (_tmp11_);
33744 		_vala_ccode_node_unref0 (_tmp8_);
33745 	} else {
33746 		ValaSemanticAnalyzer* _tmp13_;
33747 		_tmp13_ = analyzer;
33748 		if (vala_semantic_analyzer_is_unsigned_integer_type_argument (_tmp13_, actual_type)) {
33749 			ValaCCodeCastExpression* _tmp16_;
33750 			ValaCCodeCastExpression* _tmp17_;
33751 			ValaDataType* _tmp18_;
33752 			gchar* _tmp19_;
33753 			gchar* _tmp20_;
33754 			ValaCCodeCastExpression* _tmp21_;
33755 			while (TRUE) {
33756 				ValaCCodeExpression* _tmp14_;
33757 				ValaCCodeExpression* _tmp15_;
33758 				if (!G_TYPE_CHECK_INSTANCE_TYPE (cexpr, VALA_TYPE_CCODE_CAST_EXPRESSION)) {
33759 					break;
33760 				}
33761 				_tmp14_ = vala_ccode_cast_expression_get_inner (G_TYPE_CHECK_INSTANCE_CAST (cexpr, VALA_TYPE_CCODE_CAST_EXPRESSION, ValaCCodeCastExpression));
33762 				_tmp15_ = _tmp14_;
33763 				cexpr = _tmp15_;
33764 			}
33765 			_tmp16_ = vala_ccode_cast_expression_new (cexpr, "guintptr");
33766 			_tmp17_ = _tmp16_;
33767 			_tmp18_ = self->pointer_type;
33768 			_tmp19_ = vala_get_ccode_name ((ValaCodeNode*) _tmp18_);
33769 			_tmp20_ = _tmp19_;
33770 			_tmp21_ = vala_ccode_cast_expression_new ((ValaCCodeExpression*) _tmp17_, _tmp20_);
33771 			_vala_ccode_node_unref0 (_result_);
33772 			_result_ = (ValaCCodeExpression*) _tmp21_;
33773 			_g_free0 (_tmp20_);
33774 			_vala_ccode_node_unref0 (_tmp17_);
33775 		}
33776 	}
33777 	result = _result_;
33778 	return result;
33779 }
33780 
33781 ValaTargetValue*
vala_ccode_base_module_transform_value(ValaCCodeBaseModule * self,ValaTargetValue * value,ValaDataType * target_type,ValaCodeNode * node)33782 vala_ccode_base_module_transform_value (ValaCCodeBaseModule* self,
33783                                         ValaTargetValue* value,
33784                                         ValaDataType* target_type,
33785                                         ValaCodeNode* node)
33786 {
33787 	ValaDataType* type = NULL;
33788 	ValaDataType* _tmp0_;
33789 	ValaDataType* _tmp1_;
33790 	ValaDataType* _tmp2_;
33791 	ValaGLibValue* _result_ = NULL;
33792 	ValaGLibValue* _tmp3_;
33793 	gboolean _tmp4_ = FALSE;
33794 	gboolean _tmp5_ = FALSE;
33795 	ValaDataType* _tmp6_;
33796 	gboolean _tmp7_;
33797 	gboolean _tmp8_;
33798 	gboolean _tmp63_ = FALSE;
33799 	gboolean _tmp64_ = FALSE;
33800 	gboolean _tmp65_ = FALSE;
33801 	ValaDataType* _tmp66_;
33802 	gboolean boxing = FALSE;
33803 	gboolean _tmp72_ = FALSE;
33804 	gboolean _tmp73_ = FALSE;
33805 	gboolean _tmp74_ = FALSE;
33806 	ValaDataType* _tmp75_;
33807 	gboolean unboxing = FALSE;
33808 	gboolean _tmp81_ = FALSE;
33809 	gboolean _tmp82_ = FALSE;
33810 	gboolean _tmp83_ = FALSE;
33811 	gboolean _tmp84_ = FALSE;
33812 	ValaCodeContext* _tmp85_;
33813 	ValaProfile _tmp86_;
33814 	ValaProfile _tmp87_;
33815 	gboolean gvalue_boxing = FALSE;
33816 	gboolean _tmp95_ = FALSE;
33817 	gboolean _tmp96_ = FALSE;
33818 	gboolean _tmp97_ = FALSE;
33819 	gboolean _tmp98_ = FALSE;
33820 	ValaCodeContext* _tmp99_;
33821 	ValaProfile _tmp100_;
33822 	ValaProfile _tmp101_;
33823 	gboolean gvariant_boxing = FALSE;
33824 	gboolean _tmp110_ = FALSE;
33825 	gboolean _tmp111_ = FALSE;
33826 	ValaDataType* _tmp112_;
33827 	gboolean _tmp113_;
33828 	gboolean _tmp114_;
33829 	ValaGLibValue* _tmp143_;
33830 	ValaDataType* _tmp144_;
33831 	ValaDataType* _tmp145_;
33832 	gboolean array_needs_copy = FALSE;
33833 	gboolean _tmp356_ = FALSE;
33834 	ValaDataType* _tmp357_;
33835 	gboolean _tmp375_ = FALSE;
33836 	gboolean _tmp376_ = FALSE;
33837 	gboolean _tmp377_ = FALSE;
33838 	gboolean _tmp378_ = FALSE;
33839 	gboolean _tmp379_ = FALSE;
33840 	ValaTargetValue* result = NULL;
33841 	g_return_val_if_fail (self != NULL, NULL);
33842 	g_return_val_if_fail (value != NULL, NULL);
33843 	g_return_val_if_fail (node != NULL, NULL);
33844 	_tmp0_ = vala_target_value_get_value_type (value);
33845 	_tmp1_ = _tmp0_;
33846 	_tmp2_ = _vala_code_node_ref0 (_tmp1_);
33847 	type = _tmp2_;
33848 	_tmp3_ = vala_glib_value_copy (G_TYPE_CHECK_INSTANCE_CAST (value, VALA_TYPE_GLIB_VALUE, ValaGLibValue));
33849 	_result_ = _tmp3_;
33850 	_tmp6_ = type;
33851 	_tmp7_ = vala_data_type_get_value_owned (_tmp6_);
33852 	_tmp8_ = _tmp7_;
33853 	if (_tmp8_) {
33854 		gboolean _tmp9_ = FALSE;
33855 		gboolean _tmp10_ = FALSE;
33856 		if (target_type == NULL) {
33857 			_tmp10_ = TRUE;
33858 		} else {
33859 			_tmp10_ = G_TYPE_CHECK_INSTANCE_TYPE (target_type, VALA_TYPE_GENERIC_TYPE);
33860 		}
33861 		if (_tmp10_) {
33862 			_tmp9_ = TRUE;
33863 		} else {
33864 			gboolean _tmp11_;
33865 			gboolean _tmp12_;
33866 			_tmp11_ = vala_data_type_get_floating_reference (target_type);
33867 			_tmp12_ = _tmp11_;
33868 			_tmp9_ = !_tmp12_;
33869 		}
33870 		_tmp5_ = _tmp9_;
33871 	} else {
33872 		_tmp5_ = FALSE;
33873 	}
33874 	if (_tmp5_) {
33875 		ValaDataType* _tmp13_;
33876 		gboolean _tmp14_;
33877 		gboolean _tmp15_;
33878 		_tmp13_ = type;
33879 		_tmp14_ = vala_data_type_get_floating_reference (_tmp13_);
33880 		_tmp15_ = _tmp14_;
33881 		_tmp4_ = _tmp15_;
33882 	} else {
33883 		_tmp4_ = FALSE;
33884 	}
33885 	if (_tmp4_) {
33886 		ValaObjectTypeSymbol* cl = NULL;
33887 		ValaDataType* _tmp16_;
33888 		ValaTypeSymbol* _tmp17_;
33889 		ValaTypeSymbol* _tmp18_;
33890 		gchar* _tmp19_ = NULL;
33891 		ValaObjectTypeSymbol* _tmp20_;
33892 		gchar* sink_func = NULL;
33893 		gchar* _tmp24_;
33894 		const gchar* _tmp25_;
33895 		_tmp16_ = type;
33896 		_tmp17_ = vala_data_type_get_type_symbol (_tmp16_);
33897 		_tmp18_ = _tmp17_;
33898 		cl = G_TYPE_CHECK_INSTANCE_TYPE (_tmp18_, VALA_TYPE_OBJECT_TYPE_SYMBOL) ? ((ValaObjectTypeSymbol*) _tmp18_) : NULL;
33899 		_tmp20_ = cl;
33900 		if (_tmp20_ != NULL) {
33901 			ValaObjectTypeSymbol* _tmp21_;
33902 			gchar* _tmp22_;
33903 			_tmp21_ = cl;
33904 			_tmp22_ = vala_get_ccode_ref_sink_function (_tmp21_);
33905 			_g_free0 (_tmp19_);
33906 			_tmp19_ = _tmp22_;
33907 		} else {
33908 			gchar* _tmp23_;
33909 			_tmp23_ = g_strdup ("");
33910 			_g_free0 (_tmp19_);
33911 			_tmp19_ = _tmp23_;
33912 		}
33913 		_tmp24_ = g_strdup (_tmp19_);
33914 		sink_func = _tmp24_;
33915 		_tmp25_ = sink_func;
33916 		if (g_strcmp0 (_tmp25_, "") != 0) {
33917 			ValaDataType* _tmp26_;
33918 			gboolean _tmp27_;
33919 			gboolean _tmp28_;
33920 			ValaCCodeFunctionCall* csink = NULL;
33921 			const gchar* _tmp38_;
33922 			ValaCCodeIdentifier* _tmp39_;
33923 			ValaCCodeIdentifier* _tmp40_;
33924 			ValaCCodeFunctionCall* _tmp41_;
33925 			ValaCCodeFunctionCall* _tmp42_;
33926 			ValaCCodeFunctionCall* _tmp43_;
33927 			ValaGLibValue* _tmp44_;
33928 			ValaCCodeExpression* _tmp45_;
33929 			ValaCCodeFunction* _tmp46_;
33930 			ValaCCodeFunction* _tmp47_;
33931 			ValaCCodeFunctionCall* _tmp48_;
33932 			ValaDataType* _tmp49_;
33933 			gboolean _tmp50_;
33934 			gboolean _tmp51_;
33935 			_tmp26_ = type;
33936 			_tmp27_ = vala_data_type_get_nullable (_tmp26_);
33937 			_tmp28_ = _tmp27_;
33938 			if (_tmp28_) {
33939 				ValaCCodeBinaryExpression* is_not_null = NULL;
33940 				ValaGLibValue* _tmp29_;
33941 				ValaCCodeExpression* _tmp30_;
33942 				ValaCCodeConstant* _tmp31_;
33943 				ValaCCodeConstant* _tmp32_;
33944 				ValaCCodeBinaryExpression* _tmp33_;
33945 				ValaCCodeBinaryExpression* _tmp34_;
33946 				ValaCCodeFunction* _tmp35_;
33947 				ValaCCodeFunction* _tmp36_;
33948 				ValaCCodeBinaryExpression* _tmp37_;
33949 				_tmp29_ = _result_;
33950 				_tmp30_ = _tmp29_->cvalue;
33951 				_tmp31_ = vala_ccode_constant_new ("NULL");
33952 				_tmp32_ = _tmp31_;
33953 				_tmp33_ = vala_ccode_binary_expression_new (VALA_CCODE_BINARY_OPERATOR_INEQUALITY, _tmp30_, (ValaCCodeExpression*) _tmp32_);
33954 				_tmp34_ = _tmp33_;
33955 				_vala_ccode_node_unref0 (_tmp32_);
33956 				is_not_null = _tmp34_;
33957 				_tmp35_ = vala_ccode_base_module_get_ccode (self);
33958 				_tmp36_ = _tmp35_;
33959 				_tmp37_ = is_not_null;
33960 				vala_ccode_function_open_if (_tmp36_, (ValaCCodeExpression*) _tmp37_);
33961 				_vala_ccode_node_unref0 (is_not_null);
33962 			}
33963 			_tmp38_ = sink_func;
33964 			_tmp39_ = vala_ccode_identifier_new (_tmp38_);
33965 			_tmp40_ = _tmp39_;
33966 			_tmp41_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp40_);
33967 			_tmp42_ = _tmp41_;
33968 			_vala_ccode_node_unref0 (_tmp40_);
33969 			csink = _tmp42_;
33970 			_tmp43_ = csink;
33971 			_tmp44_ = _result_;
33972 			_tmp45_ = _tmp44_->cvalue;
33973 			vala_ccode_function_call_add_argument (_tmp43_, _tmp45_);
33974 			_tmp46_ = vala_ccode_base_module_get_ccode (self);
33975 			_tmp47_ = _tmp46_;
33976 			_tmp48_ = csink;
33977 			vala_ccode_function_add_expression (_tmp47_, (ValaCCodeExpression*) _tmp48_);
33978 			_tmp49_ = type;
33979 			_tmp50_ = vala_data_type_get_nullable (_tmp49_);
33980 			_tmp51_ = _tmp50_;
33981 			if (_tmp51_) {
33982 				ValaCCodeFunction* _tmp52_;
33983 				ValaCCodeFunction* _tmp53_;
33984 				_tmp52_ = vala_ccode_base_module_get_ccode (self);
33985 				_tmp53_ = _tmp52_;
33986 				vala_ccode_function_close (_tmp53_);
33987 			}
33988 			_vala_ccode_node_unref0 (csink);
33989 		} else {
33990 			ValaSourceReference* _tmp54_;
33991 			ValaSourceReference* _tmp55_;
33992 			ValaDataType* _tmp56_;
33993 			ValaTypeSymbol* _tmp57_;
33994 			ValaTypeSymbol* _tmp58_;
33995 			const gchar* _tmp59_;
33996 			const gchar* _tmp60_;
33997 			gchar* _tmp61_;
33998 			gchar* _tmp62_;
33999 			_tmp54_ = vala_code_node_get_source_reference (node);
34000 			_tmp55_ = _tmp54_;
34001 			_tmp56_ = type;
34002 			_tmp57_ = vala_data_type_get_type_symbol (_tmp56_);
34003 			_tmp58_ = _tmp57_;
34004 			_tmp59_ = vala_symbol_get_name ((ValaSymbol*) _tmp58_);
34005 			_tmp60_ = _tmp59_;
34006 			_tmp61_ = g_strdup_printf ("type `%s' does not support floating references", _tmp60_);
34007 			_tmp62_ = _tmp61_;
34008 			vala_report_error (_tmp55_, _tmp62_);
34009 			_g_free0 (_tmp62_);
34010 		}
34011 		_g_free0 (sink_func);
34012 		_g_free0 (_tmp19_);
34013 	}
34014 	_tmp66_ = type;
34015 	if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp66_, VALA_TYPE_VALUE_TYPE)) {
34016 		ValaDataType* _tmp67_;
34017 		gboolean _tmp68_;
34018 		gboolean _tmp69_;
34019 		_tmp67_ = type;
34020 		_tmp68_ = vala_data_type_get_nullable (_tmp67_);
34021 		_tmp69_ = _tmp68_;
34022 		_tmp65_ = !_tmp69_;
34023 	} else {
34024 		_tmp65_ = FALSE;
34025 	}
34026 	if (_tmp65_) {
34027 		_tmp64_ = G_TYPE_CHECK_INSTANCE_TYPE (target_type, VALA_TYPE_VALUE_TYPE);
34028 	} else {
34029 		_tmp64_ = FALSE;
34030 	}
34031 	if (_tmp64_) {
34032 		gboolean _tmp70_;
34033 		gboolean _tmp71_;
34034 		_tmp70_ = vala_data_type_get_nullable (target_type);
34035 		_tmp71_ = _tmp70_;
34036 		_tmp63_ = _tmp71_;
34037 	} else {
34038 		_tmp63_ = FALSE;
34039 	}
34040 	boxing = _tmp63_;
34041 	_tmp75_ = type;
34042 	if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp75_, VALA_TYPE_VALUE_TYPE)) {
34043 		ValaDataType* _tmp76_;
34044 		gboolean _tmp77_;
34045 		gboolean _tmp78_;
34046 		_tmp76_ = type;
34047 		_tmp77_ = vala_data_type_get_nullable (_tmp76_);
34048 		_tmp78_ = _tmp77_;
34049 		_tmp74_ = _tmp78_;
34050 	} else {
34051 		_tmp74_ = FALSE;
34052 	}
34053 	if (_tmp74_) {
34054 		_tmp73_ = G_TYPE_CHECK_INSTANCE_TYPE (target_type, VALA_TYPE_VALUE_TYPE);
34055 	} else {
34056 		_tmp73_ = FALSE;
34057 	}
34058 	if (_tmp73_) {
34059 		gboolean _tmp79_;
34060 		gboolean _tmp80_;
34061 		_tmp79_ = vala_data_type_get_nullable (target_type);
34062 		_tmp80_ = _tmp79_;
34063 		_tmp72_ = !_tmp80_;
34064 	} else {
34065 		_tmp72_ = FALSE;
34066 	}
34067 	unboxing = _tmp72_;
34068 	_tmp85_ = self->priv->_context;
34069 	_tmp86_ = vala_code_context_get_profile (_tmp85_);
34070 	_tmp87_ = _tmp86_;
34071 	if (_tmp87_ == VALA_PROFILE_GOBJECT) {
34072 		_tmp84_ = target_type != NULL;
34073 	} else {
34074 		_tmp84_ = FALSE;
34075 	}
34076 	if (_tmp84_) {
34077 		ValaTypeSymbol* _tmp88_;
34078 		ValaTypeSymbol* _tmp89_;
34079 		ValaStruct* _tmp90_;
34080 		_tmp88_ = vala_data_type_get_type_symbol (target_type);
34081 		_tmp89_ = _tmp88_;
34082 		_tmp90_ = self->gvalue_type;
34083 		_tmp83_ = _tmp89_ == G_TYPE_CHECK_INSTANCE_CAST (_tmp90_, VALA_TYPE_TYPESYMBOL, ValaTypeSymbol);
34084 	} else {
34085 		_tmp83_ = FALSE;
34086 	}
34087 	if (_tmp83_) {
34088 		ValaDataType* _tmp91_;
34089 		_tmp91_ = type;
34090 		_tmp82_ = !G_TYPE_CHECK_INSTANCE_TYPE (_tmp91_, VALA_TYPE_NULL_TYPE);
34091 	} else {
34092 		_tmp82_ = FALSE;
34093 	}
34094 	if (_tmp82_) {
34095 		ValaDataType* _tmp92_;
34096 		gchar* _tmp93_;
34097 		gchar* _tmp94_;
34098 		_tmp92_ = type;
34099 		_tmp93_ = vala_get_ccode_type_id ((ValaCodeNode*) _tmp92_);
34100 		_tmp94_ = _tmp93_;
34101 		_tmp81_ = g_strcmp0 (_tmp94_, "G_TYPE_VALUE") != 0;
34102 		_g_free0 (_tmp94_);
34103 	} else {
34104 		_tmp81_ = FALSE;
34105 	}
34106 	gvalue_boxing = _tmp81_;
34107 	_tmp99_ = self->priv->_context;
34108 	_tmp100_ = vala_code_context_get_profile (_tmp99_);
34109 	_tmp101_ = _tmp100_;
34110 	if (_tmp101_ == VALA_PROFILE_GOBJECT) {
34111 		_tmp98_ = target_type != NULL;
34112 	} else {
34113 		_tmp98_ = FALSE;
34114 	}
34115 	if (_tmp98_) {
34116 		ValaTypeSymbol* _tmp102_;
34117 		ValaTypeSymbol* _tmp103_;
34118 		ValaClass* _tmp104_;
34119 		_tmp102_ = vala_data_type_get_type_symbol (target_type);
34120 		_tmp103_ = _tmp102_;
34121 		_tmp104_ = self->gvariant_type;
34122 		_tmp97_ = _tmp103_ == G_TYPE_CHECK_INSTANCE_CAST (_tmp104_, VALA_TYPE_TYPESYMBOL, ValaTypeSymbol);
34123 	} else {
34124 		_tmp97_ = FALSE;
34125 	}
34126 	if (_tmp97_) {
34127 		ValaDataType* _tmp105_;
34128 		_tmp105_ = type;
34129 		_tmp96_ = !G_TYPE_CHECK_INSTANCE_TYPE (_tmp105_, VALA_TYPE_NULL_TYPE);
34130 	} else {
34131 		_tmp96_ = FALSE;
34132 	}
34133 	if (_tmp96_) {
34134 		ValaDataType* _tmp106_;
34135 		ValaTypeSymbol* _tmp107_;
34136 		ValaTypeSymbol* _tmp108_;
34137 		ValaClass* _tmp109_;
34138 		_tmp106_ = type;
34139 		_tmp107_ = vala_data_type_get_type_symbol (_tmp106_);
34140 		_tmp108_ = _tmp107_;
34141 		_tmp109_ = self->gvariant_type;
34142 		_tmp95_ = _tmp108_ != G_TYPE_CHECK_INSTANCE_CAST (_tmp109_, VALA_TYPE_TYPESYMBOL, ValaTypeSymbol);
34143 	} else {
34144 		_tmp95_ = FALSE;
34145 	}
34146 	gvariant_boxing = _tmp95_;
34147 	_tmp112_ = type;
34148 	_tmp113_ = vala_data_type_get_value_owned (_tmp112_);
34149 	_tmp114_ = _tmp113_;
34150 	if (_tmp114_) {
34151 		gboolean _tmp115_ = FALSE;
34152 		gboolean _tmp116_ = FALSE;
34153 		gboolean _tmp117_ = FALSE;
34154 		gboolean _tmp118_ = FALSE;
34155 		if (target_type == NULL) {
34156 			_tmp118_ = TRUE;
34157 		} else {
34158 			gboolean _tmp119_;
34159 			gboolean _tmp120_;
34160 			_tmp119_ = vala_data_type_get_value_owned (target_type);
34161 			_tmp120_ = _tmp119_;
34162 			_tmp118_ = !_tmp120_;
34163 		}
34164 		if (_tmp118_) {
34165 			_tmp117_ = TRUE;
34166 		} else {
34167 			_tmp117_ = boxing;
34168 		}
34169 		if (_tmp117_) {
34170 			_tmp116_ = TRUE;
34171 		} else {
34172 			_tmp116_ = unboxing;
34173 		}
34174 		if (_tmp116_) {
34175 			_tmp115_ = TRUE;
34176 		} else {
34177 			_tmp115_ = gvariant_boxing;
34178 		}
34179 		_tmp111_ = _tmp115_;
34180 	} else {
34181 		_tmp111_ = FALSE;
34182 	}
34183 	if (_tmp111_) {
34184 		_tmp110_ = !gvalue_boxing;
34185 	} else {
34186 		_tmp110_ = FALSE;
34187 	}
34188 	if (_tmp110_) {
34189 		if (G_TYPE_CHECK_INSTANCE_TYPE (target_type, VALA_TYPE_POINTER_TYPE)) {
34190 		} else {
34191 			ValaDataType* _tmp121_;
34192 			_tmp121_ = type;
34193 			if (vala_ccode_base_module_requires_destroy (_tmp121_)) {
34194 				ValaDataType* _tmp122_;
34195 				_tmp122_ = type;
34196 				if (!vala_ccode_base_module_is_lvalue_access_allowed (self, _tmp122_)) {
34197 					ValaArrayList* _tmp123_;
34198 					ValaArrayList* _tmp124_;
34199 					ValaGLibValue* _tmp125_;
34200 					ValaGLibValue* _tmp126_;
34201 					ValaGLibValue* _tmp127_;
34202 					_tmp123_ = vala_ccode_base_module_get_temp_ref_values (self);
34203 					_tmp124_ = _tmp123_;
34204 					_tmp125_ = _result_;
34205 					_tmp126_ = vala_glib_value_copy (_tmp125_);
34206 					_tmp127_ = _tmp126_;
34207 					vala_list_insert ((ValaList*) _tmp124_, 0, (ValaTargetValue*) _tmp127_);
34208 					_vala_target_value_unref0 (_tmp127_);
34209 				} else {
34210 					ValaTargetValue* temp_value = NULL;
34211 					ValaDataType* _tmp128_;
34212 					ValaTargetValue* _tmp129_;
34213 					ValaArrayList* _tmp130_;
34214 					ValaArrayList* _tmp131_;
34215 					ValaTargetValue* _tmp132_;
34216 					ValaGLibValue* _tmp133_;
34217 					ValaGLibValue* _tmp134_;
34218 					ValaTargetValue* _tmp135_;
34219 					ValaGLibValue* _tmp136_;
34220 					ValaSourceReference* _tmp137_;
34221 					ValaSourceReference* _tmp138_;
34222 					ValaGLibValue* _tmp139_;
34223 					ValaTargetValue* _tmp140_;
34224 					ValaCCodeExpression* _tmp141_;
34225 					ValaCCodeExpression* _tmp142_;
34226 					_tmp128_ = type;
34227 					_tmp129_ = vala_ccode_base_module_create_temp_value (self, _tmp128_, FALSE, node, NULL);
34228 					temp_value = _tmp129_;
34229 					_tmp130_ = vala_ccode_base_module_get_temp_ref_values (self);
34230 					_tmp131_ = _tmp130_;
34231 					_tmp132_ = temp_value;
34232 					_tmp133_ = vala_glib_value_copy (G_TYPE_CHECK_INSTANCE_CAST (_tmp132_, VALA_TYPE_GLIB_VALUE, ValaGLibValue));
34233 					_tmp134_ = _tmp133_;
34234 					vala_list_insert ((ValaList*) _tmp131_, 0, (ValaTargetValue*) _tmp134_);
34235 					_vala_target_value_unref0 (_tmp134_);
34236 					_tmp135_ = temp_value;
34237 					_tmp136_ = _result_;
34238 					_tmp137_ = vala_code_node_get_source_reference (node);
34239 					_tmp138_ = _tmp137_;
34240 					vala_ccode_base_module_store_value (self, _tmp135_, (ValaTargetValue*) _tmp136_, _tmp138_);
34241 					_tmp139_ = _result_;
34242 					_tmp140_ = temp_value;
34243 					_tmp141_ = vala_get_cvalue_ (_tmp140_);
34244 					_tmp142_ = _vala_ccode_node_ref0 (_tmp141_);
34245 					_vala_ccode_node_unref0 (_tmp139_->cvalue);
34246 					_tmp139_->cvalue = _tmp142_;
34247 					_vala_target_value_unref0 (temp_value);
34248 				}
34249 			}
34250 		}
34251 	}
34252 	if (target_type == NULL) {
34253 		result = (ValaTargetValue*) _result_;
34254 		_vala_code_node_unref0 (type);
34255 		return result;
34256 	}
34257 	_tmp143_ = _result_;
34258 	_tmp144_ = vala_data_type_copy (target_type);
34259 	_tmp145_ = _tmp144_;
34260 	vala_target_value_set_value_type ((ValaTargetValue*) _tmp143_, _tmp145_);
34261 	_vala_code_node_unref0 (_tmp145_);
34262 	if (gvalue_boxing) {
34263 		ValaTargetValue* temp_value = NULL;
34264 		gboolean _tmp146_;
34265 		ValaTargetValue* _tmp147_;
34266 		gboolean _tmp148_;
34267 		gboolean _tmp149_;
34268 		gboolean _tmp155_;
34269 		gboolean _tmp156_;
34270 		ValaCCodeFunctionCall* ccall = NULL;
34271 		ValaCCodeIdentifier* _tmp174_;
34272 		ValaCCodeIdentifier* _tmp175_;
34273 		ValaCCodeFunctionCall* _tmp176_;
34274 		ValaCCodeFunctionCall* _tmp177_;
34275 		gboolean _tmp178_;
34276 		gboolean _tmp179_;
34277 		gchar* type_id = NULL;
34278 		ValaDataType* _tmp188_;
34279 		gchar* _tmp189_;
34280 		const gchar* _tmp190_;
34281 		ValaCCodeFunctionCall* _tmp198_;
34282 		const gchar* _tmp199_;
34283 		ValaCCodeIdentifier* _tmp200_;
34284 		ValaCCodeIdentifier* _tmp201_;
34285 		ValaCCodeFunction* _tmp202_;
34286 		ValaCCodeFunction* _tmp203_;
34287 		ValaCCodeFunctionCall* _tmp204_;
34288 		ValaDataType* _tmp205_;
34289 		gboolean _tmp214_;
34290 		gboolean _tmp215_;
34291 		ValaDataType* _tmp224_;
34292 		ValaCCodeFunction* _tmp233_;
34293 		ValaCCodeFunction* _tmp234_;
34294 		ValaCCodeFunctionCall* _tmp235_;
34295 		ValaTargetValue* _tmp236_;
34296 		ValaGLibValue* _tmp237_;
34297 		_tmp146_ = TRUE;
34298 		_tmp147_ = vala_ccode_base_module_create_temp_value (self, target_type, TRUE, node, &_tmp146_);
34299 		temp_value = _tmp147_;
34300 		_tmp148_ = vala_data_type_get_value_owned (target_type);
34301 		_tmp149_ = _tmp148_;
34302 		if (!_tmp149_) {
34303 			ValaArrayList* _tmp150_;
34304 			ValaArrayList* _tmp151_;
34305 			ValaTargetValue* _tmp152_;
34306 			ValaGLibValue* _tmp153_;
34307 			ValaGLibValue* _tmp154_;
34308 			_tmp150_ = vala_ccode_base_module_get_temp_ref_values (self);
34309 			_tmp151_ = _tmp150_;
34310 			_tmp152_ = temp_value;
34311 			_tmp153_ = vala_glib_value_copy (G_TYPE_CHECK_INSTANCE_CAST (_tmp152_, VALA_TYPE_GLIB_VALUE, ValaGLibValue));
34312 			_tmp154_ = _tmp153_;
34313 			vala_list_insert ((ValaList*) _tmp151_, 0, (ValaTargetValue*) _tmp154_);
34314 			_vala_target_value_unref0 (_tmp154_);
34315 		}
34316 		_tmp155_ = vala_data_type_get_nullable (target_type);
34317 		_tmp156_ = _tmp155_;
34318 		if (_tmp156_) {
34319 			ValaCCodeFunctionCall* newcall = NULL;
34320 			ValaCCodeIdentifier* _tmp157_;
34321 			ValaCCodeIdentifier* _tmp158_;
34322 			ValaCCodeFunctionCall* _tmp159_;
34323 			ValaCCodeFunctionCall* _tmp160_;
34324 			ValaCCodeFunctionCall* _tmp161_;
34325 			ValaCCodeConstant* _tmp162_;
34326 			ValaCCodeConstant* _tmp163_;
34327 			ValaCCodeFunctionCall* _tmp164_;
34328 			ValaCCodeConstant* _tmp165_;
34329 			ValaCCodeConstant* _tmp166_;
34330 			ValaCCodeAssignment* newassignment = NULL;
34331 			ValaTargetValue* _tmp167_;
34332 			ValaCCodeExpression* _tmp168_;
34333 			ValaCCodeFunctionCall* _tmp169_;
34334 			ValaCCodeAssignment* _tmp170_;
34335 			ValaCCodeFunction* _tmp171_;
34336 			ValaCCodeFunction* _tmp172_;
34337 			ValaCCodeAssignment* _tmp173_;
34338 			_tmp157_ = vala_ccode_identifier_new ("g_new0");
34339 			_tmp158_ = _tmp157_;
34340 			_tmp159_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp158_);
34341 			_tmp160_ = _tmp159_;
34342 			_vala_ccode_node_unref0 (_tmp158_);
34343 			newcall = _tmp160_;
34344 			_tmp161_ = newcall;
34345 			_tmp162_ = vala_ccode_constant_new ("GValue");
34346 			_tmp163_ = _tmp162_;
34347 			vala_ccode_function_call_add_argument (_tmp161_, (ValaCCodeExpression*) _tmp163_);
34348 			_vala_ccode_node_unref0 (_tmp163_);
34349 			_tmp164_ = newcall;
34350 			_tmp165_ = vala_ccode_constant_new ("1");
34351 			_tmp166_ = _tmp165_;
34352 			vala_ccode_function_call_add_argument (_tmp164_, (ValaCCodeExpression*) _tmp166_);
34353 			_vala_ccode_node_unref0 (_tmp166_);
34354 			_tmp167_ = temp_value;
34355 			_tmp168_ = vala_get_cvalue_ (_tmp167_);
34356 			_tmp169_ = newcall;
34357 			_tmp170_ = vala_ccode_assignment_new (_tmp168_, (ValaCCodeExpression*) _tmp169_, VALA_CCODE_ASSIGNMENT_OPERATOR_SIMPLE);
34358 			newassignment = _tmp170_;
34359 			_tmp171_ = vala_ccode_base_module_get_ccode (self);
34360 			_tmp172_ = _tmp171_;
34361 			_tmp173_ = newassignment;
34362 			vala_ccode_function_add_expression (_tmp172_, (ValaCCodeExpression*) _tmp173_);
34363 			_vala_ccode_node_unref0 (newassignment);
34364 			_vala_ccode_node_unref0 (newcall);
34365 		}
34366 		_tmp174_ = vala_ccode_identifier_new ("g_value_init");
34367 		_tmp175_ = _tmp174_;
34368 		_tmp176_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp175_);
34369 		_tmp177_ = _tmp176_;
34370 		_vala_ccode_node_unref0 (_tmp175_);
34371 		ccall = _tmp177_;
34372 		_tmp178_ = vala_data_type_get_nullable (target_type);
34373 		_tmp179_ = _tmp178_;
34374 		if (_tmp179_) {
34375 			ValaCCodeFunctionCall* _tmp180_;
34376 			ValaTargetValue* _tmp181_;
34377 			ValaCCodeExpression* _tmp182_;
34378 			_tmp180_ = ccall;
34379 			_tmp181_ = temp_value;
34380 			_tmp182_ = vala_get_cvalue_ (_tmp181_);
34381 			vala_ccode_function_call_add_argument (_tmp180_, _tmp182_);
34382 		} else {
34383 			ValaCCodeFunctionCall* _tmp183_;
34384 			ValaTargetValue* _tmp184_;
34385 			ValaCCodeExpression* _tmp185_;
34386 			ValaCCodeUnaryExpression* _tmp186_;
34387 			ValaCCodeUnaryExpression* _tmp187_;
34388 			_tmp183_ = ccall;
34389 			_tmp184_ = temp_value;
34390 			_tmp185_ = vala_get_cvalue_ (_tmp184_);
34391 			_tmp186_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, _tmp185_);
34392 			_tmp187_ = _tmp186_;
34393 			vala_ccode_function_call_add_argument (_tmp183_, (ValaCCodeExpression*) _tmp187_);
34394 			_vala_ccode_node_unref0 (_tmp187_);
34395 		}
34396 		_tmp188_ = type;
34397 		_tmp189_ = vala_get_ccode_type_id ((ValaCodeNode*) _tmp188_);
34398 		type_id = _tmp189_;
34399 		_tmp190_ = type_id;
34400 		if (g_strcmp0 (_tmp190_, "") == 0) {
34401 			ValaSourceReference* _tmp191_;
34402 			ValaSourceReference* _tmp192_;
34403 			ValaDataType* _tmp193_;
34404 			gchar* _tmp194_;
34405 			gchar* _tmp195_;
34406 			gchar* _tmp196_;
34407 			gchar* _tmp197_;
34408 			_tmp191_ = vala_code_node_get_source_reference (node);
34409 			_tmp192_ = _tmp191_;
34410 			_tmp193_ = type;
34411 			_tmp194_ = vala_code_node_to_string ((ValaCodeNode*) _tmp193_);
34412 			_tmp195_ = _tmp194_;
34413 			_tmp196_ = g_strdup_printf ("GValue boxing of type `%s' is not supported", _tmp195_);
34414 			_tmp197_ = _tmp196_;
34415 			vala_report_error (_tmp192_, _tmp197_);
34416 			_g_free0 (_tmp197_);
34417 			_g_free0 (_tmp195_);
34418 		}
34419 		_tmp198_ = ccall;
34420 		_tmp199_ = type_id;
34421 		_tmp200_ = vala_ccode_identifier_new (_tmp199_);
34422 		_tmp201_ = _tmp200_;
34423 		vala_ccode_function_call_add_argument (_tmp198_, (ValaCCodeExpression*) _tmp201_);
34424 		_vala_ccode_node_unref0 (_tmp201_);
34425 		_tmp202_ = vala_ccode_base_module_get_ccode (self);
34426 		_tmp203_ = _tmp202_;
34427 		_tmp204_ = ccall;
34428 		vala_ccode_function_add_expression (_tmp203_, (ValaCCodeExpression*) _tmp204_);
34429 		_tmp205_ = type;
34430 		if (vala_ccode_base_module_requires_destroy (_tmp205_)) {
34431 			ValaDataType* _tmp206_;
34432 			ValaCCodeExpression* _tmp207_;
34433 			ValaCCodeExpression* _tmp208_;
34434 			ValaCCodeFunctionCall* _tmp209_;
34435 			_tmp206_ = type;
34436 			_tmp207_ = vala_ccode_base_module_get_value_taker_function (self, _tmp206_);
34437 			_tmp208_ = _tmp207_;
34438 			_tmp209_ = vala_ccode_function_call_new (_tmp208_);
34439 			_vala_ccode_node_unref0 (ccall);
34440 			ccall = _tmp209_;
34441 			_vala_ccode_node_unref0 (_tmp208_);
34442 		} else {
34443 			ValaDataType* _tmp210_;
34444 			ValaCCodeExpression* _tmp211_;
34445 			ValaCCodeExpression* _tmp212_;
34446 			ValaCCodeFunctionCall* _tmp213_;
34447 			_tmp210_ = type;
34448 			_tmp211_ = vala_ccode_base_module_get_value_setter_function (self, _tmp210_);
34449 			_tmp212_ = _tmp211_;
34450 			_tmp213_ = vala_ccode_function_call_new (_tmp212_);
34451 			_vala_ccode_node_unref0 (ccall);
34452 			ccall = _tmp213_;
34453 			_vala_ccode_node_unref0 (_tmp212_);
34454 		}
34455 		_tmp214_ = vala_data_type_get_nullable (target_type);
34456 		_tmp215_ = _tmp214_;
34457 		if (_tmp215_) {
34458 			ValaCCodeFunctionCall* _tmp216_;
34459 			ValaTargetValue* _tmp217_;
34460 			ValaCCodeExpression* _tmp218_;
34461 			_tmp216_ = ccall;
34462 			_tmp217_ = temp_value;
34463 			_tmp218_ = vala_get_cvalue_ (_tmp217_);
34464 			vala_ccode_function_call_add_argument (_tmp216_, _tmp218_);
34465 		} else {
34466 			ValaCCodeFunctionCall* _tmp219_;
34467 			ValaTargetValue* _tmp220_;
34468 			ValaCCodeExpression* _tmp221_;
34469 			ValaCCodeUnaryExpression* _tmp222_;
34470 			ValaCCodeUnaryExpression* _tmp223_;
34471 			_tmp219_ = ccall;
34472 			_tmp220_ = temp_value;
34473 			_tmp221_ = vala_get_cvalue_ (_tmp220_);
34474 			_tmp222_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, _tmp221_);
34475 			_tmp223_ = _tmp222_;
34476 			vala_ccode_function_call_add_argument (_tmp219_, (ValaCCodeExpression*) _tmp223_);
34477 			_vala_ccode_node_unref0 (_tmp223_);
34478 		}
34479 		_tmp224_ = type;
34480 		if (vala_data_type_is_real_non_null_struct_type (_tmp224_)) {
34481 			ValaCCodeFunctionCall* _tmp225_;
34482 			ValaGLibValue* _tmp226_;
34483 			ValaCCodeExpression* _tmp227_;
34484 			ValaCCodeUnaryExpression* _tmp228_;
34485 			ValaCCodeUnaryExpression* _tmp229_;
34486 			_tmp225_ = ccall;
34487 			_tmp226_ = _result_;
34488 			_tmp227_ = _tmp226_->cvalue;
34489 			_tmp228_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, _tmp227_);
34490 			_tmp229_ = _tmp228_;
34491 			vala_ccode_function_call_add_argument (_tmp225_, (ValaCCodeExpression*) _tmp229_);
34492 			_vala_ccode_node_unref0 (_tmp229_);
34493 		} else {
34494 			ValaCCodeFunctionCall* _tmp230_;
34495 			ValaGLibValue* _tmp231_;
34496 			ValaCCodeExpression* _tmp232_;
34497 			_tmp230_ = ccall;
34498 			_tmp231_ = _result_;
34499 			_tmp232_ = _tmp231_->cvalue;
34500 			vala_ccode_function_call_add_argument (_tmp230_, _tmp232_);
34501 		}
34502 		_tmp233_ = vala_ccode_base_module_get_ccode (self);
34503 		_tmp234_ = _tmp233_;
34504 		_tmp235_ = ccall;
34505 		vala_ccode_function_add_expression (_tmp234_, (ValaCCodeExpression*) _tmp235_);
34506 		_tmp236_ = temp_value;
34507 		_tmp237_ = _vala_target_value_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp236_, VALA_TYPE_GLIB_VALUE, ValaGLibValue));
34508 		_vala_target_value_unref0 (_result_);
34509 		_result_ = _tmp237_;
34510 		_g_free0 (type_id);
34511 		_vala_ccode_node_unref0 (ccall);
34512 		_vala_target_value_unref0 (temp_value);
34513 	} else {
34514 		if (gvariant_boxing) {
34515 			gchar* variant_func = NULL;
34516 			gint _tmp238_;
34517 			gchar* _tmp239_;
34518 			ValaCCodeFunctionCall* ccall = NULL;
34519 			const gchar* _tmp240_;
34520 			ValaCCodeIdentifier* _tmp241_;
34521 			ValaCCodeIdentifier* _tmp242_;
34522 			ValaCCodeFunctionCall* _tmp243_;
34523 			ValaCCodeFunctionCall* _tmp244_;
34524 			ValaCCodeFunctionCall* _tmp245_;
34525 			ValaGLibValue* _tmp246_;
34526 			ValaCCodeExpression* _tmp247_;
34527 			ValaCCodeFunction* cfunc = NULL;
34528 			const gchar* _tmp248_;
34529 			ValaCCodeFunction* _tmp249_;
34530 			ValaCCodeFunction* _tmp250_;
34531 			ValaCCodeFunction* _tmp251_;
34532 			ValaDataType* _tmp252_;
34533 			gchar* _tmp253_;
34534 			gchar* _tmp254_;
34535 			ValaCCodeParameter* _tmp255_;
34536 			ValaCCodeParameter* _tmp256_;
34537 			ValaDataType* _tmp257_;
34538 			ValaCCodeFunction* _tmp276_;
34539 			ValaCCodeFunctionCall* sink = NULL;
34540 			ValaCCodeIdentifier* _tmp277_;
34541 			ValaCCodeIdentifier* _tmp278_;
34542 			ValaCCodeFunctionCall* _tmp279_;
34543 			ValaCCodeFunctionCall* _tmp280_;
34544 			ValaCCodeFunctionCall* _tmp281_;
34545 			ValaDataType* _tmp282_;
34546 			ValaCCodeIdentifier* _tmp283_;
34547 			ValaCCodeIdentifier* _tmp284_;
34548 			ValaCCodeExpression* _tmp285_;
34549 			ValaCCodeExpression* _tmp286_;
34550 			ValaCCodeFunction* _tmp287_;
34551 			ValaCCodeFunction* _tmp288_;
34552 			ValaCCodeFunctionCall* _tmp289_;
34553 			ValaCCodeFile* _tmp290_;
34554 			ValaCCodeFunction* _tmp291_;
34555 			ValaCCodeFile* _tmp292_;
34556 			ValaCCodeFunction* _tmp293_;
34557 			ValaGLibValue* _tmp294_;
34558 			ValaCCodeFunctionCall* _tmp295_;
34559 			ValaCCodeExpression* _tmp296_;
34560 			ValaGLibValue* _tmp297_;
34561 			ValaDataType* _tmp298_;
34562 			ValaDataType* _tmp299_;
34563 			ValaGLibValue* _tmp300_;
34564 			ValaTargetValue* _tmp301_;
34565 			gboolean _tmp302_;
34566 			gboolean _tmp303_;
34567 			self->priv->next_variant_function_id = self->priv->next_variant_function_id + 1;
34568 			_tmp238_ = self->priv->next_variant_function_id;
34569 			_tmp239_ = g_strdup_printf ("_variant_new%d", _tmp238_);
34570 			variant_func = _tmp239_;
34571 			_tmp240_ = variant_func;
34572 			_tmp241_ = vala_ccode_identifier_new (_tmp240_);
34573 			_tmp242_ = _tmp241_;
34574 			_tmp243_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp242_);
34575 			_tmp244_ = _tmp243_;
34576 			_vala_ccode_node_unref0 (_tmp242_);
34577 			ccall = _tmp244_;
34578 			_tmp245_ = ccall;
34579 			_tmp246_ = _result_;
34580 			_tmp247_ = _tmp246_->cvalue;
34581 			vala_ccode_function_call_add_argument (_tmp245_, _tmp247_);
34582 			_tmp248_ = variant_func;
34583 			_tmp249_ = vala_ccode_function_new (_tmp248_, "GVariant*");
34584 			cfunc = _tmp249_;
34585 			_tmp250_ = cfunc;
34586 			vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp250_, VALA_CCODE_MODIFIERS_STATIC);
34587 			_tmp251_ = cfunc;
34588 			_tmp252_ = type;
34589 			_tmp253_ = vala_get_ccode_name ((ValaCodeNode*) _tmp252_);
34590 			_tmp254_ = _tmp253_;
34591 			_tmp255_ = vala_ccode_parameter_new ("value", _tmp254_);
34592 			_tmp256_ = _tmp255_;
34593 			vala_ccode_function_add_parameter (_tmp251_, _tmp256_);
34594 			_vala_ccode_node_unref0 (_tmp256_);
34595 			_g_free0 (_tmp254_);
34596 			_tmp257_ = type;
34597 			if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp257_, VALA_TYPE_ARRAY_TYPE)) {
34598 				ValaArrayType* array_type = NULL;
34599 				ValaDataType* _tmp258_;
34600 				ValaArrayType* _tmp259_;
34601 				gchar* length_ctype = NULL;
34602 				ValaArrayType* _tmp260_;
34603 				gchar* _tmp261_;
34604 				_tmp258_ = type;
34605 				_tmp259_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp258_, VALA_TYPE_ARRAY_TYPE, ValaArrayType));
34606 				array_type = _tmp259_;
34607 				_tmp260_ = array_type;
34608 				_tmp261_ = vala_get_ccode_array_length_type ((ValaCodeNode*) _tmp260_);
34609 				length_ctype = _tmp261_;
34610 				{
34611 					gint dim = 0;
34612 					dim = 1;
34613 					{
34614 						gboolean _tmp262_ = FALSE;
34615 						_tmp262_ = TRUE;
34616 						while (TRUE) {
34617 							ValaArrayType* _tmp264_;
34618 							gint _tmp265_;
34619 							gint _tmp266_;
34620 							ValaCCodeFunctionCall* _tmp267_;
34621 							ValaCCodeExpression* _tmp268_;
34622 							ValaCCodeExpression* _tmp269_;
34623 							ValaCCodeFunction* _tmp270_;
34624 							gchar* _tmp271_;
34625 							gchar* _tmp272_;
34626 							const gchar* _tmp273_;
34627 							ValaCCodeParameter* _tmp274_;
34628 							ValaCCodeParameter* _tmp275_;
34629 							if (!_tmp262_) {
34630 								gint _tmp263_;
34631 								_tmp263_ = dim;
34632 								dim = _tmp263_ + 1;
34633 							}
34634 							_tmp262_ = FALSE;
34635 							_tmp264_ = array_type;
34636 							_tmp265_ = vala_array_type_get_rank (_tmp264_);
34637 							_tmp266_ = _tmp265_;
34638 							if (!(dim <= _tmp266_)) {
34639 								break;
34640 							}
34641 							_tmp267_ = ccall;
34642 							_tmp268_ = vala_ccode_base_module_get_array_length_cvalue (self, value, dim);
34643 							_tmp269_ = _tmp268_;
34644 							vala_ccode_function_call_add_argument (_tmp267_, _tmp269_);
34645 							_vala_ccode_node_unref0 (_tmp269_);
34646 							_tmp270_ = cfunc;
34647 							_tmp271_ = vala_ccode_base_module_get_array_length_cname (self, "value", dim);
34648 							_tmp272_ = _tmp271_;
34649 							_tmp273_ = length_ctype;
34650 							_tmp274_ = vala_ccode_parameter_new (_tmp272_, _tmp273_);
34651 							_tmp275_ = _tmp274_;
34652 							vala_ccode_function_add_parameter (_tmp270_, _tmp275_);
34653 							_vala_ccode_node_unref0 (_tmp275_);
34654 							_g_free0 (_tmp272_);
34655 						}
34656 					}
34657 				}
34658 				_g_free0 (length_ctype);
34659 				_vala_code_node_unref0 (array_type);
34660 			}
34661 			_tmp276_ = cfunc;
34662 			vala_ccode_base_module_push_function (self, _tmp276_);
34663 			_tmp277_ = vala_ccode_identifier_new ("g_variant_ref_sink");
34664 			_tmp278_ = _tmp277_;
34665 			_tmp279_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp278_);
34666 			_tmp280_ = _tmp279_;
34667 			_vala_ccode_node_unref0 (_tmp278_);
34668 			sink = _tmp280_;
34669 			_tmp281_ = sink;
34670 			_tmp282_ = type;
34671 			_tmp283_ = vala_ccode_identifier_new ("value");
34672 			_tmp284_ = _tmp283_;
34673 			_tmp285_ = vala_ccode_base_module_serialize_expression (self, _tmp282_, (ValaCCodeExpression*) _tmp284_);
34674 			_tmp286_ = _tmp285_;
34675 			vala_ccode_function_call_add_argument (_tmp281_, _tmp286_);
34676 			_vala_ccode_node_unref0 (_tmp286_);
34677 			_vala_ccode_node_unref0 (_tmp284_);
34678 			_tmp287_ = vala_ccode_base_module_get_ccode (self);
34679 			_tmp288_ = _tmp287_;
34680 			_tmp289_ = sink;
34681 			vala_ccode_function_add_return (_tmp288_, (ValaCCodeExpression*) _tmp289_);
34682 			vala_ccode_base_module_pop_function (self);
34683 			_tmp290_ = self->cfile;
34684 			_tmp291_ = cfunc;
34685 			vala_ccode_file_add_function_declaration (_tmp290_, _tmp291_);
34686 			_tmp292_ = self->cfile;
34687 			_tmp293_ = cfunc;
34688 			vala_ccode_file_add_function (_tmp292_, _tmp293_);
34689 			_tmp294_ = _result_;
34690 			_tmp295_ = ccall;
34691 			_tmp296_ = _vala_ccode_node_ref0 ((ValaCCodeExpression*) _tmp295_);
34692 			_vala_ccode_node_unref0 (_tmp294_->cvalue);
34693 			_tmp294_->cvalue = _tmp296_;
34694 			_tmp297_ = _result_;
34695 			_tmp298_ = vala_target_value_get_value_type ((ValaTargetValue*) _tmp297_);
34696 			_tmp299_ = _tmp298_;
34697 			vala_data_type_set_value_owned (_tmp299_, TRUE);
34698 			_tmp300_ = _result_;
34699 			_tmp301_ = vala_ccode_base_module_store_temp_value (self, (ValaTargetValue*) _tmp300_, node, NULL);
34700 			_vala_target_value_unref0 (_result_);
34701 			_result_ = G_TYPE_CHECK_INSTANCE_CAST (_tmp301_, VALA_TYPE_GLIB_VALUE, ValaGLibValue);
34702 			_tmp302_ = vala_data_type_get_value_owned (target_type);
34703 			_tmp303_ = _tmp302_;
34704 			if (!_tmp303_) {
34705 				ValaArrayList* _tmp304_;
34706 				ValaArrayList* _tmp305_;
34707 				ValaGLibValue* _tmp306_;
34708 				ValaGLibValue* _tmp307_;
34709 				ValaGLibValue* _tmp308_;
34710 				_tmp304_ = vala_ccode_base_module_get_temp_ref_values (self);
34711 				_tmp305_ = _tmp304_;
34712 				_tmp306_ = _result_;
34713 				_tmp307_ = vala_glib_value_copy (G_TYPE_CHECK_INSTANCE_CAST (_tmp306_, VALA_TYPE_GLIB_VALUE, ValaGLibValue));
34714 				_tmp308_ = _tmp307_;
34715 				vala_list_insert ((ValaList*) _tmp305_, 0, (ValaTargetValue*) _tmp308_);
34716 				_vala_target_value_unref0 (_tmp308_);
34717 			}
34718 			_vala_ccode_node_unref0 (sink);
34719 			_vala_ccode_node_unref0 (cfunc);
34720 			_vala_ccode_node_unref0 (ccall);
34721 			_g_free0 (variant_func);
34722 		} else {
34723 			if (boxing) {
34724 				ValaGLibValue* _tmp309_;
34725 				ValaDataType* _tmp310_;
34726 				ValaDataType* _tmp311_;
34727 				gboolean _tmp312_ = FALSE;
34728 				ValaGLibValue* _tmp313_;
34729 				ValaGLibValue* _tmp330_;
34730 				ValaGLibValue* _tmp331_;
34731 				ValaCCodeExpression* _tmp332_;
34732 				ValaCCodeUnaryExpression* _tmp333_;
34733 				ValaGLibValue* _tmp334_;
34734 				ValaGLibValue* _tmp335_;
34735 				ValaDataType* _tmp336_;
34736 				ValaDataType* _tmp337_;
34737 				_tmp309_ = _result_;
34738 				_tmp310_ = vala_target_value_get_value_type ((ValaTargetValue*) _tmp309_);
34739 				_tmp311_ = _tmp310_;
34740 				vala_data_type_set_nullable (_tmp311_, FALSE);
34741 				_tmp313_ = _result_;
34742 				if (!_tmp313_->lvalue) {
34743 					_tmp312_ = TRUE;
34744 				} else {
34745 					ValaGLibValue* _tmp314_;
34746 					ValaDataType* _tmp315_;
34747 					ValaDataType* _tmp316_;
34748 					ValaDataType* _tmp317_;
34749 					ValaDataType* _tmp318_;
34750 					_tmp314_ = _result_;
34751 					_tmp315_ = vala_target_value_get_value_type ((ValaTargetValue*) _tmp314_);
34752 					_tmp316_ = _tmp315_;
34753 					_tmp317_ = vala_target_value_get_value_type (value);
34754 					_tmp318_ = _tmp317_;
34755 					_tmp312_ = !vala_data_type_equals (_tmp316_, _tmp318_);
34756 				}
34757 				if (_tmp312_) {
34758 					ValaGLibValue* _tmp319_;
34759 					ValaGLibValue* _tmp320_;
34760 					ValaCCodeExpression* _tmp321_;
34761 					ValaDataType* _tmp322_;
34762 					ValaDataType* _tmp323_;
34763 					ValaGLibValue* _tmp324_;
34764 					ValaDataType* _tmp325_;
34765 					ValaDataType* _tmp326_;
34766 					ValaCCodeExpression* _tmp327_;
34767 					ValaGLibValue* _tmp328_;
34768 					ValaTargetValue* _tmp329_;
34769 					_tmp319_ = _result_;
34770 					_tmp320_ = _result_;
34771 					_tmp321_ = _tmp320_->cvalue;
34772 					_tmp322_ = vala_target_value_get_value_type (value);
34773 					_tmp323_ = _tmp322_;
34774 					_tmp324_ = _result_;
34775 					_tmp325_ = vala_target_value_get_value_type ((ValaTargetValue*) _tmp324_);
34776 					_tmp326_ = _tmp325_;
34777 					_tmp327_ = vala_ccode_base_module_get_implicit_cast_expression (self, _tmp321_, _tmp323_, _tmp326_, node);
34778 					_vala_ccode_node_unref0 (_tmp319_->cvalue);
34779 					_tmp319_->cvalue = _tmp327_;
34780 					_tmp328_ = _result_;
34781 					_tmp329_ = vala_ccode_base_module_store_temp_value (self, (ValaTargetValue*) _tmp328_, node, NULL);
34782 					_vala_target_value_unref0 (_result_);
34783 					_result_ = G_TYPE_CHECK_INSTANCE_CAST (_tmp329_, VALA_TYPE_GLIB_VALUE, ValaGLibValue);
34784 				}
34785 				_tmp330_ = _result_;
34786 				_tmp331_ = _result_;
34787 				_tmp332_ = _tmp331_->cvalue;
34788 				_tmp333_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, _tmp332_);
34789 				_vala_ccode_node_unref0 (_tmp330_->cvalue);
34790 				_tmp330_->cvalue = (ValaCCodeExpression*) _tmp333_;
34791 				_tmp334_ = _result_;
34792 				_tmp334_->lvalue = FALSE;
34793 				_tmp335_ = _result_;
34794 				_tmp336_ = vala_target_value_get_value_type ((ValaTargetValue*) _tmp335_);
34795 				_tmp337_ = _tmp336_;
34796 				vala_data_type_set_nullable (_tmp337_, TRUE);
34797 			} else {
34798 				if (unboxing) {
34799 					ValaGLibValue* _tmp338_;
34800 					ValaGLibValue* _tmp339_;
34801 					ValaCCodeExpression* _tmp340_;
34802 					ValaCCodeUnaryExpression* _tmp341_;
34803 					_tmp338_ = _result_;
34804 					_tmp339_ = _result_;
34805 					_tmp340_ = _tmp339_->cvalue;
34806 					_tmp341_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_POINTER_INDIRECTION, _tmp340_);
34807 					_vala_ccode_node_unref0 (_tmp338_->cvalue);
34808 					_tmp338_->cvalue = (ValaCCodeExpression*) _tmp341_;
34809 				} else {
34810 					ValaCCodeExpression* old_cexpr = NULL;
34811 					ValaGLibValue* _tmp342_;
34812 					ValaCCodeExpression* _tmp343_;
34813 					ValaCCodeExpression* _tmp344_;
34814 					ValaGLibValue* _tmp345_;
34815 					ValaGLibValue* _tmp346_;
34816 					ValaCCodeExpression* _tmp347_;
34817 					ValaDataType* _tmp348_;
34818 					ValaCCodeExpression* _tmp349_;
34819 					gboolean _tmp350_ = FALSE;
34820 					ValaGLibValue* _tmp351_;
34821 					ValaGLibValue* _tmp355_;
34822 					_tmp342_ = _result_;
34823 					_tmp343_ = _tmp342_->cvalue;
34824 					_tmp344_ = _vala_ccode_node_ref0 (_tmp343_);
34825 					old_cexpr = _tmp344_;
34826 					_tmp345_ = _result_;
34827 					_tmp346_ = _result_;
34828 					_tmp347_ = _tmp346_->cvalue;
34829 					_tmp348_ = type;
34830 					_tmp349_ = vala_ccode_base_module_get_implicit_cast_expression (self, _tmp347_, _tmp348_, target_type, node);
34831 					_vala_ccode_node_unref0 (_tmp345_->cvalue);
34832 					_tmp345_->cvalue = _tmp349_;
34833 					_tmp351_ = _result_;
34834 					if (_tmp351_->lvalue) {
34835 						ValaGLibValue* _tmp352_;
34836 						ValaCCodeExpression* _tmp353_;
34837 						ValaCCodeExpression* _tmp354_;
34838 						_tmp352_ = _result_;
34839 						_tmp353_ = _tmp352_->cvalue;
34840 						_tmp354_ = old_cexpr;
34841 						_tmp350_ = _tmp353_ == _tmp354_;
34842 					} else {
34843 						_tmp350_ = FALSE;
34844 					}
34845 					_tmp355_ = _result_;
34846 					_tmp355_->lvalue = _tmp350_;
34847 					_vala_ccode_node_unref0 (old_cexpr);
34848 				}
34849 			}
34850 		}
34851 	}
34852 	array_needs_copy = FALSE;
34853 	_tmp357_ = type;
34854 	if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp357_, VALA_TYPE_ARRAY_TYPE)) {
34855 		_tmp356_ = G_TYPE_CHECK_INSTANCE_TYPE (target_type, VALA_TYPE_ARRAY_TYPE);
34856 	} else {
34857 		_tmp356_ = FALSE;
34858 	}
34859 	if (_tmp356_) {
34860 		ValaArrayType* array = NULL;
34861 		ValaDataType* _tmp358_;
34862 		ValaArrayType* _tmp359_;
34863 		ValaArrayType* target_array = NULL;
34864 		ValaArrayType* _tmp360_;
34865 		gboolean _tmp361_ = FALSE;
34866 		ValaArrayType* _tmp362_;
34867 		ValaDataType* _tmp363_;
34868 		ValaDataType* _tmp364_;
34869 		gboolean _tmp365_;
34870 		gboolean _tmp366_;
34871 		_tmp358_ = type;
34872 		_tmp359_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp358_, VALA_TYPE_ARRAY_TYPE, ValaArrayType));
34873 		array = _tmp359_;
34874 		_tmp360_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (target_type, VALA_TYPE_ARRAY_TYPE, ValaArrayType));
34875 		target_array = _tmp360_;
34876 		_tmp362_ = target_array;
34877 		_tmp363_ = vala_array_type_get_element_type (_tmp362_);
34878 		_tmp364_ = _tmp363_;
34879 		_tmp365_ = vala_data_type_get_value_owned (_tmp364_);
34880 		_tmp366_ = _tmp365_;
34881 		if (_tmp366_) {
34882 			ValaArrayType* _tmp367_;
34883 			ValaDataType* _tmp368_;
34884 			ValaDataType* _tmp369_;
34885 			gboolean _tmp370_;
34886 			gboolean _tmp371_;
34887 			_tmp367_ = array;
34888 			_tmp368_ = vala_array_type_get_element_type (_tmp367_);
34889 			_tmp369_ = _tmp368_;
34890 			_tmp370_ = vala_data_type_get_value_owned (_tmp369_);
34891 			_tmp371_ = _tmp370_;
34892 			_tmp361_ = !_tmp371_;
34893 		} else {
34894 			_tmp361_ = FALSE;
34895 		}
34896 		if (_tmp361_) {
34897 			ValaArrayType* _tmp372_;
34898 			ValaDataType* _tmp373_;
34899 			ValaDataType* _tmp374_;
34900 			_tmp372_ = target_array;
34901 			_tmp373_ = vala_array_type_get_element_type (_tmp372_);
34902 			_tmp374_ = _tmp373_;
34903 			array_needs_copy = vala_ccode_base_module_requires_copy (_tmp374_);
34904 		}
34905 		_vala_code_node_unref0 (target_array);
34906 		_vala_code_node_unref0 (array);
34907 	}
34908 	if (!gvalue_boxing) {
34909 		_tmp379_ = !gvariant_boxing;
34910 	} else {
34911 		_tmp379_ = FALSE;
34912 	}
34913 	if (_tmp379_) {
34914 		gboolean _tmp380_;
34915 		gboolean _tmp381_;
34916 		_tmp380_ = vala_data_type_get_value_owned (target_type);
34917 		_tmp381_ = _tmp380_;
34918 		_tmp378_ = _tmp381_;
34919 	} else {
34920 		_tmp378_ = FALSE;
34921 	}
34922 	if (_tmp378_) {
34923 		gboolean _tmp382_ = FALSE;
34924 		gboolean _tmp383_ = FALSE;
34925 		gboolean _tmp384_ = FALSE;
34926 		ValaDataType* _tmp385_;
34927 		gboolean _tmp386_;
34928 		gboolean _tmp387_;
34929 		_tmp385_ = type;
34930 		_tmp386_ = vala_data_type_get_value_owned (_tmp385_);
34931 		_tmp387_ = _tmp386_;
34932 		if (!_tmp387_) {
34933 			_tmp384_ = TRUE;
34934 		} else {
34935 			_tmp384_ = boxing;
34936 		}
34937 		if (_tmp384_) {
34938 			_tmp383_ = TRUE;
34939 		} else {
34940 			_tmp383_ = unboxing;
34941 		}
34942 		if (_tmp383_) {
34943 			_tmp382_ = TRUE;
34944 		} else {
34945 			_tmp382_ = array_needs_copy;
34946 		}
34947 		_tmp377_ = _tmp382_;
34948 	} else {
34949 		_tmp377_ = FALSE;
34950 	}
34951 	if (_tmp377_) {
34952 		_tmp376_ = vala_ccode_base_module_requires_copy (target_type);
34953 	} else {
34954 		_tmp376_ = FALSE;
34955 	}
34956 	if (_tmp376_) {
34957 		ValaDataType* _tmp388_;
34958 		_tmp388_ = type;
34959 		_tmp375_ = !G_TYPE_CHECK_INSTANCE_TYPE (_tmp388_, VALA_TYPE_NULL_TYPE);
34960 	} else {
34961 		_tmp375_ = FALSE;
34962 	}
34963 	if (_tmp375_) {
34964 		ValaGLibValue* copy = NULL;
34965 		ValaGLibValue* _tmp389_;
34966 		ValaTargetValue* _tmp390_;
34967 		gboolean _tmp391_ = FALSE;
34968 		ValaTypeSymbol* _tmp392_;
34969 		ValaTypeSymbol* _tmp393_;
34970 		gboolean _tmp403_ = FALSE;
34971 		ValaGLibValue* _tmp414_;
34972 		ValaGLibValue* _tmp415_;
34973 		ValaPropertyAccessor* prop_acc = NULL;
34974 		ValaPropertyAccessor* _tmp416_;
34975 		gboolean _tmp417_ = FALSE;
34976 		gboolean _tmp418_ = FALSE;
34977 		ValaPropertyAccessor* _tmp419_;
34978 		_tmp389_ = _result_;
34979 		_tmp390_ = vala_ccode_base_module_copy_value (self, (ValaTargetValue*) _tmp389_, node);
34980 		copy = G_TYPE_CHECK_INSTANCE_CAST (_tmp390_, VALA_TYPE_GLIB_VALUE, ValaGLibValue);
34981 		_tmp392_ = vala_data_type_get_type_symbol (target_type);
34982 		_tmp393_ = _tmp392_;
34983 		if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp393_, VALA_TYPE_INTERFACE)) {
34984 			ValaGLibValue* _tmp394_;
34985 			_tmp394_ = copy;
34986 			_tmp391_ = _tmp394_ == NULL;
34987 		} else {
34988 			_tmp391_ = FALSE;
34989 		}
34990 		if (_tmp391_) {
34991 			ValaSourceReference* _tmp395_;
34992 			ValaSourceReference* _tmp396_;
34993 			ValaTypeSymbol* _tmp397_;
34994 			ValaTypeSymbol* _tmp398_;
34995 			gchar* _tmp399_;
34996 			gchar* _tmp400_;
34997 			gchar* _tmp401_;
34998 			gchar* _tmp402_;
34999 			_tmp395_ = vala_code_node_get_source_reference (node);
35000 			_tmp396_ = _tmp395_;
35001 			_tmp397_ = vala_data_type_get_type_symbol (target_type);
35002 			_tmp398_ = _tmp397_;
35003 			_tmp399_ = vala_symbol_get_full_name ((ValaSymbol*) _tmp398_);
35004 			_tmp400_ = _tmp399_;
35005 			_tmp401_ = g_strdup_printf ("missing class prerequisite for interface `%s', add GLib.Object to inte" \
35006 "rface declaration if unsure", _tmp400_);
35007 			_tmp402_ = _tmp401_;
35008 			vala_report_error (_tmp396_, _tmp402_);
35009 			_g_free0 (_tmp402_);
35010 			_g_free0 (_tmp400_);
35011 			result = (ValaTargetValue*) _result_;
35012 			_vala_target_value_unref0 (copy);
35013 			_vala_code_node_unref0 (type);
35014 			return result;
35015 		}
35016 		if (array_needs_copy) {
35017 			ValaDataType* _tmp404_;
35018 			_tmp404_ = type;
35019 			_tmp403_ = vala_ccode_base_module_requires_destroy (_tmp404_);
35020 		} else {
35021 			_tmp403_ = FALSE;
35022 		}
35023 		if (_tmp403_) {
35024 			ValaGLibValue* _tmp405_;
35025 			ValaDataType* _tmp406_;
35026 			ValaDataType* _tmp407_;
35027 			ValaDataType* _tmp408_;
35028 			ValaCCodeFunction* _tmp409_;
35029 			ValaCCodeFunction* _tmp410_;
35030 			ValaGLibValue* _tmp411_;
35031 			ValaCCodeExpression* _tmp412_;
35032 			ValaCCodeExpression* _tmp413_;
35033 			_tmp405_ = _result_;
35034 			_tmp406_ = type;
35035 			_tmp407_ = vala_data_type_copy (_tmp406_);
35036 			_tmp408_ = _tmp407_;
35037 			vala_target_value_set_value_type ((ValaTargetValue*) _tmp405_, _tmp408_);
35038 			_vala_code_node_unref0 (_tmp408_);
35039 			_tmp409_ = vala_ccode_base_module_get_ccode (self);
35040 			_tmp410_ = _tmp409_;
35041 			_tmp411_ = _result_;
35042 			_tmp412_ = vala_ccode_base_module_destroy_value (self, (ValaTargetValue*) _tmp411_, FALSE);
35043 			_tmp413_ = _tmp412_;
35044 			vala_ccode_function_add_expression (_tmp410_, _tmp413_);
35045 			_vala_ccode_node_unref0 (_tmp413_);
35046 		}
35047 		_tmp414_ = copy;
35048 		_tmp415_ = _vala_target_value_ref0 (_tmp414_);
35049 		_vala_target_value_unref0 (_result_);
35050 		_result_ = _tmp415_;
35051 		_tmp416_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (node, VALA_TYPE_PROPERTY_ACCESSOR) ? ((ValaPropertyAccessor*) node) : NULL);
35052 		prop_acc = _tmp416_;
35053 		_tmp419_ = prop_acc;
35054 		if (_tmp419_ != NULL) {
35055 			ValaPropertyAccessor* _tmp420_;
35056 			gboolean _tmp421_;
35057 			gboolean _tmp422_;
35058 			_tmp420_ = prop_acc;
35059 			_tmp421_ = vala_property_accessor_get_automatic_body (_tmp420_);
35060 			_tmp422_ = _tmp421_;
35061 			_tmp418_ = !_tmp422_;
35062 		} else {
35063 			_tmp418_ = FALSE;
35064 		}
35065 		if (_tmp418_) {
35066 			ValaGLibValue* _tmp423_;
35067 			ValaDataType* _tmp424_;
35068 			ValaDataType* _tmp425_;
35069 			_tmp423_ = _result_;
35070 			_tmp424_ = vala_target_value_get_value_type ((ValaTargetValue*) _tmp423_);
35071 			_tmp425_ = _tmp424_;
35072 			_tmp417_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp425_, VALA_TYPE_ARRAY_TYPE);
35073 		} else {
35074 			_tmp417_ = FALSE;
35075 		}
35076 		if (_tmp417_) {
35077 			ValaSourceReference* _tmp426_;
35078 			ValaSourceReference* _tmp427_;
35079 			_tmp426_ = vala_code_node_get_source_reference (node);
35080 			_tmp427_ = _tmp426_;
35081 			vala_report_deprecated (_tmp427_, "implicit copy of array is deprecated, explicitly invoke the copy metho" \
35082 "d instead");
35083 		}
35084 		_vala_code_node_unref0 (prop_acc);
35085 		_vala_target_value_unref0 (copy);
35086 	}
35087 	result = (ValaTargetValue*) _result_;
35088 	_vala_code_node_unref0 (type);
35089 	return result;
35090 }
35091 
35092 static ValaCCodeExpression*
vala_ccode_base_module_real_get_implicit_cast_expression(ValaCCodeBaseModule * self,ValaCCodeExpression * source_cexpr,ValaDataType * expression_type,ValaDataType * target_type,ValaCodeNode * node)35093 vala_ccode_base_module_real_get_implicit_cast_expression (ValaCCodeBaseModule* self,
35094                                                           ValaCCodeExpression* source_cexpr,
35095                                                           ValaDataType* expression_type,
35096                                                           ValaDataType* target_type,
35097                                                           ValaCodeNode* node)
35098 {
35099 	ValaCCodeExpression* cexpr = NULL;
35100 	ValaCCodeExpression* _tmp0_;
35101 	gboolean _tmp1_ = FALSE;
35102 	ValaTypeSymbol* _tmp2_;
35103 	ValaTypeSymbol* _tmp3_;
35104 	ValaCCodeFile* _tmp8_;
35105 	ValaClass* cl = NULL;
35106 	ValaTypeSymbol* _tmp9_;
35107 	ValaTypeSymbol* _tmp10_;
35108 	ValaInterface* iface = NULL;
35109 	ValaTypeSymbol* _tmp11_;
35110 	ValaTypeSymbol* _tmp12_;
35111 	gboolean _tmp13_ = FALSE;
35112 	ValaCodeContext* _tmp14_;
35113 	gboolean _tmp15_;
35114 	gboolean _tmp16_;
35115 	ValaCCodeExpression* result = NULL;
35116 	g_return_val_if_fail (source_cexpr != NULL, NULL);
35117 	_tmp0_ = _vala_ccode_node_ref0 (source_cexpr);
35118 	cexpr = _tmp0_;
35119 	_tmp2_ = vala_data_type_get_type_symbol (expression_type);
35120 	_tmp3_ = _tmp2_;
35121 	if (_tmp3_ != NULL) {
35122 		ValaTypeSymbol* _tmp4_;
35123 		ValaTypeSymbol* _tmp5_;
35124 		ValaTypeSymbol* _tmp6_;
35125 		ValaTypeSymbol* _tmp7_;
35126 		_tmp4_ = vala_data_type_get_type_symbol (expression_type);
35127 		_tmp5_ = _tmp4_;
35128 		_tmp6_ = vala_data_type_get_type_symbol (target_type);
35129 		_tmp7_ = _tmp6_;
35130 		_tmp1_ = _tmp5_ == _tmp7_;
35131 	} else {
35132 		_tmp1_ = FALSE;
35133 	}
35134 	if (_tmp1_) {
35135 		result = cexpr;
35136 		return result;
35137 	}
35138 	if (G_TYPE_CHECK_INSTANCE_TYPE (expression_type, VALA_TYPE_NULL_TYPE)) {
35139 		result = cexpr;
35140 		return result;
35141 	}
35142 	_tmp8_ = self->cfile;
35143 	vala_ccode_base_module_generate_type_declaration (self, target_type, _tmp8_);
35144 	_tmp9_ = vala_data_type_get_type_symbol (target_type);
35145 	_tmp10_ = _tmp9_;
35146 	cl = G_TYPE_CHECK_INSTANCE_TYPE (_tmp10_, VALA_TYPE_CLASS) ? ((ValaClass*) _tmp10_) : NULL;
35147 	_tmp11_ = vala_data_type_get_type_symbol (target_type);
35148 	_tmp12_ = _tmp11_;
35149 	iface = G_TYPE_CHECK_INSTANCE_TYPE (_tmp12_, VALA_TYPE_INTERFACE) ? ((ValaInterface*) _tmp12_) : NULL;
35150 	_tmp14_ = self->priv->_context;
35151 	_tmp15_ = vala_code_context_get_checking (_tmp14_);
35152 	_tmp16_ = _tmp15_;
35153 	if (_tmp16_) {
35154 		gboolean _tmp17_ = FALSE;
35155 		ValaInterface* _tmp18_;
35156 		_tmp18_ = iface;
35157 		if (_tmp18_ != NULL) {
35158 			_tmp17_ = TRUE;
35159 		} else {
35160 			gboolean _tmp19_ = FALSE;
35161 			ValaClass* _tmp20_;
35162 			_tmp20_ = cl;
35163 			if (_tmp20_ != NULL) {
35164 				ValaClass* _tmp21_;
35165 				gboolean _tmp22_;
35166 				gboolean _tmp23_;
35167 				_tmp21_ = cl;
35168 				_tmp22_ = vala_class_get_is_compact (_tmp21_);
35169 				_tmp23_ = _tmp22_;
35170 				_tmp19_ = !_tmp23_;
35171 			} else {
35172 				_tmp19_ = FALSE;
35173 			}
35174 			_tmp17_ = _tmp19_;
35175 		}
35176 		_tmp13_ = _tmp17_;
35177 	} else {
35178 		_tmp13_ = FALSE;
35179 	}
35180 	if (_tmp13_) {
35181 		ValaCCodeExpression* _tmp24_;
35182 		ValaTypeSymbol* _tmp25_;
35183 		ValaTypeSymbol* _tmp26_;
35184 		ValaCCodeFunctionCall* _tmp27_;
35185 		_tmp24_ = cexpr;
35186 		_tmp25_ = vala_data_type_get_type_symbol (target_type);
35187 		_tmp26_ = _tmp25_;
35188 		_tmp27_ = vala_ccode_base_module_generate_instance_cast (self, _tmp24_, _tmp26_);
35189 		result = (ValaCCodeExpression*) _tmp27_;
35190 		_vala_ccode_node_unref0 (cexpr);
35191 		return result;
35192 	} else {
35193 		gboolean _tmp28_ = FALSE;
35194 		ValaTypeSymbol* _tmp29_;
35195 		ValaTypeSymbol* _tmp30_;
35196 		_tmp29_ = vala_data_type_get_type_symbol (target_type);
35197 		_tmp30_ = _tmp29_;
35198 		if (_tmp30_ != NULL) {
35199 			gchar* _tmp31_;
35200 			gchar* _tmp32_;
35201 			gchar* _tmp33_;
35202 			gchar* _tmp34_;
35203 			_tmp31_ = vala_get_ccode_name ((ValaCodeNode*) expression_type);
35204 			_tmp32_ = _tmp31_;
35205 			_tmp33_ = vala_get_ccode_name ((ValaCodeNode*) target_type);
35206 			_tmp34_ = _tmp33_;
35207 			_tmp28_ = g_strcmp0 (_tmp32_, _tmp34_) != 0;
35208 			_g_free0 (_tmp34_);
35209 			_g_free0 (_tmp32_);
35210 		} else {
35211 			_tmp28_ = FALSE;
35212 		}
35213 		if (_tmp28_) {
35214 			ValaStruct* st = NULL;
35215 			ValaTypeSymbol* _tmp35_;
35216 			ValaTypeSymbol* _tmp36_;
35217 			gboolean _tmp37_ = FALSE;
35218 			ValaTypeSymbol* _tmp38_;
35219 			ValaTypeSymbol* _tmp39_;
35220 			_tmp35_ = vala_data_type_get_type_symbol (target_type);
35221 			_tmp36_ = _tmp35_;
35222 			st = G_TYPE_CHECK_INSTANCE_TYPE (_tmp36_, VALA_TYPE_STRUCT) ? ((ValaStruct*) _tmp36_) : NULL;
35223 			_tmp38_ = vala_data_type_get_type_symbol (target_type);
35224 			_tmp39_ = _tmp38_;
35225 			if (vala_typesymbol_is_reference_type (_tmp39_)) {
35226 				_tmp37_ = TRUE;
35227 			} else {
35228 				gboolean _tmp40_ = FALSE;
35229 				ValaStruct* _tmp41_;
35230 				_tmp41_ = st;
35231 				if (_tmp41_ != NULL) {
35232 					ValaStruct* _tmp42_;
35233 					_tmp42_ = st;
35234 					_tmp40_ = vala_struct_is_simple_type (_tmp42_);
35235 				} else {
35236 					_tmp40_ = FALSE;
35237 				}
35238 				_tmp37_ = _tmp40_;
35239 			}
35240 			if (_tmp37_) {
35241 				ValaCCodeExpression* _tmp43_;
35242 				gchar* _tmp44_;
35243 				gchar* _tmp45_;
35244 				ValaCCodeCastExpression* _tmp46_;
35245 				ValaCCodeExpression* _tmp47_;
35246 				_tmp43_ = cexpr;
35247 				_tmp44_ = vala_get_ccode_name ((ValaCodeNode*) target_type);
35248 				_tmp45_ = _tmp44_;
35249 				_tmp46_ = vala_ccode_cast_expression_new (_tmp43_, _tmp45_);
35250 				_tmp47_ = (ValaCCodeExpression*) _tmp46_;
35251 				_g_free0 (_tmp45_);
35252 				result = _tmp47_;
35253 				_vala_ccode_node_unref0 (cexpr);
35254 				return result;
35255 			} else {
35256 				result = cexpr;
35257 				return result;
35258 			}
35259 		} else {
35260 			result = cexpr;
35261 			return result;
35262 		}
35263 	}
35264 	_vala_ccode_node_unref0 (cexpr);
35265 }
35266 
35267 ValaCCodeExpression*
vala_ccode_base_module_get_implicit_cast_expression(ValaCCodeBaseModule * self,ValaCCodeExpression * source_cexpr,ValaDataType * expression_type,ValaDataType * target_type,ValaCodeNode * node)35268 vala_ccode_base_module_get_implicit_cast_expression (ValaCCodeBaseModule* self,
35269                                                      ValaCCodeExpression* source_cexpr,
35270                                                      ValaDataType* expression_type,
35271                                                      ValaDataType* target_type,
35272                                                      ValaCodeNode* node)
35273 {
35274 	g_return_val_if_fail (self != NULL, NULL);
35275 	return VALA_CCODE_BASE_MODULE_GET_CLASS (self)->get_implicit_cast_expression (self, source_cexpr, expression_type, target_type, node);
35276 }
35277 
35278 void
vala_ccode_base_module_store_property(ValaCCodeBaseModule * self,ValaProperty * prop,ValaExpression * instance,ValaTargetValue * value)35279 vala_ccode_base_module_store_property (ValaCCodeBaseModule* self,
35280                                        ValaProperty* prop,
35281                                        ValaExpression* instance,
35282                                        ValaTargetValue* value)
35283 {
35284 	ValaProperty* base_prop = NULL;
35285 	ValaProperty* _tmp0_;
35286 	ValaProperty* _tmp1_;
35287 	gboolean _tmp8_ = FALSE;
35288 	gchar* set_func = NULL;
35289 	gchar* _tmp83_;
35290 	ValaCCodeFunctionCall* ccall = NULL;
35291 	const gchar* _tmp98_;
35292 	ValaCCodeIdentifier* _tmp99_;
35293 	ValaCCodeIdentifier* _tmp100_;
35294 	ValaCCodeFunctionCall* _tmp101_;
35295 	ValaCCodeFunctionCall* _tmp102_;
35296 	ValaMemberBinding _tmp103_;
35297 	ValaMemberBinding _tmp104_;
35298 	ValaCCodeExpression* cexpr = NULL;
35299 	ValaCCodeExpression* _tmp125_;
35300 	ValaCCodeExpression* _tmp126_;
35301 	ValaDataType* _tmp127_;
35302 	ValaDataType* _tmp128_;
35303 	ValaArrayType* array_type = NULL;
35304 	ValaDataType* _tmp138_;
35305 	ValaDataType* _tmp139_;
35306 	ValaArrayType* _tmp140_;
35307 	ValaCCodeFunctionCall* _tmp141_;
35308 	ValaCCodeExpression* _tmp142_;
35309 	gboolean _tmp143_ = FALSE;
35310 	ValaArrayType* _tmp144_;
35311 	ValaCCodeFunction* _tmp180_;
35312 	ValaCCodeFunction* _tmp181_;
35313 	ValaCCodeFunctionCall* _tmp182_;
35314 	g_return_if_fail (self != NULL);
35315 	g_return_if_fail (prop != NULL);
35316 	g_return_if_fail (value != NULL);
35317 	base_prop = prop;
35318 	_tmp0_ = vala_property_get_base_property (prop);
35319 	_tmp1_ = _tmp0_;
35320 	if (_tmp1_ != NULL) {
35321 		ValaProperty* _tmp2_;
35322 		ValaProperty* _tmp3_;
35323 		_tmp2_ = vala_property_get_base_property (prop);
35324 		_tmp3_ = _tmp2_;
35325 		base_prop = _tmp3_;
35326 	} else {
35327 		ValaProperty* _tmp4_;
35328 		ValaProperty* _tmp5_;
35329 		_tmp4_ = vala_property_get_base_interface_property (prop);
35330 		_tmp5_ = _tmp4_;
35331 		if (_tmp5_ != NULL) {
35332 			ValaProperty* _tmp6_;
35333 			ValaProperty* _tmp7_;
35334 			_tmp6_ = vala_property_get_base_interface_property (prop);
35335 			_tmp7_ = _tmp6_;
35336 			base_prop = _tmp7_;
35337 		}
35338 	}
35339 	if (G_TYPE_CHECK_INSTANCE_TYPE (instance, VALA_TYPE_BASE_ACCESS)) {
35340 		gboolean _tmp9_ = FALSE;
35341 		ValaProperty* _tmp10_;
35342 		gboolean _tmp11_;
35343 		gboolean _tmp12_;
35344 		_tmp10_ = base_prop;
35345 		_tmp11_ = vala_property_get_is_abstract (_tmp10_);
35346 		_tmp12_ = _tmp11_;
35347 		if (_tmp12_) {
35348 			_tmp9_ = TRUE;
35349 		} else {
35350 			ValaProperty* _tmp13_;
35351 			gboolean _tmp14_;
35352 			gboolean _tmp15_;
35353 			_tmp13_ = base_prop;
35354 			_tmp14_ = vala_property_get_is_virtual (_tmp13_);
35355 			_tmp15_ = _tmp14_;
35356 			_tmp9_ = _tmp15_;
35357 		}
35358 		_tmp8_ = _tmp9_;
35359 	} else {
35360 		_tmp8_ = FALSE;
35361 	}
35362 	if (_tmp8_) {
35363 		ValaCCodeExpression* vcast = NULL;
35364 		ValaProperty* _tmp16_;
35365 		ValaSymbol* _tmp17_;
35366 		ValaSymbol* _tmp18_;
35367 		ValaCCodeExpression* _tmp45_;
35368 		vcast = NULL;
35369 		_tmp16_ = base_prop;
35370 		_tmp17_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp16_);
35371 		_tmp18_ = _tmp17_;
35372 		if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp18_, VALA_TYPE_CLASS)) {
35373 			ValaClass* base_class = NULL;
35374 			ValaProperty* _tmp19_;
35375 			ValaSymbol* _tmp20_;
35376 			ValaSymbol* _tmp21_;
35377 			ValaClass* _tmp22_;
35378 			gchar* _tmp23_;
35379 			gchar* _tmp24_;
35380 			ValaCCodeIdentifier* _tmp25_;
35381 			ValaCCodeIdentifier* _tmp26_;
35382 			ValaCCodeFunctionCall* _tmp27_;
35383 			ValaCCodeExpression* _tmp28_;
35384 			ValaClass* _tmp29_;
35385 			ValaClass* _tmp30_;
35386 			gchar* _tmp31_;
35387 			gchar* _tmp32_;
35388 			gchar* _tmp33_;
35389 			gchar* _tmp34_;
35390 			ValaCCodeIdentifier* _tmp35_;
35391 			ValaCCodeIdentifier* _tmp36_;
35392 			_tmp19_ = base_prop;
35393 			_tmp20_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp19_);
35394 			_tmp21_ = _tmp20_;
35395 			base_class = G_TYPE_CHECK_INSTANCE_CAST (_tmp21_, VALA_TYPE_CLASS, ValaClass);
35396 			_tmp22_ = base_class;
35397 			_tmp23_ = vala_get_ccode_class_type_function (_tmp22_);
35398 			_tmp24_ = _tmp23_;
35399 			_tmp25_ = vala_ccode_identifier_new (_tmp24_);
35400 			_tmp26_ = _tmp25_;
35401 			_tmp27_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp26_);
35402 			_vala_ccode_node_unref0 (vcast);
35403 			vcast = (ValaCCodeExpression*) _tmp27_;
35404 			_vala_ccode_node_unref0 (_tmp26_);
35405 			_g_free0 (_tmp24_);
35406 			_tmp28_ = vcast;
35407 			_tmp29_ = vala_ccode_base_module_get_current_class (self);
35408 			_tmp30_ = _tmp29_;
35409 			_tmp31_ = vala_get_ccode_lower_case_name ((ValaCodeNode*) _tmp30_, NULL);
35410 			_tmp32_ = _tmp31_;
35411 			_tmp33_ = g_strdup_printf ("%s_parent_class", _tmp32_);
35412 			_tmp34_ = _tmp33_;
35413 			_tmp35_ = vala_ccode_identifier_new (_tmp34_);
35414 			_tmp36_ = _tmp35_;
35415 			vala_ccode_function_call_add_argument (G_TYPE_CHECK_INSTANCE_CAST (_tmp28_, VALA_TYPE_CCODE_FUNCTION_CALL, ValaCCodeFunctionCall), (ValaCCodeExpression*) _tmp36_);
35416 			_vala_ccode_node_unref0 (_tmp36_);
35417 			_g_free0 (_tmp34_);
35418 			_g_free0 (_tmp32_);
35419 		} else {
35420 			ValaProperty* _tmp37_;
35421 			ValaSymbol* _tmp38_;
35422 			ValaSymbol* _tmp39_;
35423 			_tmp37_ = base_prop;
35424 			_tmp38_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp37_);
35425 			_tmp39_ = _tmp38_;
35426 			if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp39_, VALA_TYPE_INTERFACE)) {
35427 				ValaInterface* base_iface = NULL;
35428 				ValaProperty* _tmp40_;
35429 				ValaSymbol* _tmp41_;
35430 				ValaSymbol* _tmp42_;
35431 				ValaInterface* _tmp43_;
35432 				ValaCCodeExpression* _tmp44_;
35433 				_tmp40_ = base_prop;
35434 				_tmp41_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp40_);
35435 				_tmp42_ = _tmp41_;
35436 				base_iface = G_TYPE_CHECK_INSTANCE_CAST (_tmp42_, VALA_TYPE_INTERFACE, ValaInterface);
35437 				_tmp43_ = base_iface;
35438 				_tmp44_ = vala_ccode_base_module_get_this_interface_cexpression (self, _tmp43_);
35439 				_vala_ccode_node_unref0 (vcast);
35440 				vcast = _tmp44_;
35441 			}
35442 		}
35443 		_tmp45_ = vcast;
35444 		if (_tmp45_ != NULL) {
35445 			ValaCCodeFunctionCall* ccall = NULL;
35446 			ValaCCodeExpression* _tmp46_;
35447 			const gchar* _tmp47_;
35448 			const gchar* _tmp48_;
35449 			gchar* _tmp49_;
35450 			gchar* _tmp50_;
35451 			ValaCCodeMemberAccess* _tmp51_;
35452 			ValaCCodeMemberAccess* _tmp52_;
35453 			ValaCCodeFunctionCall* _tmp53_;
35454 			ValaCCodeFunctionCall* _tmp54_;
35455 			ValaCCodeFunctionCall* _tmp55_;
35456 			ValaCCodeExpression* _tmp56_;
35457 			ValaCCodeExpression* _tmp57_;
35458 			ValaCCodeExpression* cexpr = NULL;
35459 			ValaCCodeExpression* _tmp58_;
35460 			ValaCCodeExpression* _tmp59_;
35461 			ValaDataType* _tmp60_;
35462 			ValaDataType* _tmp61_;
35463 			ValaCCodeFunctionCall* _tmp71_;
35464 			ValaCCodeExpression* _tmp72_;
35465 			ValaCCodeFunction* _tmp73_;
35466 			ValaCCodeFunction* _tmp74_;
35467 			ValaCCodeFunctionCall* _tmp75_;
35468 			_tmp46_ = vcast;
35469 			_tmp47_ = vala_symbol_get_name ((ValaSymbol*) prop);
35470 			_tmp48_ = _tmp47_;
35471 			_tmp49_ = g_strdup_printf ("set_%s", _tmp48_);
35472 			_tmp50_ = _tmp49_;
35473 			_tmp51_ = vala_ccode_member_access_new_pointer (_tmp46_, _tmp50_);
35474 			_tmp52_ = _tmp51_;
35475 			_tmp53_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp52_);
35476 			_tmp54_ = _tmp53_;
35477 			_vala_ccode_node_unref0 (_tmp52_);
35478 			_g_free0 (_tmp50_);
35479 			ccall = _tmp54_;
35480 			_tmp55_ = ccall;
35481 			_tmp56_ = vala_ccode_base_module_get_ccodenode (self, instance);
35482 			_tmp57_ = G_TYPE_CHECK_INSTANCE_CAST (_tmp56_, VALA_TYPE_CCODE_EXPRESSION, ValaCCodeExpression);
35483 			vala_ccode_function_call_add_argument (_tmp55_, _tmp57_);
35484 			_vala_ccode_node_unref0 (_tmp57_);
35485 			_tmp58_ = vala_get_cvalue_ (value);
35486 			_tmp59_ = _vala_ccode_node_ref0 (_tmp58_);
35487 			cexpr = _tmp59_;
35488 			_tmp60_ = vala_property_get_property_type (prop);
35489 			_tmp61_ = _tmp60_;
35490 			if (vala_data_type_is_real_non_null_struct_type (_tmp61_)) {
35491 				gboolean _tmp62_ = FALSE;
35492 				ValaCCodeExpression* _tmp63_;
35493 				ValaCCodeExpression* _tmp69_;
35494 				ValaCCodeUnaryExpression* _tmp70_;
35495 				_tmp63_ = cexpr;
35496 				if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp63_, VALA_TYPE_CCODE_CONSTANT)) {
35497 					_tmp62_ = TRUE;
35498 				} else {
35499 					ValaCCodeExpression* _tmp64_;
35500 					_tmp64_ = cexpr;
35501 					_tmp62_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp64_, VALA_TYPE_CCODE_IDENTIFIER);
35502 				}
35503 				if (!_tmp62_) {
35504 					ValaTargetValue* temp_value = NULL;
35505 					ValaTargetValue* _tmp65_;
35506 					ValaTargetValue* _tmp66_;
35507 					ValaCCodeExpression* _tmp67_;
35508 					ValaCCodeExpression* _tmp68_;
35509 					_tmp65_ = vala_ccode_base_module_store_temp_value (self, value, (ValaCodeNode*) instance, NULL);
35510 					temp_value = _tmp65_;
35511 					_tmp66_ = temp_value;
35512 					_tmp67_ = vala_get_cvalue_ (_tmp66_);
35513 					_tmp68_ = _vala_ccode_node_ref0 (_tmp67_);
35514 					_vala_ccode_node_unref0 (cexpr);
35515 					cexpr = _tmp68_;
35516 					_vala_target_value_unref0 (temp_value);
35517 				}
35518 				_tmp69_ = cexpr;
35519 				_tmp70_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, _tmp69_);
35520 				_vala_ccode_node_unref0 (cexpr);
35521 				cexpr = (ValaCCodeExpression*) _tmp70_;
35522 			}
35523 			_tmp71_ = ccall;
35524 			_tmp72_ = cexpr;
35525 			vala_ccode_function_call_add_argument (_tmp71_, _tmp72_);
35526 			_tmp73_ = vala_ccode_base_module_get_ccode (self);
35527 			_tmp74_ = _tmp73_;
35528 			_tmp75_ = ccall;
35529 			vala_ccode_function_add_expression (_tmp74_, (ValaCCodeExpression*) _tmp75_);
35530 			_vala_ccode_node_unref0 (cexpr);
35531 			_vala_ccode_node_unref0 (ccall);
35532 		} else {
35533 			ValaSourceReference* _tmp76_;
35534 			ValaSourceReference* _tmp77_;
35535 			ValaProperty* _tmp78_;
35536 			gchar* _tmp79_;
35537 			gchar* _tmp80_;
35538 			gchar* _tmp81_;
35539 			gchar* _tmp82_;
35540 			_tmp76_ = vala_code_node_get_source_reference ((ValaCodeNode*) instance);
35541 			_tmp77_ = _tmp76_;
35542 			_tmp78_ = base_prop;
35543 			_tmp79_ = vala_symbol_get_full_name ((ValaSymbol*) _tmp78_);
35544 			_tmp80_ = _tmp79_;
35545 			_tmp81_ = g_strdup_printf ("internal: Invalid assignment to `%s'", _tmp80_);
35546 			_tmp82_ = _tmp81_;
35547 			vala_report_error (_tmp77_, _tmp82_);
35548 			_g_free0 (_tmp82_);
35549 			_g_free0 (_tmp80_);
35550 		}
35551 		_vala_ccode_node_unref0 (vcast);
35552 		return;
35553 	}
35554 	_tmp83_ = g_strdup ("g_object_set");
35555 	set_func = _tmp83_;
35556 	if (!vala_get_ccode_no_accessor_method (prop)) {
35557 		if (G_TYPE_CHECK_INSTANCE_TYPE (prop, VALA_TYPE_DYNAMIC_PROPERTY)) {
35558 			gchar* _tmp84_;
35559 			_tmp84_ = vala_ccode_base_module_get_dynamic_property_setter_cname (self, G_TYPE_CHECK_INSTANCE_CAST (prop, VALA_TYPE_DYNAMIC_PROPERTY, ValaDynamicProperty));
35560 			_g_free0 (set_func);
35561 			set_func = _tmp84_;
35562 		} else {
35563 			ValaProperty* _tmp85_;
35564 			ValaPropertyAccessor* _tmp86_;
35565 			ValaPropertyAccessor* _tmp87_;
35566 			ValaCCodeFile* _tmp88_;
35567 			ValaProperty* _tmp89_;
35568 			ValaPropertyAccessor* _tmp90_;
35569 			ValaPropertyAccessor* _tmp91_;
35570 			gchar* _tmp92_;
35571 			gboolean _tmp93_ = FALSE;
35572 			gboolean _tmp94_;
35573 			gboolean _tmp95_;
35574 			_tmp85_ = base_prop;
35575 			_tmp86_ = vala_property_get_set_accessor (_tmp85_);
35576 			_tmp87_ = _tmp86_;
35577 			_tmp88_ = self->cfile;
35578 			vala_ccode_base_module_generate_property_accessor_declaration (self, _tmp87_, _tmp88_);
35579 			_tmp89_ = base_prop;
35580 			_tmp90_ = vala_property_get_set_accessor (_tmp89_);
35581 			_tmp91_ = _tmp90_;
35582 			_tmp92_ = vala_get_ccode_name ((ValaCodeNode*) _tmp91_);
35583 			_g_free0 (set_func);
35584 			set_func = _tmp92_;
35585 			_tmp94_ = vala_symbol_get_external ((ValaSymbol*) prop);
35586 			_tmp95_ = _tmp94_;
35587 			if (!_tmp95_) {
35588 				gboolean _tmp96_;
35589 				gboolean _tmp97_;
35590 				_tmp96_ = vala_symbol_get_external_package ((ValaSymbol*) prop);
35591 				_tmp97_ = _tmp96_;
35592 				_tmp93_ = _tmp97_;
35593 			} else {
35594 				_tmp93_ = FALSE;
35595 			}
35596 			if (_tmp93_) {
35597 				if (vala_ccode_base_module_add_generated_external_symbol (self, (ValaSymbol*) prop)) {
35598 					vala_code_visitor_visit_property ((ValaCodeVisitor*) self, prop);
35599 				}
35600 			}
35601 		}
35602 	}
35603 	_tmp98_ = set_func;
35604 	_tmp99_ = vala_ccode_identifier_new (_tmp98_);
35605 	_tmp100_ = _tmp99_;
35606 	_tmp101_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp100_);
35607 	_tmp102_ = _tmp101_;
35608 	_vala_ccode_node_unref0 (_tmp100_);
35609 	ccall = _tmp102_;
35610 	_tmp103_ = vala_property_get_binding (prop);
35611 	_tmp104_ = _tmp103_;
35612 	if (_tmp104_ == VALA_MEMBER_BINDING_INSTANCE) {
35613 		ValaCCodeExpression* cinstance = NULL;
35614 		ValaCCodeExpression* _tmp105_;
35615 		gboolean _tmp106_ = FALSE;
35616 		ValaSymbol* _tmp107_;
35617 		ValaSymbol* _tmp108_;
35618 		ValaCCodeFunctionCall* _tmp120_;
35619 		ValaCCodeExpression* _tmp121_;
35620 		_tmp105_ = vala_ccode_base_module_get_ccodenode (self, instance);
35621 		cinstance = G_TYPE_CHECK_INSTANCE_CAST (_tmp105_, VALA_TYPE_CCODE_EXPRESSION, ValaCCodeExpression);
35622 		_tmp107_ = vala_symbol_get_parent_symbol ((ValaSymbol*) prop);
35623 		_tmp108_ = _tmp107_;
35624 		if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp108_, VALA_TYPE_STRUCT)) {
35625 			ValaSymbol* _tmp109_;
35626 			ValaSymbol* _tmp110_;
35627 			_tmp109_ = vala_symbol_get_parent_symbol ((ValaSymbol*) prop);
35628 			_tmp110_ = _tmp109_;
35629 			_tmp106_ = !vala_struct_is_simple_type (G_TYPE_CHECK_INSTANCE_CAST (_tmp110_, VALA_TYPE_STRUCT, ValaStruct));
35630 		} else {
35631 			_tmp106_ = FALSE;
35632 		}
35633 		if (_tmp106_) {
35634 			ValaTargetValue* instance_value = NULL;
35635 			ValaTargetValue* _tmp111_;
35636 			ValaTargetValue* _tmp112_;
35637 			ValaTargetValue* _tmp113_;
35638 			ValaTargetValue* _tmp114_;
35639 			ValaTargetValue* _tmp117_;
35640 			ValaCCodeExpression* _tmp118_;
35641 			ValaCCodeUnaryExpression* _tmp119_;
35642 			_tmp111_ = vala_expression_get_target_value (instance);
35643 			_tmp112_ = _tmp111_;
35644 			_tmp113_ = _vala_target_value_ref0 (_tmp112_);
35645 			instance_value = _tmp113_;
35646 			_tmp114_ = instance_value;
35647 			if (!vala_get_lvalue (_tmp114_)) {
35648 				ValaTargetValue* _tmp115_;
35649 				ValaTargetValue* _tmp116_;
35650 				_tmp115_ = instance_value;
35651 				_tmp116_ = vala_ccode_base_module_store_temp_value (self, _tmp115_, (ValaCodeNode*) instance, NULL);
35652 				_vala_target_value_unref0 (instance_value);
35653 				instance_value = _tmp116_;
35654 			}
35655 			_tmp117_ = instance_value;
35656 			_tmp118_ = vala_get_cvalue_ (_tmp117_);
35657 			_tmp119_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, _tmp118_);
35658 			_vala_ccode_node_unref0 (cinstance);
35659 			cinstance = (ValaCCodeExpression*) _tmp119_;
35660 			_vala_target_value_unref0 (instance_value);
35661 		}
35662 		_tmp120_ = ccall;
35663 		_tmp121_ = cinstance;
35664 		vala_ccode_function_call_add_argument (_tmp120_, _tmp121_);
35665 		_vala_ccode_node_unref0 (cinstance);
35666 	}
35667 	if (vala_get_ccode_no_accessor_method (prop)) {
35668 		ValaCCodeFunctionCall* _tmp122_;
35669 		ValaCCodeConstant* _tmp123_;
35670 		ValaCCodeConstant* _tmp124_;
35671 		_tmp122_ = ccall;
35672 		_tmp123_ = vala_ccode_base_module_get_property_canonical_cconstant (self, prop);
35673 		_tmp124_ = _tmp123_;
35674 		vala_ccode_function_call_add_argument (_tmp122_, (ValaCCodeExpression*) _tmp124_);
35675 		_vala_ccode_node_unref0 (_tmp124_);
35676 	}
35677 	_tmp125_ = vala_get_cvalue_ (value);
35678 	_tmp126_ = _vala_ccode_node_ref0 (_tmp125_);
35679 	cexpr = _tmp126_;
35680 	_tmp127_ = vala_property_get_property_type (prop);
35681 	_tmp128_ = _tmp127_;
35682 	if (vala_data_type_is_real_non_null_struct_type (_tmp128_)) {
35683 		gboolean _tmp129_ = FALSE;
35684 		ValaCCodeExpression* _tmp130_;
35685 		ValaCCodeExpression* _tmp136_;
35686 		ValaCCodeUnaryExpression* _tmp137_;
35687 		_tmp130_ = cexpr;
35688 		if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp130_, VALA_TYPE_CCODE_CONSTANT)) {
35689 			_tmp129_ = TRUE;
35690 		} else {
35691 			ValaCCodeExpression* _tmp131_;
35692 			_tmp131_ = cexpr;
35693 			_tmp129_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp131_, VALA_TYPE_CCODE_IDENTIFIER);
35694 		}
35695 		if (!_tmp129_) {
35696 			ValaTargetValue* temp_value = NULL;
35697 			ValaTargetValue* _tmp132_;
35698 			ValaTargetValue* _tmp133_;
35699 			ValaCCodeExpression* _tmp134_;
35700 			ValaCCodeExpression* _tmp135_;
35701 			_tmp132_ = vala_ccode_base_module_store_temp_value (self, value, (ValaCodeNode*) instance, NULL);
35702 			temp_value = _tmp132_;
35703 			_tmp133_ = temp_value;
35704 			_tmp134_ = vala_get_cvalue_ (_tmp133_);
35705 			_tmp135_ = _vala_ccode_node_ref0 (_tmp134_);
35706 			_vala_ccode_node_unref0 (cexpr);
35707 			cexpr = _tmp135_;
35708 			_vala_target_value_unref0 (temp_value);
35709 		}
35710 		_tmp136_ = cexpr;
35711 		_tmp137_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, _tmp136_);
35712 		_vala_ccode_node_unref0 (cexpr);
35713 		cexpr = (ValaCCodeExpression*) _tmp137_;
35714 	}
35715 	_tmp138_ = vala_property_get_property_type (prop);
35716 	_tmp139_ = _tmp138_;
35717 	_tmp140_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (_tmp139_, VALA_TYPE_ARRAY_TYPE) ? ((ValaArrayType*) _tmp139_) : NULL);
35718 	array_type = _tmp140_;
35719 	_tmp141_ = ccall;
35720 	_tmp142_ = cexpr;
35721 	vala_ccode_function_call_add_argument (_tmp141_, _tmp142_);
35722 	_tmp144_ = array_type;
35723 	if (_tmp144_ != NULL) {
35724 		_tmp143_ = vala_get_ccode_array_length ((ValaCodeNode*) prop);
35725 	} else {
35726 		_tmp143_ = FALSE;
35727 	}
35728 	if (_tmp143_) {
35729 		{
35730 			gint dim = 0;
35731 			dim = 1;
35732 			{
35733 				gboolean _tmp145_ = FALSE;
35734 				_tmp145_ = TRUE;
35735 				while (TRUE) {
35736 					ValaArrayType* _tmp147_;
35737 					gint _tmp148_;
35738 					gint _tmp149_;
35739 					ValaCCodeFunctionCall* _tmp150_;
35740 					ValaCCodeExpression* _tmp151_;
35741 					ValaCCodeExpression* _tmp152_;
35742 					if (!_tmp145_) {
35743 						gint _tmp146_;
35744 						_tmp146_ = dim;
35745 						dim = _tmp146_ + 1;
35746 					}
35747 					_tmp145_ = FALSE;
35748 					_tmp147_ = array_type;
35749 					_tmp148_ = vala_array_type_get_rank (_tmp147_);
35750 					_tmp149_ = _tmp148_;
35751 					if (!(dim <= _tmp149_)) {
35752 						break;
35753 					}
35754 					_tmp150_ = ccall;
35755 					_tmp151_ = vala_ccode_base_module_get_array_length_cvalue (self, value, dim);
35756 					_tmp152_ = _tmp151_;
35757 					vala_ccode_function_call_add_argument (_tmp150_, _tmp152_);
35758 					_vala_ccode_node_unref0 (_tmp152_);
35759 				}
35760 			}
35761 		}
35762 	} else {
35763 		ValaDataType* _tmp153_;
35764 		ValaDataType* _tmp154_;
35765 		_tmp153_ = vala_property_get_property_type (prop);
35766 		_tmp154_ = _tmp153_;
35767 		if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp154_, VALA_TYPE_DELEGATE_TYPE)) {
35768 			ValaDelegateType* delegate_type = NULL;
35769 			ValaDataType* _tmp155_;
35770 			ValaDataType* _tmp156_;
35771 			ValaDelegateType* _tmp157_;
35772 			gboolean _tmp158_ = FALSE;
35773 			_tmp155_ = vala_property_get_property_type (prop);
35774 			_tmp156_ = _tmp155_;
35775 			_tmp157_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp156_, VALA_TYPE_DELEGATE_TYPE, ValaDelegateType));
35776 			delegate_type = _tmp157_;
35777 			if (vala_get_ccode_delegate_target ((ValaCodeNode*) prop)) {
35778 				ValaDelegateType* _tmp159_;
35779 				ValaDelegate* _tmp160_;
35780 				ValaDelegate* _tmp161_;
35781 				gboolean _tmp162_;
35782 				gboolean _tmp163_;
35783 				_tmp159_ = delegate_type;
35784 				_tmp160_ = vala_delegate_type_get_delegate_symbol (_tmp159_);
35785 				_tmp161_ = _tmp160_;
35786 				_tmp162_ = vala_delegate_get_has_target (_tmp161_);
35787 				_tmp163_ = _tmp162_;
35788 				_tmp158_ = _tmp163_;
35789 			} else {
35790 				_tmp158_ = FALSE;
35791 			}
35792 			if (_tmp158_) {
35793 				ValaCCodeFunctionCall* _tmp164_;
35794 				ValaCCodeExpression* _tmp165_;
35795 				ValaCCodeExpression* _tmp166_;
35796 				ValaProperty* _tmp167_;
35797 				ValaPropertyAccessor* _tmp168_;
35798 				ValaPropertyAccessor* _tmp169_;
35799 				ValaDataType* _tmp170_;
35800 				ValaDataType* _tmp171_;
35801 				gboolean _tmp172_;
35802 				gboolean _tmp173_;
35803 				_tmp164_ = ccall;
35804 				_tmp165_ = vala_ccode_base_module_get_delegate_target_cvalue (self, value);
35805 				_tmp166_ = _tmp165_;
35806 				vala_ccode_function_call_add_argument (_tmp164_, _tmp166_);
35807 				_vala_ccode_node_unref0 (_tmp166_);
35808 				_tmp167_ = base_prop;
35809 				_tmp168_ = vala_property_get_set_accessor (_tmp167_);
35810 				_tmp169_ = _tmp168_;
35811 				_tmp170_ = vala_property_accessor_get_value_type (_tmp169_);
35812 				_tmp171_ = _tmp170_;
35813 				_tmp172_ = vala_data_type_get_value_owned (_tmp171_);
35814 				_tmp173_ = _tmp172_;
35815 				if (_tmp173_) {
35816 					ValaCCodeFunctionCall* _tmp174_;
35817 					ValaCCodeExpression* _tmp175_;
35818 					ValaCCodeExpression* _tmp176_;
35819 					_tmp174_ = ccall;
35820 					_tmp175_ = vala_ccode_base_module_get_delegate_target_destroy_notify_cvalue (self, value);
35821 					_tmp176_ = _tmp175_;
35822 					vala_ccode_function_call_add_argument (_tmp174_, _tmp176_);
35823 					_vala_ccode_node_unref0 (_tmp176_);
35824 				}
35825 			}
35826 			_vala_code_node_unref0 (delegate_type);
35827 		}
35828 	}
35829 	if (vala_get_ccode_no_accessor_method (prop)) {
35830 		ValaCCodeFunctionCall* _tmp177_;
35831 		ValaCCodeConstant* _tmp178_;
35832 		ValaCCodeConstant* _tmp179_;
35833 		_tmp177_ = ccall;
35834 		_tmp178_ = vala_ccode_constant_new ("NULL");
35835 		_tmp179_ = _tmp178_;
35836 		vala_ccode_function_call_add_argument (_tmp177_, (ValaCCodeExpression*) _tmp179_);
35837 		_vala_ccode_node_unref0 (_tmp179_);
35838 	}
35839 	_tmp180_ = vala_ccode_base_module_get_ccode (self);
35840 	_tmp181_ = _tmp180_;
35841 	_tmp182_ = ccall;
35842 	vala_ccode_function_add_expression (_tmp181_, (ValaCCodeExpression*) _tmp182_);
35843 	_vala_code_node_unref0 (array_type);
35844 	_vala_ccode_node_unref0 (cexpr);
35845 	_vala_ccode_node_unref0 (ccall);
35846 	_g_free0 (set_func);
35847 }
35848 
35849 gboolean
vala_ccode_base_module_add_wrapper(ValaCCodeBaseModule * self,const gchar * wrapper_name)35850 vala_ccode_base_module_add_wrapper (ValaCCodeBaseModule* self,
35851                                     const gchar* wrapper_name)
35852 {
35853 	ValaSet* _tmp0_;
35854 	gboolean result = FALSE;
35855 	g_return_val_if_fail (self != NULL, FALSE);
35856 	g_return_val_if_fail (wrapper_name != NULL, FALSE);
35857 	_tmp0_ = self->wrappers;
35858 	result = vala_collection_add ((ValaCollection*) _tmp0_, wrapper_name);
35859 	return result;
35860 }
35861 
35862 gboolean
vala_ccode_base_module_add_generated_external_symbol(ValaCCodeBaseModule * self,ValaSymbol * external_symbol)35863 vala_ccode_base_module_add_generated_external_symbol (ValaCCodeBaseModule* self,
35864                                                       ValaSymbol* external_symbol)
35865 {
35866 	ValaSet* _tmp0_;
35867 	gboolean result = FALSE;
35868 	g_return_val_if_fail (self != NULL, FALSE);
35869 	g_return_val_if_fail (external_symbol != NULL, FALSE);
35870 	_tmp0_ = self->priv->generated_external_symbols;
35871 	result = vala_collection_add ((ValaCollection*) _tmp0_, external_symbol);
35872 	return result;
35873 }
35874 
35875 ValaDataType*
vala_ccode_base_module_get_callable_creturn_type(ValaCallable * c)35876 vala_ccode_base_module_get_callable_creturn_type (ValaCallable* c)
35877 {
35878 	gboolean _tmp0_ = FALSE;
35879 	ValaDataType* creturn_type = NULL;
35880 	ValaDataType* _tmp1_;
35881 	ValaDataType* _tmp2_;
35882 	ValaDataType* _tmp3_;
35883 	ValaDataType* result = NULL;
35884 	g_return_val_if_fail (c != NULL, NULL);
35885 	if (G_TYPE_CHECK_INSTANCE_TYPE (c, VALA_TYPE_METHOD)) {
35886 		_tmp0_ = TRUE;
35887 	} else {
35888 		_tmp0_ = G_TYPE_CHECK_INSTANCE_TYPE (c, VALA_TYPE_DELEGATE);
35889 	}
35890 	_vala_assert (_tmp0_, "c is Method || c is Delegate");
35891 	_tmp1_ = vala_callable_get_return_type (c);
35892 	_tmp2_ = _tmp1_;
35893 	_tmp3_ = vala_data_type_copy (_tmp2_);
35894 	creturn_type = _tmp3_;
35895 	if (G_TYPE_CHECK_INSTANCE_TYPE (c, VALA_TYPE_CREATION_METHOD)) {
35896 		ValaClass* cl = NULL;
35897 		ValaSymbol* _tmp4_;
35898 		ValaSymbol* _tmp5_;
35899 		ValaStruct* st = NULL;
35900 		ValaSymbol* _tmp6_;
35901 		ValaSymbol* _tmp7_;
35902 		ValaClass* _tmp8_;
35903 		_tmp4_ = vala_symbol_get_parent_symbol ((ValaSymbol*) c);
35904 		_tmp5_ = _tmp4_;
35905 		cl = G_TYPE_CHECK_INSTANCE_TYPE (_tmp5_, VALA_TYPE_CLASS) ? ((ValaClass*) _tmp5_) : NULL;
35906 		_tmp6_ = vala_symbol_get_parent_symbol ((ValaSymbol*) c);
35907 		_tmp7_ = _tmp6_;
35908 		st = G_TYPE_CHECK_INSTANCE_TYPE (_tmp7_, VALA_TYPE_STRUCT) ? ((ValaStruct*) _tmp7_) : NULL;
35909 		_tmp8_ = cl;
35910 		if (_tmp8_ != NULL) {
35911 			ValaClass* _tmp9_;
35912 			ValaObjectType* _tmp10_;
35913 			_tmp9_ = cl;
35914 			_tmp10_ = vala_object_type_new ((ValaObjectTypeSymbol*) _tmp9_);
35915 			_vala_code_node_unref0 (creturn_type);
35916 			creturn_type = (ValaDataType*) _tmp10_;
35917 		} else {
35918 			gboolean _tmp11_ = FALSE;
35919 			ValaStruct* _tmp12_;
35920 			_tmp12_ = st;
35921 			if (_tmp12_ != NULL) {
35922 				ValaStruct* _tmp13_;
35923 				_tmp13_ = st;
35924 				_tmp11_ = vala_struct_is_simple_type (_tmp13_);
35925 			} else {
35926 				_tmp11_ = FALSE;
35927 			}
35928 			if (_tmp11_) {
35929 				ValaStruct* _tmp14_;
35930 				ValaStructValueType* _tmp15_;
35931 				_tmp14_ = st;
35932 				_tmp15_ = vala_struct_value_type_new (_tmp14_);
35933 				_vala_code_node_unref0 (creturn_type);
35934 				creturn_type = (ValaDataType*) _tmp15_;
35935 			}
35936 		}
35937 	} else {
35938 		ValaDataType* _tmp16_;
35939 		ValaDataType* _tmp17_;
35940 		_tmp16_ = vala_callable_get_return_type (c);
35941 		_tmp17_ = _tmp16_;
35942 		if (vala_data_type_is_real_non_null_struct_type (_tmp17_)) {
35943 			ValaVoidType* _tmp18_;
35944 			_tmp18_ = vala_void_type_new (NULL);
35945 			_vala_code_node_unref0 (creturn_type);
35946 			creturn_type = (ValaDataType*) _tmp18_;
35947 		}
35948 	}
35949 	result = creturn_type;
35950 	return result;
35951 }
35952 
35953 ValaCCodeExpression*
vala_ccode_base_module_default_value_for_type(ValaCCodeBaseModule * self,ValaDataType * type,gboolean initializer_expression,gboolean on_error)35954 vala_ccode_base_module_default_value_for_type (ValaCCodeBaseModule* self,
35955                                                ValaDataType* type,
35956                                                gboolean initializer_expression,
35957                                                gboolean on_error)
35958 {
35959 	ValaStruct* st = NULL;
35960 	ValaTypeSymbol* _tmp0_;
35961 	ValaTypeSymbol* _tmp1_;
35962 	ValaArrayType* array_type = NULL;
35963 	ValaArrayType* _tmp2_;
35964 	gboolean _tmp3_ = FALSE;
35965 	gboolean _tmp4_ = FALSE;
35966 	ValaTypeSymbol* _tmp5_;
35967 	ValaTypeSymbol* _tmp6_;
35968 	ValaCCodeExpression* result = NULL;
35969 	g_return_val_if_fail (self != NULL, NULL);
35970 	g_return_val_if_fail (type != NULL, NULL);
35971 	_tmp0_ = vala_data_type_get_type_symbol (type);
35972 	_tmp1_ = _tmp0_;
35973 	st = G_TYPE_CHECK_INSTANCE_TYPE (_tmp1_, VALA_TYPE_STRUCT) ? ((ValaStruct*) _tmp1_) : NULL;
35974 	_tmp2_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (type, VALA_TYPE_ARRAY_TYPE) ? ((ValaArrayType*) type) : NULL);
35975 	array_type = _tmp2_;
35976 	_tmp5_ = vala_data_type_get_type_symbol (type);
35977 	_tmp6_ = _tmp5_;
35978 	if (_tmp6_ != NULL) {
35979 		gboolean _tmp7_;
35980 		gboolean _tmp8_;
35981 		_tmp7_ = vala_data_type_get_nullable (type);
35982 		_tmp8_ = _tmp7_;
35983 		_tmp4_ = !_tmp8_;
35984 	} else {
35985 		_tmp4_ = FALSE;
35986 	}
35987 	if (_tmp4_) {
35988 		gchar* _tmp9_ = NULL;
35989 		if (on_error) {
35990 			ValaTypeSymbol* _tmp10_;
35991 			ValaTypeSymbol* _tmp11_;
35992 			gchar* _tmp12_;
35993 			_tmp10_ = vala_data_type_get_type_symbol (type);
35994 			_tmp11_ = _tmp10_;
35995 			_tmp12_ = vala_get_ccode_default_value_on_error (_tmp11_);
35996 			_g_free0 (_tmp9_);
35997 			_tmp9_ = _tmp12_;
35998 		} else {
35999 			ValaTypeSymbol* _tmp13_;
36000 			ValaTypeSymbol* _tmp14_;
36001 			gchar* _tmp15_;
36002 			_tmp13_ = vala_data_type_get_type_symbol (type);
36003 			_tmp14_ = _tmp13_;
36004 			_tmp15_ = vala_get_ccode_default_value (_tmp14_);
36005 			_g_free0 (_tmp9_);
36006 			_tmp9_ = _tmp15_;
36007 		}
36008 		_tmp3_ = g_strcmp0 (_tmp9_, "") != 0;
36009 		_g_free0 (_tmp9_);
36010 	} else {
36011 		_tmp3_ = FALSE;
36012 	}
36013 	if (_tmp3_) {
36014 		gchar* _tmp16_ = NULL;
36015 		ValaCCodeConstant* _tmp23_;
36016 		if (on_error) {
36017 			ValaTypeSymbol* _tmp17_;
36018 			ValaTypeSymbol* _tmp18_;
36019 			gchar* _tmp19_;
36020 			_tmp17_ = vala_data_type_get_type_symbol (type);
36021 			_tmp18_ = _tmp17_;
36022 			_tmp19_ = vala_get_ccode_default_value_on_error (_tmp18_);
36023 			_g_free0 (_tmp16_);
36024 			_tmp16_ = _tmp19_;
36025 		} else {
36026 			ValaTypeSymbol* _tmp20_;
36027 			ValaTypeSymbol* _tmp21_;
36028 			gchar* _tmp22_;
36029 			_tmp20_ = vala_data_type_get_type_symbol (type);
36030 			_tmp21_ = _tmp20_;
36031 			_tmp22_ = vala_get_ccode_default_value (_tmp21_);
36032 			_g_free0 (_tmp16_);
36033 			_tmp16_ = _tmp22_;
36034 		}
36035 		_tmp23_ = vala_ccode_constant_new (_tmp16_);
36036 		result = (ValaCCodeExpression*) _tmp23_;
36037 		_g_free0 (_tmp16_);
36038 		_vala_code_node_unref0 (array_type);
36039 		return result;
36040 	} else {
36041 		gboolean _tmp24_ = FALSE;
36042 		gboolean _tmp25_ = FALSE;
36043 		if (initializer_expression) {
36044 			gboolean _tmp26_;
36045 			gboolean _tmp27_;
36046 			_tmp26_ = vala_data_type_get_nullable (type);
36047 			_tmp27_ = _tmp26_;
36048 			_tmp25_ = !_tmp27_;
36049 		} else {
36050 			_tmp25_ = FALSE;
36051 		}
36052 		if (_tmp25_) {
36053 			gboolean _tmp28_ = FALSE;
36054 			ValaStruct* _tmp29_;
36055 			_tmp29_ = st;
36056 			if (_tmp29_ != NULL) {
36057 				_tmp28_ = TRUE;
36058 			} else {
36059 				gboolean _tmp30_ = FALSE;
36060 				ValaArrayType* _tmp31_;
36061 				_tmp31_ = array_type;
36062 				if (_tmp31_ != NULL) {
36063 					ValaArrayType* _tmp32_;
36064 					gboolean _tmp33_;
36065 					gboolean _tmp34_;
36066 					_tmp32_ = array_type;
36067 					_tmp33_ = vala_array_type_get_fixed_length (_tmp32_);
36068 					_tmp34_ = _tmp33_;
36069 					_tmp30_ = _tmp34_;
36070 				} else {
36071 					_tmp30_ = FALSE;
36072 				}
36073 				_tmp28_ = _tmp30_;
36074 			}
36075 			_tmp24_ = _tmp28_;
36076 		} else {
36077 			_tmp24_ = FALSE;
36078 		}
36079 		if (_tmp24_) {
36080 			ValaCCodeInitializerList* clist = NULL;
36081 			ValaCCodeInitializerList* _tmp35_;
36082 			ValaCCodeInitializerList* _tmp36_;
36083 			ValaCCodeConstant* _tmp37_;
36084 			ValaCCodeConstant* _tmp38_;
36085 			_tmp35_ = vala_ccode_initializer_list_new ();
36086 			clist = _tmp35_;
36087 			_tmp36_ = clist;
36088 			_tmp37_ = vala_ccode_constant_new ("0");
36089 			_tmp38_ = _tmp37_;
36090 			vala_ccode_initializer_list_append (_tmp36_, (ValaCCodeExpression*) _tmp38_);
36091 			_vala_ccode_node_unref0 (_tmp38_);
36092 			result = (ValaCCodeExpression*) clist;
36093 			_vala_code_node_unref0 (array_type);
36094 			return result;
36095 		} else {
36096 			gboolean _tmp39_ = FALSE;
36097 			gboolean _tmp40_ = FALSE;
36098 			gboolean _tmp41_ = FALSE;
36099 			gboolean _tmp42_ = FALSE;
36100 			gboolean _tmp43_ = FALSE;
36101 			ValaTypeSymbol* _tmp44_;
36102 			ValaTypeSymbol* _tmp45_;
36103 			_tmp44_ = vala_data_type_get_type_symbol (type);
36104 			_tmp45_ = _tmp44_;
36105 			if (_tmp45_ != NULL) {
36106 				ValaTypeSymbol* _tmp46_;
36107 				ValaTypeSymbol* _tmp47_;
36108 				_tmp46_ = vala_data_type_get_type_symbol (type);
36109 				_tmp47_ = _tmp46_;
36110 				_tmp43_ = vala_typesymbol_is_reference_type (_tmp47_);
36111 			} else {
36112 				_tmp43_ = FALSE;
36113 			}
36114 			if (_tmp43_) {
36115 				_tmp42_ = TRUE;
36116 			} else {
36117 				gboolean _tmp48_;
36118 				gboolean _tmp49_;
36119 				_tmp48_ = vala_data_type_get_nullable (type);
36120 				_tmp49_ = _tmp48_;
36121 				_tmp42_ = _tmp49_;
36122 			}
36123 			if (_tmp42_) {
36124 				_tmp41_ = TRUE;
36125 			} else {
36126 				_tmp41_ = G_TYPE_CHECK_INSTANCE_TYPE (type, VALA_TYPE_POINTER_TYPE);
36127 			}
36128 			if (_tmp41_) {
36129 				_tmp40_ = TRUE;
36130 			} else {
36131 				_tmp40_ = G_TYPE_CHECK_INSTANCE_TYPE (type, VALA_TYPE_DELEGATE_TYPE);
36132 			}
36133 			if (_tmp40_) {
36134 				_tmp39_ = TRUE;
36135 			} else {
36136 				gboolean _tmp50_ = FALSE;
36137 				ValaArrayType* _tmp51_;
36138 				_tmp51_ = array_type;
36139 				if (_tmp51_ != NULL) {
36140 					ValaArrayType* _tmp52_;
36141 					gboolean _tmp53_;
36142 					gboolean _tmp54_;
36143 					_tmp52_ = array_type;
36144 					_tmp53_ = vala_array_type_get_fixed_length (_tmp52_);
36145 					_tmp54_ = _tmp53_;
36146 					_tmp50_ = !_tmp54_;
36147 				} else {
36148 					_tmp50_ = FALSE;
36149 				}
36150 				_tmp39_ = _tmp50_;
36151 			}
36152 			if (_tmp39_) {
36153 				ValaCCodeConstant* _tmp55_;
36154 				_tmp55_ = vala_ccode_constant_new ("NULL");
36155 				result = (ValaCCodeExpression*) _tmp55_;
36156 				_vala_code_node_unref0 (array_type);
36157 				return result;
36158 			} else {
36159 				if (G_TYPE_CHECK_INSTANCE_TYPE (type, VALA_TYPE_GENERIC_TYPE)) {
36160 					ValaCCodeConstant* _tmp56_;
36161 					_tmp56_ = vala_ccode_constant_new ("NULL");
36162 					result = (ValaCCodeExpression*) _tmp56_;
36163 					_vala_code_node_unref0 (array_type);
36164 					return result;
36165 				} else {
36166 					if (G_TYPE_CHECK_INSTANCE_TYPE (type, VALA_TYPE_ERROR_TYPE)) {
36167 						ValaCCodeConstant* _tmp57_;
36168 						_tmp57_ = vala_ccode_constant_new ("NULL");
36169 						result = (ValaCCodeExpression*) _tmp57_;
36170 						_vala_code_node_unref0 (array_type);
36171 						return result;
36172 					} else {
36173 						if (VALA_IS_CTYPE (type)) {
36174 							const gchar* _tmp58_;
36175 							const gchar* _tmp59_;
36176 							ValaCCodeConstant* _tmp60_;
36177 							_tmp58_ = vala_ctype_get_cdefault_value (G_TYPE_CHECK_INSTANCE_CAST (type, VALA_TYPE_CTYPE, ValaCType));
36178 							_tmp59_ = _tmp58_;
36179 							_tmp60_ = vala_ccode_constant_new (_tmp59_);
36180 							result = (ValaCCodeExpression*) _tmp60_;
36181 							_vala_code_node_unref0 (array_type);
36182 							return result;
36183 						}
36184 					}
36185 				}
36186 			}
36187 		}
36188 	}
36189 	result = NULL;
36190 	_vala_code_node_unref0 (array_type);
36191 	return result;
36192 }
36193 
36194 static void
vala_ccode_base_module_create_property_type_check_statement(ValaCCodeBaseModule * self,ValaProperty * prop,gboolean check_return_type,ValaTypeSymbol * t,gboolean non_null,const gchar * var_name)36195 vala_ccode_base_module_create_property_type_check_statement (ValaCCodeBaseModule* self,
36196                                                              ValaProperty* prop,
36197                                                              gboolean check_return_type,
36198                                                              ValaTypeSymbol* t,
36199                                                              gboolean non_null,
36200                                                              const gchar* var_name)
36201 {
36202 	g_return_if_fail (self != NULL);
36203 	g_return_if_fail (prop != NULL);
36204 	g_return_if_fail (t != NULL);
36205 	g_return_if_fail (var_name != NULL);
36206 	if (check_return_type) {
36207 		ValaDataType* _tmp0_;
36208 		ValaDataType* _tmp1_;
36209 		_tmp0_ = vala_property_get_property_type (prop);
36210 		_tmp1_ = _tmp0_;
36211 		vala_ccode_base_module_create_type_check_statement (self, (ValaCodeNode*) prop, _tmp1_, t, non_null, var_name);
36212 	} else {
36213 		ValaVoidType* _tmp2_;
36214 		ValaVoidType* _tmp3_;
36215 		_tmp2_ = vala_void_type_new (NULL);
36216 		_tmp3_ = _tmp2_;
36217 		vala_ccode_base_module_create_type_check_statement (self, (ValaCodeNode*) prop, (ValaDataType*) _tmp3_, t, non_null, var_name);
36218 		_vala_code_node_unref0 (_tmp3_);
36219 	}
36220 }
36221 
36222 static void
vala_ccode_base_module_real_create_type_check_statement(ValaCCodeBaseModule * self,ValaCodeNode * method_node,ValaDataType * ret_type,ValaTypeSymbol * t,gboolean non_null,const gchar * var_name)36223 vala_ccode_base_module_real_create_type_check_statement (ValaCCodeBaseModule* self,
36224                                                          ValaCodeNode* method_node,
36225                                                          ValaDataType* ret_type,
36226                                                          ValaTypeSymbol* t,
36227                                                          gboolean non_null,
36228                                                          const gchar* var_name)
36229 {
36230 	g_return_if_fail (method_node != NULL);
36231 	g_return_if_fail (ret_type != NULL);
36232 	g_return_if_fail (t != NULL);
36233 	g_return_if_fail (var_name != NULL);
36234 }
36235 
36236 void
vala_ccode_base_module_create_type_check_statement(ValaCCodeBaseModule * self,ValaCodeNode * method_node,ValaDataType * ret_type,ValaTypeSymbol * t,gboolean non_null,const gchar * var_name)36237 vala_ccode_base_module_create_type_check_statement (ValaCCodeBaseModule* self,
36238                                                     ValaCodeNode* method_node,
36239                                                     ValaDataType* ret_type,
36240                                                     ValaTypeSymbol* t,
36241                                                     gboolean non_null,
36242                                                     const gchar* var_name)
36243 {
36244 	g_return_if_fail (self != NULL);
36245 	VALA_CCODE_BASE_MODULE_GET_CLASS (self)->create_type_check_statement (self, method_node, ret_type, t, non_null, var_name);
36246 }
36247 
36248 gint
vala_ccode_base_module_get_param_pos(ValaCCodeBaseModule * self,gdouble param_pos,gboolean ellipsis)36249 vala_ccode_base_module_get_param_pos (ValaCCodeBaseModule* self,
36250                                       gdouble param_pos,
36251                                       gboolean ellipsis)
36252 {
36253 	gint result = 0;
36254 	g_return_val_if_fail (self != NULL, 0);
36255 	if (!ellipsis) {
36256 		if (param_pos >= ((gdouble) 0)) {
36257 			result = (gint) (param_pos * 1000);
36258 			return result;
36259 		} else {
36260 			result = (gint) ((100 + param_pos) * 1000);
36261 			return result;
36262 		}
36263 	} else {
36264 		if (param_pos >= ((gdouble) 0)) {
36265 			result = (gint) ((100 + param_pos) * 1000);
36266 			return result;
36267 		} else {
36268 			result = (gint) ((200 + param_pos) * 1000);
36269 			return result;
36270 		}
36271 	}
36272 }
36273 
36274 ValaCCodeExpression*
vala_ccode_base_module_get_ccodenode(ValaCCodeBaseModule * self,ValaExpression * node)36275 vala_ccode_base_module_get_ccodenode (ValaCCodeBaseModule* self,
36276                                       ValaExpression* node)
36277 {
36278 	ValaCCodeExpression* _tmp0_;
36279 	ValaCCodeExpression* _tmp1_;
36280 	ValaCCodeExpression* _tmp2_;
36281 	ValaCCodeExpression* result = NULL;
36282 	g_return_val_if_fail (self != NULL, NULL);
36283 	g_return_val_if_fail (node != NULL, NULL);
36284 	_tmp0_ = vala_get_cvalue (node);
36285 	if (_tmp0_ == NULL) {
36286 		vala_code_node_emit ((ValaCodeNode*) node, (ValaCodeGenerator*) self);
36287 	}
36288 	_tmp1_ = vala_get_cvalue (node);
36289 	_tmp2_ = _vala_ccode_node_ref0 (_tmp1_);
36290 	result = _tmp2_;
36291 	return result;
36292 }
36293 
36294 gboolean
vala_ccode_base_module_is_lvalue_access_allowed(ValaCCodeBaseModule * self,ValaDataType * type)36295 vala_ccode_base_module_is_lvalue_access_allowed (ValaCCodeBaseModule* self,
36296                                                  ValaDataType* type)
36297 {
36298 	ValaArrayType* array_type = NULL;
36299 	ValaArrayType* _tmp0_;
36300 	gboolean _tmp1_ = FALSE;
36301 	ValaArrayType* _tmp2_;
36302 	ValaTypeSymbol* _tmp6_;
36303 	ValaTypeSymbol* _tmp7_;
36304 	gboolean result = FALSE;
36305 	g_return_val_if_fail (self != NULL, FALSE);
36306 	g_return_val_if_fail (type != NULL, FALSE);
36307 	_tmp0_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (type, VALA_TYPE_ARRAY_TYPE) ? ((ValaArrayType*) type) : NULL);
36308 	array_type = _tmp0_;
36309 	_tmp2_ = array_type;
36310 	if (_tmp2_ != NULL) {
36311 		ValaArrayType* _tmp3_;
36312 		gboolean _tmp4_;
36313 		gboolean _tmp5_;
36314 		_tmp3_ = array_type;
36315 		_tmp4_ = vala_array_type_get_inline_allocated (_tmp3_);
36316 		_tmp5_ = _tmp4_;
36317 		_tmp1_ = _tmp5_;
36318 	} else {
36319 		_tmp1_ = FALSE;
36320 	}
36321 	if (_tmp1_) {
36322 		result = FALSE;
36323 		_vala_code_node_unref0 (array_type);
36324 		return result;
36325 	}
36326 	_tmp6_ = vala_data_type_get_type_symbol (type);
36327 	_tmp7_ = _tmp6_;
36328 	if (_tmp7_ != NULL) {
36329 		ValaTypeSymbol* _tmp8_;
36330 		ValaTypeSymbol* _tmp9_;
36331 		_tmp8_ = vala_data_type_get_type_symbol (type);
36332 		_tmp9_ = _tmp8_;
36333 		result = vala_code_node_get_attribute_bool ((ValaCodeNode*) _tmp9_, "CCode", "lvalue_access", TRUE);
36334 		_vala_code_node_unref0 (array_type);
36335 		return result;
36336 	}
36337 	result = TRUE;
36338 	_vala_code_node_unref0 (array_type);
36339 	return result;
36340 }
36341 
36342 gboolean
vala_ccode_base_module_requires_memset_init(ValaCCodeBaseModule * self,ValaVariable * variable,ValaCCodeExpression ** size)36343 vala_ccode_base_module_requires_memset_init (ValaCCodeBaseModule* self,
36344                                              ValaVariable* variable,
36345                                              ValaCCodeExpression* * size)
36346 {
36347 	ValaCCodeExpression* _vala_size = NULL;
36348 	ValaArrayType* array_type = NULL;
36349 	ValaDataType* _tmp0_;
36350 	ValaDataType* _tmp1_;
36351 	gboolean _tmp2_ = FALSE;
36352 	ValaArrayType* _tmp3_;
36353 	gboolean result = FALSE;
36354 	g_return_val_if_fail (self != NULL, FALSE);
36355 	g_return_val_if_fail (variable != NULL, FALSE);
36356 	_tmp0_ = vala_variable_get_variable_type (variable);
36357 	_tmp1_ = _tmp0_;
36358 	array_type = G_TYPE_CHECK_INSTANCE_TYPE (_tmp1_, VALA_TYPE_ARRAY_TYPE) ? ((ValaArrayType*) _tmp1_) : NULL;
36359 	_tmp3_ = array_type;
36360 	if (_tmp3_ != NULL) {
36361 		ValaArrayType* _tmp4_;
36362 		gboolean _tmp5_;
36363 		gboolean _tmp6_;
36364 		_tmp4_ = array_type;
36365 		_tmp5_ = vala_array_type_get_fixed_length (_tmp4_);
36366 		_tmp6_ = _tmp5_;
36367 		_tmp2_ = _tmp6_;
36368 	} else {
36369 		_tmp2_ = FALSE;
36370 	}
36371 	if (_tmp2_) {
36372 		ValaCCodeFunctionCall* sizeof_call = NULL;
36373 		ValaCCodeIdentifier* _tmp7_;
36374 		ValaCCodeIdentifier* _tmp8_;
36375 		ValaCCodeFunctionCall* _tmp9_;
36376 		ValaCCodeFunctionCall* _tmp10_;
36377 		ValaCCodeFunctionCall* _tmp11_;
36378 		ValaArrayType* _tmp12_;
36379 		ValaDataType* _tmp13_;
36380 		ValaDataType* _tmp14_;
36381 		gchar* _tmp15_;
36382 		gchar* _tmp16_;
36383 		ValaCCodeIdentifier* _tmp17_;
36384 		ValaCCodeIdentifier* _tmp18_;
36385 		ValaArrayType* _tmp19_;
36386 		ValaExpression* _tmp20_;
36387 		ValaExpression* _tmp21_;
36388 		ValaCCodeExpression* _tmp22_;
36389 		ValaCCodeExpression* _tmp23_;
36390 		ValaCCodeFunctionCall* _tmp24_;
36391 		ValaCCodeBinaryExpression* _tmp25_;
36392 		ValaArrayType* _tmp26_;
36393 		ValaExpression* _tmp27_;
36394 		ValaExpression* _tmp28_;
36395 		_tmp7_ = vala_ccode_identifier_new ("sizeof");
36396 		_tmp8_ = _tmp7_;
36397 		_tmp9_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp8_);
36398 		_tmp10_ = _tmp9_;
36399 		_vala_ccode_node_unref0 (_tmp8_);
36400 		sizeof_call = _tmp10_;
36401 		_tmp11_ = sizeof_call;
36402 		_tmp12_ = array_type;
36403 		_tmp13_ = vala_array_type_get_element_type (_tmp12_);
36404 		_tmp14_ = _tmp13_;
36405 		_tmp15_ = vala_get_ccode_name ((ValaCodeNode*) _tmp14_);
36406 		_tmp16_ = _tmp15_;
36407 		_tmp17_ = vala_ccode_identifier_new (_tmp16_);
36408 		_tmp18_ = _tmp17_;
36409 		vala_ccode_function_call_add_argument (_tmp11_, (ValaCCodeExpression*) _tmp18_);
36410 		_vala_ccode_node_unref0 (_tmp18_);
36411 		_g_free0 (_tmp16_);
36412 		_tmp19_ = array_type;
36413 		_tmp20_ = vala_array_type_get_length (_tmp19_);
36414 		_tmp21_ = _tmp20_;
36415 		_tmp22_ = vala_ccode_base_module_get_ccodenode (self, _tmp21_);
36416 		_tmp23_ = _tmp22_;
36417 		_tmp24_ = sizeof_call;
36418 		_tmp25_ = vala_ccode_binary_expression_new (VALA_CCODE_BINARY_OPERATOR_MUL, _tmp23_, (ValaCCodeExpression*) _tmp24_);
36419 		_vala_ccode_node_unref0 (_vala_size);
36420 		_vala_size = (ValaCCodeExpression*) _tmp25_;
36421 		_vala_ccode_node_unref0 (_tmp23_);
36422 		_tmp26_ = array_type;
36423 		_tmp27_ = vala_array_type_get_length (_tmp26_);
36424 		_tmp28_ = _tmp27_;
36425 		result = !vala_ccode_base_module_is_constant_ccode ((ValaCodeNode*) _tmp28_);
36426 		_vala_ccode_node_unref0 (sizeof_call);
36427 		if (size) {
36428 			*size = _vala_size;
36429 		} else {
36430 			_vala_ccode_node_unref0 (_vala_size);
36431 		}
36432 		return result;
36433 	}
36434 	_vala_ccode_node_unref0 (_vala_size);
36435 	_vala_size = NULL;
36436 	result = FALSE;
36437 	if (size) {
36438 		*size = _vala_size;
36439 	} else {
36440 		_vala_ccode_node_unref0 (_vala_size);
36441 	}
36442 	return result;
36443 }
36444 
36445 ValaCCodeDeclaratorSuffix*
vala_ccode_base_module_get_ccode_declarator_suffix(ValaCCodeBaseModule * self,ValaDataType * type)36446 vala_ccode_base_module_get_ccode_declarator_suffix (ValaCCodeBaseModule* self,
36447                                                     ValaDataType* type)
36448 {
36449 	ValaArrayType* array_type = NULL;
36450 	ValaArrayType* _tmp0_;
36451 	ValaArrayType* _tmp1_;
36452 	ValaCCodeDeclaratorSuffix* result = NULL;
36453 	g_return_val_if_fail (self != NULL, NULL);
36454 	g_return_val_if_fail (type != NULL, NULL);
36455 	_tmp0_ = _vala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (type, VALA_TYPE_ARRAY_TYPE) ? ((ValaArrayType*) type) : NULL);
36456 	array_type = _tmp0_;
36457 	_tmp1_ = array_type;
36458 	if (_tmp1_ != NULL) {
36459 		ValaArrayType* _tmp2_;
36460 		gboolean _tmp3_;
36461 		gboolean _tmp4_;
36462 		_tmp2_ = array_type;
36463 		_tmp3_ = vala_array_type_get_fixed_length (_tmp2_);
36464 		_tmp4_ = _tmp3_;
36465 		if (_tmp4_) {
36466 			ValaArrayType* _tmp5_;
36467 			ValaExpression* _tmp6_;
36468 			ValaExpression* _tmp7_;
36469 			ValaCCodeExpression* _tmp8_;
36470 			ValaCCodeExpression* _tmp9_;
36471 			ValaCCodeDeclaratorSuffix* _tmp10_;
36472 			ValaCCodeDeclaratorSuffix* _tmp11_;
36473 			_tmp5_ = array_type;
36474 			_tmp6_ = vala_array_type_get_length (_tmp5_);
36475 			_tmp7_ = _tmp6_;
36476 			_tmp8_ = vala_ccode_base_module_get_ccodenode (self, _tmp7_);
36477 			_tmp9_ = _tmp8_;
36478 			_tmp10_ = vala_ccode_declarator_suffix_new_with_array (_tmp9_);
36479 			_tmp11_ = _tmp10_;
36480 			_vala_ccode_node_unref0 (_tmp9_);
36481 			result = _tmp11_;
36482 			_vala_code_node_unref0 (array_type);
36483 			return result;
36484 		} else {
36485 			ValaArrayType* _tmp12_;
36486 			gboolean _tmp13_;
36487 			gboolean _tmp14_;
36488 			_tmp12_ = array_type;
36489 			_tmp13_ = vala_array_type_get_inline_allocated (_tmp12_);
36490 			_tmp14_ = _tmp13_;
36491 			if (_tmp14_) {
36492 				ValaCCodeDeclaratorSuffix* _tmp15_;
36493 				_tmp15_ = vala_ccode_declarator_suffix_new_with_array (NULL);
36494 				result = _tmp15_;
36495 				_vala_code_node_unref0 (array_type);
36496 				return result;
36497 			}
36498 		}
36499 	}
36500 	result = NULL;
36501 	_vala_code_node_unref0 (array_type);
36502 	return result;
36503 }
36504 
36505 ValaCCodeConstant*
vala_ccode_base_module_get_signal_canonical_constant(ValaCCodeBaseModule * self,ValaSignal * sig,const gchar * detail)36506 vala_ccode_base_module_get_signal_canonical_constant (ValaCCodeBaseModule* self,
36507                                                       ValaSignal* sig,
36508                                                       const gchar* detail)
36509 {
36510 	gchar* _tmp0_ = NULL;
36511 	gchar* _tmp3_;
36512 	gchar* _tmp4_;
36513 	gchar* _tmp5_;
36514 	gchar* _tmp6_;
36515 	ValaCCodeConstant* _tmp7_;
36516 	ValaCCodeConstant* _tmp8_;
36517 	ValaCCodeConstant* result = NULL;
36518 	g_return_val_if_fail (self != NULL, NULL);
36519 	g_return_val_if_fail (sig != NULL, NULL);
36520 	if (detail != NULL) {
36521 		gchar* _tmp1_;
36522 		_tmp1_ = g_strdup_printf ("::%s", detail);
36523 		_g_free0 (_tmp0_);
36524 		_tmp0_ = _tmp1_;
36525 	} else {
36526 		gchar* _tmp2_;
36527 		_tmp2_ = g_strdup ("");
36528 		_g_free0 (_tmp0_);
36529 		_tmp0_ = _tmp2_;
36530 	}
36531 	_tmp3_ = vala_get_ccode_name ((ValaCodeNode*) sig);
36532 	_tmp4_ = _tmp3_;
36533 	_tmp5_ = g_strdup_printf ("\"%s%s\"", _tmp4_, _tmp0_);
36534 	_tmp6_ = _tmp5_;
36535 	_tmp7_ = vala_ccode_constant_new (_tmp6_);
36536 	_tmp8_ = _tmp7_;
36537 	_g_free0 (_tmp6_);
36538 	_g_free0 (_tmp4_);
36539 	result = _tmp8_;
36540 	_g_free0 (_tmp0_);
36541 	return result;
36542 }
36543 
36544 ValaCCodeConstant*
vala_ccode_base_module_get_property_canonical_cconstant(ValaCCodeBaseModule * self,ValaProperty * prop)36545 vala_ccode_base_module_get_property_canonical_cconstant (ValaCCodeBaseModule* self,
36546                                                          ValaProperty* prop)
36547 {
36548 	gchar* _tmp0_;
36549 	gchar* _tmp1_;
36550 	gchar* _tmp2_;
36551 	gchar* _tmp3_;
36552 	ValaCCodeConstant* _tmp4_;
36553 	ValaCCodeConstant* _tmp5_;
36554 	ValaCCodeConstant* result = NULL;
36555 	g_return_val_if_fail (self != NULL, NULL);
36556 	g_return_val_if_fail (prop != NULL, NULL);
36557 	_tmp0_ = vala_get_ccode_name ((ValaCodeNode*) prop);
36558 	_tmp1_ = _tmp0_;
36559 	_tmp2_ = g_strdup_printf ("\"%s\"", _tmp1_);
36560 	_tmp3_ = _tmp2_;
36561 	_tmp4_ = vala_ccode_constant_new (_tmp3_);
36562 	_tmp5_ = _tmp4_;
36563 	_g_free0 (_tmp3_);
36564 	_g_free0 (_tmp1_);
36565 	result = _tmp5_;
36566 	return result;
36567 }
36568 
36569 static void
vala_ccode_base_module_real_visit_class(ValaCodeVisitor * base,ValaClass * cl)36570 vala_ccode_base_module_real_visit_class (ValaCodeVisitor* base,
36571                                          ValaClass* cl)
36572 {
36573 	ValaCCodeBaseModule * self;
36574 	self = (ValaCCodeBaseModule*) base;
36575 	g_return_if_fail (cl != NULL);
36576 }
36577 
36578 void
vala_ccode_base_module_create_postcondition_statement(ValaCCodeBaseModule * self,ValaExpression * postcondition)36579 vala_ccode_base_module_create_postcondition_statement (ValaCCodeBaseModule* self,
36580                                                        ValaExpression* postcondition)
36581 {
36582 	ValaCCodeFunctionCall* cassert = NULL;
36583 	ValaCCodeIdentifier* _tmp0_;
36584 	ValaCCodeIdentifier* _tmp1_;
36585 	ValaCCodeFunctionCall* _tmp2_;
36586 	ValaCCodeFunctionCall* _tmp3_;
36587 	gchar* message = NULL;
36588 	ValaSourceReference* _tmp4_;
36589 	ValaSourceReference* _tmp5_;
36590 	ValaSourceLocation _tmp6_ = {0};
36591 	ValaSourceLocation _tmp7_;
36592 	gchar* _tmp8_;
36593 	ValaSourceReference* _tmp9_;
36594 	ValaSourceReference* _tmp10_;
36595 	ValaSourceLocation _tmp11_ = {0};
36596 	ValaSourceLocation _tmp12_;
36597 	gchar* _tmp13_;
36598 	ValaSourceReference* _tmp14_;
36599 	ValaSourceReference* _tmp15_;
36600 	ValaSourceLocation _tmp16_ = {0};
36601 	ValaSourceLocation _tmp17_;
36602 	gchar* _tmp18_;
36603 	gchar* _tmp19_;
36604 	ValaCCodeFunctionCall* _tmp20_;
36605 	ValaCCodeExpression* _tmp21_;
36606 	ValaCCodeFunctionCall* _tmp22_;
36607 	const gchar* _tmp23_;
36608 	gchar* _tmp24_;
36609 	gchar* _tmp25_;
36610 	gchar* _tmp26_;
36611 	gchar* _tmp27_;
36612 	gchar* _tmp28_;
36613 	gchar* _tmp29_;
36614 	ValaCCodeConstant* _tmp30_;
36615 	ValaCCodeConstant* _tmp31_;
36616 	ValaCCodeFunction* _tmp32_;
36617 	ValaCCodeFunction* _tmp33_;
36618 	ValaCCodeFunctionCall* _tmp34_;
36619 	ValaArrayList* _tmp50_;
36620 	ValaArrayList* _tmp51_;
36621 	g_return_if_fail (self != NULL);
36622 	g_return_if_fail (postcondition != NULL);
36623 	_tmp0_ = vala_ccode_identifier_new ("_vala_warn_if_fail");
36624 	_tmp1_ = _tmp0_;
36625 	_tmp2_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp1_);
36626 	_tmp3_ = _tmp2_;
36627 	_vala_ccode_node_unref0 (_tmp1_);
36628 	cassert = _tmp3_;
36629 	vala_code_node_emit ((ValaCodeNode*) postcondition, (ValaCodeGenerator*) self);
36630 	_tmp4_ = vala_code_node_get_source_reference ((ValaCodeNode*) postcondition);
36631 	_tmp5_ = _tmp4_;
36632 	vala_source_reference_get_begin (_tmp5_, &_tmp6_);
36633 	_tmp7_ = _tmp6_;
36634 	_tmp8_ = _tmp7_.pos;
36635 	_tmp9_ = vala_code_node_get_source_reference ((ValaCodeNode*) postcondition);
36636 	_tmp10_ = _tmp9_;
36637 	vala_source_reference_get_end (_tmp10_, &_tmp11_);
36638 	_tmp12_ = _tmp11_;
36639 	_tmp13_ = _tmp12_.pos;
36640 	_tmp14_ = vala_code_node_get_source_reference ((ValaCodeNode*) postcondition);
36641 	_tmp15_ = _tmp14_;
36642 	vala_source_reference_get_begin (_tmp15_, &_tmp16_);
36643 	_tmp17_ = _tmp16_;
36644 	_tmp18_ = _tmp17_.pos;
36645 	_tmp19_ = string_substring ((const gchar*) _tmp8_, (glong) 0, (glong) ((gint) (_tmp13_ - _tmp18_)));
36646 	message = _tmp19_;
36647 	_tmp20_ = cassert;
36648 	_tmp21_ = vala_get_cvalue (postcondition);
36649 	vala_ccode_function_call_add_argument (_tmp20_, _tmp21_);
36650 	_tmp22_ = cassert;
36651 	_tmp23_ = message;
36652 	_tmp24_ = string_replace (_tmp23_, "\n", " ");
36653 	_tmp25_ = _tmp24_;
36654 	_tmp26_ = g_strescape (_tmp25_, "");
36655 	_tmp27_ = _tmp26_;
36656 	_tmp28_ = g_strdup_printf ("\"%s\"", _tmp27_);
36657 	_tmp29_ = _tmp28_;
36658 	_tmp30_ = vala_ccode_constant_new (_tmp29_);
36659 	_tmp31_ = _tmp30_;
36660 	vala_ccode_function_call_add_argument (_tmp22_, (ValaCCodeExpression*) _tmp31_);
36661 	_vala_ccode_node_unref0 (_tmp31_);
36662 	_g_free0 (_tmp29_);
36663 	_g_free0 (_tmp27_);
36664 	_g_free0 (_tmp25_);
36665 	self->requires_assert = TRUE;
36666 	_tmp32_ = vala_ccode_base_module_get_ccode (self);
36667 	_tmp33_ = _tmp32_;
36668 	_tmp34_ = cassert;
36669 	vala_ccode_function_add_expression (_tmp33_, (ValaCCodeExpression*) _tmp34_);
36670 	{
36671 		ValaArrayList* _value_list = NULL;
36672 		ValaArrayList* _tmp35_;
36673 		ValaArrayList* _tmp36_;
36674 		ValaArrayList* _tmp37_;
36675 		gint _value_size = 0;
36676 		ValaArrayList* _tmp38_;
36677 		gint _tmp39_;
36678 		gint _tmp40_;
36679 		gint _value_index = 0;
36680 		_tmp35_ = vala_ccode_base_module_get_temp_ref_values (self);
36681 		_tmp36_ = _tmp35_;
36682 		_tmp37_ = _vala_iterable_ref0 (_tmp36_);
36683 		_value_list = _tmp37_;
36684 		_tmp38_ = _value_list;
36685 		_tmp39_ = vala_collection_get_size ((ValaCollection*) _tmp38_);
36686 		_tmp40_ = _tmp39_;
36687 		_value_size = _tmp40_;
36688 		_value_index = -1;
36689 		while (TRUE) {
36690 			gint _tmp41_;
36691 			gint _tmp42_;
36692 			ValaTargetValue* value = NULL;
36693 			ValaArrayList* _tmp43_;
36694 			gpointer _tmp44_;
36695 			ValaCCodeFunction* _tmp45_;
36696 			ValaCCodeFunction* _tmp46_;
36697 			ValaTargetValue* _tmp47_;
36698 			ValaCCodeExpression* _tmp48_;
36699 			ValaCCodeExpression* _tmp49_;
36700 			_value_index = _value_index + 1;
36701 			_tmp41_ = _value_index;
36702 			_tmp42_ = _value_size;
36703 			if (!(_tmp41_ < _tmp42_)) {
36704 				break;
36705 			}
36706 			_tmp43_ = _value_list;
36707 			_tmp44_ = vala_list_get ((ValaList*) _tmp43_, _value_index);
36708 			value = (ValaTargetValue*) _tmp44_;
36709 			_tmp45_ = vala_ccode_base_module_get_ccode (self);
36710 			_tmp46_ = _tmp45_;
36711 			_tmp47_ = value;
36712 			_tmp48_ = vala_ccode_base_module_destroy_value (self, _tmp47_, FALSE);
36713 			_tmp49_ = _tmp48_;
36714 			vala_ccode_function_add_expression (_tmp46_, _tmp49_);
36715 			_vala_ccode_node_unref0 (_tmp49_);
36716 			_vala_target_value_unref0 (value);
36717 		}
36718 		_vala_iterable_unref0 (_value_list);
36719 	}
36720 	_tmp50_ = vala_ccode_base_module_get_temp_ref_values (self);
36721 	_tmp51_ = _tmp50_;
36722 	vala_collection_clear ((ValaCollection*) _tmp51_);
36723 	_g_free0 (message);
36724 	_vala_ccode_node_unref0 (cassert);
36725 }
36726 
36727 ValaDataType*
vala_ccode_base_module_get_this_type(ValaCCodeBaseModule * self)36728 vala_ccode_base_module_get_this_type (ValaCCodeBaseModule* self)
36729 {
36730 	gboolean _tmp0_ = FALSE;
36731 	ValaMethod* _tmp1_;
36732 	ValaMethod* _tmp2_;
36733 	ValaDataType* result = NULL;
36734 	g_return_val_if_fail (self != NULL, NULL);
36735 	_tmp1_ = vala_ccode_base_module_get_current_method (self);
36736 	_tmp2_ = _tmp1_;
36737 	if (_tmp2_ != NULL) {
36738 		ValaMethod* _tmp3_;
36739 		ValaMethod* _tmp4_;
36740 		ValaMemberBinding _tmp5_;
36741 		ValaMemberBinding _tmp6_;
36742 		_tmp3_ = vala_ccode_base_module_get_current_method (self);
36743 		_tmp4_ = _tmp3_;
36744 		_tmp5_ = vala_method_get_binding (_tmp4_);
36745 		_tmp6_ = _tmp5_;
36746 		_tmp0_ = _tmp6_ == VALA_MEMBER_BINDING_INSTANCE;
36747 	} else {
36748 		_tmp0_ = FALSE;
36749 	}
36750 	if (_tmp0_) {
36751 		ValaMethod* _tmp7_;
36752 		ValaMethod* _tmp8_;
36753 		ValaParameter* _tmp9_;
36754 		ValaParameter* _tmp10_;
36755 		ValaDataType* _tmp11_;
36756 		ValaDataType* _tmp12_;
36757 		_tmp7_ = vala_ccode_base_module_get_current_method (self);
36758 		_tmp8_ = _tmp7_;
36759 		_tmp9_ = vala_method_get_this_parameter (_tmp8_);
36760 		_tmp10_ = _tmp9_;
36761 		_tmp11_ = vala_variable_get_variable_type ((ValaVariable*) _tmp10_);
36762 		_tmp12_ = _tmp11_;
36763 		result = _tmp12_;
36764 		return result;
36765 	} else {
36766 		gboolean _tmp13_ = FALSE;
36767 		ValaPropertyAccessor* _tmp14_;
36768 		ValaPropertyAccessor* _tmp15_;
36769 		_tmp14_ = vala_ccode_base_module_get_current_property_accessor (self);
36770 		_tmp15_ = _tmp14_;
36771 		if (_tmp15_ != NULL) {
36772 			ValaPropertyAccessor* _tmp16_;
36773 			ValaPropertyAccessor* _tmp17_;
36774 			ValaProperty* _tmp18_;
36775 			ValaProperty* _tmp19_;
36776 			ValaMemberBinding _tmp20_;
36777 			ValaMemberBinding _tmp21_;
36778 			_tmp16_ = vala_ccode_base_module_get_current_property_accessor (self);
36779 			_tmp17_ = _tmp16_;
36780 			_tmp18_ = vala_property_accessor_get_prop (_tmp17_);
36781 			_tmp19_ = _tmp18_;
36782 			_tmp20_ = vala_property_get_binding (_tmp19_);
36783 			_tmp21_ = _tmp20_;
36784 			_tmp13_ = _tmp21_ == VALA_MEMBER_BINDING_INSTANCE;
36785 		} else {
36786 			_tmp13_ = FALSE;
36787 		}
36788 		if (_tmp13_) {
36789 			ValaPropertyAccessor* _tmp22_;
36790 			ValaPropertyAccessor* _tmp23_;
36791 			ValaProperty* _tmp24_;
36792 			ValaProperty* _tmp25_;
36793 			ValaParameter* _tmp26_;
36794 			ValaParameter* _tmp27_;
36795 			ValaDataType* _tmp28_;
36796 			ValaDataType* _tmp29_;
36797 			_tmp22_ = vala_ccode_base_module_get_current_property_accessor (self);
36798 			_tmp23_ = _tmp22_;
36799 			_tmp24_ = vala_property_accessor_get_prop (_tmp23_);
36800 			_tmp25_ = _tmp24_;
36801 			_tmp26_ = vala_property_get_this_parameter (_tmp25_);
36802 			_tmp27_ = _tmp26_;
36803 			_tmp28_ = vala_variable_get_variable_type ((ValaVariable*) _tmp27_);
36804 			_tmp29_ = _tmp28_;
36805 			result = _tmp29_;
36806 			return result;
36807 		} else {
36808 			gboolean _tmp30_ = FALSE;
36809 			ValaConstructor* _tmp31_;
36810 			ValaConstructor* _tmp32_;
36811 			_tmp31_ = vala_ccode_base_module_get_current_constructor (self);
36812 			_tmp32_ = _tmp31_;
36813 			if (_tmp32_ != NULL) {
36814 				ValaConstructor* _tmp33_;
36815 				ValaConstructor* _tmp34_;
36816 				ValaMemberBinding _tmp35_;
36817 				ValaMemberBinding _tmp36_;
36818 				_tmp33_ = vala_ccode_base_module_get_current_constructor (self);
36819 				_tmp34_ = _tmp33_;
36820 				_tmp35_ = vala_constructor_get_binding (_tmp34_);
36821 				_tmp36_ = _tmp35_;
36822 				_tmp30_ = _tmp36_ == VALA_MEMBER_BINDING_INSTANCE;
36823 			} else {
36824 				_tmp30_ = FALSE;
36825 			}
36826 			if (_tmp30_) {
36827 				ValaConstructor* _tmp37_;
36828 				ValaConstructor* _tmp38_;
36829 				ValaParameter* _tmp39_;
36830 				ValaParameter* _tmp40_;
36831 				ValaDataType* _tmp41_;
36832 				ValaDataType* _tmp42_;
36833 				_tmp37_ = vala_ccode_base_module_get_current_constructor (self);
36834 				_tmp38_ = _tmp37_;
36835 				_tmp39_ = vala_constructor_get_this_parameter (_tmp38_);
36836 				_tmp40_ = _tmp39_;
36837 				_tmp41_ = vala_variable_get_variable_type ((ValaVariable*) _tmp40_);
36838 				_tmp42_ = _tmp41_;
36839 				result = _tmp42_;
36840 				return result;
36841 			} else {
36842 				gboolean _tmp43_ = FALSE;
36843 				ValaDestructor* _tmp44_;
36844 				ValaDestructor* _tmp45_;
36845 				_tmp44_ = vala_ccode_base_module_get_current_destructor (self);
36846 				_tmp45_ = _tmp44_;
36847 				if (_tmp45_ != NULL) {
36848 					ValaDestructor* _tmp46_;
36849 					ValaDestructor* _tmp47_;
36850 					ValaMemberBinding _tmp48_;
36851 					ValaMemberBinding _tmp49_;
36852 					_tmp46_ = vala_ccode_base_module_get_current_destructor (self);
36853 					_tmp47_ = _tmp46_;
36854 					_tmp48_ = vala_destructor_get_binding (_tmp47_);
36855 					_tmp49_ = _tmp48_;
36856 					_tmp43_ = _tmp49_ == VALA_MEMBER_BINDING_INSTANCE;
36857 				} else {
36858 					_tmp43_ = FALSE;
36859 				}
36860 				if (_tmp43_) {
36861 					ValaDestructor* _tmp50_;
36862 					ValaDestructor* _tmp51_;
36863 					ValaParameter* _tmp52_;
36864 					ValaParameter* _tmp53_;
36865 					ValaDataType* _tmp54_;
36866 					ValaDataType* _tmp55_;
36867 					_tmp50_ = vala_ccode_base_module_get_current_destructor (self);
36868 					_tmp51_ = _tmp50_;
36869 					_tmp52_ = vala_destructor_get_this_parameter (_tmp51_);
36870 					_tmp53_ = _tmp52_;
36871 					_tmp54_ = vala_variable_get_variable_type ((ValaVariable*) _tmp53_);
36872 					_tmp55_ = _tmp54_;
36873 					result = _tmp55_;
36874 					return result;
36875 				}
36876 			}
36877 		}
36878 	}
36879 	result = NULL;
36880 	return result;
36881 }
36882 
36883 ValaCCodeFunctionCall*
vala_ccode_base_module_generate_instance_cast(ValaCCodeBaseModule * self,ValaCCodeExpression * expr,ValaTypeSymbol * type)36884 vala_ccode_base_module_generate_instance_cast (ValaCCodeBaseModule* self,
36885                                                ValaCCodeExpression* expr,
36886                                                ValaTypeSymbol* type)
36887 {
36888 	ValaCCodeFunctionCall* _result_ = NULL;
36889 	ValaCCodeIdentifier* _tmp0_;
36890 	ValaCCodeIdentifier* _tmp1_;
36891 	ValaCCodeFunctionCall* _tmp2_;
36892 	ValaCCodeFunctionCall* _tmp3_;
36893 	gchar* _tmp4_;
36894 	gchar* _tmp5_;
36895 	ValaCCodeIdentifier* _tmp6_;
36896 	ValaCCodeIdentifier* _tmp7_;
36897 	gchar* _tmp8_;
36898 	gchar* _tmp9_;
36899 	ValaCCodeIdentifier* _tmp10_;
36900 	ValaCCodeIdentifier* _tmp11_;
36901 	ValaCCodeFunctionCall* result = NULL;
36902 	g_return_val_if_fail (self != NULL, NULL);
36903 	g_return_val_if_fail (expr != NULL, NULL);
36904 	g_return_val_if_fail (type != NULL, NULL);
36905 	_tmp0_ = vala_ccode_identifier_new ("G_TYPE_CHECK_INSTANCE_CAST");
36906 	_tmp1_ = _tmp0_;
36907 	_tmp2_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp1_);
36908 	_tmp3_ = _tmp2_;
36909 	_vala_ccode_node_unref0 (_tmp1_);
36910 	_result_ = _tmp3_;
36911 	vala_ccode_function_call_add_argument (_result_, expr);
36912 	_tmp4_ = vala_get_ccode_type_id ((ValaCodeNode*) type);
36913 	_tmp5_ = _tmp4_;
36914 	_tmp6_ = vala_ccode_identifier_new (_tmp5_);
36915 	_tmp7_ = _tmp6_;
36916 	vala_ccode_function_call_add_argument (_result_, (ValaCCodeExpression*) _tmp7_);
36917 	_vala_ccode_node_unref0 (_tmp7_);
36918 	_g_free0 (_tmp5_);
36919 	_tmp8_ = vala_get_ccode_name ((ValaCodeNode*) type);
36920 	_tmp9_ = _tmp8_;
36921 	_tmp10_ = vala_ccode_identifier_new (_tmp9_);
36922 	_tmp11_ = _tmp10_;
36923 	vala_ccode_function_call_add_argument (_result_, (ValaCCodeExpression*) _tmp11_);
36924 	_vala_ccode_node_unref0 (_tmp11_);
36925 	_g_free0 (_tmp9_);
36926 	result = _result_;
36927 	return result;
36928 }
36929 
36930 static void
vala_ccode_base_module_generate_struct_destroy_function(ValaCCodeBaseModule * self,ValaStruct * st)36931 vala_ccode_base_module_generate_struct_destroy_function (ValaCCodeBaseModule* self,
36932                                                          ValaStruct* st)
36933 {
36934 	ValaCCodeFile* _tmp0_;
36935 	gchar* _tmp1_;
36936 	gchar* _tmp2_;
36937 	gboolean _tmp3_;
36938 	ValaCCodeFunction* function = NULL;
36939 	gchar* _tmp4_;
36940 	gchar* _tmp5_;
36941 	ValaCCodeFunction* _tmp6_;
36942 	ValaCCodeFunction* _tmp7_;
36943 	ValaCCodeFunction* _tmp8_;
36944 	ValaCCodeFunction* _tmp9_;
36945 	gchar* _tmp10_;
36946 	gchar* _tmp11_;
36947 	gchar* _tmp12_;
36948 	gchar* _tmp13_;
36949 	ValaCCodeParameter* _tmp14_;
36950 	ValaCCodeParameter* _tmp15_;
36951 	ValaCCodeBaseModuleEmitContext* _tmp16_;
36952 	ValaCCodeBaseModuleEmitContext* _tmp17_;
36953 	ValaCCodeFunction* _tmp18_;
36954 	ValaTargetValue* this_value = NULL;
36955 	ValaTargetValue* _tmp19_;
36956 	ValaCCodeFile* _tmp47_;
36957 	ValaCCodeFunction* _tmp48_;
36958 	ValaCCodeFile* _tmp49_;
36959 	ValaCCodeFunction* _tmp50_;
36960 	g_return_if_fail (self != NULL);
36961 	g_return_if_fail (st != NULL);
36962 	_tmp0_ = self->cfile;
36963 	_tmp1_ = vala_get_ccode_destroy_function ((ValaTypeSymbol*) st);
36964 	_tmp2_ = _tmp1_;
36965 	_tmp3_ = vala_ccode_file_add_declaration (_tmp0_, _tmp2_);
36966 	_g_free0 (_tmp2_);
36967 	if (_tmp3_) {
36968 		return;
36969 	}
36970 	_tmp4_ = vala_get_ccode_destroy_function ((ValaTypeSymbol*) st);
36971 	_tmp5_ = _tmp4_;
36972 	_tmp6_ = vala_ccode_function_new (_tmp5_, "void");
36973 	_tmp7_ = _tmp6_;
36974 	_g_free0 (_tmp5_);
36975 	function = _tmp7_;
36976 	_tmp8_ = function;
36977 	vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp8_, VALA_CCODE_MODIFIERS_STATIC);
36978 	_tmp9_ = function;
36979 	_tmp10_ = vala_get_ccode_name ((ValaCodeNode*) st);
36980 	_tmp11_ = _tmp10_;
36981 	_tmp12_ = g_strdup_printf ("%s *", _tmp11_);
36982 	_tmp13_ = _tmp12_;
36983 	_tmp14_ = vala_ccode_parameter_new ("self", _tmp13_);
36984 	_tmp15_ = _tmp14_;
36985 	vala_ccode_function_add_parameter (_tmp9_, _tmp15_);
36986 	_vala_ccode_node_unref0 (_tmp15_);
36987 	_g_free0 (_tmp13_);
36988 	_g_free0 (_tmp11_);
36989 	_tmp16_ = vala_ccode_base_module_emit_context_new (NULL);
36990 	_tmp17_ = _tmp16_;
36991 	vala_ccode_base_module_push_context (self, _tmp17_);
36992 	_vala_ccode_base_module_emit_context_unref0 (_tmp17_);
36993 	_tmp18_ = function;
36994 	vala_ccode_base_module_push_function (self, _tmp18_);
36995 	_tmp19_ = vala_ccode_base_module_load_this_parameter (self, (ValaTypeSymbol*) st);
36996 	this_value = _tmp19_;
36997 	{
36998 		ValaList* _f_list = NULL;
36999 		ValaList* _tmp20_;
37000 		ValaList* _tmp21_;
37001 		gint _f_size = 0;
37002 		ValaList* _tmp22_;
37003 		gint _tmp23_;
37004 		gint _tmp24_;
37005 		gint _f_index = 0;
37006 		_tmp20_ = vala_struct_get_fields (st);
37007 		_tmp21_ = _vala_iterable_ref0 (_tmp20_);
37008 		_f_list = _tmp21_;
37009 		_tmp22_ = _f_list;
37010 		_tmp23_ = vala_collection_get_size ((ValaCollection*) _tmp22_);
37011 		_tmp24_ = _tmp23_;
37012 		_f_size = _tmp24_;
37013 		_f_index = -1;
37014 		while (TRUE) {
37015 			gint _tmp25_;
37016 			gint _tmp26_;
37017 			ValaField* f = NULL;
37018 			ValaList* _tmp27_;
37019 			gpointer _tmp28_;
37020 			ValaField* _tmp29_;
37021 			ValaMemberBinding _tmp30_;
37022 			ValaMemberBinding _tmp31_;
37023 			_f_index = _f_index + 1;
37024 			_tmp25_ = _f_index;
37025 			_tmp26_ = _f_size;
37026 			if (!(_tmp25_ < _tmp26_)) {
37027 				break;
37028 			}
37029 			_tmp27_ = _f_list;
37030 			_tmp28_ = vala_list_get (_tmp27_, _f_index);
37031 			f = (ValaField*) _tmp28_;
37032 			_tmp29_ = f;
37033 			_tmp30_ = vala_field_get_binding (_tmp29_);
37034 			_tmp31_ = _tmp30_;
37035 			if (_tmp31_ == VALA_MEMBER_BINDING_INSTANCE) {
37036 				gboolean _tmp32_ = FALSE;
37037 				gboolean _tmp33_ = FALSE;
37038 				ValaField* _tmp34_;
37039 				ValaDataType* _tmp35_;
37040 				ValaDataType* _tmp36_;
37041 				_tmp34_ = f;
37042 				_tmp35_ = vala_variable_get_variable_type ((ValaVariable*) _tmp34_);
37043 				_tmp36_ = _tmp35_;
37044 				if (!G_TYPE_CHECK_INSTANCE_TYPE (_tmp36_, VALA_TYPE_DELEGATE_TYPE)) {
37045 					_tmp33_ = TRUE;
37046 				} else {
37047 					ValaField* _tmp37_;
37048 					_tmp37_ = f;
37049 					_tmp33_ = vala_get_ccode_delegate_target ((ValaCodeNode*) _tmp37_);
37050 				}
37051 				if (_tmp33_) {
37052 					ValaField* _tmp38_;
37053 					ValaDataType* _tmp39_;
37054 					ValaDataType* _tmp40_;
37055 					_tmp38_ = f;
37056 					_tmp39_ = vala_variable_get_variable_type ((ValaVariable*) _tmp38_);
37057 					_tmp40_ = _tmp39_;
37058 					_tmp32_ = vala_ccode_base_module_requires_destroy (_tmp40_);
37059 				} else {
37060 					_tmp32_ = FALSE;
37061 				}
37062 				if (_tmp32_) {
37063 					ValaCCodeFunction* _tmp41_;
37064 					ValaCCodeFunction* _tmp42_;
37065 					ValaField* _tmp43_;
37066 					ValaTargetValue* _tmp44_;
37067 					ValaCCodeExpression* _tmp45_;
37068 					ValaCCodeExpression* _tmp46_;
37069 					_tmp41_ = vala_ccode_base_module_get_ccode (self);
37070 					_tmp42_ = _tmp41_;
37071 					_tmp43_ = f;
37072 					_tmp44_ = this_value;
37073 					_tmp45_ = vala_ccode_base_module_destroy_field (self, _tmp43_, _tmp44_);
37074 					_tmp46_ = _tmp45_;
37075 					vala_ccode_function_add_expression (_tmp42_, _tmp46_);
37076 					_vala_ccode_node_unref0 (_tmp46_);
37077 				}
37078 			}
37079 			_vala_code_node_unref0 (f);
37080 		}
37081 		_vala_iterable_unref0 (_f_list);
37082 	}
37083 	vala_ccode_base_module_pop_function (self);
37084 	vala_ccode_base_module_pop_context (self);
37085 	_tmp47_ = self->cfile;
37086 	_tmp48_ = function;
37087 	vala_ccode_file_add_function_declaration (_tmp47_, _tmp48_);
37088 	_tmp49_ = self->cfile;
37089 	_tmp50_ = function;
37090 	vala_ccode_file_add_function (_tmp49_, _tmp50_);
37091 	_vala_target_value_unref0 (this_value);
37092 	_vala_ccode_node_unref0 (function);
37093 }
37094 
37095 static void
vala_ccode_base_module_generate_struct_copy_function(ValaCCodeBaseModule * self,ValaStruct * st)37096 vala_ccode_base_module_generate_struct_copy_function (ValaCCodeBaseModule* self,
37097                                                       ValaStruct* st)
37098 {
37099 	ValaCCodeFile* _tmp0_;
37100 	gchar* _tmp1_;
37101 	gchar* _tmp2_;
37102 	gboolean _tmp3_;
37103 	ValaCCodeFunction* function = NULL;
37104 	gchar* _tmp4_;
37105 	gchar* _tmp5_;
37106 	ValaCCodeFunction* _tmp6_;
37107 	ValaCCodeFunction* _tmp7_;
37108 	ValaCCodeFunction* _tmp8_;
37109 	ValaCCodeFunction* _tmp9_;
37110 	gchar* _tmp10_;
37111 	gchar* _tmp11_;
37112 	gchar* _tmp12_;
37113 	gchar* _tmp13_;
37114 	ValaCCodeParameter* _tmp14_;
37115 	ValaCCodeParameter* _tmp15_;
37116 	ValaCCodeFunction* _tmp16_;
37117 	gchar* _tmp17_;
37118 	gchar* _tmp18_;
37119 	gchar* _tmp19_;
37120 	gchar* _tmp20_;
37121 	ValaCCodeParameter* _tmp21_;
37122 	ValaCCodeParameter* _tmp22_;
37123 	ValaCCodeBaseModuleEmitContext* _tmp23_;
37124 	ValaCCodeBaseModuleEmitContext* _tmp24_;
37125 	ValaCCodeFunction* _tmp25_;
37126 	ValaGLibValue* dest_struct = NULL;
37127 	ValaDataType* _tmp26_;
37128 	ValaDataType* _tmp27_;
37129 	ValaCCodeIdentifier* _tmp28_;
37130 	ValaCCodeIdentifier* _tmp29_;
37131 	ValaGLibValue* _tmp30_;
37132 	ValaGLibValue* _tmp31_;
37133 	ValaCCodeFile* _tmp65_;
37134 	ValaCCodeFunction* _tmp66_;
37135 	ValaCCodeFile* _tmp67_;
37136 	ValaCCodeFunction* _tmp68_;
37137 	g_return_if_fail (self != NULL);
37138 	g_return_if_fail (st != NULL);
37139 	_tmp0_ = self->cfile;
37140 	_tmp1_ = vala_get_ccode_copy_function ((ValaTypeSymbol*) st);
37141 	_tmp2_ = _tmp1_;
37142 	_tmp3_ = vala_ccode_file_add_declaration (_tmp0_, _tmp2_);
37143 	_g_free0 (_tmp2_);
37144 	if (_tmp3_) {
37145 		return;
37146 	}
37147 	_tmp4_ = vala_get_ccode_copy_function ((ValaTypeSymbol*) st);
37148 	_tmp5_ = _tmp4_;
37149 	_tmp6_ = vala_ccode_function_new (_tmp5_, "void");
37150 	_tmp7_ = _tmp6_;
37151 	_g_free0 (_tmp5_);
37152 	function = _tmp7_;
37153 	_tmp8_ = function;
37154 	vala_ccode_node_set_modifiers ((ValaCCodeNode*) _tmp8_, VALA_CCODE_MODIFIERS_STATIC);
37155 	_tmp9_ = function;
37156 	_tmp10_ = vala_get_ccode_name ((ValaCodeNode*) st);
37157 	_tmp11_ = _tmp10_;
37158 	_tmp12_ = g_strdup_printf ("const %s *", _tmp11_);
37159 	_tmp13_ = _tmp12_;
37160 	_tmp14_ = vala_ccode_parameter_new ("self", _tmp13_);
37161 	_tmp15_ = _tmp14_;
37162 	vala_ccode_function_add_parameter (_tmp9_, _tmp15_);
37163 	_vala_ccode_node_unref0 (_tmp15_);
37164 	_g_free0 (_tmp13_);
37165 	_g_free0 (_tmp11_);
37166 	_tmp16_ = function;
37167 	_tmp17_ = vala_get_ccode_name ((ValaCodeNode*) st);
37168 	_tmp18_ = _tmp17_;
37169 	_tmp19_ = g_strdup_printf ("%s *", _tmp18_);
37170 	_tmp20_ = _tmp19_;
37171 	_tmp21_ = vala_ccode_parameter_new ("dest", _tmp20_);
37172 	_tmp22_ = _tmp21_;
37173 	vala_ccode_function_add_parameter (_tmp16_, _tmp22_);
37174 	_vala_ccode_node_unref0 (_tmp22_);
37175 	_g_free0 (_tmp20_);
37176 	_g_free0 (_tmp18_);
37177 	_tmp23_ = vala_ccode_base_module_emit_context_new (NULL);
37178 	_tmp24_ = _tmp23_;
37179 	vala_ccode_base_module_push_context (self, _tmp24_);
37180 	_vala_ccode_base_module_emit_context_unref0 (_tmp24_);
37181 	_tmp25_ = function;
37182 	vala_ccode_base_module_push_function (self, _tmp25_);
37183 	_tmp26_ = vala_semantic_analyzer_get_data_type_for_symbol ((ValaSymbol*) st);
37184 	_tmp27_ = _tmp26_;
37185 	_tmp28_ = vala_ccode_identifier_new ("(*dest)");
37186 	_tmp29_ = _tmp28_;
37187 	_tmp30_ = vala_glib_value_new (_tmp27_, (ValaCCodeExpression*) _tmp29_, TRUE);
37188 	_tmp31_ = _tmp30_;
37189 	_vala_ccode_node_unref0 (_tmp29_);
37190 	_vala_code_node_unref0 (_tmp27_);
37191 	dest_struct = _tmp31_;
37192 	{
37193 		ValaList* _f_list = NULL;
37194 		ValaList* _tmp32_;
37195 		ValaList* _tmp33_;
37196 		gint _f_size = 0;
37197 		ValaList* _tmp34_;
37198 		gint _tmp35_;
37199 		gint _tmp36_;
37200 		gint _f_index = 0;
37201 		_tmp32_ = vala_struct_get_fields (st);
37202 		_tmp33_ = _vala_iterable_ref0 (_tmp32_);
37203 		_f_list = _tmp33_;
37204 		_tmp34_ = _f_list;
37205 		_tmp35_ = vala_collection_get_size ((ValaCollection*) _tmp34_);
37206 		_tmp36_ = _tmp35_;
37207 		_f_size = _tmp36_;
37208 		_f_index = -1;
37209 		while (TRUE) {
37210 			gint _tmp37_;
37211 			gint _tmp38_;
37212 			ValaField* f = NULL;
37213 			ValaList* _tmp39_;
37214 			gpointer _tmp40_;
37215 			ValaField* _tmp41_;
37216 			ValaMemberBinding _tmp42_;
37217 			ValaMemberBinding _tmp43_;
37218 			_f_index = _f_index + 1;
37219 			_tmp37_ = _f_index;
37220 			_tmp38_ = _f_size;
37221 			if (!(_tmp37_ < _tmp38_)) {
37222 				break;
37223 			}
37224 			_tmp39_ = _f_list;
37225 			_tmp40_ = vala_list_get (_tmp39_, _f_index);
37226 			f = (ValaField*) _tmp40_;
37227 			_tmp41_ = f;
37228 			_tmp42_ = vala_field_get_binding (_tmp41_);
37229 			_tmp43_ = _tmp42_;
37230 			if (_tmp43_ == VALA_MEMBER_BINDING_INSTANCE) {
37231 				ValaTargetValue* value = NULL;
37232 				ValaField* _tmp44_;
37233 				ValaTargetValue* _tmp45_;
37234 				ValaTargetValue* _tmp46_;
37235 				ValaTargetValue* _tmp47_;
37236 				ValaTargetValue* _tmp48_;
37237 				gboolean _tmp49_ = FALSE;
37238 				gboolean _tmp50_ = FALSE;
37239 				ValaField* _tmp51_;
37240 				ValaDataType* _tmp52_;
37241 				ValaDataType* _tmp53_;
37242 				ValaField* _tmp62_;
37243 				ValaGLibValue* _tmp63_;
37244 				ValaTargetValue* _tmp64_;
37245 				_tmp44_ = f;
37246 				_tmp45_ = vala_ccode_base_module_load_this_parameter (self, G_TYPE_CHECK_INSTANCE_CAST (st, VALA_TYPE_TYPESYMBOL, ValaTypeSymbol));
37247 				_tmp46_ = _tmp45_;
37248 				_tmp47_ = vala_code_generator_load_field ((ValaCodeGenerator*) self, _tmp44_, _tmp46_, NULL);
37249 				_tmp48_ = _tmp47_;
37250 				_vala_target_value_unref0 (_tmp46_);
37251 				value = _tmp48_;
37252 				_tmp51_ = f;
37253 				_tmp52_ = vala_variable_get_variable_type ((ValaVariable*) _tmp51_);
37254 				_tmp53_ = _tmp52_;
37255 				if (!G_TYPE_CHECK_INSTANCE_TYPE (_tmp53_, VALA_TYPE_DELEGATE_TYPE)) {
37256 					_tmp50_ = TRUE;
37257 				} else {
37258 					ValaField* _tmp54_;
37259 					_tmp54_ = f;
37260 					_tmp50_ = vala_get_ccode_delegate_target ((ValaCodeNode*) _tmp54_);
37261 				}
37262 				if (_tmp50_) {
37263 					ValaField* _tmp55_;
37264 					ValaDataType* _tmp56_;
37265 					ValaDataType* _tmp57_;
37266 					_tmp55_ = f;
37267 					_tmp56_ = vala_variable_get_variable_type ((ValaVariable*) _tmp55_);
37268 					_tmp57_ = _tmp56_;
37269 					_tmp49_ = vala_ccode_base_module_requires_copy (_tmp57_);
37270 				} else {
37271 					_tmp49_ = FALSE;
37272 				}
37273 				if (_tmp49_) {
37274 					ValaTargetValue* _tmp58_;
37275 					ValaField* _tmp59_;
37276 					ValaTargetValue* _tmp60_;
37277 					ValaTargetValue* _tmp61_;
37278 					_tmp58_ = value;
37279 					_tmp59_ = f;
37280 					_tmp60_ = vala_ccode_base_module_copy_value (self, _tmp58_, (ValaCodeNode*) _tmp59_);
37281 					_vala_target_value_unref0 (value);
37282 					value = _tmp60_;
37283 					_tmp61_ = value;
37284 					if (_tmp61_ == NULL) {
37285 						_vala_target_value_unref0 (value);
37286 						_vala_code_node_unref0 (f);
37287 						continue;
37288 					}
37289 				}
37290 				_tmp62_ = f;
37291 				_tmp63_ = dest_struct;
37292 				_tmp64_ = value;
37293 				vala_code_generator_store_field ((ValaCodeGenerator*) self, _tmp62_, (ValaTargetValue*) _tmp63_, _tmp64_, NULL);
37294 				_vala_target_value_unref0 (value);
37295 			}
37296 			_vala_code_node_unref0 (f);
37297 		}
37298 		_vala_iterable_unref0 (_f_list);
37299 	}
37300 	vala_ccode_base_module_pop_function (self);
37301 	vala_ccode_base_module_pop_context (self);
37302 	_tmp65_ = self->cfile;
37303 	_tmp66_ = function;
37304 	vala_ccode_file_add_function_declaration (_tmp65_, _tmp66_);
37305 	_tmp67_ = self->cfile;
37306 	_tmp68_ = function;
37307 	vala_ccode_file_add_function (_tmp67_, _tmp68_);
37308 	_vala_target_value_unref0 (dest_struct);
37309 	_vala_ccode_node_unref0 (function);
37310 }
37311 
37312 void
vala_ccode_base_module_return_default_value(ValaCCodeBaseModule * self,ValaDataType * return_type,gboolean on_error)37313 vala_ccode_base_module_return_default_value (ValaCCodeBaseModule* self,
37314                                              ValaDataType* return_type,
37315                                              gboolean on_error)
37316 {
37317 	ValaStruct* st = NULL;
37318 	ValaTypeSymbol* _tmp0_;
37319 	ValaTypeSymbol* _tmp1_;
37320 	gboolean _tmp2_ = FALSE;
37321 	gboolean _tmp3_ = FALSE;
37322 	ValaStruct* _tmp4_;
37323 	g_return_if_fail (self != NULL);
37324 	g_return_if_fail (return_type != NULL);
37325 	_tmp0_ = vala_data_type_get_type_symbol (return_type);
37326 	_tmp1_ = _tmp0_;
37327 	st = G_TYPE_CHECK_INSTANCE_TYPE (_tmp1_, VALA_TYPE_STRUCT) ? ((ValaStruct*) _tmp1_) : NULL;
37328 	_tmp4_ = st;
37329 	if (_tmp4_ != NULL) {
37330 		ValaStruct* _tmp5_;
37331 		_tmp5_ = st;
37332 		_tmp3_ = vala_struct_is_simple_type (_tmp5_);
37333 	} else {
37334 		_tmp3_ = FALSE;
37335 	}
37336 	if (_tmp3_) {
37337 		gboolean _tmp6_;
37338 		gboolean _tmp7_;
37339 		_tmp6_ = vala_data_type_get_nullable (return_type);
37340 		_tmp7_ = _tmp6_;
37341 		_tmp2_ = !_tmp7_;
37342 	} else {
37343 		_tmp2_ = FALSE;
37344 	}
37345 	if (_tmp2_) {
37346 		ValaLocalVariable* ret_temp_var = NULL;
37347 		ValaLocalVariable* _tmp8_;
37348 		ValaLocalVariable* _tmp9_;
37349 		ValaCCodeFunction* _tmp10_;
37350 		ValaCCodeFunction* _tmp11_;
37351 		ValaLocalVariable* _tmp12_;
37352 		const gchar* _tmp13_;
37353 		const gchar* _tmp14_;
37354 		ValaCCodeIdentifier* _tmp15_;
37355 		ValaCCodeIdentifier* _tmp16_;
37356 		_tmp8_ = vala_ccode_base_module_get_temp_variable (self, return_type, TRUE, NULL, TRUE);
37357 		ret_temp_var = _tmp8_;
37358 		_tmp9_ = ret_temp_var;
37359 		vala_ccode_base_module_emit_temp_var (self, _tmp9_, on_error);
37360 		_tmp10_ = vala_ccode_base_module_get_ccode (self);
37361 		_tmp11_ = _tmp10_;
37362 		_tmp12_ = ret_temp_var;
37363 		_tmp13_ = vala_symbol_get_name ((ValaSymbol*) _tmp12_);
37364 		_tmp14_ = _tmp13_;
37365 		_tmp15_ = vala_ccode_identifier_new (_tmp14_);
37366 		_tmp16_ = _tmp15_;
37367 		vala_ccode_function_add_return (_tmp11_, (ValaCCodeExpression*) _tmp16_);
37368 		_vala_ccode_node_unref0 (_tmp16_);
37369 		_vala_code_node_unref0 (ret_temp_var);
37370 	} else {
37371 		ValaCCodeFunction* _tmp17_;
37372 		ValaCCodeFunction* _tmp18_;
37373 		ValaCCodeExpression* _tmp19_;
37374 		ValaCCodeExpression* _tmp20_;
37375 		_tmp17_ = vala_ccode_base_module_get_ccode (self);
37376 		_tmp18_ = _tmp17_;
37377 		_tmp19_ = vala_ccode_base_module_default_value_for_type (self, return_type, FALSE, on_error);
37378 		_tmp20_ = _tmp19_;
37379 		vala_ccode_function_add_return (_tmp18_, _tmp20_);
37380 		_vala_ccode_node_unref0 (_tmp20_);
37381 	}
37382 }
37383 
37384 static void
vala_ccode_base_module_real_generate_dynamic_method_wrapper(ValaCCodeBaseModule * self,ValaDynamicMethod * method)37385 vala_ccode_base_module_real_generate_dynamic_method_wrapper (ValaCCodeBaseModule* self,
37386                                                              ValaDynamicMethod* method)
37387 {
37388 	g_return_if_fail (method != NULL);
37389 }
37390 
37391 void
vala_ccode_base_module_generate_dynamic_method_wrapper(ValaCCodeBaseModule * self,ValaDynamicMethod * method)37392 vala_ccode_base_module_generate_dynamic_method_wrapper (ValaCCodeBaseModule* self,
37393                                                         ValaDynamicMethod* method)
37394 {
37395 	g_return_if_fail (self != NULL);
37396 	VALA_CCODE_BASE_MODULE_GET_CLASS (self)->generate_dynamic_method_wrapper (self, method);
37397 }
37398 
37399 static gboolean
vala_ccode_base_module_real_method_has_wrapper(ValaCCodeBaseModule * self,ValaMethod * method)37400 vala_ccode_base_module_real_method_has_wrapper (ValaCCodeBaseModule* self,
37401                                                 ValaMethod* method)
37402 {
37403 	gboolean result = FALSE;
37404 	g_return_val_if_fail (method != NULL, FALSE);
37405 	result = FALSE;
37406 	return result;
37407 }
37408 
37409 gboolean
vala_ccode_base_module_method_has_wrapper(ValaCCodeBaseModule * self,ValaMethod * method)37410 vala_ccode_base_module_method_has_wrapper (ValaCCodeBaseModule* self,
37411                                            ValaMethod* method)
37412 {
37413 	g_return_val_if_fail (self != NULL, FALSE);
37414 	return VALA_CCODE_BASE_MODULE_GET_CLASS (self)->method_has_wrapper (self, method);
37415 }
37416 
37417 static ValaCCodeExpression*
vala_ccode_base_module_real_get_param_spec_cexpression(ValaCCodeBaseModule * self,ValaProperty * prop)37418 vala_ccode_base_module_real_get_param_spec_cexpression (ValaCCodeBaseModule* self,
37419                                                         ValaProperty* prop)
37420 {
37421 	ValaCCodeInvalidExpression* _tmp0_;
37422 	ValaCCodeExpression* result = NULL;
37423 	g_return_val_if_fail (prop != NULL, NULL);
37424 	_tmp0_ = vala_ccode_invalid_expression_new ();
37425 	result = (ValaCCodeExpression*) _tmp0_;
37426 	return result;
37427 }
37428 
37429 ValaCCodeExpression*
vala_ccode_base_module_get_param_spec_cexpression(ValaCCodeBaseModule * self,ValaProperty * prop)37430 vala_ccode_base_module_get_param_spec_cexpression (ValaCCodeBaseModule* self,
37431                                                    ValaProperty* prop)
37432 {
37433 	g_return_val_if_fail (self != NULL, NULL);
37434 	return VALA_CCODE_BASE_MODULE_GET_CLASS (self)->get_param_spec_cexpression (self, prop);
37435 }
37436 
37437 static ValaCCodeExpression*
vala_ccode_base_module_real_get_param_spec(ValaCCodeBaseModule * self,ValaProperty * prop)37438 vala_ccode_base_module_real_get_param_spec (ValaCCodeBaseModule* self,
37439                                             ValaProperty* prop)
37440 {
37441 	ValaCCodeInvalidExpression* _tmp0_;
37442 	ValaCCodeExpression* result = NULL;
37443 	g_return_val_if_fail (prop != NULL, NULL);
37444 	_tmp0_ = vala_ccode_invalid_expression_new ();
37445 	result = (ValaCCodeExpression*) _tmp0_;
37446 	return result;
37447 }
37448 
37449 ValaCCodeExpression*
vala_ccode_base_module_get_param_spec(ValaCCodeBaseModule * self,ValaProperty * prop)37450 vala_ccode_base_module_get_param_spec (ValaCCodeBaseModule* self,
37451                                        ValaProperty* prop)
37452 {
37453 	g_return_val_if_fail (self != NULL, NULL);
37454 	return VALA_CCODE_BASE_MODULE_GET_CLASS (self)->get_param_spec (self, prop);
37455 }
37456 
37457 static ValaCCodeExpression*
vala_ccode_base_module_real_get_signal_creation(ValaCCodeBaseModule * self,ValaSignal * sig,ValaObjectTypeSymbol * type)37458 vala_ccode_base_module_real_get_signal_creation (ValaCCodeBaseModule* self,
37459                                                  ValaSignal* sig,
37460                                                  ValaObjectTypeSymbol* type)
37461 {
37462 	ValaCCodeInvalidExpression* _tmp0_;
37463 	ValaCCodeExpression* result = NULL;
37464 	g_return_val_if_fail (sig != NULL, NULL);
37465 	g_return_val_if_fail (type != NULL, NULL);
37466 	_tmp0_ = vala_ccode_invalid_expression_new ();
37467 	result = (ValaCCodeExpression*) _tmp0_;
37468 	return result;
37469 }
37470 
37471 ValaCCodeExpression*
vala_ccode_base_module_get_signal_creation(ValaCCodeBaseModule * self,ValaSignal * sig,ValaObjectTypeSymbol * type)37472 vala_ccode_base_module_get_signal_creation (ValaCCodeBaseModule* self,
37473                                             ValaSignal* sig,
37474                                             ValaObjectTypeSymbol* type)
37475 {
37476 	g_return_val_if_fail (self != NULL, NULL);
37477 	return VALA_CCODE_BASE_MODULE_GET_CLASS (self)->get_signal_creation (self, sig, type);
37478 }
37479 
37480 static ValaCCodeExpression*
vala_ccode_base_module_real_get_value_getter_function(ValaCCodeBaseModule * self,ValaDataType * type_reference)37481 vala_ccode_base_module_real_get_value_getter_function (ValaCCodeBaseModule* self,
37482                                                        ValaDataType* type_reference)
37483 {
37484 	ValaCCodeInvalidExpression* _tmp0_;
37485 	ValaCCodeExpression* result = NULL;
37486 	g_return_val_if_fail (type_reference != NULL, NULL);
37487 	_tmp0_ = vala_ccode_invalid_expression_new ();
37488 	result = (ValaCCodeExpression*) _tmp0_;
37489 	return result;
37490 }
37491 
37492 ValaCCodeExpression*
vala_ccode_base_module_get_value_getter_function(ValaCCodeBaseModule * self,ValaDataType * type_reference)37493 vala_ccode_base_module_get_value_getter_function (ValaCCodeBaseModule* self,
37494                                                   ValaDataType* type_reference)
37495 {
37496 	g_return_val_if_fail (self != NULL, NULL);
37497 	return VALA_CCODE_BASE_MODULE_GET_CLASS (self)->get_value_getter_function (self, type_reference);
37498 }
37499 
37500 static ValaCCodeExpression*
vala_ccode_base_module_real_get_value_setter_function(ValaCCodeBaseModule * self,ValaDataType * type_reference)37501 vala_ccode_base_module_real_get_value_setter_function (ValaCCodeBaseModule* self,
37502                                                        ValaDataType* type_reference)
37503 {
37504 	ValaCCodeInvalidExpression* _tmp0_;
37505 	ValaCCodeExpression* result = NULL;
37506 	g_return_val_if_fail (type_reference != NULL, NULL);
37507 	_tmp0_ = vala_ccode_invalid_expression_new ();
37508 	result = (ValaCCodeExpression*) _tmp0_;
37509 	return result;
37510 }
37511 
37512 ValaCCodeExpression*
vala_ccode_base_module_get_value_setter_function(ValaCCodeBaseModule * self,ValaDataType * type_reference)37513 vala_ccode_base_module_get_value_setter_function (ValaCCodeBaseModule* self,
37514                                                   ValaDataType* type_reference)
37515 {
37516 	g_return_val_if_fail (self != NULL, NULL);
37517 	return VALA_CCODE_BASE_MODULE_GET_CLASS (self)->get_value_setter_function (self, type_reference);
37518 }
37519 
37520 static ValaCCodeExpression*
vala_ccode_base_module_real_get_value_taker_function(ValaCCodeBaseModule * self,ValaDataType * type_reference)37521 vala_ccode_base_module_real_get_value_taker_function (ValaCCodeBaseModule* self,
37522                                                       ValaDataType* type_reference)
37523 {
37524 	ValaCCodeInvalidExpression* _tmp0_;
37525 	ValaCCodeExpression* result = NULL;
37526 	g_return_val_if_fail (type_reference != NULL, NULL);
37527 	_tmp0_ = vala_ccode_invalid_expression_new ();
37528 	result = (ValaCCodeExpression*) _tmp0_;
37529 	return result;
37530 }
37531 
37532 ValaCCodeExpression*
vala_ccode_base_module_get_value_taker_function(ValaCCodeBaseModule * self,ValaDataType * type_reference)37533 vala_ccode_base_module_get_value_taker_function (ValaCCodeBaseModule* self,
37534                                                  ValaDataType* type_reference)
37535 {
37536 	g_return_val_if_fail (self != NULL, NULL);
37537 	return VALA_CCODE_BASE_MODULE_GET_CLASS (self)->get_value_taker_function (self, type_reference);
37538 }
37539 
37540 static void
vala_ccode_base_module_real_register_dbus_info(ValaCCodeBaseModule * self,ValaCCodeBlock * block,ValaObjectTypeSymbol * bindable)37541 vala_ccode_base_module_real_register_dbus_info (ValaCCodeBaseModule* self,
37542                                                 ValaCCodeBlock* block,
37543                                                 ValaObjectTypeSymbol* bindable)
37544 {
37545 	g_return_if_fail (block != NULL);
37546 	g_return_if_fail (bindable != NULL);
37547 }
37548 
37549 void
vala_ccode_base_module_register_dbus_info(ValaCCodeBaseModule * self,ValaCCodeBlock * block,ValaObjectTypeSymbol * bindable)37550 vala_ccode_base_module_register_dbus_info (ValaCCodeBaseModule* self,
37551                                            ValaCCodeBlock* block,
37552                                            ValaObjectTypeSymbol* bindable)
37553 {
37554 	g_return_if_fail (self != NULL);
37555 	VALA_CCODE_BASE_MODULE_GET_CLASS (self)->register_dbus_info (self, block, bindable);
37556 }
37557 
37558 static gchar*
vala_ccode_base_module_real_get_dynamic_property_getter_cname(ValaCCodeBaseModule * self,ValaDynamicProperty * node)37559 vala_ccode_base_module_real_get_dynamic_property_getter_cname (ValaCCodeBaseModule* self,
37560                                                                ValaDynamicProperty* node)
37561 {
37562 	ValaSourceReference* _tmp0_;
37563 	ValaSourceReference* _tmp1_;
37564 	ValaDataType* _tmp2_;
37565 	ValaDataType* _tmp3_;
37566 	gchar* _tmp4_;
37567 	gchar* _tmp5_;
37568 	gchar* _tmp6_;
37569 	gchar* _tmp7_;
37570 	gchar* _tmp8_;
37571 	gchar* result = NULL;
37572 	g_return_val_if_fail (node != NULL, NULL);
37573 	_tmp0_ = vala_code_node_get_source_reference ((ValaCodeNode*) node);
37574 	_tmp1_ = _tmp0_;
37575 	_tmp2_ = vala_dynamic_property_get_dynamic_type (node);
37576 	_tmp3_ = _tmp2_;
37577 	_tmp4_ = vala_code_node_to_string ((ValaCodeNode*) _tmp3_);
37578 	_tmp5_ = _tmp4_;
37579 	_tmp6_ = g_strdup_printf ("dynamic properties are not supported for %s", _tmp5_);
37580 	_tmp7_ = _tmp6_;
37581 	vala_report_error (_tmp1_, _tmp7_);
37582 	_g_free0 (_tmp7_);
37583 	_g_free0 (_tmp5_);
37584 	_tmp8_ = g_strdup ("");
37585 	result = _tmp8_;
37586 	return result;
37587 }
37588 
37589 gchar*
vala_ccode_base_module_get_dynamic_property_getter_cname(ValaCCodeBaseModule * self,ValaDynamicProperty * node)37590 vala_ccode_base_module_get_dynamic_property_getter_cname (ValaCCodeBaseModule* self,
37591                                                           ValaDynamicProperty* node)
37592 {
37593 	g_return_val_if_fail (self != NULL, NULL);
37594 	return VALA_CCODE_BASE_MODULE_GET_CLASS (self)->get_dynamic_property_getter_cname (self, node);
37595 }
37596 
37597 static gchar*
vala_ccode_base_module_real_get_dynamic_property_setter_cname(ValaCCodeBaseModule * self,ValaDynamicProperty * node)37598 vala_ccode_base_module_real_get_dynamic_property_setter_cname (ValaCCodeBaseModule* self,
37599                                                                ValaDynamicProperty* node)
37600 {
37601 	ValaSourceReference* _tmp0_;
37602 	ValaSourceReference* _tmp1_;
37603 	ValaDataType* _tmp2_;
37604 	ValaDataType* _tmp3_;
37605 	gchar* _tmp4_;
37606 	gchar* _tmp5_;
37607 	gchar* _tmp6_;
37608 	gchar* _tmp7_;
37609 	gchar* _tmp8_;
37610 	gchar* result = NULL;
37611 	g_return_val_if_fail (node != NULL, NULL);
37612 	_tmp0_ = vala_code_node_get_source_reference ((ValaCodeNode*) node);
37613 	_tmp1_ = _tmp0_;
37614 	_tmp2_ = vala_dynamic_property_get_dynamic_type (node);
37615 	_tmp3_ = _tmp2_;
37616 	_tmp4_ = vala_code_node_to_string ((ValaCodeNode*) _tmp3_);
37617 	_tmp5_ = _tmp4_;
37618 	_tmp6_ = g_strdup_printf ("dynamic properties are not supported for %s", _tmp5_);
37619 	_tmp7_ = _tmp6_;
37620 	vala_report_error (_tmp1_, _tmp7_);
37621 	_g_free0 (_tmp7_);
37622 	_g_free0 (_tmp5_);
37623 	_tmp8_ = g_strdup ("");
37624 	result = _tmp8_;
37625 	return result;
37626 }
37627 
37628 gchar*
vala_ccode_base_module_get_dynamic_property_setter_cname(ValaCCodeBaseModule * self,ValaDynamicProperty * node)37629 vala_ccode_base_module_get_dynamic_property_setter_cname (ValaCCodeBaseModule* self,
37630                                                           ValaDynamicProperty* node)
37631 {
37632 	g_return_val_if_fail (self != NULL, NULL);
37633 	return VALA_CCODE_BASE_MODULE_GET_CLASS (self)->get_dynamic_property_setter_cname (self, node);
37634 }
37635 
37636 static gchar*
vala_ccode_base_module_real_get_dynamic_signal_cname(ValaCCodeBaseModule * self,ValaDynamicSignal * node)37637 vala_ccode_base_module_real_get_dynamic_signal_cname (ValaCCodeBaseModule* self,
37638                                                       ValaDynamicSignal* node)
37639 {
37640 	gchar* _tmp0_;
37641 	gchar* result = NULL;
37642 	g_return_val_if_fail (node != NULL, NULL);
37643 	_tmp0_ = g_strdup ("");
37644 	result = _tmp0_;
37645 	return result;
37646 }
37647 
37648 gchar*
vala_ccode_base_module_get_dynamic_signal_cname(ValaCCodeBaseModule * self,ValaDynamicSignal * node)37649 vala_ccode_base_module_get_dynamic_signal_cname (ValaCCodeBaseModule* self,
37650                                                  ValaDynamicSignal* node)
37651 {
37652 	g_return_val_if_fail (self != NULL, NULL);
37653 	return VALA_CCODE_BASE_MODULE_GET_CLASS (self)->get_dynamic_signal_cname (self, node);
37654 }
37655 
37656 static gchar*
vala_ccode_base_module_real_get_dynamic_signal_connect_wrapper_name(ValaCCodeBaseModule * self,ValaDynamicSignal * node)37657 vala_ccode_base_module_real_get_dynamic_signal_connect_wrapper_name (ValaCCodeBaseModule* self,
37658                                                                      ValaDynamicSignal* node)
37659 {
37660 	gchar* _tmp0_;
37661 	gchar* result = NULL;
37662 	g_return_val_if_fail (node != NULL, NULL);
37663 	_tmp0_ = g_strdup ("");
37664 	result = _tmp0_;
37665 	return result;
37666 }
37667 
37668 gchar*
vala_ccode_base_module_get_dynamic_signal_connect_wrapper_name(ValaCCodeBaseModule * self,ValaDynamicSignal * node)37669 vala_ccode_base_module_get_dynamic_signal_connect_wrapper_name (ValaCCodeBaseModule* self,
37670                                                                 ValaDynamicSignal* node)
37671 {
37672 	g_return_val_if_fail (self != NULL, NULL);
37673 	return VALA_CCODE_BASE_MODULE_GET_CLASS (self)->get_dynamic_signal_connect_wrapper_name (self, node);
37674 }
37675 
37676 static gchar*
vala_ccode_base_module_real_get_dynamic_signal_connect_after_wrapper_name(ValaCCodeBaseModule * self,ValaDynamicSignal * node)37677 vala_ccode_base_module_real_get_dynamic_signal_connect_after_wrapper_name (ValaCCodeBaseModule* self,
37678                                                                            ValaDynamicSignal* node)
37679 {
37680 	gchar* _tmp0_;
37681 	gchar* result = NULL;
37682 	g_return_val_if_fail (node != NULL, NULL);
37683 	_tmp0_ = g_strdup ("");
37684 	result = _tmp0_;
37685 	return result;
37686 }
37687 
37688 gchar*
vala_ccode_base_module_get_dynamic_signal_connect_after_wrapper_name(ValaCCodeBaseModule * self,ValaDynamicSignal * node)37689 vala_ccode_base_module_get_dynamic_signal_connect_after_wrapper_name (ValaCCodeBaseModule* self,
37690                                                                       ValaDynamicSignal* node)
37691 {
37692 	g_return_val_if_fail (self != NULL, NULL);
37693 	return VALA_CCODE_BASE_MODULE_GET_CLASS (self)->get_dynamic_signal_connect_after_wrapper_name (self, node);
37694 }
37695 
37696 static gchar*
vala_ccode_base_module_real_get_dynamic_signal_disconnect_wrapper_name(ValaCCodeBaseModule * self,ValaDynamicSignal * node)37697 vala_ccode_base_module_real_get_dynamic_signal_disconnect_wrapper_name (ValaCCodeBaseModule* self,
37698                                                                         ValaDynamicSignal* node)
37699 {
37700 	gchar* _tmp0_;
37701 	gchar* result = NULL;
37702 	g_return_val_if_fail (node != NULL, NULL);
37703 	_tmp0_ = g_strdup ("");
37704 	result = _tmp0_;
37705 	return result;
37706 }
37707 
37708 gchar*
vala_ccode_base_module_get_dynamic_signal_disconnect_wrapper_name(ValaCCodeBaseModule * self,ValaDynamicSignal * node)37709 vala_ccode_base_module_get_dynamic_signal_disconnect_wrapper_name (ValaCCodeBaseModule* self,
37710                                                                    ValaDynamicSignal* node)
37711 {
37712 	g_return_val_if_fail (self != NULL, NULL);
37713 	return VALA_CCODE_BASE_MODULE_GET_CLASS (self)->get_dynamic_signal_disconnect_wrapper_name (self, node);
37714 }
37715 
37716 static gchar*
vala_ccode_base_module_real_get_array_length_cname(ValaCCodeBaseModule * self,const gchar * array_cname,gint dim)37717 vala_ccode_base_module_real_get_array_length_cname (ValaCCodeBaseModule* self,
37718                                                     const gchar* array_cname,
37719                                                     gint dim)
37720 {
37721 	gchar* _tmp0_;
37722 	gchar* result = NULL;
37723 	g_return_val_if_fail (array_cname != NULL, NULL);
37724 	_tmp0_ = g_strdup ("");
37725 	result = _tmp0_;
37726 	return result;
37727 }
37728 
37729 gchar*
vala_ccode_base_module_get_array_length_cname(ValaCCodeBaseModule * self,const gchar * array_cname,gint dim)37730 vala_ccode_base_module_get_array_length_cname (ValaCCodeBaseModule* self,
37731                                                const gchar* array_cname,
37732                                                gint dim)
37733 {
37734 	g_return_val_if_fail (self != NULL, NULL);
37735 	return VALA_CCODE_BASE_MODULE_GET_CLASS (self)->get_array_length_cname (self, array_cname, dim);
37736 }
37737 
37738 static gchar*
vala_ccode_base_module_real_get_variable_array_length_cname(ValaCCodeBaseModule * self,ValaVariable * variable,gint dim)37739 vala_ccode_base_module_real_get_variable_array_length_cname (ValaCCodeBaseModule* self,
37740                                                              ValaVariable* variable,
37741                                                              gint dim)
37742 {
37743 	gchar* _tmp0_;
37744 	gchar* result = NULL;
37745 	g_return_val_if_fail (variable != NULL, NULL);
37746 	_tmp0_ = g_strdup ("");
37747 	result = _tmp0_;
37748 	return result;
37749 }
37750 
37751 gchar*
vala_ccode_base_module_get_variable_array_length_cname(ValaCCodeBaseModule * self,ValaVariable * variable,gint dim)37752 vala_ccode_base_module_get_variable_array_length_cname (ValaCCodeBaseModule* self,
37753                                                         ValaVariable* variable,
37754                                                         gint dim)
37755 {
37756 	g_return_val_if_fail (self != NULL, NULL);
37757 	return VALA_CCODE_BASE_MODULE_GET_CLASS (self)->get_variable_array_length_cname (self, variable, dim);
37758 }
37759 
37760 static ValaCCodeExpression*
vala_ccode_base_module_real_get_array_length_cexpression(ValaCCodeBaseModule * self,ValaExpression * array_expr,gint dim)37761 vala_ccode_base_module_real_get_array_length_cexpression (ValaCCodeBaseModule* self,
37762                                                           ValaExpression* array_expr,
37763                                                           gint dim)
37764 {
37765 	ValaCCodeInvalidExpression* _tmp0_;
37766 	ValaCCodeExpression* result = NULL;
37767 	g_return_val_if_fail (array_expr != NULL, NULL);
37768 	_tmp0_ = vala_ccode_invalid_expression_new ();
37769 	result = (ValaCCodeExpression*) _tmp0_;
37770 	return result;
37771 }
37772 
37773 ValaCCodeExpression*
vala_ccode_base_module_get_array_length_cexpression(ValaCCodeBaseModule * self,ValaExpression * array_expr,gint dim)37774 vala_ccode_base_module_get_array_length_cexpression (ValaCCodeBaseModule* self,
37775                                                      ValaExpression* array_expr,
37776                                                      gint dim)
37777 {
37778 	g_return_val_if_fail (self != NULL, NULL);
37779 	return VALA_CCODE_BASE_MODULE_GET_CLASS (self)->get_array_length_cexpression (self, array_expr, dim);
37780 }
37781 
37782 static ValaCCodeExpression*
vala_ccode_base_module_real_get_array_length_cvalue(ValaCCodeBaseModule * self,ValaTargetValue * value,gint dim)37783 vala_ccode_base_module_real_get_array_length_cvalue (ValaCCodeBaseModule* self,
37784                                                      ValaTargetValue* value,
37785                                                      gint dim)
37786 {
37787 	ValaCCodeInvalidExpression* _tmp0_;
37788 	ValaCCodeExpression* result = NULL;
37789 	g_return_val_if_fail (value != NULL, NULL);
37790 	_tmp0_ = vala_ccode_invalid_expression_new ();
37791 	result = (ValaCCodeExpression*) _tmp0_;
37792 	return result;
37793 }
37794 
37795 ValaCCodeExpression*
vala_ccode_base_module_get_array_length_cvalue(ValaCCodeBaseModule * self,ValaTargetValue * value,gint dim)37796 vala_ccode_base_module_get_array_length_cvalue (ValaCCodeBaseModule* self,
37797                                                 ValaTargetValue* value,
37798                                                 gint dim)
37799 {
37800 	g_return_val_if_fail (self != NULL, NULL);
37801 	return VALA_CCODE_BASE_MODULE_GET_CLASS (self)->get_array_length_cvalue (self, value, dim);
37802 }
37803 
37804 static gchar*
vala_ccode_base_module_real_get_array_size_cname(ValaCCodeBaseModule * self,const gchar * array_cname)37805 vala_ccode_base_module_real_get_array_size_cname (ValaCCodeBaseModule* self,
37806                                                   const gchar* array_cname)
37807 {
37808 	gchar* _tmp0_;
37809 	gchar* result = NULL;
37810 	g_return_val_if_fail (array_cname != NULL, NULL);
37811 	_tmp0_ = g_strdup ("");
37812 	result = _tmp0_;
37813 	return result;
37814 }
37815 
37816 gchar*
vala_ccode_base_module_get_array_size_cname(ValaCCodeBaseModule * self,const gchar * array_cname)37817 vala_ccode_base_module_get_array_size_cname (ValaCCodeBaseModule* self,
37818                                              const gchar* array_cname)
37819 {
37820 	g_return_val_if_fail (self != NULL, NULL);
37821 	return VALA_CCODE_BASE_MODULE_GET_CLASS (self)->get_array_size_cname (self, array_cname);
37822 }
37823 
37824 static void
vala_ccode_base_module_real_add_simple_check(ValaCCodeBaseModule * self,ValaCodeNode * node,gboolean always_fails)37825 vala_ccode_base_module_real_add_simple_check (ValaCCodeBaseModule* self,
37826                                               ValaCodeNode* node,
37827                                               gboolean always_fails)
37828 {
37829 	g_return_if_fail (node != NULL);
37830 }
37831 
37832 void
vala_ccode_base_module_add_simple_check(ValaCCodeBaseModule * self,ValaCodeNode * node,gboolean always_fails)37833 vala_ccode_base_module_add_simple_check (ValaCCodeBaseModule* self,
37834                                          ValaCodeNode* node,
37835                                          gboolean always_fails)
37836 {
37837 	g_return_if_fail (self != NULL);
37838 	VALA_CCODE_BASE_MODULE_GET_CLASS (self)->add_simple_check (self, node, always_fails);
37839 }
37840 
37841 static gchar*
vala_ccode_base_module_real_generate_ready_function(ValaCCodeBaseModule * self,ValaMethod * m)37842 vala_ccode_base_module_real_generate_ready_function (ValaCCodeBaseModule* self,
37843                                                      ValaMethod* m)
37844 {
37845 	gchar* _tmp0_;
37846 	gchar* result = NULL;
37847 	g_return_val_if_fail (m != NULL, NULL);
37848 	_tmp0_ = g_strdup ("");
37849 	result = _tmp0_;
37850 	return result;
37851 }
37852 
37853 gchar*
vala_ccode_base_module_generate_ready_function(ValaCCodeBaseModule * self,ValaMethod * m)37854 vala_ccode_base_module_generate_ready_function (ValaCCodeBaseModule* self,
37855                                                 ValaMethod* m)
37856 {
37857 	g_return_val_if_fail (self != NULL, NULL);
37858 	return VALA_CCODE_BASE_MODULE_GET_CLASS (self)->generate_ready_function (self, m);
37859 }
37860 
37861 ValaCCodeExpression*
vala_ccode_base_module_get_boolean_cconstant(ValaCCodeBaseModule * self,gboolean b)37862 vala_ccode_base_module_get_boolean_cconstant (ValaCCodeBaseModule* self,
37863                                               gboolean b)
37864 {
37865 	ValaCodeContext* _tmp0_;
37866 	ValaProfile _tmp1_;
37867 	ValaProfile _tmp2_;
37868 	ValaCCodeExpression* result = NULL;
37869 	g_return_val_if_fail (self != NULL, NULL);
37870 	_tmp0_ = self->priv->_context;
37871 	_tmp1_ = vala_code_context_get_profile (_tmp0_);
37872 	_tmp2_ = _tmp1_;
37873 	if (_tmp2_ == VALA_PROFILE_GOBJECT) {
37874 		const gchar* _tmp3_ = NULL;
37875 		ValaCCodeConstant* _tmp4_;
37876 		if (b) {
37877 			_tmp3_ = "TRUE";
37878 		} else {
37879 			_tmp3_ = "FALSE";
37880 		}
37881 		_tmp4_ = vala_ccode_constant_new (_tmp3_);
37882 		result = (ValaCCodeExpression*) _tmp4_;
37883 		return result;
37884 	} else {
37885 		ValaCCodeFile* _tmp5_;
37886 		const gchar* _tmp6_ = NULL;
37887 		ValaCCodeConstant* _tmp7_;
37888 		_tmp5_ = self->cfile;
37889 		vala_ccode_file_add_include (_tmp5_, "stdbool.h", FALSE);
37890 		if (b) {
37891 			_tmp6_ = "true";
37892 		} else {
37893 			_tmp6_ = "false";
37894 		}
37895 		_tmp7_ = vala_ccode_constant_new (_tmp6_);
37896 		result = (ValaCCodeExpression*) _tmp7_;
37897 		return result;
37898 	}
37899 }
37900 
37901 ValaCCodeBaseModuleEmitContext*
vala_ccode_base_module_emit_context_construct(GType object_type,ValaSymbol * symbol)37902 vala_ccode_base_module_emit_context_construct (GType object_type,
37903                                                ValaSymbol* symbol)
37904 {
37905 	ValaCCodeBaseModuleEmitContext* self = NULL;
37906 	ValaSymbol* _tmp0_;
37907 	self = (ValaCCodeBaseModuleEmitContext*) g_type_create_instance (object_type);
37908 	_tmp0_ = _vala_code_node_ref0 (symbol);
37909 	_vala_code_node_unref0 (self->current_symbol);
37910 	self->current_symbol = _tmp0_;
37911 	return self;
37912 }
37913 
37914 ValaCCodeBaseModuleEmitContext*
vala_ccode_base_module_emit_context_new(ValaSymbol * symbol)37915 vala_ccode_base_module_emit_context_new (ValaSymbol* symbol)
37916 {
37917 	return vala_ccode_base_module_emit_context_construct (VALA_CCODE_BASE_MODULE_TYPE_EMIT_CONTEXT, symbol);
37918 }
37919 
37920 void
vala_ccode_base_module_emit_context_push_symbol(ValaCCodeBaseModuleEmitContext * self,ValaSymbol * symbol)37921 vala_ccode_base_module_emit_context_push_symbol (ValaCCodeBaseModuleEmitContext* self,
37922                                                  ValaSymbol* symbol)
37923 {
37924 	ValaArrayList* _tmp0_;
37925 	ValaSymbol* _tmp1_;
37926 	ValaSymbol* _tmp2_;
37927 	g_return_if_fail (self != NULL);
37928 	g_return_if_fail (symbol != NULL);
37929 	_tmp0_ = self->symbol_stack;
37930 	_tmp1_ = self->current_symbol;
37931 	vala_collection_add ((ValaCollection*) _tmp0_, _tmp1_);
37932 	_tmp2_ = _vala_code_node_ref0 (symbol);
37933 	_vala_code_node_unref0 (self->current_symbol);
37934 	self->current_symbol = _tmp2_;
37935 }
37936 
37937 void
vala_ccode_base_module_emit_context_pop_symbol(ValaCCodeBaseModuleEmitContext * self)37938 vala_ccode_base_module_emit_context_pop_symbol (ValaCCodeBaseModuleEmitContext* self)
37939 {
37940 	ValaArrayList* _tmp0_;
37941 	ValaArrayList* _tmp1_;
37942 	gint _tmp2_;
37943 	gint _tmp3_;
37944 	gpointer _tmp4_;
37945 	g_return_if_fail (self != NULL);
37946 	_tmp0_ = self->symbol_stack;
37947 	_tmp1_ = self->symbol_stack;
37948 	_tmp2_ = vala_collection_get_size ((ValaCollection*) _tmp1_);
37949 	_tmp3_ = _tmp2_;
37950 	_tmp4_ = vala_list_remove_at ((ValaList*) _tmp0_, _tmp3_ - 1);
37951 	_vala_code_node_unref0 (self->current_symbol);
37952 	self->current_symbol = (ValaSymbol*) _tmp4_;
37953 }
37954 
37955 static void
vala_ccode_base_module_value_emit_context_init(GValue * value)37956 vala_ccode_base_module_value_emit_context_init (GValue* value)
37957 {
37958 	value->data[0].v_pointer = NULL;
37959 }
37960 
37961 static void
vala_ccode_base_module_value_emit_context_free_value(GValue * value)37962 vala_ccode_base_module_value_emit_context_free_value (GValue* value)
37963 {
37964 	if (value->data[0].v_pointer) {
37965 		vala_ccode_base_module_emit_context_unref (value->data[0].v_pointer);
37966 	}
37967 }
37968 
37969 static void
vala_ccode_base_module_value_emit_context_copy_value(const GValue * src_value,GValue * dest_value)37970 vala_ccode_base_module_value_emit_context_copy_value (const GValue* src_value,
37971                                                       GValue* dest_value)
37972 {
37973 	if (src_value->data[0].v_pointer) {
37974 		dest_value->data[0].v_pointer = vala_ccode_base_module_emit_context_ref (src_value->data[0].v_pointer);
37975 	} else {
37976 		dest_value->data[0].v_pointer = NULL;
37977 	}
37978 }
37979 
37980 static gpointer
vala_ccode_base_module_value_emit_context_peek_pointer(const GValue * value)37981 vala_ccode_base_module_value_emit_context_peek_pointer (const GValue* value)
37982 {
37983 	return value->data[0].v_pointer;
37984 }
37985 
37986 static gchar*
vala_ccode_base_module_value_emit_context_collect_value(GValue * value,guint n_collect_values,GTypeCValue * collect_values,guint collect_flags)37987 vala_ccode_base_module_value_emit_context_collect_value (GValue* value,
37988                                                          guint n_collect_values,
37989                                                          GTypeCValue* collect_values,
37990                                                          guint collect_flags)
37991 {
37992 	if (collect_values[0].v_pointer) {
37993 		ValaCCodeBaseModuleEmitContext * object;
37994 		object = collect_values[0].v_pointer;
37995 		if (object->parent_instance.g_class == NULL) {
37996 			return g_strconcat ("invalid unclassed object pointer for value type `", G_VALUE_TYPE_NAME (value), "'", NULL);
37997 		} else if (!g_value_type_compatible (G_TYPE_FROM_INSTANCE (object), G_VALUE_TYPE (value))) {
37998 			return g_strconcat ("invalid object type `", g_type_name (G_TYPE_FROM_INSTANCE (object)), "' for value type `", G_VALUE_TYPE_NAME (value), "'", NULL);
37999 		}
38000 		value->data[0].v_pointer = vala_ccode_base_module_emit_context_ref (object);
38001 	} else {
38002 		value->data[0].v_pointer = NULL;
38003 	}
38004 	return NULL;
38005 }
38006 
38007 static gchar*
vala_ccode_base_module_value_emit_context_lcopy_value(const GValue * value,guint n_collect_values,GTypeCValue * collect_values,guint collect_flags)38008 vala_ccode_base_module_value_emit_context_lcopy_value (const GValue* value,
38009                                                        guint n_collect_values,
38010                                                        GTypeCValue* collect_values,
38011                                                        guint collect_flags)
38012 {
38013 	ValaCCodeBaseModuleEmitContext ** object_p;
38014 	object_p = collect_values[0].v_pointer;
38015 	if (!object_p) {
38016 		return g_strdup_printf ("value location for `%s' passed as NULL", G_VALUE_TYPE_NAME (value));
38017 	}
38018 	if (!value->data[0].v_pointer) {
38019 		*object_p = NULL;
38020 	} else if (collect_flags & G_VALUE_NOCOPY_CONTENTS) {
38021 		*object_p = value->data[0].v_pointer;
38022 	} else {
38023 		*object_p = vala_ccode_base_module_emit_context_ref (value->data[0].v_pointer);
38024 	}
38025 	return NULL;
38026 }
38027 
38028 GParamSpec*
vala_ccode_base_module_param_spec_emit_context(const gchar * name,const gchar * nick,const gchar * blurb,GType object_type,GParamFlags flags)38029 vala_ccode_base_module_param_spec_emit_context (const gchar* name,
38030                                                 const gchar* nick,
38031                                                 const gchar* blurb,
38032                                                 GType object_type,
38033                                                 GParamFlags flags)
38034 {
38035 	ValaCCodeBaseModuleParamSpecEmitContext* spec;
38036 	g_return_val_if_fail (g_type_is_a (object_type, VALA_CCODE_BASE_MODULE_TYPE_EMIT_CONTEXT), NULL);
38037 	spec = g_param_spec_internal (G_TYPE_PARAM_OBJECT, name, nick, blurb, flags);
38038 	G_PARAM_SPEC (spec)->value_type = object_type;
38039 	return G_PARAM_SPEC (spec);
38040 }
38041 
38042 gpointer
vala_ccode_base_module_value_get_emit_context(const GValue * value)38043 vala_ccode_base_module_value_get_emit_context (const GValue* value)
38044 {
38045 	g_return_val_if_fail (G_TYPE_CHECK_VALUE_TYPE (value, VALA_CCODE_BASE_MODULE_TYPE_EMIT_CONTEXT), NULL);
38046 	return value->data[0].v_pointer;
38047 }
38048 
38049 void
vala_ccode_base_module_value_set_emit_context(GValue * value,gpointer v_object)38050 vala_ccode_base_module_value_set_emit_context (GValue* value,
38051                                                gpointer v_object)
38052 {
38053 	ValaCCodeBaseModuleEmitContext * old;
38054 	g_return_if_fail (G_TYPE_CHECK_VALUE_TYPE (value, VALA_CCODE_BASE_MODULE_TYPE_EMIT_CONTEXT));
38055 	old = value->data[0].v_pointer;
38056 	if (v_object) {
38057 		g_return_if_fail (G_TYPE_CHECK_INSTANCE_TYPE (v_object, VALA_CCODE_BASE_MODULE_TYPE_EMIT_CONTEXT));
38058 		g_return_if_fail (g_value_type_compatible (G_TYPE_FROM_INSTANCE (v_object), G_VALUE_TYPE (value)));
38059 		value->data[0].v_pointer = v_object;
38060 		vala_ccode_base_module_emit_context_ref (value->data[0].v_pointer);
38061 	} else {
38062 		value->data[0].v_pointer = NULL;
38063 	}
38064 	if (old) {
38065 		vala_ccode_base_module_emit_context_unref (old);
38066 	}
38067 }
38068 
38069 void
vala_ccode_base_module_value_take_emit_context(GValue * value,gpointer v_object)38070 vala_ccode_base_module_value_take_emit_context (GValue* value,
38071                                                 gpointer v_object)
38072 {
38073 	ValaCCodeBaseModuleEmitContext * old;
38074 	g_return_if_fail (G_TYPE_CHECK_VALUE_TYPE (value, VALA_CCODE_BASE_MODULE_TYPE_EMIT_CONTEXT));
38075 	old = value->data[0].v_pointer;
38076 	if (v_object) {
38077 		g_return_if_fail (G_TYPE_CHECK_INSTANCE_TYPE (v_object, VALA_CCODE_BASE_MODULE_TYPE_EMIT_CONTEXT));
38078 		g_return_if_fail (g_value_type_compatible (G_TYPE_FROM_INSTANCE (v_object), G_VALUE_TYPE (value)));
38079 		value->data[0].v_pointer = v_object;
38080 	} else {
38081 		value->data[0].v_pointer = NULL;
38082 	}
38083 	if (old) {
38084 		vala_ccode_base_module_emit_context_unref (old);
38085 	}
38086 }
38087 
38088 static void
vala_ccode_base_module_emit_context_class_init(ValaCCodeBaseModuleEmitContextClass * klass,gpointer klass_data)38089 vala_ccode_base_module_emit_context_class_init (ValaCCodeBaseModuleEmitContextClass * klass,
38090                                                 gpointer klass_data)
38091 {
38092 	vala_ccode_base_module_emit_context_parent_class = g_type_class_peek_parent (klass);
38093 	((ValaCCodeBaseModuleEmitContextClass *) klass)->finalize = vala_ccode_base_module_emit_context_finalize;
38094 }
38095 
38096 static void
vala_ccode_base_module_emit_context_instance_init(ValaCCodeBaseModuleEmitContext * self,gpointer klass)38097 vala_ccode_base_module_emit_context_instance_init (ValaCCodeBaseModuleEmitContext * self,
38098                                                    gpointer klass)
38099 {
38100 	GEqualFunc _tmp0_;
38101 	ValaArrayList* _tmp1_;
38102 	GEqualFunc _tmp2_;
38103 	ValaArrayList* _tmp3_;
38104 	GEqualFunc _tmp4_;
38105 	ValaArrayList* _tmp5_;
38106 	GHashFunc _tmp6_;
38107 	GEqualFunc _tmp7_;
38108 	GEqualFunc _tmp8_;
38109 	ValaHashMap* _tmp9_;
38110 	GHashFunc _tmp10_;
38111 	GEqualFunc _tmp11_;
38112 	GEqualFunc _tmp12_;
38113 	ValaHashMap* _tmp13_;
38114 	GHashFunc _tmp14_;
38115 	GEqualFunc _tmp15_;
38116 	GEqualFunc _tmp16_;
38117 	ValaHashMap* _tmp17_;
38118 	_tmp0_ = g_direct_equal;
38119 	_tmp1_ = vala_array_list_new (VALA_TYPE_SYMBOL, (GBoxedCopyFunc) vala_code_node_ref, (GDestroyNotify) vala_code_node_unref, _tmp0_);
38120 	self->symbol_stack = _tmp1_;
38121 	_tmp2_ = g_direct_equal;
38122 	_tmp3_ = vala_array_list_new (VALA_TYPE_CCODE_FUNCTION, (GBoxedCopyFunc) vala_ccode_node_ref, (GDestroyNotify) vala_ccode_node_unref, _tmp2_);
38123 	self->ccode_stack = _tmp3_;
38124 	_tmp4_ = g_direct_equal;
38125 	_tmp5_ = vala_array_list_new (VALA_TYPE_TARGET_VALUE, (GBoxedCopyFunc) vala_target_value_ref, (GDestroyNotify) vala_target_value_unref, _tmp4_);
38126 	self->temp_ref_values = _tmp5_;
38127 	self->next_coroutine_state = 1;
38128 	_tmp6_ = g_str_hash;
38129 	_tmp7_ = g_str_equal;
38130 	_tmp8_ = g_direct_equal;
38131 	_tmp9_ = vala_hash_map_new (G_TYPE_STRING, (GBoxedCopyFunc) g_strdup, (GDestroyNotify) g_free, G_TYPE_STRING, (GBoxedCopyFunc) g_strdup, (GDestroyNotify) g_free, _tmp6_, _tmp7_, _tmp8_);
38132 	self->variable_name_map = (ValaMap*) _tmp9_;
38133 	_tmp10_ = g_str_hash;
38134 	_tmp11_ = g_str_equal;
38135 	_tmp12_ = g_direct_equal;
38136 	_tmp13_ = vala_hash_map_new (G_TYPE_STRING, (GBoxedCopyFunc) g_strdup, (GDestroyNotify) g_free, G_TYPE_INT, NULL, NULL, _tmp10_, _tmp11_, _tmp12_);
38137 	self->closure_variable_count_map = (ValaMap*) _tmp13_;
38138 	_tmp14_ = g_direct_hash;
38139 	_tmp15_ = g_direct_equal;
38140 	_tmp16_ = g_direct_equal;
38141 	_tmp17_ = vala_hash_map_new (VALA_TYPE_LOCAL_VARIABLE, (GBoxedCopyFunc) vala_code_node_ref, (GDestroyNotify) vala_code_node_unref, G_TYPE_INT, NULL, NULL, _tmp14_, _tmp15_, _tmp16_);
38142 	self->closure_variable_clash_map = (ValaMap*) _tmp17_;
38143 	self->ref_count = 1;
38144 }
38145 
38146 static void
vala_ccode_base_module_emit_context_finalize(ValaCCodeBaseModuleEmitContext * obj)38147 vala_ccode_base_module_emit_context_finalize (ValaCCodeBaseModuleEmitContext * obj)
38148 {
38149 	ValaCCodeBaseModuleEmitContext * self;
38150 	self = G_TYPE_CHECK_INSTANCE_CAST (obj, VALA_CCODE_BASE_MODULE_TYPE_EMIT_CONTEXT, ValaCCodeBaseModuleEmitContext);
38151 	g_signal_handlers_destroy (self);
38152 	_vala_code_node_unref0 (self->current_symbol);
38153 	_vala_iterable_unref0 (self->symbol_stack);
38154 	_vala_code_node_unref0 (self->current_try);
38155 	_vala_code_node_unref0 (self->current_catch);
38156 	_vala_ccode_node_unref0 (self->ccode);
38157 	_vala_iterable_unref0 (self->ccode_stack);
38158 	_vala_iterable_unref0 (self->temp_ref_values);
38159 	_vala_map_unref0 (self->variable_name_map);
38160 	_vala_map_unref0 (self->closure_variable_count_map);
38161 	_vala_map_unref0 (self->closure_variable_clash_map);
38162 }
38163 
38164 static GType
vala_ccode_base_module_emit_context_get_type_once(void)38165 vala_ccode_base_module_emit_context_get_type_once (void)
38166 {
38167 	static const GTypeValueTable g_define_type_value_table = { vala_ccode_base_module_value_emit_context_init, vala_ccode_base_module_value_emit_context_free_value, vala_ccode_base_module_value_emit_context_copy_value, vala_ccode_base_module_value_emit_context_peek_pointer, "p", vala_ccode_base_module_value_emit_context_collect_value, "p", vala_ccode_base_module_value_emit_context_lcopy_value };
38168 	static const GTypeInfo g_define_type_info = { sizeof (ValaCCodeBaseModuleEmitContextClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) vala_ccode_base_module_emit_context_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (ValaCCodeBaseModuleEmitContext), 0, (GInstanceInitFunc) vala_ccode_base_module_emit_context_instance_init, &g_define_type_value_table };
38169 	static const GTypeFundamentalInfo g_define_type_fundamental_info = { (G_TYPE_FLAG_CLASSED | G_TYPE_FLAG_INSTANTIATABLE | G_TYPE_FLAG_DERIVABLE | G_TYPE_FLAG_DEEP_DERIVABLE) };
38170 	GType vala_ccode_base_module_emit_context_type_id;
38171 	vala_ccode_base_module_emit_context_type_id = g_type_register_fundamental (g_type_fundamental_next (), "ValaCCodeBaseModuleEmitContext", &g_define_type_info, &g_define_type_fundamental_info, 0);
38172 	return vala_ccode_base_module_emit_context_type_id;
38173 }
38174 
38175 GType
vala_ccode_base_module_emit_context_get_type(void)38176 vala_ccode_base_module_emit_context_get_type (void)
38177 {
38178 	static volatile gsize vala_ccode_base_module_emit_context_type_id__volatile = 0;
38179 	if (g_once_init_enter (&vala_ccode_base_module_emit_context_type_id__volatile)) {
38180 		GType vala_ccode_base_module_emit_context_type_id;
38181 		vala_ccode_base_module_emit_context_type_id = vala_ccode_base_module_emit_context_get_type_once ();
38182 		g_once_init_leave (&vala_ccode_base_module_emit_context_type_id__volatile, vala_ccode_base_module_emit_context_type_id);
38183 	}
38184 	return vala_ccode_base_module_emit_context_type_id__volatile;
38185 }
38186 
38187 gpointer
vala_ccode_base_module_emit_context_ref(gpointer instance)38188 vala_ccode_base_module_emit_context_ref (gpointer instance)
38189 {
38190 	ValaCCodeBaseModuleEmitContext * self;
38191 	self = instance;
38192 	g_atomic_int_inc (&self->ref_count);
38193 	return instance;
38194 }
38195 
38196 void
vala_ccode_base_module_emit_context_unref(gpointer instance)38197 vala_ccode_base_module_emit_context_unref (gpointer instance)
38198 {
38199 	ValaCCodeBaseModuleEmitContext * self;
38200 	self = instance;
38201 	if (g_atomic_int_dec_and_test (&self->ref_count)) {
38202 		VALA_CCODE_BASE_MODULE_EMIT_CONTEXT_GET_CLASS (self)->finalize (self);
38203 		g_type_free_instance ((GTypeInstance *) self);
38204 	}
38205 }
38206 
38207 static void
vala_ccode_base_module_class_init(ValaCCodeBaseModuleClass * klass,gpointer klass_data)38208 vala_ccode_base_module_class_init (ValaCCodeBaseModuleClass * klass,
38209                                    gpointer klass_data)
38210 {
38211 	vala_ccode_base_module_parent_class = g_type_class_peek_parent (klass);
38212 	((ValaCodeVisitorClass *) klass)->finalize = vala_ccode_base_module_finalize;
38213 	g_type_class_adjust_private_offset (klass, &ValaCCodeBaseModule_private_offset);
38214 	((ValaCodeGeneratorClass *) klass)->emit = (void (*) (ValaCodeGenerator*, ValaCodeContext*)) vala_ccode_base_module_real_emit;
38215 	((ValaCCodeBaseModuleClass *) klass)->append_vala_array_free = (void (*) (ValaCCodeBaseModule*)) vala_ccode_base_module_real_append_vala_array_free;
38216 	((ValaCCodeBaseModuleClass *) klass)->append_vala_array_move = (void (*) (ValaCCodeBaseModule*)) vala_ccode_base_module_real_append_vala_array_move;
38217 	((ValaCCodeBaseModuleClass *) klass)->append_vala_array_length = (void (*) (ValaCCodeBaseModule*)) vala_ccode_base_module_real_append_vala_array_length;
38218 	((ValaCCodeBaseModuleClass *) klass)->append_params_array = (void (*) (ValaCCodeBaseModule*, ValaMethod*)) vala_ccode_base_module_real_append_params_array;
38219 	((ValaCodeVisitorClass *) klass)->visit_source_file = (void (*) (ValaCodeVisitor*, ValaSourceFile*)) vala_ccode_base_module_real_visit_source_file;
38220 	((ValaCCodeBaseModuleClass *) klass)->generate_enum_declaration = (gboolean (*) (ValaCCodeBaseModule*, ValaEnum*, ValaCCodeFile*)) vala_ccode_base_module_real_generate_enum_declaration;
38221 	((ValaCodeVisitorClass *) klass)->visit_enum = (void (*) (ValaCodeVisitor*, ValaEnum*)) vala_ccode_base_module_real_visit_enum;
38222 	((ValaCodeVisitorClass *) klass)->visit_constant = (void (*) (ValaCodeVisitor*, ValaConstant*)) vala_ccode_base_module_real_visit_constant;
38223 	((ValaCodeVisitorClass *) klass)->visit_field = (void (*) (ValaCodeVisitor*, ValaField*)) vala_ccode_base_module_real_visit_field;
38224 	((ValaCodeVisitorClass *) klass)->visit_property = (void (*) (ValaCodeVisitor*, ValaProperty*)) vala_ccode_base_module_real_visit_property;
38225 	((ValaCCodeBaseModuleClass *) klass)->generate_class_struct_declaration = (void (*) (ValaCCodeBaseModule*, ValaClass*, ValaCCodeFile*)) vala_ccode_base_module_real_generate_class_struct_declaration;
38226 	((ValaCCodeBaseModuleClass *) klass)->generate_struct_declaration = (void (*) (ValaCCodeBaseModule*, ValaStruct*, ValaCCodeFile*)) vala_ccode_base_module_real_generate_struct_declaration;
38227 	((ValaCCodeBaseModuleClass *) klass)->generate_delegate_declaration = (void (*) (ValaCCodeBaseModule*, ValaDelegate*, ValaCCodeFile*)) vala_ccode_base_module_real_generate_delegate_declaration;
38228 	((ValaCCodeBaseModuleClass *) klass)->generate_cparameters = (void (*) (ValaCCodeBaseModule*, ValaMethod*, ValaCCodeFile*, ValaMap*, ValaCCodeFunction*, ValaCCodeFunctionDeclarator*, ValaMap*, ValaCCodeFunctionCall*, gint)) vala_ccode_base_module_real_generate_cparameters;
38229 	((ValaCodeVisitorClass *) klass)->visit_property_accessor = (void (*) (ValaCodeVisitor*, ValaPropertyAccessor*)) vala_ccode_base_module_real_visit_property_accessor;
38230 	((ValaCodeVisitorClass *) klass)->visit_destructor = (void (*) (ValaCodeVisitor*, ValaDestructor*)) vala_ccode_base_module_real_visit_destructor;
38231 	((ValaCodeVisitorClass *) klass)->visit_block = (void (*) (ValaCodeVisitor*, ValaBlock*)) vala_ccode_base_module_real_visit_block;
38232 	((ValaCodeVisitorClass *) klass)->visit_declaration_statement = (void (*) (ValaCodeVisitor*, ValaDeclarationStatement*)) vala_ccode_base_module_real_visit_declaration_statement;
38233 	((ValaCodeVisitorClass *) klass)->visit_local_variable = (void (*) (ValaCodeVisitor*, ValaLocalVariable*)) vala_ccode_base_module_real_visit_local_variable;
38234 	((ValaCodeVisitorClass *) klass)->visit_initializer_list = (void (*) (ValaCodeVisitor*, ValaInitializerList*)) vala_ccode_base_module_real_visit_initializer_list;
38235 	((ValaCCodeBaseModuleClass *) klass)->get_dup_func_expression = (ValaCCodeExpression* (*) (ValaCCodeBaseModule*, ValaDataType*, ValaSourceReference*, gboolean)) vala_ccode_base_module_real_get_dup_func_expression;
38236 	((ValaCCodeBaseModuleClass *) klass)->append_struct_array_destroy = (gchar* (*) (ValaCCodeBaseModule*, ValaStruct*)) vala_ccode_base_module_real_append_struct_array_destroy;
38237 	((ValaCCodeBaseModuleClass *) klass)->append_struct_array_free = (gchar* (*) (ValaCCodeBaseModule*, ValaStruct*)) vala_ccode_base_module_real_append_struct_array_free;
38238 	((ValaCCodeBaseModuleClass *) klass)->destroy_value = (ValaCCodeExpression* (*) (ValaCCodeBaseModule*, ValaTargetValue*, gboolean)) vala_ccode_base_module_real_destroy_value;
38239 	((ValaCodeVisitorClass *) klass)->visit_end_full_expression = (void (*) (ValaCodeVisitor*, ValaExpression*)) vala_ccode_base_module_real_visit_end_full_expression;
38240 	((ValaCodeVisitorClass *) klass)->visit_expression_statement = (void (*) (ValaCodeVisitor*, ValaExpressionStatement*)) vala_ccode_base_module_real_visit_expression_statement;
38241 	((ValaCCodeBaseModuleClass *) klass)->append_scope_free = (void (*) (ValaCCodeBaseModule*, ValaSymbol*, ValaCodeNode*)) vala_ccode_base_module_real_append_scope_free;
38242 	((ValaCodeVisitorClass *) klass)->visit_return_statement = (void (*) (ValaCodeVisitor*, ValaReturnStatement*)) vala_ccode_base_module_real_visit_return_statement;
38243 	((ValaCodeVisitorClass *) klass)->visit_lock_statement = (void (*) (ValaCodeVisitor*, ValaLockStatement*)) vala_ccode_base_module_real_visit_lock_statement;
38244 	((ValaCodeVisitorClass *) klass)->visit_unlock_statement = (void (*) (ValaCodeVisitor*, ValaUnlockStatement*)) vala_ccode_base_module_real_visit_unlock_statement;
38245 	((ValaCodeVisitorClass *) klass)->visit_delete_statement = (void (*) (ValaCodeVisitor*, ValaDeleteStatement*)) vala_ccode_base_module_real_visit_delete_statement;
38246 	((ValaCodeVisitorClass *) klass)->visit_expression = (void (*) (ValaCodeVisitor*, ValaExpression*)) vala_ccode_base_module_real_visit_expression;
38247 	((ValaCodeVisitorClass *) klass)->visit_boolean_literal = (void (*) (ValaCodeVisitor*, ValaBooleanLiteral*)) vala_ccode_base_module_real_visit_boolean_literal;
38248 	((ValaCodeVisitorClass *) klass)->visit_character_literal = (void (*) (ValaCodeVisitor*, ValaCharacterLiteral*)) vala_ccode_base_module_real_visit_character_literal;
38249 	((ValaCodeVisitorClass *) klass)->visit_integer_literal = (void (*) (ValaCodeVisitor*, ValaIntegerLiteral*)) vala_ccode_base_module_real_visit_integer_literal;
38250 	((ValaCodeVisitorClass *) klass)->visit_real_literal = (void (*) (ValaCodeVisitor*, ValaRealLiteral*)) vala_ccode_base_module_real_visit_real_literal;
38251 	((ValaCodeVisitorClass *) klass)->visit_string_literal = (void (*) (ValaCodeVisitor*, ValaStringLiteral*)) vala_ccode_base_module_real_visit_string_literal;
38252 	((ValaCodeVisitorClass *) klass)->visit_regex_literal = (void (*) (ValaCodeVisitor*, ValaRegexLiteral*)) vala_ccode_base_module_real_visit_regex_literal;
38253 	((ValaCodeVisitorClass *) klass)->visit_null_literal = (void (*) (ValaCodeVisitor*, ValaNullLiteral*)) vala_ccode_base_module_real_visit_null_literal;
38254 	((ValaCCodeBaseModuleClass *) klass)->get_local_cvalue = (ValaTargetValue* (*) (ValaCCodeBaseModule*, ValaLocalVariable*)) vala_ccode_base_module_real_get_local_cvalue;
38255 	((ValaCCodeBaseModuleClass *) klass)->get_parameter_cvalue = (ValaTargetValue* (*) (ValaCCodeBaseModule*, ValaParameter*)) vala_ccode_base_module_real_get_parameter_cvalue;
38256 	((ValaCCodeBaseModuleClass *) klass)->get_field_cvalue = (ValaTargetValue* (*) (ValaCCodeBaseModule*, ValaField*, ValaTargetValue*)) vala_ccode_base_module_real_get_field_cvalue;
38257 	((ValaCCodeBaseModuleClass *) klass)->load_variable = (ValaTargetValue* (*) (ValaCCodeBaseModule*, ValaVariable*, ValaTargetValue*, ValaExpression*)) vala_ccode_base_module_real_load_variable;
38258 	((ValaCCodeBaseModuleClass *) klass)->load_this_parameter = (ValaTargetValue* (*) (ValaCCodeBaseModule*, ValaTypeSymbol*)) vala_ccode_base_module_real_load_this_parameter;
38259 	((ValaCCodeBaseModuleClass *) klass)->store_value = (void (*) (ValaCCodeBaseModule*, ValaTargetValue*, ValaTargetValue*, ValaSourceReference*)) vala_ccode_base_module_real_store_value;
38260 	((ValaCCodeBaseModuleClass *) klass)->get_delegate_target_cname = (gchar* (*) (ValaCCodeBaseModule*, const gchar*)) vala_ccode_base_module_real_get_delegate_target_cname;
38261 	((ValaCCodeBaseModuleClass *) klass)->get_delegate_target_cexpression = (ValaCCodeExpression* (*) (ValaCCodeBaseModule*, ValaExpression*, ValaCCodeExpression* *)) vala_ccode_base_module_real_get_delegate_target_cexpression;
38262 	((ValaCCodeBaseModuleClass *) klass)->get_delegate_target_cvalue = (ValaCCodeExpression* (*) (ValaCCodeBaseModule*, ValaTargetValue*)) vala_ccode_base_module_real_get_delegate_target_cvalue;
38263 	((ValaCCodeBaseModuleClass *) klass)->get_delegate_target_destroy_notify_cvalue = (ValaCCodeExpression* (*) (ValaCCodeBaseModule*, ValaTargetValue*)) vala_ccode_base_module_real_get_delegate_target_destroy_notify_cvalue;
38264 	((ValaCCodeBaseModuleClass *) klass)->get_delegate_target_destroy_notify_cname = (gchar* (*) (ValaCCodeBaseModule*, const gchar*)) vala_ccode_base_module_real_get_delegate_target_destroy_notify_cname;
38265 	((ValaCodeVisitorClass *) klass)->visit_base_access = (void (*) (ValaCodeVisitor*, ValaBaseAccess*)) vala_ccode_base_module_real_visit_base_access;
38266 	((ValaCodeVisitorClass *) klass)->visit_postfix_expression = (void (*) (ValaCodeVisitor*, ValaPostfixExpression*)) vala_ccode_base_module_real_visit_postfix_expression;
38267 	((ValaCCodeBaseModuleClass *) klass)->copy_value = (ValaTargetValue* (*) (ValaCCodeBaseModule*, ValaTargetValue*, ValaCodeNode*)) vala_ccode_base_module_real_copy_value;
38268 	((ValaCCodeBaseModuleClass *) klass)->generate_class_declaration = (void (*) (ValaCCodeBaseModule*, ValaClass*, ValaCCodeFile*)) vala_ccode_base_module_real_generate_class_declaration;
38269 	((ValaCCodeBaseModuleClass *) klass)->generate_interface_declaration = (void (*) (ValaCCodeBaseModule*, ValaInterface*, ValaCCodeFile*)) vala_ccode_base_module_real_generate_interface_declaration;
38270 	((ValaCCodeBaseModuleClass *) klass)->generate_method_declaration = (gboolean (*) (ValaCCodeBaseModule*, ValaMethod*, ValaCCodeFile*)) vala_ccode_base_module_real_generate_method_declaration;
38271 	((ValaCCodeBaseModuleClass *) klass)->generate_error_domain_declaration = (void (*) (ValaCCodeBaseModule*, ValaErrorDomain*, ValaCCodeFile*)) vala_ccode_base_module_real_generate_error_domain_declaration;
38272 	((ValaCodeVisitorClass *) klass)->visit_object_creation_expression = (void (*) (ValaCodeVisitor*, ValaObjectCreationExpression*)) vala_ccode_base_module_real_visit_object_creation_expression;
38273 	((ValaCodeVisitorClass *) klass)->visit_sizeof_expression = (void (*) (ValaCodeVisitor*, ValaSizeofExpression*)) vala_ccode_base_module_real_visit_sizeof_expression;
38274 	((ValaCodeVisitorClass *) klass)->visit_typeof_expression = (void (*) (ValaCodeVisitor*, ValaTypeofExpression*)) vala_ccode_base_module_real_visit_typeof_expression;
38275 	((ValaCodeVisitorClass *) klass)->visit_unary_expression = (void (*) (ValaCodeVisitor*, ValaUnaryExpression*)) vala_ccode_base_module_real_visit_unary_expression;
38276 	((ValaCCodeBaseModuleClass *) klass)->deserialize_expression = (ValaCCodeExpression* (*) (ValaCCodeBaseModule*, ValaDataType*, ValaCCodeExpression*, ValaCCodeExpression*, ValaCCodeExpression*, gboolean*)) vala_ccode_base_module_real_deserialize_expression;
38277 	((ValaCCodeBaseModuleClass *) klass)->serialize_expression = (ValaCCodeExpression* (*) (ValaCCodeBaseModule*, ValaDataType*, ValaCCodeExpression*)) vala_ccode_base_module_real_serialize_expression;
38278 	((ValaCodeVisitorClass *) klass)->visit_cast_expression = (void (*) (ValaCodeVisitor*, ValaCastExpression*)) vala_ccode_base_module_real_visit_cast_expression;
38279 	((ValaCodeVisitorClass *) klass)->visit_named_argument = (void (*) (ValaCodeVisitor*, ValaNamedArgument*)) vala_ccode_base_module_real_visit_named_argument;
38280 	((ValaCodeVisitorClass *) klass)->visit_pointer_indirection = (void (*) (ValaCodeVisitor*, ValaPointerIndirection*)) vala_ccode_base_module_real_visit_pointer_indirection;
38281 	((ValaCodeVisitorClass *) klass)->visit_addressof_expression = (void (*) (ValaCodeVisitor*, ValaAddressofExpression*)) vala_ccode_base_module_real_visit_addressof_expression;
38282 	((ValaCodeVisitorClass *) klass)->visit_reference_transfer_expression = (void (*) (ValaCodeVisitor*, ValaReferenceTransferExpression*)) vala_ccode_base_module_real_visit_reference_transfer_expression;
38283 	((ValaCodeVisitorClass *) klass)->visit_binary_expression = (void (*) (ValaCodeVisitor*, ValaBinaryExpression*)) vala_ccode_base_module_real_visit_binary_expression;
38284 	((ValaCodeVisitorClass *) klass)->visit_type_check = (void (*) (ValaCodeVisitor*, ValaTypeCheck*)) vala_ccode_base_module_real_visit_type_check;
38285 	((ValaCodeVisitorClass *) klass)->visit_lambda_expression = (void (*) (ValaCodeVisitor*, ValaLambdaExpression*)) vala_ccode_base_module_real_visit_lambda_expression;
38286 	((ValaCCodeBaseModuleClass *) klass)->get_implicit_cast_expression = (ValaCCodeExpression* (*) (ValaCCodeBaseModule*, ValaCCodeExpression*, ValaDataType*, ValaDataType*, ValaCodeNode*)) vala_ccode_base_module_real_get_implicit_cast_expression;
38287 	((ValaCCodeBaseModuleClass *) klass)->create_type_check_statement = (void (*) (ValaCCodeBaseModule*, ValaCodeNode*, ValaDataType*, ValaTypeSymbol*, gboolean, const gchar*)) vala_ccode_base_module_real_create_type_check_statement;
38288 	((ValaCodeVisitorClass *) klass)->visit_class = (void (*) (ValaCodeVisitor*, ValaClass*)) vala_ccode_base_module_real_visit_class;
38289 	((ValaCCodeBaseModuleClass *) klass)->generate_dynamic_method_wrapper = (void (*) (ValaCCodeBaseModule*, ValaDynamicMethod*)) vala_ccode_base_module_real_generate_dynamic_method_wrapper;
38290 	((ValaCCodeBaseModuleClass *) klass)->method_has_wrapper = (gboolean (*) (ValaCCodeBaseModule*, ValaMethod*)) vala_ccode_base_module_real_method_has_wrapper;
38291 	((ValaCCodeBaseModuleClass *) klass)->get_param_spec_cexpression = (ValaCCodeExpression* (*) (ValaCCodeBaseModule*, ValaProperty*)) vala_ccode_base_module_real_get_param_spec_cexpression;
38292 	((ValaCCodeBaseModuleClass *) klass)->get_param_spec = (ValaCCodeExpression* (*) (ValaCCodeBaseModule*, ValaProperty*)) vala_ccode_base_module_real_get_param_spec;
38293 	((ValaCCodeBaseModuleClass *) klass)->get_signal_creation = (ValaCCodeExpression* (*) (ValaCCodeBaseModule*, ValaSignal*, ValaObjectTypeSymbol*)) vala_ccode_base_module_real_get_signal_creation;
38294 	((ValaCCodeBaseModuleClass *) klass)->get_value_getter_function = (ValaCCodeExpression* (*) (ValaCCodeBaseModule*, ValaDataType*)) vala_ccode_base_module_real_get_value_getter_function;
38295 	((ValaCCodeBaseModuleClass *) klass)->get_value_setter_function = (ValaCCodeExpression* (*) (ValaCCodeBaseModule*, ValaDataType*)) vala_ccode_base_module_real_get_value_setter_function;
38296 	((ValaCCodeBaseModuleClass *) klass)->get_value_taker_function = (ValaCCodeExpression* (*) (ValaCCodeBaseModule*, ValaDataType*)) vala_ccode_base_module_real_get_value_taker_function;
38297 	((ValaCCodeBaseModuleClass *) klass)->register_dbus_info = (void (*) (ValaCCodeBaseModule*, ValaCCodeBlock*, ValaObjectTypeSymbol*)) vala_ccode_base_module_real_register_dbus_info;
38298 	((ValaCCodeBaseModuleClass *) klass)->get_dynamic_property_getter_cname = (gchar* (*) (ValaCCodeBaseModule*, ValaDynamicProperty*)) vala_ccode_base_module_real_get_dynamic_property_getter_cname;
38299 	((ValaCCodeBaseModuleClass *) klass)->get_dynamic_property_setter_cname = (gchar* (*) (ValaCCodeBaseModule*, ValaDynamicProperty*)) vala_ccode_base_module_real_get_dynamic_property_setter_cname;
38300 	((ValaCCodeBaseModuleClass *) klass)->get_dynamic_signal_cname = (gchar* (*) (ValaCCodeBaseModule*, ValaDynamicSignal*)) vala_ccode_base_module_real_get_dynamic_signal_cname;
38301 	((ValaCCodeBaseModuleClass *) klass)->get_dynamic_signal_connect_wrapper_name = (gchar* (*) (ValaCCodeBaseModule*, ValaDynamicSignal*)) vala_ccode_base_module_real_get_dynamic_signal_connect_wrapper_name;
38302 	((ValaCCodeBaseModuleClass *) klass)->get_dynamic_signal_connect_after_wrapper_name = (gchar* (*) (ValaCCodeBaseModule*, ValaDynamicSignal*)) vala_ccode_base_module_real_get_dynamic_signal_connect_after_wrapper_name;
38303 	((ValaCCodeBaseModuleClass *) klass)->get_dynamic_signal_disconnect_wrapper_name = (gchar* (*) (ValaCCodeBaseModule*, ValaDynamicSignal*)) vala_ccode_base_module_real_get_dynamic_signal_disconnect_wrapper_name;
38304 	((ValaCCodeBaseModuleClass *) klass)->get_array_length_cname = (gchar* (*) (ValaCCodeBaseModule*, const gchar*, gint)) vala_ccode_base_module_real_get_array_length_cname;
38305 	((ValaCCodeBaseModuleClass *) klass)->get_variable_array_length_cname = (gchar* (*) (ValaCCodeBaseModule*, ValaVariable*, gint)) vala_ccode_base_module_real_get_variable_array_length_cname;
38306 	((ValaCCodeBaseModuleClass *) klass)->get_array_length_cexpression = (ValaCCodeExpression* (*) (ValaCCodeBaseModule*, ValaExpression*, gint)) vala_ccode_base_module_real_get_array_length_cexpression;
38307 	((ValaCCodeBaseModuleClass *) klass)->get_array_length_cvalue = (ValaCCodeExpression* (*) (ValaCCodeBaseModule*, ValaTargetValue*, gint)) vala_ccode_base_module_real_get_array_length_cvalue;
38308 	((ValaCCodeBaseModuleClass *) klass)->get_array_size_cname = (gchar* (*) (ValaCCodeBaseModule*, const gchar*)) vala_ccode_base_module_real_get_array_size_cname;
38309 	((ValaCCodeBaseModuleClass *) klass)->add_simple_check = (void (*) (ValaCCodeBaseModule*, ValaCodeNode*, gboolean)) vala_ccode_base_module_real_add_simple_check;
38310 	((ValaCCodeBaseModuleClass *) klass)->generate_ready_function = (gchar* (*) (ValaCCodeBaseModule*, ValaMethod*)) vala_ccode_base_module_real_generate_ready_function;
38311 	vala_ccode_base_module_ccode_attribute_cache_index = vala_code_node_get_attribute_cache_index ();
38312 }
38313 
38314 static void
vala_ccode_base_module_instance_init(ValaCCodeBaseModule * self,gpointer klass)38315 vala_ccode_base_module_instance_init (ValaCCodeBaseModule * self,
38316                                       gpointer klass)
38317 {
38318 	ValaCCodeBaseModuleEmitContext* _tmp0_;
38319 	GEqualFunc _tmp1_;
38320 	ValaArrayList* _tmp2_;
38321 	GEqualFunc _tmp3_;
38322 	ValaArrayList* _tmp4_;
38323 	GHashFunc _tmp5_;
38324 	GEqualFunc _tmp6_;
38325 	GEqualFunc _tmp7_;
38326 	ValaHashMap* _tmp8_;
38327 	GHashFunc _tmp9_;
38328 	GEqualFunc _tmp10_;
38329 	GEqualFunc _tmp11_;
38330 	ValaHashMap* _tmp12_;
38331 	ValaVoidType* _tmp13_;
38332 	self->priv = vala_ccode_base_module_get_instance_private (self);
38333 	_tmp0_ = vala_ccode_base_module_emit_context_new (NULL);
38334 	self->emit_context = _tmp0_;
38335 	_tmp1_ = g_direct_equal;
38336 	_tmp2_ = vala_array_list_new (VALA_CCODE_BASE_MODULE_TYPE_EMIT_CONTEXT, (GBoxedCopyFunc) vala_ccode_base_module_emit_context_ref, (GDestroyNotify) vala_ccode_base_module_emit_context_unref, _tmp1_);
38337 	self->priv->emit_context_stack = (ValaList*) _tmp2_;
38338 	self->current_line = NULL;
38339 	_tmp3_ = g_direct_equal;
38340 	_tmp4_ = vala_array_list_new (VALA_TYPE_CCODE_LINE_DIRECTIVE, (GBoxedCopyFunc) vala_ccode_node_ref, (GDestroyNotify) vala_ccode_node_unref, _tmp3_);
38341 	self->priv->line_directive_stack = (ValaList*) _tmp4_;
38342 	self->next_regex_id = 0;
38343 	self->priv->next_block_id = 0;
38344 	_tmp5_ = g_direct_hash;
38345 	_tmp6_ = g_direct_equal;
38346 	_tmp7_ = g_direct_equal;
38347 	_tmp8_ = vala_hash_map_new (VALA_TYPE_BLOCK, (GBoxedCopyFunc) vala_code_node_ref, (GDestroyNotify) vala_code_node_unref, G_TYPE_INT, NULL, NULL, _tmp5_, _tmp6_, _tmp7_);
38348 	self->priv->block_map = (ValaMap*) _tmp8_;
38349 	_tmp9_ = g_direct_hash;
38350 	_tmp10_ = g_direct_equal;
38351 	_tmp11_ = g_direct_equal;
38352 	_tmp12_ = vala_hash_map_new (VALA_TYPE_METHOD, NULL, NULL, G_TYPE_INT, NULL, NULL, _tmp9_, _tmp10_, _tmp11_);
38353 	self->priv->method_inner_error_var_count = (ValaMap*) _tmp12_;
38354 	_tmp13_ = vala_void_type_new (NULL);
38355 	self->void_type = (ValaDataType*) _tmp13_;
38356 	self->in_plugin = FALSE;
38357 	self->priv->next_variant_function_id = 0;
38358 }
38359 
38360 static void
vala_ccode_base_module_finalize(ValaCodeVisitor * obj)38361 vala_ccode_base_module_finalize (ValaCodeVisitor * obj)
38362 {
38363 	ValaCCodeBaseModule * self;
38364 	self = G_TYPE_CHECK_INSTANCE_CAST (obj, VALA_TYPE_CCODE_BASE_MODULE, ValaCCodeBaseModule);
38365 	_vala_code_context_unref0 (self->priv->_context);
38366 	_vala_code_node_unref0 (self->root_symbol);
38367 	_vala_ccode_base_module_emit_context_unref0 (self->emit_context);
38368 	_vala_iterable_unref0 (self->priv->emit_context_stack);
38369 	_vala_ccode_node_unref0 (self->current_line);
38370 	_vala_iterable_unref0 (self->priv->line_directive_stack);
38371 	_vala_ccode_file_unref0 (self->header_file);
38372 	_vala_ccode_file_unref0 (self->internal_header_file);
38373 	_vala_ccode_file_unref0 (self->cfile);
38374 	_vala_ccode_base_module_emit_context_unref0 (self->class_init_context);
38375 	_vala_ccode_base_module_emit_context_unref0 (self->base_init_context);
38376 	_vala_ccode_base_module_emit_context_unref0 (self->class_finalize_context);
38377 	_vala_ccode_base_module_emit_context_unref0 (self->base_finalize_context);
38378 	_vala_ccode_base_module_emit_context_unref0 (self->instance_init_context);
38379 	_vala_ccode_base_module_emit_context_unref0 (self->instance_finalize_context);
38380 	_vala_ccode_node_unref0 (self->param_spec_struct);
38381 	_vala_ccode_node_unref0 (self->closure_struct);
38382 	_vala_ccode_node_unref0 (self->prop_enum);
38383 	_vala_ccode_node_unref0 (self->signal_enum);
38384 	_vala_iterable_unref0 (self->user_marshal_set);
38385 	_vala_iterable_unref0 (self->predefined_marshal_set);
38386 	_vala_map_unref0 (self->priv->block_map);
38387 	_vala_map_unref0 (self->priv->method_inner_error_var_count);
38388 	_vala_code_node_unref0 (self->void_type);
38389 	_vala_code_node_unref0 (self->bool_type);
38390 	_vala_code_node_unref0 (self->char_type);
38391 	_vala_code_node_unref0 (self->uchar_type);
38392 	_vala_code_node_unref0 (self->unichar_type);
38393 	_vala_code_node_unref0 (self->short_type);
38394 	_vala_code_node_unref0 (self->ushort_type);
38395 	_vala_code_node_unref0 (self->int_type);
38396 	_vala_code_node_unref0 (self->uint_type);
38397 	_vala_code_node_unref0 (self->long_type);
38398 	_vala_code_node_unref0 (self->ulong_type);
38399 	_vala_code_node_unref0 (self->int8_type);
38400 	_vala_code_node_unref0 (self->uint8_type);
38401 	_vala_code_node_unref0 (self->int16_type);
38402 	_vala_code_node_unref0 (self->uint16_type);
38403 	_vala_code_node_unref0 (self->int32_type);
38404 	_vala_code_node_unref0 (self->uint32_type);
38405 	_vala_code_node_unref0 (self->int64_type);
38406 	_vala_code_node_unref0 (self->uint64_type);
38407 	_vala_code_node_unref0 (self->size_t_type);
38408 	_vala_code_node_unref0 (self->string_type);
38409 	_vala_code_node_unref0 (self->regex_type);
38410 	_vala_code_node_unref0 (self->float_type);
38411 	_vala_code_node_unref0 (self->double_type);
38412 	_vala_code_node_unref0 (self->pointer_type);
38413 	_vala_code_node_unref0 (self->gtype_type);
38414 	_vala_code_node_unref0 (self->gobject_type);
38415 	_vala_code_node_unref0 (self->gerror_type);
38416 	_vala_code_node_unref0 (self->glist_type);
38417 	_vala_code_node_unref0 (self->gslist_type);
38418 	_vala_code_node_unref0 (self->gnode_type);
38419 	_vala_code_node_unref0 (self->gqueue_type);
38420 	_vala_code_node_unref0 (self->gvaluearray_type);
38421 	_vala_code_node_unref0 (self->gstringbuilder_type);
38422 	_vala_code_node_unref0 (self->garray_type);
38423 	_vala_code_node_unref0 (self->gbytearray_type);
38424 	_vala_code_node_unref0 (self->gptrarray_type);
38425 	_vala_code_node_unref0 (self->gthreadpool_type);
38426 	_vala_code_node_unref0 (self->gquark_type);
38427 	_vala_code_node_unref0 (self->gvalue_type);
38428 	_vala_code_node_unref0 (self->gvariant_type);
38429 	_vala_code_node_unref0 (self->mutex_type);
38430 	_vala_code_node_unref0 (self->gmutex_type);
38431 	_vala_code_node_unref0 (self->grecmutex_type);
38432 	_vala_code_node_unref0 (self->grwlock_type);
38433 	_vala_code_node_unref0 (self->gcond_type);
38434 	_vala_code_node_unref0 (self->gsource_type);
38435 	_vala_code_node_unref0 (self->type_module_type);
38436 	_vala_code_node_unref0 (self->dbus_proxy_type);
38437 	_vala_code_node_unref0 (self->gtk_widget_type);
38438 	_vala_code_node_unref0 (self->delegate_target_type);
38439 	_vala_code_node_unref0 (self->delegate_target_destroy_type);
38440 	_vala_code_node_unref0 (self->priv->destroy_notify);
38441 	_vala_code_node_unref0 (self->priv->gerror);
38442 	_g_free0 (self->module_init_param_name);
38443 	_vala_iterable_unref0 (self->wrappers);
38444 	_vala_iterable_unref0 (self->priv->generated_external_symbols);
38445 	VALA_CODE_VISITOR_CLASS (vala_ccode_base_module_parent_class)->finalize (obj);
38446 }
38447 
38448 /**
38449  * Code visitor generating C Code.
38450  */
38451 static GType
vala_ccode_base_module_get_type_once(void)38452 vala_ccode_base_module_get_type_once (void)
38453 {
38454 	static const GTypeInfo g_define_type_info = { sizeof (ValaCCodeBaseModuleClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) vala_ccode_base_module_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (ValaCCodeBaseModule), 0, (GInstanceInitFunc) vala_ccode_base_module_instance_init, NULL };
38455 	GType vala_ccode_base_module_type_id;
38456 	vala_ccode_base_module_type_id = g_type_register_static (VALA_TYPE_CODE_GENERATOR, "ValaCCodeBaseModule", &g_define_type_info, G_TYPE_FLAG_ABSTRACT);
38457 	ValaCCodeBaseModule_private_offset = g_type_add_instance_private (vala_ccode_base_module_type_id, sizeof (ValaCCodeBaseModulePrivate));
38458 	return vala_ccode_base_module_type_id;
38459 }
38460 
38461 GType
vala_ccode_base_module_get_type(void)38462 vala_ccode_base_module_get_type (void)
38463 {
38464 	static volatile gsize vala_ccode_base_module_type_id__volatile = 0;
38465 	if (g_once_init_enter (&vala_ccode_base_module_type_id__volatile)) {
38466 		GType vala_ccode_base_module_type_id;
38467 		vala_ccode_base_module_type_id = vala_ccode_base_module_get_type_once ();
38468 		g_once_init_leave (&vala_ccode_base_module_type_id__volatile, vala_ccode_base_module_type_id);
38469 	}
38470 	return vala_ccode_base_module_type_id__volatile;
38471 }
38472 
38473 static void
_vala_array_destroy(gpointer array,gint array_length,GDestroyNotify destroy_func)38474 _vala_array_destroy (gpointer array,
38475                      gint array_length,
38476                      GDestroyNotify destroy_func)
38477 {
38478 	if ((array != NULL) && (destroy_func != NULL)) {
38479 		gint i;
38480 		for (i = 0; i < array_length; i = i + 1) {
38481 			if (((gpointer*) array)[i] != NULL) {
38482 				destroy_func (((gpointer*) array)[i]);
38483 			}
38484 		}
38485 	}
38486 }
38487 
38488 static void
_vala_array_free(gpointer array,gint array_length,GDestroyNotify destroy_func)38489 _vala_array_free (gpointer array,
38490                   gint array_length,
38491                   GDestroyNotify destroy_func)
38492 {
38493 	_vala_array_destroy (array, array_length, destroy_func);
38494 	g_free (array);
38495 }
38496 
38497 static gint
_vala_array_length(gpointer array)38498 _vala_array_length (gpointer array)
38499 {
38500 	gint length;
38501 	length = 0;
38502 	if (array) {
38503 		while (((gpointer*) array)[length]) {
38504 			length++;
38505 		}
38506 	}
38507 	return length;
38508 }
38509 
38510